Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 15.08.2026 w Odpowiedzi

  1. Jakie znacie działające prywatne serwery shakes and fidget? pandorasf.net easy.megaplej.eu thelegacy-sf.5v.pl blaze-sf.7m.pl https://royalguilds.5v.pl/serwer/ https://s1.rothian.pl/ https://vgame.serv00.net/sf https://meios2x.smallhost.pl/ Te znam działają lepiej/gorzej ale od dawna działają. Na dzień edycji tematu każdy serwer sprawdzony.
    2 punkty
  2. No był jeden wzlot ale potem to już tylko został upadek xD
    1 punkt
  3. Mega serwer Polecam ! Świetna atmosfera, pomocni gracze i profesjonalna administracja!
    1 punkt
  4. Cześć, Podbijam, bardzo przyjemny serwis - częste aktualizacje, balans, nowości, eventy - a przede wszystkim dobra atmosfera.
    1 punkt
  5. No i minely 2 miesiace i jest jeszcze gorzej niz obstawialem. W lepszym stanie zamknieta zostala poprzednia edycja z ta roznica ze tym razem pozbyliscie sie jeszcze graczy long term ;D To teraz wnioski sa proste, jeszcze bardziej zjebac itemizacje, dowalic p2w i skrocic nie do 6 miesiecy tylko do 2 oficjalnie i fajrant 🤡
    1 punkt
  6. Witam serdecznie, parę osób prosiło o udostępnienie maszyny razem z danymi więc poniżej znajdziecie AKTYWNE linki plików serwerowych XenoxMt2 (prawdopodobnie 2013 rok) ponieważ poprzedni temat innego użytkownika już wygasł. Dane do Maszyny : L: root H: takiniesmialy Dane do Mysql: L: root H: niesmialy Pozostałe Komendy : 1. Uruchamianie w Putty : cd /usr/home/rw3 && sh start.sh Pozostałe Pliki : 1. Quest by terenzo OX od Vaxu: https://pastebin.com/hqn6iYBH 2. Quest Katakumby by Exterminatus od Vaxu : https://pastebin.com/eRt4C7x9 link do pobrania : https://mega.nz/file/1ANVRKhB#D6HFlX9s71lNX_LCc5cnuozAaPR8uvP8IAdRiTf_2q0 Skan : Waga pliku jest za duża. Szczególne podziękowania dla osoby która miała zachowaną kopie i się nią podzieliła @patryk12d PACZKA NIE ZAWIERA CLIENTA dlatego jeżeli ktoś ma to może wrzucić w komentarzu lub wysłać mi na priv a ja zaktualizuje temat. Aktualizacja Tematu ! Dzięki uprzejmości @patryk12d do tematu został dodane również : Klient: https://mega.nz/file/plw2nabL#QLJI_pJGHZG1xCllNxpuYahplQQ4FtpORhlAJrp5nAY A tutaj trzymajcie programik, żeby się nie crashował przy np. teleportacji itd. 4gb_patch.rar https://www.virustotal.com/gui/file/5c3908f3a565589f7a9c9f079370d24189ea2affdbd5209746891666c9788c78
    1 punkt
  7. Przed rozpoczęciem chciałbym zaznaczyć, że udostępnione przeze mnie pliki zostały stworzone z myślą o osobach początkujących. Wszystko zostało zautomatyzowane, aby maksymalnie uprościć ich pracę. Należy jednak pamiętać, że te pliki nie są gotowe do uruchomienia publicznego serwera, ale stanowią solidną bazę do dalszego rozwoju. Rozgrywka bazuje na Terenzo z 2013 roku, ale sam kod źródłowy jest lepszy niż w przypadku wielu niskiej jakości alternatyw, takich jak Pandora. Od dłuższego czasu w tych kwestiach nic się tu nie działo, a dostępne w Internecie informacje na temat Terenzo są przestarzałe i niewystarczające. Dlatego postanowiłem dzisiaj przedstawić inicjatywę kompleksowej aktualizacji na rok 2024. Visual studio 2022 Source Client - C++17 Server Source - C++20 Freebsd 13.2 (32 bit) Mysql56 Gcc10 Python 2.7 Granny2.11.8.0 W pełni sprawna wirtualna maszyna, która automatycznie wychwyci twoje połączenie internetowe. Uwaga Server Source znajduje się na Virtualbox w lokalizacji /src/Server Hasło do Połączenia SSH root 123 hasło plików .rar gamecoretop Hasła do postaci GM: test / test2 123 Hasło do Navicat: 123 Pełny Tutorial: Dodano nowy folder o nazwie Drop i Zmieniono standardowe pliki .txt / index na .cpp Dodano nowy sprawny system szarf na miarę 2024 roku Dodano nowy sprawny system wierzchowców na miarę 2024 roku Dodano nowy sprawny system nakładek na broń na miarę 2024 roku Usunięto zbędne funkcje i lekko wyczyszczono source. Przepisano funkcję na auto Dodano nowe Refreshe. Przetłumaczono cały drop aby uprościć rozpoznanie. Przetłumaczono nazwy map aby uprościć ludziom odnajdywanie się w plikach. - Naprawiono większość bugów - Niepotrzebujesz już libów do używania ./qc - Aby przeładować wszystkie questy użyj komendy /quest - Niepotrzebujesz już bawić się w dump_proto - Program znajdujący się w tej paczce wychwytuje wszystko automatycznie, jedynie co musisz to skonfigurować połączenie z Mysql w pliku .json - Zmieniono standardowe hasło oraz zabezpieczono włamanie na serwer. - Automatyczne wychwytywanie zmian w item_proto oraz mob_proto - Nie trzeba generować jak dawniej. - Można w łatwy sposób uruchomić nową postać: Likan - Posegregowano i usunięto zbędne mapy. - Klient został odchudzony ze zbędnych plików. - Naprawiono świecenie i inne efekty. - Pliki CONFIG - Automatycznie wychwytują twój adres ip maszyny z Virtualbox - EPack32 - który jest w klient automatycznie wychwytuje lokalizację plików, nie musisz już ustawiać lokalizacji folderu aby rozpakować i spakować dane pliki. Chciałbym poinformować że sam source jest przeznaczony dla osób którzy bawią się tą grą i chcą np. zagrać jak za dawnych czasów ze znajomymi, jednakże osoby które działają przy serwerach również mogą spróbować swoich sił aby je naprawić w całości. Download: PACZKA ZOSTAŁA ODCHUDZONA z 6/7GB do 2.10GB w tym wirtualna maszyna https://mega.nz/file/XaASlKpA#vzAkHcxbW1iae7SqEZNWd5Iq2U__KT-VUqgzqwAEkz4
    1 punkt
  8. Dziś przyszła w końcu pora ogarnąć trochę konta i uzupełnić klaser. S&F Scrapbook Helper Jest to prosty bot który pomoże nam przeszukać graczy którzy posiadają brakujące nam fragmenty do klasera. Autorem jest morgena, ta sama osoba która pracuje przy najnowszej nieoficjalnej wersji MFBota Pobierz wersja 0.2.9 https://github.com/the-marenga/sf-scrapbook-helper/releases/download/v0.2.9/sf-scrapbook-helper_v0.2.9_x86_64-pc-windows-gnu.zip A tutaj link do github gdzie warto zaglądać za najnowszą wersją https://github.com/the-marenga/sf-scrapbook-helper Miłego bocenia🫡
    1 punkt
  9. Klient: https://mega.nz/file/plw2nabL#QLJI_pJGHZG1xCllNxpuYahplQQ4FtpORhlAJrp5nAY A tutaj trzymajcie programik, żeby się nie crashował przy np. teleportacji itd. 4gb_patch.rar https://www.virustotal.com/gui/file/5c3908f3a565589f7a9c9f079370d24189ea2affdbd5209746891666c9788c78
    1 punkt
  10. pandorasf.cc Ten na pewno ma aplikację która działa bo tak grałem. Wydaje mi się że z tych co podałem jeszcze jeden miał swoją aplikację na android
    1 punkt
  11. rafaeru

    Xenobot pare skryptow

    Quiver (uzupełnia na bieżąco, ustaw id strzałek i nazwę bp z którego ma brać strzały) local items = {16142} Module.New("Quiver", function() local bp1 = Container(Item.GetID("fur backpack")) for spot, item in bp1:iItems() do if (table.contains(items, item.id)) then bp1:MoveItemToContainer(spot, Container.New(Item.GetID("quiver")):Index()) break end end wait(200, 500) end) Gold Token: local token = 22721 Module.New("GoldToken", function(module) if (Self.ItemCount(token) >= 1) then Self.UseItem(token) end module:Delay(3600 * 1000) end)
    1 punkt
  12. NoName#2

    Kod źródłowy gry Metin2

    Witajcie, wpadłem na pomysł, aby powstał temat zbiorczy związany z kodem źródłowym gry Metin2. W tym temacie będzie można nawzajem sobie pomagać z kompilacją lub drobnymi edycjami/zmianami kody, a nawet udostępniać jakieś ciekawostki/swoje przemyślenia. KOD ŹRÓDŁOWY: KOMPILACJA: DODATKI:
    1 punkt
  13. zgadzam sie a skrypt: local ArrowID = {15793} local ArrowBP = "Red Backpack" local Quiver = "Red Quiver" Module.New("Move Suppliees", function() local bp1 = Container(ArrowBP) for spot, item in bp1:iItems() do if (table.contains(ArrowID, item.id)) then bp1:MoveItemToContainer(spot, Container.New(Quiver):Index()) wait(700) break end end end)
    1 punkt
  14. wystarczy dodać: Self.UseItemFromEquipment("shield") do labela gdzie otwiera plecaki
    1 punkt
  15. dofile('[CONFIG] Forbidden Lands Hydras.lua') dofile('ssLib.lua') registerEventListener(WALKER_SELECTLABEL, "onLabel") print("FORBIDDEN LAND HYDRAS. CHECK OUT WWW.SOLID-SCRIPTS.COM FOR MORE SCRIPTS.") Targeting.Start() Looter.Start() function onLabel(label) if(label == "Backpacks") then Client.HideEquipment() repeat Self.CloseContainers() wait(200, 400) Self.OpenMainBackpack(true):OpenChildren({_stackBackpack, true}, {_rareBackpack, true}, {_goldBackpack, true}, {_suppliesBackpack, true}, {_ammoBackpack, true}) wait(200, 400) until SolidScripts.CheckBackpacks(6) elseif(label == "Stamina") then SolidScripts.CheckStamina(false) elseif(label == "BankNPC") then SolidScripts.WithdrawMoney() elseif(label == "PotionsNPC") then SolidScripts.BuyPotions(false) elseif(label == "AmmoNPC") then SolidScripts.BuyAmmo() elseif(label == "CheckSupplies") then SolidScripts.CheckSupplies() elseif(label == "Check") then SolidScripts.Check() elseif(label == "Deposit") then SolidScripts.ReachDepot() Self.DepositItems({3079, 0}, {3392, 0}, {3436, 0}, {3369, 0}, {3370, 0}, {4839, 0}, {3081, 0}, {3098, 0}) Self.DepositItems({10282, 1}, {3029, 1}, {3061, 1}) elseif(label == "Travel|Venore") then SolidScripts.Travel("Captain Sinbeard", {"hi", "venore", "yes"}, "Travel1") elseif(label == "Travel|Ankrahmun") then SolidScripts.Travel("Captain Fearless", {"hi", "ankrahmun", "yes"}, "Travel2") elseif(label == "Travel|Lands") then SolidScripts.Travel("The Blind Prophet", {"hi", "transport", "yes"}, "Travel3") elseif(label == "RepairSofts") then SolidScripts.RepairSofts() elseif(label == "Rope1") then SolidScripts.UseRope(32939, 32477) elseif(label == "Rope2") then SolidScripts.UseRope(32960, 32478) elseif(label == "Rope3") then SolidScripts.UseRope(32988, 32523) elseif(label == "CheckSofts") then SolidScripts.CheckSofts() elseif(label == "tel1") then SolidScripts.Teleport(EAST, "b4tel1") elseif(label == "targetON") then Cavebot.Stop() Self.StopAttack() wait(200,500) loadSettings("[200+ RP] Forbidden Lands Hydras", "Targeting") wait(200,500) Cavebot.Start() elseif(label == "targetOFF") then Cavebot.Stop() Self.StopAttack() wait(200,500) loadSettings("[200+ RP] Forbidden Lands Hydras extra", "Targeting") wait(200,500) Cavebot.Start() elseif(label == "targetON2") then Cavebot.Stop() Self.StopAttack() wait(200,500) loadSettings("[200+ RP] Forbidden Lands Hydras", "Targeting") wait(200,500) Cavebot.Start() elseif(label == "targetOFF2") then Cavebot.Stop() Self.StopAttack() wait(200,500) loadSettings("[200+ RP] Forbidden Lands Hydras extra", "Targeting") wait(200,500) Cavebot.Start() end end if(_dropVials) then Module.Start('vial-dropper') end if(_refillMana) then Module.Start('mana-refiller') end if(_useRecoverySpell) then Module.Start('recovery-caster') end if(_useSoftBoots) then Module.Start('equip-softs') end if(_dropGold) then Module.Start('drop-gold') end if(_screenLevel) then Module.Start('screen-shooter') end Module.Start('sort-supplies') i plik config -- [[ www.Solid-Scripts.com ]] -- [[ SETTINGS ]] _mainBackpack = 'Backpack' -- name of main backpack _stackBackpack = 'Blue Backpack' -- name of backpack for stackable items _rareBackpack = 'Green Backpack' --name of backpack for non-stackable items _goldBackpack = 'Golden Backpack' -- name of backpack for gold _suppliesBackpack = 'Jewelled Backpack' -- name of backpack for potions _ammoBackpack = 'Camouflage Backpack' -- name of backpack for ammunition _useManaPotions = true -- buy mana potions _manaPotions = 'strong mana potion' -- name or id _manaMaximum = 600 -- how many mana potions to buy _manaMinimum = 100 -- how many potions to leave the spawn _useHealthPotions = true -- buy health potions _healthPotions = 'great spirit potion' -- name or id _healthMinimum = 15 -- how many health potions to buy _healthMaximum = 40 -- how many potions to leave the spawn _useAmmunition = true -- buy ammunition _ammo = 'crystalline arrow' -- name or id _ammoMaximum = 1700 -- how many ammunition to buy _ammoMinimum = 300 -- how many ammunition to leave the spawn _withdrawAmmo = false -- from 3rd backpack in depot _useRecoverySpell = false _recoverySpell = "utura gran" _useSoftBoots = false -- use softboots _normalBoots = 3079 -- id of 'normal' boots to equip while not using soft bo _refillMana = false -- refill mana to almost full when no monsters on screen _dropVials = false -- drop empty vials on the floor when cap is below 200 _dropGold = false -- drop gold coins if below 100 cap _minimumCap = 100 -- minimum cap to leave spawn _logoutStamina = 16 -- how many hours of stamina to logout [0 to disable] _screenLevel = true -- [[ END OF SETTINGS ]] Dodam że robi wszystko jak powinien labele są usatwione jak w poprzednim walkerze a target on/of nie jest używany w walkerze i settings <panel name="Spell Shooter"> <control name="shooterList"> <item spell="utito tempo san" rune="3155" srange="3" type="4" reason="2" minhp="0" maxhp="100" mana="10" count="1" creature="monster names" danger="0" targ="1" enabled="0"/> <item spell="exori san" rune="3155" srange="7" type="0" reason="2" minhp="0" maxhp="100" mana="10" count="1" creature="MONSTERNAME" danger="2" targ="0" enabled="1"/> <item spell="exori gran con" rune="3155" srange="7" type="0" reason="2" minhp="0" maxhp="100" mana="10" count="1" creature="monster names" danger="0" targ="1" enabled="1"/> </control> </panel> <panel name="Dynamic Lure"> <control name="LureList"> </control> <control name="AttackWhileLuring" value="1"/> </panel> <panel name="Self Healer"> <control name="SpellList"> <item spell="exura gran san" mana="210" vcomp="0" vsign="1" vrandom="0" vvalue="50" enabled="1"/> <item spell="exura san" mana="160" vcomp="0" vsign="1" vrandom="0" vvalue="80" enabled="1"/> <item spell="exura" mana="20" vcomp="0" vsign="1" vrandom="0" vvalue="90" enabled="1"/> </control> <control name="ItemList"> <item id="7642" vcomp="0" vsign="1" vrandom="0" vvalue="50" enabled="1"/> <item id="237" vcomp="0" vsign="3" vrandom="0" vvalue="80" enabled="1"/> </control> </panel> <panel name="Support"> <control name="HiHealSpell" value="Exura"/> <control name="HiHealHealth" value="90"/> <control name="HiHealRange" value="5"/> <control name="HiHealMana" value="20"/> <control name="HiHealEnable" value="0"/> <control name="LoHealSpell" value="Exura Gran"/> <control name="LoHealHealth" value="55"/> <control name="LoHealPerc" value="5"/> <control name="LoHealMana" value="70"/> <control name="LoHealEnable" value="0"/> <control name="PotHealID" value="266"/> <control name="PotHealHealth" value="50"/> <control name="PotHealRange" value="5"/> <control name="PotHealEnable" value="0"/> <control name="ManaRestoreID" value="268"/> <control name="ManaRestoreMana" value="50"/> <control name="ManaRestoreEnable" value="0"/> </panel> <panel name="Frag Helper"> <control name="HoldTarg" value="0"/> <control name="ComboEnable" value="0"/> </panel> <panel name="Tools"> <control name="EnableAntiIdle" value="0"/> <control name="EnableEatFood" value="1"/> <control name="EnableReconnect" value="1"/> <control name="LightEnable" value="0"/> <control name="XRayEnable" value="0"/> <control name="ShowLookIDs" value="0"/> <control name="ShowManaBar" value="0"/> <control name="ShowBPInfo" value="0"/> <control name="EnableAdvancedInfo" value="0"/> </panel> <panel name="Visuals"> <control name="LightEnable" value="0"/> <control name="XRayEnable" value="0"/> <control name="ShowLookIDs" value="0"/> <control name="ShowManaBar" value="0"/> <control name="ShowBPInfo" value="1"/> <control name="EnableSmallBPs" value="0"/> <control name="EnableAdvancedInfo" value="0"/> <control name="ShowCleanWalls" value="0"/> <control name="ShowDiagnostics" value="0"/> </panel> <panel name="Get Scripts"> </panel> <panel name="Combo Options"> <control name="ComboSayLeader" value=""/> <control name="ComboSayPhrase" value=""/> <control name="ComboSayEnable" value="0"/> <control name="ComboShotLeader" value=""/> <control name="ComboShotType" value="0"/> <control name="ComboShotEnable" value="0"/> <control name="ComboExivaLeader" value=""/> <control name="ComboExivaEnable" value="0"/> <control name="ComboParaWatch" value="0"/> <control name="ComboParaEnable" value="0"/> <control name="ComboPartyWatch" value="0"/> <control name="ComboPartyEnable" value="0"/> <control name="ComboAttackSpell" value="Exevo Gran Mas Frigo"/> <control name="ComboAttackSpellEnable" value="0"/> <control name="ComboAttackRuneID" value="3155"/> <control name="ComboAttackRuneEnable" value="0"/> <control name="ComboFocusType" value="0"/> </panel> <panel name="HUD"> <control name="HUDItemList"> <item textColor="9" x="5" y="5" pos="4" checked="1"/> <item textColor="8" x="5" y="5" pos="6" checked="0"/> <item textColor="7" x="5" y="5" pos="0" checked="1"/> <item textColor="6" x="5" y="5" pos="8" checked="0"/> <item textColor="4" x="5" y="5" pos="10" checked="0"/> <item textColor="13" x="5" y="5" pos="0" checked="1"/> <item textColor="13" x="5" y="5" pos="2" checked="1"/> <item textColor="0" x="0" y="0" pos="0" checked="0"/> </control> <control name="HPPercOnClick" value="0"/> <control name="MPPercOnClick" value="0"/> <control name="MPPercClickEnable" value="0"/> <control name="MPPercClickEnable" value="0"/> </panel> <panel name="Recent Loot"> <control name="LootMonsterList"> </control> <control name="DisplaySelectLoot" value="0"/> <control name="HideNothingLoot" value="0"/> </panel> <panel name="Spell Timers"> <control name="HUDSpellTimersList"> <item textColor="9" x="5" y="5" pos="4" checked="1"/> <item textColor="8" x="5" y="5" pos="6" checked="1"/> <item textColor="7" x="5" y="5" pos="0" checked="1"/> <item textColor="6" x="5" y="5" pos="8" checked="1"/> <item textColor="4" x="5" y="5" pos="10" checked="1"/> <item textColor="13" x="5" y="5" pos="0" checked="1"/> <item textColor="13" x="5" y="5" pos="2" checked="1"/> </control> </panel> <panel name="Kill Counters"> <control name="KillCounterBox"> </control> <control name="DisplaySelectCounters" value="0"/> <control name="DisplayCountRatios" value="0"/> </panel> <panel name="Battle Information"> <control name="ShowTakenDamage" value="1"/> <control name="ShowTakenAvgDamage" value="1"/> <control name="ShowTakenBurstDamage" value="1"/> <control name="ShowDealtDamage" value="1"/> <control name="ShowTarget" value="1"/> <control name="ShowFollow" value="1"/> <control name="ShowExiva" value="1"/> </panel> <panel name="Experience Information"> <control name="ShowHourlyExp" value="1"/> <control name="ShowExpTogo" value="1"/> <control name="ShowTimeLeft" value="1"/> </panel> <panel name="Condition Manager"> <control name="PoisonCureLimit" value="6"/> <control name="PoisonCureMana" value="20"/> <control name="PoisonCureEnable" value="0"/> <control name="DeathCureLimit" value="10"/> <control name="DeathCureMana" value="40"/> <control name="DeathCureEnable" value="0"/> <control name="PhysicalCureLimit" value="5"/> <control name="PhysicalCureMana" value="30"/> <control name="PhysicalCureEnable" value="0"/> <control name="FireCureLimit" value="20"/> <control name="FireCureMana" value="30"/> <control name="FireCureEnable" value="0"/> <control name="EnergyCureLimit" value="15"/> <control name="EnergyCureMana" value="30"/> <control name="EnergyCureEnable" value="0"/> <control name="ParaCureEnable" value="1"/> <control name="ParaCureMana" value="20"/> <control name="ParaCureSpell" value="Exura"/> <control name="HasteCastMana" value="50"/> <control name="HasteCastSpell" value="Utani Hur"/> <control name="HasteCastEnable" value="1"/> <control name="InvisibleCastMana" value="50"/> <control name="InvisibleCastEnable" value="0"/> <control name="ShieldCastMana" value="50"/> <control name="ShieldCastEnable" value="0"/> <control name="RecoveryCastEnable" value="0"/> <control name="RecoveryCastType" value="0"/> <control name="RecoveryCastMana" value="75"/> <control name="RecoveryCheckPzEnable" value="1"/> </panel> <panel name="Equipment Manager"> <control name="AmmoRefillID" value="15793"/> <control name="AmmoRefillEnable" value="1"/> <control name="WeaponRefillID" value="7368"/> <control name="WeaponRefillEnable" value="0"/> </panel> <panel name="Targeting"> <control name="TargetingList" antiks="0"> <item type="Grim Reaper" chs="3" max="100" min="0" prio="2" prox="7" count="1" elastic="0"/> <item type="Nightmare" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Nightmare Scion" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Tiger" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Carniphila" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Hyaena" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Tarantula" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Wasp" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Snake" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Scorpion" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Nomad" chs="0" max="100" min="0" prio="2" prox="7" count="1" elastic="0"/> <item type="Bug" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> <item type="Crocodile" chs="0" max="100" min="0" prio="10" prox="7" count="1" elastic="0"/> </control> </panel> <panel name="Walker"> <control name="WaypointList"> <item text="Start:" tag="255"/> <item text="Depo:" tag="255"/> <item text="Stand (32790, 31247, 7)" tag="1"/> <item text="Backpacks:" tag="255"/> <item text="Stamina:" tag="255"/> <item text="CheckSupplies:" tag="255"/> <item text="Resupply:" tag="255"/> <item text="Node (32795, 31248, 7)" tag="0"/> <item text="Stand (32801, 31235, 7)" tag="1"/> <item text="Node (32823, 31232, 7)" tag="0"/> <item text="Stand (32824, 31249, 7)" tag="1"/> <item text="BankNPC:" tag="255"/> <item text="Stand (32824, 31249, 7)" tag="1"/> <item text="Node (32831, 31234, 7)" tag="0"/> <item text="Node (32796, 31234, 7)" tag="0"/> <item text="Stand (32790, 31239, 7)" tag="1"/> <item text="Stand (32789, 31239, 6)" tag="1"/> <item text="CheckPotions:" tag="255"/> <item text="Stand (32790, 31238, 5)" tag="1"/> <item text="PotionsNPC:" tag="255"/> <item text="Stand (32790, 31239, 5)" tag="1"/> <item text="Stand (32789, 31239, 4)" tag="1"/> <item text="SkipResupply:" tag="255"/> <item text="CheckAmmo:" tag="255"/> <item text="Node (32790, 31237, 3)" tag="0"/> <item text="AmmoNPC:" tag="255"/> <item text="Stand (32789, 31237, 3)" tag="1"/> <item text="SkipBolts:" tag="255"/> <item text="Stand (32789, 31239, 3)" tag="1"/> <item text="Stand (32790, 31239, 4)" tag="1"/> <item text="Stand (32789, 31239, 5)" tag="1"/> <item text="Stand (32790, 31239, 6)" tag="1"/> <item text="Stand (32789, 31237, 7)" tag="1"/> <item text="CheckSupplies:" tag="255"/> <item text="SkipSupplies:" tag="255"/> <item text="ToHunt:" tag="255"/> <item text="Node (32789, 31231, 7)" tag="0"/> <item text="Node (32757, 31236, 7)" tag="0"/> <item text="Node (32747, 31212, 7)" tag="0"/> <item text="Node (32748, 31180, 7)" tag="0"/> <item text="Node (32762, 31163, 7)" tag="0"/> <item text="Stand (32781, 31151, 7)" tag="1"/> <item text="Stand (32781, 31150, 7)" tag="1"/> <item text="Stand (32781, 31148, 6)" tag="1"/> <item text="Stand (32776, 31145, 5)" tag="1"/> <item text="Use Lever(32775, 31145, 5)" tag="244"/> <item text="Stand (32776, 31139, 5)" tag="1"/> <item text="Stand (32776, 31137, 6)" tag="1"/> <item text="Node (32776, 31124, 7)" tag="0"/> <item text="Node (32776, 31104, 7)" tag="0"/> <item text="Stand (32787, 31101, 7)" tag="1"/> <item text="Stand (32789, 31099, 6)" tag="1"/> <item text="Node (32791, 31099, 7)" tag="0"/> <item text="Stand (32798, 31044, 7)" tag="1"/> <item text="Stand (32808, 31043, 8)" tag="1"/> <item text="Stand (32798, 31057, 8)" tag="1"/> <item text="Stand (32798, 31044, 7)" tag="1"/> <item text="Node (32800, 31046, 8)" tag="0"/> <item text="Stand (32808, 31043, 8)" tag="1"/> <item text="Node (32814, 31045, 9)" tag="0"/> <item text="Node (32821, 31056, 9)" tag="0"/> <item text="Node (32818, 31070, 9)" tag="0"/> <item text="Node (32813, 31048, 9)" tag="0"/> <item text="Node (32795, 31058, 9)" tag="0"/> <item text="Node (32799, 31071, 9)" tag="0"/> <item text="Stand (32808, 31043, 9)" tag="1"/> <item text="Stand (32798, 31044, 8)" tag="1"/> <item text="Stand (32798, 31030, 7)" tag="1"/> <item text="Node (32805, 31030, 8)" tag="0"/> <item text="Stand (32809, 31029, 8)" tag="1"/> <item text="Node (32823, 31021, 9)" tag="0"/> <item text="Node (32823, 31013, 9)" tag="0"/> <item text="Node (32811, 31013, 9)" tag="0"/> <item text="Node (32808, 31011, 9)" tag="0"/> <item text="Node (32808, 31010, 9)" tag="0"/> <item text="Node (32797, 30996, 9)" tag="0"/> <item text="Stand (32809, 31029, 9)" tag="1"/> <item text="Stand (32798, 31030, 8)" tag="1"/> <item text="Stand (32785, 31035, 7)" tag="1"/> <item text="Stand (32784, 31023, 8)" tag="1"/> <item text="Node (32769, 31016, 9)" tag="0"/> <item text="Node (32769, 30992, 9)" tag="0"/> <item text="Node (32746, 30990, 9)" tag="0"/> <item text="Node (32770, 31020, 9)" tag="0"/> <item text="Node (32787, 31029, 9)" tag="0"/> <item text="Node (32792, 31033, 9)" tag="0"/> <item text="Stand (32784, 31023, 9)" tag="1"/> <item text="Node (32785, 31029, 8)" tag="0"/> <item text="Stand (32785, 31035, 8)" tag="1"/> <item text="Stand (32784, 31049, 7)" tag="1"/> <item text="Node (32783, 31064, 8)" tag="0"/> <item text="Stand (32783, 31059, 8)" tag="1"/> <item text="Node (32779, 31050, 9)" tag="0"/> <item text="Node (32772, 31043, 9)" tag="0"/> <item text="Node (32764, 31044, 9)" tag="0"/> <item text="Node (32779, 31071, 9)" tag="0"/> <item text="Node (32766, 31067, 9)" tag="0"/> <item text="Stand (32783, 31059, 9)" tag="1"/> <item text="Stand (32784, 31049, 8)" tag="1"/> <item text="Node (32799, 31076, 7)" tag="0"/> <item text="Node (32791, 31092, 7)" tag="0"/> <item text="Check:" tag="255"/> <item text="Leave:" tag="255"/> <item text="Stand (32789, 31092, 7)" tag="1"/> <item text="Stand (32787, 31094, 6)" tag="1"/> <item text="Node (32776, 31101, 7)" tag="0"/> <item text="Stand (32776, 31136, 7)" tag="1"/> <item text="Stand (32776, 31137, 7)" tag="1"/> <item text="Stand (32776, 31139, 6)" tag="1"/> <item text="Stand (32776, 31141, 5)" tag="1"/> <item text="Use Lever(32775, 31141, 5)" tag="244"/> <item text="Stand (32778, 31148, 5)" tag="1"/> <item text="Stand (32778, 31150, 6)" tag="1"/> <item text="Stand (32778, 31152, 7)" tag="1"/> <item text="Node (32745, 31187, 7)" tag="0"/> <item text="Node (32764, 31245, 7)" tag="0"/> <item text="Node (32788, 31247, 7)" tag="0"/> <item text="Deposit:" tag="255"/> </control> </panel> <panel name="Walker Options"> <control name="ropeOption" value="4"/> <control name="shovelOption" value="0"/> </panel> <panel name="Looter"> <control name="LootList" mode="1" minimum="0" maximum="0" skinner="0" unlisted="0"> <item ID="3031" action="3" deposit="0"/> <item ID="3035" action="0" deposit="0"/> <item ID="6499" action="2" deposit="0"/> <item ID="6299" action="1" deposit="0"/> <item ID="9660" action="2" deposit="0"/> <item ID="823" action="1" deposit="0"/> <item ID="8061" action="1" deposit="0"/> <item ID="7418" action="1" deposit="0"/> </control> </panel> <panel name="Pathfinder"> <control name="walkOnFireEnable" value="1"/> <control name="walkOnFurnitureEnable" value="1"/> <control name="walkOnMaroonGround" value="0"/> <control name="pathThroughRangedCreatures" value="0"/> <control name="walkWithMapclicks" value="0"/> </panel> <panel name="Mount"> </panel> <panel name="Special Areas"> <control name="AreaList"> <item title="Special Area #1" consider="1" width="1" height="11" x="32957" y="32475" z="9"/> <item title="Special Area #2" consider="1" width="1" height="1" x="32960" y="32484" z="8"/> <item title="Special Area #3" consider="1" width="1" height="2" x="32948" y="32480" z="8"/> <item title="Special Area #4" consider="1" width="3" height="1" x="32962" y="32489" z="8"/> <item title="Special Area #5" consider="1" width="2" height="1" x="32956" y="32493" z="8"/> <item title="Special Area #6" consider="1" width="1" height="5" x="32927" y="32467" z="8"/> <item title="Special Area #7" consider="1" width="2" height="1" x="32914" y="32478" z="8"/> <item title="Special Area #8" consider="1" width="1" height="2" x="32929" y="32482" z="8"/> <item title="Special Area #9" consider="1" width="1" height="2" x="32929" y="32502" z="8"/> <item title="Special Area #10" consider="1" width="1" height="3" x="32911" y="32498" z="8"/> <item title="Special Area #11" consider="1" width="3" height="1" x="32921" y="32509" z="8"/> <item title="Special Area #12" consider="3" width="1" height="1" x="32941" y="32497" z="8"/> <item title="Special Area #13" consider="1" width="2" height="2" x="32947" y="32500" z="8"/> <item title="Special Area #14" consider="1" width="2" height="1" x="32937" y="32480" z="8"/> <item title="Special Area #15" consider="1" width="1" height="1" x="32988" y="32504" z="8"/> <item title="Special Area #16" consider="1" width="1" height="1" x="32989" y="32510" z="8"/> <item title="Special Area #17" consider="1" width="3" height="1" x="32987" y="32511" z="8"/> <item title="Special Area #18" consider="1" width="1" height="1" x="32969" y="32516" z="8"/> <item title="Special Area #19" consider="1" width="2" height="1" x="32968" y="32501" z="8"/> <item title="Special Area #20" consider="1" width="2" height="2" x="32975" y="32483" z="8"/> <item title="Special Area #21" consider="1" width="1" height="3" x="32955" y="32477" z="8"/> <item title="Special Area #22" consider="1" width="8" height="1" x="32921" y="32479" z="8"/> <item title="Special Area #23" consider="1" width="7" height="1" x="32921" y="32495" z="8"/> <item title="Special Area #24" consider="1" width="1" height="2" x="32934" y="32469" z="9"/> <item title="Special Area #25" consider="1" width="1" height="1" x="32933" y="32478" z="9"/> <item title="Special Area #26" consider="1" width="2" height="1" x="32961" y="32486" z="9"/> <item title="Special Area #27" consider="1" width="2" height="2" x="32964" y="32481" z="9"/> <item title="Special Area #28" consider="1" width="1" height="1" x="32958" y="32475" z="9"/> <item title="Special Area #29" consider="1" width="3" height="1" x="32950" y="32464" z="9"/> </control> </panel> <panel name="Alarms"> <control name="disAlarm" value="1"/> <control name="damAlarm" value="0"/> <control name="lhpAlarm" value="1"/> <control name="lhpAlarmPercent" value="30"/> <control name="pmAlarm" value="0"/> <control name="creatureAlarm" value="0"/> <control name="attackAlarm" value="0"/> <control name="attackAlarmYellow" value="1"/> <control name="playerAlarm" value="0"/> <control name="playerAlarmLog" value="0"/> <control name="stuckAlarm" value="0"/> <control name="burstAlarm" value="0"/> <control name="burstAlarmPercent" value="500"/> <control name="averageAlarm" value="0"/> <control name="averageAlarmPercent" value="200"/> <control name="alarmPartyIgnore" value="0"/> </panel> <panel name="Scripter"> <control name="RunningScriptList"> <script name="[200+ RP] Forbidden Lands Hydras.lua"><![CDATA[ZG9maWxlKCdbQ09ORklHXSBGb3JiaWRkZW4gTGFuZHMgSHlkcmFzLmx1YScpDQpkb2ZpbGUoJ3NzTGliLmx1YScpDQoNCnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcihXQUxLRVJfU0VMRUNUTEFCRUwsICJvbkxhYmVsIikNCnByaW50KCJGT1JCSURERU4gTEFORCBIWURSQVMuIENIRUNLIE9VVCBXV1cuU09MSUQtU0NSSVBUUy5DT00gRk9SIE1PUkUgU0NSSVBUUy4iKQ0KDQpUYXJnZXRpbmcuU3RhcnQoKQ0KTG9vdGVyLlN0YXJ0KCkNCg0KZnVuY3Rpb24gb25MYWJlbChsYWJlbCkNCglpZihsYWJlbCA9PSAiQmFja3BhY2tzIikgdGhlbg0KCQlDbGllbnQuSGlkZUVxdWlwbWVudCgpDQoJCXJlcGVhdA0KCQkJU2VsZi5DbG9zZUNvbnRhaW5lcnMoKQ0KCQkJd2FpdCgyMDAsIDQwMCkNCgkJCVNlbGYuT3Blbk1haW5CYWNrcGFjayh0cnVlKTpPcGVuQ2hpbGRyZW4oe19zdGFja0JhY2twYWNrLCB0cnVlfSwge19yYXJlQmFja3BhY2ssIHRydWV9LCB7X2dvbGRCYWNrcGFjaywgdHJ1ZX0sIHtfc3VwcGxpZXNCYWNrcGFjaywgdHJ1ZX0sIHtfYW1tb0JhY2twYWNrLCB0cnVlfSkNCgkJCXdhaXQoMjAwLCA0MDApDQoJCXVudGlsIFNvbGlkU2NyaXB0cy5DaGVja0JhY2twYWNrcyg2KQ0KCWVsc2VpZihsYWJlbCA9PSAiU3RhbWluYSIpIHRoZW4NCgkJU29saWRTY3JpcHRzLkNoZWNrU3RhbWluYShmYWxzZSkNCgllbHNlaWYobGFiZWwgPT0gIkJhbmtOUEMiKSB0aGVuDQoJCVNvbGlkU2NyaXB0cy5XaXRoZHJhd01vbmV5KCkNCgllbHNlaWYobGFiZWwgPT0gIlBvdGlvbnNOUEMiKSB0aGVuDQoJCVNvbGlkU2NyaXB0cy5CdXlQb3Rpb25zKGZhbHNlKQ0KCWVsc2VpZihsYWJlbCA9PSAiQW1tb05QQyIpIHRoZW4NCgkJU29saWRTY3JpcHRzLkJ1eUFtbW8oKQ0KCWVsc2VpZihsYWJlbCA9PSAiQ2hlY2tTdXBwbGllcyIpIHRoZW4NCgkJU29saWRTY3JpcHRzLkNoZWNrU3VwcGxpZXMoKQ0KCWVsc2VpZihsYWJlbCA9PSAiQ2hlY2siKSB0aGVuDQoJCVNvbGlkU2NyaXB0cy5DaGVjaygpDQoJZWxzZWlmKGxhYmVsID09ICJEZXBvc2l0IikgdGhlbg0KCQlTb2xpZFNjcmlwdHMuUmVhY2hEZXBvdCgpDQoJCVNlbGYuRGVwb3NpdEl0ZW1zKHszMDc5LCAwfSwgezMzOTIsIDB9LCB7MzQzNiwgMH0sIHszMzY5LCAwfSwgezMzNzAsIDB9LCB7NDgzOSwgMH0sIHszMDgxLCAwfSwgezMwOTgsIDB9KQ0KCQlTZWxmLkRlcG9zaXRJdGVtcyh7MTAyODIsIDF9LCB7MzAyOSwgMX0sIHszMDYxLCAxfSkNCgllbHNlaWYobGFiZWwgPT0gIlRyYXZlbHxWZW5vcmUiKSB0aGVuDQoJCVNvbGlkU2NyaXB0cy5UcmF2ZWwoIkNhcHRhaW4gU2luYmVhcmQiLCB7ImhpIiwgInZlbm9yZSIsICJ5ZXMifSwgIlRyYXZlbDEiKQ0KCWVsc2VpZihsYWJlbCA9PSAiVHJhdmVsfEFua3JhaG11biIpIHRoZW4NCgkJU29saWRTY3JpcHRzLlRyYXZlbCgiQ2FwdGFpbiBGZWFybGVzcyIsIHsiaGkiLCAiYW5rcmFobXVuIiwgInllcyJ9LCAiVHJhdmVsMiIpDQoJZWxzZWlmKGxhYmVsID09ICJUcmF2ZWx8TGFuZHMiKSB0aGVuDQoJCVNvbGlkU2NyaXB0cy5UcmF2ZWwoIlRoZSBCbGluZCBQcm9waGV0IiwgeyJoaSIsICJ0cmFuc3BvcnQiLCAieWVzIn0sICJUcmF2ZWwzIikNCgllbHNlaWYobGFiZWwgPT0gIlJlcGFpclNvZnRzIikgdGhlbg0KCQlTb2xpZFNjcmlwdHMuUmVwYWlyU29mdHMoKQ0KCWVsc2VpZihsYWJlbCA9PSAiUm9wZTEiKSB0aGVuDQoJCVNvbGlkU2NyaXB0cy5Vc2VSb3BlKDMyOTM5LCAzMjQ3NykNCgllbHNlaWYobGFiZWwgPT0gIlJvcGUyIikgdGhlbg0KCQlTb2xpZFNjcmlwdHMuVXNlUm9wZSgzMjk2MCwgMzI0NzgpDQoJZWxzZWlmKGxhYmVsID09ICJSb3BlMyIpIHRoZW4NCgkJU29saWRTY3JpcHRzLlVzZVJvcGUoMzI5ODgsIDMyNTIzKQ0KCWVsc2VpZihsYWJlbCA9PSAiQ2hlY2tTb2Z0cyIpIHRoZW4NCgkJU29saWRTY3JpcHRzLkNoZWNrU29mdHMoKQ0KCWVsc2VpZihsYWJlbCA9PSAidGVsMSIpIHRoZW4NCgkJU29saWRTY3JpcHRzLlRlbGVwb3J0KEVBU1QsICJiNHRlbDEiKQ0KCWVsc2VpZihsYWJlbCA9PSAidGFyZ2V0T04iKSB0aGVuDQoJCUNhdmVib3QuU3RvcCgpDQogICAgICAgIFNlbGYuU3RvcEF0dGFjaygpDQoJCXdhaXQoMjAwLDUwMCkNCgkJbG9hZFNldHRpbmdzKCJbMjAwKyBSUF0gRm9yYmlkZGVuIExhbmRzIEh5ZHJhcyIsICJUYXJnZXRpbmciKQ0KCQl3YWl0KDIwMCw1MDApDQoJCUNhdmVib3QuU3RhcnQoKQ0KCWVsc2VpZihsYWJlbCA9PSAidGFyZ2V0T0ZGIikgdGhlbg0KCQlDYXZlYm90LlN0b3AoKQ0KICAgICAgICBTZWxmLlN0b3BBdHRhY2soKQ0KCQl3YWl0KDIwMCw1MDApDQoJCWxvYWRTZXR0aW5ncygiWzIwMCsgUlBdIEZvcmJpZGRlbiBMYW5kcyBIeWRyYXMgZXh0cmEiLCAiVGFyZ2V0aW5nIikNCgkJd2FpdCgyMDAsNTAwKQ0KCQlDYXZlYm90LlN0YXJ0KCkNCgllbHNlaWYobGFiZWwgPT0gInRhcmdldE9OMiIpIHRoZW4NCgkJQ2F2ZWJvdC5TdG9wKCkNCiAgICAgICAgU2VsZi5TdG9wQXR0YWNrKCkNCgkJd2FpdCgyMDAsNTAwKQ0KCQlsb2FkU2V0dGluZ3MoIlsyMDArIFJQXSBGb3JiaWRkZW4gTGFuZHMgSHlkcmFzIiwgIlRhcmdldGluZyIpDQoJCXdhaXQoMjAwLDUwMCkNCgkJQ2F2ZWJvdC5TdGFydCgpDQoJZWxzZWlmKGxhYmVsID09ICJ0YXJnZXRPRkYyIikgdGhlbg0KCQlDYXZlYm90LlN0b3AoKQ0KICAgICAgICBTZWxmLlN0b3BBdHRhY2soKQ0KCQl3YWl0KDIwMCw1MDApDQoJCWxvYWRTZXR0aW5ncygiWzIwMCsgUlBdIEZvcmJpZGRlbiBMYW5kcyBIeWRyYXMgZXh0cmEiLCAiVGFyZ2V0aW5nIikNCgkJd2FpdCgyMDAsNTAwKQ0KCQlDYXZlYm90LlN0YXJ0KCkNCgllbmQNCmVuZA0KDQppZihfZHJvcFZpYWxzKSB0aGVuDQoJTW9kdWxlLlN0YXJ0KCd2aWFsLWRyb3BwZXInKQ0KZW5kDQoNCmlmKF9yZWZpbGxNYW5hKSB0aGVuDQoJTW9kdWxlLlN0YXJ0KCdtYW5hLXJlZmlsbGVyJykNCmVuZA0KDQppZihfdXNlUmVjb3ZlcnlTcGVsbCkgdGhlbg0KICAgIE1vZHVsZS5TdGFydCgncmVjb3ZlcnktY2FzdGVyJykNCmVuZA0KDQppZihfdXNlU29mdEJvb3RzKSB0aGVuDQoJTW9kdWxlLlN0YXJ0KCdlcXVpcC1zb2Z0cycpDQplbmQNCg0KaWYoX2Ryb3BHb2xkKSB0aGVuDQoJTW9kdWxlLlN0YXJ0KCdkcm9wLWdvbGQnKQ0KZW5kDQoNCmlmKF9zY3JlZW5MZXZlbCkgdGhlbg0KCU1vZHVsZS5TdGFydCgnc2NyZWVuLXNob290ZXInKQ0KZW5kDQoNCk1vZHVsZS5TdGFydCgnc29ydC1zdXBwbGllcycp]]></script> <script name="distanceWeaponSwitcher.lua"><![CDATA[ZnVuY3Rpb24gdXNlQ29pbnMoaWQpICANCiAgICBsb2NhbCBjb250ID0gQ29udGFpbmVyLkdldEZpcnN0KCkgICANCiAgICB3aGlsZSAoY29udDppc09wZW4oKSkgZG8NCiAgICAgICAgZm9yIHNwb3QgPSAwLCBjb250Okl0ZW1Db3VudCgpIGRvDQogICAgICAgICAgICBsb2NhbCBpdGVtID0gY29udDpHZXRJdGVtRGF0YShzcG90KSAgDQogICAgICAgICAgICBpZiAoaXRlbS5pZCA9PSBpZCkgdGhlbg0KICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvdW50ID09IDEwMCkgdGhlbg0KICAgICAgICAgICAgICAgICAgICBjb250OlVzZUl0ZW0oc3BvdCwgVHJ1ZSkNCiAgICAgICAgICAgICAgICAgICAgc2xlZXAoNTAwKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KICAgICAgICBjb250ID0gY29udDpHZXROZXh0KCkgIA0KICAgIGVuZA0KICAgIHJldHVybiBmYWxzZQ0KZW5kDQp3aGlsZSAodHJ1ZSkgZG8NCiAgICB1c2VDb2lucygzMDMxKS0tZ29sZA0KICAgIHNsZWVwKDUwMCkNCiAgICB1c2VDb2lucygzMDM1KS0tcGxhdGludW0NCiAgICBzbGVlcCg1MDApDQplbmQ=]]></script> <script name="shAdOwHUD.lua"><![CDATA[LS0gUGFyYW1ldGVycyB0byB0aGUgSFVEIHRoYXQgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIHRvIHRoZSByZWd1bGFyIHVzZXIsDQotLSBidXQgdGhhdCB0aGUgZGV2ZWxvcGVyIG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUNCkhpZGRlbkNvbmZpZyA9DQp7DQogICAgcGFuZWxXaWR0aCA9IDIwMCwNCiAgICB0aW1lVGljayA9IDEsDQogICAgeUluc2V0ID0gMzAsDQogICAgeERlc2NXaWR0aCA9IDE0NSwNCiAgICB4VGl0bGVJbnNldCA9IDYwLA0KICAgIHhIZWFkZXJJbnNldCA9IDgwLA0KICAgIHhJbWFnZU9mZnNldCA9IC0yNSwNCiAgICB5SW1hZ2VPZmZzZXQgPSAtNSwNCiAgICB5U3RhbmRhcmRIZWlnaHQgPSAxNSwNCiAgICBpbWFnZVNpemUgPSAxMCwNCiAgICBoZWFkZXJDb2xvciA9IHtyPTI0MCwgZz0yNDAsIGI9MjQwfSwNCiAgICBrZXlDb2xvciAgICA9IHtyPTIwMCwgZz0yMDAsIGI9MjAwfSwNCiAgICB2YWxDb2xvciAgICA9IHtyPTE1MCwgZz0xNTAsIGI9MTUwfSwNCiAgICBnb2xkQ2hhbmdlTGltaXQgPSAzMDAsDQogICAgc3RhY2thYmxlQ2hhbmdlTGltaXQgPSAxMCwNCiAgICBub25TdGFja2FibGVDaGFuZ2VMaW1pdCA9IDMsDQogICAgV2FzdGVNb2QgPSAxMDAwMCwNCn0NCg0KQ29uZmlnID0gKGZ1bmN0aW9uKCkNCiAgICBsb2NhbCBtYXJrZXRQcmljZXMgPSB7fQ0KDQogICAgbG9jYWwgZnVuY3Rpb24gZ2V0TWFya2V0UHJpY2UoaXRlbSkNCiAgICAgICAgbG9jYWwgaWQgPSBJdGVtLkdldEl0ZW1JREZyb21EdWFsSW5wdXQoaXRlbSkNCiAgICAgICAgcmV0dXJuIG1hcmtldFByaWNlc1tpZF0NCiAgICBlbmQNCg0KDQogICAgbG9jYWwgZnVuY3Rpb24gZmlsZUV4aXN0cyhuYW1lKQ0KICAgICAgICBsb2NhbCBmID0gaW8ub3BlbihuYW1lKQ0KICAgICAgICBpZiBub3QgZiB0aGVuDQogICAgICAgICAgICByZXR1cm4gZmFsc2UNCiAgICAgICAgZW5kDQogICAgICAgIGY6Y2xvc2UoKQ0KICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgIGVuZA0KDQoNCiAgICBsb2NhbCBjb25maWdUZXh0ID0gW1sNCi0tIEFjY3VyYXRlIG1hcmtldCBwcmljZXMgYXJlIG5lY2Vzc2FyeSBmb3IgY29ycmVjdCBwcm9maXRzIGNhbGN1bGF0aW9ucy4NCi0tIFNvbWUgZXhhbXBsZXMgaGF2ZSBiZWVuIHByb3ZpZGVkIHRvIGRlbW9uc3RyYXRlIHRoZSBmb3JtYXQsIGJ1dCB5b3Ugc2hvdWxkIHByb2JhYmx5IGVkaXQgdGhlbSB0byBmaXQgeW91ciB3b3JsZC4NCk1hcmtldFByaWNlcyA9IHsNCiAgICBbInN3b3JkIHJpbmciXSA9IDUwMCwNCiAgICBbImdyZWF0IGhlYWx0aCBwb3Rpb24iXSA9IDE1MCwNCiAgICBbImxpZmUgcmluZyJdID0gOTAwLA0KICAgIFsic3BpZGVyIHNpbGsiXSA9IDcwMDAsDQp9XV0NCiAgICBsb2NhbCBjb25maWdOYW1lID0gIi4uL0NvbmZpZ3Mvc2hBZE93SFVELmluaSINCg0KICAgIGxvY2FsIGZ1bmN0aW9uIGxvYWRDb25maWcoKQ0KICAgICAgICAtLSBJZiB0aGUgY29uZmlnIGZpbGUgZG9lcyBub3QgZXhpc3QsIGNyZWF0ZSBpdA0KICAgICAgICBpZiBub3QgZmlsZUV4aXN0cyhjb25maWdOYW1lKSB0aGVuDQogICAgICAgICAgICBsb2NhbCBmID0gaW8ub3Blbihjb25maWdOYW1lLCAidysiKQ0KICAgICAgICAgICAgaWYgZiB0aGVuDQogICAgICAgICAgICAgICAgZjp3cml0ZShjb25maWdUZXh0KQ0KICAgICAgICAgICAgICAgIGY6Y2xvc2UoKQ0KICAgICAgICAgICAgICAgIGxvY2FsIG5vQ29uZmlnTXNnID0gIlRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91J3JlIHVzaW5nIHRoaXMgSFVELiBBIGNvbmZpZyBmaWxlIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHlvdSwgdXNlIGl0IHRvIGNoYW5nZSBtYXJrZXQgcHJpY2VzIG9mIGl0ZW1zIHRoYXQgeW91IHdvbid0IHNlbGwgdG8gbnBjcy4iDQogICAgICAgICAgICAgICAgcHJpbnQobm9Db25maWdNc2cpDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQoNCiAgICAgICAgZG9maWxlKGNvbmZpZ05hbWUpDQoNCiAgICAgICAgZm9yIG5hbWUsIHByaWNlIGluIHBhaXJzKE1hcmtldFByaWNlcykgZG8NCiAgICAgICAgICAgIG1hcmtldFByaWNlc1tJdGVtLkdldElEKG5hbWUpXSA9IHByaWNlDQogICAgICAgIGVuZA0KICAgIGVuZA0KDQogICAgcmV0dXJuDQogICAgew0KICAgICAgICBnZXRNYXJrZXRQcmljZSA9IGdldE1hcmtldFByaWNlLA0KICAgICAgICBsb2FkQ29uZmlnID0gbG9hZENvbmZpZywNCiAgICB9DQplbmQpKCkNCg0KRGF0YSA9IChmdW5jdGlvbigpIA0KICAgIGxvY2FsIHdvcm5Tb2Z0SUQgPSA2NTMwDQogICAgbG9jYWwgYWN0aXZlU29mdElEID0gMzU0OQ0KICAgIGxvY2FsIHBhc3NpdmVTb2Z0SUQgPSA2NTI5DQogICAgICAgIA0KICAgIGxvY2FsIGR1cmF0aW9ucyA9IA0KICAgIHsNCiAgICAgICAgW0l0ZW0uR2V0SUQoIlN3b3JkIFJpbmciKV0gPSAzMCAqIDYwLA0KICAgICAgICBbSXRlbS5HZXRJRCgiQ2x1YiBSaW5nIildID0gMzAgKiA2MCwNCiAgICAgICAgW0l0ZW0uR2V0SUQoIkF4ZSBSaW5nIildID0gMzAgKiA2MCwNCiAgICAgICAgW0l0ZW0uR2V0SUQoIkVuZXJneSBSaW5nIildID0gMTAgKiA2MCwNCiAgICAgICAgW0l0ZW0uR2V0SUQoIlN0ZWFsdGggUmluZyIpXSA9IDEwICogNjAsDQogICAgICAgIFtJdGVtLkdldElEKCJMaWZlIFJpbmciKV0gPSAyMCAqIDYwLA0KICAgICAgICBbSXRlbS5HZXRJRCgiUmluZyBvZiBIZWFsaW5nIildID0gNy41ICogNjAsDQogICAgICAgIFtJdGVtLkdldElEKCJQcmlzbWF0aWMgUmluZyIpXSA9IDYwICogNjAsDQogICAgICAgIFtJdGVtLkdldElEKCJUaW1lIFJpbmciKV0gPSAxMCAqIDYwLA0KICAgIH0NCg0KICAgIC0tIFRyYW5zbGF0aW9uIG1hcCBmb3IgZ2V0dGluZyB0aGUgcGFzc2l2ZSBpZCBmcm9tIGFuIGFjdGl2ZSBpZA0KICAgIGxvY2FsIHBhc3NpdmVJRHMgPSB7W2FjdGl2ZVNvZnRJRF0gPSBwYXNzaXZlU29mdElELCBbd29yblNvZnRJRF0gPSBwYXNzaXZlU29mdElEfQ0KICAgIGZvciBwYXNzaXZlLCBfIGluIHBhaXJzKGR1cmF0aW9ucykgZG8NCiAgICAgICAgcGFzc2l2ZUlEc1tJdGVtLkdldFJpbmdBY3RpdmVJRChwYXNzaXZlKV0gPSBwYXNzaXZlDQogICAgZW5kDQoNCiAgICAtLSBBZGQgdGhlIHNvZnQgYm9vdHMgZHVyYXRpb24gYWZ0ZXIgZG9pbmcgdGhlIHJpbmcgdHJhbnNsYXRpb25zDQogICAgZHVyYXRpb25zW3Bhc3NpdmVTb2Z0SURdID0gNCAqIDYwICogNjANCg0KDQogICAgLS0gSWYgd2UgbG9vdCBvbmUgb2YgdGhlc2UgaXRlbXMgc29tZXRoaW5nIGZpc2h5IGlzIGdvaW5nIG9uLCBzbyBpbnZhbGlkYXRlIHRoZSB3aG9sZSBjb3VudC4NCiAgICBsb2NhbCBpbnZhbGlkYXRpb25JRHMgPSANCiAgICB7DQogICAgICAgIEl0ZW0uR2V0SUQoInNob3ZlbCIpLA0KICAgICAgICBJdGVtLkdldElEKCJsaWdodCBzaG92ZWwiKSwNCiAgICAgICAgSXRlbS5HZXRJRCgicm9wZSIpLA0KICAgICAgICBJdGVtLkdldElEKCJlbHZlbmhhaXIgcm9wZSIpLA0KICAgICAgICBJdGVtLkdldElEKCJmaXNoaW5nIHJvZCIpLA0KICAgICAgICBTb2Z0SUQsDQogICAgICAgIFdvcm5Tb2Z0SUQsDQogICAgICAgIFBhc3NpdmVTb2Z0SUQNCiAgICB9DQoNCiAgICAtLSBUaGVzZSBhcmUgaXRlbXMgd2hvc2UgY291bnQgbWF5IGRlY3JlYXNlLCBhbmQgc2hvdWxkIHRoZW4gYmUgY291bnRlZCBhcyB3YXN0ZQ0KICAgIGxvY2FsIHN1cHBsaWVzID0gDQogICAgew0KICAgICAgICAtLSBBcnJvd3MNCiAgICAgICAgW0l0ZW0uR2V0SUQoImFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoImJ1cnN0IGFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoImNyeXN0YWxsaW5lIGFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoImVhcnRoIGFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoImVudmVub21lZCBhcnJvdyIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJmbGFtaW5nIGFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoImZsYXNoIGFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoIm9ueXggYXJyb3ciKV0gPSB0cnVlLA0KICAgICAgICBbSXRlbS5HZXRJRCgicG9pc29uIGFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoInNoaXZlciBhcnJvdyIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJzaW1wbGUgYXJyb3ciKV0gPSB0cnVlLA0KICAgICAgICBbSXRlbS5HZXRJRCgic25pcGVyIGFycm93IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoInRhcnNhbCBhcnJvdyIpXSA9IHRydWUsDQoNCiAgICAgICAgLS0gQm9sdHMNCiAgICAgICAgW0l0ZW0uR2V0SUQoImJvbHQiKV0gPSB0cnVlLA0KICAgICAgICBbSXRlbS5HZXRJRCgiZHJpbGwgYm9sdCIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJpbmZlcm5hbCBib2x0IildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoInBpZXJjaW5nIGJvbHQiKV0gPSB0cnVlLA0KICAgICAgICBbSXRlbS5HZXRJRCgicG93ZXIgYm9sdCIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJwcmlzbWF0aWMgYm9sdCIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJ2b3J0ZXggYm9sdCIpXSA9IHRydWUsDQoNCiAgICAgICAgLS0gVGhyb3dpbmcgd2VhcG9ucw0KICAgICAgICBbSXRlbS5HZXRJRCgiZW5jaGFudGVkIHNwZWFyIildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoImdsb290aCBzcGVhciIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJodW50aW5nIHNwZWFyIildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoIm1lYW4gcGFsYWRpbiBzcGVhciIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJyb3lhbCBzcGVhciIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJzcGVhciIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJhc3Nhc3NpbiBzdGFyIildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoInNub3diYWxsIildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoInNtYWxsIHN0b25lIildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoInRocm93aW5nIGtuaWZlIildID0gdHJ1ZSwNCiAgICAgICAgW0l0ZW0uR2V0SUQoInRocm93aW5nIHN0YXIiKV0gPSB0cnVlLA0KICAgICAgICBbSXRlbS5HZXRJRCgidmlwZXIgc3RhciIpXSA9IHRydWUsDQoNCiAgICAgICAgLS0gQW11bGV0cw0KICAgICAgICBbSXRlbS5HZXRJRCgiZ2lsbCBuZWNrbGFjZSIpXSA9IHRydWUsDQogICAgICAgIFtJdGVtLkdldElEKCJwcmlzbWF0aWMgbmVja2xhY2UiKV0gPSB0cnVlLA0KICAgICAgICBbSXRlbS5HZXRJRCgicHJvdGVjdGlvbiBhbXVsZXQiKV0gPSB0cnVlLA0KDQogICAgICAgIC0tIE1pc2MNCiAgICAgICAgW0l0ZW0uR2V0SUQoInNjYXJhYiBjb2luIildID0gdHJ1ZSwNCiAgICB9DQoNCiAgICBsb2NhbCBzdXBwbHlQYXR0ZXJucyA9IA0KICAgIHsNCiAgICAgICAgInJ1bmUiLA0KICAgICAgICAibWFuYSIsDQogICAgICAgICJoZWFsdGgiLA0KICAgICAgICAic3Bpcml0IHBvdGlvbiIsDQogICAgfQ0KDQogICAgbG9jYWwgZnVuY3Rpb24gaXNTdXBwbHkoaXRlbSkNCiAgICAgICAgbG9jYWwgbmFtZSA9IEl0ZW0uR2V0TmFtZShpdGVtKTpsb3dlcigpDQogICAgICAgIGxvY2FsIG1hdGNoZXNTdXBwbHlQYXR0ZXJuID0gZmFsc2UNCiAgICAgICAgZm9yIF8sIHBhdHRlcm4gaW4gaXBhaXJzKHN1cHBseVBhdHRlcm5zKSBkbw0KICAgICAgICAgICAgbWF0Y2hlc1N1cHBseVBhdHRlcm4gPSBtYXRjaGVzU3VwcGx5UGF0dGVybiBvciBuYW1lOm1hdGNoKHBhdHRlcm4pDQogICAgICAgIGVuZA0KDQogICAgICAgIGxvY2FsIGlkID0gSXRlbS5HZXRJdGVtSURGcm9tRHVhbElucHV0KGl0ZW0pDQogICAgICAgIHJldHVybiBtYXRjaGVzU3VwcGx5UGF0dGVybiBvciBzdXBwbGllc1tpZF0NCiAgICBlbmQNCg0KDQogICAgZnVuY3Rpb24gZ2V0Q29zdChpZCkNCiAgICAgICAgbG9jYWwgc2hvcENvc3QgPSBJdGVtLkdldENvc3QoaWQpDQogICAgICAgIHJldHVybiBpZCA9PSBwYXNzaXZlU29mdElEIGFuZCAxMDAwMCBvciAoc2hvcENvc3QgPT0gMCBhbmQgQ29uZmlnLmdldE1hcmtldFByaWNlKGlkKSBvciBzaG9wQ29zdCkNCiAgICBlbmQNCg0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKGlkKQ0KICAgICAgICByZXR1cm4gQ29uZmlnLmdldE1hcmtldFByaWNlKGlkKSBvciAoaXNTdXBwbHkoaWQpIGFuZCBnZXRDb3N0KGlkKSkgb3IgSXRlbS5HZXRWYWx1ZShpZCkNCiAgICBlbmQNCg0KDQogICAgcmV0dXJuIA0KICAgIHsNCiAgICAgICAgd29yblNvZnRJRCA9IHdvcm5Tb2Z0SUQsDQogICAgICAgIGFjdGl2ZVNvZnRJRCA9IGFjdGl2ZVNvZnRJRCwNCiAgICAgICAgcGFzc2l2ZVNvZnRJRCA9IHBhc3NpdmVTb2Z0SUQsDQoNCiAgICAgICAgZHVyYXRpb25zID0gZHVyYXRpb25zLA0KICAgICAgICBwYXNzaXZlSURzID0gcGFzc2l2ZUlEcywNCiAgICAgICAgaW52YWxpZGF0aW9uSURzID0gaW52YWxpZGF0aW9uSURzLA0KDQogICAgICAgIGlzU3VwcGx5ID0gaXNTdXBwbHksDQogICAgICAgIGdldENvc3QgPSBnZXRDb3N0LA0KICAgICAgICBnZXRWYWx1ZSA9IGdldFZhbHVlLA0KICAgIH0NCmVuZCkoKQ0KDQpIVUREYXRhID0gKGZ1bmN0aW9uKCkNCiAgICAtLSBJbml0aWFsIGRhdGENCiAgICBsb2NhbCBzdGFydFRpbWUgPSBvcy50aW1lKCkNCiAgICBsb2NhbCBzdGFydEV4cCA9IFNlbGYuRXhwZXJpZW5jZSgpDQogICAgbG9jYWwgc3RhcnRTdGFtaW5hID0gU2VsZi5TdGFtaW5hKCkNCg0KICAgIC0tIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSByZXN0IG9mIHRoZSBIVUQNCiAgICBsb2NhbCBkYXRhID0geyBjb3VudHNBcmVWYWxpZCA9IHRydWUsIGdlbmVyYWwgPSB7IGxhc3RUaWNrID0gb3MudGltZSgpIH0gfQ0KICAgIC0tIFRoZSBmdW5jdGlvbnMgdGhhdCB1cGRhdGUgdGhlIGRhdGEsIGluIHRoZSBvcmRlciB0aGV5IHdpbGwgYmUgY2FsbGVkLg0KICAgIGxvY2FsIHVwZGF0ZUZ1bmN0aW9ucyA9IHt9DQoNCiAgICAtLSBIZWxwZXIgZnVuY3Rpb25zIGFuZCB0aGVpciBhY2N1bXVsYXRpdmUgZGF0YQ0KICAgIGRhdGEuZ2VuZXJhbC5iYWxhbmNlID0gMA0KICAgIE5wY01lc3NhZ2VQcm94eS5PblJlY2VpdmUoIkdldHMgQmFuayBCYWxhbmNlIiwgZnVuY3Rpb24ocHJveHksIG5wY05hbWUsIG1lc3NhZ2UpDQogICAgICAgIGxvY2FsIGJhbGFuY2UgPSBzdHJpbmcubWF0Y2gobWVzc2FnZSwgIllvdXIgYWNjb3VudCBiYWxhbmNlIGlzICguKykgZ29sZC4iKQ0KICAgICAgICBpZiBiYWxhbmNlIGFuZCB0b251bWJlcihiYWxhbmNlKSB0aGVuDQogICAgICAgICAgICBkYXRhLmdlbmVyYWwuYmFsYW5jZSA9IHRvbnVtYmVyKGJhbGFuY2UpDQogICAgICAgIGVuZA0KICAgIGVuZCkNCg0KICAgIGxvY2FsIGZ1bmN0aW9uIGlzRW1wdHlGbGFzayhpZCkNCiAgICAgICAgcmV0dXJuIHRhYmxlLmZpbmQoezI4MywgMjg0LCAyODV9LCBpZCkNCiAgICBlbmQNCg0KICAgIGxvY2FsIGZ1bmN0aW9uIGlnbm9yZUl0ZW0oaWQpDQogICAgICAgIHJldHVybiBpZCA9PSAwIG9yIGlzRW1wdHlGbGFzayhpZCkgb3IgSXRlbS5pc0NvbnRhaW5lcihpZCkNCiAgICBlbmQNCiAgICANCiAgICBsb2NhbCBjb3Jwc2VOYW1lcyA9IHsidGhlIiwgImRlbW9uaWMiLCAiZGVhZCIsICJzbGFpbiIsICJkaXNzb2x2ZWQiLCAicmVtYWlucyIsICJlbGVtZW50YWwiLCAic3BsaXQifQ0KICAgIGxvY2FsIGZ1bmN0aW9uIGlzQ29ycHNlKGNvbnQpDQogICAgICAgIGlmIEl0ZW0uaXNDb3Jwc2UoY29udDpJRCgpKSB0aGVuIHJldHVybiB0cnVlIGVuZA0KICAgICAgICBsb2NhbCBuYW1lID0gY29udDpOYW1lKCk6bG93ZXIoKQ0KICAgICAgICBmb3IgXywgQ1BhcnROYW1lIGluIGlwYWlycyhjb3Jwc2VOYW1lcykgZG8NCiAgICAgICAgICAgIGlmIG5hbWU6ZmluZChDUGFydE5hbWUpIHRoZW4NCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KICAgICAgICByZXR1cm4gZmFsc2UNCiAgICBlbmQNCg0KICAgIGxvY2FsIGZ1bmN0aW9uIGNvdW50SXRlbXMoKQ0KICAgICAgICBuZXdDb3VudHMgPSB7fQ0KICAgICAgICANCiAgICAgICAgdmVyeVVuc2FmZUZ1bmN0aW9uRW50ZXJDcml0aWNhbE1vZGUoKQ0KICAgICAgICANCiAgICAgICAgLS0gQ291bnQgZXF1aXBwZWQNCiAgICAgICAgbG9jYWwgc2xvdHMgPSB7U2VsZi5IZWFkLCBTZWxmLkFybW9yLCBTZWxmLkxlZ3MsIFNlbGYuQW11bGV0LCBTZWxmLkZlZXQsIFNlbGYuUmluZywgU2VsZi5XZWFwb24sIFNlbGYuU2hpZWxkLCBTZWxmLkFtbW99DQogICAgICAgIGZvciBpID0gMSwgI3Nsb3RzIGRvDQogICAgICAgICAgICBsb2NhbCBzbG90ID0gc2xvdHNbaV0oKQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiBub3QgaWdub3JlSXRlbShzbG90LmlkKSB0aGVuDQogICAgICAgICAgICAgICAgbmV3Q291bnRzW3Nsb3QuaWRdID0gKG5ld0NvdW50c1tzbG90LmlkXSBvciAwKSArICBtYXRoLm1heChzbG90LmNvdW50LCAxKQ0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KICAgICAgICANCiAgICAgICAgLS0gQ291bnQgaW4gYmFja3BhY2tzDQogICAgICAgIGZvciBpID0gMCwgMTYgZG8NCiAgICAgICAgICAgIGxvY2FsIGNvbnQgPSBDb250YWluZXIoaSkNCiAgICAgICAgICAgIGlmIGNvbnQ6aXNPcGVuKCkgYW5kIG5vdCBpc0NvcnBzZShjb250KSBhbmQgY29udDpOYW1lKCkgfj0gIkJyb3dzZSBGaWVsZCIgdGhlbg0KICAgICAgICAgICAgICAgIGZvciBzcG90ID0gMCwgY29udDpJdGVtQ291bnQoKSAtIDEgZG8NCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgaXRlbSA9IGNvbnQ6R2V0SXRlbURhdGEoc3BvdCkNCiAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlnbm9yZUl0ZW0oaXRlbS5pZCkgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q291bnRzW2l0ZW0uaWRdID0gKG5ld0NvdW50c1tpdGVtLmlkXSBvciAwKSArIGl0ZW0uY291bnQNCiAgICAgICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQoNCiAgICAgICAgdmVyeVVuc2FmZUZ1bmN0aW9uRXhpdENyaXRpY2FsTW9kZSgpDQogICAgICAgIA0KICAgICAgICAtLSBIYW5kbGUgY2hhbmdpbmcgcmluZyBhbmQgZmVldCBpZHMNCiAgICAgICAgZm9yIGFjdGl2ZUlELCBwYXNzaXZlSUQgaW4gcGFpcnMoRGF0YS5wYXNzaXZlSURzKSBkbw0KICAgICAgICAgICAgbmV3Q291bnRzW3Bhc3NpdmVJRF0gPSAobmV3Q291bnRzW3Bhc3NpdmVJRF0gb3IgMCkgKyAobmV3Q291bnRzW2FjdGl2ZUlEXSBvciAwKQ0KICAgICAgICAgICAgbmV3Q291bnRzW2FjdGl2ZUlEXSA9IG5pbA0KICAgICAgICBlbmQNCg0KICAgICAgICAtLSBIYW5kbGUgd29ybiBzb2Z0IGJvb3RzDQogICAgICAgIG5ld0NvdW50c1tEYXRhLnBhc3NpdmVTb2Z0SURdID0gKG5ld0NvdW50c1tEYXRhLnBhc3NpdmVTb2Z0SURdIG9yIDApICsgKG5ld0NvdW50c1tEYXRhLndvcm5Tb2Z0SURdIG9yIDApDQoNCiAgICAgICAgcmV0dXJuIG5ld0NvdW50cw0KICAgIGVuZA0KDQogICAgbG9jYWwgZnVuY3Rpb24gY2hhbmdlSXNXaXRoaW5MaW1pdHMoaWQsIGNoYW5nZSkNCiAgICAgICAgaWYgaWQgPT0gSXRlbS5HZXRJRCgiZ29sZCBjb2luIikgdGhlbg0KICAgICAgICAgICAgcmV0dXJuIGNoYW5nZSA8IEhpZGRlbkNvbmZpZy5nb2xkQ2hhbmdlTGltaXQNCiAgICAgICAgZWxzZWlmIEl0ZW0uaXNTdGFja2FibGUoaWQpIHRoZW4NCiAgICAgICAgICAgIHJldHVybiBjaGFuZ2UgPCBIaWRkZW5Db25maWcuc3RhY2thYmxlQ2hhbmdlTGltaXQNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcmV0dXJuIGNoYW5nZSA8IEhpZGRlbkNvbmZpZy5ub25TdGFja2FibGVDaGFuZ2VMaW1pdA0KICAgICAgICBlbmQNCiAgICBlbmQNCiAgICANCiAgICAtLSBXZSBvbmx5IHdhbnQgdG8gdXBkYXRlIHRoZSBkaWZmIGlmIGl0IGNvbnRhaW5zIHJlYXNvbmFibGUgdmFsdWVzDQogICAgbG9jYWwgdG90YWxOZXdJdGVtTGltaXQgPSAoU2VsZi5MZXZlbCgpIDwgMTAwIGFuZCA1IG9yIChTZWxmLkxldmVsKCkgPCAyMDAgYW5kIDcgb3IgOSkpDQogICAgbG9jYWwgbGFzdEJwQ291bnQgPSAwDQogICAgbG9jYWwgZnVuY3Rpb24gdmFsaWRhdGVEaWZmKGRpZmYsIG5ldykNCiAgICAgICAgbG9jYWwgdG90YWxOZXdDb3VudCA9IDANCiAgICAgICAgLS0gSWYgd2UgZGlzY292ZXJlZCB0b28gbWFueSBvZiBhbnkgb25lIGl0ZW0gd2UgaW52YWxpZGF0ZSB0aGUgZGlmZg0KICAgICAgICBmb3IgaWQsIGNvdW50IGluIHBhaXJzKGRpZmYpIGRvDQogICAgICAgICAgICBpZiAoY291bnQgPiAwIGFuZCBub3QgY2hhbmdlSXNXaXRoaW5MaW1pdHMoaWQsIGNvdW50KSkgb3IgDQogICAgICAgICAgICAgICAoY291bnQgPCAwIGFuZCBEYXRhLmlzU3VwcGx5KGlkKSBhbmQgbm90IGNoYW5nZUlzV2l0aGluTGltaXRzKGlkLCAtMSpjb3VudCkpIG9yIA0KICAgICAgICAgICAgICAgKGNvdW50IDwgMCBhbmQgbm90IERhdGEuaXNTdXBwbHkoaWQpIGFuZCBuZXdbaWRdIGFuZCBub3QgY2hhbmdlSXNXaXRoaW5MaW1pdHMoaWQsIG5ld1tpZF0pKSB0aGVuDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGlmIGNvdW50ID4gMCB0aGVuDQogICAgICAgICAgICAgICAgdG90YWxOZXdDb3VudCA9IHRvdGFsTmV3Q291bnQgKyAoSXRlbS5pc1N0YWNrYWJsZShpZCkgYW5kIDEgb3IgY291bnQpDQogICAgICAgICAgICBlbHNlaWYgY291bnQgPCAwIGFuZCBub3QgRGF0YS5pc1N1cHBseShpZCkgdGhlbg0KICAgICAgICAgICAgICAgIHRvdGFsTmV3Q291bnQgPSB0b3RhbE5ld0NvdW50ICsgKEl0ZW0uaXNTdGFja2FibGUoaWQpIGFuZCAxIG9yIG5ld1tpZF0gb3IgMCkNCiAgICAgICAgICAgIGVuZA0KICAgICAgICBlbmQNCiAgICAgICAgLS0gSWYgd2UgZGlzY292ZXJlZCB0b28gbWFueSBuZXcgaXRlbXMgaW4gdG90YWwgd2UgaW52YWxpZGF0ZSB0aGUgZGlmZg0KICAgICAgICBpZiB0b3RhbE5ld0NvdW50ID4gdG90YWxOZXdJdGVtTGltaXQgdGhlbg0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICAgIGVuZA0KICAgICAgICAtLSBJZiB3ZSBkaXNjb3ZlcmVkIGEgbmV3IHRvb2wgd2UgaW52YWxpZGF0ZSB0aGUgZGlmZg0KICAgICAgICBmb3IgXywgaWQgaW4gaXBhaXJzKERhdGEuaW52YWxpZGF0aW9uSURzKSBkbw0KICAgICAgICAgICAgbG9jYWwgY2hhbmdlID0gZGlmZltpZF0NCiAgICAgICAgICAgIGlmIGNoYW5nZSBhbmQgY2hhbmdlIH49IDAgdGhlbg0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQ0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KDQogICAgICAgIGxvY2FsIGdvbGRJRCA9IEl0ZW0uR2V0SUQoImdvbGQgY29pbiIpDQogICAgICAgIGxvY2FsIHBsYXRJRCA9IEl0ZW0uR2V0SUQoInBsYXRpbnVtIGNvaW4iKQ0KICAgICAgICAtLSBJZiB3ZSdyZSBvbiBhbiBPVCBhbmQgbG9zdCBnb2xkIG9yIHBsYXRzIHdlIGludmFsaWRhdGUgdGhlIGRpZmYsIGJlY2F1c2Ugb2YgZ29sZCBjaGFuZ2luZw0KICAgICAgICBpZiBub3QgWGVub0JvdC5Jc0luUmVhbFRpYmlhKCkgYW5kIA0KICAgICAgICAgICAoKGRpZmZbZ29sZElEXSBhbmQgZGlmZltnb2xkSURdIDwgMCkgb3INCiAgICAgICAgICAgIChkaWZmW3BsYXRJRF0gYW5kIGRpZmZbcGxhdElEXSA8IDApKSB0aGVuDQogICAgICAgICAgICByZXR1cm4gZmFsc2UNCiAgICAgICAgZW5kDQoNCiAgICAgICAgLS0gSWYgdGhlIG51bWJlciBvZiBvcGVuIGJhY2twYWNrcyBoYXZlIGNoYW5nZWQgd2UgaW52YWxpZGF0ZQ0KICAgICAgICBsb2NhbCBicENvdW50ID0gMA0KICAgICAgICBmb3IgaSA9IDAsIDE2IGRvDQogICAgICAgICAgICBsb2NhbCBjb250ID0gQ29udGFpbmVyKGkpDQogICAgICAgICAgICBpZiBjb250OmlzT3BlbigpIGFuZCBub3QgaXNDb3Jwc2UoY29udCkgYW5kIGNvbnQ6TmFtZSgpIH49ICJCcm93c2UgRmllbGQiIHRoZW4NCiAgICAgICAgICAgICAgICBicENvdW50ID0gYnBDb3VudCArIDENCiAgICAgICAgICAgIGVuZA0KICAgICAgICBlbmQNCiAgICAgICAgaWYgYnBDb3VudCB+PSBsYXN0QnBDb3VudCB0aGVuDQogICAgICAgICAgICBsYXN0QnBDb3VudCA9IGJwQ291bnQNCiAgICAgICAgICAgIHJldHVybiBmYWxzZQ0KICAgICAgICBlbmQNCg0KICAgICAgICAtLSBPdGhlcndpc2Ugd2UncmUgdmFsaWQNCiAgICAgICAgcmV0dXJuIHRydWUNCiAgICBlbmQNCg0KICAgIGxvY2FsIGZ1bmN0aW9uIGlkT25TY3JlZW4oaWRzKQ0KICAgICAgICBsb2NhbCBteVBvcyA9IFNlbGYuUG9zaXRpb24oKQ0KICAgICAgICBmb3IgZHggPSAtNywgNyBkbw0KICAgICAgICAgICAgZm9yIGR5ID0gLTUsIDUgZG8NCiAgICAgICAgICAgICAgICBsb2NhbCBwb3MgPSB7eCA9IG15UG9zLnggKyBkeCwgeSA9IG15UG9zLnkgKyBkeSwgeiA9IG15UG9zLnp9DQogICAgICAgICAgICAgICAgaWYgdGFibGUuZmluZChpZHMsIE1hcC5HZXRUb3BVc2VJdGVtKHBvcy54LCBwb3MueSwgcG9zLnopLmlkKSB0aGVuDQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlDQogICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQogICAgICAgIHJldHVybiBmYWxzZQ0KICAgIGVuZCANCiAgICANCiAgICBsb2NhbCBmdW5jdGlvbiB0cmFpbmVyT25TY3JlZW4oKQ0KICAgICAgICByZXR1cm4gaWRPblNjcmVlbih7MTYyMDEsIDE2MTk4LCAxNjIwMiwgMTYxOTksIDE2MjAwfSkNCiAgICBlbmQNCiAgICANCiAgICBsb2NhbCBmdW5jdGlvbiBkZXBvdE9uU2NyZWVuKCkNCiAgICAgICAgcmV0dXJuIGlkT25TY3JlZW4oezM0OTcsIDM0OTgsIDM0OTksIDM1MDB9KQ0KICAgIGVuZA0KICAgIA0KICAgIGxvY2FsIGZ1bmN0aW9uIGhhc0Nsb3NlTlBDKCkNCiAgICAgICAgZm9yIF8sIGMgaW4gQ3JlYXR1cmUuaU5wY3MoKSBkbw0KICAgICAgICAgICAgaWYgYzppc09uU2NyZWVuKCkgdGhlbg0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQogICAgICAgIHJldHVybiBmYWxzZQ0KICAgIGVuZA0KICAgIA0KICAgIGxvY2FsIGxhc3RUYWxrZWRUb05QQyA9IDANCiAgICBOcGNNZXNzYWdlUHJveHk6T25SZWNlaXZlKCJTcG9rZSBXaXRoIE5QQyBEZXRlY3RvciIsIGZ1bmN0aW9uKF8pDQogICAgICAgIGxhc3RUYWxrZWRUb05QQyA9IG9zLnRpbWUoKQ0KICAgIGVuZCkNCiAgICANCiAgICAtLSBXZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgZGlmZiB3aGlsZSBkb2luZyBjZXJ0YWluIHRoaW5ncw0KICAgIC0tIHRoYXQgYXJlIG5vcm1hbGx5IGRvbmUgd2hlbiByZWZpbGxpbmcNCiAgICBsb2NhbCBmdW5jdGlvbiBpc1JlZmlsbGluZygpDQogICAgICAgIHJldHVybiAoWGVub0JvdC5Jc0luUmVhbFRpYmlhKCkgYW5kIGhhc0Nsb3NlTlBDKCkpIG9yIA0KICAgICAgICAgICAgICAgb3MuZGlmZnRpbWUob3MudGltZSgpLCBsYXN0VGFsa2VkVG9OUEMpIDwgMTAgb3IgDQogICAgICAgICAgICAgICBkZXBvdE9uU2NyZWVuKCkgb3IgDQogICAgICAgICAgICAgICB0cmFpbmVyT25TY3JlZW4oKQ0KICAgIGVuZCANCg0KICAgIGRhdGEuaXRlbUNvdW50cyA9IGNvdW50SXRlbXMoKQ0KICAgIGxvY2FsIGZ1bmN0aW9uIHVwZGF0ZURpZmZzKCkNCiAgICAgICAgbG9jYWwgbmV3Q291bnRzID0gY291bnRJdGVtcygpDQoNCiAgICAgICAgLS0gQ2FsY3VsYXRlIHRoZSBkaWZmDQogICAgICAgIGxvY2FsIGRpZmYgPSB7fSAgICANCiAgICAgICAgZm9yIGlkLCBjb3VudCBpbiBwYWlycyhuZXdDb3VudHMpIGRvDQogICAgICAgICAgICBkaWZmW2lkXSA9IGNvdW50DQogICAgICAgIGVuZA0KICAgICAgICANCiAgICAgICAgZm9yIGlkLCBjb3VudCBpbiBwYWlycyhkYXRhLml0ZW1Db3VudHMpIGRvDQogICAgICAgICAgICBkaWZmW2lkXSA9IChkaWZmW2lkXSBvciAwKSAtIGNvdW50DQogICAgICAgIGVuZA0KICAgICAgICANCiAgICAgICAgZm9yIGlkLCBjb3VudCBpbiBwYWlycyhkaWZmKSBkbw0KICAgICAgICAgICAgaWYgZGlmZltpZF0gPT0gMCB0aGVuIA0KICAgICAgICAgICAgICAgIGRpZmZbaWRdID0gbmlsIA0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KDQogICAgICAgIC0tIFN0b3JlIHRoZSBuZXcgY291bnRzDQogICAgICAgIGRhdGEuaXRlbUNvdW50cyA9IG5ld0NvdW50cw0KDQogICAgICAgIC0tIFZhbGlkYXRlIHRoZSBkaWZmDQogICAgICAgIGRhdGEuY291bnRzQXJlVmFsaWQgPSB2YWxpZGF0ZURpZmYoZGlmZiwgZGF0YS5pdGVtQ291bnRzKSBhbmQgKG5vdCBpc1JlZmlsbGluZygpKQ0KDQogICAgICAgIC0tIEZpbHRlciB0aGUgZGlmZiBpbnRvIGxvb3QgYW5kIHdhc3RlDQogICAgICAgIGxvY2FsIG5ld0xvb3QgPSB7fQ0KICAgICAgICBsb2NhbCBuZXdXYXN0ZSA9IHt9DQogICAgICAgIGZvciBpZCwgY291bnQgaW4gcGFpcnMoZGlmZikgZG8NCiAgICAgICAgICAgIGlmIGNvdW50ID4gMCB0aGVuIA0KICAgICAgICAgICAgICAgIG5ld0xvb3RbaWRdID0gY291bnQNCiAgICAgICAgICAgIC0tIERvIG5vdCBhY2NlcHQgY291bnQgYmFzZWQgd2FzdGUgb2YgYWN0aXZlIGl0ZW1zDQogICAgICAgICAgICBlbHNlaWYgRGF0YS5pc1N1cHBseShpZCkgdGhlbg0KICAgICAgICAgICAgICAgIG5ld1dhc3RlW2lkXSA9IDAtY291bnQNCiAgICAgICAgICAgIGVuZA0KICAgICAgICBlbmQNCg0KICAgICAgICAtLSBDaGVjayBmb3IgYWN0aXZlIGl0ZW1zDQogICAgICAgIGxvY2FsIHNsb3RzID0ge1NlbGYuSGVhZCwgU2VsZi5Bcm1vciwgU2VsZi5MZWdzLCBTZWxmLkZlZXQsIFNlbGYuQW11bGV0LCBTZWxmLldlYXBvbiwgU2VsZi5SaW5nLCBTZWxmLlNoaWVsZCwgU2VsZi5BbW1vfQ0KICAgICAgICBmb3IgaSA9IDEsICNzbG90cyBkbw0KICAgICAgICAgICAgbG9jYWwgc2xvdCA9IHNsb3RzW2ldKCkNCiAgICAgICAgICAgIGxvY2FsIHBhc3NpdmVJRCA9IERhdGEucGFzc2l2ZUlEc1tzbG90LmlkXQ0KICAgICAgICAgICAgaWYgKHBhc3NpdmVJRCBhbmQgRGF0YS5kdXJhdGlvbnNbcGFzc2l2ZUlEXSkgdGhlbg0KICAgICAgICAgICAgICAgIC0tIFRoZSBjb3VudCBmb3IgYW4gYWN0aXZlIGl0ZW0gaXMgdGhlIHRpbWUgaXQgd2FzIGFjdGl2ZSBmb3INCiAgICAgICAgICAgICAgICBuZXdXYXN0ZVtwYXNzaXZlSURdID0gb3MudGltZSgpIC0gZGF0YS5nZW5lcmFsLmxhc3RUaWNrDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQogICAgICAgIGRhdGEuZ2VuZXJhbC5sYXN0VGljayA9IG9zLnRpbWUoKQ0KDQogICAgICAgIC0tIFN0b3JlIHRoZSBmaWx0ZXJlZCBkaWZmcw0KICAgICAgICBkYXRhLm5ld0xvb3QgPSBuZXdMb290DQogICAgICAgIGRhdGEubmV3V2FzdGUgPSBuZXdXYXN0ZQ0KICAgIGVuZA0KICAgIHRhYmxlLmluc2VydCh1cGRhdGVGdW5jdGlvbnMsIHVwZGF0ZURpZmZzKQ0KDQogICAgZGF0YS5nZW5lcmFsLnRvdGFsTG9vdCA9IDANCiAgICBkYXRhLmdlbmVyYWwudG90YWxXYXN0ZSA9IDANCiAgICBkYXRhLmdlbmVyYWwudG90YWxQcm9maXQgPSAwDQogICAgbG9jYWwgZnVuY3Rpb24gdXBkYXRlUHJvZml0cygpDQogICAgICAgIGlmIGRhdGEuY291bnRzQXJlVmFsaWQgdGhlbg0KICAgICAgICAgICAgZm9yIGlkLCBudW0gaW4gcGFpcnMoZGF0YS5uZXdMb290KSBkbw0KICAgICAgICAgICAgICAgIGRhdGEuZ2VuZXJhbC50b3RhbExvb3QgPSBkYXRhLmdlbmVyYWwudG90YWxMb290ICsgRGF0YS5nZXRWYWx1ZShpZCkgKiBudW0NCiAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgZm9yIGlkLCBudW0gaW4gcGFpcnMoZGF0YS5uZXdXYXN0ZSkgZG8NCiAgICAgICAgICAgICAgICBpZiBEYXRhLmR1cmF0aW9uc1tpZF0gdGhlbg0KICAgICAgICAgICAgICAgICAgICBkYXRhLmdlbmVyYWwudG90YWxXYXN0ZSA9IGRhdGEuZ2VuZXJhbC50b3RhbFdhc3RlICsgRGF0YS5nZXRDb3N0KGlkKSAqIG51bSAvIERhdGEuZHVyYXRpb25zW2lkXQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5nZW5lcmFsLnRvdGFsV2FzdGUgPSBkYXRhLmdlbmVyYWwudG90YWxXYXN0ZSArIERhdGEuZ2V0Q29zdChpZCkgKiBudW0NCiAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgZGF0YS5nZW5lcmFsLnRvdGFsUHJvZml0ID0gZGF0YS5nZW5lcmFsLnRvdGFsTG9vdCAtIGRhdGEuZ2VuZXJhbC50b3RhbFdhc3RlDQogICAgICAgIGVuZA0KICAgIGVuZA0KICAgIHRhYmxlLmluc2VydCh1cGRhdGVGdW5jdGlvbnMsIHVwZGF0ZVByb2ZpdHMpDQoNCiAgICBsb2NhbCBmdW5jdGlvbiB1cGRhdGVMZXZlbCgpDQogICAgICAgIGRhdGEuZ2VuZXJhbC5sZXZlbCA9IFNlbGYuTGV2ZWwoKQ0KICAgIGVuZA0KICAgIHRhYmxlLmluc2VydCh1cGRhdGVGdW5jdGlvbnMsIHVwZGF0ZUxldmVsKQ0KDQogICAgbG9jYWwgZnVuY3Rpb24gdXBkYXRlRXhwKCkNCiAgICAgICAgZGF0YS5nZW5lcmFsLmdhaW5lZEV4cCA9IFNlbGYuRXhwZXJpZW5jZSgpIC0gc3RhcnRFeHANCiAgICBlbmQNCiAgICB0YWJsZS5pbnNlcnQodXBkYXRlRnVuY3Rpb25zLCB1cGRhdGVFeHApDQoNCiAgICBsb2NhbCBwcmV2aW91c2x5ID0gb3MudGltZSgpDQogICAgZGF0YS5nZW5lcmFsLnVzZWRTZWNvbmRzID0gMQ0KICAgIGRhdGEuZ2VuZXJhbC51c2VkSG91cnMgPSAwDQogICAgbG9jYWwgZnVuY3Rpb24gdXBkYXRlVGltZSgpDQogICAgICAgIGxvY2FsIG5vdyA9IG9zLnRpbWUoKQ0KICAgICAgICBsb2NhbCBkaWZmID0gbm93IC0gcHJldmlvdXNseQ0KICAgICAgICAtLSBJZiB0aGUgdGltZSBzaW5jZSB0aGUgbGFzdCB0aWNrIHdhcyB0b28gbG9uZyB3ZSd2ZSB2ZXJ5IGxpa2VseSBiZWVuIG9mZmxpbmUNCiAgICAgICAgaWYgZGlmZiA8IDMwIHRoZW4NCiAgICAgICAgICAgIGRhdGEuZ2VuZXJhbC51c2VkU2Vjb25kcyA9IGRhdGEuZ2VuZXJhbC51c2VkU2Vjb25kcyArIGRpZmYNCiAgICAgICAgICAgIGRhdGEuZ2VuZXJhbC51c2VkSG91cnMgPSBkYXRhLmdlbmVyYWwudXNlZFNlY29uZHMgLyAzNjAwDQogICAgICAgIGVuZA0KICAgICAgICBwcmV2aW91c2x5ID0gbm93DQogICAgZW5kDQogICAgdGFibGUuaW5zZXJ0KHVwZGF0ZUZ1bmN0aW9ucywgdXBkYXRlVGltZSkNCg0KICAgIGxvY2FsIHByZXZpb3VzU3RhbWluYSA9IFNlbGYuU3RhbWluYSgpDQogICAgZGF0YS5nZW5lcmFsLnVzZWRTdGFtaW5hTWludXRlcyA9IDANCiAgICBkYXRhLmdlbmVyYWwudXNlZFN0YW1pbmFIb3VycyA9IDANCiAgICBsb2NhbCBmdW5jdGlvbiB1cGRhdGVTdGFtaW5hKCkNCiAgICAgICAgbG9jYWwgY3VycmVudCA9IFNlbGYuU3RhbWluYSgpDQogICAgICAgIGRhdGEuZ2VuZXJhbC5zdGFtaW5hID0gY3VycmVudA0KICAgICAgICBsb2NhbCBkaWZmID0gcHJldmlvdXNTdGFtaW5hIC0gY3VycmVudA0KICAgICAgICAtLSBTdGFtaW5hIGNhbm5vdCBpbmNyZWFzZSB3aGlsZSB3ZSBhcmUgb25saW5lLCBhbmQNCiAgICAgICAgLS0gd2UgZG9udCB3YW50IGJlaW5nIG9mZmxhbmUgdG8gY29ycnVwdCB0aGUgc3RhdHMNCiAgICAgICAgaWYgZGlmZiA+PSAwIHRoZW4NCiAgICAgICAgICAgIGRhdGEuZ2VuZXJhbC51c2VkU3RhbWluYU1pbnV0ZXMgPSBkYXRhLmdlbmVyYWwudXNlZFN0YW1pbmFNaW51dGVzICsgZGlmZg0KICAgICAgICAgICAgZGF0YS5nZW5lcmFsLnVzZWRTdGFtaW5hSG91cnMgPSBkYXRhLmdlbmVyYWwudXNlZFN0YW1pbmFNaW51dGVzIC8gNjANCiAgICAgICAgZW5kDQogICAgICAgIHByZXZpb3VzU3RhbWluYSA9IGN1cnJlbnQNCiAgICBlbmQNCiAgICB0YWJsZS5pbnNlcnQodXBkYXRlRnVuY3Rpb25zLCB1cGRhdGVTdGFtaW5hKQ0KDQogICAgbG9jYWwgZnVuY3Rpb24gdXBkYXRlUmF0ZXMoKQ0KICAgICAgICBkYXRhLmdlbmVyYWwuZXhwUyA9IGRhdGEuZ2VuZXJhbC5nYWluZWRFeHAgLyBkYXRhLmdlbmVyYWwudXNlZFNlY29uZHMNCiAgICAgICAgZGF0YS5nZW5lcmFsLmV4cEggPSBkYXRhLmdlbmVyYWwuZ2FpbmVkRXhwIC8gZGF0YS5nZW5lcmFsLnVzZWRIb3Vycw0KICAgICAgICBkYXRhLmdlbmVyYWwuZXhwU0ggPSBkYXRhLmdlbmVyYWwudXNlZFN0YW1pbmFIb3VycyA8IDAuMDE3IGFuZCBkYXRhLmdlbmVyYWwuZXhwSCBvciBkYXRhLmdlbmVyYWwuZ2FpbmVkRXhwIC8gZGF0YS5nZW5lcmFsLnVzZWRTdGFtaW5hSG91cnMNCiAgICAgICAgZGF0YS5nZW5lcmFsLnByb2ZpdHNIID0gZGF0YS5nZW5lcmFsLnRvdGFsUHJvZml0IC8gZGF0YS5nZW5lcmFsLnVzZWRIb3Vycw0KICAgICAgICBkYXRhLmdlbmVyYWwucHJvZml0c1NIID0gZGF0YS5nZW5lcmFsLnVzZWRTdGFtaW5hSG91cnMgPCAwLjAxNyBhbmQgZGF0YS5nZW5lcmFsLnByb2ZpdHNIIG9yIGRhdGEuZ2VuZXJhbC50b3RhbFByb2ZpdCAvIGRhdGEuZ2VuZXJhbC51c2VkU3RhbWluYUhvdXJzDQogICAgZW5kDQogICAgdGFibGUuaW5zZXJ0KHVwZGF0ZUZ1bmN0aW9ucywgdXBkYXRlUmF0ZXMpDQoNCiAgICBsb2NhbCBmdW5jdGlvbiBleHBGb3JMZXZlbCh4KQ0KICAgICAgICByZXR1cm4gNTAvMyooeCp4KnggLSA2KngqeCArIDE3KnggLSAxMikNCiAgICBlbmQNCg0KICAgIGxvY2FsIGZ1bmN0aW9uIHVwZGF0ZVRpbWVUb0xldmVsKCkNCiAgICAgICAgbG9jYWwgbmV4dExldmVsRXhwID0gZXhwRm9yTGV2ZWwoU2VsZi5MZXZlbCgpICsgMSkNCiAgICAgICAgbG9jYWwgbWlzc2luZ0V4cCA9IG5leHRMZXZlbEV4cCAtIFNlbGYuRXhwZXJpZW5jZSgpDQogICAgICAgIGRhdGEuZ2VuZXJhbC50aW1lVG9MZXZlbCA9IGRhdGEuZ2VuZXJhbC5leHBTID09IDAgYW5kIC0xIG9yIG1hdGguZmxvb3IobWlzc2luZ0V4cCAvIGRhdGEuZ2VuZXJhbC5leHBTKQ0KICAgIGVuZA0KICAgIHRhYmxlLmluc2VydCh1cGRhdGVGdW5jdGlvbnMsIHVwZGF0ZVRpbWVUb0xldmVsKQ0KDQogICAgZGF0YS5nZW5lcmFsLnBpbmcgPSAwDQogICAgbG9jYWwgZnVuY3Rpb24gdXBkYXRlUGluZygpDQogICAgICAgIGRhdGEuZ2VuZXJhbC5waW5nID0gU2VsZi5QaW5nKCkNCiAgICBlbmQNCiAgICB0YWJsZS5pbnNlcnQodXBkYXRlRnVuY3Rpb25zLCB1cGRhdGVQaW5nKSAgICANCg0KICAgIGxvY2FsIGZ1bmN0aW9uIGdldFN0YXRzKCkNCiAgICAgICAgZm9yIF8sIGYgaW4gaXBhaXJzKHVwZGF0ZUZ1bmN0aW9ucykgZG8NCiAgICAgICAgICAgIGYoKQ0KICAgICAgICBlbmQNCiAgICAgICAgcmV0dXJuIGRhdGENCiAgICBlbmQNCg0KICAgIHJldHVybiANCiAgICB7DQogICAgICAgIGdldFN0YXRzID0gZ2V0U3RhdHMsDQogICAgfQ0KZW5kKSgpDQoNCkV2ZW50cyA9IChmdW5jdGlvbigpDQoNCiAgICBsb2NhbCB0b3BpY3MgPSB7fQ0KDQogICAgbG9jYWwgZnVuY3Rpb24gc3Vic2NyaWJlKHRvcGljLCBjYWxsYmFjaykNCiAgICAgICAgbG9jYWwgc3VicyA9IHRvcGljc1t0b3BpY10gb3Ige30NCiAgICAgICAgdGFibGUuaW5zZXJ0KHN1YnMsIGNhbGxiYWNrKQ0KICAgICAgICB0b3BpY3NbdG9waWNdID0gc3Vicw0KICAgIGVuZA0KDQogICAgbG9jYWwgZnVuY3Rpb24gcHVibGlzaCh0b3BpYywgZGF0YSkNCiAgICAgICAgbG9jYWwgc3VicyA9IHRvcGljc1t0b3BpY10gb3Ige30NCiAgICAgICAgZm9yIF8sIGNhbGxiYWNrIGluIGlwYWlycyhzdWJzKSBkbw0KICAgICAgICAgICAgY2FsbGJhY2soZGF0YSkNCiAgICAgICAgZW5kDQogICAgZW5kDQoNCiAgICBsb2NhbCBmdW5jdGlvbiBrZXlzZXQodGFiKQ0KICAgICAgICBsb2NhbCBzZXQgPSB7fQ0KICAgICAgICBmb3Iga2V5LCBfIGluIHBhaXJzKHRhYikgZG8NCiAgICAgICAgICAgIHRhYmxlLmluc2VydChzZXQsIGtleSkNCiAgICAgICAgZW5kDQogICAgICAgIHJldHVybiBzZXQNCiAgICBlbmQNCg0KICAgIE1vZHVsZSgiVXBkYXRlIEhVRCIsIGZ1bmN0aW9uKG1vZHVsZSkNCiAgICAgICAgbG9jYWwgc3RhdHMgPSBIVUREYXRhLmdldFN0YXRzKCkNCg0KICAgICAgICAtLSBOb3RpZnkgZ2VuZXJhbCBzdWJzY3JpYmVycw0KICAgICAgICBwdWJsaXNoKCJnZW5lcmFsIiwgc3RhdHMuZ2VuZXJhbCkNCg0KICAgICAgICAtLSBPbmx5IG5vdGlmeSBjb3VudCBiYXNlZCBzdWJzY3JpYmVycyB3aGVuIHRoZSBjb3VudHMgYXJlIHZhbGlkDQogICAgICAgIGlmIHN0YXRzLmNvdW50c0FyZVZhbGlkIHRoZW4NCiAgICAgICAgICAgIC0tIE5vdGlmeSBhYm91dCBuZXcgcG9zc2libGUgbmV3IGlkcw0KICAgICAgICAgICAgbG9jYWwgbmV3TG9vdElEcyA9IGtleXNldChzdGF0cy5uZXdMb290KQ0KICAgICAgICAgICAgcHVibGlzaCgibmV3TG9vdElEcyIsIG5ld0xvb3RJRHMpDQogICAgICAgICAgICBsb2NhbCBuZXdXYXN0ZUlEcyA9IGtleXNldChzdGF0cy5uZXdXYXN0ZSkNCiAgICAgICAgICAgIHB1Ymxpc2goIm5ld1dhc3RlSURzIiwgbmV3V2FzdGVJRHMpDQoNCiAgICAgICAgICAgIC0tIE5vdGlmeSBhYm91dCBuZXcgY291bnRzDQogICAgICAgICAgICBmb3IgaWQsIGNvdW50IGluIHBhaXJzKHN0YXRzLm5ld0xvb3QpIGRvDQogICAgICAgICAgICAgICAgcHVibGlzaChpZCwgY291bnQpDQogICAgICAgICAgICBlbmQNCg0KICAgICAgICAgICAgZm9yIGlkLCBjb3VudCBpbiBwYWlycyhzdGF0cy5uZXdXYXN0ZSkgZG8NCiAgICAgICAgICAgICAgICBwdWJsaXNoKGlkICsgSGlkZGVuQ29uZmlnLldhc3RlTW9kLCBjb3VudCkNCiAgICAgICAgICAgIGVuZA0KICAgICAgICBlbmQNCg0KICAgICAgICBtb2R1bGU6RGVsYXkoMTAwMCkNCiAgICBlbmQpDQoNCiAgICAtLSBMZXQgbWFpbiBzY3JpcHRzIHN0b3AgdGhlIEhVRCB3aGVuIHRoZXkgbG9nb3V0Lg0KICAgIFNpZ25hbC5PblJlY2VpdmUoIlN0b3AgSFVEIiwgZnVuY3Rpb24oXywgTXNnKQ0KICAgICAgICBpZiBNc2cgPT0gIlN0b3AiIHRoZW4NCiAgICAgICAgICAgIE1vZHVsZS5TdG9wKCJVcGRhdGUgSFVEIikNCiAgICAgICAgZW5kDQogICAgZW5kKQ0KDQogICAgcmV0dXJuIA0KICAgIHsNCiAgICAgICAgcHVibGlzaCA9IHB1Ymxpc2gsDQogICAgICAgIHN1YnNjcmliZSA9IHN1YnNjcmliZSwNCiAgICB9DQplbmQpKCkNCg0KDQotLSBIVURDb250YWluZXIgaXMgYW4gYWJzdHJhY3Qgc3VwZXIgY2xhc3MNCkhVRENvbnRhaW5lciA9IHt9DQpIVURDb250YWluZXJfbXQgPSB7X19pbmRleCA9IEhVRENvbnRhaW5lcn0NCg0KZnVuY3Rpb24gSFVEQ29udGFpbmVyOm1vdmUobmV3eCwgbmV3eSkNCiAgICBzZWxmLnkgPSBuZXd5DQogICAgc2VsZi54ID0gbmV3eA0KICAgIGZvciBpbnNldCwgaHVkIGluIHBhaXJzKHNlbGYuaHVkcykgZG8NCiAgICAgICAgaHVkOlNldFBvc2l0aW9uKHNlbGYueCArIGluc2V0LCBzZWxmLnkpDQogICAgZW5kDQplbmQNCg0KZnVuY3Rpb24gSFVEQ29udGFpbmVyOm1vdmVSZWxhdGl2ZShkaWZmeCwgZGlmZnkpDQogICAgc2VsZjptb3ZlKHNlbGYueCArIGRpZmZ4LCBzZWxmLnkgKyBkaWZmeSkNCmVuZA0KDQpIZWFkZXJIVURDb250YWluZXIgPSB7fQ0KSGVhZGVySFVEQ29udGFpbmVyX210ID0ge19faW5kZXggPSBIZWFkZXJIVURDb250YWluZXJ9DQoNCmZ1bmN0aW9uIEhlYWRlckhVRENvbnRhaW5lci5uZXcodGl0bGUsIHBhcmVudCwgaW5zZXQsIHNpZ25hbGtleSkNCiAgICBsb2NhbCBjID0ge30NCiAgICBzZXRtZXRhdGFibGUoYywgSGVhZGVySFVEQ29udGFpbmVyX210KQ0KDQogICAgYy54ID0gMA0KICAgIGMueSA9IDAgDQogICAgYy5oZWlnaHQgPSBIaWRkZW5Db25maWcueVN0YW5kYXJkSGVpZ2h0DQoNCiAgICBjLmh1ZHMgPSB7fQ0KDQogICAgbG9jYWwgaW5zZXQgPSBpbnNldCBvciBIaWRkZW5Db25maWcueEhlYWRlckluc2V0DQoNCiAgICBjLmhlYWRlckhVRCA9IEhVRC5OZXcoYy54ICsgaW5zZXQsIGMueSwgdGl0bGUsIEhpZGRlbkNvbmZpZy5oZWFkZXJDb2xvci5yLCBIaWRkZW5Db25maWcuaGVhZGVyQ29sb3IuZywgSGlkZGVuQ29uZmlnLmhlYWRlckNvbG9yLmIpDQogICAgYy5odWRzW2luc2V0XSA9IGMuaGVhZGVySFVEDQoNCiAgICBwYXJlbnQ6YWRkQ2hpbGQoYykNCiAgICBpZiBzaWduYWxrZXkgdGhlbg0KICAgICAgICBTaWduYWwuT25SZWNlaXZlKHNpZ25hbGtleSwgZnVuY3Rpb24oXywgbmFtZSkNCiAgICAgICAgICAgIGMuaGVhZGVySFVEOlNldFRleHQobmFtZSkNCiAgICAgICAgZW5kKQ0KICAgIGVuZA0KDQogICAgcmV0dXJuIGMNCmVuZA0KDQpzZXRtZXRhdGFibGUoSGVhZGVySFVEQ29udGFpbmVyLCB7IF9faW5kZXggPSBIVURDb250YWluZXIsIF9fY2FsbCA9IGZ1bmN0aW9uKF8sIC4uLikgcmV0dXJuIEhlYWRlckhVRENvbnRhaW5lci5uZXcoLi4uKSBlbmQgfSkNCg0KU2NyaXB0TmFtZUhVRENvbnRhaW5lciA9IHt9DQpTY3JpcHROYW1lSFVEQ29udGFpbmVyX210ID0ge19faW5kZXggPSBTY3JpcHROYW1lSFVEQ29udGFpbmVyfQ0KDQpmdW5jdGlvbiBTY3JpcHROYW1lSFVEQ29udGFpbmVyLm5ldyh0aXRsZSwgcGFyZW50LCBpbnNldCwgc2lnbmFsa2V5LCB0cmFuc2Zvcm1lcikNCiAgICBsb2NhbCBjID0ge30NCiAgICBzZXRtZXRhdGFibGUoYywgU2NyaXB0TmFtZUhVRENvbnRhaW5lcl9tdCkNCg0KICAgIGMuaWQgPSAtMSAtLSBUbyBiZSBzZXQgYnkgdGhlIHBhcmVudA0KICAgIGMueCA9IDANCiAgICBjLnkgPSAwIA0KICAgIGMuaGVpZ2h0ID0gMA0KICAgIGMucGFyZW50ID0gcGFyZW50DQoNCiAgICBjLmh1ZHMgPSB7fQ0KDQogICAgbG9jYWwgaW5zZXQgPSBpbnNldCBvciBIaWRkZW5Db25maWcueEhlYWRlckluc2V0DQoNCiAgICBjLmhlYWRlckhVRCA9IEhVRC5OZXcoYy54ICsgaW5zZXQsIGMueSwgdGl0bGUsIEhpZGRlbkNvbmZpZy5rZXlDb2xvci5yLCBIaWRkZW5Db25maWcua2V5Q29sb3IuZywgSGlkZGVuQ29uZmlnLmtleUNvbG9yLmIpDQogICAgYy5odWRzW2luc2V0XSA9IGMuaGVhZGVySFVEDQoNCiAgICBwYXJlbnQ6YWRkQ2hpbGQoYykNCiAgICBTaWduYWwuT25SZWNlaXZlKHNpZ25hbGtleSwgZnVuY3Rpb24oc2VsZiwgbmFtZSkNCiAgICAgICAgbG9jYWwgbmFtZSA9IHRyYW5zZm9ybWVyIGFuZCB0cmFuc2Zvcm1lcihuYW1lKSBvciBuYW1lDQogICAgICAgIGMuaGVhZGVySFVEOlNldFRleHQobmFtZSkNCiAgICAgICAgbG9jYWwgc2l6ZSA9IDMgKiAobmFtZTpsZW4oKSAtIDMpICsgMTMNCiAgICAgICAgbG9jYWwgaW5zZXQgPSA5NS1zaXplDQogICAgICAgIGMuaGVhZGVySFVEOlNldFBvc2l0aW9uKGMueCArIGluc2V0LCBjLnkpDQogICAgICAgIGM6Z3JvdyhIaWRkZW5Db25maWcueVN0YW5kYXJkSGVpZ2h0KQ0KICAgICAgICBzZWxmOkNsb3NlKCkNCiAgICBlbmQpDQoNCiAgICByZXR1cm4gYw0KZW5kDQoNCmZ1bmN0aW9uIFNjcmlwdE5hbWVIVURDb250YWluZXI6Z3JvdyhkaWZmeSkNCiAgICBzZWxmLmhlaWdodCA9IHNlbGYuaGVpZ2h0ICsgZGlmZnkNCiAgICBpZiBzZWxmLnBhcmVudCB0aGVuDQogICAgICAgIGZvciBpZCA9IHNlbGYuaWQgKyAxLCBzZWxmLnBhcmVudC5uZXh0Q2hpbGRJRCAtIDEgZG8NCiAgICAgICAgICAgIHNlbGYucGFyZW50LmNoaWxkcmVuW2lkXTptb3ZlUmVsYXRpdmUoMCwgZGlmZnkpDQogICAgICAgIGVuZA0KICAgICAgICBzZWxmLnBhcmVudDpncm93KGRpZmZ5KQ0KICAgIGVuZA0KZW5kDQoNCg0Kc2V0bWV0YXRhYmxlKFNjcmlwdE5hbWVIVURDb250YWluZXIsIHsgX19pbmRleCA9IEhVRENvbnRhaW5lciwgX19jYWxsID0gZnVuY3Rpb24oXywgLi4uKSByZXR1cm4gU2NyaXB0TmFtZUhVRENvbnRhaW5lci5uZXcoLi4uKSBlbmQgfSkNCg0KRW1wdHlIVURDb250YWluZXIgPSB7fQ0KRW1wdHlIVURDb250YWluZXJfbXQgPSB7X19pbmRleCA9IEVtcHR5SFVEQ29udGFpbmVyfQ0KDQpmdW5jdGlvbiBFbXB0eUhVRENvbnRhaW5lci5uZXcocGFyZW50LCBoZWlnaHQpDQogICAgbG9jYWwgYyA9IHt9DQogICAgc2V0bWV0YXRhYmxlKGMsIEVtcHR5SFVEQ29udGFpbmVyX210KQ0KDQogICAgYy54ID0gMA0KICAgIGMueSA9IDAgDQogICAgYy5oZWlnaHQgPSBoZWlnaHQgb3IgSGlkZGVuQ29uZmlnLnlTdGFuZGFyZEhlaWdodA0KDQogICAgYy5odWRzID0ge30NCg0KICAgIHBhcmVudDphZGRDaGlsZChjKQ0KDQogICAgcmV0dXJuIGMNCmVuZA0KDQpzZXRtZXRhdGFibGUoRW1wdHlIVURDb250YWluZXIsIHsgX19pbmRleCA9IEhVRENvbnRhaW5lciwgX19jYWxsID0gZnVuY3Rpb24oXywgLi4uKSByZXR1cm4gRW1wdHlIVURDb250YWluZXIubmV3KC4uLikgZW5kIH0pDQoNCktleVZhbEhVRENvbnRhaW5lciA9IHt9DQpLZXlWYWxIVURDb250YWluZXJfbXQgPSB7X19pbmRleCA9IEtleVZhbEhVRENvbnRhaW5lcn0NCg0KZnVuY3Rpb24gS2V5VmFsSFVEQ29udGFpbmVyLm5ldyhkZXNjLCBwYXJlbnQpDQogICAgbG9jYWwgYyA9IHt9DQogICAgc2V0bWV0YXRhYmxlKGMsIEtleVZhbEhVRENvbnRhaW5lcl9tdCkNCg0KICAgIGMueCA9IDANCiAgICBjLnkgPSAwIA0KICAgIGMuaGVpZ2h0ID0gSGlkZGVuQ29uZmlnLnlTdGFuZGFyZEhlaWdodA0KICAgIGMuYWNjdW0gPSAwDQoNCiAgICBjLmh1ZHMgPSB7fQ0KDQogICAgYy5rZXlIVUQgPSBIVUQuTmV3KGMueCAsIGMueSwgZGVzYywgSGlkZGVuQ29uZmlnLmtleUNvbG9yLnIsIEhpZGRlbkNvbmZpZy5rZXlDb2xvci5nLCBIaWRkZW5Db25maWcua2V5Q29sb3IuYikNCiAgICBjLmh1ZHNbMF0gPSBjLmtleUhVRA0KICAgIGMudmFsSFVEID0gSFVELk5ldyhjLnggKyBIaWRkZW5Db25maWcueERlc2NXaWR0aCwgYy55LCAiIiwgSGlkZGVuQ29uZmlnLnZhbENvbG9yLnIsIEhpZGRlbkNvbmZpZy52YWxDb2xvci5nLCBIaWRkZW5Db25maWcudmFsQ29sb3IuYikNCiAgICBjLmh1ZHNbSGlkZGVuQ29uZmlnLnhEZXNjV2lkdGhdID0gYy52YWxIVUQNCg0KICAgIHBhcmVudDphZGRDaGlsZChjKQ0KDQogICAgcmV0dXJuIGMNCmVuZA0KDQpzZXRtZXRhdGFibGUoS2V5VmFsSFVEQ29udGFpbmVyLCB7X19pbmRleCA9IEhVRENvbnRhaW5lciwgX19jYWxsID0gZnVuY3Rpb24oXywgLi4uKSByZXR1cm4gS2V5VmFsSFVEQ29udGFpbmVyLm5ldyguLi4pIGVuZH0pDQoNCmZ1bmN0aW9uIEtleVZhbEhVRENvbnRhaW5lcjpzZXRWYWxUZXh0KG5ld1RleHQpDQogICAgc2VsZi52YWxIVUQ6U2V0VGV4dChuZXdUZXh0KQ0KZW5kDQoNCmZ1bmN0aW9uIEtleVZhbEhVRENvbnRhaW5lcjppbmNBY2N1bSh2YWwpDQogICAgc2VsZi5hY2N1bSA9IHNlbGYuYWNjdW0gKyB2YWwNCmVuZA0KDQpmdW5jdGlvbiBLZXlWYWxIVURDb250YWluZXI6Z2V0QWNjdW0obmV3VGV4dCkNCiAgICByZXR1cm4gc2VsZi5hY2N1bQ0KZW5kDQoNCkNvbnRhaW5lckNvbnRhaW5lciA9IHt9DQpDb250YWluZXJDb250YWluZXJfbXQgPSB7X19pbmRleCA9IENvbnRhaW5lckNvbnRhaW5lcn0NCg0KZnVuY3Rpb24gQ29udGFpbmVyQ29udGFpbmVyLm5ldyh4LCB5LCBwYXJlbnQpDQogICAgbG9jYWwgYyA9IHt9DQogICAgc2V0bWV0YXRhYmxlKGMsIENvbnRhaW5lckNvbnRhaW5lcl9tdCkNCg0KICAgIGMuaWQgPSAtMSAtLSBUbyBiZSBzZXQgYnkgdGhlIHBhcmVudA0KICAgIGMueCA9IHgNCiAgICBjLnkgPSB5DQogICAgYy5oZWlnaHQgPSAwDQogICAgYy5wYXJlbnQgPSBwYXJlbnQNCiAgICAtLSBPbmx5IHVzZWQgYnkgdGhvc2UgY29udGFpbmVycyB0aGF0IGNvbnRhaW4gaXRlbSBodWRzDQogICAgYy5jb250YWluZWRJdGVtSURzID0ge30NCg0KICAgIGMuY2hpbGRyZW4gPSB7fQ0KICAgIGMubmV4dENoaWxkSUQgPSAxDQoNCiAgICBpZiBwYXJlbnQgdGhlbg0KICAgICAgICBwYXJlbnQ6YWRkQ2hpbGQoYykNCiAgICBlbmQNCg0KICAgIHJldHVybiBjDQplbmQNCnNldG1ldGF0YWJsZShDb250YWluZXJDb250YWluZXIsIHtfX2NhbGwgPSBmdW5jdGlvbihfLCAuLi4pIHJldHVybiBDb250YWluZXJDb250YWluZXIubmV3KC4uLikgZW5kfSkNCg0KZnVuY3Rpb24gQ29udGFpbmVyQ29udGFpbmVyOmFkZENoaWxkKGNoaWxkKQ0KICAgIGNoaWxkLmlkID0gc2VsZi5uZXh0Q2hpbGRJRA0KICAgIHNlbGYubmV4dENoaWxkSUQgPSBzZWxmLm5leHRDaGlsZElEICsgMQ0KICAgIHRhYmxlLmluc2VydChzZWxmLmNoaWxkcmVuLCBjaGlsZCkNCiAgICBjaGlsZDptb3ZlKHNlbGYueCwgc2VsZi55ICsgc2VsZi5oZWlnaHQpDQogICAgc2VsZjpncm93KGNoaWxkLmhlaWdodCkNCmVuZA0KDQpmdW5jdGlvbiBDb250YWluZXJDb250YWluZXI6Z3JvdyhkaWZmeSkNCiAgICBzZWxmLmhlaWdodCA9IHNlbGYuaGVpZ2h0ICsgZGlmZnkNCiAgICBpZiBzZWxmLnBhcmVudCB0aGVuDQogICAgICAgIGZvciBpZCA9IHNlbGYuaWQgKyAxLCBzZWxmLnBhcmVudC5uZXh0Q2hpbGRJRCAtIDEgZG8NCiAgICAgICAgICAgIHNlbGYucGFyZW50LmNoaWxkcmVuW2lkXTptb3ZlUmVsYXRpdmUoMCwgZGlmZnkpDQogICAgICAgIGVuZA0KICAgICAgICBzZWxmLnBhcmVudDpncm93KGRpZmZ5KQ0KICAgIGVuZA0KZW5kDQoNCmZ1bmN0aW9uIENvbnRhaW5lckNvbnRhaW5lcjptb3ZlUmVsYXRpdmUoeCwgeSkNCiAgICBmb3IgXywgY2hpbGQgaW4gaXBhaXJzKHNlbGYuY2hpbGRyZW4pIGRvDQogICAgICAgIGNoaWxkOm1vdmVSZWxhdGl2ZSh4LCB5KQ0KICAgIGVuZA0KICAgIHNlbGYueCA9IHNlbGYueCArIHgNCiAgICBzZWxmLnkgPSBzZWxmLnkgKyB5DQplbmQNCg0KZnVuY3Rpb24gQ29udGFpbmVyQ29udGFpbmVyOm1vdmUoeCwgeSkNCiAgICBsb2NhbCBkaWZmeCA9IHggLSBzZWxmLngNCiAgICBsb2NhbCBkaWZmeSA9IHkgLSBzZWxmLnkNCiAgICBzZWxmOm1vdmVSZWxhdGl2ZShkaWZmeCwgZGlmZnkpDQplbmQNCg0KSXRlbUhVRENvbnRhaW5lciA9IHt9DQpJdGVtSFVEQ29udGFpbmVyX210ID0ge19faW5kZXggPSBJdGVtSFVEQ29udGFpbmVyfQ0KDQpmdW5jdGlvbiBJdGVtSFVEQ29udGFpbmVyLm5ldyhpZCwgcGFyZW50LCBmb3JtYXRGdW5jKQ0KICAgIGxvY2FsIGMgPSB7fQ0KICAgIHNldG1ldGF0YWJsZShjLCBJdGVtSFVEQ29udGFpbmVyX210KQ0KDQogICAgYy5mb3JtYXRGdW5jID0gZm9ybWF0RnVuYw0KICAgIGMueCA9IDANCiAgICBjLnkgPSAwDQogICAgYy5pdGVtSUQgPSBpZA0KICAgIGMuaGVpZ2h0ID0gSGlkZGVuQ29uZmlnLnlTdGFuZGFyZEhlaWdodA0KICAgIGMuYWNjdW0gPSAwDQoNCiAgICBjLmltYWdlSFVEID0gSFVELk5ldyhjLnggLSBIaWRkZW5Db25maWcueEltYWdlT2Zmc2V0LCBjLnkgKyBIaWRkZW5Db25maWcueUltYWdlT2Zmc2V0LCBpZCwgMCwgMCwgMCkNCiAgICBjLmltYWdlSFVEOlNldEl0ZW1TaXplKEhpZGRlbkNvbmZpZy5pbWFnZVNpemUpDQogICAgYy5rZXlIVUQgPSBIVUQuTmV3KGMueCAsIGMueSwgSXRlbS5HZXROYW1lKGlkKSwgSGlkZGVuQ29uZmlnLmtleUNvbG9yLnIsIEhpZGRlbkNvbmZpZy5rZXlDb2xvci5nLCBIaWRkZW5Db25maWcua2V5Q29sb3IuYikNCiAgICBjLnZhbEhVRCA9IEhVRC5OZXcoYy54ICsgSGlkZGVuQ29uZmlnLnhEZXNjV2lkdGgsIGMueSwgIiIsIEhpZGRlbkNvbmZpZy52YWxDb2xvci5yLCBIaWRkZW5Db25maWcudmFsQ29sb3IuZywgSGlkZGVuQ29uZmlnLnZhbENvbG9yLmIpDQogICAgYzphZGRDb3VudCgwKQ0KICAgIHBhcmVudDphZGRDaGlsZChjKQ0KDQogICAgcmV0dXJuIGMNCmVuZA0KDQpzZXRtZXRhdGFibGUoSXRlbUhVRENvbnRhaW5lciwge19faW5kZXggPSBIVURDb250YWluZXIsIF9fY2FsbCA9IGZ1bmN0aW9uKF8sIC4uLikgcmV0dXJuIEl0ZW1IVURDb250YWluZXIubmV3KC4uLikgZW5kfSkNCg0KZnVuY3Rpb24gSXRlbUhVRENvbnRhaW5lcjphZGRDb3VudChudW0pDQogICAgc2VsZi5hY2N1bSA9IHNlbGYuYWNjdW0gKyBudW0NCiAgICBzZWxmLnZhbEhVRDpTZXRUZXh0KHNlbGYuZm9ybWF0RnVuYyhzZWxmLml0ZW1JRCwgc2VsZi5hY2N1bSkpDQplbmQNCg0KZnVuY3Rpb24gSXRlbUhVRENvbnRhaW5lcjptb3ZlKG5ld3gsIG5ld3kpDQogICAgc2VsZi55ID0gbmV3eQ0KICAgIHNlbGYueCA9IG5ld3gNCiAgICBzZWxmLmltYWdlSFVEOlNldFBvc2l0aW9uKHNlbGYueCArIEhpZGRlbkNvbmZpZy54SW1hZ2VPZmZzZXQsIHNlbGYueSArIEhpZGRlbkNvbmZpZy55SW1hZ2VPZmZzZXQpDQogICAgc2VsZi5rZXlIVUQ6U2V0UG9zaXRpb24oc2VsZi54LCBzZWxmLnkpDQogICAgc2VsZi52YWxIVUQ6U2V0UG9zaXRpb24oc2VsZi54ICsgSGlkZGVuQ29uZmlnLnhEZXNjV2lkdGgsIHNlbGYueSkNCmVuZA0KDQpmdW5jdGlvbiBJdGVtSFVEQ29udGFpbmVyOm1vdmVSZWxhdGl2ZShkaWZmeCwgZGlmZnkpDQogICAgc2VsZjptb3ZlKHNlbGYueCArIGRpZmZ4LCBzZWxmLnkgKyBkaWZmeSkNCmVuZA0KDQpsb2NhbCBmdW5jdGlvbiBsb290Rm9ybWF0RnVuYyhpZCwgY291bnQpDQogICAgcmV0dXJuIHN0cmluZy5mb3JtYXQoIiVkICglZCBncCkiLCBjb3VudCwgY291bnQgKiBEYXRhLmdldFZhbHVlKGlkKSkNCmVuZA0KDQpsb2NhbCBmdW5jdGlvbiB3YXN0ZUZvcm1hdEZ1bmMoaWQsIGNvdW50KQ0KICAgIHJldHVybiBzdHJpbmcuZm9ybWF0KCIlZCAoJWQgZ3ApIiwgY291bnQsIGNvdW50ICogRGF0YS5nZXRDb3N0KGlkKSkNCmVuZA0KDQpsb2NhbCBmdW5jdGlvbiBhY3RpdmVXYXN0ZUZvcm1hdEZ1bmMoaWQsIGNvdW50KQ0KICAgIGxvY2FsIGhvdXIgPSBtYXRoLmZsb29yKGNvdW50IC8gMzYwMCkNCiAgICBsb2NhbCBtaW4gPSBtYXRoLmZsb29yKChjb3VudCAvIDYwKSAlIDYwKQ0KICAgIGxvY2FsIHNlYyA9IG1hdGguZmxvb3IoY291bnQgJSA2MCkNCiAgICByZXR1cm4gc3RyaW5nLmZvcm1hdCgiJTAyLmY6JTAyLmY6JTAyLmYgKCVkIGdwKSIsIGhvdXIsIG1pbiwgc2VjLCBjb3VudCAqIERhdGEuZ2V0Q29zdChpZCkgLyBEYXRhLmR1cmF0aW9uc1tpZF0pDQplbmQNCg0KZnVuY3Rpb24gTG9vdEl0ZW1IVURDb250YWluZXIoaWQsIHBhcmVudCkNCiAgICBsb2NhbCBjID0gSXRlbUhVRENvbnRhaW5lcihpZCwgcGFyZW50LCBsb290Rm9ybWF0RnVuYykNCiAgICBFdmVudHMuc3Vic2NyaWJlKGlkLCBmdW5jdGlvbihkaWZmKQ0KICAgICAgICBjOmFkZENvdW50KGRpZmYpDQogICAgZW5kKQ0KICAgIHJldHVybiBjDQplbmQNCg0KZnVuY3Rpb24gV2FzdGVJdGVtSFVEQ29udGFpbmVyKGlkLCBwYXJlbnQpDQogICAgbG9jYWwgYyA9IEl0ZW1IVURDb250YWluZXIoaWQsIHBhcmVudCwgd2FzdGVGb3JtYXRGdW5jKQ0KICAgIEV2ZW50cy5zdWJzY3JpYmUoaWQgKyBIaWRkZW5Db25maWcuV2FzdGVNb2QsIGZ1bmN0aW9uKGRpZmYpDQogICAgICAgIGM6YWRkQ291bnQoZGlmZikNCiAgICBlbmQpDQogICAgcmV0dXJuIGMNCmVuZA0KDQpmdW5jdGlvbiBBY3RpdmVXYXN0ZUl0ZW1IVURDb250YWluZXIoaWQsIHBhcmVudCkNCiAgICBsb2NhbCBjID0gSXRlbUhVRENvbnRhaW5lcihpZCwgcGFyZW50LCBhY3RpdmVXYXN0ZUZvcm1hdEZ1bmMpDQogICAgRXZlbnRzLnN1YnNjcmliZShpZCArIEhpZGRlbkNvbmZpZy5XYXN0ZU1vZCwgZnVuY3Rpb24oZGlmZikNCiAgICAgICAgYzphZGRDb3VudChkaWZmKQ0KICAgIGVuZCkNCiAgICByZXR1cm4gYw0KZW5kDQoNCkNvbmZpZy5sb2FkQ29uZmlnKCkNCg0KbG9jYWwgZnVuY3Rpb24gZm9ybWF0R2Fpbih0b3RhbCkNCiAgICBpZiB0b3RhbCA+IDFlKzYgdGhlbg0KICAgICAgICByZXR1cm4gc3RyaW5nLmZvcm1hdCgiJS4wMWZrayIsIHRvdGFsLzFlKzYpDQogICAgZWxzZWlmIHRvdGFsID4gMWUrMyB0aGVuDQogICAgICAgIHJldHVybiBzdHJpbmcuZm9ybWF0KCIlLjAxZmsiLCB0b3RhbC8xZSszKQ0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuIHRvc3RyaW5nKG1hdGguZmxvb3IodG90YWwpKQ0KICAgIGVuZA0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIGxlZnRYKHNjcmVlbikNCiAgICByZXR1cm4gbWF0aC5tYXgobWF0aC5mbG9vcigoc2NyZWVuLmdhbWV3aW5kb3d4IC0gSGlkZGVuQ29uZmlnLnBhbmVsV2lkdGgpIC8gMiksIDEwKQ0KZW5kDQoNCmxvY2FsIGZ1bmN0aW9uIHJpZ2h0WChzY3JlZW4pDQogICAgbG9jYWwgeFJpZ2h0QmFzZSA9IHNjcmVlbi5nYW1ld2luZG93eCArIHNjcmVlbi5nYW1ld2luZG93dw0KICAgIHJldHVybiBtYXRoLmZsb29yKChzY3JlZW4uZXF3aW5kb3d4IC0gSGlkZGVuQ29uZmlnLnBhbmVsV2lkdGggLSB4UmlnaHRCYXNlKSAvIDIpICsgeFJpZ2h0QmFzZQ0KZW5kDQoNCmxvY2FsIHNjcmVlbiA9IEhVRC5HZXRNYWluV2luZG93RGltZW5zaW9ucygpDQpsb2NhbCBsZWZ0eCA9IGxlZnRYKHNjcmVlbikNCmxvY2FsIHJpZ2h0eCA9IHJpZ2h0WChzY3JlZW4pDQoNCi0tIENyZWF0ZSB0aGUgbGVmdCBjb2x1bW4gb2YgdGhlIEhVRA0KbG9jYWwgbGVmdENvbHVtbiA9IENvbnRhaW5lckNvbnRhaW5lcihsZWZ0eCwgSGlkZGVuQ29uZmlnLnlJbnNldCkNCmxvY2FsIHRpdGxlID0gSGVhZGVySFVEQ29udGFpbmVyKCJzaEFkT3dIVUQiLCBsZWZ0Q29sdW1uLCBIaWRkZW5Db25maWcueFRpdGxlSW5zZXQpDQpsb2NhbCBzY3JpcHQgPSBTY3JpcHROYW1lSFVEQ29udGFpbmVyKCIiLCBsZWZ0Q29sdW1uLCAwLCAic2NyaXB0IG5hbWUiKQ0KbG9jYWwgc2NyaXB0ID0gU2NyaXB0TmFtZUhVRENvbnRhaW5lcigiIiwgbGVmdENvbHVtbiwgMCwgInNjcmlwdCBhdXRob3IiLCBmdW5jdGlvbihhdXRob3IpDQogICAgcmV0dXJuICJieSAiIC4uIGF1dGhvcg0KZW5kKQ0KDQotLSBHZW5lcmFsIHN0YXRpc3RpY3MNCmxvY2FsIHBpbmcgPSBLZXlWYWxIVURDb250YWluZXIoIlBpbmc6IiwgbGVmdENvbHVtbikNCkV2ZW50cy5zdWJzY3JpYmUoImdlbmVyYWwiLCBmdW5jdGlvbihnZW5lcmFsKQ0KICAgIHBpbmc6c2V0VmFsVGV4dChnZW5lcmFsLnBpbmcgLi4gIiBtcyIpDQplbmQpDQoNCmxvY2FsIGxldmVsID0gS2V5VmFsSFVEQ29udGFpbmVyKCJMZXZlbDoiLCBsZWZ0Q29sdW1uKQ0KRXZlbnRzLnN1YnNjcmliZSgiZ2VuZXJhbCIsIGZ1bmN0aW9uKGdlbmVyYWwpDQogICAgbGV2ZWw6c2V0VmFsVGV4dCh0b3N0cmluZyhnZW5lcmFsLmxldmVsKSkNCmVuZCkNCg0KbG9jYWwgc3RhbWluYSA9IEtleVZhbEhVRENvbnRhaW5lcigiU3RhbWluYToiLCBsZWZ0Q29sdW1uKQ0KRXZlbnRzLnN1YnNjcmliZSgiZ2VuZXJhbCIsIGZ1bmN0aW9uKGdlbmVyYWwpDQogICAgbG9jYWwgdG90YWxTdGFtaW5hID0gZ2VuZXJhbC5zdGFtaW5hDQogICAgbG9jYWwgc3RhbWluYUggPSBtYXRoLmZsb29yKHRvdGFsU3RhbWluYS82MCkNCiAgICBsb2NhbCBzdGFtaW5hTSA9IHRvdGFsU3RhbWluYSAlIDYwDQogICAgc3RhbWluYTpzZXRWYWxUZXh0KHN0cmluZy5mb3JtYXQoIiUwMi5mOiUwMi5mIiwgc3RhbWluYUgsIHN0YW1pbmFNKSkNCmVuZCkNCg0KbG9jYWwgc2Vzc2lvbiA9IEtleVZhbEhVRENvbnRhaW5lcigiU2Vzc2lvbiBMZW5ndGg6IiwgbGVmdENvbHVtbikNCkV2ZW50cy5zdWJzY3JpYmUoImdlbmVyYWwiLCBmdW5jdGlvbihnZW5lcmFsKQ0KICAgIGxvY2FsIHRvdGFsU2Vjb25kcyA9IGdlbmVyYWwudXNlZFNlY29uZHMNCiAgICBsb2NhbCBzZWNvbmRzID0gbWF0aC5mbG9vcih0b3RhbFNlY29uZHMgJSA2MCkNCiAgICBsb2NhbCBtaW51dGVzID0gbWF0aC5mbG9vcih0b3RhbFNlY29uZHMvNjAgJSA2MCkNCiAgICBsb2NhbCBob3VycyA9IG1hdGguZmxvb3IodG90YWxTZWNvbmRzLzM2MDApDQogICAgbG9jYWwgZm9ybWF0dGVkID0gc3RyaW5nLmZvcm1hdCgiJTAyLmY6JTAyLmY6JTAyLmYiLCBob3VycywgbWludXRlcywgc2Vjb25kcykNCiAgICBzZXNzaW9uOnNldFZhbFRleHQoZm9ybWF0dGVkKQ0KZW5kKQ0KDQpsb2NhbCBiYW5rQmFsYW5jZSA9IEtleVZhbEhVRENvbnRhaW5lcigiQmFsYW5jZToiLCBsZWZ0Q29sdW1uKQ0KRXZlbnRzLnN1YnNjcmliZSgiZ2VuZXJhbCIsIGZ1bmN0aW9uKGdlbmVyYWwpDQogICAgYmFua0JhbGFuY2U6c2V0VmFsVGV4dChzdHJpbmcuZm9ybWF0KCIlcyBncCIsIGZvcm1hdEdhaW4oZ2VuZXJhbC5iYWxhbmNlKSkpDQplbmQpDQoNCmxvY2FsIHRpbWVUb0xldmVsID0gS2V5VmFsSFVEQ29udGFpbmVyKCJUaW1lIHRvIGxldmVsOiIsIGxlZnRDb2x1bW4pDQpFdmVudHMuc3Vic2NyaWJlKCJnZW5lcmFsIiwgZnVuY3Rpb24oZ2VuZXJhbCkNCiAgICBsb2NhbCB0b3RhbFNlY29uZHMgPSBnZW5lcmFsLnRpbWVUb0xldmVsDQogICAgbG9jYWwgbWludXRlcyA9IG1hdGguZmxvb3IodG90YWxTZWNvbmRzLzYwICUgNjApDQogICAgbG9jYWwgaG91cnMgPSBtYXRoLmZsb29yKHRvdGFsU2Vjb25kcy8zNjAwKQ0KICAgIGxvY2FsIGZvcm1hdHRlZCA9IHN0cmluZy5mb3JtYXQoIiUwMi5mOiUwMi5mIiwgaG91cnMsIG1pbnV0ZXMpDQogICAgdGltZVRvTGV2ZWw6c2V0VmFsVGV4dCh0b3RhbFNlY29uZHMgPT0gLTEgYW5kICItLSIgb3IgZm9ybWF0dGVkKQ0KZW5kKQ0KDQotLSBFeHAgZ2Fpbg0KRW1wdHlIVURDb250YWluZXIobGVmdENvbHVtbikNCmxvY2FsIGV4cFBlckggPSBLZXlWYWxIVURDb250YWluZXIoIkV4cDoiLCBsZWZ0Q29sdW1uKQ0KRXZlbnRzLnN1YnNjcmliZSgiZ2VuZXJhbCIsIGZ1bmN0aW9uKGdlbmVyYWwpDQogICAgbG9jYWwgZXhwSEsgPSBnZW5lcmFsLmV4cEggLyAxMDAwDQogICAgZXhwUGVySDpzZXRWYWxUZXh0KHN0cmluZy5mb3JtYXQoIiUuMDFmIGsvaCIsIGV4cEhLKSkNCmVuZCkNCmxvY2FsIGV4cFBlclNIID0gS2V5VmFsSFVEQ29udGFpbmVyKCIiLCBsZWZ0Q29sdW1uKQ0KRXZlbnRzLnN1YnNjcmliZSgiZ2VuZXJhbCIsIGZ1bmN0aW9uKGdlbmVyYWwpDQogICAgbG9jYWwgZXhwU0hLID0gZ2VuZXJhbC5leHBTSCAvIDEwMDANCiAgICBleHBQZXJTSDpzZXRWYWxUZXh0KHN0cmluZy5mb3JtYXQoIiUuMDFmIGsvc2giLCBleHBTSEspKQ0KZW5kKQ0KDQotLSBQcm9maXQgZ2Fpbg0KRW1wdHlIVURDb250YWluZXIobGVmdENvbHVtbikNCmxvY2FsIHByb2ZpdHNQZXJIID0gS2V5VmFsSFVEQ29udGFpbmVyKCJQcm9maXRzOiIsIGxlZnRDb2x1bW4pDQpFdmVudHMuc3Vic2NyaWJlKCJnZW5lcmFsIiwgZnVuY3Rpb24oZ2VuZXJhbCkNCiAgICBsb2NhbCBwcm9maXRzSEsgPSBnZW5lcmFsLnByb2ZpdHNIIC8gMTAwMA0KICAgIHByb2ZpdHNQZXJIOnNldFZhbFRleHQoc3RyaW5nLmZvcm1hdCgiJS4wMWYgay9oIiwgcHJvZml0c0hLKSkNCmVuZCkNCmxvY2FsIHByb2ZpdHNQZXJTSCA9IEtleVZhbEhVRENvbnRhaW5lcigiIiwgbGVmdENvbHVtbikNCkV2ZW50cy5zdWJzY3JpYmUoImdlbmVyYWwiLCBmdW5jdGlvbihnZW5lcmFsKQ0KICAgIGxvY2FsIHByb2ZpdHNTSEsgPSBnZW5lcmFsLnByb2ZpdHNTSCAvIDEwMDANCiAgICBwcm9maXRzUGVyU0g6c2V0VmFsVGV4dChzdHJpbmcuZm9ybWF0KCIlLjAxZiBrL3NoIiwgcHJvZml0c1NISykpDQplbmQpDQoNCi0tIFRvdGFscw0KRW1wdHlIVURDb250YWluZXIobGVmdENvbHVtbikNCmxvY2FsIGV4cFRvdGFsID0gS2V5VmFsSFVEQ29udGFpbmVyKCJUb3RhbHM6IiwgbGVmdENvbHVtbikNCkV2ZW50cy5zdWJzY3JpYmUoImdlbmVyYWwiLCBmdW5jdGlvbihnZW5lcmFsKSANCiAgICBleHBUb3RhbDpzZXRWYWxUZXh0KHN0cmluZy5mb3JtYXQoIiVzIGV4cCIsIGZvcm1hdEdhaW4oZ2VuZXJhbC5nYWluZWRFeHApKSkNCmVuZCkNCmxvY2FsIHByb2ZpdHNUb3RhbCA9IEtleVZhbEhVRENvbnRhaW5lcigiIiwgbGVmdENvbHVtbikNCkV2ZW50cy5zdWJzY3JpYmUoImdlbmVyYWwiLCBmdW5jdGlvbihnZW5lcmFsKQ0KICAgIHByb2ZpdHNUb3RhbDpzZXRWYWxUZXh0KHN0cmluZy5mb3JtYXQoIiVzIGdwIiwgZm9ybWF0R2FpbihnZW5lcmFsLnRvdGFsUHJvZml0KSkpDQplbmQpDQoNCi0tIFJpZ2h0IENvbHVtbg0KbG9jYWwgcmlnaHRDb2x1bW4gPSBDb250YWluZXJDb250YWluZXIocmlnaHR4LCBIaWRkZW5Db25maWcueUluc2V0KQ0KbG9jYWwgbG9vdCA9IENvbnRhaW5lckNvbnRhaW5lcigwLCAwLCByaWdodENvbHVtbikNCmxvY2FsIHdhc3RlID0gQ29udGFpbmVyQ29udGFpbmVyKDAsIDAsIHJpZ2h0Q29sdW1uKQ0KDQotLSBXYXN0ZQ0KRW1wdHlIVURDb250YWluZXIod2FzdGUpDQpsb2NhbCB3YXN0ZUhlYWRlciA9IEhlYWRlckhVRENvbnRhaW5lcigiV0FTVEUiLCB3YXN0ZSkNCkVtcHR5SFVEQ29udGFpbmVyKHdhc3RlLCAxMCkNCg0KbG9jYWwgd2FzdGVQYXJ0cyA9IENvbnRhaW5lckNvbnRhaW5lcigwLCAwLCB3YXN0ZSkNCkV2ZW50cy5zdWJzY3JpYmUoIm5ld1dhc3RlSURzIiwgZnVuY3Rpb24obmV3aWRzKQ0KICAgIGZvciBfLCBpZCBpbiBpcGFpcnMobmV3aWRzKSBkbw0KICAgICAgICBpZiBub3Qgd2FzdGVQYXJ0cy5jb250YWluZWRJdGVtSURzW2lkXSB0aGVuDQogICAgICAgICAgICBpZiBEYXRhLmR1cmF0aW9uc1tpZF0gdGhlbg0KICAgICAgICAgICAgICAgIEFjdGl2ZVdhc3RlSXRlbUhVRENvbnRhaW5lcihpZCwgd2FzdGVQYXJ0cykNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBXYXN0ZUl0ZW1IVURDb250YWluZXIoaWQsIHdhc3RlUGFydHMpDQogICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIHdhc3RlUGFydHMuY29udGFpbmVkSXRlbUlEc1tpZF0gPSB0cnVlDQogICAgICAgIGVuZA0KICAgIGVuZA0KZW5kKQ0KDQpsb2NhbCB3YXN0ZVN1bSA9IENvbnRhaW5lckNvbnRhaW5lcigwLCAwLCB3YXN0ZSkNCkVtcHR5SFVEQ29udGFpbmVyKHdhc3RlU3VtKQ0KbG9jYWwgdG90YWxXYXN0ZSA9IEtleVZhbEhVRENvbnRhaW5lcigiV2FzdGVkOiIsIHdhc3RlU3VtKQ0KRXZlbnRzLnN1YnNjcmliZSgiZ2VuZXJhbCIsIGZ1bmN0aW9uKGdlbmVyYWwpDQogICAgdG90YWxXYXN0ZTpzZXRWYWxUZXh0KHN0cmluZy5mb3JtYXQoIiVkIGdwIiwgZ2VuZXJhbC50b3RhbFdhc3RlKSkNCmVuZCkNCg0KLS0gTG9vdA0KbG9jYWwgbG9vdEhlYWRlciA9IEhlYWRlckhVRENvbnRhaW5lcigiTE9PVCIsIGxvb3QpDQpFbXB0eUhVRENvbnRhaW5lcih3YXN0ZSwgMTApDQoNCmxvY2FsIGxvb3RQYXJ0cyA9IENvbnRhaW5lckNvbnRhaW5lcigwLCAwLCBsb290KQ0KRXZlbnRzLnN1YnNjcmliZSgibmV3TG9vdElEcyIsIGZ1bmN0aW9uKG5ld2lkcykNCiAgICBmb3IgXywgaWQgaW4gaXBhaXJzKG5ld2lkcykgZG8NCiAgICAgICAgaWYgbm90IGxvb3RQYXJ0cy5jb250YWluZWRJdGVtSURzW2lkXSB0aGVuDQogICAgICAgICAgICBMb290SXRlbUhVRENvbnRhaW5lcihpZCwgbG9vdFBhcnRzKQ0KICAgICAgICAgICAgbG9vdFBhcnRzLmNvbnRhaW5lZEl0ZW1JRHNbaWRdID0gdHJ1ZQ0KICAgICAgICBlbmQNCiAgICBlbmQNCmVuZCkNCg0KbG9jYWwgbG9vdFN1bSA9IENvbnRhaW5lckNvbnRhaW5lcigwLCAwLCBsb290KQ0KRW1wdHlIVURDb250YWluZXIobG9vdFN1bSkNCmxvY2FsIHRvdGFsTG9vdCA9IEtleVZhbEhVRENvbnRhaW5lcigiTG9vdGVkOiIsIGxvb3RTdW0pDQpFdmVudHMuc3Vic2NyaWJlKCJnZW5lcmFsIiwgZnVuY3Rpb24oZ2VuZXJhbCkNCiAgICB0b3RhbExvb3Q6c2V0VmFsVGV4dChzdHJpbmcuZm9ybWF0KCIlZCBncCIsIGdlbmVyYWwudG90YWxMb290KSkNCmVuZCkNCg0KDQpNb2R1bGUoIlJlc2l6ZXIiLCBmdW5jdGlvbihtb2R1bGUpDQogICAgbG9jYWwgbmV3U2NyZWVuID0gSFVELkdldE1haW5XaW5kb3dEaW1lbnNpb25zKCkNCg0KICAgIGxvY2FsIG5ld0xlZnR4ID0gbGVmdFgobmV3U2NyZWVuKQ0KICAgIGlmIG5ld0xlZnR4IH49IGxlZnR4IHRoZW4NCiAgICAgICAgbGVmdHggPSBuZXdMZWZ0eA0KICAgICAgICBsZWZ0Q29sdW1uOm1vdmUobGVmdHgsIEhpZGRlbkNvbmZpZy55SW5zZXQpDQogICAgZW5kDQoNCiAgICBsb2NhbCBuZXdSaWdodHggPSByaWdodFgobmV3U2NyZWVuKQ0KICAgIGlmIG5ld1JpZ2h0eCB+PSByaWdodHggdGhlbg0KICAgICAgICByaWdodHggPSBuZXdSaWdodHgNCiAgICAgICAgcmlnaHRDb2x1bW46bW92ZShyaWdodHgsIEhpZGRlbkNvbmZpZy55SW5zZXQpDQogICAgZW5kDQoNCiAgICBtb2R1bGU6RGVsYXkoMTAwMCkNCmVuZCk=]]></script> <script name="summon.lua"><![CDATA[d2hpbGUgKHRydWUpIGRvDQpTZWxmLkNhc3QoInV0ZXZvIGdyYW4gcmVzIHNhYyIpDQp3YWl0ICgxODAwMDAwKQ0KZW5k]]></script> </control> </panel> <panel name="Advertising"> <control name="watchSellingWords" value="item, item2"/> <control name="watchSellingEnable" value="0"/> <control name="watchBuyingWords" value="item, item2"/> <control name="watchBuyingEnable" value="0"/> <control name="blockLinksEnable" value="0"/> <control name="reduceSpamEnable" value="0"/> </panel>
    1 punkt
×
×
  • Dodaj nową pozycję...