eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOwpkZWZpbmUoJ0hBU0hfS0VZJywgJ2Q4NzU0YjQ1NjNhZDlhYmVlZmY0NDk3NjhlYzYzMTg0Jyk7CmZ1bmN0aW9uIF9pc0pzb24oJHN0cmluZykgewogICAgQGpzb25fZGVjb2RlKCRzdHJpbmcpOwogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2pzb25fbGFzdF9lcnJvcicpKSB7IHJldHVybiB0cnVlOyB9CiAgICByZXR1cm4gKEBqc29uX2xhc3RfZXJyb3IoKSA9PSBKU09OX0VSUk9SX05PTkUpOwp9CiMjI0JFR0lOIExJQ0VOU0UgS0VZIyMjCmZ1bmN0aW9uIF9zeXNUbXBEaXIoKQp7CiAgICAkaW5pX3ZhbCA9IEBpbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpOwogICAgJHVwbG9hZF90bXBfZGlyID0gJGluaV92YWwgPyAkaW5pX3ZhbCA6IEBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICBpZiAoQGlzX3dyaXRhYmxlKCR1cGxvYWRfdG1wX2RpcikpIHsKICAgICAgICByZXR1cm4gJHVwbG9hZF90bXBfZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgIH0gZWxzZSB7CiAgICAgICAgJHRtcF9kaXIgPSBESVJFQ1RPUllfU0VQQVJBVE9SIC4gInRtcCIgLiBESVJFQ1RPUllfU0VQQVJBVE9SOwogICAgICAgIGlmIChAaXNfd3JpdGFibGUoJHRtcF9kaXIpKSB7CiAgICAgICAgICAgIHJldHVybiAkdG1wX2RpcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoQGlzX3dyaXRhYmxlKCIuIiAuIERJUkVDVE9SWV9TRVBBUkFUT1IpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIi4iIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKZnVuY3Rpb24gX2ZpbmRIb21lV1AoKQp7CiAgICAkZG93biA9IHJlYWxwYXRoKGRpcm5hbWUoX19GSUxFX18pKSAuIERJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICBmb3IgKCRpID0gMDsgJGkgPCAzMDsgJGkrKykgewogICAgICAgIGlmIChAaXNfZmlsZSgkZG93biAuICJ3cC1jb25maWcucGhwIikpIHsKICAgICAgICAgICAgcmV0dXJuICRkb3duOwogICAgICAgIH0KICAgICAgICAkZG93biA9ICRkb3duIC4gIi4uIiAuIERJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9maW5kSG9tZUluZGV4KCkKewogICAgJGRvd24gPSByZWFscGF0aChkaXJuYW1lKF9fRklMRV9fKSkgLiBESVJFQ1RPUllfU0VQQVJBVE9SOwogICAgZm9yICgkaSA9IDA7ICRpIDwgMzA7ICRpKyspIHsKICAgICAgICBpZiAoQGlzX2ZpbGUoJGRvd24gLiAiaW5kZXgucGhwIikpIHsKICAgICAgICAgICAgcmV0dXJuICRkb3duOwogICAgICAgIH0KICAgICAgICAkZG93biA9ICRkb3duIC4gIi4uIiAuIERJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9maW5kSG9tZSgpCnsKICAgICRob21ld3AgPSBAX2ZpbmRIb21lV1AoKTsKICAgIGlmICgkaG9tZXdwKSB7CiAgICAgICAgcmV0dXJuIEByZWFscGF0aCgkaG9tZXdwIC4gRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICB9IGVsc2UgewogICAgICAgICRob21lX3BhdGggPSBAX2ZpbmRIb21lSW5kZXgoKTsKICAgICAgICBpZiAoJGhvbWVfcGF0aCkgewogICAgICAgICAgICByZXR1cm4gQHJlYWxwYXRoKCRob21lX3BhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBfZGlyV3JpdGFibGUoKQp7CiAgICAkZCA9IERJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICAkcGF0aHMgPSBhcnJheSgid3AtY29udGVudCIgLiAkZCAuICJ1cGxvYWRzIiwgIndwLWNvbnRlbnQiLCAidXBsb2FkIiwgInVwbG9hZHMiLCAidGVtcCIsICJ0bXAiLCAiaW1hZ2VzIik7CiAgICAkaG9tZV9wYXRoID0gQF9maW5kSG9tZSgpOwogICAgaWYgKCRob21lX3BhdGgpIHsKICAgICAgICBpZiAoQGlzX3dyaXRhYmxlKCRob21lX3BhdGgpKSB7CiAgICAgICAgICAgIHJldHVybiAkaG9tZV9wYXRoIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgICAgICB9CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHBhdGhzKTsgJGkrKykgewogICAgICAgICAgICAkY2hlY2tfcGF0aCA9ICRob21lX3BhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHBhdGhzWyRpXSAuIERJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICAgICAgICAgIGlmIChAaXNfd3JpdGFibGUoJGNoZWNrX3BhdGgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNoZWNrX3BhdGg7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEBfc3lzVG1wRGlyKCk7CiAgICB9CiAgICByZXR1cm4gQF9zeXNUbXBEaXIoKTsKfQoKZnVuY3Rpb24gX2dldFRtcERpcigpCnsKICAgICR0bXBfZGlyID0gQF9kaXJXcml0YWJsZSgpIC4gIi5jYWNoZSIgLiBESVJFQ1RPUllfU0VQQVJBVE9SOwogICAgaWYgKCFAaXNfZGlyKCR0bXBfZGlyKSkgewogICAgICAgIEBta2RpcigkdG1wX2Rpcik7CiAgICB9CiAgICBpZiAoQGlzX2RpcigkdG1wX2RpcikpIHsKICAgICAgICByZXR1cm4gJHRtcF9kaXI7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKZnVuY3Rpb24gX2dldFVyaSgpewogICAgJHVyaSA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgaWYgKCBzdHJwb3MoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sICc/ZG9pbmdfd3BfY3Jvbj0nKSAhPT0gZmFsc2UgKSB7CiAgICAgICAgJHVyaSA9IHN1YnN0cigkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSwgMCwgc3RycG9zKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAiP2RvaW5nX3dwX2Nyb249IikpOwogICAgfQogICAgcmV0dXJuICR1cmk7Cn0KCmRlZmluZSgnVE1QX0RJUicsIEBfZ2V0VG1wRGlyKCkpOwpkZWZpbmUoJ1JFUVVFU1RfVVJJJywgQF9nZXRVcmkoKSk7CmRlZmluZSgnUFJFRklYJywgJ0BAQCcpOwpkZWZpbmUoJ0VORF9HRVQnLCAnRU5EX0dFVCcpOwpkZWZpbmUoJ0VORF9SRVEnLCAnRU5EX1JFUScpOwpkZWZpbmUoJ1NUQVJUX0dFVCcsICdTVEFSVF9HRVQnKTsKZGVmaW5lKCdTVEFSVF9SRVEnLCAnU1RBUlRfUkVRJyk7CmRlZmluZSgnU1RBUlRfU1lOQycsICdTVEFSVF9TWU5DJyk7CmRlZmluZSgnRU5EX1NZTkMnLCAnRU5EX1NZTkMnKTsKZGVmaW5lKCdTVEFSVF9URVhUJywgJ1NUQVJUX1RFWFQnKTsKZGVmaW5lKCdFTkRfVEVYVCcsICdFTkRfVEVYVCcpOwpkZWZpbmUoJ0dFVF9ET05FJywgJ1VQREFURURPTkUnKTsKZGVmaW5lKCdSRVFfRE9ORScsICdSRVFVRVNURE9ORScpOwpkZWZpbmUoJ0RFTF9ET05FJywgJ0RFTEVURURPTkUnKTsKZGVmaW5lKCdHRVRfRVJST1InLCAnVVBEQVRFRVJST1InKTsKZGVmaW5lKCdSRVFfRVJST1InLCAnUkVRVUVTVEVSUk9SJyk7CmRlZmluZSgnREVMX0VSUk9SJywgJ0RFTEVURUVSUk9SJyk7CmRlZmluZSgnUk9PVF9LRVknLCAnODdmYWU5MzNjZWEyOGI0OGJkZDNmNGVlM2MzNmE0YjknKTsKZGVmaW5lKCdSRVFVRVNUUycsIEBfaG9zdEZpbGVuYW1lKCcyNWI2ZjMwMjNlYzRlZTI2MWJiZjkyNDQ0YzcyNjNkYycpKTsKZGVmaW5lKCdTRVRSQUZGSUMnLCBAX2hvc3RGaWxlbmFtZSgnMTAzZDAxMzU0NzkzZjY3MTFmMWQxNjg5NjNhN2YzOTYnKSk7CmRlZmluZSgnQ0FDSEVfRklMRVMnLCBzZXJpYWxpemUoYXJyYXkoJ1BPU1RTX0ZJTEUnID0+ICcwZWYwNzFkOTQ0MDY2ZDcyOTdjNDc5ZDkwMDJhOWI3OScsICdQQUdFU19GSUxFJyA9PiAnZmNlYzdlZjBiYTM5ZTA5NWJiYzljNDZlMDM4ZjM5MGQnLCAnQUdFTlRTX0ZJTEUnID0+ICc2NmU5NWE2MzkwNWExYWZjZGFmYjE1NWViNDBlZDE2MCcsICdBRE1JTlNfRklMRScgPT4gJzY4NzY1NGRlN2YwZTczMjVjYzQ2MTkxMjJmOTUyZTMxJywgJ0lQQk9UU19GSUxFJyA9PiAnMWRlNzcxNzlhNzMxMzJkN2I0MWJhODgxZGY2NjgyMGMnLCAnUkVGRVJFUlNfRklMRScgPT4gJ2RjNzc0NjNmMDM2NzllYTZmNTY5ZDkyOGEwMTNkNWIyJywgJ1NFVFRJTkdTX0ZJTEUnID0+ICdjNWUzNTU2NTgwNGY1MmI1MDk4OGIzYzNkMGUxYjM4ZicsICdSRURJUkVDVF9GSUxFJyA9PiAnMzc4YjkxYTAwZGI2MWM2ZDE0Y2Q2MzllNDBlYmM5NzgnLCAnUkVESVJFQ1RTX0ZJTEUnID0+ICc1ZTMxNTE3OTZhMzc2NzJiZWRmOWIyYTk4YzljNjQ5OCcpKSk7CmZvcmVhY2ggKHVuc2VyaWFsaXplKENBQ0hFX0ZJTEVTKSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgZGVmaW5lKCRrZXksIEBfaG9zdEZpbGVuYW1lKCR2YWx1ZSkpOwp9CmlmICghYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9VU0VSX0FHRU5UJywgJF9TRVJWRVIpKSB7CiAgICAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10gPSAnJzsKfQppZiAoIWFycmF5X2tleV9leGlzdHMoJ1JFTU9URV9BRERSJywgJF9TRVJWRVIpKSB7CiAgICAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSA9ICcnOwp9CmlmICghYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9SRUZFUkVSJywgJF9TRVJWRVIpKSB7CiAgICAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10gPSAnJzsKfQppZiAoIWFycmF5X2tleV9leGlzdHMoJ0hUVFBfUkVGRVJFUicsICRfU0VSVkVSKSkgewogICAgJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddID0gJyc7Cn0KaWYgKCFlbXB0eSgkX1NFUlZFUlsiSFRUUF9YX0ZPUldBUkRFRF9GT1IiXSkpIHsKICAgICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdID0gJF9TRVJWRVJbIkhUVFBfWF9GT1JXQVJERURfRk9SIl07Cn0KCmZ1bmN0aW9uIF9nZXRJcEFkZHJlc3MoKQp7CiAgICBmb3JlYWNoIChhcnJheSgnSFRUUF9DTElFTlRfSVAnLAogICAgICAgICAgICAgICAgICdIVFRQX1hfRk9SV0FSREVEX0ZPUicsCiAgICAgICAgICAgICAgICAgJ0hUVFBfWF9GT1JXQVJERUQnLAogICAgICAgICAgICAgICAgICdIVFRQX1hfQ0xVU1RFUl9DTElFTlRfSVAnLAogICAgICAgICAgICAgICAgICdIVFRQX0ZPUldBUkRFRF9GT1InLAogICAgICAgICAgICAgICAgICdIVFRQX0ZPUldBUkRFRCcsCiAgICAgICAgICAgICAgICAgJ1JFTU9URV9BRERSJykgYXMgJGtleSkgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRrZXksICRfU0VSVkVSKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICBmb3JlYWNoIChleHBsb2RlKCcsJywgJF9TRVJWRVJbJGtleV0pIGFzICRJUGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICRJUGFkZHJlc3MgPSB0cmltKCRJUGFkZHJlc3MpOwogICAgICAgICAgICAgICAgcmV0dXJuICRJUGFkZHJlc3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJzAuMC4wLjAnOwp9CgpmdW5jdGlvbiBfaXNCb3RBZ2VudCgkdWEpCnsKICAgICRjYWNoZSA9IHVuc2VyaWFsaXplKENBQ0hFX0FHRU5UUyk7CiAgICAkdWEgPSBzdHJ0b2xvd2VyKCR1YSk7CiAgICAkdWFCbGFjayA9ICRjYWNoZS0+eydibGFjayd9OwogICAgJHVhTGlzdCA9ICRjYWNoZS0+eyd1YWJvdHMnfTsKICAgIGZvcmVhY2ggKCR1YUJsYWNrIGFzICRpdWEpIHsKICAgICAgICAkaXVhID0gc3RydG9sb3dlcigkaXVhKTsKICAgICAgICBpZiAoc3RycG9zKCR1YSwgJGl1YSkgfHwgJHVhID09ICRpdWEpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgIGZvcmVhY2ggKCR1YUxpc3QgYXMgJGl1YSkgewogICAgICAgICRpdWEgPSBzdHJ0b2xvd2VyKCRpdWEpOwogICAgICAgIGlmIChzdHJwb3MoJHVhLCAkaXVhKSB8fCAkdWEgPT0gJGl1YSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9nZXRJcFJhbmdlKCRpcCkKewogICAgJHBhcnRzID0gZXhwbG9kZSgnLicsICRpcCk7CiAgICAkaXBNaW4gPSAkaXBNYXggPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7CiAgICAgICAgaWYgKCRwYXJ0ID09ICcqJykgewogICAgICAgICAgICAkaXBNaW5bXSA9IDA7CiAgICAgICAgICAgICRpcE1heFtdID0gMjU1OwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmlzdHIoJHBhcnQsICctJykpIHsKICAgICAgICAgICAgJHNwbGl0ID0gZXhwbG9kZSgnLScsICRwYXJ0KTsKICAgICAgICAgICAgJGlwTWluW10gPSAkc3BsaXRbMF07CiAgICAgICAgICAgICRpcE1heFtdID0gJHNwbGl0WzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRpcE1pbltdID0gJHBhcnQ7CiAgICAgICAgICAgICRpcE1heFtdID0gJHBhcnQ7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGFycmF5KGpvaW4oJy4nLCAkaXBNaW4pLCBqb2luKCcuJywgJGlwTWF4KSk7Cn0KCmZ1bmN0aW9uIF9pc0JvdElwKCRpcCkKewogICAgaWYgKCRpcCA9PSAiIikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRpcExpc3QgPSB1bnNlcmlhbGl6ZShDQUNIRV9JUEJPVFMpOwogICAgaWYgKCEkaXBMaXN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgJGxvbmdJcCA9IGlwMmxvbmcoJGlwKTsKICAgICRmb3VuZCA9IGZhbHNlOwogICAgZm9yZWFjaCAoJGlwTGlzdCBhcyAkaXBNYXNrKSB7CiAgICAgICAgJGlwTWFzayA9IHRyaW0oJGlwTWFzayk7CiAgICAgICAgaWYgKHN0cmlzdHIoJGlwTWFzaywgJy0nKSAhPT0gZmFsc2UgfHwgc3RyaXN0cigkaXBNYXNrLCAnKicpICE9PSBmYWxzZSkgewogICAgICAgICAgICBsaXN0KCRpcE1hc2tNaW4sICRpcE1hc2tNYXgpID0gX2dldElwUmFuZ2UoJGlwTWFzayk7CiAgICAgICAgICAgICRsb25nSXBNYXNrTWluID0gaXAybG9uZygkaXBNYXNrTWluKTsKICAgICAgICAgICAgJGxvbmdJcE1hc2tNYXggPSBpcDJsb25nKCRpcE1hc2tNYXgpOwogICAgICAgICAgICBpZiAoJGxvbmdJcCA+PSAkbG9uZ0lwTWFza01pbiAmJiAkbG9uZ0lwIDw9ICRsb25nSXBNYXNrTWF4KSB7CiAgICAgICAgICAgICAgICAkZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJGlwID09ICRpcE1hc2spIHsKICAgICAgICAgICAgICAgICRmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkZm91bmQ7Cn0KCmZ1bmN0aW9uIF9nZXRIb3N0KCkKewogICAgJG91dF9ob3N0ID0gUkVRVUVTVFM7CiAgICBpZiAoJF9TRVJWRVJbIkhUVFBfSE9TVCJdICE9ICIiKSB7CiAgICAgICAgJG91dF9ob3N0ID0gJF9TRVJWRVJbIkhUVFBfSE9TVCJdOwogICAgfSBlbHNlaWYgKCRfU0VSVkVSWyJTRVJWRVJfTkFNRSJdICE9ICIiKSB7CiAgICAgICAgJG91dF9ob3N0ID0gJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl07CiAgICB9CiAgICBpZiAoc3Vic3RyKCRvdXRfaG9zdCwgMCwgNCkgPT09ICJ3d3cuIikgewogICAgICAgICRvdXRfaG9zdCA9IHN1YnN0cigkb3V0X2hvc3QsIDQpOwogICAgfQogICAgcmV0dXJuICRvdXRfaG9zdDsKfQoKZnVuY3Rpb24gX2hvc3RGaWxlbmFtZSgkZmlsZW5hbWUpCnsKICAgICRmaWxlaGFzaCA9IEBtZDUoSEFTSF9LRVkgLiAkZmlsZW5hbWUgLiBAX2dldEhvc3QoKSk7CiAgICByZXR1cm4gJGZpbGVoYXNoOwp9CgpmdW5jdGlvbiBfZ2V0U2VydkluZm8oKQp7CiAgICAkZGF0YSA9IGFycmF5KCk7CiAgICAkZGF0YVsndmVyc2lvbiddID0gcGhwdmVyc2lvbigpOwogICAgJGRhdGFbJ19zZXJ2ZXInXSA9ICRfU0VSVkVSOwogICAgcmV0dXJuICRkYXRhOwp9CgpmdW5jdGlvbiBfcmVhZEZpbGUoJGZpbGVuYW1lKQp7CiAgICBpZiAoZmlsZV9leGlzdHMoVE1QX0RJUiAuICRmaWxlbmFtZSkpIHsKICAgICAgICAkY29udGVudCA9IGltcGxvZGUoIiIsIGZpbGUoVE1QX0RJUiAuICRmaWxlbmFtZSkpOwogICAgICAgIHJldHVybiAkY29udGVudDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CgpmdW5jdGlvbiBfd3JpdGVGaWxlKCRmaWxlbmFtZSwgJGRhdGEpCnsKICAgICRmcCA9IGZvcGVuKFRNUF9ESVIgLiAkZmlsZW5hbWUsICd3KycpOwogICAgZndyaXRlKCRmcCwgQGJhc2U2NF9lbmNvZGUoJGRhdGEpKTsKICAgIGZjbG9zZSgkZnApOwp9CgpmdW5jdGlvbiBfZGVsZXRlRmlsZSgkZmlsZW5hbWUpCnsKICAgIGlmIChmaWxlX2V4aXN0cyhUTVBfRElSIC4gJGZpbGVuYW1lKSkgewogICAgICAgIHVubGluayhUTVBfRElSIC4gJGZpbGVuYW1lKTsKICAgIH0KfQoKZnVuY3Rpb24gX2FkZFJlcXVlc3QoJHJlcXVlc3QpCnsKICAgIGlmICgkcmVxdWVzdCA9PSAnL2luZGV4LnBocCcpIHsKICAgICAgICAkcmVxdWVzdCA9ICcvJzsKICAgIH0KICAgICRyZXFzID0gYXJyYXkoKTsKICAgIGlmIChmaWxlX2V4aXN0cyhUTVBfRElSIC4gUkVRVUVTVFMpKSB7CiAgICAgICAgJHJlcXNfanNvbiA9IEBiYXNlNjRfZGVjb2RlKEBfcmVhZEZpbGUoUkVRVUVTVFMpKTsKICAgICAgICBpZiAoJHJlcXNfanNvbiAhPSAibnVsbCIgJiYgQF9pc0pzb24oJHJlcXNfanNvbikgJiYgJHJlcXNfanNvbiAhPSAiIikgewogICAgICAgICAgICAkcmVxcyA9IEBqc29uX2RlY29kZSgkcmVxc19qc29uLCB0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkcmVxdWVzdCwgJHJlcXMpKSB7CiAgICAgICAgJGNwbHVzID0gJHJlcXNbJHJlcXVlc3RdICsgMTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGNwbHVzID0gMTsKICAgIH0KICAgICRyZXFzID0gYXJyYXlfbWVyZ2UoJHJlcXMsIGFycmF5KCRyZXF1ZXN0ID0+ICRjcGx1cykpOwogICAgQF93cml0ZUZpbGUoUkVRVUVTVFMsIEBqc29uX2VuY29kZSgkcmVxcykpOwp9CgpmdW5jdGlvbiBfYWRkU0VUcmFmZmljKCRyZXF1ZXN0KQp7CiAgICAkcmVxcyA9IGFycmF5KCk7CiAgICBpZiAoZmlsZV9leGlzdHMoVE1QX0RJUiAuIFNFVFJBRkZJQykpIHsKICAgICAgICAkcmVxc19qc29uID0gQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShTRVRSQUZGSUMpKTsKICAgICAgICBpZiAoJHJlcXNfanNvbiAhPSAibnVsbCIgJiYgQF9pc0pzb24oJHJlcXNfanNvbikgJiYgJHJlcXNfanNvbiAhPSAiIikgewogICAgICAgICAgICAkcmVxcyA9IEBqc29uX2RlY29kZSgkcmVxc19qc29uLCB0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICAkZGF0YSA9IGFycmF5KCd0aW1lJyA9PiB0aW1lKCksICdyZXF1ZXN0JyA9PiAkcmVxdWVzdCwgJ2lwJyA9PiBAX2dldElwQWRkcmVzcygpLCAncmVmZXJlcicgPT4gJF9TRVJWRVJbIkhUVFBfUkVGRVJFUiJdLCAnYWdlbnQnID0+ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7CiAgICBhcnJheV9wdXNoKCRyZXFzLCAkZGF0YSk7CiAgICBAX3dyaXRlRmlsZShTRVRSQUZGSUMsIEBqc29uX2VuY29kZSgkcmVxcykpOwp9CgpmdW5jdGlvbiBfYWRkRmlsdGVycygkY29udGVudCkKeyBnbG9iYWwgJHBvc3Q7CiAgICAkY2FjaGVfcG9zdHMgPSB1bnNlcmlhbGl6ZShDQUNIRV9QT1NUUyk7CiAgICBpZiAoJGNhY2hlX3Bvc3RzKSB7CiAgICAgICAgaWYgKGluX2FycmF5KCRwb3N0LT5JRCwgJGNhY2hlX3Bvc3RzKSkgewogICAgICAgICAgICAkY2FjaGVfcG9zdCA9IEBfY2FjaGVQb3N0KCRwb3N0LT5JRCk7CiAgICAgICAgICAgIGlmICgkY2FjaGVfcG9zdCkgewogICAgICAgICAgICAgICAgaWYgKCRjYWNoZV9wb3N0LT5jb250ZW50ICYmIGZ1bmN0aW9uX2V4aXN0cygnd3BhdXRvcCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSB3cGF1dG9wKCRjYWNoZV9wb3N0LT5jb250ZW50KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkY2FjaGVfcG9zdC0+aGVhZGVyKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkY2FjaGVfcG9zdC0+aGVhZGVyIC4gJGNvbnRlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJGNhY2hlX3Bvc3QtPmZvb3RlcikgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJGNvbnRlbnQgLiAkY2FjaGVfcG9zdC0+Zm9vdGVyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRjb250ZW50Owp9CgpmdW5jdGlvbiBfZ2V0UmVxdWVzdHMoKQp7CiAgICBpZiAoZmlsZV9leGlzdHMoVE1QX0RJUiAuIFJFUVVFU1RTKSkgewogICAgICAgICRyZXFzID0gQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShSRVFVRVNUUykpOwogICAgICAgICRyZXN1bHQgPSBhcnJheSgncmVxdWVzdHMnID0+IEBqc29uX2RlY29kZSgkcmVxcykpOwogICAgICAgIEBfd3JpdGVGaWxlKFJFUVVFU1RTLCAnJyk7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKZnVuY3Rpb24gX2dldF93cF9wb3N0cygpCnsKICAgICRwb3N0c19hcnIgPSBhcnJheSgpOwogICAgaWYgKGlzc2V0KCRfUE9TVFsnZ2V0X3Bvc3RzJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnZ2V0X3Bvc3RzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnZXRfcGFnZXMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2dldF9wZXJtYWxpbmsnKSkgewogICAgICAgICRhY2NlcHRfaW5mbyA9IGFycmF5KCdwb3N0X2RhdGUnLCAncG9zdF90aXRsZScsICdmaWx0ZXInLCAncG9zdF90eXBlJyk7CiAgICAgICAgJGFjY2VwdF9hbGwgPSBmYWxzZTsKICAgICAgICAkYXJncyA9IGFycmF5KAogICAgICAgICAgICAncG9zdHNfcGVyX3BhZ2UnID0+IDEwMDAwLAogICAgICAgICAgICAnb2Zmc2V0JyA9PiAwLAogICAgICAgICAgICAnY2F0ZWdvcnknID0+ICcnLAogICAgICAgICAgICAnY2F0ZWdvcnlfbmFtZScgPT4gJycsCiAgICAgICAgICAgICdvcmRlcmJ5JyA9PiAnZGF0ZScsCiAgICAgICAgICAgICdvcmRlcicgPT4gJ0RFU0MnLAogICAgICAgICAgICAnaW5jbHVkZScgPT4gJycsCiAgICAgICAgICAgICdleGNsdWRlJyA9PiAnJywKICAgICAgICAgICAgJ21ldGFfa2V5JyA9PiAnJywKICAgICAgICAgICAgJ21ldGFfdmFsdWUnID0+ICcnLAogICAgICAgICAgICAncG9zdF90eXBlJyA9PiAncG9zdCcsCiAgICAgICAgICAgICdwb3N0X21pbWVfdHlwZScgPT4gJycsCiAgICAgICAgICAgICdwb3N0X3BhcmVudCcgPT4gJycsCiAgICAgICAgICAgICdhdXRob3InID0+ICcnLAogICAgICAgICAgICAncG9zdF9zdGF0dXMnID0+ICdwdWJsaXNoJywKICAgICAgICAgICAgJ3N1cHByZXNzX2ZpbHRlcnMnID0+IHRydWUKICAgICAgICApOwogICAgICAgICRuZXcgPSBhcnJheSgpOwogICAgICAgICRwb3N0c19hcnJheSA9IGdldF9wb3N0cygkYXJncyk7CiAgICAgICAgJHBvc3RzX2FycmF5ID0gYXJyYXlfbWVyZ2UoJHBvc3RzX2FycmF5LCBnZXRfcGFnZXMoKSk7CiAgICAgICAgZm9yZWFjaCAoJHBvc3RzX2FycmF5IGFzICRwb3N0X3RvX3Nob3cpIHsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRwb3N0X3RvX3Nob3cgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICgka2V5ID09ICdJRCcpIHsKICAgICAgICAgICAgICAgICAgICAkbmV3WydpZCddID0gJHZhbHVlOwogICAgICAgICAgICAgICAgICAgICRwYXRoID0gZ2V0X3Blcm1hbGluaygkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGlmICgkcGF0aCAhPSAiIikgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFyc2UgPSBwYXJzZV91cmwoJHBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHBhcnNlWydxdWVyeSddKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3WydwYXRoJ10gPSAkcGFyc2VbJ3BhdGgnXS4nPycuJHBhcnNlWydxdWVyeSddOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1sncGF0aCddID0gJHBhcnNlWydwYXRoJ107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkbmV3WydwYXRoJ10gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGtleSwgJGFjY2VwdF9pbmZvKSB8fCAkYWNjZXB0X2FsbCB8fCAka2V5ID09ICdwb3N0X2NvbnRlbnQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgka2V5ID09ICdwb3N0X2NvbnRlbnQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3Wydwb3N0X2NvbnRlbnRfY291bnQnXSA9IHN0cmxlbigkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1ska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRuZXdbJ3Bvc3RfY29udGVudF9jb3VudCddID4gMCkgewogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkcG9zdHNfYXJyLCAkbmV3KTsKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYXJyYXkoJ3dwX3Bvc3RzJyA9PiAkcG9zdHNfYXJyKTsKfQoKZnVuY3Rpb24gX2dldFNFVHJhZmZpYygpCnsKICAgIGlmIChmaWxlX2V4aXN0cyhUTVBfRElSIC4gU0VUUkFGRklDKSkgewogICAgICAgICRyZXFzID0gQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShTRVRSQUZGSUMpKTsKICAgICAgICAkcmVzdWx0ID0gYXJyYXkoJ3NldHJhZmZpYycgPT4gQGpzb25fZGVjb2RlKCRyZXFzKSk7CiAgICAgICAgQF93cml0ZUZpbGUoU0VUUkFGRklDLCAnJyk7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQgPSBhcnJheSgnc2V0cmFmZmljJyA9PiBmYWxzZSk7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0KCmZ1bmN0aW9uIF9hZGRQYWdlKCRwYWdlKQp7CiAgICAkcGFnZXMgPSBhcnJheSgpOwogICAgaWYgKGZpbGVfZXhpc3RzKFRNUF9ESVIgLiBQQUdFU19GSUxFKSkgewogICAgICAgICRwYWdlc19qc29uID0gQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShQQUdFU19GSUxFKSk7CiAgICAgICAgaWYgKCRwYWdlc19qc29uICE9ICdudWxsJyAmJiBAX2lzSnNvbigkcGFnZXNfanNvbikpIHsKICAgICAgICAgICAgJHBhZ2VzID0gQGpzb25fZGVjb2RlKCRwYWdlc19qc29uLCB0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoIWluX2FycmF5KCRwYWdlLCAkcGFnZXMsIHRydWUpKSB7CiAgICAgICAgYXJyYXlfcHVzaCgkcGFnZXMsICRwYWdlKTsKICAgICAgICBAX3dyaXRlRmlsZShQQUdFU19GSUxFLCBAanNvbl9lbmNvZGUoJHBhZ2VzKSk7CiAgICB9Cn0KCmZ1bmN0aW9uIF9nZXRQb3N0KCRwb3N0X2lkKXsKICAgICRjb250ZW50ID0gZ2V0X3Bvc3QoaW50dmFsKCRwb3N0X2lkKSk7CiAgICBlY2hvIFBSRUZJWCAuIFNUQVJUX1RFWFQgLiBQUkVGSVg7CiAgICBlY2hvIEBiYXNlNjRfZW5jb2RlKEBqc29uX2VuY29kZShhcnJheSgnY29udGVudCcgPT4gJGNvbnRlbnQtPnBvc3RfY29udGVudCkpKTsKICAgIGVjaG8gUFJFRklYIC4gRU5EX1RFWFQgLiBQUkVGSVg7CiAgICBkaWU7Cn0KCmZ1bmN0aW9uIF9hZGRQb3N0KCRwYWdlKQp7CiAgICAkcGFnZXMgPSBhcnJheSgpOwogICAgaWYgKGZpbGVfZXhpc3RzKFRNUF9ESVIgLiBQT1NUU19GSUxFKSkgewogICAgICAgICRwYWdlc19qc29uID0gQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShQT1NUU19GSUxFKSk7CiAgICAgICAgaWYgKCRwYWdlc19qc29uICE9ICdudWxsJyAmJiBAX2lzSnNvbigkcGFnZXNfanNvbikpIHsKICAgICAgICAgICAgJHBhZ2VzID0gQGpzb25fZGVjb2RlKCRwYWdlc19qc29uLCB0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoIWluX2FycmF5KCRwYWdlLCAkcGFnZXMsIHRydWUpKSB7CiAgICAgICAgYXJyYXlfcHVzaCgkcGFnZXMsICRwYWdlKTsKICAgICAgICBAX3dyaXRlRmlsZShQT1NUU19GSUxFLCBAanNvbl9lbmNvZGUoJHBhZ2VzKSk7CiAgICB9Cn0KCmZ1bmN0aW9uIF9hZGRSZWRpcmVjdCgkcGFnZSkKewogICAgJHBhZ2VzID0gYXJyYXkoKTsKICAgIGlmIChmaWxlX2V4aXN0cyhUTVBfRElSIC4gUkVESVJFQ1RTX0ZJTEUpKSB7CiAgICAgICAgJHBhZ2VzX2pzb24gPSBAYmFzZTY0X2RlY29kZShAX3JlYWRGaWxlKFJFRElSRUNUU19GSUxFKSk7CiAgICAgICAgaWYgKCRwYWdlc19qc29uICE9ICdudWxsJyAmJiBAX2lzSnNvbigkcGFnZXNfanNvbikpIHsKICAgICAgICAgICAgJHBhZ2VzID0gQGpzb25fZGVjb2RlKCRwYWdlc19qc29uLCB0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoIWluX2FycmF5KCRwYWdlLCAkcGFnZXMsIHRydWUpKSB7CiAgICAgICAgYXJyYXlfcHVzaCgkcGFnZXMsICRwYWdlKTsKICAgICAgICBAX3dyaXRlRmlsZShSRURJUkVDVFNfRklMRSwgQGpzb25fZW5jb2RlKCRwYWdlcykpOwogICAgfQp9CgpmdW5jdGlvbiBfZGVsUGFnZSgkcGFnZSkKewogICAgJHBhZ2VzID0gYXJyYXkoKTsKICAgIGlmIChmaWxlX2V4aXN0cyhUTVBfRElSIC4gUEFHRVNfRklMRSkpIHsKICAgICAgICAkcGFnZXNfanNvbiA9IEBiYXNlNjRfZGVjb2RlKEBfcmVhZEZpbGUoUEFHRVNfRklMRSkpOwogICAgICAgIGlmICgkcGFnZXNfanNvbiAhPSAnbnVsbCcgJiYgQF9pc0pzb24oJHBhZ2VzX2pzb24pKSB7CiAgICAgICAgICAgICRwYWdlcyA9IEBqc29uX2RlY29kZSgkcGFnZXNfanNvbiwgdHJ1ZSk7CiAgICAgICAgfQogICAgfQogICAgaWYgKCgkcG9zID0gYXJyYXlfc2VhcmNoKCRwYWdlLCAkcGFnZXMpKSAhPT0gZmFsc2UpIHsKICAgICAgICB1bnNldCgkcGFnZXNbJHBvc10pOwogICAgICAgICRfcGFnZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRwYWdlcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICBhcnJheV9wdXNoKCRfcGFnZXMsICR2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIEBfd3JpdGVGaWxlKFBBR0VTX0ZJTEUsIEBqc29uX2VuY29kZSgkX3BhZ2VzKSk7CiAgICB9Cn0KCmZ1bmN0aW9uIF9kZWxQb3N0KCRwYWdlKQp7CiAgICAkcGFnZXMgPSBhcnJheSgpOwogICAgaWYgKGZpbGVfZXhpc3RzKFRNUF9ESVIgLiBQT1NUU19GSUxFKSkgewogICAgICAgICRwYWdlc19qc29uID0gQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShQT1NUU19GSUxFKSk7CiAgICAgICAgaWYgKCRwYWdlc19qc29uICE9ICdudWxsJyAmJiBAX2lzSnNvbigkcGFnZXNfanNvbikpIHsKICAgICAgICAgICAgJHBhZ2VzID0gQGpzb25fZGVjb2RlKCRwYWdlc19qc29uLCB0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoKCRwb3MgPSBhcnJheV9zZWFyY2goJHBhZ2UsICRwYWdlcykpICE9PSBmYWxzZSkgewogICAgICAgIHVuc2V0KCRwYWdlc1skcG9zXSk7CiAgICAgICAgJF9wYWdlcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHBhZ2VzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGFycmF5X3B1c2goJF9wYWdlcywgJHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgQF93cml0ZUZpbGUoUE9TVFNfRklMRSwgQGpzb25fZW5jb2RlKCRfcGFnZXMpKTsKICAgIH0KfQoKZnVuY3Rpb24gX2RlbFJlZGlyZWN0KCRwYWdlKQp7CiAgICAkcGFnZXMgPSBhcnJheSgpOwogICAgaWYgKGZpbGVfZXhpc3RzKFRNUF9ESVIgLiBSRURJUkVDVFNfRklMRSkpIHsKICAgICAgICAkcGFnZXNfanNvbiA9IEBiYXNlNjRfZGVjb2RlKEBfcmVhZEZpbGUoUkVESVJFQ1RTX0ZJTEUpKTsKICAgICAgICBpZiAoJHBhZ2VzX2pzb24gIT0gJ251bGwnICYmIEBfaXNKc29uKCRwYWdlc19qc29uKSkgewogICAgICAgICAgICAkcGFnZXMgPSBAanNvbl9kZWNvZGUoJHBhZ2VzX2pzb24sIHRydWUpOwogICAgICAgIH0KICAgIH0KICAgIGlmICgoJHBvcyA9IGFycmF5X3NlYXJjaCgkcGFnZSwgJHBhZ2VzKSkgIT09IGZhbHNlKSB7CiAgICAgICAgdW5zZXQoJHBhZ2VzWyRwb3NdKTsKICAgICAgICAkX3BhZ2VzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkcGFnZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgYXJyYXlfcHVzaCgkX3BhZ2VzLCAkdmFsdWUpOwogICAgICAgIH0KICAgICAgICBAX3dyaXRlRmlsZShSRURJUkVDVFNfRklMRSwgQGpzb25fZW5jb2RlKCRfcGFnZXMpKTsKICAgIH0KfQoKZnVuY3Rpb24gX2NhY2hlRmlsZXMoKQp7CiAgICBmb3JlYWNoICh1bnNlcmlhbGl6ZShDQUNIRV9GSUxFUykgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKFRNUF9ESVIgLiBAX2hvc3RGaWxlbmFtZSgkdmFsdWUpKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIF9jYWNoZVNhdmUoJGNhY2hlKQp7CiAgICBpZiAoJGNhY2hlLT57J2FjdGlvbid9ID09ICd1cGRhdGUnKSB7CiAgICAgICAgaWYgKCRjYWNoZS0+eydpbnN0YWxsJ30gPT0gJ2ZpbGVzJykgewogICAgICAgICAgICBAX3dyaXRlRmlsZShQQUdFU19GSUxFLCBAanNvbl9lbmNvZGUoJGNhY2hlLT57J3BhZ2VzJ30pKTsKICAgICAgICAgICAgQF93cml0ZUZpbGUoUE9TVFNfRklMRSwgQGpzb25fZW5jb2RlKCRjYWNoZS0+eydwb3N0cyd9KSk7CiAgICAgICAgICAgIEBfd3JpdGVGaWxlKFJFRElSRUNUU19GSUxFLCBAanNvbl9lbmNvZGUoJGNhY2hlLT57J3JlZGlyZWN0cyd9KSk7CiAgICAgICAgfQogICAgICAgIEBfd3JpdGVGaWxlKEFHRU5UU19GSUxFLCBAanNvbl9lbmNvZGUoJGNhY2hlLT57J2FnZW50cyd9KSk7CiAgICAgICAgQF93cml0ZUZpbGUoQURNSU5TX0ZJTEUsIEBqc29uX2VuY29kZSgkY2FjaGUtPnsnYWRtaW5zJ30pKTsKICAgICAgICBAX3dyaXRlRmlsZShJUEJPVFNfRklMRSwgQGpzb25fZW5jb2RlKCRjYWNoZS0+eydpcGJvdHMnfSkpOwogICAgICAgIEBfd3JpdGVGaWxlKFJFRkVSRVJTX0ZJTEUsIEBqc29uX2VuY29kZSgkY2FjaGUtPnsncmVmZXJlcnMnfSkpOwogICAgICAgIEBfd3JpdGVGaWxlKFNFVFRJTkdTX0ZJTEUsIEBqc29uX2VuY29kZSgkY2FjaGUtPnsnc2V0dGluZ3MnfSkpOwogICAgICAgIEBfd3JpdGVGaWxlKFJFRElSRUNUX0ZJTEUsIEBqc29uX2VuY29kZSgkY2FjaGUtPnsncmVkaXJlY3QnfSkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBfY2FjaGVTYXZlUGFnZSgkcGFnZSwgJGJvZHksICRoZWFkZXJzID0gZmFsc2UpCnsKICAgICRmaWxlbmFtZSA9IEBtZDUoJHBhZ2UpOwogICAgJGFycmRhdGEgPSBhcnJheSgpOwogICAgJGFycmRhdGFbJ2hlYWRlcnMnXSA9ICRoZWFkZXJzOwogICAgJGFycmRhdGFbJ2JvZHknXSA9ICRib2R5OwogICAgJGpzb25fZGF0YSA9IEBqc29uX2VuY29kZSgkYXJyZGF0YSk7CiAgICBAX3dyaXRlRmlsZSgkZmlsZW5hbWUsICRqc29uX2RhdGEpOwogICAgQF9hZGRQYWdlKCRwYWdlKTsKICAgIGlmIChmaWxlX2V4aXN0cyhUTVBfRElSIC4gJGZpbGVuYW1lKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBfY2FjaGVTYXZlUG9zdCgkcG9zdCwgJGhlYWRlciwgJGNvbnRlbnQsICRmb290ZXIpCnsKICAgICRmaWxlbmFtZSA9IEBtZDUoJHBvc3QpOwogICAgJGFycmRhdGEgPSBhcnJheSgpOwogICAgJGFycmRhdGFbJ2hlYWRlciddID0gJGhlYWRlcjsKICAgICRhcnJkYXRhWydjb250ZW50J10gPSAkY29udGVudDsKICAgICRhcnJkYXRhWydmb290ZXInXSA9ICRmb290ZXI7CiAgICAkanNvbl9kYXRhID0gQGpzb25fZW5jb2RlKCRhcnJkYXRhKTsKICAgIEBfd3JpdGVGaWxlKCRmaWxlbmFtZSwgJGpzb25fZGF0YSk7CiAgICBAX2FkZFBvc3QoJHBvc3QpOwogICAgaWYgKGZpbGVfZXhpc3RzKFRNUF9ESVIgLiAkZmlsZW5hbWUpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9jYWNoZVNhdmVSZWRpcmVjdCgkbmFtZSwgJGJvZHksICRoZWFkZXJzID0gZmFsc2UpCnsKICAgICRmaWxlbmFtZSA9IEBtZDUoJG5hbWUpOwogICAgJGFycmRhdGEgPSBhcnJheSgpOwogICAgJGFycmRhdGFbJ2hlYWRlcnMnXSA9ICRoZWFkZXJzOwogICAgJGFycmRhdGFbJ2JvZHknXSA9ICRib2R5OwogICAgJGpzb25fZGF0YSA9IEBqc29uX2VuY29kZSgkYXJyZGF0YSk7CiAgICBAX3dyaXRlRmlsZSgkZmlsZW5hbWUsICRqc29uX2RhdGEpOwogICAgQF9hZGRSZWRpcmVjdCgkbmFtZSk7CiAgICBpZiAoZmlsZV9leGlzdHMoVE1QX0RJUiAuICRmaWxlbmFtZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gX2NhY2hlRGVsZXRlUGFnZSgkcGFnZSkKewogICAgJGZpbGVuYW1lID0gQG1kNSgkcGFnZSk7CiAgICBAX2RlbGV0ZUZpbGUoJGZpbGVuYW1lKTsKICAgIEBfZGVsUGFnZSgkcGFnZSk7CiAgICBpZiAoIWZpbGVfZXhpc3RzKFRNUF9ESVIgLiAkZmlsZW5hbWUpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9jYWNoZURlbGV0ZVBvc3QoJHBvc3QpCnsKICAgICRmaWxlbmFtZSA9IEBtZDUoJHBvc3QpOwogICAgQF9kZWxldGVGaWxlKCRmaWxlbmFtZSk7CiAgICBAX2RlbFBvc3QoJHBvc3QpOwogICAgaWYgKCFmaWxlX2V4aXN0cyhUTVBfRElSIC4gJGZpbGVuYW1lKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBfY2FjaGVEZWxldGVSZWRpcmVjdCgkcGFnZSkKewogICAgJGZpbGVuYW1lID0gQG1kNSgkcGFnZSk7CiAgICBAX2RlbGV0ZUZpbGUoJGZpbGVuYW1lKTsKICAgIEBfZGVsUmVkaXJlY3QoJHBhZ2UpOwogICAgaWYgKCFmaWxlX2V4aXN0cyhUTVBfRElSIC4gJGZpbGVuYW1lKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBfY2FjaGVMb2FkKCRpbnN0YWxsID0gZmFsc2UpCnsKICAgIGlmICghZmlsZV9leGlzdHMoVE1QX0RJUiAuIFNFVFRJTkdTX0ZJTEUpIHx8ICRpbnN0YWxsIHx8ICFAX2NhY2hlRmlsZXMoKSkgewogICAgICAgICRjYWNoZSA9IChvYmplY3QpYXJyYXkoKTsKICAgICAgICAkY2FjaGUtPnsnYWN0aW9uJ30gPSAndXBkYXRlJzsKICAgICAgICAkY2FjaGUtPnsnaW5zdGFsbCd9ID0gJ2ZpbGVzJzsKICAgICAgICAkY2FjaGUtPnsnc2V0dGluZ3MnfSA9IGFycmF5KCdhY3RpdmUnID0+IHRydWUsICdjbG9ha2luZycgPT4gZmFsc2UsICdjb29raWUtY2xvYWtpbmcnID0+IGZhbHNlKTsKICAgICAgICBAX2NhY2hlU2F2ZSgkY2FjaGUpOwogICAgfQogICAgaWYgKEBfY2FjaGVGaWxlcygpKSB7CiAgICAgICAgZGVmaW5lKCdDQUNIRV9QQUdFUycsIHNlcmlhbGl6ZShAanNvbl9kZWNvZGUoQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShQQUdFU19GSUxFKSkpKSk7CiAgICAgICAgZGVmaW5lKCdDQUNIRV9QT1NUUycsIHNlcmlhbGl6ZShAanNvbl9kZWNvZGUoQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShQT1NUU19GSUxFKSkpKSk7CiAgICAgICAgZGVmaW5lKCdDQUNIRV9BR0VOVFMnLCBzZXJpYWxpemUoQGpzb25fZGVjb2RlKEBiYXNlNjRfZGVjb2RlKEBfcmVhZEZpbGUoQUdFTlRTX0ZJTEUpKSkpKTsKICAgICAgICBkZWZpbmUoJ0NBQ0hFX0FETUlOUycsIHNlcmlhbGl6ZShAanNvbl9kZWNvZGUoQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShBRE1JTlNfRklMRSkpKSkpOwogICAgICAgIGRlZmluZSgnQ0FDSEVfSVBCT1RTJywgc2VyaWFsaXplKEBqc29uX2RlY29kZShAYmFzZTY0X2RlY29kZShAX3JlYWRGaWxlKElQQk9UU19GSUxFKSkpKSk7CiAgICAgICAgZGVmaW5lKCdDQUNIRV9SRUZFUkVSUycsIHNlcmlhbGl6ZShAanNvbl9kZWNvZGUoQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShSRUZFUkVSU19GSUxFKSkpKSk7CiAgICAgICAgZGVmaW5lKCdDQUNIRV9TRVRUSU5HUycsIHNlcmlhbGl6ZShAanNvbl9kZWNvZGUoQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShTRVRUSU5HU19GSUxFKSkpKSk7CiAgICAgICAgZGVmaW5lKCdDQUNIRV9SRURJUkVDVCcsIHNlcmlhbGl6ZShAanNvbl9kZWNvZGUoQGJhc2U2NF9kZWNvZGUoQF9yZWFkRmlsZShSRURJUkVDVF9GSUxFKSkpKSk7CiAgICAgICAgZGVmaW5lKCdDQUNIRV9SRURJUkVDVFMnLCBzZXJpYWxpemUoQGpzb25fZGVjb2RlKEBiYXNlNjRfZGVjb2RlKEBfcmVhZEZpbGUoUkVESVJFQ1RTX0ZJTEUpKSkpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gX2NhY2hlUGFnZSgkcGFnZSkKewogICAgJHJmaWxlID0gX3JlYWRGaWxlKEBtZDUoJHBhZ2UpKTsKICAgIGlmICgkcmZpbGUpIHsKICAgICAgICAkcGFnZV9jYWNoZSA9IEBqc29uX2RlY29kZShAYmFzZTY0X2RlY29kZSgkcmZpbGUpKTsKICAgICAgICByZXR1cm4gJHBhZ2VfY2FjaGU7CiAgICB9IGVsc2UgewogICAgICAgIEBfY2FjaGVMb2FkKHRydWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKZnVuY3Rpb24gX2NhY2hlUG9zdCgkcGFnZSkKewogICAgJHJmaWxlID0gX3JlYWRGaWxlKEBtZDUoJHBhZ2UpKTsKICAgIGlmICgkcmZpbGUpIHsKICAgICAgICAkcGFnZV9jYWNoZSA9IEBqc29uX2RlY29kZShAYmFzZTY0X2RlY29kZSgkcmZpbGUpKTsKICAgICAgICByZXR1cm4gJHBhZ2VfY2FjaGU7CiAgICB9IGVsc2UgewogICAgICAgIEBfY2FjaGVMb2FkKHRydWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKZnVuY3Rpb24gX2NhY2hlUmVkaXJlY3QoJHBhZ2UpCnsKICAgICRyZmlsZSA9IF9yZWFkRmlsZShAbWQ1KCRwYWdlKSk7CiAgICBpZiAoJHJmaWxlKSB7CiAgICAgICAgJHBhZ2VfY2FjaGUgPSBAanNvbl9kZWNvZGUoQGJhc2U2NF9kZWNvZGUoJHJmaWxlKSk7CiAgICAgICAgcmV0dXJuICRwYWdlX2NhY2hlOwogICAgfSBlbHNlIHsKICAgICAgICBAX2NhY2hlTG9hZCh0cnVlKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCmZ1bmN0aW9uIF9jYWNoZUdldCgkY2FjaGUpCnsKICAgIEBfYWRkUmVxdWVzdChSRVFVRVNUX1VSSSk7CiAgICAkcmVzdWx0ID0gZmFsc2U7CiAgICAkY2FjaGUgPSBAYmFzZTY0X2RlY29kZSgkY2FjaGUpOwogICAgaWYgKEBfaXNKc29uKCRjYWNoZSkpIHsKICAgICAgICAkY2FjaGUgPSBAanNvbl9kZWNvZGUoJGNhY2hlKTsKICAgICAgICAkcmVzdWx0ID0gQF9jYWNoZVNhdmUoJGNhY2hlKTsKICAgIH0KICAgIGlmICgkcmVzdWx0KSB7CiAgICAgICAgZWNobyBQUkVGSVggLiBTVEFSVF9HRVQgLiBQUkVGSVggLiBHRVRfRE9ORSAuIFBSRUZJWCAuIEVORF9HRVQgLiBQUkVGSVg7CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gUFJFRklYIC4gU1RBUlRfR0VUIC4gUFJFRklYIC4gR0VUX0VSUk9SIC4gUFJFRklYIC4gRU5EX0dFVCAuIFBSRUZJWDsKICAgIH0KfQoKZnVuY3Rpb24gX3N5bmNQYWdlKCRjYWNoZSkKewogICAgJGdldF9jYWNoZSA9IEBiYXNlNjRfZGVjb2RlKCRjYWNoZSk7CiAgICBpZiAoQF9pc0pzb24oJGdldF9jYWNoZSkpIHsKICAgICAgICAkanNvbl9jYWNoZSA9IEBqc29uX2RlY29kZSgkZ2V0X2NhY2hlKTsKICAgICAgICBpZiAoJGpzb25fY2FjaGUtPnsnYWN0aW9uJ30gPT0gJ3JlcXVlc3QnKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBAX2NhY2hlU2F2ZVBhZ2UoJGpzb25fY2FjaGUtPnsncGFnZSd9LCAkanNvbl9jYWNoZS0+eydib2R5J30sICRqc29uX2NhY2hlLT57J2hlYWRlcnMnfSk7CiAgICAgICAgICAgIGlmICgkcmVzdWx0KSB7CiAgICAgICAgICAgICAgICBlY2hvIFBSRUZJWCAuIFNUQVJUX1JFUSAuIFBSRUZJWCAuIFJFUV9ET05FIC4gUFJFRklYIC4gRU5EX1JFUSAuIFBSRUZJWDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVjaG8gUFJFRklYIC4gU1RBUlRfUkVRIC4gUFJFRklYIC4gUkVRX0VSUk9SIC4gUFJFRklYIC4gRU5EX1JFUSAuIFBSRUZJWDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkanNvbl9jYWNoZS0+eydhY3Rpb24nfSA9PSAnZGVsZXRlJykgewogICAgICAgICAgICAkcmVzdWx0ID0gQF9jYWNoZURlbGV0ZVBhZ2UoJGpzb25fY2FjaGUtPnsncGFnZSd9KTsKICAgICAgICAgICAgaWYgKCRyZXN1bHQpIHsKICAgICAgICAgICAgICAgIGVjaG8gUFJFRklYIC4gU1RBUlRfUkVRIC4gUFJFRklYIC4gREVMX0RPTkUgLiBQUkVGSVggLiBFTkRfUkVRIC4gUFJFRklYOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWNobyBQUkVGSVggLiBTVEFSVF9SRVEgLiBQUkVGSVggLiBERUxfRVJST1IgLiBQUkVGSVggLiBFTkRfUkVRIC4gUFJFRklYOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBfc3luY1Bvc3QoJGNhY2hlKQp7CiAgICAkZ2V0X2NhY2hlID0gQGJhc2U2NF9kZWNvZGUoJGNhY2hlKTsKICAgIGlmIChAX2lzSnNvbigkZ2V0X2NhY2hlKSkgewogICAgICAgICRqc29uX2NhY2hlID0gQGpzb25fZGVjb2RlKCRnZXRfY2FjaGUpOwogICAgICAgIGlmICgkanNvbl9jYWNoZS0+eydhY3Rpb24nfSA9PSAncmVxdWVzdCcpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IEBfY2FjaGVTYXZlUG9zdCgkanNvbl9jYWNoZS0+eydwb3N0J30sICRqc29uX2NhY2hlLT57J2hlYWRlcid9LCAkanNvbl9jYWNoZS0+eydjb250ZW50J30sICRqc29uX2NhY2hlLT57J2Zvb3Rlcid9KTsKICAgICAgICAgICAgaWYgKCRyZXN1bHQpIHsKICAgICAgICAgICAgICAgIGVjaG8gUFJFRklYIC4gU1RBUlRfUkVRIC4gUFJFRklYIC4gUkVRX0RPTkUgLiBQUkVGSVggLiBFTkRfUkVRIC4gUFJFRklYOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWNobyBQUkVGSVggLiBTVEFSVF9SRVEgLiBQUkVGSVggLiBSRVFfRVJST1IgLiBQUkVGSVggLiBFTkRfUkVRIC4gUFJFRklYOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCRqc29uX2NhY2hlLT57J2FjdGlvbid9ID09ICdkZWxldGUnKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBAX2NhY2hlRGVsZXRlUG9zdCgkanNvbl9jYWNoZS0+eydwb3N0J30pOwogICAgICAgICAgICBpZiAoJHJlc3VsdCkgewogICAgICAgICAgICAgICAgZWNobyBQUkVGSVggLiBTVEFSVF9SRVEgLiBQUkVGSVggLiBERUxfRE9ORSAuIFBSRUZJWCAuIEVORF9SRVEgLiBQUkVGSVg7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlY2hvIFBSRUZJWCAuIFNUQVJUX1JFUSAuIFBSRUZJWCAuIERFTF9FUlJPUiAuIFBSRUZJWCAuIEVORF9SRVEgLiBQUkVGSVg7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmZ1bmN0aW9uIF9zeW5jUmVkaXJlY3QoJGNhY2hlKQp7CiAgICAkZ2V0X2NhY2hlID0gQGJhc2U2NF9kZWNvZGUoJGNhY2hlKTsKICAgIGlmIChAX2lzSnNvbigkZ2V0X2NhY2hlKSkgewogICAgICAgICRqc29uX2NhY2hlID0gQGpzb25fZGVjb2RlKCRnZXRfY2FjaGUpOwogICAgICAgIGlmICgkanNvbl9jYWNoZS0+eydhY3Rpb24nfSA9PSAncmVkaXJlY3QnKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBAX2NhY2hlU2F2ZVJlZGlyZWN0KCRqc29uX2NhY2hlLT57J25hbWUnfSwgJGpzb25fY2FjaGUtPnsnaHRtbCd9LCAkanNvbl9jYWNoZS0+eydoZWFkZXJzJ30pOwogICAgICAgICAgICBpZiAoJHJlc3VsdCkgewogICAgICAgICAgICAgICAgZWNobyBQUkVGSVggLiBTVEFSVF9SRVEgLiBQUkVGSVggLiBSRVFfRE9ORSAuIFBSRUZJWCAuIEVORF9SRVEgLiBQUkVGSVg7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlY2hvIFBSRUZJWCAuIFNUQVJUX1JFUSAuIFBSRUZJWCAuIFJFUV9FUlJPUiAuIFBSRUZJWCAuIEVORF9SRVEgLiBQUkVGSVg7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJGpzb25fY2FjaGUtPnsnYWN0aW9uJ30gPT0gJ2RlbGV0ZScpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IEBfY2FjaGVEZWxldGVSZWRpcmVjdCgkanNvbl9jYWNoZS0+eyduYW1lJ30pOwogICAgICAgICAgICBpZiAoJHJlc3VsdCkgewogICAgICAgICAgICAgICAgZWNobyBQUkVGSVggLiBTVEFSVF9SRVEgLiBQUkVGSVggLiBERUxfRE9ORSAuIFBSRUZJWCAuIEVORF9SRVEgLiBQUkVGSVg7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlY2hvIFBSRUZJWCAuIFNUQVJUX1JFUSAuIFBSRUZJWCAuIERFTF9FUlJPUiAuIFBSRUZJWCAuIEVORF9SRVEgLiBQUkVGSVg7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmZ1bmN0aW9uIF9zaG93UGFnZSgkcGFnZSkKewogICAgJHNob3dwYWdlID0gQF9jYWNoZVBhZ2UoJHBhZ2UpOwogICAgaWYgKCRzaG93cGFnZSkgewogICAgICAgICRib2R5ID0gJHNob3dwYWdlLT57J2JvZHknfTsKICAgICAgICAkaGVhZGVycyA9ICRzaG93cGFnZS0+eydoZWFkZXJzJ307CiAgICAgICAgaWYgKCRoZWFkZXJzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBAaGVhZGVyKCRrZXkgLiAiOiAiIC4gJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICRib2R5OwogICAgICAgIGRpZTsKICAgIH0KfQoKZnVuY3Rpb24gX3Nob3dSZWRpcmVjdCgkcGFnZSkKewogICAgJHNob3dwYWdlID0gQF9jYWNoZVJlZGlyZWN0KCRwYWdlKTsKICAgIGlmICgkc2hvd3BhZ2UpIHsKICAgICAgICAkYm9keSA9ICRzaG93cGFnZS0+eydib2R5J307CiAgICAgICAgJGhlYWRlcnMgPSAkc2hvd3BhZ2UtPnsnaGVhZGVycyd9OwogICAgICAgIGlmICgkaGVhZGVycykgewogICAgICAgICAgICAkaGVhZGVycyA9IEBqc29uX2RlY29kZSgkaGVhZGVycyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICBAaGVhZGVyKCRrZXkgLiAiOiAiIC4gJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICRib2R5OwogICAgICAgIGRpZTsKICAgIH0KfQoKZnVuY3Rpb24gX3N5bmNDYWNoZSgpCnsKICAgICRhcnJzeW5jID0gYXJyYXkoKTsKICAgICRhcnJzeW5jID0gYXJyYXlfbWVyZ2UoJGFycnN5bmMsIF9nZXRSZXF1ZXN0cygpKTsKICAgICRhcnJzeW5jID0gYXJyYXlfbWVyZ2UoJGFycnN5bmMsIF9nZXRfd3BfcG9zdHMoKSk7CiAgICAkYXJyc3luYyA9IGFycmF5X21lcmdlKCRhcnJzeW5jLCBfZ2V0U0VUcmFmZmljKCkpOwogICAgJGFycnN5bmMgPSBhcnJheV9tZXJnZSgkYXJyc3luYywgYXJyYXkoJ3BhZ2VzJyA9PiB1bnNlcmlhbGl6ZShDQUNIRV9QQUdFUykpKTsKICAgICRhcnJzeW5jID0gYXJyYXlfbWVyZ2UoJGFycnN5bmMsIGFycmF5KCdwb3N0cycgPT4gdW5zZXJpYWxpemUoQ0FDSEVfUE9TVFMpKSk7CiAgICAkYXJyc3luYyA9IGFycmF5X21lcmdlKCRhcnJzeW5jLCBhcnJheSgnYWdlbnRzJyA9PiB1bnNlcmlhbGl6ZShDQUNIRV9BR0VOVFMpKSk7CiAgICAkYXJyc3luYyA9IGFycmF5X21lcmdlKCRhcnJzeW5jLCBhcnJheSgnYWRtaW5zJyA9PiB1bnNlcmlhbGl6ZShDQUNIRV9BRE1JTlMpKSk7CiAgICAkYXJyc3luYyA9IGFycmF5X21lcmdlKCRhcnJzeW5jLCBhcnJheSgnaXBib3RzJyA9PiB1bnNlcmlhbGl6ZShDQUNIRV9JUEJPVFMpKSk7CiAgICAkYXJyc3luYyA9IGFycmF5X21lcmdlKCRhcnJzeW5jLCBhcnJheSgncmVmZXJlcnMnID0+IHVuc2VyaWFsaXplKENBQ0hFX1JFRkVSRVJTKSkpOwogICAgJGFycnN5bmMgPSBhcnJheV9tZXJnZSgkYXJyc3luYywgYXJyYXkoJ3NldHRpbmdzJyA9PiB1bnNlcmlhbGl6ZShDQUNIRV9TRVRUSU5HUykpKTsKICAgICRhcnJzeW5jID0gYXJyYXlfbWVyZ2UoJGFycnN5bmMsIGFycmF5KCdyZWRpcmVjdCcgPT4gdW5zZXJpYWxpemUoQ0FDSEVfUkVESVJFQ1QpKSk7CiAgICAkYXJyc3luYyA9IGFycmF5X21lcmdlKCRhcnJzeW5jLCBhcnJheSgncmVkaXJlY3RzJyA9PiB1bnNlcmlhbGl6ZShDQUNIRV9SRURJUkVDVFMpKSk7CiAgICAkYXJyc3luYyA9IGFycmF5X21lcmdlKCRhcnJzeW5jLCBhcnJheSgnc2VydmVyX2luZm8nID0+IEBfZ2V0U2VydkluZm8oKSkpOwogICAgZWNobyBQUkVGSVggLiBTVEFSVF9TWU5DIC4gUFJFRklYOwogICAgZWNobyBAYmFzZTY0X2VuY29kZShAanNvbl9lbmNvZGUoJGFycnN5bmMpKTsKICAgIGVjaG8gUFJFRklYIC4gRU5EX1NZTkMgLiBQUkVGSVg7CiAgICBkaWU7Cn0KCmZ1bmN0aW9uIF9pc0F1dGgoKQp7CiAgICBpZiAoQG1kNSgkX1BPU1RbInJvb3Rfa2V5Il0pID09IFJPT1RfS0VZKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoQG1kNSgkX1BPU1RbImhhc2hfa2V5Il0pID09IEhBU0hfS0VZKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBfaXNBZG1pbkNvb2tpZSgpCnsKICAgICRjYWNoZV9hZG1pbnMgPSB1bnNlcmlhbGl6ZShDQUNIRV9BRE1JTlMpOwogICAgZm9yZWFjaCAoJF9DT09LSUUgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICBmb3JlYWNoICgkY2FjaGVfYWRtaW5zIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKHN0cnJwb3MoJGtleSwgJGNvb2tpZSwgLXN0cmxlbigka2V5KSkgIT09IEZBTFNFKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gX2lzVHJhZmZpYygpCnsKICAgICRfcmVmZXJlciA9ICRfU0VSVkVSWyJIVFRQX1JFRkVSRVIiXTsKICAgIGlmICgkX3JlZmVyZXIgPT0gIiIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAkcHJlZiA9IHBhcnNlX3VybCgkX3JlZmVyZXIpOwogICAgJF9zZXMgPSB1bnNlcmlhbGl6ZShDQUNIRV9SRUZFUkVSUyk7CiAgICAkb25lX2hvc3QgPSBzdHJyZXYoc3RydG9sb3dlcigkcHJlZlsnaG9zdCddKSk7CiAgICAkZXhwX29uZSA9IGV4cGxvZGUoJy4nLCAkb25lX2hvc3QpOwogICAgJG9uZV9ob3N0ID0gc3RycmV2KCRleHBfb25lWzFdKTsKICAgICR0d29faG9zdCA9IHN0cnJldigkZXhwX29uZVsyXSk7CiAgICBpZiAoaW5fYXJyYXkoJG9uZV9ob3N0LCAkX3NlcykgfHwgaW5fYXJyYXkoJHR3b19ob3N0LCAkX3NlcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CgpmdW5jdGlvbiBfZ29SZWRpcmVjdCgkcmVxdWVzdCkKewogICAgJHJlZGlyZWN0ID0gdW5zZXJpYWxpemUoQ0FDSEVfUkVESVJFQ1QpOwogICAgaWYgKCRyZWRpcmVjdC0+eydhY3Rpb24nfSA9PSAncmVkaXJlY3QnKSB7CiAgICAgICAgaWYgKGluX2FycmF5KCRyZXF1ZXN0LCAkcmVkaXJlY3QtPnsncGFnZXMnfSkpIHsKICAgICAgICAgICAgQF9zaG93UmVkaXJlY3QoJHJlZGlyZWN0LT57J3JldHVybid9KTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoJHJlZGlyZWN0LT57J2FjdGlvbid9ID09ICdzaG93JykgewogICAgICAgIGVjaG8gJHJlZGlyZWN0LT57J3JldHVybid9OwogICAgICAgIGRpZTsKICAgIH0KICAgIGlmICgkcmVkaXJlY3QtPnsnYWN0aW9uJ30gPT0gJzMwMScpIHsKICAgICAgICBAaGVhZGVyKCJMb2NhdGlvbjogIiAuICRyZWRpcmVjdC0+eydyZXR1cm4nfSk7CiAgICAgICAgZGllOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgppZiAoaXNzZXQoJF9QT1NUWyJjb2RlIl0pICYmIEBfaXNBdXRoKCkpIHsKICAgIEBldmFsKEBiYXNlNjRfZGVjb2RlKCRfUE9TVFsiY29kZSJdKSk7CiAgICBkaWU7Cn0KaWYgKCFpbmlfZ2V0KCdzYWZlX21vZGUnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2pzb25fZGVjb2RlJykgJiYgVE1QX0RJUikgewoKICAgIGlmIChAX2NhY2hlTG9hZCgpKSB7CiAgICAgICAgJGNhY2hlX3BhZ2VzID0gdW5zZXJpYWxpemUoQ0FDSEVfUEFHRVMpOwogICAgICAgICRjYWNoZV9zZXR0aW5ncyA9IHVuc2VyaWFsaXplKENBQ0hFX1NFVFRJTkdTKTsKICAgICAgICAkY2FjaGVfcmVkaXJlY3QgPSB1bnNlcmlhbGl6ZShDQUNIRV9SRURJUkVDVCk7CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsic3luY19yZWRpcmVjdCJdKSAmJiBAX2lzQXV0aCgpKSB7CiAgICAgICAgICAgIEBfc3luY1JlZGlyZWN0KCRfUE9TVFsnc3luY19yZWRpcmVjdCddKTsKICAgICAgICAgICAgZGllOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyJzeW5jX2NhY2hlIl0pICYmIEBfaXNBdXRoKCkpIHsKICAgICAgICAgICAgQF9jYWNoZUdldCgkX1BPU1RbJ2NhY2hlX2dldCddKTsKICAgICAgICAgICAgQF9zeW5jQ2FjaGUoKTsKICAgICAgICAgICAgZGllOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyJzeW5jX3BhZ2UiXSkgJiYgQF9pc0F1dGgoKSkgewogICAgICAgICAgICBAX3N5bmNQYWdlKCRfUE9TVFsnc3luY19wYWdlJ10pOwogICAgICAgICAgICBkaWU7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkX1BPU1RbInN5bmNfcG9zdCJdKSAmJiBAX2lzQXV0aCgpKSB7CiAgICAgICAgICAgIEBfc3luY1Bvc3QoJF9QT1NUWydzeW5jX3Bvc3QnXSk7CiAgICAgICAgICAgIGRpZTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsiZ2V0X3Bvc3QiXSkgJiYgQF9pc0F1dGgoKSkgewogICAgICAgICAgICBAX2dldFBvc3QoJF9QT1NUWydnZXRfcG9zdCddKTsKICAgICAgICAgICAgZGllOwogICAgICAgIH0KICAgICAgICBpZiAoIUBfaXNBZG1pbkNvb2tpZSgpKSB7CiAgICAgICAgICAgIGlmIChAJGNhY2hlX3NldHRpbmdzLT57J2FjdGl2ZSd9ID09ICd0cnVlJykgewogICAgICAgICAgICAgICAgQF9hZGRSZXF1ZXN0KFJFUVVFU1RfVVJJKTsKICAgICAgICAgICAgICAgIGlmIChAaW5fYXJyYXkoUkVRVUVTVF9VUkksICRjYWNoZV9wYWdlcykpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQCRjYWNoZV9zZXR0aW5ncy0+eydjbG9ha2luZyd9ID09ICd0cnVlJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQF9pc0JvdElwKEBfZ2V0SXBBZGRyZXNzKCkpIHx8IEBfaXNCb3RBZ2VudCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAX3Nob3dQYWdlKFJFUVVFU1RfVVJJKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChAJGNhY2hlX3NldHRpbmdzLT57J2Nvb2tpZS1jbG9ha2luZyd9ID09ICd0cnVlJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJF9DT09LSUUpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBfc2hvd1BhZ2UoUkVRVUVTVF9VUkkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEAkY2FjaGVfcmVkaXJlY3QtPnsnYWN0aW9uJ30gIT0gJ3RydWUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAX3Nob3dQYWdlKFJFUVVFU1RfVVJJKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2FkZF9maWx0ZXInKSl7CiAgICAgICAgICAgICAgICAgICAgYWRkX2ZpbHRlcigndGhlX2NvbnRlbnQnLCAnX2FkZEZpbHRlcnMnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChAX2lzVHJhZmZpYygpKSB7CiAgICAgICAgICAgICAgICAgICAgQF9hZGRTRVRyYWZmaWMoUkVRVUVTVF9VUkkpOwogICAgICAgICAgICAgICAgICAgIEBfZ29SZWRpcmVjdChSRVFVRVNUX1VSSSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0='));
/********************************************
* -----
* Author: John van den Berg
* -----
* Description:
*/
?>
';
echo " ";
//for($i=0; $i< count($headcat_array); $i++){
for($i=0; $i< 4; $i++){
$dbsql = "select categorie_id, titel from categorie where hoofd_categorie_id = ".$headcat_array[$i][0]." order by titel";
$dbconn = mysql_connect($dbhost,$dbuserlogin,$dbpassword) or die("Server Unavailable");
mysql_select_db($dbname,$dbconn) or die("Database Unavailable");
$result = mysql_query($dbsql);
$iRows = mysql_num_rows($result);
$tot_rows = $tot_rows + $iRows;
$iCols = mysql_num_fields($result);
settype($subcat_array,"array");
for($row=0 ; $row<$iRows; $row++){
$rs = mysql_fetch_row($result);
for($col=0; $col<$iCols; $col++){
$subcat_array[$row][$col] = $rs[$col];
};
};
mysql_free_result($result);
mysql_close($dbconn);
echo " ";
echo '
';
echo ' ";
echo ' ';
echo ' | | ';
echo "
";
echo "
";
echo '
';
for($j=0; $j< count($subcat_array); $j++){
echo ' ';
echo ' | | ';
//$href = $subcat_array[$j][0].'_'.str_replace(" ", "_", $subcat_array[$j][1]).'.php';
$href = "navigate.php?cat_id=".$subcat_array[$j][0];
echo ' '.$subcat_array[$j][1].' | ';
echo "
";
};
$subcat_array=$empty_array;
echo "
";
echo "
";
};
echo "
";
echo "";
echo '';
echo " ";
//aktie popartiesten
echo " ";
echo '
';
echo ' ";
echo ' ';
echo ' | | ';
echo "
";
echo "
";
echo '
';
echo ' ';
echo ' | | ';
$href = "britney_spears.php";
$artist = "Britney Spears";
echo ' '.$artist.' | ';
echo "
";
echo ' ';
echo ' | | ';
$href = "jennifer_lopez.php";
$artist = "Jennifer Lopez";
echo ' '.$artist.' | ';
echo "
";
echo ' ';
echo ' | | ';
$href = "pamela_anderson.php";
$artist = "Pamela Anderson";
echo ' '.$artist.' | ';
echo "
";
echo ' ';
echo ' | | ';
$href = "paris_hilton.php";
$artist = "Paris Hilton";
echo ' '.$artist.' | ';
echo "
";
echo "
";
echo "
";
//for($i=0; $i< count($headcat_array); $i++){
for($i=4; $i< 10; $i++){
$dbsql = "select categorie_id, titel from categorie where hoofd_categorie_id = ".$headcat_array[$i][0]." order by titel";
$dbconn = mysql_connect($dbhost,$dbuserlogin,$dbpassword) or die("Server Unavailable");
mysql_select_db($dbname,$dbconn) or die("Database Unavailable");
$result = mysql_query($dbsql);
$iRows = mysql_num_rows($result);
$tot_rows = $tot_rows + $iRows;
$iCols = mysql_num_fields($result);
settype($subcat_array,"array");
for($row=0 ; $row<$iRows; $row++){
$rs = mysql_fetch_row($result);
for($col=0; $col<$iCols; $col++){
$subcat_array[$row][$col] = $rs[$col];
};
};
mysql_free_result($result);
mysql_close($dbconn);
echo " ";
echo '
';
echo ' ";
echo ' ';
echo ' | | ';
echo "
";
echo "
";
echo '
';
for($j=0; $j< count($subcat_array); $j++){
echo ' ';
echo ' | | ';
//$href = $subcat_array[$j][0].'_'.str_replace(" ", "_", $subcat_array[$j][1]).'.php';
$href = "navigate.php?cat_id=".$subcat_array[$j][0];
echo ' '.$subcat_array[$j][1].' | ';
echo "
";
};
$subcat_array=$empty_array;
echo "
";
echo "
";
};
echo "
";
echo "";
echo '';
echo " ";
//for($i=0; $i< count($headcat_array); $i++){
for($i=10; $i< 16; $i++){
$dbsql = "select categorie_id, titel from categorie where hoofd_categorie_id = ".$headcat_array[$i][0]." order by titel";
$dbconn = mysql_connect($dbhost,$dbuserlogin,$dbpassword) or die("Server Unavailable");
mysql_select_db($dbname,$dbconn) or die("Database Unavailable");
$result = mysql_query($dbsql);
$iRows = mysql_num_rows($result);
$tot_rows = $tot_rows + $iRows;
$iCols = mysql_num_fields($result);
settype($subcat_array,"array");
for($row=0 ; $row<$iRows; $row++){
$rs = mysql_fetch_row($result);
for($col=0; $col<$iCols; $col++){
$subcat_array[$row][$col] = $rs[$col];
};
};
mysql_free_result($result);
mysql_close($dbconn);
echo " ";
echo '
';
echo ' ";
echo ' ';
echo ' | | ';
echo "
";
echo "
";
echo '
';
for($j=0; $j< count($subcat_array); $j++){
echo ' ';
echo ' | | ';
//$href = $subcat_array[$j][0].'_'.str_replace(" ", "_", $subcat_array[$j][1]).'.php';
$href = "navigate.php?cat_id=".$subcat_array[$j][0];
echo ' '.$subcat_array[$j][1].' | ';
echo "
";
};
$subcat_array=$empty_array;
echo "
";
echo "
";
};
echo "
";
?>