# Name: smd_thumbnail v0.13 # Type: Admin/Public side plugin # Multiple image thumbnails of arbitrary dimensions # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfdGh1bWJuYWlsIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjEzIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo0OToiTXVsdGlwbGUgaW1hZ2UgdGh1bWJuYWlscyBvZiBhcmJpdHJhcnkgZGltZW5zaW9u cyI7czo0OiJjb2RlIjtzOjM4Mzc4OiJpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7 DQoJZ2xvYmFsICRzbWRfdGh1bWJfZXZlbnQsICRzbWRfdGh1bWJfc3R5bGVzOw0KDQoJJHNt ZF90aHVtYl9ldmVudCA9ICdzbWRfdGh1bWJuYWlsJzsNCgkkc21kX3RodW1iX3ByaXZzID0g JzEsMiwzJzsNCg0KCSRzbWRfdGh1bWJfc3R5bGVzID0gYXJyYXkoDQoJCSdlZGl0JyA9Pg0K ICAgICAgICAgJy5zbWRfc2VsZWN0ZWQgeyBib3JkZXI6MXB4IHNvbGlkIHJlZDsgYmFja2dy b3VuZDpyZWQ7IH0NCiAgICAgICAgICAjc21kX3RodW1icyBpbWcgeyBwYWRkaW5nOjJweDsg bWFyZ2luOjFweDsgYm9yZGVyOjFweCBzb2xpZCBibGFjazsgfQ0KICAgICAgICAgIC50aHVt Ym5haWwtYWx0ZXIgeyBkaXNwbGF5Om5vbmU7IH0nLA0KCQkncHJvZmlsZScgPT4NCiAgICAg ICAgICcuc21kX2hpZGRlbiB7IGRpc3BsYXk6bm9uZTsgfQ0KICAgICAgICAgICNzbWRfdGh1 bWJfcHJvZmlsZXMgeyB3aWR0aDo3MDBweDsgbWFyZ2luOjAgYXV0byAxOHB4OyBwb3NpdGlv bjpyZWxhdGl2ZTsgfQ0KICAgICAgICAgICNzbWRfdGh1bWJfYmF0Y2ggeyBmbG9hdDpyaWdo dDsgfQ0KICAgICAgICAgIC5zbWRfaW5hY3RpdmUgeyBvcGFjaXR5Oi4zOyB9DQogICAgICAg ICAgLnNtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZSB7IGN1cnNvcjpwb2ludGVyOyB9DQogICAg ICAgICAgI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0geyBwYWRkaW5nLXRvcDo4cHg7IH0NCiAg ICAgICAgICBmb3JtI3NtZF90aHVtYl9wcm9maWxlX2Zvcm0gdGQgeyBib3JkZXI6IDA7IH0N CiAgICAgICAgICAuc21kX3RodW1iX2Vycm9yIHsgcG9zaXRpb246YWJzb2x1dGU7IHJpZ2h0 OjEwMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyOjFweCBzb2xpZCByZWQ7IGJhY2tn cm91bmQ6I2ZmYzsgcGFkZGluZzozcHg7IH0nLA0KCSk7DQoNCglhZGRfcHJpdnMoJHNtZF90 aHVtYl9ldmVudCwgJHNtZF90aHVtYl9wcml2cyk7DQoJYWRkX3ByaXZzKCdzbWRfdGh1bWJf cHJvZmlsZXMnLCAkc21kX3RodW1iX3ByaXZzKTsNCglhZGRfcHJpdnMoJ3BsdWdpbl9wcmVm cy4nLiRzbWRfdGh1bWJfZXZlbnQsICRzbWRfdGh1bWJfcHJpdnMpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfdGh1bWJfd2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLicuJHNtZF90 aHVtYl9ldmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9wcm9maWxlcycs ICdpbWFnZV91aScsICdleHRlbmRfY29udHJvbHMnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3RodW1icycsICdpbWFnZV91aScsICd0aHVtYm5haWwnKTsNCglyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3RodW1iX2VkaXQnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWlsX2VkaXQnKTsN CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX2NyZWF0ZScsICdpbWFnZV91aScsICd0 aHVtYm5haWxfY3JlYXRlJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9nZW5l cmF0ZScsICdpbWFnZScsICdpbWFnZV9kYXRhJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF90aHVtYl9kZWxldGUnLCAnaW1hZ2UnLCAnaW1hZ2VfZGVsZXRlJyk7DQoJcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF90aHVtYl9jcmVhdGVfb25lJywgJ2ltYWdlJywgJ3NtZF90aHVtYl9j cmVhdGVfb25lJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9zd2l0Y2hfYWN0 aXZlJywgJ2ltYWdlJywgJ3NtZF90aHVtYl9zd2l0Y2hfYWN0aXZlJyk7DQoJcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF90aHVtYl9zd2l0Y2hfcHJlZicsICdpbWFnZScsICdzbWRfdGh1bWJf c3dpdGNoX3ByZWYnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX2luc2VydCcs ICdpbWFnZScsICdzbWRfdGh1bWJuYWlsX2luc2VydCcsIDEpOw0KDQp9IGVsc2Ugew0KCWds b2JhbCAkcGF0aF90b19zaXRlLCAkaW1nX2RpcjsNCglpZiAoIWRlZmluZWQoJ0lNUEFUSCcp KSB7DQoJCWRlZmluZSgiSU1QQVRIIiwkcGF0aF90b19zaXRlLkRTLiRpbWdfZGlyLkRTKTsN Cgl9DQp9DQoNCmlmICghZGVmaW5lZCgnU01EX1RIVU1CJykpIHsNCglkZWZpbmUoIlNNRF9U SFVNQiIsICdzbWRfdGh1bWJuYWlsJyk7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9USFVNQl9B Q1RJVkUnKSkgew0KCWRlZmluZSgiU01EX1RIVU1CX0FDVElWRSIsIDEpOw0KfQ0KaWYgKCFk ZWZpbmVkKCdTTURfVEhVTUJfQ1JPUCcpKSB7DQoJZGVmaW5lKCJTTURfVEhVTUJfQ1JPUCIs IDIpOw0KfQ0KaWYgKCFkZWZpbmVkKCdTTURfVEhVTUJfU0hBUlAnKSkgew0KCWRlZmluZSgi U01EX1RIVU1CX1NIQVJQIiwgNCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90 aHVtYl93ZWxjb21lKCRldnQsICRzdHApIHsNCglzd2l0Y2ggKCRzdHApIHsNCgkJY2FzZSAn aW5zdGFsbGVkJzoNCgkJCXNtZF90aHVtYl90YWJsZV9pbnN0YWxsKCk7DQoJCQlicmVhazsN CgkJY2FzZSAnZGVsZXRlZCc6DQoJCQlzbWRfdGh1bWJfdGFibGVfcmVtb3ZlKCk7DQoJCQli cmVhazsNCgl9DQoJcmV0dXJuOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIERpc3BsYXkgdGhlIGRlc2lnbmF0ZWQgZGVmYXVsdCB0aHVtYm5haWwgb24gdGhlIGxp c3QgcGFnZQ0KZnVuY3Rpb24gc21kX3RodW1icygkZXZ0LCAkc3RwLCAkZGZsdCwgJGN1cnJp bWcpIHsNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAnY3Jp dCcsICdzZWFyY2hfbWV0aG9kJykpKTsNCg0KCWlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3Qo KSkgew0KCQkkZGVmYXVsdCA9IGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxl JywgJycsIDEpOw0KCQlpZiAoJGRlZmF1bHQpIHsNCgkJCSRyb3cgPSBzYWZlX3JvdygnKics IFNNRF9USFVNQiwgIm5hbWU9JyIuc2FuaXRpemVGb3JVcmwoJGRlZmF1bHQpLiInIik7DQoJ CQlpZiAoJHJvdykgew0KCQkJCSRlZGl0X3VybCA9ICc/ZXZlbnQ9aW1hZ2UnLmEuJ3N0ZXA9 aW1hZ2VfZWRpdCcuYS4naWQ9Jy4kY3VycmltZ1snaWQnXS5hLidzb3J0PScuJHNvcnQuDQoJ CQkJCQlhLidkaXI9Jy4kZGlyLmEuJ3BhZ2U9Jy4kcGFnZS5hLidzZWFyY2hfbWV0aG9kPScu JHNlYXJjaF9tZXRob2QuYS4nY3JpdD0nLiRjcml0Ow0KCQkJCSRvdXQgPSBzbWRfdGh1bWJf aW1nKCRyb3csICRjdXJyaW1nKTsNCgkJCQlyZXR1cm4gKCRvdXQpID8gaHJlZigkb3V0LCAk ZWRpdF91cmwpIDogZ1R4dCgnbm8nKTsNCgkJCX0gZWxzZSB7DQoJCQkJcmV0dXJuIGdUeHQo J25vJyk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gZ1R4dCgnbm8nKTsNCgkJfQ0K CX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEb24ndCB3YW50IHRo ZSAnY3JlYXRlJyBjb250cm9scyBhcyB0aGV5J3JlIGhhbmRsZWQgaW4gdGhlIGVkaXQgcG9y dGlvbiBvZiB0aGUgc2NyZWVuDQpmdW5jdGlvbiBzbWRfdGh1bWJfY3JlYXRlKCRldnQsICRz dHAsICRkZmx0LCAkY3VycmltZykgew0KCXJldHVybiAnICc7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KLy8gV2l0aCBhIGxvdCBvZiBpbWFnZXMgaW4gdGhlIGRhdGFi YXNlLCBkb2luZyBpdCBhbGwgaW4gb25lIGhpdCB3b3VsZCB0aW1lIG91dC4NCi8vIFNvIGl0 J3MgZG9uZSB2aWEgYWpheDsgb25lIHJlcXVlc3QgcGVyIGltYWdlDQpmdW5jdGlvbiBzbWRf dGh1bWJfY3JlYXRlX2FsbCgpIHsNCgkkaW1hZ2VzID0gc2FmZV9jb2x1bW4oJ2lkJywgJ3R4 cF9pbWFnZScsICcxPTEnKTsNCgkkY291bnQgPSBjb3VudCgkaW1hZ2VzKTsNCg0KCWVjaG8g JzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOw0KCWVjaG8gInZhciBiY3RyID0g MDsgdmFyIGJ0b3QgPSB7JGNvdW50fTsiOw0KCWVjaG8gJ2pRdWVyeShmdW5jdGlvbigpIHsn Ow0KCWVjaG8gJ2pRdWVyeSgiI3NtZF90aHVtYl9idG90IikudGV4dCgiLycuJGNvdW50Lici KTsnOw0KCWZvcmVhY2ggKCRpbWFnZXMgYXMgJGltZykgew0KCQllY2hvIDw8PEVPSlMNCgkJ c2VuZEFzeW5jRXZlbnQoDQoJCXsNCgkJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwNCgkJ CXN0ZXA6ICdzbWRfdGh1bWJfY3JlYXRlX29uZScsDQoJCQlzbWRfdGh1bWJfaW1naWQ6IHsk aW1nfQ0KCQl9LCBzbWRfY3JlYXRlX2FsbF9mZWVkYmFjayk7DQpFT0pTOw0KCX0NCgllY2hv ICd9KTsnOw0KCWVjaG8gPDw8RU9KUw0KCWZ1bmN0aW9uIHNtZF9jcmVhdGVfYWxsX2ZlZWRi YWNrKCkgew0KCQliY3RyKys7DQoJCWpRdWVyeSgnI3NtZF90aHVtYl9iY3VycicpLnRleHQo YmN0cik7DQoJCWlmIChiY3RyID49IGJ0b3QpIHsNCgkJCWpRdWVyeSgnI3NtZF90aHVtYl9i Y3Vyciwjc21kX3RodW1iX2J0b3QnKS5lbXB0eSgpOw0KCQl9DQoJfQ0KRU9KUzsNCgllY2hv ICc8L3NjcmlwdD4nOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF90aHVtYl9jcmVhdGVfb25lKCkgew0KCSRjdXJyaW1nID0gZ3BzKCdzbWRfdGh1 bWJfaW1naWQnKTsNCglhc3NlcnRfaW50KCRjdXJyaW1nKTsNCg0KCSRycyA9IHNhZmVfcm93 cygnKicsIFNNRF9USFVNQiwgJzE9MSBBTkQgZmxhZ3MgJiAnLlNNRF9USFVNQl9BQ1RJVkUp Ow0KCSRjdXJyID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgImlkPSIuZG9TbGFzaCgk Y3VycmltZykpOw0KCWlmICgkcnMpIHsNCgkJc21kX3RodW1iX21ha2UoJHJzLCAkY3Vycik7 DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKCk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKCkgew0KCSRuYW1l ID0gZG9TbGFzaChncHMoJ3NtZF90aHVtYl9wcm9maWxlJykpOw0KCWlmICgkbmFtZSkgew0K CQlzYWZlX3VwZGF0ZShTTURfVEhVTUIsICdmbGFncyA9IGZsYWdzIF4gJy5TTURfVEhVTUJf QUNUSVZFLCAibmFtZT0nJG5hbWUnIik7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdz bWRfdGh1bWJfcHJvZmlsZScgPT4gJG5hbWUpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9wcmVmKCkgew0KCSRu YW1lID0gZG9TbGFzaChncHMoJ3NtZF90aHVtYl90eHB0eXBlJykpOw0KCSRzdGF0ZSA9IGRv U2xhc2goZ3BzKCdzbWRfdGh1bWJfc3RhdGUnKSk7DQoJaWYgKCRuYW1lKSB7DQoJCXNldF9w cmVmKCdzbWRfdGh1bWJfJy4kbmFtZSwgJHN0YXRlLCAnc21kX3RodW1iJywgUFJFRl9ISURE RU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJc2VuZF94bWxfcmVzcG9u c2UoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3RodW1iX2dlbmVyYXRlKCRldnQsICRzdHApIHsNCgkkaWQgPSBkb1NsYXNoKGdwcygn aWQnKSk7DQoNCgkkaWQgPSAoJGlkKSA/ICRpZCA6ICRHTE9CQUxTWydJRCddOw0KCSRycyA9 IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBBTkQgZmxhZ3MgJiAnLlNNRF9USFVN Ql9BQ1RJVkUpOw0KDQoJc21kX3RodW1iX21ha2UoJHJzLCAkaWQpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9kZWxldGUoJGV2dCwg JHN0cCkgew0KCSRpZHMgPSBncHMoJ3NlbGVjdGVkJyk7DQoJJHJzID0gc2FmZV9yb3dzKCcq JywgU01EX1RIVU1CLCAnMT0xJyk7DQoNCgkkaW1hZ2VzID0gc2FmZV9yb3dzKCcqJywgJ3R4 cF9pbWFnZScsICdpZCBJTiAoJyAuIGpvaW4oJywnLHF1b3RlX2xpc3QoJGlkcykpIC4gJykn KTsNCglmb3JlYWNoICgkaW1hZ2VzIGFzICRpbWcpIHsNCgkJc21kX3RodW1iX3VubWFrZSgk cnMsICRpbWcpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBzbWRfdGh1bWJfbWFrZSgkcnMsICRjdXJyaW1nKSB7DQoJLy8gV3JhcHBlciBmb3Ig d2V0X3RodW1iIHRvIGFsbG93IG11bHRpcGxlIHRodW1ibmFpbHMNCgkkbXNnID0gJyc7DQoJ aWYgKCFjbGFzc19leGlzdHMoJ3NtZF90aHVtYicpKSB7DQoJCWNsYXNzIHNtZF90aHVtYiBl eHRlbmRzIHdldF90aHVtYiB7DQoJCQl2YXIgJG1fZXh0Ow0KCQkJdmFyICRtX2lkOw0KCQkJ dmFyICRtX2RpcjsNCgkJCXZhciAkbV9kZmx0Ow0KCQkJdmFyICR3aWR0aDsNCgkJCXZhciAk aGVpZ2h0Ow0KDQoJCQkvLyBDb25zdHJ1Y3Rvcg0KCQkJZnVuY3Rpb24gc21kX3RodW1iICgk aWQsICRkaXIsICRpbWdfcm93LCAkaXNfZGVmYXVsdD1mYWxzZSwgJHByb193PScnLCAkcHJv X2g9JycpIHsNCgkJCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJCQkJaWYgKCRpbWdfcm93 KSB7DQoJCQkJCWV4dHJhY3QoJGltZ19yb3cpOw0KCQkJCQkkdGhpcy0+bV9pZCA9ICRpZDsN CgkJCQkJJHRoaXMtPm1fZXh0ID0gJGV4dDsNCgkJCQkJJHRoaXMtPm1fZGlyID0gJGRpcjsN CgkJCQkJJHRoaXMtPndpZHRoID0gJHByb193Ow0KCQkJCQkkdGhpcy0+aGVpZ2h0ID0gJHBy b19oOw0KCQkJCQkkdGhpcy0+bV9kZmx0ID0gJGlzX2RlZmF1bHQ7DQoJCQkJfQ0KCQkJCSR0 aGlzLT53ZXRfdGh1bWIoKTsgLy8gY29uc3RydWN0IGJhc2UgY2xhc3MgaW5zdGFuY2UNCgkJ CX0NCg0KCQkJZnVuY3Rpb24gd3JpdGUoKSB7DQoJCQkJaWYgKCAhaXNzZXQoJHRoaXMtPm1f ZXh0KSApIHJldHVybiBmYWxzZTsNCg0KCQkJCSRpbmZpbGUgPSBJTVBBVEguJHRoaXMtPm1f aWQuJHRoaXMtPm1fZXh0Ow0KCQkJCSRvdXRmaWxlID0gSU1QQVRILiR0aGlzLT5tX2Rpci5E Uy4kdGhpcy0+bV9pZC4kdGhpcy0+bV9leHQ7DQoNCgkJCQkvLyBJZiB0aGlzIGlzIHRoZSBk ZWZhdWx0IHByb2ZpbGUgYW5kIHRoZSBwcmVmIGluZGljYXRlcywgd3JpdGUgYSBUWFAgdGh1 bWIgdG9vDQoJCQkJaWYgKCgkdGhpcy0+bV9kZmx0ID09IHRydWUpICYmIChnZXRfcHJlZign c21kX3RodW1iX3R4cF9jcmVhdGUnLCAnMCcpKSkgew0KCQkJCQkkdHhwX3RodW1iID0gSU1Q QVRILiR0aGlzLT5tX2lkLid0Jy4kdGhpcy0+bV9leHQ7DQoJCQkJCWlmICggcGFyZW50Ojp3 cml0ZSAoICRpbmZpbGUsICR0eHBfdGh1bWIgKSApIHsNCgkJCQkJCXNhZmVfdXBkYXRlKCd0 eHBfaW1hZ2UnLCAidGh1bWJuYWlsID0gMSwgdGh1bWJfdyA9ICR0aGlzLT53aWR0aCwgdGh1 bWJfaCA9ICR0aGlzLT5oZWlnaHQiLCAnaWQgPSAnLiR0aGlzLT5tX2lkKTsNCgkJCQkJCUBj aG1vZCgkb3V0ZmlsZSwgMDY0NCk7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQlpZiAoIHBhcmVu dDo6d3JpdGUgKCAkaW5maWxlLCAkb3V0ZmlsZSApICkgew0KCQkJCQlAY2htb2QoJG91dGZp bGUsIDA2NDQpOw0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQkJcmV0dXJuIGZhbHNl Ow0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gSWYgcGFzc2VkIG9ubHkgYW4gSUQsIGxvb2sgdXAg dGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGENCglpZiAoIWlzX2FycmF5KCRjdXJyaW1nKSkg ew0KCQlhc3NlcnRfaW50KCRjdXJyaW1nKTsNCgkJJGN1cnJpbWcgPSBzYWZlX3JvdygnKics ICd0eHBfaW1hZ2UnLCAnaWQ9Jy4kY3VycmltZyk7DQoJfQ0KDQoJLy8gQ3JlYXRlIGVhY2gg dGh1bWJuYWlsDQoJJHByb19kZmx0ID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3By b2ZpbGUnLCAnJyk7DQoJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJLy8gU2FuaXRpemUg YSBsaXR0bGUNCgkJJHdpZHRoID0gKGludCkgJHJvd1snd2lkdGgnXTsNCgkJJGhlaWdodCA9 IChpbnQpICRyb3dbJ2hlaWdodCddOw0KCQlpZiAoJHdpZHRoID09IDApICR3aWR0aCA9ICcn Ow0KCQlpZiAoJGhlaWdodCA9PSAwKSAkaGVpZ2h0ID0gJyc7DQoJCWlmICgkd2lkdGggPT09 ICcnICYmICRoZWlnaHQgPT09ICcnKSBjb250aW51ZTsNCgkJJGFjdGl2ZSA9ICgkcm93Wydm bGFncyddICYgU01EX1RIVU1CX0FDVElWRSkgPyAxIDogMDsNCgkJJGNyb3AgPSAoJHJvd1sn ZmxhZ3MnXSAmIFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOw0KCQkkc2hhcnBlbiA9ICgkcm93 WydmbGFncyddICYgU01EX1RIVU1CX1NIQVJQKSA/IDEgOiAwOw0KCQkkaWQgPSAkY3Vycmlt Z1snaWQnXTsNCgkJJGlzX2RmbHQgPSAoJHJvd1snbmFtZSddID09ICRwcm9fZGZsdCkgPyB0 cnVlIDogZmFsc2U7DQoNCgkJJHQgPSBuZXcgc21kX3RodW1iKCRpZCwgc2FuaXRpemVGb3JV cmwoJHJvd1snbmFtZSddKSwgJGN1cnJpbWcsICRpc19kZmx0KTsNCgkJJHQtPmNyb3AgPSAo JGNyb3AgPT0gJzEnKTsNCgkJJHQtPnNoYXJwZW4gPSAoJHNoYXJwZW4gPT0gJzEnKTsNCgkJ JHQtPmhpbnQgPSAnMCc7DQoJCSR0LT53aWR0aCA9ICR3aWR0aDsNCgkJJHQtPmhlaWdodCA9 ICRoZWlnaHQ7DQoJCSR0LT5xdWFsaXR5ID0gJHJvd1sncXVhbGl0eSddOw0KCQlpZiAoJHQt PndyaXRlKCkpIHsNCgkJCSRtc2cgPSBnVHh0KCd0aHVtYm5haWxfc2F2ZWQnLCBhcnJheSgn e2lkfScgPT4gJGlkKSk7DQoJCX0gZWxzZSB7DQoJCQkkbXNnID0gYXJyYXkoZ1R4dCgndGh1 bWJuYWlsX25vdF9zYXZlZCcsIGFycmF5KCd7aWR9JyA9PiAkaWQpKSwgRV9FUlJPUik7DQoJ CX0NCgl9DQoJcmV0dXJuICRtc2c7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX3RodW1iX3VubWFrZSgkcnMsICRjdXJyaW1nKSB7DQoJJGlkID0g JGN1cnJpbWdbJ2lkJ107DQoJJGV4dCA9ICRjdXJyaW1nWydleHQnXTsNCgkkcHJvX2RmbHQg PSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnKTsNCgkkdHhwX2Rl bCA9IGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2RlbGV0ZScsICcwJyk7DQoNCglmb3JlYWNo ICgkcnMgYXMgJHJvdykgew0KCQkkcGF0aCA9IElNUEFUSC5zYW5pdGl6ZUZvclVybCgkcm93 WyduYW1lJ10pLkRTLiRpZC4kZXh0Ow0KCQlpZiAoZmlsZV9leGlzdHMoJHBhdGgpKSB7DQoJ CQl1bmxpbmsoJHBhdGgpOw0KCQl9DQoNCgkJLy8gQWxzbyByZW1vdmUgVFhQJ3MgYnVpbHQt aW4gdGh1bWI/DQoJCWlmICgoJHJvd1snbmFtZSddID09ICRwcm9fZGZsdCkgJiYgKCR0eHBf ZGVsID09ICcxJykpIHsNCgkJCSRwYXRoID0gSU1QQVRILiRpZC4ndCcuJGV4dDsNCgkJCWlm IChmaWxlX2V4aXN0cygkcGF0aCkpIHsNCgkJCQlzYWZlX3VwZGF0ZSgndHhwX2ltYWdlJywg InRodW1ibmFpbCA9IDAsIHRodW1iX3cgPSAwLCB0aHVtYl9oID0gMCIsICdpZCA9ICcuJGlk KTsNCgkJCQl1bmxpbmsoJHBhdGgpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiAnJzsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfaW5z ZXJ0KCkgew0KCWdsb2JhbCAkdHhwY2ZnLCR0eHBfdXNlciwkaW1nX2RpciwkcGF0aF90b19z aXRlLCAkcGFnZSwgJHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZDsNCg0KCWlm ICghZGVmaW5lZCgnSU1QQVRIJykpIHsNCgkJZGVmaW5lKCdJTVBBVEgnLCRwYXRoX3RvX3Np dGUuRFMuJGltZ19kaXIuRFMpOw0KCX0NCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgncGFnZScs ICdzb3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkpOw0KDQoJaW5jbHVk ZV9vbmNlIHR4cGF0aC4nL2xpYi90eHBsaWJfbWlzYy5waHAnOw0KDQoJZXh0cmFjdCgkdHhw Y2ZnKTsNCgkkaWQgPSBhc3NlcnRfaW50KGdwcygnaWQnKSk7DQoJJHByb2ZpbGUgPSBncHMo J3NtZF90aHVtYl9wcm9maWxlJyk7DQoJJHRodW1iX2V4dCA9IGdwcygnc21kX3RodW1iX2V4 dCcpOw0KDQoJJGF1dGhvciA9IGZldGNoKCdhdXRob3InLCAndHhwX2ltYWdlJywgJ2lkJywg JGlkKTsNCglpZiAoIWhhc19wcml2cygnaW1hZ2UuZWRpdCcpICYmICEoJGF1dGhvciA9PSAk dHhwX3VzZXIgJiYgaGFzX3ByaXZzKCdpbWFnZS5lZGl0Lm93bicpKSkgew0KCQlyZXR1cm47 DQoJfQ0KDQoJJGZpbGUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ107DQoJJG5h bWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCg0KCSRmaWxlID0gZ2V0X3VwbG9h ZGVkX2ZpbGUoJGZpbGUpOw0KDQoJaWYgKGVtcHR5KCRmaWxlKSkNCgl7DQoJCXJldHVybjsN Cgl9DQoNCglsaXN0KCR3LCAkaCwgJGV4dGVuc2lvbikgPSBnZXRpbWFnZXNpemUoJGZpbGUp Ow0KCSR2YWxpZF9leHRzID0gYXJyYXkoDQoJCUlNQUdFVFlQRV9HSUYgID0+ICcuZ2lmJywN CgkJSU1BR0VUWVBFX0pQRUcgPT4gJy5qcGcnLA0KCQlJTUFHRVRZUEVfUE5HICA9PiAnLnBu ZycsDQoJCUlNQUdFVFlQRV9TV0YgID0+ICcuc3dmJywNCgkpOw0KCSRleHQgPSBpc3NldCgk dmFsaWRfZXh0c1skZXh0ZW5zaW9uXSkgPyAkdmFsaWRfZXh0c1skZXh0ZW5zaW9uXSA6ICcn Ow0KDQoJaWYgKCgkZmlsZSAhPT0gZmFsc2UpICYmICRwcm9maWxlICYmICRleHQpIHsNCgkJ JG5ld3BhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwoJHByb2ZpbGUpLkRTLiRpZC4kZXh0 Ow0KCQlpZiAoc2hpZnRfdXBsb2FkZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGgpID09IGZhbHNl KSB7DQoJCX0gZWxzZSB7DQoJCQlAY2htb2QoJG5ld3BhdGgsIDA2NDQpOw0KCQkJJG1lc3Nh Z2UgPSBnVHh0KCdpbWFnZV91cGxvYWRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSk7 DQoJCX0NCgl9DQoNCgkvLyBTaW5jZSB0aGUgaGVhZGVycyBoYXZlIGJlZW4gc2VudCwgcmVz b3J0IHRvIGpzIHRvIHJlZnJlc2ggdGhlIHBhZ2UNCgkkdXJsID0gJz9ldmVudD1pbWFnZSZz dGVwPWltYWdlX2VkaXQmaWQ9Jy4kaWQuJyZzb3J0PScuJHNvcnQuJyZkaXI9Jy4kZGlyLicm cGFnZT0nLiRwYWdlLicmc2VhcmNoX21ldGhvZD0nLiRzZWFyY2hfbWV0aG9kLicmY3JpdD0n LiRjcml0Ow0KCWVjaG8gPDw8RU9TDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ DQp3aW5kb3cubG9jYXRpb24uaHJlZj0ieyR1cmx9IjsNCjwvc2NyaXB0Pg0KPG5vc2NyaXB0 Pg0KPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAv Pg0KPC9ub3NjcmlwdD4NCkVPUzsNCglleGl0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9lZGl0KCRldnQsICRzdHAsICRkZmx0LCAk Y3VycmltZykgew0KCWdsb2JhbCAkc3RlcCwgJGZpbGVfbWF4X3VwbG9hZF9zaXplLCAkdHhw X3VzZXIsICRzbWRfdGh1bWJfc3R5bGVzOw0KDQoJZXh0cmFjdChncHNhKGFycmF5KCdpZCcs ICdwYWdlJywgJ3NvcnQnLCAnZGlyJywgJ2NyaXQnLCAnc2VhcmNoX21ldGhvZCcsICdzbWRf dGh1bWJuYWlsX3NpemUnLCAnc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZScsICdzbWRfdGh1 bWJuYWlsX2RlbGV0ZScsICdzbWRfc3RlcCcpKSk7DQoNCgkkaWQgPSAoJGlkKSA/ICRpZCA6 ICRHTE9CQUxTWydJRCddOw0KDQoJLy8gVG9nZ2xlIHByb2ZpbGUgcGFuZWwNCglpZiAoJHN0 ZXAgPT0gJ3NhdmVfcGFuZV9zdGF0ZScpIHsNCgkJc21kX3RodW1ibmFpbF9zYXZlX3BhbmVf c3RhdGUoKTsNCgkJcmV0dXJuOw0KCX0NCg0KCS8vIENyZWF0ZS9kZWxldGUgdGhlIHNlbGVj dGVkIHRodW1icyBkZXBlbmRpbmcgb24gdGhlIGJ1dHRvbiBwcmVzc2VkDQoJaWYgKCRzbWRf c3RlcCA9PSAnc21kX3RodW1ibmFpbF9tYW5hZ2UnKSB7DQoJCS8vIFZhbGlkYXRlIHVzZXIN CgkJJGF1dGhvciA9IGZldGNoKCdhdXRob3InLCAndHhwX2ltYWdlJywgJ2lkJywgJGlkKTsN CgkJaWYgKCFoYXNfcHJpdnMoJ2ltYWdlLmVkaXQnKSAmJiAhKCRhdXRob3IgPT0gJHR4cF91 c2VyICYmIGhhc19wcml2cygnaW1hZ2UuZWRpdC5vd24nKSkpDQoJCXsNCgkJCWltYWdlX2xp c3QoZ1R4dCgncmVzdHJpY3RlZF9hcmVhJykpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJLy8g R3JhYiB0aGUgdGh1bWJuYWlscyB0byB3b3JrIG9uDQoJCSR3aGVyZSA9ICgkc21kX3RodW1i bmFpbF9zaXplPT0nYWxsJykgPyAnMT0xIEFORCBmbGFncyAmICcuU01EX1RIVU1CX0FDVElW RSA6ICJuYW1lPSciLmRvU2xhc2goJHNtZF90aHVtYm5haWxfY2hvc2VuX3NpemUpLiInIjsN CgkJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCAkd2hlcmUpOw0KDQoJCS8vIERv IGl0DQoJCWlmKCRzbWRfdGh1bWJuYWlsX2RlbGV0ZSkgew0KCQkJJG1zZyA9IHNtZF90aHVt Yl91bm1ha2UoJHJzLCAkY3VycmltZyk7DQoJCX0gZWxzZSB7DQoJCQkkbXNnID0gc21kX3Ro dW1iX21ha2UoJHJzLCAkY3VycmltZyk7DQoJCX0NCgl9DQoNCgkkZXh0ID0gJGN1cnJpbWdb J2V4dCddOw0KCWVjaG8gPDw8RU9DDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ DQpmdW5jdGlvbiBzbWRfdGh1bWJfc2VsZWN0b3Ioc2VsKSB7DQoJdmFyIGlkeCA9IDA7DQoJ alF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlpZiAoalF1 ZXJ5KHRoaXMpLmhhc0NsYXNzKHNlbCkpIHsNCgkJCWpRdWVyeSh0aGlzKS50b2dnbGVDbGFz cygnc21kX3NlbGVjdGVkJyk7DQoJCQlpZiAoalF1ZXJ5KHRoaXMpLmhhc0NsYXNzKCdzbWRf c2VsZWN0ZWQnKSkgew0KCQkJCWpRdWVyeSgiI3NtZF91cGxvYWRfdGh1bWJuYWlsIikuYXR0 cignZGlzYWJsZWQnLCBmYWxzZSk7DQoJCQkJalF1ZXJ5KCIjc21kX3RodW1iX3Byb2ZpbGUi KS52YWwoc2VsKTsNCgkJCQlpZHggPSBqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX3NpemUgb3B0 aW9uW3ZhbHVlPSciK3NlbCsiJ10iKS5pbmRleCgpOw0KCQkJCWpRdWVyeSgiI3NtZF90aHVt Ym5haWxfY2hvc2VuX3NpemUiKS52YWwoc2VsKTsNCgkJCX0gZWxzZSB7DQoJCQkJalF1ZXJ5 KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOw0KCQkJ CWpRdWVyeSgiI3NtZF90aHVtYl9wcm9maWxlIikudmFsKCcnKTsNCgkJCQlqUXVlcnkoIiNz bWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplIikudmFsKCcnKTsNCgkJCX0NCgkJfSBlbHNlIHsN CgkJCWpRdWVyeSh0aGlzKS5yZW1vdmVDbGFzcygnc21kX3NlbGVjdGVkJyk7DQoJCX0NCgl9 KTsNCglqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX3NpemUiKS5hdHRyKCJzZWxlY3RlZEluZGV4 IiwgaWR4KTsNCn0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zZWxlY3RfY2hhbmdlZCgpIHsNCglv YmogPSBqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX3NpemUiKTsNCglpZiAob2JqLmF0dHIoInNl bGVjdGVkSW5kZXgiKSA9PSAwKSB7DQoJCWpRdWVyeSgiI3NtZF91cGxvYWRfdGh1bWJuYWls IikuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsNCgkJalF1ZXJ5KCIjc21kX3RodW1iX3Byb2Zp bGUiKS52YWwoJycpOw0KCQlqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplIiku dmFsKCcnKTsNCgl9IGVsc2Ugew0KCQlqUXVlcnkoIiNzbWRfdXBsb2FkX3RodW1ibmFpbCIp LmF0dHIoJ2Rpc2FibGVkJywgZmFsc2UpOw0KCQlqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmls ZSIpLnZhbChvYmoudmFsKCkpOw0KCQlqUXVlcnkoIiNzbWRfdGh1bWJuYWlsX2Nob3Nlbl9z aXplIikudmFsKG9iai52YWwoKSk7DQoJfQ0KCWpRdWVyeSgiI3NtZF90aHVtYnMgaW1nIiku ZWFjaChmdW5jdGlvbigpIHsNCgkJaWYgKGpRdWVyeSh0aGlzKS5oYXNDbGFzcyhvYmoudmFs KCkpKSB7DQoJCQlqUXVlcnkodGhpcykuYWRkQ2xhc3MoJ3NtZF9zZWxlY3RlZCcpOw0KCQl9 IGVsc2Ugew0KCQkJalF1ZXJ5KHRoaXMpLnJlbW92ZUNsYXNzKCdzbWRfc2VsZWN0ZWQnKTsN CgkJfQ0KCX0pOw0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiI3NtZF90aHVt YnMgaW1nIikuZWFjaChmdW5jdGlvbigpIHsNCgkJdmFyIGNscyA9IGpRdWVyeSh0aGlzKS5h dHRyKCdjbGFzcycpOw0KCQlqUXVlcnkodGhpcykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQlz bWRfdGh1bWJfc2VsZWN0b3IoY2xzKTsNCgkJfSk7DQoJfSk7DQoJalF1ZXJ5KCIjc21kX3Vw bG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOw0KCWpRdWVyeSgiLnRo dW1ibmFpbC11cGxvYWQiKS5wcmVwZW5kKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJz bWRfdGh1bWJfaW1naWQiIHZhbHVlPSJ7JGlkfSIgLz48aW5wdXQgdHlwZT0iaGlkZGVuIiBp ZD0ic21kX3RodW1iX3Byb2ZpbGUiIG5hbWU9InNtZF90aHVtYl9wcm9maWxlIiB2YWx1ZT0i IiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzbWRfdGh1bWJfZXh0IiBuYW1lPSJzbWRf dGh1bWJfZXh0IiB2YWx1ZT0ieyRleHR9IiAvPicpOw0KfSk7DQo8L3NjcmlwdD4NCkVPQzsN Cg0KCS8vIEluamVjdCBzdHlsZXMNCgllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicg LiAkc21kX3RodW1iX3N0eWxlc1snZWRpdCddIC4gJzwvc3R5bGU+JzsNCg0KCS8vIEFkZCB0 aHVtYm5haWxzIGFuZCBjcmVhdGlvbiBjb250cm9scw0KCWlmIChzbWRfdGh1bWJfdGFibGVf ZXhpc3QoKSkgew0KCQkkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURfVEhVTUIsICcxPTEgT1JE RVIgQlkgbmFtZScpOw0KCQlpZiAoJHJzKSB7DQoJCQkkcHJvZmlsZXMgPSBhcnJheSgnYWxs JyA9PiBzbWRfdGh1bWJfZ1R4dCgnYWxsX3NpemVzJykpOw0KCQkJJHRodW1ic1tdID0gJzxk aXYgaWQ9InNtZF90aHVtYnMiPic7DQoJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJ CWlmICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX0FDVElWRSkgew0KCQkJCQkkcHJvZmls ZXNbJHJvd1snbmFtZSddXSA9ICRyb3dbJ25hbWUnXTsNCgkJCQl9DQoJCQkJJHRodW1ic1td ID0gc21kX3RodW1iX2ltZygkcm93LCAkY3VycmltZyk7DQoJCQl9DQoJCQkkdGh1bWJzW10g PSAnPC9kaXY+JzsNCgkJCSRxcyA9IGFycmF5KA0KCQkJCSJldmVudCIgPT4gJ2ltYWdlJywN CgkJCQkic3RlcCIgPT4gJ2ltYWdlX2VkaXQnLA0KCQkJCSJpZCIgPT4gJGlkLA0KCQkJCSJw YWdlIiA9PiAkcGFnZSwNCgkJCQkic29ydCIgPT4gJHNvcnQsDQoJCQkJImRpciIgPT4gJGRp ciwNCgkJCQkiY3JpdCIgPT4gJGNyaXQsDQoJCQkJInNlYXJjaF9tZXRob2QiID0+ICRzZWFy Y2hfbWV0aG9kLA0KCQkJKTsNCg0KCQkJJG91dFtdID0gJzxkaXYgaWQ9InNtZF90aHVtYm5h aWxfY29udHJvbCI+PHNwYW4gY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVf c21kX3RodW1ibmFpbHNfdmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+PGEgaHJl Zj0iI3NtZF90aHVtYm5haWxzIj4nLnNtZF90aHVtYl9nVHh0KCd0aHVtYm5haWxfaGVhZGlu ZycpLic8L2E+PC9zcGFuPjxkaXYgaWQ9InNtZF90aHVtYm5haWxzIiBjbGFzcz0idG9nZ2xl IiBzdHlsZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsc192aXNp YmxlJykgPyAnYmxvY2snIDogJ25vbmUnKS4nIj4nOw0KCQkJJG91dFtdID0gJzxmb3JtIG5h bWU9InNtZF90aHVtYm5haWxfY3JlYXRlIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy5qb2lu X3FzKCRxcykuJyI+JzsNCgkJCSRvdXRbXSA9IGZJbnB1dCgnaGlkZGVuJywgJ3NtZF9zdGVw JywgJ3NtZF90aHVtYm5haWxfbWFuYWdlJyk7DQoJCQkkb3V0W10gPSBmSW5wdXQoJ2hpZGRl bicsICdzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplJywgJycsICcnLCAnJywgJycsICcnLCAn JywgJ3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUnKTsNCgkJCSRvdXRbXSA9IHNlbGVjdElu cHV0KCdzbWRfdGh1bWJuYWlsX3NpemUnLCAkcHJvZmlsZXMsICcnLCAnJywgJ29uY2hhbmdl PSJyZXR1cm4gc21kX3RodW1iX3NlbGVjdF9jaGFuZ2VkKCkiOycsICdzbWRfdGh1bWJuYWls X3NpemUnKTsNCgkJCSRvdXRbXSA9IGZJbnB1dCgnc3VibWl0JywgJycsIGdUeHQoJ2NyZWF0 ZScpLCAnc21hbGxlcmJveCcpOw0KCQkJJG91dFtdID0gZklucHV0KCdzdWJtaXQnLCAnc21k X3RodW1ibmFpbF9kZWxldGUnLCBnVHh0KCdkZWxldGUnKSwgJ3NtYWxsZXJib3gnKTsNCgkJ CSRvdXRbXSA9IGpvaW4oJycsICR0aHVtYnMpOw0KCQkJJG91dFtdID0gJzwvZm9ybT4nOw0K CQkJJG91dFtdID0gdXBsb2FkX2Zvcm0oc21kX3RodW1iX2dUeHQoJ3VwbG9hZCcpLCAndXBs b2FkX3RodW1ibmFpbCcsICdzbWRfdGh1bWJuYWlsX2luc2VydCcsICdpbWFnZScsICRpZCwg JGZpbGVfbWF4X3VwbG9hZF9zaXplLCAnc21kX3VwbG9hZF90aHVtYm5haWwnLCAndGh1bWJu YWlsLXVwbG9hZCcpOw0KCQkJJG91dFtdID0gJzwvZGl2Pic7DQoJCQlyZXR1cm4gam9pbign JywgJG91dCk7DQoJCX0NCgl9DQoJcmV0dXJuICcgJzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfaW1nKCRyb3csICRjdXJyaW1nLCAk bWV0YT1hcnJheSgpKSB7DQoJZ2xvYmFsICRpbWdfZGlyLCAkcHJlZnM7DQoNCgkkZGlyID0g c2FuaXRpemVGb3JVcmwoJHJvd1snbmFtZSddKTsNCgkkaWQgPSAkY3VycmltZ1snaWQnXTsN CgkkZXh0ID0gJGN1cnJpbWdbJ2V4dCddOw0KDQoJJHBhdGggPSBJTVBBVEguJGRpci5EUy4k aWQuJGV4dDsNCg0KCWlmIChmaWxlX2V4aXN0cygkcGF0aCkpIHsNCgkJJGV4dHJhcyA9ICcn Ow0KCQlpZiAoaXNzZXQoJG1ldGFbJ2ZvcmNldyddKSB8fCBpc3NldCgkbWV0YVsnZm9yY2Vo J10pKSB7DQoJCQkkZGltcyA9IGdldGltYWdlc2l6ZSgkcGF0aCk7DQoJCQlpZiAoaXNzZXQo JG1ldGFbJ2ZvcmNldyddKSAmJiAhJHJvd1snd2lkdGgnXSkgew0KCQkJCSRyb3dbJ3dpZHRo J10gPSAkZGltc1swXTsNCgkJCX0NCgkJCWlmIChpc3NldCgkbWV0YVsnZm9yY2VoJ10pICYm ICEkcm93WydoZWlnaHQnXSkgew0KCQkJCSRyb3dbJ2hlaWdodCddID0gJGRpbXNbMV07DQoJ CQl9DQoJCQl1bnNldCgkbWV0YVsnZm9yY2V3J10pOw0KCQkJdW5zZXQoJG1ldGFbJ2ZvcmNl aCddKTsNCgkJfQ0KCQkkdyA9ICgkcm93Wyd3aWR0aCddKSA/ICcgd2lkdGg9IicuJHJvd1sn d2lkdGgnXS4nIic6ICcnOw0KCQkkaCA9ICgkcm93WydoZWlnaHQnXSkgPyAnIGhlaWdodD0i Jy4kcm93WydoZWlnaHQnXS4nIic6ICcnOw0KDQoJCSR1RGF0ZSA9ICcnOw0KCQlpZiAoIWlz c2V0KCRtZXRhWydzdGFtcCddKSkgew0KCQkJJHVEYXRlID0gJz8nLmZpbGVtdGltZSgkcGF0 aCk7DQoJCX0NCgkJdW5zZXQoJG1ldGFbJ3N0YW1wJ10pOw0KDQoJCWlmICghaXNzZXQoJG1l dGFbJ2NsYXNzJ10pKSB7DQoJCQkkbWV0YVsnY2xhc3MnXSA9ICRkaXI7DQoJCX0NCg0KCQlm b3JlYWNoICgkbWV0YSBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCSRleHRyYXMgLj0gJyAnLiRr ZXkuJz0iJy4kdmFsLiciJzsNCgkJfQ0KCQlyZXR1cm4gJzxpbWcgc3JjPSInLmlodS4kaW1n X2Rpci4nLycuJGRpci4nLycuJGlkLiRleHQuJHVEYXRlLiciJy4kdy4kaC4kZXh0cmFzLicg Lz4nOw0KCX0NCg0KCXJldHVybiAnJzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfcHJvZmlsZXMoJGV2dCwgJHN0cCwgJGRmbHQsICRp bWdsaXN0KSB7DQoJZ2xvYmFsICRzbWRfdGh1bWJfZXZlbnQsICRwcmVmcywgJHN0ZXAsICRz bWRfdGh1bWJfc3R5bGVzOw0KDQoJaWYgKCFoYXNfcHJpdnMoX19GVU5DVElPTl9fKSkgew0K CQlyZXR1cm47DQoJfQ0KDQoJZXh0cmFjdChncHNhKGFycmF5KA0KCQkncGFnZScsDQoJCSdz b3J0JywNCgkJJ2RpcicsDQoJCSdjcml0JywNCgkJJ3NlYXJjaF9tZXRob2QnLA0KCQknc21k X3RodW1iX2FkZCcsDQoJCSdzbWRfdGh1bWJfY2FuY2VsJywNCgkJJ3NtZF90aHVtYl9zYXZl JywNCgkJJ3NtZF90aHVtYl9uYW1lJywNCgkJJ3NtZF90aHVtYl9uZXduYW1lJywNCgkJJ3Nt ZF90aHVtYl93aWR0aCcsDQoJCSdzbWRfdGh1bWJfaGVpZ2h0JywNCgkJJ3NtZF90aHVtYl9x dWFsaXR5JywNCgkJJ3NtZF90aHVtYl9hY3RpdmUnLA0KCQknc21kX3RodW1iX2FjdGl2ZV9u ZXcnLA0KCQknc21kX3RodW1iX2Nyb3AnLA0KCQknc21kX3RodW1iX3NoYXJwZW4nLA0KCQkn c21kX3RodW1iX2RlZmF1bHQnKSkpOw0KDQoJLy8gU2FuaXRpemUNCgkkcXVhbGl0eSA9IChp c19udW1lcmljKCRzbWRfdGh1bWJfcXVhbGl0eSkpID8gKCgkc21kX3RodW1iX3F1YWxpdHk8 MCkgPyA3NSA6ICgoJHNtZF90aHVtYl9xdWFsaXR5PjEwMCkgPyA3NSA6ICRzbWRfdGh1bWJf cXVhbGl0eSkgKSA6IDc1Ow0KCSR3aWR0aCA9IChpc19udW1lcmljKCRzbWRfdGh1bWJfd2lk dGgpKSA/ICRzbWRfdGh1bWJfd2lkdGggOiAwOw0KCSRoZWlnaHQgPSAoaXNfbnVtZXJpYygk c21kX3RodW1iX2hlaWdodCkpID8gJHNtZF90aHVtYl9oZWlnaHQgOiAwOw0KCSRuZXduYW1l ID0gc2FuaXRpemVGb3JVcmwoJHNtZF90aHVtYl9uZXduYW1lKTsNCgkkbXNnID0gJyc7DQoN CgkvLyBUYWJsZSBjb250cm9sDQoJaWYgKGdwcygncmVtb3ZlJykpIHsNCgkJc21kX3RodW1i X3RhYmxlX3JlbW92ZSgpOw0KCX0gZWxzZSB7DQoJCWlmICghc21kX3RodW1iX3RhYmxlX2V4 aXN0KCkpIHsNCgkJCXNtZF90aHVtYl90YWJsZV9pbnN0YWxsKCk7DQoJCX0NCgl9DQoNCgkv LyBUb2dnbGUgcHJvZmlsZSBwYW5lbA0KCWlmICgkc3RlcCA9PSAnc2F2ZV9wYW5lX3N0YXRl Jykgew0KCQlzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCQlyZXR1cm47DQoJ fQ0KDQoJaWYgKCRzdGVwID09ICdzbWRfdGh1bWJfY3JlYXRlX2FsbCcpIHsNCgkJc21kX3Ro dW1iX2NyZWF0ZV9hbGwoKTsNCgl9DQoNCgkvLyBTYXZlIHByb2ZpbGUNCglpZiAoJHN0ZXAg PT0gJ3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSB7DQoJCWlmIChzbWRfdGh1bWJfdGFibGVf ZXhpc3QoKSkgew0KCQkJaWYgKCRzbWRfdGh1bWJfY2FuY2VsKSB7DQoJCQkJLy8gRG8gbm90 aGluZw0KCQkJfSBlbHNlIGlmICgkc21kX3RodW1iX2FkZCkgew0KCQkJCS8vIENyZWF0ZSBu ZXcgcHJvZmlsZQ0KCQkJCSRleGlzdHMgPSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwgIm5h bWU9JyIuZG9TbGFzaCgkbmV3bmFtZSkuIiciKTsNCgkJCQlpZiAoJGV4aXN0cykgew0KCQkJ CQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3Byb2ZpbGVfZXhpc3RzJywgYXJyYXkoJ3tuYW1l fScgPT4gZG9TbGFzaCgkbmV3bmFtZSkpKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlpZiAoJG5l d25hbWUpIHsNCgkJCQkJCSRmbGFncyA9IDA7DQoJCQkJCQkkZmxhZ3MgPSAoJHNtZF90aHVt Yl9hY3RpdmVfbmV3KSA/ICRmbGFncyB8IFNNRF9USFVNQl9BQ1RJVkUgOiAkZmxhZ3M7DQoJ CQkJCQkkZmxhZ3MgPSAoJHNtZF90aHVtYl9jcm9wKSA/ICRmbGFncyB8IFNNRF9USFVNQl9D Uk9QIDogJGZsYWdzOw0KCQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfc2hhcnBlbikgPyAk ZmxhZ3MgfCBTTURfVEhVTUJfU0hBUlAgOiAkZmxhZ3M7DQoNCgkJCQkJCXNhZmVfaW5zZXJ0 KFNNRF9USFVNQiwNCgkJCQkJCQkibmFtZT0nIi5kb1NsYXNoKCRuZXduYW1lKS4iJyIuDQoJ CQkJCQkJIiwgd2lkdGg9JyIuZG9TbGFzaCgkd2lkdGgpLiInIi4NCgkJCQkJCQkiLCBoZWln aHQ9JyIuZG9TbGFzaCgkaGVpZ2h0KS4iJyIuDQoJCQkJCQkJIiwgcXVhbGl0eT0nIi5kb1Ns YXNoKCRxdWFsaXR5KS4iJyIuDQoJCQkJCQkJIiwgZmxhZ3M9JyIuZG9TbGFzaCgkZmxhZ3Mp LiInIg0KCQkJCQkJKTsNCg0KCQkJCQkJLy8gQWx0ZXIgdGhlIGRlZmF1bHQgdGh1bWJuYWls DQoJCQkJCQlpZiAoJHNtZF90aHVtYl9kZWZhdWx0KSB7DQoJCQkJCQkJc2V0X3ByZWYoJ3Nt ZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAkbmV3bmFtZSwgJ3NtZF90aHVtYicsIFBSRUZf SElEREVOKTsNCgkJCQkJCX0NCg0KCQkJCQkJLy8gQ3JlYXRlIHRoZSB0aHVtYm5haWwgZGly ZWN0b3J5DQoJCQkJCQlAbWtkaXIoSU1QQVRILiRuZXduYW1lKTsNCgkJCQkJfQ0KCQkJCX0N CgkJCX0gZWxzZSB7DQoJCQkJLy8gVXBkYXRlIGV4aXN0aW5nIHByb2ZpbGUNCgkJCQkkbmFt ZSA9IHNhbml0aXplRm9yVXJsKCRzbWRfdGh1bWJfbmFtZSk7DQoJCQkJJGV4aXN0cyA9IHNh ZmVfcm93KCcqJywgU01EX1RIVU1CLCAibmFtZT0nIi5kb1NsYXNoKCRuZXduYW1lKS4iJyIp Ow0KCQkJCWlmICgkZXhpc3RzICYmIHN0cnRvbG93ZXIoJG5ld25hbWUpICE9IHN0cnRvbG93 ZXIoJG5hbWUpKSB7DQoJCQkJCSRtc2cgPSBzbWRfdGh1bWJfZ1R4dCgncHJvZmlsZV9leGlz dHMnLCBhcnJheSgne25hbWV9JyA9PiBkb1NsYXNoKCRuZXduYW1lKSkpOw0KCQkJCX0gZWxz ZSB7DQoJCQkJCWlmICgkbmV3bmFtZSkgew0KCQkJCQkJJGZsYWdzID0gMDsNCgkJCQkJCSRm bGFncyA9ICgkc21kX3RodW1iX2FjdGl2ZSkgPyAkZmxhZ3MgfCBTTURfVEhVTUJfQUNUSVZF IDogJGZsYWdzOw0KCQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfY3JvcCkgPyAkZmxhZ3Mg fCBTTURfVEhVTUJfQ1JPUCA6ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1i X3NoYXJwZW4pID8gJGZsYWdzIHwgU01EX1RIVU1CX1NIQVJQIDogJGZsYWdzOw0KDQoJCQkJ CQlzYWZlX3VwZGF0ZSgNCgkJCQkJCQlTTURfVEhVTUIsDQoJCQkJCQkJIm5hbWU9JyIuZG9T bGFzaCgkbmV3bmFtZSkuIiciDQoJCQkJCQkJCS4iLCB3aWR0aD0nIi5kb1NsYXNoKCR3aWR0 aCkuIiciDQoJCQkJCQkJCS4iLCBoZWlnaHQ9JyIuZG9TbGFzaCgkaGVpZ2h0KS4iJyINCgkJ CQkJCQkJLiIsIHF1YWxpdHk9JyIuZG9TbGFzaCgkcXVhbGl0eSkuIiciDQoJCQkJCQkJCS4i LCBmbGFncz0nIi5kb1NsYXNoKCRmbGFncykuIiciDQoJCQkJCQkJLCAibmFtZT0nIi5kb1Ns YXNoKCRuYW1lKS4iJyINCgkJCQkJCSk7DQoNCgkJCQkJCS8vIEFsdGVyIHRoZSBkZWZhdWx0 IHRodW1ibmFpbA0KCQkJCQkJaWYgKCRzbWRfdGh1bWJfZGVmYXVsdCkgew0KCQkJCQkJCXNl dF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJG5ld25hbWUsICdzbWRfdGh1 bWInLCBQUkVGX0hJRERFTik7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCS8vIFJlbW92ZSB0 aGUgZGVmYXVsdCBmbGFnIGlmIHRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdA0KCQkJCQkJ CWlmIChnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScpID09IGRvU2xhc2go JG5hbWUpKSB7DQoJCQkJCQkJCXNldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxl JywgJycsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTik7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0K DQoJCQkJCQkvLyBBZGp1c3QgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkgaWYgdGhlIG5hbWUg aGFzIGNoYW5nZWQNCgkJCQkJCWlmICgkbmV3bmFtZSAhPSAkbmFtZSkgew0KCQkJCQkJCXJl bmFtZShJTVBBVEguJG5hbWUsIElNUEFUSC4kbmV3bmFtZSk7DQoJCQkJCQl9DQoJCQkJCX0N CgkJCQl9DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3Rh Ymxlc19ub3RfaW5zdGFsbGVkJyk7DQoJCX0NCgl9DQoNCgkvLyBEZWxldGUgcHJvZmlsZQ0K CWlmICgkc3RlcCA9PSAnc21kX3RodW1iX3Byb2ZpbGVfZGVsZXRlJykgew0KCQlpZiAoc21k X3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJCSR0eHBfZGVsID0gZ2V0X3ByZWYoJ3NtZF90 aHVtYl90eHBfZGVsZXRlJyk7DQoJCQkkdGhlX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1i X2RlZmF1bHRfcHJvZmlsZScsICcnLCAxKTsNCg0KCQkJaWYgKCFlbXB0eSgkc21kX3RodW1i X25hbWUpKSB7DQoJCQkJJG5hbWUgPSBzYW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25hbWUp Ow0KCQkJCSRyZXQgPSBzYWZlX2RlbGV0ZShTTURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2go JG5hbWUpLiInIik7DQoJCQkJaWYgKCRyZXQpIHsNCgkJCQkJc21kX3RodW1iX3JtZGlyKElN UEFUSC4kbmFtZSk7DQoNCgkJCQkJLy8gRGVsZXRlIGFsbCBUWFAgdGh1bWJzIHRvbz8NCgkJ CQkJaWYgKCgkbmFtZSA9PSAkdGhlX2RmbHQpICYmICgkdHhwX2RlbCA9PSAnMScpKSB7DQoJ CQkJCQkkcnMgPSBzYWZlX3Jvd3MoJ2lkLCBleHQnLCAndHhwX2ltYWdlJywgJ3RodW1ibmFp bCA9IDEnKTsNCgkJCQkJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7DQoJCQkJCQkJJHBhdGgg PSBJTVBBVEguJHJvd1snaWQnXS4ndCcuJHJvd1snZXh0J107DQoJCQkJCQkJaWYgKGZpbGVf ZXhpc3RzKCRwYXRoKSkgew0KCQkJCQkJCQl1bmxpbmsoJHBhdGgpOw0KCQkJCQkJCX0NCgkJ CQkJCX0NCgkJCQkJCXNhZmVfdXBkYXRlKCd0eHBfaW1hZ2UnLCAndGh1bWJuYWlsID0gMCwg dGh1bWJfdyA9IDAsIHRodW1iX2ggPSAwJywgJ3RodW1ibmFpbCA9IDEnKTsNCgkJCQkJfQ0K DQoJCQkJCS8vIFJlbW92ZSB0aGUgZGVmYXVsdCBmbGFnIGlmIHRoaXMgdXNlZCB0byBiZSB0 aGUgZGVmYXVsdA0KCQkJCQlpZiAoZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2Zp bGUnKSA9PSBkb1NsYXNoKCRuYW1lKSkgew0KCQkJCQkJc2V0X3ByZWYoJ3NtZF90aHVtYl9k ZWZhdWx0X3Byb2ZpbGUnLCAnJywgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOKTsNCgkJCQkJ fQ0KDQoJCQkJCSRtc2cgPSBzbWRfdGh1bWJfZ1R4dCgncHJvZmlsZV9kZWxldGVkJywgYXJy YXkoJ3tuYW1lfScgPT4gZG9TbGFzaCgkbmFtZSkpKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9 DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAnaW1hZ2UnLA0KCQkicGFnZSIgPT4g JHBhZ2UsDQoJCSJzb3J0IiA9PiAkc29ydCwNCgkJImRpciIgPT4gJGRpciwNCgkJImNyaXQi ID0+ICRjcml0LA0KCQkic2VhcmNoX21ldGhvZCIgPT4gJHNlYXJjaF9tZXRob2QsDQoJKTsN Cg0KCSRlZGl0Rm9jdXMgPSAoJHN0ZXAgPT0gJ3NtZF90aHVtYl9wcm9maWxlX2VkaXQnKSA/ ICdqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZV9lZGl0ZWQgaW5wdXRbbmFtZT1cJ3NtZF90 aHVtYl9uZXduYW1lXCddIikuZm9jdXMoKTsnIDogJyc7DQoNCgllY2hvIDw8PEVPQw0KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gc21kX3RodW1iX3RvZ2ds ZW5ldygpIHsNCglib3ggPSBqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZV9jcmVhdGUiKTsN CglpZiAoYm94LmNzcygiZGlzcGxheSIpID09ICJub25lIikgew0KCQlib3guc2hvdygpOw0K CX0gZWxzZSB7DQoJCWJveC5oaWRlKCk7DQoJfQ0KCWpRdWVyeSgiaW5wdXQuc21kX2ZvY3Vz IikuZm9jdXMoKTsNCglyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBzbWRfdGh1bWJfc3dp dGNoX2FjdGl2ZShuYW1lKSB7DQoJc2VuZEFzeW5jRXZlbnQoDQoJew0KCQlldmVudDogdGV4 dHBhdHRlcm4uZXZlbnQsDQoJCXN0ZXA6ICdzbWRfdGh1bWJfc3dpdGNoX2FjdGl2ZScsDQoJ CXNtZF90aHVtYl9wcm9maWxlOiBuYW1lDQoJfSwgc21kX3RodW1iX3N3aXRjaF9hY3RpdmVf ZG9uZSk7DQp9DQpmdW5jdGlvbiBzbWRfdGh1bWJfc3dpdGNoX2FjdGl2ZV9kb25lKGRhdGEp IHsNCgl2YXIgc21kX3RodW1iX3Byb2ZpbGUgPSBqUXVlcnkoJyNzbWRfdGh1bWJfcHJvZmls ZV8nK2pRdWVyeShkYXRhKS5maW5kKCdzbWRfdGh1bWJfcHJvZmlsZScpLmF0dHIoJ3ZhbHVl JykpOw0KCXNtZF90aHVtYl9wcm9maWxlLnRvZ2dsZUNsYXNzKCdzbWRfaW5hY3RpdmUnKTsN CglpZiAoc21kX3RodW1iX3Byb2ZpbGUuaGFzQ2xhc3MoJ3NtZF9pbmFjdGl2ZScpKSB7DQoJ CXNtZF90aHVtYl9wcm9maWxlLmZpbmQoJ2lucHV0OmNoZWNrYm94JykucmVtb3ZlQXR0cign Y2hlY2tlZCcpOw0KCX0gZWxzZSB7DQoJCXNtZF90aHVtYl9wcm9maWxlLmZpbmQoJ2lucHV0 OmNoZWNrYm94JykuYXR0cignY2hlY2tlZCcsICdjaGVja2VkJyk7DQogIAkJCX0NCn0NCmZ1 bmN0aW9uIHNtZF90aHVtYl9zd2l0Y2hfcHJlZihvYmosIG5hbWUpIHsNCgl2YXIgc3RhdGUg PSAoalF1ZXJ5KG9iaikuYXR0cignY2hlY2tlZCcpKSA/IDEgOiAwOw0KCXNlbmRBc3luY0V2 ZW50KA0KCXsNCgkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQlzdGVwOiAnc21kX3Ro dW1iX3N3aXRjaF9wcmVmJywNCgkJc21kX3RodW1iX3R4cHR5cGU6IG5hbWUsDQoJCXNtZF90 aHVtYl9zdGF0ZTogc3RhdGUNCgl9KTsNCn0NCg0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpR dWVyeSgnLnNtZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLmNsaWNrKGZ1bmN0aW9uKCkgew0K CQlqUXVlcnkoJy5zbWRfdGh1bWJfcm93IGlucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlv bigpIHsNCgkJCXNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKGpRdWVyeSh0aGlzKS5wYXJlbnQo KS5hdHRyKCdjbGFzcycpKTsNCgkJfSk7DQoJfSk7DQoJeyRlZGl0Rm9jdXN9DQp9KTsNCjwv c2NyaXB0Pg0KRU9DOw0KDQoJLy8gSW5qZWN0IHN0eWxlcw0KCWVjaG8gJzxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+JyAuICRzbWRfdGh1bWJfc3R5bGVzWydwcm9maWxlJ10gLiAnPC9zdHls ZT4nOw0KDQoJJG5ld2J0biA9ICc8YSBzdHlsZT0ibWFyZ2luLWxlZnQ6LTVweDsiIGNsYXNz PSJuYXZsaW5rIiBocmVmPSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX3RodW1iX3RvZ2dsZW5l dygpOyI+Jy5zbWRfdGh1bWJfZ1R4dCgnbmV3JykuJzwvYT4mbmJzcDsnOw0KCSRhbGxidG4g PSAnPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Iicuam9pbl9xcygkcXMpLicmIzM4O3N0ZXA9 c21kX3RodW1iX2NyZWF0ZV9hbGwiIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy5zbWRf dGh1bWJfZ1R4dCgnY3JlYXRlX2FsbF9jb25maXJtJykuJ1wnKTsiPicuc21kX3RodW1iX2dU eHQoJ2FsbF90aHVtYnMnKS4nPC9hPic7DQoNCgkkaGVhZGluZ3MgPSBuLnRyKA0KCQluLmNv bHVtbl9oZWFkKCduYW1lJywgJ25hbWUnLCAnaW1hZ2UnLCBmYWxzZSwgJ2FzYycpLg0KCQlj b2x1bW5faGVhZCgndGh1bWJfd2lkdGgnLCAnd2lkdGgnLCAnaW1hZ2UnLCBmYWxzZSkuDQoJ CWNvbHVtbl9oZWFkKCd0aHVtYl9oZWlnaHQnLCAnaGVpZ2h0JywgJ2ltYWdlJywgZmFsc2Up Lg0KCQljb2x1bW5faGVhZChzbWRfdGh1bWJfZ1R4dCgncXVhbGl0eScpLCAncXVhbGl0eScs ICdpbWFnZScsIGZhbHNlKS4NCgkJY29sdW1uX2hlYWQoJ2tlZXBfc3F1YXJlX3BpeGVscycs ICdjcm9wJywgJ2ltYWdlJywgZmFsc2UpLg0KCQljb2x1bW5faGVhZChzbWRfdGh1bWJfZ1R4 dCgnc2hhcnBlbicpLCAnc2hhcnBlbicsICdpbWFnZScsIGZhbHNlKS4NCgkJY29sdW1uX2hl YWQoJ2FjdGl2ZScsICdhY3RpdmUnLCAnaW1hZ2UnLCBmYWxzZSwgJycsICcnLCAnJywgJ3Nt ZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLg0KCQljb2x1bW5faGVhZCgnZGVmYXVsdCcsICdk ZWZhdWx0JywgJ2ltYWdlJywgZmFsc2UpLg0KCQljb2x1bW5faGVhZChzbWRfdGh1bWJfZ1R4 dCgnYWN0aW9ucycpLCAnYWN0aW9ucycsICdpbWFnZScsIGZhbHNlKQ0KCSk7DQoNCgkkb3V0 W10gPSAnPGZpZWxkc2V0IGlkPSJzbWRfdGh1bWJfcHJvZmlsZXMiPjxsZWdlbmQgY2xhc3M9 InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFpbF9wcm9maWxlc192 aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48YSBocmVmPSIjc21kX3RodW1ibmFp bF9wcm9maWxlcyI+Jy5zbWRfdGh1bWJfZ1R4dCgncHJvZmlsZV9oZWFkaW5nJykuJzwvYT48 L2xlZ2VuZD48ZGl2IGlkPSJzbWRfdGh1bWJfYmF0Y2giPjxzcGFuIGlkPSJzbWRfdGh1bWJf YmN1cnIiPjwvc3Bhbj48c3BhbiBpZD0ic21kX3RodW1iX2J0b3QiPjwvc3Bhbj48L2Rpdj48 ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0i ZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2li bGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJJG91dFtdID0gJG1zZyA/ICc8ZGl2 IGNsYXNzPSJzbWRfdGh1bWJfZXJyb3IiPicuJG1zZy4nPC9kaXY+JyA6ICcnOw0KDQoJLy8g TWFpbiBsaXN0IG9mIHByb2ZpbGVzDQoJJG91dFtdID0gJzxmb3JtIG1ldGhvZD0icG9zdCIg bmFtZT0ic21kX3RodW1iX3Byb2ZpbGVfZm9ybSIgaWQ9InNtZF90aHVtYl9wcm9maWxlX2Zv cm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsNCgkkb3V0W10gPSBzdGFydFRhYmxl KCdsaXN0Jyk7DQoJJG91dFtdID0gdHIodGRhKCRuZXdidG4uJGFsbGJ0biwgJyBjb2xzcGFu PSI4IicpKTsNCgkkb3V0W10gPSAkaGVhZGluZ3M7DQoNCglpZiAoc21kX3RodW1iX3RhYmxl X2V4aXN0KCkpIHsNCgkJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCAnMT0xIE9S REVSIEJZIG5hbWUnKTsNCgkJJHByb19kZmx0ID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZh dWx0X3Byb2ZpbGUnLCAnJywgMSk7DQoNCgkJLy8gTmV3IFByb2ZpbGUgcm93DQoJCSRvdXRb XT0gJzx0ciBpZD0ic21kX3RodW1iX3Byb2ZpbGVfY3JlYXRlIiBjbGFzcz0ic21kX2hpZGRl biI+JzsNCgkJJG91dFtdID0gdGQoc0lucHV0KCdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJyku ZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9uZXduYW1lJywgKCgkc3RlcD09J3NtZF90aHVt Yl9wcm9maWxlX3NhdmUnKSA/ICRzbWRfdGh1bWJfbmFtZSA6ICcnKSwgJ3NtZF9mb2N1cycp KQ0KCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfdGh1bWJfd2lkdGgnLCAoKCRzdGVwPT0n c21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHdpZHRoIDogJycpLCAnJywgJycsICcnLCAn NCcpKQ0KCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfdGh1bWJfaGVpZ2h0JywgKCgkc3Rl cD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRoZWlnaHQgOiAnJyksICcnLCAnJywg JycsICc0JykpDQoJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9xdWFsaXR5Jywg KCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRxdWFsaXR5IDogJycpLCAn JywgJycsICcnLCAnNCcpKQ0KCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfY3JvcCcsICcx JywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRzbWRfdGh1bWJfY3Jv cCA6IDApKSkNCgkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX3NoYXJwZW4nLCAnMScsICgo JHN0ZXA9PSdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgPyAkc21kX3RodW1iX3NoYXJwZW4g OiAwKSkpDQoJCQkudGQoY2hlY2tib3goJ3NtZF90aHVtYl9hY3RpdmVfbmV3JywgJzEnLCAx KSkNCgkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX2RlZmF1bHQnLCAnMScsIDApKQ0KCQkJ LnRkKGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9hZGQnLCBnVHh0KCdhZGQnKSwgJ3Nt YWxsZXJib3gnKSk7DQoJCSRvdXRbXT0gJzwvdHI+JzsNCg0KCQkvLyBSZW1haW5pbmcgcm93 cw0KCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJJGxpbmtfZWR0ID0gam9pbl9xcygk cXMpLicmIzM4O3N0ZXA9c21kX3RodW1iX3Byb2ZpbGVfZWRpdCYjMzg7c21kX3RodW1iX25h bWU9Jy4kcm93WyduYW1lJ107DQoJCQkkbGlua19kZWwgPSBqb2luX3FzKCRxcykuJyYjMzg7 c3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9kZWxldGUmIzM4O3NtZF90aHVtYl9uYW1lPScuJHJv d1snbmFtZSddOw0KCQkJJGJ0bkVkdCA9ICc8YSBocmVmPSInLiRsaW5rX2VkdC4nIj5bJyAu IGdUeHQoJ2VkaXQnKSAuICddPC9hPic7DQoJCQkkYnRuRGVsID0gJzxhIGhyZWY9IicuJGxp bmtfZGVsLiciIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy5zbWRfdGh1bWJfZ1R4dCgn ZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgie25hbWV9IiA9PiAkcm93WyduYW1lJ10pKS4nXCcp OyI+WycgLiBnVHh0KCdkZWxldGUnKSAuICddPC9hPic7DQoJCQkkYWN0aXZlID0gKCRyb3db J2ZsYWdzJ10gJiBTTURfVEhVTUJfQUNUSVZFKSA/IDEgOiAwOw0KCQkJJGNyb3AgPSAoJHJv d1snZmxhZ3MnXSAmIFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOw0KCQkJJHNoYXJwZW4gPSAo JHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9TSEFSUCkgPyAxIDogMDsNCg0KCQkJaWYgKCRz dGVwID09ICdzbWRfdGh1bWJfcHJvZmlsZV9lZGl0JyAmJiAkcm93WyduYW1lJ10gPT0gJHNt ZF90aHVtYl9uYW1lKSB7DQoJCQkJJGJ0blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRf dGh1bWJfc2F2ZScsIGdUeHQoJ1NhdmUnKSwgJ3NtYWxsZXJib3gnKTsNCgkJCQkkYnRuQ2Fu Y2VsID0gZklucHV0KCdzdWJtaXQnLCAnc21kX3RodW1iX2NhbmNlbCcsIGdUeHQoJ0NhbmNl bCcpLCAnc21hbGxlcmJveCcpOw0KCQkJCSRvdXRbXSA9IHRyKA0KCQkJCQl0ZChoSW5wdXQo J3NtZF90aHVtYl9uYW1lJywgJHJvd1snbmFtZSddKS5mSW5wdXQoJ3RleHQnLCAnc21kX3Ro dW1iX25ld25hbWUnLCAkcm93WyduYW1lJ10pKQ0KCQkJCQkudGQoZklucHV0KCd0ZXh0Jywg J3NtZF90aHVtYl93aWR0aCcsICRyb3dbJ3dpZHRoJ10sICcnLCAnJywgJycsICc0JykpDQoJ CQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX2hlaWdodCcsICRyb3dbJ2hlaWdo dCddLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90 aHVtYl9xdWFsaXR5JywgJHJvd1sncXVhbGl0eSddLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJ CQkudGQoY2hlY2tib3goJ3NtZF90aHVtYl9jcm9wJywgJzEnLCAkY3JvcCkpDQoJCQkJCS50 ZChjaGVja2JveCgnc21kX3RodW1iX3NoYXJwZW4nLCAnMScsICRzaGFycGVuKSkNCgkJCQkJ LnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfYWN0aXZlJywgJzEnLCAkYWN0aXZlKSwgJycsICRy b3dbJ25hbWUnXSkNCgkJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfZGVmYXVsdCcsICcx JywgKCgkcm93WyduYW1lJ10gPT0gJHByb19kZmx0KSA/IDEgOiAwKSkpDQoJCQkJCS50ZCgk YnRuU2F2ZS4kYnRuQ2FuY2VsKQ0KCQkJCSwgJyBpZD0ic21kX3RodW1iX3Byb2ZpbGVfZWRp dGVkIicpOw0KCQkJfSBlbHNlIHsNCgkJCQkkb3V0W10gPSB0cigNCgkJCQkJdGQoaHJlZigk cm93WyduYW1lJ10sICRsaW5rX2VkdCkpLg0KCQkJCQl0ZCgkcm93Wyd3aWR0aCddKS4NCgkJ CQkJdGQoJHJvd1snaGVpZ2h0J10pLg0KCQkJCQl0ZCgkcm93WydxdWFsaXR5J10pLg0KCQkJ CQl0ZCgoJGNyb3ApID8gZ1R4dCgneWVzJykgOiBnVHh0KCdubycpKS4NCgkJCQkJdGQoKCRz aGFycGVuKSA/IGdUeHQoJ3llcycpIDogZ1R4dCgnbm8nKSkuDQoJCQkJCXRkKCc8aW5wdXQg dHlwZT0iY2hlY2tib3giIG5hbWU9InNtZF90aHVtYl9hY3RpdmVfJy4kcm93WyduYW1lJ10u JyIgdmFsdWU9IjEiJy4oKCRhY3RpdmUpID8gJyIgY2hlY2tlZD0iY2hlY2tlZCInIDogJycp LiAnIGNsYXNzPSJjaGVja2JveCIgb25jaGFuZ2U9InNtZF90aHVtYl9zd2l0Y2hfYWN0aXZl KFwnJy4kcm93WyduYW1lJ10uJ1wnKTsiIC8+JywgJycsICRyb3dbJ25hbWUnXSkuDQoJCQkJ CXRkKCgkcm93WyduYW1lJ10gPT0gJHByb19kZmx0KSA/IGdUeHQoJ3llcycpIDogZ1R4dCgn bm8nKSkuDQoJCQkJCXRkKCRidG5EZWwpDQoJCQkJLCAnIGlkPSJzbWRfdGh1bWJfcHJvZmls ZV8nLiRyb3dbJ25hbWUnXS4nIiBjbGFzcz0ic21kX3RodW1iX3JvdycgLiAoKCRhY3RpdmUp ID8gJycgOiAnIHNtZF9pbmFjdGl2ZScpLiciJyk7DQoJCQl9DQoJCX0NCgl9DQoNCglpZiAo JHByb19kZmx0KSB7DQoJCSR0eHBfYyA9IGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2NyZWF0 ZScpOw0KCQkkdHhwX2QgPSBnZXRfcHJlZignc21kX3RodW1iX3R4cF9kZWxldGUnKTsNCgkJ JG91dFtdID0gdHIoDQoJCQl0ZCgnJm5ic3A7JykuDQoJCQl0ZGNzKA0KCQkJCXNtZF90aHVt Yl9nVHh0KCd0eHBfZGVmYXVsdF9zeW5jJykgLg0KCQkJCSc8aW5wdXQgdHlwZT0iY2hlY2ti b3giIG5hbWU9InNtZF90aHVtYl90eHBfY3JlYXRlIiB2YWx1ZT0iMSInLigoJHR4cF9jKSA/ ICciIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4gJyBjbGFzcz0iY2hlY2tib3giIG9uY2hh bmdlPSJzbWRfdGh1bWJfc3dpdGNoX3ByZWYodGhpcywgXCd0eHBfY3JlYXRlXCcpOyIgLz4n Lg0KCQkJCXNtZF90aHVtYl9nVHh0KCdjcmVhdGUnKS4NCgkJCQknPGlucHV0IHR5cGU9ImNo ZWNrYm94IiBuYW1lPSJzbWRfdGh1bWJfdHhwX2RlbGV0ZSIgdmFsdWU9IjEiJy4oKCR0eHBf ZCkgPyAnIiBjaGVja2VkPSJjaGVja2VkIicgOiAnJykuICcgY2xhc3M9ImNoZWNrYm94IiBv bmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9wcmVmKHRoaXMsIFwndHhwX2RlbGV0ZVwnKTsi IC8+Jy4NCgkJCQlzbWRfdGh1bWJfZ1R4dCgnZGVsZXRlJykNCgkJCSwgOCkpOw0KCX0NCg0K CSRvdXRbXSA9IGVuZFRhYmxlKCcnKTsNCgkkb3V0W10gPSAnPC9kaXY+PC9mb3JtPjwvZmll bGRzZXQ+JzsNCg0KCXJldHVybiBqb2luKCcnLCAkb3V0KTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBEZWxldGUgYSB0aHVtYm5haWwgZGlyZWN0b3J5IGFuZCBp dHMgY29udGVudHMNCmZ1bmN0aW9uIHNtZF90aHVtYl9ybWRpcigkZGlyKSB7DQoJaWYgKGlz X2RpcigkZGlyKSkgew0KCQkkb2JqZWN0cyA9IHNjYW5kaXIoJGRpcik7DQoJCWZvcmVhY2gg KCRvYmplY3RzIGFzICRvYmplY3QpIHsNCgkJCWlmICgkb2JqZWN0ICE9ICIuIiAmJiAkb2Jq ZWN0ICE9ICIuLiIpIHsNCgkJCQlpZiAoZmlsZXR5cGUoJGRpci5EUy4kb2JqZWN0KSA9PSAi ZGlyIikgc21kX3RodW1iX3JtZGlyKCRkaXIuRFMuJG9iamVjdCk7IGVsc2UgdW5saW5rKCRk aXIuRFMuJG9iamVjdCk7DQoJCQl9DQoJCX0NCgkJcmVzZXQoJG9iamVjdHMpOw0KCQlybWRp cigkZGlyKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWRk IHRodW1ibmFpbCB0YWJsZSBpZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQNCi8vIEZsYWdzOiBC aXQgMD1BY3RpdmUgLyAxPUNyb3AgLyAyID0gU2hhcnBlbg0KZnVuY3Rpb24gc21kX3RodW1i X3RhYmxlX2luc3RhbGwoKSB7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJ JHJldCA9ICcnOw0KCSRzcWwgPSBhcnJheSgpOw0KCSRzcWxbXSA9ICJDUkVBVEUgVEFCTEUg SUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX1RIVU1CLiJgICgNCgkJYG5hbWVgIHZhcmNoYXIo MzIpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCWB3aWR0aGAgaW50KDQpIE5PVCBOVUxMIGRl ZmF1bHQgJzAnLA0KCQlgaGVpZ2h0YCBpbnQoNCkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJ CWBxdWFsaXR5YCB0aW55aW50KDIpIE5VTEwgZGVmYXVsdCAnNzUnLA0KCQlgZmxhZ3NgIHRp bnlpbnQoMikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsDQoJCVBSSU1BUlkgS0VZIChgbmFtZWAp DQoJKSBFTkdJTkU9TXlJU0FNIjsNCg0KCWlmKGdwcygnZGVidWcnKSkgew0KCQlkbXAoJHNx bCk7DQoJfQ0KCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkkcmV0ID0gc2FmZV9xdWVy eSgkcXJ5KTsNCgkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJJEdMT0JBTFNbJ3R4cF9lcnJf Y291bnQnXSsrOw0KCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIu PC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCWVjaG8gIjwhLS1cbiAkcXJ5 IFxuLS0+XG4iOw0KCQl9DQoJfQ0KDQoJLy8gQmFja3VwIHRoZSBjdXJyZW50IHRodW1iIHBy ZWZzDQoJJGV4aXN0cyA9IHNhZmVfcm93KCcqJywgJ3R4cF9wcmVmcycsICJuYW1lPSdzbWRf dGh1bWJfYmFja3VwX3cnIik7DQoJaWYgKCEkZXhpc3RzKSB7DQoJCXNldF9wcmVmKCdzbWRf dGh1bWJfYmFja3VwX3cnLCBnZXRfcHJlZigndGh1bWJfdycpLCAnc21kX3RodW1iJywgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0JywgMCk7DQoJCXNldF9wcmVmKCdzbWRfdGh1bWJfYmFj a3VwX2gnLCBnZXRfcHJlZigndGh1bWJfaCcpLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4s ICd0ZXh0X2lucHV0JywgMSk7DQoJCXNldF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX2MnLCBn ZXRfcHJlZigndGh1bWJfY3JvcCcpLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4sICd0ZXh0 X2lucHV0JywgMik7DQoNCgkJLy8gRXJhc2UgdGhlIGN1cnJlbnQgdGh1bWIgcHJlZnMNCgkJ c2V0X3ByZWYoJ3RodW1iX3cnLCAnJywgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0KCQlzZXRf cHJlZigndGh1bWJfaCcsICcnLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7DQoJCXNldF9wcmVm KCd0aHVtYl9jcm9wJywgJycsICdpbWFnZScsIFBSRUZfSElEREVOKTsNCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJvcCB0YWJsZSBpZiBpbiBkYXRhYmFz ZQ0KZnVuY3Rpb24gc21kX3RodW1iX3RhYmxlX3JlbW92ZSgpIHsNCgkkcmV0ID0gJyc7DQoJ JHNxbCA9IGFycmF5KCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJaWYg KHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCSRzcWxbXSA9ICJEUk9QIFRBQkxFIElG IEVYSVNUUyAiIC5QRlguU01EX1RIVU1CLiAiOyAiOw0KCQlpZihncHMoJ2RlYnVnJykpIHsN CgkJCWRtcCgkc3FsKTsNCgkJfQ0KCQlmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJCSRy ZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJCSRH TE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0 eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJ CWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gUmVz dG9yZSB0aGUgb3JpZ2luYWwgdGh1bWIgcHJlZnMNCgkkZXhpc3RzID0gc2FmZV9yb3coJyon LCAndHhwX3ByZWZzJywgIm5hbWU9J3NtZF90aHVtYl9iYWNrdXBfdyciKTsNCglpZiAoJGV4 aXN0cykgew0KCQlzZXRfcHJlZigndGh1bWJfdycsIGdldF9wcmVmKCdzbWRfdGh1bWJfYmFj a3VwX3cnKSwgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0KCQlzZXRfcHJlZigndGh1bWJfaCcs IGdldF9wcmVmKCdzbWRfdGh1bWJfYmFja3VwX2gnKSwgJ2ltYWdlJywgUFJFRl9ISURERU4p Ow0KCQlzZXRfcHJlZigndGh1bWJfY3JvcCcsIGdldF9wcmVmKCdzbWRfdGh1bWJfYmFja3Vw X2MnKSwgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0KDQoJfQ0KCS8vIEVyYXNlIHRoZSBiYWNr dXAgdGh1bWIgcHJlZnMNCglzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywgIm5hbWUgSU4oJ3Nt ZF90aHVtYl9iYWNrdXBfdycsICdzbWRfdGh1bWJfYmFja3VwX2gnLCAnc21kX3RodW1iX2Jh Y2t1cF9jJywgJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAncGFuZV9zbWRfdGh1bWJu YWlsX3Byb2ZpbGVzX3Zpc2libGUnLCAncGFuZV9zbWRfdGh1bWJuYWlsc192aXNpYmxlJyki KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1 bWJfdGFibGVfZXhpc3QoJGFsbD0nJykgew0KCWlmICgkYWxsKSB7DQoJCSR0YmxzID0gYXJy YXkoU01EX1RIVU1CID0+IDUpOw0KCQkkb3V0ID0gY291bnQoJHRibHMpOw0KCQlmb3JlYWNo ICgkdGJscyBhcyAkdGJsID0+ICRjb2xzKSB7DQoJCQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJ CQkJZWNobyAiKysgVEFCTEUgIi4kdGJsLiIgSEFTICIuY291bnQoQHNhZmVfc2hvdygnY29s dW1ucycsICR0YmwpKS4iIENPTFVNTlM7IFJFUVVJUkVTICIuJGNvbHMuIiArKyIuYnI7DQoJ CQl9DQoJCQlpZiAoY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsICR0YmwpKSA9PSAkY29s cykgew0KCQkJCSRvdXQtLTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gKCRvdXQ9PT0wKSA/IDEg OiAwOw0KCX0gZWxzZSB7DQoJCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJCWVjaG8gIisrIFRB QkxFICIuU01EX1RIVU1CLiIgSEFTICIuY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsIFNN RF9USFVNQikpLiIgQ09MVU1OUzsiOw0KCQl9DQoJCXJldHVybihAc2FmZV9zaG93KCdjb2x1 bW5zJywgU01EX1RIVU1CKSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf dGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpIHsNCgkkcGFuZXMgPSBhcnJheSgnc21kX3Ro dW1ibmFpbF9wcm9maWxlcycsICdzbWRfdGh1bWJuYWlscycpOw0KCSRwYW5lID0gZ3BzKCdw YW5lJyk7DQoJaWYgKGluX2FycmF5KCRwYW5lLCAkcGFuZXMpKQ0KCXsNCgkJc2V0X3ByZWYo InBhbmVfeyRwYW5lfV92aXNpYmxlIiwgKGdwcygndmlzaWJsZScpID09ICd0cnVlJyA/ICcx JyA6ICcwJyksICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3llc25vcmFkaW8nLCAwLCBQ UkVGX1BSSVZBVEUpOw0KCQlzZW5kX3htbF9yZXNwb25zZSgpOw0KCX0gZWxzZSB7DQoJCXNl bmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdodHRwLXN0YXR1cycgPT4gJzQwMCBCYWQgUmVxdWVz dCcpKTsNCgl9DQp9DQoNCi8vKioqKioqKioqKioqKioqKioNCi8vIFBVQkxJQyBTSURFIFRB R1MNCi8vKioqKioqKioqKioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3RodW1ibmFpbCgkYXR0cykgew0KCWdsb2JhbCAkdGhpc2ltYWdlOw0K DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnICAgICAgID0+IEBnZXRfcHJlZign c21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScpLA0KCQknaWQnICAgICAgICAgPT4gJycsDQoJ CSduYW1lJyAgICAgICA9PiAnJywNCgkJJ2VzY2FwZScgICAgID0+ICdodG1sJywNCgkJJ3dy YXB0YWcnICAgID0+ICcnLA0KCQknY2xhc3MnICAgICAgPT4gJycsDQoJCSdodG1sX2lkJyAg ICA9PiAnJywNCgkJJ3N0eWxlJyAgICAgID0+ICcnLA0KCQknbGluaycgICAgICAgPT4gJycs DQoJCSdsaW5rX3JlbCcgICA9PiAnJywNCgkJJ3BvcGxpbmsnICAgID0+IDAsDQoJCSdhZGRf c3RhbXAnICA9PiAwLA0KCQknZm9yY2Vfc2l6ZScgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJ aWYgKCRuYW1lKSB7DQoJCSRuYW1lID0gZG9TbGFzaCgkbmFtZSk7DQoJCSRycyA9IHNhZmVf cm93KCcqJywgJ3R4cF9pbWFnZScsICJuYW1lID0gJyRuYW1lJyBsaW1pdCAxIik7DQoJfSBl bHNlaWYgKCRpZCkgew0KCQkkaWQgPSAoaW50KSAkaWQ7DQoJCSRycyA9IHNhZmVfcm93KCcq JywgJ3R4cF9pbWFnZScsICJpZCA9ICRpZCBsaW1pdCAxIik7DQoJfSBlbHNlaWYgKCR0aGlz aW1hZ2UpIHsNCgkJJGlkID0gKGludCkgJHRoaXNpbWFnZVsnaWQnXTsNCgkJJHJzID0gJHRo aXNpbWFnZTsNCgl9IGVsc2Ugew0KCQl0cmlnZ2VyX2Vycm9yKGdUeHQoJ3Vua25vd25faW1h Z2UnKSk7DQoJCXJldHVybjsNCgl9DQoNCglpZiAoJHJzKSB7DQoJCWV4dHJhY3QoJHJzKTsN CgkJJHRodW1iaW5mbyA9IHNhZmVfcm93KCcqJywgU01EX1RIVU1CLCAibmFtZT0nIi5kb1Ns YXNoKCR0eXBlKS4iJyIpOw0KCQlpZiAoJHRodW1iaW5mbykgew0KCQkJJHBhdGggPSBJTVBB VEguc2FuaXRpemVGb3JVcmwoJHRodW1iaW5mb1snbmFtZSddKS5EUy4kaWQuJGV4dDsNCgkJ CWlmIChmaWxlX2V4aXN0cygkcGF0aCkpIHsNCgkJCQlpZiAoJGVzY2FwZSA9PSAnaHRtbCcp IHsNCgkJCQkJJGFsdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFsdCk7DQoJCQkJCSRjYXB0aW9u ID0gaHRtbHNwZWNpYWxjaGFycygkY2FwdGlvbik7DQoJCQkJfQ0KDQoJCQkJJG1ldGFbJ2Fs dCddID0gJGFsdDsNCgkJCQkkZm9yY2Vfc2l6ZSA9IGRvX2xpc3QoJGZvcmNlX3NpemUpOw0K CQkJCWlmIChpbl9hcnJheSgnd2lkdGgnLCAkZm9yY2Vfc2l6ZSkpIHsNCgkJCQkJJG1ldGFb J2ZvcmNldyddID0gMTsNCgkJCQl9DQoJCQkJaWYgKGluX2FycmF5KCdoZWlnaHQnLCAkZm9y Y2Vfc2l6ZSkpIHsNCgkJCQkJJG1ldGFbJ2ZvcmNlaCddID0gMTsNCgkJCQl9DQoJCQkJaWYg KCRhZGRfc3RhbXAgPT0gMCkgeyAkbWV0YVsnc3RhbXAnXSA9IDE7IH0gLy8gTmVnYXRpdmUg bG9naWMgc2luY2Ugd2Ugd2FudCB0aGUgc3RhbXAgb24gYnkgZGVmYXVsdCBmb3IgdGhlIGFk bWluIHNpZGUNCgkJCQlpZiAoJGNhcHRpb24pIHsgJG1ldGFbJ3RpdGxlJ10gPSAkY2FwdGlv bjsgfQ0KCQkJCWlmICgkaHRtbF9pZCAmJiAhJHdyYXB0YWcpIHsgJG1ldGFbJ2lkJ10gPSAk aHRtbF9pZDsgfQ0KCQkJCWlmICgkY2xhc3MgJiYgISR3cmFwdGFnKSB7ICRtZXRhWydjbGFz cyddID0gJGNsYXNzOyB9IGVsc2UgeyAkY2xhc3M9JHR5cGU7IH0NCgkJCQlpZiAoJHN0eWxl KSB7ICRtZXRhWydzdHlsZSddID0gJHN0eWxlOyB9DQoNCgkJCQkkb3V0ID0gc21kX3RodW1i X2ltZygkdGh1bWJpbmZvLCAkcnMsICRtZXRhKTsNCg0KCQkJCWlmICgkbGluaykgew0KCQkJ CQkkb3V0ID0gaHJlZigkb3V0LCBpbWFnZXNyY3VybCgkaWQsICRleHQpLCAoIWVtcHR5KCRs aW5rX3JlbCkgPyAnIHJlbD0iJy4kbGlua19yZWwuJyInIDogJycpLicgdGl0bGU9IicuJGNh cHRpb24uJyInKTsNCgkJCQl9IGVsc2VpZiAoJHBvcGxpbmspIHsNCgkJCQkJJG91dCA9ICc8 YSBocmVmPSInLmltYWdlc3JjdXJsKCRpZCwgJGV4dCkuJyInLg0KCQkJCQkJJyBvbmNsaWNr PSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgJy4NCgkJCQkJCSdc J3dpZHRoPScuJHcuJywgaGVpZ2h0PScuJGguJywgc2Nyb2xsYmFycywgcmVzaXphYmxlXCcp OyByZXR1cm4gZmFsc2U7Ij4nLiRvdXQuJzwvYT4nOw0KCQkJCX0NCg0KCQkJCXJldHVybiAo JHdyYXB0YWcpID8gZG9UYWcoJG91dCwgJHdyYXB0YWcsICRjbGFzcywgJycsICRodG1sX2lk KSA6ICRvdXQ7DQoJCQl9DQoJCX0NCgl9DQoNCgl0cmlnZ2VyX2Vycm9yKGdUeHQoJ3Vua25v d25faW1hZ2UnKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX2lmX3RodW1ibmFpbCgkYXR0cywgJHRoaW5nKSB7DQoJZ2xvYmFsICR0aGlzaW1h Z2U7DQoJYXNzZXJ0X2ltYWdlKCk7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkndHlw ZScgPT4gQGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJyksDQoJKSwkYXR0 cykpOw0KDQoJJHRodW1iaW5mbyA9IHNhZmVfcm93KCcqJywgU01EX1RIVU1CLCAibmFtZT0n Ii5kb1NsYXNoKCR0eXBlKS4iJyIpOw0KCSRyZXQgPSBmYWxzZTsNCglpZiAoJHRodW1iaW5m bykgew0KCQkkcGF0aCA9IElNUEFUSC5zYW5pdGl6ZUZvclVybCgkdGh1bWJpbmZvWyduYW1l J10pLkRTLiR0aGlzaW1hZ2VbJ2lkJ10uJHRoaXNpbWFnZVsnZXh0J107DQoJCSRyZXQgPSBm aWxlX2V4aXN0cygkcGF0aCk7DQoJfQ0KCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcs ICRyZXQpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQbHVnaW4t c3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkDQov LyBUT0RPOiBtYWtlIHRoZXNlIGludG8gYSB0ZXh0cGFjayB3aGVuIHBsdWdpbiBjb21wb3Nl ciBzdXBwb3J0cyB0aGVtDQpmdW5jdGlvbiBzbWRfdGh1bWJfZ1R4dCgkd2hhdCwgJGF0dHMg PSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FjdGlvbnMnID0+ICdBY3Rpb25z JywNCgkJJ2FsbF9zaXplcycgPT4gJ0FsbCBzaXplcycsDQoJCSdhbGxfdGh1bWJzJyA9PiAn Q3JlYXRlIGFsbCcsDQoJCSdjcmVhdGUnID0+ICdDcmVhdGlvbicsDQoJCSdjcmVhdGVfYWxs X2NvbmZpcm0nID0+ICdSZWFsbHkgY3JlYXRlIHRodW1ibmFpbHMgZm9yIEFMTCBhY3RpdmUg cHJvZmlsZXM/IEFueSBleGlzdGluZyB0aHVtYnMgd2lsbCBiZSBvdmVyd3JpdHRlbi4nLA0K CQknZGVsZXRlJyA9PiAnRGVsZXRpb24nLA0KCQknZGVsZXRlX2NvbmZpcm0nID0+ICdSZWFs bHkgZGVsZXRlIHByb2ZpbGUge25hbWV9PyBJdCB3aWxsIGRlbGV0ZSBBTEwgdGh1bWJuYWls cyBvZiB0aGlzIHR5cGUuJywNCgkJJ25ldycgPT4gJ05ldyBwcm9maWxlJywNCgkJJ3ByZWZz X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcsDQoJCSdwcm9maWxlX2Rl bGV0ZWQnID0+ICdQcm9maWxlICJ7bmFtZX0iIGRlbGV0ZWQnLA0KCQkncHJvZmlsZV9leGlz dHMnID0+ICdQcm9maWxlICJ7bmFtZX0iIGFscmVhZHkgZXhpc3RzJywNCgkJJ3Byb2ZpbGVf aGVhZGluZycgPT4gJ1RodW1ibmFpbCBwcm9maWxlcycsDQoJCSdxdWFsaXR5JyA9PiAnUXVh bGl0eSAoJSknLA0KCQknc2hhcnBlbicgPT4gJ1NoYXJwZW4nLA0KCQkndGFibGVzX25vdF9p bnN0YWxsZWQnID0+ICdUYWJsZXMgbm90IGluc3RhbGxlZDogdHJ5IHJlaW5zdGFsbGluZyB0 aGUgcGx1Z2luJywNCgkJJ3RodW1ibmFpbF9oZWFkaW5nJyA9PiAnVGh1bWJuYWlscycsDQoJ CSd0eHBfZGVmYXVsdF9zeW5jJyA9PiAnS2VlcCBUWFAgdGh1bWJuYWlscyBpbiBzeW5jIHdp dGggZGVmYXVsdCBwcm9maWxlIG9uOiAnLA0KCQkndXBsb2FkJyA9PiAnUmVwbGFjZSBzZWxl Y3RlZCB0aHVtYm5haWwnLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0 dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJm bGFncyI7czoxOiIyIjtzOjQ6ImhlbHAiO3M6MTUzOTg6IjxkaXYgaWQ9InNtZF9oZWxwIj4K Cgk8aDE+c21kX3RodW1ibmFpbDwvaDE+CgoJPGgyPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJ PGxpPkFzc2lnbiBhbnkgbnVtYmVyIG9mIHRodW1ibmFpbHMgdG8gPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBpbWFnZXM8L2xpPgoJCTxsaT5CYXRjaCBhc3NpZ24g dGh1bWJuYWlscyB0byBhbGwgZXhpc3RpbmcgaW1hZ2VzPC9saT4KCQk8bGk+U2V0IG9uZSB0 aHVtYm5haWwgc2l6ZSBhcyBkZWZhdWx0PC9saT4KCQk8bGk+RGlzcGxheSBhbnkgb2YgdGhl IHRodW1ibmFpbCBzaXplcyBvbiB5b3VyIHNpdGU8L2xpPgoJCTxsaT5LZWVwIHRodW1icyBp biBzeW5jIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0aHVt YnMgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5Db25kaXRpb25hbCB0aHVtYm5haWwgY2hlY2sg YXZhaWxhYmxlPC9saT4KCTwvdWw+CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxw PldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0 ZWYgRGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8gdGhlIGJldGEgdGVzdCBjcmV3IHdobyBv ZmZlcmVkIGZlYXR1cmUgYW5kIHdvcmtmbG93IGFkdmljZSwgZXNwZWNpYWxseSB0aGVib21i c2l0ZSwgamFrb2IgYW5kIGpzdHViYnMuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1bmlu c3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgUEhQNSsg YW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMy4wKzwvcD4KCgk8cD5Eb3du bG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVy bi5vcmcvcGx1Z2lucy8xMTg2L3NtZF90aHVtYm5haWwiPnRleHRwYXR0ZXJuLm9yZzwvYT4s IG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBh Z2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0 aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJu LmNvbS92aWV3dG9waWMucGhwP2lkPTM0MzY3Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3Jl IGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUg cGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIGRlbGV0ZSBmcm9tIHRoZSBBZG1pbiAt Jmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMj5Vc2FnZSAmIzgyMTI7IGFkbWluIHNpZGU8 L2gyPgoKCTxwPlZpc2l0IHRoZSBDb250ZW50LSZndDtJbWFnZXMgdGFiLiBBYm92ZSB0aGUg bGlzdCBvZiBpbWFnZXMgaXMgYW4gYXJlYSBsYWJlbGxlZCA8ZW0+VGh1bWJuYWlsIFByb2Zp bGVzPC9lbT4uIENsaWNrIGl0IHRvIHJldmVhbCB0aGUgY29udHJvbCBwYW5lbC4gWW91IGNh biB0b2dnbGUgdGhpcyBwYW5lbCBvbiBhbmQgb2ZmIGJ5IGNsaWNraW5nIHRoZSBoZWFkaW5n LjwvcD4KCgk8cD5Zb3UgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHByb2ZpbGUgdG8gYmVn aW4gd2l0aCwgc28gY2xpY2sgdGhlIDxlbT5OZXcgcHJvZmlsZTwvZW0+IGJ1dHRvbi4gVGhp cyB3aWxsIHJldmVhbCBlZGl0IGJveGVzIHdoZXJlIHlvdSBjYW4gZW50ZXI6PC9wPgoKCTx1 bD4KCQk8bGk+PHN0cm9uZz5OYW1lPC9zdHJvbmc+OiBzb21lIGRlc2NyaXB0aXZlIG5hbWUg Zm9yIHRoaXMgdGh1bWJuYWlsIGRpbWVuc2lvbi4gWW91IGFyZSBsaW1pdGVkIHRvIHVzdWFs IG5vbi13ZWlyZCBjaGFyYWN0ZXJzIGluIHRoZSBuYW1lPC9saT4KCQk8bGk+PHN0cm9uZz5X aWR0aDwvc3Ryb25nPjogdGh1bWJuYWlsIHdpZHRoLCBpbiBwaXhlbHMuIElmIGxlZnQgYmxh bmsgKG9yIHNldCB0byAwKSBhbmQgaGVpZ2h0IGlzIHNwZWNpZmllZCwgdGhlIHdpZHRoIHdp bGwgYmUgY29tcHV0ZWQgaW4gcHJvcG9ydGlvbiB0byB0aGUgaGVpZ2h0PC9saT4KCQk8bGk+ PHN0cm9uZz5IZWlnaHQ8L3N0cm9uZz46IHRodW1ibmFpbCBoZWlnaHQsIGluIHBpeGVscy4g SWYgbGVmdCBibGFuayAob3Igc2V0IHRvIDApIGFuZCB3aWR0aCBpcyBzcGVjaWZpZWQsIHRo ZSBoZWlnaHQgd2lsbCBiZSBjb21wdXRlZCBpbiBwcm9wb3J0aW9uIHRvIHRoZSB3aWR0aDwv bGk+CgkJPGxpPjxzdHJvbmc+UXVhbGl0eSAoJSk8L3N0cm9uZz46IFRoZSBxdWFsaXR5IG9m IHRoZSByZXN1bHRpbmcgdGh1bWJuYWlsLiBHZW5lcmFsbHkgb25seSBvZiB1c2UgZm9yIGpw ZyBvciBwbmcoMjQpIGltYWdlcy4gVGhlIGhpZ2hlciB0aGUgdmFsdWUgdGhlIGJldHRlciB0 aGUgcXVhbGl0eSBhbmQgdGhlIGJpZ2dlciB0aGUgZmlsZSBzaXplLiBEZWZhdWx0OiA3NTwv bGk+CgkJPGxpPjxzdHJvbmc+Q3JvcDwvc3Ryb25nPjogd2hldGhlciB0byBjcm9wIHRoZSBp bWFnZSB3aGVuIHRoZSB0aHVtYm5haWwgaXMgY3JlYXRlZCwgb3Igc2NhbGUgaXQgdG8gZml0 PC9saT4KCQk8bGk+PHN0cm9uZz5TaGFycGVuPC9zdHJvbmc+OiB3aGV0aGVyIHRvIGFwcGx5 IGEgc2hhcnBlbmluZyBmaWx0ZXIgdG8gdGhlIHRodW1ibmFpbCB3aGVuIGl0IGlzIGNyZWF0 ZWQuIFVzZWZ1bCBmb3IgdmVyeSBzbWFsbCBpbWFnZXM8L2xpPgoJCTxsaT48c3Ryb25nPkFj dGl2ZTwvc3Ryb25nPjogRW5hYmxlL2Rpc2FibGUgdGhpcyB0aHVtYm5haWwgc2l6ZSBzbyBp dCB3aWxsL3dvbiYjODIxNzt0IGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdoZW4gdGhl IG5leHQgaW1hZ2UgaXMgdXBsb2FkZWQuIENsaWNrIHRoZSBjaGVja2JveCB0byBpbnN0YW50 bHkgc3dpdGNoIHRoZSBwcm9maWxlIG9uL29mZi4gQ2xpY2sgdGhlICYjODIxNjtBY3RpdmUm IzgyMTc7IHdvcmQgaW4gdGhlIGhlYWRpbmcgcm93IHRvIHRvZ2dsZSB0aGUgc3RhdHVzIG9m IGFsbCBwcm9maWxlcy4gTm90ZSB0aGF0IHRoaXMgc2V0dGluZyBnb3Zlcm5zIGhvdyB0aGUg PGEgaHJlZj0iI2NyZWF0ZSI+QWxsIHNpemVzPC9hPiBkcm9wZG93biBlbnRyeSBpbnRlcmFj dHMgd2l0aCB0aGUgPGVtPkNyZWF0ZTwvZW0+IGFuZCA8ZW0+RGVsZXRlPC9lbT4gYnV0dG9u czwvbGk+CgkJPGxpPjxzdHJvbmc+RGVmYXVsdDwvc3Ryb25nPjogc2V0IHRoaXMgdGh1bWJu YWlsIHByb2ZpbGUgYXMgdGhlIGRlZmF1bHQuIFRoZSBkZWZhdWx0IGltYWdlIHdpbGwgYmUg ZGlzcGxheWVkIGluIHRoZSBJbWFnZXMgbGlzdCBhbmQgd2lsbCBhbHNvIGJlIHVzZWQgYXMg dGhlIGRlZmF1bHQgc2l6ZSB0byBiZSBkaXNwbGF5ZWQgdXNpbmcgPGNvZGU+Jmx0O3R4cDpz bWRfdGh1bWJuYWlsLyZndDs8L2NvZGU+LiBJZiB0aGUgb3B0aW9uIHRvIDxhIGhyZWY9IiN0 eHBfdGh1bWJzIj5zeW5jIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgy MTc7cyB0aHVtYnM8L2E+IGlzIG9uLCBpdCB3aWxsIGFsc28gYmVjb21lIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3Mgc3RhbmRhcmQgKGJ1aWx0LWluKSB0aHVtYm5h aWwgc2l6ZSBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZDwvbGk+Cgk8L3VsPgoKCTxwPk9uY2Ug eW91JiM4MjE3O3ZlIGNvbmZpZ3VyZWQgeW91ciBwcm9maWxlLCBjbGljayBTYXZlIHRvIHN0 b3JlIGl0LiBZb3UgY2FuIGFsd2F5cyBlZGl0IGl0IGFnYWluIGJ5IGNsaWNraW5nIGl0cyBu YW1lLiBHbyBhaGVhZCBhbmQgY3JlYXRlIHNvbWUgbW9yZSBwcm9maWxlcyBmb3IgdGh1bWJu YWlscyBvZiBkaWZmZXJlbnQgc2l6ZXMvcGFyYW1ldGVycy4gSWYgeW91IHdpc2ggdG8gZGVs ZXRlIGEgcHJvZmlsZSwgaGl0IHRoZSA8ZW0+W0RlbGV0ZV08L2VtPiBidXR0b24gYW5kIGNv bmZpcm0uIDxzdHJvbmc+QWxsIHRodW1ibmFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgcHJv ZmlsZSB3aWxsIGJlIGRlbGV0ZWQ8L3N0cm9uZz4uPC9wPgoKCTxwPkF0IHRoaXMgcG9pbnQs IG5vIHRodW1ibmFpbHMgaGF2ZSBiZWVuIGNyZWF0ZWQuIExldCYjODIxNztzIHJlY3RpZnkg dGhhdC48L3A+CgoJPGgzIGlkPSJjcmVhdGUiPkNyZWF0aW5nIHRodW1ibmFpbHM8L2gzPgoK CTxwPlBpY2sgb25lIG9mIHlvdXIgaW1hZ2VzIGFuZCBjbGljayB0byBlZGl0IGl0LjwvcD4K Cgk8cD5CZW5lYXRoIHRoZSBtYWluIHBpY3R1cmUgeW91IHdpbGwgc2VlIGFuIGFyZWEgbGFi ZWxsZWQgPGVtPlRodW1ibmFpbHM8L2VtPi4gWW91IGNhbiB0b2dnbGUgdGhpcyBwYW5lbCBv biBhbmQgb2ZmIGJ5IGNsaWNraW5nIHRoZSBoZWFkaW5nLjwvcD4KCgk8cD5JbnNpZGUgdGhl IHBhbmVsIGlzIGEgc2ltcGxlIHNlbGVjdCBsaXN0IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZv ciBlYWNoIHRodW1ibmFpbCBwcm9maWxlIHlvdSBoYXZlIGNvbmZpZ3VyZWQsIHBsdXMgdGhl IHNwZWNpYWwgZW50cnkgPGVtPkFsbCBzaXplczwvZW0+LiBZb3UgY2FuIHNlbGVjdCBvbmUg b2YgdGhlc2UgZW50cmllcyBhbmQgY2xpY2sgPGVtPkNyZWF0ZTwvZW0+IHRvIGNyZWF0ZSB0 aHVtYm5haWwocykgaW4gdGhlIHNlbGVjdGVkIHNpemUgb3IgaGl0IDxlbT5EZWxldGU8L2Vt PiB0byByZW1vdmUgdGhlIHNlbGVjdGVkIHRodW1ibmFpbChzKS48L3A+CgoJPHA+T25jZSBj cmVhdGVkLCB0aGUgdGh1bWJuYWlscyBhcHBlYXIgaW4gdGhlIHBhbmVsOyByZW1lbWJlciB0 aGV5IGNhbiBiZSB0dWNrZWQgYXdheSBpZiB5b3UgZG9uJiM4MjE3O3Qgd2FudCB0byBsb29r IGF0IHRoZW0uPC9wPgoKCTxwPklmIHlvdSBzZWxlY3QgPGVtPkFsbCBzaXplczwvZW0+IGFu ZCBoaXQgPGVtPkNyZWF0ZTwvZW0+LCB5b3Ugd2lsbCBnZXQgb25lIHRodW1ibmFpbCBmb3Ig ZWFjaCBhY3RpdmUgcHJvZmlsZS4gU2ltaWxhcmx5LCBpZiB5b3UgaGl0IDxlbT5EZWxldGU8 L2VtPiBhbnkgdGh1bWJuYWlscyBzdG9yZWQgYWdhaW5zdCBhbiBhY3RpdmUgcHJvZmlsZSBm b3IgdGhlIGN1cnJlbnQgaW1hZ2Ugd2lsbCBiZSByZW1vdmVkLiBCeSB0b2dnbGluZyBjZXJ0 YWluIHRodW1ibmFpbCBwcm9maWxlcyBvbi9vZmYgeW91IGNhbiBjb250cm9sIHdoaWNoIG9u ZXMgYXJlIGNyZWF0ZWQgb3IgZGVsZXRlZC48L3A+CgoJPHA+V2hlbiB5b3UgdXBsb2FkIGEg bmV3IGltYWdlIG9yIHJlcGxhY2UgYW4gZXhpc3RpbmcgaW1hZ2UsIHRodW1ibmFpbHMgd2ls bCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9yIGFueSBhY3RpdmUgcHJvZmlsZXMuIE5v dGUgdGhhdCBpZiB5b3UgdXNlIHRoZSBtdWx0aS1lZGl0IHRvb2wgdG8gZGVsZXRlIGltYWdl cywgPHN0cm9uZz5hbGw8L3N0cm9uZz4gY29ycmVzcG9uZGluZyB0aHVtYm5haWxzIGZvciB0 aGUgc2VsZWN0ZWQgaW1hZ2VzIChpbmNsdWRpbmcgaW5hY3RpdmUgb25lcykgd2lsbCBiZSBy ZW1vdmVkLjwvcD4KCgk8aDMgaWQ9ImN1c3RvbSI+Q3VzdG9tIHRodW1ibmFpbHM8L2gzPgoK CTxwPklmIHlvdSBwcmVmZXIgdG8gbWFrZSB5b3VyIG93biB0aHVtYnMgaW4gYW4gZXh0ZXJu YWwgcHJvZ3JhbSwgeW91IGNhbiBzdGlsbCBzZXQgdXAgdGhlIHByb2ZpbGVzIGFzIG5vcm1h bCBidXQgaW5zdGVhZCBvZiBjbGlja2luZyA8ZW0+Q3JlYXRlPC9lbT4gaW4gdGhlIEltYWdl IEVkaXQgc2NyZWVuLCB5b3UgY2FuIHNlbGVjdCBhIHByb2ZpbGUgc2l6ZSBmcm9tIHRoZSBk cm9wZG93biBhbmQgdXNlIHRoZSBCcm93c2UmIzgyMzA7IGZhY2lsaXR5IHRvIGNob29zZSBh IHRodW1ibmFpbCBmcm9tIHlvdXIgaGFyZCBkcml2ZS4gV2hlbiB5b3UgY2xpY2sgPGVtPlVw bG9hZDwvZW0+IHRoZSBpbWFnZSB3aWxsIGJlIGluc2VydGVkIGFnYWluc3QgdGhlIHNlbGVj dGVkIHByb2ZpbGUuPC9wPgoKCTxwPkF0IGFueSB0aW1lIHlvdSBjYW4gY2xpY2sgb25lIG9m IHRoZSB0aHVtYm5haWxzIChvciBzZWxlY3QgYSBzaXplIGZyb20gdGhlIGRyb3Bkb3duKSBh bmQgQnJvd3NlJiM4MjMwOyBmb3IgYW5vdGhlciBpbWFnZSB0byByZXBsYWNlIHRoZSBleGlz dGluZyB0aHVtYm5haWwgJiM4MjEyOyBldmVuIG9uZXMgdGhhdCBoYXZlIGJlZW4gYXV0by1j cmVhdGVkLiBTb21lIHRoaW5ncyB0byBub3RlIGFib3V0IHRoaXMgZmVhdHVyZTo8L3A+CgoJ PHVsPgoJCTxsaT50aGUgdGh1bWJuYWlsIG11c3QgYmUgb2YgdGhlIHNhbWUgZmlsZSB0eXBl IGFzIHRoZSBvcmlnaW5hbCBpbWFnZSBvciB0aGUgdXBsb2FkIHdpbGwgYmUgaWdub3JlZDwv bGk+CgkJPGxpPnRodW1icyBjYW5ub3QgaGF2ZSBkaW1lbnNpb25zIGdyZWF0ZXIgdGhhbiB0 aGUgb3JpZ2luYWwgaW1hZ2Ugb3IgdGhlIHVwbG9hZCB3aWxsIGJlIGlnbm9yZWQ8L2xpPgoJ CTxsaT55b3UgY2FuIGNsaWNrIGEgaGlnaGxpZ2h0ZWQgaW1hZ2UgdG8gZGVzZWxlY3QgaXQ8 L2xpPgoJCTxsaT55b3UgY2Fubm90IEJyb3dzZSBmb3IgYW4gaW1hZ2UgdW5sZXNzIHlvdSBo YXZlIGNob3NlbiBvbmUgcHJvZmlsZTwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0iYmF0Y2giPkJh dGNoIHRodW1ibmFpbCBjcmVhdGlvbjwvaDM+CgoJPHA+WW91IGNhbiBhbHNvIGNyZWF0ZSB0 aHVtYm5haWxzIGVuLW1hc3NlLiBGcm9tIHRoZSBtYWluIDxlbT5UaHVtYm5haWwgcHJvZmls ZXM8L2VtPiBwYW5lbCwgaWYgeW91IGhpdCA8ZW0+Q3JlYXRlIGFsbDwvZW0+IHRoZSBwbHVn aW4gd2lsbCBnbyBhd2F5IGFuZCBjcmVhdGUgdGh1bWJuYWlscyBmb3IgZXZlcnkgYWN0aXZl IHByb2ZpbGUgZm9yIGFsbCBjdXJyZW50bHkgaW5zdGFsbGVkIGltYWdlcy4gVGhpcyBpcyBh IHF1aWNrIHdheSB0byBnZW5lcmF0ZSB0aHVtYnMgZm9yIHlvdXIgZXhpc3RpbmcgaW1hZ2Vz LjwvcD4KCgk8cD5CZWNhdXNlIG9mIHRoZSBuYXR1cmUgb2YgdGhpcyB0b29sICYjODIxMjsg ZXNwZWNpYWxseSB3aXRoIGxhcmdlIGltYWdlIHBvb2xzICYjODIxMjsgdGhlIHByb2Nlc3Mg aXMgZG9uZSBhcyBhIGJhY2tncm91bmQgdGFzayB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPkFK QVg8L3NwYW4+LiBBZnRlciBjbGlja2luZyB0aGUgPGVtPkNyZWF0ZSBhbGw8L2VtPiBidXR0 b24gKGFuZCBjb25maXJtaW5nIHlvdSBhcmUgc3VyZSkgYSBjb3VudGVyIHdpbGwgYXBwZWFy IGluIHRoZSB0b3AtcmlnaHQgb2YgdGhlIGNvbnRyb2wgcGFuZWwgc2hvd2luZyBob3cgbWFu eSBpbWFnZXMgaXQgaGFzIHByb2Nlc3NlZCBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBpbWFn ZXMgaW5zdGFsbGVkLiBXaGVuIGl0JiM4MjE3O3MgZG9uZSwgdGhlIG51bWJlcnMgd2lsbCBk aXNhcHBlYXIuIElmIHlvdSB0aGVuIHJlZnJlc2ggeW91ciBJbWFnZXMgdGFiIHlvdSB3aWxs IHNlZSB5b3VyIGNob3NlbiBkZWZhdWx0IHRodW1ibmFpbHMgaW4gdGhlIGxpc3QgKGFzc3Vt aW5nIHlvdSYjODIxNzt2ZSBzZXQgb25lIGFzIGRlZmF1bHQhKTwvcD4KCgk8aDMgaWQ9InR4 cF90aHVtYnMiPktlZXAgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGh1bWJuYWls cyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxlPC9oMz4KCgk8cD5JZiB5b3UgaGF2ZSBz ZXQgYSBwcm9maWxlIGFzIGRlZmF1bHQsIHR3byBvdGhlciBjaGVja2JveGVzIGJlY29tZSBh dmFpbGFibGUgYmVuZWF0aCB0aGUgbGlzdCBvZiBwcm9maWxlcy4gT3JkaW5hcmlseSwgc21k X3RodW1ibmFpbCB3b3JrcyBpbmRlcGVuZGVudGx5IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+JiM4MjE3O3MgdGh1bWJzLiBJZiB5b3UgZGlzYWJsZSB0aGUgcGx1Z2luIHlv dSYjODIxNztsbCBzZWUgdGhhdCBldmVyeXRoaW5nIGdvZXMgYmFjayB0byBob3cgaXQgd2Fz IGJlZm9yZSB5b3UgaW5zdGFsbGVkIGl0LiBUaGlzIGlzIGdyZWF0IGJlY2F1c2UgeW91ciBo YXJkLWdyYWZ0IGlzbiYjODIxNzt0IGxvc3QgaWYgeW91IGhhdmUgdXBsb2FkZWQgeW91ciBv d24gdGh1bWJzLjwvcD4KCgk8cD5CdXQgaWYgeW91IHN0YXJ0IGNyZWF0aW5nIHRodW1icyB3 aXRoIHRoZSBwbHVnaW4geW91IHdpbGwgbm90aWNlIHRoYXQgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4mIzgyMTc7cyBidWlsdCBpbiB0YWdzIHN1Y2ggYXMgPGNvZGU+Jmx0O3R4 cDphcnRpY2xlX2ltYWdlIHRodW1ibmFpbD0mcXVvdDsxJnF1b3Q7IC8mZ3Q7PC9jb2RlPiBh bmQgPGNvZGU+Jmx0O3R4cDp0aHVtYm5haWwgLyZndDs8L2NvZGU+IHdvbiYjODIxNzt0IHdv cmsgZm9yIG5ld2VyIHRodW1ibmFpbHMuIFRoaXMgbWlnaHQgYmUgY29uZnVzaW5nIHNvLCBp ZiB5b3UgcHJlZmVyLCB5b3UgY2FuIG9wdCB0byBoYXZlIHNtZF90aHVtYm5haWwgdXBkYXRl IHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGh1bWJuYWlscyBhdCB0aGUg c2FtZSB0aW1lLjwvcD4KCgk8cD5CeSB0aWNraW5nIGVpdGhlciBvZiB0aGUgY2hlY2tib3hl cywgdGhlIHBsdWdpbiB3aWxsIHRyYWNrIGFueSBjaGFuZ2VzIDxzdHJvbmc+dG8gdGhlIGRl ZmF1bHQgcHJvZmlsZTwvc3Ryb25nPiBhbmQgbWltaWMgdGhlbSB3aXRoIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgdGh1bWJuYWlscy4gVGhpcyBoYXMgYSBmZXcg ZWZmZWN0cyB3b3J0aCBoaWdobGlnaHRpbmcuPC9wPgoKCTxwPldoZW4gdGhlIDxlbT5DcmVh dGlvbjwvZW0+IGNoZWNrYm94IGlzIHRpY2tlZDo8L3A+CgoJPG9sPgoJCTxsaT5pZiB5b3Ug PGVtPkNyZWF0ZSBhbGw8L2VtPiB0aHVtYnMsIHVwbG9hZCBhIG5ldyBpbWFnZSwgb3IgcmVw bGFjZSBhbiBleGlzdGluZyBpbWFnZSwgYSBuZXcgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gdGh1bWJuYWlsIHdpbGwgYmUgY3JlYXRlZCBhdCB0aGUgZGVmYXVsdCBzaXplLiBB bnkgZXhpc3RpbmcgdGh1bWJzIHdpbGwgYmUgb3ZlcndyaXR0ZW48L2xpPgoJCTxsaT5pZiB5 b3UgY2hhbmdlIGRlZmF1bHQgcHJvZmlsZSwgYW55IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IHRodW1ibmFpbHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCB3aWxsIHJlbWFpbiBh dCB0aGUgcHJldmlvdXMgc2l6ZS4gT25seSB3aGVuIHlvdSBzdGFydCBjcmVhdGluZywgdXBs b2FkaW5nIG9yIHJlcGxhY2luZyBpbWFnZXMgd2lsbCB0aGUgbmV3IHRodW1ibmFpbCBzaXpl cyBiZSBjcmVhdGVkPC9saT4KCTwvb2w+CgoJPHA+V2hlbiB0aGUgPGVtPkRlbGV0aW9uPC9l bT4gY2hlY2tib3ggaXMgdGlja2VkOjwvcD4KCgk8b2w+CgkJPGxpPmlmIHlvdSBkZWxldGUg YSBzaW5nbGUgdGh1bWIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdCBwcm9maWxl LCBib3RoIHRoZSBwcm9maWxlIHRodW1iIGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiYjODIxNztzIHRodW1iIHdpbGwgYmUgZGVsZXRlZDwvbGk+CgkJPGxpPmlmIHlvdSBk ZWxldGUgYW4gZW50aXJlIHByb2ZpbGUsIGFsbCBpdHMgdGh1bWJuYWlscyA8c3Ryb25nPmFu ZCBhbGwgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0aHVtYnM8L3N0 cm9uZz4gd2lsbCBiZSByZW1vdmVkPC9saT4KCTwvb2w+CgoJPHA+RnVydGhlcjo8L3A+CgoJ PG9sPgoJCTxsaT5pZiB5b3UgcmVtb3ZlIHRoZSBkZWZhdWx0IGNoZWNrYm94IGZyb20geW91 ciBwcm9maWxlcywgdGhlIGNoZWNrYm94ZXMgZGlzYXBwZWFyIGFuZCB0aGUgc2V0dGluZ3Mg aGF2ZSBubyBlZmZlY3QuIENob29zZSBhIGRlZmF1bHQgcHJvZmlsZSB0byByZWluc3RhdGUg dGhlIGJlaGF2aW91cjwvbGk+CgkJPGxpPmlmIHlvdSBkZWFjdGl2YXRlIHRoZSBkZWZhdWx0 IHByb2ZpbGUgdGhlIGNoZWNrYm94ZXMgaGF2ZSBubyBlZmZlY3QgPHN0cm9uZz51bmxlc3M8 L3N0cm9uZz4geW91IGRlbGV0ZSB0aGUgcHJvZmlsZSAoc2luY2UgeW91JiM4MjE3O3JlIGRl bGV0aW5nIGl0LCBpdHMgc3RhdHVzIGlzICYjODIxNjtsb3N0JiM4MjE3OyBhbmQgdGhlcmVm b3JlIHRoZSBjaGVja2JveGVzIGZ1bmN0aW9uIGFzIG5vcm1hbCkuIElmIHRoZXJlJiM4MjE3 O3MgYW55IGRvdWJ0LCB1bmNoZWNrIHRoZSA8ZW0+RGVsZXRpb248L2VtPiBjaGVja2JveCBm aXJzdCE8L2xpPgoJPC9vbD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZSAmIzgyMTI7IHB1Ymxp YyBzaWRlPC9oMj4KCgk8cD5Ud28gbmV3IHRhZ3MgYXJlIGF2YWlsYWJsZSB0byBkaXNwbGF5 IHlvdXIgdGh1bWJuYWlscy48L3A+CgoJPGgzIGlkPSJzbWRfdGh1bWIiPjxjb2RlPiZsdDt0 eHA6c21kX3RodW1ibmFpbC8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+QSBkaXJlY3QgcmVwbGFj ZW1lbnQgZm9yIHRoZSBidWlsdCBpbiA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ubmV0 L3dpa2kvaW5kZXgucGhwP3RpdGxlPXRodW1ibmFpbCI+dHhwOnRodW1ibmFpbDwvYT4gdGFn IHdpdGggZXhhY3RseSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFuZCBhdHRyaWJ1dGVzIGFw YXJ0IGZyb20gdGhlc2UgZXhjZXB0aW9uczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+dHlwZTwvc3Bhbj4gOiB1c2UgdGhpcyBhdHRyaWJ1dGUgdG8gZGlzcGxheSB0 aHVtYm5haWxzIG9mIHRoZSBnaXZlbiBwcm9maWxlIG5hbWUuIGUuZy4gPGNvZGU+dHlwZT0m cXVvdDtsYXJnZSZxdW90OzwvY29kZT4uIElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGlzIGF0 dHJpYnV0ZSwgdGhlIGRlZmF1bHQgcHJvZmlsZSB3aWxsIGJlIHVzZWQuIElmIHRoZXJlIGlz IG5vIGRlZmF1bHQgcHJvZmlsZSB5b3UmIzgyMTc7bGwgc2VlIHdhcm5pbmcgbWVzc2FnZXM8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+IDogaWYgb21pdHRl ZCwgdGhlIG5hbWUgb2YgdGhlIHByb2ZpbGUgd2lsbCBiZSB1c2VkIGFzIGEgY2xhc3MgbmFt ZSBmb3IgdGhlIGltZyB0YWcuIElmIHlvdSBzcGVjaWZ5IGEgd3JhcHRhZyBhbmQgb21pdCB0 aGUgY2xhc3MsIHRoZSBwcm9maWxlIG5hbWUgd2lsbCBiZSB1c2VkIGFzIGEgY2xhc3Mgb24g Ym90aCB0aGUgY29udGFpbmVyIGFuZCB0aGUgaW1nIHRhZzwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5hbGlnbjwvc3Bhbj4gOiB0aGlzIGF0dHJpYnV0ZSBoYXMgYmVlbiByZW1v dmVkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmFkZF9zdGFtcDwvc3Bhbj4gOiBh ZGRzIHRoZSBpbWFnZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIHRvIHRoZSBlbmQgb2YgdGhl IHRodW1ibmFpbCYjODIxNztzIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LiBVc2Ug PGNvZGU+YWRkX3N0YW1wPSZxdW90OzEmcXVvdDs8L2NvZGU+IHRvIHN3aXRjaCB0aGlzIGZl YXR1cmUgb24uIFRoaXMgaGVscHMgcHJldmVudCBzdGFsZSBpbWFnZXMsIGJ1dCBtYXkgcHJl dmVudCBicm93c2VycyBmcm9tIGNhY2hlaW5nIHRoZSB0aHVtYnMgcHJvcGVybHkgdGh1cyBp bmNyZWFzaW5nIGJhbmR3aWR0aCB1c2FnZS4gRGVmYXVsdDogMDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5mb3JjZV9zaXplPC9zcGFuPiA6IHVzdWFsbHkgd2hlbiB5b3Ugc2V0 IG9uZSBvciBvdGhlciB3aWR0aC9oZWlnaHQgdG8gMCBpbiBhIHByb2ZpbGUsIHRoZSBicm93 c2VyIHNjYWxlcyB0aGUgbWlzc2luZyBkaW1lbnNpb24gYXV0b21hdGljYWxseS4gSXQgZG9l cyB0aGlzIGJ5IG9taXR0aW5nIHRoZSA8Y29kZT53aWR0aD08L2NvZGU+IG9yIDxjb2RlPmhl aWdodD08L2NvZGU+IGF0dHJpYnV0ZSBpbiB0aGUgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+ IHRhZy4gVGhpcyBtYXkgY2F1c2UgdmlzdWFsIGFydGVmYWN0cyBhcyB0aGUgcGFnZSBpcyBy ZW5kZXJlZCBhbmQgdGhlIGJyb3dzZXIgY2FsY3VsYXRlcyB0aGUgc2l6ZXMuIElmIHlvdSB3 aXNoIHRoZSBwbHVnaW4gdG8gYWRkIHRoZSBhY3R1YWwgZGltZW5zaW9uIHRvIHRoZSA8Y29k ZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnICh0aGUgc2l6ZSBhdCB0aGUgdGltZSB0aGUgdGh1 bWJuYWlsIHdhcyBjcmVhdGVkKSwgdGVsbCB0aGUgcGx1Z2luIHdpdGggdGhpcyBhdHRyaWJ1 dGUuIENob29zZSBvbmUgb3IgYm90aCBvZiA8Y29kZT53aWR0aDwvY29kZT4gb3IgPGNvZGU+ aGVpZ2h0PC9jb2RlPi4gQ29tbWEtc2VwYXJhdGUgYXMgcmVxdWlyZWQuIERlZmF1bHQ6IHVu c2V0PC9saT4KCTwvdWw+CgoJPHA+VGhlIHRhZyB3b3JrcyBpbnNpZGUgPGNvZGU+Jmx0O3R4 cDppbWFnZV9saXN0Jmd0OzwvY29kZT4gb3IgY2FuIGJlIHVzZWQgc3RhbmRhbG9uZSBieSBz cGVjaWZ5aW5nIHRoZSA8Y29kZT5pZDwvY29kZT4gb3IgPGNvZGU+bmFtZTwvY29kZT4gYXR0 cmlidXRlLjwvcD4KCgk8aDMgaWQ9InNtZF9pZl90aHVtYiI+PGNvZGU+Jmx0O3R4cDpzbWRf aWZfdGh1bWJuYWlsLyZndDs8L2NvZGU+PC9oMz4KCgk8cD5BIGRpcmVjdCByZXBsYWNlbWVu dCBmb3IgdGhlIGJ1aWx0IGluIDxjb2RlPiZsdDt0eHA6aWZfdGh1bWJuYWlsIC8mZ3Q7PC9j b2RlPiB0YWcgd2l0aCBleGFjdGx5IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuIEl0IGhhcyBv bmUgYXR0cmlidXRlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBl PC9zcGFuPiA6IHVzZSB0aGlzIGF0dHJpYnV0ZSB0byBjaGVjayBmb3IgdGh1bWJuYWlscyBv ZiB0aGUgZ2l2ZW4gcHJvZmlsZSBuYW1lLiBlLmcuIDxjb2RlPnR5cGU9JnF1b3Q7TWVkaXVt JnF1b3Q7PC9jb2RlPi4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgYXR0cmlidXRlLCB0 aGUgZGVmYXVsdCBwcm9maWxlIHdpbGwgYmUgdGVzdGVkLiBJZiB0aGVyZSBpcyBubyBkZWZh dWx0IHByb2ZpbGUgdGhlIHRhZyB3aWxsIGFsd2F5cyByZW5kZXIgdGhlIDxjb2RlPiZsdDt0 eHA6ZWxzZSAvJmd0OzwvY29kZT4gcG9ydGlvbjwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iaG93 X2l0X3dvcmtzIj5Ib3cgaXQgd29ya3M8L2gyPgoKCTxwPkZvciByZWZlcmVuY2UsIHdoZW4g eW91IGNyZWF0ZSBhIHByb2ZpbGUgYSBkaXJlY3RvcnkgaXMgY3JlYXRlZCB3aXRoIHRoYXQg bmFtZSBpbnNpZGUgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA8Y29kZT5p bWFnZXM8L2NvZGU+IGZvbGRlci4gSW5zaWRlIHRoaXMgZm9sZGVyIHlvdSB3aWxsIGZpbmQg aW1hZ2VzIG9mIHRoZSBmb3JtYXQgPGNvZGU+aWQuZXh0PC9jb2RlPjogd2hlcmUgPGNvZGU+ aWQ8L2NvZGU+IGFuZCA8Y29kZT5leHQ8L2NvZGU+IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5n IGltYWdlIElEcyBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gZGF0YWJh c2UuIFRoYXQmIzgyMTc7cyBwcmV0dHkgbXVjaCBpdC48L3A+CgoJPHA+WW91IGNhbiBkZWxl dGUgdGh1bWJuYWlsIGZpbGVzIG1hbnVhbGx5IGZyb20gYW55IG9mIHRoZXNlIGRpcmVjdG9y aWVzIGFuZCB0aGUgcGx1Z2luIHdpbGwgZmlndXJlIGV2ZXJ5dGhpbmcgb3V0LiBCdXQgaXQm IzgyMTc7cyBwcm9iYWJseSBub3QgYWR2aXNhYmxlIHRvIGRlbGV0ZSB0aGUgZGlyZWN0b3Jp ZXMgdGhlbXNlbHZlcyAmIzgyMTI7IHVzZSB0aGUgPGVtPltEZWxldGVdPC9lbT4gYnV0dG9u cyBpbiB0aGUgY29udHJvbCBwYW5lbCBmb3IgdGhhdC48L3A+CgoJPGgyIGlkPSJjaGFuZ2Vs b2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4wNiBBdWcgMTAgfCAwLjEwYmV0YSB8 IEluaXRpYWwgYmV0YSByZWxlYXNlPC9saT4KCQk8bGk+MDQgT2N0IDEwIHwgMC4xMCB8IE9m ZmljaWFsIHB1YmxpYyByZWxlYXNlPC9saT4KCQk8bGk+MDkgTm92IDEwIHwgMC4xMSB8IEFk ZGVkIDxjb2RlPmZvcmNlX3NpemU8L2NvZGU+IGFuZCA8Y29kZT5hZGRfc3RhbXA8L2NvZGU+ IChib3RoIHRoYW5rcyB6ZXJvKSA7IHJlbW92ZWQgdW5uZWNlc3NhcnkgREIgY2FsbDwvbGk+ CgkJPGxpPjEwIE5vdiAxMCB8IDAuMTIgfCBBZGRlZCBhYmlsaXR5IHRvIHN5bmMgZGVmYXVs dCBwcm9maWxlIHRodW1icyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+IHRodW1ibmFpbHMgKHRoYW5rcyB6ZXJvKTwvbGk+CgkJPGxpPjEw IE5vdiAxMCB8IDAuMTMgfCBBZGRlZCBjb25maXJtYXRpb24gb24gPGVtPkNyZWF0ZSBhbGw8 L2VtPiA7IHJlbGFiZWxsZWQgdXBsb2FkIGJveCAodGhhbmsgdWxpKSA7IHRhbWVkIHN0eWxl cyA7IHNpbGVuY2VkIGNobW9kIHdhcm5pbmdzICh0aGFua3MgemVybyk8L2xpPgoJPC91bD4K CjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBj b2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIs IGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRf aGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRl ZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJn aW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgaDEgeyBjb2xv cjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRl eHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHgg c29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4 IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6ICMyNzU2ODU7 IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFw eDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRl Y29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFy aWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAw IDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQt d2VpZ2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3Vu ZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lk dGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9o ZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzou NWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRf aGVscCAuaW1wb3J0YW50IHtjb2xvcjpyZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4 IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9 Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7 czozMjoiMzZiNGVmZTJiZGVmYjQ4MjNmYWQ3ZTk1MjBmNmFlN2MiO30=