# Name: smd_admin_themes v0.11 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjExIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czo4Mjg2MzoiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAk 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 CgkJc2V0X3ByZWYoJ3NtZF9hdF92bGFzdCcsIHRpbWUoKSwgJHNtZF9hdF9ldmVudCwgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCXNldF9wcmVmKCdzbWRfYXRfdmVyc2lvbnMn LCBzZXJpYWxpemUoJGZlZWRzKSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0 X2lucHV0Jyk7DQoJfQ0KDQoJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7 DQoJCS8vIFJlYWQgZWFjaCBtYW5pZmVzdCBhbmQgc2V0IHVwIHRoZSBsYWJlbHMNCgkJJHNr aW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9uYW1lKTsNCgkJJGZlZWRfc2tpbl9u YW1lID0gc3RyX3JlcGxhY2UoJ18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXpl IGZvciB1cmxfdGl0bGUgbWF0Y2hpbmchDQoNCgkJJHRodW1ibmFpbCA9IHNtZF9hdF9nZXRf dGh1bWIoJHNraW5mbywgMSk7DQoJCSR0aGlzX3NraW4gPSAoJHNraW5mbykgPyAoKCRza2lu X25hbWUgPT0gJGN1cnJfc2tpbikgPyBzdHJvbmcoJHNraW5mb1snZG5hbWUnXSkgOiAkc2tp bmZvWydkbmFtZSddKSA6ICRza2luX25hbWU7DQoJCSRpc19nYmwgPSAoJHNraW5fbmFtZSA9 PSAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSA/IHNtZF9hdF9nVHh0KCdpc19n bG9iYWwnKSA6ICcnOw0KCQkkdGh1bXJvdyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0 X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2F0X2xpc3Qn LmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEuJ3BhZ2U9Jy4kcGFnZS4nIiB0aXRsZT0iJy5zbWRf YXRfZ1R4dCgnYXBwbHlfc2tpbicpLiciPicuJHRoaXNfc2tpbi4kaXNfZ2JsLigoJHNraW5m byAmJiAkc2tpbmZvWydiYXNlZF9vbiddKSA/IHNtZF9hdF9nVHh0KCdiYXNlZF9vbicsIGFy cmF5KCd7c2tpbn0nID0+ICRza2luZm9bJ2Jhc2VkX29uJ10pKSA6ICcnKS4oKCR0aHVtYm5h aWwpID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8L2Rpdj4nIDogJycpLic8L2E+JzsNCgkJJGF1 dGhyb3cgPSAoKCRza2luZm8gJiYgc3RycG9zKCRza2luZm9bJ2F1dGhvcl91cmknXSwgImh0 dHA6Ly8iKSA9PT0gMCkgPyAnPGEgaHJlZj0iJy4kc2tpbmZvWydhdXRob3JfdXJpJ10uJyI+ Jy4kc2tpbmZvWydhdXRob3InXS4nPC9hPicgOiAoKCRza2luZm8pID8gJHNraW5mb1snYXV0 aG9yJ10gOiAnLScpKTsNCgkJJGFjdHJvdyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0 X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2VkaXQnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciPlsn LmdUeHQoJ2VkaXQnKS4nXTwvYT4nDQoJCQkuICcgJyAuKCgkc2tpbmZvKSA/ICc8YSBocmVm PSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2Nsb25lJy5hLidza2lu PScuJHNraW5fbmFtZS4nIiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldHZhbChcJycuJHNraW5f bmFtZS4nXCcsIFwnc21kX2F0X2Nsb25lXCcpOyI+Wycuc21kX2F0X2dUeHQoJ2Nsb25lJyku J108L2E+JyA6ICcnKQ0KCQkJLiAnICcgLigoJHNraW5mbykgPyAnPGEgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9leHBvcnQnLmEuJ3NraW49Jy4kc2tp bl9uYW1lLiciIG9uY2xpY2s9InJldHVybiBzbWRfZ2V0Y3J1c2goXCcnLiRza2luX25hbWUu J1wnKTsiPlsnLnNtZF9hdF9nVHh0KCdleHBvcnQnKS4nXTwvYT4nIDogJycpDQoJCQkuICcg JyAuKChpbl9hcnJheSgkc2tpbl9uYW1lLCAkc21kX2NvcmVfdGhlbWVzKSB8fCBpbl9hcnJh eSgkc2tpbl9uYW1lLCAkYmFzZXMpKSA/ICcnIDogJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRf YXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZGVsZXRlJy5hLidza2luPScuJHNraW5fbmFtZS5h LidwYWdlPScuJHBhZ2UuJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCdSZWFsbHkgZGVs ZXRlIHNraW4gJy4kc2tpbl9uYW1lLic/XCcpOyI+WycuZ1R4dCgnZGVsZXRlJykuJ108L2E+ JykNCgkJCS4gJzxkaXYgaWQ9InBvcF8nLiRza2luX25hbWUuJyIgY2xhc3M9InNtZF9wb3B1 cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCduZXdfY2xvbmVza2luJykuJzwv c3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic21kX3RleHRfbmFtZSIgdmFsdWU9IiIg Lz4gPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdjb25maXJtJykp LiddPC9hPjwvZGl2PicNCgkJCS4gJzxkaXYgaWQ9ImNydXNoXycuJHNraW5fbmFtZS4nIiBj bGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQoJ2NydXNo X2Zvcm1hdCcpLic8L3NwYW4+Jy5yYWRpb1NldCgkY3J1c2hlcnMsICRza2luX25hbWUuJ19j cnVzaCcsICRhdF9wcmVmc1snc21kX2F0X2NydXNoJ10pLic8YSBocmVmPSIjIj4mbmJzcDtb Jy5zdHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0nKSkuJ108L2E+PC9kaXY+JzsNCgkJJHZl cm93ID0gKCRza2luZm8pID8gKChpc3NldCgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXSkgJiYg aXNzZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1bW1hcnknXSkgJiYgdmVyc2lvbl9j b21wYXJlKCRmZWVkc1skZmVlZF9za2luX25hbWVdWydzdW1tYXJ5J10sJHNraW5mb1sndmVy c2lvbiddKT09PTEpID8gJzxhIGhyZWY9IicuJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ2xp bmsnXS4nIiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojOTkwMDAwOyI+Jy5zbWRf YXRfZ1R4dCgndmVyc2lvbicpLiRza2luZm9bJ3ZlcnNpb24nXS4nPC9hPicgOiBzbWRfYXRf Z1R4dCgndmVyc2lvbicpLiRza2luZm9bJ3ZlcnNpb24nXSkgOiAnJzsNCg0KCQlpZiAoJGxh eW91dD09MCkgew0KCQkJZWNobyB0cigNCgkJCQl0ZCgkdGh1bXJvdykNCgkJCQkudGQoJGF1 dGhyb3csIDEwMCkNCgkJCQkudGQoJHZlcm93KQ0KCQkJCS50ZCgoKCRza2luZm8pPyAkc2tp bmZvWydkZXNjcmlwdGlvbiddIDogJy0nKS4oKCRza2luZm8gJiYgJHNraW5mb1snaGVscCdd KSA/ICcgJy5ocmVmKCdbJy5nVHh0KCdoZWxwJykuJ10nLCAkc2tpbmZvWydoZWxwJ10pIDog JycpLCAyNTApDQoJCQkJLnRkKCRhY3Ryb3csMjYwKQ0KCQkJLCAoKCRza2luX25hbWUgPT0g JGN1cnJfc2tpbikgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7IicgOiAnJykNCgkJ CSk7DQoJCX0gZWxzZSB7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2VsbCInLigoJHNr aW5fbmFtZSA9PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9ImJhY2tncm91bmQ6I2U4ZThlODsi JyA6ICcnKS4nPic7DQoJCQllY2hvICc8ZGl2PicuJHRodW1yb3cuJzwvZGl2Pic7DQoJCQll Y2hvICc8ZGl2IGNsYXNzPSJzbWRfYXV0aCI+Jy4kdmVyb3cuc21kX2F0X2dUeHQoJ2J5Jyku JGF1dGhyb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfYWN0aW9ucyI+ Jy4kYWN0cm93Lic8L2Rpdj4nOw0KCQkJZWNobyAnPC9kaXY+JzsNCgkJfQ0KCX0NCg0KLy8J ZWNobyB0ZGEoc2VsZWN0X2J1dHRvbnMoKSAuIGV2ZW50X211bHRpZWRpdF9mb3JtKCRzbWRf YXRfZXZlbnQsIE5VTEwsICRwYWdlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwgJyBjb2xz cGFuPSI1IiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogbm9uZTsiJyk7DQoJ aWYgKCRsYXlvdXQ9PSIwIikgew0KCQllY2hvICc8L3RkPjwvdHI+JzsNCgkJZWNobyBlbmRU YWJsZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jbGVhciI+PC9k aXY+PC9kaXY+JzsNCgl9DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBuLm5hdl9mb3JtKCRz bWRfYXRfZXZlbnQsICRwYWdlLCAkbnVtUGFnZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp Ow0KCWVjaG8gbi5wYWdlYnlfZm9ybSgkc21kX2F0X2V2ZW50LCAkcGFnZWJ5KTsNCn0NCg0K ZnVuY3Rpb24gc21kX2F0X2ZlZWQoJGZlZWQpIHsNCglnbG9iYWwgJGZlZWRzOw0KDQoJJGZl ZWQ9ZXJlZ2lfcmVwbGFjZSgiPiIuIltbOnNwYWNlOl1dKyIuIjwiLCI+PCIsJGZlZWQpOyAv LyBLaWxsIHdoaXRlc3BhY2UgaW4gZmVlZA0KCSR4bWxwYXJzZXIgPSB4bWxfcGFyc2VyX2Ny ZWF0ZSgpOw0KCXhtbF9zZXRfZWxlbWVudF9oYW5kbGVyKCR4bWxwYXJzZXIsICJzbWRfYXRf ZmVlZF9zdGFydF90YWciLCAic21kX2F0X2ZlZWRfZW5kX3RhZyIpOw0KCXhtbF9zZXRfY2hh cmFjdGVyX2RhdGFfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0X2ZlZWRfdGFnX2NvbnRl bnRzIik7DQoJeG1sX3BhcnNlKCR4bWxwYXJzZXIsICRmZWVkKTsNCgl4bWxfcGFyc2VyX2Zy ZWUoJHhtbHBhcnNlcik7DQoNCglyZXR1cm4gJGZlZWRzOw0KfQ0KDQpmdW5jdGlvbiBzbWRf YXRfZmVlZF9zdGFydF90YWcoJHBhcnNlciwgJG5hbWUsICRhdHRyaWJzKSB7DQoJZ2xvYmFs ICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWc7DQoJaWYgKCRuYW1lID09ICJFTlRS WSIpIHsNCgkJJHNtZF9hdF9mZWVkaW4gPSB0cnVlOw0KCX0NCglpZiAoJHNtZF9hdF9mZWVk aW4pIHsNCgkJJHNtZF9hdF9mZWVkdGFnID0gJG5hbWU7DQoJfQ0KfQ0KZnVuY3Rpb24gc21k X2F0X2ZlZWRfZW5kX3RhZygkcGFyc2VyLCAkbmFtZSkgew0KCWdsb2JhbCAkc21kX2F0X2Zl ZWRpbiwgJHNtZF9hdF9mZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1lOw0KCWlmICgkbmFtZSA9 PSAiRU5UUlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gZmFsc2U7DQoJCSRzbWRfYXRfZmVl ZG5hbWUgPSAnJzsNCgl9DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3RhZ19jb250ZW50 cygkcGFyc2VyLCAkZGF0YSkgew0KCWdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9m ZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1lLCAkZmVlZHM7DQoJaWYgKCRzbWRfYXRfZmVlZGlu KSB7DQoJCWlmICgkc21kX2F0X2ZlZWR0YWcgPT0gIk5BTUUiKSB7DQoJCQkkZmVlZHNbJGRh dGFdID0gJyc7DQoJCQkkc21kX2F0X2ZlZWRuYW1lID0gJGRhdGE7DQoJCX0NCgkJaWYgKGlz c2V0KCRmZWVkc1skc21kX2F0X2ZlZWRuYW1lXSkpIHsNCgkJCWlmICgkc21kX2F0X2ZlZWR0 YWcgPT0gIlRJVExFIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIlNVTU1BUlkiIHx8ICRzbWRf YXRfZmVlZHRhZyA9PSAiVVBEQVRFRCIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJJRCIgfHwg JHNtZF9hdF9mZWVkdGFnID09ICJMSU5LIikgew0KCQkJCSRmZWVkc1skc21kX2F0X2ZlZWRu YW1lXVtzdHJ0b2xvd2VyKCRzbWRfYXRfZmVlZHRhZyldID0gJGRhdGE7DQoJCQl9DQoJCX0N Cgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmVtb3ZlIGhhcmQg c3BhY2VzIGluIHRoZSB1cGxvYWRfZm9ybSBzbyBPcGVyYSBhbmQgSUUgd3JhcCB0aGUgYnV0 dG9ucw0KZnVuY3Rpb24gc21kX2F0X3VwbG9hZF9mb3JtKCRldmVudCwgJHN0ZXAsICRkYXRh LCAkYXJncykgew0KCXJldHVybiBzdHJfcmVwbGFjZSgnJiMxNjA7JywgJyAnLCAkZGF0YSk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2Vk aXQoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudDsNCg0KCWV4dHJhY3Qo ZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywgJ2ZpbGUnKSkpKTsNCg0K CSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbGF5b3V0ID0gKGlzc2V0KCRh dF9wcmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQn XSA6IDE7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIsICJwaHAi KTsNCgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAiZ2lmIiwgInBuZyIpOw0K CSRtYXhfZmlsZV9zaXplID0gMiAqIDEwMjQgKiAxMDI0Ow0KDQoJJHNraW5mbyA9IHNtZF9h dF9yZWFkX3NraW5mbygkc2tpbik7DQoJJGZpbGUgPSAoZW1wdHkoJG5ld19za2luKSkgPyAk ZmlsZSA6ICRuZXdfc2tpbjsNCgkkZmlsZXMgPSBzbWRfYXRfbGlzdGRpcihUSEVNRS4kc2tp bik7DQoJc29ydCgkZmlsZXMpOw0KDQoJLy8gU3BsaXQgdGhlIGxpc3QgaW50byBpdHMgZGly ZWN0b3J5IGdyb3Vwcw0KCSRhbGxmaWxlcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJGZpbGVz IGFzICRjdXJyZmlsZSkgew0KCQkkZmlsZV9pbmZvID0gcGF0aGluZm8oJGN1cnJmaWxlKTsN CgkJLy8gSWdub3JlIGFueSByb2d1ZSBTdWJ2ZXJzaW9uIGZpbGVzDQoJCWlmIChzdHJwb3Mo JGZpbGVfaW5mb1snZGlybmFtZSddLCAnLy5zdm4nKSA9PT0gZmFsc2UpIHsNCgkJCSRmaWxl X3R5cGUgPSAoaXNzZXQoJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10pKSA/ICRmaWxlX2luZm9b J2V4dGVuc2lvbiddIDogJ290aGVyJzsNCgkJCSRhbGxmaWxlc1skZmlsZV90eXBlXVtdID0g JGN1cnJmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKGdwcygnc21kX2F0X2VkaXRzJykpIHsNCgkJ JGNvbnRlbnRzID0gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJw0KJyxncHMoJ3NtZF9h dF9lZGl0cycpKSk7IC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCX0gZWxzZSB7DQoJCSRjb250 ZW50cyA9ICcnOw0KCQlpZiAoJGZpbGUgJiYgZmlsZV9leGlzdHMoVEhFTUUuJHNraW4uRFMu JGZpbGUpKSB7DQoJCQkkY29udGVudHMgPSBmaWxlKFRIRU1FLiRza2luLkRTLiRmaWxlKTsN CgkJCSRjb250ZW50cyA9IGpvaW4oIiIsICRjb250ZW50cyk7DQoJCX0NCgl9DQoNCgkvLyBC ZWdpbiByZW5kZXJpbmcgdGhlIHBhZ2UNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdlZGl0X2xi bCcpLCRtZXNzYWdlKTsNCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUgdHlwZT0idGV4dC9jc3Mi Pg0KI3NtZF9hdF9pbWFnZXMgew0KCW1hcmdpbjowcHggNnB4IC00cHggMDsNCn0NCi5zbWRf c2tpbl9maWxldHlwZXMgew0KCW1hcmdpbjoxMnB4IDA7DQp9DQo8L3N0eWxlPg0KRU9TOw0K DQoJJHNraW5fbGlzdCA9IHNtZF9hdF9yZWFkX3NraW5zKCk7DQoNCgkvLyBzZWxlY3RJbnB1 dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNh c2UNCgkkc2tpbnNlbCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkc2tpbl9saXN0IGFzICRrZXkx ID0+ICR2YWx1ZTEpIHsNCgkJJHNraW5zZWxbJHZhbHVlMV0gPSAkc2tpbl9saXN0WyRrZXkx XTsNCiAgIH0NCgkkc2tpbkNoYW5nZSA9ICc8Zm9ybSBuYW1lPSJza2luY2hhbmdlIiBhY3Rp b249ImluZGV4LnBocCI+Jw0KCQkuIGVJbnB1dCgkc21kX2F0X2V2ZW50KQ0KCQkuIHNJbnB1 dCgnc21kX2F0X2VkaXQnKQ0KCQkuIHNlbGVjdElucHV0KCdza2luJywgJHNraW5zZWwsICRz a2luLCAwLCAxKQ0KCQkuICc8L2Zvcm0+JzsNCg0KCSRmaWxlTGlzdCA9IGhlZChzbWRfYXRf Z1R4dCgnc2tpbl9maWxlcycpLDIpDQoJCS4gJHNraW5DaGFuZ2UNCgkJLiBzdGFydFRhYmxl KCdsaXN0JywgJ2xlZnQnLCAnc21kX3NraW5fZmlsZXR5cGVzJyk7DQoJJGZpbGVMaXN0IC49 ICc8YnIgLz48YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVu dC5hLidzdGVwPXNtZF9hdF9uZXdmaWxlJy5hLidza2luPScuJHNraW4uJyI+Jy5zbWRfYXRf Z1R4dCgnbmV3X2ZpbGUnKS4nPC9hPic7DQoJJGZpbGVMaXN0IC49ICcgPGEgY2xhc3M9Im5h dmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4dCgo KCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwvYT48YnIg Lz4nOw0KCSRvdGhlcnMgPSBhcnJheSgpOw0KDQoJZm9yZWFjaCAoJGVkaXRhYmxlIGFzICRm aWxldHlwZSkgew0KCQlpZiAoaXNzZXQoJGFsbGZpbGVzWyRmaWxldHlwZV0pKSB7DQoJCQlm b3JlYWNoICgkYWxsZmlsZXNbJGZpbGV0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkgew0K CQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJJGZpbGVMaXN0IC49IHRyKHRkKGhlZChzbWRf YXRfZ1R4dCgkZmlsZXR5cGUpLDMpKSk7DQoJCQkJfQ0KCQkJCSRqdXN0ZmlsZSA9IGJhc2Vu YW1lKCRjdXJyZmlsZSk7DQoJCQkJJGJhc2VmaWxlID0gYXJyYXlfc2hpZnQoZXhwbG9kZSAo Jy4nLCRqdXN0ZmlsZSkpOw0KCQkJCSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRf YXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luLmEuJ2ZpbGU9 Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3Rm aWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRz a2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmls ZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7DQoJCQkJJGZpbGVMaXN0IC49IHRy KHRkKCRlZGl0KS50ZCgkZGVsKSk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkvLyBTb21lIG90 aGVyIGZpbGUgdHlwZQ0KCQkJaWYgKCEkb3RoZXJzKSB7DQoJCQkJZm9yZWFjaCAoJGFsbGZp bGVzIGFzICRmdHlwZSA9PiAkZmxzKSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJGZ0eXBlLCBh cnJheV9tZXJnZSgkZWRpdGFibGUsICRpbWFnYWJsZSkpKSB7DQoJCQkJCQlmb3JlYWNoICgk YWxsZmlsZXNbJGZ0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkgew0KCQkJCQkJCSRqdXN0 ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJCQkJJGJhc2VmaWxlID0gYXJyYXlf c2hpZnQoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCQkJCSRlZGl0ID0gJzxhIGhy ZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tp bj0nLiRza2luLmEuJ2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0Zmls ZSkgPyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJCQkJCSRk ZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9ldmVudCwg J3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7 DQoJCQkJCQkJJG90aGVyc1tdID0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJCQkJCX0N CgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkkZmlsZUxpc3QgLj0gKCRvdGhlcnMp ID8gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCdvdGhlcl9maWxlcycpLDMpKSkuIGpvaW4obiwg JG90aGVycykgOiAnJzsNCgkkZmlsZUxpc3QgLj0gZW5kVGFibGUoKTsNCg0KCS8vIE1ha2Ug dGhlIGxpc3Qgb2YgaW1hZ2VzIGZvciB0aGlzIHNraW4NCgkkcXMgPSBhcnJheSgNCgkJImV2 ZW50IiA9PiAkc21kX2F0X2V2ZW50LA0KCQkic3RlcCIgPT4gJ3NtZF9hdF9kZWxldGVfaW1h Z2UnLA0KCSk7DQoJJHNlbFtdID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9InNtZF9hdF9p bWFnZWZvcm0iIG5hbWU9InNtZF9hdF9pbWFnZWZvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRx cykuJyI+JzsNCgkkc2VsW10gPSAnPHNlbGVjdCBpZD0ic21kX2F0X2ltYWdlcyIgbmFtZT0i c21kX2F0X2ltYWdlc1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iMjQiIG11bHRpcGxlPSJtdWx0 aXBsZSIgc3R5bGU9IndpZHRoOjE1NHB4OyI+JzsNCg0KCWlmIChkZWZpbmVkKCdHTE9CX0JS QUNFJykpIHsNCgkJJGltZyA9IGdsb2IoVEhFTUUuJHNraW4uRFMuJ3sqLmpwZywqLmdpZiwq LnBuZ30nLCBHTE9CX0JSQUNFKTsNCgl9IGVsc2Ugew0KCQkkaW1nID0gYXJyYXlfbWVyZ2Uo Z2xvYihUSEVNRS4kc2tpbi5EUy4nKi5qcGcnKSxnbG9iKFRIRU1FLiRza2luLkRTLicqLmdp ZicpLGdsb2IoVEhFTUUuJHNraW4uRFMuJyoucG5nJykpOw0KCX0NCg0KCWlmKGlzX2FycmF5 KCRpbWcpKSB7DQoJCWZvcmVhY2ggKCRpbWcgYXMgJGltZ2ZpbGUpIHsNCgkJCSRzZWxbXSA9 IHQuJzxvcHRpb24gdmFsdWU9IicuJGltZ2ZpbGUuJyI+Jy5iYXNlbmFtZSgkaW1nZmlsZSku Jzwvb3B0aW9uPic7DQoJCX0NCgl9DQoJJHNlbFtdID0gJzwvc2VsZWN0Pic7DQoJJHNlbFtd ID0gZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLCAnc2tpbics ICRza2luLCAxKTsNCgkkc2VsW10gPSAnPC9mb3JtPic7DQoJJHNlbCA9IGpvaW4oJycsJHNl bCk7DQoNCgkvLyBJbWFnZSBwb3J0aW9uDQoJJGltZ2JpdCA9IGhlZChzbWRfYXRfZ1R4dCgn c2tpbl9pbWFnZXMnKSwgMikgLiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnKTsNCgkkaW1n Yml0IC49IHRyKHRkKCRzZWwpKTsNCgkkaW1nYml0IC49IHRyKHRkKHVwbG9hZF9mb3JtKHNt ZF9hdF9nVHh0KCd1cGxvYWRfaW1hZ2UnKSwgJycsICdzbWRfYXRfdXBsb2FkX2ltYWdlJywg JHNtZF9hdF9ldmVudCwgJHNraW4sICRtYXhfZmlsZV9zaXplLCAnJywgJycpLCAxNTApKTsN CgkkaW1nYml0IC49IGVuZFRhYmxlKCk7DQoNCgkvLyBSZW5kZXIgdGhlIHJlc3Qgb2YgdGhl IHBhZ2UNCgllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKS4NCgl0cigNCgkJdGR0bCgkaW1nYml0 KS4NCgkJdGQoDQoJCQloZWQoKCgkc2tpbmZvKSA/ICRza2luZm9bJ2RuYW1lJ10gOiAkc2tp biksMSkuDQoJCQlmb3JtKA0KCQkJCSc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X3Nr aW4iIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpLiciIGNsYXNzPSJlZGl0IiBz aXplPSI0MCIgdGFiaW5kZXg9IjIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7IiAvPicu YnINCgkJCQkuJzx0ZXh0YXJlYSBpZD0ic21kX2F0X2VkaXRzIiBjbGFzcz0iY29kZSIgbmFt ZT0ic21kX2F0X2VkaXRzIiBjb2xzPSI3NiIgcm93cz0iMzIiPicuaHRtbHNwZWNpYWxjaGFy cygkY29udGVudHMpLic8L3RleHRhcmVhPicuYnINCgkJCQkuZklucHV0KCdzdWJtaXQnLCcn LGdUeHQoJ3NhdmUnKSwncHVibGlzaCcpDQoJCQkJLmVJbnB1dCgkc21kX2F0X2V2ZW50KS5z SW5wdXQoJ3NtZF9hdF9zYXZlJykNCgkJCQkuaElucHV0KCdza2luJywkc2tpbikNCgkJCQku aElucHV0KCdmaWxlJywkZmlsZSkNCgkJCSkNCgkJKS4NCgkJdGR0bCgkZmlsZUxpc3QpDQoJ KS4NCgllbmRUYWJsZSgpOw0KDQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gSnVzdCBjbGVhciBvdXQgdGhlIHZhciBzbyB0aGUgc2F2ZSBmdW5jdGlvbiB0cmVhdHMg dGhlIGNvbnRlbnQgYXMgYSBuZXcgZmlsZQ0KZnVuY3Rpb24gc21kX2F0X25ld2ZpbGUoKSB7 DQoJJF9QT1NUWydmaWxlJ10gPSAnJzsNCgkkbWVzc2FnZT0nJzsNCglzbWRfYXRfZWRpdCgk bWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX2F0X2Nsb25lKCkgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoNCglleHRyYWN0KGRvU2xh c2goZ3BzYShhcnJheSgnc2tpbicsICduZXdfc2tpbicpKSkpOw0KCSRtc2c9Jyc7DQoNCgkk bmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7DQoJJG5ld19za2luID0gcmF3dXJsZW5jb2Rl KCRuZXdfc2tpbik7DQoNCglpZiAoZW1wdHkoJG5ld19za2luKSkgew0KCQkkbXNnID0gc21k X2F0X2dUeHQoJ25hbWVfZW1wdHknKTsNCgl9DQoNCgkvLyBDaGVjayB0aGUgbmV3IG5hbWUg aXNuJ3QgYWxyZWFkeSBpbiB1c2UNCgkkdGhlbWVzID0gc21kX2F0X3JlYWRfc2tpbnMoKTsN Cg0KCWlmIChpbl9hcnJheSgkbmV3X3NraW4sICR0aGVtZXMpKSB7DQoJCSRtc2cgPSBzbWRf YXRfZ1R4dCgnc2tpbl9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTsN Cgl9DQoNCgkvLyBObyBlcnJvcnMsIHNvIG1ha2UgYSBuZXcgZGlyIGFuZCBjcmVhdGUgdGhl IFBIUCBmaWxlDQoJaWYgKCRtc2c9PScnKSB7DQoJCSRjb250ZW50ID0gJyc7DQoJCSRkZXN0 ZGlyID0gVEhFTUUuJG5ld19za2luLkRTOw0KCQkkcmVzID0gbWtkaXIoJGRlc3RkaXIpOw0K CQkkYmFzZWQgPSAnJzsNCg0KCQlpZiAoJHNraW4pIHsNCgkJCS8vIEJhc2VkIG9uIGFuIGV4 aXN0aW5nIHRoZW1lLiBObyBuZWVkIGZvciBhbnkgZnVuY3Rpb25zIG90aGVyIHRoYW4gbWFu aWZlc3QoKQ0KCQkJJGJhc2VkID0gInRoZW1lOjpiYXNlZF9vbignIi4kc2tpbi4iJyk7IjsN CgkJCSRleHRlbmRzID0gJHNraW4uJ190aGVtZSc7DQoJCQkkc3Jjc3MgPSBUSEVNRS4kc2tp bi5EUy4ndGV4dHBhdHRlcm4uY3NzJzsNCgkJCWlmIChmaWxlX2V4aXN0cygkc3Jjc3MpICYm IGZpbGVzaXplKCRzcmNzcykgPiAwKSB7DQoJCQkJJGltcG9ydCA9IGpvaW4oJycsIGZpbGUo JHNyY3NzKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRpbXBvcnQgPSAnQGltcG9ydCB1cmwoIi4u L2NsYXNzaWMvdGV4dHBhdHRlcm4uY3NzIik7JzsNCgkJCX0NCgkJCSRjb250ZW50ID0gJ3sn Ow0KCQl9IGVsc2Ugew0KCQkJLy8gQnJhbmQgc3BhbmtpbmcgbmV3IHRoZW1lLiBDbG9uZSAn Y2xhc3NpYycgZnVuY3Rpb25zIHRoZW4gYWRkIG5ldyBtYW5pZmVzdCgpDQoJCQkkZXh0ZW5k cyA9ICd0aGVtZSc7DQoJCQkkaW1wb3J0ID0gJyc7DQoJCQkkc3JjID0gdHhwYXRoLkRTLlRI RU1FLidjbGFzc2ljJy5EUy4nY2xhc3NpYy5waHAnOw0KCQkJJGdyYWIgPSBmYWxzZTsNCgkJ CSRmcCA9IGZpbGUoJHNyYyk7DQoNCgkJCWZvcmVhY2goJGZwIGFzICRsaW5lKSB7DQoJCQkJ JGxpbmUgPSBydHJpbSgkbGluZSk7DQoJCQkJaWYgKHN0cnBvcygkbGluZSwgJ2Z1bmN0aW9u IG1hbmlmZXN0KCknKSAhPT0gZmFsc2UpIHsNCgkJCQkJJGdyYWIgPSBmYWxzZTsgLy8gdW5u ZWNlc3Nhcnk/DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZiAoJGdyYWIpIHsNCgkJCQkJ JGNvbnRlbnQgLj0gJGxpbmUubjsNCgkJCQl9DQoJCQkJaWYgKHN0cnBvcygkbGluZSwgJ2Ns YXNzIGNsYXNzaWNfdGhlbWUgZXh0ZW5kcyB0aGVtZScpICE9PSBmYWxzZSkgew0KCQkJCQkk Z3JhYiA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJLy8gbWFuaWZlc3QgZmllbGRz DQoJCSRtYW51c2VyID0gZ2V0X2F1dGhvcl9uYW1lKCR0eHBfdXNlcik7DQoJCSRtYW50aXRs ZSA9IHVjd29yZHMoJG5ld19za2luKTsNCg0KCQkvLyBXcml0ZSB0aGUgbmV3IFBIUCBmaWxl DQoJCSRidWYgPSA8PDxFT0YNCjw/cGhwDQoNCmlmICghZGVmaW5lZCgndHhwaW50ZXJmYWNl JykpIGRpZSgndHhwaW50ZXJmYWNlIGlzIHVuZGVmaW5lZC4nKTsNCg0KeyRiYXNlZH0NCg0K Y2xhc3MgeyRuZXdfc2tpbn1fdGhlbWUgZXh0ZW5kcyB7JGV4dGVuZHN9DQp7JGNvbnRlbnR9 DQoNCglmdW5jdGlvbiBtYW5pZmVzdCgpDQoJew0KCQlyZXR1cm4gYXJyYXkoDQoJCQkndGl0 bGUnCSAJCT0+ICd7JG1hbnRpdGxlfScsDQoJCQknYXV0aG9yJyAJCT0+ICd7JG1hbnVzZXJ9 JywNCgkJCSdhdXRob3JfdXJpJyAJPT4gJycsDQoJCQkndmVyc2lvbicgCQk9PiAnMS4wJywN CgkJCSdkZXNjcmlwdGlvbicgCT0+ICcnLA0KCQkJJ2hlbHAnIAkJCT0+ICcnLA0KCQkpOw0K CX0NCn0NCj8+DQpFT0Y7DQoNCgkJJGZwID0gZm9wZW4oJGRlc3RkaXIuJG5ld19za2luLicu cGhwJywgIndiIik7DQoJCWZ3cml0ZSgkZnAsICRidWYpOw0KCQlmY2xvc2UoJGZwKTsNCg0K CQkvLyBDcmVhdGUgdGhlIENTUyBmaWxlDQoJCSRmcCA9IGZvcGVuKCRkZXN0ZGlyLid0ZXh0 cGF0dGVybi5jc3MnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGltcG9ydCk7DQoJCWZjbG9z ZSgkZnApOw0KDQoJCWlmICgkc2tpbikgew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2lu X2Nsb25lZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCgkJfSBlbHNlIHsN CgkJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScg PT4gJG5ld19za2luKSk7Ow0KCQl9DQoNCi8vCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9u b3RfY3JlYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCg0KCX0NCg0K CXNtZF9hdF9saXN0KCRtc2cpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9hdF9leHBvcnRfb3B0aW9ucygpIHsNCgkkc21kX2NydXNoZXJzID0g YXJyYXkoJ3RhcicgPT4gc21kX2F0X2dUeHQoJ2NfdGFyJykpOw0KCWlmIChmdW5jdGlvbl9l eGlzdHMoJ2d6Y29tcHJlc3MnKSkgew0KCQkkc21kX2NydXNoZXJzWydnemlwJ10gPSBzbWRf YXRfZ1R4dCgnY19nemlwJyk7DQoJCSRzbWRfY3J1c2hlcnNbJ3ppcCddID0gc21kX2F0X2dU eHQoJ2NfemlwJyk7DQoJfQ0KCWlmIChmdW5jdGlvbl9leGlzdHMoJ2J6Y29tcHJlc3MnKSkg ew0KCQkkc21kX2NydXNoZXJzWydiemlwMiddID0gc21kX2F0X2dUeHQoJ2NfYnppcDInKTsN Cgl9DQoJcmV0dXJuICRzbWRfY3J1c2hlcnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4cG9ydCgpIHsNCglnbG9iYWwgJHByZWZzLCAk c21kX2F0X3ByZWZzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCdj cnVzaCcpKSkpOw0KCSRtZXNzYWdlPScnOw0KCWNoZGlyKFRIRU1FKTsNCgkkb3V0ID0gJHNr aW47DQoNCgkvLyBDaGVjayB0aGUgcGFzc2VkIGNvbXByZXNzaW9uIGZvcm1hdCBpcyB2YWxp ZDsgdXNlIGRlZmF1bHQgaWYgbm90DQoJJGNydXNoZXJzID0gc21kX2F0X2V4cG9ydF9vcHRp b25zKCk7DQoJaWYgKCRjcnVzaD09JycgfHwgJGNydXNoPT0ndW5kZWZpbmVkJyB8fCAhYXJy YXlfa2V5X2V4aXN0cygkY3J1c2gsICRjcnVzaGVycykpIHsNCgkJJGNydXNoID0gZ2V0X3By ZWYoJ3NtZF9hdF9jcnVzaCcsICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF9jcnVzaCddKTsN Cgl9DQoNCglzd2l0Y2goJGNydXNoKSB7DQoJCWNhc2UgJ3ppcCc6DQoJCQkkemlwID0gbmV3 IHNtZF9hdF96aXBfZmlsZSgkb3V0LicuemlwJyk7DQoJCQlicmVhazsNCgkJY2FzZSAnYnpp cDInOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfYnppcF9maWxlKCRvdXQuJy50YnoyJyk7DQoJ CQlicmVhazsNCgkJY2FzZSAndGFyJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3Rhcl9maWxl KCRvdXQuJy50YXInKTsNCgkJCWJyZWFrOw0KCQljYXNlICdnemlwJzoNCgkJZGVmYXVsdDoN CgkJCSR6aXAgPSBuZXcgc21kX2F0X2d6aXBfZmlsZSgkb3V0LicudGd6Jyk7DQogCQkJYnJl YWs7DQoJfQ0KDQoJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+IHR4cGF0 aC5EUy5USEVNRSwgJ292ZXJ3cml0ZScgPT4gMSwgJ2lubWVtb3J5JyA9PiAxKSk7DQoJJHpp cC0+YWRkX2ZpbGVzKCRza2luLkRTLicqLionKTsNCgkkemlwLT5leGNsdWRlX2ZpbGVzKCRz a2luLkRTLicqLnN2bionKTsNCgkkemlwLT5jcmVhdGVfYXJjaGl2ZSgpOw0KCSR6aXAgLT5k b3dubG9hZF9maWxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2ltcG9ydCgpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJG5hbWUgPSAk X0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmlsZSA9IGdldF91cGxvYWRlZF9maWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSwgdHhwYXRoLkRTLlRIRU1FLmJhc2Vu YW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOw0KCSRiYXNlZGlyID0gdHhw YXRoLkRTLlRIRU1FOw0KCSRtZXNzYWdlPScnOw0KCSRpbmZvID0gZXhwbG9kZSAoJy4nLCRu YW1lKTsNCgkkZXh0ID0gJGluZm9bMV07DQoNCglpZiAoJG5hbWUgJiYgJGZpbGUpIHsNCgkJ aWYgKCRleHQgPT0gInppcCIgJiYgZnVuY3Rpb25fZXhpc3RzKCd6aXBfb3BlbicpKSB7DQoJ CQkkemlwID0gemlwX29wZW4oJGZpbGUpOw0KCQkJaWYgKCR6aXApIHsNCgkJCQkkZmlsZWN0 ciA9IDA7DQoJCQkJd2hpbGUgKCR6aXBfZW50cnkgPSB6aXBfcmVhZCgkemlwKSkgew0KCQkJ CQkkZm4gPSB6aXBfZW50cnlfbmFtZSgkemlwX2VudHJ5KTsNCgkJCQkJJGZpbGVwYXRoID0g JGJhc2VkaXIuJGZuOw0KCQkJCQlpZiAoc3RycG9zKCRmaWxlcGF0aCwgJy4uJykgPT09IGZh bHNlKSB7DQoJCQkJCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmaWxlcGF0aCk7DQoJCQkJ CQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlcGF0aCkpIHsNCgkJCQkJCQkkcmV0ID0gc21kX21r ZGlyX3JlY3Vyc2l2ZSgoKGlzc2V0KCRwYXRoX3BhcnRzWydleHRlbnNpb24nXSkpID8gZGly bmFtZSgkZmlsZXBhdGgpIDogJGZpbGVwYXRoKSk7DQoJCQkJCQkJaWYgKCRyZXQgPT09IGZh bHNlKSB7DQoJCQkJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9mYWlsZWQn LCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJ fSBlbHNlIHsNCgkJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ludmFsaWRfZmlsZScs IGFycmF5KCd7bmFtZX0nID0+ICRmbikpOw0KCQkJCQl9DQoNCgkJCQkJaWYgKCRtZXNzYWdl PT0nJykgew0KCQkJCQkJaWYgKCFpc19kaXIoJGZuKSkgew0KCQkJCQkJCSRmcCA9IGZvcGVu KCRiYXNlZGlyLiRmbiwgIndiIik7DQoJCQkJCQkJaWYgKHppcF9lbnRyeV9vcGVuKCR6aXAs ICR6aXBfZW50cnksICJyIikpIHsNCgkJCQkJCQkJJGJ1ZiA9IHppcF9lbnRyeV9yZWFkKCR6 aXBfZW50cnksIHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSk7DQoJCQkJCQkJCXpp cF9lbnRyeV9jbG9zZSgkemlwX2VudHJ5KTsNCgkJCQkJCQl9DQoJCQkJCQkJZndyaXRlKCRm cCwgJGJ1Zik7DQoJCQkJCQkJZmNsb3NlKCRmcCk7DQovLwkJCQkJCQllY2hvICJUaGUgZmls ZSAiLiRmbi4iIHdhcyBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5XG48YnI+IjsNCgkJCQkJCQkk ZmlsZWN0cisrOw0KCQkJCQkJfQ0KCSAgICAgICAgICAgIH0NCgkJCQl9DQoJCQkJemlwX2Ns b3NlKCR6aXApOw0KCQkJCWlmICgkbWVzc2FnZSA9PSAnJykgew0KCQkJCQkkbWVzc2FnZSA9 IHNtZF9hdF9nVHh0KCdpbXBvcnRfc3VjY2VzcycsIGFycmF5KCd7bnVtfScgPT4gJGZpbGVj dHIpKTsNCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAidGd6Iikgew0KCQkJ JHppcCA9IG5ldyBzbWRfYXRfZ3ppcF9maWxlKGJhc2VuYW1lKCRmaWxlKSk7DQoJCQkkemlw LT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIsICdvdmVyd3JpdGUn ID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRtZXNzYWdlID0gc21k X2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQgPT0gInRiejIiKSB7 DQoJCQkkemlwID0gbmV3IHNtZF9hdF9iemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJ CSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3 cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAidGFy Iikgew0KCQkJJHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsN CgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292 ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3Nh Z2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSB7DQoJCQkkbWVzc2Fn ZSA9IGFycmF5KHNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnLCBh cnJheSgne2NydXNofScgPT4gJGV4dCkpLCBFX1dBUk5JTkcpOw0KCQl9DQoNCgkJLy8gUmVt b3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZQ0KCQl1bmxpbmsoJGZpbGUpOw0KCX0gZWxzZSB7DQoJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRf bGlzdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X3VwbG9hZF9pbWFnZSgpIHsNCglnbG9iYWwgJGZpbGVfbWF4X3VwbG9h ZF9zaXplOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ2lkJykpKSk7DQoJJF9Q T1NUWydza2luJ10gPSAkc2tpbiA9ICRpZDsNCg0KCSRuYW1lID0gJF9GSUxFU1sndGhlZmls ZSddWyduYW1lJ107DQoJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd0aGVm aWxlJ11bJ3RtcF9uYW1lJ10pOw0KCSRtZXNzYWdlPScnOw0KDQoJaWYgKCRmaWxlID09PSBm YWxzZSkgew0KCQkkbWVzc2FnZSA9IGdUeHQoJ2ZpbGVfdXBsb2FkX2ZhaWxlZCcpIC4iICRu YW1lIC0gIi51cGxvYWRfZ2V0X2Vycm9ybXNnKCRfRklMRVNbJ3RoZWZpbGUnXVsnZXJyb3In XSk7DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgl9DQoNCgkkc2l6ZSA9IGZpbGVzaXpl KCRmaWxlKTsNCglpZiAoJGZpbGVfbWF4X3VwbG9hZF9zaXplIDwgJHNpemUpIHsNCgkJdW5s aW5rKCRmaWxlKTsNCgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAu IiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1zZyhVUExPQURfRVJSX0ZPUk1fU0laRSk7 DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgl9DQoNCgkkc2tpbmZvID0gc21kX2F0X3Jl YWRfc2tpbmZvKCRza2luKTsNCgkkbmV3X3NraW4gPSAkc2tpbmZvWyduYW1lJ107DQoJJG5l d3BhdGggPSAkc2tpbmZvWydwYXRoJ107DQoNCglpZiAoJG5ld19za2luICYmICRmaWxlKSB7 DQoJCWlmKHNoaWZ0X3VwbG9hZGVkX2ZpbGUoJGZpbGUsICRuZXdwYXRoLiRuYW1lKSkgew0K CQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndXBsb2FkX3N1Y2Nlc3MnKTsNCgkJfSBlbHNl IHsNCgkJCXVubGluaygkZmlsZSk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1cGxv YWRfZmFpbGVkJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0 KCdlbXB0eV9pbmZvJyk7DQoJfQ0KDQoJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9kZWxldGVfaW1h Z2UoKSB7DQoJZ2xvYmFsICRzbWRfY29yZV90aGVtZXM7DQoNCglleHRyYWN0KGRvU2xhc2go Z3BzYShhcnJheSgnc2tpbicpKSkpOw0KCSRmaWxlX2xpc3QgPSBncHMoJ3NtZF9hdF9pbWFn ZXMnKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmIChlbXB0eSgkZmlsZV9saXN0KSkgew0KCQkk bWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJfSBlbHNlIHsNCgkJaWYg KGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBz bWRfYXRfZ1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4p KTsNCgkJfSBlbHNlIHsNCgkJCWZvcmVhY2ggKCRmaWxlX2xpc3QgYXMgJGltYWdlKSB7DQoJ CQkJJHBhdGggPSB0eHBhdGguRFMuJGltYWdlOw0KCQkJCXVubGluaygkcGF0aCk7DQoJCQl9 DQoJCX0NCgl9DQoNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0ZSgpIHsNCglnbG9iYWwg JHNtZF9jb3JlX3RoZW1lcywgJHRoZW1lLCAkc21kX2F0X3ByaXZzLCAkc21kX2F0X2V2ZW50 Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnZmlsZScpKSkpOw0K CSRtZXNzYWdlPScnOw0KDQoJaWYgKCRmaWxlKSB7DQoJCS8vIEVkaXRpbmcgYSBza2luLCB0 aHVzIGRlbGV0aW5nIGEgc2luZ2xlIGZpbGUNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21k X2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVt ZV9maWxlJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJCXNtZF9hdF9lZGl0KCRt ZXNzYWdlKTsNCgkJfSBlbHNlIHsNCgkJCSRkZWwgPSB1bmxpbmsoVEhFTUUuJHNraW4uRFMu JGZpbGUpOw0KCQkJaWYgKCRkZWwpIHsNCgkJCQkkbWVzc2FnZSA9IGdUeHQoJ2ZpbGVfZGVs ZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJCQkJJF9QT1NUWydmaWxlJ10g PSAnJzsgLy8gQ2xlYXIgdGhlIHZhcmlhYmxlIHNvIHRoZSBmaWxlbmFtZSBkb2Vzbid0IGFw cGVhciBvbiB0aGUgZWRpdCBwYWdlDQoJCQl9IGVsc2Ugew0KCQkJCSRtZXNzYWdlID0gc21k X2F0X2dUeHQoJ2ZpbGVfbm90X2RlbGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZmlsZSkp Ow0KCQkJfQ0KCQl9DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgl9IGVsc2Ugew0KCQlp ZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9 IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsN CgkJCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCgkJfSBlbHNlIHsNCgkJCS8vIFZpZXdpbmcg dGhlIHNraW4gbGlzdCwgdGh1cyBkZWxldGluZyB0aGUgd2hvbGUgc2tpbg0KCQkJJHNraW5k aXIgPSBUSEVNRS4kc2tpbjsNCgkJCWlmICghc21kX3JtZGlyX3JlY3Vyc2l2ZSgkc2tpbmRp cikpIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdkZWxldGVfZmFpbGVkJyk7DQoJ CQl9IGVsc2Ugew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3NraW5fZGVsZXRlZCcs IGFycmF5KCd7bmFtZX0nID0+ICRza2luKSk7DQoJCQl9DQoNCgkJCS8vIEhhbmRsZSBzaXR1 YXRpb25zIGlmIGN1cnJlbnQgc2tpbiBoYXMgYmVlbiBkZWxldGVkDQoJCQlpZiAoIWZpbGVf ZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kc2tpbikpIHsNCgkJCQkkYXRfcHJlZnMgPSBzbWRf YXRfZ2V0X3ByZWZzKCk7DQoNCgkJCQkvLyBSZXNldCB0aGUgZ2xvYmFsIHNraW4gaW4gY2Fz ZSBpdCdzIGJlZW4gZGVsZXRlZA0KCQkJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNb J3NtZF9hdF9nbG9iYWxfc2tpbiddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tp biddIDogJyc7DQoJCQkJJGdibF9za2luID0gKCRnYmxfc2tpbiAhPSAnJyAmJiBmaWxlX2V4 aXN0cyh0eHBhdGguRFMuVEhFTUUuJGdibF9za2luKSkgPyAkZ2JsX3NraW4gOiAnY2xhc3Np Yyc7DQoJCQkJc2V0X3ByZWYoJ3NtZF9hdF9nbG9iYWxfc2tpbicsICRnYmxfc2tpbiwgJHNt ZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJc2V0X3ByZWYo J3RoZW1lX25hbWUnLCAkZ2JsX3NraW4pOw0KDQoJCQkJJHNraW4gPSBnZXRfcHJlZignc21k X3NraW4nKTsNCgkJCQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kc2tpbikp IHsNCgkJCQkJJHNraW4gPSAkZ2JsX3NraW47DQoJCQkJfQ0KCQkJCXNldF9wcmVmKCdzbWRf c2tpbicsICRza2luLCAnc21kX2F0JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwg UFJFRl9QUklWQVRFKTsNCgkJCX0NCgkJCSRfR0VUWydza2luJ10gPSAkc2tpbjsNCgkJCSRf R0VUWyduZXh0c3RlcCddID0gJ3NtZF9hdF9saXN0JzsNCgkJCXNtZF9hdF9zd2l0Y2goJG1l c3NhZ2UpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9zYXZlKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdz a2luJywnbmV3X3NraW4nLCdmaWxlJywnc21kX2F0X2VkaXRzJykpKSk7DQoNCgkkZWRpdGFi bGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIsICJwaHAiKTsNCgkkbWVzc2FnZSA9ICRl eHRyYU1zZyA9ICcnOw0KCSRmaWxlID0gdHJpbSgkZmlsZSk7DQoJJG5ld19za2luID0gdHJp bSgkbmV3X3NraW4pOw0KCSRtc2dsZXYgPSAwOw0KDQoJLy8gTmV3IGZpbGUNCglpZiAoISRm aWxlICYmICRuZXdfc2tpbikgew0KCQkkZmlsZSA9ICRuZXdfc2tpbjsNCgkJJGV4dCA9IGFy cmF5X3BvcChleHBsb2RlICgnLicsJGZpbGUpKTsNCgkJaWYgKHN0cnRvbG93ZXIoJGZpbGUp ICE9ICdyZWFkbWUnICYmICgkZXh0ID09ICcnIHx8ICFpbl9hcnJheSgkZXh0LCAkZWRpdGFi bGUpKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZmlsZXR5 cGUnKS5zbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZnVkZ2UnKTsNCgkJCSRtc2dsZXYgPSBF X1dBUk5JTkc7DQoJCQkkX1BPU1RbJ2ZpbGUnXSA9ICRmaWxlOw0KCQl9DQoJfQ0KDQoJaWYg KCRtZXNzYWdlPT0nJykgew0KCQkkc2tpbmRpciA9IFRIRU1FLiRza2luLkRTOw0KDQoJCSRm bmFtZSA9IHNhbml0aXplRm9yRmlsZSgkZmlsZSk7DQoJCSRuZXdfc2tpbiA9IHJhd3VybGVu Y29kZSgkbmV3X3NraW4pOw0KCQkkX1BPU1RbJ25ld19za2luJ10gPSAkbmV3X3NraW47DQoN CgkJJHNtZF9hdF9lZGl0cyA9IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJHNt ZF9hdF9lZGl0cykpOyAvLyBuZXdsaW5lIHdvcmthcm91bmQNCg0KCQlpZiAoJGZuYW1lKSB7 DQoJCQkkZmlsZXBhdGggPSAkc2tpbmRpci5EUzsNCgkJCWlmICghZmlsZV9leGlzdHMoJGZp bGVwYXRoLiRmbmFtZSkpIHsNCgkJCQkkcmV0ID0gdG91Y2goJGZpbGVwYXRoLiRmbmFtZSk7 DQoJCQkJaWYgKCRyZXQgPT09IGZhbHNlKSB7DQoJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dU eHQoJ21rZGlyX2ZhaWxlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZSkpOw0KCQkJCX0N CgkJCX0NCg0KCQkJLy8gQXNzdW1pbmcgbm8gZXJyb3JzIHNvIGZhci4uLg0KCQkJaWYgKCRt ZXNzYWdlID09ICcnKSB7DQoJCQkJJGZoID0gZm9wZW4oJGZpbGVwYXRoLiRmbmFtZSwgJ3di Jyk7DQoJCQkJZndyaXRlKCRmaCwgJHNtZF9hdF9lZGl0cyk7DQoJCQkJZmNsb3NlKCRmaCk7 DQoNCgkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikgew0KCQkJCQkkcmVzID0gcmVuYW1l KCRmaWxlcGF0aC4kZm5hbWUsICRmaWxlcGF0aC4kbmV3X3NraW4pOw0KCQkJCQkkZXh0cmFN c2cgPSAoJHJlcykgPyBzbWRfYXRfZ1R4dCgncmVuYW1lZCcsIGFycmF5KCd7bmFtZX0nID0+ ICRuZXdfc2tpbikpIDogc21kX2F0X2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsNCgkJCQl9DQoN CgkJCQkvLyBQcm9jZXNzIGFueSBjc3MgcmVwbGFjZW1lbnRzDQoJCQkJJGZpbGViaXRzID0g ZXhwbG9kZSAoJy4nLCgoJGZuYW1lPT0kbmV3X3NraW4pPyAkZm5hbWUgOiAkbmV3X3NraW4p KTsNCgkJCQkkY3NzZmlsZSA9ICRmaWxlYml0c1swXTsNCgkJCQkkZXh0ID0gYXJyYXlfcG9w KCRmaWxlYml0cyk7DQoJCQkJaWYgKCRleHQgPT0gJ3NzYycpIHsNCgkJCQkJJHJlcGxhY2Vt ZW50cyA9IGFycmF5KCk7DQoJCQkJCSRudW1fcmVwMSA9IHByZWdfbWF0Y2hfYWxsKCcvKFxA W0EtWmEtejAtOV9dKyk6XHMqKC4qKTsvJywgJHNtZF9hdF9lZGl0cywgJG1hdGNoZXMxKTsN CgkJCQkJJG51bV9yZXAyID0gcHJlZ19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05X10rKTpc cypceyguKj8pXH0vcycsICRzbWRfYXRfZWRpdHMsICRtYXRjaGVzMik7DQoNCgkJCQkJLy8g U2ltcGxlIHJlcGxhY2VtZW50cw0KCQkJCQlmb3JlYWNoKCRtYXRjaGVzMSBhcyAkaWR4ID0+ ICRyZXBhcnIpIHsNCgkJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJCQkvLyBSZW1vdmUg dGhlIHZhciBkZWZpbml0aW9ucw0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJHJlcCkg ew0KCQkJCQkJCQkkc21kX2F0X2VkaXRzID0gc3RyX3JlcGxhY2UoJHJlcCwgJycsJHNtZF9h dF9lZGl0cyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKCRpZHggPT0gMSkgew0K CQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7DQoJCQkJCQkJCSRy ZXBsYWNlbWVudHNbJHJlcF0gPSAkbWF0Y2hlczFbMl1bJGpkeF07DQoJCQkJCQkJfQ0KCQkJ CQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gTXVsdGktbGluZSByZXBsYWNlbWVudHMNCgkJCQkJ Zm9yZWFjaCgkbWF0Y2hlczIgYXMgJGlkeCA9PiAkcmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlk eCA9PSAwKSB7DQoJCQkJCQkJLy8gUmVtb3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJ CQlmb3JlYWNoICgkcmVwYXJyIGFzICRyZXApIHsNCgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9 IHN0cl9yZXBsYWNlKCRyZXAsICcnLCRzbWRfYXRfZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJ CX0NCgkJCQkJCWlmICgkaWR4ID09IDEpIHsNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFz ICRqZHggPT4gJHJlcCkgew0KCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyRyZXAuJzsnXSA9IHRy aW0oJG1hdGNoZXMyWzJdWyRqZHhdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0K CQkJCQkvLyBHZW5lcmF0ZSBhbmQgd3JpdGUgdGhlIG5ldyBjc3MgZmlsZQ0KCQkJCQkkc21k X2F0X2VkaXRzID0gdHJpbShzdHJ0cigkc21kX2F0X2VkaXRzLCAkcmVwbGFjZW1lbnRzKSk7 DQoJCQkJCSRmaCA9IGZvcGVuKCRmaWxlcGF0aC4kY3NzZmlsZS4nLmNzcycsICd3YicpOw0K CQkJCQlmd3JpdGUoJGZoLCAkc21kX2F0X2VkaXRzKTsNCgkJCQkJZmNsb3NlKCRmaCk7DQoJ CQkJCWlmICgkZm5hbWUgIT0gJG5ld19za2luKSB7DQoJCQkJCQkkb2xkZm5hbWUgPSBleHBs b2RlICgnLicsICRmbmFtZSk7DQoJCQkJCQkkb2xkZm5hbWUgPSAkb2xkZm5hbWVbMF0uJy5j c3MnOw0KCQkJCQkJJHJlcyA9IEB1bmxpbmsoJGZpbGVwYXRoLiRvbGRmbmFtZSk7DQoJCQkJ CX0NCgkJCQl9DQoNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdmaWxlX3NhdmVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJGZuYW1lKSkuYnIuJGV4dHJhTXNnOw0KCQkJfQ0KCQl9DQoJ fQ0KCXNtZF9hdF9lZGl0KGFycmF5KCRtZXNzYWdlLCAkbXNnbGV2KSk7DQp9DQoNCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQUkVGUw0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZ2V0X3ByZWZzKCkgew0KCWdsb2JhbCAkc21k X2F0X3ByZWZzOw0KCSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywnIixhcnJheV9r ZXlzKCRzbWRfYXRfcHJlZnNbMF0pKSk7DQoJJHJzID0gc2FmZV9yb3dzKCduYW1lLHZhbCcs J3R4cF9wcmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7DQoJJGF0X3ByZWZzID0g YXJyYXkoKTsNCglmb3JlYWNoICgkcnMgYXMgJHByZWZhcnIpIHsNCgkJJGF0X3ByZWZzWyRw cmVmYXJyWyduYW1lJ11dID0gJHByZWZhcnJbJ3ZhbCddOw0KCX0NCglyZXR1cm4gJGF0X3By ZWZzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9h dF9vcHRpb25zKCRldmVudCwgJHN0ZXAsICRtZXNzYWdlPScnKSB7DQoJc21kX2F0X3NldHVw KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfc2V0dXAoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0 X3ByZWZzLCAkc21kX2F0X2V2ZW50LCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXM7DQoNCgkk bnVtUmVxUHJlZnMgPSBjb3VudCgkc21kX2F0X3ByZWZzWzBdKTsNCgkkYXRfcHJlZnMgPSBz bWRfYXRfZ2V0X3ByZWZzKCk7DQoJJG51bVJvd3MgPSBjb3VudCgkYXRfcHJlZnMpOw0KDQoJ cGFnZXRvcChnVHh0KCdwcmVmcycpLCRtZXNzYWdlKTsNCg0KCS8vIFl1aywgd2h5J3MgdGhp cyBub3QgYXZhaWxhYmxlIGdsb2JhbGx5PyENCgkkbGV2ZWxzID0gYXJyYXkoDQovLwkJMSA9 PiBnVHh0KCdwdWJsaXNoZXInKSwNCgkJMiA9PiBnVHh0KCdtYW5hZ2luZ19lZGl0b3InKSwN CgkJMyA9PiBnVHh0KCdjb3B5X2VkaXRvcicpLA0KCQk0ID0+IGdUeHQoJ3N0YWZmX3dyaXRl cicpLA0KCQk1ID0+IGdUeHQoJ2ZyZWVsYW5jZXInKSwNCgkJNiA9PiBnVHh0KCdkZXNpZ25l cicpLA0KCSk7DQoJJG51bUxldnMgPSBjb3VudCgkbGV2ZWxzKTsNCg0KCS8vIFNwbGl0IHRo ZSB1c2VyIHNraW4gbGlzdA0KCSR1c2tpbnMgPSBhcnJheSgpOw0KCWlmIChpc3NldCgkYXRf cHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpIHsNCgkJJHVza2lucyA9IGV4cGxvZGUoJywn LCAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSk7DQoJfQ0KDQoJJGxheW91dCA9IChp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRf bGF5b3V0J10gOiAxOw0KCSRjbHJCdG4gPSAnIFs8c3BhbiBpZD0ic21kX2NsciIgY2xhc3M9 InNtZF9mYWtlYnRuIj4nLnNtZF9hdF9nVHh0KCdjbGVhcicpLic8L3NwYW4+XSc7DQoJJGJ0 blNldCA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9hdF9nVHh0KCdzZXQnKSwg J3B1Ymxpc2gnKTsNCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdU eHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9h dF9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJt aXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsN CgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4k c21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRp c3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0 ZScpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JzsNCgkkYnRuTGlzdCA9ICcgPGEgY2xhc3M9 Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4 dCgoKCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwvYT48 YnIgLz4nOw0KCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7 DQoJJHJhZEJ0bnMgPSBhcnJheSgNCgkJc21kX2F0X2dUeHQoJ3Blcl9zaXRlJyksDQoJCXNt ZF9hdF9nVHh0KCdwZXJfZ3JvdXAnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl91c2VyJyksDQoJ KTsNCg0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWlmICgkbnVtUm93cyA9PSAkbnVt UmVxUHJlZnMpIHsNCgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZA0KCQkkc2tpbl9saXN0ID0g c21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCQkvLyBzZWxlY3RJbnB1dCBuZWVkcyBib3RoIGlu ZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNhc2UNCgkJJHNraW5zZWwg PSBhcnJheSgpOw0KCQlmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtleTEgPT4gJHZhbHVlMSkg ew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJHZhbHVlMSkpIHsNCgkJCQkkc2tpbnNlbFskdmFs dWUxXSA9ICRza2luX2xpc3RbJGtleTFdOw0KCQkJfQ0KCQl9DQoJCSRnYmxfc2tpbiA9IChp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3Nt ZF9hdF9nbG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9z a2luJ10gOiAkdGhlbWUtPm5hbWU7DQoNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9hdF9n VHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpIC4gdGRhKCRidG5SZW1vdmUu JGJ0bkxpc3QsICRidG5TdHlsZSkgKTsNCgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBh Y3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3RlcD1zbWRfYXRfcHJlZnNf dXBkYXRlIiBvbnN1Ym1pdD0icmV0dXJuIHNtZF9wcmVzdWIoKTsiPic7DQoJCWVjaG8gdHIo dGRhKHNtZF9hdF9nVHh0KCdjYXNlX3NvcnQnKSkudGRhKHllc25vUmFkaW8oJ3NtZF9hdF9j YXNlX3NvcnQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQnXSksICcgd2lkdGg9IjI0 MCIgaWQ9InNtZF9hdF9jYXNlX3NvcnQiJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4 dCgnY3J1c2hfdHlwZScpKS50ZGEocmFkaW9TZXQoc21kX2F0X2V4cG9ydF9vcHRpb25zKCks ICdzbWRfYXRfY3J1c2gnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jcnVzaCddKSwgJyB3aWR0aD0i MjQwIiBpZD0ic21kX2F0X2NydXNoIicpKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0X2dUeHQo J2xheW91dCcpKS50ZGEocmFkaW9TZXQoYXJyYXkoc21kX2F0X2dUeHQoJ2xheW91dF9saXN0 JyksIHNtZF9hdF9nVHh0KCdsYXlvdXRfZ3JpZCcpKSwgJ3NtZF9hdF9sYXlvdXQnLCAkYXRf cHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9sYXlv dXQiJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgndGh1bWJzaXplJykpLnRkYShm SW5wdXQoJ3RleHQnLCAnc21kX2F0X3R3JywgJGF0X3ByZWZzWydzbWRfYXRfdHcnXSwnJywn JywnJyw0KS5zbWRfYXRfZ1R4dCgndGltZXMnKS5mSW5wdXQoJ3RleHQnLCAnc21kX2F0X3Ro JywgJGF0X3ByZWZzWydzbWRfYXRfdGgnXSwnJywnJywnJyw0KSkpOw0KCQllY2hvIHRyKA0K CQkJdGQoc21kX2F0X2dUeHQoJ2dsb2JhbF9za2luJykpDQoJCQkudGQoc2VsZWN0SW5wdXQo J3NtZF9hdF9nbG9iYWxfc2tpbicsICRza2luc2VsLCAkZ2JsX3NraW4sIDAsIDApKQ0KCQkp Ow0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnc2tpbl9zeXN0ZW0nKSkudGRhKHJhZGlv U2V0KCRyYWRCdG5zLCAnc21kX2F0X3N5c3RlbScsICRhdF9wcmVmc1snc21kX2F0X3N5c3Rl bSddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X3JhZGlvIicpKTsNCg0KCQkvLyBPcHRp b24gMQ0KCQkkcHJpdl9saXN0ID0gJzxzZWxlY3QgaWQ9InNtZF9hdF9wcml2cyIgbmFtZT0i c21kX2F0X3ByaXZzW10iIGNsYXNzPSJsaXN0IiBzaXplPSInLiRudW1MZXZzLiciIG11bHRp cGxlPSJtdWx0aXBsZSI+JzsNCgkJZm9yZWFjaCAoJGxldmVscyBhcyAkbGV2aWQgPT4gJGxl dm5hbWUpIHsNCgkJCSRwcml2X2xpc3QgLj0gJzxvcHRpb24gdmFsdWU9IicuJGxldmlkLici PicuJGxldm5hbWUuJzwvb3B0aW9uPic7DQoJCX0NCgkJJHByaXZfbGlzdCAuPSAnPC9zZWxl Y3Q+JzsNCg0KCQkvLyBOb3RlIHRoZSBoaWRkZW4gc2tpbiBncm91cCBib3g7IGpRdWVyeSBr ZWVwcyB0cmFjayBvZiBhbnkgbGlzdCBjaGFuZ2VzIGFuZCBrZWVwcyBpdCB1cGRhdGVkDQoJ CSRzZWxhID0gc21kX2F0X2dUeHQoJ3NraW5fZ3JvdXBzJyk7DQoJCSRzZWxiID0gaElucHV0 KCdzbWRfYXRfZ3JvdXBfbGlzdCcsICRhdF9wcmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSk7 DQoJCSRzZWxiIC49ICc8c2VsZWN0IGlkPSJzbWRfYXRfZ3JwcyIgbmFtZT0ic21kX2F0X2dy cHMiIGNsYXNzPSJsaXN0IiBzaXplPSInLiRudW1MZXZzLiciPic7DQoJCWZvcmVhY2ggKCRz a2luX2xpc3QgYXMgJGFza2luKSB7DQoJCQlpZiAoc21kX2F0X2V4aXN0cygkYXNraW4pKSB7 DQoJCQkJJHNlbGIgLj0gJzxvcHRpb24gdmFsdWU9IicuJGFza2luLiciPicuJGFza2luLic8 L29wdGlvbj4nOw0KCQkJfQ0KCQl9DQoJCSRzZWxiIC49ICc8L3NlbGVjdD4nOw0KCQllY2hv IHRyKHRkYSgkc2VsYSwgJyBjbGFzcz0ic21kX2F0X3NlbDEgc21kX2hpZGRlbiInKSAuIHRk YSgkc2VsYi4kcHJpdl9saXN0LCAnIHdpZHRoPSI0MDAiIGNsYXNzPSJzbWRfYXRfc2VsMSBz bWRfaGlkZGVuIicpKTsNCg0KCQkvLyBPcHRpb24gMg0KCQkkc2VsYSA9IHNtZF9hdF9nVHh0 KCdhbGxvd2VkX3NraW5zJyk7DQoJCSRzZWxiID0gJzxzZWxlY3QgaWQ9InNtZF9hdF91c2Vy X2xpc3QiIG5hbWU9InNtZF9hdF91c2VyX2xpc3RbXSIgY2xhc3M9Imxpc3QiIHNpemU9Ijgi IG11bHRpcGxlPSJtdWx0aXBsZSI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkYXNr aW4pIHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2VsYiAuPSAn PG9wdGlvbiB2YWx1ZT0iJy4kYXNraW4uJyInLigoaW5fYXJyYXkoJGFza2luLCAkdXNraW5z KSkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpLic+Jy4kYXNraW4uJzwvb3B0aW9u Pic7DQoJCQl9DQoJCX0NCgkJJHNlbGIgLj0gJzwvc2VsZWN0PicuJGNsckJ0bjsNCgkJZWNo byB0cih0ZGEoJHNlbGEsICcgY2xhc3M9InNtZF9hdF9zZWwyIHNtZF9oaWRkZW4iJykgLiB0 ZGEoJHNlbGIsICcgd2lkdGg9IjI0MCIgY2xhc3M9InNtZF9hdF9zZWwyIHNtZF9oaWRkZW4i JykpOw0KCQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7DQoJCWVjaG8gJzwv Zm9ybT4nOw0KCX0gZWxzZSBpZiAoJG51bVJvd3MgPiAwICYmICRudW1Sb3dzIDwgJG51bVJl cVByZWZzKSB7DQoJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfYXRfZ1R4dCgncHJlZnNfc29t ZScpKS5ici5icg0KCQkJCQkJLnNtZF9hdF9nVHh0KCdwcmVmc19zb21lX2V4cGxhaW4nKS5i ci5icg0KCQkJCQkJLnNtZF9hdF9nVHh0KCdwcmVmc19zb21lX29wdGlvbnMnKSwgJyBjb2xz cGFuPSIyIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0blJlbW92ZSwkYnRuU3R5bGUpIC4gdGRh KCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9IGVsc2Ugew0KCQllY2hvIHRyKHRkYShz bWRfYXRfZ1R4dCgncHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOw0K CQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5k VGFibGUoKTsNCg0KCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPg0KDQovLyBDb25jYXRlbmF0ZSBjaGVja2JveCBvcHRpb25zIGZvciBzdG9yYWdlDQpm dW5jdGlvbiBzbWRfYXRfcHJlZnN3YXAoc2VsVmFsdWUpIHsNCglmb3IgKGlkeD0wOyBpZHgg PCAzOyBpZHgrKykgew0KCQlpZiAoaWR4PT1zZWxWYWx1ZSkgew0KCQkJalF1ZXJ5KCIuc21k X2F0X3NlbCIraWR4KS5zaG93KCk7DQoJCX0gZWxzZSB7DQoJCQlqUXVlcnkoIi5zbWRfYXRf c2VsIitpZHgpLmhpZGUoKTsNCgkJfQ0KCX0NCn0NCmpRdWVyeShmdW5jdGlvbigpIHsNCglq UXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9zeXN0ZW0nXSIpLmNoYW5nZShmdW5jdGlvbigp IHsNCgkJc21kX2F0X3ByZWZzd2FwKHRoaXMudmFsdWUpOw0KCX0pOw0KDQoJalF1ZXJ5KCcj c21kX2NscicpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkoJyNzbWRfYXRfdXNlcl9s aXN0IG9wdGlvbicpLmF0dHIoInNlbGVjdGVkIiwgIiIpOw0KCX0pOw0KDQoJalF1ZXJ5KCIj c21kX2F0X2dycHMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBqUXVlcnko dGhpcykudmFsKCk7DQoNCgkJLy8gQ2xlYXIgdGhlIG9sZCBwcml2cyBsaXN0IGFuZCBncmFi IHRoZSBjdXJyZW50IGxpc3QgZnJvbSB0aGUgaGlkZGVuIGZpZWxkDQoJCWpRdWVyeSgiI3Nt ZF9hdF9wcml2cyBvcHRpb24iKS5hdHRyKCJzZWxlY3RlZCIsZmFsc2UpOw0KCQl2YXIgZ3Jw bGlzdCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgp Ow0KCQl2YXIgZ3JwcyA9IGdycGxpc3Quc3BsaXQoJywnKTsNCgkJdmFyIGNudCA9IGdycHMu bGVuZ3RoOw0KCQlmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjbnQ7IGlkeCsrKSB7DQoJCQlw cml2cyA9IGdycHNbaWR4XS5zcGxpdCgnOicpOw0KCQkJc2tpbmlkID0gcHJpdnMuc2hpZnQo KTsNCgkJCWlmIChza2luaWQgPT0gc2Vsc2tpbikgew0KCQkJCW51bVByaXZzID0gcHJpdnMu bGVuZ3RoOw0KCQkJCWZvciAoamR4ID0gMDsgamR4IDwgbnVtUHJpdnM7IGpkeCsrKSB7DQoJ CQkJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb25bdmFsdWU9JyIrcHJpdnNbamR4XSsi J10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0pOw0K DQoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzZWxz a2luID0galF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uOnNlbGVjdGVkIikudmFsKCk7DQoJ CXZhciBvdXQgPSBbXTsNCgkJdmFyIHByaXZzID0gW107DQoJCXByaXZzLnB1c2goc2Vsc2tp bik7DQoJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb246c2VsZWN0ZWQiKS5lYWNoKGZ1 bmN0aW9uKCkgew0KCQkJcHJpdnMucHVzaChqUXVlcnkodGhpcykudmFsKCkpOw0KCQl9KTsN CgkJaWYgKHByaXZzLmxlbmd0aCA9PSAxKSB7DQoJCQlwcml2cy5wb3AoKTsNCgkJfSBlbHNl IHsNCgkJCW91dC5wdXNoKHByaXZzLmpvaW4oIjoiKSk7DQoJCX0NCgkJdmFyIGhpZGxpc3Qg PSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwoKTsNCgkJ dmFyIHByZXZsaXN0ID0gaGlkbGlzdC5zcGxpdCgnLCcpOw0KCQl2YXIgcHJldmNudCA9IHBy ZXZsaXN0Lmxlbmd0aDsNCg0KCQlqUXVlcnkoIiNzbWRfYXRfZ3JwcyBvcHRpb24iKS5lYWNo KGZ1bmN0aW9uKCkgew0KCQkJY3VycnNraW4gPSBqUXVlcnkodGhpcykudmFsKCk7DQoJCQlp ZiAoY3VycnNraW4gIT0gc2Vsc2tpbikgew0KCQkJCWZvciAodmFyIGlkeCA9IDA7IGlkeCA8 IHByZXZjbnQ7IGlkeCsrKSB7DQoJCQkJCXByZXZwcml2cyA9IHByZXZsaXN0W2lkeF0uc3Bs aXQoJzonKTsNCgkJCQkJc2tpbmlkID0gcHJldnByaXZzLnNoaWZ0KCk7DQoJCQkJCS8vIEdl bmVyYXRlIHRoZSBwcml2IGxpc3QgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2tpbiwg cmVtb3ZpbmcgYW55IGR1cGxpY2F0ZSBwcml2cyBzZXQgZWxzZXdoZXJlDQoJCQkJCWlmIChz a2luaWQgPT0gY3VycnNraW4pIHsNCgkJCQkJCXRtcG91dCA9IFtdOw0KCQkJCQkJdG1wb3V0 LnB1c2goc2tpbmlkKTsNCgkJCQkJCWZvciAodGhpc3ByaXYgaW4gcHJldnByaXZzKSB7DQoJ CQkJCQkJaWYgKGpRdWVyeS5pbkFycmF5KHByZXZwcml2c1t0aGlzcHJpdl0sIHByaXZzKSA8 IDApIHsNCgkJCQkJCQkJdG1wb3V0LnB1c2gocHJldnByaXZzW3RoaXNwcml2XSk7DQoJCQkJ CQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKHRtcG91dC5sZW5ndGggPiAxKSB7DQoJCQkJCQkJ b3V0LnB1c2godG1wb3V0LmpvaW4oIjoiKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJ CQl9DQoJCX0pOw0KCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10i KS52YWwob3V0KTsNCgl9KTsNCg0KCS8vIERpc3BsYXkgYSB0b29sdGlwIHNob3dpbmcgdGhl IGN1cnJlbnRseS1hc3NpZ25lZCBza2luIHdoZW4gaG92ZXJpbmcgb3ZlciBhIHByaXZpbGVn ZSBsZXZlbA0KCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb24iKS5ob3ZlcihmdW5jdGlv bigpIHsNCgkJaG92aXRlbSA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJZ3JwcyA9IGpRdWVy eSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOw0KCQlpdGVtcyA9 IGdycHMuc3BsaXQoIiwiKTsNCgkJZm9yIChpZHggPSAwOyBpZHggPCBpdGVtcy5sZW5ndGg7 IGlkeCsrKSB7DQoJCQlza2lueiA9IGl0ZW1zW2lkeF0uc3BsaXQoIjoiKTsNCgkJCWZvciAo amR4ID0gMTsgamR4IDwgc2tpbnoubGVuZ3RoOyBqZHgrKykgew0KCQkJCWlmIChza2lueltq ZHhdID09IGhvdml0ZW0pIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLmF0dHIoInRpdGxlIiwgc2tp bnpbMF0pOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9LA0KCWZ1bmN0aW9u KCkgew0KCQlqUXVlcnkodGhpcykuYXR0cigidGl0bGUiLCAiIik7DQoJfSk7DQoJc21kX2F0 X3ByZWZzd2FwKGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X3N5c3RlbSddOmNoZWNrZWQi KS52YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIikuY2hhbmdlKCk7DQp9KTsNCjwv c2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRfZmFrZWJ0biB7DQoJY29s b3I6IzU1NTsNCgljdXJzb3I6cG9pbnRlcjsNCn0NCiNzbWRfYXRfcmFkaW8gaW5wdXQgew0K CWZsb2F0OmxlZnQ7DQoJY2xlYXI6Ym90aDsNCn0NCiNzbWRfYXRfcmFkaW8gbGFiZWwgew0K CWZsb2F0OmxlZnQ7DQp9DQouc21kX2hpZGRlbiB7DQoJZGlzcGxheTpub25lOw0KfQ0KPC9z dHlsZT4NCkVPSlM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gU3Bs aXQgYSBtdWx0aS1jaGFyIHByZWZlcmVuY2UgdmFsdWUgaW50byBhbiBhcnJheSBvZiBrZXlz L3ZhbHVlcy4NCi8vIE5vdGU6IHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm90IHJlYWQgZGly ZWN0bHkgZnJvbSB0aGUgcHJlZnMgYXJyYXkgaW4gdGhpcyBmdW5jdGlvbiAtIGludGVudGlv bmFsbHkNCmZ1bmN0aW9uIHNtZF9hdF9wcmVmX2V4cGxvZGUoJHZhbCkgew0KCSRvcmRlciA9 IGFycmF5X3ZhbHVlcyhhcnJheShzbWRfYXRfZ1R4dCgnY19nemlwJyksc21kX2F0X2dUeHQo J2NfYnppcCcpLHNtZF9hdF9nVHh0KCdjX3ppcCcpKSk7DQoJJG9ub2ZmID0gYXJyYXlfdmFs dWVzKHByZWdfc3BsaXQoJy8vJywgJHZhbCwgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkpKTsN Cgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRvcmRlciBhcyAka2V5MSA9PiAkdmFsdWUx KSB7DQoJCSRvdXRbKHN0cmluZykkdmFsdWUxXSA9ICRvbm9mZlska2V5MV07DQoJfQ0KCXJl dHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfaW5z dGFsbCgkc2hvd3BhbmU9JzEnKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoJJG1lc3Nh Z2UgPSAnJzsNCglmb3JlYWNoICgkc21kX2F0X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0 KSB7DQoJCWlmICghZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsN CgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCdwcmVmc19pZD0xLCBuYW1lPScu ZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkuJywgdmFsPScuZG9RdW90ZShkb1NsYXNoKCRkZmx0 KSkuJyxldmVudD0ic21kX2Fkc2tpbiInKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dwYW5lKSB7 DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0KCQlzbWRf YXRfc2V0dXAoJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X3ByZWZzX3JlbW92ZSgkc2hvd3BhbmU9JzEnKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJl ZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoIChhcnJheV9tZXJnZSgkc21kX2F0X3By ZWZzWzBdLCRzbWRfYXRfcHJlZnNbMV0pIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChm ZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2Fm ZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKSk7 DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0 KCdwcmVmc19kZWxldGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQoJfQ0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfdXBkYXRlKCkgew0KCWdsb2Jh bCAkc21kX3BsdWdpbl9wcmVmcywgJHNtZF9hdF9wcmVmcywgJHNtZF9hdF9ldmVudDsNCg0K CSRtZXNzYWdlID0gJyc7DQoJJHBvc3QgPSBhcnJheSgpOw0KCSRwb3N0WydzbWRfYXRfZ2xv YmFsX3NraW4nXSA9IGdwcygnc21kX2F0X2dsb2JhbF9za2luJyk7DQoJJHBvc3RbJ3NtZF9h dF9zeXN0ZW0nXSA9IGdwcygnc21kX2F0X3N5c3RlbScpOw0KCSRwb3N0WydzbWRfYXRfbGF5 b3V0J10gPSBncHMoJ3NtZF9hdF9sYXlvdXQnKTsNCgkkcG9zdFsnc21kX2F0X2Nhc2Vfc29y dCddID0gZ3BzKCdzbWRfYXRfY2FzZV9zb3J0Jyk7DQoJJHBvc3RbJ3NtZF9hdF90dyddID0g Z3BzKCdzbWRfYXRfdHcnKTsNCgkkcG9zdFsnc21kX2F0X3RoJ10gPSBncHMoJ3NtZF9hdF90 aCcpOw0KCWlmIChncHMoJ3NtZF9hdF91c2VyX2xpc3QnKSkgew0KCQkkcG9zdFsnc21kX2F0 X3VzZXJfbGlzdCddID0gam9pbignLCcsIGdwcygnc21kX2F0X3VzZXJfbGlzdCcpKTsNCgl9 IGVsc2Ugew0KCQkkcG9zdFsnc21kX2F0X3VzZXJfbGlzdCddID0gJyc7DQoJfQ0KCWlmIChn cHMoJ3NtZF9hdF9ncm91cF9saXN0JykpIHsNCgkJJHBvc3RbJ3NtZF9hdF9ncm91cF9saXN0 J10gPSBncHMoJ3NtZF9hdF9ncm91cF9saXN0Jyk7DQoJfQ0KCWlmIChncHMoJ3NtZF9hdF9j cnVzaCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfY3J1c2gnXSA9IGdwcygnc21kX2F0X2NydXNo Jyk7DQoJfQ0KDQoJLy8gU2V0IHRoZSBzeXN0ZW0td2lkZSB0aGVtZSB0byB0aGUgZ2xvYmFs IHRoZW1lDQoJaWYgKCRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgew0KCQlzZXRfcHJl ZigndGhlbWVfbmFtZScsICRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSk7DQoJfQ0KDQoJ Zm9yZWFjaCAoJHNtZF9hdF9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAo aXNzZXQoJHBvc3RbJHByZWZdKSkgew0KCQkJc2V0X3ByZWYoJHByZWYsICRwb3N0WyRwcmVm XSwgJHNtZF9hdF9ldmVudCwgMik7DQoJCX0NCgl9DQoJJG1lc3NhZ2UgPSBnVHh0KCdwcmVm ZXJlbmNlc19zYXZlZCcpOw0KCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVVRJTElUWSBGVU5DVElPTlMNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9wcml2cygkdXNlcj0n Jykgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoJJHVzZXIgPSAoJHVzZXIpID8gJHVzZXIgOiAk dHhwX3VzZXI7DQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJpdnMiLCAidHhwX3VzZXJzIiwg Im5hbWU9JyIuZG9TbGFzaCgkdXNlcikuIiciKTsNCglyZXR1cm4gJHByaXZzOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9leGlzdHMoJG5h bWUpIHsNCgkkaW5zdGFuY2UgPSB0aGVtZTo6ZmFjdG9yeSgkbmFtZSk7DQoJcmV0dXJuICRp bnN0YW5jZTsNCn0NCg0KLy8gSWYgcGVyLXVzZXIgc2tpbiBzdXBwb3J0IGlzIE9GRiwgdGhl IGdsb2JhbCBza2luIHdpbnMuDQovLyBPbmUgZXhjZXB0aW9uOiBpZiB0aGUgdXNlciBpcyBh biBhZG1pbiwgYWxsb3cgdGhlIGN1cnJlbnQgc2tpbiB0byBwcmV2YWlsIHNvIHRoZXkgbWF5 IHN3aXRjaCBza2lucyB3aXRoIGltcHVuaXR5DQovLyBhbmQgbm90IGFmZmVjdCB0aGUgZ2xv YmFsIHNraW4NCmZ1bmN0aW9uIHNtZF9hdF9wZXIoKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJp dnMsICRwcmVmcywgJHRoZW1lLCAkdHhwX3VzZXI7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRf Z2V0X3ByZWZzKCk7DQoJJHNraW5TeXMgPSBpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0 ZW0nXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA6IDA7DQoJJHByaXZzID0gc21k X2F0X2dldF9wcml2cygpOw0KCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9h dF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddICE9 ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAnJzsNCgkkZ2JsX3Nr aW4gPSAoc21kX2F0X2V4aXN0cygkZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFzc2lj JzsNCg0KCXN3aXRjaCAoJHNraW5TeXMpIHsNCgkJY2FzZSAwOg0KCQkJLy8gR2xvYmFsIGZv cmNlZCBza2luIChleGNlcHQgYWRtaW5zKQ0KCQkJaWYgKCFpbl9hcnJheSgkcHJpdnMsIGV4 cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsNCgkJCQlyZXR1cm4gJGdibF9za2luOw0K CQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRfcHJlZign c21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsN CgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4gOiAn Y2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAxOg0KCQkJLy8gR3JvdXAtbGV2 ZWwgZm9yY2VkIHNraW5zDQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcs ICRzbWRfYXRfcHJpdnMpKSkgew0KCQkJCSRmb3JjZVNraW5zID0gKGlzc2V0KCRhdF9wcmVm c1snc21kX2F0X2dyb3VwX2xpc3QnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlz dCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKTsNCg0KCQkJ CS8vIFNwbGl0IHRoZSBncm91cCBza2luIGxpc3QNCgkJCQkkZ3NraW5zID0gYXJyYXkoKTsN CgkJCQkkZ29wdHMgPSBleHBsb2RlKCcsJywgJGZvcmNlU2tpbnMpOw0KCQkJCWZvcmVhY2gg KCRnb3B0cyBhcyAkZ3JwZGVmKSB7DQoJCQkJCWlmICgkZ3JwZGVmID09ICcnKSBjb250aW51 ZTsNCgkJCQkJJHByaXZncnAgPSBleHBsb2RlKCI6IiwgJGdycGRlZik7DQoJCQkJCSRza2lu aWQgPSBhcnJheV9zaGlmdCgkcHJpdmdycCk7DQoJCQkJCWlmIChpbl9hcnJheSgkcHJpdnMs ICRwcml2Z3JwKSkgew0KCQkJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRza2luaWQpKSA/ ICRza2luaWQgOiAnY2xhc3NpYyc7Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiAoJGdi bF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZTsNCgkJCX0gZWxzZSB7DQoJCQkJ Ly8gQWRtaW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2Js X3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChzbWRf YXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJfQ0K CQkJYnJlYWs7DQoJCWNhc2UgMjoNCgkJCS8vIFBlci11c2VyIHNraW4uIElmIHVzZXIgaXMg bm9uLWFkbWluLCBjaGVjayB0aGUgc2tpbiBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0DQoJCQlp ZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMpKSkgew0K CQkJCSR2YWxpZFNraW5zID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlzdCdd KSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSA6ICgoJGdibF9za2luKSA/ICRn Ymxfc2tpbiA6ICR0aGVtZS0+bmFtZSk7DQoJCQkJJHZhbGlkU2tpbnMgPSBkb19saXN0KCR2 YWxpZFNraW5zKTsNCgkJCQkkdGhlX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRn Ymxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKGlu X2FycmF5KCR0aGVfc2tpbiwgJHZhbGlkU2tpbnMpICYmIHNtZF9hdF9leGlzdHMoJHRoZV9z a2luKSkgPyAkdGhlX3NraW4gOiAnJzsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQWRtaW5zDQoJ CQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdi bF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRh ZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJfQ0KCQkJYnJlYWs7DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlYWQgYW5kIHJldHVy biB0aGUgbWFuaWZlc3QsIGlmIGl0IGV4aXN0cyBhbmQgYWRkIGEgZmV3IG90aGVyIG5pY2V0 aWVzIHRvIHRoZSBhcnJheSBmb3IgbGF0ZXINCmZ1bmN0aW9uIHNtZF9hdF9yZWFkX3NraW5m bygkc2tpbikgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzOw0KDQoJJHRoaXNfdGhlbWUg PSB0aGVtZTo6ZmFjdG9yeSgkc2tpbik7DQoJJHNraW5mbyA9IGFycmF5KCk7DQoJaWYgKCR0 aGlzX3RoZW1lKSB7DQoJCSRza2luZm8gPSAkdGhpc190aGVtZS0+bWFuaWZlc3QoKTsNCgkJ JHNraW5mb1snZG5hbWUnXSA9IGVtcHR5KCRza2luZm9bJ3RpdGxlJ10pID8gdWN3b3Jkcygk dGhpc190aGVtZS0+bmFtZSkgOiAkc2tpbmZvWyd0aXRsZSddOw0KCQkkc2tpbmZvWyduYW1l J10gPSAkdGhpc190aGVtZS0+bmFtZTsNCgkJJHNraW5mb1sncGF0aCddID0gJHRoaXNfdGhl bWUtPnVybDsNCgkJJHNraW5mb1sncGhwZmlsZSddID0gJHRoaXNfdGhlbWUtPnBhdGgoJHNr aW4pOw0KCQkkc2tpbmZvWydiYXNlZF9vbiddID0gJyc7DQoJCSRjb250ZW50cyA9IGZpbGVf Z2V0X2NvbnRlbnRzKCRza2luZm9bJ3BocGZpbGUnXSk7DQoJCWlmICgoJHBvcyA9IHN0cnBv cygkY29udGVudHMsICd0aGVtZTo6YmFzZWRfb24nKSkgIT09IGZhbHNlKSB7DQoJCQkkYmVn cG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkcG9zKSsxOw0KCQkJJGVuZHBvcyA9IHN0 cnBvcygkY29udGVudHMsICInIiwgJGJlZ3Bvcyk7DQoJCQkkYmFzZSA9IHN1YnN0cigkY29u dGVudHMsICRiZWdwb3MsICRlbmRwb3MtJGJlZ3Bvcyk7DQoJCQkkc2tpbmZvWydiYXNlZF9v biddID0gKGluX2FycmF5KCRiYXNlLCAkc21kX2NvcmVfdGhlbWVzKSkgPyAnJyA6ICRiYXNl Ow0KCQl9DQoJCXVuc2V0KCR0aGlzX3RoZW1lKTsNCgl9DQoJcmV0dXJuICRza2luZm87DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gR3JhYiB0aGUgdGh1bWJuYWls IGZpbGVuYW1lIGlmIGl0IGV4aXN0cywgb3B0aW9uYWxseSByZXR1cm4gYSBmb3JtYXR0ZWQg aW1nIHRhZw0KZnVuY3Rpb24gc21kX2F0X2dldF90aHVtYigkc2tpbiwgJGltZz0wKSB7DQoJ Z2xvYmFsICRzbWRfYXRfcHJlZnM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZz KCk7DQoJJHR3ID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNb J3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J107DQoJJHRoID0g aXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCdd IDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ107DQoJJHVzZV90aHVtYiA9ICgkdHcg PT0gMCB8fCAkdGggPT0gMCkgPyBmYWxzZSA6IHRydWU7DQoNCgkvLyBBbiBhcnJheSBtZWFu cyB0aGUgbWFuaWZlc3QgaGFzIGFscmVhZHkgYmVlbiByZWFkIGFuZCBpcyBiZWluZyBwYXNz ZWQgaW50byB0aGlzIGZ1bmN0aW9uDQoJaWYgKCFpc19hcnJheSgkc2tpbikpIHsNCgkJJHNr aW4gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0KCX0NCglpZiAoJHNraW4pIHsNCgkJ JHNraW5kaXIgPSAkc2tpblsncGF0aCddOw0KCQkkdGh1bWJuYW1lID0gZ2xvYigkc2tpbmRp ci4nc2NyZWVuc2hvdC4qJyk7DQoJCXJldHVybiAoJGltZyAmJiAkdXNlX3RodW1iICYmICR0 aHVtYm5hbWUgJiYgZmlsZV9leGlzdHMoJHRodW1ibmFtZVswXSkpID8gJzxpbWcgc3JjPSIn LiR0aHVtYm5hbWVbMF0uJyIgYWx0PSInLigoaXNzZXQoJHNraW5bJ25hbWUnXSkpID8gJHNr aW5bJ25hbWUnXSA6ICcnKS4nIHRodW1ibmFpbCIgc3R5bGU9ImJvcmRlcjoycHggcmlkZ2Ug Izk5OTtwYWRkaW5nOjJweDsiIHdpZHRoPSInLiR0dy4nIiBoZWlnaHQ9IicuJHRoLiciIC8+ JyA6ICcnOw0KCX0gZWxzZSB7DQoJCXJldHVybiAnJzsNCgl9DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbnMoKSB7DQoJJHNr aW5fbGlzdCA9IHRoZW1lOjpuYW1lcygpOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfc29ydCgk c2tpbl9saXN0KTsNCglyZXR1cm4gJHNraW5fbGlzdDsNCn0NCg0KLy8gU29ydCB0aGUgc2tp bnMgYnV0IGtlZXAgJ2NsYXNzaWMnIGF0IHRoZSB0b3ANCmZ1bmN0aW9uIHNtZF9hdF9zb3J0 KCRza2luX2xpc3QpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJGNhc2VTZW5zZSA9IGlzc2V0 KCRwcmVmc1snc21kX2F0X2Nhc2Vfc29ydCddKSA/ICRwcmVmc1snc21kX2F0X2Nhc2Vfc29y dCddIDogMTsNCg0KCWlmKCRjYXNlU2Vuc2UpIHsNCgkJbmF0c29ydCgkc2tpbl9saXN0KTsN Cgl9IGVsc2Ugew0KCQluYXRjYXNlc29ydCgkc2tpbl9saXN0KTsNCgl9DQoJJGRmbHRfZm91 bmQgPSBmYWxzZTsNCglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luX2lkeCA9PiAkc2tp bl9uYW1lKSB7DQoJCWlmICgkc2tpbl9uYW1lID09ICJjbGFzc2ljIikgew0KCQkJdW5zZXQo JHNraW5fbGlzdFskc2tpbl9pZHhdKTsNCgkJCSRkZmx0X2ZvdW5kID0gdHJ1ZTsNCgkJCWJy ZWFrOw0KCQl9DQoJfQ0KCWlmICgkZGZsdF9mb3VuZCkgew0KCQlhcnJheV91bnNoaWZ0KCRz a2luX2xpc3QsImNsYXNzaWMiKTsNCgl9DQoNCglyZXR1cm4gJHNraW5fbGlzdDsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfbGlzdGRpcigk c3RhcnRfZGlyPScuJykgew0KCSRmaWxlcyA9IGFycmF5KCk7DQoNCglpZiAoaXNfZGlyKCRz dGFydF9kaXIpKSB7DQoJCSRmaCA9IG9wZW5kaXIoJHN0YXJ0X2Rpcik7DQoJCXdoaWxlICgo JGZpbGUgPSByZWFkZGlyKCRmaCkpICE9PSBmYWxzZSkgew0KCQkJLy8gbG9vcCB0aHJvdWdo IHRoZSBmaWxlcywgc2tpcHBpbmcgLiBhbmQgLi4sIGFuZCByZWN1cnNpbmcgaWYgbmVjZXNz YXJ5DQoJCQlpZiAoc3RyY21wKCRmaWxlLCAnLicpPT0wIHx8IHN0cmNtcCgkZmlsZSwgJy4u Jyk9PTApIGNvbnRpbnVlOw0KCQkJJGZpbGVwYXRoID0gJHN0YXJ0X2RpciAuICcvJyAuICRm aWxlOw0KCQkJaWYgKCBpc19kaXIoJGZpbGVwYXRoKSApIHsNCgkJCQkkZmlsZXMgPSBhcnJh eV9tZXJnZSgkZmlsZXMsIHNtZF9hdF9saXN0ZGlyKCRmaWxlcGF0aCkpOw0KCQkJfSBlbHNl IHsNCgkJCQlhcnJheV9wdXNoKCRmaWxlcywgJGZpbGVwYXRoKTsNCgkJCX0NCgkJfQ0KCQlj bG9zZWRpcigkZmgpOw0KCX0gZWxzZSB7DQoNCgkJLy8gZmFsc2UgaWYgdGhlIGZ1bmN0aW9u IHdhcyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG5vbi1kaXJlY3RvcnkgYXJndW1lbnQNCgkJ JGZpbGVzID0gZmFsc2U7DQoJfQ0KDQoJcmV0dXJuICRmaWxlczsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZWN1cnNpdmUgcm1kaXIoKSBjb3VydGVzeSBvZiB0 aGUgcGhwIG1hbnVhbCB1c2VyIGNvbW1lbnRzDQpmdW5jdGlvbiBzbWRfcm1kaXJfcmVjdXJz aXZlKCRmaWxlcGF0aCkgew0KCWlmIChpc19kaXIoJGZpbGVwYXRoKSAmJiAhaXNfbGluaygk ZmlsZXBhdGgpKSB7DQoJCWlmICgkZGggPSBvcGVuZGlyKCRmaWxlcGF0aCkpIHsNCgkJCXdo aWxlICgoJHNmID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAoJHNmID09 ICcuJyB8fCAkc2YgPT0gJy4uJykgY29udGludWU7DQoJCQkJaWYgKCFzbWRfcm1kaXJfcmVj dXJzaXZlKCRmaWxlcGF0aC4nLycuJHNmKSkgew0KCQkJCQlicmVhazsgLy8gRG9oLCBjYW4n dCBkZWxldGUNCgkJCQl9DQoJCQl9DQoJCQljbG9zZWRpcigkZGgpOw0KCQl9DQoJCXJldHVy biBybWRpcigkZmlsZXBhdGgpOw0KCX0NCglyZXR1cm4gdW5saW5rKCRmaWxlcGF0aCk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRnJvbSBQSFAgbWFudWFsIGNv bW1lbnRzLiBUaGFua3MgcHVyZW1hbmdvDQpmdW5jdGlvbiBzbWRfYXRfaXNfZGlyKCRkaXIp IHsNCgkvLyBieXBhc3NlcyBvcGVuX2Jhc2VkaXIgcmVzdHJpY3Rpb25zIG9mIGlzX2RpciBh bmQgZmlsZXBlcm1zDQoJJHRtcF9jbWQgPSBgbHMgLWRsICRkaXJgOw0KCSRkaXJfZmxhZyA9 ICR0bXBfY21kWzBdOw0KCWlmKCRkaXJfZmxhZyE9ImQiKSB7DQoJCS8vIG5vdCBkOyB1c2Ug bmV4dCBjaGFyIChmaXJzdCBjaGFyIG1pZ2h0IGJlICdzJyBhbmQgaXMgc3RpbGwgZGlyZWN0 b3J5KQ0KCQkkZGlyX2ZsYWcgPSAkdG1wX2NtZFsxXTsNCgl9DQoJcmV0dXJuICgkZGlyX2Zs YWc9PSJkIik7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX21rZGlyX3JlY3Vyc2l2ZSgkcGF0aCwgJG1vZGUgPSAwNzU1KSB7DQoJJHBhdGggPSAo c3RycG9zKCRwYXRoLCAnLycpID09PSAwKSA/IHN1YnN0cigkcGF0aCwgMSkgOiAkcGF0aDsN CgkkZGlycyA9IGV4cGxvZGUoRFMsICRwYXRoKTsNCgkkY291bnQgPSBjb3VudCgkZGlycyk7 DQoJJHBhdGggPSAnJzsNCglmb3IgKCRpZHggPSAwOyAkaWR4IDwgJGNvdW50OyArKyRpZHgp IHsNCgkJJHBhdGggLj0gRFMgLiAkZGlyc1skaWR4XTsNCgkJaWYgKCFzbWRfYXRfaXNfZGly KCRwYXRoKSkgew0KCQkJaWYgKCFta2RpcigkcGF0aCwgJG1vZGUpKSB7DQoJCQkJcmV0dXJu IGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiB0cnVlOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jaGFuZ2VfcGFnZWJ5KCkgew0K CXNldGNvb2tpZSgnc21kX2F0X3BhZ2VieScsIGdwcygncXR5JykpOw0KCXNtZF9hdF9saXN0 KCcnKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfc3dpdGNoKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJpdnM7DQoNCgll eHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICdldmVudCcsICduZXh0c3RlcCcp KSkpOw0KCSR1cmwgPSAiP2V2ZW50PSIuJGV2ZW50LiImc3RlcD0iLiRuZXh0c3RlcDsNCg0K CWlmICgkc2tpbiAmJiBzbWRfYXRfZXhpc3RzKCRza2luKSkgew0KCQlzZXRfcHJlZignc21k X3NraW4nLCAkc2tpbiwgJGV2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAwLCBQ UkVGX1BSSVZBVEUpOw0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gKCgkbWVzc2FnZSkgPyAk bWVzc2FnZSA6IHNtZF9hdF9nVHh0KCdza2luX3N3aXRjaGVkJywgYXJyYXkoJ3tza2lufScg PT4gJHNraW4pKSk7DQoJfSBlbHNlIHsNCgkJJHVybCAuPSAnJm1lc3NhZ2U9JyAuICRtZXNz YWdlOw0KCX0NCg0KCS8vIFNpbmNlIHRoZSBoZWFkZXJzIGhhdmUgYmVlbiBzZW50LCBkb3Vi bGUtZGVjbHV0Y2ggaW4gb3JkZXIgdG8gc2hvdyB0aGUgc2tpbiB0aGlzIGZpcnN0IHRpbWUN CgllY2hvIDw8PEVPUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0Kd2luZG93 LmxvY2F0aW9uLmhyZWY9InskdXJsfSI7DQo8L3NjcmlwdD4NCjxub3NjcmlwdD4NCjxtZXRh IGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7dXJsPXskdXJsfSIgLz4NCjwvbm9z Y3JpcHQ+DQpFT1M7DQoJZXhpdDsNCn0NCg0KLy8gQWxsLXVzZXIgc2tpbiBjaG9vc2VyDQpm dW5jdGlvbiBzbWRfYWRtYXQoJGV2ZW50LCAkc3RlcCkgew0KCWlmKCEkc3RlcCBvciAhaW5f YXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkpKSkgew0KCQlz bWRfYXRfY2hvb3NlcignJyk7DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2Nob29zZXIoJG1lc3NhZ2U9Jycp IHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X2FkbV9ldmVudCwgJHRoZW1lOw0KDQoJJGF0 X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0X3By ZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddIDog MTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJlZnNb J3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J10pICsgMTA7DQoJ JHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3ByZWZzWydzbWRf YXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCddKSArIDgwOw0KDQoJJG1l c3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21lc3NhZ2UnKTsNCglwYWdl dG9wKHNtZF9hdF9nVHh0KCdza2lubmVyJyksJG1lc3NhZ2UpOw0KDQoJJGN1cnJfc2tpbiA9 ICR0aGVtZS0+bmFtZTsNCg0KCSRhbGxvd2VkID0gJyc7DQoJaWYgKGlzc2V0KCRwcmVmc1sn c21kX2F0X3VzZXJfbGlzdCddKSkgew0KCQkkYWxsb3dlZCA9IGV4cGxvZGUoIiwiLCRwcmVm c1snc21kX2F0X3VzZXJfbGlzdCddKTsNCgkJZm9yZWFjaCAoJGFsbG93ZWQgYXMgJGlkeCA9 PiAkdmFsaWQpIHsNCgkJCWlmICgkdmFsaWQgPT0gJycpIHsNCgkJCQl1bnNldCgkYWxsb3dl ZFskaWR4XSk7DQoJCQl9DQoJCX0NCgl9DQoJJGFsbG93ZWQgPSBzbWRfYXRfc29ydCgkYWxs b3dlZCk7DQoJJGhkcm93ID0gaGVkKHNtZF9hdF9nVHh0KCdhdmFpbF90aXRsZScpLCAzKTsN Cg0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJ CWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LCAnIGNvbHNwYW49IjMiJykNCgkJKTsNCgkJZWNo byB0cigNCgkJCWFzc0hlYWQoDQoJCQkJc21kX2F0X2dUeHQoJ3NraW5fZ2JsJyksDQoJCQkJ J2F1dGhvcicsDQoJCQkJJ2Rlc2NyaXB0aW9uJw0KCQkJKSk7DQoJfSBlbHNlIHsNCgkJZWNo byA8PDxFT0NTUw0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRfZ3JpZCB7DQoJd2lk dGg6OTYwcHg7DQoJbWFyZ2luOjAgYXV0bzsNCn0NCi5zbWRfY2VsbCB7DQoJZmxvYXQ6bGVm dDsNCglwYWRkaW5nOjEwcHg7DQoJbWFyZ2luOjEwcHg7DQoJYm9yZGVyOjFweCByaWRnZSAj Y2NjOw0KCXdpZHRoOnskdHd9cHg7DQoJaGVpZ2h0OnskdGh9cHg7DQp9DQouc21kX2NlbGw6 aG92ZXIgew0KCWJhY2tncm91bmQ6I2RkZDsNCn0NCi5zbWRfY2xlYXIgew0KCWNsZWFyOmJv dGg7DQp9DQouc21kX2F1dGggew0KCXRleHQtYWxpZ246Y2VudGVyOw0KCW1hcmdpbjo1cHgg MDsNCn0NCjwvc3R5bGU+DQpFT0NTUzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2dyaWQi PjxkaXYgY2xhc3M9InNtZF9uZXdyb3ciPicuJGhkcm93Lic8L2Rpdj4nOw0KCX0NCglmb3Jl YWNoICgkYWxsb3dlZCBhcyAkc2tpbl9uYW1lKSB7DQoJCSRza2luZm8gPSBzbWRfYXRfcmVh ZF9za2luZm8oJHNraW5fbmFtZSk7DQoJCWlmICgkc2tpbmZvKSB7DQoJCQkkdGh1bWJuYWls ID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZvLCAxKTsNCgkJCSR0aGlzX3NraW4gPSAoJHNr aW5fbmFtZSA9PSAkY3Vycl9za2luKSA/IHN0cm9uZygkc2tpbmZvWydkbmFtZSddKSA6ICRz a2luZm9bJ2RuYW1lJ107DQoJCQkkdGh1bXJvdyA9ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21k X2F0X2FkbV9ldmVudC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gnLmEuJ25leHRzdGVwPXNtZF9h ZG1hdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgdGl0bGU9Iicuc21kX2F0X2dUeHQoJ2Fw cGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4uKCgkdGh1bWJuYWlsKSA/ICc8ZGl2PicuJHRo dW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9hPic7DQoJCQkkYXV0aHJvdyA9IChzdHJwb3Mo JHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAwKSA/ICc8YSBocmVmPSIn LiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1dGhvciddLic8L2E+JyA6 ICRza2luZm9bJ2F1dGhvciddOw0KDQoJCQlpZiAoJGxheW91dD09IjAiKSB7DQoJCQkJZWNo byB0cigNCgkJCQkJdGQoJHRodW1yb3cpDQoJCQkJCS50ZCgkYXV0aHJvdywgMTAwKQ0KCQkJ CQkudGQoJHNraW5mb1snZGVzY3JpcHRpb24nXSwgMjUwKQ0KCQkJCQksICgoJHNraW5fbmFt ZSA9PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9ImJhY2tncm91bmQ6I2U4ZThlODsiJyA6ICcn KQ0KCQkJCSk7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxs IicuKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDoj ZThlOGU4OyInIDogJycpLic+JzsNCgkJCQllY2hvICc8ZGl2PicuJHRodW1yb3cuJzwvZGl2 Pic7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgiPicuc21kX2F0X2dUeHQoJ2J5 JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPC9kaXY+JzsNCgkJCX0NCgkJfQ0K CX0NCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgl9IGVsc2Ug ew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwvZGl2PjwvZGl2Pic7DQoJfQ0K fQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAgQVJDSElWRSBDTEFTU0VTIDIuMQ0KIHwgQnkg RGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdodCAoYykgMjAwNSBEZXZpbiBEb3VjZXR0ZQ0K IHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5jYQ0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwgRW1haWwgYnVncy9zdWdnZXN0aW9u cyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRoaXMgc2NyaXB0IGhhcyBiZWVuIGNyZWF0 ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0aGUgR05VIEdQTCBhbmQgaXMgZnJlZSB0byB1 c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25seSBpZiB0aGlzIGNvcHlyaWdodCBzdGF0ZW1l bnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLw0KDQovLyBOT1RFOiBjbGFzcyBuYW1lcyBhbHRlcmVkIHRv IGFkZCBzbWRfYXRfIHByZWZpeCB0byBhdm9pZCBjbGFzaGVzIGluIGdsb2JhbCBzY29wZSwg YW5kIGFkZGVkIHN1YmRpciBjcmVhdGlvbg0KDQpjbGFzcyBzbWRfYXRfYXJjaGl2ZQ0Kew0K CWZ1bmN0aW9uIHNtZF9hdF9hcmNoaXZlKCRuYW1lKQ0KCXsNCgkJJHRoaXMtPm9wdGlvbnMg PSBhcnJheSAoDQoJCQknYmFzZWRpcicgPT4gIi4iLA0KCQkJJ25hbWUnID0+ICRuYW1lLA0K CQkJJ3ByZXBlbmQnID0+ICIiLA0KCQkJJ2lubWVtb3J5JyA9PiAwLA0KCQkJJ292ZXJ3cml0 ZScgPT4gMCwNCgkJCSdyZWN1cnNlJyA9PiAxLA0KCQkJJ3N0b3JlcGF0aHMnID0+IDEsDQoJ CQknZm9sbG93bGlua3MnID0+IDAsDQoJCQknbGV2ZWwnID0+IDMsDQoJCQknbWV0aG9kJyA9 PiAxLA0KCQkJJ3NmeCcgPT4gIiIsDQoJCQkndHlwZScgPT4gIiIsDQoJCQknY29tbWVudCcg PT4gIiINCgkJKTsNCgkJJHRoaXMtPmZpbGVzID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5leGNs dWRlID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5zdG9yZW9ubHkgPSBhcnJheSAoKTsNCgkJJHRo aXMtPmVycm9yID0gYXJyYXkgKCk7DQoJfQ0KDQoJZnVuY3Rpb24gc2V0X29wdGlvbnMoJG9w dGlvbnMpDQoJew0KCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJ CSR0aGlzLT5vcHRpb25zWyRrZXldID0gJHZhbHVlOw0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+ b3B0aW9uc1snYmFzZWRpciddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXIn XSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7 DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIs ICIvIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sn YmFzZWRpciddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sn YmFzZWRpciddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snbmFtZSdd KSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSA9IHN0cl9yZXBsYWNlKCJcXCIs ICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snbmFt ZSddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUn XSk7DQoJCX0NCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkpDQoJ CXsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBzdHJfcmVwbGFjZSgiXFwiLCAi LyIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3By ZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL14oXC4qXC8rKSsvIiwgIiIsICR0aGlzLT5vcHRp b25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdf cmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJ JHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL1wvJC8iLCAiIiwg JHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkgLiAiLyI7DQoJCX0NCgl9DQoNCglmdW5jdGlv biBjcmVhdGVfYXJjaGl2ZSgpDQoJew0KCQkkdGhpcy0+bWFrZV9saXN0KCk7DQoNCgkJaWYg KCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJCXsNCgkJCSRwd2QgPSBnZXRj d2QoKTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQkJaWYgKCR0 aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZpbGVfZXhpc3RzKCR0aGlzLT5v cHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwg JHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIgPyAiLnRtcCIgOiAiIikpKQ0KCQkJ ew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkZpbGUgeyR0aGlzLT5vcHRpb25zWyduYW1lJ119 IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJ CQl9DQoJCQllbHNlIGlmICgkdGhpcy0+YXJjaGl2ZSA9IEBmb3BlbigkdGhpcy0+b3B0aW9u c1snbmFtZSddIC4gKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6aXAiIHx8ICR0aGlz LT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiID8gIi50bXAiIDogIiIpLCAid2IrIikpDQoJ CQkJY2hkaXIoJHB3ZCk7DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAi Q291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGZvciB3cml0aW5nLiI7 DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCgkJZWxzZQ0K CQkJJHRoaXMtPmFyY2hpdmUgPSAiIjsNCg0KCQlzd2l0Y2ggKCR0aGlzLT5vcHRpb25zWyd0 eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlwIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV96aXAo KSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHppcCBm aWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAiYnppcCI6 DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFyKCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9y W10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJ fQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX2J6aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJy b3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIGJ6aXAyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsN CgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJnemlwIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0 ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRl IHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0aGlzLT5jcmVh dGVfZ3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVh dGUgZ3ppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlicmVhazsNCgkJY2Fz ZSAidGFyIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhp cy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJu IDA7DQoJCQl9DQoJCX0NCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0g MCkNCgkJew0KCQkJZmNsb3NlKCR0aGlzLT5hcmNoaXZlKTsNCgkJCWlmICgkdGhpcy0+b3B0 aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJi emlwIikNCgkJCQl1bmxpbmsoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSAuICIvIiAuICR0 aGlzLT5vcHRpb25zWyduYW1lJ10gLiAiLnRtcCIpOw0KCQl9DQoJfQ0KDQoJZnVuY3Rpb24g YWRkX2RhdGEoJGRhdGEpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10g PT0gMCkNCgkJCWZ3cml0ZSgkdGhpcy0+YXJjaGl2ZSwgJGRhdGEpOw0KCQllbHNlDQoJCQkk dGhpcy0+YXJjaGl2ZSAuPSAkZGF0YTsNCgl9DQoNCglmdW5jdGlvbiBtYWtlX2xpc3QoKQ0K CXsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPmV4Y2x1ZGUpKQ0KCQkJZm9yZWFjaCAoJHRoaXMt PmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVhY2ggKCR0aGlzLT5leGNsdWRl IGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10gPT0gJGN1cnJlbnRbJ25h bWUnXSkNCgkJCQkJCXVuc2V0ICgkdGhpcy0+ZmlsZXNbJGtleV0pOw0KCQlpZiAoIWVtcHR5 ICgkdGhpcy0+c3RvcmVvbmx5KSkNCgkJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAka2V5 ID0+ICR2YWx1ZSkNCgkJCQlmb3JlYWNoICgkdGhpcy0+c3RvcmVvbmx5IGFzICRjdXJyZW50 KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10gPT0gJGN1cnJlbnRbJ25hbWUnXSkNCgkJCQkJ CSR0aGlzLT5maWxlc1ska2V5XVsnbWV0aG9kJ10gPSAwOw0KCQl1bnNldCAoJHRoaXMtPmV4 Y2x1ZGUsICR0aGlzLT5zdG9yZW9ubHkpOw0KCX0NCg0KCWZ1bmN0aW9uIGFkZF9maWxlcygk bGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3Jl YWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5maWxlc1tdID0gJGN1cnJlbnQ7 DQoJfQ0KDQoJZnVuY3Rpb24gZXhjbHVkZV9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0g JHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVu dCkNCgkJCSR0aGlzLT5leGNsdWRlW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBz dG9yZV9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxp c3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5zdG9yZW9u bHlbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIGxpc3RfZmlsZXMoJGxpc3QpDQoJ ew0KCQlpZiAoIWlzX2FycmF5ICgkbGlzdCkpDQoJCXsNCgkJCSR0ZW1wID0gJGxpc3Q7DQoJ CQkkbGlzdCA9IGFycmF5ICgkdGVtcCk7DQoJCQl1bnNldCAoJHRlbXApOw0KCQl9DQoNCgkJ JGZpbGVzID0gYXJyYXkgKCk7DQoNCgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhp cy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3JlYWNoICgkbGlzdCBhcyAkY3VycmVu dCkNCgkJew0KCQkJJGN1cnJlbnQgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRjdXJyZW50 KTsNCgkJCSRjdXJyZW50ID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJGN1cnJlbnQp Ow0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwgIiIsICRjdXJyZW50KTsN CgkJCWlmIChzdHJzdHIoJGN1cnJlbnQsICIqIikpDQoJCQl7DQoJCQkJJHJlZ2V4ID0gcHJl Z19yZXBsYWNlKCIvKFtcXFxeXCRcLlxbXF1cfFwoXClcP1wrXHtcfVwvXSkvIiwgIlxcXFxc XDEiLCAkY3VycmVudCk7DQoJCQkJJHJlZ2V4ID0gc3RyX3JlcGxhY2UoIioiLCAiLioiLCAk cmVnZXgpOw0KCQkJCSRkaXIgPSBzdHJzdHIoJGN1cnJlbnQsICIvIikgPyBzdWJzdHIoJGN1 cnJlbnQsIDAsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikpIDogIi4iOw0KCQkJCSR0ZW1wID0g JHRoaXMtPnBhcnNlX2RpcigkZGlyKTsNCgkJCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVu dDIpDQoJCQkJCWlmIChwcmVnX21hdGNoKCIvXnskcmVnZXh9JC9pIiwgJGN1cnJlbnQyWydu YW1lJ10pKQ0KCQkJCQkJJGZpbGVzW10gPSAkY3VycmVudDI7DQoJCQkJdW5zZXQgKCRyZWdl eCwgJGRpciwgJHRlbXAsICRjdXJyZW50KTsNCgkJCX0NCgkJCWVsc2UgaWYgKEBpc19kaXIo JGN1cnJlbnQpKQ0KCQkJew0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkY3VycmVu dCk7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGZpbGUpDQoJCQkJCSRmaWxlc1tdID0gJGZp bGU7DQoJCQkJdW5zZXQgKCR0ZW1wLCAkZmlsZSk7DQoJCQl9DQoJCQllbHNlIGlmIChAZmls ZV9leGlzdHMoJGN1cnJlbnQpKQ0KCQkJCSRmaWxlc1tdID0gYXJyYXkgKCduYW1lJyA9PiAk Y3VycmVudCwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddIC4NCgkJCQkJ cHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9wdGlvbnNbJ3N0b3Jl cGF0aHMnXSA9PSAwICYmIHN0cnN0cigkY3VycmVudCwgIi8iKSkgPw0KCQkJCQlzdWJzdHIo JGN1cnJlbnQsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikgKyAxKSA6ICRjdXJyZW50KSwNCgkJ CQkJJ3R5cGUnID0+IEBpc19saW5rKCRjdXJyZW50KSAmJiAkdGhpcy0+b3B0aW9uc1snZm9s bG93bGlua3MnXSA9PSAwID8gMiA6IDAsDQoJCQkJCSdleHQnID0+IHN1YnN0cigkY3VycmVu dCwgc3RycnBvcygkY3VycmVudCwgIi4iKSksICdzdGF0JyA9PiBzdGF0KCRjdXJyZW50KSk7 DQoJCX0NCg0KCQljaGRpcigkcHdkKTsNCg0KCQl1bnNldCAoJGN1cnJlbnQsICRwd2QpOw0K DQoJCXVzb3J0KCRmaWxlcywgYXJyYXkgKCJzbWRfYXRfYXJjaGl2ZSIsICJzb3J0X2ZpbGVz IikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJZnVuY3Rpb24gcGFyc2VfZGlyKCRk aXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMSAm JiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSskLyIsICRkaXJuYW1lKSkNCgkJCSRmaWxlcyA9 IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRkaXJuYW1lLCAnbmFtZTInID0+ICR0aGlzLT5v cHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXByZWdfcmVwbGFjZSgiLyhcLitcLyspKy8iLCAi IiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMCAmJiBzdHJzdHIoJGRpcm5h bWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRpcm5hbWUsIHN0cnJwb3MoJGRpcm5hbWUsICIv IikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUnID0+IDUsICdzdGF0JyA9PiBzdGF0KCRkaXJu YW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMgPSBhcnJheSAoKTsNCgkJJGRpciA9IEBvcGVu ZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAoJGZpbGUgPSBAcmVhZGRpcigkZGlyKSkNCgkJ ew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUgLiAiLyIgLiAkZmlsZTsNCgkJCWlmICgkZmls ZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikNCgkJCQljb250aW51ZTsNCgkJCWVsc2UgaWYg KEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsNCgkJCQlpZiAoZW1wdHkgKCR0aGlzLT5vcHRp b25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250aW51ZTsNCgkJCQkkdGVtcCA9ICR0aGlzLT5w YXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlmb3JlYWNoICgkdGVtcCBhcyAkZmlsZTIpDQoJ CQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGZpbGVfZXhpc3Rz KCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRmdWxsbmFt ZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddIC4NCgkJCQkJcHJlZ19y ZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMn XSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUsICIvIikpID8NCgkJCQkJc3Vic3RyKCRmdWxs bmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIvIikgKyAxKSA6ICRmdWxsbmFtZSksDQoJCQkJ CSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5hbWUpICYmICR0aGlzLT5vcHRpb25zWydmb2xs b3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRmaWxlLCBz dHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQoJGZ1bGxuYW1lKSk7DQoJCX0N Cg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJcmV0dXJuICRmaWxlczsNCgl9DQoNCglmdW5j dGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7DQoJCWlmICgkYVsndHlwZSddICE9ICRiWyd0 eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9PSA1IHx8ICRiWyd0eXBlJ10gPT0gMikNCgkJ CQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgkYVsndHlwZSddID09IDIgfHwgJGJbJ3R5cGUn XSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQllbHNlIGlmICgkYVsndHlwZSddID09IDUpDQoJ CQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUnXSksIHN0cnRvbG93ZXIoJGJb J25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsnZXh0J10gIT0gJGJbJ2V4dCddKQ0KCQkJcmV0 dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydleHQnXSk7DQoJCWVsc2UgaWYgKCRhWydzdGF0 J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJCXJldHVybiAkYVsnc3RhdCddWzddID4gJGJb J3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxzZQ0KCQkJcmV0dXJuIHN0cmNtcChzdHJ0b2xv d2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWyduYW1lJ10pKTsNCgkJcmV0dXJuIDA7 DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRfZmlsZSgpDQoJew0KCQlpZiAoJHRoaXMtPm9w dGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ2Fu IG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBpZiBhcmNoaXZlIGlzIGluIG1lbW9yeS4gUmVk aXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0IGlzIGZhc3Rlci4iOw0KCQkJcmV0dXJuOw0K CQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQljYXNlICJ6 aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3ppcCIpOw0KCQkJ YnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxp Y2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJnemlwIjoNCgkJCWhlYWRl cigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWd6aXAiKTsNCgkJCWJyZWFrOw0KCQlj YXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtdGFy Iik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50 OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIgLj0gc3Ryc3RyKCR0aGlzLT5vcHRpb25zWydu YW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgc3RycnBvcygk dGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpICsgMSkgOiAkdGhpcy0+b3B0aW9uc1snbmFt ZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJCWhlYWRlcigkaGVhZGVyKTsNCgkJaGVhZGVy KCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkdGhpcy0+YXJjaGl2ZSkpOw0KCQloZWFk ZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeSIpOw0KCQloZWFkZXIoIkNh Y2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9NjAiKTsN CgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAyMDAwIDEyOjAwOjAwIEdNVCIpOw0K CQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfYXRfdGFyX2Zp bGUgZXh0ZW5kcyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF90YXJfZmls ZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfYXJjaGl2ZSgkbmFtZSk7DQoJCSR0aGlz LT5vcHRpb25zWyd0eXBlJ10gPSAidGFyIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfdGFy KCkNCgl7DQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRjdXJyZW50KQ0KCQl7 DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0aW9uc1snbmFtZSddKQ0K CQkJCWNvbnRpbnVlOw0KCQkJaWYgKHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgPiA5OSkN CgkJCXsNCgkJCQkkcGF0aCA9IHN1YnN0cigkY3VycmVudFsnbmFtZTInXSwgMCwgc3RycG9z KCRjdXJyZW50WyduYW1lMiddLCAiLyIsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgLSAx MDApICsgMSk7DQoJCQkJJGN1cnJlbnRbJ25hbWUyJ10gPSBzdWJzdHIoJGN1cnJlbnRbJ25h bWUyJ10sIHN0cmxlbigkcGF0aCkpOw0KCQkJCWlmIChzdHJsZW4oJHBhdGgpID4gMTU0IHx8 IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgPiA5OSkNCgkJCQl7DQoJCQkJCSR0aGlzLT5l cnJvcltdID0gIkNvdWxkIG5vdCBhZGQgeyRwYXRofXskY3VycmVudFsnbmFtZTInXX0gdG8g YXJjaGl2ZSBiZWNhdXNlIHRoZSBmaWxlbmFtZSBpcyB0b28gbG9uZy4iOw0KCQkJCQljb250 aW51ZTsNCgkJCQl9DQoJCQl9DQoJCQkkYmxvY2sgPSBwYWNrKCJhMTAwYThhOGE4YTEyYTEy YThhMWExMDBhNmEyYTMyYTMyYThhOGExNTVhMTIiLCAkY3VycmVudFsnbmFtZTInXSwgc3By aW50ZigiJTA3byIsDQoJCQkJJGN1cnJlbnRbJ3N0YXQnXVsyXSksIHNwcmludGYoIiUwN28i LCAkY3VycmVudFsnc3RhdCddWzRdKSwgc3ByaW50ZigiJTA3byIsICRjdXJyZW50WydzdGF0 J11bNV0pLA0KCQkJCXNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRbJ3R5cGUnXSA9PSAyID8g MCA6ICRjdXJyZW50WydzdGF0J11bN10pLCBzcHJpbnRmKCIlMDExbyIsICRjdXJyZW50Wydz dGF0J11bOV0pLA0KCQkJCSIgICAgICAgICIsICRjdXJyZW50Wyd0eXBlJ10sICRjdXJyZW50 Wyd0eXBlJ10gPT0gMiA/IEByZWFkbGluaygkY3VycmVudFsnbmFtZSddKSA6ICIiLCAidXN0 YXIgIiwgIiAiLA0KCQkJCSJVbmtub3duIiwgIlVua25vd24iLCAiIiwgIiIsICFlbXB0eSAo JHBhdGgpID8gJHBhdGggOiAiIiwgIiIpOw0KDQoJCQkkY2hlY2tzdW0gPSAwOw0KCQkJZm9y ICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJCSRjaGVja3N1bSArPSBvcmQoc3Vic3Ry KCRibG9jaywgJGksIDEpKTsNCgkJCSRjaGVja3N1bSA9IHBhY2soImE4Iiwgc3ByaW50Zigi JTA3byIsICRjaGVja3N1bSkpOw0KCQkJJGJsb2NrID0gc3Vic3RyX3JlcGxhY2UoJGJsb2Nr LCAkY2hlY2tzdW0sIDE0OCwgOCk7DQoNCgkJCWlmICgkY3VycmVudFsndHlwZSddID09IDIg fHwgJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxv Y2spOw0KCQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIp KQ0KCQkJew0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCXdoaWxlICgkdGVt cCA9IGZyZWFkKCRmcCwgMTA0ODU3NikpDQoJCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7 DQoJCQkJaWYgKCRjdXJyZW50WydzdGF0J11bN10gJSA1MTIgPiAwKQ0KCQkJCXsNCgkJCQkJ JHRlbXAgPSAiIjsNCgkJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyIC0gJGN1cnJlbnRbJ3N0 YXQnXVs3XSAlIDUxMjsgJGkrKykNCgkJCQkJCSR0ZW1wIC49ICJcMCI7DQoJCQkJCSR0aGlz LT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJfQ0KCQkJCWZjbG9zZSgkZnApOw0KCQkJfQ0KCQkJ ZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyRjdXJy ZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFkZGVkLiI7DQoJCX0NCg0K CQkkdGhpcy0+YWRkX2RhdGEocGFjaygiYTEwMjQiLCAiIikpOw0KDQoJCWNoZGlyKCRwd2Qp Ow0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIGV4dHJhY3RfZmlsZXMoKQ0KCXsN CgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpcidd KTsNCg0KCQlpZiAoJGZwID0gJHRoaXMtPm9wZW5fYXJjaGl2ZSgpKQ0KCQl7DQoJCQlpZiAo JHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMSkNCgkJCQkkdGhpcy0+ZmlsZXMgPSBh cnJheSAoKTsNCg0KCQkJd2hpbGUgKCRibG9jayA9IGZyZWFkKCRmcCwgNTEyKSkNCgkJCXsN CgkJCQkkdGVtcCA9IHVucGFjaygiYTEwMG5hbWUvYThtb2RlL2E4dWlkL2E4Z2lkL2ExMnNp emUvYTEybXRpbWUvYThjaGVja3N1bS9hMXR5cGUvYTEwMHN5bWxpbmsvYTZtYWdpYy9hMnRl bXAvYTMydGVtcC9hMzJ0ZW1wL2E4dGVtcC9hOHRlbXAvYTE1NXByZWZpeC9hMTJ0ZW1wIiwg JGJsb2NrKTsNCgkJCQkkZmlsZSA9IGFycmF5ICgNCgkJCQkJJ25hbWUnID0+ICR0ZW1wWydw cmVmaXgnXSAuICR0ZW1wWyduYW1lJ10sDQoJCQkJCSdzdGF0JyA9PiBhcnJheSAoDQoJCQkJ CQkyID0+ICR0ZW1wWydtb2RlJ10sDQoJCQkJCQk0ID0+IG9jdGRlYygkdGVtcFsndWlkJ10p LA0KCQkJCQkJNSA9PiBvY3RkZWMoJHRlbXBbJ2dpZCddKSwNCgkJCQkJCTcgPT4gb2N0ZGVj KCR0ZW1wWydzaXplJ10pLA0KCQkJCQkJOSA9PiBvY3RkZWMoJHRlbXBbJ210aW1lJ10pLA0K CQkJCQkpLA0KCQkJCQknY2hlY2tzdW0nID0+IG9jdGRlYygkdGVtcFsnY2hlY2tzdW0nXSks DQoJCQkJCSd0eXBlJyA9PiAkdGVtcFsndHlwZSddLA0KCQkJCQknbWFnaWMnID0+ICR0ZW1w WydtYWdpYyddLA0KCQkJCSk7DQoNCgkJCQlpZiAoJGZpbGVbJ2NoZWNrc3VtJ10gPT0gMHgw MDAwMDAwMCkNCgkJCQkJYnJlYWs7DQoJCQkJZWxzZSBpZiAoc3Vic3RyKCRmaWxlWydtYWdp YyddLCAwLCA1KSAhPSAidXN0YXIiKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAi VGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCBleHRyYWN0aW5nIHRoaXMgdHlwZSBvZiB0 YXIgZmlsZS4iOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJJGJsb2NrID0gc3Vic3RyX3Jl cGxhY2UoJGJsb2NrLCAiICAgICAgICAiLCAxNDgsIDgpOw0KCQkJCSRjaGVja3N1bSA9IDA7 DQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJCQkkY2hlY2tzdW0gKz0g b3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7DQoJCQkJaWYgKCRmaWxlWydjaGVja3N1bSdd ICE9ICRjaGVja3N1bSkNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGV4dHJh Y3QgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0sIGl0IGlzIGNvcnJ1cHQuIjsNCg0K CQkJCS8vIEFkZGVkOiBjcmVhdGUgZGlyIGlmIHJlcXVpcmVkDQoJCQkJaWYgKHN0cnBvcygk ZmlsZVsnbmFtZSddLCAnLi4nKSA9PT0gZmFsc2UpIHsNCgkJCQkJJHBhdGhfcGFydHMgPSBw YXRoaW5mbygkZmlsZVsnbmFtZSddKTsNCgkJCQkJaWYgKCFmaWxlX2V4aXN0cygkZmlsZVsn bmFtZSddKSkgew0KCQkJCQkJJHJldCA9IHNtZF9ta2Rpcl9yZWN1cnNpdmUoKChpc3NldCgk cGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10pKSA/IGRpcm5hbWUoJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSA6ICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10u RFMuJGZpbGVbJ25hbWUnXSkpOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJaWYgKCR0aGlzLT5v cHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJCQkJew0KCQkJCQkkZmlsZVsnZGF0YSddID0g ZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKTsNCgkJCQkJZnJlYWQoJGZwLCAoNTEyIC0g JGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikgPT0gNTEyID8gMCA6ICg1MTIgLSAkZmlsZVsnc3Rh dCddWzddICUgNTEyKSk7DQoJCQkJCXVuc2V0ICgkZmlsZVsnY2hlY2tzdW0nXSwgJGZpbGVb J21hZ2ljJ10pOw0KCQkJCQkkdGhpcy0+ZmlsZXNbXSA9ICRmaWxlOw0KCQkJCX0NCgkJCQll bHNlIGlmICgkZmlsZVsndHlwZSddID09IDUpDQoJCQkJew0KCQkJCQlpZiAoIWlzX2Rpcigk ZmlsZVsnbmFtZSddKSkNCgkJCQkJCW1rZGlyKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0 J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkdGhpcy0+b3B0aW9uc1snb3ZlcndyaXRl J10gPT0gMCAmJiBmaWxlX2V4aXN0cygkZmlsZVsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0 aGlzLT5lcnJvcltdID0gInskZmlsZVsnbmFtZSddfSBhbHJlYWR5IGV4aXN0cy4iOw0KCQkJ CQljb250aW51ZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJGZpbGVbJ3R5cGUnXSA9PSAyKQ0K CQkJCXsNCgkJCQkJc3ltbGluaygkdGVtcFsnc3ltbGluayddLCAkZmlsZVsnbmFtZSddKTsN CgkJCQkJY2htb2QoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVsyXSk7DQoJCQkJfQ0K CQkJCWVsc2UgaWYgKCRuZXcgPSBmb3BlbigkZmlsZVsnbmFtZSddLCAid2IiKSkNCgkJCQl7 DQoJCQkJCWZ3cml0ZSgkbmV3LCBmcmVhZCgkZnAsICRmaWxlWydzdGF0J11bN10pKTsNCgkJ CQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikgPT0gNTEyID8g MCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJCQkJCWZjbG9zZSgkbmV3 KTsNCgkJCQkJQGNobW9kKCRmaWxlWyduYW1lJ10sIDA2NDQpOyAvLyBIYXJkLWNvZGVkIGZv ciBub3cgYmVjYXVzZSB0aGUgc3R1cGlkIDAxMDA2NDQgdmFsdWUgaW4gJGZpbGVbJ3N0YXQn XVsyXSBjb25mdXNlcyB0aGUgT1MvUEhQDQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskZmlsZVsnbmFtZSddfSBmb3Ig d3JpdGluZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJLy8gUmVtb3ZlIG93bmVy IGFuZCBncm91cCBzZXR0aW5nIHNpbmNlIHRoZXJlIGlzIGFsbW9zdCAwIGxpa2VsaWhvb2Qg dGhlIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSB1c2VyL2dyb3VwIGFjcm9zcyBzeXN0ZW1z DQoJCQkJLy8gSW4gb3RoZXIgd29yZHMsIGxlYXZlIG93bmVyL2dyb3VwIGF0IHRoZSBBcGFj aGUgZGVmYXVsdCAtLSB3aGljaCBpcyB3aGF0IHdlIHdhbnQNCi8vCQkJCWNob3duKCRmaWxl WyduYW1lJ10sICRmaWxlWydzdGF0J11bNF0pOw0KLy8JCQkJY2hncnAoJGZpbGVbJ25hbWUn XSwgJGZpbGVbJ3N0YXQnXVs1XSk7DQoJCQkJQHRvdWNoKCRmaWxlWyduYW1lJ10sICRmaWxl WydzdGF0J11bOV0pOw0KCQkJCXVuc2V0ICgkZmlsZSk7DQoJCQl9DQoJCX0NCgkJZWxzZQ0K CQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JHRoaXMtPm9wdGlv bnNbJ25hbWUnXX0iOw0KDQoJCWNoZGlyKCRwd2QpOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5f YXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10s ICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2d6aXBfZmlsZSBleHRlbmRzIHNtZF9h dF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9nemlwX2ZpbGUoJG5hbWUpDQoJew0K CQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSA9ICJnemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfZ3ppcCgpDQoJew0KCQlp ZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdl dGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAo JGZwID0gZ3pvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3YnskdGhpcy0+b3B0aW9u c1snbGV2ZWwnXX0iKSkNCgkJCXsNCgkJCQlmc2VlaygkdGhpcy0+YXJjaGl2ZSwgMCk7DQoJ CQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRoaXMtPmFyY2hpdmUsIDEwNDg1NzYpKQ0KCQkJ CQlnendyaXRlKCRmcCwgJHRlbXApOw0KCQkJCWd6Y2xvc2UoJGZwKTsNCgkJCQljaGRpcigk cHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3Vs ZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJ CQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkk dGhpcy0+YXJjaGl2ZSA9IGd6ZW5jb2RlKCR0aGlzLT5hcmNoaXZlLCAkdGhpcy0+b3B0aW9u c1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9hcmNo aXZlKCkNCgl7DQoJCXJldHVybiBAZ3pvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJy YiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2J6aXBfZmlsZSBleHRlbmRzIHNtZF9hdF90 YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9iemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkk dGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYnppcCgpDQoJew0KCQlpZiAo JHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3 ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJGZw ID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3YiIpKQ0KCQkJew0KCQkJCWZz ZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkdGhp cy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWJ6d3JpdGUoJGZwLCAkdGVtcCk7DQoJCQkJ YnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0K CQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskdGhpcy0+b3B0aW9uc1sn bmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAw Ow0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlID0gYnpjb21wcmVzcygk dGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10pOw0KDQoJCXJldHVybiAx Ow0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGJ6b3Bl bigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAicmIiKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9h dF96aXBfZmlsZSBleHRlbmRzIHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0 X3ppcF9maWxlKCRuYW1lKQ0KCXsNCgkJJHRoaXMtPnNtZF9hdF9hcmNoaXZlKCRuYW1lKTsN CgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJ6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNy ZWF0ZV96aXAoKQ0KCXsNCgkJJGZpbGVzID0gMDsNCgkJJG9mZnNldCA9IDA7DQoJCSRjZW50 cmFsID0gIiI7DQoNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSkNCgkJ CWlmICgkZnAgPSBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ3NmeCddLCAicmIiKSkNCgkJCXsN CgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwgZmlsZXNpemUoJHRoaXMtPm9wdGlvbnNbJ3NmeCdd KSk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJ CQkkb2Zmc2V0ICs9IHN0cmxlbigkdGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCX0N CgkJCWVsc2UNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBzZnggbW9k dWxlIGZyb20geyR0aGlzLT5vcHRpb25zWydzZngnXX0uIjsNCg0KCQkkcHdkID0gZ2V0Y3dk KCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2gg KCR0aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0KCQkJaWYgKCRjdXJyZW50WyduYW1l J10gPT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJCQljb250aW51ZTsNCg0KCQkJJHRp bWVkYXRlID0gZXhwbG9kZSgiICIsIGRhdGUoIlkgbiBqIEcgaSBzIiwgJGN1cnJlbnRbJ3N0 YXQnXVs5XSkpOw0KCQkJJHRpbWVkYXRlID0gKCR0aW1lZGF0ZVswXSAtIDE5ODAgPDwgMjUp IHwgKCR0aW1lZGF0ZVsxXSA8PCAyMSkgfCAoJHRpbWVkYXRlWzJdIDw8IDE2KSB8DQoJCQkJ KCR0aW1lZGF0ZVszXSA8PCAxMSkgfCAoJHRpbWVkYXRlWzRdIDw8IDUpIHwgKCR0aW1lZGF0 ZVs1XSk7DQoNCgkJCSRibG9jayA9IHBhY2soIlZ2dnZWIiwgMHgwNDAzNGI1MCwgMHgwMDBB LCAweDAwMDAsIChpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25z WydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlKTsNCg0KCQkJ aWYgKCRjdXJyZW50WydzdGF0J11bN10gPT0gMCAmJiAkY3VycmVudFsndHlwZSddID09IDUp DQoJCQl7DQoJCQkJJGJsb2NrIC49IHBhY2soIlZWVnZ2IiwgMHgwMDAwMDAwMCwgMHgwMDAw MDAwMCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSArIDEsIDB4MDAw MCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddIC4gIi8iOw0KCQkJCSR0aGlz LT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2 dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9 PSAwID8gMHgwMDAwIDogMHgwMDBBLCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsn bWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6 IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAw MDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAkY3VycmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDog MHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUy J10gLiAiLyI7DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzEgKyBzdHJsZW4o JGN1cnJlbnRbJ25hbWUyJ10pKTsNCgkJCX0NCgkJCWVsc2UgaWYgKCRjdXJyZW50WydzdGF0 J11bN10gPT0gMCkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAw MDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10p LCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhp cy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2 dnZ2dlZWIiwgMHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10g PT0gMCA/IDB4MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRb J21ldGhvZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAg OiAweDAwMDgsICR0aW1lZGF0ZSwNCgkJCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgw MDAwMDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAkY3VycmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgw MDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107 DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRb J25hbWUyJ10pKTsNCgkJCX0NCgkJCWVsc2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsn bmFtZSddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwgJGN1cnJlbnRb J3N0YXQnXVs3XSk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJGNyYzMyID0gY3JjMzIoJHRl bXApOw0KCQkJCWlmICghaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSAmJiAkdGhpcy0+b3B0 aW9uc1snbWV0aG9kJ10gPT0gMSkNCgkJCQl7DQoJCQkJCSR0ZW1wID0gZ3pjb21wcmVzcygk dGVtcCwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10pOw0KCQkJCQkkc2l6ZSA9IHN0cmxlbigk dGVtcCkgLSA2Ow0KCQkJCQkkdGVtcCA9IHN1YnN0cigkdGVtcCwgMiwgJHNpemUpOw0KCQkJ CX0NCgkJCQllbHNlDQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKTsNCgkJCQkkYmxvY2sg Lj0gcGFjaygiVlZWdnYiLCAkY3JjMzIsICRzaXplLCAkY3VycmVudFsnc3RhdCddWzddLCBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3Vy cmVudFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkdGhp cy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCXVuc2V0ICgkdGVtcCk7DQoJCQkJJGNlbnRyYWwg Lj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMt Pm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJ CQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhv ZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCSRjcmMzMiwg JHNpemUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSks IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwMDAwMCwgJG9mZnNldCk7 DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJ CQkJJG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgJHNpemUp Ow0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVu IGZpbGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFkZGVk LiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEoJGNlbnRyYWwpOw0KDQoJCSR0aGlzLT5h ZGRfZGF0YShwYWNrKCJWdnZ2dlZWdiIsIDB4MDYwNTRiNTAsIDB4MDAwMCwgMHgwMDAwLCAk ZmlsZXMsICRmaWxlcywgc3RybGVuKCRjZW50cmFsKSwgJG9mZnNldCwNCgkJCSFlbXB0eSAo JHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkgPyBzdHJsZW4oJHRoaXMtPm9wdGlvbnNbJ2Nv bW1lbnQnXSkgOiAweDAwMDApKTsNCg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1sn Y29tbWVudCddKSkNCgkJCSR0aGlzLT5hZGRfZGF0YSgkdGhpcy0+b3B0aW9uc1snY29tbWVu dCddKTsNCg0KCQljaGRpcigkcHdkKTsNCg0KCQlyZXR1cm4gMTsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50 IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KZnVuY3Rpb24gc21kX2F0X2dUeHQo JHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdhY3Rpb25z JyA9PiAnQWN0aW9ucycsDQoJCSdhbGxvd2VkX3NraW5zJyA9PiAnQWxsb3dlZCB0aGVtZXM6 JywNCgkJJ2FwcGx5X3NraW4nID0+ICdBcHBseSB0aGlzIHRoZW1lJywNCgkJJ2F2YWlsX3Rp dGxlJyA9PiAnQXZhaWxhYmxlIHRoZW1lcycsDQoJCSdiYXNlZF9vbicgPT4gJyAoYmFzZWQg b24ge3NraW59KScsDQoJCSdieScgPT4gJyBieSAnLA0KCQknY19iemlwMicgPT4gJ0JaaXAn LA0KCQknY19nemlwJyA9PiAnR1ppcCcsDQoJCSdjX3RhcicgPT4gJ1RhcicsDQoJCSdjX3pp cCcgPT4gJ1ppcCcsDQoJCSdjYXNlX3NvcnQnID0+ICdDYXNlLXNlbnNpdGl2ZSB0aGVtZSBs aXN0OicsDQoJCSdjbGVhcicgPT4gJ25vbmUnLA0KCQknY2xvbmUnID0+ICdCYXNlJywNCgkJ J2NvbmZpcm0nID0+ICdHbycsDQoJCSdjb3JlX3RoZW1lJyA9PiAnQ2Fubm90IGRlbGV0ZSB7 c2tpbn06IGNvcmUgdGhlbWUnLA0KCQknY29yZV90aGVtZV9maWxlJyA9PiAnQ2Fubm90IGRl bGV0ZSBmaWxlcyBmcm9tIHtza2lufTogY29yZSB0aGVtZScsDQoJCSdjcnVzaF90eXBlJyA9 PiAnRXhwb3J0IGNvbXByZXNzaW9uIHR5cGU6JywNCgkJJ2NydXNoX2Zvcm1hdCcgPT4gJ0Zv cm1hdDonLA0KCQknc3NjJyA9PiAnU3R5bGVwbGF0ZXMnLA0KCQknY3NzJyA9PiAnU3R5bGVz JywNCgkJJ2RlbGV0ZV9mYWlsZWQnID0+ICdEZWxldGUgZmFpbGVkLiBUcnkgcmVtb3Zpbmcg aXQgbWFudWFsbHknLA0KCQknZWRpdF9sYmwnID0+ICdUaGVtZSBlZGl0b3InLA0KCQknZW1w dHlfaW5mbycgPT4gJ1lvdSBzaG91bGQgY2hvb3NlIGEgZmlsZSBmaXJzdCA6LSknLA0KCQkn ZXhwb3J0JyA9PiAnRXhwb3J0JywNCgkJJ2ZpbGVfbm90X2RlbGV0ZWQnID0+ICdGaWxlIHtu YW1lfSAnLnN0cm9uZygibm90IikuJyBkZWxldGVkJywNCgkJJ2ZpbGVfc2F2ZWQnID0+ICdG aWxlIHtuYW1lfSBzYXZlZCcsDQoJCSdmaW5kX3RoZW1lJyA9PiAnQnJvd3NlIHRoZW1lcycs DQoJCSdnbG9iYWxfc2tpbicgPT4gJ0dsb2JhbCB0aGVtZTonLA0KCQknaGVscF9saW5rJyA9 PiAnKDxhIGhyZWY9IntsaW5rfSI+SGVscDwvYT4pJywNCgkJJ2ltZycgPT4gJ0ltYWdlcycs DQoJCSdpbXBvcnRfZmFpbGVkJyA9PiAnSW5zdGFsbGF0aW9uIGZhaWxlZCA6LSggQ2hlY2sg dGhlIGZpbGUgc3RydWN0dXJlJywNCgkJJ2ltcG9ydF9zdWNjZXNzJyA9PiAnSW5zdGFsbGF0 aW9uIHN1Y2Nlc3NmdWwuIEZpbGVzIGV4dHJhY3RlZDoge251bX0nLA0KCQknaW1wb3J0X29r JyA9PiAnSW5zdGFsbGF0aW9uIHN1Y2Nlc3NmdWwuJywNCgkJJ2luc3RhbGxfc2tpbicgPT4g J0luc3RhbGwgdGhlbWUnLA0KCQknaW52YWxpZF9maWxlJyA9PiAnUm9ndWUgZmlsZSBkZXRl Y3RlZDoge25hbWV9JywNCgkJJ2lzX2dsb2JhbCcgPT4gJyBbR0xPQkFMXScsDQoJCSdqcycg PT4gJ1NjcmlwdHMnLA0KCQknbGF5b3V0JyA9PiAnTGF5b3V0IG1ldGhvZDonLA0KCQknbGF5 b3V0X2xpc3QnID0+ICdMaXN0JywNCgkJJ2xheW91dF9ncmlkJyA9PiAnR3JpZCcsDQoJCSds aXN0X3RpdGxlJyA9PiAnSW5zdGFsbGVkIHRoZW1lcycsDQoJCSdtYW5hZ2VfbGJsJyA9PiAn VGhlbWUgbWFuYWdlcicsDQoJCSdta2Rpcl9mYWlsZWQnID0+ICdDYW5ub3QgY3JlYXRlIGRp cmVjdG9yeSBmb3IgZmlsZSB7bmFtZX0uIFRyeSBtYW51YWxseSBjcmVhdGluZyBpdC4nLA0K CQknbmFtZV9lbXB0eScgPT4gJ1lvdSBzaG91bGQgZ2l2ZSB5b3VyIHRoZW1lIGEgbmFtZSA6 LSknLA0KCQknbmV3JyA9PiAnQ3JlYXRlIG5ldyB0aGVtZScsDQoJCSduZXdfZmlsZScgPT4g J05ldyBmaWxlJywNCgkJJ25ld19jbG9uZXNraW4nID0+ICdOYW1lIG9mIGNvcHk6JywNCgkJ J25ld19za2luJyA9PiAnVGhlbWUgbmFtZTonLA0KCQknb3RoZXJfZmlsZXMnID0+ICdPdGhl cnMnLA0KCQkncGhwJyA9PiAnQ29kZScsDQoJCSdwZXJfZ3JvdXAnID0+ICdPbmUgdGhlbWUg cGVyIHByaXZpbGVnZSBsZXZlbCcsDQoJCSdwZXJfc2l0ZScgPT4gJ09uZSB0aGVtZSBmb3Ig ZXZlcnlvbmUnLA0KCQkncGVyX3VzZXInID0+ICdPbmUgdGhlbWUgcGVyIHVzZXInLA0KCQkn cHJlZnNfZGVsZXRlZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQnLA0KCQkncHJlZnNfaW5z dGFsbGVkJyA9PiAnUHJlZmVyZW5jZXMgaW5zdGFsbGVkJywNCgkJJ3ByZWZzX25vdF9pbnN0 YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBub3QgaW5zdGFsbGVkLicsDQoJCSdwcmVmc19zb21l JyA9PiAnTm90IGFsbCBwcmVmZXJlbmNlcyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3NvbWVf ZXhwbGFpbicgPT4gJ0l0IGlzIGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgYSBkaWZmZXJlbnQg dmVyc2lvbiBvZiB0aGUnLmJyLidwbHVnaW4gdG8gb25lIHlvdSBoYWQgYmVmb3JlIG9yIHRo ZSBwcmVmZXJlbmNlcycuYnIuJ2hhdmUgYmVjb21lIGNvcnJ1cHQgc29tZWhvdy4nLA0KCQkn cHJlZnNfc29tZV9vcHRpb25zJyA9PiAnQ2hvb3NlICcuZ1R4dCgnZGVsZXRlJykuJyB0byBy ZW1vdmUgdGhlbSBhbGwgb3IgJy5nVHh0KCdpbnN0YWxsJykuJyB0byBhZGQnLmJyLidhbnkg bmV3IG9uZXMsIGxlYXZpbmcgYWxsIGV4aXN0aW5nIHByZWZlcmVuY2VzIHVudG91Y2hlZC4n LA0KCQkncHJlZnNfdGl0bGUnID0+ICdBZG1pbiB0aGVtZSBwcmVmZXJlbmNlcycsDQoJCSdy ZW5hbWVfZmFpbGVkJyA9PiAnUmVuYW1lIGZhaWxlZCcsDQoJCSdyZW5hbWVkJyA9PiAnUmVu YW1lZCB0byB7bmFtZX0nLA0KCQknc2V0JyA9PiAnU2V0JywNCgkJJ3NldHVwJyA9PiAnUHJl ZmVyZW5jZXMnLA0KCQknc2tpbl9nYmwnID0+ICdUaGVtZScsDQoJCSdza2luX2Nsb25lZCcg PT4gJ1RoZW1lIGV4dGVuZGVkIGFzIHtuYW1lfScsDQoJCSdza2luX2NyZWF0ZWQnID0+ICdU aGVtZSB7bmFtZX0gY3JlYXRlZCcsDQoJCSdza2luX2RlbGV0ZWQnID0+ICdUaGVtZSB7bmFt ZX0gZGVsZXRlZCcsDQoJCSdza2luX2V4aXN0cycgPT4gJ1RoZW1lIHtuYW1lfSBhbHJlYWR5 IGV4aXN0cycsDQoJCSdza2luX2ZpbGVzJyA9PiAnVGhlbWUgZmlsZXMnLA0KCQknc2tpbl9n cm91cHMnID0+ICdHcm91cCB0aGVtZXM6JywNCgkJJ3NraW5faW1hZ2VzJyA9PiAnVGhlbWUg aW1hZ2VzJywNCgkJJ3NraW5fbGlzdCcgPT4gJ1RoZW1lIGxpc3QnLA0KCQknc2tpbl9ncmlk JyA9PiAnVGhlbWUgZ3JpZCcsDQoJCSdza2luX25vdF9jcmVhdGVkJyA9PiAnVGhlbWUge25h bWV9IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBUcnkgbWFudWFsbHkgbWFraW5nIHRoZSBkaXJl Y3RvcnknLA0KCQknc2tpbl9ub3RfZm91bmQnID0+ICdUaGUgdGhlbWUge25hbWV9IGNvdWxk IG5vdCBiZSBmb3VuZCcsDQoJCSdza2luX3N3aXRjaGVkJyA9PiAnVGhlbWUgc3dpdGNoZWQg dG8ge3NraW59JywNCgkJJ3NraW5fc3lzdGVtJyA9PiAnVGhlbWUgc3lzdGVtOicsDQoJCSdz a2lubmVyJyA9PiAnVGhlbWUnLA0KCQkndGFiX25hbWUnID0+ICdBZG1pbiB0aGVtZXMnLA0K CQkndGh1bWJzaXplJyA9PiAnVGh1bWIgZGltZW5zaW9uczonLA0KCQkndGltZXMnID0+ICcg eCAnLA0KCQkndW5zdXBwb3J0ZWRfY29tcHJlc3Npb250eXBlJyA9PiAne2NydXNofSBpcyBu b3QgYSBzdXBwb3J0ZWQgY29tcHJlc3Npb24gZm9ybWF0IG9uIHRoaXMgaW5zdGFsbGF0aW9u JywNCgkJJ3Vuc3VwcG9ydGVkX2ZpbGV0eXBlJyA9PiAnRmlsZSBpcyBub3Qgb2YgYSBzdXBw b3J0ZWQgdHlwZScsDQoJCSd1bnN1cHBvcnRlZF9mdWRnZScgPT4gJzogaGl0IFNhdmUgYWdh aW4gdG8gc3RvcmUgYW55d2F5JywNCgkJJ3VwZGF0ZScgPT4gJ1VwZGF0ZScsDQoJCSd1cGxv YWRfZmFpbGVkJyA9PiAnSW1hZ2UgY291bGQgbm90IGJlIHVwbG9hZGVkJywNCgkJJ3VwbG9h ZF9pbWFnZScgPT4gJ1VwbG9hZCBpbWFnZScsDQoJCSd1cGxvYWRfc3VjY2VzcycgPT4gJ0lt YWdlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseScsDQoJCSd2ZXJzaW9uJyA9PiAndicsDQoJKTsN CglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6 MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjMiO3M6NDoiaGVs cCI7czoyMjQ5NDoiPGRpdiBpZD0ic21kX2hlbHAiPgoKCTxoMSBpZD0idG9wIj5zbWRfYWRt aW5fdGhlbWVzPC9oMT4KCgk8cD5JbnN0YWxsLCBtYW5hZ2UsIGVkaXQgYW5kIHN3aXRjaCBh ZG1pbi1zaWRlIHRoZW1lcyB0aGVuIHNoYXJlIHRoZW0gd2l0aCB0aGUgY29tbXVuaXR5Ljwv cD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5DcmVh dGUgYW5kIEVkaXQgYWRtaW4tc2lkZSB0aGVtZXM8L2xpPgoJCTxsaT5FbXBsb3kgaW1hZ2Vz LCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiwgSlMsIDxzcGFuIGNsYXNzPSJjYXBz Ij5IVE1MPC9zcGFuPi9QSFAgKGZvciBjaGFuZ2luZyBtYXN0aGVhZCwgaGVhZGVyICZhbXA7 IGZvb3RlcikgaW4geW91ciB0aGVtZTwvbGk+CgkJPGxpPlVzZSBjb25zdGFudHMgaW4geW91 ciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBmaWxlczwvbGk+CgkJPGxpPkJhc2Ug eW91ciB0aGVtZSBvbiBhbiBleGlzdGluZyB0aGVtZSB0byB0d2VhayBpdCB0byB5b3VyIHRh c3RlPC9saT4KCQk8bGk+RXhwb3J0IGEgdGhlbWUgcGFja2FnZSBmb3IgZGlzdHJpYnV0aW9u IHRvIHRoZSBjb21tdW5pdHkgaW4gZWl0aGVyIC50YXIsIC50Z3osIC5iejIgb3IgLnppcCBm b3JtYXQ8L2xpPgoJCTxsaT5JbXBvcnQgLyBpbnN0YWxsIG90aGVyIHRoZW1lcyBmcm9tIHRo ZSA8YSBocmVmPSJodHRwOi8vdGV4dGdhcmRlbi5vcmcvbGF5b3V0cy8/Yz10eHAtYWRtaW4i PmNvbW11bml0eSByZXBvc2l0b3J5PC9hPjwvbGk+CgkJPGxpPkFkbWluaXN0cmF0b3IgY2Fu IHNldCBhIGdsb2JhbCB0aGVtZSwgb3IgZW5hYmxlIHBlci11c2VyIC8gcGVyLXJvbGUgdGhl bWVzPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48 L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwv aDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRw Oi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTA5Ni9zbWRfYWRtaW5fdGhlbWVzIj50ZXh0 cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0 YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gQSBuZXcgdGFiIGxhYmVsbGVkIDxlbT5FeHRl bnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+IGlzIGNyZWF0ZWQuIDxzdHJvbmc+T25s eSBwdWJsaXNoZXJzIHdpbGwgc2VlIHRoaXMgdGFiPC9zdHJvbmc+LjwvcD4KCgk8cD5UaGUg cGx1Z2luIHNob3VsZCBhdXRvbWF0aWNhbGx5IGluc3RhbGwgdGhlIHByZWZlcmVuY2VzIGZv ciB5b3UuIENsaWNrICYjODIxNjtQcmVmZXJlbmNlcyYjODIxNzsgZnJvbSB0aGUgPGVtPkV4 dGVuc2lvbnMgLSZndDsgQWRtaW4gdGhlbWVzPC9lbT4gdGFiIG9yIDxlbT5PcHRpb25zPC9l bT4gZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyB0YWIgdG8gYWx0ZXIsIGRlbGV0ZSBv ciByZWluc3RhbGwgdGhlbS48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9m b3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zMDk1MiI+Zm9ydW0gdGhy ZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBv dGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBzaW1wbHkg ZGVsZXRlIHRoZSBwbHVnaW4gZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLiBU aGUgcHJlZmVyZW5jZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJlbW92ZWQuIFBsZWFzZSBi ZSBhd2FyZSB0aGF0IHJlbW92aW5nIHRoZSBwbHVnaW4gZG9lcyA8c3Ryb25nPm5vdCByZW1v dmUgYW55IHRoZW1lcyB5b3UgaGF2ZSBpbnN0YWxsZWQsIG5vciBkb2VzIGl0IHJlbW92ZSBw ZXItdXNlciB0aGVtZSBwcmVmZXJlbmNlczwvc3Ryb25nPi4gUGVyLXVzZXIgcHJlZnMgd2ls bCBzaW1wbHkgYmUgaWdub3JlZCB3aGVuIHRoZSBwbHVnaW4gaXMgZGVsZXRlZC48L3A+CgoJ PGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPk9uIHRoZSA8ZW0+RXh0ZW5zaW9ucyAt Jmd0OyBBZG1pbiB0aGVtZXM8L2VtPiB0YWIgaXMgYSBsaXN0IG9yIGdyaWQgY29udGFpbmlu ZyBpbnN0YWxsZWQgdGhlbWVzLiBPdXQgb2YgdGhlIGJveCwgdGhlcmUgd2lsbCBiZSB0d28g YXZhaWxhYmxlOiA8ZW0+Y2xhc3NpYzwvZW0+IGFuZCA8ZW0+cmVtb3JhPC9lbT4uIDxzdHJv bmc+SXQmIzgyMTc7cyBhZHZpc2FibGUgbm90IHRvIGNoYW5nZSB0aGVzZSB0aGVtZXM8L3N0 cm9uZz4gc28geW91IGNhbiBhbHdheXMgZ28gYmFjayB0byB0aGVtIGlmIGV2ZXJ5dGhpbmcg Z29lcyBzaWRld2F5cy4gUGx1cyBpdCYjODIxNztzIGEgdmVyeSB1c2VmdWwgc3RhcnRpbmcg cG9pbnQgZnJvbSB3aGljaCB0byA8YSBocmVmPSIjY2xvbmUiPmJhc2U8L2E+IGEgPGEgaHJl Zj0iI25ldyI+bmV3IHRoZW1lPC9hPi48L3A+CgoJPHA+SW4gdGhlIGxpc3QgbGF5b3V0LCB0 aGUgY29sdW1ucyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRo ZW1lPC9zcGFuPiA6IFRoZSBuYW1lIG9mIHRoZSB0aGVtZSBhbmQgKG9wdGlvbmFsKSB0aHVt Ym5haWwgYXNzaWduZWQgdG8gaXQuIENsaWNrIHRvIDxhIGhyZWY9IiNzd2l0Y2giPmFjdGl2 YXRlPC9hPiB0aGUgdGhlbWUuIElmIHRoZSB0aGVtZSBpcyBiYXNlZCBvbiBhbm90aGVyIHVz ZXImIzgyMTc7cyB0aGVtZSwgdGhpcyBkZXBlbmRlbmN5IHdpbGwgYmUgc2hvd24gaW4gcGFy ZW50aGVzZXMgYWZ0ZXIgdGhlIHRoZW1lIG5hbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+QXV0aG9yPC9zcGFuPiA6IFlvdSEgTGlua2VkIHRvIHlvdXIgd2ViIHNpdGUgaWYg eW91IHN1cHBseSBpdCBpbiB5b3VyIDxhIGhyZWY9IiNhYm91dCI+TWFuaWZlc3Q8L2E+PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZlcnNpb248L3NwYW4+IDogVGhlbWUgdmVy c2lvbiBudW1iZXIgaW4gPGNvZGU+bWFqb3IubWlub3Iuc3VicmV2PC9jb2RlPiBub3RhdGlv bi4gSWYgYSBuZXdlciB2ZXJzaW9uIG9mIGEgdGhlbWUgaXMgYXZhaWxhYmxlIGZyb20gVGV4 dGdhcmRlbiwgdGhlIHZlcnNpb24gbnVtYmVyIHdpbGwgYmUgaHlwZXJsaW5rZWQgdG8gdGhl IHRoZW1lIG9uIFRleHRnYXJkZW4gc28geW91IG1heSBkb3dubG9hZC9pbnN0YWxsIGl0LiBU aGUgdmVyc2lvbnMgYXJlIGNoZWNrZWQsIGF0IG1vc3QsIG9uY2UgZXZlcnkgMjQgaG91cnMg dG8gYXZvaWQgaGFtbWVyaW5nIHRoZSBzZXJ2ZXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+RGVzY3JpcHRpb248L3NwYW4+IDogQnJpZWYgb25lLSBvciB0d28tbGluZXIgZXhw bGFpbmluZyB5b3VyIHRoZW1lLiBJZiB5b3UgaGF2ZSBvZmZlcmVkIGEgaGVscCA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBpbiB5b3VyIG1hbmlmZXN0LCBpdCB3aWxsIGJlIGxp bmtlZCBoZXJlIGFzIHdlbGw8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWN0aW9u czwvc3Bhbj4gOiBBY3Rpb25zIHRvIHBlcmZvcm0gb24gZWFjaCB0aGVtZQoJPHVsPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+W05ldyB0aGVtZV08L3NwYW4+IDogPGEgaHJlZj0iI25l dyI+Q3JlYXRlPC9hPiBhIG5ldyBibGFuaywgZW1wdHkgZGlyZWN0b3J5IHJlYWR5IGZvciB5 b3VyIHRoZW1lLiBObyBzcGFjZXMgLyBvZGQgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCBpbiB0 aGUgbmFtZSBhbmQgaXQgbXVzdCBub3Qgc3RhcnQgd2l0aCBhIG51bWJlcjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5bRWRpdF08L3NwYW4+IDogPGEgaHJlZj0iI2VkaXRfdGhl bWUiPkVkaXQ8L2E+IHRoZSB2YXJpb3VzIGRldGFpbHMsIGZpbGVzIGFuZCBjb250ZW50IHdp dGhpbiB0aGUgdGhlbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W0Jhc2VdPC9z cGFuPiA6IDxhIGhyZWY9IiNjbG9uZSI+RXh0ZW5kPC9hPiBvbmUgb2YgdGhlIGV4aXN0aW5n IHRoZW1lcyB0byBtYWtlIHlvdXIgb3duIGNoYW5nZXMgdW5kZXIgYSBuZXcgbmFtZTwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bRXhwb3J0XTwvc3Bhbj4gOiA8YSBocmVmPSIj ZXhwb3J0Ij5TYXZlPC9hPiB0aGUgdGhlbWUgcGFja2FnZSB0byB5b3VyIGhhcmQgZHJpdmUg Zm9yIGRpc3RyaWJ1dGlvbi9iYWNrdXAgaW4geW91ciBjaG9zZSBjb21wcmVzc2lvbiBmb3Jt YXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W0RlbGV0ZV08L3NwYW4+IDogQ29t cGxldGVseSA8YSBocmVmPSIjZGVsZXRlIj5yZW1vdmU8L2E+IHRoZSB0aGVtZS4gTm90IGF2 YWlsYWJsZSB0byB0aGUgY29yZSB0aGVtZXMsIGZvciBvYnZpb3VzIHJlYXNvbnMhIEFsc28g bm90IGF2YWlsYWJsZSBpZiBhIHRoZW1lIGhhcyBiZWVuIHVzZWQgYXMgYSBiYXNpcyBmb3Ig YW5vdGhlciB0aGVtZSBpbiB0aGUgY3VycmVudCBzaXRlPC9saT4KCTwvdWw+PC9saT4KCTwv dWw+CgoJPHA+VGhlIHJvdyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRoZW1lIGlzIHNo YWRlZCBhbmQgdGhlIGN1cnJlbnQgZ2xvYmFsIHRoZW1lIHRoYXQgaXMgaW4gZWZmZWN0IGlz IGhpZ2hsaWdodGVkIHdpdGggYW4gYXN0ZXJpc2sgKCopLiBUaGUgZ3JpZCB2aWV3IGhhcyBw YXJ0cyBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24sIGxhaWQgb3V0IHNsaWdodGx5IGRpZmZl cmVudGx5LjwvcD4KCgk8aDIgaWQ9InN3aXRjaCI+U3dpdGNoaW5nIHRoZW1lczwvaDI+CgoJ PHA+QXMgdGhlIGFkbWluaXN0cmF0b3IsIHlvdSBjYW4gcGxheSBHb2Qgb3ZlciBldmVyeW9u ZSBlbHNlJiM4MjE3O3MgdGhlbWVzLiBZb3UgYXJlIGZyZWUgdG8gaW5zdGFsbCBhcyBtYW55 IGFzIHlvdSB3aXNoIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGVtIHdpdGhvdXQgYWZmZWN0aW5n IGFueSBvdGhlciBsb2dpbnMuIE5vYm9keSBlbHNlIHdpbGwgZXZlbiBrbm93IHlvdSBoYXZl IGluc3RhbGxlZCB0aGUgcGx1Z2luLjwvcD4KCgk8cD5JZiwgaG93ZXZlciwgeW91IHZpc2l0 IHRoZSA8YSBocmVmPSIjc2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdlIHlvdSBjYW4gY29u ZmlndXJlIHRoZSB0aGVtZXMgdGhhdCBvdGhlcnMgdXNlLiBUaGVyZSBhcmUgdGhyZWUgbWVj aGFuaXNtcyB0byBjaG9vc2UgZnJvbTo8L3A+CgoJPHVsPgoJCTxsaT5Gb3JjZSBvbmUgdGhl bWUgZm9yIGFsbCB1c2VycyAoZXhjZXB0IHlvdXJzZWxmKTwvbGk+CgkJPGxpPkZvcmNlIG9u ZSB0aGVtZSBmb3IgZWFjaCB1c2VyIHByaXZpbGVnZSBsZXZlbCAoZXhjZXB0IHlvdXJzZWxm KTwvbGk+CgkJPGxpPkFsbG93IGFsbCB1c2VycyAoZXhjZXB0IHlvdXJzZWxmKSB0byBwaWNr IHRoZWlyIGZhdm91cml0ZSB0aGVtZSBmcm9tIGEgc2hvcnRsaXN0IHlvdSBkZWZpbmU8L2xp PgoJPC91bD4KCgk8cD5BdCBhbGwgdGltZXMsIHlvdSBjYW4gY2hvb3NlIGFueSB0aGVtZSB5 b3UgcGxlYXNlIGZvciB5b3VyIG93biB1c2UuIFRoaXMgYWxsb3dzIHRyaWFsbGluZywgdHdl YWtpbmcgYW5kIHRlc3Rpbmcgb2YgdGhlbWVzIGJlZm9yZSB1bmxlYXNoaW5nIHRoZW0gb24g eW91ciB1c2VyIGJhc2UuPC9wPgoKCTxoMiBpZD0ic2V0dXAiPlRoZW1lIHByZWZlcmVuY2Vz PC9oMj4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5DYXNlLXNlbnNpdGl2ZSB0 aGVtZSBsaXN0PC9zcGFuPiA6IFdoZW4gc2V0IHRvIDxjb2RlPlllczwvY29kZT4sIHVwcGVy LWNhc2UgdGhlbWUgbmFtZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbG93ZXIgY2FzZSB0aGVt ZSBuYW1lcyBhbmQgd2lsbCBiZSBsaXN0ZWQgZmlyc3QuIEZvciBleGFtcGxlLCAzIHRoZW1l IGNhbGxlZCAmIzgyMTY7QW5nZWxpYyYjODIxNzssICYjODIxNjtiYXJiYXJpYyYjODIxNzsg YW5kICYjODIxNjtDb2hlc2l2ZSYjODIxNzsgd2lsbCBiZSBvcmRlcmVkOiA8Y29kZT5Bbmdl bGljLCBDb2hlc2l2ZSwgYmFyYmFyaWM8L2NvZGU+LiBTZXQgdG8gPGNvZGU+Tm88L2NvZGU+ IHRvIG1peCB1cHBlciBhbmQgbG93ZXItY2FzZSB0aGVtZXMgdG9nZXRoZXIgKG9yZGVyIGlz IHRoZW4gPGNvZGU+QW5nZWxpYywgYmFyYmFyaWMsIENvaGVzaXZlPC9jb2RlPiApLiBUaGUg JiM4MjE2O2NsYXNzaWMmIzgyMTc7IHRoZW1lIGlzIDxlbT5hbHdheXM8L2VtPiBsaXN0ZWQg Zmlyc3QuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkV4cG9ydCBjb21wcmVzc2lv biB0eXBlPC9zcGFuPiA6IERlcGVuZGluZyBvbiB5b3VyIHZlcnNpb24gb2YgPHNwYW4gY2xh c3M9ImNhcHMiPlBIUDwvc3Bhbj4gYW5kIHdoaWNoIG1vZHVsZXMgaGF2ZSBiZWVuIGNvbXBp bGVkIGludG8gaXQsIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgY29tcHJlc3Npb24gZm9ybWF0 cyBoZXJlLiBDaG9vc2Ugb25lIHRoYXQgc3VpdHMgeW91IGFzIHRoZSBkZWZhdWx0IGluIHdo aWNoIHRvIGV4cG9ydCB5b3VyIHRoZW1lIHBhY2thZ2VzLiBZb3UgbWF5IGNob29zZSBmcm9t IDxlbT5UYXI8L2VtPiwgPGVtPkdaaXA8L2VtPiAodGhlIGRlZmF1bHQ6IGFjdHVhbGx5IHRh citnemlwKSwgPGVtPkJ6aXAyPC9lbT4gKHRhcitiemlwKSwgb3IgPGVtPlppcDwvZW0+Ljwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MYXlvdXQgbWV0aG9kPC9zcGFuPiA6IENo b29zZSBmcm9tIGEgTGlzdCBWaWV3ICh1c2VmdWwgaWYgeW91IHByZWZlciB0byBoaWRlIG9y IHVzZSBzbWFsbCB0aHVtYnMpIG9yIGEgR3JpZCBWaWV3IG9mIGluc3RhbGxlZCB0aGVtZXMu IFRoaXMgc2V0dGluZyBhcHBsaWVzIHRvIGJvdGggYWRtaW4gYW5kIHVzZXIgdGhlbWUgc2Vs ZWN0aW9uIHRhYnMuIERlZmF1bHQ6IEdyaWQgVmlldzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5UaHVtYiBzaXplPC9zcGFuPiA6IFNldCB0aGUgdGh1bWJuYWlsIGRpbWVuc2lv bnMgaW4gdGhlIHRoZW1lIGxpc3QuIFNldCBlaXRoZXIgZGltZW5zaW9uIHRvIDAgdG8gdHVy biBvZmYgdGh1bWJuYWlsIGRpc3BsYXkuIERlZmF1bHQ6IDI2MCAmIzIxNTsgMTUwcHg8L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+R2xvYmFsIHRoZW1lPC9zcGFuPiA6IFNldCB0 aGUgdGhlbWUgZm9yIGFsbCBvdGhlciB1c2Vycy4gSWYgdXNpbmcgJiM4MjE2O09uZSB0aGVt ZSBmb3IgZXZlcnlvbmUmIzgyMTc7IHRoZSB0aGVtZSBjaG9zZW4gaGVyZSBpcyBmb3JjZWQg dXBvbiBhbGwgdXNlcnMuIElmIHVzaW5nIGFueSBvZiB0aGUgb3RoZXIgbWVjaGFuaXNtcywg dGhpcyB0aGVtZSBpcyBhIGZhbGxiYWNrIHNob3VsZCBzb21ldGhpbmcgZ28gcGVhci1zaGFw ZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1lIHN5c3RlbTwvc3Bhbj4g OiBBcyBkZXRhaWxlZCBpbiA8YSBocmVmPSIjc3dpdGNoIj5Td2l0Y2hpbmcgdGhlbWVzPC9h PiwgeW91IG1heSBjaG9vc2UgdGhlIHdheSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gaW50ZXJmYWNlIGlzIHByZXNlbnRlZCB0byBvdGhlciB1c2VyczoKCTx1bD4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBmb3IgZXZlcnlvbmU8L3NwYW4+IDog dXNlcyB0aGUgR2xvYmFsIHRoZW1lIGZvciBhbGwgdXNlcnM7IHRoZXkgaGF2ZSBubyBjaG9p Y2UgaW4gdGhlIG1hdHRlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhl bWUgcGVyIHByaXZpbGVnZSBsZXZlbDwvc3Bhbj4gOiBhbGxvd3MgeW91IHRvIGFzc2lnbiBv bmUgb3IgbW9yZSBwcml2aWxlZ2UgbGV2ZWxzIHRvIGEgdGhlbWUuIENob29zZSBhIHRoZW1l IGZyb20gdGhlIGxlZnQtaGFuZCBsaXN0IGFuZCB0aGVuIHNoaWZ0L2N0cmwtY2xpY2sgdGhl IHByaXZpbGVnZSBsZXZlbHMgdG8gYXNzaWduIHRoZW0uIEZsaWNrIGJldHdlZW4gdGhlbWVz IGluIHRoZSBsZWZ0IGNvbHVtbiB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2V0IGZvciB2YXJp b3VzIHVzZXIgbGV2ZWxzLCBvciBob3ZlciBvdmVyIGEgcHJpdmlsZWdlIGxldmVsIHRvIHNl ZSBhIHRvb2x0aXAuIE9ubHkgb25lIGxldmVsIGNhbiBiZSBhc3NpZ25lZCB0byBhIHRoZW1l IHNvIGlmIHlvdSBjbGljayBhIGxldmVsIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25l ZCB0byBhbm90aGVyIHRoZW1lLCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdHMgb3JpZ2lu YWwgYXNzaWdubWVudC4gTm90ZSB5b3UgbXVzdCBTYXZlIHRoZSBjaGFuZ2VzIGZvciB0aGVt IHRvIHRha2UgZWZmZWN0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVt ZSBwZXIgdXNlcjwvc3Bhbj4gOiBkZWZpbmUgYSBzaG9ydGxpc3QgZnJvbSB0aGUgYXZhaWxh YmxlIGluc3RhbGxlZCB0aGVtZXMgdG8gb2ZmZXIgdG8gYWxsIHVzZXJzLiBBIG5ldyB0YWIg d2lsbCBhcHBlYXIgdG8gb3RoZXIgdXNlcnMgdW5kZXIgPGVtPkFkbWluPC9lbT4gdGhhdCBp cyBlc3NlbnRpYWxseSBhIGN1dC1kb3duIHZlcnNpb24gb2YgdGhlIDxlbT5BZG1pbiB0aGVt ZXM8L2VtPiB0YWIuIFVzZXJzIGNhbiBzd2l0Y2ggYmV0d2VlbiBhbnkgb25lIG9mIHRoZSB0 aGVtZXMgeW91IGhhdmUgcGVybWl0dGVkLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxw PlJlbWVtYmVyIHRvIGNsaWNrIFNhdmUgdG8gYXBwbHkgdGhlIGNoYW5nZXMuIENsaWNraW5n IGFueSBvdGhlciB0YWIgd2lsbCB1bmRvIGFueSBtb2RpZmljYXRpb25zIHlvdSBtYXkgaGF2 ZSBtYWRlLjwvcD4KCgk8aDIgaWQ9ImJyb3dzZSI+QnJvd3NlIHRoZW1lczwvaDI+CgoJPHA+ Q2xpY2sgdGhpcyBidXR0b24gdG8gYmUgdGFrZW4gdG8gdGhlIGNlbnRyYWwgYWRtaW4gdGhl bWUgcmVwb3NpdG9yeSB3aGVyZSB5b3UgbWF5IGJyb3dzZSB0aGVtZXMgYW5kIGRvd25sb2Fk IHRoZW0gcmVhZHkgZm9yIGluc3RhbGxhdGlvbi48L3A+CgoJPGgyIGlkPSJpbXBvcnQiPklu c3RhbGwgYSB0aGVtZTwvaDI+CgoJPHA+TG9jYXRlIGEgdGhlbWUgcGFja2FnZSBvbiB5b3Vy IGhhcmQgZHJpdmUgb3IgcGFzdGUgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0 byBhIHBhY2thZ2UgaW4gdGhlIGJveCBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLiBIaXQgPHN0 cm9uZz5VcGxvYWQ8L3N0cm9uZz4gYW5kIGl0IHdpbGwgYmUgaW5zdGFsbGVkLiBJZiBpdCBh bHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBOb3RlIHRoYXQgeW91IG1h eSByZWNlaXZlIGEgd2FybmluZyBpZiB0aGUgdGhlbWUgaXMgcGFja2FnZWQgdXNpbmcgYSBj b21wcmVzc2lvbiBhbGdvcml0aG0gdGhhdCBpcyBub3QgYnVpbHQgaW50byB5b3VyIHZlcnNp b24gb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4uPC9wPgoKCTxoMiBpZD0ibmV3 Ij5DcmVhdGUgYSBuZXcgKGVtcHR5KSB0aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0cm9uZz5D cmVhdGUgbmV3IHRoZW1lPC9zdHJvbmc+IGFuZCBhIGJveCB3aWxsIHNsaWRlIGRvd24gYWxs b3dpbmcgeW91IHRvIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUuICBOb3RlIHRoYXQgdGhlIGVk aXQgYm94IGF1dG9tYXRpY2FsbHkgdGFrZXMgZm9jdXMsIHNvIHlvdSBjYW4gdHlwZSBzdHJh aWdodCBhd2F5LjwvcD4KCgk8cD5ObyBzcGFjZXMgb3Igb2RkIGNoYXJhY3RlcnMgYXJlIHBl cm1pdHRlZCwgYmVjYXVzZSB0aGUgbmFtZSB5b3UgZW50ZXIgaXMgdGhlIG5hbWUgb2YgdGhl IGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgPGVtPnRoZW1lPC9lbT4g Zm9sZGVyIGFuZCB0aGVtIG5hbWUgb2YgeW91ciB0aGVtZSYjODIxNztzIGNsYXNzLiBJZiB5 b3UgZG8gbWFuYWdlIHRvIHVzZSBvZGQgY2hhcmFjdGVycywgdGhlIG5hbWUgd2lsbCBiZSAm IzgyMjA7ZHVtYmVkIGRvd24mIzgyMjE7IGZvciB5b3UuIE9uY2UgdGhlIG5hbWUgaXMgc2V0 LCB0aGF0IGlzIGl0OyB5b3UgY2Fubm90IGNoYW5nZSBpdCBmcm9tIHdpdGhpbiB0aGUgaW50 ZXJmYWNlLiBUaGUgb25seSB3YXkgdG8gcmVuYW1lIGl0IGlzIHZpYSB5b3VyIDxzcGFuIGNs YXNzPSJjYXBzIj5GVFA8L3NwYW4+IGNsaWVudCBhbmQgaW4gdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+IGZpbGUgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLjwv cD4KCgk8cD5JbiBvcmRlciB0byBhdm9pZCBuYW1lIGNsYXNoZXMgd2l0aCBvdGhlciBwZW9w bGUmIzgyMTc7cyB0aGVtZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsIHRoZW1lcyB5 b3UgZGVzaWduIGJlZ2luIHdpdGggYSB1bmlxdWUgMy1sZXR0ZXIgcHJlZml4IG9mIHlvdXIg b3duIGNob29zaW5nLCBwbHVzIGFuIHVuZGVyc2NvcmUgJiM4MjEyOyBleGFjdGx5IGxpa2Ug cGx1Z2lucy4gVGh1cywgc21kX0JsdWVNZWFuaWUgbWlnaHQgd2VsbCBiZSB0aGUgbmFtZSBv ZiBhIHRoZW1lLjwvcD4KCgk8cD5XaGVuIHlvdSBoYXZlIG5hbWVkIHlvdXIgdGhlbWUsIGNs aWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGluIHdoaWNo IGl0IGNhbiByZXNpZGUuPC9wPgoKCTxoMiBpZD0iY2xvbmUiPkV4dGVuZCBhbiBleGlzdGlu ZyB0aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0cm9uZz5CYXNlPC9zdHJvbmc+IHRvIGNyZWF0 ZSBhIG5ldyB0aGVtZSBiYXNlZCBvbiBhbm90aGVyLiBBIGJveCB3aWxsIHNsaWRlIGRvd24g KHRoZSBjdXJzb3IgZm9jdXNlcyBhdXRvbWF0aWNhbGx5IGluIHRoZSBib3ggZm9yIHlvdSkg c28geW91IG1heSBlbnRlciB0aGUgbmFtZSBvZiB5b3VyIGNvcHkuIE9ic2VydmUgdGhlIDxh IGhyZWY9IiNuZXciPm5hbWluZyBjb252ZW50aW9uPC9hPiwgdGhlbiBjbGljayA8c3Ryb25n PkdvPC9zdHJvbmc+IHRvIGNyZWF0ZSB0aGUgbmV3IHRoZW1lLjwvcD4KCgk8cD48c3BhbiBj bGFzcz0icmVxdWlyZWQiPlBsZWFzZSByZW1lbWJlciwgeW91ciB0aGVtZSB3aWxsIGJlIGRl cGVuZGVudCBvbiB0aGUgY2hvc2VuIHRoZW1lIGFuZCA8c3Ryb25nPmJvdGg8L3N0cm9uZz4g bXVzdCBiZSBwcmVzZW50IG9uIGEgdXNlciYjODIxNztzIHN5c3RlbSBmb3IgdGhlIHRoZW1l IHRvIHdvcms8L3NwYW4+LiBJdCBpcyB3b3J0aCBlbnN1cmluZyB0aGF0IHVzZXJzIG9mIHlv dXIgdGhlbWUgYXJlIG1hZGUgYXdhcmUgb2YgdGhpcyBkZXBlbmRlbmN5IHRvIGF2b2lkIHVu bmVjZXNzYXJ5IGZydXN0cmF0aW9uOyBwZXJoYXBzIGFkZCBhIGxpbmsgdG8gdGhlIHRoZW1l JiM4MjE3O3MgYmFzZSwgbWVudGlvbiB0aGUgZGVwZW5kZW5jeSBpbiB0aGUgSGVscCBsaW5r IGFuZC9vciBpbiB0aGUgdGhlbWUmIzgyMTc7cyBhcnRpY2xlIG9uIFRleHRnYXJkZW4uIFlv dSB3aWxsIG5vdCBiZSBhYmxlIHRvIGRlbGV0ZSBhbnkgdGhlbWUgZnJvbSB0aGUgbGlzdCB0 aGF0IGhhcyBzdWNoIGEgZGVwZW5kZW5jeSwgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gc2lkZSB3 aWxsIHN0b3Agd29ya2luZy48L3A+CgoJPGgyIGlkPSJleHBvcnQiPkV4cG9ydCBhIHRoZW1l PC9oMj4KCgk8cD5JZiB5b3Ugd2lzaCB0byBiYWNrIHVwIGEgdGhlbWUgb3Igc2hhcmUgaXQg d2l0aCBvdGhlcnMsIGNsaWNrIDxzdHJvbmc+RXhwb3J0PC9zdHJvbmc+LiBBIGJveCB3aWxs IHNsaWRlIGRvd24gb2ZmZXJpbmcgeW91IGEgY2hvaWNlIG9mIGNvbXByZXNzaW9uIGZvcm1h dHM7IHRoZSBkZWZhdWx0IGlzIHRoZSBmb3JtYXQgeW91IGNob3NlIGZyb20gdGhlIDxhIGhy ZWY9IiNzZXR1cCI+UHJlZmVyZW5jZXM8L2E+IHBhZ2UuIENsaWNrIDxlbT5bR29dPC9lbT4g dG8gZXhwb3J0IHRoZSB0aGVtZSBhbmQgc2F2ZSBpdCB0byB5b3VyIGNvbXB1dGVyLiBBbGwg cmVsYXRlZCBmaWxlcyBpbiB0aGUgdGhlbWUgd2lsbCBiZSBwYWNrYWdlZCB0b2dldGhlciBp bnRvIGEgc2luZ2xlIGRvd25sb2FkIGZpbGUgZm9yIGNvbnZlbmllbmNlLjwvcD4KCgk8aDIg aWQ9ImRlbGV0ZSI+RGVsZXRlIGEgdGhlbWU8L2gyPgoKCTxwPkhpdCB0aGlzIChhbmQgY29u ZmlybSB5b3UgYXJlIHN1cmUpIHRvIHJlbW92ZSB0aGUgZW50aXJlIHRoZW1lIGZvbGRlciBh bmQgY29udGVudHMgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uIDxzcGFuIGNsYXNzPSJyZXF1aXJl ZCI+VGhpcyBpcyBub3QgdW5kb2FibGUsIHNvIGJlIGNhcmVmdWw8L3NwYW4+LjwvcD4KCgk8 aDIgaWQ9ImVkaXRfdGhlbWUiPkVkaXQgYSB0aGVtZTwvaDI+CgoJPHA+QSB0aGVtZSBpcyBh IGNvbGxlY3Rpb24gb2YgZmlsZXMuIFRoZSBmaWxlcyBhbGwgcmVzaWRlIGluIHRoZWlyIG93 biBzZWxmLWNvbnRhaW5lZCBkaXJlY3RvcnkgdW5kZXIgPGNvZGU+dGV4dHBhdHRlcm4vdGhl bWU8L2NvZGU+LiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGlzIHRoZSBuYW1lIG9mIHlv dXIgdGhlbWUsIGhlbmNlIHRoZSByZWFzb24gaXQgY2Fubm90IGNvbnRhaW4gYW55IG9ic2N1 cmUgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGludmFsaWQgaW4gdGhlIGZpbGVzeXN0ZW0g b3IgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gdmFyaWFibGVzLjwvcD4KCgk8cD5X aGVuIHlvdSBjbGljayAmIzgyMTY7RWRpdCYjODIxNzsgeW91IHdpbGwgYmUgdGFrZW4gdG8g YSBzY3JlZW4gdGhhdCBhbGxvd3MgeW91IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUgdGhlbWUu IFRoZSBFZGl0IHNjcmVlbiBpcyBicm9rZW4gaW50byB0aHJlZSB2ZXJ0aWNhbCBwYXJ0cywg YXMgZm9sbG93czo8L3A+CgoJPGgzIGlkPSJlZGl0X2ltZyI+SW1hZ2UgaGFuZGxpbmc8L2gz PgoKCTxwPkVhY2ggdGhlbWUgY2FuIGNvbnRhaW4gYW4gb3B0aW9uYWwgdGh1bWJuYWlsLiBU aGlzIGlzIGFuIGltYWdlIG9mIDI2MCYjMjE1OzE1MHB4IGluIHNpemUsIGNhbGxlZCA8Y29k ZT5zY3JlZW5zaG90LnBuZzwvY29kZT4gKG9yIDxjb2RlPi5qcGc8L2NvZGU+LCA8Y29kZT4u Z2lmPC9jb2RlPiwgZXRjKSBpbiB5b3VyIHRoZW1lIGRpcmVjdG9yeS4gTm90ZSBpdCB3aWxs IGJlIHNxdWFzaGVkIC8gc3RyZXRjaGVkIHRvIGZpdCB5b3VyIHRodW1ibmFpbCBkaW1lbnNp b25zIHNldCBpbiB0aGUgcGx1Z2luIHByZWZzLjwvcD4KCgk8cD5PdGhlciBpbWFnZXMgZm9y IHVzZSBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBydWxlcyBjYW4gYWxzbyBi ZSBhZGRlZCB0byBhIHRoZW1lLiBCcm93c2UgZm9yIGFuIGltYWdlIGFuZCBzZWxlY3QgaXQs IHRoZW4gY2xpY2sgPHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4gdG8gYWRkIGl0IHRvIHRoZSB0 aGVtZS4gWW91IGNhbiBjdXJyZW50bHkgb25seSB1cGxvYWQgb25lIGltYWdlIGF0IGEgdGlt ZSwgdGhvdWdoIHlvdSBjYW4gZGVsZXRlIG9uZSBvciBtb3JlIGF0IG9uY2UgYnkgU2hpZnQv Q3RybCBjbGlja2luZyB0aGUgb25lcyB5b3Ugd2lzaCB0byByZW1vdmUgYW5kIGhpdHRpbmcg dGhlICYjODIxNjt4JiM4MjE3OyBidXR0b24uIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+V2Fy bmluZzogZmlsZXMgd2lsbCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNvbmZp cm1hdGlvbi48L3NwYW4+PC9wPgoKCTxwPlRoZSBiZXN0IHdheSB0byByZWZlciB0byBpbWFn ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgaW4gc3R5bGVzaGVldHMgaXMgd2l0 aCBhIHJlbGF0aXZlIHBhdGg6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+Lm15U3R5bGUgewogICBiYWNrZ3JvdW5kOiB1cmwobXktaW1hZ2UuZ2lmKTsK fQo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZGl0X2NvbnRlbnQiPkNvbnRlbnQ8L2gzPgoK CTxwPlRoZSBjZW50cmFsIHBhbmUgaXMgd2hlcmUgeW91IGVkaXQgdGhlIGNvbnRlbnRzIG9m IHRoZSBmaWxlcyBpbiB5b3VyIHRoZW1lLiBUaGUgc21hbGwgZWRpdCBib3ggYXQgdGhlIHRv cCBpcyB0aGUgZmlsZW5hbWUgYW5kIHRoZSBsYXJnZSB0ZXh0IGFyZWEgaXMgaXRzIGNvbnRl bnQuIENsaWNrIDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiB0byBjb21taXQgY2hhbmdlcy4gWW91 IG1heSBmcmVlbHkgcmVuYW1lIGFueSBmaWxlIHlvdSBhcmUgZWRpdGluZy48L3A+CgoJPHAg Y2xhc3M9InJlcXVpcmVkIj5JbXBvcnRhbnQ6IGlmIHlvdSBzZWxlY3QgYSBmaWxlLCBlZGl0 IGl0LCByZW5hbWUgaXQsIGFuZCBjbGljayA8c3Ryb25nPlNhdmU8L3N0cm9uZz4geW91IHdp bGwgb3ZlcndyaXRlIHdoYXRldmVyIHdhcyBpbiB0aGUgcHJldmlvdXMgZmlsZSAmIzgyMTI7 IGV2ZW4gaWYgeW91IGVtcHR5IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dGFyZWEgaW4gYW4g ZWZmb3J0IHRvIG1ha2UgYSAmIzgyMjA7bmV3JiM4MjIxOyBvbmUuIElmIHlvdSB3aXNoIHRv IGNyZWF0ZSBhIG5ldyBmaWxlLCBpdCBpcyBzYWZlciB0byBjbGljayB0aGUgPHN0cm9uZz5O ZXcgZmlsZTwvc3Ryb25nPiBidXR0b24gaW4gdGhlIHJpZ2h0IGhhbmQgY29sdW1uIHRvIGVu c3VyZSB5b3UgYXJlIG5vdCBlZGl0aW5nIGFuIGV4aXN0aW5nIGZpbGUgYnkgbWlzdGFrZS48 L3A+CgoJPHA+SXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBmaWxlIHBlcm1pc3Npb25z IHZhcnkgZnJvbSBob3N0IHRvIGhvc3QuIElmIHlvdSB0cnkgYW5kIHNhdmUgYSB0aGVtZSBm aWxlIGFuZCByZWNlaXZlIGEgeXVra3kgd2FybmluZyBtZXNzYWdlIGFib3V0IG5vdCBiZWlu ZyBhYmxlIHRvIHdyaXRlIHRoZSBmaWxlLCB0cnkgaW5jcmVhc2luZyB0aGUgcGVybWlzc2lv bnMgb24gdGhlIHRoZW1lIGRpcmVjdG9yeSBhbmQgYWxsIGZpbGVzIGJlbmVhdGggaXQuPC9w PgoKCTxwPlRoZSB0aGVtZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgaW4gPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCA8Y29kZT42NDQ8L2NvZGU+IHBlcm1pc3Npb25zIHdo aWNoIHNob3VsZCBiZSBmaW5lIGZvciBhIHN0YW5kYXJkIGhvc3QuIFNvbWUgc2hhcmVkIGhv c3RpbmcgY29tcGFuaWVzICYjODIxMjsgYW5kIHRoZXNlIGFyZSB1c3VhbGx5IHRoZSBvbmVz IHRoYXQgdGVsbCB5b3UgdG8gc2V0IHlvdXIgPGNvZGU+ZmlsZXM8L2NvZGU+IGFuZCA8Y29k ZT5pbWFnZXM8L2NvZGU+IGRpcmVjdG9yaWVzIHRvIDc3NyBpbiBvcmRlciB0byBtYWtlIHRo ZW0gd3JpdGFibGUgYnkgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gJiM4MjEyOyBy dW4gQXBhY2hlL1BIUCBpbiBhIGRpZmZlcmVudCB3YXkgd2hpY2ggbWlnaHQgcmVxdWlyZSBo aWdoZXIgcGVybWlzc2lvbnMgaW4gb3JkZXIgdG8gd3JpdGUgdG8gdGhlIHRoZW1lIGRpcmVj dG9yeS4gVGhpcyBpcyB1bmZvcnR1bmF0ZWx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBw bHVnaW4gc28geW91IHdpbGwgaGF2ZSB0byBleHBlcmltZW50IGlmIGl0IGNhdXNlcyB5b3Ug cHJvYmxlbXMuPC9wPgoKCTxoMz5GaWxlIGhhbmRsaW5nPC9oMz4KCgk8cD5UaGlzIGNvbHVt biBiZWdpbnMgd2l0aCBhIHNlbGVjdCBsaXN0IG9mIGFsbCBpbnN0YWxsZWQgdGhlbWVzOyB0 aGUgY3VycmVudCB0aGVtZSBzZWxlY3RlZC4gQ2hhbmdpbmcgdGhlIGl0ZW0gaGVyZSB3aWxs IGltbWVkaWF0ZWx5IGFsbG93IHlvdSB0byBlZGl0IGFub3RoZXIgdGhlbWUuIFRoaXMgaXMg dmVyeSB1c2VmdWwgaWYgeW91IGFyZSBjb3B5aW5nIGFuZCBwYXN0aW5nIGZpbGVzIGZyb20g b25lIHRoZW1lIHRvIGFub3RoZXIgYW5kIHNhdmVzIHlvdSBoYXZpbmcgdG8gZ28gYmFjayB0 byB0aGUgdGhlbWUgbGlzdCBmaXJzdC48L3A+CgoJPHA+QmVuZWF0aCB0aGF0IGFyZSB0d28g YnV0dG9uczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TmV3IGZpbGU8 L3NwYW4+IDogQ3JlYXRlIGEgbmV3LCBlbXB0eSBmaWxlIGluIHlvdXIgdGhlbWUgZGlyZWN0 b3J5LiBOb3RoaW5nIGlzIGFjdHVhbGx5IGNyZWF0ZWQgdW50aWwgeW91IGhpdCA8c3Ryb25n PlNhdmU8L3N0cm9uZz4gYnV0IHVzaW5nIHRoaXMgYnV0dG9uIGVuc3VyZXMgeW91IGJlZ2lu IHdpdGggYSBjbGVhbiBzbGF0ZSBhbmQgZG9uJiM4MjE3O3QgYWNjaWRlbnRhbGx5IG92ZXJ3 cml0ZSB0aGUgcHJldmlvdXMgZmlsZSB5b3Ugd2VyZSBlZGl0aW5nPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPlRoZW1lIGxpc3Q8L3NwYW4+IDogQSBzaG9ydGN1dCBiYWNrIHRv IHRoZSBtYWluIHRoZW1lIGxpc3QgKGVxdWl2YWxlbnQgdG8gY2xpY2tpbmcgdGhlIDxlbT5B ZG1pbiB0aGVtZXM8L2VtPiB0YWIpPC9saT4KCTwvdWw+CgoJPHA+QmVsb3cgdGhvc2UgYnV0 dG9ucyBhcmUgdXAgdG8gZm91ciBzZWN0aW9ucyBjb250YWluaW5nIGFsbCB0aGUgKG5vbi1p bWFnZSkgZmlsZXMgdGhhdCBtYWtlIHVwIHlvdXIgdGhlbWUuIENsaWNrIGEgZmlsZW5hbWUg dG8gbG9hZCBpdCBpbnRvIHRoZSBjZW50cmFsIHRleHQgYXJlYSBmb3IgZWRpdGluZy48L3A+ CgoJPGg0IGlkPSJlZGl0X2NzcyI+U3R5bGVzaGVldHM8L2g0PgoKCTxwIGNsYXNzPSJyZXF1 aXJlZCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9 ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uY3NzPC9jb2RlPjwvcD4KCgk8cD5U aGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgeW91ciB0aGVtZS4gQWRkIGFzIG1hbnkgc2hlZXRz IGFzIHlvdSBsaWtlIGFuZCBsb2FkIHRoZW0gZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBz Ij5QSFA8L3NwYW4+IGZpbGUocykuPC9wPgoKCTxoNCBpZD0iZWRpdF9jc3MiPlN0eWxlcGxh dGVzPC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQg ZmlsZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNv ZGU+LnNzYzwvY29kZT48L3A+CgoJPHA+QSBzcGVjaWFsIHZlcnNpb24gb2YgYSBzdHlsZXNo ZWV0IHRoYXQgYWxsb3dzIHlvdSB0byBkZWZpbmUgY29uc3RhbnRzIHRocm91Z2hvdXQgeW91 ciBzaGVldC4gV3JpdGUgeW91ciBzdHlsZXNoZWV0IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5 IGFzIHlvdSB3b3VsZCBub3JtYWxseSBidXQgd2hlcmUgeW91IGZpbmQgeW91cnNlbGYsIGZv ciBleGFtcGxlLCB1c2luZyB0aGUgc2FtZSBjb2xvciB2YWx1ZSByZXBlYXRlZGx5IG9yIHRo ZSBzYW1lIHJ1bGVzIGJsb2NrLCB5b3UgY2FuIHNhdmUgeW91cnNlbGYgdHlwaW5nIGJ5IHVz aW5nIGNvbnN0YW50czo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJs b2NrIj5AYnJhbmRpbmc6ICMxMjM0NTY7CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7 Cn0KaDIgewogIGNvbG9yOiBAYnJhbmRpbmc7Cn0KPC9jb2RlPjwvcHJlPgoKCTxwPllvdSBj YW4gYWxzbyBzcGVjaWZ5IHdob2xlIHJ1bGUgYmxvY2tzIGxpa2UgdGhpcyAoPGVtPk5vdGUg dGhlIGNvbG9uIGFmdGVyIHRoZSBibG9jayBuYW1lPC9lbT4pIDo8L3A+Cgo8cHJlIGNsYXNz PSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5AbXlfYmxvY2s6IHsKICBtYXJnaW46MCAy MHB4OwogIGJvcmRlcjozcHggc29saWQgIzk5OTsKICBmb250LXNpemU6MTIwJTsKfQojaGVh ZGVyIHsKICBjb2xvcjogQGJyYW5kaW5nOwogIHBvc2l0aW9uOnJlbGF0aXZlOwogIEBteV9i bG9jazsKfQpoMiB7CiAgQG15X2Jsb2NrOwp9CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3Ug cHV0IGFsbCB5b3VyIGNvbnN0YW50cyBhdCB0aGUgdG9wIG9mIHRoZSA8Y29kZT4uc3NjPC9j b2RlPiBmaWxlIHRoZXkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGdlbmVyYXRlZCBjc3Mg ZmlsZS48L3A+CgoJPHA+V2hlbiB5b3Ugc2F2ZSBhIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUs IGEgY29ycmVzcG9uZGluZy1uYW1lZCA8Y29kZT4uY3NzPC9jb2RlPiBmaWxlIHdpbGwgYWxz byBiZSBjcmVhdGVkLiBUaGUgdHdvIHdpbGwgYmUga2VwdCBpbiBzeW5jIGFzIGZhciBhcyBw cmFjdGljYWJsZSAoZXZlbiBpZiB5b3UgcmVuYW1lIHRoZSBvcmlnaW5hbCBmaWxlKS4gV2hl biBpdCBjb21lcyB0byBkZWxldGlvbiB0aG91Z2gsIHRoZXkgYXJlIHRyZWF0ZWQgc2VwYXJh dGVseS4gVGhpcyBhbGxvd3MgeW91IHRvIGVpdGhlciBrZWVwIHRoZSA8Y29kZT4uc3NjPC9j b2RlPiBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gYXJjaGl2ZSBvciByZW1vdmUgaXQgcHJp b3IgdG8gZXhwb3J0LjwvcD4KCgk8aDQgaWQ9ImVkaXRfanMiPkphdmFzY3JpcHQ8L2g0PgoK CTxwIGNsYXNzPSJyZXF1aXJlZCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBi dXQgPHNwYW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uanM8L2Nv ZGU+PC9wPgoKCTxwPkFueSB0cmlja2VyeSB5b3UgbWF5IHdpc2ggdG8gZW1wbG95IGluIHlv dXIgdGhlbWUgY2FuIGJlIHdyaXR0ZW4gaW4gdGhlc2UgZmlsZXMuIFJlbWVtYmVyIHRoYXQg alF1ZXJ5IGlzIGxvYWRlZCBieSBkZWZhdWx0IG9uIHRoZSBhZG1pbiBzaWRlIHNvIHlvdSBj YW4gcGxheSB3aXRoIHRoYXQuPC9wPgoKCTxoNCBpZD0iZWRpdF9waHAiPjxzcGFuIGNsYXNz PSJjYXBzIj5QSFA8L3NwYW4+PC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPk9uZSBmaWxl IDxzdHJvbmc+bXVzdDwvc3Ryb25nPiBiZSBuYW1lZCBleGFjdGx5IHRoZSBzYW1lIGFzIHlv dXIgdGhlbWUsIGkuZS4gPGNvZGU+c21kX0JsdWVNZWFuaWUucGhwPC9jb2RlPi4gQW55IG90 aGVyIGZpbGVzIG11c3QgZW5kIGluIDxjb2RlPi5waHA8L2NvZGU+PC9wPgoKCTxwPkNvbnN1 bHQgdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/ dGl0bGU9Q3JlYXRpbmdfYW5fQWRtaW5fU2lkZV9UaGVtZSI+QWRtaW4gU2lkZSB0aGVtZSBn dWlkZTwvYT4gb24gVGV4dGJvb2sgZm9yIHRoZSBydWxlcyBvbiBtYWtpbmcgdGhlbWVzLiBO b3RlIHRoYXQgY29ycnVwdCB0aGVtZXMgYXJlIGRldGVjdGVkIHRvIHRoZSBiZXN0IG9mIHRo ZSBwbHVnaW4mIzgyMTc7cyBhYmlsaXR5IGFuZCB5b3UgbWF5IG5vdCBleHBvcnQsIGJhc2Ug b3Igc3dpdGNoIHRvIGFueSB0aGVtZSB0aGF0IGlzIGJyb2tlbi48L3A+CgoJPGg0IGlkPSJl ZGl0X290aGVyIj5PdGhlcnM8L2g0PgoKCTxwPkFueSBmaWxlcyB0aGF0IGFyZSBub3Qgb2Yg dGhlIGFib3ZlIHRocmVlIHR5cGVzIChhbmQgYXJlIG5vdCBpbWFnZXMpIGFwcGVhciBoZXJl LiBZb3Ugd2lsbCBwcm9iYWJseSBuZXZlciBzZWUgdGhpcyBzZWN0aW9uLiBJZiB5b3UgZG8g dHJ5IHRvIGNyZWF0ZSBhIGZpbGUgdGhhdCBpcyBub3Qgb2YgdGhlIGFib3ZlIHRocmVlIHR5 cGVzLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuIFlvdSBtdXN0IGhpdCA8ZW0+U2F2ZTwv ZW0+IGFnYWluIHRvIGNvbmZpcm0geW91IHJlYWxseSB3aXNoIHRvIGNyZWF0ZSB0aGUgZmls ZS48L3A+CgoJPGgzIGlkPSJhYm91dCI+TWFuaWZlc3Q8L2gzPgoKCTxwPkluIHlvdXIgbWFp biA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlzIGEgZnVuY3Rpb24gY2Fs bGVkIDxjb2RlPm1hbmlmZXN0KCk8L2NvZGU+IHdoaWNoIGNvbnRhaW5zIGluZm8gYWJvdXQg eW91IGFuZCB5b3VyIHRoZW1lLiBFZGl0IHRoZSB2YWx1ZXMgaGVyZSB0byBzdGFtcCB5b3Vy IG1hcmsgb24gdGhlIHRoZW1lLiBOb3RlIHRoYXQgaWYgeW91ciBkZXNjcmlwdGlvbiBjb250 YWlucyBhcG9zdHJvcGhlcyB0aGV5IG11c3QgYmUgPGVtPmVzY2FwZWQ8L2VtPiBieSBwcmVj ZWRpbmcgdGhlbSB3aXRoIGEgc2luZ2xlIGJhY2tzbGFzaCA8Y29kZT5cPC9jb2RlPi4gZS5n LjwvcD4KCjxwcmU+PGNvZGU+JiMzOTtkZXNjcmlwdGlvbiYjMzk7ID0mZ3Q7ICYjMzk7RG9u XCYjMzk7dCBmZWFyIHRoZSByZWFwZXIhJiMzOTssCjwvY29kZT48L3ByZT4KCgk8aDIgaWQ9 InBlcnVzZXIiPlBlci11c2VyIHRoZW1lIHNlbGVjdGlvbjwvaDI+CgoJPHA+SWYgYW4gYWRt aW5pc3RyYXRvciBjaG9vc2VzIHRvIGFsbG93IHBlci11c2VyIHRoZW1lcywgYSBuZXcgdGFi IGFwcGVhcnMgdW5kZXIgdGhlIEFkbWluIHRhYiBvZiBhbGwgdXNlcnMgKGV4Y2VwdCBhZG1p bmlzdHJhdG9ycykuIFRoaXMgc2ltcGx5IGRpc3BsYXlzIGFsbCBhdmFpbGFibGUgdGhlbWVz ICYjODIxMjsgb25lcyB0aGF0IHRoZSBhZG1pbmlzdHJhdG9yIGhhcyBleHBsaWNpdGx5IGFs bG93ZWQuPC9wPgoKCTxwPkNsaWNraW5nIGEgdGhlbWUgbmFtZSBvciB0aHVtYm5haWwgd2ls bCBpbW1lZGlhdGVseSBzd2l0Y2ggdG8gdGhhdCB0aGVtZSB1bnRpbCB0aGUgdXNlciBjaG9v c2VzIGFub3RoZXIgb3IgdGhlIGFkbWluaXN0cmF0b3IgY2hhbmdlcyB0aGVtZSBzeXN0ZW0u PC9wPgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+ MTIgSnVuIDA5IHwgMC4xIHwgSW5pdGlhbCBwdWJsaWMgYmV0YTwvbGk+CgkJPGxpPjAzIFNl cCAwOSB8IDAuMTEgfCBBZGRlZCBUZXh0Z2FyZGVuIHRoZW1lIGZlZWQgYW5kIGxpbmtzIDsg aW1wcm92ZWQgZmlsZSBzdXBwb3J0IChib3RoIHRoYW5rcyB0aGVib21ic2l0ZSkgOyBtYWRl IGdsb2JhbCB0aGVtZSBtb3JlIG9idmlvdXMgOyBhbHRlcmVkIHByZWZzIHRhYiBhIGJpdCA7 IGFkZGVkIDxjb2RlPi5zc2M8L2NvZGU+IHN1cHBvcnQgOyBpZ25vcmVkIC5zdm4gc3ViZGly cyAoYWxsIHRoYW5rcyBwaWVtYW4pIDsgaW1wcm92ZWQgd2FybmluZyBtZXNzYWdlcyA7IG1p c2MgZml4ZXMgYW5kIGhvdXNla2VlcGluZzwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0 cyI+Q3JlZGl0czwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gd291bGQgbm90IGhhdmUgZXhpc3Rl ZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVzIG9mIHRoZSBUZXh0 cGF0dGVybiBkZXZlbG9wbWVudCB0ZWFtLCBlc3BlY2lhbGx5IFJvYmVydCBXZXR6bG1heXIg Zm9yIHRoZSB0aGVtZSBzdXBwb3J0LiBQbHVzIG9mIGNvdXJzZSB0aGUgYXJteSBvZiBiZXRh IHRlc3RlcnMsIGlkZWFzIGhhbXN0ZXJzIGFuZCB0aXJlbGVzcyB0aGVtZSBhZHZvY2F0ZXMs IG1vc3Qgbm90YWJseSBTdHVhcnQgQnV0Y2hlciwgRGFsZSBDaGFwbWFuLCBEYXZlIERlU2Fu ZHJvLCBhbmQgTWlrZSBEZW5uaXMuIEt1ZG9zIGFuZCB0aGFua3MgdG8geW91IGFsbC48L3A+ Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAg Y29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXci LCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21k X2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0 ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFy Z2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgY29s b3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0 ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4 IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdw eCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1 OyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAx cHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1k ZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBB cmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAg MCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250 LXdlaWdodDpib2xkOyBjb2xvcjojMzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91 bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUge3dp ZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRf aGVscCB0ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6 LjVlbSAwO30KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21k X2hlbHAgLnJlcXVpcmVkIHtjb2xvcjpyZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4 IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9 Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7 czozMjoiZGZjOTg0Njg0ODllMTZhODJhZDIyZWQwZTlhOWVjYTQiO30=