# Name: smd_featured v0.20 # Type: Admin/Client side plugin # Quickly label and display featured articles for your site's home / landing pages # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEyOiJzbWRfZmVhdHVyZWQiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjAiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjgwOiJRdWlja2x5IGxhYmVsIGFuZCBkaXNwbGF5IGZlYXR1cmVkIGFydGljbGVzIGZvciB5 b3VyIHNpdGUncyBob21lIC8gbGFuZGluZyBwYWdlcyI7czo0OiJjb2RlIjtzOjI3MDEwOiJp ZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRzbWRfZmVhdHVyZWRf ZXZlbnQ7DQoNCgkkc21kX2ZlYXR1cmVkX2V2ZW50ID0gJ3NtZF9mZWF0dXJlZCc7DQoJJHNt ZF9mZWF0dXJlZF9wcml2cyA9IGdldF9wcmVmKCdzbWRfZmVhdHVyZWRfcHJpdnMnLCAnMSwy Jyk7DQoJJHNtZF9mZWF0dXJlZF9wcmVmX3ByaXZzID0gJzEsMic7DQoNCglhZGRfcHJpdnMo JHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9wcml2cyk7DQoJcmVnaXN0ZXJf dGFiKCJjb250ZW50IiwgJHNtZF9mZWF0dXJlZF9ldmVudCwgc21kX2ZlYXR1cmVkX2dUeHQo J3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfZmVhdHVyZWRfbWFuYWdl JywgJHNtZF9mZWF0dXJlZF9ldmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9mZWF0 dXJlZF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuc21kX2ZlYXR1cmVkJyk7DQp9DQoN CmlmICghZGVmaW5lZCgnU01EX0ZFQVQnKSkgew0KCWRlZmluZSgiU01EX0ZFQVQiLCAnc21k X2ZlYXR1cmVkJyk7DQp9DQoNCi8vICoqKioqKioqKioNCi8vIEFETUlOIFNJREUNCi8vICoq KioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2Zl YXR1cmVkX21hbmFnZSgkZXZ0LCAkc3RwKSB7DQoJaWYgKCRzdHAgPT0gJ3NhdmVfcGFuZV9z dGF0ZScpIHsNCgkJc21kX2ZlYXR1cmVkX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCX0gZWxzZSB7 DQoJCWlmKCEkc3RwIG9yICFpbl9hcnJheSgkc3RwLCBhcnJheSgNCgkJCQknc21kX2ZlYXR1 cmVkX3RhYmxlX2luc3RhbGwnLA0KCQkJCSdzbWRfZmVhdHVyZWRfdGFibGVfcmVtb3ZlJywN CgkJCQknc21kX2ZlYXR1cmVkX3ByZWZzYXZlJywNCgkJCQknc21kX2ZlYXR1cmVkX3NhdmUn LA0KCQkJCSdzbWRfZmVhdHVyZWRfdGFnaXQnLA0KCQkJCSdzbWRfZmVhdHVyZWRfY2hhbmdl X3BhZ2VieScsDQoJCQkpKSkgew0KCQkJc21kX2ZlYXR1cmVkX2xpc3QoJycpOw0KCQl9IGVs c2UgJHN0cCgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBzbWRfZmVhdHVyZWRfd2VsY29tZSgkZXZ0LCAkc3RwKSB7DQoJJG1zZyA9ICcnOw0K CXN3aXRjaCAoJHN0cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJc21kX2ZlYXR1cmVk X3RhYmxlX2luc3RhbGwoMCk7DQoJCQkkbXNnID0gJ1RoYW5rcyBmb3IgaW5zdGFsbGluZyBz bWRfZmVhdHVyZWQuIFBsZWFzZSByZWFkIHRoZSBkb2NzIDotKSc7DQoJCQlicmVhazsNCgkJ Y2FzZSAnZGVsZXRlZCc6DQoJCQlzbWRfZmVhdHVyZWRfdGFibGVfcmVtb3ZlKDApOw0KCQkJ YnJlYWs7DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9saXN0KCRtc2c9JycpIHsNCglnbG9iYWwg JHNtZF9mZWF0dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9saXN0X3BhZ2VieTsNCg0KCXBh Z2V0b3Aoc21kX2ZlYXR1cmVkX2dUeHQoJ3RhYl9uYW1lJyksICRtc2cpOw0KCWV4dHJhY3Qo Z3BzYShhcnJheSgnc21kX2ZlYXRfaWQnLCAnc21kX2ZlYXRfbGFiZWwnLCAnc21kX2ZlYXRf c2VhcmNoa2VlcCcsICdzbWRfZmVhdF9maWx0a2VlcCcsICdwYWdlJykpKTsNCg0KCWlmIChz bWRfZmVhdHVyZWRfdGFibGVfZXhpc3QoKSkgew0KCQkkZmVhdGxpc3QgPSBzYWZlX3Jvd3Mo JyonLCBTTURfRkVBVCwgJzE9MScpOw0KCQkkZmVhdGxpc3QgPSBlbXB0eSgkZmVhdGxpc3Qp ID8gYXJyYXkoKSA6ICRmZWF0bGlzdDsNCgkJJGVkaXRuYW1lID0gJGZlYXRfbGFiZWwgPSAk ZmVhdF9kZXNjID0gJyc7DQoNCgkJJGV0eXBlcyA9ICRmdHlwZXMgPSAkZmxpc3QgPSBhcnJh eSgpOw0KCQkkZXR5cGVzWycnXSA9IHNtZF9mZWF0dXJlZF9nVHh0KCd1bmxhYmVsbGVkJyk7 DQoJCSRmdHlwZXNbJ3NtZF91bmxhYmVsbGVkJ10gPSBzbWRfZmVhdHVyZWRfZ1R4dCgndW5s YWJlbGxlZCcpOw0KCQlmb3JlYWNoICgkZmVhdGxpc3QgYXMgJGl0ZW0pIHsNCgkJCWlmIChp c3NldCgkaXRlbVsnbGFiZWwnXSkgJiYgIWVtcHR5KCRpdGVtWydsYWJlbCddKSkgew0KCQkJ CSRmdHlwZXNbJGl0ZW1bJ2xhYmVsJ11dID0gJGV0eXBlc1skaXRlbVsnbGFiZWwnXV0gPSAk aXRlbVsnbGFiZWwnXTsNCgkJCX0NCgkJCSRmbGlzdFskaXRlbVsnZmVhdF9pZCddXSA9IGFy cmF5KCdsYWJlbCcgPT4gJGl0ZW1bJ2xhYmVsJ10sICdkZXNjcmlwdGlvbicgPT4gJGl0ZW1b J2Rlc2NyaXB0aW9uJ10sICdkZXNjX2h0bWwnID0+ICRpdGVtWydkZXNjX2h0bWwnXSk7DQoJ CX0NCg0KCQkkZmVhdGxpc3QgPSAkZmxpc3Q7DQoNCgkJLy8gR2V0IGFkZGl0aW9uYWwgZmls dGVyaW5nIGZyb20gaGlkZGVuIHByZWZzDQoJCSR3aGVyZSA9IGFycmF5KCcxPTEnKTsNCgkJ JHNlY2xpc3QgPSBnZXRfcHJlZignc21kX2ZlYXR1cmVkX3NlY3Rpb25fbGlzdCcsICcnKTsN CgkJaWYgKCRzZWNsaXN0KSB7DQoJCQkkd2hlcmVbXSA9ICJTZWN0aW9uIElOICgnIi5qb2lu KCInLCciLCBkb19saXN0KCRzZWNsaXN0KSkuIicpIjsNCgkJfQ0KCQkkd2hlcmVbXSA9ICJT dGF0dXMgSU4gKDQsNSkiOw0KDQoJCSRvcmRlcmJ5ID0gZ2V0X3ByZWYoJ3NtZF9mZWF0dXJl ZF9zb3J0JywgJ1Bvc3RlZCBkZXNjJywgMSk7DQoJCSRvcmRlcnFyeSA9ICgkb3JkZXJieSkg PyAnIE9SREVSIEJZICcuZG9TbGFzaCgkb3JkZXJieSkgOiAnJzsNCgkJJGN1cnJPcmRlciA9 IGV4cGxvZGUoJyAnLCAkb3JkZXJieSk7DQoJCSRjdXJyT3JkZXJbMF0gPSAoaXNzZXQoJGN1 cnJPcmRlclswXSkpID8gJGN1cnJPcmRlclswXSA6ICdQb3N0ZWQnOw0KCQkkY3Vyck9yZGVy WzFdID0gKGlzc2V0KCRjdXJyT3JkZXJbMV0pKSA/ICRjdXJyT3JkZXJbMV0gOiAnZGVzYyc7 DQoJCSRkaXNwbGF5ID0gZ2V0X3ByZWYoJ3NtZF9mZWF0dXJlZF9kaXNwbGF5JywgJ2FsbCcs IDEpOw0KDQoJCS8vIEdlbmVyYXRlIHRoZSBleHRyYSBjcml0ZXJpYSBpZiBpbiBsaXN0IHZp ZXcNCgkJaWYgKCRkaXNwbGF5PT0ncGFnaW5hdGVkJykgew0KCQkJaWYgKCRzbWRfZmVhdF9z ZWFyY2hrZWVwKSB7DQoJCQkJJGl0ZW1zID0gZG9fbGlzdCgkc21kX2ZlYXRfc2VhcmNoa2Vl cCwgJyAnKTsNCgkJCQkkaXRsaXN0ID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoICgkaXRlbXMg YXMgJGl0ZW0pIHsNCgkJCQkJaWYgKHRyaW0oJGl0ZW0pICE9ICcnKSB7DQoJCQkJCQkkaXRs aXN0W10gPSAiVGl0bGUgbGlrZSAnJSRpdGVtJSciOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR3 aGVyZVtdID0gJygnLmpvaW4oJyBPUiAnLCAkaXRsaXN0KS4nKSc7DQoJCQl9DQoJCQlpZiAo JHNtZF9mZWF0X2ZpbHRrZWVwKSB7DQoJCQkJJGxibCA9ICgkc21kX2ZlYXRfZmlsdGtlZXAg PT0gJ3NtZF91bmxhYmVsbGVkJykgPyAnJyA6ICRzbWRfZmVhdF9maWx0a2VlcDsNCgkJCQkk aWRzID0gc2FmZV9jb2x1bW4oJ2ZlYXRfaWQnLCBTTURfRkVBVCwgIkJJTkFSWSBsYWJlbCA9 ICckbGJsJyIpOw0KCQkJCSR3aGVyZVtdID0gIklEIElOICgnIi5qb2luKCInLCciLCAkaWRz KS4iJykiOw0KCQkJfQ0KCQl9DQoNCgkJJHdoZXJlID0gam9pbignIEFORCAnLCAkd2hlcmUp Ow0KCQkkdG90YWwgPSBzYWZlX2NvdW50KCd0ZXh0cGF0dGVybicsICR3aGVyZSk7DQoJCSRk b19wYWcgPSAhJHNtZF9mZWF0X2ZpbHRrZWVwICYmICEkc21kX2ZlYXRfc2VhcmNoa2VlcDsN Cg0KCQkkbGltaXQgPSAoJGRpc3BsYXk9PSdwYWdpbmF0ZWQnICYmICRkb19wYWcpID8gbWF4 KCRzbWRfZmVhdHVyZWRfbGlzdF9wYWdlYnksIDE1KSA6IDk5OTk5Ow0KCQlsaXN0KCRwYWdl LCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsN Cg0KCQkkcnMgPSBzYWZlX3Jvd3MoJyonLCAndGV4dHBhdHRlcm4nLCAkd2hlcmUuICRvcmRl cnFyeSAuICIgbGltaXQgJG9mZnNldCwgJGxpbWl0Iik7DQoJCSRvdXQgPSBhcnJheSgpOw0K CQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJJGZ0eXBlID0gaXNzZXQoJGZlYXRsaXN0 WyRyb3dbJ0lEJ11dWydsYWJlbCddKSA/ICRmZWF0bGlzdFskcm93WydJRCddXVsnbGFiZWwn XSA6ICcnOw0KCQkJJG91dFtdID0gYXJyYXkoJHJvd1snSUQnXSwgJHJvd1snVGl0bGUnXSwg JGZ0eXBlKTsNCgkJCWlmICgkc21kX2ZlYXRfaWQgJiYgJHJvd1snSUQnXSA9PSAkc21kX2Zl YXRfaWQpIHsNCgkJCQkkZWRpdG5hbWUgPSAkcm93WydUaXRsZSddOw0KCQkJCSRmZWF0X2xh YmVsID0gJGZlYXRsaXN0WyRzbWRfZmVhdF9pZF1bJ2xhYmVsJ107DQoJCQkJJGZlYXRfZGVz YyA9IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsICRmZWF0bGlzdFskc21kX2Zl YXRfaWRdWydkZXNjcmlwdGlvbiddKSk7DQoJCQl9DQoJCX0NCg0KCQkkc29ydG9wdHMgPSBh cnJheSgNCgkJCSdQb3N0ZWQnID0+ICdQb3N0ZWQnLA0KCQkJJ0V4cGlyZXMnID0+ICdFeHBp cnknLA0KCQkJJ0xhc3RNb2QnID0+ICdNb2RpZmllZCcsDQoJCQknVGl0bGUnID0+ICdUaXRs ZScsDQoJCQknU2VjdGlvbicgPT4gJ1NlY3Rpb24nLA0KCQkJJ0NhdGVnb3J5MScgPT4gJ0Nh dGVnb3J5MScsDQoJCQknQ2F0ZWdvcnkyJyA9PiAnQ2F0ZWdvcnkyJywNCgkJKTsNCgkJJHNv cnRkaXJzID0gYXJyYXkoDQoJCQknYXNjJyA9PiAnQXNjZW5kaW5nJywNCgkJCSdkZXNjJyA9 PiAnRGVzY2VuZGluZycsDQoJCSk7DQoJCSRkaXNwbGF5b3B0cyA9IGFycmF5KA0KCQkJJ2Fs bCcgPT4gJ0FsbCcsDQoJCQkncGFnaW5hdGVkJyA9PiAnUGFnaW5hdGVkJywNCgkJKTsNCgkJ JHNpemVzID0gZG9fbGlzdChnZXRfcHJlZignc21kX2ZlYXR1cmVkX2JveF9zaXplJywgJzE1 MHg0MCcsIDEpLCAneCcpOw0KCQkkc2l6ZXNbMF0gPSAoaXNzZXQoJHNpemVzWzBdKSAmJiBp c19udW1lcmljKCRzaXplc1swXSkpID8gJHNpemVzWzBdIDogJzE1MCc7DQoJCSRzaXplc1sx XSA9IChpc3NldCgkc2l6ZXNbMV0pICYmIGlzX251bWVyaWMoJHNpemVzWzFdKSkgPyAkc2l6 ZXNbMV0gOiAnNDAnOw0KCQkkZGlzcGxheV9qcyA9ICgkZGlzcGxheT09J2FsbCcpID8gMSA6 IDA7DQoNCgkJZWNobyAnPGRpdiBpZD0ic21kX2xvYWRpbmciIHN0eWxlPSJjb2xvcjojOTYz OyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjIwMCU7IGZvbnQtc3R5bGU6aXRhbGlj OyB3aWR0aDo1MDBweDsgaGVpZ2h0OjEwMHB4OyBtYXJnaW46MCBhdXRvOyBib3JkZXI6MXB4 IHNvbGlkICM3Nzc7IGJhY2tncm91bmQ6I2ZmYztkaXNwbGF5OmJsb2NrIj48ZGl2IHN0eWxl PSJtYXJnaW4tdG9wOjMwcHg7Ij5Mb2FkaW5nLi4uPC9kaXY+PC9kaXY+JzsNCgkJZWNobyAn PGRpdiBpZD0ic21kX2NvbnRhaW5lciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPic7DQoJCWVj aG8gJzxmaWVsZHNldCBpZD0ic21kX2ZlYXR1cmVkX2NvbnRyb2xfcGFuZWwiIGNsYXNzPSJ0 eHAtY29udHJvbC1wYW5lbCI+PGxlZ2VuZCBjbGFzcz0icGxhaW4gbGV2ZXInLihnZXRfcHJl ZigncGFuZV9zbWRfZmVhdHVyZWRfY3BhbmVsX3Zpc2libGUnKSA/ICcgZXhwYW5kZWQnIDog JycpLiciPjxhIGhyZWY9IiNzbWRfZmVhdHVyZWRfY3BhbmVsIj4nLnNtZF9mZWF0dXJlZF9n VHh0KCdjb250cm9sX3BhbmVsJykuJzwvYT48L2xlZ2VuZD4nOw0KCQllY2hvICc8ZGl2IGlk PSJzbWRfZmVhdHVyZWRfY3BhbmVsIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0iZGlzcGxheTon LihnZXRfcHJlZigncGFuZV9zbWRfZmVhdHVyZWRfY3BhbmVsX3Zpc2libGUnKSA/ICdibG9j aycgOiAnbm9uZScpLiciPic7DQoNCgkJZWNobyAnPGZvcm0gaWQ9InNtZF9mZWF0X2ZpbHRm b3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0ic21kX2Zl YXR1cmVkX2VkaXRrZWVwKDApO3JldHVybiBmYWxzZTsiPic7DQoJCWVjaG8gJzxmaWVsZHNl dCBpZD0ic21kX2ZlYXR1cmVkX2ZpbHQiIGNsYXNzPSJzbWRfZmVhdHVyZWRfc3VicGFuZWwi PjxsZWdlbmQ+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgoKCRkaXNwbGF5PT0nYWxsJykgPyAnc2Vh cmNoX2xpdmUnIDogJ3NlYXJjaF9zdGFuZGFyZCcpKS4nPC9sZWdlbmQ+JzsNCgkJZWNobyAn PGxhYmVsIGZvcj0ic21kX2ZlYXRfc2VhcmNoIj4nLnNtZF9mZWF0dXJlZF9nVHh0KCdieV9u YW1lJykuJzwvbGFiZWw+Jy5mSW5wdXQoJ3RleHQnLCAnc21kX2ZlYXRfc2VhcmNoJywgJHNt ZF9mZWF0X3NlYXJjaGtlZXAsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF9mZWF0X3NlYXJj aCcpLg0KCQkJKCgkZnR5cGVzKSA/ICc8ZGl2IGlkPSJzbWRfZmVhdHVyZWRfYnlsYWJlbCI+ Jy5zbWRfZmVhdHVyZWRfZ1R4dCgnYnlfbGFiZWwnKS5zZWxlY3RJbnB1dCgnc21kX2ZlYXRf ZmlsdCcsICRmdHlwZXMsICRzbWRfZmVhdF9maWx0a2VlcCwgMSwgJycsICdzbWRfZmVhdF9m aWx0JykuJzwvZGl2PicgOiAnJyk7DQoJCWVjaG8gKCRkaXNwbGF5PT0ncGFnaW5hdGVkJykg PyBmSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdnbycpLCAnc21hbGxlcmJveCBzbWRfZmVh dHVyZWRfc2F2ZScsICcnLCAncmV0dXJuIHNtZF9mZWF0dXJlZF9lZGl0a2VlcCgwKTsnKSA6 ICcnOw0KCQllY2hvIGVJbnB1dCgkc21kX2ZlYXR1cmVkX2V2ZW50KS5zSW5wdXQoJ3NtZF9m ZWF0dXJlZF9saXN0Jyk7DQoJCWVjaG8gJzwvZmllbGRzZXQ+JzsNCgkJZWNobyAnPC9mb3Jt Pic7DQoNCgkJZWNobyAnPGZvcm0gaWQ9InNtZF9mZWF0X3ByZWZzIiBhY3Rpb249ImluZGV4 LnBocCIgbWV0aG9kPSJwb3N0Ij4nOw0KCQllY2hvICc8ZmllbGRzZXQgaWQ9InNtZF9mZWF0 dXJlZF9wcmVmcyIgY2xhc3M9InNtZF9mZWF0dXJlZF9zdWJwYW5lbCI+PGxlZ2VuZD4nLnNt ZF9mZWF0dXJlZF9nVHh0KCdwcmVmcycpLic8L2xlZ2VuZD4nOw0KDQoJCWVjaG8gJzxkaXYg Y2xhc3M9InNtZF9mZWF0dXJlZF9wcmVmIj4nOw0KCQllY2hvICc8bGFiZWwgZm9yPSJzbWRf ZmVhdF9kaXNwbGF5Ij4nLnNtZF9mZWF0dXJlZF9nVHh0KCdwcmVmX2Rpc3BsYXknKS4nPC9s YWJlbD4nLnNlbGVjdElucHV0KCdzbWRfZmVhdF9kaXNwbGF5JywgJGRpc3BsYXlvcHRzLCAk ZGlzcGxheSwgJycsICcnLCAnc21kX2ZlYXRfZGlzcGxheScpOw0KCQllY2hvICc8L2Rpdj4n Ow0KDQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0dXJlZF9wcmVmIj4nOw0KCQllY2hv ICc8bGFiZWwgZm9yPSJzbWRfZmVhdF9zb3J0Ij4nLnNtZF9mZWF0dXJlZF9nVHh0KCdwcmVm X3NvcnQnKS4nPC9sYWJlbD4nLnNlbGVjdElucHV0KCdzbWRfZmVhdF9zb3J0JywgJHNvcnRv cHRzLCAkY3Vyck9yZGVyWzBdLCAnJywgJycsICdzbWRfZmVhdF9zb3J0JykuDQoJCQlzZWxl Y3RJbnB1dCgnc21kX2ZlYXRfc29ydGRpcicsICRzb3J0ZGlycywgJGN1cnJPcmRlclsxXSwg JycsICcnLCAnc21kX2ZlYXRfc29ydGRpcicpOw0KCQllY2hvICc8L2Rpdj4nOw0KDQoJCWVj aG8gJzxkaXYgY2xhc3M9InNtZF9mZWF0dXJlZF9wcmVmIj4nOw0KCQllY2hvICc8ZGl2IGlk PSJzbWRfZmVhdF9kaXNwbGF5X2JveCI+JzsNCgkJZWNobyAnPGxhYmVsIGZvcj0ic21kX2Zl YXRfYm94c2l6ZSI+Jy5zbWRfZmVhdHVyZWRfZ1R4dCgncHJlZl9ib3hzaXplJykuJzwvbGFi ZWw+Jy5mSW5wdXQoJ3RleHQnLCAnc21kX2ZlYXRfYm94X3gnLCAkc2l6ZXNbMF0sICcnLCAn JywgJycsICczJywgJycsICdzbWRfZmVhdF9ib3hzaXplJykuDQoJCQlzbWRfZmVhdHVyZWRf Z1R4dCgncHJlZl9ib3hzaXplYnknKS5mSW5wdXQoJ3RleHQnLCAnc21kX2ZlYXRfYm94X3kn LCAkc2l6ZXNbMV0sICcnLCAnJywgJycsICczJyk7DQoJCWVjaG8gJzwvZGl2Pic7DQoJCWVj aG8gJzwvZGl2Pic7DQoNCgkJZWNobyBlSW5wdXQoJHNtZF9mZWF0dXJlZF9ldmVudCkuc0lu cHV0KCdzbWRfZmVhdHVyZWRfcHJlZnNhdmUnKTsNCgkJZWNobyBmSW5wdXQoJ3N1Ym1pdCcs ICcnLCBnVHh0KCdzYXZlJyksICdzbWFsbGVyYm94IHNtZF9mZWF0dXJlZF9zYXZlJyk7DQoJ CWVjaG8gJzwvZmllbGRzZXQ+JzsNCgkJZWNobyAnPC9mb3JtPic7DQoNCgkJZWNobyAnJm5i c3A7JzsgLy8gV2l0aG91dCB0aGlzICdjb250ZW50JyBqUXVlcnkgMS4zLjIgd29uJ3QgLnRv Z2dsZSgpIGFuIGVsZW1lbnQgd2l0aCBlbnRpcmVseSBmbG9hdGVkIGlubmVyIGVsZW1lbnRz IDotcw0KCQllY2hvICc8L2Rpdj4nOw0KCQllY2hvICc8L2ZpZWxkc2V0Pic7DQoNCgkJZWNo byAnPGZvcm0gaWQ9InNtZF9mZWF0X2VkaXRmb3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0 aG9kPSJwb3N0Ij4nOw0KCQllY2hvIGhJbnB1dCgnc21kX2ZlYXRfc2VhcmNoa2VlcCcsICcn KS4NCgkJCQloSW5wdXQoJ3NtZF9mZWF0X2ZpbHRrZWVwJywgJycpLg0KCQkJCWhJbnB1dCgn c21kX2ZlYXRfaWQnLCAnJykuDQoJCQkJZUlucHV0KCRzbWRfZmVhdHVyZWRfZXZlbnQpLg0K CQkJCXNJbnB1dCgnc21kX2ZlYXR1cmVkX2xpc3QnKTsNCgkJZWNobyAnPC9mb3JtPic7DQoN CgkJZWNobyAnPGZvcm0gaWQ9InNtZF9mZWF0X3NhdmVmb3JtIiBhY3Rpb249ImluZGV4LnBo cCIgbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0icmV0dXJuIHNtZF9mZWF0dXJlZF9zYXZla2Vl cCgpOyI+JzsNCgkJZWNobyBzdGFydFRhYmxlKCdjb250cm9sJywnJywnJywnMycpOw0KCQlp ZiAoJHNtZF9mZWF0X2lkKSB7DQoJCQllY2hvIHRyKA0KCQkJCXRkKCcmbmJzcDsnKS50ZGNz KGdUeHQoJ2VkaXQnKS5zcC5zdHJvbmcoJGVkaXRuYW1lKSwgMikNCgkJCSk7DQoJCQllY2hv IHRyKA0KCQkJCWZMYWJlbENlbGwoZ1R4dCgnbGFiZWwnKSwgJycsICdzbWRfZmVhdF9sYWJl bCcpLg0KCQkJCXRkKA0KCQkJCQlmSW5wdXQoJ3RleHQnLCAnc21kX2ZlYXRfbGFiZWwnLCAk ZmVhdF9sYWJlbCwgJycsICcnLCAnJywgJycsICcnLCAnc21kX2ZlYXRfbGFiZWwnKS4NCgkJ CQkJc2VsZWN0SW5wdXQoJ3NtZF9mZWF0X2xhYmVsY2hvb3NlJywgJGV0eXBlcywgJGZlYXRf bGFiZWwsIDAsICcnLCAnc21kX2ZlYXRfbGFiZWxjaG9vc2UnKQ0KCQkJCSkNCgkJCSk7DQoJ CQllY2hvIHRyKA0KCQkJCWZMYWJlbENlbGwoZ1R4dCgnZGVzY3JpcHRpb24nKSwgJycsICdz bWRfZmVhdF9kZXNjJykuDQoJCQkJdGQodGV4dF9hcmVhKCdzbWRfZmVhdF9kZXNjJywgODAs IDQwMCwgJGZlYXRfZGVzYywgJ3NtZF9mZWF0X2Rlc2MnKSkuDQoJCQkJdGQoZklucHV0KCdz dWJtaXQnLCAnJywgZ1R4dCgnc2F2ZScpLCAnc21hbGxlcmJveCcpKS4NCgkJCQloSW5wdXQo J3NtZF9mZWF0X3NlYXJjaGtlZXAnLCAnJykuDQoJCQkJaElucHV0KCdzbWRfZmVhdF9maWx0 a2VlcCcsICcnKS4NCgkJCQloSW5wdXQoJ3NtZF9mZWF0X2lkJywgJHNtZF9mZWF0X2lkKS4N CgkJCQllSW5wdXQoJHNtZF9mZWF0dXJlZF9ldmVudCkuDQoJCQkJc0lucHV0KCdzbWRfZmVh dHVyZWRfc2F2ZScpDQoJCQkpOw0KCQl9DQoJCWVjaG8gZW5kVGFibGUoKTsNCgkJZWNobyAn PC9mb3JtPic7DQoNCgkJJGVkYnRuID0gc21hbGwoJ1snLmdUeHQoJ2VkaXQnKS4nXScpOw0K DQoJCWlmICgkb3V0KSB7DQoJCQkkcm93cyA9IGNvdW50KCRycyk7DQoJCQkkdGJsb3V0ID0g YXJyYXkoKTsNCgkJCSRhdHRzID0gJyBjbGFzcz0ic21kX2ZlYXR1cmVkX3RhYmxlIHNtZF9j bGVhciIgaWQ9InNtZF8nLiRkaXNwbGF5LiciIGFsaWduPSJjZW50ZXIiJzsNCg0KCQkJJHRi bG91dFtdID0gaGVkKHNtZF9mZWF0dXJlZF9nVHh0KCdtYW5hZ2VfbGJsJywgYXJyYXkoKSwg J3JhdycpLCAzLCAnIGNsYXNzPSJzbWRfY2xlYXIiJyk7DQoJCQlmb3IgKCRpZHggPSAwOyAk aWR4IDwgJHJvd3M7ICRpZHgrKykgew0KCQkJCSRpc2ZlYXQgPSAoaXNzZXQoJG91dFskaWR4 XSkgJiYgYXJyYXlfa2V5X2V4aXN0cygkb3V0WyRpZHhdWzBdLCAkZmVhdGxpc3QpKTsNCgkJ CQkkY2VsbGNsYXNzID0gJGlzZmVhdCA/ICcgY2xhc3M9InNtZF9mZWF0dXJlZCInIDogJyc7 DQoJCQkJJGVkbGluayA9ICRpc2ZlYXQgPyAnPGEgY2xhc3M9ImVkbGluayIgaHJlZj0iIyIg b25jbGljaz0icmV0dXJuIHNtZF9mZWF0dXJlZF9lZGl0a2VlcChcJycuJG91dFskaWR4XVsw XS4nXCcpOyI+Jy4kZWRidG4uJzwvYT4nLnNwIDogJyc7DQoJCQkJJHJvd2RhdGEgPSAoaXNz ZXQoJG91dFskaWR4XSkpID8gJzxzcGFuIG5hbWU9InNtZF9mZWF0X25hbWUiIGNsYXNzPSJz bWRfaGlkZGVuIj4nLiRvdXRbJGlkeF1bMV0uJzwvc3Bhbj4nIDogJyc7DQoJCQkJJHJvd2Rh dGEgLj0gJGlzZmVhdCA/ICc8c3BhbiBuYW1lPSJzbWRfZmVhdF9sYWJlbCIgY2xhc3M9ImV4 dHJhIHNtZF9oaWRkZW4iPicuJG91dFskaWR4XVsyXS4nPC9zcGFuPicgOiAnJzsNCgkJCQkk dGJsb3V0W10gPSAoaXNzZXQoJG91dFskaWR4XSkpID8gJzxkaXYnLiRjZWxsY2xhc3MuJz4n LiRlZGxpbmsuJzxhIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBzbWRfZmVhdHVyZWRfc2Vs ZWN0KHRoaXMsIFwnJy4kb3V0WyRpZHhdWzBdLidcJykiPicuJG91dFskaWR4XVsxXS4nPC9h PicuJHJvd2RhdGEuJzwvZGl2PicgOiAnPGRpdj48L2Rpdj4nOw0KCQkJfQ0KCQkJZWNobyB0 YWcoam9pbigiIiwkdGJsb3V0KSwgJ2RpdicsICRhdHRzKTsNCgkJCWVjaG8gJzxkaXYgY2xh c3M9InNtZF9jbGVhciI+PC9kaXY+JzsNCgkJCWlmICgkZGlzcGxheT09J3BhZ2luYXRlZCcg JiYgJGRvX3BhZykgew0KCQkJCWVjaG8gbi4nPGRpdiBpZD0iJy4kc21kX2ZlYXR1cmVkX2V2 ZW50LidfbmF2aWdhdGlvbiIgY2xhc3M9InR4cC1uYXZpZ2F0aW9uIj4nLg0KCQkJCQluLm5h dl9mb3JtKCRzbWRfZmVhdHVyZWRfZXZlbnQsICRwYWdlLCAkbnVtUGFnZXMsICcnLCAnJywg JycsICcnLCAkdG90YWwsICRsaW1pdCkuDQoJCQkJCW4ucGFnZWJ5X2Zvcm0oJHNtZF9mZWF0 dXJlZF9ldmVudCwgJHNtZF9mZWF0dXJlZF9saXN0X3BhZ2VieSk7DQoJCQkJCW4uJzwvZGl2 Pic7DQoJCQl9DQoJCX0NCg0KCQkkcXMgPSBhcnJheSgNCgkJCSJldmVudCIgPT4gJHNtZF9m ZWF0dXJlZF9ldmVudCwNCgkJKTsNCg0KCQkkcXNWYXJzID0gImluZGV4LnBocCIuam9pbl9x cygkcXMpOw0KCQkkdmVyaWZ5VHh0ID0gc21kX2ZlYXR1cmVkX2dUeHQoJ3VuZmVhdHVyZV9j b25maXJtJyk7DQoNCgkJZWNobyA8PDxFT1MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny aXB0Ij4NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9zZWxlY3Qob2JqLCBpZCkgew0KCW9iaiA9 IGpRdWVyeShvYmopLnBhcmVudCgpOw0KDQoJLy8gTi5CLiBOZWdhdGl2ZSBsb2dpYyB1c2Vk IGhlcmUgYmVjYXVzZSB3ZSdyZSBjaGVja2luZyB0aGUgY2xhc3MgX2JlZm9yZV8gaXQncyBi ZWVuIHRvZ2dsZWQNCgl2YXIgYWN0aW9uID0gKChvYmopLmhhc0NsYXNzKCJzbWRfZmVhdHVy ZWQiKSkgPyAncmVtb3ZlJyA6ICdhZGQnOw0KCWlmIChhY3Rpb24gPT0gJ3JlbW92ZScpIHsN CgkJdmFyIHJldCA9IGNvbmZpcm0oJ3skdmVyaWZ5VHh0fScpOw0KCQlpZiAocmV0ID09IGZh bHNlKSB7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9DQoJalF1ZXJ5LnBvc3QoJ3skcXNW YXJzfScsIHsgc3RlcDogInNtZF9mZWF0dXJlZF90YWdpdCIsIHNtZF9mZWF0X2lkOiBpZCwg c21kX2ZlYXRfYWN0aW9uOiBhY3Rpb24gfSwNCgkJZnVuY3Rpb24oZGF0YSkgew0KCQkJb2Jq LnRvZ2dsZUNsYXNzKCdzbWRfZmVhdHVyZWQnKTsNCgkJCWlmIChhY3Rpb24gPT0gJ2FkZCcp IHsNCgkJCQlvYmoucHJlcGVuZCgnPGEgY2xhc3M9ImVkbGluayIgaHJlZj0iIyIgb25jbGlj az0icmV0dXJuIHNtZF9mZWF0dXJlZF9lZGl0a2VlcChcJycraWQrJ1wnKSI+eyRlZGJ0bn08 L2E+Jm5ic3A7Jyk7DQoJCQkJb2JqLmFwcGVuZCgnPHNwYW4gbmFtZT0ic21kX2ZlYXRfbGFi ZWwiIGNsYXNzPSJleHRyYSBzbWRfaGlkZGVuIj48L3NwYW4+Jyk7DQoJCQl9IGVsc2Ugew0K CQkJCW9iai5maW5kKCdhLmVkbGluaycpLnJlbW92ZSgpOw0KCQkJCW9iai5maW5kKCdzcGFu LmV4dHJhJykucmVtb3ZlKCk7DQoJCQkJaWYgKGpRdWVyeSgiI3NtZF9mZWF0X3NlYXJjaCIp LnZhbCgpICE9ICcnKSBqUXVlcnkoIiNzbWRfZmVhdF9zZWFyY2giKS5rZXl1cCgpOw0KCQkJ CWlmIChqUXVlcnkoIiNzbWRfZmVhdF9maWx0IikudmFsKCkgIT0gJycpIGpRdWVyeSgiI3Nt ZF9mZWF0X2ZpbHQiKS5jaGFuZ2UoKTsNCgkJCX0NCgkJfQ0KCSk7DQoJcmV0dXJuIGZhbHNl Ow0KfQ0KDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfZWRpdGtlZXAoaWQpIHsNCglqUXVlcnko IiNzbWRfZmVhdF9lZGl0Zm9ybSBbbmFtZT0nc21kX2ZlYXRfc2VhcmNoa2VlcCddIikudmFs KGpRdWVyeSgiI3NtZF9mZWF0X3NlYXJjaCIpLnZhbCgpKTsNCglqUXVlcnkoIiNzbWRfZmVh dF9lZGl0Zm9ybSBbbmFtZT0nc21kX2ZlYXRfZmlsdGtlZXAnXSIpLnZhbChqUXVlcnkoIiNz bWRfZmVhdHVyZWRfYnlsYWJlbCAjc21kX2ZlYXRfZmlsdCBvcHRpb246c2VsZWN0ZWQiKS52 YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2ZlYXRfZWRpdGZvcm0gW25hbWU9J3NtZF9mZWF0X2lk J10iKS52YWwoaWQpOw0KCWpRdWVyeSgiI3NtZF9mZWF0X2VkaXRmb3JtIikuc3VibWl0KCk7 DQp9DQoNCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9zYXZla2VlcCgpIHsNCglqUXVlcnkoIiNz bWRfZmVhdF9zYXZlZm9ybSBbbmFtZT0nc21kX2ZlYXRfc2VhcmNoa2VlcCddIikudmFsKGpR dWVyeSgiI3NtZF9mZWF0X3NlYXJjaCIpLnZhbCgpKTsNCglqUXVlcnkoIiNzbWRfZmVhdF9z YXZlZm9ybSBbbmFtZT0nc21kX2ZlYXRfZmlsdGtlZXAnXSIpLnZhbChqUXVlcnkoIiNzbWRf ZmVhdHVyZWRfYnlsYWJlbCAjc21kX2ZlYXRfZmlsdCBvcHRpb246c2VsZWN0ZWQiKS52YWwo KSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9mZWF0X2ZpbHRlcihzZWxlY3RvciwgcXVlcnksIG5h bSwgY3NlbnNlLCBleGFjdCkgew0KCWlmICh7JGRpc3BsYXlfanN9ID09IDEpIHsNCgkJdmFy IHF1ZXJ5ID0galF1ZXJ5LnRyaW0ocXVlcnkpOw0KCQljc2Vuc2UgPSAoY3NlbnNlKSA/ICIi IDogImkiOw0KCQlxdWVyeSA9IHF1ZXJ5LnJlcGxhY2UoLyAvZ2ksICd8Jyk7IC8vIGFkZCBP UiBmb3IgcmVnZXggcXVlcnkNCgkJaWYgKGV4YWN0KSB7DQoJCQl0bXAgPSBxdWVyeS5zcGxp dCgnfCcpOw0KCQkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgdG1wLmxlbmd0aDsgaWR4Kysp IHsNCgkJCQl0bXBbaWR4XSA9ICdeJyt0bXBbaWR4XSsnJCc7DQoJCQl9DQoJCQlxdWVyeSA9 IHRtcC5qb2luKCd8Jyk7DQoJCX0NCgkJdmFyIHJlID0gbmV3IFJlZ0V4cChxdWVyeSwgY3Nl bnNlKTsNCgkJalF1ZXJ5KHNlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJc2VsID0g KHR5cGVvZiBuYW09PSJ1bmRlZmluZWQiIHx8IG5hbT09JycpID8galF1ZXJ5KHRoaXMpIDog alF1ZXJ5KHRoaXMpLmZpbmQoInNwYW5bbmFtZT0nIituYW0rIiddIik7DQoJCQlpZiAocXVl cnkgPT0gJycpIHsNCgkJCQlpZiAoc2VsLmxlbmd0aCA9PSAxICYmIHNlbC50ZXh0KCkgPT0g JycpIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLnNob3coKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlq UXVlcnkodGhpcykuaGlkZSgpOw0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJaWYgKHNlbC50 ZXh0KCkuc2VhcmNoKHJlKSA8IDApIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLmhpZGUoKTsNCgkJ CQl9IGVsc2Ugew0KCQkJCQlqUXVlcnkodGhpcykuc2hvdygpOw0KCQkJCX0NCgkJCX0NCgkJ fSk7DQoJfQ0KfQ0KDQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCIjc21kX2ZlYXRf c2VhcmNoIikua2V5dXAoZnVuY3Rpb24oZXZlbnQpIHsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRf ZmlsdCIpLnZhbCgnMCcpOyAvLyBDbGVhciB0aGUgZmlsdGVyIGRyb3Bkb3duDQoJCS8vIGlm IGVzYyBpcyBwcmVzc2VkIG9yIG5vdGhpbmcgaXMgZW50ZXJlZA0KCQlpZiAoZXZlbnQua2V5 Q29kZSA9PSAyNyB8fCBqUXVlcnkodGhpcykudmFsKCkgPT0gJycpIHsNCgkJCWpRdWVyeSh0 aGlzKS52YWwoJycpOw0KCQkJaWYgKHskZGlzcGxheV9qc30gPT0gMSkgew0KCQkJCWpRdWVy eSgiLnNtZF9mZWF0dXJlZF90YWJsZSBkaXY6bm90KC50YmxoZWFkKSIpLnNob3coKTsNCgkJ CX0NCgkJfSBlbHNlIHsNCgkJCXNtZF9mZWF0X2ZpbHRlcignLnNtZF9mZWF0dXJlZF90YWJs ZSBkaXY6bm90KC50YmxoZWFkKScsIGpRdWVyeSh0aGlzKS52YWwoKSwgJ3NtZF9mZWF0X25h bWUnLCAwLCAwKTsNCgkJfQ0KCX0pOw0KCWlmICgneyRzbWRfZmVhdF9zZWFyY2hrZWVwfScg IT0gJycpIHsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRfc2VhcmNoIikua2V5dXAoKTsNCgl9DQoJ alF1ZXJ5KCIjc21kX2ZlYXRfZmlsdCIpLmNoYW5nZShmdW5jdGlvbihldmVudCkgew0KCQlq UXVlcnkoIiNzbWRfZmVhdF9zZWFyY2giKS52YWwoJycpOyAvLyBFbXB0eSB0aGUgc2VhcmNo IGJveA0KCQlpZiAoalF1ZXJ5KHRoaXMpLnZhbCgpID09ICcnKSB7DQoJCQlpZiAoeyRkaXNw bGF5X2pzfSA9PSAxKSB7DQoJCQkJalF1ZXJ5KCcuc21kX2ZlYXR1cmVkX3RhYmxlIGRpdjpu b3QoLnRibGhlYWQpJykuc2hvdygpOw0KCQkJfQ0KCQl9IGVsc2UgaWYgKGpRdWVyeSh0aGlz KS52YWwoKSA9PSAnc21kX3VubGFiZWxsZWQnKSB7DQoJCQlzbWRfZmVhdF9maWx0ZXIoJy5z bWRfZmVhdHVyZWRfdGFibGUgZGl2Om5vdCgudGJsaGVhZCknLCAnJywgJ3NtZF9mZWF0X2xh YmVsJywgMCwgMCk7DQoJCX0gZWxzZSB7DQoJCQlzbWRfZmVhdF9maWx0ZXIoJy5zbWRfZmVh dHVyZWRfdGFibGUgZGl2Om5vdCgudGJsaGVhZCknLCBqUXVlcnkodGhpcykudmFsKCksICdz bWRfZmVhdF9sYWJlbCcsIDEsIDEpOw0KCQl9DQoJfSk7DQoJaWYgKCd7JHNtZF9mZWF0X2Zp bHRrZWVwfScgIT0gJycpIHsNCgkJalF1ZXJ5KCIjc21kX2ZlYXRfZmlsdCIpLmNoYW5nZSgp Ow0KCX0NCglpZiAoJ3skc21kX2ZlYXRfaWR9JyAhPSAnJykgew0KCQlqUXVlcnkoIiNzbWRf ZmVhdF9sYWJlbCIpLmZvY3VzKCk7DQoJCWpRdWVyeSgiI3NtZF9mZWF0X2xhYmVsY2hvb3Nl IikuY2hhbmdlKGZ1bmN0aW9uKGV2ZW50KSB7DQoJCQlqUXVlcnkoIiNzbWRfZmVhdF9sYWJl bCIpLnZhbChqUXVlcnkodGhpcykudmFsKCkpOw0KCQl9KTsNCgl9DQoJalF1ZXJ5KCIjc21k X2xvYWRpbmciKS5oaWRlKCk7DQoJalF1ZXJ5KCIjc21kX2NvbnRhaW5lciIpLnNob3coKTsN Cn0pOw0KDQo8L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQouc21kX2hpZGRl biB7DQoJZGlzcGxheTpub25lOw0KfQ0KLnNtZF9mZWF0dXJlZCB7DQoJYmFja2dyb3VuZDoj ZmZjOw0KCWZvbnQtd2VpZ2h0OmJvbGQ7DQp9DQojc21kX2ZlYXR1cmVkX2NvbnRyb2xfcGFu ZWwgew0KCWZvbnQtc2l6ZTo5MCU7DQoJbWFyZ2luOjAgYXV0byAyMHB4Ow0KCXBhZGRpbmc6 N3B4IDhweDsNCgl3aWR0aDo0NTBweDsNCn0NCi5zbWRfZmVhdHVyZWRfcHJlZiB7DQoJbWFy Z2luOjZweDsNCn0NCi5zbWRfZmVhdHVyZWRfc2F2ZSB7DQoJZmxvYXQ6cmlnaHQ7DQp9DQou c21kX2ZlYXR1cmVkX3N1YnBhbmVsIHsNCglmbG9hdDpsZWZ0Ow0KCW1hcmdpbjowIDVweDsN Cn0NCi5zbWRfZmVhdHVyZWRfdGFibGUgew0KCXdpZHRoOjgwMHB4Ow0KCW1hcmdpbjowIGF1 dG8gODBweDsNCn0NCi5zbWRfY2xlYXIgew0KCWNsZWFyOmJvdGg7DQp9DQouc21kX2ZlYXR1 cmVkX3RhYmxlIGRpdiB7DQoJZmxvYXQ6bGVmdDsNCgl3aWR0aDp7JHNpemVzWzBdfXB4Ow0K CWhlaWdodDp7JHNpemVzWzFdfXB4Ow0KCWJvcmRlcjoxcHggc29saWQgI2RkZDsNCglwYWRk aW5nOjRweDsNCglvdmVyZmxvdzpoaWRkZW47DQp9DQo8L3N0eWxlPg0KRU9TOw0KCQllY2hv ICc8L2Rpdj4nOw0KCQ0KCX0gZWxzZSB7DQoJCS8vIFRhYmxlIG5vdCBpbnN0YWxsZWQNCgkJ JGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRz bWRfZmVhdHVyZWRfZXZlbnQuYS4nc3RlcD1zbWRfZmVhdHVyZWRfdGFibGVfaW5zdGFsbCIg c3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNt ZF9mZWF0dXJlZF9nVHh0KCd0YmxfaW5zdGFsbF9sYmwnKSwgJ3NtYWxsZXJib3gnKS4nPC9m b3JtPic7DQoJCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7 DQoJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFs bCwgJGJ0blN0eWxlKSk7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9jaGFuZ2VfcGFnZWJ5KCkgew0KCWdsb2JhbCAk c21kX2ZlYXR1cmVkX2V2ZW50Ow0KCQ0KCWV2ZW50X2NoYW5nZV9wYWdlYnkoJHNtZF9mZWF0 dXJlZF9ldmVudCk7DQoJc21kX2ZlYXR1cmVkX2xpc3QoKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBVcGRhdGUgdGhlIHBhc3NlZCByZWNvcmQgaW4gdGhlIGZl YXR1cmVkIHRhYmxlDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfc2F2ZSgpIHsNCglnbG9iYWwg JHNtZF9mZWF0dXJlZF9ldmVudDsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc21kX2ZlYXRf aWQnLCAnc21kX2ZlYXRfbGFiZWwnLCAnc21kX2ZlYXRfZGVzYycpKSk7DQoJYXNzZXJ0X2lu dCgkc21kX2ZlYXRfaWQpOw0KDQoJJHNtZF9mZWF0X2Rlc2N0aWxlID0gJHNtZF9mZWF0X2Rl c2M7DQoJJHNtZF9mZWF0X2xhYmVsID0gZG9TbGFzaCgkc21kX2ZlYXRfbGFiZWwpOw0KDQoJ aWYgKHNtZF9mZWF0dXJlZF90YWJsZV9leGlzdCgpKSB7DQoJCUBpbmNsdWRlX29uY2UgdHhw YXRoLicvbGliL2NsYXNzVGV4dGlsZS5waHAnOw0KCQlAaW5jbHVkZV9vbmNlIHR4cGF0aC4n L3B1Ymxpc2gucGhwJzsNCgkJaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7DQoJCQkk dGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7DQoJCQkkc21kX2ZlYXRfZGVzY3RpbGUgPSBkb1Ns YXNoKCR0ZXh0aWxlLT5UZXh0aWxlVGhpcyhwYXJzZSgkc21kX2ZlYXRfZGVzYykpKTsNCgkJ fQ0KDQoJCSRzbWRfZmVhdF9kZXNjID0gZG9TbGFzaCgkc21kX2ZlYXRfZGVzYyk7DQoJCSRy ZXQgPSBzYWZlX3Vwc2VydChTTURfRkVBVCwgImxhYmVsPSckc21kX2ZlYXRfbGFiZWwnLCBk ZXNjcmlwdGlvbj0nJHNtZF9mZWF0X2Rlc2MnLCBkZXNjX2h0bWw9JyRzbWRfZmVhdF9kZXNj dGlsZSciLCAiZmVhdF9pZD0nJHNtZF9mZWF0X2lkJyIpOw0KCQl1bnNldCgkX1BPU1RbJ3Nt ZF9mZWF0X2lkJ10pOw0KCX0NCg0KCXNtZF9mZWF0dXJlZF9saXN0KHNtZF9mZWF0dXJlZF9n VHh0KCdzYXZlZCcpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBD cmVhdGUgYW4gZW1wdHkgZW50cnkgaW4gdGhlIGZlYXR1cmVkIHRhYmxlIG9yIGRlc3Ryb3kg aXQNCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF90YWdpdCgpIHsNCglnbG9iYWwgJHNtZF9mZWF0 dXJlZF9ldmVudDsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc21kX2ZlYXRfaWQn LCAnc21kX2ZlYXRfYWN0aW9uJykpKSk7DQoNCglhc3NlcnRfaW50KCRzbWRfZmVhdF9pZCk7 DQoNCglpZiAoJHNtZF9mZWF0X2FjdGlvbiA9PSAnYWRkJykgew0KCQkkcmV0ID0gc2FmZV91 cHNlcnQoU01EX0ZFQVQsICJsYWJlbD0nJyIsICJmZWF0X2lkPSckc21kX2ZlYXRfaWQnIik7 DQoJfSBlbHNlIGlmICgkc21kX2ZlYXRfYWN0aW9uID09ICdyZW1vdmUnKSB7DQoJCSRyZXQg PSBzYWZlX2RlbGV0ZShTTURfRkVBVCwgImZlYXRfaWQ9JyRzbWRfZmVhdF9pZCciKTsNCgl9 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9wcmVmc2F2ZSgpIHsN CglleHRyYWN0KGdwc2EoYXJyYXkoJ3NtZF9mZWF0X2Rpc3BsYXknLCAnc21kX2ZlYXRfc29y dCcsICdzbWRfZmVhdF9zb3J0ZGlyJywgJ3NtZF9mZWF0X2JveF94JywgJ3NtZF9mZWF0X2Jv eF95JykpKTsNCgkkbXNnID0gJyc7DQoNCglpZiAoJHNtZF9mZWF0X2Rpc3BsYXkpIHsNCgkJ c2V0X3ByZWYoInNtZF9mZWF0dXJlZF9kaXNwbGF5IiwgJHNtZF9mZWF0X2Rpc3BsYXksICdz bWRfZmVhdHVyZWQnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZB VEUpOw0KCQkkbXNnID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsNCgl9DQoNCglpZiAo JHNtZF9mZWF0X3NvcnQgJiYgJHNtZF9mZWF0X3NvcnRkaXIpIHsNCgkJJHNvcnRfY3JpdCA9 ICRzbWRfZmVhdF9zb3J0LicgJy4gJHNtZF9mZWF0X3NvcnRkaXI7DQoJCXNldF9wcmVmKCJz bWRfZmVhdHVyZWRfc29ydCIsICRzb3J0X2NyaXQsICdzbWRfZmVhdHVyZWQnLCBQUkVGX0hJ RERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQkkbXNnID0gZ1R4dCgn cHJlZmVyZW5jZXNfc2F2ZWQnKTsNCgl9DQoNCglpZiAoJHNtZF9mZWF0X2JveF94ICYmICRz bWRfZmVhdF9ib3hfeSkgew0KCQkkZGltcyA9ICRzbWRfZmVhdF9ib3hfeC4neCcuJHNtZF9m ZWF0X2JveF95Ow0KCQlzZXRfcHJlZigic21kX2ZlYXR1cmVkX2JveF9zaXplIiwgJGRpbXMs ICdzbWRfZmVhdHVyZWQnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BS SVZBVEUpOw0KCQkkbXNnID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsNCgl9DQoNCglz bWRfZmVhdHVyZWRfbGlzdCgkbXNnKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2ZlYXR1cmVkX3NhdmVfcGFuZV9zdGF0ZSgpIHsNCgkkcGFuZXMgPSBhcnJheSgnc21kX2Zl YXR1cmVkX2NwYW5lbCcpOw0KCSRwYW5lID0gZ3BzKCdwYW5lJyk7DQoJaWYgKGluX2FycmF5 KCRwYW5lLCAkcGFuZXMpKQ0KCXsNCgkJc2V0X3ByZWYoInBhbmVfeyRwYW5lfV92aXNpYmxl IiwgKGdwcygndmlzaWJsZScpID09ICd0cnVlJyA/ICcxJyA6ICcwJyksICdzbWRfZmVhdHVy ZWQnLCBQUkVGX0hJRERFTiwgJ3llc25vcmFkaW8nLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQlz ZW5kX3htbF9yZXNwb25zZSgpOw0KCX0gZWxzZSB7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKGFy cmF5KCdodHRwLXN0YXR1cycgPT4gJzQwMCBCYWQgUmVxdWVzdCcpKTsNCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWRkIGZlYXR1cmVkIHRhYmxlIGlmIG5v dCBhbHJlYWR5IGluc3RhbGxlZA0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkX3RhYmxlX2luc3Rh bGwoJHNob3dwYW5lPScxJykgew0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0K CSRyZXQgPSAnJzsNCgkkc3FsID0gYXJyYXkoKTsNCgkkc3FsW10gPSAiQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMgYCIuUEZYLlNNRF9GRUFULiJgICgNCgkJYGZlYXRfaWRgIGludCg4 KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJYGxhYmVsYCB2YXJjaGFyKDMyKSBOVUxMIGRl ZmF1bHQgJycsDQoJCWBkZXNjcmlwdGlvbmAgdGV4dCBOVUxMIGRlZmF1bHQgJycsDQoJCWBk ZXNjX2h0bWxgIHRleHQgTlVMTCBkZWZhdWx0ICcnLA0KCQlQUklNQVJZIEtFWSAoYGZlYXRf aWRgKQ0KCSkgRU5HSU5FPU15SVNBTSI7DQoNCglpZihncHMoJ2RlYnVnJykpIHsNCgkJZG1w KCRzcWwpOw0KCX0NCglmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJJHJldCA9IHNhZmVf cXVlcnkoJHFyeSk7DQoJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCSRHTE9CQUxTWyd0eHBf ZXJyX2NvdW50J10rKzsNCgkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQn XS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQllY2hvICI8IS0tXG4g JHFyeSBcbi0tPlxuIjsNCgkJfQ0KCX0NCg0KCSRjb2xzID0gZ2V0VGhpbmdzKCdkZXNjcmli ZSBgJy5QRlguU01EX0ZFQVQuJ2AnKTsNCglpZiAoIWluX2FycmF5KCdmZWF0X2lkJywgJGNv bHMpKSB7DQoJCXNhZmVfYWx0ZXIoU01EX0ZFQVQsICJDSEFOR0UgYGlkYCBgZmVhdF9pZGAg aW50KCA4ICkgTk9UIE5VTEwgREVGQVVMVCAnMCciKTsNCgl9DQoNCglpZiAoJEdMT0JBTFNb J3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCSRtZXNzYWdlID0gc21kX2ZlYXR1cmVkX2dU eHQoJ3RibF9pbnN0YWxsZWQnKTsNCgl9IGVsc2Ugew0KCQlpZiAoJHNob3dwYW5lKSB7DQoJ CQkkbWVzc2FnZSA9IHNtZF9mZWF0dXJlZF9nVHh0KCd0Ymxfbm90X2luc3RhbGxlZCcpOw0K CQkJc21kX2ZlYXR1cmVkX2xpc3QoJG1lc3NhZ2UpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERyb3AgdGFibGUgaWYgaW4gZGF0YWJhc2UNCmZ1 bmN0aW9uIHNtZF9mZWF0dXJlZF90YWJsZV9yZW1vdmUoKSB7DQoJJHJldCA9ICcnOw0KCSRz cWwgPSBhcnJheSgpOw0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCWlmIChz bWRfZmVhdHVyZWRfdGFibGVfZXhpc3QoKSkgew0KCQkkc3FsW10gPSAiRFJPUCBUQUJMRSBJ RiBFWElTVFMgIiAuUEZYLlNNRF9GRUFULiAiOyAiOw0KCQlpZihncHMoJ2RlYnVnJykpIHsN CgkJCWRtcCgkc3FsKTsNCgkJfQ0KCQlmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJCSRy ZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0KCQkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJCSRH TE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0 eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJ CWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkR0xP QkFMU1sndHhwX2Vycl9jb3VudCddID09IDApIHsNCgkJJG1lc3NhZ2UgPSBzbWRfZmVhdHVy ZWRfZ1R4dCgndGJsX3JlbW92ZWQnKTsNCgl9IGVsc2Ugew0KCQkkbWVzc2FnZSA9IHNtZF9m ZWF0dXJlZF9nVHh0KCd0Ymxfbm90X3JlbW92ZWQnKTsNCgkJc21kX2ZlYXR1cmVkX2xpc3Qo JG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBzbWRfZmVhdHVyZWRfdGFibGVfZXhpc3QoJGFsbD0nJykgew0KCWlmICgkYWxsKSB7 DQoJCSR0YmxzID0gYXJyYXkoU01EX0ZFQVQgPT4gNCk7DQoJCSRvdXQgPSBjb3VudCgkdGJs cyk7DQoJCWZvcmVhY2ggKCR0YmxzIGFzICR0YmwgPT4gJGNvbHMpIHsNCgkJCWlmIChncHMo J2RlYnVnJykpIHsNCgkJCQllY2hvICIrKyBUQUJMRSAiLiR0YmwuIiBIQVMgIi5jb3VudChA c2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpLiIgQ09MVU1OUzsgUkVRVUlSRVMgIi4kY29s cy4iICsrIi5icjsNCgkJCX0NCgkJCWlmIChjb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywg JHRibCkpID09ICRjb2xzKSB7DQoJCQkJJG91dC0tOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAo JG91dD09PTApID8gMSA6IDA7DQoJfSBlbHNlIHsNCgkJaWYgKGdwcygnZGVidWcnKSkgew0K CQkJZWNobyAiKysgVEFCTEUgIi5TTURfRkVBVC4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3co J2NvbHVtbnMnLCBTTURfRkVBVCkpLiIgQ09MVU1OUzsiOw0KCQl9DQoJCXJldHVybihAc2Fm ZV9zaG93KCdjb2x1bW5zJywgU01EX0ZFQVQpKTsNCgl9DQp9DQoNCi8vICoqKioqKioqKioq KioqKioNCi8vIFBVQkxJQyBTSURFIFRBR1MNCi8vICoqKioqKioqKioqKioqKioNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2ZlYXR1cmVkKCRhdHRzLCAk dGhpbmcpIHsNCglnbG9iYWwgJHNtZF9mZWF0dXJlZF9pbmZvLCAkc21kX3ByaW9yX2ZlYXR1 cmVkLCAkcHJlZnM7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknbGFiZWwnICAgID0+ ICcnLA0KCQkndW5sYWJlbCcgID0+ICdGZWF0dXJlZCcsDQoJCSdsYWJlbHRhZycgPT4gJycs DQoJCSd0aW1lJyAgICAgPT4gJ3Bhc3QnLA0KCQknc3RhdHVzJyAgID0+ICc0LDUnLA0KCQkn c2VjdGlvbicgID0+ICcnLA0KCQknbGltaXQnICAgID0+ICcnLA0KCQknc29ydCcgICAgID0+ ICcnLA0KCQknZm9ybScgICAgID0+ICcnLA0KCQknd3JhcHRhZycgID0+ICcnLA0KCQknYnJl YWsnICAgID0+ICcnLA0KCQknY2xhc3MnICAgID0+ICcnLA0KCQknaHRtbF9pZCcgID0+ICcn LA0KCSksJGF0dHMpKTsNCg0KCWlmIChpc3NldCgkYXR0c1snbGFiZWwnXSkpIHsNCgkJaWYg KCRsYWJlbCkgew0KCQkJJHdoZXJlID0gIkJJTkFSWSBsYWJlbCBSRUdFWFAgJyIuJGF0dHNb J2xhYmVsJ10uIiciOw0KCQl9IGVsc2Ugew0KCQkJJHdoZXJlID0gImxhYmVsPScnIjsNCgkJ fQ0KCQl1bnNldCgkYXR0c1snbGFiZWwnXSk7DQoJfSBlbHNlIHsNCgkJLy8gSWYgbm8gbGFi ZWwgYXR0cmlidXRlIGhhcyBiZWVuIGdpdmVuLCB0cmVhdCB0aGlzIGFzICdhbGwgZmVhdHVy ZWQgaXRlbXMnDQoJCSRpZHMgPSBzYWZlX2NvbHVtbignZmVhdF9pZCcsIFNNRF9GRUFULCAn MT0xJyk7DQoJCSRpZHMgPSBqb2luKCInLCciLCBkb1NsYXNoKCRpZHMpKTsNCgkJJHdoZXJl ID0gInNtZGZlYXQuZmVhdF9pZCBJTiAoJyRpZHMnKSI7DQoJfQ0KDQoJLy8gRXhjbHVkZSBw cmV2aW91c2x5IHNlZW4gYXJ0aWNsZXMNCglpZiAoIWVtcHR5KCRzbWRfcHJpb3JfZmVhdHVy ZWQpKSB7DQoJCSR3aGVyZSAuPSAnIEFORCBzbWRmZWF0LmZlYXRfaWQgTk9UIElOKCcgLiBq b2luKCcsJywgJHNtZF9wcmlvcl9mZWF0dXJlZCkgLiAnKSc7DQoJfQ0KDQoJaWYgKCR0aW1l KSB7DQoJCXN3aXRjaCAoJHRpbWUpIHsNCgkJCWNhc2UgJ2FueSc6DQoJCQkJYnJlYWs7DQoJ CQljYXNlICdmdXR1cmUnOg0KCQkJCSR3aGVyZSAuPSAiIEFORCBQb3N0ZWQgPiBub3coKSI7 DQoJCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCSR3aGVyZSAuPSAiIEFORCBQb3N0ZWQg PD0gbm93KCkiOw0KCQl9DQoJCWlmICghJHByZWZzWydwdWJsaXNoX2V4cGlyZWRfYXJ0aWNs ZXMnXSkgew0KCQkJJHdoZXJlIC49ICIgQU5EIChub3coKSA8PSBFeHBpcmVzIE9SIEV4cGly ZXMgPSAiLk5VTExEQVRFVElNRS4iKSI7DQoJCX0NCgkJdW5zZXQoJGF0dHNbJ3RpbWUnXSk7 DQoJfQ0KDQoJaWYgKCRzdGF0dXMpIHsNCgkJJHdoZXJlIC49ICcgQU5EIFN0YXR1cyBpbiAo Jy5qb2luKCcsJywgZG9fbGlzdCgkc3RhdHVzKSkuJyknOw0KCQl1bnNldCgkYXR0c1snc3Rh dHVzJ10pOw0KCX0NCg0KCWlmICgkc2VjdGlvbikgew0KCQkkd2hlcmUgLj0gIiBBTkQgU2Vj dGlvbiBpbiAoJyIuam9pbigiJywnIiwgZG9fbGlzdCgkc2VjdGlvbikpLiInKSI7DQoJCXVu c2V0KCRhdHRzWydzZWN0aW9uJ10pOw0KCX0NCg0KCWlmICgkc29ydCkgew0KCQkkd2hlcmUg Lj0nIE9SREVSIEJZICcuJHNvcnQ7DQoJCXVuc2V0KCRhdHRzWydzb3J0J10pOw0KCX0NCg0K CWlmICgkbGltaXQpIHsNCgkJJHdoZXJlIC49JyBMSU1JVCAnLiRsaW1pdDsNCgkJdW5zZXQo JGF0dHNbJ2xpbWl0J10pOw0KCX0NCg0KCS8vIERvbid0IHBhc3MgdGhlIHJlbWFpbmluZyBh dHRyaWJ1dGVzIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBvbnRvIHRoZSBhcnRpY2xlIHRhZw0K CXVuc2V0KA0KCQkkYXR0c1snbGFiZWwnXSwNCgkJJGF0dHNbJ3VubGFiZWwnXSwNCgkJJGF0 dHNbJ2xhYmVsdGFnJ10sDQoJCSRhdHRzWyd3cmFwdGFnJ10sDQoJCSRhdHRzWydicmVhaydd LA0KCQkkYXR0c1snY2xhc3MnXSwNCgkJJGF0dHNbJ2h0bWxfaWQnXQ0KCSk7DQoNCgkkcnMg PSBnZXRSb3dzKCdTRUxFQ1QgKiwgdW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVk LCB1bml4X3RpbWVzdGFtcChFeHBpcmVzKSBhcyB1RXhwaXJlcywgdW5peF90aW1lc3RhbXAo TGFzdE1vZCkgYXMgdUxhc3RNb2QgRlJPTSAnLlBGWC4ndGV4dHBhdHRlcm4gQVMgdHhwIExF RlQgSk9JTiAnLlBGWC5TTURfRkVBVC4nIEFTIHNtZGZlYXQgT04gdHhwLklEPXNtZGZlYXQu ZmVhdF9pZCBXSEVSRSAnLiR3aGVyZSk7DQoJJG91dCA9IGFycmF5KCk7DQoJaWYgKCRycykg ew0KCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJJHNtZF9mZWF0dXJlZF9pbmZvWyds YWJlbCddID0gJHJvd1snbGFiZWwnXTsNCgkJCSRzbWRfZmVhdHVyZWRfaW5mb1snZGVzY3Jp cHRpb24nXSA9ICRyb3dbJ2Rlc2NfaHRtbCddOw0KCQkJJGF0dHNbJ2lkJ10gPSAkcm93WydJ RCddOw0KCQkJJGFydG91dCA9IGFydGljbGUoJGF0dHMsICR0aGluZyk7DQoNCgkJCWlmICgk YXJ0b3V0KSB7DQoJCQkJJHNtZF9wcmlvcl9mZWF0dXJlZFtdID0gJHJvd1snSUQnXTsNCgkJ CQkkb3V0W10gPSAkYXJ0b3V0Ow0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkb3V0KSB7DQoJCXJl dHVybiAoKCRsYWJlbHRhZykgPyBkb0xhYmVsKCAoICgkbGFiZWwgPT0gJycpID8gJHVubGFi ZWwgOiAkbGFiZWwpLCAkbGFiZWx0YWcgKSA6ICcnKQ0KCQkJLmRvV3JhcCgkb3V0LCAkd3Jh cHRhZywgJGJyZWFrLCAkY2xhc3MsICcnLCAnJywgJycsICRodG1sX2lkKTsNCgl9DQoJcmV0 dXJuICcnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNt ZF91bmZlYXR1cmVkKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9wcmlvcl9mZWF0 dXJlZDsNCg0KCSR3aGVyZSA9ICIxPTEiOw0KDQoJLy8gRXhjbHVkZSBwcmV2aW91c2x5IHNl ZW4gYXJ0aWNsZXMNCglpZiAoIWVtcHR5KCRzbWRfcHJpb3JfZmVhdHVyZWQpKSB7DQoJCSR3 aGVyZSAuPSAnIEFORCBpZCBOT1QgSU4oJyAuIGpvaW4oJywnLCAkc21kX3ByaW9yX2ZlYXR1 cmVkKSAuICcpJzsNCgl9DQoNCgkkcnMgPSBzYWZlX2NvbHVtbignSUQnLCAndGV4dHBhdHRl cm4nLCAkd2hlcmUpOw0KCSRhdHRzWydpZCddID0gam9pbignLCcsICRycyk7DQoJJG91dCA9 IGFydGljbGUoJGF0dHMsICR0aGluZyk7DQoNCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfZmVhdHVyZWRfaW5mbygkYXR0 cykgew0KCWdsb2JhbCAkc21kX2ZlYXR1cmVkX2luZm87DQoNCglleHRyYWN0KGxBdHRzKGFy cmF5KA0KCQknaXRlbScgPT4gJycsDQoJKSwkYXR0cykpOw0KDQoJcmV0dXJuIChpc3NldCgk c21kX2ZlYXR1cmVkX2luZm9bJGl0ZW1dKSA/ICRzbWRfZmVhdHVyZWRfaW5mb1skaXRlbV0g OiAnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2lmX2ZlYXR1cmVkKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9mZWF0dXJlZF9p bmZvLCAkdGhpc2FydGljbGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQknaWQnID0+ ICcnLA0KCQknbGFiZWwnID0+ICcnLA0KCSksJGF0dHMpKTsNCg0KCWlmICgkaWQpIHsNCgkJ JGlkID0gam9pbigiJywnIiwgZG9fbGlzdChkb1NsYXNoKCRpZCkpKTsNCgl9DQoNCglpZiAo ISRpZCAmJiAkdGhpc2FydGljbGUpIHsNCgkJJGlkID0gJHRoaXNhcnRpY2xlWyd0aGlzaWQn XTsNCgl9DQoNCgkkd2hlcmVbXSA9ICJmZWF0X2lkIElOICgnIi4kaWQuIicpIjsNCg0KCWlm IChpc3NldCgkYXR0c1snbGFiZWwnXSkpIHsNCgkJJGxhYmVsID0gZXhwbG9kZSgnLCcsIGRv U2xhc2goJGxhYmVsKSk7DQoJCSRsYmx3aGVyZSA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRs YWJlbCBhcyAkbGJsKSB7DQoJCQkkbGJsd2hlcmVbXSA9ICInIi50cmltKCRsYmwpLiInIjsN CgkJfQ0KCQlpZiAoJGxibHdoZXJlKSB7DQoJCQkkd2hlcmVbXSA9ICcoIEJJTkFSWSBsYWJl bCBJTiAoJyAuIGpvaW4oJywnLCAkbGJsd2hlcmUpIC4gJykgKSc7DQoJCX0NCgl9DQoNCgkk cmV0ID0gc2FmZV9yb3coJ2ZlYXRfaWQnLCBTTURfRkVBVCwgam9pbignIEFORCcsICR3aGVy ZSkpOw0KDQoJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJHJldCkpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBsYWNl bWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVxdWlyZWQNCi8vIFRPRE86IG1ha2UgdGhl c2UgaW50byBhIHRleHRwYWNrIHdoZW4gcGx1Z2luIGNvbXBvc2VyIHN1cHBvcnRzIHRoZW0N CmZ1bmN0aW9uIHNtZF9mZWF0dXJlZF9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsN CgkkbGFuZyA9IGFycmF5KA0KCQknYnlfbGFiZWwnID0+ICdCeSBsYWJlbDogJywNCgkJJ2J5 X25hbWUnID0+ICdCeSBuYW1lOiAnLA0KCQknY29udHJvbF9wYW5lbCcgPT4gJ0NvbnRyb2wg cGFuZWwnLA0KCQknbWFuYWdlX2xibCcgPT4gJ0NsaWNrIHRvIHNlbGVjdCBmZWF0dXJlZCBh cnRpY2xlcywgd2hpY2ggd2lsbCBiZSBzaG93biA8c3BhbiBjbGFzcz0ic21kX2ZlYXR1cmVk Ij48YSBocmVmPSIjIj5oaWdobGlnaHRlZDwvYT48L3NwYW4+LicsDQoJCSdwcmVmcycgPT4g J1ByZWZlcmVuY2VzJywNCgkJJ3ByZWZfYm94c2l6ZScgPT4gJ0JveCBzaXplOiAnLA0KCQkn cHJlZl9ib3hzaXplYnknID0+ICd4JywNCgkJJ3ByZWZfZGlzcGxheScgPT4gJ0Rpc3BsYXk6 ICcsDQoJCSdwcmVmX3NvcnQnID0+ICdTb3J0IGJ5OiAnLA0KCQknc2F2ZWQnID0+ICdBcnRp Y2xlIGluZm8gdXBkYXRlZCcsDQoJCSdzZWFyY2hfbGl2ZScgPT4gJ0FydGljbGUgbGl2ZSBz ZWFyY2gnLA0KCQknc2VhcmNoX3N0YW5kYXJkJyA9PiAnQXJ0aWNsZSBzZWFyY2gnLA0KCQkn dGFiX25hbWUnID0+ICdGZWF0dXJlZCBhcnRpY2xlcycsDQoJCSd0YmxfaW5zdGFsbF9sYmwn ID0+ICdJbnN0YWxsIHRhYmxlJywNCgkJJ3RibF9pbnN0YWxsZWQnID0+ICdUYWJsZSBpbnN0 YWxsZWQnLA0KCQkndGJsX25vdF9pbnN0YWxsZWQnID0+ICdUYWJsZSBub3QgaW5zdGFsbGVk JywNCgkJJ3RibF9yZW1vdmVkJyA9PiAnVGFibGUgcmVtb3ZlZCcsDQoJCSd0Ymxfbm90X3Jl bW92ZWQnID0+ICdUYWJsZSBub3QgcmVtb3ZlZCcsDQoJCSd1bmZlYXR1cmVfY29uZmlybScg PT4gJ1N1cmUgdG8gdW5mZWF0dXJlIHRoaXMgYXJ0aWNsZT8nLA0KCQkndW5sYWJlbGxlZCcg PT4gJ1t1bmxhYmVsbGVkXScsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAk YXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6 ImZsYWdzIjtzOjE6IjIiO3M6NDoiaGVscCI7czoxODQ1NDoiPGRpdiBpZD0ic21kX2hlbHAi PgoKCTxoMT5zbWRfZmVhdHVyZWQ8L2gxPgoKCTxwPlB1bGwgb25lIG9yIG1vcmUgYXJ0aWNs ZXMgb3V0IG9mIHRoZSByZWd1bGFyIGFydGljbGUgZmxvdyBhbmQgcGltcCB0aGVtICYjODIx MjsgcGVyaGFwcyBvbiBhIHNlY3Rpb24gbGFuZGluZyBwYWdlIG9yIHlvdXIgaG9tZSBwYWdl LjwvcD4KCgk8aDI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+T25lLWNsaWNrIHNlbGVj dGlvbiBvZiBhcnRpY2xlcyB0byBmZWF0dXJlPC9saT4KCQk8bGk+TGFiZWwgeW91ciBmZWF0 dXJlZCBhcnRpY2xlcywgYWxsb3dpbmcgeW91IHRvIGdyb3VwIHRoZW0gaW50byBhcmVhcyBs aWtlIEZlYXR1cmVkLCBUZWFzZXJzLCBldGM8L2xpPgoJCTxsaT5BZGQgYW4gb3B0aW9uYWwg ZGVzY3JpcHRpb24gdG8gZWFjaCBhcnRpY2xlIHNvIHlvdSBjYW4gdXNlIHRoYXQgYXMgY29w eSwgaW5zdGVhZCBvZiBzb21ldGhpbmcgZnJvbSB0aGUgYXJ0aWNsZSBpdHNlbGYgKHN1cHBv cnRzIFRleHRpbGUgYW5kIHNvbWUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFn cyk8L2xpPgoJCTxsaT5TZWFyY2ggeW91ciBhcnRpY2xlcyBieSB0aXRsZSBvciBsYWJlbDsg ZmlsdGVyaW5nIGluIHJlYWwtdGltZSBpZiB5b3Ugd2lzaDwvbGk+CgkJPGxpPkhpZGRlbiBw cmVmIGFsbG93cyBwcmUtZmlsdGVyaW5nIGJ5IGFuIGFkbWluaXN0cmF0b3Igc28gb25seSBh cnRpY2xlcyBmcm9tIGNlcnRhaW4gc2VjdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgcGltcGFn ZTwvbGk+CgkJPGxpPkRpc3BsYXkgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmVhdHVyZWQgYXJ0 aWNsZXMgdXNpbmcgcmVndWxhciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhcnRp Y2xlIHRhZ3M8L2xpPgoJCTxsaT5LZWVwcyB0cmFjayBvZiB3aGljaCBhcnRpY2xlcyBoYXZl IGJlZW4gc2VlbiBhbHJlYWR5IG9uIHRoZSBwYWdlIHNvIGxhdGVyIGZlYXR1cmVkIChvciB1 bmZlYXR1cmVkKSBhcnRpY2xlcyBhcmVuJiM4MjE3O3QgZHVwbGljYXRlZDwvbGk+Cgk8L3Vs PgoKCTxoMj5BdXRob3IgLyBDcmVkaXRzPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3Rl ZmRhd3Nvbi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+PC9wPgoKCTxoMj5JbnN0YWxs YXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5SZXF1 aXJlcyBUZXh0cGF0dGVybiA0LjIuMCs8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBm cm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTE3 NC9zbWRfZmVhdHVyZWQiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJo dHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUg Y29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0 OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0 aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhw P2lkPTMzOTM4Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0 IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5X aGVuIHlvdSBpbnN0YWxsIHRoZSBwbHVnaW4sIHRoZSBuZWNlc3NhcnkgdGFibGUgaXMgYXV0 b21hdGljYWxseSBpbnN0YWxsZWQgZm9yIHlvdS4gVGhlcmUmIzgyMTc7cyBjdXJyZW50bHkg bm8gZmFjaWxpdHkgZm9yIHJlbW92aW5nIGl0IGR1cmluZyBwbHVnaW4gb3BlcmF0aW9uLCBi dXQgaXQgd2lsbCBiZSBkZWxldGVkIGlmIHRoZSBwbHVnaW4gaXMgcmVtb3ZlZCBmcm9tIHlv dXIgc3lzdGVtLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIHNpbXBseSBkZWxldGUgdGhlIHBs dWdpbiBmcm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMj5Db25m aWd1cmluZyBmZWF0dXJlZCBhcnRpY2xlczwvaDI+CgoJPHA+VmlzaXQgdGhlIDxlbT5Db250 ZW50LSZndDtGZWF0dXJlZCBhcnRpY2xlczwvZW0+IHRhYi4gQSBsaXN0IG9mIGFsbCBhcnRp Y2xlcyAoZnJvbSB0aGUgYWRtaW4tc2VsZWN0ZWQgc2VjdGlvbnMpIGFyZSBwcmVzZW50ZWQg aW4gYSBncmlkLjwvcD4KCgk8aDM+VG8gZmVhdHVyZSBhbiBhcnRpY2xlPC9oMz4KCgk8cD5D bGljayBpdHMgbmFtZS4gSXQgd2lsbCBiZSBoaWdobGlnaHRlZCBhbmQgYW4gPGNvZGU+W0Vk aXRdPC9jb2RlPiBidXR0b24gYXBwZWFycyBiZXNpZGUgaXQuIElmIHlvdSBjaG9vc2Ugbm90 IHRvIGVkaXQgdGhlIGFydGljbGUgaW5mb3JtYXRpb24sIGl0IHdpbGwgYmUgZmVhdHVyZWQg YnV0IHVubGFiZWxsZWQuPC9wPgoKCTxwPkNsaWNraW5nIDxjb2RlPltFZGl0XTwvY29kZT4g d2lsbCBkaXNwbGF5IHR3byBpbnB1dCBib3hlczo8L3A+CgoJPHVsPgoJCTxsaT48c3Ryb25n PkxhYmVsPC9zdHJvbmc+IDogYWxsb3dzIHlvdSB0byBsYWJlbCAoZ3JvdXApIHRoZSBhcnRp Y2xlIHdpdGggb3RoZXJzIG9mIGEgc2ltaWxhciBmZWF0dXJlZCBzdGF0dXMuIEZvciBleGFt cGxlLCB5b3UgY291bGQgbGFiZWwgc29tZSBhcnRpY2xlcyB0byBnbyBpbiBhICYjODIxNjt0 ZWFzZXJzJiM4MjE3OyBibG9jayBvbiB5b3VyIGhvbWUgcGFnZSBieSBsYWJlbGxpbmcgZWFj aCBwb3RlbnRpYWwgYXJ0aWNsZSB3aXRoIDxjb2RlPlRlYXNlcjwvY29kZT4uIEJlIGNhcmVm dWw6IDxzdHJvbmc+bGFiZWxzIGFyZSBjYXNlIHNlbnNpdGl2ZTwvc3Ryb25nPi4gVG8gaGVs cCwgeW91IG1heSBjaG9vc2UgYSBsYWJlbCBmcm9tIHRoZSBkcm9wZG93biBsaXN0IG9mIGFs bCBjdXJyZW50bHkgZGVmaW5lZCBsYWJlbHM8L2xpPgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0 aW9uPC9zdHJvbmc+IDogYWxsb3dzIHlvdSB0byBzdG9yZSBzb21lIFRleHRpbGUtYXdhcmUg c3VwcG9ydGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXJ0aWNsZS4gVGhpcyBjb3VsZCBz aW1wbHkgYmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgeW91ciBvd24gdXNlLCBvciBz b21lIGNvcHkgdGhhdCB5b3UgbWF5IHdpc2ggdG8gZGlzcGxheSBpbiB5b3VyIHRlYXNlcnMg YmxvY2sgdG8gZW50aWNlIHBlb3BsZSB0byByZWFkIHRoZSBhcnRpY2xlLiBJdCBjYW4gYmUg YXMgc2ltcGxlIG9yIGFzIGNvbXBsZXggYXMgeW91IGxpa2UgYW5kIGNhbiBjb250YWluIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MgKGlmIHRoZXkgbWFrZSBzZW5zZSB0 byB1c2UgYXQgdGhhdCBwb2ludCAmIzgyMTI7IGFydGljbGUgdGFncyBjYW5ub3QgYmUgdXNl ZCwgZm9yIGV4YW1wbGUsIGJ1dCA8Y29kZT4mbHQ7dHhwOnNpdGVfdXJsIC8mZ3Q7PC9jb2Rl PiBjYW4pPC9saT4KCTwvdWw+CgoJPHA+V2hlbiB5b3UmIzgyMTc7cmUgaGFwcHkgd2l0aCB5 b3VyIGNhdGVnb3Jpc2F0aW9uIGFuZC9vciBkZXNjcmlwdGlvbiB0ZXh0LCBoaXQgU2F2ZSB0 byBzdG9yZSBpdC4gWW91IGNhbiBlZGl0IHRoZSBpbmZvcm1hdGlvbiBhdCBhbnkgdGltZSBi eSBjbGlja2luZyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+W0VkaXRdPC9jb2RlPiBidXR0b24g ZnJvbSB0aGUgYXJ0aWNsZSBsaXN0LjwvcD4KCgk8aDM+VG8gdW5mZWF0dXJlIGFuIGFydGlj bGU8L2gzPgoKCTxwPkNsaWNrIGl0cyBuYW1lIGFnYWluLiBXaGVuIHlvdSBjb25maXJtIHRo YXQgeW91IGFyZSBzdXJlLCB0aGUgYXJ0aWNsZSYjODIxNztzIGxhYmVsIGFuZCBkZXNjcmlw dGlvbiBhcmUgZGVsZXRlZCwgc28gYmUgc3VyZSB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3Zl IHRoZW0sIG9yIGhhdmUgYmFja2VkIHRoZSBpbmZvcm1hdGlvbiB1cCBzb21ld2hlcmUuPC9w PgoKCTxoMz5GaW5kaW5nIGFydGljbGVzIHRvIGZlYXR1cmU8L2gzPgoKCTxwPldpdGggbGFy Z2UgYXJ0aWNsZSBsaXN0cyBpdCBjYW4gYmVjb21lIGRpZmZpY3VsdCB0byBmaW5kIHRoZSBv bmUgeW91IHdhbnQuIEFib3ZlIHRoZSBncmlkIGlzIGEgY29udHJvbCBwYW5lbC4gQ2xpY2sg aXQgdG8gcmV2ZWFsIHRoZSBwbHVnaW4gb3B0aW9ucy4gIE9uIHRoZSBsZWZ0IGlzIHRoZSBB cnRpY2xlIHNlYXJjaCBhcmVhIGFuZCBvbiB0aGUgcmlnaHQgYXJlIHRoZSBwbHVnaW4gcHJl ZmVyZW5jZXMuIElmIHlvdSBhcmUgaW4gPGVtPkRpc3BsYXk6IEFsbDwvZW0+IG1vZGUsIHNp bXBseSBzdGFydCB0eXBpbmcgaW4gdGhlIDxlbT5CeSBuYW1lPC9lbT4gYm94IGFuZCB5b3Vy IGFydGljbGUgbGlzdCB3aWxsIGJlIHJlZHVjZWQgYXMgeW91IHR5cGUgdG8gb25seSB0aG9z ZSB0aGF0IG1hdGNoLiBUeXBlIG11bHRpcGxlIHdvcmRzIHRvIGZpbmQgYXJ0aWNsZXMgdGhh dCBjb250YWluIGFueSBvZiB0aGUgZ2l2ZW4gd29yZHMuIFRvIHF1aWNrbHkgY2xlYXIgdGhl IGJveCwgaGl0IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+RVNDPC9zcGFuPmFwZSBrZXkuPC9w PgoKCTxwPkFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBzZWxlY3QgbGlzdCB0byBj aG9vc2UgYWxsIGFydGljbGVzIHdpdGggYSBwYXJ0aWN1bGFyIGxhYmVsLiBUaGUgZW1wdHkg ZW50cnkgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCBtZWFucyAmIzgyMjA7YWxsIGFydGljbGVz JiM4MjIxOy4gSWYgeW91IGhhdmUgZmVhdHVyZWQgYW4gYXJ0aWNsZSBidXQgZG9uJiM4MjE3 O3Qgc3VwcGx5IGEgbGFiZWwgeW91IGNhbiBmaWx0ZXIgaXQgYnkgY2hvb3NpbmcgdGhlIDxj b2RlPlt1bmxhYmVsbGVkXTwvY29kZT4gaXRlbSBmcm9tIHRoZSBsaXN0LiBJZiB5b3UgaGF2 ZSBsYWJlbGxlZCBhbnkgYXJ0aWNsZXMsIGVhY2ggbGFiZWwgeW91IGhhdmUgc3VwcGxpZWQg d2lsbCBhbHNvIGJlIGFuIG9wdGlvbiBpbiB0aGUgbGlzdC4gUmVtZW1iZXIgdGhhdCBsYWJl bHMgYXJlIGNhc2Ugc2Vuc2l0aXZlLjwvcD4KCgk8cD5Ob3RlIHRoYXQgZmlsdGVyaW5nIGJ5 IG5hbWUgb3IgYnkgbGFiZWwgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY3Rpb25zOiBzZWxl Y3Rpbmcgc29tZXRoaW5nIGZyb20gdGhlIGRyb3Bkb3duIHdpbGwgY2xlYXIgdGhlIHRleHQg Ym94LCBhbmQgdHlwaW5nIHNvbWV0aGluZyBpbiB0aGUgdGV4dCBib3ggd2lsbCByZXNldCB0 aGUgZHJvcGRvd24uPC9wPgoKCTxwPllvdXIgc2VhcmNoIGNyaXRlcmlhIGFyZSByZW1lbWJl cmVkIGJldHdlZW4gZWRpdC9saXN0IHZpZXdzIHNvIHlvdSB3b24mIzgyMTc7dCBsb3NlIHlv dXIgcGxhY2UuIElmIHlvdSBhcmUgaW4gPGVtPkRpc3BsYXk6IFBhZ2luYXRlZDwvZW0+IG1v ZGUsIHRoZSBzZWFyY2ggd29ya3MgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYnV0IHlvdSBo YXZlIHRvIGhpdCBFbnRlciBvciBjbGljayA8ZW0+R288L2VtPiB0byBzdWJtaXQgdGhlIHNl YXJjaCBjcml0ZXJpYS48L3A+CgoJPGgzPlBsdWdpbiBwcmVmZXJlbmNlczwvaDM+CgoJPHA+ VXNlcnMgb2YgdGhlIDxlbT5GZWF0dXJlZCBhcnRpY2xlczwvZW0+IHRhYiBhbHNvIGhhdmUg YSBmZXcgcHJlZmVyZW5jZXMgYXQgdGhlaXIgZGlzcG9zYWwgd2hpY2ggY2FuIGJlIGFsdGVy ZWQgYXQgd2lsbDo8L3A+CgoJPG9sPgoJCTxsaT48c3Ryb25nPkRpc3BsYXk8L3N0cm9uZz4g OiBjaG9vc2Ugd2hldGhlciB5b3Ugd2lzaCB0byBkaXNwbGF5IGFsbCBhcnRpY2xlcyBvbiBv bmUgcGFnZSAoYW5kIHVzZSB0aGUgbGl2ZSBzZWFyY2ggdG8gZmlsdGVyIHRoZW0pIG9yIGNo b29zZSBhIHBhZ2luYXRlZCB2aWV3IChhbmQgdXNlIHRoZSB0cmFkaXRpb25hbCBzZWFyY2gp LiBUaGUgdHJhZGl0aW9uYWwgc2VhcmNoIG1pZ2h0IGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBh IGxvdCBvZiBhcnRpY2xlcyAob3ZlciAxMDAwKSBiZWNhdXNlIHRoZSBsaXZlIHNlYXJjaCBt aWdodCBzbG93IGRvd24gc2lnbmlmaWNhbnRseS4gTm90ZSB0aGF0IHdoZW4geW91IHNlYXJj aCBmb3Igc29tZXRoaW5nIGluIHBhZ2luYXRlZCBtb2RlLCB0aGUgcmVzdWx0cyB0aGVtc2Vs dmVzIGFyZW4mIzgyMTc7dCBwYWdpbmF0ZWQ8L2xpPgoJCTxsaT48c3Ryb25nPlNvcnQgYnk8 L3N0cm9uZz4gOiBkZWZpbmUgdGhlIHNvcnQgb3JkZXIgb2YgdGhlIGFydGljbGUgbGlzdDwv bGk+CgkJPGxpPjxzdHJvbmc+Qm94IHNpemU8L3N0cm9uZz4gOiBzcGVjaWZ5IHRoZSA8Y29k ZT53aWR0aDwvY29kZT4gYW5kIDxjb2RlPmhlaWdodDwvY29kZT4gdmFsdWVzIGluIHBpeGVs cyBvZiBlYWNoIGNlbGwgaW4gdGhlIGdyaWQuIERlZmF1bHQgaXMgPGNvZGU+MTUweDQwPC9j b2RlPjwvbGk+Cgk8L29sPgoKCTxwPllvdSAoYXMgYWRtaW5pc3RyYXRvcikgY2FuIGFsc28g YWx0ZXIgdGhlIGJlaGF2aW91ciBvZiB0aGUgcGx1Z2luIGJ5IGNyZWF0aW5nIHNvbWUgaGlk ZGVuIHByZWZlcmVuY2VzICh0aGUgc21kX3ByZWZhbGl6ZXIgcGx1Z2luIGNhbiBoZWxwIGhl cmUpLiBUaGVyZSBhcmUgdHdvIHByZWZzIHlvdSBtYXkgZGVmaW5lOjwvcD4KCgk8b2w+CgkJ PGxpPjxzdHJvbmc+c21kX2ZlYXR1cmVkX3ByaXZzPC9zdHJvbmc+IDogYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiBwcml2IGxldmVsIG51bWJlcnMgdGhhdCBjYW4gYWNjZXNzIHRoZSA8 ZW0+RmVhdHVyZWQgYXJ0aWNsZXM8L2VtPiB0YWIuIERlZmF1bHQ6IDxjb2RlPjEsMjwvY29k ZT48L2xpPgoJCTxsaT48c3Ryb25nPnNtZF9mZWF0dXJlZF9zZWN0aW9uX2xpc3Q8L3N0cm9u Zz46IGRlZmluZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHNlY3Rpb24gbmFtZXMuIFRo ZXNlIHdpbGwgYmUgdGhlIG9ubHkgc2VjdGlvbnMgZnJvbSB3aGljaCBhcnRpY2xlcyBhcmUg YWxsb3dlZCB0byBiZSBmZWF0dXJlZDwvbGk+Cgk8L29sPgoKCTxwPklmIHVzaW5nIHNtZF9w cmVmYWxpemVyIHRvIGNyZWF0ZSB0aGUgcHJlZnMsIHNldCB0aGUgbmFtZSBhbmQgdmFsdWUg YXMgYWJvdmUgYW5kIHRoZW4gc2V0IHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBwYXJhbWV0 ZXJzOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+dHlwZTwvc3Ryb25nPiA6IGhpZGRlbjwv bGk+CgkJPGxpPjxzdHJvbmc+ZXZlbnQ8L3N0cm9uZz4gOiBzbWRfZmVhdHVyZWQ8L2xpPgoJ CTxsaT48c3Ryb25nPmlucHV0IGNvbnRyb2w8L3N0cm9uZz4gOiB0ZXh0X2lucHV0PC9saT4K CQk8bGk+PHN0cm9uZz51c2VyPC9zdHJvbmc+IDogLyBlbXB0eSAvPC9saT4KCQk8bGk+PHN0 cm9uZz5wb3NpdGlvbjwvc3Ryb25nPjogMDwvbGk+Cgk8L3VsPgoKCTxoMj5EaXNwbGF5aW5n IGZlYXR1cmVkIGFydGljbGVzPC9oMj4KCgk8cD5PbmNlIHlvdSBoYXZlIGNob3NlbiB5b3Vy IGZlYXR1cmVkIGFydGljbGVzLCB5b3UgbmVlZCBhIHdheSB0byBkaXNwbGF5IHRoZW06PC9w PgoKCTxoMz48Y29kZT4mbHQ7dHhwOnNtZF9mZWF0dXJlZCAvJmd0OzwvY29kZT48L2gzPgoK CTxwPkFjdHMgYSBiaXQgbGlrZSB0aGUgc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDphcnRpY2xl IC8mZ3Q7PC9jb2RlPiB0YWcgdG8gZGlzcGxheSBmZWF0dXJlZCBhcnRpY2xlcy4gQXR0cmli dXRlczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWw8L3NwYW4+ IDogZGlzcGxheSBmZWF0dXJlZCBhcnRpY2xlcyB3aXRoIHRoaXMgbGFiZWwuIFNwZWNpZnkg PGNvZGU+bGFiZWw9JnF1b3Q7JnF1b3Q7PC9jb2RlPiB0byBkaXNwbGF5IHVubGFiZWxsZWQg YXJ0aWNsZXMgKHdoaWNoIGFyZSA8c3Ryb25nPm5vdDwvc3Ryb25nPiB0aGUgc2FtZSBhcyB1 bmZlYXR1cmVkIGFydGljbGVzKS4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgb21pdHRlZCwgYWxs IGZlYXR1cmVkIGFydGljbGVzICYjODIxMjsgaXJyZXNwZWN0aXZlIG9mIGxhYmVsICYjODIx Mjsgd2lsbCBiZSBkaXNwbGF5ZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFi ZWx0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnICYjODIxMjsgd2l0aG91dCBicmFja2V0 cyAmIzgyMTI7IHRvIGFwcGx5IHRvIHRoZSBsYWJlbCBhdHRyaWJ1dGUuIElmIHRoaXMgYXR0 cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgbGFiZWwgaXRzZWxmIGlzIGRpc3BsYXllZCBhdCB0 aGUgaGVhZCBvZiB5b3VyIGZlYXR1cmVkIGFydGljbGUgbGlzdC4gSWYgeW91IHdpc2ggdG8g ZGlzcGxheSB1bmxhYmVsbGVkIGFydGljbGVzIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIDxj b2RlPnVubGFiZWw8L2NvZGU+IGF0dHJpYnV0ZSBvciB5b3UmIzgyMTc7bGwgc2VlIG5vIGxh YmVsLiBOb3RlIHRoYXQgdGhpcyB0YWcgZGlmZmVycyBmcm9tIHRoZSA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBjb252ZW50aW9uOiB5b3Ugd2lsbCA8ZW0+b25seTwvZW0+IHNl ZSB0aGUgbGFiZWwgaWYgeW91IHNwZWNpZnkgdGhlIDxjb2RlPmxhYmVsdGFnPC9jb2RlPi4g WW91IGNhbiBkaXNwbGF5IHRoZSBsYWJlbCBpbnNpZGUgeW91ciBhcnRpY2xlcyB1c2luZyB0 aGUgPGNvZGU+Jmx0O3R4cDpmZWF0dXJlZF9pbmZvIC8mZ3Q7PC9jb2RlPiB0YWc8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dW5sYWJlbDwvc3Bhbj4gOiB3aGVuIHVzaW5nIDxj b2RlPmxhYmVsPSZxdW90OyZxdW90OzwvY29kZT4gKHRvIHNob3cgdW5sYWJlbGxlZCBhcnRp Y2xlcykgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBsYWJlbCB0byB1c2UgaW5zaWRl IHRoZSA8Y29kZT5sYWJlbHRhZzwvY29kZT4uIERlZmF1bHQ6ICYjODIyMDtGZWF0dXJlZCYj ODIyMTs8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dGltZTwvc3Bhbj4gOiBsaW1p dCB0aGUgYXJ0aWNsZXMgdG8gdGhvc2UgaW4gdGhlIDxjb2RlPnBhc3Q8L2NvZGU+LCB0aGUg PGNvZGU+ZnV0dXJlPC9jb2RlPiBvciA8Y29kZT5hbnk8L2NvZGU+LiBEZWZhdWx0OiA8Y29k ZT5wYXN0PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0dXM8L3Nw YW4+IDogb25seSBkaXNwbGF5IGFydGljbGVzIG9mIHRoZSBnaXZlbiBzdGF0dXMgbnVtYmVy KHMpLiBEZWZhdWx0OiA8Y29kZT40LDU8L2NvZGU+IChhLmsuYS4gbGl2ZSBhbmQgc3RpY2t5 KTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZWN0aW9uPC9zcGFuPiA6IG9ubHkg ZGlzcGxheSBhcnRpY2xlcyBmcm9tIHRoZSBnaXZlbiBzZWN0aW9uKHMpLiBJZiB0aGUgc2Vj dGlvbiBsaXN0IGlzIHJlc3RyaWN0ZWQgdXNpbmcgdGhlIHBsdWdpbiBwcmVmZXJlbmNlcywg dGhlIHNlY3Rpb25zIHVzZWQgaGVyZSBtdXN0IGFsc28gYmUgaW4gdGhhdCBsaXN0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm08L3NwYW4+IDogdXNlIHRoaXMgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gZm9ybSB0byBkaXNwbGF5IGVhY2ggYXJ0aWNsZSwg aW5zdGVhZCBvZiB1c2luZyB0aGUgY29udGFpbmVyIGNvbnRlbnRzPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPmxpbWl0PC9zcGFuPiA6IG1heGltdW0gbnVtYmVyIG9mIGZlYXR1 cmVkIGFydGljbGVzIHRvIGRpc3BsYXk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ c29ydDwvc3Bhbj4gOiBvcmRlciB0aGUgZmVhdHVyZWQgYXJ0aWNsZXMgYnkgPGNvZGU+aWQ8 L2NvZGU+LCA8Y29kZT5sYWJlbDwvY29kZT4sIDxjb2RlPlRpdGxlPC9jb2RlPiwgPGNvZGU+ UG9zdGVkPC9jb2RlPiwgYW5kIHNvIG9uLiBUaGUgc2FtZSBsaXN0IGF2YWlsYWJsZSBmb3Ig dGhlIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZSAvJmd0OzwvY29kZT4gdGFnIGFyZSB1c2FibGUg aGVyZS4gQWRkIDxjb2RlPmFzYzwvY29kZT4gb3IgPGNvZGU+ZGVzYzwvY29kZT4gdG8gdGhl IGF0dHJpYnV0ZSB0byBhbHRlciB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzb3J0LiBZb3UgbWF5 IGFsc28gdXNlIDxjb2RlPnJhbmQoKTwvY29kZT4gdG8gc29ydCB0aGUgYXJ0aWNsZXMgcmFu ZG9tbHk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiB0 aGUgKFgpSFRNTCB0YWcgJiM4MjEyOyB3aXRob3V0IGJyYWNrZXRzICYjODIxMjsgdG8gd3Jh cCBhcm91bmQgdGhlIGxpc3Qgb2YgZmVhdHVyZWQgYXJ0aWNsZXM8L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnICYjODIxMjsg d2l0aG91dCBicmFja2V0cyAmIzgyMTI7IG9yIHRleHQgdG8gcHV0IGJldHdlZW4gZWFjaCBh cnRpY2xlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyBuYW1lIHRvIGFwcGx5IHRv IHRoZSB3cmFwdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmh0bWxfaWQ8L3Nw YW4+IDogYSA8c3BhbiBjbGFzcz0iY2FwcyI+RE9NPC9zcGFuPiBJRCB0byBhcHBseSB0byB0 aGUgd3JhcHRhZzwvbGk+Cgk8L3VsPgoKCTxwPllvdSBtYXkgdXNlIHRoZSB0YWcgYXMgYSBj b250YWluZXIgYW5kIGFueSB0YWdzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgZGlzcGxheWVkIGlu IGVhY2ggZmVhdHVyZWQgYXJ0aWNsZS4gWW91IGNhbiB1c2Ugc3RhbmRhcmQgYXJ0aWNsZSB0 YWdzIHN1Y2ggYXMgPGNvZGU+Jmx0O3R4cDp0aXRsZSAvJmd0OzwvY29kZT4sIDxjb2RlPiZs dDt0eHA6ZXhjZXJwdCAvJmd0OzwvY29kZT4sIDxjb2RlPiZsdDt0eHA6cGVybWxpbmsgLyZn dDs8L2NvZGU+LCBldGM8L3A+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+Tm90ZSB0aGF0IHlv dSBjYW4mIzgyMTc7dCB1c2UgPGNvZGU+Jmx0O3R4cDpzbWRfZmVhdHVyZWQmZ3Q7PC9jb2Rl PiBpbnNpZGUgYW4gYXJ0aWNsZSBvciBhbiBBcnRpY2xlIEZvcm0uIERvaW5nIHNvIHdpbGwg dHJpZ2dlciBhIHdhcm5pbmcgYmVjYXVzZSBpdCYjODIxNztzIHRoZSBzYW1lIGFzIHB1dHRp bmcgYW5vdGhlciBhcnRpY2xlIHRhZyBpbnNpZGUgYW4gYXJ0aWNsZS4gVXNlIHRoZSB0YWcg b25seSBpbiBQYWdlcywgb3IgaW4gYSBGb3JtIHRoYXQgaXMgbmV2ZXIgZGlyZWN0bHkgdXNl ZCB0byBkaXNwbGF5IGFydGljbGUgY29udGVudC48L3A+CgoJPHA+RWFjaCB0aW1lIHlvdSB1 c2UgPGNvZGU+Jmx0O3R4cDpzbWRfZmVhdHVyZWQgLyZndDs8L2NvZGU+IGl0IG1ha2VzIGEg bm90ZSBvZiB0aGUgYXJ0aWNsZXMgaXQgaGFzIGRpc3BsYXllZCBhbmQgd2lsbCBub3QgZHVw bGljYXRlIGFydGljbGVzIGluIGxhdGVyIHRhZ3MuPC9wPgoKCTxoMz48Y29kZT4mbHQ7dHhw OnNtZF9mZWF0dXJlZF9pbmZvIC8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+QWxsb3dzIHlvdSB0 byBkaXNwbGF5IHRoZSBsYWJlbCBvciB0aGUgZGVzY3JpcHRpb24gd2l0aGluIHlvdXIgPGNv ZGU+Jmx0O3R4cDpzbWRfZmVhdHVyZWQgLyZndDs8L2NvZGU+ICBmb3JtL2NvbnRhaW5lci48 L3A+CgoJPHA+SGFzIG9uZSBhdHRyaWJ1dGU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPml0ZW08L3NwYW4+IDogdGhlIHRoaW5nIHlvdSB3YW50IHRvIGRpc3BsYXku IENob29zZSBmcm9tOgoJPHVsPgoJCTxsaT48c3Ryb25nPmxhYmVsPC9zdHJvbmc+OiB0aGUg bGFiZWw8L2xpPgoJCTxsaT48c3Ryb25nPmRlc2NyaXB0aW9uPC9zdHJvbmc+OiB0aGUgVGV4 dGlsZS1wcm9jZXNzZWQgZGVzY3JpcHRpb248L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8 aDM+PGNvZGU+Jmx0O3R4cDpzbWRfdW5mZWF0dXJlZCAvJmd0OzwvY29kZT48L2gzPgoKCTxw PlVzZSB0aGlzIHRhZyBpZiB5b3Ugd2lzaCB0byBzaG93IHRoZSAmIzgyMTY7cmVtYWluaW5n JiM4MjE3OyBhcnRpY2xlcyAmIzgyMTI7IGkuZS4gb25lcyBub3QgYWxyZWFkeSBkaXNwbGF5 ZWQgYnkgYW55IHByZWNlZGluZyA8Y29kZT4mbHQ7dHhwOnNtZF9mZWF0dXJlZCAvJmd0Ozwv Y29kZT4gdGFncy4gSXQgYWN0cyB2ZXJ5IG11Y2ggbGlrZSB0aGUgYnVpbHQtaW4gYXJ0aWNs ZSB0YWcgJiM4MjEyOyBhbmQgdGFrZXMgYWxsIHRoZSBzYW1lIGF0dHJpYnV0ZXMgJiM4MjEy OyBidXQgaXRzIGNvbnRleHQgaXMgJiM4MjIwO2FueSBhcnRpY2xlcyBmcm9tIGFueSBzZWN0 aW9uIGRlZmluZWQgaW4gdGhlIHNtZF9mZWF0dXJlZCBwbHVnaW4gdGhhdCBoYXZlIG5vdCBi ZWVuIGRpc3BsYXllZCBhbHJlYWR5JiM4MjIxOy48L3A+CgoJPGgzPjxjb2RlPiZsdDt0eHA6 c21kX2lmX2ZlYXR1cmVkJmd0OzwvY29kZT48L2gzPgoKCTxwPlRoaXMgdGFnIGFsbG93cyB5 b3UgdG8gZGV0ZWN0IGlmIHRoZSBjdXJyZW50IChpbmRpdmlkdWFsKSBhcnRpY2xlIGlzIGZl YXR1cmVkIGFuZC9vciBoYXMgYSBwYXJ0aWN1bGFyIGxhYmVsLiBZb3UgbWF5IGFsc28gdXNl IHRoaXMgb3V0c2lkZSBhbiBhcnRpY2xlIGNvbnRleHQgYnkgc3VwcGx5aW5nIGEgbGlzdCBv ZiBhcnRpY2xlIElEcy48L3A+CgoJPHA+SGFzIHR3byBhdHRyaWJ1dGVzOjwvcD4KCgk8dWw+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj4gOiBsaXN0IG9mIGFydGljbGUg SURzIG9mIHdoaWNoIHlvdSB3aXNoIHRvIGNoZWNrIHRoZSBmZWF0dXJlZCBzdGF0dXMuIElm IG9taXR0ZWQsIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGFydGljbGUgKGlmIHVzZWQgaW5z aWRlIGEgPGNvZGU+Jmx0O3R4cDphcnRpY2xlIC8mZ3Q7PC9jb2RlPiBjb250YWluZXIvZm9y bSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWw8L3NwYW4+IDogbGlzdCBv ZiBsYWJlbHMgdG8gY29tcGFyZSB0aGUgZ2l2ZW4gSUQocykgd2l0aC4gU3BlY2lmeSA8Y29k ZT5sYWJlbD0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIGNoZWNrIGZvciB1bmxhYmVsbGVkIGFy dGljbGVzLCBvciB1c2UgYW4gZW1wdHkgaXRlbSBpZiBzcGVjaWZ5aW5nIGEgbGlzdCwgZS5n LiA8Y29kZT5sYWJlbD0mcXVvdDssIEZlYXR1cmVkLCBUZWFzZXImcXVvdDs8L2NvZGU+LiBS ZW1lbWJlciB0aGF0IGxhYmVscyBhcmUgY2FzZSBzZW5zaXRpdmU8L2xpPgoJPC91bD4KCgk8 cD5JZiB0aGUgYXJ0aWNsZSBtYXRjaGVzIG9uZSBvZiB0aGUgZ2l2ZW4gbGFiZWxzIHRoZSBj b250YWluZWQgY29udGVudCB3aWxsIGJlIGV4ZWN1dGVkLiBJZiBubyBsYWJlbCBpcyBnaXZl biB0aGUgYXJ0aWNsZShzKSB3aWxsIGJlIGNoZWNrZWQgaWYgdGhleSBhcmUgZmVhdHVyZWQs IGlycmVzcGVjdGl2ZSBvZiBsYWJlbC48L3A+CgoJPGgyPkV4YW1wbGVzPC9oMj4KCgk8aDMg aWQ9ImVnMSI+RXhhbXBsZSAxOiBDb21wbGV0ZSBkaXJlY3Rvcnkgb2YgZmVhdHVyZWQgYXJ0 aWNsZXM8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0 O3R4cDpzbWRfZmVhdHVyZWQgbGFiZWx0YWc9JnF1b3Q7aDImcXVvdDsgbGltaXQ9JnF1b3Q7 MjAmcXVvdDsKICAgICB3cmFwdGFnPSZxdW90O2RsJnF1b3Q7IHNvcnQ9JnF1b3Q7bGFiZWwm cXVvdDsmZ3Q7CiAgICZsdDt0eHA6aWZfZGlmZmVyZW50Jmd0OwogICAgICAmbHQ7aDImZ3Q7 Jmx0O3R4cDpzbWRfZmVhdHVyZWRfaW5mbyBpdGVtPSZxdW90O2xhYmVsJnF1b3Q7IC8mZ3Q7 Jmx0Oy9oMiZndDsKICAgJmx0Oy90eHA6aWZfZGlmZmVyZW50Jmd0OwogICAmbHQ7ZHQmZ3Q7 CiAgICAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhw OnBlcm1saW5rJmd0OwogICAmbHQ7L2R0Jmd0OwogICAmbHQ7ZGQmZ3Q7CiAgICAgICZsdDt0 eHA6ZXhjZXJwdCAvJmd0OwogICAmbHQ7L2RkJmd0OwombHQ7L3R4cDpzbWRfZmVhdHVyZWQm Z3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVnMiI+RXhhbXBsZSAyOiBPbmUgZmVhdHVy ZWQgYXJ0aWNsZSBhbmQgc2l4IHRlYXNlcnMgb24gdGhlIGhvbWUgcGFnZTwvaDM+CgoJPHA+ U2VsZWN0IGFuIGFydGljbGUgYW5kIGxhYmVsIGl0IDxjb2RlPmZlYXR1cmU8L2NvZGU+LiBT ZWxlY3Qgc2l4IG90aGVycyBhbmQgbGFiZWwgdGhlbSA8Y29kZT50ZWFzZXJzPC9jb2RlPi4g QWRkIHNvbWUgZGVzY3JpcHRpb24gdGV4dCB0byB5b3VyIHRlYWFzZXIgYXJ0aWNsZXMuPC9w PgoKCTxwPkluIHlvdXIgZGVmYXVsdCBQYWdlLCBwdXQgdGhpczo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9mZWF0dXJlZCBsYWJl bD0mcXVvdDtmZWF0dXJlJnF1b3Q7CiAgICAgd3JhcHRhZz0mcXVvdDtkaXYmcXVvdDsgaHRt bF9pZD0mcXVvdDttYWluX2ZlYXR1cmUmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsm Z3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAmbHQ7dHhw OmFydGljbGVfaW1hZ2UgY2xhc3M9JnF1b3Q7ZmVhdF9pbWFnZSZxdW90OyAvJmd0OwogICAm bHQ7cCBjbGFzcz0mcXVvdDtsZWFkaW4mcXVvdDsmZ3Q7Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7 Jmx0Oy9wJmd0OwombHQ7L3R4cDpzbWRfZmVhdHVyZWQmZ3Q7CjwvY29kZT48L3ByZT4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2ZlYXR1 cmVkIGxhYmVsPSZxdW90O3RlYXNlcnMmcXVvdDsKICAgICB3cmFwdGFnPSZxdW90O3VsJnF1 b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7IGh0bWxfaWQ9JnF1b3Q7dGVhc2VyX2Jsb2NrJnF1 b3Q7Jmd0OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7 L3R4cDpwZXJtbGluayZndDsKICAgJmx0O3AgY2xhc3M9JnF1b3Q7bGVhZGluJnF1b3Q7Jmd0 OyZsdDt0eHA6ZXhjZXJwdCAvJmd0OyZsdDsvcCZndDsKJmx0Oy90eHA6c21kX2ZlYXR1cmVk Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+SWYgeW91IHdhbnRlZCB0byBoYXZlIHNvbWUgb3Ro ZXIgYXJ0aWNsZXMgYmVuZWF0aCB0aG9zZSwgYnV0IGRpZG4mIzgyMTc7dCB3YW50IGFueSBk dXBsaWNhdGVzIHRvIGFwcGVhciB5b3UgY291bGQgdXNlOjwvcD4KCjxwcmUgY2xhc3M9ImJs b2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3VuZmVhdHVyZWQgZm9ybT0m cXVvdDtteV9saXN0JnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVnMyI+ RXhhbXBsZSAzOiBQZXItc2VjdGlvbiBsYW5kaW5nIHBhZ2UgZmVhdHVyZWQgYXJ0aWNsZXM8 L2gzPgoKCTxwPklmIHlvdSBoYWQgYSB6b28gc2l0ZSB3aXRoIGEgc2VjaXRvbiBmb3IgcHJp bWF0ZXMsIGEgc2VjdGlvbiBmb3IgbWFtbWFscyBhbmQgYSBzZWN0aW9uIGZvciByZXB0aWxl cywgd2hlbiB5b3Ugc2V0IHVwIHlvdXIgZmVhdHVyZWQgYXJ0aWNsZSBsaXN0IGRlZmluZSB0 aGVpciBuYW1lcyBsaWtlIHRoaXM6PC9wPgoKCTx1bD4KCQk8bGk+RmVhdHVyZWQgcHJpbWF0 ZXM8L2xpPgoJCTxsaT5GZWF0dXJlZCBtYW1tYWxzPC9saT4KCQk8bGk+RmVhdHVyZWQgcmVw dGlsZXM8L2xpPgoJPC91bD4KCgk8cD5PbiB5b3VyIHNlY3Rpb24gbGFuZGluZyBwYWdlIHRl bXBsYXRlIHlvdSBjYW4gdGhlbiBkbyB0aGlzIHRvIGRpc3BsYXkgZm91ciBhcnRpY2xlcyBm cm9tIHRoZSByZWxldmFudCAoY3VycmVudCkgc2VjdGlvbjo8L3A+Cgo8cHJlIGNsYXNzPSJi bG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7aDImZ3Q7TG9vayB3aG8mIzM5O3MgaGVy ZTombHQ7L2gyJmd0OwombHQ7dHhwOnNtZF9mZWF0dXJlZCBsYWJlbD0mIzM5O0ZlYXR1cmVk ICZsdDt0eHA6c2VjdGlvbiAvJmd0OyYjMzk7CiAgICAgc2VjdGlvbj0mIzM5OyZsdDt0eHA6 c2VjdGlvbiAvJmd0OyYjMzk7IGxpbWl0PSZxdW90OzQmcXVvdDsKICAgICB3cmFwdGFnPSZx dW90O2RpdiZxdW90OyBodG1sX2lkPSZxdW90O2ZlYXRfYmxvY2smcXVvdDsmZ3Q7CiAgICZs dDtkaXYgY2xhc3M9JnF1b3Q7cGltcGVkX2FydGljbGUmcXVvdDsmZ3Q7CiAgICAgICZsdDt0 eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0 OwogICAgICAmbHQ7dHhwOnNtZF9mZWF0dXJlZF9pbmZvIGl0ZW09JnF1b3Q7ZGVzY3JpcHRp b24mcXVvdDsgLyZndDsKICAgJmx0Oy9kaXYmZ3Q7CiZsdDsvdHhwOnNtZF9mZWF0dXJlZCZn dDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWc0Ij5FeGFtcGxlIDQ6IENvbmRpdGlvbmFs IGNoZWNrIGZvciBmZWF0dXJlZC1uZXNzPC9oMz4KCgk8cD5JZiBhIHNpdGUgdmlzaXRvciBo YXMgbmF2aWdhdGVkIGF3YXkgZnJvbSB5b3VyIGZyb250IHBhZ2UgYW5kIGlzIHZpZXdpbmcg YW4gYXJ0aWNsZSwgeW91IG1heSB3aXNoIHRvIGhpZ2hsaWdodCB0aGUgZmFjdCB0aGUgY3Vy cmVudCBhcnRpY2xlIGlzIGEgZmVhdHVyZWQgcHJvZHVjdC4gU28sIHNvbWV3aGVyZSBpbnNp ZGUgeW91IGFydGljbGUgZm9ybSBhZGQ6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfZmVhdHVyZWQmZ3Q7CiAgICZsdDtwIGNs YXNzPSZxdW90O2hpbGlnaHQmcXVvdDsmZ3Q7RkVBVFVSRUQgUFJPRFVDVCZsdDsvcCZndDsK Jmx0Oy90eHA6c21kX2lmX2ZlYXR1cmVkJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+T3IgaWYg eW91IHdhbnRlZCB0byBvbmx5IGhpZ2hsaWdodCB0aGUgYXJ0aWNsZSBpZiBpdCB3YXMgYSBm ZWF0dXJlZCBvciBvbiBzcGVjaWFsIG9mZmVyOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX2ZlYXR1cmVkIGxhYmVsPSZxdW90 O0ZlYXR1cmVkLCBTcGVjaWFsJnF1b3Q7Jmd0OwogICAmbHQ7cCBjbGFzcz0mcXVvdDtoaWxp Z2h0JnF1b3Q7Jmd0O0FzIGZlYXR1cmVkIG9uIHRoZSBmcm9udCBwYWdlISZsdDsvcCZndDsK Jmx0Oy90eHA6c21kX2lmX2ZlYXR1cmVkJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgyIGlkPSJj aGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xOCBKdW4gMTAgfCAwLjEw IHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MDcgU2VwIDEwIHwgMC4yMCB8IFJlbmFt ZWQgaWQgY29sdW1uIHRvIGZlYXRfaWQgOyBmaXhlZCA8Y29kZT5sYWJlbDwvY29kZT4gYXR0 cmlidXRlIGJ1ZyAoYm90aCB0aGFua3MgcGllbWFuKSA7IGxhYmVsIHNlYXJjaGVzIGFyZSBu b3cgZXhhY3QgbWF0Y2hlcyA7IGFkZGVkIHByZWZzIGFuZCBwYWdpbmF0aW9uIHN1cHBvcnQg Zm9yIGFkbWluIHNpZGUgOyBhZGRlZCA8Y29kZT4mbHQ7dHhwOnNtZF9pZl9mZWF0dXJlZCZn dDs8L2NvZGU+IDsgYWRkZWQgbGFiZWwgc2VsZWN0aW9uIGZyb20gZHJvcGRvd24gZHVyaW5n IGVkaXRpbmcgKHRoYW5rcyB0eWUpPC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAqKiogQkVH SU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVs cCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJv bGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7 IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZv bnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1j b2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBw YWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHgg R2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0K I3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5n OjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlm OyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1OyBmb250OiBib2xkIDEycHggQXJp YWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7 dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9 CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0 dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVw cGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyBjb2xvcjoj MzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBk b3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUge3dpZHRoOjkwJTsgdGV4dC1hbGlnbjpj ZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRo IHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwO30KI3NtZF9oZWxwIHVs IHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLmltcG9ydGFudCB7Y29s b3I6cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNz bWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBF TkQgUExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjM3NmI4MmU0ZDQ5NTEz NDMzM2U2MDdiYzRkZjhkZmQ2Ijt9