# Name: smd_admin_themes v0.14 # Type: Admin side plugin # Admin-side theme manager and editor # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE2OiJzbWRfYWRtaW5fdGhlbWVzIjtzOjY6ImF1dGhvciI7 czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjE0IjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czo4MzM4MDoiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAk c21kX2F0X2V2ZW50LCAkc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9hZG1fZXZlbnQsICRzbWRf YXRfcHJpdnMsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfcHJlZnMsICRwcmVmcywgJHNt ZF9hdF9mZWVkdXJsLCAkc21kX2F0X3RoZW1lX3JlcG87DQoNCgkkc21kX2F0X2V2ZW50ID0g J3NtZF9hdCc7DQoJJHNtZF9hdF9mdWxsZXYgPSAnc21kX2FkbWluX3RoZW1lcyc7DQoJJHNt ZF9hdF9hZG1fZXZlbnQgPSAnc21kX2FkbWF0JzsNCgkkc21kX2F0X3ByaXZzID0gJzEnOw0K CSRzbWRfYXRfZmVlZHVybCA9ICdodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRtaW4tdGhlbWVz LWZlZWQnOw0KCSRzbWRfYXRfdGhlbWVfcmVwbyA9ICdodHRwOi8vdGV4dGdhcmRlbi5vcmcv YWRtaW5pc3RyYXRpb24tdGhlbWVzJzsNCg0KCS8vIFRodW1ibmFpbCBkaW1lbnNpb25zDQoJ JHNtZF9jb3JlX3RoZW1lcyA9IGFycmF5KCdjbGFzc2ljJywncmVtb3JhJyk7DQoNCglhZGRf cHJpdnMoJHNtZF9hdF9ldmVudCwgJHNtZF9hdF9wcml2cyk7DQoJYWRkX3ByaXZzKCdwbHVn aW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9wcml2cyk7DQoJcmVnaXN0ZXJf dGFiKCJleHRlbnNpb25zIiwgJHNtZF9hdF9ldmVudCwgc21kX2F0X2dUeHQoJ3RhYl9uYW1l JykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfb3B0aW9ucycsICdwbHVnaW5fcHJl ZnMuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF93ZWxj b21lJywgJ3BsdWdpbl9saWZlY3ljbGUuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF9hdCcsICRzbWRfYXRfZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfYXRfcGVyJywgJ2FkbWluX3NpZGUnLCAndGhlbWVfbmFtZScpOw0KCXJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfYXRfbGluaycsICdwcmVmc191aScsICd0aGVtZV9uYW1lJyk7DQoJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF91cGxvYWRfZm9ybScsICRzbWRfYXRfZXZlbnQu J191aScsICd1cGxvYWRfZm9ybScpOw0KDQoJaWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3N5 c3RlbSddKSAmJiAkcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA9PSAyKSB7DQoJCWFkZF9wcml2 cygkc21kX2F0X2FkbV9ldmVudCwgJzIsMyw0LDUsNicpOw0KCQlyZWdpc3Rlcl90YWIoImFk bWluIiwgJHNtZF9hdF9hZG1fZXZlbnQsIHNtZF9hdF9nVHh0KCdza2lubmVyJykpOw0KCQly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FkbWF0JywgJHNtZF9hdF9hZG1fZXZlbnQpOw0KCX0N Cg0KCS8vIERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFu ZCB0aGVpciBkZWZhdWx0cywNCgkvLyAybmQgaXMgYSBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0 aGF0IG1heSBuZWVkIHJlbW92aW5nIGluIGZ1dHVyZSAoZGVmYXVsdHMgYWxsIHNldCBlbXB0 eSkNCgkkc21kX2F0X3ByZWZzID0gYXJyYXkoDQoJCWFycmF5KA0KCQkJJ3NtZF9hdF9jYXNl X3NvcnQnID0+ICcxJywNCgkJCSdzbWRfYXRfY3J1c2gnID0+ICdnemlwJywNCgkJCSdzbWRf YXRfdHcnID0+ICcyNjAnLA0KCQkJJ3NtZF9hdF90aCcgPT4gJzE1MCcsDQoJCQknc21kX2F0 X2xheW91dCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9zeXN0ZW0nID0+ICcwJywNCgkJCSdzbWRf YXRfZ2xvYmFsX3NraW4nID0+ICcnLA0KCQkJJ3NtZF9hdF9ncm91cF9saXN0JyA9PiAnJywN CgkJCSdzbWRfYXRfdXNlcl9saXN0JyA9PiAnJywNCgkJKSwNCgkJYXJyYXkoDQoJCQknc21k X2F0X25vdF91c2VkX2FueV9tb3JlJyA9PiAnJywNCgkJKQ0KCSk7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0KCRldmVudCwgJHN0ZXApIHsN CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfYXRfY2xv bmUnLA0KCQkJJ3NtZF9hdF9kZWxldGUnLA0KCQkJJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLA0K CQkJJ3NtZF9hdF9lZGl0JywNCgkJCSdzbWRfYXRfZXhwb3J0JywNCgkJCSdzbWRfYXRfaW1w b3J0JywNCgkJCSdzbWRfYXRfbmV3ZmlsZScsDQoJCQknc21kX2F0X3ByZWZzX2luc3RhbGwn LA0KCQkJJ3NtZF9hdF9wcmVmc19yZW1vdmUnLA0KCQkJJ3NtZF9hdF9wcmVmc191cGRhdGUn LA0KCQkJJ3NtZF9hdF9yZW5hbWUnLA0KCQkJJ3NtZF9hdF9zYXZlJywNCgkJCSdzbWRfYXRf c2V0dXAnLA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkJJ3NtZF9hdF91cGxvYWRfaW1hZ2Un LA0KCQkJJ3NtZF9hdF9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsNCgkJc21kX2F0X2xpc3Qo JycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfd2VsY29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcnOw0KCXN3aXRjaCAoJHN0 ZXApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9hdF9wcmVmc19pbnN0YWxsKDAp Ow0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21kX2F0X3ByZWZzX3JlbW92 ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9saW5rKCkgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50Ow0KCXJldHVy biBocmVmKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksICc/ZXZlbnQ9Jy4kc21kX2F0X2V2 ZW50KTsNCn0NCg0KLy8gQSBzdHViIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGEgJG1l c3NhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9kaXNwbGF5KCkgew0KCQlzbWRfYXRfbGlzdCgnJyk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2xp c3QoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudCwgJHByZWZzLCAkc21k X2F0X3ByZWZzLCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfZnVsbGV2LCAk c21kX2F0X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbzsNCg0KCSRhdF9wcmVmcyA9IHNt ZF9hdF9nZXRfcHJlZnMoKTsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc3RlcCcsICdwYWdl JywgJ2NyaXQnLCAnc2VhcmNoX21ldGhvZCcsICdza2luJykpKTsNCgkkbWVzc2FnZSA9ICgk bWVzc2FnZSkgPyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCSRsYXlvdXQgPSAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddIDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAk YXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J10p ICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3By ZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCddKSArIDgw Ow0KCSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0k c21kX2F0X2Z1bGxldiN1c2FnZSI7DQoNCgkkcGFnZWJ5ID0gKGdwcygncXR5JykpID8gZ3Bz KCdxdHknKSA6ICgoY3MoJ3NtZF9hdF9wYWdlYnknKSkgPyBjcygnc21kX2F0X3BhZ2VieScp IDogMTUpOw0KCSRtYXhfZmlsZV9zaXplID0gMTUwICogMTAyNDsgLy8gYSBiaXQgYXJiaXRy YXJ5IQ0KDQoJJGN1cnJfc2tpbiA9IChzbWRfYXRfZXhpc3RzKCR0aGVtZS0+bmFtZSkpID8g JHRoZW1lLT5uYW1lIDogJ2NsYXNzaWMnOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9z a2lucygpOw0KCSRjcnVzaGVycyA9IHNtZF9hdF9leHBvcnRfb3B0aW9ucygpOw0KCSRiYXNl cyA9IGFycmF5KCk7DQoNCgkvLyBHZXQgYSBsaXN0IG9mIGFuY2VzdG9yIHRoZW1lcyAoaS5l LiBkZXBlbmRlbmNpZXMpDQoJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbmEpIHsNCgkJ JG1hbmlmZXN0ID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luYSk7DQoJCWlmICgkbWFuaWZl c3QpIHsNCgkJCWlmICgkbWFuaWZlc3RbJ2Jhc2VkX29uJ10pIHsNCgkJCQkkYmFzZXNbXSA9 ICRtYW5pZmVzdFsnYmFzZWRfb24nXTsNCgkJCX0NCgkJfQ0KCX0NCgkkYmFzZXMgPSBhcnJh eV91bmlxdWUoJGJhc2VzKTsNCg0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ21hbmFnZV9sYmwn KSwkbWVzc2FnZSk7DQoNCgkvLyBIYW5kbGUgcGFnaW5nDQoJJHRvdGFsID0gY291bnQoJHNr aW5fbGlzdCk7DQoJJGxpbWl0ID0gbWF4KEAkcGFnZWJ5LCAxNSk7DQoJbGlzdCgkcGFnZSwg JG9mZnNldCwgJG51bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFnZSk7DQoJ JHNraW5fbGlzdCA9IGFycmF5X3NsaWNlKCRza2luX2xpc3QsICRvZmZzZXQsICRsaW1pdCk7 DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LA0KCQkicGFn ZSIgPT4gJHBhZ2UsDQoJKTsNCg0KCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gc21kX2dldGNydXNoKHNraW4pIHsNCglza2luSGFu ZGxlID0gImNydXNoXyIrc2tpbjsNCglqUXVlcnkoJy5zbWRfcG9wdXAnKS5lYWNoKGZ1bmN0 aW9uKCkgew0KCQlib3ggPSBqUXVlcnkodGhpcyk7DQoJCWlmIChib3guYXR0cigiaWQiKSA9 PSBza2luSGFuZGxlKSB7DQoJCQlpZiAoYm94LmNzcygiZGlzcGxheSIpID09ICJub25lIikg ew0KCQkJCWJveC5zbGlkZURvd24oJ2Zhc3QnKTsNCgkJCX0gZWxzZSB7DQoJCQkJYm94LnNs aWRlVXAoJ2Zhc3QnKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCWJveC5zbGlkZVVwKCdmYXN0 Jyk7DQoJCX0NCgl9KTsNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBhJykuY2xpY2soZnVu Y3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlzKS5hdHRyKCJocmVmIiwgIj9ldmVudD17JHNtZF9h dF9ldmVudH0mc2tpbj0iK3NraW4rIiZzdGVwPXNtZF9hdF9leHBvcnQmY3J1c2g9IitqUXVl cnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dFt0eXBlPVwncmFkaW9cJ106Y2hlY2tlZCcpLnZh bCgpKyImcGFnZT0iK3skcGFnZX0pOw0KCX0pOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVu Y3Rpb24gc21kX2dldHZhbChza2luLCBzdGVwKSB7DQoJc2tpbkhhbmRsZSA9ICJwb3BfIitz a2luOw0KCWpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWJveCA9 IGpRdWVyeSh0aGlzKTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5IYW5kbGUpIHsN CgkJCWlmIChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJYm94LnNsaWRl RG93bignZmFzdCcpOw0KCQkJCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0JykuZm9j dXMoKTsNCgkJCX0gZWxzZSB7DQoJCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJCX0NCgkJ fSBlbHNlIHsNCgkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJCX0NCgl9KTsNCglqUXVlcnko JyMnK3NraW5IYW5kbGUrJyBhJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlz KS5hdHRyKCJocmVmIiwgIj9ldmVudD17JHNtZF9hdF9ldmVudH0mc2tpbj0iKygoc2tpbj09 J25ldycpPyAnJyA6IHNraW4pKyImc3RlcD0iK3N0ZXArIiZuZXdfc2tpbj0iK2pRdWVyeSgn Iycrc2tpbkhhbmRsZSsnIGlucHV0JykudmFsKCkrIiZwYWdlPSIreyRwYWdlfSk7DQoJfSk7 DQoNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmtleXVwKGZ1bmN0aW9uICgp IHsNCgkJdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlfXHg3 Zi1ceGZmXS9nLCcnKTsNCgkJd2hpbGUgKHRoaXMudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlz LnZhbHVlLnN1YnN0cmluZygwLDEpLm1hdGNoKC9bMC05XS8pKSB7DQoJCQl0aGlzLnZhbHVl ID0gdGhpcy52YWx1ZS5zdWJzdHJpbmcoMSk7DQoJCX0NCgl9KTsNCg0KCXJldHVybiBmYWxz ZTsNCn0NCjwvc2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRfaGlkZGVu IHsNCglkaXNwbGF5Om5vbmU7DQoJbWFyZ2luOjVweDsNCn0NCiNzbWRfY29udHJvbCB7DQoJ bWFyZ2luOjAgYXV0bzsNCn0NCiNzbWRfY29udHJvbCB0ZCAucHVibGlzaCB7DQoJbWFyZ2lu LWxlZnQ6NTBweDsNCn0NCiNzbWRfY29udHJvbCAudXBsb2FkLWZvcm0gew0KCXBhZGRpbmc6 MDsNCn0NCi5zbWRfZ3JpZCB7DQoJd2lkdGg6OTYwcHg7DQoJbWFyZ2luOjAgYXV0bzsNCn0N Ci5zbWRfY2VsbCB7DQoJZmxvYXQ6bGVmdDsNCglwYWRkaW5nOjEwcHg7DQoJbWFyZ2luOjEw cHg7DQoJYm9yZGVyOjFweCByaWRnZSAjY2NjOw0KCXdpZHRoOnskdHd9cHg7DQoJaGVpZ2h0 OnskdGh9cHg7DQp9DQouc21kX2NlbGw6aG92ZXIgew0KCWJhY2tncm91bmQ6I2RkZDsNCn0N Ci5zbWRfY2xlYXIgew0KCWNsZWFyOmJvdGg7DQp9DQouc21kX2F1dGgsDQouc21kX2FjdGlv bnMgew0KCXRleHQtYWxpZ246Y2VudGVyOw0KCW1hcmdpbjo1cHggMDsNCn0NCjwvc3R5bGU+ DQpFT0pTOw0KDQoJLy8gTGlzdCB0aGUgYXZhaWxhYmxlIHNraW5zDQoJZWNobyBzdGFydFRh YmxlKCdzbWRfY29udHJvbCcsJycsJycsNSk7DQoJZWNobyB0cigNCgkJdGRhKHVwbG9hZF9m b3JtKHNtZF9hdF9nVHh0KCdpbnN0YWxsX3NraW4nKSwgJycsICdzbWRfYXRfaW1wb3J0Jywg JHNtZF9hdF9ldmVudCwgJycsICRtYXhfZmlsZV9zaXplKSwgJyBjb2xzcGFuPSIyIicpDQoJ CS50ZGEoZm9ybShmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfYXRfZ1R4dCgnc2V0 dXAnKSwgJ3B1Ymxpc2gnKS5zSW5wdXQoJ3NtZF9hdF9zZXR1cCcpLmVJbnB1dCgkc21kX2F0 X2V2ZW50KSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykN CgkpOw0KCWVjaG8gZW5kVGFibGUoKTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIG5h bWU9Imxvbmdmb3JtIiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJJG5ld2J0biA9 ICcgJy4nPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQu YS4nc3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49IiBvbmNsaWNrPSJyZXR1cm4gc21kX2dl dHZhbChcJ25ld1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsiPicuc21kX2F0X2dUeHQoJ25ldycp Lic8L2E+Jw0KCQkuICc8ZGl2IGlkPSJwb3BfbmV3IiBjbGFzcz0ic21kX3BvcHVwIHNtZF9o aWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQoJ25ld19za2luJykuJzwvc3Bhbj48aW5wdXQg dHlwZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIgdmFsdWU9IiIgLz4gPGEgaHJlZj0i IyI+Wycuc21kX2F0X2dUeHQoJ2NvbmZpcm0nKS4nXTwvYT48L2Rpdj4nOw0KCSRyZXBvYnRu ID0gJyAnLic8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iJy4kc21kX2F0X3RoZW1lX3JlcG8u JyI+Jy5zbWRfYXRfZ1R4dCgnZmluZF90aGVtZScpLic8L2E+JzsNCgkkaGRyb3cgPSBoZWQo c21kX2F0X2dUeHQoJ2xpc3RfdGl0bGUnKS4gJyAnLiBzbWRfYXRfZ1R4dCgnaGVscF9saW5r JywgYXJyYXkoJ3tsaW5rfScgPT4gJGhlbHBMaW5rKSksIDMpOw0KCWlmICgkbGF5b3V0PT0i MCIpIHsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0JywnJywnJyw1KTsNCgkJZWNobyB0cigN CgkJCXRkYSgkaGRyb3cuJHJlcG9idG4uJG5ld2J0biwgJyBjb2xzcGFuPSI3IicpDQoJCSk7 DQoJCWVjaG8gdHIoDQoJCQlhc3NIZWFkKA0KCQkJCXNtZF9hdF9nVHh0KCdza2luX2dibCcp LA0KCQkJCSdhdXRob3InLA0KCQkJCWdUeHQoJ3ZlcnNpb24nKSwNCgkJCQknZGVzY3JpcHRp b24nLA0KCQkJCXNtZF9hdF9nVHh0KCdhY3Rpb25zJykNCgkJCQkpDQoJCSk7DQoJfSBlbHNl IHsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2dyaWQiPjxkaXYgY2xhc3M9InNtZF9uZXdy b3ciPicuJGhkcm93LiRyZXBvYnRuLiRuZXdidG4uJzwvZGl2Pic7DQoJfQ0KCWlmKCBpc19j YWxsYWJsZSgnZnNvY2tvcGVuJykgKQ0KCQkkdHJhbnNwb3J0ID0gJ2Zzb2NrJzsNCgllbHNl aWYoIGlzX2NhbGxhYmxlKCdjdXJsX2luaXQnKSApIHsNCgkJJHRyYW5zcG9ydCA9ICdjdXJs JzsNCgl9IGVsc2Ugew0KCQkkdHJhbnNwb3J0ID0gJyc7DQoJfQ0KDQoJJGZlZWQgPSAnJzsN Cglzd2l0Y2ggKCR0cmFuc3BvcnQpIHsNCgkJY2FzZSAnY3VybCc6DQoJCQkkYyA9IGN1cmxf aW5pdCgpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVVJMLCAkc21kX2F0X2ZlZWR1 cmwpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfUkVGRVJFUiwgaHUpOw0KCQkJY3Vy bF9zZXRvcHQoJGMsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOw0KCQkJY3VybF9z ZXRvcHQoJGMsIENVUkxPUFRfVkVSQk9TRSwgZmFsc2UpOw0KCQkJY3VybF9zZXRvcHQoJGMs IENVUkxPUFRfVElNRU9VVCwgMTApOw0KCQkJJGZlZWQgPSBjdXJsX2V4ZWMoJGMpOw0KCQkJ YnJlYWs7DQoJCWNhc2UgJ2Zzb2NrJzoNCgkJCSR1cmwgPSBwYXJzZV91cmwoJHNtZF9hdF9m ZWVkdXJsKTsNCgkJCSRmcCA9IGZzb2Nrb3BlbiAoJHVybFsnaG9zdCddLCA4MCwgJGVycm5v LCAkZXJyc3RyLCAxMCk7DQoJCQkkcXJ5ID0gJ0dFVCAnLiRzbWRfYXRfZmVlZHVybDsNCgkJ CSRxcnkgLj0gIiBIVFRQLzEuMFxyXG5cclxuIjsNCg0KCQkJZnB1dHMoJGZwLCAkcXJ5KTsN CgkJCXN0cmVhbV9zZXRfdGltZW91dCgkZnAsIDEwKTsNCgkJCSRpbmZvID0gc3RyZWFtX2dl dF9tZXRhX2RhdGEoJGZwKTsNCg0KCQkJJGhkcnMgPSB0cnVlOw0KCQkJd2hpbGUgKCghZmVv ZigkZnApKSAmJiAoISRpbmZvWyd0aW1lZF9vdXQnXSkpIHsNCgkJCQkkbGluZSA9IGZnZXRz KCRmcCwgODE5Mik7DQoJCQkJJGxpbmUgPSBwcmVnX3JlcGxhY2UoIltcclxuXSIsICIiLCAk bGluZSk7DQoJCQkJaWYgKCRoZHJzID09IGZhbHNlKSB7DQoJCQkJCSRmZWVkIC49ICRsaW5l LiJcbiI7DQoJCQkJfQ0KCQkJCWlmIChzdHJsZW4oJGxpbmUpID09IDApICRoZHJzID0gZmFs c2U7DQoJCQl9DQoJCQlpZiAoJGluZm9bJ3RpbWVkX291dCddKSB7DQoJCQkJJGZlZWQgPSAn JzsNCgkJCX0NCgkJCWZjbG9zZSgkZnApOw0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkk ZmVlZCA9ICcnOw0KCX0NCg0KCSRzbWRfYXRfdmxhc3QgPSAnJzsNCgkkZmVlZHMgPSBhcnJh eSgpOw0KCWlmIChpc3NldCgkcHJlZnNbJ3NtZF9hdF92ZXJzaW9ucyddKSAmJiBpc3NldCgk cHJlZnNbJ3NtZF9hdF92bGFzdCddKSkgew0KCQlpZiAodGltZSgpIC0gJHByZWZzWydzbWRf YXRfdmxhc3QnXSA8IDg2NDAwKSB7DQoJCQkvLyBMYXN0IHVwZGF0ZWQgd2l0aGluIHRoZSBs YXN0IGRheSwgc28gcmVhZCB0aGUgY2FjaGVkIHZlcnNpb24gbnVtYmVycw0KCQkJJGZlZWRz ID0gdW5zZXJpYWxpemUoJHByZWZzWydzbWRfYXRfdmVyc2lvbnMnXSk7DQoJCX0NCgl9DQoJ aWYgKCEkZmVlZHMgfHwgZ3BzKCdyZWFkX3ZlcnNpb25zJykpIHsNCgkJJGZlZWRzID0gc21k X2F0X2ZlZWQoJGZlZWQpOw0KCQkkaW5zdGFsbGVkX2ZlZWQgPSBhcnJheSgpOw0KCQkkZmVl ZHMgPSAoaXNfYXJyYXkoJGZlZWRzKSkgPyAkZmVlZHMgOiBhcnJheSgpOw0KDQoJCS8vIE9u bHkgcmVjb3JkIHRoZSB2ZXJzaW9uIGluZm8gZnJvbSB0aGVtZXMgdGhhdCBhcmUgaW5zdGFs bGVkDQoJCWZvcmVhY2goJHNraW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7DQoJCQkkZmVlZF9z a2luX25hbWUgPSBzdHJfcmVwbGFjZSgnXycsICctJywgJHNraW5fbmFtZSk7IC8vIFVuc2Fu aXRpemUgdGhlIHVybF90aXRsZQ0KCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJGZlZWRfc2tp bl9uYW1lLCAkZmVlZHMpKSB7DQoJCQkJJGluc3RhbGxlZF9mZWVkWyRmZWVkX3NraW5fbmFt ZV0gPSAkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXTsNCgkJCX0NCgkJfQ0KCQlzZXRfcHJlZign c21kX2F0X3ZsYXN0JywgdGltZSgpLCAkc21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3Rl eHRfaW5wdXQnKTsNCgkJc2V0X3ByZWYoJ3NtZF9hdF92ZXJzaW9ucycsIHNlcmlhbGl6ZSgk aW5zdGFsbGVkX2ZlZWQpLCAkc21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5w dXQnKTsNCgl9DQoNCglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luX25hbWUpIHsNCgkJ Ly8gUmVhZCBlYWNoIG1hbmlmZXN0IGFuZCBzZXQgdXAgdGhlIGxhYmVscw0KCQkkc2tpbmZv ID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luX25hbWUpOw0KCQkkZmVlZF9za2luX25hbWUg PSBzdHJfcmVwbGFjZSgnXycsICctJywgJHNraW5fbmFtZSk7IC8vIFVuc2FuaXRpemUgZm9y IHVybF90aXRsZSBtYXRjaGluZw0KDQoJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1i KCRza2luZm8sIDEpOw0KCQkkdGhpc19za2luID0gKCRza2luZm8pID8gKCgkc2tpbl9uYW1l ID09ICRjdXJyX3NraW4pID8gc3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1sn ZG5hbWUnXSkgOiAkc2tpbl9uYW1lOw0KCQkkaXNfZ2JsID0gKCRza2luX25hbWUgPT0gJGF0 X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgPyBzbWRfYXRfZ1R4dCgnaXNfZ2xvYmFs JykgOiAnJzsNCgkJJHRodW1yb3cgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVu dC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gnLmEuJ25leHRzdGVwPXNtZF9hdF9saXN0Jy5hLidz a2luPScuJHNraW5fbmFtZS5hLidwYWdlPScuJHBhZ2UuJyIgdGl0bGU9Iicuc21kX2F0X2dU eHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4uJGlzX2dibC4oKCRza2luZm8gJiYg JHNraW5mb1snYmFzZWRfb24nXSkgPyBzbWRfYXRfZ1R4dCgnYmFzZWRfb24nLCBhcnJheSgn e3NraW59JyA9PiAkc2tpbmZvWydiYXNlZF9vbiddKSkgOiAnJykuKCgkdGh1bWJuYWlsKSA/ ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9hPic7DQoJCSRhdXRocm93 ID0gKCgkc2tpbmZvICYmIHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJpJ10sICJodHRwOi8v IikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3VyaSddLiciPicuJHNr aW5mb1snYXV0aG9yJ10uJzwvYT4nIDogKCgkc2tpbmZvKSA/ICRza2luZm9bJ2F1dGhvcidd IDogJy0nKSk7DQoJCSRhY3Ryb3cgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVu dC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW5fbmFtZS4nIj5bJy5nVHh0 KCdlZGl0JykuJ108L2E+Jw0KCQkJLiAnICcgLigoJHNraW5mbykgPyAnPGEgaHJlZj0iP2V2 ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9jbG9uZScuYS4nc2tpbj0nLiRz a2luX25hbWUuJyIgb25jbGljaz0icmV0dXJuIHNtZF9nZXR2YWwoXCcnLiRza2luX25hbWUu J1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsiPlsnLnNtZF9hdF9nVHh0KCdjbG9uZScpLiddPC9h PicgOiAnJykNCgkJCS4gJyAnIC4oKCRza2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRz bWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZXhwb3J0Jy5hLidza2luPScuJHNraW5fbmFt ZS4nIiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldGNydXNoKFwnJy4kc2tpbl9uYW1lLidcJyk7 Ij5bJy5zbWRfYXRfZ1R4dCgnZXhwb3J0JykuJ108L2E+JyA6ICcnKQ0KCQkJLiAnICcgLigo aW5fYXJyYXkoJHNraW5fbmFtZSwgJHNtZF9jb3JlX3RoZW1lcykgfHwgaW5fYXJyYXkoJHNr aW5fbmFtZSwgJGJhc2VzKSkgPyAnJyA6ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2 ZW50LmEuJ3N0ZXA9c21kX2F0X2RlbGV0ZScuYS4nc2tpbj0nLiRza2luX25hbWUuYS4ncGFn ZT0nLiRwYWdlLiciIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy5zbWRfYXRfZ1R4dCgn ZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgne3NraW59JyA9PiAkc2tpbl9uYW1lKSkuJ1wnKTsi PlsnLmdUeHQoJ2RlbGV0ZScpLiddPC9hPicpDQoJCQkuICc8ZGl2IGlkPSJwb3BfJy4kc2tp bl9uYW1lLiciIGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRf Z1R4dCgnbmV3X2Nsb25lc2tpbicpLic8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9 InNtZF90ZXh0X25hbWUiIHZhbHVlPSIiIC8+IDxhIGhyZWY9IiMiPiZuYnNwO1snLnN0cm9u ZyhzbWRfYXRfZ1R4dCgnY29uZmlybScpKS4nXTwvYT48L2Rpdj4nDQoJCQkuICc8ZGl2IGlk PSJjcnVzaF8nLiRza2luX25hbWUuJyIgY2xhc3M9InNtZF9wb3B1cCBzbWRfaGlkZGVuIj48 c3Bhbj4nLnNtZF9hdF9nVHh0KCdjcnVzaF9mb3JtYXQnKS4nPC9zcGFuPicucmFkaW9TZXQo JGNydXNoZXJzLCAkc2tpbl9uYW1lLidfY3J1c2gnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jcnVz aCddKS4nPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdjb25maXJt JykpLiddPC9hPjwvZGl2Pic7DQoJCSR2ZXJvdyA9ICgkc2tpbmZvKSA/ICgoaXNzZXQoJGZl ZWRzWyRmZWVkX3NraW5fbmFtZV0pICYmIGlzc2V0KCRmZWVkc1skZmVlZF9za2luX25hbWVd WydzdW1tYXJ5J10pICYmIHZlcnNpb25fY29tcGFyZSgkZmVlZHNbJGZlZWRfc2tpbl9uYW1l XVsnc3VtbWFyeSddLCRza2luZm9bJ3ZlcnNpb24nXSk9PT0xKSA/ICc8YSBocmVmPSInLiRm ZWVkc1skZmVlZF9za2luX25hbWVdWydsaW5rJ10uJyIgc3R5bGU9ImZvbnQtd2VpZ2h0OmJv bGQ7Y29sb3I6Izk5MDAwMDsiPicuc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2 ZXJzaW9uJ10uJzwvYT4nIDogc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJz aW9uJ10pIDogJyc7DQoNCgkJaWYgKCRsYXlvdXQ9PTApIHsNCgkJCWVjaG8gdHIoDQoJCQkJ dGQoJHRodW1yb3cpDQoJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJLnRkKCR2ZXJvdykN CgkJCQkudGQoKCgkc2tpbmZvKT8gJHNraW5mb1snZGVzY3JpcHRpb24nXSA6ICctJykuKCgk c2tpbmZvICYmICRza2luZm9bJ2hlbHAnXSkgPyAnICcuaHJlZignWycuZ1R4dCgnaGVscCcp LiddJywgJHNraW5mb1snaGVscCddKSA6ICcnKSwgMjUwKQ0KCQkJCS50ZCgkYWN0cm93LDI2 MCkNCgkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHlsZT0iYmFja2dy b3VuZDojZThlOGU4OyInIDogJycpDQoJCQkpOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAnPGRp diBjbGFzcz0ic21kX2NlbGwiJy4oKCRza2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIHN0 eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7IicgOiAnJykuJz4nOw0KCQkJZWNobyAnPGRpdj4n LiR0aHVtcm93Lic8L2Rpdj4nOw0KCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgiPicu JHZlcm93LnNtZF9hdF9nVHh0KCdieScpLiRhdXRocm93Lic8L2Rpdj4nOw0KCQkJZWNobyAn PGRpdiBjbGFzcz0ic21kX2FjdGlvbnMiPicuJGFjdHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8g JzwvZGl2Pic7DQoJCX0NCgl9DQoNCi8vCWVjaG8gdGRhKHNlbGVjdF9idXR0b25zKCkgLiBl dmVudF9tdWx0aWVkaXRfZm9ybSgkc21kX2F0X2V2ZW50LCBOVUxMLCAkcGFnZSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCksICcgY29sc3Bhbj0iNSIgc3R5bGU9InRleHQtYWxpZ246IHJp Z2h0OyBib3JkZXI6IG5vbmU7IicpOw0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyAn PC90ZD48L3RyPic7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8 ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwvZGl2PjwvZGl2Pic7DQoJfQ0KCWVjaG8gJzwvZm9y bT4nOw0KCWVjaG8gbi5uYXZfZm9ybSgkc21kX2F0X2V2ZW50LCAkcGFnZSwgJG51bVBhZ2Vz LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsNCgllY2hvIG4ucGFnZWJ5X2Zvcm0oJHNtZF9h dF9ldmVudCwgJHBhZ2VieSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkKCRmZWVkKSB7 DQoJZ2xvYmFsICRmZWVkczsNCg0KCSRmZWVkPXByZWdfcmVwbGFjZSgiLz4iLiJbWzpzcGFj ZTpdXSsiLiI8L2kiLCAiPjwiLCAkZmVlZCk7IC8vIEtpbGwgd2hpdGVzcGFjZSBpbiBmZWVk DQoJJHhtbHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCk7DQoJeG1sX3NldF9lbGVtZW50 X2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF9hdF9mZWVkX3N0YXJ0X3RhZyIsICJzbWRfYXRf ZmVlZF9lbmRfdGFnIik7DQoJeG1sX3NldF9jaGFyYWN0ZXJfZGF0YV9oYW5kbGVyKCR4bWxw YXJzZXIsICJzbWRfYXRfZmVlZF90YWdfY29udGVudHMiKTsNCgl4bWxfcGFyc2UoJHhtbHBh cnNlciwgJGZlZWQpOw0KCXhtbF9wYXJzZXJfZnJlZSgkeG1scGFyc2VyKTsNCg0KCXJldHVy biAkZmVlZHM7DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3N0YXJ0X3RhZygkcGFyc2Vy LCAkbmFtZSwgJGF0dHJpYnMpIHsNCglnbG9iYWwgJHNtZF9hdF9mZWVkaW4sICRzbWRfYXRf ZmVlZHRhZzsNCglpZiAoJG5hbWUgPT0gIkVOVFJZIikgew0KCQkkc21kX2F0X2ZlZWRpbiA9 IHRydWU7DQoJfQ0KCWlmICgkc21kX2F0X2ZlZWRpbikgew0KCQkkc21kX2F0X2ZlZWR0YWcg PSAkbmFtZTsNCgl9DQp9DQpmdW5jdGlvbiBzbWRfYXRfZmVlZF9lbmRfdGFnKCRwYXJzZXIs ICRuYW1lKSB7DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWcsICRz bWRfYXRfZmVlZG5hbWU7DQoJaWYgKCRuYW1lID09ICJFTlRSWSIpIHsNCgkJJHNtZF9hdF9m ZWVkaW4gPSBmYWxzZTsNCgkJJHNtZF9hdF9mZWVkbmFtZSA9ICcnOw0KCX0NCn0NCg0KZnVu Y3Rpb24gc21kX2F0X2ZlZWRfdGFnX2NvbnRlbnRzKCRwYXJzZXIsICRkYXRhKSB7DQoJZ2xv YmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWcsICRzbWRfYXRfZmVlZG5hbWUs ICRmZWVkczsNCglpZiAoJHNtZF9hdF9mZWVkaW4pIHsNCgkJaWYgKCRzbWRfYXRfZmVlZHRh ZyA9PSAiTkFNRSIpIHsNCgkJCSRmZWVkc1skZGF0YV0gPSAnJzsNCgkJCSRzbWRfYXRfZmVl ZG5hbWUgPSAkZGF0YTsNCgkJfQ0KCQlpZiAoaXNzZXQoJGZlZWRzWyRzbWRfYXRfZmVlZG5h bWVdKSkgew0KCQkJaWYgKCRzbWRfYXRfZmVlZHRhZyA9PSAiVElUTEUiIHx8ICRzbWRfYXRf ZmVlZHRhZyA9PSAiU1VNTUFSWSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJVUERBVEVEIiB8 fCAkc21kX2F0X2ZlZWR0YWcgPT0gIklEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIkxJTksi KSB7DQoJCQkJJGZlZWRzWyRzbWRfYXRfZmVlZG5hbWVdW3N0cnRvbG93ZXIoJHNtZF9hdF9m ZWVkdGFnKV0gPSAkZGF0YTsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBSZW1vdmUgaGFyZCBzcGFjZXMgaW4gdGhlIHVwbG9hZF9mb3Jt IHNvIE9wZXJhIGFuZCBJRSB3cmFwIHRoZSBidXR0b25zDQpmdW5jdGlvbiBzbWRfYXRfdXBs b2FkX2Zvcm0oJGV2ZW50LCAkc3RlcCwgJGRhdGEsICRhcmdzKSB7DQoJcmV0dXJuIHN0cl9y ZXBsYWNlKCcmIzE2MDsnLCAnICcsICRkYXRhKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZWRpdCgkbWVzc2FnZT0nJykgew0KCWdsb2Jh bCAkc21kX2F0X2V2ZW50Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4n LCAnbmV3X3NraW4nLCAnZmlsZScpKSkpOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9w cmVmcygpOw0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10p KSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddIDogMTsNCg0KCSRlZGl0YWJsZSA9IGFy cmF5KCJzc2MiLCAiY3NzIiwgImpzIiwgInBocCIpOw0KCSRpbWFnYWJsZSA9IGFycmF5KCJq cGciLCAianBlZyIsICJnaWYiLCAicG5nIik7DQoJJG1heF9maWxlX3NpemUgPSAyICogMTAy NCAqIDEwMjQ7DQoNCgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsNCgkk ZmlsZSA9IChlbXB0eSgkbmV3X3NraW4pKSA/ICRmaWxlIDogJG5ld19za2luOw0KCSRmaWxl cyA9IHNtZF9hdF9saXN0ZGlyKFRIRU1FLiRza2luKTsNCglzb3J0KCRmaWxlcyk7DQoNCgkv LyBTcGxpdCB0aGUgbGlzdCBpbnRvIGl0cyBkaXJlY3RvcnkgZ3JvdXBzDQoJJGFsbGZpbGVz ID0gYXJyYXkoKTsNCglmb3JlYWNoICgkZmlsZXMgYXMgJGN1cnJmaWxlKSB7DQoJCSRmaWxl X2luZm8gPSBwYXRoaW5mbygkY3VycmZpbGUpOw0KCQkvLyBJZ25vcmUgYW55IHJvZ3VlIFN1 YnZlcnNpb24gZmlsZXMNCgkJaWYgKHN0cnBvcygkZmlsZV9pbmZvWydkaXJuYW1lJ10sICcv LnN2bicpID09PSBmYWxzZSkgew0KCQkJJGZpbGVfdHlwZSA9IChpc3NldCgkZmlsZV9pbmZv WydleHRlbnNpb24nXSkpID8gJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10gOiAnb3RoZXInOw0K CQkJJGFsbGZpbGVzWyRmaWxlX3R5cGVdW10gPSAkY3VycmZpbGU7DQoJCX0NCgl9DQoNCglp ZiAoZ3BzKCdzbWRfYXRfZWRpdHMnKSkgew0KCQkkY29udGVudHMgPSBkb1N0cmlwKHN0cl9y ZXBsYWNlKCdcclxuJywnDQonLGdwcygnc21kX2F0X2VkaXRzJykpKTsgLy8gbmV3bGluZSB3 b3JrYXJvdW5kDQoJfSBlbHNlIHsNCgkJJGNvbnRlbnRzID0gJyc7DQoJCWlmICgkZmlsZSAm JiBmaWxlX2V4aXN0cyhUSEVNRS4kc2tpbi5EUy4kZmlsZSkpIHsNCgkJCSRjb250ZW50cyA9 IGZpbGUoVEhFTUUuJHNraW4uRFMuJGZpbGUpOw0KCQkJJGNvbnRlbnRzID0gam9pbigiIiwg JGNvbnRlbnRzKTsNCgkJfQ0KCX0NCg0KCS8vIEJlZ2luIHJlbmRlcmluZyB0aGUgcGFnZQ0K CXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ2VkaXRfbGJsJyksJG1lc3NhZ2UpOw0KDQoJZWNobyA8 PDxFT1MNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQojc21kX2F0X2ltYWdlcyB7DQoJbWFy Z2luOjBweCA2cHggLTRweCAwOw0KfQ0KLnNtZF9za2luX2ZpbGV0eXBlcyB7DQoJbWFyZ2lu OjEycHggMDsNCn0NCjwvc3R5bGU+DQpFT1M7DQoNCgkkc2tpbl9saXN0ID0gc21kX2F0X3Jl YWRfc2tpbnMoKTsNCg0KCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZh bHVlIHRvIGJlIHRoZSBzYW1lIGluIHRoaXMgY2FzZQ0KCSRza2luc2VsID0gYXJyYXkoKTsN Cglmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkkc2tpbnNl bFskdmFsdWUxXSA9ICRza2luX2xpc3RbJGtleTFdOw0KICAgfQ0KCSRza2luQ2hhbmdlID0g Jzxmb3JtIG5hbWU9InNraW5jaGFuZ2UiIGFjdGlvbj0iaW5kZXgucGhwIj4nDQoJCS4gZUlu cHV0KCRzbWRfYXRfZXZlbnQpDQoJCS4gc0lucHV0KCdzbWRfYXRfZWRpdCcpDQoJCS4gc2Vs ZWN0SW5wdXQoJ3NraW4nLCAkc2tpbnNlbCwgJHNraW4sIDAsIDEpDQoJCS4gJzwvZm9ybT4n Ow0KDQoJJGZpbGVMaXN0ID0gaGVkKHNtZF9hdF9nVHh0KCdza2luX2ZpbGVzJyksMikNCgkJ LiAkc2tpbkNoYW5nZQ0KCQkuIHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVmdCcsICdzbWRfc2tp bl9maWxldHlwZXMnKTsNCgkkZmlsZUxpc3QgLj0gJzxiciAvPjxhIGNsYXNzPSJuYXZsaW5r IiBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X25ld2ZpbGUn LmEuJ3NraW49Jy4kc2tpbi4nIj4nLnNtZF9hdF9nVHh0KCduZXdfZmlsZScpLic8L2E+JzsN CgkkZmlsZUxpc3QgLj0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNt ZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdza2luX2xp c3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJG90aGVycyA9IGFycmF5KCk7 DQoNCglmb3JlYWNoICgkZWRpdGFibGUgYXMgJGZpbGV0eXBlKSB7DQoJCWlmIChpc3NldCgk YWxsZmlsZXNbJGZpbGV0eXBlXSkpIHsNCgkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZmlsZXR5 cGVdIGFzICRpZHggPT4gJGN1cnJmaWxlKSB7DQoJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJ CQkkZmlsZUxpc3QgLj0gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCRmaWxldHlwZSksMykpKTsN CgkJCQl9DQoJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkkYmFz ZWZpbGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJJGVk aXQgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9l ZGl0Jy5hLidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUg PT0gJGp1c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7 DQoJCQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygkc21kX2F0 X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tpbics ICRza2luKTsNCgkJCQkkZmlsZUxpc3QgLj0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJ CX0NCgkJfSBlbHNlIHsNCgkJCS8vIFNvbWUgb3RoZXIgZmlsZSB0eXBlDQoJCQlpZiAoISRv dGhlcnMpIHsNCgkJCQlmb3JlYWNoICgkYWxsZmlsZXMgYXMgJGZ0eXBlID0+ICRmbHMpIHsN CgkJCQkJaWYgKCFpbl9hcnJheSgkZnR5cGUsIGFycmF5X21lcmdlKCRlZGl0YWJsZSwgJGlt YWdhYmxlKSkpIHsNCgkJCQkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZnR5cGVdIGFzICRpZHgg PT4gJGN1cnJmaWxlKSB7DQoJCQkJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxl KTsNCgkJCQkJCQkkYmFzZWZpbGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3Rm aWxlKSk7DQoJCQkJCQkJJGVkaXQgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVu dC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0 ZmlsZS4nIj4nLigoJGZpbGUgPT0gJGp1c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDog JGp1c3RmaWxlKS4nPC9hPic7DQoJCQkJCQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4p ID8gJycgOiBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywg JGp1c3RmaWxlLCAxLCAnc2tpbicsICRza2luKTsNCgkJCQkJCQkkb3RoZXJzW10gPSB0cih0 ZCgkZWRpdCkudGQoJGRlbCkpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9 DQoJfQ0KCSRmaWxlTGlzdCAuPSAoJG90aGVycykgPyB0cih0ZChoZWQoc21kX2F0X2dUeHQo J290aGVyX2ZpbGVzJyksMykpKS4gam9pbihuLCAkb3RoZXJzKSA6ICcnOw0KCSRmaWxlTGlz dCAuPSBlbmRUYWJsZSgpOw0KDQoJLy8gTWFrZSB0aGUgbGlzdCBvZiBpbWFnZXMgZm9yIHRo aXMgc2tpbg0KCSRxcyA9IGFycmF5KA0KCQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJ CSJzdGVwIiA9PiAnc21kX2F0X2RlbGV0ZV9pbWFnZScsDQoJKTsNCgkkc2VsW10gPSAnPGZv cm0gbWV0aG9kPSJwb3N0IiBpZD0ic21kX2F0X2ltYWdlZm9ybSIgbmFtZT0ic21kX2F0X2lt YWdlZm9ybSIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRzZWxbXSA9ICc8c2Vs ZWN0IGlkPSJzbWRfYXRfaW1hZ2VzIiBuYW1lPSJzbWRfYXRfaW1hZ2VzW10iIGNsYXNzPSJs aXN0IiBzaXplPSIyNCIgbXVsdGlwbGU9Im11bHRpcGxlIiBzdHlsZT0id2lkdGg6MTU0cHg7 Ij4nOw0KDQoJaWYgKGRlZmluZWQoJ0dMT0JfQlJBQ0UnKSkgew0KCQkkaW1nID0gZ2xvYihU SEVNRS4kc2tpbi5EUy4neyouanBnLCouZ2lmLCoucG5nfScsIEdMT0JfQlJBQ0UpOw0KCX0g ZWxzZSB7DQoJCSRpbWcgPSBhcnJheV9tZXJnZShnbG9iKFRIRU1FLiRza2luLkRTLicqLmpw ZycpLGdsb2IoVEhFTUUuJHNraW4uRFMuJyouZ2lmJyksZ2xvYihUSEVNRS4kc2tpbi5EUy4n Ki5wbmcnKSk7DQoJfQ0KDQoJaWYoaXNfYXJyYXkoJGltZykpIHsNCgkJZm9yZWFjaCAoJGlt ZyBhcyAkaW1nZmlsZSkgew0KCQkJJHNlbFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0iJy4kaW1n ZmlsZS4nIj4nLmJhc2VuYW1lKCRpbWdmaWxlKS4nPC9vcHRpb24+JzsNCgkJfQ0KCX0NCgkk c2VsW10gPSAnPC9zZWxlY3Q+JzsNCgkkc2VsW10gPSBkTGluaygkc21kX2F0X2V2ZW50LCAn c21kX2F0X2RlbGV0ZV9pbWFnZScsICdza2luJywgJHNraW4sIDEpOw0KCSRzZWxbXSA9ICc8 L2Zvcm0+JzsNCgkkc2VsID0gam9pbignJywkc2VsKTsNCg0KCS8vIEltYWdlIHBvcnRpb24N CgkkaW1nYml0ID0gaGVkKHNtZF9hdF9nVHh0KCdza2luX2ltYWdlcycpLCAyKSAuIHN0YXJ0 VGFibGUoJ2xpc3QnLCAnbGVmdCcpOw0KCSRpbWdiaXQgLj0gdHIodGQoJHNlbCkpOw0KCSRp bWdiaXQgLj0gdHIodGQodXBsb2FkX2Zvcm0oc21kX2F0X2dUeHQoJ3VwbG9hZF9pbWFnZScp LCAnJywgJ3NtZF9hdF91cGxvYWRfaW1hZ2UnLCAkc21kX2F0X2V2ZW50LCAkc2tpbiwgJG1h eF9maWxlX3NpemUsICcnLCAnJyksIDE1MCkpOw0KCSRpbWdiaXQgLj0gZW5kVGFibGUoKTsN Cg0KCS8vIFJlbmRlciB0aGUgcmVzdCBvZiB0aGUgcGFnZQ0KCWVjaG8gc3RhcnRUYWJsZSgn ZWRpdCcpLg0KCXRyKA0KCQl0ZHRsKCRpbWdiaXQpLg0KCQl0ZCgNCgkJCWhlZCgoKCRza2lu Zm8pID8gJHNraW5mb1snZG5hbWUnXSA6ICRza2luKSwxKS4NCgkJCWZvcm0oDQoJCQkJJzxp bnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfc2tpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxj aGFycygkZmlsZSkuJyIgY2xhc3M9ImVkaXQiIHNpemU9IjQwIiB0YWJpbmRleD0iMiIgc3R5 bGU9Im1hcmdpbi1ib3R0b206MTBweDsiIC8+Jy5icg0KCQkJCS4nPHRleHRhcmVhIGlkPSJz bWRfYXRfZWRpdHMiIGNsYXNzPSJjb2RlIiBuYW1lPSJzbWRfYXRfZWRpdHMiIGNvbHM9Ijc2 IiByb3dzPSIzMiI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb250ZW50cykuJzwvdGV4dGFyZWE+ Jy5icg0KCQkJCS5mSW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJykN CgkJCQkuZUlucHV0KCRzbWRfYXRfZXZlbnQpLnNJbnB1dCgnc21kX2F0X3NhdmUnKQ0KCQkJ CS5oSW5wdXQoJ3NraW4nLCRza2luKQ0KCQkJCS5oSW5wdXQoJ2ZpbGUnLCRmaWxlKQ0KCQkJ KQ0KCQkpLg0KCQl0ZHRsKCRmaWxlTGlzdCkNCgkpLg0KCWVuZFRhYmxlKCk7DQoNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBKdXN0IGNsZWFyIG91dCB0aGUgdmFy IHNvIHRoZSBzYXZlIGZ1bmN0aW9uIHRyZWF0cyB0aGUgY29udGVudCBhcyBhIG5ldyBmaWxl DQpmdW5jdGlvbiBzbWRfYXRfbmV3ZmlsZSgpIHsNCgkkX1BPU1RbJ2ZpbGUnXSA9ICcnOw0K CSRtZXNzYWdlPScnOw0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfY2xvbmUoKSB7DQoJZ2xvYmFs ICR0eHBfdXNlcjsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25l d19za2luJykpKSk7DQoJJG1zZz0nJzsNCg0KCSRuZXdfc2tpbiA9IHRyaW0oJG5ld19za2lu KTsNCgkkbmV3X3NraW4gPSByYXd1cmxlbmNvZGUoJG5ld19za2luKTsNCg0KCWlmIChlbXB0 eSgkbmV3X3NraW4pKSB7DQoJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnbmFtZV9lbXB0eScpOw0K CX0NCg0KCS8vIENoZWNrIHRoZSBuZXcgbmFtZSBpc24ndCBhbHJlYWR5IGluIHVzZQ0KCSR0 aGVtZXMgPSBzbWRfYXRfcmVhZF9za2lucygpOw0KDQoJaWYgKGluX2FycmF5KCRuZXdfc2tp biwgJHRoZW1lcykpIHsNCgkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2V4aXN0cycsIGFy cmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOw0KCX0NCg0KCS8vIE5vIGVycm9ycywgc28g bWFrZSBhIG5ldyBkaXIgYW5kIGNyZWF0ZSB0aGUgUEhQIGZpbGUNCglpZiAoJG1zZz09Jycp IHsNCgkJJGNvbnRlbnQgPSAnJzsNCgkJJGRlc3RkaXIgPSBUSEVNRS4kbmV3X3NraW4uRFM7 DQoJCSRyZXMgPSBta2RpcigkZGVzdGRpcik7DQoJCSRiYXNlZCA9ICcnOw0KDQoJCWlmICgk c2tpbikgew0KCQkJLy8gQmFzZWQgb24gYW4gZXhpc3RpbmcgdGhlbWUuIE5vIG5lZWQgZm9y IGFueSBmdW5jdGlvbnMgb3RoZXIgdGhhbiBtYW5pZmVzdCgpDQoJCQkkYmFzZWQgPSAidGhl bWU6OmJhc2VkX29uKCciLiRza2luLiInKTsiOw0KCQkJJGV4dGVuZHMgPSAkc2tpbi4nX3Ro ZW1lJzsNCgkJCSRzcmNzcyA9IFRIRU1FLiRza2luLkRTLid0ZXh0cGF0dGVybi5jc3MnOw0K CQkJaWYgKGZpbGVfZXhpc3RzKCRzcmNzcykgJiYgZmlsZXNpemUoJHNyY3NzKSA+IDApIHsN CgkJCQkkaW1wb3J0ID0gam9pbignJywgZmlsZSgkc3Jjc3MpKTsNCgkJCX0gZWxzZSB7DQoJ CQkJJGltcG9ydCA9ICdAaW1wb3J0IHVybCgiLi4vY2xhc3NpYy90ZXh0cGF0dGVybi5jc3Mi KTsnOw0KCQkJfQ0KCQkJJGNvbnRlbnQgPSAneyc7DQoJCX0gZWxzZSB7DQoJCQkvLyBCcmFu ZCBzcGFua2luZyBuZXcgdGhlbWUuIENsb25lICdjbGFzc2ljJyBmdW5jdGlvbnMgdGhlbiBh ZGQgbmV3IG1hbmlmZXN0KCkNCgkJCSRleHRlbmRzID0gJ3RoZW1lJzsNCgkJCSRpbXBvcnQg PSAnJzsNCgkJCSRzcmMgPSB0eHBhdGguRFMuVEhFTUUuJ2NsYXNzaWMnLkRTLidjbGFzc2lj LnBocCc7DQoJCQkkZ3JhYiA9IGZhbHNlOw0KCQkJJGZwID0gZmlsZSgkc3JjKTsNCg0KCQkJ Zm9yZWFjaCgkZnAgYXMgJGxpbmUpIHsNCgkJCQkkbGluZSA9IHJ0cmltKCRsaW5lKTsNCgkJ CQlpZiAoc3RycG9zKCRsaW5lLCAnZnVuY3Rpb24gbWFuaWZlc3QoKScpICE9PSBmYWxzZSkg ew0KCQkJCQkkZ3JhYiA9IGZhbHNlOyAvLyB1bm5lY2Vzc2FyeT8NCgkJCQkJYnJlYWs7DQoJ CQkJfQ0KCQkJCWlmICgkZ3JhYikgew0KCQkJCQkkY29udGVudCAuPSAkbGluZS5uOw0KCQkJ CX0NCgkJCQlpZiAoc3RycG9zKCRsaW5lLCAnY2xhc3MgY2xhc3NpY190aGVtZSBleHRlbmRz IHRoZW1lJykgIT09IGZhbHNlKSB7DQoJCQkJCSRncmFiID0gdHJ1ZTsNCgkJCQl9DQoJCQl9 DQoJCX0NCg0KCQkvLyBtYW5pZmVzdCBmaWVsZHMNCgkJJG1hbnVzZXIgPSBnZXRfYXV0aG9y X25hbWUoJHR4cF91c2VyKTsNCgkJJG1hbnRpdGxlID0gdWN3b3JkcygkbmV3X3NraW4pOw0K DQoJCS8vIFdyaXRlIHRoZSBuZXcgUEhQIGZpbGUNCgkJJGJ1ZiA9IDw8PEVPRg0KPD9waHAN Cg0KaWYgKCFkZWZpbmVkKCd0eHBpbnRlcmZhY2UnKSkgZGllKCd0eHBpbnRlcmZhY2UgaXMg dW5kZWZpbmVkLicpOw0KDQp7JGJhc2VkfQ0KDQpjbGFzcyB7JG5ld19za2lufV90aGVtZSBl eHRlbmRzIHskZXh0ZW5kc30NCnskY29udGVudH0NCg0KCWZ1bmN0aW9uIG1hbmlmZXN0KCkN Cgl7DQoJCXJldHVybiBhcnJheSgNCgkJCSd0aXRsZScJIAkJPT4gJ3skbWFudGl0bGV9JywN CgkJCSdhdXRob3InIAkJPT4gJ3skbWFudXNlcn0nLA0KCQkJJ2F1dGhvcl91cmknIAk9PiAn JywNCgkJCSd2ZXJzaW9uJyAJCT0+ICcxLjAnLA0KCQkJJ2Rlc2NyaXB0aW9uJyAJPT4gJycs DQoJCQknaGVscCcgCQkJPT4gJycsDQoJCSk7DQoJfQ0KfQ0KPz4NCkVPRjsNCg0KCQkkZnAg PSBmb3BlbigkZGVzdGRpci4kbmV3X3NraW4uJy5waHAnLCAid2IiKTsNCgkJZndyaXRlKCRm cCwgJGJ1Zik7DQoJCWZjbG9zZSgkZnApOw0KDQoJCS8vIENyZWF0ZSB0aGUgQ1NTIGZpbGUN CgkJJGZwID0gZm9wZW4oJGRlc3RkaXIuJ3RleHRwYXR0ZXJuLmNzcycsICJ3YiIpOw0KCQlm d3JpdGUoJGZwLCAkaW1wb3J0KTsNCgkJZmNsb3NlKCRmcCk7DQoNCgkJaWYgKCRza2luKSB7 DQoJCQkkbXNnID0gc21kX2F0X2dUeHQoJ3NraW5fY2xvbmVkJywgYXJyYXkoJ3tuYW1lfScg PT4gJG5ld19za2luKSk7Ow0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0KCdz a2luX2NyZWF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTs7DQoJCX0NCg0K Ly8JJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX25vdF9jcmVhdGVkJywgYXJyYXkoJ3tuYW1l fScgPT4gJG5ld19za2luKSk7Ow0KDQoJfQ0KDQoJc21kX2F0X2xpc3QoJG1zZyk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4cG9ydF9v cHRpb25zKCkgew0KCSRzbWRfY3J1c2hlcnMgPSBhcnJheSgndGFyJyA9PiBzbWRfYXRfZ1R4 dCgnY190YXInKSk7DQoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKSB7DQoJ CSRzbWRfY3J1c2hlcnNbJ2d6aXAnXSA9IHNtZF9hdF9nVHh0KCdjX2d6aXAnKTsNCgkJJHNt ZF9jcnVzaGVyc1snemlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgl9DQoJaWYgKGZ1 bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpKSB7DQoJCSRzbWRfY3J1c2hlcnNbJ2J6aXAy J10gPSBzbWRfYXRfZ1R4dCgnY19iemlwMicpOw0KCX0NCglyZXR1cm4gJHNtZF9jcnVzaGVy czsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRf ZXhwb3J0KCkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnM7DQoNCglleHRyYWN0 KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsJ2NydXNoJykpKSk7DQoJJG1lc3NhZ2U9Jyc7 DQoJY2hkaXIoVEhFTUUpOw0KCSRvdXQgPSAkc2tpbjsNCg0KCS8vIENoZWNrIHRoZSBwYXNz ZWQgY29tcHJlc3Npb24gZm9ybWF0IGlzIHZhbGlkOyB1c2UgZGVmYXVsdCBpZiBub3QNCgkk Y3J1c2hlcnMgPSBzbWRfYXRfZXhwb3J0X29wdGlvbnMoKTsNCglpZiAoJGNydXNoPT0nJyB8 fCAkY3J1c2g9PSd1bmRlZmluZWQnIHx8ICFhcnJheV9rZXlfZXhpc3RzKCRjcnVzaCwgJGNy dXNoZXJzKSkgew0KCQkkY3J1c2ggPSBnZXRfcHJlZignc21kX2F0X2NydXNoJywgJHNtZF9h dF9wcmVmc1swXVsnc21kX2F0X2NydXNoJ10pOw0KCX0NCg0KCXN3aXRjaCgkY3J1c2gpIHsN CgkJY2FzZSAnemlwJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3ppcF9maWxlKCRvdXQuJy56 aXAnKTsNCgkJCWJyZWFrOw0KCQljYXNlICdiemlwMic6DQoJCQkkemlwID0gbmV3IHNtZF9h dF9iemlwX2ZpbGUoJG91dC4nLnRiejInKTsNCgkJCWJyZWFrOw0KCQljYXNlICd0YXInOg0K CQkJJHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoJG91dC4nLnRhcicpOw0KCQkJYnJlYWs7 DQoJCWNhc2UgJ2d6aXAnOg0KCQlkZWZhdWx0Og0KCQkJJHppcCA9IG5ldyBzbWRfYXRfZ3pp cF9maWxlKCRvdXQuJy50Z3onKTsNCiAJCQlicmVhazsNCgl9DQoNCgkkemlwLT5zZXRfb3B0 aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gdHhwYXRoLkRTLlRIRU1FLCAnb3ZlcndyaXRlJyA9 PiAxLCAnaW5tZW1vcnknID0+IDEpKTsNCgkkemlwLT5hZGRfZmlsZXMoJHNraW4uRFMuJyou KicpOw0KCSR6aXAtPmV4Y2x1ZGVfZmlsZXMoJHNraW4uRFMuJyouc3ZuKicpOw0KCSR6aXAt PmNyZWF0ZV9hcmNoaXZlKCk7DQoJJHppcCAtPmRvd25sb2FkX2ZpbGUoKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfaW1wb3J0KCkgew0K CWdsb2JhbCAkcHJlZnM7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSdd Ow0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBf bmFtZSddLCB0eHBhdGguRFMuVEhFTUUuYmFzZW5hbWUoJF9GSUxFU1sndGhlZmlsZSddWyd0 bXBfbmFtZSddKSk7DQoJJGJhc2VkaXIgPSB0eHBhdGguRFMuVEhFTUU7DQoJJG1lc3NhZ2U9 Jyc7DQoJJGluZm8gPSBleHBsb2RlICgnLicsJG5hbWUpOw0KCSRleHQgPSAkaW5mb1sxXTsN Cg0KCWlmICgkbmFtZSAmJiAkZmlsZSkgew0KCQlpZiAoJGV4dCA9PSAiemlwIiAmJiBmdW5j dGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHsNCgkJCSR6aXAgPSB6aXBfb3BlbigkZmlsZSk7 DQoJCQlpZiAoJHppcCkgew0KCQkJCSRmaWxlY3RyID0gMDsNCgkJCQl3aGlsZSAoJHppcF9l bnRyeSA9IHppcF9yZWFkKCR6aXApKSB7DQoJCQkJCSRmbiA9IHppcF9lbnRyeV9uYW1lKCR6 aXBfZW50cnkpOw0KCQkJCQkkZmlsZXBhdGggPSAkYmFzZWRpci4kZm47DQoJCQkJCWlmIChz dHJwb3MoJGZpbGVwYXRoLCAnLi4nKSA9PT0gZmFsc2UpIHsNCgkJCQkJCSRwYXRoX3BhcnRz ID0gcGF0aGluZm8oJGZpbGVwYXRoKTsNCgkJCQkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVw YXRoKSkgew0KCQkJCQkJCSRyZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNzZXQoJHBh dGhfcGFydHNbJ2V4dGVuc2lvbiddKSkgPyBkaXJuYW1lKCRmaWxlcGF0aCkgOiAkZmlsZXBh dGgpKTsNCgkJCQkJCQlpZiAoJHJldCA9PT0gZmFsc2UpIHsNCgkJCQkJCQkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgnaW1wb3J0X2ZhaWxlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1l KSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgnaW52YWxpZF9maWxlJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZuKSk7 DQoJCQkJCX0NCg0KCQkJCQlpZiAoJG1lc3NhZ2U9PScnKSB7DQoJCQkJCQlpZiAoIWlzX2Rp cigkZm4pKSB7DQoJCQkJCQkJJGZwID0gZm9wZW4oJGJhc2VkaXIuJGZuLCAid2IiKTsNCgkJ CQkJCQlpZiAoemlwX2VudHJ5X29wZW4oJHppcCwgJHppcF9lbnRyeSwgInIiKSkgew0KCQkJ CQkJCQkkYnVmID0gemlwX2VudHJ5X3JlYWQoJHppcF9lbnRyeSwgemlwX2VudHJ5X2ZpbGVz aXplKCR6aXBfZW50cnkpKTsNCgkJCQkJCQkJemlwX2VudHJ5X2Nsb3NlKCR6aXBfZW50cnkp Ow0KCQkJCQkJCX0NCgkJCQkJCQlmd3JpdGUoJGZwLCAkYnVmKTsNCgkJCQkJCQlmY2xvc2Uo JGZwKTsNCi8vCQkJCQkJCWVjaG8gIlRoZSBmaWxlICIuJGZuLiIgd2FzIGV4dHJhY3RlZCBz dWNjZXNzZnVsbHlcbjxicj4iOw0KCQkJCQkJCSRmaWxlY3RyKys7DQoJCQkJCQl9DQoJICAg ICAgICAgICAgfQ0KCQkJCX0NCgkJCQl6aXBfY2xvc2UoJHppcCk7DQoJCQkJaWYgKCRtZXNz YWdlID09ICcnKSB7DQoJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9zdWNj ZXNzJywgYXJyYXkoJ3tudW19JyA9PiAkZmlsZWN0cikpOw0KCQkJCX0NCgkJCX0NCgkJfSBl bHNlIGlmICgkZXh0ID09ICJ0Z3oiKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF9nemlwX2Zp bGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNl ZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFj dF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJ CX0gZWxzZSBpZiAoJGV4dCA9PSAidGJ6MiIpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2J6 aXBfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXko J2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5l eHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2sn KTsNCgkJfSBlbHNlIGlmICgkZXh0ID09ICJ0YXIiKSB7DQoJCQkkemlwID0gbmV3IHNtZF9h dF90YXJfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJy YXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlw LT5leHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRf b2snKTsNCgkJfSBlbHNlIHsNCgkJCSRtZXNzYWdlID0gYXJyYXkoc21kX2F0X2dUeHQoJ3Vu c3VwcG9ydGVkX2NvbXByZXNzaW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAkZXh0KSks IEVfV0FSTklORyk7DQoJCX0NCg0KCQkvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlDQoJ CXVubGluaygkZmlsZSk7DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgn ZW1wdHlfaW5mbycpOw0KCX0NCg0KCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfdXBsb2FkX2ltYWdl KCkgew0KCWdsb2JhbCAkZmlsZV9tYXhfdXBsb2FkX3NpemU7DQoNCglleHRyYWN0KGRvU2xh c2goZ3BzYShhcnJheSgnaWQnKSkpKTsNCgkkX1BPU1RbJ3NraW4nXSA9ICRza2luID0gJGlk Ow0KDQoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmlsZSA9IGdl dF91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7DQoJJG1l c3NhZ2U9Jyc7DQoNCglpZiAoJGZpbGUgPT09IGZhbHNlKSB7DQoJCSRtZXNzYWdlID0gZ1R4 dCgnZmlsZV91cGxvYWRfZmFpbGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jt c2coJF9GSUxFU1sndGhlZmlsZSddWydlcnJvciddKTsNCgkJc21kX2F0X2VkaXQoJG1lc3Nh Z2UpOw0KCX0NCg0KCSRzaXplID0gZmlsZXNpemUoJGZpbGUpOw0KCWlmICgkZmlsZV9tYXhf dXBsb2FkX3NpemUgPCAkc2l6ZSkgew0KCQl1bmxpbmsoJGZpbGUpOw0KCQkkbWVzc2FnZSA9 IGdUeHQoJ2ZpbGVfdXBsb2FkX2ZhaWxlZCcpIC4iICRuYW1lIC0gIi51cGxvYWRfZ2V0X2Vy cm9ybXNnKFVQTE9BRF9FUlJfRk9STV9TSVpFKTsNCgkJc21kX2F0X2VkaXQoJG1lc3NhZ2Up Ow0KCX0NCg0KCSRza2luZm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0KCSRuZXdf c2tpbiA9ICRza2luZm9bJ25hbWUnXTsNCgkkbmV3cGF0aCA9ICRza2luZm9bJ3BhdGgnXTsN Cg0KCWlmICgkbmV3X3NraW4gJiYgJGZpbGUpIHsNCgkJaWYoc2hpZnRfdXBsb2FkZWRfZmls ZSgkZmlsZSwgJG5ld3BhdGguJG5hbWUpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0 KCd1cGxvYWRfc3VjY2VzcycpOw0KCQl9IGVsc2Ugew0KCQkJdW5saW5rKCRmaWxlKTsNCgkJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9mYWlsZWQnKTsNCgkJfQ0KCX0gZWxz ZSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9DQoNCglz bWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0ZV9pbWFnZSgpIHsNCglnbG9iYWwgJHNtZF9jb3Jl X3RoZW1lczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJykpKSk7DQoJ JGZpbGVfbGlzdCA9IGdwcygnc21kX2F0X2ltYWdlcycpOw0KCSRtZXNzYWdlPScnOw0KDQoJ aWYgKGVtcHR5KCRmaWxlX2xpc3QpKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2Vt cHR5X2luZm8nKTsNCgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29y ZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lX2Zp bGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQl9IGVsc2Ugew0KCQkJZm9yZWFj aCAoJGZpbGVfbGlzdCBhcyAkaW1hZ2UpIHsNCgkJCQkkcGF0aCA9IHR4cGF0aC5EUy4kaW1h Z2U7DQoJCQkJdW5saW5rKCRwYXRoKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXNtZF9hdF9lZGl0 KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfZGVsZXRlKCkgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzLCAkdGhlbWUs ICRzbWRfYXRfcHJpdnMsICRzbWRfYXRfZXZlbnQ7DQoNCglleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgnc2tpbicsICdmaWxlJykpKSk7DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAoJGZp bGUpIHsNCgkJLy8gRWRpdGluZyBhIHNraW4sIHRodXMgZGVsZXRpbmcgYSBzaW5nbGUgZmls ZQ0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVz c2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lX2ZpbGUnLCBhcnJheSgne3NraW59JyA9 PiAkc2tpbikpOw0KCQkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCQl9IGVsc2Ugew0KCQkJ JGRlbCA9IHVubGluayhUSEVNRS4kc2tpbi5EUy4kZmlsZSk7DQoJCQlpZiAoJGRlbCkgew0K CQkJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4g JGZpbGUpKTsNCgkJCQkkX1BPU1RbJ2ZpbGUnXSA9ICcnOyAvLyBDbGVhciB0aGUgdmFyaWFi bGUgc28gdGhlIGZpbGVuYW1lIGRvZXNuJ3QgYXBwZWFyIG9uIHRoZSBlZGl0IHBhZ2UNCgkJ CX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZmlsZV9ub3RfZGVsZXRl ZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJCQl9DQoJCX0NCgkJc21kX2F0X2Vk aXQoJG1lc3NhZ2UpOw0KCX0gZWxzZSB7DQoJCWlmIChpbl9hcnJheSgkc2tpbiwgJHNtZF9j b3JlX3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2NvcmVfdGhlbWUn LCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQkJc21kX2F0X2xpc3QoJG1lc3NhZ2Up Ow0KCQl9IGVsc2Ugew0KCQkJLy8gVmlld2luZyB0aGUgc2tpbiBsaXN0LCB0aHVzIGRlbGV0 aW5nIHRoZSB3aG9sZSBza2luDQoJCQkkc2tpbmRpciA9IFRIRU1FLiRza2luOw0KCQkJaWYg KCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRza2luZGlyKSkgew0KCQkJCSRtZXNzYWdlID0gc21k X2F0X2dUeHQoJ2RlbGV0ZV9mYWlsZWQnKTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgnc2tpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNraW4p KTsNCgkJCX0NCg0KCQkJLy8gSGFuZGxlIHNpdHVhdGlvbnMgaWYgY3VycmVudCBza2luIGhh cyBiZWVuIGRlbGV0ZWQNCgkJCWlmICghZmlsZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRz a2luKSkgew0KCQkJCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCg0KCQkJCS8v IFJlc2V0IHRoZSBnbG9iYWwgc2tpbiBpbiBjYXNlIGl0J3MgYmVlbiBkZWxldGVkDQoJCQkJ JGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pKSA/ ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAnJzsNCgkJCQkkZ2JsX3NraW4g PSAoJGdibF9za2luICE9ICcnICYmIGZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kZ2Js X3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFzc2ljJzsNCgkJCQlzZXRfcHJlZignc21kX2F0 X2dsb2JhbF9za2luJywgJGdibF9za2luLCAkc21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwg J3RleHRfaW5wdXQnKTsNCgkJCQlzZXRfcHJlZigndGhlbWVfbmFtZScsICRnYmxfc2tpbik7 DQoNCgkJCQkkc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicpOw0KCQkJCWlmICghZmlsZV9l eGlzdHModHhwYXRoLkRTLlRIRU1FLiRza2luKSkgew0KCQkJCQkkc2tpbiA9ICRnYmxfc2tp bjsNCgkJCQl9DQoJCQkJc2V0X3ByZWYoJ3NtZF9za2luJywgJHNraW4sICdzbWRfYXQnLCBQ UkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQkJfQ0KCQkJ JF9HRVRbJ3NraW4nXSA9ICRza2luOw0KCQkJJF9HRVRbJ25leHRzdGVwJ10gPSAnc21kX2F0 X2xpc3QnOw0KCQkJc21kX2F0X3N3aXRjaCgkbWVzc2FnZSk7DQoJCX0NCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3NhdmUoKSB7DQoJ ZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCduZXdfc2tpbicsJ2ZpbGUnLCdz bWRfYXRfZWRpdHMnKSkpKTsNCg0KCSRlZGl0YWJsZSA9IGFycmF5KCJzc2MiLCAiY3NzIiwg ImpzIiwgInBocCIpOw0KCSRtZXNzYWdlID0gJGV4dHJhTXNnID0gJyc7DQoJJGZpbGUgPSB0 cmltKCRmaWxlKTsNCgkkbmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7DQoJJG1zZ2xldiA9 IDA7DQoNCgkvLyBOZXcgZmlsZQ0KCWlmICghJGZpbGUgJiYgJG5ld19za2luKSB7DQoJCSRm aWxlID0gJG5ld19za2luOw0KCQkkZXh0ID0gYXJyYXlfcG9wKGV4cGxvZGUgKCcuJywkZmls ZSkpOw0KCQlpZiAoc3RydG9sb3dlcigkZmlsZSkgIT0gJ3JlYWRtZScgJiYgKCRleHQgPT0g JycgfHwgIWluX2FycmF5KCRleHQsICRlZGl0YWJsZSkpKSB7DQoJCQkkbWVzc2FnZSA9IHNt ZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9maWxldHlwZScpLnNtZF9hdF9nVHh0KCd1bnN1cHBv cnRlZF9mdWRnZScpOw0KCQkJJG1zZ2xldiA9IEVfV0FSTklORzsNCgkJCSRfUE9TVFsnZmls ZSddID0gJGZpbGU7DQoJCX0NCgl9DQoNCglpZiAoJG1lc3NhZ2U9PScnKSB7DQoJCSRza2lu ZGlyID0gVEhFTUUuJHNraW4uRFM7DQoNCgkJJGZuYW1lID0gc2FuaXRpemVGb3JGaWxlKCRm aWxlKTsNCgkJJG5ld19za2luID0gcmF3dXJsZW5jb2RlKCRuZXdfc2tpbik7DQoJCSRfUE9T VFsnbmV3X3NraW4nXSA9ICRuZXdfc2tpbjsNCg0KCQkkc21kX2F0X2VkaXRzID0gZG9TdHJp cChzdHJfcmVwbGFjZSgnXHJcbicsJw0KJywkc21kX2F0X2VkaXRzKSk7IC8vIG5ld2xpbmUg d29ya2Fyb3VuZA0KDQoJCWlmICgkZm5hbWUpIHsNCgkJCSRmaWxlcGF0aCA9ICRza2luZGly LkRTOw0KCQkJaWYgKCFmaWxlX2V4aXN0cygkZmlsZXBhdGguJGZuYW1lKSkgew0KCQkJCSRy ZXQgPSB0b3VjaCgkZmlsZXBhdGguJGZuYW1lKTsNCgkJCQlpZiAoJHJldCA9PT0gZmFsc2Up IHsNCgkJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnbWtkaXJfZmFpbGVkJywgYXJyYXko J3tuYW1lfScgPT4gJGZuYW1lKSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBBc3N1bWluZyBu byBlcnJvcnMgc28gZmFyLi4uDQoJCQlpZiAoJG1lc3NhZ2UgPT0gJycpIHsNCgkJCQkkZmgg PSBmb3BlbigkZmlsZXBhdGguJGZuYW1lLCAnd2InKTsNCgkJCQlmd3JpdGUoJGZoLCAkc21k X2F0X2VkaXRzKTsNCgkJCQlmY2xvc2UoJGZoKTsNCg0KCQkJCWlmICgkZm5hbWUgIT0gJG5l d19za2luKSB7DQoJCQkJCSRyZXMgPSByZW5hbWUoJGZpbGVwYXRoLiRmbmFtZSwgJGZpbGVw YXRoLiRuZXdfc2tpbik7DQoJCQkJCSRleHRyYU1zZyA9ICgkcmVzKSA/IHNtZF9hdF9nVHh0 KCdyZW5hbWVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSkgOiBzbWRfYXRfZ1R4 dCgncmVuYW1lX2ZhaWxlZCcpOw0KCQkJCX0NCg0KCQkJCS8vIFByb2Nlc3MgYW55IGNzcyBy ZXBsYWNlbWVudHMNCgkJCQkkZmlsZWJpdHMgPSBleHBsb2RlICgnLicsKCgkZm5hbWU9PSRu ZXdfc2tpbik/ICRmbmFtZSA6ICRuZXdfc2tpbikpOw0KCQkJCSRjc3NmaWxlID0gJGZpbGVi aXRzWzBdOw0KCQkJCSRleHQgPSBhcnJheV9wb3AoJGZpbGViaXRzKTsNCgkJCQlpZiAoJGV4 dCA9PSAnc3NjJykgew0KCQkJCQkkcmVwbGFjZW1lbnRzID0gYXJyYXkoKTsNCgkJCQkJJG51 bV9yZXAxID0gcHJlZ19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05X10rKTpccyooLiopOy8n LCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hlczEpOw0KCQkJCQkkbnVtX3JlcDIgPSBwcmVnX21h dGNoX2FsbCgnLyhcQFtBLVphLXowLTlfXSspOlxzKlx7KC4qPylcfS9zJywgJHNtZF9hdF9l ZGl0cywgJG1hdGNoZXMyKTsNCg0KCQkJCQkvLyBTaW1wbGUgcmVwbGFjZW1lbnRzDQoJCQkJ CWZvcmVhY2goJG1hdGNoZXMxIGFzICRpZHggPT4gJHJlcGFycikgew0KCQkJCQkJaWYgKCRp ZHggPT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgdmFyIGRlZmluaXRpb25zDQoJCQkJ CQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJCQkJCQkJCSRzbWRfYXRfZWRpdHMg PSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2VkaXRzKTsNCgkJCQkJCQl9DQoJCQkJ CQl9DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBh cyAkamR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxhY2VtZW50c1skcmVwXSA9ICRtYXRj aGVzMVsyXVskamR4XTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBN dWx0aS1saW5lIHJlcGxhY2VtZW50cw0KCQkJCQlmb3JlYWNoKCRtYXRjaGVzMiBhcyAkaWR4 ID0+ICRyZXBhcnIpIHsNCgkJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJCQkvLyBSZW1v dmUgdGhlIHZhciBkZWZpbml0aW9ucw0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJHJl cCkgew0KCQkJCQkJCQkkc21kX2F0X2VkaXRzID0gc3RyX3JlcGxhY2UoJHJlcCwgJycsJHNt ZF9hdF9lZGl0cyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKCRpZHggPT0gMSkg ew0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7DQoJCQkJCQkJ CSRyZXBsYWNlbWVudHNbJHJlcC4nOyddID0gdHJpbSgkbWF0Y2hlczJbMl1bJGpkeF0pOw0K CQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIEdlbmVyYXRlIGFuZCB3cml0 ZSB0aGUgbmV3IGNzcyBmaWxlDQoJCQkJCSRzbWRfYXRfZWRpdHMgPSB0cmltKHN0cnRyKCRz bWRfYXRfZWRpdHMsICRyZXBsYWNlbWVudHMpKTsNCgkJCQkJJGZoID0gZm9wZW4oJGZpbGVw YXRoLiRjc3NmaWxlLicuY3NzJywgJ3diJyk7DQoJCQkJCWZ3cml0ZSgkZmgsICRzbWRfYXRf ZWRpdHMpOw0KCQkJCQlmY2xvc2UoJGZoKTsNCgkJCQkJaWYgKCRmbmFtZSAhPSAkbmV3X3Nr aW4pIHsNCgkJCQkJCSRvbGRmbmFtZSA9IGV4cGxvZGUgKCcuJywgJGZuYW1lKTsNCgkJCQkJ CSRvbGRmbmFtZSA9ICRvbGRmbmFtZVswXS4nLmNzcyc7DQoJCQkJCQkkcmVzID0gQHVubGlu aygkZmlsZXBhdGguJG9sZGZuYW1lKTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCSRtZXNzYWdl ID0gc21kX2F0X2dUeHQoJ2ZpbGVfc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWUp KS5ici4kZXh0cmFNc2c7DQoJCQl9DQoJCX0NCgl9DQoJc21kX2F0X2VkaXQoYXJyYXkoJG1l c3NhZ2UsICRtc2dsZXYpKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIFBSRUZTDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9h dF9nZXRfcHJlZnMoKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoJJHByZWZrZXlzID0g ZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJHNtZF9hdF9wcmVmc1swXSkpKTsN CgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsJywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4k cHJlZmtleXMuJyknKTsNCgkkYXRfcHJlZnMgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRycyBh cyAkcHJlZmFycikgew0KCQkkYXRfcHJlZnNbJHByZWZhcnJbJ25hbWUnXV0gPSAkcHJlZmFy clsndmFsJ107DQoJfQ0KCXJldHVybiAkYXRfcHJlZnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X29wdGlvbnMoJGV2ZW50LCAkc3RlcCwg JG1lc3NhZ2U9JycpIHsNCglzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zZXR1cCgkbWVzc2FnZT0n Jykgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnMsICRzbWRfYXRfZXZlbnQsICR0 aGVtZSwgJHNtZF9jb3JlX3RoZW1lczsNCg0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRzbWRf YXRfcHJlZnNbMF0pOw0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbnVt Um93cyA9IGNvdW50KCRhdF9wcmVmcyk7DQoNCglwYWdldG9wKGdUeHQoJ3ByZWZzJyksJG1l c3NhZ2UpOw0KDQoJLy8gWXVrLCB3aHkncyB0aGlzIG5vdCBhdmFpbGFibGUgZ2xvYmFsbHk/ IQ0KCSRsZXZlbHMgPSBhcnJheSgNCi8vCQkxID0+IGdUeHQoJ3B1Ymxpc2hlcicpLA0KCQky ID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRvcicpLA0KCQkzID0+IGdUeHQoJ2NvcHlfZWRpdG9y JyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZfd3JpdGVyJyksDQoJCTUgPT4gZ1R4dCgnZnJlZWxh bmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rlc2lnbmVyJyksDQoJKTsNCgkkbnVtTGV2cyA9IGNv dW50KCRsZXZlbHMpOw0KDQoJLy8gU3BsaXQgdGhlIHVzZXIgc2tpbiBsaXN0DQoJJHVza2lu cyA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCdd KSkgew0KCQkkdXNraW5zID0gZXhwbG9kZSgnLCcsICRhdF9wcmVmc1snc21kX2F0X3VzZXJf bGlzdCddKTsNCgl9DQoNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJGNsckJ0biA9 ICcgWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21kX2F0X2dU eHQoJ2NsZWFyJykuJzwvc3Bhbj5dJzsNCgkkYnRuU2V0ID0gZklucHV0KCdzdWJtaXQnLCAn c3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldCcpLCAncHVibGlzaCcpOw0KCSRidG5TYXZlID0g ZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpOw0K CSRidG5JbnN0YWxsID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4k c21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX2luc3RhbGwiIHN0eWxlPSJk aXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdpbnN0 YWxsJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOw0KCSRidG5SZW1vdmUgPSAnPGZvcm0gbWV0 aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3RlcD1z bWRfYXRfcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdz dWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVyYm94JykuJzwvZm9y bT4nOw0KCSRidG5MaXN0ID0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScu JHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdza2lu X2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJGJ0blN0eWxlID0gJyBz dHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcmFkQnRucyA9IGFycmF5KA0KCQlz bWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl9ncm91cCcpLA0K CQlzbWRfYXRfZ1R4dCgncGVyX3VzZXInKSwNCgkpOw0KDQoJZWNobyBzdGFydFRhYmxlKCds aXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykgew0KCQkvLyBQcmVmcyBh bGwgaW5zdGFsbGVkDQoJCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygpOw0KDQoJ CS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJlIHRoZSBz YW1lIGluIHRoaXMgY2FzZQ0KCQkkc2tpbnNlbCA9IGFycmF5KCk7DQoJCWZvcmVhY2goJHNr aW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCQlpZiAoc21kX2F0X2V4aXN0cygk dmFsdWUxKSkgew0KCQkJCSRza2luc2VsWyR2YWx1ZTFdID0gJHNraW5fbGlzdFska2V5MV07 DQoJCQl9DQoJCX0NCgkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2ds b2JhbF9za2luJ10pICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0gJycp ID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICR0aGVtZS0+bmFtZTsNCg0K CQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAnIGNv bHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92ZS4kYnRuTGlzdCwgJGJ0blN0eWxlKSApOw0K CQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9l dmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUiIG9uc3VibWl0PSJyZXR1cm4g c21kX3ByZXN1YigpOyI+JzsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2Nhc2Vfc29y dCcpKS50ZGEoeWVzbm9SYWRpbygnc21kX2F0X2Nhc2Vfc29ydCcsICRhdF9wcmVmc1snc21k X2F0X2Nhc2Vfc29ydCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2Nhc2Vfc29ydCIn KSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjcnVzaF90eXBlJykpLnRkYShyYWRp b1NldChzbWRfYXRfZXhwb3J0X29wdGlvbnMoKSwgJ3NtZF9hdF9jcnVzaCcsICRhdF9wcmVm c1snc21kX2F0X2NydXNoJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfY3J1c2giJykp Ow0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnbGF5b3V0JykpLnRkYShyYWRpb1NldChh cnJheShzbWRfYXRfZ1R4dCgnbGF5b3V0X2xpc3QnKSwgc21kX2F0X2dUeHQoJ2xheW91dF9n cmlkJykpLCAnc21kX2F0X2xheW91dCcsICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSwg JyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2xheW91dCInKSk7DQoJCWVjaG8gdHIodGRhKHNt ZF9hdF9nVHh0KCd0aHVtYnNpemUnKSkudGRhKGZJbnB1dCgndGV4dCcsICdzbWRfYXRfdHcn LCAkYXRfcHJlZnNbJ3NtZF9hdF90dyddLCcnLCcnLCcnLDQpLnNtZF9hdF9nVHh0KCd0aW1l cycpLmZJbnB1dCgndGV4dCcsICdzbWRfYXRfdGgnLCAkYXRfcHJlZnNbJ3NtZF9hdF90aCdd LCcnLCcnLCcnLDQpKSk7DQoJCWVjaG8gdHIoDQoJCQl0ZChzbWRfYXRfZ1R4dCgnZ2xvYmFs X3NraW4nKSkNCgkJCS50ZChzZWxlY3RJbnB1dCgnc21kX2F0X2dsb2JhbF9za2luJywgJHNr aW5zZWwsICRnYmxfc2tpbiwgMCwgMCkpDQoJCSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9n VHh0KCdza2luX3N5c3RlbScpKS50ZGEocmFkaW9TZXQoJHJhZEJ0bnMsICdzbWRfYXRfc3lz dGVtJywgJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJz bWRfYXRfcmFkaW8iJykpOw0KDQoJCS8vIE9wdGlvbiAxDQoJCSRwcml2X2xpc3QgPSAnPHNl bGVjdCBpZD0ic21kX2F0X3ByaXZzIiBuYW1lPSJzbWRfYXRfcHJpdnNbXSIgY2xhc3M9Imxp c3QiIHNpemU9IicuJG51bUxldnMuJyIgbXVsdGlwbGU9Im11bHRpcGxlIj4nOw0KCQlmb3Jl YWNoICgkbGV2ZWxzIGFzICRsZXZpZCA9PiAkbGV2bmFtZSkgew0KCQkJJHByaXZfbGlzdCAu PSAnPG9wdGlvbiB2YWx1ZT0iJy4kbGV2aWQuJyI+Jy4kbGV2bmFtZS4nPC9vcHRpb24+JzsN CgkJfQ0KCQkkcHJpdl9saXN0IC49ICc8L3NlbGVjdD4nOw0KDQoJCS8vIE5vdGUgdGhlIGhp ZGRlbiBza2luIGdyb3VwIGJveDsgalF1ZXJ5IGtlZXBzIHRyYWNrIG9mIGFueSBsaXN0IGNo YW5nZXMgYW5kIGtlZXBzIGl0IHVwZGF0ZWQNCgkJJHNlbGEgPSBzbWRfYXRfZ1R4dCgnc2tp bl9ncm91cHMnKTsNCgkJJHNlbGIgPSBoSW5wdXQoJ3NtZF9hdF9ncm91cF9saXN0JywgJGF0 X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKTsNCgkJJHNlbGIgLj0gJzxzZWxlY3QgaWQ9 InNtZF9hdF9ncnBzIiBuYW1lPSJzbWRfYXRfZ3JwcyIgY2xhc3M9Imxpc3QiIHNpemU9Iicu JG51bUxldnMuJyI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkYXNraW4pIHsNCgkJ CWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2VsYiAuPSAnPG9wdGlvbiB2 YWx1ZT0iJy4kYXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7DQoJCQl9DQoJCX0NCgkJ JHNlbGIgLj0gJzwvc2VsZWN0Pic7DQoJCWVjaG8gdHIodGRhKCRzZWxhLCAnIGNsYXNzPSJz bWRfYXRfc2VsMSBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLiRwcml2X2xpc3QsICcgd2lk dGg9IjQwMCIgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykpOw0KDQoJCS8vIE9w dGlvbiAyDQoJCSRzZWxhID0gc21kX2F0X2dUeHQoJ2FsbG93ZWRfc2tpbnMnKTsNCgkJJHNl bGIgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3VzZXJfbGlzdCIgbmFtZT0ic21kX2F0X3VzZXJf bGlzdFtdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iOCIgbXVsdGlwbGU9Im11bHRpcGxlIj4nOw0K CQlmb3JlYWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYgKHNtZF9hdF9leGlz dHMoJGFza2luKSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVlPSInLiRhc2tpbi4n IicuKChpbl9hcnJheSgkYXNraW4sICR1c2tpbnMpKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVk IicgOiAnJykuJz4nLiRhc2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0KCQkkc2VsYiAu PSAnPC9zZWxlY3Q+Jy4kY2xyQnRuOw0KCQllY2hvIHRyKHRkYSgkc2VsYSwgJyBjbGFzcz0i c21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSAuIHRkYSgkc2VsYiwgJyB3aWR0aD0iMjQwIiBj bGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5T YXZlLCAkYnRuU3R5bGUpKTsNCgkJZWNobyAnPC9mb3JtPic7DQoJfSBlbHNlIGlmICgkbnVt Um93cyA+IDAgJiYgJG51bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsNCgkJZWNobyB0cih0ZGEo c3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJCQkuc21kX2F0 X2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCQkuc21kX2F0X2dUeHQo J3ByZWZzX3NvbWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRk YSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkp Ow0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdwcmVmc19ub3RfaW5z dGFsbGVkJyksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxs LCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJZWNobyA8PDxFT0pT DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoNCi8vIENvbmNhdGVuYXRlIGNo ZWNrYm94IG9wdGlvbnMgZm9yIHN0b3JhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc3dhcChz ZWxWYWx1ZSkgew0KCWZvciAoaWR4PTA7IGlkeCA8IDM7IGlkeCsrKSB7DQoJCWlmIChpZHg9 PXNlbFZhbHVlKSB7DQoJCQlqUXVlcnkoIi5zbWRfYXRfc2VsIitpZHgpLnNob3coKTsNCgkJ fSBlbHNlIHsNCgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lkeCkuaGlkZSgpOw0KCQl9DQoJ fQ0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0 X3N5c3RlbSddIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzbWRfYXRfcHJlZnN3YXAodGhp cy52YWx1ZSk7DQoJfSk7DQoNCglqUXVlcnkoJyNzbWRfY2xyJykuY2xpY2soZnVuY3Rpb24o KSB7DQoJCWpRdWVyeSgnI3NtZF9hdF91c2VyX2xpc3Qgb3B0aW9uJykuYXR0cigic2VsZWN0 ZWQiLCAiIik7DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfZ3JwcyIpLmNoYW5nZShmdW5j dGlvbigpIHsNCgkJc2Vsc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCg0KCQkvLyBDbGVh ciB0aGUgb2xkIHByaXZzIGxpc3QgYW5kIGdyYWIgdGhlIGN1cnJlbnQgbGlzdCBmcm9tIHRo ZSBoaWRkZW4gZmllbGQNCgkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlvbiIpLmF0dHIo InNlbGVjdGVkIixmYWxzZSk7DQoJCXZhciBncnBsaXN0ID0galF1ZXJ5KCJpbnB1dFtuYW1l PSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBncnBzID0gZ3JwbGlzdC5z cGxpdCgnLCcpOw0KCQl2YXIgY250ID0gZ3Jwcy5sZW5ndGg7DQoJCWZvciAodmFyIGlkeCA9 IDA7IGlkeCA8IGNudDsgaWR4KyspIHsNCgkJCXByaXZzID0gZ3Jwc1tpZHhdLnNwbGl0KCc6 Jyk7DQoJCQlza2luaWQgPSBwcml2cy5zaGlmdCgpOw0KCQkJaWYgKHNraW5pZCA9PSBzZWxz a2luKSB7DQoJCQkJbnVtUHJpdnMgPSBwcml2cy5sZW5ndGg7DQoJCQkJZm9yIChqZHggPSAw OyBqZHggPCBudW1Qcml2czsgamR4KyspIHsNCgkJCQkJalF1ZXJ5KCIjc21kX2F0X3ByaXZz IG9wdGlvblt2YWx1ZT0nIitwcml2c1tqZHhdKyInXSIpLmF0dHIoInNlbGVjdGVkIiwgdHJ1 ZSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfcHJpdnMi KS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBqUXVlcnkoIiNzbWRfYXRfZ3Jw cyBvcHRpb246c2VsZWN0ZWQiKS52YWwoKTsNCgkJdmFyIG91dCA9IFtdOw0KCQl2YXIgcHJp dnMgPSBbXTsNCgkJcHJpdnMucHVzaChzZWxza2luKTsNCgkJalF1ZXJ5KCIjc21kX2F0X3By aXZzIG9wdGlvbjpzZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQlwcml2cy5wdXNo KGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCX0pOw0KCQlpZiAocHJpdnMubGVuZ3RoID09IDEp IHsNCgkJCXByaXZzLnBvcCgpOw0KCQl9IGVsc2Ugew0KCQkJb3V0LnB1c2gocHJpdnMuam9p bigiOiIpKTsNCgkJfQ0KCQl2YXIgaGlkbGlzdCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21k X2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOw0KCQl2YXIgcHJldmxpc3QgPSBoaWRsaXN0LnNw bGl0KCcsJyk7DQoJCXZhciBwcmV2Y250ID0gcHJldmxpc3QubGVuZ3RoOw0KDQoJCWpRdWVy eSgiI3NtZF9hdF9ncnBzIG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQljdXJyc2tp biA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJCWlmIChjdXJyc2tpbiAhPSBzZWxza2luKSB7 DQoJCQkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgcHJldmNudDsgaWR4KyspIHsNCgkJCQkJ cHJldnByaXZzID0gcHJldmxpc3RbaWR4XS5zcGxpdCgnOicpOw0KCQkJCQlza2luaWQgPSBw cmV2cHJpdnMuc2hpZnQoKTsNCgkJCQkJLy8gR2VuZXJhdGUgdGhlIHByaXYgbGlzdCBmb3Ig dGhlIGN1cnJlbnRseSBzZWxlY3RlZCBza2luLCByZW1vdmluZyBhbnkgZHVwbGljYXRlIHBy aXZzIHNldCBlbHNld2hlcmUNCgkJCQkJaWYgKHNraW5pZCA9PSBjdXJyc2tpbikgew0KCQkJ CQkJdG1wb3V0ID0gW107DQoJCQkJCQl0bXBvdXQucHVzaChza2luaWQpOw0KCQkJCQkJZm9y ICh0aGlzcHJpdiBpbiBwcmV2cHJpdnMpIHsNCgkJCQkJCQlpZiAoalF1ZXJ5LmluQXJyYXko cHJldnByaXZzW3RoaXNwcml2XSwgcHJpdnMpIDwgMCkgew0KCQkJCQkJCQl0bXBvdXQucHVz aChwcmV2cHJpdnNbdGhpc3ByaXZdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQlpZiAo dG1wb3V0Lmxlbmd0aCA+IDEpIHsNCgkJCQkJCQlvdXQucHVzaCh0bXBvdXQuam9pbigiOiIp KTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSk7DQoJCWpRdWVyeSgiaW5w dXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbChvdXQpOw0KCX0pOw0KDQoJLy8g RGlzcGxheSBhIHRvb2x0aXAgc2hvd2luZyB0aGUgY3VycmVudGx5LWFzc2lnbmVkIHNraW4g d2hlbiBob3ZlcmluZyBvdmVyIGEgcHJpdmlsZWdlIGxldmVsDQoJalF1ZXJ5KCIjc21kX2F0 X3ByaXZzIG9wdGlvbiIpLmhvdmVyKGZ1bmN0aW9uKCkgew0KCQlob3ZpdGVtID0galF1ZXJ5 KHRoaXMpLnZhbCgpOw0KCQlncnBzID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3Jv dXBfbGlzdCddIikudmFsKCk7DQoJCWl0ZW1zID0gZ3Jwcy5zcGxpdCgiLCIpOw0KCQlmb3Ig KGlkeCA9IDA7IGlkeCA8IGl0ZW1zLmxlbmd0aDsgaWR4KyspIHsNCgkJCXNraW56ID0gaXRl bXNbaWR4XS5zcGxpdCgiOiIpOw0KCQkJZm9yIChqZHggPSAxOyBqZHggPCBza2luei5sZW5n dGg7IGpkeCsrKSB7DQoJCQkJaWYgKHNraW56W2pkeF0gPT0gaG92aXRlbSkgew0KCQkJCQlq UXVlcnkodGhpcykuYXR0cigidGl0bGUiLCBza2luelswXSk7DQoJCQkJCWJyZWFrOw0KCQkJ CX0NCgkJCX0NCgkJfQ0KCX0sDQoJZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlzKS5hdHRy KCJ0aXRsZSIsICIiKTsNCgl9KTsNCglzbWRfYXRfcHJlZnN3YXAoalF1ZXJ5KCJpbnB1dFtu YW1lPSdzbWRfYXRfc3lzdGVtJ106Y2hlY2tlZCIpLnZhbCgpKTsNCglqUXVlcnkoIiNzbWRf YXRfcHJpdnMiKS5jaGFuZ2UoKTsNCn0pOw0KPC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4 dC9jc3MiPg0KLnNtZF9mYWtlYnRuIHsNCgljb2xvcjojNTU1Ow0KCWN1cnNvcjpwb2ludGVy Ow0KfQ0KI3NtZF9hdF9yYWRpbyBpbnB1dCB7DQoJZmxvYXQ6bGVmdDsNCgljbGVhcjpib3Ro Ow0KfQ0KI3NtZF9hdF9yYWRpbyBsYWJlbCB7DQoJZmxvYXQ6bGVmdDsNCn0NCi5zbWRfaGlk ZGVuIHsNCglkaXNwbGF5Om5vbmU7DQp9DQo8L3N0eWxlPg0KRU9KUzsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTcGxpdCBhIG11bHRpLWNoYXIgcHJlZmVyZW5j ZSB2YWx1ZSBpbnRvIGFuIGFycmF5IG9mIGtleXMvdmFsdWVzLg0KLy8gTm90ZTogdmFsdWUg aXMgcGFzc2VkIGluIGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBwcmVmcyBhcnJh eSBpbiB0aGlzIGZ1bmN0aW9uIC0gaW50ZW50aW9uYWxseQ0KZnVuY3Rpb24gc21kX2F0X3By ZWZfZXhwbG9kZSgkdmFsKSB7DQoJJG9yZGVyID0gYXJyYXlfdmFsdWVzKGFycmF5KHNtZF9h dF9nVHh0KCdjX2d6aXAnKSxzbWRfYXRfZ1R4dCgnY19iemlwJyksc21kX2F0X2dUeHQoJ2Nf emlwJykpKTsNCgkkb25vZmYgPSBhcnJheV92YWx1ZXMocHJlZ19zcGxpdCgnLy8nLCAkdmFs LCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSkpOw0KCSRvdXQgPSBhcnJheSgpOw0KCWZvcmVh Y2goJG9yZGVyIGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJG91dFsoc3RyaW5nKSR2YWx1 ZTFdID0gJG9ub2ZmWyRrZXkxXTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19pbnN0YWxsKCRzaG93cGFuZT0nMScpIHsNCgln bG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZvcmVhY2ggKCRzbWRf YXRfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKCFmZXRjaCgnbmFtZScs J3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2FmZV9pbnNlcnQoJ3R4 cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKS4n LCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50PSJzbWRfYWRza2luIicp Ow0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgncHJlZnNfaW5zdGFsbGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQoJfQ0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfcmVtb3ZlKCRzaG93cGFu ZT0nMScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZv cmVhY2ggKGFycmF5X21lcmdlKCRzbWRfYXRfcHJlZnNbMF0sJHNtZF9hdF9wcmVmc1sxXSkg YXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywndHhwX3ByZWZzJywn bmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywnbmFt ZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dwYW5l KSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2RlbGV0ZWQnKTsNCgkJc21k X2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNt ZF9hdF9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRzbWRfcGx1Z2luX3ByZWZzLCAkc21k X2F0X3ByZWZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJJG1lc3NhZ2UgPSAnJzsNCgkkcG9zdCA9 IGFycmF5KCk7DQoJJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddID0gZ3BzKCdzbWRfYXRf Z2xvYmFsX3NraW4nKTsNCgkkcG9zdFsnc21kX2F0X3N5c3RlbSddID0gZ3BzKCdzbWRfYXRf c3lzdGVtJyk7DQoJJHBvc3RbJ3NtZF9hdF9sYXlvdXQnXSA9IGdwcygnc21kX2F0X2xheW91 dCcpOw0KCSRwb3N0WydzbWRfYXRfY2FzZV9zb3J0J10gPSBncHMoJ3NtZF9hdF9jYXNlX3Nv cnQnKTsNCgkkcG9zdFsnc21kX2F0X3R3J10gPSBncHMoJ3NtZF9hdF90dycpOw0KCSRwb3N0 WydzbWRfYXRfdGgnXSA9IGdwcygnc21kX2F0X3RoJyk7DQoJaWYgKGdwcygnc21kX2F0X3Vz ZXJfbGlzdCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10gPSBqb2luKCcsJywg Z3BzKCdzbWRfYXRfdXNlcl9saXN0JykpOw0KCX0gZWxzZSB7DQoJCSRwb3N0WydzbWRfYXRf dXNlcl9saXN0J10gPSAnJzsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2dyb3VwX2xpc3QnKSkg ew0KCQkkcG9zdFsnc21kX2F0X2dyb3VwX2xpc3QnXSA9IGdwcygnc21kX2F0X2dyb3VwX2xp c3QnKTsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2NydXNoJykpIHsNCgkJJHBvc3RbJ3NtZF9h dF9jcnVzaCddID0gZ3BzKCdzbWRfYXRfY3J1c2gnKTsNCgl9DQoNCgkvLyBTZXQgdGhlIHN5 c3RlbS13aWRlIHRoZW1lIHRvIHRoZSBnbG9iYWwgdGhlbWUNCglpZiAoJHBvc3RbJ3NtZF9h dF9nbG9iYWxfc2tpbiddKSB7DQoJCXNldF9wcmVmKCd0aGVtZV9uYW1lJywgJHBvc3RbJ3Nt ZF9hdF9nbG9iYWxfc2tpbiddKTsNCgl9DQoNCglmb3JlYWNoICgkc21kX2F0X3ByZWZzWzBd IGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFskcHJlZl0pKSB7DQoJ CQlzZXRfcHJlZigkcHJlZiwgJHBvc3RbJHByZWZdLCAkc21kX2F0X2V2ZW50LCAyKTsNCgkJ fQ0KCX0NCgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJc21kX2F0 X3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQov LyBVVElMSVRZIEZVTkNUSU9OUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBzbWRfYXRfZ2V0X3ByaXZzKCR1c2VyPScnKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsN CgkkdXNlciA9ICgkdXNlcikgPyAkdXNlciA6ICR0eHBfdXNlcjsNCgkkcHJpdnMgPSBzYWZl X2ZpZWxkKCJwcml2cyIsICJ0eHBfdXNlcnMiLCAibmFtZT0nIi5kb1NsYXNoKCR1c2VyKS4i JyIpOw0KCXJldHVybiAkcHJpdnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2F0X2V4aXN0cygkbmFtZSkgew0KCSRpbnN0YW5jZSA9IHRoZW1l OjpmYWN0b3J5KCRuYW1lKTsNCglyZXR1cm4gJGluc3RhbmNlOw0KfQ0KDQovLyBJZiBwZXIt dXNlciBza2luIHN1cHBvcnQgaXMgT0ZGLCB0aGUgZ2xvYmFsIHNraW4gd2lucy4NCi8vIE9u ZSBleGNlcHRpb246IGlmIHRoZSB1c2VyIGlzIGFuIGFkbWluLCBhbGxvdyB0aGUgY3VycmVu dCBza2luIHRvIHByZXZhaWwgc28gdGhleSBtYXkgc3dpdGNoIHNraW5zIHdpdGggaW1wdW5p dHkNCi8vIGFuZCBub3QgYWZmZWN0IHRoZSBnbG9iYWwgc2tpbg0KZnVuY3Rpb24gc21kX2F0 X3BlcigpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2cywgJHByZWZzLCAkdGhlbWUsICR0eHBf dXNlcjsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkc2tpblN5cyA9 IGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3N5c3RlbSddKSA/ICRhdF9wcmVmc1snc21kX2F0 X3N5c3RlbSddIDogMDsNCgkkcHJpdnMgPSBzbWRfYXRfZ2V0X3ByaXZzKCk7DQoJJGdibF9z a2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pICYmICRhdF9w cmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRf Z2xvYmFsX3NraW4nXSA6ICcnOw0KCSRnYmxfc2tpbiA9IChzbWRfYXRfZXhpc3RzKCRnYmxf c2tpbikpID8gJGdibF9za2luIDogJ2NsYXNzaWMnOw0KDQoJc3dpdGNoICgkc2tpblN5cykg ew0KCQljYXNlIDA6DQoJCQkvLyBHbG9iYWwgZm9yY2VkIHNraW4gKGV4Y2VwdCBhZG1pbnMp DQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMp KSkgew0KCQkJCXJldHVybiAkZ2JsX3NraW47DQoJCQl9IGVsc2Ugew0KCQkJCS8vIEFkbWlu cw0KCQkJCSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21kX2F0X2V4aXN0 cygkYWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0NCgkJCWJyZWFr Ow0KCQljYXNlIDE6DQoJCQkvLyBHcm91cC1sZXZlbCBmb3JjZWQgc2tpbnMNCgkJCWlmICgh aW5fYXJyYXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJ JGZvcmNlU2tpbnMgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKSkg PyAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10gOiAoKCRnYmxfc2tpbikgPyAkZ2Js X3NraW4gOiAkdGhlbWUtPm5hbWUpOw0KDQoJCQkJLy8gU3BsaXQgdGhlIGdyb3VwIHNraW4g bGlzdA0KCQkJCSRnc2tpbnMgPSBhcnJheSgpOw0KCQkJCSRnb3B0cyA9IGV4cGxvZGUoJywn LCAkZm9yY2VTa2lucyk7DQoJCQkJZm9yZWFjaCAoJGdvcHRzIGFzICRncnBkZWYpIHsNCgkJ CQkJaWYgKCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOw0KCQkJCQkkcHJpdmdycCA9IGV4cGxv ZGUoIjoiLCAkZ3JwZGVmKTsNCgkJCQkJJHNraW5pZCA9IGFycmF5X3NoaWZ0KCRwcml2Z3Jw KTsNCgkJCQkJaWYgKGluX2FycmF5KCRwcml2cywgJHByaXZncnApKSB7DQoJCQkJCQlyZXR1 cm4gKHNtZF9hdF9leGlzdHMoJHNraW5pZCkpID8gJHNraW5pZCA6ICdjbGFzc2ljJzs7DQoJ CQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuICgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRo ZW1lLT5uYW1lOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4g PSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhl bWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAk YWRtX3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAyOg0KCQkJ Ly8gUGVyLXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNoZWNrIHRoZSBza2lu IGlzIGluIHRoZSBhbGxvd2VkIGxpc3QNCgkJCWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBs b2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJHZhbGlkU2tpbnMgPSAoaXNzZXQo JGF0X3ByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X3Vz ZXJfbGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKTsN CgkJCQkkdmFsaWRTa2lucyA9IGRvX2xpc3QoJHZhbGlkU2tpbnMpOw0KCQkJCSR0aGVfc2tp biA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0 aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoaW5fYXJyYXkoJHRoZV9za2luLCAkdmFsaWRT a2lucykgJiYgc21kX2F0X2V4aXN0cygkdGhlX3NraW4pKSA/ICR0aGVfc2tpbiA6ICcnOw0K CQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRfcHJlZign c21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsN CgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4gOiAn Y2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gUmVhZCBhbmQgcmV0dXJuIHRoZSBtYW5pZmVzdCwgaWYgaXQgZXhp c3RzIGFuZCBhZGQgYSBmZXcgb3RoZXIgbmljZXRpZXMgdG8gdGhlIGFycmF5IGZvciBsYXRl cg0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKSB7DQoJZ2xvYmFsICRzbWRf Y29yZV90aGVtZXM7DQoNCgkkdGhpc190aGVtZSA9IHRoZW1lOjpmYWN0b3J5KCRza2luKTsN Cgkkc2tpbmZvID0gYXJyYXkoKTsNCglpZiAoJHRoaXNfdGhlbWUpIHsNCgkJJHNraW5mbyA9 ICR0aGlzX3RoZW1lLT5tYW5pZmVzdCgpOw0KCQkkc2tpbmZvWydkbmFtZSddID0gZW1wdHko JHNraW5mb1sndGl0bGUnXSkgPyB1Y3dvcmRzKCR0aGlzX3RoZW1lLT5uYW1lKSA6ICRza2lu Zm9bJ3RpdGxlJ107DQoJCSRza2luZm9bJ25hbWUnXSA9ICR0aGlzX3RoZW1lLT5uYW1lOw0K CQkkc2tpbmZvWydwYXRoJ10gPSAkdGhpc190aGVtZS0+dXJsOw0KCQkkc2tpbmZvWydwaHBm aWxlJ10gPSAkdGhpc190aGVtZS0+cGF0aCgkc2tpbik7DQoJCSRza2luZm9bJ2Jhc2VkX29u J10gPSAnJzsNCgkJJGNvbnRlbnRzID0gZmlsZV9nZXRfY29udGVudHMoJHNraW5mb1sncGhw ZmlsZSddKTsNCgkJaWYgKCgkcG9zID0gc3RycG9zKCRjb250ZW50cywgJ3RoZW1lOjpiYXNl ZF9vbicpKSAhPT0gZmFsc2UpIHsNCgkJCSRiZWdwb3MgPSBzdHJwb3MoJGNvbnRlbnRzLCAi JyIsICRwb3MpKzE7DQoJCQkkZW5kcG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkYmVn cG9zKTsNCgkJCSRiYXNlID0gc3Vic3RyKCRjb250ZW50cywgJGJlZ3BvcywgJGVuZHBvcy0k YmVncG9zKTsNCgkJCSRza2luZm9bJ2Jhc2VkX29uJ10gPSAoaW5fYXJyYXkoJGJhc2UsICRz bWRfY29yZV90aGVtZXMpKSA/ICcnIDogJGJhc2U7DQoJCX0NCgkJdW5zZXQoJHRoaXNfdGhl bWUpOw0KCX0NCglyZXR1cm4gJHNraW5mbzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBHcmFiIHRoZSB0aHVtYm5haWwgZmlsZW5hbWUgaWYgaXQgZXhpc3RzLCBv cHRpb25hbGx5IHJldHVybiBhIGZvcm1hdHRlZCBpbWcgdGFnDQpmdW5jdGlvbiBzbWRfYXRf Z2V0X3RodW1iKCRza2luLCAkaW1nPTApIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCg0K CSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkdHcgPSBpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3By ZWZzWzBdWydzbWRfYXRfdHcnXTsNCgkkdGggPSBpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90 aCddKSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRf YXRfdGgnXTsNCgkkdXNlX3RodW1iID0gKCR0dyA9PSAwIHx8ICR0aCA9PSAwKSA/IGZhbHNl IDogdHJ1ZTsNCg0KCS8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVzdCBoYXMgYWxyZWFk eSBiZWVuIHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rpb24NCglp ZiAoIWlzX2FycmF5KCRza2luKSkgew0KCQkkc2tpbiA9IHNtZF9hdF9yZWFkX3NraW5mbygk c2tpbik7DQoJfQ0KCWlmICgkc2tpbikgew0KCQkkc2tpbmRpciA9ICRza2luWydwYXRoJ107 DQoJCSR0aHVtYm5hbWUgPSBnbG9iKCRza2luZGlyLidzY3JlZW5zaG90LionKTsNCgkJcmV0 dXJuICgkaW1nICYmICR1c2VfdGh1bWIgJiYgJHRodW1ibmFtZSAmJiBmaWxlX2V4aXN0cygk dGh1bWJuYW1lWzBdKSkgPyAnPGltZyBzcmM9IicuJHRodW1ibmFtZVswXS4nIiBhbHQ9Iicu KChpc3NldCgkc2tpblsnbmFtZSddKSkgPyAkc2tpblsnbmFtZSddIDogJycpLicgdGh1bWJu YWlsIiBzdHlsZT0iYm9yZGVyOjJweCByaWRnZSAjOTk5O3BhZGRpbmc6MnB4OyIgd2lkdGg9 IicuJHR3LiciIGhlaWdodD0iJy4kdGguJyIgLz4nIDogJyc7DQoJfSBlbHNlIHsNCgkJcmV0 dXJuICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfcmVhZF9za2lucygpIHsNCgkkc2tpbl9saXN0ID0gdGhlbWU6Om5hbWVzKCk7 DQoJJHNraW5fbGlzdCA9IHNtZF9hdF9zb3J0KCRza2luX2xpc3QpOw0KCXJldHVybiAkc2tp bl9saXN0Ow0KfQ0KDQovLyBTb3J0IHRoZSBza2lucyBidXQga2VlcCAnY2xhc3NpYycgYXQg dGhlIHRvcA0KZnVuY3Rpb24gc21kX2F0X3NvcnQoJHNraW5fbGlzdCkgew0KCWdsb2JhbCAk cHJlZnM7DQoNCgkkY2FzZVNlbnNlID0gaXNzZXQoJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0 J10pID8gJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10gOiAxOw0KDQoJaWYoJGNhc2VTZW5z ZSkgew0KCQluYXRzb3J0KCRza2luX2xpc3QpOw0KCX0gZWxzZSB7DQoJCW5hdGNhc2Vzb3J0 KCRza2luX2xpc3QpOw0KCX0NCgkkZGZsdF9mb3VuZCA9IGZhbHNlOw0KCWZvcmVhY2ggKCRz a2luX2xpc3QgYXMgJHNraW5faWR4ID0+ICRza2luX25hbWUpIHsNCgkJaWYgKCRza2luX25h bWUgPT0gImNsYXNzaWMiKSB7DQoJCQl1bnNldCgkc2tpbl9saXN0WyRza2luX2lkeF0pOw0K CQkJJGRmbHRfZm91bmQgPSB0cnVlOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJaWYgKCRkZmx0 X2ZvdW5kKSB7DQoJCWFycmF5X3Vuc2hpZnQoJHNraW5fbGlzdCwiY2xhc3NpYyIpOw0KCX0N Cg0KCXJldHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9hdF9saXN0ZGlyKCRzdGFydF9kaXI9Jy4nKSB7DQoJJGZpbGVz ID0gYXJyYXkoKTsNCg0KCWlmIChpc19kaXIoJHN0YXJ0X2RpcikpIHsNCgkJJGZoID0gb3Bl bmRpcigkc3RhcnRfZGlyKTsNCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGZoKSkgIT09 IGZhbHNlKSB7DQoJCQkvLyBsb29wIHRocm91Z2ggdGhlIGZpbGVzLCBza2lwcGluZyAuIGFu ZCAuLiwgYW5kIHJlY3Vyc2luZyBpZiBuZWNlc3NhcnkNCgkJCWlmIChzdHJjbXAoJGZpbGUs ICcuJyk9PTAgfHwgc3RyY21wKCRmaWxlLCAnLi4nKT09MCkgY29udGludWU7DQoJCQkkZmls ZXBhdGggPSAkc3RhcnRfZGlyIC4gJy8nIC4gJGZpbGU7DQoJCQlpZiAoIGlzX2RpcigkZmls ZXBhdGgpICkgew0KCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgc21kX2F0X2xp c3RkaXIoJGZpbGVwYXRoKSk7DQoJCQl9IGVsc2Ugew0KCQkJCWFycmF5X3B1c2goJGZpbGVz LCAkZmlsZXBhdGgpOw0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKCRmaCk7DQoJfSBlbHNlIHsN Cg0KCQkvLyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGFuIGludmFs aWQgbm9uLWRpcmVjdG9yeSBhcmd1bWVudA0KCQkkZmlsZXMgPSBmYWxzZTsNCgl9DQoNCgly ZXR1cm4gJGZpbGVzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJl Y3Vyc2l2ZSBybWRpcigpIGNvdXJ0ZXN5IG9mIHRoZSBwaHAgbWFudWFsIHVzZXIgY29tbWVu dHMNCmZ1bmN0aW9uIHNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoKSB7DQoJaWYgKGlz X2RpcigkZmlsZXBhdGgpICYmICFpc19saW5rKCRmaWxlcGF0aCkpIHsNCgkJaWYgKCRkaCA9 IG9wZW5kaXIoJGZpbGVwYXRoKSkgew0KCQkJd2hpbGUgKCgkc2YgPSByZWFkZGlyKCRkaCkp ICE9PSBmYWxzZSkgew0KCQkJCWlmICgkc2YgPT0gJy4nIHx8ICRzZiA9PSAnLi4nKSBjb250 aW51ZTsNCgkJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoLicvJy4kc2Yp KSB7DQoJCQkJCWJyZWFrOyAvLyBEb2gsIGNhbid0IGRlbGV0ZQ0KCQkJCX0NCgkJCX0NCgkJ CWNsb3NlZGlyKCRkaCk7DQoJCX0NCgkJcmV0dXJuIHJtZGlyKCRmaWxlcGF0aCk7DQoJfQ0K CXJldHVybiB1bmxpbmsoJGZpbGVwYXRoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBGcm9tIFBIUCBtYW51YWwgY29tbWVudHMuIFRoYW5rcyBwdXJlbWFuZ28N CmZ1bmN0aW9uIHNtZF9hdF9pc19kaXIoJGRpcikgew0KCS8vIGJ5cGFzc2VzIG9wZW5fYmFz ZWRpciByZXN0cmljdGlvbnMgb2YgaXNfZGlyIGFuZCBmaWxlcGVybXMNCgkkdG1wX2NtZCA9 IGBscyAtZGwgJGRpcmA7DQoJJGRpcl9mbGFnID0gJHRtcF9jbWRbMF07DQoJaWYoJGRpcl9m bGFnIT0iZCIpIHsNCgkJLy8gbm90IGQ7IHVzZSBuZXh0IGNoYXIgKGZpcnN0IGNoYXIgbWln aHQgYmUgJ3MnIGFuZCBpcyBzdGlsbCBkaXJlY3RvcnkpDQoJCSRkaXJfZmxhZyA9ICR0bXBf Y21kWzFdOw0KCX0NCglyZXR1cm4gKCRkaXJfZmxhZz09ImQiKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWtkaXJfcmVjdXJzaXZlKCRwYXRo LCAkbW9kZSA9IDA3NTUpIHsNCgkkcGF0aCA9IChzdHJwb3MoJHBhdGgsICcvJykgPT09IDAp ID8gc3Vic3RyKCRwYXRoLCAxKSA6ICRwYXRoOw0KCSRkaXJzID0gZXhwbG9kZShEUywgJHBh dGgpOw0KCSRjb3VudCA9IGNvdW50KCRkaXJzKTsNCgkkcGF0aCA9ICcnOw0KCWZvciAoJGlk eCA9IDA7ICRpZHggPCAkY291bnQ7ICsrJGlkeCkgew0KCQkkcGF0aCAuPSBEUyAuICRkaXJz WyRpZHhdOw0KCQlpZiAoIXNtZF9hdF9pc19kaXIoJHBhdGgpKSB7DQoJCQlpZiAoIW1rZGly KCRwYXRoLCAkbW9kZSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0NCgl9DQoJ cmV0dXJuIHRydWU7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX2F0X2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2llKCdzbWRfYXRfcGFnZWJ5 JywgZ3BzKCdxdHknKSk7DQoJc21kX2F0X2xpc3QoJycpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1lc3NhZ2U9JycpIHsN CglnbG9iYWwgJHNtZF9hdF9wcml2czsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5 KCdza2luJywgJ2V2ZW50JywgJ25leHRzdGVwJykpKSk7DQoJJHVybCA9ICI/ZXZlbnQ9Ii4k ZXZlbnQuIiZzdGVwPSIuJG5leHRzdGVwOw0KDQoJaWYgKCRza2luICYmIHNtZF9hdF9leGlz dHMoJHNraW4pKSB7DQoJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAkZXZlbnQsIFBS RUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFURSk7DQoJCSR1cmwgLj0g JyZtZXNzYWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogc21kX2F0X2dUeHQoJ3Nr aW5fc3dpdGNoZWQnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpKTsNCgl9IGVsc2Ugew0K CQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7DQoJfQ0KDQoJLy8gU2luY2UgdGhl IGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJsZS1kZWNsdXRjaCBpbiBvcmRlciB0byBz aG93IHRoZSBza2luIHRoaXMgZmlyc3QgdGltZQ0KCWVjaG8gPDw8RU9TDQo8c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJlZj0ieyR1cmx9IjsN Cjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29u dGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsNCglleGl0Ow0KfQ0K DQovLyBBbGwtdXNlciBza2luIGNob29zZXINCmZ1bmN0aW9uIHNtZF9hZG1hdCgkZXZlbnQs ICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQkn c21kX2F0X3N3aXRjaCcsDQoJCSkpKSB7DQoJCXNtZF9hdF9jaG9vc2VyKCcnKTsNCgl9IGVs c2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfY2hvb3NlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRf YXRfYWRtX2V2ZW50LCAkdGhlbWU7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZz KCk7DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8g JGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3By ZWZzWzBdWydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQoJGF0X3ByZWZzWydz bWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVmc1sw XVsnc21kX2F0X3RoJ10pICsgODA7DQoNCgkkbWVzc2FnZSA9ICgkbWVzc2FnZSkgPyAkbWVz c2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ3NraW5uZXIn KSwkbWVzc2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5uYW1lOw0KDQoJJGFsbG93 ZWQgPSAnJzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSB7DQoJ CSRhbGxvd2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pOw0K CQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgew0KCQkJaWYgKCR2YWxp ZCA9PSAnJykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsNCgkJCX0NCgkJfQ0KCX0N CgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkkaGRyb3cgPSBoZWQoc21k X2F0X2dUeHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRsYXlvdXQ9PSIwIikgew0K CQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJZWNobyB0cigNCgkJCXRkYSgkaGRyb3cs ICcgY29sc3Bhbj0iMyInKQ0KCQkpOw0KCQllY2hvIHRyKA0KCQkJYXNzSGVhZCgNCgkJCQlz bWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9yJywNCgkJCQknZGVzY3JpcHRp b24nDQoJCQkpKTsNCgl9IGVsc2Ugew0KCQllY2hvIDw8PEVPQ1NTDQo8c3R5bGUgdHlwZT0i dGV4dC9jc3MiPg0KLnNtZF9ncmlkIHsNCgl3aWR0aDo5NjBweDsNCgltYXJnaW46MCBhdXRv Ow0KfQ0KLnNtZF9jZWxsIHsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6MTBweDsNCgltYXJn aW46MTBweDsNCglib3JkZXI6MXB4IHJpZGdlICNjY2M7DQoJd2lkdGg6eyR0d31weDsNCglo ZWlnaHQ6eyR0aH1weDsNCn0NCi5zbWRfY2VsbDpob3ZlciB7DQoJYmFja2dyb3VuZDojZGRk Ow0KfQ0KLnNtZF9jbGVhciB7DQoJY2xlYXI6Ym90aDsNCn0NCi5zbWRfYXV0aCB7DQoJdGV4 dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KPC9zdHlsZT4NCkVPQ1NTOw0K CQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21kX25ld3JvdyI+ Jy4kaGRyb3cuJzwvZGl2Pic7DQoJfQ0KCWZvcmVhY2ggKCRhbGxvd2VkIGFzICRza2luX25h bWUpIHsNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9uYW1lKTsNCgkJ aWYgKCRza2luZm8pIHsNCgkJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRza2lu Zm8sIDEpOw0KCQkJJHRoaXNfc2tpbiA9ICgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8g c3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXTsNCgkJCSR0aHVt cm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfYWRtX2V2ZW50LmEuJ3N0ZXA9c21k X2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2FkbWF0Jy5hLidza2luPScuJHNraW5fbmFt ZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLiciPicuJHRoaXNfc2tp bi4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8L2Rpdj4nIDogJycpLic8 L2E+JzsNCgkJCSRhdXRocm93ID0gKHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJpJ10sICJo dHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3VyaSddLici PicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0aG9yJ107DQoNCgkJ CWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJCQllY2hvIHRyKA0KCQkJCQl0ZCgkdGh1bXJvdykN CgkJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJCS50ZCgkc2tpbmZvWydkZXNjcmlwdGlv biddLCAyNTApDQoJCQkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHls ZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpDQoJCQkJKTsNCgkJCX0gZWxzZSB7DQoJ CQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NlbGwiJy4oKCRza2luX25hbWUgPT0gJGN1cnJf c2tpbikgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7IicgOiAnJykuJz4nOw0KCQkJ CWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfYXV0aCI+Jy5zbWRfYXRfZ1R4dCgnYnknKS4kYXV0aHJvdy4nPC9kaXY+JzsNCgkJ CQllY2hvICc8L2Rpdj4nOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkbGF5b3V0PT0iMCIpIHsN CgkJZWNobyBlbmRUYWJsZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNt ZF9jbGVhciI+PC9kaXY+PC9kaXY+JzsNCgl9DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRBUi9HWklQL0JaSVAyL1pJ UCBBUkNISVZFIENMQVNTRVMgMi4xDQogfCBCeSBEZXZpbiBEb3VjZXR0ZQ0KIHwgQ29weXJp Z2h0IChjKSAyMDA1IERldmluIERvdWNldHRlDQogfCBFbWFpbDogZGFya3Nub29weUBzaGF3 LmNhDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQogfCBFbWFpbCBidWdzL3N1Z2dlc3Rpb25zIHRvIGRhcmtzbm9vcHlAc2hhdy5jYQ0K ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K IHwgVGhpcyBzY3JpcHQgaGFzIGJlZW4gY3JlYXRlZCBhbmQgcmVsZWFzZWQgdW5kZXINCiB8 IHRoZSBHTlUgR1BMIGFuZCBpcyBmcmVlIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlDQogfCBv bmx5IGlmIHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgcmVtb3ZlZA0KICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8v IE5PVEU6IGNsYXNzIG5hbWVzIGFsdGVyZWQgdG8gYWRkIHNtZF9hdF8gcHJlZml4IHRvIGF2 b2lkIGNsYXNoZXMgaW4gZ2xvYmFsIHNjb3BlLCBhbmQgYWRkZWQgc3ViZGlyIGNyZWF0aW9u DQoNCmNsYXNzIHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X2FyY2hpdmUo JG5hbWUpDQoJew0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgNCgkJCSdiYXNlZGlyJyA9 PiAiLiIsDQoJCQknbmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVuZCcgPT4gIiIsDQoJCQkn aW5tZW1vcnknID0+IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0KCQkJJ3JlY3Vyc2UnID0+ IDEsDQoJCQknc3RvcmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3dsaW5rcycgPT4gMCwNCgkJ CSdsZXZlbCcgPT4gMywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQknc2Z4JyA9PiAiIiwNCgkJ CSd0eXBlJyA9PiAiIiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkpOw0KCQkkdGhpcy0+Zmls ZXMgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheSAoKTsNCgkJJHRoaXMt PnN0b3Jlb25seSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3IgPSBhcnJheSAoKTsNCgl9 DQoNCglmdW5jdGlvbiBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7DQoJCWZvcmVhY2ggKCRv cHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9wdGlvbnNbJGtleV0gPSAk dmFsdWU7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pKQ0KCQl7 DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8i LCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snYmFz ZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVnX3JlcGxhY2Uo Ii9cLyQvIiwgIiIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQl9DQoJCWlmICgh ZW1wdHkgKCR0aGlzLT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9u c1snbmFtZSddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFt ZSddKTsNCgkJCSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysv IiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgk dGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ3By ZXBlbmQnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBl bmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIv XihcLipcLyspKy8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhp cy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRo aXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCdd ID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCdd KSAuICIvIjsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9hcmNoaXZlKCkNCgl7DQoJ CSR0aGlzLT5tYWtlX2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5 J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSdd ID09IDAgJiYgZmlsZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICgkdGhpcy0+ b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sndHlwZSddID09 ICJiemlwIiA/ICIudG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAi RmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQlj aGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVsc2UgaWYgKCR0aGlzLT5h cmNoaXZlID0gQGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlv bnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnpp cCIgPyAiLnRtcCIgOiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigkcHdkKTsNCgkJCWVsc2UN CgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9w dGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQly ZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9ICIiOw0K DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQljYXNlICJ6aXAi Og0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJv cltdID0gIkNvdWxkIG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJ CX0NCgkJCWJyZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90 YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRh ciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVf YnppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUg YnppcDIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2Ug Imd6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlz LT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4g MDsNCgkJCX0NCgkJCWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkpDQoJCQl7DQoJCQkJJHRo aXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZpbGUuIjsNCgkJCQlyZXR1 cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaWYgKCEkdGhpcy0+ Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBj cmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KDQoJCWlmICgk dGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQlmY2xvc2UoJHRoaXMt PmFyY2hpdmUpOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6aXAiIHx8 ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJCXVubGluaygkdGhpcy0+ b3B0aW9uc1snYmFzZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICIu dG1wIik7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgkZGF0YSkNCgl7DQoJCWlm ICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJZndyaXRlKCR0aGlzLT5h cmNoaXZlLCAkZGF0YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlIC49ICRkYXRhOw0K CX0NCg0KCWZ1bmN0aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+ ZXhjbHVkZSkpDQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUp DQoJCQkJZm9yZWFjaCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgk dmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJdW5zZXQgKCR0aGlz LT5maWxlc1ska2V5XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5zdG9yZW9ubHkpKQ0KCQkJ Zm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVhY2gg KCR0aGlzLT5zdG9yZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFsdWVbJ25hbWUn XSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZpbGVzWyRrZXldWydtZXRo b2QnXSA9IDA7DQoJCXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRoaXMtPnN0b3Jlb25seSk7 DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhp cy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0K CQkJJHRoaXMtPmZpbGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBleGNsdWRl X2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7 DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmV4Y2x1ZGVbXSA9 ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJ JHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFz ICRjdXJyZW50KQ0KCQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJ ZnVuY3Rpb24gbGlzdF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICghaXNfYXJyYXkgKCRsaXN0 KSkNCgkJew0KCQkJJHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0gYXJyYXkgKCR0ZW1wKTsN CgkJCXVuc2V0ICgkdGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkk cHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0K DQoJCWZvcmVhY2ggKCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJCQkkY3VycmVudCA9IHN0 cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3Jl cGxhY2UoIi9cLysvIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVudCA9IHByZWdfcmVw bGFjZSgiL1wvJC8iLCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0cnN0cigkY3VycmVudCwg IioiKSkNCgkJCXsNCgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2UoIi8oW1xcXF5cJFwuXFtc XVx8XChcKVw/XCtce1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJyZW50KTsNCgkJCQkkcmVn ZXggPSBzdHJfcmVwbGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJCQkJJGRpciA9IHN0cnN0 cigkY3VycmVudCwgIi8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwgc3RycnBvcygkY3VycmVu dCwgIi8iKSkgOiAiLiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRkaXIpOw0K CQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJaWYgKHByZWdfbWF0Y2go Ii9eeyRyZWdleH0kL2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJCQkJCQkkZmlsZXNbXSA9 ICRjdXJyZW50MjsNCgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAkdGVtcCwgJGN1cnJlbnQp Ow0KCQkJfQ0KCQkJZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkpDQoJCQl7DQoJCQkJJHRl bXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlmb3JlYWNoICgkdGVtcCBh cyAkZmlsZSkNCgkJCQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1bnNldCAoJHRlbXAsICRm aWxlKTsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkY3VycmVudCkpDQoJCQkJ JGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAnbmFtZTInID0+ICR0aGlz LT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8rKSsv IiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3RyKCRj dXJyZW50LCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVu dCwgIi8iKSArIDEpIDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScgPT4gQGlzX2xpbmsoJGN1 cnJlbnQpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwN CgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRjdXJyZW50LCAiLiIp KSwgJ3N0YXQnID0+IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJCWNoZGlyKCRwd2QpOw0K DQoJCXVuc2V0ICgkY3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQoJGZpbGVzLCBhcnJheSAo InNtZF9hdF9hcmNoaXZlIiwgInNvcnRfZmlsZXMiKSk7DQoNCgkJcmV0dXJuICRmaWxlczsN Cgl9DQoNCglmdW5jdGlvbiBwYXJzZV9kaXIoJGRpcm5hbWUpDQoJew0KCQlpZiAoJHRoaXMt Pm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAxICYmICFwcmVnX21hdGNoKCIvXihcLitcLyop KyQvIiwgJGRpcm5hbWUpKQ0KCQkJJGZpbGVzID0gYXJyYXkgKGFycmF5ICgnbmFtZScgPT4g JGRpcm5hbWUsICduYW1lMicgPT4gJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSAuDQoJCQkJ cHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9wdGlvbnNbJ3N0b3Jl cGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZGlybmFtZSwgIi8iKSkgPw0KCQkJCXN1YnN0cigk ZGlybmFtZSwgc3RycnBvcygkZGlybmFtZSwgIi8iKSArIDEpIDogJGRpcm5hbWUpLCAndHlw ZScgPT4gNSwgJ3N0YXQnID0+IHN0YXQoJGRpcm5hbWUpKSk7DQoJCWVsc2UNCgkJCSRmaWxl cyA9IGFycmF5ICgpOw0KCQkkZGlyID0gQG9wZW5kaXIoJGRpcm5hbWUpOw0KDQoJCXdoaWxl ICgkZmlsZSA9IEByZWFkZGlyKCRkaXIpKQ0KCQl7DQoJCQkkZnVsbG5hbWUgPSAkZGlybmFt ZSAuICIvIiAuICRmaWxlOw0KCQkJaWYgKCRmaWxlID09ICIuIiB8fCAkZmlsZSA9PSAiLi4i KQ0KCQkJCWNvbnRpbnVlOw0KCQkJZWxzZSBpZiAoQGlzX2RpcigkZnVsbG5hbWUpKQ0KCQkJ ew0KCQkJCWlmIChlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3JlY3Vyc2UnXSkpDQoJCQkJCWNv bnRpbnVlOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZnVsbG5hbWUpOw0KCQkJ CWZvcmVhY2ggKCR0ZW1wIGFzICRmaWxlMikNCgkJCQkJJGZpbGVzW10gPSAkZmlsZTI7DQoJ CQl9DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGZ1bGxuYW1lKSkNCgkJCQkkZmlsZXNb XSA9IGFycmF5ICgnbmFtZScgPT4gJGZ1bGxuYW1lLCAnbmFtZTInID0+ICR0aGlzLT5vcHRp b25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8rKSsvIiwgIiIs ICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3RyKCRmdWxsbmFt ZSwgIi8iKSkgPw0KCQkJCQlzdWJzdHIoJGZ1bGxuYW1lLCBzdHJycG9zKCRmdWxsbmFtZSwg Ii8iKSArIDEpIDogJGZ1bGxuYW1lKSwNCgkJCQkJJ3R5cGUnID0+IEBpc19saW5rKCRmdWxs bmFtZSkgJiYgJHRoaXMtPm9wdGlvbnNbJ2ZvbGxvd2xpbmtzJ10gPT0gMCA/IDIgOiAwLA0K CQkJCQknZXh0JyA9PiBzdWJzdHIoJGZpbGUsIHN0cnJwb3MoJGZpbGUsICIuIikpLCAnc3Rh dCcgPT4gc3RhdCgkZnVsbG5hbWUpKTsNCgkJfQ0KDQoJCUBjbG9zZWRpcigkZGlyKTsNCg0K CQlyZXR1cm4gJGZpbGVzOw0KCX0NCg0KCWZ1bmN0aW9uIHNvcnRfZmlsZXMoJGEsICRiKQ0K CXsNCgkJaWYgKCRhWyd0eXBlJ10gIT0gJGJbJ3R5cGUnXSkNCgkJCWlmICgkYVsndHlwZSdd ID09IDUgfHwgJGJbJ3R5cGUnXSA9PSAyKQ0KCQkJCXJldHVybiAtMTsNCgkJCWVsc2UgaWYg KCRhWyd0eXBlJ10gPT0gMiB8fCAkYlsndHlwZSddID09IDUpDQoJCQkJcmV0dXJuIDE7DQoJ CWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gNSkNCgkJCXJldHVybiBzdHJjbXAoc3RydG9sb3dl cigkYVsnbmFtZSddKSwgc3RydG9sb3dlcigkYlsnbmFtZSddKSk7DQoJCWVsc2UgaWYgKCRh WydleHQnXSAhPSAkYlsnZXh0J10pDQoJCQlyZXR1cm4gc3RyY21wKCRhWydleHQnXSwgJGJb J2V4dCddKTsNCgkJZWxzZSBpZiAoJGFbJ3N0YXQnXVs3XSAhPSAkYlsnc3RhdCddWzddKQ0K CQkJcmV0dXJuICRhWydzdGF0J11bN10gPiAkYlsnc3RhdCddWzddID8gLTEgOiAxOw0KCQll bHNlDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUnXSksIHN0cnRvbG93 ZXIoJGJbJ25hbWUnXSkpOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglmdW5jdGlvbiBkb3dubG9h ZF9maWxlKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0K CQl7DQoJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDYW4gb25seSB1c2UgZG93bmxvYWRfZmlsZSgp IGlmIGFyY2hpdmUgaXMgaW4gbWVtb3J5LiBSZWRpcmVjdCB0byBmaWxlIG90aGVyd2lzZSwg aXQgaXMgZmFzdGVyLiI7DQoJCQlyZXR1cm47DQoJCX0NCgkJc3dpdGNoICgkdGhpcy0+b3B0 aW9uc1sndHlwZSddKQ0KCQl7DQoJCWNhc2UgInppcCI6DQoJCQloZWFkZXIoIkNvbnRlbnQt VHlwZTogYXBwbGljYXRpb24vemlwIik7DQoJCQlicmVhazsNCgkJY2FzZSAiYnppcCI6DQoJ CQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1iemlwMiIpOw0KCQkJYnJl YWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0 aW9uL3gtZ3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgInRhciI6DQoJCQloZWFkZXIoIkNv bnRlbnQtVHlwZTogYXBwbGljYXRpb24veC10YXIiKTsNCgkJfQ0KCQkkaGVhZGVyID0gIkNv bnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIjsNCgkJJGhlYWRl ciAuPSBzdHJzdHIoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIi8iKSA/IHN1YnN0cigkdGhp cy0+b3B0aW9uc1snbmFtZSddLCBzdHJycG9zKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICIv IikgKyAxKSA6ICR0aGlzLT5vcHRpb25zWyduYW1lJ107DQoJCSRoZWFkZXIgLj0gIlwiIjsN CgkJaGVhZGVyKCRoZWFkZXIpOw0KCQloZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAiIC4gc3Ry bGVuKCR0aGlzLT5hcmNoaXZlKSk7DQoJCWhlYWRlcigiQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogYmluYXJ5Iik7DQoJCWhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG11 c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT02MCIpOw0KCQloZWFkZXIoIkV4cGlyZXM6IFNhdCwg MDEgSmFuIDIwMDAgMTI6MDA6MDAgR01UIik7DQoJCXByaW50KCR0aGlzLT5hcmNoaXZlKTsN Cgl9DQp9DQoNCmNsYXNzIHNtZF9hdF90YXJfZmlsZSBleHRlbmRzIHNtZF9hdF9hcmNoaXZl DQp7DQoJZnVuY3Rpb24gc21kX2F0X3Rhcl9maWxlKCRuYW1lKQ0KCXsNCgkJJHRoaXMtPnNt ZF9hdF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJ0YXIi Ow0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV90YXIoKQ0KCXsNCgkJJHB3ZCA9IGdldGN3ZCgp Ow0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3JlYWNoICgk dGhpcy0+ZmlsZXMgYXMgJGN1cnJlbnQpDQoJCXsNCgkJCWlmICgkY3VycmVudFsnbmFtZSdd ID09ICR0aGlzLT5vcHRpb25zWyduYW1lJ10pDQoJCQkJY29udGludWU7DQoJCQlpZiAoc3Ry bGVuKCRjdXJyZW50WyduYW1lMiddKSA+IDk5KQ0KCQkJew0KCQkJCSRwYXRoID0gc3Vic3Ry KCRjdXJyZW50WyduYW1lMiddLCAwLCBzdHJwb3MoJGN1cnJlbnRbJ25hbWUyJ10sICIvIiwg c3RybGVuKCRjdXJyZW50WyduYW1lMiddKSAtIDEwMCkgKyAxKTsNCgkJCQkkY3VycmVudFsn bmFtZTInXSA9IHN1YnN0cigkY3VycmVudFsnbmFtZTInXSwgc3RybGVuKCRwYXRoKSk7DQoJ CQkJaWYgKHN0cmxlbigkcGF0aCkgPiAxNTQgfHwgc3RybGVuKCRjdXJyZW50WyduYW1lMidd KSA+IDk5KQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGFkZCB7 JHBhdGh9eyRjdXJyZW50WyduYW1lMiddfSB0byBhcmNoaXZlIGJlY2F1c2UgdGhlIGZpbGVu YW1lIGlzIHRvbyBsb25nLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCX0NCgkJCSRi bG9jayA9IHBhY2soImExMDBhOGE4YThhMTJhMTJhOGExYTEwMGE2YTJhMzJhMzJhOGE4YTE1 NWExMiIsICRjdXJyZW50WyduYW1lMiddLCBzcHJpbnRmKCIlMDdvIiwNCgkJCQkkY3VycmVu dFsnc3RhdCddWzJdKSwgc3ByaW50ZigiJTA3byIsICRjdXJyZW50WydzdGF0J11bNF0pLCBz cHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0YXQnXVs1XSksDQoJCQkJc3ByaW50ZigiJTAx MW8iLCAkY3VycmVudFsndHlwZSddID09IDIgPyAwIDogJGN1cnJlbnRbJ3N0YXQnXVs3XSks IHNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSksDQoJCQkJIiAgICAgICAg IiwgJGN1cnJlbnRbJ3R5cGUnXSwgJGN1cnJlbnRbJ3R5cGUnXSA9PSAyID8gQHJlYWRsaW5r KCRjdXJyZW50WyduYW1lJ10pIDogIiIsICJ1c3RhciAiLCAiICIsDQoJCQkJIlVua25vd24i LCAiVW5rbm93biIsICIiLCAiIiwgIWVtcHR5ICgkcGF0aCkgPyAkcGF0aCA6ICIiLCAiIik7 DQoNCgkJCSRjaGVja3N1bSA9IDA7DQoJCQlmb3IgKCRpID0gMDsgJGkgPCA1MTI7ICRpKysp DQoJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJsb2NrLCAkaSwgMSkpOw0KCQkJJGNo ZWNrc3VtID0gcGFjaygiYTgiLCBzcHJpbnRmKCIlMDdvIiwgJGNoZWNrc3VtKSk7DQoJCQkk YmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICRjaGVja3N1bSwgMTQ4LCA4KTsNCg0K CQkJaWYgKCRjdXJyZW50Wyd0eXBlJ10gPT0gMiB8fCAkY3VycmVudFsnc3RhdCddWzddID09 IDApDQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQllbHNlIGlmICgkZnAgPSBA Zm9wZW4oJGN1cnJlbnRbJ25hbWUnXSwgInJiIikpDQoJCQl7DQoJCQkJJHRoaXMtPmFkZF9k YXRhKCRibG9jayk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJGZwLCAxMDQ4NTc2KSkN CgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQlpZiAoJGN1cnJlbnRbJ3N0YXQn XVs3XSAlIDUxMiA+IDApDQoJCQkJew0KCQkJCQkkdGVtcCA9ICIiOw0KCQkJCQlmb3IgKCRp ID0gMDsgJGkgPCA1MTIgLSAkY3VycmVudFsnc3RhdCddWzddICUgNTEyOyAkaSsrKQ0KCQkJ CQkJJHRlbXAgLj0gIlwwIjsNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQl9 DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRoaXMtPmVycm9yW10g PSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0gZm9yIHJlYWRpbmcu IEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRfZGF0YShwYWNrKCJh MTAyNCIsICIiKSk7DQoNCgkJY2hkaXIoJHB3ZCk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJ ZnVuY3Rpb24gZXh0cmFjdF9maWxlcygpDQoJew0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNo ZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWlmICgkZnAgPSAkdGhpcy0+ b3Blbl9hcmNoaXZlKCkpDQoJCXsNCgkJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnkn XSA9PSAxKQ0KCQkJCSR0aGlzLT5maWxlcyA9IGFycmF5ICgpOw0KDQoJCQl3aGlsZSAoJGJs b2NrID0gZnJlYWQoJGZwLCA1MTIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gdW5wYWNrKCJhMTAw bmFtZS9hOG1vZGUvYTh1aWQvYThnaWQvYTEyc2l6ZS9hMTJtdGltZS9hOGNoZWNrc3VtL2Ex dHlwZS9hMTAwc3ltbGluay9hNm1hZ2ljL2EydGVtcC9hMzJ0ZW1wL2EzMnRlbXAvYTh0ZW1w L2E4dGVtcC9hMTU1cHJlZml4L2ExMnRlbXAiLCAkYmxvY2spOw0KCQkJCSRmaWxlID0gYXJy YXkgKA0KCQkJCQknbmFtZScgPT4gJHRlbXBbJ3ByZWZpeCddIC4gJHRlbXBbJ25hbWUnXSwN CgkJCQkJJ3N0YXQnID0+IGFycmF5ICgNCgkJCQkJCTIgPT4gJHRlbXBbJ21vZGUnXSwNCgkJ CQkJCTQgPT4gb2N0ZGVjKCR0ZW1wWyd1aWQnXSksDQoJCQkJCQk1ID0+IG9jdGRlYygkdGVt cFsnZ2lkJ10pLA0KCQkJCQkJNyA9PiBvY3RkZWMoJHRlbXBbJ3NpemUnXSksDQoJCQkJCQk5 ID0+IG9jdGRlYygkdGVtcFsnbXRpbWUnXSksDQoJCQkJCSksDQoJCQkJCSdjaGVja3N1bScg PT4gb2N0ZGVjKCR0ZW1wWydjaGVja3N1bSddKSwNCgkJCQkJJ3R5cGUnID0+ICR0ZW1wWyd0 eXBlJ10sDQoJCQkJCSdtYWdpYycgPT4gJHRlbXBbJ21hZ2ljJ10sDQoJCQkJKTsNCg0KCQkJ CWlmICgkZmlsZVsnY2hlY2tzdW0nXSA9PSAweDAwMDAwMDAwKQ0KCQkJCQlicmVhazsNCgkJ CQllbHNlIGlmIChzdWJzdHIoJGZpbGVbJ21hZ2ljJ10sIDAsIDUpICE9ICJ1c3RhciIpDQoJ CQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBw b3J0IGV4dHJhY3RpbmcgdGhpcyB0eXBlIG9mIHRhciBmaWxlLiI7DQoJCQkJCWJyZWFrOw0K CQkJCX0NCgkJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICIgICAgICAgICIs IDE0OCwgOCk7DQoJCQkJJGNoZWNrc3VtID0gMDsNCgkJCQlmb3IgKCRpID0gMDsgJGkgPCA1 MTI7ICRpKyspDQoJCQkJCSRjaGVja3N1bSArPSBvcmQoc3Vic3RyKCRibG9jaywgJGksIDEp KTsNCgkJCQlpZiAoJGZpbGVbJ2NoZWNrc3VtJ10gIT0gJGNoZWNrc3VtKQ0KCQkJCQkkdGhp cy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgZXh0cmFjdCBmcm9tIHskdGhpcy0+b3B0aW9uc1sn bmFtZSddfSwgaXQgaXMgY29ycnVwdC4iOw0KDQoJCQkJLy8gQWRkZWQ6IGNyZWF0ZSBkaXIg aWYgcmVxdWlyZWQNCgkJCQlpZiAoc3RycG9zKCRmaWxlWyduYW1lJ10sICcuLicpID09PSBm YWxzZSkgew0KCQkJCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmaWxlWyduYW1lJ10pOw0K CQkJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlWyduYW1lJ10pKSB7DQoJCQkJCQkkcmV0ID0g c21kX21rZGlyX3JlY3Vyc2l2ZSgoKGlzc2V0KCRwYXRoX3BhcnRzWydleHRlbnNpb24nXSkp ID8gZGlybmFtZSgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRTLiRmaWxlWyduYW1lJ10p IDogJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSk7DQoJCQkJ CX0NCgkJCQl9DQoNCgkJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMSkN CgkJCQl7DQoJCQkJCSRmaWxlWydkYXRhJ10gPSBmcmVhZCgkZnAsICRmaWxlWydzdGF0J11b N10pOw0KCQkJCQlmcmVhZCgkZnAsICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSA9 PSA1MTIgPyAwIDogKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIpKTsNCgkJCQkJdW5z ZXQgKCRmaWxlWydjaGVja3N1bSddLCAkZmlsZVsnbWFnaWMnXSk7DQoJCQkJCSR0aGlzLT5m aWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRmaWxlWyd0eXBlJ10gPT0g NSkNCgkJCQl7DQoJCQkJCWlmICghaXNfZGlyKCRmaWxlWyduYW1lJ10pKQ0KCQkJCQkJbWtk aXIoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVsyXSk7DQoJCQkJfQ0KCQkJCWVsc2Ug aWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZpbGVfZXhpc3RzKCRm aWxlWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAieyRmaWxlWydu YW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQll bHNlIGlmICgkZmlsZVsndHlwZSddID09IDIpDQoJCQkJew0KCQkJCQlzeW1saW5rKCR0ZW1w WydzeW1saW5rJ10sICRmaWxlWyduYW1lJ10pOw0KCQkJCQljaG1vZCgkZmlsZVsnbmFtZSdd LCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJG5ldyA9IGZvcGVu KCRmaWxlWyduYW1lJ10sICJ3YiIpKQ0KCQkJCXsNCgkJCQkJZndyaXRlKCRuZXcsIGZyZWFk KCRmcCwgJGZpbGVbJ3N0YXQnXVs3XSkpOw0KCQkJCQlmcmVhZCgkZnAsICg1MTIgLSAkZmls ZVsnc3RhdCddWzddICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRmaWxlWydzdGF0J11b N10gJSA1MTIpKTsNCgkJCQkJZmNsb3NlKCRuZXcpOw0KCQkJCQlAY2htb2QoJGZpbGVbJ25h bWUnXSwgMDY0NCk7IC8vIEhhcmQtY29kZWQgZm9yIG5vdyBiZWNhdXNlIHRoZSBzdHVwaWQg MDEwMDY0NCB2YWx1ZSBpbiAkZmlsZVsnc3RhdCddWzJdIGNvbmZ1c2VzIHRoZSBPUy9QSFAN CgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQg bm90IG9wZW4geyRmaWxlWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJCQkJCWNvbnRpbnVl Ow0KCQkJCX0NCgkJCQkvLyBSZW1vdmUgb3duZXIgYW5kIGdyb3VwIHNldHRpbmcgc2luY2Ug dGhlcmUgaXMgYWxtb3N0IDAgbGlrZWxpaG9vZCB0aGUgZmlsZXMgd2lsbCBoYXZlIHRoZSBz YW1lIHVzZXIvZ3JvdXAgYWNyb3NzIHN5c3RlbXMNCgkJCQkvLyBJbiBvdGhlciB3b3Jkcywg bGVhdmUgb3duZXIvZ3JvdXAgYXQgdGhlIEFwYWNoZSBkZWZhdWx0IC0tIHdoaWNoIGlzIHdo YXQgd2Ugd2FudA0KLy8JCQkJY2hvd24oJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs0 XSk7DQovLwkJCQljaGdycCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzVdKTsNCgkJ CQlAdG91Y2goJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs5XSk7DQoJCQkJdW5zZXQg KCRmaWxlKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3Vs ZCBub3Qgb3BlbiBmaWxlIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSI7DQoNCgkJY2hkaXIo JHB3ZCk7DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBA Zm9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0KDQpjbGFzcyBz bWRfYXRfZ3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7DQoJZnVuY3Rpb24g c21kX2F0X2d6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfdGFyX2ZpbGUo JG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImd6aXAiOw0KCX0NCg0KCWZ1 bmN0aW9uIGNyZWF0ZV9nemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1v cnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRpcigkdGhpcy0+ b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBnem9wZW4oJHRoaXMtPm9wdGlv bnNbJ25hbWUnXSwgIndieyR0aGlzLT5vcHRpb25zWydsZXZlbCddfSIpKQ0KCQkJew0KCQkJ CWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgk dGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWd6d3JpdGUoJGZwLCAkdGVtcCk7DQoJ CQkJZ3pjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJ ew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskdGhpcy0+b3B0aW9u c1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVy biAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlID0gZ3plbmNvZGUo JHRoaXMtPmFyY2hpdmUsICR0aGlzLT5vcHRpb25zWydsZXZlbCddKTsNCg0KCQlyZXR1cm4g MTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJcmV0dXJuIEBnem9w ZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRf YXRfYnppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7DQoJZnVuY3Rpb24gc21k X2F0X2J6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfdGFyX2ZpbGUoJG5h bWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImJ6aXAiOw0KCX0NCg0KCWZ1bmN0 aW9uIGNyZWF0ZV9iemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnkn XSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRpcigkdGhpcy0+b3B0 aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBiem9wZW4oJHRoaXMtPm9wdGlvbnNb J25hbWUnXSwgIndiIikpDQoJCQl7DQoJCQkJZnNlZWsoJHRoaXMtPmFyY2hpdmUsIDApOw0K CQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCR0aGlzLT5hcmNoaXZlLCAxMDQ4NTc2KSkNCgkJ CQkJYnp3cml0ZSgkZnAsICR0ZW1wKTsNCgkJCQliemNsb3NlKCRmcCk7DQoJCQkJY2hkaXIo JHB3ZCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291 bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJ CQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJ JHRoaXMtPmFyY2hpdmUgPSBiemNvbXByZXNzKCR0aGlzLT5hcmNoaXZlLCAkdGhpcy0+b3B0 aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9h cmNoaXZlKCkNCgl7DQoJCXJldHVybiBAYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10s ICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4dGVuZHMgc21kX2F0 X2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkk dGhpcy0+c21kX2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSdd ID0gInppcCI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJew0KCQkkZmlsZXMg PSAwOw0KCQkkb2Zmc2V0ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0KCQlpZiAoIWVtcHR5 ICgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBmb3BlbigkdGhpcy0+ b3B0aW9uc1snc2Z4J10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCBm aWxlc2l6ZSgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xvc2UoJGZwKTsNCgkJ CQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0gc3RybGVuKCR0ZW1w KTsNCgkJCQl1bnNldCAoJHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJv cltdID0gIkNvdWxkIG5vdCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRoaXMtPm9wdGlvbnNb J3NmeCddfS4iOw0KDQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlv bnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRjdXJyZW50 KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0aW9uc1snbmFt ZSddKQ0KCQkJCWNvbnRpbnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBsb2RlKCIgIiwgZGF0 ZSgiWSBuIGogRyBpIHMiLCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJCQkkdGltZWRhdGUg PSAoJHRpbWVkYXRlWzBdIC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRlWzFdIDw8IDIxKSB8 ICgkdGltZWRhdGVbMl0gPDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNdIDw8IDExKSB8ICgk dGltZWRhdGVbNF0gPDwgNSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJJGJsb2NrID0gcGFj aygiVnZ2dlYiLCAweDA0MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlzc2V0KCRjdXJyZW50 WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAw IDogMHgwMDA4LCAkdGltZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9 PSAwICYmICRjdXJyZW50Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFj aygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4o JGN1cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sgLj0gJGN1cnJl bnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJ JGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAx NCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4 MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlv bnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJ CTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsn bmFtZTInXSkgKyAxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50 Wyd0eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJ CQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkkZmlsZXMrKzsN CgkJCQkkb2Zmc2V0ICs9ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJ fQ0KCQkJZWxzZSBpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJew0KCQkJCSRi bG9jayAuPSBwYWNrKCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAw MDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49 ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJ CSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAw MTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAw eDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRp b25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJ CQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRb J25hbWUyJ10pLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJyZW50Wyd0 eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkk Y2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zm c2V0ICs9ICgzMCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0KCQkJZWxz ZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJ CSR0ZW1wID0gZnJlYWQoJGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsNCgkJCQlmY2xvc2Uo JGZwKTsNCgkJCQkkY3JjMzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYgKCFpc3NldCgkY3Vy cmVudFsnbWV0aG9kJ10pICYmICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAxKQ0KCQkJ CXsNCgkJCQkJJHRlbXAgPSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+b3B0aW9uc1snbGV2 ZWwnXSk7DQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJCQkJCSR0ZW1wID0g c3Vic3RyKCR0ZW1wLCAyLCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJJHNpemUg PSBzdHJsZW4oJHRlbXApOw0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsICRjcmMzMiwg JHNpemUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSks IDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlz LT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJ dW5zZXQgKCR0ZW1wKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZW IiwgMHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/ IDB4MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhv ZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAw MDgsICR0aW1lZGF0ZSwNCgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRbJ3N0YXQnXVs3 XSwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVu dFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxl bigkY3VycmVudFsnbmFtZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRo aXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0g Zm9yIHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRf ZGF0YSgkY2VudHJhbCk7DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2soIlZ2dnZ2VlZ2Iiwg MHgwNjA1NGI1MCwgMHgwMDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVzLCBzdHJsZW4oJGNl bnRyYWwpLCAkb2Zmc2V0LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCdd KSA/IHN0cmxlbigkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4MDAwMCkpOw0KDQoJ CWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0KCQkJJHRoaXMtPmFk ZF9kYXRhKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pOw0KDQoJCWNoZGlyKCRwd2QpOw0K DQoJCXJldHVybiAxOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQov LyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJl cXVpcmVkDQpmdW5jdGlvbiBzbWRfYXRfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7 DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FjdGlvbnMnID0+ICdBY3Rpb25zJywNCgkJJ2FsbG93 ZWRfc2tpbnMnID0+ICdBbGxvd2VkIHRoZW1lczonLA0KCQknYXBwbHlfc2tpbicgPT4gJ0Fw cGx5IHRoaXMgdGhlbWUnLA0KCQknYXZhaWxfdGl0bGUnID0+ICdBdmFpbGFibGUgdGhlbWVz JywNCgkJJ2Jhc2VkX29uJyA9PiAnIChiYXNlZCBvbiB7c2tpbn0pJywNCgkJJ2J5JyA9PiAn IGJ5ICcsDQoJCSdjX2J6aXAyJyA9PiAnQlppcCcsDQoJCSdjX2d6aXAnID0+ICdHWmlwJywN CgkJJ2NfdGFyJyA9PiAnVGFyJywNCgkJJ2NfemlwJyA9PiAnWmlwJywNCgkJJ2Nhc2Vfc29y dCcgPT4gJ0Nhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3Q6JywNCgkJJ2NsZWFyJyA9PiAnbm9u ZScsDQoJCSdjbG9uZScgPT4gJ0Jhc2UnLA0KCQknY29uZmlybScgPT4gJ0dvJywNCgkJJ2Nv cmVfdGhlbWUnID0+ICdDYW5ub3QgZGVsZXRlIHtza2lufTogY29yZSB0aGVtZScsDQoJCSdj b3JlX3RoZW1lX2ZpbGUnID0+ICdDYW5ub3QgZGVsZXRlIGZpbGVzIGZyb20ge3NraW59OiBj b3JlIHRoZW1lJywNCgkJJ2NydXNoX3R5cGUnID0+ICdFeHBvcnQgY29tcHJlc3Npb24gdHlw ZTonLA0KCQknY3J1c2hfZm9ybWF0JyA9PiAnRm9ybWF0OicsDQoJCSdzc2MnID0+ICdTdHls ZXBsYXRlcycsDQoJCSdjc3MnID0+ICdTdHlsZXMnLA0KCQknZGVsZXRlX2NvbmZpcm0nID0+ ICdSZWFsbHkgZGVsZXRlIHRoZW1lIHtza2lufT8nLA0KCQknZGVsZXRlX2ZhaWxlZCcgPT4g J0RlbGV0ZSBmYWlsZWQuIFRyeSByZW1vdmluZyBpdCBtYW51YWxseScsDQoJCSdlZGl0X2xi bCcgPT4gJ1RoZW1lIGVkaXRvcicsDQoJCSdlbXB0eV9pbmZvJyA9PiAnWW91IHNob3VsZCBj aG9vc2UgYSBmaWxlIGZpcnN0IDotKScsDQoJCSdleHBvcnQnID0+ICdFeHBvcnQnLA0KCQkn ZmlsZV9ub3RfZGVsZXRlZCcgPT4gJ0ZpbGUge25hbWV9ICcuc3Ryb25nKCJub3QiKS4nIGRl bGV0ZWQnLA0KCQknZmlsZV9zYXZlZCcgPT4gJ0ZpbGUge25hbWV9IHNhdmVkJywNCgkJJ2Zp bmRfdGhlbWUnID0+ICdCcm93c2UgdGhlbWVzJywNCgkJJ2dsb2JhbF9za2luJyA9PiAnRGVm YXVsdCB0aGVtZTonLA0KCQknaGVscF9saW5rJyA9PiAnKDxhIGhyZWY9IntsaW5rfSI+SGVs cDwvYT4pJywNCgkJJ2ltZycgPT4gJ0ltYWdlcycsDQoJCSdpbXBvcnRfZmFpbGVkJyA9PiAn SW5zdGFsbGF0aW9uIGZhaWxlZCA6LSggQ2hlY2sgdGhlIGZpbGUgc3RydWN0dXJlJywNCgkJ J2ltcG9ydF9zdWNjZXNzJyA9PiAnSW5zdGFsbGF0aW9uIHN1Y2Nlc3NmdWwuIEZpbGVzIGV4 dHJhY3RlZDoge251bX0nLA0KCQknaW1wb3J0X29rJyA9PiAnSW5zdGFsbGF0aW9uIHN1Y2Nl c3NmdWwuJywNCgkJJ2luc3RhbGxfc2tpbicgPT4gJ0luc3RhbGwgdGhlbWUnLA0KCQknaW52 YWxpZF9maWxlJyA9PiAnUm9ndWUgZmlsZSBkZXRlY3RlZDoge25hbWV9JywNCgkJJ2lzX2ds b2JhbCcgPT4gJyBbREVGQVVMVF0nLA0KCQknanMnID0+ICdTY3JpcHRzJywNCgkJJ2xheW91 dCcgPT4gJ0xheW91dCBtZXRob2Q6JywNCgkJJ2xheW91dF9saXN0JyA9PiAnTGlzdCcsDQoJ CSdsYXlvdXRfZ3JpZCcgPT4gJ0dyaWQnLA0KCQknbGlzdF90aXRsZScgPT4gJ0luc3RhbGxl ZCB0aGVtZXMnLA0KCQknbWFuYWdlX2xibCcgPT4gJ1RoZW1lIG1hbmFnZXInLA0KCQknbWtk aXJfZmFpbGVkJyA9PiAnQ2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIGZpbGUge25hbWV9 LiBUcnkgbWFudWFsbHkgY3JlYXRpbmcgaXQuJywNCgkJJ25hbWVfZW1wdHknID0+ICdZb3Ug c2hvdWxkIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUgOi0pJywNCgkJJ25ldycgPT4gJ0NyZWF0 ZSBuZXcgdGhlbWUnLA0KCQknbmV3X2ZpbGUnID0+ICdOZXcgZmlsZScsDQoJCSduZXdfY2xv bmVza2luJyA9PiAnTmFtZSBvZiBjb3B5OicsDQoJCSduZXdfc2tpbicgPT4gJ1RoZW1lIG5h bWU6JywNCgkJJ290aGVyX2ZpbGVzJyA9PiAnT3RoZXJzJywNCgkJJ3BocCcgPT4gJ0NvZGUn LA0KCQkncGVyX2dyb3VwJyA9PiAnT25lIHRoZW1lIHBlciBwcml2aWxlZ2UgbGV2ZWwnLA0K CQkncGVyX3NpdGUnID0+ICdPbmUgdGhlbWUgZm9yIGV2ZXJ5b25lJywNCgkJJ3Blcl91c2Vy JyA9PiAnT25lIHRoZW1lIHBlciB1c2VyJywNCgkJJ3ByZWZzX2RlbGV0ZWQnID0+ICdQcmVm ZXJlbmNlcyBkZWxldGVkJywNCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2Vz IGluc3RhbGxlZCcsDQoJCSdwcmVmc19ub3RfaW5zdGFsbGVkJyA9PiAnUHJlZmVyZW5jZXMg bm90IGluc3RhbGxlZC4nLA0KCQkncHJlZnNfc29tZScgPT4gJ05vdCBhbGwgcHJlZmVyZW5j ZXMgYXZhaWxhYmxlLicsDQoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdJdCBpcyBlaXRo ZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5ici4ncGx1 Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyLidoYXZl IGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywNCgkJJ3ByZWZzX3NvbWVfb3B0aW9ucycgPT4g J0Nob29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3ZlIHRoZW0gYWxsIG9yICcuZ1R4 dCgnaW5zdGFsbCcpLicgdG8gYWRkJy5ici4nYW55IG5ldyBvbmVzLCBsZWF2aW5nIGFsbCBl eGlzdGluZyBwcmVmZXJlbmNlcyB1bnRvdWNoZWQuJywNCgkJJ3ByZWZzX3RpdGxlJyA9PiAn QWRtaW4gdGhlbWUgcHJlZmVyZW5jZXMnLA0KCQkncmVuYW1lX2ZhaWxlZCcgPT4gJ1JlbmFt ZSBmYWlsZWQnLA0KCQkncmVuYW1lZCcgPT4gJ1JlbmFtZWQgdG8ge25hbWV9JywNCgkJJ3Nl dCcgPT4gJ1NldCcsDQoJCSdzZXR1cCcgPT4gJ1ByZWZlcmVuY2VzJywNCgkJJ3NraW5fZ2Js JyA9PiAnVGhlbWUnLA0KCQknc2tpbl9jbG9uZWQnID0+ICdUaGVtZSBleHRlbmRlZCBhcyB7 bmFtZX0nLA0KCQknc2tpbl9jcmVhdGVkJyA9PiAnVGhlbWUge25hbWV9IGNyZWF0ZWQnLA0K CQknc2tpbl9kZWxldGVkJyA9PiAnVGhlbWUge25hbWV9IGRlbGV0ZWQnLA0KCQknc2tpbl9l eGlzdHMnID0+ICdUaGVtZSB7bmFtZX0gYWxyZWFkeSBleGlzdHMnLA0KCQknc2tpbl9maWxl cycgPT4gJ1RoZW1lIGZpbGVzJywNCgkJJ3NraW5fZ3JvdXBzJyA9PiAnR3JvdXAgdGhlbWVz OicsDQoJCSdza2luX2ltYWdlcycgPT4gJ1RoZW1lIGltYWdlcycsDQoJCSdza2luX2xpc3Qn ID0+ICdUaGVtZSBsaXN0JywNCgkJJ3NraW5fZ3JpZCcgPT4gJ1RoZW1lIGdyaWQnLA0KCQkn c2tpbl9ub3RfY3JlYXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBjb3VsZCBub3QgYmUgY3JlYXRl ZC4gVHJ5IG1hbnVhbGx5IG1ha2luZyB0aGUgZGlyZWN0b3J5JywNCgkJJ3NraW5fbm90X2Zv dW5kJyA9PiAnVGhlIHRoZW1lIHtuYW1lfSBjb3VsZCBub3QgYmUgZm91bmQnLA0KCQknc2tp bl9zd2l0Y2hlZCcgPT4gJ1RoZW1lIHN3aXRjaGVkIHRvIHtza2lufScsDQoJCSdza2luX3N5 c3RlbScgPT4gJ1RoZW1lIHN5c3RlbTonLA0KCQknc2tpbm5lcicgPT4gJ1RoZW1lJywNCgkJ J3RhYl9uYW1lJyA9PiAnQWRtaW4gdGhlbWVzJywNCgkJJ3RodW1ic2l6ZScgPT4gJ1RodW1i IGRpbWVuc2lvbnM6JywNCgkJJ3RpbWVzJyA9PiAnIHggJywNCgkJJ3Vuc3VwcG9ydGVkX2Nv bXByZXNzaW9udHlwZScgPT4gJ3tjcnVzaH0gaXMgbm90IGEgc3VwcG9ydGVkIGNvbXByZXNz aW9uIGZvcm1hdCBvbiB0aGlzIGluc3RhbGxhdGlvbicsDQoJCSd1bnN1cHBvcnRlZF9maWxl dHlwZScgPT4gJ0ZpbGUgaXMgbm90IG9mIGEgc3VwcG9ydGVkIHR5cGUnLA0KCQkndW5zdXBw b3J0ZWRfZnVkZ2UnID0+ICc6IGhpdCBTYXZlIGFnYWluIHRvIHN0b3JlIGFueXdheScsDQoJ CSd1cGRhdGUnID0+ICdVcGRhdGUnLA0KCQkndXBsb2FkX2ZhaWxlZCcgPT4gJ0ltYWdlIGNv dWxkIG5vdCBiZSB1cGxvYWRlZCcsDQoJCSd1cGxvYWRfaW1hZ2UnID0+ICdVcGxvYWQgaW1h Z2UnLA0KCQkndXBsb2FkX3N1Y2Nlc3MnID0+ICdJbWFnZSB1cGxvYWRlZCBzdWNjZXNzZnVs bHknLA0KCQkndmVyc2lvbicgPT4gJ3YnLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3 aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6NToib3JkZXIiO3M6MToi NSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6MjI5OTc6IjxkaXYgaWQ9InNt ZF9oZWxwIj4KCgk8aDEgaWQ9InRvcCI+c21kX2FkbWluX3RoZW1lczwvaDE+CgoJPHA+SW5z dGFsbCwgbWFuYWdlLCBlZGl0IGFuZCBzd2l0Y2ggYWRtaW4tc2lkZSB0aGVtZXMgdGhlbiBz aGFyZSB0aGVtIHdpdGggdGhlIGNvbW11bml0eS48L3A+CgoJPGgyIGlkPSJmZWF0dXJlcyI+ RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRlIGFuZCBFZGl0IGFkbWluLXNpZGUg dGhlbWVzPC9saT4KCQk8bGk+RW1wbG95IGltYWdlcywgPHNwYW4gY2xhc3M9ImNhcHMiPkNT Uzwvc3Bhbj4sIEpTLCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4vUEhQIChmb3Ig Y2hhbmdpbmcgbWFzdGhlYWQsIGhlYWRlciAmYW1wOyBmb290ZXIpIGluIHlvdXIgdGhlbWU8 L2xpPgoJCTxsaT5Vc2UgY29uc3RhbnRzIGluIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkNT Uzwvc3Bhbj4gZmlsZXM8L2xpPgoJCTxsaT5CYXNlIHlvdXIgdGhlbWUgb24gYW4gZXhpc3Rp bmcgdGhlbWUgdG8gdHdlYWsgaXQgdG8geW91ciB0YXN0ZTwvbGk+CgkJPGxpPkV4cG9ydCBh IHRoZW1lIHBhY2thZ2UgZm9yIGRpc3RyaWJ1dGlvbiB0byB0aGUgY29tbXVuaXR5IGluIGVp dGhlciAudGFyLCAudGd6LCAuYnoyIG9yIC56aXAgZm9ybWF0PC9saT4KCQk8bGk+SW1wb3J0 IC8gaW5zdGFsbCBvdGhlciB0aGVtZXMgZnJvbSB0aGUgPGEgaHJlZj0iaHR0cDovL3RleHRn YXJkZW4ub3JnL2xheW91dHMvP2M9dHhwLWFkbWluIj5jb21tdW5pdHkgcmVwb3NpdG9yeTwv YT48L2xpPgoJCTxsaT5BZG1pbmlzdHJhdG9yIGNhbiBzZXQgYSBkZWZhdWx0IHRoZW1lIGZv ciBhbGwgdXNlcnMsIG9yIGVuYWJsZSBwZXItdXNlciAvIHBlci1yb2xlIHRoZW1lczwvbGk+ Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT4uPC9wPgoKCTxo MiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxw PkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRw YXR0ZXJuLm9yZy9wbHVnaW5zLzEwOTYvc21kX2FkbWluX3RoZW1lcyI+dGV4dHBhdHRlcm4u b3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29m dHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQg ZW5hYmxlIHRoZSBwbHVnaW4uIEEgbmV3IHRhYiBsYWJlbGxlZCA8ZW0+RXh0ZW5zaW9ucyAt Jmd0OyBBZG1pbiB0aGVtZXM8L2VtPiBpcyBjcmVhdGVkLiA8c3Ryb25nPk9ubHkgcHVibGlz aGVycyB3aWxsIHNlZSB0aGlzIHRhYjwvc3Ryb25nPi48L3A+CgoJPHA+VGhlIHBsdWdpbiBz aG91bGQgYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBwcmVmZXJlbmNlcyBmb3IgeW91LiBD bGljayAmIzgyMTY7UHJlZmVyZW5jZXMmIzgyMTc7IGZyb20gdGhlIDxlbT5FeHRlbnNpb25z IC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+IHRhYiBvciA8ZW0+T3B0aW9uczwvZW0+IGZyb20g dGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgdGFiIHRvIGFsdGVyLCBkZWxldGUgb3IgcmVpbnN0 YWxsIHRoZW0uPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4 dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzA5NTIiPmZvcnVtIHRocmVhZDwvYT4g Zm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNl IG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0ZSB0 aGUgcGx1Z2luIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS4gVGhlIHByZWZl cmVuY2VzIHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkLiBQbGVhc2UgYmUgYXdhcmUg dGhhdCByZW1vdmluZyB0aGUgcGx1Z2luIGRvZXMgPHN0cm9uZz5ub3QgcmVtb3ZlIGFueSB0 aGVtZXMgeW91IGhhdmUgaW5zdGFsbGVkLCBub3IgZG9lcyBpdCByZW1vdmUgcGVyLXVzZXIg dGhlbWUgcHJlZmVyZW5jZXM8L3N0cm9uZz4uIFBlci11c2VyIHByZWZzIHdpbGwgc2ltcGx5 IGJlIGlnbm9yZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGRlbGV0ZWQuPC9wPgoKCTxoMiBpZD0i dXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD5PbiB0aGUgPGVtPkV4dGVuc2lvbnMgLSZndDsgQWRt aW4gdGhlbWVzPC9lbT4gdGFiIGlzIGEgbGlzdCBvciBncmlkIGNvbnRhaW5pbmcgaW5zdGFs bGVkIHRoZW1lcy4gT3V0IG9mIHRoZSBib3gsIHRoZXJlIHdpbGwgYmUgdHdvIGF2YWlsYWJs ZTogPGVtPmNsYXNzaWM8L2VtPiBhbmQgPGVtPnJlbW9yYTwvZW0+LiA8c3Ryb25nPkl0JiM4 MjE3O3MgYWR2aXNhYmxlIG5vdCB0byBjaGFuZ2UgdGhlc2UgdGhlbWVzPC9zdHJvbmc+IHNv IHlvdSBjYW4gYWx3YXlzIGdvIGJhY2sgdG8gdGhlbSBpZiBldmVyeXRoaW5nIGdvZXMgc2lk ZXdheXMuIFBsdXMgaXQmIzgyMTc7cyBhIHZlcnkgdXNlZnVsIHN0YXJ0aW5nIHBvaW50IGZy b20gd2hpY2ggdG8gPGEgaHJlZj0iI2Nsb25lIj5iYXNlPC9hPiBhIDxhIGhyZWY9IiNuZXci Pm5ldyB0aGVtZTwvYT4uPC9wPgoKCTxwPkluIHRoZSBsaXN0IGxheW91dCwgdGhlIGNvbHVt bnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZTwvc3Bh bj4gOiBUaGUgbmFtZSBvZiB0aGUgdGhlbWUgYW5kIChvcHRpb25hbCkgdGh1bWJuYWlsIGFz c2lnbmVkIHRvIGl0LiBDbGljayB0byA8YSBocmVmPSIjc3dpdGNoIj5hY3RpdmF0ZTwvYT4g dGhlIHRoZW1lLiBJZiB0aGUgdGhlbWUgaXMgYmFzZWQgb24gYW5vdGhlciB1c2VyJiM4MjE3 O3MgdGhlbWUsIHRoaXMgZGVwZW5kZW5jeSB3aWxsIGJlIHNob3duIGluIHBhcmVudGhlc2Vz IGFmdGVyIHRoZSB0aGVtZSBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkF1 dGhvcjwvc3Bhbj4gOiBZb3UhIExpbmtlZCB0byB5b3VyIHdlYiBzaXRlIGlmIHlvdSBzdXBw bHkgaXQgaW4geW91ciA8YSBocmVmPSIjYWJvdXQiPk1hbmlmZXN0PC9hPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5WZXJzaW9uPC9zcGFuPiA6IFRoZW1lIHZlcnNpb24gbnVt YmVyIGluIDxjb2RlPm1ham9yLm1pbm9yLnN1YnJldjwvY29kZT4gbm90YXRpb24uIElmIGEg bmV3ZXIgdmVyc2lvbiBvZiBhIHRoZW1lIGlzIGF2YWlsYWJsZSBmcm9tIFRleHRnYXJkZW4s IHRoZSB2ZXJzaW9uIG51bWJlciB3aWxsIGJlIGh5cGVybGlua2VkIHRvIHRoZSB0aGVtZSBv biBUZXh0Z2FyZGVuIHNvIHlvdSBtYXkgZG93bmxvYWQvaW5zdGFsbCBpdC4gVGhlIHZlcnNp b25zIGFyZSBjaGVja2VkLCBhdCBtb3N0LCBvbmNlIGV2ZXJ5IDI0IGhvdXJzIHRvIGF2b2lk IGhhbW1lcmluZyB0aGUgc2VydmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRl c2NyaXB0aW9uPC9zcGFuPiA6IEJyaWVmIG9uZS0gb3IgdHdvLWxpbmVyIGV4cGxhaW5pbmcg eW91ciB0aGVtZS4gSWYgeW91IGhhdmUgb2ZmZXJlZCBhIGhlbHAgPHNwYW4gY2xhc3M9ImNh cHMiPlVSTDwvc3Bhbj4gaW4geW91ciBtYW5pZmVzdCwgaXQgd2lsbCBiZSBsaW5rZWQgaGVy ZSBhcyB3ZWxsPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFjdGlvbnM8L3NwYW4+ IDogQWN0aW9ucyB0byBwZXJmb3JtIG9uIGVhY2ggdGhlbWUKCTx1bD4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPltOZXcgdGhlbWVdPC9zcGFuPiA6IDxhIGhyZWY9IiNuZXciPkNyZWF0 ZTwvYT4gYSBuZXcgYmxhbmssIGVtcHR5IGRpcmVjdG9yeSByZWFkeSBmb3IgeW91ciB0aGVt ZS4gTm8gc3BhY2VzIC8gb2RkIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIG5hbWUg YW5kIGl0IG11c3Qgbm90IHN0YXJ0IHdpdGggYSBudW1iZXI8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+W0VkaXRdPC9zcGFuPiA6IDxhIGhyZWY9IiNlZGl0X3RoZW1lIj5FZGl0 PC9hPiB0aGUgdmFyaW91cyBkZXRhaWxzLCBmaWxlcyBhbmQgY29udGVudCB3aXRoaW4gdGhl IHRoZW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltCYXNlXTwvc3Bhbj4gOiA8 YSBocmVmPSIjY2xvbmUiPkV4dGVuZDwvYT4gb25lIG9mIHRoZSBleGlzdGluZyB0aGVtZXMg dG8gbWFrZSB5b3VyIG93biBjaGFuZ2VzIHVuZGVyIGEgbmV3IG5hbWU8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+W0V4cG9ydF08L3NwYW4+IDogPGEgaHJlZj0iI2V4cG9ydCI+ U2F2ZTwvYT4gdGhlIHRoZW1lIHBhY2thZ2UgdG8geW91ciBoYXJkIGRyaXZlIGZvciBkaXN0 cmlidXRpb24vYmFja3VwIGluIHlvdXIgY2hvc2UgY29tcHJlc3Npb24gZm9ybWF0PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltEZWxldGVdPC9zcGFuPiA6IENvbXBsZXRlbHkg PGEgaHJlZj0iI2RlbGV0ZSI+cmVtb3ZlPC9hPiB0aGUgdGhlbWUuIE5vdCBhdmFpbGFibGUg dG8gdGhlIGNvcmUgdGhlbWVzLCBmb3Igb2J2aW91cyByZWFzb25zISBBbHNvIG5vdCBhdmFp bGFibGUgaWYgYSB0aGVtZSBoYXMgYmVlbiB1c2VkIGFzIGEgYmFzaXMgZm9yIGFub3RoZXIg dGhlbWUgaW4gdGhlIGN1cnJlbnQgc2l0ZTwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxw PlRoZSByb3cgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZSBpcyBzaGFkZWQgYW5k IHRoZSBjdXJyZW50IGRlZmF1bHQgdGhlbWUgdGhhdCBpcyBpbiBlZmZlY3QgaXMgaGlnaGxp Z2h0ZWQuIFRoZSBncmlkIHZpZXcgaGFzIHBhcnRzIG9mIHRoZSBhYm92ZSBpbmZvcm1hdGlv biwgbGFpZCBvdXQgc2xpZ2h0bHkgZGlmZmVyZW50bHkuPC9wPgoKCTxoMiBpZD0ic3dpdGNo Ij5Td2l0Y2hpbmcgdGhlbWVzPC9oMj4KCgk8cD5BcyB0aGUgYWRtaW5pc3RyYXRvciwgeW91 IGNhbiBwbGF5IEdvZCBvdmVyIGV2ZXJ5b25lIGVsc2UmIzgyMTc7cyB0aGVtZXMuIFlvdSBh cmUgZnJlZSB0byBpbnN0YWxsIGFzIG1hbnkgYXMgeW91IHdpc2ggYW5kIHN3aXRjaCBiZXR3 ZWVuIHRoZW0gd2l0aG91dCBhZmZlY3RpbmcgYW55IG90aGVyIGxvZ2lucy4gTm9ib2R5IGVs c2Ugd2lsbCBldmVuIGtub3cgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBwbHVnaW4uPC9wPgoK CTxwPklmLCBob3dldmVyLCB5b3UgdmlzaXQgdGhlIDxhIGhyZWY9IiNzZXR1cCI+UHJlZmVy ZW5jZXM8L2E+IHBhZ2UgeW91IGNhbiBjb25maWd1cmUgdGhlIHRoZW1lcyB0aGF0IG90aGVy cyB1c2UuIFRoZXJlIGFyZSB0aHJlZSBtZWNoYW5pc21zIHRvIGNob29zZSBmcm9tOjwvcD4K Cgk8dWw+CgkJPGxpPkZvcmNlIG9uZSB0aGVtZSBmb3IgYWxsIHVzZXJzIChleGNlcHQgeW91 cnNlbGYpPC9saT4KCQk8bGk+Rm9yY2Ugb25lIHRoZW1lIGZvciBlYWNoIHVzZXIgcHJpdmls ZWdlIGxldmVsIChleGNlcHQgeW91cnNlbGYpPC9saT4KCQk8bGk+QWxsb3cgYWxsIHVzZXJz IChleGNlcHQgeW91cnNlbGYpIHRvIHBpY2sgdGhlaXIgZmF2b3VyaXRlIHRoZW1lIGZyb20g YSBzaG9ydGxpc3QgeW91IGRlZmluZTwvbGk+Cgk8L3VsPgoKCTxwPkF0IGFsbCB0aW1lcywg eW91IGNhbiBjaG9vc2UgYW55IHRoZW1lIHlvdSBwbGVhc2UgZm9yIHlvdXIgb3duIHVzZS4g VGhpcyBhbGxvd3MgdHJpYWxsaW5nLCB0d2Vha2luZyBhbmQgdGVzdGluZyBvZiB0aGVtZXMg YmVmb3JlIHVubGVhc2hpbmcgdGhlbSBvbiB5b3VyIHVzZXIgYmFzZS48L3A+CgoJPGgyIGlk PSJzZXR1cCI+VGhlbWUgcHJlZmVyZW5jZXM8L2gyPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPkNhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3Q8L3NwYW4+IDogV2hlbiBzZXQg dG8gPGNvZGU+WWVzPC9jb2RlPiwgdXBwZXItY2FzZSB0aGVtZSBuYW1lcyB0YWtlIHByZWNl ZGVuY2Ugb3ZlciBsb3dlciBjYXNlIHRoZW1lIG5hbWVzIGFuZCB3aWxsIGJlIGxpc3RlZCBm aXJzdC4gRm9yIGV4YW1wbGUsIDMgdGhlbWUgY2FsbGVkICYjODIxNjtBbmdlbGljJiM4MjE3 OywgJiM4MjE2O2JhcmJhcmljJiM4MjE3OyBhbmQgJiM4MjE2O0NvaGVzaXZlJiM4MjE3OyB3 aWxsIGJlIG9yZGVyZWQ6IDxjb2RlPkFuZ2VsaWMsIENvaGVzaXZlLCBiYXJiYXJpYzwvY29k ZT4uIFNldCB0byA8Y29kZT5ObzwvY29kZT4gdG8gbWl4IHVwcGVyIGFuZCBsb3dlci1jYXNl IHRoZW1lcyB0b2dldGhlciAob3JkZXIgaXMgdGhlbiA8Y29kZT5BbmdlbGljLCBiYXJiYXJp YywgQ29oZXNpdmU8L2NvZGU+ICkuIFRoZSAmIzgyMTY7Y2xhc3NpYyYjODIxNzsgdGhlbWUg aXMgPGVtPmFsd2F5czwvZW0+IGxpc3RlZCBmaXJzdC48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+RXhwb3J0IGNvbXByZXNzaW9uIHR5cGU8L3NwYW4+IDogRGVwZW5kaW5nIG9u IHlvdXIgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBhbmQgd2hp Y2ggbW9kdWxlcyBoYXZlIGJlZW4gY29tcGlsZWQgaW50byBpdCwgeW91IHdpbGwgc2VlIGEg bGlzdCBvZiBjb21wcmVzc2lvbiBmb3JtYXRzIGhlcmUuIENob29zZSBvbmUgdGhhdCBzdWl0 cyB5b3UgYXMgdGhlIGRlZmF1bHQgaW4gd2hpY2ggdG8gZXhwb3J0IHlvdXIgdGhlbWUgcGFj a2FnZXMuIFlvdSBtYXkgY2hvb3NlIGZyb20gPGVtPlRhcjwvZW0+LCA8ZW0+R1ppcDwvZW0+ ICh0aGUgZGVmYXVsdDogYWN0dWFsbHkgdGFyK2d6aXApLCA8ZW0+QnppcDI8L2VtPiAodGFy K2J6aXApLCBvciA8ZW0+WmlwPC9lbT4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PkxheW91dCBtZXRob2Q8L3NwYW4+IDogQ2hvb3NlIGZyb20gYSBMaXN0IFZpZXcgKHVzZWZ1 bCBpZiB5b3UgcHJlZmVyIHRvIGhpZGUgb3IgdXNlIHNtYWxsIHRodW1icykgb3IgYSBHcmlk IFZpZXcgb2YgaW5zdGFsbGVkIHRoZW1lcy4gVGhpcyBzZXR0aW5nIGFwcGxpZXMgdG8gYm90 aCBhZG1pbiBhbmQgdXNlciB0aGVtZSBzZWxlY3Rpb24gdGFicy4gRGVmYXVsdDogR3JpZCBW aWV3PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRodW1iIHNpemU8L3NwYW4+IDog U2V0IHRoZSB0aHVtYm5haWwgZGltZW5zaW9ucyBpbiB0aGUgdGhlbWUgbGlzdC4gU2V0IGVp dGhlciBkaW1lbnNpb24gdG8gMCB0byB0dXJuIG9mZiB0aHVtYm5haWwgZGlzcGxheS4gRGVm YXVsdDogMjYwICYjMjE1OyAxNTBweDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5E ZWZhdWx0IHRoZW1lPC9zcGFuPiA6IFNldCB0aGUgdGhlbWUgZm9yIGFsbCBvdGhlciB1c2Vy cy4gSWYgdXNpbmcgJiM4MjE2O09uZSB0aGVtZSBmb3IgZXZlcnlvbmUmIzgyMTc7IHRoZSB0 aGVtZSBjaG9zZW4gaGVyZSBpcyBmb3JjZWQgdXBvbiBhbGwgdXNlcnMuIElmIHVzaW5nIGFu eSBvZiB0aGUgb3RoZXIgbWVjaGFuaXNtcywgdGhpcyB0aGVtZSBpcyBhIGZhbGxiYWNrIHNo b3VsZCBzb21ldGhpbmcgZ28gcGVhci1zaGFwZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPlRoZW1lIHN5c3RlbTwvc3Bhbj4gOiBBcyBkZXRhaWxlZCBpbiA8YSBocmVmPSIj c3dpdGNoIj5Td2l0Y2hpbmcgdGhlbWVzPC9hPiwgeW91IG1heSBjaG9vc2UgdGhlIHdheSB0 aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW50ZXJmYWNlIGlzIHByZXNlbnRl ZCB0byBvdGhlciB1c2VyczoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0 aGVtZSBmb3IgZXZlcnlvbmU8L3NwYW4+IDogdXNlcyB0aGUgRGVmYXVsdCB0aGVtZSBmb3Ig YWxsIHVzZXJzOyB0aGV5IGhhdmUgbm8gY2hvaWNlIGluIHRoZSBtYXR0ZXI8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+T25lIHRoZW1lIHBlciBwcml2aWxlZ2UgbGV2ZWw8L3Nw YW4+IDogYWxsb3dzIHlvdSB0byBhc3NpZ24gb25lIG9yIG1vcmUgcHJpdmlsZWdlIGxldmVs cyB0byBhIHRoZW1lLiBDaG9vc2UgYSB0aGVtZSBmcm9tIHRoZSBsZWZ0LWhhbmQgbGlzdCBh bmQgdGhlbiBzaGlmdC9jdHJsLWNsaWNrIHRoZSBwcml2aWxlZ2UgbGV2ZWxzIHRvIGFzc2ln biB0aGVtLiBGbGljayBiZXR3ZWVuIHRoZW1lcyBpbiB0aGUgbGVmdCBjb2x1bW4gdG8gc2Vl IHdoaWNoIG9uZXMgYXJlIHNldCBmb3IgdmFyaW91cyB1c2VyIGxldmVscywgb3IgaG92ZXIg b3ZlciBhIHByaXZpbGVnZSBsZXZlbCB0byBzZWUgYSB0b29sdGlwLiBPbmx5IG9uZSBsZXZl bCBjYW4gYmUgYXNzaWduZWQgdG8gYSB0aGVtZSBzbyBpZiB5b3UgY2xpY2sgYSBsZXZlbCB0 aGF0IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQgdG8gYW5vdGhlciB0aGVtZSwgaXQgd2ls bCBiZSByZW1vdmVkIGZyb20gaXRzIG9yaWdpbmFsIGFzc2lnbm1lbnQuIE5vdGUgeW91IG11 c3QgU2F2ZSB0aGUgY2hhbmdlcyBmb3IgdGhlbSB0byB0YWtlIGVmZmVjdDwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHVzZXI8L3NwYW4+IDogZGVmaW5l IGEgc2hvcnRsaXN0IGZyb20gdGhlIGF2YWlsYWJsZSBpbnN0YWxsZWQgdGhlbWVzIHRvIG9m ZmVyIHRvIGFsbCB1c2Vycy4gQSBuZXcgdGFiIHdpbGwgYXBwZWFyIHRvIG90aGVyIHVzZXJz IHVuZGVyIDxlbT5BZG1pbjwvZW0+IHRoYXQgaXMgZXNzZW50aWFsbHkgYSBjdXQtZG93biB2 ZXJzaW9uIG9mIHRoZSA8ZW0+QWRtaW4gdGhlbWVzPC9lbT4gdGFiLiBVc2VycyBjYW4gc3dp dGNoIGJldHdlZW4gYW55IG9uZSBvZiB0aGUgdGhlbWVzIHlvdSBoYXZlIHBlcm1pdHRlZC48 L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5SZW1lbWJlciB0byBjbGljayBTYXZlIHRv IGFwcGx5IHRoZSBjaGFuZ2VzLiBDbGlja2luZyBhbnkgb3RoZXIgdGFiIHdpbGwgdW5kbyBh bnkgbW9kaWZpY2F0aW9ucyB5b3UgbWF5IGhhdmUgbWFkZS48L3A+CgoJPGgyIGlkPSJicm93 c2UiPkJyb3dzZSB0aGVtZXM8L2gyPgoKCTxwPkNsaWNrIHRoaXMgYnV0dG9uIHRvIGJlIHRh a2VuIHRvIHRoZSBjZW50cmFsIGFkbWluIHRoZW1lIHJlcG9zaXRvcnkgd2hlcmUgeW91IG1h eSBicm93c2UgdGhlbWVzIGFuZCBkb3dubG9hZCB0aGVtIHJlYWR5IGZvciBpbnN0YWxsYXRp b24uPC9wPgoKCTxoMiBpZD0iaW1wb3J0Ij5JbnN0YWxsIGEgdGhlbWU8L2gyPgoKCTxwPkxv Y2F0ZSBhIHRoZW1lIHBhY2thZ2Ugb24geW91ciBoYXJkIGRyaXZlIG9yIHBhc3RlIGEgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8gYSBwYWNrYWdlIGluIHRoZSBib3ggYXQg dGhlIHRvcCBvZiB0aGUgcGFnZS4gSGl0IDxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+IGFuZCBp dCB3aWxsIGJlIGluc3RhbGxlZC4gSWYgaXQgYWxyZWFkeSBleGlzdHMgaXQgd2lsbCBiZSBv dmVyd3JpdHRlbi4gTm90ZSB0aGF0IHlvdSBtYXkgcmVjZWl2ZSBhIHdhcm5pbmcgaWYgdGhl IHRoZW1lIGlzIHBhY2thZ2VkIHVzaW5nIGEgY29tcHJlc3Npb24gYWxnb3JpdGhtIHRoYXQg aXMgbm90IGJ1aWx0IGludG8geW91ciB2ZXJzaW9uIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+LjwvcD4KCgk8aDIgaWQ9Im5ldyI+Q3JlYXRlIGEgbmV3IChlbXB0eSkgdGhl bWU8L2gyPgoKCTxwPkNsaWNrIDxzdHJvbmc+Q3JlYXRlIG5ldyB0aGVtZTwvc3Ryb25nPiBh bmQgYSBib3ggd2lsbCBzbGlkZSBkb3duIGFsbG93aW5nIHlvdSB0byBnaXZlIHlvdXIgdGhl bWUgYSBuYW1lLiAgTm90ZSB0aGF0IHRoZSBlZGl0IGJveCBhdXRvbWF0aWNhbGx5IHRha2Vz IGZvY3VzLCBzbyB5b3UgY2FuIHR5cGUgc3RyYWlnaHQgYXdheS48L3A+CgoJPHA+Tm8gc3Bh Y2VzIG9yIG9kZCBjaGFyYWN0ZXJzIGFyZSBwZXJtaXR0ZWQsIGJlY2F1c2UgdGhlIG5hbWUg eW91IGVudGVyIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNy ZWF0ZWQgaW4gdGhlIDxlbT50aGVtZTwvZW0+IGZvbGRlciBhbmQgdGhlbSBuYW1lIG9mIHlv dXIgdGhlbWUmIzgyMTc7cyBjbGFzcy4gSWYgeW91IGRvIG1hbmFnZSB0byB1c2Ugb2RkIGNo YXJhY3RlcnMsIHRoZSBuYW1lIHdpbGwgYmUgJiM4MjIwO2R1bWJlZCBkb3duJiM4MjIxOyBm b3IgeW91LiBPbmNlIHRoZSBuYW1lIGlzIHNldCwgdGhhdCBpcyBpdDsgeW91IGNhbm5vdCBj aGFuZ2UgaXQgZnJvbSB3aXRoaW4gdGhlIGludGVyZmFjZS4gVGhlIG9ubHkgd2F5IHRvIHJl bmFtZSBpdCBpcyB2aWEgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBjbGll bnQgYW5kIGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlmIHlv dSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L3A+CgoJPHA+SW4gb3JkZXIgdG8gYXZvaWQg bmFtZSBjbGFzaGVzIHdpdGggb3RoZXIgcGVvcGxlJiM4MjE3O3MgdGhlbWVzLCBpdCBpcyBy ZWNvbW1lbmRlZCB0aGF0IGFsbCB0aGVtZXMgeW91IGRlc2lnbiBiZWdpbiB3aXRoIGEgdW5p cXVlIDMtbGV0dGVyIHByZWZpeCBvZiB5b3VyIG93biBjaG9vc2luZywgcGx1cyBhbiB1bmRl cnNjb3JlICYjODIxMjsgZXhhY3RseSBsaWtlIHBsdWdpbnMuIFRodXMsIHNtZF9CbHVlTWVh bmllIG1pZ2h0IHdlbGwgYmUgdGhlIG5hbWUgb2YgYSB0aGVtZS48L3A+CgoJPHA+V2hlbiB5 b3UgaGF2ZSBuYW1lZCB5b3VyIHRoZW1lLCBjbGljayA8c3Ryb25nPkdvPC9zdHJvbmc+IHRv IGNyZWF0ZSBhIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBjYW4gcmVzaWRlLjwvcD4KCgk8aDIg aWQ9ImNsb25lIj5FeHRlbmQgYW4gZXhpc3RpbmcgdGhlbWU8L2gyPgoKCTxwPkNsaWNrIDxz dHJvbmc+QmFzZTwvc3Ryb25nPiB0byBjcmVhdGUgYSBuZXcgdGhlbWUgYmFzZWQgb24gYW5v dGhlci4gQSBib3ggd2lsbCBzbGlkZSBkb3duICh0aGUgY3Vyc29yIGZvY3VzZXMgYXV0b21h dGljYWxseSBpbiB0aGUgYm94IGZvciB5b3UpIHNvIHlvdSBtYXkgZW50ZXIgdGhlIG5hbWUg b2YgeW91ciBjb3B5LiBPYnNlcnZlIHRoZSA8YSBocmVmPSIjbmV3Ij5uYW1pbmcgY29udmVu dGlvbjwvYT4sIHRoZW4gY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBjcmVhdGUgdGhl IG5ldyB0aGVtZS48L3A+CgoJPHA+PHNwYW4gY2xhc3M9InJlcXVpcmVkIj5QbGVhc2UgcmVt ZW1iZXIsIHlvdXIgdGhlbWUgd2lsbCBiZSBkZXBlbmRlbnQgb24gdGhlIGNob3NlbiB0aGVt ZSBhbmQgPHN0cm9uZz5ib3RoPC9zdHJvbmc+IG11c3QgYmUgcHJlc2VudCBvbiBhIHVzZXIm IzgyMTc7cyBzeXN0ZW0gZm9yIHRoZSB0aGVtZSB0byB3b3JrPC9zcGFuPi4gSXQgaXMgd29y dGggZW5zdXJpbmcgdGhhdCB1c2VycyBvZiB5b3VyIHRoZW1lIGFyZSBtYWRlIGF3YXJlIG9m IHRoaXMgZGVwZW5kZW5jeSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBmcnVzdHJhdGlvbjsgcGVy aGFwcyBhZGQgYSBsaW5rIHRvIHRoZSB0aGVtZSYjODIxNztzIGJhc2UsIG1lbnRpb24gdGhl IGRlcGVuZGVuY3kgaW4gdGhlIEhlbHAgbGluayBhbmQvb3IgaW4gdGhlIHRoZW1lJiM4MjE3 O3MgYXJ0aWNsZSBvbiBUZXh0Z2FyZGVuLiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBkZWxl dGUgYW55IHRoZW1lIGZyb20gdGhlIGxpc3QgdGhhdCBoYXMgc3VjaCBhIGRlcGVuZGVuY3ks IG90aGVyd2lzZSB5b3VyIGFkbWluIHNpZGUgd2lsbCBzdG9wIHdvcmtpbmcuPC9wPgoKCTxo MiBpZD0iZXhwb3J0Ij5FeHBvcnQgYSB0aGVtZTwvaDI+CgoJPHA+SWYgeW91IHdpc2ggdG8g YmFjayB1cCBhIHRoZW1lIG9yIHNoYXJlIGl0IHdpdGggb3RoZXJzLCBjbGljayA8c3Ryb25n PkV4cG9ydDwvc3Ryb25nPi4gQSBib3ggd2lsbCBzbGlkZSBkb3duIG9mZmVyaW5nIHlvdSBh IGNob2ljZSBvZiBjb21wcmVzc2lvbiBmb3JtYXRzOyB0aGUgZGVmYXVsdCBpcyB0aGUgZm9y bWF0IHlvdSBjaG9zZSBmcm9tIHRoZSA8YSBocmVmPSIjc2V0dXAiPlByZWZlcmVuY2VzPC9h PiBwYWdlLiBDbGljayA8ZW0+W0dvXTwvZW0+IHRvIGV4cG9ydCB0aGUgdGhlbWUgYW5kIHNh dmUgaXQgdG8geW91ciBjb21wdXRlci4gQWxsIHJlbGF0ZWQgZmlsZXMgaW4gdGhlIHRoZW1l IHdpbGwgYmUgcGFja2FnZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBkb3dubG9hZCBmaWxl IGZvciBjb252ZW5pZW5jZS48L3A+CgoJPGgyIGlkPSJkZWxldGUiPkRlbGV0ZSBhIHRoZW1l PC9oMj4KCgk8cD5IaXQgdGhpcyAoYW5kIGNvbmZpcm0geW91IGFyZSBzdXJlKSB0byByZW1v dmUgdGhlIGVudGlyZSB0aGVtZSBmb2xkZXIgYW5kIGNvbnRlbnRzIGZyb20gdGhlIGZpbGUg c3lzdGVtLiA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPlRoaXMgaXMgbm90IHVuZG9hYmxlLCBz byBiZSBjYXJlZnVsPC9zcGFuPi48L3A+CgoJPGgyIGlkPSJlZGl0X3RoZW1lIj5FZGl0IGEg dGhlbWU8L2gyPgoKCTxwPkEgdGhlbWUgaXMgYSBjb2xsZWN0aW9uIG9mIGZpbGVzLiBUaGUg ZmlsZXMgYWxsIHJlc2lkZSBpbiB0aGVpciBvd24gc2VsZi1jb250YWluZWQgZGlyZWN0b3J5 IHVuZGVyIDxjb2RlPnRleHRwYXR0ZXJuL3RoZW1lPC9jb2RlPi4gVGhlIG5hbWUgb2YgdGhl IGRpcmVjdG9yeSBpcyB0aGUgbmFtZSBvZiB5b3VyIHRoZW1lLCBoZW5jZSB0aGUgcmVhc29u IGl0IGNhbm5vdCBjb250YWluIGFueSBvYnNjdXJlIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBi ZSBpbnZhbGlkIGluIHRoZSBmaWxlc3lzdGVtIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8 L3NwYW4+IHZhcmlhYmxlcy48L3A+CgoJPHA+V2hlbiB5b3UgY2xpY2sgJiM4MjE2O0VkaXQm IzgyMTc7IHlvdSB3aWxsIGJlIHRha2VuIHRvIGEgc2NyZWVuIHRoYXQgYWxsb3dzIHlvdSB0 byBtYWtlIGNoYW5nZXMgdG8gdGhlIHRoZW1lLiBUaGUgRWRpdCBzY3JlZW4gaXMgYnJva2Vu IGludG8gdGhyZWUgdmVydGljYWwgcGFydHMsIGFzIGZvbGxvd3M6PC9wPgoKCTxoMyBpZD0i ZWRpdF9pbWciPkltYWdlIGhhbmRsaW5nPC9oMz4KCgk8cD5FYWNoIHRoZW1lIGNhbiBjb250 YWluIGFuIG9wdGlvbmFsIHRodW1ibmFpbC4gVGhpcyBpcyBhbiBpbWFnZSBvZiAyNjAmIzIx NTsxNTBweCBpbiBzaXplLCBjYWxsZWQgPGNvZGU+c2NyZWVuc2hvdC5wbmc8L2NvZGU+IChv ciA8Y29kZT4uanBnPC9jb2RlPiwgPGNvZGU+LmdpZjwvY29kZT4sIGV0YykgaW4geW91ciB0 aGVtZSBkaXJlY3RvcnkuIE5vdGUgaXQgd2lsbCBiZSBzcXVhc2hlZCAvIHN0cmV0Y2hlZCB0 byBmaXQgeW91ciB0aHVtYm5haWwgZGltZW5zaW9ucyBzZXQgaW4gdGhlIHBsdWdpbiBwcmVm cy48L3A+CgoJPHA+T3RoZXIgaW1hZ2VzIGZvciB1c2UgaW4gPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gcnVsZXMgY2FuIGFsc28gYmUgYWRkZWQgdG8gYSB0aGVtZS4gQnJvd3Nl IGZvciBhbiBpbWFnZSBhbmQgc2VsZWN0IGl0LCB0aGVuIGNsaWNrIDxzdHJvbmc+VXBsb2Fk PC9zdHJvbmc+IHRvIGFkZCBpdCB0byB0aGUgdGhlbWUuIFlvdSBjYW4gY3VycmVudGx5IG9u bHkgdXBsb2FkIG9uZSBpbWFnZSBhdCBhIHRpbWUsIHRob3VnaCB5b3UgY2FuIGRlbGV0ZSBv bmUgb3IgbW9yZSBhdCBvbmNlIGJ5IFNoaWZ0L0N0cmwgY2xpY2tpbmcgdGhlIG9uZXMgeW91 IHdpc2ggdG8gcmVtb3ZlIGFuZCBoaXR0aW5nIHRoZSAmIzgyMTY7eCYjODIxNzsgYnV0dG9u LiA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPldhcm5pbmc6IGZpbGVzIHdpbGwgYmUgZGVsZXRl ZCBpbW1lZGlhdGVseSwgd2l0aG91dCBjb25maXJtYXRpb24uPC9zcGFuPjwvcD4KCgk8cD5U aGUgYmVzdCB3YXkgdG8gcmVmZXIgdG8gaW1hZ2UgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj5zIGluIHN0eWxlc2hlZXRzIGlzIHdpdGggYSByZWxhdGl2ZSBwYXRoOjwvcD4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPi5teVN0eWxlIHsKICAgYmFj a2dyb3VuZDogdXJsKG15LWltYWdlLmdpZik7Cn0KPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0i ZWRpdF9jb250ZW50Ij5Db250ZW50PC9oMz4KCgk8cD5UaGUgY2VudHJhbCBwYW5lIGlzIHdo ZXJlIHlvdSBlZGl0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXMgaW4geW91ciB0aGVtZS4g VGhlIHNtYWxsIGVkaXQgYm94IGF0IHRoZSB0b3AgaXMgdGhlIGZpbGVuYW1lIGFuZCB0aGUg bGFyZ2UgdGV4dCBhcmVhIGlzIGl0cyBjb250ZW50LiBDbGljayA8c3Ryb25nPlNhdmU8L3N0 cm9uZz4gdG8gY29tbWl0IGNoYW5nZXMuIFlvdSBtYXkgZnJlZWx5IHJlbmFtZSBhbnkgZmls ZSB5b3UgYXJlIGVkaXRpbmcuPC9wPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+SW1wb3J0YW50 OiBpZiB5b3Ugc2VsZWN0IGEgZmlsZSwgZWRpdCBpdCwgcmVuYW1lIGl0LCBhbmQgY2xpY2sg PHN0cm9uZz5TYXZlPC9zdHJvbmc+IHlvdSB3aWxsIG92ZXJ3cml0ZSB3aGF0ZXZlciB3YXMg aW4gdGhlIHByZXZpb3VzIGZpbGUgJiM4MjEyOyBldmVuIGlmIHlvdSBlbXB0eSB0aGUgY29u dGVudHMgb2YgdGhlIHRleHRhcmVhIGluIGFuIGVmZm9ydCB0byBtYWtlIGEgJiM4MjIwO25l dyYjODIyMTsgb25lLiBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgYSBuZXcgZmlsZSwgaXQgaXMg c2FmZXIgdG8gY2xpY2sgdGhlIDxzdHJvbmc+TmV3IGZpbGU8L3N0cm9uZz4gYnV0dG9uIGlu IHRoZSByaWdodCBoYW5kIGNvbHVtbiB0byBlbnN1cmUgeW91IGFyZSBub3QgZWRpdGluZyBh biBleGlzdGluZyBmaWxlIGJ5IG1pc3Rha2UuPC9wPgoKCTxwPkl0IGlzIGFsc28gd29ydGgg bm90aW5nIHRoYXQgZmlsZSBwZXJtaXNzaW9ucyB2YXJ5IGZyb20gaG9zdCB0byBob3N0LiBJ ZiB5b3UgdHJ5IGFuZCBzYXZlIGEgdGhlbWUgZmlsZSBhbmQgcmVjZWl2ZSBhIHl1a2t5IHdh cm5pbmcgbWVzc2FnZSBhYm91dCBub3QgYmVpbmcgYWJsZSB0byB3cml0ZSB0aGUgZmlsZSwg dHJ5IGluY3JlYXNpbmcgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0aGVtZSBkaXJlY3Rvcnkg YW5kIGFsbCBmaWxlcyBiZW5lYXRoIGl0LjwvcD4KCgk8cD5UaGUgdGhlbWUgZmlsZXMgYXJl IGRpc3RyaWJ1dGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggPGNv ZGU+NjQ0PC9jb2RlPiBwZXJtaXNzaW9ucyB3aGljaCBzaG91bGQgYmUgZmluZSBmb3IgYSBz dGFuZGFyZCBob3N0LiBTb21lIHNoYXJlZCBob3N0aW5nIGNvbXBhbmllcyAmIzgyMTI7IGFu ZCB0aGVzZSBhcmUgdXN1YWxseSB0aGUgb25lcyB0aGF0IHRlbGwgeW91IHRvIHNldCB5b3Vy IDxjb2RlPmZpbGVzPC9jb2RlPiBhbmQgPGNvZGU+aW1hZ2VzPC9jb2RlPiBkaXJlY3Rvcmll cyB0byA3NzcgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIHdyaXRhYmxlIGJ5IDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+ICYjODIxMjsgcnVuIEFwYWNoZS9QSFAgaW4gYSBkaWZmZXJl bnQgd2F5IHdoaWNoIG1pZ2h0IHJlcXVpcmUgaGlnaGVyIHBlcm1pc3Npb25zIGluIG9yZGVy IHRvIHdyaXRlIHRvIHRoZSB0aGVtZSBkaXJlY3RvcnkuIFRoaXMgaXMgdW5mb3J0dW5hdGVs eSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgcGx1Z2luIHNvIHlvdSB3aWxsIGhhdmUgdG8g ZXhwZXJpbWVudCBpZiBpdCBjYXVzZXMgeW91IHByb2JsZW1zLjwvcD4KCgk8aDM+RmlsZSBo YW5kbGluZzwvaDM+CgoJPHA+VGhpcyBjb2x1bW4gYmVnaW5zIHdpdGggYSBzZWxlY3QgbGlz dCBvZiBhbGwgaW5zdGFsbGVkIHRoZW1lczsgdGhlIGN1cnJlbnQgdGhlbWUgc2VsZWN0ZWQu IENoYW5naW5nIHRoZSBpdGVtIGhlcmUgd2lsbCBpbW1lZGlhdGVseSBhbGxvdyB5b3UgdG8g ZWRpdCBhbm90aGVyIHRoZW1lLiBUaGlzIGlzIHZlcnkgdXNlZnVsIGlmIHlvdSBhcmUgY29w eWluZyBhbmQgcGFzdGluZyBmaWxlcyBmcm9tIG9uZSB0aGVtZSB0byBhbm90aGVyIGFuZCBz YXZlcyB5b3UgaGF2aW5nIHRvIGdvIGJhY2sgdG8gdGhlIHRoZW1lIGxpc3QgZmlyc3QuPC9w PgoKCTxwPkJlbmVhdGggdGhhdCBhcmUgdHdvIGJ1dHRvbnM6PC9wPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPk5ldyBmaWxlPC9zcGFuPiA6IENyZWF0ZSBhIG5ldywgZW1w dHkgZmlsZSBpbiB5b3VyIHRoZW1lIGRpcmVjdG9yeS4gTm90aGluZyBpcyBhY3R1YWxseSBj cmVhdGVkIHVudGlsIHlvdSBoaXQgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IGJ1dCB1c2luZyB0 aGlzIGJ1dHRvbiBlbnN1cmVzIHlvdSBiZWdpbiB3aXRoIGEgY2xlYW4gc2xhdGUgYW5kIGRv biYjODIxNzt0IGFjY2lkZW50YWxseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZpbGUgeW91 IHdlcmUgZWRpdGluZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZSBsaXN0 PC9zcGFuPiA6IEEgc2hvcnRjdXQgYmFjayB0byB0aGUgbWFpbiB0aGVtZSBsaXN0IChlcXVp dmFsZW50IHRvIGNsaWNraW5nIHRoZSA8ZW0+QWRtaW4gdGhlbWVzPC9lbT4gdGFiKTwvbGk+ Cgk8L3VsPgoKCTxwPkJlbG93IHRob3NlIGJ1dHRvbnMgYXJlIHVwIHRvIGZvdXIgc2VjdGlv bnMgY29udGFpbmluZyBhbGwgdGhlIChub24taW1hZ2UpIGZpbGVzIHRoYXQgbWFrZSB1cCB5 b3VyIHRoZW1lLiBDbGljayBhIGZpbGVuYW1lIHRvIGxvYWQgaXQgaW50byB0aGUgY2VudHJh bCB0ZXh0IGFyZWEgZm9yIGVkaXRpbmcuPC9wPgoKCTxoNCBpZD0iZWRpdF9jc3MiPlN0eWxl c2hlZXRzPC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPkZpbGVzIGNhbiBiZSBhbnkgdmFs aWQgZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4g PGNvZGU+LmNzczwvY29kZT48L3A+CgoJPHA+VGhlIG1lYXQgYW5kIHBvdGF0b2VzIG9mIHlv dXIgdGhlbWUuIEFkZCBhcyBtYW55IHNoZWV0cyBhcyB5b3UgbGlrZSBhbmQgbG9hZCB0aGVt IGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlKHMpLjwvcD4K Cgk8aDQgaWQ9ImVkaXRfY3NzIj5TdHlsZXBsYXRlczwvaDQ+CgoJPHAgY2xhc3M9InJlcXVp cmVkIj5GaWxlcyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0i Y2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5zc2M8L2NvZGU+PC9wPgoKCTxwPkEg c3BlY2lhbCB2ZXJzaW9uIG9mIGEgc3R5bGVzaGVldCB0aGF0IGFsbG93cyB5b3UgdG8gZGVm aW5lIGNvbnN0YW50cyB0aHJvdWdob3V0IHlvdXIgc2hlZXQuIFdyaXRlIHlvdXIgc3R5bGVz aGVldCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB5b3Ugd291bGQgbm9ybWFsbHkgYnV0 IHdoZXJlIHlvdSBmaW5kIHlvdXJzZWxmLCBmb3IgZXhhbXBsZSwgdXNpbmcgdGhlIHNhbWUg Y29sb3IgdmFsdWUgcmVwZWF0ZWRseSBvciB0aGUgc2FtZSBydWxlcyBibG9jaywgeW91IGNh biBzYXZlIHlvdXJzZWxmIHR5cGluZyBieSB1c2luZyBjb25zdGFudHM6PC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+QGJyYW5kaW5nOiAjMTIzNDU2Owoj aGVhZGVyIHsKICBjb2xvcjogQGJyYW5kaW5nOwp9CmgyIHsKICBjb2xvcjogQGJyYW5kaW5n Owp9CjwvY29kZT48L3ByZT4KCgk8cD5Zb3UgY2FuIGFsc28gc3BlY2lmeSB3aG9sZSBydWxl IGJsb2NrcyBsaWtlIHRoaXMgKDxlbT5Ob3RlIHRoZSBjb2xvbiBhZnRlciB0aGUgYmxvY2sg bmFtZTwvZW0+KSA6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9j ayI+QG15X2Jsb2NrOiB7CiAgbWFyZ2luOjAgMjBweDsKICBib3JkZXI6M3B4IHNvbGlkICM5 OTk7CiAgZm9udC1zaXplOjEyMCU7Cn0KI2hlYWRlciB7CiAgY29sb3I6IEBicmFuZGluZzsK ICBwb3NpdGlvbjpyZWxhdGl2ZTsKICBAbXlfYmxvY2s7Cn0KaDIgewogIEBteV9ibG9jazsK fQo8L2NvZGU+PC9wcmU+CgoJPHA+SWYgeW91IHB1dCBhbGwgeW91ciBjb25zdGFudHMgYXQg dGhlIHRvcCBvZiB0aGUgPGNvZGU+LnNzYzwvY29kZT4gZmlsZSB0aGV5IHdpbGwgYmUgcmVt b3ZlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgY3NzIGZpbGUuPC9wPgoKCTxwPldoZW4geW91IHNh dmUgYSA8Y29kZT4uc3NjPC9jb2RlPiBmaWxlLCBhIGNvcnJlc3BvbmRpbmctbmFtZWQgPGNv ZGU+LmNzczwvY29kZT4gZmlsZSB3aWxsIGFsc28gYmUgY3JlYXRlZC4gVGhlIHR3byB3aWxs IGJlIGtlcHQgaW4gc3luYyBhcyBmYXIgYXMgcHJhY3RpY2FibGUgKGV2ZW4gaWYgeW91IHJl bmFtZSB0aGUgb3JpZ2luYWwgZmlsZSkuIFdoZW4gaXQgY29tZXMgdG8gZGVsZXRpb24gdGhv dWdoLCB0aGV5IGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkuIFRoaXMgYWxsb3dzIHlvdSB0byBl aXRoZXIga2VlcCB0aGUgPGNvZGU+LnNzYzwvY29kZT4gZmlsZSBpbiB0aGUgZGlzdHJpYnV0 aW9uIGFyY2hpdmUgb3IgcmVtb3ZlIGl0IHByaW9yIHRvIGV4cG9ydC48L3A+CgoJPGg0IGlk PSJlZGl0X2pzIj5KYXZhc2NyaXB0PC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPkZpbGVz IGNhbiBiZSBhbnkgdmFsaWQgZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNU PC9zcGFuPiBlbmQgaW4gPGNvZGU+LmpzPC9jb2RlPjwvcD4KCgk8cD5BbnkgdHJpY2tlcnkg eW91IG1heSB3aXNoIHRvIGVtcGxveSBpbiB5b3VyIHRoZW1lIGNhbiBiZSB3cml0dGVuIGlu IHRoZXNlIGZpbGVzLiBSZW1lbWJlciB0aGF0IGpRdWVyeSBpcyBsb2FkZWQgYnkgZGVmYXVs dCBvbiB0aGUgYWRtaW4gc2lkZSBzbyB5b3UgY2FuIHBsYXkgd2l0aCB0aGF0LjwvcD4KCgk8 aDQgaWQ9ImVkaXRfcGhwIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPjwvaDQ+CgoJ PHAgY2xhc3M9InJlcXVpcmVkIj5PbmUgZmlsZSA8c3Ryb25nPm11c3Q8L3N0cm9uZz4gYmUg bmFtZWQgZXhhY3RseSB0aGUgc2FtZSBhcyB5b3VyIHRoZW1lLCBpLmUuIDxjb2RlPnNtZF9C bHVlTWVhbmllLnBocDwvY29kZT4uIEFueSBvdGhlciBmaWxlcyBtdXN0IGVuZCBpbiA8Y29k ZT4ucGhwPC9jb2RlPjwvcD4KCgk8cD5Db25zdWx0IHRoZSA8YSBocmVmPSJodHRwOi8vdGV4 dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPUNyZWF0aW5nX2FuX0FkbWluX1Np ZGVfVGhlbWUiPkFkbWluIFNpZGUgdGhlbWUgZ3VpZGU8L2E+IG9uIFRleHRib29rIGZvciB0 aGUgcnVsZXMgb24gbWFraW5nIHRoZW1lcy4gTm90ZSB0aGF0IGNvcnJ1cHQgdGhlbWVzIGFy ZSBkZXRlY3RlZCB0byB0aGUgYmVzdCBvZiB0aGUgcGx1Z2luJiM4MjE3O3MgYWJpbGl0eSBh bmQgeW91IG1heSBub3QgZXhwb3J0LCBiYXNlIG9yIHN3aXRjaCB0byBhbnkgdGhlbWUgdGhh dCBpcyBicm9rZW4uPC9wPgoKCTxoNCBpZD0iZWRpdF9vdGhlciI+T3RoZXJzPC9oND4KCgk8 cD5BbnkgZmlsZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0eXBlcyAoYW5k IGFyZSBub3QgaW1hZ2VzKSBhcHBlYXIgaGVyZS4gWW91IHdpbGwgcHJvYmFibHkgbmV2ZXIg c2VlIHRoaXMgc2VjdGlvbi4gSWYgeW91IGRvIHRyeSB0byBjcmVhdGUgYSBmaWxlIHRoYXQg aXMgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0eXBlcywgYSB3YXJuaW5nIHdpbGwgYmUgaXNz dWVkLiBZb3UgbXVzdCBoaXQgPGVtPlNhdmU8L2VtPiBhZ2FpbiB0byBjb25maXJtIHlvdSBy ZWFsbHkgd2lzaCB0byBjcmVhdGUgdGhlIGZpbGUuPC9wPgoKCTxoMyBpZD0iYWJvdXQiPk1h bmlmZXN0PC9oMz4KCgk8cD5JbiB5b3VyIG1haW4gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4gZmlsZSBpcyBhIGZ1bmN0aW9uIGNhbGxlZCA8Y29kZT5tYW5pZmVzdCgpPC9jb2Rl PiB3aGljaCBjb250YWlucyBpbmZvIGFib3V0IHlvdSBhbmQgeW91ciB0aGVtZS4gRWRpdCB0 aGUgdmFsdWVzIGhlcmUgdG8gc3RhbXAgeW91ciBtYXJrIG9uIHRoZSB0aGVtZS4gTm90ZSB0 aGF0IGlmIHlvdXIgZGVzY3JpcHRpb24gY29udGFpbnMgYXBvc3Ryb3BoZXMgdGhleSBtdXN0 IGJlIDxlbT5lc2NhcGVkPC9lbT4gYnkgcHJlY2VkaW5nIHRoZW0gd2l0aCBhIHNpbmdsZSBi YWNrc2xhc2ggPGNvZGU+XDwvY29kZT4uIGUuZy48L3A+Cgo8cHJlPjxjb2RlPiYjMzk7ZGVz Y3JpcHRpb24mIzM5OyA9Jmd0OyAmIzM5O0RvblwmIzM5O3QgZmVhciB0aGUgcmVhcGVyISYj Mzk7LAo8L2NvZGU+PC9wcmU+CgoJPGgyIGlkPSJwZXJ1c2VyIj5QZXItdXNlciB0aGVtZSBz ZWxlY3Rpb248L2gyPgoKCTxwPklmIGFuIGFkbWluaXN0cmF0b3IgY2hvb3NlcyB0byBhbGxv dyBwZXItdXNlciB0aGVtZXMsIGEgbmV3IHRhYiBhcHBlYXJzIHVuZGVyIHRoZSBBZG1pbiB0 YWIgb2YgYWxsIHVzZXJzIChleGNlcHQgYWRtaW5pc3RyYXRvcnMpLiBUaGlzIHNpbXBseSBk aXNwbGF5cyBhbGwgYXZhaWxhYmxlIHRoZW1lcyAmIzgyMTI7IG9uZXMgdGhhdCB0aGUgYWRt aW5pc3RyYXRvciBoYXMgZXhwbGljaXRseSBhbGxvd2VkLjwvcD4KCgk8cD5DbGlja2luZyBh IHRoZW1lIG5hbWUgb3IgdGh1bWJuYWlsIHdpbGwgaW1tZWRpYXRlbHkgc3dpdGNoIHRvIHRo YXQgdGhlbWUgdW50aWwgdGhlIHVzZXIgY2hvb3NlcyBhbm90aGVyIG9yIHRoZSBhZG1pbmlz dHJhdG9yIGNoYW5nZXMgdGhlbWUgc3lzdGVtLjwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxvZyI+ Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjEyIEp1biAwOSB8IDAuMSB8IEluaXRpYWwg cHVibGljIGJldGE8L2xpPgoJCTxsaT4wMyBTZXAgMDkgfCAwLjExIHwgSW1wcm92ZWQgVGV4 dGdhcmRlbiB0aGVtZSBmZWVkIGFuZCBsaW5rcyA7IGltcHJvdmVkIGZpbGUgc3VwcG9ydCAo Ym90aCB0aGFua3MgdGhlYm9tYnNpdGUpIDsgbWFkZSBnbG9iYWwgdGhlbWUgbW9yZSBvYnZp b3VzIDsgYWx0ZXJlZCBwcmVmcyB0YWIgYSBiaXQgOyBhZGRlZCA8Y29kZT4uc3NjPC9jb2Rl PiBzdXBwb3J0IDsgaWdub3JlZCAuc3ZuIHN1YmRpcnMgKGFsbCB0aGFua3MgcGllbWFuKSA7 IGltcHJvdmVkIHdhcm5pbmcgbWVzc2FnZXMgOyBtaXNjIGZpeGVzIGFuZCBob3VzZWtlZXBp bmc8L2xpPgoJCTxsaT4wMiBOb3YgMDkgfCAwLjEyIHwgUmVkdWNlZCB0aGVtZSBmZWVkIGNs dXR0ZXIgaW4gdGhlIHByZWZzIHRhYmxlPC9saT4KCQk8bGk+MDQgTm92IDA5IHwgMC4xMyB8 IFJlbW92ZWQgZXJlZ19yZXBsYWNlIHRvIGNvbmZvcm0gd2l0aCBQSFA1LjMrICh0aGFua3Mg dGhlYm9tYnNpdGUpIDsgY2hhbmdlZCAmIzgyMTY7Z2xvYmFsJiM4MjE3OyB0byAmIzgyMTY7 ZGVmYXVsdCYjODIxNzsgOyBmaXhlZCByb2d1ZSB1bnRyYW5zbGF0ZWQgc3RyaW5nPC9saT4K CQk8bGk+MDkgTm92IDA5IHwgMC4xNCB8IE1vdmVkIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+cyBpbiBsaW5lIHdpdGggVGV4dGdhcmRlbiBsYXlvdXQgYWx0ZXJhdGlvbnMgKHRo YW5rcyBmb3IgdGhlIGhlYWRzdXAgdGhlYm9tYnNpdGUpIDsgbWFkZSBmZWVkcyBtb3JlIHJv YnVzdCBpbiB0aGUgZXZlbnQgVGV4dGdhcmRlbiBpcyBkb3duIC8gdW5kZXIgbWFpbnRlbmFu Y2UgKHRoYW5rcyBtbGFyaW5vKTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0cyI+Q3Jl ZGl0czwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCB3aXRo b3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVzIG9mIHRoZSBUZXh0cGF0dGVy biBkZXZlbG9wbWVudCB0ZWFtLCBlc3BlY2lhbGx5IFJvYmVydCBXZXR6bG1heXIgZm9yIHRo ZSB0aGVtZSBzdXBwb3J0LiBQbHVzIG9mIGNvdXJzZSB0aGUgYXJteSBvZiBiZXRhIHRlc3Rl cnMsIGlkZWFzIGhhbXN0ZXJzIGFuZCB0aXJlbGVzcyB0aGVtZSBhZHZvY2F0ZXMsIG1vc3Qg bm90YWJseSBTdHVhcnQgQnV0Y2hlciwgRGFsZSBDaGFwbWFuLCBEYXZlIERlU2FuZHJvLCBh bmQgTWlrZSBEZW5uaXMuIEt1ZG9zIGFuZCB0aGFua3MgdG8geW91IGFsbC48L3A+Cgo8L2Rp dj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0 L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7 IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3Vy aWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAg Y29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEw cHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMz Njk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFs aWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk IGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9y Z2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1OyBmb250 OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1h cmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0 aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwg c2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4 dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdo dDpib2xkOyBjb2xvcjojMzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2Vl ZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUge3dpZHRoOjkw JTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRfaGVscCB0 ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAw O30KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAg LnJlcXVpcmVkIHtjb2xvcjpyZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHgg NXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5 bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoi MTE0ZjAwYWU0Mjc1NWI3NzI5ZGU5YTZiNmYwODA0YjkiO30=