# Name: smd_admin_themes v0.13 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjEzIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czo4MzMxMjoiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAk 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 ODE5Mik7DQoJCQkJJGxpbmUgPSBwcmVnX3JlcGxhY2UoIltcclxuXSIsICIiLCAkbGluZSk7 DQoJCQkJaWYgKCRoZHJzID09IGZhbHNlKSB7DQoJCQkJCSRmZWVkIC49ICRsaW5lLiJcbiI7 DQoJCQkJfQ0KCQkJCWlmIChzdHJsZW4oJGxpbmUpID09IDApICRoZHJzID0gZmFsc2U7DQoJ CQl9DQoJCQlpZiAoJGluZm9bJ3RpbWVkX291dCddKSB7DQoJCQkJJGZlZWQgPSAnJzsNCgkJ CX0NCgkJCWZjbG9zZSgkZnApOw0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkkZmVlZCA9 ICcnOw0KCX0NCg0KCSRzbWRfYXRfdmxhc3QgPSAkZmVlZHMgPSAnJzsNCglpZiAoaXNzZXQo JHByZWZzWydzbWRfYXRfdmVyc2lvbnMnXSkgJiYgaXNzZXQoJHByZWZzWydzbWRfYXRfdmxh c3QnXSkpIHsNCgkJaWYgKHRpbWUoKSAtICRwcmVmc1snc21kX2F0X3ZsYXN0J10gPCA4NjQw MCkgew0KCQkJLy8gTGFzdCB1cGRhdGVkIHdpdGhpbiB0aGUgbGFzdCBkYXksIHNvIHJlYWQg dGhlIGNhY2hlZCB2ZXJzaW9uIG51bWJlcnMNCgkJCSRmZWVkcyA9IHVuc2VyaWFsaXplKCRw cmVmc1snc21kX2F0X3ZlcnNpb25zJ10pOw0KCQl9DQoJfQ0KCWlmICghJGZlZWRzIHx8IGdw cygncmVhZF92ZXJzaW9ucycpKSB7DQoJCSRmZWVkcyA9IHNtZF9hdF9mZWVkKCRmZWVkKTsN CgkJJGluc3RhbGxlZF9mZWVkID0gYXJyYXkoKTsNCg0KCQkvLyBPbmx5IHJlY29yZCB0aGUg dmVyc2lvbiBpbmZvIGZyb20gdGhlbWVzIHRoYXQgYXJlIGluc3RhbGxlZA0KCQlmb3JlYWNo KCRza2luX2xpc3QgYXMgJHNraW5fbmFtZSkgew0KCQkJJGZlZWRfc2tpbl9uYW1lID0gc3Ry X3JlcGxhY2UoJ18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIHRoZSB1cmxf dGl0bGUNCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRmZWVkX3NraW5fbmFtZSwgJGZlZWRz KSkgew0KCQkJCSRpbnN0YWxsZWRfZmVlZFskZmVlZF9za2luX25hbWVdID0gJGZlZWRzWyRm ZWVkX3NraW5fbmFtZV07DQoJCQl9DQoJCX0NCgkJc2V0X3ByZWYoJ3NtZF9hdF92bGFzdCcs IHRpbWUoKSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJ CXNldF9wcmVmKCdzbWRfYXRfdmVyc2lvbnMnLCBzZXJpYWxpemUoJGluc3RhbGxlZF9mZWVk KSwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJfQ0KDQoJ Zm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7DQoJCS8vIFJlYWQgZWFjaCBt YW5pZmVzdCBhbmQgc2V0IHVwIHRoZSBsYWJlbHMNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFk X3NraW5mbygkc2tpbl9uYW1lKTsNCgkJJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2Uo J18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIGZvciB1cmxfdGl0bGUgbWF0 Y2hpbmcNCg0KCQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZvLCAxKTsN CgkJJHRoaXNfc2tpbiA9ICgkc2tpbmZvKSA/ICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2lu KSA/IHN0cm9uZygkc2tpbmZvWydkbmFtZSddKSA6ICRza2luZm9bJ2RuYW1lJ10pIDogJHNr aW5fbmFtZTsNCgkJJGlzX2dibCA9ICgkc2tpbl9uYW1lID09ICRhdF9wcmVmc1snc21kX2F0 X2dsb2JhbF9za2luJ10pID8gc21kX2F0X2dUeHQoJ2lzX2dsb2JhbCcpIDogJyc7DQoJCSR0 aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRf YXRfc3dpdGNoJy5hLiduZXh0c3RlcD1zbWRfYXRfbGlzdCcuYS4nc2tpbj0nLiRza2luX25h bWUuYS4ncGFnZT0nLiRwYWdlLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdhcHBseV9za2lu JykuJyI+Jy4kdGhpc19za2luLiRpc19nYmwuKCgkc2tpbmZvICYmICRza2luZm9bJ2Jhc2Vk X29uJ10pID8gc21kX2F0X2dUeHQoJ2Jhc2VkX29uJywgYXJyYXkoJ3tza2lufScgPT4gJHNr aW5mb1snYmFzZWRfb24nXSkpIDogJycpLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0aHVt Ym5haWwuJzwvZGl2PicgOiAnJykuJzwvYT4nOw0KCQkkYXV0aHJvdyA9ICgoJHNraW5mbyAm JiBzdHJwb3MoJHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAwKSA/ICc8 YSBocmVmPSInLiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1dGhvcidd Lic8L2E+JyA6ICgoJHNraW5mbykgPyAkc2tpbmZvWydhdXRob3InXSA6ICctJykpOw0KCQkk YWN0cm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRf YXRfZWRpdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyI+WycuZ1R4dCgnZWRpdCcpLiddPC9h PicNCgkJCS4gJyAnIC4oKCRza2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRf ZXZlbnQuYS4nc3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIG9u Y2xpY2s9InJldHVybiBzbWRfZ2V0dmFsKFwnJy4kc2tpbl9uYW1lLidcJywgXCdzbWRfYXRf Y2xvbmVcJyk7Ij5bJy5zbWRfYXRfZ1R4dCgnY2xvbmUnKS4nXTwvYT4nIDogJycpDQoJCQku ICcgJyAuKCgkc2tpbmZvKSA/ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEu J3N0ZXA9c21kX2F0X2V4cG9ydCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgb25jbGljaz0i cmV0dXJuIHNtZF9nZXRjcnVzaChcJycuJHNraW5fbmFtZS4nXCcpOyI+Wycuc21kX2F0X2dU eHQoJ2V4cG9ydCcpLiddPC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKGluX2FycmF5KCRza2lu X25hbWUsICRzbWRfY29yZV90aGVtZXMpIHx8IGluX2FycmF5KCRza2luX25hbWUsICRiYXNl cykpID8gJycgOiAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNt ZF9hdF9kZWxldGUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEuJ3BhZ2U9Jy4kcGFnZS4nIiBv bmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycuc21kX2F0X2dUeHQoJ2RlbGV0ZV9jb25maXJt JywgYXJyYXkoJ3tza2lufScgPT4gJHNraW5fbmFtZSkpLidcJyk7Ij5bJy5nVHh0KCdkZWxl dGUnKS4nXTwvYT4nKQ0KCQkJLiAnPGRpdiBpZD0icG9wXycuJHNraW5fbmFtZS4nIiBjbGFz cz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQoJ25ld19jbG9u ZXNraW4nKS4nPC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzbWRfdGV4dF9uYW1l IiB2YWx1ZT0iIiAvPiA8YSBocmVmPSIjIj4mbmJzcDtbJy5zdHJvbmcoc21kX2F0X2dUeHQo J2NvbmZpcm0nKSkuJ108L2E+PC9kaXY+Jw0KCQkJLiAnPGRpdiBpZD0iY3J1c2hfJy4kc2tp bl9uYW1lLiciIGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRf Z1R4dCgnY3J1c2hfZm9ybWF0JykuJzwvc3Bhbj4nLnJhZGlvU2V0KCRjcnVzaGVycywgJHNr aW5fbmFtZS4nX2NydXNoJywgJGF0X3ByZWZzWydzbWRfYXRfY3J1c2gnXSkuJzxhIGhyZWY9 IiMiPiZuYnNwO1snLnN0cm9uZyhzbWRfYXRfZ1R4dCgnY29uZmlybScpKS4nXTwvYT48L2Rp dj4nOw0KCQkkdmVyb3cgPSAoJHNraW5mbykgPyAoKGlzc2V0KCRmZWVkc1skZmVlZF9za2lu X25hbWVdKSAmJiBpc3NldCgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsnc3VtbWFyeSddKSAm JiB2ZXJzaW9uX2NvbXBhcmUoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1bW1hcnknXSwk c2tpbmZvWyd2ZXJzaW9uJ10pPT09MSkgPyAnPGEgaHJlZj0iJy4kZmVlZHNbJGZlZWRfc2tp bl9uYW1lXVsnbGluayddLiciIHN0eWxlPSJmb250LXdlaWdodDpib2xkO2NvbG9yOiM5OTAw MDA7Ij4nLnNtZF9hdF9nVHh0KCd2ZXJzaW9uJykuJHNraW5mb1sndmVyc2lvbiddLic8L2E+ JyA6IHNtZF9hdF9nVHh0KCd2ZXJzaW9uJykuJHNraW5mb1sndmVyc2lvbiddKSA6ICcnOw0K DQoJCWlmICgkbGF5b3V0PT0wKSB7DQoJCQllY2hvIHRyKA0KCQkJCXRkKCR0aHVtcm93KQ0K CQkJCS50ZCgkYXV0aHJvdywgMTAwKQ0KCQkJCS50ZCgkdmVyb3cpDQoJCQkJLnRkKCgoJHNr aW5mbyk/ICRza2luZm9bJ2Rlc2NyaXB0aW9uJ10gOiAnLScpLigoJHNraW5mbyAmJiAkc2tp bmZvWydoZWxwJ10pID8gJyAnLmhyZWYoJ1snLmdUeHQoJ2hlbHAnKS4nXScsICRza2luZm9b J2hlbHAnXSkgOiAnJyksIDI1MCkNCgkJCQkudGQoJGFjdHJvdywyNjApDQoJCQksICgoJHNr aW5fbmFtZSA9PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9ImJhY2tncm91bmQ6I2U4ZThlODsi JyA6ICcnKQ0KCQkJKTsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9j ZWxsIicuKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHlsZT0iYmFja2dyb3Vu ZDojZThlOGU4OyInIDogJycpLic+JzsNCgkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9k aXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hdXRoIj4nLiR2ZXJvdy5zbWRfYXRf Z1R4dCgnYnknKS4kYXV0aHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNt ZF9hY3Rpb25zIj4nLiRhY3Ryb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8L2Rpdj4nOw0KCQl9 DQoJfQ0KDQovLwllY2hvIHRkYShzZWxlY3RfYnV0dG9ucygpIC4gZXZlbnRfbXVsdGllZGl0 X2Zvcm0oJHNtZF9hdF9ldmVudCwgTlVMTCwgJHBhZ2UsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwpLCAnIGNvbHNwYW49IjUiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiBu b25lOyInKTsNCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gJzwvdGQ+PC90cj4nOw0K CQllY2hvIGVuZFRhYmxlKCk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21k X2NsZWFyIj48L2Rpdj48L2Rpdj4nOw0KCX0NCgllY2hvICc8L2Zvcm0+JzsNCgllY2hvIG4u bmF2X2Zvcm0oJHNtZF9hdF9ldmVudCwgJHBhZ2UsICRudW1QYWdlcywgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCk7DQoJZWNobyBuLnBhZ2VieV9mb3JtKCRzbWRfYXRfZXZlbnQsICRwYWdl YnkpOw0KfQ0KDQpmdW5jdGlvbiBzbWRfYXRfZmVlZCgkZmVlZCkgew0KCWdsb2JhbCAkZmVl ZHM7DQoNCgkkZmVlZD1wcmVnX3JlcGxhY2UoIi8+Ii4iW1s6c3BhY2U6XV0rIi4iPC9pIiwg Ij48IiwgJGZlZWQpOyAvLyBLaWxsIHdoaXRlc3BhY2UgaW4gZmVlZA0KCSR4bWxwYXJzZXIg PSB4bWxfcGFyc2VyX2NyZWF0ZSgpOw0KCXhtbF9zZXRfZWxlbWVudF9oYW5kbGVyKCR4bWxw YXJzZXIsICJzbWRfYXRfZmVlZF9zdGFydF90YWciLCAic21kX2F0X2ZlZWRfZW5kX3RhZyIp Ow0KCXhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0 X2ZlZWRfdGFnX2NvbnRlbnRzIik7DQoJeG1sX3BhcnNlKCR4bWxwYXJzZXIsICRmZWVkKTsN Cgl4bWxfcGFyc2VyX2ZyZWUoJHhtbHBhcnNlcik7DQoNCglyZXR1cm4gJGZlZWRzOw0KfQ0K DQpmdW5jdGlvbiBzbWRfYXRfZmVlZF9zdGFydF90YWcoJHBhcnNlciwgJG5hbWUsICRhdHRy aWJzKSB7DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWc7DQoJaWYg KCRuYW1lID09ICJFTlRSWSIpIHsNCgkJJHNtZF9hdF9mZWVkaW4gPSB0cnVlOw0KCX0NCglp ZiAoJHNtZF9hdF9mZWVkaW4pIHsNCgkJJHNtZF9hdF9mZWVkdGFnID0gJG5hbWU7DQoJfQ0K fQ0KZnVuY3Rpb24gc21kX2F0X2ZlZWRfZW5kX3RhZygkcGFyc2VyLCAkbmFtZSkgew0KCWds b2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1l Ow0KCWlmICgkbmFtZSA9PSAiRU5UUlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gZmFsc2U7 DQoJCSRzbWRfYXRfZmVlZG5hbWUgPSAnJzsNCgl9DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9m ZWVkX3RhZ19jb250ZW50cygkcGFyc2VyLCAkZGF0YSkgew0KCWdsb2JhbCAkc21kX2F0X2Zl ZWRpbiwgJHNtZF9hdF9mZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1lLCAkZmVlZHM7DQoJaWYg KCRzbWRfYXRfZmVlZGluKSB7DQoJCWlmICgkc21kX2F0X2ZlZWR0YWcgPT0gIk5BTUUiKSB7 DQoJCQkkZmVlZHNbJGRhdGFdID0gJyc7DQoJCQkkc21kX2F0X2ZlZWRuYW1lID0gJGRhdGE7 DQoJCX0NCgkJaWYgKGlzc2V0KCRmZWVkc1skc21kX2F0X2ZlZWRuYW1lXSkpIHsNCgkJCWlm ICgkc21kX2F0X2ZlZWR0YWcgPT0gIlRJVExFIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIlNV TU1BUlkiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiVVBEQVRFRCIgfHwgJHNtZF9hdF9mZWVk dGFnID09ICJJRCIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJMSU5LIikgew0KCQkJCSRmZWVk c1skc21kX2F0X2ZlZWRuYW1lXVtzdHJ0b2xvd2VyKCRzbWRfYXRfZmVlZHRhZyldID0gJGRh dGE7DQoJCQl9DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gUmVtb3ZlIGhhcmQgc3BhY2VzIGluIHRoZSB1cGxvYWRfZm9ybSBzbyBPcGVyYSBhbmQg SUUgd3JhcCB0aGUgYnV0dG9ucw0KZnVuY3Rpb24gc21kX2F0X3VwbG9hZF9mb3JtKCRldmVu dCwgJHN0ZXAsICRkYXRhLCAkYXJncykgew0KCXJldHVybiBzdHJfcmVwbGFjZSgnJiMxNjA7 JywgJyAnLCAkZGF0YSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2VkaXQoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVu dDsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywg J2ZpbGUnKSkpKTsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbGF5 b3V0ID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNb J3NtZF9hdF9sYXlvdXQnXSA6IDE7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNz cyIsICJqcyIsICJwaHAiKTsNCgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAi Z2lmIiwgInBuZyIpOw0KCSRtYXhfZmlsZV9zaXplID0gMiAqIDEwMjQgKiAxMDI0Ow0KDQoJ JHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJGZpbGUgPSAoZW1wdHko JG5ld19za2luKSkgPyAkZmlsZSA6ICRuZXdfc2tpbjsNCgkkZmlsZXMgPSBzbWRfYXRfbGlz dGRpcihUSEVNRS4kc2tpbik7DQoJc29ydCgkZmlsZXMpOw0KDQoJLy8gU3BsaXQgdGhlIGxp c3QgaW50byBpdHMgZGlyZWN0b3J5IGdyb3Vwcw0KCSRhbGxmaWxlcyA9IGFycmF5KCk7DQoJ Zm9yZWFjaCAoJGZpbGVzIGFzICRjdXJyZmlsZSkgew0KCQkkZmlsZV9pbmZvID0gcGF0aGlu Zm8oJGN1cnJmaWxlKTsNCgkJLy8gSWdub3JlIGFueSByb2d1ZSBTdWJ2ZXJzaW9uIGZpbGVz DQoJCWlmIChzdHJwb3MoJGZpbGVfaW5mb1snZGlybmFtZSddLCAnLy5zdm4nKSA9PT0gZmFs c2UpIHsNCgkJCSRmaWxlX3R5cGUgPSAoaXNzZXQoJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10p KSA/ICRmaWxlX2luZm9bJ2V4dGVuc2lvbiddIDogJ290aGVyJzsNCgkJCSRhbGxmaWxlc1sk ZmlsZV90eXBlXVtdID0gJGN1cnJmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKGdwcygnc21kX2F0 X2VkaXRzJykpIHsNCgkJJGNvbnRlbnRzID0gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbics Jw0KJyxncHMoJ3NtZF9hdF9lZGl0cycpKSk7IC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCX0g ZWxzZSB7DQoJCSRjb250ZW50cyA9ICcnOw0KCQlpZiAoJGZpbGUgJiYgZmlsZV9leGlzdHMo VEhFTUUuJHNraW4uRFMuJGZpbGUpKSB7DQoJCQkkY29udGVudHMgPSBmaWxlKFRIRU1FLiRz a2luLkRTLiRmaWxlKTsNCgkJCSRjb250ZW50cyA9IGpvaW4oIiIsICRjb250ZW50cyk7DQoJ CX0NCgl9DQoNCgkvLyBCZWdpbiByZW5kZXJpbmcgdGhlIHBhZ2UNCglwYWdldG9wKHNtZF9h dF9nVHh0KCdlZGl0X2xibCcpLCRtZXNzYWdlKTsNCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUg dHlwZT0idGV4dC9jc3MiPg0KI3NtZF9hdF9pbWFnZXMgew0KCW1hcmdpbjowcHggNnB4IC00 cHggMDsNCn0NCi5zbWRfc2tpbl9maWxldHlwZXMgew0KCW1hcmdpbjoxMnB4IDA7DQp9DQo8 L3N0eWxlPg0KRU9TOw0KDQoJJHNraW5fbGlzdCA9IHNtZF9hdF9yZWFkX3NraW5zKCk7DQoN CgkvLyBzZWxlY3RJbnB1dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUg c2FtZSBpbiB0aGlzIGNhc2UNCgkkc2tpbnNlbCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkc2tp bl9saXN0IGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJHNraW5zZWxbJHZhbHVlMV0gPSAk c2tpbl9saXN0WyRrZXkxXTsNCiAgIH0NCgkkc2tpbkNoYW5nZSA9ICc8Zm9ybSBuYW1lPSJz a2luY2hhbmdlIiBhY3Rpb249ImluZGV4LnBocCI+Jw0KCQkuIGVJbnB1dCgkc21kX2F0X2V2 ZW50KQ0KCQkuIHNJbnB1dCgnc21kX2F0X2VkaXQnKQ0KCQkuIHNlbGVjdElucHV0KCdza2lu JywgJHNraW5zZWwsICRza2luLCAwLCAxKQ0KCQkuICc8L2Zvcm0+JzsNCg0KCSRmaWxlTGlz dCA9IGhlZChzbWRfYXRfZ1R4dCgnc2tpbl9maWxlcycpLDIpDQoJCS4gJHNraW5DaGFuZ2UN CgkJLiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnLCAnc21kX3NraW5fZmlsZXR5cGVzJyk7 DQoJJGZpbGVMaXN0IC49ICc8YnIgLz48YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50 PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9uZXdmaWxlJy5hLidza2luPScuJHNr aW4uJyI+Jy5zbWRfYXRfZ1R4dCgnbmV3X2ZpbGUnKS4nPC9hPic7DQoJJGZpbGVMaXN0IC49 ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+ Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dy aWQnKSkuJzwvYT48YnIgLz4nOw0KCSRvdGhlcnMgPSBhcnJheSgpOw0KDQoJZm9yZWFjaCAo JGVkaXRhYmxlIGFzICRmaWxldHlwZSkgew0KCQlpZiAoaXNzZXQoJGFsbGZpbGVzWyRmaWxl dHlwZV0pKSB7DQoJCQlmb3JlYWNoICgkYWxsZmlsZXNbJGZpbGV0eXBlXSBhcyAkaWR4ID0+ ICRjdXJyZmlsZSkgew0KCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJJGZpbGVMaXN0IC49 IHRyKHRkKGhlZChzbWRfYXRfZ1R4dCgkZmlsZXR5cGUpLDMpKSk7DQoJCQkJfQ0KCQkJCSRq dXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJJGJhc2VmaWxlID0gYXJyYXlf c2hpZnQoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCSRlZGl0ID0gJzxhIGhyZWY9 Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0n LiRza2luLmEuJ2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0ZmlsZSkg PyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJCSRkZWwgPSAo JGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9h dF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7DQoJCQkJ JGZpbGVMaXN0IC49IHRyKHRkKCRlZGl0KS50ZCgkZGVsKSk7DQoJCQl9DQoJCX0gZWxzZSB7 DQoJCQkvLyBTb21lIG90aGVyIGZpbGUgdHlwZQ0KCQkJaWYgKCEkb3RoZXJzKSB7DQoJCQkJ Zm9yZWFjaCAoJGFsbGZpbGVzIGFzICRmdHlwZSA9PiAkZmxzKSB7DQoJCQkJCWlmICghaW5f YXJyYXkoJGZ0eXBlLCBhcnJheV9tZXJnZSgkZWRpdGFibGUsICRpbWFnYWJsZSkpKSB7DQoJ CQkJCQlmb3JlYWNoICgkYWxsZmlsZXNbJGZ0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkg ew0KCQkJCQkJCSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJCQkJJGJh c2VmaWxlID0gYXJyYXlfc2hpZnQoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCQkJ CSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRf YXRfZWRpdCcuYS4nc2tpbj0nLiRza2luLmEuJ2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRm aWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwv YT4nOw0KCQkJCQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmso JHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwg J3NraW4nLCAkc2tpbik7DQoJCQkJCQkJJG90aGVyc1tdID0gdHIodGQoJGVkaXQpLnRkKCRk ZWwpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkkZmlsZUxp c3QgLj0gKCRvdGhlcnMpID8gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCdvdGhlcl9maWxlcycp LDMpKSkuIGpvaW4obiwgJG90aGVycykgOiAnJzsNCgkkZmlsZUxpc3QgLj0gZW5kVGFibGUo KTsNCg0KCS8vIE1ha2UgdGhlIGxpc3Qgb2YgaW1hZ2VzIGZvciB0aGlzIHNraW4NCgkkcXMg PSBhcnJheSgNCgkJImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LA0KCQkic3RlcCIgPT4gJ3Nt ZF9hdF9kZWxldGVfaW1hZ2UnLA0KCSk7DQoJJHNlbFtdID0gJzxmb3JtIG1ldGhvZD0icG9z dCIgaWQ9InNtZF9hdF9pbWFnZWZvcm0iIG5hbWU9InNtZF9hdF9pbWFnZWZvcm0iIGFjdGlv bj0iJy5qb2luX3FzKCRxcykuJyI+JzsNCgkkc2VsW10gPSAnPHNlbGVjdCBpZD0ic21kX2F0 X2ltYWdlcyIgbmFtZT0ic21kX2F0X2ltYWdlc1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iMjQi IG11bHRpcGxlPSJtdWx0aXBsZSIgc3R5bGU9IndpZHRoOjE1NHB4OyI+JzsNCg0KCWlmIChk ZWZpbmVkKCdHTE9CX0JSQUNFJykpIHsNCgkJJGltZyA9IGdsb2IoVEhFTUUuJHNraW4uRFMu J3sqLmpwZywqLmdpZiwqLnBuZ30nLCBHTE9CX0JSQUNFKTsNCgl9IGVsc2Ugew0KCQkkaW1n ID0gYXJyYXlfbWVyZ2UoZ2xvYihUSEVNRS4kc2tpbi5EUy4nKi5qcGcnKSxnbG9iKFRIRU1F LiRza2luLkRTLicqLmdpZicpLGdsb2IoVEhFTUUuJHNraW4uRFMuJyoucG5nJykpOw0KCX0N Cg0KCWlmKGlzX2FycmF5KCRpbWcpKSB7DQoJCWZvcmVhY2ggKCRpbWcgYXMgJGltZ2ZpbGUp IHsNCgkJCSRzZWxbXSA9IHQuJzxvcHRpb24gdmFsdWU9IicuJGltZ2ZpbGUuJyI+Jy5iYXNl bmFtZSgkaW1nZmlsZSkuJzwvb3B0aW9uPic7DQoJCX0NCgl9DQoJJHNlbFtdID0gJzwvc2Vs ZWN0Pic7DQoJJHNlbFtdID0gZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGVf aW1hZ2UnLCAnc2tpbicsICRza2luLCAxKTsNCgkkc2VsW10gPSAnPC9mb3JtPic7DQoJJHNl bCA9IGpvaW4oJycsJHNlbCk7DQoNCgkvLyBJbWFnZSBwb3J0aW9uDQoJJGltZ2JpdCA9IGhl ZChzbWRfYXRfZ1R4dCgnc2tpbl9pbWFnZXMnKSwgMikgLiBzdGFydFRhYmxlKCdsaXN0Jywg J2xlZnQnKTsNCgkkaW1nYml0IC49IHRyKHRkKCRzZWwpKTsNCgkkaW1nYml0IC49IHRyKHRk KHVwbG9hZF9mb3JtKHNtZF9hdF9nVHh0KCd1cGxvYWRfaW1hZ2UnKSwgJycsICdzbWRfYXRf dXBsb2FkX2ltYWdlJywgJHNtZF9hdF9ldmVudCwgJHNraW4sICRtYXhfZmlsZV9zaXplLCAn JywgJycpLCAxNTApKTsNCgkkaW1nYml0IC49IGVuZFRhYmxlKCk7DQoNCgkvLyBSZW5kZXIg dGhlIHJlc3Qgb2YgdGhlIHBhZ2UNCgllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKS4NCgl0cigN CgkJdGR0bCgkaW1nYml0KS4NCgkJdGQoDQoJCQloZWQoKCgkc2tpbmZvKSA/ICRza2luZm9b J2RuYW1lJ10gOiAkc2tpbiksMSkuDQoJCQlmb3JtKA0KCQkJCSc8aW5wdXQgdHlwZT0idGV4 dCIgbmFtZT0ibmV3X3NraW4iIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpLici IGNsYXNzPSJlZGl0IiBzaXplPSI0MCIgdGFiaW5kZXg9IjIiIHN0eWxlPSJtYXJnaW4tYm90 dG9tOjEwcHg7IiAvPicuYnINCgkJCQkuJzx0ZXh0YXJlYSBpZD0ic21kX2F0X2VkaXRzIiBj bGFzcz0iY29kZSIgbmFtZT0ic21kX2F0X2VkaXRzIiBjb2xzPSI3NiIgcm93cz0iMzIiPicu aHRtbHNwZWNpYWxjaGFycygkY29udGVudHMpLic8L3RleHRhcmVhPicuYnINCgkJCQkuZklu cHV0KCdzdWJtaXQnLCcnLGdUeHQoJ3NhdmUnKSwncHVibGlzaCcpDQoJCQkJLmVJbnB1dCgk c21kX2F0X2V2ZW50KS5zSW5wdXQoJ3NtZF9hdF9zYXZlJykNCgkJCQkuaElucHV0KCdza2lu Jywkc2tpbikNCgkJCQkuaElucHV0KCdmaWxlJywkZmlsZSkNCgkJCSkNCgkJKS4NCgkJdGR0 bCgkZmlsZUxpc3QpDQoJKS4NCgllbmRUYWJsZSgpOw0KDQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KLy8gSnVzdCBjbGVhciBvdXQgdGhlIHZhciBzbyB0aGUgc2F2ZSBm dW5jdGlvbiB0cmVhdHMgdGhlIGNvbnRlbnQgYXMgYSBuZXcgZmlsZQ0KZnVuY3Rpb24gc21k X2F0X25ld2ZpbGUoKSB7DQoJJF9QT1NUWydmaWxlJ10gPSAnJzsNCgkkbWVzc2FnZT0nJzsN CglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X2Nsb25lKCkgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoN CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICduZXdfc2tpbicpKSkpOw0K CSRtc2c9Jyc7DQoNCgkkbmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7DQoJJG5ld19za2lu ID0gcmF3dXJsZW5jb2RlKCRuZXdfc2tpbik7DQoNCglpZiAoZW1wdHkoJG5ld19za2luKSkg ew0KCQkkbXNnID0gc21kX2F0X2dUeHQoJ25hbWVfZW1wdHknKTsNCgl9DQoNCgkvLyBDaGVj ayB0aGUgbmV3IG5hbWUgaXNuJ3QgYWxyZWFkeSBpbiB1c2UNCgkkdGhlbWVzID0gc21kX2F0 X3JlYWRfc2tpbnMoKTsNCg0KCWlmIChpbl9hcnJheSgkbmV3X3NraW4sICR0aGVtZXMpKSB7 DQoJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9 PiAkbmV3X3NraW4pKTsNCgl9DQoNCgkvLyBObyBlcnJvcnMsIHNvIG1ha2UgYSBuZXcgZGly IGFuZCBjcmVhdGUgdGhlIFBIUCBmaWxlDQoJaWYgKCRtc2c9PScnKSB7DQoJCSRjb250ZW50 ID0gJyc7DQoJCSRkZXN0ZGlyID0gVEhFTUUuJG5ld19za2luLkRTOw0KCQkkcmVzID0gbWtk aXIoJGRlc3RkaXIpOw0KCQkkYmFzZWQgPSAnJzsNCg0KCQlpZiAoJHNraW4pIHsNCgkJCS8v IEJhc2VkIG9uIGFuIGV4aXN0aW5nIHRoZW1lLiBObyBuZWVkIGZvciBhbnkgZnVuY3Rpb25z IG90aGVyIHRoYW4gbWFuaWZlc3QoKQ0KCQkJJGJhc2VkID0gInRoZW1lOjpiYXNlZF9vbign Ii4kc2tpbi4iJyk7IjsNCgkJCSRleHRlbmRzID0gJHNraW4uJ190aGVtZSc7DQoJCQkkc3Jj c3MgPSBUSEVNRS4kc2tpbi5EUy4ndGV4dHBhdHRlcm4uY3NzJzsNCgkJCWlmIChmaWxlX2V4 aXN0cygkc3Jjc3MpICYmIGZpbGVzaXplKCRzcmNzcykgPiAwKSB7DQoJCQkJJGltcG9ydCA9 IGpvaW4oJycsIGZpbGUoJHNyY3NzKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRpbXBvcnQgPSAn QGltcG9ydCB1cmwoIi4uL2NsYXNzaWMvdGV4dHBhdHRlcm4uY3NzIik7JzsNCgkJCX0NCgkJ CSRjb250ZW50ID0gJ3snOw0KCQl9IGVsc2Ugew0KCQkJLy8gQnJhbmQgc3BhbmtpbmcgbmV3 IHRoZW1lLiBDbG9uZSAnY2xhc3NpYycgZnVuY3Rpb25zIHRoZW4gYWRkIG5ldyBtYW5pZmVz dCgpDQoJCQkkZXh0ZW5kcyA9ICd0aGVtZSc7DQoJCQkkaW1wb3J0ID0gJyc7DQoJCQkkc3Jj ID0gdHhwYXRoLkRTLlRIRU1FLidjbGFzc2ljJy5EUy4nY2xhc3NpYy5waHAnOw0KCQkJJGdy YWIgPSBmYWxzZTsNCgkJCSRmcCA9IGZpbGUoJHNyYyk7DQoNCgkJCWZvcmVhY2goJGZwIGFz ICRsaW5lKSB7DQoJCQkJJGxpbmUgPSBydHJpbSgkbGluZSk7DQoJCQkJaWYgKHN0cnBvcygk bGluZSwgJ2Z1bmN0aW9uIG1hbmlmZXN0KCknKSAhPT0gZmFsc2UpIHsNCgkJCQkJJGdyYWIg PSBmYWxzZTsgLy8gdW5uZWNlc3Nhcnk/DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZiAo JGdyYWIpIHsNCgkJCQkJJGNvbnRlbnQgLj0gJGxpbmUubjsNCgkJCQl9DQoJCQkJaWYgKHN0 cnBvcygkbGluZSwgJ2NsYXNzIGNsYXNzaWNfdGhlbWUgZXh0ZW5kcyB0aGVtZScpICE9PSBm YWxzZSkgew0KCQkJCQkkZ3JhYiA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJLy8g bWFuaWZlc3QgZmllbGRzDQoJCSRtYW51c2VyID0gZ2V0X2F1dGhvcl9uYW1lKCR0eHBfdXNl cik7DQoJCSRtYW50aXRsZSA9IHVjd29yZHMoJG5ld19za2luKTsNCg0KCQkvLyBXcml0ZSB0 aGUgbmV3IFBIUCBmaWxlDQoJCSRidWYgPSA8PDxFT0YNCjw/cGhwDQoNCmlmICghZGVmaW5l ZCgndHhwaW50ZXJmYWNlJykpIGRpZSgndHhwaW50ZXJmYWNlIGlzIHVuZGVmaW5lZC4nKTsN Cg0KeyRiYXNlZH0NCg0KY2xhc3MgeyRuZXdfc2tpbn1fdGhlbWUgZXh0ZW5kcyB7JGV4dGVu ZHN9DQp7JGNvbnRlbnR9DQoNCglmdW5jdGlvbiBtYW5pZmVzdCgpDQoJew0KCQlyZXR1cm4g YXJyYXkoDQoJCQkndGl0bGUnCSAJCT0+ICd7JG1hbnRpdGxlfScsDQoJCQknYXV0aG9yJyAJ CT0+ICd7JG1hbnVzZXJ9JywNCgkJCSdhdXRob3JfdXJpJyAJPT4gJycsDQoJCQkndmVyc2lv bicgCQk9PiAnMS4wJywNCgkJCSdkZXNjcmlwdGlvbicgCT0+ICcnLA0KCQkJJ2hlbHAnIAkJ CT0+ICcnLA0KCQkpOw0KCX0NCn0NCj8+DQpFT0Y7DQoNCgkJJGZwID0gZm9wZW4oJGRlc3Rk aXIuJG5ld19za2luLicucGhwJywgIndiIik7DQoJCWZ3cml0ZSgkZnAsICRidWYpOw0KCQlm Y2xvc2UoJGZwKTsNCg0KCQkvLyBDcmVhdGUgdGhlIENTUyBmaWxlDQoJCSRmcCA9IGZvcGVu KCRkZXN0ZGlyLid0ZXh0cGF0dGVybi5jc3MnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGlt cG9ydCk7DQoJCWZjbG9zZSgkZnApOw0KDQoJCWlmICgkc2tpbikgew0KCQkJJG1zZyA9IHNt ZF9hdF9nVHh0KCdza2luX2Nsb25lZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikp OzsNCgkJfSBlbHNlIHsNCgkJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9jcmVhdGVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0KCQl9DQoNCi8vCSRtc2cgPSBzbWRf YXRfZ1R4dCgnc2tpbl9ub3RfY3JlYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tp bikpOzsNCg0KCX0NCg0KCXNtZF9hdF9saXN0KCRtc2cpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9leHBvcnRfb3B0aW9ucygpIHsNCgkk c21kX2NydXNoZXJzID0gYXJyYXkoJ3RhcicgPT4gc21kX2F0X2dUeHQoJ2NfdGFyJykpOw0K CWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkgew0KCQkkc21kX2NydXNoZXJz WydnemlwJ10gPSBzbWRfYXRfZ1R4dCgnY19nemlwJyk7DQoJCSRzbWRfY3J1c2hlcnNbJ3pp cCddID0gc21kX2F0X2dUeHQoJ2NfemlwJyk7DQoJfQ0KCWlmIChmdW5jdGlvbl9leGlzdHMo J2J6Y29tcHJlc3MnKSkgew0KCQkkc21kX2NydXNoZXJzWydiemlwMiddID0gc21kX2F0X2dU eHQoJ2NfYnppcDInKTsNCgl9DQoJcmV0dXJuICRzbWRfY3J1c2hlcnM7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4cG9ydCgpIHsNCgln bG9iYWwgJHByZWZzLCAkc21kX2F0X3ByZWZzOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2Eo YXJyYXkoJ3NraW4nLCdjcnVzaCcpKSkpOw0KCSRtZXNzYWdlPScnOw0KCWNoZGlyKFRIRU1F KTsNCgkkb3V0ID0gJHNraW47DQoNCgkvLyBDaGVjayB0aGUgcGFzc2VkIGNvbXByZXNzaW9u IGZvcm1hdCBpcyB2YWxpZDsgdXNlIGRlZmF1bHQgaWYgbm90DQoJJGNydXNoZXJzID0gc21k X2F0X2V4cG9ydF9vcHRpb25zKCk7DQoJaWYgKCRjcnVzaD09JycgfHwgJGNydXNoPT0ndW5k ZWZpbmVkJyB8fCAhYXJyYXlfa2V5X2V4aXN0cygkY3J1c2gsICRjcnVzaGVycykpIHsNCgkJ JGNydXNoID0gZ2V0X3ByZWYoJ3NtZF9hdF9jcnVzaCcsICRzbWRfYXRfcHJlZnNbMF1bJ3Nt ZF9hdF9jcnVzaCddKTsNCgl9DQoNCglzd2l0Y2goJGNydXNoKSB7DQoJCWNhc2UgJ3ppcCc6 DQoJCQkkemlwID0gbmV3IHNtZF9hdF96aXBfZmlsZSgkb3V0LicuemlwJyk7DQoJCQlicmVh azsNCgkJY2FzZSAnYnppcDInOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfYnppcF9maWxlKCRv dXQuJy50YnoyJyk7DQoJCQlicmVhazsNCgkJY2FzZSAndGFyJzoNCgkJCSR6aXAgPSBuZXcg c21kX2F0X3Rhcl9maWxlKCRvdXQuJy50YXInKTsNCgkJCWJyZWFrOw0KCQljYXNlICdnemlw JzoNCgkJZGVmYXVsdDoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2d6aXBfZmlsZSgkb3V0Licu dGd6Jyk7DQogCQkJYnJlYWs7DQoJfQ0KDQoJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jh c2VkaXInID0+IHR4cGF0aC5EUy5USEVNRSwgJ292ZXJ3cml0ZScgPT4gMSwgJ2lubWVtb3J5 JyA9PiAxKSk7DQoJJHppcC0+YWRkX2ZpbGVzKCRza2luLkRTLicqLionKTsNCgkkemlwLT5l eGNsdWRlX2ZpbGVzKCRza2luLkRTLicqLnN2bionKTsNCgkkemlwLT5jcmVhdGVfYXJjaGl2 ZSgpOw0KCSR6aXAgLT5kb3dubG9hZF9maWxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2ltcG9ydCgpIHsNCglnbG9iYWwgJHByZWZz Ow0KDQoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmlsZSA9IGdl dF91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSwgdHhwYXRo LkRTLlRIRU1FLmJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOw0K CSRiYXNlZGlyID0gdHhwYXRoLkRTLlRIRU1FOw0KCSRtZXNzYWdlPScnOw0KCSRpbmZvID0g ZXhwbG9kZSAoJy4nLCRuYW1lKTsNCgkkZXh0ID0gJGluZm9bMV07DQoNCglpZiAoJG5hbWUg JiYgJGZpbGUpIHsNCgkJaWYgKCRleHQgPT0gInppcCIgJiYgZnVuY3Rpb25fZXhpc3RzKCd6 aXBfb3BlbicpKSB7DQoJCQkkemlwID0gemlwX29wZW4oJGZpbGUpOw0KCQkJaWYgKCR6aXAp IHsNCgkJCQkkZmlsZWN0ciA9IDA7DQoJCQkJd2hpbGUgKCR6aXBfZW50cnkgPSB6aXBfcmVh ZCgkemlwKSkgew0KCQkJCQkkZm4gPSB6aXBfZW50cnlfbmFtZSgkemlwX2VudHJ5KTsNCgkJ CQkJJGZpbGVwYXRoID0gJGJhc2VkaXIuJGZuOw0KCQkJCQlpZiAoc3RycG9zKCRmaWxlcGF0 aCwgJy4uJykgPT09IGZhbHNlKSB7DQoJCQkJCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRm aWxlcGF0aCk7DQoJCQkJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlcGF0aCkpIHsNCgkJCQkJ CQkkcmV0ID0gc21kX21rZGlyX3JlY3Vyc2l2ZSgoKGlzc2V0KCRwYXRoX3BhcnRzWydleHRl bnNpb24nXSkpID8gZGlybmFtZSgkZmlsZXBhdGgpIDogJGZpbGVwYXRoKSk7DQoJCQkJCQkJ aWYgKCRyZXQgPT09IGZhbHNlKSB7DQoJCQkJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQo J2ltcG9ydF9mYWlsZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpOw0KCQkJCQkJCX0N CgkJCQkJCX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQo J2ludmFsaWRfZmlsZScsIGFycmF5KCd7bmFtZX0nID0+ICRmbikpOw0KCQkJCQl9DQoNCgkJ CQkJaWYgKCRtZXNzYWdlPT0nJykgew0KCQkJCQkJaWYgKCFpc19kaXIoJGZuKSkgew0KCQkJ CQkJCSRmcCA9IGZvcGVuKCRiYXNlZGlyLiRmbiwgIndiIik7DQoJCQkJCQkJaWYgKHppcF9l bnRyeV9vcGVuKCR6aXAsICR6aXBfZW50cnksICJyIikpIHsNCgkJCQkJCQkJJGJ1ZiA9IHpp cF9lbnRyeV9yZWFkKCR6aXBfZW50cnksIHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5 KSk7DQoJCQkJCQkJCXppcF9lbnRyeV9jbG9zZSgkemlwX2VudHJ5KTsNCgkJCQkJCQl9DQoJ CQkJCQkJZndyaXRlKCRmcCwgJGJ1Zik7DQoJCQkJCQkJZmNsb3NlKCRmcCk7DQovLwkJCQkJ CQllY2hvICJUaGUgZmlsZSAiLiRmbi4iIHdhcyBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5XG48 YnI+IjsNCgkJCQkJCQkkZmlsZWN0cisrOw0KCQkJCQkJfQ0KCSAgICAgICAgICAgIH0NCgkJ CQl9DQoJCQkJemlwX2Nsb3NlKCR6aXApOw0KCQkJCWlmICgkbWVzc2FnZSA9PSAnJykgew0K CQkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfc3VjY2VzcycsIGFycmF5KCd7 bnVtfScgPT4gJGZpbGVjdHIpKTsNCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSBpZiAoJGV4dCA9 PSAidGd6Iikgew0KCQkJJHppcCA9IG5ldyBzbWRfYXRfZ3ppcF9maWxlKGJhc2VuYW1lKCRm aWxlKSk7DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2Vk aXIsICdvdmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRl eHQgPT0gInRiejIiKSB7DQoJCQkkemlwID0gbmV3IHNtZF9hdF9iemlwX2ZpbGUoYmFzZW5h bWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAk YmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygp Ow0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSBp ZiAoJGV4dCA9PSAidGFyIikgew0KCQkJJHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoYmFz ZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9 PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxl cygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxz ZSB7DQoJCQkkbWVzc2FnZSA9IGFycmF5KHNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9jb21w cmVzc2lvbnR5cGUnLCBhcnJheSgne2NydXNofScgPT4gJGV4dCkpLCBFX1dBUk5JTkcpOw0K CQl9DQoNCgkJLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZQ0KCQl1bmxpbmsoJGZpbGUp Ow0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsN Cgl9DQoNCglzbWRfYXRfbGlzdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3VwbG9hZF9pbWFnZSgpIHsNCglnbG9iYWwg JGZpbGVfbWF4X3VwbG9hZF9zaXplOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXko J2lkJykpKSk7DQoJJF9QT1NUWydza2luJ10gPSAkc2tpbiA9ICRpZDsNCg0KCSRuYW1lID0g JF9GSUxFU1sndGhlZmlsZSddWyduYW1lJ107DQoJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmls ZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOw0KCSRtZXNzYWdlPScnOw0KDQoJ aWYgKCRmaWxlID09PSBmYWxzZSkgew0KCQkkbWVzc2FnZSA9IGdUeHQoJ2ZpbGVfdXBsb2Fk X2ZhaWxlZCcpIC4iICRuYW1lIC0gIi51cGxvYWRfZ2V0X2Vycm9ybXNnKCRfRklMRVNbJ3Ro ZWZpbGUnXVsnZXJyb3InXSk7DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgl9DQoNCgkk c2l6ZSA9IGZpbGVzaXplKCRmaWxlKTsNCglpZiAoJGZpbGVfbWF4X3VwbG9hZF9zaXplIDwg JHNpemUpIHsNCgkJdW5saW5rKCRmaWxlKTsNCgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3Vw bG9hZF9mYWlsZWQnKSAuIiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1zZyhVUExPQURf RVJSX0ZPUk1fU0laRSk7DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgl9DQoNCgkkc2tp bmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsNCgkkbmV3X3NraW4gPSAkc2tpbmZv WyduYW1lJ107DQoJJG5ld3BhdGggPSAkc2tpbmZvWydwYXRoJ107DQoNCglpZiAoJG5ld19z a2luICYmICRmaWxlKSB7DQoJCWlmKHNoaWZ0X3VwbG9hZGVkX2ZpbGUoJGZpbGUsICRuZXdw YXRoLiRuYW1lKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndXBsb2FkX3N1Y2Nl c3MnKTsNCgkJfSBlbHNlIHsNCgkJCXVubGluaygkZmlsZSk7DQoJCQkkbWVzc2FnZSA9IHNt ZF9hdF9nVHh0KCd1cGxvYWRfZmFpbGVkJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkkbWVzc2Fn ZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJfQ0KDQoJc21kX2F0X2VkaXQoJG1l c3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNt ZF9hdF9kZWxldGVfaW1hZ2UoKSB7DQoJZ2xvYmFsICRzbWRfY29yZV90aGVtZXM7DQoNCgll eHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicpKSkpOw0KCSRmaWxlX2xpc3QgPSBn cHMoJ3NtZF9hdF9pbWFnZXMnKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmIChlbXB0eSgkZmls ZV9saXN0KSkgew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJ fSBlbHNlIHsNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0K CQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tz a2lufScgPT4gJHNraW4pKTsNCgkJfSBlbHNlIHsNCgkJCWZvcmVhY2ggKCRmaWxlX2xpc3Qg YXMgJGltYWdlKSB7DQoJCQkJJHBhdGggPSB0eHBhdGguRFMuJGltYWdlOw0KCQkJCXVubGlu aygkcGF0aCk7DQoJCQl9DQoJCX0NCgl9DQoNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0 ZSgpIHsNCglnbG9iYWwgJHNtZF9jb3JlX3RoZW1lcywgJHRoZW1lLCAkc21kX2F0X3ByaXZz LCAkc21kX2F0X2V2ZW50Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4n LCAnZmlsZScpKSkpOw0KCSRtZXNzYWdlPScnOw0KDQoJaWYgKCRmaWxlKSB7DQoJCS8vIEVk aXRpbmcgYSBza2luLCB0aHVzIGRlbGV0aW5nIGEgc2luZ2xlIGZpbGUNCgkJaWYgKGluX2Fy cmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJ CXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgkJfSBlbHNlIHsNCgkJCSRkZWwgPSB1bmxpbmso VEhFTUUuJHNraW4uRFMuJGZpbGUpOw0KCQkJaWYgKCRkZWwpIHsNCgkJCQkkbWVzc2FnZSA9 IGdUeHQoJ2ZpbGVfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJCQkJ JF9QT1NUWydmaWxlJ10gPSAnJzsgLy8gQ2xlYXIgdGhlIHZhcmlhYmxlIHNvIHRoZSBmaWxl bmFtZSBkb2Vzbid0IGFwcGVhciBvbiB0aGUgZWRpdCBwYWdlDQoJCQl9IGVsc2Ugew0KCQkJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ZpbGVfbm90X2RlbGV0ZWQnLCBhcnJheSgne25h bWV9JyA9PiAkZmlsZSkpOw0KCQkJfQ0KCQl9DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsN Cgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7 DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3RoZW1lJywgYXJyYXkoJ3tza2lu fScgPT4gJHNraW4pKTsNCgkJCXNtZF9hdF9saXN0KCRtZXNzYWdlKTsNCgkJfSBlbHNlIHsN CgkJCS8vIFZpZXdpbmcgdGhlIHNraW4gbGlzdCwgdGh1cyBkZWxldGluZyB0aGUgd2hvbGUg c2tpbg0KCQkJJHNraW5kaXIgPSBUSEVNRS4kc2tpbjsNCgkJCWlmICghc21kX3JtZGlyX3Jl Y3Vyc2l2ZSgkc2tpbmRpcikpIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdkZWxl dGVfZmFpbGVkJyk7DQoJCQl9IGVsc2Ugew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQo J3NraW5fZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRza2luKSk7DQoJCQl9DQoNCgkJ CS8vIEhhbmRsZSBzaXR1YXRpb25zIGlmIGN1cnJlbnQgc2tpbiBoYXMgYmVlbiBkZWxldGVk DQoJCQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kc2tpbikpIHsNCgkJCQkk YXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoNCgkJCQkvLyBSZXNldCB0aGUgZ2xv YmFsIHNraW4gaW4gY2FzZSBpdCdzIGJlZW4gZGVsZXRlZA0KCQkJCSRnYmxfc2tpbiA9IChp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSkgPyAkYXRfcHJlZnNbJ3Nt ZF9hdF9nbG9iYWxfc2tpbiddIDogJyc7DQoJCQkJJGdibF9za2luID0gKCRnYmxfc2tpbiAh PSAnJyAmJiBmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUuJGdibF9za2luKSkgPyAkZ2Js X3NraW4gOiAnY2xhc3NpYyc7DQoJCQkJc2V0X3ByZWYoJ3NtZF9hdF9nbG9iYWxfc2tpbics ICRnYmxfc2tpbiwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7 DQoJCQkJc2V0X3ByZWYoJ3RoZW1lX25hbWUnLCAkZ2JsX3NraW4pOw0KDQoJCQkJJHNraW4g PSBnZXRfcHJlZignc21kX3NraW4nKTsNCgkJCQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5E Uy5USEVNRS4kc2tpbikpIHsNCgkJCQkJJHNraW4gPSAkZ2JsX3NraW47DQoJCQkJfQ0KCQkJ CXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAnc21kX2F0JywgUFJFRl9ISURERU4sICd0 ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJCX0NCgkJCSRfR0VUWydza2luJ10g PSAkc2tpbjsNCgkJCSRfR0VUWyduZXh0c3RlcCddID0gJ3NtZF9hdF9saXN0JzsNCgkJCXNt ZF9hdF9zd2l0Y2goJG1lc3NhZ2UpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zYXZlKCkgew0KCWV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KCdza2luJywnbmV3X3NraW4nLCdmaWxlJywnc21kX2F0X2VkaXRzJykp KSk7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIsICJwaHAiKTsN CgkkbWVzc2FnZSA9ICRleHRyYU1zZyA9ICcnOw0KCSRmaWxlID0gdHJpbSgkZmlsZSk7DQoJ JG5ld19za2luID0gdHJpbSgkbmV3X3NraW4pOw0KCSRtc2dsZXYgPSAwOw0KDQoJLy8gTmV3 IGZpbGUNCglpZiAoISRmaWxlICYmICRuZXdfc2tpbikgew0KCQkkZmlsZSA9ICRuZXdfc2tp bjsNCgkJJGV4dCA9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGZpbGUpKTsNCgkJaWYgKHN0 cnRvbG93ZXIoJGZpbGUpICE9ICdyZWFkbWUnICYmICgkZXh0ID09ICcnIHx8ICFpbl9hcnJh eSgkZXh0LCAkZWRpdGFibGUpKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndW5z dXBwb3J0ZWRfZmlsZXR5cGUnKS5zbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZnVkZ2UnKTsN CgkJCSRtc2dsZXYgPSBFX1dBUk5JTkc7DQoJCQkkX1BPU1RbJ2ZpbGUnXSA9ICRmaWxlOw0K CQl9DQoJfQ0KDQoJaWYgKCRtZXNzYWdlPT0nJykgew0KCQkkc2tpbmRpciA9IFRIRU1FLiRz a2luLkRTOw0KDQoJCSRmbmFtZSA9IHNhbml0aXplRm9yRmlsZSgkZmlsZSk7DQoJCSRuZXdf c2tpbiA9IHJhd3VybGVuY29kZSgkbmV3X3NraW4pOw0KCQkkX1BPU1RbJ25ld19za2luJ10g PSAkbmV3X3NraW47DQoNCgkJJHNtZF9hdF9lZGl0cyA9IGRvU3RyaXAoc3RyX3JlcGxhY2Uo J1xyXG4nLCcNCicsJHNtZF9hdF9lZGl0cykpOyAvLyBuZXdsaW5lIHdvcmthcm91bmQNCg0K CQlpZiAoJGZuYW1lKSB7DQoJCQkkZmlsZXBhdGggPSAkc2tpbmRpci5EUzsNCgkJCWlmICgh ZmlsZV9leGlzdHMoJGZpbGVwYXRoLiRmbmFtZSkpIHsNCgkJCQkkcmV0ID0gdG91Y2goJGZp bGVwYXRoLiRmbmFtZSk7DQoJCQkJaWYgKCRyZXQgPT09IGZhbHNlKSB7DQoJCQkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ21rZGlyX2ZhaWxlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRm bmFtZSkpOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gQXNzdW1pbmcgbm8gZXJyb3JzIHNvIGZh ci4uLg0KCQkJaWYgKCRtZXNzYWdlID09ICcnKSB7DQoJCQkJJGZoID0gZm9wZW4oJGZpbGVw YXRoLiRmbmFtZSwgJ3diJyk7DQoJCQkJZndyaXRlKCRmaCwgJHNtZF9hdF9lZGl0cyk7DQoJ CQkJZmNsb3NlKCRmaCk7DQoNCgkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikgew0KCQkJ CQkkcmVzID0gcmVuYW1lKCRmaWxlcGF0aC4kZm5hbWUsICRmaWxlcGF0aC4kbmV3X3NraW4p Ow0KCQkJCQkkZXh0cmFNc2cgPSAoJHJlcykgPyBzbWRfYXRfZ1R4dCgncmVuYW1lZCcsIGFy cmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpIDogc21kX2F0X2dUeHQoJ3JlbmFtZV9mYWls ZWQnKTsNCgkJCQl9DQoNCgkJCQkvLyBQcm9jZXNzIGFueSBjc3MgcmVwbGFjZW1lbnRzDQoJ CQkJJGZpbGViaXRzID0gZXhwbG9kZSAoJy4nLCgoJGZuYW1lPT0kbmV3X3NraW4pPyAkZm5h bWUgOiAkbmV3X3NraW4pKTsNCgkJCQkkY3NzZmlsZSA9ICRmaWxlYml0c1swXTsNCgkJCQkk ZXh0ID0gYXJyYXlfcG9wKCRmaWxlYml0cyk7DQoJCQkJaWYgKCRleHQgPT0gJ3NzYycpIHsN CgkJCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5KCk7DQoJCQkJCSRudW1fcmVwMSA9IHByZWdf bWF0Y2hfYWxsKCcvKFxAW0EtWmEtejAtOV9dKyk6XHMqKC4qKTsvJywgJHNtZF9hdF9lZGl0 cywgJG1hdGNoZXMxKTsNCgkJCQkJJG51bV9yZXAyID0gcHJlZ19tYXRjaF9hbGwoJy8oXEBb QS1aYS16MC05X10rKTpccypceyguKj8pXH0vcycsICRzbWRfYXRfZWRpdHMsICRtYXRjaGVz Mik7DQoNCgkJCQkJLy8gU2ltcGxlIHJlcGxhY2VtZW50cw0KCQkJCQlmb3JlYWNoKCRtYXRj aGVzMSBhcyAkaWR4ID0+ICRyZXBhcnIpIHsNCgkJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJ CQkJCQkvLyBSZW1vdmUgdGhlIHZhciBkZWZpbml0aW9ucw0KCQkJCQkJCWZvcmVhY2ggKCRy ZXBhcnIgYXMgJHJlcCkgew0KCQkJCQkJCQkkc21kX2F0X2VkaXRzID0gc3RyX3JlcGxhY2Uo JHJlcCwgJycsJHNtZF9hdF9lZGl0cyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYg KCRpZHggPT0gMSkgew0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVw KSB7DQoJCQkJCQkJCSRyZXBsYWNlbWVudHNbJHJlcF0gPSAkbWF0Y2hlczFbMl1bJGpkeF07 DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gTXVsdGktbGluZSByZXBs YWNlbWVudHMNCgkJCQkJZm9yZWFjaCgkbWF0Y2hlczIgYXMgJGlkeCA9PiAkcmVwYXJyKSB7 DQoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7DQoJCQkJCQkJLy8gUmVtb3ZlIHRoZSB2YXIgZGVm aW5pdGlvbnMNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRyZXApIHsNCgkJCQkJCQkJ JHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNlKCRyZXAsICcnLCRzbWRfYXRfZWRpdHMpOw0K CQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmICgkaWR4ID09IDEpIHsNCgkJCQkJCQlmb3Jl YWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJlcCkgew0KCQkJCQkJCQkkcmVwbGFjZW1lbnRz WyRyZXAuJzsnXSA9IHRyaW0oJG1hdGNoZXMyWzJdWyRqZHhdKTsNCgkJCQkJCQl9DQoJCQkJ CQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBHZW5lcmF0ZSBhbmQgd3JpdGUgdGhlIG5ldyBjc3Mg ZmlsZQ0KCQkJCQkkc21kX2F0X2VkaXRzID0gdHJpbShzdHJ0cigkc21kX2F0X2VkaXRzLCAk cmVwbGFjZW1lbnRzKSk7DQoJCQkJCSRmaCA9IGZvcGVuKCRmaWxlcGF0aC4kY3NzZmlsZS4n LmNzcycsICd3YicpOw0KCQkJCQlmd3JpdGUoJGZoLCAkc21kX2F0X2VkaXRzKTsNCgkJCQkJ ZmNsb3NlKCRmaCk7DQoJCQkJCWlmICgkZm5hbWUgIT0gJG5ld19za2luKSB7DQoJCQkJCQkk b2xkZm5hbWUgPSBleHBsb2RlICgnLicsICRmbmFtZSk7DQoJCQkJCQkkb2xkZm5hbWUgPSAk b2xkZm5hbWVbMF0uJy5jc3MnOw0KCQkJCQkJJHJlcyA9IEB1bmxpbmsoJGZpbGVwYXRoLiRv bGRmbmFtZSk7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0 KCdmaWxlX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJGZuYW1lKSkuYnIuJGV4dHJhTXNn Ow0KCQkJfQ0KCQl9DQoJfQ0KCXNtZF9hdF9lZGl0KGFycmF5KCRtZXNzYWdlLCAkbXNnbGV2 KSk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQUkVGUw0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZ2V0X3ByZWZzKCkg ew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0KCSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9k ZSgiJywnIixhcnJheV9rZXlzKCRzbWRfYXRfcHJlZnNbMF0pKSk7DQoJJHJzID0gc2FmZV9y b3dzKCduYW1lLHZhbCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7 DQoJJGF0X3ByZWZzID0gYXJyYXkoKTsNCglmb3JlYWNoICgkcnMgYXMgJHByZWZhcnIpIHsN CgkJJGF0X3ByZWZzWyRwcmVmYXJyWyduYW1lJ11dID0gJHByZWZhcnJbJ3ZhbCddOw0KCX0N CglyZXR1cm4gJGF0X3ByZWZzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9hdF9vcHRpb25zKCRldmVudCwgJHN0ZXAsICRtZXNzYWdlPScnKSB7 DQoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfc2V0dXAoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwg JHByZWZzLCAkc21kX2F0X3ByZWZzLCAkc21kX2F0X2V2ZW50LCAkdGhlbWUsICRzbWRfY29y ZV90aGVtZXM7DQoNCgkkbnVtUmVxUHJlZnMgPSBjb3VudCgkc21kX2F0X3ByZWZzWzBdKTsN CgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoJJG51bVJvd3MgPSBjb3VudCgk YXRfcHJlZnMpOw0KDQoJcGFnZXRvcChnVHh0KCdwcmVmcycpLCRtZXNzYWdlKTsNCg0KCS8v IFl1aywgd2h5J3MgdGhpcyBub3QgYXZhaWxhYmxlIGdsb2JhbGx5PyENCgkkbGV2ZWxzID0g YXJyYXkoDQovLwkJMSA9PiBnVHh0KCdwdWJsaXNoZXInKSwNCgkJMiA9PiBnVHh0KCdtYW5h Z2luZ19lZGl0b3InKSwNCgkJMyA9PiBnVHh0KCdjb3B5X2VkaXRvcicpLA0KCQk0ID0+IGdU eHQoJ3N0YWZmX3dyaXRlcicpLA0KCQk1ID0+IGdUeHQoJ2ZyZWVsYW5jZXInKSwNCgkJNiA9 PiBnVHh0KCdkZXNpZ25lcicpLA0KCSk7DQoJJG51bUxldnMgPSBjb3VudCgkbGV2ZWxzKTsN Cg0KCS8vIFNwbGl0IHRoZSB1c2VyIHNraW4gbGlzdA0KCSR1c2tpbnMgPSBhcnJheSgpOw0K CWlmIChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpIHsNCgkJJHVza2lu cyA9IGV4cGxvZGUoJywnLCAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSk7DQoJfQ0K DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0 X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSRjbHJCdG4gPSAnIFs8c3BhbiBpZD0i c21kX2NsciIgY2xhc3M9InNtZF9mYWtlYnRuIj4nLnNtZF9hdF9nVHh0KCdjbGVhcicpLic8 L3NwYW4+XSc7DQoJJGJ0blNldCA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9h dF9nVHh0KCdzZXQnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9 ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4n JiMzODtzdGVwPXNtZF9hdF9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUi PicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlz aCcpLic8L2Zvcm0+JzsNCgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0 aW9uPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX3Jl bW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1p dCcsIGdUeHQoJ2RlbGV0ZScpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JzsNCgkkYnRuTGlz dCA9ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQu JyI+Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2lu X2dyaWQnKSkuJzwvYT48YnIgLz4nOw0KCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjow O2hlaWdodDoyNXB4Iic7DQoJJHJhZEJ0bnMgPSBhcnJheSgNCgkJc21kX2F0X2dUeHQoJ3Bl cl9zaXRlJyksDQoJCXNtZF9hdF9nVHh0KCdwZXJfZ3JvdXAnKSwNCgkJc21kX2F0X2dUeHQo J3Blcl91c2VyJyksDQoJKTsNCg0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWlmICgk bnVtUm93cyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZA0K CQkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCQkvLyBzZWxlY3RJbnB1 dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNh c2UNCgkJJHNraW5zZWwgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtl eTEgPT4gJHZhbHVlMSkgew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJHZhbHVlMSkpIHsNCgkJ CQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2luX2xpc3RbJGtleTFdOw0KCQkJfQ0KCQl9DQoJ CSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSAm JiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9wcmVmc1sn c21kX2F0X2dsb2JhbF9za2luJ10gOiAkdGhlbWUtPm5hbWU7DQoNCgkJZWNobyB0cih0ZGEo c3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpIC4g dGRhKCRidG5SZW1vdmUuJGJ0bkxpc3QsICRidG5TdHlsZSkgKTsNCgkJZWNobyAnPGZvcm0g bWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3Rl cD1zbWRfYXRfcHJlZnNfdXBkYXRlIiBvbnN1Ym1pdD0icmV0dXJuIHNtZF9wcmVzdWIoKTsi Pic7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjYXNlX3NvcnQnKSkudGRhKHllc25v UmFkaW8oJ3NtZF9hdF9jYXNlX3NvcnQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQn XSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9jYXNlX3NvcnQiJykpOw0KCQllY2hvIHRy KHRkYShzbWRfYXRfZ1R4dCgnY3J1c2hfdHlwZScpKS50ZGEocmFkaW9TZXQoc21kX2F0X2V4 cG9ydF9vcHRpb25zKCksICdzbWRfYXRfY3J1c2gnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jcnVz aCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2NydXNoIicpKTsNCgkJZWNobyB0cih0 ZGEoc21kX2F0X2dUeHQoJ2xheW91dCcpKS50ZGEocmFkaW9TZXQoYXJyYXkoc21kX2F0X2dU eHQoJ2xheW91dF9saXN0JyksIHNtZF9hdF9nVHh0KCdsYXlvdXRfZ3JpZCcpKSwgJ3NtZF9h dF9sYXlvdXQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSksICcgd2lkdGg9IjI0MCIg aWQ9InNtZF9hdF9sYXlvdXQiJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgndGh1 bWJzaXplJykpLnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX2F0X3R3JywgJGF0X3ByZWZzWydz bWRfYXRfdHcnXSwnJywnJywnJyw0KS5zbWRfYXRfZ1R4dCgndGltZXMnKS5mSW5wdXQoJ3Rl eHQnLCAnc21kX2F0X3RoJywgJGF0X3ByZWZzWydzbWRfYXRfdGgnXSwnJywnJywnJyw0KSkp Ow0KCQllY2hvIHRyKA0KCQkJdGQoc21kX2F0X2dUeHQoJ2dsb2JhbF9za2luJykpDQoJCQku dGQoc2VsZWN0SW5wdXQoJ3NtZF9hdF9nbG9iYWxfc2tpbicsICRza2luc2VsLCAkZ2JsX3Nr aW4sIDAsIDApKQ0KCQkpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnc2tpbl9zeXN0 ZW0nKSkudGRhKHJhZGlvU2V0KCRyYWRCdG5zLCAnc21kX2F0X3N5c3RlbScsICRhdF9wcmVm c1snc21kX2F0X3N5c3RlbSddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X3JhZGlvIicp KTsNCg0KCQkvLyBPcHRpb24gMQ0KCQkkcHJpdl9saXN0ID0gJzxzZWxlY3QgaWQ9InNtZF9h dF9wcml2cyIgbmFtZT0ic21kX2F0X3ByaXZzW10iIGNsYXNzPSJsaXN0IiBzaXplPSInLiRu dW1MZXZzLiciIG11bHRpcGxlPSJtdWx0aXBsZSI+JzsNCgkJZm9yZWFjaCAoJGxldmVscyBh cyAkbGV2aWQgPT4gJGxldm5hbWUpIHsNCgkJCSRwcml2X2xpc3QgLj0gJzxvcHRpb24gdmFs dWU9IicuJGxldmlkLiciPicuJGxldm5hbWUuJzwvb3B0aW9uPic7DQoJCX0NCgkJJHByaXZf bGlzdCAuPSAnPC9zZWxlY3Q+JzsNCg0KCQkvLyBOb3RlIHRoZSBoaWRkZW4gc2tpbiBncm91 cCBib3g7IGpRdWVyeSBrZWVwcyB0cmFjayBvZiBhbnkgbGlzdCBjaGFuZ2VzIGFuZCBrZWVw cyBpdCB1cGRhdGVkDQoJCSRzZWxhID0gc21kX2F0X2dUeHQoJ3NraW5fZ3JvdXBzJyk7DQoJ CSRzZWxiID0gaElucHV0KCdzbWRfYXRfZ3JvdXBfbGlzdCcsICRhdF9wcmVmc1snc21kX2F0 X2dyb3VwX2xpc3QnXSk7DQoJCSRzZWxiIC49ICc8c2VsZWN0IGlkPSJzbWRfYXRfZ3JwcyIg bmFtZT0ic21kX2F0X2dycHMiIGNsYXNzPSJsaXN0IiBzaXplPSInLiRudW1MZXZzLiciPic7 DQoJCWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJGFza2luKSB7DQoJCQlpZiAoc21kX2F0X2V4 aXN0cygkYXNraW4pKSB7DQoJCQkJJHNlbGIgLj0gJzxvcHRpb24gdmFsdWU9IicuJGFza2lu LiciPicuJGFza2luLic8L29wdGlvbj4nOw0KCQkJfQ0KCQl9DQoJCSRzZWxiIC49ICc8L3Nl bGVjdD4nOw0KCQllY2hvIHRyKHRkYSgkc2VsYSwgJyBjbGFzcz0ic21kX2F0X3NlbDEgc21k X2hpZGRlbiInKSAuIHRkYSgkc2VsYi4kcHJpdl9saXN0LCAnIHdpZHRoPSI0MDAiIGNsYXNz PSJzbWRfYXRfc2VsMSBzbWRfaGlkZGVuIicpKTsNCg0KCQkvLyBPcHRpb24gMg0KCQkkc2Vs YSA9IHNtZF9hdF9nVHh0KCdhbGxvd2VkX3NraW5zJyk7DQoJCSRzZWxiID0gJzxzZWxlY3Qg aWQ9InNtZF9hdF91c2VyX2xpc3QiIG5hbWU9InNtZF9hdF91c2VyX2xpc3RbXSIgY2xhc3M9 Imxpc3QiIHNpemU9IjgiIG11bHRpcGxlPSJtdWx0aXBsZSI+JzsNCgkJZm9yZWFjaCAoJHNr aW5fbGlzdCBhcyAkYXNraW4pIHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsN CgkJCQkkc2VsYiAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kYXNraW4uJyInLigoaW5fYXJyYXko JGFza2luLCAkdXNraW5zKSkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpLic+Jy4k YXNraW4uJzwvb3B0aW9uPic7DQoJCQl9DQoJCX0NCgkJJHNlbGIgLj0gJzwvc2VsZWN0Picu JGNsckJ0bjsNCgkJZWNobyB0cih0ZGEoJHNlbGEsICcgY2xhc3M9InNtZF9hdF9zZWwyIHNt ZF9oaWRkZW4iJykgLiB0ZGEoJHNlbGIsICcgd2lkdGg9IjI0MCIgY2xhc3M9InNtZF9hdF9z ZWwyIHNtZF9oaWRkZW4iJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxl KSk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KCX0gZWxzZSBpZiAoJG51bVJvd3MgPiAwICYmICRu dW1Sb3dzIDwgJG51bVJlcVByZWZzKSB7DQoJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfYXRf Z1R4dCgncHJlZnNfc29tZScpKS5ici5icg0KCQkJCQkJLnNtZF9hdF9nVHh0KCdwcmVmc19z b21lX2V4cGxhaW4nKS5ici5icg0KCQkJCQkJLnNtZF9hdF9nVHh0KCdwcmVmc19zb21lX29w dGlvbnMnKSwgJyBjb2xzcGFuPSIyIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0blJlbW92ZSwk YnRuU3R5bGUpIC4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9IGVsc2Ugew0K CQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgncHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNv bHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7 DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCg0KCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBl PSJ0ZXh0L2phdmFzY3JpcHQiPg0KDQovLyBDb25jYXRlbmF0ZSBjaGVja2JveCBvcHRpb25z IGZvciBzdG9yYWdlDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnN3YXAoc2VsVmFsdWUpIHsNCglm b3IgKGlkeD0wOyBpZHggPCAzOyBpZHgrKykgew0KCQlpZiAoaWR4PT1zZWxWYWx1ZSkgew0K CQkJalF1ZXJ5KCIuc21kX2F0X3NlbCIraWR4KS5zaG93KCk7DQoJCX0gZWxzZSB7DQoJCQlq UXVlcnkoIi5zbWRfYXRfc2VsIitpZHgpLmhpZGUoKTsNCgkJfQ0KCX0NCn0NCmpRdWVyeShm dW5jdGlvbigpIHsNCglqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9zeXN0ZW0nXSIpLmNo YW5nZShmdW5jdGlvbigpIHsNCgkJc21kX2F0X3ByZWZzd2FwKHRoaXMudmFsdWUpOw0KCX0p Ow0KDQoJalF1ZXJ5KCcjc21kX2NscicpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnko JyNzbWRfYXRfdXNlcl9saXN0IG9wdGlvbicpLmF0dHIoInNlbGVjdGVkIiwgIiIpOw0KCX0p Ow0KDQoJalF1ZXJ5KCIjc21kX2F0X2dycHMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNl bHNraW4gPSBqUXVlcnkodGhpcykudmFsKCk7DQoNCgkJLy8gQ2xlYXIgdGhlIG9sZCBwcml2 cyBsaXN0IGFuZCBncmFiIHRoZSBjdXJyZW50IGxpc3QgZnJvbSB0aGUgaGlkZGVuIGZpZWxk DQoJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb24iKS5hdHRyKCJzZWxlY3RlZCIsZmFs c2UpOw0KCQl2YXIgZ3JwbGlzdCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3Vw X2xpc3QnXSIpLnZhbCgpOw0KCQl2YXIgZ3JwcyA9IGdycGxpc3Quc3BsaXQoJywnKTsNCgkJ dmFyIGNudCA9IGdycHMubGVuZ3RoOw0KCQlmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjbnQ7 IGlkeCsrKSB7DQoJCQlwcml2cyA9IGdycHNbaWR4XS5zcGxpdCgnOicpOw0KCQkJc2tpbmlk ID0gcHJpdnMuc2hpZnQoKTsNCgkJCWlmIChza2luaWQgPT0gc2Vsc2tpbikgew0KCQkJCW51 bVByaXZzID0gcHJpdnMubGVuZ3RoOw0KCQkJCWZvciAoamR4ID0gMDsgamR4IDwgbnVtUHJp dnM7IGpkeCsrKSB7DQoJCQkJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb25bdmFsdWU9 JyIrcHJpdnNbamR4XSsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJCX0NCgkJ CX0NCgkJfQ0KCX0pOw0KDQoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIikuY2hhbmdlKGZ1bmN0 aW9uKCkgew0KCQlzZWxza2luID0galF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uOnNlbGVj dGVkIikudmFsKCk7DQoJCXZhciBvdXQgPSBbXTsNCgkJdmFyIHByaXZzID0gW107DQoJCXBy aXZzLnB1c2goc2Vsc2tpbik7DQoJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb246c2Vs ZWN0ZWQiKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJcHJpdnMucHVzaChqUXVlcnkodGhpcyku dmFsKCkpOw0KCQl9KTsNCgkJaWYgKHByaXZzLmxlbmd0aCA9PSAxKSB7DQoJCQlwcml2cy5w b3AoKTsNCgkJfSBlbHNlIHsNCgkJCW91dC5wdXNoKHByaXZzLmpvaW4oIjoiKSk7DQoJCX0N CgkJdmFyIGhpZGxpc3QgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0 J10iKS52YWwoKTsNCgkJdmFyIHByZXZsaXN0ID0gaGlkbGlzdC5zcGxpdCgnLCcpOw0KCQl2 YXIgcHJldmNudCA9IHByZXZsaXN0Lmxlbmd0aDsNCg0KCQlqUXVlcnkoIiNzbWRfYXRfZ3Jw cyBvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJY3VycnNraW4gPSBqUXVlcnkodGhp cykudmFsKCk7DQoJCQlpZiAoY3VycnNraW4gIT0gc2Vsc2tpbikgew0KCQkJCWZvciAodmFy IGlkeCA9IDA7IGlkeCA8IHByZXZjbnQ7IGlkeCsrKSB7DQoJCQkJCXByZXZwcml2cyA9IHBy ZXZsaXN0W2lkeF0uc3BsaXQoJzonKTsNCgkJCQkJc2tpbmlkID0gcHJldnByaXZzLnNoaWZ0 KCk7DQoJCQkJCS8vIEdlbmVyYXRlIHRoZSBwcml2IGxpc3QgZm9yIHRoZSBjdXJyZW50bHkg c2VsZWN0ZWQgc2tpbiwgcmVtb3ZpbmcgYW55IGR1cGxpY2F0ZSBwcml2cyBzZXQgZWxzZXdo ZXJlDQoJCQkJCWlmIChza2luaWQgPT0gY3VycnNraW4pIHsNCgkJCQkJCXRtcG91dCA9IFtd Ow0KCQkJCQkJdG1wb3V0LnB1c2goc2tpbmlkKTsNCgkJCQkJCWZvciAodGhpc3ByaXYgaW4g cHJldnByaXZzKSB7DQoJCQkJCQkJaWYgKGpRdWVyeS5pbkFycmF5KHByZXZwcml2c1t0aGlz cHJpdl0sIHByaXZzKSA8IDApIHsNCgkJCQkJCQkJdG1wb3V0LnB1c2gocHJldnByaXZzW3Ro aXNwcml2XSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKHRtcG91dC5sZW5ndGgg PiAxKSB7DQoJCQkJCQkJb3V0LnB1c2godG1wb3V0LmpvaW4oIjoiKSk7DQoJCQkJCQl9DQoJ CQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0pOw0KCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF9h dF9ncm91cF9saXN0J10iKS52YWwob3V0KTsNCgl9KTsNCg0KCS8vIERpc3BsYXkgYSB0b29s dGlwIHNob3dpbmcgdGhlIGN1cnJlbnRseS1hc3NpZ25lZCBza2luIHdoZW4gaG92ZXJpbmcg b3ZlciBhIHByaXZpbGVnZSBsZXZlbA0KCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb24i KS5ob3ZlcihmdW5jdGlvbigpIHsNCgkJaG92aXRlbSA9IGpRdWVyeSh0aGlzKS52YWwoKTsN CgkJZ3JwcyA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZh bCgpOw0KCQlpdGVtcyA9IGdycHMuc3BsaXQoIiwiKTsNCgkJZm9yIChpZHggPSAwOyBpZHgg PCBpdGVtcy5sZW5ndGg7IGlkeCsrKSB7DQoJCQlza2lueiA9IGl0ZW1zW2lkeF0uc3BsaXQo IjoiKTsNCgkJCWZvciAoamR4ID0gMTsgamR4IDwgc2tpbnoubGVuZ3RoOyBqZHgrKykgew0K CQkJCWlmIChza2lueltqZHhdID09IGhvdml0ZW0pIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLmF0 dHIoInRpdGxlIiwgc2tpbnpbMF0pOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCX0N Cgl9LA0KCWZ1bmN0aW9uKCkgew0KCQlqUXVlcnkodGhpcykuYXR0cigidGl0bGUiLCAiIik7 DQoJfSk7DQoJc21kX2F0X3ByZWZzd2FwKGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X3N5 c3RlbSddOmNoZWNrZWQiKS52YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIikuY2hh bmdlKCk7DQp9KTsNCjwvc2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRf ZmFrZWJ0biB7DQoJY29sb3I6IzU1NTsNCgljdXJzb3I6cG9pbnRlcjsNCn0NCiNzbWRfYXRf cmFkaW8gaW5wdXQgew0KCWZsb2F0OmxlZnQ7DQoJY2xlYXI6Ym90aDsNCn0NCiNzbWRfYXRf cmFkaW8gbGFiZWwgew0KCWZsb2F0OmxlZnQ7DQp9DQouc21kX2hpZGRlbiB7DQoJZGlzcGxh eTpub25lOw0KfQ0KPC9zdHlsZT4NCkVPSlM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gU3BsaXQgYSBtdWx0aS1jaGFyIHByZWZlcmVuY2UgdmFsdWUgaW50byBh biBhcnJheSBvZiBrZXlzL3ZhbHVlcy4NCi8vIE5vdGU6IHZhbHVlIGlzIHBhc3NlZCBpbiBh bmQgbm90IHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgcHJlZnMgYXJyYXkgaW4gdGhpcyBmdW5j dGlvbiAtIGludGVudGlvbmFsbHkNCmZ1bmN0aW9uIHNtZF9hdF9wcmVmX2V4cGxvZGUoJHZh bCkgew0KCSRvcmRlciA9IGFycmF5X3ZhbHVlcyhhcnJheShzbWRfYXRfZ1R4dCgnY19nemlw Jyksc21kX2F0X2dUeHQoJ2NfYnppcCcpLHNtZF9hdF9nVHh0KCdjX3ppcCcpKSk7DQoJJG9u b2ZmID0gYXJyYXlfdmFsdWVzKHByZWdfc3BsaXQoJy8vJywgJHZhbCwgLTEsIFBSRUdfU1BM SVRfTk9fRU1QVFkpKTsNCgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRvcmRlciBhcyAk a2V5MSA9PiAkdmFsdWUxKSB7DQoJCSRvdXRbKHN0cmluZykkdmFsdWUxXSA9ICRvbm9mZlsk a2V5MV07DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfYXRfcHJlZnNfaW5zdGFsbCgkc2hvd3BhbmU9JzEnKSB7DQoJZ2xvYmFsICRzbWRfYXRf cHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoICgkc21kX2F0X3ByZWZzWzBdIGFz ICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmICghZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCdu YW1lJywkcHJlZikpIHsNCgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCdwcmVm c19pZD0xLCBuYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkuJywgdmFsPScuZG9RdW90 ZShkb1NsYXNoKCRkZmx0KSkuJyxldmVudD0ic21kX2Fkc2tpbiInKTsNCgkJfQ0KCX0NCglp ZiAoJHNob3dwYW5lKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2luc3Rh bGxlZCcpOw0KCQlzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gc21kX2F0X3ByZWZzX3JlbW92ZSgkc2hvd3BhbmU9JzEnKSB7DQoJZ2xv YmFsICRzbWRfYXRfcHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoIChhcnJheV9t ZXJnZSgkc21kX2F0X3ByZWZzWzBdLCRzbWRfYXRfcHJlZnNbMV0pIGFzICRwcmVmID0+ICRk Zmx0KSB7DQoJCWlmIChmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkg ew0KCQkJJGlkID0gc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKGRv U2xhc2goJHByZWYpKSk7DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVzc2Fn ZSA9IHNtZF9hdF9nVHh0KCdwcmVmc19kZWxldGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVz c2FnZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfdXBk YXRlKCkgew0KCWdsb2JhbCAkc21kX3BsdWdpbl9wcmVmcywgJHNtZF9hdF9wcmVmcywgJHNt ZF9hdF9ldmVudDsNCg0KCSRtZXNzYWdlID0gJyc7DQoJJHBvc3QgPSBhcnJheSgpOw0KCSRw b3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSA9IGdwcygnc21kX2F0X2dsb2JhbF9za2luJyk7 DQoJJHBvc3RbJ3NtZF9hdF9zeXN0ZW0nXSA9IGdwcygnc21kX2F0X3N5c3RlbScpOw0KCSRw b3N0WydzbWRfYXRfbGF5b3V0J10gPSBncHMoJ3NtZF9hdF9sYXlvdXQnKTsNCgkkcG9zdFsn c21kX2F0X2Nhc2Vfc29ydCddID0gZ3BzKCdzbWRfYXRfY2FzZV9zb3J0Jyk7DQoJJHBvc3Rb J3NtZF9hdF90dyddID0gZ3BzKCdzbWRfYXRfdHcnKTsNCgkkcG9zdFsnc21kX2F0X3RoJ10g PSBncHMoJ3NtZF9hdF90aCcpOw0KCWlmIChncHMoJ3NtZF9hdF91c2VyX2xpc3QnKSkgew0K CQkkcG9zdFsnc21kX2F0X3VzZXJfbGlzdCddID0gam9pbignLCcsIGdwcygnc21kX2F0X3Vz ZXJfbGlzdCcpKTsNCgl9IGVsc2Ugew0KCQkkcG9zdFsnc21kX2F0X3VzZXJfbGlzdCddID0g Jyc7DQoJfQ0KCWlmIChncHMoJ3NtZF9hdF9ncm91cF9saXN0JykpIHsNCgkJJHBvc3RbJ3Nt ZF9hdF9ncm91cF9saXN0J10gPSBncHMoJ3NtZF9hdF9ncm91cF9saXN0Jyk7DQoJfQ0KCWlm IChncHMoJ3NtZF9hdF9jcnVzaCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfY3J1c2gnXSA9IGdw cygnc21kX2F0X2NydXNoJyk7DQoJfQ0KDQoJLy8gU2V0IHRoZSBzeXN0ZW0td2lkZSB0aGVt ZSB0byB0aGUgZ2xvYmFsIHRoZW1lDQoJaWYgKCRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4n XSkgew0KCQlzZXRfcHJlZigndGhlbWVfbmFtZScsICRwb3N0WydzbWRfYXRfZ2xvYmFsX3Nr aW4nXSk7DQoJfQ0KDQoJZm9yZWFjaCAoJHNtZF9hdF9wcmVmc1swXSBhcyAkcHJlZiA9PiAk ZGZsdCkgew0KCQlpZiAoaXNzZXQoJHBvc3RbJHByZWZdKSkgew0KCQkJc2V0X3ByZWYoJHBy ZWYsICRwb3N0WyRwcmVmXSwgJHNtZF9hdF9ldmVudCwgMik7DQoJCX0NCgl9DQoJJG1lc3Nh Z2UgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcpOw0KCXNtZF9hdF9zZXR1cCgkbWVzc2Fn ZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVVRJTElUWSBGVU5D VElPTlMNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dl dF9wcml2cygkdXNlcj0nJykgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoJJHVzZXIgPSAoJHVz ZXIpID8gJHVzZXIgOiAkdHhwX3VzZXI7DQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJpdnMi LCAidHhwX3VzZXJzIiwgIm5hbWU9JyIuZG9TbGFzaCgkdXNlcikuIiciKTsNCglyZXR1cm4g JHByaXZzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNt ZF9hdF9leGlzdHMoJG5hbWUpIHsNCgkkaW5zdGFuY2UgPSB0aGVtZTo6ZmFjdG9yeSgkbmFt ZSk7DQoJcmV0dXJuICRpbnN0YW5jZTsNCn0NCg0KLy8gSWYgcGVyLXVzZXIgc2tpbiBzdXBw b3J0IGlzIE9GRiwgdGhlIGdsb2JhbCBza2luIHdpbnMuDQovLyBPbmUgZXhjZXB0aW9uOiBp ZiB0aGUgdXNlciBpcyBhbiBhZG1pbiwgYWxsb3cgdGhlIGN1cnJlbnQgc2tpbiB0byBwcmV2 YWlsIHNvIHRoZXkgbWF5IHN3aXRjaCBza2lucyB3aXRoIGltcHVuaXR5DQovLyBhbmQgbm90 IGFmZmVjdCB0aGUgZ2xvYmFsIHNraW4NCmZ1bmN0aW9uIHNtZF9hdF9wZXIoKSB7DQoJZ2xv YmFsICRzbWRfYXRfcHJpdnMsICRwcmVmcywgJHRoZW1lLCAkdHhwX3VzZXI7DQoNCgkkYXRf cHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoJJHNraW5TeXMgPSBpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF9zeXN0ZW0nXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA6IDA7 DQoJJHByaXZzID0gc21kX2F0X2dldF9wcml2cygpOw0KCSRnYmxfc2tpbiA9IChpc3NldCgk YXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9n bG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10g OiAnJzsNCgkkZ2JsX3NraW4gPSAoc21kX2F0X2V4aXN0cygkZ2JsX3NraW4pKSA/ICRnYmxf c2tpbiA6ICdjbGFzc2ljJzsNCg0KCXN3aXRjaCAoJHNraW5TeXMpIHsNCgkJY2FzZSAwOg0K CQkJLy8gR2xvYmFsIGZvcmNlZCBza2luIChleGNlcHQgYWRtaW5zKQ0KCQkJaWYgKCFpbl9h cnJheSgkcHJpdnMsIGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsNCgkJCQlyZXR1 cm4gJGdibF9za2luOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3Nr aW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAk dGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkg PyAkYWRtX3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAxOg0K CQkJLy8gR3JvdXAtbGV2ZWwgZm9yY2VkIHNraW5zDQoJCQlpZiAoIWluX2FycmF5KCRwcml2 cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMpKSkgew0KCQkJCSRmb3JjZVNraW5zID0g KGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSkpID8gJGF0X3ByZWZzWydz bWRfYXRfZ3JvdXBfbGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1l LT5uYW1lKTsNCg0KCQkJCS8vIFNwbGl0IHRoZSBncm91cCBza2luIGxpc3QNCgkJCQkkZ3Nr aW5zID0gYXJyYXkoKTsNCgkJCQkkZ29wdHMgPSBleHBsb2RlKCcsJywgJGZvcmNlU2tpbnMp Ow0KCQkJCWZvcmVhY2ggKCRnb3B0cyBhcyAkZ3JwZGVmKSB7DQoJCQkJCWlmICgkZ3JwZGVm ID09ICcnKSBjb250aW51ZTsNCgkJCQkJJHByaXZncnAgPSBleHBsb2RlKCI6IiwgJGdycGRl Zik7DQoJCQkJCSRza2luaWQgPSBhcnJheV9zaGlmdCgkcHJpdmdycCk7DQoJCQkJCWlmIChp bl9hcnJheSgkcHJpdnMsICRwcml2Z3JwKSkgew0KCQkJCQkJcmV0dXJuIChzbWRfYXRfZXhp c3RzKCRza2luaWQpKSA/ICRza2luaWQgOiAnY2xhc3NpYyc7Ow0KCQkJCQl9DQoJCQkJfQ0K CQkJCXJldHVybiAoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZTsNCgkJ CX0gZWxzZSB7DQoJCQkJLy8gQWRtaW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3Nt ZF9za2luJywgKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJ CQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2Ns YXNzaWMnOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgMjoNCgkJCS8vIFBlci11c2VyIHNr aW4uIElmIHVzZXIgaXMgbm9uLWFkbWluLCBjaGVjayB0aGUgc2tpbiBpcyBpbiB0aGUgYWxs b3dlZCBsaXN0DQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRf YXRfcHJpdnMpKSkgew0KCQkJCSR2YWxpZFNraW5zID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X3VzZXJfbGlzdCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSA6ICgo JGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSk7DQoJCQkJJHZhbGlkU2tp bnMgPSBkb19saXN0KCR2YWxpZFNraW5zKTsNCgkJCQkkdGhlX3NraW4gPSBnZXRfcHJlZign c21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsN CgkJCQlyZXR1cm4gKGluX2FycmF5KCR0aGVfc2tpbiwgJHZhbGlkU2tpbnMpICYmIHNtZF9h dF9leGlzdHMoJHRoZV9za2luKSkgPyAkdGhlX3NraW4gOiAnJzsNCgkJCX0gZWxzZSB7DQoJ CQkJLy8gQWRtaW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgk Z2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChz bWRfYXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJ fQ0KCQkJYnJlYWs7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v IFJlYWQgYW5kIHJldHVybiB0aGUgbWFuaWZlc3QsIGlmIGl0IGV4aXN0cyBhbmQgYWRkIGEg ZmV3IG90aGVyIG5pY2V0aWVzIHRvIHRoZSBhcnJheSBmb3IgbGF0ZXINCmZ1bmN0aW9uIHNt ZF9hdF9yZWFkX3NraW5mbygkc2tpbikgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzOw0K DQoJJHRoaXNfdGhlbWUgPSB0aGVtZTo6ZmFjdG9yeSgkc2tpbik7DQoJJHNraW5mbyA9IGFy cmF5KCk7DQoJaWYgKCR0aGlzX3RoZW1lKSB7DQoJCSRza2luZm8gPSAkdGhpc190aGVtZS0+ bWFuaWZlc3QoKTsNCgkJJHNraW5mb1snZG5hbWUnXSA9IGVtcHR5KCRza2luZm9bJ3RpdGxl J10pID8gdWN3b3JkcygkdGhpc190aGVtZS0+bmFtZSkgOiAkc2tpbmZvWyd0aXRsZSddOw0K CQkkc2tpbmZvWyduYW1lJ10gPSAkdGhpc190aGVtZS0+bmFtZTsNCgkJJHNraW5mb1sncGF0 aCddID0gJHRoaXNfdGhlbWUtPnVybDsNCgkJJHNraW5mb1sncGhwZmlsZSddID0gJHRoaXNf dGhlbWUtPnBhdGgoJHNraW4pOw0KCQkkc2tpbmZvWydiYXNlZF9vbiddID0gJyc7DQoJCSRj b250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRza2luZm9bJ3BocGZpbGUnXSk7DQoJCWlm ICgoJHBvcyA9IHN0cnBvcygkY29udGVudHMsICd0aGVtZTo6YmFzZWRfb24nKSkgIT09IGZh bHNlKSB7DQoJCQkkYmVncG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkcG9zKSsxOw0K CQkJJGVuZHBvcyA9IHN0cnBvcygkY29udGVudHMsICInIiwgJGJlZ3Bvcyk7DQoJCQkkYmFz ZSA9IHN1YnN0cigkY29udGVudHMsICRiZWdwb3MsICRlbmRwb3MtJGJlZ3Bvcyk7DQoJCQkk c2tpbmZvWydiYXNlZF9vbiddID0gKGluX2FycmF5KCRiYXNlLCAkc21kX2NvcmVfdGhlbWVz KSkgPyAnJyA6ICRiYXNlOw0KCQl9DQoJCXVuc2V0KCR0aGlzX3RoZW1lKTsNCgl9DQoJcmV0 dXJuICRza2luZm87DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gR3Jh YiB0aGUgdGh1bWJuYWlsIGZpbGVuYW1lIGlmIGl0IGV4aXN0cywgb3B0aW9uYWxseSByZXR1 cm4gYSBmb3JtYXR0ZWQgaW1nIHRhZw0KZnVuY3Rpb24gc21kX2F0X2dldF90aHVtYigkc2tp biwgJGltZz0wKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoNCgkkYXRfcHJlZnMgPSBz bWRfYXRfZ2V0X3ByZWZzKCk7DQoJJHR3ID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcn XSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0 X3R3J107DQoJJHRoID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJl ZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ107DQoJJHVz ZV90aHVtYiA9ICgkdHcgPT0gMCB8fCAkdGggPT0gMCkgPyBmYWxzZSA6IHRydWU7DQoNCgkv LyBBbiBhcnJheSBtZWFucyB0aGUgbWFuaWZlc3QgaGFzIGFscmVhZHkgYmVlbiByZWFkIGFu ZCBpcyBiZWluZyBwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uDQoJaWYgKCFpc19hcnJheSgk c2tpbikpIHsNCgkJJHNraW4gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0KCX0NCglp ZiAoJHNraW4pIHsNCgkJJHNraW5kaXIgPSAkc2tpblsncGF0aCddOw0KCQkkdGh1bWJuYW1l ID0gZ2xvYigkc2tpbmRpci4nc2NyZWVuc2hvdC4qJyk7DQoJCXJldHVybiAoJGltZyAmJiAk dXNlX3RodW1iICYmICR0aHVtYm5hbWUgJiYgZmlsZV9leGlzdHMoJHRodW1ibmFtZVswXSkp ID8gJzxpbWcgc3JjPSInLiR0aHVtYm5hbWVbMF0uJyIgYWx0PSInLigoaXNzZXQoJHNraW5b J25hbWUnXSkpID8gJHNraW5bJ25hbWUnXSA6ICcnKS4nIHRodW1ibmFpbCIgc3R5bGU9ImJv cmRlcjoycHggcmlkZ2UgIzk5OTtwYWRkaW5nOjJweDsiIHdpZHRoPSInLiR0dy4nIiBoZWln aHQ9IicuJHRoLiciIC8+JyA6ICcnOw0KCX0gZWxzZSB7DQoJCXJldHVybiAnJzsNCgl9DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3JlYWRf c2tpbnMoKSB7DQoJJHNraW5fbGlzdCA9IHRoZW1lOjpuYW1lcygpOw0KCSRza2luX2xpc3Qg PSBzbWRfYXRfc29ydCgkc2tpbl9saXN0KTsNCglyZXR1cm4gJHNraW5fbGlzdDsNCn0NCg0K Ly8gU29ydCB0aGUgc2tpbnMgYnV0IGtlZXAgJ2NsYXNzaWMnIGF0IHRoZSB0b3ANCmZ1bmN0 aW9uIHNtZF9hdF9zb3J0KCRza2luX2xpc3QpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJGNh c2VTZW5zZSA9IGlzc2V0KCRwcmVmc1snc21kX2F0X2Nhc2Vfc29ydCddKSA/ICRwcmVmc1sn c21kX2F0X2Nhc2Vfc29ydCddIDogMTsNCg0KCWlmKCRjYXNlU2Vuc2UpIHsNCgkJbmF0c29y dCgkc2tpbl9saXN0KTsNCgl9IGVsc2Ugew0KCQluYXRjYXNlc29ydCgkc2tpbl9saXN0KTsN Cgl9DQoJJGRmbHRfZm91bmQgPSBmYWxzZTsNCglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRz a2luX2lkeCA9PiAkc2tpbl9uYW1lKSB7DQoJCWlmICgkc2tpbl9uYW1lID09ICJjbGFzc2lj Iikgew0KCQkJdW5zZXQoJHNraW5fbGlzdFskc2tpbl9pZHhdKTsNCgkJCSRkZmx0X2ZvdW5k ID0gdHJ1ZTsNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KCWlmICgkZGZsdF9mb3VuZCkgew0KCQlh cnJheV91bnNoaWZ0KCRza2luX2xpc3QsImNsYXNzaWMiKTsNCgl9DQoNCglyZXR1cm4gJHNr aW5fbGlzdDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfYXRfbGlzdGRpcigkc3RhcnRfZGlyPScuJykgew0KCSRmaWxlcyA9IGFycmF5KCk7DQoN CglpZiAoaXNfZGlyKCRzdGFydF9kaXIpKSB7DQoJCSRmaCA9IG9wZW5kaXIoJHN0YXJ0X2Rp cik7DQoJCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRmaCkpICE9PSBmYWxzZSkgew0KCQkJ Ly8gbG9vcCB0aHJvdWdoIHRoZSBmaWxlcywgc2tpcHBpbmcgLiBhbmQgLi4sIGFuZCByZWN1 cnNpbmcgaWYgbmVjZXNzYXJ5DQoJCQlpZiAoc3RyY21wKCRmaWxlLCAnLicpPT0wIHx8IHN0 cmNtcCgkZmlsZSwgJy4uJyk9PTApIGNvbnRpbnVlOw0KCQkJJGZpbGVwYXRoID0gJHN0YXJ0 X2RpciAuICcvJyAuICRmaWxlOw0KCQkJaWYgKCBpc19kaXIoJGZpbGVwYXRoKSApIHsNCgkJ CQkkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsIHNtZF9hdF9saXN0ZGlyKCRmaWxlcGF0 aCkpOw0KCQkJfSBlbHNlIHsNCgkJCQlhcnJheV9wdXNoKCRmaWxlcywgJGZpbGVwYXRoKTsN CgkJCX0NCgkJfQ0KCQljbG9zZWRpcigkZmgpOw0KCX0gZWxzZSB7DQoNCgkJLy8gZmFsc2Ug aWYgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG5vbi1kaXJlY3Rv cnkgYXJndW1lbnQNCgkJJGZpbGVzID0gZmFsc2U7DQoJfQ0KDQoJcmV0dXJuICRmaWxlczsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZWN1cnNpdmUgcm1kaXIo KSBjb3VydGVzeSBvZiB0aGUgcGhwIG1hbnVhbCB1c2VyIGNvbW1lbnRzDQpmdW5jdGlvbiBz bWRfcm1kaXJfcmVjdXJzaXZlKCRmaWxlcGF0aCkgew0KCWlmIChpc19kaXIoJGZpbGVwYXRo KSAmJiAhaXNfbGluaygkZmlsZXBhdGgpKSB7DQoJCWlmICgkZGggPSBvcGVuZGlyKCRmaWxl cGF0aCkpIHsNCgkJCXdoaWxlICgoJHNmID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsN CgkJCQlpZiAoJHNmID09ICcuJyB8fCAkc2YgPT0gJy4uJykgY29udGludWU7DQoJCQkJaWYg KCFzbWRfcm1kaXJfcmVjdXJzaXZlKCRmaWxlcGF0aC4nLycuJHNmKSkgew0KCQkJCQlicmVh azsgLy8gRG9oLCBjYW4ndCBkZWxldGUNCgkJCQl9DQoJCQl9DQoJCQljbG9zZWRpcigkZGgp Ow0KCQl9DQoJCXJldHVybiBybWRpcigkZmlsZXBhdGgpOw0KCX0NCglyZXR1cm4gdW5saW5r KCRmaWxlcGF0aCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRnJv bSBQSFAgbWFudWFsIGNvbW1lbnRzLiBUaGFua3MgcHVyZW1hbmdvDQpmdW5jdGlvbiBzbWRf YXRfaXNfZGlyKCRkaXIpIHsNCgkvLyBieXBhc3NlcyBvcGVuX2Jhc2VkaXIgcmVzdHJpY3Rp b25zIG9mIGlzX2RpciBhbmQgZmlsZXBlcm1zDQoJJHRtcF9jbWQgPSBgbHMgLWRsICRkaXJg Ow0KCSRkaXJfZmxhZyA9ICR0bXBfY21kWzBdOw0KCWlmKCRkaXJfZmxhZyE9ImQiKSB7DQoJ CS8vIG5vdCBkOyB1c2UgbmV4dCBjaGFyIChmaXJzdCBjaGFyIG1pZ2h0IGJlICdzJyBhbmQg aXMgc3RpbGwgZGlyZWN0b3J5KQ0KCQkkZGlyX2ZsYWcgPSAkdG1wX2NtZFsxXTsNCgl9DQoJ cmV0dXJuICgkZGlyX2ZsYWc9PSJkIik7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX21rZGlyX3JlY3Vyc2l2ZSgkcGF0aCwgJG1vZGUgPSAwNzU1 KSB7DQoJJHBhdGggPSAoc3RycG9zKCRwYXRoLCAnLycpID09PSAwKSA/IHN1YnN0cigkcGF0 aCwgMSkgOiAkcGF0aDsNCgkkZGlycyA9IGV4cGxvZGUoRFMsICRwYXRoKTsNCgkkY291bnQg PSBjb3VudCgkZGlycyk7DQoJJHBhdGggPSAnJzsNCglmb3IgKCRpZHggPSAwOyAkaWR4IDwg JGNvdW50OyArKyRpZHgpIHsNCgkJJHBhdGggLj0gRFMgLiAkZGlyc1skaWR4XTsNCgkJaWYg KCFzbWRfYXRfaXNfZGlyKCRwYXRoKSkgew0KCQkJaWYgKCFta2RpcigkcGF0aCwgJG1vZGUp KSB7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiB0cnVlOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jaGFu Z2VfcGFnZWJ5KCkgew0KCXNldGNvb2tpZSgnc21kX2F0X3BhZ2VieScsIGdwcygncXR5Jykp Ow0KCXNtZF9hdF9saXN0KCcnKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfc3dpdGNoKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRf YXRfcHJpdnM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICdldmVu dCcsICduZXh0c3RlcCcpKSkpOw0KCSR1cmwgPSAiP2V2ZW50PSIuJGV2ZW50LiImc3RlcD0i LiRuZXh0c3RlcDsNCg0KCWlmICgkc2tpbiAmJiBzbWRfYXRfZXhpc3RzKCRza2luKSkgew0K CQlzZXRfcHJlZignc21kX3NraW4nLCAkc2tpbiwgJGV2ZW50LCBQUkVGX0hJRERFTiwgJ3Rl eHRfaW5wdXQnLCAwLCBQUkVGX1BSSVZBVEUpOw0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4g KCgkbWVzc2FnZSkgPyAkbWVzc2FnZSA6IHNtZF9hdF9nVHh0KCdza2luX3N3aXRjaGVkJywg YXJyYXkoJ3tza2lufScgPT4gJHNraW4pKSk7DQoJfSBlbHNlIHsNCgkJJHVybCAuPSAnJm1l c3NhZ2U9JyAuICRtZXNzYWdlOw0KCX0NCg0KCS8vIFNpbmNlIHRoZSBoZWFkZXJzIGhhdmUg YmVlbiBzZW50LCBkb3VibGUtZGVjbHV0Y2ggaW4gb3JkZXIgdG8gc2hvdyB0aGUgc2tpbiB0 aGlzIGZpcnN0IHRpbWUNCgllY2hvIDw8PEVPUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiPg0Kd2luZG93LmxvY2F0aW9uLmhyZWY9InskdXJsfSI7DQo8L3NjcmlwdD4NCjxu b3NjcmlwdD4NCjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7dXJsPXsk dXJsfSIgLz4NCjwvbm9zY3JpcHQ+DQpFT1M7DQoJZXhpdDsNCn0NCg0KLy8gQWxsLXVzZXIg c2tpbiBjaG9vc2VyDQpmdW5jdGlvbiBzbWRfYWRtYXQoJGV2ZW50LCAkc3RlcCkgew0KCWlm KCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF9hdF9zd2l0Y2gn LA0KCQkpKSkgew0KCQlzbWRfYXRfY2hvb3NlcignJyk7DQoJfSBlbHNlICRzdGVwKCk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2Nob29z ZXIoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X2FkbV9ldmVudCwg JHRoZW1lOw0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRsYXlvdXQg PSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21k X2F0X2xheW91dCddIDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcn XSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0 X3R3J10pICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8g JGF0X3ByZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCdd KSArIDgwOw0KDQoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21l c3NhZ2UnKTsNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdza2lubmVyJyksJG1lc3NhZ2UpOw0K DQoJJGN1cnJfc2tpbiA9ICR0aGVtZS0+bmFtZTsNCg0KCSRhbGxvd2VkID0gJyc7DQoJaWYg KGlzc2V0KCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSkgew0KCQkkYWxsb3dlZCA9IGV4 cGxvZGUoIiwiLCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKTsNCgkJZm9yZWFjaCAoJGFs bG93ZWQgYXMgJGlkeCA9PiAkdmFsaWQpIHsNCgkJCWlmICgkdmFsaWQgPT0gJycpIHsNCgkJ CQl1bnNldCgkYWxsb3dlZFskaWR4XSk7DQoJCQl9DQoJCX0NCgl9DQoJJGFsbG93ZWQgPSBz bWRfYXRfc29ydCgkYWxsb3dlZCk7DQoJJGhkcm93ID0gaGVkKHNtZF9hdF9nVHh0KCdhdmFp bF90aXRsZScpLCAzKTsNCg0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyBzdGFydFRh YmxlKCdsaXN0Jyk7DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LCAnIGNvbHNwYW49IjMi JykNCgkJKTsNCgkJZWNobyB0cigNCgkJCWFzc0hlYWQoDQoJCQkJc21kX2F0X2dUeHQoJ3Nr aW5fZ2JsJyksDQoJCQkJJ2F1dGhvcicsDQoJCQkJJ2Rlc2NyaXB0aW9uJw0KCQkJKSk7DQoJ fSBlbHNlIHsNCgkJZWNobyA8PDxFT0NTUw0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5z bWRfZ3JpZCB7DQoJd2lkdGg6OTYwcHg7DQoJbWFyZ2luOjAgYXV0bzsNCn0NCi5zbWRfY2Vs bCB7DQoJZmxvYXQ6bGVmdDsNCglwYWRkaW5nOjEwcHg7DQoJbWFyZ2luOjEwcHg7DQoJYm9y ZGVyOjFweCByaWRnZSAjY2NjOw0KCXdpZHRoOnskdHd9cHg7DQoJaGVpZ2h0OnskdGh9cHg7 DQp9DQouc21kX2NlbGw6aG92ZXIgew0KCWJhY2tncm91bmQ6I2RkZDsNCn0NCi5zbWRfY2xl YXIgew0KCWNsZWFyOmJvdGg7DQp9DQouc21kX2F1dGggew0KCXRleHQtYWxpZ246Y2VudGVy Ow0KCW1hcmdpbjo1cHggMDsNCn0NCjwvc3R5bGU+DQpFT0NTUzsNCgkJZWNobyAnPGRpdiBj bGFzcz0ic21kX2dyaWQiPjxkaXYgY2xhc3M9InNtZF9uZXdyb3ciPicuJGhkcm93Lic8L2Rp dj4nOw0KCX0NCglmb3JlYWNoICgkYWxsb3dlZCBhcyAkc2tpbl9uYW1lKSB7DQoJCSRza2lu Zm8gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW5fbmFtZSk7DQoJCWlmICgkc2tpbmZvKSB7 DQoJCQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZvLCAxKTsNCgkJCSR0 aGlzX3NraW4gPSAoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/IHN0cm9uZygkc2tpbmZv WydkbmFtZSddKSA6ICRza2luZm9bJ2RuYW1lJ107DQoJCQkkdGh1bXJvdyA9ICc8YSBocmVm PSI/ZXZlbnQ9Jy4kc21kX2F0X2FkbV9ldmVudC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gnLmEu J25leHRzdGVwPXNtZF9hZG1hdCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgdGl0bGU9Iicu c21kX2F0X2dUeHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3NraW4uKCgkdGh1bWJuYWls KSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6ICcnKS4nPC9hPic7DQoJCQkkYXV0 aHJvdyA9IChzdHJwb3MoJHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAw KSA/ICc8YSBocmVmPSInLiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1 dGhvciddLic8L2E+JyA6ICRza2luZm9bJ2F1dGhvciddOw0KDQoJCQlpZiAoJGxheW91dD09 IjAiKSB7DQoJCQkJZWNobyB0cigNCgkJCQkJdGQoJHRodW1yb3cpDQoJCQkJCS50ZCgkYXV0 aHJvdywgMTAwKQ0KCQkJCQkudGQoJHNraW5mb1snZGVzY3JpcHRpb24nXSwgMjUwKQ0KCQkJ CQksICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9ImJhY2tncm91bmQ6 I2U4ZThlODsiJyA6ICcnKQ0KCQkJCSk7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gJzxkaXYg Y2xhc3M9InNtZF9jZWxsIicuKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHls ZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpLic+JzsNCgkJCQllY2hvICc8ZGl2Picu JHRodW1yb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgiPicu c21kX2F0X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwvZGl2Pic7DQoJCQkJZWNobyAnPC9kaXY+ JzsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gZW5kVGFi bGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwvZGl2 PjwvZGl2Pic7DQoJfQ0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAgQVJDSElWRSBDTEFT U0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdodCAoYykgMjAwNSBE ZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5jYQ0KICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwgRW1haWwg YnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRoaXMgc2NyaXB0 IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0aGUgR05VIEdQTCBh bmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25seSBpZiB0aGlzIGNv cHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQovLyBOT1RFOiBjbGFzcyBu YW1lcyBhbHRlcmVkIHRvIGFkZCBzbWRfYXRfIHByZWZpeCB0byBhdm9pZCBjbGFzaGVzIGlu IGdsb2JhbCBzY29wZSwgYW5kIGFkZGVkIHN1YmRpciBjcmVhdGlvbg0KDQpjbGFzcyBzbWRf YXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9hcmNoaXZlKCRuYW1lKQ0KCXsNCgkJ JHRoaXMtPm9wdGlvbnMgPSBhcnJheSAoDQoJCQknYmFzZWRpcicgPT4gIi4iLA0KCQkJJ25h bWUnID0+ICRuYW1lLA0KCQkJJ3ByZXBlbmQnID0+ICIiLA0KCQkJJ2lubWVtb3J5JyA9PiAw LA0KCQkJJ292ZXJ3cml0ZScgPT4gMCwNCgkJCSdyZWN1cnNlJyA9PiAxLA0KCQkJJ3N0b3Jl cGF0aHMnID0+IDEsDQoJCQknZm9sbG93bGlua3MnID0+IDAsDQoJCQknbGV2ZWwnID0+IDMs DQoJCQknbWV0aG9kJyA9PiAxLA0KCQkJJ3NmeCcgPT4gIiIsDQoJCQkndHlwZScgPT4gIiIs DQoJCQknY29tbWVudCcgPT4gIiINCgkJKTsNCgkJJHRoaXMtPmZpbGVzID0gYXJyYXkgKCk7 DQoJCSR0aGlzLT5leGNsdWRlID0gYXJyYXkgKCk7DQoJCSR0aGlzLT5zdG9yZW9ubHkgPSBh cnJheSAoKTsNCgkJJHRoaXMtPmVycm9yID0gYXJyYXkgKCk7DQoJfQ0KDQoJZnVuY3Rpb24g c2V0X29wdGlvbnMoJG9wdGlvbnMpDQoJew0KCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAka2V5 ID0+ICR2YWx1ZSkNCgkJCSR0aGlzLT5vcHRpb25zWyRrZXldID0gJHZhbHVlOw0KCQlpZiAo IWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKSkNCgkJew0KCQkJJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlv bnNbJ2Jhc2VkaXInXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19y ZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQkk dGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAk dGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+ b3B0aW9uc1snbmFtZSddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSA9IHN0 cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSk7DQoJCQkkdGhp cy0+b3B0aW9uc1snbmFtZSddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMt Pm9wdGlvbnNbJ25hbWUnXSk7DQoJCX0NCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNb J3ByZXBlbmQnXSkpDQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBzdHJf cmVwbGFjZSgiXFwiLCAiLyIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRo aXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL14oXC4qXC8rKSsvIiwg IiIsICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3By ZXBlbmQnXSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlzLT5vcHRpb25zWydw cmVwZW5kJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHByZWdfcmVwbGFj ZSgiL1wvJC8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSkgLiAiLyI7DQoJCX0N Cgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYXJjaGl2ZSgpDQoJew0KCQkkdGhpcy0+bWFrZV9s aXN0KCk7DQoNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJCXsN CgkJCSRwd2QgPSBnZXRjd2QoKTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGly J10pOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZpbGVf ZXhpc3RzKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIgPyAiLnRt cCIgOiAiIikpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkZpbGUgeyR0aGlzLT5v cHRpb25zWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJ CQkJcmV0dXJuIDA7DQoJCQl9DQoJCQllbHNlIGlmICgkdGhpcy0+YXJjaGl2ZSA9IEBmb3Bl bigkdGhpcy0+b3B0aW9uc1snbmFtZSddIC4gKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0g Imd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiID8gIi50bXAiIDog IiIpLCAid2IrIikpDQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRo aXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119 IGZvciB3cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9 DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSAiIjsNCg0KCQlzd2l0Y2ggKCR0 aGlzLT5vcHRpb25zWyd0eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlwIjoNCgkJCWlmICghJHRo aXMtPmNyZWF0ZV96aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBu b3QgY3JlYXRlIHppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlicmVhazsN CgkJY2FzZSAiYnppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFyKCkpDQoJCQl7DQoJ CQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4iOw0KCQkJ CXJldHVybiAwOw0KCQkJfQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX2J6aXAoKSkNCgkJCXsN CgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIGJ6aXAyIGZpbGUuIjsN CgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJnemlwIjoNCgkJCWlm ICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJD b3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlp ZiAoISR0aGlzLT5jcmVhdGVfZ3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0g IkNvdWxkIG5vdCBjcmVhdGUgZ3ppcCBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJ CQlicmVhazsNCgkJY2FzZSAidGFyIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkN CgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxl LiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNb J2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJZmNsb3NlKCR0aGlzLT5hcmNoaXZlKTsNCgkJ CWlmICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9u c1sndHlwZSddID09ICJiemlwIikNCgkJCQl1bmxpbmsoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSAuICIvIiAuICR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAiLnRtcCIpOw0KCQl9DQoJ fQ0KDQoJZnVuY3Rpb24gYWRkX2RhdGEoJGRhdGEpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlv bnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJCWZ3cml0ZSgkdGhpcy0+YXJjaGl2ZSwgJGRhdGEp Ow0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSAuPSAkZGF0YTsNCgl9DQoNCglmdW5jdGlv biBtYWtlX2xpc3QoKQ0KCXsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPmV4Y2x1ZGUpKQ0KCQkJ Zm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVhY2gg KCR0aGlzLT5leGNsdWRlIGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10g PT0gJGN1cnJlbnRbJ25hbWUnXSkNCgkJCQkJCXVuc2V0ICgkdGhpcy0+ZmlsZXNbJGtleV0p Ow0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+c3RvcmVvbmx5KSkNCgkJCWZvcmVhY2ggKCR0aGlz LT5maWxlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQlmb3JlYWNoICgkdGhpcy0+c3RvcmVv bmx5IGFzICRjdXJyZW50KQ0KCQkJCQlpZiAoJHZhbHVlWyduYW1lJ10gPT0gJGN1cnJlbnRb J25hbWUnXSkNCgkJCQkJCSR0aGlzLT5maWxlc1ska2V5XVsnbWV0aG9kJ10gPSAwOw0KCQl1 bnNldCAoJHRoaXMtPmV4Y2x1ZGUsICR0aGlzLT5zdG9yZW9ubHkpOw0KCX0NCg0KCWZ1bmN0 aW9uIGFkZF9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMo JGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5maWxl c1tdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gZXhjbHVkZV9maWxlcygkbGlzdCkN Cgl7DQoJCSR0ZW1wID0gJHRoaXMtPmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgk dGVtcCBhcyAkY3VycmVudCkNCgkJCSR0aGlzLT5leGNsdWRlW10gPSAkY3VycmVudDsNCgl9 DQoNCglmdW5jdGlvbiBzdG9yZV9maWxlcygkbGlzdCkNCgl7DQoJCSR0ZW1wID0gJHRoaXMt Pmxpc3RfZmlsZXMoJGxpc3QpOw0KCQlmb3JlYWNoICgkdGVtcCBhcyAkY3VycmVudCkNCgkJ CSR0aGlzLT5zdG9yZW9ubHlbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIGxpc3Rf ZmlsZXMoJGxpc3QpDQoJew0KCQlpZiAoIWlzX2FycmF5ICgkbGlzdCkpDQoJCXsNCgkJCSR0 ZW1wID0gJGxpc3Q7DQoJCQkkbGlzdCA9IGFycmF5ICgkdGVtcCk7DQoJCQl1bnNldCAoJHRl bXApOw0KCQl9DQoNCgkJJGZpbGVzID0gYXJyYXkgKCk7DQoNCgkJJHB3ZCA9IGdldGN3ZCgp Ow0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3JlYWNoICgk bGlzdCBhcyAkY3VycmVudCkNCgkJew0KCQkJJGN1cnJlbnQgPSBzdHJfcmVwbGFjZSgiXFwi LCAiLyIsICRjdXJyZW50KTsNCgkJCSRjdXJyZW50ID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIs ICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwg IiIsICRjdXJyZW50KTsNCgkJCWlmIChzdHJzdHIoJGN1cnJlbnQsICIqIikpDQoJCQl7DQoJ CQkJJHJlZ2V4ID0gcHJlZ19yZXBsYWNlKCIvKFtcXFxeXCRcLlxbXF1cfFwoXClcP1wrXHtc fVwvXSkvIiwgIlxcXFxcXDEiLCAkY3VycmVudCk7DQoJCQkJJHJlZ2V4ID0gc3RyX3JlcGxh Y2UoIioiLCAiLioiLCAkcmVnZXgpOw0KCQkJCSRkaXIgPSBzdHJzdHIoJGN1cnJlbnQsICIv IikgPyBzdWJzdHIoJGN1cnJlbnQsIDAsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikpIDogIi4i Ow0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZGlyKTsNCgkJCQlmb3JlYWNoICgk dGVtcCBhcyAkY3VycmVudDIpDQoJCQkJCWlmIChwcmVnX21hdGNoKCIvXnskcmVnZXh9JC9p IiwgJGN1cnJlbnQyWyduYW1lJ10pKQ0KCQkJCQkJJGZpbGVzW10gPSAkY3VycmVudDI7DQoJ CQkJdW5zZXQgKCRyZWdleCwgJGRpciwgJHRlbXAsICRjdXJyZW50KTsNCgkJCX0NCgkJCWVs c2UgaWYgKEBpc19kaXIoJGN1cnJlbnQpKQ0KCQkJew0KCQkJCSR0ZW1wID0gJHRoaXMtPnBh cnNlX2RpcigkY3VycmVudCk7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGZpbGUpDQoJCQkJ CSRmaWxlc1tdID0gJGZpbGU7DQoJCQkJdW5zZXQgKCR0ZW1wLCAkZmlsZSk7DQoJCQl9DQoJ CQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGN1cnJlbnQpKQ0KCQkJCSRmaWxlc1tdID0gYXJy YXkgKCduYW1lJyA9PiAkY3VycmVudCwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJl cGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMt Pm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkY3VycmVudCwgIi8iKSkg Pw0KCQkJCQlzdWJzdHIoJGN1cnJlbnQsIHN0cnJwb3MoJGN1cnJlbnQsICIvIikgKyAxKSA6 ICRjdXJyZW50KSwNCgkJCQkJJ3R5cGUnID0+IEBpc19saW5rKCRjdXJyZW50KSAmJiAkdGhp cy0+b3B0aW9uc1snZm9sbG93bGlua3MnXSA9PSAwID8gMiA6IDAsDQoJCQkJCSdleHQnID0+ IHN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVudCwgIi4iKSksICdzdGF0JyA9PiBz dGF0KCRjdXJyZW50KSk7DQoJCX0NCg0KCQljaGRpcigkcHdkKTsNCg0KCQl1bnNldCAoJGN1 cnJlbnQsICRwd2QpOw0KDQoJCXVzb3J0KCRmaWxlcywgYXJyYXkgKCJzbWRfYXRfYXJjaGl2 ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJZnVuY3Rp b24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydzdG9y ZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSskLyIsICRkaXJuYW1l KSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRkaXJuYW1lLCAnbmFt ZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXByZWdfcmVwbGFjZSgi LyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMCAm JiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRpcm5hbWUsIHN0cnJw b3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUnID0+IDUsICdzdGF0 JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMgPSBhcnJheSAoKTsN CgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAoJGZpbGUgPSBAcmVh ZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUgLiAiLyIgLiAkZmls ZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikNCgkJCQljb250aW51 ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsNCgkJCQlpZiAoZW1w dHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250aW51ZTsNCgkJCQkk dGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlmb3JlYWNoICgkdGVt cCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJfQ0KCQkJZWxzZSBp ZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10gPSBhcnJheSAoJ25h bWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCdd IC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9wdGlv bnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUsICIvIikpID8NCgkJ CQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIvIikgKyAxKSA6ICRm dWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5hbWUpICYmICR0aGlz LT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4dCcgPT4g c3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQoJGZ1 bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJcmV0dXJuICRmaWxl czsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7DQoJCWlmICgkYVsn dHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9PSA1IHx8ICRiWyd0 eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgkYVsndHlwZSddID09 IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQllbHNlIGlmICgkYVsn dHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUnXSks IHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsnZXh0J10gIT0gJGJb J2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydleHQnXSk7DQoJCWVs c2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJCXJldHVybiAkYVsn c3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxzZQ0KCQkJcmV0dXJu IHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWyduYW1lJ10p KTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRfZmlsZSgpDQoJew0K CQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHRoaXMt PmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBpZiBhcmNoaXZlIGlz IGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0IGlzIGZhc3Rlci4i Ow0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkN CgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0 aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaGVhZGVyKCJDb250 ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJn emlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWd6aXAiKTsN CgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFw cGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250ZW50LURpc3Bvc2l0 aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIgLj0gc3Ryc3RyKCR0 aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMtPm9wdGlvbnNbJ25h bWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpICsgMSkgOiAkdGhp cy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJCWhlYWRlcigkaGVh ZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkdGhpcy0+YXJj aGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeSIp Ow0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUs IG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAyMDAwIDEy OjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJfQ0KfQ0KDQpjbGFz cyBzbWRfYXRfdGFyX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9u IHNtZF9hdF90YXJfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfYXJjaGl2ZSgk bmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPSAidGFyIjsNCgl9DQoNCglmdW5j dGlvbiBjcmVhdGVfdGFyKCkNCgl7DQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRo aXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFz ICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+b3B0 aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KCQkJaWYgKHN0cmxlbigkY3VycmVudFsn bmFtZTInXSkgPiA5OSkNCgkJCXsNCgkJCQkkcGF0aCA9IHN1YnN0cigkY3VycmVudFsnbmFt ZTInXSwgMCwgc3RycG9zKCRjdXJyZW50WyduYW1lMiddLCAiLyIsIHN0cmxlbigkY3VycmVu dFsnbmFtZTInXSkgLSAxMDApICsgMSk7DQoJCQkJJGN1cnJlbnRbJ25hbWUyJ10gPSBzdWJz dHIoJGN1cnJlbnRbJ25hbWUyJ10sIHN0cmxlbigkcGF0aCkpOw0KCQkJCWlmIChzdHJsZW4o JHBhdGgpID4gMTU0IHx8IHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgPiA5OSkNCgkJCQl7 DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBhZGQgeyRwYXRofXskY3VycmVu dFsnbmFtZTInXX0gdG8gYXJjaGl2ZSBiZWNhdXNlIHRoZSBmaWxlbmFtZSBpcyB0b28gbG9u Zy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQl9DQoJCQkkYmxvY2sgPSBwYWNrKCJh MTAwYThhOGE4YTEyYTEyYThhMWExMDBhNmEyYTMyYTMyYThhOGExNTVhMTIiLCAkY3VycmVu dFsnbmFtZTInXSwgc3ByaW50ZigiJTA3byIsDQoJCQkJJGN1cnJlbnRbJ3N0YXQnXVsyXSks IHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzRdKSwgc3ByaW50ZigiJTA3byIs ICRjdXJyZW50WydzdGF0J11bNV0pLA0KCQkJCXNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRb J3R5cGUnXSA9PSAyID8gMCA6ICRjdXJyZW50WydzdGF0J11bN10pLCBzcHJpbnRmKCIlMDEx byIsICRjdXJyZW50WydzdGF0J11bOV0pLA0KCQkJCSIgICAgICAgICIsICRjdXJyZW50Wyd0 eXBlJ10sICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IEByZWFkbGluaygkY3VycmVudFsnbmFt ZSddKSA6ICIiLCAidXN0YXIgIiwgIiAiLA0KCQkJCSJVbmtub3duIiwgIlVua25vd24iLCAi IiwgIiIsICFlbXB0eSAoJHBhdGgpID8gJHBhdGggOiAiIiwgIiIpOw0KDQoJCQkkY2hlY2tz dW0gPSAwOw0KCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJCSRjaGVja3N1 bSArPSBvcmQoc3Vic3RyKCRibG9jaywgJGksIDEpKTsNCgkJCSRjaGVja3N1bSA9IHBhY2so ImE4Iiwgc3ByaW50ZigiJTA3byIsICRjaGVja3N1bSkpOw0KCQkJJGJsb2NrID0gc3Vic3Ry X3JlcGxhY2UoJGJsb2NrLCAkY2hlY2tzdW0sIDE0OCwgOCk7DQoNCgkJCWlmICgkY3VycmVu dFsndHlwZSddID09IDIgfHwgJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0KCQkJCSR0aGlz LT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50 WyduYW1lJ10sICJyYiIpKQ0KCQkJew0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0K CQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCRmcCwgMTA0ODU3NikpDQoJCQkJCSR0aGlzLT5h ZGRfZGF0YSgkdGVtcCk7DQoJCQkJaWYgKCRjdXJyZW50WydzdGF0J11bN10gJSA1MTIgPiAw KQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSAiIjsNCgkJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEy IC0gJGN1cnJlbnRbJ3N0YXQnXVs3XSAlIDUxMjsgJGkrKykNCgkJCQkJCSR0ZW1wIC49ICJc MCI7DQoJCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJfQ0KCQkJCWZjbG9zZSgk ZnApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBv cGVuIGZpbGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFk ZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEocGFjaygiYTEwMjQiLCAiIikpOw0K DQoJCWNoZGlyKCRwd2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIGV4dHJh Y3RfZmlsZXMoKQ0KCXsNCgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0 aW9uc1snYmFzZWRpciddKTsNCg0KCQlpZiAoJGZwID0gJHRoaXMtPm9wZW5fYXJjaGl2ZSgp KQ0KCQl7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMSkNCgkJCQkk dGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkJd2hpbGUgKCRibG9jayA9IGZyZWFkKCRm cCwgNTEyKSkNCgkJCXsNCgkJCQkkdGVtcCA9IHVucGFjaygiYTEwMG5hbWUvYThtb2RlL2E4 dWlkL2E4Z2lkL2ExMnNpemUvYTEybXRpbWUvYThjaGVja3N1bS9hMXR5cGUvYTEwMHN5bWxp bmsvYTZtYWdpYy9hMnRlbXAvYTMydGVtcC9hMzJ0ZW1wL2E4dGVtcC9hOHRlbXAvYTE1NXBy ZWZpeC9hMTJ0ZW1wIiwgJGJsb2NrKTsNCgkJCQkkZmlsZSA9IGFycmF5ICgNCgkJCQkJJ25h bWUnID0+ICR0ZW1wWydwcmVmaXgnXSAuICR0ZW1wWyduYW1lJ10sDQoJCQkJCSdzdGF0JyA9 PiBhcnJheSAoDQoJCQkJCQkyID0+ICR0ZW1wWydtb2RlJ10sDQoJCQkJCQk0ID0+IG9jdGRl YygkdGVtcFsndWlkJ10pLA0KCQkJCQkJNSA9PiBvY3RkZWMoJHRlbXBbJ2dpZCddKSwNCgkJ CQkJCTcgPT4gb2N0ZGVjKCR0ZW1wWydzaXplJ10pLA0KCQkJCQkJOSA9PiBvY3RkZWMoJHRl bXBbJ210aW1lJ10pLA0KCQkJCQkpLA0KCQkJCQknY2hlY2tzdW0nID0+IG9jdGRlYygkdGVt cFsnY2hlY2tzdW0nXSksDQoJCQkJCSd0eXBlJyA9PiAkdGVtcFsndHlwZSddLA0KCQkJCQkn bWFnaWMnID0+ICR0ZW1wWydtYWdpYyddLA0KCQkJCSk7DQoNCgkJCQlpZiAoJGZpbGVbJ2No ZWNrc3VtJ10gPT0gMHgwMDAwMDAwMCkNCgkJCQkJYnJlYWs7DQoJCQkJZWxzZSBpZiAoc3Vi c3RyKCRmaWxlWydtYWdpYyddLCAwLCA1KSAhPSAidXN0YXIiKQ0KCQkJCXsNCgkJCQkJJHRo aXMtPmVycm9yW10gPSAiVGhpcyBzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCBleHRyYWN0aW5n IHRoaXMgdHlwZSBvZiB0YXIgZmlsZS4iOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJJGJs b2NrID0gc3Vic3RyX3JlcGxhY2UoJGJsb2NrLCAiICAgICAgICAiLCAxNDgsIDgpOw0KCQkJ CSRjaGVja3N1bSA9IDA7DQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgNTEyOyAkaSsrKQ0KCQkJ CQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAxKSk7DQoJCQkJaWYgKCRm aWxlWydjaGVja3N1bSddICE9ICRjaGVja3N1bSkNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAi Q291bGQgbm90IGV4dHJhY3QgZnJvbSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0sIGl0IGlz IGNvcnJ1cHQuIjsNCg0KCQkJCS8vIEFkZGVkOiBjcmVhdGUgZGlyIGlmIHJlcXVpcmVkDQoJ CQkJaWYgKHN0cnBvcygkZmlsZVsnbmFtZSddLCAnLi4nKSA9PT0gZmFsc2UpIHsNCgkJCQkJ JHBhdGhfcGFydHMgPSBwYXRoaW5mbygkZmlsZVsnbmFtZSddKTsNCgkJCQkJaWYgKCFmaWxl X2V4aXN0cygkZmlsZVsnbmFtZSddKSkgew0KCQkJCQkJJHJldCA9IHNtZF9ta2Rpcl9yZWN1 cnNpdmUoKChpc3NldCgkcGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10pKSA/IGRpcm5hbWUoJHRo aXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFtZSddKSA6ICR0aGlzLT5vcHRp b25zWydiYXNlZGlyJ10uRFMuJGZpbGVbJ25hbWUnXSkpOw0KCQkJCQl9DQoJCQkJfQ0KDQoJ CQkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJCQkJew0KCQkJCQkk ZmlsZVsnZGF0YSddID0gZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKTsNCgkJCQkJZnJl YWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikgPT0gNTEyID8gMCA6ICg1 MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJCQkJCXVuc2V0ICgkZmlsZVsnY2hl Y2tzdW0nXSwgJGZpbGVbJ21hZ2ljJ10pOw0KCQkJCQkkdGhpcy0+ZmlsZXNbXSA9ICRmaWxl Ow0KCQkJCX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDUpDQoJCQkJew0KCQkJ CQlpZiAoIWlzX2RpcigkZmlsZVsnbmFtZSddKSkNCgkJCQkJCW1rZGlyKCRmaWxlWyduYW1l J10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgkdGhpcy0+b3B0 aW9uc1snb3ZlcndyaXRlJ10gPT0gMCAmJiBmaWxlX2V4aXN0cygkZmlsZVsnbmFtZSddKSkN CgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gInskZmlsZVsnbmFtZSddfSBhbHJlYWR5 IGV4aXN0cy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJGZpbGVb J3R5cGUnXSA9PSAyKQ0KCQkJCXsNCgkJCQkJc3ltbGluaygkdGVtcFsnc3ltbGluayddLCAk ZmlsZVsnbmFtZSddKTsNCgkJCQkJY2htb2QoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQn XVsyXSk7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRuZXcgPSBmb3BlbigkZmlsZVsnbmFtZSdd LCAid2IiKSkNCgkJCQl7DQoJCQkJCWZ3cml0ZSgkbmV3LCBmcmVhZCgkZnAsICRmaWxlWydz dGF0J11bN10pKTsNCgkJCQkJZnJlYWQoJGZwLCAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAl IDUxMikgPT0gNTEyID8gMCA6ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSk7DQoJ CQkJCWZjbG9zZSgkbmV3KTsNCgkJCQkJQGNobW9kKCRmaWxlWyduYW1lJ10sIDA2NDQpOyAv LyBIYXJkLWNvZGVkIGZvciBub3cgYmVjYXVzZSB0aGUgc3R1cGlkIDAxMDA2NDQgdmFsdWUg aW4gJGZpbGVbJ3N0YXQnXVsyXSBjb25mdXNlcyB0aGUgT1MvUEhQDQoJCQkJfQ0KCQkJCWVs c2UNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskZmls ZVsnbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJ Ly8gUmVtb3ZlIG93bmVyIGFuZCBncm91cCBzZXR0aW5nIHNpbmNlIHRoZXJlIGlzIGFsbW9z dCAwIGxpa2VsaWhvb2QgdGhlIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSB1c2VyL2dyb3Vw IGFjcm9zcyBzeXN0ZW1zDQoJCQkJLy8gSW4gb3RoZXIgd29yZHMsIGxlYXZlIG93bmVyL2dy b3VwIGF0IHRoZSBBcGFjaGUgZGVmYXVsdCAtLSB3aGljaCBpcyB3aGF0IHdlIHdhbnQNCi8v CQkJCWNob3duKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bNF0pOw0KLy8JCQkJY2hn cnAoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs1XSk7DQoJCQkJQHRvdWNoKCRmaWxl WyduYW1lJ10sICRmaWxlWydzdGF0J11bOV0pOw0KCQkJCXVuc2V0ICgkZmlsZSk7DQoJCQl9 DQoJCX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmls ZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0iOw0KDQoJCWNoZGlyKCRwd2QpOw0KCX0NCg0K CWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGZvcGVuKCR0aGlzLT5v cHRpb25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2d6aXBfZmls ZSBleHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9nemlwX2Zp bGUoJG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRo aXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJnemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVf Z3ppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJ ew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSk7DQoJCQlpZiAoJGZwID0gZ3pvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3 YnskdGhpcy0+b3B0aW9uc1snbGV2ZWwnXX0iKSkNCgkJCXsNCgkJCQlmc2VlaygkdGhpcy0+ YXJjaGl2ZSwgMCk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRoaXMtPmFyY2hpdmUs IDEwNDg1NzYpKQ0KCQkJCQlnendyaXRlKCRmcCwgJHRlbXApOw0KCQkJCWd6Y2xvc2UoJGZw KTsNCgkJCQljaGRpcigkcHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9y IHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJ fQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9IGd6ZW5jb2RlKCR0aGlzLT5hcmNoaXZl LCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZnVu Y3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAZ3pvcGVuKCR0aGlzLT5vcHRp b25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X2J6aXBfZmlsZSBl eHRlbmRzIHNtZF9hdF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF9iemlwX2ZpbGUo JG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRoaXMt Pm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfYnpp cCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0K CQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXIn XSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3YiIp KQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRl bXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWJ6d3JpdGUoJGZw LCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0K CQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHsk dGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2Qp Ow0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZl ID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10p Ow0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJew0K CQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAicmIiKTsNCgl9DQp9 DQoNCmNsYXNzIHNtZF9hdF96aXBfZmlsZSBleHRlbmRzIHNtZF9hdF9hcmNoaXZlDQp7DQoJ ZnVuY3Rpb24gc21kX2F0X3ppcF9maWxlKCRuYW1lKQ0KCXsNCgkJJHRoaXMtPnNtZF9hdF9h cmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJ6aXAiOw0KCX0N Cg0KCWZ1bmN0aW9uIGNyZWF0ZV96aXAoKQ0KCXsNCgkJJGZpbGVzID0gMDsNCgkJJG9mZnNl dCA9IDA7DQoJCSRjZW50cmFsID0gIiI7DQoNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlv bnNbJ3NmeCddKSkNCgkJCWlmICgkZnAgPSBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ3NmeCdd LCAicmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwgZmlsZXNpemUoJHRoaXMt Pm9wdGlvbnNbJ3NmeCddKSk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJHRoaXMtPmFkZF9k YXRhKCR0ZW1wKTsNCgkJCQkkb2Zmc2V0ICs9IHN0cmxlbigkdGVtcCk7DQoJCQkJdW5zZXQg KCR0ZW1wKTsNCgkJCX0NCgkJCWVsc2UNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBu b3Qgb3BlbiBzZnggbW9kdWxlIGZyb20geyR0aGlzLT5vcHRpb25zWydzZngnXX0uIjsNCg0K CQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10p Ow0KDQoJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0KCQkJaWYg KCRjdXJyZW50WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJCQljb250 aW51ZTsNCg0KCQkJJHRpbWVkYXRlID0gZXhwbG9kZSgiICIsIGRhdGUoIlkgbiBqIEcgaSBz IiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSkpOw0KCQkJJHRpbWVkYXRlID0gKCR0aW1lZGF0ZVsw XSAtIDE5ODAgPDwgMjUpIHwgKCR0aW1lZGF0ZVsxXSA8PCAyMSkgfCAoJHRpbWVkYXRlWzJd IDw8IDE2KSB8DQoJCQkJKCR0aW1lZGF0ZVszXSA8PCAxMSkgfCAoJHRpbWVkYXRlWzRdIDw8 IDUpIHwgKCR0aW1lZGF0ZVs1XSk7DQoNCgkJCSRibG9jayA9IHBhY2soIlZ2dnZWIiwgMHgw NDAzNGI1MCwgMHgwMDBBLCAweDAwMDAsIChpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8 ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRp bWVkYXRlKTsNCg0KCQkJaWYgKCRjdXJyZW50WydzdGF0J11bN10gPT0gMCAmJiAkY3VycmVu dFsndHlwZSddID09IDUpDQoJCQl7DQoJCQkJJGJsb2NrIC49IHBhY2soIlZWVnZ2IiwgMHgw MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1l MiddKSArIDEsIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddIC4g Ii8iOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSRjZW50cmFsIC49IHBh Y2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAwMTQsICR0aGlzLT5vcHRp b25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAweDAwMDAsDQoJCQkJCShp c3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9 PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkweDAwMDAwMDAwLCAw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgMSwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3VycmVudFsndHlwZSddID09IDUg PyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0g JGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCAr PSAoMzEgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsNCgkJCX0NCgkJCWVsc2UgaWYg KCRjdXJyZW50WydzdGF0J11bN10gPT0gMCkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygi VlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1 cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFt ZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkY2VudHJhbCAuPSBw YWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0 aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQko aXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10g PT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1lZGF0ZSwNCgkJCQkJMHgwMDAwMDAwMCwg MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3VycmVudFsndHlwZSddID09IDUgPyAw eDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1 cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsNCgkJCX0NCgkJCWVsc2UgaWYgKCRmcCA9IEBm b3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFk KCRmcCwgJGN1cnJlbnRbJ3N0YXQnXVs3XSk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJGNy YzMyID0gY3JjMzIoJHRlbXApOw0KCQkJCWlmICghaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCdd KSAmJiAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMSkNCgkJCQl7DQoJCQkJCSR0ZW1w ID0gZ3pjb21wcmVzcygkdGVtcCwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10pOw0KCQkJCQkk c2l6ZSA9IHN0cmxlbigkdGVtcCkgLSA2Ow0KCQkJCQkkdGVtcCA9IHN1YnN0cigkdGVtcCwg MiwgJHNpemUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1w KTsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAkY3JjMzIsICRzaXplLCAkY3VycmVu dFsnc3RhdCddWzddLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJ CSRibG9jayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJs b2NrKTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCXVuc2V0ICgkdGVtcCk7 DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAs IDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAw MEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMt Pm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUs DQoJCQkJCSRjcmMzMiwgJHNpemUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3Vy cmVudFsnbmFtZTInXSksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw MDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJ CQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25h bWUyJ10pICsgJHNpemUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0g IkNvdWxkIG5vdCBvcGVuIGZpbGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJ dCB3YXMgbm90IGFkZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEoJGNlbnRyYWwp Ow0KDQoJCSR0aGlzLT5hZGRfZGF0YShwYWNrKCJWdnZ2dlZWdiIsIDB4MDYwNTRiNTAsIDB4 MDAwMCwgMHgwMDAwLCAkZmlsZXMsICRmaWxlcywgc3RybGVuKCRjZW50cmFsKSwgJG9mZnNl dCwNCgkJCSFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkgPyBzdHJsZW4oJHRo aXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkgOiAweDAwMDApKTsNCg0KCQlpZiAoIWVtcHR5ICgk dGhpcy0+b3B0aW9uc1snY29tbWVudCddKSkNCgkJCSR0aGlzLT5hZGRfZGF0YSgkdGhpcy0+ b3B0aW9uc1snY29tbWVudCddKTsNCg0KCQljaGRpcigkcHdkKTsNCg0KCQlyZXR1cm4gMTsN Cgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUGx1Z2luLXNwZWNp ZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyByZXF1aXJlZA0KZnVuY3Rp b24gc21kX2F0X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJy YXkoDQoJCSdhY3Rpb25zJyA9PiAnQWN0aW9ucycsDQoJCSdhbGxvd2VkX3NraW5zJyA9PiAn QWxsb3dlZCB0aGVtZXM6JywNCgkJJ2FwcGx5X3NraW4nID0+ICdBcHBseSB0aGlzIHRoZW1l JywNCgkJJ2F2YWlsX3RpdGxlJyA9PiAnQXZhaWxhYmxlIHRoZW1lcycsDQoJCSdiYXNlZF9v bicgPT4gJyAoYmFzZWQgb24ge3NraW59KScsDQoJCSdieScgPT4gJyBieSAnLA0KCQknY19i emlwMicgPT4gJ0JaaXAnLA0KCQknY19nemlwJyA9PiAnR1ppcCcsDQoJCSdjX3RhcicgPT4g J1RhcicsDQoJCSdjX3ppcCcgPT4gJ1ppcCcsDQoJCSdjYXNlX3NvcnQnID0+ICdDYXNlLXNl bnNpdGl2ZSB0aGVtZSBsaXN0OicsDQoJCSdjbGVhcicgPT4gJ25vbmUnLA0KCQknY2xvbmUn ID0+ICdCYXNlJywNCgkJJ2NvbmZpcm0nID0+ICdHbycsDQoJCSdjb3JlX3RoZW1lJyA9PiAn Q2Fubm90IGRlbGV0ZSB7c2tpbn06IGNvcmUgdGhlbWUnLA0KCQknY29yZV90aGVtZV9maWxl JyA9PiAnQ2Fubm90IGRlbGV0ZSBmaWxlcyBmcm9tIHtza2lufTogY29yZSB0aGVtZScsDQoJ CSdjcnVzaF90eXBlJyA9PiAnRXhwb3J0IGNvbXByZXNzaW9uIHR5cGU6JywNCgkJJ2NydXNo X2Zvcm1hdCcgPT4gJ0Zvcm1hdDonLA0KCQknc3NjJyA9PiAnU3R5bGVwbGF0ZXMnLA0KCQkn Y3NzJyA9PiAnU3R5bGVzJywNCgkJJ2RlbGV0ZV9jb25maXJtJyA9PiAnUmVhbGx5IGRlbGV0 ZSB0aGVtZSB7c2tpbn0/JywNCgkJJ2RlbGV0ZV9mYWlsZWQnID0+ICdEZWxldGUgZmFpbGVk LiBUcnkgcmVtb3ZpbmcgaXQgbWFudWFsbHknLA0KCQknZWRpdF9sYmwnID0+ICdUaGVtZSBl ZGl0b3InLA0KCQknZW1wdHlfaW5mbycgPT4gJ1lvdSBzaG91bGQgY2hvb3NlIGEgZmlsZSBm aXJzdCA6LSknLA0KCQknZXhwb3J0JyA9PiAnRXhwb3J0JywNCgkJJ2ZpbGVfbm90X2RlbGV0 ZWQnID0+ICdGaWxlIHtuYW1lfSAnLnN0cm9uZygibm90IikuJyBkZWxldGVkJywNCgkJJ2Zp bGVfc2F2ZWQnID0+ICdGaWxlIHtuYW1lfSBzYXZlZCcsDQoJCSdmaW5kX3RoZW1lJyA9PiAn QnJvd3NlIHRoZW1lcycsDQoJCSdnbG9iYWxfc2tpbicgPT4gJ0RlZmF1bHQgdGhlbWU6JywN CgkJJ2hlbHBfbGluaycgPT4gJyg8YSBocmVmPSJ7bGlua30iPkhlbHA8L2E+KScsDQoJCSdp bWcnID0+ICdJbWFnZXMnLA0KCQknaW1wb3J0X2ZhaWxlZCcgPT4gJ0luc3RhbGxhdGlvbiBm YWlsZWQgOi0oIENoZWNrIHRoZSBmaWxlIHN0cnVjdHVyZScsDQoJCSdpbXBvcnRfc3VjY2Vz cycgPT4gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVsLiBGaWxlcyBleHRyYWN0ZWQ6IHtudW19 JywNCgkJJ2ltcG9ydF9vaycgPT4gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVsLicsDQoJCSdp bnN0YWxsX3NraW4nID0+ICdJbnN0YWxsIHRoZW1lJywNCgkJJ2ludmFsaWRfZmlsZScgPT4g J1JvZ3VlIGZpbGUgZGV0ZWN0ZWQ6IHtuYW1lfScsDQoJCSdpc19nbG9iYWwnID0+ICcgW0RF RkFVTFRdJywNCgkJJ2pzJyA9PiAnU2NyaXB0cycsDQoJCSdsYXlvdXQnID0+ICdMYXlvdXQg bWV0aG9kOicsDQoJCSdsYXlvdXRfbGlzdCcgPT4gJ0xpc3QnLA0KCQknbGF5b3V0X2dyaWQn ID0+ICdHcmlkJywNCgkJJ2xpc3RfdGl0bGUnID0+ICdJbnN0YWxsZWQgdGhlbWVzJywNCgkJ J21hbmFnZV9sYmwnID0+ICdUaGVtZSBtYW5hZ2VyJywNCgkJJ21rZGlyX2ZhaWxlZCcgPT4g J0Nhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciBmaWxlIHtuYW1lfS4gVHJ5IG1hbnVhbGx5 IGNyZWF0aW5nIGl0LicsDQoJCSduYW1lX2VtcHR5JyA9PiAnWW91IHNob3VsZCBnaXZlIHlv dXIgdGhlbWUgYSBuYW1lIDotKScsDQoJCSduZXcnID0+ICdDcmVhdGUgbmV3IHRoZW1lJywN CgkJJ25ld19maWxlJyA9PiAnTmV3IGZpbGUnLA0KCQknbmV3X2Nsb25lc2tpbicgPT4gJ05h bWUgb2YgY29weTonLA0KCQknbmV3X3NraW4nID0+ICdUaGVtZSBuYW1lOicsDQoJCSdvdGhl cl9maWxlcycgPT4gJ090aGVycycsDQoJCSdwaHAnID0+ICdDb2RlJywNCgkJJ3Blcl9ncm91 cCcgPT4gJ09uZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxldmVsJywNCgkJJ3Blcl9zaXRlJyA9 PiAnT25lIHRoZW1lIGZvciBldmVyeW9uZScsDQoJCSdwZXJfdXNlcicgPT4gJ09uZSB0aGVt ZSBwZXIgdXNlcicsDQoJCSdwcmVmc19kZWxldGVkJyA9PiAnUHJlZmVyZW5jZXMgZGVsZXRl ZCcsDQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQnLA0K CQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQu JywNCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2YWlsYWJsZS4n LA0KCQkncHJlZnNfc29tZV9leHBsYWluJyA9PiAnSXQgaXMgZWl0aGVyIGJlY2F1c2UgdGhp cyBpcyBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZScuYnIuJ3BsdWdpbiB0byBvbmUgeW91 IGhhZCBiZWZvcmUgb3IgdGhlIHByZWZlcmVuY2VzJy5ici4naGF2ZSBiZWNvbWUgY29ycnVw dCBzb21laG93LicsDQoJCSdwcmVmc19zb21lX29wdGlvbnMnID0+ICdDaG9vc2UgJy5nVHh0 KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2luc3RhbGwnKS4n IHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3RpbmcgcHJlZmVy ZW5jZXMgdW50b3VjaGVkLicsDQoJCSdwcmVmc190aXRsZScgPT4gJ0FkbWluIHRoZW1lIHBy ZWZlcmVuY2VzJywNCgkJJ3JlbmFtZV9mYWlsZWQnID0+ICdSZW5hbWUgZmFpbGVkJywNCgkJ J3JlbmFtZWQnID0+ICdSZW5hbWVkIHRvIHtuYW1lfScsDQoJCSdzZXQnID0+ICdTZXQnLA0K CQknc2V0dXAnID0+ICdQcmVmZXJlbmNlcycsDQoJCSdza2luX2dibCcgPT4gJ1RoZW1lJywN CgkJJ3NraW5fY2xvbmVkJyA9PiAnVGhlbWUgZXh0ZW5kZWQgYXMge25hbWV9JywNCgkJJ3Nr aW5fY3JlYXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBjcmVhdGVkJywNCgkJJ3NraW5fZGVsZXRl ZCcgPT4gJ1RoZW1lIHtuYW1lfSBkZWxldGVkJywNCgkJJ3NraW5fZXhpc3RzJyA9PiAnVGhl bWUge25hbWV9IGFscmVhZHkgZXhpc3RzJywNCgkJJ3NraW5fZmlsZXMnID0+ICdUaGVtZSBm aWxlcycsDQoJCSdza2luX2dyb3VwcycgPT4gJ0dyb3VwIHRoZW1lczonLA0KCQknc2tpbl9p bWFnZXMnID0+ICdUaGVtZSBpbWFnZXMnLA0KCQknc2tpbl9saXN0JyA9PiAnVGhlbWUgbGlz dCcsDQoJCSdza2luX2dyaWQnID0+ICdUaGVtZSBncmlkJywNCgkJJ3NraW5fbm90X2NyZWF0 ZWQnID0+ICdUaGVtZSB7bmFtZX0gY291bGQgbm90IGJlIGNyZWF0ZWQuIFRyeSBtYW51YWxs eSBtYWtpbmcgdGhlIGRpcmVjdG9yeScsDQoJCSdza2luX25vdF9mb3VuZCcgPT4gJ1RoZSB0 aGVtZSB7bmFtZX0gY291bGQgbm90IGJlIGZvdW5kJywNCgkJJ3NraW5fc3dpdGNoZWQnID0+ ICdUaGVtZSBzd2l0Y2hlZCB0byB7c2tpbn0nLA0KCQknc2tpbl9zeXN0ZW0nID0+ICdUaGVt ZSBzeXN0ZW06JywNCgkJJ3NraW5uZXInID0+ICdUaGVtZScsDQoJCSd0YWJfbmFtZScgPT4g J0FkbWluIHRoZW1lcycsDQoJCSd0aHVtYnNpemUnID0+ICdUaHVtYiBkaW1lbnNpb25zOics DQoJCSd0aW1lcycgPT4gJyB4ICcsDQoJCSd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUn ID0+ICd7Y3J1c2h9IGlzIG5vdCBhIHN1cHBvcnRlZCBjb21wcmVzc2lvbiBmb3JtYXQgb24g dGhpcyBpbnN0YWxsYXRpb24nLA0KCQkndW5zdXBwb3J0ZWRfZmlsZXR5cGUnID0+ICdGaWxl IGlzIG5vdCBvZiBhIHN1cHBvcnRlZCB0eXBlJywNCgkJJ3Vuc3VwcG9ydGVkX2Z1ZGdlJyA9 PiAnOiBoaXQgU2F2ZSBhZ2FpbiB0byBzdG9yZSBhbnl3YXknLA0KCQkndXBkYXRlJyA9PiAn VXBkYXRlJywNCgkJJ3VwbG9hZF9mYWlsZWQnID0+ICdJbWFnZSBjb3VsZCBub3QgYmUgdXBs b2FkZWQnLA0KCQkndXBsb2FkX2ltYWdlJyA9PiAnVXBsb2FkIGltYWdlJywNCgkJJ3VwbG9h ZF9zdWNjZXNzJyA9PiAnSW1hZ2UgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5JywNCgkJJ3ZlcnNp b24nID0+ICd2JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsN Cn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3Mi O3M6MToiMyI7czo0OiJoZWxwIjtzOjIyNzU2OiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgx IGlkPSJ0b3AiPnNtZF9hZG1pbl90aGVtZXM8L2gxPgoKCTxwPkluc3RhbGwsIG1hbmFnZSwg ZWRpdCBhbmQgc3dpdGNoIGFkbWluLXNpZGUgdGhlbWVzIHRoZW4gc2hhcmUgdGhlbSB3aXRo IHRoZSBjb21tdW5pdHkuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4K Cgk8dWw+CgkJPGxpPkNyZWF0ZSBhbmQgRWRpdCBhZG1pbi1zaWRlIHRoZW1lczwvbGk+CgkJ PGxpPkVtcGxveSBpbWFnZXMsIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+LCBKUywg PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+L1BIUCAoZm9yIGNoYW5naW5nIG1hc3Ro ZWFkLCBoZWFkZXIgJmFtcDsgZm9vdGVyKSBpbiB5b3VyIHRoZW1lPC9saT4KCQk8bGk+VXNl IGNvbnN0YW50cyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGZpbGVz PC9saT4KCQk8bGk+QmFzZSB5b3VyIHRoZW1lIG9uIGFuIGV4aXN0aW5nIHRoZW1lIHRvIHR3 ZWFrIGl0IHRvIHlvdXIgdGFzdGU8L2xpPgoJCTxsaT5FeHBvcnQgYSB0aGVtZSBwYWNrYWdl IGZvciBkaXN0cmlidXRpb24gdG8gdGhlIGNvbW11bml0eSBpbiBlaXRoZXIgLnRhciwgLnRn eiwgLmJ6MiBvciAuemlwIGZvcm1hdDwvbGk+CgkJPGxpPkltcG9ydCAvIGluc3RhbGwgb3Ro ZXIgdGhlbWVzIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9sYXlv dXRzLz9jPXR4cC1hZG1pbiI+Y29tbXVuaXR5IHJlcG9zaXRvcnk8L2E+PC9saT4KCQk8bGk+ QWRtaW5pc3RyYXRvciBjYW4gc2V0IGEgZGVmYXVsdCB0aGVtZSBmb3IgYWxsIHVzZXJzLCBv ciBlbmFibGUgcGVyLXVzZXIgLyBwZXItcm9sZSB0aGVtZXM8L2xpPgoJPC91bD4KCgk8aDIg aWQ9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+LjwvcD4KCgk8aDIgaWQ9Imluc3RhbGwi Pkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUg cGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1 Z2lucy8xMDk2L3NtZF9hZG1pbl90aGVtZXMiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRo ZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+ LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1 Z2luLiBBIG5ldyB0YWIgbGFiZWxsZWQgPGVtPkV4dGVuc2lvbnMgLSZndDsgQWRtaW4gdGhl bWVzPC9lbT4gaXMgY3JlYXRlZC4gPHN0cm9uZz5Pbmx5IHB1Ymxpc2hlcnMgd2lsbCBzZWUg dGhpcyB0YWI8L3N0cm9uZz4uPC9wPgoKCTxwPlRoZSBwbHVnaW4gc2hvdWxkIGF1dG9tYXRp Y2FsbHkgaW5zdGFsbCB0aGUgcHJlZmVyZW5jZXMgZm9yIHlvdS4gQ2xpY2sgJiM4MjE2O1By ZWZlcmVuY2VzJiM4MjE3OyBmcm9tIHRoZSA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBBZG1pbiB0 aGVtZXM8L2VtPiB0YWIgb3IgPGVtPk9wdGlvbnM8L2VtPiBmcm9tIHRoZSBBZG1pbiAtJmd0 OyBQbHVnaW5zIHRhYiB0byBhbHRlciwgZGVsZXRlIG9yIHJlaW5zdGFsbCB0aGVtLjwvcD4K Cgk8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92 aWV3dG9waWMucGhwP2lkPTMwOTUyIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8g b3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2lu LjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBmcm9t IHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuIFRoZSBwcmVmZXJlbmNlcyB3aWxsIGF1 dG9tYXRpY2FsbHkgYmUgcmVtb3ZlZC4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgcmVtb3Zpbmcg dGhlIHBsdWdpbiBkb2VzIDxzdHJvbmc+bm90IHJlbW92ZSBhbnkgdGhlbWVzIHlvdSBoYXZl IGluc3RhbGxlZCwgbm9yIGRvZXMgaXQgcmVtb3ZlIHBlci11c2VyIHRoZW1lIHByZWZlcmVu Y2VzPC9zdHJvbmc+LiBQZXItdXNlciBwcmVmcyB3aWxsIHNpbXBseSBiZSBpZ25vcmVkIHdo ZW4gdGhlIHBsdWdpbiBpcyBkZWxldGVkLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwv aDI+CgoJPHA+T24gdGhlIDxlbT5FeHRlbnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+ IHRhYiBpcyBhIGxpc3Qgb3IgZ3JpZCBjb250YWluaW5nIGluc3RhbGxlZCB0aGVtZXMuIE91 dCBvZiB0aGUgYm94LCB0aGVyZSB3aWxsIGJlIHR3byBhdmFpbGFibGU6IDxlbT5jbGFzc2lj PC9lbT4gYW5kIDxlbT5yZW1vcmE8L2VtPi4gPHN0cm9uZz5JdCYjODIxNztzIGFkdmlzYWJs ZSBub3QgdG8gY2hhbmdlIHRoZXNlIHRoZW1lczwvc3Ryb25nPiBzbyB5b3UgY2FuIGFsd2F5 cyBnbyBiYWNrIHRvIHRoZW0gaWYgZXZlcnl0aGluZyBnb2VzIHNpZGV3YXlzLiBQbHVzIGl0 JiM4MjE3O3MgYSB2ZXJ5IHVzZWZ1bCBzdGFydGluZyBwb2ludCBmcm9tIHdoaWNoIHRvIDxh IGhyZWY9IiNjbG9uZSI+YmFzZTwvYT4gYSA8YSBocmVmPSIjbmV3Ij5uZXcgdGhlbWU8L2E+ LjwvcD4KCgk8cD5JbiB0aGUgbGlzdCBsYXlvdXQsIHRoZSBjb2x1bW5zIGFyZTo8L3A+CgoJ PHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWU8L3NwYW4+IDogVGhlIG5hbWUg b2YgdGhlIHRoZW1lIGFuZCAob3B0aW9uYWwpIHRodW1ibmFpbCBhc3NpZ25lZCB0byBpdC4g Q2xpY2sgdG8gPGEgaHJlZj0iI3N3aXRjaCI+YWN0aXZhdGU8L2E+IHRoZSB0aGVtZS4gSWYg dGhlIHRoZW1lIGlzIGJhc2VkIG9uIGFub3RoZXIgdXNlciYjODIxNztzIHRoZW1lLCB0aGlz IGRlcGVuZGVuY3kgd2lsbCBiZSBzaG93biBpbiBwYXJlbnRoZXNlcyBhZnRlciB0aGUgdGhl bWUgbmFtZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BdXRob3I8L3NwYW4+IDog WW91ISBMaW5rZWQgdG8geW91ciB3ZWIgc2l0ZSBpZiB5b3Ugc3VwcGx5IGl0IGluIHlvdXIg PGEgaHJlZj0iI2Fib3V0Ij5NYW5pZmVzdDwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+VmVyc2lvbjwvc3Bhbj4gOiBUaGVtZSB2ZXJzaW9uIG51bWJlciBpbiA8Y29kZT5t YWpvci5taW5vci5zdWJyZXY8L2NvZGU+IG5vdGF0aW9uLiBJZiBhIG5ld2VyIHZlcnNpb24g b2YgYSB0aGVtZSBpcyBhdmFpbGFibGUgZnJvbSBUZXh0Z2FyZGVuLCB0aGUgdmVyc2lvbiBu dW1iZXIgd2lsbCBiZSBoeXBlcmxpbmtlZCB0byB0aGUgdGhlbWUgb24gVGV4dGdhcmRlbiBz byB5b3UgbWF5IGRvd25sb2FkL2luc3RhbGwgaXQuIFRoZSB2ZXJzaW9ucyBhcmUgY2hlY2tl ZCwgYXQgbW9zdCwgb25jZSBldmVyeSAyNCBob3VycyB0byBhdm9pZCBoYW1tZXJpbmcgdGhl IHNlcnZlcjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5EZXNjcmlwdGlvbjwvc3Bh bj4gOiBCcmllZiBvbmUtIG9yIHR3by1saW5lciBleHBsYWluaW5nIHlvdXIgdGhlbWUuIElm IHlvdSBoYXZlIG9mZmVyZWQgYSBoZWxwIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ IGluIHlvdXIgbWFuaWZlc3QsIGl0IHdpbGwgYmUgbGlua2VkIGhlcmUgYXMgd2VsbDwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BY3Rpb25zPC9zcGFuPiA6IEFjdGlvbnMgdG8g cGVyZm9ybSBvbiBlYWNoIHRoZW1lCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5b TmV3IHRoZW1lXTwvc3Bhbj4gOiA8YSBocmVmPSIjbmV3Ij5DcmVhdGU8L2E+IGEgbmV3IGJs YW5rLCBlbXB0eSBkaXJlY3RvcnkgcmVhZHkgZm9yIHlvdXIgdGhlbWUuIE5vIHNwYWNlcyAv IG9kZCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBuYW1lIGFuZCBpdCBtdXN0IG5v dCBzdGFydCB3aXRoIGEgbnVtYmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltF ZGl0XTwvc3Bhbj4gOiA8YSBocmVmPSIjZWRpdF90aGVtZSI+RWRpdDwvYT4gdGhlIHZhcmlv dXMgZGV0YWlscywgZmlsZXMgYW5kIGNvbnRlbnQgd2l0aGluIHRoZSB0aGVtZTwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bQmFzZV08L3NwYW4+IDogPGEgaHJlZj0iI2Nsb25l Ij5FeHRlbmQ8L2E+IG9uZSBvZiB0aGUgZXhpc3RpbmcgdGhlbWVzIHRvIG1ha2UgeW91ciBv d24gY2hhbmdlcyB1bmRlciBhIG5ldyBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPltFeHBvcnRdPC9zcGFuPiA6IDxhIGhyZWY9IiNleHBvcnQiPlNhdmU8L2E+IHRoZSB0 aGVtZSBwYWNrYWdlIHRvIHlvdXIgaGFyZCBkcml2ZSBmb3IgZGlzdHJpYnV0aW9uL2JhY2t1 cCBpbiB5b3VyIGNob3NlIGNvbXByZXNzaW9uIGZvcm1hdDwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5bRGVsZXRlXTwvc3Bhbj4gOiBDb21wbGV0ZWx5IDxhIGhyZWY9IiNkZWxl dGUiPnJlbW92ZTwvYT4gdGhlIHRoZW1lLiBOb3QgYXZhaWxhYmxlIHRvIHRoZSBjb3JlIHRo ZW1lcywgZm9yIG9idmlvdXMgcmVhc29ucyEgQWxzbyBub3QgYXZhaWxhYmxlIGlmIGEgdGhl bWUgaGFzIGJlZW4gdXNlZCBhcyBhIGJhc2lzIGZvciBhbm90aGVyIHRoZW1lIGluIHRoZSBj dXJyZW50IHNpdGU8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5UaGUgcm93IG9mIHRo ZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUgaXMgc2hhZGVkIGFuZCB0aGUgY3VycmVudCBk ZWZhdWx0IHRoZW1lIHRoYXQgaXMgaW4gZWZmZWN0IGlzIGhpZ2hsaWdodGVkLiBUaGUgZ3Jp ZCB2aWV3IGhhcyBwYXJ0cyBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24sIGxhaWQgb3V0IHNs aWdodGx5IGRpZmZlcmVudGx5LjwvcD4KCgk8aDIgaWQ9InN3aXRjaCI+U3dpdGNoaW5nIHRo ZW1lczwvaDI+CgoJPHA+QXMgdGhlIGFkbWluaXN0cmF0b3IsIHlvdSBjYW4gcGxheSBHb2Qg b3ZlciBldmVyeW9uZSBlbHNlJiM4MjE3O3MgdGhlbWVzLiBZb3UgYXJlIGZyZWUgdG8gaW5z dGFsbCBhcyBtYW55IGFzIHlvdSB3aXNoIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGVtIHdpdGhv dXQgYWZmZWN0aW5nIGFueSBvdGhlciBsb2dpbnMuIE5vYm9keSBlbHNlIHdpbGwgZXZlbiBr bm93IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgcGx1Z2luLjwvcD4KCgk8cD5JZiwgaG93ZXZl ciwgeW91IHZpc2l0IHRoZSA8YSBocmVmPSIjc2V0dXAiPlByZWZlcmVuY2VzPC9hPiBwYWdl IHlvdSBjYW4gY29uZmlndXJlIHRoZSB0aGVtZXMgdGhhdCBvdGhlcnMgdXNlLiBUaGVyZSBh cmUgdGhyZWUgbWVjaGFuaXNtcyB0byBjaG9vc2UgZnJvbTo8L3A+CgoJPHVsPgoJCTxsaT5G b3JjZSBvbmUgdGhlbWUgZm9yIGFsbCB1c2VycyAoZXhjZXB0IHlvdXJzZWxmKTwvbGk+CgkJ PGxpPkZvcmNlIG9uZSB0aGVtZSBmb3IgZWFjaCB1c2VyIHByaXZpbGVnZSBsZXZlbCAoZXhj ZXB0IHlvdXJzZWxmKTwvbGk+CgkJPGxpPkFsbG93IGFsbCB1c2VycyAoZXhjZXB0IHlvdXJz ZWxmKSB0byBwaWNrIHRoZWlyIGZhdm91cml0ZSB0aGVtZSBmcm9tIGEgc2hvcnRsaXN0IHlv dSBkZWZpbmU8L2xpPgoJPC91bD4KCgk8cD5BdCBhbGwgdGltZXMsIHlvdSBjYW4gY2hvb3Nl IGFueSB0aGVtZSB5b3UgcGxlYXNlIGZvciB5b3VyIG93biB1c2UuIFRoaXMgYWxsb3dzIHRy aWFsbGluZywgdHdlYWtpbmcgYW5kIHRlc3Rpbmcgb2YgdGhlbWVzIGJlZm9yZSB1bmxlYXNo aW5nIHRoZW0gb24geW91ciB1c2VyIGJhc2UuPC9wPgoKCTxoMiBpZD0ic2V0dXAiPlRoZW1l IHByZWZlcmVuY2VzPC9oMj4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5DYXNl LXNlbnNpdGl2ZSB0aGVtZSBsaXN0PC9zcGFuPiA6IFdoZW4gc2V0IHRvIDxjb2RlPlllczwv Y29kZT4sIHVwcGVyLWNhc2UgdGhlbWUgbmFtZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbG93 ZXIgY2FzZSB0aGVtZSBuYW1lcyBhbmQgd2lsbCBiZSBsaXN0ZWQgZmlyc3QuIEZvciBleGFt cGxlLCAzIHRoZW1lIGNhbGxlZCAmIzgyMTY7QW5nZWxpYyYjODIxNzssICYjODIxNjtiYXJi YXJpYyYjODIxNzsgYW5kICYjODIxNjtDb2hlc2l2ZSYjODIxNzsgd2lsbCBiZSBvcmRlcmVk OiA8Y29kZT5BbmdlbGljLCBDb2hlc2l2ZSwgYmFyYmFyaWM8L2NvZGU+LiBTZXQgdG8gPGNv ZGU+Tm88L2NvZGU+IHRvIG1peCB1cHBlciBhbmQgbG93ZXItY2FzZSB0aGVtZXMgdG9nZXRo ZXIgKG9yZGVyIGlzIHRoZW4gPGNvZGU+QW5nZWxpYywgYmFyYmFyaWMsIENvaGVzaXZlPC9j b2RlPiApLiBUaGUgJiM4MjE2O2NsYXNzaWMmIzgyMTc7IHRoZW1lIGlzIDxlbT5hbHdheXM8 L2VtPiBsaXN0ZWQgZmlyc3QuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkV4cG9y dCBjb21wcmVzc2lvbiB0eXBlPC9zcGFuPiA6IERlcGVuZGluZyBvbiB5b3VyIHZlcnNpb24g b2YgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gYW5kIHdoaWNoIG1vZHVsZXMgaGF2 ZSBiZWVuIGNvbXBpbGVkIGludG8gaXQsIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgY29tcHJl c3Npb24gZm9ybWF0cyBoZXJlLiBDaG9vc2Ugb25lIHRoYXQgc3VpdHMgeW91IGFzIHRoZSBk ZWZhdWx0IGluIHdoaWNoIHRvIGV4cG9ydCB5b3VyIHRoZW1lIHBhY2thZ2VzLiBZb3UgbWF5 IGNob29zZSBmcm9tIDxlbT5UYXI8L2VtPiwgPGVtPkdaaXA8L2VtPiAodGhlIGRlZmF1bHQ6 IGFjdHVhbGx5IHRhcitnemlwKSwgPGVtPkJ6aXAyPC9lbT4gKHRhcitiemlwKSwgb3IgPGVt PlppcDwvZW0+LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MYXlvdXQgbWV0aG9k PC9zcGFuPiA6IENob29zZSBmcm9tIGEgTGlzdCBWaWV3ICh1c2VmdWwgaWYgeW91IHByZWZl ciB0byBoaWRlIG9yIHVzZSBzbWFsbCB0aHVtYnMpIG9yIGEgR3JpZCBWaWV3IG9mIGluc3Rh bGxlZCB0aGVtZXMuIFRoaXMgc2V0dGluZyBhcHBsaWVzIHRvIGJvdGggYWRtaW4gYW5kIHVz ZXIgdGhlbWUgc2VsZWN0aW9uIHRhYnMuIERlZmF1bHQ6IEdyaWQgVmlldzwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5UaHVtYiBzaXplPC9zcGFuPiA6IFNldCB0aGUgdGh1bWJu YWlsIGRpbWVuc2lvbnMgaW4gdGhlIHRoZW1lIGxpc3QuIFNldCBlaXRoZXIgZGltZW5zaW9u IHRvIDAgdG8gdHVybiBvZmYgdGh1bWJuYWlsIGRpc3BsYXkuIERlZmF1bHQ6IDI2MCAmIzIx NTsgMTUwcHg8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RGVmYXVsdCB0aGVtZTwv c3Bhbj4gOiBTZXQgdGhlIHRoZW1lIGZvciBhbGwgb3RoZXIgdXNlcnMuIElmIHVzaW5nICYj ODIxNjtPbmUgdGhlbWUgZm9yIGV2ZXJ5b25lJiM4MjE3OyB0aGUgdGhlbWUgY2hvc2VuIGhl cmUgaXMgZm9yY2VkIHVwb24gYWxsIHVzZXJzLiBJZiB1c2luZyBhbnkgb2YgdGhlIG90aGVy IG1lY2hhbmlzbXMsIHRoaXMgdGhlbWUgaXMgYSBmYWxsYmFjayBzaG91bGQgc29tZXRoaW5n IGdvIHBlYXItc2hhcGVkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVtZSBz eXN0ZW08L3NwYW4+IDogQXMgZGV0YWlsZWQgaW4gPGEgaHJlZj0iI3N3aXRjaCI+U3dpdGNo aW5nIHRoZW1lczwvYT4sIHlvdSBtYXkgY2hvb3NlIHRoZSB3YXkgdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IGludGVyZmFjZSBpcyBwcmVzZW50ZWQgdG8gb3RoZXIgdXNl cnM6Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgZm9yIGV2ZXJ5 b25lPC9zcGFuPiA6IHVzZXMgdGhlIERlZmF1bHQgdGhlbWUgZm9yIGFsbCB1c2VyczsgdGhl eSBoYXZlIG5vIGNob2ljZSBpbiB0aGUgbWF0dGVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPk9uZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxldmVsPC9zcGFuPiA6IGFsbG93cyB5 b3UgdG8gYXNzaWduIG9uZSBvciBtb3JlIHByaXZpbGVnZSBsZXZlbHMgdG8gYSB0aGVtZS4g Q2hvb3NlIGEgdGhlbWUgZnJvbSB0aGUgbGVmdC1oYW5kIGxpc3QgYW5kIHRoZW4gc2hpZnQv Y3RybC1jbGljayB0aGUgcHJpdmlsZWdlIGxldmVscyB0byBhc3NpZ24gdGhlbS4gRmxpY2sg YmV0d2VlbiB0aGVtZXMgaW4gdGhlIGxlZnQgY29sdW1uIHRvIHNlZSB3aGljaCBvbmVzIGFy ZSBzZXQgZm9yIHZhcmlvdXMgdXNlciBsZXZlbHMsIG9yIGhvdmVyIG92ZXIgYSBwcml2aWxl Z2UgbGV2ZWwgdG8gc2VlIGEgdG9vbHRpcC4gT25seSBvbmUgbGV2ZWwgY2FuIGJlIGFzc2ln bmVkIHRvIGEgdGhlbWUgc28gaWYgeW91IGNsaWNrIGEgbGV2ZWwgdGhhdCBoYXMgYWxyZWFk eSBiZWVuIGFzc2lnbmVkIHRvIGFub3RoZXIgdGhlbWUsIGl0IHdpbGwgYmUgcmVtb3ZlZCBm cm9tIGl0cyBvcmlnaW5hbCBhc3NpZ25tZW50LiBOb3RlIHlvdSBtdXN0IFNhdmUgdGhlIGNo YW5nZXMgZm9yIHRoZW0gdG8gdGFrZSBlZmZlY3Q8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+T25lIHRoZW1lIHBlciB1c2VyPC9zcGFuPiA6IGRlZmluZSBhIHNob3J0bGlzdCBm cm9tIHRoZSBhdmFpbGFibGUgaW5zdGFsbGVkIHRoZW1lcyB0byBvZmZlciB0byBhbGwgdXNl cnMuIEEgbmV3IHRhYiB3aWxsIGFwcGVhciB0byBvdGhlciB1c2VycyB1bmRlciA8ZW0+QWRt aW48L2VtPiB0aGF0IGlzIGVzc2VudGlhbGx5IGEgY3V0LWRvd24gdmVyc2lvbiBvZiB0aGUg PGVtPkFkbWluIHRoZW1lczwvZW0+IHRhYi4gVXNlcnMgY2FuIHN3aXRjaCBiZXR3ZWVuIGFu eSBvbmUgb2YgdGhlIHRoZW1lcyB5b3UgaGF2ZSBwZXJtaXR0ZWQuPC9saT4KCTwvdWw+PC9s aT4KCTwvdWw+CgoJPHA+UmVtZW1iZXIgdG8gY2xpY2sgU2F2ZSB0byBhcHBseSB0aGUgY2hh bmdlcy4gQ2xpY2tpbmcgYW55IG90aGVyIHRhYiB3aWxsIHVuZG8gYW55IG1vZGlmaWNhdGlv bnMgeW91IG1heSBoYXZlIG1hZGUuPC9wPgoKCTxoMiBpZD0iYnJvd3NlIj5Ccm93c2UgdGhl bWVzPC9oMj4KCgk8cD5DbGljayB0aGlzIGJ1dHRvbiB0byBiZSB0YWtlbiB0byB0aGUgY2Vu dHJhbCBhZG1pbiB0aGVtZSByZXBvc2l0b3J5IHdoZXJlIHlvdSBtYXkgYnJvd3NlIHRoZW1l cyBhbmQgZG93bmxvYWQgdGhlbSByZWFkeSBmb3IgaW5zdGFsbGF0aW9uLjwvcD4KCgk8aDIg aWQ9ImltcG9ydCI+SW5zdGFsbCBhIHRoZW1lPC9oMj4KCgk8cD5Mb2NhdGUgYSB0aGVtZSBw YWNrYWdlIG9uIHlvdXIgaGFyZCBkcml2ZSBvciBwYXN0ZSBhIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHRvIGEgcGFja2FnZSBpbiB0aGUgYm94IGF0IHRoZSB0b3Agb2YgdGhl IHBhZ2UuIEhpdCA8c3Ryb25nPlVwbG9hZDwvc3Ryb25nPiBhbmQgaXQgd2lsbCBiZSBpbnN0 YWxsZWQuIElmIGl0IGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uIE5v dGUgdGhhdCB5b3UgbWF5IHJlY2VpdmUgYSB3YXJuaW5nIGlmIHRoZSB0aGVtZSBpcyBwYWNr YWdlZCB1c2luZyBhIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0aGF0IGlzIG5vdCBidWlsdCBp bnRvIHlvdXIgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPi48L3A+ CgoJPGgyIGlkPSJuZXciPkNyZWF0ZSBhIG5ldyAoZW1wdHkpIHRoZW1lPC9oMj4KCgk8cD5D bGljayA8c3Ryb25nPkNyZWF0ZSBuZXcgdGhlbWU8L3N0cm9uZz4gYW5kIGEgYm94IHdpbGwg c2xpZGUgZG93biBhbGxvd2luZyB5b3UgdG8gZ2l2ZSB5b3VyIHRoZW1lIGEgbmFtZS4gIE5v dGUgdGhhdCB0aGUgZWRpdCBib3ggYXV0b21hdGljYWxseSB0YWtlcyBmb2N1cywgc28geW91 IGNhbiB0eXBlIHN0cmFpZ2h0IGF3YXkuPC9wPgoKCTxwPk5vIHNwYWNlcyBvciBvZGQgY2hh cmFjdGVycyBhcmUgcGVybWl0dGVkLCBiZWNhdXNlIHRoZSBuYW1lIHlvdSBlbnRlciBpcyB0 aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSA8 ZW0+dGhlbWU8L2VtPiBmb2xkZXIgYW5kIHRoZW0gbmFtZSBvZiB5b3VyIHRoZW1lJiM4MjE3 O3MgY2xhc3MuIElmIHlvdSBkbyBtYW5hZ2UgdG8gdXNlIG9kZCBjaGFyYWN0ZXJzLCB0aGUg bmFtZSB3aWxsIGJlICYjODIyMDtkdW1iZWQgZG93biYjODIyMTsgZm9yIHlvdS4gT25jZSB0 aGUgbmFtZSBpcyBzZXQsIHRoYXQgaXMgaXQ7IHlvdSBjYW5ub3QgY2hhbmdlIGl0IGZyb20g d2l0aGluIHRoZSBpbnRlcmZhY2UuIFRoZSBvbmx5IHdheSB0byByZW5hbWUgaXQgaXMgdmlh IHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj4gY2xpZW50IGFuZCBpbiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBpZiB5b3Uga25vdyB3aGF0IHlv dSBhcmUgZG9pbmcuPC9wPgoKCTxwPkluIG9yZGVyIHRvIGF2b2lkIG5hbWUgY2xhc2hlcyB3 aXRoIG90aGVyIHBlb3BsZSYjODIxNztzIHRoZW1lcywgaXQgaXMgcmVjb21tZW5kZWQgdGhh dCBhbGwgdGhlbWVzIHlvdSBkZXNpZ24gYmVnaW4gd2l0aCBhIHVuaXF1ZSAzLWxldHRlciBw cmVmaXggb2YgeW91ciBvd24gY2hvb3NpbmcsIHBsdXMgYW4gdW5kZXJzY29yZSAmIzgyMTI7 IGV4YWN0bHkgbGlrZSBwbHVnaW5zLiBUaHVzLCBzbWRfQmx1ZU1lYW5pZSBtaWdodCB3ZWxs IGJlIHRoZSBuYW1lIG9mIGEgdGhlbWUuPC9wPgoKCTxwPldoZW4geW91IGhhdmUgbmFtZWQg eW91ciB0aGVtZSwgY2xpY2sgPHN0cm9uZz5Hbzwvc3Ryb25nPiB0byBjcmVhdGUgYSBkaXJl Y3RvcnkgaW4gd2hpY2ggaXQgY2FuIHJlc2lkZS48L3A+CgoJPGgyIGlkPSJjbG9uZSI+RXh0 ZW5kIGFuIGV4aXN0aW5nIHRoZW1lPC9oMj4KCgk8cD5DbGljayA8c3Ryb25nPkJhc2U8L3N0 cm9uZz4gdG8gY3JlYXRlIGEgbmV3IHRoZW1lIGJhc2VkIG9uIGFub3RoZXIuIEEgYm94IHdp bGwgc2xpZGUgZG93biAodGhlIGN1cnNvciBmb2N1c2VzIGF1dG9tYXRpY2FsbHkgaW4gdGhl IGJveCBmb3IgeW91KSBzbyB5b3UgbWF5IGVudGVyIHRoZSBuYW1lIG9mIHlvdXIgY29weS4g T2JzZXJ2ZSB0aGUgPGEgaHJlZj0iI25ldyI+bmFtaW5nIGNvbnZlbnRpb248L2E+LCB0aGVu IGNsaWNrIDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3JlYXRlIHRoZSBuZXcgdGhlbWUuPC9w PgoKCTxwPjxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+UGxlYXNlIHJlbWVtYmVyLCB5b3VyIHRo ZW1lIHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBjaG9zZW4gdGhlbWUgYW5kIDxzdHJvbmc+ Ym90aDwvc3Ryb25nPiBtdXN0IGJlIHByZXNlbnQgb24gYSB1c2VyJiM4MjE3O3Mgc3lzdGVt IGZvciB0aGUgdGhlbWUgdG8gd29yazwvc3Bhbj4uIEl0IGlzIHdvcnRoIGVuc3VyaW5nIHRo YXQgdXNlcnMgb2YgeW91ciB0aGVtZSBhcmUgbWFkZSBhd2FyZSBvZiB0aGlzIGRlcGVuZGVu Y3kgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZnJ1c3RyYXRpb247IHBlcmhhcHMgYWRkIGEgbGlu ayB0byB0aGUgdGhlbWUmIzgyMTc7cyBiYXNlLCBtZW50aW9uIHRoZSBkZXBlbmRlbmN5IGlu IHRoZSBIZWxwIGxpbmsgYW5kL29yIGluIHRoZSB0aGVtZSYjODIxNztzIGFydGljbGUgb24g VGV4dGdhcmRlbi4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gZGVsZXRlIGFueSB0aGVtZSBm cm9tIHRoZSBsaXN0IHRoYXQgaGFzIHN1Y2ggYSBkZXBlbmRlbmN5LCBvdGhlcndpc2UgeW91 ciBhZG1pbiBzaWRlIHdpbGwgc3RvcCB3b3JraW5nLjwvcD4KCgk8aDIgaWQ9ImV4cG9ydCI+ RXhwb3J0IGEgdGhlbWU8L2gyPgoKCTxwPklmIHlvdSB3aXNoIHRvIGJhY2sgdXAgYSB0aGVt ZSBvciBzaGFyZSBpdCB3aXRoIG90aGVycywgY2xpY2sgPHN0cm9uZz5FeHBvcnQ8L3N0cm9u Zz4uIEEgYm94IHdpbGwgc2xpZGUgZG93biBvZmZlcmluZyB5b3UgYSBjaG9pY2Ugb2YgY29t cHJlc3Npb24gZm9ybWF0czsgdGhlIGRlZmF1bHQgaXMgdGhlIGZvcm1hdCB5b3UgY2hvc2Ug ZnJvbSB0aGUgPGEgaHJlZj0iI3NldHVwIj5QcmVmZXJlbmNlczwvYT4gcGFnZS4gQ2xpY2sg PGVtPltHb108L2VtPiB0byBleHBvcnQgdGhlIHRoZW1lIGFuZCBzYXZlIGl0IHRvIHlvdXIg Y29tcHV0ZXIuIEFsbCByZWxhdGVkIGZpbGVzIGluIHRoZSB0aGVtZSB3aWxsIGJlIHBhY2th Z2VkIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgZG93bmxvYWQgZmlsZSBmb3IgY29udmVuaWVu Y2UuPC9wPgoKCTxoMiBpZD0iZGVsZXRlIj5EZWxldGUgYSB0aGVtZTwvaDI+CgoJPHA+SGl0 IHRoaXMgKGFuZCBjb25maXJtIHlvdSBhcmUgc3VyZSkgdG8gcmVtb3ZlIHRoZSBlbnRpcmUg dGhlbWUgZm9sZGVyIGFuZCBjb250ZW50cyBmcm9tIHRoZSBmaWxlIHN5c3RlbS4gPHNwYW4g Y2xhc3M9InJlcXVpcmVkIj5UaGlzIGlzIG5vdCB1bmRvYWJsZSwgc28gYmUgY2FyZWZ1bDwv c3Bhbj4uPC9wPgoKCTxoMiBpZD0iZWRpdF90aGVtZSI+RWRpdCBhIHRoZW1lPC9oMj4KCgk8 cD5BIHRoZW1lIGlzIGEgY29sbGVjdGlvbiBvZiBmaWxlcy4gVGhlIGZpbGVzIGFsbCByZXNp ZGUgaW4gdGhlaXIgb3duIHNlbGYtY29udGFpbmVkIGRpcmVjdG9yeSB1bmRlciA8Y29kZT50 ZXh0cGF0dGVybi90aGVtZTwvY29kZT4uIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaXMg dGhlIG5hbWUgb2YgeW91ciB0aGVtZSwgaGVuY2UgdGhlIHJlYXNvbiBpdCBjYW5ub3QgY29u dGFpbiBhbnkgb2JzY3VyZSBjaGFyYWN0ZXJzIHRoYXQgd291bGQgYmUgaW52YWxpZCBpbiB0 aGUgZmlsZXN5c3RlbSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB2YXJpYWJs ZXMuPC9wPgoKCTxwPldoZW4geW91IGNsaWNrICYjODIxNjtFZGl0JiM4MjE3OyB5b3Ugd2ls bCBiZSB0YWtlbiB0byBhIHNjcmVlbiB0aGF0IGFsbG93cyB5b3UgdG8gbWFrZSBjaGFuZ2Vz IHRvIHRoZSB0aGVtZS4gVGhlIEVkaXQgc2NyZWVuIGlzIGJyb2tlbiBpbnRvIHRocmVlIHZl cnRpY2FsIHBhcnRzLCBhcyBmb2xsb3dzOjwvcD4KCgk8aDMgaWQ9ImVkaXRfaW1nIj5JbWFn ZSBoYW5kbGluZzwvaDM+CgoJPHA+RWFjaCB0aGVtZSBjYW4gY29udGFpbiBhbiBvcHRpb25h bCB0aHVtYm5haWwuIFRoaXMgaXMgYW4gaW1hZ2Ugb2YgMjYwJiMyMTU7MTUwcHggaW4gc2l6 ZSwgY2FsbGVkIDxjb2RlPnNjcmVlbnNob3QucG5nPC9jb2RlPiAob3IgPGNvZGU+LmpwZzwv Y29kZT4sIDxjb2RlPi5naWY8L2NvZGU+LCBldGMpIGluIHlvdXIgdGhlbWUgZGlyZWN0b3J5 LiBOb3RlIGl0IHdpbGwgYmUgc3F1YXNoZWQgLyBzdHJldGNoZWQgdG8gZml0IHlvdXIgdGh1 bWJuYWlsIGRpbWVuc2lvbnMgc2V0IGluIHRoZSBwbHVnaW4gcHJlZnMuPC9wPgoKCTxwPk90 aGVyIGltYWdlcyBmb3IgdXNlIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHJ1 bGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIGEgdGhlbWUuIEJyb3dzZSBmb3IgYW4gaW1hZ2Ug YW5kIHNlbGVjdCBpdCwgdGhlbiBjbGljayA8c3Ryb25nPlVwbG9hZDwvc3Ryb25nPiB0byBh ZGQgaXQgdG8gdGhlIHRoZW1lLiBZb3UgY2FuIGN1cnJlbnRseSBvbmx5IHVwbG9hZCBvbmUg aW1hZ2UgYXQgYSB0aW1lLCB0aG91Z2ggeW91IGNhbiBkZWxldGUgb25lIG9yIG1vcmUgYXQg b25jZSBieSBTaGlmdC9DdHJsIGNsaWNraW5nIHRoZSBvbmVzIHlvdSB3aXNoIHRvIHJlbW92 ZSBhbmQgaGl0dGluZyB0aGUgJiM4MjE2O3gmIzgyMTc7IGJ1dHRvbi4gPHNwYW4gY2xhc3M9 InJlcXVpcmVkIj5XYXJuaW5nOiBmaWxlcyB3aWxsIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHks IHdpdGhvdXQgY29uZmlybWF0aW9uLjwvc3Bhbj48L3A+CgoJPHA+VGhlIGJlc3Qgd2F5IHRv IHJlZmVyIHRvIGltYWdlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBpbiBzdHls ZXNoZWV0cyBpcyB3aXRoIGEgcmVsYXRpdmUgcGF0aDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4ubXlTdHlsZSB7CiAgIGJhY2tncm91bmQ6IHVybCht eS1pbWFnZS5naWYpOwp9CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImVkaXRfY29udGVudCI+ Q29udGVudDwvaDM+CgoJPHA+VGhlIGNlbnRyYWwgcGFuZSBpcyB3aGVyZSB5b3UgZWRpdCB0 aGUgY29udGVudHMgb2YgdGhlIGZpbGVzIGluIHlvdXIgdGhlbWUuIFRoZSBzbWFsbCBlZGl0 IGJveCBhdCB0aGUgdG9wIGlzIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGxhcmdlIHRleHQgYXJl YSBpcyBpdHMgY29udGVudC4gQ2xpY2sgPHN0cm9uZz5TYXZlPC9zdHJvbmc+IHRvIGNvbW1p dCBjaGFuZ2VzLiBZb3UgbWF5IGZyZWVseSByZW5hbWUgYW55IGZpbGUgeW91IGFyZSBlZGl0 aW5nLjwvcD4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPkltcG9ydGFudDogaWYgeW91IHNlbGVj dCBhIGZpbGUsIGVkaXQgaXQsIHJlbmFtZSBpdCwgYW5kIGNsaWNrIDxzdHJvbmc+U2F2ZTwv c3Ryb25nPiB5b3Ugd2lsbCBvdmVyd3JpdGUgd2hhdGV2ZXIgd2FzIGluIHRoZSBwcmV2aW91 cyBmaWxlICYjODIxMjsgZXZlbiBpZiB5b3UgZW1wdHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB0 ZXh0YXJlYSBpbiBhbiBlZmZvcnQgdG8gbWFrZSBhICYjODIyMDtuZXcmIzgyMjE7IG9uZS4g SWYgeW91IHdpc2ggdG8gY3JlYXRlIGEgbmV3IGZpbGUsIGl0IGlzIHNhZmVyIHRvIGNsaWNr IHRoZSA8c3Ryb25nPk5ldyBmaWxlPC9zdHJvbmc+IGJ1dHRvbiBpbiB0aGUgcmlnaHQgaGFu ZCBjb2x1bW4gdG8gZW5zdXJlIHlvdSBhcmUgbm90IGVkaXRpbmcgYW4gZXhpc3RpbmcgZmls ZSBieSBtaXN0YWtlLjwvcD4KCgk8cD5JdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IGZp bGUgcGVybWlzc2lvbnMgdmFyeSBmcm9tIGhvc3QgdG8gaG9zdC4gSWYgeW91IHRyeSBhbmQg c2F2ZSBhIHRoZW1lIGZpbGUgYW5kIHJlY2VpdmUgYSB5dWtreSB3YXJuaW5nIG1lc3NhZ2Ug YWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUgdGhlIGZpbGUsIHRyeSBpbmNyZWFzaW5n IHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdGhlbWUgZGlyZWN0b3J5IGFuZCBhbGwgZmlsZXMg YmVuZWF0aCBpdC48L3A+CgoJPHA+VGhlIHRoZW1lIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBp biA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB3aXRoIDxjb2RlPjY0NDwvY29kZT4g cGVybWlzc2lvbnMgd2hpY2ggc2hvdWxkIGJlIGZpbmUgZm9yIGEgc3RhbmRhcmQgaG9zdC4g U29tZSBzaGFyZWQgaG9zdGluZyBjb21wYW5pZXMgJiM4MjEyOyBhbmQgdGhlc2UgYXJlIHVz dWFsbHkgdGhlIG9uZXMgdGhhdCB0ZWxsIHlvdSB0byBzZXQgeW91ciA8Y29kZT5maWxlczwv Y29kZT4gYW5kIDxjb2RlPmltYWdlczwvY29kZT4gZGlyZWN0b3JpZXMgdG8gNzc3IGluIG9y ZGVyIHRvIG1ha2UgdGhlbSB3cml0YWJsZSBieSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiAmIzgyMTI7IHJ1biBBcGFjaGUvUEhQIGluIGEgZGlmZmVyZW50IHdheSB3aGljaCBt aWdodCByZXF1aXJlIGhpZ2hlciBwZXJtaXNzaW9ucyBpbiBvcmRlciB0byB3cml0ZSB0byB0 aGUgdGhlbWUgZGlyZWN0b3J5LiBUaGlzIGlzIHVuZm9ydHVuYXRlbHkgb3V0c2lkZSB0aGUg c2NvcGUgb2YgdGhlIHBsdWdpbiBzbyB5b3Ugd2lsbCBoYXZlIHRvIGV4cGVyaW1lbnQgaWYg aXQgY2F1c2VzIHlvdSBwcm9ibGVtcy48L3A+CgoJPGgzPkZpbGUgaGFuZGxpbmc8L2gzPgoK CTxwPlRoaXMgY29sdW1uIGJlZ2lucyB3aXRoIGEgc2VsZWN0IGxpc3Qgb2YgYWxsIGluc3Rh bGxlZCB0aGVtZXM7IHRoZSBjdXJyZW50IHRoZW1lIHNlbGVjdGVkLiBDaGFuZ2luZyB0aGUg aXRlbSBoZXJlIHdpbGwgaW1tZWRpYXRlbHkgYWxsb3cgeW91IHRvIGVkaXQgYW5vdGhlciB0 aGVtZS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3UgYXJlIGNvcHlpbmcgYW5kIHBhc3Rp bmcgZmlsZXMgZnJvbSBvbmUgdGhlbWUgdG8gYW5vdGhlciBhbmQgc2F2ZXMgeW91IGhhdmlu ZyB0byBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0IGZpcnN0LjwvcD4KCgk8cD5CZW5lYXRo IHRoYXQgYXJlIHR3byBidXR0b25zOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5OZXcgZmlsZTwvc3Bhbj4gOiBDcmVhdGUgYSBuZXcsIGVtcHR5IGZpbGUgaW4geW91 ciB0aGVtZSBkaXJlY3RvcnkuIE5vdGhpbmcgaXMgYWN0dWFsbHkgY3JlYXRlZCB1bnRpbCB5 b3UgaGl0IDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXQgdXNpbmcgdGhpcyBidXR0b24gZW5z dXJlcyB5b3UgYmVnaW4gd2l0aCBhIGNsZWFuIHNsYXRlIGFuZCBkb24mIzgyMTc7dCBhY2Np ZGVudGFsbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmaWxlIHlvdSB3ZXJlIGVkaXRpbmc8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUgbGlzdDwvc3Bhbj4gOiBBIHNo b3J0Y3V0IGJhY2sgdG8gdGhlIG1haW4gdGhlbWUgbGlzdCAoZXF1aXZhbGVudCB0byBjbGlj a2luZyB0aGUgPGVtPkFkbWluIHRoZW1lczwvZW0+IHRhYik8L2xpPgoJPC91bD4KCgk8cD5C ZWxvdyB0aG9zZSBidXR0b25zIGFyZSB1cCB0byBmb3VyIHNlY3Rpb25zIGNvbnRhaW5pbmcg YWxsIHRoZSAobm9uLWltYWdlKSBmaWxlcyB0aGF0IG1ha2UgdXAgeW91ciB0aGVtZS4gQ2xp Y2sgYSBmaWxlbmFtZSB0byBsb2FkIGl0IGludG8gdGhlIGNlbnRyYWwgdGV4dCBhcmVhIGZv ciBlZGl0aW5nLjwvcD4KCgk8aDQgaWQ9ImVkaXRfY3NzIj5TdHlsZXNoZWV0czwvaDQ+CgoJ PHAgY2xhc3M9InJlcXVpcmVkIj5GaWxlcyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1 dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5jc3M8L2Nv ZGU+PC9wPgoKCTxwPlRoZSBtZWF0IGFuZCBwb3RhdG9lcyBvZiB5b3VyIHRoZW1lLiBBZGQg YXMgbWFueSBzaGVldHMgYXMgeW91IGxpa2UgYW5kIGxvYWQgdGhlbSBmcm9tIHlvdXIgPHNw YW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZShzKS48L3A+CgoJPGg0IGlkPSJlZGl0 X2NzcyI+U3R5bGVwbGF0ZXM8L2g0PgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+RmlsZXMgY2Fu IGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3Nw YW4+IGVuZCBpbiA8Y29kZT4uc3NjPC9jb2RlPjwvcD4KCgk8cD5BIHNwZWNpYWwgdmVyc2lv biBvZiBhIHN0eWxlc2hlZXQgdGhhdCBhbGxvd3MgeW91IHRvIGRlZmluZSBjb25zdGFudHMg dGhyb3VnaG91dCB5b3VyIHNoZWV0LiBXcml0ZSB5b3VyIHN0eWxlc2hlZXQgaW4gZXhhY3Rs eSB0aGUgc2FtZSB3YXkgYXMgeW91IHdvdWxkIG5vcm1hbGx5IGJ1dCB3aGVyZSB5b3UgZmlu ZCB5b3Vyc2VsZiwgZm9yIGV4YW1wbGUsIHVzaW5nIHRoZSBzYW1lIGNvbG9yIHZhbHVlIHJl cGVhdGVkbHkgb3IgdGhlIHNhbWUgcnVsZXMgYmxvY2ssIHlvdSBjYW4gc2F2ZSB5b3Vyc2Vs ZiB0eXBpbmcgYnkgdXNpbmcgY29uc3RhbnRzOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPkBicmFuZGluZzogIzEyMzQ1NjsKI2hlYWRlciB7CiAgY29s b3I6IEBicmFuZGluZzsKfQpoMiB7CiAgY29sb3I6IEBicmFuZGluZzsKfQo8L2NvZGU+PC9w cmU+CgoJPHA+WW91IGNhbiBhbHNvIHNwZWNpZnkgd2hvbGUgcnVsZSBibG9ja3MgbGlrZSB0 aGlzICg8ZW0+Tm90ZSB0aGUgY29sb24gYWZ0ZXIgdGhlIGJsb2NrIG5hbWU8L2VtPikgOjwv cD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPkBteV9ibG9jazog ewogIG1hcmdpbjowIDIwcHg7CiAgYm9yZGVyOjNweCBzb2xpZCAjOTk5OwogIGZvbnQtc2l6 ZToxMjAlOwp9CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7CiAgcG9zaXRpb246cmVs YXRpdmU7CiAgQG15X2Jsb2NrOwp9CmgyIHsKICBAbXlfYmxvY2s7Cn0KPC9jb2RlPjwvcHJl PgoKCTxwPklmIHlvdSBwdXQgYWxsIHlvdXIgY29uc3RhbnRzIGF0IHRoZSB0b3Agb2YgdGhl IDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgdGhleSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUg Z2VuZXJhdGVkIGNzcyBmaWxlLjwvcD4KCgk8cD5XaGVuIHlvdSBzYXZlIGEgPGNvZGU+LnNz YzwvY29kZT4gZmlsZSwgYSBjb3JyZXNwb25kaW5nLW5hbWVkIDxjb2RlPi5jc3M8L2NvZGU+ IGZpbGUgd2lsbCBhbHNvIGJlIGNyZWF0ZWQuIFRoZSB0d28gd2lsbCBiZSBrZXB0IGluIHN5 bmMgYXMgZmFyIGFzIHByYWN0aWNhYmxlIChldmVuIGlmIHlvdSByZW5hbWUgdGhlIG9yaWdp bmFsIGZpbGUpLiBXaGVuIGl0IGNvbWVzIHRvIGRlbGV0aW9uIHRob3VnaCwgdGhleSBhcmUg dHJlYXRlZCBzZXBhcmF0ZWx5LiBUaGlzIGFsbG93cyB5b3UgdG8gZWl0aGVyIGtlZXAgdGhl IDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiBhcmNoaXZlIG9y IHJlbW92ZSBpdCBwcmlvciB0byBleHBvcnQuPC9wPgoKCTxoNCBpZD0iZWRpdF9qcyI+SmF2 YXNjcmlwdDwvaDQ+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5GaWxlcyBjYW4gYmUgYW55IHZh bGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGlu IDxjb2RlPi5qczwvY29kZT48L3A+CgoJPHA+QW55IHRyaWNrZXJ5IHlvdSBtYXkgd2lzaCB0 byBlbXBsb3kgaW4geW91ciB0aGVtZSBjYW4gYmUgd3JpdHRlbiBpbiB0aGVzZSBmaWxlcy4g UmVtZW1iZXIgdGhhdCBqUXVlcnkgaXMgbG9hZGVkIGJ5IGRlZmF1bHQgb24gdGhlIGFkbWlu IHNpZGUgc28geW91IGNhbiBwbGF5IHdpdGggdGhhdC48L3A+CgoJPGg0IGlkPSJlZGl0X3Bo cCI+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L2g0PgoKCTxwIGNsYXNzPSJyZXF1 aXJlZCI+T25lIGZpbGUgPHN0cm9uZz5tdXN0PC9zdHJvbmc+IGJlIG5hbWVkIGV4YWN0bHkg dGhlIHNhbWUgYXMgeW91ciB0aGVtZSwgaS5lLiA8Y29kZT5zbWRfQmx1ZU1lYW5pZS5waHA8 L2NvZGU+LiBBbnkgb3RoZXIgZmlsZXMgbXVzdCBlbmQgaW4gPGNvZGU+LnBocDwvY29kZT48 L3A+CgoJPHA+Q29uc3VsdCB0aGUgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm5ldC93 aWtpL2luZGV4LnBocD90aXRsZT1DcmVhdGluZ19hbl9BZG1pbl9TaWRlX1RoZW1lIj5BZG1p biBTaWRlIHRoZW1lIGd1aWRlPC9hPiBvbiBUZXh0Ym9vayBmb3IgdGhlIHJ1bGVzIG9uIG1h a2luZyB0aGVtZXMuIE5vdGUgdGhhdCBjb3JydXB0IHRoZW1lcyBhcmUgZGV0ZWN0ZWQgdG8g dGhlIGJlc3Qgb2YgdGhlIHBsdWdpbiYjODIxNztzIGFiaWxpdHkgYW5kIHlvdSBtYXkgbm90 IGV4cG9ydCwgYmFzZSBvciBzd2l0Y2ggdG8gYW55IHRoZW1lIHRoYXQgaXMgYnJva2VuLjwv cD4KCgk8aDQgaWQ9ImVkaXRfb3RoZXIiPk90aGVyczwvaDQ+CgoJPHA+QW55IGZpbGVzIHRo YXQgYXJlIG5vdCBvZiB0aGUgYWJvdmUgdGhyZWUgdHlwZXMgKGFuZCBhcmUgbm90IGltYWdl cykgYXBwZWFyIGhlcmUuIFlvdSB3aWxsIHByb2JhYmx5IG5ldmVyIHNlZSB0aGlzIHNlY3Rp b24uIElmIHlvdSBkbyB0cnkgdG8gY3JlYXRlIGEgZmlsZSB0aGF0IGlzIG5vdCBvZiB0aGUg YWJvdmUgdGhyZWUgdHlwZXMsIGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZC4gWW91IG11c3Qg aGl0IDxlbT5TYXZlPC9lbT4gYWdhaW4gdG8gY29uZmlybSB5b3UgcmVhbGx5IHdpc2ggdG8g Y3JlYXRlIHRoZSBmaWxlLjwvcD4KCgk8aDMgaWQ9ImFib3V0Ij5NYW5pZmVzdDwvaDM+CgoJ PHA+SW4geW91ciBtYWluIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgaXMg YSBmdW5jdGlvbiBjYWxsZWQgPGNvZGU+bWFuaWZlc3QoKTwvY29kZT4gd2hpY2ggY29udGFp bnMgaW5mbyBhYm91dCB5b3UgYW5kIHlvdXIgdGhlbWUuIEVkaXQgdGhlIHZhbHVlcyBoZXJl IHRvIHN0YW1wIHlvdXIgbWFyayBvbiB0aGUgdGhlbWUuIE5vdGUgdGhhdCBpZiB5b3VyIGRl c2NyaXB0aW9uIGNvbnRhaW5zIGFwb3N0cm9waGVzIHRoZXkgbXVzdCBiZSA8ZW0+ZXNjYXBl ZDwvZW0+IGJ5IHByZWNlZGluZyB0aGVtIHdpdGggYSBzaW5nbGUgYmFja3NsYXNoIDxjb2Rl Plw8L2NvZGU+LiBlLmcuPC9wPgoKPHByZT48Y29kZT4mIzM5O2Rlc2NyaXB0aW9uJiMzOTsg PSZndDsgJiMzOTtEb25cJiMzOTt0IGZlYXIgdGhlIHJlYXBlciEmIzM5OywKPC9jb2RlPjwv cHJlPgoKCTxoMiBpZD0icGVydXNlciI+UGVyLXVzZXIgdGhlbWUgc2VsZWN0aW9uPC9oMj4K Cgk8cD5JZiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWxsb3cgcGVyLXVzZXIgdGhl bWVzLCBhIG5ldyB0YWIgYXBwZWFycyB1bmRlciB0aGUgQWRtaW4gdGFiIG9mIGFsbCB1c2Vy cyAoZXhjZXB0IGFkbWluaXN0cmF0b3JzKS4gVGhpcyBzaW1wbHkgZGlzcGxheXMgYWxsIGF2 YWlsYWJsZSB0aGVtZXMgJiM4MjEyOyBvbmVzIHRoYXQgdGhlIGFkbWluaXN0cmF0b3IgaGFz IGV4cGxpY2l0bHkgYWxsb3dlZC48L3A+CgoJPHA+Q2xpY2tpbmcgYSB0aGVtZSBuYW1lIG9y IHRodW1ibmFpbCB3aWxsIGltbWVkaWF0ZWx5IHN3aXRjaCB0byB0aGF0IHRoZW1lIHVudGls IHRoZSB1c2VyIGNob29zZXMgYW5vdGhlciBvciB0aGUgYWRtaW5pc3RyYXRvciBjaGFuZ2Vz IHRoZW1lIHN5c3RlbS48L3A+CgoJPGgyIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+ CgoJPHVsPgoJCTxsaT4xMiBKdW4gMDkgfCAwLjEgfCBJbml0aWFsIHB1YmxpYyBiZXRhPC9s aT4KCQk8bGk+MDMgU2VwIDA5IHwgMC4xMSB8IEltcHJvdmVkIFRleHRnYXJkZW4gdGhlbWUg ZmVlZCBhbmQgbGlua3MgOyBpbXByb3ZlZCBmaWxlIHN1cHBvcnQgKGJvdGggdGhhbmtzIHRo ZWJvbWJzaXRlKSA7IG1hZGUgZ2xvYmFsIHRoZW1lIG1vcmUgb2J2aW91cyA7IGFsdGVyZWQg cHJlZnMgdGFiIGEgYml0IDsgYWRkZWQgPGNvZGU+LnNzYzwvY29kZT4gc3VwcG9ydCA7IGln bm9yZWQgLnN2biBzdWJkaXJzIChhbGwgdGhhbmtzIHBpZW1hbikgOyBpbXByb3ZlZCB3YXJu aW5nIG1lc3NhZ2VzIDsgbWlzYyBmaXhlcyBhbmQgaG91c2VrZWVwaW5nPC9saT4KCQk8bGk+ MDIgTm92IDA5IHwgMC4xMiB8IFJlZHVjZWQgdGhlbWUgZmVlZCBjbHV0dGVyIGluIHRoZSBw cmVmcyB0YWJsZTwvbGk+CgkJPGxpPjA0IE5vdiAwOSB8IDAuMTMgfCBSZW1vdmVkIGVyZWdf cmVwbGFjZSB0byBjb25mb3JtIHdpdGggUEhQNS4zKyAodGhhbmtzIHRoZWJvbWJzaXRlKSA7 IGNoYW5nZWQgJiM4MjE2O2dsb2JhbCYjODIxNzsgdG8gJiM4MjE2O2RlZmF1bHQmIzgyMTc7 IDsgZml4ZWQgcm9ndWUgdW50cmFuc2xhdGVkIHN0cmluZzwvbGk+Cgk8L3VsPgoKCTxoMiBp ZD0iY3JlZGl0cyI+Q3JlZGl0czwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gd291bGQgbm90IGhh dmUgZXhpc3RlZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVhcyBhbmQgZ2VuaXVzIG9m IHRoZSBUZXh0cGF0dGVybiBkZXZlbG9wbWVudCB0ZWFtLCBlc3BlY2lhbGx5IFJvYmVydCBX ZXR6bG1heXIgZm9yIHRoZSB0aGVtZSBzdXBwb3J0LiBQbHVzIG9mIGNvdXJzZSB0aGUgYXJt eSBvZiBiZXRhIHRlc3RlcnMsIGlkZWFzIGhhbXN0ZXJzIGFuZCB0aXJlbGVzcyB0aGVtZSBh ZHZvY2F0ZXMsIG1vc3Qgbm90YWJseSBTdHVhcnQgQnV0Y2hlciwgRGFsZSBDaGFwbWFuLCBE YXZlIERlU2FuZHJvLCBhbmQgTWlrZSBEZW5uaXMuIEt1ZG9zIGFuZCB0aGFua3MgdG8geW91 IGFsbC48L3A+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+Cjxz dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQoj c21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291 cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZG Q0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVy OjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpi bG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxw IGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFy Z2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJv dHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsg Zm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9y OiAjMjc1Njg1OyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1z cGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2Fz ZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJv bGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2lu OiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0 bm0geyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojMzNkOyB9CiNzbWRfaGVscCAubWFuZCB7 IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAg dGFibGUge3dpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFl bTt9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7 IHBhZGRpbmc6LjVlbSAwO30KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFy ZTsgfQojc21kX2hlbHAgLnJlcXVpcmVkIHtjb2xvcjpyZWQ7fQojc21kX2hlbHAgbGkgeyBt YXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10 b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtz OjM6Im1kNSI7czozMjoiNGI1NTVhYjgzNzc1ZmM5Y2Y1ZTY5ZmQ2ZjExODZlZDgiO30=