# Name: smd_admin_themes v0.12 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjEyIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czo4MzIyMjoiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAk c21kX2F0X2V2ZW50LCAkc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9hZG1fZXZlbnQsICRzbWRf YXRfcHJpdnMsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfcHJlZnMsICRwcmVmcywgJHNt ZF9hdF9mZWVkdXJsLCAkc21kX2F0X3RoZW1lX3JlcG87DQoNCgkkc21kX2F0X2V2ZW50ID0g J3NtZF9hdCc7DQoJJHNtZF9hdF9mdWxsZXYgPSAnc21kX2FkbWluX3RoZW1lcyc7DQoJJHNt ZF9hdF9hZG1fZXZlbnQgPSAnc21kX2FkbWF0JzsNCgkkc21kX2F0X3ByaXZzID0gJzEnOw0K CSRzbWRfYXRfZmVlZHVybCA9ICdodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRtaW4tdGhlbWVz JzsNCgkkc21kX2F0X3RoZW1lX3JlcG8gPSAnaHR0cDovL3RleHRnYXJkZW4ub3JnL2xheW91 dHMvP2M9dHhwLWFkbWluJzsNCg0KCS8vIFRodW1ibmFpbCBkaW1lbnNpb25zDQoJJHNtZF9j b3JlX3RoZW1lcyA9IGFycmF5KCdjbGFzc2ljJywncmVtb3JhJyk7DQoNCglhZGRfcHJpdnMo JHNtZF9hdF9ldmVudCwgJHNtZF9hdF9wcml2cyk7DQoJYWRkX3ByaXZzKCdwbHVnaW5fcHJl ZnMuJy4kc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9wcml2cyk7DQoJcmVnaXN0ZXJfdGFiKCJl eHRlbnNpb25zIiwgJHNtZF9hdF9ldmVudCwgc21kX2F0X2dUeHQoJ3RhYl9uYW1lJykpOw0K CXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfb3B0aW9ucycsICdwbHVnaW5fcHJlZnMuJy4k c21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF93ZWxjb21lJywg J3BsdWdpbl9saWZlY3ljbGUuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9hdCcsICRzbWRfYXRfZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRf YXRfcGVyJywgJ2FkbWluX3NpZGUnLCAndGhlbWVfbmFtZScpOw0KCXJlZ2lzdGVyX2NhbGxi YWNrKCdzbWRfYXRfbGluaycsICdwcmVmc191aScsICd0aGVtZV9uYW1lJyk7DQoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF9hdF91cGxvYWRfZm9ybScsICRzbWRfYXRfZXZlbnQuJ191aScs ICd1cGxvYWRfZm9ybScpOw0KDQoJaWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3N5c3RlbSdd KSAmJiAkcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA9PSAyKSB7DQoJCWFkZF9wcml2cygkc21k X2F0X2FkbV9ldmVudCwgJzIsMyw0LDUsNicpOw0KCQlyZWdpc3Rlcl90YWIoImFkbWluIiwg JHNtZF9hdF9hZG1fZXZlbnQsIHNtZF9hdF9nVHh0KCdza2lubmVyJykpOw0KCQlyZWdpc3Rl cl9jYWxsYmFjaygnc21kX2FkbWF0JywgJHNtZF9hdF9hZG1fZXZlbnQpOw0KCX0NCg0KCS8v IERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVp ciBkZWZhdWx0cywNCgkvLyAybmQgaXMgYSBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0aGF0IG1h eSBuZWVkIHJlbW92aW5nIGluIGZ1dHVyZSAoZGVmYXVsdHMgYWxsIHNldCBlbXB0eSkNCgkk c21kX2F0X3ByZWZzID0gYXJyYXkoDQoJCWFycmF5KA0KCQkJJ3NtZF9hdF9jYXNlX3NvcnQn ID0+ICcxJywNCgkJCSdzbWRfYXRfY3J1c2gnID0+ICdnemlwJywNCgkJCSdzbWRfYXRfdHcn ID0+ICcyNjAnLA0KCQkJJ3NtZF9hdF90aCcgPT4gJzE1MCcsDQoJCQknc21kX2F0X2xheW91 dCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9zeXN0ZW0nID0+ICcwJywNCgkJCSdzbWRfYXRfZ2xv YmFsX3NraW4nID0+ICcnLA0KCQkJJ3NtZF9hdF9ncm91cF9saXN0JyA9PiAnJywNCgkJCSdz bWRfYXRfdXNlcl9saXN0JyA9PiAnJywNCgkJKSwNCgkJYXJyYXkoDQoJCQknc21kX2F0X25v dF91c2VkX2FueV9tb3JlJyA9PiAnJywNCgkJKQ0KCSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0KCRldmVudCwgJHN0ZXApIHsNCglpZigh JHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfYXRfY2xvbmUnLA0K CQkJJ3NtZF9hdF9kZWxldGUnLA0KCQkJJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLA0KCQkJJ3Nt ZF9hdF9lZGl0JywNCgkJCSdzbWRfYXRfZXhwb3J0JywNCgkJCSdzbWRfYXRfaW1wb3J0JywN CgkJCSdzbWRfYXRfbmV3ZmlsZScsDQoJCQknc21kX2F0X3ByZWZzX2luc3RhbGwnLA0KCQkJ J3NtZF9hdF9wcmVmc19yZW1vdmUnLA0KCQkJJ3NtZF9hdF9wcmVmc191cGRhdGUnLA0KCQkJ J3NtZF9hdF9yZW5hbWUnLA0KCQkJJ3NtZF9hdF9zYXZlJywNCgkJCSdzbWRfYXRfc2V0dXAn LA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkJJ3NtZF9hdF91cGxvYWRfaW1hZ2UnLA0KCQkJ J3NtZF9hdF9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsNCgkJc21kX2F0X2xpc3QoJycpOw0K CX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfd2Vs Y29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcnOw0KCXN3aXRjaCAoJHN0ZXApIHsN CgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9hdF9wcmVmc19pbnN0YWxsKDApOw0KCQkJ YnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21kX2F0X3ByZWZzX3JlbW92ZSgwKTsN CgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9hdF9saW5rKCkgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50Ow0KCXJldHVybiBocmVm KHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksICc/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50KTsN Cn0NCg0KLy8gQSBzdHViIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGEgJG1lc3NhZ2UN CmZ1bmN0aW9uIHNtZF9hdF9kaXNwbGF5KCkgew0KCQlzbWRfYXRfbGlzdCgnJyk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2xpc3QoJG1l c3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudCwgJHByZWZzLCAkc21kX2F0X3By ZWZzLCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfZnVsbGV2LCAkc21kX2F0 X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbzsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9n ZXRfcHJlZnMoKTsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc3RlcCcsICdwYWdlJywgJ2Ny aXQnLCAnc2VhcmNoX21ldGhvZCcsICdza2luJykpKTsNCgkkbWVzc2FnZSA9ICgkbWVzc2Fn ZSkgPyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCdd IDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJl ZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J10pICsgMTA7 DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3ByZWZzWydz bWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCddKSArIDgwOw0KCSRo ZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21kX2F0 X2Z1bGxldiN1c2FnZSI7DQoNCgkkcGFnZWJ5ID0gKGdwcygncXR5JykpID8gZ3BzKCdxdHkn KSA6ICgoY3MoJ3NtZF9hdF9wYWdlYnknKSkgPyBjcygnc21kX2F0X3BhZ2VieScpIDogMTUp Ow0KCSRtYXhfZmlsZV9zaXplID0gMTUwICogMTAyNDsgLy8gYSBiaXQgYXJiaXRyYXJ5IQ0K DQoJJGN1cnJfc2tpbiA9IChzbWRfYXRfZXhpc3RzKCR0aGVtZS0+bmFtZSkpID8gJHRoZW1l LT5uYW1lIDogJ2NsYXNzaWMnOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygp Ow0KCSRjcnVzaGVycyA9IHNtZF9hdF9leHBvcnRfb3B0aW9ucygpOw0KCSRiYXNlcyA9IGFy cmF5KCk7DQoNCgkvLyBHZXQgYSBsaXN0IG9mIGFuY2VzdG9yIHRoZW1lcyAoaS5lLiBkZXBl bmRlbmNpZXMpDQoJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbmEpIHsNCgkJJG1hbmlm ZXN0ID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luYSk7DQoJCWlmICgkbWFuaWZlc3QpIHsN CgkJCWlmICgkbWFuaWZlc3RbJ2Jhc2VkX29uJ10pIHsNCgkJCQkkYmFzZXNbXSA9ICRtYW5p ZmVzdFsnYmFzZWRfb24nXTsNCgkJCX0NCgkJfQ0KCX0NCgkkYmFzZXMgPSBhcnJheV91bmlx dWUoJGJhc2VzKTsNCg0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ21hbmFnZV9sYmwnKSwkbWVz c2FnZSk7DQoNCgkvLyBIYW5kbGUgcGFnaW5nDQoJJHRvdGFsID0gY291bnQoJHNraW5fbGlz dCk7DQoJJGxpbWl0ID0gbWF4KEAkcGFnZWJ5LCAxNSk7DQoJbGlzdCgkcGFnZSwgJG9mZnNl dCwgJG51bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxpbWl0LCAkcGFnZSk7DQoJJHNraW5f bGlzdCA9IGFycmF5X3NsaWNlKCRza2luX2xpc3QsICRvZmZzZXQsICRsaW1pdCk7DQoNCgkk cXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LA0KCQkicGFnZSIgPT4g JHBhZ2UsDQoJKTsNCg0KCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiPg0KZnVuY3Rpb24gc21kX2dldGNydXNoKHNraW4pIHsNCglza2luSGFuZGxlID0g ImNydXNoXyIrc2tpbjsNCglqUXVlcnkoJy5zbWRfcG9wdXAnKS5lYWNoKGZ1bmN0aW9uKCkg ew0KCQlib3ggPSBqUXVlcnkodGhpcyk7DQoJCWlmIChib3guYXR0cigiaWQiKSA9PSBza2lu SGFuZGxlKSB7DQoJCQlpZiAoYm94LmNzcygiZGlzcGxheSIpID09ICJub25lIikgew0KCQkJ CWJveC5zbGlkZURvd24oJ2Zhc3QnKTsNCgkJCX0gZWxzZSB7DQoJCQkJYm94LnNsaWRlVXAo J2Zhc3QnKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJ CX0NCgl9KTsNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBhJykuY2xpY2soZnVuY3Rpb24o KSB7DQoJCWpRdWVyeSh0aGlzKS5hdHRyKCJocmVmIiwgIj9ldmVudD17JHNtZF9hdF9ldmVu dH0mc2tpbj0iK3NraW4rIiZzdGVwPXNtZF9hdF9leHBvcnQmY3J1c2g9IitqUXVlcnkoJyMn K3NraW5IYW5kbGUrJyBpbnB1dFt0eXBlPVwncmFkaW9cJ106Y2hlY2tlZCcpLnZhbCgpKyIm cGFnZT0iK3skcGFnZX0pOw0KCX0pOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24g c21kX2dldHZhbChza2luLCBzdGVwKSB7DQoJc2tpbkhhbmRsZSA9ICJwb3BfIitza2luOw0K CWpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWJveCA9IGpRdWVy eSh0aGlzKTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5IYW5kbGUpIHsNCgkJCWlm IChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJYm94LnNsaWRlRG93bign ZmFzdCcpOw0KCQkJCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0JykuZm9jdXMoKTsN CgkJCX0gZWxzZSB7DQoJCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJCX0NCgkJfSBlbHNl IHsNCgkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJCX0NCgl9KTsNCglqUXVlcnkoJyMnK3Nr aW5IYW5kbGUrJyBhJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlzKS5hdHRy KCJocmVmIiwgIj9ldmVudD17JHNtZF9hdF9ldmVudH0mc2tpbj0iKygoc2tpbj09J25ldycp PyAnJyA6IHNraW4pKyImc3RlcD0iK3N0ZXArIiZuZXdfc2tpbj0iK2pRdWVyeSgnIycrc2tp bkhhbmRsZSsnIGlucHV0JykudmFsKCkrIiZwYWdlPSIreyRwYWdlfSk7DQoJfSk7DQoNCglq UXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmtleXVwKGZ1bmN0aW9uICgpIHsNCgkJ dGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlfXHg3Zi1ceGZm XS9nLCcnKTsNCgkJd2hpbGUgKHRoaXMudmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLnZhbHVl LnN1YnN0cmluZygwLDEpLm1hdGNoKC9bMC05XS8pKSB7DQoJCQl0aGlzLnZhbHVlID0gdGhp cy52YWx1ZS5zdWJzdHJpbmcoMSk7DQoJCX0NCgl9KTsNCg0KCXJldHVybiBmYWxzZTsNCn0N Cjwvc2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRfaGlkZGVuIHsNCglk aXNwbGF5Om5vbmU7DQoJbWFyZ2luOjVweDsNCn0NCiNzbWRfY29udHJvbCB7DQoJbWFyZ2lu OjAgYXV0bzsNCn0NCiNzbWRfY29udHJvbCB0ZCAucHVibGlzaCB7DQoJbWFyZ2luLWxlZnQ6 NTBweDsNCn0NCiNzbWRfY29udHJvbCAudXBsb2FkLWZvcm0gew0KCXBhZGRpbmc6MDsNCn0N Ci5zbWRfZ3JpZCB7DQoJd2lkdGg6OTYwcHg7DQoJbWFyZ2luOjAgYXV0bzsNCn0NCi5zbWRf Y2VsbCB7DQoJZmxvYXQ6bGVmdDsNCglwYWRkaW5nOjEwcHg7DQoJbWFyZ2luOjEwcHg7DQoJ Ym9yZGVyOjFweCByaWRnZSAjY2NjOw0KCXdpZHRoOnskdHd9cHg7DQoJaGVpZ2h0OnskdGh9 cHg7DQp9DQouc21kX2NlbGw6aG92ZXIgew0KCWJhY2tncm91bmQ6I2RkZDsNCn0NCi5zbWRf Y2xlYXIgew0KCWNsZWFyOmJvdGg7DQp9DQouc21kX2F1dGgsDQouc21kX2FjdGlvbnMgew0K CXRleHQtYWxpZ246Y2VudGVyOw0KCW1hcmdpbjo1cHggMDsNCn0NCjwvc3R5bGU+DQpFT0pT Ow0KDQoJLy8gTGlzdCB0aGUgYXZhaWxhYmxlIHNraW5zDQoJZWNobyBzdGFydFRhYmxlKCdz bWRfY29udHJvbCcsJycsJycsNSk7DQoJZWNobyB0cigNCgkJdGRhKHVwbG9hZF9mb3JtKHNt ZF9hdF9nVHh0KCdpbnN0YWxsX3NraW4nKSwgJycsICdzbWRfYXRfaW1wb3J0JywgJHNtZF9h dF9ldmVudCwgJycsICRtYXhfZmlsZV9zaXplKSwgJyBjb2xzcGFuPSIyIicpDQoJCS50ZGEo Zm9ybShmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfYXRfZ1R4dCgnc2V0dXAnKSwg J3B1Ymxpc2gnKS5zSW5wdXQoJ3NtZF9hdF9zZXR1cCcpLmVJbnB1dCgkc21kX2F0X2V2ZW50 KSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykNCgkpOw0K CWVjaG8gZW5kVGFibGUoKTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9Imxv bmdmb3JtIiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJJG5ld2J0biA9ICcgJy4n PGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3Rl cD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49IiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldHZhbChc J25ld1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsiPicuc21kX2F0X2dUeHQoJ25ldycpLic8L2E+ Jw0KCQkuICc8ZGl2IGlkPSJwb3BfbmV3IiBjbGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4i PjxzcGFuPicuc21kX2F0X2dUeHQoJ25ld19za2luJykuJzwvc3Bhbj48aW5wdXQgdHlwZT0i dGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIgdmFsdWU9IiIgLz4gPGEgaHJlZj0iIyI+Wycu c21kX2F0X2dUeHQoJ2NvbmZpcm0nKS4nXTwvYT48L2Rpdj4nOw0KCSRyZXBvYnRuID0gJyAn Lic8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iJy4kc21kX2F0X3RoZW1lX3JlcG8uJyI+Jy5z bWRfYXRfZ1R4dCgnZmluZF90aGVtZScpLic8L2E+JzsNCgkkaGRyb3cgPSBoZWQoc21kX2F0 X2dUeHQoJ2xpc3RfdGl0bGUnKS4gJyAnLiBzbWRfYXRfZ1R4dCgnaGVscF9saW5rJywgYXJy YXkoJ3tsaW5rfScgPT4gJGhlbHBMaW5rKSksIDMpOw0KCWlmICgkbGF5b3V0PT0iMCIpIHsN CgkJZWNobyBzdGFydFRhYmxlKCdsaXN0JywnJywnJyw1KTsNCgkJZWNobyB0cigNCgkJCXRk YSgkaGRyb3cuJHJlcG9idG4uJG5ld2J0biwgJyBjb2xzcGFuPSI3IicpDQoJCSk7DQoJCWVj aG8gdHIoDQoJCQlhc3NIZWFkKA0KCQkJCXNtZF9hdF9nVHh0KCdza2luX2dibCcpLA0KCQkJ CSdhdXRob3InLA0KCQkJCWdUeHQoJ3ZlcnNpb24nKSwNCgkJCQknZGVzY3JpcHRpb24nLA0K CQkJCXNtZF9hdF9nVHh0KCdhY3Rpb25zJykNCgkJCQkpDQoJCSk7DQoJfSBlbHNlIHsNCgkJ ZWNobyAnPGRpdiBjbGFzcz0ic21kX2dyaWQiPjxkaXYgY2xhc3M9InNtZF9uZXdyb3ciPicu JGhkcm93LiRyZXBvYnRuLiRuZXdidG4uJzwvZGl2Pic7DQoJfQ0KCWlmKCBpc19jYWxsYWJs ZSgnZnNvY2tvcGVuJykgKQ0KCQkkdHJhbnNwb3J0ID0gJ2Zzb2NrJzsNCgllbHNlaWYoIGlz X2NhbGxhYmxlKCdjdXJsX2luaXQnKSApIHsNCgkJJHRyYW5zcG9ydCA9ICdjdXJsJzsNCgl9 IGVsc2Ugew0KCQkkdHJhbnNwb3J0ID0gJyc7DQoJfQ0KDQoJJGZlZWQgPSAnJzsNCglzd2l0 Y2ggKCR0cmFuc3BvcnQpIHsNCgkJY2FzZSAnY3VybCc6DQoJCQkkYyA9IGN1cmxfaW5pdCgp Ow0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVVJMLCAkc21kX2F0X2ZlZWR1cmwpOw0K CQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfUkVGRVJFUiwgaHUpOw0KCQkJY3VybF9zZXRv cHQoJGMsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOw0KCQkJY3VybF9zZXRvcHQo JGMsIENVUkxPUFRfVkVSQk9TRSwgZmFsc2UpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxP UFRfVElNRU9VVCwgMTApOw0KCQkJJGZlZWQgPSBjdXJsX2V4ZWMoJGMpOw0KCQkJYnJlYWs7 DQoJCWNhc2UgJ2Zzb2NrJzoNCgkJCSR1cmwgPSBwYXJzZV91cmwoJHNtZF9hdF9mZWVkdXJs KTsNCgkJCSRmcCA9IGZzb2Nrb3BlbiAoJHVybFsnaG9zdCddLCA4MCwgJGVycm5vLCAkZXJy c3RyLCAxMCk7DQoJCQkkcXJ5ID0gJ0dFVCAnLiRzbWRfYXRfZmVlZHVybDsNCgkJCSRxcnkg Lj0gIiBIVFRQLzEuMFxyXG5cclxuIjsNCg0KCQkJZnB1dHMoJGZwLCAkcXJ5KTsNCgkJCXN0 cmVhbV9zZXRfdGltZW91dCgkZnAsIDEwKTsNCgkJCSRpbmZvID0gc3RyZWFtX2dldF9tZXRh X2RhdGEoJGZwKTsNCg0KCQkJJGhkcnMgPSB0cnVlOw0KCQkJd2hpbGUgKCghZmVvZigkZnAp KSAmJiAoISRpbmZvWyd0aW1lZF9vdXQnXSkpIHsNCgkJCQkkbGluZSA9IGZnZXRzKCRmcCwg ODE5Mik7DQoJCQkJJGxpbmUgPSBlcmVnX3JlcGxhY2UoIltcclxuXSIsICIiLCAkbGluZSk7 DQoJCQkJaWYgKCRoZHJzID09IGZhbHNlKSB7DQoJCQkJCSRmZWVkIC49ICRsaW5lLiJcbiI7 DQoJCQkJfQ0KCQkJCWlmIChzdHJsZW4oJGxpbmUpID09IDApICRoZHJzID0gZmFsc2U7DQoJ CQl9DQoJCQlpZiAoJGluZm9bJ3RpbWVkX291dCddKSB7DQoJCQkJJGZlZWQgPSAnJzsNCgkJ CX0NCgkJCWZjbG9zZSgkZnApOw0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkkZmVlZCA9 ICcnOw0KCX0NCg0KCSRzbWRfYXRfdmxhc3QgPSAkZmVlZHMgPSAnJzsNCglpZiAoaXNzZXQo JHByZWZzWydzbWRfYXRfdmVyc2lvbnMnXSkgJiYgaXNzZXQoJHByZWZzWydzbWRfYXRfdmxh c3QnXSkpIHsNCgkJaWYgKHRpbWUoKSAtICRwcmVmc1snc21kX2F0X3ZsYXN0J10gPCA4NjQw MCkgew0KCQkJLy8gTGFzdCB1cGRhdGVkIHdpdGhpbiB0aGUgbGFzdCBkYXksIHNvIHJlYWQg dGhlIGNhY2hlZCB2ZXJzaW9uIG51bWJlcnMNCgkJCSRmZWVkcyA9IHVuc2VyaWFsaXplKCRw cmVmc1snc21kX2F0X3ZlcnNpb25zJ10pOw0KCQl9DQoJfQ0KCWlmICghJGZlZWRzIHx8IGdw cygncmVhZF92ZXJzaW9ucycpKSB7DQoJCSRmZWVkcyA9IHNtZF9hdF9mZWVkKCRmZWVkKTsN CgkJJGluc3RhbGxlZF9mZWVkID0gYXJyYXkoKTsNCg0KCQkvLyBPbmx5IHJlY29yZCB0aGUg dmVyc2lvbiBpbmZvIGZyb20gdGhlbWVzIHRoYXQgYXJlIGluc3RhbGxlZA0KCQlmb3JlYWNo KCRza2luX2xpc3QgYXMgJHNraW5fbmFtZSkgew0KCQkJJGZlZWRfc2tpbl9uYW1lID0gc3Ry X3JlcGxhY2UoJ18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIHRoZSB1cmxf dGl0bGUNCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRmZWVkX3NraW5fbmFtZSwgJGZlZWRz KSkgew0KCQkJCSRpbnN0YWxsZWRfZmVlZFskZmVlZF9za2luX25hbWVdID0gJGZlZWRzWyRm ZWVkX3NraW5fbmFtZV07DQoJCQl9DQoJCX0NCgkJc2V0X3ByZWYoJ3NtZF9hdF92bGFzdCcs IHRpbWUoKSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJ CXNldF9wcmVmKCdzbWRfYXRfdmVyc2lvbnMnLCBzZXJpYWxpemUoJGluc3RhbGxlZF9mZWVk KSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJfQ0KDQoJ Zm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7DQoJCS8vIFJlYWQgZWFjaCBt YW5pZmVzdCBhbmQgc2V0IHVwIHRoZSBsYWJlbHMNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFk X3NraW5mbygkc2tpbl9uYW1lKTsNCgkJJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2Uo J18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIGZvciB1cmxfdGl0bGUgbWF0 Y2hpbmcNCg0KCQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZvLCAxKTsN CgkJJHRoaXNfc2tpbiA9ICgkc2tpbmZvKSA/ICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2lu KSA/IHN0cm9uZygkc2tpbmZvWydkbmFtZSddKSA6ICRza2luZm9bJ2RuYW1lJ10pIDogJHNr aW5fbmFtZTsNCgkJJGlzX2dibCA9ICgkc2tpbl9uYW1lID09ICRhdF9wcmVmc1snc21kX2F0 X2dsb2JhbF9za2luJ10pID8gc21kX2F0X2dUeHQoJ2lzX2dsb2JhbCcpIDogJyc7DQoJCSR0 aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRf YXRfc3dpdGNoJy5hLiduZXh0c3RlcD1zbWRfYXRfbGlzdCcuYS4nc2tpbj0nLiRza2luX25h bWUuYS4ncGFnZT0nLiRwYWdlLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdhcHBseV9za2lu JykuJyI+Jy4kdGhpc19za2luLiRpc19nYmwuKCgkc2tpbmZvICYmICRza2luZm9bJ2Jhc2Vk X29uJ10pID8gc21kX2F0X2dUeHQoJ2Jhc2VkX29uJywgYXJyYXkoJ3tza2lufScgPT4gJHNr aW5mb1snYmFzZWRfb24nXSkpIDogJycpLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0aHVt Ym5haWwuJzwvZGl2PicgOiAnJykuJzwvYT4nOw0KCQkkYXV0aHJvdyA9ICgoJHNraW5mbyAm JiBzdHJwb3MoJHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAwKSA/ICc8 YSBocmVmPSInLiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1dGhvcidd Lic8L2E+JyA6ICgoJHNraW5mbykgPyAkc2tpbmZvWydhdXRob3InXSA6ICctJykpOw0KCQkk YWN0cm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRf YXRfZWRpdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyI+WycuZ1R4dCgnZWRpdCcpLiddPC9h PicNCgkJCS4gJyAnIC4oKCRza2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRf ZXZlbnQuYS4nc3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIG9u Y2xpY2s9InJldHVybiBzbWRfZ2V0dmFsKFwnJy4kc2tpbl9uYW1lLidcJywgXCdzbWRfYXRf Y2xvbmVcJyk7Ij5bJy5zbWRfYXRfZ1R4dCgnY2xvbmUnKS4nXTwvYT4nIDogJycpDQoJCQku ICcgJyAuKCgkc2tpbmZvKSA/ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEu J3N0ZXA9c21kX2F0X2V4cG9ydCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgb25jbGljaz0i cmV0dXJuIHNtZF9nZXRjcnVzaChcJycuJHNraW5fbmFtZS4nXCcpOyI+Wycuc21kX2F0X2dU eHQoJ2V4cG9ydCcpLiddPC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKGluX2FycmF5KCRza2lu X25hbWUsICRzbWRfY29yZV90aGVtZXMpIHx8IGluX2FycmF5KCRza2luX25hbWUsICRiYXNl cykpID8gJycgOiAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNt ZF9hdF9kZWxldGUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEuJ3BhZ2U9Jy4kcGFnZS4nIiBv bmNsaWNrPSJyZXR1cm4gY29uZmlybShcJ1JlYWxseSBkZWxldGUgc2tpbiAnLiRza2luX25h bWUuJz9cJyk7Ij5bJy5nVHh0KCdkZWxldGUnKS4nXTwvYT4nKQ0KCQkJLiAnPGRpdiBpZD0i cG9wXycuJHNraW5fbmFtZS4nIiBjbGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFu Picuc21kX2F0X2dUeHQoJ25ld19jbG9uZXNraW4nKS4nPC9zcGFuPjxpbnB1dCB0eXBlPSJ0 ZXh0IiBuYW1lPSJzbWRfdGV4dF9uYW1lIiB2YWx1ZT0iIiAvPiA8YSBocmVmPSIjIj4mbmJz cDtbJy5zdHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0nKSkuJ108L2E+PC9kaXY+Jw0KCQkJ LiAnPGRpdiBpZD0iY3J1c2hfJy4kc2tpbl9uYW1lLiciIGNsYXNzPSJzbWRfcG9wdXAgc21k X2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRfZ1R4dCgnY3J1c2hfZm9ybWF0JykuJzwvc3Bhbj4n LnJhZGlvU2V0KCRjcnVzaGVycywgJHNraW5fbmFtZS4nX2NydXNoJywgJGF0X3ByZWZzWydz bWRfYXRfY3J1c2gnXSkuJzxhIGhyZWY9IiMiPiZuYnNwO1snLnN0cm9uZyhzbWRfYXRfZ1R4 dCgnY29uZmlybScpKS4nXTwvYT48L2Rpdj4nOw0KCQkkdmVyb3cgPSAoJHNraW5mbykgPyAo KGlzc2V0KCRmZWVkc1skZmVlZF9za2luX25hbWVdKSAmJiBpc3NldCgkZmVlZHNbJGZlZWRf c2tpbl9uYW1lXVsnc3VtbWFyeSddKSAmJiB2ZXJzaW9uX2NvbXBhcmUoJGZlZWRzWyRmZWVk X3NraW5fbmFtZV1bJ3N1bW1hcnknXSwkc2tpbmZvWyd2ZXJzaW9uJ10pPT09MSkgPyAnPGEg aHJlZj0iJy4kZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsnbGluayddLiciIHN0eWxlPSJmb250 LXdlaWdodDpib2xkO2NvbG9yOiM5OTAwMDA7Ij4nLnNtZF9hdF9nVHh0KCd2ZXJzaW9uJyku JHNraW5mb1sndmVyc2lvbiddLic8L2E+JyA6IHNtZF9hdF9nVHh0KCd2ZXJzaW9uJykuJHNr aW5mb1sndmVyc2lvbiddKSA6ICcnOw0KDQoJCWlmICgkbGF5b3V0PT0wKSB7DQoJCQllY2hv IHRyKA0KCQkJCXRkKCR0aHVtcm93KQ0KCQkJCS50ZCgkYXV0aHJvdywgMTAwKQ0KCQkJCS50 ZCgkdmVyb3cpDQoJCQkJLnRkKCgoJHNraW5mbyk/ICRza2luZm9bJ2Rlc2NyaXB0aW9uJ10g OiAnLScpLigoJHNraW5mbyAmJiAkc2tpbmZvWydoZWxwJ10pID8gJyAnLmhyZWYoJ1snLmdU eHQoJ2hlbHAnKS4nXScsICRza2luZm9bJ2hlbHAnXSkgOiAnJyksIDI1MCkNCgkJCQkudGQo JGFjdHJvdywyNjApDQoJCQksICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/ICcgc3R5 bGU9ImJhY2tncm91bmQ6I2U4ZThlODsiJyA6ICcnKQ0KCQkJKTsNCgkJfSBlbHNlIHsNCgkJ CWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsIicuKCgkc2tpbl9uYW1lID09ICRjdXJyX3Nr aW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpLic+JzsNCgkJCWVj aG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNt ZF9hdXRoIj4nLiR2ZXJvdy5zbWRfYXRfZ1R4dCgnYnknKS4kYXV0aHJvdy4nPC9kaXY+JzsN CgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hY3Rpb25zIj4nLiRhY3Ryb3cuJzwvZGl2Pic7 DQoJCQllY2hvICc8L2Rpdj4nOw0KCQl9DQoJfQ0KDQovLwllY2hvIHRkYShzZWxlY3RfYnV0 dG9ucygpIC4gZXZlbnRfbXVsdGllZGl0X2Zvcm0oJHNtZF9hdF9ldmVudCwgTlVMTCwgJHBh Z2UsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLCAnIGNvbHNwYW49IjUiIHN0eWxlPSJ0ZXh0 LWFsaWduOiByaWdodDsgYm9yZGVyOiBub25lOyInKTsNCglpZiAoJGxheW91dD09IjAiKSB7 DQoJCWVjaG8gJzwvdGQ+PC90cj4nOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJfSBlbHNlIHsN CgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NsZWFyIj48L2Rpdj48L2Rpdj4nOw0KCX0NCgll Y2hvICc8L2Zvcm0+JzsNCgllY2hvIG4ubmF2X2Zvcm0oJHNtZF9hdF9ldmVudCwgJHBhZ2Us ICRudW1QYWdlcywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7DQoJZWNobyBuLnBhZ2VieV9m b3JtKCRzbWRfYXRfZXZlbnQsICRwYWdlYnkpOw0KfQ0KDQpmdW5jdGlvbiBzbWRfYXRfZmVl ZCgkZmVlZCkgew0KCWdsb2JhbCAkZmVlZHM7DQoNCgkkZmVlZD1lcmVnaV9yZXBsYWNlKCI+ Ii4iW1s6c3BhY2U6XV0rIi4iPCIsIj48IiwkZmVlZCk7IC8vIEtpbGwgd2hpdGVzcGFjZSBp biBmZWVkDQoJJHhtbHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCk7DQoJeG1sX3NldF9l bGVtZW50X2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF9hdF9mZWVkX3N0YXJ0X3RhZyIsICJz bWRfYXRfZmVlZF9lbmRfdGFnIik7DQoJeG1sX3NldF9jaGFyYWN0ZXJfZGF0YV9oYW5kbGVy KCR4bWxwYXJzZXIsICJzbWRfYXRfZmVlZF90YWdfY29udGVudHMiKTsNCgl4bWxfcGFyc2Uo JHhtbHBhcnNlciwgJGZlZWQpOw0KCXhtbF9wYXJzZXJfZnJlZSgkeG1scGFyc2VyKTsNCg0K CXJldHVybiAkZmVlZHM7DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3N0YXJ0X3RhZygk cGFyc2VyLCAkbmFtZSwgJGF0dHJpYnMpIHsNCglnbG9iYWwgJHNtZF9hdF9mZWVkaW4sICRz bWRfYXRfZmVlZHRhZzsNCglpZiAoJG5hbWUgPT0gIkVOVFJZIikgew0KCQkkc21kX2F0X2Zl ZWRpbiA9IHRydWU7DQoJfQ0KCWlmICgkc21kX2F0X2ZlZWRpbikgew0KCQkkc21kX2F0X2Zl ZWR0YWcgPSAkbmFtZTsNCgl9DQp9DQpmdW5jdGlvbiBzbWRfYXRfZmVlZF9lbmRfdGFnKCRw YXJzZXIsICRuYW1lKSB7DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0 YWcsICRzbWRfYXRfZmVlZG5hbWU7DQoJaWYgKCRuYW1lID09ICJFTlRSWSIpIHsNCgkJJHNt ZF9hdF9mZWVkaW4gPSBmYWxzZTsNCgkJJHNtZF9hdF9mZWVkbmFtZSA9ICcnOw0KCX0NCn0N Cg0KZnVuY3Rpb24gc21kX2F0X2ZlZWRfdGFnX2NvbnRlbnRzKCRwYXJzZXIsICRkYXRhKSB7 DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWcsICRzbWRfYXRfZmVl ZG5hbWUsICRmZWVkczsNCglpZiAoJHNtZF9hdF9mZWVkaW4pIHsNCgkJaWYgKCRzbWRfYXRf ZmVlZHRhZyA9PSAiTkFNRSIpIHsNCgkJCSRmZWVkc1skZGF0YV0gPSAnJzsNCgkJCSRzbWRf YXRfZmVlZG5hbWUgPSAkZGF0YTsNCgkJfQ0KCQlpZiAoaXNzZXQoJGZlZWRzWyRzbWRfYXRf ZmVlZG5hbWVdKSkgew0KCQkJaWYgKCRzbWRfYXRfZmVlZHRhZyA9PSAiVElUTEUiIHx8ICRz bWRfYXRfZmVlZHRhZyA9PSAiU1VNTUFSWSIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJVUERB VEVEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIklEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0g IkxJTksiKSB7DQoJCQkJJGZlZWRzWyRzbWRfYXRfZmVlZG5hbWVdW3N0cnRvbG93ZXIoJHNt ZF9hdF9mZWVkdGFnKV0gPSAkZGF0YTsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZW1vdmUgaGFyZCBzcGFjZXMgaW4gdGhlIHVwbG9h ZF9mb3JtIHNvIE9wZXJhIGFuZCBJRSB3cmFwIHRoZSBidXR0b25zDQpmdW5jdGlvbiBzbWRf YXRfdXBsb2FkX2Zvcm0oJGV2ZW50LCAkc3RlcCwgJGRhdGEsICRhcmdzKSB7DQoJcmV0dXJu IHN0cl9yZXBsYWNlKCcmIzE2MDsnLCAnICcsICRkYXRhKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZWRpdCgkbWVzc2FnZT0nJykgew0K CWdsb2JhbCAkc21kX2F0X2V2ZW50Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXko J3NraW4nLCAnbmV3X3NraW4nLCAnZmlsZScpKSkpOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0 X2dldF9wcmVmcygpOw0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5 b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddIDogMTsNCg0KCSRlZGl0YWJs ZSA9IGFycmF5KCJzc2MiLCAiY3NzIiwgImpzIiwgInBocCIpOw0KCSRpbWFnYWJsZSA9IGFy cmF5KCJqcGciLCAianBlZyIsICJnaWYiLCAicG5nIik7DQoJJG1heF9maWxlX3NpemUgPSAy ICogMTAyNCAqIDEwMjQ7DQoNCgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2lu KTsNCgkkZmlsZSA9IChlbXB0eSgkbmV3X3NraW4pKSA/ICRmaWxlIDogJG5ld19za2luOw0K CSRmaWxlcyA9IHNtZF9hdF9saXN0ZGlyKFRIRU1FLiRza2luKTsNCglzb3J0KCRmaWxlcyk7 DQoNCgkvLyBTcGxpdCB0aGUgbGlzdCBpbnRvIGl0cyBkaXJlY3RvcnkgZ3JvdXBzDQoJJGFs bGZpbGVzID0gYXJyYXkoKTsNCglmb3JlYWNoICgkZmlsZXMgYXMgJGN1cnJmaWxlKSB7DQoJ CSRmaWxlX2luZm8gPSBwYXRoaW5mbygkY3VycmZpbGUpOw0KCQkvLyBJZ25vcmUgYW55IHJv Z3VlIFN1YnZlcnNpb24gZmlsZXMNCgkJaWYgKHN0cnBvcygkZmlsZV9pbmZvWydkaXJuYW1l J10sICcvLnN2bicpID09PSBmYWxzZSkgew0KCQkJJGZpbGVfdHlwZSA9IChpc3NldCgkZmls ZV9pbmZvWydleHRlbnNpb24nXSkpID8gJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10gOiAnb3Ro ZXInOw0KCQkJJGFsbGZpbGVzWyRmaWxlX3R5cGVdW10gPSAkY3VycmZpbGU7DQoJCX0NCgl9 DQoNCglpZiAoZ3BzKCdzbWRfYXRfZWRpdHMnKSkgew0KCQkkY29udGVudHMgPSBkb1N0cmlw KHN0cl9yZXBsYWNlKCdcclxuJywnDQonLGdwcygnc21kX2F0X2VkaXRzJykpKTsgLy8gbmV3 bGluZSB3b3JrYXJvdW5kDQoJfSBlbHNlIHsNCgkJJGNvbnRlbnRzID0gJyc7DQoJCWlmICgk ZmlsZSAmJiBmaWxlX2V4aXN0cyhUSEVNRS4kc2tpbi5EUy4kZmlsZSkpIHsNCgkJCSRjb250 ZW50cyA9IGZpbGUoVEhFTUUuJHNraW4uRFMuJGZpbGUpOw0KCQkJJGNvbnRlbnRzID0gam9p bigiIiwgJGNvbnRlbnRzKTsNCgkJfQ0KCX0NCg0KCS8vIEJlZ2luIHJlbmRlcmluZyB0aGUg cGFnZQ0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ2VkaXRfbGJsJyksJG1lc3NhZ2UpOw0KDQoJ ZWNobyA8PDxFT1MNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQojc21kX2F0X2ltYWdlcyB7 DQoJbWFyZ2luOjBweCA2cHggLTRweCAwOw0KfQ0KLnNtZF9za2luX2ZpbGV0eXBlcyB7DQoJ bWFyZ2luOjEycHggMDsNCn0NCjwvc3R5bGU+DQpFT1M7DQoNCgkkc2tpbl9saXN0ID0gc21k X2F0X3JlYWRfc2tpbnMoKTsNCg0KCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXgg YW5kIHZhbHVlIHRvIGJlIHRoZSBzYW1lIGluIHRoaXMgY2FzZQ0KCSRza2luc2VsID0gYXJy YXkoKTsNCglmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkk c2tpbnNlbFskdmFsdWUxXSA9ICRza2luX2xpc3RbJGtleTFdOw0KICAgfQ0KCSRza2luQ2hh bmdlID0gJzxmb3JtIG5hbWU9InNraW5jaGFuZ2UiIGFjdGlvbj0iaW5kZXgucGhwIj4nDQoJ CS4gZUlucHV0KCRzbWRfYXRfZXZlbnQpDQoJCS4gc0lucHV0KCdzbWRfYXRfZWRpdCcpDQoJ CS4gc2VsZWN0SW5wdXQoJ3NraW4nLCAkc2tpbnNlbCwgJHNraW4sIDAsIDEpDQoJCS4gJzwv Zm9ybT4nOw0KDQoJJGZpbGVMaXN0ID0gaGVkKHNtZF9hdF9nVHh0KCdza2luX2ZpbGVzJyks MikNCgkJLiAkc2tpbkNoYW5nZQ0KCQkuIHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVmdCcsICdz bWRfc2tpbl9maWxldHlwZXMnKTsNCgkkZmlsZUxpc3QgLj0gJzxiciAvPjxhIGNsYXNzPSJu YXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X25l d2ZpbGUnLmEuJ3NraW49Jy4kc2tpbi4nIj4nLnNtZF9hdF9nVHh0KCduZXdfZmlsZScpLic8 L2E+JzsNCgkkZmlsZUxpc3QgLj0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ICdz a2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJG90aGVycyA9IGFy cmF5KCk7DQoNCglmb3JlYWNoICgkZWRpdGFibGUgYXMgJGZpbGV0eXBlKSB7DQoJCWlmIChp c3NldCgkYWxsZmlsZXNbJGZpbGV0eXBlXSkpIHsNCgkJCWZvcmVhY2ggKCRhbGxmaWxlc1sk ZmlsZXR5cGVdIGFzICRpZHggPT4gJGN1cnJmaWxlKSB7DQoJCQkJaWYgKCRpZHggPT0gMCkg ew0KCQkJCQkkZmlsZUxpc3QgLj0gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCRmaWxldHlwZSks MykpKTsNCgkJCQl9DQoJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJ CQkkYmFzZWZpbGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJ CQkJJGVkaXQgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNt ZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigo JGZpbGUgPT0gJGp1c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4n PC9hPic7DQoJCQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygk c21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAn c2tpbicsICRza2luKTsNCgkJCQkkZmlsZUxpc3QgLj0gdHIodGQoJGVkaXQpLnRkKCRkZWwp KTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCS8vIFNvbWUgb3RoZXIgZmlsZSB0eXBlDQoJCQlp ZiAoISRvdGhlcnMpIHsNCgkJCQlmb3JlYWNoICgkYWxsZmlsZXMgYXMgJGZ0eXBlID0+ICRm bHMpIHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkZnR5cGUsIGFycmF5X21lcmdlKCRlZGl0YWJs ZSwgJGltYWdhYmxlKSkpIHsNCgkJCQkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZnR5cGVdIGFz ICRpZHggPT4gJGN1cnJmaWxlKSB7DQoJCQkJCQkJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1 cnJmaWxlKTsNCgkJCQkJCQkkYmFzZWZpbGUgPSBhcnJheV9zaGlmdChleHBsb2RlICgnLics JGp1c3RmaWxlKSk7DQoJCQkJCQkJJGVkaXQgPSAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9h dF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW4uYS4nZmlsZT0n LiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUgPT0gJGp1c3RmaWxlKSA/IHN0cm9uZygkanVzdGZp bGUpIDogJGp1c3RmaWxlKS4nPC9hPic7DQoJCQkJCQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0g JHNraW4pID8gJycgOiBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScsICdm aWxlJywgJGp1c3RmaWxlLCAxLCAnc2tpbicsICRza2luKTsNCgkJCQkJCQkkb3RoZXJzW10g PSB0cih0ZCgkZWRpdCkudGQoJGRlbCkpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJ fQ0KCQl9DQoJfQ0KCSRmaWxlTGlzdCAuPSAoJG90aGVycykgPyB0cih0ZChoZWQoc21kX2F0 X2dUeHQoJ290aGVyX2ZpbGVzJyksMykpKS4gam9pbihuLCAkb3RoZXJzKSA6ICcnOw0KCSRm aWxlTGlzdCAuPSBlbmRUYWJsZSgpOw0KDQoJLy8gTWFrZSB0aGUgbGlzdCBvZiBpbWFnZXMg Zm9yIHRoaXMgc2tpbg0KCSRxcyA9IGFycmF5KA0KCQkiZXZlbnQiID0+ICRzbWRfYXRfZXZl bnQsDQoJCSJzdGVwIiA9PiAnc21kX2F0X2RlbGV0ZV9pbWFnZScsDQoJKTsNCgkkc2VsW10g PSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBpZD0ic21kX2F0X2ltYWdlZm9ybSIgbmFtZT0ic21k X2F0X2ltYWdlZm9ybSIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRzZWxbXSA9 ICc8c2VsZWN0IGlkPSJzbWRfYXRfaW1hZ2VzIiBuYW1lPSJzbWRfYXRfaW1hZ2VzW10iIGNs YXNzPSJsaXN0IiBzaXplPSIyNCIgbXVsdGlwbGU9Im11bHRpcGxlIiBzdHlsZT0id2lkdGg6 MTU0cHg7Ij4nOw0KDQoJaWYgKGRlZmluZWQoJ0dMT0JfQlJBQ0UnKSkgew0KCQkkaW1nID0g Z2xvYihUSEVNRS4kc2tpbi5EUy4neyouanBnLCouZ2lmLCoucG5nfScsIEdMT0JfQlJBQ0Up Ow0KCX0gZWxzZSB7DQoJCSRpbWcgPSBhcnJheV9tZXJnZShnbG9iKFRIRU1FLiRza2luLkRT LicqLmpwZycpLGdsb2IoVEhFTUUuJHNraW4uRFMuJyouZ2lmJyksZ2xvYihUSEVNRS4kc2tp bi5EUy4nKi5wbmcnKSk7DQoJfQ0KDQoJaWYoaXNfYXJyYXkoJGltZykpIHsNCgkJZm9yZWFj aCAoJGltZyBhcyAkaW1nZmlsZSkgew0KCQkJJHNlbFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0i Jy4kaW1nZmlsZS4nIj4nLmJhc2VuYW1lKCRpbWdmaWxlKS4nPC9vcHRpb24+JzsNCgkJfQ0K CX0NCgkkc2VsW10gPSAnPC9zZWxlY3Q+JzsNCgkkc2VsW10gPSBkTGluaygkc21kX2F0X2V2 ZW50LCAnc21kX2F0X2RlbGV0ZV9pbWFnZScsICdza2luJywgJHNraW4sIDEpOw0KCSRzZWxb XSA9ICc8L2Zvcm0+JzsNCgkkc2VsID0gam9pbignJywkc2VsKTsNCg0KCS8vIEltYWdlIHBv cnRpb24NCgkkaW1nYml0ID0gaGVkKHNtZF9hdF9nVHh0KCdza2luX2ltYWdlcycpLCAyKSAu IHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVmdCcpOw0KCSRpbWdiaXQgLj0gdHIodGQoJHNlbCkp Ow0KCSRpbWdiaXQgLj0gdHIodGQodXBsb2FkX2Zvcm0oc21kX2F0X2dUeHQoJ3VwbG9hZF9p bWFnZScpLCAnJywgJ3NtZF9hdF91cGxvYWRfaW1hZ2UnLCAkc21kX2F0X2V2ZW50LCAkc2tp biwgJG1heF9maWxlX3NpemUsICcnLCAnJyksIDE1MCkpOw0KCSRpbWdiaXQgLj0gZW5kVGFi bGUoKTsNCg0KCS8vIFJlbmRlciB0aGUgcmVzdCBvZiB0aGUgcGFnZQ0KCWVjaG8gc3RhcnRU YWJsZSgnZWRpdCcpLg0KCXRyKA0KCQl0ZHRsKCRpbWdiaXQpLg0KCQl0ZCgNCgkJCWhlZCgo KCRza2luZm8pID8gJHNraW5mb1snZG5hbWUnXSA6ICRza2luKSwxKS4NCgkJCWZvcm0oDQoJ CQkJJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfc2tpbiIgdmFsdWU9IicuaHRtbHNw ZWNpYWxjaGFycygkZmlsZSkuJyIgY2xhc3M9ImVkaXQiIHNpemU9IjQwIiB0YWJpbmRleD0i MiIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTBweDsiIC8+Jy5icg0KCQkJCS4nPHRleHRhcmVh IGlkPSJzbWRfYXRfZWRpdHMiIGNsYXNzPSJjb2RlIiBuYW1lPSJzbWRfYXRfZWRpdHMiIGNv bHM9Ijc2IiByb3dzPSIzMiI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb250ZW50cykuJzwvdGV4 dGFyZWE+Jy5icg0KCQkJCS5mSW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJs aXNoJykNCgkJCQkuZUlucHV0KCRzbWRfYXRfZXZlbnQpLnNJbnB1dCgnc21kX2F0X3NhdmUn KQ0KCQkJCS5oSW5wdXQoJ3NraW4nLCRza2luKQ0KCQkJCS5oSW5wdXQoJ2ZpbGUnLCRmaWxl KQ0KCQkJKQ0KCQkpLg0KCQl0ZHRsKCRmaWxlTGlzdCkNCgkpLg0KCWVuZFRhYmxlKCk7DQoN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBKdXN0IGNsZWFyIG91dCB0 aGUgdmFyIHNvIHRoZSBzYXZlIGZ1bmN0aW9uIHRyZWF0cyB0aGUgY29udGVudCBhcyBhIG5l dyBmaWxlDQpmdW5jdGlvbiBzbWRfYXRfbmV3ZmlsZSgpIHsNCgkkX1BPU1RbJ2ZpbGUnXSA9 ICcnOw0KCSRtZXNzYWdlPScnOw0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfY2xvbmUoKSB7DQoJ Z2xvYmFsICR0eHBfdXNlcjsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2lu JywgJ25ld19za2luJykpKSk7DQoJJG1zZz0nJzsNCg0KCSRuZXdfc2tpbiA9IHRyaW0oJG5l d19za2luKTsNCgkkbmV3X3NraW4gPSByYXd1cmxlbmNvZGUoJG5ld19za2luKTsNCg0KCWlm IChlbXB0eSgkbmV3X3NraW4pKSB7DQoJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnbmFtZV9lbXB0 eScpOw0KCX0NCg0KCS8vIENoZWNrIHRoZSBuZXcgbmFtZSBpc24ndCBhbHJlYWR5IGluIHVz ZQ0KCSR0aGVtZXMgPSBzbWRfYXRfcmVhZF9za2lucygpOw0KDQoJaWYgKGluX2FycmF5KCRu ZXdfc2tpbiwgJHRoZW1lcykpIHsNCgkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2V4aXN0 cycsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOw0KCX0NCg0KCS8vIE5vIGVycm9y cywgc28gbWFrZSBhIG5ldyBkaXIgYW5kIGNyZWF0ZSB0aGUgUEhQIGZpbGUNCglpZiAoJG1z Zz09JycpIHsNCgkJJGNvbnRlbnQgPSAnJzsNCgkJJGRlc3RkaXIgPSBUSEVNRS4kbmV3X3Nr aW4uRFM7DQoJCSRyZXMgPSBta2RpcigkZGVzdGRpcik7DQoJCSRiYXNlZCA9ICcnOw0KDQoJ CWlmICgkc2tpbikgew0KCQkJLy8gQmFzZWQgb24gYW4gZXhpc3RpbmcgdGhlbWUuIE5vIG5l ZWQgZm9yIGFueSBmdW5jdGlvbnMgb3RoZXIgdGhhbiBtYW5pZmVzdCgpDQoJCQkkYmFzZWQg PSAidGhlbWU6OmJhc2VkX29uKCciLiRza2luLiInKTsiOw0KCQkJJGV4dGVuZHMgPSAkc2tp bi4nX3RoZW1lJzsNCgkJCSRzcmNzcyA9IFRIRU1FLiRza2luLkRTLid0ZXh0cGF0dGVybi5j c3MnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRzcmNzcykgJiYgZmlsZXNpemUoJHNyY3NzKSA+ IDApIHsNCgkJCQkkaW1wb3J0ID0gam9pbignJywgZmlsZSgkc3Jjc3MpKTsNCgkJCX0gZWxz ZSB7DQoJCQkJJGltcG9ydCA9ICdAaW1wb3J0IHVybCgiLi4vY2xhc3NpYy90ZXh0cGF0dGVy bi5jc3MiKTsnOw0KCQkJfQ0KCQkJJGNvbnRlbnQgPSAneyc7DQoJCX0gZWxzZSB7DQoJCQkv LyBCcmFuZCBzcGFua2luZyBuZXcgdGhlbWUuIENsb25lICdjbGFzc2ljJyBmdW5jdGlvbnMg dGhlbiBhZGQgbmV3IG1hbmlmZXN0KCkNCgkJCSRleHRlbmRzID0gJ3RoZW1lJzsNCgkJCSRp bXBvcnQgPSAnJzsNCgkJCSRzcmMgPSB0eHBhdGguRFMuVEhFTUUuJ2NsYXNzaWMnLkRTLidj bGFzc2ljLnBocCc7DQoJCQkkZ3JhYiA9IGZhbHNlOw0KCQkJJGZwID0gZmlsZSgkc3JjKTsN Cg0KCQkJZm9yZWFjaCgkZnAgYXMgJGxpbmUpIHsNCgkJCQkkbGluZSA9IHJ0cmltKCRsaW5l KTsNCgkJCQlpZiAoc3RycG9zKCRsaW5lLCAnZnVuY3Rpb24gbWFuaWZlc3QoKScpICE9PSBm YWxzZSkgew0KCQkJCQkkZ3JhYiA9IGZhbHNlOyAvLyB1bm5lY2Vzc2FyeT8NCgkJCQkJYnJl YWs7DQoJCQkJfQ0KCQkJCWlmICgkZ3JhYikgew0KCQkJCQkkY29udGVudCAuPSAkbGluZS5u Ow0KCQkJCX0NCgkJCQlpZiAoc3RycG9zKCRsaW5lLCAnY2xhc3MgY2xhc3NpY190aGVtZSBl eHRlbmRzIHRoZW1lJykgIT09IGZhbHNlKSB7DQoJCQkJCSRncmFiID0gdHJ1ZTsNCgkJCQl9 DQoJCQl9DQoJCX0NCg0KCQkvLyBtYW5pZmVzdCBmaWVsZHMNCgkJJG1hbnVzZXIgPSBnZXRf YXV0aG9yX25hbWUoJHR4cF91c2VyKTsNCgkJJG1hbnRpdGxlID0gdWN3b3JkcygkbmV3X3Nr aW4pOw0KDQoJCS8vIFdyaXRlIHRoZSBuZXcgUEhQIGZpbGUNCgkJJGJ1ZiA9IDw8PEVPRg0K PD9waHANCg0KaWYgKCFkZWZpbmVkKCd0eHBpbnRlcmZhY2UnKSkgZGllKCd0eHBpbnRlcmZh Y2UgaXMgdW5kZWZpbmVkLicpOw0KDQp7JGJhc2VkfQ0KDQpjbGFzcyB7JG5ld19za2lufV90 aGVtZSBleHRlbmRzIHskZXh0ZW5kc30NCnskY29udGVudH0NCg0KCWZ1bmN0aW9uIG1hbmlm ZXN0KCkNCgl7DQoJCXJldHVybiBhcnJheSgNCgkJCSd0aXRsZScJIAkJPT4gJ3skbWFudGl0 bGV9JywNCgkJCSdhdXRob3InIAkJPT4gJ3skbWFudXNlcn0nLA0KCQkJJ2F1dGhvcl91cmkn IAk9PiAnJywNCgkJCSd2ZXJzaW9uJyAJCT0+ICcxLjAnLA0KCQkJJ2Rlc2NyaXB0aW9uJyAJ PT4gJycsDQoJCQknaGVscCcgCQkJPT4gJycsDQoJCSk7DQoJfQ0KfQ0KPz4NCkVPRjsNCg0K CQkkZnAgPSBmb3BlbigkZGVzdGRpci4kbmV3X3NraW4uJy5waHAnLCAid2IiKTsNCgkJZndy aXRlKCRmcCwgJGJ1Zik7DQoJCWZjbG9zZSgkZnApOw0KDQoJCS8vIENyZWF0ZSB0aGUgQ1NT IGZpbGUNCgkJJGZwID0gZm9wZW4oJGRlc3RkaXIuJ3RleHRwYXR0ZXJuLmNzcycsICJ3YiIp Ow0KCQlmd3JpdGUoJGZwLCAkaW1wb3J0KTsNCgkJZmNsb3NlKCRmcCk7DQoNCgkJaWYgKCRz a2luKSB7DQoJCQkkbXNnID0gc21kX2F0X2dUeHQoJ3NraW5fY2xvbmVkJywgYXJyYXkoJ3tu YW1lfScgPT4gJG5ld19za2luKSk7Ow0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF9hdF9n VHh0KCdza2luX2NyZWF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTs7DQoJ CX0NCg0KLy8JJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX25vdF9jcmVhdGVkJywgYXJyYXko J3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0KDQoJfQ0KDQoJc21kX2F0X2xpc3QoJG1zZyk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4 cG9ydF9vcHRpb25zKCkgew0KCSRzbWRfY3J1c2hlcnMgPSBhcnJheSgndGFyJyA9PiBzbWRf YXRfZ1R4dCgnY190YXInKSk7DQoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycp KSB7DQoJCSRzbWRfY3J1c2hlcnNbJ2d6aXAnXSA9IHNtZF9hdF9nVHh0KCdjX2d6aXAnKTsN CgkJJHNtZF9jcnVzaGVyc1snemlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgl9DQoJ aWYgKGZ1bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpKSB7DQoJCSRzbWRfY3J1c2hlcnNb J2J6aXAyJ10gPSBzbWRfYXRfZ1R4dCgnY19iemlwMicpOw0KCX0NCglyZXR1cm4gJHNtZF9j cnVzaGVyczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfYXRfZXhwb3J0KCkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnM7DQoNCgll eHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsJ2NydXNoJykpKSk7DQoJJG1lc3Nh Z2U9Jyc7DQoJY2hkaXIoVEhFTUUpOw0KCSRvdXQgPSAkc2tpbjsNCg0KCS8vIENoZWNrIHRo ZSBwYXNzZWQgY29tcHJlc3Npb24gZm9ybWF0IGlzIHZhbGlkOyB1c2UgZGVmYXVsdCBpZiBu b3QNCgkkY3J1c2hlcnMgPSBzbWRfYXRfZXhwb3J0X29wdGlvbnMoKTsNCglpZiAoJGNydXNo PT0nJyB8fCAkY3J1c2g9PSd1bmRlZmluZWQnIHx8ICFhcnJheV9rZXlfZXhpc3RzKCRjcnVz aCwgJGNydXNoZXJzKSkgew0KCQkkY3J1c2ggPSBnZXRfcHJlZignc21kX2F0X2NydXNoJywg JHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X2NydXNoJ10pOw0KCX0NCg0KCXN3aXRjaCgkY3J1 c2gpIHsNCgkJY2FzZSAnemlwJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3ppcF9maWxlKCRv dXQuJy56aXAnKTsNCgkJCWJyZWFrOw0KCQljYXNlICdiemlwMic6DQoJCQkkemlwID0gbmV3 IHNtZF9hdF9iemlwX2ZpbGUoJG91dC4nLnRiejInKTsNCgkJCWJyZWFrOw0KCQljYXNlICd0 YXInOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoJG91dC4nLnRhcicpOw0KCQkJ YnJlYWs7DQoJCWNhc2UgJ2d6aXAnOg0KCQlkZWZhdWx0Og0KCQkJJHppcCA9IG5ldyBzbWRf YXRfZ3ppcF9maWxlKCRvdXQuJy50Z3onKTsNCiAJCQlicmVhazsNCgl9DQoNCgkkemlwLT5z ZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gdHhwYXRoLkRTLlRIRU1FLCAnb3Zlcndy aXRlJyA9PiAxLCAnaW5tZW1vcnknID0+IDEpKTsNCgkkemlwLT5hZGRfZmlsZXMoJHNraW4u RFMuJyouKicpOw0KCSR6aXAtPmV4Y2x1ZGVfZmlsZXMoJHNraW4uRFMuJyouc3ZuKicpOw0K CSR6aXAtPmNyZWF0ZV9hcmNoaXZlKCk7DQoJJHppcCAtPmRvd25sb2FkX2ZpbGUoKTsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfaW1wb3J0 KCkgew0KCWdsb2JhbCAkcHJlZnM7DQoNCgkkbmFtZSA9ICRfRklMRVNbJ3RoZWZpbGUnXVsn bmFtZSddOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSdd Wyd0bXBfbmFtZSddLCB0eHBhdGguRFMuVEhFTUUuYmFzZW5hbWUoJF9GSUxFU1sndGhlZmls ZSddWyd0bXBfbmFtZSddKSk7DQoJJGJhc2VkaXIgPSB0eHBhdGguRFMuVEhFTUU7DQoJJG1l c3NhZ2U9Jyc7DQoJJGluZm8gPSBleHBsb2RlICgnLicsJG5hbWUpOw0KCSRleHQgPSAkaW5m b1sxXTsNCg0KCWlmICgkbmFtZSAmJiAkZmlsZSkgew0KCQlpZiAoJGV4dCA9PSAiemlwIiAm JiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHsNCgkJCSR6aXAgPSB6aXBfb3Blbigk ZmlsZSk7DQoJCQlpZiAoJHppcCkgew0KCQkJCSRmaWxlY3RyID0gMDsNCgkJCQl3aGlsZSAo JHppcF9lbnRyeSA9IHppcF9yZWFkKCR6aXApKSB7DQoJCQkJCSRmbiA9IHppcF9lbnRyeV9u YW1lKCR6aXBfZW50cnkpOw0KCQkJCQkkZmlsZXBhdGggPSAkYmFzZWRpci4kZm47DQoJCQkJ CWlmIChzdHJwb3MoJGZpbGVwYXRoLCAnLi4nKSA9PT0gZmFsc2UpIHsNCgkJCQkJCSRwYXRo X3BhcnRzID0gcGF0aGluZm8oJGZpbGVwYXRoKTsNCgkJCQkJCWlmICghZmlsZV9leGlzdHMo JGZpbGVwYXRoKSkgew0KCQkJCQkJCSRyZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNz ZXQoJHBhdGhfcGFydHNbJ2V4dGVuc2lvbiddKSkgPyBkaXJuYW1lKCRmaWxlcGF0aCkgOiAk ZmlsZXBhdGgpKTsNCgkJCQkJCQlpZiAoJHJldCA9PT0gZmFsc2UpIHsNCgkJCQkJCQkJJG1l c3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X2ZhaWxlZCcsIGFycmF5KCd7bmFtZX0nID0+ ICRuYW1lKSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG1l c3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW52YWxpZF9maWxlJywgYXJyYXkoJ3tuYW1lfScgPT4g JGZuKSk7DQoJCQkJCX0NCg0KCQkJCQlpZiAoJG1lc3NhZ2U9PScnKSB7DQoJCQkJCQlpZiAo IWlzX2RpcigkZm4pKSB7DQoJCQkJCQkJJGZwID0gZm9wZW4oJGJhc2VkaXIuJGZuLCAid2Ii KTsNCgkJCQkJCQlpZiAoemlwX2VudHJ5X29wZW4oJHppcCwgJHppcF9lbnRyeSwgInIiKSkg ew0KCQkJCQkJCQkkYnVmID0gemlwX2VudHJ5X3JlYWQoJHppcF9lbnRyeSwgemlwX2VudHJ5 X2ZpbGVzaXplKCR6aXBfZW50cnkpKTsNCgkJCQkJCQkJemlwX2VudHJ5X2Nsb3NlKCR6aXBf ZW50cnkpOw0KCQkJCQkJCX0NCgkJCQkJCQlmd3JpdGUoJGZwLCAkYnVmKTsNCgkJCQkJCQlm Y2xvc2UoJGZwKTsNCi8vCQkJCQkJCWVjaG8gIlRoZSBmaWxlICIuJGZuLiIgd2FzIGV4dHJh Y3RlZCBzdWNjZXNzZnVsbHlcbjxicj4iOw0KCQkJCQkJCSRmaWxlY3RyKys7DQoJCQkJCQl9 DQoJICAgICAgICAgICAgfQ0KCQkJCX0NCgkJCQl6aXBfY2xvc2UoJHppcCk7DQoJCQkJaWYg KCRtZXNzYWdlID09ICcnKSB7DQoJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9y dF9zdWNjZXNzJywgYXJyYXkoJ3tudW19JyA9PiAkZmlsZWN0cikpOw0KCQkJCX0NCgkJCX0N CgkJfSBlbHNlIGlmICgkZXh0ID09ICJ0Z3oiKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF9n emlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5 KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29r Jyk7DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAidGJ6MiIpIHsNCgkJCSR6aXAgPSBuZXcgc21k X2F0X2J6aXBfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMo YXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkk emlwLT5leHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBv cnRfb2snKTsNCgkJfSBlbHNlIGlmICgkZXh0ID09ICJ0YXIiKSB7DQoJCQkkemlwID0gbmV3 IHNtZF9hdF90YXJfZmlsZShiYXNlbmFtZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlv bnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRiYXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJ CQkkemlwLT5leHRyYWN0X2ZpbGVzKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdp bXBvcnRfb2snKTsNCgkJfSBlbHNlIHsNCgkJCSRtZXNzYWdlID0gYXJyYXkoc21kX2F0X2dU eHQoJ3Vuc3VwcG9ydGVkX2NvbXByZXNzaW9udHlwZScsIGFycmF5KCd7Y3J1c2h9JyA9PiAk ZXh0KSksIEVfV0FSTklORyk7DQoJCX0NCg0KCQkvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBm aWxlDQoJCXVubGluaygkZmlsZSk7DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgnZW1wdHlfaW5mbycpOw0KCX0NCg0KCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfdXBsb2Fk X2ltYWdlKCkgew0KCWdsb2JhbCAkZmlsZV9tYXhfdXBsb2FkX3NpemU7DQoNCglleHRyYWN0 KGRvU2xhc2goZ3BzYShhcnJheSgnaWQnKSkpKTsNCgkkX1BPU1RbJ3NraW4nXSA9ICRza2lu ID0gJGlkOw0KDQoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmls ZSA9IGdldF91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7 DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAoJGZpbGUgPT09IGZhbHNlKSB7DQoJCSRtZXNzYWdl ID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRf ZXJyb3Jtc2coJF9GSUxFU1sndGhlZmlsZSddWydlcnJvciddKTsNCgkJc21kX2F0X2VkaXQo JG1lc3NhZ2UpOw0KCX0NCg0KCSRzaXplID0gZmlsZXNpemUoJGZpbGUpOw0KCWlmICgkZmls ZV9tYXhfdXBsb2FkX3NpemUgPCAkc2l6ZSkgew0KCQl1bmxpbmsoJGZpbGUpOw0KCQkkbWVz c2FnZSA9IGdUeHQoJ2ZpbGVfdXBsb2FkX2ZhaWxlZCcpIC4iICRuYW1lIC0gIi51cGxvYWRf Z2V0X2Vycm9ybXNnKFVQTE9BRF9FUlJfRk9STV9TSVpFKTsNCgkJc21kX2F0X2VkaXQoJG1l c3NhZ2UpOw0KCX0NCg0KCSRza2luZm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0K CSRuZXdfc2tpbiA9ICRza2luZm9bJ25hbWUnXTsNCgkkbmV3cGF0aCA9ICRza2luZm9bJ3Bh dGgnXTsNCg0KCWlmICgkbmV3X3NraW4gJiYgJGZpbGUpIHsNCgkJaWYoc2hpZnRfdXBsb2Fk ZWRfZmlsZSgkZmlsZSwgJG5ld3BhdGguJG5hbWUpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9h dF9nVHh0KCd1cGxvYWRfc3VjY2VzcycpOw0KCQl9IGVsc2Ugew0KCQkJdW5saW5rKCRmaWxl KTsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9mYWlsZWQnKTsNCgkJfQ0K CX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9 DQoNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0ZV9pbWFnZSgpIHsNCglnbG9iYWwgJHNt ZF9jb3JlX3RoZW1lczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJykp KSk7DQoJJGZpbGVfbGlzdCA9IGdwcygnc21kX2F0X2ltYWdlcycpOw0KCSRtZXNzYWdlPScn Ow0KDQoJaWYgKGVtcHR5KCRmaWxlX2xpc3QpKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dU eHQoJ2VtcHR5X2luZm8nKTsNCgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRz bWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3Ro ZW1lX2ZpbGUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQl9IGVsc2Ugew0KCQkJ Zm9yZWFjaCAoJGZpbGVfbGlzdCBhcyAkaW1hZ2UpIHsNCgkJCQkkcGF0aCA9IHR4cGF0aC5E Uy4kaW1hZ2U7DQoJCQkJdW5saW5rKCRwYXRoKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXNtZF9h dF9lZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfYXRfZGVsZXRlKCkgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzLCAk dGhlbWUsICRzbWRfYXRfcHJpdnMsICRzbWRfYXRfZXZlbnQ7DQoNCglleHRyYWN0KGRvU2xh c2goZ3BzYShhcnJheSgnc2tpbicsICdmaWxlJykpKSk7DQoJJG1lc3NhZ2U9Jyc7DQoNCglp ZiAoJGZpbGUpIHsNCgkJLy8gRWRpdGluZyBhIHNraW4sIHRodXMgZGVsZXRpbmcgYSBzaW5n bGUgZmlsZQ0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7DQoJ CQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lX2ZpbGUnLCBhcnJheSgne3Nr aW59JyA9PiAkc2tpbikpOw0KCQkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCQl9IGVsc2Ug ew0KCQkJJGRlbCA9IHVubGluayhUSEVNRS4kc2tpbi5EUy4kZmlsZSk7DQoJCQlpZiAoJGRl bCkgew0KCQkJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV9kZWxldGVkJywgYXJyYXkoJ3tuYW1l fScgPT4gJGZpbGUpKTsNCgkJCQkkX1BPU1RbJ2ZpbGUnXSA9ICcnOyAvLyBDbGVhciB0aGUg dmFyaWFibGUgc28gdGhlIGZpbGVuYW1lIGRvZXNuJ3QgYXBwZWFyIG9uIHRoZSBlZGl0IHBh Z2UNCgkJCX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZmlsZV9ub3Rf ZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJCQl9DQoJCX0NCgkJc21k X2F0X2VkaXQoJG1lc3NhZ2UpOw0KCX0gZWxzZSB7DQoJCWlmIChpbl9hcnJheSgkc2tpbiwg JHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2NvcmVf dGhlbWUnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpOw0KCQkJc21kX2F0X2xpc3QoJG1l c3NhZ2UpOw0KCQl9IGVsc2Ugew0KCQkJLy8gVmlld2luZyB0aGUgc2tpbiBsaXN0LCB0aHVz IGRlbGV0aW5nIHRoZSB3aG9sZSBza2luDQoJCQkkc2tpbmRpciA9IFRIRU1FLiRza2luOw0K CQkJaWYgKCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRza2luZGlyKSkgew0KCQkJCSRtZXNzYWdl ID0gc21kX2F0X2dUeHQoJ2RlbGV0ZV9mYWlsZWQnKTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1l c3NhZ2UgPSBzbWRfYXRfZ1R4dCgnc2tpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4g JHNraW4pKTsNCgkJCX0NCg0KCQkJLy8gSGFuZGxlIHNpdHVhdGlvbnMgaWYgY3VycmVudCBz a2luIGhhcyBiZWVuIGRlbGV0ZWQNCgkJCWlmICghZmlsZV9leGlzdHModHhwYXRoLkRTLlRI RU1FLiRza2luKSkgew0KCQkJCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCg0K CQkJCS8vIFJlc2V0IHRoZSBnbG9iYWwgc2tpbiBpbiBjYXNlIGl0J3MgYmVlbiBkZWxldGVk DQoJCQkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2lu J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAnJzsNCgkJCQkkZ2Js X3NraW4gPSAoJGdibF9za2luICE9ICcnICYmIGZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVN RS4kZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFzc2ljJzsNCgkJCQlzZXRfcHJlZign c21kX2F0X2dsb2JhbF9za2luJywgJGdibF9za2luLCAkc21kX2F0X2V2ZW50LCBQUkVGX0hJ RERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQlzZXRfcHJlZigndGhlbWVfbmFtZScsICRnYmxf c2tpbik7DQoNCgkJCQkkc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicpOw0KCQkJCWlmICgh ZmlsZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRza2luKSkgew0KCQkJCQkkc2tpbiA9ICRn Ymxfc2tpbjsNCgkJCQl9DQoJCQkJc2V0X3ByZWYoJ3NtZF9za2luJywgJHNraW4sICdzbWRf YXQnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQkJ fQ0KCQkJJF9HRVRbJ3NraW4nXSA9ICRza2luOw0KCQkJJF9HRVRbJ25leHRzdGVwJ10gPSAn c21kX2F0X2xpc3QnOw0KCQkJc21kX2F0X3N3aXRjaCgkbWVzc2FnZSk7DQoJCX0NCgl9DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3NhdmUo KSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCduZXdfc2tpbicsJ2Zp bGUnLCdzbWRfYXRfZWRpdHMnKSkpKTsNCg0KCSRlZGl0YWJsZSA9IGFycmF5KCJzc2MiLCAi Y3NzIiwgImpzIiwgInBocCIpOw0KCSRtZXNzYWdlID0gJGV4dHJhTXNnID0gJyc7DQoJJGZp bGUgPSB0cmltKCRmaWxlKTsNCgkkbmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7DQoJJG1z Z2xldiA9IDA7DQoNCgkvLyBOZXcgZmlsZQ0KCWlmICghJGZpbGUgJiYgJG5ld19za2luKSB7 DQoJCSRmaWxlID0gJG5ld19za2luOw0KCQkkZXh0ID0gYXJyYXlfcG9wKGV4cGxvZGUgKCcu JywkZmlsZSkpOw0KCQlpZiAoc3RydG9sb3dlcigkZmlsZSkgIT0gJ3JlYWRtZScgJiYgKCRl eHQgPT0gJycgfHwgIWluX2FycmF5KCRleHQsICRlZGl0YWJsZSkpKSB7DQoJCQkkbWVzc2Fn ZSA9IHNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9maWxldHlwZScpLnNtZF9hdF9nVHh0KCd1 bnN1cHBvcnRlZF9mdWRnZScpOw0KCQkJJG1zZ2xldiA9IEVfV0FSTklORzsNCgkJCSRfUE9T VFsnZmlsZSddID0gJGZpbGU7DQoJCX0NCgl9DQoNCglpZiAoJG1lc3NhZ2U9PScnKSB7DQoJ CSRza2luZGlyID0gVEhFTUUuJHNraW4uRFM7DQoNCgkJJGZuYW1lID0gc2FuaXRpemVGb3JG aWxlKCRmaWxlKTsNCgkJJG5ld19za2luID0gcmF3dXJsZW5jb2RlKCRuZXdfc2tpbik7DQoJ CSRfUE9TVFsnbmV3X3NraW4nXSA9ICRuZXdfc2tpbjsNCg0KCQkkc21kX2F0X2VkaXRzID0g ZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJw0KJywkc21kX2F0X2VkaXRzKSk7IC8vIG5l d2xpbmUgd29ya2Fyb3VuZA0KDQoJCWlmICgkZm5hbWUpIHsNCgkJCSRmaWxlcGF0aCA9ICRz a2luZGlyLkRTOw0KCQkJaWYgKCFmaWxlX2V4aXN0cygkZmlsZXBhdGguJGZuYW1lKSkgew0K CQkJCSRyZXQgPSB0b3VjaCgkZmlsZXBhdGguJGZuYW1lKTsNCgkJCQlpZiAoJHJldCA9PT0g ZmFsc2UpIHsNCgkJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnbWtkaXJfZmFpbGVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJGZuYW1lKSk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBBc3N1 bWluZyBubyBlcnJvcnMgc28gZmFyLi4uDQoJCQlpZiAoJG1lc3NhZ2UgPT0gJycpIHsNCgkJ CQkkZmggPSBmb3BlbigkZmlsZXBhdGguJGZuYW1lLCAnd2InKTsNCgkJCQlmd3JpdGUoJGZo LCAkc21kX2F0X2VkaXRzKTsNCgkJCQlmY2xvc2UoJGZoKTsNCg0KCQkJCWlmICgkZm5hbWUg IT0gJG5ld19za2luKSB7DQoJCQkJCSRyZXMgPSByZW5hbWUoJGZpbGVwYXRoLiRmbmFtZSwg JGZpbGVwYXRoLiRuZXdfc2tpbik7DQoJCQkJCSRleHRyYU1zZyA9ICgkcmVzKSA/IHNtZF9h dF9nVHh0KCdyZW5hbWVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSkgOiBzbWRf YXRfZ1R4dCgncmVuYW1lX2ZhaWxlZCcpOw0KCQkJCX0NCg0KCQkJCS8vIFByb2Nlc3MgYW55 IGNzcyByZXBsYWNlbWVudHMNCgkJCQkkZmlsZWJpdHMgPSBleHBsb2RlICgnLicsKCgkZm5h bWU9PSRuZXdfc2tpbik/ICRmbmFtZSA6ICRuZXdfc2tpbikpOw0KCQkJCSRjc3NmaWxlID0g JGZpbGViaXRzWzBdOw0KCQkJCSRleHQgPSBhcnJheV9wb3AoJGZpbGViaXRzKTsNCgkJCQlp ZiAoJGV4dCA9PSAnc3NjJykgew0KCQkJCQkkcmVwbGFjZW1lbnRzID0gYXJyYXkoKTsNCgkJ CQkJJG51bV9yZXAxID0gcHJlZ19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05X10rKTpccyoo LiopOy8nLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hlczEpOw0KCQkJCQkkbnVtX3JlcDIgPSBw cmVnX21hdGNoX2FsbCgnLyhcQFtBLVphLXowLTlfXSspOlxzKlx7KC4qPylcfS9zJywgJHNt ZF9hdF9lZGl0cywgJG1hdGNoZXMyKTsNCg0KCQkJCQkvLyBTaW1wbGUgcmVwbGFjZW1lbnRz DQoJCQkJCWZvcmVhY2goJG1hdGNoZXMxIGFzICRpZHggPT4gJHJlcGFycikgew0KCQkJCQkJ aWYgKCRpZHggPT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgdmFyIGRlZmluaXRpb25z DQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJCQkJCQkJCSRzbWRfYXRf ZWRpdHMgPSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2VkaXRzKTsNCgkJCQkJCQl9 DQoJCQkJCQl9DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJCQkJZm9yZWFjaCAoJHJl cGFyciBhcyAkamR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxhY2VtZW50c1skcmVwXSA9 ICRtYXRjaGVzMVsyXVskamR4XTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJ CQkvLyBNdWx0aS1saW5lIHJlcGxhY2VtZW50cw0KCQkJCQlmb3JlYWNoKCRtYXRjaGVzMiBh cyAkaWR4ID0+ICRyZXBhcnIpIHsNCgkJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJCQkv LyBSZW1vdmUgdGhlIHZhciBkZWZpbml0aW9ucw0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIg YXMgJHJlcCkgew0KCQkJCQkJCQkkc21kX2F0X2VkaXRzID0gc3RyX3JlcGxhY2UoJHJlcCwg JycsJHNtZF9hdF9lZGl0cyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKCRpZHgg PT0gMSkgew0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7DQoJ CQkJCQkJCSRyZXBsYWNlbWVudHNbJHJlcC4nOyddID0gdHJpbSgkbWF0Y2hlczJbMl1bJGpk eF0pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIEdlbmVyYXRlIGFu ZCB3cml0ZSB0aGUgbmV3IGNzcyBmaWxlDQoJCQkJCSRzbWRfYXRfZWRpdHMgPSB0cmltKHN0 cnRyKCRzbWRfYXRfZWRpdHMsICRyZXBsYWNlbWVudHMpKTsNCgkJCQkJJGZoID0gZm9wZW4o JGZpbGVwYXRoLiRjc3NmaWxlLicuY3NzJywgJ3diJyk7DQoJCQkJCWZ3cml0ZSgkZmgsICRz bWRfYXRfZWRpdHMpOw0KCQkJCQlmY2xvc2UoJGZoKTsNCgkJCQkJaWYgKCRmbmFtZSAhPSAk bmV3X3NraW4pIHsNCgkJCQkJCSRvbGRmbmFtZSA9IGV4cGxvZGUgKCcuJywgJGZuYW1lKTsN CgkJCQkJCSRvbGRmbmFtZSA9ICRvbGRmbmFtZVswXS4nLmNzcyc7DQoJCQkJCQkkcmVzID0g QHVubGluaygkZmlsZXBhdGguJG9sZGZuYW1lKTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCSRt ZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ZpbGVfc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAk Zm5hbWUpKS5ici4kZXh0cmFNc2c7DQoJCQl9DQoJCX0NCgl9DQoJc21kX2F0X2VkaXQoYXJy YXkoJG1lc3NhZ2UsICRtc2dsZXYpKTsNCn0NCg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIFBSRUZTDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9hdF9nZXRfcHJlZnMoKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoJJHByZWZr ZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJHNtZF9hdF9wcmVmc1sw XSkpKTsNCgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsJywndHhwX3ByZWZzJywnbmFtZSBp biAoJy4kcHJlZmtleXMuJyknKTsNCgkkYXRfcHJlZnMgPSBhcnJheSgpOw0KCWZvcmVhY2gg KCRycyBhcyAkcHJlZmFycikgew0KCQkkYXRfcHJlZnNbJHByZWZhcnJbJ25hbWUnXV0gPSAk cHJlZmFyclsndmFsJ107DQoJfQ0KCXJldHVybiAkYXRfcHJlZnM7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X29wdGlvbnMoJGV2ZW50LCAk c3RlcCwgJG1lc3NhZ2U9JycpIHsNCglzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zZXR1cCgkbWVz c2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnMsICRzbWRfYXRfZXZl bnQsICR0aGVtZSwgJHNtZF9jb3JlX3RoZW1lczsNCg0KCSRudW1SZXFQcmVmcyA9IGNvdW50 KCRzbWRfYXRfcHJlZnNbMF0pOw0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsN CgkkbnVtUm93cyA9IGNvdW50KCRhdF9wcmVmcyk7DQoNCglwYWdldG9wKGdUeHQoJ3ByZWZz JyksJG1lc3NhZ2UpOw0KDQoJLy8gWXVrLCB3aHkncyB0aGlzIG5vdCBhdmFpbGFibGUgZ2xv YmFsbHk/IQ0KCSRsZXZlbHMgPSBhcnJheSgNCi8vCQkxID0+IGdUeHQoJ3B1Ymxpc2hlcicp LA0KCQkyID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRvcicpLA0KCQkzID0+IGdUeHQoJ2NvcHlf ZWRpdG9yJyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZfd3JpdGVyJyksDQoJCTUgPT4gZ1R4dCgn ZnJlZWxhbmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rlc2lnbmVyJyksDQoJKTsNCgkkbnVtTGV2 cyA9IGNvdW50KCRsZXZlbHMpOw0KDQoJLy8gU3BsaXQgdGhlIHVzZXIgc2tpbiBsaXN0DQoJ JHVza2lucyA9IGFycmF5KCk7DQoJaWYgKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJf bGlzdCddKSkgew0KCQkkdXNraW5zID0gZXhwbG9kZSgnLCcsICRhdF9wcmVmc1snc21kX2F0 X3VzZXJfbGlzdCddKTsNCgl9DQoNCgkkbGF5b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoJJGNs ckJ0biA9ICcgWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4iPicuc21k X2F0X2dUeHQoJ2NsZWFyJykuJzwvc3Bhbj5dJzsNCgkkYnRuU2V0ID0gZklucHV0KCdzdWJt aXQnLCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldCcpLCAncHVibGlzaCcpOw0KCSRidG5T YXZlID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlz aCcpOw0KCSRidG5JbnN0YWxsID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZl bnQ9Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX2luc3RhbGwiIHN0 eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0 KCdpbnN0YWxsJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOw0KCSRidG5SZW1vdmUgPSAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7 c3RlcD1zbWRfYXRfcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklu cHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVyYm94Jyku JzwvZm9ybT4nOw0KCSRidG5MaXN0ID0gJyA8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2 ZW50PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9nVHh0KCgoJGxheW91dD09IjAiKSA/ ICdza2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9hPjxiciAvPic7DQoJJGJ0blN0eWxl ID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcmFkQnRucyA9IGFycmF5 KA0KCQlzbWRfYXRfZ1R4dCgncGVyX3NpdGUnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl9ncm91 cCcpLA0KCQlzbWRfYXRfZ1R4dCgncGVyX3VzZXInKSwNCgkpOw0KDQoJZWNobyBzdGFydFRh YmxlKCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykgew0KCQkvLyBQ cmVmcyBhbGwgaW5zdGFsbGVkDQoJCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9za2lucygp Ow0KDQoJCS8vIHNlbGVjdElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJl IHRoZSBzYW1lIGluIHRoaXMgY2FzZQ0KCQkkc2tpbnNlbCA9IGFycmF5KCk7DQoJCWZvcmVh Y2goJHNraW5fbGlzdCBhcyAka2V5MSA9PiAkdmFsdWUxKSB7DQoJCQlpZiAoc21kX2F0X2V4 aXN0cygkdmFsdWUxKSkgew0KCQkJCSRza2luc2VsWyR2YWx1ZTFdID0gJHNraW5fbGlzdFsk a2V5MV07DQoJCQl9DQoJCX0NCgkJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X2dsb2JhbF9za2luJ10pICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10g IT0gJycpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICR0aGVtZS0+bmFt ZTsNCg0KCQllY2hvIHRyKHRkYShzdHJvbmcoc21kX2F0X2dUeHQoJ3ByZWZzX3RpdGxlJykp LCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92ZS4kYnRuTGlzdCwgJGJ0blN0eWxl KSApOw0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNt ZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc191cGRhdGUiIG9uc3VibWl0PSJy ZXR1cm4gc21kX3ByZXN1YigpOyI+JzsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQoJ2Nh c2Vfc29ydCcpKS50ZGEoeWVzbm9SYWRpbygnc21kX2F0X2Nhc2Vfc29ydCcsICRhdF9wcmVm c1snc21kX2F0X2Nhc2Vfc29ydCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2Nhc2Vf c29ydCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjcnVzaF90eXBlJykpLnRk YShyYWRpb1NldChzbWRfYXRfZXhwb3J0X29wdGlvbnMoKSwgJ3NtZF9hdF9jcnVzaCcsICRh dF9wcmVmc1snc21kX2F0X2NydXNoJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfY3J1 c2giJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnbGF5b3V0JykpLnRkYShyYWRp b1NldChhcnJheShzbWRfYXRfZ1R4dCgnbGF5b3V0X2xpc3QnKSwgc21kX2F0X2dUeHQoJ2xh eW91dF9ncmlkJykpLCAnc21kX2F0X2xheW91dCcsICRhdF9wcmVmc1snc21kX2F0X2xheW91 dCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2xheW91dCInKSk7DQoJCWVjaG8gdHIo dGRhKHNtZF9hdF9nVHh0KCd0aHVtYnNpemUnKSkudGRhKGZJbnB1dCgndGV4dCcsICdzbWRf YXRfdHcnLCAkYXRfcHJlZnNbJ3NtZF9hdF90dyddLCcnLCcnLCcnLDQpLnNtZF9hdF9nVHh0 KCd0aW1lcycpLmZJbnB1dCgndGV4dCcsICdzbWRfYXRfdGgnLCAkYXRfcHJlZnNbJ3NtZF9h dF90aCddLCcnLCcnLCcnLDQpKSk7DQoJCWVjaG8gdHIoDQoJCQl0ZChzbWRfYXRfZ1R4dCgn Z2xvYmFsX3NraW4nKSkNCgkJCS50ZChzZWxlY3RJbnB1dCgnc21kX2F0X2dsb2JhbF9za2lu JywgJHNraW5zZWwsICRnYmxfc2tpbiwgMCwgMCkpDQoJCSk7DQoJCWVjaG8gdHIodGRhKHNt ZF9hdF9nVHh0KCdza2luX3N5c3RlbScpKS50ZGEocmFkaW9TZXQoJHJhZEJ0bnMsICdzbWRf YXRfc3lzdGVtJywgJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pLCAnIHdpZHRoPSIyNDAi IGlkPSJzbWRfYXRfcmFkaW8iJykpOw0KDQoJCS8vIE9wdGlvbiAxDQoJCSRwcml2X2xpc3Qg PSAnPHNlbGVjdCBpZD0ic21kX2F0X3ByaXZzIiBuYW1lPSJzbWRfYXRfcHJpdnNbXSIgY2xh c3M9Imxpc3QiIHNpemU9IicuJG51bUxldnMuJyIgbXVsdGlwbGU9Im11bHRpcGxlIj4nOw0K CQlmb3JlYWNoICgkbGV2ZWxzIGFzICRsZXZpZCA9PiAkbGV2bmFtZSkgew0KCQkJJHByaXZf bGlzdCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kbGV2aWQuJyI+Jy4kbGV2bmFtZS4nPC9vcHRp b24+JzsNCgkJfQ0KCQkkcHJpdl9saXN0IC49ICc8L3NlbGVjdD4nOw0KDQoJCS8vIE5vdGUg dGhlIGhpZGRlbiBza2luIGdyb3VwIGJveDsgalF1ZXJ5IGtlZXBzIHRyYWNrIG9mIGFueSBs aXN0IGNoYW5nZXMgYW5kIGtlZXBzIGl0IHVwZGF0ZWQNCgkJJHNlbGEgPSBzbWRfYXRfZ1R4 dCgnc2tpbl9ncm91cHMnKTsNCgkJJHNlbGIgPSBoSW5wdXQoJ3NtZF9hdF9ncm91cF9saXN0 JywgJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKTsNCgkJJHNlbGIgLj0gJzxzZWxl Y3QgaWQ9InNtZF9hdF9ncnBzIiBuYW1lPSJzbWRfYXRfZ3JwcyIgY2xhc3M9Imxpc3QiIHNp emU9IicuJG51bUxldnMuJyI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkYXNraW4p IHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2VsYiAuPSAnPG9w dGlvbiB2YWx1ZT0iJy4kYXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7DQoJCQl9DQoJ CX0NCgkJJHNlbGIgLj0gJzwvc2VsZWN0Pic7DQoJCWVjaG8gdHIodGRhKCRzZWxhLCAnIGNs YXNzPSJzbWRfYXRfc2VsMSBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLiRwcml2X2xpc3Qs ICcgd2lkdGg9IjQwMCIgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykpOw0KDQoJ CS8vIE9wdGlvbiAyDQoJCSRzZWxhID0gc21kX2F0X2dUeHQoJ2FsbG93ZWRfc2tpbnMnKTsN CgkJJHNlbGIgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3VzZXJfbGlzdCIgbmFtZT0ic21kX2F0 X3VzZXJfbGlzdFtdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iOCIgbXVsdGlwbGU9Im11bHRpcGxl Ij4nOw0KCQlmb3JlYWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYgKHNtZF9h dF9leGlzdHMoJGFza2luKSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVlPSInLiRh c2tpbi4nIicuKChpbl9hcnJheSgkYXNraW4sICR1c2tpbnMpKSA/ICcgc2VsZWN0ZWQ9InNl bGVjdGVkIicgOiAnJykuJz4nLiRhc2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0KCQkk c2VsYiAuPSAnPC9zZWxlY3Q+Jy4kY2xyQnRuOw0KCQllY2hvIHRyKHRkYSgkc2VsYSwgJyBj bGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSAuIHRkYSgkc2VsYiwgJyB3aWR0aD0i MjQwIiBjbGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSk7DQoJCWVjaG8gdHIodGRh KCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgkJZWNobyAnPC9mb3JtPic7DQoJfSBlbHNlIGlm ICgkbnVtUm93cyA+IDAgJiYgJG51bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsNCgkJZWNobyB0 cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJCQku c21kX2F0X2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCQkuc21kX2F0 X2dUeHQoJ3ByZWZzX3NvbWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hv IHRyKHRkYSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5T dHlsZSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdwcmVmc19u b3RfaW5zdGFsbGVkJyksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5J bnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJZWNobyA8 PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoNCi8vIENvbmNhdGVu YXRlIGNoZWNrYm94IG9wdGlvbnMgZm9yIHN0b3JhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9wcmVm c3dhcChzZWxWYWx1ZSkgew0KCWZvciAoaWR4PTA7IGlkeCA8IDM7IGlkeCsrKSB7DQoJCWlm IChpZHg9PXNlbFZhbHVlKSB7DQoJCQlqUXVlcnkoIi5zbWRfYXRfc2VsIitpZHgpLnNob3co KTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lkeCkuaGlkZSgpOw0K CQl9DQoJfQ0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiaW5wdXRbbmFtZT0n c21kX2F0X3N5c3RlbSddIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzbWRfYXRfcHJlZnN3 YXAodGhpcy52YWx1ZSk7DQoJfSk7DQoNCglqUXVlcnkoJyNzbWRfY2xyJykuY2xpY2soZnVu Y3Rpb24oKSB7DQoJCWpRdWVyeSgnI3NtZF9hdF91c2VyX2xpc3Qgb3B0aW9uJykuYXR0cigi c2VsZWN0ZWQiLCAiIik7DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfZ3JwcyIpLmNoYW5n ZShmdW5jdGlvbigpIHsNCgkJc2Vsc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCg0KCQkv LyBDbGVhciB0aGUgb2xkIHByaXZzIGxpc3QgYW5kIGdyYWIgdGhlIGN1cnJlbnQgbGlzdCBm cm9tIHRoZSBoaWRkZW4gZmllbGQNCgkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlvbiIp LmF0dHIoInNlbGVjdGVkIixmYWxzZSk7DQoJCXZhciBncnBsaXN0ID0galF1ZXJ5KCJpbnB1 dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBncnBzID0gZ3Jw bGlzdC5zcGxpdCgnLCcpOw0KCQl2YXIgY250ID0gZ3Jwcy5sZW5ndGg7DQoJCWZvciAodmFy IGlkeCA9IDA7IGlkeCA8IGNudDsgaWR4KyspIHsNCgkJCXByaXZzID0gZ3Jwc1tpZHhdLnNw bGl0KCc6Jyk7DQoJCQlza2luaWQgPSBwcml2cy5zaGlmdCgpOw0KCQkJaWYgKHNraW5pZCA9 PSBzZWxza2luKSB7DQoJCQkJbnVtUHJpdnMgPSBwcml2cy5sZW5ndGg7DQoJCQkJZm9yIChq ZHggPSAwOyBqZHggPCBudW1Qcml2czsgamR4KyspIHsNCgkJCQkJalF1ZXJ5KCIjc21kX2F0 X3ByaXZzIG9wdGlvblt2YWx1ZT0nIitwcml2c1tqZHhdKyInXSIpLmF0dHIoInNlbGVjdGVk IiwgdHJ1ZSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRf cHJpdnMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBqUXVlcnkoIiNzbWRf YXRfZ3JwcyBvcHRpb246c2VsZWN0ZWQiKS52YWwoKTsNCgkJdmFyIG91dCA9IFtdOw0KCQl2 YXIgcHJpdnMgPSBbXTsNCgkJcHJpdnMucHVzaChzZWxza2luKTsNCgkJalF1ZXJ5KCIjc21k X2F0X3ByaXZzIG9wdGlvbjpzZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQlwcml2 cy5wdXNoKGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCX0pOw0KCQlpZiAocHJpdnMubGVuZ3Ro ID09IDEpIHsNCgkJCXByaXZzLnBvcCgpOw0KCQl9IGVsc2Ugew0KCQkJb3V0LnB1c2gocHJp dnMuam9pbigiOiIpKTsNCgkJfQ0KCQl2YXIgaGlkbGlzdCA9IGpRdWVyeSgiaW5wdXRbbmFt ZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOw0KCQl2YXIgcHJldmxpc3QgPSBoaWRs aXN0LnNwbGl0KCcsJyk7DQoJCXZhciBwcmV2Y250ID0gcHJldmxpc3QubGVuZ3RoOw0KDQoJ CWpRdWVyeSgiI3NtZF9hdF9ncnBzIG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQlj dXJyc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJCWlmIChjdXJyc2tpbiAhPSBzZWxz a2luKSB7DQoJCQkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgcHJldmNudDsgaWR4KyspIHsN CgkJCQkJcHJldnByaXZzID0gcHJldmxpc3RbaWR4XS5zcGxpdCgnOicpOw0KCQkJCQlza2lu aWQgPSBwcmV2cHJpdnMuc2hpZnQoKTsNCgkJCQkJLy8gR2VuZXJhdGUgdGhlIHByaXYgbGlz dCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBza2luLCByZW1vdmluZyBhbnkgZHVwbGlj YXRlIHByaXZzIHNldCBlbHNld2hlcmUNCgkJCQkJaWYgKHNraW5pZCA9PSBjdXJyc2tpbikg ew0KCQkJCQkJdG1wb3V0ID0gW107DQoJCQkJCQl0bXBvdXQucHVzaChza2luaWQpOw0KCQkJ CQkJZm9yICh0aGlzcHJpdiBpbiBwcmV2cHJpdnMpIHsNCgkJCQkJCQlpZiAoalF1ZXJ5Lmlu QXJyYXkocHJldnByaXZzW3RoaXNwcml2XSwgcHJpdnMpIDwgMCkgew0KCQkJCQkJCQl0bXBv dXQucHVzaChwcmV2cHJpdnNbdGhpc3ByaXZdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJ CQlpZiAodG1wb3V0Lmxlbmd0aCA+IDEpIHsNCgkJCQkJCQlvdXQucHVzaCh0bXBvdXQuam9p bigiOiIpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSk7DQoJCWpRdWVy eSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbChvdXQpOw0KCX0pOw0K DQoJLy8gRGlzcGxheSBhIHRvb2x0aXAgc2hvd2luZyB0aGUgY3VycmVudGx5LWFzc2lnbmVk IHNraW4gd2hlbiBob3ZlcmluZyBvdmVyIGEgcHJpdmlsZWdlIGxldmVsDQoJalF1ZXJ5KCIj c21kX2F0X3ByaXZzIG9wdGlvbiIpLmhvdmVyKGZ1bmN0aW9uKCkgew0KCQlob3ZpdGVtID0g alF1ZXJ5KHRoaXMpLnZhbCgpOw0KCQlncnBzID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRf YXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCWl0ZW1zID0gZ3Jwcy5zcGxpdCgiLCIpOw0K CQlmb3IgKGlkeCA9IDA7IGlkeCA8IGl0ZW1zLmxlbmd0aDsgaWR4KyspIHsNCgkJCXNraW56 ID0gaXRlbXNbaWR4XS5zcGxpdCgiOiIpOw0KCQkJZm9yIChqZHggPSAxOyBqZHggPCBza2lu ei5sZW5ndGg7IGpkeCsrKSB7DQoJCQkJaWYgKHNraW56W2pkeF0gPT0gaG92aXRlbSkgew0K CQkJCQlqUXVlcnkodGhpcykuYXR0cigidGl0bGUiLCBza2luelswXSk7DQoJCQkJCWJyZWFr Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0sDQoJZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlz KS5hdHRyKCJ0aXRsZSIsICIiKTsNCgl9KTsNCglzbWRfYXRfcHJlZnN3YXAoalF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ106Y2hlY2tlZCIpLnZhbCgpKTsNCglqUXVlcnko IiNzbWRfYXRfcHJpdnMiKS5jaGFuZ2UoKTsNCn0pOw0KPC9zY3JpcHQ+DQo8c3R5bGUgdHlw ZT0idGV4dC9jc3MiPg0KLnNtZF9mYWtlYnRuIHsNCgljb2xvcjojNTU1Ow0KCWN1cnNvcjpw b2ludGVyOw0KfQ0KI3NtZF9hdF9yYWRpbyBpbnB1dCB7DQoJZmxvYXQ6bGVmdDsNCgljbGVh cjpib3RoOw0KfQ0KI3NtZF9hdF9yYWRpbyBsYWJlbCB7DQoJZmxvYXQ6bGVmdDsNCn0NCi5z bWRfaGlkZGVuIHsNCglkaXNwbGF5Om5vbmU7DQp9DQo8L3N0eWxlPg0KRU9KUzsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTcGxpdCBhIG11bHRpLWNoYXIgcHJl ZmVyZW5jZSB2YWx1ZSBpbnRvIGFuIGFycmF5IG9mIGtleXMvdmFsdWVzLg0KLy8gTm90ZTog dmFsdWUgaXMgcGFzc2VkIGluIGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBwcmVm cyBhcnJheSBpbiB0aGlzIGZ1bmN0aW9uIC0gaW50ZW50aW9uYWxseQ0KZnVuY3Rpb24gc21k X2F0X3ByZWZfZXhwbG9kZSgkdmFsKSB7DQoJJG9yZGVyID0gYXJyYXlfdmFsdWVzKGFycmF5 KHNtZF9hdF9nVHh0KCdjX2d6aXAnKSxzbWRfYXRfZ1R4dCgnY19iemlwJyksc21kX2F0X2dU eHQoJ2NfemlwJykpKTsNCgkkb25vZmYgPSBhcnJheV92YWx1ZXMocHJlZ19zcGxpdCgnLy8n LCAkdmFsLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSkpOw0KCSRvdXQgPSBhcnJheSgpOw0K CWZvcmVhY2goJG9yZGVyIGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJG91dFsoc3RyaW5n KSR2YWx1ZTFdID0gJG9ub2ZmWyRrZXkxXTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19pbnN0YWxsKCRzaG93cGFuZT0nMScp IHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZvcmVhY2gg KCRzbWRfYXRfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKCFmZXRjaCgn bmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2FmZV9pbnNl cnQoJ3R4cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHBy ZWYpKS4nLCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50PSJzbWRfYWRz a2luIicpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgncHJlZnNfaW5zdGFsbGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7 DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfcmVtb3ZlKCRz aG93cGFuZT0nMScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcn Ow0KCWZvcmVhY2ggKGFycmF5X21lcmdlKCRzbWRfYXRfcHJlZnNbMF0sJHNtZF9hdF9wcmVm c1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywndHhwX3By ZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZz JywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCglpZiAoJHNo b3dwYW5lKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2RlbGV0ZWQnKTsN CgkJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF9hdF9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRzbWRfcGx1Z2luX3ByZWZz LCAkc21kX2F0X3ByZWZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJJG1lc3NhZ2UgPSAnJzsNCgkk cG9zdCA9IGFycmF5KCk7DQoJJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddID0gZ3BzKCdz bWRfYXRfZ2xvYmFsX3NraW4nKTsNCgkkcG9zdFsnc21kX2F0X3N5c3RlbSddID0gZ3BzKCdz bWRfYXRfc3lzdGVtJyk7DQoJJHBvc3RbJ3NtZF9hdF9sYXlvdXQnXSA9IGdwcygnc21kX2F0 X2xheW91dCcpOw0KCSRwb3N0WydzbWRfYXRfY2FzZV9zb3J0J10gPSBncHMoJ3NtZF9hdF9j YXNlX3NvcnQnKTsNCgkkcG9zdFsnc21kX2F0X3R3J10gPSBncHMoJ3NtZF9hdF90dycpOw0K CSRwb3N0WydzbWRfYXRfdGgnXSA9IGdwcygnc21kX2F0X3RoJyk7DQoJaWYgKGdwcygnc21k X2F0X3VzZXJfbGlzdCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10gPSBqb2lu KCcsJywgZ3BzKCdzbWRfYXRfdXNlcl9saXN0JykpOw0KCX0gZWxzZSB7DQoJCSRwb3N0Wydz bWRfYXRfdXNlcl9saXN0J10gPSAnJzsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2dyb3VwX2xp c3QnKSkgew0KCQkkcG9zdFsnc21kX2F0X2dyb3VwX2xpc3QnXSA9IGdwcygnc21kX2F0X2dy b3VwX2xpc3QnKTsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2NydXNoJykpIHsNCgkJJHBvc3Rb J3NtZF9hdF9jcnVzaCddID0gZ3BzKCdzbWRfYXRfY3J1c2gnKTsNCgl9DQoNCgkvLyBTZXQg dGhlIHN5c3RlbS13aWRlIHRoZW1lIHRvIHRoZSBnbG9iYWwgdGhlbWUNCglpZiAoJHBvc3Rb J3NtZF9hdF9nbG9iYWxfc2tpbiddKSB7DQoJCXNldF9wcmVmKCd0aGVtZV9uYW1lJywgJHBv c3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKTsNCgl9DQoNCglmb3JlYWNoICgkc21kX2F0X3By ZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFskcHJlZl0p KSB7DQoJCQlzZXRfcHJlZigkcHJlZiwgJHBvc3RbJHByZWZdLCAkc21kX2F0X2V2ZW50LCAy KTsNCgkJfQ0KCX0NCgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJ c21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBVVElMSVRZIEZVTkNUSU9OUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfZ2V0X3ByaXZzKCR1c2VyPScnKSB7DQoJZ2xvYmFsICR0eHBf dXNlcjsNCgkkdXNlciA9ICgkdXNlcikgPyAkdXNlciA6ICR0eHBfdXNlcjsNCgkkcHJpdnMg PSBzYWZlX2ZpZWxkKCJwcml2cyIsICJ0eHBfdXNlcnMiLCAibmFtZT0nIi5kb1NsYXNoKCR1 c2VyKS4iJyIpOw0KCXJldHVybiAkcHJpdnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4aXN0cygkbmFtZSkgew0KCSRpbnN0YW5jZSA9 IHRoZW1lOjpmYWN0b3J5KCRuYW1lKTsNCglyZXR1cm4gJGluc3RhbmNlOw0KfQ0KDQovLyBJ ZiBwZXItdXNlciBza2luIHN1cHBvcnQgaXMgT0ZGLCB0aGUgZ2xvYmFsIHNraW4gd2lucy4N Ci8vIE9uZSBleGNlcHRpb246IGlmIHRoZSB1c2VyIGlzIGFuIGFkbWluLCBhbGxvdyB0aGUg Y3VycmVudCBza2luIHRvIHByZXZhaWwgc28gdGhleSBtYXkgc3dpdGNoIHNraW5zIHdpdGgg aW1wdW5pdHkNCi8vIGFuZCBub3QgYWZmZWN0IHRoZSBnbG9iYWwgc2tpbg0KZnVuY3Rpb24g c21kX2F0X3BlcigpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2cywgJHByZWZzLCAkdGhlbWUs ICR0eHBfdXNlcjsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkc2tp blN5cyA9IGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3N5c3RlbSddKSA/ICRhdF9wcmVmc1sn c21kX2F0X3N5c3RlbSddIDogMDsNCgkkcHJpdnMgPSBzbWRfYXRfZ2V0X3ByaXZzKCk7DQoJ JGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10pICYm ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0gJycpID8gJGF0X3ByZWZzWydz bWRfYXRfZ2xvYmFsX3NraW4nXSA6ICcnOw0KCSRnYmxfc2tpbiA9IChzbWRfYXRfZXhpc3Rz KCRnYmxfc2tpbikpID8gJGdibF9za2luIDogJ2NsYXNzaWMnOw0KDQoJc3dpdGNoICgkc2tp blN5cykgew0KCQljYXNlIDA6DQoJCQkvLyBHbG9iYWwgZm9yY2VkIHNraW4gKGV4Y2VwdCBh ZG1pbnMpDQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRf cHJpdnMpKSkgew0KCQkJCXJldHVybiAkZ2JsX3NraW47DQoJCQl9IGVsc2Ugew0KCQkJCS8v IEFkbWlucw0KCQkJCSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9z a2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoc21kX2F0 X2V4aXN0cygkYWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJCX0NCgkJ CWJyZWFrOw0KCQljYXNlIDE6DQoJCQkvLyBHcm91cC1sZXZlbCBmb3JjZWQgc2tpbnMNCgkJ CWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7 DQoJCQkJJGZvcmNlU2tpbnMgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlz dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10gOiAoKCRnYmxfc2tpbikg PyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpOw0KDQoJCQkJLy8gU3BsaXQgdGhlIGdyb3Vw IHNraW4gbGlzdA0KCQkJCSRnc2tpbnMgPSBhcnJheSgpOw0KCQkJCSRnb3B0cyA9IGV4cGxv ZGUoJywnLCAkZm9yY2VTa2lucyk7DQoJCQkJZm9yZWFjaCAoJGdvcHRzIGFzICRncnBkZWYp IHsNCgkJCQkJaWYgKCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOw0KCQkJCQkkcHJpdmdycCA9 IGV4cGxvZGUoIjoiLCAkZ3JwZGVmKTsNCgkJCQkJJHNraW5pZCA9IGFycmF5X3NoaWZ0KCRw cml2Z3JwKTsNCgkJCQkJaWYgKGluX2FycmF5KCRwcml2cywgJHByaXZncnApKSB7DQoJCQkJ CQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJHNraW5pZCkpID8gJHNraW5pZCA6ICdjbGFzc2lj Jzs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuICgkZ2JsX3NraW4pID8gJGdibF9za2lu IDogJHRoZW1lLT5uYW1lOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRt X3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4g OiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2lu KSkgPyAkYWRtX3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAy Og0KCQkJLy8gUGVyLXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNoZWNrIHRo ZSBza2luIGlzIGluIHRoZSBhbGxvd2VkIGxpc3QNCgkJCWlmICghaW5fYXJyYXkoJHByaXZz LCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJHZhbGlkU2tpbnMgPSAo aXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSA/ICRhdF9wcmVmc1snc21k X2F0X3VzZXJfbGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5u YW1lKTsNCgkJCQkkdmFsaWRTa2lucyA9IGRvX2xpc3QoJHZhbGlkU2tpbnMpOw0KCQkJCSR0 aGVfc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRnYmxfc2tp biA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoaW5fYXJyYXkoJHRoZV9za2luLCAk dmFsaWRTa2lucykgJiYgc21kX2F0X2V4aXN0cygkdGhlX3NraW4pKSA/ICR0aGVfc2tpbiA6 ICcnOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRf cHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5h bWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3Nr aW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgl9DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmVhZCBhbmQgcmV0dXJuIHRoZSBtYW5pZmVzdCwgaWYg aXQgZXhpc3RzIGFuZCBhZGQgYSBmZXcgb3RoZXIgbmljZXRpZXMgdG8gdGhlIGFycmF5IGZv ciBsYXRlcg0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKSB7DQoJZ2xvYmFs ICRzbWRfY29yZV90aGVtZXM7DQoNCgkkdGhpc190aGVtZSA9IHRoZW1lOjpmYWN0b3J5KCRz a2luKTsNCgkkc2tpbmZvID0gYXJyYXkoKTsNCglpZiAoJHRoaXNfdGhlbWUpIHsNCgkJJHNr aW5mbyA9ICR0aGlzX3RoZW1lLT5tYW5pZmVzdCgpOw0KCQkkc2tpbmZvWydkbmFtZSddID0g ZW1wdHkoJHNraW5mb1sndGl0bGUnXSkgPyB1Y3dvcmRzKCR0aGlzX3RoZW1lLT5uYW1lKSA6 ICRza2luZm9bJ3RpdGxlJ107DQoJCSRza2luZm9bJ25hbWUnXSA9ICR0aGlzX3RoZW1lLT5u YW1lOw0KCQkkc2tpbmZvWydwYXRoJ10gPSAkdGhpc190aGVtZS0+dXJsOw0KCQkkc2tpbmZv WydwaHBmaWxlJ10gPSAkdGhpc190aGVtZS0+cGF0aCgkc2tpbik7DQoJCSRza2luZm9bJ2Jh c2VkX29uJ10gPSAnJzsNCgkJJGNvbnRlbnRzID0gZmlsZV9nZXRfY29udGVudHMoJHNraW5m b1sncGhwZmlsZSddKTsNCgkJaWYgKCgkcG9zID0gc3RycG9zKCRjb250ZW50cywgJ3RoZW1l OjpiYXNlZF9vbicpKSAhPT0gZmFsc2UpIHsNCgkJCSRiZWdwb3MgPSBzdHJwb3MoJGNvbnRl bnRzLCAiJyIsICRwb3MpKzE7DQoJCQkkZW5kcG9zID0gc3RycG9zKCRjb250ZW50cywgIici LCAkYmVncG9zKTsNCgkJCSRiYXNlID0gc3Vic3RyKCRjb250ZW50cywgJGJlZ3BvcywgJGVu ZHBvcy0kYmVncG9zKTsNCgkJCSRza2luZm9bJ2Jhc2VkX29uJ10gPSAoaW5fYXJyYXkoJGJh c2UsICRzbWRfY29yZV90aGVtZXMpKSA/ICcnIDogJGJhc2U7DQoJCX0NCgkJdW5zZXQoJHRo aXNfdGhlbWUpOw0KCX0NCglyZXR1cm4gJHNraW5mbzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBHcmFiIHRoZSB0aHVtYm5haWwgZmlsZW5hbWUgaWYgaXQgZXhp c3RzLCBvcHRpb25hbGx5IHJldHVybiBhIGZvcm1hdHRlZCBpbWcgdGFnDQpmdW5jdGlvbiBz bWRfYXRfZ2V0X3RodW1iKCRza2luLCAkaW1nPTApIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVm czsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkdHcgPSBpc3NldCgk YXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21k X2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXTsNCgkkdGggPSBpc3NldCgkYXRfcHJlZnNbJ3Nt ZF9hdF90aCddKSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3ByZWZzWzBd WydzbWRfYXRfdGgnXTsNCgkkdXNlX3RodW1iID0gKCR0dyA9PSAwIHx8ICR0aCA9PSAwKSA/ IGZhbHNlIDogdHJ1ZTsNCg0KCS8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVzdCBoYXMg YWxyZWFkeSBiZWVuIHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMgZnVuY3Rp b24NCglpZiAoIWlzX2FycmF5KCRza2luKSkgew0KCQkkc2tpbiA9IHNtZF9hdF9yZWFkX3Nr aW5mbygkc2tpbik7DQoJfQ0KCWlmICgkc2tpbikgew0KCQkkc2tpbmRpciA9ICRza2luWydw YXRoJ107DQoJCSR0aHVtYm5hbWUgPSBnbG9iKCRza2luZGlyLidzY3JlZW5zaG90LionKTsN CgkJcmV0dXJuICgkaW1nICYmICR1c2VfdGh1bWIgJiYgJHRodW1ibmFtZSAmJiBmaWxlX2V4 aXN0cygkdGh1bWJuYW1lWzBdKSkgPyAnPGltZyBzcmM9IicuJHRodW1ibmFtZVswXS4nIiBh bHQ9IicuKChpc3NldCgkc2tpblsnbmFtZSddKSkgPyAkc2tpblsnbmFtZSddIDogJycpLicg dGh1bWJuYWlsIiBzdHlsZT0iYm9yZGVyOjJweCByaWRnZSAjOTk5O3BhZGRpbmc6MnB4OyIg d2lkdGg9IicuJHR3LiciIGhlaWdodD0iJy4kdGguJyIgLz4nIDogJyc7DQoJfSBlbHNlIHsN CgkJcmV0dXJuICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfYXRfcmVhZF9za2lucygpIHsNCgkkc2tpbl9saXN0ID0gdGhlbWU6Om5h bWVzKCk7DQoJJHNraW5fbGlzdCA9IHNtZF9hdF9zb3J0KCRza2luX2xpc3QpOw0KCXJldHVy biAkc2tpbl9saXN0Ow0KfQ0KDQovLyBTb3J0IHRoZSBza2lucyBidXQga2VlcCAnY2xhc3Np YycgYXQgdGhlIHRvcA0KZnVuY3Rpb24gc21kX2F0X3NvcnQoJHNraW5fbGlzdCkgew0KCWds b2JhbCAkcHJlZnM7DQoNCgkkY2FzZVNlbnNlID0gaXNzZXQoJHByZWZzWydzbWRfYXRfY2Fz ZV9zb3J0J10pID8gJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10gOiAxOw0KDQoJaWYoJGNh c2VTZW5zZSkgew0KCQluYXRzb3J0KCRza2luX2xpc3QpOw0KCX0gZWxzZSB7DQoJCW5hdGNh c2Vzb3J0KCRza2luX2xpc3QpOw0KCX0NCgkkZGZsdF9mb3VuZCA9IGZhbHNlOw0KCWZvcmVh Y2ggKCRza2luX2xpc3QgYXMgJHNraW5faWR4ID0+ICRza2luX25hbWUpIHsNCgkJaWYgKCRz a2luX25hbWUgPT0gImNsYXNzaWMiKSB7DQoJCQl1bnNldCgkc2tpbl9saXN0WyRza2luX2lk eF0pOw0KCQkJJGRmbHRfZm91bmQgPSB0cnVlOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoJaWYg KCRkZmx0X2ZvdW5kKSB7DQoJCWFycmF5X3Vuc2hpZnQoJHNraW5fbGlzdCwiY2xhc3NpYyIp Ow0KCX0NCg0KCXJldHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9saXN0ZGlyKCRzdGFydF9kaXI9Jy4nKSB7DQoJ JGZpbGVzID0gYXJyYXkoKTsNCg0KCWlmIChpc19kaXIoJHN0YXJ0X2RpcikpIHsNCgkJJGZo ID0gb3BlbmRpcigkc3RhcnRfZGlyKTsNCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRkaXIoJGZo KSkgIT09IGZhbHNlKSB7DQoJCQkvLyBsb29wIHRocm91Z2ggdGhlIGZpbGVzLCBza2lwcGlu ZyAuIGFuZCAuLiwgYW5kIHJlY3Vyc2luZyBpZiBuZWNlc3NhcnkNCgkJCWlmIChzdHJjbXAo JGZpbGUsICcuJyk9PTAgfHwgc3RyY21wKCRmaWxlLCAnLi4nKT09MCkgY29udGludWU7DQoJ CQkkZmlsZXBhdGggPSAkc3RhcnRfZGlyIC4gJy8nIC4gJGZpbGU7DQoJCQlpZiAoIGlzX2Rp cigkZmlsZXBhdGgpICkgew0KCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgc21k X2F0X2xpc3RkaXIoJGZpbGVwYXRoKSk7DQoJCQl9IGVsc2Ugew0KCQkJCWFycmF5X3B1c2go JGZpbGVzLCAkZmlsZXBhdGgpOw0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKCRmaCk7DQoJfSBl bHNlIHsNCg0KCQkvLyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGFu IGludmFsaWQgbm9uLWRpcmVjdG9yeSBhcmd1bWVudA0KCQkkZmlsZXMgPSBmYWxzZTsNCgl9 DQoNCglyZXR1cm4gJGZpbGVzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Ci8vIFJlY3Vyc2l2ZSBybWRpcigpIGNvdXJ0ZXN5IG9mIHRoZSBwaHAgbWFudWFsIHVzZXIg Y29tbWVudHMNCmZ1bmN0aW9uIHNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoKSB7DQoJ aWYgKGlzX2RpcigkZmlsZXBhdGgpICYmICFpc19saW5rKCRmaWxlcGF0aCkpIHsNCgkJaWYg KCRkaCA9IG9wZW5kaXIoJGZpbGVwYXRoKSkgew0KCQkJd2hpbGUgKCgkc2YgPSByZWFkZGly KCRkaCkpICE9PSBmYWxzZSkgew0KCQkJCWlmICgkc2YgPT0gJy4nIHx8ICRzZiA9PSAnLi4n KSBjb250aW51ZTsNCgkJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRoLicv Jy4kc2YpKSB7DQoJCQkJCWJyZWFrOyAvLyBEb2gsIGNhbid0IGRlbGV0ZQ0KCQkJCX0NCgkJ CX0NCgkJCWNsb3NlZGlyKCRkaCk7DQoJCX0NCgkJcmV0dXJuIHJtZGlyKCRmaWxlcGF0aCk7 DQoJfQ0KCXJldHVybiB1bmxpbmsoJGZpbGVwYXRoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBGcm9tIFBIUCBtYW51YWwgY29tbWVudHMuIFRoYW5rcyBwdXJl bWFuZ28NCmZ1bmN0aW9uIHNtZF9hdF9pc19kaXIoJGRpcikgew0KCS8vIGJ5cGFzc2VzIG9w ZW5fYmFzZWRpciByZXN0cmljdGlvbnMgb2YgaXNfZGlyIGFuZCBmaWxlcGVybXMNCgkkdG1w X2NtZCA9IGBscyAtZGwgJGRpcmA7DQoJJGRpcl9mbGFnID0gJHRtcF9jbWRbMF07DQoJaWYo JGRpcl9mbGFnIT0iZCIpIHsNCgkJLy8gbm90IGQ7IHVzZSBuZXh0IGNoYXIgKGZpcnN0IGNo YXIgbWlnaHQgYmUgJ3MnIGFuZCBpcyBzdGlsbCBkaXJlY3RvcnkpDQoJCSRkaXJfZmxhZyA9 ICR0bXBfY21kWzFdOw0KCX0NCglyZXR1cm4gKCRkaXJfZmxhZz09ImQiKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWtkaXJfcmVjdXJzaXZl KCRwYXRoLCAkbW9kZSA9IDA3NTUpIHsNCgkkcGF0aCA9IChzdHJwb3MoJHBhdGgsICcvJykg PT09IDApID8gc3Vic3RyKCRwYXRoLCAxKSA6ICRwYXRoOw0KCSRkaXJzID0gZXhwbG9kZShE UywgJHBhdGgpOw0KCSRjb3VudCA9IGNvdW50KCRkaXJzKTsNCgkkcGF0aCA9ICcnOw0KCWZv ciAoJGlkeCA9IDA7ICRpZHggPCAkY291bnQ7ICsrJGlkeCkgew0KCQkkcGF0aCAuPSBEUyAu ICRkaXJzWyRpZHhdOw0KCQlpZiAoIXNtZF9hdF9pc19kaXIoJHBhdGgpKSB7DQoJCQlpZiAo IW1rZGlyKCRwYXRoLCAkbW9kZSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCX0N Cgl9DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX2F0X2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2llKCdzbWRfYXRf cGFnZWJ5JywgZ3BzKCdxdHknKSk7DQoJc21kX2F0X2xpc3QoJycpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1lc3NhZ2U9 JycpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2czsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNh KGFycmF5KCdza2luJywgJ2V2ZW50JywgJ25leHRzdGVwJykpKSk7DQoJJHVybCA9ICI/ZXZl bnQ9Ii4kZXZlbnQuIiZzdGVwPSIuJG5leHRzdGVwOw0KDQoJaWYgKCRza2luICYmIHNtZF9h dF9leGlzdHMoJHNraW4pKSB7DQoJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAkZXZl bnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFURSk7DQoJCSR1 cmwgLj0gJyZtZXNzYWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogc21kX2F0X2dU eHQoJ3NraW5fc3dpdGNoZWQnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpKTsNCgl9IGVs c2Ugew0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7DQoJfQ0KDQoJLy8gU2lu Y2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJsZS1kZWNsdXRjaCBpbiBvcmRl ciB0byBzaG93IHRoZSBza2luIHRoaXMgZmlyc3QgdGltZQ0KCWVjaG8gPDw8RU9TDQo8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJlZj0ieyR1 cmx9IjsNCjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVz aCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsNCglleGl0 Ow0KfQ0KDQovLyBBbGwtdXNlciBza2luIGNob29zZXINCmZ1bmN0aW9uIHNtZF9hZG1hdCgk ZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXko DQoJCQknc21kX2F0X3N3aXRjaCcsDQoJCSkpKSB7DQoJCXNtZF9hdF9jaG9vc2VyKCcnKTsN Cgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfYXRfY2hvb3NlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMs ICRzbWRfYXRfYWRtX2V2ZW50LCAkdGhlbWU7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0 X3ByZWZzKCk7DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQn XSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChpc3NldCgk YXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21k X2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQoJGF0X3By ZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9w cmVmc1swXVsnc21kX2F0X3RoJ10pICsgODA7DQoNCgkkbWVzc2FnZSA9ICgkbWVzc2FnZSkg PyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ3Nr aW5uZXInKSwkbWVzc2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5uYW1lOw0KDQoJ JGFsbG93ZWQgPSAnJzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNlcl9saXN0J10p KSB7DQoJCSRhbGxvd2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRfdXNlcl9saXN0 J10pOw0KCQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgew0KCQkJaWYg KCR2YWxpZCA9PSAnJykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsNCgkJCX0NCgkJ fQ0KCX0NCgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkkaGRyb3cgPSBo ZWQoc21kX2F0X2dUeHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRsYXlvdXQ9PSIw Iikgew0KCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJZWNobyB0cigNCgkJCXRkYSgk aGRyb3csICcgY29sc3Bhbj0iMyInKQ0KCQkpOw0KCQllY2hvIHRyKA0KCQkJYXNzSGVhZCgN CgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9yJywNCgkJCQknZGVz Y3JpcHRpb24nDQoJCQkpKTsNCgl9IGVsc2Ugew0KCQllY2hvIDw8PEVPQ1NTDQo8c3R5bGUg dHlwZT0idGV4dC9jc3MiPg0KLnNtZF9ncmlkIHsNCgl3aWR0aDo5NjBweDsNCgltYXJnaW46 MCBhdXRvOw0KfQ0KLnNtZF9jZWxsIHsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6MTBweDsN CgltYXJnaW46MTBweDsNCglib3JkZXI6MXB4IHJpZGdlICNjY2M7DQoJd2lkdGg6eyR0d31w eDsNCgloZWlnaHQ6eyR0aH1weDsNCn0NCi5zbWRfY2VsbDpob3ZlciB7DQoJYmFja2dyb3Vu ZDojZGRkOw0KfQ0KLnNtZF9jbGVhciB7DQoJY2xlYXI6Ym90aDsNCn0NCi5zbWRfYXV0aCB7 DQoJdGV4dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KPC9zdHlsZT4NCkVP Q1NTOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21kX25l d3JvdyI+Jy4kaGRyb3cuJzwvZGl2Pic7DQoJfQ0KCWZvcmVhY2ggKCRhbGxvd2VkIGFzICRz a2luX25hbWUpIHsNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9uYW1l KTsNCgkJaWYgKCRza2luZm8pIHsNCgkJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1i KCRza2luZm8sIDEpOw0KCQkJJHRoaXNfc2tpbiA9ICgkc2tpbl9uYW1lID09ICRjdXJyX3Nr aW4pID8gc3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXTsNCgkJ CSR0aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfYWRtX2V2ZW50LmEuJ3N0 ZXA9c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2FkbWF0Jy5hLidza2luPScuJHNr aW5fbmFtZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLiciPicuJHRo aXNfc2tpbi4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8L2Rpdj4nIDog JycpLic8L2E+JzsNCgkJCSRhdXRocm93ID0gKHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJp J10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3Vy aSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0aG9yJ107 DQoNCgkJCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJCQllY2hvIHRyKA0KCQkJCQl0ZCgkdGh1 bXJvdykNCgkJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJCS50ZCgkc2tpbmZvWydkZXNj cmlwdGlvbiddLCAyNTApDQoJCQkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8g JyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpDQoJCQkJKTsNCgkJCX0gZWxz ZSB7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NlbGwiJy4oKCRza2luX25hbWUgPT0g JGN1cnJfc2tpbikgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7IicgOiAnJykuJz4n Ow0KCQkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCQllY2hvICc8ZGl2 IGNsYXNzPSJzbWRfYXV0aCI+Jy5zbWRfYXRfZ1R4dCgnYnknKS4kYXV0aHJvdy4nPC9kaXY+ JzsNCgkJCQllY2hvICc8L2Rpdj4nOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkbGF5b3V0PT0i MCIpIHsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xh c3M9InNtZF9jbGVhciI+PC9kaXY+PC9kaXY+JzsNCgl9DQp9DQoNCi8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRBUi9HWklQL0Ja SVAyL1pJUCBBUkNISVZFIENMQVNTRVMgMi4xDQogfCBCeSBEZXZpbiBEb3VjZXR0ZQ0KIHwg Q29weXJpZ2h0IChjKSAyMDA1IERldmluIERvdWNldHRlDQogfCBFbWFpbDogZGFya3Nub29w eUBzaGF3LmNhDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQogfCBFbWFpbCBidWdzL3N1Z2dlc3Rpb25zIHRvIGRhcmtzbm9vcHlAc2hh dy5jYQ0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KIHwgVGhpcyBzY3JpcHQgaGFzIGJlZW4gY3JlYXRlZCBhbmQgcmVsZWFzZWQgdW5k ZXINCiB8IHRoZSBHTlUgR1BMIGFuZCBpcyBmcmVlIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRl DQogfCBvbmx5IGlmIHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgcmVtb3ZlZA0K ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov DQoNCi8vIE5PVEU6IGNsYXNzIG5hbWVzIGFsdGVyZWQgdG8gYWRkIHNtZF9hdF8gcHJlZml4 IHRvIGF2b2lkIGNsYXNoZXMgaW4gZ2xvYmFsIHNjb3BlLCBhbmQgYWRkZWQgc3ViZGlyIGNy ZWF0aW9uDQoNCmNsYXNzIHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X2Fy Y2hpdmUoJG5hbWUpDQoJew0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgNCgkJCSdiYXNl ZGlyJyA9PiAiLiIsDQoJCQknbmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVuZCcgPT4gIiIs DQoJCQknaW5tZW1vcnknID0+IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0KCQkJJ3JlY3Vy c2UnID0+IDEsDQoJCQknc3RvcmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3dsaW5rcycgPT4g MCwNCgkJCSdsZXZlbCcgPT4gMywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQknc2Z4JyA9PiAi IiwNCgkJCSd0eXBlJyA9PiAiIiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkpOw0KCQkkdGhp cy0+ZmlsZXMgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheSAoKTsNCgkJ JHRoaXMtPnN0b3Jlb25seSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3IgPSBhcnJheSAo KTsNCgl9DQoNCglmdW5jdGlvbiBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7DQoJCWZvcmVh Y2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9wdGlvbnNbJGtl eV0gPSAkdmFsdWU7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10p KQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3JlcGxhY2UoIlxc IiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25z WydiYXNlZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9u c1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVnX3Jl cGxhY2UoIi9cLyQvIiwgIiIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQl9DQoJ CWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJCQkkdGhpcy0+ b3B0aW9uc1snbmFtZSddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9u c1snbmFtZSddKTsNCgkJCSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVnX3JlcGxhY2Uo Ii9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0KCQlpZiAoIWVt cHR5ICgkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlv bnNbJ3ByZXBlbmQnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNb J3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBs YWNlKCIvXihcLipcLyspKy8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJ CQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIv IiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJl cGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sncHJl cGVuZCddKSAuICIvIjsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9hcmNoaXZlKCkN Cgl7DQoJCSR0aGlzLT5tYWtlX2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lu bWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRo aXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3 cml0ZSddID09IDAgJiYgZmlsZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICgk dGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sndHlw ZSddID09ICJiemlwIiA/ICIudG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9y W10gPSAiRmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsN CgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVsc2UgaWYgKCR0 aGlzLT5hcmNoaXZlID0gQGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMt Pm9wdGlvbnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9 PSAiYnppcCIgPyAiLnRtcCIgOiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigkcHdkKTsNCgkJ CWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRo aXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsN CgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9 ICIiOw0KDQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQljYXNl ICJ6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlz LT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJCQlyZXR1cm4g MDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWlmICghJHRoaXMtPmNy ZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3Jl YXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0aGlzLT5j cmVhdGVfYnppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBj cmVhdGUgYnppcDIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJ CWNhc2UgImd6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQly ZXR1cm4gMDsNCgkJCX0NCgkJCWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkpDQoJCQl7DQoJ CQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZpbGUuIjsNCgkJ CQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaWYgKCEk dGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxk IG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KDQoJ CWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQlmY2xvc2Uo JHRoaXMtPmFyY2hpdmUpOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6 aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJCXVubGluaygk dGhpcy0+b3B0aW9uc1snYmFzZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlvbnNbJ25hbWUn XSAuICIudG1wIik7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgkZGF0YSkNCgl7 DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJZndyaXRlKCR0 aGlzLT5hcmNoaXZlLCAkZGF0YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlIC49ICRk YXRhOw0KCX0NCg0KCWZ1bmN0aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAoIWVtcHR5ICgk dGhpcy0+ZXhjbHVkZSkpDQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9PiAk dmFsdWUpDQoJCQkJZm9yZWFjaCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJlbnQpDQoJCQkJ CWlmICgkdmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJdW5zZXQg KCR0aGlzLT5maWxlc1ska2V5XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5zdG9yZW9ubHkp KQ0KCQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZv cmVhY2ggKCR0aGlzLT5zdG9yZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFsdWVb J25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZpbGVzWyRrZXld WydtZXRob2QnXSA9IDA7DQoJCXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRoaXMtPnN0b3Jl b25seSk7DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAg PSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJy ZW50KQ0KCQkJJHRoaXMtPmZpbGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBl eGNsdWRlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygk bGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmV4Y2x1 ZGVbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVzKCRsaXN0KQ0K CXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0 ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1cnJlbnQ7DQoJ fQ0KDQoJZnVuY3Rpb24gbGlzdF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICghaXNfYXJyYXkg KCRsaXN0KSkNCgkJew0KCQkJJHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0gYXJyYXkgKCR0 ZW1wKTsNCgkJCXVuc2V0ICgkdGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBhcnJheSAoKTsN Cg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGly J10pOw0KDQoJCWZvcmVhY2ggKCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJCQkkY3VycmVu dCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBw cmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVudCA9IHBy ZWdfcmVwbGFjZSgiL1wvJC8iLCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0cnN0cigkY3Vy cmVudCwgIioiKSkNCgkJCXsNCgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2UoIi8oW1xcXF5c JFwuXFtcXVx8XChcKVw/XCtce1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJyZW50KTsNCgkJ CQkkcmVnZXggPSBzdHJfcmVwbGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJCQkJJGRpciA9 IHN0cnN0cigkY3VycmVudCwgIi8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwgc3RycnBvcygk Y3VycmVudCwgIi8iKSkgOiAiLiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRk aXIpOw0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJaWYgKHByZWdf bWF0Y2goIi9eeyRyZWdleH0kL2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJCQkJCQkkZmls ZXNbXSA9ICRjdXJyZW50MjsNCgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAkdGVtcCwgJGN1 cnJlbnQpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkpDQoJCQl7DQoJ CQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlmb3JlYWNoICgk dGVtcCBhcyAkZmlsZSkNCgkJCQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1bnNldCAoJHRl bXAsICRmaWxlKTsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkY3VycmVudCkp DQoJCQkJJGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAnbmFtZTInID0+ ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4r XC8rKSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ry c3RyKCRjdXJyZW50LCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwgc3RycnBvcygk Y3VycmVudCwgIi8iKSArIDEpIDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScgPT4gQGlzX2xp bmsoJGN1cnJlbnQpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAy IDogMCwNCgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRjdXJyZW50 LCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJCWNoZGlyKCRw d2QpOw0KDQoJCXVuc2V0ICgkY3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQoJGZpbGVzLCBh cnJheSAoInNtZF9hdF9hcmNoaXZlIiwgInNvcnRfZmlsZXMiKSk7DQoNCgkJcmV0dXJuICRm aWxlczsNCgl9DQoNCglmdW5jdGlvbiBwYXJzZV9kaXIoJGRpcm5hbWUpDQoJew0KCQlpZiAo JHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAxICYmICFwcmVnX21hdGNoKCIvXihc LitcLyopKyQvIiwgJGRpcm5hbWUpKQ0KCQkJJGZpbGVzID0gYXJyYXkgKGFycmF5ICgnbmFt ZScgPT4gJGRpcm5hbWUsICduYW1lMicgPT4gJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSAu DQoJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9wdGlvbnNb J3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZGlybmFtZSwgIi8iKSkgPw0KCQkJCXN1 YnN0cigkZGlybmFtZSwgc3RycnBvcygkZGlybmFtZSwgIi8iKSArIDEpIDogJGRpcm5hbWUp LCAndHlwZScgPT4gNSwgJ3N0YXQnID0+IHN0YXQoJGRpcm5hbWUpKSk7DQoJCWVsc2UNCgkJ CSRmaWxlcyA9IGFycmF5ICgpOw0KCQkkZGlyID0gQG9wZW5kaXIoJGRpcm5hbWUpOw0KDQoJ CXdoaWxlICgkZmlsZSA9IEByZWFkZGlyKCRkaXIpKQ0KCQl7DQoJCQkkZnVsbG5hbWUgPSAk ZGlybmFtZSAuICIvIiAuICRmaWxlOw0KCQkJaWYgKCRmaWxlID09ICIuIiB8fCAkZmlsZSA9 PSAiLi4iKQ0KCQkJCWNvbnRpbnVlOw0KCQkJZWxzZSBpZiAoQGlzX2RpcigkZnVsbG5hbWUp KQ0KCQkJew0KCQkJCWlmIChlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3JlY3Vyc2UnXSkpDQoJ CQkJCWNvbnRpbnVlOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZnVsbG5hbWUp Ow0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRmaWxlMikNCgkJCQkJJGZpbGVzW10gPSAkZmls ZTI7DQoJCQl9DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGZ1bGxuYW1lKSkNCgkJCQkk ZmlsZXNbXSA9IGFycmF5ICgnbmFtZScgPT4gJGZ1bGxuYW1lLCAnbmFtZTInID0+ICR0aGlz LT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8rKSsv IiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3RyKCRm dWxsbmFtZSwgIi8iKSkgPw0KCQkJCQlzdWJzdHIoJGZ1bGxuYW1lLCBzdHJycG9zKCRmdWxs bmFtZSwgIi8iKSArIDEpIDogJGZ1bGxuYW1lKSwNCgkJCQkJJ3R5cGUnID0+IEBpc19saW5r KCRmdWxsbmFtZSkgJiYgJHRoaXMtPm9wdGlvbnNbJ2ZvbGxvd2xpbmtzJ10gPT0gMCA/IDIg OiAwLA0KCQkJCQknZXh0JyA9PiBzdWJzdHIoJGZpbGUsIHN0cnJwb3MoJGZpbGUsICIuIikp LCAnc3RhdCcgPT4gc3RhdCgkZnVsbG5hbWUpKTsNCgkJfQ0KDQoJCUBjbG9zZWRpcigkZGly KTsNCg0KCQlyZXR1cm4gJGZpbGVzOw0KCX0NCg0KCWZ1bmN0aW9uIHNvcnRfZmlsZXMoJGEs ICRiKQ0KCXsNCgkJaWYgKCRhWyd0eXBlJ10gIT0gJGJbJ3R5cGUnXSkNCgkJCWlmICgkYVsn dHlwZSddID09IDUgfHwgJGJbJ3R5cGUnXSA9PSAyKQ0KCQkJCXJldHVybiAtMTsNCgkJCWVs c2UgaWYgKCRhWyd0eXBlJ10gPT0gMiB8fCAkYlsndHlwZSddID09IDUpDQoJCQkJcmV0dXJu IDE7DQoJCWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gNSkNCgkJCXJldHVybiBzdHJjbXAoc3Ry dG9sb3dlcigkYVsnbmFtZSddKSwgc3RydG9sb3dlcigkYlsnbmFtZSddKSk7DQoJCWVsc2Ug aWYgKCRhWydleHQnXSAhPSAkYlsnZXh0J10pDQoJCQlyZXR1cm4gc3RyY21wKCRhWydleHQn XSwgJGJbJ2V4dCddKTsNCgkJZWxzZSBpZiAoJGFbJ3N0YXQnXVs3XSAhPSAkYlsnc3RhdCdd WzddKQ0KCQkJcmV0dXJuICRhWydzdGF0J11bN10gPiAkYlsnc3RhdCddWzddID8gLTEgOiAx Ow0KCQllbHNlDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUnXSksIHN0 cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglmdW5jdGlvbiBk b3dubG9hZF9maWxlKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9 PSAwKQ0KCQl7DQoJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDYW4gb25seSB1c2UgZG93bmxvYWRf ZmlsZSgpIGlmIGFyY2hpdmUgaXMgaW4gbWVtb3J5LiBSZWRpcmVjdCB0byBmaWxlIG90aGVy d2lzZSwgaXQgaXMgZmFzdGVyLiI7DQoJCQlyZXR1cm47DQoJCX0NCgkJc3dpdGNoICgkdGhp cy0+b3B0aW9uc1sndHlwZSddKQ0KCQl7DQoJCWNhc2UgInppcCI6DQoJCQloZWFkZXIoIkNv bnRlbnQtVHlwZTogYXBwbGljYXRpb24vemlwIik7DQoJCQlicmVhazsNCgkJY2FzZSAiYnpp cCI6DQoJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1iemlwMiIpOw0K CQkJYnJlYWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFw cGxpY2F0aW9uL3gtZ3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgInRhciI6DQoJCQloZWFk ZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC10YXIiKTsNCgkJfQ0KCQkkaGVhZGVy ID0gIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIjsNCgkJ JGhlYWRlciAuPSBzdHJzdHIoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIi8iKSA/IHN1YnN0 cigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCBzdHJycG9zKCR0aGlzLT5vcHRpb25zWyduYW1l J10sICIvIikgKyAxKSA6ICR0aGlzLT5vcHRpb25zWyduYW1lJ107DQoJCSRoZWFkZXIgLj0g IlwiIjsNCgkJaGVhZGVyKCRoZWFkZXIpOw0KCQloZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAi IC4gc3RybGVuKCR0aGlzLT5hcmNoaXZlKSk7DQoJCWhlYWRlcigiQ29udGVudC1UcmFuc2Zl ci1FbmNvZGluZzogYmluYXJ5Iik7DQoJCWhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tY2Fj aGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT02MCIpOw0KCQloZWFkZXIoIkV4cGlyZXM6 IFNhdCwgMDEgSmFuIDIwMDAgMTI6MDA6MDAgR01UIik7DQoJCXByaW50KCR0aGlzLT5hcmNo aXZlKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF90YXJfZmlsZSBleHRlbmRzIHNtZF9hdF9h cmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X3Rhcl9maWxlKCRuYW1lKQ0KCXsNCgkJJHRo aXMtPnNtZF9hdF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9 ICJ0YXIiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV90YXIoKQ0KCXsNCgkJJHB3ZCA9IGdl dGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3Jl YWNoICgkdGhpcy0+ZmlsZXMgYXMgJGN1cnJlbnQpDQoJCXsNCgkJCWlmICgkY3VycmVudFsn bmFtZSddID09ICR0aGlzLT5vcHRpb25zWyduYW1lJ10pDQoJCQkJY29udGludWU7DQoJCQlp ZiAoc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSA+IDk5KQ0KCQkJew0KCQkJCSRwYXRoID0g c3Vic3RyKCRjdXJyZW50WyduYW1lMiddLCAwLCBzdHJwb3MoJGN1cnJlbnRbJ25hbWUyJ10s ICIvIiwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSAtIDEwMCkgKyAxKTsNCgkJCQkkY3Vy cmVudFsnbmFtZTInXSA9IHN1YnN0cigkY3VycmVudFsnbmFtZTInXSwgc3RybGVuKCRwYXRo KSk7DQoJCQkJaWYgKHN0cmxlbigkcGF0aCkgPiAxNTQgfHwgc3RybGVuKCRjdXJyZW50Wydu YW1lMiddKSA+IDk5KQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90 IGFkZCB7JHBhdGh9eyRjdXJyZW50WyduYW1lMiddfSB0byBhcmNoaXZlIGJlY2F1c2UgdGhl IGZpbGVuYW1lIGlzIHRvbyBsb25nLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCX0N CgkJCSRibG9jayA9IHBhY2soImExMDBhOGE4YThhMTJhMTJhOGExYTEwMGE2YTJhMzJhMzJh OGE4YTE1NWExMiIsICRjdXJyZW50WyduYW1lMiddLCBzcHJpbnRmKCIlMDdvIiwNCgkJCQkk Y3VycmVudFsnc3RhdCddWzJdKSwgc3ByaW50ZigiJTA3byIsICRjdXJyZW50WydzdGF0J11b NF0pLCBzcHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0YXQnXVs1XSksDQoJCQkJc3ByaW50 ZigiJTAxMW8iLCAkY3VycmVudFsndHlwZSddID09IDIgPyAwIDogJGN1cnJlbnRbJ3N0YXQn XVs3XSksIHNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSksDQoJCQkJIiAg ICAgICAgIiwgJGN1cnJlbnRbJ3R5cGUnXSwgJGN1cnJlbnRbJ3R5cGUnXSA9PSAyID8gQHJl YWRsaW5rKCRjdXJyZW50WyduYW1lJ10pIDogIiIsICJ1c3RhciAiLCAiICIsDQoJCQkJIlVu a25vd24iLCAiVW5rbm93biIsICIiLCAiIiwgIWVtcHR5ICgkcGF0aCkgPyAkcGF0aCA6ICIi LCAiIik7DQoNCgkJCSRjaGVja3N1bSA9IDA7DQoJCQlmb3IgKCRpID0gMDsgJGkgPCA1MTI7 ICRpKyspDQoJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJsb2NrLCAkaSwgMSkpOw0K CQkJJGNoZWNrc3VtID0gcGFjaygiYTgiLCBzcHJpbnRmKCIlMDdvIiwgJGNoZWNrc3VtKSk7 DQoJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICRjaGVja3N1bSwgMTQ4LCA4 KTsNCg0KCQkJaWYgKCRjdXJyZW50Wyd0eXBlJ10gPT0gMiB8fCAkY3VycmVudFsnc3RhdCdd WzddID09IDApDQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQllbHNlIGlmICgk ZnAgPSBAZm9wZW4oJGN1cnJlbnRbJ25hbWUnXSwgInJiIikpDQoJCQl7DQoJCQkJJHRoaXMt PmFkZF9kYXRhKCRibG9jayk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJGZwLCAxMDQ4 NTc2KSkNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQlpZiAoJGN1cnJlbnRb J3N0YXQnXVs3XSAlIDUxMiA+IDApDQoJCQkJew0KCQkJCQkkdGVtcCA9ICIiOw0KCQkJCQlm b3IgKCRpID0gMDsgJGkgPCA1MTIgLSAkY3VycmVudFsnc3RhdCddWzddICUgNTEyOyAkaSsr KQ0KCQkJCQkJJHRlbXAgLj0gIlwwIjsNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsN CgkJCQl9DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRoaXMtPmVy cm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0gZm9yIHJl YWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRfZGF0YShw YWNrKCJhMTAyNCIsICIiKSk7DQoNCgkJY2hkaXIoJHB3ZCk7DQoNCgkJcmV0dXJuIDE7DQoJ fQ0KDQoJZnVuY3Rpb24gZXh0cmFjdF9maWxlcygpDQoJew0KCQkkcHdkID0gZ2V0Y3dkKCk7 DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWlmICgkZnAgPSAk dGhpcy0+b3Blbl9hcmNoaXZlKCkpDQoJCXsNCgkJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5t ZW1vcnknXSA9PSAxKQ0KCQkJCSR0aGlzLT5maWxlcyA9IGFycmF5ICgpOw0KDQoJCQl3aGls ZSAoJGJsb2NrID0gZnJlYWQoJGZwLCA1MTIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gdW5wYWNr KCJhMTAwbmFtZS9hOG1vZGUvYTh1aWQvYThnaWQvYTEyc2l6ZS9hMTJtdGltZS9hOGNoZWNr c3VtL2ExdHlwZS9hMTAwc3ltbGluay9hNm1hZ2ljL2EydGVtcC9hMzJ0ZW1wL2EzMnRlbXAv YTh0ZW1wL2E4dGVtcC9hMTU1cHJlZml4L2ExMnRlbXAiLCAkYmxvY2spOw0KCQkJCSRmaWxl ID0gYXJyYXkgKA0KCQkJCQknbmFtZScgPT4gJHRlbXBbJ3ByZWZpeCddIC4gJHRlbXBbJ25h bWUnXSwNCgkJCQkJJ3N0YXQnID0+IGFycmF5ICgNCgkJCQkJCTIgPT4gJHRlbXBbJ21vZGUn XSwNCgkJCQkJCTQgPT4gb2N0ZGVjKCR0ZW1wWyd1aWQnXSksDQoJCQkJCQk1ID0+IG9jdGRl YygkdGVtcFsnZ2lkJ10pLA0KCQkJCQkJNyA9PiBvY3RkZWMoJHRlbXBbJ3NpemUnXSksDQoJ CQkJCQk5ID0+IG9jdGRlYygkdGVtcFsnbXRpbWUnXSksDQoJCQkJCSksDQoJCQkJCSdjaGVj a3N1bScgPT4gb2N0ZGVjKCR0ZW1wWydjaGVja3N1bSddKSwNCgkJCQkJJ3R5cGUnID0+ICR0 ZW1wWyd0eXBlJ10sDQoJCQkJCSdtYWdpYycgPT4gJHRlbXBbJ21hZ2ljJ10sDQoJCQkJKTsN Cg0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSA9PSAweDAwMDAwMDAwKQ0KCQkJCQlicmVh azsNCgkJCQllbHNlIGlmIChzdWJzdHIoJGZpbGVbJ21hZ2ljJ10sIDAsIDUpICE9ICJ1c3Rh ciIpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJUaGlzIHNjcmlwdCBkb2VzIG5v dCBzdXBwb3J0IGV4dHJhY3RpbmcgdGhpcyB0eXBlIG9mIHRhciBmaWxlLiI7DQoJCQkJCWJy ZWFrOw0KCQkJCX0NCgkJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICIgICAg ICAgICIsIDE0OCwgOCk7DQoJCQkJJGNoZWNrc3VtID0gMDsNCgkJCQlmb3IgKCRpID0gMDsg JGkgPCA1MTI7ICRpKyspDQoJCQkJCSRjaGVja3N1bSArPSBvcmQoc3Vic3RyKCRibG9jaywg JGksIDEpKTsNCgkJCQlpZiAoJGZpbGVbJ2NoZWNrc3VtJ10gIT0gJGNoZWNrc3VtKQ0KCQkJ CQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgZXh0cmFjdCBmcm9tIHskdGhpcy0+b3B0 aW9uc1snbmFtZSddfSwgaXQgaXMgY29ycnVwdC4iOw0KDQoJCQkJLy8gQWRkZWQ6IGNyZWF0 ZSBkaXIgaWYgcmVxdWlyZWQNCgkJCQlpZiAoc3RycG9zKCRmaWxlWyduYW1lJ10sICcuLicp ID09PSBmYWxzZSkgew0KCQkJCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmaWxlWyduYW1l J10pOw0KCQkJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlWyduYW1lJ10pKSB7DQoJCQkJCQkk cmV0ID0gc21kX21rZGlyX3JlY3Vyc2l2ZSgoKGlzc2V0KCRwYXRoX3BhcnRzWydleHRlbnNp b24nXSkpID8gZGlybmFtZSgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRTLiRmaWxlWydu YW1lJ10pIDogJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSk7 DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10g PT0gMSkNCgkJCQl7DQoJCQkJCSRmaWxlWydkYXRhJ10gPSBmcmVhZCgkZnAsICRmaWxlWydz dGF0J11bN10pOw0KCQkJCQlmcmVhZCgkZnAsICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUg NTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIpKTsNCgkJ CQkJdW5zZXQgKCRmaWxlWydjaGVja3N1bSddLCAkZmlsZVsnbWFnaWMnXSk7DQoJCQkJCSR0 aGlzLT5maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRmaWxlWyd0eXBl J10gPT0gNSkNCgkJCQl7DQoJCQkJCWlmICghaXNfZGlyKCRmaWxlWyduYW1lJ10pKQ0KCQkJ CQkJbWtkaXIoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVsyXSk7DQoJCQkJfQ0KCQkJ CWVsc2UgaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZpbGVfZXhp c3RzKCRmaWxlWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAieyRm aWxlWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0N CgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDIpDQoJCQkJew0KCQkJCQlzeW1saW5r KCR0ZW1wWydzeW1saW5rJ10sICRmaWxlWyduYW1lJ10pOw0KCQkJCQljaG1vZCgkZmlsZVsn bmFtZSddLCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJG5ldyA9 IGZvcGVuKCRmaWxlWyduYW1lJ10sICJ3YiIpKQ0KCQkJCXsNCgkJCQkJZndyaXRlKCRuZXcs IGZyZWFkKCRmcCwgJGZpbGVbJ3N0YXQnXVs3XSkpOw0KCQkJCQlmcmVhZCgkZnAsICg1MTIg LSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRmaWxlWydz dGF0J11bN10gJSA1MTIpKTsNCgkJCQkJZmNsb3NlKCRuZXcpOw0KCQkJCQlAY2htb2QoJGZp bGVbJ25hbWUnXSwgMDY0NCk7IC8vIEhhcmQtY29kZWQgZm9yIG5vdyBiZWNhdXNlIHRoZSBz dHVwaWQgMDEwMDY0NCB2YWx1ZSBpbiAkZmlsZVsnc3RhdCddWzJdIGNvbmZ1c2VzIHRoZSBP Uy9QSFANCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAi Q291bGQgbm90IG9wZW4geyRmaWxlWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJCQkJCWNv bnRpbnVlOw0KCQkJCX0NCgkJCQkvLyBSZW1vdmUgb3duZXIgYW5kIGdyb3VwIHNldHRpbmcg c2luY2UgdGhlcmUgaXMgYWxtb3N0IDAgbGlrZWxpaG9vZCB0aGUgZmlsZXMgd2lsbCBoYXZl IHRoZSBzYW1lIHVzZXIvZ3JvdXAgYWNyb3NzIHN5c3RlbXMNCgkJCQkvLyBJbiBvdGhlciB3 b3JkcywgbGVhdmUgb3duZXIvZ3JvdXAgYXQgdGhlIEFwYWNoZSBkZWZhdWx0IC0tIHdoaWNo IGlzIHdoYXQgd2Ugd2FudA0KLy8JCQkJY2hvd24oJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0 YXQnXVs0XSk7DQovLwkJCQljaGdycCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzVd KTsNCgkJCQlAdG91Y2goJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs5XSk7DQoJCQkJ dW5zZXQgKCRmaWxlKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+ZXJyb3JbXSA9 ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSI7DQoNCgkJ Y2hkaXIoJHB3ZCk7DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJl dHVybiBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0KDQpj bGFzcyBzbWRfYXRfZ3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7DQoJZnVu Y3Rpb24gc21kX2F0X2d6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfdGFy X2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImd6aXAiOw0KCX0N Cg0KCWZ1bmN0aW9uIGNyZWF0ZV9nemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1sn aW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRpcigk dGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBnem9wZW4oJHRoaXMt Pm9wdGlvbnNbJ25hbWUnXSwgIndieyR0aGlzLT5vcHRpb25zWydsZXZlbCddfSIpKQ0KCQkJ ew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRlbXAgPSBm cmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWd6d3JpdGUoJGZwLCAkdGVt cCk7DQoJCQkJZ3pjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0KCQkJZWxz ZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskdGhpcy0+ b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJ CXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlID0gZ3pl bmNvZGUoJHRoaXMtPmFyY2hpdmUsICR0aGlzLT5vcHRpb25zWydsZXZlbCddKTsNCg0KCQly ZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJcmV0dXJu IEBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0KDQpjbGFz cyBzbWRfYXRfYnppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7DQoJZnVuY3Rp b24gc21kX2F0X2J6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfdGFyX2Zp bGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImJ6aXAiOw0KCX0NCg0K CWZ1bmN0aW9uIGNyZWF0ZV9iemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5t ZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRpcigkdGhp cy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBiem9wZW4oJHRoaXMtPm9w dGlvbnNbJ25hbWUnXSwgIndiIikpDQoJCQl7DQoJCQkJZnNlZWsoJHRoaXMtPmFyY2hpdmUs IDApOw0KCQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCR0aGlzLT5hcmNoaXZlLCAxMDQ4NTc2 KSkNCgkJCQkJYnp3cml0ZSgkZnAsICR0ZW1wKTsNCgkJCQliemNsb3NlKCRmcCk7DQoJCQkJ Y2hkaXIoJHB3ZCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10g PSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGZvciB3cml0aW5n LiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCgkJZWxz ZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSBiemNvbXByZXNzKCR0aGlzLT5hcmNoaXZlLCAkdGhp cy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZnVuY3Rpb24g b3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAYnpvcGVuKCR0aGlzLT5vcHRpb25zWydu YW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4dGVuZHMg c21kX2F0X2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5hbWUpDQoJ ew0KCQkkdGhpcy0+c21kX2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sn dHlwZSddID0gInppcCI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJew0KCQkk ZmlsZXMgPSAwOw0KCQkkb2Zmc2V0ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0KCQlpZiAo IWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBmb3Blbigk dGhpcy0+b3B0aW9uc1snc2Z4J10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQo JGZwLCBmaWxlc2l6ZSgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xvc2UoJGZw KTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0gc3RybGVu KCR0ZW1wKTsNCgkJCQl1bnNldCAoJHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlz LT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRoaXMtPm9w dGlvbnNbJ3NmeCddfS4iOw0KDQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMt Pm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRj dXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0aW9u c1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBsb2RlKCIg IiwgZGF0ZSgiWSBuIGogRyBpIHMiLCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJCQkkdGlt ZWRhdGUgPSAoJHRpbWVkYXRlWzBdIC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRlWzFdIDw8 IDIxKSB8ICgkdGltZWRhdGVbMl0gPDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNdIDw8IDEx KSB8ICgkdGltZWRhdGVbNF0gPDwgNSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJJGJsb2Nr ID0gcGFjaygiVnZ2dlYiLCAweDA0MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlzc2V0KCRj dXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8g MHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3N0YXQn XVs3XSA9PSAwICYmICRjdXJyZW50Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkkYmxvY2sg Lj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sgLj0g JGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7 DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAs IDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAw MEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMt Pm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUs DQoJCQkJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3Vy cmVudFsnbmFtZTInXSkgKyAxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRj dXJyZW50Wyd0eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0 KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkkZmls ZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkp Ow0KCQkJfQ0KCQkJZWxzZSBpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJew0K CQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4 MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJs b2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2sp Ow0KCQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUw LCAweDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgw MDBBLCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlz LT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRl LA0KCQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1 cnJlbnRbJ25hbWUyJ10pLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsICRjdXJy ZW50Wyd0eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zmc2V0KTsN CgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJ CQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0KCQkJfQ0K CQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIpKQ0KCQkJ ew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsNCgkJCQlm Y2xvc2UoJGZwKTsNCgkJCQkkY3JjMzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYgKCFpc3Nl dCgkY3VycmVudFsnbWV0aG9kJ10pICYmICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAx KQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+b3B0aW9u c1snbGV2ZWwnXSk7DQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJCQkJCSR0 ZW1wID0gc3Vic3RyKCR0ZW1wLCAyLCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQkJ JHNpemUgPSBzdHJsZW4oJHRlbXApOw0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsICRj cmMzMiwgJHNpemUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFt ZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJ CSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7 DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2 dnZ2dlZWIiwgMHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10g PT0gMCA/IDB4MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRb J21ldGhvZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAg OiAweDAwMDgsICR0aW1lZGF0ZSwNCgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRbJ3N0 YXQnXVs3XSwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAk Y3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCAr IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQllbHNlDQoJ CQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25h bWUnXX0gZm9yIHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlz LT5hZGRfZGF0YSgkY2VudHJhbCk7DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2soIlZ2dnZ2 VlZ2IiwgMHgwNjA1NGI1MCwgMHgwMDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVzLCBzdHJs ZW4oJGNlbnRyYWwpLCAkb2Zmc2V0LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29t bWVudCddKSA/IHN0cmxlbigkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4MDAwMCkp Ow0KDQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0KCQkJJHRo aXMtPmFkZF9kYXRhKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pOw0KDQoJCWNoZGlyKCRw d2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNl IGFzIHJlcXVpcmVkDQpmdW5jdGlvbiBzbWRfYXRfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJh eSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FjdGlvbnMnID0+ICdBY3Rpb25zJywNCgkJ J2FsbG93ZWRfc2tpbnMnID0+ICdBbGxvd2VkIHRoZW1lczonLA0KCQknYXBwbHlfc2tpbicg PT4gJ0FwcGx5IHRoaXMgdGhlbWUnLA0KCQknYXZhaWxfdGl0bGUnID0+ICdBdmFpbGFibGUg dGhlbWVzJywNCgkJJ2Jhc2VkX29uJyA9PiAnIChiYXNlZCBvbiB7c2tpbn0pJywNCgkJJ2J5 JyA9PiAnIGJ5ICcsDQoJCSdjX2J6aXAyJyA9PiAnQlppcCcsDQoJCSdjX2d6aXAnID0+ICdH WmlwJywNCgkJJ2NfdGFyJyA9PiAnVGFyJywNCgkJJ2NfemlwJyA9PiAnWmlwJywNCgkJJ2Nh c2Vfc29ydCcgPT4gJ0Nhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3Q6JywNCgkJJ2NsZWFyJyA9 PiAnbm9uZScsDQoJCSdjbG9uZScgPT4gJ0Jhc2UnLA0KCQknY29uZmlybScgPT4gJ0dvJywN CgkJJ2NvcmVfdGhlbWUnID0+ICdDYW5ub3QgZGVsZXRlIHtza2lufTogY29yZSB0aGVtZScs DQoJCSdjb3JlX3RoZW1lX2ZpbGUnID0+ICdDYW5ub3QgZGVsZXRlIGZpbGVzIGZyb20ge3Nr aW59OiBjb3JlIHRoZW1lJywNCgkJJ2NydXNoX3R5cGUnID0+ICdFeHBvcnQgY29tcHJlc3Np b24gdHlwZTonLA0KCQknY3J1c2hfZm9ybWF0JyA9PiAnRm9ybWF0OicsDQoJCSdzc2MnID0+ ICdTdHlsZXBsYXRlcycsDQoJCSdjc3MnID0+ICdTdHlsZXMnLA0KCQknZGVsZXRlX2ZhaWxl ZCcgPT4gJ0RlbGV0ZSBmYWlsZWQuIFRyeSByZW1vdmluZyBpdCBtYW51YWxseScsDQoJCSdl ZGl0X2xibCcgPT4gJ1RoZW1lIGVkaXRvcicsDQoJCSdlbXB0eV9pbmZvJyA9PiAnWW91IHNo b3VsZCBjaG9vc2UgYSBmaWxlIGZpcnN0IDotKScsDQoJCSdleHBvcnQnID0+ICdFeHBvcnQn LA0KCQknZmlsZV9ub3RfZGVsZXRlZCcgPT4gJ0ZpbGUge25hbWV9ICcuc3Ryb25nKCJub3Qi KS4nIGRlbGV0ZWQnLA0KCQknZmlsZV9zYXZlZCcgPT4gJ0ZpbGUge25hbWV9IHNhdmVkJywN CgkJJ2ZpbmRfdGhlbWUnID0+ICdCcm93c2UgdGhlbWVzJywNCgkJJ2dsb2JhbF9za2luJyA9 PiAnR2xvYmFsIHRoZW1lOicsDQoJCSdoZWxwX2xpbmsnID0+ICcoPGEgaHJlZj0ie2xpbmt9 Ij5IZWxwPC9hPiknLA0KCQknaW1nJyA9PiAnSW1hZ2VzJywNCgkJJ2ltcG9ydF9mYWlsZWQn ID0+ICdJbnN0YWxsYXRpb24gZmFpbGVkIDotKCBDaGVjayB0aGUgZmlsZSBzdHJ1Y3R1cmUn LA0KCQknaW1wb3J0X3N1Y2Nlc3MnID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4gRmls ZXMgZXh0cmFjdGVkOiB7bnVtfScsDQoJCSdpbXBvcnRfb2snID0+ICdJbnN0YWxsYXRpb24g c3VjY2Vzc2Z1bC4nLA0KCQknaW5zdGFsbF9za2luJyA9PiAnSW5zdGFsbCB0aGVtZScsDQoJ CSdpbnZhbGlkX2ZpbGUnID0+ICdSb2d1ZSBmaWxlIGRldGVjdGVkOiB7bmFtZX0nLA0KCQkn aXNfZ2xvYmFsJyA9PiAnIFtHTE9CQUxdJywNCgkJJ2pzJyA9PiAnU2NyaXB0cycsDQoJCSds YXlvdXQnID0+ICdMYXlvdXQgbWV0aG9kOicsDQoJCSdsYXlvdXRfbGlzdCcgPT4gJ0xpc3Qn LA0KCQknbGF5b3V0X2dyaWQnID0+ICdHcmlkJywNCgkJJ2xpc3RfdGl0bGUnID0+ICdJbnN0 YWxsZWQgdGhlbWVzJywNCgkJJ21hbmFnZV9sYmwnID0+ICdUaGVtZSBtYW5hZ2VyJywNCgkJ J21rZGlyX2ZhaWxlZCcgPT4gJ0Nhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciBmaWxlIHtu YW1lfS4gVHJ5IG1hbnVhbGx5IGNyZWF0aW5nIGl0LicsDQoJCSduYW1lX2VtcHR5JyA9PiAn WW91IHNob3VsZCBnaXZlIHlvdXIgdGhlbWUgYSBuYW1lIDotKScsDQoJCSduZXcnID0+ICdD cmVhdGUgbmV3IHRoZW1lJywNCgkJJ25ld19maWxlJyA9PiAnTmV3IGZpbGUnLA0KCQknbmV3 X2Nsb25lc2tpbicgPT4gJ05hbWUgb2YgY29weTonLA0KCQknbmV3X3NraW4nID0+ICdUaGVt ZSBuYW1lOicsDQoJCSdvdGhlcl9maWxlcycgPT4gJ090aGVycycsDQoJCSdwaHAnID0+ICdD b2RlJywNCgkJJ3Blcl9ncm91cCcgPT4gJ09uZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxldmVs JywNCgkJJ3Blcl9zaXRlJyA9PiAnT25lIHRoZW1lIGZvciBldmVyeW9uZScsDQoJCSdwZXJf dXNlcicgPT4gJ09uZSB0aGVtZSBwZXIgdXNlcicsDQoJCSdwcmVmc19kZWxldGVkJyA9PiAn UHJlZmVyZW5jZXMgZGVsZXRlZCcsDQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJl bmNlcyBpbnN0YWxsZWQnLA0KCQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVu Y2VzIG5vdCBpbnN0YWxsZWQuJywNCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZl cmVuY2VzIGF2YWlsYWJsZS4nLA0KCQkncHJlZnNfc29tZV9leHBsYWluJyA9PiAnSXQgaXMg ZWl0aGVyIGJlY2F1c2UgdGhpcyBpcyBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZScuYnIu J3BsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUgb3IgdGhlIHByZWZlcmVuY2VzJy5ici4n aGF2ZSBiZWNvbWUgY29ycnVwdCBzb21laG93LicsDQoJCSdwcmVmc19zb21lX29wdGlvbnMn ID0+ICdDaG9vc2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAn LmdUeHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBh bGwgZXhpc3RpbmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsDQoJCSdwcmVmc190aXRsZScg PT4gJ0FkbWluIHRoZW1lIHByZWZlcmVuY2VzJywNCgkJJ3JlbmFtZV9mYWlsZWQnID0+ICdS ZW5hbWUgZmFpbGVkJywNCgkJJ3JlbmFtZWQnID0+ICdSZW5hbWVkIHRvIHtuYW1lfScsDQoJ CSdzZXQnID0+ICdTZXQnLA0KCQknc2V0dXAnID0+ICdQcmVmZXJlbmNlcycsDQoJCSdza2lu X2dibCcgPT4gJ1RoZW1lJywNCgkJJ3NraW5fY2xvbmVkJyA9PiAnVGhlbWUgZXh0ZW5kZWQg YXMge25hbWV9JywNCgkJJ3NraW5fY3JlYXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBjcmVhdGVk JywNCgkJJ3NraW5fZGVsZXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBkZWxldGVkJywNCgkJJ3Nr aW5fZXhpc3RzJyA9PiAnVGhlbWUge25hbWV9IGFscmVhZHkgZXhpc3RzJywNCgkJJ3NraW5f ZmlsZXMnID0+ICdUaGVtZSBmaWxlcycsDQoJCSdza2luX2dyb3VwcycgPT4gJ0dyb3VwIHRo ZW1lczonLA0KCQknc2tpbl9pbWFnZXMnID0+ICdUaGVtZSBpbWFnZXMnLA0KCQknc2tpbl9s aXN0JyA9PiAnVGhlbWUgbGlzdCcsDQoJCSdza2luX2dyaWQnID0+ICdUaGVtZSBncmlkJywN CgkJJ3NraW5fbm90X2NyZWF0ZWQnID0+ICdUaGVtZSB7bmFtZX0gY291bGQgbm90IGJlIGNy ZWF0ZWQuIFRyeSBtYW51YWxseSBtYWtpbmcgdGhlIGRpcmVjdG9yeScsDQoJCSdza2luX25v dF9mb3VuZCcgPT4gJ1RoZSB0aGVtZSB7bmFtZX0gY291bGQgbm90IGJlIGZvdW5kJywNCgkJ J3NraW5fc3dpdGNoZWQnID0+ICdUaGVtZSBzd2l0Y2hlZCB0byB7c2tpbn0nLA0KCQknc2tp bl9zeXN0ZW0nID0+ICdUaGVtZSBzeXN0ZW06JywNCgkJJ3NraW5uZXInID0+ICdUaGVtZScs DQoJCSd0YWJfbmFtZScgPT4gJ0FkbWluIHRoZW1lcycsDQoJCSd0aHVtYnNpemUnID0+ICdU aHVtYiBkaW1lbnNpb25zOicsDQoJCSd0aW1lcycgPT4gJyB4ICcsDQoJCSd1bnN1cHBvcnRl ZF9jb21wcmVzc2lvbnR5cGUnID0+ICd7Y3J1c2h9IGlzIG5vdCBhIHN1cHBvcnRlZCBjb21w cmVzc2lvbiBmb3JtYXQgb24gdGhpcyBpbnN0YWxsYXRpb24nLA0KCQkndW5zdXBwb3J0ZWRf ZmlsZXR5cGUnID0+ICdGaWxlIGlzIG5vdCBvZiBhIHN1cHBvcnRlZCB0eXBlJywNCgkJJ3Vu c3VwcG9ydGVkX2Z1ZGdlJyA9PiAnOiBoaXQgU2F2ZSBhZ2FpbiB0byBzdG9yZSBhbnl3YXkn LA0KCQkndXBkYXRlJyA9PiAnVXBkYXRlJywNCgkJJ3VwbG9hZF9mYWlsZWQnID0+ICdJbWFn ZSBjb3VsZCBub3QgYmUgdXBsb2FkZWQnLA0KCQkndXBsb2FkX2ltYWdlJyA9PiAnVXBsb2Fk IGltYWdlJywNCgkJJ3VwbG9hZF9zdWNjZXNzJyA9PiAnSW1hZ2UgdXBsb2FkZWQgc3VjY2Vz c2Z1bGx5JywNCgkJJ3ZlcnNpb24nID0+ICd2JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFu Z1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6Im9yZGVyIjtz OjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtzOjIyNTczOiI8ZGl2IGlk PSJzbWRfaGVscCI+CgoJPGgxIGlkPSJ0b3AiPnNtZF9hZG1pbl90aGVtZXM8L2gxPgoKCTxw Pkluc3RhbGwsIG1hbmFnZSwgZWRpdCBhbmQgc3dpdGNoIGFkbWluLXNpZGUgdGhlbWVzIHRo ZW4gc2hhcmUgdGhlbSB3aXRoIHRoZSBjb21tdW5pdHkuPC9wPgoKCTxoMiBpZD0iZmVhdHVy ZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkNyZWF0ZSBhbmQgRWRpdCBhZG1pbi1z aWRlIHRoZW1lczwvbGk+CgkJPGxpPkVtcGxveSBpbWFnZXMsIDxzcGFuIGNsYXNzPSJjYXBz Ij5DU1M8L3NwYW4+LCBKUywgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+L1BIUCAo Zm9yIGNoYW5naW5nIG1hc3RoZWFkLCBoZWFkZXIgJmFtcDsgZm9vdGVyKSBpbiB5b3VyIHRo ZW1lPC9saT4KCQk8bGk+VXNlIGNvbnN0YW50cyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBz Ij5DU1M8L3NwYW4+IGZpbGVzPC9saT4KCQk8bGk+QmFzZSB5b3VyIHRoZW1lIG9uIGFuIGV4 aXN0aW5nIHRoZW1lIHRvIHR3ZWFrIGl0IHRvIHlvdXIgdGFzdGU8L2xpPgoJCTxsaT5FeHBv cnQgYSB0aGVtZSBwYWNrYWdlIGZvciBkaXN0cmlidXRpb24gdG8gdGhlIGNvbW11bml0eSBp biBlaXRoZXIgLnRhciwgLnRneiwgLmJ6MiBvciAuemlwIGZvcm1hdDwvbGk+CgkJPGxpPklt cG9ydCAvIGluc3RhbGwgb3RoZXIgdGhlbWVzIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly90 ZXh0Z2FyZGVuLm9yZy9sYXlvdXRzLz9jPXR4cC1hZG1pbiI+Y29tbXVuaXR5IHJlcG9zaXRv cnk8L2E+PC9saT4KCQk8bGk+QWRtaW5pc3RyYXRvciBjYW4gc2V0IGEgZ2xvYmFsIHRoZW1l LCBvciBlbmFibGUgcGVyLXVzZXIgLyBwZXItcm9sZSB0aGVtZXM8L2xpPgoJPC91bD4KCgk8 aDIgaWQ9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRh d3Nvbi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+LjwvcD4KCgk8aDIgaWQ9Imluc3Rh bGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0 aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcv cGx1Z2lucy8xMDk2L3NtZF9hZG1pbl90aGVtZXMiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9y IHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8 L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUg cGx1Z2luLiBBIG5ldyB0YWIgbGFiZWxsZWQgPGVtPkV4dGVuc2lvbnMgLSZndDsgQWRtaW4g dGhlbWVzPC9lbT4gaXMgY3JlYXRlZC4gPHN0cm9uZz5Pbmx5IHB1Ymxpc2hlcnMgd2lsbCBz ZWUgdGhpcyB0YWI8L3N0cm9uZz4uPC9wPgoKCTxwPlRoZSBwbHVnaW4gc2hvdWxkIGF1dG9t YXRpY2FsbHkgaW5zdGFsbCB0aGUgcHJlZmVyZW5jZXMgZm9yIHlvdS4gQ2xpY2sgJiM4MjE2 O1ByZWZlcmVuY2VzJiM4MjE3OyBmcm9tIHRoZSA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBBZG1p biB0aGVtZXM8L2VtPiB0YWIgb3IgPGVtPk9wdGlvbnM8L2VtPiBmcm9tIHRoZSBBZG1pbiAt Jmd0OyBQbHVnaW5zIHRhYiB0byBhbHRlciwgZGVsZXRlIG9yIHJlaW5zdGFsbCB0aGVtLjwv cD4KCgk8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNv bS92aWV3dG9waWMucGhwP2lkPTMwOTUyIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGlu Zm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1 Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBm cm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuIFRoZSBwcmVmZXJlbmNlcyB3aWxs IGF1dG9tYXRpY2FsbHkgYmUgcmVtb3ZlZC4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgcmVtb3Zp bmcgdGhlIHBsdWdpbiBkb2VzIDxzdHJvbmc+bm90IHJlbW92ZSBhbnkgdGhlbWVzIHlvdSBo YXZlIGluc3RhbGxlZCwgbm9yIGRvZXMgaXQgcmVtb3ZlIHBlci11c2VyIHRoZW1lIHByZWZl cmVuY2VzPC9zdHJvbmc+LiBQZXItdXNlciBwcmVmcyB3aWxsIHNpbXBseSBiZSBpZ25vcmVk IHdoZW4gdGhlIHBsdWdpbiBpcyBkZWxldGVkLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2Fn ZTwvaDI+CgoJPHA+T24gdGhlIDxlbT5FeHRlbnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1lczwv ZW0+IHRhYiBpcyBhIGxpc3Qgb3IgZ3JpZCBjb250YWluaW5nIGluc3RhbGxlZCB0aGVtZXMu IE91dCBvZiB0aGUgYm94LCB0aGVyZSB3aWxsIGJlIHR3byBhdmFpbGFibGU6IDxlbT5jbGFz c2ljPC9lbT4gYW5kIDxlbT5yZW1vcmE8L2VtPi4gPHN0cm9uZz5JdCYjODIxNztzIGFkdmlz YWJsZSBub3QgdG8gY2hhbmdlIHRoZXNlIHRoZW1lczwvc3Ryb25nPiBzbyB5b3UgY2FuIGFs d2F5cyBnbyBiYWNrIHRvIHRoZW0gaWYgZXZlcnl0aGluZyBnb2VzIHNpZGV3YXlzLiBQbHVz IGl0JiM4MjE3O3MgYSB2ZXJ5IHVzZWZ1bCBzdGFydGluZyBwb2ludCBmcm9tIHdoaWNoIHRv IDxhIGhyZWY9IiNjbG9uZSI+YmFzZTwvYT4gYSA8YSBocmVmPSIjbmV3Ij5uZXcgdGhlbWU8 L2E+LjwvcD4KCgk8cD5JbiB0aGUgbGlzdCBsYXlvdXQsIHRoZSBjb2x1bW5zIGFyZTo8L3A+ CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWU8L3NwYW4+IDogVGhlIG5h bWUgb2YgdGhlIHRoZW1lIGFuZCAob3B0aW9uYWwpIHRodW1ibmFpbCBhc3NpZ25lZCB0byBp dC4gQ2xpY2sgdG8gPGEgaHJlZj0iI3N3aXRjaCI+YWN0aXZhdGU8L2E+IHRoZSB0aGVtZS4g SWYgdGhlIHRoZW1lIGlzIGJhc2VkIG9uIGFub3RoZXIgdXNlciYjODIxNztzIHRoZW1lLCB0 aGlzIGRlcGVuZGVuY3kgd2lsbCBiZSBzaG93biBpbiBwYXJlbnRoZXNlcyBhZnRlciB0aGUg dGhlbWUgbmFtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BdXRob3I8L3NwYW4+ IDogWW91ISBMaW5rZWQgdG8geW91ciB3ZWIgc2l0ZSBpZiB5b3Ugc3VwcGx5IGl0IGluIHlv dXIgPGEgaHJlZj0iI2Fib3V0Ij5NYW5pZmVzdDwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+VmVyc2lvbjwvc3Bhbj4gOiBUaGVtZSB2ZXJzaW9uIG51bWJlciBpbiA8Y29k ZT5tYWpvci5taW5vci5zdWJyZXY8L2NvZGU+IG5vdGF0aW9uLiBJZiBhIG5ld2VyIHZlcnNp b24gb2YgYSB0aGVtZSBpcyBhdmFpbGFibGUgZnJvbSBUZXh0Z2FyZGVuLCB0aGUgdmVyc2lv biBudW1iZXIgd2lsbCBiZSBoeXBlcmxpbmtlZCB0byB0aGUgdGhlbWUgb24gVGV4dGdhcmRl biBzbyB5b3UgbWF5IGRvd25sb2FkL2luc3RhbGwgaXQuIFRoZSB2ZXJzaW9ucyBhcmUgY2hl Y2tlZCwgYXQgbW9zdCwgb25jZSBldmVyeSAyNCBob3VycyB0byBhdm9pZCBoYW1tZXJpbmcg dGhlIHNlcnZlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5EZXNjcmlwdGlvbjwv c3Bhbj4gOiBCcmllZiBvbmUtIG9yIHR3by1saW5lciBleHBsYWluaW5nIHlvdXIgdGhlbWUu IElmIHlvdSBoYXZlIG9mZmVyZWQgYSBoZWxwIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+IGluIHlvdXIgbWFuaWZlc3QsIGl0IHdpbGwgYmUgbGlua2VkIGhlcmUgYXMgd2VsbDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BY3Rpb25zPC9zcGFuPiA6IEFjdGlvbnMg dG8gcGVyZm9ybSBvbiBlYWNoIHRoZW1lCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5bTmV3IHRoZW1lXTwvc3Bhbj4gOiA8YSBocmVmPSIjbmV3Ij5DcmVhdGU8L2E+IGEgbmV3 IGJsYW5rLCBlbXB0eSBkaXJlY3RvcnkgcmVhZHkgZm9yIHlvdXIgdGhlbWUuIE5vIHNwYWNl cyAvIG9kZCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBuYW1lIGFuZCBpdCBtdXN0 IG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PltFZGl0XTwvc3Bhbj4gOiA8YSBocmVmPSIjZWRpdF90aGVtZSI+RWRpdDwvYT4gdGhlIHZh cmlvdXMgZGV0YWlscywgZmlsZXMgYW5kIGNvbnRlbnQgd2l0aGluIHRoZSB0aGVtZTwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bQmFzZV08L3NwYW4+IDogPGEgaHJlZj0iI2Ns b25lIj5FeHRlbmQ8L2E+IG9uZSBvZiB0aGUgZXhpc3RpbmcgdGhlbWVzIHRvIG1ha2UgeW91 ciBvd24gY2hhbmdlcyB1bmRlciBhIG5ldyBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPltFeHBvcnRdPC9zcGFuPiA6IDxhIGhyZWY9IiNleHBvcnQiPlNhdmU8L2E+IHRo ZSB0aGVtZSBwYWNrYWdlIHRvIHlvdXIgaGFyZCBkcml2ZSBmb3IgZGlzdHJpYnV0aW9uL2Jh Y2t1cCBpbiB5b3VyIGNob3NlIGNvbXByZXNzaW9uIGZvcm1hdDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5bRGVsZXRlXTwvc3Bhbj4gOiBDb21wbGV0ZWx5IDxhIGhyZWY9IiNk ZWxldGUiPnJlbW92ZTwvYT4gdGhlIHRoZW1lLiBOb3QgYXZhaWxhYmxlIHRvIHRoZSBjb3Jl IHRoZW1lcywgZm9yIG9idmlvdXMgcmVhc29ucyEgQWxzbyBub3QgYXZhaWxhYmxlIGlmIGEg dGhlbWUgaGFzIGJlZW4gdXNlZCBhcyBhIGJhc2lzIGZvciBhbm90aGVyIHRoZW1lIGluIHRo ZSBjdXJyZW50IHNpdGU8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5UaGUgcm93IG9m IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUgaXMgc2hhZGVkIGFuZCB0aGUgY3VycmVu dCBnbG9iYWwgdGhlbWUgdGhhdCBpcyBpbiBlZmZlY3QgaXMgaGlnaGxpZ2h0ZWQgd2l0aCBh biBhc3RlcmlzayAoKikuIFRoZSBncmlkIHZpZXcgaGFzIHBhcnRzIG9mIHRoZSBhYm92ZSBp bmZvcm1hdGlvbiwgbGFpZCBvdXQgc2xpZ2h0bHkgZGlmZmVyZW50bHkuPC9wPgoKCTxoMiBp ZD0ic3dpdGNoIj5Td2l0Y2hpbmcgdGhlbWVzPC9oMj4KCgk8cD5BcyB0aGUgYWRtaW5pc3Ry YXRvciwgeW91IGNhbiBwbGF5IEdvZCBvdmVyIGV2ZXJ5b25lIGVsc2UmIzgyMTc7cyB0aGVt ZXMuIFlvdSBhcmUgZnJlZSB0byBpbnN0YWxsIGFzIG1hbnkgYXMgeW91IHdpc2ggYW5kIHN3 aXRjaCBiZXR3ZWVuIHRoZW0gd2l0aG91dCBhZmZlY3RpbmcgYW55IG90aGVyIGxvZ2lucy4g Tm9ib2R5IGVsc2Ugd2lsbCBldmVuIGtub3cgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBwbHVn aW4uPC9wPgoKCTxwPklmLCBob3dldmVyLCB5b3UgdmlzaXQgdGhlIDxhIGhyZWY9IiNzZXR1 cCI+UHJlZmVyZW5jZXM8L2E+IHBhZ2UgeW91IGNhbiBjb25maWd1cmUgdGhlIHRoZW1lcyB0 aGF0IG90aGVycyB1c2UuIFRoZXJlIGFyZSB0aHJlZSBtZWNoYW5pc21zIHRvIGNob29zZSBm cm9tOjwvcD4KCgk8dWw+CgkJPGxpPkZvcmNlIG9uZSB0aGVtZSBmb3IgYWxsIHVzZXJzIChl eGNlcHQgeW91cnNlbGYpPC9saT4KCQk8bGk+Rm9yY2Ugb25lIHRoZW1lIGZvciBlYWNoIHVz ZXIgcHJpdmlsZWdlIGxldmVsIChleGNlcHQgeW91cnNlbGYpPC9saT4KCQk8bGk+QWxsb3cg YWxsIHVzZXJzIChleGNlcHQgeW91cnNlbGYpIHRvIHBpY2sgdGhlaXIgZmF2b3VyaXRlIHRo ZW1lIGZyb20gYSBzaG9ydGxpc3QgeW91IGRlZmluZTwvbGk+Cgk8L3VsPgoKCTxwPkF0IGFs bCB0aW1lcywgeW91IGNhbiBjaG9vc2UgYW55IHRoZW1lIHlvdSBwbGVhc2UgZm9yIHlvdXIg b3duIHVzZS4gVGhpcyBhbGxvd3MgdHJpYWxsaW5nLCB0d2Vha2luZyBhbmQgdGVzdGluZyBv ZiB0aGVtZXMgYmVmb3JlIHVubGVhc2hpbmcgdGhlbSBvbiB5b3VyIHVzZXIgYmFzZS48L3A+ CgoJPGgyIGlkPSJzZXR1cCI+VGhlbWUgcHJlZmVyZW5jZXM8L2gyPgoKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPkNhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3Q8L3NwYW4+IDog V2hlbiBzZXQgdG8gPGNvZGU+WWVzPC9jb2RlPiwgdXBwZXItY2FzZSB0aGVtZSBuYW1lcyB0 YWtlIHByZWNlZGVuY2Ugb3ZlciBsb3dlciBjYXNlIHRoZW1lIG5hbWVzIGFuZCB3aWxsIGJl IGxpc3RlZCBmaXJzdC4gRm9yIGV4YW1wbGUsIDMgdGhlbWUgY2FsbGVkICYjODIxNjtBbmdl bGljJiM4MjE3OywgJiM4MjE2O2JhcmJhcmljJiM4MjE3OyBhbmQgJiM4MjE2O0NvaGVzaXZl JiM4MjE3OyB3aWxsIGJlIG9yZGVyZWQ6IDxjb2RlPkFuZ2VsaWMsIENvaGVzaXZlLCBiYXJi YXJpYzwvY29kZT4uIFNldCB0byA8Y29kZT5ObzwvY29kZT4gdG8gbWl4IHVwcGVyIGFuZCBs b3dlci1jYXNlIHRoZW1lcyB0b2dldGhlciAob3JkZXIgaXMgdGhlbiA8Y29kZT5BbmdlbGlj LCBiYXJiYXJpYywgQ29oZXNpdmU8L2NvZGU+ICkuIFRoZSAmIzgyMTY7Y2xhc3NpYyYjODIx NzsgdGhlbWUgaXMgPGVtPmFsd2F5czwvZW0+IGxpc3RlZCBmaXJzdC48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+RXhwb3J0IGNvbXByZXNzaW9uIHR5cGU8L3NwYW4+IDogRGVw ZW5kaW5nIG9uIHlvdXIgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiBhbmQgd2hpY2ggbW9kdWxlcyBoYXZlIGJlZW4gY29tcGlsZWQgaW50byBpdCwgeW91IHdp bGwgc2VlIGEgbGlzdCBvZiBjb21wcmVzc2lvbiBmb3JtYXRzIGhlcmUuIENob29zZSBvbmUg dGhhdCBzdWl0cyB5b3UgYXMgdGhlIGRlZmF1bHQgaW4gd2hpY2ggdG8gZXhwb3J0IHlvdXIg dGhlbWUgcGFja2FnZXMuIFlvdSBtYXkgY2hvb3NlIGZyb20gPGVtPlRhcjwvZW0+LCA8ZW0+ R1ppcDwvZW0+ICh0aGUgZGVmYXVsdDogYWN0dWFsbHkgdGFyK2d6aXApLCA8ZW0+QnppcDI8 L2VtPiAodGFyK2J6aXApLCBvciA8ZW0+WmlwPC9lbT4uPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPkxheW91dCBtZXRob2Q8L3NwYW4+IDogQ2hvb3NlIGZyb20gYSBMaXN0IFZp ZXcgKHVzZWZ1bCBpZiB5b3UgcHJlZmVyIHRvIGhpZGUgb3IgdXNlIHNtYWxsIHRodW1icykg b3IgYSBHcmlkIFZpZXcgb2YgaW5zdGFsbGVkIHRoZW1lcy4gVGhpcyBzZXR0aW5nIGFwcGxp ZXMgdG8gYm90aCBhZG1pbiBhbmQgdXNlciB0aGVtZSBzZWxlY3Rpb24gdGFicy4gRGVmYXVs dDogR3JpZCBWaWV3PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRodW1iIHNpemU8 L3NwYW4+IDogU2V0IHRoZSB0aHVtYm5haWwgZGltZW5zaW9ucyBpbiB0aGUgdGhlbWUgbGlz dC4gU2V0IGVpdGhlciBkaW1lbnNpb24gdG8gMCB0byB0dXJuIG9mZiB0aHVtYm5haWwgZGlz cGxheS4gRGVmYXVsdDogMjYwICYjMjE1OyAxNTBweDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5HbG9iYWwgdGhlbWU8L3NwYW4+IDogU2V0IHRoZSB0aGVtZSBmb3IgYWxsIG90 aGVyIHVzZXJzLiBJZiB1c2luZyAmIzgyMTY7T25lIHRoZW1lIGZvciBldmVyeW9uZSYjODIx NzsgdGhlIHRoZW1lIGNob3NlbiBoZXJlIGlzIGZvcmNlZCB1cG9uIGFsbCB1c2Vycy4gSWYg dXNpbmcgYW55IG9mIHRoZSBvdGhlciBtZWNoYW5pc21zLCB0aGlzIHRoZW1lIGlzIGEgZmFs bGJhY2sgc2hvdWxkIHNvbWV0aGluZyBnbyBwZWFyLXNoYXBlZC48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+VGhlbWUgc3lzdGVtPC9zcGFuPiA6IEFzIGRldGFpbGVkIGluIDxh IGhyZWY9IiNzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8L2E+LCB5b3UgbWF5IGNob29zZSB0 aGUgd2F5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpbnRlcmZhY2UgaXMg cHJlc2VudGVkIHRvIG90aGVyIHVzZXJzOgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+T25lIHRoZW1lIGZvciBldmVyeW9uZTwvc3Bhbj4gOiB1c2VzIHRoZSBHbG9iYWwgdGhl bWUgZm9yIGFsbCB1c2VyczsgdGhleSBoYXZlIG5vIGNob2ljZSBpbiB0aGUgbWF0dGVyPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxl dmVsPC9zcGFuPiA6IGFsbG93cyB5b3UgdG8gYXNzaWduIG9uZSBvciBtb3JlIHByaXZpbGVn ZSBsZXZlbHMgdG8gYSB0aGVtZS4gQ2hvb3NlIGEgdGhlbWUgZnJvbSB0aGUgbGVmdC1oYW5k IGxpc3QgYW5kIHRoZW4gc2hpZnQvY3RybC1jbGljayB0aGUgcHJpdmlsZWdlIGxldmVscyB0 byBhc3NpZ24gdGhlbS4gRmxpY2sgYmV0d2VlbiB0aGVtZXMgaW4gdGhlIGxlZnQgY29sdW1u IHRvIHNlZSB3aGljaCBvbmVzIGFyZSBzZXQgZm9yIHZhcmlvdXMgdXNlciBsZXZlbHMsIG9y IGhvdmVyIG92ZXIgYSBwcml2aWxlZ2UgbGV2ZWwgdG8gc2VlIGEgdG9vbHRpcC4gT25seSBv bmUgbGV2ZWwgY2FuIGJlIGFzc2lnbmVkIHRvIGEgdGhlbWUgc28gaWYgeW91IGNsaWNrIGEg bGV2ZWwgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIHRvIGFub3RoZXIgdGhlbWUs IGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0cyBvcmlnaW5hbCBhc3NpZ25tZW50LiBOb3Rl IHlvdSBtdXN0IFNhdmUgdGhlIGNoYW5nZXMgZm9yIHRoZW0gdG8gdGFrZSBlZmZlY3Q8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+T25lIHRoZW1lIHBlciB1c2VyPC9zcGFuPiA6 IGRlZmluZSBhIHNob3J0bGlzdCBmcm9tIHRoZSBhdmFpbGFibGUgaW5zdGFsbGVkIHRoZW1l cyB0byBvZmZlciB0byBhbGwgdXNlcnMuIEEgbmV3IHRhYiB3aWxsIGFwcGVhciB0byBvdGhl ciB1c2VycyB1bmRlciA8ZW0+QWRtaW48L2VtPiB0aGF0IGlzIGVzc2VudGlhbGx5IGEgY3V0 LWRvd24gdmVyc2lvbiBvZiB0aGUgPGVtPkFkbWluIHRoZW1lczwvZW0+IHRhYi4gVXNlcnMg Y2FuIHN3aXRjaCBiZXR3ZWVuIGFueSBvbmUgb2YgdGhlIHRoZW1lcyB5b3UgaGF2ZSBwZXJt aXR0ZWQuPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+CgoJPHA+UmVtZW1iZXIgdG8gY2xpY2sg U2F2ZSB0byBhcHBseSB0aGUgY2hhbmdlcy4gQ2xpY2tpbmcgYW55IG90aGVyIHRhYiB3aWxs IHVuZG8gYW55IG1vZGlmaWNhdGlvbnMgeW91IG1heSBoYXZlIG1hZGUuPC9wPgoKCTxoMiBp ZD0iYnJvd3NlIj5Ccm93c2UgdGhlbWVzPC9oMj4KCgk8cD5DbGljayB0aGlzIGJ1dHRvbiB0 byBiZSB0YWtlbiB0byB0aGUgY2VudHJhbCBhZG1pbiB0aGVtZSByZXBvc2l0b3J5IHdoZXJl IHlvdSBtYXkgYnJvd3NlIHRoZW1lcyBhbmQgZG93bmxvYWQgdGhlbSByZWFkeSBmb3IgaW5z dGFsbGF0aW9uLjwvcD4KCgk8aDIgaWQ9ImltcG9ydCI+SW5zdGFsbCBhIHRoZW1lPC9oMj4K Cgk8cD5Mb2NhdGUgYSB0aGVtZSBwYWNrYWdlIG9uIHlvdXIgaGFyZCBkcml2ZSBvciBwYXN0 ZSBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRvIGEgcGFja2FnZSBpbiB0aGUg Ym94IGF0IHRoZSB0b3Agb2YgdGhlIHBhZ2UuIEhpdCA8c3Ryb25nPlVwbG9hZDwvc3Ryb25n PiBhbmQgaXQgd2lsbCBiZSBpbnN0YWxsZWQuIElmIGl0IGFscmVhZHkgZXhpc3RzIGl0IHdp bGwgYmUgb3ZlcndyaXR0ZW4uIE5vdGUgdGhhdCB5b3UgbWF5IHJlY2VpdmUgYSB3YXJuaW5n IGlmIHRoZSB0aGVtZSBpcyBwYWNrYWdlZCB1c2luZyBhIGNvbXByZXNzaW9uIGFsZ29yaXRo bSB0aGF0IGlzIG5vdCBidWlsdCBpbnRvIHlvdXIgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0i Y2FwcyI+UEhQPC9zcGFuPi48L3A+CgoJPGgyIGlkPSJuZXciPkNyZWF0ZSBhIG5ldyAoZW1w dHkpIHRoZW1lPC9oMj4KCgk8cD5DbGljayA8c3Ryb25nPkNyZWF0ZSBuZXcgdGhlbWU8L3N0 cm9uZz4gYW5kIGEgYm94IHdpbGwgc2xpZGUgZG93biBhbGxvd2luZyB5b3UgdG8gZ2l2ZSB5 b3VyIHRoZW1lIGEgbmFtZS4gIE5vdGUgdGhhdCB0aGUgZWRpdCBib3ggYXV0b21hdGljYWxs eSB0YWtlcyBmb2N1cywgc28geW91IGNhbiB0eXBlIHN0cmFpZ2h0IGF3YXkuPC9wPgoKCTxw Pk5vIHNwYWNlcyBvciBvZGQgY2hhcmFjdGVycyBhcmUgcGVybWl0dGVkLCBiZWNhdXNlIHRo ZSBuYW1lIHlvdSBlbnRlciBpcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgd2ls bCBiZSBjcmVhdGVkIGluIHRoZSA8ZW0+dGhlbWU8L2VtPiBmb2xkZXIgYW5kIHRoZW0gbmFt ZSBvZiB5b3VyIHRoZW1lJiM4MjE3O3MgY2xhc3MuIElmIHlvdSBkbyBtYW5hZ2UgdG8gdXNl IG9kZCBjaGFyYWN0ZXJzLCB0aGUgbmFtZSB3aWxsIGJlICYjODIyMDtkdW1iZWQgZG93biYj ODIyMTsgZm9yIHlvdS4gT25jZSB0aGUgbmFtZSBpcyBzZXQsIHRoYXQgaXMgaXQ7IHlvdSBj YW5ub3QgY2hhbmdlIGl0IGZyb20gd2l0aGluIHRoZSBpbnRlcmZhY2UuIFRoZSBvbmx5IHdh eSB0byByZW5hbWUgaXQgaXMgdmlhIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bh bj4gY2xpZW50IGFuZCBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmls ZSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPC9wPgoKCTxwPkluIG9yZGVyIHRv IGF2b2lkIG5hbWUgY2xhc2hlcyB3aXRoIG90aGVyIHBlb3BsZSYjODIxNztzIHRoZW1lcywg aXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgdGhlbWVzIHlvdSBkZXNpZ24gYmVnaW4gd2l0 aCBhIHVuaXF1ZSAzLWxldHRlciBwcmVmaXggb2YgeW91ciBvd24gY2hvb3NpbmcsIHBsdXMg YW4gdW5kZXJzY29yZSAmIzgyMTI7IGV4YWN0bHkgbGlrZSBwbHVnaW5zLiBUaHVzLCBzbWRf Qmx1ZU1lYW5pZSBtaWdodCB3ZWxsIGJlIHRoZSBuYW1lIG9mIGEgdGhlbWUuPC9wPgoKCTxw PldoZW4geW91IGhhdmUgbmFtZWQgeW91ciB0aGVtZSwgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ry b25nPiB0byBjcmVhdGUgYSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgY2FuIHJlc2lkZS48L3A+ CgoJPGgyIGlkPSJjbG9uZSI+RXh0ZW5kIGFuIGV4aXN0aW5nIHRoZW1lPC9oMj4KCgk8cD5D bGljayA8c3Ryb25nPkJhc2U8L3N0cm9uZz4gdG8gY3JlYXRlIGEgbmV3IHRoZW1lIGJhc2Vk IG9uIGFub3RoZXIuIEEgYm94IHdpbGwgc2xpZGUgZG93biAodGhlIGN1cnNvciBmb2N1c2Vz IGF1dG9tYXRpY2FsbHkgaW4gdGhlIGJveCBmb3IgeW91KSBzbyB5b3UgbWF5IGVudGVyIHRo ZSBuYW1lIG9mIHlvdXIgY29weS4gT2JzZXJ2ZSB0aGUgPGEgaHJlZj0iI25ldyI+bmFtaW5n IGNvbnZlbnRpb248L2E+LCB0aGVuIGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3Jl YXRlIHRoZSBuZXcgdGhlbWUuPC9wPgoKCTxwPjxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+UGxl YXNlIHJlbWVtYmVyLCB5b3VyIHRoZW1lIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBjaG9z ZW4gdGhlbWUgYW5kIDxzdHJvbmc+Ym90aDwvc3Ryb25nPiBtdXN0IGJlIHByZXNlbnQgb24g YSB1c2VyJiM4MjE3O3Mgc3lzdGVtIGZvciB0aGUgdGhlbWUgdG8gd29yazwvc3Bhbj4uIEl0 IGlzIHdvcnRoIGVuc3VyaW5nIHRoYXQgdXNlcnMgb2YgeW91ciB0aGVtZSBhcmUgbWFkZSBh d2FyZSBvZiB0aGlzIGRlcGVuZGVuY3kgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZnJ1c3RyYXRp b247IHBlcmhhcHMgYWRkIGEgbGluayB0byB0aGUgdGhlbWUmIzgyMTc7cyBiYXNlLCBtZW50 aW9uIHRoZSBkZXBlbmRlbmN5IGluIHRoZSBIZWxwIGxpbmsgYW5kL29yIGluIHRoZSB0aGVt ZSYjODIxNztzIGFydGljbGUgb24gVGV4dGdhcmRlbi4gWW91IHdpbGwgbm90IGJlIGFibGUg dG8gZGVsZXRlIGFueSB0aGVtZSBmcm9tIHRoZSBsaXN0IHRoYXQgaGFzIHN1Y2ggYSBkZXBl bmRlbmN5LCBvdGhlcndpc2UgeW91ciBhZG1pbiBzaWRlIHdpbGwgc3RvcCB3b3JraW5nLjwv cD4KCgk8aDIgaWQ9ImV4cG9ydCI+RXhwb3J0IGEgdGhlbWU8L2gyPgoKCTxwPklmIHlvdSB3 aXNoIHRvIGJhY2sgdXAgYSB0aGVtZSBvciBzaGFyZSBpdCB3aXRoIG90aGVycywgY2xpY2sg PHN0cm9uZz5FeHBvcnQ8L3N0cm9uZz4uIEEgYm94IHdpbGwgc2xpZGUgZG93biBvZmZlcmlu ZyB5b3UgYSBjaG9pY2Ugb2YgY29tcHJlc3Npb24gZm9ybWF0czsgdGhlIGRlZmF1bHQgaXMg dGhlIGZvcm1hdCB5b3UgY2hvc2UgZnJvbSB0aGUgPGEgaHJlZj0iI3NldHVwIj5QcmVmZXJl bmNlczwvYT4gcGFnZS4gQ2xpY2sgPGVtPltHb108L2VtPiB0byBleHBvcnQgdGhlIHRoZW1l IGFuZCBzYXZlIGl0IHRvIHlvdXIgY29tcHV0ZXIuIEFsbCByZWxhdGVkIGZpbGVzIGluIHRo ZSB0aGVtZSB3aWxsIGJlIHBhY2thZ2VkIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgZG93bmxv YWQgZmlsZSBmb3IgY29udmVuaWVuY2UuPC9wPgoKCTxoMiBpZD0iZGVsZXRlIj5EZWxldGUg YSB0aGVtZTwvaDI+CgoJPHA+SGl0IHRoaXMgKGFuZCBjb25maXJtIHlvdSBhcmUgc3VyZSkg dG8gcmVtb3ZlIHRoZSBlbnRpcmUgdGhlbWUgZm9sZGVyIGFuZCBjb250ZW50cyBmcm9tIHRo ZSBmaWxlIHN5c3RlbS4gPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5UaGlzIGlzIG5vdCB1bmRv YWJsZSwgc28gYmUgY2FyZWZ1bDwvc3Bhbj4uPC9wPgoKCTxoMiBpZD0iZWRpdF90aGVtZSI+ RWRpdCBhIHRoZW1lPC9oMj4KCgk8cD5BIHRoZW1lIGlzIGEgY29sbGVjdGlvbiBvZiBmaWxl cy4gVGhlIGZpbGVzIGFsbCByZXNpZGUgaW4gdGhlaXIgb3duIHNlbGYtY29udGFpbmVkIGRp cmVjdG9yeSB1bmRlciA8Y29kZT50ZXh0cGF0dGVybi90aGVtZTwvY29kZT4uIFRoZSBuYW1l IG9mIHRoZSBkaXJlY3RvcnkgaXMgdGhlIG5hbWUgb2YgeW91ciB0aGVtZSwgaGVuY2UgdGhl IHJlYXNvbiBpdCBjYW5ub3QgY29udGFpbiBhbnkgb2JzY3VyZSBjaGFyYWN0ZXJzIHRoYXQg d291bGQgYmUgaW52YWxpZCBpbiB0aGUgZmlsZXN5c3RlbSBvciA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiB2YXJpYWJsZXMuPC9wPgoKCTxwPldoZW4geW91IGNsaWNrICYjODIx NjtFZGl0JiM4MjE3OyB5b3Ugd2lsbCBiZSB0YWtlbiB0byBhIHNjcmVlbiB0aGF0IGFsbG93 cyB5b3UgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSB0aGVtZS4gVGhlIEVkaXQgc2NyZWVuIGlz IGJyb2tlbiBpbnRvIHRocmVlIHZlcnRpY2FsIHBhcnRzLCBhcyBmb2xsb3dzOjwvcD4KCgk8 aDMgaWQ9ImVkaXRfaW1nIj5JbWFnZSBoYW5kbGluZzwvaDM+CgoJPHA+RWFjaCB0aGVtZSBj YW4gY29udGFpbiBhbiBvcHRpb25hbCB0aHVtYm5haWwuIFRoaXMgaXMgYW4gaW1hZ2Ugb2Yg MjYwJiMyMTU7MTUwcHggaW4gc2l6ZSwgY2FsbGVkIDxjb2RlPnNjcmVlbnNob3QucG5nPC9j b2RlPiAob3IgPGNvZGU+LmpwZzwvY29kZT4sIDxjb2RlPi5naWY8L2NvZGU+LCBldGMpIGlu IHlvdXIgdGhlbWUgZGlyZWN0b3J5LiBOb3RlIGl0IHdpbGwgYmUgc3F1YXNoZWQgLyBzdHJl dGNoZWQgdG8gZml0IHlvdXIgdGh1bWJuYWlsIGRpbWVuc2lvbnMgc2V0IGluIHRoZSBwbHVn aW4gcHJlZnMuPC9wPgoKCTxwPk90aGVyIGltYWdlcyBmb3IgdXNlIGluIDxzcGFuIGNsYXNz PSJjYXBzIj5DU1M8L3NwYW4+IHJ1bGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIGEgdGhlbWUu IEJyb3dzZSBmb3IgYW4gaW1hZ2UgYW5kIHNlbGVjdCBpdCwgdGhlbiBjbGljayA8c3Ryb25n PlVwbG9hZDwvc3Ryb25nPiB0byBhZGQgaXQgdG8gdGhlIHRoZW1lLiBZb3UgY2FuIGN1cnJl bnRseSBvbmx5IHVwbG9hZCBvbmUgaW1hZ2UgYXQgYSB0aW1lLCB0aG91Z2ggeW91IGNhbiBk ZWxldGUgb25lIG9yIG1vcmUgYXQgb25jZSBieSBTaGlmdC9DdHJsIGNsaWNraW5nIHRoZSBv bmVzIHlvdSB3aXNoIHRvIHJlbW92ZSBhbmQgaGl0dGluZyB0aGUgJiM4MjE2O3gmIzgyMTc7 IGJ1dHRvbi4gPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5XYXJuaW5nOiBmaWxlcyB3aWxsIGJl IGRlbGV0ZWQgaW1tZWRpYXRlbHksIHdpdGhvdXQgY29uZmlybWF0aW9uLjwvc3Bhbj48L3A+ CgoJPHA+VGhlIGJlc3Qgd2F5IHRvIHJlZmVyIHRvIGltYWdlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+cyBpbiBzdHlsZXNoZWV0cyBpcyB3aXRoIGEgcmVsYXRpdmUgcGF0aDo8 L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4ubXlTdHlsZSB7 CiAgIGJhY2tncm91bmQ6IHVybChteS1pbWFnZS5naWYpOwp9CjwvY29kZT48L3ByZT4KCgk8 aDMgaWQ9ImVkaXRfY29udGVudCI+Q29udGVudDwvaDM+CgoJPHA+VGhlIGNlbnRyYWwgcGFu ZSBpcyB3aGVyZSB5b3UgZWRpdCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGVzIGluIHlvdXIg dGhlbWUuIFRoZSBzbWFsbCBlZGl0IGJveCBhdCB0aGUgdG9wIGlzIHRoZSBmaWxlbmFtZSBh bmQgdGhlIGxhcmdlIHRleHQgYXJlYSBpcyBpdHMgY29udGVudC4gQ2xpY2sgPHN0cm9uZz5T YXZlPC9zdHJvbmc+IHRvIGNvbW1pdCBjaGFuZ2VzLiBZb3UgbWF5IGZyZWVseSByZW5hbWUg YW55IGZpbGUgeW91IGFyZSBlZGl0aW5nLjwvcD4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPklt cG9ydGFudDogaWYgeW91IHNlbGVjdCBhIGZpbGUsIGVkaXQgaXQsIHJlbmFtZSBpdCwgYW5k IGNsaWNrIDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiB5b3Ugd2lsbCBvdmVyd3JpdGUgd2hhdGV2 ZXIgd2FzIGluIHRoZSBwcmV2aW91cyBmaWxlICYjODIxMjsgZXZlbiBpZiB5b3UgZW1wdHkg dGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0YXJlYSBpbiBhbiBlZmZvcnQgdG8gbWFrZSBhICYj ODIyMDtuZXcmIzgyMjE7IG9uZS4gSWYgeW91IHdpc2ggdG8gY3JlYXRlIGEgbmV3IGZpbGUs IGl0IGlzIHNhZmVyIHRvIGNsaWNrIHRoZSA8c3Ryb25nPk5ldyBmaWxlPC9zdHJvbmc+IGJ1 dHRvbiBpbiB0aGUgcmlnaHQgaGFuZCBjb2x1bW4gdG8gZW5zdXJlIHlvdSBhcmUgbm90IGVk aXRpbmcgYW4gZXhpc3RpbmcgZmlsZSBieSBtaXN0YWtlLjwvcD4KCgk8cD5JdCBpcyBhbHNv IHdvcnRoIG5vdGluZyB0aGF0IGZpbGUgcGVybWlzc2lvbnMgdmFyeSBmcm9tIGhvc3QgdG8g aG9zdC4gSWYgeW91IHRyeSBhbmQgc2F2ZSBhIHRoZW1lIGZpbGUgYW5kIHJlY2VpdmUgYSB5 dWtreSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUgdGhl IGZpbGUsIHRyeSBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdGhlbWUgZGly ZWN0b3J5IGFuZCBhbGwgZmlsZXMgYmVuZWF0aCBpdC48L3A+CgoJPHA+VGhlIHRoZW1lIGZp bGVzIGFyZSBkaXN0cmlidXRlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB3 aXRoIDxjb2RlPjY0NDwvY29kZT4gcGVybWlzc2lvbnMgd2hpY2ggc2hvdWxkIGJlIGZpbmUg Zm9yIGEgc3RhbmRhcmQgaG9zdC4gU29tZSBzaGFyZWQgaG9zdGluZyBjb21wYW5pZXMgJiM4 MjEyOyBhbmQgdGhlc2UgYXJlIHVzdWFsbHkgdGhlIG9uZXMgdGhhdCB0ZWxsIHlvdSB0byBz ZXQgeW91ciA8Y29kZT5maWxlczwvY29kZT4gYW5kIDxjb2RlPmltYWdlczwvY29kZT4gZGly ZWN0b3JpZXMgdG8gNzc3IGluIG9yZGVyIHRvIG1ha2UgdGhlbSB3cml0YWJsZSBieSA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiAmIzgyMTI7IHJ1biBBcGFjaGUvUEhQIGluIGEg ZGlmZmVyZW50IHdheSB3aGljaCBtaWdodCByZXF1aXJlIGhpZ2hlciBwZXJtaXNzaW9ucyBp biBvcmRlciB0byB3cml0ZSB0byB0aGUgdGhlbWUgZGlyZWN0b3J5LiBUaGlzIGlzIHVuZm9y dHVuYXRlbHkgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIHBsdWdpbiBzbyB5b3Ugd2lsbCBo YXZlIHRvIGV4cGVyaW1lbnQgaWYgaXQgY2F1c2VzIHlvdSBwcm9ibGVtcy48L3A+CgoJPGgz PkZpbGUgaGFuZGxpbmc8L2gzPgoKCTxwPlRoaXMgY29sdW1uIGJlZ2lucyB3aXRoIGEgc2Vs ZWN0IGxpc3Qgb2YgYWxsIGluc3RhbGxlZCB0aGVtZXM7IHRoZSBjdXJyZW50IHRoZW1lIHNl bGVjdGVkLiBDaGFuZ2luZyB0aGUgaXRlbSBoZXJlIHdpbGwgaW1tZWRpYXRlbHkgYWxsb3cg eW91IHRvIGVkaXQgYW5vdGhlciB0aGVtZS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3Ug YXJlIGNvcHlpbmcgYW5kIHBhc3RpbmcgZmlsZXMgZnJvbSBvbmUgdGhlbWUgdG8gYW5vdGhl ciBhbmQgc2F2ZXMgeW91IGhhdmluZyB0byBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0IGZp cnN0LjwvcD4KCgk8cD5CZW5lYXRoIHRoYXQgYXJlIHR3byBidXR0b25zOjwvcD4KCgk8dWw+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5OZXcgZmlsZTwvc3Bhbj4gOiBDcmVhdGUgYSBu ZXcsIGVtcHR5IGZpbGUgaW4geW91ciB0aGVtZSBkaXJlY3RvcnkuIE5vdGhpbmcgaXMgYWN0 dWFsbHkgY3JlYXRlZCB1bnRpbCB5b3UgaGl0IDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXQg dXNpbmcgdGhpcyBidXR0b24gZW5zdXJlcyB5b3UgYmVnaW4gd2l0aCBhIGNsZWFuIHNsYXRl IGFuZCBkb24mIzgyMTc7dCBhY2NpZGVudGFsbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBm aWxlIHlvdSB3ZXJlIGVkaXRpbmc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhl bWUgbGlzdDwvc3Bhbj4gOiBBIHNob3J0Y3V0IGJhY2sgdG8gdGhlIG1haW4gdGhlbWUgbGlz dCAoZXF1aXZhbGVudCB0byBjbGlja2luZyB0aGUgPGVtPkFkbWluIHRoZW1lczwvZW0+IHRh Yik8L2xpPgoJPC91bD4KCgk8cD5CZWxvdyB0aG9zZSBidXR0b25zIGFyZSB1cCB0byBmb3Vy IHNlY3Rpb25zIGNvbnRhaW5pbmcgYWxsIHRoZSAobm9uLWltYWdlKSBmaWxlcyB0aGF0IG1h a2UgdXAgeW91ciB0aGVtZS4gQ2xpY2sgYSBmaWxlbmFtZSB0byBsb2FkIGl0IGludG8gdGhl IGNlbnRyYWwgdGV4dCBhcmVhIGZvciBlZGl0aW5nLjwvcD4KCgk8aDQgaWQ9ImVkaXRfY3Nz Ij5TdHlsZXNoZWV0czwvaDQ+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5GaWxlcyBjYW4gYmUg YW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4g ZW5kIGluIDxjb2RlPi5jc3M8L2NvZGU+PC9wPgoKCTxwPlRoZSBtZWF0IGFuZCBwb3RhdG9l cyBvZiB5b3VyIHRoZW1lLiBBZGQgYXMgbWFueSBzaGVldHMgYXMgeW91IGxpa2UgYW5kIGxv YWQgdGhlbSBmcm9tIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZShz KS48L3A+CgoJPGg0IGlkPSJlZGl0X2NzcyI+U3R5bGVwbGF0ZXM8L2g0PgoKCTxwIGNsYXNz PSJyZXF1aXJlZCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4g Y2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uc3NjPC9jb2RlPjwvcD4K Cgk8cD5BIHNwZWNpYWwgdmVyc2lvbiBvZiBhIHN0eWxlc2hlZXQgdGhhdCBhbGxvd3MgeW91 IHRvIGRlZmluZSBjb25zdGFudHMgdGhyb3VnaG91dCB5b3VyIHNoZWV0LiBXcml0ZSB5b3Vy IHN0eWxlc2hlZXQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgeW91IHdvdWxkIG5vcm1h bGx5IGJ1dCB3aGVyZSB5b3UgZmluZCB5b3Vyc2VsZiwgZm9yIGV4YW1wbGUsIHVzaW5nIHRo ZSBzYW1lIGNvbG9yIHZhbHVlIHJlcGVhdGVkbHkgb3IgdGhlIHNhbWUgcnVsZXMgYmxvY2ss IHlvdSBjYW4gc2F2ZSB5b3Vyc2VsZiB0eXBpbmcgYnkgdXNpbmcgY29uc3RhbnRzOjwvcD4K CjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPkBicmFuZGluZzogIzEy MzQ1NjsKI2hlYWRlciB7CiAgY29sb3I6IEBicmFuZGluZzsKfQpoMiB7CiAgY29sb3I6IEBi cmFuZGluZzsKfQo8L2NvZGU+PC9wcmU+CgoJPHA+WW91IGNhbiBhbHNvIHNwZWNpZnkgd2hv bGUgcnVsZSBibG9ja3MgbGlrZSB0aGlzICg8ZW0+Tm90ZSB0aGUgY29sb24gYWZ0ZXIgdGhl IGJsb2NrIG5hbWU8L2VtPikgOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFz cz0iYmxvY2siPkBteV9ibG9jazogewogIG1hcmdpbjowIDIwcHg7CiAgYm9yZGVyOjNweCBz b2xpZCAjOTk5OwogIGZvbnQtc2l6ZToxMjAlOwp9CiNoZWFkZXIgewogIGNvbG9yOiBAYnJh bmRpbmc7CiAgcG9zaXRpb246cmVsYXRpdmU7CiAgQG15X2Jsb2NrOwp9CmgyIHsKICBAbXlf YmxvY2s7Cn0KPC9jb2RlPjwvcHJlPgoKCTxwPklmIHlvdSBwdXQgYWxsIHlvdXIgY29uc3Rh bnRzIGF0IHRoZSB0b3Agb2YgdGhlIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgdGhleSB3aWxs IGJlIHJlbW92ZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIGNzcyBmaWxlLjwvcD4KCgk8cD5XaGVu IHlvdSBzYXZlIGEgPGNvZGU+LnNzYzwvY29kZT4gZmlsZSwgYSBjb3JyZXNwb25kaW5nLW5h bWVkIDxjb2RlPi5jc3M8L2NvZGU+IGZpbGUgd2lsbCBhbHNvIGJlIGNyZWF0ZWQuIFRoZSB0 d28gd2lsbCBiZSBrZXB0IGluIHN5bmMgYXMgZmFyIGFzIHByYWN0aWNhYmxlIChldmVuIGlm IHlvdSByZW5hbWUgdGhlIG9yaWdpbmFsIGZpbGUpLiBXaGVuIGl0IGNvbWVzIHRvIGRlbGV0 aW9uIHRob3VnaCwgdGhleSBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5LiBUaGlzIGFsbG93cyB5 b3UgdG8gZWl0aGVyIGtlZXAgdGhlIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgaW4gdGhlIGRp c3RyaWJ1dGlvbiBhcmNoaXZlIG9yIHJlbW92ZSBpdCBwcmlvciB0byBleHBvcnQuPC9wPgoK CTxoNCBpZD0iZWRpdF9qcyI+SmF2YXNjcmlwdDwvaDQ+CgoJPHAgY2xhc3M9InJlcXVpcmVk Ij5GaWxlcyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2Fw cyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5qczwvY29kZT48L3A+CgoJPHA+QW55IHRy aWNrZXJ5IHlvdSBtYXkgd2lzaCB0byBlbXBsb3kgaW4geW91ciB0aGVtZSBjYW4gYmUgd3Jp dHRlbiBpbiB0aGVzZSBmaWxlcy4gUmVtZW1iZXIgdGhhdCBqUXVlcnkgaXMgbG9hZGVkIGJ5 IGRlZmF1bHQgb24gdGhlIGFkbWluIHNpZGUgc28geW91IGNhbiBwbGF5IHdpdGggdGhhdC48 L3A+CgoJPGg0IGlkPSJlZGl0X3BocCI+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48 L2g0PgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+T25lIGZpbGUgPHN0cm9uZz5tdXN0PC9zdHJv bmc+IGJlIG5hbWVkIGV4YWN0bHkgdGhlIHNhbWUgYXMgeW91ciB0aGVtZSwgaS5lLiA8Y29k ZT5zbWRfQmx1ZU1lYW5pZS5waHA8L2NvZGU+LiBBbnkgb3RoZXIgZmlsZXMgbXVzdCBlbmQg aW4gPGNvZGU+LnBocDwvY29kZT48L3A+CgoJPHA+Q29uc3VsdCB0aGUgPGEgaHJlZj0iaHR0 cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1DcmVhdGluZ19hbl9B ZG1pbl9TaWRlX1RoZW1lIj5BZG1pbiBTaWRlIHRoZW1lIGd1aWRlPC9hPiBvbiBUZXh0Ym9v ayBmb3IgdGhlIHJ1bGVzIG9uIG1ha2luZyB0aGVtZXMuIE5vdGUgdGhhdCBjb3JydXB0IHRo ZW1lcyBhcmUgZGV0ZWN0ZWQgdG8gdGhlIGJlc3Qgb2YgdGhlIHBsdWdpbiYjODIxNztzIGFi aWxpdHkgYW5kIHlvdSBtYXkgbm90IGV4cG9ydCwgYmFzZSBvciBzd2l0Y2ggdG8gYW55IHRo ZW1lIHRoYXQgaXMgYnJva2VuLjwvcD4KCgk8aDQgaWQ9ImVkaXRfb3RoZXIiPk90aGVyczwv aDQ+CgoJPHA+QW55IGZpbGVzIHRoYXQgYXJlIG5vdCBvZiB0aGUgYWJvdmUgdGhyZWUgdHlw ZXMgKGFuZCBhcmUgbm90IGltYWdlcykgYXBwZWFyIGhlcmUuIFlvdSB3aWxsIHByb2JhYmx5 IG5ldmVyIHNlZSB0aGlzIHNlY3Rpb24uIElmIHlvdSBkbyB0cnkgdG8gY3JlYXRlIGEgZmls ZSB0aGF0IGlzIG5vdCBvZiB0aGUgYWJvdmUgdGhyZWUgdHlwZXMsIGEgd2FybmluZyB3aWxs IGJlIGlzc3VlZC4gWW91IG11c3QgaGl0IDxlbT5TYXZlPC9lbT4gYWdhaW4gdG8gY29uZmly bSB5b3UgcmVhbGx5IHdpc2ggdG8gY3JlYXRlIHRoZSBmaWxlLjwvcD4KCgk8aDMgaWQ9ImFi b3V0Ij5NYW5pZmVzdDwvaDM+CgoJPHA+SW4geW91ciBtYWluIDxzcGFuIGNsYXNzPSJjYXBz Ij5QSFA8L3NwYW4+IGZpbGUgaXMgYSBmdW5jdGlvbiBjYWxsZWQgPGNvZGU+bWFuaWZlc3Qo KTwvY29kZT4gd2hpY2ggY29udGFpbnMgaW5mbyBhYm91dCB5b3UgYW5kIHlvdXIgdGhlbWUu IEVkaXQgdGhlIHZhbHVlcyBoZXJlIHRvIHN0YW1wIHlvdXIgbWFyayBvbiB0aGUgdGhlbWUu IE5vdGUgdGhhdCBpZiB5b3VyIGRlc2NyaXB0aW9uIGNvbnRhaW5zIGFwb3N0cm9waGVzIHRo ZXkgbXVzdCBiZSA8ZW0+ZXNjYXBlZDwvZW0+IGJ5IHByZWNlZGluZyB0aGVtIHdpdGggYSBz aW5nbGUgYmFja3NsYXNoIDxjb2RlPlw8L2NvZGU+LiBlLmcuPC9wPgoKPHByZT48Y29kZT4m IzM5O2Rlc2NyaXB0aW9uJiMzOTsgPSZndDsgJiMzOTtEb25cJiMzOTt0IGZlYXIgdGhlIHJl YXBlciEmIzM5OywKPC9jb2RlPjwvcHJlPgoKCTxoMiBpZD0icGVydXNlciI+UGVyLXVzZXIg dGhlbWUgc2VsZWN0aW9uPC9oMj4KCgk8cD5JZiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMg dG8gYWxsb3cgcGVyLXVzZXIgdGhlbWVzLCBhIG5ldyB0YWIgYXBwZWFycyB1bmRlciB0aGUg QWRtaW4gdGFiIG9mIGFsbCB1c2VycyAoZXhjZXB0IGFkbWluaXN0cmF0b3JzKS4gVGhpcyBz aW1wbHkgZGlzcGxheXMgYWxsIGF2YWlsYWJsZSB0aGVtZXMgJiM4MjEyOyBvbmVzIHRoYXQg dGhlIGFkbWluaXN0cmF0b3IgaGFzIGV4cGxpY2l0bHkgYWxsb3dlZC48L3A+CgoJPHA+Q2xp Y2tpbmcgYSB0aGVtZSBuYW1lIG9yIHRodW1ibmFpbCB3aWxsIGltbWVkaWF0ZWx5IHN3aXRj aCB0byB0aGF0IHRoZW1lIHVudGlsIHRoZSB1c2VyIGNob29zZXMgYW5vdGhlciBvciB0aGUg YWRtaW5pc3RyYXRvciBjaGFuZ2VzIHRoZW1lIHN5c3RlbS48L3A+CgoJPGgyIGlkPSJjaGFu Z2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xMiBKdW4gMDkgfCAwLjEgfCBJ bml0aWFsIHB1YmxpYyBiZXRhPC9saT4KCQk8bGk+MDMgU2VwIDA5IHwgMC4xMSB8IEltcHJv dmVkIFRleHRnYXJkZW4gdGhlbWUgZmVlZCBhbmQgbGlua3MgOyBpbXByb3ZlZCBmaWxlIHN1 cHBvcnQgKGJvdGggdGhhbmtzIHRoZWJvbWJzaXRlKSA7IG1hZGUgZ2xvYmFsIHRoZW1lIG1v cmUgb2J2aW91cyA7IGFsdGVyZWQgcHJlZnMgdGFiIGEgYml0IDsgYWRkZWQgPGNvZGU+LnNz YzwvY29kZT4gc3VwcG9ydCA7IGlnbm9yZWQgLnN2biBzdWJkaXJzIChhbGwgdGhhbmtzIHBp ZW1hbikgOyBpbXByb3ZlZCB3YXJuaW5nIG1lc3NhZ2VzIDsgbWlzYyBmaXhlcyBhbmQgaG91 c2VrZWVwaW5nPC9saT4KCQk8bGk+MDIgTm92IDA5IHwgMC4xMiB8IFJlZHVjZWQgdGhlbWUg ZmVlZCBjbHV0dGVyIGluIHRoZSBwcmVmcyB0YWJsZTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0i Y3JlZGl0cyI+Q3JlZGl0czwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gd291bGQgbm90IGhhdmUg ZXhpc3RlZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVzIG9mIHRo ZSBUZXh0cGF0dGVybiBkZXZlbG9wbWVudCB0ZWFtLCBlc3BlY2lhbGx5IFJvYmVydCBXZXR6 bG1heXIgZm9yIHRoZSB0aGVtZSBzdXBwb3J0LiBQbHVzIG9mIGNvdXJzZSB0aGUgYXJteSBv ZiBiZXRhIHRlc3RlcnMsIGlkZWFzIGhhbXN0ZXJzIGFuZCB0aXJlbGVzcyB0aGVtZSBhZHZv Y2F0ZXMsIG1vc3Qgbm90YWJseSBTdHVhcnQgQnV0Y2hlciwgRGFsZSBDaGFwbWFuLCBEYXZl IERlU2FuZHJvLCBhbmQgTWlrZSBEZW5uaXMuIEt1ZG9zIGFuZCB0aGFua3MgdG8geW91IGFs bC48L3A+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHls ZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21k X2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmll ciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7 fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFw eCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9j azsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgx IHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2lu OiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRv bTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9u dDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAj Mjc1Njg1OyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFj aW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQg MTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAx MHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0g eyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojMzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJh Y2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFi bGUge3dpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9 CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBh ZGRpbmc6LjVlbSAwO30KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsg fQojc21kX2hlbHAgLnJlcXVpcmVkIHtjb2xvcjpyZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJn aW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6 NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6 Im1kNSI7czozMjoiYmU4ZWRjODYzOTc5Y2I4MzRiMzc5YmNkN2E1ZGIxMWUiO30=