# Name: smd_admin_themes v0.21 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjIxIjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czoxMTE0NjQ6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwg JHNtZF9hdF9ldmVudCwgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfYWRtX2V2ZW50LCAkc21k X2F0X3ByaXZzLCAkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X3ByZWZzLCAkcHJlZnMsICRz bWRfYXRfZmVlZHVybCwgJHNtZF9hdF90aGVtZV9yZXBvOw0KDQoJJHNtZF9hdF9ldmVudCA9 ICdzbWRfYXQnOw0KCSRzbWRfYXRfZnVsbGV2ID0gJ3NtZF9hZG1pbl90aGVtZXMnOw0KCSRz bWRfYXRfYWRtX2V2ZW50ID0gJ3NtZF9hZG1hdCc7DQoJJHNtZF9hdF9wcml2cyA9ICcxJzsN Cgkkc21kX2F0X2ZlZWR1cmwgPSAnaHR0cDovL3RleHRnYXJkZW4ub3JnL2FkbWluLXRoZW1l cy1mZWVkJzsNCgkkc21kX2F0X3RoZW1lX3JlcG8gPSAnaHR0cDovL3RleHRnYXJkZW4ub3Jn L2FkbWluaXN0cmF0aW9uLXRoZW1lcyc7DQoNCgkvLyBUaHVtYm5haWwgZGltZW5zaW9ucw0K CSRzbWRfY29yZV90aGVtZXMgPSBhcnJheSgnY2xhc3NpYycsJ3JlbW9yYScpOw0KDQoJYWRk X3ByaXZzKCRzbWRfYXRfZXZlbnQsICRzbWRfYXRfcHJpdnMpOw0KCWFkZF9wcml2cygncGx1 Z2luX3ByZWZzLicuJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfcHJpdnMpOw0KCXJlZ2lzdGVy X3RhYigiZXh0ZW5zaW9ucyIsICRzbWRfYXRfZXZlbnQsIHNtZF9hdF9nVHh0KCd0YWJfbmFt ZScpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2F0X29wdGlvbnMnLCAncGx1Z2luX3By ZWZzLicuJHNtZF9hdF9mdWxsZXYpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfd2Vs Y29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLicuJHNtZF9hdF9mdWxsZXYpOw0KCXJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfYXQnLCAkc21kX2F0X2V2ZW50KTsNCglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX2F0X3BlcicsICdhZG1pbl9zaWRlJywgJ3RoZW1lX25hbWUnKTsNCglyZWdpc3Rl cl9jYWxsYmFjaygnc21kX2F0X2xpbmsnLCAncHJlZnNfdWknLCAndGhlbWVfbmFtZScpOw0K CXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfdXBsb2FkX2Zvcm0nLCAkc21kX2F0X2V2ZW50 LidfdWknLCAndXBsb2FkX2Zvcm0nKTsNCg0KCWlmIChpc3NldCgkcHJlZnNbJ3NtZF9hdF9z eXN0ZW0nXSkgJiYgJHByZWZzWydzbWRfYXRfc3lzdGVtJ10gPT0gMikgew0KCQlhZGRfcHJp dnMoJHNtZF9hdF9hZG1fZXZlbnQsICcyLDMsNCw1LDYnKTsNCgkJcmVnaXN0ZXJfdGFiKCJh ZG1pbiIsICRzbWRfYXRfYWRtX2V2ZW50LCBzbWRfYXRfZ1R4dCgnc2tpbm5lcicpKTsNCgkJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hZG1hdCcsICRzbWRfYXRfYWRtX2V2ZW50KTsNCgl9 DQoNCgkvLyBEb3VibGUgYXJyYXk6IDFzdCBpcyBhIGxpc3Qgb2YgY3VycmVudCBwcmVmcyBh bmQgdGhlaXIgZGVmYXVsdHMsDQoJLy8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMg dGhhdCBtYXkgbmVlZCByZW1vdmluZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1w dHkpDQoJJHNtZF9hdF9wcmVmcyA9IGFycmF5KA0KCQlhcnJheSgNCgkJCSdzbWRfYXRfY2Fz ZV9zb3J0JyA9PiAnMScsDQoJCQknc21kX2F0X2NydXNoJyA9PiAnemlwJywNCgkJCSdzbWRf YXRfdHcnID0+ICcyNjAnLA0KCQkJJ3NtZF9hdF90aCcgPT4gJzE1MCcsDQoJCQknc21kX2F0 X2xheW91dCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9zeXN0ZW0nID0+ICcwJywNCgkJCSdzbWRf YXRfZ2xvYmFsX3NraW4nID0+ICcnLA0KCQkJJ3NtZF9hdF9ncm91cF9saXN0JyA9PiAnJywN CgkJCSdzbWRfYXRfdXNlcl9saXN0JyA9PiAnJywNCgkJKSwNCgkJYXJyYXkoDQoJCQknc21k X2F0X25vdF91c2VkX2FueV9tb3JlJyA9PiAnJywNCgkJKQ0KCSk7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0KCRldmVudCwgJHN0ZXApIHsN CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdzbWRfYXRfY2xv bmUnLA0KCQkJJ3NtZF9hdF9kZWxldGUnLA0KCQkJJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLA0K CQkJJ3NtZF9hdF9lZGl0JywNCgkJCSdzbWRfYXRfZXhwb3J0JywNCgkJCSdzbWRfYXRfaW1w b3J0JywNCgkJCSdzbWRfYXRfbmV3ZmlsZScsDQoJCQknc21kX2F0X3ByZWZzX2luc3RhbGwn LA0KCQkJJ3NtZF9hdF9wcmVmc19yZW1vdmUnLA0KCQkJJ3NtZF9hdF9wcmVmc191cGRhdGUn LA0KCQkJJ3NtZF9hdF9yZW5hbWUnLA0KCQkJJ3NtZF9hdF9zYXZlJywNCgkJCSdzbWRfYXRf c2V0dXAnLA0KCQkJJ3NtZF9hdF9zd2l0Y2gnLA0KCQkJJ3NtZF9hdF91cGxvYWRfaW1hZ2Un LA0KCQkJJ3NtZF9hdF9jaGFuZ2VfcGFnZWJ5JywNCgkJKSkpIHsNCgkJc21kX2F0X2xpc3Qo JycpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfd2VsY29tZSgkZXZlbnQsICRzdGVwKSB7DQoJJG1zZyA9ICcnOw0KCXN3aXRjaCAoJHN0 ZXApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9hdF9wcmVmc19pbnN0YWxsKDAp Ow0KCQkJYnJlYWs7DQoJCWNhc2UgJ2RlbGV0ZWQnOg0KCQkJc21kX2F0X3ByZWZzX3JlbW92 ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1zZzsNCn0NCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9hdF9saW5rKCkgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50Ow0KCXJldHVy biBocmVmKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksICc/ZXZlbnQ9Jy4kc21kX2F0X2V2 ZW50KTsNCn0NCg0KLy8gQSBzdHViIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGEgJG1l c3NhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9kaXNwbGF5KCkgew0KCQlzbWRfYXRfbGlzdCgnJyk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2xp c3QoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudCwgJHByZWZzLCAkc21k X2F0X3ByZWZzLCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfZnVsbGV2LCAk c21kX2F0X2ZlZWR1cmwsICRzbWRfYXRfdGhlbWVfcmVwbzsNCg0KCSRhdF9wcmVmcyA9IHNt ZF9hdF9nZXRfcHJlZnMoKTsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgnc3RlcCcsICdwYWdl JywgJ2NyaXQnLCAnc2VhcmNoX21ldGhvZCcsICdza2luJykpKTsNCgkkbWVzc2FnZSA9ICgk bWVzc2FnZSkgPyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCSRsYXlvdXQgPSAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddIDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAk YXRfcHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J10p ICsgMTA7DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3By ZWZzWydzbWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCddKSArIDgw Ow0KCSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0k c21kX2F0X2Z1bGxldiN1c2FnZSI7DQoNCgkkcGFnZWJ5ID0gKGdwcygncXR5JykpID8gZ3Bz KCdxdHknKSA6ICgoY3MoJ3NtZF9hdF9wYWdlYnknKSkgPyBjcygnc21kX2F0X3BhZ2VieScp IDogMTUpOw0KCSRtYXhfZmlsZV9zaXplID0gMTUwICogMTAyNDsgLy8gYSBiaXQgYXJiaXRy YXJ5IQ0KDQoJJGN1cnJfc2tpbiA9IChzbWRfYXRfZXhpc3RzKCR0aGVtZS0+bmFtZSkpID8g JHRoZW1lLT5uYW1lIDogJ2NsYXNzaWMnOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfcmVhZF9z a2lucygpOw0KCSRjcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCk7DQoJJHVuY3J1 c2hlcnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9ucygnaW1wb3J0Jyk7DQoJJGJhc2VzID0gYXJy YXkoKTsNCg0KCS8vIEdldCBhIGxpc3Qgb2YgYW5jZXN0b3IgdGhlbWVzIChpLmUuIGRlcGVu ZGVuY2llcykNCglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luYSkgew0KCQkkbWFuaWZl c3QgPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW5hKTsNCgkJaWYgKCRtYW5pZmVzdCkgew0K CQkJaWYgKCRtYW5pZmVzdFsnYmFzZWRfb24nXSkgew0KCQkJCSRiYXNlc1tdID0gJG1hbmlm ZXN0WydiYXNlZF9vbiddOw0KCQkJfQ0KCQl9DQoJfQ0KCSRiYXNlcyA9IGFycmF5X3VuaXF1 ZSgkYmFzZXMpOw0KDQoJcGFnZXRvcChzbWRfYXRfZ1R4dCgnbWFuYWdlX2xibCcpLCRtZXNz YWdlKTsNCg0KCS8vIEhhbmRsZSBwYWdpbmcNCgkkdG90YWwgPSBjb3VudCgkc2tpbl9saXN0 KTsNCgkkbGltaXQgPSBtYXgoQCRwYWdlYnksIDE1KTsNCglsaXN0KCRwYWdlLCAkb2Zmc2V0 LCAkbnVtUGFnZXMpID0gcGFnZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsNCgkkc2tpbl9s aXN0ID0gYXJyYXlfc2xpY2UoJHNraW5fbGlzdCwgJG9mZnNldCwgJGxpbWl0KTsNCg0KCSRx cyA9IGFycmF5KA0KCQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJwYWdlIiA9PiAk cGFnZSwNCgkpOw0KDQoJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj cmlwdCI+DQpmdW5jdGlvbiBzbWRfZ2V0Y3J1c2goc2tpbikgew0KCXNraW5IYW5kbGUgPSAi Y3J1c2hfIitza2luOw0KCWpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rpb24oKSB7 DQoJCWJveCA9IGpRdWVyeSh0aGlzKTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09IHNraW5I YW5kbGUpIHsNCgkJCWlmIChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7DQoJCQkJ Ym94LnNsaWRlRG93bignZmFzdCcpOw0KCQkJfSBlbHNlIHsNCgkJCQlib3guc2xpZGVVcCgn ZmFzdCcpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJ fQ0KCX0pOw0KCWpRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGEnKS5jbGljayhmdW5jdGlvbigp IHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIoImhyZWYiLCAiP2V2ZW50PXskc21kX2F0X2V2ZW50 fSZza2luPSIrc2tpbisiJnN0ZXA9c21kX2F0X2V4cG9ydCZjcnVzaD0iK2pRdWVyeSgnIycr c2tpbkhhbmRsZSsnIGlucHV0W3R5cGU9XCdyYWRpb1wnXTpjaGVja2VkJykudmFsKCkrIiZw YWdlPSIreyRwYWdlfSk7DQoJfSk7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBz bWRfZ2V0dmFsKHNraW4sIHN0ZXApIHsNCglza2luSGFuZGxlID0gInBvcF8iK3NraW47DQoJ alF1ZXJ5KCcuc21kX3BvcHVwJykuZWFjaChmdW5jdGlvbigpIHsNCgkJYm94ID0galF1ZXJ5 KHRoaXMpOw0KCQlpZiAoYm94LmF0dHIoImlkIikgPT0gc2tpbkhhbmRsZSkgew0KCQkJaWYg KGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9uZSIpIHsNCgkJCQlib3guc2xpZGVEb3duKCdm YXN0Jyk7DQoJCQkJalF1ZXJ5KCcjJytza2luSGFuZGxlKycgaW5wdXQnKS5mb2N1cygpOw0K CQkJfSBlbHNlIHsNCgkJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQkJfQ0KCQl9IGVsc2Ug ew0KCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgnIycrc2tp bkhhbmRsZSsnIGEnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KHRoaXMpLmF0dHIo ImhyZWYiLCAiP2V2ZW50PXskc21kX2F0X2V2ZW50fSZza2luPSIrKChza2luPT0nbmV3Jyk/ ICcnIDogc2tpbikrIiZzdGVwPSIrc3RlcCsiJm5ld19za2luPSIralF1ZXJ5KCcjJytza2lu SGFuZGxlKycgaW5wdXQnKS52YWwoKSsiJnBhZ2U9Iit7JHBhZ2V9KTsNCgl9KTsNCg0KCWpR dWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0Jykua2V5dXAoZnVuY3Rpb24gKCkgew0KCQl0 aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9ceDdmLVx4ZmZd L2csJycpOw0KCQl3aGlsZSAodGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIHRoaXMudmFsdWUu c3Vic3RyaW5nKDAsMSkubWF0Y2goL1swLTldLykpIHsNCgkJCXRoaXMudmFsdWUgPSB0aGlz LnZhbHVlLnN1YnN0cmluZygxKTsNCgkJfQ0KCX0pOw0KDQoJcmV0dXJuIGZhbHNlOw0KfQ0K PC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLnNtZF9oaWRkZW4gew0KCWRp c3BsYXk6bm9uZTsNCgltYXJnaW46NXB4Ow0KfQ0KI3NtZF9jb250cm9sIHsNCgltYXJnaW46 MCBhdXRvOw0KfQ0KI3NtZF9jb250cm9sIHRkIC5wdWJsaXNoIHsNCgltYXJnaW4tbGVmdDo1 MHB4Ow0KfQ0KI3NtZF9jb250cm9sIC51cGxvYWQtZm9ybSB7DQoJcGFkZGluZzowOw0KfQ0K LnNtZF9ncmlkIHsNCgl3aWR0aDo5NjBweDsNCgltYXJnaW46MCBhdXRvOw0KfQ0KLnNtZF9j ZWxsIHsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6MTBweDsNCgltYXJnaW46MTBweDsNCgli b3JkZXI6MXB4IHJpZGdlICNjY2M7DQoJd2lkdGg6eyR0d31weDsNCgloZWlnaHQ6eyR0aH1w eDsNCn0NCi5zbWRfY2VsbDpob3ZlciB7DQoJYmFja2dyb3VuZDojZGRkOw0KfQ0KLnNtZF9j bGVhciB7DQoJY2xlYXI6Ym90aDsNCn0NCi5zbWRfYXV0aCwNCi5zbWRfYWN0aW9ucyB7DQoJ dGV4dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KLnNtZF9zbWFsbHByaW50 IHsNCglmb250LXNpemU6NzUlOw0KCXRleHQtYWxpZ246Y2VudGVyOw0KCW1hcmdpbi10b3A6 LTEycHg7DQp9DQo8L3N0eWxlPg0KRU9KUzsNCg0KCS8vIExpc3QgdGhlIGF2YWlsYWJsZSBz a2lucw0KCWVjaG8gc3RhcnRUYWJsZSgnc21kX2NvbnRyb2wnLCcnLCcnLDUpOw0KCWVjaG8g dHIoDQoJCXRkYSh1cGxvYWRfZm9ybShzbWRfYXRfZ1R4dCgnaW5zdGFsbF9za2luJyksICcn LCAnc21kX2F0X2ltcG9ydCcsICRzbWRfYXRfZXZlbnQsICcnLCAkbWF4X2ZpbGVfc2l6ZSku YnIuJzxkaXYgY2xhc3M9InNtZF9zbWFsbHByaW50Ij4nLnNtZF9hdF9nVHh0KCdzdXBwb3J0 ZWRfaW1wb3J0JywgYXJyYXkoJ3t0eXBlc30nID0+IGpvaW4oJywgJywgJHVuY3J1c2hlcnMp KSkuJzwvZGl2PicsICcgY29sc3Bhbj0iMiInKQ0KCQkudGRhKGZvcm0oZklucHV0KCdzdWJt aXQnLCAnc3VibWl0Jywgc21kX2F0X2dUeHQoJ3NldHVwJyksICdwdWJsaXNoJykuc0lucHV0 KCdzbWRfYXRfc2V0dXAnKS5lSW5wdXQoJHNtZF9hdF9ldmVudCkpLCcgY29sc3Bhbj0iNiIg c3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4IicpDQoJKTsNCgllY2hvIGVuZFRhYmxlKCk7 DQoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgYWN0aW9uPSIn LmpvaW5fcXMoJHFzKS4nIj4nOw0KCSRuZXdidG4gPSAnICcuJzxhIGNsYXNzPSJuYXZsaW5r IiBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2Nsb25lJy5h Lidza2luPSIgb25jbGljaz0icmV0dXJuIHNtZF9nZXR2YWwoXCduZXdcJywgXCdzbWRfYXRf Y2xvbmVcJyk7Ij4nLnNtZF9hdF9nVHh0KCduZXcnKS4nPC9hPicNCgkJLiAnPGRpdiBpZD0i cG9wX25ldyIgY2xhc3M9InNtZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9n VHh0KCduZXdfc2tpbicpLic8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNtZF90 ZXh0X25hbWUiIHZhbHVlPSIiIC8+IDxhIGhyZWY9IiMiPlsnLnNtZF9hdF9nVHh0KCdjb25m aXJtJykuJ108L2E+PC9kaXY+JzsNCgkkcmVwb2J0biA9ICcgJy4nPGEgY2xhc3M9Im5hdmxp bmsiIGhyZWY9IicuJHNtZF9hdF90aGVtZV9yZXBvLiciPicuc21kX2F0X2dUeHQoJ2ZpbmRf dGhlbWUnKS4nPC9hPic7DQoJJGhkcm93ID0gaGVkKHNtZF9hdF9nVHh0KCdsaXN0X3RpdGxl JykuICcgJy4gc21kX2F0X2dUeHQoJ2hlbHBfbGluaycsIGFycmF5KCd7bGlua30nID0+ICRo ZWxwTGluaykpLCAzKTsNCglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gc3RhcnRUYWJs ZSgnbGlzdCcsJycsJycsNSk7DQoJCWVjaG8gdHIoDQoJCQl0ZGEoJGhkcm93LiRyZXBvYnRu LiRuZXdidG4sICcgY29sc3Bhbj0iNyInKQ0KCQkpOw0KCQllY2hvIHRyKA0KCQkJYXNzSGVh ZCgNCgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9yJywNCgkJCQln VHh0KCd2ZXJzaW9uJyksDQoJCQkJJ2Rlc2NyaXB0aW9uJywNCgkJCQlzbWRfYXRfZ1R4dCgn YWN0aW9ucycpDQoJCQkJKQ0KCQkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxkaXYgY2xhc3M9 InNtZF9ncmlkIj48ZGl2IGNsYXNzPSJzbWRfbmV3cm93Ij4nLiRoZHJvdy4kcmVwb2J0bi4k bmV3YnRuLic8L2Rpdj4nOw0KCX0NCglpZiggaXNfY2FsbGFibGUoJ2Zzb2Nrb3BlbicpICkN CgkJJHRyYW5zcG9ydCA9ICdmc29jayc7DQoJZWxzZWlmKCBpc19jYWxsYWJsZSgnY3VybF9p bml0JykgKSB7DQoJCSR0cmFuc3BvcnQgPSAnY3VybCc7DQoJfSBlbHNlIHsNCgkJJHRyYW5z cG9ydCA9ICcnOw0KCX0NCg0KCSRmZWVkID0gJyc7DQoJc3dpdGNoICgkdHJhbnNwb3J0KSB7 DQoJCWNhc2UgJ2N1cmwnOg0KCQkJJGMgPSBjdXJsX2luaXQoKTsNCgkJCWN1cmxfc2V0b3B0 KCRjLCBDVVJMT1BUX1VSTCwgJHNtZF9hdF9mZWVkdXJsKTsNCgkJCWN1cmxfc2V0b3B0KCRj LCBDVVJMT1BUX1JFRkVSRVIsIGh1KTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1JF VFVSTlRSQU5TRkVSLCB0cnVlKTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1ZFUkJP U0UsIGZhbHNlKTsNCgkJCWN1cmxfc2V0b3B0KCRjLCBDVVJMT1BUX1RJTUVPVVQsIDEwKTsN CgkJCSRmZWVkID0gY3VybF9leGVjKCRjKTsNCgkJCWJyZWFrOw0KCQljYXNlICdmc29jayc6 DQoJCQkkdXJsID0gcGFyc2VfdXJsKCRzbWRfYXRfZmVlZHVybCk7DQoJCQkkZnAgPSBmc29j a29wZW4gKCR1cmxbJ2hvc3QnXSwgODAsICRlcnJubywgJGVycnN0ciwgMTApOw0KCQkJJHFy eSA9ICdHRVQgJy4kc21kX2F0X2ZlZWR1cmw7DQoJCQkkcXJ5IC49ICIgSFRUUC8xLjBcclxu XHJcbiI7DQoNCgkJCWZwdXRzKCRmcCwgJHFyeSk7DQoJCQlzdHJlYW1fc2V0X3RpbWVvdXQo JGZwLCAxMCk7DQoJCQkkaW5mbyA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRmcCk7DQoNCgkJ CSRoZHJzID0gdHJ1ZTsNCgkJCXdoaWxlICgoIWZlb2YoJGZwKSkgJiYgKCEkaW5mb1sndGlt ZWRfb3V0J10pKSB7DQoJCQkJJGxpbmUgPSBmZ2V0cygkZnAsIDgxOTIpOw0KCQkJCSRsaW5l ID0gcHJlZ19yZXBsYWNlKCJbXHJcbl0iLCAiIiwgJGxpbmUpOw0KCQkJCWlmICgkaGRycyA9 PSBmYWxzZSkgew0KCQkJCQkkZmVlZCAuPSAkbGluZS4iXG4iOw0KCQkJCX0NCgkJCQlpZiAo c3RybGVuKCRsaW5lKSA9PSAwKSAkaGRycyA9IGZhbHNlOw0KCQkJfQ0KCQkJaWYgKCRpbmZv Wyd0aW1lZF9vdXQnXSkgew0KCQkJCSRmZWVkID0gJyc7DQoJCQl9DQoJCQlmY2xvc2UoJGZw KTsNCgkJCWJyZWFrOw0KCQlkZWZhdWx0Og0KCQkJJGZlZWQgPSAnJzsNCgl9DQoNCgkkc21k X2F0X3ZsYXN0ID0gJyc7DQoJJGZlZWRzID0gYXJyYXkoKTsNCglpZiAoaXNzZXQoJHByZWZz WydzbWRfYXRfdmVyc2lvbnMnXSkgJiYgaXNzZXQoJHByZWZzWydzbWRfYXRfdmxhc3QnXSkp IHsNCgkJaWYgKHRpbWUoKSAtICRwcmVmc1snc21kX2F0X3ZsYXN0J10gPCA4NjQwMCkgew0K CQkJLy8gTGFzdCB1cGRhdGVkIHdpdGhpbiB0aGUgbGFzdCBkYXksIHNvIHJlYWQgdGhlIGNh Y2hlZCB2ZXJzaW9uIG51bWJlcnMNCgkJCSRmZWVkcyA9IHVuc2VyaWFsaXplKCRwcmVmc1sn c21kX2F0X3ZlcnNpb25zJ10pOw0KCQl9DQoJfQ0KCWlmICghJGZlZWRzIHx8IGdwcygncmVh ZF92ZXJzaW9ucycpKSB7DQoJCSRmZWVkcyA9IHNtZF9hdF9mZWVkKCRmZWVkKTsNCgkJJGlu c3RhbGxlZF9mZWVkID0gYXJyYXkoKTsNCgkJJGZlZWRzID0gKGlzX2FycmF5KCRmZWVkcykp ID8gJGZlZWRzIDogYXJyYXkoKTsNCg0KCQkvLyBPbmx5IHJlY29yZCB0aGUgdmVyc2lvbiBp bmZvIGZyb20gdGhlbWVzIHRoYXQgYXJlIGluc3RhbGxlZA0KCQlmb3JlYWNoKCRza2luX2xp c3QgYXMgJHNraW5fbmFtZSkgew0KCQkJJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2Uo J18nLCAnLScsICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIHRoZSB1cmxfdGl0bGUNCgkJ CWlmIChhcnJheV9rZXlfZXhpc3RzKCRmZWVkX3NraW5fbmFtZSwgJGZlZWRzKSkgew0KCQkJ CSRpbnN0YWxsZWRfZmVlZFskZmVlZF9za2luX25hbWVdID0gJGZlZWRzWyRmZWVkX3NraW5f bmFtZV07DQoJCQl9DQoJCX0NCgkJc2V0X3ByZWYoJ3NtZF9hdF92bGFzdCcsIHRpbWUoKSwg JHNtZF9hdF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCXNldF9wcmVm KCdzbWRfYXRfdmVyc2lvbnMnLCBzZXJpYWxpemUoJGluc3RhbGxlZF9mZWVkKSwgJHNtZF9h dF9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJfQ0KDQoJZm9yZWFjaCAo JHNraW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7DQoJCS8vIFJlYWQgZWFjaCBtYW5pZmVzdCBh bmQgc2V0IHVwIHRoZSBsYWJlbHMNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygk c2tpbl9uYW1lKTsNCgkJJGZlZWRfc2tpbl9uYW1lID0gc3RyX3JlcGxhY2UoJ18nLCAnLScs ICRza2luX25hbWUpOyAvLyBVbnNhbml0aXplIGZvciB1cmxfdGl0bGUgbWF0Y2hpbmcNCg0K CQkkdGh1bWJuYWlsID0gc21kX2F0X2dldF90aHVtYigkc2tpbmZvLCAxKTsNCgkJJHRoaXNf c2tpbiA9ICgkc2tpbmZvKSA/ICgoJHNraW5fbmFtZSA9PSAkY3Vycl9za2luKSA/IHN0cm9u Zygkc2tpbmZvWydkbmFtZSddKSA6ICRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5fbmFtZTsN CgkJJGlzX2dibCA9ICgkc2tpbl9uYW1lID09ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9z a2luJ10pID8gc21kX2F0X2dUeHQoJ2lzX2dsb2JhbCcpIDogJyc7DQoJCSR0aHVtcm93ID0g JzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfc3dpdGNo Jy5hLiduZXh0c3RlcD1zbWRfYXRfbGlzdCcuYS4nc2tpbj0nLiRza2luX25hbWUuYS4ncGFn ZT0nLiRwYWdlLiciIHRpdGxlPSInLnNtZF9hdF9nVHh0KCdhcHBseV9za2luJykuJyI+Jy4k dGhpc19za2luLiRpc19nYmwuKCgkc2tpbmZvICYmICRza2luZm9bJ2Jhc2VkX29uJ10pID8g c21kX2F0X2dUeHQoJ2Jhc2VkX29uJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW5mb1snYmFz ZWRfb24nXSkpIDogJycpLigoJHRodW1ibmFpbCkgPyAnPGRpdj4nLiR0aHVtYm5haWwuJzwv ZGl2PicgOiAnJykuJzwvYT4nOw0KCQkkYXV0aHJvdyA9ICgoJHNraW5mbyAmJiBzdHJwb3Mo JHNraW5mb1snYXV0aG9yX3VyaSddLCAiaHR0cDovLyIpID09PSAwKSA/ICc8YSBocmVmPSIn LiRza2luZm9bJ2F1dGhvcl91cmknXS4nIj4nLiRza2luZm9bJ2F1dGhvciddLic8L2E+JyA6 ICgoJHNraW5mbykgPyAkc2tpbmZvWydhdXRob3InXSA6ICctJykpOw0KCQkkYWN0cm93ID0g JzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcu YS4nc2tpbj0nLiRza2luX25hbWUuJyI+WycuZ1R4dCgnZWRpdCcpLiddPC9hPicNCgkJCS4g JyAnIC4oKCRza2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4n c3RlcD1zbWRfYXRfY2xvbmUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLiciIG9uY2xpY2s9InJl dHVybiBzbWRfZ2V0dmFsKFwnJy4kc2tpbl9uYW1lLidcJywgXCdzbWRfYXRfY2xvbmVcJyk7 Ij5bJy5zbWRfYXRfZ1R4dCgnY2xvbmUnKS4nXTwvYT4nIDogJycpDQoJCQkuICcgJyAuKCgk c2tpbmZvKSA/ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21k X2F0X2V4cG9ydCcuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgb25jbGljaz0icmV0dXJuIHNt ZF9nZXRjcnVzaChcJycuJHNraW5fbmFtZS4nXCcpOyI+Wycuc21kX2F0X2dUeHQoJ2V4cG9y dCcpLiddPC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKGluX2FycmF5KCRza2luX25hbWUsICRz bWRfY29yZV90aGVtZXMpIHx8IGluX2FycmF5KCRza2luX25hbWUsICRiYXNlcykpID8gJycg OiAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9kZWxl dGUnLmEuJ3NraW49Jy4kc2tpbl9uYW1lLmEuJ3BhZ2U9Jy4kcGFnZS4nIiBvbmNsaWNrPSJy ZXR1cm4gY29uZmlybShcJycuc21kX2F0X2dUeHQoJ2RlbGV0ZV9jb25maXJtJywgYXJyYXko J3tza2lufScgPT4gJHNraW5fbmFtZSkpLidcJyk7Ij5bJy5nVHh0KCdkZWxldGUnKS4nXTwv YT4nKQ0KCQkJLiAnPGRpdiBpZD0icG9wXycuJHNraW5fbmFtZS4nIiBjbGFzcz0ic21kX3Bv cHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dUeHQoJ25ld19jbG9uZXNraW4nKS4n PC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzbWRfdGV4dF9uYW1lIiB2YWx1ZT0i IiAvPiA8YSBocmVmPSIjIj4mbmJzcDtbJy5zdHJvbmcoc21kX2F0X2dUeHQoJ2NvbmZpcm0n KSkuJ108L2E+PC9kaXY+Jw0KCQkJLiAnPGRpdiBpZD0iY3J1c2hfJy4kc2tpbl9uYW1lLici IGNsYXNzPSJzbWRfcG9wdXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRfZ1R4dCgnY3J1 c2hfZm9ybWF0JykuJzwvc3Bhbj4nLnJhZGlvU2V0KCRjcnVzaGVycywgJHNraW5fbmFtZS4n X2NydXNoJywgJGF0X3ByZWZzWydzbWRfYXRfY3J1c2gnXSkuJzxhIGhyZWY9IiMiPiZuYnNw O1snLnN0cm9uZyhzbWRfYXRfZ1R4dCgnY29uZmlybScpKS4nXTwvYT48L2Rpdj4nOw0KCQkk dmVyb3cgPSAoJHNraW5mbykgPyAoKGlzc2V0KCRmZWVkc1skZmVlZF9za2luX25hbWVdKSAm JiBpc3NldCgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsnc3VtbWFyeSddKSAmJiB2ZXJzaW9u X2NvbXBhcmUoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV1bJ3N1bW1hcnknXSwkc2tpbmZvWyd2 ZXJzaW9uJ10pPT09MSkgPyAnPGEgaHJlZj0iJy4kZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsn bGluayddLiciIHN0eWxlPSJmb250LXdlaWdodDpib2xkO2NvbG9yOiM5OTAwMDA7Ij4nLnNt ZF9hdF9nVHh0KCd2ZXJzaW9uJykuJHNraW5mb1sndmVyc2lvbiddLic8L2E+JyA6IHNtZF9h dF9nVHh0KCd2ZXJzaW9uJykuJHNraW5mb1sndmVyc2lvbiddKSA6ICcnOw0KDQoJCWlmICgk bGF5b3V0PT0wKSB7DQoJCQllY2hvIHRyKA0KCQkJCXRkKCR0aHVtcm93KQ0KCQkJCS50ZCgk YXV0aHJvdywgMTAwKQ0KCQkJCS50ZCgkdmVyb3cpDQoJCQkJLnRkKCgoJHNraW5mbyk/ICRz a2luZm9bJ2Rlc2NyaXB0aW9uJ10gOiAnLScpLigoJHNraW5mbyAmJiAkc2tpbmZvWydoZWxw J10pID8gJyAnLmhyZWYoJ1snLmdUeHQoJ2hlbHAnKS4nXScsICRza2luZm9bJ2hlbHAnXSkg OiAnJyksIDI1MCkNCgkJCQkudGQoJGFjdHJvdywyNjApDQoJCQksICgoJHNraW5fbmFtZSA9 PSAkY3Vycl9za2luKSA/ICcgc3R5bGU9ImJhY2tncm91bmQ6I2U4ZThlODsiJyA6ICcnKQ0K CQkJKTsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9jZWxsIicuKCgk c2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4 OyInIDogJycpLic+JzsNCgkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJ CWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hdXRoIj4nLiR2ZXJvdy5zbWRfYXRfZ1R4dCgnYnkn KS4kYXV0aHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hY3Rpb25z Ij4nLiRhY3Ryb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8L2Rpdj4nOw0KCQl9DQoJfQ0KDQov LwllY2hvIHRkYShzZWxlY3RfYnV0dG9ucygpIC4gZXZlbnRfbXVsdGllZGl0X2Zvcm0oJHNt ZF9hdF9ldmVudCwgTlVMTCwgJHBhZ2UsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLCAnIGNv bHNwYW49IjUiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiBub25lOyInKTsN CglpZiAoJGxheW91dD09IjAiKSB7DQoJCWVjaG8gJzwvdGQ+PC90cj4nOw0KCQllY2hvIGVu ZFRhYmxlKCk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NsZWFyIj48 L2Rpdj48L2Rpdj4nOw0KCX0NCgllY2hvICc8L2Zvcm0+JzsNCgllY2hvIG4ubmF2X2Zvcm0o JHNtZF9hdF9ldmVudCwgJHBhZ2UsICRudW1QYWdlcywgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCk7DQoJZWNobyBuLnBhZ2VieV9mb3JtKCRzbWRfYXRfZXZlbnQsICRwYWdlYnkpOw0KfQ0K DQpmdW5jdGlvbiBzbWRfYXRfZmVlZCgkZmVlZCkgew0KCWdsb2JhbCAkZmVlZHM7DQoNCgkk ZmVlZD1wcmVnX3JlcGxhY2UoIi8+Ii4iW1s6c3BhY2U6XV0rIi4iPC9pIiwgIj48IiwgJGZl ZWQpOyAvLyBLaWxsIHdoaXRlc3BhY2UgaW4gZmVlZA0KCSR4bWxwYXJzZXIgPSB4bWxfcGFy c2VyX2NyZWF0ZSgpOw0KCXhtbF9zZXRfZWxlbWVudF9oYW5kbGVyKCR4bWxwYXJzZXIsICJz bWRfYXRfZmVlZF9zdGFydF90YWciLCAic21kX2F0X2ZlZWRfZW5kX3RhZyIpOw0KCXhtbF9z ZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcigkeG1scGFyc2VyLCAic21kX2F0X2ZlZWRfdGFn X2NvbnRlbnRzIik7DQoJeG1sX3BhcnNlKCR4bWxwYXJzZXIsICRmZWVkKTsNCgl4bWxfcGFy c2VyX2ZyZWUoJHhtbHBhcnNlcik7DQoNCglyZXR1cm4gJGZlZWRzOw0KfQ0KDQpmdW5jdGlv biBzbWRfYXRfZmVlZF9zdGFydF90YWcoJHBhcnNlciwgJG5hbWUsICRhdHRyaWJzKSB7DQoJ Z2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWc7DQoJaWYgKCRuYW1lID09 ICJFTlRSWSIpIHsNCgkJJHNtZF9hdF9mZWVkaW4gPSB0cnVlOw0KCX0NCglpZiAoJHNtZF9h dF9mZWVkaW4pIHsNCgkJJHNtZF9hdF9mZWVkdGFnID0gJG5hbWU7DQoJfQ0KfQ0KZnVuY3Rp b24gc21kX2F0X2ZlZWRfZW5kX3RhZygkcGFyc2VyLCAkbmFtZSkgew0KCWdsb2JhbCAkc21k X2F0X2ZlZWRpbiwgJHNtZF9hdF9mZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1lOw0KCWlmICgk bmFtZSA9PSAiRU5UUlkiKSB7DQoJCSRzbWRfYXRfZmVlZGluID0gZmFsc2U7DQoJCSRzbWRf YXRfZmVlZG5hbWUgPSAnJzsNCgl9DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3RhZ19j b250ZW50cygkcGFyc2VyLCAkZGF0YSkgew0KCWdsb2JhbCAkc21kX2F0X2ZlZWRpbiwgJHNt ZF9hdF9mZWVkdGFnLCAkc21kX2F0X2ZlZWRuYW1lLCAkZmVlZHM7DQoJaWYgKCRzbWRfYXRf ZmVlZGluKSB7DQoJCWlmICgkc21kX2F0X2ZlZWR0YWcgPT0gIk5BTUUiKSB7DQoJCQkkZmVl ZHNbJGRhdGFdID0gJyc7DQoJCQkkc21kX2F0X2ZlZWRuYW1lID0gJGRhdGE7DQoJCX0NCgkJ aWYgKGlzc2V0KCRmZWVkc1skc21kX2F0X2ZlZWRuYW1lXSkpIHsNCgkJCWlmICgkc21kX2F0 X2ZlZWR0YWcgPT0gIlRJVExFIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIlNVTU1BUlkiIHx8 ICRzbWRfYXRfZmVlZHRhZyA9PSAiVVBEQVRFRCIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJJ RCIgfHwgJHNtZF9hdF9mZWVkdGFnID09ICJMSU5LIikgew0KCQkJCSRmZWVkc1skc21kX2F0 X2ZlZWRuYW1lXVtzdHJ0b2xvd2VyKCRzbWRfYXRfZmVlZHRhZyldID0gJGRhdGE7DQoJCQl9 DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmVtb3Zl IGhhcmQgc3BhY2VzIGluIHRoZSB1cGxvYWRfZm9ybSBzbyBPcGVyYSBhbmQgSUUgd3JhcCB0 aGUgYnV0dG9ucw0KZnVuY3Rpb24gc21kX2F0X3VwbG9hZF9mb3JtKCRldmVudCwgJHN0ZXAs ICRkYXRhLCAkYXJncykgew0KCXJldHVybiBzdHJfcmVwbGFjZSgnJiMxNjA7JywgJyAnLCAk ZGF0YSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X2F0X2VkaXQoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudDsNCg0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywgJ2ZpbGUnKSkp KTsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbGF5b3V0ID0gKGlz c2V0KCRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9s YXlvdXQnXSA6IDE7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIs ICJwaHAiKTsNCgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAiZ2lmIiwgInBu ZyIpOw0KCSRtYXhfZmlsZV9zaXplID0gMiAqIDEwMjQgKiAxMDI0Ow0KDQoJJHNraW5mbyA9 IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJGZpbGUgPSAoZW1wdHkoJG5ld19za2lu KSkgPyAkZmlsZSA6ICRuZXdfc2tpbjsNCgkkZmlsZXMgPSBzbWRfYXRfbGlzdGRpcihUSEVN RS4kc2tpbik7DQoJc29ydCgkZmlsZXMpOw0KDQoJLy8gU3BsaXQgdGhlIGxpc3QgaW50byBp dHMgZGlyZWN0b3J5IGdyb3Vwcw0KCSRhbGxmaWxlcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAo JGZpbGVzIGFzICRjdXJyZmlsZSkgew0KCQkkZmlsZV9pbmZvID0gcGF0aGluZm8oJGN1cnJm aWxlKTsNCgkJLy8gSWdub3JlIGFueSByb2d1ZSBTdWJ2ZXJzaW9uIGZpbGVzDQoJCWlmIChz dHJwb3MoJGZpbGVfaW5mb1snZGlybmFtZSddLCAnLy5zdm4nKSA9PT0gZmFsc2UpIHsNCgkJ CSRmaWxlX3R5cGUgPSAoaXNzZXQoJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10pKSA/ICRmaWxl X2luZm9bJ2V4dGVuc2lvbiddIDogJ290aGVyJzsNCgkJCSRhbGxmaWxlc1skZmlsZV90eXBl XVtdID0gJGN1cnJmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKGdwcygnc21kX2F0X2VkaXRzJykp IHsNCgkJJGNvbnRlbnRzID0gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJw0KJyxncHMo J3NtZF9hdF9lZGl0cycpKSk7IC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCX0gZWxzZSB7DQoJ CSRjb250ZW50cyA9ICcnOw0KCQlpZiAoJGZpbGUgJiYgZmlsZV9leGlzdHMoVEhFTUUuJHNr aW4uRFMuJGZpbGUpKSB7DQoJCQkkY29udGVudHMgPSBmaWxlKFRIRU1FLiRza2luLkRTLiRm aWxlKTsNCgkJCSRjb250ZW50cyA9IGpvaW4oIiIsICRjb250ZW50cyk7DQoJCX0NCgl9DQoN CgkvLyBCZWdpbiByZW5kZXJpbmcgdGhlIHBhZ2UNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdl ZGl0X2xibCcpLCRtZXNzYWdlKTsNCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUgdHlwZT0idGV4 dC9jc3MiPg0KI3NtZF9hdF9pbWFnZXMgew0KCW1hcmdpbjowcHggNnB4IC00cHggMDsNCn0N Ci5zbWRfc2tpbl9maWxldHlwZXMgew0KCW1hcmdpbjoxMnB4IDA7DQp9DQo8L3N0eWxlPg0K RU9TOw0KDQoJJHNraW5fbGlzdCA9IHNtZF9hdF9yZWFkX3NraW5zKCk7DQoNCgkvLyBzZWxl Y3RJbnB1dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0 aGlzIGNhc2UNCgkkc2tpbnNlbCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkc2tpbl9saXN0IGFz ICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJHNraW5zZWxbJHZhbHVlMV0gPSAkc2tpbl9saXN0 WyRrZXkxXTsNCiAgIH0NCgkkc2tpbkNoYW5nZSA9ICc8Zm9ybSBuYW1lPSJza2luY2hhbmdl IiBhY3Rpb249ImluZGV4LnBocCI+Jw0KCQkuIGVJbnB1dCgkc21kX2F0X2V2ZW50KQ0KCQku IHNJbnB1dCgnc21kX2F0X2VkaXQnKQ0KCQkuIHNlbGVjdElucHV0KCdza2luJywgJHNraW5z ZWwsICRza2luLCAwLCAxKQ0KCQkuICc8L2Zvcm0+JzsNCg0KCSRmaWxlTGlzdCA9IGhlZChz bWRfYXRfZ1R4dCgnc2tpbl9maWxlcycpLDIpDQoJCS4gJHNraW5DaGFuZ2UNCgkJLiBzdGFy dFRhYmxlKCdsaXN0JywgJ2xlZnQnLCAnc21kX3NraW5fZmlsZXR5cGVzJyk7DQoJJGZpbGVM aXN0IC49ICc8YnIgLz48YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9h dF9ldmVudC5hLidzdGVwPXNtZF9hdF9uZXdmaWxlJy5hLidza2luPScuJHNraW4uJyI+Jy5z bWRfYXRfZ1R4dCgnbmV3X2ZpbGUnKS4nPC9hPic7DQoJJGZpbGVMaXN0IC49ICcgPGEgY2xh c3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRf Z1R4dCgoKCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwv YT48YnIgLz4nOw0KCSRvdGhlcnMgPSBhcnJheSgpOw0KDQoJZm9yZWFjaCAoJGVkaXRhYmxl IGFzICRmaWxldHlwZSkgew0KCQlpZiAoaXNzZXQoJGFsbGZpbGVzWyRmaWxldHlwZV0pKSB7 DQoJCQlmb3JlYWNoICgkYWxsZmlsZXNbJGZpbGV0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmls ZSkgew0KCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJJGZpbGVMaXN0IC49IHRyKHRkKGhl ZChzbWRfYXRfZ1R4dCgkZmlsZXR5cGUpLDMpKSk7DQoJCQkJfQ0KCQkJCSRqdXN0ZmlsZSA9 IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJJGJhc2VmaWxlID0gYXJyYXlfc2hpZnQoZXhw bG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVudD0n LiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luLmEu J2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmco JGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJCSRkZWwgPSAoJGJhc2VmaWxl ID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUn LCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7DQoJCQkJJGZpbGVMaXN0 IC49IHRyKHRkKCRlZGl0KS50ZCgkZGVsKSk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkvLyBT b21lIG90aGVyIGZpbGUgdHlwZQ0KCQkJaWYgKCEkb3RoZXJzKSB7DQoJCQkJZm9yZWFjaCAo JGFsbGZpbGVzIGFzICRmdHlwZSA9PiAkZmxzKSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJGZ0 eXBlLCBhcnJheV9tZXJnZSgkZWRpdGFibGUsICRpbWFnYWJsZSkpKSB7DQoJCQkJCQlmb3Jl YWNoICgkYWxsZmlsZXNbJGZ0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkgew0KCQkJCQkJ CSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJCQkJJGJhc2VmaWxlID0g YXJyYXlfc2hpZnQoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCQkJCSRlZGl0ID0g JzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcu YS4nc2tpbj0nLiRza2luLmEuJ2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRq dXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJ CQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9l dmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAk c2tpbik7DQoJCQkJCQkJJG90aGVyc1tdID0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJ CQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkkZmlsZUxpc3QgLj0gKCRv dGhlcnMpID8gdHIodGQoaGVkKHNtZF9hdF9nVHh0KCdvdGhlcl9maWxlcycpLDMpKSkuIGpv aW4obiwgJG90aGVycykgOiAnJzsNCgkkZmlsZUxpc3QgLj0gZW5kVGFibGUoKTsNCg0KCS8v IE1ha2UgdGhlIGxpc3Qgb2YgaW1hZ2VzIGZvciB0aGlzIHNraW4NCgkkcXMgPSBhcnJheSgN CgkJImV2ZW50IiA9PiAkc21kX2F0X2V2ZW50LA0KCQkic3RlcCIgPT4gJ3NtZF9hdF9kZWxl dGVfaW1hZ2UnLA0KCSk7DQoJJHNlbFtdID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9InNt ZF9hdF9pbWFnZWZvcm0iIG5hbWU9InNtZF9hdF9pbWFnZWZvcm0iIGFjdGlvbj0iJy5qb2lu X3FzKCRxcykuJyI+JzsNCgkkc2VsW10gPSAnPHNlbGVjdCBpZD0ic21kX2F0X2ltYWdlcyIg bmFtZT0ic21kX2F0X2ltYWdlc1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iMjQiIG11bHRpcGxl PSJtdWx0aXBsZSIgc3R5bGU9IndpZHRoOjE1NHB4OyI+JzsNCg0KCWlmIChkZWZpbmVkKCdH TE9CX0JSQUNFJykpIHsNCgkJJGltZyA9IGdsb2IoVEhFTUUuJHNraW4uRFMuJ3sqLmpwZywq LmdpZiwqLnBuZ30nLCBHTE9CX0JSQUNFKTsNCgl9IGVsc2Ugew0KCQkkaW1nID0gYXJyYXlf bWVyZ2UoZ2xvYihUSEVNRS4kc2tpbi5EUy4nKi5qcGcnKSxnbG9iKFRIRU1FLiRza2luLkRT LicqLmdpZicpLGdsb2IoVEhFTUUuJHNraW4uRFMuJyoucG5nJykpOw0KCX0NCg0KCWlmKGlz X2FycmF5KCRpbWcpKSB7DQoJCWZvcmVhY2ggKCRpbWcgYXMgJGltZ2ZpbGUpIHsNCgkJCSRz ZWxbXSA9IHQuJzxvcHRpb24gdmFsdWU9IicuJGltZ2ZpbGUuJyI+Jy5iYXNlbmFtZSgkaW1n ZmlsZSkuJzwvb3B0aW9uPic7DQoJCX0NCgl9DQoJJHNlbFtdID0gJzwvc2VsZWN0Pic7DQoJ JHNlbFtdID0gZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLCAn c2tpbicsICRza2luLCAxKTsNCgkkc2VsW10gPSAnPC9mb3JtPic7DQoJJHNlbCA9IGpvaW4o JycsJHNlbCk7DQoNCgkvLyBJbWFnZSBwb3J0aW9uDQoJJGltZ2JpdCA9IGhlZChzbWRfYXRf Z1R4dCgnc2tpbl9pbWFnZXMnKSwgMikgLiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnKTsN CgkkaW1nYml0IC49IHRyKHRkKCRzZWwpKTsNCgkkaW1nYml0IC49IHRyKHRkKHVwbG9hZF9m b3JtKHNtZF9hdF9nVHh0KCd1cGxvYWRfaW1hZ2UnKSwgJycsICdzbWRfYXRfdXBsb2FkX2lt YWdlJywgJHNtZF9hdF9ldmVudCwgJHNraW4sICRtYXhfZmlsZV9zaXplLCAnJywgJycpLCAx NTApKTsNCgkkaW1nYml0IC49IGVuZFRhYmxlKCk7DQoNCgkvLyBSZW5kZXIgdGhlIHJlc3Qg b2YgdGhlIHBhZ2UNCgllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKS4NCgl0cigNCgkJdGR0bCgk aW1nYml0KS4NCgkJdGQoDQoJCQloZWQoKCgkc2tpbmZvKSA/ICRza2luZm9bJ2RuYW1lJ10g OiAkc2tpbiksMSkuDQoJCQlmb3JtKA0KCQkJCSc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0i bmV3X3NraW4iIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpLiciIGNsYXNzPSJl ZGl0IiBzaXplPSI0MCIgdGFiaW5kZXg9IjIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7 IiAvPicuYnINCgkJCQkuJzx0ZXh0YXJlYSBpZD0ic21kX2F0X2VkaXRzIiBjbGFzcz0iY29k ZSIgbmFtZT0ic21kX2F0X2VkaXRzIiBjb2xzPSI3NiIgcm93cz0iMzIiPicuaHRtbHNwZWNp YWxjaGFycygkY29udGVudHMpLic8L3RleHRhcmVhPicuYnINCgkJCQkuZklucHV0KCdzdWJt aXQnLCcnLGdUeHQoJ3NhdmUnKSwncHVibGlzaCcpDQoJCQkJLmVJbnB1dCgkc21kX2F0X2V2 ZW50KS5zSW5wdXQoJ3NtZF9hdF9zYXZlJykNCgkJCQkuaElucHV0KCdza2luJywkc2tpbikN CgkJCQkuaElucHV0KCdmaWxlJywkZmlsZSkNCgkJCSkNCgkJKS4NCgkJdGR0bCgkZmlsZUxp c3QpDQoJKS4NCgllbmRUYWJsZSgpOw0KDQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLy8gSnVzdCBjbGVhciBvdXQgdGhlIHZhciBzbyB0aGUgc2F2ZSBmdW5jdGlvbiB0 cmVhdHMgdGhlIGNvbnRlbnQgYXMgYSBuZXcgZmlsZQ0KZnVuY3Rpb24gc21kX2F0X25ld2Zp bGUoKSB7DQoJJF9QT1NUWydmaWxlJ10gPSAnJzsNCgkkbWVzc2FnZT0nJzsNCglzbWRfYXRf ZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2Nsb25lKCkgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoNCglleHRyYWN0 KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsICduZXdfc2tpbicpKSkpOw0KCSRtc2c9Jyc7 DQoNCgkkbmV3X3NraW4gPSB0cmltKCRuZXdfc2tpbik7DQoJJG5ld19za2luID0gcmF3dXJs ZW5jb2RlKCRuZXdfc2tpbik7DQoNCglpZiAoZW1wdHkoJG5ld19za2luKSkgew0KCQkkbXNn ID0gc21kX2F0X2dUeHQoJ25hbWVfZW1wdHknKTsNCgl9DQoNCgkvLyBDaGVjayB0aGUgbmV3 IG5hbWUgaXNuJ3QgYWxyZWFkeSBpbiB1c2UNCgkkdGhlbWVzID0gc21kX2F0X3JlYWRfc2tp bnMoKTsNCg0KCWlmIChpbl9hcnJheSgkbmV3X3NraW4sICR0aGVtZXMpKSB7DQoJCSRtc2cg PSBzbWRfYXRfZ1R4dCgnc2tpbl9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3Nr aW4pKTsNCgl9DQoNCgkvLyBObyBlcnJvcnMsIHNvIG1ha2UgYSBuZXcgZGlyIGFuZCBjcmVh dGUgdGhlIFBIUCBmaWxlDQoJaWYgKCRtc2c9PScnKSB7DQoJCSRjb250ZW50ID0gJyc7DQoJ CSRkZXN0ZGlyID0gVEhFTUUuJG5ld19za2luLkRTOw0KCQkkcmVzID0gbWtkaXIoJGRlc3Rk aXIpOw0KCQkkYmFzZWQgPSAnJzsNCg0KCQlpZiAoJHNraW4pIHsNCgkJCS8vIEJhc2VkIG9u IGFuIGV4aXN0aW5nIHRoZW1lLiBObyBuZWVkIGZvciBhbnkgZnVuY3Rpb25zIG90aGVyIHRo YW4gbWFuaWZlc3QoKQ0KCQkJJGJhc2VkID0gInRoZW1lOjpiYXNlZF9vbignIi4kc2tpbi4i Jyk7IjsNCgkJCSRleHRlbmRzID0gJHNraW4uJ190aGVtZSc7DQoJCQkkc3Jjc3MgPSBUSEVN RS4kc2tpbi5EUy4ndGV4dHBhdHRlcm4uY3NzJzsNCgkJCWlmIChmaWxlX2V4aXN0cygkc3Jj c3MpICYmIGZpbGVzaXplKCRzcmNzcykgPiAwKSB7DQoJCQkJJGltcG9ydCA9IGpvaW4oJycs IGZpbGUoJHNyY3NzKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRpbXBvcnQgPSAnQGltcG9ydCB1 cmwoIi4uL2NsYXNzaWMvdGV4dHBhdHRlcm4uY3NzIik7JzsNCgkJCX0NCgkJCSRjb250ZW50 ID0gJ3snOw0KCQl9IGVsc2Ugew0KCQkJLy8gQnJhbmQgc3BhbmtpbmcgbmV3IHRoZW1lLiBD bG9uZSAnY2xhc3NpYycgZnVuY3Rpb25zIHRoZW4gYWRkIG5ldyBtYW5pZmVzdCgpDQoJCQkk ZXh0ZW5kcyA9ICd0aGVtZSc7DQoJCQkkaW1wb3J0ID0gJyc7DQoJCQkkc3JjID0gdHhwYXRo LkRTLlRIRU1FLidjbGFzc2ljJy5EUy4nY2xhc3NpYy5waHAnOw0KCQkJJGdyYWIgPSBmYWxz ZTsNCgkJCSRmcCA9IGZpbGUoJHNyYyk7DQoNCgkJCWZvcmVhY2goJGZwIGFzICRsaW5lKSB7 DQoJCQkJJGxpbmUgPSBydHJpbSgkbGluZSk7DQoJCQkJaWYgKHN0cnBvcygkbGluZSwgJ2Z1 bmN0aW9uIG1hbmlmZXN0KCknKSAhPT0gZmFsc2UpIHsNCgkJCQkJJGdyYWIgPSBmYWxzZTsg Ly8gdW5uZWNlc3Nhcnk/DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZiAoJGdyYWIpIHsN CgkJCQkJJGNvbnRlbnQgLj0gJGxpbmUubjsNCgkJCQl9DQoJCQkJaWYgKHN0cnBvcygkbGlu ZSwgJ2NsYXNzIGNsYXNzaWNfdGhlbWUgZXh0ZW5kcyB0aGVtZScpICE9PSBmYWxzZSkgew0K CQkJCQkkZ3JhYiA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJLy8gbWFuaWZlc3Qg ZmllbGRzDQoJCSRtYW51c2VyID0gZ2V0X2F1dGhvcl9uYW1lKCR0eHBfdXNlcik7DQoJCSRt YW50aXRsZSA9IHVjd29yZHMoJG5ld19za2luKTsNCg0KCQkvLyBXcml0ZSB0aGUgbmV3IFBI UCBmaWxlDQoJCSRidWYgPSA8PDxFT0YNCjw/cGhwDQoNCmlmICghZGVmaW5lZCgndHhwaW50 ZXJmYWNlJykpIGRpZSgndHhwaW50ZXJmYWNlIGlzIHVuZGVmaW5lZC4nKTsNCg0KeyRiYXNl ZH0NCg0KY2xhc3MgeyRuZXdfc2tpbn1fdGhlbWUgZXh0ZW5kcyB7JGV4dGVuZHN9DQp7JGNv bnRlbnR9DQoNCglmdW5jdGlvbiBtYW5pZmVzdCgpDQoJew0KCQlyZXR1cm4gYXJyYXkoDQoJ CQkndGl0bGUnCSAJCT0+ICd7JG1hbnRpdGxlfScsDQoJCQknYXV0aG9yJyAJCT0+ICd7JG1h bnVzZXJ9JywNCgkJCSdhdXRob3JfdXJpJyAJPT4gJycsDQoJCQkndmVyc2lvbicgCQk9PiAn MS4wJywNCgkJCSdkZXNjcmlwdGlvbicgCT0+ICcnLA0KCQkJJ2hlbHAnIAkJCT0+ICcnLA0K CQkpOw0KCX0NCn0NCj8+DQpFT0Y7DQoNCgkJJGZwID0gZm9wZW4oJGRlc3RkaXIuJG5ld19z a2luLicucGhwJywgIndiIik7DQoJCWZ3cml0ZSgkZnAsICRidWYpOw0KCQlmY2xvc2UoJGZw KTsNCg0KCQkvLyBDcmVhdGUgdGhlIENTUyBmaWxlDQoJCSRmcCA9IGZvcGVuKCRkZXN0ZGly Lid0ZXh0cGF0dGVybi5jc3MnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGltcG9ydCk7DQoJ CWZjbG9zZSgkZnApOw0KDQoJCWlmICgkc2tpbikgew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0 KCdza2luX2Nsb25lZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCgkJfSBl bHNlIHsNCgkJCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9jcmVhdGVkJywgYXJyYXkoJ3tu YW1lfScgPT4gJG5ld19za2luKSk7Ow0KCQl9DQoNCi8vCSRtc2cgPSBzbWRfYXRfZ1R4dCgn c2tpbl9ub3RfY3JlYXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCg0K CX0NCg0KCXNtZF9hdF9saXN0KCRtc2cpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9jcnVzaF9vcHRpb25zKCRkaXJlY3Rpb249J2V4cG9y dCcpIHsNCgkkc21kX2NydXNoZXJzID0gYXJyYXkoJ3RhcicgPT4gc21kX2F0X2dUeHQoJ2Nf dGFyJykpOw0KDQoJaWYgKCRkaXJlY3Rpb249J2V4cG9ydCcpIHsNCgkJaWYgKGZ1bmN0aW9u X2V4aXN0cygnZ3pjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ3pvcGVuJykgJiYg ZnVuY3Rpb25fZXhpc3RzKCdnendyaXRlJykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2d6aXAn XSA9IHNtZF9hdF9nVHh0KCdjX2d6aXAnKTsNCgkJCSRzbWRfY3J1c2hlcnNbJ3ppcCddID0g c21kX2F0X2dUeHQoJ2NfemlwJyk7DQoJCX0NCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnYnpj b21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnYnpvcGVuJykgJiYgZnVuY3Rpb25fZXhp c3RzKCdiendyaXRlJykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2J6aXAyJ10gPSBzbWRfYXRf Z1R4dCgnY19iemlwMicpOw0KCQl9DQoJfSBlbHNlIHsNCgkJLy8gSW1wb3J0IGZ1bmN0aW9u IHJlcXVpcmVtZW50cw0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemluZmxhdGUnKSkgew0K CQkJJHNtZF9jcnVzaGVyc1snZ3ppcCddID0gc21kX2F0X2dUeHQoJ2NfZ3ppcCcpOw0KCQkJ JHNtZF9jcnVzaGVyc1snemlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgkJfQ0KCQlp ZiAoZnVuY3Rpb25fZXhpc3RzKCdiemRlY29tcHJlc3MnKSkgew0KCQkJJHNtZF9jcnVzaGVy c1snYnppcDInXSA9IHNtZF9hdF9nVHh0KCdjX2J6aXAyJyk7DQoJCX0NCgl9DQoJcmV0dXJu ICRzbWRfY3J1c2hlcnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2V4cG9ydCgpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X3ByZWZz Ow0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCdjcnVzaCcpKSkpOw0K CSRtZXNzYWdlPScnOw0KCWNoZGlyKFRIRU1FKTsNCgkkb3V0ID0gJHNraW47DQoNCgkvLyBD aGVjayB0aGUgcGFzc2VkIGNvbXByZXNzaW9uIGZvcm1hdCBpcyB2YWxpZDsgdXNlIGRlZmF1 bHQgaWYgbm90DQoJJGNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoKTsNCglpZiAo JGNydXNoPT0nJyB8fCAkY3J1c2g9PSd1bmRlZmluZWQnIHx8ICFhcnJheV9rZXlfZXhpc3Rz KCRjcnVzaCwgJGNydXNoZXJzKSkgew0KCQkkY3J1c2ggPSBnZXRfcHJlZignc21kX2F0X2Ny dXNoJywgJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X2NydXNoJ10pOw0KCX0NCg0KCXN3aXRj aCgkY3J1c2gpIHsNCgkJY2FzZSAnemlwJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3ppcF9m aWxlKCRvdXQuJy56aXAnKTsNCgkJCWJyZWFrOw0KCQljYXNlICdiemlwMic6DQoJCQkkemlw ID0gbmV3IHNtZF9hdF9iemlwX2ZpbGUoJG91dC4nLnRiejInKTsNCgkJCWJyZWFrOw0KCQlj YXNlICd0YXInOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoJG91dC4nLnRhcicp Ow0KCQkJYnJlYWs7DQoJCWNhc2UgJ2d6aXAnOg0KCQlkZWZhdWx0Og0KCQkJJHppcCA9IG5l dyBzbWRfYXRfZ3ppcF9maWxlKCRvdXQuJy50Z3onKTsNCiAJCQlicmVhazsNCgl9DQoNCgkk emlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gdHhwYXRoLkRTLlRIRU1FLCAn b3ZlcndyaXRlJyA9PiAxLCAnaW5tZW1vcnknID0+IDEpKTsNCgkkemlwLT5hZGRfZmlsZXMo JHNraW4uRFMuJyouKicpOw0KCSR6aXAtPmV4Y2x1ZGVfZmlsZXMoJHNraW4uRFMuJyouc3Zu KicpOw0KCSR6aXAtPmNyZWF0ZV9hcmNoaXZlKCk7DQoJJHppcC0+ZG93bmxvYWRfZmlsZSgp Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9p bXBvcnQoKSB7DQoJZ2xvYmFsICRwcmVmczsNCg0KCSRuYW1lID0gJF9GSUxFU1sndGhlZmls ZSddWyduYW1lJ107DQoJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd0aGVm aWxlJ11bJ3RtcF9uYW1lJ10sIHR4cGF0aC5EUy5USEVNRS5iYXNlbmFtZSgkX0ZJTEVTWyd0 aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsNCgkkYmFzZWRpciA9IHR4cGF0aC5EUy5USEVNRTsN CgkkdW5jcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCdpbXBvcnQnKTsNCgkkbWVz c2FnZT0nJzsNCgkkaW5mbyA9IGV4cGxvZGUgKCcuJywkbmFtZSk7DQoJJGV4dCA9ICRpbmZv WzFdOw0KDQoJaWYgKCRuYW1lICYmICRmaWxlKSB7DQoJCWlmICgkZXh0ID09ICd6aXAnICYm IGFycmF5X2tleV9leGlzdHMoJ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJJHppcCA9IG5l dyBzbWRfZFVuemlwMigkZmlsZSk7DQovLwkJCSR6aXAtPmRlYnVnID0gdHJ1ZTsNCgkJCSR6 aXAtPmdldExpc3QoKTsNCgkJCSR6aXAtPnVuemlwQWxsKCRiYXNlZGlyKTsNCgkJCSR6aXAt PmNsb3NlKCk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJ fSBlbHNlIGlmICgkZXh0ID09ICd0Z3onICYmIGFycmF5X2tleV9leGlzdHMoJ2d6aXAnLCAk dW5jcnVzaGVycykpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2d6aXBfZmlsZShiYXNlbmFt ZSgkZmlsZSkpOw0KCQkJJHppcC0+c2V0X29wdGlvbnMoYXJyYXkoJ2Jhc2VkaXInID0+ICRi YXNlZGlyLCAnb3ZlcndyaXRlJyA9PiAxKSk7DQoJCQkkemlwLT5leHRyYWN0X2ZpbGVzKCk7 DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRfb2snKTsNCgkJfSBlbHNlIGlm ICgkZXh0ID09ICd0YnoyJyAmJiBhcnJheV9rZXlfZXhpc3RzKCdiemlwMicsICR1bmNydXNo ZXJzKSkgew0KCQkJJHppcCA9IG5ldyBzbWRfYXRfYnppcF9maWxlKGJhc2VuYW1lKCRmaWxl KSk7DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIs ICdvdmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRt ZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQg PT0gJ3RhcicpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2F0X3Rhcl9maWxlKGJhc2VuYW1lKCRm aWxlKSk7DQoJCQkkemlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2Vk aXIsICdvdmVyd3JpdGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJ CSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2Ugew0KCQkJ JG1lc3NhZ2UgPSBhcnJheShzbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfY29tcHJlc3Npb250 eXBlJywgYXJyYXkoJ3tjcnVzaH0nID0+ICRleHQpKSwgRV9XQVJOSU5HKTsNCgkJfQ0KDQoJ CS8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUNCgkJdW5saW5rKCRmaWxlKTsNCgl9IGVs c2Ugew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJfQ0KDQoJ c21kX2F0X2xpc3QoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9hdF91cGxvYWRfaW1hZ2UoKSB7DQoJZ2xvYmFsICRmaWxlX21h eF91cGxvYWRfc2l6ZTsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdpZCcpKSkp Ow0KCSRfUE9TVFsnc2tpbiddID0gJHNraW4gPSAkaWQ7DQoNCgkkbmFtZSA9ICRfRklMRVNb J3RoZWZpbGUnXVsnbmFtZSddOw0KCSRmaWxlID0gZ2V0X3VwbG9hZGVkX2ZpbGUoJF9GSUxF U1sndGhlZmlsZSddWyd0bXBfbmFtZSddKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmICgkZmls ZSA9PT0gZmFsc2UpIHsNCgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQn KSAuIiAkbmFtZSAtICIudXBsb2FkX2dldF9lcnJvcm1zZygkX0ZJTEVTWyd0aGVmaWxlJ11b J2Vycm9yJ10pOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfQ0KDQoJJHNpemUgPSBm aWxlc2l6ZSgkZmlsZSk7DQoJaWYgKCRmaWxlX21heF91cGxvYWRfc2l6ZSA8ICRzaXplKSB7 DQoJCXVubGluaygkZmlsZSk7DQoJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFp bGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2coVVBMT0FEX0VSUl9GT1JN X1NJWkUpOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfQ0KDQoJJHNraW5mbyA9IHNt ZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJG5ld19za2luID0gJHNraW5mb1snbmFtZSdd Ow0KCSRuZXdwYXRoID0gJHNraW5mb1sncGF0aCddOw0KDQoJaWYgKCRuZXdfc2tpbiAmJiAk ZmlsZSkgew0KCQlpZihzaGlmdF91cGxvYWRlZF9maWxlKCRmaWxlLCAkbmV3cGF0aC4kbmFt ZSkpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3VwbG9hZF9zdWNjZXNzJyk7DQoJ CX0gZWxzZSB7DQoJCQl1bmxpbmsoJGZpbGUpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgndXBsb2FkX2ZhaWxlZCcpOw0KCQl9DQoJfSBlbHNlIHsNCgkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnZW1wdHlfaW5mbycpOw0KCX0NCg0KCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZGVs ZXRlX2ltYWdlKCkgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzOw0KDQoJZXh0cmFjdChk b1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nKSkpKTsNCgkkZmlsZV9saXN0ID0gZ3BzKCdzbWRf YXRfaW1hZ2VzJyk7DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAoZW1wdHkoJGZpbGVfbGlzdCkp IHsNCgkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZW1wdHlfaW5mbycpOw0KCX0gZWxzZSB7 DQoJCWlmIChpbl9hcnJheSgkc2tpbiwgJHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ2NvcmVfdGhlbWVfZmlsZScsIGFycmF5KCd7c2tpbn0nID0+ ICRza2luKSk7DQoJCX0gZWxzZSB7DQoJCQlmb3JlYWNoICgkZmlsZV9saXN0IGFzICRpbWFn ZSkgew0KCQkJCSRwYXRoID0gdHhwYXRoLkRTLiRpbWFnZTsNCgkJCQl1bmxpbmsoJHBhdGgp Ow0KCQkJfQ0KCQl9DQoJfQ0KDQoJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9kZWxldGUoKSB7DQoJ Z2xvYmFsICRzbWRfY29yZV90aGVtZXMsICR0aGVtZSwgJHNtZF9hdF9wcml2cywgJHNtZF9h dF9ldmVudDsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ2ZpbGUn KSkpKTsNCgkkbWVzc2FnZT0nJzsNCg0KCWlmICgkZmlsZSkgew0KCQkvLyBFZGl0aW5nIGEg c2tpbiwgdGh1cyBkZWxldGluZyBhIHNpbmdsZSBmaWxlDQoJCWlmIChpbl9hcnJheSgkc2tp biwgJHNtZF9jb3JlX3RoZW1lcykpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2Nv cmVfdGhlbWVfZmlsZScsIGFycmF5KCd7c2tpbn0nID0+ICRza2luKSk7DQoJCQlzbWRfYXRf ZWRpdCgkbWVzc2FnZSk7DQoJCX0gZWxzZSB7DQoJCQkkZGVsID0gdW5saW5rKFRIRU1FLiRz a2luLkRTLiRmaWxlKTsNCgkJCWlmICgkZGVsKSB7DQoJCQkJJG1lc3NhZ2UgPSBnVHh0KCdm aWxlX2RlbGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZmlsZSkpOw0KCQkJCSRfUE9TVFsn ZmlsZSddID0gJyc7IC8vIENsZWFyIHRoZSB2YXJpYWJsZSBzbyB0aGUgZmlsZW5hbWUgZG9l c24ndCBhcHBlYXIgb24gdGhlIGVkaXQgcGFnZQ0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2Fn ZSA9IHNtZF9hdF9nVHh0KCdmaWxlX25vdF9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4g JGZpbGUpKTsNCgkJCX0NCgkJfQ0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJfSBlbHNl IHsNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1l c3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVtZScsIGFycmF5KCd7c2tpbn0nID0+ICRz a2luKSk7DQoJCQlzbWRfYXRfbGlzdCgkbWVzc2FnZSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBW aWV3aW5nIHRoZSBza2luIGxpc3QsIHRodXMgZGVsZXRpbmcgdGhlIHdob2xlIHNraW4NCgkJ CSRza2luZGlyID0gVEhFTUUuJHNraW47DQoJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUo JHNraW5kaXIpKSB7DQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZGVsZXRlX2ZhaWxl ZCcpOw0KCQkJfSBlbHNlIHsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdza2luX2Rl bGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkc2tpbikpOw0KCQkJfQ0KDQoJCQkvLyBIYW5k bGUgc2l0dWF0aW9ucyBpZiBjdXJyZW50IHNraW4gaGFzIGJlZW4gZGVsZXRlZA0KCQkJaWYg KCFmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUuJHNraW4pKSB7DQoJCQkJJGF0X3ByZWZz ID0gc21kX2F0X2dldF9wcmVmcygpOw0KDQoJCQkJLy8gUmVzZXQgdGhlIGdsb2JhbCBza2lu IGluIGNhc2UgaXQncyBiZWVuIGRlbGV0ZWQNCgkJCQkkZ2JsX3NraW4gPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfZ2xv YmFsX3NraW4nXSA6ICcnOw0KCQkJCSRnYmxfc2tpbiA9ICgkZ2JsX3NraW4gIT0gJycgJiYg ZmlsZV9leGlzdHModHhwYXRoLkRTLlRIRU1FLiRnYmxfc2tpbikpID8gJGdibF9za2luIDog J2NsYXNzaWMnOw0KCQkJCXNldF9wcmVmKCdzbWRfYXRfZ2xvYmFsX3NraW4nLCAkZ2JsX3Nr aW4sICRzbWRfYXRfZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCXNl dF9wcmVmKCd0aGVtZV9uYW1lJywgJGdibF9za2luKTsNCg0KCQkJCSRza2luID0gZ2V0X3By ZWYoJ3NtZF9za2luJyk7DQoJCQkJaWYgKCFmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUu JHNraW4pKSB7DQoJCQkJCSRza2luID0gJGdibF9za2luOw0KCQkJCX0NCgkJCQlzZXRfcHJl Zignc21kX3NraW4nLCAkc2tpbiwgJ3NtZF9hdCcsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcsIDAsIFBSRUZfUFJJVkFURSk7DQoJCQl9DQoJCQkkX0dFVFsnc2tpbiddID0gJHNraW47 DQoJCQkkX0dFVFsnbmV4dHN0ZXAnXSA9ICdzbWRfYXRfbGlzdCc7DQoJCQlzbWRfYXRfc3dp dGNoKCRtZXNzYWdlKTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfc2F2ZSgpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShh cnJheSgnc2tpbicsJ25ld19za2luJywnZmlsZScsJ3NtZF9hdF9lZGl0cycpKSkpOw0KDQoJ JGVkaXRhYmxlID0gYXJyYXkoInNzYyIsICJjc3MiLCAianMiLCAicGhwIik7DQoJJG1lc3Nh Z2UgPSAkZXh0cmFNc2cgPSAnJzsNCgkkZmlsZSA9IHRyaW0oJGZpbGUpOw0KCSRuZXdfc2tp biA9IHRyaW0oJG5ld19za2luKTsNCgkkbXNnbGV2ID0gMDsNCg0KCS8vIE5ldyBmaWxlDQoJ aWYgKCEkZmlsZSAmJiAkbmV3X3NraW4pIHsNCgkJJGZpbGUgPSAkbmV3X3NraW47DQoJCSRl eHQgPSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRmaWxlKSk7DQoJCWlmIChzdHJ0b2xvd2Vy KCRmaWxlKSAhPSAncmVhZG1lJyAmJiAoJGV4dCA9PSAnJyB8fCAhaW5fYXJyYXkoJGV4dCwg JGVkaXRhYmxlKSkpIHsNCgkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVk X2ZpbGV0eXBlJykuc21kX2F0X2dUeHQoJ3Vuc3VwcG9ydGVkX2Z1ZGdlJyk7DQoJCQkkbXNn bGV2ID0gRV9XQVJOSU5HOw0KCQkJJF9QT1NUWydmaWxlJ10gPSAkZmlsZTsNCgkJfQ0KCX0N Cg0KCWlmICgkbWVzc2FnZT09JycpIHsNCgkJJHNraW5kaXIgPSBUSEVNRS4kc2tpbi5EUzsN Cg0KCQkkZm5hbWUgPSBzYW5pdGl6ZUZvckZpbGUoJGZpbGUpOw0KCQkkbmV3X3NraW4gPSBy YXd1cmxlbmNvZGUoJG5ld19za2luKTsNCgkJJF9QT1NUWyduZXdfc2tpbiddID0gJG5ld19z a2luOw0KDQoJCSRzbWRfYXRfZWRpdHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywn DQonLCRzbWRfYXRfZWRpdHMpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoNCgkJaWYgKCRm bmFtZSkgew0KCQkJJGZpbGVwYXRoID0gJHNraW5kaXIuRFM7DQoJCQlpZiAoIWZpbGVfZXhp c3RzKCRmaWxlcGF0aC4kZm5hbWUpKSB7DQoJCQkJJHJldCA9IHRvdWNoKCRmaWxlcGF0aC4k Zm5hbWUpOw0KCQkJCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQkJCQkkbWVzc2FnZSA9IHNt ZF9hdF9nVHh0KCdta2Rpcl9mYWlsZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWUpKTsN CgkJCQl9DQoJCQl9DQoNCgkJCS8vIEFzc3VtaW5nIG5vIGVycm9ycyBzbyBmYXIuLi4NCgkJ CWlmICgkbWVzc2FnZSA9PSAnJykgew0KCQkJCSRmaCA9IGZvcGVuKCRmaWxlcGF0aC4kZm5h bWUsICd3YicpOw0KCQkJCWZ3cml0ZSgkZmgsICRzbWRfYXRfZWRpdHMpOw0KCQkJCWZjbG9z ZSgkZmgpOw0KDQoJCQkJaWYgKCRmbmFtZSAhPSAkbmV3X3NraW4pIHsNCgkJCQkJJHJlcyA9 IHJlbmFtZSgkZmlsZXBhdGguJGZuYW1lLCAkZmlsZXBhdGguJG5ld19za2luKTsNCgkJCQkJ JGV4dHJhTXNnID0gKCRyZXMpID8gc21kX2F0X2dUeHQoJ3JlbmFtZWQnLCBhcnJheSgne25h bWV9JyA9PiAkbmV3X3NraW4pKSA6IHNtZF9hdF9nVHh0KCdyZW5hbWVfZmFpbGVkJyk7DQoJ CQkJfQ0KDQoJCQkJLy8gUHJvY2VzcyBhbnkgY3NzIHJlcGxhY2VtZW50cw0KCQkJCSRmaWxl Yml0cyA9IGV4cGxvZGUgKCcuJywoKCRmbmFtZT09JG5ld19za2luKT8gJGZuYW1lIDogJG5l d19za2luKSk7DQoJCQkJJGNzc2ZpbGUgPSAkZmlsZWJpdHNbMF07DQoJCQkJJGV4dCA9IGFy cmF5X3BvcCgkZmlsZWJpdHMpOw0KCQkJCWlmICgkZXh0ID09ICdzc2MnKSB7DQoJCQkJCSRy ZXBsYWNlbWVudHMgPSBhcnJheSgpOw0KCQkJCQkkbnVtX3JlcDEgPSBwcmVnX21hdGNoX2Fs bCgnLyhcQFtBLVphLXowLTlfXSspOlxzKiguKik7LycsICRzbWRfYXRfZWRpdHMsICRtYXRj aGVzMSk7DQoJCQkJCSRudW1fcmVwMiA9IHByZWdfbWF0Y2hfYWxsKCcvKFxAW0EtWmEtejAt OV9dKyk6XHMqXHsoLio/KVx9L3MnLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hlczIpOw0KDQoJ CQkJCS8vIFNpbXBsZSByZXBsYWNlbWVudHMNCgkJCQkJZm9yZWFjaCgkbWF0Y2hlczEgYXMg JGlkeCA9PiAkcmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7DQoJCQkJCQkJLy8g UmVtb3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFz ICRyZXApIHsNCgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNlKCRyZXAsICcn LCRzbWRfYXRfZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmICgkaWR4ID09 IDEpIHsNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJlcCkgew0KCQkJ CQkJCQkkcmVwbGFjZW1lbnRzWyRyZXBdID0gJG1hdGNoZXMxWzJdWyRqZHhdOw0KCQkJCQkJ CX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIE11bHRpLWxpbmUgcmVwbGFjZW1lbnRz DQoJCQkJCWZvcmVhY2goJG1hdGNoZXMyIGFzICRpZHggPT4gJHJlcGFycikgew0KCQkJCQkJ aWYgKCRpZHggPT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgdmFyIGRlZmluaXRpb25z DQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJCQkJCQkJCSRzbWRfYXRf ZWRpdHMgPSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2VkaXRzKTsNCgkJCQkJCQl9 DQoJCQkJCQl9DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJCQkJZm9yZWFjaCAoJHJl cGFyciBhcyAkamR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxhY2VtZW50c1skcmVwLic7 J10gPSB0cmltKCRtYXRjaGVzMlsyXVskamR4XSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJ CQl9DQoNCgkJCQkJLy8gR2VuZXJhdGUgYW5kIHdyaXRlIHRoZSBuZXcgY3NzIGZpbGUNCgkJ CQkJJHNtZF9hdF9lZGl0cyA9IHRyaW0oc3RydHIoJHNtZF9hdF9lZGl0cywgJHJlcGxhY2Vt ZW50cykpOw0KCQkJCQkkZmggPSBmb3BlbigkZmlsZXBhdGguJGNzc2ZpbGUuJy5jc3MnLCAn d2InKTsNCgkJCQkJZndyaXRlKCRmaCwgJHNtZF9hdF9lZGl0cyk7DQoJCQkJCWZjbG9zZSgk ZmgpOw0KCQkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikgew0KCQkJCQkJJG9sZGZuYW1l ID0gZXhwbG9kZSAoJy4nLCAkZm5hbWUpOw0KCQkJCQkJJG9sZGZuYW1lID0gJG9sZGZuYW1l WzBdLicuY3NzJzsNCgkJCQkJCSRyZXMgPSBAdW5saW5rKCRmaWxlcGF0aC4kb2xkZm5hbWUp Ow0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnZmlsZV9z YXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZSkpLmJyLiRleHRyYU1zZzsNCgkJCX0N CgkJfQ0KCX0NCglzbWRfYXRfZWRpdChhcnJheSgkbWVzc2FnZSwgJG1zZ2xldikpOw0KfQ0K DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUFJFRlMNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9wcmVmcygpIHsNCglnbG9i YWwgJHNtZF9hdF9wcmVmczsNCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIs YXJyYXlfa2V5cygkc21kX2F0X3ByZWZzWzBdKSkpOw0KCSRycyA9IHNhZmVfcm93cygnbmFt ZSx2YWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOw0KCSRhdF9w cmVmcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHJzIGFzICRwcmVmYXJyKSB7DQoJCSRhdF9w cmVmc1skcHJlZmFyclsnbmFtZSddXSA9ICRwcmVmYXJyWyd2YWwnXTsNCgl9DQoJcmV0dXJu ICRhdF9wcmVmczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBzbWRfYXRfb3B0aW9ucygkZXZlbnQsICRzdGVwLCAkbWVzc2FnZT0nJykgew0KCXNtZF9h dF9zZXR1cCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX2F0X3NldHVwKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRwcmVmcywg JHNtZF9hdF9wcmVmcywgJHNtZF9hdF9ldmVudCwgJHRoZW1lLCAkc21kX2NvcmVfdGhlbWVz Ow0KDQoJJG51bVJlcVByZWZzID0gY291bnQoJHNtZF9hdF9wcmVmc1swXSk7DQoJJGF0X3By ZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRudW1Sb3dzID0gY291bnQoJGF0X3ByZWZz KTsNCg0KCXBhZ2V0b3AoZ1R4dCgncHJlZnMnKSwkbWVzc2FnZSk7DQoNCgkvLyBZdWssIHdo eSdzIHRoaXMgbm90IGF2YWlsYWJsZSBnbG9iYWxseT8hDQoJJGxldmVscyA9IGFycmF5KA0K Ly8JCTEgPT4gZ1R4dCgncHVibGlzaGVyJyksDQoJCTIgPT4gZ1R4dCgnbWFuYWdpbmdfZWRp dG9yJyksDQoJCTMgPT4gZ1R4dCgnY29weV9lZGl0b3InKSwNCgkJNCA9PiBnVHh0KCdzdGFm Zl93cml0ZXInKSwNCgkJNSA9PiBnVHh0KCdmcmVlbGFuY2VyJyksDQoJCTYgPT4gZ1R4dCgn ZGVzaWduZXInKSwNCgkpOw0KCSRudW1MZXZzID0gY291bnQoJGxldmVscyk7DQoNCgkvLyBT cGxpdCB0aGUgdXNlciBza2luIGxpc3QNCgkkdXNraW5zID0gYXJyYXkoKTsNCglpZiAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSB7DQoJCSR1c2tpbnMgPSBleHBs b2RlKCcsJywgJGF0X3ByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pOw0KCX0NCg0KCSRsYXlv dXQgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1sn c21kX2F0X2xheW91dCddIDogMTsNCgkkY2xyQnRuID0gJyBbPHNwYW4gaWQ9InNtZF9jbHIi IGNsYXNzPSJzbWRfZmFrZWJ0biI+Jy5zbWRfYXRfZ1R4dCgnY2xlYXInKS4nPC9zcGFuPl0n Ow0KCSRidG5TZXQgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfYXRfZ1R4dCgn c2V0JyksICdwdWJsaXNoJyk7DQoJJGJ0blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJt aXQnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJyk7DQoJJGJ0bkluc3RhbGwgPSAnPGZvcm0g bWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3Rl cD1zbWRfYXRfcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1 dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwgJ3B1Ymxpc2gnKS4nPC9m b3JtPic7DQoJJGJ0blJlbW92ZSA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2 ZW50PScuJHNtZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc19yZW1vdmUiIHN0 eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0 KCdkZWxldGUnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPic7DQoJJGJ0bkxpc3QgPSAnIDxh IGNsYXNzPSJuYXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LiciPicuc21k X2F0X2dUeHQoKCgkbGF5b3V0PT0iMCIpID8gJ3NraW5fbGlzdCcgOiAnc2tpbl9ncmlkJykp Lic8L2E+PGJyIC8+JzsNCgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6 MjVweCInOw0KCSRyYWRCdG5zID0gYXJyYXkoDQoJCXNtZF9hdF9nVHh0KCdwZXJfc2l0ZScp LA0KCQlzbWRfYXRfZ1R4dCgncGVyX2dyb3VwJyksDQoJCXNtZF9hdF9nVHh0KCdwZXJfdXNl cicpLA0KCSk7DQoNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCglpZiAoJG51bVJvd3Mg PT0gJG51bVJlcVByZWZzKSB7DQoJCS8vIFByZWZzIGFsbCBpbnN0YWxsZWQNCgkJJHNraW5f bGlzdCA9IHNtZF9hdF9yZWFkX3NraW5zKCk7DQoNCgkJLy8gc2VsZWN0SW5wdXQgbmVlZHMg Ym90aCBpbmRleCBhbmQgdmFsdWUgdG8gYmUgdGhlIHNhbWUgaW4gdGhpcyBjYXNlDQoJCSRz a2luc2VsID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkc2tpbl9saXN0IGFzICRrZXkxID0+ICR2 YWx1ZTEpIHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCR2YWx1ZTEpKSB7DQoJCQkJJHNraW5z ZWxbJHZhbHVlMV0gPSAkc2tpbl9saXN0WyRrZXkxXTsNCgkJCX0NCgkJfQ0KCQkkZ2JsX3Nr aW4gPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgJiYgJGF0X3By ZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSAhPSAnJykgPyAkYXRfcHJlZnNbJ3NtZF9hdF9n bG9iYWxfc2tpbiddIDogJHRoZW1lLT5uYW1lOw0KDQoJCWVjaG8gdHIodGRhKHN0cm9uZyhz bWRfYXRfZ1R4dCgncHJlZnNfdGl0bGUnKSksICcgY29sc3Bhbj0iMiInKSAuIHRkYSgkYnRu UmVtb3ZlLiRidG5MaXN0LCAkYnRuU3R5bGUpICk7DQoJCWVjaG8gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0 X3ByZWZzX3VwZGF0ZSIgb25zdWJtaXQ9InJldHVybiBzbWRfcHJlc3ViKCk7Ij4nOw0KCQll Y2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnY2FzZV9zb3J0JykpLnRkYSh5ZXNub1JhZGlvKCdz bWRfYXRfY2FzZV9zb3J0JywgJGF0X3ByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10pLCAnIHdp ZHRoPSIyNDAiIGlkPSJzbWRfYXRfY2FzZV9zb3J0IicpKTsNCgkJZWNobyB0cih0ZGEoc21k X2F0X2dUeHQoJ2NydXNoX3R5cGUnKSkudGRhKHJhZGlvU2V0KHNtZF9hdF9jcnVzaF9vcHRp b25zKCksICdzbWRfYXRfY3J1c2gnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jcnVzaCddKSwgJyB3 aWR0aD0iMjQwIiBpZD0ic21kX2F0X2NydXNoIicpKTsNCgkJZWNobyB0cih0ZGEoc21kX2F0 X2dUeHQoJ2xheW91dCcpKS50ZGEocmFkaW9TZXQoYXJyYXkoc21kX2F0X2dUeHQoJ2xheW91 dF9saXN0JyksIHNtZF9hdF9nVHh0KCdsYXlvdXRfZ3JpZCcpKSwgJ3NtZF9hdF9sYXlvdXQn LCAkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9h dF9sYXlvdXQiJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgndGh1bWJzaXplJykp LnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX2F0X3R3JywgJGF0X3ByZWZzWydzbWRfYXRfdHcn XSwnJywnJywnJyw0KS5zbWRfYXRfZ1R4dCgndGltZXMnKS5mSW5wdXQoJ3RleHQnLCAnc21k X2F0X3RoJywgJGF0X3ByZWZzWydzbWRfYXRfdGgnXSwnJywnJywnJyw0KSkpOw0KCQllY2hv IHRyKA0KCQkJdGQoc21kX2F0X2dUeHQoJ2dsb2JhbF9za2luJykpDQoJCQkudGQoc2VsZWN0 SW5wdXQoJ3NtZF9hdF9nbG9iYWxfc2tpbicsICRza2luc2VsLCAkZ2JsX3NraW4sIDAsIDAp KQ0KCQkpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnc2tpbl9zeXN0ZW0nKSkudGRh KHJhZGlvU2V0KCRyYWRCdG5zLCAnc21kX2F0X3N5c3RlbScsICRhdF9wcmVmc1snc21kX2F0 X3N5c3RlbSddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X3JhZGlvIicpKTsNCg0KCQkv LyBPcHRpb24gMQ0KCQkkcHJpdl9saXN0ID0gJzxzZWxlY3QgaWQ9InNtZF9hdF9wcml2cyIg bmFtZT0ic21kX2F0X3ByaXZzW10iIGNsYXNzPSJsaXN0IiBzaXplPSInLiRudW1MZXZzLici IG11bHRpcGxlPSJtdWx0aXBsZSI+JzsNCgkJZm9yZWFjaCAoJGxldmVscyBhcyAkbGV2aWQg PT4gJGxldm5hbWUpIHsNCgkJCSRwcml2X2xpc3QgLj0gJzxvcHRpb24gdmFsdWU9IicuJGxl dmlkLiciPicuJGxldm5hbWUuJzwvb3B0aW9uPic7DQoJCX0NCgkJJHByaXZfbGlzdCAuPSAn PC9zZWxlY3Q+JzsNCg0KCQkvLyBOb3RlIHRoZSBoaWRkZW4gc2tpbiBncm91cCBib3g7IGpR dWVyeSBrZWVwcyB0cmFjayBvZiBhbnkgbGlzdCBjaGFuZ2VzIGFuZCBrZWVwcyBpdCB1cGRh dGVkDQoJCSRzZWxhID0gc21kX2F0X2dUeHQoJ3NraW5fZ3JvdXBzJyk7DQoJCSRzZWxiID0g aElucHV0KCdzbWRfYXRfZ3JvdXBfbGlzdCcsICRhdF9wcmVmc1snc21kX2F0X2dyb3VwX2xp c3QnXSk7DQoJCSRzZWxiIC49ICc8c2VsZWN0IGlkPSJzbWRfYXRfZ3JwcyIgbmFtZT0ic21k X2F0X2dycHMiIGNsYXNzPSJsaXN0IiBzaXplPSInLiRudW1MZXZzLiciPic7DQoJCWZvcmVh Y2ggKCRza2luX2xpc3QgYXMgJGFza2luKSB7DQoJCQlpZiAoc21kX2F0X2V4aXN0cygkYXNr aW4pKSB7DQoJCQkJJHNlbGIgLj0gJzxvcHRpb24gdmFsdWU9IicuJGFza2luLiciPicuJGFz a2luLic8L29wdGlvbj4nOw0KCQkJfQ0KCQl9DQoJCSRzZWxiIC49ICc8L3NlbGVjdD4nOw0K CQllY2hvIHRyKHRkYSgkc2VsYSwgJyBjbGFzcz0ic21kX2F0X3NlbDEgc21kX2hpZGRlbiIn KSAuIHRkYSgkc2VsYi4kcHJpdl9saXN0LCAnIHdpZHRoPSI0MDAiIGNsYXNzPSJzbWRfYXRf c2VsMSBzbWRfaGlkZGVuIicpKTsNCg0KCQkvLyBPcHRpb24gMg0KCQkkc2VsYSA9IHNtZF9h dF9nVHh0KCdhbGxvd2VkX3NraW5zJyk7DQoJCSRzZWxiID0gJzxzZWxlY3QgaWQ9InNtZF9h dF91c2VyX2xpc3QiIG5hbWU9InNtZF9hdF91c2VyX2xpc3RbXSIgY2xhc3M9Imxpc3QiIHNp emU9IjgiIG11bHRpcGxlPSJtdWx0aXBsZSI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBh cyAkYXNraW4pIHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2Vs YiAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kYXNraW4uJyInLigoaW5fYXJyYXkoJGFza2luLCAk dXNraW5zKSkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpLic+Jy4kYXNraW4uJzwv b3B0aW9uPic7DQoJCQl9DQoJCX0NCgkJJHNlbGIgLj0gJzwvc2VsZWN0PicuJGNsckJ0bjsN CgkJZWNobyB0cih0ZGEoJHNlbGEsICcgY2xhc3M9InNtZF9hdF9zZWwyIHNtZF9oaWRkZW4i JykgLiB0ZGEoJHNlbGIsICcgd2lkdGg9IjI0MCIgY2xhc3M9InNtZF9hdF9zZWwyIHNtZF9o aWRkZW4iJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7DQoJCWVj aG8gJzwvZm9ybT4nOw0KCX0gZWxzZSBpZiAoJG51bVJvd3MgPiAwICYmICRudW1Sb3dzIDwg JG51bVJlcVByZWZzKSB7DQoJCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfYXRfZ1R4dCgncHJl ZnNfc29tZScpKS5ici5icg0KCQkJCQkJLnNtZF9hdF9nVHh0KCdwcmVmc19zb21lX2V4cGxh aW4nKS5ici5icg0KCQkJCQkJLnNtZF9hdF9nVHh0KCdwcmVmc19zb21lX29wdGlvbnMnKSwg JyBjb2xzcGFuPSIyIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0blJlbW92ZSwkYnRuU3R5bGUp IC4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9IGVsc2Ugew0KCQllY2hvIHRy KHRkYShzbWRfYXRfZ1R4dCgncHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIi JykpOw0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJfQ0KCWVj aG8gZW5kVGFibGUoKTsNCg0KCWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph dmFzY3JpcHQiPg0KDQovLyBDb25jYXRlbmF0ZSBjaGVja2JveCBvcHRpb25zIGZvciBzdG9y YWdlDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnN3YXAoc2VsVmFsdWUpIHsNCglmb3IgKGlkeD0w OyBpZHggPCAzOyBpZHgrKykgew0KCQlpZiAoaWR4PT1zZWxWYWx1ZSkgew0KCQkJalF1ZXJ5 KCIuc21kX2F0X3NlbCIraWR4KS5zaG93KCk7DQoJCX0gZWxzZSB7DQoJCQlqUXVlcnkoIi5z bWRfYXRfc2VsIitpZHgpLmhpZGUoKTsNCgkJfQ0KCX0NCn0NCmpRdWVyeShmdW5jdGlvbigp IHsNCglqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9zeXN0ZW0nXSIpLmNoYW5nZShmdW5j dGlvbigpIHsNCgkJc21kX2F0X3ByZWZzd2FwKHRoaXMudmFsdWUpOw0KCX0pOw0KDQoJalF1 ZXJ5KCcjc21kX2NscicpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkoJyNzbWRfYXRf dXNlcl9saXN0IG9wdGlvbicpLmF0dHIoInNlbGVjdGVkIiwgIiIpOw0KCX0pOw0KDQoJalF1 ZXJ5KCIjc21kX2F0X2dycHMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBq UXVlcnkodGhpcykudmFsKCk7DQoNCgkJLy8gQ2xlYXIgdGhlIG9sZCBwcml2cyBsaXN0IGFu ZCBncmFiIHRoZSBjdXJyZW50IGxpc3QgZnJvbSB0aGUgaGlkZGVuIGZpZWxkDQoJCWpRdWVy eSgiI3NtZF9hdF9wcml2cyBvcHRpb24iKS5hdHRyKCJzZWxlY3RlZCIsZmFsc2UpOw0KCQl2 YXIgZ3JwbGlzdCA9IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIp LnZhbCgpOw0KCQl2YXIgZ3JwcyA9IGdycGxpc3Quc3BsaXQoJywnKTsNCgkJdmFyIGNudCA9 IGdycHMubGVuZ3RoOw0KCQlmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjbnQ7IGlkeCsrKSB7 DQoJCQlwcml2cyA9IGdycHNbaWR4XS5zcGxpdCgnOicpOw0KCQkJc2tpbmlkID0gcHJpdnMu c2hpZnQoKTsNCgkJCWlmIChza2luaWQgPT0gc2Vsc2tpbikgew0KCQkJCW51bVByaXZzID0g cHJpdnMubGVuZ3RoOw0KCQkJCWZvciAoamR4ID0gMDsgamR4IDwgbnVtUHJpdnM7IGpkeCsr KSB7DQoJCQkJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb25bdmFsdWU9JyIrcHJpdnNb amR4XSsiJ10iKS5hdHRyKCJzZWxlY3RlZCIsIHRydWUpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K CX0pOw0KDQoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0K CQlzZWxza2luID0galF1ZXJ5KCIjc21kX2F0X2dycHMgb3B0aW9uOnNlbGVjdGVkIikudmFs KCk7DQoJCXZhciBvdXQgPSBbXTsNCgkJdmFyIHByaXZzID0gW107DQoJCXByaXZzLnB1c2go c2Vsc2tpbik7DQoJCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb246c2VsZWN0ZWQiKS5l YWNoKGZ1bmN0aW9uKCkgew0KCQkJcHJpdnMucHVzaChqUXVlcnkodGhpcykudmFsKCkpOw0K CQl9KTsNCgkJaWYgKHByaXZzLmxlbmd0aCA9PSAxKSB7DQoJCQlwcml2cy5wb3AoKTsNCgkJ fSBlbHNlIHsNCgkJCW91dC5wdXNoKHByaXZzLmpvaW4oIjoiKSk7DQoJCX0NCgkJdmFyIGhp ZGxpc3QgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9saXN0J10iKS52YWwo KTsNCgkJdmFyIHByZXZsaXN0ID0gaGlkbGlzdC5zcGxpdCgnLCcpOw0KCQl2YXIgcHJldmNu dCA9IHByZXZsaXN0Lmxlbmd0aDsNCg0KCQlqUXVlcnkoIiNzbWRfYXRfZ3JwcyBvcHRpb24i KS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJY3VycnNraW4gPSBqUXVlcnkodGhpcykudmFsKCk7 DQoJCQlpZiAoY3VycnNraW4gIT0gc2Vsc2tpbikgew0KCQkJCWZvciAodmFyIGlkeCA9IDA7 IGlkeCA8IHByZXZjbnQ7IGlkeCsrKSB7DQoJCQkJCXByZXZwcml2cyA9IHByZXZsaXN0W2lk eF0uc3BsaXQoJzonKTsNCgkJCQkJc2tpbmlkID0gcHJldnByaXZzLnNoaWZ0KCk7DQoJCQkJ CS8vIEdlbmVyYXRlIHRoZSBwcml2IGxpc3QgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQg c2tpbiwgcmVtb3ZpbmcgYW55IGR1cGxpY2F0ZSBwcml2cyBzZXQgZWxzZXdoZXJlDQoJCQkJ CWlmIChza2luaWQgPT0gY3VycnNraW4pIHsNCgkJCQkJCXRtcG91dCA9IFtdOw0KCQkJCQkJ dG1wb3V0LnB1c2goc2tpbmlkKTsNCgkJCQkJCWZvciAodGhpc3ByaXYgaW4gcHJldnByaXZz KSB7DQoJCQkJCQkJaWYgKGpRdWVyeS5pbkFycmF5KHByZXZwcml2c1t0aGlzcHJpdl0sIHBy aXZzKSA8IDApIHsNCgkJCQkJCQkJdG1wb3V0LnB1c2gocHJldnByaXZzW3RoaXNwcml2XSk7 DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKHRtcG91dC5sZW5ndGggPiAxKSB7DQoJ CQkJCQkJb3V0LnB1c2godG1wb3V0LmpvaW4oIjoiKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJ CQl9DQoJCQl9DQoJCX0pOw0KCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF9hdF9ncm91cF9s aXN0J10iKS52YWwob3V0KTsNCgl9KTsNCg0KCS8vIERpc3BsYXkgYSB0b29sdGlwIHNob3dp bmcgdGhlIGN1cnJlbnRseS1hc3NpZ25lZCBza2luIHdoZW4gaG92ZXJpbmcgb3ZlciBhIHBy aXZpbGVnZSBsZXZlbA0KCWpRdWVyeSgiI3NtZF9hdF9wcml2cyBvcHRpb24iKS5ob3Zlcihm dW5jdGlvbigpIHsNCgkJaG92aXRlbSA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJZ3JwcyA9 IGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOw0KCQlp dGVtcyA9IGdycHMuc3BsaXQoIiwiKTsNCgkJZm9yIChpZHggPSAwOyBpZHggPCBpdGVtcy5s ZW5ndGg7IGlkeCsrKSB7DQoJCQlza2lueiA9IGl0ZW1zW2lkeF0uc3BsaXQoIjoiKTsNCgkJ CWZvciAoamR4ID0gMTsgamR4IDwgc2tpbnoubGVuZ3RoOyBqZHgrKykgew0KCQkJCWlmIChz a2lueltqZHhdID09IGhvdml0ZW0pIHsNCgkJCQkJalF1ZXJ5KHRoaXMpLmF0dHIoInRpdGxl Iiwgc2tpbnpbMF0pOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9LA0KCWZ1 bmN0aW9uKCkgew0KCQlqUXVlcnkodGhpcykuYXR0cigidGl0bGUiLCAiIik7DQoJfSk7DQoJ c21kX2F0X3ByZWZzd2FwKGpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X3N5c3RlbSddOmNo ZWNrZWQiKS52YWwoKSk7DQoJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIikuY2hhbmdlKCk7DQp9 KTsNCjwvc2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5zbWRfZmFrZWJ0biB7 DQoJY29sb3I6IzU1NTsNCgljdXJzb3I6cG9pbnRlcjsNCn0NCiNzbWRfYXRfcmFkaW8gaW5w dXQgew0KCWZsb2F0OmxlZnQ7DQoJY2xlYXI6Ym90aDsNCn0NCiNzbWRfYXRfcmFkaW8gbGFi ZWwgew0KCWZsb2F0OmxlZnQ7DQp9DQouc21kX2hpZGRlbiB7DQoJZGlzcGxheTpub25lOw0K fQ0KPC9zdHlsZT4NCkVPSlM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gU3BsaXQgYSBtdWx0aS1jaGFyIHByZWZlcmVuY2UgdmFsdWUgaW50byBhbiBhcnJheSBv ZiBrZXlzL3ZhbHVlcy4NCi8vIE5vdGU6IHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm90IHJl YWQgZGlyZWN0bHkgZnJvbSB0aGUgcHJlZnMgYXJyYXkgaW4gdGhpcyBmdW5jdGlvbiAtIGlu dGVudGlvbmFsbHkNCmZ1bmN0aW9uIHNtZF9hdF9wcmVmX2V4cGxvZGUoJHZhbCkgew0KCSRv cmRlciA9IGFycmF5X3ZhbHVlcyhhcnJheShzbWRfYXRfZ1R4dCgnY19nemlwJyksc21kX2F0 X2dUeHQoJ2NfYnppcCcpLHNtZF9hdF9nVHh0KCdjX3ppcCcpKSk7DQoJJG9ub2ZmID0gYXJy YXlfdmFsdWVzKHByZWdfc3BsaXQoJy8vJywgJHZhbCwgLTEsIFBSRUdfU1BMSVRfTk9fRU1Q VFkpKTsNCgkkb3V0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRvcmRlciBhcyAka2V5MSA9PiAk dmFsdWUxKSB7DQoJCSRvdXRbKHN0cmluZykkdmFsdWUxXSA9ICRvbm9mZlska2V5MV07DQoJ fQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJl ZnNfaW5zdGFsbCgkc2hvd3BhbmU9JzEnKSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoJ JG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoICgkc21kX2F0X3ByZWZzWzBdIGFzICRwcmVmID0+ ICRkZmx0KSB7DQoJCWlmICghZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJl ZikpIHsNCgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCdwcmVmc19pZD0xLCBu YW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkuJywgdmFsPScuZG9RdW90ZShkb1NsYXNo KCRkZmx0KSkuJyxldmVudD0ic21kX2Fkc2tpbiInKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dw YW5lKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0K CQlzbWRfYXRfc2V0dXAoJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX2F0X3ByZWZzX3JlbW92ZSgkc2hvd3BhbmU9JzEnKSB7DQoJZ2xvYmFsICRzbWRf YXRfcHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoIChhcnJheV9tZXJnZSgkc21k X2F0X3ByZWZzWzBdLCRzbWRfYXRfcHJlZnNbMV0pIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJ CWlmIChmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlk ID0gc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHBy ZWYpKSk7DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVzc2FnZSA9IHNtZF9h dF9nVHh0KCdwcmVmc19kZWxldGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfdXBkYXRlKCkgew0K CWdsb2JhbCAkc21kX3BsdWdpbl9wcmVmcywgJHNtZF9hdF9wcmVmcywgJHNtZF9hdF9ldmVu dDsNCg0KCSRtZXNzYWdlID0gJyc7DQoJJHBvc3QgPSBhcnJheSgpOw0KCSRwb3N0WydzbWRf YXRfZ2xvYmFsX3NraW4nXSA9IGdwcygnc21kX2F0X2dsb2JhbF9za2luJyk7DQoJJHBvc3Rb J3NtZF9hdF9zeXN0ZW0nXSA9IGdwcygnc21kX2F0X3N5c3RlbScpOw0KCSRwb3N0WydzbWRf YXRfbGF5b3V0J10gPSBncHMoJ3NtZF9hdF9sYXlvdXQnKTsNCgkkcG9zdFsnc21kX2F0X2Nh c2Vfc29ydCddID0gZ3BzKCdzbWRfYXRfY2FzZV9zb3J0Jyk7DQoJJHBvc3RbJ3NtZF9hdF90 dyddID0gZ3BzKCdzbWRfYXRfdHcnKTsNCgkkcG9zdFsnc21kX2F0X3RoJ10gPSBncHMoJ3Nt ZF9hdF90aCcpOw0KCWlmIChncHMoJ3NtZF9hdF91c2VyX2xpc3QnKSkgew0KCQkkcG9zdFsn c21kX2F0X3VzZXJfbGlzdCddID0gam9pbignLCcsIGdwcygnc21kX2F0X3VzZXJfbGlzdCcp KTsNCgl9IGVsc2Ugew0KCQkkcG9zdFsnc21kX2F0X3VzZXJfbGlzdCddID0gJyc7DQoJfQ0K CWlmIChncHMoJ3NtZF9hdF9ncm91cF9saXN0JykpIHsNCgkJJHBvc3RbJ3NtZF9hdF9ncm91 cF9saXN0J10gPSBncHMoJ3NtZF9hdF9ncm91cF9saXN0Jyk7DQoJfQ0KCWlmIChncHMoJ3Nt ZF9hdF9jcnVzaCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfY3J1c2gnXSA9IGdwcygnc21kX2F0 X2NydXNoJyk7DQoJfQ0KDQoJLy8gU2V0IHRoZSBzeXN0ZW0td2lkZSB0aGVtZSB0byB0aGUg Z2xvYmFsIHRoZW1lDQoJaWYgKCRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgew0KCQlz ZXRfcHJlZigndGhlbWVfbmFtZScsICRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSk7DQoJ fQ0KDQoJZm9yZWFjaCAoJHNtZF9hdF9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0K CQlpZiAoaXNzZXQoJHBvc3RbJHByZWZdKSkgew0KCQkJc2V0X3ByZWYoJHByZWYsICRwb3N0 WyRwcmVmXSwgJHNtZF9hdF9ldmVudCwgMik7DQoJCX0NCgl9DQoJJG1lc3NhZ2UgPSBnVHh0 KCdwcmVmZXJlbmNlc19zYXZlZCcpOw0KCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVVRJTElUWSBGVU5DVElPTlMNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9wcml2cygk dXNlcj0nJykgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoJJHVzZXIgPSAoJHVzZXIpID8gJHVz ZXIgOiAkdHhwX3VzZXI7DQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJpdnMiLCAidHhwX3Vz ZXJzIiwgIm5hbWU9JyIuZG9TbGFzaCgkdXNlcikuIiciKTsNCglyZXR1cm4gJHByaXZzOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9leGlz dHMoJG5hbWUpIHsNCgkkaW5zdGFuY2UgPSB0aGVtZTo6ZmFjdG9yeSgkbmFtZSk7DQoJcmV0 dXJuICRpbnN0YW5jZTsNCn0NCg0KLy8gSWYgcGVyLXVzZXIgc2tpbiBzdXBwb3J0IGlzIE9G RiwgdGhlIGdsb2JhbCBza2luIHdpbnMuDQovLyBPbmUgZXhjZXB0aW9uOiBpZiB0aGUgdXNl ciBpcyBhbiBhZG1pbiwgYWxsb3cgdGhlIGN1cnJlbnQgc2tpbiB0byBwcmV2YWlsIHNvIHRo ZXkgbWF5IHN3aXRjaCBza2lucyB3aXRoIGltcHVuaXR5DQovLyBhbmQgbm90IGFmZmVjdCB0 aGUgZ2xvYmFsIHNraW4NCmZ1bmN0aW9uIHNtZF9hdF9wZXIoKSB7DQoJZ2xvYmFsICRzbWRf YXRfcHJpdnMsICRwcmVmcywgJHRoZW1lLCAkdHhwX3VzZXI7DQoNCgkkYXRfcHJlZnMgPSBz bWRfYXRfZ2V0X3ByZWZzKCk7DQoJJHNraW5TeXMgPSBpc3NldCgkYXRfcHJlZnNbJ3NtZF9h dF9zeXN0ZW0nXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA6IDA7DQoJJHByaXZz ID0gc21kX2F0X2dldF9wcml2cygpOw0KCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNb J3NtZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tp biddICE9ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAnJzsNCgkk Z2JsX3NraW4gPSAoc21kX2F0X2V4aXN0cygkZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdj bGFzc2ljJzsNCg0KCXN3aXRjaCAoJHNraW5TeXMpIHsNCgkJY2FzZSAwOg0KCQkJLy8gR2xv YmFsIGZvcmNlZCBza2luIChleGNlcHQgYWRtaW5zKQ0KCQkJaWYgKCFpbl9hcnJheSgkcHJp dnMsIGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsNCgkJCQlyZXR1cm4gJGdibF9z a2luOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRf cHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5h bWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3Nr aW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAxOg0KCQkJLy8gR3Jv dXAtbGV2ZWwgZm9yY2VkIHNraW5zDQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9k ZSgnLCcsICRzbWRfYXRfcHJpdnMpKSkgew0KCQkJCSRmb3JjZVNraW5zID0gKGlzc2V0KCRh dF9wcmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfZ3Jv dXBfbGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKTsN Cg0KCQkJCS8vIFNwbGl0IHRoZSBncm91cCBza2luIGxpc3QNCgkJCQkkZ3NraW5zID0gYXJy YXkoKTsNCgkJCQkkZ29wdHMgPSBleHBsb2RlKCcsJywgJGZvcmNlU2tpbnMpOw0KCQkJCWZv cmVhY2ggKCRnb3B0cyBhcyAkZ3JwZGVmKSB7DQoJCQkJCWlmICgkZ3JwZGVmID09ICcnKSBj b250aW51ZTsNCgkJCQkJJHByaXZncnAgPSBleHBsb2RlKCI6IiwgJGdycGRlZik7DQoJCQkJ CSRza2luaWQgPSBhcnJheV9zaGlmdCgkcHJpdmdycCk7DQoJCQkJCWlmIChpbl9hcnJheSgk cHJpdnMsICRwcml2Z3JwKSkgew0KCQkJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRza2lu aWQpKSA/ICRza2luaWQgOiAnY2xhc3NpYyc7Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVy biAoJGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZTsNCgkJCX0gZWxzZSB7 DQoJCQkJLy8gQWRtaW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywg KCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJu IChzbWRfYXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0K CQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgMjoNCgkJCS8vIFBlci11c2VyIHNraW4uIElmIHVz ZXIgaXMgbm9uLWFkbWluLCBjaGVjayB0aGUgc2tpbiBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0 DQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMp KSkgew0KCQkJCSR2YWxpZFNraW5zID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJf bGlzdCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSA6ICgoJGdibF9za2lu KSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSk7DQoJCQkJJHZhbGlkU2tpbnMgPSBkb19s aXN0KCR2YWxpZFNraW5zKTsNCgkJCQkkdGhlX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4n LCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1 cm4gKGluX2FycmF5KCR0aGVfc2tpbiwgJHZhbGlkU2tpbnMpICYmIHNtZF9hdF9leGlzdHMo JHRoZV9za2luKSkgPyAkdGhlX3NraW4gOiAnJzsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQWRt aW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4p ID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChzbWRfYXRfZXhp c3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJfQ0KCQkJYnJl YWs7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlYWQgYW5k IHJldHVybiB0aGUgbWFuaWZlc3QsIGlmIGl0IGV4aXN0cyBhbmQgYWRkIGEgZmV3IG90aGVy IG5pY2V0aWVzIHRvIHRoZSBhcnJheSBmb3IgbGF0ZXINCmZ1bmN0aW9uIHNtZF9hdF9yZWFk X3NraW5mbygkc2tpbikgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzOw0KDQoJJHRoaXNf dGhlbWUgPSB0aGVtZTo6ZmFjdG9yeSgkc2tpbik7DQoJJHNraW5mbyA9IGFycmF5KCk7DQoJ aWYgKCR0aGlzX3RoZW1lKSB7DQoJCSRza2luZm8gPSAkdGhpc190aGVtZS0+bWFuaWZlc3Qo KTsNCgkJJHNraW5mb1snZG5hbWUnXSA9IGVtcHR5KCRza2luZm9bJ3RpdGxlJ10pID8gdWN3 b3JkcygkdGhpc190aGVtZS0+bmFtZSkgOiAkc2tpbmZvWyd0aXRsZSddOw0KCQkkc2tpbmZv WyduYW1lJ10gPSAkdGhpc190aGVtZS0+bmFtZTsNCgkJJHNraW5mb1sncGF0aCddID0gJHRo aXNfdGhlbWUtPnVybDsNCgkJJHNraW5mb1sncGhwZmlsZSddID0gJHRoaXNfdGhlbWUtPnBh dGgoJHNraW4pOw0KCQkkc2tpbmZvWydiYXNlZF9vbiddID0gJyc7DQoJCSRjb250ZW50cyA9 IGZpbGVfZ2V0X2NvbnRlbnRzKCRza2luZm9bJ3BocGZpbGUnXSk7DQoJCWlmICgoJHBvcyA9 IHN0cnBvcygkY29udGVudHMsICd0aGVtZTo6YmFzZWRfb24nKSkgIT09IGZhbHNlKSB7DQoJ CQkkYmVncG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkcG9zKSsxOw0KCQkJJGVuZHBv cyA9IHN0cnBvcygkY29udGVudHMsICInIiwgJGJlZ3Bvcyk7DQoJCQkkYmFzZSA9IHN1YnN0 cigkY29udGVudHMsICRiZWdwb3MsICRlbmRwb3MtJGJlZ3Bvcyk7DQoJCQkkc2tpbmZvWydi YXNlZF9vbiddID0gKGluX2FycmF5KCRiYXNlLCAkc21kX2NvcmVfdGhlbWVzKSkgPyAnJyA6 ICRiYXNlOw0KCQl9DQoJCXVuc2V0KCR0aGlzX3RoZW1lKTsNCgl9DQoJcmV0dXJuICRza2lu Zm87DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gR3JhYiB0aGUgdGh1 bWJuYWlsIGZpbGVuYW1lIGlmIGl0IGV4aXN0cywgb3B0aW9uYWxseSByZXR1cm4gYSBmb3Jt YXR0ZWQgaW1nIHRhZw0KZnVuY3Rpb24gc21kX2F0X2dldF90aHVtYigkc2tpbiwgJGltZz0w KSB7DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0 X3ByZWZzKCk7DQoJJHR3ID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRf cHJlZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J107DQoJ JHRoID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9h dF90aCddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ107DQoJJHVzZV90aHVtYiA9 ICgkdHcgPT0gMCB8fCAkdGggPT0gMCkgPyBmYWxzZSA6IHRydWU7DQoNCgkvLyBBbiBhcnJh eSBtZWFucyB0aGUgbWFuaWZlc3QgaGFzIGFscmVhZHkgYmVlbiByZWFkIGFuZCBpcyBiZWlu ZyBwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uDQoJaWYgKCFpc19hcnJheSgkc2tpbikpIHsN CgkJJHNraW4gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0KCX0NCglpZiAoJHNraW4p IHsNCgkJJHNraW5kaXIgPSAkc2tpblsncGF0aCddOw0KCQkkdGh1bWJuYW1lID0gZ2xvYigk c2tpbmRpci4nc2NyZWVuc2hvdC4qJyk7DQoJCXJldHVybiAoJGltZyAmJiAkdXNlX3RodW1i ICYmICR0aHVtYm5hbWUgJiYgZmlsZV9leGlzdHMoJHRodW1ibmFtZVswXSkpID8gJzxpbWcg c3JjPSInLiR0aHVtYm5hbWVbMF0uJyIgYWx0PSInLigoaXNzZXQoJHNraW5bJ25hbWUnXSkp ID8gJHNraW5bJ25hbWUnXSA6ICcnKS4nIHRodW1ibmFpbCIgc3R5bGU9ImJvcmRlcjoycHgg cmlkZ2UgIzk5OTtwYWRkaW5nOjJweDsiIHdpZHRoPSInLiR0dy4nIiBoZWlnaHQ9IicuJHRo LiciIC8+JyA6ICcnOw0KCX0gZWxzZSB7DQoJCXJldHVybiAnJzsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbnMoKSB7 DQoJJHNraW5fbGlzdCA9IHRoZW1lOjpuYW1lcygpOw0KCSRza2luX2xpc3QgPSBzbWRfYXRf c29ydCgkc2tpbl9saXN0KTsNCglyZXR1cm4gJHNraW5fbGlzdDsNCn0NCg0KLy8gU29ydCB0 aGUgc2tpbnMgYnV0IGtlZXAgJ2NsYXNzaWMnIGF0IHRoZSB0b3ANCmZ1bmN0aW9uIHNtZF9h dF9zb3J0KCRza2luX2xpc3QpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJGNhc2VTZW5zZSA9 IGlzc2V0KCRwcmVmc1snc21kX2F0X2Nhc2Vfc29ydCddKSA/ICRwcmVmc1snc21kX2F0X2Nh c2Vfc29ydCddIDogMTsNCg0KCWlmKCRjYXNlU2Vuc2UpIHsNCgkJbmF0c29ydCgkc2tpbl9s aXN0KTsNCgl9IGVsc2Ugew0KCQluYXRjYXNlc29ydCgkc2tpbl9saXN0KTsNCgl9DQoJJGRm bHRfZm91bmQgPSBmYWxzZTsNCglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luX2lkeCA9 PiAkc2tpbl9uYW1lKSB7DQoJCWlmICgkc2tpbl9uYW1lID09ICJjbGFzc2ljIikgew0KCQkJ dW5zZXQoJHNraW5fbGlzdFskc2tpbl9pZHhdKTsNCgkJCSRkZmx0X2ZvdW5kID0gdHJ1ZTsN CgkJCWJyZWFrOw0KCQl9DQoJfQ0KCWlmICgkZGZsdF9mb3VuZCkgew0KCQlhcnJheV91bnNo aWZ0KCRza2luX2xpc3QsImNsYXNzaWMiKTsNCgl9DQoNCglyZXR1cm4gJHNraW5fbGlzdDsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfbGlz dGRpcigkc3RhcnRfZGlyPScuJykgew0KCSRmaWxlcyA9IGFycmF5KCk7DQoNCglpZiAoaXNf ZGlyKCRzdGFydF9kaXIpKSB7DQoJCSRmaCA9IG9wZW5kaXIoJHN0YXJ0X2Rpcik7DQoJCXdo aWxlICgoJGZpbGUgPSByZWFkZGlyKCRmaCkpICE9PSBmYWxzZSkgew0KCQkJLy8gbG9vcCB0 aHJvdWdoIHRoZSBmaWxlcywgc2tpcHBpbmcgLiBhbmQgLi4sIGFuZCByZWN1cnNpbmcgaWYg bmVjZXNzYXJ5DQoJCQlpZiAoc3RyY21wKCRmaWxlLCAnLicpPT0wIHx8IHN0cmNtcCgkZmls ZSwgJy4uJyk9PTApIGNvbnRpbnVlOw0KCQkJJGZpbGVwYXRoID0gJHN0YXJ0X2RpciAuICcv JyAuICRmaWxlOw0KCQkJaWYgKCBpc19kaXIoJGZpbGVwYXRoKSApIHsNCgkJCQkkZmlsZXMg PSBhcnJheV9tZXJnZSgkZmlsZXMsIHNtZF9hdF9saXN0ZGlyKCRmaWxlcGF0aCkpOw0KCQkJ fSBlbHNlIHsNCgkJCQlhcnJheV9wdXNoKCRmaWxlcywgJGZpbGVwYXRoKTsNCgkJCX0NCgkJ fQ0KCQljbG9zZWRpcigkZmgpOw0KCX0gZWxzZSB7DQoNCgkJLy8gZmFsc2UgaWYgdGhlIGZ1 bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG5vbi1kaXJlY3RvcnkgYXJndW1l bnQNCgkJJGZpbGVzID0gZmFsc2U7DQoJfQ0KDQoJcmV0dXJuICRmaWxlczsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZWN1cnNpdmUgcm1kaXIoKSBjb3VydGVz eSBvZiB0aGUgcGhwIG1hbnVhbCB1c2VyIGNvbW1lbnRzDQpmdW5jdGlvbiBzbWRfcm1kaXJf cmVjdXJzaXZlKCRmaWxlcGF0aCkgew0KCWlmIChpc19kaXIoJGZpbGVwYXRoKSAmJiAhaXNf bGluaygkZmlsZXBhdGgpKSB7DQoJCWlmICgkZGggPSBvcGVuZGlyKCRmaWxlcGF0aCkpIHsN CgkJCXdoaWxlICgoJHNmID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAo JHNmID09ICcuJyB8fCAkc2YgPT0gJy4uJykgY29udGludWU7DQoJCQkJaWYgKCFzbWRfcm1k aXJfcmVjdXJzaXZlKCRmaWxlcGF0aC4nLycuJHNmKSkgew0KCQkJCQlicmVhazsgLy8gRG9o LCBjYW4ndCBkZWxldGUNCgkJCQl9DQoJCQl9DQoJCQljbG9zZWRpcigkZGgpOw0KCQl9DQoJ CXJldHVybiBybWRpcigkZmlsZXBhdGgpOw0KCX0NCglyZXR1cm4gdW5saW5rKCRmaWxlcGF0 aCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRnJvbSBQSFAgbWFu dWFsIGNvbW1lbnRzLiBUaGFua3MgcHVyZW1hbmdvDQpmdW5jdGlvbiBzbWRfYXRfaXNfZGly KCRkaXIpIHsNCgkvLyBieXBhc3NlcyBvcGVuX2Jhc2VkaXIgcmVzdHJpY3Rpb25zIG9mIGlz X2RpciBhbmQgZmlsZXBlcm1zDQoJJHRtcF9jbWQgPSBgbHMgLWRsICRkaXJgOw0KCSRkaXJf ZmxhZyA9ICR0bXBfY21kWzBdOw0KCWlmKCRkaXJfZmxhZyE9ImQiKSB7DQoJCS8vIG5vdCBk OyB1c2UgbmV4dCBjaGFyIChmaXJzdCBjaGFyIG1pZ2h0IGJlICdzJyBhbmQgaXMgc3RpbGwg ZGlyZWN0b3J5KQ0KCQkkZGlyX2ZsYWcgPSAkdG1wX2NtZFsxXTsNCgl9DQoJcmV0dXJuICgk ZGlyX2ZsYWc9PSJkIik7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX21rZGlyX3JlY3Vyc2l2ZSgkcGF0aCwgJG1vZGUgPSAwNzU1KSB7DQoJaWYo QG1rZGlyKCRwYXRoLCAkbW9kZSkgb3IgZmlsZV9leGlzdHMoJHBhdGgpKSByZXR1cm4gdHJ1 ZTsNCglyZXR1cm4gKHNtZF9ta2Rpcl9yZWN1cnNpdmUoZGlybmFtZSgkcGF0aCksICRtb2Rl KSBhbmQgbWtkaXIoJHBhdGgsICRtb2RlKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2ll KCdzbWRfYXRfcGFnZWJ5JywgZ3BzKCdxdHknKSk7DQoJc21kX2F0X2xpc3QoJycpOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2go JG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2czsNCg0KCWV4dHJhY3QoZG9T bGFzaChncHNhKGFycmF5KCdza2luJywgJ2V2ZW50JywgJ25leHRzdGVwJykpKSk7DQoJJHVy bCA9ICI/ZXZlbnQ9Ii4kZXZlbnQuIiZzdGVwPSIuJG5leHRzdGVwOw0KDQoJaWYgKCRza2lu ICYmIHNtZF9hdF9leGlzdHMoJHNraW4pKSB7DQoJCXNldF9wcmVmKCdzbWRfc2tpbicsICRz a2luLCAkZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFU RSk7DQoJCSR1cmwgLj0gJyZtZXNzYWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDog c21kX2F0X2dUeHQoJ3NraW5fc3dpdGNoZWQnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikp KTsNCgl9IGVsc2Ugew0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7DQoJfQ0K DQoJLy8gU2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJsZS1kZWNsdXRj aCBpbiBvcmRlciB0byBzaG93IHRoZSBza2luIHRoaXMgZmlyc3QgdGltZQ0KCWVjaG8gPDw8 RU9TDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24u aHJlZj0ieyR1cmx9IjsNCjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVp dj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVP UzsNCglleGl0Ow0KfQ0KDQovLyBBbGwtdXNlciBza2luIGNob29zZXINCmZ1bmN0aW9uIHNt ZF9hZG1hdCgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3Rl cCwgYXJyYXkoDQoJCQknc21kX2F0X3N3aXRjaCcsDQoJCSkpKSB7DQoJCXNtZF9hdF9jaG9v c2VyKCcnKTsNCgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfY2hvb3NlcigkbWVzc2FnZT0nJykgew0KCWdsb2Jh bCAkcHJlZnMsICRzbWRfYXRfYWRtX2V2ZW50LCAkdGhlbWU7DQoNCgkkYXRfcHJlZnMgPSBz bWRfYXRfZ2V0X3ByZWZzKCk7DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9h dF9sYXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9 IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3 J10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDog JHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ10pICsgODA7DQoNCgkkbWVzc2FnZSA9ICgk bWVzc2FnZSkgPyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0 X2dUeHQoJ3NraW5uZXInKSwkbWVzc2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5u YW1lOw0KDQoJJGFsbG93ZWQgPSAnJzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNl cl9saXN0J10pKSB7DQoJCSRhbGxvd2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRf dXNlcl9saXN0J10pOw0KCQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkg ew0KCQkJaWYgKCR2YWxpZCA9PSAnJykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsN CgkJCX0NCgkJfQ0KCX0NCgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkk aGRyb3cgPSBoZWQoc21kX2F0X2dUeHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRs YXlvdXQ9PSIwIikgew0KCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJZWNobyB0cigN CgkJCXRkYSgkaGRyb3csICcgY29sc3Bhbj0iMyInKQ0KCQkpOw0KCQllY2hvIHRyKA0KCQkJ YXNzSGVhZCgNCgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9yJywN CgkJCQknZGVzY3JpcHRpb24nDQoJCQkpKTsNCgl9IGVsc2Ugew0KCQllY2hvIDw8PEVPQ1NT DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLnNtZF9ncmlkIHsNCgl3aWR0aDo5NjBweDsN CgltYXJnaW46MCBhdXRvOw0KfQ0KLnNtZF9jZWxsIHsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRp bmc6MTBweDsNCgltYXJnaW46MTBweDsNCglib3JkZXI6MXB4IHJpZGdlICNjY2M7DQoJd2lk dGg6eyR0d31weDsNCgloZWlnaHQ6eyR0aH1weDsNCn0NCi5zbWRfY2VsbDpob3ZlciB7DQoJ YmFja2dyb3VuZDojZGRkOw0KfQ0KLnNtZF9jbGVhciB7DQoJY2xlYXI6Ym90aDsNCn0NCi5z bWRfYXV0aCB7DQoJdGV4dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KPC9z dHlsZT4NCkVPQ1NTOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfZ3JpZCI+PGRpdiBjbGFz cz0ic21kX25ld3JvdyI+Jy4kaGRyb3cuJzwvZGl2Pic7DQoJfQ0KCWZvcmVhY2ggKCRhbGxv d2VkIGFzICRza2luX25hbWUpIHsNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygk c2tpbl9uYW1lKTsNCgkJaWYgKCRza2luZm8pIHsNCgkJCSR0aHVtYm5haWwgPSBzbWRfYXRf Z2V0X3RodW1iKCRza2luZm8sIDEpOw0KCQkJJHRoaXNfc2tpbiA9ICgkc2tpbl9uYW1lID09 ICRjdXJyX3NraW4pID8gc3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5h bWUnXTsNCgkJCSR0aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfYWRtX2V2 ZW50LmEuJ3N0ZXA9c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2FkbWF0Jy5hLidz a2luPScuJHNraW5fbmFtZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicp LiciPicuJHRoaXNfc2tpbi4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8 L2Rpdj4nIDogJycpLic8L2E+JzsNCgkJCSRhdXRocm93ID0gKHN0cnBvcygkc2tpbmZvWydh dXRob3JfdXJpJ10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1sn YXV0aG9yX3VyaSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1sn YXV0aG9yJ107DQoNCgkJCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJCQllY2hvIHRyKA0KCQkJ CQl0ZCgkdGh1bXJvdykNCgkJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJCS50ZCgkc2tp bmZvWydkZXNjcmlwdGlvbiddLCAyNTApDQoJCQkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJy X3NraW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpDQoJCQkJKTsN CgkJCX0gZWxzZSB7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NlbGwiJy4oKCRza2lu X25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7Iicg OiAnJykuJz4nOw0KCQkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCQll Y2hvICc8ZGl2IGNsYXNzPSJzbWRfYXV0aCI+Jy5zbWRfYXRfZ1R4dCgnYnknKS4kYXV0aHJv dy4nPC9kaXY+JzsNCgkJCQllY2hvICc8L2Rpdj4nOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgk bGF5b3V0PT0iMCIpIHsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8g JzxkaXYgY2xhc3M9InNtZF9jbGVhciI+PC9kaXY+PC9kaXY+JzsNCgl9DQp9DQoNCi8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRB Ui9HWklQL0JaSVAyL1pJUCBBUkNISVZFIENMQVNTRVMgMi4xDQogfCBCeSBEZXZpbiBEb3Vj ZXR0ZQ0KIHwgQ29weXJpZ2h0IChjKSAyMDA1IERldmluIERvdWNldHRlDQogfCBFbWFpbDog ZGFya3Nub29weUBzaGF3LmNhDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQogfCBFbWFpbCBidWdzL3N1Z2dlc3Rpb25zIHRvIGRhcmtz bm9vcHlAc2hhdy5jYQ0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KIHwgVGhpcyBzY3JpcHQgaGFzIGJlZW4gY3JlYXRlZCBhbmQgcmVs ZWFzZWQgdW5kZXINCiB8IHRoZSBHTlUgR1BMIGFuZCBpcyBmcmVlIHRvIHVzZSBhbmQgcmVk aXN0cmlidXRlDQogfCBvbmx5IGlmIHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3Qg cmVtb3ZlZA0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovDQoNCi8vIE5PVEU6IGNsYXNzIG5hbWVzIGFsdGVyZWQgdG8gYWRkIHNtZF9h dF8gcHJlZml4IHRvIGF2b2lkIGNsYXNoZXMgaW4gZ2xvYmFsIHNjb3BlLCBhbmQgYWRkZWQg c3ViZGlyIGNyZWF0aW9uDQoNCmNsYXNzIHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24g c21kX2F0X2FyY2hpdmUoJG5hbWUpDQoJew0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgN CgkJCSdiYXNlZGlyJyA9PiAiLiIsDQoJCQknbmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVu ZCcgPT4gIiIsDQoJCQknaW5tZW1vcnknID0+IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0K CQkJJ3JlY3Vyc2UnID0+IDEsDQoJCQknc3RvcmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3ds aW5rcycgPT4gMCwNCgkJCSdsZXZlbCcgPT4gMywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQkn c2Z4JyA9PiAiIiwNCgkJCSd0eXBlJyA9PiAiIiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkp Ow0KCQkkdGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJh eSAoKTsNCgkJJHRoaXMtPnN0b3Jlb25seSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3Ig PSBhcnJheSAoKTsNCgl9DQoNCglmdW5jdGlvbiBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7 DQoJCWZvcmVhY2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9w dGlvbnNbJGtleV0gPSAkdmFsdWU7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydi YXNlZGlyJ10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3Jl cGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlz LT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhp cy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10g PSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwgIiIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10p Ow0KCQl9DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJ CQkkdGhpcy0+b3B0aW9uc1snbmFtZSddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhp cy0+b3B0aW9uc1snbmFtZSddKTsNCgkJCSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVn X3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0K CQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRo aXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMt Pm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0g cHJlZ19yZXBsYWNlKCIvXihcLipcLyspKy8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBl bmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIv XC8rLyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0 aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0 aW9uc1sncHJlcGVuZCddKSAuICIvIjsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9h cmNoaXZlKCkNCgl7DQoJCSR0aGlzLT5tYWtlX2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9w dGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJ Y2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlv bnNbJ292ZXJ3cml0ZSddID09IDAgJiYgZmlsZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25h bWUnXSAuICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0 aW9uc1sndHlwZSddID09ICJiemlwIiA/ICIudG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRo aXMtPmVycm9yW10gPSAiRmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBl eGlzdHMuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVs c2UgaWYgKCR0aGlzLT5hcmNoaXZlID0gQGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10g LiAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNb J3R5cGUnXSA9PSAiYnppcCIgPyAiLnRtcCIgOiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigk cHdkKTsNCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qg b3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRp cigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+ YXJjaGl2ZSA9ICIiOw0KDQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJ ew0KCQljYXNlICJ6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0K CQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJ CQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWlmICgh JHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3Vs ZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAo ISR0aGlzLT5jcmVhdGVfYnppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNv dWxkIG5vdCBjcmVhdGUgYnppcDIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJ YnJlYWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0K CQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUu IjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkp DQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZp bGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0K CQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltd ID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0N CgkJfQ0KDQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJ CQlmY2xvc2UoJHRoaXMtPmFyY2hpdmUpOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBl J10gPT0gImd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJ CXVubGluaygkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlv bnNbJ25hbWUnXSAuICIudG1wIik7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgk ZGF0YSkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJ ZndyaXRlKCR0aGlzLT5hcmNoaXZlLCAkZGF0YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNo aXZlIC49ICRkYXRhOw0KCX0NCg0KCWZ1bmN0aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAo IWVtcHR5ICgkdGhpcy0+ZXhjbHVkZSkpDQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMg JGtleSA9PiAkdmFsdWUpDQoJCQkJZm9yZWFjaCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJl bnQpDQoJCQkJCWlmICgkdmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJ CQkJdW5zZXQgKCR0aGlzLT5maWxlc1ska2V5XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5z dG9yZW9ubHkpKQ0KCQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVl KQ0KCQkJCWZvcmVhY2ggKCR0aGlzLT5zdG9yZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlm ICgkdmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZp bGVzWyRrZXldWydtZXRob2QnXSA9IDA7DQoJCXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRo aXMtPnN0b3Jlb25seSk7DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsN CgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1w IGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmZpbGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglm dW5jdGlvbiBleGNsdWRlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlz dF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRo aXMtPmV4Y2x1ZGVbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVz KCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZv cmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1 cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gbGlzdF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICgh aXNfYXJyYXkgKCRsaXN0KSkNCgkJew0KCQkJJHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0g YXJyYXkgKCR0ZW1wKTsNCgkJCXVuc2V0ICgkdGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBh cnJheSAoKTsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25z WydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJ CQkkY3VycmVudCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1 cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3Vy cmVudCA9IHByZWdfcmVwbGFjZSgiL1wvJC8iLCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0 cnN0cigkY3VycmVudCwgIioiKSkNCgkJCXsNCgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2Uo Ii8oW1xcXF5cJFwuXFtcXVx8XChcKVw/XCtce1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJy ZW50KTsNCgkJCQkkcmVnZXggPSBzdHJfcmVwbGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJ CQkJJGRpciA9IHN0cnN0cigkY3VycmVudCwgIi8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwg c3RycnBvcygkY3VycmVudCwgIi8iKSkgOiAiLiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFy c2VfZGlyKCRkaXIpOw0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJ aWYgKHByZWdfbWF0Y2goIi9eeyRyZWdleH0kL2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJ CQkJCQkkZmlsZXNbXSA9ICRjdXJyZW50MjsNCgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAk dGVtcCwgJGN1cnJlbnQpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkp DQoJCQl7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlm b3JlYWNoICgkdGVtcCBhcyAkZmlsZSkNCgkJCQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1 bnNldCAoJHRlbXAsICRmaWxlKTsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygk Y3VycmVudCkpDQoJCQkJJGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAn bmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxh Y2UoIi8oXC4rXC8rKSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09 IDAgJiYgc3Ryc3RyKCRjdXJyZW50LCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwg c3RycnBvcygkY3VycmVudCwgIi8iKSArIDEpIDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScg PT4gQGlzX2xpbmsoJGN1cnJlbnQpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcydd ID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9z KCRjdXJyZW50LCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJ CWNoZGlyKCRwd2QpOw0KDQoJCXVuc2V0ICgkY3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQo JGZpbGVzLCBhcnJheSAoInNtZF9hdF9hcmNoaXZlIiwgInNvcnRfZmlsZXMiKSk7DQoNCgkJ cmV0dXJuICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBwYXJzZV9kaXIoJGRpcm5hbWUpDQoJ ew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAxICYmICFwcmVnX21h dGNoKCIvXihcLitcLyopKyQvIiwgJGRpcm5hbWUpKQ0KCQkJJGZpbGVzID0gYXJyYXkgKGFy cmF5ICgnbmFtZScgPT4gJGRpcm5hbWUsICduYW1lMicgPT4gJHRoaXMtPm9wdGlvbnNbJ3By ZXBlbmQnXSAuDQoJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMt Pm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZGlybmFtZSwgIi8iKSkg Pw0KCQkJCXN1YnN0cigkZGlybmFtZSwgc3RycnBvcygkZGlybmFtZSwgIi8iKSArIDEpIDog JGRpcm5hbWUpLCAndHlwZScgPT4gNSwgJ3N0YXQnID0+IHN0YXQoJGRpcm5hbWUpKSk7DQoJ CWVsc2UNCgkJCSRmaWxlcyA9IGFycmF5ICgpOw0KCQkkZGlyID0gQG9wZW5kaXIoJGRpcm5h bWUpOw0KDQoJCXdoaWxlICgkZmlsZSA9IEByZWFkZGlyKCRkaXIpKQ0KCQl7DQoJCQkkZnVs bG5hbWUgPSAkZGlybmFtZSAuICIvIiAuICRmaWxlOw0KCQkJaWYgKCRmaWxlID09ICIuIiB8 fCAkZmlsZSA9PSAiLi4iKQ0KCQkJCWNvbnRpbnVlOw0KCQkJZWxzZSBpZiAoQGlzX2Rpcigk ZnVsbG5hbWUpKQ0KCQkJew0KCQkJCWlmIChlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3JlY3Vy c2UnXSkpDQoJCQkJCWNvbnRpbnVlOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2Rpcigk ZnVsbG5hbWUpOw0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRmaWxlMikNCgkJCQkJJGZpbGVz W10gPSAkZmlsZTI7DQoJCQl9DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGZ1bGxuYW1l KSkNCgkJCQkkZmlsZXNbXSA9IGFycmF5ICgnbmFtZScgPT4gJGZ1bGxuYW1lLCAnbmFtZTIn ID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8o XC4rXC8rKSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYg c3Ryc3RyKCRmdWxsbmFtZSwgIi8iKSkgPw0KCQkJCQlzdWJzdHIoJGZ1bGxuYW1lLCBzdHJy cG9zKCRmdWxsbmFtZSwgIi8iKSArIDEpIDogJGZ1bGxuYW1lKSwNCgkJCQkJJ3R5cGUnID0+ IEBpc19saW5rKCRmdWxsbmFtZSkgJiYgJHRoaXMtPm9wdGlvbnNbJ2ZvbGxvd2xpbmtzJ10g PT0gMCA/IDIgOiAwLA0KCQkJCQknZXh0JyA9PiBzdWJzdHIoJGZpbGUsIHN0cnJwb3MoJGZp bGUsICIuIikpLCAnc3RhdCcgPT4gc3RhdCgkZnVsbG5hbWUpKTsNCgkJfQ0KDQoJCUBjbG9z ZWRpcigkZGlyKTsNCg0KCQlyZXR1cm4gJGZpbGVzOw0KCX0NCg0KCWZ1bmN0aW9uIHNvcnRf ZmlsZXMoJGEsICRiKQ0KCXsNCgkJaWYgKCRhWyd0eXBlJ10gIT0gJGJbJ3R5cGUnXSkNCgkJ CWlmICgkYVsndHlwZSddID09IDUgfHwgJGJbJ3R5cGUnXSA9PSAyKQ0KCQkJCXJldHVybiAt MTsNCgkJCWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gMiB8fCAkYlsndHlwZSddID09IDUpDQoJ CQkJcmV0dXJuIDE7DQoJCWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gNSkNCgkJCXJldHVybiBz dHJjbXAoc3RydG9sb3dlcigkYVsnbmFtZSddKSwgc3RydG9sb3dlcigkYlsnbmFtZSddKSk7 DQoJCWVsc2UgaWYgKCRhWydleHQnXSAhPSAkYlsnZXh0J10pDQoJCQlyZXR1cm4gc3RyY21w KCRhWydleHQnXSwgJGJbJ2V4dCddKTsNCgkJZWxzZSBpZiAoJGFbJ3N0YXQnXVs3XSAhPSAk Ylsnc3RhdCddWzddKQ0KCQkJcmV0dXJuICRhWydzdGF0J11bN10gPiAkYlsnc3RhdCddWzdd ID8gLTEgOiAxOw0KCQllbHNlDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25h bWUnXSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglm dW5jdGlvbiBkb3dubG9hZF9maWxlKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5t ZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDYW4gb25seSB1c2Ug ZG93bmxvYWRfZmlsZSgpIGlmIGFyY2hpdmUgaXMgaW4gbWVtb3J5LiBSZWRpcmVjdCB0byBm aWxlIG90aGVyd2lzZSwgaXQgaXMgZmFzdGVyLiI7DQoJCQlyZXR1cm47DQoJCX0NCgkJc3dp dGNoICgkdGhpcy0+b3B0aW9uc1sndHlwZSddKQ0KCQl7DQoJCWNhc2UgInppcCI6DQoJCQlo ZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vemlwIik7DQoJCQlicmVhazsNCgkJ Y2FzZSAiYnppcCI6DQoJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1i emlwMiIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50 LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgInRhciI6 DQoJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC10YXIiKTsNCgkJfQ0K CQkkaGVhZGVyID0gIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1l PVwiIjsNCgkJJGhlYWRlciAuPSBzdHJzdHIoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIi8i KSA/IHN1YnN0cigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCBzdHJycG9zKCR0aGlzLT5vcHRp b25zWyduYW1lJ10sICIvIikgKyAxKSA6ICR0aGlzLT5vcHRpb25zWyduYW1lJ107DQoJCSRo ZWFkZXIgLj0gIlwiIjsNCgkJaGVhZGVyKCRoZWFkZXIpOw0KCQloZWFkZXIoIkNvbnRlbnQt TGVuZ3RoOiAiIC4gc3RybGVuKCR0aGlzLT5hcmNoaXZlKSk7DQoJCWhlYWRlcigiQ29udGVu dC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5Iik7DQoJCWhlYWRlcigiQ2FjaGUtQ29udHJv bDogbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT02MCIpOw0KCQloZWFkZXIo IkV4cGlyZXM6IFNhdCwgMDEgSmFuIDIwMDAgMTI6MDA6MDAgR01UIik7DQoJCXByaW50KCR0 aGlzLT5hcmNoaXZlKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF90YXJfZmlsZSBleHRlbmRz IHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X3Rhcl9maWxlKCRuYW1lKQ0K CXsNCgkJJHRoaXMtPnNtZF9hdF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNb J3R5cGUnXSA9ICJ0YXIiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV90YXIoKQ0KCXsNCgkJ JHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsN Cg0KCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGN1cnJlbnQpDQoJCXsNCgkJCWlmICgk Y3VycmVudFsnbmFtZSddID09ICR0aGlzLT5vcHRpb25zWyduYW1lJ10pDQoJCQkJY29udGlu dWU7DQoJCQlpZiAoc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSA+IDk5KQ0KCQkJew0KCQkJ CSRwYXRoID0gc3Vic3RyKCRjdXJyZW50WyduYW1lMiddLCAwLCBzdHJwb3MoJGN1cnJlbnRb J25hbWUyJ10sICIvIiwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSAtIDEwMCkgKyAxKTsN CgkJCQkkY3VycmVudFsnbmFtZTInXSA9IHN1YnN0cigkY3VycmVudFsnbmFtZTInXSwgc3Ry bGVuKCRwYXRoKSk7DQoJCQkJaWYgKHN0cmxlbigkcGF0aCkgPiAxNTQgfHwgc3RybGVuKCRj dXJyZW50WyduYW1lMiddKSA+IDk5KQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAi Q291bGQgbm90IGFkZCB7JHBhdGh9eyRjdXJyZW50WyduYW1lMiddfSB0byBhcmNoaXZlIGJl Y2F1c2UgdGhlIGZpbGVuYW1lIGlzIHRvbyBsb25nLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJ CX0NCgkJCX0NCgkJCSRibG9jayA9IHBhY2soImExMDBhOGE4YThhMTJhMTJhOGExYTEwMGE2 YTJhMzJhMzJhOGE4YTE1NWExMiIsICRjdXJyZW50WyduYW1lMiddLCBzcHJpbnRmKCIlMDdv IiwNCgkJCQkkY3VycmVudFsnc3RhdCddWzJdKSwgc3ByaW50ZigiJTA3byIsICRjdXJyZW50 WydzdGF0J11bNF0pLCBzcHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0YXQnXVs1XSksDQoJ CQkJc3ByaW50ZigiJTAxMW8iLCAkY3VycmVudFsndHlwZSddID09IDIgPyAwIDogJGN1cnJl bnRbJ3N0YXQnXVs3XSksIHNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSks DQoJCQkJIiAgICAgICAgIiwgJGN1cnJlbnRbJ3R5cGUnXSwgJGN1cnJlbnRbJ3R5cGUnXSA9 PSAyID8gQHJlYWRsaW5rKCRjdXJyZW50WyduYW1lJ10pIDogIiIsICJ1c3RhciAiLCAiICIs DQoJCQkJIlVua25vd24iLCAiVW5rbm93biIsICIiLCAiIiwgIWVtcHR5ICgkcGF0aCkgPyAk cGF0aCA6ICIiLCAiIik7DQoNCgkJCSRjaGVja3N1bSA9IDA7DQoJCQlmb3IgKCRpID0gMDsg JGkgPCA1MTI7ICRpKyspDQoJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJsb2NrLCAk aSwgMSkpOw0KCQkJJGNoZWNrc3VtID0gcGFjaygiYTgiLCBzcHJpbnRmKCIlMDdvIiwgJGNo ZWNrc3VtKSk7DQoJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICRjaGVja3N1 bSwgMTQ4LCA4KTsNCg0KCQkJaWYgKCRjdXJyZW50Wyd0eXBlJ10gPT0gMiB8fCAkY3VycmVu dFsnc3RhdCddWzddID09IDApDQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQll bHNlIGlmICgkZnAgPSBAZm9wZW4oJGN1cnJlbnRbJ25hbWUnXSwgInJiIikpDQoJCQl7DQoJ CQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQo JGZwLCAxMDQ4NTc2KSkNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQlpZiAo JGN1cnJlbnRbJ3N0YXQnXVs3XSAlIDUxMiA+IDApDQoJCQkJew0KCQkJCQkkdGVtcCA9ICIi Ow0KCQkJCQlmb3IgKCRpID0gMDsgJGkgPCA1MTIgLSAkY3VycmVudFsnc3RhdCddWzddICUg NTEyOyAkaSsrKQ0KCQkJCQkJJHRlbXAgLj0gIlwwIjsNCgkJCQkJJHRoaXMtPmFkZF9kYXRh KCR0ZW1wKTsNCgkJCQl9DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJCQllbHNlDQoJCQkJ JHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUn XX0gZm9yIHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5h ZGRfZGF0YShwYWNrKCJhMTAyNCIsICIiKSk7DQoNCgkJY2hkaXIoJHB3ZCk7DQoNCgkJcmV0 dXJuIDE7DQoJfQ0KDQoJZnVuY3Rpb24gZXh0cmFjdF9maWxlcygpDQoJew0KCQkkcHdkID0g Z2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWlm ICgkZnAgPSAkdGhpcy0+b3Blbl9hcmNoaXZlKCkpDQoJCXsNCgkJCWlmICgkdGhpcy0+b3B0 aW9uc1snaW5tZW1vcnknXSA9PSAxKQ0KCQkJCSR0aGlzLT5maWxlcyA9IGFycmF5ICgpOw0K DQoJCQl3aGlsZSAoJGJsb2NrID0gZnJlYWQoJGZwLCA1MTIpKQ0KCQkJew0KCQkJCSR0ZW1w ID0gdW5wYWNrKCJhMTAwbmFtZS9hOG1vZGUvYTh1aWQvYThnaWQvYTEyc2l6ZS9hMTJtdGlt ZS9hOGNoZWNrc3VtL2ExdHlwZS9hMTAwc3ltbGluay9hNm1hZ2ljL2EydGVtcC9hMzJ0ZW1w L2EzMnRlbXAvYTh0ZW1wL2E4dGVtcC9hMTU1cHJlZml4L2ExMnRlbXAiLCAkYmxvY2spOw0K CQkJCSRmaWxlID0gYXJyYXkgKA0KCQkJCQknbmFtZScgPT4gJHRlbXBbJ3ByZWZpeCddIC4g JHRlbXBbJ25hbWUnXSwNCgkJCQkJJ3N0YXQnID0+IGFycmF5ICgNCgkJCQkJCTIgPT4gJHRl bXBbJ21vZGUnXSwNCgkJCQkJCTQgPT4gb2N0ZGVjKCR0ZW1wWyd1aWQnXSksDQoJCQkJCQk1 ID0+IG9jdGRlYygkdGVtcFsnZ2lkJ10pLA0KCQkJCQkJNyA9PiBvY3RkZWMoJHRlbXBbJ3Np emUnXSksDQoJCQkJCQk5ID0+IG9jdGRlYygkdGVtcFsnbXRpbWUnXSksDQoJCQkJCSksDQoJ CQkJCSdjaGVja3N1bScgPT4gb2N0ZGVjKCR0ZW1wWydjaGVja3N1bSddKSwNCgkJCQkJJ3R5 cGUnID0+ICR0ZW1wWyd0eXBlJ10sDQoJCQkJCSdtYWdpYycgPT4gJHRlbXBbJ21hZ2ljJ10s DQoJCQkJKTsNCg0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSA9PSAweDAwMDAwMDAwKQ0K CQkJCQlicmVhazsNCgkJCQllbHNlIGlmIChzdWJzdHIoJGZpbGVbJ21hZ2ljJ10sIDAsIDUp ICE9ICJ1c3RhciIpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJUaGlzIHNjcmlw dCBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhY3RpbmcgdGhpcyB0eXBlIG9mIHRhciBmaWxlLiI7 DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxv Y2ssICIgICAgICAgICIsIDE0OCwgOCk7DQoJCQkJJGNoZWNrc3VtID0gMDsNCgkJCQlmb3Ig KCRpID0gMDsgJGkgPCA1MTI7ICRpKyspDQoJCQkJCSRjaGVja3N1bSArPSBvcmQoc3Vic3Ry KCRibG9jaywgJGksIDEpKTsNCgkJCQlpZiAoJGZpbGVbJ2NoZWNrc3VtJ10gIT0gJGNoZWNr c3VtKQ0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgZXh0cmFjdCBmcm9tIHsk dGhpcy0+b3B0aW9uc1snbmFtZSddfSwgaXQgaXMgY29ycnVwdC4iOw0KDQoJCQkJLy8gQWRk ZWQ6IGNyZWF0ZSBkaXIgaWYgcmVxdWlyZWQNCgkJCQlpZiAoc3RycG9zKCRmaWxlWyduYW1l J10sICcuLicpID09PSBmYWxzZSkgew0KCQkJCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRm aWxlWyduYW1lJ10pOw0KCQkJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlWyduYW1lJ10pKSB7 DQoJCQkJCQkkcmV0ID0gc21kX21rZGlyX3JlY3Vyc2l2ZSgoKGlzc2V0KCRwYXRoX3BhcnRz WydleHRlbnNpb24nXSkpID8gZGlybmFtZSgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRT LiRmaWxlWyduYW1lJ10pIDogJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsn bmFtZSddKSk7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lu bWVtb3J5J10gPT0gMSkNCgkJCQl7DQoJCQkJCSRmaWxlWydkYXRhJ10gPSBmcmVhZCgkZnAs ICRmaWxlWydzdGF0J11bN10pOw0KCQkJCQlmcmVhZCgkZnAsICg1MTIgLSAkZmlsZVsnc3Rh dCddWzddICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1 MTIpKTsNCgkJCQkJdW5zZXQgKCRmaWxlWydjaGVja3N1bSddLCAkZmlsZVsnbWFnaWMnXSk7 DQoJCQkJCSR0aGlzLT5maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRm aWxlWyd0eXBlJ10gPT0gNSkNCgkJCQl7DQoJCQkJCWlmICghaXNfZGlyKCRmaWxlWyduYW1l J10pKQ0KCQkJCQkJbWtkaXIoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVsyXSk7DQoJ CQkJfQ0KCQkJCWVsc2UgaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYm IGZpbGVfZXhpc3RzKCRmaWxlWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9y W10gPSAieyRmaWxlWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJCWNvbnRpbnVl Ow0KCQkJCX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDIpDQoJCQkJew0KCQkJ CQlzeW1saW5rKCR0ZW1wWydzeW1saW5rJ10sICRmaWxlWyduYW1lJ10pOw0KCQkJCQljaG1v ZCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9DQoJCQkJZWxzZSBp ZiAoJG5ldyA9IGZvcGVuKCRmaWxlWyduYW1lJ10sICJ3YiIpKQ0KCQkJCXsNCgkJCQkJZndy aXRlKCRuZXcsIGZyZWFkKCRmcCwgJGZpbGVbJ3N0YXQnXVs3XSkpOw0KCQkJCQlmcmVhZCgk ZnAsICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAt ICRmaWxlWydzdGF0J11bN10gJSA1MTIpKTsNCgkJCQkJZmNsb3NlKCRuZXcpOw0KCQkJCQlA Y2htb2QoJGZpbGVbJ25hbWUnXSwgMDY0NCk7IC8vIEhhcmQtY29kZWQgZm9yIG5vdyBiZWNh dXNlIHRoZSBzdHVwaWQgMDEwMDY0NCB2YWx1ZSBpbiAkZmlsZVsnc3RhdCddWzJdIGNvbmZ1 c2VzIHRoZSBPUy9QSFANCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVy cm9yW10gPSAiQ291bGQgbm90IG9wZW4geyRmaWxlWyduYW1lJ119IGZvciB3cml0aW5nLiI7 DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkvLyBSZW1vdmUgb3duZXIgYW5kIGdyb3Vw IHNldHRpbmcgc2luY2UgdGhlcmUgaXMgYWxtb3N0IDAgbGlrZWxpaG9vZCB0aGUgZmlsZXMg d2lsbCBoYXZlIHRoZSBzYW1lIHVzZXIvZ3JvdXAgYWNyb3NzIHN5c3RlbXMNCgkJCQkvLyBJ biBvdGhlciB3b3JkcywgbGVhdmUgb3duZXIvZ3JvdXAgYXQgdGhlIEFwYWNoZSBkZWZhdWx0 IC0tIHdoaWNoIGlzIHdoYXQgd2Ugd2FudA0KLy8JCQkJY2hvd24oJGZpbGVbJ25hbWUnXSwg JGZpbGVbJ3N0YXQnXVs0XSk7DQovLwkJCQljaGdycCgkZmlsZVsnbmFtZSddLCAkZmlsZVsn c3RhdCddWzVdKTsNCgkJCQlAdG91Y2goJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs5 XSk7DQoJCQkJdW5zZXQgKCRmaWxlKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+ ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskdGhpcy0+b3B0aW9uc1snbmFtZSdd fSI7DQoNCgkJY2hkaXIoJHB3ZCk7DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkN Cgl7DQoJCXJldHVybiBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJ fQ0KfQ0KDQpjbGFzcyBzbWRfYXRfZ3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxl DQp7DQoJZnVuY3Rpb24gc21kX2F0X2d6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5z bWRfYXRfdGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImd6 aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9nemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+ b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJ CQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBnem9w ZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIndieyR0aGlzLT5vcHRpb25zWydsZXZlbCdd fSIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAo JHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWd6d3JpdGUo JGZwLCAkdGVtcCk7DQoJCQkJZ3pjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJ fQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVu IHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRw d2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNo aXZlID0gZ3plbmNvZGUoJHRoaXMtPmFyY2hpdmUsICR0aGlzLT5vcHRpb25zWydsZXZlbCdd KTsNCg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsN CgkJcmV0dXJuIEBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0K fQ0KDQpjbGFzcyBzbWRfYXRfYnppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7 DQoJZnVuY3Rpb24gc21kX2F0X2J6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRf YXRfdGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImJ6aXAi Ow0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9iemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0 aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQlj aGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBiem9wZW4o JHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIndiIikpDQoJCQl7DQoJCQkJZnNlZWsoJHRoaXMt PmFyY2hpdmUsIDApOw0KCQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCR0aGlzLT5hcmNoaXZl LCAxMDQ4NTc2KSkNCgkJCQkJYnp3cml0ZSgkZnAsICR0ZW1wKTsNCgkJCQliemNsb3NlKCRm cCk7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMt PmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGZv ciB3cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJ CX0NCgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSBiemNvbXByZXNzKCR0aGlzLT5hcmNo aXZlLCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJ ZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAYnpvcGVuKCR0aGlzLT5v cHRpb25zWyduYW1lJ10sICJyIik7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfYXRfemlwX2ZpbGUg ZXh0ZW5kcyBzbWRfYXRfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9hdF96aXBfZmlsZSgk bmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRfYXJjaGl2ZSgkbmFtZSk7DQoJCSR0aGlzLT5v cHRpb25zWyd0eXBlJ10gPSAiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVfemlwKCkN Cgl7DQoJCSRmaWxlcyA9IDA7DQoJCSRvZmZzZXQgPSAwOw0KCQkkY2VudHJhbCA9ICIiOw0K DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydzZngnXSkpDQoJCQlpZiAoJGZwID0g QGZvcGVuKCR0aGlzLT5vcHRpb25zWydzZngnXSwgInJiIikpDQoJCQl7DQoJCQkJJHRlbXAg PSBmcmVhZCgkZnAsIGZpbGVzaXplKCR0aGlzLT5vcHRpb25zWydzZngnXSkpOw0KCQkJCWZj bG9zZSgkZnApOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkdGVtcCk7DQoJCQkJJG9mZnNldCAr PSBzdHJsZW4oJHRlbXApOw0KCQkJCXVuc2V0ICgkdGVtcCk7DQoJCQl9DQoJCQllbHNlDQoJ CQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gc2Z4IG1vZHVsZSBmcm9tIHsk dGhpcy0+b3B0aW9uc1snc2Z4J119LiI7DQoNCgkJJHB3ZCA9IGdldGN3ZCgpOw0KCQljaGRp cigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0KCQlmb3JlYWNoICgkdGhpcy0+Zmls ZXMgYXMgJGN1cnJlbnQpDQoJCXsNCgkJCWlmICgkY3VycmVudFsnbmFtZSddID09ICR0aGlz LT5vcHRpb25zWyduYW1lJ10pDQoJCQkJY29udGludWU7DQoNCgkJCSR0aW1lZGF0ZSA9IGV4 cGxvZGUoIiAiLCBkYXRlKCJZIG4gaiBHIGkgcyIsICRjdXJyZW50WydzdGF0J11bOV0pKTsN CgkJCSR0aW1lZGF0ZSA9ICgkdGltZWRhdGVbMF0gLSAxOTgwIDw8IDI1KSB8ICgkdGltZWRh dGVbMV0gPDwgMjEpIHwgKCR0aW1lZGF0ZVsyXSA8PCAxNikgfA0KCQkJCSgkdGltZWRhdGVb M10gPDwgMTEpIHwgKCR0aW1lZGF0ZVs0XSA8PCA1KSB8ICgkdGltZWRhdGVbNV0pOw0KDQoJ CQkkYmxvY2sgPSBwYWNrKCJWdnZ2ViIsIDB4MDQwMzRiNTAsIDB4MDAwQSwgMHgwMDAwLCAo aXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10g PT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1lZGF0ZSk7DQoNCgkJCWlmICgkY3VycmVu dFsnc3RhdCddWzddID09IDAgJiYgJGN1cnJlbnRbJ3R5cGUnXSA9PSA1KQ0KCQkJew0KCQkJ CSRibG9jayAuPSBwYWNrKCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAw MDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgKyAxLCAweDAwMDApOw0KCQkJCSRi bG9jayAuPSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJCQkkdGhpcy0+YWRkX2RhdGEo JGJsb2NrKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgw MjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAw MCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8 fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0 aW1lZGF0ZSwNCgkJCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3Ry bGVuKCRjdXJyZW50WyduYW1lMiddKSArIDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgJGN1cnJlbnRbJ3R5cGUnXSA9PSA1ID8gMHgwMDAwMDAxMCA6IDB4MDAwMDAwMDAs ICRvZmZzZXQpOw0KCQkJCSRjZW50cmFsIC49ICRjdXJyZW50WyduYW1lMiddIC4gIi8iOw0K CQkJCSRmaWxlcysrOw0KCQkJCSRvZmZzZXQgKz0gKDMxICsgc3RybGVuKCRjdXJyZW50Wydu YW1lMiddKSk7DQoJCQl9DQoJCQllbHNlIGlmICgkY3VycmVudFsnc3RhdCddWzddID09IDAp DQoJCQl7DQoJCQkJJGJsb2NrIC49IHBhY2soIlZWVnZ2IiwgMHgwMDAwMDAwMCwgMHgwMDAw MDAwMCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwKTsN CgkJCQkkYmxvY2sgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJHRoaXMtPmFkZF9kYXRh KCRibG9jayk7DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4 MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAw MDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkg fHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAk dGltZWRhdGUsDQoJCQkJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0 cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgJGN1cnJlbnRbJ3R5cGUnXSA9PSA1ID8gMHgwMDAwMDAxMCA6IDB4MDAwMDAwMDAsICRv ZmZzZXQpOw0KCQkJCSRjZW50cmFsIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSRmaWxl cysrOw0KCQkJCSRvZmZzZXQgKz0gKDMwICsgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSk7 DQoJCQl9DQoJCQllbHNlIGlmICgkZnAgPSBAZm9wZW4oJGN1cnJlbnRbJ25hbWUnXSwgInJi IikpDQoJCQl7DQoJCQkJJHRlbXAgPSBmcmVhZCgkZnAsICRjdXJyZW50WydzdGF0J11bN10p Ow0KCQkJCWZjbG9zZSgkZnApOw0KCQkJCSRjcmMzMiA9IGNyYzMyKCR0ZW1wKTsNCgkJCQlp ZiAoIWlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgJiYgJHRoaXMtPm9wdGlvbnNbJ21ldGhv ZCddID09IDEpDQoJCQkJew0KCQkJCQkkdGVtcCA9IGd6Y29tcHJlc3MoJHRlbXAsICR0aGlz LT5vcHRpb25zWydsZXZlbCddKTsNCgkJCQkJJHNpemUgPSBzdHJsZW4oJHRlbXApIC0gNjsN CgkJCQkJJHRlbXAgPSBzdWJzdHIoJHRlbXAsIDIsICRzaXplKTsNCgkJCQl9DQoJCQkJZWxz ZQ0KCQkJCQkkc2l6ZSA9IHN0cmxlbigkdGVtcCk7DQoJCQkJJGJsb2NrIC49IHBhY2soIlZW VnZ2IiwgJGNyYzMyLCAkc2l6ZSwgJGN1cnJlbnRbJ3N0YXQnXVs3XSwgc3RybGVuKCRjdXJy ZW50WyduYW1lMiddKSwgMHgwMDAwKTsNCgkJCQkkYmxvY2sgLj0gJGN1cnJlbnRbJ25hbWUy J107DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJJHRoaXMtPmFkZF9kYXRh KCR0ZW1wKTsNCgkJCQl1bnNldCAoJHRlbXApOw0KCQkJCSRjZW50cmFsIC49IHBhY2soIlZ2 dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAweDAwMTQsICR0aGlzLT5vcHRpb25zWydt ZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBBLCAweDAwMDAsDQoJCQkJCShpc3NldCgk Y3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/ IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkkY3JjMzIsICRzaXplLCAkY3Vy cmVudFsnc3RhdCddWzddLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMDAwMDAsICRvZmZzZXQpOw0KCQkJCSRjZW50 cmFsIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSRmaWxlcysrOw0KCQkJCSRvZmZzZXQg Kz0gKDMwICsgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSArICRzaXplKTsNCgkJCX0NCgkJ CWVsc2UNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskY3Vy cmVudFsnbmFtZSddfSBmb3IgcmVhZGluZy4gSXQgd2FzIG5vdCBhZGRlZC4iOw0KCQl9DQoN CgkJJHRoaXMtPmFkZF9kYXRhKCRjZW50cmFsKTsNCg0KCQkkdGhpcy0+YWRkX2RhdGEocGFj aygiVnZ2dnZWVnYiLCAweDA2MDU0YjUwLCAweDAwMDAsIDB4MDAwMCwgJGZpbGVzLCAkZmls ZXMsIHN0cmxlbigkY2VudHJhbCksICRvZmZzZXQsDQoJCQkhZW1wdHkgKCR0aGlzLT5vcHRp b25zWydjb21tZW50J10pID8gc3RybGVuKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pIDog MHgwMDAwKSk7DQoNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkp DQoJCQkkdGhpcy0+YWRkX2RhdGEoJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSk7DQoNCgkJ Y2hkaXIoJHB3ZCk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KfQ0KDQojIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBDbGFz cyBkVW56aXAyIHYyLjYyDQojDQojICBBdXRob3I6IEFsZXhhbmRyZSBUZWRlc2NoaSAoZCkN CiMgIEUtTWFpbDogYWxleGFuZHJlYnIgYXQgZ21haWwgZG90IGNvbQ0KIyAgTG9uZHJpbmEg LSBQUiAvIEJyYXppbA0KIw0KIyAgT2JqZWN0aXZlOg0KIyAgICBUaGlzIGNsYXNzIGFsbG93 cyBwcm9ncmFtbWVyIHRvIGVhc2lseSB1bnppcCBmaWxlcyBvbiB0aGUgZmx5Lg0KIw0KIyAg UmVxdWlyZW1lbnRzOg0KIyAgICBUaGlzIGNsYXNzIHJlcXVpcmVzIGV4dGVuc2lvbiBaTGli IEVuYWJsZWQuIEl0IGlzIGRlZmF1bHQNCiMgICAgZm9yIG1vc3Qgc2l0ZSBob3N0cyBhcm91 bmQgdGhlIHdvcmxkLCBhbmQgZm9yIHRoZSBQSFAgV2luMzIgZGlzdC4NCiMNCiMgIFRvIGRv Og0KIyAgICogRXJyb3IgaGFuZGxpbmcNCiMgICAqIFdyaXRlIGEgUEhQLVNpZGUgZ3ppbmZs YXRlLCB0byBjb21wbGV0ZWx5IGF2b2lkIGFueSBleHRlcm5hbCBleHRlbnNpb25zDQojICAg KiBXcml0ZSBvdGhlciBkZWNvbXByZXNzIGFsZ29yaXRobXMNCiMNCiMgIE1ldGhvZHM6DQoj ICAqIGRVbnppcDIoJGZpbGVuYW1lKSAgICAgICAgIC0gQ29uc3RydWN0b3IgLSBPcGVucyAk ZmlsZW5hbWUNCiMgICogZ2V0TGlzdChbJHN0b3BPbkZpbGVdKSAgICAgLSBSZXRyaWV2ZSB0 aGUgZmlsZSBsaXN0DQojICAqIGdldEV4dHJhSW5mbygkemlwZmlsZW5hbWUpIC0gUmV0cmll dmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb21wcmVzc2VkIGZpbGUNCiMgICogZ2V0Wmlw SW5mbyhbJGVudHJ5XSkgICAgICAgLSBSZXRyaWV2ZSBaSVAgZmlsZSBkZXRhaWxzLg0KIyAg KiB1bnppcCgkemlwZmlsZW5hbWUsIFskb3V0ZmlsZW5hbWUsIFskYXBwbHlDaG1vZF1dKSAt IFVuemlwIGZpbGUNCiMgICogdW56aXBBbGwoWyRvdXREaXIsIFskemlwRGlyLCBbJG1haW50 YWluU3RydWN0dXJlLCBbJGFwcGx5Q2htb2RdXV1dKQ0KIyAgKiBjbG9zZSgpICAgICAgICAg ICAgICAgICAgICAtIENsb3NlIGZpbGUgaGFuZGxlciwgYnV0IGtlZXAgdGhlIGxpc3QNCiMg ICogX19kZXN0cm95KCkgICAgICAgICAgICAgICAgLSBDbG9zZSBmaWxlIGhhbmRsZXIgYW5k IHJlbGVhc2UgbWVtb3J5DQojDQojICBJZiB5b3UgbW9kaWZ5IHRoaXMgY2xhc3MsIG9yIGhh dmUgYW55IGlkZWFzIHRvIGltcHJvdmUgaXQsIHBsZWFzZSBjb250YWN0IG1lIQ0KIyAgWW91 IGFyZSBhbGxvd2VkIHRvIHJlZGlzdHJpYnV0ZSB0aGlzIGNsYXNzLCBpZiB5b3Uga2VlcCBt eSBuYW1lIGFuZCBjb250YWN0IGUtbWFpbCBvbiBpdC4NCiMNCiMgIFBMRUFTRSEgSUYgWU9V IFVTRSBUSElTIENMQVNTIElOIEFOWSBPRiBZT1VSIFBST0pFQ1RTLCBQTEVBU0UgTEVUIE1F IEtOT1chDQojICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB1c2luZyBpdCwgZG9uJ3QgdGhpbmsg dHdpY2UgYmVmb3JlIGNvbnRhY3RpbmcgbWUhDQojDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZighZnVuY3Rp b25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpKXsNCgkvLyBJZiBub3QgUEhQNSwgY3Jl YXRlcyBhIGNvbXBhdGlibGUgZnVuY3Rpb24NCglGdW5jdGlvbiBmaWxlX3B1dF9jb250ZW50 cygkZmlsZSwgJGRhdGEpew0KCQlpZigkdG1wID0gZm9wZW4oJGZpbGUsICJ3Iikpew0KCQkJ ZndyaXRlKCR0bXAsICRkYXRhKTsNCgkJCWZjbG9zZSgkdG1wKTsNCgkJCXJldHVybiB0cnVl Ow0KCQl9DQoJCWVjaG8gIjxiPmZpbGVfcHV0X2NvbnRlbnRzOjwvYj4gQ2Fubm90IGNyZWF0 ZSBmaWxlICRmaWxlPGJyPiI7DQoJCXJldHVybiBmYWxzZTsNCgl9DQp9DQoNCmNsYXNzIHNt ZF9kVW56aXAyew0KCUZ1bmN0aW9uIGdldFZlcnNpb24oKXsNCgkJcmV0dXJuICIyLjYyIjsN Cgl9DQoJLy8gUHVibGljDQoJdmFyICRmaWxlTmFtZTsNCgl2YXIgJGxhc3RFcnJvcjsNCgl2 YXIgJGNvbXByZXNzZWRMaXN0OyAvLyBZb3Ugd2lsbCBwcm9ibGFibHkgdXNlIG9ubHkgdGhp cyBvbmUhDQoJdmFyICRjZW50cmFsRGlyTGlzdDsgLy8gQ2VudHJhbCBkaXIgbGlzdC4uLiBJ dCdzIGEga2luZCBvZiAnZXh0cmEgYXR0cmlidXRlcycgZm9yIGEgc2V0IG9mIGZpbGVzDQoJ dmFyICRlbmRPZkNlbnRyYWw7ICAgLy8gRW5kIG9mIGNlbnRyYWwgZGlyLCBjb250YWlucyBa SVAgQ29tbWVudHMNCgl2YXIgJGRlYnVnOw0KDQoJLy8gUHJpdmF0ZQ0KCXZhciAkZmg7DQoJ dmFyICR6aXBTaWduYXR1cmUgPSAiXHg1MFx4NGJceDAzXHgwNCI7IC8vIGxvY2FsIGZpbGUg aGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlID0gIlx4NTBceDRiXHgwMVx4 MDIiOyAvLyBjZW50cmFsIGRpciBoZWFkZXIgc2lnbmF0dXJlDQoJdmFyICRkaXJTaWduYXR1 cmVFPSAiXHg1MFx4NGJceDA1XHgwNiI7IC8vIGVuZCBvZiBjZW50cmFsIGRpciBzaWduYXR1 cmUNCgkNCgkvLyBQdWJsaWMNCglGdW5jdGlvbiBzbWRfZFVuemlwMigkZmlsZU5hbWUpew0K CQkkdGhpcy0+ZmlsZU5hbWUgICAgICAgPSAkZmlsZU5hbWU7DQoJCSR0aGlzLT5jb21wcmVz c2VkTGlzdCA9IA0KCQkkdGhpcy0+Y2VudHJhbERpckxpc3QgPSANCgkJJHRoaXMtPmVuZE9m Q2VudHJhbCAgID0gQXJyYXkoKTsNCgl9DQoJDQoJRnVuY3Rpb24gZ2V0TGlzdCgkc3RvcE9u RmlsZT1mYWxzZSl7DQoJCWlmKHNpemVvZigkdGhpcy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJ CSR0aGlzLT5kZWJ1Z01zZygxLCAiUmV0dXJuaW5nIGFscmVhZHkgbG9hZGVkIGZpbGUgbGlz dC4iKTsNCgkJCXJldHVybiAkdGhpcy0+Y29tcHJlc3NlZExpc3Q7DQoJCX0NCgkJDQoJCS8v IE9wZW4gZmlsZSwgYW5kIHNldCBmaWxlIGhhbmRsZXINCgkJJGZoID0gZm9wZW4oJHRoaXMt PmZpbGVOYW1lLCAiciIpOw0KCQkkdGhpcy0+ZmggPSAmJGZoOw0KCQlpZighJGZoKXsNCgkJ CSR0aGlzLT5kZWJ1Z01zZygyLCAiRmFpbGVkIHRvIGxvYWQgZmlsZS4iKTsNCgkJCXJldHVy biBmYWxzZTsNCgkJfQ0KCQkNCgkJJHRoaXMtPmRlYnVnTXNnKDEsICJMb2FkaW5nIGxpc3Qg ZnJvbSAnRW5kIG9mIENlbnRyYWwgRGlyJyBpbmRleCBsaXN0Li4uIik7DQoJCWlmKCEkdGhp cy0+X2xvYWRGaWxlTGlzdEJ5RU9GKCRmaCwgJHN0b3BPbkZpbGUpKXsNCgkJCSR0aGlzLT5k ZWJ1Z01zZygxLCAiRmFpbGVkISBUcnlpbmcgdG8gbG9hZCBsaXN0IGxvb2tpbmcgZm9yIHNp Z25hdHVyZXMuLi4iKTsNCgkJCWlmKCEkdGhpcy0+X2xvYWRGaWxlTGlzdEJ5U2lnbmF0dXJl cygkZmgsICRzdG9wT25GaWxlKSl7DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJGYWlsZWQh IENvdWxkIG5vdCBmaW5kIGFueSB2YWxpZCBoZWFkZXIuIik7DQoJCQkJJHRoaXMtPmRlYnVn TXNnKDIsICJaSVAgRmlsZSBpcyBjb3JydXB0ZWQgb3IgZW1wdHkiKTsNCgkJCQlyZXR1cm4g ZmFsc2U7DQoJCQl9DQoJCX0NCgkJDQoJCWlmKCR0aGlzLT5kZWJ1Zyl7DQoJCQkjLS0tLS0t LSBEZWJ1ZyBjb21wcmVzc2VkTGlzdA0KCQkJJGtrayA9IDA7DQoJCQllY2hvICI8dGFibGUg Ym9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5hOyBib3JkZXI6IDFweCBzb2xp ZCAjMDAwJz4iOw0KCQkJZm9yZWFjaCgkdGhpcy0+Y29tcHJlc3NlZExpc3QgYXMgJGZpbGVO YW1lPT4kaXRlbSl7DQoJCQkJaWYoISRra2sgJiYgJGtraz0xKXsNCgkJCQkJZWNobyAiPHRy IHN0eWxlPSdiYWNrZ3JvdW5kOiAjQURBJz4iOw0KCQkJCQlmb3JlYWNoKCRpdGVtIGFzICRm aWVsZE5hbWU9PiR2YWx1ZSkNCgkJCQkJCWVjaG8gIjx0ZD4kZmllbGROYW1lPC90ZD4iOw0K CQkJCQllY2hvICc8L3RyPic7DQoJCQkJfQ0KCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dy b3VuZDogI0NGQyc+IjsNCgkJCQlmb3JlYWNoKCRpdGVtIGFzICRmaWVsZE5hbWU9PiR2YWx1 ZSl7DQoJCQkJCWlmKCRmaWVsZE5hbWUgPT0gJ2xhc3Rtb2RfZGF0ZXRpbWUnKQ0KCQkJCQkJ ZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+Ii5kYXRlKCJk L20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJZWxzZQ0KCQkJCQkJZWNobyAi PHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+JHZhbHVlPC90ZD4iOw0K CQkJCX0NCgkJCQllY2hvICI8L3RyPiI7DQoJCQl9DQoJCQllY2hvICI8L3RhYmxlPiI7DQoJ CQkNCgkJCSMtLS0tLS0tIERlYnVnIGNlbnRyYWxEaXJMaXN0DQoJCQkka2trID0gMDsNCgkJ CWlmKHNpemVvZigkdGhpcy0+Y2VudHJhbERpckxpc3QpKXsNCgkJCQllY2hvICI8dGFibGUg Ym9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5hOyBib3JkZXI6IDFweCBzb2xp ZCAjMDAwJz4iOw0KCQkJCWZvcmVhY2goJHRoaXMtPmNlbnRyYWxEaXJMaXN0IGFzICRmaWxl TmFtZT0+JGl0ZW0pew0KCQkJCQlpZighJGtrayAmJiAka2trPTEpew0KCQkJCQkJZWNobyAi PHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjQUFEJz4iOw0KCQkJCQkJZm9yZWFjaCgkaXRlbSBh cyAkZmllbGROYW1lPT4kdmFsdWUpDQoJCQkJCQkJZWNobyAiPHRkPiRmaWVsZE5hbWU8L3Rk PiI7DQoJCQkJCQllY2hvICc8L3RyPic7DQoJCQkJCX0NCgkJCQkJZWNobyAiPHRyIHN0eWxl PSdiYWNrZ3JvdW5kOiAjQ0NGJz4iOw0KCQkJCQlmb3JlYWNoKCRpdGVtIGFzICRmaWVsZE5h bWU9PiR2YWx1ZSl7DQoJCQkJCQlpZigkZmllbGROYW1lID09ICdsYXN0bW9kX2RhdGV0aW1l JykNCgkJCQkJCQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUnIG5vd3JhcD0nbm93cmFw Jz4iLmRhdGUoImQvbS9ZIEg6aTpzIiwgJHZhbHVlKS4iPC90ZD4iOw0KCQkJCQkJZWxzZQ0K CQkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiR2 YWx1ZTwvdGQ+IjsNCgkJCQkJfQ0KCQkJCQllY2hvICI8L3RyPiI7DQoJCQkJfQ0KCQkJCWVj aG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJDQoJCQkjLS0tLS0tLSBEZWJ1ZyBlbmRPZkNlbnRy YWwNCgkJCSRra2sgPSAwOw0KCQkJaWYoc2l6ZW9mKCR0aGlzLT5lbmRPZkNlbnRyYWwpKXsN CgkJCQllY2hvICI8dGFibGUgYm9yZGVyPScwJyBzdHlsZT0nZm9udDogMTFweCBWZXJkYW5h JyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMCc+IjsNCgkJCQllY2hvICI8dHIgc3R5 bGU9J2JhY2tncm91bmQ6ICNEQUEnPjx0ZCBjb2xzcGFuPScyJz5kVW56aXAgLSBFbmQgb2Yg ZmlsZTwvdGQ+PC90cj4iOw0KCQkJCWZvcmVhY2goJHRoaXMtPmVuZE9mQ2VudHJhbCBhcyAk ZmllbGQ9PiR2YWx1ZSl7DQoJCQkJCWVjaG8gIjx0cj4iOw0KCQkJCQllY2hvICI8dGQgc3R5 bGU9J2JhY2tncm91bmQ6ICNGQ0MnPiRmaWVsZDwvdGQ+IjsNCgkJCQkJZWNobyAiPHRkIHN0 eWxlPSdiYWNrZ3JvdW5kOiAjRkREJz4kdmFsdWU8L3RkPiI7DQoJCQkJCWVjaG8gIjwvdHI+ IjsNCgkJCQl9DQoJCQkJZWNobyAiPC90YWJsZT4iOw0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1 cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCX0NCglGdW5jdGlvbiBnZXRFeHRyYUluZm8o JGNvbXByZXNzZWRGaWxlTmFtZSl7DQoJCXJldHVybg0KCQkJaXNzZXQoJHRoaXMtPmNlbnRy YWxEaXJMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdKT8NCgkJCSR0aGlzLT5jZW50cmFsRGly TGlzdFskY29tcHJlc3NlZEZpbGVOYW1lXToNCgkJCWZhbHNlOw0KCX0NCglGdW5jdGlvbiBn ZXRaaXBJbmZvKCRkZXRhaWw9ZmFsc2Upew0KCQlyZXR1cm4gJGRldGFpbD8NCgkJCSR0aGlz LT5lbmRPZkNlbnRyYWxbJGRldGFpbF06DQoJCQkkdGhpcy0+ZW5kT2ZDZW50cmFsOw0KCX0N CgkNCglGdW5jdGlvbiB1bnppcCgkY29tcHJlc3NlZEZpbGVOYW1lLCAkdGFyZ2V0RmlsZU5h bWU9ZmFsc2UsICRhcHBseUNobW9kPTA3Nzcpew0KCQlpZighc2l6ZW9mKCR0aGlzLT5jb21w cmVzc2VkTGlzdCkpew0KCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJUcnlpbmcgdG8gdW56aXAg YmVmb3JlIGxvYWRpbmcgZmlsZSBsaXN0Li4uIExvYWRpbmcgaXQhIik7DQoJCQkkdGhpcy0+ Z2V0TGlzdChmYWxzZSwgJGNvbXByZXNzZWRGaWxlTmFtZSk7DQoJCX0NCgkJDQoJCSRmZGV0 YWlscyA9ICYkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV07DQoJ CWlmKCFpc3NldCgkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV0p KXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiRmlsZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFt ZTwvYj4nIGlzIG5vdCBjb21wcmVzc2VkIGluIHRoZSB6aXAuIik7DQoJCQlyZXR1cm4gZmFs c2U7DQoJCX0NCgkJaWYoc3Vic3RyKCRjb21wcmVzc2VkRmlsZU5hbWUsIC0xKSA9PSAiLyIp ew0KCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJUcnlpbmcgdG8gdW56aXAgYSBmb2xkZXIgbmFt ZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4nLiIpOw0KCQkJcmV0dXJuIGZhbHNlOw0K CQl9DQoJCWlmKCEkZmRldGFpbHNbJ3VuY29tcHJlc3NlZF9zaXplJ10pew0KCQkJJHRoaXMt PmRlYnVnTXNnKDEsICJGaWxlICc8Yj4kY29tcHJlc3NlZEZpbGVOYW1lPC9iPicgaXMgZW1w dHkuIik7DQoJCQlyZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KCQkJCWZpbGVfcHV0X2NvbnRl bnRzKCR0YXJnZXRGaWxlTmFtZSwgIiIpOg0KCQkJCSIiOw0KCQl9DQoNCgkJZnNlZWsoJHRo aXMtPmZoLCAkZmRldGFpbHNbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10pOw0KCQkkcmV0ID0g JHRoaXMtPnVuY29tcHJlc3MoDQoJCQkJZnJlYWQoJHRoaXMtPmZoLCAkZmRldGFpbHNbJ2Nv bXByZXNzZWRfc2l6ZSddKSwNCgkJCQkkZmRldGFpbHNbJ2NvbXByZXNzaW9uX21ldGhvZCdd LA0KCQkJCSRmZGV0YWlsc1sndW5jb21wcmVzc2VkX3NpemUnXSwNCgkJCQkkdGFyZ2V0Rmls ZU5hbWUNCgkJCSk7DQoJCWlmKCRhcHBseUNobW9kICYmICR0YXJnZXRGaWxlTmFtZSkNCgkJ CWNobW9kKCR0YXJnZXRGaWxlTmFtZSwgMDc3Nyk7DQoJCQ0KCQlyZXR1cm4gJHJldDsNCgl9 DQoJRnVuY3Rpb24gdW56aXBBbGwoJHRhcmdldERpcj1mYWxzZSwgJGJhc2VEaXI9IiIsICRt YWludGFpblN0cnVjdHVyZT10cnVlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoJHRhcmdl dERpciA9PT0gZmFsc2UpDQoJCQkkdGFyZ2V0RGlyID0gZGlybmFtZSgkX1NFUlZFUlsnU0NS SVBUX0ZJTEVOQU1FJ10pLiIvIjsNCgkJDQoJCSRsaXN0YSA9ICR0aGlzLT5nZXRMaXN0KCk7 DQoJCWlmKHNpemVvZigkbGlzdGEpKSBmb3JlYWNoKCRsaXN0YSBhcyAkZmlsZU5hbWU9PiR0 cmFzaCl7DQoJCQkkZGlybmFtZSAgPSBkaXJuYW1lKCRmaWxlTmFtZSk7DQoJCQkkb3V0RE4g ICAgPSAiJHRhcmdldERpci8kZGlybmFtZSI7DQoJCQkNCgkJCWlmKHN1YnN0cigkZGlybmFt ZSwgMCwgc3RybGVuKCRiYXNlRGlyKSkgIT0gJGJhc2VEaXIpDQoJCQkJY29udGludWU7DQoJ CQkNCgkJCWlmKCFpc19kaXIoJG91dEROKSAmJiAkbWFpbnRhaW5TdHJ1Y3R1cmUpew0KCQkJ CSRzdHIgPSAiIjsNCgkJCQkkZm9sZGVycyA9IGV4cGxvZGUoIi8iLCAkZGlybmFtZSk7DQoJ CQkJZm9yZWFjaCgkZm9sZGVycyBhcyAkZm9sZGVyKXsNCgkJCQkJJHN0ciA9ICRzdHI/IiRz dHIvJGZvbGRlciI6JGZvbGRlcjsNCgkJCQkJaWYoIWlzX2RpcigiJHRhcmdldERpci8kc3Ry Iikpew0KCQkJCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJDcmVhdGluZyBmb2xkZXI6ICR0YXJn ZXREaXIvJHN0ciIpOw0KCQkJCQkJbWtkaXIoIiR0YXJnZXREaXIvJHN0ciIpOw0KCQkJCQkJ aWYoJGFwcGx5Q2htb2QpDQoJCQkJCQkJY2htb2QoIiR0YXJnZXREaXIvJHN0ciIsICRhcHBs eUNobW9kKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmKHN1YnN0cigkZmlsZU5hbWUs IC0xLCAxKSA9PSAiLyIpDQoJCQkJY29udGludWU7DQoNCgkJCSRtYWludGFpblN0cnVjdHVy ZT8NCgkJCQkkdGhpcy0+dW56aXAoJGZpbGVOYW1lLCAiJHRhcmdldERpci8kZmlsZU5hbWUi LCAkYXBwbHlDaG1vZCk6DQoJCQkJJHRoaXMtPnVuemlwKCRmaWxlTmFtZSwgIiR0YXJnZXRE aXIvIi5iYXNlbmFtZSgkZmlsZU5hbWUpLCAkYXBwbHlDaG1vZCk7DQoJCX0NCgl9DQoJDQoJ RnVuY3Rpb24gY2xvc2UoKXsgICAgIC8vIEZyZWUgdGhlIGZpbGUgcmVzb3VyY2UNCgkJaWYo JHRoaXMtPmZoKQ0KCQkJZmNsb3NlKCR0aGlzLT5maCk7DQoJfQ0KCUZ1bmN0aW9uIF9fZGVz dHJveSgpeyANCgkJJHRoaXMtPmNsb3NlKCk7DQoJfQ0KDQoJLy8gUHJpdmF0ZSAoeW91IHNo b3VsZCBOT1QgY2FsbCB0aGVzZSBtZXRob2RzKToNCglGdW5jdGlvbiB1bmNvbXByZXNzKCYk Y29udGVudCwgJG1vZGUsICR1bmNvbXByZXNzZWRTaXplLCAkdGFyZ2V0RmlsZU5hbWU9ZmFs c2Upew0KCQlzd2l0Y2goJG1vZGUpew0KCQkJY2FzZSAwOg0KCQkJCS8vIE5vdCBjb21wcmVz c2VkDQoJCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQkJZmlsZV9wdXRfY29udGVu dHMoJHRhcmdldEZpbGVOYW1lLCAkY29udGVudCk6DQoJCQkJCSRjb250ZW50Ow0KCQkJY2Fz ZSAxOg0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiU2hydW5rIG1vZGUgaXMgbm90IHN1cHBv cnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJY2FzZSAyOg0KCQkJY2Fz ZSAzOg0KCQkJY2FzZSA0Og0KCQkJY2FzZSA1Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAi Q29tcHJlc3Npb24gZmFjdG9yICIuKCRtb2RlLTEpLiIgaXMgbm90IHN1cHBvcnRlZC4uLiB5 ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJY2FzZSA2Og0KCQkJCSR0aGlzLT5kZWJ1 Z01zZygyLCAiSW1wbG9kZSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1 cm4gZmFsc2U7DQoJCQljYXNlIDc6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJUb2tlbml6 aW5nIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsN CgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDg6DQoJCQkJLy8gRGVmbGF0ZQ0KCQkJCXJl dHVybiAkdGFyZ2V0RmlsZU5hbWU/DQoJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRG aWxlTmFtZSwgZ3ppbmZsYXRlKCRjb250ZW50LCAkdW5jb21wcmVzc2VkU2l6ZSkpOg0KCQkJ CQlnemluZmxhdGUoJGNvbnRlbnQsICR1bmNvbXByZXNzZWRTaXplKTsNCgkJCWNhc2UgOToN CgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkVuaGFuY2VkIERlZmxhdGluZyBpcyBub3Qgc3Vw cG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDEwOg0KCQkJ CSR0aGlzLT5kZWJ1Z01zZygyLCAiUEtXQVJFIERhdGUgQ29tcHJlc3Npb24gTGlicmFyeSBJ bXBvbG9kaW5nIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxz ZTsNCiAgICAgICAgICAgY2FzZSAxMjoNCiAgICAgICAgICAgICAgIC8vIEJ6aXAyDQogICAg ICAgICAgICAgICByZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KICAgICAgICAgICAgICAgICAg IGZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRGaWxlTmFtZSwgYnpkZWNvbXByZXNzKCRjb250 ZW50KSk6DQogICAgICAgICAgICAgICAgICAgYnpkZWNvbXByZXNzKCRjb250ZW50KTsNCgkJ CWNhc2UgMTg6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJJQk0gVEVSU0UgaXMgbm90IHN1 cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJZGVmYXVsdDoNCgkJ CQkkdGhpcy0+ZGVidWdNc2coMiwgIlVua25vd24gdW5jb21wcmVzcyBtZXRob2Q6ICRtb2Rl Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfQ0KCUZ1bmN0aW9uIGRlYnVnTXNnKCRs ZXZlbCwgJHN0cmluZyl7DQoJCWlmKCR0aGlzLT5kZWJ1Zyl7DQoJCQlpZigkbGV2ZWwgPT0g MSkNCgkJCQllY2hvICI8YiBzdHlsZT0nY29sb3I6ICM3NzcnPmRVbnppcDI6PC9iPiAkc3Ry aW5nPGJyPiI7DQoJCQkNCgkJCWlmKCRsZXZlbCA9PSAyKQ0KCQkJCWVjaG8gIjxiIHN0eWxl PSdjb2xvcjogI0YwMCc+ZFVuemlwMjo8L2I+ICRzdHJpbmc8YnI+IjsNCgkJfQ0KCQkkdGhp cy0+bGFzdEVycm9yID0gJHN0cmluZzsNCgl9DQoJRnVuY3Rpb24gZ2V0TGFzdEVycm9yKCl7 DQoJCXJldHVybiAkdGhpcy0+bGFzdEVycm9yOw0KCX0NCg0KCUZ1bmN0aW9uIF9sb2FkRmls ZUxpc3RCeUVPRigmJGZoLCAkc3RvcE9uRmlsZT1mYWxzZSl7DQoJCS8vIENoZWNrIGlmIHRo ZXJlJ3MgYSB2YWxpZCBDZW50cmFsIERpciBzaWduYXR1cmUuDQoJCS8vIExldCdzIGNvbnNp ZGVyIGEgZmlsZSBjb21tZW50IHNtYWxsZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMuLi4NCgkJ Ly8gQWN0dWFsbHksIGl0IGxlbmd0aCBjYW4gYmUgNjU1MzYuLiBCdXQgd2UncmUgbm90IGdv aW5nIHRvIHN1cHBvcnQgaXQuDQoJCQ0KCQlmb3IoJHggPSAwOyAkeCA8IDEwMjQ7ICR4Kysp ew0KCQkJZnNlZWsoJGZoLCAtMjItJHgsIFNFRUtfRU5EKTsNCgkJCQ0KCQkJJHNpZ25hdHVy ZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT5kaXJTaWdu YXR1cmVFKXsNCgkJCQkvLyBJZiBmb3VuZCBFT0YgQ2VudHJhbCBEaXINCgkJCQkkZW9kaXJb J2Rpc2tfbnVtYmVyX3RoaXMnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IG51bWJlciBvZiB0aGlzIGRpc2sNCgkJCQkkZW9kaXJbJ2Rpc2tfbnVtYmVyJ10gICAgICAg ID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIG51bWJlciBvZiB0aGUgZGlzayB3 aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJCQkkZW9kaXJbJ3Rv dGFsX2VudHJpZXNfdGhpcyddID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHRv dGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciBvbiB0aGlzIGRpc2sN CgkJCQkkZW9kaXJbJ3RvdGFsX2VudHJpZXMnXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQo JGZoLCAyKSk7IC8vIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluDQoJCQkJJGVvZGlyWydz aXplX29mX2NkJ10gICAgICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBz aXplIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0KCQkJCSRlb2Rpclsnb2Zmc2V0X3N0YXJ0 X2NkJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gb2Zmc2V0IG9mIHN0 YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcg ZGlzayBudW1iZXINCgkJCQkkemlwRmlsZUNvbW1lbnRMZW5naHQgICAgICAgID0gdW5wYWNr KCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHppcGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCQkk ZW9kaXJbJ3ppcGZpbGVfY29tbWVudCddICAgID0gJHppcEZpbGVDb21tZW50TGVuZ2h0WzFd P2ZyZWFkKCRmaCwgJHppcEZpbGVDb21tZW50TGVuZ2h0WzFdKTonJzsgLy8gemlwZmlsZSBj b21tZW50DQoJCQkJJHRoaXMtPmVuZE9mQ2VudHJhbCA9IEFycmF5KA0KCQkJCQknZGlza19u dW1iZXJfdGhpcyc9PiRlb2RpclsnZGlza19udW1iZXJfdGhpcyddWzFdLA0KCQkJCQknZGlz a19udW1iZXInPT4kZW9kaXJbJ2Rpc2tfbnVtYmVyJ11bMV0sDQoJCQkJCSd0b3RhbF9lbnRy aWVzX3RoaXMnPT4kZW9kaXJbJ3RvdGFsX2VudHJpZXNfdGhpcyddWzFdLA0KCQkJCQkndG90 YWxfZW50cmllcyc9PiRlb2RpclsndG90YWxfZW50cmllcyddWzFdLA0KCQkJCQknc2l6ZV9v Zl9jZCc9PiRlb2Rpclsnc2l6ZV9vZl9jZCddWzFdLA0KCQkJCQknb2Zmc2V0X3N0YXJ0X2Nk Jz0+JGVvZGlyWydvZmZzZXRfc3RhcnRfY2QnXVsxXSwNCgkJCQkJJ3ppcGZpbGVfY29tbWVu dCc9PiRlb2RpclsnemlwZmlsZV9jb21tZW50J10sDQoJCQkJKTsNCgkJCQkNCgkJCQkvLyBU aGVuLCBsb2FkIGZpbGUgbGlzdA0KCQkJCWZzZWVrKCRmaCwgJHRoaXMtPmVuZE9mQ2VudHJh bFsnb2Zmc2V0X3N0YXJ0X2NkJ10pOw0KCQkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQp Ow0KCQkJCQ0KCQkJCXdoaWxlKCRzaWduYXR1cmUgPT0gJHRoaXMtPmRpclNpZ25hdHVyZSl7 DQoJCQkJCSRkaXJbJ3ZlcnNpb25fbWFkZWJ5J10gICAgICA9IHVucGFjaygidiIsIGZyZWFk KCRmaCwgMikpOyAvLyB2ZXJzaW9uIG1hZGUgYnkNCgkJCQkJJGRpclsndmVyc2lvbl9uZWVk ZWQnXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHZlcnNpb24gbmVl ZGVkIHRvIGV4dHJhY3QNCgkJCQkJJGRpclsnZ2VuZXJhbF9iaXRfZmxhZyddICAgID0gdW5w YWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGdlbmVyYWwgcHVycG9zZSBiaXQgZmxhZw0K CQkJCQkkZGlyWydjb21wcmVzc2lvbl9tZXRob2QnXSAgPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gY29tcHJlc3Npb24gbWV0aG9kDQoJCQkJCSRkaXJbJ2xhc3Rtb2RfdGlt ZSddICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBm aWxlIHRpbWUNCgkJCQkJJGRpclsnbGFzdG1vZF9kYXRlJ10gICAgICAgID0gdW5wYWNrKCJ2 IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGxhc3QgbW9kIGZpbGUgZGF0ZQ0KCQkJCQkkZGlyWydj cmMtMzInXSAgICAgICAgICAgICAgPSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAgLy8g Y3JjLTMyDQoJCQkJCSRkaXJbJ2NvbXByZXNzZWRfc2l6ZSddICAgICA9IHVucGFjaygiViIs IGZyZWFkKCRmaCwgNCkpOyAvLyBjb21wcmVzc2VkIHNpemUNCgkJCQkJJGRpclsndW5jb21w cmVzc2VkX3NpemUnXSAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHVuY29t cHJlc3NlZCBzaXplDQoJCQkJCSRmaWxlTmFtZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFj aygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBmaWxlbmFtZSBsZW5ndGgNCgkJCQkJJGV4dHJh RmllbGRMZW5ndGggICAgICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IGV4dHJhIGZpZWxkIGxlbmd0aA0KCQkJCQkkZmlsZUNvbW1lbnRMZW5ndGggICAgICAgICAg PSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZmlsZSBjb21tZW50IGxlbmd0aA0K CQkJCQkkZGlyWydkaXNrX251bWJlcl9zdGFydCddICAgPSB1bnBhY2soInYiLCBmcmVhZCgk ZmgsIDIpKTsgLy8gZGlzayBudW1iZXIgc3RhcnQNCgkJCQkJJGRpclsnaW50ZXJuYWxfYXR0 cmlidXRlcyddID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGludGVybmFsIGZp bGUgYXR0cmlidXRlcy1ieXRlMQ0KCQkJCQkkZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMSdd PSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1 dGVzLWJ5dGUyDQoJCQkJCSRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMyJ109IHVucGFjaygi diIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCQkJ JGRpclsncmVsYXRpdmVfb2Zmc2V0J10gICAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0 KSk7IC8vIHJlbGF0aXZlIG9mZnNldCBvZiBsb2NhbCBoZWFkZXINCgkJCQkJJGRpclsnZmls ZV9uYW1lJ10gICAgICAgICAgID0gZnJlYWQoJGZoLCAkZmlsZU5hbWVMZW5ndGhbMV0pOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsZW5hbWUNCgkJCQkJJGRpclsnZXh0 cmFfZmllbGQnXSAgICAgICAgID0gJGV4dHJhRmllbGRMZW5ndGhbMV0gP2ZyZWFkKCRmaCwg JGV4dHJhRmllbGRMZW5ndGhbMV0pIDonJzsgLy8gZXh0cmEgZmllbGQNCgkJCQkJJGRpclsn ZmlsZV9jb21tZW50J10gICAgICAgID0gJGZpbGVDb21tZW50TGVuZ3RoWzFdP2ZyZWFkKCRm aCwgJGZpbGVDb21tZW50TGVuZ3RoWzFdKTonJzsgLy8gZmlsZSBjb21tZW50CQkJDQoJCQkJ CQ0KCQkJCQkvLyBDb252ZXJ0IHRoZSBkYXRlIGFuZCB0aW1lLCBmcm9tIE1TLURPUyBmb3Jt YXQgdG8gVU5JWCBUaW1lc3RhbXANCgkJCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQo ZGVjYmluKCRkaXJbJ2xhc3Rtb2RfZGF0ZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9MRUZU KTsNCgkJCQkJJEJJTmxhc3Rtb2RfdGltZSA9IHN0cl9wYWQoZGVjYmluKCRkaXJbJ2xhc3Rt b2RfdGltZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCQkJJGxhc3Rtb2Rf ZGF0ZVkgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICAwLCA3KSkrMTk4MDsN CgkJCQkJJGxhc3Rtb2RfZGF0ZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUs ICA3LCA0KSk7DQoJCQkJCSRsYXN0bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklObGFz dG1vZF9kYXRlLCAxMSwgNSkpOw0KCQkJCQkkbGFzdG1vZF90aW1lSCA9IGJpbmRlYyhzdWJz dHIoJEJJTmxhc3Rtb2RfdGltZSwgICAwLCA1KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVNID0g YmluZGVjKHN1YnN0cigkQklObGFzdG1vZF90aW1lLCAgIDUsIDYpKTsNCgkJCQkJJGxhc3Rt b2RfdGltZVMgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAxMSwgNSkpOwkN CgkJCQkJDQoJCQkJCS8vIFNvbWUgcHJvdGVjdGlvbiBhZ2FpbnMgYXR0YWNrcy4uLg0KCQkJ CQlpZighJGRpclsnZmlsZV9uYW1lJ10gPSAkdGhpcy0+X3Byb3RlY3QoJGRpclsnZmlsZV9u YW1lJ10pKQ0KCQkJCQkJY29udGludWU7DQoJCQkJCQ0KCQkJCQkkdGhpcy0+Y2VudHJhbERp ckxpc3RbJGRpclsnZmlsZV9uYW1lJ11dID0gQXJyYXkoDQoJCQkJCQkndmVyc2lvbl9tYWRl YnknPT4kZGlyWyd2ZXJzaW9uX21hZGVieSddWzFdLA0KCQkJCQkJJ3ZlcnNpb25fbmVlZGVk Jz0+JGRpclsndmVyc2lvbl9uZWVkZWQnXVsxXSwNCgkJCQkJCSdnZW5lcmFsX2JpdF9mbGFn Jz0+c3RyX3BhZChkZWNiaW4oJGRpclsnZ2VuZXJhbF9iaXRfZmxhZyddWzFdKSwgOCwgJzAn LCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2NvbXByZXNzaW9uX21ldGhvZCc9PiRkaXJbJ2Nv bXByZXNzaW9uX21ldGhvZCddWzFdLA0KCQkJCQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1r dGltZSgkbGFzdG1vZF90aW1lSCwgJGxhc3Rtb2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAk bGFzdG1vZF9kYXRlTSwgJGxhc3Rtb2RfZGF0ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQkJ CSdjcmMtMzInICAgICAgICAgICAgPT5zdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMy J11bM10pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQo ZGVjaGV4KG9yZCgkZGlyWydjcmMtMzInXVsyXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCku DQoJCQkJCQkJCQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRkaXJbJ2NyYy0zMiddWzFdKSks IDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChv cmQoJGRpclsnY3JjLTMyJ11bMF0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJ J2NvbXByZXNzZWRfc2l6ZSc9PiRkaXJbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCQkJ J3VuY29tcHJlc3NlZF9zaXplJz0+JGRpclsndW5jb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJ CQkJCSdkaXNrX251bWJlcl9zdGFydCc9PiRkaXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J11bMV0s DQoJCQkJCQknaW50ZXJuYWxfYXR0cmlidXRlcyc9PiRkaXJbJ2ludGVybmFsX2F0dHJpYnV0 ZXMnXVsxXSwNCgkJCQkJCSdleHRlcm5hbF9hdHRyaWJ1dGVzMSc9PiRkaXJbJ2V4dGVybmFs X2F0dHJpYnV0ZXMxJ11bMV0sDQoJCQkJCQknZXh0ZXJuYWxfYXR0cmlidXRlczInPT4kZGly WydleHRlcm5hbF9hdHRyaWJ1dGVzMiddWzFdLA0KCQkJCQkJJ3JlbGF0aXZlX29mZnNldCc9 PiRkaXJbJ3JlbGF0aXZlX29mZnNldCddWzFdLA0KCQkJCQkJJ2ZpbGVfbmFtZSc9PiRkaXJb J2ZpbGVfbmFtZSddLA0KCQkJCQkJJ2V4dHJhX2ZpZWxkJz0+JGRpclsnZXh0cmFfZmllbGQn XSwNCgkJCQkJCSdmaWxlX2NvbW1lbnQnPT4kZGlyWydmaWxlX2NvbW1lbnQnXSwNCgkJCQkJ KTsNCgkJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQkJfQ0KCQkJCQ0KCQkJ CS8vIElmIGxvYWRlZCBjZW50cmFsRGlycywgdGhlbiB0cnkgdG8gaWRlbnRpZnkgdGhlIG9m ZnNldFBvc2l0aW9uIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuDQoJCQkJaWYoJHRoaXMtPmNl bnRyYWxEaXJMaXN0KSBmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZW5h bWU9PiRkZXRhaWxzKXsNCgkJCQkJJGkgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1h dGlvbigkZmgsICRkZXRhaWxzWydyZWxhdGl2ZV9vZmZzZXQnXSk7DQoJCQkJCSR0aGlzLT5j b21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWydmaWxlX25hbWUnXSAgICAgICAgICA9ICRmaWxl bmFtZTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbXByZXNz aW9uX21ldGhvZCddID0gJGRldGFpbHNbJ2NvbXByZXNzaW9uX21ldGhvZCddOw0KCQkJCQkk dGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsndmVyc2lvbl9uZWVkZWQnXSAgICAg PSAkZGV0YWlsc1sndmVyc2lvbl9uZWVkZWQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRM aXN0WyRmaWxlbmFtZV1bJ2xhc3Rtb2RfZGF0ZXRpbWUnXSAgID0gJGRldGFpbHNbJ2xhc3Rt b2RfZGF0ZXRpbWUnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1b J2NyYy0zMiddICAgICAgICAgICAgID0gJGRldGFpbHNbJ2NyYy0zMiddOw0KCQkJCQkkdGhp cy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSAk ZGV0YWlsc1snY29tcHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlz dFskZmlsZW5hbWVdWyd1bmNvbXByZXNzZWRfc2l6ZSddICA9ICRkZXRhaWxzWyd1bmNvbXBy ZXNzZWRfc2l6ZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsn bGFzdG1vZF9kYXRldGltZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGltZSddOw0K CQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnZXh0cmFfZmllbGQnXSAg ICAgICAgPSAkaVsnZXh0cmFfZmllbGQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0 WyRmaWxlbmFtZV1bJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J109JGlbJ2NvbnRlbnRzLXN0YXJ0 T2Zmc2V0J107DQoJCQkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRvbG93 ZXIoJGZpbGVuYW1lKSkNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsN CgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCUZ1bmN0aW9uIF9sb2FkRmlsZUxp c3RCeVNpZ25hdHVyZXMoJiRmaCwgJHN0b3BPbkZpbGU9ZmFsc2Upew0KCQlmc2VlaygkZmgs IDApOw0KCQkNCgkJJHJldHVybiA9IGZhbHNlOw0KCQlmb3IoOzspew0KCQkJJGRldGFpbHMg PSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgpOw0KCQkJaWYoISRkZXRh aWxzKXsNCgkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkludmFsaWQgc2lnbmF0dXJlLiBUcnlp bmcgdG8gdmVyaWZ5IGlmIGlzIG9sZCBzdHlsZSBEYXRhIERlc2NyaXB0b3IuLi4iKTsNCgkJ CQlmc2VlaygkZmgsIDEyIC0gNCwgU0VFS19DVVIpOyAvLyAxMjogRGF0YSBkZXNjcmlwdG9y IC0gNDogU2lnbmF0dXJlICh0aGF0IHdpbGwgYmUgcmVhZCBhZ2FpbikNCgkJCQkkZGV0YWls cyA9ICR0aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCk7DQoJCQl9DQoJCQlp ZighJGRldGFpbHMpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiU3RpbGwgaW52YWxpZCBz aWduYXR1cmUuIFByb2JhYmx5IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZS4iKTsNCgkJ CQlicmVhazsNCgkJCX0NCgkJCSRmaWxlbmFtZSA9ICRkZXRhaWxzWydmaWxlX25hbWUnXTsN CgkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdID0gJGRldGFpbHM7DQoJCQkk cmV0dXJuID0gdHJ1ZTsNCgkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0cnRv bG93ZXIoJGZpbGVuYW1lKSkNCgkJCQlicmVhazsNCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXR1 cm47DQoJfQ0KCUZ1bmN0aW9uIF9nZXRGaWxlSGVhZGVySW5mb3JtYXRpb24oJiRmaCwgJHN0 YXJ0T2Zmc2V0PWZhbHNlKXsNCgkJaWYoJHN0YXJ0T2Zmc2V0ICE9PSBmYWxzZSkNCgkJCWZz ZWVrKCRmaCwgJHN0YXJ0T2Zmc2V0KTsNCgkJDQoJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgs IDQpOw0KCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT56aXBTaWduYXR1cmUpew0KCQkJIyAk dGhpcy0+ZGVidWdNc2coMSwgIlppcCBTaWduYXR1cmUhIik7DQoJCQkNCgkJCS8vIEdldCBp bmZvcm1hdGlvbiBhYm91dCB0aGUgemlwcGVkIGZpbGUNCgkJCSRmaWxlWyd2ZXJzaW9uX25l ZWRlZCddICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJzaW9uIG5l ZWRlZCB0byBleHRyYWN0DQoJCQkkZmlsZVsnZ2VuZXJhbF9iaXRfZmxhZyddICAgPSB1bnBh Y2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnDQoJ CQkkZmlsZVsnY29tcHJlc3Npb25fbWV0aG9kJ10gPSB1bnBhY2soInYiLCBmcmVhZCgkZmgs IDIpKTsgLy8gY29tcHJlc3Npb24gbWV0aG9kDQoJCQkkZmlsZVsnbGFzdG1vZF90aW1lJ10g ICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSB0 aW1lDQoJCQkkZmlsZVsnbGFzdG1vZF9kYXRlJ10gICAgICAgPSB1bnBhY2soInYiLCBmcmVh ZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSBkYXRlDQoJCQkkZmlsZVsnY3JjLTMyJ10g ICAgICAgICAgICAgPSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAgLy8gY3JjLTMyDQoJ CQkkZmlsZVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgs IDQpKTsgLy8gY29tcHJlc3NlZCBzaXplDQoJCQkkZmlsZVsndW5jb21wcmVzc2VkX3NpemUn XSAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2VkIHNpemUN CgkJCSRmaWxlTmFtZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRm aCwgMikpOyAvLyBmaWxlbmFtZSBsZW5ndGgNCgkJCSRleHRyYUZpZWxkTGVuZ3RoICAgICAg ICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRyYSBmaWVsZCBsZW5n dGgNCgkJCSRmaWxlWydmaWxlX25hbWUnXSAgICAgICAgICA9IGZyZWFkKCRmaCwgJGZpbGVO YW1lTGVuZ3RoWzFdKTsgLy8gZmlsZW5hbWUNCgkJCSRmaWxlWydleHRyYV9maWVsZCddICAg ICAgICA9ICRleHRyYUZpZWxkTGVuZ3RoWzFdP2ZyZWFkKCRmaCwgJGV4dHJhRmllbGRMZW5n dGhbMV0pOicnOyAvLyBleHRyYSBmaWVsZA0KCQkJJGZpbGVbJ2NvbnRlbnRzLXN0YXJ0T2Zm c2V0J109IGZ0ZWxsKCRmaCk7DQoJCQkNCgkJCS8vIEJ5cGFzcyB0aGUgd2hvbGUgY29tcHJl c3NlZCBjb250ZW50cywgYW5kIGxvb2sgZm9yIHRoZSBuZXh0IGZpbGUNCgkJCWZzZWVrKCRm aCwgJGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLCBTRUVLX0NVUik7DQoJCQkNCgkJCS8v IENvbnZlcnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBVTklY IFRpbWVzdGFtcA0KCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmluKCRmaWxl WydsYXN0bW9kX2RhdGUnXVsxXSksIDE2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQkkQklO bGFzdG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfdGltZSddWzFd KSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCSRsYXN0bW9kX2RhdGVZID0gYmluZGVj KHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAgMCwgNykpKzE5ODA7DQoJCQkkbGFzdG1vZF9k YXRlTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsNCgkJCSRs YXN0bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAxMSwgNSkp Ow0KCQkJJGxhc3Rtb2RfdGltZUggPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUs ICAgMCwgNSkpOw0KCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0 bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5kZWMoc3Vic3Ry KCRCSU5sYXN0bW9kX3RpbWUsICAxMSwgNSkpOw0KCQkJDQoJCQkvLyBTb21lIHByb3RlY3Rp b24gYWdhaW5zIGF0dGFja3MuLi4NCgkJCWlmKCEkZmlsZVsnZmlsZV9uYW1lJ10gPSAkdGhp cy0+X3Byb3RlY3QoJGZpbGVbJ2ZpbGVfbmFtZSddKSkNCgkJCQlyZXR1cm47DQoJCQkNCgkJ CS8vIE1vdW50IGZpbGUgdGFibGUNCgkJCSRpID0gQXJyYXkoDQoJCQkJJ2ZpbGVfbmFtZScg ICAgICAgICA9PiRmaWxlWydmaWxlX25hbWUnXSwNCgkJCQknY29tcHJlc3Npb25fbWV0aG9k Jz0+JGZpbGVbJ2NvbXByZXNzaW9uX21ldGhvZCddWzFdLA0KCQkJCSd2ZXJzaW9uX25lZWRl ZCcgICAgPT4kZmlsZVsndmVyc2lvbl9uZWVkZWQnXVsxXSwNCgkJCQknbGFzdG1vZF9kYXRl dGltZScgID0+bWt0aW1lKCRsYXN0bW9kX3RpbWVILCAkbGFzdG1vZF90aW1lTSwgJGxhc3Rt b2RfdGltZVMsICRsYXN0bW9kX2RhdGVNLCAkbGFzdG1vZF9kYXRlRCwgJGxhc3Rtb2RfZGF0 ZVkpLA0KCQkJCSdjcmMtMzInICAgICAgICAgICAgPT5zdHJfcGFkKGRlY2hleChvcmQoJGZp bGVbJ2NyYy0zMiddWzNdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAg c3RyX3BhZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVsyXSkpLCAyLCAnMCcsIFNUUl9Q QURfTEVGVCkuDQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMy J11bMV0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRl Y2hleChvcmQoJGZpbGVbJ2NyYy0zMiddWzBdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKSwN CgkJCQknY29tcHJlc3NlZF9zaXplJyAgID0+JGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddWzFd LA0KCQkJCSd1bmNvbXByZXNzZWRfc2l6ZScgPT4kZmlsZVsndW5jb21wcmVzc2VkX3NpemUn XVsxXSwNCgkJCQknZXh0cmFfZmllbGQnICAgICAgID0+JGZpbGVbJ2V4dHJhX2ZpZWxkJ10s DQoJCQkJJ2dlbmVyYWxfYml0X2ZsYWcnICA9PnN0cl9wYWQoZGVjYmluKCRmaWxlWydnZW5l cmFsX2JpdF9mbGFnJ11bMV0pLCA4LCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJJ2NvbnRl bnRzLXN0YXJ0T2Zmc2V0Jz0+JGZpbGVbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10NCgkJCSk7 DQoJCQlyZXR1cm4gJGk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglGdW5jdGlv biBfcHJvdGVjdCgkZnVsbFBhdGgpew0KCQkvLyBLbm93biBoYWNrLWF0dGFja3MgKGZpbGVu YW1lIGxpa2UpOg0KCQkvLyAgIC9ob21lL3Vzcg0KCQkvLyAgIC4uLy4uL2hvbWUvdXNyDQoJ CS8vICAgZm9sZGVyLy4uLy4uLy4uL2hvbWUvdXNyDQoJCS8vICAgc2FtcGxlLyh4MCkuLi9o b21lL3Vzcg0KCQkNCgkJJGZ1bGxQYXRoID0gc3RydHIoJGZ1bGxQYXRoLCAiOio8PnxcIlx4 MFxcIiwgIi4uLi4uLi4vIik7DQoJCXdoaWxlKCRmdWxsUGF0aFswXSA9PSAiLyIpDQoJCQkk ZnVsbFBhdGggPSBzdWJzdHIoJGZ1bGxQYXRoLCAxKTsNCgkJDQoJCWlmKHN1YnN0cigkZnVs bFBhdGgsIC0xKSA9PSAiLyIpew0KCQkJJGJhc2UgICAgID0gJyc7DQoJCQkkZnVsbFBhdGgg PSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCAtMSk7DQoJCX0NCgkJZWxzZXsNCgkJCSRiYXNlICAg ICA9IGJhc2VuYW1lKCRmdWxsUGF0aCk7DQoJCQkkZnVsbFBhdGggPSBkaXJuYW1lKCRmdWxs UGF0aCk7DQoJCX0NCgkJDQoJCSRwYXJ0cyAgID0gZXhwbG9kZSgiLyIsICRmdWxsUGF0aCk7 DQoJCSRsYXN0SWR4ID0gZmFsc2U7DQoJCWZvcmVhY2goJHBhcnRzIGFzICRpZHg9PiRwYXJ0 KXsNCgkJCWlmKCRwYXJ0ID09ICIuIikNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0pOw0KCQkJ ZWxzZWlmKCRwYXJ0ID09ICIuLiIpew0KCQkJCXVuc2V0KCRwYXJ0c1skaWR4XSk7DQoJCQkJ aWYoJGxhc3RJZHggIT09IGZhbHNlKXsNCgkJCQkJdW5zZXQoJHBhcnRzWyRsYXN0SWR4XSk7 DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCRwYXJ0ID09PSAnJyl7DQoJCQkJdW5zZXQoJHBh cnRzWyRpZHhdKTsNCgkJCX0NCgkJCWVsc2V7DQoJCQkJJGxhc3RJZHggPSAkaWR4Ow0KCQkJ fQ0KCQl9DQoJCQ0KCQkkZnVsbFBhdGggPSBzaXplb2YoJHBhcnRzKT9pbXBsb2RlKCIvIiwg JHBhcnRzKS4iLyI6IiI7DQoJCXJldHVybiAkZnVsbFBhdGguJGJhc2U7DQoJfQ0KfQ0KDQpj bGFzcyBzbWRfZFppcHsNCgl2YXIgJGZpbGVuYW1lOw0KCXZhciAkb3ZlcndyaXRlOw0KCQ0K CXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxl IGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFc eDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0 dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0 dXJlDQoJdmFyICRmaWxlc19jb3VudCAgPSAwOw0KCXZhciAkZmg7DQoJDQoJRnVuY3Rpb24g c21kX2RaaXAoJGZpbGVuYW1lLCAkb3ZlcndyaXRlPXRydWUpew0KCQkkdGhpcy0+ZmlsZW5h bWUgID0gJGZpbGVuYW1lOw0KCQkkdGhpcy0+b3ZlcndyaXRlID0gJG92ZXJ3cml0ZTsNCgl9 DQoJRnVuY3Rpb24gYWRkRGlyKCRkaXJuYW1lLCAkZmlsZUNvbW1lbnRzPScnKXsNCgkJaWYo c3Vic3RyKCRkaXJuYW1lLCAtMSkgIT0gJy8nKQ0KCQkJJGRpcm5hbWUgLj0gJy8nOw0KCQkk dGhpcy0+YWRkRmlsZShmYWxzZSwgJGRpcm5hbWUsICRmaWxlQ29tbWVudHMpOw0KCX0NCglG dW5jdGlvbiBhZGRGaWxlKCRmaWxlbmFtZSwgJGNmaWxlbmFtZSwgJGZpbGVDb21tZW50cz0n JywgJGRhdGE9ZmFsc2Upew0KCQlpZighKCRmaCA9ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0g Zm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhpcy0+b3ZlcndyaXRlPyd3Yic6J2ErYicpOw0K CQkNCgkJLy8gJGZpbGVuYW1lIGNhbiBiZSBhIGxvY2FsIGZpbGUgT1IgdGhlIGRhdGEgd2lj aCB3aWxsIGJlIGNvbXByZXNzZWQNCgkJaWYoc3Vic3RyKCRjZmlsZW5hbWUsIC0xKT09Jy8n KXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10gPSAwOw0KCQkJJGRhdGEgPSAnJzsNCgkJfQ0K CQllbHNlaWYoZmlsZV9leGlzdHMoJGZpbGVuYW1lKSl7DQoJCQkkZGV0YWlsc1sndW5jc2l6 ZSddID0gZmlsZXNpemUoJGZpbGVuYW1lKTsNCgkJCSRkYXRhID0gZmlsZV9nZXRfY29udGVu dHMoJGZpbGVuYW1lKTsNCgkJfQ0KCQllbHNlaWYoJGZpbGVuYW1lKXsNCgkJCWVjaG8gIjxi PkNhbm5vdCBhZGQgJGZpbGVuYW1lLiBGaWxlIG5vdCBmb3VuZDwvYj48YnI+IjsNCgkJCXJl dHVybiBmYWxzZTsNCgkJfQ0KCQllbHNlew0KCQkJJGRldGFpbHNbJ3VuY3NpemUnXSA9IHN0 cmxlbigkZmlsZW5hbWUpOw0KCQkJLy8gREFUQSBpcyBnaXZlbi4uIHVzZSBpdCEgOnwNCgkJ fQ0KCQkNCgkJLy8gaWYgZGF0YSB0byBjb21wcmVzcyBpcyB0b28gc21hbGwsIGp1c3Qgc3Rv cmUgaXQNCgkJaWYoJGRldGFpbHNbJ3VuY3NpemUnXSA8IDI1Nil7DQoJCQkkZGV0YWlsc1sn Y29tc2l6ZSddID0gJGRldGFpbHNbJ3VuY3NpemUnXTsNCgkJCSRkZXRhaWxzWyd2bmVlZGVk J10gPSAxMDsNCgkJCSRkZXRhaWxzWydjbWV0aG9kJ10gPSAwOw0KCQkJJHpkYXRhID0gJiRk YXRhOw0KCQl9DQoJCWVsc2V7IC8vIG90aGVyd2lzZSwgY29tcHJlc3MgaXQNCgkJCSR6ZGF0 YSA9IGd6Y29tcHJlc3MoJGRhdGEpOw0KCQkJJHpkYXRhID0gc3Vic3RyKHN1YnN0cigkemRh dGEsIDAsIHN0cmxlbigkemRhdGEpIC0gNCksIDIpOyAvLyBmaXggY3JjIGJ1ZyAodGhhbmtz IHRvIEVyaWMgTXVlbGxlcikNCgkJCSRkZXRhaWxzWydjb21zaXplJ10gPSBzdHJsZW4oJHpk YXRhKTsNCgkJCSRkZXRhaWxzWyd2bmVlZGVkJ10gPSAxMDsNCgkJCSRkZXRhaWxzWydjbWV0 aG9kJ10gPSA4Ow0KCQl9DQoJCQ0KCQkkZGV0YWlsc1snYml0ZmxhZyddID0gMDsNCgkJJGRl dGFpbHNbJ2NyY18zMiddICA9IGNyYzMyKCRkYXRhKTsNCgkJDQoJCS8vIENvbnZlcnQgZGF0 ZSBhbmQgdGltZSB0byBET1MgRm9ybWF0LCBhbmQgc2V0IHRoZW4NCgkJJGxhc3Rtb2RfdGlt ZVMgID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgncycpPj0zMj9kYXRlKCdzJyktMzI6ZGF0ZSgn cycpKSwgNSwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF90aW1lTSAgPSBzdHJf cGFkKGRlY2JpbihkYXRlKCdpJykpLCA2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0 bW9kX3RpbWVIICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ0gnKSksIDUsICcwJywgU1RSX1BB RF9MRUZUKTsNCgkJJGxhc3Rtb2RfZGF0ZUQgID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnZCcp KSwgNSwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF9kYXRlTSAgPSBzdHJfcGFk KGRlY2JpbihkYXRlKCdtJykpLCA0LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9k X2RhdGVZICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ1knKS0xOTgwKSwgNywgJzAnLCBTVFJf UEFEX0xFRlQpOw0KCQkNCgkJIyBlY2hvICJNb2RUaW1lOiAkbGFzdG1vZF90aW1lUy0kbGFz dG1vZF90aW1lTS0kbGFzdG1vZF90aW1lSCAoIi5kYXRlKCJzIEggSCIpLiIpXG4iOw0KCQkj IGVjaG8gIk1vZERhdGU6ICRsYXN0bW9kX2RhdGVELSRsYXN0bW9kX2RhdGVNLSRsYXN0bW9k X2RhdGVZICgiLmRhdGUoImQgbSBZIikuIilcbiI7DQoJCSRkZXRhaWxzWydtb2R0aW1lJ10g PSBiaW5kZWMoIiRsYXN0bW9kX3RpbWVIJGxhc3Rtb2RfdGltZU0kbGFzdG1vZF90aW1lUyIp Ow0KCQkkZGV0YWlsc1snbW9kZGF0ZSddID0gYmluZGVjKCIkbGFzdG1vZF9kYXRlWSRsYXN0 bW9kX2RhdGVNJGxhc3Rtb2RfZGF0ZUQiKTsNCgkJDQoJCSRkZXRhaWxzWydvZmZzZXQnXSA9 IGZ0ZWxsKCRmaCk7DQoJCWZ3cml0ZSgkZmgsICR0aGlzLT56aXBTaWduYXR1cmUpOw0KCQlm d3JpdGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ3ZuZWVkZWQnXSkpOyAvLyB2ZXJzaW9u X25lZWRlZA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ2JpdGZsYWcnXSkp OyAvLyBnZW5lcmFsX2JpdF9mbGFnDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWls c1snY21ldGhvZCddKSk7IC8vIGNvbXByZXNzaW9uX21ldGhvZA0KCQlmd3JpdGUoJGZoLCBw YWNrKCdzJywgJGRldGFpbHNbJ21vZHRpbWUnXSkpOyAvLyBsYXN0bW9kX3RpbWUNCgkJZndy aXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWydtb2RkYXRlJ10pKTsgLy8gbGFzdG1vZF9k YXRlDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ1YnLCAkZGV0YWlsc1snY3JjXzMyJ10pKTsgIC8v IGNyYy0zMg0KCQlmd3JpdGUoJGZoLCBwYWNrKCdJJywgJGRldGFpbHNbJ2NvbXNpemUnXSkp OyAvLyBjb21wcmVzc2VkX3NpemUNCgkJZndyaXRlKCRmaCwgcGFjaygnSScsICRkZXRhaWxz Wyd1bmNzaXplJ10pKTsgLy8gdW5jb21wcmVzc2VkX3NpemUNCgkJZndyaXRlKCRmaCwgcGFj aygncycsIHN0cmxlbigkY2ZpbGVuYW1lKSkpOyAgIC8vIGZpbGVfbmFtZV9sZW5ndGgNCgkJ ZndyaXRlKCRmaCwgcGFjaygncycsIDApKTsgIC8vIGV4dHJhX2ZpZWxkX2xlbmd0aA0KCQlm d3JpdGUoJGZoLCAkY2ZpbGVuYW1lKTsgICAgLy8gZmlsZV9uYW1lDQoJCS8vIGlnbm9yaW5n IGV4dHJhX2ZpZWxkDQoJCWZ3cml0ZSgkZmgsICR6ZGF0YSk7DQoJCQ0KCQkvLyBBcHBlbmQg aXQgdG8gY2VudHJhbCBkaXINCgkJJGRldGFpbHNbJ2V4dGVybmFsX2F0dHJpYnV0ZXMnXSAg PSAoc3Vic3RyKCRjZmlsZW5hbWUsIC0xKT09Jy8nJiYhJHpkYXRhKT8xNjozMjsgLy8gRGly ZWN0b3J5IG9yIGZpbGUgbmFtZQ0KCQkkZGV0YWlsc1snY29tbWVudHMnXSAgICAgICAgICAg ICA9ICRmaWxlQ29tbWVudHM7DQoJCSR0aGlzLT5hcHBlbmRDZW50cmFsRGlyKCRjZmlsZW5h bWUsICRkZXRhaWxzKTsNCgkJJHRoaXMtPmZpbGVzX2NvdW50Kys7DQoJfQ0KCUZ1bmN0aW9u IHNldEV4dHJhKCRmaWxlbmFtZSwgJHByb3BlcnR5LCAkdmFsdWUpew0KCQkkdGhpcy0+Y2Vu dHJhbGRpcnNbJGZpbGVuYW1lXVskcHJvcGVydHldID0gJHZhbHVlOw0KCX0NCglGdW5jdGlv biBzYXZlKCR6aXBDb21tZW50cz0nJyl7DQoJCWlmKCEoJGZoID0gJiR0aGlzLT5maCkpDQoJ CQkkZmggPSBmb3BlbigkdGhpcy0+ZmlsZW5hbWUsICR0aGlzLT5vdmVyd3JpdGU/J3cnOidh KycpOw0KCQkNCgkJJGNkcmVjID0gIiI7DQoJCWZvcmVhY2goJHRoaXMtPmNlbnRyYWxkaXJz IGFzICRmaWxlbmFtZT0+JGNkKXsNCgkJCSRjZHJlYyAuPSAkdGhpcy0+ZGlyU2lnbmF0dXJl Ow0KCQkJJGNkcmVjIC49ICJceDBceDAiOyAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb24g bWFkZSBieQ0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ3ZuZWVkZWQnXSk7IC8vIHZl cnNpb24gbmVlZGVkIHRvIGV4dHJhY3QNCgkJCSRjZHJlYyAuPSAiXHgwXHgwIjsgICAgICAg ICAgICAgICAgICAvLyBnZW5lcmFsIGJpdCBmbGFnDQoJCQkkY2RyZWMgLj0gcGFjaygndics ICRjZFsnY21ldGhvZCddKTsgLy8gY29tcHJlc3Npb24gbWV0aG9kDQoJCQkkY2RyZWMgLj0g cGFjaygndicsICRjZFsnbW9kdGltZSddKTsgLy8gbGFzdG1vZCB0aW1lDQoJCQkkY2RyZWMg Lj0gcGFjaygndicsICRjZFsnbW9kZGF0ZSddKTsgLy8gbGFzdG1vZCBkYXRlDQoJCQkkY2Ry ZWMgLj0gcGFjaygnVicsICRjZFsnY3JjXzMyJ10pOyAgLy8gY3JjMzINCgkJCSRjZHJlYyAu PSBwYWNrKCdWJywgJGNkWydjb21zaXplJ10pOyAvLyBjb21wcmVzc2VkIGZpbGVzaXplDQoJ CQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsndW5jc2l6ZSddKTsgLy8gdW5jb21wcmVzc2Vk IGZpbGVzaXplDQoJCQkkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkZmlsZW5hbWUpKTsg Ly8gZmlsZSBjb21tZW50IGxlbmd0aA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAwKTsgICAg ICAgICAgICAgICAgLy8gZXh0cmEgZmllbGQgbGVuZ3RoDQoJCQkkY2RyZWMgLj0gcGFjaygn dicsIHN0cmxlbigkY2RbJ2NvbW1lbnRzJ10pKTsgLy8gZmlsZSBjb21tZW50IGxlbmd0aA0K CQkJJGNkcmVjIC49IHBhY2soJ3YnLCAwKTsgLy8gZGlzayBudW1iZXIgc3RhcnQNCgkJCSRj ZHJlYyAuPSBwYWNrKCd2JywgMCk7IC8vIGludGVybmFsIGZpbGUgYXR0cmlidXRlcw0KCQkJ JGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ2V4dGVybmFsX2F0dHJpYnV0ZXMnXSk7IC8vIGlu dGVybmFsIGZpbGUgYXR0cmlidXRlcw0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ29m ZnNldCddKTsgLy8gcmVsYXRpdmUgb2Zmc2V0IG9mIGxvY2FsIGhlYWRlcg0KCQkJJGNkcmVj IC49ICRmaWxlbmFtZTsNCgkJCSRjZHJlYyAuPSAkY2RbJ2NvbW1lbnRzJ107DQoJCX0NCgkJ JGJlZm9yZV9jZCA9IGZ0ZWxsKCRmaCk7DQoJCWZ3cml0ZSgkZmgsICRjZHJlYyk7DQoJCQ0K CQkvLyBlbmQgb2YgY2VudHJhbCBkaXINCgkJZndyaXRlKCRmaCwgJHRoaXMtPmRpclNpZ25h dHVyZUUpOw0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2JywgMCkpOyAvLyBudW1iZXIgb2YgdGhp cyBkaXNrDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAwKSk7IC8vIG51bWJlciBvZiB0aGUg ZGlzayB3aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJZndyaXRl KCRmaCwgcGFjaygndicsICR0aGlzLT5maWxlc19jb3VudCkpOyAvLyB0b3RhbCAjIG9mIGVu dHJpZXMgIm9uIHRoaXMgZGlzayIgDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAkdGhpcy0+ ZmlsZXNfY291bnQpKTsgLy8gdG90YWwgIyBvZiBlbnRyaWVzIG92ZXJhbGwgDQoJCWZ3cml0 ZSgkZmgsIHBhY2soJ1YnLCBzdHJsZW4oJGNkcmVjKSkpOyAgICAgLy8gc2l6ZSBvZiBjZW50 cmFsIGRpciANCgkJZndyaXRlKCRmaCwgcGFjaygnVicsICRiZWZvcmVfY2QpKTsgICAgICAg ICAvLyBvZmZzZXQgdG8gc3RhcnQgb2YgY2VudHJhbCBkaXINCgkJZndyaXRlKCRmaCwgcGFj aygndicsIHN0cmxlbigkemlwQ29tbWVudHMpKSk7IC8vIC56aXAgZmlsZSBjb21tZW50IGxl bmd0aA0KCQlmd3JpdGUoJGZoLCAkemlwQ29tbWVudHMpOw0KCQkNCgkJZmNsb3NlKCRmaCk7 DQoJfQ0KCQ0KCS8vIFByaXZhdGUNCglGdW5jdGlvbiBhcHBlbmRDZW50cmFsRGlyKCRmaWxl bmFtZSwkcHJvcGVydGllcyl7DQoJCSR0aGlzLT5jZW50cmFsZGlyc1skZmlsZW5hbWVdID0g JHByb3BlcnRpZXM7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v IFBsdWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVx dWlyZWQNCmZ1bmN0aW9uIHNtZF9hdF9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsN CgkkbGFuZyA9IGFycmF5KA0KCQknYWN0aW9ucycgPT4gJ0FjdGlvbnMnLA0KCQknYWxsb3dl ZF9za2lucycgPT4gJ0FsbG93ZWQgdGhlbWVzOicsDQoJCSdhcHBseV9za2luJyA9PiAnQXBw bHkgdGhpcyB0aGVtZScsDQoJCSdhdmFpbF90aXRsZScgPT4gJ0F2YWlsYWJsZSB0aGVtZXMn LA0KCQknYmFzZWRfb24nID0+ICcgKGJhc2VkIG9uIHtza2lufSknLA0KCQknYnknID0+ICcg YnkgJywNCgkJJ2NfYnppcDInID0+ICdCWmlwJywNCgkJJ2NfZ3ppcCcgPT4gJ0daaXAnLA0K CQknY190YXInID0+ICdUYXInLA0KCQknY196aXAnID0+ICdaaXAnLA0KCQknY2FzZV9zb3J0 JyA9PiAnQ2FzZS1zZW5zaXRpdmUgdGhlbWUgbGlzdDonLA0KCQknY2xlYXInID0+ICdub25l JywNCgkJJ2Nsb25lJyA9PiAnQmFzZScsDQoJCSdjb25maXJtJyA9PiAnR28nLA0KCQknY29y ZV90aGVtZScgPT4gJ0Nhbm5vdCBkZWxldGUge3NraW59OiBjb3JlIHRoZW1lJywNCgkJJ2Nv cmVfdGhlbWVfZmlsZScgPT4gJ0Nhbm5vdCBkZWxldGUgZmlsZXMgZnJvbSB7c2tpbn06IGNv cmUgdGhlbWUnLA0KCQknY3J1c2hfdHlwZScgPT4gJ0V4cG9ydCBjb21wcmVzc2lvbiB0eXBl OicsDQoJCSdjcnVzaF9mb3JtYXQnID0+ICdGb3JtYXQ6JywNCgkJJ3NzYycgPT4gJ1N0eWxl cGxhdGVzJywNCgkJJ2NzcycgPT4gJ1N0eWxlcycsDQoJCSdkZWxldGVfY29uZmlybScgPT4g J1JlYWxseSBkZWxldGUgdGhlbWUge3NraW59PycsDQoJCSdkZWxldGVfZmFpbGVkJyA9PiAn RGVsZXRlIGZhaWxlZC4gVHJ5IHJlbW92aW5nIGl0IG1hbnVhbGx5JywNCgkJJ2VkaXRfbGJs JyA9PiAnVGhlbWUgZWRpdG9yJywNCgkJJ2VtcHR5X2luZm8nID0+ICdZb3Ugc2hvdWxkIGNo b29zZSBhIGZpbGUgZmlyc3QgOi0pJywNCgkJJ2V4cG9ydCcgPT4gJ0V4cG9ydCcsDQoJCSdm aWxlX25vdF9kZWxldGVkJyA9PiAnRmlsZSB7bmFtZX0gJy5zdHJvbmcoIm5vdCIpLicgZGVs ZXRlZCcsDQoJCSdmaWxlX3NhdmVkJyA9PiAnRmlsZSB7bmFtZX0gc2F2ZWQnLA0KCQknZmlu ZF90aGVtZScgPT4gJ0Jyb3dzZSB0aGVtZXMnLA0KCQknZ2xvYmFsX3NraW4nID0+ICdEZWZh dWx0IHRoZW1lOicsDQoJCSdoZWxwX2xpbmsnID0+ICcoPGEgaHJlZj0ie2xpbmt9Ij5IZWxw PC9hPiknLA0KCQknaW1nJyA9PiAnSW1hZ2VzJywNCgkJJ2ltcG9ydF9mYWlsZWQnID0+ICdJ bnN0YWxsYXRpb24gZmFpbGVkIDotKCBDaGVjayB0aGUgZmlsZSBzdHJ1Y3R1cmUnLA0KCQkn aW1wb3J0X3N1Y2Nlc3MnID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vzc2Z1bC4gRmlsZXMgZXh0 cmFjdGVkOiB7bnVtfScsDQoJCSdpbXBvcnRfb2snID0+ICdJbnN0YWxsYXRpb24gc3VjY2Vz c2Z1bC4nLA0KCQknaW5zdGFsbF9za2luJyA9PiAnSW5zdGFsbCB0aGVtZScsDQoJCSdpbnZh bGlkX2ZpbGUnID0+ICdSb2d1ZSBmaWxlIGRldGVjdGVkOiB7bmFtZX0nLA0KCQknaXNfZ2xv YmFsJyA9PiAnIFtERUZBVUxUXScsDQoJCSdqcycgPT4gJ1NjcmlwdHMnLA0KCQknbGF5b3V0 JyA9PiAnTGF5b3V0IG1ldGhvZDonLA0KCQknbGF5b3V0X2xpc3QnID0+ICdMaXN0JywNCgkJ J2xheW91dF9ncmlkJyA9PiAnR3JpZCcsDQoJCSdsaXN0X3RpdGxlJyA9PiAnSW5zdGFsbGVk IHRoZW1lcycsDQoJCSdtYW5hZ2VfbGJsJyA9PiAnVGhlbWUgbWFuYWdlcicsDQoJCSdta2Rp cl9mYWlsZWQnID0+ICdDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgZmlsZSB7bmFtZX0u IFRyeSBtYW51YWxseSBjcmVhdGluZyBpdC4nLA0KCQknbmFtZV9lbXB0eScgPT4gJ1lvdSBz aG91bGQgZ2l2ZSB5b3VyIHRoZW1lIGEgbmFtZSA6LSknLA0KCQknbmV3JyA9PiAnQ3JlYXRl IG5ldyB0aGVtZScsDQoJCSduZXdfZmlsZScgPT4gJ05ldyBmaWxlJywNCgkJJ25ld19jbG9u ZXNraW4nID0+ICdOYW1lIG9mIGNvcHk6JywNCgkJJ25ld19za2luJyA9PiAnVGhlbWUgbmFt ZTonLA0KCQknb3RoZXJfZmlsZXMnID0+ICdPdGhlcnMnLA0KCQkncGhwJyA9PiAnQ29kZScs DQoJCSdwZXJfZ3JvdXAnID0+ICdPbmUgdGhlbWUgcGVyIHByaXZpbGVnZSBsZXZlbCcsDQoJ CSdwZXJfc2l0ZScgPT4gJ09uZSB0aGVtZSBmb3IgZXZlcnlvbmUnLA0KCQkncGVyX3VzZXIn ID0+ICdPbmUgdGhlbWUgcGVyIHVzZXInLA0KCQkncHJlZnNfZGVsZXRlZCcgPT4gJ1ByZWZl cmVuY2VzIGRlbGV0ZWQnLA0KCQkncHJlZnNfaW5zdGFsbGVkJyA9PiAnUHJlZmVyZW5jZXMg aW5zdGFsbGVkJywNCgkJJ3ByZWZzX25vdF9pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBu b3QgaW5zdGFsbGVkLicsDQoJCSdwcmVmc19zb21lJyA9PiAnTm90IGFsbCBwcmVmZXJlbmNl cyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4gJ0l0IGlzIGVpdGhl ciBiZWNhdXNlIHRoaXMgaXMgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUnLmJyLidwbHVn aW4gdG8gb25lIHlvdSBoYWQgYmVmb3JlIG9yIHRoZSBwcmVmZXJlbmNlcycuYnIuJ2hhdmUg YmVjb21lIGNvcnJ1cHQgc29tZWhvdy4nLA0KCQkncHJlZnNfc29tZV9vcHRpb25zJyA9PiAn Q2hvb3NlICcuZ1R4dCgnZGVsZXRlJykuJyB0byByZW1vdmUgdGhlbSBhbGwgb3IgJy5nVHh0 KCdpbnN0YWxsJykuJyB0byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcgYWxsIGV4 aXN0aW5nIHByZWZlcmVuY2VzIHVudG91Y2hlZC4nLA0KCQkncHJlZnNfdGl0bGUnID0+ICdB ZG1pbiB0aGVtZSBwcmVmZXJlbmNlcycsDQoJCSdyZW5hbWVfZmFpbGVkJyA9PiAnUmVuYW1l IGZhaWxlZCcsDQoJCSdyZW5hbWVkJyA9PiAnUmVuYW1lZCB0byB7bmFtZX0nLA0KCQknc2V0 JyA9PiAnU2V0JywNCgkJJ3NldHVwJyA9PiAnUHJlZmVyZW5jZXMnLA0KCQknc2tpbl9nYmwn ID0+ICdUaGVtZScsDQoJCSdza2luX2Nsb25lZCcgPT4gJ1RoZW1lIGV4dGVuZGVkIGFzIHtu YW1lfScsDQoJCSdza2luX2NyZWF0ZWQnID0+ICdUaGVtZSB7bmFtZX0gY3JlYXRlZCcsDQoJ CSdza2luX2RlbGV0ZWQnID0+ICdUaGVtZSB7bmFtZX0gZGVsZXRlZCcsDQoJCSdza2luX2V4 aXN0cycgPT4gJ1RoZW1lIHtuYW1lfSBhbHJlYWR5IGV4aXN0cycsDQoJCSdza2luX2ZpbGVz JyA9PiAnVGhlbWUgZmlsZXMnLA0KCQknc2tpbl9ncm91cHMnID0+ICdHcm91cCB0aGVtZXM6 JywNCgkJJ3NraW5faW1hZ2VzJyA9PiAnVGhlbWUgaW1hZ2VzJywNCgkJJ3NraW5fbGlzdCcg PT4gJ1RoZW1lIGxpc3QnLA0KCQknc2tpbl9ncmlkJyA9PiAnVGhlbWUgZ3JpZCcsDQoJCSdz a2luX25vdF9jcmVhdGVkJyA9PiAnVGhlbWUge25hbWV9IGNvdWxkIG5vdCBiZSBjcmVhdGVk LiBUcnkgbWFudWFsbHkgbWFraW5nIHRoZSBkaXJlY3RvcnknLA0KCQknc2tpbl9ub3RfZm91 bmQnID0+ICdUaGUgdGhlbWUge25hbWV9IGNvdWxkIG5vdCBiZSBmb3VuZCcsDQoJCSdza2lu X3N3aXRjaGVkJyA9PiAnVGhlbWUgc3dpdGNoZWQgdG8ge3NraW59JywNCgkJJ3NraW5fc3lz dGVtJyA9PiAnVGhlbWUgc3lzdGVtOicsDQoJCSdza2lubmVyJyA9PiAnVGhlbWUnLA0KCQkn c3VwcG9ydGVkX2ltcG9ydCcgPT4gJ1N1cHBvcnRlZCBpbXBvcnQgdHlwZXM6IHt0eXBlc30n LA0KCQkndGFiX25hbWUnID0+ICdBZG1pbiB0aGVtZXMnLA0KCQkndGh1bWJzaXplJyA9PiAn VGh1bWIgZGltZW5zaW9uczonLA0KCQkndGltZXMnID0+ICcgeCAnLA0KCQkndW5zdXBwb3J0 ZWRfY29tcHJlc3Npb250eXBlJyA9PiAne2NydXNofSBpcyBub3QgYSBzdXBwb3J0ZWQgY29t cHJlc3Npb24gZm9ybWF0IGluIHRoaXMgaW5zdGFsbGF0aW9uJywNCgkJJ3Vuc3VwcG9ydGVk X2ZpbGV0eXBlJyA9PiAnRmlsZSBpcyBub3Qgb2YgYSBzdXBwb3J0ZWQgdHlwZScsDQoJCSd1 bnN1cHBvcnRlZF9mdWRnZScgPT4gJzogaGl0IFNhdmUgYWdhaW4gdG8gc3RvcmUgYW55d2F5 JywNCgkJJ3VwZGF0ZScgPT4gJ1VwZGF0ZScsDQoJCSd1cGxvYWRfZmFpbGVkJyA9PiAnSW1h Z2UgY291bGQgbm90IGJlIHVwbG9hZGVkJywNCgkJJ3VwbG9hZF9pbWFnZScgPT4gJ1VwbG9h ZCBpbWFnZScsDQoJCSd1cGxvYWRfc3VjY2VzcycgPT4gJ0ltYWdlIHVwbG9hZGVkIHN1Y2Nl c3NmdWxseScsDQoJCSd2ZXJzaW9uJyA9PiAndicsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxh bmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJvcmRlciI7 czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjMiO3M6NDoiaGVscCI7czoyMzg5MzoiPGRpdiBp ZD0ic21kX2hlbHAiPgoKCTxoMSBpZD0idG9wIj5zbWRfYWRtaW5fdGhlbWVzPC9oMT4KCgk8 cD5JbnN0YWxsLCBtYW5hZ2UsIGVkaXQgYW5kIHN3aXRjaCBhZG1pbi1zaWRlIHRoZW1lcyB0 aGVuIHNoYXJlIHRoZW0gd2l0aCB0aGUgY29tbXVuaXR5LjwvcD4KCgk8aDIgaWQ9ImZlYXR1 cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5DcmVhdGUgYW5kIEVkaXQgYWRtaW4t c2lkZSB0aGVtZXM8L2xpPgoJCTxsaT5FbXBsb3kgaW1hZ2VzLCA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiwgSlMsIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPi9QSFAg KGZvciBjaGFuZ2luZyBtYXN0aGVhZCwgaGVhZGVyICZhbXA7IGZvb3RlcikgaW4geW91ciB0 aGVtZTwvbGk+CgkJPGxpPlVzZSBjb25zdGFudHMgaW4geW91ciA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiBmaWxlczwvbGk+CgkJPGxpPkJhc2UgeW91ciB0aGVtZSBvbiBhbiBl eGlzdGluZyB0aGVtZSB0byB0d2VhayBpdCB0byB5b3VyIHRhc3RlPC9saT4KCQk8bGk+RXhw b3J0IGEgdGhlbWUgcGFja2FnZSBmb3IgZGlzdHJpYnV0aW9uIHRvIHRoZSBjb21tdW5pdHkg aW4gZWl0aGVyIC50YXIsIC50Z3osIC5iejIgb3IgLnppcCBmb3JtYXQ8L2xpPgoJCTxsaT5J bXBvcnQgLyBpbnN0YWxsIG90aGVyIHRoZW1lcyBmcm9tIHRoZSA8YSBocmVmPSJodHRwOi8v dGV4dGdhcmRlbi5vcmcvYWRtaW5pc3RyYXRpb24tdGhlbWVzIj5jb21tdW5pdHkgcmVwb3Np dG9yeTwvYT48L2xpPgoJCTxsaT5BZG1pbmlzdHJhdG9yIGNhbiBzZXQgYSBkZWZhdWx0IHRo ZW1lIGZvciBhbGwgdXNlcnMsIG9yIGVuYWJsZSBwZXItdXNlciAvIHBlci1yb2xlIHRoZW1l czwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhy ZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT4uPC9w PgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gy PgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDov L3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwOTYvc21kX2FkbWluX3RoZW1lcyI+dGV4dHBh dHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9z dyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFs bCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIEEgbmV3IHRhYiBsYWJlbGxlZCA8ZW0+RXh0ZW5z aW9ucyAtJmd0OyBBZG1pbiB0aGVtZXM8L2VtPiBpcyBjcmVhdGVkLiA8c3Ryb25nPk9ubHkg cHVibGlzaGVycyB3aWxsIHNlZSB0aGlzIHRhYjwvc3Ryb25nPi48L3A+CgoJPHA+VGhlIHBs dWdpbiBzaG91bGQgYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBwcmVmZXJlbmNlcyBmb3Ig eW91LiBDbGljayAmIzgyMTY7UHJlZmVyZW5jZXMmIzgyMTc7IGZyb20gdGhlIDxlbT5FeHRl bnNpb25zIC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+IHRhYiBvciA8ZW0+T3B0aW9uczwvZW0+ IGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgdGFiIHRvIGFsdGVyLCBkZWxldGUgb3Ig cmVpbnN0YWxsIHRoZW0uPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9y dW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzA5NTIiPmZvcnVtIHRocmVh ZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3Ro ZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRl bGV0ZSB0aGUgcGx1Z2luIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS4gVGhl IHByZWZlcmVuY2VzIHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkLiBQbGVhc2UgYmUg YXdhcmUgdGhhdCByZW1vdmluZyB0aGUgcGx1Z2luIGRvZXMgPHN0cm9uZz5ub3QgcmVtb3Zl IGFueSB0aGVtZXMgeW91IGhhdmUgaW5zdGFsbGVkLCBub3IgZG9lcyBpdCByZW1vdmUgcGVy LXVzZXIgdGhlbWUgcHJlZmVyZW5jZXM8L3N0cm9uZz4uIFBlci11c2VyIHByZWZzIHdpbGwg c2ltcGx5IGJlIGlnbm9yZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGRlbGV0ZWQuPC9wPgoKCTxo MiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD5PbiB0aGUgPGVtPkV4dGVuc2lvbnMgLSZn dDsgQWRtaW4gdGhlbWVzPC9lbT4gdGFiIGlzIGEgbGlzdCBvciBncmlkIGNvbnRhaW5pbmcg aW5zdGFsbGVkIHRoZW1lcy4gT3V0IG9mIHRoZSBib3gsIHRoZXJlIHdpbGwgYmUgdHdvIGF2 YWlsYWJsZTogPGVtPmNsYXNzaWM8L2VtPiBhbmQgPGVtPnJlbW9yYTwvZW0+LiA8c3Ryb25n Pkl0JiM4MjE3O3MgYWR2aXNhYmxlIG5vdCB0byBjaGFuZ2UgdGhlc2UgdGhlbWVzPC9zdHJv bmc+IHNvIHlvdSBjYW4gYWx3YXlzIGdvIGJhY2sgdG8gdGhlbSBpZiBldmVyeXRoaW5nIGdv ZXMgc2lkZXdheXMuIFBsdXMgaXQmIzgyMTc7cyBhIHZlcnkgdXNlZnVsIHN0YXJ0aW5nIHBv aW50IGZyb20gd2hpY2ggdG8gPGEgaHJlZj0iI2Nsb25lIj5iYXNlPC9hPiBhIDxhIGhyZWY9 IiNuZXciPm5ldyB0aGVtZTwvYT4uPC9wPgoKCTxwPkluIHRoZSBsaXN0IGxheW91dCwgdGhl IGNvbHVtbnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaGVt ZTwvc3Bhbj4gOiBUaGUgbmFtZSBvZiB0aGUgdGhlbWUgYW5kIChvcHRpb25hbCkgdGh1bWJu YWlsIGFzc2lnbmVkIHRvIGl0LiBDbGljayB0byA8YSBocmVmPSIjc3dpdGNoIj5hY3RpdmF0 ZTwvYT4gdGhlIHRoZW1lLiBJZiB0aGUgdGhlbWUgaXMgYmFzZWQgb24gYW5vdGhlciB1c2Vy JiM4MjE3O3MgdGhlbWUsIHRoaXMgZGVwZW5kZW5jeSB3aWxsIGJlIHNob3duIGluIHBhcmVu dGhlc2VzIGFmdGVyIHRoZSB0aGVtZSBuYW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPkF1dGhvcjwvc3Bhbj4gOiBZb3UhIExpbmtlZCB0byB5b3VyIHdlYiBzaXRlIGlmIHlv dSBzdXBwbHkgaXQgaW4geW91ciA8YSBocmVmPSIjYWJvdXQiPk1hbmlmZXN0PC9hPjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5WZXJzaW9uPC9zcGFuPiA6IFRoZW1lIHZlcnNp b24gbnVtYmVyIGluIDxjb2RlPm1ham9yLm1pbm9yLnN1YnJldjwvY29kZT4gbm90YXRpb24u IElmIGEgbmV3ZXIgdmVyc2lvbiBvZiBhIHRoZW1lIGlzIGF2YWlsYWJsZSBmcm9tIFRleHRn YXJkZW4sIHRoZSB2ZXJzaW9uIG51bWJlciB3aWxsIGJlIGh5cGVybGlua2VkIHRvIHRoZSB0 aGVtZSBvbiBUZXh0Z2FyZGVuIHNvIHlvdSBtYXkgZG93bmxvYWQvaW5zdGFsbCBpdC4gVGhl IHZlcnNpb25zIGFyZSBjaGVja2VkLCBhdCBtb3N0LCBvbmNlIGV2ZXJ5IDI0IGhvdXJzIHRv IGF2b2lkIGhhbW1lcmluZyB0aGUgc2VydmVyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPkRlc2NyaXB0aW9uPC9zcGFuPiA6IEJyaWVmIG9uZS0gb3IgdHdvLWxpbmVyIGV4cGxh aW5pbmcgeW91ciB0aGVtZS4gSWYgeW91IGhhdmUgb2ZmZXJlZCBhIGhlbHAgPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4gaW4geW91ciBtYW5pZmVzdCwgaXQgd2lsbCBiZSBsaW5r ZWQgaGVyZSBhcyB3ZWxsPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFjdGlvbnM8 L3NwYW4+IDogQWN0aW9ucyB0byBwZXJmb3JtIG9uIGVhY2ggdGhlbWUKCTx1bD4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPltOZXcgdGhlbWVdPC9zcGFuPiA6IDxhIGhyZWY9IiNuZXci PkNyZWF0ZTwvYT4gYSBuZXcgYmxhbmssIGVtcHR5IGRpcmVjdG9yeSByZWFkeSBmb3IgeW91 ciB0aGVtZS4gTm8gc3BhY2VzIC8gb2RkIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhl IG5hbWUgYW5kIGl0IG11c3Qgbm90IHN0YXJ0IHdpdGggYSBudW1iZXI8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+W0VkaXRdPC9zcGFuPiA6IDxhIGhyZWY9IiNlZGl0X3RoZW1l Ij5FZGl0PC9hPiB0aGUgdmFyaW91cyBkZXRhaWxzLCBmaWxlcyBhbmQgY29udGVudCB3aXRo aW4gdGhlIHRoZW1lPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltCYXNlXTwvc3Bh bj4gOiA8YSBocmVmPSIjY2xvbmUiPkV4dGVuZDwvYT4gb25lIG9mIHRoZSBleGlzdGluZyB0 aGVtZXMgdG8gbWFrZSB5b3VyIG93biBjaGFuZ2VzIHVuZGVyIGEgbmV3IG5hbWU8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W0V4cG9ydF08L3NwYW4+IDogPGEgaHJlZj0iI2V4 cG9ydCI+U2F2ZTwvYT4gdGhlIHRoZW1lIHBhY2thZ2UgdG8geW91ciBoYXJkIGRyaXZlIGZv ciBkaXN0cmlidXRpb24vYmFja3VwIGluIHlvdXIgY2hvc2VuIGNvbXByZXNzaW9uIGZvcm1h dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5bRGVsZXRlXTwvc3Bhbj4gOiBDb21w bGV0ZWx5IDxhIGhyZWY9IiNkZWxldGUiPnJlbW92ZTwvYT4gdGhlIHRoZW1lLiBOb3QgYXZh aWxhYmxlIHRvIHRoZSBjb3JlIHRoZW1lcywgZm9yIG9idmlvdXMgcmVhc29ucyEgQWxzbyBu b3QgYXZhaWxhYmxlIGlmIGEgdGhlbWUgaGFzIGJlZW4gdXNlZCBhcyBhIGJhc2lzIGZvciBh bm90aGVyIHRoZW1lIGluIHRoZSBjdXJyZW50IHNpdGU8L2xpPgoJPC91bD48L2xpPgoJPC91 bD4KCgk8cD5UaGUgcm93IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUgaXMgc2hh ZGVkIGFuZCB0aGUgY3VycmVudCBkZWZhdWx0IHRoZW1lIHRoYXQgaXMgaW4gZWZmZWN0IGlz IGhpZ2hsaWdodGVkLiBUaGUgZ3JpZCB2aWV3IGhhcyBwYXJ0cyBvZiB0aGUgYWJvdmUgaW5m b3JtYXRpb24sIGxhaWQgb3V0IHNsaWdodGx5IGRpZmZlcmVudGx5LjwvcD4KCgk8aDIgaWQ9 InN3aXRjaCI+U3dpdGNoaW5nIHRoZW1lczwvaDI+CgoJPHA+QXMgdGhlIGFkbWluaXN0cmF0 b3IsIHlvdSBjYW4gcGxheSBHb2Qgb3ZlciBldmVyeW9uZSBlbHNlJiM4MjE3O3MgdGhlbWVz LiBZb3UgYXJlIGZyZWUgdG8gaW5zdGFsbCBhcyBtYW55IGFzIHlvdSB3aXNoIGFuZCBzd2l0 Y2ggYmV0d2VlbiB0aGVtIHdpdGhvdXQgYWZmZWN0aW5nIGFueSBvdGhlciBsb2dpbnMuIE5v Ym9keSBlbHNlIHdpbGwgZXZlbiBrbm93IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgcGx1Z2lu LjwvcD4KCgk8cD5JZiwgaG93ZXZlciwgeW91IHZpc2l0IHRoZSA8YSBocmVmPSIjc2V0dXAi PlByZWZlcmVuY2VzPC9hPiBwYWdlIHlvdSBjYW4gY29uZmlndXJlIHRoZSB0aGVtZXMgdGhh dCBvdGhlcnMgdXNlLiBUaGVyZSBhcmUgdGhyZWUgbWVjaGFuaXNtcyB0byBjaG9vc2UgZnJv bTo8L3A+CgoJPHVsPgoJCTxsaT5Gb3JjZSBvbmUgdGhlbWUgZm9yIGFsbCB1c2VycyAoZXhj ZXB0IHlvdXJzZWxmKTwvbGk+CgkJPGxpPkZvcmNlIG9uZSB0aGVtZSBmb3IgZWFjaCB1c2Vy IHByaXZpbGVnZSBsZXZlbCAoZXhjZXB0IHlvdXJzZWxmKTwvbGk+CgkJPGxpPkFsbG93IGFs bCB1c2VycyAoZXhjZXB0IHlvdXJzZWxmKSB0byBwaWNrIHRoZWlyIGZhdm91cml0ZSB0aGVt ZSBmcm9tIGEgc2hvcnRsaXN0IHlvdSBkZWZpbmU8L2xpPgoJPC91bD4KCgk8cD5BdCBhbGwg dGltZXMsIHlvdSBjYW4gY2hvb3NlIGFueSB0aGVtZSB5b3UgcGxlYXNlIGZvciB5b3VyIG93 biB1c2UuIFRoaXMgYWxsb3dzIHRyaWFsbGluZywgdHdlYWtpbmcgYW5kIHRlc3Rpbmcgb2Yg dGhlbWVzIGJlZm9yZSB1bmxlYXNoaW5nIHRoZW0gb24geW91ciB1c2VyIGJhc2UuPC9wPgoK CTxoMiBpZD0ic2V0dXAiPlRoZW1lIHByZWZlcmVuY2VzPC9oMj4KCgk8dWw+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5DYXNlLXNlbnNpdGl2ZSB0aGVtZSBsaXN0PC9zcGFuPiA6IFdo ZW4gc2V0IHRvIDxjb2RlPlllczwvY29kZT4sIHVwcGVyLWNhc2UgdGhlbWUgbmFtZXMgdGFr ZSBwcmVjZWRlbmNlIG92ZXIgbG93ZXIgY2FzZSB0aGVtZSBuYW1lcyBhbmQgd2lsbCBiZSBs aXN0ZWQgZmlyc3QuIEZvciBleGFtcGxlLCAzIHRoZW1lIGNhbGxlZCAmIzgyMTY7QW5nZWxp YyYjODIxNzssICYjODIxNjtiYXJiYXJpYyYjODIxNzsgYW5kICYjODIxNjtDb2hlc2l2ZSYj ODIxNzsgd2lsbCBiZSBvcmRlcmVkOiA8Y29kZT5BbmdlbGljLCBDb2hlc2l2ZSwgYmFyYmFy aWM8L2NvZGU+LiBTZXQgdG8gPGNvZGU+Tm88L2NvZGU+IHRvIG1peCB1cHBlciBhbmQgbG93 ZXItY2FzZSB0aGVtZXMgdG9nZXRoZXIgKG9yZGVyIGlzIHRoZW4gPGNvZGU+QW5nZWxpYywg YmFyYmFyaWMsIENvaGVzaXZlPC9jb2RlPiApLiBUaGUgJiM4MjE2O2NsYXNzaWMmIzgyMTc7 IHRoZW1lIGlzIDxlbT5hbHdheXM8L2VtPiBsaXN0ZWQgZmlyc3QuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPkV4cG9ydCBjb21wcmVzc2lvbiB0eXBlPC9zcGFuPiA6IERlcGVu ZGluZyBvbiB5b3VyIHZlcnNpb24gb2YgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4g YW5kIHdoaWNoIG1vZHVsZXMgaGF2ZSBiZWVuIGNvbXBpbGVkIGludG8gaXQsIHlvdSB3aWxs IHNlZSBhIGxpc3Qgb2YgY29tcHJlc3Npb24gZm9ybWF0cyBoZXJlLiBDaG9vc2Ugb25lIHRo YXQgc3VpdHMgeW91IGFzIHRoZSBkZWZhdWx0IGluIHdoaWNoIHRvIGV4cG9ydCB5b3VyIHRo ZW1lIHBhY2thZ2VzLiBZb3UgbWF5IGNob29zZSBmcm9tIDxlbT5UYXI8L2VtPiwgPGVtPkda aXA8L2VtPiAoYWN0dWFsbHkgdGFyK2d6aXApLCA8ZW0+QnppcDI8L2VtPiAodGFyK2J6aXAp LCBvciA8ZW0+WmlwPC9lbT4gKHRoZSBkZWZhdWx0KS48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+TGF5b3V0IG1ldGhvZDwvc3Bhbj4gOiBDaG9vc2UgZnJvbSBhIExpc3QgVmll dyAodXNlZnVsIGlmIHlvdSBwcmVmZXIgdG8gaGlkZSBvciB1c2Ugc21hbGwgdGh1bWJzKSBv ciBhIEdyaWQgVmlldyBvZiBpbnN0YWxsZWQgdGhlbWVzLiBUaGlzIHNldHRpbmcgYXBwbGll cyB0byBib3RoIGFkbWluIGFuZCB1c2VyIHRoZW1lIHNlbGVjdGlvbiB0YWJzLiBEZWZhdWx0 OiBHcmlkIFZpZXc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGh1bWIgc2l6ZTwv c3Bhbj4gOiBTZXQgdGhlIHRodW1ibmFpbCBkaW1lbnNpb25zIGluIHRoZSB0aGVtZSBsaXN0 LiBTZXQgZWl0aGVyIGRpbWVuc2lvbiB0byAwIHRvIHR1cm4gb2ZmIHRodW1ibmFpbCBkaXNw bGF5LiBEZWZhdWx0OiAyNjAgJiMyMTU7IDE1MHB4PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPkRlZmF1bHQgdGhlbWU8L3NwYW4+IDogU2V0IHRoZSB0aGVtZSBmb3IgYWxsIG90 aGVyIHVzZXJzLiBJZiB1c2luZyAmIzgyMTY7T25lIHRoZW1lIGZvciBldmVyeW9uZSYjODIx NzsgdGhlIHRoZW1lIGNob3NlbiBoZXJlIGlzIGZvcmNlZCB1cG9uIGFsbCB1c2Vycy4gSWYg dXNpbmcgYW55IG9mIHRoZSBvdGhlciBtZWNoYW5pc21zLCB0aGlzIHRoZW1lIGlzIGEgZmFs bGJhY2sgc2hvdWxkIHNvbWV0aGluZyBnbyBwZWFyLXNoYXBlZC48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+VGhlbWUgc3lzdGVtPC9zcGFuPiA6IEFzIGRldGFpbGVkIGluIDxh IGhyZWY9IiNzd2l0Y2giPlN3aXRjaGluZyB0aGVtZXM8L2E+LCB5b3UgbWF5IGNob29zZSB0 aGUgd2F5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpbnRlcmZhY2UgaXMg cHJlc2VudGVkIHRvIG90aGVyIHVzZXJzOgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+T25lIHRoZW1lIGZvciBldmVyeW9uZTwvc3Bhbj4gOiB1c2VzIHRoZSBEZWZhdWx0IHRo ZW1lIGZvciBhbGwgdXNlcnM7IHRoZXkgaGF2ZSBubyBjaG9pY2UgaW4gdGhlIG1hdHRlcjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHByaXZpbGVnZSBs ZXZlbDwvc3Bhbj4gOiBhbGxvd3MgeW91IHRvIGFzc2lnbiBvbmUgb3IgbW9yZSBwcml2aWxl Z2UgbGV2ZWxzIHRvIGEgdGhlbWUuIENob29zZSBhIHRoZW1lIGZyb20gdGhlIGxlZnQtaGFu ZCBsaXN0IGFuZCB0aGVuIHNoaWZ0L2N0cmwtY2xpY2sgdGhlIHByaXZpbGVnZSBsZXZlbHMg dG8gYXNzaWduIHRoZW0uIEZsaWNrIGJldHdlZW4gdGhlbWVzIGluIHRoZSBsZWZ0IGNvbHVt biB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2V0IGZvciB2YXJpb3VzIHVzZXIgbGV2ZWxzLCBv ciBob3ZlciBvdmVyIGEgcHJpdmlsZWdlIGxldmVsIHRvIHNlZSBhIHRvb2x0aXAuIE9ubHkg b25lIGxldmVsIGNhbiBiZSBhc3NpZ25lZCB0byBhIHRoZW1lIHNvIGlmIHlvdSBjbGljayBh IGxldmVsIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZCB0byBhbm90aGVyIHRoZW1l LCBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdHMgb3JpZ2luYWwgYXNzaWdubWVudC4gTm90 ZSB5b3UgbXVzdCBTYXZlIHRoZSBjaGFuZ2VzIGZvciB0aGVtIHRvIHRha2UgZWZmZWN0PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9uZSB0aGVtZSBwZXIgdXNlcjwvc3Bhbj4g OiBkZWZpbmUgYSBzaG9ydGxpc3QgZnJvbSB0aGUgYXZhaWxhYmxlIGluc3RhbGxlZCB0aGVt ZXMgdG8gb2ZmZXIgdG8gYWxsIHVzZXJzLiBBIG5ldyB0YWIgd2lsbCBhcHBlYXIgdG8gb3Ro ZXIgdXNlcnMgdW5kZXIgPGVtPkFkbWluPC9lbT4gdGhhdCBpcyBlc3NlbnRpYWxseSBhIGN1 dC1kb3duIHZlcnNpb24gb2YgdGhlIDxlbT5BZG1pbiB0aGVtZXM8L2VtPiB0YWIuIFVzZXJz IGNhbiBzd2l0Y2ggYmV0d2VlbiBhbnkgb25lIG9mIHRoZSB0aGVtZXMgeW91IGhhdmUgcGVy bWl0dGVkLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPlJlbWVtYmVyIHRvIGNsaWNr IFNhdmUgdG8gYXBwbHkgdGhlIGNoYW5nZXMuIENsaWNraW5nIGFueSBvdGhlciB0YWIgd2ls bCB1bmRvIGFueSBtb2RpZmljYXRpb25zIHlvdSBtYXkgaGF2ZSBtYWRlLjwvcD4KCgk8aDIg aWQ9ImJyb3dzZSI+QnJvd3NlIHRoZW1lczwvaDI+CgoJPHA+Q2xpY2sgdGhpcyBidXR0b24g dG8gYmUgdGFrZW4gdG8gdGhlIGNlbnRyYWwgYWRtaW4gdGhlbWUgcmVwb3NpdG9yeSB3aGVy ZSB5b3UgbWF5IGJyb3dzZSB0aGVtZXMgYW5kIGRvd25sb2FkIHRoZW0gcmVhZHkgZm9yIGlu c3RhbGxhdGlvbi48L3A+CgoJPGgyIGlkPSJpbXBvcnQiPkluc3RhbGwgYSB0aGVtZTwvaDI+ CgoJPHA+TG9jYXRlIGEgdGhlbWUgcGFja2FnZSBvbiB5b3VyIGhhcmQgZHJpdmUgb3IgcGFz dGUgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byBhIHBhY2thZ2UgaW4gdGhl IGJveCBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLiBIaXQgPHN0cm9uZz5VcGxvYWQ8L3N0cm9u Zz4gYW5kIGl0IHdpbGwgYmUgaW5zdGFsbGVkLiBJZiBpdCBhbHJlYWR5IGV4aXN0cyBpdCB3 aWxsIGJlIG92ZXJ3cml0dGVuLiBOb3RlIHRoYXQgeW91IG1heSByZWNlaXZlIGEgd2Fybmlu ZyBpZiB0aGUgdGhlbWUgaXMgcGFja2FnZWQgdXNpbmcgYSBjb21wcmVzc2lvbiBhbGdvcml0 aG0gdGhhdCBpcyBub3QgYnVpbHQgaW50byB5b3VyIHZlcnNpb24gb2YgPHNwYW4gY2xhc3M9 ImNhcHMiPlBIUDwvc3Bhbj4uIEEgbGlzdCBvZiBzdXBwb3J0ZWQgY29tcHJlc3Npb24gdHlw ZXMgaXMgZ2l2ZW4gYmVsb3cgdGhlIHVwbG9hZCBib3guPC9wPgoKCTxoMiBpZD0ibmV3Ij5D cmVhdGUgYSBuZXcgKGVtcHR5KSB0aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0cm9uZz5DcmVh dGUgbmV3IHRoZW1lPC9zdHJvbmc+IGFuZCBhIGJveCB3aWxsIHNsaWRlIGRvd24gYWxsb3dp bmcgeW91IHRvIGdpdmUgeW91ciB0aGVtZSBhIG5hbWUuICBOb3RlIHRoYXQgdGhlIGVkaXQg Ym94IGF1dG9tYXRpY2FsbHkgdGFrZXMgZm9jdXMsIHNvIHlvdSBjYW4gdHlwZSBzdHJhaWdo dCBhd2F5LjwvcD4KCgk8cD5ObyBzcGFjZXMgb3Igb2RkIGNoYXJhY3RlcnMgYXJlIHBlcm1p dHRlZCwgYmVjYXVzZSB0aGUgbmFtZSB5b3UgZW50ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGRp cmVjdG9yeSB0aGF0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgPGVtPnRoZW1lPC9lbT4gZm9s ZGVyIGFuZCB0aGVtIG5hbWUgb2YgeW91ciB0aGVtZSYjODIxNztzIGNsYXNzLiBJZiB5b3Ug ZG8gbWFuYWdlIHRvIHVzZSBvZGQgY2hhcmFjdGVycywgdGhlIG5hbWUgd2lsbCBiZSAmIzgy MjA7ZHVtYmVkIGRvd24mIzgyMjE7IGZvciB5b3UuIE9uY2UgdGhlIG5hbWUgaXMgc2V0LCB0 aGF0IGlzIGl0OyB5b3UgY2Fubm90IGNoYW5nZSBpdCBmcm9tIHdpdGhpbiB0aGUgaW50ZXJm YWNlLiBUaGUgb25seSB3YXkgdG8gcmVuYW1lIGl0IGlzIHZpYSB5b3VyIDxzcGFuIGNsYXNz PSJjYXBzIj5GVFA8L3NwYW4+IGNsaWVudCBhbmQgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5QSFA8L3NwYW4+IGZpbGUgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLjwvcD4K Cgk8cD5JbiBvcmRlciB0byBhdm9pZCBuYW1lIGNsYXNoZXMgd2l0aCBvdGhlciBwZW9wbGUm IzgyMTc7cyB0aGVtZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsIHRoZW1lcyB5b3Ug ZGVzaWduIGJlZ2luIHdpdGggYSB1bmlxdWUgMy1sZXR0ZXIgcHJlZml4IG9mIHlvdXIgb3du IGNob29zaW5nLCBwbHVzIGFuIHVuZGVyc2NvcmUgJiM4MjEyOyBleGFjdGx5IGxpa2UgcGx1 Z2lucy4gVGh1cywgc21kX0JsdWVNZWFuaWUgbWlnaHQgd2VsbCBiZSB0aGUgbmFtZSBvZiBh IHRoZW1lLjwvcD4KCgk8cD5XaGVuIHlvdSBoYXZlIG5hbWVkIHlvdXIgdGhlbWUsIGNsaWNr IDxzdHJvbmc+R288L3N0cm9uZz4gdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGluIHdoaWNoIGl0 IGNhbiByZXNpZGUuPC9wPgoKCTxoMiBpZD0iY2xvbmUiPkV4dGVuZCBhbiBleGlzdGluZyB0 aGVtZTwvaDI+CgoJPHA+Q2xpY2sgPHN0cm9uZz5CYXNlPC9zdHJvbmc+IHRvIGNyZWF0ZSBh IG5ldyB0aGVtZSBiYXNlZCBvbiBhbm90aGVyLiBBIGJveCB3aWxsIHNsaWRlIGRvd24gKHRo ZSBjdXJzb3IgZm9jdXNlcyBhdXRvbWF0aWNhbGx5IGluIHRoZSBib3ggZm9yIHlvdSkgc28g eW91IG1heSBlbnRlciB0aGUgbmFtZSBvZiB5b3VyIGNvcHkuIE9ic2VydmUgdGhlIDxhIGhy ZWY9IiNuZXciPm5hbWluZyBjb252ZW50aW9uPC9hPiwgdGhlbiBjbGljayA8c3Ryb25nPkdv PC9zdHJvbmc+IHRvIGNyZWF0ZSB0aGUgbmV3IHRoZW1lLjwvcD4KCgk8cD48c3BhbiBjbGFz cz0icmVxdWlyZWQiPlBsZWFzZSByZW1lbWJlciwgeW91ciB0aGVtZSB3aWxsIGJlIGRlcGVu ZGVudCBvbiB0aGUgY2hvc2VuIHRoZW1lIGFuZCA8c3Ryb25nPmJvdGg8L3N0cm9uZz4gbXVz dCBiZSBwcmVzZW50IG9uIGEgdXNlciYjODIxNztzIHN5c3RlbSBmb3IgdGhlIHRoZW1lIHRv IHdvcms8L3NwYW4+LiBJdCBpcyB3b3J0aCBlbnN1cmluZyB0aGF0IHVzZXJzIG9mIHlvdXIg dGhlbWUgYXJlIG1hZGUgYXdhcmUgb2YgdGhpcyBkZXBlbmRlbmN5IHRvIGF2b2lkIHVubmVj ZXNzYXJ5IGZydXN0cmF0aW9uOyBwZXJoYXBzIGFkZCBhIGxpbmsgdG8gdGhlIHRoZW1lJiM4 MjE3O3MgYmFzZSwgbWVudGlvbiB0aGUgZGVwZW5kZW5jeSBpbiB0aGUgSGVscCBsaW5rIGFu ZC9vciBpbiB0aGUgdGhlbWUmIzgyMTc7cyBhcnRpY2xlIG9uIFRleHRnYXJkZW4uIFlvdSB3 aWxsIG5vdCBiZSBhYmxlIHRvIGRlbGV0ZSBhbnkgdGhlbWUgZnJvbSB0aGUgbGlzdCB0aGF0 IGhhcyBzdWNoIGEgZGVwZW5kZW5jeSwgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gc2lkZSB3aWxs IHN0b3Agd29ya2luZy48L3A+CgoJPGgyIGlkPSJleHBvcnQiPkV4cG9ydCBhIHRoZW1lPC9o Mj4KCgk8cD5JZiB5b3Ugd2lzaCB0byBiYWNrIHVwIGEgdGhlbWUgb3Igc2hhcmUgaXQgd2l0 aCBvdGhlcnMsIGNsaWNrIDxzdHJvbmc+RXhwb3J0PC9zdHJvbmc+LiBBIGJveCB3aWxsIHNs aWRlIGRvd24gb2ZmZXJpbmcgeW91IGEgY2hvaWNlIG9mIGNvbXByZXNzaW9uIGZvcm1hdHM7 IHRoZSBkZWZhdWx0IGlzIHRoZSBmb3JtYXQgeW91IGNob3NlIGZyb20gdGhlIDxhIGhyZWY9 IiNzZXR1cCI+UHJlZmVyZW5jZXM8L2E+IHBhZ2UuIENsaWNrIDxlbT5bR29dPC9lbT4gdG8g ZXhwb3J0IHRoZSB0aGVtZSBhbmQgc2F2ZSBpdCB0byB5b3VyIGNvbXB1dGVyLiBBbGwgcmVs YXRlZCBmaWxlcyBpbiB0aGUgdGhlbWUgd2lsbCBiZSBwYWNrYWdlZCB0b2dldGhlciBpbnRv IGEgc2luZ2xlIGRvd25sb2FkIGZpbGUgZm9yIGNvbnZlbmllbmNlLjwvcD4KCgk8aDIgaWQ9 ImRlbGV0ZSI+RGVsZXRlIGEgdGhlbWU8L2gyPgoKCTxwPkhpdCB0aGlzIChhbmQgY29uZmly bSB5b3UgYXJlIHN1cmUpIHRvIHJlbW92ZSB0aGUgZW50aXJlIHRoZW1lIGZvbGRlciBhbmQg Y29udGVudHMgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+ VGhpcyBpcyBub3QgdW5kb2FibGUsIHNvIGJlIGNhcmVmdWw8L3NwYW4+LjwvcD4KCgk8aDIg aWQ9ImVkaXRfdGhlbWUiPkVkaXQgYSB0aGVtZTwvaDI+CgoJPHA+QSB0aGVtZSBpcyBhIGNv bGxlY3Rpb24gb2YgZmlsZXMuIFRoZSBmaWxlcyBhbGwgcmVzaWRlIGluIHRoZWlyIG93biBz ZWxmLWNvbnRhaW5lZCBkaXJlY3RvcnkgdW5kZXIgPGNvZGU+dGV4dHBhdHRlcm4vdGhlbWU8 L2NvZGU+LiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGlzIHRoZSBuYW1lIG9mIHlvdXIg dGhlbWUsIGhlbmNlIHRoZSByZWFzb24gaXQgY2Fubm90IGNvbnRhaW4gYW55IG9ic2N1cmUg Y2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGludmFsaWQgaW4gdGhlIGZpbGVzeXN0ZW0gb3Ig PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gdmFyaWFibGVzLjwvcD4KCgk8cD5XaGVu IHlvdSBjbGljayAmIzgyMTY7RWRpdCYjODIxNzsgeW91IHdpbGwgYmUgdGFrZW4gdG8gYSBz Y3JlZW4gdGhhdCBhbGxvd3MgeW91IHRvIG1ha2UgY2hhbmdlcyB0byB0aGUgdGhlbWUuIFRo ZSBFZGl0IHNjcmVlbiBpcyBicm9rZW4gaW50byB0aHJlZSB2ZXJ0aWNhbCBwYXJ0cywgYXMg Zm9sbG93czo8L3A+CgoJPGgzIGlkPSJlZGl0X2ltZyI+SW1hZ2UgaGFuZGxpbmc8L2gzPgoK CTxwPkVhY2ggdGhlbWUgY2FuIGNvbnRhaW4gYW4gb3B0aW9uYWwgdGh1bWJuYWlsLiBUaGlz IGlzIGFuIGltYWdlIG9mIDI2MCYjMjE1OzE1MHB4IGluIHNpemUsIGNhbGxlZCA8Y29kZT5z Y3JlZW5zaG90LnBuZzwvY29kZT4gKG9yIDxjb2RlPi5qcGc8L2NvZGU+LCA8Y29kZT4uZ2lm PC9jb2RlPiwgZXRjKSBpbiB5b3VyIHRoZW1lIGRpcmVjdG9yeS4gTm90ZSBpdCB3aWxsIGJl IHNxdWFzaGVkIC8gc3RyZXRjaGVkIHRvIGZpdCB5b3VyIHRodW1ibmFpbCBkaW1lbnNpb25z IHNldCBpbiB0aGUgcGx1Z2luIHByZWZzLjwvcD4KCgk8cD5PdGhlciBpbWFnZXMgZm9yIHVz ZSBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBydWxlcyBjYW4gYWxzbyBiZSBh ZGRlZCB0byBhIHRoZW1lLiBCcm93c2UgZm9yIGFuIGltYWdlIGFuZCBzZWxlY3QgaXQsIHRo ZW4gY2xpY2sgPHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4gdG8gYWRkIGl0IHRvIHRoZSB0aGVt ZS4gWW91IGNhbiBjdXJyZW50bHkgb25seSB1cGxvYWQgb25lIGltYWdlIGF0IGEgdGltZSwg dGhvdWdoIHlvdSBjYW4gZGVsZXRlIG9uZSBvciBtb3JlIGF0IG9uY2UgYnkgU2hpZnQvQ3Ry bCBjbGlja2luZyB0aGUgb25lcyB5b3Ugd2lzaCB0byByZW1vdmUgYW5kIGhpdHRpbmcgdGhl ICYjODIxNjt4JiM4MjE3OyBidXR0b24uIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+V2Fybmlu ZzogZmlsZXMgd2lsbCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5LCB3aXRob3V0IGNvbmZpcm1h dGlvbi48L3NwYW4+PC9wPgoKCTxwPlRoZSBiZXN0IHdheSB0byByZWZlciB0byBpbWFnZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgaW4gc3R5bGVzaGVldHMgaXMgd2l0aCBh IHJlbGF0aXZlIHBhdGg6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJi bG9jayI+Lm15U3R5bGUgewogICBiYWNrZ3JvdW5kOiB1cmwobXktaW1hZ2UuZ2lmKTsKfQo8 L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZGl0X2NvbnRlbnQiPkNvbnRlbnQ8L2gzPgoKCTxw PlRoZSBjZW50cmFsIHBhbmUgaXMgd2hlcmUgeW91IGVkaXQgdGhlIGNvbnRlbnRzIG9mIHRo ZSBmaWxlcyBpbiB5b3VyIHRoZW1lLiBUaGUgc21hbGwgZWRpdCBib3ggYXQgdGhlIHRvcCBp cyB0aGUgZmlsZW5hbWUgYW5kIHRoZSBsYXJnZSB0ZXh0IGFyZWEgaXMgaXRzIGNvbnRlbnQu IENsaWNrIDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiB0byBjb21taXQgY2hhbmdlcy4gWW91IG1h eSBmcmVlbHkgcmVuYW1lIGFueSBmaWxlIHlvdSBhcmUgZWRpdGluZy48L3A+CgoJPHAgY2xh c3M9InJlcXVpcmVkIj5JbXBvcnRhbnQ6IGlmIHlvdSBzZWxlY3QgYSBmaWxlLCBlZGl0IGl0 LCByZW5hbWUgaXQsIGFuZCBjbGljayA8c3Ryb25nPlNhdmU8L3N0cm9uZz4geW91IHdpbGwg b3ZlcndyaXRlIHdoYXRldmVyIHdhcyBpbiB0aGUgcHJldmlvdXMgZmlsZSAmIzgyMTI7IGV2 ZW4gaWYgeW91IGVtcHR5IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dGFyZWEgaW4gYW4gZWZm b3J0IHRvIG1ha2UgYSAmIzgyMjA7bmV3JiM4MjIxOyBvbmUuIElmIHlvdSB3aXNoIHRvIGNy ZWF0ZSBhIG5ldyBmaWxlLCBpdCBpcyBzYWZlciB0byBjbGljayB0aGUgPHN0cm9uZz5OZXcg ZmlsZTwvc3Ryb25nPiBidXR0b24gaW4gdGhlIHJpZ2h0IGhhbmQgY29sdW1uIHRvIGVuc3Vy ZSB5b3UgYXJlIG5vdCBlZGl0aW5nIGFuIGV4aXN0aW5nIGZpbGUgYnkgbWlzdGFrZS48L3A+ CgoJPHA+SXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBmaWxlIHBlcm1pc3Npb25zIHZh cnkgZnJvbSBob3N0IHRvIGhvc3QuIElmIHlvdSB0cnkgYW5kIHNhdmUgYSB0aGVtZSBmaWxl IGFuZCByZWNlaXZlIGEgeXVra3kgd2FybmluZyBtZXNzYWdlIGFib3V0IG5vdCBiZWluZyBh YmxlIHRvIHdyaXRlIHRoZSBmaWxlLCB0cnkgaW5jcmVhc2luZyB0aGUgcGVybWlzc2lvbnMg b24gdGhlIHRoZW1lIGRpcmVjdG9yeSBhbmQgYWxsIGZpbGVzIGJlbmVhdGggaXQuPC9wPgoK CTxwPlRoZSB0aGVtZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgaW4gPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gd2l0aCA8Y29kZT42NDQ8L2NvZGU+IHBlcm1pc3Npb25zIHdoaWNo IHNob3VsZCBiZSBmaW5lIGZvciBhIHN0YW5kYXJkIGhvc3QuIFNvbWUgc2hhcmVkIGhvc3Rp bmcgY29tcGFuaWVzICYjODIxMjsgYW5kIHRoZXNlIGFyZSB1c3VhbGx5IHRoZSBvbmVzIHRo YXQgdGVsbCB5b3UgdG8gc2V0IHlvdXIgPGNvZGU+ZmlsZXM8L2NvZGU+IGFuZCA8Y29kZT5p bWFnZXM8L2NvZGU+IGRpcmVjdG9yaWVzIHRvIDc3NyBpbiBvcmRlciB0byBtYWtlIHRoZW0g d3JpdGFibGUgYnkgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gJiM4MjEyOyBydW4g QXBhY2hlL1BIUCBpbiBhIGRpZmZlcmVudCB3YXkgd2hpY2ggbWlnaHQgcmVxdWlyZSBoaWdo ZXIgcGVybWlzc2lvbnMgaW4gb3JkZXIgdG8gd3JpdGUgdG8gdGhlIHRoZW1lIGRpcmVjdG9y eS4gVGhpcyBpcyB1bmZvcnR1bmF0ZWx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBwbHVn aW4gc28geW91IHdpbGwgaGF2ZSB0byBleHBlcmltZW50IGlmIGl0IGNhdXNlcyB5b3UgcHJv YmxlbXMuPC9wPgoKCTxoMz5GaWxlIGhhbmRsaW5nPC9oMz4KCgk8cD5UaGlzIGNvbHVtbiBi ZWdpbnMgd2l0aCBhIHNlbGVjdCBsaXN0IG9mIGFsbCBpbnN0YWxsZWQgdGhlbWVzOyB0aGUg Y3VycmVudCB0aGVtZSBzZWxlY3RlZC4gQ2hhbmdpbmcgdGhlIGl0ZW0gaGVyZSB3aWxsIGlt bWVkaWF0ZWx5IGFsbG93IHlvdSB0byBlZGl0IGFub3RoZXIgdGhlbWUuIFRoaXMgaXMgdmVy eSB1c2VmdWwgaWYgeW91IGFyZSBjb3B5aW5nIGFuZCBwYXN0aW5nIGZpbGVzIGZyb20gb25l IHRoZW1lIHRvIGFub3RoZXIgYW5kIHNhdmVzIHlvdSBoYXZpbmcgdG8gZ28gYmFjayB0byB0 aGUgdGhlbWUgbGlzdCBmaXJzdC48L3A+CgoJPHA+QmVuZWF0aCB0aGF0IGFyZSB0d28gYnV0 dG9uczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TmV3IGZpbGU8L3Nw YW4+IDogQ3JlYXRlIGEgbmV3LCBlbXB0eSBmaWxlIGluIHlvdXIgdGhlbWUgZGlyZWN0b3J5 LiBOb3RoaW5nIGlzIGFjdHVhbGx5IGNyZWF0ZWQgdW50aWwgeW91IGhpdCA8c3Ryb25nPlNh dmU8L3N0cm9uZz4gYnV0IHVzaW5nIHRoaXMgYnV0dG9uIGVuc3VyZXMgeW91IGJlZ2luIHdp dGggYSBjbGVhbiBzbGF0ZSBhbmQgZG9uJiM4MjE3O3QgYWNjaWRlbnRhbGx5IG92ZXJ3cml0 ZSB0aGUgcHJldmlvdXMgZmlsZSB5b3Ugd2VyZSBlZGl0aW5nPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPlRoZW1lIGxpc3Q8L3NwYW4+IDogQSBzaG9ydGN1dCBiYWNrIHRvIHRo ZSBtYWluIHRoZW1lIGxpc3QgKGVxdWl2YWxlbnQgdG8gY2xpY2tpbmcgdGhlIDxlbT5BZG1p biB0aGVtZXM8L2VtPiB0YWIpPC9saT4KCTwvdWw+CgoJPHA+QmVsb3cgdGhvc2UgYnV0dG9u cyBhcmUgdXAgdG8gZm91ciBzZWN0aW9ucyBjb250YWluaW5nIGFsbCB0aGUgKG5vbi1pbWFn ZSkgZmlsZXMgdGhhdCBtYWtlIHVwIHlvdXIgdGhlbWUuIENsaWNrIGEgZmlsZW5hbWUgdG8g bG9hZCBpdCBpbnRvIHRoZSBjZW50cmFsIHRleHQgYXJlYSBmb3IgZWRpdGluZy48L3A+CgoJ PGg0IGlkPSJlZGl0X2NzcyI+U3R5bGVzaGVldHM8L2g0PgoKCTxwIGNsYXNzPSJyZXF1aXJl ZCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9ImNh cHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uY3NzPC9jb2RlPjwvcD4KCgk8cD5UaGUg bWVhdCBhbmQgcG90YXRvZXMgb2YgeW91ciB0aGVtZS4gQWRkIGFzIG1hbnkgc2hlZXRzIGFz IHlvdSBsaWtlIGFuZCBsb2FkIHRoZW0gZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IGZpbGUocykuPC9wPgoKCTxoNCBpZD0iZWRpdF9jc3MiPlN0eWxlcGxhdGVz PC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPkZpbGVzIGNhbiBiZSBhbnkgdmFsaWQgZmls ZW5hbWUgYnV0IDxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPiBlbmQgaW4gPGNvZGU+ LnNzYzwvY29kZT48L3A+CgoJPHA+QSBzcGVjaWFsIHZlcnNpb24gb2YgYSBzdHlsZXNoZWV0 IHRoYXQgYWxsb3dzIHlvdSB0byBkZWZpbmUgY29uc3RhbnRzIHRocm91Z2hvdXQgeW91ciBz aGVldC4gV3JpdGUgeW91ciBzdHlsZXNoZWV0IGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFz IHlvdSB3b3VsZCBub3JtYWxseSBidXQgd2hlcmUgeW91IGZpbmQgeW91cnNlbGYsIGZvciBl eGFtcGxlLCB1c2luZyB0aGUgc2FtZSBjb2xvciB2YWx1ZSByZXBlYXRlZGx5IG9yIHRoZSBz YW1lIHJ1bGVzIGJsb2NrLCB5b3UgY2FuIHNhdmUgeW91cnNlbGYgdHlwaW5nIGJ5IHVzaW5n IGNvbnN0YW50czo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2Nr Ij5AYnJhbmRpbmc6ICMxMjM0NTY7CiNoZWFkZXIgewogIGNvbG9yOiBAYnJhbmRpbmc7Cn0K aDIgewogIGNvbG9yOiBAYnJhbmRpbmc7Cn0KPC9jb2RlPjwvcHJlPgoKCTxwPllvdSBjYW4g YWxzbyBzcGVjaWZ5IHdob2xlIHJ1bGUgYmxvY2tzIGxpa2UgdGhpcyAoPGVtPk5vdGUgdGhl IGNvbG9uIGFmdGVyIHRoZSBibG9jayBuYW1lPC9lbT4pIDo8L3A+Cgo8cHJlIGNsYXNzPSJi bG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5AbXlfYmxvY2s6IHsKICBtYXJnaW46MCAyMHB4 OwogIGJvcmRlcjozcHggc29saWQgIzk5OTsKICBmb250LXNpemU6MTIwJTsKfQojaGVhZGVy IHsKICBjb2xvcjogQGJyYW5kaW5nOwogIHBvc2l0aW9uOnJlbGF0aXZlOwogIEBteV9ibG9j azsKfQpoMiB7CiAgQG15X2Jsb2NrOwp9CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3UgcHV0 IGFsbCB5b3VyIGNvbnN0YW50cyBhdCB0aGUgdG9wIG9mIHRoZSA8Y29kZT4uc3NjPC9jb2Rl PiBmaWxlIHRoZXkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGdlbmVyYXRlZCBjc3MgZmls ZS48L3A+CgoJPHA+V2hlbiB5b3Ugc2F2ZSBhIDxjb2RlPi5zc2M8L2NvZGU+IGZpbGUsIGEg Y29ycmVzcG9uZGluZy1uYW1lZCA8Y29kZT4uY3NzPC9jb2RlPiBmaWxlIHdpbGwgYWxzbyBi ZSBjcmVhdGVkLiBUaGUgdHdvIHdpbGwgYmUga2VwdCBpbiBzeW5jIGFzIGZhciBhcyBwcmFj dGljYWJsZSAoZXZlbiBpZiB5b3UgcmVuYW1lIHRoZSBvcmlnaW5hbCBmaWxlKS4gV2hlbiBp dCBjb21lcyB0byBkZWxldGlvbiB0aG91Z2gsIHRoZXkgYXJlIHRyZWF0ZWQgc2VwYXJhdGVs eS4gVGhpcyBhbGxvd3MgeW91IHRvIGVpdGhlciBrZWVwIHRoZSA8Y29kZT4uc3NjPC9jb2Rl PiBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gYXJjaGl2ZSBvciByZW1vdmUgaXQgcHJpb3Ig dG8gZXhwb3J0LjwvcD4KCgk8aDQgaWQ9ImVkaXRfanMiPkphdmFzY3JpcHQ8L2g0PgoKCTxw IGNsYXNzPSJyZXF1aXJlZCI+RmlsZXMgY2FuIGJlIGFueSB2YWxpZCBmaWxlbmFtZSBidXQg PHNwYW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8Y29kZT4uanM8L2NvZGU+ PC9wPgoKCTxwPkFueSB0cmlja2VyeSB5b3UgbWF5IHdpc2ggdG8gZW1wbG95IGluIHlvdXIg dGhlbWUgY2FuIGJlIHdyaXR0ZW4gaW4gdGhlc2UgZmlsZXMuIFJlbWVtYmVyIHRoYXQgalF1 ZXJ5IGlzIGxvYWRlZCBieSBkZWZhdWx0IG9uIHRoZSBhZG1pbiBzaWRlIHNvIHlvdSBjYW4g cGxheSB3aXRoIHRoYXQuPC9wPgoKCTxoNCBpZD0iZWRpdF9waHAiPjxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+PC9oND4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPk9uZSBmaWxlIDxz dHJvbmc+bXVzdDwvc3Ryb25nPiBiZSBuYW1lZCBleGFjdGx5IHRoZSBzYW1lIGFzIHlvdXIg dGhlbWUsIGkuZS4gPGNvZGU+c21kX0JsdWVNZWFuaWUucGhwPC9jb2RlPi4gQW55IG90aGVy IGZpbGVzIG11c3QgZW5kIGluIDxjb2RlPi5waHA8L2NvZGU+PC9wPgoKCTxwPkNvbnN1bHQg dGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0 bGU9Q3JlYXRpbmdfYW5fQWRtaW5fU2lkZV9UaGVtZSI+QWRtaW4gU2lkZSB0aGVtZSBndWlk ZTwvYT4gb24gVGV4dGJvb2sgZm9yIHRoZSBydWxlcyBvbiBtYWtpbmcgdGhlbWVzLiBOb3Rl IHRoYXQgY29ycnVwdCB0aGVtZXMgYXJlIGRldGVjdGVkIHRvIHRoZSBiZXN0IG9mIHRoZSBw bHVnaW4mIzgyMTc7cyBhYmlsaXR5IGFuZCB5b3UgbWF5IG5vdCBleHBvcnQsIGJhc2Ugb3Ig c3dpdGNoIHRvIGFueSB0aGVtZSB0aGF0IGlzIGJyb2tlbi48L3A+CgoJPGg0IGlkPSJlZGl0 X290aGVyIj5PdGhlcnM8L2g0PgoKCTxwPkFueSBmaWxlcyB0aGF0IGFyZSBub3Qgb2YgdGhl IGFib3ZlIHRocmVlIHR5cGVzIChhbmQgYXJlIG5vdCBpbWFnZXMpIGFwcGVhciBoZXJlLiBZ b3Ugd2lsbCBwcm9iYWJseSBuZXZlciBzZWUgdGhpcyBzZWN0aW9uLiBJZiB5b3UgZG8gdHJ5 IHRvIGNyZWF0ZSBhIGZpbGUgdGhhdCBpcyBub3Qgb2YgdGhlIGFib3ZlIHRocmVlIHR5cGVz LCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuIFlvdSBtdXN0IGhpdCA8ZW0+U2F2ZTwvZW0+ IGFnYWluIHRvIGNvbmZpcm0geW91IHJlYWxseSB3aXNoIHRvIGNyZWF0ZSB0aGUgZmlsZS48 L3A+CgoJPGgzIGlkPSJhYm91dCI+TWFuaWZlc3Q8L2gzPgoKCTxwPkluIHlvdXIgbWFpbiA8 c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBmaWxlIGlzIGEgZnVuY3Rpb24gY2FsbGVk IDxjb2RlPm1hbmlmZXN0KCk8L2NvZGU+IHdoaWNoIGNvbnRhaW5zIGluZm8gYWJvdXQgeW91 IGFuZCB5b3VyIHRoZW1lLiBFZGl0IHRoZSB2YWx1ZXMgaGVyZSB0byBzdGFtcCB5b3VyIG1h cmsgb24gdGhlIHRoZW1lLiBOb3RlIHRoYXQgaWYgeW91ciBkZXNjcmlwdGlvbiBjb250YWlu cyBhcG9zdHJvcGhlcyB0aGV5IG11c3QgYmUgPGVtPmVzY2FwZWQ8L2VtPiBieSBwcmVjZWRp bmcgdGhlbSB3aXRoIGEgc2luZ2xlIGJhY2tzbGFzaCA8Y29kZT5cPC9jb2RlPi4gZS5nLjwv cD4KCjxwcmU+PGNvZGU+JiMzOTtkZXNjcmlwdGlvbiYjMzk7ID0mZ3Q7ICYjMzk7RG9uXCYj Mzk7dCBmZWFyIHRoZSByZWFwZXIhJiMzOTssCjwvY29kZT48L3ByZT4KCgk8aDIgaWQ9InBl cnVzZXIiPlBlci11c2VyIHRoZW1lIHNlbGVjdGlvbjwvaDI+CgoJPHA+SWYgYW4gYWRtaW5p c3RyYXRvciBjaG9vc2VzIHRvIGFsbG93IHBlci11c2VyIHRoZW1lcywgYSBuZXcgdGFiIGFw cGVhcnMgdW5kZXIgdGhlIEFkbWluIHRhYiBvZiBhbGwgdXNlcnMgKGV4Y2VwdCBhZG1pbmlz dHJhdG9ycykuIFRoaXMgc2ltcGx5IGRpc3BsYXlzIGFsbCBhdmFpbGFibGUgdGhlbWVzICYj ODIxMjsgb25lcyB0aGF0IHRoZSBhZG1pbmlzdHJhdG9yIGhhcyBleHBsaWNpdGx5IGFsbG93 ZWQuPC9wPgoKCTxwPkNsaWNraW5nIGEgdGhlbWUgbmFtZSBvciB0aHVtYm5haWwgd2lsbCBp bW1lZGlhdGVseSBzd2l0Y2ggdG8gdGhhdCB0aGVtZSB1bnRpbCB0aGUgdXNlciBjaG9vc2Vz IGFub3RoZXIgb3IgdGhlIGFkbWluaXN0cmF0b3IgY2hhbmdlcyB0aGVtZSBzeXN0ZW0uPC9w PgoKCTxoMiBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTIg SnVuIDA5IHwgMC4xIHwgSW5pdGlhbCBwdWJsaWMgYmV0YTwvbGk+CgkJPGxpPjAzIFNlcCAw OSB8IDAuMTEgfCBJbXByb3ZlZCBUZXh0Z2FyZGVuIHRoZW1lIGZlZWQgYW5kIGxpbmtzIDsg aW1wcm92ZWQgZmlsZSBzdXBwb3J0IChib3RoIHRoYW5rcyB0aGVib21ic2l0ZSkgOyBtYWRl IGdsb2JhbCB0aGVtZSBtb3JlIG9idmlvdXMgOyBhbHRlcmVkIHByZWZzIHRhYiBhIGJpdCA7 IGFkZGVkIDxjb2RlPi5zc2M8L2NvZGU+IHN1cHBvcnQgOyBpZ25vcmVkIC5zdm4gc3ViZGly cyAoYWxsIHRoYW5rcyBwaWVtYW4pIDsgaW1wcm92ZWQgd2FybmluZyBtZXNzYWdlcyA7IG1p c2MgZml4ZXMgYW5kIGhvdXNla2VlcGluZzwvbGk+CgkJPGxpPjAyIE5vdiAwOSB8IDAuMTIg fCBSZWR1Y2VkIHRoZW1lIGZlZWQgY2x1dHRlciBpbiB0aGUgcHJlZnMgdGFibGU8L2xpPgoJ CTxsaT4wNCBOb3YgMDkgfCAwLjEzIHwgUmVtb3ZlZCBlcmVnX3JlcGxhY2UgdG8gY29uZm9y bSB3aXRoIFBIUDUuMysgKHRoYW5rcyB0aGVib21ic2l0ZSkgOyBjaGFuZ2VkICYjODIxNjtn bG9iYWwmIzgyMTc7IHRvICYjODIxNjtkZWZhdWx0JiM4MjE3OyA7IGZpeGVkIHJvZ3VlIHVu dHJhbnNsYXRlZCBzdHJpbmc8L2xpPgoJCTxsaT4wOSBOb3YgMDkgfCAwLjE0IHwgTW92ZWQg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGluIGxpbmUgd2l0aCBUZXh0Z2FyZGVu IGxheW91dCBhbHRlcmF0aW9ucyAodGhhbmtzIGZvciB0aGUgaGVhZHN1cCB0aGVib21ic2l0 ZSkgOyBtYWRlIGZlZWRzIG1vcmUgcm9idXN0IGluIHRoZSBldmVudCBUZXh0Z2FyZGVuIGlz IGRvd24gLyB1bmRlciBtYWludGVuYW5jZSAodGhhbmtzIG1sYXJpbm8pPC9saT4KCQk8bGk+ MDkgRmViIDEwIHwgMC4yIHwgTmF0aXZlIHN1cHBvcnQgZm9yIHppcCBpbXBvcnRpbmcgYW5k IGV4cG9ydGluZyAoYWxtb3N0KSBpcnJlc3BlY3RpdmUgb2YgeW91ciA8c3BhbiBjbGFzcz0i Y2FwcyI+UEhQPC9zcGFuPiBlbnZpcm9ubWVudCA7IHppcCBpcyBub3cgdGhlIGRlZmF1bHQg c3lzdGVtIDsgYmV0dGVyIG5vdGlmaWNhdGlvbiBvZiBzdXBwb3J0ZWQgY29tcHJlc3Npb24g dHlwZXMgYW5kIG1vcmUgcm9idXN0IHJlamVjdGlvbiBpZiBzb21ldGhpbmcgaXMgbWlzc2lu ZzwvbGk+CgkJPGxpPjEwIEZlYiAxMCB8IDAuMjEgfCBGaXhlZCBiemlwMiB3YXJuaW5nICh0 aGFua3MgdGhlYm9tYnNpdGUpIDsgZml4ZWQgcmVjdXJzaXZlIG1rZGlyIHByb2JsZW0gd2l0 aCBiemlwMiBmaWxlcyAodGhhbmtzIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IG1h bnVhbCBjb21tZW50cykgOyBmaXhlZCByb2d1ZSB0ZW1wIGZpbGUgbGVmdCBiZWhpbmQgd2l0 aCB6aXAgaW1wb3J0PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJjcmVkaXRzIj5DcmVkaXRzPC9o Mj4KCgk8cD5UaGlzIHBsdWdpbiB3b3VsZCBub3QgaGF2ZSBleGlzdGVkIHdpdGhvdXQgdGhl IGRlZGljYXRpb24sIGlkZWFzIGFuZCBnZW5pdXMgb2YgdGhlIFRleHRwYXR0ZXJuIGRldmVs b3BtZW50IHRlYW0sIGVzcGVjaWFsbHkgUm9iZXJ0IFdldHpsbWF5ciBmb3IgdGhlIHRoZW1l IHN1cHBvcnQuIFBsdXMgb2YgY291cnNlIHRoZSBhcm15IG9mIGJldGEgdGVzdGVycywgaWRl YXMgaGFtc3RlcnMgYW5kIHRpcmVsZXNzIHRoZW1lIGFkdm9jYXRlcywgbW9zdCBub3RhYmx5 IFN0dWFydCBCdXRjaGVyLCBEYWxlIENoYXBtYW4sIERhdmUgRGVTYW5kcm8sIGFuZCBNaWtl IERlbm5pcy48L3A+CgoJPHA+SSBhbSBhbHNvIGluZGVidGVkIHRvIHRoZSBsaWJyYXJpZXMg aG9zdGVkIGF0IDxhIGhyZWY9Imh0dHA6Ly9waHBjbGFzc2VzLm9yZy8iPjxzcGFuIGNsYXNz PSJjYXBzIj5QSFA8L3NwYW4+IENsYXNzZXM8L2E+IHRoYXQgZW5hYmxlZCBuYXRpdmUgY29t cHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gb2YgdmFyaW91cyB0eXBlcy4gVGhlIGhhcmQg d29yayBvZiBEZXZpbiBEb3VjZXR0ZSBhbmQgQWxleGFuZHJlIFRlZGVzY2hpIHJlYWxseSBh ZGRlZCB0aGUgaWNpbmcgb24gdGhlIGNha2UgZm9yIHRoaXMgcGx1Z2luLjwvcD4KCgk8cD5L dWRvcyBhbmQgdGhhbmtzIHRvIHlvdSBhbGwuPC9wPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lO IFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAg eyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xk OyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBi YWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250 LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29s b3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFk ZGluZzoxMHB4OyB9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdl b3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNz bWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzox MHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsg fQojc21kX2hlbHAgaDMgeyBjb2xvcjogIzI3NTY4NTsgZm9udDogYm9sZCAxMnB4IEFyaWFs LCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3Rl eHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQoj c21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRl ci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBl cmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzMz ZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90 dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2Vu dGVyOyBwYWRkaW5nLWJvdHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7 Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCB1bCB7 IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5yZXF1aXJlZCB7Y29sb3I6 cmVkO30KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRf aGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQg UExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjkyOTNhOGViMDM1MmM1ZTgy NTdlMGZhNjFkZTc0NmQ1Ijt9