# Name: smd_vars v0.11 # Type: Admin/Client side plugin # Semi-persistent general storage for name-value pairs # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6ODoic21kX3ZhcnMiO3M6NjoiYXV0aG9yIjtzOjExOiJTdGVm IERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29t LyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjUyOiJT ZW1pLXBlcnNpc3RlbnQgZ2VuZXJhbCBzdG9yYWdlIGZvciBuYW1lLXZhbHVlIHBhaXJzIjtz OjQ6ImNvZGUiO3M6MjQ0NzI6Ii8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vKioqKioqKioqKioqKioqKioqKioq KiBBRE1JTiBTSURFIENPREUgKioqKioqKioqKioqKioqKioqKioqKioNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ3NtZF92YXJz JywnMSwyJyk7DQoNCgkvLyBFeHRlbnNpb25zIHRhYg0KCXJlZ2lzdGVyX3RhYignZXh0ZW5z aW9ucycsICdzbWRfdmFycycsIHNtZF92YXJzX2dUeHQoJ3NtZF92YXJzJykpOw0KCXJlZ2lz dGVyX2NhbGxiYWNrKCdzbWRfdmFycycsICdzbWRfdmFycycpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfdmFycygkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFp bl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX3ZhcnNfdGFibGVfaW5zdGFsbCcsDQoJ CQknc21kX3ZhcnNfdGFibGVfcmVtb3ZlJywNCgkJCSdzbWRfdmFyc19wdXJnZV9leHBpcmVk JywNCgkJCSdzbWRfdmFyc19hZGQnLA0KCQkJJ3NtZF92YXJzX2RlbGV0ZScsDQoJCQknc21k X3ZhcnNfdXBkYXRlJywNCgkJCSdzbWRfdmFyc19tdWx0aV9lZGl0JywNCgkJCSdzbWRfdmFy c19jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsNCgkJc21kX3ZhcnNfc2hvdygnJyk7DQoJfSBl bHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF92YXJzX2FkZCgp IHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmV3X25hbWUnLCduZXdfdmFsdWUn LCduZXdfZXhwaXJ5JykpKSk7DQoNCgkkcmV0ID0gZmFsc2U7DQoJJG1zZyA9ICcnOw0KCSRu ZXdfZXhwaXJ5ID0gc21kX3ZhcnNfY2FsY19leHBpcnkoJG5ld19leHBpcnkpOw0KCSRuZXdf ZXhwaXJ5ID0gKCRuZXdfZXhwaXJ5KSA/ICRuZXdfZXhwaXJ5IDogJzAwMDAtMDAtMDAgMDA6 MDA6MDAnOw0KCWlmIChzbWRfdmFyc190YWJsZV9leGlzdHMoKSAmJiAkbmV3X25hbWUgJiYg JG5ld192YWx1ZSAmJiAkbmV3X2V4cGlyeSkgew0KCQkkZHVwID0gc2FmZV9jb3VudCgic21k X3ZhcnMiLCAibmFtZT0nJG5ld19uYW1lJyIpOw0KCQlpZiAoJGR1cCkgew0KCQkJJG1zZyA9 IHNtZF92YXJzX2dUeHQoJ2R1cGxpY2F0ZScpOw0KCQl9IGVsc2Ugew0KCQkJJHJldCA9IHNh ZmVfaW5zZXJ0KCJzbWRfdmFycyIsDQoJCQkJIm5hbWU9JyRuZXdfbmFtZScsDQoJCQkJdmFs dWU9JyRuZXdfdmFsdWUnLA0KCQkJCWV4cGlyZXM9JyRuZXdfZXhwaXJ5JyINCgkJCSk7DQoJ CX0NCgl9DQoNCglpZiAoJHJldCA9PT0gZmFsc2UpIHsNCgkJc21kX3ZhcnNfc2hvdyhzbWRf dmFyc19nVHh0KCdpbnNlcnRfZmFpbGVkJykuJG1zZywgJG5ld19uYW1lLCAkbmV3X3ZhbHVl LCAkbmV3X2V4cGlyeSk7DQoJfSBlbHNlIHsNCgkJc21kX3ZhcnNfc2hvdyhzbWRfdmFyc19n VHh0KCdpbnNlcnRlZCcpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF92 YXJzX3VwZGF0ZSgpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnaWQnLCAnbmV3 X25hbWUnLCduZXdfdmFsdWUnLCduZXdfZXhwaXJ5JykpKSk7DQoNCgkkbmV3X2V4cGlyeSA9 IHNtZF92YXJzX2NhbGNfZXhwaXJ5KCRuZXdfZXhwaXJ5KTsNCgkkcmV0ID0gZmFsc2U7DQoJ JG1zZyA9ICcnOw0KCWlmIChzbWRfdmFyc190YWJsZV9leGlzdHMoKSkgew0KCQkkZHVwID0g c2FmZV9yb3coIioiLCAic21kX3ZhcnMiLCAibmFtZT0nJG5ld19uYW1lJyIpOw0KDQoJCWlm ICgkZHVwICYmIChpbnR2YWwoJGR1cFsnaWQnXSkgIT0gaW50dmFsKCRpZCkpKSB7DQoJCQkk bXNnID0gc21kX3ZhcnNfZ1R4dCgnZHVwbGljYXRlJyk7DQoJCX0gZWxzZSB7DQoJCQkkcmV0 ID0gc2FmZV91cGRhdGUoInNtZF92YXJzIiwNCgkJCQkibmFtZT0nJG5ld19uYW1lJywNCgkJ CQl2YWx1ZT0nJG5ld192YWx1ZScsDQoJCQkJZXhwaXJlcz0nJG5ld19leHBpcnknIiwNCgkJ CQkiaWQ9JyRpZCciKTsNCgkJfQ0KCX0NCglpZiAoJHJldCA9PT0gZmFsc2UpIHsNCgkJc21k X3ZhcnNfc2hvdyhzbWRfdmFyc19nVHh0KCd1cGRhdGVfZmFpbGVkJykuJG1zZyk7DQoJfSBl bHNlIHsNCgkJc21kX3ZhcnNfc2hvdyhzbWRfdmFyc19nVHh0KCd1cGRhdGVkJykpOw0KCX0N Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3ZhcnNfZGVsZXRlKCkgew0KCSRpZCA9 IGFzc2VydF9pbnQocHMoJ2lkJykpOw0KDQoJJHJldCA9IGZhbHNlOw0KCWlmIChzbWRfdmFy c190YWJsZV9leGlzdHMoKSkgew0KCQkkcnMgPSBzYWZlX3JvdygnKicsICdzbWRfdmFycycs ICJpZCA9ICRpZCIpOw0KCQlpZiAoJHJzKSB7DQoJCQlleHRyYWN0KCRycyk7DQoJCQkkcmV0 ID0gc2FmZV9kZWxldGUoJ3NtZF92YXJzJywgImlkID0gJGlkIik7DQoJCX0NCgl9DQoJaWYg KCRyZXQgPT09IGZhbHNlKSB7DQoJCXNtZF92YXJzX3Nob3coc21kX3ZhcnNfZ1R4dCgnZGVs ZXRlX2ZhaWxlZCcpKTsNCgl9IGVsc2Ugew0KCQlzbWRfdmFyc19zaG93KHNtZF92YXJzX2dU eHQoJ2RlbGV0ZWQnLCBhcnJheSgie2lkfSIgPT4gJGlkKSkpOw0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX3ZhcnNfbXVsdGlfZWRpdCgpIHsNCi8vCWV4dHJhY3QoZG9T bGFzaChncHNhKGFycmF5KCdpZCcsJ25ld19uYW1lJywnbmV3X3ZhbHVlJywnbmV3X2V4cGly eScpKSkpOw0KDQoJJHNlbGVjdGVkID0gcHMoJ3NlbGVjdGVkJyk7DQoJJHJldCA9IGZhbHNl Ow0KCSRpZHMgPSAnJzsNCg0KCWlmIChzbWRfdmFyc190YWJsZV9leGlzdHMoKSAmJiAkc2Vs ZWN0ZWQpIHsNCgkJJG1ldGhvZCA9IHBzKCdlZGl0X21ldGhvZCcpOw0KCQlzd2l0Y2goJG1l dGhvZCkgew0KCQkJY2FzZSAiZGVsZXRlIjoNCgkJCQkkaWRzID0gYXJyYXkoKTsNCgkJCQlm b3JlYWNoICgkc2VsZWN0ZWQgYXMgJGlkKSB7DQoJCQkJCSRpZCA9IGFzc2VydF9pbnQoJGlk KTsNCgkJCQkJaWYgKHNhZmVfZGVsZXRlKCdzbWRfdmFycycsICJpZCA9ICRpZCIpKSB7DQoJ CQkJCQkkaWRzW10gPSAkaWQ7DQoJCQkJCX0NCgkJCQl9DQoJCQkJJGlkcyA9IGpvaW4oJywg JywgJGlkcyk7DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQoNCglzbWRfdmFyc19zaG93KHNtZF92 YXJzX2dUeHQoJ2RlbGV0ZWQnLCBhcnJheSgie2lkfSIgPT4gJGlkcykpKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX3ZhcnNfcHVyZ2VfZXhwaXJlZCgpIHsNCgkkYmxhdHRl ZCA9IDA7DQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCSR3aGVyZSA9ICJl eHBpcmVzIDw+ICcwMDAwLTAwLTAwIDAwOjAwOjAwJyBBTkQgZXhwaXJlcyA8IE5PVygpIjsN CgkJJGJsYXR0ZWQgPSBzYWZlX2NvdW50KCJzbWRfdmFycyIsICR3aGVyZSk7DQoJCSRyZXMg PSBzYWZlX2RlbGV0ZSgic21kX3ZhcnMiLCAkd2hlcmUpOw0KCX0NCglzbWRfdmFyc19zaG93 KHNtZF92YXJzX2dUeHQoJ2RlbGV0ZWRfbnVtJywgYXJyYXkoIntudW19IiA9PiAkYmxhdHRl ZCkpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3ZhcnNfdGFibGVfZXhpc3Rz KCkgew0KCXJldHVybihAc2FmZV9zaG93KCdjb2x1bW5zJywgJ3NtZF92YXJzJykpOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBBZGQgdGhlIHZhcnMgdGFibGUgaWYgbm90IGFscmVhZHkgaW5z dGFsbGVkDQpmdW5jdGlvbiBzbWRfdmFyc190YWJsZV9pbnN0YWxsKCkgew0KCSR2ZXJzaW9u ID0gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQn XSA9IDA7DQoJaWYgKCR2ZXJzaW9uIDwgIjQuMS4yIikgew0KCQkkR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddKys7DQoJCXRyaWdnZXJfZXJyb3IoInNtZF92YXJzIHJlcXVpcmVzIE15U1FM IHY0LjEuMiBvciBncmVhdGVyLiIpOw0KCX0gZWxzZSB7DQoJCSRyZXQgPSAnJzsNCgkJJHNx bCA9IGFycmF5KCk7DQoJCWlmICghc21kX3ZhcnNfdGFibGVfZXhpc3RzKCkpIHsNCgkJCSRz cWxbXSA9ICJDUkVBVEUgVEFCTEUgYCIuc2FmZV9wZngoJ3NtZF92YXJzJykuImAgKA0KCQkJ CWBpZGAgaW50KDExKSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwNCgkJCQlgbmFtZWAgdmFy Y2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJCQlgdmFsdWVgIHRleHQgTk9UIE5V TEwgZGVmYXVsdCAnJywNCgkJCQlgZXhwaXJlc2AgZGF0ZXRpbWUgTk9UIE5VTEwgZGVmYXVs dCAnMDAwMC0wMC0wMCAwMDowMDowMCcsDQoJCQkJUFJJTUFSWSBLRVkgKGBpZGApDQoJCQkp IEVOR0lORT1NeUlTQU0gUEFDS19LRVlTPTEgQVVUT19JTkNSRU1FTlQ9MSI7DQoNCgkJCWZv cmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0K CQkJCWlmICghJHJldCkgew0KCQkJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJ CQkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNx bF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4i Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCWlmICgkR0xPQkFMU1sndHhwX2Vycl9jb3Vu dCddID09IDApIHsNCgkJJG1lc3NhZ2UgPSBzbWRfdmFyc19nVHh0KCd0YWJsZV9pbnN0YWxs ZWQnKTsNCgl9IGVsc2Ugew0KCQkkbWVzc2FnZSA9IHNtZF92YXJzX2dUeHQoJ3RhYmxlX25v dF9pbnN0YWxsZWQnKTsNCgl9DQoJc21kX3ZhcnNfc2hvdygkbWVzc2FnZSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIERyb3AgdGhlIHZhcnMgdGFibGUgaWYgaXQncyBpbiB0aGUgZGF0YWJh c2UNCmZ1bmN0aW9uIHNtZF92YXJzX3RhYmxlX3JlbW92ZSgpIHsNCgkkcmV0ID0gJyc7DQoJ JHNxbCA9IGFycmF5KCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJaWYg KHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCSRzcWxbXSA9ICJEUk9QIFRBQkxFIElG IEVYSVNUUyAiIC5zYWZlX3BmeCgnc21kX3ZhcnMnKS4gIjsgIjsNCgkJZm9yZWFjaCAoJHNx bCBhcyAkcXJ5KSB7DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICghJHJl dCkgew0KCQkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCQllY2hvICI8Yj4i LiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJy IC8+XG4iOw0KCQkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJfQ0KCQl9DQoJ fQ0KCWlmICgkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID09IDApIHsNCgkJJG1lc3NhZ2Ug PSBzbWRfdmFyc19nVHh0KCd0YWJsZV9yZW1vdmVkJyk7DQoJfSBlbHNlIHsNCgkJJG1lc3Nh Z2UgPSBzbWRfdmFyc19nVHh0KCd0YWJsZV9ub3RfcmVtb3ZlZCcpOw0KCX0NCglzbWRfdmFy c19zaG93KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGlzcGxheSB0aGUgdmFy aWFibGVzIGFscmVhZHkgZGVmaW5lZCBhbmQgb3RoZXIgYnV0dG9ucyBsaWtlIGFkZC9yZW1v dmUvZWRpdCB2YXJzL3RhYmxlcw0KZnVuY3Rpb24gc21kX3ZhcnNfc2hvdygkbWVzc2FnZSwg JHRoZU5hbWU9JycsICR0aGVWYWx1ZT0nJywgJHRoZUV4cGlyZXM9JycpIHsNCglyZXF1aXJl X3BsdWdpbignc21kX2xpYicpOw0KDQoJLy8gUHJvY2VzcyB0aGUgc29ydCBvcmRlciwgbGlt aXQgYW5kIGZpbHRlcmluZyBzdHVmZiBmcm9tIHRoZSBxdWVyeSBzdHJpbmcNCglleHRyYWN0 KGdwc2EoYXJyYXkoJ3N0ZXAnLCAncGFnZScsICdzb3J0JywgJ2RpcicsICdjcml0JywgJ3Nl YXJjaF9tZXRob2QnLCAnaWQnKSkpOw0KCSRwYWdlYnkgPSAoZ3BzKCdxdHknKSkgPyBncHMo J3F0eScpIDogKChjcygnc21kX3ZhcnNfcGFnZWJ5JykpID8gY3MoJ3NtZF92YXJzX3BhZ2Vi eScpIDogMTUpOw0KDQoJJGRpciA9ICgkZGlyID09ICdkZXNjJykgPyAnZGVzYycgOiAnYXNj JzsNCglzd2l0Y2ggKCRzb3J0KSB7DQoJCWNhc2UgJ2lkJzoNCgkJCSRzb3J0X3NxbCA9ICdp ZCAnLiRkaXIuJywgbmFtZSBhc2MnOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3ZhbHVlJzoNCgkJ CSRzb3J0X3NxbCA9ICd2YWx1ZSAnLiRkaXIuJywgbmFtZSBhc2MnOw0KCQkJYnJlYWs7DQoJ CWNhc2UgJ2V4cGlyZXMnOg0KCQkJJHNvcnRfc3FsID0gJ2V4cGlyZXMgJy4kZGlyLicsIG5h bWUgYXNjJzsNCgkJCWJyZWFrOw0KCQljYXNlICduYW1lJzoNCgkJZGVmYXVsdDoNCgkJCSRz b3J0ID0gJ25hbWUnOw0KCQkJJHNvcnRfc3FsID0gJ25hbWUgJy4kZGlyOw0KCQkJYnJlYWs7 DQoJfQ0KCSRzd2l0Y2hfZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdhc2MnIDogJ2Rlc2Mn Ow0KCSRjcml0ZXJpYSA9IDE7DQoNCglpZiAoJHNlYXJjaF9tZXRob2QgJiYgJGNyaXQpIHsN CgkJJGNyaXRfZXNjYXBlZCA9IGRvU2xhc2goJGNyaXQpOw0KCQkkbm93ID0gZGF0ZSgiWS1t LWQgSDppOnMiKTsNCgkJLy8gTWFrZSB1cCBjcml0ZXJpYSBmb3IgdGhlIGZha2UgJ2V4cGly ZWQnIGNvbHVtbg0KCQlzd2l0Y2goc3RydG9sb3dlcigkY3JpdF9lc2NhcGVkKSkgew0KCQkJ Y2FzZSBzdHJ0b2xvd2VyKGdUeHQoJ3llcycpKToNCgkJCQkkZXhweXJlID0gIihleHBpcmVz IDwgJyRub3cnIEFORCBleHBpcmVzIDw+ICcwMDAwLTAwLTAwIDAwOjAwOjAwJykiOw0KCQkJ CWJyZWFrOw0KCQkJY2FzZSBzbWRfdmFyc19nVHh0KCdlbXB0eV9leHBpcnknKToNCgkJCQkk ZXhweXJlID0gImV4cGlyZXMgPSAnMDAwMC0wMC0wMCAwMDowMDowMCciOw0KCQkJCWJyZWFr Ow0KCQkJY2FzZSBzdHJ0b2xvd2VyKGdUeHQoJ25vJykpLnNtZF92YXJzX2dUeHQoJ2VtcHR5 X2V4cGlyeScpOg0KCQkJCSRleHB5cmUgPSAiKGV4cGlyZXMgPj0gJyRub3cnIE9SIGV4cGly ZXMgPSAnMDAwMC0wMC0wMCAwMDowMDowMCcpIjsNCgkJCQlicmVhazsNCgkJCWRlZmF1bHQ6 DQoJCQkJJGV4cHlyZSA9ICIoZXhwaXJlcyA+PSAnJG5vdycgQU5EIGV4cGlyZXMgPD4gJzAw MDAtMDAtMDAgMDA6MDA6MDAnKSI7DQoJCQkJYnJlYWs7DQoJCX0NCgkJJGNyaXRzcWwgPSBh cnJheSgNCgkJCSdpZCcgPT4gImlkID0gJyRjcml0X2VzY2FwZWQnIiwNCgkJCSduYW1lJyA9 PiAibmFtZSBsaWtlICclJGNyaXRfZXNjYXBlZCUnIiwNCgkJCSd2YWx1ZScgPT4gInZhbHVl IGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLA0KCQkJJ2V4cGlyZXMnID0+ICJleHBpcmVzIGxp a2UgJyUkY3JpdF9lc2NhcGVkJSciLA0KCQkJJ2V4cGlyZWQnID0+ICRleHB5cmUsDQoJCSk7 DQoNCgkJaWYgKGFycmF5X2tleV9leGlzdHMoJHNlYXJjaF9tZXRob2QsICRjcml0c3FsKSkg ew0KCQkJJGNyaXRlcmlhID0gJGNyaXRzcWxbJHNlYXJjaF9tZXRob2RdOw0KCQkJJGxpbWl0 ID0gNTAwOw0KCQl9IGVsc2Ugew0KCQkJJHNlYXJjaF9tZXRob2QgPSAnJzsNCgkJCSRjcml0 ID0gJyc7DQoJCX0NCgl9IGVsc2Ugew0KCQkkc2VhcmNoX21ldGhvZCA9ICcnOw0KCQkkY3Jp dCA9ICcnOw0KCX0NCg0KCSR0b3RhbCA9IChzbWRfdmFyc190YWJsZV9leGlzdHMoKSkgPyBz YWZlX2NvdW50KCdzbWRfdmFycycsICIkY3JpdGVyaWEiKSA6IDA7DQoJJGxpbWl0ID0gbWF4 KEAkcGFnZWJ5LCAxNSk7DQoJbGlzdCgkcGFnZSwgJG9mZnNldCwgJG51bVBhZ2VzKSA9IHBh Z2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFnZSk7DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50 IiA9PiAic21kX3ZhcnMiLA0KCQkicGFnZSIgPT4gJHBhZ2UsDQoJCSJzb3J0IiA9PiAkc29y dCwNCgkJImRpciIgPT4gJGRpciwNCgkJImNyaXQiID0+ICRjcml0LA0KCQkic2VhcmNoX21l dGhvZCIgPT4gJHNlYXJjaF9tZXRob2QsDQoJKTsNCg0KCSRxc1ZhcnMgPSAiaW5kZXgucGhw Ii5odG1sc3BlY2lhbGNoYXJzX2RlY29kZShqb2luX3FzKCRxcykpOw0KDQoJLy8gUmVuZGVy IHRoZSB2YXJpYWJsZSBsaXN0DQoJcGFnZXRvcChzbWRfdmFyc19nVHh0KCdlZGl0JyksJG1l c3NhZ2UpOw0KCSRidG5BZGQgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdmFyc19hZGQnLCBz bWRfdmFyc19nVHh0KCdhZGRfbGFiZWwnKSwgJ3NtYWxsZXJib3gnLCAnJywgJ3NtZF92YXJf c3RlcD10aGlzLm5hbWU7c21kX3Zhcl9pZD1cJ1wnJyk7DQoJJGJ0bkluc3RhbGxUYmwgPSAn PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdmFycycuYS4nc3RlcD1z bWRfdmFyc190YWJsZV9pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicgLiBmSW5w dXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfdmFyc19nVHh0KCd0YWJsZV9pbnN0YWxsX2xh YmVsJyksICdzbWFsbGVyYm94JykgLiAnPC9mb3JtPic7DQoJJGJ0blJlbW92ZVRibCA9ICc8 Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PXNtZF92YXJzJy5hLidzdGVwPXNt ZF92YXJzX3RhYmxlX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIiBvbnN1Ym1pdD0i cmV0dXJuIHZlcmlmeShcJycuc21kX3ZhcnNfZ1R4dCgndGFibGVfcmVtb3ZlX2NoZWNrJyku J1wnKSI+JyAuIGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF92YXJzX2dUeHQoJ3Rh YmxlX3JlbW92ZV9sYWJlbCcpLCAnc21hbGxlcmJveCcpIC4gJzwvZm9ybT4nOw0KCSRidG5Q dXJnZUV4cGlyZWQgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRf dmFycycuYS4nc3RlcD1zbWRfdmFyc19wdXJnZV9leHBpcmVkIiBzdHlsZT0iZGlzcGxheTpp bmxpbmUiIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5zbWRfdmFyc19nVHh0KCdwdXJn ZV9leHBpcmVkJykuJ1wnKSI+JyAuIGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF92 YXJzX2dUeHQoJ3B1cmdlX2V4cGlyZWRfbGFiZWwnKSwgJ3NtYWxsZXJib3gnKSAuICc8L2Zv cm0+JzsNCgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0K DQoJLy8gTm9uLWRlZmF1bHQgY2FzZXMgcmV0dXJuIGZhbHNlIGJlY2F1c2UgdGhlIG9yaWdp bmFsIGZvcm0gYWN0aW9uIGhhcyBiZWVuIG92ZXJyaWRlbg0KCWVjaG8gPDw8RU9KUw0KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCXZhciBzbWRfdmFyX3N0ZXAgPSAnJzsN Cgl2YXIgc21kX3Zhcl9pZCA9ICcnOw0KCWZ1bmN0aW9uIHByZXN1YigpIHsNCgkJdmFyIHNt ZF92YXJfVVJMID0gInskcXNWYXJzfSI7DQoJCXN3aXRjaChzbWRfdmFyX3N0ZXApIHsNCgkJ CWNhc2UgInNtZF92YXJzX2FkZCI6DQoJCQljYXNlICJzbWRfdmFyc191cGRhdGUiOg0KCQkJ CXZhciBuZXdfbmFtZSA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nbmV3X25hbWUnXSIpLnZhbCgp Ow0KCQkJCXZhciBuZXdfdmFsdWUgPSBqUXVlcnkoImlucHV0W25hbWU9J25ld192YWx1ZSdd IikudmFsKCk7DQoJCQkJdmFyIG5ld19leHBpcnkgPSBqUXVlcnkoImlucHV0W25hbWU9J25l d19leHBpcnknXSIpLnZhbCgpOw0KCQkJCWxvY2F0aW9uLmhyZWYgPSBzbWRfdmFyX1VSTCAr ICImc3RlcD0iICsgc21kX3Zhcl9zdGVwICsgIiZuZXdfbmFtZT0iICsgbmV3X25hbWUrICIm bmV3X3ZhbHVlPSIgKyBuZXdfdmFsdWUrICImbmV3X2V4cGlyeT0iICsgbmV3X2V4cGlyeSAr ICImaWQ9IiArIHNtZF92YXJfaWQ7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCWJyZWFrOw0K CQkJY2FzZSAic21kX3ZhcnNfZWRpdCI6DQoJCQkJbG9jYXRpb24uaHJlZiA9IHNtZF92YXJf VVJMICsgIiZzdGVwPSIgKyBzbWRfdmFyX3N0ZXAgKyAiJmlkPSIgKyBzbWRfdmFyX2lkOw0K CQkJCXJldHVybiBmYWxzZTsNCgkJCQlicmVhazsNCgkJCWNhc2UgInNtZF92YXJzX2NhbmNl bCI6DQoJCQkJbG9jYXRpb24uaHJlZiA9IHNtZF92YXJfVVJMOw0KCQkJCXJldHVybiBmYWxz ZTsNCgkJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQoJCQkJcmV0dXJuIHRydWU7DQoJCX0NCgl9 DQo8L3NjcmlwdD4NCkVPSlM7DQoNCgllY2hvIHN0YXJ0VGFibGUoJ2NvbnRyb2wnLCcnLCcn LDUpOw0KCWlmIChzbWRfdmFyc190YWJsZV9leGlzdHMoKSkgew0KCQkvLyBUYWJsZXMgaW5z dGFsbGVkDQoJCWVjaG8gdHIoZkxhYmVsQ2VsbChzbWRfdmFyc19nVHh0KCdjb250cm9sJyku JzonKSAuIHRkYSgkYnRuUmVtb3ZlVGJsLCAkYnRuU3R5bGUpIC4gdGRhKCRidG5QdXJnZUV4 cGlyZWQsICRidG5TdHlsZSkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJCWVjaG8gc21kX3Zh cnNfc2VhcmNoX2Zvcm0oJGNyaXQsICRzZWFyY2hfbWV0aG9kKTsNCgkJZWNobyAnPGZvcm0g bWV0aG9kPSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4n IiBvbnN1Ym1pdD0icmV0dXJuIHByZXN1YigpOyI+JzsNCgkJZWNobyBzdGFydFRhYmxlKCds aXN0Jyk7DQoJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfdmFyc19nVHh0KCdsaXN0X3RpdGxl JykpLCAnIGNvbHNwYW49IjUiJykpOw0KCQllY2hvIHRyKA0KCQkJY29sdW1uX2hlYWQoJ2lk JywgJ2lkJywgJ3NtZF92YXJzJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNo X21ldGhvZCwgKCdpZCcgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCWNvbHVtbl9oZWFk KCduYW1lJywgJ25hbWUnLCAnc21kX3ZhcnMnLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQs ICRzZWFyY2hfbWV0aG9kLCAoJ25hbWUnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuDQoJCQlj b2x1bW5faGVhZCgndmFsdWUnLCAndmFsdWUnLCAnc21kX3ZhcnMnLCB0cnVlLCAkc3dpdGNo X2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoJ3ZhbHVlJyA9PSAkc29ydCkgPyAkZGly IDogJycpLg0KCQkJY29sdW1uX2hlYWQoJ2V4cGlyZXMnLCAnZXhwaXJlcycsICdzbWRfdmFy cycsIHRydWUsICRzd2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICgnZXhwaXJl cycgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4NCgkJCWNvbHVtbl9oZWFkKCdleHBpcmVkJywg J2V4cGlyZWQnLCAnc21kX3ZhcnMnLCBmYWxzZSkNCgkJKTsNCg0KCQlpZiAoJHN0ZXAgIT0g InNtZF92YXJzX2VkaXQiKSB7DQoJCQkkb3V0ID0gdGQoJyZuYnNwOycpOw0KCQkJJG91dCAu PSBmSW5wdXRDZWxsKCduZXdfbmFtZScsICR0aGVOYW1lKTsNCgkJCSRvdXQgLj0gZklucHV0 Q2VsbCgnbmV3X3ZhbHVlJywgJHRoZVZhbHVlLCAnJywgNDIpOw0KCQkJJG91dCAuPSBmSW5w dXRDZWxsKCduZXdfZXhwaXJ5JywgJHRoZUV4cGlyZXMpOw0KCQkJJG91dCAuPSB0ZCgnJm5i c3A7Jyk7DQoJCQkkb3V0IC49IHRkYSgkYnRuQWRkLCAkYnRuU3R5bGUpOw0KCQkJZWNobyB0 cigkb3V0KTsNCgkJfQ0KDQoJCS8vIE5vdGUgdGhlIG5lZ2F0aXZlIGxvZ2ljIGluIHRoZSAn ZXhwaXJlZCcgY29sdW1uIChzaW5jZSBzbWRfdmFyX3N0YXR1cyByZXR1cm5zIDEgaWYgJ3Zh bGlkJykNCgkJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCcqJywgJ3NtZF92YXJzJywgIiRjcml0 ZXJpYSBvcmRlciBieSAkc29ydF9zcWwgbGltaXQgJG9mZnNldCwgJGxpbWl0Iik7DQoJCXdo aWxlICgkYSA9IG5leHRSb3coJHJzKSkgew0KCQkJJGV4cGlyeSA9ICgkYVsnZXhwaXJlcydd PT0iMDAwMC0wMC0wMCAwMDowMDowMCIpID8gc21kX3ZhcnNfZ1R4dCgnZW1wdHlfZXhwaXJ5 JykgOiAkYVsnZXhwaXJlcyddOw0KCQkJJGV4cGlyZUxhYmVsID0gc21kX3Zhcl9zdGF0dXMo YXJyYXkoIm5hbWUiID0+ICRhWyduYW1lJ10pKSA/ICgoJGV4cGlyeSA9PSBzbWRfdmFyc19n VHh0KCdlbXB0eV9leHBpcnknKSkgPyBzbWRfdmFyc19nVHh0KCdlbXB0eV9leHBpcnknKSA6 IGdUeHQoJ25vJykpIDogZ1R4dCgneWVzJyk7DQoJCQlpZiAoJHN0ZXAgPT0gInNtZF92YXJz X2VkaXQiICYmICRpZCA9PSAkYVsnaWQnXSkgew0KCQkJCSRvdXQgPSB0ZCgkYVsnaWQnXSk7 DQoJCQkJJG91dCAuPSBmSW5wdXRDZWxsKCduZXdfbmFtZScsICRhWyduYW1lJ10pOw0KCQkJ CSRvdXQgLj0gZklucHV0Q2VsbCgnbmV3X3ZhbHVlJywgJGFbJ3ZhbHVlJ10sICcnLCA0Mik7 DQoJCQkJJG91dCAuPSBmSW5wdXRDZWxsKCduZXdfZXhwaXJ5JywgJGV4cGlyeSk7DQoJCQkJ JG91dCAuPSB0ZCgkZXhwaXJlTGFiZWwpOw0KCQkJCSRvdXQgLj0gdGRhKGZJbnB1dCgnc3Vi bWl0JywgJ3NtZF92YXJzX3VwZGF0ZScsIGdUeHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3gnLCAn JywgJ3NtZF92YXJfc3RlcD10aGlzLm5hbWU7c21kX3Zhcl9pZD1cJycuJGFbJ2lkJ10uJ1wn JykpOw0KCQkJCSRvdXQgLj0gdGRhKGZJbnB1dCgnc3VibWl0JywgJ3NtZF92YXJzX2NhbmNl bCcsIHNtZF92YXJzX2dUeHQoJ2NhbmNlbF9sYWJlbCcpLCAnc21hbGxlcmJveCcsICcnLCAn c21kX3Zhcl9zdGVwPXRoaXMubmFtZTtzbWRfdmFyX2lkPVwnXCcnKSk7DQoJCQl9IGVsc2Ug ew0KCQkJCSRvdXQgPSB0YWcoJGFbJ2lkJ10sICd0ZCcpOw0KCQkJCSRvdXQgLj0gdGFnKCRh WyduYW1lJ10sICd0ZCcpOw0KCQkJCSRvdXQgLj0gdGFnKCgkYVsndmFsdWUnXSA/ICRhWyd2 YWx1ZSddIDogJyZuYnNwOycpLCAndGQnKTsNCgkJCQkkb3V0IC49IHRhZygkZXhwaXJ5LCAn dGQnKTsNCgkJCQkkb3V0IC49IHRhZygkZXhwaXJlTGFiZWwsICd0ZCcpOw0KCQkJCSRvdXQg Lj0gdGRhKGZJbnB1dCgnc3VibWl0JywgJ3NtZF92YXJzX2VkaXQnLCBnVHh0KCdlZGl0Jyks ICdzbWFsbGVyYm94JywgJycsICdzbWRfdmFyX3N0ZXA9dGhpcy5uYW1lO3NtZF92YXJfaWQ9 XCcnLiRhWydpZCddLidcJycpKTsNCgkJCQkkb3V0IC49IHRkKGRMaW5rKCdzbWRfdmFycycs ICdzbWRfdmFyc19kZWxldGUnLCAnaWQnLCAkYVsnaWQnXSwgJycsICcnLCAnJywgZmFsc2Us IGFycmF5KCRwYWdlLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKSksIDEw KTsNCgkJCQkkb3V0IC49IHRkKGZJbnB1dCgnY2hlY2tib3gnLCAnc2VsZWN0ZWRbXScsICRh WydpZCddKSk7DQoJCQl9DQoJCQllY2hvIHRyKCRvdXQsICcgY2xhc3M9InNtZF92YXJzX3Jv dyIgaWQ9IicuJGFbJ2lkJ10uJyInKTsNCgkJfQ0KCQllY2hvIHRkYShzZWxlY3RfYnV0dG9u cygpIC4gZXZlbnRfbXVsdGllZGl0X2Zvcm0oJ3NtZF92YXJzJywgTlVMTCwgJHBhZ2UsICRz b3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QpLCAnIGNvbHNwYW49IjUiIHN0eWxl PSJ0ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiBub25lOyInKTsNCgkJZWNobyBlbmRUYWJs ZSgpOw0KCQllY2hvICc8L2Zvcm0+JzsNCgkJZWNobyBuLm5hdl9mb3JtKCdzbWRfdmFycycs ICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2Qp Ow0KCQllY2hvIG4ucGFnZWJ5X2Zvcm0oJ3NtZF92YXJzJywgJHBhZ2VieSk7DQoJfSBlbHNl IHsNCgkJLy8gVGFibGVzIG5vdCBpbnN0YWxsZWQNCgkJZWNobyB0cih0ZGEoJGJ0bkluc3Rh bGxUYmwsICRidG5TdHlsZSkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJfQ0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyc19zZWFyY2hfZm9ybSgkY3JpdCwgJG1ldGhvZCkg ew0KCSRtZXRob2RzID0JYXJyYXkoDQoJCSdpZCcgPT4gZ1R4dCgnaWQnKSwNCgkJJ25hbWUn ID0+IGdUeHQoJ25hbWUnKSwNCgkJJ3ZhbHVlJyA9PiBnVHh0KCd2YWx1ZScpLA0KCQknZXhw aXJlcycgPT4gZ1R4dCgnZXhwaXJlcycpLA0KCQknZXhwaXJlZCcgPT4gZ1R4dCgnZXhwaXJl ZCcpDQoJKTsNCg0KCXJldHVybiBzZWFyY2hfZm9ybSgnc21kX3ZhcnMnLCAnc21kX3ZhcnNf c2hvdycsICRjcml0LCAkbWV0aG9kcywgJG1ldGhvZCwgJ25hbWUnKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX3ZhcnNfY2hhbmdlX3BhZ2VieSgpIHsNCglzZXRjb29raWUo J3NtZF92YXJzX3BhZ2VieScsIGdwcygncXR5JykpOw0KCXNtZF92YXJzX3Nob3coJycpOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBDYWxjdWxhdGUgYW55IHRpbWUgb2Zmc2V0IHJlbGF0aXZl IHRvIG5vdywgZS5nLiArMWQsICs0dywgKzMwcywgKzEwbSBldGMNCmZ1bmN0aW9uIHNtZF92 YXJzX2NhbGNfZXhwaXJ5KCRleHBpcmVzLCAkZGVidWc9ZmFsc2UpIHsNCgkkb2Zmc2V0UkUg PSAnLyhcK3xcQCkoWzAtOV0rKShbQS1aYS16XSkvJzsNCgkkbnVtT2Zmc2V0cyA9IHByZWdf bWF0Y2hfYWxsKCRvZmZzZXRSRSwgJGV4cGlyZXMsICRvZmZzZXRzKTsNCglpZiAoJG51bU9m ZnNldHMgPiAwKSB7DQoJCSR2YWxpZFBlcmlvZHMgPSBhcnJheSgNCgkJCSdzJyA9PiAxLA0K CQkJJ20nID0+IDYwLA0KCQkJJ2gnID0+IDM2MDAsDQoJCQknZCcgPT4gODY0MDAsDQoJCQkn dycgPT4gNjA0ODAwLA0KCQkJJ3knID0+IDMxNDQ5NjAwLA0KCQkJKTsNCgkJJG9mZk51bSA9 ICRvZmZzZXRzWzJdWzBdOw0KCQkkb2ZmUGVyaW9kID0gKGFycmF5X2tleV9leGlzdHMoJG9m ZnNldHNbM11bMF0sICR2YWxpZFBlcmlvZHMpKSA/ICRvZmZzZXRzWzNdWzBdIDogInMiOw0K CQkkZXhwaXJlcyA9IGRhdGUoIlktbS1kIEg6aTpzIiwgdGltZSgpICsgKCRvZmZOdW0gKiAk dmFsaWRQZXJpb2RzWyRvZmZQZXJpb2RdKSk7DQoJCWlmICgkZGVidWcpIHsNCgkJCWVjaG8g IisrIFRJTUUgTk9XIEFORCBUSU1FIElOICRvZmZOdW0gJG9mZlBlcmlvZCArKyI7DQoJCQlk bXAoZGF0ZSgiWS1tLWQgSDppOnMiKSk7DQoJCQlkbXAoJGV4cGlyZXMpOw0KCQl9DQoJfQ0K CXJldHVybiAkZXhwaXJlczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8qKioqKioqKioqKioqKioq KioqKioqIFBVQkxJQyBTSURFIFRBR1MgKioqKioqKioqKioqKioqKioqKioqKg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyX2dldCgkYXR0cykgew0KCXJl cXVpcmVfcGx1Z2luKCdzbWRfbGliJyk7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkn bmFtZScgPT4gJycsDQoJCSdpbmplY3QnID0+ICcnLA0KCQknYWxsb3dfc3BhY2VzJyA9PiAn MCcsDQoJCSd2YWxpZCcgPT4gJzEnLA0KCQknZGVsaW0nID0+ICcsJywNCgkJJ3BhcmFtZGVs aW0nID0+ICc6JywNCgkJJ2RlYnVnJyA9PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCWlmICgk bmFtZSkgeyRuYW1lID0gZG9TbGFzaCgkbmFtZSk7fQ0KCWxpc3QoJG5nZXQsICRpZ25vcmUp ID0gc21kX2RvTGlzdCgkbmFtZSwgZmFsc2UsICcnLCBmYWxzZSwgJGRlbGltLCAkYWxsb3df c3BhY2VzKTsNCgkkcmV0ID0gZmFsc2U7DQoNCgkkdXNlVmFsaWQgPSAoJHZhbGlkKSA/IChz bWRfdmFyX3N0YXR1cyhhcnJheSgnbmFtZScgPT4gJG5nZXRbMF0sICd0eXBlJyA9PiAnYXZh aWxhYmxlLCB2YWxpZCcpKSA9PSAiMXwxIikgOiAxOw0KCWlmIChzbWRfdmFyc190YWJsZV9l eGlzdHMoKSAmJiAkdXNlVmFsaWQpIHsNCgkJJHJzID0gc2FmZV9yb3coJyonLCAnc21kX3Zh cnMnLCAnbmFtZT0iJy4kbmdldFswXS4nIicsICRkZWJ1Zyk7DQoJCWlmICgkZGVidWcpIHsN CgkJCWVjaG8gIisrIFJBVyAvIFJFUExBQ0VEIFZBUiArKyI7DQoJCQlkbXAoJG5hbWUgLicg LyAnLiAkbmdldFswXSk7DQoJCQllY2hvICIrKyBSRUNPUkQgKysiOw0KCQkJZG1wKCRycyk7 DQoJCX0NCgkJaWYgKCRycykgew0KCQkJbGlzdCgkdmdldCwgJGlnbm9yZSkgPSBzbWRfZG9M aXN0KCRyc1sndmFsdWUnXSwgZmFsc2UsICcnLCBmYWxzZSwgJGRlbGltLCAkYWxsb3dfc3Bh Y2VzKTsNCgkJCSRyZXBsYWNlbWVudHMgPSBhcnJheSgpOw0KCQkJaWYgKCRpbmplY3QpIHsN CgkJCQlsaXN0KCRpbmplY3QsICRpZ25vcmUpID0gc21kX2RvTGlzdCgkaW5qZWN0LCBmYWxz ZSwgJycsIGZhbHNlLCAkZGVsaW0sICRhbGxvd19zcGFjZXMpOw0KCQkJCWZvcmVhY2ggKCRp bmplY3QgYXMgJHNxdWlydCkgew0KCQkJCQkkbnYgPSBkb19saXN0KCRzcXVpcnQsICRwYXJh bWRlbGltKTsNCgkJCQkJaWYgKGNvdW50KCRudikgPT0gMikgew0KCQkJCQkJJHJlcGxhY2Vt ZW50c1skbnZbMF1dID0gJG52WzFdOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRy ZXQgPSBzdHJ0cigkdmdldFswXSwgJHJlcGxhY2VtZW50cyk7DQoJfQ0KCXJldHVybiAkcmV0 Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyX3B1dCgkYXR0cykgew0KCXJl cXVpcmVfcGx1Z2luKCdzbWRfbGliJyk7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkn bmFtZScgPT4gJycsDQoJCSd2YWx1ZScgPT4gJycsDQoJCSdleHBpcmVzJyA9PiAnJywNCgkJ J2dldF92YWxzX25vdycgPT4gJzEnLA0KCQknYWN0aW9uJyA9PiAncmVwbGFjZScsDQoJCSdh bGxvd19zcGFjZXMnID0+ICcwJywNCgkJJ3JldHVybicgPT4gJ3NpbGVudCcsDQoJCSdkZWxp bScgPT4gJywnLA0KCQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJJHJldCA9 IGZhbHNlOw0KDQoJLy8gVmFsaWRhdGUvcHJvY2VzcyB0aGUgYXR0cmlidXRlcw0KCWlmICgk bmFtZSkgeyRuYW1lID0gZG9TbGFzaCgkbmFtZSk7fQ0KCWlmICgkdmFsdWUpIHskdmFsdWUg PSBkb1NsYXNoKCR2YWx1ZSk7fQ0KCWlmICgkZXhwaXJlcykgeyRleHBpcmVzID0gZG9TbGFz aCgkZXhwaXJlcyk7fQ0KCSRhY3Rpb25PcHRzID0gYXJyYXkoJ3JlcGxhY2UnLCAnYXBwZW5k JywgJ3ByZXBlbmQnLCAnZGVsZXRlJyk7DQoJJGFjdGlvbiA9IChpbl9hcnJheSgkYWN0aW9u LCRhY3Rpb25PcHRzKSkgPyAkYWN0aW9uIDogJGFjdGlvbk9wdHNbMF07DQoNCglpZiAoc21k X3ZhcnNfdGFibGVfZXhpc3RzKCkgJiYgJG5hbWUpIHsNCgkJaWYgKCRhY3Rpb24gPT0gImRl bGV0ZSIpIHsNCgkJCSRyZXQgPSBzbWRfdmFyX2RlbGV0ZShhcnJheSgibmFtZSIgPT4gJG5h bWUsICJhbGxvd19zcGFjZXMiID0+ICRhbGxvd19zcGFjZXMsICJkZWJ1ZyIgPT4gJGRlYnVn KSk7DQoJCX0gZWxzZSB7DQoJCQkkZXhwaXJlcyA9IHNtZF92YXJzX2NhbGNfZXhwaXJ5KCRl eHBpcmVzLCAkZGVidWcpOw0KCQkJJGV4cGlyeSA9ICgkZXhwaXJlcykgPyAiLCBleHBpcmVz PSckZXhwaXJlcyciIDogJyc7DQoNCgkJCS8vIERlY2lkZSB3aGV0aGVyIHRvIHJlcGxhY2Ug YW55ID8gdmFyaWFibGVzIHdpdGggdGhlaXIgcmVhbCB2YWx1ZSBjb3VudGVycGFydHMgYmVm b3JlIGluc2VydGlvbi4gUGxhY2Vob2xkZXJzIGFyZSBhbHdheXMgc3RvcmVkIGludGFjdA0K CQkJJG5hbWVzID0gZG9fbGlzdCgkbmFtZSwgJGRlbGltKTsNCgkJCSRudW1uYW1lcyA9IGNv dW50KCRuYW1lcyk7DQoJCQkkdmFsdWVzID0gZG9fbGlzdCgkdmFsdWUsICRkZWxpbSk7DQoJ CQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgJG51bW5hbWVzOyAkaWR4KyspIHsNCgkJCQkvLyBI YXJkLWNvZGUgYSBjb21tYSBhcyB0aGUgZGVsaW1pdGVyIHNpbmNlIHdlJ3JlIGFscmVhZHkg ZGVhbGluZyB3aXRoIGluZGl2aWR1YWwgaXRlbXMgYWZ0ZXIgdGhlIGRvX2xpc3QoKS4NCgkJ CQkvLyBTaW5jZSB0aGUgY29tbWEgbm93IGNhbm5vdCBhcHBlYXIgaW4gYW55IGVudHJ5IGlu ICRuYW1lcyBvciAkdmFsdWVzLCB0aGlzIGd1YXJhbnRlZXMgb25seSBvbmUgZW50cnkgaW4g dGhlIHJldHVybmVkIGFycmF5DQoJCQkJbGlzdCgkbmluamVjdCwgJGlnbm9yZSkgPSBzbWRf ZG9MaXN0KCRuYW1lc1skaWR4XSwgZmFsc2UsICcnLCBmYWxzZSwgJywnLCAkYWxsb3dfc3Bh Y2VzKTsNCgkJCQlpZiAoJGdldF92YWxzX25vdykgew0KCQkJCQlsaXN0KCR2aW5qZWN0LCAk aWdub3JlKSA9IHNtZF9kb0xpc3QoJHZhbHVlc1skaWR4XSwgZmFsc2UsICcnLCBmYWxzZSwg JywnLCAkYWxsb3dfc3BhY2VzKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkdmluamVjdCA9IGFy cmF5KCk7DQoJCQkJCSR2aW5qZWN0WzBdID0gJHZhbHVlc1skaWR4XTsNCgkJCQl9DQoJCQkJ aWYgKCRkZWJ1Zykgew0KCQkJCQllY2hvICIrKyBSQVcgVkFSICsrIjsNCgkJCQkJZG1wKCRu YW1lc1skaWR4XSAuJyA6ICcuICR2YWx1ZXNbJGlkeF0pOw0KCQkJCQllY2hvICIrKyAiIC4o KCRhY3Rpb249PSJhcHBlbmQiKSA/ICJBUFBFTkRJTkcgVE8iIDogKCgkYWN0aW9uPT0icHJl cGVuZCIpID8gIlBSRVBFTkRJTkcgVE8iIDogIlJFUExBQ0lORyIpKS4gIiBWQVIgJyRuaW5q ZWN0WzBdJyArKyI7DQoJCQkJCWRtcCgkdmluamVjdFswXSk7DQoJCQkJfQ0KCQkJCWlmICgk YWN0aW9uID09ICJhcHBlbmQiKSB7DQoJCQkJCSRyZXQgPSBzYWZlX3Vwc2VydCgic21kX3Zh cnMiLCAidmFsdWU9Q09OQ0FUKENPQUxFU0NFKHZhbHVlLCAnJyksICckdmluamVjdFswXScp JGV4cGlyeSIsICJuYW1lPSckbmluamVjdFswXSciLCAkZGVidWcpOw0KCQkJCX0gZWxzZSBp ZiAoJGFjdGlvbiA9PSAicHJlcGVuZCIpIHsNCgkJCQkJJHJldCA9IHNhZmVfdXBzZXJ0KCJz bWRfdmFycyIsICJ2YWx1ZT1DT05DQVQoJyR2aW5qZWN0WzBdJywgQ09BTEVTQ0UodmFsdWUs ICcnKSkkZXhwaXJ5IiwgIm5hbWU9JyRuaW5qZWN0WzBdJyIsICRkZWJ1Zyk7DQoJCQkJfSBl bHNlIHsNCgkJCQkJJHJldCA9IHNhZmVfdXBzZXJ0KCJzbWRfdmFycyIsICJ2YWx1ZT0nJHZp bmplY3RbMF0nJGV4cGlyeSIsICJuYW1lPSckbmluamVjdFswXSciLCAkZGVidWcpOw0KCQkJ CX0NCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gKCRyZXR1cm4gPT0gInNpbGVudCIpID8gJycg OiAkcmV0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBdmFpbGFibGUgc2VwYXJhdGVseSBhbmQg YWxzbyBjYWxsZWQgaWYgc21kX3Zhcl9wdXQgZGVsZXRlPSIxIiBpcyB1c2VkDQpmdW5jdGlv biBzbWRfdmFyX2RlbGV0ZSgkYXR0cykgew0KCXJlcXVpcmVfcGx1Z2luKCdzbWRfbGliJyk7 DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknbmFtZScgPT4gJycsDQoJCSdhbGxvd19z cGFjZXMnID0+ICcwJywNCgkJJ2RlYnVnJyA9PiAnMCcsDQoJKSwgJGF0dHMpKTsNCg0KCWlm ICgkbmFtZSkgeyRuYW1lID0gZG9TbGFzaCgkbmFtZSk7fQ0KCWxpc3QoJG5kZWwsICRpZ25v cmUpID0gc21kX2RvTGlzdCgkbmFtZSwgZmFsc2UsICcnLCBmYWxzZSwgJGRlbGltLCAkYWxs b3dfc3BhY2VzKTsNCgkkcmV0ID0gZmFsc2U7DQoNCglpZiAoc21kX3ZhcnNfdGFibGVfZXhp c3RzKCkpIHsNCgkJaWYgKCRuYW1lKSB7DQoJCQkkcmV0ID0gc2FmZV9kZWxldGUoInNtZF92 YXJzIiwgIm5hbWU9JyRuZGVsWzBdJyIpOw0KCQl9DQoJfQ0KCXJldHVybjsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX3Zhcl9zdGF0dXMoJGF0dHMpIHsNCglyZXF1aXJlX3Bs dWdpbignc21kX2xpYicpOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ25hbWUnID0+ ICcnLA0KCQkndHlwZScgPT4gJ3ZhbGlkJywNCgkJJ2FsbG93X3NwYWNlcycgPT4gJzAnLA0K CQkncmV0dXJuJyA9PiAnbnVtYmVyJywNCgkJJ2RlbGltJyA9PiAnLCcsDQoJCSdvdXRkZWxp bScgPT4gJ3wnLA0KCQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJLy8gTG9v a3VwIHRhYmxlcw0KCSR0eXBlT3B0cyA9IGFycmF5KCd2YWxpZCcsICdhdmFpbGFibGUnLCAn dXNlJyk7DQoJJHJldHVybk9wdHMgPSBhcnJheSgnbmFtZScsICdudW1iZXInKTsNCgkkc3Rh dGkgPSBhcnJheSgNCgkJJ2F2YWlsYWJsZScgPT4gYXJyYXkoc21kX3ZhcnNfZ1R4dCgndmFy X3VuYXZhaWxhYmxlJyksIHNtZF92YXJzX2dUeHQoJ3Zhcl9hdmFpbGFibGUnKSksDQoJCSd2 YWxpZCcgPT4gYXJyYXkoc21kX3ZhcnNfZ1R4dCgndmFyX2ludmFsaWQnKSwgc21kX3ZhcnNf Z1R4dCgndmFyX3ZhbGlkJykpLA0KCQkndXNlJyA9PiBhcnJheShzbWRfdmFyc19nVHh0KCd2 YXJfdW51c2VkJyksIHNtZF92YXJzX2dUeHQoJ3Zhcl91c2VkJykpLA0KCQkpOw0KDQoJLy8g VmFsaWRhdGUgdGhlIG9wdGlvbnMNCglpZiAoJG5hbWUpIHskbmFtZSA9IGRvU2xhc2goJG5h bWUpO30NCglsaXN0KCRuc3RhdCwgJGlnbm9yZSkgPSBzbWRfZG9MaXN0KCRuYW1lLCBmYWxz ZSwgJycsIGZhbHNlLCAkZGVsaW0sICRhbGxvd19zcGFjZXMpOw0KCSRyZXR1cm4gPSAoaW5f YXJyYXkoJHJldHVybiwkcmV0dXJuT3B0cykpID8gJHJldHVybiA6ICRyZXR1cm5PcHRzWzBd Ow0KCSR0eXBlcyA9IGFycmF5KCk7DQoJJHR5cGUgPSBkb19saXN0KCR0eXBlLCAkZGVsaW0p Ow0KCWZvcmVhY2ggKCR0eXBlIGFzICR0aGlzdHlwZSkgew0KCQkkdHlwZXNbXSA9IChpbl9h cnJheSgkdGhpc3R5cGUsICR0eXBlT3B0cykpID8gJHRoaXN0eXBlIDogJHR5cGVPcHRzWzBd Ow0KCX0NCgkkdHlwZXMgPSBhcnJheV91bmlxdWUoJHR5cGVzKTsNCgkkb3V0ID0gYXJyYXko KTsNCg0KCS8vIEdldCB0aGUgcmVsZXZhbnQgcm93IGFuZCBjaGVjayB2YXJpb3VzIHBhcnRz IG9mIGl0DQoJaWYgKHNtZF92YXJzX3RhYmxlX2V4aXN0cygpKSB7DQoJCSRycyA9IHNhZmVf cm93KCcqJywgJ3NtZF92YXJzJywgJ25hbWU9IicuJG5zdGF0WzBdLiciJyk7DQoJCWlmICgk ZGVidWcpIHsNCgkJCWRtcCgkcnMpOw0KCQl9DQoJCWZvcmVhY2ggKCR0eXBlcyBhcyAkdGhp c3R5cGUpIHsNCgkJCSRyZXQgPSAwOw0KCQkJaWYgKCR0aGlzdHlwZSA9PSAiYXZhaWxhYmxl Iikgew0KCQkJCSRyZXQgPSAoY291bnQoJHJzKSA9PSAwKSA/IDAgOiAxOw0KCQkJfSBlbHNl IGlmICgkdGhpc3R5cGUgPT0gInZhbGlkIikgew0KCQkJCSRyZXQgPSAoY291bnQoJHJzKSA+ IDAgJiYgKHN0cnRvdGltZSgkcnNbJ2V4cGlyZXMnXSkgPiB0aW1lKCkgfHwgJHJzWydleHBp cmVzJ10gPT0gIjAwMDAtMDAtMDAgMDA6MDA6MDAiKSkgPyAxIDogMDsNCgkJCX0gZWxzZSBp ZiAoJHRoaXN0eXBlID09ICJ1c2UiKSB7DQoJCQkJJHJldCA9IChjb3VudCgkcnMpID4gMCAm JiAkcnNbJ3ZhbHVlJ10hPSIiKSA/IDEgOiAwOw0KCQkJfQ0KCQkJJG91dFtdID0gKCRyZXR1 cm49PSJuYW1lIikgPyAkc3RhdGlbJHRoaXN0eXBlXVskcmV0XSA6ICRyZXQ7DQoJCX0NCgl9 DQoJcmV0dXJuIGpvaW4oJG91dGRlbGltLCAkb3V0KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX3Zhcl9pZl9zdGF0dXMoJGF0dHMsICR0aGluZz0nJykgew0KCWV4dHJhY3Qo bEF0dHMoYXJyYXkoDQoJCSduYW1lJyA9PiAnJywNCgkJJ3R5cGUnID0+ICd2YWxpZCcsDQoJ KSwgJGF0dHMpKTsNCg0KCSRyZXQgPSBzbWRfdmFyX3N0YXR1cyhhcnJheSgNCgkJJ25hbWUn ID0+ICRuYW1lLA0KCQkndHlwZScgPT4gJHR5cGUsDQoJCSkpOw0KDQoJcmV0dXJuIHBhcnNl KEV2YWxFbHNlKCR0aGluZywgJHJldCkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDb252ZW5p ZW5jZSBzaG9ydGN1dCBmdW5jdGlvbnMgZm9yIHNtZF92YXJfaWZfc3RhdHVzDQpmdW5jdGlv biBzbWRfdmFyX2lmX3ZhbGlkKCRhdHRzLCAkdGhpbmc9JycpIHsNCglleHRyYWN0KGxBdHRz KGFycmF5KCduYW1lJyA9PiAnJyksICRhdHRzKSk7DQoJcmV0dXJuIHNtZF92YXJfaWZfc3Rh dHVzKGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ3R5cGUnID0+ICd2YWxpZCcpLCAkdGhpbmcp Ow0KfQ0KZnVuY3Rpb24gc21kX3Zhcl9pZl91c2VkKCRhdHRzLCAkdGhpbmc9JycpIHsNCgll eHRyYWN0KGxBdHRzKGFycmF5KCduYW1lJyA9PiAnJyksICRhdHRzKSk7DQoJcmV0dXJuIHNt ZF92YXJfaWZfc3RhdHVzKGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ3R5cGUnID0+ICd1c2Un KSwgJHRoaW5nKTsNCn0NCmZ1bmN0aW9uIHNtZF92YXJfaWZfYXZhaWxhYmxlKCRhdHRzLCAk dGhpbmc9JycpIHsNCglleHRyYWN0KGxBdHRzKGFycmF5KCduYW1lJyA9PiAnJyksICRhdHRz KSk7DQoJcmV0dXJuIHNtZF92YXJfaWZfc3RhdHVzKGFycmF5KCduYW1lJyA9PiAkbmFtZSwg J3R5cGUnID0+ICdhdmFpbGFibGUnKSwgJHRoaW5nKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQov LyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJl cXVpcmVkDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdmFyc19nVHh0KCR3aGF0LCAkYXR0 cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQknc21kX3ZhcnMnID0+ICdWYXJp YWJsZXMnLA0KCQknYWRkX2xhYmVsJyA9PiAnQWRkJywNCgkJJ2NhbmNlbF9sYWJlbCcgPT4g J2NhbmNlbCcsDQoJCSdjbGVhcicgPT4gJ2NscicsDQoJCSdjb250cm9sJyA9PiAnUGx1Z2lu IGNvbnRyb2wnLA0KCQknZGVsZXRlX2ZhaWxlZCcgPT4gJ1ZhcmlhYmxlIE5PVCBkZWxldGVk LicsDQoJCSdkZWxldGVkJyA9PiAnVmFyaWFibGUgSURzIGRlbGV0ZWQ6IHtpZH0nLA0KCQkn ZGVsZXRlZF9udW0nID0+ICdWYXJpYWJsZXMgZGVsZXRlZDoge251bX0nLA0KCQknZHVwbGlj YXRlJyA9PiAnOiBhbHJlYWR5IGV4aXN0cy4nLA0KCQknZWRpdCcgPT4gJ0VkaXQgdmFyaWFi bGVzJywNCgkJJ2VtcHR5X2V4cGlyeScgPT4gJy0nLA0KCQknaW5zZXJ0X2ZhaWxlZCcgPT4g J0Nhbm5vdCBhZGQgdmFyJywNCgkJJ2luc2VydGVkJyA9PiAnVmFyIGluc2VydGVkLiAnLA0K CQknbGlzdF90aXRsZScgPT4gJ0RlZmluZWQgVmFyaWFibGVzJywNCgkJJ25vdF9hdmFpbGFi bGUnID0+ICdzbWRfdmFycyB0YWJsZSBub3QgaW5zdGFsbGVkJywNCgkJJ3Blcl9wYWdlJyA9 PiAnU2hvdyB7cGFnZWJ5fSBwZXIgcGFnZScsDQoJCSdwdXJnZV9leHBpcmVkJyA9PiAnRGVs ZXRlIGFsbCBleHBpcmVkIHZhcmlhYmxlczogYXJlIHlvdSBzdXJlPycsDQoJCSdwdXJnZV9l eHBpcmVkX2xhYmVsJyA9PiAnUHVyZ2UgZXhwaXJlZCcsDQoJCSd0YWJsZV9pbnN0YWxsX2xh YmVsJyA9PiAnSW5zdGFsbCB0YWJsZScsDQoJCSd0YWJsZV9pbnN0YWxsZWQnID0+ICdWYXJz IHRhYmxlIGluc3RhbGxlZC4gJywNCgkJJ3RhYmxlX25vdF9pbnN0YWxsZWQnID0+ICdWYXJz IHRhYmxlIE5PVCBpbnN0YWxsZWQuICcsDQoJCSd0YWJsZV9ub3RfcmVtb3ZlZCcgPT4gJ1Zh cnMgdGFibGUgTk9UIHJlbW92ZWQuICcsDQoJCSd0YWJsZV9yZW1vdmVfY2hlY2snID0+ICdE ZWxldGUgZW50aXJlIHNtZF92YXJzIHRhYmxlOiBhcmUgeW91IHN1cmU/JywNCgkJJ3RhYmxl X3JlbW92ZV9sYWJlbCcgPT4gJ1JlbW92ZSB0YWJsZScsDQoJCSd0YWJsZV9yZW1vdmVkJyA9 PiAnVmFycyB0YWJsZSByZW1vdmVkLiAnLA0KCQkndG9nZ2xlJyA9PiAndG9nJywNCgkJJ3Vw ZGF0ZV9mYWlsZWQnID0+ICdWYXIgbm90IHVwZGF0ZWQnLA0KCQkndXBkYXRlZCcgPT4gJ1Zh ciB1cGRhdGVkLiAnLA0KCQkndmFyX2F2YWlsYWJsZScgPT4gJ2F2YWlsYWJsZScsDQoJCSd2 YXJfaW52YWxpZCcgPT4gJ2V4cGlyZWQnLA0KCQkndmFyX3VuYXZhaWxhYmxlJyA9PiAndW5h dmFpbGFibGUnLA0KCQkndmFyX3VudXNlZCcgPT4gJ2VtcHR5JywNCgkJJ3Zhcl91c2VkJyA9 PiAndXNlZCcsDQoJCSd2YXJfdmFsaWQnID0+ICdjdXJyZW50JywNCgkpOw0KCXJldHVybiBz dHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjQ6 ImhlbHAiO3M6MTc0MDQ6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoKCTxoMSBpZD0i dG9wIj5zbWRfdmFyczwvaDE+CgoJPHA+QSBzZW1pLXBlcm1hbmVudCBnZW5lcmljIHN0b3Jh Z2UgcGx1Z2luLjwvcD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVs PgoJCTxsaT5BY3RzIGxpa2UgYSB1c2VyLWNvbnRyb2xsYWJsZSBwcmVmcyB0YWJsZSBmb3Ig c3RvcmluZyBhcmJpdHJhcnkgbmFtZS12YWx1ZSBwYWlyczwvbGk+CgkJPGxpPk9wdGlvbmFs IGV4cGlyeSBmb3IgZWFjaCBwYWlyPC9saT4KCQk8bGk+U3RvcmUgYW5kIHJldHJpZXZlIGFu eXRoaW5nIHlvdSBsaWtlLCBmcm9tIGZpeGVkIHRleHQgdG8gY29tcGxldGUgPHNwYW4gY2xh c3M9ImNhcHMiPlNRTDwvc3Bhbj4gcXVlcnkgc3R1YnM8L2xpPgoJCTxsaT5WYXJpYWJsZXMg Y2FuIGJlIGNyZWF0ZWQgdmlhIGFuIGFkbWluLXNpZGUgbGlzdCBvciBvbi10aGUtZmx5IGR1 cmluZyBjbGllbnQtc2lkZSBwYWdlIGxvYWQ8L2xpPgoJCTxsaT5WYXJpYWJsZSBzdWJzdGl0 dXRpb24gc3VwcG9ydGVkIGF0IHBhZ2UgcnVuLXRpbWUgZm9yIGJvdGggJiM4MjE2O25hbWUm IzgyMTc7IGFuZCAmIzgyMTY7dmFsdWUmIzgyMTc7LiBTdG9yZSB2YXJpYWJsZXMgd2l0aCBw bGFjZWhvbGRlciBpbmZvcm1hdGlvbiBhbmQgcGx1ZyB0aGUgaW5mb3JtYXRpb24gaW4gd2hl biB0aGUgcGFnZSBsb2FkczwvbGk+CgkJPGxpPldoZW4gcmV0cmlldmluZyBpbmZvcm1hdGlv biwgcGxhY2Vob2xkZXJzIGFuZCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgcmVwbGFjZWQgd2l0 aCBhbnkgdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgZmlsZSwgbGluayBvciA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPi9zZXJ2ZXIgdmFyaWFibGU8L2xpPgoJCTxs aT5SdWRpbWVudGFyeSBzdGF0dXMgY29uZGl0aW9uYWxzICh0ZXN0IGlmIHZhcmlhYmxlIGV4 aXN0cywgaXMgdXNlZCBvciBoYXMgZXhwaXJlZCk8L2xpPgoJCTxsaT5Xb3JrcyB2ZXJ5IHdl bGwgd2l0aCBzbWRfaWY8L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImFwcHMiPlBvc3NpYmxlIGFw cGxpY2F0aW9uczwvaDI+CgoJPHVsPgoJCTxsaT5Gb3JtLWJhc2VkIHF1ZXJ5aW5nLiBTdXBw bHkgdXNlcnMgd2l0aCBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZm9ybSBv biBhIHBhZ2UuIFdoZW4gaXQgaXMgc3VibWl0dGVkLCByZXRyaWV2ZSB0aGUgdmFsdWVzIHRo ZXkgc3VwcGx5IGFuZCBwbHVnIHRoZW0gaW50byBhIHByZS1wcmVwYXJlZCA8c3BhbiBjbGFz cz0iY2FwcyI+U1FMPC9zcGFuPiBxdWVyeSB2YXJpYWJsZS4gVGhyb3cgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5TUUw8L3NwYW4+IGF0IHNtZF9xdWVyeSB0byBwZXJmb3JtIGFkdmFuY2Vk IHByb2R1Y3Qgc2VhcmNoZXMgZnJvbSBjdXN0b20gZmllbGQgZGF0YTwvbGk+CgkJPGxpPlN0 b3JlIHNpdGUgdmlzaXRvciBwcmVmZXJlbmNlcy4gVXNpbmcgbWVtX3NlbGZfcmVnaXN0ZXIs IHVzZXJzIGNhbiBjcmVhdGUgYWNjb3VudHMgZm9yIHRoZW1zZWx2ZXMgc28gdGhhdCBvbiAm IzgyMjA7YWRtaW4tbGlrZSYjODIyMTsgcGFnZXMgeW91IGNhbiBzdG9yZSBhbmQgcmV0cmll dmUgcGVyLXZpc2l0b3IgcHJlZnM8L2xpPgoJCTxsaT5UcmFjayBmb3JtIGRhdGEgYWNyb3Nz IG11bHRpcGxlIHBhZ2VzLCBsaWtlIGEgd2ViLWJhc2VkIHdpemFyZC4gQWZ0ZXIgZWFjaCBw YXJ0IG9mIHRoZSB3aXphcmQgaXMgc3VibWl0dGVkLCBzdG9yZSB0aGUgdmFsdWVzIGluIHRl bXBvcmFyeSBzbWRfdmFycy4gV2hlbiB0aGUgd2l6YXJkIGlzIGNvbXBsZXRlZCBhbmQgdGhl IHZpc2l0b3IgaGl0cyB0aGUgZmluYWwgc3VibWl0IGJ1dHRvbiwgcmV0cmlldmUgYWxsIHZh cmlhYmxlcyBzdG9yZWQgZHVyaW5nIHRoZSBzZXNzaW9uLCBkbyBzb21ldGhpbmcgd2l0aCB0 aGVtIGFuZCB0aGVuIGRlbGV0ZSB0aGVtPC9saT4KCQk8bGk+TWFueSwgbWFueSBtb3JlPC9s aT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT4uIEZv ciBvdGhlciBzb2Z0d2FyZSBieSBtZSwgb3IgdG8gbWFrZSBhIGRvbmF0aW9uLCBzZWUgdGhl IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4u PC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248 L2gyPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgPGEgaHJlZj0iaHR0cDovL3N0 ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9zbWRfbGliX3YwLjMzLnR4dCI+c21kX2xpYiB2MC4z MzwvYT4gdG8gYmUgaW5zdGFsbGVkIGFuZCBhY3RpdmF0ZWQuPC9wPgoKCTxwPkRvd25sb2Fk IHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9y Zy9wbHVnaW5zLzk4MC9zbWRfdmFycyI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxh IGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBh c3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFk bWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4u PC9wPgoKCTxwPkhvcCBvdmVyIHRvIHRoZSBBZG1pbiAtJmd0OyBFeHRlbnNpb25zIC0mZ3Q7 IFZhcmlhYmxlcyB0YWIgYW5kIGhpdCAmIzgyMTY7SW5zdGFsbCB0YWJsZSYjODIxNzssIHRo ZW4gYWRkIHZhcmlhYmxlcyB0byB5b3VyIGhlYXJ0JiM4MjE3O3MgY29udGVudC4gVmlzaXQg dGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBo cD9pZD0yNzMzNCI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9y dCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+ VG8gcmVtb3ZlIHRoZSBwbHVnaW4sIHNpbXBseSBoaXQgdGhlICYjODIxNjtSZW1vdmUgdGFi bGUmIzgyMTc7IGJ1dHRvbiBvbiB0aGUgVmFyaWFibGVzIHRhYiBhbmQgZmluYWxseSBkZWxl dGUgdGhlIHBsdWdpbiBmcm9tIHRoZSBBZG1pbi0mZ3Q7UGx1Z2lucyB0YWIuIElmIGl0IGlz IG5vIGxvbmdlciBpbiB1c2UgYnkgYW55IG90aGVyIHBsdWdpbnMgeW91IG1heSBhbHNvIGRl bGV0ZSBzbWRfbGliLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+VGhl IGFkbWluLXNpZGUgc2NyZWVuIHNpbXBseSBhbGxvd3MgeW91IHRvIGFkZCB2YXJpYWJsZSBu YW1lcyBhbmQgYXNzb2NpYXRlZCB2YWx1ZXMuIFlvdSBjYW4gcHV0IGFuIG9wdGlvbmFsIGV4 cGlyeSB0aW1lIGFnYWluc3QgZWFjaCB2YWx1ZSBpZiB5b3Ugd2lzaCBpbiB0aGUgZm9ybWF0 ICYjODIyMDs8c3BhbiBjbGFzcz0iY2FwcyI+WVlZWTwvc3Bhbj4tTU0tREQgSEg6TU46U1Mm IzgyMjE7LjwvcD4KCgk8cD5BbHRlcm5hdGl2ZWx5LCB1c2luZyBhIHNwZWNpYWwgc3ludGF4 IGJlZ2lubmluZyB3aXRoIGFuIEAgc2lnbiB5b3UgY2FuIHNwZWNpZnkgYW4gb2Zmc2V0IHNv bWUgdGltZSBpbiB0aGUgZnV0dXJlIGZyb20gdGhlIGN1cnJlbnQgdGltZS4gRm9yIGV4YW1w bGUgcHV0dGluZyAmIzgyMjA7QDF3JiM4MjIxOyBpbnRvIHRoZSBleHBpcnkgYm94IHdpbGwg c2V0IHRoZSB2YXJpYWJsZSB0byBleHBpcmUgaW4gMSB3ZWVrIGZyb20gdGhlIHRpbWUgeW91 IGhpdCB0aGUgQWRkIGJ1dHRvbi4gJiM4MjIwO0AyMG0mIzgyMjE7IHNldHMgdGhlIHZhcmlh YmxlIHRvIGV4cGlyZSBpbiAyMCBtaW51dGVzJiM4MjE3OyB0aW1lIGFuZCAmIzgyMjA7QDEw ZCYjODIyMTsgd2lsbCBleHBpcmUgdGhlIHZhcmlhYmxlIGFmdGVyIDEwIGRheXMuIFRoZSBv cHRpb25zIGFyZSB0aGUgaW5pdGlhbCBsZXR0ZXJzIGZyb206IDxjb2RlPnM8L2NvZGU+ZWNv bmQsIDxjb2RlPm08L2NvZGU+aW51dGUsIDxjb2RlPmg8L2NvZGU+b3VyLCA8Y29kZT5kPC9j b2RlPmF5LCA8Y29kZT53PC9jb2RlPmVlayBvciA8Y29kZT55PC9jb2RlPmVhci4gTm90ZSB0 aGF0IG1vbnRocyBhcmUgbm90IHN1cHBvcnRlZCBiZWNhdXNlIHRoZSBtYXRocyBpcyB0cmlj a3k6IHVzZSB3ZWVrcyBpbnN0ZWFkITwvcD4KCgk8cD5BbGwgdGhlIHVzdWFsIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+LXN0eWxlIGNvbnRyb2xzIGFyZSBhdmFpbGFibGUgb25j ZSBhIHZhcmlhYmxlIGhhcyBiZWVuIHN0b3JlZC4gWW91IGNhbiBoaXQgRWRpdCB0byBhbWVu ZCBhbnkgb2YgdGhlIGluZm8gYWJvdXQgYSB2YXJpYWJsZSBidXQgeW91IG1heSBub3QgaGF2 ZSBkdXBsaWNhdGUgbmFtZXMuIEhpdCB0aGUgJiM4MjE2O3gmIzgyMTc7IHRvIGRlbGV0ZSBh IHNpbmdsZSBlbnRyeSBvciB1c2UgdGhlIGNoZWNrYm94ZXMgYW5kIEFsbC9Ob25lL1Jhbmdl ICZhbXA7IERlbGV0ZSBjb250cm9scyBhdCB0aGUgYm90dG9tIGZvciBwZXJmb3JtaW5nIG1h c3MgY2hhbmdlcy48L3A+CgoJPHA+WW91IGNhbiBzb3J0IHRoZSBsaXN0cyBieSBjbGlja2lu ZyB0aGUgY29sdW1uIGhlYWRpbmdzIG9yIGZpbHRlciB0aGUgbGlzdCB1c2luZyB0aGUgc2Vh cmNoIGZvcm0gYXQgdGhlIHRvcC4gSXQmIzgyMTc7cyBmYWlybHkgc3RhbmRhcmQsIHRoZSBv bmx5IG9uZSB0aGF0IGhhcyBzcGVjaWFsIHN5bnRhYXggaXMgdGhlIEV4cGlyZWQgc2VhcmNo IG9wdGlvbi4gVmFsaWQgZW50cmllcyB0byBzZWFyY2ggZm9yIGFyZSA8Y29kZT55ZXM8L2Nv ZGU+LCA8Y29kZT5ubzwvY29kZT4sIDxjb2RlPi08L2NvZGU+ICh0byBzaG93IGVudHJpZXMg dGhhdCBoYXZlIG5vIGV4cGlyeSkgb3IgPGNvZGU+bm8tPC9jb2RlPiB0byBzaG93IGVudHJp ZXMgdGhhdCBoYXZlIGVpdGhlciBub3QgZXhwaXJlZCBvciBoYXZlIG5vdCBoYWQgYW4gZXhw aXJ5IHNldC48L3A+CgoJPHA+QXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBsaXN0IGlzIGEgYnV0 dG9uIGxhYmVsbGVkICYjODIxNjtQdXJnZSBleHBpcmVkJiM4MjE3Oy4gSGl0dGluZyB0aGF0 IGFuZCBjb25maXJtaW5nIHdpbGwgZGVsZXRlIGFsbCB2YXJpYWJsZXMgdGhhdCBhcmUgb3V0 IG9mIGRhdGUgKGkuZS4gZXhwaXJlZCA9IFllcykuPC9wPgoKCTxoMiBpZD0ic3VicyI+U3Vi c3RpdHV0aW9uczwvaDI+CgoJPHA+V2hlbiB5b3Ugc3RvcmUgdmFyaWFibGVzIHlvdSBjYW4g c3BlY2lmeSB0aGF0IGNlcnRhaW4gZGF0YSBpcyBub3Qga25vd24gYXQgc3RvcmFnZSB0aW1l IGJ1dCB3aWxsIGJlIHByb3ZpZGVkIGF0IHJ1biB0aW1lLiBJdCBjYW4gYmUgYW55IHRleHQg eW91IGxpa2UgYnV0IGZvciBjb252ZW5pZW5jZSBhbmQgZm9yIGVhc2Ugb2YgcmVwbGFjZW1l bnQsIGEgc3RhbmRhcmQgdGVjaG5pcXVlIGlzIHRvIHN1cnJvdW5kIHJlcGxhY2VtZW50IHZh cmlhYmxlcyB3aXRoIDxjb2RlPns8L2NvZGU+IGFuZCA8Y29kZT59PC9jb2RlPiBtYXJrcy4g U28gaWYgeW91IG1hZGUgYSB2YXJpYWJsZSBjYWxsZWQgJiM4MjIwO2hlbGxvJiM4MjIxOyBh bmQgeW91IG1hZGUgaXRzIHZhbHVlIDxjb2RlPkdyZWV0aW5ncyB7dXNlcn0sIEkgaG9wZSB5 b3UgYXJlIHdlbGw8L2NvZGU+IHlvdSBjb3VsZCBsYXRlciBpbmplY3QgdGhlIDxjb2RlPj9h dXRob3JpZDwvY29kZT4gdmFsdWUgaW50byB0aGlzIHZhcmlhYmxlIHRvIGN1c3RvbWlzZSB0 aGUgbWVzc2FnZS4gU2VlIDxhIGhyZWY9IiNnZXQiPnNtZF92YXJfZ2V0PC9hPi48L3A+CgoJ PHA+VGhpcyBpcyBieSBubyBtZWFucyB0aGUgb25seSB3YXkgb2Ygc3Vic3RpdHV0aW5nIHZh bHVlcyAmIzgyMTI7IHlvdSBjYW4gdXNlIHlvdXIgaW1hZ2luYXRpb24gJiM4MjEyOyBidXQg aXQgaXMgdGhlIGNvbnZlbnRpb24gdXNlZCBpbiB0aGUgaGVscCB0ZXh0LjwvcD4KCgk8cD5Z b3UgbWF5IGFsc28gZGlyZWN0bHkgcGxhY2UgPGNvZGU+PzwvY29kZT4gZmllbGRzIGludG8g dGhlIFZhbHVlIGZpZWxkIHJlYWR5IGZvciByZXBsYWNlbWVudCBmcm9tIHRoZSBjdXJyZW50 IGFydGljbGUgaW4gd2hpY2ggYW4gPGEgaHJlZj0iI2dldCI+c21kX3Zhcl9nZXQ8L2E+IGFw cGVhcnMuIFRoaXMgbWF5IHNhdmUgeW91IGhhdmluZyB0byBtYW51YWxseSBzcGVjaWZ5IGEg bG90IG9mIHZhbHVlcyB0byA8Y29kZT5pbmplY3Q8L2NvZGU+IGxhdGVyLiBXaGVuIHVzaW5n IHRoZSA8YSBocmVmPSIjcHV0Ij5zbWRfdmFyX3B1dDwvYT4gdGFnLCBzZWUgdGhlIDxjb2Rl PmdldF92YWxzX25vdzwvY29kZT4gYXR0cmlidXRlIGZvciBob3cgdG8gY29udHJvbCB3aGV0 aGVyIHZhcmlhYmxlIHJlcGxhY2VtZW50IGlzIGRvbmUgYXQgaW5zZXJ0IHRpbWUgb3Igbm90 LjwvcD4KCgk8aDIgaWQ9InRhZ3MiPlRhZ3M8L2gyPgoKCTxoMyBpZD0iZ2V0Ij5zbWRfdmFy X2dldDwvaDM+CgoJPHA+UmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgYW5kIG9w dGlvbmFsbHkgaW5qZWN0IHNvbWUgc3Vic3RpdHV0aW9uIGRhdGEgaW50byB0aGUgcmVzdWx0 LiBBdHRyaWJ1dGVzIGFyZTo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPm5hbWU8L3NwYW4+IDogdGhlIHZhcmlhYmxlIG5hbWUgdG8gcmV0cmlldmUuIENhbiBi ZSBmaXhlZCB0ZXh0IG9yIG1heSBpbmNsdWRlIGZpZWxkcyByZWFkIGZyb20gYW55d2hlcmUg aW4gdGhlIGN1cnJlbnQgYXJ0aWNsZSwgZmlsZSwgbGluayBvciA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPi4gRm9yIGV4YW1wbGUgPGNvZGU+bmFtZT0mcXVvdDtwcmVmJnF1b3Q7 PC9jb2RlPiB3aWxsIHJlY2FsbCB0aGF0IG5hbWVkIHZhcmlhYmxlLiA8Y29kZT5uYW1lPSZx dW90O3ByZWZfP2F1dGhvcmlkJnF1b3Q7PC9jb2RlPiB3aWxsIHJldHJpZXZlIGEgdmFyaWFi bGUgd2l0aCBhIG5hbWUgbWFkZSB1cCBvZiB0aGUgd29yZCAmIzgyMTY7cHJlZiYjODIxNzss IGFuIHVuZGVyc2NvcmUgYW5kIHRoZW4gdGhlIGF1dGhvciBvZiB0aGUgY3VycmVudCBhcnRp Y2xlLiBTaW1pbGFybHkgaWYgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHdh cyA8Y29kZT5odHRwOi8vc2l0ZS5jb20vaW5kZXgucGhwP21hcD15ZXMmYW1wO3pvbz1jaGVz dGVyPC9jb2RlPiB5b3UgY291bGQgdXNlIDxjb2RlPm5hbWU9JnF1b3Q7bG9jYXRpb25fP3pv byZxdW90OzwvY29kZT4gdG8gZ3JhYiB0aGUgdmFyaWFibGUgY2FsbGVkICYjODIyMDtsb2Nh dGlvbl9jaGVzdGVyJiM4MjIxOyB0aGF0IHBlcmhhcHMgZGlzcGxheWVkIHRoZSBsb2NhdGlv biBvZiBDaGVzdGVyIHpvby4gV2hlbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj4gY2hhbmdlcyAoaW4gcmVzcG9uc2UgdG8gc29tZSB1c2VyIGlucHV0KSwgdGhlIHJldHJp ZXZlZCB2YXJpYWJsZSBjaGFuZ2VzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1l Ij52YWxpZDwvc3Bhbj4gOiBieSBkZWZhdWx0LCBhbnkgdmFsdWUgdGhhdCBoYXMgZXhwaXJl ZCB3aWxsIDxlbT5ub3Q8L2VtPiBiZSByZXRyaWV2ZWQuIFNldCB0aGlzIGF0dHJpYnV0ZSB0 byA8Y29kZT4wPC9jb2RlPiB0byBhbGxvdyB2YWx1ZXMgdG8gYmUgcmV0cmlldmVkIHJlZ2Fy ZGxlc3Mgb2YgZXhwaXJ5LiBOb3RlIHRoYXQgYW55IHZhbHVlcyB3aXRob3V0IGFuIGV4cGly eSBzZXQgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHZhbGlkPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj5hbGxvd19zcGFjZXM8L3NwYW4+IDogd2hldGhlciB0byBhbGxvdyBz cGFjZXMgaW4gPGNvZGU+PzwvY29kZT4gZmllbGQgbmFtZXMuIERlZmF1bHQgaXMgMCAobm8p LiBVc2VmdWwgaWYgeW91ciBjdXN0b20gZmllbGQgbmFtZXMgaGF2ZSBzcGFjZXMgaW4gdGhl bSwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBjYW4gY2F1c2UgcHJvYmxlbXMgd2l0aCBtYXRj aGluZywgZS5nLiB0aGUgdmFsdWUgJiM4MjIwO1RoaXMgaXMgYSA/dGVzdCBmaWVsZCB3aXRo IHNwYWNlcywgb2suJiM4MjIxOyB3aWxsIGF0dGVtcHQgdG8gbG9vayBmb3IgYSBmaWVsZCBs YWJlbGxlZCAmIzgyMjA7dGVzdCBmaWVsZCB3aXRoIHNwYWNlcyYjODIyMTsuIFdpdGggPGNv ZGU+YWxsb3dfc3BhY2VzPSZxdW90OzAmcXVvdDs8L2NvZGU+IHNldCB0byAwIGl0IHdvdWxk IGp1c3QgZ3JhYiB0aGUgZmllbGQgbmFtZWQgJiM4MjIwO3Rlc3QmIzgyMjE7PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5pbmplY3Q8L3NwYW4+IDogYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiBzdWJzdGl0dXRpb25zIHRvIG1ha2UuIERlZmluZSB0aGVtIGxpa2Ug dGhpczogPGNvZGU+aW5qZWN0PSZxdW90O3t1c2VyfTpEYXZlLCB7bG9naW59OiBkYXZlcCZx dW90OzwvY29kZT4uIElmIHRoZSB0ZXh0IHt1c2VyfSBvciB7bG9naW59IGFwcGVhciBpbiB0 aGUgcmV0cmlldmVkIHZhcmlhYmxlJiM4MjE3O3MgdmFsdWUgdGhleSB3aWxsIGJlIHJlcGxh Y2VkIHdpdGggdGhlIHJlbGV2YW50IHdvcmRzLiBOb3RlIHRoYXQgdGhlIHJlcGxhY2VkIHdv cmRzIG1heSBjb250YWluIDxjb2RlPj88L2NvZGU+IGZpZWxkcyB0byByZWFkIGZyb20gdGhl IGN1cnJlbnQgYXJ0aWNsZSwgZmlsZSwgbGluayBvciA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiB2YXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmRlbGltPC9z cGFuPiA6IHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBkZWZpbml0aW9ucyBpbiB0aGUgPGNvZGU+ aW5qZWN0PC9jb2RlPiBhdHRyaWJ1dGUuIERlZmF1bHQgaXMgYSA8Y29kZT4sPC9jb2RlPiAo Y29tbWEpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5wYXJhbWRlbGltPC9z cGFuPiA6IHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBhIHN1YnN0aXR1dGlvbiB2YXJpYWJsZSBh bmQgaXRzIHJlcGxhY2VtZW50IHRleHQgaW4gdGhlIDxjb2RlPmluamVjdDwvY29kZT4gYXR0 cmlidXRlLiBEZWZhdWx0IGlzIGEgPGNvZGU+OjwvY29kZT4gKGNvbG9uKTwvbGk+Cgk8L3Vs PgoKCTxoMyBpZD0icHV0Ij5zbWRfdmFyX3B1dDwvaDM+CgoJPHA+U3RvcmUgdGhlIHZhbHVl IG9mIGEgbmFtZWQgdmFyaWFibGUsIG9wdGlvbmFsbHkgcmVwbGFjaW5nIHN0dWZmIGZyb20g dGhlIGN1cnJlbnQgYXJ0aWNsZSwgZmlsZSwgbGluayBvciA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPiB3aXRoIGl0cyBjb250ZW50ICh2aWEgdGhlIDxjb2RlPj9uYW1lX29mX2Zp ZWxkPC9jb2RlPiBub3RhdGlvbikuIFlvdSBtYXkgc3RvcmUgbW9yZSB0aGFuIG9uZSB2YXJp YWJsZSBhdCBvbmNlIGJ5IGxpc3RpbmcgdGhlbSBpbiB0aGUgPGNvZGU+bmFtZTwvY29kZT4g YW5kIDxjb2RlPnZhbHVlPC9jb2RlPiBhdHRyaWJ1dGVzIChub3RlIGluIHRoaXMgY2FzZSB0 aGV5IHdpbGwgYWxsIGhhdmUgdGhlIHNhbWUgPGNvZGU+ZXhwaXJ5PC9jb2RlPikuIEF0dHJp YnV0ZXMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+bmFt ZTwvc3Bhbj4gOiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzIHRvIHN0b3JlIHZh cmlhYmxlcyB1bmRlci4gRWFjaCBjYW4gYmUgYSBmeGVkIHN0cmluZyBvciBtYWRlIHVwIG9m IDxjb2RlPj88L2NvZGU+IGZpZWxkczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+dmFsdWU8L3NwYW4+IDogYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgdG8g Z2l2ZSB0aGUgdmFyaWFibGVzLiBBZ2FpbiwgY2FuIGJlIGEgZnhlZCBzdHJpbmcgb3IgbWFk ZSB1cCBvZiA8Y29kZT4/PC9jb2RlPiBmaWVsZHMgYW5kIGNhbiBpbmNsdWRlIHBsYWNlaG9s ZGVycyB0aGF0IG1heSBiZSB1c2VkIGZvciBsYXRlciBzdWJzdGl0dXRpb248L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmV4cGlyZXM8L3NwYW4+IDogdGhlIGV4cGlyeSBk YXRlIGluIHRoZSBmb3JtYXQgJiM4MjIwOzxzcGFuIGNsYXNzPSJjYXBzIj5ZWVlZPC9zcGFu Pi1NTS1ERCBISDpNTjpTUyYjODIyMTsgb3IgQCBub3RhdGlvbiB0byBzcGVjaWZ5IGEgZnV0 dXJlIG9mZnNldCBmcm9tIG5vdy4gT25seSBvbmUgZXhwaXJ5IHRpbWUgbWF5IGJlIHNldCBw ZXIgY2FsbCB0byA8Y29kZT5zbWRfdmFyX3B1dDwvY29kZT4sIHNvIGlmIHlvdSBpbnNlcnQg bW9yZSB0aGFuIG9uZSB2YXJpYWJsZSB0aGV5IHdpbGwgYWxsIGdldCB0aGUgc2FtZSBleHBp cnk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmdldF92YWxzX25vdzwvc3Bh bj4gOiBpZiBzZXQgdG8gMSAoaXRzIGRlZmF1bHQpIGFueSA8Y29kZT4/PC9jb2RlPiBhcnRp Y2xlIGZpZWxkcyB5b3Ugc3BlY2lmeSBpbiB0aGUgPGNvZGU+dmFsdWU8L2NvZGU+IHBhcmFt ZXRlciB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjb250ZW50 IDxlbT5iZWZvcmU8L2VtPiB0aGUgdmFyIGlzIGFkZGVkIHRvIHRoZSB0aGUgZGF0YWJhc2Uu IElmIHlvdSB3aXNoIHRvIHN0b3JlIHRoZSA8Y29kZT4/PC9jb2RlPiBmaWVsZHMgaW4gdGhl aXIgcmF3IGZvcm0gKGUuZy4gPGNvZGU+dmFsdWU9JnF1b3Q7VGhlIGtleXdvcmRzIGZvciB7 dXNlcn0gYXJlOiA/a2V5d29yZHMmcXVvdDs8L2NvZGU+KSB0aGVuIHNldCB0aGlzIHRvIDAu IE5vdGUgdGhhdCB0aGUgPGNvZGU+PzwvY29kZT4gZmllbGRzIGFyZSBhbHdheXMgcmVwbGFj ZWQgaW4gdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZTsgPGNvZGU+Z2V0X3ZhbHNf bm93PC9jb2RlPiBvbmx5IGFmZmVjdHMgdGhlIDxjb2RlPnZhbHVlPC9jb2RlPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+YWN0aW9uPC9zcGFuPiA6IG9uZSBvZiBmb3Vy IHZhbHVlcyB0aGF0IGRldGVybWluZSB3aGF0IHRvIGRvIHdpdGggdGhlIHZhcmlhYmxlJiM4 MjE3O3MgdmFsdWUuIEluIHRoZSBmaXJzdCB0aHJlZSBjYXNlcywgaWYgdGhlIHZhcmlhYmxl IDxjb2RlPm5hbWU8L2NvZGU+IGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQ6 Cgk8dWw+CgkJPGxpPjxjb2RlPnJlcGxhY2U8L2NvZGU+ICh0aGUgZGVmYXVsdCkgd2lsbCBj b21wbGV0ZWx5IHJlcGxhY2UgYW55IGV4aXN0aW5nIHZhcmlhYmxlIHdpdGggdGhlIG5ldyA8 Y29kZT52YWx1ZTwvY29kZT48L2xpPgoJCTxsaT48Y29kZT5hcHBlbmQ8L2NvZGU+IHdpbGwg YWRkIHRoZSBuZXcgdmFsdWUgb250byB0aGUgZW5kIG9mIGFueSBleGlzdGluZyB2YWx1ZSB3 aXRoIHRoYXQgbmFtZTwvbGk+CgkJPGxpPjxjb2RlPnByZXBlbmQ8L2NvZGU+IHdpbGwgc2lt aWxhcmx5IGFkZCB0aGUgbmV3IHZhbHVlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW55IGV4aXN0 aW5nIHZhbHVlLjwvbGk+CgkJPGxpPjxjb2RlPmRlbGV0ZTwvY29kZT4gd2lsbCByZW1vdmUg dGhlIHZhcmlhYmxlIGluc3RlYWQgb2Ygc3RvcmluZyBpdCAodGhpcyBzaW1wbHkgY2FsbHMg PGEgaHJlZj0iI2RlbCI+c21kX3Zhcl9kZWxldGU8L2E+KTwvbGk+Cgk8L3VsPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+YWxsb3dfc3BhY2VzPC9zcGFuPiA6IHdoZXRo ZXIgdG8gYWxsb3cgc3BhY2VzIGluIDxjb2RlPj88L2NvZGU+IGZpZWxkIG5hbWVzLiBEZWZh dWx0IGlzIDAgKG5vKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZGVsaW08 L3NwYW4+IDogdGhlIGRlbGltaXRlciB0byB1c2UgYmV0d2VlbiA8Y29kZT5uYW1lczwvY29k ZT4gYW5kIDxjb2RlPnZhbHVlczwvY29kZT4uIERlZmF1bHQgaXMgYSA8Y29kZT4sPC9jb2Rl PiAoY29tbWEpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5yZXR1cm48L3Nw YW4+IDogd2hhdCB0byBzaG93IG9uIHRoZSBzY3JlZW4gaWYgYW55dGhpbmcuIEJ5IGRlZmF1 bHQgdGhpcyBpcyBzZXQgdG8gPGNvZGU+c2lsZW50PC9jb2RlPiBzbyB5b3Ugd2lsbCBzZWUg bm8gb3V0cHV0IGJ1dCBzZXR0aW5nIGl0IHRvIDxjb2RlPjE8L2NvZGU+IHdpbGwgcmV0dXJu IGEgc3RhdHVzIGNvZGUuIFBvc3NpYmx5IHVzZWZ1bCB3aGVuIHRlc3RpbmcgdGhlIHJldHVy biB2YWx1ZSBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIHVzaW5nIGEgcGx1Z2luIGxpa2Ugc21k X2lmPC9saT4KCTwvdWw+CgoJPHA+Tm90ZXM6PC9wPgoKCTx1bD4KCQk8bGk+SWYgdGhlIDxj b2RlPm5hbWU8L2NvZGU+IGRvZXMgbm90IGFscmVhZHkgZXhpc3QgdGhlIHZhcmlhYmxlIHdp bGwgYmUgY3JlYXRlZDwvbGk+CgkJPGxpPklmIGl0IGFscmVhZHkgZXhpc3RzIHRoZSA8Y29k ZT52YWx1ZTwvY29kZT4gd2lsbCBiZSB1cGRhdGVkIGFuZCBlaXRoZXIgcmVwbGFjZWQsIGFw cGVuZGVkIG9yIHByZXBlbmRlZCB0byB0aGUgZXhpc3RpbmcgdmFyaWFibGUgZGVwZW5kaW5n IG9uIHRoZSA8Y29kZT5hY3Rpb248L2NvZGU+IHNwZWNpZmllZDwvbGk+CgkJPGxpPllvdSBt YXkgc3RvcmUgYSB2YXJpYWJsZSB3aXRoIGFuIGVtcHR5IHZhbHVlPC9saT4KCQk8bGk+SWYg bm8gZXhwaXJ5IGlzIHNwZWNpZmllZCwgdGhlIGV4cGlyeSByZW1haW5zIHRoZSBzYW1lPC9s aT4KCQk8bGk+SWYgYW4gZXhwaXJ5IChvciBhbiBvZmZzZXQgZXhwaXJ5IHVzaW5nIHRoZSBA IG5vdGF0aW9uKSBpcyBzcGVjaWZpZWQsIHRoZSBleHBpcnkgd2lsbCBiZSB1cGRhdGVkIGFz IHdlbGw8L2xpPgoJPC91bD4KCgk8aDMgaWQ9ImRlbCI+c21kX3Zhcl9kZWxldGU8L2gzPgoK CTxwPlJlbW92ZXMgYSB2YXJpYWJsZSBmcm9tIHRoZSB0YWJsZS4gQXR0cmlidXRlczo8L3A+ CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm5hbWU8L3NwYW4+IDogdGhl IG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIHJlbW92ZS4gQ2FuIHVzZSA8Y29kZT4/PC9jb2Rl PiBmaWVsZCBuYW1lcyB0byBtYWtlIHVwIHRoZSBuYW1lIGlmIHlvdSB3aXNoPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5hbGxvd19zcGFjZXM8L3NwYW4+IDogd2hldGhl ciB0byBhbGxvdyBzcGFjZXMgaW4gPGNvZGU+PzwvY29kZT4gZmllbGQgbmFtZXMuIERlZmF1 bHQgaXMgMCAobm8pPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJzdGF0Ij5zbWRfdmFyX3N0YXR1 czwvaDM+CgoJPHA+UXVlcmllcyB0aGUgc3RhdHVzIG9mIGEgdmFyaWFibGUgZm9yIHVwIHRv IHRocmVlIHR5cGVzIG9mIGluZm9ybWF0aW9uOjwvcD4KCgk8b2w+CgkJPGxpPmF2YWlsYWJs ZSA6IGRvZXMgdGhlIHZhcmlhYmxlIGV4aXN0IGF0IGFsbDwvbGk+CgkJPGxpPnVzZSA6IGRv ZXMgdGhlIHZhcmlhYmxlJiM4MjE3O3MgdmFsdWUgY29udGFpbiBzb21lIGRhdGEgKG9yIGlz IGl0IGVtcHR5KTwvbGk+CgkJPGxpPnZhbGlkIDogaXMgdGhlIHZhcmlhYmxlIGN1cnJlbnQg KGkuZSBub3QgZXhwaXJlZCk8L2xpPgoJPC9vbD4KCgk8cD5UaGUgb3V0cHV0IG9mIHRoaXMg dGFnIGlzIHVzZWZ1bCB0byBpbnNlcnQgaW50byBzbWRfaWYuPC9wPgoKCTxwPkF0dHJpYnV0 ZXM6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5uYW1lPC9zcGFu PiA6IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBxdWVyeS4gQ2FuIHVzZSA8Y29kZT4/ PC9jb2RlPiBmaWVsZCBuYW1lcyB0byBtYWtlIHVwIHRoZSBuYW1lIGlmIHlvdSB3aXNoPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5hbGxvd19zcGFjZXM8L3NwYW4+IDog d2hldGhlciB0byBhbGxvdyBzcGFjZXMgaW4gPGNvZGU+PzwvY29kZT4gZmllbGQgbmFtZXMu IERlZmF1bHQgaXMgMCAobm8pPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj50 eXBlPC9zcGFuPiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHR5cGVzIG9mIGluZm9ybWF0 aW9uIHlvdSB3aXNoIHRvIGtub3cuIERlZmF1bHQgaXMgPGNvZGU+dmFsaWQ8L2NvZGU+IGJ1 dCB5b3UgbWF5IHNwZWNpZnkgb25lIG9yIG1vcmUgb2Y6IDxjb2RlPnZhbGlkPC9jb2RlPiwg PGNvZGU+dXNlPC9jb2RlPiBvciA8Y29kZT5hdmFpbGFibGU8L2NvZGU+PC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5yZXR1cm48L3NwYW4+IDogd2hhdCB0byByZXR1cm4g ZnJvbSB0aGUgY2FsbC4gRGVmYXVsdCBpcyA8Y29kZT5udW1iZXI8L2NvZGU+IHdoaWNoIHdp bGwgcmV0dXJuIGEgPGNvZGU+MTwvY29kZT4gaWYgZWFjaCA8Y29kZT50eXBlPC9jb2RlPiBv ZiBpbmZvIGlzIGEgcG9zaXRpdmUgb3V0Y29tZSBvciA8Y29kZT4wPC9jb2RlPiBpZiBpdCBp cyBuZWdhdGl2ZS4gWW91IG1heSBhbHNvIHNwZWNpZnkgPGNvZGU+bmFtZTwvY29kZT4gd2hp Y2ggd291bGQgaW5zdGVhZCByZXR1cm4gbW9yZSBodW1hbi1mcmllbmRseSB0ZXJtcyB0aGF0 IHlvdSBtaWdodCBjaG9vc2UgdG8gZGlzcGxheSBvbiB5b3VyIHBhZ2U8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmRlbGltPC9zcGFuPiA6IHRoZSBkZWxpbWl0ZXIgdXNl ZCBiZXR3ZWVuIDxjb2RlPnR5cGU8L2NvZGU+cy4gRGVmYXVsdCBpcyBhIDxjb2RlPiw8L2Nv ZGU+IChjb21tYSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm91dGRlbGlt PC9zcGFuPiA6IHdoZW4gdXNpbmcgbW9yZSB0aGFuIG9uZSA8Y29kZT50eXBlPC9jb2RlPiB0 aGUgdmFsdWVzIGFyZSBjb25jYXRlbmF0ZWQgaW50byBhIHNpbmdsZSBzdHJpbmcsIGVhY2gg c2VwYXJhdGVkIGJ5IHRoaXMgZGVsaW1pdGVyLiBEZWZhdWx0IGlzIGEgPGNvZGU+fDwvY29k ZT4gKHBpcGUpPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJpZnN0YXQiPnNtZF92YXJfaWZfc3Rh dHVzPC9oMz4KCgk8cD5Db252ZW5pZW5jZSB0YWcgdGhhdCBldmFsdWF0ZXMgYSBzaW5nbGUg c3RhdHVzIHR5cGUgYW5kIHRha2VzIGFjdGlvbiBpZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZl LiBTdXBwb3J0cyA8Y29kZT4mbHQ7dHhwOmVsc2UgLyZndDs8L2NvZGU+LiBBdHRyaWJ1dGVz OjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+bmFtZTwvc3Bhbj4g OiB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gcXVlcnkuIENhbiB1c2UgPGNvZGU+Pzwv Y29kZT4gZmllbGQgbmFtZXMgdG8gbWFrZSB1cCB0aGUgbmFtZSBpZiB5b3Ugd2lzaDwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+dHlwZTwvc3Bhbj4gOiBvbmUgb2YgdGhl IHRocmVlIHR5cGVzIG9mIGluZm8geW91IHdpc2ggdG8gY2hlY2ssIG5hbWVseTogPGNvZGU+ dmFsaWQ8L2NvZGU+ICh0aGUgZGVmYXVsdCksIDxjb2RlPnVzZTwvY29kZT4gb3IgPGNvZGU+ YXZhaWxhYmxlPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0iaWZzIj5zbWRfdmFyX2lm X3ZhbGlkIC8gc21kX3Zhcl9pZl91c2VkIC8gc21kX3Zhcl9pZl9hdmFpbGFibGU8L2gzPgoK CTxwPlRocmVlIGZ1cnRoZXIgY29udmVuaWVuY2UgdGFncyB0byBzaW1wbHkgdGVzdCBmb3Ig YSBzcGVjaWZpYyBzdGF0dXMuIFRoZXkgYWxsIHN1cHBvcnQgPGNvZGU+Jmx0O3R4cDplbHNl IC8mZ3Q7PC9jb2RlPiBhbmQgdGFrZSBhIHNpbmdsZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRy aWJ1dGUuPC9wPgoKCTxoMiBpZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8cD5Db21p bmcgc29vbiYjODIzMDs8L3A+CgoJPGgyIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+ CgoJPHVsPgoJCTxsaT4wNyBKdW4gMDggfCAwLjEgfCBJbml0aWFsIHB1YmxpYyBiZXRhIHJl bGVhc2U8L2xpPgoJCTxsaT4wOCBKdW4gMDggfCAwLjExIHwgQWRkZWQgPGNvZGU+YWN0aW9u PC9jb2RlPiwgPGNvZGU+Z2V0X3ZhbHNfbm93PC9jb2RlPiBhbmQgPGNvZGU+ZGVsaW08L2Nv ZGU+IHRvIHNtZF92YXJfcHV0IDsgcmVtb3ZlZCA8Y29kZT5kZWxldGU8L2NvZGU+IDsgbXVs dGlwbGUgdmFycyBjYW4gbm93IGJlIHB1dCBhdCBvbmNlIHdpdGggdGhlIHNhbWUgZXhwaXJ5 PC9saT4KCTwvdWw+CgoJPHA+PC9kaXY+PC9wPgo8IS0tIC0tLSBCRUdJTiBQTFVHSU4gQ1NT IC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWln aHQ6MS40NSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEw NSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQt Y29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5v cm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4 YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7 IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVl OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVl OyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3ZlciwgI3NtZF9oZWxwIGE6 YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJv dHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBo MSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdp bjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0 b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZv bnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBjb2xvcjog IzY5MzsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2lu ZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRl eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDEx cHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBw eCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdHQtbmFt ZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDoj ZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6 OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxw IHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVt IDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVs cCBsaSB7IG1hcmdpbi1sZWZ0OjM1cHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10 b3A6NXB4OyB9CiNzbWRfaGVscCAucmVxdWlyZWQgeyBjb2xvcjpyZWQ7IH0KPC9zdHlsZT4K PCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJlZTFh ZmZkMTE5YTQwMTYxOTZjNWI0ZTFjOTJlYTExMSI7fQ==