Content-Type: multipart/related; start=; boundary=----------UQh4VJid74rITJeRbEOiaX Content-Location: http://forum.qip.ru/showthread.php?t=28526 Subject: =?utf-8?Q?sMailRU=20(=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D1=8B=20=D0=B8=20=D1=81=D0=BC=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=90=D0=B3=D0=B5=D0=BD=D1=82=D0=B0@mail.ru=20=D0=B2=20QIP=20infium)=20-=20QIP=20Forum?= MIME-Version: 1.0 ------------UQh4VJid74rITJeRbEOiaX 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=28526 Content-Transfer-Encoding: 8bit sMailRU (мульты и смайлы Агента@mail.ru в QIP infium) - QIP Forum
QIP Home QIP Forum

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

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

Ответ
 
Опции темы Поиск в этой теме Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78. Опции просмотра
Старый 22.09.2008, 18:28   #1
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 680
Quote selected
По умолчанию sMailRU (мульты и смайлы Агента@mail.ru в QIP 2010)

C помощью этого плагина вы сможете увидеть полученные "мульты" по протоколу mail.ru а также сможете отправлять своим собеседникам мульты*.




Также плагин предназначен для автоматической адаптации различии смайлов у Агента Маил.ру и смайлами из QIP 2010. После установки этого плагина вы больше не увидите смайлы вида <###20###img012> или id=426 alt=':Улыбаюсь:' а вместо этих непонятных кодов увидите привычный смайл - "".



Основные возможности:
  • прием и отправка мультов* ;
  • работает только с контактами из Агента@Маил.ру и никак ни влияет на остальные протоколы;
  • можно не отказываться от своего любимого набора смайлов;
Мульты
Вы можете выражать свои чувства при помощи анимационных роликов — теперь есть возможность посылать друг другу короткие тематические «мульты», призванные выразить целую гамму эмоций от «Ты меня задолбал» и «Я занят, работаю» до «Хочу к тебе!» и «Люблю».




Отправка мульта собеседнику


Передача мультов происходит из окна диалога. Нажмите кнопку . Далее выбирайте любой мульт из представленной коллекции. Достаточно два раза щелкнуть по выбранному мульту левой кнопкой мыши, и он сразу же отправится вашему собеседнику.
Мульты отправляются только собеседникам, находящимся в сети (статусы «онлайн» или «невидим»).

! Для того, чтобы ваш собеседник мог смотреть мульты, необходимо, чтобы у него на компьютере была установлена версия Mail.Ru Агента не ниже 4.7* или QIP Infium 9012 и выше с этим плагином. А также специальная программа для просмотра - Flash-плеер.
Если у вас или у вашего собеседника не отображаются мультфильмы, необходимо установить Flash-плеер. Это бесплатно можно сделать по ссылке: http://www.macromedia.com/go/getflashplayer (откройте эту ссылку в Internet Explorer) .




С версии 0.3 плагин поддерживает 2 режима работы со смайлами:
  • вы не устанавливаете никаких дополнительных смайл-паков и пользуетесь своим набором смайлов, а плагин при приеме преобразует специфические смайлы агента в смайлы кипа. Для этого установите плагин и в настройках плагина снимите галочку "Смайл пак "qip+Mail.ru_Agent" выбран как основной";
  • вы выбираете в качестве набора смайлов "qip+Mail.ru_Agent" (этот набор установит сам плагин) и в опциях плагина устанавливаете "галочку", что вы используете этот набор смайлов и в вашем наборе смайлов появятся все смайлы агенты;
Скачать плагин sMailRU
sMailRU_076.zip

Скачать необходимый набор смайлов
qip+Mail.ru_Agent_076.zip

Установка

1. Установите плагин smail.ru
2. установите набор смайлов "qip+Mail.ru_Agent ".


Если у вас есть свой любимый набор смайлов и вы не хотите с ним расставаться -то вы можете добавить в свой набор смайлы агента, без боязни испортить свой набор смайлов.

Инструкция по добавлению смайлов агента в ваш набор смайлов



История версий плагина



Исходники закрыты



* - отправляемые смайлы корректно придут только на QIP 2010 с установленным плагином, на агент@mail.ru смайл придет в качестве статической картинки, но в тоже время с агент@mail.ru на QIP 2010 мульты придут в таком виде, в каком и посылались.
__________________
Programming is like sex: one mistake and you have to support it for life.

Последний раз редактировалось Shedko, 24.04.2010 в 17:43. Причина: Обновил до 0.7.6 и теперь без инсталятора, как требуют правила.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 23.09.2008, 00:19   #2
QIP Newcomer
 
Регистрация: 22.09.2008
Сообщений: 2
Quote selected
По умолчанию

Почему у меня он не работает? Вроде зделал по инструкции, даже в плагинах его нет...(QIP Inferum fx у меня)
Diman52 вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 23.09.2008, 00:26   #3
Nightly tester
 
Аватар для pris
 
Регистрация: 17.01.2007
Сообщений: 925
Отправить сообщение для pris с помощью ICQ Send Message via Jabber to pris
Quote selected
По умолчанию

Diman52, потому что этот плагин совершенно для другой программы а не для той что стоит у вас...
Программа которой вы пользуетесь называется QIP INFIUM и не надо коверкать название.
сборка FX была основана на буилде 9000 бэта 3. а это значит что у вас версия кипа устаревшая практически на год. сейчас актуальна версия 9015, плагину необходим QIP infium не ниже 9012, а у вас явно более старый кип.необходимо скачать последнюю версию QIP Infium (http://qip.ru/ru/pages/download_infium_ru/)
__________________
Как задавать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Есть вопрос? сначала смотрим тут http://wiki.QIP.ru
и если не нашли решения, спрашиваем на форуме.

Последний раз редактировалось pris, 23.09.2008 в 01:14.
pris вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 23.09.2008, 22:33   #4
QIP User
 
Аватар для iwfriends
 
Регистрация: 23.01.2008
Сообщений: 385
Отправить сообщение для iwfriends с помощью ICQ Отправить сообщение для iwfriends с помощью MSN Отправить сообщение для iwfriends с помощью Yahoo
Quote selected
По умолчанию

Неплохо бы отображать в ОС отправку как "Отправлен мульт..."
И по прежнему пивко не приходит.))

Также неплохо бы отлавливать позицию ОС и мульт там соответственно рисовать.
__________________
Если отладка - процесс удаления ошибок, то программирование должно быть
процессом их внесения. (Эдсгер Дейкстра)
iwfriends вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 23.09.2008, 23:24   #5
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 680
Quote selected
По умолчанию

Цитата:
Сообщение от iwfriends Посмотреть сообщение
Неплохо бы отображать в ОС отправку как "Отправлен мульт..."
хотелось сделать так, но плагин свои же исходящие сообщения не обрабатывает, что в принципе понятно - но это не дает сделать так как хотелось.
Цитата:
Сообщение от iwfriends Посмотреть сообщение
И по прежнему пивко не приходит.))
исправим с Присом. Это "Пивка ?" уже как ком в горле =) там к коде смайла у агента есть опечатка и я ее вечно исправляю - как итог, мульт не работает.
Цитата:
Сообщение от iwfriends Посмотреть сообщение
Также неплохо бы отлавливать позицию ОС и мульт там соответственно рисовать.
Тоже думали над этим, НО ... тогда надо окно разговора двигать на передний план да и не та эта возможность, что очень нужна (это в основном нужно только для мульта "работаю")


Yuri32, как и написано - отправляемые мульты на агент придут как статика. Этот плагин сделан поверх протокола, т.е. исправляет/дополняет только то, к чему имеет доступ.
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 24.09.2008, 05:29   #6
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 680
Quote selected
По умолчанию

0.4
* Исправлено: не обрабатывался мульт "Пивка ?" при передаче с кипа на кип.
+ В диалог отправки мультов добавлены названия мультов;
+ Исправлены небольшие упущения в наборе смайлов:
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 24.09.2008, 07:44   #7
Nightly tester
 
Аватар для pris
 
Регистрация: 17.01.2007
Сообщений: 925
Отправить сообщение для pris с помощью ICQ Send Message via Jabber to pris
Quote selected
По умолчанию

+ добавлен пакк смайлов для добавления смайлов Mail.ru к вашему(на случай того если у вас не оригинальный смайл пакк). инструкция в архиве и в шапке.
__________________
Как задавать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Есть вопрос? сначала смотрим тут http://wiki.QIP.ru
и если не нашли решения, спрашиваем на форуме.
pris вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 24.09.2008, 17:36   #8
QIP Newcomer
 
Регистрация: 13.07.2008
Сообщений: 34
Quote selected
По умолчанию

pris, а как тогда реализован показ мультов? мне же не коды отображаются!!! за ранее извияюсь если вопрос глупый
tribal вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 24.09.2008, 17:40   #9
Nightly tester
 
Аватар для pris
 
Регистрация: 17.01.2007
Сообщений: 925
Отправить сообщение для pris с помощью ICQ Send Message via Jabber to pris
Quote selected
По умолчанию

tribal,прокрути смайлы в самый низ и ты там увидишь те же мульты...
__________________
Как задавать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Есть вопрос? сначала смотрим тут http://wiki.QIP.ru
и если не нашли решения, спрашиваем на форуме.
pris вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 24.09.2008, 17:52   #10
QIP Newcomer
 
Регистрация: 13.07.2008
Сообщений: 34
Quote selected
По умолчанию

pris, щас специально тест провел... мульт послал из Агента в Infium (галочка в настройках плагина не установлена)... мульт пришел... в списке смайлов его нет, т.к. смайл-пак выбран другой... может есть способ выковыривать смайлики из другой папки как это делает копочка с мультами?

Я хочу сказать, что сделать обработку Майловских смайлов в плагине, и передавать infium уже готовый код?

Не, эт я гоня.. тогда не понятно где должен будет infium брать картинку...
tribal вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 24.09.2008, 17:56   #11
Nightly tester
 
Аватар для pris
 
Регистрация: 17.01.2007
Сообщений: 925
Отправить сообщение для pris с помощью ICQ Send Message via Jabber to pris
Quote selected
По умолчанию

tribal, при отправке мультов и использовании стандартного смайл пакка вы увидете код. а не картинку мульта, я говорил об этом. та же история будет со смайлами, вы же не видете картинку мульта а видете флэшанимацию.
__________________
Как задавать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Есть вопрос? сначала смотрим тут http://wiki.QIP.ru
и если не нашли решения, спрашиваем на форуме.
pris вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 25.09.2008, 00:13   #12
QIP Newcomer
 
Регистрация: 01.09.2008
Сообщений: 45
Отправить сообщение для strieker с помощью ICQ
Quote selected
По умолчанию

а можно реализовать в icq в icq6 помоему есть такие.
strieker вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 25.09.2008, 04:43   #13
Nightly tester
 
Аватар для pris
 
Регистрация: 17.01.2007
Сообщений: 925
Отправить сообщение для pris с помощью ICQ Send Message via Jabber to pris
Quote selected
По умолчанию

ребята все просьбы по новым плагам, даже если они в чемто могут сходить с этим просятся в соответствующей ветке на форуме. Здесь обсуждаем данный плаг, его работу, и надеюсь уже несуществующие ошибки.
__________________
Как задавать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Есть вопрос? сначала смотрим тут http://wiki.QIP.ru
и если не нашли решения, спрашиваем на форуме.
pris вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 25.09.2008, 14:54   #14
QIP Newcomer
 
Аватар для kostolom_brn
 
Регистрация: 21.01.2008
Сообщений: 5
Отправить сообщение для kostolom_brn с помощью ICQ
Quote selected
Unhappy картинка от мульта, а не сам мульт

добавлено через 8 минут
Цитата:
Сообщение от Shedko Посмотреть сообщение
* - отправляемые смайлы корректно придут только на QIP Infium с установленным плагином, на агент@mail.ru смайл придет в качестве статической картинки, но в тоже время с агент@mail.ru на QIP infium мульты придут в таком виде, в каком и посылались.
Хотелось бы чтобы мульты показывались в обоих направлениях

Последний раз редактировалось kostolom_brn, 25.09.2008 в 14:54. Причина: Добавлено сообщение
kostolom_brn вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 25.09.2008, 23:46   #15
Nightly tester
 
Аватар для pris
 
Регистрация: 17.01.2007
Сообщений: 925
Отправить сообщение для pris с помощью ICQ Send Message via Jabber to pris
Quote selected
По умолчанию

Цитата:
Сообщение от kostolom_brn Посмотреть сообщение
Хотелось бы чтобы мульты показывались в обоих направлениях
это уже зависит не от нас а от программы Маил агент. пака нереализуемо
__________________
Как задавать вопросы: http://www.citforum.ru/howto/smart-questions-ru.shtml
Есть вопрос? сначала смотрим тут http://wiki.QIP.ru
и если не нашли решения, спрашиваем на форуме.
pris вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Sponsored Links
Ответ


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

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


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

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


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


Работает на vBulletin®.
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
©2004 - 2008 QIP.RU
------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline Content-Type: image/jpeg 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 ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline Content-Type: image/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== ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline Content-Type: image/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== ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline Content-Type: image/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== ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline Content-Type: image/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= ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline Content-Type: image/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= ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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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 ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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 RUK2rKayZQ8dsrLWilsr39xGmku3Lt24ZK9wQmSMzg8+Hky4eqEtJogpOjQ0eMLi 2LEbeXoNwLelxxMEmBlBuiehs+fPne8BaOCvtL8G1Fo96OJPHAoDAUqvaHd606lj pv31auXmiT8GrYyUZgCkgD8Loz4o8fcGiAkF/trRbsBg1BwfPkSY+LDIQIcXyZzM /xQIotk4aqYtldERaNYoIMmScQiTI8eUKR3y69/Pv//++gAGKOCABBZooIAdVBEA TDMN8MYZMfSyBSaK0EMPIAsYYogXGt6CAC8eFFPJDJSkggcNEPwyCh+ddILDi4TE aIopG9R4xx115JjAjn744Ysv68ggpDdENtJIBUhWII002TTZ5JLSIGnklN7I4Isf ddxhCg6dMIHKGLqE8wc6Hoxgh0ynVKHAO+IcUI4/ecARBBxcBPHGPPEkRcQM7LRA zheABipoNctZ0M2fEiThzwA8aOGPAylkQIA/5rSwiTj+UGOJAzwAwYU/hdiWjj8E bBKIAyu0UENpFvDQzA3+lP+xSTNZ+MPCI588cI81Q1hjjQRQCDACGx9MwYELMmVC iwKS+KMNGP5kYQE+8ZCQBCYc3vLMM12M8wAF4IYr7rgU3GOuucSkS4wA7LYrwA/w xhuvu+neE+4IDzyAHRsiaFfFBx+Q0Z0B992nX30vJBxGeDGFEkQZBDwRByOJaFCx BhhbnAgvD0CjSwmlXIBMJY6kkgqKzehywcost+zyyyuLIfPMM5di882lsGIzKzz3 7DMTPAPNxNBEl2A0Kqj0MUY44s0EgxAggIFJAbHcQIAQGHDBQjlasBCLFwgEUskE EZiIoiPdsIEMKci07TYacMcNtyp0032IKmp9M8kkMTL/43cTgJ8g+AnOOLPG4UCu s44ajDfC+OMyrLOGMycwM4kqpPQ1JmAeuGKETIGQM8CqBPSy6A1wGKRAEBjUEA8N KkSwBBETdDPHFzvkrvsO3OziWxbNUAFdAxkEY0Q0yBvRRjRGeOJJNNf8UMwXXXTh iRvXAOCJEdx7sgr31xQjDwCrRLM999ybHwwUu1yyyy68I1JMNT/c84AJBoTRRUxd GFDGHscYAAvEkY4GFKEdDvAHLuKRDyFkCBRV4JWvJuirIVgQCq+IDgr0cI9orMAf 5RgFAFqDgm3Epk0HUEYR4OCPIrCAAFogwCkg0Zvf7AMADkggFyaFHBEs5w2HsoM/ /0jAAwv4gwujcEOw7jGC7HzAADnggD5ikoRtCEIBCnCAFiyxgjJYAAzUyged3rCA OByBFlWQlxrVKAAfVGEbVfABMeBFjOw8QAB11I4JROCDewiAAmx4YxzL5QMTsAFc 2vEBBe5XBTY8gFgfEEEgu3OfRQAsYGQwAMHy84Iw7ONMMiGAAWjhD0a8oTS46MEB joEAL7jSELdYwBlQsIh+2ZINuGQDdrCTr3yNYATkGhe+ernLXebSliYwwb8CNjCC 4Sc/AEqYNBUWhjBw4JocSEYtZrKHNSWiHvWYhjinsYByJsIFqxgBH8KhizG4sw/G qMQv4vEJOugiZ0TLZ9GMxv/PEjDBn0YbWj8D2s9/DhSgB02oP/NpC1IgoQnwwMJ4 BlKIQTxBCFuIQSw2ig1sSOGjUojDM6RgDXSwAhFjKxuKIGCPD+BgRjSq0QZudKMc 1WFHPOqRTnfKU57iFKc2zdIdZLoBmF6AS/gsQdLAJCYPFGAmCuACCJ4gK0zoIAUs EAIBFIGAkGoIAW0wATtIZDYIoM0D7rCFO9bqDjS0qEUvehHfYkRXZsxUcDg93Bp+ FCQZqMEbRkISlAYLpSQ5TnIJ2AAhOkEKpo7JA517akw0oAWNyIEAloiFBSwRhxh4 1pWY8QILJrAEUWxhE6jVAxs4gQzWsrZtnIgCNGbLCU3/2Pa2uD0LWfCmlrZ847eT qMvfABe4whn3uCcAnOUOoYnYQoMOfACMYMgAyn9kIhga+FQKBuCAQnABAzeogQ50 AAcbyIK0sVsCHiYwCh9EZXc7sAoAFGWaJDSjCtVAhH71y4396ncHl7jEFfgCDgBz 48AIzh03LiEPAV9BGFfY3XsZ3GD3xQ8c9ONDIfPXtH+AQgTr8UcmDgCqXrwBdYV4 AyYOMAMVKGUJtbudoARVjAz6gwetYEM0MHWMHEqnNHk44DHMcZxh5IIf5rDEcU7V GgQe5xhFmMUcFJWFMjyqHZhKsj8CoQdrvG8XgBrC/H5AgQ2HYYoCccE21lSEBbzD /x9gKMSc7AQHUdBgCfnQwiMWAQUL+vnPF1xOFg71BQkIEQ7qaENrltEK1rTplEHg QXSkRZosAKEKvtlENxR9DBYUQVGGMoA2/BEEIKy5NeJYwQAyIALPBKvMJiBDB44V EydMwQZKeEISWEBkf6ygCOkAgyh4kAIMYGYQeoDCrzpDQV9JoBpGUIY/bpCBT2ig hRt0NC1jU4QWjGIAxyGNGVowDCpkgoa+AY4nEtiAbjgKOVX4oe2gYwYg2MAfcADC HMD1SBFUYRFTyEEy9icQDRhgEGlIgjkI0ABzZOEcWQiCKNghBAUsAAMhCMEwyAGF jnv84x6nADlAMYhBnOIRev9www8koA8qoGAOLKcCFU7RDEjowQQjj2HNt0GBXJwC BVW4Ri7MIwJeuIABkJhDG1yQAT2IoA1UaAY1MjCOVlRBjwHTJH4WVpiYZKANdgD3 HhogjjKUIQ/x6EE5wCCHVh7hCFTgoLvmvq65273uds873dVlL3H9Ml/74lcyl0kG gWlS6/jJQcI40IaZ2GEOs6CCP5RgZXP0QxQsOIc/snWEZ4TgFeMwQS9H78tfkutc eH/XGtnYrnqFC/A+4Je/mEnJZ3YAYdKspu6t+cmJuqAKghhHCkqTjiwoWQ5eUIQG 3nHybrRiCofX5CKmv4jCW/+S2M8+wKzPfYFRP/qIL5hz7flzINx30prJoAWDJhqT cuSBBCzQAgkGUY4avIMLe8g/CCShAUmAQAkAqATaMIAgUICvcIBnkIAJWAAMyIBO 8IAQWAsSGAAUSIHVc4EAAACCsIHO4wnA8IGwEIIiOIKw8IHOIwhdEABOcAZKAAPr FxMBAQA7 ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=avatar118090_1.gif Content-Type: image/gif; name=avatar118090_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar118090_1.gif Content-Transfer-Encoding: Base64 R0lGODlhUABQAPf/AAgJCAwXDBgaGAkkCRkmGRo4GigpKCg2KDY3NgtFCRdBFxBS CwRsBBlpETdNNzBbLi9mLzdxM0VGRUlWSVVWVV1oXVF7UWVlZW9ve29+b3R1dHJy fnV4dXx8fHR0gHp6hX5+iQabBQuVBwmcBgydCxWRFRGeEQ2gCRSkDRagFhmjFxui GxupESqMHDOdMyKuFiWvGSqzGzG4HyOlIyimKCypLDOrMzmvNzquOja6JD6wPT7A KEqpOECxKkCwP0a6Pkq5MVSMU1ibUkKuQkSyREe5QUq0REq1Sku8Q025SVupV1K+ SVO5U1u8W2+WbnqEen6cfWC/XWK+YmuxaHmueUXGLUjENEzKMlLNN1rTO2DXP1jJ R1rAU17CWF7TQmHNTWTHWmXaRGzUVnDfTnLWXHHbVXTZXGXBZGjDZWrCam3IZnDH bXHKannNbXPFc3XIdHrHcX3CfXvNdXvJennXZ33Tcm3gR3TlTHzqUoDNfYDabYDV dYTVeoTac4fZeojWfYnae4HuVYPoX4PwV4XxWIv0XJD3XpD4X4PiaIzhdY/2YJDi epL1ZZT1aZL4YZj1b5n6ap/ze6H6dqL5eIKDgoKCjIOJg4uLi4aGkImJk46OmJOU k5SUnZubm5eXoJ2dpYaqhZ+in5W+laOjo6Ojqqqrq6yss6uwq7OztLS0urq6vr29 woPMgojOiInVgozQjI3Yg5LVj5Pch5PZi5nei5TTlJrVmprblJzYmpbjgprkh5zr g6HcnKjGqKTboqjUpq3SrKjepKvcq77AvrHesaTjmKnmm6zrmaj4g7D7i7Lzl7b2 m7X5l7r3n7z6nqrgpK7hqq7ooLDmprLirrDppLXoq7ruqrjjtrn0orzwq7/wsMDn vsD1q8D7pMHysMLDw8XFysbIxsjIzM7O0cfZxtLS09XV2Nra3N7e4MPmwsboxMnr xsvpytDsztPt09nv2drw2uPj5Obm6OTp5Ovr6+/v8OPz4+r26u747vT09Pf3+PT6 9P7+/gAAAAAAAAD/ACH5BAEKAP8ALAAAAABQAFAAAAj/AP8JHEiwoMGDCBMqXMiw ocOHECNKnEixosWLGDMe1Mexo8ePIEOKHElSX0V+KOvRk8eypcuXMGPKnBmTnj6U /CCi1AeOlCdNQIMKHUq0qNGjRj15MmUOpUOU5jyBwERKldWrWLNq3cq1K1dUnipV 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 zviM0BiN0riMAQEAOw== ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=f_169o1xsqn52m_fc8b593.png Content-Type: image/png; name=f_169o1xsqn52m_fc8b593.png Content-Location: http://img38.imagefra.me/img/img38/2/2/28/shedko/f_169o1xsqn52m_fc8b593.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAATQAAAB4CAMAAABLsv4OAAADAFBMVEX////39/fv 7+/n5+fe3t69vb0zMzPW1tbNzc3GxsZLS0u2trY5OjlCQkIBAQFSUlKtra0qKir3 pgWVlZWcnJtcXFx7e3shISF1dXVtbW0ICAiEhIQQEBBkZGSNjY378fX46O2lpaXk ma/U1O68veUZGRn99fcAAqXnnbT37fHo6PdER0d0ddsAAZwAAYstLpvwpb07Pz86 PzzHx+hRTE3t5+k2NDb29vwzOTj25eq9vu00NzQAArX2rMgvMcekpd7d3fNNUE4s MS+VluJDR0RbTVICBK3u7vj836W2tuFZWr5aW9FISbn4rBX5uTgBA71CQ6ujpOZD RMYtLrH6x2BLQEOkpNb4sSRBQr5YWcb+9eLtoLeEXmlZWrVDRM1CQ7UXGJcAAZT/ /PaMjd3l3+GMjMtlZtAaIR7Iy8qtrd5mZ7fu6etISat7WmXcnbTIyskWGKzQ09LV 1fSSaXbo4eQKDL83NDSebHwKDKHb2NiDg8v979EtLqTIjqMpK8AQEru2fY4lJyT+ +e7Pz+4aHMD5ttL95LPh4+MICY4dHB1QUE5NTU9lS1L72I/us8z96cJ8fdTuq8Zz dL9SU7L4wNwgIqnZ29oQEY8hLyuqdIVmZ8b6zG2ur+htU1udndMvLS7U0NI/PDzc jqUsLC4dHhz5wE3Kysk6O7YFBQT6wlR7fMJ0WWIlKCdGREZ2eHhYRUo/PT+ogpJR UtAuLy3Vl6wnJSY6O6v70n/x9fO6urmVlc6wsLImJCT7zeXMycq3u7nqgqTKbo1R QkeFeX3Z2tmZdoF9gIEWFhS7ubsYERPpobrLm7Dr6+oiI5rd2dvQ0NOPSF+yr7L1 nLmYmJl0eXYUExbq6utIKjEEBAXBwsFqc3DBwsILDA7DwcEMDQyfoaL0nbxUVlhx b2+pqailrKpLbGGImpBkUlfokrKHhYlhXV5cYWCDiIfircF/gn2Sjo54d3rS09Hp i636+/qyyMHSf5pxbnNWV1SBf4Ghpp2hlJihoKHCwcIcHB13j4etsrAldncQAAAA CXBIWXMAAA7CAAAOwgEVKEqAAAAACXZwQWcAAAE0AAAAeADLqAD4AAAd70lEQVR4 2u2cCXwU5d3H59q5dmZnN3tfCUsuSAiQkKtySIAkIAJeoAIeRAXEAxFEolUExKDU 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 ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=smile.gif Content-Type: image/gif; name=smile.gif Content-Location: http://forum.qip.ru/images/smilies/smile.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAYAOYCAEA0EP/mIP/////iIPraHPreHO7OGPbWHPLOGO7y8nllPGlV IOa+FKGZfea6FOrGGOrCFKGVeW1VCObm4t7e2tahDM6ZCOK2EN6uEPLWHNLOxtbS ypGFYWVQHJlxBNbWzr6RCNqlDKWBDF1IFHlpQJ11CNquENra0vLSGHVlONKyFGFM GLaNDG1QCIllBHFdMGlICLqJCO7SHMKlFNq2FKWdha6NEJl9EKWZgaWJEJGFZZFx DK59BKF9CI1tCHVhNM6qFN6yELKREKqFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJ RiBNb3ZpZSBHZWFyIDQuMAAh/iFEZXNpZ24gYnkgQWl3YW4gKGFpd2FuQHlhbmRl eC5ydSkAIfkEAcgARAAsAAAAABQAGAAAB/6ARIKDhIWGh4QAiIaKgo2LhYqSj5CO AJSLCR81JCsrJDgbCYsTDRI5KgYGQCISDROHJyk3MgSXtgAMOyknhRQLMwQDAAIC xMYQLAsUgwk6QsLEl9PGDj0co0QaEhkDAdLT0g8mEhqCETbC38XG7AAGFyURggo0 BQH409+XBQgOIAoELXhwD5/Bg/0cWFggqAMEdQcNDiAAz0IHeioOeAMQMcCwBxgA nhuCQB1HiQAQMAjhYZ42CQxQmAyHAgIGCy3MEUnAQQQEAwcICD1wwACEIBU8YBv0 iwWDBwYQIDDwgAGGCjw6MCP04YcPExccOLiAIYQFFy8+HJoQoUUJEBYVKsTwAONV pg0NFIwYoaCBqEqABQUCACH5BAEPAEQALAYABwAJAAYAAAcngEREBQVEBwaCRAMB AQMDBBlEjJONBAiUkwUHRACdAZ0AgpOSjESBACH5BAEUAEQALAYABwAJAAYAAAcd gEREAACDhYIAAgKJi4OLhISPj5CNiouWiISGhYEAIfkEAQ8ARAAsBgAHAAkABgAA ByeAREQFBUQHBoJEAwEBAwMEGUSMk40ECJSTBQdEAJ0BnQCCk5KMRIEAIfkEASwB RAAsBgAHAAkABgAABx2AREQAAIOFggACAomLg4uEhI+PkI2Ki5aIhIaFgQAh+QQF DwBEACwGAAcACQAGAAAHJ4BERAUFRAcGgkQDAQEDAwQZRIyTjQQIlJMFB0QAnQGd AIKTkoxEgQA7 ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=f_qy5aqv1etoum_8d97461.png Content-Type: image/png; name=f_qy5aqv1etoum_8d97461.png Content-Location: http://img40.imagefra.me/img/img40/2/2/28/shedko/f_qy5aqv1etoum_8d97461.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAj8AAAHBCAMAAACxAirxAAAC/VBMVEX///+Ghoa+ vr601KSUlJSLi4vM4cJSUlJ8fHzH3r1ra2t0dHTP5MZaWlpjY2Ouzp+82K2/2rPW 585KSkrD3LdCQkGvvKmbp5dOUU1TWVA6OTm41qqSooupq6jY2Nq+xLvR09YyMjKz wK0pKinNztKqtqcAAACWpJMiISHF2L23w7Pb7NT5/vcNDQ2y0KPZ3NngjaYZGRhm 10iI8lu8zLmDBQXJys7my8tX0D6n36Vx1l/s/uymTEzTq6d51G536lGF2XbX5fa7 6rqcx+6HcFbeuri3aGeOqciQ3Yidqp738O/46pvt39+tWFjE0+GcOjomfZ7H2vRI wjbb4OV7h4WHlIz5/v2Im610sXG/wcNjrV6Tt+BuouChrajGiYrx0pLr7eeT8HTr 2NRYpk7Yx5tFnkLMmJjftGe/eH7Rm1Kf6I+QISE6pc/S38yMyo3c+eRacIIinB1r ueIvwCiCi4qlyd98ip5wn8fn6Ozu2rqNyub2z3rru0P520PvKCiPt8+Qr/j8+fn7 +vyqtsYzoCrv5+X058jxxCnu8vb6SEi5jUO4wtHknbP0011qd3WJuon16Og+KyVj VzQoWXJOb6FyfXzv2acfahxXhqW9kn2YciXyamretnvOyr7IyM35kpFoOT9LW2qy tq60Ojbu0Ai7p5kWOhPp7O7ILSSfXoS3uL5tm/3f5d/nExQ8mK54Y0xJiz/PnCaB jYUQEH5RUfvZSEZ0S1WHk5zn5+IsLPXFzsKJXWqg9vqSlZvf2M5GSDZFczhga2tr 5u58d6e2GQ+biEX7q6rd19aNJIi2u79UifYgiCsmiLNaUE65rMnCw8HV1M+ulSCm nG207ZzMprmMWBIm8PPw9fHYy92bm5j08vOwmpOJh4asrbROT1BgZ3etgoLFu7Ke kZtGUldtHWxBUz/DwcShl4ni2NqPenpxcf6QkI+Fa4RFUFX29vbw8PDV1dXf39/o 6Oh2fnLFxcZ4gXducm3Ozs6tra22traenp5maWSkpaVaYldeblqZxHq6AAAACXBI WXMAAABIAAAASABGyWs+AAAACXZwQWcAAAI/AAABwQCkQpVgAAB5Q0lEQVR42u39 C7ze1Hnni0tiaWt5CQlsIbuRKSC/2LzYfiGbmnIzFEgM2LVhwDZ3G8L9Esw94RIS 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 u+zEj0oTfiYSRuDHD/9X98X7c1025cTShJ+JRuDH9dxn912W6/ST3Wxw/WfthJ+D X8PzAwFXn34K6vQz3wxSb8LPRKPw4wZfmTrlzHPOPffMU87d6af+hJ+JRuLHD04+ 89w7/vEf7zhzXxClwYSfiUbix/P9cwCff/zHcy/aHmYTfiYSRrM/vn/RuXfcccdF Z672k56D8RN+DimNUv/xvLuWcZ3sxcmEn4mEEfmJvONwidnjPC+TBvBz5ISfQ0ID +SknarhREEXHvrgP9GIUpVHngjfh59DVIH6CNiaJ70VrzjnjjDPuOCcKide+4EsT fg5dDeTHdcMsxtGK2PPC9WeeA7oS+PFdx4fzceDMGEmd8HNIaSA/fiDFYRgFQRJ5 4bFXn37K6afv+7yU+m4QpmEYwuWJ/TmENZAfD2rNnu97XhL6YXgODn/t+3yc4Rm+ g4OXhRN+Dl0NrD975eq+SRKE/9999wM/a8IscaPidESiCT+HrgbzE+PK7ZkkJXEQ SvsuO/2y0zdJqeSGUlKs6u5P+Dl0Nbj/x+PbCkkS1HnCr550+umnn3KsRCIffk/5 lRkDqRN+DikN2X8YhImUet5X159yyunnHJsQz5MkUjshdcLPIaWh5w8mCE1y1UXn nnsElFx+lMSyN+HnkNfQ6yfEaex70lffPvHEt6U4DbwsTYIJP4e8uvjx3d7jXzjv 1M+3uEjkrGvh6Ak/h666+AmxK7nf+j9ezHcFjHtPP53wc2ipmx8sk/quH8XnLvuB O+FnIq5ufnBWxX5af2zCzyGhbn6i/bd+3YSfQ0Jd/Lj7cf3DCT+HhA7Y+pkTfg4J TfiZ8DMfHUB+JvPfDwFN+JnwMx9N+JnwMx9N+JnwMx9N+JnwMx9N+JnwMx9N+Jnw Mx9N+JnwMx9N+JnwMx9N+JnwMx9N+JnwMx/N5iecZ45P+DmUNJuf/aEJP4eKJvxM +JmPJvxM+JmPDhw/S2r/uAk/c9SEnwk/89GEnwk/89GEnwk/89GEnwk/89EB4+ek CT+Hgib8TPiZjw4cP4dN+DkENOFnws98NOFnws98NOFnws98NOFnws98NOFnws98 NOFnws98dMD4OWzCz6GgCT8TfuajCT8TfuajCT8TfuYj5CcIOEUTfiYaWUCOJ4sk 9vYzP8sn/BwSQsvjZZK/v+3PhJ9DQ7z64/P9CCb8TDSy2tVnZ8LPYqdlKSpw2xu8 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 ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=image204jj4.gif Content-Type: image/gif; name=image204jj4.gif Content-Location: http://img210.imageshack.us/img210/7168/image204jj4.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAUANUAAPz89fzr0Do9Svz525P49myp4GppYLn9+llXUlT8+m6W2DdM WktOm27y8Lu6sjk5Mtf79UhFTDxmfK2omXO89VWq53l2aAb+/FB1lVOFnYaEf1Rn bXmovMe+xNTU0lB6wG+Jok6c9HC3qNvVtXloUo/K8Jrc+3Z6hJOUlLLY8DOo+m+Z rFZUOk259UypnKWdjyHVrOnp6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAUABQAAAbnQEBAKBwaicciEjAgNo/J 40swGRhRjxEUCtAIPFbHw0FcQjWImCcyMQOEzYF8gKhbmHOjUWN4IBZ/CwsRhAYd T0MTCAWMLRUVLiorCh8MAg5DQhYVBQQHBAkJFxcJBxAYDAhFAywUBQdvBg4Now0A ChICSg+usAQGGxgwCQQQCgwLcAMCjBAACQbRBhzFILlHvK8ADcDRIg0HuBFOAr0H B9HUoAcglpkBzJ2eJyYEBA0JxrlKJJwlnp/uEUshgYGFdw42KCgQQkGIDBk+KMiA ikomIR0MAAIkoKNHAQffuOFCkuTIJUEAADs= ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=avatar174746_4.gif Content-Type: image/gif; name=avatar174746_4.gif Content-Location: http://forum.qip.ru/customavatars/avatar174746_4.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgASQBQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A8Mth8p/Ko3UrJx2NTRYAcdgaWZP3yf7WKAJZx59iFYYdeRVJ QFUE4Fb+pQiJYnVcbxjAHOa73wn4LTR4Y77UYwdRb5gCA3kd8Dtu9W9eBx1APLdM vDYajHPyUB2yJ/eU9Rjv6/UCusVrOQbNy3MB5Ty2BdAfQ9R9DxW38Q7T7fpRuGXd dWboRK33vKY7SufTcUIHbJx1NeYSxyQyQudyMy7ww45BIyD+FAHYXOjyLbm6gb7T bA8yIuHj9nWqseFdzgDcuAR0PNdFpFzPcaPb61YkGcMYLlD0LqASCO4IIP4kdqs3 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 J75/lTW/1Z+oobt9BQBDt2vikPWl/jpp+9QB/9k= ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=avatar260079_2.gif Content-Type: image/gif; name=avatar260079_2.gif Content-Location: http://forum.qip.ru/customavatars/avatar260079_2.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUAA8AwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A+f6nhtXmt55l+7AFZ/oSB/MioK1vD11a2+omG/crp93G1vdM BkojYw+BydjBXx32YppXYD9E0SfW7iG0txi4uLmG3hYnCl3JGD/P8PevSvCPwRk1 tZ31LVEs/IuFjeKMB22jO7kZXJIwuCR1PPALfDWiXHhTUw+phPNtdNmmRIyJI7uN juLRuODlG+8vIMQH8QqvqdlBF8Q9C03xfGL6adIhfs8m0RSTSs7L8hH3N6rwQox0 IwK6Y07Iyciz4m+BGt6ZZSXmm7LvYgdreEMzAk42Jxuc9ySFHPSvKb3Tb2wuZLe7 tZreaMZeOVCrKM45B9zXtaeIrr4Y+N7LTLiOddKePy78Hb9nmyxzLCijauwsVIHL bTkBia1fHnhvw9pGs2V+0dha6XfA2tzAtm6wmP5SdrxkKrZAcdCccbvuMnTu9euw 1I+c6K6Hxn4al8J+I7jSphIDGFZDIVJZW5B+UkdOPwrnq55KzLTuKoycV1Vj4I1C 7XTZllgS3vYJLiSdidlrGhwzSHHYYbA5+Ze5rl4+HyBn616APiLFbi6tLXQtPi0m 6fzbixVXKzHsp3OQgBH8AGcVpTt1FK51/hrxBoMeqNoUVyJ9Ahlje3WSOQLJhF8x lHDxtuLtjgMCVOeMcn4r1C70rxit9ao4urURyqbqNXEzAkyNtOQw3859iwxxjlrP WGgkklgcW11JIxBiGxF3kdMfdAG7H1q7ruuWl9fiaGW+ugHZt10VD56A5GeGXaCv +z1NbOaa0IUWnqafhzxta2tibXXNKi1i3t7lLq1gmmZBE25zJt653b1yDwQvIOM1 6bc+LZ9Z8NX2oC90u+0l4ooJ9Nux5Sr5i7judVBVgflUg4IXPBGa8x8F+DzqU0V7 LLEYgplRVfDfKevOFIzjPzce9dB478QTadZWslpeSrf3SIFuFfEq26M7cMACFd5G AHHyxr2NVHb3hPV6HnvinVZta164vp7t7p32qJZAu8qqhVDFQASAAM45xnvWLVi7 vbq+l826uJZ3/vSOWP61Xrkk7s1QUUVPaCLz1MysyDkqpwT7Z7Uoq7sMi2MDjGDX UeE/D8epTi5u3njs4jueSOPI46DJ7k4GFDH2q7qNhHcW2m2ttbILedt8chdnePPJ UZPTHPua0ra5+y2NrFlrfcSSzOW2cPkj0wqEDHdiRzXVClbUxlO5019qzQ2iwRWj 3ZDCKOz3Dbu5IM79DjBO3t39uI8Vqkll5+pz27a1JiTfExk85WJ6kHaoCbAvHPP1 o1jUbm10SCOK+3WdwpZYzGAXO45GDyEGBx3z0rk9Qv5NQvZbmTrI2cdlHQAewAAH 0pzlGEbDim3cp0UUVxmoU+OQxuHU4YHINMooWgHU6ZriRzSyzRKHbDxheApUEYHp xx+FWnnt7m2WBLgsWP7snt3A9sZYe+a5JP3ihRww6e9TRwzq3Rlz611wqNmTiX5N DuNxOF255YnH86c+gFUBWeM4GSf8AOTVNtTuF3AnlsZPqfWlg1W4DgNIWHcMc024 t2e4WlYoyxNExU/yqOtvUitzCJdzFh6nPFYprnqQ5WXF3QlFFFZlBV20mPKkn2ql SqxU5FXCXK9RNXLtwnmrvA5HBqvHGd2TwBUizKTnlT3I701pcd8mtny/EQr7Es82 IwtU80rMWPNNrGpLmZUVY//Z ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=im_msn.gif Content-Type: image/gif; name=im_msn.gif Content-Location: http://forum.qip.ru/qipstyle/misc/im_msn.gif Content-Transfer-Encoding: Base64 R0lGODlhEQARAPesAAAAAP///wABAOHk8051vAAGAAAGLgQSQgAHGgAAKwAAEAAC AAkYUR4kJqiRQdvd7GOT6PX+/xsnJGKI2+Di8eHj8uLl8xMlazovANirBlFBCKXD +TJWtNDT4Via/498PZWiyk530iVLll6P60drxUFtwZifrEtbjCMqOp2HROndrDph we/CFQAAC9iuBZBvANrc54psAM7Q3N7k9sHAy4NrD5LE/xUvhNfZ58+pEQ4vk+n/ /22o/8jL1zUmANbb742m36mEALSxpNO0bcPH2mpQAMSxbN3//3NeC+a6Euy6Ak10 x8fHy0Z0zK664fTHFAYQDlpVV9CrHv/RCBgyaLeXIAwgZhw6lMXX/Vx3uQAFAOzJ KAAGMAAGBKuLDnlgAgcPCmRqf9ve7DRZttLV4nZ7fxIxklqZ/y9Stk951lqK316e /2ST6t/i8mOR4UlwzU1yyou3/devFlB61S01OOC7OkhqxAsWFVxgZWVWFXN4flJo gVSO9lxdYv/vDE52y7S/5NjY3AAJJwUMCqistgcTQgAMNHNrO6qKCx45dVRAAKm9 5J6893xmD3ZkGP/aEhofIGah/myh/4Wh1JKl3P/gEcTCw01blw4aUSYwUJaBRkZt uhonZNru+k1zzeLl9G+N2Ia8/8vZ9s7a+K3g/+3//8nM2IWw/Yeo7F2J24bA/wAA MeHk8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAKwALAAAAAARABEAAAjqAFkJFIhDTwNIeEwNXDiQ EAABgwoAANCH4cAeAKCAQVBIUAsADyyyotPlzoEoHxxpwFDBopgFEjilmOICERIf TCySEWBIk58nObw0UiTE4gAtmLZUYiGnSo0igUSWSSDlUZI6Q2I4EMlqAIo8SjIE efEFBldWi0rsOWRExSQDMkQy4qOmiQgTASJQUUCBoagzklIR2JTIUoAsq8IstBCJ Byk3f5aMOREAiBUuHQZuWBNqB4QQcEhcoYHlBoNMA+N4sFGKzRxPdjhcGqXjApGB n06pOjIizZsVaMyAcNLG4oxOqCaAogToh8WAADs= ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=im_yahoo.gif Content-Type: image/gif; name=im_yahoo.gif Content-Location: http://forum.qip.ru/qipstyle/misc/im_yahoo.gif Content-Transfer-Encoding: Base64 R0lGODlhEQARAPejAODj8v8oUv9Qdf8hRNzd7P8vVv8xWMxthtN1j/8wWf8wV/En T/8xV9tsif8lTOTW5f8mTv0lSf8nS/QZRNZLbJ9MXP8fUOPW5N09UP8cRN7e7f87 YP9cgv85Y9Xa5/84YNrC0dQHIq6LnP8sVswMKbiLov8xVv8JKtOls/8pUdG3yv8z VeHF1Ox6k9/i8MM9XvFofNSJnbmQnepidfl7kv8iULx5h7h1h8ded+yCmOWissMn Qd7a6vY1U91JXcNQc/kaQP8UOvkmQP8UN/8ZPv8QQ92qu7hkc6lpf+hHXbauuK+F m8yjsP8pV+qUp/01iN67yf9VdeHe7P8pVvQZQf8xVP8uVf8uVP8nW8+Pm/8wVdxr iO8bPJ9mdvg6V/8jS/8fR+Hi8P80VuDG1do/U8I0Vf8rUP81XbCRn+DZ5/8oU9WA nP+BpeHBz+xLYP1xkP8xU74OLP1okf8kR9fF1/8iP8KBjv8qTv9KbO4cQP8gRNq3 y+jL2f8eQv8jSd65x6lMZP8nXcKNpf0aTP8vV/8yVv8tVeenucynu9XF07N2jdPH 2Nw8cOmksvQaQZ9XasS8x9saRv8hR/8dR/9LZ79UafMSO9zc6/81Wf8eSP8sUNbA 0OOmtN7U4/9nisumuP8pU828zYw/U+Hk8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAKMALAAAAAARABEAAAjtAFn4wEDmCIBRCBMqHEVJ QBUtQUQsnNhCjqcIkZYgRGHHhgwXCBNdGhWDzQBRCHX0mSNhyI1RbU5UQvhGAAkP o4wswKRpkKBRQsDgQHiIA5EuCJOYcFRiFCc9GT4hDIPnQ5xRfFZ8KYPQTYo8BBI6 OQMEDQ1ClkKNSuNl0gGFUswY2hEl0wuEUO5Q0bAwBwQxhSYsQvinyJ6JYxwUmPJD IZ2Jox74YRAACUImSiCPuiDJgBpFoxrVCQFpIoAsVxQ0eTQKRgcsgCbO6LHBSgIu FUBYeIJoIpwaAUaACsRo1CYVkDsh2EKhwRoekAMCADs= ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=viewpost.gif Content-Type: image/gif; name=viewpost.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/viewpost.gif Content-Transfer-Encoding: Base64 R0lGODlhDAAMAPcAAP7+/k96W05zWpWZnk57XLrX0UhrV6/tra/urbjsuY6TmYzf ik99XLnsvKbPr527sMft2FaCYWR2dbLRx3nGfojgg3vTeqDym4zjg3bUeFeDYpzh mnrbe3+Xkofvg2rBcWW2bq66wILefqvvqH/mgcru3n3aenzEfszb3Xe9eXW7eYuk naHPpkhoVVhkaH6GjGSBcpuhppGko5ajprnYzcDa1sXM1aPipbrW0HjWePn7/Xzg fKrQtL3kyoCdj6XHtLPPxEVmVHvafaGsspSZnk10Wa7msHzAfnvYfDlbULrsv8DH z4K4h2J7csnt27DusP3+/qbxoD1nVs7w5pKbob/I0FBtXpn0lIPcgKzLvbvCyne4 e5TBm/P2+YOMkZm3qqriq5rrlJ3DqMPM046WnKTGtk97W1iGYrPQxpngm5y8rJHk j5evqXfGecfj3m2GfluuaZDzis/U3Ju7q7rsvL3GzZSwpLLguKLmoJSfo3jTeHPR dGmLd27McoDjfKjQscDryarPtqTFtPj6/YmQlQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACwAAAAADAAMAAAIoQBRlHnwRc2PQDz+OGABxE0BGV7yzKBR wgmEKRhqTOgQAwAALXfoJABUAUcPMW8IeVwCBkEDLGiUGOECg4jHEBsOmMjyZAQe JlYGQAEw5kYOQVEuhDkiQMEgAHLS7JlzZc2JM2R0AKgjIk4fOwu2RHjRBUAVC348 fFiRQgMVjzba6MmwA4QPFXxcSGhCAYkQDiTgDEnSIoiBIgHMEGAghU1AADs= ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=avatar259505_1.gif Content-Type: image/gif; name=avatar259505_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar259505_1.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAZABkAAD/7AAtRHVja3kAAQAEAAAAHgACABgAAAAKACAA IAAgACAAIAAgACAAIAAgACAAAP/uAA5BZG9iZQBkwAAAAAH/2wCEABALCwsMCxAM DBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoXHh4jJSclIx4vLzMzLy9AQEBAQEBA QEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoaJjAjHh4eHiMwKy4n JycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/AABEIAEAAQAMBIgACEQEDEQH/xAB+ AAACAwEBAAAAAAAAAAAAAAAFBgIDBAEAAQEBAQEBAAAAAAAAAAAAAAACAwEABBAA AgEDAgQFAgQHAAAAAAAAAQIDABEEIQUxQRITUWGBMgZxIpFCIxShweFSYnKCEQAC AgIBBAMAAAAAAAAAAAAAARECITESYYEyA8HxE//aAAwDAQACEQMRAD8ATaM7LsH7 6F9wz5xhbXEbPO3Fz/bGKERxmWRIl90jBB9WNqP/AC+cxZUGzw/biYESBUHAuwuW Pnag7xetFuyb7L7OjEgbPOGMyb9gW/Zhv0S/u6bcTesncF7V5YnmcqOA5Vpiw34B SxHgOdKTUmzKQz624cr3rhBW5B1o/hbLPMSZUKJxuRarsjZIgpsPurOQ16nAtpJf jpVldyMVseRo25a1EG4B8aRNqC2CTtZEUp4RurH/AJINOnyLN+P4u4g5+1HLlnjW QTiQqGX2jS/K1J+HgZm4SNDhxGaRV6mVbaLe19beNMvyLb8yT45t+blRNHlYQ7GQ rWJ6D9qtpfmB+NRvx/ajlSlarU5zlY7GrTBOzpE080qJ0o7noQ69K8l9KZseNABZ QPSljY5Y1YozBWvpemmFk6fMU3sv644o2hV7evGseTELEirzl4kEd5XCk+J19BWO fOhe/Tcg8DyrmhyKW/Me9YC3iedYRR7eMZZeyQuruB9b0M3MBctkC9IQKLelbU89 67ZXh5cuJkJNGzqAR3BGxQulwSt18adsDd8Le9t3XCixpIAuM0jGSUy3IB6bdV7W IpCppxom+PfHMqfK+zcN1XswQn3LFbVmH0N/wo2rTlVvy0s/AAFtiLJIbqHK2bpP BhzFMODFHDPDGoZVYMCpYtfnzpawJezlRngrHpP8qacRkkzVPUA0ag6/5c/4UmW9 UR1Lv2cJZnWISDVWU+B0uKlDgxxfqFekAWAJuT5muxTESt0MCBe9qlkTXW96ycQV aUyBd8mU9IvazXFAsiZp5TI3EgDXyFq27zkC/iWbT6ChYkQ86SPP7HLO90ROrD3K QwHmDerNw3XM3HIbJynMkp0F/ao8FA4CsQuakosa6FMxlYkB7uOeZB4ijeLmrMYp LXZBaRdef+utqCEXqzFmeCUSJ7hyPAjwrWhUtD6DYmQzkLHZF5kX0HrUcrLCr0E3 PlzoXHvpa0TJ0dRt1k3A89KIR46L97HuOfzHh6CjBZ2VvEEbkp6BK3FmsPIWoWaK b3KO6kC/kHU31b+lCiaSIW2f/9k= ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=icon9.gif Content-Type: image/gif; name=icon9.gif Content-Location: http://forum.qip.ru/images/icons/icon9.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAYAOYCAEA0EP/mIP/////iIPraHPLOGPreHPbWHOrCFKGZfea+FHll POrGGPLSGGVQHO7OGObm4ua6FO7y9tbSytahDOK2EO7y8t7e2tLOxmlVIJlxBN6y EJGFYW1VCM6ZCKGVeV1IFN6uENbWzmFMGHlpQNqlDG1QCJ11CNquEGlMCKWBDHVl ONra0tKyFLaNDIllBHFdMO7KGKWZgcKRCO7SHObGGJGFZa59BM6qFJl9ELqJCMKl FLKREPLWHK6NEJFxDL6RCNq2FGlQCKWJEI1tCHVhNKWdhaqFDKF9CL6NCM6dCAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/iREZXNpZ24gYnkgQWl3 YW4gKHd3dy5rb2xvYm9rLndyZy5ydSkAIfkEAcgASwAsAAAAABQAGAAAB/6AS4KD hIWGh4QAiIaKgo2LhYqSj5COAJSLEhNGJCMjJDITEosQCR1DLQ8xOCpCCRCHLCs5 NAQGBgQHBQo/KyyFFxk7BAOXAAHGCC4ZF4MWNjzEAALU09UKSBwWghgdPQPIAsaX 4gwoJhiCCT4EAeHj0wAPFScfggtBBu7Il/wABgUizFggyAEDffsSugMYQYmDgjXa KUxIYJ6Hh0sWtDgAbmKAAQcYbEhCcMmHIwWIuRs3gMCuEhrsLemmoIG0fcUaIAjh AZ0gCxxUIChwgIDRA7oQbKCgQdugYC4UMHhQoMADBgpCULjhoBkhEUWIoKgQIUKF DSU8vIAh4lCpFBgngFCgoENDileZJiRYAALEggSiKgkWFAgAIfkEAQ8ASwAsBgAI AAkABQAABxqAAwGDAQMEDQiEhIYFiosHAJEAAZKTjoMGgQAh+QQBFABLACwGAAgA CQAFAAAHGYADAIMBgwAIAAKKiYuJhoMCkI+OhYSGBoEAIfkEAQ8ASwAsBgAIAAkA BQAABxqAAwGDAQMEDQiEhIYFiosHAJEAAZKTjoMGgQAh+QQBLAFLACwGAAgACQAF AAAHGYADAIMBgwAIAAKKiYuJhoMCkI+OhYSGBoEAIfkEBQ8ASwAsBgAIAAkABQAA BxqAAwGDAQMEDQiEhIYFiosHAJEAAZKTjoMGgQA7 ------------UQh4VJid74rITJeRbEOiaX Content-Disposition: inline; filename=pardon.gif Content-Type: image/gif; name=pardon.gif Content-Location: http://forum.qip.ru/images/smilies/pardon.gif Content-Transfer-Encoding: Base64 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 ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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 $ || #################################################################### \*======================================================================*/ ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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 ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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= ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX 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== ------------UQh4VJid74rITJeRbEOiaX--