Content-Type: multipart/related; start=; boundary=----------0K0dULQyTRbx2FYaKjqvM4 Content-Location: http://forum.qip.ru/showthread.php?t=34274&page=5 Subject: =?utf-8?Q?VKontakte=20Module=20-=20=D0=A1=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0=205=20-=20QIP=20Forum?= MIME-Version: 1.0 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=showthread.htm Content-Type: text/html; charset=windows-1251; name=showthread.htm Content-Id: Content-Location: http://forum.qip.ru/showthread.php?t=34274&page=5 Content-Transfer-Encoding: 8bit VKontakte Module - Страница 5 - QIP Forum
QIP Home QIP Forum

Вернуться   QIP Forum > Все для QIP Infium > QIP Infium. Доступные модули и утилиты. Plugins.
Добро пожаловать, opiums
Ваш последний визит: 01.03.2010 в 18:31
Личные сообщения: Новых 0, всего 4.

QIP Infium. Доступные модули и утилиты. Plugins. Здесь постить сами модули(плагины), утилиты и темы для их обсуждения.

Ответ
 
Опции темы Поиск в этой теме Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00. Опции просмотра
Старый 07.04.2009, 00:51   #1
QIP Newcomer
 
Аватар для AngelBoy
 
Регистрация: 15.05.2007
Сообщений: 42
Отправить сообщение для AngelBoy с помощью ICQ
Quote selected
Exclamation Плагин ВКонтакте

Текущая версия Inform: 0.3.2
Текущая версия PRO: Пока нету

Плагин оповещения о новых событиях, для известной социальной сети ВКонтакте

Реализовано/планируется:
  • Оповещение о новых событиях.
  • Оповещение имён тех от кого сообщения, или заявки в друзья.
  • Режим экономии трафика.
  • Запуск плагина без показа формы настроек.
  • Возможность прятать контакт если нет ничего нового(опционально).
  • Работа через прокси.
Inform версии
PRO версии

P.S. За сохранность данных(логин,пароль) ответственности не несу.


История версий


Ссылки:
Группа плагина ВКонтакте
Инструкция по установке плагина
Скачать плагин
Миниатюры
Нажмите на изображение для увеличения
Название: 0.png
Просмотров: 286
Размер:	20.7 Кб
ID:	17492  Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 151
Размер:	23.3 Кб
ID:	17493  Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 102
Размер:	19.4 Кб
ID:	17494  Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 169
Размер:	46.2 Кб
ID:	17495  
Вложения
Тип файла: rar vk_inform_src.rar (783.1 Кб, 176 просмотров)
Тип файла: rar vk_inform.rar (725.2 Кб, 93 просмотров)

Последний раз редактировалось AngelBoy, Сегодня в 06:56. Причина: Новая версия!
AngelBoy вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый Сегодня, 10:29   #61
QIP Newcomer
 
Регистрация: 29.01.2008
Сообщений: 3
Отправить сообщение для Pito4ek с помощью ICQ
Quote selected
По умолчанию

спасибо за плагин очень нужная вещь
но вот нашел небольшой баг с прокси
Миниатюры
Нажмите на изображение для увеличения
Название: баг с прокси.JPG
Просмотров: 40
Размер:	40.4 Кб
ID:	17529  
Pito4ek вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый Сегодня, 16:28   #62
QIP Newcomer
 
Регистрация: 24.02.2010
Сообщений: 8
Quote selected
По умолчанию

В окне чата кнопка "закрыть" внизу не работает. Или сднелайте или вообще уберите, а то три кнопки закрывания получается - крестик, кнопка вверху возле звуаа и эта кнопка внизу.
И можно прокрутку списка контактов пожирнее сделать.
redwo1f вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый Сегодня, 17:15   #63
QIP Newcomer
 
Аватар для AngelBoy
 
Регистрация: 15.05.2007
Сообщений: 42
Отправить сообщение для AngelBoy с помощью ICQ
Quote selected
По умолчанию

Pito4ek, да серьёзный баг=)
redwo1f, в общем-то те все кнопки с сайта.
Я просто сделал встроенное окно браузера.
AngelBoy вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Sponsored Links
Старый Сегодня, 23:19   #65
QIP Newcomer
 
Аватар для opiums
 
Регистрация: 04.01.2009
Сообщений: 22
Отправить сообщение для opiums с помощью ICQ Send Message via Jabber to opiums
Quote selected
По умолчанию

может быть я не нашёл такого, но вот мне очень сильно не хватает оповещения о новых сообщениях на стене)
opiums на форуме Пожаловаться на это сообщение   Редактировать/удалить сообщение Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Ответ


Быстрый ответ
Сообщение:
Убрать форматирование текста
Полужирный
Курсив
Подчёркнутый

Вставить рисунок
Вставить тег цитаты [QUOTE] вокруг выделенного текста
 
Уменьшить размер
Увеличить размер
Опции


Ваши права в разделе
Вы можете создавать темы
Вы можете отвечать на сообщения
Вы можете прикреплять файлы
Вы можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +7, время: 23:27.


Работает на vBulletin®.
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
©2004 - 2008 QIP.RU
------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=bg.jpg Content-Type: image/jpeg; name=bg.jpg Content-Location: http://forum.qip.ru/qipstyle/bg.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2Jl AGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQ DA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AA EQgAEAAQAwERAAIRAQMRAf/EAFwAAQEAAAAAAAAAAAAAAAAAAAAIAQEBAQAAAAAA AAAAAAAAAAAAAgUQAAAFBAMBAAAAAAAAAAAAAAABESFRQWGxwXGB4bIRAQEBAQAA AAAAAAAAAAAAAADwwWH/2gAMAwEAAhEDEQA/AKVw/F2iSGdWpMMSe/JhWA61Ve1L eQroUXTXaJIK0f/Z ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=bgl.gif Content-Type: image/gif; name=bgl.gif Content-Location: http://forum.qip.ru/qipstyle/bgl.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAOYAAPj89/3+/PX69Pr9+fP58fT68vX68/z9+/z9+/P48fT68vv9 +vv9+/v9+vv9+vn9+Pj79/v9+/T48vT68vv9+vL48ff79fv9+vX78/v9+fv9+vr9 +fT68vv9+vr9+v3+/Pj79/X68/f79f3+/fb79fX79Pr9+vT68vL48PT68vf79ff7 9vj89/P48fT58vz9+/z9+/r9+fb79Pf79vX78/3+/PT68vv9+/T58vT58vf79fr9 +fb69fP68f3+/PL48fP68fz9+/n9+P3+/fb79Pj79/L48ff79fn89/f79fb79fj7 9/X68/P48fj89/f79fL48ff79ff79fr9+vv9+/n89/j89/f79/f79vn8+PT58/f7 9/f79fr9+ff79fj89/T48vn8+Pn7+Pr9+fz9+/j79/v9+/L48Pr9+ff79v7+/fn8 9/j89/n89/3+/PT48vv9+vr9+f3+/fz9+/X79Pn8+fL58fX79Pv9+vf79fb69fT4 8vr9+bOzs7Ozs7OzsywAAAAAEAAQAAAH/4AKIwAVDgMEZR80BR0DNkcIMgJzEG8L Gi5PBytgHxlnYS8CBWQQCV0NIVs3KjgNFEYWASITCAAJHm4EBjBXLW0eOQABAgIB EBIPG0xpcHolDBE5FjVEBlRrUBoLWjoHYgkZDwQgDCQYZlYKFA0tWRF0KBdDBSxy SSl4AAQbh+VCBdhEADJDzR0FAQgZIrDkwIwfMRyxeKFEgC0cDjRwoDEgjoEYCzis qDEqCKENDbBguIDGThUfLmRJqXXLxBQRGPg4OXHhgYRhxY41ieKAi4EDO1BkYKAg DwwZKW7cqtOhBI8DX/aMecChCAISJzqYMABgwAQvC5BIoDCih44AKgNCBAIAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=line2.gif Content-Type: image/gif; name=line2.gif Content-Location: http://forum.qip.ru/qipstyle/line2.gif Content-Transfer-Encoding: Base64 R0lGODlhCQAoAPcAAOXl5fT09O7u7vX19eHh4fHx8cjIyPLy8tTU1Obm5tnZ2e3t 7dDQ0M3NzfPz88PDw93d3evr68HBwbe3t7+/v+jo6Onp6cXFxQcHBwcHBwcHBwcH BwcHBwcHBwcHBwcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAJACgAAAiMAAEIHEiwoMGDCBMmTMCw YUMLECNGjECxYkUBGDNq3MiRY4GPIEEeGEmSZICTKFOqRDmgpcuXMGPGXInSgc2b N2meDMlzgc+fPztirEC0aFECSJMmhcC0aVMFUKNGRUC1alUGWLNmbcC1a1cDYMOG vUC2bNkHaNOmlcC2bVsKcOPGnUC3bl2xeJXqDQgAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=line3.gif Content-Type: image/gif; name=line3.gif Content-Location: http://forum.qip.ru/qipstyle/line3.gif Content-Transfer-Encoding: Base64 R0lGODlhHAA0APcAAM/3rafLjs72rKXJjMz0q6rOkLbbmbnfnMDmobLXlr/loMry qajMjrPYl7jem8Hnoq3RkqXIjLXambTZmK7Sk6bJjabKjavPka/TlM31q6bJjLfd msvyqq/UlMrxqazQkcnwqM71rM30q872rafKjc31rMXspbrgnbTZl6nNj6zQkrzi n7fcmsbtpsjvp8TqpMLoosPpo8fup67Tk6jMj6jLjrjdm7HWlanNkKvQkbvhnb/m obXamKnMj8PqpMbtpcTrpcjwqLHVlbDVlbDUlL3jn8z0qs/2rcTrpMzzq8jvqMXr pcnxqbvgncLoo8fvp77koMfupsvzqr7kn8vzq8PppKrPkK3SkszzqqbLjafLjb7l oMbuprzinqbKjM73ranOj6nOkMnvqLzhnrLWlsPqo8vyqbPXl8vzqbvinbHWlrbc mbrfnL3insjup8nxqLvinsbup6XJjbfcm6zRkbPYlqjNj7nfm6rNkK3Sk8/2rLzj nqvPkM30rMjwp77jn832rK3Rk73kn8Lpo6vOkLvgnMbspcftp7/koKzRkrrhncrz qsHnocDnorDUlb3jnsXtprbbmrXbmafKjq/Ulcbtp7LYl6/VlMPrpMHoorDVlMXs pLrgnLvhnrHVlq/Tk8v0qsXtpcnwqanMjr/lobDVlsTspb7joKfMjsHooc73rLPZ mMfvqMHporHXlqrOj7DWlcftpsTqpb7locHpo8rwqKrNj8ryqrnem8Dnoa3Tk8nw p8LppKjLj6zSk8Hoo6vQkKnLj7zinbbcmsz1rM71q6fJjcPqpazRk7rfm8Lqo8bs psv0q6jNjsDmoLjdnMrxqMrxqsLposPrpabIjL3joLndm6nNjq3Qks32q872q73i n7Tambzhna7TksDoorXbmMDooa7SkqzPkc/3rLLXlwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAcADQAAAj/AAEIHEiwoMGDCBMqXMiw oUOER/R8OTLiC7kRRyiOkKhKFYAjH7/oASBSAAABIUaMEMBSwMoQLVW2ZLky5pES MEOEKFYCUAadPUv0FJAtQwltgEL81BlChNA+GTIQIyAiqtWofUSIyLpVqFERBAgY CUsWrIgkScgaMZIWLNmwIqRIoYKWLjO2VORi2WsElBEqWKgYwSIFCygqt8xwWMxh keLFZtAs4iCFQ+TFi9BERrN4wQIPnj17GA269IJbokN/Bh3tTa1ab0CA8MAkNog3 TEQxAVGbNwjduz2AgOZHTBA/SoIoSW58F3PZykH4CeICuRjjMmS4eKKd1RM3LsC7 /xgf3oWMJ6yUfHdznnuUQ7FicakUJYqMOO/jcJHBpQX9SvxxcUgc+P0QSguQGPLD Dy208AMkP5jgoAkMNriMgpC0cKAhJpgAxBJAhAiECUuU2KEpS2wyIombLGGKhyZs IssLPmCChA8vvICEjjlicgyOO9qIxDQvzAgEEmX4UEYMg8QQQxU+VBHDkrxA+aQy UioZgw9PlgEDDE44kQkMv4A5iJkwtAIDLdK0cqYTa4Ip5gN0ftMInQ80kkoqeD7A SCZ4MvJALnc+EA4jOyCQCwKJ7pAoo84gIOmkkj5qKQIKkIKIApxuusWmnM4SqgJb kFoqKZyWWsQfU5wyxaqrQv8BhSBTCDLrFFBUg6sgfxTxKhSndFHECns8sscKbRTb BbIrILtss9swW0Syj+gAhzBwpKFDF2OkkcYY2Y7RSSdj6GCutd18q0MnXRSiCCcn xFtIvJwookgTTcSbb74nNMGJDvsWcsDABN9xABsDI3zAHXewYTAbCidD8AEO4OKA AzbYgPHGF+NigzUaX7yxxs9cvMEcG7DAQsorn5zyBi+zgLINMsPMsgEGrLFGJAbw 3DPOBgwD9Bo5Az20ATxIkDQPkigtATdJSyABOJJE3bTUWPPAwwQTrIIC11+jIDbX YIdN9gQoeP11A3XU0QDbb5/xdgNnWPK22w3YLbfedCf/kAAZrvjttxoJBC743wmU gzjhZJDhdymeCKGGEELAMsQNsEh+w+ZCbH5DKTd0PoQnk3syxCUdDKE6JR1c4ggR lxChyRCUEOGII7UTQUQHmvBOxCcdfIJBB8MXj8EMHSSPwfHLE9+88BhQMIMuFFAg TvXeUC999TNsP0P3eXCfRx4QXJHIFRCkH0gg6V+BDPvtlw9BIOhDkIcvEKigAh0f 0EHH/on4QAD1h40P6M+AH0ggBAyogg9cwIEXiCAfckDBHIxjghSMoAYj+AFgRDAH fCBEAUZYACvwwQojRGEJU0jCAogwhYQIAx5wEIZX4AEPYSgAGHCwQ1u8Yoc0tAUP wWeowzDgIAU9sEMKkDiKHjTDDj1AYgpGkQIapACK10BiFK1oBwZ4MRi9YAANakAD GnjRi2WsgRjPeEYyMiAAAUAFHOcIRzkGoAYB0AIctYDHGvTxjgGwAAlIoAUSZGES JJjEJCyQhUAaMgCDzMIg80iCAGRBCxWwQCY1oEkLeKECFfDCJ41Bgkx6EpSm9IIF LKCBAQxAAxWQgytdKQcN2PKWGpADKC3wyli+MgKujAAwI0CNYQ5AmMY85jGB2Uph BgQAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=line5.gif Content-Type: image/gif; name=line5.gif Content-Location: http://forum.qip.ru/qipstyle/line5.gif Content-Transfer-Encoding: Base64 R0lGODlhBAAjANUAAM3Nzfn5+c7Ozubm5vX19f7//tLS0v////z8/evr69vb28/P z9DQ0NHR0ezr6/7+/9LT0+Dh4eHh4Pz8/Nzb283OztLS0/X19v38/PDx8fHw8dPS 0tfW1tbX1//+/ubm5eHg4ebl5s7Pz9DR0fDw8PDw8fHx8NbW1uDh4NHS0tvc2+Hg 4Nzb3M/Q0ODg4PHw8Nvb3Ovr7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAEACMAAAZjQAVFAZNEUK7BIDSIORwJ DcmUIRAuhIA2gJggMIXHo3AoHwpozwSDQGwDWGumpHkl7g7l4CNZRUAqLEIcJx0c BhAWG4iKBgYpBg0NIw0MDC0MCwsiCwICFZ6fAgCkpaanqKlBADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=line1.gif Content-Type: image/gif; name=line1.gif Content-Location: http://forum.qip.ru/qipstyle/line1.gif Content-Transfer-Encoding: Base64 R0lGODlhAwBYAPcAAND4rsXtp871rM/3rcHopMTrpsryqrjencjvqbngns72rbbc nL7mo77kob7losbuqKzRlbzjocfuqLrioLvioLnfnsnwqbPZm8nxqbHXmc30rMLp pLrhn9D/rsvzq8Pqpb/mo8Tspsz0rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAADAFgAQAhyADsI5ECQgMEHCEUoBMCw ocOHDRdIbECxgEUMGBVohMjxYYaPFUJSGMmg5IaTIVIiWGmgpYCXA2J2nElzJoSb F3Ie2Jmg54SfEYI6GAqiqEECH5JaLBCgqYSnFqK2NOChqoarLwXEHFCzq9evYDmu RBAQADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_global.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_global.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_global.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEhh bmRsZSBGaXJlYnVnIGNhbGxzIHdoZW4gRmlyZWJ1ZyBpcyBub3QgYXZhaWxhYmxl IChnZXRmaXJlYnVnLmNvbSkKKi8KaWYgKCF3aW5kb3cuY29uc29sZSB8fCAhY29u c29sZS5maXJlYnVnKQp7Cgl3aW5kb3cuY29uc29sZSA9IHt9OwoJdmFyIG5hbWVz ID0gWyJsb2ciLCAiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgImFz c2VydCIsICJkaXIiLCAiZGlyeG1sIiwgImdyb3VwIiwgImdyb3VwRW5kIiwgInRp bWUiLCAidGltZUVuZCIsICJjb3VudCIsICJ0cmFjZSIsICJwcm9maWxlIiwgInBy b2ZpbGVFbmQiXTsKCWZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyAr K2kpIHdpbmRvdy5jb25zb2xlW25hbWVzW2ldXSA9IGZ1bmN0aW9uKCkge307Cn0K Ci8qKgoqIEhhbmRsZSBZVUkgY3VzdG9tIGV2ZW50IGNhbGxzIHdoZW4gWVVJIGlz IG5vdCBhdmFpbGFibGUgKGNsaWVudHNjcmlwdC95dWkveWFob28tZG9tLWV2ZW50 LmpzKQoqLwppZiAodHlwZW9mIFlBSE9PID09ICJ1bmRlZmluZWQiKQp7CglmdW5j dGlvbiBudWxsX2V2ZW50KCkgeyB0aGlzLmZpcmUgPSBmdW5jdGlvbigpIHt9OyB0 aGlzLnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge307IH07Cn0KCi8qKgoqIFNldHVw IFZhcmlhYmxlcwoqCiogQHZhcglzdHJpbmcJU0VTU0lPTlVSTCAtIHN0b3JlcyB0 aGUgc2Vzc2lvbiBVUkwKKiBAdmFyCXN0cmluZwlTRUNVUklUWVRPS0VOIC0gc3Rv cmVzIGFuIGFudGktQ1NSRiB2YWx1ZQoqIEB2YXIJYXJyYXkJdmJwaHJhc2UgLSBz dG9yZXMgdGV4dCBwaHJhc2VzCiogQHZhcglhcnJheQl2Ql9FZGl0b3IgLSBhcnJh eSBvZiB2Ql9UZXh0X0VkaXRvciBvYmplY3RzCiogQHZhcglib29sZWFuCWlnbm9y ZXF1b3RlY2hhcnMgLSBpZ25vcmUgY2hhcmFjdGVycyBpbnNpZGUgW3F1b3RlXSB0 YWdzIGZvciBtZXNzYWdlIGxlbmd0aCBjaGVjawoqIEB2YXIJaW50ZWdlcglwYWdl bmF2Y291bnRlciAtIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VuYXYgaW5zdGFu Y2VzIGVuY291bnRlcmVkIHNvIGZhcgoqIEB2YXIJYm9vbGVhbglpc19yZWdleHAg LSBkb2VzIHdpbmRvdy5yZWdFeHAgZXhpc3Q/IC0gQ2F0Y2ggZXJyb3JzIHdpdGgg bGVzcyBjYXBhYmxlIGJyb3dzZXJzCiogQHZhcglib29sZWFuCUFKQVhfQ29tcGF0 aWJsZSAtIGRvZXMgdGhlIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0IEFKQVg/Ciog QHZhcglzdHJpbmcJcG9pbnRlcl9jdXJzb3IgLSBoZWxwIG91dCBvbGQgdmVyc2lv bnMgb2YgSUUgdGhhdCBkb24ndCB1bmRlcnN0YW5kIHN0eWxlLmN1cnNvciA9IHBv aW50ZXIKKi8KdmFyIFNFU1NJT05VUkwgICAgICAgPSAodHlwZW9mKFNFU1NJT05V UkwpID09ICJ1bmRlZmluZWQiID8gIiIgOiBTRVNTSU9OVVJMKTsKdmFyIFNFQ1VS SVRZVE9LRU4gICAgPSAodHlwZW9mKFNFQ1VSSVRZVE9LRU4pID09ICJ1bmRlZmlu ZWQiID8gIiIgOiBTRUNVUklUWVRPS0VOKTsKdmFyIHZicGhyYXNlICAgICAgICAg PSAodHlwZW9mKHZicGhyYXNlKSA9PSAidW5kZWZpbmVkIiA/IG5ldyBBcnJheSgp IDogdmJwaHJhc2UpOwp2YXIgdkJfRWRpdG9yICAgICAgICA9IG5ldyBBcnJheSgp Owp2YXIgaWdub3JlcXVvdGVjaGFycyA9IGZhbHNlOwp2YXIgcGFnZW5hdmNvdW50 ZXIgICA9IDA7CnZhciBpc19yZWdleHAgICAgICAgID0gKHdpbmRvdy5SZWdFeHAp ID8gdHJ1ZSA6IGZhbHNlOwp2YXIgQUpBWF9Db21wYXRpYmxlICA9IGZhbHNlOwp2 YXIgcG9pbnRlcl9jdXJzb3IgICA9IChpc19pZSA/ICdoYW5kJyA6ICdwb2ludGVy Jyk7CgovKioKKiBEZWZpbmUgdGhlIGJyb3dzZXIgbG9hZGluZyB0aGUgcGFnZQoq CiogQHZhcglzdHJpbmcJdXNlckFnZW50IFVzZXJhZ2VudCBzdHJpbmcKKiBAdmFy CWJvb2xlYW4JaXNfb3BlcmEgIE9wZXJhCiogQHZhcglib29sZWFuCWlzX3NhZiAg ICBTYWZhcmkKKiBAdmFyCWJvb2xlYW4JaXNfd2VidHYgIFdlYlRWCiogQHZhcgli b29sZWFuCWlzX2llICAgICBJbnRlcm5ldCBFeHBsb3JlcgoqIEB2YXIJYm9vbGVh bglpc19pZTQgICAgSW50ZXJuZXQgRXhwbG9yZXIgNAoqIEB2YXIJYm9vbGVhbglp c19pZTcgICAgSW50ZXJuZXQgRXhwbG9yZXIgNwoqIEB2YXIJYm9vbGVhbglpc19w czMgICAgUGxheXN0YXRpb24gMwoqIEB2YXIJYm9vbGVhbglpc19tb3ogICAgTW96 aWxsYSAvIEZpcmVmb3ggLyBDYW1pbm8KKiBAdmFyCWJvb2xlYW4JaXNfa29uICAg IEtvbnF1ZXJvcgoqIEB2YXIJYm9vbGVhbglpc19ucyAgICAgTmV0c2NhcGUKKiBA dmFyCWJvb2xlYW4JaXNfbnM0ICAgIE5ldHNjYXBlIDQKKiBAdmFyCWJvb2xlYW4J aXNfbWFjICAgIENsaWVudCBpcyBydW5uaW5nIE1hY09TCiovCnZhciB1c2VyQWdl bnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CnZhciBpc19v cGVyYSAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdvcGVyYScpICE9IC0xKSB8fCAo dHlwZW9mKHdpbmRvdy5vcGVyYSkgIT0gJ3VuZGVmaW5lZCcpKTsKdmFyIGlzX3Nh ZiAgICA9ICgodXNlckFnZW50LmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEp IHx8IChuYXZpZ2F0b3IudmVuZG9yID09ICdBcHBsZSBDb21wdXRlciwgSW5jLicp KTsKdmFyIGlzX3dlYnR2ICA9ICh1c2VyQWdlbnQuaW5kZXhPZignd2VidHYnKSAh PSAtMSk7CnZhciBpc19pZSAgICAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdtc2ll JykgIT0gLTEpICYmICghaXNfb3BlcmEpICYmICghaXNfc2FmKSAmJiAoIWlzX3dl YnR2KSk7CnZhciBpc19pZTQgICAgPSAoKGlzX2llKSAmJiAodXNlckFnZW50Lmlu ZGV4T2YoJ21zaWUgNC4nKSAhPSAtMSkpOwp2YXIgaXNfaWU3ICAgID0gKChpc19p ZSkgJiYgKHVzZXJBZ2VudC5pbmRleE9mKCdtc2llIDcuJykgIT0gLTEpKTsKdmFy IGlzX3BzMyAgICA9ICh1c2VyQWdlbnQuaW5kZXhPZigncGxheXN0YXRpb24gMycp ICE9IC0xKTsKdmFyIGlzX21veiAgICA9ICgobmF2aWdhdG9yLnByb2R1Y3QgPT0g J0dlY2tvJykgJiYgKCFpc19zYWYpKTsKdmFyIGlzX2tvbiAgICA9ICh1c2VyQWdl bnQuaW5kZXhPZigna29ucXVlcm9yJykgIT0gLTEpOwp2YXIgaXNfbnMgICAgID0g KCh1c2VyQWdlbnQuaW5kZXhPZignY29tcGF0aWJsZScpID09IC0xKSAmJiAodXNl ckFnZW50LmluZGV4T2YoJ21vemlsbGEnKSAhPSAtMSkgJiYgKCFpc19vcGVyYSkg JiYgKCFpc193ZWJ0dikgJiYgKCFpc19zYWYpKTsKdmFyIGlzX25zNCAgICA9ICgo aXNfbnMpICYmIChwYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbikgPT0gNCkp Owp2YXIgaXNfbWFjICAgID0gKHVzZXJBZ2VudC5pbmRleE9mKCdtYWMnKSAhPSAt MSk7CgovKioKKiBXb3JrYXJvdW5kIGZvciBoZWlub3VzIElFIGJ1ZyAtIGFkZCBz cGVjaWFsIHZCbGVuZ3RoIHByb3BlcnR5IHRvIGFsbCBzdHJpbmdzCiogVGhpcyBt ZXRob2QgaXMgYXBwbGllZCB0byBBTEwgc3RyaW5nIG9iamVjdHMgYXV0b21hdGlj YWxseQoqCiogQHJldHVybglpbnRlZ2VyCiovClN0cmluZy5wcm90b3R5cGUudkJs ZW5ndGggPSBmdW5jdGlvbigpCnsKCXJldHVybiAoaXNfaWUgJiYgdGhpcy5pbmRl eE9mKCJcbiIpICE9IC0xKSA/IHRoaXMucmVwbGFjZSgvXHI/XG4vZywgIl8iKS5s ZW5ndGggOiB0aGlzLmxlbmd0aDsKfQoKLyoqCiogT3ZlcnJpZGVzIElFJ3Mgb3Jp Z2luYWwgU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgdG8gYWNjZXB0IG5lZ2F0aXZl IHZhbHVlcwoqCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIHN0YXJ0IHBvc2l0 aW9uCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIGxlbmd0aAoqCiogQHJldHVy bglzdHJpbmcKKi8KaWYgKCIxMjM0Ii5zdWJzdHIoLTIsIDIpID09ICIxMiIpIC8v ICh3aGljaCB3b3VsZCBiZSBpbmNvcnJlY3QpCnsKCVN0cmluZy5wcm90b3R5cGUu c3Vic3RyX29yaWcgPSBTdHJpbmcucHJvdG90eXBlLnN1YnN0cjsKCglTdHJpbmcu cHJvdG90eXBlLnN1YnN0ciA9IGZ1bmN0aW9uKHN0YXJ0LCBsZW5ndGgpCgl7CgkJ aWYgKHR5cGVvZihsZW5ndGgpID09ICJ1bmRlZmluZWQiKQoJCXsKCQkJcmV0dXJu IHRoaXMuc3Vic3RyX29yaWcoKHN0YXJ0IDwgMCA/IHRoaXMubGVuZ3RoICsgc3Rh cnQgOiBzdGFydCkpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gdGhpcy5zdWJz dHJfb3JpZygoc3RhcnQgPCAwID8gdGhpcy5sZW5ndGggKyBzdGFydCA6IHN0YXJ0 KSwgbGVuZ3RoKTsKCQl9Cgl9Owp9CgovKioKKiBEZWZpbmUgQXJyYXkuc2hpZnQo KSBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBoYXZlIGl0CiovCmlmICh0eXBlb2Yg QXJyYXkucHJvdG90eXBlLnNoaWZ0ID09PSAndW5kZWZpbmVkJykKewoJQXJyYXku cHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24oKQoJewoJCWZvcih2YXIgaSA9IDAs IGIgPSB0aGlzWzBdLCBsID0gdGhpcy5sZW5ndGgtMTsgaSA8IGw7IGkrKykKCQl7 CgkJCXRoaXNbaV0gPSB0aGlzW2kgKyAxXTsKCQl9CgkJdGhpcy5sZW5ndGgtLTsK CQlyZXR1cm4gYjsKCX07Cn0KCi8qKgoqIEZ1bmN0aW9uIHRvIGVtdWxhdGUgZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQKKgoqIEBwYXJhbQlzdHJpbmcJT2JqZWN0IElE CioKKiBAcmV0dXJuCW1peGVkCW51bGwgaWYgbm90IGZvdW5kLCBvYmplY3QgaWYg Zm91bmQKKi8KZnVuY3Rpb24gZmV0Y2hfb2JqZWN0KGlkbmFtZSkKewoJaWYgKGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKQoJewoJCXJldHVybiBkb2N1bWVudC5nZXRF bGVtZW50QnlJZChpZG5hbWUpOwoJfQoJZWxzZSBpZiAoZG9jdW1lbnQuYWxsKQoJ ewoJCXJldHVybiBkb2N1bWVudC5hbGxbaWRuYW1lXTsKCX0KCWVsc2UgaWYgKGRv Y3VtZW50LmxheWVycykKCXsKCQlyZXR1cm4gZG9jdW1lbnQubGF5ZXJzW2lkbmFt ZV07Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG51bGw7Cgl9Cn0KCi8qKgoqIEZ1bmN0 aW9uIHRvIGVtdWxhdGUgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUKKgoq IEBwYXJhbQlvYmplY3QJUGFyZW50IG9iamVjdCAoZWc6IGRvY3VtZW50KQoqIEBw YXJhbQlzdHJpbmcJVGFnIHR5cGUgKGVnOiAndGQnKQoqCiogQHJldHVybglhcnJh eQoqLwpmdW5jdGlvbiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKQp7CglpZiAo cGFyZW50b2JqID09IG51bGwpCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQoJ ZWxzZSBpZiAodHlwZW9mIHBhcmVudG9iai5nZXRFbGVtZW50c0J5VGFnTmFtZSAh PSAndW5kZWZpbmVkJykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmdldEVsZW1lbnRz QnlUYWdOYW1lKHRhZyk7Cgl9CgllbHNlIGlmIChwYXJlbnRvYmouYWxsICYmIHBh cmVudG9iai5hbGwudGFncykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmFsbC50YWdz KHRhZyk7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQp9Cgov KioKKiBGdW5jdGlvbiB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHRhZ3MgaW4gYW4g b2JqZWN0CioKKiBAcGFyYW0Jb2JqZWN0CVBhcmVudCBvYmplY3QgKGVnOiBkb2N1 bWVudCkKKiBAcGFyYW0Jc3RyaW5nCVRhZyB0eXBlIChlZzogJ3RkJykKKgoqIEBy ZXR1cm4JaW50ZWdlcgoqLwpmdW5jdGlvbiBmZXRjaF90YWdfY291bnQocGFyZW50 b2JqLCB0YWcpCnsKCXJldHVybiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKS5s ZW5ndGg7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIEV2 ZW50IGhhbmRsZXJzCgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQgZXZlbnQg bW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMgZXZlbnQg YnViYmxpbmcKKgoqIEBwYXJhbQlldmVudAlFdmVudCBvYmplY3QKKgoqIEByZXR1 cm4JZXZlbnQKKi8KZnVuY3Rpb24gZG9fYW5fZShldmVudG9iaikKewoJaWYgKCFl dmVudG9iaiB8fCBpc19pZSkKCXsKCQl3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUg PSBmYWxzZTsKCQl3aW5kb3cuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKCQly ZXR1cm4gd2luZG93LmV2ZW50OwoJfQoJZWxzZQoJewoJCWV2ZW50b2JqLnN0b3BQ cm9wYWdhdGlvbigpOwoJCWV2ZW50b2JqLnByZXZlbnREZWZhdWx0KCk7CgkJcmV0 dXJuIGV2ZW50b2JqOwoJfQp9CgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQg ZXZlbnQgbW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMg ZXZlbnQgYnViYmxpbmcgaW4gYSBsZXNzZXIgd2F5IHRoYW4gZG9fYW5fZSgpCioK KiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCWV2ZW50Ciov CmZ1bmN0aW9uIGVfYnlfZ3VtKGV2ZW50b2JqKQp7CglpZiAoIWV2ZW50b2JqIHx8 IGlzX2llKQoJewoJCXdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOwoJ CXJldHVybiB3aW5kb3cuZXZlbnQ7Cgl9CgllbHNlCgl7CgkJaWYgKGV2ZW50b2Jq LnRhcmdldC50eXBlID09ICdzdWJtaXQnKQoJCXsKCQkJLy8gbmF1Z2h0eSBzYWZh cmkKCQkJZXZlbnRvYmoudGFyZ2V0LmZvcm0uc3VibWl0KCk7CgkJfQoJCWV2ZW50 b2JqLnN0b3BQcm9wYWdhdGlvbigpOwoJCXJldHVybiBldmVudG9iajsKCX0KfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gTWVzc2FnZSBtYW5p cHVsYXRpb24gYW5kIHZhbGlkYXRpb24KCi8qKgoqIENoZWNrcyB0aGF0IGEgbWVz c2FnZSBpcyB2YWxpZCBmb3Igc3VibWlzc2lvbiB0byBQSFAKKgoqIEBwYXJhbQlz dHJpbmcJTWVzc2FnZSB0ZXh0CiogQHBhcmFtCW1peGVkCUVpdGhlciBzdWJqZWN0 IHRleHQgKGlmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMpIG9yIDAg aWYgeW91IGRvbid0IGNhcmUKKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFjY2Vw dGFibGUgY2hhcmFjdGVyIGxpbWl0IGZvciB0aGUgbWVzc2FnZQoqCiogQHJldHVy bglib29sZWFuCiovCmZ1bmN0aW9uIHZhbGlkYXRlbWVzc2FnZShtZXNzYWdldGV4 dCwgc3ViamVjdHRleHQsIG1pbmNoYXJzKQp7CglpZiAoaXNfa29uIHx8IGlzX3Nh ZiB8fCBpc193ZWJ0dikKCXsKCQkvLyBpZ25vcmUgbGVzcy10aGFuLWNhcGFibGUg YnJvd3NlcnMKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UgaWYgKHN1YmplY3R0ZXh0 Lmxlbmd0aCA8IDEpCgl7CgkJLy8gc3ViamVjdCBub3Qgc3BlY2lmaWVkCgkJYWxl cnQodmJwaHJhc2VbJ211c3RfZW50ZXJfc3ViamVjdCddKTsKCQlyZXR1cm4gZmFs c2U7Cgl9CgllbHNlCgl7CgkJdmFyIHN0cmlwcGVkID0gUEhQLnRyaW0oc3RyaXBj b2RlKG1lc3NhZ2V0ZXh0LCBmYWxzZSwgaWdub3JlcXVvdGVjaGFycykpOwoKCQlp ZiAoc3RyaXBwZWQubGVuZ3RoIDwgbWluY2hhcnMpCgkJewoJCQkvLyBtaW5pbXVt IG1lc3NhZ2UgbGVuZ3RoIG5vdCBtZXQKCQkJYWxlcnQoY29uc3RydWN0X3BocmFz ZSh2YnBocmFzZVsnbWVzc2FnZV90b29fc2hvcnQnXSwgbWluY2hhcnMpKTsKCQkJ cmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlIGlmICh0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtLmltYWdlc3RhbXApICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJLy8g VGhpcyBmb3JtIGhhcyBpbWFnZSB2ZXJpZmljYXRpb24gZW5hYmxlZAoJCQlkb2N1 bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC5mYWlsZWQgPSBmYWxzZTsKCgkJ CWlmIChkb2N1bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC52YWx1ZS5sZW5n dGggIT0gNikKCQkJewoJCQkJYWxlcnQodmJwaHJhc2VbJ2NvbXBsZXRlX2ltYWdl X3ZlcmlmaWNhdGlvbiddKTsKCQkJCWRvY3VtZW50LmZvcm1zLnZiZm9ybS5pbWFn ZXN0YW1wLmZhaWxlZCA9IHRydWU7CgkJCQlkb2N1bWVudC5mb3Jtcy52YmZvcm0u aW1hZ2VzdGFtcC5mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWVs c2UKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJ Ly8gZXZlcnl0aGluZyBzZWVtcyBvawoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0K CgovKioKKiBTdHJpcHMgcXVvdGVzIGFuZCBiYmNvZGUgdGFncyBmcm9tIHRleHQK KgoqIEBwYXJhbQlzdHJpbmcJVGV4dCB0byBtYW5pcHVsYXRlCiogQHBhcmFtCWJv b2xlYW4JSWYgdHJ1ZSwgc3RyaXAgPHg+IG90aGVyd2lzZSBzdHJpcCBbeF0KKiBA cGFyYW0JYm9vbGVhbglJZiB0cnVlLCBzdHJpcCBhbGwgW3F1b3RlXS4uLmNvbnRl bnRzLi4uWy9xdW90ZV0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIHN0 cmlwY29kZShzdHIsIGlzaHRtbCwgc3RyaXBxdW90ZXMpCnsKCWlmICghaXNfcmVn ZXhwKQoJewoJCXJldHVybiBzdHI7Cgl9CgoJaWYgKHN0cmlwcXVvdGVzKQoJewoJ CXZhciBzdGFydF90aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CgoJCXdoaWxl ICgoc3RhcnRpbmRleCA9IFBIUC5zdHJpcG9zKHN0ciwgJ1txdW90ZScpKSAhPT0g ZmFsc2UpCgkJewoJCQlpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydF90 aW1lID4gMjAwMCkKCQkJewoJCQkJLy8gd2hpbGUgbG9vcCBoYXMgYmVlbiBydW5u aW5nIGZvciBvdmVyIDIgc2Vjb25kcyBhbmQgaGFzIHByb2JhYmx5IGdvbmUgaW5m aW5pdGUKCQkJCWJyZWFrOwoJCQl9CgoJCQlpZiAoKHN0b3BpbmRleCA9IFBIUC5z dHJpcG9zKHN0ciwgJ1svcXVvdGVdJykpICE9PSBmYWxzZSkKCQkJewoJCQkJZnJh Z21lbnQgPSBzdHIuc3Vic3RyKHN0YXJ0aW5kZXgsIHN0b3BpbmRleCAtIHN0YXJ0 aW5kZXggKyA4KTsKCQkJCXN0ciA9IHN0ci5yZXBsYWNlKGZyYWdtZW50LCAnJyk7 CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCQlzdHIgPSBQSFAu dHJpbShzdHIpOwoJCX0KCX0KCglpZiAoaXNodG1sKQoJewoJCS8vIGV4ZW1wdCBp bWFnZSB0YWdzIC0tIHRoZXkgbmVlZCB0byBjb3VudCBhcyBjaGFyYWN0ZXJzIGlu IHRoZSBzdHJpbmcKCQkvLyBhcyB0aGUgZG8gYXMgQkIgY29kZXMKCQlzdHIgPSBz dHIucmVwbGFjZSgvPGltZ1tePl0rc3JjPSIoW14iXSspIltePl0qPi9naSwgJyQx Jyk7CgoJCXZhciBodG1sMSA9IG5ldyBSZWdFeHAoIjwoXFx3KylbXj5dKj4iLCAn Z2knKTsKCQl2YXIgaHRtbDIgPSBuZXcgUmVnRXhwKCI8XFwvXFx3Kz4iLCAnZ2kn KTsKCgkJc3RyID0gc3RyLnJlcGxhY2UoaHRtbDEsICcnKTsKCQlzdHIgPSBzdHIu cmVwbGFjZShodG1sMiwgJycpOwoKCQl2YXIgaHRtbDMgPSBuZXcgUmVnRXhwKCco Jm5ic3A7KScsICdnaScpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKGh0bWwzLCAnICcp OwoJfQoJZWxzZQoJewoJCXZhciBiYmNvZGUxID0gbmV3IFJlZ0V4cCgiXFxbKFxc dyspKD1bXlxcXV0qKT9cXF0iLCAnZ2knKTsKCQl2YXIgYmJjb2RlMiA9IG5ldyBS ZWdFeHAoIlxcW1xcLyhcXHcrKVxcXSIsICdnaScpOwoKCQlzdHIgPSBzdHIucmVw bGFjZShiYmNvZGUxLCAnJyk7CgkJc3RyID0gc3RyLnJlcGxhY2UoYmJjb2RlMiwg JycpOwoJfQoKCXJldHVybiBzdHI7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCi8vIHZCX1BIUF9FbXVsYXRvciBjbGFzcwovLyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwoKLyoqCiogUEhQIEZ1bmN0aW9uIEVtdWxhdG9y IENsYXNzCiovCmZ1bmN0aW9uIHZCX1BIUF9FbXVsYXRvcigpCnsKfQoKLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gdkJfUEhQX0VtdWxhdG9yIE1l dGhvZHMKCi8qKgoqIEZpbmQgYSBzdHJpbmcgd2l0aGluIGEgc3RyaW5nIChjYXNl IGluc2Vuc2l0aXZlKQoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJh bQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWludGVnZXIJT2Zmc2V0CioKKiBAcmV0 dXJuCW1peGVkCU5vdCBmb3VuZDogZmFsc2UgLyBGb3VuZDogaW50ZWdlciBwb3Np dGlvbgoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnN0cmlwb3MgPSBmdW5j dGlvbihoYXlzdGFjaywgbmVlZGxlLCBvZmZzZXQpCnsKCWlmICh0eXBlb2Ygb2Zm c2V0ID09ICd1bmRlZmluZWQnKQoJewoJCW9mZnNldCA9IDA7Cgl9CgoJaW5kZXgg PSBoYXlzdGFjay50b0xvd2VyQ2FzZSgpLmluZGV4T2YobmVlZGxlLnRvTG93ZXJD YXNlKCksIG9mZnNldCk7CgoJcmV0dXJuIChpbmRleCA9PSAtMSA/IGZhbHNlIDog aW5kZXgpOwp9CgovKioKKiBUcmltcyBsZWFkaW5nIHdoaXRlc3BhY2UKKgoqIEBw YXJhbQlzdHJpbmcJU3RyaW5nIHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubHRyaW0gPSBmdW5jdGlvbihzdHIp CnsKCXJldHVybiBzdHIucmVwbGFjZSgvXlxzKy9nLCAnJyk7Cn0KCi8qKgoqIFRy aW1zIHRyYWlsaW5nIHdoaXRlc3BhY2UKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5n IHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZCX1BIUF9FbXVsYXRvci5w cm90b3R5cGUucnRyaW0gPSBmdW5jdGlvbihzdHIpCnsKCXJldHVybiBzdHIucmVw bGFjZSgvKFxzKykkL2csICcnKTsKfQoKLyoqCiogVHJpbXMgbGVhZGluZyBhbmQg dHJhaWxpbmcgd2hpdGVzcGFjZQoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgdG8g dHJpbQoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3Rv dHlwZS50cmltID0gZnVuY3Rpb24oc3RyKQp7CglyZXR1cm4gdGhpcy5sdHJpbSh0 aGlzLnJ0cmltKHN0cikpOwp9CgovKioKKiBFbXVsYXRpb24gb2YgUEhQJ3MgcHJl Z19xdW90ZSgpCioKKiBAcGFyYW0Jc3RyaW5nCVN0cmluZyB0byBwcm9jZXNzCioK KiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnBy ZWdfcXVvdGUgPSBmdW5jdGlvbihzdHIpCnsKCS8vIHJlcGxhY2UgKyB7IH0gKCAp IFsgXSB8IC8gPyBeICQgXCAuID0gISA8ID4gOiAqIHdpdGggYmFja3NsYXNoK2No YXJhY3RlcgoJcmV0dXJuIHN0ci5yZXBsYWNlKC8oXCt8XHt8XH18XCh8XCl8XFt8 XF18XHx8XC98XD98XF58XCR8XFx8XC58XD18XCF8XDx8XD58XDp8XCopL2csICJc XCQxIik7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHByZWdfbWF0Y2hfYWxsKCku Li4gc29ydCBvZgoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJhbQlz dHJpbmcJUmVndWxhciBleHByZXNzaW9uIC0gdG8gYmUgaW5zZXJ0ZWQgaW50byBS ZWdFeHAoeCkKKgoqIEByZXR1cm4JbWl4ZWQJQXJyYXkgb24gbWF0Y2gsIGZhbHNl IG9uIG5vIG1hdGNoCiovCnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubWF0Y2hf YWxsID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkKewoJdmFyIGdtYXRjaCA9IHN0 cmluZy5tYXRjaChSZWdFeHAocmVnZXgsICJnaW0iKSk7CglpZiAoZ21hdGNoKQoJ ewoJCXZhciBtYXRjaGVzID0gbmV3IEFycmF5KCk7CgoJCXZhciBpcmVnZXggPSBu ZXcgUmVnRXhwKHJlZ2V4LCAiaW0iKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGdt YXRjaC5sZW5ndGg7IGkrKykKCQl7CgkJCW1hdGNoZXNbbWF0Y2hlcy5sZW5ndGhd ID0gZ21hdGNoW2ldLm1hdGNoKGlyZWdleCk7CgkJfQoKCQlyZXR1cm4gbWF0Y2hl czsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIEVtdWxh dGVzIHVuaHRtbHNwZWNpYWxjaGFycyBpbiB2QnVsbGV0aW4KKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5odG1sc3BlY2lhbGNoYXJzID0gZnVu Y3Rpb24oc3RyKQp7CglmID0gbmV3IEFycmF5KC8mbHQ7L2csIC8mZ3Q7L2csIC8m cXVvdDsvZywgLyZhbXA7L2cpOwoJciA9IG5ldyBBcnJheSgnPCcsICc+JywgJyIn LCAnJicpOwoKCWZvciAodmFyIGkgaW4gZikKCXsKCQlzdHIgPSBzdHIucmVwbGFj ZShmW2ldLCByW2ldKTsKCX0KCglyZXR1cm4gc3RyOwp9CgovKioKKiBVbmVzY2Fw ZSBDREFUQSBmcm9tIHZCX0FKQVhfWE1MX0J1aWxkZXIgUEhQIGNsYXNzCioKKiBA cGFyYW0Jc3RyaW5nCUVzY2FwZWQgQ0RBVEEKKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5lc2NhcGVfY2RhdGEgPSBmdW5j dGlvbihzdHIpCnsKCXZhciByMSA9IC88XD1cIVw9XFtcPUNcPURcPUFcPVRcPUFc PVxbL2c7Cgl2YXIgcjIgPSAvXF1cPVxdXD0+L2c7CgoJcmV0dXJuIHN0ci5yZXBs YWNlKHIxLCAnPCFbQ0RBVEFbJykucmVwbGFjZShyMiwgJ11dPicpOwp9CgovKioK KiBFbXVsYXRlcyBQSFAncyBodG1sc3BlY2lhbGNoYXJzKCkKKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUuaHRtbHNwZWNpYWxjaGFycyA9IGZ1bmN0 aW9uKHN0cikKewoJLy92YXIgZiA9IG5ldyBBcnJheSgvJig/ISNbMC05XSs7KS9n LCAvPC9nLCAvPi9nLCAvIi9nKTsKCXZhciBmID0gbmV3IEFycmF5KAoJCShpc19t YWMgJiYgaXNfaWUgPyBuZXcgUmVnRXhwKCcmJywgJ2cnKSA6IG5ldyBSZWdFeHAo JyYoPyEjWzAtOV0rOyknLCAnZycpKSwKCQluZXcgUmVnRXhwKCc8JywgJ2cnKSwK CQluZXcgUmVnRXhwKCc+JywgJ2cnKSwKCQluZXcgUmVnRXhwKCciJywgJ2cnKQoJ KTsKCXZhciByID0gbmV3IEFycmF5KAoJCScmYW1wOycsCgkJJyZsdDsnLAoJCScm Z3Q7JywKCQknJnF1b3Q7JwoJKTsKCglmb3IgKHZhciBpID0gMDsgaSA8IGYubGVu Z3RoOyBpKyspCgl7CgkJc3RyID0gc3RyLnJlcGxhY2UoZltpXSwgcltpXSk7Cgl9 CgoJcmV0dXJuIHN0cjsKfQoKLyoqCiogU2VhcmNoZXMgYW4gYXJyYXkgZm9yIGEg dmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWFycmF5CUhh eXN0YWNrCiogQHBhcmFtCWJvb2xlYW4JQ2FzZSBpbnNlbnNpdGl2ZQoqCiogQHJl dHVybglpbnRlZ2VyCU5vdCBmb3VuZDogLTEgLyBGb3VuZDogaW50ZWdlciBpbmRl eAoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLmluX2FycmF5ID0gZnVuY3Rp b24oaW5lZWRsZSwgaGF5c3RhY2ssIGNhc2VpbnNlbnNpdGl2ZSkKewoJdmFyIG5l ZWRsZSA9IG5ldyBTdHJpbmcoaW5lZWRsZSk7CgoJaWYgKGNhc2VpbnNlbnNpdGl2 ZSkKCXsKCQluZWVkbGUgPSBuZWVkbGUudG9Mb3dlckNhc2UoKTsKCQlmb3IgKHZh ciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhheXN0YWNrW2ldLnRvTG93ZXJD YXNlKCkgPT0gbmVlZGxlKQoJCQl7CgkJCQlyZXR1cm4gaTsKCQkJfQoJCX0KCX0K CWVsc2UKCXsKCQlmb3IgKHZhciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhh eXN0YWNrW2ldID09IG5lZWRsZSkKCQkJewoJCQkJcmV0dXJuIGk7CgkJCX0KCQl9 Cgl9CglyZXR1cm4gLTE7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHN0cnBhZCgp CioKKiBAcGFyYW0Jc3RyaW5nCVRleHQgdG8gcGFkCiogQHBhcmFtCWludGVnZXIJ TGVuZ3RoIHRvIHBhZAoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2gg dG8gcGFkCioKKiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJv dG90eXBlLnN0cl9wYWQgPSBmdW5jdGlvbih0ZXh0LCBsZW5ndGgsIHBhZHN0cmlu ZykKewoJdGV4dCA9IG5ldyBTdHJpbmcodGV4dCk7CglwYWRzdHJpbmcgPSBuZXcg U3RyaW5nKHBhZHN0cmluZyk7CgoJaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKQoJ ewoJCXBhZHRleHQgPSBuZXcgU3RyaW5nKHBhZHN0cmluZyk7CgoJCXdoaWxlIChw YWR0ZXh0Lmxlbmd0aCA8IChsZW5ndGggLSB0ZXh0Lmxlbmd0aCkpCgkJewoJCQlw YWR0ZXh0ICs9IHBhZHN0cmluZzsKCQl9CgoJCXRleHQgPSBwYWR0ZXh0LnN1YnN0 cigwLCAobGVuZ3RoIC0gdGV4dC5sZW5ndGgpKSArIHRleHQ7Cgl9CgoJcmV0dXJu IHRleHQ7Cn0KCi8qKgoqIEEgc29ydCBvZiBlbXVsYXRpb24gb2YgUEhQJ3MgdXJs ZW5jb2RlIC0gbm90IDEwMCUgdGhlIHNhbWUsIGJ1dCBhY2NvbXBsaXNoZXMgdGhl IHNhbWUgdGhpbmcKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGVuY29kZQoq CiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3RvdHlwZS51 cmxlbmNvZGUgPSBmdW5jdGlvbih0ZXh0KQp7Cgl0ZXh0ID0gZXNjYXBlKHRleHQu dG9TdHJpbmcoKSkucmVwbGFjZSgvXCsvZywgIiUyQiIpOwoKCS8vIHRoaXMgZXNj YXBlcyAxMjggLSAyNTUsIGFzIEpTIHVzZXMgdGhlIHVuaWNvZGUgY29kZSBwb2lu dHMgZm9yIHRoZW0uCgkvLyBUaGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHN1Ym1p dHRpbmcgdGV4dCB2aWEgQUpBWCB3aXRoIHRoZSBVVEYtOCBjaGFyc2V0LgoJdmFy IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoKC8oJShbMC05QS1GXXsyfSkpL2dpKTsKCWlm IChtYXRjaGVzKQoJewoJCWZvciAodmFyIG1hdGNoaWQgPSAwOyBtYXRjaGlkIDwg bWF0Y2hlcy5sZW5ndGg7IG1hdGNoaWQrKykKCQl7CgkJCXZhciBjb2RlID0gbWF0 Y2hlc1ttYXRjaGlkXS5zdWJzdHJpbmcoMSwzKTsKCQkJaWYgKHBhcnNlSW50KGNv ZGUsIDE2KSA+PSAxMjgpCgkJCXsKCQkJCXRleHQgPSB0ZXh0LnJlcGxhY2UobWF0 Y2hlc1ttYXRjaGlkXSwgJyV1MDAnICsgY29kZSk7CgkJCX0KCQl9Cgl9CgoJLy8g JTI1IGdldHMgdHJhbnNsYXRlZCB0byAlIGJ5IFBIUCwgc28gaWYgeW91IGhhdmUg JTI1dTEyMzQsCgkvLyB3ZSBzZWUgaXQgYXMgJXUxMjM0IGFuZCBpdCBnZXRzIHRy YW5zbGF0ZWQuIFNvIG1ha2UgaXQgJXUwMDI1dTEyMzQsCgkvLyB3aGljaCB3aWxs IHByaW50IGFzICV1MTIzNCEKCXRleHQgPSB0ZXh0LnJlcGxhY2UoJyUyNScsICcl dTAwMjUnKTsKCglyZXR1cm4gdGV4dDsKfQoKLyoqCiogV29ya3MgYSBiaXQgbGlr ZSB1Y2ZpcnN0LCBidXQgd2l0aCBzb21lIGV4dHJhIG9wdGlvbnMKKgoqIEBwYXJh bQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2ggdG8gd29yawoqIEBwYXJhbQlzdHJp bmcJQ3V0IG9mZiBzdHJpbmcgYmVmb3JlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGlz IHN0cmluZwoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnBy b3RvdHlwZS51Y2ZpcnN0ID0gZnVuY3Rpb24oc3RyLCBjdXRvZmYpCnsKCWlmICh0 eXBlb2YgY3V0b2ZmICE9ICd1bmRlZmluZWQnKQoJewoJCXZhciBjdXRwb3MgPSBz dHIuaW5kZXhPZihjdXRvZmYpOwoJCWlmIChjdXRwb3MgPiAwKQoJCXsKCQkJc3Ry ID0gc3RyLnN1YnN0cigwLCBjdXRwb3MpOwoJCX0KCX0KCglzdHIgPSBzdHIuc3Bs aXQoJyAnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKQoJ ewoJCXN0cltpXSA9IHN0cltpXS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSAr IHN0cltpXS5zdWJzdHIoMSk7Cgl9CglyZXR1cm4gc3RyLmpvaW4oJyAnKTsKfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gdkJfQUpBWF9IYW5k bGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiBYTUwg U2VuZGVyIENsYXNzCioKKiBAcGFyYW0JYm9vbGVhbglTaG91bGQgY29ubmVjdGlv bnMgYmUgYXN5bmNyb25vdXM/CiovCmZ1bmN0aW9uIHZCX0FKQVhfSGFuZGxlcihh c3luYykKewoJLyoqCgkqIFNob3VsZCBjb25uZWN0aW9ucyBiZSBhc3luY2hyb25v dXM/CgkqCgkqIEB2YXIJYm9vbGVhbgoJKi8KCXRoaXMuYXN5bmMgPSBhc3luYyA/ IHRydWUgOiBmYWxzZTsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLy8gdkJfQUpBWF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemVz IHRoZSBYTUwgaGFuZGxlcgoqCiogQHJldHVybglib29sZWFuCVRydWUgaWYgaGFu ZGxlciBjcmVhdGVkIE9LCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaW5p dCA9IGZ1bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0g J3VuZGVmaW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlz YWJsZSBhbGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAo dHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICJ1bmRlZmluZWQiKQoJewoJCXRoaXMu aGFuZGxlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJCXJldHVybiAodGhpcy5o YW5kbGVyLnNldFJlcXVlc3RIZWFkZXIgPyB0cnVlIDogZmFsc2UpOwoJfQoJZWxz ZSBpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl0aGlzLmhhbmRsZXIgPSBldmFs KCJuZXcgQSIgKyAiY3RpdiIgKyAiZVgiICsgIk9iIiArICJqZWN0KCdNaWNyIiAr ICJvc29mdC5YTSIgKyAiTEhUVFAnKTsiKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVs c2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIERldGVjdHMgaWYgdGhl IGJyb3dzZXIgaXMgZnVsbHkgY29tcGF0aWJsZQoqCiogQHJldHVybglib29sZWFu CiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaXNfY29tcGF0aWJsZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0gJ3VuZGVm aW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlzYWJsZSBh bGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAoaXNfaWUg JiYgIWlzX2llNCkgeyByZXR1cm4gdHJ1ZTsgfQoJZWxzZSBpZiAodHlwZW9mIFhN TEh0dHBSZXF1ZXN0ICE9ICd1bmRlZmluZWQnKQoJewoJCXRyeSB7IHJldHVybiBY TUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVxdWVzdEhlYWRlciA/IHRydWUg OiBmYWxzZTsgfQoJCWNhdGNoKGUpCgkJewoJCQl0cnkgeyB2YXIgdGVzdGVyID0g bmV3IFhNTEh0dHBSZXF1ZXN0KCk7IHJldHVybiB0ZXN0ZXIuc2V0UmVxdWVzdEhl YWRlciA/IHRydWUgOiBmYWxzZTsgfQoJCQljYXRjaChlKSB7IHJldHVybiBmYWxz ZTsgfQoJCX0KCX0KCWVsc2UgeyByZXR1cm4gZmFsc2U7IH0KfQoKLyoqCiogQ2hl Y2tzIGlmIHRoZSBzeXN0ZW0gaXMgcmVhZHkKKgoqIEByZXR1cm4JYm9vbGVhbglG YWxzZSBpZiByZWFkeQoqLwp2Ql9BSkFYX0hhbmRsZXIucHJvdG90eXBlLm5vdF9y ZWFkeSA9IGZ1bmN0aW9uKCkKewoJcmV0dXJuICh0aGlzLmhhbmRsZXIucmVhZHlT dGF0ZSAmJiAodGhpcy5oYW5kbGVyLnJlYWR5U3RhdGUgPCA0KSk7Cn0KCi8qKgoq IE9uUmVhZHlTdGF0ZUNoYW5nZSBldmVudCBoYW5kbGVyCioKKiBAcGFyYW0JZnVu Y3Rpb24KKi8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5vbnJlYWR5c3RhdGVj aGFuZ2UgPSBmdW5jdGlvbihldmVudCkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7 CgkJaWYgICghdGhpcy5pbml0KCkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJ fQoJaWYgKHR5cGVvZiBldmVudCA9PSAnZnVuY3Rpb24nKQoJewoJCXRoaXMuaGFu ZGxlci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBldmVudDsKCX0KCWVsc2UKCXsKCQlh bGVydCgnWE1MIFNlbmRlciBPblJlYWR5U3RhdGUgZXZlbnQgaXMgbm90IGEgZnVu Y3Rpb24nKTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCi8qKgoqIFNlbmRzIGRhdGEK KgoqIEBwYXJhbQlzdHJpbmcJRGVzdGluYXRpb24gVVJMCiogQHBhcmFtCXN0cmlu ZwlSZXF1ZXN0IERhdGEKKgoqIEByZXR1cm4JbWl4ZWQJUmV0dXJuIG1lc3NhZ2UK Ki8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24oZGVz dHVybCwgZGF0YXN0cmVhbSkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7CgkJaWYg KCF0aGlzLmluaXQoKSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CglpZiAo IXRoaXMubm90X3JlYWR5KCkpCgl7CgkJdGhpcy5oYW5kbGVyLm9wZW4oJ1BPU1Qn LCBkZXN0dXJsLCB0aGlzLmFzeW5jKTsKCQl0aGlzLmhhbmRsZXIuc2V0UmVxdWVz dEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0t dXJsZW5jb2RlZCcpOwoJCXRoaXMuaGFuZGxlci5zZW5kKGRhdGFzdHJlYW0gKyAn JnNlY3VyaXR5dG9rZW49JyArIFNFQ1VSSVRZVE9LRU4gKyAnJnM9JyArIGZldGNo X3Nlc3Npb25oYXNoKCkpOwoKCQlpZiAoIXRoaXMuYXN5bmMgJiYgdGhpcy5oYW5k bGVyLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLmhhbmRsZXIuc3RhdHVzID09IDIw MCkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCXJldHVybiBmYWxzZTsKfQoK LyoqCiogRmV0Y2hlcyB0aGUgY29udGVudHMgb2YgYW4gWE1MIG5vZGUKKgoqIEBw YXJhbQlvYmplY3QJWE1MIG5vZGUKKgoqIEByZXR1cm4Jc3RyaW5nCVhNTCBub2Rl IGNvbnRlbnRzCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuZmV0Y2hfZGF0 YSA9IGZ1bmN0aW9uKHhtbF9ub2RlKQp7CglpZiAoeG1sX25vZGUgJiYgeG1sX25v ZGUuZmlyc3RDaGlsZCAmJiB4bWxfbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSkK CXsKCQlyZXR1cm4gUEhQLnVuZXNjYXBlX2NkYXRhKHhtbF9ub2RlLmZpcnN0Q2hp bGQubm9kZVZhbHVlKTsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gJyc7Cgl9Cn0KCi8v IHdlIGNhbiBjaGVjayB0aGlzIHZhcmlhYmxlIHRvIHNlZSBpZiBicm93c2VyIGlz IEFKQVggY29tcGF0aWJsZQpBSkFYX0NvbXBhdGlibGUgPSB2Ql9BSkFYX0hhbmRs ZXIucHJvdG90eXBlLmlzX2NvbXBhdGlibGUoKTsKY29uc29sZS5pbmZvKCJCcm93 c2VyIGlzJXMgQUpBWCBjb21wYXRpYmxlIiwgQUpBWF9Db21wYXRpYmxlID8gIiIg OiAiIE5PVCIpOwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfSGlkZGVuX0Zvcm0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ci8qKgoqIEZvcm0gR2VuZXJhdG9yIENsYXNzCioKKiBCdWlsZHMgYSBmb3JtIGZp bGxlZCB3aXRoIGhpZGRlbiBmaWVsZHMgZm9yIGludmlzaWJsZSBzdWJtaXQgdmlh IFBPU1QKKgoqIEBwYXJhbQlzdHJpbmcJU2NyaXB0IChteV90YXJnZXRfc2NyaXB0 LnBocCkKKi8KZnVuY3Rpb24gdkJfSGlkZGVuX0Zvcm0oc2NyaXB0KQp7Cgl0aGlz LmFjdGlvbiA9IHNjcmlwdDsKCXRoaXMudmFyaWFibGVzID0gbmV3IEFycmF5KCk7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0hpZGRl bl9Gb3JtIG1ldGhvZHMKCi8qKgoqIEFkZHMgYSBoaWRkZW4gaW5wdXQgZmllbGQg dG8gdGhlIGZvcm0gb2JqZWN0CioKKiBAcGFyYW0Jc3RyaW5nCU5hbWUgYXR0cmli dXRlCiogQHBhcmFtCXN0cmluZwlWYWx1ZSBhdHRyaWJ1dGUKKi8KdkJfSGlkZGVu X0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZSA9IGZ1bmN0aW9uKG5hbWUsIHZh bHVlKQp7Cgl0aGlzLnZhcmlhYmxlc1t0aGlzLnZhcmlhYmxlcy5sZW5ndGhdID0g bmV3IEFycmF5KG5hbWUsIHZhbHVlKTsKCWNvbnNvbGUubG9nKCJ2Ql9IaWRkZW5f Rm9ybSA6OiBhZGRfdmFyaWFibGUoJXMpIiwgbmFtZSk7Cn07CgovKioKKiBGZXRj aGVzIGFsbCBmb3JtIGVsZW1lbnRzIGluc2lkZSBhbiBIVE1MIGVsZW1lbnQgYW5k IHBlcmZvcm1zICdhZGRfaW5wdXQoKScgb24gdGhlbQoqCiogQHBhcmFtCW9iamVj dAlIVE1MIGVsZW1lbnQgdG8gc2VhcmNoCiovCnZCX0hpZGRlbl9Gb3JtLnByb3Rv dHlwZS5hZGRfdmFyaWFibGVzX2Zyb21fb2JqZWN0ID0gZnVuY3Rpb24ob2JqKQp7 CglpZiAoIW9iaikKCXsKCQlyZXR1cm47Cgl9Cgljb25zb2xlLmluZm8oInZCX0hp ZGRlbl9Gb3JtIDo6IGFkZF92YXJpYWJsZXNfZnJvbV9vYmplY3QoJXMpIiwgb2Jq LmlkKTsKCXZhciBpbnB1dHMgPSBmZXRjaF90YWdzKG9iaiwgJ2lucHV0Jyk7Cglm b3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlzd2l0 Y2ggKGlucHV0c1tpXS50eXBlKQoJCXsKCQkJY2FzZSAnY2hlY2tib3gnOgoJCQlj YXNlICdyYWRpbyc6CgkJCQlpZiAoaW5wdXRzW2ldLmNoZWNrZWQpCgkJCQl7CgkJ CQkJdGhpcy5hZGRfdmFyaWFibGUoaW5wdXRzW2ldLm5hbWUsIGlucHV0c1tpXS52 YWx1ZSk7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAndGV4dCc6CgkJCWNhc2Ug J2hpZGRlbic6CgkJCWNhc2UgJ3Bhc3N3b3JkJzoKCQkJCXRoaXMuYWRkX3Zhcmlh YmxlKGlucHV0c1tpXS5uYW1lLCBpbnB1dHNbaV0udmFsdWUpOwoJCQkJYnJlYWs7 CgkJCWRlZmF1bHQ6CgkJCQljb250aW51ZTsKCQl9Cgl9CgoJdmFyIHRleHRhcmVh cyA9IGZldGNoX3RhZ3Mob2JqLCAndGV4dGFyZWEnKTsKCWZvciAodmFyIGkgPSAw OyBpIDwgdGV4dGFyZWFzLmxlbmd0aDsgaSsrKQoJewoJCXRoaXMuYWRkX3Zhcmlh YmxlKHRleHRhcmVhc1tpXS5uYW1lLCB0ZXh0YXJlYXNbaV0udmFsdWUpOwoJfQoK CXZhciBzZWxlY3RzID0gZmV0Y2hfdGFncyhvYmosICdzZWxlY3QnKTsKCWZvciAo dmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykKCXsKCQlpZiAoc2Vs ZWN0c1tpXS5tdWx0aXBsZSkKCQl7CgkJCWZvciAodmFyIGogPSAwOyBqIDwgc2Vs ZWN0c1tpXS5vcHRpb25zLmxlbmd0aDsgaisrKQoJCQl7CgkJCQlpZiAoc2VsZWN0 c1tpXS5vcHRpb25zW2pdLnNlbGVjdGVkKQoJCQkJewoJCQkJCXRoaXMuYWRkX3Zh cmlhYmxlKHNlbGVjdHNbaV0ubmFtZSwgc2VsZWN0c1tpXS5vcHRpb25zW2pdLnZh bHVlKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmFkZF92YXJp YWJsZShzZWxlY3RzW2ldLm5hbWUsIHNlbGVjdHNbaV0ub3B0aW9uc1tzZWxlY3Rz W2ldLnNlbGVjdGVkSW5kZXhdLnZhbHVlKTsKCQl9Cgl9Cn07CgovKioKKiBGZXRj aGVzIGEgdmFyaWFibGUgdmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJVmFyaWFibGUg bmFtZQoqCiogQHJldHVybgltaXhlZAlWYXJpYWJsZSB2YWx1ZQoqLwp2Ql9IaWRk ZW5fRm9ybS5wcm90b3R5cGUuZmV0Y2hfdmFyaWFibGUgPSBmdW5jdGlvbih2YXJu YW1lKQp7Cglmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmFyaWFibGVzLmxlbmd0 aDsgaSsrKQoJewoJCWlmICh0aGlzLnZhcmlhYmxlc1tpXVswXSA9PSB2YXJuYW1l KQoJCXsKCQkJcmV0dXJuIHRoaXMudmFyaWFibGVzW2ldWzFdOwoJCX0KCX0KCgly ZXR1cm4gbnVsbDsKfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIGhpZGRlbiBmb3JtIG9i amVjdAoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5cGUuc3VibWl0X2Zvcm0gPSBm dW5jdGlvbigpCnsKCXRoaXMuZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2Zvcm0nKTsKCXRoaXMuZm9ybS5tZXRob2QgPSAncG9zdCc7Cgl0aGlzLmZvcm0u YWN0aW9uID0gdGhpcy5hY3Rpb247CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz LnZhcmlhYmxlcy5sZW5ndGg7IGkrKykKCXsKCQl2YXIgaW5wdXRvYmogPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoKCQlpbnB1dG9iai50eXBlICA9 ICdoaWRkZW4nOwoJCWlucHV0b2JqLm5hbWUgID0gdGhpcy52YXJpYWJsZXNbaV1b MF07CgkJaW5wdXRvYmoudmFsdWUgPSB0aGlzLnZhcmlhYmxlc1tpXVsxXTsKCgkJ dGhpcy5mb3JtLmFwcGVuZENoaWxkKGlucHV0b2JqKTsKCX0KCgljb25zb2xlLmlu Zm8oInZCX0hpZGRlbl9Gb3JtIDo6IHN1Ym1pdF9mb3JtKCkgLT4gJXMiLCB0aGlz LmFjdGlvbik7Cglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZm9ybSku c3VibWl0KCk7Cn07CgovKioKKiBCdWlsZHMgYSBVUkkgcXVlcnkgc3RyaW5nIGZy b20gdGhlIGdpdmVuIHZhcmlhYmxlcwoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5 cGUuYnVpbGRfcXVlcnlfc3RyaW5nID0gZnVuY3Rpb24oKQp7Cgl2YXIgcXVlcnlf c3RyaW5nID0gJyc7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhcmlhYmxl cy5sZW5ndGg7IGkrKykKCXsKCQlxdWVyeV9zdHJpbmcgKz0gdGhpcy52YXJpYWJs ZXNbaV1bMF0gKyAnPScgKyBQSFAudXJsZW5jb2RlKHRoaXMudmFyaWFibGVzW2ld WzFdKSArICcmJzsKCX0KCgljb25zb2xlLmluZm8oInZCX0hpZGRlbl9Gb3JtIDo6 IFF1ZXJ5IFN0cmluZyA9ICVzIiwgcXVlcnlfc3RyaW5nKTsKCXJldHVybiBxdWVy eV9zdHJpbmc7Cn0KCi8qKgoqIExlZ2FjeSBmdW5jdGlvbnMgZm9yIGJhY2t3YXJk IGNvbXBhdGFiaWxpdHkKKi8KdkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF9p bnB1dCA9IHZCX0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfdmFyaWFibGU7CnZC X0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfaW5wdXRzX2Zyb21fb2JqZWN0ID0g dkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZXNfZnJvbV9vYmpl Y3Q7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyBXaW5kb3cg b3BlbmVycyBhbmQgaW5zdGFudCBtZXNzZW5nZXIgd3JhcHBlcnMKCi8qKgoqIE9w ZW5zIGEgZ2VuZXJpYyBicm93c2VyIHdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlV UkwKKiBAcGFyYW0JaW50ZWdlcglXaWR0aAoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdo dAoqIEBwYXJhbQlzdHJpbmcJT3B0aW9uYWwgV2luZG93IElECiovCmZ1bmN0aW9u IG9wZW5XaW5kb3codXJsLCB3aWR0aCwgaGVpZ2h0LCB3aW5kb3dpZCkKewoJcmV0 dXJuIHdpbmRvdy5vcGVuKAoJCXVybCwKCQkodHlwZW9mIHdpbmRvd2lkID09ICd1 bmRlZmluZWQnID8gJ3ZCUG9wdXAnIDogd2luZG93aWQpLAoJCSdzdGF0dXNiYXI9 bm8sbWVudWJhcj1ubyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJs ZT15ZXMnCgkJKyAodHlwZW9mIHdpZHRoICE9ICd1bmRlZmluZWQnID8gKCcsd2lk dGg9JyArIHdpZHRoKSA6ICcnKSArICh0eXBlb2YgaGVpZ2h0ICE9ICd1bmRlZmlu ZWQnID8gKCcsaGVpZ2h0PScgKyBoZWlnaHQpIDogJycpCgkpOwp9CgovKioKKiBP cGVucyBjb250cm9sIHBhbmVsIGhlbHAgd2luZG93CioKKiBAcGFyYW0Jc3RyaW5n CVNjcmlwdCBuYW1lCiogQHBhcmFtCXN0cmluZwlBY3Rpb24gdHlwZQoqIEBwYXJh bQlzdHJpbmcJT3B0aW9uIHZhbHVlCioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5j dGlvbiBqc19vcGVuX2hlbHAoc2NyaXB0bmFtZSwgYWN0aW9udHlwZSwgb3B0aW9u dmFsKQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknaGVscC5waHA/cz0nICsgU0VT U0lPTkhBU0ggKyAnJmRvPWFuc3dlciZwYWdlPScgKyBzY3JpcHRuYW1lICsgJyZw YWdlYWN0aW9uPScgKyBhY3Rpb250eXBlICsgJyZvcHRpb249JyArIG9wdGlvbnZh bCwKCQk2MDAsIDQ1MCwgJ2hlbHB3aW5kb3cnCgkpOwp9CgovKioKKiBPcGVucyBh IHdpbmRvdyB0byBzaG93IGEgbGlzdCBvZiBhdHRhY2htZW50cyBpbiBhIHRocmVh ZCAobWlzYy5waHA/ZG89c2hvd2F0dGFjaG1lbnRzKQoqCiogQHBhcmFtCWludGVn ZXIJVGhyZWFkIElECioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiBhdHRh Y2htZW50cyh0aHJlYWRpZCkKewoJcmV0dXJuIG9wZW5XaW5kb3coCgkJJ21pc2Mu cGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPXNob3dhdHRhY2htZW50cyZ0PScgKyB0 aHJlYWRpZCwKCQk0ODAsIDMwMAoJKTsKfQoKLyoqCiogT3BlbnMgYSB3aW5kb3cg dG8gc2hvdyBhIGxpc3Qgb2YgcG9zdGVycyBpbiBhIHRocmVhZCAobWlzYy5waHA/ ZG89d2hvcG9zdGVkKQoqCiogQHBhcmFtCWludGVnZXIJVGhyZWFkIElECioKKiBA cmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiB3aG8odGhyZWFkaWQpCnsKCXJldHVy biBvcGVuV2luZG93KAoJCSdtaXNjLnBocD8nICsgU0VTU0lPTlVSTCArICdkbz13 aG9wb3N0ZWQmdD0nICsgdGhyZWFkaWQsCgkJMjMwLCAzMDAKCSk7Cn0KCi8qKgoq IE9wZW5zIGFuIElNIFdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlJTSB0eXBlCiog QHBhcmFtCWludGVnZXIJVXNlciBJRAoqIEBwYXJhbQlpbnRlZ2VyCVdpZHRoIG9m IHdpbmRvdwoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdodCBvZiB3aW5kb3cKKgoqIEBy ZXR1cm4Jd2luZG93CiovCmZ1bmN0aW9uIGltd2luZG93KGltdHlwZSwgdXNlcmlk LCB3aWR0aCwgaGVpZ2h0KQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknc2VuZG1l c3NhZ2UucGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPWltJnR5cGU9JyArIGltdHlw ZSArICcmdT0nICsgdXNlcmlkLAoJCXdpZHRoLCBoZWlnaHQKCSk7Cn0KCi8qKgoq IFNlbmRzIGFuIE1TTiBtZXNzYWdlCioKKiBAcGFyYW0Jc3RyaW5nCVRhcmdldCBN U04gaGFuZGxlCioKKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24g U2VuZE1TTk1lc3NhZ2UobmFtZSkKewoJaWYgKCFpc19pZSkKCXsKCQlhbGVydCh2 YnBocmFzZVsnbXNuX2Z1bmN0aW9uc19vbmx5X3dvcmtfaW5faWUnXSk7CgkJcmV0 dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCU1zZ3JPYmouSW5zdGFudE1lc3NhZ2Uo bmFtZSk7CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBBZGRzIGFuIE1TTiBD b250YWN0IChyZXF1aXJlcyBNU04pCioKKiBAcGFyYW0Jc3RyaW5nCU1TTiBoYW5k bGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwpmdW5jdGlvbiBBZGRNU05D b250YWN0KG5hbWUpCnsKCWlmICghaXNfaWUpCgl7CgkJYWxlcnQodmJwaHJhc2Vb J21zbl9mdW5jdGlvbnNfb25seV93b3JrX2luX2llJ10pOwoJCXJldHVybiBmYWxz ZTsKCX0KCWVsc2UKCXsKCQlNc2dyT2JqLkFkZENvbnRhY3QoMCwgbmFtZSk7CgkJ cmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBEZXRlY3RzIENhcHMtTG9jayB3aGVu IGEga2V5IGlzIHByZXNzZWQKKgoqIEBwYXJhbQlldmVudAoqCiogQHJldHVybgli b29sZWFuCVRydWUgaWYgQ2Fwcy1Mb2NrIGlzIG9uCiovCmZ1bmN0aW9uIGRldGVj dF9jYXBzX2xvY2soZSkKewoJZSA9IChlID8gZSA6IHdpbmRvdy5ldmVudCk7CgoJ dmFyIGtleWNvZGUgPSAoZS53aGljaCA/IGUud2hpY2ggOiAoZS5rZXlDb2RlID8g ZS5rZXlDb2RlIDogKGUuY2hhckNvZGUgPyBlLmNoYXJDb2RlIDogMCkpKTsKCXZh ciBzaGlmdGVkID0gKGUuc2hpZnRLZXkgfHwgKGUubW9kaWZpZXJzICYmIChlLm1v ZGlmaWVycyAmIDQpKSk7Cgl2YXIgY3RybGVkID0gKGUuY3RybEtleSB8fCAoZS5t b2RpZmllcnMgJiYgKGUubW9kaWZpZXJzICYgMikpKTsKCgkvLyBpZiBjaGFyYWN0 ZXJzIGFyZSB1cHBlcmNhc2Ugd2l0aG91dCBzaGlmdCwgb3IgbG93ZXJjYXNlIHdp dGggc2hpZnQsIGNhcHMtbG9jayBpcyBvbi4KCXJldHVybiAoa2V5Y29kZSA+PSA2 NSAmJiBrZXljb2RlIDw9IDkwICYmICFzaGlmdGVkICYmICFjdHJsZWQpIHx8IChr ZXljb2RlID49IDk3ICYmIGtleWNvZGUgPD0gMTIyICYmIHNoaWZ0ZWQpOwp9Cgov KioKKiBDb25maXJtcyBsb2ctb3V0IHJlcXVlc3QKKgoqIEBwYXJhbQlzdHJpbmcJ TG9nLW91dCBjb25maXJtYXRpb24gbWVzc2FnZQoqCiogQHJldHVybglib29sZWFu CiovCmZ1bmN0aW9uIGxvZ19vdXQoY29uZmlybWF0aW9uX21lc3NhZ2UpCnsKCXZh ciBodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07 CglodC5zdHlsZS5maWx0ZXIgPSAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWlj cm9zb2Z0LkJhc2ljSW1hZ2UoZ3JheXNjYWxlPTEpIjsKCWlmIChjb25maXJtKGNv bmZpcm1hdGlvbl9tZXNzYWdlKSkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UK CXsKCQlodC5zdHlsZS5maWx0ZXIgPSAiIjsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0K Ci8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvb2tpZSBoYW5k bGVycwoKLyoqCiogU2V0cyBhIGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlDb29r aWUgbmFtZQoqIEBwYXJhbQlzdHJpbmcJQ29va2llIHZhbHVlCiogQHBhcmFtCWRh dGUJQ29va2llIGV4cGlyeSBkYXRlCiovCmZ1bmN0aW9uIHNldF9jb29raWUobmFt ZSwgdmFsdWUsIGV4cGlyZXMpCnsKCWNvbnNvbGUubG9nKCJTZXQgQ29va2llIDo6 ICVzID0gJyVzJyIsIG5hbWUsIHZhbHVlKTsKCWRvY3VtZW50LmNvb2tpZSA9IG5h bWUgKyAnPScgKyBlc2NhcGUodmFsdWUpICsgJzsgcGF0aD0vJyArICh0eXBlb2Yg ZXhwaXJlcyAhPSAndW5kZWZpbmVkJyA/ICc7IGV4cGlyZXM9JyArIGV4cGlyZXMu dG9HTVRTdHJpbmcoKSA6ICcnKTsKfQoKLyoqCiogRGVsZXRlcyBhIGNvb2tpZQoq CiogQHBhcmFtCXN0cmluZwlDb29raWUgbmFtZQoqLwpmdW5jdGlvbiBkZWxldGVf Y29va2llKG5hbWUpCnsKCWNvbnNvbGUubG9nKCJEZWxldGUgQ29va2llIDo6ICVz IiwgbmFtZSk7Cglkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgJzsgZXhw aXJlcz1UaHUsIDAxLUphbi03MCAwMDowMDowMSBHTVQnICsgICc7IHBhdGg9Lyc7 Cn0KCi8qKgoqIEZldGNoZXMgdGhlIHZhbHVlIG9mIGEgY29va2llCioKKiBAcGFy YW0Jc3RyaW5nCUNvb2tpZSBuYW1lCioKKiBAcmV0dXJuCXN0cmluZwoqLwpmdW5j dGlvbiBmZXRjaF9jb29raWUobmFtZSkKewoJY29va2llX25hbWUgPSBuYW1lICsg Jz0nOwoJY29va2llX2xlbmd0aCA9IGRvY3VtZW50LmNvb2tpZS5sZW5ndGg7Cglj b29raWVfYmVnaW4gPSAwOwoJd2hpbGUgKGNvb2tpZV9iZWdpbiA8IGNvb2tpZV9s ZW5ndGgpCgl7CgkJdmFsdWVfYmVnaW4gPSBjb29raWVfYmVnaW4gKyBjb29raWVf bmFtZS5sZW5ndGg7CgkJaWYgKGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoY29v a2llX2JlZ2luLCB2YWx1ZV9iZWdpbikgPT0gY29va2llX25hbWUpCgkJewoJCQl2 YXIgdmFsdWVfZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YgKCc7JywgdmFs dWVfYmVnaW4pOwoJCQlpZiAodmFsdWVfZW5kID09IC0xKQoJCQl7CgkJCQl2YWx1 ZV9lbmQgPSBjb29raWVfbGVuZ3RoOwoJCQl9CgkJCXZhciBjb29raWVfdmFsdWUg PSB1bmVzY2FwZShkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKHZhbHVlX2JlZ2lu LCB2YWx1ZV9lbmQpKTsKCQkJY29uc29sZS5sb2coIkZldGNoIENvb2tpZSA6OiAl cyA9ICclcyciLCBuYW1lLCBjb29raWVfdmFsdWUpOwoJCQlyZXR1cm4gY29va2ll X3ZhbHVlOwoJCX0KCQljb29raWVfYmVnaW4gPSBkb2N1bWVudC5jb29raWUuaW5k ZXhPZignICcsIGNvb2tpZV9iZWdpbikgKyAxOwoJCWlmIChjb29raWVfYmVnaW4g PT0gMCkKCQl7CgkJCWJyZWFrOwoJCX0KCX0KCWNvbnNvbGUubG9nKCJGZXRjaCBD b29raWUgOjogJXMgKG51bGwpIiwgbmFtZSk7CglyZXR1cm4gbnVsbDsKfQoKLy8g IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gRm9ybSBlbGVtZW50IG1h bmFnZXJzICh1c2VkIGZvciAnY2hlY2sgYWxsJyB0eXBlIHN5c3RlbXMpCgovKioK KiBTZXRzIGFsbCBjaGVja2JveGVzLCByYWRpbyBidXR0b25zIG9yIHNlbGVjdHMg aW4gYSBnaXZlbiBmb3JtIHRvIGEgZ2l2ZW4gc3RhdGUsIHdpdGggZXhjZXB0aW9u cwoqCiogQHBhcmFtCW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJ VGFyZ2V0IGVsZW1lbnQgdHlwZSAob25lIG9mICdyYWRpbycsICdzZWxlY3Qtb25l JywgJ2NoZWNrYm94JykKKiBAcGFyYW0Jc3RyaW5nCVNlbGVjdGVkIG9wdGlvbiBp biBjYXNlIG9mICdyYWRpbycKKiBAcGFyYW0JYXJyYXkJQXJyYXkgb2YgZWxlbWVu dCBuYW1lcyB0byBiZSBleGNsdWRlZAoqIEBwYXJhbQltaXhlZAlWYWx1ZSB0byBn aXZlIHRvIGZvdW5kIGVsZW1lbnRzCiovCmZ1bmN0aW9uIGpzX3RvZ2dsZV9hbGwo Zm9ybW9iaiwgZm9ybXR5cGUsIG9wdGlvbiwgZXhjbHVkZSwgc2V0dG8pCnsKCWZv ciAodmFyIGkgPTA7IGkgPCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJ ewoJCXZhciBlbG0gPSBmb3Jtb2JqLmVsZW1lbnRzW2ldOwoJCWlmIChlbG0udHlw ZSA9PSBmb3JtdHlwZSAmJiBQSFAuaW5fYXJyYXkoZWxtLm5hbWUsIGV4Y2x1ZGUs IGZhbHNlKSA9PSAtMSkKCQl7CgkJCXN3aXRjaCAoZm9ybXR5cGUpCgkJCXsKCQkJ CWNhc2UgJ3JhZGlvJzoKCQkJCQlpZiAoZWxtLnZhbHVlID09IG9wdGlvbikgLy8g b3B0aW9uID09ICcnIGV2YWx1YXRlcyB0cnVlIHdoZW4gb3B0aW9uID0gMAoJCQkJ CXsKCQkJCQkJZWxtLmNoZWNrZWQgPSBzZXR0bzsKCQkJCQl9CgkJCQlicmVhazsK CQkJCWNhc2UgJ3NlbGVjdC1vbmUnOgoJCQkJCWVsbS5zZWxlY3RlZEluZGV4ID0g c2V0dG87CgkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJZWxtLmNoZWNrZWQg PSBzZXR0bzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQp9CgovKioKKiBTZXRzIGFs bCA8c2VsZWN0PiBlbGVtZW50cyB0byB0aGUgc2VsZWN0ZWRJbmRleCBzcGVjaWZp ZWQgYnkgdGhlICdzZWxlY3RhbGwnIGVsZW1lbnQKKgoqIEBwYXJhbQlvYmplY3QJ Rm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfc2VsZWN0X2FsbChmb3Jtb2JqKQp7 CglleGNsdWRlID0gbmV3IEFycmF5KCk7CglleGNsdWRlWzBdID0gJ3NlbGVjdGFs bCc7Cglqc190b2dnbGVfYWxsKGZvcm1vYmosICdzZWxlY3Qtb25lJywgJycsIGV4 Y2x1ZGUsIGZvcm1vYmouc2VsZWN0YWxsLnNlbGVjdGVkSW5kZXgpOwp9CgovKioK KiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+IGVsZW1lbnRzIHRv IGhhdmUgdGhlIHNhbWUgY2hlY2tlZCBzdGF0dXMgYXMgJ2FsbGJveCcKKgoqIEBw YXJhbQlvYmplY3QJRm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxs KGZvcm1vYmopCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0g PSAna2VlcGF0dGFjaG1lbnRzJzsKCWV4Y2x1ZGVbMV0gPSAnYWxsYm94JzsKCWV4 Y2x1ZGVbMl0gPSAncmVtb3ZlYWxsJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwg J2NoZWNrYm94JywgJycsIGV4Y2x1ZGUsIGZvcm1vYmouYWxsYm94LmNoZWNrZWQp Owp9CgovKioKKiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0icmFkaW8iIC8+IGdyb3Vw cyB0byBoYXZlIGEgcGFydGljdWxhciBvcHRpb24gY2hlY2tlZAoqCiogQHBhcmFt CW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQltaXhlZAlTZWxlY3RlZCBvcHRp b24KKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxsX29wdGlvbihmb3Jtb2JqLCBvcHRp b24pCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0gPSAndXNl dXNlcmdyb3VwJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwgJ3JhZGlvJywgb3B0 aW9uLCBleGNsdWRlLCB0cnVlKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tf YWxsCiovCmZ1bmN0aW9uIGNoZWNrYWxsKGZvcm1vYmopCnsKCWpzX2NoZWNrX2Fs bChmb3Jtb2JqKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tfYWxsX29wdGlv bgoqLwpmdW5jdGlvbiBjaGVja2FsbF9vcHRpb24oZm9ybW9iaiwgb3B0aW9uKQp7 Cglqc19jaGVja19hbGxfb3B0aW9uKGZvcm1vYmosIG9wdGlvbik7Cn0KCi8qKgoq IFJlc2l6ZSBmdW5jdGlvbiBmb3IgQ1AgdGV4dGFyZWFzCioKKiBAcGFyYW0JaW50 ZWdlcglJZiBwb3NpdGl2ZSwgc2l6ZSB1cCwgb3RoZXJ3aXNlIHNpemUgZG93bgoq IEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIHRleHRhcmVhCioKKiBAcmV0dXJuCWJv b2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24gcmVzaXplX3RleHRhcmVhKHRvLCBpZCkK ewoJdmFyIHRleHRhcmVhID0gZmV0Y2hfb2JqZWN0KGlkKTsKCgl0ZXh0YXJlYS5z dHlsZS53aWR0aCA9IHBhcnNlSW50KHRleHRhcmVhLm9mZnNldFdpZHRoKSArICh0 byA8IDAgPyAtMTAwIDogMTAwKSArICJweCI7Cgl0ZXh0YXJlYS5zdHlsZS5oZWln aHQgPSBwYXJzZUludCh0ZXh0YXJlYS5vZmZzZXRIZWlnaHQpICsgKHRvIDwgMCA/ IC0xMDAgOiAxMDApICsgInB4IjsKCglyZXR1cm4gZmFsc2U7Cn0KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvbGxhcHNpYmxlIGVsZW1lbnQg aGFuZGxlcnMKCi8qKgoqIFRvZ2dsZXMgdGhlIGNvbGxhcHNlIHN0YXRlIG9mIGFu IG9iamVjdCwgYW5kIHNhdmVzIHN0YXRlIHRvICd2YnVsbGV0aW5fY29sbGFwc2Un IGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUgSUQgZm9yIHRoZSBjb2xs YXBzZSBncm91cAoqCiogQHJldHVybglib29sZWFuCWZhbHNlCiovCmZ1bmN0aW9u IHRvZ2dsZV9jb2xsYXBzZShvYmppZCkKewoJaWYgKCFpc19yZWdleHApCgl7CgkJ cmV0dXJuIGZhbHNlOwoJfQoKCW9iaiA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfJyArIG9iamlkKTsKCWltZyA9IGZldGNoX29iamVjdCgnY29sbGFwc2VpbWdf JyArIG9iamlkKTsKCWNlbCA9IGZldGNoX29iamVjdCgnY29sbGFwc2VjZWxfJyAr IG9iamlkKTsKCglpZiAoIW9iaikKCXsKCQkvLyBub3RoaW5nIHRvIGNvbGxhcHNl IQoJCWlmIChpbWcpCgkJewoJCQkvLyBoaWRlIHRoZSBjbGlja3kgaW1hZ2UgaWYg dGhlcmUgaXMgb25lCgkJCWltZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCX0K CQlyZXR1cm4gZmFsc2U7Cgl9CgoJaWYgKG9iai5zdHlsZS5kaXNwbGF5ID09ICdu b25lJykKCXsKCQlvYmouc3R5bGUuZGlzcGxheSA9ICcnOwoJCXNhdmVfY29sbGFw c2VkKG9iamlkLCBmYWxzZSk7CgkJaWYgKGltZykKCQl7CgkJCWltZ19yZSA9IG5l dyBSZWdFeHAoIl9jb2xsYXBzZWRcXC5naWYkIik7CgkJCWltZy5zcmMgPSBpbWcu c3JjLnJlcGxhY2UoaW1nX3JlLCAnLmdpZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsK CQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgiXih0aGVhZHx0Y2F0KShfY29sbGFwc2Vk KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05hbWUucmVwbGFjZShj ZWxfcmUsICckMScpOwoJCX0KCX0KCWVsc2UKCXsKCQlvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCQlzYXZlX2NvbGxhcHNlZChvYmppZCwgdHJ1ZSk7CgkJaWYg KGltZykKCQl7CgkJCWltZ19yZSA9IG5ldyBSZWdFeHAoIlxcLmdpZiQiKTsKCQkJ aW1nLnNyYyA9IGltZy5zcmMucmVwbGFjZShpbWdfcmUsICdfY29sbGFwc2VkLmdp ZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsKCQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgi Xih0aGVhZHx0Y2F0KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05h bWUucmVwbGFjZShjZWxfcmUsICckMV9jb2xsYXBzZWQnKTsKCQl9Cgl9CglyZXR1 cm4gZmFsc2U7Cn0KCi8qKgoqIFVwZGF0ZXMgdmJ1bGxldGluX2NvbGxhcHNlIGNv b2tpZSB3aXRoIGNvbGxhcHNlIHByZWZlcmVuY2VzCioKKiBAcGFyYW0Jc3RyaW5n CVVuaXF1ZSBJRCBmb3IgdGhlIGNvbGxhcHNlIGdyb3VwCiogQHBhcmFtCWJvb2xl YW4JQWRkIGEgY29va2llCiovCmZ1bmN0aW9uIHNhdmVfY29sbGFwc2VkKG9iamlk LCBhZGRjb2xsYXBzZWQpCnsKCXZhciBjb2xsYXBzZWQgPSBmZXRjaF9jb29raWUo J3ZidWxsZXRpbl9jb2xsYXBzZScpOwoJdmFyIHRtcCA9IG5ldyBBcnJheSgpOwoK CWlmIChjb2xsYXBzZWQgIT0gbnVsbCkKCXsKCQljb2xsYXBzZWQgPSBjb2xsYXBz ZWQuc3BsaXQoJ1xuJyk7CgoJCWZvciAodmFyIGkgaW4gY29sbGFwc2VkKQoJCXsK CQkJaWYgKGNvbGxhcHNlZFtpXSAhPSBvYmppZCAmJiBjb2xsYXBzZWRbaV0gIT0g JycpCgkJCXsKCQkJCXRtcFt0bXAubGVuZ3RoXSA9IGNvbGxhcHNlZFtpXTsKCQkJ fQoJCX0KCX0KCglpZiAoYWRkY29sbGFwc2VkKQoJewoJCXRtcFt0bXAubGVuZ3Ro XSA9IG9iamlkOwoJfQoKCWV4cGlyZXMgPSBuZXcgRGF0ZSgpOwoJZXhwaXJlcy5z ZXRUaW1lKGV4cGlyZXMuZ2V0VGltZSgpICsgKDEwMDAgKiA4NjQwMCAqIDM2NSkp OwoJc2V0X2Nvb2tpZSgndmJ1bGxldGluX2NvbGxhcHNlJywgdG1wLmpvaW4oJ1xu JyksIGV4cGlyZXMpOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwovLyBFdmVudCBIYW5kbGVycyBmb3IgUGFnZU5hdiBtZW51cwoKLyoqCiogQ2xh c3MgdG8gaGFuZGxlIHBhZ2VuYXYgZXZlbnRzCiovCmZ1bmN0aW9uIHZCcGFnZW5h digpCnsKfQoKLyoqCiogSGFuZGxlcyBjbGlja3Mgb24gcGFnZW5hdiBtZW51IGNv bnRyb2wgb2JqZWN0cwoqLwp2QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpf b25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuX29uY2xpY2soZSk7Cgl2YXIg aW5wdXRzID0gZmV0Y2hfdGFncyh0aGlzLm1lbnUubWVudW9iaiwgJ2lucHV0Jyk7 Cglmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlp ZiAoaW5wdXRzW2ldLnR5cGUgPT0gJ3RleHQnKQoJCXsKCQkJaW5wdXRzW2ldLmZv Y3VzKCk7CgkJCWJyZWFrOwoJCX0KCX0KfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIHBh Z2VuYXYgZm9ybS4uLiBzb3J0IG9mCiovCnZCcGFnZW5hdi5wcm90b3R5cGUuZm9y bV9nb3RvcGFnZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICgocGFnZW51bSA9IHBhcnNl SW50KGZldGNoX29iamVjdCgncGFnZW5hdl9pdHh0JykudmFsdWUsIDEwKSkgPiAw KQoJewoJCXdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuYWRkciArICcmcGFnZT0nICsg cGFnZW51bTsKCX0KCXJldHVybiBmYWxzZTsKfTsKCi8qKgoqIEhhbmRsZXMgY2xp Y2tzIG9uIHRoZSAnR28nIGJ1dHRvbiBpbiBwYWdlbmF2IHBvcHVwcwoqLwp2QnBh Z2VuYXYucHJvdG90eXBlLmlidG5fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJl dHVybiB0aGlzLmZvcm0uZ290b3BhZ2UoKTsKfTsKCi8qKgoqIEhhbmRsZXMga2V5 cHJlc3NlcyBpbiB0aGUgdGV4dCBpbnB1dCBvZiBwYWdlbmF2IHBvcHVwcwoqLwp2 QnBhZ2VuYXYucHJvdG90eXBlLml0eHRfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUp CnsKCXJldHVybiAoKGUgPyBlIDogd2luZG93LmV2ZW50KS5rZXlDb2RlID09IDEz ID8gdGhpcy5mb3JtLmdvdG9wYWdlKCkgOiB0cnVlKTsKfTsKCi8vICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIERIVE1MIFBvcHVwIE1lbnUgSGFuZGxp bmcgKGNvbXBsZW1lbnRzIHZidWxsZXRpbl9tZW51LmpzKQoKLyoqCiogV3JhcHBl ciBmb3IgdkJtZW51LnJlZ2lzdGVyCioKKiBAcGFyYW0Jc3RyaW5nCUNvbnRyb2wg SUQKKiBAcGFyYW0JYm9vbGVhbglObyBpbWFnZSAodHJ1ZSkKKiBAcGFyYW0JYm9v bGVhbglEb2VzIG5vdGhpbmcgYW55IG1vcmUKKi8KZnVuY3Rpb24gdmJtZW51X3Jl Z2lzdGVyKGNvbnRyb2xpZCwgbm9pbWFnZSwgZGF0ZWZpZWxkKQp7CglpZiAodHlw ZW9mKHZCbWVudSkgPT0gIm9iamVjdCIpCgl7CgkJcmV0dXJuIHZCbWVudS5yZWdp c3Rlcihjb250cm9saWQsIG5vaW1hZ2UpOwoJfQoJZWxzZQoJewoJCXJldHVybiBm YWxzZTsKCX0KfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g U3R1ZmYgdGhhdCByZWFsbHkgZG9lc24ndCBmaXQgYW55d2hlcmUgZWxzZQoKLyoq CiogU2V0cyBhbiBlbGVtZW50IGFuZCBhbGwgaXRzIGNoaWxkcmVuIHRvIGJlICd1 bnNlbGVjdGFibGUnCioKKiBAcGFyYW0Jb2JqZWN0CU9iamVjdCB0byBiZSBtYWRl IHVuc2VsZWN0YWJsZQoqLwpmdW5jdGlvbiBzZXRfdW5zZWxlY3RhYmxlKG9iaikK ewoJaWYgKCFpc19pZTQgJiYgdHlwZW9mIG9iai50YWdOYW1lICE9ICd1bmRlZmlu ZWQnKQoJewoJCWlmIChvYmouaGFzQ2hpbGROb2RlcygpKQoJCXsKCQkJZm9yICh2 YXIgaSA9IDA7IGkgPCBvYmouY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKCQkJewoJ CQkJc2V0X3Vuc2VsZWN0YWJsZShvYmouY2hpbGROb2Rlc1tpXSk7CgkJCX0KCQl9 CgkJb2JqLnVuc2VsZWN0YWJsZSA9ICdvbic7Cgl9Cn0KCi8qKgoqIEZldGNoZXMg dGhlIHNlc3Npb25oYXNoIGZyb20gdGhlIFNFU1NJT05VUkwgdmFyaWFibGUKKgoq IEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIGZldGNoX3Nlc3Npb25oYXNoKCkK ewoJcmV0dXJuIChTRVNTSU9OVVJMID09ICcnID8gJycgOiBTRVNTSU9OVVJMLnN1 YnN0cigyLCAzMikpOwp9CgovKioKKiBFbXVsYXRlcyB0aGUgUEhQIHZlcnNpb24g b2YgdkJ1bGxldGluJ3MgY29uc3RydWN0X3BocmFzZSgpIHNwcmludGYgd3JhcHBl cgoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgY29udGFpbmluZyAlMSRzIHR5cGUg cmVwbGFjZW1lbnQgbWFya2VycwoqIEBwYXJhbQlzdHJpbmcJRmlyc3QgcmVwbGFj ZW1lbnQKKiBAcGFyYW0Jc3RyaW5nCU50aCByZXBsYWNlbWVudAoqCiogQHJldHVy bglzdHJpbmcKKi8KZnVuY3Rpb24gY29uc3RydWN0X3BocmFzZSgpCnsKCWlmICgh YXJndW1lbnRzIHx8IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8ICFpc19yZWdleHAp Cgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXZhciBhcmdzID0gYXJndW1lbnRzOwoJ dmFyIHN0ciA9IGFyZ3NbMF07Cgl2YXIgcmU7CgoJZm9yICh2YXIgaSA9IDE7IGkg PCBhcmdzLmxlbmd0aDsgaSsrKQoJewoJCXJlID0gbmV3IFJlZ0V4cCgiJSIgKyBp ICsgIlxcJHMiLCAnZ2knKTsKCQlzdHIgPSBzdHIucmVwbGFjZShyZSwgYXJnc1tp XSk7Cgl9CglyZXR1cm4gc3RyOwp9CgovKioKKiBIYW5kbGVzIHRoZSBxdWljayBz dHlsZS9sYW5ndWFnZSBvcHRpb25zIGluIHRoZSBmb290ZXIKKgoqIEBwYXJhbQlv YmplY3QJU2VsZWN0IG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJVHlwZSAoc3R5bGUg b3IgbGFuZ3VhZ2UpCiovCmZ1bmN0aW9uIHN3aXRjaF9pZChzZWxlY3RvYmosIHR5 cGUpCnsKCXZhciBpZCA9IHNlbGVjdG9iai5vcHRpb25zW3NlbGVjdG9iai5zZWxl Y3RlZEluZGV4XS52YWx1ZTsKCglpZiAoaWQgPT0gJycpCgl7CgkJcmV0dXJuOwoJ fQoKCXZhciB1cmwgPSBuZXcgU3RyaW5nKHdpbmRvdy5sb2NhdGlvbik7Cgl2YXIg ZnJhZ21lbnQgPSBuZXcgU3RyaW5nKCcnKTsKCgkvLyBnZXQgcmlkIG9mIGZyYWdt ZW50Cgl1cmwgPSB1cmwuc3BsaXQoJyMnKTsKCgkvLyBkZWFsIHdpdGggdGhlIGZy YWdtZW50IGZpcnN0CglpZiAodXJsWzFdKQoJewoJCWZyYWdtZW50ID0gJyMnICsg dXJsWzFdOwoJfQoKCS8vIGRlYWwgd2l0aCB0aGUgbWFpbiB1cmwKCXVybCA9IHVy bFswXTsKCgkvLyByZW1vdmUgaWQ9eCYgZnJvbSBtYWluIGJpdAoJaWYgKHVybC5p bmRleE9mKHR5cGUgKyAnaWQ9JykgIT0gLTEgJiYgaXNfcmVnZXhwKQoJewoJCXJl ID0gbmV3IFJlZ0V4cCh0eXBlICsgImlkPVxcZCsmPyIpOwoJCXVybCA9IHVybC5y ZXBsYWNlKHJlLCAnJyk7Cgl9CgoJLy8gYWRkIHRoZSA/IHRvIHRoZSB1cmwgaWYg bmVlZGVkCglpZiAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSkKCXsKCQl1cmwgKz0g Jz8nOwoJfQoJZWxzZQoJewoJCS8vIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2 YWxpZCBjaGFyYWN0ZXIgdG8gam9pbiBvdXIgaWQgYml0CgkJbGFzdGNoYXIgPSB1 cmwuc3Vic3RyKHVybC5sZW5ndGggLSAxKTsKCQlpZiAobGFzdGNoYXIgIT0gJyYn ICYmIGxhc3RjaGFyICE9ICc/JykKCQl7CgkJCXVybCArPSAnJic7CgkJfQoJfQoK CXdpbmRvdy5sb2NhdGlvbiA9IHVybCArIHR5cGUgKyAnaWQ9JyArIGlkICsgZnJh Z21lbnQ7Cn0KCi8qKgoqIFRha2VzIHRoZSAnYWx0JyBhdHRyaWJ1dGUgZm9yIGFu IGltYWdlIGFuZCBhdHRhY2hlcyBpdCB0byB0aGUgJ3RpdGxlJyBhdHRyaWJ1dGUK KgoqIEBwYXJhbQlvYmplY3QJSW1hZ2Ugb2JqZWN0CiovCmZ1bmN0aW9uIGltZ19h bHRfMl90aXRsZShpbWcpCnsKCWlmICghaW1nLnRpdGxlICYmIGltZy5hbHQgIT0g JycpCgl7CgkJaW1nLnRpdGxlID0gaW1nLmFsdDsKCX0KfQoKLy8gIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gSW5pdGlhbGl6ZSBhIFBvc3RCaXQKCi8q KgoqIFRoaXMgZnVuY3Rpb24gcnVucyBhbGwgdGhlIG5lY2Vzc2FyeSBKYXZhc2Ny aXB0IGNvZGUgb24gYSBQb3N0Qml0CiogYWZ0ZXIgaXQgaGFzIGJlZW4gbG9hZGVk IHZpYSBBSkFYLiBEb24ndCB1c2UgdGhpcyBtZXRob2QgYmVmb3JlIGEKKiBjb21w bGV0ZSBwYWdlIGxvYWQgb3IgeW91J2xsIGhhdmUgcHJvYmxlbXMuCioKKiBAcGFy YW0Jb2JqZWN0CU9iamVjdCBjb250YWluaW5nIHBvc3RiaXRzCiovCmZ1bmN0aW9u IFBvc3RCaXRfSW5pdChvYmosIHBvc3RpZCkKewoJY29uc29sZS5sb2coIlBvc3RC aXQgSW5pdDogJWQiLCBwb3N0aWQpOwoKCWlmICh0eXBlb2YgdkJtZW51ICE9ICd1 bmRlZmluZWQnKQoJewoJCS8vIGluaXQgcHJvZmlsZSBtZW51KHMpCgkJdmFyIGRp dnMgPSBmZXRjaF90YWdzKG9iaiwgJ2RpdicpOwoJCWZvciAodmFyIGkgPSAwOyBp IDwgZGl2cy5sZW5ndGg7IGkrKykKCQl7CgkJCWlmIChkaXZzW2ldLmlkICYmIGRp dnNbaV0uaWQuc3Vic3RyKDAsIDkpID09ICdwb3N0bWVudV8nKQoJCQl7CgkJCQl2 Qm1lbnUucmVnaXN0ZXIoZGl2c1tpXS5pZCwgdHJ1ZSk7CgkJCX0KCQl9Cgl9CgoJ aWYgKHR5cGVvZiB2Ql9RdWlja0VkaXRvciAhPSAndW5kZWZpbmVkJykKCXsKCQkv LyBpbml0IHF1aWNrIGVkaXQgY29udHJvbHMKCQl2Ql9BSkFYX1F1aWNrRWRpdF9J bml0KG9iaik7Cgl9CgoJaWYgKHR5cGVvZiB2Ql9RdWlja1JlcGx5ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJcXJfaW5p dF9idXR0b25zKG9iaik7Cgl9CgoJaWYgKHR5cGVvZiBtcV9pbml0ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJbXFfaW5p dChvYmopOwoJfQoKCWlmICh0eXBlb2YgdkJyZXAgIT0gJ3VuZGVmaW5lZCcpCgl7 CgkJaWYgKHR5cGVvZiBwb3N0aWQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBv c3RpZCAhPSAnbnVsbCcpCgkJewoJCQl2YnJlcF9yZWdpc3Rlcihwb3N0aWQpOwoJ CX0KCX0KCglpZiAodHlwZW9mIGlubGluZU1vZCAhPSAndW5kZWZpbmVkJykKCXsK CQlpbV9pbml0KG9iaik7Cgl9Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCi8vIE1haW4gdkJ1bGxldGluIEphdmFzY3JpcHQgSW5pdGlhbGl6YXRp b24KCi8qKgoqIFRoaXMgZnVuY3Rpb24gcnVucyAoYWxtb3N0KSBhdCB0aGUgZW5k IG9mIHNjcmlwdCBsb2FkaW5nIG9uIG1vc3QgdkJ1bGxldGluIHBhZ2VzCioKKiBJ dCBzZXRzIHVwIHRoaW5ncyBsaWtlIGltYWdlIGFsdC0+dGl0bGUgdGFncywgdHVy bnMgb24gdGhlIHBvcHVwIG1lbnUgc3lzdGVtIGV0Yy4KKgoqIEByZXR1cm4JYm9v bGVhbgoqLwpmdW5jdGlvbiB2QnVsbGV0aW5faW5pdCgpCnsKCS8vIGRvbid0IGJv dGhlciBkb2luZyBhbnkgZXhjaXRpbmcgc3R1ZmYgZm9yIFdlYlRWCglpZiAoaXNf d2VidHYpCgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8vIHNldCAndGl0bGUnIHRh Z3MgZm9yIGltYWdlIGVsZW1lbnRzCgl2YXIgaW1ncyA9IGZldGNoX3RhZ3MoZG9j dW1lbnQsICdpbWcnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgaW1ncy5sZW5ndGg7 IGkrKykKCXsKCQlpbWdfYWx0XzJfdGl0bGUoaW1nc1tpXSk7Cgl9CgoJLy8gZmlu YWxpemUgcG9wdXAgbWVudXMKCWlmICh0eXBlb2YgdkJtZW51ID09ICdvYmplY3Qn KQoJewoJCS8vIGNsb3NlIGFsbCBtZW51cyBvbiBkb2N1bWVudCBjbGljayBvciBy ZXNpemUKCQlpZiAodHlwZW9mKFlBSE9PKSAhPSAidW5kZWZpbmVkIikKCQl7CgkJ CVlBSE9PLnV0aWwuRXZlbnQub24oZG9jdW1lbnQsICJjbGljayIsIHZibWVudV9o aWRlKTsKCQkJWUFIT08udXRpbC5FdmVudC5vbih3aW5kb3csICJyZXNpemUiLCB2 Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAm JiAhaXNfc2FmKQoJCXsKCQkJZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY2xpY2sn LCB2Ym1lbnVfaGlkZSk7CgkJCXdpbmRvdy5hdHRhY2hFdmVudCgnb25yZXNpemUn LCB2Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50 TGlzdGVuZXIgJiYgIWlzX3NhZikKCQl7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlz dGVuZXIoJ2NsaWNrJywgdmJtZW51X2hpZGUsIGZhbHNlKTsKCQkJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHZibWVudV9oaWRlLCBmYWxzZSk7CgkJ fQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5vbmNsaWNrID0gdmJtZW51X2hpZGU7CgkJ CXdpbmRvdy5vbnJlc2l6ZSA9IHZibWVudV9oaWRlOwoJCX0KCgkJLy8gYWRkIHBv cHVwcyB0byBwYWdlbmF2IGVsZW1lbnRzCgkJdmFyIHBhZ2VuYXZzID0gZmV0Y2hf dGFncyhkb2N1bWVudCwgJ3RkJyk7CgkJZm9yICh2YXIgbiA9IDA7IG4gPCBwYWdl bmF2cy5sZW5ndGg7IG4rKykKCQl7CgkJCWlmIChwYWdlbmF2c1tuXS5oYXNDaGls ZE5vZGVzKCkgJiYgcGFnZW5hdnNbbl0uZmlyc3RDaGlsZC5uYW1lICYmIHBhZ2Vu YXZzW25dLmZpcnN0Q2hpbGQubmFtZS5pbmRleE9mKCdQYWdlTmF2JykgIT0gLTEp CgkJCXsKCQkJCXZhciBhZGRyID0gcGFnZW5hdnNbbl0udGl0bGU7CgkJCQlwYWdl bmF2c1tuXS50aXRsZSA9ICcnOwoJCQkJcGFnZW5hdnNbbl0uaW5uZXJIVE1MID0g Jyc7CgkJCQlwYWdlbmF2c1tuXS5pZCA9ICdwYWdlbmF2LicgKyBuOwoJCQkJdmFy IHBuID0gdkJtZW51LnJlZ2lzdGVyKHBhZ2VuYXZzW25dLmlkKTsKCQkJCWlmIChp c19zYWYpCgkJCQl7CgkJCQkJcG4uY29udHJvbG9iai5fb25jbGljayA9IHBuLmNv bnRyb2xvYmoub25jbGljazsKCQkJCQlwbi5jb250cm9sb2JqLm9uY2xpY2sgPSB2 QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpfb25jbGljazsKCQkJCX0KCQkJ fQoJCX0KCgkJLy8gcHJvY2VzcyB0aGUgcGFnZW5hdnMgcG9wdXAgZm9ybQoJCWlm ICh0eXBlb2YgYWRkciAhPSAndW5kZWZpbmVkJykKCQl7CgkJCWZldGNoX29iamVj dCgncGFnZW5hdl9mb3JtJykuYWRkciA9IGFkZHI7CgkJCWZldGNoX29iamVjdCgn cGFnZW5hdl9mb3JtJykuZ290b3BhZ2UgPSB2QnBhZ2VuYXYucHJvdG90eXBlLmZv cm1fZ290b3BhZ2U7CgkJCWZldGNoX29iamVjdCgncGFnZW5hdl9pYnRuJykub25j bGljayA9IHZCcGFnZW5hdi5wcm90b3R5cGUuaWJ0bl9vbmNsaWNrOwoJCQlmZXRj aF9vYmplY3QoJ3BhZ2VuYXZfaXR4dCcpLm9ua2V5cHJlc3MgPSB2QnBhZ2VuYXYu cHJvdG90eXBlLml0eHRfb25rZXlwcmVzczsKCQl9CgoJCS8vIGFjdGl2YXRlIHRo ZSBtZW51IHN5c3RlbQoJCXZCbWVudS5hY3RpdmF0ZSh0cnVlKTsKCX0KCgkvLyB0 aGUgbmV3IGluaXQgc3lzdGVtCgl2QnVsbGV0aW4uaW5pdCgpOwoKCXJldHVybiB0 cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2QnVs bGV0aW4gSmF2YXNjcmlwdCBGcmFtZXdvcmsKCi8qKgoqIEdlbmVyYWwgY2xhc3Mg Zm9yIGhhbmRsaW5nIGN1c3RvbSBldmVudHMgYW5kIGN1c3RvbSBjb250cm9scwoq LwpmdW5jdGlvbiB2QnVsbGV0aW5fRnJhbWV3b3JrKCkKewoJLyoqCgkqIEB2YXIJ YXJyYXkJQXJyYXkgb2YgZWxlbWVudHMgdG8gYmUgcGFzc2VkIHRvIGNvbnRyb2wg aW5pdCBmdW5jdGlvbnMKCSogQHZhcglhcnJheQlBcnJheSBvZiBBSkFYIGxvYWQv c2F2ZSBVUkxzCgkqIEB2YXIJYXJyYXkJQXJyYXkgb2YgWVVJIGN1c3RvbSBldmVu dHMKCSogQHZhcglkYXRlCUN1cnJlbnQgdGltZQoJKi8KCXRoaXMuZWxlbWVudHMg PSBuZXcgQXJyYXkoKTsKCXRoaXMuYWpheHVybHMgPSBuZXcgQXJyYXkoKTsKCXRo aXMuZXZlbnRzID0gbmV3IEFycmF5KCk7Cgl0aGlzLnRpbWUgPSBuZXcgRGF0ZSgp OwoKCS8vIGN1c3RvbSBldmVudCB0byBmaXJlIGR1cmluZyBjbGFzcyBpbml0Cgl0 aGlzLmFkZF9ldmVudCgic3lzdGVtSW5pdCIpOwp9CgovKioKKiBJbml0aWFsaXpl cyB0aGUgb2JqZWN0IC0gdXN1YWxseSBjYWxsZWQgYXQgZW5kIG9mIGZvb3RlciB0 ZW1wbGF0ZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5pbml0ID0g ZnVuY3Rpb24oKQp7Cgl0aGlzLmV2ZW50cy5zeXN0ZW1Jbml0LmZpcmUoKTsKCWNv bnNvbGUuaW5mbygiU3lzdGVtIEluaXQgRmlyZWQiKTsKfQoKLyoqCiogRW11bGF0 ZXMgT09QIGNsYXNzIGV4dGVuc2lvbgoqCiogQHBhcmFtCW9iamVjdAlFeHRlbmRl ZCBjbGFzcwoqIEBwYXJhbQlvYmplY3QJQmFzZSBjbGFzcwoqLwp2QnVsbGV0aW5f RnJhbWV3b3JrLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihzdWJDbGFzcywg YmFzZUNsYXNzKQp7CiAgIGZ1bmN0aW9uIGluaGVyaXRhbmNlKCkge30KICAgaW5o ZXJpdGFuY2UucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKCiAgIHN1 YkNsYXNzLnByb3RvdHlwZSA9IG5ldyBpbmhlcml0YW5jZSgpOwogICBzdWJDbGFz cy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKICAgc3ViQ2xhc3Mu YmFzZUNvbnN0cnVjdG9yID0gYmFzZUNsYXNzOwogICBzdWJDbGFzcy5zdXBlckNs YXNzID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKfQoKLyoqCiogUmVnaXN0ZXJzIGEg Y3VzdG9tIGNvbnRyb2wgZm9yIGxhdGVyIGluaXRpYWxpemF0aW9uCiogQXJndW1l bnRzIDEtbiBhcmUgc3RvcmVkIGZvciBsYXRlciB1c2UKKgoqIEBwYXJhbQlzdHJp bmcJQ29udHJvbCB0eXBlICh2Ql9EYXRlUGlja2VyIGV0Yy4pCiogQHBhcmFtCXN0 cmluZwlIVE1MIGVsZW1lbnQgSUQKKi8KdkJ1bGxldGluX0ZyYW1ld29yay5wcm90 b3R5cGUucmVnaXN0ZXJfY29udHJvbCA9IGZ1bmN0aW9uKGNvbnRyb2x0eXBlLCBl bGVtZW50KQp7Cgl2YXIgYXJncyA9IG5ldyBBcnJheSgpOwoJZm9yICh2YXIgaSA9 IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCgl7CgkJYXJncy5wdXNoKGFy Z3VtZW50c1tpXSk7Cgl9CglpZiAoIXRoaXMuZWxlbWVudHNbY29udHJvbHR5cGVd KQoJewoJCWNvbnNvbGUuaW5mbygiQ3JlYXRpbmcgYXJyYXkgdkJ1bGxldGluLmVs ZW1lbnRzW1wiJXNcIl0iLCBjb250cm9sdHlwZSk7CgkJdGhpcy5lbGVtZW50c1tj b250cm9sdHlwZV0gPSBuZXcgQXJyYXkoKTsKCX0KCXZhciB4ID0gdGhpcy5lbGVt ZW50c1tjb250cm9sdHlwZV0ucHVzaChhcmdzKTsKCWNvbnNvbGUubG9nKCJ2QnVs bGV0aW4uZWxlbWVudHNbXCIlc1wiXVslZF0gPSAlcyIsIGNvbnRyb2x0eXBlLCB4 LTEsIGFyZ3Muam9pbigiLCAiKSk7Cn0KCi8qKgoqIFJlZ2lzdGVycyBBSkFYIGxv YWQvc2F2ZSB1cmxzIGZvciBhIGNvbnRyb2wKKgoqIEBwYXJhbQlGZXRjaCBVUkwK KiBAcGFyYW0JU2F2ZSBVUkwKKiBAcGFyYW0JTGlzdCBvZiBlbGVtZW50cyB0byB3 aGljaCB0aGVzZSBVUkxzIGFwcGx5CiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJv dG90eXBlLnJlZ2lzdGVyX2FqYXhfdXJscyA9IGZ1bmN0aW9uKGZldGNoLCBzYXZl LCBlbGVtZW50cykKewoJdmFyIGZldGNoID0gZmV0Y2guc3BsaXQoIj8iKTsgZmV0 Y2hbMV0gPSBTRVNTSU9OVVJMICsgInNlY3VyaXR5dG9rZW49IiArIFNFQ1VSSVRZ VE9LRU4gKyAiJmFqYXg9MSYiICsgZmV0Y2hbMV0ucmVwbGFjZSgvXHsoXGQrKSg6 XHcrKT9cfS9naSwgJyUkMSRzJyk7Cgl2YXIgc2F2ZSAgPSAgc2F2ZS5zcGxpdCgi PyIpOyAgc2F2ZVsxXSA9IFNFU1NJT05VUkwgKyAic2VjdXJpdHl0b2tlbj0iICsg U0VDVVJJVFlUT0tFTiArICImYWpheD0xJiIgKyBzYXZlWzFdLnJlcGxhY2UoL1x7 KFxkKykoOlx3Kyk/XH0vZ2ksICclJDEkcycpOwoKCWNvbnNvbGUubG9nKCJSZWdp c3RlciBBSkFYIFVSTHMgZm9yICVzIiwgZWxlbWVudHMpOwoKCWZvciAodmFyIGkg PSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCgl7CgkJdGhpcy5hamF4dXJs c1tlbGVtZW50c1tpXV0gPSBuZXcgQXJyYXkoZmV0Y2gsIHNhdmUpOwoJfQp9Cgov KioKKiBSZWdpc3RlciBhIGN1c3RvbSBldmVudAoqCiogQHBhcmFtCXN0cmluZwlF dmVudCBuYW1lCiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJvdG90eXBlLmFkZF9l dmVudCA9IGZ1bmN0aW9uKGV2ZW50bmFtZSkKewoJdGhpcy5ldmVudHNbZXZlbnRu YW1lXSA9ICh0eXBlb2YgWUFIT08gIT0gJ3VuZGVmaW5lZCcgPyBuZXcgWUFIT08u dXRpbC5DdXN0b21FdmVudChldmVudG5hbWUpIDogbmV3IG51bGxfZXZlbnQoKSk7 Cn0KCi8qKgoqIEJDOiBQYXNzIGNvbnNvbGUgY2FsbHMgdG8gRmlyZWJ1ZyBpZiBp dCdzIGF2YWlsYWJsZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5j b25zb2xlID0gY29uc29sZS5sb2c7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwoKLy8gaW5pdGlhbGl6ZSB0aGUgUEhQIGZ1bmN0aW9uIGVtdWxhdG9y CnZhciBQSFAgPSBuZXcgdkJfUEhQX0VtdWxhdG9yKCk7CgovLyBDcmVhdGUgYW4g aW5zdGFuY2Ugb2YgdGhlIHZCdWxsZXRpbiBGcmFtZXdvcmsgb2JqZWN0CnZhciB2 QnVsbGV0aW4gPSBuZXcgdkJ1bGxldGluX0ZyYW1ld29yaygpOwoKLyo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBE b3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRS Q1NmaWxlJCAtICRSZXZpc2lvbjogMjY0MTMgJAp8fCAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_menu.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_menu.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_menu.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCnZCdWxsZXRp bi5hZGRfZXZlbnQoInZCbWVudVNob3ciKTsKdkJ1bGxldGluLmFkZF9ldmVudCgi dkJtZW51SGlkZSIpOwoKLyoqCiogdkJ1bGxldGluIHBvcHVwIG1lbnUgZXhhbXBs ZSB1c2FnZToKKgoqIFRvIGNyZWF0ZSBhIG5ldyBwb3B1cCBtZW51OgoqIAk8ZWxl bWVudCBpZD0ieCI+Q2xpY2sgbWUgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPiB2Ym1lbnVfcmVnaXN0ZXIoJ3gnKTsgPC9zY3JpcHQ+PC9lbGVtZW50Pgoq IFRoZSBtZW51IGNsYXNzIGV4cGVjdHMgYW4gZWxlbWVudCB3aXRoIHRoZSBpZCBv ZiB4X21lbnUgdGhhdCBjb250YWlucyB0aGUgbWVudS4KKgk8ZGl2IGlkPSJ4X21l bnUiIGNsYXNzPSJ2Ym1lbnVfcG9wdXAiPiAuLi4gPC9kaXY+CiovCgovLyAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9Qb3B1cF9IYW5kbGVyCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiB2QnVsbGV0aW4g cG9wdXAgbWVudSByZWdpc3RyeQoqLwpmdW5jdGlvbiB2Ql9Qb3B1cF9IYW5kbGVy KCkKewoJLyoqCgkqIE9wdGlvbnM6CgkqCgkqIEB2YXIJaW50ZWdlcglOdW1iZXIg b2Ygc3RlcHMgdG8gdXNlIGluIHNsaWRpbmcgbWVudXMgb3BlbgoJKiBAdmFyCWJv b2xlYW4JVXNlIG9wYWNpdHkgZmFjZSBpbiBtZW51IG9wZW4/CgkqLwoJdGhpcy5v cGVuX3N0ZXBzID0gMTA7Cgl0aGlzLm9wZW5fZmFkZSA9IGZhbHNlOwoKCXRoaXMu YWN0aXZlID0gZmFsc2U7CgoJdGhpcy5tZW51cyA9IG5ldyBBcnJheSgpOwoJdGhp cy5hY3RpdmVtZW51ID0gbnVsbDsKCgl0aGlzLmhpZGRlbl9zZWxlY3RzID0gbmV3 IEFycmF5KCk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQov LyB2Ql9Qb3B1cF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEFjdGl2YXRlIC8gRGVh Y3RpdmF0ZSB0aGUgbWVudSBzeXN0ZW0KKgoqIEBwYXJhbQlib29sZWFuCUFjdGl2 ZSBzdGF0ZSBmb3IgbWVudXMKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUu YWN0aXZhdGUgPSBmdW5jdGlvbihhY3RpdmUpCnsKCXRoaXMuYWN0aXZlID0gYWN0 aXZlOwoJY29uc29sZS5sb2coInZCbWVudSA6OiBTeXN0ZW0gQWN0aXZhdGVkIik7 Cn07CgovKioKKiBSZWdpc3RlciBhIGNvbnRyb2wgb2JqZWN0IGFzIGEgbWVudSBj b250cm9sCioKKiBAcGFyYW0Jc3RyaW5nCUlEIG9mIHRoZSBjb250cm9sIG9iamVj dAoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBwb3AgaW1hZ2UgYWRkaXRp b24KKiBAcGFyYW0JYm9vbGVhbglEaXNhYmxlIG1lbnUgc2xpZGUgb3BlbgoqCiog QHJldHVybgl2Ql9Qb3B1cF9NZW51CiovCnZCX1BvcHVwX0hhbmRsZXIucHJvdG90 eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJLy9jb25zb2xlLmxvZygidkJtZW51IDo6IHJlZ2lzdGVyaW5nICcl cyciLCBjb250cm9sa2V5KTsKCXRoaXMubWVudXNbY29udHJvbGtleV0gPSBuZXcg dkJfUG9wdXBfTWVudShjb250cm9sa2V5LCBub2ltYWdlLCBub3NsaWRlKTsKCgly ZXR1cm4gdGhpcy5tZW51c1tjb250cm9sa2V5XTsKfTsKCi8qKgoqIEhpZGUgYWN0 aXZlIG1lbnUKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUuaGlkZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHRoaXMuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCXRo aXMubWVudXNbdGhpcy5hY3RpdmVtZW51XS5oaWRlKCk7Cgl9Cn07CgoKLy8gIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gaW5pdGlhbGl6ZSBtZW51IHJl Z2lzdHJ5Cgp2YXIgdkJtZW51ID0gbmV3IHZCX1BvcHVwX0hhbmRsZXIoKTsKCi8q KgoqIEZ1bmN0aW9uIHRvIGFsbG93IGFueXRoaW5nIHRvIGhpZGUgYWxsIG1lbnVz CioKKiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCW1peGVk CiovCmZ1bmN0aW9uIHZibWVudV9oaWRlKGUpCnsKCWlmIChlICYmIGUuYnV0dG9u ICYmIGUuYnV0dG9uICE9IDEgJiYgZS50eXBlID09ICdjbGljaycpCgl7CgkJcmV0 dXJuIHRydWU7Cgl9CgllbHNlCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1BvcHVwX01lbnUK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8qKgoqIHZCdWxsZXRp biBwb3B1cCBtZW51IGNsYXNzIGNvbnN0cnVjdG9yCioKKiBNYW5hZ2VzIGEgc2lu Z2xlIG1lbnUgYW5kIGNvbnRyb2wgb2JqZWN0CiogSW5pdGlhbGl6ZXMgY29udHJv bCBvYmplY3QKKgoqIEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIGNvbnRyb2wgb2Jq ZWN0CiogQHBhcmFtCWJvb2xlYW4JRGlzYWJsZSBtZW51IHBvcCBpbWFnZSBhZGRp dGlvbgoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBzbGlkZSBvcGVuCiov CmZ1bmN0aW9uIHZCX1BvcHVwX01lbnUoY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJdGhpcy5jb250cm9sa2V5ID0gY29udHJvbGtleTsKCXRoaXMubWVu dW5hbWUgPSB0aGlzLmNvbnRyb2xrZXkuc3BsaXQoJy4nKVswXSArICdfbWVudSc7 CgoJdGhpcy5pbml0X2NvbnRyb2wobm9pbWFnZSk7CgoJaWYgKGZldGNoX29iamVj dCh0aGlzLm1lbnVuYW1lKSkKCXsKCQl0aGlzLmluaXRfbWVudSgpOwoJfQoKCXRo aXMuc2xpZGVfb3BlbiA9ICgoaXNfb3BlcmEgfHwgbm9zbGlkZSkgPyBmYWxzZSA6 IHRydWUpOwoJdGhpcy5vcGVuX3N0ZXBzID0gdkJtZW51Lm9wZW5fc3RlcHM7CgoJ dkJ1bGxldGluLmFkZF9ldmVudCgidkJtZW51U2hvd18iICsgdGhpcy5jb250cm9s a2V5KTsKCXZCdWxsZXRpbi5hZGRfZXZlbnQoInZCbWVudUhpZGVfIiArIHRoaXMu Y29udHJvbGtleSk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQovLyB2Ql9Qb3B1cF9NZW51IG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemUgdGhl IGNvbnRyb2wgb2JqZWN0CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf Y29udHJvbCA9IGZ1bmN0aW9uKG5vaW1hZ2UpCnsKCXRoaXMuY29udHJvbG9iaiA9 IGZldGNoX29iamVjdCh0aGlzLmNvbnRyb2xrZXkpOwoJdGhpcy5jb250cm9sb2Jq LnN0YXRlID0gZmFsc2U7CgoJaWYgKHRoaXMuY29udHJvbG9iai5maXJzdENoaWxk ICYmICh0aGlzLmNvbnRyb2xvYmouZmlyc3RDaGlsZC50YWdOYW1lID09ICdURVhU QVJFQScgfHwgdGhpcy5jb250cm9sb2JqLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAn SU5QVVQnKSkKCXsKCQkvLyBkbyBub3RoaW5nCgl9CgllbHNlCgl7CgkJaWYgKCFu b2ltYWdlICYmICEoaXNfbWFjICYmIGlzX2llKSkKCQl7CgkJCXZhciBzcGFjZSA9 IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyk7CgkJCXRoaXMuY29udHJvbG9i ai5hcHBlbmRDaGlsZChzcGFjZSk7CgoJCQl2YXIgaW1nID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnaW1nJyk7CgkJCWltZy5zcmMgPSBJTUdESVJfTUlTQyArICcv bWVudV9vcGVuLmdpZic7CgkJCWltZy5ib3JkZXIgPSAwOwoJCQlpbWcudGl0bGUg PSAnJzsKCQkJaW1nLmFsdCA9ICcnOwoJCQl0aGlzLmNvbnRyb2xvYmouYXBwZW5k Q2hpbGQoaW1nKTsKCQl9CgoJCXRoaXMuY29udHJvbG9iai51bnNlbGVjdGFibGUg PSB0cnVlOwoJCWlmICghbm9pbWFnZSkKCQl7CgkJCXRoaXMuY29udHJvbG9iai5z dHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsKCQl9CgkJdGhpcy5jb250cm9s b2JqLm9uY2xpY2sgPSB2Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xv Ympfb25jbGljazsKCQl0aGlzLmNvbnRyb2xvYmoub25tb3VzZW92ZXIgPSB2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xvYmpfb25tb3VzZW92ZXI7Cgl9 Cn07CgovKioKKiBJbml0IHRoZSBwb3B1cCBtZW51IG9iamVjdAoqLwp2Ql9Qb3B1 cF9NZW51LnByb3RvdHlwZS5pbml0X21lbnUgPSBmdW5jdGlvbigpCnsKCXRoaXMu bWVudW9iaiA9IGZldGNoX29iamVjdCh0aGlzLm1lbnVuYW1lKTsKCglpZiAodGhp cy5tZW51b2JqICYmICF0aGlzLm1lbnVvYmouaW5pdGlhbGl6ZWQpCgl7CgkJdGhp cy5tZW51b2JqLmluaXRpYWxpemVkID0gdHJ1ZTsKCQl0aGlzLm1lbnVvYmoub25j bGljayA9IGVfYnlfZ3VtOwoJCXRoaXMubWVudW9iai5zdHlsZS5wb3NpdGlvbiA9 ICdhYnNvbHV0ZSc7CgkJdGhpcy5tZW51b2JqLnN0eWxlLnpJbmRleCA9IDUwOwoK CQkvLyBpbml0IHBvcHVwIGZpbHRlcnMgKGllIG9ubHkpCgkJaWYgKGlzX2llICYm ICFpc19tYWMpCgkJewoJCQl0aGlzLm1lbnVvYmouc3R5bGUuZmlsdGVyICs9ICJw cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEoZW5hYmxlZD0x LG9wYWNpdHk9MTAwKSI7CgkJCXRoaXMubWVudW9iai5zdHlsZS5maWx0ZXIgKz0g InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5zaGFkb3coZGlyZWN0 aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3RoPTMpIjsKCQl9CgoJCXRoaXMu aW5pdF9tZW51X2NvbnRlbnRzKCk7Cgl9Cn07CgovKioKKiBJbml0IHRoZSBwb3B1 cCBtZW51IGNvbnRlbnRzCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf bWVudV9jb250ZW50cyA9IGZ1bmN0aW9uKCkKewoJdmFyIHRkcyA9IGZldGNoX3Rh Z3ModGhpcy5tZW51b2JqLCAndGQnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgdGRz Lmxlbmd0aDsgaSsrKQoJewoJCWlmICh0ZHNbaV0uY2xhc3NOYW1lID09ICd2Ym1l bnVfb3B0aW9uJykKCQl7CgkJCWlmICh0ZHNbaV0udGl0bGUgJiYgdGRzW2ldLnRp dGxlID09ICdub2hpbGl0ZScpCgkJCXsKCQkJCS8vIG5vdCBhbiBhY3RpdmUgY2Vs bAoJCQkJdGRzW2ldLnRpdGxlID0gJyc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkv LyBjcmVhdGUgYSByZWZlcmVuY2UgYmFjayB0byB0aGUgbWVudSBjbGFzcwoJCQkJ dGRzW2ldLmNvbnRyb2xrZXkgPSB0aGlzLmNvbnRyb2xrZXk7CgoJCQkJLy8gaGFu ZGxlIG1vdXNlb3ZlciAvIG1vdXNlb3V0IGhpZ2hsaWdodGluZyBldmVudHMKCQkJ CXRkc1tpXS5vbm1vdXNlb3ZlciA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUu bWVudW9wdGlvbl9vbm1vdXNlb3ZlcjsKCQkJCXRkc1tpXS5vbm1vdXNlb3V0ID0g dkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VvdXQ7 CgoJCQkJdmFyIGxpbmtzID0gZmV0Y2hfdGFncyh0ZHNbaV0sICdhJyk7CgkJCQlp ZiAobGlua3MubGVuZ3RoID09IDEpCgkJCQl7CgkJCQkJLyogT2sgd2UgaGF2ZSBh IGxpbmssIHdlIHNob3VsZCB1c2UgdGhpcyBpZgoJCQkJCTEuIFRoZXJlIGlzIG5v IG9uY2xpY2sgZXZlbnQgaW4gdGhlIGxpbmsKCQkJCQkyLiBUaGVyZSBpcyBubyBv bmNsaWNrIGV2ZW50IG9uIHRoZSBjZWxsCgkJCQkJMy4gVGhlIG9uY2xpY2sgZXZl bnQgZm9yIHRoZSBjZWxsIHNob3VsZCBlcXVhbCB0aGUgbGluayBpZiB0aGUgYWJv dmUgYXJlIHRydWUKCgkJCQkJSWYgd2UgZmluZCBhIGJyb3dzZXIgdGhhdHMgZ2V0 cyBjb25mdXNlZCB3ZSBtYXkgbmVlZCB0byBzZXQgcmVtb3ZlX2xpbmsgdG8gdHJ1 ZSBmb3IgaXQuCgkJCQkJKi8KCgkJCQkJdGRzW2ldLmNsYXNzTmFtZSA9IHRkc1tp XS5jbGFzc05hbWUgKyAnIHZibWVudV9vcHRpb25fYWxpbmsnOwoJCQkJCXRkc1tp XS5pc2xpbmsgPSB0cnVlOwoKCQkJCQl2YXIgbGlua29iaiA9IGxpbmtzWzBdOwoJ CQkJCXZhciByZW1vdmVfbGluayA9IGZhbHNlOwoKCQkJCQl0ZHNbaV0udGFyZ2V0 ID0gbGlua29iai5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpOwoKCQkJCQlpZiAodHlw ZW9mIGxpbmtvYmoub25jbGljayA9PSAnZnVuY3Rpb24nKQoJCQkJCXsKCQkJCQkJ dGRzW2ldLm9mdW5jID0gbGlua29iai5vbmNsaWNrOwoJCQkJCQl0ZHNbaV0ub25j bGljayA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2Z1bmN0aW9uOwoJCQkJCQlyZW1vdmVfbGluayA9IHRydWU7CgkJCQkJfQoJ CQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9PSAnZnVuY3Rpb24n KQoJCQkJCXsKCQkJCQkJdGRzW2ldLm9mdW5jID0gdGRzW2ldLm9uY2xpY2s7CgkJ CQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5t ZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQkJCXJlbW92ZV9saW5rID0g dHJ1ZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGRzW2ldLmhyZWYg PSBsaW5rb2JqLmhyZWY7CgkJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBf RXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfbGluazsKCQkJCQl9 CgoJCQkJCWlmIChyZW1vdmVfbGluaykKCQkJCQl7CgkJCQkJCXZhciBuZXdsaW5r ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwoJCQkJCQluZXdsaW5rLmlu bmVySFRNTCA9IGxpbmtvYmouaW5uZXJIVE1MOwoJCQkJCQluZXdsaW5rLmhyZWYg PSAnIyc7CgkJCQkJCW5ld2xpbmsub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgZSA9 IGUgPyBlIDogd2luZG93LmV2ZW50OyBlLnJldHVyblZhbHVlID0gZmFsc2U7IHJl dHVybiBmYWxzZTsgfTsKCQkJCQkJdGRzW2ldLmluc2VydEJlZm9yZShuZXdsaW5r LCBsaW5rb2JqKTsKCQkJCQkJdGRzW2ldLnJlbW92ZUNoaWxkKGxpbmtvYmopOwoJ CQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9 PSAnZnVuY3Rpb24nKQoJCQkJewoJCQkJCXRkc1tpXS5vZnVuYyA9IHRkc1tpXS5v bmNsaWNrOwoJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnBy b3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQl9CgkJCX0K CQl9Cgl9Cn07CgovKioKKiBTaG93IHRoZSBtZW51CioKKiBAcGFyYW0Jb2JqZWN0 CVRoZSBjb250cm9sIG9iamVjdCBjYWxsaW5nIHRoZSBtZW51CiogQHBhcmFtCWJv b2xlYW4JVXNlIHNsaWRlIChmYWxzZSkgb3Igb3BlbiBpbnN0YW50bHk/ICh0cnVl KQoqLwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24ob2Jq LCBpbnN0YW50KQp7CglpZiAoIXZCbWVudS5hY3RpdmUpCgl7CgkJcmV0dXJuIGZh bHNlOwoJfQoJZWxzZSBpZiAoIXRoaXMubWVudW9iaikKCXsKCQl0aGlzLmluaXRf bWVudSgpOwoJfQoKCWlmICghdGhpcy5tZW51b2JqIHx8IHZCbWVudS5hY3RpdmVt ZW51ID09IHRoaXMuY29udHJvbGtleSkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJ Y29uc29sZS5sb2coInZCbWVudSA6OiBTaG93ICclcyciLCB0aGlzLmNvbnRyb2xr ZXkpOwoKCWlmICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsICYmIHZCbWVudS5h Y3RpdmVtZW51ICE9IHRoaXMuY29udHJvbGtleSkKCXsKCQl2Qm1lbnUubWVudXNb dkJtZW51LmFjdGl2ZW1lbnVdLmhpZGUoKTsKCX0KCgl2Qm1lbnUuYWN0aXZlbWVu dSA9IHRoaXMuY29udHJvbGtleTsKCgl0aGlzLm1lbnVvYmouc3R5bGUuZGlzcGxh eSA9ICcnOwoJaWYgKHRoaXMuc2xpZGVfb3BlbikKCXsKCQl0aGlzLm1lbnVvYmou c3R5bGUuY2xpcCA9ICdyZWN0KGF1dG8sIDBweCwgMHB4LCBhdXRvKSc7Cgl9CgoJ dGhpcy5zZXRfbWVudV9wb3NpdGlvbihvYmopOwoKCWlmICghaW5zdGFudCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwo dGhpcy5tZW51b2JqLm9mZnNldFdpZHRoIC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0 aGlzLmludGVydmFsWSA9IE1hdGguY2VpbCh0aGlzLm1lbnVvYmoub2Zmc2V0SGVp Z2h0IC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0aGlzLnNsaWRlKCh0aGlzLmRpcmVj dGlvbiA9PSAnbGVmdCcgPyAwIDogdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSwg MCwgMCk7Cgl9CgllbHNlIGlmICh0aGlzLm1lbnVvYmouc3R5bGUuY2xpcCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAn cmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7Cgl9CgoJLy8gZGVhbCB3aXRo IElFIHB1dHRpbmcgPHNlbGVjdD4gZWxlbWVudHMgb24gdG9wIG9mIGV2ZXJ5dGhp bmcKCXRoaXMuaGFuZGxlX292ZXJsYXBzKHRydWUpOwoKCWlmICh0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gdHJ1 ZTsKCQkvL3RoaXMuY29udHJvbG9iai5lZGl0b3IubWVudV9jb250ZXh0KHRoaXMu Y29udHJvbG9iaiwgJ21vdXNlZG93bicpOwoJCXZCX0VkaXRvclt0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLmNvbnRyb2xvYmosICdt b3VzZWRvd24nKTsKCX0KCgl2QnVsbGV0aW4uZXZlbnRzWyJ2Qm1lbnVTaG93XyIg KyB0aGlzLmNvbnRyb2xrZXldLmZpcmUodGhpcy5jb250cm9sa2V5KTsKCXZCdWxs ZXRpbi5ldmVudHMudkJtZW51U2hvdy5maXJlKHRoaXMuY29udHJvbGtleSk7Cn07 CgovKioKKiBQb3NpdGlvbiB0aGUgbWVudSByZWxhdGl2ZSB0byBhIHJlZmVyZW5j ZSBlbGVtZW50CioKKiBAcGFyYW0Jb2JqZWN0CVJlZmVyZW5jZSBIVE1MIGVsZW1l bnQKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuc2V0X21lbnVfcG9zaXRpb24g PSBmdW5jdGlvbihvYmopCnsKCXRoaXMucG9zID0gdGhpcy5mZXRjaF9vZmZzZXQo b2JqKTsKCXRoaXMubGVmdHB4ID0gdGhpcy5wb3NbJ2xlZnQnXTsKCXRoaXMudG9w cHggPSB0aGlzLnBvc1sndG9wJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoKCWlmICgo dGhpcy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgpID49IGRvY3Vt ZW50LmJvZHkuY2xpZW50V2lkdGggJiYgKHRoaXMubGVmdHB4ICsgb2JqLm9mZnNl dFdpZHRoIC0gdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSA+IDApCgl7CgkJdGhp cy5sZWZ0cHggPSB0aGlzLmxlZnRweCArIG9iai5vZmZzZXRXaWR0aCAtIHRoaXMu bWVudW9iai5vZmZzZXRXaWR0aDsKCQl0aGlzLmRpcmVjdGlvbiA9ICdyaWdodCc7 Cgl9CgllbHNlCgl7CgkJdGhpcy5kaXJlY3Rpb24gPSAnbGVmdCcKCX0KCgl0aGlz Lm1lbnVvYmouc3R5bGUubGVmdCA9IHRoaXMubGVmdHB4ICsgJ3B4JzsKCXRoaXMu bWVudW9iai5zdHlsZS50b3AgID0gdGhpcy50b3BweCArICdweCc7Cn07CgovKioK KiBIaWRlIHRoZSBtZW51CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmhpZGUg PSBmdW5jdGlvbihlKQp7CglpZiAoZSAmJiBlLmJ1dHRvbiAmJiBlLmJ1dHRvbiAh PSAxKQoJewoJCS8vIGdldCBhcm91bmQgc29tZSBjb250ZXh0IG1lbnUgaXNzdWVz IGV0Yy4KCQlyZXR1cm4gdHJ1ZTsKCX0KCgljb25zb2xlLmxvZygidkJtZW51IDo6 IEhpZGUgJyVzJyIsIHRoaXMuY29udHJvbGtleSk7CgoJdGhpcy5zdG9wX3NsaWRl KCk7CgoJdGhpcy5tZW51b2JqLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgoJdGhp cy5oYW5kbGVfb3ZlcmxhcHMoZmFsc2UpOwoKCWlmICh0aGlzLmNvbnRyb2xvYmou ZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gZmFsc2U7CgkJ dkJfRWRpdG9yW3RoaXMuY29udHJvbG9iai5lZGl0b3JpZF0ubWVudV9jb250ZXh0 KHRoaXMuY29udHJvbG9iaiwgJ21vdXNlb3V0Jyk7Cgl9CgoJdkJtZW51LmFjdGl2 ZW1lbnUgPSBudWxsOwoKCXZCdWxsZXRpbi5ldmVudHNbInZCbWVudUhpZGVfIiAr IHRoaXMuY29udHJvbGtleV0uZmlyZSh0aGlzLmNvbnRyb2xrZXkpOwoJdkJ1bGxl dGluLmV2ZW50cy52Qm1lbnVIaWRlLmZpcmUodGhpcy5jb250cm9sa2V5KTsKfTsK Ci8qKgoqIEhvdmVyIGJlaGF2aW91ciBmb3IgY29udHJvbCBvYmplY3QKKi8KdkJf UG9wdXBfTWVudS5wcm90b3R5cGUuaG92ZXIgPSBmdW5jdGlvbihvYmopCnsKCWlm ICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCWlmICh2Qm1lbnUubWVu dXNbdkJtZW51LmFjdGl2ZW1lbnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkKCQl7 CgkJCXRoaXMuc2hvdyhvYmosIHRydWUpOwoJCX0KCX0KfTsKCi8qKgoqIFNsaWRl cyBtZW51IG9wZW4KKgoqIEBwYXJhbQlpbnRlZ2VyCUNsaXAgWAoqIEBwYXJhbQlp bnRlZ2VyCUNsaXAgWQoqIEBwYXJhbQlpbnRlZ2VyCU9wYWNpdHkgKDAtMTAwKQoq Lwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zbGlkZSA9IGZ1bmN0aW9uKGNsaXBY LCBjbGlwWSwgb3BhY2l0eSkKewoJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0 JyAmJiAoY2xpcFggPCB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGggfHwgY2xpcFkg PCB0aGlzLm1lbnVvYmoub2Zmc2V0SGVpZ2h0KSkKCXsKCQlpZiAodkJtZW51Lm9w ZW5fZmFkZSAmJiBpc19pZSkKCQl7CgkJCW9wYWNpdHkgKz0gMTA7CgkJCXRoaXMu bWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0 LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoKCQljbGlwWCArPSB0aGlz LmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVydmFsWTsKCgkJdGhpcy5t ZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFggKyAicHgs ICIgKyBjbGlwWSArICJweCwgYXV0bykiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNl dFRpbWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUo IiArIGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsi LCAwKTsKCX0KCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdodCcgJiYg KGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMubWVudW9iai5vZmZzZXRIZWlnaHQp KQoJewoJCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlzX2llKQoJCXsKCQkJb3Bh Y2l0eSArPSAxMDsKCQkJbWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoK CQljbGlwWCAtPSB0aGlzLmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVy dmFsWTsKCgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAi ICsgdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoICsgInB4LCAiICsgY2xpcFkgKyAi cHgsICIgKyBjbGlwWCArICJweCkiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNldFRp bWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUoIiAr IGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsiLCAw KTsKCX0KCWVsc2UKCXsKCQl0aGlzLnN0b3Bfc2xpZGUoKTsKCX0KfTsKCi8qKgoq IEFib3J0IG1lbnUgc2xpZGVyCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLnN0 b3Bfc2xpZGUgPSBmdW5jdGlvbigpCnsKCWNsZWFyVGltZW91dCh0aGlzLnNsaWRl dGltZXIpOwoKCXRoaXMubWVudW9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywg YXV0bywgYXV0bywgYXV0byknOwoKCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlz X2llKQoJewoJCXRoaXMubWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IDEwMDsKCX0KfTsKCi8q KgoqIEZldGNoIG9mZnNldCBvZiBhbiBvYmplY3QKKgoqIEBwYXJhbQlvYmplY3QJ VGhlIG9iamVjdCB0byBiZSBtZWFzdXJlZAoqCiogQHJldHVybglhcnJheQlUaGUg bWVhc3VyZWQgb2Zmc2V0cyBsZWZ0L3RvcAoqLwp2Ql9Qb3B1cF9NZW51LnByb3Rv dHlwZS5mZXRjaF9vZmZzZXQgPSBmdW5jdGlvbihvYmopCnsKCWlmIChvYmouZ2V0 Qm91bmRpbmdDbGllbnRSZWN0KQoJewoJCS8vIGJldHRlciwgbW9yZSBhY2N1cmF0 ZSBmdW5jdGlvbiBmb3IgSUUKCQl2YXIgcmVjdCA9IG9iai5nZXRCb3VuZGluZ0Ns aWVudFJlY3QoKTsKCgkJdmFyIHNjcm9sbFRvcCA9IE1hdGgubWF4KGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsIGRvY3VtZW50LmJvZHkuc2Nyb2xs VG9wKTsKCQl2YXIgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQp OwoKCQlpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PSAncnRsJykK CQl7CgkJCS8vIElFIHJldHVybnMgYSBwb3NpdGl2ZSBzY3JvbGxMZWZ0LCBidXQg d2UgbmVlZCBhIG5lZ2F0aXZlIHZhbHVlIHRvIGFjdHVhbGx5IGRvIHByb3BlciBj YWxjdWxhdGlvbnMuCgkJCS8vIFRoaXMgYWN0dWFsbHkgZmxpcHMgdGhlIHNjb2xs b2luZyB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlzdGFuY2Ugc2Nyb2xsZWQgZnJv bSB0aGUgZGVmYXVsdC4KCQkJc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgKyBkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg7CgkJfQoKCQlyZXR1cm4geyAnbGVmdCcg OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0LCAndG9wJyA6IHJlY3QudG9wICsgc2Ny b2xsVG9wIH07Cgl9CgoJdmFyIGxlZnRfb2Zmc2V0ID0gb2JqLm9mZnNldExlZnQ7 Cgl2YXIgdG9wX29mZnNldCA9IG9iai5vZmZzZXRUb3A7CgoJd2hpbGUgKChvYmog PSBvYmoub2Zmc2V0UGFyZW50KSAhPSBudWxsKQoJewoJCWxlZnRfb2Zmc2V0ICs9 IG9iai5vZmZzZXRMZWZ0OwoJCXRvcF9vZmZzZXQgKz0gb2JqLm9mZnNldFRvcDsK CX0KCglyZXR1cm4geyAnbGVmdCcgOiBsZWZ0X29mZnNldCwgJ3RvcCcgOiB0b3Bf b2Zmc2V0IH07Cn07CgovKioKKiBEZXRlY3QgYW4gb3ZlcmxhcCBvZiBhbiBvYmpl Y3QgYW5kIGEgbWVudQoqCiogQHBhcmFtCW9iamVjdAlPYmplY3QgdG8gYmUgdGVz dGVkIGZvciBvdmVybGFwCiogQHBhcmFtCWFycmF5CUFycmF5IG9mIGRpbWVuc2lv bnMgZm9yIG1lbnUgb2JqZWN0CioKKiBAcmV0dXJuCWJvb2xlYW4JVHJ1ZSBpZiBv dmVybGFwCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLm92ZXJsYXBzID0gZnVu Y3Rpb24ob2JqLCBtKQp7Cgl2YXIgcyA9IG5ldyBBcnJheSgpOwoJdmFyIHBvcyA9 IHRoaXMuZmV0Y2hfb2Zmc2V0KG9iaik7CglzWydMJ10gPSBwb3NbJ2xlZnQnXTsK CXNbJ1QnXSA9IHBvc1sndG9wJ107CglzWydSJ10gPSBzWydMJ10gKyBvYmoub2Zm c2V0V2lkdGg7CglzWydCJ10gPSBzWydUJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoK CglpZiAoc1snTCddID4gbVsnUiddIHx8IHNbJ1InXSA8IG1bJ0wnXSB8fCBzWydU J10gPiBtWydCJ10gfHwgc1snQiddIDwgbVsnVCddKQoJewoJCXJldHVybiBmYWxz ZTsKCX0KCXJldHVybiB0cnVlOwp9OwoKLyoqCiogSGFuZGxlIElFIG92ZXJsYXBw aW5nIDxzZWxlY3Q+IGVsZW1lbnRzCioKKiBAcGFyYW0JYm9vbGVhbglIaWRlICh0 cnVlKSBvciBzaG93IChmYWxzZSkgb3ZlcmxhcHBpbmcgPHNlbGVjdD4gZWxlbWVu dHMKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuaGFuZGxlX292ZXJsYXBzID0g ZnVuY3Rpb24oZG9oaWRlKQp7CglpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl2 YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxlY3QnKTsKCgkJ aWYgKGRvaGlkZSkKCQl7CgkJCXZhciBtZW51YXJlYSA9IG5ldyBBcnJheSgpOyBt ZW51YXJlYSA9IHsKCQkJCSdMJyA6IHRoaXMubGVmdHB4LAoJCQkJJ1InIDogdGhp cy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgsCgkJCQknVCcgOiB0 aGlzLnRvcHB4LAoJCQkJJ0InIDogdGhpcy50b3BweCArIHRoaXMubWVudW9iai5v ZmZzZXRIZWlnaHQKCQkJfTsKCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0 cy5sZW5ndGg7IGkrKykKCQkJewoJCQkJaWYgKHRoaXMub3ZlcmxhcHMoc2VsZWN0 c1tpXSwgbWVudWFyZWEpKQoJCQkJewoJCQkJCXZhciBoaWRlID0gdHJ1ZTsKCQkJ CQl2YXIgcyA9IHNlbGVjdHNbaV07CgkJCQkJd2hpbGUgKHMgPSBzLnBhcmVudE5v ZGUpCgkJCQkJewoJCQkJCQlpZiAocy5jbGFzc05hbWUgPT0gJ3ZibWVudV9wb3B1 cCcpCgkJCQkJCXsKCQkJCQkJCWhpZGUgPSBmYWxzZTsKCQkJCQkJCWJyZWFrOwoJ CQkJCQl9CgkJCQkJfQoKCQkJCQlpZiAoaGlkZSkKCQkJCQl7CgkJCQkJCXNlbGVj dHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwoJCQkJCQl2Qm1lbnUu aGlkZGVuX3NlbGVjdHMucHVzaChpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJ ZWxzZQoJCXsKCQkJd2hpbGUgKHRydWUpCgkJCXsKCQkJCXZhciBpID0gdkJtZW51 LmhpZGRlbl9zZWxlY3RzLnBvcCgpOwoJCQkJaWYgKHR5cGVvZiBpID09ICd1bmRl ZmluZWQnIHx8IGkgPT0gbnVsbCkKCQkJCXsKCQkJCQlicmVhazsKCQkJCX0KCQkJ CWVsc2UKCQkJCXsKCQkJCQlzZWxlY3RzW2ldLnN0eWxlLnZpc2liaWxpdHkgPSAn dmlzaWJsZSc7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovLyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwovLyBNZW51IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25z CgovKioKKiBDbGFzcyBjb250YWluaW5nIG1lbnUgcG9wdXAgZXZlbnQgaGFuZGxl cnMKKi8KZnVuY3Rpb24gdkJfUG9wdXBfRXZlbnRzKCkKewp9OwoKLyoqCiogSGFu ZGxlcyBjb250cm9sIG9iamVjdCBjbGljayBldmVudHMKKi8KdkJfUG9wdXBfRXZl bnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7 CglpZiAodHlwZW9mIGRvX2FuX2UgPT0gJ2Z1bmN0aW9uJykKCXsKCQlkb19hbl9l KGUpOwoJCWlmICh2Qm1lbnUuYWN0aXZlbWVudSA9PSBudWxsIHx8IHZCbWVudS5t ZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uY29udHJvbGtleSAhPSB0aGlzLmlkKQoJ CXsKCQkJdkJtZW51Lm1lbnVzW3RoaXMuaWRdLnNob3codGhpcyk7CgkJfQoJCWVs c2UKCQl7CgkJCXZCbWVudS5tZW51c1t0aGlzLmlkXS5oaWRlKCk7CgkJfQoJfQp9 OwoKLyoqCiogSGFuZGxlcyBjb250cm9sIG9iamVjdCBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUuY29udHJvbG9ial9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVu Y3Rpb24nKQoJewoJCWRvX2FuX2UoZSk7CgkJdkJtZW51Lm1lbnVzW3RoaXMuaWRd LmhvdmVyKHRoaXMpOwoJfQp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBj bGljayBldmVudHMgZm9yIG9wdGlvbnMgd2l0aCBvbmNsaWNrIGV2ZW50cwoqLwp2 Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25jbGlja19mdW5j dGlvbiA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMub2Z1bmMoZSk7Cgl2Qm1lbnUubWVu dXNbdGhpcy5jb250cm9sa2V5XS5oaWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIG1l bnUgb3B0aW9uIGNsaWNrIGV2ZW50cyBmb3Igb3B0aW9ucyBjb250YWluaW5nIGxp bmtzCiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2xpbmsgPSBmdW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZl bnQ7CgoJaWYgKGUuc2hpZnRLZXkgfHwgKHRoaXMudGFyZ2V0ICE9IG51bGwgJiYg dGhpcy50YXJnZXQgIT0gJycgJiYgdGhpcy50YXJnZXQudG9Mb3dlckNhc2UoKSAh PSAnX3NlbGYnKSkKCXsKCQlpZiAodGhpcy50YXJnZXQgIT0gbnVsbCAmJiB0aGlz LnRhcmdldC5jaGFyQXQoMCkgIT0gJ18nKQoJCXsKCQkJd2luZG93Lm9wZW4odGhp cy5ocmVmLCB0aGlzLnRhcmdldCk7CgkJfQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5v cGVuKHRoaXMuaHJlZik7CgkJfQoJfQoJZWxzZQoJewoJCXdpbmRvdy5sb2NhdGlv biA9IHRoaXMuaHJlZjsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLy8gU2FmYXJpIGhh cyAiaXNzdWVzIiB3aXRoIHJlc2V0dGluZyB3aGF0IHdhcyBjbGlja2VkIG9uLCBz dXBlciBtaW5vciBhbmQgSSBkb250IGNhcmUKCWUuY2FuY2VsQnViYmxlID0gdHJ1 ZTsKCWlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsK CWlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7CgoJdkJt ZW51Lm1lbnVzW3RoaXMuY29udHJvbGtleV0uaGlkZSgpOwoJcmV0dXJuIGZhbHNl Owp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9o aWxpdGUnICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6 ICcnKTsKCXRoaXMuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7Cn07Cgov KioKKiBIYW5kbGVzIG1lbnUgb3B0aW9uIG1vdXNlb3V0IGV2ZW50cwoqLwp2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZW91dCA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9vcHRpb24nICsg KHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfb3B0aW9uX2FsaW5rJyA6ICcnKTsKCXRo aXMuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnOwp9OwoKLyo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxl JCAtICRSZXZpc2lvbjogMjY0NDYgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpc Kj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=gal.js Content-Type: application/x-javascript; charset=windows-1251; name=gal.js Content-Location: http://forum.qip.ru/geek/gal/clientscript/gal.js Content-Transfer-Encoding: Base64 DQoNCi8vUG9wdXANCmZ1bmN0aW9uIGdhbF9yZWdpc3RlcihpZCwgc3R5bGVpZCwg cG9zaXRpb24sIG5vaW1hZ2UsIHgsIHkpDQp7DQogICAgICAgIGlmICh0eXBlb2Yg Z2FsID09ICdvYmplY3QnKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0 dXJuIGdhbC5yZWdpc3RlcihpZCwgc3R5bGVpZCwgcG9zaXRpb24sIG5vaW1hZ2Us IHgsIHkpOw0KICAgICAgICB9DQogICAgICAgIC8vYWxlcnQoImdhbCByZWdpc3Rl cmVkICIgKyBpZCk7DQp9DQoNCnZhciBHRUVLX0dBTF9QT1BVUCAJCQk9IDE7DQp2 YXIgR0VFS19HQUxfRk9MTE9XIAkJPSAyOw0KdmFyIEdFRUtfR0FMX1NUSUNLIAkJ CT0gMzsNCg0KdmFyIEdFRUtfR0FMX0JPVFRPTV9MRUZUCT0gMTsNCnZhciBHRUVL X0dBTF9CT1RUT01fUklHSFQJPSAyOw0KdmFyIEdFRUtfR0FMX1RPUF9MRUZUIAkJ PSAzOw0KdmFyIEdFRUtfR0FMX1RPUF9SSUdIVCAJCT0gNDsNCg0KDQpmdW5jdGlv biBnZWVrX2dhbCgpDQp7DQoNCiAgICAgICAgdGhpcy5zbGlkZV9vcGVuID0gKGlz X29wZXJhIHx8IGlzX3NhZiA/IGZhbHNlIDogdHJ1ZSk7DQogICAgICAgIHRoaXMu b3Blbl9mYWRlID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTsN CiAgICAgICAgdGhpcy5wb3B1cHMgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgdGhp cy5hY3RpdmVwb3B1cCA9IG51bGw7DQogICAgICAgIHRoaXMuaGlkZGVuX3NlbGVj dHMgPSBuZXcgQXJyYXkoKTsNCn0NCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuZmV0 Y2hfb2Zmc2V0ID0gZnVuY3Rpb24ob2JqKQ0KCQl7DQoJCSAgICAgICAgdmFyIGwg PSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAgICB2YXIgdCA9IG9iai5vZmZzZXRU b3A7DQoJCSAgICAgICAgdmFyIHIgPSBvYmoub2Zmc2V0V2lkdGg7DQoJCSAgICAg ICAgdmFyIGIgPSBvYmoub2Zmc2V0SGVpZ2h0DQoNCgkJICAgICAgICB3aGlsZSAo KG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpICE9IG51bGwpDQoJCSAgICAgICAgew0K CQkgICAgICAgICAgICAgICAgbCArPSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAg ICAgICAgICAgIHQgKz0gb2JqLm9mZnNldFRvcDsNCgkJICAgICAgICB9DQoNCgkJ ICAgICAgICB2YXIgciA9IHIgKyBsOw0KCQkgICAgICAgIHZhciBiID0gYiArIHQ7 DQoJCSAgICAgICAgdmFyIGggPSBiIC0gdDsNCgkJICAgICAgICB2YXIgdyA9IHIg LSBsOw0KDQoJCSAgICAgICAgcmV0dXJuIHsgJ2wnIDogbCwgJ3QnIDogdCwgJ3In IDogciwgJ2InIDogYiwgJ2gnIDogaCwgJ3cnIDogd307DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oYWN0aXZlKQ0KCQl7 DQoJCSAgICAgICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oaWQsIHN0eWxlaWQs IHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0KCQl7DQoJCSAgICAgICAgaWYgKCF0 aGlzLnBvcHVwc1tpZF0pDQoJCSAgICAgICAgew0KCQkJCQl0aGlzLnBvcHVwc1tp ZF0gPSBuZXcgZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxlaWQsIHBvc2l0aW9uLCBu b2ltYWdlLCB4LCB5KTsNCgkJICAgICAgICB9DQoJCSAgICAgICAgcmV0dXJuIHRo aXMucG9wdXBzW2lkXTsNCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuaGlk ZSA9IGZ1bmN0aW9uKGZvcmNlKQ0KCQl7DQoJCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsICE9IG51bGwpDQoJCSAgICAgICAgew0KCQkgICAgICAgICAgICAgICAg dGhpcy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLmhpZGUoZm9yY2UpOw0KCQkgICAg ICAgIH0NCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUudGljayA9IGZ1bmN0 aW9uKCkNCgkJew0KCQkJdGhpcy5jbG9jayA9IHNldFRpbWVvdXQoImdhbC50aWNr KCk7IiwgdGhpcy50aWNrX2NvdW50KTsNCg0KCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsID09IG51bGwpDQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuOw0K CSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhpcy5wb3B1cHNbdGhpcy5hY3Rp dmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfU1RJQ0spDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhp cy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9M TE9XKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0 aXZlZ2FsXS5wb3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KGZldGNoX29iamVjdCh0aGlz LmFjdGl2ZWdhbCkpOw0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0aXZl Z2FsXS5yZXBvc2l0aW9uKHRoaXMubW91c2VYLCB0aGlzLm1vdXNlWSk7DQoJICAg ICAgICB9DQoNCgkgICAgICAgIGlmICh0aGlzLnRpY2tfY2xvY2sgPCAxMCkNCgkg ICAgICAgIHsNCgkgICAgICAgIAl0aGlzLnRpY2tfY2xvY2sgKys7DQoJICAgICAg ICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRoaXMudGlja19jbG9jayA9IDA7DQoJICAgICAgICB9DQoN CgkgICAgICAgIGlmICh0aGlzLnRpY2tfbG9ja2VkID09IHRydWUpDQoJICAgICAg ICB7DQoJICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxz ZQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMudGlja19sb2NrZWQgPSB0cnVl Ow0KCSAgICAgICAgfQ0KDQoJICAgICAgICB0aGlzLnRpY2tlciArKzsNCgkgICAg ICAgIC8vd2luZG93LnN0YXR1cyA9IHRoaXMudGlja2VyOw0KDQoJICAgICAgICB2 YXIgdGVzdCA9IGZhbHNlOw0KCSAgICAgICAgdmFyIHRlc3QyID0gZmFsc2U7DQoN CgkgICAgICAgIGlmICh0aGlzLmFjdGl2ZWdhbCAhPSBudWxsKQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRlc3QgPSB0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0u aGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsNCgkgICAgICAgIAl0 ZXN0MiA9IHRoaXMucG9wdXBzW3RoaXMuYWN0aXZlZ2FsXS5hbmNob3JzW3RoaXMu YWN0aXZlbGlua10uaGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsN Cg0KCSAgICAgICAgCS8vd2luZG93LnN0YXR1cyA9ICJjb250ZW50OiAiICsgdGVz dCArICIgbGluazogIiArdGVzdDI7DQoJICAgICAgICB9DQoNCgkgICAgICAgIGlm ICh0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0uc3R5bGVpZCA9PSBHRUVLX0dB TF9GT0xMT1cgJiYgIXRlc3QyKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMu aGlkZSgpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgew0K CQkgICAgICAgIGlmICghdGVzdCAmJiAhdGVzdDIpDQoJCSAgICAgICAgew0KCQkg ICAgICAgIAl0aGlzLmhpZGUoKTsNCg0KCQkgICAgICAgIH0NCgkgICAgICAgIH0N CgkgICAgICAgIHRoaXMudGlja19sb2NrZWQgPSBmYWxzZTsNCgkJfTsNCg0KDQov L2FuY2hvcnMNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hbmNob3IoaWQsIGNvbnRl bnRpZCwgbm9pbWFnZSkNCnsNCiAgICAgICAgdGhpcy5pZCA9IGlkOw0KICAgICAg ICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCiAgICAgICAgdGhpcy5ub2lt YWdlID0gbm9pbWFnZTsNCiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIoaWQs IGNvbnRlbnRpZCwgbm9pbWFnZSk7DQp9DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnBy b3RvdHlwZS5oaXRfdGVzdCA9IGZ1bmN0aW9uKG1vdXNlWCwgbW91c2VZKQ0KCQl7 DQoNCgkJCXZhciBjbGllbnQgPSBnYWxfY2xpZW50YXJlYSgpOw0KDQoJCQl5ID0g bW91c2VZOw0KCQkJeCA9IG1vdXNlWDsNCg0KCQkJZSA9IGZldGNoX29iamVjdCh0 aGlzLmlkKTsNCgkJCWEgPSBnYWwuZmV0Y2hfb2Zmc2V0KGUpOw0KDQoJCQlhLnQg LT0gY2xpZW50Lmg7DQoJCQlhLmIgLT0gY2xpZW50Lmg7DQoNCgkJCWEubCAtPSBj bGllbnQudzsNCgkJCWEuciAtPSBjbGllbnQudzsNCg0KCQkJLy93aW5kb3cuc3Rh dHVzID0gbW91c2VYOw0KCSAgICAgICAgaWYgKCh4ID4gYS5sKSAmJiAoeCA8IChh LnIpKSAmJiAoeSA+IGEudCkgJiYgKHkgPCAoYS5iKSkpDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNl DQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuIGZhbHNlOw0KCSAgICAgICAg fQ0KDQoJCX07DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnByb3RvdHlwZS5yZWdpc3Rl ciA9IGZ1bmN0aW9uKGlkLCBjb250ZW50aWQsIG5vaW1hZ2UpDQoJCXsNCgkJICAg ICAgICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCg0KCQkgICAgICAgIGEg PSBmZXRjaF9vYmplY3QoaWQpOw0KCQkJCWEuY29udGVudGlkID0gY29udGVudGlk Ow0KCQkJCWEuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7DQoJCSAgICAg ICAgLy9hLm9uY2xpY2sgPSBnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl LmNvbnRyb2xvYmpfb25jbGljazsNCgkJICAgICAgICBhLm9ubW91c2VvdmVyID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29ubW91 c2VvdmVyOw0KDQoJCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJCX07DQoNCg0KLy9w b3B1cCBvYmplY3QNCg0KZnVuY3Rpb24gZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxl aWQsIHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0Kew0KICAgICAgICB0aGlzLmlk ID0gaWQ7DQogICAgICAgIHRoaXMuc3R5bGVpZCA9IHN0eWxlaWQ7DQogICAgICAg IHRoaXMucG9zaXRpb25pZCA9IHBvc2l0aW9uOw0KICAgICAgICB0aGlzLm9wZW5f c3RlcHMgPSBnYWwub3Blbl9zdGVwczsNCiAgICAgICAgdGhpcy5vcGVuX2ZhZGUg PSBnYWwub3Blbl9mYWRlOw0KICAgICAgICB0aGlzLm9mZnggPSAoeCAqIDEpOw0K ICAgICAgICB0aGlzLm9mZnkgPSAoeSAqIDEpOw0KDQogICAgICAgIHRoaXMuZGly ZWN0aW9uID0gKHBvc2l0aW9uID09IDEgfHwgcG9zaXRpb24gPT0gMyA/ICdsZWZ0 JyA6ICdyaWdodCcpOw0KICAgICAgICB0aGlzLmFuY2hvcnMgPSBuZXcgQXJyYXko KTsNCg0KICAgICAgICB2YXIgYSA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdhJyk7 DQoNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQ0K ICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGFbaV0uaWQgJiYgYVtpXS5p ZC5zdWJzdHIoMCwgaWQubGVuZ3RoKSA9PSBpZCkNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcnNbYVtpXS5pZF0g PSBuZXcgZ2Vla19nYWxfYW5jaG9yKGFbaV0uaWQsIGlkLCBub2ltYWdlKTsNCiAg ICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy50aWNrID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX3RpY2s7 DQogICAgICAgIGdhbC50aWNrKCk7DQp9DQoNCg0KCWdlZWtfZ2FsX3BvcHVwLnBy b3RvdHlwZS5pbml0X2dhbCA9IGZ1bmN0aW9uKCkNCgl7DQoJICAgICAgICB0aGlz LmdhbG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmlkKTsNCg0KCSAgICAgICAgaWYg KHRoaXMuZ2Fsb2JqICYmICF0aGlzLmdhbG9iai5pbml0aWFsaXplZCkNCgkgICAg ICAgIHsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxvYmouaW5pdGlhbGl6ZWQg PSB0cnVlOw0KCSAgICAgICAgICAgICAgICB0aGlzLmdhbG9iai5vbmNsaWNrID0g ZV9ieV9ndW07DQoJICAgICAgICAgICAgICAgIHRoaXMuZ2Fsb2JqLnN0eWxlLnBv c2l0aW9uID0gJ2Fic29sdXRlJzsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxv Ymouc3R5bGUuekluZGV4ID0gNTA7DQoNCgkgICAgICAgICAgICAgICAgaWYgKGlz X2llICYmICFpc19tYWMpDQoJICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLmdhbG9iai5zdHlsZS5maWx0ZXIgKz0gInByb2dp ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5hbHBoYShlbmFibGVkPTEsb3Bh Y2l0eT0xMDApIjsNCgkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbG9i ai5zdHlsZS5maWx0ZXIgKz0gInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jv c29mdC5zaGFkb3coZGlyZWN0aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3Ro PTMpIjsNCgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCX07DQoNCgln ZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUucmVwb3NpdGlvbiA9IGZ1bmN0aW9uKHgs IHkpDQoJew0KCQl2YXIgbCA9IDA7DQoJCXZhciB0ID0gMDsNCgkJdmFyIGNsaWVu dCA9IGdhbF9jbGllbnRhcmVhKCk7DQoJCXZhciBhbmNob3IgPSB0aGlzLnBvczsN Cg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMuaWQpOw0KDQoJCWlmIChlLnN0eWxl LmRpc3BsYXkgIT0gJycpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICh0 aGlzLnBvc2l0aW9uaWQgPT0gR0VFS19HQUxfQk9UVE9NX1JJR0hUKQ0KCQl7DQoN CgkJCWlmICh0aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAg ICAJew0KCQkJCWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAg KyB0aGlzLm9mZng7DQoJCQkJdCA9IHkgKyBjbGllbnQuaCArIHRoaXMub2ZmeTsN CiAgICAgICAgCX0NCiAgICAgICAgCWVsc2UNCiAgICAgICAgCXsNCiAgICAgICAg CQkvL2wgPSBhbmNob3IuciAtIGUub2Zmc2V0V2lkdGggKyBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIHRoaXMub2ZmeDsNCiAgICAgICAgCQkv L3QgPSBhbmNob3IuYiAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3AgKyB0aGlzLm9mZnk7DQoJCQkJbCA9IChhbmNob3IuciAtIGUub2Zmc2V0V2lk dGgpICsgdGhpcy5vZmZ4Ow0KICAgICAgICAgICAgICAgIHQgPSBhbmNob3IuYiAr IHRoaXMub2ZmeTsNCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UgaWYgKHRoaXMu cG9zaXRpb25pZCA9PSBHRUVLX0dBTF9UT1BfUklHSFQpDQoJCXsNCgkJCWlmICh0 aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJ CWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAgKyB0aGlzLm9m Zng7DQoJCQkJdCA9IHkgLSBlLm9mZnNldEhlaWdodCArIGNsaWVudC5oICsgdGhp cy5vZmZ5Ow0KCSAgICAgICAgCWlmICh0IDwgKGNsaWVudC5oICsgMTApKQ0KCSAg ICAgICAgICAgIHsNCgkgICAgICAgICAgICAJdCA9IGNsaWVudC5oICsgMTAgKyB0 aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0KICAgICAgICAJfQ0KICAgICAgICAJ ZWxzZQ0KICAgICAgICAJew0KCQkJCS8vbCA9IGFuY2hvci5yIC0gZS5vZmZzZXRX aWR0aCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhp cy5vZmZ4Ow0KCQkJCXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0ICsgdGhp cy5vZmZ5OyAvL2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ANCgkg ICAgICAgIAlsID0gKGFuY2hvci5yIC0gZS5vZmZzZXRXaWR0aCkgKyB0aGlzLm9m Zng7DQoNCgkJCQlpZiAodCA8IDEpDQoJICAgICAgICAgICAgew0KCSAgICAgICAg ICAgIAl0ID0gYW5jaG9yLmIgKyB0aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0K DQogICAgICAgIAl9DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbmlkID09 IEdFRUtfR0FMX1RPUF9MRUZUKQ0KCQl7DQoNCgkJCWlmICh0aGlzLnN0eWxlaWQg PT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJCWwgPSB4ICsgY2xp ZW50LncgLSAxMCArIHRoaXMub2ZmeDsNCgkJCQl0ID0geSAtIGUub2Zmc2V0SGVp Z2h0ICsgY2xpZW50LmggKyB0aGlzLm9mZnk7DQogICAgICAgIAl9DQogICAgICAg IAllbHNlDQogICAgICAgIAl7DQoNCgkJCQkvL2wgPSBhbmNob3IubCAtIGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhpcy5vZmZ4Ow0KCQkJ CXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0Oy8vIC0gZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50LnNjcm9sbFRvcDsNCgkJCQlsID0gYW5jaG9yLmwgKyB0aGlz Lm9mZng7DQoJICAgICAgICAJaWYgKHQgPCAxKQ0KCSAgICAgICAgICAgIHthbGVy dCAoInBvb3AiKTsNCgkgICAgICAgICAgICAJdCA9IGFuY2hvci5iICsgdGhpcy5v ZmZ5Ow0KCSAgICAgICAgICAgIH0NCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UN CgkJew0KCSAgICAgICAgaWYgKHRoaXMuc3R5bGVpZCA9PSBHRUVLX0dBTF9GT0xM T1cpDQoJICAgICAgICB7DQoJICAgICAgICAJbCA9IHggKyBjbGllbnQudyAtIDEw ICsgdGhpcy5vZmZ4Ow0KCSAgICAgICAgCXQgPSB5ICsgY2xpZW50LmggKyB0aGlz Lm9mZnk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQog ICAgICAgICAgICAgICAgbCA9IGFuY2hvci5sICsgdGhpcy5vZmZ4Ow0KICAgICAg ICAgICAgICAgIHQgPSBhbmNob3IuYiArIHRoaXMub2ZmeTsNCgkgICAgICAgIH0N Cg0KCQl9DQoNCgkJaWYgKGwgPCAxKQ0KCQl7DQoJCQlsID0gMTA7DQoJCX0NCgkJ aWYgKGwgKyBlLm9mZnNldFdpZHRoICsgY2xpZW50LncgPiBjbGllbnQucikNCgkJ ew0KCQkJbCA9IGNsaWVudC5yIC0gZS5vZmZzZXRXaWR0aCAtIDIwOw0KCQl9DQoN CiAgICAgICAgZS5zdHlsZS5sZWZ0ID0gbCArICJweCI7DQogICAgICAgIGUuc3R5 bGUudG9wCT0gdCArICJweCI7DQoNCgl9Ow0KDQoNCglnZWVrX2dhbF9wb3B1cC5w cm90b3R5cGUuaGl0X3Rlc3QgPSBmdW5jdGlvbihtb3VzZVgsIG1vdXNlWSkNCgl7 DQoNCgkJdmFyIGNsaWVudCA9IGdhbF9jbGllbnRhcmVhKCk7DQoNCgkJeSA9IG1v dXNlWTsNCgkJeCA9IG1vdXNlWDsNCg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMu aWQpOw0KCQlhID0gZ2FsLmZldGNoX29mZnNldChlKTsNCg0KCQlhLnQgLT0gY2xp ZW50Lmg7DQoJCWEuYiAtPSBjbGllbnQuaDsNCg0KCQlhLmwgLT0gY2xpZW50Lnc7 DQoJCWEuciAtPSBjbGllbnQudzsNCg0KICAgICAgICBpZiAoKHggPiBhLmwpICYm ICh4IDwgKGEucikpICYmICh5ID4gYS50KSAmJiAoeSA8IChhLmIpKSkNCiAgICAg ICAgew0KICAgICAgICAJcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAg ZWxzZQ0KICAgICAgICB7DQogICAgICAgIAlyZXR1cm4gZmFsc2U7DQogICAgICAg IH0NCg0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUuc2hvdyA9IGZ1 bmN0aW9uKG9iaikNCgl7DQoJICAgICAgICBpZiAoIWdhbC5hY3RpdmUpDQoJICAg ICAgICB7DQoJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAg IH0NCgkgICAgICAgIGVsc2UgaWYgKCF0aGlzLmdhbG9iaikNCgkgICAgICAgIHsN CgkgICAgICAgICAgICAgICAgdGhpcy5pbml0X2dhbCgpOw0KCSAgICAgICAgfQ0K DQoJICAgICAgICBpZiAoIXRoaXMuZ2Fsb2JqKQ0KCSAgICAgICAgew0KCSAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJICAgICAgICB9DQoNCgkgICAgICAg IGlmIChnYWwuYWN0aXZlZ2FsICE9IG51bGwpDQoJICAgICAgICB7DQoJICAgICAg ICAgICAgZ2FsLnRpY2tfZGVjYXllciA9IDA7DQoJICAgICAgICAJZ2FsLnBvcHVw c1tnYWwuYWN0aXZlZ2FsXS5oaWRlKHRydWUpOw0KCSAgICAgICAgfQ0KDQoJICAg ICAgICAvL3dpbmRvdy5zdGF0dXMgPSAic3R5bGVpZCAiICsgdGhpcy5zdHlsZWlk ICsgIiBwb3NpdGlvbiAiICsgdGhpcy5wb3NpdGlvbmlkOw0KDQoJICAgICAgICBn YWwuYWN0aXZlZ2FsID0gdGhpcy5pZDsNCgkgICAgICAgIGdhbC5hY3RpdmVsaW5r ID0gb2JqLmlkOw0KDQoJICAgICAgICBpZiAoZ2FsLnRpY2tfZGVjYXkpDQoJICAg ICAgICB7DQoJICAgICAgICAJZ2FsLnRpY2tfZGVjYXllciA9IDE7DQoJICAgICAg ICB9DQoJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywgYXV0 bywgYXV0bywgYXV0byknOw0KCQkJdGhpcy5jb250ZW50cG9zID0gZ2FsLmZldGNo X29mZnNldChmZXRjaF9vYmplY3QodGhpcy5pZCkpOw0KDQoJCQkvL2FsZXJ0KHRo aXMub2ZmeCArICIgOjogIiAgKyB0aGlzLm9mZnkpOw0KDQoJCQl0aGlzLmdhbG9i ai5zdHlsZS5kaXNwbGF5ID0gJyc7DQoNCgkgICAgICAgIGlmICh0aGlzLnBvc2l0 aW9uID09IEdFRUtfR0FMX0ZPTExPVykNCgkgICAgICAgIHsNCgkgICAgICAgIAl0 aGlzLnJlcG9zaXRpb24oZ2FsLm1vdXNlWCwgZ2FsLm1vdXNlWSk7DQoJICAgICAg ICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJCSAgICAgICAgdGhpcy5w b3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KG9iaik7DQoJCSAgICAgICAgLy9hbGVydCh0 aGlzLnBvc1snbCddKTsNCgkJICAgICAgICAvL3RoaXMucG9zWydsJ10gPSAodGhp cy5vZmZ4ICogMSkgKyAodGhpcy5wb3NbJ2wnXSAqIDEpOw0KCQkgICAgICAgIC8v YWxlcnQodGhpcy5wb3NbJ2wnXSk7DQoJCSAgICAgICAgLy90aGlzLnBvc1sndCdd IC09IHRoaXMub2ZmeTsNCgkgICAgICAgIAl0aGlzLnJlcG9zaXRpb24oMCwgMCk7 DQoJICAgICAgICB9DQoNCg0KCQkJaWYgKGdhbC5zbGlkZV9vcGVuKQ0KCQkJew0K CQkJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAncmVjdChhdXRvLCAwcHgsIDBw eCwgYXV0byknOw0KCQkJfQ0KDQoJCQlpZiAoZ2FsLnNsaWRlX29wZW4pDQoJCQl7 DQoJCQkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwodGhpcy5nYWxvYmoub2Zm c2V0V2lkdGggLyB0aGlzLm9wZW5fc3RlcHMpOw0KCQkJCXRoaXMuaW50ZXJ2YWxZ ID0gTWF0aC5jZWlsKHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodCAvIHRoaXMub3Bl bl9zdGVwcyk7DQoJCQkJdGhpcy5zbGlkZSgodGhpcy5kaXJlY3Rpb24gPT0gJ2xl ZnQnID8gMCA6IHRoaXMuZ2Fsb2JqLm9mZnNldFdpZHRoKSwgMCwgMCk7DQoJCQl9 DQoJCQllbHNlIGlmICh0aGlzLmdhbG9iai5zdHlsZS5jbGlwICYmIHRoaXMuc2xp ZGVfb3BlbikNCgkJCXsNCgkJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3Jl Y3QoYXV0bywgYXV0bywgYXV0bywgYXV0byknOw0KCQkJfQ0KDQoJICAgICAgICB0 aGlzLmhhbmRsZV9vdmVybGFwcyh0cnVlKTsNCgkgICAgICAgIGdhbC50aWNrKCk7 DQoJfTsNCg0KCWdlZWtfZ2FsX3BvcHVwLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rp b24oZSkNCgl7DQoNCgkJCWlmIChnYWwudGlja19kZWNheWVyID4gMCAmJiBlICE9 IHRydWUpDQoJCQl7DQoJCQkJdGhpcy5zbGlkZXRpbWVyID0gc2V0VGltZW91dCgi Z2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5kZWNheV9oaWRlKCkiLCBnYWwudGlj a19kZWNheSk7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQl0aGlzLmdhbG9iai5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCSAgICAgICAgdGhpcy5oYW5kbGVfb3Zl cmxhcHMoZmFsc2UpOw0KCSAgICAgICAgdGhpcy5hY3RpdmVnYWwgPSBudWxsOw0K CSAgICAgICAgdGhpcy5hY3RpdmVsaW5rID0gbnVsbDsNCgkgICAgICAgIGNsZWFy VGltZW91dChnYWwuY2xvY2spOw0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuZGVjYXlfaGlkZSA9IGZ1bmN0aW9uKCkNCgl7Ly9hbGVydCgieW8iKTsN CgkJZ2FsLnRpY2tfZGVjYXllciA9IG51bGw7DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5ob3ZlciA9IGZ1bmN0aW9uKG9iaikNCgl7DQoJICAgICAg ICB0aGlzLnNob3cob2JqLCB0cnVlKTsNCgl9Ow0KDQoJZ2Vla19nYWxfcG9wdXAu cHJvdG90eXBlLm92ZXJsYXBzID0gZnVuY3Rpb24ob2JqLCBvYmoyKQ0KCXsNCgkg ICAgICAgIHZhciBzID0gbmV3IEFycmF5KCk7DQoJICAgICAgICB2YXIgcG9zID0g Z2FsLmZldGNoX29mZnNldChvYmopOw0KDQoJICAgICAgICBsID0gcG9zLmw7DQoJ ICAgICAgICB0ID0gcG9zLnQ7DQoJICAgICAgICByID0gbCArIG9iai5vZmZzZXRX aWR0aDsNCgkgICAgICAgIGggPSB0ICsgb2JqLm9mZnNldEhlaWdodDsNCg0KDQoJ ICAgICAgICBpZiAobCA+IG9iajIuciB8fCByIDwgb2JqMi5sIHx8IHQgPiBvYmoy LmIgfHwgaCA8IG9iajIudCkNCgkgICAgICAgIHsNCgkJCQlyZXR1cm4gZmFsc2U7 DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJICAgICAg ICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5oYW5kbGVfb3ZlcmxhcHMgPSBmdW5jdGlvbihkb2hpZGUp DQoJew0KCSAgICAgICAgaWYgKGlzX2llKQ0KCSAgICAgICAgew0KCSAgICAgICAg ICAgICAgICB2YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxl Y3QnKTsNCg0KCSAgICAgICAgICAgICAgICBpZiAoZG9oaWRlKQ0KCSAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdhbGFyZWEg PSBuZXcgQXJyYXkoKTsNCg0KCSAgICAgICAgICAgICAgICAgICAgICAgIGdhbGFy ZWEgPSB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbCcgOiB0 aGlzLmxlZnRweCwNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdy JyA6IHRoaXMubGVmdHB4ICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lkdGgsDQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndCcgOiB0aGlzLnRvcHB4LA0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2gnIDogdGhpcy50b3Bw eCArIHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodA0KCSAgICAgICAgICAgICAgICAg ICAgICAgIH07DQoNCgkgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp ID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspDQoJICAgICAgICAgICAgICAg ICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHRoaXMub3ZlcmxhcHMoc2VsZWN0c1tpXSwgZ2FsYXJlYSkpDQoJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZhciBoaWRlID0gdHJ1ZTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBzZWxlY3RzW2ld Ow0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAocyA9IHMucGFyZW50Tm9kZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzLmNsYXNzTmFtZSA9PSAndmJtZW51X3Bv cHVwJykNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0NCg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoaGlkZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGVjdHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOw0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFycmF5X3B1c2goZ2FsLmhpZGRlbl9zZWxlY3RzLCBpKTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICAgICAgICAgIH0N CgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICBlbHNlDQoJICAg ICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo dHJ1ZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGFycmF5X3BvcChnYWwuaGlkZGVu X3NlbGVjdHMpOw0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHR5cGVvZiBpID09ICd1bmRlZmluZWQnIHx8IGkgPT0gbnVsbCkNCgkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlDQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdHNbaV0u c3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsNCgkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICAgICAgICAgICAgICB9DQoJ ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgIH0NCgl9Ow0KDQoJZ2Vla19nYWxf cG9wdXAucHJvdG90eXBlLnNsaWRlID0gZnVuY3Rpb24oY2xpcFgsIGNsaXBZLCBv cGFjaXR5KQ0KCXsNCgkJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0JyAmJiAo Y2xpcFggPCB0aGlzLmdhbG9iai5vZmZzZXRXaWR0aCB8fCBjbGlwWSA8IHRoaXMu Z2Fsb2JqLm9mZnNldEhlaWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRl ICYmIGlzX2llKQ0KCQkJew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdh bG9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFs cGhhJykub3BhY2l0eSA9IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYICs9IHRo aXMuaW50ZXJ2YWxYOw0KCQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJ CXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFgg KyAicHgsICIgKyBjbGlwWSArICJweCwgYXV0bykiOw0KCQkJdGhpcy5zbGlkZXRp bWVyID0gc2V0VGltZW91dCgiZ2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5zbGlk ZSgiICsgY2xpcFggKyAiLCAiICsgY2xpcFkgKyAiLCAiICsgb3BhY2l0eSArICIp OyIsIDApOw0KCQl9DQoJCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdo dCcgJiYgKGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMuZ2Fsb2JqLm9mZnNldEhl aWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRlICYmIGlzX2llKQ0KCQkJ ew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdhbG9iai5maWx0ZXJzLml0 ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9 IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYIC09IHRoaXMuaW50ZXJ2YWxYOw0K CQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJCXRoaXMuZ2Fsb2JqLnN0 eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lk dGggKyAicHgsICIgKyBjbGlwWSArICJweCwgIiArIGNsaXBYICsgInB4KSI7DQoJ CQl0aGlzLnNsaWRldGltZXIgPSBzZXRUaW1lb3V0KCJnYWwucG9wdXBzW2dhbC5h Y3RpdmVnYWxdLnNsaWRlKCIgKyBjbGlwWCArICIsICIgKyBjbGlwWSArICIsICIg KyBvcGFjaXR5ICsgIik7IiwgMCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aGlz LnN0b3Bfc2xpZGUoKTsNCgkJfQ0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuc3RvcF9zbGlkZSA9IGZ1bmN0aW9uKCkNCgl7DQoJCWNsZWFyVGltZW91 dCh0aGlzLnNsaWRldGltZXIpOw0KDQoJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAg PSAncmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7DQoNCgkJaWYgKGdhbC5v cGVuX2ZhZGUgJiYgaXNfaWUpDQoJCXsNCgkJCXRoaXMuZ2Fsb2JqLmZpbHRlcnMu aXRlbSgnRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEnKS5vcGFjaXR5 ID0gMTAwOw0KCQl9DQoJfTsNCg0KLy9FdmVudHMNCg0KZnVuY3Rpb24gZ2Vla19n YWxfcG9wdXBfZXZlbnRzKCkNCnsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50 cy5wcm90b3R5cGUuY29udHJvbG9ial90aWNrID0gZnVuY3Rpb24oKQ0Kew0KICAg ICAgICBzZXRUaW1lb3V0KCJnYWwudGljaygpOyIsIDEwMCk7DQogICAgICAgIC8v YWxlcnQoInlvIik7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90 eXBlLmNvbnRyb2xvYmpfb25jbGljayA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAg IGlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQog ICAgICAgICAgICAgICAgZG9fYW5fZShlKTsNCiAgICAgICAgICAgICAgICBpZiAo Z2FsLmFjdGl2ZW1lbnUgPT0gbnVsbCB8fCBnYWwubWVudXNbZ2FsLmFjdGl2ZW1l bnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICAgICBnYWwucG9wdXBzW3RoaXMuaWRdLnNob3co dGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnYWwuYWN0aXZlbGluayA9 IGUuaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KHRoaXMuaWQg KyAiIFNTICIgKyBlLmlkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGdhbC5wb3B1cHNbdGhpcy5pZF0uaGlkZSgpOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZlbnRzLnBy b3RvdHlwZS5jb250cm9sb2JqX29ubW91c2VvdmVyID0gZnVuY3Rpb24oZSkNCnsN CiAgICAgICAgaWYgKHR5cGVvZiBkb19hbl9lID09ICdmdW5jdGlvbicpDQogICAg ICAgIHsNCiAgICAgICAgICAgICAgICBkb19hbl9lKGUpOw0KICAgICAgICAgICAg ICAgIGdhbC5wb3B1cHNbdGhpcy5jb250ZW50aWRdLmhvdmVyKHRoaXMpOw0KICAg ICAgICB9DQp9Ow0KDQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUu Y29udHJvbG9ial9vbm1vdXNlb3V0ID0gZnVuY3Rpb24oZSkNCnsNCiAgICB2YXIg dGVtcHggPSAwOw0KICAgIGlmIChpc19pZSkNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGV2ZW50LmNsaWVudFg7DQogICAgICAgICAgICB0ZW1wWSA9IGV2ZW50 LmNsaWVudFk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGUuY2xpZW50WCA7DQogICAgICAgICAgICB0ZW1wWSA9IGUuY2xpZW50 WTsNCiAgICB9DQogICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUubWVudW9w dGlvbl9vbmNsaWNrX2Z1bmN0aW9uID0gZnVuY3Rpb24oZSkNCnsNCiAgICAgICAg dGhpcy5vZnVuYyhlKTsNCiAgICAgICAgZ2FsLmdhbHNbdGhpcy5jb250cm9sa2V5 XS5oaWRlKCk7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl Lm1lbnVvcHRpb25fb25jbGlja19saW5rID0gZnVuY3Rpb24oZSkNCnsNCiAgICAg ICAgZSA9IGUgPyBlIDogd2luZG93LmV2ZW50Ow0KDQogICAgICAgIGlmIChlLnNo aWZ0S2V5KQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgd2luZG93Lm9wZW4o dGhpcy5ocmVmKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsN CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmhyZWY7DQog ICAgICAgIH0NCg0KICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQogICAg ICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsN CiAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQo KTsNCg0KICAgICAgICBnYWwuZ2Fsc1t0aGlzLmNvbnRyb2xrZXldLmhpZGUoKTsN CiAgICAgICAgcmV0dXJuIGZhbHNlOw0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZl bnRzLnByb3RvdHlwZS5wb3B1cG9wdGlvbl9vbm1vdXNlb3ZlciA9IGZ1bmN0aW9u KGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9oaWxpdGUn ICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6ICcnKTsN CiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsNCn07 DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUucG9wdXBvcHRpb25f b25tb3VzZW91dCA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NO YW1lID0gJ3ZibWVudV9vcHRpb24nICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVf b3B0aW9uX2FsaW5rJyA6ICcnKTsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3Ig PSAnZGVmYXVsdCc7DQp9Ow0KDQoNCi8vY29tbW9uIGZ1bmN0aW9ucw0KDQpmdW5j dGlvbiBnYWxfaGlkZShlKQ0Kew0KICAgICAgICBpZiAoZSAmJiBlLmJ1dHRvbiAm JiBlLmJ1dHRvbiAhPSAxICYmIGUudHlwZSA9PSAnY2xpY2snKQ0KICAgICAgICB7 DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAg ICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgZ2FsLmhpZGUodHJ1 ZSk7DQogICAgICAgIH0NCn07DQoNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hamF4 KG9iaiwgcG9zdGlkKQ0Kew0KICAgICAgICBpZiAodHlwZW9mIGdhbCAhPSAndW5k ZWZpbmVkJykNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBkaXZzID0g ZmV0Y2hfdGFncyhvYmosICdkaXYnKTsNCiAgICAgICAgICAgICAgICBmb3IgKHZh ciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyBpKyspDQogICAgICAgICAgICAgICAg ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdnNbaV0uaWQgJiYgZGl2 c1tpXS5pZC5zdWJzdHIoMCwgOSkgPT0gJ3Bvc3RtZW51XycpDQogICAgICAgICAg ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdhbC5yZWdpc3RlcihkaXZzW2ldLmlkLCB0cnVlKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCn0NCg0K ZnVuY3Rpb24gZ2FsX2NsaWVudGFyZWEoKQ0Kew0KCSAgdmFyIHcgPSAwOw0KCSAg dmFyIGggPSAwOw0KCSAgdmFyIHIgPSAwOw0KCSAgdmFyIGIgPSAwOw0KDQoJICBp ZiAodHlwZW9mKHdpbmRvdy5pbm5lcldpZHRoKSA9PSAnbnVtYmVyJykNCgkgIHsN CgkgICAgciA9IHdpbmRvdy5pbm5lcldpZHRoOw0KCSAgICBiID0gd2luZG93Lmlu bmVySGVpZ2h0Ow0KDQoJICB9DQoJICBlbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKQ0KCSAg ew0KCSAgICByID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo Ow0KCSAgICBiID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkp DQoJICB7DQoJCXIgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOw0KCQliID0g ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7DQoJICB9DQoJICBpZih0eXBlb2Yo d2luZG93LnBhZ2VZT2Zmc2V0KSA9PSAnbnVtYmVyJykNCgkgIHsNCgkgICAgaCA9 IHdpbmRvdy5wYWdlWU9mZnNldDsNCgkgICAgdyA9IHdpbmRvdy5wYWdlWE9mZnNl dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkNCgkg IHsNCgkgICAgaCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOw0KCSAgICB3ID0g ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Ow0KCSAgfQ0KCSAgZWxzZSBpZihkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu dC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3ApKQ0KCSAgew0KCSAgICBoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNj cm9sbFRvcDsNCgkgICAgdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv bGxMZWZ0Ow0KCSAgfQ0KCQkvL3dpbmRvdy5zdGF0dXMgPSAiIG53ICIgKyB3ICsg IiBuaCAiICsgaCArICIgc3QgIiArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z Y3JvbGxUb3A7DQoJICByZXR1cm4geyd3JyA6IHcsICdoJyA6IGgsICdyJyA6IHIs ICdiJyA6IGJ9Ow0KfQ0KDQpmdW5jdGlvbiBnYWxfbW91c2VfbW92ZShlKQ0Kew0K CWlmICh0eXBlb2YgZ2FsID09ICdvYmplY3QnKQ0KCXsNCg0KICAgICAgICAgICAg aWYgKGlzX2llKQ0KICAgICAgICAgICAgew0KCQkJCSAgICBnYWwubW91c2VYID0g ZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdA0KCQkJCSAg ICBnYWwubW91c2VZID0gZXZlbnQuY2xpZW50WSArIGRvY3VtZW50LmJvZHkuc2Ny b2xsVG9wDQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgICAgIGdhbC5tb3VzZVggPSBlLmNsaWVu dFggOw0KICAgICAgICAgICAgICAgICAgICBnYWwubW91c2VZID0gZS5jbGllbnRZ Ow0KICAgICAgICAgICAgfQ0KDQoJfQ0KfQ0KDQovL0lOSQ0KDQpmdW5jdGlvbiBn ZWVrX2dhbF9yZWdpc3Rlcl9hbGwoKQ0Kew0KDQoJaWYgKHR5cGVvZiBnZWVrX2dh bF90b19yZWdpc3RlciA9PSBBcnJheSgpKQ0KCXsvL2FsZXJ0KCJ1bzIgIiArIGdl ZWtfZ2FsX3RvX3JlZ2lzdGVyLmxlbmd0aCk7DQogICAgICAgIGZvciAodmFyIGkg PSAwOyBpIDwgZ2Vla19nYWxfdG9fcmVnaXN0ZXIubGVuZ3RoOyBpKyspDQogICAg ICAgIHsNCiAgICAgICAgCWdhbC5yZWdpc3RlcihnZWVrX2dhbF90b19yZWdpc3Rl cltpXS5pZCwgZ2Vla19nYWxfdG9fcmVnaXN0ZXJbaV0uc3R5bGVpZCwgZ2Vla19n YWxfdG9fcmVnaXN0ZXJbaV0ucG9zaXRpdG9uaWQpOw0KICAgICAgICB9DQoJfQ0K fQ0KDQp2YXIgZ2FsID0gbmV3IGdlZWtfZ2FsKCk7DQoNCg0KDQppZiAodHlwZW9m IGdhbCA9PSAnb2JqZWN0JykNCnsNCg0KCQlnYWwub3Blbl9zdGVwcyA9IGdhbF9v cGVuX3N0ZXBzOw0KICAgICAgICBnYWwudGlja19jb3VudCA9IGdhbF90aWNrX2Nv dW50OyAvLyBUaWNrZXIgKGluIG1pbGxpc2Vjb25kcykuDQogICAgICAgIGdhbC50 aWNrX3N0ZXBzID0gZ2FsX3RpY2tfc3RlcHM7IC8vIENoZWNrZXIgKGV2ZXJ5IHgg YW1vdW50IG9mIHRpbWVzKQ0KICAgICAgICBnYWwudGlja19kZWNheSA9IGdhbF90 aWNrX2RlY2F5Ow0KICAgICAgICBnYWwudGlja19jbG9jayA9IDA7IAkJCSAvL2N1 cnJlbnQgdGljaw0KICAgICAgICBnYWwudGlja2VyID0gMDsNCiAgICAgICAgZ2Fs LmRlY2F5ID0gMDsNCg0KCQlpZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICFpc19z YWYpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5hdHRhY2hF dmVudCgnb25jbGljaycsIGdhbF9oaWRlKTsNCiAgICAgICAgICAgICAgICB3aW5k b3cuYXR0YWNoRXZlbnQoJ29ucmVzaXplJywgZ2FsX2hpZGUpOw0KICAgICAgICB9 DQogICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgJiYg IWlzX3NhZikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmFk ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZ2FsX2hpZGUsIGZhbHNlKTsNCiAgICAg ICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZ2Fs X2hpZGUsIGZhbHNlKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAg IHsNCiAgICAgICAgICAgICAgICB3aW5kb3cub25jbGljayA9IGdhbF9oaWRlOw0K ICAgICAgICAgICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9IGdhbF9oaWRlOw0KICAg ICAgICB9DQoNCiAgICAgICAgZ2FsLmFjdGl2YXRlKHRydWUpOw0KDQogICAgICAg IHZhciBvbGRvbmxvYWQgPSB3aW5kb3cub25sb2FkOw0KDQogICAgICAgIGlmICh0 eXBlb2Ygd2luZG93Lm9ubG9hZCAhPSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQoJ CQl3aW5kb3cub25sb2FkID0gZ2Vla19nYWxfcmVnaXN0ZXJfYWxsOw0KCQl9DQoJ CWVsc2UNCgkJew0KCQkgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkNCgkJ ICAgIHsNCgkJCQlpZiAob2xkb25sb2FkKQ0KCQkJCXsNCgkJCQkJb2xkb25sb2Fk KCk7DQoJCQkJfQ0KCQkJCWdlZWtfZ2FsX3JlZ2lzdGVyX2FsbCgpOw0KCQkJfTsN CgkJfQ0KDQoJdmFyIG9sZG1vdmUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu b25tb3VzZW1vdmU7DQoNCglpZiAodHlwZW9mIGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5vbm1vdXNlbW92ZSAhPSAnZnVuY3Rpb24nKQ0KCXsNCgkJZG9jdW1lbnQu b25tb3VzZW1vdmUgPSBnYWxfbW91c2VfbW92ZTsNCgl9DQoJZWxzZQ0KCXsNCgkg ICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rp b24oKQ0KCSAgICB7DQoJCQlpZiAob2xkbW92ZSkNCgkJCXsNCgkJCQlvbGRtb3Zl KCk7DQoJCQl9DQoJCQlnYWxfbW91c2VfbW92ZSgpOw0KCQl9Ow0KCX0NCg0KDQoN Cn0NCg0K ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_post_loader.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_post_loader.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_post_loader.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEF0 dGVtcHRzIHRvIGRpc3BsYXkgYSBwb3N0IHZpYSBBSkFYLCBmYWxsaW5nIGJhY2sg dG8gb3BlbmluZyBhIG5ldyB3aW5kb3cgaWYgQUpBWCBub3QgYXZhaWxhYmxlCioK KiBAcGFyYW0JaW50ZWdlcglQb3N0IElECioKKiBAcmV0dXJuCWJvb2xlYW4JRmFs c2UKKi8KZnVuY3Rpb24gZGlzcGxheV9wb3N0KHBvc3RpZCkKewoJaWYgKEFKQVhf Q29tcGF0aWJsZSkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0gPSBuZXcgdkJf QUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCk7CgkJdkJfUG9zdExvYWRlcltwb3N0aWRd LmluaXQoKTsKCX0KCWVsc2UKCXsKCQlwY19vYmogPSBmZXRjaF9vYmplY3QoJ3Bv c3Rjb3VudCcgKyB0aGlzLnBvc3RpZCk7CgkJb3BlbldpbmRvdygnc2hvd3Bvc3Qu cGhwPycgKyAoU0VTU0lPTlVSTCA/ICdzPScgKyBTRVNTSU9OVVJMIDogJycpICsg KHBjX29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUo cGNfb2JqLm5hbWUpIDogJycpICsgJyZwPScgKyBwb3N0aWQpOwoJfQoJcmV0dXJu IGZhbHNlOwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfQUpBWF9Qb3N0TG9hZGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCgp2YXIgdkJfUG9zdExvYWRlciA9IG5ldyBBcnJheSgpOwoKLyoqCiogQ2xh c3MgdG8gbG9hZCBhIHBvc3RiaXQgdmlhIEFKQVgKKgoqIEBwYXJhbQlpbnRlZ2Vy CVBvc3QgSUQKKi8KZnVuY3Rpb24gdkJfQUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCkK ewoJdGhpcy5wb3N0aWQgPSBwb3N0aWQ7Cgl0aGlzLmNvbnRhaW5lciA9IGZldGNo X29iamVjdCgnZWRpdCcgKyB0aGlzLnBvc3RpZCk7Cn07CgovKioKKiBJbml0aWF0 ZXMgdGhlIEFKQVggc2VuZCB0byBzaG93cG9zdC5waHAKKi8KdkJfQUpBWF9Qb3N0 TG9hZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKQp7CglpZiAodGhpcy5j b250YWluZXIpCgl7CgkJcG9zdGlkID0gdGhpcy5wb3N0aWQ7CgkJcGNfb2JqID0g ZmV0Y2hfb2JqZWN0KCdwb3N0Y291bnQnICsgdGhpcy5wb3N0aWQpOwoJCXRoaXMu YWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdGhpcy5hamF4Lm9u cmVhZHlzdGF0ZWNoYW5nZSh2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uYWpheF9jaGVj ayk7CgkJdGhpcy5hamF4LnNlbmQoJ3Nob3dwb3N0LnBocD9wPScgKyB0aGlzLnBv c3RpZCwKCQkJJ2FqYXg9MSZwb3N0aWQ9JyArIHRoaXMucG9zdGlkICsKCQkJKHBj X29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUocGNf b2JqLm5hbWUpIDogJycpCgkJKTsKCX0KfTsKCi8qKgoqIE9ucmVhZHlzdGF0ZSBo YW5kbGVyIGZvciBBSkFYIHBvc3QgbG9hZGVyCioKKiBAcmV0dXJuCWJvb2xlYW4J RmFsc2UKKi8KdkJfQUpBWF9Qb3N0TG9hZGVyLnByb3RvdHlwZS5hamF4X2NoZWNr ID0gZnVuY3Rpb24oKQp7Cgl2YXIgQUpBWCA9IHZCX1Bvc3RMb2FkZXJbcG9zdGlk XS5hamF4LmhhbmRsZXI7CgoJaWYgKEFKQVgucmVhZHlTdGF0ZSA9PSA0ICYmIEFK QVguc3RhdHVzID09IDIwMCkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uZGlz cGxheShBSkFYLnJlc3BvbnNlWE1MKTsKCgkJaWYgKGlzX2llKQoJCXsKCQkJQUpB WC5hYm9ydCgpOwoJCX0KCX0KCglyZXR1cm4gZmFsc2U7Cn07CgovKioKKiBUYWtl cyB0aGUgQUpBWCBIVE1MIG91dHB1dCBhbmQgcmVwbGFjZXMgdGhlIGV4aXN0aW5n IHBvc3QgcGxhY2Vob2xkZXIgd2l0aCB0aGUgbmV3IEhUTUwKKgoqIEBwYXJhbQlz dHJpbmcJUG9zdGJpdCBIVE1MCiovCnZCX0FKQVhfUG9zdExvYWRlci5wcm90b3R5 cGUuZGlzcGxheSA9IGZ1bmN0aW9uKHBvc3RiaXRfeG1sKQp7CglpZiAoZmV0Y2hf dGFnX2NvdW50KHBvc3RiaXRfeG1sLCAncG9zdGJpdCcpKQoJewoJCXRoaXMuY29u dGFpbmVyLmlubmVySFRNTCA9IHRoaXMuYWpheC5mZXRjaF9kYXRhKGZldGNoX3Rh Z3MocG9zdGJpdF94bWwsICdwb3N0Yml0JylbMF0pOwoJCVBvc3RCaXRfSW5pdChm ZXRjaF9vYmplY3QoJ3Bvc3QnICsgdGhpcy5wb3N0aWQpLCB0aGlzLnBvc3RpZCk7 Cgl9CgllbHNlCgl7CS8vIHBhcnNpbmcgb2YgWE1MIGZhaWxlZCwgcHJvYmFibHkg SUUKCQlvcGVuV2luZG93KCdzaG93cG9zdC5waHA/JyArIChTRVNTSU9OVVJMID8g J3M9JyArIFNFU1NJT05VUkwgOiAnJykgKyAocGNfb2JqICE9IG51bGwgPyAnJnBv c3Rjb3VudD0nICsgUEhQLnVybGVuY29kZShwY19vYmoubmFtZSkgOiAnJykgKyAn JnA9JyArIHRoaXMucG9zdGlkKTsKCX0KfTsKCi8qPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSpcCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnx8ICMgRG93bmxvYWRlZDog MDU6NTIsIFR1ZSBKdW4gMjR0aCAyMDA4Cnx8ICMgQ1ZTOiAkUkNTZmlsZSQgLSAk UmV2aXNpb246IDE1MDkyICQKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ki8= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=qiplogo.gif Content-Type: image/gif; name=qiplogo.gif Content-Location: http://forum.qip.ru/qipstyle/qiplogo.gif Content-Transfer-Encoding: Base64 R0lGODlhLAFVAPcAAKusqpulkyS+AMnwqbHTlL7mo7rioMz0rNvmysPCwn6Wacft pofVR2zSUaTEirOysrzhnYWVeObl5czrr+Lh4aOsm7G2q0bEAcHmoc/YxpeXlb29 umvMFpjZWbHXmazNkJSnhTXAAFTHAcS7yIKcbVXJMKXcZrbDqdHR0Gl6Wuvr687M zeDm18HDvYqkc5y6g6y3opSxfKi1nMbTt7/DuVnGGr3TqL7kodrZ2WHJAsrIycvC zaC+h6rKj9XV1d7d3azRlZCsenSKYi2/AJObjLbZmaTdi53ad4HHZ3XIPM/Qyrm5 uLbcnLnQpIyWg+nn58LbrLPZm7rgnsXqpKLBh5zQh8bspm58YtrS3HqOa8vktW6C XJm3gbzjoTrBAEvGFHPOKLndm8Trpry1u3KFYrrenIKOeOjo6K7QkoegcYXFTdjW 1rjendHgwbngnsLppPHu7uvl6+rr41prS1/BO3yKcY3VTajDkpnZZrCwr7zao4LS Qbnfno2gfcjKxuPb5c7EzzvFGoTTZZ64ira2tWfROZ6vkMbFxcPoo9/Y5GXHPc/K 0tXaz+Tj43SAaq3Dm2jRJ7e1smbLJMzJyo+ufXiPZeji683LzMXHwszMy8C/v4a7 ZtjY19PT08rLyY2od9XR1rjYnbPJn9zZ3bPchsXlqJ+dnbjbmtvc2r+5wdD4rqfH jHiGbTq/DZe0f8W+ynbBVomQgtfT19LT0evr5+Tl5eXj5XzPNsXtp871rM/3rcHo pMryqs72rdD/rr7losvzq8TspsPqpcvyqvTx8fbz8/f09M30rMnxqczzq+vp6e3r 6+/t7fLw8Mjup8TppLTXl+Df39vb28/Qz0hWPPHx7W+AYr7OsOTk5JG/dsDXqrPj jKq/krnilLrhm7ixu3/QUsHft8fuqLrgrRm8AELFJKrdnMXspqvPmZrfcerq6qDb YOvp67fdnLvfnMvJzbXUqbPeoMXrpdTV0pm3ca7Qna3ekYrEbo6wfYrYe73louPg 5rfWnHjQLarboHeJZywAAAAALAFVAAAI/wB9CRxIsKDBgwgTKlzIsKHDhxAjSpxI saLFixiBaNzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzA9yJxJs6bNmzhz6tzJs6fP n0CDCh1KtKjRo0ijKF3KtKnTp1CjSp1KtarVq1izat3KtavXr2CZiB1LtqzZs2jT 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 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=navbits_start.gif Content-Type: image/gif; name=navbits_start.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_start.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAAL3Zs3HIfW7EenPKgGvAdr/ZtGq/dXOMdrHZqbTCuHXLgnHI fnXNgMPZt627sG3BebHZqlu6aXmgf1u3aVOtXrfZr4DZkH/XjrbZrsvWz2TDcG7B fEucWGXAcGe7cq3FsXPIgGi7dK/Zqb7Zs6vZpZurnmGza63ZqL/LwrvZtFOpXKGw pF6yac3Y0M3W0HvSiGa8cXDGfcnZuly4aZe+nFeuZVKlYHedfcXZuqCponTQg7fZ r4+xk2i/d2S6cG7CeWu/dni0fnijfrjRrrbBucnSzKi7rLrZsISdh2m/dLnZscXZ uW/Fe2S2bmS3b8zZv1yyaG3EeMTZt3XLgnnPh7bZr2e6cnOaeJ3KonTLgZ22oWS3 b3nQhsPZuI++jV22bM7Y0GrHdmC0amO0bbbLuWq/dW+XdFioYXSqeYa5iGvCd3ui gZOul0qXVXegfDZ1P1KdXcrVzW7MfqPFpMjZvFyyZ3bOgrHZq1eoZHDNfWi7c3y4 fai5q4y9i3fUhoCghGOzbrfZrl6qaWa5cW/Fe3ubfXvWiVClWsvZvYS6hHaffL3Z soG0grPBtqi/rFOqXZm6nNDY07TDuJarmUmCUYa5h9DZ0wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJYALAAAAAAPAA8AQAjJAC0JHEiwoKUgdQYZEBBg ip0LeDjYiICCIJhFAAAUKIChipIlPATGOSTGB4wkaqIsGPCGksE5UhDtKbGiUQIH RLBo6BAmjw4/hiz0GNIFRyAjAs+w2KKHgIAYIKjA+QIlksGrV138KcQHq8AWJ+6I 2DHiCAQEMtBMQvLBEaREaSox8tKgQgoAWjKoGGMFCJMBDF7I6fOEDglJlshQaOKB AKEAWbhsaFNjRhGBNB6ZcBKizIMfCgRNAESQjZkrN9ZIcKNIyIEclgICADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=navbits_finallink.gif Content-Type: image/gif; name=navbits_finallink.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_finallink.gif Content-Transfer-Encoding: Base64 R0lGODlhHgAPAPcAAAAAANnZ2XfOg3rShnXMgc7Y0H7Zi3zWiXFvcnnShHPHf3jN hHiefZe0m3qfgHbNgnXSgITZjlGCXJiwmE1/VNDZv27Ed3bQgnPMfmaRf3PJf3vV iNbZ0EByRsvWz1q0aMrWzXzYiaO0pnvYh83W0Gq/dYOKhniReIbZkXHLfXjQg8LL xXrThXqggHvZhGnKdbrDvWXDcJuXnnWde3Wce564nnt5ex4eHpCXknPLfpqSmG/J e6u/rWmBd2mNfMvUzn7Wi5aSll+BZTxuQn6WfYbJjjx/R3Wgi9TZy7O6tZTZl3jY hW9/cp2kn6OXoYjZjnTLgdXZzn6WfEeGUlyIc3HQfqi1qay6r2/KfJPZlnHHfXvW iGvCdlqjY47ZkmG+bHTJf6WmmqLWqG+AepK0p6KypqmkqLW/ty+dQXvRh2PZc1Wu Xp/IpW/Ge2zMeVV9Zau0nqK/mqG0opCnkaunq5enmHTLgW6Ecau6roTZjNXZzavJ qn3WimnBc4+jkoHZjXnVh5OnlnuhgV+la1l6Z7y9vHXNgXd7eHLJfn/XirrQvnqj gY2GjqO4pXiidHfRgnXMgYnZkKmqp3WdeYjZkI+nj3XNgKa6qNDZ0wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJgALAAAAAAeAA8AQAjoADEJHAhgoMGDCBMaLMgQ U8EbmIpUecRiwwE+QCIM6nHkzRmEBRUOLBAljAxGAQo5mZKljkiFHr5gSYGBgB0o DyAZGZIw5EtMezgEcGQiwKEyVmCAVCjGRZ4nlFBE8qKkhI0gOtaI+ImQy44cBCwJ ELBghIQMHX5wXcv2J4lKc/BgwpGkbcICFfTAkRQgAB00SIi05dHokpwacSackOIH gRkmagK1BeEGAqAtIQwY+LNEyBgyFK7YVfTC0AUVCQakSdSHkA8qK+xiYhOjjRZE GsAoGNDlgwXZAhvMcDCJhqAWDBbdaYIpIAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=reply.gif Content-Type: image/gif; name=reply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/reply.gif Content-Transfer-Encoding: Base64 R0lGODlhbgAaAPf/AIy0i5i6m26kbdHY1ZajmKrFrk5+WLO6tfT//I3aj9ng3dXg 23KEdOvs7P3+/mabZquPftq1mXatdIh2eWqgap/lqN7h4HzMgr3EvmuEbczZ0YbS hzZcT0RyU1yjX1aIXLzOwd7t6l+RYmefZ6OppnTDeVuOX4zSjVpzXoeQie7HpPj5 +pOalUxhVIKfhD5pUdXj3+vz8ZfgnJZ/fLeZh6+5scfRysvRzX7JgEJvUrXAuHy6 emV1aImKimOYZHCobzhPSsPIxaqxrHuyecCjl/X19oOsgub29n/BfeLn6MTWysmq mHXDeYvNiqXBqOvv7nOqcXW5dOby70p4VnuTfVqIXoLEgXy8etPi3tve3ZuonXN5 d7nAvJKzk/D9+321e+Dk4zliUHnJfW+7clOEWtba2IuWjrLJt3zEfNPd2pvfoZLZ lGGWY32ifWuba8fMyMHGwuPv7Pr+/WKRZW6xbYrYjdvl44fVisKijdHT0k91WLvI wGWpZW+/dI/dkmawadzm4oygjoysjaOzpYPMhM7Tz+78+oDEf3e2dc/c1d/q5VN/ WsfWy53jo35tblJsWFFxWIbIhcLPx4PKg+W+nWRjZefq6X+9ffD595+won3BfGp7 bXq8eHvGfYathnWcdYehieTs75CHi0JcT3jAeXfHfILQhX+WgXLAdtOujX7Ffn+o fXbGekRmUkyNVrbNu4Kpg+349cC/vWKAZG2RbaC9onnCeOv5+dLLzIanh2y4b3+5 fXmieMnOy5Pelm9hY4Wrh3igd32+fFx8YG2jbHaxdHO1cvLz83q/eTBSTvDz81Jl WIfMhXSNdo/TkOLy8HC0b4GrgKHmqtbk3nmLe3OucXivd3Cgb+r39aHoq8DSxleC XHm5eD9VTZnjn4PHgnW2dGm0a/z8/EppVGeUaKu0rvf399fY12OsZe/w8S5DRpfc mm9tcPv7+3nDerHCtK3Ps4F+goK/gMvKx9vj3trm4WFbXmyia66lppCPj4ioiUhu VfL19vTy8v///+fu8SH5BAEAAP8ALAAAAABuABoAQAj/AP/9s1HoBoYDB2qUEyJk EImHB2wMSEOxIsUBByRNHKABhsePIEOKBImlpMmTKFOqXAnSTpJQAmPK/Lcnl403 DsxYcCBnBSZMMeIoAgQojixHEShFwAOBgQ9wV6Jy4hT1CjhEAAJ0geVmBDdhYMOC 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 FxMBAQA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=rating_5.gif Content-Type: image/gif; name=rating_5.gif Content-Location: http://forum.qip.ru/images/rating/rating_5.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPf/AP//yf//o///g///ZXeSwXmSvu3OcceDEK2wrOWva4udvoab wIGYwoKWv4iWtNaNLaZtEnaRwP//y3qTwP//tv//w///r///iJ+krv/inuq1Z8qz kuKfYbFvD+m7Yv//ypumuNrDb+HEi6VzG6ltCt2bH6RrEdbEjf/hW+izUv/lQ/TR hvXaVNDHl/7qTNuuZO7Ha4+Xp+zQW32VwJ6ksP//spaWpHiSwKSkp9CdZdq0SP/b Yc2/g///jPPWV3V6i3WRwP/oTpGgueXMZ///e//rRIGYwIqYvP/sjf//mZtuRf// kerQdv/yTZ2murZ4DXyUwZmhrP+4Sf//s5GVqJZmFZmdp4OYv///nP//zqWotIub uv//l///uduPL//RS//qP///pv//wv//t///rv/4rYmZtn6UvLGKXu7bZat9Iv// vv//Yv/mif//zf//nf/soP//0NvOhf//zJabsNrBbKSlqKKem7usnphoFf//m5du J/nlY3yWwv//iffPffjVmP/VW4KZwv/miv/ST///k//TW9qZYOHLbIWawaqgjNaN L9CsUqJ/RJihrpSbsq+RdP//Y6Z0GtmZX8OQWqBkEN7Ea6huD9OwT9izRvbfY7ir oPPIZv//x6GAT3eSv4OWuuWwa4WWuISXvo1vWfXVdqKIYneFofniX45xWn6Xwt/Q gnyVwn+XwejLdqZrBfPPg5FwVf//n6efkPPOb7GRbvXMarCuov//z6+wp//qQt6u YP+yQvXLaf+1R//WUv/XXqCLbvDLgOnXbKhpDXmKrOTKY/+yRaqvrurYbO7bafjV l9nGd/rYmOTOaf/oRbaqn4qZtOnPYP//sf//oPTSc/XeYvbfYP3RT//RTZObs4CV vLGwpf//pKZ7MKV9NYqWsoCXwv/wTfLNgfXOf7+LV5+nuZVuLKR/SHmUwnuVwXuV wqRnEP/pnImcvsyIE76KVP//hP//htybYHiIqp+BTZ+CUHiSwXiTwYSZvvrmZK6S dv//vaGLbPDKgXOPvyH5BAEAAP8ALAAAAAA8AAwAQAj/AP8JFBjFzMCDAwsiROgo 2sKDQmI8HBjxYaImhWCVigPvxsEFTZaMq4ar3KeDicQtEUbLDaUCBye46LECxocc Z2LOrHkz5z85w+owspYkW6Vz3yAEW5XMEiZNSQix2+MNQr9VyoxluqbnF7E8kl6Z apFmiA4fWFB0qDKCBDqyZtGqZUvC00FBKkwAmYjXRISJDJ5dwjcxQpAnMwofToxQ kb41FAK0mUfn4Cw+kCVPenTwDip+FLoNOqTtoBUWXcaEQcLBhmnUqlm7Hmhg1z2B E/5AO2jgBQGBN8htOujqxd9/QPzhOXgiBZSBIjYwdw5d+sIv9iYK/FJP+z9sjbwz 3VEjnvzEXJEOFJvIbcABehNvDXh3aiIGNiV+2Mevf2ArZ37MAQAZAhjCywO19BEO Ihdk0QmBgRzzACTrsMKMPFkAYEE8wPiyyD7pEMADERJIMMUFO0jhBRqqiEiiiSiq iIY6A8lATQ0VtEPKQjLIgmM7qSwkzRvTVABHLAuFwIUFYpShRJJLNvnkQQgUEcoo otgCiANUFpFAA6D0sgyXAyGjy5fbcNIMOAeBAIYGRxTgQQZUtPlmnHPWORAOVxyk gBMH8eknoAPZkc9B7phzEA1bHGSEFos2OtCjAgUEADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=post_old.gif Content-Type: image/gif; name=post_old.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/post_old.gif Content-Transfer-Encoding: Base64 R0lGODlhCgALAOYAADtXWJfNp4bElr/j0rTcx4HSk8Dk06bVuL/h1NTz6dPz6YDR knKGg7/h1HaNidLz58zy33yVj9b061N+Z4aemZbKqHWMiG+JgqjnuCk4O3GGg09n YbPbxqbit8by2brwy1R5ZrPbxlxwbpbMpuj/+XCDgaXUt5PYoofBmYXDlb3h0L7i 0UNmXr3h0dDz40VjXTtWWEZhWHKIhc7y43uTjiQwPWiEel9+cabTt2F0ckFiXic4 Pt338i09P7Xrxpbepcfs277g0yo5Rd/584zmnY/snztXWElaWlVsZ0N8WAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAEkALAAAAAAKAAsAQAdngEcRGgwMMjQ7SUkgJykC jwIoPzEODysDmAMtEjkWD0EICA0qMy49Nj4mB6sHOB9IQjpGALQAMCw1FCQKCb08 QBlJDgoIBsYGDUMlFx4cBM8EIRAiNx0jAdgBFRgbE0QLBeEFC0UvgQA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=menu_open.gif Content-Type: image/gif; name=menu_open.gif Content-Location: http://forum.qip.ru/qipstyle/misc/menu_open.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAHANUAAP////3/+ne/dWyWap7Akb7du4fFh47QjfX/87/QsmdwYP7/ /fr/8en56Nvz2XuqerHRr3KjcOP14YrDib7fvIqpgOL/y3e/dPD/2JvbmlZ2UX64 fc3uuoehdPP/23esdrTWsnCYb4PEgnSGZJW+jMXfw2h3XMLjr6rJpna/cwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAACkALAAAAAALAAcAAAY0wEOJUgBBUARSJZIBOJ8M z0lzcTwBCwzHJEiJJM+AZbRJmQ0NZ6DzMLsnCEAi5K5/FIN6EAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=avatar220362_15.gif Content-Type: image/gif; name=avatar220362_15.gif Content-Location: http://forum.qip.ru/customavatars/avatar220362_15.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgATwBQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A+f6KKlgt5Z2xHGz46hRQAiLj52XKdM1I0Add0Rz6r3/CtGzW e0IEtmssTdUlB4+jLyP5etaUOnW86SS6aX8wKXlspfvFR1ZCPvAdyORjJ4BITdh2 Me30ae4jDIVO9C0eD94jBIHuBzj/AANRW2mTXFy0KKSwO3A6k5xiu18OWbfaVjK5 8yZZk3cZZAxyfQlVlU+4z3FXtQ0kR6hfwwqiqzuZG6BYuN3PbJbbn+7u71m6mti1 DS55/PYRoBslznhcDO89yo649M9evGaqGEIMu4+g5roLyzuLwu8CeXbg4M0pCB+/ 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 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=im_icq.gif Content-Type: image/gif; name=im_icq.gif Content-Location: http://forum.qip.ru/qipstyle/misc/im_icq.gif Content-Transfer-Encoding: Base64 R0lGODlhEQARAPfkAABDAARcJwBNABFUIABkGAI+AgAzAMvR2YyilQA/AN/i8NXZ 5gJBBBObHxVeKwA3ANjc6GvgcQlLF+Hi8X77gf//gd3h7RZmJLzFyewcg5YEVSGf ORZJIg+HFymNS3vyfhVhNEq6W/gPTjWiNyaVXytQLN3g7tMpgyddKSUbD0ugkMPL 0TGcW0O6fdc1VUKsQC6YLkSjRkOYgwl2Gh11ORd0MU3BZ4f9i0OgfjCWVFMzMzWi OI2wlgRVCG3hcQZdDi9mQC+yhYimnBdrOUy7SR5dIiaeOpeqqF6JLWzsbDSkQtzf 7GeQe0J2RDOSNC+PKCGIJyqAKjGBX13eX13SYEqKL1DDaTF8IRFJFD2pZJ2bIo4G VzKoa7XBw0KqbgtHDjqJPQdFCv/7e///TwtPDGLYYE96Vz9cSf9hmVZ+Yy6cPShB F1XQVgpSEGbhbc4ALWrxdhJzGNzP3gBkF//yVQBCAMvR2qTGrwBOANbZ5hFfKt/h 8L3HygBWHC+jNRdrKUq9S7cKSCxsMLDDvQZ9CnfxfI7/jwRXAT0PBErNSUa/dtye sC51YK3JuBFqFEaicnmTgv9KeWZ2KxBuGBR6QRKLGXvufk/KVTWkb2WYa0vFS+MA IABaAFDcaSCMMqwALTOmZ0icjLjExu3Aaf8xhmvkeQtVMjqDeDlrRS2ZSCGjIY3/ kC6dNliNXQBUAABIAP+6JgBOAR5PINnc6QuDG7HAvNTY4wlyPhJgH0nLTx+MHg9j Iv/5VXRuJQ92Qcais0BhE/AQPhOCFKBJa///ajwWCyKQOFyIYy2oNnaRjlavYoyj ljQgDQ9FFHHochh6J9PBJhqEOEt7HjhHMMAARUC2QzefeH2phDuabDqiOSVpSBZ+ ODNuOBFdDgB3ACaiJiKdLBRuTeDi8HPVcuHk8wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAOQALAAAAAARABEAAAj/AMkJFDjoWB5yFloJwjCw IblGqgg1mwVjCjI8yxwuIHctiRUQBTRFsAEKSEMwnMLI0pXl1JdqrFJZSzbwTiIl NSS8esaoCBs1HvSgaIKAXIxCXmRIGXAoHI1OLHY9KQNOwIFMlbCFUoEjgDQtVbYR ceZG0a0uCmIRoEQiyCM6Y2Ah8eToh4MjAk0wQ1QsRa8KxMRIqsPgQYk95Ca4CPbm E7VA0HiNGgcH0AhhAJYsioSG1AkN02YAu3LhxipLVGilkbNJRIYtaxpE6+OnBxYf hkpxYULu1zAd3TrE+dMm244EZL5t8AVhoLJcUCbhMvDigzEOkMzwaeiEQogcQ85E HrnUQptDgTy8GcFkSlwtV3OEnBcoihsqWwJX2HEYEAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=icon4.gif Content-Type: image/gif; name=icon4.gif Content-Location: http://forum.qip.ru/images/icons/icon4.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAJEDAGN6MmtrAP///////yH5BAEAAAMALAAAAAAQABAAAAIwnI9p we2+hJxUhkgBqHeEqnHYFFLdl23mKJXTCaovW81eLN5pjtar7rM9hg2FEVEAADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=0.png Content-Type: image/png; name=0.png Content-Location: http://forum.qip.ru/attachment.php?attachmentid=17492&stc=1&thumb=1&d=1267474795 Content-Transfer-Encoding: Base64 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 x8PCwkQiUWBgYHNzs0aj8fHxCQwMLC4ufu6550wmE43WNRd0sR911aM0jN7eruGw 2aTRKBQKvT09YmNjV65cGRUVVVFR8ccff2RnZxMEUVdXx+PxpFIpm82ePHmyQCDI ysratm3b6tWrx40bN3v27NWrV69cuXLmzJnOPWrlPStzRaNNkmZxvfD8mV+PHfra odo0Gg1CSCqV1tbWWser1WpLmCAIFzXa0Y8iF/pRG48SalVUdPStJjbDH7WoKX9e 15BmriwOhwMA/v7+/v7d5itcLtcSZrPZYGcuehS3juvqNi0Tva50FAA8am6eNTKo WCRtEFYJBAK5XG7J+ty5c/YQrpjN6Iq6T1B6rVFvHqfkYQtF6vfm3E+MDrxXVFQj enTq1KmQkJDKysrS0tIpU6Z8++23cXFxs2fP/uCDD/bv379y5cqioiJ/f//c3Fw6 ne7l5TVp0iShUBgSErJp0yYbsn7TqE7RzJ6yM/NIXvqGkyqtUaVoQQiVlZXV1NRY lJeTkyOTyXbu3KnT6VQqVXV1dUlJiUAgqK+vb2trQwiVl5drtVqFQuGqRq3GeitQ A0WQVCco0hiQNahcUuewDfXRqE6zibc0psZO0F5o9LNjpTfK27MKJAfPPgCwnSZf uHDBEi4pKQGX7Yk0Cj1qlEnDgwYE+XvzpARj2LDAn48dunm7pLa2dsSIEUKhcOvW rUOHDr127dqFCxcSExNv3bqVnJzc3NwcGhr666+/BgcHDxo0qKCgICAg4F//+pdN zi5qtNukxMkCoM5EqWRiZTAtgEcSksbhI0bPevOdI0eOcDiccePGBQUFHT58OCQk JCUlhcFgmCcrEokkLi5u0aJFSUlJRqPR3d3dPMW296gNt8ORCcA1jTZJmv+7GnV1 rAem96X9L15vSWOqChctnBOUOM/eN04M9fmdydV+lMtlKDWmf27KkLS0uDX+9s33 v9y68TudTp86dWpbW9u8efMGDRr0yy+/8Pn8yMjIvLy8hIQEOp0eGBh47969VatW PeEM/wlGJkDwUNR4/Jry8NGsdkqfkDDw0KFDTCbz/v37NTU1ADB//nw+n5+fn19Z WalQKBISEjw9PTUajbkHMFeoQ1AXWz2AixqVqR8V/yi6urYoeynRJvkLa1TbGpz0 1skSeGO8Q788xp6eRpkMBABZlwuEJ46t/3xvdnZ2dXW1n5/fxIkTeTyewWA4duxY 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 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=1.png Content-Type: image/png; name=1.png Content-Location: http://forum.qip.ru/attachment.php?attachmentid=17493&stc=1&thumb=1&d=1267474795 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAGYAAABUCAIAAAD/D9WTAAAgAElEQVR4nO18eXhe R3nvb2bOnPMt+iRLsiTLkuU9tuUlNnHIHifOvpCFJYQlkDRQaG/heYAQ1hYKTdtb KNCy9N5LuaW0FEKhEBIIJCFNUifEju3EsR3bsbVEmy1LsqRvPefMdv84y3c+SV5S oPQ+D+8f0pw5M++Zec87v3eZOR/wO3qVRAAYo7c9tSuTSQFQBlrr3/ao/kuJUmgN rbRSBgSUEq2MkAqAxS3i1CkGrWGMWdyeW7Go3QLwswefymQaRsdcDbTPywljua4E XCFqWHNupVMZyqjneVJWZtz9/5c4RzHvZZvtulwdB44cHl6xYmFbW5MGJoUefHz7 2k7ftWw+OvnzlzoAWADg+Vvuu//Br73n9j//t2++cc227ds3bbrw7LPPVlpLJZRQ jDEAlsX++Z++3rloUS7XdN55l/i+q7W2LGZZXBkjPA+UuuXyZHHSK7q/XSm8KrIs Nnzs+Nsvvta2bM5Zf//owoXNL+/vLbvu+msvmXjgfufmi4/379/k6YpejUBkXYvm 49jgja9ZsnXN/Io71tHRdP/9X/nhvzm7nt95wbkXgrOGXMPff/0r+/YP/fzn3z9w YP9H7v3kffd9cOPGzcYY1y0dOHCgUqm8748++OWv/fXF5132F5/7m4n81OyRccD/ zczZBn4VjeeAnaGHe4eGjw50r14jjdHatHU2LupcdOhE0WpsOLFn74YvfXVw7VkL PnAlApHNX9DctLbj7Lff9+KLfT/e/eXRidKG9WtWrVq9ffuOrq6uNd2rR4+NXbbl wrXdHffcc09X1+J1G87efO7m7u5VjpMG9LO7nksx67LLr7jhhqs8T6xZ1Q60xwMy v6pAfuNEgOlS8cEHXnzx+f2FaZty4nv+9LRbqRyp5FrnZ7hdLI1csnWysXX94uag PbY9uevs1csyNiu7YrRQcj1lMU4Zo5RoqYRSlFJCYJTmjk0IVUpRQGptjGGEcO5o aOH7BlBKuG5JeAAglKCEaKjfrkROS5TSTCb1owefTmXTQojFC+fnGtKTk2VKYNXV 1dt04KdPsFzWncpv/uC7tqzpIgA+8pE/33xOZyYzTwjPGHNGFpNSRhhjVCmp1FxC odQtuTfdckO5oLljaW2UUAAoMYxzaCgttdagFBqg2hhAARQgYIQyxpTRWhtAm2A4 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 n5iYGhk5foac4y7DI8f1KbswxnKZesaqbamjko0AAAchSURBVJKurEp88xNoKSIj FlBsIhNIlozho9porUYVAsxhpULlxd4TFqdvuORsV6oAbuMDS9AwREHDEMIpNcFJ dwalYDNGKBVKaa2htTZhLtAo5QkhpQw82vpcXX0ufCCPoyNSTWQEeTMkktL1ubrm XM3HFLwmZV0lz5tzhwk03HOJTSIQnI8HQq2pegHJmtosBmphD4DFucWsnS8PvOvW DTuOyG9/+59WrdvAmJXJpMfHJ1pa2rTWPT0vX3vtdY8/8cS67jU7d+/sXNjZ3Nz6 /PO7N206u/+VV14+dPDGG2/p7+9tbm6moC2tLc+/sLOpqaVjUYdUavaxYVEthGgR JDtENVEajlSYcCkGZizBKhE1AsaaO5Gtk3HpHHF2Vdvi7T8zs81cghNCOIzYlgPa 0tjklkrF733veydOnHDSTqlQWtDeeuRwLyG6s3Px//37r2/dunX16tWf+MRHQcmH PnDvT372s+3PPDM8Mjg4OKSUPHBg//jk5HVXX7N///5rrrqmq7OrxihUaYa9SpRn Nzdm1gxrehnUfG5adWUtKyulT8Jz1bFnmXAsY2iPTxCZmq24kH1iU6exMdPfd6yl dT5ldGBs8qWeo5TZb7nyXJZiM1BQA9JTUim3Uqmrr7c5AeB6yqLUsojruql0qmY2 GsWyWypOuxXDg1MDHByJb2+ir3REosAB8OAgJDi3BAQE5zwRh0Yf6vBYShwQsBy7 nC/09g1fFySypRS+WyEpLmWALiQ6DpkAGxpJOL4FH8rG7Hx82NhXyhb1vpPKHh05 6nCnweFbVnVooPfwYe8kQA5CKaAxXOvSBJV6LlX+LyJKKOOq+nVJV2fHWWu6AZF0 2H4dRAC70ckTMu/XyZRSrVH0Tc0xk988pVOpvoExBCJb0rXwI9/495bGxrLrna4j oIzCGRnyeQ31r7y4c+Wm104Vz+gzHq1VQp9P2iqdSvcPjnz2tvV5Nw5OZiUFZhUQ XQZkatsgGcXUVFZJSDk8OIxAZBTq3DWL33jhsjOZ2Kui9f/62Jc+2f1rZ/utx7Oc 8XAXIIHRpoqxYWmGHppZQkSE0kE5zhVGbaqiY4QwZiH6hgknpj0Ak9MznZK6Ov7z n/1iZGjo0suubG1tKZdLrustX75gdLQ8MNCbSqU2rF9RqED6c3gzjQ284ss52QJI pfjRkWM7dz7X2NC46ZxzRwaGV6xeViyWpqbyPT2Hrrv2sooH152b7fSUq5EOohJD DKk6DoG7E36YEG2N1X7FkfC/EyYoESRVW9XInES/QGABsBiEpF7RL5dmriCKrIJ5 4cVdI8dGjvT1HDl0qLW1de3addu3//LCCy/WWj/1VOdb3/qOOT8+aGxoYIwCKJfK s+9qlerr6+0f6GvY2PiVr37xB9/7l/MuuOjQoYPve9+Hfv7zB3/+yMN/+uk/n7Nj hqU9LSixYCSqB5qrk689p2SiVEIU94WeZJyQC12AOJdFIjHPXN1RoBmIjDpcOZZq TM8EKU7cm2+48sYtF7K6zOzRA4AyolJKzUY3rQFkUxxAoyNBZyIUY94VF2++YuuF AK654uJP/8lH41u3velGALJU4rPGA8BhIsUot6iJJBSfpYnP4CA+9paITsIPPcIj UomT0iTcUQoc9SidkGhgAAIdzcACYHHnqb0nfrlHRrkGUAJmgbMUCIkDFGYxTixC iC88IUX0lTIooYRSo6U2Egg+MaLa6Lps/i3Xd7//q0emJsunxnQKgMCq9dXC9FW1 BSiCc5qWa9w/urWpjXqKRk6OhiQIpGiCShP8IpKGjjQn+A0AGimWAmHQCsHPDQWF 4BS/ZqBxDQAFw5BJOY4TYVnP4Oil6VLKofEYKbMGjx3z82JgqG/jqqU20W6pdPjo 0WOjU3WZ1Pz5beecf97YsbF8Pr+wfeHoxOj4sfElS5dksunjx8fq6uryU1NOOt2Q bpo8OPXatn60ne4Tf0I9X1REFTg4JQbgFg1yfkIKCuZrlba5htY+/eSnntYyhK2y L9K2lXY4gIonfGUsCiEUANvmlKLsiozNQVF2RVMurbU+jVme870SavTcaYjf0e/o d/Rbp5rFOSMpkMxPJlPAsy9nUzKVfDLOM9qcCZ85Oc/oftqxzRjPbD7JrPppRniy 304zxiRvzbg8NZ/ZLaMj8adqczI+p645NbfTcq7msk45wpmWw0SUrDm1fs1mfWqt mZ2ePxnNbnMm+hhf/mq/nndmzz3FO5w9oNmXZzLo/9zETtFrTo042bDnZJjkMPvv q6BXJbJXNbhTtznzu7MX1Kt64oz1dAqRzXjE6V26uMOvUc/PnM4Ey8kcHxGdnkhE p2U1o02NyOZsHfM9LUKdejnMxsSTcTtZl1P0mjHV3+jbrTn4OWOfec4OM+SS3NmO y2fC50zaoHbyp+Y8eySn5nwySvY9kxH+jn5Hv6P/DvT/AE/g0KbyLsfHAAAAAElF TkSuQmCC ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=2.png Content-Type: image/png; name=2.png Content-Location: http://forum.qip.ru/attachment.php?attachmentid=17494&stc=1&thumb=1&d=1267474795 Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAGYAAABUCAIAAAD/D9WTAAAeZ0lEQVR4nO18aXRd x3HmV933vo0PBAmAG0hwASluILVQ+24dSZSlyJbkTUfLyHbsjJ0ZWzMjH3smyfGi xJPkxBNPEh9HI4/H49iSPBkrlqlosRZLtjZKFklwAcBd4gISIJYHEHjbXbprftz9 vQeIEmknc47qSI/39a2u211d9XVV9X0A3qd3SQRgd8+enTv3pVMpQXAZrPlfelS/ a1KsXYcBCEnQXLZcg1iaZqop/9qW3lw+nU2bwplsnWV87g8+bwB4+8DRlavWHR8Y AzCvJW+kso6rqtWq67pxuYZh5nI5KaXj2PV3/38m12F0tLdooP/40Oym3PKzOpTS Lokdv97y9WsWVJpmZQtjfc1Xb+l+DoABIJ2WX/reM53rlo1Pllfkc/rwK21zFn/w w7fZlqWZtdZCCK21Ic0nHv+pq935c+dfc80HK1ZFMwsiw0yzVo7rCKJypTIxPlos V/+ltfAuiLVeuGDO8iWLNOvJiZJh0GD/4ODxoQ03XF56fBNd3v720SNnZ/NDulBp BTyVrVhxliF33ntjV9XFr39z8ED3wNjk+Hdv+stLL73ihRee+4PPfP6HP/pfy5at uO66jdu3b/v5Y//34x+9Y9Omh44cObp8+VnVcvHg2wcHBwf/6I++dv/9f3zTB2/5 b3/796Pj4zXDMgH7tzbnFOCcRncTGD5ZfmzTU8vPWjE8fPKsFXNyWVqz7vLe4bF8 e9uRJ399yaYn+y45f+5/uHrP5CA8LDuw59BTO/v//Me/mCyXX3jgK0tzamCkMG/e 3ImJiX379t588+/19e3NZbOzZrce2L+3Wq6sWLXm+In+fHZGU1M+m8319fVYlnPx xRcfP358dHTk4osvPEOq+N3R9//hV+ODI5l8aqKsPn3XVccHh7Rmbmnj//PQzK2v uz27nUXty+7/s+91b/sv9/4hAdi997B0qvNbZyvmsZPloq0YAgQpJADHcSAgIAAt pSkkacWA1hrMTATDMAB2XcWAct1qteg4AFCuljNmhpgh/JH9VrcVjfA5/lePRF0L kpwzZmS6t+8vW7YgYabk6hWLDh09IaWgVGrB4vaDm56RM5vV+Pil9372+X966Ev3 fsEAMFG0n/3nhztXrLAr1YniJIhTqZRSbNtV00gZpnQd5bh2/DqVyqRShnKV7Tgp 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 EICUhpFf1G7onjdeO3bkrf7jgy/9+oWvf+NrRHTO+nNaW2cPD4/u7NmxvuvcH/3o f/f07jp86Mi+tw7091/59tsHe/r6+o8cue++P37huecfffSnX/7yf166dNm1G3// rjvuOjk+9tOf/dN5Z5+9Y9eOtw4c/JM/+eorL/3qx488JIW87ZbbHnnoofkd7R+4 8prvfe+B667buGjR4vHx0e8+8N3ZzbML4yOzm1vNjHn7x27f0bNz3bouEFPdfAgM A7AS7Xhz5/6trzy7dFlXT8+WJUuW/eyxn61auepbf/2tBx948IEHvrtixcrt27f9 4AcPHziw58rLrrA9O084O+paGECxVFmydO5bB443NzdlDGN4srzzrUGAbrl8PaQh DOk47szmHAAouEpDC8UOiErlUktLMxiuBcuuCGlmUgYA27ZIpKSBSqniKCeXyxMx mEACrKQhAapWygBlshkBUuDxyfG25tmu0pKEYq0VF8YL8+fPCUftWtqyq7blVqsl 29/fE7PwJmhZdVhmW+4NN1x9xRUXEsnbbrtVGuLr3/gqgLvuvgOAq1EtFRcumqeV A+VZbGTAANUrzAxjQoBNKIF8NtMxexaQklJW3KptMWlVsctSStaAVwy2FQxDCoyM jDEgwJbrkEMyY5oEJQTrklLaEFCAKk4oKCgCXCIBwGUtSEopHHYNGFXHUq46URhh xYLAQhow8vl8pWKVqtVieQJuaErEUbDhTY+j4RumZUVmZgDQDmTKHBoanZiYmMLp 3jW5DqRM+c91kMqJF7sP33zdvG+9+YT90nlGnnNNTSuWdR492t/ffySfb2pvX9Db 23vLLR/atauvXCzLlMxn8zt7d15/3fVs8p6DB+xymZlt277u2us2v7x5cefiYrGs tdPc3JxOZ8vl8tDQiTWr1/xm228Wzu84cuRQ99Yt/+7ff3GwUACETMmZufzWbVvb WlvHx8efeuqpa675wIUXXVxxKz5iEYPBxAnUCtTpJMtxvjEIQjY7o1ypgKPImMn7 BxwP9UJrIjDXumU8KDQNeHmsCQKoKTfje4UH7rvyL//xf/ywZ/e2klW68rKrHn/8 57d+5KObNj3W0tbW09PT3b11+/Ydq85aeejYkf379/3tt79z440f/MpXvvLQwz9e sGDBNR+4dvPmV75x/1ddW1911VWP//PP77z77scf+/nadesq1dLhQ4f/+lv/fcsb bzy878eZTKY5P/Pffv4zB/YeWNy5dHxsbNXK1UbKvPXGmw4dObJ1+9Z77vkkgcAU B2BqiC9AzY5JAN7Yun/rG8/decenxsZGYxoIKR6+1NxtEOnFqaUtd+jg4MzmlpSB 0UnrwNsnLeXc+oHVMpMFhPbPZTQgpIQQpDWEAAAhAQXLYU/pXibkOMpMG3GXj49C K1SrNoCUmRIECIhYDUgr2LbSmvft61u37uyJ8YmJ0gSYw/if2f9MTtbTmWEXS7VY BgBQoWEFI+F4AQXR1huZb4hlgZF5DEE8qCEA1paGmDc7u7gt70AXJifs0QJgmnAc wAR5u7gJE3AckAkAHNxC8DVa/pDB6+XAMQEky9lBXwPRU5A2jAVz5w0ODrmuFRMF hxmAwYYDxwQDUWBhAsxssa5L5P35h+rgqInrGkNm8nCSffwMVy3gZ9b55ibHKjmO WUbJOZ0S/Zmg0nvt2NrWUjzmV7fiKpNc63rMDIo1xkzMUxFCPYe32AfAkGhOa8ux EbdrWc51/HqshirbslRVjl+GlX7pNCLVuLY63V1MwXCaogCtpJRhJTxSmZQIKiCh b8a/1zY2QrEGuMZalYaHvvSj7PnLRdXCjByNneSxKs5fQp+4nE+OW/hXV1KsJ26a kQ9LjDEr043Zo351Kmm4TcSJSEyeLC1ZPPe7n7MKo3xonC/spF1HuCmLokW5nHDZ nKrvKU2lUS8GyAhunXKyN6UowEilShOT4RlLTGXTrzZzVEkKaJoqSpyKVbspS+0r shsMyewuaCVH6apjT5TeuW+cDMOoSXgb9vI0Re9yEaYUBbgNS4wAotMXD5kogDAm TiZfYe7VIIZp9HDXhWHIn77YJw17qCpvPndZJp3qWLxotgMhfelaQxrBAzVsx7Us J51OpVISXhii0L1zx4bzzwGgbG07WhjkhQdEZKb8BXcdtqyqYqSFmc4YtTDlMVQs M22m0hKAVXEkGUaGtPKDElYoVyrFiVLVrjY0vkhlSqpo+gF6MUDEADGxh+zkbwLB ZhAIJKJgOyCOBPgkSZAQd33ouhLw7fu/+fQzT11+2ZVHjhxet/7sF375y5UrVyzp XLGze0t//7FLLrls9+7dq1evvueeex588MGhocH29oWlUimXy5133oY/+69/2jan 7Xj/sU/e86m+vt7fvPnGXXd/8vlnnykUxgYHjy0/a2XLrJZly5Z0dq7q7d35yisv t7W17tmz55Zbbn3yqSfnz1tAkua0zvnoHXdsfuWlV196pVg8ee+9/2nHrh3PP//8 zTfdtGPHLtu25s2bn8lkvvkXf1GxK5F9xCgKZf/NnZ8a9UPZxvQe4Gb27Nyhg4PN LTOzKWPL/mMKcqSkrlszt3Xu3C1b3rzgggv7+vo6lnTs6dvT2tYqhZicPDljRtOs WbP6jx1bunjpoSOH8jNmjI4Wus7u2tO3Z07bnHnz5o0Oj1aqlbY5baZpbt365iWX XGZZTm/frtWrVgNQSqWM1N69favWrCuVJrXWIyOFrq41o8OjTc1Nvb17zz577Ztv vF4onLz6mqvSpjlSGFOuSqVTra2tR48etazqwoULe3v71q9fXywWw4lY1SgtJwDb d+7f/Opzd9/1qdHRUW7kZDy1whq6Zthx9uzcobcHZ7bNhItMypBSAFAutIRBkr3i HJNhCA8VDCaXmLR2mQEIJjKEBLTWGgCzq7VfyHRcKQWRZFYMGFJqDZeV1FoJISAI mgUMkhrQrLQDYQpJAENISUSuUq5SAgALKbXjIJWSfmnXZdupxqcWV5kBoG8PhPCx jPy8nsOIw8/0Q/xCTHeha9afLoQq1jBYkqEs7RpWGFUHB6smwYFlAo5/GOt/emQC 1eAiyAOUBZiAC0Vgh8n08mYGAJMUAIuVSXCBZM1OVeB4oiq+KDhQJuCF/C4rIjj+ rMgkAOQwTDKEYVWTlYy1q7H5VSj4aba39mFWHxhaqJm4OfmYxcw+xvnxf5DPs26a lS8Mj8oGmeFvmfQ7xQDvgtTMmc2TxbL3xQBgOWCGlIp80PY1E5qZ18LBPSTclEKG JOT7LEKI5pZmGCZcB4bJjuOtsAnT9a4dwPTvBnGUATiGCwcwDdP1GqPogmHAsxN2 HdMgBwYFYmNWSmdIlAnXzebSQDFSma9JFSU9MZUwJQyOmX0n5NCFvf3Ut7PYdkoR BrLrEAhuOGJy2CEv2yaw6wCA6xB7ohyQP28nbIwtFrlgdrwFdl0/Q2fHY3FiNcMz IsohkOtGgX4sYfKwKqassEJJFCiSQbU6RWBfgbvGhxTgX6C9sNbhB3qe/1LEz8RJ IQgaKZQf8wBvvUJRUY9g2U5flOcrse8xK0NQuAlS8NqtMKmTxFEUJ1tilUgOroNE PykkKaohZxxAKd4x0EjoCPGqKoWwepqikkduSFqZpKAsUaPsANgTWXtt9jRF/kTR RprQEkWfiY5Ud9HoOlHXo8BYOALbMywqXthIRv8UuIkHWZ4bMYUyOIhCouX0ipke blBiuEFZPci/4gXxEOvI36C9R3nP5GSBPCinx2LAWNkJ3pD9bZ5i5SoCcEZEcUJ3 NTkmJ62bwxosxVoo4YGRUYdnARRpy8O/IPqI1XTD/0MnYX+BOD6jAFEplIDYB8Ff htA2fBTgyANPXxSBWccy8NrQJTKgmP8HkJ+E+WAglNwWKLoftETCY+2R58ZgLz65 qCMTBzlubL39wYQQHhs2heM5bVFeS2P4T8zG56zBylptITbT5HQTnFx3Ef/akHOq jnEsjr8L0agjxZvfsyjvXryWGK/KSoo0H3mWT7UwHbJR8qKmHURU12V6UTUt0z+i hif+iPhTTkcUwT/i8imyOJWoytZPieLqj/CrMb//VWu3ZhIM4qSosL3+iXFR4ZFC zF3AtTzhrSl27/ciCgC8tzM9ilQm3ykjq9+q62f5jn0pfpoSR59Tk0DJOUW96oU0 BJH3Jir5PWZlKsaRtKgInNj/LwFX9egVfhV1LfH9dhqXqhFVJ7x2w6AQvqeldy/K /zfmgomEqRZngvnUqzxKH+NrUoMh9fAOb9uNh3kIktU6/mkxsLEXJWKLMyMqCOYi iu2YUsWcPaYq/9N7bzmYZZAWhk1BZJMYiIABcoOxkDeE6D6Fg2Ku3ShiFTuKaSE+ PMSzh0BVFF+NMyIKACjmLskcMzbiaN7BS6SI0rY4NHGwM4TembDp8CNaRt9Eg0MZ 9hcgbh/hVOE7SgJIYw7NCA+hI1E10fDpigK8FyXqVAbPyBJpdCNsCFIQfzEZvrMF 36l2vGG5xfdhimTEH5Fcr7ifcJhMIVQ9Bd6MsPgRacNHo7g+TkMUABY6QvqaFwwQ wlON/Sa8NAmNvqL9lLZuK2DfqGrAKsKxhPwYZwgrXlts96BYd6Lktd+LwoU5bVEg kG6Ylksg0nHM4MKpRwCWzP5DvdVtGwBcqmGq7V4ryp9O0r7jEUB0yOr7N0WLGXeA sO+ZEdWoxKhkvNJQC58xP6Q4eEXv7dUFqAx4Z0bh0JmCkXq7C7N3ShqwU+DdUQuS J8/+rhTONYR6v+zANetyJkSB4P0ctU5lUqloQwuHHhVAIuRCrFQRqTGavu8NsaPh iD08kfH2R0poMFyBsDgcTNX3IkLg//FCW/AZ4TfF+p62KG/sjbBM+RYQgo2vHuKw ghHAUaAL9sfjsySKunHkitY+EE+JLoFUJiSLZZH2w7fww1aOlU/DYk+S6wyJItAU aXncz+MTCbXA9XeDjSb6jC6C/SjScqxzbZU92LXCKC3+EJ8oFt0TEL2tW7dUEQyd GVFT1f5l7FWMGJSFlhHiQPS0AM3CyYe3wvcyanb0eNeEPfqvy/hPic+PYjoIRflA EVN8zF4DkzkToryhNbYyKBnqhMIdk6JugY+Hr/kHFejY7OOvKPlYlnglJjJ479Ur D0WCV8ij8cb3Zu8ieneafDiNmUYERgFDtI+cpiivWdQEGayhlQZ0bIuIPcyfcsyW KJx0jGo8jQCv+JNsoXBPT/aKTmriQmtOUxIXxIG0ZMgaDb1meO9NlP/rL5EMMrTC vJZccxNlgmPiM0KKkZuRVfaEKQ0EgbIKcEF7hQDyG/1rDSUgNVj4240iSO93s0GL C9hVt+wGlhFDeQQ+ThTuJskXv5JIEkD+dKJ8XbsAhDd2AwB0tX3Vpd95+lA1/IHd dET6VP74iUAukz2/xXljEJWKXYtkcQp8RGk1NVNEhpG6fEVuw4qOsvW7+6ND+Xzu 5P4jQhI8lUmhn9lx9Ku/f/0Zf9KaO7+9+5H7zrjYv/rJq+s62ioVN3ytoX5FosAG QHL7q+EJ47epRAEQQjjlIonAytJCuEoBmCzWss7IYni49Nrrr9x26w1TTcCyYdf9 QR8DyObhKm4oFkA2i2LROXbsRNfaRY3FVtHwd4xNebiuSkmBOvyM78BhHhamlHVn 1dwoiK0X5WEcQwgROSYghYRGqVQ/uRmPP71p4YKFl19xdXPzbNM0enfvuuSiy3p7 d23ceNMzzzz1tW9889prrq9UGnh0Np/33sFrJBZaz3j00X/M5XI/+MEDP/nJP6xe vXbt2vXbt2+xLOuyK6++6aYPXbjhEttu8BeqmnJ5ScTshd4BakUxZLAjRwG8v4cG 0M5hTdMLBDzsn0qUr8TaehkhlZZsVVNUO0R29K03Xt/W2sr6vt+76RYAxw73L1yy qDJZzjblvnzfFyfGx6Wu1HeEBpDP5gwABldF3cECKf2Jj3345Fjhzts/8ld/fn9h tDBnwVyrbJGgkZFhYjJQDMqTcUUDlmGkpYAJqOAFwuQWjzCyokRj8OQaNopU3EiU R6omxxSyWOFNr2YqNTE6vJAkbQJouuWxFwFXwWjHPgWkAQW0AC3WYZfrzkMBPecw 2mbN+OU2DA3m67diL9gx0bFlvwIIaEOPCqx+PqAtqLrhAEBOpITIz5idV6mU99rd VC/f1f/hJNGIof6znieXy2UyphAB/E+UrbbJ3Y8/9bKcel+Lj15A1GVA4a3YNdF/ vGTlo4/8qeaoqFn/BBH8I+vE1gRW3p/tsBz3irXLfvj9bbZyGwgUtWqCBkNoaQoh EwXpRkSAECSllKYpRHToJg2jUnZVeJxe0pwCjGnigDNNnmJU3YUGODjrYva/QvsM ntW5GmULrPy4yQZYAYAKzorsKmAGKbMEaaTSmH3ySHnSrvljAw3IxNjoiMXiwN7t UkauIQQAKpXKX/ziF86UEt6n9+l9OoOUALAaV4/n3WEdNc5W94pKA1F+Hl4neZpn 1YuqGUmN5Jq+9S3TDK+hnPD6nWc6FTqy/6ZcLc80/NPwnEpLw0c3lPyupE0vp2aO Uz23dtPlgOIt0y9avehTN5np5Z+KvTQcBup0fZoUH0ZtCFpjnPWDjvtUUGOihszv qL53NdDpqf7RU7nt9I87Ff7kz/FPQXpDn59KuVPxN5R2KlQPgg2FnOJETpG5Zu3f +adFcQ8/HZM5U9RwF3oPY2vI33BJahoTWNaQ26OpnhF2jMttCCKnb2LT9K2Z1RlE sXqqdcx3NNd6nnr3PBU5p0I1azC92LithZzv4enxvmdkFu/T+/Q+/Q7o/wGy6wya BPR00AAAAABJRU5ErkJggg== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=3.png Content-Type: image/png; name=3.png Content-Location: http://forum.qip.ru/attachment.php?attachmentid=17495&stc=1&thumb=1&d=1267474795 Content-Transfer-Encoding: Base64 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 DseyZcviiEx8kxffrlnDcsZCB8L9rVafkzTvmBFBMuNU2grNLKgEACEch6nTptTV 1T3//PPd3d2dnZ3V1dWjRo3ieb6oqEjXdUmSSktLlyxZ0tbWNmfOnHPnzjU1Namq 6vP5mpqaHnnkEZ/PV1BQUFZW5nA4Xn311YkTJ44YMcLlco0dO9Zms4mimJyczBhz uVwPP/zw1q1bq6urhw4d2tnZGb3VgWzf1VJ/j0nCAtWXODOS1qGD/HC3EC/N1n45 sjCneV7626d/s9lsW7dudTgc1dXVbW1t27dvF0Wxs7OzuLi4oqICQH5+fllZWWpq anp6+vz58xcvXkwIKSwslGW5oqLC7XZ/+OGHx48fv++++4YMGVJVVVVWVnbhwoWC goKPPvrI6XTW1ta2trampKQsXbq0oKDgnXfeSU9P9/l869ata29vb25u/uSTT+Jz YZDpTIOsuIzoepQhCDMolBIjCP/r08eoC5gFjiMM5NSpU16v9w9/+ENRUVFZWVlX V1dvb+8LL7wwb968devWjRo1asiQIS0tLQkJCd3d3RzHffjhh48//jjP82+88UZZ WVlVVVVNTc2xY8e6uroMcVu0aBGldNmyZYWFhQ0NDe3t7bt27aqpqXn99dc7OjpG jx795JNPpqSkJCcn19XV8Tw/fvz4yH0NQlUH5C/6pRiDpC8NYUG0gKXMYtT0ReLM ysb0VKfOSHJK30GJ1+vt6uoqKCiIvywALS0t+fn50fWffvrptGnTYg5paGgAUFRU 5Ha7jdQrgMuXLycnmwsw6k+dOjVixIjwKKNyINgRDTJ4ABMnTLnuumt5cDRklfoU NMyyfumJqPsQ5lefW2AgJMFh27Jt+9q1a95555329vb6+npBEFasWGGz2Z555pmK ior58+e3t7fb7fann356/fr18+fPX7BgQWlpaWNj47333jtjxox77rmnt7d30aJF CQkJGzdunDp16tatW996660zZ848/fTTkiSNHj160aJFmzdvvuGGGxYtWpScnDxm zJi1a9euXbv297///cWLFxcvXixJUm9vLyHk8ccfHzp06O7du1977bWdO3e+/fbb H3zwgSiKI0eORJSgGZ+6TmVZSXRIhCMn6s68u+5tC5QVHZqiwDTsJAxlQ+A2fGoJ kzswtNVIApmGzbxRIc45nYLkSElMlDo7Ozdv3rxw4cKGhgZd14uLi30+XyAQ4Dgu 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 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=rar.gif Content-Type: image/gif; name=rar.gif Content-Location: http://forum.qip.ru/images/attach/rar.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAQAOZzAPEZAYvK+SNfsPzUMfr1keTNg/T//4TD812l65a53/vnl/vd ZNOpHvrrs/3ZR/ziffvzzsfs/f3VOVyr9tSqIdWmFv//xHe09InJ94HA8mGz/7J7 I5C235vP9aptDfrprf/9pLTP9ojD88jY9nGc03W38M+hEHCv7mas7fvwvXu88bzl +/r2k6x0Hf/6kNm8L63b+biEKCFbrTt6xP//r/zkhdm/LPfvgv/7mv7TOHKx5qtt Df79mfr1kHa38NSpHv//udm/Kv/4hpCz3vrjj/zZWPn25d6+O/PkbdKgB3Wx5Pze bfjuyrR8DyhltnK7/26x7jqA0NWlC/vedNq6Ndm3KVam9NWmEJS332i3/9SpIPro oUmH0YKx3/bNLNu5MziZ89q0KtiuKP3aUZjC9Zi539SnG1uZ1yxqu9KmFNSjCNm3 MXi+/8+hDt61AbJ9DmGo6wRLsCdpx////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAHMALAAAAAAPABAAAAe4gHOCgwcZKiVQKHCCBW2O BXAGESswHSI+XHNtAJxtcp+gURNncSZhVUE2L2tfVEdNc11KcRQ8FkA0IDguQkhv cxwHcT8sRkwfRFNFOW6/CQFxDAQQDQoPCw4DzXPP0dPV19nbWNBaPSlbNUtjEl7b ZRhxaTdiZhVXUmpJ20M6cTEbdnhoAQoUiRMI4gwSFCmLhids2CCYsXAQHDROBAiQ obCiRziLPFqMCBJkx4psRoQgc8EKmDiBAAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=user_offline.gif Content-Type: image/gif; name=user_offline.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/user_offline.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAADddflZ9clW7eGSCgV+5eG1rdmWAgVJWZ0GJfKyqoVh1c1xZ TEZBNXd6i5CZqFvAdFy8daqllUNxcc7LwEBUY9HS3sPH0V3YflGef1K0dk2pe4OD ikiXel3BfYaGj2lpbMvL0efr+Ovr8mJ8flnSfejo8kubdebm737shE+ScrO1v1ac cLO0v+Pj7KH3rIfdk0VOWm5ufpaWnJC7q3l7iZ+fqIKAc0GAdoN+fmJiatXY6L/W 37bA0WfKetbX5dHX5GzOfa2wwa2uuW1qXsjI0l+wg6KnuX3+hz6Kf3L4hFxhaby9 y6jtvE+xeaWlqT5QY1O/fZutsoGTnjZbfUNEU9PX597f64aHkvDw9lmAc97l9MnK 2U9TZUKIfcTb5VV8cmW6fUNAQ02seEJQXtne7Nzd63L3ibGzwi0rP6j0t7O1xunp 9FSBcq2qo3N0fkWdhJmcrEymd9rZ2WjVdZSVoFGxe1KDcIafpVmpck6deKCwvEqk dzVVcMfT4tTV4Eacf46bqWzwjTp3iJajsFZ/cnl2aTt1f1WHcubq9k6td2trdaS+ wkKLfcvN1zYwKuPq95edqdnZ3re3vlGwdp+eptLS21eEcZGfrWzIe4+XqD9qeYuK jNDR3K3Zyle1dkhFOUtrbG94iKK7wLrO2o6RoDRoiMjEvszW5UhkaXeLlGhsflqI dZucqpGXqUhHUq2trdTX6PX1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAALEALAAAAAAPAA8AQAjfAGMJFPhDz51BFgYK3MEo QBsinCpsUQOnARUlTC7FelHKQIRXTmRs+MCAQhI+A/skMpHikCU7K+b84aFwVJw3 GFYpYNMhEAdIAr3k+TIBi4gWlVjQcRMG1REHsYAYyoLjCqlWgKQcGJNmikKBVRbN EKXj68BTeDRAIXFBgAQVCrVkEDTARqEhCz6BMoOgUaxHmAAkkBMJhKQaHnI4ItDE T6cuI0ydKLHGyhJWNFzBcJEqxB5NmygJORPESKZQaKL08BELkZgbhBQViKGKyxMU SMooJANmkicID+oUgTUwIAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=report.gif Content-Type: image/gif; name=report.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/report.gif Content-Transfer-Encoding: Base64 R0lGODlhFQARAPcAAOb05P////8AGf8AMfv7/P8AKP8AMv8yWjNDRzFCRhUpLf8A Ld/p3c0INP/E0OHp3P8qV/8rVcCboP+guPv6+/8JPRQoLf/v8sKgpCk8Qf/g597h 1dcALf8jUudHZL1da93k2P8CON3Nyd/X0P/H09/g1/8AHTRFSugmTDdITP93lPYF Nf+Opf+Wqf8GOf8aSJO3tKY+UeI9XP9dgN4BL/9ni//I0v++y/+2xf8tWf9qiV93 eN2KlPUAKtWPmNGHktfe1NmDjxMnLP8HOwQZHv8yW/8AHMYAJhQoLP8GOuRTbt7n 2//z9f9CaP8lVNTSy/v+/eJuf7tacAgcIeDm2//a4jhJTZzBveBJZrdjdf/D0f82 YP7+//+4xuoALOkwUv8AIv+rvJciOP/E0f8AMP4AKN7X0CY3O/8OPyE0OPj//72L k/9jg/8AL72Ejti7ueXy4xQnLLs1U/v7++Hp3f8HPv8mUdjIw+kbROVDX8y8uuTx 4v9Pcv+Hn8IVO9/i2ONnfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAVABEAQAjTAAEIHDgQiJgPcAgqJKin B58AARAgmROgiwkqCwX+QCEjyJsNGUMOdFOgD0QSAsyIBEGjA0SIZ4hweckmikiB WQq0uCFAxM2BGMroCJBmihotRkqIfOJly8sUQghAxAGGzsIYdapAZGJjQg0nLgbg GfETAIMjFQzkKTtwCYcXEIt8YbunAZoAOzIEOOChrJ8QGgIksAAlQAQlN+UMGAPx hAKpAewACillQZiXVuJQeJmDx8I1ZFi8DADjSoALDlQM+bNQgoEmMyAkabMCi487 DxYGBAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhRgAWAPf/AM7V0V6QYV2GYOLj43Gob9y2lcKjjanHrZaamLubh6+kpb7F weLr7LG5tO7FpGKXZODm56bEqJall4OrgouyjFuOYE5+WG6kbT5pUdDS0V5+YXTE en/IgNnb2oqqi7OVh4XJhMjJyWeHZ6mTkmmfaWuha8qsntCum2abZzVcT7TJuX2i foXTh+Xm5nexdXSdda+0sPr6+3GQc12XYF6kX3OlcpeAe5zgop2vn6yxrofVines ddTe29vf3YiHiZGIjJ/mqJPYlWxzblV7W+ns7UVzVO7w80t6VsmolWWTaKnAq2eX aJjfnWSlZFF5WcnQzHW5dIeXiny8esXQy5yonYzajzpjUEFuUrm7um2PbXjIfqKp pHR4eHqQfY7ckY/dkmqvaovTi6Stpu3t7XqcfLbAuURrU8PVy8nPy3q6eIemiaPn rF+PZFaHW8DHxHnAeauQfGSUZbzDvpWQk9DW1G+7cYXGhNTW1fDx8NDZ1sPJxmmX a8PMx/Lz81OEWvX19muda+K8m6TDp4Gbgubp6YTOhmJ/ZKi9qUt0VmGQZFCBWNvk 5LfNvHKKdYKjg4rYjHC+c7m/vW+acXWqc3Foa8DFwbigl4yujMXMyLS7ttDY1LzA v7a1taW4p73FwXmzeHfHfHPAdcrTzpTel9Ph3b/RxaG7pJrjoMbIyLvDvmiraKmu q3mheqO0pszW0f39/YubjdXa2FiDXaC6onmMe/39//v7+/P19czRzm20bmOQZV+M Y1mMXVl+Xv////7+/qS2p+Xs72WaZmSwZv7+/2SZZaCyo6S5psfOy3+/fGeTaI23 jfj5+a3IseDh4meVa2iVa3zFfHiYedWxikVkUofOhtbi3z9iUGWPZ0htVGFYW02M VnbGe3bHfe/v8G1pbNba2NLZ1Zfbm8HKxcPJyJCykIiyh4K5gI/VkGm1a6Cios6x painpqiLfod5fs3Qzn61e1aUW+nr6uvr7Ovt7kqCVoHMgrnCvv79/lNtWWlgY6W7 p47XjZDWkmmcaefu8SH5BAEAAP8ALAAAAABGABYAQAj/AP/9C8Yj07sQcipVwpKp QY5VOWA04BGsoigYbvJACCawo8ePIEOKDBmsmCowAcARcqPHE7JUetDg6+AuUCAk CbjIukCBwqc3UJYtO/eGg1EOIJJWqxamKbp+QYKIE8fkhtWr4oKEqRYNSi5VTWhs Y2StQjEUxTS8opcnz5Q5CHLM80XXlzcBFy6oqcvXFxW6HuLs9ZXI3zFfmuKwAUC3 ByFfrQI4oiuLFw66fZ74enLNCpmOPLb46tGhg7PTY+b1oWsrCqUEgQx8sCEkiqkD zZod2M27d4TfvwUJH05cEPDdzRidIcVRoIoZJC7E+duHiDM6T8bNgYtqDDNpk+Dt /xisxsUeup0E0B3Uqq4AbJcBCFBGRoOhLi0g7xpEt9ceVgIM0YUcvgCgyBHZCFTK M22Y0QBdeGTQAxpi0JLPNRiagcgRFnTYoSIghujhiEeUWGIRKKaY4hUsttgiBhhY YcUuDHjkSia+qAPDFqtgwRcxvrSQCgML6PPBNAnA4UMZi4zk5JNQkkLDMAH8Qkgk ZWCCzD0LuPEEMs7M8YElXBgiwh5gRMOCDjo84mYVVXghp5xf1GmnnXN6UcUjbOrA QiH2cKDFBqFAUkc6w1DwTykzqELAA2XEoMcCC3gSCx2xcDKCAyaMwAVeO3gA2Cf+ 0HVMCeWU84kLO1BwyQSXeP8gqwevKqHEIbPUMEE5l/R6STkTzHLIPsdI8sAM9QjA SAAolLAELb5AQAcdfLyFAAwLoIGFLZXs4cIkgw3ij3q+GDNEXT10QRc2JbQHgDIv 0IWDBrhAtsRkvuwSx2OZGCLBZmZggMg/pjwgTDFD3EHXL1jAcMdqfUmQCAkklGBx CdJp4ssx/hDg8ccg51UCCWg98EAAFfDShh8WHIEiizDCaAUGNQrkSiW+xEBMLbX8 0leQUwzEhzZwjKBOGXnUDOXSTHeUxyq+QKSOG1uIgUYOqND1RwMLvFaAAXDY4IMn EDRtNpRnlCBCX7Ywc0sffczzhzfffHBTAu0YMkMd3Gj/4bffoGgByuDdcMMNKBsk rvjijDdOaB25mNNROcMMw4s3A+jhRiqRbBILH+PwwY4NDnw9giFNQFEUB4FyUAib YfDjxRej1M4EE6ecAsTua/TuOxBr7H7KKPwUEk0ohw5DQzwM8NAoGDPo0YcbyGhO DjKRyDMHEg6cYIBOJFxCFwVQXECXEi6kkYYUySSjvhTwx9++FOsnkxQIduSfv/su EKAKWMhawXNKQIA4iOEXMfCZz4L0g3UogBMh0EANVjUYD7hgCejRBV0usQSNIeZn 4SBCOB5zC2D87BB/CEcPAMOLIyBCBQGIThxg4YtYIAMXfEBDJnyQA2fEgBm+kMAF /z4BLrqoYQfKoAswyPWXevlCGTUwIQAAcQEcPKYuwADEYKC4ghXWRRSIKEI2zlAB YZCgGIbwBRGmNYUG+GALGfDGK+jSAV1M4gL4yoQxLuMLXKjLF33IAn/y5Q9jFCgR gzGEBvJjjEQMUhbkggU1FuALNFwDA734xx7OIoxejMEIPIDAHX4QggHMkS8iaBYK diGAVgrACZrBQS92sQRArJINFVvCLibmj11IQxqyCGYFAsALJzjBD35ARC9kgCEZ WSEFKvjHIipgMifgzBfzUEcGWmALutADAMBoRC8C8IBiCAMFKKCYMNgggMJQjGTo PFgxTHaylK1MES1zWRFgJkwzGaXgnyv4iDU6AYMMbKELjWiEDKRBhhWswBEOZQUr XkBRikriohfdg0ahwdFnJOGjukhEIthA0pKyYRcoTekuSqqLZ7zAA4zoSEAAADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=multiquote_off.gif Content-Type: image/gif; name=multiquote_off.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/multiquote_off.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPcAAIWThrm8urjBuzdiQmeYZFRSU2OrXr7Av56xnWiQZHalckpK SktSTPn6+1pnWubr6NDV0YCjftbW15TKj6+2sM7W0ens62+karjovcjKycbRyfb7 +/T19LfBumSUYHGqbLW4tqitqunq68PNxcXGxcLIxIaohGWOY2udZsrTzePo5cbO yLW9t4KlgGy2Zmy4ZvHy8i4uLnG1aubo53Cta8rr0StZPM3Y0PX6+wAAAPLy8pec mUBvR+jo6YWngmJiYtHY0s7U0HGnaRMUFMXKyMDLwUh9Tb7EwbvFvv3//hscG9/j 4tzh3tXj2tXd2dLZ1WWXYS9aPrTLtqSppgsLCzQ3NmCTXSMjI/////j8/Nfd2pTG j9bc2M7Rz////tnc29/h4PL09NHb0sbXybvAvcHEwtXf2rfZuFl4WLf3veLp5v/+ /ovXhVqOV8jVzO719LS/uIaOiK/DsO3w8H6jfKK3o9nd3IOvgLTSt3+af2uWaLzG v3eqcYG4esjPy8vQzrPRtbXTts7V0dDh1ePu6dfc1+/y8VlYWRkXF322eKCkobjL t7nUuvz6+6fqqL/WwvXx8v38/Mzh0PP09fz8/WN6Y6awp660sMbPybnfu5W8kc/U 0dX33pylntHY1IzBh1ZbWHOebW+iaY6dj7jEufb4+ImEiJfIk5u/maHKn8rZzODi 4W2DbYOIg+H16YmLif38/drh3bO+tPT++Onx7/79/evy8O3z8n+ie7TdtbvNvOT6 7L7HwYyfi4fQgWptavr6+maxYfj5+b7hwvr6+bPMtbbNtcbJyYC3e2+panCVbtrc 2l9oX3LBb0FEQoO4fqbToqHbntDX0srSyrvPvsDVwnmceMzQ0IGZgcfNysHPw42T jsTSyCUnJykoKZKxkd7l4pG8jn++eWidY5axlsjQysrRzLLQtG+bbKyvrdPa1MzV 0NXZ1tLc09ve3WKoXXW6b0NzSd/l4TY/OmCQXmybaKS9o8ny0V9fX/L08/H09Dpn Q3OlbWenYWqoZfX6+yH5BAEAAP8ALAAAAAAZABYAAAj/AP/9u7SsC4kDBwKAKPMF wpcjim5tyJJlg8CL/0Jg2chxYwEqPzZqYUeFCogNODBewtJqx7YdcbAUyEETEZYu NGmms3iRCJYQIaZUYJEhJ80AB4zmyIIRCRYRYHrMgYElhtEfhZSqSfnv04taHTfm Q5RjSI4CrirloEIzlS+BL4IJW2OuQ4lyHdQt0bcqhylJjjDMqpIjU7NHhFwYyBdp U7Yj0o6pKGLrVQ5Iqtik2ZVDCQYXqAbJMPDAyx8u14KUAGIHS44rWIDA4zQqB4Jo 7+5Uk/FODBYkK4L4IcIEy4IcOrDM2MIoh7N74vwpKEajny4smATI6vAkCYMcGTgi /3hdY0IiGugCCfFnDwuljt5ySMAiDAuJHFXK90H2Qc85Ucl8gwUwFjygwgOgkBFL B+5gIYEDw+RyyjOJ8JMAICh8gAsWKcDhyRNMJOEEFxvV10443bCyBR8onIBHhqFg YcEIe2iwzhLSQMCCAFNstEgOAEBzgRUnSIGCEPV4EUYKntyggRYriDAJLMYd8ksO FBijiQcnjDHOBQQQU8oNTpjhhiC8ULXRcUZ5o4AyTYwjihUcCMMNOIY0EBZH+ORA CjMMEGANLQSg0IYKeyaKyBBnKEAAD+T8AwUURkyT6EaNzDBCHfM44MEA+0RBzT8R GGGDHB1xIE8RvaAxQBQ27CYDBT3x8GDrGwI1IYUlPQTQCQDY5NFCBD6YYIIPw9IR QQsmaPNPQAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=quickreply.gif Content-Type: image/gif; name=quickreply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quickreply.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPf/AHuUgml5asXTzKKmpYB8f2yzbVVNUZahmDhbTlt+YcXLyOO8 k12EZUJtUq61r6eIeK+4sJSblq+yt42pk0hjU+7t7snPzdzi4ompjsunjNLY1nGu b2SsZmWYZuXm5ztjUIG7fnSEdcXMyc7U0ouLi/7TqrzCv8XIx87O1d3e3uzEm8vS z6eKiLWVg4GLg/39/bi4ueLl5luVXsHGxHq6eHacfL7FwfT19WOAZLzDwFqCXtbZ 2XS7dObo6GmeaeLj4rK2tll6XI6fjlmLXtrd3c7Ozvr6+ruajMqpl3N8duvt7lF7 WXyhgmuTckt6VkVyVO/w8YqEhoGkhm2ibHGpcNLZ2G6qbdXW1amqrWObZcPKx8DI xaesq2KMZH22e3iffj9qUVKDWmqgaqKfn4PFgXSHfdXV3IWniZOXlc/T04WAhGOY ZG6lbfj4+fP09fHy8+Lj5H+3fXatc8vR0MPJyL2/v/////7+/sfPzV2RYPT0/nuy eWyia/Pz/c/W1KSop+Dg6f79/5GZmXpwdpaSlcDAyHaWfunp8urq9Ozs9vv7+3+4 fIx6gGOQZGGWZNnc5m6hbW+ibeXq7mGiYuO/of7//v7////+/+7Go/PLp6W3rKG6 pp+BdMHGwm2icLCMcMrV0b+cftDU1KGfpOjp6WmrZ+vr7IKShICfhYuWjOrv87+g hFWJW4aoi3ONc6a8rbbJvPDw+vb3+MjLypuzoMjNy7yagsuwnXqKfWiLcXaYdubm 79HQ0K2vs7vEwJOOj7/Ax5mRk62wr7m7vry7u5V6b7+/x6qclKybmtKumbe6u7W6 tu/u8OPj7OPm52KKamCYYmacZ66QfHmwd3y4eoC+fvn6/MWjimZgYs2ojHisdXyz eo6bkKqqqPLz86qtrrCxs5OwmLKztLe0tNXc28DBwJmbm9Gwnt23mnCjb/Dw8PDx 8vHz8WBXXHardHWsdF53YcfKzpGSl/j4+sOfhMGekcbGztG0pa3AsmWSZtnZ4oGE id3d5vL082+gb/X1/yH5BAEAAP8ALAAAAAAZABYAQAj/AP/tEgdH1KwTJ+rAUCZO GLg6w/jp+dfHTC97+hBtKgBthJ1ZaeiIMKFghh1SgzBRQnIkRDoyPDjUoCWGjw47 blZoAEUIzYAedoIGDdJhTZ4hTnL9SyTIjik4HqAwq3CjjSKhuNplUHGtBad9xs5Q iRTCjixnHqqk0fLLBYly6l640hYnjpdtbBL8a/IEQaqgFXhdWcYtAAUEiD+AacAY zAdV/5oNsIOGywBhf4RqBhYLhQF6C0J9inKhgAw787TMEDHCxhYbc7YQIcHiVpIE XTpM4vAKw4ZoB+zM8KWlVooLRIixKHEOWYBGcqpVo2HlGQY+6XDYibFihR8/wXxy /8nxzU6nfO+oUOGTJ4GAaNF0aAj6YtyAIhU0BxWyxMkTxxP8AwgWdnhjhyV23KFf UChQZIYB0hwzSiH/HEKgMMKYs8IAEcxwgAlCSRCPARkssIo0xcjzjyenCVXJHYrc sM46PbzRBjZHqJCNLQ8kwMojsJjGzg0KWGCDAuXEkEYtInTDSAnoZNCCLjTEhEE4 BWQBgR0W7KDBHAqMAIQSUSCRSTL1JNEINWTQUEoTrWzgwyl2vBCUggUycs8YxFyR gDuLgACCF1YwcAYbkGhXxRYj4KHBCQT8kYIi/dhxgD977DHNO9EkMAEfU9ykBB5V kKOFGhHMwswlQbmhwxR8+FewRhgM4OODGDpAYU0VzpCiRjkp2KkZDkMMEYYTDRgi iSOOLOFAUD+MUcQPRgQViAXcwNPYBx8ggM8/egigSQREROBCGWUAoC4qUjDBxBdf 1ACvFAL8ExAAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=icon1.gif Content-Type: image/gif; name=icon1.gif Content-Location: http://forum.qip.ru/images/icons/icon1.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAKIEAJTWAJStUmtrAP///////wAAAAAAAAAAACH5BAEAAAQALAAA AAAQABAAAAM1SLrcTiI+J4B4MUerpRggmIUiRJ7k9Q1B67JBuaKnCr5uK9OoDeO6 gY8XGhKFkI4yM2k6HQkAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename*0*=utf-8''%D0%B1%D0%B0%D0%B3%20%D1%81%20%D0; filename*1*=%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8.JPG Content-Type: image/jpeg; name*0*=utf-8''%D0%B1%D0%B0%D0%B3%20%D1%81%20%D0; name*1*=%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8.JPG Content-Location: http://forum.qip.ru/attachment.php?attachmentid=17529&stc=1&thumb=1&d=1267759711 Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUgBmAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A5vwl8P7jWfClheJ4Xa7EpZ/tcdzGC6cKF2seMFX5+nBraHwn uAwP/CJ35AKHBuLXnld449RvA+o96634cWkd18NPDyy6JFfp9nlzLLJGAv75/lw3 Pv6dPTjphpdsIyv/AAiloFYruVZYc8ZHHHYE9x1PrXe81q05OCjGyb79/wDEc6w0 Ze829fT/ACPLv+FUOZgT4R1JYzklRdWuRyehPtjn1zVKX4T6oXXyPDMqrgA+bLbs d3fkMMCvY4rCCO4inj8M20cwckSeZDlOAQ2cE43EgY5GAcVoWtzeSXCCfTmt4+Dv Nyj4Pphacc6rxd1CP3P/AOSCWDhJWu/w/wAjwr/hUmt7d3/COptzjPnW3XOMf6z1 4p3/AAqHXv8AoWh/39t//i69cfTbUXflzaV4U2vJmTeoEjZ284Kfex7+lImj6Szw ifR/CXkknJWNCSvOSoKAdSePqc84rb+3a/8Az7h9z/zMvqMP55feeRj4Ra6SQPDY OOD+9t+P/H6R/hLrcYy/h1VH+1NbD/2pXsL6Jp008zTeHNHfeSfMZEbzM5BLAw8H AGevXqasWkEtgpSz0rTrVXffILeYpk8fMcQDLfX060/7cr/8+4fc/wDMPqMP5pfe eI/8Kr1b/oBRf+BFt/8AHKP+FV6t/wBAKL/wItv/AI5Xvk9xdLahoCzXG8AoZTtC 9znYMn0H6irRlbccSHGf71J57XX/AC7h9z/zBYGD+1L7z58i+Feq+fHu8PxON4yo uLb5h1I/1noDV+4+GN5cmcWPhWBs5wRNb5jyBjgSnvu654x+HuRkJIyxODkZPSqL aRpMilX0uwYEhiGtkPI6HkVnLO6zabhH7n/mUsDFfaf3/wDAPm74reGI/D402WLQ f7JScyKR50cnmEbc42scAZ7+tFdh+0XzZ+GiMYEl0OPpFRXnt3jFvt+r7nZJ3k9L emh2vwvsobn4W6CZDMCYXG6K4kiOBLJ3Rh6muwt7CG2kLxyXbEqFxLezyjA9ncjt 1xzXL/Cf/klmgf8AXOT/ANGvXZVjWf7yXq/zFD4UJzSqDvX6iilT76/WsyzgPHPx B0nwdqtpaaiNQDT2vmqbS2glByxXnzCCCCi+oOPasJPjv4KWNEbSNWkKrt3G0txn 8A+BXfazYaVc3VvNqMGnPsh277uzWUqvzY+YjgZPr1x64OOdN8OHcwuPBGwEdNNV scHOf33HKv8A98n0rRWsRuc+P2gfB6gAaZrYA6ARQgD/AMiUf8NBeEP+gbrn/fqL /wCOV0Z03wxLO4gl8GMoIfy105XcJ36Te45xinadpfhm4vEhY+DrxssphtdPVXY4 yuCZW988HPI4xR7o9TFuPjBok/hRteto9WtbSO+WzJEEMkhkMbOMozY2YHUMDkDt ms6D4++F49/nwa7cZOVza26bfb5ZOf8A69eh3Wg6Bb6bMp0jTYrdW84o1sDEJMbQ 5QDBODjOM47isWPTPDpgeRo/CLCNRvZdN4DHkfxcZAbA69OtXCCkrpfmDdjnP+Gg vCH/AEDdc/79Rf8Axyt3wp8VNE8Z6q+naVY6hHNHGJXa6CIuwyJHxtLEnMgOOOh5 q3b6b4XTc17aeFyqYV1hsQpV+flOSecjpgHg+vGvpuneHEl+06TZaZHKPlMlpGqt j5Wwcc4+42D/ALJ9KU4cvT8wTPKP2i/+PDw5/wBdbn+UVFH7Rn/Hj4b/AOulz/KK ir+xH0/Vk9Wd38J/+SWaB/1zk/8ARr12Ncd8J/8Aklmgf9c5P/Rr12NZVv4kvV/m VD4ULSp99frSUqf6xfqKzKM29m8mWKQXZtyked6xhyuQ3O3q2cHgDjH1qsusy79x 8T2TR7mA26e/VW5BPmdhx2559qmMuoQylBfEYGSDpU0ynOMYZNo/Dnv+DPt2qYUt qKLng7tCuwT1x/y144U/mOnAOnJK2xHMhv8Aa8iwL5niS0ZiyKT/AGe/J5yNu/OT +mKH1iQRSBvEdruXcWJ058DGMAjf2we+Tn2q3FLqlxNI0WoQCINhUfTJ0ccA4y0o z35A/UGtFmkU8+Yo7ZzUvQoz7aV7qxkSLUllmBKG4it9m0/7pPXHf3qR4b1o1Qax dKwBBkEUO45JIPKYGMgdOgGcnJNra8nO1298E00jBwQQfpSUrf8ADIBY2mSMK1xL KwJ+d8Ankn+EAcdOnalLs33iT9TSKhb7qMfoDSFSv3lI+oNIZ4l+0Yf9D8ND1kuj +kVFM/aMx9n8M4/v3f8AKGiulfDH+urI6nf/AAn/AOSWaB/1zk/9GvXZVxnwp3j4 YaGiQySFIn3FCoAJdmx8zDsRXYjzi20Wk+7Gcbo84/77qKsH7SXq/wAxQa5UOpU+ +v1ppW4HWyuPzj/+LqOa4NpBJdXFvPHDChkkclDtUDJOAxPT0rPkkVzIrXenw3sl uZtPjuUGFZ2lZCinIJGB83XpxxnnoKLWOWzs2htdNihC7zHH9rypOVxk7SVBy3QH G3jOadcWBuZUeW0vQ6LtBjmjTvns+c/57mo10qT5sLrZOCp/4mWcEjGf9Z1/rzVW 8hXNC5SFreRVPnbhtMbRnDA8EH8Cao6RZx2yyK2nw6evAXyZzNuGSf7oxg/zpJdK Z926PWl3OH+XUiMc5wP3vT2pYbNYrxN8mpo4TciT3rOhC4U8Bzn7y/e+vrRbyC5H qNjHdXcT/wBl297hGjaWWUxFEyeMbTuzz6Y696u2AY2+26gSzMZ2RxxyGYFAMA52 jH0qXHuKMe4qeZdhlHU7O3u3i8zT1vxEWZCX8pkOFOATjqRjrjj2otons0jit9LV EckyBLsEIeT3XJyT27npV7HuP1ox7ijmXYLHhv7RRLWfhYsMMTdEj0OIeKKd+0b/ AMe/hnp9676fSGitl8K/rqI5Lw58a9e8L6FbaRZadpskEAwGnRyx4A7MPSrV38d9 Z1Bla98OeHrkqpQedbO3B6jl+leVUVo6knq7fcv8iVFLY9ouPih408MRre3Hw/03 SUYiFZ5NLngDHBIXcWGTgHj2NOHxj8d68LjSIvCtvcvNbbpYLW0nMvkuo+cAMcAh 1IbGPmB71g32r6fPdTav4q/sa4nnvWns30e3t5DseKcl3iBUsBKbZtlyQxAYEcyC q+uSw6z4pM9hqtprETWVhJc2+sXgtEuZVtQm9nEwDOmeR5gcM7ABgrGl7R+X3L/I fKjcP7RfiknJ0vRv+/Un/wAXTdU+LfiWFLa+1bwPoiLdoXt57vTpQJlIBJRmb5gd wPHHIPeud1i5029OtXcd1pt3fz3F3JY3NwqrJNatI5d5AAqCc5JjDANgvgA/ZxWp od9b6SitqV5pVxeXF29xBOl8Zft8v2e68uadt++BlllhCsfJYeYzN8yFkPaPsvuX +QWN6P4ueP8ATb6HRYvBNna3cqmWGxXTp0kdeSWWPdkj5W5A7H0qnN8ffE1vqDLf 6FpyXFuHgaIpLGUJZdwYFs5BQDHGOayYBpFtYahY2dh4fk1S7S2a6spdUKWsaq8+ 9Y7jz1DggWjlPNfLEnH7vCef6tHYw6zfRaXNJPp6XEi2ssgwzxBjsY8Dkrg9B9BR zvsvuX+QWR6437QHiBbdLhvDlgIHdkSQ+btZlALAHOCQGUkdtw9akm+PPia3+0ef 4Xs4vs0ogn3rMvlSHdhGyflb5G4PPyn0NY954i8MtaaRNYaldxQwXupR2NvPaqn9 mpJbxrC/ySOwEcmxw4BZmEj/AHx81eLVdFh8NHT765tJdQtXsoGuHxPEZ0F7tkZR kzxRLJDESMqNq4EqBUkm/kvuQzck/aA8QQpC8vhywRJk3xM3mgOu4rleeRuVhkdw R2qP/hojWv8AoBaZ/wB9Sf8AxVYbmwTwrplreT6HLFaaVeQ3gWaOW5ScTXRtgjAk lfMKH9yeQxMn7srXm9F/JfcgO08e/Ea98fR6ct5YW1r9iMpXyGY7t+zOck9Ng/Oi uLoobuAUUUUgCiiigAooooAKKKKACiiigAooooAKKKKAP//Z ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=avatar377508_1.gif Content-Type: image/gif; name=avatar377508_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar377508_1.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUABQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8Ap5ozTM0Zr3z5ew/NGaZmlGWIAGSeAKAHZqK6vLWxGbu6gt89 BLIFJ+gPJrivE3iqcTPBpl00dug2NJFwZXzyQ3UL24xnnsRWDZ6PrN8gnittscnP mSYG7Pfnk/XmuWeK15YK5208FePNUlZHpcWtaVO2yLU7RmPQGULn88VeYFThgQfe vLLnwzrmwlY1mA6iI4P5EAn8K7LT5YND8LLcFJFSNV3K8jEuxIBCgnAbk8ADpz0q qdaUm+dWJrYeEUvZyvc6DNGajWRJESSNw8bqGRh0ZSMg/lS5rouclhuaM0zNGakq w/NYPijVjY2QtIHxc3KnJHVI+hP1PIH4+grXnuYrS2luZ2KwxLucjr9B7k4A9zXn csl1rOqFyAbm5kwq9lHYfRQPyFc+IqcseVbs68LR55c0tkZksXnoqhgqjPb8q9S0 mUT6RZyj+OFSfrjn9c1xviPT4tOls4oB+7WIpuPViDkk+5LE10HhOfzNDEeeYZXT 8zu/9mrHDrkqOLOjFtVKKmu5vZrmtW8LjVtbjuvtAgXy/wB46puLEHC8ZHbPOf4R XQlsAn+lefS+JtSn8QST2LPGoXyEiKBiw3cAqQRuLH6jpW9eUEkp6nLhoVG26bsd 1pdtJY6ZDZyyCRoNyBwMbl3Erx24IGParear2scsFpFHcSmWcLmV/Vzy2PbJOPbF S5raOiSMJaybGZozTM1R1q4mttEu5reTy5VCgODgjLqDj3wTUOVk2VGPM0u5i+Ld S3yppsZ+SLEk2O74+VfwBz9SPSqvh+606wD3l3OBMw2xoqliq9zgdCffsPeshIp7 uYpHHNcTPliFUuzepPf8a0YPDWqy4zbxwL6zSgfoMn9K4FOcp86Vz1XCnCn7OTsS 6/rFrqkUaQRzBkbdudQARg++aueDp8SXtue6pKv4Eg/zWmf8IlIlvLJJfIZEjZlj jiJDEAkDcSOp9qyPC948PiNI2bKyKyZ9iMj9QtUnONVSn1IapyoyhTe3/Dnomazb XRba21i61MjfNLIXjGOI89T7knPPbNaGaTNdrSdrnmqTjdLqPzRmmZpc07isR5rm fFd7ueCwQ8KPOk+pyFH5ZP8AwIV0ea5jVNDv7rV5pYtjRTsCJS4GwYAwRnPGO2e1 YV+ZwtE6sNyqd5PYseFLbZFcXjL8zny0P+yOv5nH/fNdFmoIIY7a3jgiGI41Crmp M1dOPLFIzqy55uRKj7XVuuDmvMpYZdM1/Makm1lIHodpOM/XA/OvSM1zviDR57m7 F5aRmQuoWVFIBBAwGGSM8YH4e9ZYiLlFNdDfCzUJNS2Z0ccqTRJLGcxuoZT7EZFO zWZosdzb6bFBcrtaMEAZzgZOBmtDNbRldXZzSilJpD80ZpmaM07isNzRmo80Zqbl WJM0ZqPNGaAsPzS5qPNGaAsPzS5qPNGaLhYfmjNMzRmgLH//2Q== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=avatar360832_1.gif Content-Type: image/gif; name=avatar360832_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar360832_1.gif Content-Transfer-Encoding: Base64 R0lGODdhQgBQAOcAAP///////8vGFP////yJCfwFBMTiFENDGP///////////7yS /I6JkMO5Ev///////////+DpU////////2tlEv///9TOxMvHToR+F/////////// /////+j2UZWNEf///////+nbEP///+rkEvyITOT4BP///////xQmHHxCFKypUiUP ev///2doUWhpkP////////jYk/Lkk+faK////5SQVvPnUerlMPr5kuv98fyqk+nZ c1lVEfu3UfXlsnp1EP////rl0vxqSv////rYsfPocf////////////n4sUQuoPyY Tv////////z7UBoUdP///15NoP///////////////ygZgAQCSElIK/zGkv////// //y4j////////////+rJdvvYDNzazP////n30P///9XKMfns1P///6OjM////4RW 1KKobvx3Cv////////////////nYUPjYcfftr////52aUfz9+v////////yocBQW PPzIr/nb0JyutP///////7zuzPyCpPwoBMjGxP///2RadLR6JHmH4cjGk/////// /wwSBDw+rP///2RdF8C41P///////////////6Wbkv///4l9Sfx4T9y6nP///2hc uP///////////15bg////////5GLwf///////05Eov///////x4MZP///8zSpP// /////9jWa////+SyPP///4iGMf///////////////6Oas////008lvxbOP///8z+ /NTMsf///////+z7sev3cf///1hXLXBS0CQeLP///////////56ZNP///8TG/PyJ MPyoMycNkf////////r6cv////zC/IqJbv///////zgpgK+om////////9Co/HZ5 bvxGNPxpMfx4M/x9atjm/P///9bMDlBKEf////////v3Fv///////66nMYRnzK+o c/z6Nf///5aPMf///8zGsv///woEXRYVWv///8W9MTYeh2hapoyQPMG8c/yIa/// /////////3p3LqCPtCwAAAAAQgBQAAAI/gDvCByIg8zAgwdl3CFjUCAOOgKh2UC4 A2KRO3Rs0ClCR+EdIgJ9HGRo8CLCgRBPHjzDMiVGOkkEysFxMEuMhXeS2HBCBocP GTvusBSYBWFMkyfJeFQpkAiRGEPvcGwoJ0bDLDbvyDhDZo4ZG3JmyAFTtE+fO1zO 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 oSJofdascy9xXdeXbAb+bNfVGxAAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=im_jabber.gif Content-Type: image/gif; name=im_jabber.gif Content-Location: http://forum.qip.ru/images/misc/im_jabber.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAPcAAAAAAM4AANYhIdYxMdY5Od45Od5KSt5SUt5aWt5jY+djY+dr a+dzc+d7e+eEhOeMjO+MjO+lpe+tre+1tfe1tfe9vffGxvfOzvfW1vfe3v/OWv/e e//ehP/ejP/elP/e3v/npf/n5//vtf/vvf/31v/33v/35//39///9/////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////yH5BAEAAAAALAAAAAAQABAAAAiNAAEIBJDhQQIECyIMXCgQ QwABCRgsICDAAkOBFw6k2LjxwgAMF0+c4Mgxw4GLJFMuuMAwJUkJDVpuLJEyo0wQ HTho4CghgUwPJUhsGHligMWWJE6IAJHiBAIGFwFMGBkiRQgCMaM6QDAyBYIKUQU2 kMCggQWfYaUeYPBggoO0AAhMuDAhg0K4BhtMiBoQADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=user_online.gif Content-Type: image/gif; name=user_online.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/user_online.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAABP/VxH/Tw7/RA7/QlKRfAapIw7/RRP/VW90gA7/PQWpI7S2 wABRAAm8NLO3wV/Be4v/mER4dRD/TmTAiVF/kydPUQmyKyRPTo67qLrY2mHIeQvu PQ7/QQC2EEh2oGjJgQC3Fwz8OxL/UcDI2Qn/LsDJ1wCODrXvzjh6dMDD0jx4dcTM 3F2uc8TN3LPxygehJCiDZQX/LJWxswB+Fbe9zrrD05udp1imgVqce7bG00ubeD9p ejVbfcHU4Ki+xwvlPSiTaoqZpiSfZUdpVVi3ewDREnzgiF+9ggCzHDSAeTN0b2jZ gWK2e3jynTJjdTtfcSdMSQ7/RhT/WEZ2cGfSnWvdmJOnsWPLlxH/Sw3/PFGClKrY xwj/OBH/UBL/VAzzNwn/OBH/TjFjY162ewv/ONXe7GbEjABxAAraPYOTnwz5PAno Lw//SBX/XEdunlKEnMfQ35CkroKLmwB6DoremEV0bwrQL3z2miuCcVylj5q4uFek oV6+fylaQp/Bv2LJgNXg71vBelaUlrHQ0gm7MQBWADddYF/CeQDbGC95bgHaGAvr Ol/FeAB9EF6/gyaKbhP/WArSMXjmjpmor5WYoGTPgWGjmF68eyaZaA3/QnSJkWfK doSeogB1BAz1NlzAfQflKQH/Hgz/OoH8lYn2mqn1vAB2AA//Qwm9LwC8HAvpQACZ Bn3Uj2jLhxL/TPX1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAK8ALAAAAAAPAA8AQAjfAF8JFFjCCqcgDgYKHCQI TwxXAbpIiKKG0JwhLtK8ouMGU6gEWTzZKWCqwqgnA30wykMgAoo6OCR9iqPQz6U9 OpLAUBGoySEEAjNYegSmDaQDYQZ8sdDJEAQ5rzZpSYRozaINqtCYgHKCh0KBK/Rg kDHi68AcLBxdoVKl0hRKCnt88ABEUZEOq86IufPAxitArJyQCCACyylRkV4UGrNk wZY3QrhIAQDAC5sQqBr1KaWpzJEdoMhwEGAg048GDCYZSfEKjgYKShSASIVkxgVS RGgobMGEzwQzrf7cqDEwIAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=progress.gif Content-Type: image/gif; name=progress.gif Content-Location: http://forum.qip.ru/qipstyle/misc/progress.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBF Mi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJRiBNb3ZpZSBHZWFyIDQuMAAh/hVNYWRl IGJ5IEFqYXhMb2FkLmluZm8AIfkECQoAAAAsAAAAABAAEAAAAzMIutz+MMpJaxNj CDoIGZwHTphmCUWxMcK6FJnBti5gxMJx0C1bGDndpgc5GAwHSmvnSAAAIfkECQoA AAAsAAAAABAAEAAAAzQIutz+TowhIBuEDLuw5opEcUJRVGAxGSBgTEVbGqh8HLV1 3+1hGAeAINcY4oZDGbIlJCoSACH5BAkKAAAALAAAAAAQABAAAAM2CLoyIyvKQciQ zJRWLwaFYxwO9BlO8UlCYZircBzwCsyzvRzGqCsCWe0X/AGDww8yqWQan78EACH5 BAkKAAAALAAAAAAQABAAAAMzCLpiJSvKMoaR7JxWX4WLpgmFIQwEMUSHYRwRqkaC sNEfA2JSXfM9HzA4LBqPyKRyOUwAACH5BAkKAAAALAAAAAAQABAAAAMyCLpyJytK 52QU8BjzTIEMJnbDYFxiVJSFhLkeaFlCKc/KQBADHuk8H8MmLBqPyKRSkgAAIfkE CQoAAAAsAAAAABAAEAAAAzMIuiDCkDkX43TnvNqeMBnHHOAhLkK2ncpXrKIxDAYL FHNhu7A195UBgTCwCYm7n20pSgAAIfkECQoAAAAsAAAAABAAEAAAAzIIutz+8AkR 2ZxVXZoB7tpxcJVgiN1hnN00loVBRsUwFJBgm7YBDQTCQBCbMYDC1s6RAAAh+QQJ CgAAACwAAAAAEAAQAAADMgi63P4wykmrZULUnCnXHggIwyCOx3EOBDEwqcqwrlAY wmEYB1bapQIgdWIYgp5bEZAAADsAAAAAAAAAAAA= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=edit.gif Content-Type: image/gif; name=edit.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/edit.gif Content-Transfer-Encoding: Base64 R0lGODlhRgAWAPf/ADljZ33BfIfTiL3UxAQVa77JwZe6mODi4rTJt1ukXobLhGaa ZcPWyozajz5pUurq65Swlk5/V+Tm5mOoY6Goo1+WYkhY2pasnBou7WifaHW1c1ty Xs7T0JjZtXWddQocgnPFedjc27zAvnagdoDOgqPEq2+qboS5g6DlqKjHq7K5td7n 516SYcbQyYurjHSKdvb29jA/2n7Kf/Hz9NHf23+kgIugjrnTwISphZebmZvgoevt 72OZZNzg3wIOXYC9fvDx8Zuqnv/9+o/dkcjNy2yka/7+/leJXGubaorOijRWY9bf 3HnJftvl5c/V04SaiIWpjpfemzRbTjBac3WRdcjYz4a9hCxETXuseqyxr87S0YfV imqham2xa6y7rSRAaWeza9vf3WeCaJLalX61fPr6+vz8/IK1gE11V4TGgm6FcAkY p1SSfkh5VozTjOPr7VuOX2+4cBkqykVzVGqEbHDAdXueg8PPyHerdURvZnePeS9R TkFuUomdi4rYjfX39xguYn2MfiIzyM3d1Y6zjme2bTlVqoy6i9ba2n6Tf3q9eVeX XqSvp8THxUx8VyUztvv7/fv6+bzFwNXd2UVoUn3HfXW+d8XLyF6HYnmhepCfkyxN ZsnQy8rQzkyMVmOvZtHW1XjEevn5+qPnrIeiib3Qxn/Gf8HHxff4+FNuWcLIxWF7 Y0lhU0ptVWWUZTliUHGrcJvjomR+Zv3+//v8/crTzcbbz/b4+NLa2FKDWXKEdP7+ /ITQhVqWZfz7+1eCXOXp6tnh4tTW1myMbJbcmF2RcoLAgMHLxW6Wb5uhnnXHe8XM x7/WxnmIevn5+3CacGKgZJGplWypfzt1a0OHXiA6R/Pz9Iq1ibzMv3bIfHXGfnrH fb/EwbXEufDw8d/j5AwcwZy+pliKblmBXVt7ZliIZeXt8EmDXtfj4GSIZv39/f79 /Y/WkFCKX16Lb7C1skx4l2erZ6Gto5+7oRgsiczPzbvTwbfMupy0pCdAYUB9WkmD Vbi9u/r5+f///+fu8SH5BAEAAP8ALAAAAABGABYAQAj/AP8J/KdCGIdL3ESIUKHi XZaHjAoMHGhuosWLGDNqtGgOTzwwExj40gJKizAiTrj5ajKFAIFFAQK0y7epl5Uf P078UGSqp6k0CoIqSJLEjRt2SMcQIxZFh9OnxMa4UWDKUpd4ExJ4YtDEFY8MGZAA E4VryRJEHESAmiHEn1tpGLC41cUiAwJ/YVY5m2XNrYQNkvw+8FdPjNsy6tYJ2zA4 USsJhIX5M3IAhj8K1SBM7IbK24EHD2CEI+DDB4Bg/pJ1s8WgNTN7zGLHHkC79gB7 uG/o3s27N297A5gxsDWoyUAGdU0UITQDgA9ANJUoAaAkj7hi9NasYWPGH7l2Gu75 /wshRp0/FU8O+CNCJRodKmH8FaDir4yuC/5QydrhL1ANfzDI08cTYiQygz+aSDGO QIN4wEIbLrjlzyw7hNFCEMOgwYcDfLQRgT6GUJOLIxGUGIEjDrwyhyMsOtLGiy/O IeOMfNRo440bOqDjK6948IZFKlymSQ5PfFFMKb5I6E8OGzXp5JMXNdFFIWAA4wsH p1wijCT1XACIS1/MEwcJZAqwBS9mbrGFH3400MAQcMYp55xDuNmAH2puIQAvJMiw TSiW1BFHIZ+k8M8gPMRjQjzzjEfEMZeAEgYiB/qzwxQfmADNNEacd4EXIfjTwzgn kAGLFYdgocEPqB5yAh4aGP9zwqwnnBGrFaXuZMUZZJxwzRl4VLDIPs9UwcICXHCB RRnWqGLHJgR8IK20a1hAAxprwLOLP7osYIJ4IchCSySr8GCAPxIQ4c8BQSzjDyd0 +GMGN8uIIsELwFianxqu8MeBJj1cdgUm/9xTwQILwFGAkgwr6YQcFpyzxjQjFJFB BRXI5c8GR1TABSwm8AAHD1zwQHIFLMBxxBEpR9AGiXOk6IAUe0hBsxRo/DhQFvlN 2LCEyUAp9NAbBdYIBSpI4k5pSkBh2ZJERx01DcZoUKlbnZbg0nPBYAMGE2CHLTbY 2ZCdjTLanK2MMiC0DQLbbsctt9t11GGJoQKl8AlIS5T/wYEWqmjBTw8c4POFS5t0 8WclYIBRiQyQk4CmAAK40eYYSkXRVCyxoIDCKKCHPornnutADDu8VGJJHGB8kgA0 b6ADTTxdTICAOqpc0snuoJyiHjAtTZNGPErsMAMkbtFySwgsKKJIAM4HYExM1Kdh /fVAEaU9UQqkYYoiGlw1wbAQMOCxchA4g8s3O/wBSaf+RLJtD4DUDwAt/lzhAwsp jCfGDN6oRad28IxzdccMPUDGNf7whzL4YgYIEMsfbJABe9yCA16Qlz9E0QI0tAET yMlAEYqAA3/cQQmlSaEKCSAIOQiCEJ1qRhFgAS4xjItj55JAKlxwhx4AwR8cUEN9 /+RxDH/wIxX8UQUwItEMNDwDArXoASr8wYgr/IIGLPgKF0ZgjT844Rt3gMI0HiGI GFigA/4QQjnAYYgk6cIVRbhLuGjhixc8YxLjsUwgKIGNdxkGBhtIB3+CEJ9mMAJd ugBQKigRH8wg4x814MECLjYJZ3yxfeZpWAkwUIRA5MEBSCiCB/RAh2GYoR9q0EQf UnEEV0RDHnRYBSkxkQgq6EEPYmjFLzyghlQ4AhN0kAUrbKAJVqRiFazYAwP+sQIk 8KACucjgz/zhjR60AALDmAYGttkLJICFCxkYQTdUsAGSZQBh6DQZylK2slycqA0y qpGO5skjm2lmIkvABiMOwD4NCmjCBjboQzQgQNBoRMMFLggoKUiBUITi4KE4qIFE J1qDTGRiBBa16Ag2OgIPePSjHuBoJmrggnlUYSABAQA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_multi_quote.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_multi_quote.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_multi_quote.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemVzIHRoZSBNUSBpbWFnZXMsIHNvIHRoZXkgYXJlIGNsaWNrYWJsZS4g QWRkaXRpb25hbGx5LCBpdCByZWRvZXMKKiB0aGUgY29sb3Jpbmcgb2YgdGhlIGlt YWdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb29raWUuIFRo aXMKKiBpcyBoZWxwZnVsIGlmIGEgdXNlciB1c2VzIHRoZSBiYWNrIGJ1dHRvbi4K KgoqIEBwYXJhbQlvYmplY3QJVGhlIG9iamVjdCB0byBzZWFyY2ggd2l0aGluIGZv ciBNUSBpbWFnZXMuCiovCmZ1bmN0aW9uIG1xX2luaXQob2JqKQp7Cgl2YXIgY29v a2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211bHRpcXVvdGUnKTsK CWlmIChjb29raWVfaWRzICE9IG51bGwgJiYgY29va2llX2lkcyAhPSAnJykKCXsK CQljb29raWVfaWRzID0gY29va2llX2lkcy5zcGxpdCgnLCcpOwoJfQoJZWxzZQoJ ewoJCWNvb2tpZV9pZHMgPSBuZXcgQXJyYXkoKTsKCX0KCgl2YXIgcG9zdGlkOwoK CXZhciBpbWFnZXMgPSBmZXRjaF90YWdzKG9iaiwgJ2ltZycpOwoJZm9yICh2YXIg aSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspCgl7CgkJaWYgKGltYWdlc1tp XS5pZCAmJiBpbWFnZXNbaV0uaWQuc3Vic3RyKDAsIDMpID09ICdtcV8nKQoJCXsK CQkJcG9zdGlkID0gaW1hZ2VzW2ldLmlkLnN1YnN0cigzKTsKCQkJaW1hZ2VzW2ld Lm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7IHJldHVybiBtcV9jbGljayh0aGlzLmlk LnN1YnN0cigzKSk7IH07CgkJCWNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIChQSFAu aW5fYXJyYXkocG9zdGlkLCBjb29raWVfaWRzKSA+IC0xID8gdHJ1ZSA6IGZhbHNl KSk7CgkJfQoJfQp9CgovKioKKiBDYWxsYmFjayBmdW5jdGlvbiB0byB3aGVuIGFu IE1RIGltYWdlIGlzIGNsaWNrZWQuIE1vZGlmaWVzIHRoZSBjb29raWUgYW5kCiog dXBkYXRlcyB0aGUgbG9vayBvZiB0aGUgaW1hZ2UgdG8gc3VpdC4KKgoqIEBwYXJh bQlpbnRlZ2VyCVBvc3QgSUQgb2YgdGhlIGltYWdlIGNsaWNrZWQuCioKKiBAcmV0 dXJuCWZhbHNlCUFsd2F5cyByZXR1cm5zIGZhbHNlIHRvIGVuc3VyZSBhbnkgaHJl ZiBldmVudCBkb2VzIG5vdCBydW4KKi8KZnVuY3Rpb24gbXFfY2xpY2socG9zdGlk KQp7Cgl2YXIgY29va2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211 bHRpcXVvdGUnKTsKCgl2YXIgY29va2llX3RleHQgPSBuZXcgQXJyYXkoKTsKCXZh ciBpc19zZWxlY3RlZCA9IGZhbHNlOwoKCWlmIChjb29raWVfaWRzICE9IG51bGwg JiYgY29va2llX2lkcyAhPSAnJykKCXsKCQljb29raWVfaWRzID0gY29va2llX2lk cy5zcGxpdCgnLCcpOwoKCQlmb3IgKGkgaW4gY29va2llX2lkcykKCQl7CgkJCWlm IChjb29raWVfaWRzW2ldID09IHBvc3RpZCkKCQkJewoJCQkJaXNfc2VsZWN0ZWQg PSB0cnVlOwoJCQl9CgkJCWVsc2UgaWYgKGNvb2tpZV9pZHNbaV0pCgkJCXsKCQkJ CWNvb2tpZV90ZXh0LnB1c2goY29va2llX2lkc1tpXSk7CgkJCX0KCQl9Cgl9CgoJ Ly8gZmxpcCB0aGUgaW1hZ2UgdG8gdGhlIG90aGVyIG9wdGlvbgoJY2hhbmdlX21x X2ltYWdlKHBvc3RpZCwgKGlzX3NlbGVjdGVkID8gZmFsc2UgOiB0cnVlKSk7CgoJ Ly8gaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcG9zdGlkIGluIHRoZSBjb29raWUsIGFk ZCBpdAoJaWYgKCFpc19zZWxlY3RlZCkKCXsKCQljb29raWVfdGV4dC5wdXNoKHBv c3RpZCk7CgkJaWYgKHR5cGVvZiBtcWxpbWl0ICE9ICd1bmRlZmluZWQnICYmIG1x bGltaXQgPiAwKQoJCXsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCAoY29va2llX3Rl eHQubGVuZ3RoIC0gbXFsaW1pdCk7IGkrKykKCQkJewoJCQkJdmFyIHJlbW92YWwg PSBjb29raWVfdGV4dC5zaGlmdCgpOwoJCQkJY2hhbmdlX21xX2ltYWdlKHJlbW92 YWwsIGZhbHNlKTsKCQkJfQoJCX0KCX0KCglzZXRfY29va2llKCd2YnVsbGV0aW5f bXVsdGlxdW90ZScsIGNvb2tpZV90ZXh0LmpvaW4oJywnKSk7CgoJcmV0dXJuIGZh bHNlOwp9CgovKioKKiBDaGFuZ2VzIHRoZSBNUSBpbWFnZSB0byBzaG93IGFzIGJl aW5nIHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQKKgoqIEBwYXJhbQlpbnRlZ2VyCUlE IG9mIHRoZSBwb3N0IHdob3NlIE1RIGJ1dHRvbiBpcyBjaGFuZ2luZwoqIEBwYXJh bQlib29sZWFuCVdoZXRoZXIgdG8gbWFrZSB0aGUgaW1hZ2Ugc2VsZWN0ZWQgb3Ig bm90CiovCmZ1bmN0aW9uIGNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIHRvX3NlbGVj dGVkKQp7Cgl2YXIgbXFfb2JqID0gZmV0Y2hfb2JqZWN0KCdtcV8nICsgcG9zdGlk KTsKCWlmIChtcV9vYmopCgl7CgkJaWYgKHRvX3NlbGVjdGVkID09IHRydWUpCgkJ ewoJCQltcV9vYmouc3JjID0gbXFfb2JqLnNyYy5yZXBsYWNlKC9cL211bHRpcXVv dGVfb2ZmXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVvdGVfb24uJDEnKTsK CQl9CgkJZWxzZQoJCXsKCQkJbXFfb2JqLnNyYyA9IG1xX29iai5zcmMucmVwbGFj ZSgvXC9tdWx0aXF1b3RlX29uXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVv dGVfb2ZmLiQxJyk7CgkJfQoJfQp9CgptcV9pbml0KGZldGNoX29iamVjdCgncG9z dHMnKSk7CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qXAp8fCAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwp8fCAjIERvd25sb2FkZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGgg MjAwOAp8fCAjIENWUzogJFJDU2ZpbGUkIC0gJFJldmlzaW9uOiAxNTE3NSAkCnx8 ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjClwqPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSov ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_textedit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_textedit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_textedit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjExIFBhdGNoIExldmVsIDEKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1RleHRfRWRpdG9yCgovKioK KiB2QnVsbGV0aW4gRWRpdG9yIENsYXNzCioKKiBBY3RpdmF0ZXMgYW55IEhUTUwg Y29udHJvbHMgZm9yIGFuIGVkaXRvcgoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUg a2V5IGZvciB0aGlzIGVkaXRvcgoqIEBwYXJhbQlib29sZWFuCUluaXRpYWxpc2Ug dG8gV1lTSVdZRyBtb2RlPwoqIEBwYXJhbQlzdHJpbmcJRm9ydW1pZCAvIENhbGVu ZGFyIGV0Yy4KKiBAcGFyYW0JYm9vbGVhbglQYXJzZSBzbWlsaWVzPwoqIEBwYXJh bQlzdHJpbmcJKE9wdGlvbmFsKSBJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IK KiBAcGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgRXh0cmEgYXJndW1lbnRzIHRvIHBh c3Mgd2hlbiBzd2l0Y2hpbmcgZWRpdG9yIG1vZGVzCiovCmZ1bmN0aW9uIHZCX1Rl eHRfRWRpdG9yKGVkaXRvcmlkLCBtb2RlLCBwYXJzZXR5cGUsIHBhcnNlc21pbGll cywgaW5pdGlhbF90ZXh0LCBhamF4X2V4dHJhKQp7CgkvKioKCSogTWlzY2VsbGFu ZW91cyB2YXJpYWJsZXMKCSoKCSogQHZhcglzdHJpbmcJVW5pcXVlIEVkaXRvciBJ RAoJKiBAdmFyCWJvb2xlYW4JV1lTSVdZRyBtb2RlCgkqIEB2YXIJYm9vbGVhbglI YXZlIHdlIGluaXRpYWxpemVkIHRoZSBlZGl0b3I/CgkqIEB2YXIJbWl4ZWQJUGFz c2VkIHBhcnNldHlwZSAoY29ycmVzcG9uZHMgdG8gYmJjb2RlcGFyc2UgZm9ydW1p ZCkKCSogQHZhcglib29sZWFuCVBhc3NlZCBwYXJzZXNtaWxpZXMgb3B0aW9uCgkq IEB2YXIJYm9vbGVhbglDYW4gd2UgdXNlIHZCbWVudSBwb3B1cHM/CgkqIEB2YXIJ b2JqZWN0CVRoZSBlbGVtZW50IGNvbnRhaW5pbmcgY29udHJvbHMKCSogQHZhcglv YmplY3QJVGhlIHRleHRhcmVhIG9iamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFs IHRleHQKCSogQHZhcglhcnJheQlBcnJheSBjb250YWluaW5nIGFsbCBidXR0b24g b2JqZWN0cwoJKiBAdmFyCWFycmF5CUFycmF5IGNvbnRhaW5pbmcgYWxsIHBvcHVw IG9iamVjdHMKCSogQHZhcglvYmplY3QJQ3VycmVudCBwcm9tcHQoKSBlbXVsYXRp b24gcG9wdXAKCSogQHZhcglzdHJpbmcJU3RhdGUgb2YgdGhlIGZvbnQgY29udGV4 dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0YXRlIG9mIHRoZSBzaXplIGNvbnRl eHQgY29udHJvbAoJKiBAdmFyCXN0cmluZwlTdGF0ZSBvZiB0aGUgY29sb3IgY29u dGV4dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0cmluZyB0byBjb250YWluIHRo ZSBmYWtlICdjbGlwYm9hcmQnCgkqIEB2YXIJYm9vbGVhbglJcyB0aGUgZWRpdG9y ICdkaXNhYmxlZCc/IChxdWljayByZXBseSB1c2UpCgkqIEB2YXIJdkJfSGlzdG9y eQlIaXN0b3J5IG1hbmFnZXIgZm9yIHVuZG8vcmVkbyBzeXN0ZW1zCgkqIEB2YXIg IGludGVnZXIgSXMgdGhlIGVkaXRvciBtb2RlIHRyeWluZyB0byBiZSBjaGFuZ2Vk PwoJKi8KCXRoaXMuZWRpdG9yaWQgPSBlZGl0b3JpZDsKCXRoaXMud3lzaXd5Z19t b2RlID0gcGFyc2VJbnQobW9kZSwgMTApID8gMSA6IDA7Cgl0aGlzLmluaXRpYWxp emVkID0gZmFsc2U7Cgl0aGlzLnBhcnNldHlwZSA9ICh0eXBlb2YgcGFyc2V0eXBl ID09ICd1bmRlZmluZWQnID8gJ25vbmZvcnVtJyA6IHBhcnNldHlwZSk7Cgl0aGlz LmFqYXhfZXh0cmEgPSAodHlwZW9mIHBhcnNldHlwZSA9PSAndW5kZWZpbmVkJyA/ ICcnIDogYWpheF9leHRyYSk7Cgl0aGlzLnBhcnNlc21pbGllcyA9ICh0eXBlb2Yg cGFyc2VzbWlsaWVzID09ICd1bmRlZmluZWQnID8gMSA6IHBhcnNlc21pbGllcyk7 Cgl0aGlzLnBvcHVwbW9kZSA9ICh0eXBlb2YgdkJtZW51ID09ICd1bmRlZmluZWQn ID8gZmFsc2UgOiB0cnVlKTsKCXRoaXMuY29udHJvbGJhciA9IGZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb250cm9scycpOwoJdGhpcy50ZXh0b2JqID0g ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3RleHRhcmVhJyk7Cgl0aGlz LmJ1dHRvbnMgPSBuZXcgQXJyYXkoKTsKCXRoaXMucG9wdXBzID0gbmV3IEFycmF5 KCk7Cgl0aGlzLnByb21wdF9wb3B1cCA9IG51bGw7Cgl0aGlzLmZvbnRzdGF0ZSA9 IG51bGw7Cgl0aGlzLnNpemVzdGF0ZSA9IG51bGw7Cgl0aGlzLmNvbG9yc3RhdGUg PSBudWxsOwoJdGhpcy5jbGlwYm9hcmQgPSAnJzsKCXRoaXMuZGlzYWJsZWQgPSBm YWxzZTsKCXRoaXMuaGlzdG9yeSA9IG5ldyB2Ql9IaXN0b3J5KCk7Cgl0aGlzLmlu Zmx1eCA9IDA7CgoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCS8v IHZCX1RleHRfRWRpdG9yIG1ldGhvZHMKCgkvKioKCSogRWRpdG9yIGluaXRpYWxp emF0aW9uIHdyYXBwZXIKCSovCgl0aGlzLmluaXQgPSBmdW5jdGlvbigpCgl7CgkJ aWYgKHRoaXMuaW5pdGlhbGl6ZWQpCgkJewoJCQlyZXR1cm47CgkJfQoKCQl0aGlz LnRleHRvYmouZGlzYWJsZWQgPSBmYWxzZTsKCgkJaWYgKHRoaXMudGVtcGlmcmFt ZSkKCQl7CgkJCXRoaXMudGVtcGlmcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KHRoaXMudGVtcGlmcmFtZSk7CgkJfQoKCQl0aGlzLnNldF9lZGl0b3JfY29udGVu dHMoaW5pdGlhbF90ZXh0KTsKCgkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9ucygp OwoKCQl0aGlzLmluaXRfY29udHJvbHMoKTsKCgkJdGhpcy5pbml0X3NtaWxpZXMo ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3NtaWxpZWJveCcpKTsKCgkJ aWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYmICFzbWls aWVfd2luZG93LmNsb3NlZCkKCQl7CgkJCXRoaXMuaW5pdF9zbWlsaWVzKHNtaWxp ZV93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NtaWxpZXRhYmxlJykp OwoJCX0KCgkJdGhpcy5jYXB0Y2hhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ImltYWdlc3RhbXAiKTsKCQlpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwpCgkJewoJ CQl0aGlzLmNhcHRjaGEuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIDEpOwoJCX0K CgkJdGhpcy5pbml0aWFsaXplZCA9IHRydWU7Cgl9OwoKCS8qKgoJKiBDaGVjayBp ZiB3ZSBuZWVkIHRvIHJlZm9jdXMgdGhlIGVkaXRvciB3aW5kb3cKCSovCgl0aGlz LmNoZWNrX2ZvY3VzID0gZnVuY3Rpb24oKQoJewoJCWlmICghdGhpcy5lZGl0d2lu Lmhhc2ZvY3VzKQoJCXsKCQkJdGhpcy5lZGl0d2luLmZvY3VzKCk7CgkJCWlmIChp c19vcGVyYSkKCQkJewoJCQkJLy8gc2VlIGh0dHA6Ly93d3cudmJ1bGxldGluLmNv bS9mb3J1bS9idWdzMzUucGhwP2RvPXZpZXcmYnVnaWQ9Njg3CgkJCQl0aGlzLmVk aXR3aW4uZm9jdXMoKTsKCQkJfQoJCX0KCX0KCgkvKioKCSogSW5pdCBidXR0b24g Y29udHJvbHMgZm9yIHRoZSBlZGl0b3IKCSovCgl0aGlzLmluaXRfY29udHJvbHMg PSBmdW5jdGlvbigpCgl7CgkJdmFyIGNvbnRyb2xzID0gbmV3IEFycmF5KCk7CgoJ CWlmICh0aGlzLmNvbnRyb2xiYXIgPT0gbnVsbCkKCQl7CgkJCXJldHVybjsKCQl9 CgoJCXZhciBidXR0b25zID0gZmV0Y2hfdGFncyh0aGlzLmNvbnRyb2xiYXIsICdk aXYnKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKysp CgkJewoJCQlpZiAoYnV0dG9uc1tpXS5jbGFzc05hbWUgPT0gJ2ltYWdlYnV0dG9u JyAmJiBidXR0b25zW2ldLmlkKQoJCQl7CgkJCQljb250cm9sc1tjb250cm9scy5s ZW5ndGhdID0gYnV0dG9uc1tpXS5pZDsKCQkJfQoJCX0KCQlmb3IgKHZhciBpID0g MDsgaSA8IGNvbnRyb2xzLmxlbmd0aDsgaSsrKQoJCXsKCQkJdmFyIGNvbnRyb2wg PSBmZXRjaF9vYmplY3QoY29udHJvbHNbaV0pOwoKCQkJaWYgKGNvbnRyb2wuaWQu aW5kZXhPZih0aGlzLmVkaXRvcmlkICsgJ19jbWRfJykgIT0gLTEpCgkJCXsKCQkJ CXRoaXMuaW5pdF9jb21tYW5kX2J1dHRvbihjb250cm9sKTsKCQkJfQoJCQllbHNl IGlmIChjb250cm9sLmlkLmluZGV4T2YodGhpcy5lZGl0b3JpZCArICdfcG9wdXBf JykgIT0gLTEpCgkJCXsKCQkJCXRoaXMuaW5pdF9wb3B1cF9idXR0b24oY29udHJv bCk7CgkJCX0KCQl9CgoJCXNldF91bnNlbGVjdGFibGUodGhpcy5jb250cm9sYmFy KTsKCX07CgoJLyoqCgkqIEluaXQgU21pbGllcwoJKi8KCXRoaXMuaW5pdF9zbWls aWVzID0gZnVuY3Rpb24oc21pbGllX2NvbnRhaW5lcikKCXsKCQlpZiAoc21pbGll X2NvbnRhaW5lciAhPSBudWxsKQoJCXsKCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90 YWdzKHNtaWxpZV9jb250YWluZXIsICdpbWcnKTsKCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQl7CgkJCQlpZiAoc21pbGllc1tp XS5pZCAmJiBzbWlsaWVzW2ldLmlkLmluZGV4T2YoJ19zbWlsaWVfJykgIT0gZmFs c2UpCgkJCQl7CgkJCQkJc21pbGllc1tpXS5zdHlsZS5jdXJzb3IgPSBwb2ludGVy X2N1cnNvcjsKCQkJCQlzbWlsaWVzW2ldLmVkaXRvcmlkID0gdGhpcy5lZGl0b3Jp ZDsKCQkJCQlzbWlsaWVzW2ldLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLnNtaWxpZV9vbmNsaWNrOwoJCQkJCXNtaWxpZXNbaV0udW5z ZWxlY3RhYmxlID0gJ29uJzsKCQkJCX0KCQkJfQoJCX0KCX0KCgkvKioKCSogSW5p dCBjb21tYW5kIGJ1dHRvbiAoYiwgaSwgdSBldGMuKQoJKgoJKiBAcGFyYW0Jb2Jq ZWN0CUN1cnJlbnQgSFRNTCBidXR0b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9jb21t YW5kX2J1dHRvbiA9IGZ1bmN0aW9uKG9iaikKCXsKCQlvYmouY21kID0gb2JqLmlk LnN1YnN0cihvYmouaWQuaW5kZXhPZignX2NtZF8nKSArIDUpOwoJCW9iai5lZGl0 b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJdGhpcy5idXR0b25zW29iai5jbWRdID0g b2JqOwoKCQlpZiAob2JqLmNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlpZiAo QUpBWF9Db21wYXRpYmxlKQoJCQl7CgkJCQlvYmouc3RhdGUgPSB0aGlzLnd5c2l3 eWdfbW9kZSA/IHRydWUgOiBmYWxzZTsKCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5 bGUob2JqLCAnYnV0dG9uJywgdGhpcy53eXNpd3lnX21vZGUgPyAnc2VsZWN0ZWQn IDogJ25vcm1hbCcpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJb2JqLnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQob2JqKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlvYmou c3RhdGUgPSBmYWxzZTsKCQkJb2JqLm1vZGUgPSAnbm9ybWFsJzsKCQl9CgoJCS8v IGV2ZW50IGhhbmRsZXJzCgkJb2JqLm9uY2xpY2sgPSBvYmoub25tb3VzZWRvd24g PSBvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3VzZW91dCA9IHZCX1RleHRfRWRp dG9yX0V2ZW50cy5wcm90b3R5cGUuY29tbWFuZF9idXR0b25fb25tb3VzZWV2ZW50 OwoJfQoKCS8qKgoJKiBJbml0IHBvcHVwIGJ1dHRvbiAoZm9yZWNvbG9yLCBmb250 bmFtZSBldGMuKQoJKgoJKiBAcGFyYW0Jb2JqZWN0CUN1cnJlbnQgSFRNTCBidXR0 b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9wb3B1cF9idXR0b24gPSBmdW5jdGlvbihv YmopCgl7CgkJb2JqLmNtZCA9IG9iai5pZC5zdWJzdHIob2JqLmlkLmluZGV4T2Yo J19wb3B1cF8nKSArIDcpOwoKCQlpZiAodGhpcy5wb3B1cG1vZGUpCgkJewoJCQkv LyByZWdpc3RlciBwb3B1cCBtZW51IGNvbnRyb2wKCQkJdkJtZW51LnJlZ2lzdGVy KG9iai5pZCwgdHJ1ZSk7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLm9wZW5fc3Rl cHMgPSA1OwoKCQkJb2JqLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJb2Jq LnN0YXRlID0gZmFsc2U7CgkJCXRoaXMuYnV0dG9uc1tvYmouY21kXSA9IG9iajsK CgkJCWlmIChvYmouY21kID09ICdmb250bmFtZScpCgkJCXsKCQkJCXRoaXMuZm9u dG91dCA9IGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19mb250X291dCcp OwoJCQkJdGhpcy5mb250b3V0LmlubmVySFRNTCA9IG9iai50aXRsZTsKCQkJCXRo aXMuZm9udG9wdGlvbnMgPSB7JycgOiB0aGlzLmZvbnRvdXR9OwoKCQkJCWZvciAo dmFyIG9wdGlvbiBpbiBmb250b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgZGl2ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQkJZGl2LmlkID0gdGhp cy5lZGl0b3JpZCArICdfZm9udG9wdGlvbl8nICsgZm9udG9wdGlvbnNbb3B0aW9u XTsKCQkJCQlkaXYuc3R5bGUud2lkdGggPSB0aGlzLmZvbnRvdXQuc3R5bGUud2lk dGg7CgkJCQkJZGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCQkJZGl2Lmlu bmVySFRNTCA9IGZvbnRvcHRpb25zW29wdGlvbl07CgkJCQkJdGhpcy5mb250b3B0 aW9uc1tmb250b3B0aW9uc1tvcHRpb25dXSA9IHRoaXMuZm9udG91dC5wYXJlbnRO b2RlLmFwcGVuZENoaWxkKGRpdik7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAob2Jq LmNtZCA9PSAnZm9udHNpemUnKQoJCQl7CgkJCQl0aGlzLnNpemVvdXQgPSBmZXRj aF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfc2l6ZV9vdXQnKTsKCQkJCXRoaXMu c2l6ZW91dC5pbm5lckhUTUwgPSBvYmoudGl0bGU7CgkJCQl0aGlzLnNpemVvcHRp b25zID0geycnIDogdGhpcy5zaXplb3V0fTsKCgkJCQlmb3IgKHZhciBvcHRpb24g aW4gc2l6ZW9wdGlvbnMpCgkJCQl7CgkJCQkJdmFyIGRpdiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCWRpdi5pZCA9IHRoaXMuZWRpdG9yaWQg KyAnX3NpemVvcHRpb25fJyArIHNpemVvcHRpb25zW29wdGlvbl07CgkJCQkJZGl2 LnN0eWxlLndpZHRoID0gdGhpcy5zaXplb3V0LnN0eWxlLndpZHRoOwoJCQkJCWRp di5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQkJCWRpdi5pbm5lckhUTUwgPSBz aXplb3B0aW9uc1tvcHRpb25dOwoJCQkJCXRoaXMuc2l6ZW9wdGlvbnNbc2l6ZW9w dGlvbnNbb3B0aW9uXV0gPSB0aGlzLnNpemVvdXQucGFyZW50Tm9kZS5hcHBlbmRD aGlsZChkaXYpOwoJCQkJfQoJCQl9CgoJCQkvLyBleHRlbmQgb25tb3VzZW92ZXIK CQkJb2JqLl9vbm1vdXNlb3ZlciA9IG9iai5vbm1vdXNlb3ZlcjsKCQkJLy8gZXh0 ZW5kIG9uY2xpY2sKCQkJb2JqLl9vbmNsaWNrID0gb2JqLm9uY2xpY2s7CgoJCQkv LyBldmVudCBoYW5kbGVycwoJCQlvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3Vz ZW91dCA9IG9iai5vbmNsaWNrID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5wb3B1cF9idXR0b25fb25tb3VzZWV2ZW50OwoKCQkJLy8gZXh0ZW5kIG1l bnUgc2hvdwoJCQl2Qm1lbnUubWVudXNbb2JqLmlkXS5fc2hvdyA9IHZCbWVudS5t ZW51c1tvYmouaWRdLnNob3c7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLnNob3cg PSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnBvcHVwX2J1dHRvbl9z aG93OwoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmJ1aWxkX3NlbGVjdChvYmopOwoJ CX0KCX0KCgkvKioKCSogUmVwbGFjZSB0aGUgcG9wdXAgY29udHJvbHMgd2l0aCA8 c2VsZWN0PiBtZW51cyBmb3IgcnViYmlzaCBicm93c2VycwoJKgoJKiBAcGFyYW0J b2JqZWN0CVRoZSBwb3B1cCBjb250cm9sIGVsZW1lbnQKCSovCgl0aGlzLmJ1aWxk X3NlbGVjdCA9IGZ1bmN0aW9uKG9iaikKCXsKCQl2YXIgc2VsID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CgkJc2VsLmlkID0gdGhpcy5lZGl0b3Jp ZCArICdfc2VsZWN0XycgKyBvYmouY21kOwoJCXNlbC5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJc2VsLmNtZCA9IG9iai5jbWQ7CgoJCXZhciBvcHQgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQlvcHQudmFsdWUgPSAnJzsK CQlvcHQudGV4dCA9IG9iai50aXRsZTsKCQlzZWwuYWRkKG9wdCwgaXNfaWUgPyBz ZWwub3B0aW9ucy5sZW5ndGggOiBudWxsKTsKCgkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCW9wdC52YWx1ZSA9ICcnOwoJCW9w dC50ZXh0ID0gJyAnOwoJCXNlbC5hZGQob3B0LCBpc19pZSA/IHNlbC5vcHRpb25z Lmxlbmd0aCA6IG51bGwpOwoKCQlzd2l0Y2ggKG9iai5jbWQpCgkJewoJCQljYXNl ICdmb250bmFtZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZm9udG9w dGlvbnMubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IGZvbnRv cHRpb25zW2ldOwoJCQkJCW9wdC50ZXh0ID0gKGZvbnRvcHRpb25zW2ldLmxlbmd0 aCA+IDEwID8gKGZvbnRvcHRpb25zW2ldLnN1YnN0cigwLCAxMCkgKyAnLi4uJykg OiBmb250b3B0aW9uc1tpXSk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2Vs Lm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdl ID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3Nl bGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdmb250c2l6 ZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZW9wdGlvbnMubGVu Z3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IHNpemVvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gc2l6ZW9wdGlvbnNbaV07CgkJCQkJc2VsLmFkZChv cHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJ CQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJ CQljYXNlICdmb3JlY29sb3InOgoJCQl7CgkJCQlmb3IgKHZhciBpIGluIGNvbG9y b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnb3B0aW9uJyk7CgkJCQkJb3B0LnZhbHVlID0gY29sb3JvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gUEhQLnRyaW0oKGNvbG9yb3B0aW9uc1tpXS5sZW5n dGggPiA1ID8gKGNvbG9yb3B0aW9uc1tpXS5zdWJzdHIoMCwgNSkgKyAnLi4uJykg OiBjb2xvcm9wdGlvbnNbaV0pLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFtBLVpdKScs ICdnJyksICcgJDEnKSk7CgkJCQkJb3B0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9 IGk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3Ro IDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsK CQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdzbWlsaWUnOgoJCQl7CgkJCQlmb3Ig KHZhciBjYXQgaW4gc21pbGllb3B0aW9ucykKCQkJCXsKCQkJCQlmb3IgKHZhciBz bWlsaWVpZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCQkJewoJCQkJCQlpZiAo c21pbGllaWQgIT0gJ21vcmUnKQoJCQkJCQl7CgkJCQkJCQl2YXIgb3B0ID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CgkJCQkJCQlvcHQudmFsdWUg PSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0LnRl eHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0 LnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJCQlvcHQuc21pbGllcGF0aCA9IHNt aWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVpZF1bMF07CgkJCQkJCQlvcHQuc21pbGll dGl0bGUgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzJdOwoJCQkJCQkJ c2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7 CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVzZWxlY3Rfb25jaGFuZ2U7 CgkJCQlicmVhazsKCQkJfQoKCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJCQkJc2Vs Lm9ubW91c2VvdmVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5h dHRhY2hzZWxlY3Rfb25tb3VzZW92ZXI7CgkJCQlzZWwub25jaGFuZ2UgPSB2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbmNoYW5n ZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQl3aGlsZSAob2JqLmhhc0NoaWxkTm9k ZXMoKSkKCQl7CgkJCW9iai5yZW1vdmVDaGlsZChvYmouZmlyc3RDaGlsZCk7CgkJ fQoKCQl0aGlzLmJ1dHRvbnNbb2JqLmNtZF0gPSBvYmouYXBwZW5kQ2hpbGQoc2Vs KTsKCX0KCgkvKioKCSogSW5pdCBtZW51IGNvbnRyb2xzIGZvciB0aGUgZWRpdG9y CgkqCgkqIEBwYXJhbQlvYmplY3QJSFRNTCBtZW51IG5vZGUKCSovCgl0aGlzLmlu aXRfcG9wdXBfbWVudSA9IGZ1bmN0aW9uKG9iaikKCXsKCQlpZiAodGhpcy5kaXNh YmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCXN3aXRjaCAob2JqLmNtZCkKCQl7 CgkJCWNhc2UgJ2ZvbnRuYW1lJzoKCQkJewoJCQkJdmFyIG1lbnUgPSB0aGlzLmlu aXRfbWVudV9jb250YWluZXIoJ2ZvbnRuYW1lJywgJzIwMHB4JywgJzI1MHB4Jywg J2F1dG8nKTsKCQkJCXRoaXMuYnVpbGRfZm9udG5hbWVfcG9wdXAob2JqLCBtZW51 KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJewoJCQkJ dmFyIG1lbnUgPSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ2ZvbnRzaXplJywg J2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQl0aGlzLmJ1aWxkX2ZvbnRz aXplX3BvcHVwKG9iaiwgbWVudSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdm b3JlY29sb3InOgoJCQl7CgkJCQl2YXIgbWVudSA9IHRoaXMuaW5pdF9tZW51X2Nv bnRhaW5lcignZm9yZWNvbG9yJywgJ2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7 CgkJCQl0aGlzLmJ1aWxkX2ZvcmVjb2xvcl9wb3B1cChvYmosIG1lbnUpOwoJCQkJ YnJlYWs7CgkJCX0KCQkJY2FzZSAnc21pbGllJzoKCQkJewoJCQkJdmFyIG1lbnUg PSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ3NtaWxpZScsICcxNzVweCcsICcy NTBweCcsICdhdXRvJyk7CgkJCQl0aGlzLmJ1aWxkX3NtaWxpZV9wb3B1cChvYmos IG1lbnUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJ CQkJaWYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyAhPSAndW5kZWZpbmVkJyAmJiB2 Ql9BdHRhY2htZW50cy5oYXNfYXR0YWNobWVudHMoKSkKCQkJCXsKCQkJCQl2YXIg bWVudSA9IHRoaXMuaW5pdF9tZW51X2NvbnRhaW5lcignYXR0YWNoJywgJ2F1dG8n LCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQkJdGhpcy5idWlsZF9hdHRhY2htZW50 c19wb3B1cChtZW51LCBvYmopOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7CgkJCQl9CgkJCX0KCQl9CgoJCXRoaXMucG9wdXBzW29iai5jbWRd ID0gdGhpcy5jb250cm9sYmFyLmFwcGVuZENoaWxkKG1lbnUpOwoKCQlzZXRfdW5z ZWxlY3RhYmxlKG1lbnUpOwoJfTsKCgkvKioKCSogSW5pdCBNZW51IENvbnRhaW5l ciBESVYKCSoKCSogQHBhcmFtCXN0cmluZwlDb21tYW5kIHN0cmluZyAoZm9yZWNv bG9yLCBmb250bmFtZSBldGMuKQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyB3aWR0aCBm b3IgdGhlIG1lbnUKCSogQHBhcmFtCXN0cmluZwlDU1MgaGVpZ2h0IGZvciB0aGUg bWVudQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyBvdmVyZmxvdyBmb3IgdGhlIG1lbnUK CSoKCSogQHJldHVybglvYmplY3QJTmV3bHkgY3JlYXRlZCBtZW51IGVsZW1lbnQK CSovCgl0aGlzLmluaXRfbWVudV9jb250YWluZXIgPSBmdW5jdGlvbihjbWQsIHdp ZHRoLCBoZWlnaHQsIG92ZXJmbG93KQoJewoJCXZhciBtZW51ID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CgoJCW1lbnUuaWQgPSB0aGlzLmVkaXRvcmlk ICsgJ19wb3B1cF8nICsgY21kICsgJ19tZW51JzsKCQltZW51LmNsYXNzTmFtZSA9 ICd2Ym1lbnVfcG9wdXAnOwoJCW1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsK CQltZW51LnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JzsKCQltZW51LnN0eWxlLnBh ZGRpbmcgPSAnM3B4JzsKCQltZW51LnN0eWxlLndpZHRoID0gd2lkdGg7CgkJbWVu dS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7CgkJbWVudS5zdHlsZS5vdmVyZmxvdyA9 IG92ZXJmbG93OwoKCQlyZXR1cm4gbWVudTsKCX0KCgkvKioKCSogQnVpbGQgRm9u dCBOYW1lIFBvcHVwIENvbnRlbnRzCgkqCgkqIEBwYXJhbQlvYmplY3QJVGhlIGNv bnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBt ZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2ZvbnRuYW1lX3Bv cHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAodmFyIG4gaW4gZm9u dG9wdGlvbnMpCgkJewoJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnZGl2Jyk7CgkJCW9wdGlvbi5pbm5lckhUTUwgPSAnPGZvbnQgZmFjZT0i JyArIGZvbnRvcHRpb25zW25dICsgJyI+JyArIGZvbnRvcHRpb25zW25dICsgJzwv Zm9udD4nOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29mb250JzsKCQkJb3B0aW9u LnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0JzsKCQkJb3B0aW9uLnRpdGxlID0gZm9u dG9wdGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24u Y29udHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5l ZGl0b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2Vv dXQgPSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2Vl dmVudDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBw ZW5kQ2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvbnQgU2l6 ZSBQb3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9s IG9iamVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBj b250YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb250c2l6ZV9wb3B1cCA9 IGZ1bmN0aW9uKG9iaiwgbWVudSkKCXsKCQlmb3IgKHZhciBuIGluIHNpemVvcHRp b25zKQoJCXsKCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2RpdicpOwoJCQlvcHRpb24uaW5uZXJIVE1MID0gJzxmb250IHNpemU9IicgKyBz aXplb3B0aW9uc1tuXSArICciPicgKyBzaXplb3B0aW9uc1tuXSArICc8L2ZvbnQ+ JzsKCQkJb3B0aW9uLmNsYXNzTmFtZSA9ICdvc2l6ZSc7CgkJCW9wdGlvbi5zdHls ZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsKCQkJb3B0aW9uLnRpdGxlID0gc2l6ZW9w dGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24uY29u dHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0 b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2VvdXQg PSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVu dDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBwZW5k Q2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvcmVDb2xvciBQ b3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9sIG9i amVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBjb250 YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb3JlY29sb3JfcG9wdXAgPSBm dW5jdGlvbihvYmosIG1lbnUpCgl7CgkJdmFyIGNvbG9yb3V0ID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yX291dCcpOwoJCWNvbG9yb3V0LmVk aXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQljb2xvcm91dC5vbmNsaWNrID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5jb2xvcm91dF9vbmNsaWNrOwoK CQl2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOwoJ CXRhYmxlLmNlbGxQYWRkaW5nID0gMDsKCQl0YWJsZS5jZWxsU3BhY2luZyA9IDA7 CgkJdGFibGUuYm9yZGVyID0gMDsKCgkJdmFyIGkgPSAwOwoJCWZvciAodmFyIGhl eCBpbiBjb2xvcm9wdGlvbnMpCgkJewoJCQlpZiAoaSAlIDggPT0gMCkKCQkJewoJ CQkJdmFyIHRyID0gdGFibGUuaW5zZXJ0Um93KC0xKTsKCQkJfQoJCQlpKys7CgoJ CQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWRp di5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCgkJ CXZhciBvcHRpb24gPSB0ci5pbnNlcnRDZWxsKC0xKTsKCQkJb3B0aW9uLnN0eWxl LnRleHRBbGlnbiA9ICdjZW50ZXInOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29j b2xvcic7CgkJCW9wdGlvbi5hcHBlbmRDaGlsZChkaXYpOwoJCQlvcHRpb24uY21k ID0gb2JqLmNtZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsK CQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7CgkJCW9wdGlvbi5jb2xvcm5h bWUgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCQkJb3B0aW9uLmlkID0gdGhpcy5lZGl0 b3JpZCArICdfY29sb3JfJyArIGNvbG9yb3B0aW9uc1toZXhdOwoJCQlvcHRpb24u b25tb3VzZW92ZXIgPSBvcHRpb24ub25tb3VzZW91dCA9IG9wdGlvbi5vbm1vdXNl dXAgPSBvcHRpb24ub25tb3VzZWRvd24gPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZWV2ZW50OwoJCQlvcHRpb24ub25j bGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuY29sb3JvcHRp b25fb25jbGljazsKCQl9CgoJCW1lbnUuYXBwZW5kQ2hpbGQodGFibGUpOwoJfQoK CS8qKgoJKiBCdWlsZCBTbWlsaWUgUG9wdXAgQ29udGVudHMKCSoKCSogQHBhcmFt CW9iamVjdAlUaGUgY29udHJvbCBvYmplY3QgZm9yIHRoZSBtZW51CgkqIEBwYXJh bQlvYmplY3QJVGhlIG1lbnUgY29udGFpbmVyIG9iamVjdAoJKi8KCXRoaXMuYnVp bGRfc21pbGllX3BvcHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAo dmFyIGNhdCBpbiBzbWlsaWVvcHRpb25zKQoJCXsKCQkJdmFyIGNhdGVnb3J5ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWNhdGVnb3J5LmNsYXNz TmFtZSA9ICd0aGVhZCc7CgkJCWNhdGVnb3J5LmlubmVySFRNTCA9IGNhdDsKCQkJ bWVudS5hcHBlbmRDaGlsZChjYXRlZ29yeSk7CgoJCQlmb3IgKHZhciBzbWlsaWVp ZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCXsKCQkJCWlmIChzbWlsaWVpZCA9 PSAnbW9yZScpCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAndGhlYWQn OwoJCQkJCW9wdGlvbi5pbm5lckhUTUwgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21p bGllaWRdOwoJCQkJCW9wdGlvbi5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsKCQkJCQlvcHRpb24uZWRpdG9yaWQgPSB0aGlzLmVkaXRvcmlkOwoJCQkJCW9w dGlvbi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJCW9wdGlvbi5vbmNsaWNrID0g dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVtb3JlX29uY2xp Y2s7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7 CgkJCQkJb3B0aW9uLnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJb3B0aW9uLnNt aWxpZXRleHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJ CW9wdGlvbi5zbWlsaWV0aXRsZSA9IHNtaWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVp ZF1bMl07CgoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQkJ b3B0aW9uLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iJyArIHNtaWxpZW9wdGlvbnNb Y2F0XVtzbWlsaWVpZF1bMF0gKyAnIiBhbHQ9IicgKyBzbWlsaWVvcHRpb25zW2Nh dF1bc21pbGllaWRdWzJdICsgJyIgLz4gJyArIHNtaWxpZW9wdGlvbnNbY2F0XVtz bWlsaWVpZF1bMl07CgoJCQkJCW9wdGlvbi5vbm1vdXNlb3ZlciA9IG9wdGlvbi5v bm1vdXNlb3V0ID0gb3B0aW9uLm9ubW91c2Vkb3duID0gb3B0aW9uLm9ubW91c2V1 cCA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9v bm1vdXNlZXZlbnQ7CgoJCQkJCW9wdGlvbi5vbmNsaWNrID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVvcHRpb25fb25jbGljazsKCQkJCX0K CgkJCQltZW51LmFwcGVuZENoaWxkKG9wdGlvbik7CgkJCX0KCQl9Cgl9CgoJLyoq CgkqIEJ1aWxkIEF0dGFjaG1lbnRzIFBvcHVwCgkqCgkqIEBwYXJhbQlvYmplY3QJ VGhlIGNvbnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBtZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2F0dGFj aG1lbnRzX3BvcHVwID0gZnVuY3Rpb24obWVudSwgb2JqKQoJewoJCWlmICh0aGlz LnBvcHVwbW9kZSkKCQl7CgkJCXdoaWxlIChtZW51Lmhhc0NoaWxkTm9kZXMoKSkK CQkJewoJCQkJbWVudS5yZW1vdmVDaGlsZChtZW51LmZpcnN0Q2hpbGQpOwoJCQl9 CgoJCQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCWRpdi5jb250cm9sa2V5 ID0gb2JqLmlkOwoJCQlkaXYuY2xhc3NOYW1lID0gJ3RoZWFkJzsKCQkJZGl2LnN0 eWxlLmN1cnNvciA9IHBvaW50ZXJfY3Vyc29yOwoJCQlkaXYuaW5uZXJIVE1MID0g ZmV0Y2hfb2JqZWN0KCdtYW5hZ2VfYXR0YWNobWVudHNfYnV0dG9uJykudmFsdWU7 CgkJCWRpdi50aXRsZSA9IGZldGNoX29iamVjdCgnbWFuYWdlX2F0dGFjaG1lbnRz X2J1dHRvbicpLnRpdGxlOwoJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuYXR0YWNobWFuYWdlX29uY2xpY2s7CgoJCQltZW51 LmFwcGVuZENoaWxkKGRpdik7CgoJCQl2YXIgYXR0YWNoX2NvdW50ID0gMDsKCQkJ Zm9yICh2YXIgaWQgaW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsK CQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCQlkaXYuY29udHJvbGtl eSA9IG9iai5pZDsKCQkJCWRpdi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQlk aXYuYXR0YWNobWVudGlkID0gaWQ7CgkJCQlkaXYuaW5uZXJIVE1MID0gJzxpbWcg c3JjPSInICsgdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHNbaWRdWydpbWdwYXRo J10gKyAnIiBhbHQ9IiIgLz4gJyArIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRz W2lkXVsnZmlsZW5hbWUnXTsKCQkJCWRpdi5vbm1vdXNlb3ZlciA9IGRpdi5vbm1v dXNlb3V0ID0gZGl2Lm9ubW91c2Vkb3duID0gZGl2Lm9ubW91c2V1cCA9IHZCX1Rl eHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNlZXZl bnQ7CgkJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuYXR0YWNob3B0aW9uX29uY2xpY2s7CgoJCQkJbWVudS5hcHBlbmRDaGls ZChkaXYpOwoJCQkJYXR0YWNoX2NvdW50Kys7CgkJCX0KCQkJaWYgKGF0dGFjaF9j b3VudCA+IDEpCgkJCXsKCQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKTsKCQkJCWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQKCQkJ CWRpdi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJZGl2LmNsYXNzTmFtZSA9ICdv c21pbGllJzsKCQkJCWRpdi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOwoJCQkJ ZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzI1cHgnOwoJCQkJZGl2LmlubmVySFRN TCA9IHZicGhyYXNlWydpbnNlcnRfYWxsJ107CgkJCQlkaXYub25tb3VzZW92ZXIg PSBkaXYub25tb3VzZW91dCA9IGRpdi5vbm1vdXNlZG93biA9IGRpdi5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25f b25tb3VzZWV2ZW50OwoJCQkJZGl2Lm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9F dmVudHMucHJvdG90eXBlLmF0dGFjaGluc2VydGFsbF9vbmNsaWNrOwoKCQkJCW1l bnUuYXBwZW5kQ2hpbGQoZGl2KTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQl3aGls ZSAobWVudS5vcHRpb25zLmxlbmd0aCA+IDIpCgkJCXsKCQkJCW1lbnUucmVtb3Zl KG1lbnUub3B0aW9ucy5sZW5ndGggLSAxKTsKCQkJfQoKCQkJZm9yICh2YXIgaWQg aW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsKCQkJCXZhciBvcHQg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQkJCW9wdC52YWx1 ZSA9IGlkOwoJCQkJb3B0LnRleHQgPSB2Ql9BdHRhY2htZW50cy5hdHRhY2htZW50 c1tpZF1bJ2ZpbGVuYW1lJ107CgkJCQltZW51LmFkZChvcHQsIGlzX2llID8gbWVu dS5vcHRpb25zLmxlbmd0aCA6IG51bGwpOwoJCQl9CgkJfQoKCQlzZXRfdW5zZWxl Y3RhYmxlKG1lbnUpOwoJfQoKCS8qKgoJKiBNZW51IENvbnRleHQKCSoKCSogQHBh cmFtCW9iamVjdAlUaGUgbWVudSBjb250YWluZXIgb2JqZWN0CgkqIEBwYXJhbQlz dHJpbmcJVGhlIHN0YXRlIG9mIHRoZSBjb250cm9sCgkqLwoJdGhpcy5tZW51X2Nv bnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlKQoJewoJCWlmICh0aGlzLmRpc2Fi bGVkKQoJCXsKCQkJcmV0dXJuOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJ ewoJCQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIG1lbnUgaXMgb3BlbgoJCQl7CgkJ CQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdkb3duJyk7 CgkJCQlicmVhazsKCQkJfQoKCQkJZGVmYXVsdDoKCQkJewoJCQkJc3dpdGNoIChz dGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0 aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJ ewoJCQkJCQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ3BvcHVwJywgJ2Rv d24nKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNldXAnOgoJ CQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdob3ZlcicpOwoJCQkJCQlicmVhazsK CQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9OwoKCS8qKgoJKiBCdXR0b24gQ29udGV4 dAoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBidXR0b24gb2JqZWN0CgkqIEBwYXJh bQlzdHJpbmcJSW5jb21pbmcgZXZlbnQgdHlwZQoJKiBAcGFyYW0Jc3RyaW5nCUNv bnRyb2wgdHlwZSAtICdidXR0b24nIG9yICdtZW51JwoJKi8KCXRoaXMuYnV0dG9u X2NvbnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlLCBjb250cm9sdHlwZSkKCXsK CQlpZiAodGhpcy5kaXNhYmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCWlmICh0 eXBlb2YgY29udHJvbHR5cGUgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQljb250cm9s dHlwZSA9ICdidXR0b24nOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJewoJ CQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIGJ1dHRvbgoJCQl7CgkJCQlzd2l0Y2gg KHN0YXRlKQoJCQkJewoJCQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJY2FzZSAn bW91c2Vkb3duJzoKCQkJCQljYXNlICdtb3VzZXVwJzoKCQkJCQl7CgkJCQkJCXRo aXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCBjb250cm9sdHlwZSwgJ2Rvd24nKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlb3V0JzoKCQkJCQl7 CgkJCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCAnYnV0dG9uJywgJ3Nl bGVjdGVkJyk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJ CQl9CgoJCQlkZWZhdWx0OiAvLyBub3Qgc2VsZWN0ZWQKCQkJewoJCQkJc3dpdGNo IChzdGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW92ZXInOgoJCQkJCWNhc2Ug J21vdXNldXAnOgoJCQkJCXsKCQkJCQkJdGhpcy5zZXRfY29udHJvbF9zdHlsZShv YmosIGNvbnRyb2x0eXBlLCAnaG92ZXInKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJ CQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdkb3duJyk7CgkJCQkJCWJyZWFr OwoJCQkJCX0KCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0aGlz LnNldF9jb250cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9 OwoKCS8qKgoJKiBTZXQgQ29udHJvbCBTdHlsZQoJKgoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBvYmplY3QgdG8gYmUgc3R5bGVkCgkqIEBwYXJhbQlzdHJpbmcJQ29udHJv bCB0eXBlIC0gJ2J1dHRvbicgb3IgJ21lbnUnCgkqIEBwYXJhbQlzdHJpbmcJVGhl IG1vZGUgdG8gdXNlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpc3R5bGVzIGFycmF5 CgkqLwoJdGhpcy5zZXRfY29udHJvbF9zdHlsZSA9IGZ1bmN0aW9uKG9iaiwgY29u dHJvbHR5cGUsIG1vZGUpCgl7CgkJaWYgKG9iai5tb2RlICE9IG1vZGUpCgkJewoJ CQlvYmoubW9kZSA9IG1vZGU7CgoJCQkvLyBjb25zdHJ1Y3QgdGhlIG5hbWUgb2Yg dGhlIGFwcHJvcHJpYXRlIGFycmF5IGtleSBmcm9tIHRoZSBpc3R5bGVzIGFycmF5 CgkJCWlzdHlsZSA9ICdwaV8nICsgY29udHJvbHR5cGUgKyAnXycgKyBvYmoubW9k ZTsKCgkJCS8vIHNldCBlbGVtZW50IGJhY2tncm91bmQsIGNvbG9yLCBwYWRkaW5n IGFuZCBib3JkZXIKCQkJaWYgKHR5cGVvZiBpc3R5bGVzICE9ICd1bmRlZmluZWQn ICYmIHR5cGVvZiBpc3R5bGVzW2lzdHlsZV0gIT0gJ3VuZGVmaW5lZCcpCgkJCXsK CQkJCW9iai5zdHlsZS5iYWNrZ3JvdW5kID0gaXN0eWxlc1tpc3R5bGVdWzBdOwoJ CQkJb2JqLnN0eWxlLmNvbG9yID0gaXN0eWxlc1tpc3R5bGVdWzFdOwoJCQkJaWYg KGNvbnRyb2x0eXBlICE9ICdtZW51JykKCQkJCXsKCQkJCQlvYmouc3R5bGUucGFk ZGluZyA9IGlzdHlsZXNbaXN0eWxlXVsyXTsKCQkJCX0KCQkJCW9iai5zdHlsZS5i b3JkZXIgPSBpc3R5bGVzW2lzdHlsZV1bM107CgoJCQkJdmFyIHRkcyA9IGZldGNo X3RhZ3Mob2JqLCAndGQnKTsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGRzLmxl bmd0aDsgaSsrKQoJCQkJewoJCQkJCXN3aXRjaCAodGRzW2ldLmNsYXNzTmFtZSkK CQkJCQl7CgkJCQkJCS8vIHNldCB0aGUgcmlnaHQtYm9yZGVyIGZvciBwb3B1cF9m ZWVkYmFjayBjbGFzcyBlbGVtZW50cwoJCQkJCQljYXNlICdwb3B1cF9mZWVkYmFj ayc6CgkJCQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJSaWdodCA9ICht b2RlID09ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVszXSA6 IGlzdHlsZXNbaXN0eWxlXVszXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJ CQkvLyBzZXQgdGhlIGJvcmRlciBjb2xvdXIgZm9yIHBvcHVwX3BpY2tidXR0b24g Y2xhc3MgZWxlbWVudHMKCQkJCQkJY2FzZSAncG9wdXBfcGlja2J1dHRvbic6CgkJ CQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9IChtb2RlID09 ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVswXSA6IGlzdHls ZXNbaXN0eWxlXVswXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJCQkvLyBz ZXQgdGhlIGxlZnQtcGFkZGluZyBhbmQgbGVmdC1ib3JkZXIgZm9yIGFsdF9waWNr YnV0dG9uIGVsZW1lbnRzCgkJCQkJCWNhc2UgJ2FsdF9waWNrYnV0dG9uJzoKCQkJ CQkJewoJCQkJCQkJaWYgKG9iai5zdGF0ZSkKCQkJCQkJCXsKCQkJCQkJCQl0ZHNb aV0uc3R5bGUucGFkZGluZ0xlZnQgPSBpc3R5bGVzWydwaV9idXR0b25fbm9ybWFs J11bMl07CgkJCQkJCQkJdGRzW2ldLnN0eWxlLmJvcmRlckxlZnQgPSBpc3R5bGVz WydwaV9idXR0b25fbm9ybWFsJ11bM107CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJ CQkJCQl7CgkJCQkJCQkJdGRzW2ldLnN0eWxlLnBhZGRpbmdMZWZ0ID0gaXN0eWxl c1tpc3R5bGVdWzJdOwoJCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJMZWZ0ID0g aXN0eWxlc1tpc3R5bGVdWzNdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJ fQoJCQl9CgkJfQoJfTsKCgkvKioKCSogRm9ybWF0IHRleHQKCSoKCSogQHBhcmFt CWV2ZW50CUV2ZW50IG9iamVjdAoJKiBAcGFyYW0Jc3RyaW5nCUZvcm1hdHRpbmcg Y29tbWFuZAoJKiBAcGFyYW0Jc3RyaW5nCU9wdGlvbmFsIGFyZ3VtZW50IHRvIHRo ZSBmb3JtYXR0aW5nIGNvbW1hbmQKCSoKCSogQHJldHVybglib29sZWFuCgkqLwoJ dGhpcy5mb3JtYXQgPSBmdW5jdGlvbihlLCBjbWQsIGFyZykKCXsKCQllID0gZG9f YW5fZShlKTsKCgkJaWYgKHRoaXMuZGlzYWJsZWQpCgkJewoJCQlyZXR1cm4gZmFs c2U7CgkJfQoKCQlpZiAoY21kICE9ICdyZWRvJykKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCX0K CgkJaWYgKGNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlzd2l0Y2hfZWRpdG9y X21vZGUodGhpcy5lZGl0b3JpZCk7CgkJCXJldHVybjsKCQl9CgkJZWxzZSBpZiAo Y21kLnN1YnN0cigwLCA2KSA9PSAncmVzaXplJykKCQl7CgkJCXRoaXMucmVzaXpl X2VkaXRvcihwYXJzZUludChjbWQuc3Vic3RyKDkpLCAxMCkgKiAocGFyc2VJbnQo Y21kLnN1YnN0cig3LCAxKSwgMTApID09ICcxJyA/IDEgOiAtMSkpOwoJCQlyZXR1 cm47CgkJfQoKCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCWlmIChjbWQuc3Vic3Ry KDAsIDQpID09ICd3cmFwJykKCQl7CgkJCXZhciByZXQgPSB0aGlzLndyYXBfdGFn cyhjbWQuc3Vic3RyKDYpLCAoY21kLnN1YnN0cig0LCAxKSA9PSAnMScgPyB0cnVl IDogZmFsc2UpKTsKCQl9CgkJZWxzZSBpZiAodGhpc1tjbWRdKQoJCXsKCQkJdmFy IHJldCA9IHRoaXNbY21kXShlKTsKCQl9CgkJZWxzZQoJCXsKCQkJdHJ5CgkJCXsK CQkJCXZhciByZXQgPSB0aGlzLmFwcGx5X2Zvcm1hdChjbWQsIGZhbHNlLCAodHlw ZW9mIGFyZyA9PSAndW5kZWZpbmVkJyA/IHRydWUgOiBhcmcpKTsKCQkJfQoJCQlj YXRjaChlKQoJCQl7CgkJCQl0aGlzLmhhbmRsZV9lcnJvcihjbWQsIGUpOwoJCQkJ dmFyIHJldCA9IGZhbHNlOwoJCQl9CgkJfQoKCQlpZiAoY21kICE9ICd1bmRvJykK CQl7CgkJCXRoaXMuaGlzdG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9y X2NvbnRlbnRzKCkpOwoJCX0KCgkJdGhpcy5zZXRfY29udGV4dChjbWQpOwoKCQl0 aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCXJldHVybiByZXQ7Cgl9OwoKCS8qKgoJKiBJ bnNlcnQgSW1hZ2UKCSoKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKiBA cGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgSW1hZ2UgVVJMCgkqCgkqIEByZXR1cm4J Ym9vbGVhbgoJKi8KCXRoaXMuaW5zZXJ0aW1hZ2UgPSBmdW5jdGlvbihlLCBpbWcp Cgl7CgkJaWYgKHR5cGVvZiBpbWcgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQlpbWcg PSB0aGlzLnNob3dfcHJvbXB0KHZicGhyYXNlWydlbnRlcl9pbWFnZV91cmwnXSwg J2h0dHA6Ly8nLCB0cnVlKTsKCQl9CgkJaWYgKGltZyA9IHRoaXMudmVyaWZ5X3By b21wdChpbWcpKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdpbnNl cnRpbWFnZScsIGZhbHNlLCBpbWcpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4g ZmFsc2U7CgkJfQoJfTsKCgkvKioKCSogV3JhcCBUYWdzCgkqCgkqIEBwYXJhbQlz dHJpbmcJVGFnIHRvIHdyYXAKCSogQHBhcmFtCWJvb2xlYW4JVXNlIG9wdGlvbj8K CSogQHBhcmFtCXN0cmluZwkoT3B0aW9uYWwpIHNlbGVjdGVkIHRleHQKCSoKCSog QHJldHVybglib29sZWFuCgkqLwoJdGhpcy53cmFwX3RhZ3MgPSBmdW5jdGlvbih0 YWduYW1lLCB1c2VvcHRpb24sIHNlbGVjdGlvbikKCXsKCQl0YWduYW1lID0gdGFn bmFtZS50b1VwcGVyQ2FzZSgpOwoKCQlzd2l0Y2ggKHRhZ25hbWUpCgkJewoJCQlj YXNlICdDT0RFJzoKCQkJY2FzZSAnSFRNTCc6CgkJCWNhc2UgJ1BIUCc6CgkJCXsK CQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdyZW1vdmVmb3JtYXQnKTsKCQkJfQoJCQli cmVhazsKCQl9CgoJCWlmICh0eXBlb2Ygc2VsZWN0aW9uID09ICd1bmRlZmluZWQn KQoJCXsKCQkJc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCWlm IChzZWxlY3Rpb24gPT09IGZhbHNlKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSAnJzsK CQkJfQoJCQllbHNlCgkJCXsKCQkJCXNlbGVjdGlvbiA9IG5ldyBTdHJpbmcoc2Vs ZWN0aW9uKTsKCQkJfQoJCX0KCgkJaWYgKHVzZW9wdGlvbiA9PT0gdHJ1ZSkKCQl7 CgkJCXZhciBvcHRpb24gPSB0aGlzLnNob3dfcHJvbXB0KGNvbnN0cnVjdF9waHJh c2UodmJwaHJhc2VbJ2VudGVyX3RhZ19vcHRpb24nXSwgKCdbJyArIHRhZ25hbWUg KyAnXScpKSwgJycsIGZhbHNlKTsKCQkJaWYgKG9wdGlvbiA9IHRoaXMudmVyaWZ5 X3Byb21wdChvcHRpb24pKQoJCQl7CgkJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRh Z25hbWUgKyAnPSInICsgb3B0aW9uICsgJyInICsgJ10nOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoJCWVsc2UgaWYgKHVzZW9w dGlvbiAhPT0gZmFsc2UpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25h bWUgKyAnPSInICsgdXNlb3B0aW9uICsgJyInICsgJ10nOwoJCX0KCQllbHNlCgkJ ewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25hbWUgKyAnXSc7CgkJfQoKCQl2 YXIgY2xvc2V0YWcgPSAnWy8nICsgdGFnbmFtZSArICddJzsKCQl2YXIgdGV4dCA9 IG9wZW50YWcgKyBzZWxlY3Rpb24gKyBjbG9zZXRhZzsKCgkJdGhpcy5pbnNlcnRf dGV4dCh0ZXh0LCBvcGVudGFnLnZCbGVuZ3RoKCksIGNsb3NldGFnLnZCbGVuZ3Ro KCkpOwoKCQlyZXR1cm4gZmFsc2U7Cgl9OwoKCS8qKgoJKiBDaGVjayBTcGVsbGlu ZyAodXNlcyBpZVNwZWxsIGZyb20gd3d3Lmllc3BlbGwuY29tKQoJKgoJKiBFdmVu dHVhbGx5IHdlIGhvcGUgdG8gaW50ZWdyYXRlIFNwZWxsQm91bmQgKGh0dHA6Ly9z cGVsbGJvdW5kLnNvdXJjZWZvcmdlLm5ldCkgZm9yIEdlY2tvLgoJKi8KCXRoaXMu c3BlbGxpbmcgPSBmdW5jdGlvbigpCgl7CgkJaWYgKGlzX2llKQoJCXsKCQkJdHJ5 CgkJCXsKCQkJCS8vIGF0dGVtcHQgdG8gaW5zdGFudGlhdGUgaWVTcGVsbAoJCQkJ ZXZhbCgibmV3IEEiICsgImN0aXYiICsgImVYIiArICJPYiIgKyAiamVjdCgnaWVT cGVsbC4iICsgImllU3BlbGxFeHQiICsgImVuc2lvbicpLkNoZWNrRCIgKyAib2N1 bWVudE5vZGUodGhpcy5zcGVsbG9iaik7Iik7CgkJCX0KCQkJY2F0Y2goZSkKCQkJ ewoJCQkJLy8gYXNrIGlmIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgaWVTcGVsbAoJ CQkJaWYgKGUubnVtYmVyID09IC0yMTQ2ODI3ODU5ICYmIGNvbmZpcm0odmJwaHJh c2VbJ2llc3BlbGxfbm90X2luc3RhbGxlZCddKSkKCQkJCXsKCQkJCQkvLyBvb2gg dGhleSBkby4uLgoJCQkJCXdpbmRvdy5vcGVuKCdodHRwOi8vd3d3Lmllc3BlbGwu Y29tL2Rvd25sb2FkLnBoJyArICdwJyk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSBp ZiAoaXNfbW96KQoJCXsKCQkJLy8gYXR0ZW1wdCB0byBpbnN0YW50aWF0ZSBTcGVs bEJvdW5kLi4uIHdoZW4gaXQgc3VwcG9ydHMgdGhpcyBiZWhhdmlvdXIKCQl9Cgl9 OwoKCS8qKgoJKiBIYW5kbGUgRXJyb3IKCSoKCSogQHBhcmFtCXN0cmluZwlDb21t YW5kIG5hbWUKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKi8KCXRoaXMu aGFuZGxlX2Vycm9yID0gZnVuY3Rpb24oY21kLCBlKQoJewoJfTsKCgkvKioKCSog U2hvdyBKUyBQcm9tcHQgYW5kIGZpbHRlciByZXN1bHQKCSoKCSogQHBhcmFtCXN0 cmluZwlUZXh0IGZvciB0aGUgZGlhbG9nCgkqIEBwYXJhbQlzdHJpbmcJRGVmYXVs dCB2YWx1ZSBmb3IgdGhlIGRpYWxvZwoJKiBAcGFyYW0Jc3RyaW5nCVdoZXRoZXIg dG8gZm9yY2UgTFRSIChmb3IgVVJMcywgZXRjKQoJKgoJKiBAcmV0dXJuCXN0cmlu ZwoJKi8KCXRoaXMuc2hvd19wcm9tcHQgPSBmdW5jdGlvbihkaWFsb2d0eHQsIGRl ZmF1bHR2YWwsIGZvcmNlbHRyKQoJewoJCWlmIChpc19pZTcpCgkJewoJCQkvLyBy ZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2VlICMyMzA5NykKCQkJdmFyIGJhc2VfdGFn ID0gZmV0Y2hfdGFncyhkb2N1bWVudCwgJ2Jhc2UnKTsKCQkJaWYgKGJhc2VfdGFn ICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCXsKCQkJCXZh ciBtb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdmFyIG1vZGFsX3ByZWZpeCA9ICcnOwoJCQl9CgoJCQl2YXIgcmV0 dXJudmFsdWUgPSB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKG1vZGFsX3ByZWZpeCAr ICJjbGllbnRzY3JpcHQvaWVwcm9tcHQuaHRtbD8iLCB7IHZhbHVlOiBkZWZhdWx0 dmFsLCBsYWJlbDogZGlhbG9ndHh0LCBkaXI6IGRvY3VtZW50LmRpciwgdGl0bGU6 IGRvY3VtZW50LnRpdGxlLCBmb3JjZWx0cjogKHR5cGVvZihmb3JjZWx0cikgIT0g InVuZGVmaW5lZCIgPyBmb3JjZWx0ciA6IGZhbHNlKSB9LCAiZGlhbG9nV2lkdGg6 MzIwcHg7IGRpYWxvZ0hlaWdodDoxNTBweDsgZGlhbG9nVG9wOiIgKyAocGFyc2VJ bnQod2luZG93LnNjcmVlblRvcCkgKyBwYXJzZUludCh3aW5kb3cuZXZlbnQuY2xp ZW50WSkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgLSAxMDAp ICsgInB4OyBkaWFsb2dMZWZ0OiIgKyAocGFyc2VJbnQod2luZG93LnNjcmVlbkxl ZnQpICsgcGFyc2VJbnQod2luZG93LmV2ZW50LmNsaWVudFgpICsgcGFyc2VJbnQo ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSAtIDE2MCkgKyAicHg7IHJlc2l6YWJs ZTogTm87Iik7CgkJfQoJCWVsc2UKCQl7CgkJCXZhciByZXR1cm52YWx1ZSA9IHBy b21wdChkaWFsb2d0eHQsIGRlZmF1bHR2YWwpOwoJCX0KCgkJLy8gZGVhbCB3aXRo IHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlCgkJaWYgKHR5cGVvZihyZXR1cm52YWx1 ZSkgPT0gInVuZGVmaW5lZCIpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWVs c2UgaWYgKHJldHVybnZhbHVlID09IGZhbHNlIHx8IHJldHVybnZhbHVlID09IG51 bGwpCgkJewoJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJfQoJCWVsc2UKCQl7CgkJ CXJldHVybiBQSFAudHJpbShuZXcgU3RyaW5nKHJldHVybnZhbHVlKSk7CgkJfQoJ fTsKCgkvKioKCSogQ2xvc2VzIGFuIG9wZW4gcHJvbXB0IChlbXVsYXRvcikgd2lu ZG93IG9wZW5lZCBieSBzaG93X3Byb21wdCgpIHVuZGVyIElFNysKCSovCgl0aGlz LmNsb3NlX3Byb21wdCA9IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5wcm9tcHRf cG9wdXApCgkJewoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidkJfRWRpdG9y XzAwMSIpLnJlbW92ZUNoaWxkKHRoaXMucHJvbXB0X3BvcHVwKTsKCQkJdGhpcy5w cm9tcHRfcG9wdXAgPSBudWxsOwoJCX0KCgkJdGhpcy5jaGVja19mb2N1cygpOwoJ fQoKCS8qKgoJKiBWZXJpZnkgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGphdmFzY3Jp cHQgcHJvbXB0CgkqCgkqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGJlIGNoZWNr ZWQKCSoKCSogQHJldHVybgltaXhlZAlGYWxzZSBvbiBmYWlsLCBzdHJpbmcgb24g c3VjY2VzcwoJKi8KCXRoaXMudmVyaWZ5X3Byb21wdCA9IGZ1bmN0aW9uKHN0cikK CXsKCQlzd2l0Y2goc3RyKQoJCXsKCQkJY2FzZSAnaHR0cDovLyc6CgkJCWNhc2Ug J251bGwnOgoJCQljYXNlICd1bmRlZmluZWQnOgoJCQljYXNlICdmYWxzZSc6CgkJ CWNhc2UgJyc6CgkJCWNhc2UgbnVsbDoKCQkJY2FzZSBmYWxzZToKCQkJCXJldHVy biBmYWxzZTsKCgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gc3RyOwoJCX0KCX07CgoJ LyoqCgkqIE9wZW4gU21pbGllIFdpbmRvdwoJKgoJKiBAcGFyYW0JaW50ZWdlcglX aW5kb3cgd2lkdGgKCSogQHBhcmFtCWludGVnZXIJV2luZG93IGhlaWdodAoJKi8K CXRoaXMub3Blbl9zbWlsaWVfd2luZG93ID0gZnVuY3Rpb24od2lkdGgsIGhlaWdo dCkKCXsKCQlzbWlsaWVfd2luZG93ID0gb3BlbldpbmRvdygnbWlzYy5waHA/JyAr IFNFU1NJT05VUkwgKyAnZG89Z2V0c21pbGllcyZlZGl0b3JpZD0nICsgdGhpcy5l ZGl0b3JpZCwgd2lkdGgsIGhlaWdodCwgJ3NtaWxpZV93aW5kb3cnKTsKCgkJd2lu ZG93Lm9udW5sb2FkID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWV3aW5kb3dfb251bmxvYWQ7Cgl9CgoJLyoqCgkqIFJlc2l6ZSBFZGl0b3IK CSoKCSogQHBhcmFtCWludGVnZXIJTnVtYmVyIG9mIHBpeGVscyBieSB3aGljaCB0 byByZXNpemUgdGhlIGVkaXRvcgoJKi8KCXRoaXMucmVzaXplX2VkaXRvciA9IGZ1 bmN0aW9uKGNoYW5nZSkKCXsKCQl2YXIgbmV3aGVpZ2h0ID0gcGFyc2VJbnQodGhp cy5lZGl0Ym94LnN0eWxlLmhlaWdodCwgMTApICsgY2hhbmdlOwoKCQlpZiAobmV3 aGVpZ2h0ID49IDEwMCkKCQl7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQg PSBuZXdoZWlnaHQgKyAncHgnOwoKCQkJLy8gcmVtZW1iZXIgdGhlIHNldHRpbmcg Zm9yIG5leHQgdGltZQoJCQlpZiAoY2hhbmdlICUgOTkgIT0gMCkKCQkJewoJCQkJ c2V0X2Nvb2tpZSgnZWRpdG9yX2hlaWdodCcsIG5ld2hlaWdodCk7CgkJCX0KCQl9 Cgl9OwoKCS8qKgoJKiBEZXN0cm95IFBvcHVwCgkqLwoJdGhpcy5kZXN0cm95X3Bv cHVwID0gZnVuY3Rpb24ocG9wdXBuYW1lKQoJewoJCXRoaXMucG9wdXBzW3BvcHVw bmFtZV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHVwc1twb3B1cG5h bWVdKTsKCQl0aGlzLnBvcHVwc1twb3B1cG5hbWVdID0gbnVsbDsKCX0KCgkvKioK CSogRGVzdHJveSBFZGl0b3IKCSovCgl0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigp Cgl7CgkJLy8gcmVzZXQgYWxsIGJ1dHRvbnMgdG8gZGVmYXVsdCBzdGF0ZQoJCWZv ciAodmFyIGkgaW4gdGhpcy5idXR0b25zKQoJCXsKCQkJdGhpcy5zZXRfY29udHJv bF9zdHlsZSh0aGlzLmJ1dHRvbnNbaV0sICdidXR0b24nLCAnbm9ybWFsJyk7CgkJ fQoKCQkvLyBkZXN0cm95IHBvcHVwcwoJCWZvciAodmFyIG1lbnUgaW4gdGhpcy5w b3B1cHMpCgkJewoJCQl0aGlzLmRlc3Ryb3lfcG9wdXAobWVudSk7CgkJfQoKCQlp ZiAodGhpcy5mb250b3B0aW9ucykKCQl7CgkJCWZvciAodmFyIGkgaW4gdGhpcy5m b250b3B0aW9ucykKCQkJewoJCQkJaWYgKGkgIT0gJycpCgkJCQl7CgkJCQkJdGhp cy5mb250b3B0aW9uc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZm9u dG9wdGlvbnNbaV0pOwoJCQkJfQoJCQl9CgkJCXRoaXMuZm9udG9wdGlvbnNbJydd LnN0eWxlLmRpc3BsYXkgPSAnJzsKCQl9CgoJCWlmICh0aGlzLnNpemVvcHRpb25z KQoJCXsKCQkJZm9yICh2YXIgaSBpbiB0aGlzLnNpemVvcHRpb25zKQoJCQl7CgkJ CQlpZiAoaSAhPSAnJykKCQkJCXsKCQkJCQl0aGlzLnNpemVvcHRpb25zW2ldLnBh cmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zaXplb3B0aW9uc1tpXSk7CgkJCQl9 CgkJCX0KCQkJdGhpcy5zaXplb3B0aW9uc1snJ10uc3R5bGUuZGlzcGxheSA9ICcn OwoJCX0KCX07CgoJLyoqCgkqIENvbGxhcHNlIHRoZSBjdXJyZW50IHNlbGVjdGlv biBhbmQgcGxhY2UgdGhlIGN1cnNvciB3aGVyZSB0aGUgZW5kIG9mIHRoZQoJKiBz ZWxlY3Rpb24gd2FzLgoJKi8KCXRoaXMuY29sbGFwc2Vfc2VsZWN0aW9uX2VuZCA9 IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5lZGl0ZG9jLnNlbGVjdGlvbikKCQl7 CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFu Z2UoKTsKCQkJLy8gZml4IGZvciBob3JyaWJseSBjb25mdXNpbmcgSUUgYnVnIHdo ZXJlIGl0IHJhbmRvbWx5IG1ha2VzIHRleHQgd2hpdGUgZm9yIGZ1bnNpZXMKCQkJ Ly8gc2VlIDMuNSBidWcgIzI3OQoJCQlldmFsKCJyYW5nZS4iICsgIm1vdmUiICsg IignY2hhcmFjdGVyJywgLTEpOyIpOwoJCQlyYW5nZS5jb2xsYXBzZShmYWxzZSk7 CgkJCXJhbmdlLnNlbGVjdCgpOwoJCX0KCQllbHNlIGlmIChkb2N1bWVudC5zZWxl Y3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKQoJCXsKCQkJ dmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CgkJ CXJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKCQkJcmFuZ2Uuc2VsZWN0KCk7CgkJfQoJ CWVsc2UgaWYgKHR5cGVvZih0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICE9 ICd1bmRlZmluZWQnKQoJCXsKCQkJdmFyIG9wbiA9IHRoaXMuZWRpdGRvYy5zZWxl Y3Rpb25TdGFydCArIDA7CgkJCXZhciBzZWxfdGV4dCA9IHRoaXMuZWRpdGRvYy52 YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0LCB0aGlzLmVk aXRkb2Muc2VsZWN0aW9uRW5kIC0gdGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0 KTsKCgkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCA9IHRoaXMuZWRpdGRv Yy5zZWxlY3Rpb25TdGFydCArIHNlbF90ZXh0LnZCbGVuZ3RoKCk7CgkJfQoJCWVs c2UgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pCgkJewoJCQkvLyBkb24ndCB0aGlu ayBJIGNhbiBkbyBhbnl0aGluZyBmb3IgdGhpcwoJCX0KCX0KCgkvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoJLy8gV1lTSVdZRyBlZGl0b3IKCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CglpZiAodGhpcy53eXNpd3lnX21v ZGUpCgl7CgkJLyoqCgkJKiBEaXNhYmxlcyB0aGUgZWRpdG9yCgkJKgoJCSogQHBh cmFtCXN0cmluZwlJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuZGlzYWJsZV9lZGl0b3IgPSBmdW5jdGlvbih0ZXh0KQoJCXsKCQkJaWYgKCF0 aGlzLmRpc2FibGVkKQoJCQl7CgkJCQl0aGlzLmRpc2FibGVkID0gdHJ1ZTsKCgkJ CQl2YXIgaGlkZXIgPSBmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfaGlk ZXInKTsKCQkJCWlmIChoaWRlcikKCQkJCXsKCQkJCQloaWRlci5wYXJlbnROb2Rl LnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJCX0KCgkJCQl2YXIgZGl2ID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQlkaXYuaWQgPSB0aGlzLmVkaXRv cmlkICsgJ19oaWRlcic7CgkJCQlkaXYuY2xhc3NOYW1lID0gJ3d5c2l3eWcnOwoJ CQkJZGl2LnN0eWxlLmJvcmRlciA9ICcycHggaW5zZXQnOwoJCQkJZGl2LnN0eWxl LndpZHRoID0gdGhpcy5lZGl0Ym94LnN0eWxlLndpZHRoOwoJCQkJZGl2LnN0eWxl LmhlaWdodCA9IHRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQ7CgkJCQl2YXIgY2hp bGRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJCWNoaWxk ZGl2LnN0eWxlLm1hcmdpbiA9ICc4cHgnOwoJCQkJY2hpbGRkaXYuaW5uZXJIVE1M ID0gdGV4dDsKCQkJCWRpdi5hcHBlbmRDaGlsZChjaGlsZGRpdik7CgkJCQl0aGlz LmVkaXRib3gucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkaXYpOwoKCQkJCS8vIGFu ZCBoaWRlIHRoZSByZWFsIGVkaXRvcgoJCQkJdGhpcy5lZGl0Ym94LnN0eWxlLndp ZHRoID0gJzBweCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuaGVpZ2h0ID0gJzBw eCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuYm9yZGVyID0gJ25vbmUnOwoJCQl9 CgkJfTsKCgkJLyoqCgkJKiBFbmFibGVzIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFy YW0Jc3RyaW5nCUluaXRpYWwgdGV4dCBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhp cy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlmICh0eXBl b2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5zZXRfZWRpdG9y X2NvbnRlbnRzKHRleHQpOwoJCQl9CgoJCQl2YXIgaGlkZXIgPSBmZXRjaF9vYmpl Y3QodGhpcy5lZGl0b3JpZCArICdfaGlkZXInKTsKCQkJaWYgKGhpZGVyKQoJCQl7 CgkJCQloaWRlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJfQoK CQkJdGhpcy5kaXNhYmxlZCA9IGZhbHNlOwoJCX07CgoJCS8qKgoJCSogUHV0cyB0 aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFyYW0Jc3RyaW5nCVRl eHQgdG8gd3JpdGUKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0g ZnVuY3Rpb24odGV4dCwgZG9pbml0KQoJCXsKCQkJaWYgKHRleHQgPT0gJycpCgkJ CXsKCQkJCWlmIChpc19pZSkKCQkJCXsKCQkJCQl0ZXh0ID0gJzxwPjwvcD4nOwoJ CQkJfQoJCQkJZWxzZSBpZiAoaXNfbW96KQoJCQkJewoJCQkJCXRleHQgPSAnPGJy IC8+JzsKCQkJCX0KCQkJfQoJCQlpZiAodGhpcy5lZGl0ZG9jICYmIHRoaXMuZWRp dGRvYy5pbml0aWFsaXplZCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuaW5u ZXJIVE1MID0gdGV4dDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIEZvcmNlIEZp cmVmb3ggMS4wIHRvIHJ1biBpdCBoZXJlIGFuZCBGaXJlZm94IDEuNSsgbGF0ZXIg b24sIHNlZSBCdWcgIzIyNjYxCgkJCQlpZiAoZG9pbml0ICYmIHR5cGVvZiBBcnJh eS5wcm90b3R5cGUubWFwID09ICd1bmRlZmluZWQnKSB7IHRoaXMuZWRpdGRvYy5k ZXNpZ25Nb2RlID0gJ29uJzsgfQoJCQkJdGhpcy5lZGl0ZG9jID0gdGhpcy5lZGl0 d2luLmRvY3VtZW50OyAvLyBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v d29ya3Nob3AvYXV0aG9yL2RodG1sL292ZXJ2aWV3L1hwU3AyQ29tcGF0LmFzcCNj YWNoaW5nCgkJCQl0aGlzLmVkaXRkb2Mub3BlbigndGV4dC9odG1sJywgJ3JlcGxh Y2UnKTsKCQkJCXRoaXMuZWRpdGRvYy53cml0ZSh0ZXh0KTsKCQkJCXRoaXMuZWRp dGRvYy5jbG9zZSgpOwoJCQkJaWYgKGRvaW5pdCkKCQkJCXsKCQkJCQl0aGlzLmVk aXRkb2MuYm9keS5jb250ZW50RWRpdGFibGUgPSB0cnVlOwoJCQkJCWlmICh0eXBl b2YgQXJyYXkucHJvdG90eXBlLm1hcCAhPSAndW5kZWZpbmVkJykKCQkJCQl7CgkJ CQkJCXRoaXMuZWRpdGRvYy5kZXNpZ25Nb2RlID0gJ29uJzsKCQkJCQl9CgkJCQl9 CgkJCQl0aGlzLmVkaXRkb2MuYm9keS5zcGVsbGNoZWNrID0gdHJ1ZTsKCgkJCQl0 aGlzLmVkaXRkb2MuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKCQkJCXRoaXMuc2V0X2Vk aXRvcl9zdHlsZSgpOwoJCQl9CgoJCQl0aGlzLnNldF9kaXJlY3Rpb24oKTsKCQl9 CgoJCS8qKgoJCSogUHV0IHRoZSB0ZXh0IGludG8gdGhlIGVkaXRvcgoJCSovCgkJ dGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rpb24oaW5pdGlhbF90ZXh0 KQoJCXsKCQkJaWYgKGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19pZnJh bWUnKSkKCQkJewoJCQkJdGhpcy5lZGl0Ym94ID0gZmV0Y2hfb2JqZWN0KHRoaXMu ZWRpdG9yaWQgKyAnX2lmcmFtZScpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdmFy IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwoJCQkJ aWYgKGlzX2llICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6 JykKCQkJCXsKCQkJCQkvLyB3b3JrYXJvdW5kIGZvciBJRSB0aHJvd2luZyBpbnNl Y3VyZSBwYWdlIHdhcm5pbmdzCgkJCQkJaWZyYW1lLnNyYyA9ICdjbGllbnRzY3Jp cHQvaW5kZXguaHRtbCc7CgkJCQl9CgkJCQl0aGlzLmVkaXRib3ggPSB0aGlzLnRl eHRvYmoucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChpZnJhbWUpOwoJCQkJdGhpcy5l ZGl0Ym94LmlkID0gdGhpcy5lZGl0b3JpZCArICdfaWZyYW1lJzsKCQkJCXRoaXMu ZWRpdGJveC50YWJJbmRleCA9IDE7CgkJCX0KCgkJCWlmICghaXNfaWUpCgkJCXsK CQkJCXRoaXMuZWRpdGJveC5zdHlsZS5ib3JkZXIgPSAnMnB4IGluc2V0JzsKCQkJ fQoJCQl0aGlzLmVkaXRib3guc3R5bGUud2lkdGggPSB0aGlzLnRleHRvYmouc3R5 bGUud2lkdGg7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQgPSB0aGlzLnRl eHRvYmouc3R5bGUuaGVpZ2h0OwoJCQl0aGlzLnRleHRvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMuZWRpdGJveC5jb250 ZW50V2luZG93OwoJCQl0aGlzLmVkaXRkb2MgPSB0aGlzLmVkaXR3aW4uZG9jdW1l bnQ7CgoJCQl0aGlzLndyaXRlX2VkaXRvcl9jb250ZW50cygodHlwZW9mIGluaXRp YWxfdGV4dCA9PSAndW5kZWZpbmVkJyA/ICB0aGlzLnRleHRvYmoudmFsdWUgOiBp bml0aWFsX3RleHQpLCB0cnVlKTsKCgkJCWlmICh0aGlzLmVkaXRkb2MuZGlyID09 ICdydGwnKQoJCQl7CgkJCS8vCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgnanVz dGlmeXJpZ2h0JywgZmFsc2UsIG51bGwpOwoJCQl9CgkJCXRoaXMuc3BlbGxvYmog PSB0aGlzLmVkaXRkb2MuYm9keTsKCgkJCXRoaXMuZWRpdGRvYy5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCXRoaXMuZWRpdHdpbi5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJfTsKCgkJLyoqCgkJKiBTZXRzIHRoZSB0ZXh0IGRpcmVjdGlv biBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhpcy5zZXRfZGlyZWN0aW9uID0gZnVu Y3Rpb24oKQoJCXsKCQkJdGhpcy5lZGl0ZG9jLmRpciA9IHRoaXMudGV4dG9iai5k aXI7CgkJfTsKCgkJLyoqCgkJKiBTZXQgdGhlIENTUyBzdHlsZSBvZiB0aGUgZWRp dG9yCgkJKi8KCQl0aGlzLnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJ ewoJCQlpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxsZXRpbl9jc3MnXSkK CQkJewoJCQkJdmFyIHJ1bGVzID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxs ZXRpbl9jc3MnXS5ydWxlczsKCQkJCXZhciBuZXdjc3MgPSAnJzsKCgkJCQlmb3Ig KHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKQoJCQkJewoJCQkJCWlm IChydWxlc1tpXS5zZWxlY3RvclRleHQuaW5kZXhPZignLnd5c2l3eWcnKSA+PSAw IHx8IHJ1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnQk9EWScpCgkJCQkJewoJCQkJ CQluZXdjc3MgKz0gJyAnICsgcnVsZXNbaV0uc2VsZWN0b3JUZXh0ICsgJyB7ICcg KyBydWxlc1tpXS5zdHlsZS5jc3NUZXh0ICsgJyB9ICc7CgkJCQkJfQoJCQkJfQoK CQkJCWlmICghbmV3Y3NzKQoJCQkJewoJCQkJCS8vIGZhbGwgYmFjayBpbiBjYXNl IHRoZSBuZXcgbWV0aG9kIGRvZXNuJ3Qgd29yawoJCQkJCW5ld2NzcyA9IGRvY3Vt ZW50LnN0eWxlU2hlZXRzWyd2YnVsbGV0aW5fY3NzJ10uY3NzVGV4dDsKCQkJCX0K CgkJCQl0aGlzLmVkaXRkb2MuY3JlYXRlU3R5bGVTaGVldCgpLmNzc1RleHQgPSBu ZXdjc3MgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQl0aGlzLmVkaXRkb2Mu Ym9keS5jbGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5zZXRfZWRpdG9yX2Z1 bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuZWRpdGRvYy5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25t b3VzZXVwOwoJCQl0aGlzLmVkaXRkb2Mub25rZXl1cCA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwOwoKCQkJaWYgKHRoaXMu ZWRpdGRvYy5hdHRhY2hFdmVudCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHku YXR0YWNoRXZlbnQoIm9ucmVzaXplc3RhcnQiLCB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCk7CgkJCX0KCgkJCXRo aXMuZWRpdHdpbi5vbmZvY3VzID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5lZGl0d2luX29uZm9jdXM7CgkJCXRoaXMuZWRpdHdpbi5vbmJsdXIgPSB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXR3aW5fb25ibHVyOwoJ CX07CgoJCS8qKgoJCSogU2V0IENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbnRl eHQgPSBmdW5jdGlvbihjbWQpCgkJewoJCQlmb3IgKHZhciBpIGluIGNvbnRleHRj b250cm9scykKCQkJewoJCQkJdmFyIG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmVk aXRvcmlkICsgJ19jbWRfJyArIGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQlpZiAo b2JqICE9IG51bGwpCgkJCQl7CgkJCQkJdmFyIHN0YXRlID0gdGhpcy5lZGl0ZG9j LnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQkJLy9h bGVydCAoY29udGV4dGNvbnRyb2xzW2ldICsgJyAnICsgc3RhdGUgKyAnICcgKyBv Ymouc3RhdGUpOwoJCQkJCWlmIChvYmouc3RhdGUgIT0gc3RhdGUpCgkJCQkJewoJ CQkJCQlvYmouc3RhdGUgPSBzdGF0ZTsKCQkJCQkJdGhpcy5idXR0b25fY29udGV4 dChvYmosIChvYmouY21kID09IGNtZCA/ICdtb3VzZW92ZXInIDogJ21vdXNlb3V0 JykpOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJdGhpcy5zZXRfZm9udF9jb250ZXh0 KCk7CgoJCQl0aGlzLnNldF9zaXplX2NvbnRleHQoKTsKCgkJCXRoaXMuc2V0X2Nv bG9yX2NvbnRleHQoKTsKCQl9OwoKCQkvKioKCQkqIFNldCBGb250IENvbnRleHQK CQkqLwoJCXRoaXMuc2V0X2ZvbnRfY29udGV4dCA9IGZ1bmN0aW9uKGZvbnRzdGF0 ZSkKCQl7CgkJCWlmICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10pCgkJCXsKCQkJ CWlmICh0eXBlb2YgZm9udHN0YXRlID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJ CWZvbnRzdGF0ZSA9IHRoaXMuZWRpdGRvYy5xdWVyeUNvbW1hbmRWYWx1ZSgnZm9u dG5hbWUnKTsKCQkJCX0KCQkJCXN3aXRjaCAoZm9udHN0YXRlKQoJCQkJewoJCQkJ CWNhc2UgJyc6CgkJCQkJewoJCQkJCQlpZiAoIWlzX2llICYmIHdpbmRvdy5nZXRD b21wdXRlZFN0eWxlKQoJCQkJCQl7CgkJCQkJCQlmb250c3RhdGUgPSB0aGlzLmVk aXRkb2MuYm9keS5zdHlsZS5mb250RmFtaWx5OwoJCQkJCQl9CgkJCQkJfQoJCQkJ CWJyZWFrOwoKCQkJCQljYXNlIG51bGw6CgkJCQkJewoJCQkJCQlmb250c3RhdGUg PSAnJzsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJaWYgKGZvbnRzdGF0 ZSAhPSB0aGlzLmZvbnRzdGF0ZSkKCQkJCXsKCQkJCQl0aGlzLmZvbnRzdGF0ZSA9 IGZvbnRzdGF0ZTsKCQkJCQl2YXIgdGhpbmd5ID0gUEhQLnVjZmlyc3QodGhpcy5m b250c3RhdGUsICcsJyk7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7 CgkJCQkJCWZvciAodmFyIGkgaW4gdGhpcy5mb250b3B0aW9ucykKCQkJCQkJewoJ CQkJCQkJdGhpcy5mb250b3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0g dGhpbmd5ID8gJycgOiAnbm9uZScpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UK CQkJCQl7CgkJCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idXR0b25zWydm b250bmFtZSddLm9wdGlvbnMubGVuZ3RoOyBpKyspCgkJCQkJCXsKCQkJCQkJCWlm ICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSB0 aGluZ3kpCgkJCQkJCQl7CgkJCQkJCQkJdGhpcy5idXR0b25zWydmb250bmFtZSdd LnNlbGVjdGVkSW5kZXggPSBpOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJ CQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfTsKCgkJLyoqCgkJKiBTZXQgU2l6ZSBD b250ZXh0CgkJKi8KCQl0aGlzLnNldF9zaXplX2NvbnRleHQgPSBmdW5jdGlvbihz aXplc3RhdGUpCgkJewoJCQlpZiAodGhpcy5idXR0b25zWydmb250c2l6ZSddKQoJ CQl7CgkJCQlpZiAodHlwZW9mIHNpemVzdGF0ZSA9PSAndW5kZWZpbmVkJykKCQkJ CXsKCQkJCQlzaXplc3RhdGUgPSB0aGlzLmVkaXRkb2MucXVlcnlDb21tYW5kVmFs dWUoJ2ZvbnRzaXplJyk7CgkJCQl9CgkJCQlzd2l0Y2ggKHNpemVzdGF0ZSkKCQkJ CXsKCQkJCQljYXNlIG51bGw6CgkJCQkJY2FzZSAnJzoKCQkJCQl7CgkJCQkJCWlm IChpc19tb3opCgkJCQkJCXsKCQkJCQkJCXNpemVzdGF0ZSA9IHRoaXMudHJhbnNs YXRlX2ZvbnRzaXplKHRoaXMuZWRpdGRvYy5ib2R5LnN0eWxlLmZvbnRTaXplKTsK CQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmIChzaXplc3Rh dGUgIT0gdGhpcy5zaXplc3RhdGUpCgkJCQl7CgkJCQkJdGhpcy5zaXplc3RhdGUg PSBzaXplc3RhdGU7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7CgkJ CQkJCWZvciAodmFyIGkgaW4gdGhpcy5zaXplb3B0aW9ucykKCQkJCQkJewoJCQkJ CQkJdGhpcy5zaXplb3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0gdGhp cy5zaXplc3RhdGUgPyAnJyA6ICdub25lJyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJ ZWxzZQoJCQkJCXsKCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1dHRv bnNbJ2ZvbnRzaXplJ10ub3B0aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJ CQkJaWYgKHRoaXMuYnV0dG9uc1snZm9udHNpemUnXS5vcHRpb25zW2ldLnZhbHVl ID09IHRoaXMuc2l6ZXN0YXRlKQoJCQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9u c1snZm9udHNpemUnXS5zZWxlY3RlZEluZGV4ID0gaTsKCQkJCQkJCQlicmVhazsK CQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX07CgoJCS8qKgoJ CSogU2V0IENvbG9yIENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbG9yX2NvbnRl eHQgPSBmdW5jdGlvbihjb2xvcnN0YXRlKQoJCXsKCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10pCgkJCXsKCQkJCWlmICh0eXBlb2YgY29sb3JzdGF0ZSA9 PSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQljb2xvcnN0YXRlID0gdGhpcy5lZGl0 ZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JlY29sb3InKTsKCQkJCX0KCQkJCWlm IChjb2xvcnN0YXRlICE9IHRoaXMuY29sb3JzdGF0ZSkKCQkJCXsKCQkJCQlpZiAo dGhpcy5wb3B1cG1vZGUpCgkJCQkJewoJCQkJCQl2YXIgb2JqID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yXycgKyB0aGlzLnRyYW5zbGF0ZV9j b2xvcl9jb21tYW5kdmFsdWUodGhpcy5jb2xvcnN0YXRlKSk7CgkJCQkJCWlmIChv YmogIT0gbnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gZmFsc2U7CgkJ CQkJCQl0aGlzLmJ1dHRvbl9jb250ZXh0KG9iaiwgJ21vdXNlb3V0JywgJ21lbnUn KTsKCQkJCQkJfQoKCQkJCQkJdGhpcy5jb2xvcnN0YXRlID0gY29sb3JzdGF0ZTsK CgkJCQkJCWVsbWlkID0gdGhpcy5lZGl0b3JpZCArICdfY29sb3JfJyArIHRoaXMu dHJhbnNsYXRlX2NvbG9yX2NvbW1hbmR2YWx1ZShjb2xvcnN0YXRlKTsKCQkJCQkJ dmFyIG9iaiA9IGZldGNoX29iamVjdChlbG1pZCk7CgkJCQkJCWlmIChvYmogIT0g bnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gdHJ1ZTsKCQkJCQkJCXRo aXMuYnV0dG9uX2NvbnRleHQob2JqLCAnbW91c2VvdXQnLCAnbWVudScpOwoJCQkJ CQl9CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXRoaXMuY29sb3JzdGF0 ZSA9IGNvbG9yc3RhdGU7CgoJCQkJCQljb2xvcnN0YXRlID0gdGhpcy50cmFuc2xh dGVfY29sb3JfY29tbWFuZHZhbHVlKHRoaXMuY29sb3JzdGF0ZSk7CgoJCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10ub3B0 aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSBjb2xvcnN0YXRlKQoJ CQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10uc2VsZWN0 ZWRJbmRleCA9IGk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJ CQl9CgkJCQl9CgkJCX0KCQl9OwoKCQkvKioKCQkqIEZ1bmN0aW9uIHRvIHRyYW5z bGF0ZSB0aGUgb3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xv cicpIGludG8gc29tZXRoaW5nIHVzZWZ1bAoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJ T3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xvcicpCgkJKgoJ CSogQHJldHVybglzdHJpbmcKCQkqLwoJCXRoaXMudHJhbnNsYXRlX2NvbG9yX2Nv bW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQl7CgkJCXJldHVybiB0 aGlzLnRyYW5zbGF0ZV9zaWxseV9oZXgoKGZvcmVjb2xvciAmIDB4RkYpLnRvU3Ry aW5nKDE2KSwgKChmb3JlY29sb3IgPj4gOCkgJiAweEZGKS50b1N0cmluZygxNiks ICgoZm9yZWNvbG9yID4+IDE2KSAmIDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJfTsK CgkJLyoqCgkJKiBGdW5jdGlvbiB0byB0cmFuc2xhdGUgYSBoZXggbGlrZSBGIEFC IDkgdG8gIzBGQUIwOSBhbmQgdGhlbiB0byBjb2xvcm9wdGlvbnNbJyMwRkFCMDkn XQoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJUmVkIHZhbHVlCgkJKiBAcGFyYW0Jc3Ry aW5nCUdyZWVuIHZhbHVlCgkJKiBAcGFyYW0Jc3RyaW5nCUJsdWUgdmFsdWUKCQkq CgkJKiBAcmV0dXJuCXN0cmluZwlPcHRpb24gZnJvbSBjb2xvcm9wdGlvbnMgYXJy YXkKCQkqLwoJCXRoaXMudHJhbnNsYXRlX3NpbGx5X2hleCA9IGZ1bmN0aW9uKHIs IGcsIGIpCgkJewoJCQlyZXR1cm4gY29sb3JvcHRpb25zWycjJyArIChQSFAuc3Ry X3BhZChyLCAyLCAwKSArIFBIUC5zdHJfcGFkKGcsIDIsIDApICsgUEhQLnN0cl9w YWQoYiwgMiwgMCkpLnRvVXBwZXJDYXNlKCldOwoJCX07CgoJCS8qKgoJCSogQXBw bHkgRm9ybWF0dGluZwoJCSovCgkJdGhpcy5hcHBseV9mb3JtYXQgPSBmdW5jdGlv bihjbWQsIGRpYWxvZywgYXJndW1lbnQpCgkJewoJCQl0aGlzLmVkaXRkb2MuZXhl Y0NvbW1hbmQoY21kLCAodHlwZW9mIGRpYWxvZyA9PSAndW5kZWZpbmVkJyA/IGZh bHNlIDogZGlhbG9nKSwgKHR5cGVvZiBhcmd1bWVudCA9PSAndW5kZWZpbmVkJyA/ IHRydWUgOiBhcmd1bWVudCkpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfTsKCgkJLyoq CgkJKiBJbnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rp b24oZSwgdXJsKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdjcmVh dGVsaW5rJywgaXNfaWUsICh0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnID8gdHJ1 ZSA6IHVybCkpOwoJCX07CgoJCS8qKgoJCSogSW5zZXJ0IEVtYWlsIExpbmsKCQkq LwoJCXRoaXMuZW1haWwgPSBmdW5jdGlvbihlLCBlbWFpbCkKCQl7CgkJCWlmICh0 eXBlb2YgZW1haWwgPT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWVtYWlsID0gdGhp cy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAnJywg dHJ1ZSk7CgkJCX0KCgkJCWVtYWlsID0gdGhpcy52ZXJpZnlfcHJvbXB0KGVtYWls KTsKCgkJCWlmIChlbWFpbCA9PT0gZmFsc2UpCgkJCXsKCQkJCXJldHVybiB0aGlz LmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl2 YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCQlyZXR1cm4g dGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0ibWFpbHRvOicgKyBlbWFpbCArICci PicgKyAoc2VsZWN0aW9uID8gc2VsZWN0aW9uIDogZW1haWwpICsgJzwvYT4nLCAo c2VsZWN0aW9uID8gdHJ1ZSA6IGZhbHNlKSk7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluc2VydCBTbWlsaWUKCQkqLwoJCXRoaXMuaW5zZXJ0X3NtaWxpZSA9IGZ1bmN0 aW9uKGUsIHNtaWxpZXRleHQsIHNtaWxpZXBhdGgsIHNtaWxpZWlkKQoJCXsKCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQo JzxpbWcgc3JjPSInICsgc21pbGllcGF0aCArICciIGJvcmRlcj0iMCIgYWx0PSIw IiBzbWlsaWVpZD0iJyArIHNtaWxpZWlkICsgJyIgLz4nLCBmYWxzZSk7CgkJfTsK CgkJLyoqCgkJKiBHZXQgRWRpdG9yIENvbnRlbnRzCgkJKi8KCQl0aGlzLmdldF9l ZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbigpCgkJewoJCQlyZXR1cm4gdGhpcy5l ZGl0ZG9jLmJvZHkuaW5uZXJIVE1MOwoJCX07CgoJCS8qKgoJCSogR2V0IFNlbGVj dGVkIFRleHQKCQkqLwoJCXRoaXMuZ2V0X3NlbGVjdGlvbiA9IGZ1bmN0aW9uKCkK CQl7CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRl UmFuZ2UoKTsKCQkJaWYgKHJhbmdlLmh0bWxUZXh0ICYmIHJhbmdlLnRleHQpCgkJ CXsKCQkJCXJldHVybiByYW5nZS5odG1sVGV4dDsKCQkJfQoJCQllbHNlCgkJCXsK CQkJCXZhciBkb19ub3Rfc3RlYWxfdGhpc19jb2RlX2h0bWwgPSAnJzsKCQkJCWZv ciAodmFyIGkgPSAwOyBpIDwgcmFuZ2UubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJ ZG9fbm90X3N0ZWFsX3RoaXNfY29kZV9odG1sICs9IHJhbmdlLml0ZW0oaSkub3V0 ZXJIVE1MOwoJCQkJfQoJCQkJcmV0dXJuIGRvX25vdF9zdGVhbF90aGlzX2NvZGVf aHRtbDsKCQkJfQoJCX07CgoJCS8qKgoJCSogUGFzdGUgSFRNTAoJCSovCgkJdGhp cy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHRleHQsIG1vdmVzdGFydCwgbW92ZWVu ZCkKCQl7CgkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCWlmICh0eXBlb2YodGhp cy5lZGl0ZG9jLnNlbGVjdGlvbikgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lZGl0 ZG9jLnNlbGVjdGlvbi50eXBlICE9ICdUZXh0JyAmJiB0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uLnR5cGUgIT0gJ05vbmUnKQoJCQl7CgkJCQltb3Zlc3RhcnQgPSBmYWxz ZTsKCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY2xlYXIoKTsKCQkJfQoKCQkJ dmFyIHNlbCA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJc2VsLnBhc3RlSFRNTCh0ZXh0KTsKCgkJCWlmICh0ZXh0LmluZGV4T2YoJ1xu JykgPT0gLTEpCgkJCXsKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJ ewoJCQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBt b3Zlc3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJc2VsLm1vdmVTdGFy dCgnY2hhcmFjdGVyJywgLXRleHQudkJsZW5ndGgoKSArbW92ZXN0YXJ0KTsKCQkJ CQlzZWwubW92ZUVuZCgnY2hhcmFjdGVyJywgLW1vdmVlbmQpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC10ZXh0 LnZCbGVuZ3RoKCkpOwoJCQkJfQoJCQkJc2VsLnNlbGVjdCgpOwoJCQl9CgkJfTsK CgkJLyoqCgkJKiBQcmVwYXJlIEZvcm0gRm9yIFN1Ym1pdAoJCSovCgkJdGhpcy5w cmVwYXJlX3N1Ym1pdCA9IGZ1bmN0aW9uKHN1YmplY3R0ZXh0LCBtaW5jaGFycykK CQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRoaXMuZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoKCQkJdmFyIHJldHVybnZhbHVlID0gdmFsaWRhdGVtZXNzYWdlKHN0 cmlwY29kZSh0aGlzLnRleHRvYmoudmFsdWUsIHRydWUpLCBzdWJqZWN0dGV4dCwg bWluY2hhcnMpOwoKCQkJaWYgKHJldHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4g cmV0dXJudmFsdWU7CgkJCX0KCQkJZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51 bGwgJiYgdGhpcy5jYXB0Y2hhLmZhaWxlZCkKCQkJewoJCQkJcmV0dXJuIGZhbHNl OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJ cmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoJCS8vIE1vemlsbGEgV1lTSVdZRyBvbmx5CgkJLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCQlpZiAoaXNfbW96KQoJCXsKCQkJLyoq CgkJCSogU2V0IGVkaXRvciBjb250ZW50cwoJCQkqLwoJCQl0aGlzLl9zZXRfZWRp dG9yX2NvbnRlbnRzID0gdGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzOwoJCQl0aGlz LnNldF9lZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbihpbml0aWFsX3RleHQpCgkJ CXsKCQkJCXRoaXMuX3NldF9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsK CgkJCQl0aGlzLmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25rZXlwcmVz cywgdHJ1ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBTZXQgZWRpdG9yIHN0eWxlCgkJ CSovCgkJCXRoaXMuc2V0X2VkaXRvcl9zdHlsZSA9IGZ1bmN0aW9uKCkKCQkJewoJ CQkJZm9yICh2YXIgc3MgPSAwOyBzcyA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxl bmd0aDsgc3MrKykKCQkJCXsKCQkJCQl0cnkKCQkJCQl7CgkJCQkJCWlmIChkb2N1 bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXMubGVuZ3RoIDw9IDApCgkJCQkJ CXsKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWNhdGNoKGUp CgkJCQkJeyAvLyB0cnlpbmcgdG8gYWNjZXNzIGEgc3R5bGVzaGVldCBvdXRzaWRl IHRoZSBhbGxvd2VkIGRvbWFpbgoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQkJ Zm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3Nz UnVsZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5 bGVTaGVldHNbc3NdLmNzc1J1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnLnd5c2l3 eWcnKQoJCQkJCQl7CgkJCQkJCQluZXdzcyA9IHRoaXMuZWRpdGRvYy5jcmVhdGVF bGVtZW50KCdzdHlsZScpOwoJCQkJCQkJbmV3c3MudHlwZSA9ICd0ZXh0L2Nzcyc7 CgkJCQkJCQluZXdzcy5pbm5lckhUTUwgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tz c10uY3NzUnVsZXNbaV0uY3NzVGV4dCArICcgcCB7IG1hcmdpbjogMHB4OyB9JzsK CQkJCQkJCXRoaXMuZWRpdGRvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1sw XS5hcHBlbmRDaGlsZChuZXdzcyk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5j bGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5z dHlsZS5mb250RmFtaWx5ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1 bGVzW2ldLnN0eWxlLmZvbnRGYW1pbHk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9k eS5zdHlsZS5mb250U2l6ZSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NS dWxlc1tpXS5zdHlsZS5mb250U2l6ZTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJ CQkJfQoJCQkJCX0KCQkJCX0KCQkJfTsKCgkJCS8qKgoJCQkqIFRyYW5zbGF0ZSBD b2xvciBDb21tYW5kIFZhbHVlCgkJCSovCgkJCXRoaXMudHJhbnNsYXRlX2NvbG9y X2NvbW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQkJewoJCQkJaWYg KGZvcmVjb2xvciA9PSAnJyB8fCBmb3JlY29sb3IgPT0gbnVsbCkKCQkJCXsKCQkJ CQlmb3JlY29sb3IgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVkaXRk b2MuYm9keSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKTsKCQkJCX0K CgkJCQlpZiAoZm9yZWNvbG9yLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncmdiJykg PT0gMCkKCQkJCXsKCQkJCQl2YXIgbWF0Y2hlcyA9IGZvcmVjb2xvci5tYXRjaCgv XnJnYlxzKlwoKFswLTldKyksXHMqKFswLTldKyksXHMqKFswLTldKylcKSQvKTsK CQkJCQlpZiAobWF0Y2hlcykKCQkJCQl7CgkJCQkJCXJldHVybiB0aGlzLnRyYW5z bGF0ZV9zaWxseV9oZXgoKG1hdGNoZXNbMV0gJiAweEZGKS50b1N0cmluZygxNiks IChtYXRjaGVzWzJdICYgMHhGRikudG9TdHJpbmcoMTYpLCAobWF0Y2hlc1szXSAm IDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJ CQkJCXJldHVybiB0aGlzLnRyYW5zbGF0ZV9jb2xvcl9jb21tYW5kdmFsdWUobnVs bCk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJldHVybiBmb3Jl Y29sb3I7CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBUcmFuc2xhdGUgQ1NTIGZv bnRTaXplIHRvIEhUTUwgRm9udCBTaXplCgkJCSovCgkJCXRoaXMudHJhbnNsYXRl X2ZvbnRzaXplID0gZnVuY3Rpb24oY3Nzc2l6ZSkKCQkJewoJCQkJc3dpdGNoIChj c3NzaXplKQoJCQkJewoJCQkJCWNhc2UgJzcuNXB0JzoKCQkJCQljYXNlICcxMHB4 JzogcmV0dXJuIDE7CgkJCQkJY2FzZSAnMTBwdCc6IHJldHVybiAyOwoJCQkJCWNh c2UgJzEycHQnOiByZXR1cm4gMzsKCQkJCQljYXNlICcxNHB0JzogcmV0dXJuIDQ7 CgkJCQkJY2FzZSAnMThwdCc6IHJldHVybiA1OwoJCQkJCWNhc2UgJzI0cHQnOiBy ZXR1cm4gNjsKCQkJCQljYXNlICczNnB0JzogcmV0dXJuIDc7CgkJCQkJZGVmYXVs dDogICAgIHJldHVybiAnJzsKCQkJCX0KCQkJfQoKCQkJLyoqCgkJCSogQXBwbHkg Rm9ybWF0CgkJCSovCgkJCXRoaXMuX2FwcGx5X2Zvcm1hdCA9IHRoaXMuYXBwbHlf Zm9ybWF0OwoJCQl0aGlzLmFwcGx5X2Zvcm1hdCA9IGZ1bmN0aW9uKGNtZCwgZGlh bG9nLCBhcmcpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgndXNl Q1NTJywgZmFsc2UsIHRydWUpOwoJCQkJcmV0dXJuIHRoaXMuX2FwcGx5X2Zvcm1h dChjbWQsIGRpYWxvZywgYXJnKTsKCQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBM aW5rCgkJCSovCgkJCXRoaXMuX2NyZWF0ZWxpbmsgPSB0aGlzLmNyZWF0ZWxpbms7 CgkJCXRoaXMuY3JlYXRlbGluayA9IGZ1bmN0aW9uKGUsIHVybCkKCQkJewoJCQkJ aWYgKHR5cGVvZiB1cmwgPT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJdXJsID0g dGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0 dHA6Ly8nLCB0cnVlKTsKCQkJCX0KCQkJCWlmICgodXJsID0gdGhpcy52ZXJpZnlf cHJvbXB0KHVybCkpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQlpZiAodGhpcy5nZXRf c2VsZWN0aW9uKCkpCgkJCQkJewoJCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5s aW5rJyk7CgkJCQkJCXRoaXMuX2NyZWF0ZWxpbmsoZSwgdXJsKTsKCQkJCQl9CgkJ CQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0i JyArIHVybCArICciPicgKyB1cmwgKyAnPC9hPicpOwoJCQkJCX0KCQkJCX0KCQkJ CXJldHVybiB0cnVlOwoJCQl9OwoKCQkJLyoqCgkJCSogSW5zZXJ0IFNtaWxpZQoJ CQkqLwoJCQl0aGlzLmluc2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0 ZXh0LCBzbWlsaWVwYXRoLCBzbWlsaWVpZCkKCQkJewoJCQkJdGhpcy5jaGVja19m b2N1cygpOwoKCQkJCXRyeQoJCQkJewoJCQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdJ bnNlcnRJbWFnZScsIGZhbHNlLCBzbWlsaWVwYXRoKTsKCQkJCQl2YXIgc21pbGll cyA9IGZldGNoX3RhZ3ModGhpcy5lZGl0ZG9jLmJvZHksICdpbWcnKTsKCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHNtaWxpZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJ CQkJCQlpZiAoc21pbGllc1tpXS5zcmMgPT0gc21pbGllcGF0aCkKCQkJCQkJewoJ CQkJCQkJaWYgKHNtaWxpZXNbaV0uZ2V0QXR0cmlidXRlKCdzbWlsaWVpZCcpIDwg MSkKCQkJCQkJCXsKCQkJCQkJCQlzbWlsaWVzW2ldLnNldEF0dHJpYnV0ZSgnc21p bGllaWQnLCBzbWlsaWVpZCk7CgkJCQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1 dGUoJ2JvcmRlcicsICIwIik7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9 CgkJCQljYXRjaChlKQoJCQkJewoJCQkJCS8vIGZhaWxlZC4uLiBwcm9iYWJseSBk dWUgdG8gaW5zZXJ0aW5nIGEgc21pbGllIG92ZXIgYSBzbWlsaWUgaW4gbW96aWxs YQoJCQkJfQoJCQl9OwoKCQkJLyoqCgkJCSogR2V0IFNlbGVjdGlvbgoJCQkqLwoJ CQl0aGlzLmdldF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJCXsKCQkJCXNlbGVj dGlvbiA9IHRoaXMuZWRpdHdpbi5nZXRTZWxlY3Rpb24oKTsKCQkJCXRoaXMuY2hl Y2tfZm9jdXMoKTsKCQkJCXJhbmdlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmdl dFJhbmdlQXQoMCkgOiB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJl dHVybiB0aGlzLnJlYWRfbm9kZXMocmFuZ2UuY2xvbmVDb250ZW50cygpLCBmYWxz ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBQYXN0ZSBUZXh0CgkJCSovCgkJCXRoaXMu aW5zZXJ0X3RleHQgPSBmdW5jdGlvbihzdHIpCgkJCXsKCQkJCXRoaXMuZWRpdGRv Yy5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBzdHIpOwoJCQkJLypm cmFnbWVudCA9IHRoaXMuZWRpdGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7 CgkJCQlob2xkZXIgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3Bhbicp OwoJCQkJaG9sZGVyLmlubmVySFRNTCA9IHN0cjsKCgkJCQl3aGlsZSAoaG9sZGVy LmZpcnN0Q2hpbGQpCgkJCQl7CgkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaG9s ZGVyLmZpcnN0Q2hpbGQpOwoJCQkJfQoKCQkJCXRoaXMuaW5zZXJ0X25vZGVfYXRf c2VsZWN0aW9uKGZyYWdtZW50KTsqLwoJCQl9OwoKCQkJLyoqCgkJCSogU2V0IGVk aXRvciBmdW5jdGlvbnMKCQkJKi8KCQkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9u cyA9IGZ1bmN0aW9uKCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmFkZEV2ZW50TGlz dGVuZXIoJ21vdXNldXAnLCB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25tb3VzZXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdGRvYy5hZGRF dmVudExpc3RlbmVyKCdrZXl1cCcsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuZWRpdGRvY19vbmtleXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdpbi5h ZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5w cm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdp bi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciwgdHJ1ZSk7CgkJCX07CgoKCQkJLyoq CgkJCSogQWRkIFJhbmdlIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLmFkZF9yYW5n ZSA9IGZ1bmN0aW9uKG5vZGUpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsK CQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl2 YXIgcmFuZ2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJhbmdl LnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKCQkJCXNlbC5yZW1vdmVBbGxSYW5n ZXMoKTsKCQkJCXNlbC5hZGRSYW5nZShyYW5nZSk7CgkJCX07CgoJCQkvKioKCQkJ KiBSZWFkIE5vZGVzIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLnJlYWRfbm9kZXMg PSBmdW5jdGlvbihyb290LCB0b3B0YWcpCgkJCXsKCQkJCXZhciBodG1sID0gIiI7 CgkJCQl2YXIgbW96X2NoZWNrID0gL19tb3ovaTsKCgkJCQlzd2l0Y2ggKHJvb3Qu bm9kZVR5cGUpCgkJCQl7CgkJCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKCQkJ CQljYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKCQkJCQl7CgkJCQkJ CXZhciBjbG9zZWQ7CgkJCQkJCWlmICh0b3B0YWcpCgkJCQkJCXsKCQkJCQkJCWNs b3NlZCA9ICFyb290Lmhhc0NoaWxkTm9kZXMoKTsKCQkJCQkJCWh0bWwgPSAnPCcg KyByb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKCQkJCQkJCXZhciBhdHRyID0g cm9vdC5hdHRyaWJ1dGVzOwoJCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRy Lmxlbmd0aDsgKytpKQoJCQkJCQkJewoJCQkJCQkJCXZhciBhID0gYXR0ci5pdGVt KGkpOwoJCQkJCQkJCWlmICghYS5zcGVjaWZpZWQgfHwgYS5uYW1lLm1hdGNoKG1v el9jaGVjaykgfHwgYS52YWx1ZS5tYXRjaChtb3pfY2hlY2spKQoJCQkJCQkJCXsK CQkJCQkJCQkJY29udGludWU7CgkJCQkJCQkJfQoKCQkJCQkJCQlodG1sICs9ICIg IiArIGEubmFtZS50b0xvd2VyQ2FzZSgpICsgJz0iJyArIGEudmFsdWUgKyAnIic7 CgkJCQkJCQl9CgkJCQkJCQlodG1sICs9IGNsb3NlZCA/ICIgLz4iIDogIj4iOwoJ CQkJCQl9CgkJCQkJCWZvciAodmFyIGkgPSByb290LmZpcnN0Q2hpbGQ7IGk7IGkg PSBpLm5leHRTaWJsaW5nKQoJCQkJCQl7CgkJCQkJCQlodG1sICs9IHRoaXMucmVh ZF9ub2RlcyhpLCB0cnVlKTsKCQkJCQkJfQoJCQkJCQlpZiAodG9wdGFnICYmICFj bG9zZWQpCgkJCQkJCXsKCQkJCQkJCWh0bWwgKz0gIjwvIiArIHJvb3QudGFnTmFt ZS50b0xvd2VyQ2FzZSgpICsgIj4iOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFr OwoKCQkJCQljYXNlIE5vZGUuVEVYVF9OT0RFOgoJCQkJCXsKCQkJCQkJLy9odG1s ID0gaHRtbHNwZWNpYWxjaGFycyhyb290LmRhdGEpOwoJCQkJCQlodG1sID0gUEhQ Lmh0bWxzcGVjaWFsY2hhcnMocm9vdC5kYXRhKTsKCQkJCQl9CgkJCQkJYnJlYWs7 CgkJCQl9CgoJCQkJcmV0dXJuIGh0bWw7CgkJCX07CgoJCQkvKioKCQkJKiBJbnNl cnQgTm9kZSBhdCBTZWxlY3Rpb24gKE1vemlsbGEpCgkJCSovCgkJCXRoaXMuaW5z ZXJ0X25vZGVfYXRfc2VsZWN0aW9uID0gZnVuY3Rpb24odGV4dCkKCQkJewoJCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4u Z2V0U2VsZWN0aW9uKCk7CgkJCQl2YXIgcmFuZ2UgPSBzZWwgPyBzZWwuZ2V0UmFu Z2VBdCgwKSA6IHRoaXMuZWRpdGRvYy5jcmVhdGVSYW5nZSgpOwoJCQkJc2VsLnJl bW92ZUFsbFJhbmdlcygpOwoJCQkJcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKCgkJ CQl2YXIgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyOwoJCQkJdmFyIHBvcyA9 IHJhbmdlLnN0YXJ0T2Zmc2V0OwoKCQkJCXN3aXRjaCAobm9kZS5ub2RlVHlwZSkK CQkJCXsKCQkJCQljYXNlIE5vZGUuRUxFTUVOVF9OT0RFOgoJCQkJCXsKCQkJCQkJ aWYgKHRleHQubm9kZVR5cGUgPT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RF KQoJCQkJCQl7CgkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJ CQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJc2VsTm9kZSA9IHRleHQ7CgkJ CQkJCX0KCQkJCQkJbm9kZS5pbnNlcnRCZWZvcmUodGV4dCwgbm9kZS5jaGlsZE5v ZGVzW3Bvc10pOwoJCQkJCQl0aGlzLmFkZF9yYW5nZShzZWxOb2RlKTsKCQkJCQl9 CgkJCQkJYnJlYWs7CgoJCQkJCWNhc2UgTm9kZS5URVhUX05PREU6CgkJCQkJewoJ CQkJCQlpZiAodGV4dC5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKCQkJCQkJ ewoJCQkJCQkJdmFyIHRleHRfbGVuZ3RoID0gcG9zICsgdGV4dC5sZW5ndGg7CgkJ CQkJCQlub2RlLmluc2VydERhdGEocG9zLCB0ZXh0LmRhdGEpOwoJCQkJCQkJcmFu Z2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCQkJCXJhbmdlLnNl dEVuZChub2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlyYW5nZS5zZXRTdGFydChu b2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlzZWwuYWRkUmFuZ2UocmFuZ2UpOwoJ CQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJbm9kZSA9IG5vZGUuc3Bs aXRUZXh0KHBvcyk7CgkJCQkJCQl2YXIgc2VsTm9kZTsKCQkJCQkJCWlmICh0ZXh0 Lm5vZGVUeXBlID09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkKCQkJCQkJ CXsKCQkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJCQkJfQoJ CQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCXNlbE5vZGUgPSB0ZXh0OwoJCQkJ CQkJfQoJCQkJCQkJbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBu b2RlKTsKCQkJCQkJCXRoaXMuYWRkX3JhbmdlKHNlbE5vZGUpOwoJCQkJCQl9CgkJ CQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9OwoJCX0KCQkvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoJCS8vIE9wZXJhIFdZU0lXWUcgb25seQoJCS8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJZWxzZSBpZiAoaXNfb3Bl cmEpCgkJewoJCQkvKioKCQkJCVRoZXJlIGFyZSBzZXZlcmFsIGlzc3VlcyB3aXRo IE9wZXJhIHdoaWNoIGlzIHdoeSB0aGlzIGNvZGUgaXMgZGlzYWJsZWQ6CgkJCQkJ MS4gRm9jdXMgaXNzdWVzLCB3aGVuIGEgYnV0dG9uIGlzIHByZXNzZWQgdGhlIGVk aXRvciBsb3NlcyBmb2N1cwoJCQkJCTIuIFN0eWxpbmcgaXMgbG9zdCB3aGVuIHdl IG1ha2UgYW55IGFkanVzdG1lbnRzIHRvIHRoZSBlZGl0b3IKCQkJCQkzLiBBZGRp bmcgYSBVUkwgaXMgZXZlciBsYXN0aW5nIGV2ZW4gaWYgeW91IHB1c2ggZW50ZXIK CQkJKi8KCQkJLyoqCgkJCSogU2V0IGVkaXRvciBzdHlsZQoJCQkqLwoJCQl0aGlz LnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJCXsKCQkJCWZvciAodmFy IHNzID0gMDsgc3MgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IHNzKysp CgkJCQl7CgkJCQkJdHJ5CgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5bGVT aGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0aCA8PSAwKQoJCQkJCQl7CgkJCQkJCQlj b250aW51ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCQljYXRjaChlKQoJCQkJCXsgLy8g dHJ5aW5nIHRvIGFjY2VzcyBhIHN0eWxlc2hlZXQgb3V0c2lkZSB0aGUgYWxsb3dl ZCBkb21haW4KCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCWZvciAodmFyIGkg PSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0 aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW3Nz XS5jc3NSdWxlc1tpXS5zZWxlY3RvclRleHQgPT0gJy53eXNpd3lnJykKCQkJCQkJ ewoJCQkJCQkJbmV3c3MgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3R5 bGUnKTsKCQkJCQkJCW5ld3NzLnR5cGUgPSAndGV4dC9jc3MnOwoJCQkJCQkJbmV3 c3MuaW5uZXJIVE1MID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVz W2ldLmNzc1RleHQgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQkJCQl0aGlz LmVkaXRkb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hp bGQobmV3c3MpOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuY2xhc3NOYW1lID0g J3d5c2l3eWcnOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9udEZh bWlseSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NSdWxlc1tpXS5zdHls ZS5mb250RmFtaWx5OwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9u dFNpemUgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXNbaV0uc3R5 bGUuZm9udFNpemU7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQl9 CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBJbnNlcnQgTGluawoJCQkqLwoJCQl0 aGlzLl9jcmVhdGVsaW5rID0gdGhpcy5jcmVhdGVsaW5rOwoJCQl0aGlzLmNyZWF0 ZWxpbmsgPSBmdW5jdGlvbihlLCB1cmwpCgkJCXsKCQkJCWlmICh0eXBlb2YgdXJs ID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJCXVybCA9IHRoaXMuc2hvd19wcm9t cHQodmJwaHJhc2VbJ2VudGVyX2xpbmtfdXJsJ10sICdodHRwOi8vJywgdHJ1ZSk7 CgkJCQl9CgkJCQlpZiAoKHVybCA9IHRoaXMudmVyaWZ5X3Byb21wdCh1cmwpKSAh PT0gZmFsc2UpCgkJCQl7CgkJCQkJaWYgKHRoaXMuZ2V0X3NlbGVjdGlvbigpKQoJ CQkJCXsKCQkJCQkJdGhpcy5hcHBseV9mb3JtYXQoJ3VubGluaycpOwoJCQkJCQl0 aGlzLl9jcmVhdGVsaW5rKGUsIHVybCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7 CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQoJzxhIGhyZWY9IicgKyB1cmwgKyAnIj4n ICsgdXJsICsgJzwvYT4nKTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gdHJ1ZTsK CQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBTbWlsaWUKCQkJKi8KCQkJdGhpcy5p bnNlcnRfc21pbGllID0gZnVuY3Rpb24oZSwgc21pbGlldGV4dCwgc21pbGllcGF0 aCwgc21pbGllaWQpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCQl0 cnkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgnSW5zZXJ0SW1hZ2UnLCBm YWxzZSwgc21pbGllcGF0aCk7CgkJCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90YWdz KHRoaXMuZWRpdGRvYy5ib2R5LCAnaW1nJyk7CgkJCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKHNtaWxp ZXNbaV0uc3JjID09IHNtaWxpZXBhdGgpCgkJCQkJCXsKCQkJCQkJCWlmIChzbWls aWVzW2ldLmdldEF0dHJpYnV0ZSgnc21pbGllaWQnKSA8IDEpCgkJCQkJCQl7CgkJ CQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1dGUoJ3NtaWxpZWlkJywgc21pbGll aWQpOwoJCQkJCQkJCXNtaWxpZXNbaV0uc2V0QXR0cmlidXRlKCdib3JkZXInLCAi MCIpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJY2F0Y2goZSkK CQkJCXsKCQkJCQkvLyBmYWlsZWQuLi4gcHJvYmFibHkgZHVlIHRvIGluc2VydGlu ZyBhIHNtaWxpZSBvdmVyIGEgc21pbGllIGluIG1vemlsbGEKCQkJCX0KCQkJfTsK CgkJCS8qKgoJCQkqIEdldCBTZWxlY3Rpb24KCQkJKi8KCQkJdGhpcy5nZXRfc2Vs ZWN0aW9uID0gZnVuY3Rpb24oKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSB0aGlzLmVk aXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJ CQlyYW5nZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApIDog dGhpcy5lZGl0ZG9jLmNyZWF0ZVJhbmdlKCk7CgkJCQl2YXIgbHNzZXJpYWxpemVy ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlTFNTZXJpYWxpemVyKCk7 CgkJCQlyZXR1cm4gbHNzZXJpYWxpemVyLndyaXRlVG9TdHJpbmcocmFuZ2UuY2xv bmVDb250ZW50cygpKTsKCQkJfTsKCgkJCS8qKgoJCQkqIFBhc3RlIFRleHQKCQkJ Ki8KCQkJdGhpcy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHN0cikKCQkJewoJCQkJ dGhpcy5lZGl0ZG9jLmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHN0 cik7CgkJCX07CgkJfQoJfQoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KCS8vIFN0YW5kYXJkIGVkaXRvcgoJLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KCWVsc2UKCXsKCQl0aGlzLmRpc2FibGVfZWRpdG9yID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCWlmICghdGhpcy5kaXNhYmxlZCkKCQkJewoJCQkJdGhp cy5kaXNhYmxlZCA9IHRydWU7CgoJCQkJaWYgKHR5cGVvZiB0ZXh0ICE9ICd1bmRl ZmluZWQnKQoJCQkJewoJCQkJCXRoaXMuZWRpdGJveC52YWx1ZSA9IHRleHQ7CgkJ CQl9CgkJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQgPSB0cnVlOwoJCQl9CgkJfTsK CgkJdGhpcy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlm ICh0eXBlb2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5lZGl0 Ym94LnZhbHVlID0gdGV4dDsKCQkJfQoJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQg PSBmYWxzZTsKCgkJCXRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKCQl9OwoKCQkvKioK CQkqIFdyaXRlcyBjb250ZW50cyB0byB0aGUgPHRleHRhcmVhPgoJCSoKCQkqIEBw YXJhbQlvYmplY3QJPHRleHRhcmVhPgoJCSogQHBhcmFtCXN0cmluZwlJbml0aWFs IHRleHQKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRleHQ7CgkJfQoK CQkvKioKCQkqIFB1dCB0aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuc2V0X2VkaXRvcl9jb250ZW50cyA9IGZ1bmN0aW9uKGluaXRpYWxfdGV4dCkK CQl7CgkJCXZhciBpZnJhbWUgPSB0aGlzLnRleHRvYmoucGFyZW50Tm9kZS5nZXRF bGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF07CgkJCWlmIChpZnJhbWUpCgkJ CXsKCQkJCXRoaXMudGV4dG9iai5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJCQl0aGlz LnRleHRvYmouc3R5bGUud2lkdGggPSBpZnJhbWUuc3R5bGUud2lkdGg7CgkJCQl0 aGlzLnRleHRvYmouc3R5bGUuaGVpZ2h0ID0gaWZyYW1lLnN0eWxlLmhlaWdodDsK CgkJCQlpZnJhbWUuc3R5bGUud2lkdGggPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHls ZS5oZWlnaHQgPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9u ZSc7CgkJCX0KCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMudGV4dG9iajsKCQkJdGhp cy5lZGl0ZG9jID0gdGhpcy50ZXh0b2JqOwoJCQl0aGlzLmVkaXRib3ggPSB0aGlz LnRleHRvYmo7CgkJCXRoaXMuc3BlbGxvYmogPSB0aGlzLnRleHRvYmo7CgoJCQlp ZiAodHlwZW9mIGluaXRpYWxfdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJ dGhpcy53cml0ZV9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsKCQkJfQoK CQkJdGhpcy5lZGl0ZG9jLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJdGhp cy5lZGl0d2luLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCgkJCXRoaXMuaGlz dG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJ CX07CgoJCS8qKgoJCSogU2V0IHRoZSBDU1Mgc3R5bGUgb2YgdGhlIGVkaXRvcgoJ CSovCgkJdGhpcy5zZXRfZWRpdG9yX3N0eWxlID0gZnVuY3Rpb24oKQoJCXsKCQl9 OwoKCQkvKioKCQkqIEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5z ZXRfZWRpdG9yX2Z1bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCWlmICh0aGlz LmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcikKCQkJewoJCQkJdGhpcy5lZGl0ZG9j LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5lZGl0ZG9jX29ua2V5cHJlc3MsIGZhbHNlKTsKCQkJfQoJ CQllbHNlIGlmIChpc19pZSkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLm9ua2V5ZG93 biA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtl eXByZXNzOwoJCQl9CgoJCQl0aGlzLmVkaXR3aW4ub25mb2N1cyA9IHZCX1RleHRf RWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzOwoJCQl0aGlz LmVkaXR3aW4ub25ibHVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5lZGl0d2luX29uYmx1cjsKCQl9OwoKCQkvKioKCQkqIFNldCBDb250ZXh0CgkJ Ki8KCQl0aGlzLnNldF9jb250ZXh0ID0gZnVuY3Rpb24oKQoJCXsKCQl9OwoKCQkv KioKCQkqIEFwcGx5IGZvcm1hdHRpbmcKCQkqLwoJCXRoaXMuYXBwbHlfZm9ybWF0 ID0gZnVuY3Rpb24oY21kLCBkaWFsb2csIGFyZ3VtZW50KQoJCXsKCQkJLy8gdW5k byAmIHJlZG8gYXJyYXkgcG9wcwoKCQkJc3dpdGNoIChjbWQpCgkJCXsKCQkJCWNh c2UgJ2JvbGQnOgoJCQkJY2FzZSAnaXRhbGljJzoKCQkJCWNhc2UgJ3VuZGVybGlu ZSc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cigwLCAxKSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdqdXN0aWZ5bGVm dCc6CgkJCQljYXNlICdqdXN0aWZ5Y2VudGVyJzoKCQkJCWNhc2UgJ2p1c3RpZnly aWdodCc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cig3KSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbmRlbnQnOgoJ CQkJewoJCQkJCXRoaXMud3JhcF90YWdzKGNtZCwgZmFsc2UpOwoJCQkJCXJldHVy bjsKCQkJCX0KCgkJCQljYXNlICdmb250bmFtZSc6CgkJCQl7CgkJCQkJdGhpcy53 cmFwX3RhZ3MoJ2ZvbnQnLCBhcmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoK CQkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygn c2l6ZScsIGFyZ3VtZW50KTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJY2FzZSAn Zm9yZWNvbG9yJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygnY29sb3InLCBh cmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ2NyZWF0ZWxp bmsnOgoJCQkJewoJCQkJCXZhciBzZWwgPSB0aGlzLmdldF9zZWxlY3Rpb24oKTsK CQkJCQlpZiAoc2VsKQoJCQkJCXsKCQkJCQkJdGhpcy53cmFwX3RhZ3MoJ3VybCcs IGFyZ3VtZW50KTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy53 cmFwX3RhZ3MoJ3VybCcsIGFyZ3VtZW50LCBhcmd1bWVudCk7CgkJCQkJfQoJCQkJ CXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbnNlcnRpbWFnZSc6CgkJCQl7CgkJ CQkJdGhpcy53cmFwX3RhZ3MoJ2ltZycsIGZhbHNlLCBhcmd1bWVudCk7CgkJCQkJ cmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ3JlbW92ZWZvcm1hdCc6CgkJCQlyZXR1 cm47CgkJCX0KCgkJCS8vYWxlcnQoJ2NtZCA6OiAnICsgY21kICsgJ1xuZGlhbG9n IDo6ICcgKyBkaWFsb2cgKyAnXG5hcmd1bWVudCA6OiAnICsgYXJndW1lbnQpOwoJ CX07CgoJCXRoaXMudW5kbyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCQl0 aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoLTEpOwoJCQlpZiAoKHN0ciA9IHRoaXMu aGlzdG9yeS5nZXRfc25hcHNob3QoKSkgIT09IGZhbHNlKQoJCQl7CgkJCQl0aGlz LmVkaXRkb2MudmFsdWUgPSBzdHI7CgkJCX0KCQl9OwoKCQl0aGlzLnJlZG8gPSBm dW5jdGlvbigpCgkJewoJCQl0aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoMSk7CgkJ CWlmICgoc3RyID0gdGhpcy5oaXN0b3J5LmdldF9zbmFwc2hvdCgpKSAhPT0gZmFs c2UpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy52YWx1ZSA9IHN0cjsKCQkJfQoJCX07 CgoJCS8qKgoJCSogU3RyaXAgYSBzaW1wbGUgdGFnLi4uCgkJKi8KCQl0aGlzLnN0 cmlwX3NpbXBsZSA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsK CQkJdmFyIG9wZW50YWcgPSAnWycgKyB0YWcgKyAnXSc7CgkJCXZhciBjbG9zZXRh ZyA9ICdbLycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMg PT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoK CQkJd2hpbGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFn KSkgIT09IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0 aW9ucyAtLTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBj bG9zZXRhZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgdGV4dCA9IHN0ci5z dWJzdHIoc3RhcnRpbmRleCArIG9wZW50YWcubGVuZ3RoLCBzdG9waW5kZXggLSBz dGFydGluZGV4IC0gb3BlbnRhZy5sZW5ndGgpOwoJCQkJCXN0ciA9IHN0ci5zdWJz dHIoMCwgc3RhcnRpbmRleCkgKyB0ZXh0ICsgc3RyLnN1YnN0cihzdG9waW5kZXgg KyBjbG9zZXRhZy5sZW5ndGgpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog U3RyaXAgYSB0YWcgd2l0aCBhbiBvcHRpb24KCQkqLwoJCXRoaXMuc3RyaXBfY29t cGxleCA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsKCQkJdmFy IG9wZW50YWcgPSAnWycgKyB0YWcgKyAnPSc7CgkJCXZhciBjbG9zZXRhZyA9ICdb LycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMgPT0gJ3Vu ZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoKCQkJd2hp bGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFnKSkgIT09 IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0aW9ucyAt LTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBjbG9zZXRh ZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgb3BlbmVuZCA9IFBIUC5zdHJp cG9zKHN0ciwgJ10nLCBzdGFydGluZGV4KTsKCQkJCQlpZiAob3BlbmVuZCAhPT0g ZmFsc2UgJiYgb3BlbmVuZCA+IHN0YXJ0aW5kZXggJiYgb3BlbmVuZCA8IHN0b3Bp bmRleCkKCQkJCQl7CgkJCQkJCXZhciB0ZXh0ID0gc3RyLnN1YnN0cihvcGVuZW5k ICsgMSwgc3RvcGluZGV4IC0gb3BlbmVuZCAtIDEpOwoJCQkJCQlzdHIgPSBzdHIu c3Vic3RyKDAsIHN0YXJ0aW5kZXgpICsgdGV4dCArIHN0ci5zdWJzdHIoc3RvcGlu ZGV4ICsgY2xvc2V0YWcubGVuZ3RoKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog UmVtb3ZlIEZvcm1hdHRpbmcKCQkqLwoJCXRoaXMucmVtb3ZlZm9ybWF0ID0gZnVu Y3Rpb24oZSkKCQl7CgkJCXZhciBzaW1wbGVzdHJpcCA9IG5ldyBBcnJheSgnYics ICdpJywgJ3UnKTsKCQkJdmFyIGNvbXBsZXhzdHJpcCA9IG5ldyBBcnJheSgnZm9u dCcsICdjb2xvcicsICdzaXplJyk7CgoJCQl2YXIgc3RyID0gdGhpcy5nZXRfc2Vs ZWN0aW9uKCk7CgkJCWlmIChzdHIgPT09IGZhbHNlKQoJCQl7CgkJCQlyZXR1cm47 CgkJCX0KCgkJCS8vIHNpbXBsZSBzdHJpcHBlcgoJCQlmb3IgKHZhciB0YWcgaW4g c2ltcGxlc3RyaXApCgkJCXsKCQkJCXN0ciA9IHRoaXMuc3RyaXBfc2ltcGxlKHNp bXBsZXN0cmlwW3RhZ10sIHN0cik7CgkJCX0KCgkJCS8vIGNvbXBsZXggc3RyaXBw ZXIKCQkJZm9yICh2YXIgdGFnIGluIGNvbXBsZXhzdHJpcCkKCQkJewoJCQkJc3Ry ID0gdGhpcy5zdHJpcF9jb21wbGV4KGNvbXBsZXhzdHJpcFt0YWddLCBzdHIpOwoJ CQl9CgoJCQl0aGlzLmluc2VydF90ZXh0KHN0cik7CgkJfTsKCgkJLyoqCgkJKiBJ bnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rpb24oZSwg dXJsKQoJCXsKCQkJdGhpcy5wcm9tcHRfbGluaygndXJsJywgdXJsLCB2YnBocmFz ZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0dHA6Ly8nKTsKCQl9OwoKCQkvKioKCQkq IFJlbW92ZSBMaW5rCgkJKi8KCQl0aGlzLnVubGluayA9IGZ1bmN0aW9uKGUpCgkJ ewoJCQl2YXIgc2VsID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCXNlbCA9IHRo aXMuc3RyaXBfc2ltcGxlKCd1cmwnLCBzZWwpOwoJCQlzZWwgPSB0aGlzLnN0cmlw X2NvbXBsZXgoJ3VybCcsIHNlbCk7CgkJCXRoaXMuaW5zZXJ0X3RleHQoc2VsKTsK CQl9OwoKCQkvKioKCQkqIEluc2VydCBFbWFpbCBMaW5rCgkJKi8KCQl0aGlzLmVt YWlsID0gZnVuY3Rpb24oZSwgZW1haWwpCgkJewoJCQl0aGlzLnByb21wdF9saW5r KCdlbWFpbCcsIGVtYWlsLCB2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAn Jyk7CgkJfTsKCgkJLyoqCgkJKiBJbnNlcnQgU21pbGllCgkJKi8KCQl0aGlzLmlu c2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0ZXh0KQoJCXsKCQkJdGhp cy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQoc21p bGlldGV4dCwgc21pbGlldGV4dC5sZW5ndGgsIDApOwoJCX07CgoJCS8qKgoJCSog V3JhcHBlciBmb3IgTGluayAvIEVtYWlsIExpbmsgaW5zZXJ0CgkJKi8KCQl0aGlz LnByb21wdF9saW5rID0gZnVuY3Rpb24odGFnbmFtZSwgdmFsdWUsIHBocmFzZSwg aXByb21wdCkKCQl7CgkJCWlmICh0eXBlb2YgdmFsdWUgPT0gJ3VuZGVmaW5lZCcp CgkJCXsKCQkJCXZhbHVlID0gdGhpcy5zaG93X3Byb21wdChwaHJhc2UsIGlwcm9t cHQsIHRydWUpOwoJCQl9CgkJCWlmICgodmFsdWUgPSB0aGlzLnZlcmlmeV9wcm9t cHQodmFsdWUpKSAhPT0gZmFsc2UpCgkJCXsKCQkJCWlmICh0aGlzLmdldF9zZWxl Y3Rpb24oKSkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7 CgkJCQkJdGhpcy53cmFwX3RhZ3ModGFnbmFtZSwgdmFsdWUpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXRoaXMud3JhcF90YWdzKHRhZ25hbWUsIHZhbHVlLCB2 YWx1ZSk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHRydWU7CgkJfTsKCgkJLyoqCgkJ KiBJbnNlcnQgT3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydG9yZGVyZWRs aXN0ID0gZnVuY3Rpb24oZSkKCQl7CgkJCXRoaXMuaW5zZXJ0bGlzdCh2YnBocmFz ZVsnaW5zZXJ0X29yZGVyZWRfbGlzdCddLCAnMScpOwoJCX07CgoJCS8qKgoJCSog SW5zZXJ0IFVub3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydHVub3JkZXJl ZGxpc3QgPSBmdW5jdGlvbihlKQoJCXsKCQkJdGhpcy5pbnNlcnRsaXN0KHZicGhy YXNlWydpbnNlcnRfdW5vcmRlcmVkX2xpc3QnXSwgJycpOwoJCX07CgoJCS8qKgoJ CSogSW5zZXJ0IExpc3QKCQkqLwoJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9u KHBocmFzZSwgbGlzdHR5cGUpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbTElTVCcg KyAobGlzdHR5cGUgPyAoJz0nICsgbGlzdHR5cGUpIDogJycpICsgJ11cbic7CgkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCgkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJewoJCQkJdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgn KFtcclxuXSt8XltcclxuXSopKD8hXFxbXFwqXFxdfFxcW1xcLz9saXN0KSg/PVte XHJcbl0pJywgJ2dpJyk7CgkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0odHh0 KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsKCQkJ CXRoaXMuaW5zZXJ0X3RleHQodHh0LCB0eHQudkJsZW5ndGgoKSwgMCk7CgkJCX0K CQkJZWxzZQoJCQl7CgkJCQl0aGlzLmluc2VydF90ZXh0KG9wZW50YWcgKyBjbG9z ZXRhZywgb3BlbnRhZy5sZW5ndGgsIGNsb3NldGFnLmxlbmd0aCk7CgoJCQkJaWYg KGlzX2llNykKCQkJCXsKCQkJCQkvLyByZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2Vl ICMyMzA5NykKCQkJCQl2YXIgYmFzZV90YWcgPSBmZXRjaF90YWdzKGRvY3VtZW50 LCAnYmFzZScpOwoJCQkJCXZhciBtb2RhbF9wcmVmaXg7CgkJCQkJaWYgKGJhc2Vf dGFnICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCQkJewoJ CQkJCQltb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQkJCX0KCQkJ CQllbHNlCgkJCQkJewoJCQkJCQltb2RhbF9wcmVmaXggPSAnJzsKCQkJCQl9CgkJ CQkJdmFyIGxpc3R2YWx1ZSA9IHdpbmRvdy5zaG93TW9kYWxEaWFsb2cobW9kYWxf cHJlZml4ICsgImNsaWVudHNjcmlwdC9pZXByb21wdC5odG1sPyIsIHsgJ3ZhbHVl JzogJycsICdsYWJlbCc6IHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJ2Rp cic6IGRvY3VtZW50LmRpciwgJ3RpdGxlJzogZG9jdW1lbnQudGl0bGUsICdsaXN0 dHlwZSc6IGxpc3R0eXBlIH0sICJkaWFsb2dXaWR0aDozMjBweDsgZGlhbG9nSGVp Z2h0OjIzMnB4OyBkaWFsb2dUb3A6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVu VG9wKSArIHBhcnNlSW50KHdpbmRvdy5ldmVudC5jbGllbnRZKSArIHBhcnNlSW50 KGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSAtIDEwMCkgKyAicHg7IGRpYWxvZ0xl ZnQ6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVuTGVmdCkgKyBwYXJzZUludCh3 aW5kb3cuZXZlbnQuY2xpZW50WCkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNj cm9sbExlZnQpIC0gMTYwKSArICJweDsgcmVzaXphYmxlOiBObzsiKTsKCQkJCQlp ZiAodGhpcy52ZXJpZnlfcHJvbXB0KGxpc3R2YWx1ZSkpCgkJCQkJewoJCQkJCQl0 aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3RoKCks IDApOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl3aGlsZSAobGlz dHZhbHVlID0gdGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlzdF9p dGVtJ10sICcnLCBmYWxzZSkpCgkJCQkJewoJCQkJCQlsaXN0dmFsdWUgPSAnWypd JyArIGxpc3R2YWx1ZSArICdcbic7CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQobGlz dHZhbHVlLCBsaXN0dmFsdWUudkJsZW5ndGgoKSwgMCk7CgkJCQkJfQoJCQkJfQoJ CQl9CgkJfTsKCgkJLyoqCgkJKiBPdXRkZW50CgkJKi8KCQl0aGlzLm91dGRlbnQg PSBmdW5jdGlvbihlKQoJCXsKCQkJdmFyIHNlbCA9IHRoaXMuZ2V0X3NlbGVjdGlv bigpOwoJCQlzZWwgPSB0aGlzLnN0cmlwX3NpbXBsZSgnaW5kZW50Jywgc2VsLCAx KTsKCQkJdGhpcy5pbnNlcnRfdGV4dChzZWwpOwoJCX07CgoJCS8qKgoJCSogR2V0 IEVkaXRvciBDb250ZW50cwoJCSovCgkJdGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRz ID0gZnVuY3Rpb24oKQoJCXsKCQkJcmV0dXJuIHRoaXMuZWRpdGRvYy52YWx1ZTsK CQl9OwoKCQkvKioKCQkqIEdldCBTZWxlY3RlZCBUZXh0CgkJKi8KCQl0aGlzLmdl dF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJewoJCQlpZiAodHlwZW9mKHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJ CXJldHVybiB0aGlzLmVkaXRkb2MudmFsdWUuc3Vic3RyKHRoaXMuZWRpdGRvYy5z ZWxlY3Rpb25TdGFydCwgdGhpcy5lZGl0ZG9jLnNlbGVjdGlvbkVuZCAtIHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCk7CgkJCX0KCQkJZWxzZSBpZiAoZG9jdW1l bnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSkK CQkJewoJCQkJcmV0dXJuIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgp LnRleHQ7CgkJCX0KCQkJZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikKCQkJ ewoJCQkJcmV0dXJuIHdpbmRvdy5nZXRTZWxlY3Rpb24oKSArICcnOwoJCQl9CgkJ CWVsc2UKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfTsKCgkJLyoqCgkJ KiBQYXN0ZSBIVE1MCgkJKi8KCQl0aGlzLmluc2VydF90ZXh0ID0gZnVuY3Rpb24o dGV4dCwgbW92ZXN0YXJ0LCBtb3ZlZW5kKQoJCXsKCQkJdmFyIHNlbGVjdGlvbl9j aGFuZ2VkID0gZmFsc2U7CgoJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJCQoJCQlp ZiAodHlwZW9mKHRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVm aW5lZCcpCgkJCXsKCQkJCXZhciBvcG4gPSB0aGlzLmVkaXRkb2Muc2VsZWN0aW9u U3RhcnQgKyAwOwoJCQkJdmFyIHNjcm9sbHBvcyA9IHRoaXMuZWRpdGRvYy5zY3Jv bGxUb3A7CgoJCQkJdGhpcy5lZGl0ZG9jLnZhbHVlID0gdGhpcy5lZGl0ZG9jLnZh bHVlLnN1YnN0cigwLCB0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICsgdGV4 dCArIHRoaXMuZWRpdGRvYy52YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVj dGlvbkVuZCk7CgoJCQkJaWYgKG1vdmVzdGFydCA9PT0gZmFsc2UpCgkJCQl7CgkJ CQkJLy8gZG8gbm90aGluZwoJCQkJfQoJCQkJZWxzZSBpZiAodHlwZW9mIG1vdmVz dGFydCAhPSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQl0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uU3RhcnQgPSBvcG4gKyBtb3Zlc3RhcnQ7CgkJCQkJdGhpcy5lZGl0ZG9j LnNlbGVjdGlvbkVuZCA9IG9wbiArIHRleHQudkJsZW5ndGgoKSAtIG1vdmVlbmQ7 CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdGhpcy5lZGl0ZG9jLnNlbGVjdGlv blN0YXJ0ID0gb3BuOwoJCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25FbmQgPSBv cG4gKyB0ZXh0LnZCbGVuZ3RoKCk7CgkJCQl9CgkJCQl0aGlzLmVkaXRkb2Muc2Ny b2xsVG9wID0gc2Nyb2xscG9zOwoJCQl9CgkJCWVsc2UgaWYgKGRvY3VtZW50LnNl bGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpCgkJCXsK CQkJCXZhciBzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJCXNlbC50ZXh0ID0gdGV4dC5yZXBsYWNlKC9ccj9cbi9nLCAnXHJcbicpOwoJ CQkJCQkJCQkJCQkKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJewoJ CQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBtb3Zl c3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJaWYgKChtb3Zlc3RhcnQg LSB0ZXh0LnZCbGVuZ3RoKCkpICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZVN0 YXJ0KCdjaGFyYWN0ZXInLCBtb3Zlc3RhcnQgLSB0ZXh0LnZCbGVuZ3RoKCkpOwoJ CQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJCQkJfQoJCQkJCWlmICht b3ZlZW5kICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZUVuZCgnY2hhcmFjdGVy JywgLW1vdmVlbmQpOwoJCQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJ CQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2No YXJhY3RlcicsIC10ZXh0LnZCbGVuZ3RoKCkpOwoJCQkJCXNlbGVjdGlvbl9jaGFu Z2VkID0gdHJ1ZTsKCQkJCX0KCgkJCQlpZiAoc2VsZWN0aW9uX2NoYW5nZWQpCgkJ CQl7CgkJCQkJc2VsLnNlbGVjdCgpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJ CQkJLy8gZmFpbGVkIC0ganVzdCBzdHVmZiBpdCBhdCB0aGUgZW5kIG9mIHRoZSBt ZXNzYWdlCgkJCQl0aGlzLmVkaXRkb2MudmFsdWUgKz0gdGV4dDsKCQkJfQoJCX07 CgoJCS8qKgoJCSogUHJlcGFyZSBGb3JtIEZvciBTdWJtaXQKCQkqLwoJCXRoaXMu cHJlcGFyZV9zdWJtaXQgPSBmdW5jdGlvbihzdWJqZWN0dGV4dCwgbWluY2hhcnMp CgkJewoJCQl2YXIgcmV0dXJudmFsdWUgPSB2YWxpZGF0ZW1lc3NhZ2UodGhpcy50 ZXh0b2JqLnZhbHVlLCBzdWJqZWN0dGV4dCwgbWluY2hhcnMpOwoKCQkJaWYgKHJl dHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJCX0KCQkJ ZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwgJiYgdGhpcy5jYXB0Y2hhLmZh aWxlZCkKCQkJewoJCQkJcmV0dXJuIHJldHVybnZhbHVlOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJ CQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCS8v IFNhZmFyaSAvIE9sZCBPcGVyYSBTdGFuZGFyZCBFZGl0b3IgT25seQoJCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJaWYgKGlzX3NhZiB8fCAoaXNf b3BlcmEgJiYgKCFvcGVyYS52ZXJzaW9uIHx8IG9wZXJhLnZlcnNpb24oKSA8IDgp KSkKCQl7CgkJCS8qKgoJCQkqIEluc2VydCBMaXN0IGZvciBTYWZhcmkgYW5kIG9s ZGVyIE9wZXJhCgkJCSovCgkJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9uKHBo cmFzZSwgbGlzdHR5cGUpCgkJCXsKCQkJCXZhciBvcGVudGFnID0gJ1tMSVNUJyAr IChsaXN0dHlwZSA/ICgnPScgKyBsaXN0dHlwZSkgOiAnJykgKyAnXVxuJzsKCQkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCQkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJCXsKCQkJCQl2YXIgcmVnZXggPSBuZXcgUmVnRXhw KCcoW1xyXG5dK3xeW1xyXG5dKikoPyFcXFtcXCpcXF18XFxbXFwvP2xpc3QpKD89 W15cclxuXSknLCAnZ2knKTsKCQkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0o dHh0KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsK CQkJCQl0aGlzLmluc2VydF90ZXh0KHR4dCwgdHh0LnZCbGVuZ3RoKCksIDApOwoJ CQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRoaXMuaW5zZXJ0X3RleHQob3BlbnRh Zywgb3BlbnRhZy5sZW5ndGgsIDApOwoKCQkJCQl3aGlsZSAobGlzdHZhbHVlID0g cHJvbXB0KHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJycpKQoJCQkJCXsK CQkJCQkJbGlzdHZhbHVlID0gJ1sqXScgKyBsaXN0dmFsdWUgKyAnXG4nOwoJCQkJ CQl0aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3Ro KCksIDApOwoJCQkJCX0KCgkJCQkJdGhpcy5pbnNlcnRfdGV4dChjbG9zZXRhZywg Y2xvc2V0YWcubGVuZ3RoLCAwKTsKCQkJCX0KCQkJfTsKCQl9Cgl9CgoJLy8gZ2Vu dGxlbWVuLCBzdGFydCB5b3VyIGVuZ2luZXMuLi4KCXRoaXMuaW5pdCgpOwp9Cgov LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBFZGl0b3IgZXZlbnQg aGFuZGxlciBmdW5jdGlvbnMKCi8qKgoqIENsYXNzIGNvbnRhaW5pbmcgZWRpdG9y IGV2ZW50IGhhbmRsZXJzCiovCmZ1bmN0aW9uIHZCX1RleHRfRWRpdG9yX0V2ZW50 cygpCnsKfQoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIGluIHRo ZSBzbWlsaWVib3gKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVfb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5pbnNlcnRfc21pbGllKGUsCgkJdGhpcy5hbHQsCgkJdGhpcy5zcmMs CgkJdGhpcy5pZC5zdWJzdHIodGhpcy5pZC5sYXN0SW5kZXhPZignXycpICsgMSkK CSk7CgoJaWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYm ICFzbWlsaWVfd2luZG93LmNsb3NlZCkKCXsKCQlzbWlsaWVfd2luZG93LmZvY3Vz KCk7Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogSGFuZGxlcyBhIG1vdXNl IGV2ZW50IG9uIGEgY29tbWFuZCBidXR0b24KKi8KdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5jb21tYW5kX2J1dHRvbl9vbm1vdXNlZXZlbnQgPSBmdW5j dGlvbihlKQp7CgllID0gZG9fYW5fZShlKTsKCglpZiAoZS50eXBlID09ICdjbGlj aycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlz LmNtZCwgZmFsc2UsIHRydWUpOwoJfQoKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5idXR0b25fY29udGV4dCh0aGlzLCBlLnR5cGUpOwp9OwoKLyoqCiogSGFuZGxl cyBhIG1vdXNlIGV2ZW50IG9uIGEgcG9wdXAgY29udHJvbGxlciBidXR0b24KKi8K dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5wb3B1cF9idXR0b25fb25t b3VzZWV2ZW50ID0gZnVuY3Rpb24oZSkKewoJZSA9IGRvX2FuX2UoZSk7CgoJaWYg KGUudHlwZSA9PSAnY2xpY2snKQoJewoJCXRoaXMuX29uY2xpY2soZSk7CgkJdkJf RWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLCAnbW91c2Vv dmVyJyk7Cgl9CgllbHNlCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1l bnVfY29udGV4dCh0aGlzLCBlLnR5cGUpOwoJfQp9OwoKLyoqCiogT3ZlcnJpZGVz IHRoZSBzaG93KCkgZnVuY3Rpb24gZnJvbSB0aGUgdkJtZW51IHN5c3RlbQoqCiog QHBhcmFtCW9iamVjdAlDb250cm9sIG9iamVjdAoqIEBwYXJhbQlib29sZWFuCVNo b3cgaW5zdGFudGx5PwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LnBvcHVwX2J1dHRvbl9zaG93ID0gZnVuY3Rpb24ob2JqLCBpbnN0YW50KQp7Cglp ZiAodHlwZW9mIHZCX0VkaXRvcltvYmouZWRpdG9yaWRdLnBvcHVwc1tvYmouY21k XSA9PSAndW5kZWZpbmVkJyB8fCB2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlkXS5wb3B1 cHNbb2JqLmNtZF0gPT0gbnVsbCkKCXsKCQl2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlk XS5pbml0X3BvcHVwX21lbnUob2JqKTsKCX0KCWVsc2UgaWYgKG9iai5jbWQgPT0g J2F0dGFjaCcgJiYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyA9PSAndW5kZWZpbmVk JyB8fCAhdkJfQXR0YWNobWVudHMuaGFzX2F0dGFjaG1lbnRzKCkpKQoJewoJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7Cgl9Cgl0aGlzLl9zaG93KG9iaiwgaW5zdGFudCk7Cn07CgovKioK KiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gYSBmb3JtYXR0aW5nIDxzZWxlY3Q+ IG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0 aW5nX3NlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCXZhciBhcmcgPSB0 aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsKCWlmIChhcmcg IT0gJycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0 aGlzLmNtZCwgYXJnKTsKCX0KCXRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7Cn07Cgov KioKKiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gdGhlIHNtaWxpZXMgPHNlbGVj dD4gbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnNtaWxp ZXNlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSAhPSAnJykKCXsKCQl2Ql9FZGl0 b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3NtaWxpZShlLAoJCQl0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllcGF0aCwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllaWQKCQkpOwoJfQoJdGhpcy5zZWxlY3Rl ZEluZGV4ID0gMDsKfTsKCi8qKgoqIEhhbmRsZXMgYSBzZWxlY3Rpb24gZnJvbSB0 aGUgYXR0YWNobWVudCA8c2VsZWN0PiBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2 ZW50cy5wcm90b3R5cGUuYXR0YWNoc2VsZWN0X29uY2hhbmdlID0gZnVuY3Rpb24o ZSkKewoJdmFyIGFyZyA9IHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhd LnZhbHVlOwoJaWYgKGFyZyAhPSAnJykKCXsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0 b3JpZF0ud3JhcF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgYXJnKTsKCX0KCXRoaXMu c2VsZWN0ZWRJbmRleCA9IDA7Cn07CgovKioKKiBIYW5kbGVzIGEgbW91c2Ugb3Zl ciBldmVudCBmb3IgdGhlIGF0dGFjaG1lbnQgPHNlbGVjdD4gbWVudQoqLwp2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlvbnMubGVuZ3RoIDw9 IDIpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1aWxkX2F0dGFjaG1l bnRzX3BvcHVwKHRoaXMpOwoJCXJldHVybiB0cnVlOwoJfQp9OwoKLyoqCiogSGFu ZGxlcyBhIG1vdXNlIGV2ZW50IG9uIGEgbWVudSBvcHRpb24KKi8KdkJfVGV4dF9F ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVudCA9 IGZ1bmN0aW9uKGUpCnsKCWUgPSBkb19hbl9lKGUpOwoJdkJfRWRpdG9yW3RoaXMu ZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsIGUudHlwZSwgJ21lbnUnKTsK fTsKCi8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhIGZvcm1hdHRpbmcgb3B0aW9u IGluIHRoZSBmb250L3NpemUgbWVudXMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5mb3JtYXR0aW5nX29wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24o ZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlzLmNt ZCwgdGhpcy5maXJzdENoaWxkLmlubmVySFRNTCk7Cgl2Qm1lbnUuaGlkZSgpOwp9 OwoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgY29sb3Igb3B0aW9uIGluIHRo ZSBjb2xvciBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu Y29sb3JvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCWZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9iYXInKS5zdHlsZS5iYWNrZ3JvdW5k Q29sb3IgPSB0aGlzLmNvbG9ybmFtZTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5mb3JtYXQoZSwgdGhpcy5jbWQsIHRoaXMuY29sb3JuYW1lKTsKCXZCbWVudS5o aWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIGEgY2xpY2sgb24gdGhlIGNvbG9yIGlu c3RhbnQtc2VsZWN0IGJ1dHRvbgoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmNvbG9yb3V0X29uY2xpY2sgPSBmdW5jdGlvbihlKQp7CgllID0gZG9f YW5fZShlKTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXS5mb3JtYXQoZSwgJ2Zv cmVjb2xvcicsIGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9i YXInKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpOwoJcmV0dXJuIGZhbHNlOwp9OwoK LyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIG9wdGlvbiBpbiB0aGUg c21pbGllIG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0 aGlzLmVkaXRvcmlkXS5idXR0b25fY29udGV4dCh0aGlzLCAnbW91c2VvdXQnLCAn bWVudScpOwoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmluc2VydF9zbWlsaWUo ZSwgdGhpcy5zbWlsaWV0ZXh0LCBmZXRjaF90YWdzKHRoaXMsICdpbWcnKVswXS5z cmMsIHRoaXMuc21pbGllaWQpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhh bmRsZXMgYSBjbGljayBvbiB0aGUgJ01vcmUnIGxpbmsgaW4gdGhlIHNtaWxpZSBt ZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuc21pbGllbW9y ZV9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLm9wZW5fc21pbGllX3dpbmRvdyhzbWlsaWV3aW5kb3dfeCwgc21pbGlld2lu ZG93X3kpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhhbmRsZXMgYSBjbGlj ayBvbiB0aGUgJ01hbmFnZScgbGluayBpbiB0aGUgYXR0YWNobWVudHMgbWVudQoq Lwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaG1hbmFnZV9v bmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJtZW51LmhpZGUoKTsKCWZldGNoX29i amVjdCgnbWFuYWdlX2F0dGFjaG1lbnRzX2J1dHRvbicpLm9uY2xpY2soKTsKfTsK Ci8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhbiBhdHRhY2htZW50IG9wdGlvbiBp biB0aGUgYXR0YWNobWVudHMgbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmF0dGFjaG9wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJ dkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsICdt b3VzZW91dCcsICdtZW51Jyk7Cgl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0ud3Jh cF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgdGhpcy5hdHRhY2htZW50aWQpOwoJdkJt ZW51LmhpZGUoKTsKfTsKCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu YXR0YWNoaW5zZXJ0YWxsX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7Cgl2YXIgaW5z ZXJ0ID0gJyc7Cgl2YXIgYnJlYWtjaGFyID0gKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS53eXNpd3lnX21vZGUgPyAnPGJyIC8+PGJyIC8+JyA6ICdcclxuXHJcbicp OwoKCWZvciAodmFyIGlkIGluIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRzKQoJ ewoJCWluc2VydCArPSBpbnNlcnQgIT0gJycgPyBicmVha2NoYXIgOiAnJzsKCQlp bnNlcnQgKz0gJ1tBVFRBQ0hdJyArIGlkICsgJ1svQVRUQUNIXSc7Cgl9Cgl2Ql9F ZGl0b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3RleHQoaW5zZXJ0KTsKCXZCbWVu dS5oaWRlKCk7Cn0KCi8qKgoqIENsb3NlcyB0aGUgc21pbGllIHdpbmRvdyB3aGVu IHRoZSBtYWluIHBhZ2UgZXhpdHMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnBy b3RvdHlwZS5zbWlsaWV3aW5kb3dfb251bmxvYWQgPSBmdW5jdGlvbihlKQp7Cglp ZiAodHlwZW9mIHNtaWxpZV93aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgIXNtaWxp ZV93aW5kb3cuY2xvc2VkKQoJewoJCXNtaWxpZV93aW5kb3cuY2xvc2UoKTsKCX0K fTsKCi8qKgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IHRydWUgb24gZm9jdXMK Ki8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uZm9j dXMgPSBmdW5jdGlvbihlKQp7Cgl0aGlzLmhhc2ZvY3VzID0gdHJ1ZTsKfTsKCi8q KgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IGZhbHNlIG9uIGJsdXIKKi8KdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuaGFzZm9jdXMgPSBmYWxzZTsKfTsKCi8qKgoqIFNl dHMgY29udGV4dCBhbmQgaGlkZXMgbWVudXMgb24gbW91c2UgY2xpY2tzIGluIHRo ZSBlZGl0b3IKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0 ZG9jX29ubW91c2V1cCA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5zZXRfY29udGV4dCgpOwoJaWYgKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS5wb3B1cG1vZGUpCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8qKgoq IFNldHMgY29udGV4dCBvbiBrZXkgcHJlc3NlcyBpbiB0aGUgZWRpdG9yCiovCnZC X1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwID0g ZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLnNldF9jb250 ZXh0KCk7Cn07CgovKioKKiBIYW5kbGUgYSBrZXlwcmVzcyBldmVudCBpbiB0aGUg ZWRpdG9yIHdpbmRvdwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUpCnsKCWlmICghZSkKCXsK CQllID0gd2luZG93LmV2ZW50OwoJfQoKCWlmIChlLmN0cmxLZXkpCgl7CgkJdmFy IGNvZGUgPSBlLmNoYXJDb2RlID8gZS5jaGFyQ29kZSA6IGUua2V5Q29kZTsKCQlz d2l0Y2ggKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKSkK CQl7CgkJCWNhc2UgJ2InOiBjbWQgPSAnYm9sZCc7IGJyZWFrOwoJCQljYXNlICdp JzogY21kID0gJ2l0YWxpYyc7IGJyZWFrOwoJCQljYXNlICd1JzogY21kID0gJ3Vu ZGVybGluZSc7IGJyZWFrOwoJCQlkZWZhdWx0OiByZXR1cm47CgkJfQoKCQllID0g ZG9fYW5fZShlKTsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0uYXBwbHlfZm9y bWF0KGNtZCwgZmFsc2UsIG51bGwpOwoJCXJldHVybiBmYWxzZTsKCX0KCWVsc2Ug aWYgKGUua2V5Q29kZSA9PSA5KQoJewoJCS8vIGZpcnN0IGxldHMgdHJ5IHBvc3Qg aWNvbiwgdGhlbiBzdWJtaXQsIHRoZW4ganVzdCBsZXQgaXQgcHJvY2VlZCBtYWtp bmcgdGhlIHRhYgoJCS8vIHlvdSBjYW4ndCBzdXBwcmVzcyBldmVudHMgYSB0YWIg ZXZlbiBvbiBPcGVyYSBzbyBza2lwIHRoYXQgdG9vLgoJCXZhciBmaXJzdGljb24g PSBmZXRjaF9vYmplY3QoJ3JiX2ljb25pZF8wJyk7CgkJaWYgKGZpcnN0aWNvbiAh PSBudWxsKQoJCXsKCQkJZmlyc3RpY29uLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYg KGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19zYXZlJykgIT0gbnVsbCAm JiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCAr ICdfc2F2ZScpLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYgKGZldGNoX29iamVjdCgn cXJfc3VibWl0JykgIT0gbnVsbCAmJiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9v YmplY3QoJ3FyX3N1Ym1pdCcpLmZvY3VzKCk7CgkJfQoJCWVsc2UKCQl7CgkJCXJl dHVybjsKCQl9CgkJZSA9IGRvX2FuX2UoZSk7Cgl9Cn07CgovKioKKiBTdG9wIHJl c2l6aW5nIG9mIGltYWdlcyBpbiBJRQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCA9IGZ1bmN0aW9uKGUpCnsK CWlmIChlLnNyY0VsZW1lbnQudGFnTmFtZSA9PSAnSU1HJykKCXsKCQlyZXR1cm4g ZmFsc2U7Cgl9Cn07CgovKioKKiBTYXZlIGVkaXRvciBjb250ZW50cyB0byB0ZXh0 YXJlYSBzbyBpZiB3ZSBoaXQgYmFjayAvIGZvcndhcmQgaXRzIG5vdCBsb3N0Ciog T25seSBhcHBlYXJzIHRvIHdvcmsgd2l0aCBGaXJlZm94IGF0IHRoZSBtb21lbnQK Ki8KZnVuY3Rpb24gc2F2ZV9pZnJhbWVfdG9fdGV4dGFyZWEoKQp7Cglmb3IgKHZh ciBlZGl0b3JpZCBpbiB2Ql9FZGl0b3IpCgl7CgkJaWYgKHZCX0VkaXRvcltlZGl0 b3JpZF0ud3lzaXd5Z19tb2RlICYmIHZCX0VkaXRvcltlZGl0b3JpZF0uaW5pdGlh bGl6ZWQpCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLnRleHRvYmoudmFsdWUg PSB2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKTsKCQl9 Cgl9Cn0KCmlmICh3aW5kb3cuYXR0YWNoRXZlbnQpCnsKCXdpbmRvdy5hdHRhY2hF dmVudCgnb25iZWZvcmV1bmxvYWQnLCBzYXZlX2lmcmFtZV90b190ZXh0YXJlYSk7 Cn0KZWxzZSBpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikKewoJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHNhdmVfaWZyYW1lX3RvX3RleHRhcmVh LCB0cnVlKTsKfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g RWRpdG9yIG1vZGUgc3dpdGNoZXIgc3lzdGVtCgovKioKKiBTd2l0Y2ggZWRpdG9y IGJldHdlZW4gc3RhbmRhcmQgYW5kIHd5c2l3eWcgbW9kZXMKKgoqIEBwYXJhbQlz dHJpbmcJRWRpdG9ySUQgKHZCX0VkaXRvclt4XSkKKi8KZnVuY3Rpb24gc3dpdGNo X2VkaXRvcl9tb2RlKGVkaXRvcmlkKQp7CglpZiAoQUpBWF9Db21wYXRpYmxlKQoJ ewoJCXZhciBtb2RlID0gKHZCX0VkaXRvcltlZGl0b3JpZF0ud3lzaXd5Z19tb2Rl ID8gMCA6IDEpOwoKCQlpZiAodkJfRWRpdG9yW2VkaXRvcmlkXS5pbmZsdXggPT0g MSkKCQl7CgkJCS8vIGFscmVhZHkgY2xpY2tlZCwgZ28gYXdheSEKCQkJcmV0dXJu OwoJCX0KCQllbHNlCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLmluZmx1eCA9 IDE7CgkJfQoKCQlpZiAodHlwZW9mIHZCbWVudSAhPSAndW5kZWZpbmVkJykKCQl7 CgkJCXZCbWVudS5oaWRlKCk7CgkJfQoKCQl2YXIgYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7CgkJYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UoZnVuY3Rp b24oKQoJCXsKCQkJaWYgKGFqYXguaGFuZGxlci5yZWFkeVN0YXRlID09IDQgJiYg YWpheC5oYW5kbGVyLnN0YXR1cyA9PSAyMDApCgkJCXsKCQkJCWlmIChhamF4Lmhh bmRsZXIucmVzcG9uc2VYTUwpCgkJCQl7CgkJCQkJLy8gZGVzdHJveWVyCgkJCQkJ dmFyIHBhcnNldHlwZSA9IHZCX0VkaXRvcltlZGl0b3JpZF0ucGFyc2V0eXBlOwoJ CQkJCXZhciBwYXJzZXNtaWxpZXMgPSB2Ql9FZGl0b3JbZWRpdG9yaWRdLnBhcnNl c21pbGllczsKCQkJCQl2YXIgYWpheF9leHRyYSA9IHZCX0VkaXRvcltlZGl0b3Jp ZF0uYWpheF9leHRyYTsKCgkJCQkJdkJfRWRpdG9yW2VkaXRvcmlkXS5kZXN0cm95 KCk7CgoJCQkJCXZhciBwYXJzZWRfdGV4dCA9IGFqYXguZmV0Y2hfZGF0YShmZXRj aF90YWdzKGFqYXguaGFuZGxlci5yZXNwb25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7 CgkJCQkJdmFyIG1hdGNoZXMgPSBwYXJzZWRfdGV4dC5tYXRjaCgvJiMoWzAtOV0r KTsvZyk7CgkJCQkJaWYgKG1hdGNoZXMpCgkJCQkJewoJCQkJCQlmb3IgKHZhciBp ID0gMDsgdHlwZW9mIG1hdGNoZXNbaV0gIT0gJ3VuZGVmaW5lZCc7IGkrKykKCQkJ CQkJewoJCQkJCQkJaWYgKHN1Ym1hdGNoID0gbWF0Y2hlc1tpXS5tYXRjaCgvXiYj KFswLTldKyk7JC8pKQoJCQkJCQkJewoJCQkJCQkJCXBhcnNlZF90ZXh0ID0gcGFy c2VkX3RleHQucmVwbGFjZShzdWJtYXRjaFswXSwgU3RyaW5nLmZyb21DaGFyQ29k ZShzdWJtYXRjaFsxXSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoKCQkJCQkv LyByZW1vdmluZyB0aGlzIGxpbmUgYmVjYXVzZSBvZiBJRTcgZm9jdXMgaXNzdWVz IC0gb24gc2Vjb25kIGFjdGl2YXRpb24gb2YgSUU3IFdZV0lXWUcsIGZvY3VzIGlz IGxvc3QKCQkJCQkvL3ZCX0VkaXRvcltlZGl0b3JpZF0gPSBudWxsOyAvLyBjb2xs ZWN0IHRoZSBnYXJiYWdlCgoJCQkJCXZCX0VkaXRvcltlZGl0b3JpZF0gPSBuZXcg dkJfVGV4dF9FZGl0b3IoZWRpdG9yaWQsIG1vZGUsIHBhcnNldHlwZSwgcGFyc2Vz bWlsaWVzLCBwYXJzZWRfdGV4dCwgYWpheF9leHRyYSk7CgkJCQkJdkJfRWRpdG9y W2VkaXRvcmlkXS5jaGVja19mb2N1cygpOwoJCQkJCWZldGNoX29iamVjdChlZGl0 b3JpZCArICdfbW9kZScpLnZhbHVlID0gbW9kZTsKCQkJCX0KCgkJCQlpZiAoaXNf aWUpCgkJCQl7CgkJCQkJYWpheC5oYW5kbGVyLmFib3J0KCk7CgkJCQl9CgkJCX0K CQl9KTsKCgkJLy8gISFhdHRlbnRpb24KCQlhamF4LnNlbmQoJ2FqYXgucGhwP2Rv PWVkaXRvcnN3aXRjaCcsICdkbz1lZGl0b3Jzd2l0Y2gnCgkJCSsgJyZ0b3d5c2l3 eWc9JwkrIG1vZGUKCQkJKyAnJnBhcnNldHlwZT0nICsgdkJfRWRpdG9yW2VkaXRv cmlkXS5wYXJzZXR5cGUKCQkJKyAnJmFsbG93c21pbGllPScgKyB2Ql9FZGl0b3Jb ZWRpdG9yaWRdLnBhcnNlc21pbGllcwoJCQkrICcmbWVzc2FnZT0nICsgUEhQLnVy bGVuY29kZSh2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMo KSkKCQkJKyAodkJfRWRpdG9yW2VkaXRvcmlkXS5hamF4X2V4dHJhID8gKCcmJyAr IHZCX0VkaXRvcltlZGl0b3JpZF0uYWpheF9leHRyYSkgOiAnJykKCQkpOwoJfQp9 CgoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gR2VuZXJpYyBn bG9iYWwgZWRpdG9yIHZhcmlhYmxlcwoKLyoqCiogRGVmaW5lIHdoaWNoIGJ1dHRv bnMgYXJlIGNvbnRleHQtY29udHJvbGxlZAoqCiogQHZhcglhcnJheQlDb250ZXh0 IGNvbnRyb2xzCiovCnZhciBjb250ZXh0Y29udHJvbHMgPSBuZXcgQXJyYXkoCgkn Ym9sZCcsCgknaXRhbGljJywKCSd1bmRlcmxpbmUnLAoJJ2p1c3RpZnlsZWZ0JywK CSdqdXN0aWZ5Y2VudGVyJywKCSdqdXN0aWZ5cmlnaHQnLAoJJ2luc2VydG9yZGVy ZWRsaXN0JywKCSdpbnNlcnR1bm9yZGVyZWRsaXN0JwopOwoKLyoqCiogRGVmaW5l IGF2YWlsYWJsZSBjb2xvciBuYW1lIG9wdGlvbnMgLSBrZXllZCB3aXRoIGhleCB2 YWx1ZQoqCiogQHZhcglhcnJheQlDb2xvciBvcHRpb25zCiovCnZhciBjb2xvcm9w dGlvbnMgPSBuZXcgQXJyYXkoKTsKY29sb3JvcHRpb25zID0gewoJJyMwMDAwMDAn IDogJ0JsYWNrJywKCScjQTA1MjJEJyA6ICdTaWVubmEnLAoJJyM1NTZCMkYnIDog J0RhcmtPbGl2ZUdyZWVuJywKCScjMDA2NDAwJyA6ICdEYXJrR3JlZW4nLAoJJyM0 ODNEOEInIDogJ0RhcmtTbGF0ZUJsdWUnLAoJJyMwMDAwODAnIDogJ05hdnknLAoJ JyM0QjAwODInIDogJ0luZGlnbycsCgknIzJGNEY0RicgOiAnRGFya1NsYXRlR3Jh eScsCgknIzhCMDAwMCcgOiAnRGFya1JlZCcsCgknI0ZGOEMwMCcgOiAnRGFya09y YW5nZScsCgknIzgwODAwMCcgOiAnT2xpdmUnLAoJJyMwMDgwMDAnIDogJ0dyZWVu JywKCScjMDA4MDgwJyA6ICdUZWFsJywKCScjMDAwMEZGJyA6ICdCbHVlJywKCScj NzA4MDkwJyA6ICdTbGF0ZUdyYXknLAoJJyM2OTY5NjknIDogJ0RpbUdyYXknLAoJ JyNGRjAwMDAnIDogJ1JlZCcsCgknI0Y0QTQ2MCcgOiAnU2FuZHlCcm93bicsCgkn IzlBQ0QzMicgOiAnWWVsbG93R3JlZW4nLAoJJyMyRThCNTcnIDogJ1NlYUdyZWVu JywKCScjNDhEMUNDJyA6ICdNZWRpdW1UdXJxdW9pc2UnLAoJJyM0MTY5RTEnIDog J1JveWFsQmx1ZScsCgknIzgwMDA4MCcgOiAnUHVycGxlJywKCScjODA4MDgwJyA6 ICdHcmF5JywKCScjRkYwMEZGJyA6ICdNYWdlbnRhJywKCScjRkZBNTAwJyA6ICdP cmFuZ2UnLAoJJyNGRkZGMDAnIDogJ1llbGxvdycsCgknIzAwRkYwMCcgOiAnTGlt ZScsCgknIzAwRkZGRicgOiAnQ3lhbicsCgknIzAwQkZGRicgOiAnRGVlcFNreUJs dWUnLAoJJyM5OTMyQ0MnIDogJ0RhcmtPcmNoaWQnLAoJJyNDMEMwQzAnIDogJ1Np bHZlcicsCgknI0ZGQzBDQicgOiAnUGluaycsCgknI0Y1REVCMycgOiAnV2hlYXQn LAoJJyNGRkZBQ0QnIDogJ0xlbW9uQ2hpZmZvbicsCgknIzk4RkI5OCcgOiAnUGFs ZUdyZWVuJywKCScjQUZFRUVFJyA6ICdQYWxlVHVycXVvaXNlJywKCScjQUREOEU2 JyA6ICdMaWdodEJsdWUnLAoJJyNEREEwREQnIDogJ1BsdW0nLAoJJyNGRkZGRkYn IDogJ1doaXRlJwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ly8gdkJfSGlzdG9yeQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoK ZnVuY3Rpb24gdkJfSGlzdG9yeSgpCnsKCXRoaXMuY3Vyc29yID0gLTE7Cgl0aGlz LnN0YWNrID0gbmV3IEFycmF5KCk7Cn0KCi8vID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci8vIHZCX0hpc3RvcnkgbWV0aG9kcwoKdkJfSGlzdG9yeS5wcm90 b3R5cGUubW92ZV9jdXJzb3IgPSBmdW5jdGlvbihpbmNyZW1lbnQpCnsKCXZhciB0 ZXN0ID0gdGhpcy5jdXJzb3IgKyBpbmNyZW1lbnQ7CglpZiAodGVzdCA+PSAwICYm IHRoaXMuc3RhY2tbdGVzdF0gIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zdGFja1t0 ZXN0XSAhPSAndW5kZWZpbmVkJykKCXsKCQl0aGlzLmN1cnNvciArPSBpbmNyZW1l bnQ7Cgl9Cn07Cgp2Ql9IaXN0b3J5LnByb3RvdHlwZS5hZGRfc25hcHNob3QgPSBm dW5jdGlvbihzdHIpCnsKCWlmICh0aGlzLnN0YWNrW3RoaXMuY3Vyc29yXSA9PSBz dHIpCgl7CgkJcmV0dXJuOwoJfQoJZWxzZQoJewoJCXRoaXMuY3Vyc29yKys7CgkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gPSBzdHI7CgoJCWlmICh0eXBlb2YgdGhp cy5zdGFja1t0aGlzLmN1cnNvciArIDFdICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvciArIDFdID0gbnVsbDsKCQl9Cgl9Cn07Cgp2 Ql9IaXN0b3J5LnByb3RvdHlwZS5nZXRfc25hcHNob3QgPSBmdW5jdGlvbigpCnsK CWlmICh0eXBlb2YgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gJ3VuZGVmaW5l ZCcgJiYgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gbnVsbCkKCXsKCQlyZXR1 cm4gdGhpcy5zdGFja1t0aGlzLmN1cnNvcl07Cgl9CgllbHNlCgl7CgkJcmV0dXJu IGZhbHNlOwoJfQp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAxNDo0MSwgVGh1IFNl cCAxOHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMjcw MjIgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0qLw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_editor.css Content-Type: text/css; charset=windows-1251; name=vbulletin_editor.css Content-Location: http://forum.qip.ru/clientscript/vbulletin_editor.css Content-Transfer-Encoding: 8bit /*======================================================================*\ || #################################################################### || || # vBulletin 3.6.10 Patch Level 2 || # ---------------------------------------------------------------- # || || # All code in this file is ©2000-2008 Jelsoft Enterprises Ltd. # || || # This file may not be redistributed in whole or significant part. # || || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || || #################################################################### || \*======================================================================*/ /* the container for the editor */ .vBulletin_editor { border: 2px groove; } /* the container for all the edit controls */ #controlbar, .controlbar { padding: 2px; } /* the WYSIWYG edit area itself */ #htmlbox { border: 2px inset; font: 10pt verdana; overflow: auto; } /* an individual button */ .imagebutton { left: 0px; top: 0px; } /* an individual WYSIWYG color element in the color popup */ .ocolor { padding: 2px; font-size: 1px; } /* WYSIWYG the part of the color element that gets colored */ .ocolor div { width: 10px; height: 10px; border: 1px solid #ACA899; } /* WYSIWYG font, size and smilie elements within popups */ .ofont, .osize, .osmilie, .otextlink { font: 11px tahoma; cursor: default; } /* style for WYSIWYG font option elements */ .ofont { padding: 0px 4px 0px 10px; font-size: 14px; height: 20px; } /* style for WYSIWYG size option elements */ .osize { padding: 0px 4px 0px 4px; width: 30px; } /* the smilie image within a WYSIWYG smilie popup */ .osmilie img { vertical-align: middle; margin: 4px; } /* text buttons within popup menus */ .otextlink { text-align: center; margin-top: 4px; height: 20px; } /* the left cell of a WYSIWYG popup menu control */ .popup_feedback { font: 11px tahoma; height: 18px; padding: 0px 3px 0px 3px; white-space: nowrap; overflow: hidden; } /* the container window for a WYSIWYG popup menu */ .popupwindow { border: 1px solid APPWORKSPACE; padding: 3px; position: absolute; left: 0px; top: 0px; z-index: 5; } /* the WYSIWYG color popup */ #popup_forecolor { padding: 3px; } /* the WYSIWYG font popup */ #popup_fontname { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG size popup */ #popup_fontsize { padding: 1px; } /* the WYSIWYG smilie popup */ #popup_smilie { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG attach popup */ #popup_attach { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the context-notification area for WYSIWYG font and size feedback */ #fontOut, #sizeOut, .popup_feedback div { height: 16px; border: 0px solid; padding: 0px 2px 0px 2px; cursor: default; font: 11px tahoma; overflow: hidden; } /*======================================================================*\ || #################################################################### || # Downloaded: 05:52, Tue Jun 24th 2008 || # CVS: $RCSfile$ - $Revision: 13470 $ || #################################################################### \*======================================================================*/ ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_quick_edit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_quick_edit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_edit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemUgQUpBWCBwb3N0IGVkaXRpbmcKKgoqIEBwYXJhbQltaXhlZAlJRCBv ZiBlbGVtZW50IChvciBhY3R1YWwgZWxlbWVudCkgY29udGFpbmluZyBwb3N0Yml0 cwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1F1aWNrRWRpdF9Jbml0KHBvc3RvYmopCnsK CWlmIChBSkFYX0NvbXBhdGlibGUpCgl7CgkJaWYgKHR5cGVvZiBwb3N0b2JqID09 ICdzdHJpbmcnKQoJCXsKCQkJcG9zdG9iaiA9IGZldGNoX29iamVjdChwb3N0b2Jq KTsKCQl9CgkJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKHBvc3RvYmosICdhJyk7 CgkJdmFyIHBvc3RpZCA9IDA7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNob3Jz Lmxlbmd0aDsgaSsrKQoJCXsKCQkJaWYgKGFuY2hvcnNbaV0ubmFtZSAmJiBhbmNo b3JzW2ldLm5hbWUuaW5kZXhPZigndkI6OlF1aWNrRWRpdDo6JykgIT0gLTEpCgkJ CXsKCQkJCWFuY2hvcnNbaV0ub25jbGljayA9IHZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5lZGl0YnV0dG9uX2NsaWNrOwoJCQl9CgkJfQoJfQp9 CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9BSkFYX1F1 aWNrRWRpdG9yCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioK KiBDbGFzcyB0byBhbGxvdyBxdWljayBlZGl0aW5nIG9mIHBvc3RzIHdpdGhpbiBw b3N0Yml0IHZpYSBBSkFYCiovCmZ1bmN0aW9uIHZCX0FKQVhfUXVpY2tFZGl0b3Io KQp7Cgl0aGlzLnBvc3RpZCA9IG51bGw7Cgl0aGlzLm1lc3NhZ2VvYmogPSBudWxs OwoJdGhpcy5jb250YWluZXIgPSBudWxsOwoJdGhpcy5vcmlnaW5hbGh0bWwgPSBu dWxsOwoJdGhpcy5hamF4ID0gbnVsbDsKCXRoaXMuZWRpdHN0YXRlID0gZmFsc2U7 Cgl0aGlzLmVkaXRvcmNvdW50ZXIgPSAwOwoJdGhpcy5wZW5kaW5nID0gZmFsc2U7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0FKQVhf UXVpY2tFZGl0b3IgbWV0aG9kcwoKLyoqCiogQ2hlY2sgaWYgdGhlIEFKQVggc3lz dGVtIGlzIHJlYWR5IGZvciB1cyB0byBwcm9jZWVkCioKKiBAcmV0dXJuCWJvb2xl YW4KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUucmVhZHkgPSBmdW5j dGlvbigpCnsKCWlmICh0aGlzLmVkaXRzdGF0ZSB8fCB0aGlzLnBlbmRpbmcpCgl7 CgkJcmV0dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCXJldHVybiB0cnVlOwoJfQp9 OwoKLyoqCiogUHJlcGFyZSB0byBlZGl0IGEgc2luZ2xlIHBvc3QKKgoqIEBwYXJh bQlzdHJpbmcJTmFtZSBhdHRyaWJ1dGUgb2YgY2xpY2tlZCBsaW5rIC0gdGFrZXMg dGhlIGZvcm0gb2YgJ3ZCOjpRdWlja0VkaXQ6OiRwb3N0aWQnCioKKiBAcmV0dXJu CWJvb2xlYW4JZmFsc2UKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUu ZWRpdCA9IGZ1bmN0aW9uKGFuY2hvcl9uYW1lKQp7Cgl2YXIgdGVzdF9hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCWlmICghdGVzdF9hamF4LmluaXQo KSB8fCAodHlwZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2 Yl9kaXNhYmxlX2FqYXggPiAwKSkKCXsKCQkvLyBjb3VsZG4ndCBpbml0aWFsaXpl LCByZXR1cm4gdHJ1ZSB0byBhbGxvdyBjbGljayB0byBnbyB0aHJvdWdoCgkJcmV0 dXJuIHRydWU7Cgl9CgoJdmFyIHRtcHBvc3RpZCA9IGFuY2hvcl9uYW1lLnN1YnN0 cihhbmNob3JfbmFtZS5sYXN0SW5kZXhPZignOjonKSArIDIpOwoKCWlmICh0aGlz LnBlbmRpbmcpCgl7CgkJLy8gc29tZXRoaW5nIGlzIHdhaXRpbmcgdG8gY29tcGxl dGUKCQlyZXR1cm4gZmFsc2U7Cgl9CgllbHNlIGlmICghdGhpcy5yZWFkeSgpKQoJ ewoJCWlmICh0aGlzLnBvc3RpZCA9PSB0bXBwb3N0aWQpCgkJewoJCQl0aGlzLmZ1 bGxfZWRpdCgpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXRoaXMuYWJvcnQoKTsK CX0KCgl0aGlzLmVkaXRvcmNvdW50ZXIrKzsKCXRoaXMuZWRpdG9yaWQgPSAndkJf RWRpdG9yX1FFXycgKyB0aGlzLmVkaXRvcmNvdW50ZXI7CgoJdGhpcy5wb3N0aWQg PSB0bXBwb3N0aWQ7CgoJdGhpcy5tZXNzYWdlb2JqID0gZmV0Y2hfb2JqZWN0KCdw b3N0X21lc3NhZ2VfJyArIHRoaXMucG9zdGlkKTsKCXRoaXMub3JpZ2luYWxodG1s ID0gdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTDsKCgl0aGlzLnVuY2hhbmdlZCA9 IG51bGw7Cgl0aGlzLnVuY2hhbmdlZF9yZWFzb24gPSBudWxsOwoKCXRoaXMuZmV0 Y2hfZWRpdG9yKCk7CgoJdGhpcy5lZGl0c3RhdGUgPSB0cnVlOwoKCXJldHVybiBm YWxzZTsKfTsKCi8qKgoqIFNlbmQgYW4gQUpBWCByZXF1ZXN0IHRvIGZldGNoIHRo ZSBlZGl0b3IgSFRNTAoqLwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5m ZXRjaF9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3By b2dyZXNzXycgKyB0aGlzLnBvc3RpZCkpCgl7CgkJZmV0Y2hfb2JqZWN0KCdwcm9n cmVzc18nICsgdGhpcy5wb3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKCX0KCWRv Y3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ3dhaXQnOwoJdGhpcy5hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCXRoaXMuYWpheC5vbnJlYWR5c3Rh dGVjaGFuZ2UodGhpcy5kaXNwbGF5X2VkaXRvcik7Cgl0aGlzLmFqYXguc2VuZCgn YWpheC5waHA/ZG89cXVpY2tlZGl0JnA9JyArIHRoaXMucG9zdGlkLCAnZG89cXVp Y2tlZGl0JnA9JyArIHRoaXMucG9zdGlkICsgJyZlZGl0b3JpZD0nICsgUEhQLnVy bGVuY29kZSh0aGlzLmVkaXRvcmlkKSk7Cgl0aGlzLnBlbmRpbmcgPSB0cnVlOwp9 OwoKLyoqCiogRGlzcGxheSB0aGUgZWRpdG9yIEhUTUwgd2hlbiBBSkFYIHNheXMg ZmV0Y2hfZWRpdG9yKCkgaXMgcmVhZHkKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGlzcGxheV9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFY ID0gdkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5 U3RhdGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJaWYgKGZldGNo X29iamVjdCgncHJvZ3Jlc3NfJyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCkpCgkJ ewoJCQlmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0VkaXRvci5w b3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJfQoJCWRvY3VtZW50LmJv ZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJCXZCX1F1aWNrRWRpdG9yLnBlbmRp bmcgPSBmYWxzZTsKCgkJaWYgKGZldGNoX3RhZ19jb3VudChBSkFYLnJlc3BvbnNl WE1MLCAnZGlzYWJsZWQnKSkKCQl7CgkJCS8vIHRoaXMgd2lsbCBmaXJlIGlmIHF1 aWNrIGVkaXQgaGFzIGJlZW4gZGlzYWJsZWQgYWZ0ZXIgdGhlIHNob3d0aHJlYWQg cGFnZSBpcyBsb2FkZWQKCQkJd2luZG93LmxvY2F0aW9uID0gJ2VkaXRwb3N0LnBo cD8nICsgU0VTU0lPTlVSTCArICdkbz1lZGl0cG9zdCZwb3N0aWQ9JyArIHZCX1F1 aWNrRWRpdG9yLnBvc3RpZDsKCQl9CgkJZWxzZSBpZiAoZmV0Y2hfdGFnX2NvdW50 KEFKQVgucmVzcG9uc2VYTUwsICdlcnJvcicpKQoJCXsKCQkJLy8gZG8gbm90aGlu ZwoJCX0KCQllbHNlCgkJewoJCQl2YXIgZWRpdG9yID0gZmV0Y2hfdGFncyhBSkFY LnJlc3BvbnNlWE1MLCAnZWRpdG9yJylbMF07CgkJCWlmICh0eXBlb2YgZWRpdG9y ID09ICd1bmRlZmluZWQnKQoJCQl7CgkJCQl3aW5kb3cubG9jYXRpb24gPSAiZWRp dHBvc3QucGhwPyIgKyBTRVNTSU9OVVJMICsgImRvPWVkaXRwb3N0JnBvc3RpZD0i ICsgdGhpcy5wb3N0aWQ7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJdmFyIHJl YXNvbiA9IGVkaXRvci5nZXRBdHRyaWJ1dGUoJ3JlYXNvbicpOwoKCQkJLy8gZGlz cGxheSB0aGUgZWRpdG9yCgkJCXZCX1F1aWNrRWRpdG9yLm1lc3NhZ2VvYmouaW5u ZXJIVE1MID0gdkJfUXVpY2tFZGl0b3IuYWpheC5mZXRjaF9kYXRhKGVkaXRvcik7 CgoJCQkvLyBkaXNwbGF5IHRoZSByZWFzb24KCQkJaWYgKGZldGNoX29iamVjdCh2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKSkKCQkJewoJ CQkJdkJfUXVpY2tFZGl0b3IudW5jaGFuZ2VkX3JlYXNvbiA9IFBIUC51bmh0bWxz cGVjaWFsY2hhcnMocmVhc29uKTsKCQkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKS52YWx1ZSA9IHZCX1F1aWNr RWRpdG9yLnVuY2hhbmdlZF9yZWFzb247CgkJCQlmZXRjaF9vYmplY3QodkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRfcmVhc29uJykub25rZXlwcmVzcyA9 IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5 X3RyYXA7CgkJCX0KCgkJCS8vIGluaXRpYWxpemUgdGhlIGVkaXRvcgoJCQl2Ql9F ZGl0b3JbdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWRdID0gbmV3IHZCX1RleHRfRWRp dG9yKAoJCQkJdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQsCgkJCQllZGl0b3IuZ2V0 QXR0cmlidXRlKCdtb2RlJyksCgkJCQllZGl0b3IuZ2V0QXR0cmlidXRlKCdwYXJz ZXR5cGUnKSwKCQkJCWVkaXRvci5nZXRBdHRyaWJ1dGUoJ3BhcnNlc21pbGllcycp CgkJCSk7CgoJCQlpZiAoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0b3InKSAmJiBmZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWQgKyAnX2VkaXRvcicpLnNjcm9sbEludG9WaWV3KQoJCQl7CgkJCQlm ZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRvcicp LnNjcm9sbEludG9WaWV3KHRydWUpOwoJCQl9CgoJCQl2Ql9FZGl0b3JbdkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWRdLmVkaXRib3guc3R5bGUud2lkdGggPSAnMTAwJSc7 CgkJCXZCX0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uY2hlY2tfZm9j dXMoKTsKCgkJCXZCX1F1aWNrRWRpdG9yLnVuY2hhbmdlZCA9IHZCX0VkaXRvclt2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250ZW50cygpOwoK CQkJZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkICsgJ19zYXZl Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9yLnNhdmU7CgkJCWZldGNoX29iamVj dCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfYWJvcnQnKS5vbmNsaWNrID0g dkJfUXVpY2tFZGl0b3IuYWJvcnQ7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfYWR2Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LmZ1bGxfZWRpdDsKCgkJCXZhciBkZWxidXR0b24gPSBmZXRjaF9vYmplY3QodkJf UXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2RlbGV0ZScpOwoJCQlpZiAoZGVsYnV0 dG9uKQoJCQl7CgkJCQlkZWxidXR0b24ub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LnNob3dfZGVsZXRlOwoJCQl9CgkJfQoKCQlpZiAoaXNfaWUpCgkJewoJCQlBSkFY LmFib3J0KCk7CgkJfQoJfQp9OwoKLyoqCiogRGVzdHJveSB0aGUgZWRpdG9yLCBh bmQgdXNlIHRoZSBzcGVjaWZpZWQgdGV4dCBhcyB0aGUgcG9zdCBjb250ZW50cwoq CiogQHBhcmFtCXN0cmluZwlUZXh0IG9mIHBvc3QKKi8KdkJfQUpBWF9RdWlja0Vk aXRvci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKHBvc3RfaHRtbCwgdHlw ZSkKewoJdGhpcy5oaWRlX2Vycm9ycyh0cnVlKTsKCWlmICh0aGlzLmVkaXRvcmlk ICYmIHZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXSAmJiB2Ql9FZGl0b3JbdGhpcy5l ZGl0b3JpZF0uaW5pdGlhbGl6ZWQpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLmRlc3Ryb3koKTsKCX0KCWlmICh0eXBlID09ICd0YWJsZW9iaicpCgl7CgkJ Ly8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdlIGlzIHNhdmVkCgkJZmV0Y2hf b2JqZWN0KCdlZGl0JyArIHRoaXMucG9zdGlkKS5pbm5lckhUTUwgPSBwb3N0X2h0 bWw7Cgl9CgllbHNlCgl7CgkJLy8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdl IGVkaXQgaXMgY2FuY2VsbGVkCgkJdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTCA9 IHBvc3RfaHRtbDsKCX0KCgl0aGlzLmVkaXRzdGF0ZSA9IGZhbHNlOwp9OwoKLyoq CiogQ2FuY2VsIHRoZSBwb3N0IGVkaXQgYW5kIHJlc3RvcmUgZXZlcnl0aGluZyB0 byBob3cgaXQgc3RhcnRlZAoqCiogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9u KGUpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0Vk aXRvci5wb3N0aWQpKQoJewoJCWZldGNoX29iamVjdCgncHJvZ3Jlc3NfJyArIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0K CWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJdkJfUXVpY2tF ZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5vcmlnaW5hbGh0bWwsICdtZXNz YWdlb2JqJyk7Cn07CgovKioKKiBQYXNzIHRoZSBlZGl0cyBhbG9uZyB0byB0aGUg ZnVsbCBlZGl0cG9zdC5waHAgaW50ZXJmYWNlCioKKiBAcGFyYW0JZXZlbnQJRXZl bnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3IucHJvdG90eXBlLmZ1bGxf ZWRpdCA9IGZ1bmN0aW9uKGUpCnsKCXZhciBmb3JtID0gbmV3IHZCX0hpZGRlbl9G b3JtKCdlZGl0cG9zdC5waHA/ZG89ZWRpdHBvc3QmcG9zdGlkPScgKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQpOwoKCWZvcm0uYWRkX3ZhcmlhYmxlKCdkbycsICd1cGRh dGVwb3N0Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncycsIGZldGNoX3Nlc3Npb25o YXNoKCkpOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3NlY3VyaXR5dG9rZW4nLCBTRUNV UklUWVRPS0VOKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdhZHZhbmNlZCcsIDEpOwoJ Ly8gRG9uJ3QgcHJldmlldyAtIHNlZSBlZGl0cG9zdC5waHAgaWYgeW91IHdhbnQg dG8ga25vdyB3aHkKCS8vZm9ybS5hZGRfdmFyaWFibGUoJ3ByZXZpZXcnLCAnWWVz Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncG9zdGlkJywgdkJfUXVpY2tFZGl0b3Iu cG9zdGlkKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCd3eXNpd3lnJywgdkJfRWRpdG9y W3ZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkXS53eXNpd3lnX21vZGUpOwoJZm9ybS5h ZGRfdmFyaWFibGUoJ21lc3NhZ2UnLCB2Ql9FZGl0b3JbdkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKSk7Cglmb3JtLmFkZF92YXJp YWJsZSgncmVhc29uJywgZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKTsKCglmb3JtLnN1Ym1pdF9mb3Jt KCk7Cn0KCi8qKgoqIFNhdmUgdGhlIGVkaXRlZCBwb3N0IHZpYSBBSkFYCioKKiBA cGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Iu cHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbihlKQp7Cgl2YXIgbmV3dGV4dCA9IHZC X0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoJdmFyIG5ld3JlYXNvbiA9IHZCX0VkaXRvclt2Ql9RdWlja0VkaXRv ci5lZGl0b3JpZF07CgoJaWYgKG5ld3RleHQgPT0gdkJfUXVpY2tFZGl0b3IudW5j aGFuZ2VkICYmIG5ld3JlYXNvbiA9PSB2Ql9RdWlja0VkaXRvci51bmNoYW5nZWRf cmVhc29uKQoJewoJCXZCX1F1aWNrRWRpdG9yLmFib3J0KGUpOwoJfQoJZWxzZQoJ ewoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfcG9z dGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJZG9jdW1lbnQuYm9keS5z dHlsZS5jdXJzb3IgPSAnd2FpdCc7CgoJCXBjX29iaiA9IGZldGNoX29iamVjdCgn cG9zdGNvdW50JyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCk7CgkJdkJfUXVpY2tF ZGl0b3IuYWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdkJfUXVp Y2tFZGl0b3IuYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UodkJfUXVpY2tFZGl0b3Iu dXBkYXRlKTsKCQl2Ql9RdWlja0VkaXRvci5hamF4LnNlbmQoJ2VkaXRwb3N0LnBo cD9kbz11cGRhdGVwb3N0JnBvc3RpZD0nICsgdkJfUXVpY2tFZGl0b3IucG9zdGlk LAoJCQknZG89dXBkYXRlcG9zdCZhamF4PTEmcG9zdGlkPScKCQkJKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQKCQkJKyAnJnd5c2l3eWc9JyArIHZCX0VkaXRvclt2Ql9R dWlja0VkaXRvci5lZGl0b3JpZF0ud3lzaXd5Z19tb2RlCgkJCSsgJyZtZXNzYWdl PScgKyBQSFAudXJsZW5jb2RlKG5ld3RleHQpCgkJCSsgJyZyZWFzb249JyArIFBI UC51cmxlbmNvZGUoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlk ICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKQoJCQkrIChwY19vYmogIT0gbnVsbCA/ ICcmcG9zdGNvdW50PScgKyBQSFAudXJsZW5jb2RlKHBjX29iai5uYW1lKSA6ICcn KQoJCSk7CgoJCXZCX1F1aWNrRWRpdG9yLnBlbmRpbmcgPSB0cnVlOwoJfQp9OwoK LyoqCiogU2hvdyB0aGUgZGVsZXRlIGRpYWxvZwoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS5zaG93X2RlbGV0ZSA9IGZ1bmN0aW9uKCkKewoJdkJfUXVp Y2tFZGl0b3IuZGVsZXRlZGlhbG9nID0gZmV0Y2hfb2JqZWN0KCdxdWlja2VkaXRf ZGVsZXRlJyk7CglpZiAodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nICYmIHZC X1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ICE9ICcnKQoJ ewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ID0g Jyc7CgoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1dHRvbiA9IGZldGNoX29iamVj dCgncXVpY2tlZGl0X2RvZGVsZXRlJyk7CgkJdkJfUXVpY2tFZGl0b3IuZGVsZXRl YnV0dG9uLm9uY2xpY2sgPSB2Ql9RdWlja0VkaXRvci5kZWxldGVfcG9zdDsKCgkJ aWYgKGZldGNoX29iamVjdCgnZGVsX3JlYXNvbicpKQoJCXsKCQkJZmV0Y2hfb2Jq ZWN0KCdkZWxfcmVhc29uJykub25rZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJfQoK CQkvLyBkb24ndCBkbyB0aGlzIHN0dWZmIGZvciBicm93c2VycyB0aGF0IGRvbid0 IGhhdmUgYW55IGRlZmluZWQgZXZlbnRzCgkJLy8gdG8gZGV0ZWN0IGNoYW5nZWQg cmFkaW8gYnV0dG9ucyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24KCQlpZiAoIWlz X29wZXJhICYmICFpc19zYWYpCgkJewoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVi dXR0b24uZGlzYWJsZWQgPSB0cnVlOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zID0gbmV3IEFycmF5KCk7CgoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydsZWF2ZSddID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsK CQkJdkJfUXVpY2tFZGl0b3IuZGVsZXRlb3B0aW9uc1snc29mdCddID0gZmV0Y2hf b2JqZWN0KCdyYl9kZWxfc29mdCcpOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydoYXJkJ10gPSBmZXRjaF9vYmplY3QoJ3JiX2RlbF9oYXJkJyk7CgoJ CQlmb3IgKHZhciBpIGluIHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnMpCgkJ CXsKCQkJCWlmICh2Ql9RdWlja0VkaXRvci5kZWxldGVvcHRpb25zW2ldKQoJCQkJ ewoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jbGljayA9 IHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jaGFuZ2UgPSB2Ql9B SkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9o YW5kbGVyOwoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25r ZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5k ZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovKioK KiBSdW4gdGhlIGRlbGV0ZSBzeXN0ZW0KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGVsZXRlX3Bvc3QgPSBmdW5jdGlvbigpCnsKCXZhciBkb250ZGVs ZXRlID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsKCWlmIChkb250ZGVs ZXRlICYmIGRvbnRkZWxldGUuY2hlY2tlZCkKCXsKCQl2Ql9RdWlja0VkaXRvci5h Ym9ydCgpOwoJCXJldHVybjsKCX0KCgl2YXIgZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgnZWRpdHBvc3QucGhwJyk7CgoJZm9ybS5hZGRfdmFyaWFibGUoJ2RvJywg J2RlbGV0ZXBvc3QnKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdzJywgZmV0Y2hfc2Vz c2lvbmhhc2goKSk7Cglmb3JtLmFkZF92YXJpYWJsZSgnc2VjdXJpdHl0b2tlbics IFNFQ1VSSVRZVE9LRU4pOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3Bvc3RpZCcsIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCk7Cglmb3JtLmFkZF92YXJpYWJsZXNfZnJvbV9v YmplY3QodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nKTsKCglmb3JtLnN1Ym1p dF9mb3JtKCk7Cn07CgovKioKKiBDaGVjayBmb3IgZXJyb3JzIGV0Yy4gYW5kIGlu aXRpYWxpemUgcmVzdG9yZSB3aGVuIEFKQVggc2F5cyBzYXZlKCkgaXMgY29tcGxl dGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFYID0g dkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5U3Rh dGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJdkJfUXVpY2tFZGl0 b3IucGVuZGluZyA9IGZhbHNlOwoJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29y ID0gJ2F1dG8nOwoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3Jp ZCArICdfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoKCQkv LyB0aGlzIGlzIHRoZSBuaWNlIGVycm9yIGhhbmRsZXIsIG9mIHdoaWNoIFNhZmFy aSBtYWtlcyBhIG1lc3MKCQlpZiAoZmV0Y2hfdGFnX2NvdW50KEFKQVgucmVzcG9u c2VYTUwsICdlcnJvcicpKQoJCXsKCQkJdmFyIGVycm9ycyA9IGZldGNoX3RhZ3Mo QUpBWC5yZXNwb25zZVhNTCwgJ2Vycm9yJyk7CgoJCQl2YXIgZXJyb3JfaHRtbCA9 ICc8b2w+JzsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBp KyspCgkJCXsKCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgdkJfUXVpY2tFZGl0 b3IuYWpheC5mZXRjaF9kYXRhKGVycm9yc1tpXSkgKyAnPC9saT4nOwoJCQl9CgkJ CWVycm9yX2h0bWwgKz0gJzwvb2w+JzsKCgkJCXZCX1F1aWNrRWRpdG9yLnNob3df ZXJyb3JzKCc8b2w+JyArIGVycm9yX2h0bWwgKyAnPC9vbD4nKTsKCQl9CgkJZWxz ZQoJCXsKCQkJdkJfUXVpY2tFZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5h amF4LmZldGNoX2RhdGEoZmV0Y2hfdGFncyhBSkFYLnJlc3BvbnNlWE1MLCAncG9z dGJpdCcpWzBdKSwgJ3RhYmxlb2JqJyk7CgkJCVBvc3RCaXRfSW5pdChmZXRjaF9v YmplY3QoJ3Bvc3QnICsgdkJfUXVpY2tFZGl0b3IucG9zdGlkKSwgdkJfUXVpY2tF ZGl0b3IucG9zdGlkKTsKCQl9CgoJCWlmIChpc19pZSkKCQl7CgkJCUFKQVguYWJv cnQoKTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogUG9wIHVwIGEg d2luZG93IHNob3dpbmcgZXJyb3JzCioKKiBAcGFyYW0Jc3RyaW5nCUVycm9yIEhU TUwKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUuc2hvd19lcnJvcnMg PSBmdW5jdGlvbihlcnJvcnRleHQpCnsKCWZldGNoX29iamVjdCgnYWpheF9wb3N0 X2Vycm9yc19tZXNzYWdlJykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0OwoJdmFyIGVy cm9ydGFibGUgPSBmZXRjaF9vYmplY3QoJ2FqYXhfcG9zdF9lcnJvcnMnKTsKCWVy cm9ydGFibGUuc3R5bGUud2lkdGggPSAnNDAwcHgnOwoJZXJyb3J0YWJsZS5zdHls ZS56SW5kZXggPSA1MDA7Cgl2YXIgbWVhc3VyZXIgPSAoaXNfc2FmID8gJ2JvZHkn IDogJ2RvY3VtZW50RWxlbWVudCcpOwoJZXJyb3J0YWJsZS5zdHlsZS5sZWZ0ID0g KGlzX2llID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDog c2VsZi5pbm5lcldpZHRoKSAvIDIgLSAyMDAgKyBkb2N1bWVudFttZWFzdXJlcl0u c2Nyb2xsTGVmdCArICdweCc7CgllcnJvcnRhYmxlLnN0eWxlLnRvcCA9IChpc19p ZSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiBzZWxm LmlubmVySGVpZ2h0KSAvIDIgLSAxNTAgKyBkb2N1bWVudFttZWFzdXJlcl0uc2Ny b2xsVG9wICsgJ3B4JzsKCWVycm9ydGFibGUuc3R5bGUuZGlzcGxheSA9ICcnOwp9 OwoKLyoqCiogSGlkZSB0aGUgZXJyb3Igd2luZG93CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3IucHJvdG90eXBlLmhpZGVfZXJyb3JzID0gZnVuY3Rpb24oc2tpcF9mb2N1 c19jaGVjaykKewoJdGhpcy5lcnJvcnMgPSBmYWxzZTsKCWZldGNoX29iamVjdCgn YWpheF9wb3N0X2Vycm9ycycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CglpZiAo c2tpcF9mb2N1c19jaGVjayAhPSB0cnVlKQoJewoJCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5jaGVja19mb2N1cygpOwoJfQp9OwoKLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLy8gdkJfQUpBWF9RdWlja0VkaXRvciBFdmVudCBIYW5k bGVycwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHF1aWNrIGVkaXRvciBldmVudHMK Ki8KZnVuY3Rpb24gdkJfQUpBWF9RdWlja0VkaXRvcl9FdmVudHMoKQp7Cn0KCi8q KgoqIEhhbmRsZXMgY2xpY2tzIG9uIGVkaXQgYnV0dG9ucyBvZiBwb3N0Yml0cwoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGJ1dHRv bl9jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJldHVybiB2Ql9RdWlja0VkaXRvci5l ZGl0KHRoaXMubmFtZSk7Cn07CgovKioKKiBIYW5kbGVzIG1hbmlwdWxhdGlvbiBv ZiBmb3JtIGVsZW1lbnRzIGluIHRoZSBkZWxldGUgc2VjdGlvbgoqLwp2Ql9BSkFY X1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9oYW5k bGVyID0gZnVuY3Rpb24oZSkKewoJaWYgKHRoaXMuaWQgPT0gJ3JiX2RlbF9sZWF2 ZScgJiYgdGhpcy5jaGVja2VkKQoJewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1 dHRvbi5kaXNhYmxlZCA9IHRydWU7Cgl9CgllbHNlCgl7CgkJdkJfUXVpY2tFZGl0 b3IuZGVsZXRlYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7Cgl9Cn0KCi8qKgoqIEtl eSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5X3RyYXAgPSBmdW5jdGlvbihlKQp7 CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJc3dpdGNoIChlLmtleUNvZGUp Cgl7CgkJY2FzZSA5OiAvLyB0YWIKCQl7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlj a0VkaXRvci5lZGl0b3JpZCArICdfc2F2ZScpLmZvY3VzKCk7CgkJCXJldHVybiBm YWxzZTsKCQl9CgkJYnJlYWs7CgoJCWNhc2UgMTM6IC8vIGVudGVyCgkJewoJCQl2 Ql9RdWlja0VkaXRvci5zYXZlKCk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJYnJl YWs7CgoJCWRlZmF1bHQ6CgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0KCi8q KgoqIEtleSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXAgPSBm dW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJaWYgKGUu a2V5Q29kZSA9PSAxMykgLy8gZW50ZXIKCXsKCQlpZiAodkJfUXVpY2tFZGl0b3Iu ZGVsZXRlYnV0dG9uLmRpc2FibGVkID09IGZhbHNlKQoJCXsKCQkJdkJfUXVpY2tF ZGl0b3IuZGVsZXRlX3Bvc3QoKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXJl dHVybiB0cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwov LyBpbml0aWFsaXplIHRoZSBlZGl0b3IgY2xhc3MKCnZhciB2Ql9RdWlja0VkaXRv ciA9IG5ldyB2Ql9BSkFYX1F1aWNrRWRpdG9yKCk7CgovKj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0qXAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp8fCAjIERvd25sb2Fk ZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGggMjAwOAp8fCAjIENWUzogJFJDU2ZpbGUk IC0gJFJldmlzaW9uOiAyNjQ0NiAkCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwq PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSov ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_quick_reply.js Content-Type: application/x-javascript; name=vbulletin_quick_reply.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_reply.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwNCnx8ICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIHx8DQp8fCAjIHZCdWxsZXRpbiAzLjYuMTAgUGF0Y2ggTGV2ZWwgMg0KfHwg IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICMgfHwNCnx8ICMgQ29weXJpZ2h0IKkyMDAwLTIw MDggSmVsc29mdCBFbnRlcnByaXNlcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu IHx8DQp8fCAjIFRoaXMgZmlsZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgaW4g d2hvbGUgb3Igc2lnbmlmaWNhbnQgcGFydC4gIyB8fA0KfHwgIyAtLS0tLS0tLS0t LS0tLS0tIFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0t LS0tLS0tICMgfHwNCnx8ICMgaHR0cDovL3d3dy52YnVsbGV0aW4uY29tIHwgaHR0 cDovL3d3dy52YnVsbGV0aW4uY29tL2xpY2Vuc2UuaHRtbCAjIHx8DQp8fCAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyB8fA0KXCo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8N Cg0KdmFyIHFyX3JlcG9zdCA9IGZhbHNlOw0KdmFyIHFyX2Vycm9yc19zaG93biA9 IGZhbHNlOw0KdmFyIHFyX2FjdGl2ZSA9IGZhbHNlOw0KdmFyIHFyX3Bvc3Rpbmcg PSAwOw0KdmFyIGNsaWNrZWRlbG0gPSBmYWxzZTsNCg0KLyoqDQoqIEluaXRpYWxp emVzIHRoZSBxdWljayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9pbml0 KCkNCnsNCglxcl9kaXNhYmxlX2NvbnRyb2xzKCk7DQoJcXJfaW5pdF9idXR0b25z KGZldGNoX29iamVjdCgncG9zdHMnKSk7DQp9DQoNCi8qKg0KKiBTdGVwcyB0aHJv dWdoIHRoZSBnaXZlbiBvYmplY3QgYWN0aXZhdGluZyBhbGwgcXVpY2sgcmVwbHkg YnV0dG9ucyBpdCBmaW5kcw0KKg0KKiBAcGFyYW0Jb2JqZWN0CUhUTUwgb2JqZWN0 IHRvIHNlYXJjaA0KKi8NCmZ1bmN0aW9uIHFyX2luaXRfYnV0dG9ucyhvYmopDQp7 DQoJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKG9iaiwgJ2EnKTsNCglmb3IgKHZh ciBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpKyspDQoJew0KCQlpZiAoYW5j aG9yc1tpXS5pZCAmJiBhbmNob3JzW2ldLmlkLnN1YnN0cigwLCAzKSA9PSAncXJf JykNCgkJew0KCQkJYW5jaG9yc1tpXS5vbmNsaWNrID0gZnVuY3Rpb24oZSkgeyBy ZXR1cm4gcXJfYWN0aXZhdGUodGhpcy5pZC5zdWJzdHIoMykpOyB9Ow0KCQl9DQoJ fQ0KfQ0KDQovKioNCiogRGlzYWJsZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBxdWlj ayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9kaXNhYmxlX2NvbnRyb2xz KCkNCnsNCglpZiAocmVxdWlyZV9jbGljaykNCgl7DQoJCWZldGNoX29iamVjdCgn cXJfcG9zdGlkJykudmFsdWUgPSAwOw0KDQoJCXZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uZGlzYWJsZV9lZGl0b3IodmJwaHJhc2VbJ2NsaWNrX3F1aWNrX3JlcGx5X2lj b24nXSk7DQoNCgkJdmFyIHFyX3NpZyA9IGZldGNoX29iamVjdCgnY2Jfc2lnbmF0 dXJlJyk7DQoJCWlmIChxcl9zaWcgIT0gbnVsbCkNCgkJew0KCQkJcXJfc2lnLmRp c2FibGVkID0gdHJ1ZTsNCgkJfQ0KDQoJCWFjdGl2ZSA9IGZhbHNlOw0KCQlxcl9h Y3RpdmUgPSBmYWxzZTsNCgl9DQoJZWxzZQ0KCXsNCgkJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVudHMoJycpOw0KCQlxcl9hY3RpdmUg PSB0cnVlOw0KCX0NCg0KCWlmICh0aHJlYWRlZF9tb2RlICE9IDEpDQoJew0KCQlm ZXRjaF9vYmplY3QoJ3FyX3F1aWNrcmVwbHknKS5kaXNhYmxlZCA9IHRydWU7DQoJ fQ0KDQp9DQoNCi8qKg0KKiBBY3RpdmF0ZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBx dWljayByZXBseSBzeXN0ZW0NCioNCiogQHBhcmFtCWludGVnZXIJUG9zdCBJRCBv ZiB0aGUgcG9zdCB0byB3aGljaCB3ZSBhcmUgcmVwbHlpbmcNCioNCiogQHJldHVy bglib29sZWFuCWZhbHNlDQoqLw0KZnVuY3Rpb24gcXJfYWN0aXZhdGUocG9zdGlk KQ0Kew0KCXZhciBxcl9jb2xsYXBzZSA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfcXVpY2tyZXBseScpOw0KCWlmIChxcl9jb2xsYXBzZSAmJiBxcl9jb2xsYXBz ZS5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCXRvZ2dsZV9jb2xsYXBz ZSgncXVpY2tyZXBseScpOw0KCX0NCg0KCWZldGNoX29iamVjdCgncXJfcG9zdGlk JykudmFsdWUgPSBwb3N0aWQ7DQoJZmV0Y2hfb2JqZWN0KCdxcl9wcmV2aWV3Jyku c2VsZWN0KCk7DQoJZmV0Y2hfb2JqZWN0KCdxcl9xdWlja3JlcGx5JykuZGlzYWJs ZWQgPSBmYWxzZTsNCg0KCXZhciBxcl9zaWcgPSBmZXRjaF9vYmplY3QoImNiX3Np Z25hdHVyZSIpOw0KCWlmIChxcl9zaWcpDQoJew0KCQlxcl9zaWcuZGlzYWJsZWQg PSBmYWxzZTsNCgkJLy8gV29ya2Fyb3VuZCBmb3IgMy41IEJ1ZyAjIDE2MTg6IFNl dCBjaGVja2VkIGFzIEZpcmVmb3ggPCAxLjUgImZvcmdldHMiIHRoYXQgd2hlbiBj aGVja2JveCBpcyBkaXNhYmxlZCB2aWEgSlMNCgkJcXJfc2lnLmNoZWNrZWQgPSB0 cnVlOw0KCX0NCg0KCWlmIChxcl9hY3RpdmUgPT0gZmFsc2UpDQoJew0KCQl2Ql9F ZGl0b3JbUVJfRWRpdG9ySURdLmVuYWJsZV9lZGl0b3IoJycpOw0KCX0NCg0KCWlm ICghaXNfaWUgJiYgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGUp DQoJew0KCQlmZXRjaF9vYmplY3QoJ3FyX3Njcm9sbCcpLnNjcm9sbEludG9WaWV3 KGZhbHNlKTsNCgl9DQoNCgl2Ql9FZGl0b3JbUVJfRWRpdG9ySURdLmNoZWNrX2Zv Y3VzKCk7DQoNCglxcl9hY3RpdmUgPSB0cnVlOw0KDQoJcmV0dXJuIGZhbHNlOw0K fQ0KDQovKioNCiogQ2hlY2tzIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHJlcGx5 IGFuZCBkZWNpZGVzIHdoZXRoZXIgb3Igbm90IHRvIGFsbG93IGl0IHRocm91Z2gN CioNCiogQHBhcmFtCW9iamVjdAk8Zm9ybT4gb2JqZWN0IGNvbnRhaW5pbmcgcXVp Y2sgcmVwbHkNCiogQHBhcmFtCWludGVnZXIJTWluaW11bSBhbGxvd2VkIGNoYXJh Y3RlcnMgaW4gbWVzc2FnZQ0KKg0KKiBAcmV0dXJuCWJvb2xlYW4NCiovDQpmdW5j dGlvbiBxcl9wcmVwYXJlX3N1Ym1pdChmb3Jtb2JqLCBtaW5jaGFycykNCnsNCglp ZiAocXJfcmVwb3N0ID09IHRydWUpDQoJew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoN CglpZiAoIWFsbG93X2FqYXhfcXIgfHwgIUFKQVhfQ29tcGF0aWJsZSkNCgl7DQoJ CS8vIG5vdCBsYXN0IHBhZ2UsIG9yIHRocmVhZGVkIG1vZGUgLSBkbyBub3QgYXR0 ZW1wdCB0byB1c2UgQUpBWA0KCQlyZXR1cm4gcXJfY2hlY2tfZGF0YShmb3Jtb2Jq LCBtaW5jaGFycyk7DQoJfQ0KCWVsc2UgaWYgKHFyX2NoZWNrX2RhdGEoZm9ybW9i aiwgbWluY2hhcnMpKQ0KCXsNCgkJdmFyIHRlc3RfYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7DQoJCWlmICghdGVzdF9hamF4LmluaXQoKSB8fCAodHlw ZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2Yl9kaXNhYmxl X2FqYXggPiAwKSkNCgkJew0KCQkJLy8gY291bGRuJ3QgaW5pdGlhbGl6ZSwgcmV0 dXJuIHRydWUgdG8gYWxsb3cgY2xpY2sgdG8gZ28gdGhyb3VnaA0KCQkJcmV0dXJu IHRydWU7DQoJCX0NCg0KCQlpZiAoaXNfaWUgJiYgdXNlckFnZW50LmluZGV4T2Yo J21zaWUgNS4nKSAhPSAtMSkNCgkJew0KCQkJLy8gSUUgNSBoYXMgcHJvYmxlbXMg d2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBiZWluZyByZXR1cm5lZCBieQ0KCQkJ Ly8gQUpBWC4gRG9uJ3QgdW5pdmVyc2FsbHkgZGlzYWJsZSBpdCwgYnV0IGlmIHdl J3JlIGdvaW5nIHRvIGJlIHNlbmRpbmcNCgkJCS8vIG5vbi1BU0NJSSwgbGV0J3Mg bm90IHVzZSBBSkFYLg0KCQkJaWYgKFBIUC51cmxlbmNvZGUoZm9ybW9iai5tZXNz YWdlLnZhbHVlKS5pbmRleE9mKCcldScpICE9IC0xKQ0KCQkJew0KCQkJCXJldHVy biB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKHFyX3Bvc3RpbmcgPT0gMSkNCgkJ ew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcXJfcG9z dGluZyA9IDE7DQoJCQlzZXRUaW1lb3V0KCJxcl9wb3N0aW5nID0gMCIsIDEwMDAp Ow0KCQl9DQoNCgkJaWYgKGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZh bHVlKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJ CXZhciBzdWJtaXRzdHJpbmcgPSAnYWpheD0xJzsNCgkJCWlmICh0eXBlb2YgYWph eF9sYXN0X3Bvc3QgIT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJc3VibWl0c3Ry aW5nICs9ICcmYWpheF9sYXN0cG9zdD0nICsgUEhQLnVybGVuY29kZShhamF4X2xh c3RfcG9zdCk7DQoJCQl9DQoNCgkJCWZvciAoaSA9IDA7IGkgPCBmb3Jtb2JqLmVs ZW1lbnRzLmxlbmd0aDsgaSsrKQ0KCQkJew0KCQkJCXZhciBvYmogPSBmb3Jtb2Jq LmVsZW1lbnRzW2ldOw0KDQoJCQkJaWYgKG9iai5uYW1lICYmICFvYmouZGlzYWJs ZWQpDQoJCQkJew0KCQkJCQlzd2l0Y2ggKG9iai50eXBlKQ0KCQkJCQl7DQoJCQkJ CQljYXNlICd0ZXh0JzoNCgkJCQkJCWNhc2UgJ3RleHRhcmVhJzoNCgkJCQkJCWNh c2UgJ2hpZGRlbic6DQoJCQkJCQkJc3VibWl0c3RyaW5nICs9ICcmJyArIG9iai5u YW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpOw0KCQkJCQkJCWJy ZWFrOw0KCQkJCQkJY2FzZSAnY2hlY2tib3gnOg0KCQkJCQkJY2FzZSAncmFkaW8n Og0KCQkJCQkJCXN1Ym1pdHN0cmluZyArPSBvYmouY2hlY2tlZCA/ICcmJyArIG9i ai5uYW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpIDogJyc7DQoJ CQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3Qtb25lJzoNCgkJCQkJCQlz dWJtaXRzdHJpbmcgKz0gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5j b2RlKG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS52YWx1ZSk7DQoJCQkJ CQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3QtbXVsdGlwbGUnOg0KCQkJCQkJ CWZvciAodmFyIGogPSAwOyBqIDwgb2JqLm9wdGlvbnMubGVuZ3RoOyBqKyspDQoJ CQkJCQkJew0KCQkJCQkJCQlzdWJtaXRzdHJpbmcgKz0gKG9iai5vcHRpb25zW2pd LnNlbGVjdGVkID8gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5jb2Rl KG9iai5vcHRpb25zW2pdLnZhbHVlKSA6ICcnKTsNCgkJCQkJCQl9DQoJCQkJCQkJ YnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCWZldGNoX29iamVjdCgn cXJfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJCQlkb2N1bWVu dC5ib2R5LnN0eWxlLmN1cnNvciA9ICd3YWl0JzsNCg0KCQkJcXJfYWpheF9wb3N0 KGZvcm1vYmouYWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQp9DQoN Ci8qKg0KKiBXb3JrcyB3aXRoIGZvcm0gZGF0YSB0byBkZWNpZGUgd2hhdCB0byBk bw0KKg0KKiBAcGFyYW0Jb2JqZWN0CTxmb3JtPiBvYmplY3QgY29udGFpbmluZyBx dWljayByZXBseQ0KKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFsbG93ZWQgY2hh cmFjdGVycyBpbiBtZXNzYWdlDQoqDQoqIEByZXR1cm4JYm9vbGVhbg0KKi8NCmZ1 bmN0aW9uIHFyX2NoZWNrX2RhdGEoZm9ybW9iaiwgbWluY2hhcnMpDQp7DQoJc3dp dGNoIChmZXRjaF9vYmplY3QoJ3FyX3Bvc3RpZCcpLnZhbHVlKQ0KCXsNCgkJY2Fz ZSAnMCc6DQoJCXsNCgkJCWFsZXJ0KHZicGhyYXNlWydjbGlja19xdWlja19yZXBs eV9pY29uJ10pOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJY2FzZSAnd2hv IGNhcmVzJzoNCgkJew0KCQkJaWYgKHR5cGVvZiBmb3Jtb2JqLnF1aWNrcmVwbHkg IT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJZm9ybW9iai5xdWlja3JlcGx5LmNo ZWNrZWQgPSBmYWxzZTsNCgkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJaWYg KGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZhbHVlKQ0KCXsNCgkJbWlu Y2hhcnMgPSAwOw0KCX0NCg0KCXJldHVybiB2Ql9FZGl0b3JbUVJfRWRpdG9ySURd LnByZXBhcmVfc3VibWl0KDAsIG1pbmNoYXJzKTsNCn0NCg0KLyoqDQoqIFNlbmRz IHF1aWNrIHJlcGx5IGRhdGEgdG8gbmV3cmVwbHkucGhwIHZpYSBBSkFYDQoqDQoq IEBwYXJhbQlzdHJpbmcJR0VUIHN0cmluZyBmb3IgYWN0aW9uIChuZXdyZXBseS5w aHApDQoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHJlcHJlc2VudGluZyBmb3JtIGRh dGEgKCd4PTEmeT0yJno9MycgZXRjLikNCiovDQpmdW5jdGlvbiBxcl9hamF4X3Bv c3Qoc3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpDQp7DQoJcXJfcmVwb3N0ID0g ZmFsc2U7DQoJeG1sID0gbmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsNCgl4bWwu b25yZWFkeXN0YXRlY2hhbmdlKHFyX2RvX2FqYXhfcG9zdCk7DQoJeG1sLnNlbmQo c3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KfQ0KDQovKioNCiogSGFuZGxl cyBxdWljayByZXBseSBkYXRhIHdoZW4gQUpBWCBzYXlzIHFyX2FqYXhfcG9zdCgp IGlzIGNvbXBsZXRlDQoqLw0KZnVuY3Rpb24gcXJfZG9fYWpheF9wb3N0KCkNCnsN CglpZiAoeG1sLmhhbmRsZXIucmVhZHlTdGF0ZSA9PSA0ICYmIHhtbC5oYW5kbGVy LnN0YXR1cyA9PSAyMDApDQoJew0KCQlpZiAoeG1sLmhhbmRsZXIucmVzcG9uc2VY TUwpDQoJCXsNCgkJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8n Ow0KCQkJZmV0Y2hfb2JqZWN0KCdxcl9wb3N0aW5nX21zZycpLnN0eWxlLmRpc3Bs YXkgPSAnbm9uZSc7DQoJCQlxcl9wb3N0aW5nID0gMDsNCg0KCQkJaWYgKGZldGNo X3RhZ19jb3VudCh4bWwuaGFuZGxlci5yZXNwb25zZVhNTCwgJ3Bvc3RiaXQnKSkN CgkJCXsNCgkJCQlhamF4X2xhc3RfcG9zdCA9IHhtbC5mZXRjaF9kYXRhKGZldGNo X3RhZ3MoeG1sLmhhbmRsZXIucmVzcG9uc2VYTUwsICd0aW1lJylbMF0pOw0KCQkJ CXFyX2Rpc2FibGVfY29udHJvbHMoKTsNCgkJCQlxcl9oaWRlX2Vycm9ycygpOw0K DQoJCQkJdmFyIHBvc3RiaXRzID0gZmV0Y2hfdGFncyh4bWwuaGFuZGxlci5yZXNw b25zZVhNTCwgJ3Bvc3RiaXQnKTsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IHBv c3RiaXRzLmxlbmd0aDsgaSsrKQ0KCQkJCXsNCgkJCQkJdmFyIG5ld2RpdiA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KCQkJCQluZXdkaXYuaW5uZXJI VE1MID0geG1sLmZldGNoX2RhdGEocG9zdGJpdHNbaV0pOw0KCQkJCQl2YXIgbHAg PSBmZXRjaF9vYmplY3QoJ2xhc3Rwb3N0Jyk7DQoJCQkJCXZhciBscHBhcmVudCA9 IGxwLnBhcmVudE5vZGU7DQoJCQkJCXZhciBwb3N0Yml0ID0gbHBwYXJlbnQuaW5z ZXJ0QmVmb3JlKG5ld2RpdiwgbHApOw0KDQoJCQkJCVBvc3RCaXRfSW5pdChwb3N0 Yml0LCBwb3N0Yml0c1tpXS5nZXRBdHRyaWJ1dGUoJ3Bvc3RpZCcpKTsNCgkJCQl9 DQoNCgkJCQkvLyB1bmZvY3VzIHRoZSBxcl9zdWJtaXQgYnV0dG9uIHRvIHByZXZl bnQgYSBzcGFjZSBmcm9tIHJlc3VibWl0dGluZw0KCQkJCWlmIChmZXRjaF9vYmpl Y3QoJ3FyX3N1Ym1pdCcpKQ0KCQkJCXsNCgkJCQkJZmV0Y2hfb2JqZWN0KCdxcl9z dWJtaXQnKS5ibHVyKCk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJ CWlmICghaXNfc2FmKQ0KCQkJCXsNCgkJCQkJLy8gdGhpcyBpcyB0aGUgbmljZSBl cnJvciBoYW5kbGVyLCBvZiB3aGljaCBTYWZhcmkgbWFrZXMgYSBtZXNzDQoJCQkJ CXZhciBlcnJvcnMgPSBmZXRjaF90YWdzKHhtbC5oYW5kbGVyLnJlc3BvbnNlWE1M LCAnZXJyb3InKTsNCg0KCQkJCQl2YXIgZXJyb3JfaHRtbCA9ICc8b2w+JzsNCgkJ CQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspDQoJCQkJ CXsNCgkJCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgeG1sLmZldGNoX2RhdGEo ZXJyb3JzW2ldKSArICc8L2xpPic7DQoJCQkJCX0NCgkJCQkJZXJyb3JfaHRtbCAr PSAnPC9vbD4nOw0KDQoJCQkJCXFyX3Nob3dfZXJyb3JzKCc8b2w+JyArIGVycm9y X2h0bWwgKyAnPC9vbD4nKTsNCg0KCQkJCQlpZiAoaXNfaWUpDQoJCQkJCXsNCgkJ CQkJCXhtbC5oYW5kbGVyLmFib3J0KCk7DQoJCQkJCX0NCg0KCQkJCQlyZXR1cm4g ZmFsc2U7DQoJCQkJfQ0KDQoJCQkJLy8gdGhpcyBpcyB0aGUgbm90IHNvIG5pY2Ug ZXJyb3IgaGFuZGxlciwgd2hpY2ggaXMgYSBmYWxsYmFjayBpbiBjYXNlIHRoZSBw cmV2aW91cyBvbmUgZG9lc24ndCB3b3JrDQoNCgkJCQlxcl9yZXBvc3QgPSB0cnVl Ow0KCQkJCWZldGNoX29iamVjdCgncXJmb3JtJykuc3VibWl0KCk7DQoJCQl9DQoJ CX0NCgkJZWxzZQ0KCQl7DQoJCQlxcl9yZXBvc3QgPSB0cnVlOw0KCQkJZmV0Y2hf b2JqZWN0KCdxcmZvcm0nKS5zdWJtaXQoKTsNCgkJfQ0KDQoJCWlmIChpc19pZSkN CgkJew0KCQkJLy8gaW4gbXkgdGVzdHMsIEZGIGZyZWFrcyBvdXQgaWYgSSBkbyB0 aGlzIGFib3J0IGNhbGwgaGVyZS4uLg0KCQkJLy8gaG93ZXZlciwgaXQgc2VlbXMg dG8gYmUgbmVjZXNzYXJ5IChpbiBsb2NhbCB0ZXN0cykgZm9yIElFDQoJCQl4bWwu aGFuZGxlci5hYm9ydCgpOw0KCQl9DQoJfQ0KfQ0KDQovKioNCiogVW4taGlkZXMg dGhlIHF1aWNrIHJlcGx5IGVycm9ycyBlbGVtZW50DQoqDQoqIEBwYXJhbQlzdHJp bmcJRXJyb3IocykgdG8gc2hvdw0KKg0KKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UN CiovDQpmdW5jdGlvbiBxcl9zaG93X2Vycm9ycyhlcnJvcnRleHQpDQp7DQoJcXJf ZXJyb3JzX3Nob3duID0gdHJ1ZTsNCglmZXRjaF9vYmplY3QoJ3FyX2Vycm9yX3Rk JykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0Ow0KCWZldGNoX29iamVjdCgncXJfZXJy b3JfdGJvZHknKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS5jaGVja19mb2N1cygpOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KLyoq DQoqIEhpZGVzIHRoZSBxdWljayByZXBseSBlcnJvcnMgZWxlbWVudA0KKg0KKiBA cmV0dXJuCWJvb2xlYW4JZmFsc2UNCiovDQpmdW5jdGlvbiBxcl9oaWRlX2Vycm9y cygpDQp7DQoJaWYgKHFyX2Vycm9yc19zaG93bikNCgl7DQoJCXFyX2Vycm9yc19z aG93biA9IHRydWU7DQoJCWZldGNoX29iamVjdCgncXJfZXJyb3JfdGJvZHknKS5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ0K DQp2YXIgdkJfUXVpY2tSZXBseSA9IHRydWU7DQoNCi8qPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSpcDQp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgNCnx8ICMgQ1ZTOiAkUkNTZmls ZSQgLSAkUmV2aXNpb246IDI0Mjc2ICQNCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLy8g1ujy4PLgIOL75OXr5e3t 7uPuIPLl6vHy4CDoIO3o6iDiIO7y4uXyIC0gzeD34OvuDQpmdW5jdGlvbiBJbnNl cnQobmlja25hbWUsIHRleHQsIHBvc3RuYikNCnsNCiAgaWYgKHRleHQhPSIiKQ0K ICAgIHBhc3RlKCJbcXVvdGU9IituaWNrbmFtZSsiOyIrcG9zdG5iKyJdIit0ZXh0 KyJbL3F1b3RlXVxuIiwgMCk7DQogICAgZG9jdW1lbnQudmJmb3JtLm1lc3NhZ2Uu Zm9jdXMoKTsNCn0NCmZ1bmN0aW9uIHBhc3RlKHRleHQpDQp7DQogIHZCX0VkaXRv cltRUl9FZGl0b3JJRF0uY2hlY2tfZm9jdXMoKTsNCiAgdmFyIG90ID0gdkJfRWRp dG9yW1FSX0VkaXRvcklEXS5nZXRfZWRpdG9yX2NvbnRlbnRzKCk7DQogIGlmKG90 ICE9ICcnICYmIG90ICE9ICc8UD48L1A+JyAmJiBvdCAhPSAnPFA+Jm5ic3A7PC9Q PicgJiYgb3QgIT0gJzxCUiAvPicpDQogIHsNCiAgICBvdCArPSAodkJfRWRpdG9y W1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGU/Jzxicj4nOidcbicpOw0KICB9DQog IGlmKG90ID09ICc8UD4mbmJzcDs8L1A+JykNCiAgew0KICAgIG90ID0gJyc7DQog IH0NCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVu dHMob3QgKyB0ZXh0LCBmYWxzZSk7DQp9DQpmdW5jdGlvbiBnZXRfc2VsZWN0aW9u KCkNCnsNCiAgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlvbikNCiAgew0KICAgIHNl bGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpOw0KICAgIHNlbGVjdGlv biA9IHNlbGVjdGlvbi5yZXBsYWNlKC9cclxuXHJcbi9naSwgIl9kb3VibGVjYXJl dF8iKTsNCiAgICBzZWxlY3Rpb24gPSBzZWxlY3Rpb24ucmVwbGFjZSgvXHJcbi9n aSwgIiAiKTsNCiAgICB3aGlsZSAoc2VsZWN0aW9uLmluZGV4T2YoIiAgIikgIT0t MSkgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoLyAgL2dpLCAiIik7DQog ICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoL19kb3VibGVjYXJldF8v Z2ksICJcclxuXHJcbiIpOw0KICB9DQogIGVsc2UNCiAgICBzZWxlY3Rpb24gPSBk b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0Ow0KfQ0KZnVuY3Rp b24gY2F0Y2hTZWxlY3Rpb24oKQ0Kew0KICBpZiAod2luZG93LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50 b1N0cmluZygpOw0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigp Ow0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikNCiAgew0KICAg IHNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRl eHQ7DQogIH0NCn0NCmZ1bmN0aW9uIGluc2VydG5pY2sobmlja25hbWUpDQp7DQog IHZhciBvdCA9IHZCX0VkaXRvcltRUl9FZGl0b3JJRF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOw0KICBpZihvdCAhPSAnJyAmJiBvdCAhPSAnPFA+PC9QPicgJiYgb3Qg IT0gJzxQPiZuYnNwOzwvUD4nICYmIG90ICE9ICc8QlIgLz4nKQ0KICB7DQogICAg b3QgKz0gKHZCX0VkaXRvcltRUl9FZGl0b3JJRF0ud3lzaXd5Z19tb2RlPyc8YnI+ JzonXG4nKTsNCiAgfQ0KICBpZihvdCA9PSAnPFA+Jm5ic3A7PC9QPicpDQogIHsN CiAgICBvdCA9ICcnOw0KICB9DQogIG90ICs9IHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0ud3lzaXd5Z19tb2RlPyc8Yj4nICsgbmlja25hbWUgKyAnPC9iPiwgJzonW2Jd JyArIG5pY2tuYW1lICsgJ1svYl0sICc7DQogIHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uY2hlY2tfZm9jdXMoKTsNCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0 ZV9lZGl0b3JfY29udGVudHMob3QsIGZhbHNlKTsNCn0NCi8vINbo8uDy4CDi++Tl 6+Xt7e7j7iDy5erx8uAg6CDt6Oog4iDu8uLl8iAtIMru7eX2 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=collapse_tcat.gif Content-Type: image/gif; name=collapse_tcat.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_tcat.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAOYAADVyM8jix/Pz85HDj+vr6/L48oi/hu7u7s7lzZ3Km+rv6p/L ndDlz5LEkDRxMqjPpvH38c3kzJ3Im/T59JvKmtDj0D+HPafNprDQr8zdzMfhxqfO pZLDkOPn46jPp0ukSf39/KrQqWKsX0udSMveyyZtKOTq5CBqIsrdyXbCcqvQqTd2 NXeqeDyCO5XTkt7x3UKNQDqJO+327ESZQiuALCBdIX6xgCloKOfy51WnUmu3aPX1 9bLdsD2JPtHo0ILJfTp8OJ3Jm2m5ZnTBcS6BL93o3YrLhmS1YfH58bvjuEyhSYvA iTiHOkSRQpirmODn3zN6NkCNPqnXp4rNhun06Y/Cj1GlTnKicjJ3MXnDdWK0X5bK lbzUu8riyVSqUbXNtF2xWmSxYdDjz2m4ZkmRRiJ3JOXt5EqfSTGBM5zIm/D57ylu Kjh3No29i4/QijZ5NM7YzzKDMu3t7UeWRKjOpzaBNc3hzUiVSdzn3Wa1YzB6L3/F fDqEOOnp6fT09P///yH5BAAAAAAALAAAAAAPAA8AAAfXgH2CfRkYEksSGBmDfQQE HRcJCBB/EAwLFx2OB08cAUhJLj9GUjIBHCYHcmkaL24/Q38iYXk+GnQHKBRqU1lH f8BkVjlUFCQbETwpWsAAwDAzVREbAwV7Qs0AQMB8dwUNBiBjYCMtbH9NFitYaCBL 1TpeSnPAfxZRcT3fHghbHx/NgNWhYQOBBzsJcJwB5sDBGwN/SuBJIMZPkABdYqy5 oYfIiRpOuKjY4cdMgwBFrkApw4QFnC9tFPgRIEBBiAUMJvyZcCmEApp+gvqp8GCA gQEPKgj1EwgAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=removeformat.gif Content-Type: image/gif; name=removeformat.gif Content-Location: http://forum.qip.ru/images/editor/removeformat.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP8AAAAA/wAAmf///yH5BAEAAAMALAAAAAAVABQAAAJDnI+p y+0/gArhSHYNrfHdXWUOQA0UIAhQ8KHps5Hu25SGO9CLHQmXjgCFUj4iBHcDLpAW VWPmzBUxngbxioVot1xtAQA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=separator.gif Content-Type: image/gif; name=separator.gif Content-Location: http://forum.qip.ru/images/editor/separator.gif Content-Transfer-Encoding: Base64 R0lGODlhBgAUAIAAAMXCuN/f3yH5BAEAAAEALAAAAAAGABQAAAISTGCJedy8lIuG Pgmnzhz7unkFADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=bold.gif Content-Type: image/gif; name=bold.gif Content-Location: http://forum.qip.ru/images/editor/bold.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAIABAAAAAN/f3yH5BAEAAAEALAAAAAAVABQAAAIkjI+py+0Po0yg 2iqt0ZDz52HdJY7AVjrhaaKsSqbTTNf2jSMFADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=italic.gif Content-Type: image/gif; name=italic.gif Content-Location: http://forum.qip.ru/images/editor/italic.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIglI+p y+0Po2yh1mkqwAJcrnFewAkhNpanZFnlC8fyHBUAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=underline.gif Content-Type: image/gif; name=underline.gif Content-Location: http://forum.qip.ru/images/editor/underline.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIplI+p y+0Po0yhBmEvrIdHj2mbCD5g6ZyiSa5pAAgA+lrTjWQ6zvc+XgAAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=color.gif Content-Type: image/gif; name=color.gif Content-Location: http://forum.qip.ru/images/editor/color.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAQAJEAAICAgAAAgJkzAN/f3yH5BAEAAAMALAAAAAAVABAAAAIqnI+p y53hGgggroBtmrhqk2XfBFIfhooReXSWOnArhHDehbYp/fX+nygAADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=clear.gif Content-Type: image/gif; name=clear.gif Content-Location: http://forum.qip.ru/clear.gif Content-Transfer-Encoding: Base64 R0lGODlhAQABAIAAAMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=menupop.gif Content-Type: image/gif; name=menupop.gif Content-Location: http://forum.qip.ru/images/editor/menupop.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAQAIABAAAAAN/f3yH5BAEAAAEALAAAAAALABAAAAIPjI+py+0PDZhz 0Qai3jwWADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=createlink.gif Content-Type: image/gif; name=createlink.gif Content-Location: http://forum.qip.ru/images/editor/createlink.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUALMKAAAAgJCdsgCAgMHS7sDAwICAgACAAP///wAA/wAAAN/f3wAA AAAAAAAAAAAAAAAAACH5BAEAAAoALAAAAAAVABQAAARwUMlJq704y8K7ppxADIOR fEpxEEdgvKbGIStiI2+RFQgRBIAXLobhuWAAQfBUtB1hNuaFd4MZBAippQCoQgG6 TOKWKCcAZm3lnGCxEquVmtJO2wlzCTxRaBPwfQd5CnV2ZnhiboJxiBpphGYokpMY EQA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=insertimage.gif Content-Type: image/gif; name=insertimage.gif Content-Location: http://forum.qip.ru/images/editor/insertimage.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAKIGAMDAwICAAICAgP//AP///wAAAN/f3wAAACH5BAEAAAYALAAA AAAVABQAAANaaLrc/jDKWaq92JVBuO/gUGhhKFQCMTZbyRVBsK1M4XawrGrfdxYC Eal3oy1aL2TIqLC9BCeRc8d6nk4AgJNpsAGh4ELWq/maoWIt94tuY7VljLwyqdvv eEMCADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/images/editor/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP//AAAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJLnI+p yz0BowwtiAuuyJcuy21aZn3dZAmlAo7umqSQGgCyYIa6irNaROv0YiLMa4iQWZa3 nMsISz6LPAZKiVRofras4wD5VsTksqMAADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=resize_1.gif Content-Type: image/gif; name=resize_1.gif Content-Location: http://forum.qip.ru/images/editor/resize_1.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+py50AoVtx MmBVlPnUjmAgWAAAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=smilie.gif Content-Type: image/gif; name=smilie.gif Content-Location: http://forum.qip.ru/images/editor/smilie.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAE1NpgAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJBnI+p y50AoUNQWCsduBy33XUAAwbBZXoKKKSWK4xPSMsUHdoHi6t3SzvFFqWOUPdrmWDI ZG5S4WQmg8iUis1qswUAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=resize_0.gif Content-Type: image/gif; name=resize_0.gif Content-Location: http://forum.qip.ru/images/editor/resize_0.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+pe8BvgIRL WlpxnbpZ14UiUgAAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=printer.gif Content-Type: image/gif; name=printer.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/printer.gif Content-Transfer-Encoding: Base64 R0lGODlhFQARAPfJAP///6y6v6Wenqu6v4WEjZWUqJaVqIKBjWZkasvHx6+mp7S1 vbS0vrC6wHZ1foiJlYqJlKKXmK27wcLJzsHIzdPNzcC61dbV2IOCkLWtrdTR0oOC ieHg5Z2ZsbWur+Dg4c3Kyunn7Z2csa67wHZ2fL+7uuvl9e7u8aaluai1uqmyucvV 2vP19n9+ho+Om5Scouzr7pGQnMa+vn59hYqJkeTj6Y2Ml6ekvLXDyIaFlP3+/miJ Zvj3/IF4kK6oqaexuIiIjuHg55GMoqy7wHt5hXV0e8jExGpscG1sdMLBy2podY2N mI6KnOnt7qunwcfGz6KZmb28zpuaprCnp31/iJWVobu9wrS0u+rn57KqqWhncpuZ q2tsdJSUppKRmJ+orNjW1snBwpqgpent73xvjNLR11/zN5KRom//LYWFjMzW2YqJ m4uKmtvd38K8vaGprbC7wZGQmtLOzoGAi+Lg4LCvyPz9/e7t89fS0quqtujn76Kg taCnpo2MmvX0+JefpZCOn+Pk5o6NlYiNk2ppcrOzvrisrejq7OTi7s7N1JCQlpmf p83W2YqQmqu5voqAl9DJyp+ep7PAxdHR0/3+/Y+Ol9DX24GAjna1Yau4vsvGx+vn 5ouKnOvq8Jubqs7JyKCpr725u+rq6vf39ubm5t/f46+8weXq6+zr65SEperq7YmH l5KRodHZ3Nzh5Le1wdfV3tze4YiHmKCrserp8K+kpbG/xI2MlXx/heXh4f7///7+ /rS9wmZlbOTf35CPmaCXmaGnq3JxfYiHkdbT1IGAkI+On5mjqOrp76y7wAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAMkALAAAAAAVABEAQAj/AJMJTCahFSNLrsYcsrNi oMOBjTwtKMRgEoCLuk7ACEGLh59SEx4KXETlTwqRKB3y2lTBFxZUpACoSRkgB6Au TjqgwZRqCYRhBDa0KELii0g4ADSBCBPKB5gmKUUGqhVhioJPeFjQ5FQARRQ9JhDB SpJHSgwblQQpCubwQTFje4SQ6UFEGKFeuI45ivohi4cSGojt0oEjqsNYGYAJEEDn oi3DAjNRkpPADRQjok5FHTKigYo2MgxBynVxlBUKkh7+kPXqSZkLqoLUQHanE4dE VyJ5ETNwwKozBupY4FOFSR8XcX7dopEGyJuBAS6xYXVji5kdjw7MmeEACYIjoEw9 DXyBQcQaJVq4DJqVMiAAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=sendtofriend.gif Content-Type: image/gif; name=sendtofriend.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/sendtofriend.gif Content-Transfer-Encoding: Base64 R0lGODlhFQARAPfNAOjq/+fo/+fp/+jp/+Xo/9rm/9zm/9Lh/Nnl/+To/+bo/9vm /+fn/+Hn/+np/87g+93m/9Li/LG/xLC/xLLBxuzs/9Hh/Mrg+eLn/+Dn//aZjGFq dLXDybnGy7/S3/Lw/7TDyLLBx+bo/erq/7G/xezw/87T6Mne+rnFytDY3NLZ3v9S KMzV3s/h+9bk/8vg+fp7Yc7h+5GZqP9PI8fg+sTd8tjf6szg+tfc7VZYX7TA1NXd 6c/g+9La5ODm/tHb59LZ50dJTuzd7sjX7UBCR0BDSM7a5aGot7fN28HM0Njk/8ng +tfi/8jg+e7u+V5lbf1pRtfj/5igrsbV3+7J0NTa57zN1+Dk/8vU3Ht/ienr/8Pd 9+Xm/qquvrvL1MHW5uHj98bS6s3f+9vg5s3b9MnR1tri+HN7h0tPVd/m/3N6hs3g +rjFy8Tf+cXf+K69wuTn/1dbY9Pi/LbEyfHx/sjS6FtcY87W3M3U6e/u/8nW4q++ w8Hc+MzY5LjIz83e+tnm/8Pd9MLd+Ojo/8ff+lBSWMbg+bnHzbTCx8TY8Ofq/9/j 6sTT3evp/9Hd9cbf+pudqcHR2tTi/Z+svfePfs/e9mNncObp+M/Z8LfGzWpud9je 48Ld+cne+err/+jq8vxwT76/z9bj/+nr89Pi/bPBx+Tl++/Hztng6+Dm/3F5g2Ro cr7K0cPc8b3Izu3t/9Xj/tDh+77L4dvj/8fW38LX6OPo/7XEy+Pn//5eN6y7zbHA xdHX46y7wMvg+tHg/sDS6enq/8fS2uLl7eTm+sPO1tHg/cnS1sPd9bTCyMfY77/T 4P9NIay7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAM0ALAAAAAAVABEAQAj/AJsJHEiwmQQUSY6l2LTo 0x2ByX5kaJDBDJEgmo5gWlAAAQIlUX4dGggCya2CKFFiuaQFAAAwoUS4dDmgZi5m VFgInDDFWIQDlVQ9OTMJ2IsmjwTVWOZnIBBiFRqNcCBgUICrVxkwADUDRhWBbGwI GCBAQAAFBAgkwIXBR4NUaWYVE0ihD4ICgBytQhNHhqwDByzE4vGgEwWBbyKd8HVh iaEtrTxk6pVSICJXZVSMGTbKCZ0PeV5V8ORAiIZTOAT2KAEgmKKZsGdCWUGJl8AO qGZCsmOqLFYFCrjAuSJM4JwdaRMksIXBRJcsOYrgMWBgARNWAksZgQCBOscCdaRY QioURhKpA384CCShR5QLWHLIRLCgQ82QB2tuXCDEZ4LAPYyI0UIMymygSyI0tIFM LVaEgJIEtHDiRiBfeLFLZQQFBAA7 ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=subscribe.gif Content-Type: image/gif; name=subscribe.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/subscribe.gif Content-Transfer-Encoding: Base64 R0lGODlhFQARAPflANf/x8z/wbX/ssH/uubp9WfDebTiqPH/1sr/v8n/vnm2hfL/ 2YXmlN3/yGi5cny+ien/0eTp8uXp8rDKvez/0+z/0av/rP7//f///8P/tXLMhOT/ zcX/s9X/wuDk7cjmv8rnvLz+tYv3m3+jf9jf4+/921yMXtD/u23NfnrXiuX5z3S9 gXvVi8//wnjUic7c07j/rM7/v4Gsf478nXKaccP/uWfHeHzckYf0lt3j68vj2N3i 6eHo68P/u9v/wvv/8sH/uZP4oXfQiNX/xnXThcjfyNX/xOP/zYP6k8X/usvdzub/ z9/r5Nf5wazkpeT/ydzl6qb3qKP/qWGIYpThnaj1qnfmhoTbkNv10IHlkHfYidXd 3ff/6Nnf54HikmjDeJz4orD/r4DDhT1gQJ3npZHqn43ZmovnmYi1g3y5heTn893s 3cjhwrz4tcvsveH/zODq3+ns89jt5GfCeZz/p7n/rNP/xOD/zMb/uZ32p+j/0H/a jX/aj+Xp86rHtkd/Uan/rI73ndbzwqb/ql+5cOH/xvL/1/P/227Mfrf/ssXaz97/ y5PGjuPp7+r/05z1ptng5s7c2Nj/x8v/wI3/mKLVmu3/z67+pGeUbd7i6+P/zmPD dMHayYTsk8ry0bLhsH2+i3GOb37jjp3Vn0ySXLn0saboqsTrtGaudKLyofP/3Fyp bLziyrz1w+Dp5+Lm7ILOkLHMvvD/1kN8Tcz/v1mFW53/p2zVfNPi4LT/sXe1hfH/ 1d3/ypf/ndz/ybrdvf3/+LbdtrP/sJr+olOzZYTik9Dzv73/t3yhetPe37j/tKnG tL7/t3DNgn2uf2uwdXejdHqpfaTxr97r7H7dj5D/ntHc2FeZZdP/xfL/2Ja/lNzh 6cz/vNzw11+xbqH4m67mu7vawc3w2IHYkXvciufp9gAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAOUALAAAAAAVABEAQAj/AMuViwMHhJNPwX6F46Qo UjJImdQInFhOghJBAwTkCmOhCg1qj6ohAUeR4qtnsbqUXEmRiZsfGzTdWSTJDq0k bUwgciBnJQlGdAJh8najAB8XGgoQg7KyW5MLBxYYkkVBz5EGHbhlgNGqJA82JYYE CICgB7NEoa6s6pUnQkkC1gyMinbNFhkZ40R0EnVLB0sP0M6kYCHkzwpQy3KwFIil EAZVh7LtsvTExwkOdS5981RyjTFgFRxBWPLGl5EYeErVSiWupKsPXHgBAICtRYIa IaZ4QQVmWslGRVRMGgDkmDJh2sTMGUZJGoGSfV6cEhAF0CApI6iYmYHDCiuWWyqZ K3KmhdSYMrCykCOyCRfLHWiCMCiWZpaCZjYI6ZqwuByyPSh88YAf2/RXTkAAOw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=rating_4.gif Content-Type: image/gif; name=rating_4.gif Content-Location: http://forum.qip.ru/images/rating/rating_4.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPfbAP//y3aRwP//iP//r9uuZHmSvoqYvP/inpaWpPPWV//4rf// uf/hW///nI+Xp///jO7bZaVzG///w//oTuizUpumuOXMZ8qzktuPL3qTwP//Ypmd p6WotP//turQdv//wt2bH///ppGguXyUwe7Ha32VwP//t+HEi4GYwP/qP9DHl5+k rv//e/TRhv//s5tuRf//yv//zn6UvNrDb6t9IouburZ4DbFvD56ksHeSwZZmFc2/ g9bEjZGVqPXaVP//l//bYeKfYf7qTHV6i9q0SLGKXv+4Sf/sjeq1Z///kaltCum7 YtCdZf//vYabwKKem6GLbKefkP//ZHyVwvDLgO3NcXeSwP/RS6ZrBf//m/nlY+Wv a4CVvIOWuujLdrCuovPOb+nPYNqZYP/qnoCXwqR/SPXOf3eSv///yaSlqPXLaaSk p9OwT7iroNnGd///o8yIE97Pg6RnEP//g+TKY6Z7MP/XXoiVtL+LV///zf/oRXmU wqJ/RJ+nuerYbP/tof/yTf/lQ///hP+1R/TSc4WawXuVwv//hoKWvnmSv4mcvpih rqRrEdaNLZhoFeSva4udvpduJ3eFoYqZtKZtEfniX7Gwpf//Zf/mif//x5Obs7us nt/Qgv//rvPIZt7Ea3iIqv/qQqhpDf/rRPDKgf//n+7baahuD8eCEP//scOQWnWR wPbfY4qWsq6Sdv3RT4GYwpSbsv//mZ+BTf/VW6qvrv//sqGAT4SZvv//nfLNgf/w TaZ0Gv//vvbfYNizRq2wrJmhrPjVl//WUn6XwniSwP/ST3uVwXiTwf//z45xWtaN L4OYv///pKKIYpFwVYKZwp2muuzQW4KWv//miv+yRdmZX6+RdImZtvrYmOHLbHOP vwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAANsALAAAAAA8AAwAQAj/ALcJHEiwoMBg2AwSXDRJ 4UARDhwKhCixohNASXQRSobnDMFCu5JQAZNHVSKCGYQ8aEECBhMZKFWydAmz4kBO fj6xYSXLmJxIdShBiWOKzi9fWYaJcsQLizMVECwQSdCAwQ0dEZSUgSqVqlWsSm7Z LAgtEKMADmHpOYXMYYAJNkq4hSt3bMEoWnp1eIPJWiyCTyo16dCMmhhNBDf4WGAi xJEgCBIvbvw4sl2BVQhYEVjMTBuCXgig3baK1CaCPCiMGHjiAmrVrF1fJnhlVsVX fCp6oKGb9+yCli6hAuXwixQ4khyu0ABiiHLmzmeT0SYgRqZOc2hVa3TN0BQ3h2Kg gxkgyM6gZa725NjBAgAAFwKAGMFQhNj69u/jzy9ybLa0UrZIMIYyBoWRSyoS/PGM QTP8MMAHCrzAoIMQSvgbMKNsgUgXaghzB0G1hPLINFx4kk0rBFWQAhIGFLDEAT2k uGKLL8Y42xrMEARJNASlgQtBivRBEA41EIQCB0MWOdCRAgUEADs= ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=vbulletin_ajax_threadrate.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_ajax_threadrate.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_ajax_threadrate.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEFk ZHMgb25jbGljayBldmVudHMgdG8gYXBwcm9wcmlhdGUgZWxlbWVudHMgZm9yIHRo cmVhZCByYXRpbmcKKgoqIEBwYXJhbQlzdHJpbmcJVGhlIElEIG9mIHRoZSBmb3Jt IHRoYXQgY29udGFpbnMgdGhlIHJhdGluZyBvcHRpb25zCiovCmZ1bmN0aW9uIHZC X0FKQVhfVGhyZWFkUmF0ZV9Jbml0KGZvcm1pZCkKewoJdmFyIGZvcm1vYmogPSBm ZXRjaF9vYmplY3QoZm9ybWlkKTsKCglpZiAoQUpBWF9Db21wYXRpYmxlICYmICh0 eXBlb2YgdmJfZGlzYWJsZV9hamF4ID09ICd1bmRlZmluZWQnIHx8IHZiX2Rpc2Fi bGVfYWpheCA8IDIpICYmIGZvcm1vYmopCgl7CgkJZm9yICh2YXIgaSA9IDA7IGkg PCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJCXsKCQkJLy9hbGVydCgx KTsKCQkJaWYgKGZvcm1vYmouZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0JykK CQkJewoJCQkJLy8gcHJldmVudCB0aGUgZm9ybSBmcm9tIHN1Ym1pdHRpbmcgd2hl biBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvbgoJCQkJdmFyIHNidXR0b24gPSBm b3Jtb2JqLmVsZW1lbnRzW2ldOwoJCQkJdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CgkJCQlidXR0b24udHlwZSA9ICdidXR0b24n OwoJCQkJYnV0dG9uLmNsYXNzTmFtZSA9IHNidXR0b24uY2xhc3NOYW1lOwoJCQkJ YnV0dG9uLnZhbHVlICAgICA9IHNidXR0b24udmFsdWU7CgkJCQlidXR0b24ub25j bGljayAgID0gdkJfQUpBWF9UaHJlYWRSYXRlLnByb3RvdHlwZS5mb3JtX2NsaWNr OwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShidXR0b24sIHNi dXR0b24pOwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNidXR0 b24pOwoJCQl9CgkJfQoJfQp9OwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHRocmVh ZCByYXRpbmcKKgoqIEBwYXJhbQlvYmplY3QJVGhlIGZvcm0gb2JqZWN0IGNvbnRh aW5pbmcgdGhlIHZvdGUgb3B0aW9ucwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1RocmVh ZFJhdGUoZm9ybW9iaikKewoJLy8gQUpBWCBoYW5kbGVyCgl0aGlzLnhtbF9zZW5k ZXIgPSBudWxsOwoKCS8vIHZCX0hpZGRlbl9Gb3JtIG9iamVjdCB0byBoYW5kbGUg Zm9ybSB2YXJpYWJsZXMKCXRoaXMucHNldWRvZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgndGhyZWFkcmF0ZS5waHAnKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFy aWFibGUoJ2FqYXgnLCAxKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFyaWFibGVz X2Zyb21fb2JqZWN0KGZvcm1vYmopOwoKCS8vIE91dHB1dCBvYmplY3QKCXRoaXMu b3V0cHV0X2VsZW1lbnRfaWQgPSAndGhyZWFkcmF0aW5nX2N1cnJlbnQnOwoKCS8v IENsb3N1cmUKCXZhciBtZSA9IHRoaXM7CgoJLyoqCgkqIE9uUmVhZHlTdGF0ZUNo YW5nZSBjYWxsYmFjay4gVXNlcyBhIGNsb3N1cmUgdG8ga2VlcCBzdGF0ZS4KCSog UmVtZW1iZXIgdG8gdXNlIG1lIGluc3RlYWQgb2YgdGhpcyBpbnNpZGUgdGhpcyBm dW5jdGlvbiEKCSovCgl0aGlzLmhhbmRsZV9hamF4X3Jlc3BvbnNlID0gZnVuY3Rp b24oKQoJewoJCWlmIChtZS54bWxfc2VuZGVyLmhhbmRsZXIucmVhZHlTdGF0ZSA9 PSA0ICYmIG1lLnhtbF9zZW5kZXIuaGFuZGxlci5zdGF0dXMgPT0gMjAwKQoJCXsK CQkJaWYgKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNwb25zZVhNTCkKCQkJewoJ CQkJdmFyIG9iaiA9IGZldGNoX29iamVjdChtZS5vYmppZCk7CgkJCQkvLyBjaGVj ayBmb3IgZXJyb3IgZmlyc3QKCQkJCXZhciBlcnJvciA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ2Vycm9yJylbMF0pOwoJCQkJaWYgKGVycm9yKQoJCQkJewoJCQkJ CS8vIEhpZGUgdGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2 Qm1lbnUuYWN0aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJ CXZCbWVudS5oaWRlKCk7CgkJCQkJfQoJCQkJCWFsZXJ0KGVycm9yKTsKCQkJCX0K CQkJCWVsc2UKCQkJCXsKCQkJCQl2YXIgbmV3cmF0aW5nID0gbWUueG1sX3NlbmRl ci5mZXRjaF9kYXRhKGZldGNoX3RhZ3MobWUueG1sX3NlbmRlci5oYW5kbGVyLnJl c3BvbnNlWE1MLCAndm90ZWF2ZycpWzBdKTsKCQkJCQlpZiAobmV3cmF0aW5nICE9 ICcnKQoJCQkJCXsKCQkJCQkJZmV0Y2hfb2JqZWN0KG1lLm91dHB1dF9lbGVtZW50 X2lkKS5pbm5lckhUTUwgPSBuZXdyYXRpbmc7CgkJCQkJfQoJCQkJCS8vIEhpZGUg dGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2Qm1lbnUuYWN0 aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJCXZCbWVudS5o aWRlKCk7CgkJCQkJfQoKCQkJCQl2YXIgbWVzc2FnZSA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7CgkJCQkJaWYgKG1lc3NhZ2UpCgkJCQkJ ewoJCQkJCQlhbGVydChtZXNzYWdlKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWlm IChpc19pZSkKCQkJewoJCQkJbWUueG1sX3NlbmRlci5oYW5kbGVyLmFib3J0KCk7 CgkJCX0KCQl9Cgl9Cn07CgovKioKKiBQbGFjZXMgdGhlIHZvdGUKKi8KdkJfQUpB WF9UaHJlYWRSYXRlLnByb3RvdHlwZS5yYXRlID0gZnVuY3Rpb24oKQp7CglpZiAo dGhpcy5wc2V1ZG9mb3JtLmZldGNoX3ZhcmlhYmxlKCd2b3RlJykgIT0gbnVsbCkK CXsKCQl0aGlzLnhtbF9zZW5kZXIgPSBuZXcgdkJfQUpBWF9IYW5kbGVyKHRydWUp OwoJCXRoaXMueG1sX3NlbmRlci5vbnJlYWR5c3RhdGVjaGFuZ2UodGhpcy5oYW5k bGVfYWpheF9yZXNwb25zZSk7CgkJdGhpcy54bWxfc2VuZGVyLnNlbmQoCgkJCSd0 aHJlYWRyYXRlLnBocD90PScgKyB0aHJlYWRpZCArICcmdm90ZT0nICsgUEhQLnVy bGVuY29kZSh0aGlzLnBzZXVkb2Zvcm0uZmV0Y2hfdmFyaWFibGUoJ3ZvdGUnKSks CgkJCXRoaXMucHNldWRvZm9ybS5idWlsZF9xdWVyeV9zdHJpbmcoKQoJCSk7Cgl9 Cn07CgovKioKKiBIYW5kbGVzIHRoZSBmb3JtICdzdWJtaXQnIGFjdGlvbgoqLwp2 Ql9BSkFYX1RocmVhZFJhdGUucHJvdG90eXBlLmZvcm1fY2xpY2sgPSBmdW5jdGlv bigpCnsKCXZhciBBSkFYX1RocmVhZFJhdGUgPSBuZXcgdkJfQUpBWF9UaHJlYWRS YXRlKHRoaXMuZm9ybSk7CglBSkFYX1RocmVhZFJhdGUucmF0ZSgpOwoJcmV0dXJu IGZhbHNlOwp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAy NHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMTc2NDkg JAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0qLw== ------------0K0dULQyTRbx2FYaKjqvM4 Content-Disposition: inline; filename=collapse_thead.gif Content-Type: image/gif; name=collapse_thead.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_thead.gif Content-Transfer-Encoding: Base64 R0lGODlhDQANAOYAAEGMP4K4d+Ds4EicRlyZXGijZEyhSV+bXjyCO+ry61ytWmii ZDp8OPv9+6fIp2ahYzh3Nm+3baHEobrcuYS5eIe7es72rGGsX831q3+1dMfcx6/b lsbtp/L388btpc/3rI/CgIzAfWisZs72rcTspMfup6vKq464joO4d8TrpLHcl2Kd Y7Lfmd7r3kydSs/3rXi7dYC/funs6ZW5lNvo21+bX0SRQkeWROPl42GcYIzAftHi 0W2kbbvmn2ijZc73rLDOsJrAmM31rMv0qs73rdnn2tXl1XW6c7TZs5DCgFmQWJK7 k/3+/WSeZIrEiMfvqJvBm7rmnny9ep3CnZfJhbLfmJfJhq7WrK/SrWanZYSyhJ7K nWmharLdl7DXr8/2rcbtpjVyM02mS////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAANAA0AAAehgEQfIz0BPgQFAVE/L18W Q1YHUEUdNBI5VBgWQjpaGhMwCkdIOychGCwEGk5iYmMDBjFMK1UUUxOtY7oABl4O FAUCEa5jYbsXCQUHHQpiAwjFYQguDQcLwmIGumMMNsgLKA5XxMZjAFtAARtNDVLP EAwQSjI8G08VS0ZYWTciQTgzKpTgQCJJDQktxggwwQVECg4ewIDpkuEBgQcZVEQE EwgAOw== ------------0K0dULQyTRbx2FYaKjqvM4--