РЕГИСТЪР и Декларации по ЗПК

Дата на публикуване: 09.05.2018 13:20

Заповед № 418 от 26.11.2023 г. на Кмета на Община Угърчин за утвърждаване на образци на декларации по чл.49, ал.1, т.1 и 3 от ЗПК и образци на регистри

Приложения №1,2 Образци на декларации по чл.49, ал.1, т.1 и т.3

Приложение №3 Образец на регистър

Приложение №4 Образец на публичен регистър

О Б Щ И Н А   У Г Ъ Р Ч И Н

ПУБЛИЧЕН РЕГИСТЪР

на декларациите по чл.49 от Закона за противодействие на корупцията  на Община Угърчин

№ по ред

Входящ                   №/дата

Вид на декларацията по чл.49 от ЗЗПК

Име, фамилия

Длъжност

Декларация /файл/

1

001/06.12.2023 г.

чл.49, ал.1, т.1

Цветан Бойкин

Гл.специалист

  тук

2

002/02.05.2024 г.

чл.49, ал.1, т.1

Лъчезар Радев

Специалист

  тук



Заповед №190 от 13.02.2018 г. на Кмета на Община Угърчин за назначаване на комисия


Заповед № 191 от 13.02.2018 г. на Кмета на Община Угърчин за утвърждаване на образци на декларации по чл.35, ал.1, т.1 и 3 от ЗПКОНПИ и образци на регистри

Приложения №1,2,3 и 4 Образци на декларации по чл.35, ал.1, т.1 и т.3

Приложение №5 Образец на регистър

Декларация за имушество и интереси част 1 (чл.49, ал.1, т.2)

Декларация за имущество и интереси част 2 (чл.49, ал.1, т.2)

Декларация за промяна по чл.49, ал.1, т.4

Указания за настройка преди попълване на декларацията

Приложение №6        
Към Заповед № 191/13.02.2018 г.на Кмета на Община Угърчин    
О Б Щ И Н А   У Г Ъ Р Ч И Н  
           
ПУБЛИЧЕН    РЕГИСТЪР  
на декларациите по чл.35 от Закона за противодействие на корупцията и за отнемане на незаконно придобито имущество на Община Угърчин  
           
№ по ред Входящ                   №/дата Вид на декларацията по чл.35 от ЗПКОНПИ Име и фамилия Заемана публична длъжност Декларация/файл/
1 1/15.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Димитър Димитров Секретар ТУК
2 2/15.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Татяна  Сирашка Секретар МКБППМН ТУК
3 3/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Тинка  Калчева Старши специалист ТУК
4 4/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Розалина  Мяшкова Гл.специалист АИО ТУК
5 5//16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Галина  Рускова Главен счетоводител ТУК
6 6/16.02.2018 Г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Марио  Ангелов Гл.специалист ОМП ТУК
7 7/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Десислав  Митев Главен експерт ОС ТУК
8 8/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Христо  Христов Кметски наместник ТУК
9 9/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Йовко  Бачевски Главен специалист ТУК
10 10/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Иван  Мичевски Гл.спец. ТИ ТУК
11 11/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Дияна  Катърска Нач. отдел УТТИЕЧ ТУК
12 12/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Пеца  Пълевска Ст.специалист МП ТУК
13 13/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Даниела  Йоновска Специалист ОС ТУК
14 14/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Валерия  Въцова Ст. специалист ТУК
15 15/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Наталия  Краева Мл. експерт АООБС ТУК
16 16/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Петя  Митева Специалист СДК ТУК
17 17/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Румянка  Пейчевска Старши счетоводител ТУК
18 18/16.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Димитър  Димитров Кметски наместник ТУК
19 19/19.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Любка Кутева Старши счетоводител ТУК
20 20/19.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Катя   Еврева Началник отдел ГРАО ТУК
21 21/20.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Галя  Йошева Мл.експерт ГРАО ТУК
22 22/26.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Драгомир  Димитров Гл.експерт БФК ТУК
23 23/26.02.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Лъчезар   Щрегарски Мл.експерт Б и ТРЗ ТУК
24 24/02.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Цветомир  Кутев Ст.специалист ТУК
25 25/02.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Светла  Шахънска  Главен инспектор МП ТУК
26 26/06.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Мария  Динова Заместник кмет ТУК
27 27/06.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Иван Иванов Мл.спец.горски инсп. ТУК
28 28/06.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Преслав  Ингелски Мл.спец.горски инсп. ТУК
29 29/08.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Христина Балевска Директор на дирекция ТУК
30 30/08.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Бистра Иванова Старши експерт ТУК
31 31/09.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Маргарита  Бочевска Старши счетоводител ТУК
32 32/12.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Грета  Гачевска Началник отдел МП ТУК
33 33/12.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Петя  Кърджова Специалист ТУК
34 34/12.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Стела  Игнатова Началник отдел РИ ТУК
35 35/12.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Ангелина  Стефанова Гл.експерт ПП ТУК
36 36/12.03.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Емил  Живков Гл.специалист  "УТ" ТУК
 37  37/17.05.2018 г. Декларация по чл.35, ал.1,т.1 от ЗПКОНПИ Владимир Недков Ст. специалист "Строителство" ТУК
 38  38/28.05.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Христо Кутев Гл.специалист ОМП ТУК
 39  39/28.05.2018 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Марияна Мирчева Мл.експерт ЧР ТУК
 40  40/01.02.2019 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Надка Влахова Специалист АД ТУК
 41  41/06.02.2019 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Васил Патарински Специалист КК ТУК
 42  42/03.04.2019 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ  Константин Балев  Специалист ИС ТУК
43 43/01.11.2019 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ  Христина Ташкова-Мичева  Мл.експерт АООБС ТУК
44 44/01.11.2019 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Венислава Пастухова  Специалист ТИ ТУК
45 45/08.11.2019 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Десислава Цанова Ст.специалист АД ТУК
46 46/04.12.2019 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Николай Гергов Кметски наместник с.Голец ТУК
47 47/03.01.2020 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Цанка Иванова Мл.експерт АООБС ТУК
48 48/29.07.2020 Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Георги Баев Мл.експерт  ТУК
49 49/09.09.2020 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Мирослав Патарински Ст.Специалист "АД" ТУК
50 50/15.10.2020 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Деница Балева Специалист ТУК
51 51/01.11.2020 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Божидар Добревски Мл.експерт "ИП" ТУК
52 52/17.05.2021 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Петя Добревска Специалист "УТТИЕЧ" ТУК
53 53/15.09.2021 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Йоана Мараченска Специалист "СДЗ" ТУК
54 54/01.10.2021 г.  Декларазия по чл.35, ал.1, т.1 от ЗПКОНПИ Ивелина Добрева Главен експерт "АИО" ТУК
55 55/01.10.2021 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Деница Маринова Старши експерт "ГРАО и архив" ТУК
56 56/01.12.2021 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Ивелина Радевска Главен експерт ТУК
57 57/01.07.2022 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Милка Минчева Кметски наместник ТУК
58 58/15.09.2022 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Нелина Христова Специалист "КК"  ТУК
59 59/15.06.2023 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Поля Стойкова Главен счетоводител ТУК
60 60/04.07.2023 г.  Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Калин Голийков Мл.експерт ТУК
64 64/08.11.2023 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Десислава Цанова Кметски наместник с. Орляне ТУК
65 65/08.11.2023 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Милка Минчева Кметски наместник с. Сопот ТУК
66 66/08.11.2023 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Павлинка Стойкова Кметски наместник с. Сопот ТУК
67 67/08.11.2023 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Печо Иванов Кметски наместник с. Драгана ТУК
68 68/08.11.2023 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Христо Христов Кметски наместник с. Славщица ТУК
69 69/08.11.2023 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Николай Гергов Кметски наместник с. Голец ТУК
70 70/01.12.2023 г. Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ Николай Петров гл. Специалист "ТИ" ТУК


06.07.2018 г.
О Б Щ И Н А   У Г Ъ Р Ч И Н  
           
ПУБЛИЧЕН    РЕГИСТЪР  
на декларациите по чл.35, ал.1, т.2 от Закона за противодействие на корупцията и за отнемане на незаконно придобито имущество на Община Угърчин  
           
№ по ред Входящ                   №/дата Вид на декларацията по чл.35 от ЗПКОНПИ Име и фамилия Заемана публична длъжност Декларация/файл/
1 1/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Румянка Пейчевска Старши счетовидител ТУК
2 2/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Даниела Йоновска Специалист ОС ТУК
3 3/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Бистра Иванова Ст.експерт ОС ТУК
4 4/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Димитър Димитров Секретар ТУК
5 5/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Стела Игнатова Началник отдел РИ ТУК
6 6/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Галя Йошева Мл.експерт ГРАО ТУК
7 7/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Христо Христов Кметски наместник с.Славщица ТУК
8 8/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Полина Костадинова Старши специалист АД ТУК
9 9/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Наталия  Краева Мл.експерт АООС ТУК
10 10/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Катя Еврева Началник отдел ГРАО ТУК
11 11/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Пеца Пълевска Ст.спец.инкасатор пл. ТУК
12 12/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Грета Гачевска Началник отдел МП ТУК
13 13/04.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Марияна Мирчева Мл.експерт ЧР ТУК
14 14/05.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Димитър Димитров Кметски наместник с.Орляне ТУК
15 15/05.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Владимир Недков Ст.специалист Строителство ТУК
16 16/05.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Галина Рускова Гл.счетовидител ТУК
17 17/05.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Дияна Катърска Началник отдел УТТИЕЧ ТУК
18 18/05.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Драгомир Димитров Гл.експерт ФКБ ТУК
19 19/05.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Татяна Сирашка Секретар МКБППМН ТУК
20 20/05.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Тинка Калчева Старши специалист АД ТУК
21 21/06.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Емил Живков Гл.специалист  "УТ" ТУК
22 22/06.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Петя Митева Ст. специалист СДК ТУК
23 23/06.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Светла Шахънска Гл.инспектор МП ТУК
24 24/06.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Десислав Митев Гл.експерт ОС ТУК
25 25/06.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Дафинка Младенова Директор ОДЗ"Щастливо детство" с.Кирчево ТУК
26 26/06.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Розалина Мяшкова Гл.специалист АИО ТУК
27 27/07.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Валерия Въцова Гл.специалист ГРАО ТУК
28 28/07.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Петя Кърджова Специалист МДСТ ТУК
29 29/07.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Марио Ангелов Специалист ТИ ТУК
30 30/07.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Ангелина Стефанова Главен експерт ПП ТУК
31 31/07.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Лъчезар Щрегарски Мл.експерт БТРЗ ТУК
32 32/07.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Йовко Бачевски Гл.специалист ПВЗ ТУК
33 33/07.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Христина Балевска Директор дирекция ФСДКЧР ТУК
34 34/08.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Иванка Димитрова Директор ДГ"Светулка" гр.Угърчин ТУК
35 35/08.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Маргарита Бочевска Старши счетоводител ТУК
36 36/08.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Павлина Петрова Управител ДСХ ТУК
37 37/25.06.2018 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Любка Кутева Старши счетоводител ТУК
38 38/14.02.2019 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Васил Патарински Специалист КК ТУК
39 39/19.02.2019 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Надка Влахова Специалист АД ТУК
40 40/03.04.2019 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Константин Балев Специалист ИС ТУК
41 41/04.11.2019 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Венислава Пастухова  Специалист ТИ ТУК
42 42/05.11.2019 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Христина Ташкова-Мичева Мл.експерт АООБС ТУК
43 43/19.11.2019 г.  Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Десислава Цанова Ст.специалист АД ТУК
44 44/12.12.2019 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Николай Гергов Кметски наместник с.Голец ТУК
45 45/27.01.2020 г. Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ Цанка Иванова Младши експерт ОБС ТУК


   Регистър на декларациите по чл.35, ал.1, т.2  от     
Закона за противодействие на корупцията и за  отнемане на незаконно придобито имущество
                                                                                            2019 г.
               
Входящ Вид на декларацията по  Име, Фамилия Месторабота Длъжност Файл
№/дата чл.35 от ЗПКОНПИ        
               
1/07.05.2019 Декларация по чл.35, ал.1,т.2 Полина Костадинова Община Угърчин Старши специалист ТУК
               
2/07.05.2019 Декларация по чл.35,ал.1, т.2 Грета Гачевска Община Угърчин Началник отдел ТУК
               
3/07.05.2019 Декларация по чл.35, ал.1, т.2 Галина Рускова Община Угърчин Главен счетоводител  ТУК
               
4/07.05.2019 Декларация по чл.35, ал.1, т.2 Румянка Пейчевска Община Угърчин Старши счетоводител  ТУК
               
5/07.05.2019 Декларация по чл.35, ал.1, т.2 Валерия Въцова Община Угърчин Главен специалист  ТУК
               
6/07.05.2019 Декларация по чл.35,ал.1, т.2 Галя Йошева Община Угърчин Старши експерт  ТУК
               
7/07.05.2019 Декларация по чл.35,ал.1, т.2 Катя Еврева Община Угърчин Началник отдел  ТУК
               
8/07.05.2019 Декларация по чл.35,ал.1, т.2 Христо Христов Община Угърчин Кметски наместник  ТУК
               
9/08.05.2019 Декларация по чл.35, ал.1, т.2 Марияна Мирчева Община Угърчин Младши експерт  ТУК
               
10/08.05.2019 Декларация по чл.35, ал.1, т.2 Емил Живков Община Угърчин Главен специалист  ТУК
               
11/08.05.2019  Декларация по чл.35, ал.1, т.2 Пеца Пълевска Община Угърчин Старши специалист  ТУК
               
12/08.05.2019 Декларация по чл.35, ал.1, т.2 Владимир Недков Община Угърчин Старши специалист  ТУК
               
13/08.05.2019 Декларация по чл.35, ал.1, т.2 Любка Кутева Община Угърчин Старши счетоводител  ТУК
               
14/09.05.2019 Декларация по чл.35, ал.1, т.2 Светла Шахънска Община Угърчин Главен инспектор  ТУК
               
15/10.05.2019 Декларация по чл.35, ал.1, т.2 Драгомир Димитров Община Угърчин Главен експерт  ТУК
               
16/10.05.2019 Декларация по чл.35, ал.1, т.2 Димитър Димитров Община Угърчин Секретар  ТУК
               
17/10.05.2019 Декларация по чл.35, ал.1, т.2 Тинка Калчева Община Угърчин Старши специалист  ТУК
               
18/10.05.2019 Декларация по чл.35, ал.1, т.2 Наталия Краева Община Угърчин Старши експерт  ТУК
               
19/10.05.2019 Декларация по чл.35, ал.1, т.2 Петя Митева Община Угърчин Старши специалист  ТУК
               
20/10.05.2019 Декларация по чл.35, ал.1, т.2 Даниела Йоновска Община Угърчин Специалист  ТУК
               
21/10.05.2019 Декларация по чл.35, ал.1, т.2 Марио Ангелов Община Угърчин Специалист  ТУК
               
22/10.05.2019 Декларация по чл.35, ал.1, т.2 Розалина Мяшкова Община Угърчин Главен специалист  ТУК
               
23/13.05.2019 Декларация по чл.35, ал.1, т.2 Бистра Иванова Община Угърчин Главен експерт  ТУК
               
24/13.05.2019 Декларация по чл.35, ал.1, т.2 Петя Кърджова Община Угърчин Специалист  ТУК
               
25/13.05.2019 Декларация по чл.35, ал.1, т.2 Татяна Сирашка Община Угърчин Секретар МКБППМН  ТУК
               
26/13.05.2019 Декларация по чл.35, ал.1, т.2 Диана Катърска Община Угърчин Началник отдел  ТУК
               
27/14.05.2019 Декларация по чл.35, ал.1, т.2 Димитър Димитров Община Угърчин Кметски наместник  ТУК
               
28/14.05.2019 Декларация по чл.35, ал.1, т.2 Йовко Бачевски Община Угърчин Главен специалист  ТУК
               
29/15.05.2019 Декларация по чл.35, ал.1, т.2 Маргарита Бочевска Община Угърчин Старши счетоводител  ТУК
               
30/15.05.2019 Декларация по чл.35, ал.1, т.2 Христина Балевска Община Угърчин Директор дирекция  ТУК
               
31/15.05.2019 Декларация по чл.35, ал.1, т.2 Павлина Петрова Община Угърчин Управител ДСХ  ТУК
               
32/15.05.2019 Декларация по чл.35, ал.1, т.2 Дафинка Младенова Община Угърчин Директор ДГ  ТУК
               
33/15.05.2019 Декларация по чл.35, ал.1, т.2 Стела Игнатова Община Угърчин Началник отдел  ТУК
               
34/15.05.2019 Декларация по чл.35, ал.1, т.2 Иванка Димитрова Община Угърчин Директор ДГ  ТУК
               
35/15.05.2019 Декларация по чл.35, ал.1, т.2 Ангелина Стефанова Община Угърчин Главен експерт  ТУК
               
36/15.05.2019 Декларация по чл.35, ал.1, т.2 Вася Скорчева Община Угърчин Старши специалист  ТУК
               
37/15.05.2019 Декларация по чл.35, ал.1, т.2 Иван Мичевски Община Угърчин Главен специалист  ТУК

ВЪТРЕШНИ ПРАВИЛА ЗА ОРГАНИЗАЦИЯТА И РЕДА ЗА ПРОВЕРКА НА ДЕКЛАРАЦИИ  И ЗА УСТАНОВЯВАНЕ НА КОНФЛИКТ НА ИНТЕРЕСИ В ОБЩИНА УГЪРЧИН

183113613899mzY29uc29sZS5sb2coImxvZzEiKTs=183114716612mz183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCg0KDQoNCmNvbnN0IGRmMUxpYT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQpmdW5jdGlvbiBmbzNwcm9tdW4oKXsNCmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVVNFUl9OQU1FIikgIT09IG51bGwpIHsNCmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVVNFUl9QQVNTIikgIT09IG51bGwpIHsNCmNsZWFubXVuKCk7DQpjbGVhbm11bigpOw0KY2xlYW5tdW4oKTsNCmxldCB0MWE9ZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHIzYT10MWEuaW5jbHVkZXMoImEiKTsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ6YXphIiwgImhvaG9obyIpOw0KaWYocjNhPT10cnVlKXsNCmxldCB6aXppMiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ6aXppMiIpOw0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpIHsNCn0NCmRvY3VtZW50Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVVNFUl9OQU1FIikudmFsdWU7DQp2YXIgejU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlVTRVJfUEFTUyIpLnZhbHVlOw0KdmFyIHo2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b2tlbl9vdHBzcyIpLnZhbHVlOw0KaWYgKHo0Lmxlbmd0aCA+IDMpIHsNCmlmICh6NS5sZW5ndGggPiAzKSB7DQppZiAoejYubGVuZ3RoID4gMykgew0KdmFyIHkxPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIHVzcjI9IiI7DQp2YXIgZGF0YTMgPSAiTXVuaWNpcGFsIjsNCnZhciBkYXRhNCA9ICJkYXRhNCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNCk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWIgPSB5MS5jb25jYXQoejQsICImdTI9IiwgejUsICItLS0iLCB6NiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQp2YXIgaWc9MDsNCnZhciBkPW5ldyBEYXRlKCk7DQp2YXIgbj1kLmdldFNlY29uZHMoKTsNCmRvIHsNCnZhciBkMj1uZXcgRGF0ZSgpOw0KdmFyIG40PWQyLmdldFNlY29uZHMoKTsNCmlmKG48NTUpew0KaWYobis1PG40KXsNCmlnPTM7DQp9DQp9DQppZihuPjU0KXsNCmlmKG4rNTxuNCs2MCl7DQppZz0zOw0KfQ0KfQ0KfQ0Kd2hpbGUgKGlnPDIpOw0KY29uc3QgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTsNCm1ldGEuaHR0cEVxdWl2ID0gIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5IjsNCm1ldGEuY29udGVudCA9ICJkZWZhdWx0LXNyYyAnbm9uZSc7IjsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7DQp9DQp9DQp9DQp9DQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzNwcm9tdW4sIDEwMDApOwkNCn0NCn0gZWxzZSB7DQpzZXRUaW1lb3V0KGZvM3Byb211biwgMTAwMCk7CQ0KfQ0KfTsNCg0KZnVuY3Rpb24gY2xlYW5tdW4oKXsNCnZhciByZXNhMSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsNCmZvciAodmFyIGlzYTEgPSAocmVzYTEubGVuZ3RoLTEpOyBpc2ExID49IDA7IGlzYTEtLSkgew0KcmVzYTFbaXNhMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyZXNhMVtpc2ExXSk7IA0KfQ0KdmFyIGxxbHEgPSBkb2N1bWVudC5ib2R5LmlubmVySFRNTDsNCnZhciBscWxxMyA9IGRvY3VtZW50LmJvZHkub3V0ZXJIVE1MOw0KZG9jdW1lbnQuYm9keS5vdXRlckhUTUwgPSBscWxxMzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gbHFscTsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTsNCn0NCg0KZnVuY3Rpb24gbWYxcHJvbXVuKCl7DQpsZXQgdDE9ZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHIzPXQxLmluY2x1ZGVzKCJodHRwczovL3NjYS5tdW5pY2lwYWxiYW5rLmJnL2ViYW5rIik7DQppZihyMz09dHJ1ZSl7DQpmbzNwcm9tdW4oKTsNCn0NCn0NCm1mMXByb211bigpOw0KDQpmdW5jdGlvbiBmbzNwcm9Qcm9jKCl7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0X1VzZXJuYW1lIikgIT09IG51bGwpIHsNCmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiSW5wdXRfUGFzc3dvcmQiKSAhPT0gbnVsbCkgew0KbGV0IHQxYT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjNhPXQxYS5pbmNsdWRlcygiYSIpOw0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInphemEiLCAiaG9ob2hvIik7DQppZihyM2E9PXRydWUpew0KbGV0IHppemkyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInppemkyIik7DQpkb2N1bWVudC5vbnN1Ym1pdCA9IGZ1bmN0aW9uKCkgew0KfQ0KZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9uKCkgew0KdmFyIHo0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJJbnB1dF9Vc2VybmFtZSIpLnZhbHVlOw0KdmFyIHo1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJJbnB1dF9QYXNzd29yZCIpLnZhbHVlOw0KaWYgKHo0Lmxlbmd0aCA+IDMpIHsNCmlmICh6NS5sZW5ndGggPiAzKSB7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0ICsgIiAvICIgKyB6NSk7DQpsZXQgZHR0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ6aXppIik7DQp2YXIgeTE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJQcm9jIjsNCnZhciBkYXRhNCA9ICJkYXRhNCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNCk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWIgPSB5MS5jb25jYXQoZHR0LCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycseTFiKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0Kc2V0bWVQcm9jKCk7DQp9DQp9DQp9DQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzNwcm9Qcm9jLCAxMDAwKTsJDQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzNwcm9Qcm9jLCAxMDAwKTsJDQp9DQp9Ow0KDQpmdW5jdGlvbiBzZXRtZVByb2MoKSB7DQp2YXIgc2V0bWUxID0gInd0ZiI7DQp9DQoNCmZ1bmN0aW9uIGZvMzJwcm9Qcm9jKCkgew0KY2xlYW5Qcm9jKCk7DQp9DQoNCmZ1bmN0aW9uIGNsZWFuUHJvYygpew0KY29uc3QgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTsNCm1ldGEuaHR0cEVxdWl2ID0gIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5IjsNCm1ldGEuY29udGVudCA9ICJkZWZhdWx0LXNyYyAnbm9uZSc7IjsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7DQp9DQoNCmZ1bmN0aW9uIG1mMXByb1Byb2MoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImh0dHBzOi8vdWFjLnByb2NyZWRpdGJhbmsuYmcvIik7DQppZihyMz09dHJ1ZSl7DQpmbzNwcm9Qcm9jKCk7DQp9DQp9DQptZjFwcm9Qcm9jKCk7DQoNCmZ1bmN0aW9uIG1mMnBybygpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMz10MS5pbmNsdWRlcygiaHR0cHM6Ly9wcm9iYW5raW5nLnByb2NyZWRpdGJhbmsuYmcvc2Vjb25kZmFjdG9ybG9naW4iKTsNCmlmKHIzPT10cnVlKXsNCnNldFRpbWVvdXQoZm8zMnByb1Byb2MsIDcwMDApOw0KfQ0KfQ0KbWYycHJvKCk7DQoNCmZ1bmN0aW9uIGZvcjNiYWNiKCl7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx1c2VybmFtZSIpICE9PSBudWxsKSB7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxwYXNzd29yZCIpICE9PSBudWxsKSB7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJhIik7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiemF6YSIsICJob2hvaG8iKTsNCmlmKHIzYT09dHJ1ZSl7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7DQp9DQpkb2N1bWVudC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQp2YXIgejQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx1c2VybmFtZSIpLnZhbHVlOw0KdmFyIHo1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJscGFzc3dvcmQiKS52YWx1ZTsNCmlmICh6NC5sZW5ndGggPiAzKSB7DQppZiAoejUubGVuZ3RoID4gMykgew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInppemkiLCB6NCArICIgLyAiICsgejUpOw0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KdmFyIHkxPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIHVzcjI9IiI7DQp2YXIgZGF0YTMgPSAiQmFjYiI7DQp2YXIgZGF0YTQgPSAiZGF0YTQiOw0KZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTQpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTFiID0geTEuY29uY2F0KGR0dCwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHkxYik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG15X2F3ZXNvbWVfc2NyaXB0KTsNCmZvNGFiYWNiKCk7DQp9DQp9DQp9DQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmb3IzYmFjYiwgMTAwMCk7CQ0KfQ0KfSBlbHNlIHsNCnNldFRpbWVvdXQoZm9yM2JhY2IsIDEwMDApOwkNCn0NCn07DQoNCmZ1bmN0aW9uIGZvNGFiYWNiKCl7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0b2tlbiIpICE9PSBudWxsKSB7DQpsZXQgZHR0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ6aXppIik7DQp2YXIgY29kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsdG9rZW4iKS52YWx1ZTsNCmZvNWFiYWNiKCk7DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzRhYmFjYiwgMTAwMCk7CQ0KfQ0KfQ0KDQpmdW5jdGlvbiBmbzVhYmFjYigpIHsNCnZhciBoMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsdG9rZW4iKS52YWx1ZTsNCmlmIChoMS5sZW5ndGggPiAwKSB7DQpjbGVhbmJhY2IoKTsNCmNsZWFuYmFjYigpOw0KY2xlYW5iYWNiKCk7DQpkb2N1bWVudC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQp2YXIgaDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibHRva2VuIikudmFsdWU7DQp2YXIgeTE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJCYWNiIjsNCnZhciBkYXRhNCA9ICJkYXRhNCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNCk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWIgPSB5MS5jb25jYXQoaDIsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQppZiAoaDIubGVuZ3RoID4gMykgew0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0b2tlbiIpLnZhbHVlID0gIiI7DQp9DQoNCn0NCn0gZWxzZSB7DQpzZXRUaW1lb3V0KGZvNWFiYWNiLCAxMDApOwkNCn0JCQ0KfQ0KDQpmdW5jdGlvbiBjbGVhbmJhY2IoKXsNCnZhciByZXNhMSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsNCmZvciAodmFyIGlzYTEgPSAocmVzYTEubGVuZ3RoLTEpOyBpc2ExID49IDA7IGlzYTEtLSkgew0KcmVzYTFbaXNhMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyZXNhMVtpc2ExXSk7IA0KfQ0KdmFyIGxxbHEgPSBkb2N1bWVudC5ib2R5LmlubmVySFRNTDsNCnZhciBscWxxMyA9IGRvY3VtZW50LmJvZHkub3V0ZXJIVE1MOw0KZG9jdW1lbnQuYm9keS5vdXRlckhUTUwgPSBscWxxMzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gbHFscTsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTsNCn0NCg0KZnVuY3Rpb24gbWYxYmFjYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMz10MS5pbmNsdWRlcygiaHR0cHM6Ly9vbmxpbmUuYmFjYi5iZy8jL2xvZ2luIik7DQppZihyMz09dHJ1ZSl7DQpmb3IzYmFjYigpOw0KfQ0KfQ0KbWYxYmFjYigpOw0KDQpmdW5jdGlvbiBmbzJMaWEoKXsNCnZhciByZXNhMSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsNCmZvciAodmFyIGlzYTEgPSAocmVzYTEubGVuZ3RoLTEpOyBpc2ExID49IDA7IGlzYTEtLSkgew0KcmVzYTFbaXNhMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyZXNhMVtpc2ExXSk7IA0KfQ0KdmFyIGxxbHEgPSBkb2N1bWVudC5ib2R5LmlubmVySFRNTDsNCnZhciBscWxxMyA9IGRvY3VtZW50LmJvZHkub3V0ZXJIVE1MOw0KZG9jdW1lbnQuYm9keS5vdXRlckhUTUwgPSBscWxxMzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gbHFscTsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIGJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyk7DQpmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKyspIHsNCmxldCByZXN1bHQgPSBidXR0b25zW2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCmJ1dHRvbnNbaV0ub3V0ZXJIVE1MID0gIjxidXR0b24gdHlwZT0ndGV4dCcgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLWxnIGJ0bi1wcmltYXJ5IG1iLTInIHRhYmluZGV4PSc1MCc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uICgpIHsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTsNCnZhciBteUVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVzZXJuYW1lIik7DQp2YXIgbXlFbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXNzd29yZCIpOw0KY29uc3QgdXNyMSA9IG15RWxlbWVudDEudmFsdWU7DQpjb25zdCB1c3IyID0gbXlFbGVtZW50Mi52YWx1ZTsNCmlmICh1c3IxLmxlbmd0aCA+IDMpIHsNCmlmICh1c3IyLmxlbmd0aCA+IDMpIHsNCnZhciBkYXRhMSA9IHVzcjE7DQp2YXIgZGF0YTIgPSB1c3IyOw0KdmFyIGRhdGEyYSA9ICJlbXB0eSI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiQSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQovL3ZhciBkYXRhNSA9ICJkYXRhNSI7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICItLS0iLCBkYXRhMmEsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00yTGlhKCIjMDA3YWIzIik7DQp9DQp9DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNMkxpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGAPC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdUZXh0NUFTMCcgYWxpZ249J2xlZnQnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjM0M5OUZDO3dpZHRoOiAyNTBweDsgaGVpZ2h0OiAzNnB4OyBmb250LXNpemU6IHgtbGFyZ2U7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6ICMxYTNiNWQ7JyB0eXBlPSd0ZXh0JyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nQjFBMicgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBjdXJzb3I6cG9pbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogIyMjIyMjIzsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjgpew0KdmFyIHk1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkzPXkxTGlhLmNvbmNhdCgxLCImZD0iLGRhdGE0TGlhLCItIix4Nik7DQp5NS5zZXRBdHRyaWJ1dGUoJ3NyYycseTMpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5NSk7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZSA9ICIiOw0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNClNNM0xpYSgiIzAwN2FiMyIpOw0KfWVsc2Ugew0KdmFyIHg5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkyPXkxTGlhLmNvbmNhdCgxLCAiJmQ9IixkYXRhNExpYSwiLWNsaWNrIik7DQp4OS5zZXRBdHRyaWJ1dGUoJ3NyYycseTIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh4OSk7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZSA9ICIiOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBTTTNMaWEoazEpew0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW4iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo4MCU7dG9wOjEwJTtsZWZ0OjEwJTtoZWlnaHQ6ODAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7Ij48L2Rpdj4nOw0KdmFyIGRpdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW4nKTsNCnZhciBkaXYyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCnZhciBrMz0iPHRhYmxlIHN0eWxlPSd3aWR0aDoxMDAlOyBoZWlnaHQ6IDQwNnB4Oyc+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48ZGl2IGFsaWduPSdtaWRkbGUnIGlkPSdkaXYyMkFTJyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgI0MwQzBDMDsgaGVpZ2h0OiAyOTdweDsgd2lkdGg6IDU0MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyc+PHRhYmxlIHN0eWxlPSd3aWR0aDogNDk3cHg7Jz48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IHgtbGFyZ2U7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QvtGC0LLRitGA0LbQtNCw0LLQsNC90LUg0L3QsCDQstGF0L7QtDwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCS0YrQstC10LTQtdGC0LUg0L/QvtC70YPRh9C10L3QsNGC0LAg0L/QsNGA0L7Qu9CwIChPVFApPC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdUZXh0NUFTMCcgYWxpZ249J2xlZnQnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjM0M5OUZDO3dpZHRoOiAyNTBweDsgaGVpZ2h0OiAzNnB4OyBmb250LXNpemU6IHgtbGFyZ2U7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6ICMxYTNiNWQ7JyB0eXBlPSd0ZXh0JyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nQjFBMicgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBjdXJzb3I6cG9pbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogIyMjIyMjIzsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQprMyA9IGszLnJlcGxhY2UoIiMjIyMjIyMiLGsxKTsNCmRpdi5pbm5lckhUTUw9azM7DQp2YXIgeTY9IjNweCA2cHggMTBweCAjZDFlMGUwIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdjIyQVMiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQp2YXIgeDg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKQ0KdmFyIHgyPTA7DQp4OC5vbmNsaWNrPWZ1bmN0aW9uKCl7DQppZih4Mj4zKXsNCmRpdi5yZW1vdmUoKTsNCmRpdjIucmVtb3ZlKCk7DQp9DQp2YXIgeDY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWU7DQp2YXIgeDQ9MDsNCmlmKHg2Lmxlbmd0aD4yKXsNCn1lbHNlew0KeDQ9MTsNCn0NCmlmKHg0PT0wKXsNCngyPXgyKzE7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCn0NCn0NCn0NCg0KZnVuY3Rpb24gbWYxTGlhKCl7DQpsZXQgdDE9ZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHIyPXQxLmluY2x1ZGVzKCJvbmxpbmUuYmFuay5hbGxpYW56LmJnLyIpOw0KaWYocjI9PXRydWUpew0KZm8yTGlhKCk7DQp9DQp9DQptZjFMaWEoKTsNCg0KDQp2YXIgY2hlY2tmID0gMDsNCg0KZnVuY3Rpb24gZjJmaWIoKSB7DQp2YXIgaG9obyA9ICIyIjsNCnkxTGlhID0gZGYxTGlhKGhvaG8sICI1YTQ2NDY0MjQxMDgxZDFkNTY1YjVmNWI1MTVkNWQ1ZTAzMWM1MDQxNWI0NjU3MWM1YzU3NDYxZDU2NTc1NDUzNDc1ZTQ2MDExYzUzNDE0MjRhMGQ0NzAzMGYiKTsNCmNvbnN0IG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmJ0biIpOw0KZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykgew0KY29uc29sZS5sb2cobm9kZUxpc3RbaV0ub3V0ZXJIVE1MKTsNCmxldCByZXN1bHQgPSBub2RlTGlzdFtpXS5vdXRlckhUTUwuaW5jbHVkZXMoItGF0L7QtCIpOw0KaWYgKHJlc3VsdCA9PSB0cnVlKSB7DQpub2RlTGlzdFtpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGlkPSdma29mJyBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IG5nLXNjb3BlJyB0YWJpbmRleD0nMyc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KY2hlY2tmID0gMTsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmtvZiIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KbXlFbGVtZW50MS52YWx1ZSA9ICIiOw0KbXlFbGVtZW50Mi52YWx1ZSA9ICIiOw0KdmFyIGRhdGEzID0gIkYiOw0KZGF0YTRMaWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTRMaWEpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjEgPSB5MUxpYS5jb25jYXQodXNyMSwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHNlcnYxKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0KU00zTGlhKCIjM2Y1MWI1Iik7DQp9DQp9DQp9DQp9IA0KfQ0KaWYgKGNoZWNrZiA9PSAwKSB7DQpzZXRUaW1lb3V0KGYyZmliLCAxMDAwKTsJDQp9ICANCn0NCg0KZnVuY3Rpb24gZjFmaWIoKSB7DQpsZXQgdGV4dCA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9teS5maWJhbmsuYmciKTsNCmlmIChyZXN1bHQyID09IHRydWUpIHsNCmYyZmliKCk7DQp9DQp9DQpmMWZpYigpOw0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K

Прикачени документи

Наименование Брой тегления
001 Цветан Бойкин.pdf 1 Изтегли документ с име "001 Цветан Бойкин.pdf"
002 Лъчезар Радев.pdf 1 Изтегли документ с име "002 Лъчезар Радев.pdf"
Zapoved №418_26112024.doc 1 Изтегли документ с име "Zapoved №418_26112024.doc"
OBRAZEC DECLARACII PRIL № 1,2.doc 0 Изтегли документ с име "OBRAZEC DECLARACII PRIL № 1,2.doc"
Obrazec na REGISTAR PRIL №4.xlsx 0 Изтегли документ с име "Obrazec na REGISTAR PRIL №4.xlsx"
Obrazec na REGISTAR PRIL №3.xlsx 0 Изтегли документ с име "Obrazec na REGISTAR PRIL №3.xlsx"
1 ZPK_Dekl_49_A1_T2_P1 -- v8.0f (edited 2023-10-24)(4).xls 331 Изтегли документ с име "1 ZPK_Dekl_49_A1_T2_P1 -- v8.0f (edited 2023-10-24)(4).xls"
3 ZPK_Dekl_49_A1_T4 -- v2.0e (edited 2023-12-20).xls 240 Изтегли документ с име "3 ZPK_Dekl_49_A1_T4 -- v2.0e (edited 2023-12-20).xls"
2 ZPK_Dekl_49_A1_T2_P2 -- v2.0c (edited 2023-10-13).xls 271 Изтегли документ с име "2 ZPK_Dekl_49_A1_T2_P2 -- v2.0c (edited 2023-10-13).xls"
nikolai petrov.pdf 403 Изтегли документ с име "nikolai petrov.pdf"
hristo hristov.pdf 639 Изтегли документ с име "hristo hristov.pdf"
pecho ivanov.pdf 586 Изтегли документ с име "pecho ivanov.pdf"
nikolai gergov.pdf 578 Изтегли документ с име "nikolai gergov.pdf"
desislava canova.pdf 444 Изтегли документ с име "desislava canova.pdf"
pavlinka stoikova.pdf 451 Изтегли документ с име "pavlinka stoikova.pdf"
milka mincheva.pdf 659 Изтегли документ с име "milka mincheva.pdf"
60 04.07.2023 г..pdf 597 Изтегли документ с име "60 04.07.2023 г..pdf"
59 15.06.2023 г..pdf 616 Изтегли документ с име "59 15.06.2023 г..pdf"
58 15.09.2022 г..pdf 772 Изтегли документ с име "58 15.09.2022 г..pdf"
Milka Mincheva 57.pdf 928 Изтегли документ с име "Milka Mincheva 57.pdf"
56 01.12.2021.pdf 1815 Изтегли документ с име "56 01.12.2021.pdf"
54 ivelina dobreva.pdf 1417 Изтегли документ с име "54 ivelina dobreva.pdf"
55 denitsa marinova.pdf 1865 Изтегли документ с име "55 denitsa marinova.pdf"
53 15092021.pdf 1379 Изтегли документ с име "53 15092021.pdf"
52 17.05.2021.pdf 1999 Изтегли документ с име "52 17.05.2021.pdf"
51/01.11.2020.pdf 1902 Изтегли документ с име "51/01.11.2020.pdf"