# Name: smd_admin_themes v0.2 # 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 ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjIiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjM1OiJBZG1pbi1zaWRlIHRoZW1lIG1hbmFnZXIgYW5kIGVkaXRvciI7czo0OiJjb2Rl IjtzOjExMTYyNzoiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAk c21kX2F0X2V2ZW50LCAkc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9hZG1fZXZlbnQsICRzbWRf YXRfcHJpdnMsICRzbWRfY29yZV90aGVtZXMsICRzbWRfYXRfcHJlZnMsICRwcmVmcywgJHNt ZF9hdF9mZWVkdXJsLCAkc21kX2F0X3RoZW1lX3JlcG87DQoNCgkkc21kX2F0X2V2ZW50ID0g J3NtZF9hdCc7DQoJJHNtZF9hdF9mdWxsZXYgPSAnc21kX2FkbWluX3RoZW1lcyc7DQoJJHNt ZF9hdF9hZG1fZXZlbnQgPSAnc21kX2FkbWF0JzsNCgkkc21kX2F0X3ByaXZzID0gJzEnOw0K CSRzbWRfYXRfZmVlZHVybCA9ICdodHRwOi8vdGV4dGdhcmRlbi5vcmcvYWRtaW4tdGhlbWVz LWZlZWQnOw0KCSRzbWRfYXRfdGhlbWVfcmVwbyA9ICdodHRwOi8vdGV4dGdhcmRlbi5vcmcv YWRtaW5pc3RyYXRpb24tdGhlbWVzJzsNCg0KCS8vIFRodW1ibmFpbCBkaW1lbnNpb25zDQoJ JHNtZF9jb3JlX3RoZW1lcyA9IGFycmF5KCdjbGFzc2ljJywncmVtb3JhJyk7DQoNCglhZGRf cHJpdnMoJHNtZF9hdF9ldmVudCwgJHNtZF9hdF9wcml2cyk7DQoJYWRkX3ByaXZzKCdwbHVn aW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldiwgJHNtZF9hdF9wcml2cyk7DQoJcmVnaXN0ZXJf dGFiKCJleHRlbnNpb25zIiwgJHNtZF9hdF9ldmVudCwgc21kX2F0X2dUeHQoJ3RhYl9uYW1l JykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfb3B0aW9ucycsICdwbHVnaW5fcHJl ZnMuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF93ZWxj b21lJywgJ3BsdWdpbl9saWZlY3ljbGUuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJf Y2FsbGJhY2soJ3NtZF9hdCcsICRzbWRfYXRfZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfYXRfcGVyJywgJ2FkbWluX3NpZGUnLCAndGhlbWVfbmFtZScpOw0KCXJlZ2lzdGVy X2NhbGxiYWNrKCdzbWRfYXRfbGluaycsICdwcmVmc191aScsICd0aGVtZV9uYW1lJyk7DQoJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF91cGxvYWRfZm9ybScsICRzbWRfYXRfZXZlbnQu J191aScsICd1cGxvYWRfZm9ybScpOw0KDQoJaWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3N5 c3RlbSddKSAmJiAkcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA9PSAyKSB7DQoJCWFkZF9wcml2 cygkc21kX2F0X2FkbV9ldmVudCwgJzIsMyw0LDUsNicpOw0KCQlyZWdpc3Rlcl90YWIoImFk bWluIiwgJHNtZF9hdF9hZG1fZXZlbnQsIHNtZF9hdF9nVHh0KCdza2lubmVyJykpOw0KCQly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FkbWF0JywgJHNtZF9hdF9hZG1fZXZlbnQpOw0KCX0N Cg0KCS8vIERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFu ZCB0aGVpciBkZWZhdWx0cywNCgkvLyAybmQgaXMgYSBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0 aGF0IG1heSBuZWVkIHJlbW92aW5nIGluIGZ1dHVyZSAoZGVmYXVsdHMgYWxsIHNldCBlbXB0 eSkNCgkkc21kX2F0X3ByZWZzID0gYXJyYXkoDQoJCWFycmF5KA0KCQkJJ3NtZF9hdF9jYXNl X3NvcnQnID0+ICcxJywNCgkJCSdzbWRfYXRfY3J1c2gnID0+ICd6aXAnLA0KCQkJJ3NtZF9h dF90dycgPT4gJzI2MCcsDQoJCQknc21kX2F0X3RoJyA9PiAnMTUwJywNCgkJCSdzbWRfYXRf bGF5b3V0JyA9PiAnMScsDQoJCQknc21kX2F0X3N5c3RlbScgPT4gJzAnLA0KCQkJJ3NtZF9h dF9nbG9iYWxfc2tpbicgPT4gJycsDQoJCQknc21kX2F0X2dyb3VwX2xpc3QnID0+ICcnLA0K CQkJJ3NtZF9hdF91c2VyX2xpc3QnID0+ICcnLA0KCQkpLA0KCQlhcnJheSgNCgkJCSdzbWRf YXRfbm90X3VzZWRfYW55X21vcmUnID0+ICcnLA0KCQkpDQoJKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXQoJGV2ZW50LCAkc3RlcCkgew0K CWlmKCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF9hdF9jbG9u ZScsDQoJCQknc21kX2F0X2RlbGV0ZScsDQoJCQknc21kX2F0X2RlbGV0ZV9pbWFnZScsDQoJ CQknc21kX2F0X2VkaXQnLA0KCQkJJ3NtZF9hdF9leHBvcnQnLA0KCQkJJ3NtZF9hdF9pbXBv cnQnLA0KCQkJJ3NtZF9hdF9uZXdmaWxlJywNCgkJCSdzbWRfYXRfcHJlZnNfaW5zdGFsbCcs DQoJCQknc21kX2F0X3ByZWZzX3JlbW92ZScsDQoJCQknc21kX2F0X3ByZWZzX3VwZGF0ZScs DQoJCQknc21kX2F0X3JlbmFtZScsDQoJCQknc21kX2F0X3NhdmUnLA0KCQkJJ3NtZF9hdF9z ZXR1cCcsDQoJCQknc21kX2F0X3N3aXRjaCcsDQoJCQknc21kX2F0X3VwbG9hZF9pbWFnZScs DQoJCQknc21kX2F0X2NoYW5nZV9wYWdlYnknLA0KCQkpKSkgew0KCQlzbWRfYXRfbGlzdCgn Jyk7DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9h dF93ZWxjb21lKCRldmVudCwgJHN0ZXApIHsNCgkkbXNnID0gJyc7DQoJc3dpdGNoICgkc3Rl cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJc21kX2F0X3ByZWZzX2luc3RhbGwoMCk7 DQoJCQlicmVhazsNCgkJY2FzZSAnZGVsZXRlZCc6DQoJCQlzbWRfYXRfcHJlZnNfcmVtb3Zl KDApOw0KCQkJYnJlYWs7DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2xpbmsoKSB7DQoJZ2xvYmFsICRzbWRfYXRfZXZlbnQ7DQoJcmV0dXJu IGhyZWYoc21kX2F0X2dUeHQoJ21hbmFnZV9sYmwnKSwgJz9ldmVudD0nLiRzbWRfYXRfZXZl bnQpOw0KfQ0KDQovLyBBIHN0dWIgdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYSAkbWVz c2FnZQ0KZnVuY3Rpb24gc21kX2F0X2Rpc3BsYXkoKSB7DQoJCXNtZF9hdF9saXN0KCcnKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfbGlz dCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50LCAkcHJlZnMsICRzbWRf YXRfcHJlZnMsICR0aGVtZSwgJHNtZF9jb3JlX3RoZW1lcywgJHNtZF9hdF9mdWxsZXYsICRz bWRfYXRfZmVlZHVybCwgJHNtZF9hdF90aGVtZV9yZXBvOw0KDQoJJGF0X3ByZWZzID0gc21k X2F0X2dldF9wcmVmcygpOw0KDQoJZXh0cmFjdChncHNhKGFycmF5KCdzdGVwJywgJ3BhZ2Un LCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJywgJ3NraW4nKSkpOw0KCSRtZXNzYWdlID0gKCRt ZXNzYWdlKSA/ICRtZXNzYWdlIDogZ3BzKCdtZXNzYWdlJyk7DQoJJGxheW91dCA9IChpc3Nl dCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5 b3V0J10gOiAxOw0KCSR0dyA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRh dF9wcmVmc1snc21kX2F0X3R3J10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXSkg KyAxMDsNCgkkdGggPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJl ZnNbJ3NtZF9hdF90aCddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ10pICsgODA7 DQoJJGhlbHBMaW5rID0gIj9ldmVudD1wbHVnaW4mc3RlcD1wbHVnaW5faGVscCZuYW1lPSRz bWRfYXRfZnVsbGV2I3VzYWdlIjsNCg0KCSRwYWdlYnkgPSAoZ3BzKCdxdHknKSkgPyBncHMo J3F0eScpIDogKChjcygnc21kX2F0X3BhZ2VieScpKSA/IGNzKCdzbWRfYXRfcGFnZWJ5Jykg OiAxNSk7DQoJJG1heF9maWxlX3NpemUgPSAxNTAgKiAxMDI0OyAvLyBhIGJpdCBhcmJpdHJh cnkhDQoNCgkkY3Vycl9za2luID0gKHNtZF9hdF9leGlzdHMoJHRoZW1lLT5uYW1lKSkgPyAk dGhlbWUtPm5hbWUgOiAnY2xhc3NpYyc7DQoJJHNraW5fbGlzdCA9IHNtZF9hdF9yZWFkX3Nr aW5zKCk7DQoJJGNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoKTsNCgkkdW5jcnVz aGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCdpbXBvcnQnKTsNCgkkYmFzZXMgPSBhcnJh eSgpOw0KDQoJLy8gR2V0IGEgbGlzdCBvZiBhbmNlc3RvciB0aGVtZXMgKGkuZS4gZGVwZW5k ZW5jaWVzKQ0KCWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJHNraW5hKSB7DQoJCSRtYW5pZmVz dCA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbmEpOw0KCQlpZiAoJG1hbmlmZXN0KSB7DQoJ CQlpZiAoJG1hbmlmZXN0WydiYXNlZF9vbiddKSB7DQoJCQkJJGJhc2VzW10gPSAkbWFuaWZl c3RbJ2Jhc2VkX29uJ107DQoJCQl9DQoJCX0NCgl9DQoJJGJhc2VzID0gYXJyYXlfdW5pcXVl KCRiYXNlcyk7DQoNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdtYW5hZ2VfbGJsJyksJG1lc3Nh Z2UpOw0KDQoJLy8gSGFuZGxlIHBhZ2luZw0KCSR0b3RhbCA9IGNvdW50KCRza2luX2xpc3Qp Ow0KCSRsaW1pdCA9IG1heChAJHBhZ2VieSwgMTUpOw0KCWxpc3QoJHBhZ2UsICRvZmZzZXQs ICRudW1QYWdlcykgPSBwYWdlcigkdG90YWwsICRsaW1pdCwgJHBhZ2UpOw0KCSRza2luX2xp c3QgPSBhcnJheV9zbGljZSgkc2tpbl9saXN0LCAkb2Zmc2V0LCAkbGltaXQpOw0KDQoJJHFz ID0gYXJyYXkoDQoJCSJldmVudCIgPT4gJHNtZF9hdF9ldmVudCwNCgkJInBhZ2UiID0+ICRw YWdlLA0KCSk7DQoNCgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny aXB0Ij4NCmZ1bmN0aW9uIHNtZF9nZXRjcnVzaChza2luKSB7DQoJc2tpbkhhbmRsZSA9ICJj cnVzaF8iK3NraW47DQoJalF1ZXJ5KCcuc21kX3BvcHVwJykuZWFjaChmdW5jdGlvbigpIHsN CgkJYm94ID0galF1ZXJ5KHRoaXMpOw0KCQlpZiAoYm94LmF0dHIoImlkIikgPT0gc2tpbkhh bmRsZSkgew0KCQkJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAibm9uZSIpIHsNCgkJCQli b3guc2xpZGVEb3duKCdmYXN0Jyk7DQoJCQl9IGVsc2Ugew0KCQkJCWJveC5zbGlkZVVwKCdm YXN0Jyk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQl9 DQoJfSk7DQoJalF1ZXJ5KCcjJytza2luSGFuZGxlKycgYScpLmNsaWNrKGZ1bmN0aW9uKCkg ew0KCQlqUXVlcnkodGhpcykuYXR0cigiaHJlZiIsICI/ZXZlbnQ9eyRzbWRfYXRfZXZlbnR9 JnNraW49Iitza2luKyImc3RlcD1zbWRfYXRfZXhwb3J0JmNydXNoPSIralF1ZXJ5KCcjJytz a2luSGFuZGxlKycgaW5wdXRbdHlwZT1cJ3JhZGlvXCddOmNoZWNrZWQnKS52YWwoKSsiJnBh Z2U9Iit7JHBhZ2V9KTsNCgl9KTsNCglyZXR1cm4gZmFsc2U7DQp9DQoNCmZ1bmN0aW9uIHNt ZF9nZXR2YWwoc2tpbiwgc3RlcCkgew0KCXNraW5IYW5kbGUgPSAicG9wXyIrc2tpbjsNCglq UXVlcnkoJy5zbWRfcG9wdXAnKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlib3ggPSBqUXVlcnko dGhpcyk7DQoJCWlmIChib3guYXR0cigiaWQiKSA9PSBza2luSGFuZGxlKSB7DQoJCQlpZiAo Ym94LmNzcygiZGlzcGxheSIpID09ICJub25lIikgew0KCQkJCWJveC5zbGlkZURvd24oJ2Zh c3QnKTsNCgkJCQlqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmZvY3VzKCk7DQoJ CQl9IGVsc2Ugew0KCQkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJCQl9DQoJCX0gZWxzZSB7 DQoJCQlib3guc2xpZGVVcCgnZmFzdCcpOw0KCQl9DQoJfSk7DQoJalF1ZXJ5KCcjJytza2lu SGFuZGxlKycgYScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkodGhpcykuYXR0cigi aHJlZiIsICI/ZXZlbnQ9eyRzbWRfYXRfZXZlbnR9JnNraW49IisoKHNraW49PSduZXcnKT8g JycgOiBza2luKSsiJnN0ZXA9IitzdGVwKyImbmV3X3NraW49IitqUXVlcnkoJyMnK3NraW5I YW5kbGUrJyBpbnB1dCcpLnZhbCgpKyImcGFnZT0iK3skcGFnZX0pOw0KCX0pOw0KDQoJalF1 ZXJ5KCcjJytza2luSGFuZGxlKycgaW5wdXQnKS5rZXl1cChmdW5jdGlvbiAoKSB7DQoJCXRo aXMudmFsdWUgPSB0aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05X1x4N2YtXHhmZl0v ZywnJyk7DQoJCXdoaWxlICh0aGlzLnZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy52YWx1ZS5z dWJzdHJpbmcoMCwxKS5tYXRjaCgvWzAtOV0vKSkgew0KCQkJdGhpcy52YWx1ZSA9IHRoaXMu dmFsdWUuc3Vic3RyaW5nKDEpOw0KCQl9DQoJfSk7DQoNCglyZXR1cm4gZmFsc2U7DQp9DQo8 L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQouc21kX2hpZGRlbiB7DQoJZGlz cGxheTpub25lOw0KCW1hcmdpbjo1cHg7DQp9DQojc21kX2NvbnRyb2wgew0KCW1hcmdpbjow IGF1dG87DQp9DQojc21kX2NvbnRyb2wgdGQgLnB1Ymxpc2ggew0KCW1hcmdpbi1sZWZ0OjUw cHg7DQp9DQojc21kX2NvbnRyb2wgLnVwbG9hZC1mb3JtIHsNCglwYWRkaW5nOjA7DQp9DQou c21kX2dyaWQgew0KCXdpZHRoOjk2MHB4Ow0KCW1hcmdpbjowIGF1dG87DQp9DQouc21kX2Nl bGwgew0KCWZsb2F0OmxlZnQ7DQoJcGFkZGluZzoxMHB4Ow0KCW1hcmdpbjoxMHB4Ow0KCWJv cmRlcjoxcHggcmlkZ2UgI2NjYzsNCgl3aWR0aDp7JHR3fXB4Ow0KCWhlaWdodDp7JHRofXB4 Ow0KfQ0KLnNtZF9jZWxsOmhvdmVyIHsNCgliYWNrZ3JvdW5kOiNkZGQ7DQp9DQouc21kX2Ns ZWFyIHsNCgljbGVhcjpib3RoOw0KfQ0KLnNtZF9hdXRoLA0KLnNtZF9hY3Rpb25zIHsNCgl0 ZXh0LWFsaWduOmNlbnRlcjsNCgltYXJnaW46NXB4IDA7DQp9DQouc21kX3NtYWxscHJpbnQg ew0KCWZvbnQtc2l6ZTo3NSU7DQoJdGV4dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luLXRvcDot MTJweDsNCn0NCjwvc3R5bGU+DQpFT0pTOw0KDQoJLy8gTGlzdCB0aGUgYXZhaWxhYmxlIHNr aW5zDQoJZWNobyBzdGFydFRhYmxlKCdzbWRfY29udHJvbCcsJycsJycsNSk7DQoJZWNobyB0 cigNCgkJdGRhKHVwbG9hZF9mb3JtKHNtZF9hdF9nVHh0KCdpbnN0YWxsX3NraW4nKSwgJycs ICdzbWRfYXRfaW1wb3J0JywgJHNtZF9hdF9ldmVudCwgJycsICRtYXhfZmlsZV9zaXplKS5i ci4nPGRpdiBjbGFzcz0ic21kX3NtYWxscHJpbnQiPicuc21kX2F0X2dUeHQoJ3N1cHBvcnRl ZF9pbXBvcnQnLCBhcnJheSgne3R5cGVzfScgPT4gam9pbignLCAnLCAkdW5jcnVzaGVycykp KS4nPC9kaXY+JywgJyBjb2xzcGFuPSIyIicpDQoJCS50ZGEoZm9ybShmSW5wdXQoJ3N1Ym1p dCcsICdzdWJtaXQnLCBzbWRfYXRfZ1R4dCgnc2V0dXAnKSwgJ3B1Ymxpc2gnKS5zSW5wdXQo J3NtZF9hdF9zZXR1cCcpLmVJbnB1dCgkc21kX2F0X2V2ZW50KSksJyBjb2xzcGFuPSI2IiBz dHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykNCgkpOw0KCWVjaG8gZW5kVGFibGUoKTsN CgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9Imxvbmdmb3JtIiBhY3Rpb249Iicu am9pbl9xcygkcXMpLiciPic7DQoJJG5ld2J0biA9ICcgJy4nPGEgY2xhc3M9Im5hdmxpbmsi IGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfY2xvbmUnLmEu J3NraW49IiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldHZhbChcJ25ld1wnLCBcJ3NtZF9hdF9j bG9uZVwnKTsiPicuc21kX2F0X2dUeHQoJ25ldycpLic8L2E+Jw0KCQkuICc8ZGl2IGlkPSJw b3BfbmV3IiBjbGFzcz0ic21kX3BvcHVwIHNtZF9oaWRkZW4iPjxzcGFuPicuc21kX2F0X2dU eHQoJ25ld19za2luJykuJzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic21kX3Rl eHRfbmFtZSIgdmFsdWU9IiIgLz4gPGEgaHJlZj0iIyI+Wycuc21kX2F0X2dUeHQoJ2NvbmZp cm0nKS4nXTwvYT48L2Rpdj4nOw0KCSRyZXBvYnRuID0gJyAnLic8YSBjbGFzcz0ibmF2bGlu ayIgaHJlZj0iJy4kc21kX2F0X3RoZW1lX3JlcG8uJyI+Jy5zbWRfYXRfZ1R4dCgnZmluZF90 aGVtZScpLic8L2E+JzsNCgkkaGRyb3cgPSBoZWQoc21kX2F0X2dUeHQoJ2xpc3RfdGl0bGUn KS4gJyAnLiBzbWRfYXRfZ1R4dCgnaGVscF9saW5rJywgYXJyYXkoJ3tsaW5rfScgPT4gJGhl bHBMaW5rKSksIDMpOw0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyBzdGFydFRhYmxl KCdsaXN0JywnJywnJyw1KTsNCgkJZWNobyB0cigNCgkJCXRkYSgkaGRyb3cuJHJlcG9idG4u JG5ld2J0biwgJyBjb2xzcGFuPSI3IicpDQoJCSk7DQoJCWVjaG8gdHIoDQoJCQlhc3NIZWFk KA0KCQkJCXNtZF9hdF9nVHh0KCdza2luX2dibCcpLA0KCQkJCSdhdXRob3InLA0KCQkJCWdU eHQoJ3ZlcnNpb24nKSwNCgkJCQknZGVzY3JpcHRpb24nLA0KCQkJCXNtZF9hdF9nVHh0KCdh Y3Rpb25zJykNCgkJCQkpDQoJCSk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGRpdiBjbGFzcz0i c21kX2dyaWQiPjxkaXYgY2xhc3M9InNtZF9uZXdyb3ciPicuJGhkcm93LiRyZXBvYnRuLiRu ZXdidG4uJzwvZGl2Pic7DQoJfQ0KCWlmKCBpc19jYWxsYWJsZSgnZnNvY2tvcGVuJykgKQ0K CQkkdHJhbnNwb3J0ID0gJ2Zzb2NrJzsNCgllbHNlaWYoIGlzX2NhbGxhYmxlKCdjdXJsX2lu aXQnKSApIHsNCgkJJHRyYW5zcG9ydCA9ICdjdXJsJzsNCgl9IGVsc2Ugew0KCQkkdHJhbnNw b3J0ID0gJyc7DQoJfQ0KDQoJJGZlZWQgPSAnJzsNCglzd2l0Y2ggKCR0cmFuc3BvcnQpIHsN CgkJY2FzZSAnY3VybCc6DQoJCQkkYyA9IGN1cmxfaW5pdCgpOw0KCQkJY3VybF9zZXRvcHQo JGMsIENVUkxPUFRfVVJMLCAkc21kX2F0X2ZlZWR1cmwpOw0KCQkJY3VybF9zZXRvcHQoJGMs IENVUkxPUFRfUkVGRVJFUiwgaHUpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfUkVU VVJOVFJBTlNGRVIsIHRydWUpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVkVSQk9T RSwgZmFsc2UpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVElNRU9VVCwgMTApOw0K CQkJJGZlZWQgPSBjdXJsX2V4ZWMoJGMpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2Zzb2NrJzoN CgkJCSR1cmwgPSBwYXJzZV91cmwoJHNtZF9hdF9mZWVkdXJsKTsNCgkJCSRmcCA9IGZzb2Nr b3BlbiAoJHVybFsnaG9zdCddLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAxMCk7DQoJCQkkcXJ5 ID0gJ0dFVCAnLiRzbWRfYXRfZmVlZHVybDsNCgkJCSRxcnkgLj0gIiBIVFRQLzEuMFxyXG5c clxuIjsNCg0KCQkJZnB1dHMoJGZwLCAkcXJ5KTsNCgkJCXN0cmVhbV9zZXRfdGltZW91dCgk ZnAsIDEwKTsNCgkJCSRpbmZvID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJGZwKTsNCg0KCQkJ JGhkcnMgPSB0cnVlOw0KCQkJd2hpbGUgKCghZmVvZigkZnApKSAmJiAoISRpbmZvWyd0aW1l ZF9vdXQnXSkpIHsNCgkJCQkkbGluZSA9IGZnZXRzKCRmcCwgODE5Mik7DQoJCQkJJGxpbmUg PSBwcmVnX3JlcGxhY2UoIltcclxuXSIsICIiLCAkbGluZSk7DQoJCQkJaWYgKCRoZHJzID09 IGZhbHNlKSB7DQoJCQkJCSRmZWVkIC49ICRsaW5lLiJcbiI7DQoJCQkJfQ0KCQkJCWlmIChz dHJsZW4oJGxpbmUpID09IDApICRoZHJzID0gZmFsc2U7DQoJCQl9DQoJCQlpZiAoJGluZm9b J3RpbWVkX291dCddKSB7DQoJCQkJJGZlZWQgPSAnJzsNCgkJCX0NCgkJCWZjbG9zZSgkZnAp Ow0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkkZmVlZCA9ICcnOw0KCX0NCg0KCSRzbWRf YXRfdmxhc3QgPSAnJzsNCgkkZmVlZHMgPSBhcnJheSgpOw0KCWlmIChpc3NldCgkcHJlZnNb J3NtZF9hdF92ZXJzaW9ucyddKSAmJiBpc3NldCgkcHJlZnNbJ3NtZF9hdF92bGFzdCddKSkg ew0KCQlpZiAodGltZSgpIC0gJHByZWZzWydzbWRfYXRfdmxhc3QnXSA8IDg2NDAwKSB7DQoJ CQkvLyBMYXN0IHVwZGF0ZWQgd2l0aGluIHRoZSBsYXN0IGRheSwgc28gcmVhZCB0aGUgY2Fj aGVkIHZlcnNpb24gbnVtYmVycw0KCQkJJGZlZWRzID0gdW5zZXJpYWxpemUoJHByZWZzWydz bWRfYXRfdmVyc2lvbnMnXSk7DQoJCX0NCgl9DQoJaWYgKCEkZmVlZHMgfHwgZ3BzKCdyZWFk X3ZlcnNpb25zJykpIHsNCgkJJGZlZWRzID0gc21kX2F0X2ZlZWQoJGZlZWQpOw0KCQkkaW5z dGFsbGVkX2ZlZWQgPSBhcnJheSgpOw0KCQkkZmVlZHMgPSAoaXNfYXJyYXkoJGZlZWRzKSkg PyAkZmVlZHMgOiBhcnJheSgpOw0KDQoJCS8vIE9ubHkgcmVjb3JkIHRoZSB2ZXJzaW9uIGlu Zm8gZnJvbSB0aGVtZXMgdGhhdCBhcmUgaW5zdGFsbGVkDQoJCWZvcmVhY2goJHNraW5fbGlz dCBhcyAkc2tpbl9uYW1lKSB7DQoJCQkkZmVlZF9za2luX25hbWUgPSBzdHJfcmVwbGFjZSgn XycsICctJywgJHNraW5fbmFtZSk7IC8vIFVuc2FuaXRpemUgdGhlIHVybF90aXRsZQ0KCQkJ aWYgKGFycmF5X2tleV9leGlzdHMoJGZlZWRfc2tpbl9uYW1lLCAkZmVlZHMpKSB7DQoJCQkJ JGluc3RhbGxlZF9mZWVkWyRmZWVkX3NraW5fbmFtZV0gPSAkZmVlZHNbJGZlZWRfc2tpbl9u YW1lXTsNCgkJCX0NCgkJfQ0KCQlzZXRfcHJlZignc21kX2F0X3ZsYXN0JywgdGltZSgpLCAk c21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJc2V0X3ByZWYo J3NtZF9hdF92ZXJzaW9ucycsIHNlcmlhbGl6ZSgkaW5zdGFsbGVkX2ZlZWQpLCAkc21kX2F0 X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgl9DQoNCglmb3JlYWNoICgk c2tpbl9saXN0IGFzICRza2luX25hbWUpIHsNCgkJLy8gUmVhZCBlYWNoIG1hbmlmZXN0IGFu ZCBzZXQgdXAgdGhlIGxhYmVscw0KCQkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRz a2luX25hbWUpOw0KCQkkZmVlZF9za2luX25hbWUgPSBzdHJfcmVwbGFjZSgnXycsICctJywg JHNraW5fbmFtZSk7IC8vIFVuc2FuaXRpemUgZm9yIHVybF90aXRsZSBtYXRjaGluZw0KDQoJ CSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRza2luZm8sIDEpOw0KCQkkdGhpc19z a2luID0gKCRza2luZm8pID8gKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gc3Ryb25n KCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXSkgOiAkc2tpbl9uYW1lOw0K CQkkaXNfZ2JsID0gKCRza2luX25hbWUgPT0gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3Nr aW4nXSkgPyBzbWRfYXRfZ1R4dCgnaXNfZ2xvYmFsJykgOiAnJzsNCgkJJHRodW1yb3cgPSAn PGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gn LmEuJ25leHRzdGVwPXNtZF9hdF9saXN0Jy5hLidza2luPScuJHNraW5fbmFtZS5hLidwYWdl PScuJHBhZ2UuJyIgdGl0bGU9Iicuc21kX2F0X2dUeHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0 aGlzX3NraW4uJGlzX2dibC4oKCRza2luZm8gJiYgJHNraW5mb1snYmFzZWRfb24nXSkgPyBz bWRfYXRfZ1R4dCgnYmFzZWRfb24nLCBhcnJheSgne3NraW59JyA9PiAkc2tpbmZvWydiYXNl ZF9vbiddKSkgOiAnJykuKCgkdGh1bWJuYWlsKSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9k aXY+JyA6ICcnKS4nPC9hPic7DQoJCSRhdXRocm93ID0gKCgkc2tpbmZvICYmIHN0cnBvcygk c2tpbmZvWydhdXRob3JfdXJpJ10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9Iicu JHNraW5mb1snYXV0aG9yX3VyaSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDog KCgkc2tpbmZvKSA/ICRza2luZm9bJ2F1dGhvciddIDogJy0nKSk7DQoJCSRhY3Ryb3cgPSAn PGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5h Lidza2luPScuJHNraW5fbmFtZS4nIj5bJy5nVHh0KCdlZGl0JykuJ108L2E+Jw0KCQkJLiAn ICcgLigoJHNraW5mbykgPyAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidz dGVwPXNtZF9hdF9jbG9uZScuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgb25jbGljaz0icmV0 dXJuIHNtZF9nZXR2YWwoXCcnLiRza2luX25hbWUuJ1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsi PlsnLnNtZF9hdF9nVHh0KCdjbG9uZScpLiddPC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKCRz a2luZm8pID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRf YXRfZXhwb3J0Jy5hLidza2luPScuJHNraW5fbmFtZS4nIiBvbmNsaWNrPSJyZXR1cm4gc21k X2dldGNydXNoKFwnJy4kc2tpbl9uYW1lLidcJyk7Ij5bJy5zbWRfYXRfZ1R4dCgnZXhwb3J0 JykuJ108L2E+JyA6ICcnKQ0KCQkJLiAnICcgLigoaW5fYXJyYXkoJHNraW5fbmFtZSwgJHNt ZF9jb3JlX3RoZW1lcykgfHwgaW5fYXJyYXkoJHNraW5fbmFtZSwgJGJhc2VzKSkgPyAnJyA6 ICc8YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2RlbGV0 ZScuYS4nc2tpbj0nLiRza2luX25hbWUuYS4ncGFnZT0nLiRwYWdlLiciIG9uY2xpY2s9InJl dHVybiBjb25maXJtKFwnJy5zbWRfYXRfZ1R4dCgnZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgn e3NraW59JyA9PiAkc2tpbl9uYW1lKSkuJ1wnKTsiPlsnLmdUeHQoJ2RlbGV0ZScpLiddPC9h PicpDQoJCQkuICc8ZGl2IGlkPSJwb3BfJy4kc2tpbl9uYW1lLiciIGNsYXNzPSJzbWRfcG9w dXAgc21kX2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRfZ1R4dCgnbmV3X2Nsb25lc2tpbicpLic8 L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNtZF90ZXh0X25hbWUiIHZhbHVlPSIi IC8+IDxhIGhyZWY9IiMiPiZuYnNwO1snLnN0cm9uZyhzbWRfYXRfZ1R4dCgnY29uZmlybScp KS4nXTwvYT48L2Rpdj4nDQoJCQkuICc8ZGl2IGlkPSJjcnVzaF8nLiRza2luX25hbWUuJyIg Y2xhc3M9InNtZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCdjcnVz aF9mb3JtYXQnKS4nPC9zcGFuPicucmFkaW9TZXQoJGNydXNoZXJzLCAkc2tpbl9uYW1lLidf Y3J1c2gnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jcnVzaCddKS4nPGEgaHJlZj0iIyI+Jm5ic3A7 Wycuc3Ryb25nKHNtZF9hdF9nVHh0KCdjb25maXJtJykpLiddPC9hPjwvZGl2Pic7DQoJCSR2 ZXJvdyA9ICgkc2tpbmZvKSA/ICgoaXNzZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV0pICYm IGlzc2V0KCRmZWVkc1skZmVlZF9za2luX25hbWVdWydzdW1tYXJ5J10pICYmIHZlcnNpb25f Y29tcGFyZSgkZmVlZHNbJGZlZWRfc2tpbl9uYW1lXVsnc3VtbWFyeSddLCRza2luZm9bJ3Zl cnNpb24nXSk9PT0xKSA/ICc8YSBocmVmPSInLiRmZWVkc1skZmVlZF9za2luX25hbWVdWyds aW5rJ10uJyIgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6Izk5MDAwMDsiPicuc21k X2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJzaW9uJ10uJzwvYT4nIDogc21kX2F0 X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJzaW9uJ10pIDogJyc7DQoNCgkJaWYgKCRs YXlvdXQ9PTApIHsNCgkJCWVjaG8gdHIoDQoJCQkJdGQoJHRodW1yb3cpDQoJCQkJLnRkKCRh dXRocm93LCAxMDApDQoJCQkJLnRkKCR2ZXJvdykNCgkJCQkudGQoKCgkc2tpbmZvKT8gJHNr aW5mb1snZGVzY3JpcHRpb24nXSA6ICctJykuKCgkc2tpbmZvICYmICRza2luZm9bJ2hlbHAn XSkgPyAnICcuaHJlZignWycuZ1R4dCgnaGVscCcpLiddJywgJHNraW5mb1snaGVscCddKSA6 ICcnKSwgMjUwKQ0KCQkJCS50ZCgkYWN0cm93LDI2MCkNCgkJCSwgKCgkc2tpbl9uYW1lID09 ICRjdXJyX3NraW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpDQoJ CQkpOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NlbGwiJy4oKCRz a2luX25hbWUgPT0gJGN1cnJfc2tpbikgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7 IicgOiAnJykuJz4nOw0KCQkJZWNobyAnPGRpdj4nLiR0aHVtcm93Lic8L2Rpdj4nOw0KCQkJ ZWNobyAnPGRpdiBjbGFzcz0ic21kX2F1dGgiPicuJHZlcm93LnNtZF9hdF9nVHh0KCdieScp LiRhdXRocm93Lic8L2Rpdj4nOw0KCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2FjdGlvbnMi PicuJGFjdHJvdy4nPC9kaXY+JzsNCgkJCWVjaG8gJzwvZGl2Pic7DQoJCX0NCgl9DQoNCi8v CWVjaG8gdGRhKHNlbGVjdF9idXR0b25zKCkgLiBldmVudF9tdWx0aWVkaXRfZm9ybSgkc21k X2F0X2V2ZW50LCBOVUxMLCAkcGFnZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksICcgY29s c3Bhbj0iNSIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyBib3JkZXI6IG5vbmU7IicpOw0K CWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyAnPC90ZD48L3RyPic7DQoJCWVjaG8gZW5k VGFibGUoKTsNCgl9IGVsc2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwv ZGl2PjwvZGl2Pic7DQoJfQ0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gbi5uYXZfZm9ybSgk c21kX2F0X2V2ZW50LCAkcGFnZSwgJG51bVBhZ2VzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KTsNCgllY2hvIG4ucGFnZWJ5X2Zvcm0oJHNtZF9hdF9ldmVudCwgJHBhZ2VieSk7DQp9DQoN CmZ1bmN0aW9uIHNtZF9hdF9mZWVkKCRmZWVkKSB7DQoJZ2xvYmFsICRmZWVkczsNCg0KCSRm ZWVkPXByZWdfcmVwbGFjZSgiLz4iLiJbWzpzcGFjZTpdXSsiLiI8L2kiLCAiPjwiLCAkZmVl ZCk7IC8vIEtpbGwgd2hpdGVzcGFjZSBpbiBmZWVkDQoJJHhtbHBhcnNlciA9IHhtbF9wYXJz ZXJfY3JlYXRlKCk7DQoJeG1sX3NldF9lbGVtZW50X2hhbmRsZXIoJHhtbHBhcnNlciwgInNt ZF9hdF9mZWVkX3N0YXJ0X3RhZyIsICJzbWRfYXRfZmVlZF9lbmRfdGFnIik7DQoJeG1sX3Nl dF9jaGFyYWN0ZXJfZGF0YV9oYW5kbGVyKCR4bWxwYXJzZXIsICJzbWRfYXRfZmVlZF90YWdf Y29udGVudHMiKTsNCgl4bWxfcGFyc2UoJHhtbHBhcnNlciwgJGZlZWQpOw0KCXhtbF9wYXJz ZXJfZnJlZSgkeG1scGFyc2VyKTsNCg0KCXJldHVybiAkZmVlZHM7DQp9DQoNCmZ1bmN0aW9u IHNtZF9hdF9mZWVkX3N0YXJ0X3RhZygkcGFyc2VyLCAkbmFtZSwgJGF0dHJpYnMpIHsNCgln bG9iYWwgJHNtZF9hdF9mZWVkaW4sICRzbWRfYXRfZmVlZHRhZzsNCglpZiAoJG5hbWUgPT0g IkVOVFJZIikgew0KCQkkc21kX2F0X2ZlZWRpbiA9IHRydWU7DQoJfQ0KCWlmICgkc21kX2F0 X2ZlZWRpbikgew0KCQkkc21kX2F0X2ZlZWR0YWcgPSAkbmFtZTsNCgl9DQp9DQpmdW5jdGlv biBzbWRfYXRfZmVlZF9lbmRfdGFnKCRwYXJzZXIsICRuYW1lKSB7DQoJZ2xvYmFsICRzbWRf YXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWcsICRzbWRfYXRfZmVlZG5hbWU7DQoJaWYgKCRu YW1lID09ICJFTlRSWSIpIHsNCgkJJHNtZF9hdF9mZWVkaW4gPSBmYWxzZTsNCgkJJHNtZF9h dF9mZWVkbmFtZSA9ICcnOw0KCX0NCn0NCg0KZnVuY3Rpb24gc21kX2F0X2ZlZWRfdGFnX2Nv bnRlbnRzKCRwYXJzZXIsICRkYXRhKSB7DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21k X2F0X2ZlZWR0YWcsICRzbWRfYXRfZmVlZG5hbWUsICRmZWVkczsNCglpZiAoJHNtZF9hdF9m ZWVkaW4pIHsNCgkJaWYgKCRzbWRfYXRfZmVlZHRhZyA9PSAiTkFNRSIpIHsNCgkJCSRmZWVk c1skZGF0YV0gPSAnJzsNCgkJCSRzbWRfYXRfZmVlZG5hbWUgPSAkZGF0YTsNCgkJfQ0KCQlp ZiAoaXNzZXQoJGZlZWRzWyRzbWRfYXRfZmVlZG5hbWVdKSkgew0KCQkJaWYgKCRzbWRfYXRf ZmVlZHRhZyA9PSAiVElUTEUiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiU1VNTUFSWSIgfHwg JHNtZF9hdF9mZWVkdGFnID09ICJVUERBVEVEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIklE IiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIkxJTksiKSB7DQoJCQkJJGZlZWRzWyRzbWRfYXRf ZmVlZG5hbWVdW3N0cnRvbG93ZXIoJHNtZF9hdF9mZWVkdGFnKV0gPSAkZGF0YTsNCgkJCX0N CgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZW1vdmUg aGFyZCBzcGFjZXMgaW4gdGhlIHVwbG9hZF9mb3JtIHNvIE9wZXJhIGFuZCBJRSB3cmFwIHRo ZSBidXR0b25zDQpmdW5jdGlvbiBzbWRfYXRfdXBsb2FkX2Zvcm0oJGV2ZW50LCAkc3RlcCwg JGRhdGEsICRhcmdzKSB7DQoJcmV0dXJuIHN0cl9yZXBsYWNlKCcmIzE2MDsnLCAnICcsICRk YXRhKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf YXRfZWRpdCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50Ow0KDQoJZXh0 cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnbmV3X3NraW4nLCAnZmlsZScpKSkp Ow0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRsYXlvdXQgPSAoaXNz ZXQoJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xh eW91dCddIDogMTsNCg0KCSRlZGl0YWJsZSA9IGFycmF5KCJzc2MiLCAiY3NzIiwgImpzIiwg InBocCIpOw0KCSRpbWFnYWJsZSA9IGFycmF5KCJqcGciLCAianBlZyIsICJnaWYiLCAicG5n Iik7DQoJJG1heF9maWxlX3NpemUgPSAyICogMTAyNCAqIDEwMjQ7DQoNCgkkc2tpbmZvID0g c21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsNCgkkZmlsZSA9IChlbXB0eSgkbmV3X3NraW4p KSA/ICRmaWxlIDogJG5ld19za2luOw0KCSRmaWxlcyA9IHNtZF9hdF9saXN0ZGlyKFRIRU1F LiRza2luKTsNCglzb3J0KCRmaWxlcyk7DQoNCgkvLyBTcGxpdCB0aGUgbGlzdCBpbnRvIGl0 cyBkaXJlY3RvcnkgZ3JvdXBzDQoJJGFsbGZpbGVzID0gYXJyYXkoKTsNCglmb3JlYWNoICgk ZmlsZXMgYXMgJGN1cnJmaWxlKSB7DQoJCSRmaWxlX2luZm8gPSBwYXRoaW5mbygkY3VycmZp bGUpOw0KCQkvLyBJZ25vcmUgYW55IHJvZ3VlIFN1YnZlcnNpb24gZmlsZXMNCgkJaWYgKHN0 cnBvcygkZmlsZV9pbmZvWydkaXJuYW1lJ10sICcvLnN2bicpID09PSBmYWxzZSkgew0KCQkJ JGZpbGVfdHlwZSA9IChpc3NldCgkZmlsZV9pbmZvWydleHRlbnNpb24nXSkpID8gJGZpbGVf aW5mb1snZXh0ZW5zaW9uJ10gOiAnb3RoZXInOw0KCQkJJGFsbGZpbGVzWyRmaWxlX3R5cGVd W10gPSAkY3VycmZpbGU7DQoJCX0NCgl9DQoNCglpZiAoZ3BzKCdzbWRfYXRfZWRpdHMnKSkg ew0KCQkkY29udGVudHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLGdwcygn c21kX2F0X2VkaXRzJykpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoJfSBlbHNlIHsNCgkJ JGNvbnRlbnRzID0gJyc7DQoJCWlmICgkZmlsZSAmJiBmaWxlX2V4aXN0cyhUSEVNRS4kc2tp bi5EUy4kZmlsZSkpIHsNCgkJCSRjb250ZW50cyA9IGZpbGUoVEhFTUUuJHNraW4uRFMuJGZp bGUpOw0KCQkJJGNvbnRlbnRzID0gam9pbigiIiwgJGNvbnRlbnRzKTsNCgkJfQ0KCX0NCg0K CS8vIEJlZ2luIHJlbmRlcmluZyB0aGUgcGFnZQ0KCXBhZ2V0b3Aoc21kX2F0X2dUeHQoJ2Vk aXRfbGJsJyksJG1lc3NhZ2UpOw0KDQoJZWNobyA8PDxFT1MNCjxzdHlsZSB0eXBlPSJ0ZXh0 L2NzcyI+DQojc21kX2F0X2ltYWdlcyB7DQoJbWFyZ2luOjBweCA2cHggLTRweCAwOw0KfQ0K LnNtZF9za2luX2ZpbGV0eXBlcyB7DQoJbWFyZ2luOjEycHggMDsNCn0NCjwvc3R5bGU+DQpF T1M7DQoNCgkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCS8vIHNlbGVj dElucHV0IG5lZWRzIGJvdGggaW5kZXggYW5kIHZhbHVlIHRvIGJlIHRoZSBzYW1lIGluIHRo aXMgY2FzZQ0KCSRza2luc2VsID0gYXJyYXkoKTsNCglmb3JlYWNoKCRza2luX2xpc3QgYXMg JGtleTEgPT4gJHZhbHVlMSkgew0KCQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2luX2xpc3Rb JGtleTFdOw0KICAgfQ0KCSRza2luQ2hhbmdlID0gJzxmb3JtIG5hbWU9InNraW5jaGFuZ2Ui IGFjdGlvbj0iaW5kZXgucGhwIj4nDQoJCS4gZUlucHV0KCRzbWRfYXRfZXZlbnQpDQoJCS4g c0lucHV0KCdzbWRfYXRfZWRpdCcpDQoJCS4gc2VsZWN0SW5wdXQoJ3NraW4nLCAkc2tpbnNl bCwgJHNraW4sIDAsIDEpDQoJCS4gJzwvZm9ybT4nOw0KDQoJJGZpbGVMaXN0ID0gaGVkKHNt ZF9hdF9nVHh0KCdza2luX2ZpbGVzJyksMikNCgkJLiAkc2tpbkNoYW5nZQ0KCQkuIHN0YXJ0 VGFibGUoJ2xpc3QnLCAnbGVmdCcsICdzbWRfc2tpbl9maWxldHlwZXMnKTsNCgkkZmlsZUxp c3QgLj0gJzxiciAvPjxhIGNsYXNzPSJuYXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4kc21kX2F0 X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X25ld2ZpbGUnLmEuJ3NraW49Jy4kc2tpbi4nIj4nLnNt ZF9hdF9nVHh0KCduZXdfZmlsZScpLic8L2E+JzsNCgkkZmlsZUxpc3QgLj0gJyA8YSBjbGFz cz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nIj4nLnNtZF9hdF9n VHh0KCgoJGxheW91dD09IjAiKSA/ICdza2luX2xpc3QnIDogJ3NraW5fZ3JpZCcpKS4nPC9h PjxiciAvPic7DQoJJG90aGVycyA9IGFycmF5KCk7DQoNCglmb3JlYWNoICgkZWRpdGFibGUg YXMgJGZpbGV0eXBlKSB7DQoJCWlmIChpc3NldCgkYWxsZmlsZXNbJGZpbGV0eXBlXSkpIHsN CgkJCWZvcmVhY2ggKCRhbGxmaWxlc1skZmlsZXR5cGVdIGFzICRpZHggPT4gJGN1cnJmaWxl KSB7DQoJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkkZmlsZUxpc3QgLj0gdHIodGQoaGVk KHNtZF9hdF9nVHh0KCRmaWxldHlwZSksMykpKTsNCgkJCQl9DQoJCQkJJGp1c3RmaWxlID0g YmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkkYmFzZWZpbGUgPSBhcnJheV9zaGlmdChleHBs b2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJJGVkaXQgPSAnPGEgaHJlZj0iP2V2ZW50PScu JHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2luPScuJHNraW4uYS4n ZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUgPT0gJGp1c3RmaWxlKSA/IHN0cm9uZygk anVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7DQoJCQkJJGRlbCA9ICgkYmFzZWZpbGUg PT0gJHNraW4pID8gJycgOiBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZScs ICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tpbicsICRza2luKTsNCgkJCQkkZmlsZUxpc3Qg Lj0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCS8vIFNv bWUgb3RoZXIgZmlsZSB0eXBlDQoJCQlpZiAoISRvdGhlcnMpIHsNCgkJCQlmb3JlYWNoICgk YWxsZmlsZXMgYXMgJGZ0eXBlID0+ICRmbHMpIHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkZnR5 cGUsIGFycmF5X21lcmdlKCRlZGl0YWJsZSwgJGltYWdhYmxlKSkpIHsNCgkJCQkJCWZvcmVh Y2ggKCRhbGxmaWxlc1skZnR5cGVdIGFzICRpZHggPT4gJGN1cnJmaWxlKSB7DQoJCQkJCQkJ JGp1c3RmaWxlID0gYmFzZW5hbWUoJGN1cnJmaWxlKTsNCgkJCQkJCQkkYmFzZWZpbGUgPSBh cnJheV9zaGlmdChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJCQkJCQkJJGVkaXQgPSAn PGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5h Lidza2luPScuJHNraW4uYS4nZmlsZT0nLiRqdXN0ZmlsZS4nIj4nLigoJGZpbGUgPT0gJGp1 c3RmaWxlKSA/IHN0cm9uZygkanVzdGZpbGUpIDogJGp1c3RmaWxlKS4nPC9hPic7DQoJCQkJ CQkJJGRlbCA9ICgkYmFzZWZpbGUgPT0gJHNraW4pID8gJycgOiBkTGluaygkc21kX2F0X2V2 ZW50LCAnc21kX2F0X2RlbGV0ZScsICdmaWxlJywgJGp1c3RmaWxlLCAxLCAnc2tpbicsICRz a2luKTsNCgkJCQkJCQkkb3RoZXJzW10gPSB0cih0ZCgkZWRpdCkudGQoJGRlbCkpOw0KCQkJ CQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCSRmaWxlTGlzdCAuPSAoJG90 aGVycykgPyB0cih0ZChoZWQoc21kX2F0X2dUeHQoJ290aGVyX2ZpbGVzJyksMykpKS4gam9p bihuLCAkb3RoZXJzKSA6ICcnOw0KCSRmaWxlTGlzdCAuPSBlbmRUYWJsZSgpOw0KDQoJLy8g TWFrZSB0aGUgbGlzdCBvZiBpbWFnZXMgZm9yIHRoaXMgc2tpbg0KCSRxcyA9IGFycmF5KA0K CQkiZXZlbnQiID0+ICRzbWRfYXRfZXZlbnQsDQoJCSJzdGVwIiA9PiAnc21kX2F0X2RlbGV0 ZV9pbWFnZScsDQoJKTsNCgkkc2VsW10gPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBpZD0ic21k X2F0X2ltYWdlZm9ybSIgbmFtZT0ic21kX2F0X2ltYWdlZm9ybSIgYWN0aW9uPSInLmpvaW5f cXMoJHFzKS4nIj4nOw0KCSRzZWxbXSA9ICc8c2VsZWN0IGlkPSJzbWRfYXRfaW1hZ2VzIiBu YW1lPSJzbWRfYXRfaW1hZ2VzW10iIGNsYXNzPSJsaXN0IiBzaXplPSIyNCIgbXVsdGlwbGU9 Im11bHRpcGxlIiBzdHlsZT0id2lkdGg6MTU0cHg7Ij4nOw0KDQoJaWYgKGRlZmluZWQoJ0dM T0JfQlJBQ0UnKSkgew0KCQkkaW1nID0gZ2xvYihUSEVNRS4kc2tpbi5EUy4neyouanBnLCou Z2lmLCoucG5nfScsIEdMT0JfQlJBQ0UpOw0KCX0gZWxzZSB7DQoJCSRpbWcgPSBhcnJheV9t ZXJnZShnbG9iKFRIRU1FLiRza2luLkRTLicqLmpwZycpLGdsb2IoVEhFTUUuJHNraW4uRFMu JyouZ2lmJyksZ2xvYihUSEVNRS4kc2tpbi5EUy4nKi5wbmcnKSk7DQoJfQ0KDQoJaWYoaXNf YXJyYXkoJGltZykpIHsNCgkJZm9yZWFjaCAoJGltZyBhcyAkaW1nZmlsZSkgew0KCQkJJHNl bFtdID0gdC4nPG9wdGlvbiB2YWx1ZT0iJy4kaW1nZmlsZS4nIj4nLmJhc2VuYW1lKCRpbWdm aWxlKS4nPC9vcHRpb24+JzsNCgkJfQ0KCX0NCgkkc2VsW10gPSAnPC9zZWxlY3Q+JzsNCgkk c2VsW10gPSBkTGluaygkc21kX2F0X2V2ZW50LCAnc21kX2F0X2RlbGV0ZV9pbWFnZScsICdz a2luJywgJHNraW4sIDEpOw0KCSRzZWxbXSA9ICc8L2Zvcm0+JzsNCgkkc2VsID0gam9pbign Jywkc2VsKTsNCg0KCS8vIEltYWdlIHBvcnRpb24NCgkkaW1nYml0ID0gaGVkKHNtZF9hdF9n VHh0KCdza2luX2ltYWdlcycpLCAyKSAuIHN0YXJ0VGFibGUoJ2xpc3QnLCAnbGVmdCcpOw0K CSRpbWdiaXQgLj0gdHIodGQoJHNlbCkpOw0KCSRpbWdiaXQgLj0gdHIodGQodXBsb2FkX2Zv cm0oc21kX2F0X2dUeHQoJ3VwbG9hZF9pbWFnZScpLCAnJywgJ3NtZF9hdF91cGxvYWRfaW1h Z2UnLCAkc21kX2F0X2V2ZW50LCAkc2tpbiwgJG1heF9maWxlX3NpemUsICcnLCAnJyksIDE1 MCkpOw0KCSRpbWdiaXQgLj0gZW5kVGFibGUoKTsNCg0KCS8vIFJlbmRlciB0aGUgcmVzdCBv ZiB0aGUgcGFnZQ0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcpLg0KCXRyKA0KCQl0ZHRsKCRp bWdiaXQpLg0KCQl0ZCgNCgkJCWhlZCgoKCRza2luZm8pID8gJHNraW5mb1snZG5hbWUnXSA6 ICRza2luKSwxKS4NCgkJCWZvcm0oDQoJCQkJJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJu ZXdfc2tpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkZmlsZSkuJyIgY2xhc3M9ImVk aXQiIHNpemU9IjQwIiB0YWJpbmRleD0iMiIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTBweDsi IC8+Jy5icg0KCQkJCS4nPHRleHRhcmVhIGlkPSJzbWRfYXRfZWRpdHMiIGNsYXNzPSJjb2Rl IiBuYW1lPSJzbWRfYXRfZWRpdHMiIGNvbHM9Ijc2IiByb3dzPSIzMiI+Jy5odG1sc3BlY2lh bGNoYXJzKCRjb250ZW50cykuJzwvdGV4dGFyZWE+Jy5icg0KCQkJCS5mSW5wdXQoJ3N1Ym1p dCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJykNCgkJCQkuZUlucHV0KCRzbWRfYXRfZXZl bnQpLnNJbnB1dCgnc21kX2F0X3NhdmUnKQ0KCQkJCS5oSW5wdXQoJ3NraW4nLCRza2luKQ0K CQkJCS5oSW5wdXQoJ2ZpbGUnLCRmaWxlKQ0KCQkJKQ0KCQkpLg0KCQl0ZHRsKCRmaWxlTGlz dCkNCgkpLg0KCWVuZFRhYmxlKCk7DQoNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQovLyBKdXN0IGNsZWFyIG91dCB0aGUgdmFyIHNvIHRoZSBzYXZlIGZ1bmN0aW9uIHRy ZWF0cyB0aGUgY29udGVudCBhcyBhIG5ldyBmaWxlDQpmdW5jdGlvbiBzbWRfYXRfbmV3Zmls ZSgpIHsNCgkkX1BPU1RbJ2ZpbGUnXSA9ICcnOw0KCSRtZXNzYWdlPScnOw0KCXNtZF9hdF9l ZGl0KCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBzbWRfYXRfY2xvbmUoKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsNCg0KCWV4dHJhY3Qo ZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJykpKSk7DQoJJG1zZz0nJzsN Cg0KCSRuZXdfc2tpbiA9IHRyaW0oJG5ld19za2luKTsNCgkkbmV3X3NraW4gPSByYXd1cmxl bmNvZGUoJG5ld19za2luKTsNCg0KCWlmIChlbXB0eSgkbmV3X3NraW4pKSB7DQoJCSRtc2cg PSBzbWRfYXRfZ1R4dCgnbmFtZV9lbXB0eScpOw0KCX0NCg0KCS8vIENoZWNrIHRoZSBuZXcg bmFtZSBpc24ndCBhbHJlYWR5IGluIHVzZQ0KCSR0aGVtZXMgPSBzbWRfYXRfcmVhZF9za2lu cygpOw0KDQoJaWYgKGluX2FycmF5KCRuZXdfc2tpbiwgJHRoZW1lcykpIHsNCgkJJG1zZyA9 IHNtZF9hdF9nVHh0KCdza2luX2V4aXN0cycsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tp bikpOw0KCX0NCg0KCS8vIE5vIGVycm9ycywgc28gbWFrZSBhIG5ldyBkaXIgYW5kIGNyZWF0 ZSB0aGUgUEhQIGZpbGUNCglpZiAoJG1zZz09JycpIHsNCgkJJGNvbnRlbnQgPSAnJzsNCgkJ JGRlc3RkaXIgPSBUSEVNRS4kbmV3X3NraW4uRFM7DQoJCSRyZXMgPSBta2RpcigkZGVzdGRp cik7DQoJCSRiYXNlZCA9ICcnOw0KDQoJCWlmICgkc2tpbikgew0KCQkJLy8gQmFzZWQgb24g YW4gZXhpc3RpbmcgdGhlbWUuIE5vIG5lZWQgZm9yIGFueSBmdW5jdGlvbnMgb3RoZXIgdGhh biBtYW5pZmVzdCgpDQoJCQkkYmFzZWQgPSAidGhlbWU6OmJhc2VkX29uKCciLiRza2luLiIn KTsiOw0KCQkJJGV4dGVuZHMgPSAkc2tpbi4nX3RoZW1lJzsNCgkJCSRzcmNzcyA9IFRIRU1F LiRza2luLkRTLid0ZXh0cGF0dGVybi5jc3MnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRzcmNz cykgJiYgZmlsZXNpemUoJHNyY3NzKSA+IDApIHsNCgkJCQkkaW1wb3J0ID0gam9pbignJywg ZmlsZSgkc3Jjc3MpKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGltcG9ydCA9ICdAaW1wb3J0IHVy bCgiLi4vY2xhc3NpYy90ZXh0cGF0dGVybi5jc3MiKTsnOw0KCQkJfQ0KCQkJJGNvbnRlbnQg PSAneyc7DQoJCX0gZWxzZSB7DQoJCQkvLyBCcmFuZCBzcGFua2luZyBuZXcgdGhlbWUuIENs b25lICdjbGFzc2ljJyBmdW5jdGlvbnMgdGhlbiBhZGQgbmV3IG1hbmlmZXN0KCkNCgkJCSRl eHRlbmRzID0gJ3RoZW1lJzsNCgkJCSRpbXBvcnQgPSAnJzsNCgkJCSRzcmMgPSB0eHBhdGgu RFMuVEhFTUUuJ2NsYXNzaWMnLkRTLidjbGFzc2ljLnBocCc7DQoJCQkkZ3JhYiA9IGZhbHNl Ow0KCQkJJGZwID0gZmlsZSgkc3JjKTsNCg0KCQkJZm9yZWFjaCgkZnAgYXMgJGxpbmUpIHsN CgkJCQkkbGluZSA9IHJ0cmltKCRsaW5lKTsNCgkJCQlpZiAoc3RycG9zKCRsaW5lLCAnZnVu Y3Rpb24gbWFuaWZlc3QoKScpICE9PSBmYWxzZSkgew0KCQkJCQkkZ3JhYiA9IGZhbHNlOyAv LyB1bm5lY2Vzc2FyeT8NCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWlmICgkZ3JhYikgew0K CQkJCQkkY29udGVudCAuPSAkbGluZS5uOw0KCQkJCX0NCgkJCQlpZiAoc3RycG9zKCRsaW5l LCAnY2xhc3MgY2xhc3NpY190aGVtZSBleHRlbmRzIHRoZW1lJykgIT09IGZhbHNlKSB7DQoJ CQkJCSRncmFiID0gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBtYW5pZmVzdCBm aWVsZHMNCgkJJG1hbnVzZXIgPSBnZXRfYXV0aG9yX25hbWUoJHR4cF91c2VyKTsNCgkJJG1h bnRpdGxlID0gdWN3b3JkcygkbmV3X3NraW4pOw0KDQoJCS8vIFdyaXRlIHRoZSBuZXcgUEhQ IGZpbGUNCgkJJGJ1ZiA9IDw8PEVPRg0KPD9waHANCg0KaWYgKCFkZWZpbmVkKCd0eHBpbnRl cmZhY2UnKSkgZGllKCd0eHBpbnRlcmZhY2UgaXMgdW5kZWZpbmVkLicpOw0KDQp7JGJhc2Vk fQ0KDQpjbGFzcyB7JG5ld19za2lufV90aGVtZSBleHRlbmRzIHskZXh0ZW5kc30NCnskY29u dGVudH0NCg0KCWZ1bmN0aW9uIG1hbmlmZXN0KCkNCgl7DQoJCXJldHVybiBhcnJheSgNCgkJ CSd0aXRsZScJIAkJPT4gJ3skbWFudGl0bGV9JywNCgkJCSdhdXRob3InIAkJPT4gJ3skbWFu dXNlcn0nLA0KCQkJJ2F1dGhvcl91cmknIAk9PiAnJywNCgkJCSd2ZXJzaW9uJyAJCT0+ICcx LjAnLA0KCQkJJ2Rlc2NyaXB0aW9uJyAJPT4gJycsDQoJCQknaGVscCcgCQkJPT4gJycsDQoJ CSk7DQoJfQ0KfQ0KPz4NCkVPRjsNCg0KCQkkZnAgPSBmb3BlbigkZGVzdGRpci4kbmV3X3Nr aW4uJy5waHAnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGJ1Zik7DQoJCWZjbG9zZSgkZnAp Ow0KDQoJCS8vIENyZWF0ZSB0aGUgQ1NTIGZpbGUNCgkJJGZwID0gZm9wZW4oJGRlc3RkaXIu J3RleHRwYXR0ZXJuLmNzcycsICJ3YiIpOw0KCQlmd3JpdGUoJGZwLCAkaW1wb3J0KTsNCgkJ ZmNsb3NlKCRmcCk7DQoNCgkJaWYgKCRza2luKSB7DQoJCQkkbXNnID0gc21kX2F0X2dUeHQo J3NraW5fY2xvbmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0KCQl9IGVs c2Ugew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2NyZWF0ZWQnLCBhcnJheSgne25h bWV9JyA9PiAkbmV3X3NraW4pKTs7DQoJCX0NCg0KLy8JJG1zZyA9IHNtZF9hdF9nVHh0KCdz a2luX25vdF9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19za2luKSk7Ow0KDQoJ fQ0KDQoJc21kX2F0X2xpc3QoJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X2NydXNoX29wdGlvbnMoJGRpcmVjdGlvbj0nZXhwb3J0 Jykgew0KCSRzbWRfY3J1c2hlcnMgPSBhcnJheSgndGFyJyA9PiBzbWRfYXRfZ1R4dCgnY190 YXInKSk7DQoNCglpZiAoJGRpcmVjdGlvbj0nZXhwb3J0Jykgew0KCQlpZiAoZnVuY3Rpb25f ZXhpc3RzKCdnemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdnem9wZW4nKSAmJiBm dW5jdGlvbl9leGlzdHMoJ2d6d3JpdGUnKSkgew0KCQkJJHNtZF9jcnVzaGVyc1snZ3ppcCdd ID0gc21kX2F0X2dUeHQoJ2NfZ3ppcCcpOw0KCQkJJHNtZF9jcnVzaGVyc1snemlwJ10gPSBz bWRfYXRfZ1R4dCgnY196aXAnKTsNCgkJfQ0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdiemNv bXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdiem9wZW4nKSAmJiBmdW5jdGlvbl9leGlz dHMoJ2J6d3JpdGUnKSkgew0KCQkJJHNtZF9jcnVzaGVyc1snYnppcDInXSA9IHNtZF9hdF9n VHh0KCdjX2J6aXAyJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBJbXBvcnQgZnVuY3Rpb24g cmVxdWlyZW1lbnRzDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0ZScpKSB7DQoJ CQkkc21kX2NydXNoZXJzWydnemlwJ10gPSBzbWRfYXRfZ1R4dCgnY19nemlwJyk7DQoJCQkk c21kX2NydXNoZXJzWyd6aXAnXSA9IHNtZF9hdF9nVHh0KCdjX3ppcCcpOw0KCQl9DQoJCWlm IChmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycpKSB7DQoJCQkkc21kX2NydXNoZXJz WydiemlwMiddID0gc21kX2F0X2dUeHQoJ2NfYnppcDInKTsNCgkJfQ0KCX0NCglyZXR1cm4g JHNtZF9jcnVzaGVyczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBzbWRfYXRfZXhwb3J0KCkgew0KCWdsb2JhbCAkcHJlZnMsICRzbWRfYXRfcHJlZnM7 DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicsJ2NydXNoJykpKSk7DQoJ JG1lc3NhZ2U9Jyc7DQoJY2hkaXIoVEhFTUUpOw0KCSRvdXQgPSAkc2tpbjsNCg0KCS8vIENo ZWNrIHRoZSBwYXNzZWQgY29tcHJlc3Npb24gZm9ybWF0IGlzIHZhbGlkOyB1c2UgZGVmYXVs dCBpZiBub3QNCgkkY3J1c2hlcnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9ucygpOw0KCWlmICgk Y3J1c2g9PScnIHx8ICRjcnVzaD09J3VuZGVmaW5lZCcgfHwgIWFycmF5X2tleV9leGlzdHMo JGNydXNoLCAkY3J1c2hlcnMpKSB7DQoJCSRjcnVzaCA9IGdldF9wcmVmKCdzbWRfYXRfY3J1 c2gnLCAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfY3J1c2gnXSk7DQoJfQ0KDQoJc3dpdGNo KCRjcnVzaCkgew0KCQljYXNlICd6aXAnOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfemlwX2Zp bGUoJG91dC4nLnppcCcpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2J6aXAyJzoNCgkJCSR6aXAg PSBuZXcgc21kX2F0X2J6aXBfZmlsZSgkb3V0LicudGJ6MicpOw0KCQkJYnJlYWs7DQoJCWNh c2UgJ3Rhcic6DQoJCQkkemlwID0gbmV3IHNtZF9hdF90YXJfZmlsZSgkb3V0LicudGFyJyk7 DQoJCQlicmVhazsNCgkJY2FzZSAnZ3ppcCc6DQoJCWRlZmF1bHQ6DQoJCQkkemlwID0gbmV3 IHNtZF9hdF9nemlwX2ZpbGUoJG91dC4nLnRneicpOw0KIAkJCWJyZWFrOw0KCX0NCg0KCSR6 aXAtPnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiB0eHBhdGguRFMuVEhFTUUsICdv dmVyd3JpdGUnID0+IDEsICdpbm1lbW9yeScgPT4gMSkpOw0KCSR6aXAtPmFkZF9maWxlcygk c2tpbi5EUy4nKi4qJyk7DQoJJHppcC0+ZXhjbHVkZV9maWxlcygkc2tpbi5EUy4nKi5zdm4q Jyk7DQoJJHppcC0+Y3JlYXRlX2FyY2hpdmUoKTsNCgkkemlwIC0+ZG93bmxvYWRfZmlsZSgp Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9p bXBvcnQoKSB7DQoJZ2xvYmFsICRwcmVmczsNCg0KCSRuYW1lID0gJF9GSUxFU1sndGhlZmls ZSddWyduYW1lJ107DQoJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd0aGVm aWxlJ11bJ3RtcF9uYW1lJ10sIHR4cGF0aC5EUy5USEVNRS5iYXNlbmFtZSgkX0ZJTEVTWyd0 aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsNCgkkYmFzZWRpciA9IHR4cGF0aC5EUy5USEVNRTsN CgkkdW5jcnVzaGVycyA9IHNtZF9hdF9jcnVzaF9vcHRpb25zKCdpbXBvcnQnKTsNCgkkbWVz c2FnZT0nJzsNCgkkaW5mbyA9IGV4cGxvZGUgKCcuJywkbmFtZSk7DQoJJGV4dCA9ICRpbmZv WzFdOw0KDQoJaWYgKCRuYW1lICYmICRmaWxlKSB7DQoJCWlmICgkZXh0ID09ICd6aXAnICYm IGFycmF5X2tleV9leGlzdHMoJ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJJHppcCA9IG5l dyBzbWRfZFVuemlwMigkZmlsZSk7DQovLwkJCSR6aXAtPmRlYnVnID0gdHJ1ZTsNCgkJCSR6 aXAtPmdldExpc3QoKTsNCgkJCSR6aXAtPnVuemlwQWxsKCRiYXNlZGlyKTsNCgkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQgPT0g J3RneicgJiYgYXJyYXlfa2V5X2V4aXN0cygnZ3ppcCcsICR1bmNydXNoZXJzKSkgew0KCQkJ JHppcCA9IG5ldyBzbWRfYXRfZ3ppcF9maWxlKGJhc2VuYW1lKCRmaWxlKSk7DQoJCQkkemlw LT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIsICdvdmVyd3JpdGUn ID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRtZXNzYWdlID0gc21k X2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQgPT0gJ3RiejInICYm IGFycmF5X2tleV9leGlzdHMoJ2J6aXAyJywgJHVuY3J1c2hlcnMpKSB7DQoJCQkkemlwID0g bmV3IHNtZF9hdF9iemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNldF9v cHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4gMSkp Ow0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGFyJykgew0KCQkJJHpp cCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNl dF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4g MSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSB7DQoJCQkkbWVzc2FnZSA9IGFycmF5KHNt ZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnLCBhcnJheSgne2NydXNo fScgPT4gJGV4dCkpLCBFX1dBUk5JTkcpOw0KCQl9DQoNCgkJLy8gUmVtb3ZlIHRoZSB0ZW1w b3JhcnkgZmlsZQ0KCQl1bmxpbmsoJGZpbGUpOw0KCX0gZWxzZSB7DQoJCSRtZXNzYWdlID0g c21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRfbGlzdCgkbWVzc2Fn ZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0 X3VwbG9hZF9pbWFnZSgpIHsNCglnbG9iYWwgJGZpbGVfbWF4X3VwbG9hZF9zaXplOw0KDQoJ ZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ2lkJykpKSk7DQoJJF9QT1NUWydza2luJ10g PSAkc2tpbiA9ICRpZDsNCg0KCSRuYW1lID0gJF9GSUxFU1sndGhlZmlsZSddWyduYW1lJ107 DQoJJGZpbGUgPSBnZXRfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9u YW1lJ10pOw0KCSRtZXNzYWdlPScnOw0KDQoJaWYgKCRmaWxlID09PSBmYWxzZSkgew0KCQkk bWVzc2FnZSA9IGdUeHQoJ2ZpbGVfdXBsb2FkX2ZhaWxlZCcpIC4iICRuYW1lIC0gIi51cGxv YWRfZ2V0X2Vycm9ybXNnKCRfRklMRVNbJ3RoZWZpbGUnXVsnZXJyb3InXSk7DQoJCXNtZF9h dF9lZGl0KCRtZXNzYWdlKTsNCgl9DQoNCgkkc2l6ZSA9IGZpbGVzaXplKCRmaWxlKTsNCglp ZiAoJGZpbGVfbWF4X3VwbG9hZF9zaXplIDwgJHNpemUpIHsNCgkJdW5saW5rKCRmaWxlKTsN CgkJJG1lc3NhZ2UgPSBnVHh0KCdmaWxlX3VwbG9hZF9mYWlsZWQnKSAuIiAkbmFtZSAtICIu dXBsb2FkX2dldF9lcnJvcm1zZyhVUExPQURfRVJSX0ZPUk1fU0laRSk7DQoJCXNtZF9hdF9l ZGl0KCRtZXNzYWdlKTsNCgl9DQoNCgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRz a2luKTsNCgkkbmV3X3NraW4gPSAkc2tpbmZvWyduYW1lJ107DQoJJG5ld3BhdGggPSAkc2tp bmZvWydwYXRoJ107DQoNCglpZiAoJG5ld19za2luICYmICRmaWxlKSB7DQoJCWlmKHNoaWZ0 X3VwbG9hZGVkX2ZpbGUoJGZpbGUsICRuZXdwYXRoLiRuYW1lKSkgew0KCQkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgndXBsb2FkX3N1Y2Nlc3MnKTsNCgkJfSBlbHNlIHsNCgkJCXVubGlu aygkZmlsZSk7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1cGxvYWRfZmFpbGVkJyk7 DQoJCX0NCgl9IGVsc2Ugew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZv Jyk7DQoJfQ0KDQoJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9kZWxldGVfaW1hZ2UoKSB7DQoJZ2xv YmFsICRzbWRfY29yZV90aGVtZXM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn c2tpbicpKSkpOw0KCSRmaWxlX2xpc3QgPSBncHMoJ3NtZF9hdF9pbWFnZXMnKTsNCgkkbWVz c2FnZT0nJzsNCg0KCWlmIChlbXB0eSgkZmlsZV9saXN0KSkgew0KCQkkbWVzc2FnZSA9IHNt ZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJfSBlbHNlIHsNCgkJaWYgKGluX2FycmF5KCRz a2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgn Y29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJfSBlbHNl IHsNCgkJCWZvcmVhY2ggKCRmaWxlX2xpc3QgYXMgJGltYWdlKSB7DQoJCQkJJHBhdGggPSB0 eHBhdGguRFMuJGltYWdlOw0KCQkJCXVubGluaygkcGF0aCk7DQoJCQl9DQoJCX0NCgl9DQoN CglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X2RlbGV0ZSgpIHsNCglnbG9iYWwgJHNtZF9jb3JlX3Ro ZW1lcywgJHRoZW1lLCAkc21kX2F0X3ByaXZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJZXh0cmFj dChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCAnZmlsZScpKSkpOw0KCSRtZXNzYWdlPScn Ow0KDQoJaWYgKCRmaWxlKSB7DQoJCS8vIEVkaXRpbmcgYSBza2luLCB0aHVzIGRlbGV0aW5n IGEgc2luZ2xlIGZpbGUNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVz KSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJy YXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgkJ fSBlbHNlIHsNCgkJCSRkZWwgPSB1bmxpbmsoVEhFTUUuJHNraW4uRFMuJGZpbGUpOw0KCQkJ aWYgKCRkZWwpIHsNCgkJCQkkbWVzc2FnZSA9IGdUeHQoJ2ZpbGVfZGVsZXRlZCcsIGFycmF5 KCd7bmFtZX0nID0+ICRmaWxlKSk7DQoJCQkJJF9QT1NUWydmaWxlJ10gPSAnJzsgLy8gQ2xl YXIgdGhlIHZhcmlhYmxlIHNvIHRoZSBmaWxlbmFtZSBkb2Vzbid0IGFwcGVhciBvbiB0aGUg ZWRpdCBwYWdlDQoJCQl9IGVsc2Ugew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2Zp bGVfbm90X2RlbGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZmlsZSkpOw0KCQkJfQ0KCQl9 DQoJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXko JHNraW4sICRzbWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0 KCdjb3JlX3RoZW1lJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJCXNtZF9hdF9s aXN0KCRtZXNzYWdlKTsNCgkJfSBlbHNlIHsNCgkJCS8vIFZpZXdpbmcgdGhlIHNraW4gbGlz dCwgdGh1cyBkZWxldGluZyB0aGUgd2hvbGUgc2tpbg0KCQkJJHNraW5kaXIgPSBUSEVNRS4k c2tpbjsNCgkJCWlmICghc21kX3JtZGlyX3JlY3Vyc2l2ZSgkc2tpbmRpcikpIHsNCgkJCQkk bWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdkZWxldGVfZmFpbGVkJyk7DQoJCQl9IGVsc2Ugew0K CQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3NraW5fZGVsZXRlZCcsIGFycmF5KCd7bmFt ZX0nID0+ICRza2luKSk7DQoJCQl9DQoNCgkJCS8vIEhhbmRsZSBzaXR1YXRpb25zIGlmIGN1 cnJlbnQgc2tpbiBoYXMgYmVlbiBkZWxldGVkDQoJCQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0 aC5EUy5USEVNRS4kc2tpbikpIHsNCgkJCQkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZz KCk7DQoNCgkJCQkvLyBSZXNldCB0aGUgZ2xvYmFsIHNraW4gaW4gY2FzZSBpdCdzIGJlZW4g ZGVsZXRlZA0KCQkJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9i YWxfc2tpbiddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddIDogJyc7DQoJ CQkJJGdibF9za2luID0gKCRnYmxfc2tpbiAhPSAnJyAmJiBmaWxlX2V4aXN0cyh0eHBhdGgu RFMuVEhFTUUuJGdibF9za2luKSkgPyAkZ2JsX3NraW4gOiAnY2xhc3NpYyc7DQoJCQkJc2V0 X3ByZWYoJ3NtZF9hdF9nbG9iYWxfc2tpbicsICRnYmxfc2tpbiwgJHNtZF9hdF9ldmVudCwg UFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJc2V0X3ByZWYoJ3RoZW1lX25hbWUn LCAkZ2JsX3NraW4pOw0KDQoJCQkJJHNraW4gPSBnZXRfcHJlZignc21kX3NraW4nKTsNCgkJ CQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kc2tpbikpIHsNCgkJCQkJJHNr aW4gPSAkZ2JsX3NraW47DQoJCQkJfQ0KCQkJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2lu LCAnc21kX2F0JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRF KTsNCgkJCX0NCgkJCSRfR0VUWydza2luJ10gPSAkc2tpbjsNCgkJCSRfR0VUWyduZXh0c3Rl cCddID0gJ3NtZF9hdF9saXN0JzsNCgkJCXNtZF9hdF9zd2l0Y2goJG1lc3NhZ2UpOw0KCQl9 DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9h dF9zYXZlKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywnbmV3X3Nr aW4nLCdmaWxlJywnc21kX2F0X2VkaXRzJykpKSk7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgi c3NjIiwgImNzcyIsICJqcyIsICJwaHAiKTsNCgkkbWVzc2FnZSA9ICRleHRyYU1zZyA9ICcn Ow0KCSRmaWxlID0gdHJpbSgkZmlsZSk7DQoJJG5ld19za2luID0gdHJpbSgkbmV3X3NraW4p Ow0KCSRtc2dsZXYgPSAwOw0KDQoJLy8gTmV3IGZpbGUNCglpZiAoISRmaWxlICYmICRuZXdf c2tpbikgew0KCQkkZmlsZSA9ICRuZXdfc2tpbjsNCgkJJGV4dCA9IGFycmF5X3BvcChleHBs b2RlICgnLicsJGZpbGUpKTsNCgkJaWYgKHN0cnRvbG93ZXIoJGZpbGUpICE9ICdyZWFkbWUn ICYmICgkZXh0ID09ICcnIHx8ICFpbl9hcnJheSgkZXh0LCAkZWRpdGFibGUpKSkgew0KCQkJ JG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZmlsZXR5cGUnKS5zbWRfYXRf Z1R4dCgndW5zdXBwb3J0ZWRfZnVkZ2UnKTsNCgkJCSRtc2dsZXYgPSBFX1dBUk5JTkc7DQoJ CQkkX1BPU1RbJ2ZpbGUnXSA9ICRmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKCRtZXNzYWdlPT0n Jykgew0KCQkkc2tpbmRpciA9IFRIRU1FLiRza2luLkRTOw0KDQoJCSRmbmFtZSA9IHNhbml0 aXplRm9yRmlsZSgkZmlsZSk7DQoJCSRuZXdfc2tpbiA9IHJhd3VybGVuY29kZSgkbmV3X3Nr aW4pOw0KCQkkX1BPU1RbJ25ld19za2luJ10gPSAkbmV3X3NraW47DQoNCgkJJHNtZF9hdF9l ZGl0cyA9IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJHNtZF9hdF9lZGl0cykp OyAvLyBuZXdsaW5lIHdvcmthcm91bmQNCg0KCQlpZiAoJGZuYW1lKSB7DQoJCQkkZmlsZXBh dGggPSAkc2tpbmRpci5EUzsNCgkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVwYXRoLiRmbmFt ZSkpIHsNCgkJCQkkcmV0ID0gdG91Y2goJGZpbGVwYXRoLiRmbmFtZSk7DQoJCQkJaWYgKCRy ZXQgPT09IGZhbHNlKSB7DQoJCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ21rZGlyX2Zh aWxlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZSkpOw0KCQkJCX0NCgkJCX0NCg0KCQkJ Ly8gQXNzdW1pbmcgbm8gZXJyb3JzIHNvIGZhci4uLg0KCQkJaWYgKCRtZXNzYWdlID09ICcn KSB7DQoJCQkJJGZoID0gZm9wZW4oJGZpbGVwYXRoLiRmbmFtZSwgJ3diJyk7DQoJCQkJZndy aXRlKCRmaCwgJHNtZF9hdF9lZGl0cyk7DQoJCQkJZmNsb3NlKCRmaCk7DQoNCgkJCQlpZiAo JGZuYW1lICE9ICRuZXdfc2tpbikgew0KCQkJCQkkcmVzID0gcmVuYW1lKCRmaWxlcGF0aC4k Zm5hbWUsICRmaWxlcGF0aC4kbmV3X3NraW4pOw0KCQkJCQkkZXh0cmFNc2cgPSAoJHJlcykg PyBzbWRfYXRfZ1R4dCgncmVuYW1lZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikp IDogc21kX2F0X2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsNCgkJCQl9DQoNCgkJCQkvLyBQcm9j ZXNzIGFueSBjc3MgcmVwbGFjZW1lbnRzDQoJCQkJJGZpbGViaXRzID0gZXhwbG9kZSAoJy4n LCgoJGZuYW1lPT0kbmV3X3NraW4pPyAkZm5hbWUgOiAkbmV3X3NraW4pKTsNCgkJCQkkY3Nz ZmlsZSA9ICRmaWxlYml0c1swXTsNCgkJCQkkZXh0ID0gYXJyYXlfcG9wKCRmaWxlYml0cyk7 DQoJCQkJaWYgKCRleHQgPT0gJ3NzYycpIHsNCgkJCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5 KCk7DQoJCQkJCSRudW1fcmVwMSA9IHByZWdfbWF0Y2hfYWxsKCcvKFxAW0EtWmEtejAtOV9d Kyk6XHMqKC4qKTsvJywgJHNtZF9hdF9lZGl0cywgJG1hdGNoZXMxKTsNCgkJCQkJJG51bV9y ZXAyID0gcHJlZ19tYXRjaF9hbGwoJy8oXEBbQS1aYS16MC05X10rKTpccypceyguKj8pXH0v cycsICRzbWRfYXRfZWRpdHMsICRtYXRjaGVzMik7DQoNCgkJCQkJLy8gU2ltcGxlIHJlcGxh Y2VtZW50cw0KCQkJCQlmb3JlYWNoKCRtYXRjaGVzMSBhcyAkaWR4ID0+ICRyZXBhcnIpIHsN CgkJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJCQkvLyBSZW1vdmUgdGhlIHZhciBkZWZp bml0aW9ucw0KCQkJCQkJCWZvcmVhY2ggKCRyZXBhcnIgYXMgJHJlcCkgew0KCQkJCQkJCQkk c21kX2F0X2VkaXRzID0gc3RyX3JlcGxhY2UoJHJlcCwgJycsJHNtZF9hdF9lZGl0cyk7DQoJ CQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKCRpZHggPT0gMSkgew0KCQkJCQkJCWZvcmVh Y2ggKCRyZXBhcnIgYXMgJGpkeCA9PiAkcmVwKSB7DQoJCQkJCQkJCSRyZXBsYWNlbWVudHNb JHJlcF0gPSAkbWF0Y2hlczFbMl1bJGpkeF07DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9 DQoNCgkJCQkJLy8gTXVsdGktbGluZSByZXBsYWNlbWVudHMNCgkJCQkJZm9yZWFjaCgkbWF0 Y2hlczIgYXMgJGlkeCA9PiAkcmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7DQoJ CQkJCQkJLy8gUmVtb3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJCQlmb3JlYWNoICgk cmVwYXJyIGFzICRyZXApIHsNCgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNl KCRyZXAsICcnLCRzbWRfYXRfZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlm ICgkaWR4ID09IDEpIHsNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJl cCkgew0KCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyRyZXAuJzsnXSA9IHRyaW0oJG1hdGNoZXMy WzJdWyRqZHhdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBHZW5l cmF0ZSBhbmQgd3JpdGUgdGhlIG5ldyBjc3MgZmlsZQ0KCQkJCQkkc21kX2F0X2VkaXRzID0g dHJpbShzdHJ0cigkc21kX2F0X2VkaXRzLCAkcmVwbGFjZW1lbnRzKSk7DQoJCQkJCSRmaCA9 IGZvcGVuKCRmaWxlcGF0aC4kY3NzZmlsZS4nLmNzcycsICd3YicpOw0KCQkJCQlmd3JpdGUo JGZoLCAkc21kX2F0X2VkaXRzKTsNCgkJCQkJZmNsb3NlKCRmaCk7DQoJCQkJCWlmICgkZm5h bWUgIT0gJG5ld19za2luKSB7DQoJCQkJCQkkb2xkZm5hbWUgPSBleHBsb2RlICgnLicsICRm bmFtZSk7DQoJCQkJCQkkb2xkZm5hbWUgPSAkb2xkZm5hbWVbMF0uJy5jc3MnOw0KCQkJCQkJ JHJlcyA9IEB1bmxpbmsoJGZpbGVwYXRoLiRvbGRmbmFtZSk7DQoJCQkJCX0NCgkJCQl9DQoN CgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdmaWxlX3NhdmVkJywgYXJyYXkoJ3tuYW1l fScgPT4gJGZuYW1lKSkuYnIuJGV4dHJhTXNnOw0KCQkJfQ0KCQl9DQoJfQ0KCXNtZF9hdF9l ZGl0KGFycmF5KCRtZXNzYWdlLCAkbXNnbGV2KSk7DQp9DQoNCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyBQUkVGUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfYXRfZ2V0X3ByZWZzKCkgew0KCWdsb2JhbCAkc21kX2F0X3ByZWZzOw0K CSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywnIixhcnJheV9rZXlzKCRzbWRfYXRf cHJlZnNbMF0pKSk7DQoJJHJzID0gc2FmZV9yb3dzKCduYW1lLHZhbCcsJ3R4cF9wcmVmcycs J25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7DQoJJGF0X3ByZWZzID0gYXJyYXkoKTsNCglm b3JlYWNoICgkcnMgYXMgJHByZWZhcnIpIHsNCgkJJGF0X3ByZWZzWyRwcmVmYXJyWyduYW1l J11dID0gJHByZWZhcnJbJ3ZhbCddOw0KCX0NCglyZXR1cm4gJGF0X3ByZWZzOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9vcHRpb25zKCRl dmVudCwgJHN0ZXAsICRtZXNzYWdlPScnKSB7DQoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfc2V0 dXAoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X3ByZWZzLCAkc21k X2F0X2V2ZW50LCAkdGhlbWUsICRzbWRfY29yZV90aGVtZXM7DQoNCgkkbnVtUmVxUHJlZnMg PSBjb3VudCgkc21kX2F0X3ByZWZzWzBdKTsNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3By ZWZzKCk7DQoJJG51bVJvd3MgPSBjb3VudCgkYXRfcHJlZnMpOw0KDQoJcGFnZXRvcChnVHh0 KCdwcmVmcycpLCRtZXNzYWdlKTsNCg0KCS8vIFl1aywgd2h5J3MgdGhpcyBub3QgYXZhaWxh YmxlIGdsb2JhbGx5PyENCgkkbGV2ZWxzID0gYXJyYXkoDQovLwkJMSA9PiBnVHh0KCdwdWJs aXNoZXInKSwNCgkJMiA9PiBnVHh0KCdtYW5hZ2luZ19lZGl0b3InKSwNCgkJMyA9PiBnVHh0 KCdjb3B5X2VkaXRvcicpLA0KCQk0ID0+IGdUeHQoJ3N0YWZmX3dyaXRlcicpLA0KCQk1ID0+ IGdUeHQoJ2ZyZWVsYW5jZXInKSwNCgkJNiA9PiBnVHh0KCdkZXNpZ25lcicpLA0KCSk7DQoJ JG51bUxldnMgPSBjb3VudCgkbGV2ZWxzKTsNCg0KCS8vIFNwbGl0IHRoZSB1c2VyIHNraW4g bGlzdA0KCSR1c2tpbnMgPSBhcnJheSgpOw0KCWlmIChpc3NldCgkYXRfcHJlZnNbJ3NtZF9h dF91c2VyX2xpc3QnXSkpIHsNCgkJJHVza2lucyA9IGV4cGxvZGUoJywnLCAkYXRfcHJlZnNb J3NtZF9hdF91c2VyX2xpc3QnXSk7DQoJfQ0KDQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAx Ow0KCSRjbHJCdG4gPSAnIFs8c3BhbiBpZD0ic21kX2NsciIgY2xhc3M9InNtZF9mYWtlYnRu Ij4nLnNtZF9hdF9nVHh0KCdjbGVhcicpLic8L3NwYW4+XSc7DQoJJGJ0blNldCA9IGZJbnB1 dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9hdF9nVHh0KCdzZXQnKSwgJ3B1Ymxpc2gnKTsN CgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwg J3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlv bj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4nJiMzODtzdGVwPXNtZF9hdF9wcmVmc19pbnN0 YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0 JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsNCgkkYnRuUmVtb3Zl ID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50 LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5l Ij4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAnc21hbGxl cmJveCcpLic8L2Zvcm0+JzsNCgkkYnRuTGlzdCA9ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhy ZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9 PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwvYT48YnIgLz4nOw0KCSRi dG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7DQoJJHJhZEJ0bnMg PSBhcnJheSgNCgkJc21kX2F0X2dUeHQoJ3Blcl9zaXRlJyksDQoJCXNtZF9hdF9nVHh0KCdw ZXJfZ3JvdXAnKSwNCgkJc21kX2F0X2dUeHQoJ3Blcl91c2VyJyksDQoJKTsNCg0KCWVjaG8g c3RhcnRUYWJsZSgnbGlzdCcpOw0KCWlmICgkbnVtUm93cyA9PSAkbnVtUmVxUHJlZnMpIHsN CgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZA0KCQkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRf c2tpbnMoKTsNCg0KCQkvLyBzZWxlY3RJbnB1dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1 ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNhc2UNCgkJJHNraW5zZWwgPSBhcnJheSgpOw0K CQlmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtleTEgPT4gJHZhbHVlMSkgew0KCQkJaWYgKHNt ZF9hdF9leGlzdHMoJHZhbHVlMSkpIHsNCgkJCQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2lu X2xpc3RbJGtleTFdOw0KCQkJfQ0KCQl9DQoJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxf c2tpbiddICE9ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAkdGhl bWUtPm5hbWU7DQoNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc190 aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpIC4gdGRhKCRidG5SZW1vdmUuJGJ0bkxpc3QsICRi dG5TdHlsZSkgKTsNCgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVu dD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3RlcD1zbWRfYXRfcHJlZnNfdXBkYXRlIiBvbnN1 Ym1pdD0icmV0dXJuIHNtZF9wcmVzdWIoKTsiPic7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9n VHh0KCdjYXNlX3NvcnQnKSkudGRhKHllc25vUmFkaW8oJ3NtZF9hdF9jYXNlX3NvcnQnLCAk YXRfcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQnXSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9h dF9jYXNlX3NvcnQiJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnY3J1c2hfdHlw ZScpKS50ZGEocmFkaW9TZXQoc21kX2F0X2NydXNoX29wdGlvbnMoKSwgJ3NtZF9hdF9jcnVz aCcsICRhdF9wcmVmc1snc21kX2F0X2NydXNoJ10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRf YXRfY3J1c2giJykpOw0KCQllY2hvIHRyKHRkYShzbWRfYXRfZ1R4dCgnbGF5b3V0JykpLnRk YShyYWRpb1NldChhcnJheShzbWRfYXRfZ1R4dCgnbGF5b3V0X2xpc3QnKSwgc21kX2F0X2dU eHQoJ2xheW91dF9ncmlkJykpLCAnc21kX2F0X2xheW91dCcsICRhdF9wcmVmc1snc21kX2F0 X2xheW91dCddKSwgJyB3aWR0aD0iMjQwIiBpZD0ic21kX2F0X2xheW91dCInKSk7DQoJCWVj aG8gdHIodGRhKHNtZF9hdF9nVHh0KCd0aHVtYnNpemUnKSkudGRhKGZJbnB1dCgndGV4dCcs ICdzbWRfYXRfdHcnLCAkYXRfcHJlZnNbJ3NtZF9hdF90dyddLCcnLCcnLCcnLDQpLnNtZF9h dF9nVHh0KCd0aW1lcycpLmZJbnB1dCgndGV4dCcsICdzbWRfYXRfdGgnLCAkYXRfcHJlZnNb J3NtZF9hdF90aCddLCcnLCcnLCcnLDQpKSk7DQoJCWVjaG8gdHIoDQoJCQl0ZChzbWRfYXRf Z1R4dCgnZ2xvYmFsX3NraW4nKSkNCgkJCS50ZChzZWxlY3RJbnB1dCgnc21kX2F0X2dsb2Jh bF9za2luJywgJHNraW5zZWwsICRnYmxfc2tpbiwgMCwgMCkpDQoJCSk7DQoJCWVjaG8gdHIo dGRhKHNtZF9hdF9nVHh0KCdza2luX3N5c3RlbScpKS50ZGEocmFkaW9TZXQoJHJhZEJ0bnMs ICdzbWRfYXRfc3lzdGVtJywgJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pLCAnIHdpZHRo PSIyNDAiIGlkPSJzbWRfYXRfcmFkaW8iJykpOw0KDQoJCS8vIE9wdGlvbiAxDQoJCSRwcml2 X2xpc3QgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3ByaXZzIiBuYW1lPSJzbWRfYXRfcHJpdnNb XSIgY2xhc3M9Imxpc3QiIHNpemU9IicuJG51bUxldnMuJyIgbXVsdGlwbGU9Im11bHRpcGxl Ij4nOw0KCQlmb3JlYWNoICgkbGV2ZWxzIGFzICRsZXZpZCA9PiAkbGV2bmFtZSkgew0KCQkJ JHByaXZfbGlzdCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kbGV2aWQuJyI+Jy4kbGV2bmFtZS4n PC9vcHRpb24+JzsNCgkJfQ0KCQkkcHJpdl9saXN0IC49ICc8L3NlbGVjdD4nOw0KDQoJCS8v IE5vdGUgdGhlIGhpZGRlbiBza2luIGdyb3VwIGJveDsgalF1ZXJ5IGtlZXBzIHRyYWNrIG9m IGFueSBsaXN0IGNoYW5nZXMgYW5kIGtlZXBzIGl0IHVwZGF0ZWQNCgkJJHNlbGEgPSBzbWRf YXRfZ1R4dCgnc2tpbl9ncm91cHMnKTsNCgkJJHNlbGIgPSBoSW5wdXQoJ3NtZF9hdF9ncm91 cF9saXN0JywgJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKTsNCgkJJHNlbGIgLj0g JzxzZWxlY3QgaWQ9InNtZF9hdF9ncnBzIiBuYW1lPSJzbWRfYXRfZ3JwcyIgY2xhc3M9Imxp c3QiIHNpemU9IicuJG51bUxldnMuJyI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAk YXNraW4pIHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2VsYiAu PSAnPG9wdGlvbiB2YWx1ZT0iJy4kYXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7DQoJ CQl9DQoJCX0NCgkJJHNlbGIgLj0gJzwvc2VsZWN0Pic7DQoJCWVjaG8gdHIodGRhKCRzZWxh LCAnIGNsYXNzPSJzbWRfYXRfc2VsMSBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLiRwcml2 X2xpc3QsICcgd2lkdGg9IjQwMCIgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykp Ow0KDQoJCS8vIE9wdGlvbiAyDQoJCSRzZWxhID0gc21kX2F0X2dUeHQoJ2FsbG93ZWRfc2tp bnMnKTsNCgkJJHNlbGIgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3VzZXJfbGlzdCIgbmFtZT0i c21kX2F0X3VzZXJfbGlzdFtdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iOCIgbXVsdGlwbGU9Im11 bHRpcGxlIj4nOw0KCQlmb3JlYWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYg KHNtZF9hdF9leGlzdHMoJGFza2luKSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVl PSInLiRhc2tpbi4nIicuKChpbl9hcnJheSgkYXNraW4sICR1c2tpbnMpKSA/ICcgc2VsZWN0 ZWQ9InNlbGVjdGVkIicgOiAnJykuJz4nLiRhc2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJ fQ0KCQkkc2VsYiAuPSAnPC9zZWxlY3Q+Jy4kY2xyQnRuOw0KCQllY2hvIHRyKHRkYSgkc2Vs YSwgJyBjbGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSAuIHRkYSgkc2VsYiwgJyB3 aWR0aD0iMjQwIiBjbGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSk7DQoJCWVjaG8g dHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgkJZWNobyAnPC9mb3JtPic7DQoJfSBl bHNlIGlmICgkbnVtUm93cyA+IDAgJiYgJG51bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsNCgkJ ZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyDQoJ CQkJCQkuc21kX2F0X2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCQku c21kX2F0X2dUeHQoJ3ByZWZzX3NvbWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0K CQllY2hvIHRyKHRkYSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGws ICRidG5TdHlsZSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdw cmVmc19ub3RfaW5zdGFsbGVkJyksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRh KCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJ ZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoNCi8vIENv bmNhdGVuYXRlIGNoZWNrYm94IG9wdGlvbnMgZm9yIHN0b3JhZ2UNCmZ1bmN0aW9uIHNtZF9h dF9wcmVmc3dhcChzZWxWYWx1ZSkgew0KCWZvciAoaWR4PTA7IGlkeCA8IDM7IGlkeCsrKSB7 DQoJCWlmIChpZHg9PXNlbFZhbHVlKSB7DQoJCQlqUXVlcnkoIi5zbWRfYXRfc2VsIitpZHgp LnNob3coKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lkeCkuaGlk ZSgpOw0KCQl9DQoJfQ0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiaW5wdXRb bmFtZT0nc21kX2F0X3N5c3RlbSddIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzbWRfYXRf cHJlZnN3YXAodGhpcy52YWx1ZSk7DQoJfSk7DQoNCglqUXVlcnkoJyNzbWRfY2xyJykuY2xp Y2soZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSgnI3NtZF9hdF91c2VyX2xpc3Qgb3B0aW9uJyku YXR0cigic2VsZWN0ZWQiLCAiIik7DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfZ3JwcyIp LmNoYW5nZShmdW5jdGlvbigpIHsNCgkJc2Vsc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsN Cg0KCQkvLyBDbGVhciB0aGUgb2xkIHByaXZzIGxpc3QgYW5kIGdyYWIgdGhlIGN1cnJlbnQg bGlzdCBmcm9tIHRoZSBoaWRkZW4gZmllbGQNCgkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9w dGlvbiIpLmF0dHIoInNlbGVjdGVkIixmYWxzZSk7DQoJCXZhciBncnBsaXN0ID0galF1ZXJ5 KCJpbnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBncnBz ID0gZ3JwbGlzdC5zcGxpdCgnLCcpOw0KCQl2YXIgY250ID0gZ3Jwcy5sZW5ndGg7DQoJCWZv ciAodmFyIGlkeCA9IDA7IGlkeCA8IGNudDsgaWR4KyspIHsNCgkJCXByaXZzID0gZ3Jwc1tp ZHhdLnNwbGl0KCc6Jyk7DQoJCQlza2luaWQgPSBwcml2cy5zaGlmdCgpOw0KCQkJaWYgKHNr aW5pZCA9PSBzZWxza2luKSB7DQoJCQkJbnVtUHJpdnMgPSBwcml2cy5sZW5ndGg7DQoJCQkJ Zm9yIChqZHggPSAwOyBqZHggPCBudW1Qcml2czsgamR4KyspIHsNCgkJCQkJalF1ZXJ5KCIj c21kX2F0X3ByaXZzIG9wdGlvblt2YWx1ZT0nIitwcml2c1tqZHhdKyInXSIpLmF0dHIoInNl bGVjdGVkIiwgdHJ1ZSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSk7DQoNCglqUXVlcnkoIiNz bWRfYXRfcHJpdnMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBqUXVlcnko IiNzbWRfYXRfZ3JwcyBvcHRpb246c2VsZWN0ZWQiKS52YWwoKTsNCgkJdmFyIG91dCA9IFtd Ow0KCQl2YXIgcHJpdnMgPSBbXTsNCgkJcHJpdnMucHVzaChzZWxza2luKTsNCgkJalF1ZXJ5 KCIjc21kX2F0X3ByaXZzIG9wdGlvbjpzZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJ CQlwcml2cy5wdXNoKGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCX0pOw0KCQlpZiAocHJpdnMu bGVuZ3RoID09IDEpIHsNCgkJCXByaXZzLnBvcCgpOw0KCQl9IGVsc2Ugew0KCQkJb3V0LnB1 c2gocHJpdnMuam9pbigiOiIpKTsNCgkJfQ0KCQl2YXIgaGlkbGlzdCA9IGpRdWVyeSgiaW5w dXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOw0KCQl2YXIgcHJldmxpc3Qg PSBoaWRsaXN0LnNwbGl0KCcsJyk7DQoJCXZhciBwcmV2Y250ID0gcHJldmxpc3QubGVuZ3Ro Ow0KDQoJCWpRdWVyeSgiI3NtZF9hdF9ncnBzIG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7 DQoJCQljdXJyc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJCWlmIChjdXJyc2tpbiAh PSBzZWxza2luKSB7DQoJCQkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgcHJldmNudDsgaWR4 KyspIHsNCgkJCQkJcHJldnByaXZzID0gcHJldmxpc3RbaWR4XS5zcGxpdCgnOicpOw0KCQkJ CQlza2luaWQgPSBwcmV2cHJpdnMuc2hpZnQoKTsNCgkJCQkJLy8gR2VuZXJhdGUgdGhlIHBy aXYgbGlzdCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBza2luLCByZW1vdmluZyBhbnkg ZHVwbGljYXRlIHByaXZzIHNldCBlbHNld2hlcmUNCgkJCQkJaWYgKHNraW5pZCA9PSBjdXJy c2tpbikgew0KCQkJCQkJdG1wb3V0ID0gW107DQoJCQkJCQl0bXBvdXQucHVzaChza2luaWQp Ow0KCQkJCQkJZm9yICh0aGlzcHJpdiBpbiBwcmV2cHJpdnMpIHsNCgkJCQkJCQlpZiAoalF1 ZXJ5LmluQXJyYXkocHJldnByaXZzW3RoaXNwcml2XSwgcHJpdnMpIDwgMCkgew0KCQkJCQkJ CQl0bXBvdXQucHVzaChwcmV2cHJpdnNbdGhpc3ByaXZdKTsNCgkJCQkJCQl9DQoJCQkJCQl9 DQoJCQkJCQlpZiAodG1wb3V0Lmxlbmd0aCA+IDEpIHsNCgkJCQkJCQlvdXQucHVzaCh0bXBv dXQuam9pbigiOiIpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSk7DQoJ CWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbChvdXQpOw0K CX0pOw0KDQoJLy8gRGlzcGxheSBhIHRvb2x0aXAgc2hvd2luZyB0aGUgY3VycmVudGx5LWFz c2lnbmVkIHNraW4gd2hlbiBob3ZlcmluZyBvdmVyIGEgcHJpdmlsZWdlIGxldmVsDQoJalF1 ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlvbiIpLmhvdmVyKGZ1bmN0aW9uKCkgew0KCQlob3Zp dGVtID0galF1ZXJ5KHRoaXMpLnZhbCgpOw0KCQlncnBzID0galF1ZXJ5KCJpbnB1dFtuYW1l PSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCWl0ZW1zID0gZ3Jwcy5zcGxpdCgi LCIpOw0KCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGl0ZW1zLmxlbmd0aDsgaWR4KyspIHsNCgkJ CXNraW56ID0gaXRlbXNbaWR4XS5zcGxpdCgiOiIpOw0KCQkJZm9yIChqZHggPSAxOyBqZHgg PCBza2luei5sZW5ndGg7IGpkeCsrKSB7DQoJCQkJaWYgKHNraW56W2pkeF0gPT0gaG92aXRl bSkgew0KCQkJCQlqUXVlcnkodGhpcykuYXR0cigidGl0bGUiLCBza2luelswXSk7DQoJCQkJ CWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0sDQoJZnVuY3Rpb24oKSB7DQoJCWpRdWVy eSh0aGlzKS5hdHRyKCJ0aXRsZSIsICIiKTsNCgl9KTsNCglzbWRfYXRfcHJlZnN3YXAoalF1 ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ106Y2hlY2tlZCIpLnZhbCgpKTsNCglq UXVlcnkoIiNzbWRfYXRfcHJpdnMiKS5jaGFuZ2UoKTsNCn0pOw0KPC9zY3JpcHQ+DQo8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPg0KLnNtZF9mYWtlYnRuIHsNCgljb2xvcjojNTU1Ow0KCWN1 cnNvcjpwb2ludGVyOw0KfQ0KI3NtZF9hdF9yYWRpbyBpbnB1dCB7DQoJZmxvYXQ6bGVmdDsN CgljbGVhcjpib3RoOw0KfQ0KI3NtZF9hdF9yYWRpbyBsYWJlbCB7DQoJZmxvYXQ6bGVmdDsN Cn0NCi5zbWRfaGlkZGVuIHsNCglkaXNwbGF5Om5vbmU7DQp9DQo8L3N0eWxlPg0KRU9KUzsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTcGxpdCBhIG11bHRpLWNo YXIgcHJlZmVyZW5jZSB2YWx1ZSBpbnRvIGFuIGFycmF5IG9mIGtleXMvdmFsdWVzLg0KLy8g Tm90ZTogdmFsdWUgaXMgcGFzc2VkIGluIGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9tIHRo ZSBwcmVmcyBhcnJheSBpbiB0aGlzIGZ1bmN0aW9uIC0gaW50ZW50aW9uYWxseQ0KZnVuY3Rp b24gc21kX2F0X3ByZWZfZXhwbG9kZSgkdmFsKSB7DQoJJG9yZGVyID0gYXJyYXlfdmFsdWVz KGFycmF5KHNtZF9hdF9nVHh0KCdjX2d6aXAnKSxzbWRfYXRfZ1R4dCgnY19iemlwJyksc21k X2F0X2dUeHQoJ2NfemlwJykpKTsNCgkkb25vZmYgPSBhcnJheV92YWx1ZXMocHJlZ19zcGxp dCgnLy8nLCAkdmFsLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSkpOw0KCSRvdXQgPSBhcnJh eSgpOw0KCWZvcmVhY2goJG9yZGVyIGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJG91dFso c3RyaW5nKSR2YWx1ZTFdID0gJG9ub2ZmWyRrZXkxXTsNCgl9DQoJcmV0dXJuICRvdXQ7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19pbnN0YWxsKCRzaG93cGFu ZT0nMScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZv cmVhY2ggKCRzbWRfYXRfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKCFm ZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2Fm ZV9pbnNlcnQoJ3R4cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xh c2goJHByZWYpKS4nLCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50PSJz bWRfYWRza2luIicpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgncHJlZnNfaW5zdGFsbGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgkbWVz c2FnZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNfcmVt b3ZlKCRzaG93cGFuZT0nMScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2Fn ZSA9ICcnOw0KCWZvcmVhY2ggKGFycmF5X21lcmdlKCRzbWRfYXRfcHJlZnNbMF0sJHNtZF9h dF9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywn dHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhw X3ByZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCglp ZiAoJHNob3dwYW5lKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2RlbGV0 ZWQnKTsNCgkJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF9hdF9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRzbWRfcGx1Z2lu X3ByZWZzLCAkc21kX2F0X3ByZWZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJJG1lc3NhZ2UgPSAn JzsNCgkkcG9zdCA9IGFycmF5KCk7DQoJJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddID0g Z3BzKCdzbWRfYXRfZ2xvYmFsX3NraW4nKTsNCgkkcG9zdFsnc21kX2F0X3N5c3RlbSddID0g Z3BzKCdzbWRfYXRfc3lzdGVtJyk7DQoJJHBvc3RbJ3NtZF9hdF9sYXlvdXQnXSA9IGdwcygn c21kX2F0X2xheW91dCcpOw0KCSRwb3N0WydzbWRfYXRfY2FzZV9zb3J0J10gPSBncHMoJ3Nt ZF9hdF9jYXNlX3NvcnQnKTsNCgkkcG9zdFsnc21kX2F0X3R3J10gPSBncHMoJ3NtZF9hdF90 dycpOw0KCSRwb3N0WydzbWRfYXRfdGgnXSA9IGdwcygnc21kX2F0X3RoJyk7DQoJaWYgKGdw cygnc21kX2F0X3VzZXJfbGlzdCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfdXNlcl9saXN0J10g PSBqb2luKCcsJywgZ3BzKCdzbWRfYXRfdXNlcl9saXN0JykpOw0KCX0gZWxzZSB7DQoJCSRw b3N0WydzbWRfYXRfdXNlcl9saXN0J10gPSAnJzsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2dy b3VwX2xpc3QnKSkgew0KCQkkcG9zdFsnc21kX2F0X2dyb3VwX2xpc3QnXSA9IGdwcygnc21k X2F0X2dyb3VwX2xpc3QnKTsNCgl9DQoJaWYgKGdwcygnc21kX2F0X2NydXNoJykpIHsNCgkJ JHBvc3RbJ3NtZF9hdF9jcnVzaCddID0gZ3BzKCdzbWRfYXRfY3J1c2gnKTsNCgl9DQoNCgkv LyBTZXQgdGhlIHN5c3RlbS13aWRlIHRoZW1lIHRvIHRoZSBnbG9iYWwgdGhlbWUNCglpZiAo JHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSB7DQoJCXNldF9wcmVmKCd0aGVtZV9uYW1l JywgJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKTsNCgl9DQoNCglmb3JlYWNoICgkc21k X2F0X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3NldCgkcG9zdFsk cHJlZl0pKSB7DQoJCQlzZXRfcHJlZigkcHJlZiwgJHBvc3RbJHByZWZdLCAkc21kX2F0X2V2 ZW50LCAyKTsNCgkJfQ0KCX0NCgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVk Jyk7DQoJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQovLyBVVElMSVRZIEZVTkNUSU9OUw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZ2V0X3ByaXZzKCR1c2VyPScnKSB7DQoJZ2xvYmFs ICR0eHBfdXNlcjsNCgkkdXNlciA9ICgkdXNlcikgPyAkdXNlciA6ICR0eHBfdXNlcjsNCgkk cHJpdnMgPSBzYWZlX2ZpZWxkKCJwcml2cyIsICJ0eHBfdXNlcnMiLCAibmFtZT0nIi5kb1Ns YXNoKCR1c2VyKS4iJyIpOw0KCXJldHVybiAkcHJpdnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2V4aXN0cygkbmFtZSkgew0KCSRpbnN0 YW5jZSA9IHRoZW1lOjpmYWN0b3J5KCRuYW1lKTsNCglyZXR1cm4gJGluc3RhbmNlOw0KfQ0K DQovLyBJZiBwZXItdXNlciBza2luIHN1cHBvcnQgaXMgT0ZGLCB0aGUgZ2xvYmFsIHNraW4g d2lucy4NCi8vIE9uZSBleGNlcHRpb246IGlmIHRoZSB1c2VyIGlzIGFuIGFkbWluLCBhbGxv dyB0aGUgY3VycmVudCBza2luIHRvIHByZXZhaWwgc28gdGhleSBtYXkgc3dpdGNoIHNraW5z IHdpdGggaW1wdW5pdHkNCi8vIGFuZCBub3QgYWZmZWN0IHRoZSBnbG9iYWwgc2tpbg0KZnVu Y3Rpb24gc21kX2F0X3BlcigpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2cywgJHByZWZzLCAk dGhlbWUsICR0eHBfdXNlcjsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsN Cgkkc2tpblN5cyA9IGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3N5c3RlbSddKSA/ICRhdF9w cmVmc1snc21kX2F0X3N5c3RlbSddIDogMDsNCgkkcHJpdnMgPSBzbWRfYXRfZ2V0X3ByaXZz KCk7DQoJJGdibF9za2luID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2lu J10pICYmICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gIT0gJycpID8gJGF0X3By ZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSA6ICcnOw0KCSRnYmxfc2tpbiA9IChzbWRfYXRf ZXhpc3RzKCRnYmxfc2tpbikpID8gJGdibF9za2luIDogJ2NsYXNzaWMnOw0KDQoJc3dpdGNo ICgkc2tpblN5cykgew0KCQljYXNlIDA6DQoJCQkvLyBHbG9iYWwgZm9yY2VkIHNraW4gKGV4 Y2VwdCBhZG1pbnMpDQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRz bWRfYXRfcHJpdnMpKSkgew0KCQkJCXJldHVybiAkZ2JsX3NraW47DQoJCQl9IGVsc2Ugew0K CQkJCS8vIEFkbWlucw0KCQkJCSRhZG1fc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgo JGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAo c21kX2F0X2V4aXN0cygkYWRtX3NraW4pKSA/ICRhZG1fc2tpbiA6ICdjbGFzc2ljJzsNCgkJ CX0NCgkJCWJyZWFrOw0KCQljYXNlIDE6DQoJCQkvLyBHcm91cC1sZXZlbCBmb3JjZWQgc2tp bnMNCgkJCWlmICghaW5fYXJyYXkoJHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2 cykpKSB7DQoJCQkJJGZvcmNlU2tpbnMgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfZ3Jv dXBfbGlzdCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9ncm91cF9saXN0J10gOiAoKCRnYmxf c2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpOw0KDQoJCQkJLy8gU3BsaXQgdGhl IGdyb3VwIHNraW4gbGlzdA0KCQkJCSRnc2tpbnMgPSBhcnJheSgpOw0KCQkJCSRnb3B0cyA9 IGV4cGxvZGUoJywnLCAkZm9yY2VTa2lucyk7DQoJCQkJZm9yZWFjaCAoJGdvcHRzIGFzICRn cnBkZWYpIHsNCgkJCQkJaWYgKCRncnBkZWYgPT0gJycpIGNvbnRpbnVlOw0KCQkJCQkkcHJp dmdycCA9IGV4cGxvZGUoIjoiLCAkZ3JwZGVmKTsNCgkJCQkJJHNraW5pZCA9IGFycmF5X3No aWZ0KCRwcml2Z3JwKTsNCgkJCQkJaWYgKGluX2FycmF5KCRwcml2cywgJHByaXZncnApKSB7 DQoJCQkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJHNraW5pZCkpID8gJHNraW5pZCA6ICdj bGFzc2ljJzs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuICgkZ2JsX3NraW4pID8gJGdi bF9za2luIDogJHRoZW1lLT5uYW1lOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJ CQkkYWRtX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2Js X3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFk bV9za2luKSkgPyAkYWRtX3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJ Y2FzZSAyOg0KCQkJLy8gUGVyLXVzZXIgc2tpbi4gSWYgdXNlciBpcyBub24tYWRtaW4sIGNo ZWNrIHRoZSBza2luIGlzIGluIHRoZSBhbGxvd2VkIGxpc3QNCgkJCWlmICghaW5fYXJyYXko JHByaXZzLCBleHBsb2RlKCcsJywgJHNtZF9hdF9wcml2cykpKSB7DQoJCQkJJHZhbGlkU2tp bnMgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdXNlcl9saXN0J10pKSA/ICRhdF9wcmVm c1snc21kX2F0X3VzZXJfbGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRo ZW1lLT5uYW1lKTsNCgkJCQkkdmFsaWRTa2lucyA9IGRvX2xpc3QoJHZhbGlkU2tpbnMpOw0K CQkJCSR0aGVfc2tpbiA9IGdldF9wcmVmKCdzbWRfc2tpbicsICgoJGdibF9za2luKSA/ICRn Ymxfc2tpbiA6ICR0aGVtZS0+bmFtZSkpOw0KCQkJCXJldHVybiAoaW5fYXJyYXkoJHRoZV9z a2luLCAkdmFsaWRTa2lucykgJiYgc21kX2F0X2V4aXN0cygkdGhlX3NraW4pKSA/ICR0aGVf c2tpbiA6ICcnOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4g PSBnZXRfcHJlZignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhl bWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAk YWRtX3NraW4gOiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmVhZCBhbmQgcmV0dXJuIHRoZSBtYW5pZmVz dCwgaWYgaXQgZXhpc3RzIGFuZCBhZGQgYSBmZXcgb3RoZXIgbmljZXRpZXMgdG8gdGhlIGFy cmF5IGZvciBsYXRlcg0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKSB7DQoJ Z2xvYmFsICRzbWRfY29yZV90aGVtZXM7DQoNCgkkdGhpc190aGVtZSA9IHRoZW1lOjpmYWN0 b3J5KCRza2luKTsNCgkkc2tpbmZvID0gYXJyYXkoKTsNCglpZiAoJHRoaXNfdGhlbWUpIHsN CgkJJHNraW5mbyA9ICR0aGlzX3RoZW1lLT5tYW5pZmVzdCgpOw0KCQkkc2tpbmZvWydkbmFt ZSddID0gZW1wdHkoJHNraW5mb1sndGl0bGUnXSkgPyB1Y3dvcmRzKCR0aGlzX3RoZW1lLT5u YW1lKSA6ICRza2luZm9bJ3RpdGxlJ107DQoJCSRza2luZm9bJ25hbWUnXSA9ICR0aGlzX3Ro ZW1lLT5uYW1lOw0KCQkkc2tpbmZvWydwYXRoJ10gPSAkdGhpc190aGVtZS0+dXJsOw0KCQkk c2tpbmZvWydwaHBmaWxlJ10gPSAkdGhpc190aGVtZS0+cGF0aCgkc2tpbik7DQoJCSRza2lu Zm9bJ2Jhc2VkX29uJ10gPSAnJzsNCgkJJGNvbnRlbnRzID0gZmlsZV9nZXRfY29udGVudHMo JHNraW5mb1sncGhwZmlsZSddKTsNCgkJaWYgKCgkcG9zID0gc3RycG9zKCRjb250ZW50cywg J3RoZW1lOjpiYXNlZF9vbicpKSAhPT0gZmFsc2UpIHsNCgkJCSRiZWdwb3MgPSBzdHJwb3Mo JGNvbnRlbnRzLCAiJyIsICRwb3MpKzE7DQoJCQkkZW5kcG9zID0gc3RycG9zKCRjb250ZW50 cywgIiciLCAkYmVncG9zKTsNCgkJCSRiYXNlID0gc3Vic3RyKCRjb250ZW50cywgJGJlZ3Bv cywgJGVuZHBvcy0kYmVncG9zKTsNCgkJCSRza2luZm9bJ2Jhc2VkX29uJ10gPSAoaW5fYXJy YXkoJGJhc2UsICRzbWRfY29yZV90aGVtZXMpKSA/ICcnIDogJGJhc2U7DQoJCX0NCgkJdW5z ZXQoJHRoaXNfdGhlbWUpOw0KCX0NCglyZXR1cm4gJHNraW5mbzsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBHcmFiIHRoZSB0aHVtYm5haWwgZmlsZW5hbWUgaWYg aXQgZXhpc3RzLCBvcHRpb25hbGx5IHJldHVybiBhIGZvcm1hdHRlZCBpbWcgdGFnDQpmdW5j dGlvbiBzbWRfYXRfZ2V0X3RodW1iKCRza2luLCAkaW1nPTApIHsNCglnbG9iYWwgJHNtZF9h dF9wcmVmczsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkdHcgPSBp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10g OiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXTsNCgkkdGggPSBpc3NldCgkYXRfcHJl ZnNbJ3NtZF9hdF90aCddKSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3By ZWZzWzBdWydzbWRfYXRfdGgnXTsNCgkkdXNlX3RodW1iID0gKCR0dyA9PSAwIHx8ICR0aCA9 PSAwKSA/IGZhbHNlIDogdHJ1ZTsNCg0KCS8vIEFuIGFycmF5IG1lYW5zIHRoZSBtYW5pZmVz dCBoYXMgYWxyZWFkeSBiZWVuIHJlYWQgYW5kIGlzIGJlaW5nIHBhc3NlZCBpbnRvIHRoaXMg ZnVuY3Rpb24NCglpZiAoIWlzX2FycmF5KCRza2luKSkgew0KCQkkc2tpbiA9IHNtZF9hdF9y ZWFkX3NraW5mbygkc2tpbik7DQoJfQ0KCWlmICgkc2tpbikgew0KCQkkc2tpbmRpciA9ICRz a2luWydwYXRoJ107DQoJCSR0aHVtYm5hbWUgPSBnbG9iKCRza2luZGlyLidzY3JlZW5zaG90 LionKTsNCgkJcmV0dXJuICgkaW1nICYmICR1c2VfdGh1bWIgJiYgJHRodW1ibmFtZSAmJiBm aWxlX2V4aXN0cygkdGh1bWJuYW1lWzBdKSkgPyAnPGltZyBzcmM9IicuJHRodW1ibmFtZVsw XS4nIiBhbHQ9IicuKChpc3NldCgkc2tpblsnbmFtZSddKSkgPyAkc2tpblsnbmFtZSddIDog JycpLicgdGh1bWJuYWlsIiBzdHlsZT0iYm9yZGVyOjJweCByaWRnZSAjOTk5O3BhZGRpbmc6 MnB4OyIgd2lkdGg9IicuJHR3LiciIGhlaWdodD0iJy4kdGguJyIgLz4nIDogJyc7DQoJfSBl bHNlIHsNCgkJcmV0dXJuICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfcmVhZF9za2lucygpIHsNCgkkc2tpbl9saXN0ID0gdGhl bWU6Om5hbWVzKCk7DQoJJHNraW5fbGlzdCA9IHNtZF9hdF9zb3J0KCRza2luX2xpc3QpOw0K CXJldHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyBTb3J0IHRoZSBza2lucyBidXQga2VlcCAn Y2xhc3NpYycgYXQgdGhlIHRvcA0KZnVuY3Rpb24gc21kX2F0X3NvcnQoJHNraW5fbGlzdCkg ew0KCWdsb2JhbCAkcHJlZnM7DQoNCgkkY2FzZVNlbnNlID0gaXNzZXQoJHByZWZzWydzbWRf YXRfY2FzZV9zb3J0J10pID8gJHByZWZzWydzbWRfYXRfY2FzZV9zb3J0J10gOiAxOw0KDQoJ aWYoJGNhc2VTZW5zZSkgew0KCQluYXRzb3J0KCRza2luX2xpc3QpOw0KCX0gZWxzZSB7DQoJ CW5hdGNhc2Vzb3J0KCRza2luX2xpc3QpOw0KCX0NCgkkZGZsdF9mb3VuZCA9IGZhbHNlOw0K CWZvcmVhY2ggKCRza2luX2xpc3QgYXMgJHNraW5faWR4ID0+ICRza2luX25hbWUpIHsNCgkJ aWYgKCRza2luX25hbWUgPT0gImNsYXNzaWMiKSB7DQoJCQl1bnNldCgkc2tpbl9saXN0WyRz a2luX2lkeF0pOw0KCQkJJGRmbHRfZm91bmQgPSB0cnVlOw0KCQkJYnJlYWs7DQoJCX0NCgl9 DQoJaWYgKCRkZmx0X2ZvdW5kKSB7DQoJCWFycmF5X3Vuc2hpZnQoJHNraW5fbGlzdCwiY2xh c3NpYyIpOw0KCX0NCg0KCXJldHVybiAkc2tpbl9saXN0Ow0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9saXN0ZGlyKCRzdGFydF9kaXI9Jy4n KSB7DQoJJGZpbGVzID0gYXJyYXkoKTsNCg0KCWlmIChpc19kaXIoJHN0YXJ0X2RpcikpIHsN CgkJJGZoID0gb3BlbmRpcigkc3RhcnRfZGlyKTsNCgkJd2hpbGUgKCgkZmlsZSA9IHJlYWRk aXIoJGZoKSkgIT09IGZhbHNlKSB7DQoJCQkvLyBsb29wIHRocm91Z2ggdGhlIGZpbGVzLCBz a2lwcGluZyAuIGFuZCAuLiwgYW5kIHJlY3Vyc2luZyBpZiBuZWNlc3NhcnkNCgkJCWlmIChz dHJjbXAoJGZpbGUsICcuJyk9PTAgfHwgc3RyY21wKCRmaWxlLCAnLi4nKT09MCkgY29udGlu dWU7DQoJCQkkZmlsZXBhdGggPSAkc3RhcnRfZGlyIC4gJy8nIC4gJGZpbGU7DQoJCQlpZiAo IGlzX2RpcigkZmlsZXBhdGgpICkgew0KCQkJCSRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxl cywgc21kX2F0X2xpc3RkaXIoJGZpbGVwYXRoKSk7DQoJCQl9IGVsc2Ugew0KCQkJCWFycmF5 X3B1c2goJGZpbGVzLCAkZmlsZXBhdGgpOw0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKCRmaCk7 DQoJfSBlbHNlIHsNCg0KCQkvLyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3 aXRoIGFuIGludmFsaWQgbm9uLWRpcmVjdG9yeSBhcmd1bWVudA0KCQkkZmlsZXMgPSBmYWxz ZTsNCgl9DQoNCglyZXR1cm4gJGZpbGVzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIFJlY3Vyc2l2ZSBybWRpcigpIGNvdXJ0ZXN5IG9mIHRoZSBwaHAgbWFudWFs IHVzZXIgY29tbWVudHMNCmZ1bmN0aW9uIHNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVwYXRo KSB7DQoJaWYgKGlzX2RpcigkZmlsZXBhdGgpICYmICFpc19saW5rKCRmaWxlcGF0aCkpIHsN CgkJaWYgKCRkaCA9IG9wZW5kaXIoJGZpbGVwYXRoKSkgew0KCQkJd2hpbGUgKCgkc2YgPSBy ZWFkZGlyKCRkaCkpICE9PSBmYWxzZSkgew0KCQkJCWlmICgkc2YgPT0gJy4nIHx8ICRzZiA9 PSAnLi4nKSBjb250aW51ZTsNCgkJCQlpZiAoIXNtZF9ybWRpcl9yZWN1cnNpdmUoJGZpbGVw YXRoLicvJy4kc2YpKSB7DQoJCQkJCWJyZWFrOyAvLyBEb2gsIGNhbid0IGRlbGV0ZQ0KCQkJ CX0NCgkJCX0NCgkJCWNsb3NlZGlyKCRkaCk7DQoJCX0NCgkJcmV0dXJuIHJtZGlyKCRmaWxl cGF0aCk7DQoJfQ0KCXJldHVybiB1bmxpbmsoJGZpbGVwYXRoKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBGcm9tIFBIUCBtYW51YWwgY29tbWVudHMuIFRoYW5r cyBwdXJlbWFuZ28NCmZ1bmN0aW9uIHNtZF9hdF9pc19kaXIoJGRpcikgew0KCS8vIGJ5cGFz c2VzIG9wZW5fYmFzZWRpciByZXN0cmljdGlvbnMgb2YgaXNfZGlyIGFuZCBmaWxlcGVybXMN CgkkdG1wX2NtZCA9IGBscyAtZGwgJGRpcmA7DQoJJGRpcl9mbGFnID0gJHRtcF9jbWRbMF07 DQoJaWYoJGRpcl9mbGFnIT0iZCIpIHsNCgkJLy8gbm90IGQ7IHVzZSBuZXh0IGNoYXIgKGZp cnN0IGNoYXIgbWlnaHQgYmUgJ3MnIGFuZCBpcyBzdGlsbCBkaXJlY3RvcnkpDQoJCSRkaXJf ZmxhZyA9ICR0bXBfY21kWzFdOw0KCX0NCglyZXR1cm4gKCRkaXJfZmxhZz09ImQiKTsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWtkaXJfcmVj dXJzaXZlKCRwYXRoLCAkbW9kZSA9IDA3NTUpIHsNCgkkcGF0aCA9IChzdHJwb3MoJHBhdGgs ICcvJykgPT09IDApID8gc3Vic3RyKCRwYXRoLCAxKSA6ICRwYXRoOw0KCSRkaXJzID0gZXhw bG9kZShEUywgJHBhdGgpOw0KCSRjb3VudCA9IGNvdW50KCRkaXJzKTsNCgkkcGF0aCA9ICcn Ow0KCWZvciAoJGlkeCA9IDA7ICRpZHggPCAkY291bnQ7ICsrJGlkeCkgew0KCQkkcGF0aCAu PSBEUyAuICRkaXJzWyRpZHhdOw0KCQlpZiAoIXNtZF9hdF9pc19kaXIoJHBhdGgpKSB7DQoJ CQlpZiAoIW1rZGlyKCRwYXRoLCAkbW9kZSkpIHsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9 DQoJCX0NCgl9DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2llKCdz bWRfYXRfcGFnZWJ5JywgZ3BzKCdxdHknKSk7DQoJc21kX2F0X2xpc3QoJycpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1l c3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2czsNCg0KCWV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KCdza2luJywgJ2V2ZW50JywgJ25leHRzdGVwJykpKSk7DQoJJHVybCA9 ICI/ZXZlbnQ9Ii4kZXZlbnQuIiZzdGVwPSIuJG5leHRzdGVwOw0KDQoJaWYgKCRza2luICYm IHNtZF9hdF9leGlzdHMoJHNraW4pKSB7DQoJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2lu LCAkZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFURSk7 DQoJCSR1cmwgLj0gJyZtZXNzYWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogc21k X2F0X2dUeHQoJ3NraW5fc3dpdGNoZWQnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpKTsN Cgl9IGVsc2Ugew0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7DQoJfQ0KDQoJ Ly8gU2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJsZS1kZWNsdXRjaCBp biBvcmRlciB0byBzaG93IHRoZSBza2luIHRoaXMgZmlyc3QgdGltZQ0KCWVjaG8gPDw8RU9T DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJl Zj0ieyR1cmx9IjsNCjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0i cmVmcmVzaCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsN CglleGl0Ow0KfQ0KDQovLyBBbGwtdXNlciBza2luIGNob29zZXINCmZ1bmN0aW9uIHNtZF9h ZG1hdCgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwg YXJyYXkoDQoJCQknc21kX2F0X3N3aXRjaCcsDQoJCSkpKSB7DQoJCXNtZF9hdF9jaG9vc2Vy KCcnKTsNCgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfY2hvb3NlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAk cHJlZnMsICRzbWRfYXRfYWRtX2V2ZW50LCAkdGhlbWU7DQoNCgkkYXRfcHJlZnMgPSBzbWRf YXRfZ2V0X3ByZWZzKCk7DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9s YXlvdXQnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSR0dyA9IChp c3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90dyddKSA/ICRhdF9wcmVmc1snc21kX2F0X3R3J10g OiAkc21kX2F0X3ByZWZzWzBdWydzbWRfYXRfdHcnXSkgKyAxMDsNCgkkdGggPSAoaXNzZXQo JGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90aCddIDogJHNt ZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ10pICsgODA7DQoNCgkkbWVzc2FnZSA9ICgkbWVz c2FnZSkgPyAkbWVzc2FnZSA6IGdwcygnbWVzc2FnZScpOw0KCXBhZ2V0b3Aoc21kX2F0X2dU eHQoJ3NraW5uZXInKSwkbWVzc2FnZSk7DQoNCgkkY3Vycl9za2luID0gJHRoZW1lLT5uYW1l Ow0KDQoJJGFsbG93ZWQgPSAnJzsNCglpZiAoaXNzZXQoJHByZWZzWydzbWRfYXRfdXNlcl9s aXN0J10pKSB7DQoJCSRhbGxvd2VkID0gZXhwbG9kZSgiLCIsJHByZWZzWydzbWRfYXRfdXNl cl9saXN0J10pOw0KCQlmb3JlYWNoICgkYWxsb3dlZCBhcyAkaWR4ID0+ICR2YWxpZCkgew0K CQkJaWYgKCR2YWxpZCA9PSAnJykgew0KCQkJCXVuc2V0KCRhbGxvd2VkWyRpZHhdKTsNCgkJ CX0NCgkJfQ0KCX0NCgkkYWxsb3dlZCA9IHNtZF9hdF9zb3J0KCRhbGxvd2VkKTsNCgkkaGRy b3cgPSBoZWQoc21kX2F0X2dUeHQoJ2F2YWlsX3RpdGxlJyksIDMpOw0KDQoJaWYgKCRsYXlv dXQ9PSIwIikgew0KCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJZWNobyB0cigNCgkJ CXRkYSgkaGRyb3csICcgY29sc3Bhbj0iMyInKQ0KCQkpOw0KCQllY2hvIHRyKA0KCQkJYXNz SGVhZCgNCgkJCQlzbWRfYXRfZ1R4dCgnc2tpbl9nYmwnKSwNCgkJCQknYXV0aG9yJywNCgkJ CQknZGVzY3JpcHRpb24nDQoJCQkpKTsNCgl9IGVsc2Ugew0KCQllY2hvIDw8PEVPQ1NTDQo8 c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLnNtZF9ncmlkIHsNCgl3aWR0aDo5NjBweDsNCglt YXJnaW46MCBhdXRvOw0KfQ0KLnNtZF9jZWxsIHsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6 MTBweDsNCgltYXJnaW46MTBweDsNCglib3JkZXI6MXB4IHJpZGdlICNjY2M7DQoJd2lkdGg6 eyR0d31weDsNCgloZWlnaHQ6eyR0aH1weDsNCn0NCi5zbWRfY2VsbDpob3ZlciB7DQoJYmFj a2dyb3VuZDojZGRkOw0KfQ0KLnNtZF9jbGVhciB7DQoJY2xlYXI6Ym90aDsNCn0NCi5zbWRf YXV0aCB7DQoJdGV4dC1hbGlnbjpjZW50ZXI7DQoJbWFyZ2luOjVweCAwOw0KfQ0KPC9zdHls ZT4NCkVPQ1NTOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0i c21kX25ld3JvdyI+Jy4kaGRyb3cuJzwvZGl2Pic7DQoJfQ0KCWZvcmVhY2ggKCRhbGxvd2Vk IGFzICRza2luX25hbWUpIHsNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tp bl9uYW1lKTsNCgkJaWYgKCRza2luZm8pIHsNCgkJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0 X3RodW1iKCRza2luZm8sIDEpOw0KCQkJJHRoaXNfc2tpbiA9ICgkc2tpbl9uYW1lID09ICRj dXJyX3NraW4pID8gc3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUn XTsNCgkJCSR0aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfYWRtX2V2ZW50 LmEuJ3N0ZXA9c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2FkbWF0Jy5hLidza2lu PScuJHNraW5fbmFtZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLici PicuJHRoaXNfc2tpbi4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8L2Rp dj4nIDogJycpLic8L2E+JzsNCgkJCSRhdXRocm93ID0gKHN0cnBvcygkc2tpbmZvWydhdXRo b3JfdXJpJ10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0 aG9yX3VyaSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0 aG9yJ107DQoNCgkJCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJCQllY2hvIHRyKA0KCQkJCQl0 ZCgkdGh1bXJvdykNCgkJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJCS50ZCgkc2tpbmZv WydkZXNjcmlwdGlvbiddLCAyNTApDQoJCQkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3Nr aW4pID8gJyBzdHlsZT0iYmFja2dyb3VuZDojZThlOGU4OyInIDogJycpDQoJCQkJKTsNCgkJ CX0gZWxzZSB7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NlbGwiJy4oKCRza2luX25h bWUgPT0gJGN1cnJfc2tpbikgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGU4ZTg7IicgOiAn JykuJz4nOw0KCQkJCWVjaG8gJzxkaXY+Jy4kdGh1bXJvdy4nPC9kaXY+JzsNCgkJCQllY2hv ICc8ZGl2IGNsYXNzPSJzbWRfYXV0aCI+Jy5zbWRfYXRfZ1R4dCgnYnknKS4kYXV0aHJvdy4n PC9kaXY+JzsNCgkJCQllY2hvICc8L2Rpdj4nOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkbGF5 b3V0PT0iMCIpIHsNCgkJZWNobyBlbmRUYWJsZSgpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxk aXYgY2xhc3M9InNtZF9jbGVhciI+PC9kaXY+PC9kaXY+JzsNCgl9DQp9DQoNCi8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRBUi9H WklQL0JaSVAyL1pJUCBBUkNISVZFIENMQVNTRVMgMi4xDQogfCBCeSBEZXZpbiBEb3VjZXR0 ZQ0KIHwgQ29weXJpZ2h0IChjKSAyMDA1IERldmluIERvdWNldHRlDQogfCBFbWFpbDogZGFy a3Nub29weUBzaGF3LmNhDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQogfCBFbWFpbCBidWdzL3N1Z2dlc3Rpb25zIHRvIGRhcmtzbm9v cHlAc2hhdy5jYQ0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KIHwgVGhpcyBzY3JpcHQgaGFzIGJlZW4gY3JlYXRlZCBhbmQgcmVsZWFz ZWQgdW5kZXINCiB8IHRoZSBHTlUgR1BMIGFuZCBpcyBmcmVlIHRvIHVzZSBhbmQgcmVkaXN0 cmlidXRlDQogfCBvbmx5IGlmIHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgcmVt b3ZlZA0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovDQoNCi8vIE5PVEU6IGNsYXNzIG5hbWVzIGFsdGVyZWQgdG8gYWRkIHNtZF9hdF8g cHJlZml4IHRvIGF2b2lkIGNsYXNoZXMgaW4gZ2xvYmFsIHNjb3BlLCBhbmQgYWRkZWQgc3Vi ZGlyIGNyZWF0aW9uDQoNCmNsYXNzIHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21k X2F0X2FyY2hpdmUoJG5hbWUpDQoJew0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgNCgkJ CSdiYXNlZGlyJyA9PiAiLiIsDQoJCQknbmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVuZCcg PT4gIiIsDQoJCQknaW5tZW1vcnknID0+IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0KCQkJ J3JlY3Vyc2UnID0+IDEsDQoJCQknc3RvcmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3dsaW5r cycgPT4gMCwNCgkJCSdsZXZlbCcgPT4gMywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQknc2Z4 JyA9PiAiIiwNCgkJCSd0eXBlJyA9PiAiIiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkpOw0K CQkkdGhpcy0+ZmlsZXMgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheSAo KTsNCgkJJHRoaXMtPnN0b3Jlb25seSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3IgPSBh cnJheSAoKTsNCgl9DQoNCglmdW5jdGlvbiBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7DQoJ CWZvcmVhY2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9wdGlv bnNbJGtleV0gPSAkdmFsdWU7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3JlcGxh Y2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5v cHRpb25zWydiYXNlZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+ b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBw cmVnX3JlcGxhY2UoIi9cLyQvIiwgIiIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0K CQl9DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJCQkk dGhpcy0+b3B0aW9uc1snbmFtZSddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+ b3B0aW9uc1snbmFtZSddKTsNCgkJCSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVnX3Jl cGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0KCQlp ZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRoaXMt Pm9wdGlvbnNbJ3ByZXBlbmQnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9w dGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJl Z19yZXBsYWNlKCIvXihcLipcLyspKy8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQn XSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8r LyIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddKSAuICIvIjsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9hcmNo aXZlKCkNCgl7DQoJCSR0aGlzLT5tYWtlX2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9wdGlv bnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hk aXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNb J292ZXJ3cml0ZSddID09IDAgJiYgZmlsZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25hbWUn XSAuICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9u c1sndHlwZSddID09ICJiemlwIiA/ICIudG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRoaXMt PmVycm9yW10gPSAiRmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBleGlz dHMuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVsc2Ug aWYgKCR0aGlzLT5hcmNoaXZlID0gQGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAo JHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSA9PSAiYnppcCIgPyAiLnRtcCIgOiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigkcHdk KTsNCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3Bl biB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigk cHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJj aGl2ZSA9ICIiOw0KDQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0K CQljYXNlICJ6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0KCQkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJCQly ZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWlmICghJHRo aXMtPmNyZWF0ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBu b3QgY3JlYXRlIHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0 aGlzLT5jcmVhdGVfYnppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxk IG5vdCBjcmVhdGUgYnppcDIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJl YWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJ ew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsN CgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkpDQoJ CQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZpbGUu IjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJ aWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0g IkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJ fQ0KDQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQlm Y2xvc2UoJHRoaXMtPmFyY2hpdmUpOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10g PT0gImd6aXAiIHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJCXVu bGluaygkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlvbnNb J25hbWUnXSAuICIudG1wIik7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgkZGF0 YSkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJZndy aXRlKCR0aGlzLT5hcmNoaXZlLCAkZGF0YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZl IC49ICRkYXRhOw0KCX0NCg0KCWZ1bmN0aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAoIWVt cHR5ICgkdGhpcy0+ZXhjbHVkZSkpDQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtl eSA9PiAkdmFsdWUpDQoJCQkJZm9yZWFjaCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJlbnQp DQoJCQkJCWlmICgkdmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJ dW5zZXQgKCR0aGlzLT5maWxlc1ska2V5XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5zdG9y ZW9ubHkpKQ0KCQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0K CQkJCWZvcmVhY2ggKCR0aGlzLT5zdG9yZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgk dmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZpbGVz WyRrZXldWydtZXRob2QnXSA9IDA7DQoJCXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRoaXMt PnN0b3Jlb25seSk7DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJ JHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFz ICRjdXJyZW50KQ0KCQkJJHRoaXMtPmZpbGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5j dGlvbiBleGNsdWRlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9m aWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMt PmV4Y2x1ZGVbXSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVzKCRs aXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVh Y2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1cnJl bnQ7DQoJfQ0KDQoJZnVuY3Rpb24gbGlzdF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICghaXNf YXJyYXkgKCRsaXN0KSkNCgkJew0KCQkJJHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0gYXJy YXkgKCR0ZW1wKTsNCgkJCXVuc2V0ICgkdGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBhcnJh eSAoKTsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydi YXNlZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJCQkk Y3VycmVudCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJl bnQgPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVu dCA9IHByZWdfcmVwbGFjZSgiL1wvJC8iLCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0cnN0 cigkY3VycmVudCwgIioiKSkNCgkJCXsNCgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2UoIi8o W1xcXF5cJFwuXFtcXVx8XChcKVw/XCtce1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJyZW50 KTsNCgkJCQkkcmVnZXggPSBzdHJfcmVwbGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJCQkJ JGRpciA9IHN0cnN0cigkY3VycmVudCwgIi8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwgc3Ry cnBvcygkY3VycmVudCwgIi8iKSkgOiAiLiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2Vf ZGlyKCRkaXIpOw0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJaWYg KHByZWdfbWF0Y2goIi9eeyRyZWdleH0kL2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJCQkJ CQkkZmlsZXNbXSA9ICRjdXJyZW50MjsNCgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAkdGVt cCwgJGN1cnJlbnQpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkpDQoJ CQl7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlmb3Jl YWNoICgkdGVtcCBhcyAkZmlsZSkNCgkJCQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1bnNl dCAoJHRlbXAsICRmaWxlKTsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkY3Vy cmVudCkpDQoJCQkJJGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAnbmFt ZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2Uo Ii8oXC4rXC8rKSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAg JiYgc3Ryc3RyKCRjdXJyZW50LCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwgc3Ry cnBvcygkY3VycmVudCwgIi8iKSArIDEpIDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScgPT4g QGlzX2xpbmsoJGN1cnJlbnQpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09 IDAgPyAyIDogMCwNCgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRj dXJyZW50LCAiLiIpKSwgJ3N0YXQnID0+IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJCWNo ZGlyKCRwd2QpOw0KDQoJCXVuc2V0ICgkY3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQoJGZp bGVzLCBhcnJheSAoInNtZF9hdF9hcmNoaXZlIiwgInNvcnRfZmlsZXMiKSk7DQoNCgkJcmV0 dXJuICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBwYXJzZV9kaXIoJGRpcm5hbWUpDQoJew0K CQlpZiAoJHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAxICYmICFwcmVnX21hdGNo KCIvXihcLitcLyopKyQvIiwgJGRpcm5hbWUpKQ0KCQkJJGZpbGVzID0gYXJyYXkgKGFycmF5 ICgnbmFtZScgPT4gJGRpcm5hbWUsICduYW1lMicgPT4gJHRoaXMtPm9wdGlvbnNbJ3ByZXBl bmQnXSAuDQoJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRoaXMtPm9w dGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZGlybmFtZSwgIi8iKSkgPw0K CQkJCXN1YnN0cigkZGlybmFtZSwgc3RycnBvcygkZGlybmFtZSwgIi8iKSArIDEpIDogJGRp cm5hbWUpLCAndHlwZScgPT4gNSwgJ3N0YXQnID0+IHN0YXQoJGRpcm5hbWUpKSk7DQoJCWVs c2UNCgkJCSRmaWxlcyA9IGFycmF5ICgpOw0KCQkkZGlyID0gQG9wZW5kaXIoJGRpcm5hbWUp Ow0KDQoJCXdoaWxlICgkZmlsZSA9IEByZWFkZGlyKCRkaXIpKQ0KCQl7DQoJCQkkZnVsbG5h bWUgPSAkZGlybmFtZSAuICIvIiAuICRmaWxlOw0KCQkJaWYgKCRmaWxlID09ICIuIiB8fCAk ZmlsZSA9PSAiLi4iKQ0KCQkJCWNvbnRpbnVlOw0KCQkJZWxzZSBpZiAoQGlzX2RpcigkZnVs bG5hbWUpKQ0KCQkJew0KCQkJCWlmIChlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3JlY3Vyc2Un XSkpDQoJCQkJCWNvbnRpbnVlOw0KCQkJCSR0ZW1wID0gJHRoaXMtPnBhcnNlX2RpcigkZnVs bG5hbWUpOw0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRmaWxlMikNCgkJCQkJJGZpbGVzW10g PSAkZmlsZTI7DQoJCQl9DQoJCQllbHNlIGlmIChAZmlsZV9leGlzdHMoJGZ1bGxuYW1lKSkN CgkJCQkkZmlsZXNbXSA9IGFycmF5ICgnbmFtZScgPT4gJGZ1bGxuYW1lLCAnbmFtZTInID0+ ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4r XC8rKSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ry c3RyKCRmdWxsbmFtZSwgIi8iKSkgPw0KCQkJCQlzdWJzdHIoJGZ1bGxuYW1lLCBzdHJycG9z KCRmdWxsbmFtZSwgIi8iKSArIDEpIDogJGZ1bGxuYW1lKSwNCgkJCQkJJ3R5cGUnID0+IEBp c19saW5rKCRmdWxsbmFtZSkgJiYgJHRoaXMtPm9wdGlvbnNbJ2ZvbGxvd2xpbmtzJ10gPT0g MCA/IDIgOiAwLA0KCQkJCQknZXh0JyA9PiBzdWJzdHIoJGZpbGUsIHN0cnJwb3MoJGZpbGUs ICIuIikpLCAnc3RhdCcgPT4gc3RhdCgkZnVsbG5hbWUpKTsNCgkJfQ0KDQoJCUBjbG9zZWRp cigkZGlyKTsNCg0KCQlyZXR1cm4gJGZpbGVzOw0KCX0NCg0KCWZ1bmN0aW9uIHNvcnRfZmls ZXMoJGEsICRiKQ0KCXsNCgkJaWYgKCRhWyd0eXBlJ10gIT0gJGJbJ3R5cGUnXSkNCgkJCWlm ICgkYVsndHlwZSddID09IDUgfHwgJGJbJ3R5cGUnXSA9PSAyKQ0KCQkJCXJldHVybiAtMTsN CgkJCWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gMiB8fCAkYlsndHlwZSddID09IDUpDQoJCQkJ cmV0dXJuIDE7DQoJCWVsc2UgaWYgKCRhWyd0eXBlJ10gPT0gNSkNCgkJCXJldHVybiBzdHJj bXAoc3RydG9sb3dlcigkYVsnbmFtZSddKSwgc3RydG9sb3dlcigkYlsnbmFtZSddKSk7DQoJ CWVsc2UgaWYgKCRhWydleHQnXSAhPSAkYlsnZXh0J10pDQoJCQlyZXR1cm4gc3RyY21wKCRh WydleHQnXSwgJGJbJ2V4dCddKTsNCgkJZWxzZSBpZiAoJGFbJ3N0YXQnXVs3XSAhPSAkYlsn c3RhdCddWzddKQ0KCQkJcmV0dXJuICRhWydzdGF0J11bN10gPiAkYlsnc3RhdCddWzddID8g LTEgOiAxOw0KCQllbHNlDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUn XSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglmdW5j dGlvbiBkb3dubG9hZF9maWxlKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1v cnknXSA9PSAwKQ0KCQl7DQoJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDYW4gb25seSB1c2UgZG93 bmxvYWRfZmlsZSgpIGlmIGFyY2hpdmUgaXMgaW4gbWVtb3J5LiBSZWRpcmVjdCB0byBmaWxl IG90aGVyd2lzZSwgaXQgaXMgZmFzdGVyLiI7DQoJCQlyZXR1cm47DQoJCX0NCgkJc3dpdGNo ICgkdGhpcy0+b3B0aW9uc1sndHlwZSddKQ0KCQl7DQoJCWNhc2UgInppcCI6DQoJCQloZWFk ZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vemlwIik7DQoJCQlicmVhazsNCgkJY2Fz ZSAiYnppcCI6DQoJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1iemlw MiIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImd6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5 cGU6IGFwcGxpY2F0aW9uL3gtZ3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgInRhciI6DQoJ CQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC10YXIiKTsNCgkJfQ0KCQkk aGVhZGVyID0gIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwi IjsNCgkJJGhlYWRlciAuPSBzdHJzdHIoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIi8iKSA/ IHN1YnN0cigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCBzdHJycG9zKCR0aGlzLT5vcHRpb25z WyduYW1lJ10sICIvIikgKyAxKSA6ICR0aGlzLT5vcHRpb25zWyduYW1lJ107DQoJCSRoZWFk ZXIgLj0gIlwiIjsNCgkJaGVhZGVyKCRoZWFkZXIpOw0KCQloZWFkZXIoIkNvbnRlbnQtTGVu Z3RoOiAiIC4gc3RybGVuKCR0aGlzLT5hcmNoaXZlKSk7DQoJCWhlYWRlcigiQ29udGVudC1U cmFuc2Zlci1FbmNvZGluZzogYmluYXJ5Iik7DQoJCWhlYWRlcigiQ2FjaGUtQ29udHJvbDog bm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT02MCIpOw0KCQloZWFkZXIoIkV4 cGlyZXM6IFNhdCwgMDEgSmFuIDIwMDAgMTI6MDA6MDAgR01UIik7DQoJCXByaW50KCR0aGlz LT5hcmNoaXZlKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF90YXJfZmlsZSBleHRlbmRzIHNt ZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X3Rhcl9maWxlKCRuYW1lKQ0KCXsN CgkJJHRoaXMtPnNtZF9hdF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSA9ICJ0YXIiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV90YXIoKQ0KCXsNCgkJJHB3 ZCA9IGdldGN3ZCgpOw0KCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCg0K CQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGN1cnJlbnQpDQoJCXsNCgkJCWlmICgkY3Vy cmVudFsnbmFtZSddID09ICR0aGlzLT5vcHRpb25zWyduYW1lJ10pDQoJCQkJY29udGludWU7 DQoJCQlpZiAoc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSA+IDk5KQ0KCQkJew0KCQkJCSRw YXRoID0gc3Vic3RyKCRjdXJyZW50WyduYW1lMiddLCAwLCBzdHJwb3MoJGN1cnJlbnRbJ25h bWUyJ10sICIvIiwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSAtIDEwMCkgKyAxKTsNCgkJ CQkkY3VycmVudFsnbmFtZTInXSA9IHN1YnN0cigkY3VycmVudFsnbmFtZTInXSwgc3RybGVu KCRwYXRoKSk7DQoJCQkJaWYgKHN0cmxlbigkcGF0aCkgPiAxNTQgfHwgc3RybGVuKCRjdXJy ZW50WyduYW1lMiddKSA+IDk5KQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291 bGQgbm90IGFkZCB7JHBhdGh9eyRjdXJyZW50WyduYW1lMiddfSB0byBhcmNoaXZlIGJlY2F1 c2UgdGhlIGZpbGVuYW1lIGlzIHRvbyBsb25nLiI7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0N CgkJCX0NCgkJCSRibG9jayA9IHBhY2soImExMDBhOGE4YThhMTJhMTJhOGExYTEwMGE2YTJh MzJhMzJhOGE4YTE1NWExMiIsICRjdXJyZW50WyduYW1lMiddLCBzcHJpbnRmKCIlMDdvIiwN CgkJCQkkY3VycmVudFsnc3RhdCddWzJdKSwgc3ByaW50ZigiJTA3byIsICRjdXJyZW50Wydz dGF0J11bNF0pLCBzcHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0YXQnXVs1XSksDQoJCQkJ c3ByaW50ZigiJTAxMW8iLCAkY3VycmVudFsndHlwZSddID09IDIgPyAwIDogJGN1cnJlbnRb J3N0YXQnXVs3XSksIHNwcmludGYoIiUwMTFvIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSksDQoJ CQkJIiAgICAgICAgIiwgJGN1cnJlbnRbJ3R5cGUnXSwgJGN1cnJlbnRbJ3R5cGUnXSA9PSAy ID8gQHJlYWRsaW5rKCRjdXJyZW50WyduYW1lJ10pIDogIiIsICJ1c3RhciAiLCAiICIsDQoJ CQkJIlVua25vd24iLCAiVW5rbm93biIsICIiLCAiIiwgIWVtcHR5ICgkcGF0aCkgPyAkcGF0 aCA6ICIiLCAiIik7DQoNCgkJCSRjaGVja3N1bSA9IDA7DQoJCQlmb3IgKCRpID0gMDsgJGkg PCA1MTI7ICRpKyspDQoJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJsb2NrLCAkaSwg MSkpOw0KCQkJJGNoZWNrc3VtID0gcGFjaygiYTgiLCBzcHJpbnRmKCIlMDdvIiwgJGNoZWNr c3VtKSk7DQoJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ssICRjaGVja3N1bSwg MTQ4LCA4KTsNCg0KCQkJaWYgKCRjdXJyZW50Wyd0eXBlJ10gPT0gMiB8fCAkY3VycmVudFsn c3RhdCddWzddID09IDApDQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQllbHNl IGlmICgkZnAgPSBAZm9wZW4oJGN1cnJlbnRbJ25hbWUnXSwgInJiIikpDQoJCQl7DQoJCQkJ JHRoaXMtPmFkZF9kYXRhKCRibG9jayk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJGZw LCAxMDQ4NTc2KSkNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQlpZiAoJGN1 cnJlbnRbJ3N0YXQnXVs3XSAlIDUxMiA+IDApDQoJCQkJew0KCQkJCQkkdGVtcCA9ICIiOw0K CQkJCQlmb3IgKCRpID0gMDsgJGkgPCA1MTIgLSAkY3VycmVudFsnc3RhdCddWzddICUgNTEy OyAkaSsrKQ0KCQkJCQkJJHRlbXAgLj0gIlwwIjsNCgkJCQkJJHRoaXMtPmFkZF9kYXRhKCR0 ZW1wKTsNCgkJCQl9DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQl9DQoJCQllbHNlDQoJCQkJJHRo aXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJlbnRbJ25hbWUnXX0g Zm9yIHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJCSR0aGlzLT5hZGRf ZGF0YShwYWNrKCJhMTAyNCIsICIiKSk7DQoNCgkJY2hkaXIoJHB3ZCk7DQoNCgkJcmV0dXJu IDE7DQoJfQ0KDQoJZnVuY3Rpb24gZXh0cmFjdF9maWxlcygpDQoJew0KCQkkcHdkID0gZ2V0 Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWlmICgk ZnAgPSAkdGhpcy0+b3Blbl9hcmNoaXZlKCkpDQoJCXsNCgkJCWlmICgkdGhpcy0+b3B0aW9u c1snaW5tZW1vcnknXSA9PSAxKQ0KCQkJCSR0aGlzLT5maWxlcyA9IGFycmF5ICgpOw0KDQoJ CQl3aGlsZSAoJGJsb2NrID0gZnJlYWQoJGZwLCA1MTIpKQ0KCQkJew0KCQkJCSR0ZW1wID0g dW5wYWNrKCJhMTAwbmFtZS9hOG1vZGUvYTh1aWQvYThnaWQvYTEyc2l6ZS9hMTJtdGltZS9h OGNoZWNrc3VtL2ExdHlwZS9hMTAwc3ltbGluay9hNm1hZ2ljL2EydGVtcC9hMzJ0ZW1wL2Ez MnRlbXAvYTh0ZW1wL2E4dGVtcC9hMTU1cHJlZml4L2ExMnRlbXAiLCAkYmxvY2spOw0KCQkJ CSRmaWxlID0gYXJyYXkgKA0KCQkJCQknbmFtZScgPT4gJHRlbXBbJ3ByZWZpeCddIC4gJHRl bXBbJ25hbWUnXSwNCgkJCQkJJ3N0YXQnID0+IGFycmF5ICgNCgkJCQkJCTIgPT4gJHRlbXBb J21vZGUnXSwNCgkJCQkJCTQgPT4gb2N0ZGVjKCR0ZW1wWyd1aWQnXSksDQoJCQkJCQk1ID0+ IG9jdGRlYygkdGVtcFsnZ2lkJ10pLA0KCQkJCQkJNyA9PiBvY3RkZWMoJHRlbXBbJ3NpemUn XSksDQoJCQkJCQk5ID0+IG9jdGRlYygkdGVtcFsnbXRpbWUnXSksDQoJCQkJCSksDQoJCQkJ CSdjaGVja3N1bScgPT4gb2N0ZGVjKCR0ZW1wWydjaGVja3N1bSddKSwNCgkJCQkJJ3R5cGUn ID0+ICR0ZW1wWyd0eXBlJ10sDQoJCQkJCSdtYWdpYycgPT4gJHRlbXBbJ21hZ2ljJ10sDQoJ CQkJKTsNCg0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSA9PSAweDAwMDAwMDAwKQ0KCQkJ CQlicmVhazsNCgkJCQllbHNlIGlmIChzdWJzdHIoJGZpbGVbJ21hZ2ljJ10sIDAsIDUpICE9 ICJ1c3RhciIpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJUaGlzIHNjcmlwdCBk b2VzIG5vdCBzdXBwb3J0IGV4dHJhY3RpbmcgdGhpcyB0eXBlIG9mIHRhciBmaWxlLiI7DQoJ CQkJCWJyZWFrOw0KCQkJCX0NCgkJCQkkYmxvY2sgPSBzdWJzdHJfcmVwbGFjZSgkYmxvY2ss ICIgICAgICAgICIsIDE0OCwgOCk7DQoJCQkJJGNoZWNrc3VtID0gMDsNCgkJCQlmb3IgKCRp ID0gMDsgJGkgPCA1MTI7ICRpKyspDQoJCQkJCSRjaGVja3N1bSArPSBvcmQoc3Vic3RyKCRi bG9jaywgJGksIDEpKTsNCgkJCQlpZiAoJGZpbGVbJ2NoZWNrc3VtJ10gIT0gJGNoZWNrc3Vt KQ0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgZXh0cmFjdCBmcm9tIHskdGhp cy0+b3B0aW9uc1snbmFtZSddfSwgaXQgaXMgY29ycnVwdC4iOw0KDQoJCQkJLy8gQWRkZWQ6 IGNyZWF0ZSBkaXIgaWYgcmVxdWlyZWQNCgkJCQlpZiAoc3RycG9zKCRmaWxlWyduYW1lJ10s ICcuLicpID09PSBmYWxzZSkgew0KCQkJCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmaWxl WyduYW1lJ10pOw0KCQkJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlWyduYW1lJ10pKSB7DQoJ CQkJCQkkcmV0ID0gc21kX21rZGlyX3JlY3Vyc2l2ZSgoKGlzc2V0KCRwYXRoX3BhcnRzWydl eHRlbnNpb24nXSkpID8gZGlybmFtZSgkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRTLiRm aWxlWyduYW1lJ10pIDogJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXS5EUy4kZmlsZVsnbmFt ZSddKSk7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVt b3J5J10gPT0gMSkNCgkJCQl7DQoJCQkJCSRmaWxlWydkYXRhJ10gPSBmcmVhZCgkZnAsICRm aWxlWydzdGF0J11bN10pOw0KCQkJCQlmcmVhZCgkZnAsICg1MTIgLSAkZmlsZVsnc3RhdCdd WzddICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIp KTsNCgkJCQkJdW5zZXQgKCRmaWxlWydjaGVja3N1bSddLCAkZmlsZVsnbWFnaWMnXSk7DQoJ CQkJCSR0aGlzLT5maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRmaWxl Wyd0eXBlJ10gPT0gNSkNCgkJCQl7DQoJCQkJCWlmICghaXNfZGlyKCRmaWxlWyduYW1lJ10p KQ0KCQkJCQkJbWtkaXIoJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVsyXSk7DQoJCQkJ fQ0KCQkJCWVsc2UgaWYgKCR0aGlzLT5vcHRpb25zWydvdmVyd3JpdGUnXSA9PSAwICYmIGZp bGVfZXhpc3RzKCRmaWxlWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9yW10g PSAieyRmaWxlWyduYW1lJ119IGFscmVhZHkgZXhpc3RzLiI7DQoJCQkJCWNvbnRpbnVlOw0K CQkJCX0NCgkJCQllbHNlIGlmICgkZmlsZVsndHlwZSddID09IDIpDQoJCQkJew0KCQkJCQlz eW1saW5rKCR0ZW1wWydzeW1saW5rJ10sICRmaWxlWyduYW1lJ10pOw0KCQkJCQljaG1vZCgk ZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAo JG5ldyA9IGZvcGVuKCRmaWxlWyduYW1lJ10sICJ3YiIpKQ0KCQkJCXsNCgkJCQkJZndyaXRl KCRuZXcsIGZyZWFkKCRmcCwgJGZpbGVbJ3N0YXQnXVs3XSkpOw0KCQkJCQlmcmVhZCgkZnAs ICg1MTIgLSAkZmlsZVsnc3RhdCddWzddICUgNTEyKSA9PSA1MTIgPyAwIDogKDUxMiAtICRm aWxlWydzdGF0J11bN10gJSA1MTIpKTsNCgkJCQkJZmNsb3NlKCRuZXcpOw0KCQkJCQlAY2ht b2QoJGZpbGVbJ25hbWUnXSwgMDY0NCk7IC8vIEhhcmQtY29kZWQgZm9yIG5vdyBiZWNhdXNl IHRoZSBzdHVwaWQgMDEwMDY0NCB2YWx1ZSBpbiAkZmlsZVsnc3RhdCddWzJdIGNvbmZ1c2Vz IHRoZSBPUy9QSFANCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmVycm9y W10gPSAiQ291bGQgbm90IG9wZW4geyRmaWxlWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJ CQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkvLyBSZW1vdmUgb3duZXIgYW5kIGdyb3VwIHNl dHRpbmcgc2luY2UgdGhlcmUgaXMgYWxtb3N0IDAgbGlrZWxpaG9vZCB0aGUgZmlsZXMgd2ls bCBoYXZlIHRoZSBzYW1lIHVzZXIvZ3JvdXAgYWNyb3NzIHN5c3RlbXMNCgkJCQkvLyBJbiBv dGhlciB3b3JkcywgbGVhdmUgb3duZXIvZ3JvdXAgYXQgdGhlIEFwYWNoZSBkZWZhdWx0IC0t IHdoaWNoIGlzIHdoYXQgd2Ugd2FudA0KLy8JCQkJY2hvd24oJGZpbGVbJ25hbWUnXSwgJGZp bGVbJ3N0YXQnXVs0XSk7DQovLwkJCQljaGdycCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3Rh dCddWzVdKTsNCgkJCQlAdG91Y2goJGZpbGVbJ25hbWUnXSwgJGZpbGVbJ3N0YXQnXVs5XSk7 DQoJCQkJdW5zZXQgKCRmaWxlKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+ZXJy b3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSI7 DQoNCgkJY2hkaXIoJHB3ZCk7DQoJfQ0KDQoJZnVuY3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7 DQoJCXJldHVybiBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0K fQ0KDQpjbGFzcyBzbWRfYXRfZ3ppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7 DQoJZnVuY3Rpb24gc21kX2F0X2d6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRf YXRfdGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImd6aXAi Ow0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9nemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0 aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQlj aGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBnem9wZW4o JHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIndieyR0aGlzLT5vcHRpb25zWydsZXZlbCddfSIp KQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRl bXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWd6d3JpdGUoJGZw LCAkdGVtcCk7DQoJCQkJZ3pjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0K CQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHsk dGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2Qp Ow0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZl ID0gZ3plbmNvZGUoJHRoaXMtPmFyY2hpdmUsICR0aGlzLT5vcHRpb25zWydsZXZlbCddKTsN Cg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJ cmV0dXJuIEBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0K DQpjbGFzcyBzbWRfYXRfYnppcF9maWxlIGV4dGVuZHMgc21kX2F0X3Rhcl9maWxlDQp7DQoJ ZnVuY3Rpb24gc21kX2F0X2J6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfYXRf dGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlwZSddID0gImJ6aXAiOw0K CX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9iemlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9u c1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRp cigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkZnAgPSBiem9wZW4oJHRo aXMtPm9wdGlvbnNbJ25hbWUnXSwgIndiIikpDQoJCQl7DQoJCQkJZnNlZWsoJHRoaXMtPmFy Y2hpdmUsIDApOw0KCQkJCXdoaWxlICgkdGVtcCA9IGZyZWFkKCR0aGlzLT5hcmNoaXZlLCAx MDQ4NTc2KSkNCgkJCQkJYnp3cml0ZSgkZnAsICR0ZW1wKTsNCgkJCQliemNsb3NlKCRmcCk7 DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmVy cm9yW10gPSAiQ291bGQgbm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGZvciB3 cml0aW5nLiI7DQoJCQkJY2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0N CgkJZWxzZQ0KCQkJJHRoaXMtPmFyY2hpdmUgPSBiemNvbXByZXNzKCR0aGlzLT5hcmNoaXZl LCAkdGhpcy0+b3B0aW9uc1snbGV2ZWwnXSk7DQoNCgkJcmV0dXJuIDE7DQoJfQ0KDQoJZnVu Y3Rpb24gb3Blbl9hcmNoaXZlKCkNCgl7DQoJCXJldHVybiBAYnpvcGVuKCR0aGlzLT5vcHRp b25zWyduYW1lJ10sICJyYiIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X3ppcF9maWxlIGV4 dGVuZHMgc21kX2F0X2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfemlwX2ZpbGUoJG5h bWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0 aW9uc1sndHlwZSddID0gInppcCI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3ppcCgpDQoJ ew0KCQkkZmlsZXMgPSAwOw0KCQkkb2Zmc2V0ID0gMDsNCgkJJGNlbnRyYWwgPSAiIjsNCg0K CQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKQ0KCQkJaWYgKCRmcCA9IEBm b3BlbigkdGhpcy0+b3B0aW9uc1snc2Z4J10sICJyYiIpKQ0KCQkJew0KCQkJCSR0ZW1wID0g ZnJlYWQoJGZwLCBmaWxlc2l6ZSgkdGhpcy0+b3B0aW9uc1snc2Z4J10pKTsNCgkJCQlmY2xv c2UoJGZwKTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCSRvZmZzZXQgKz0g c3RybGVuKCR0ZW1wKTsNCgkJCQl1bnNldCAoJHRlbXApOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHNmeCBtb2R1bGUgZnJvbSB7JHRo aXMtPm9wdGlvbnNbJ3NmeCddfS4iOw0KDQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIo JHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJHRoaXMtPmZpbGVz IGFzICRjdXJyZW50KQ0KCQl7DQoJCQlpZiAoJGN1cnJlbnRbJ25hbWUnXSA9PSAkdGhpcy0+ b3B0aW9uc1snbmFtZSddKQ0KCQkJCWNvbnRpbnVlOw0KDQoJCQkkdGltZWRhdGUgPSBleHBs b2RlKCIgIiwgZGF0ZSgiWSBuIGogRyBpIHMiLCAkY3VycmVudFsnc3RhdCddWzldKSk7DQoJ CQkkdGltZWRhdGUgPSAoJHRpbWVkYXRlWzBdIC0gMTk4MCA8PCAyNSkgfCAoJHRpbWVkYXRl WzFdIDw8IDIxKSB8ICgkdGltZWRhdGVbMl0gPDwgMTYpIHwNCgkJCQkoJHRpbWVkYXRlWzNd IDw8IDExKSB8ICgkdGltZWRhdGVbNF0gPDwgNSkgfCAoJHRpbWVkYXRlWzVdKTsNCg0KCQkJ JGJsb2NrID0gcGFjaygiVnZ2dlYiLCAweDA0MDM0YjUwLCAweDAwMEEsIDB4MDAwMCwgKGlz c2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09 IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUpOw0KDQoJCQlpZiAoJGN1cnJlbnRb J3N0YXQnXVs3XSA9PSAwICYmICRjdXJyZW50Wyd0eXBlJ10gPT0gNSkNCgkJCXsNCgkJCQkk YmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAw MDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwKTsNCgkJCQkkYmxv Y2sgLj0gJGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCRi bG9jayk7DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIw MTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAg OiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwg JHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGlt ZWRhdGUsDQoJCQkJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIHN0cmxl bigkY3VycmVudFsnbmFtZTInXSkgKyAxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsICRjdXJyZW50Wyd0eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAk b2Zmc2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXSAuICIvIjsNCgkJ CQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9ICgzMSArIHN0cmxlbigkY3VycmVudFsnbmFt ZTInXSkpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoJGN1cnJlbnRbJ3N0YXQnXVs3XSA9PSAwKQ0K CQkJew0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2diIsIDB4MDAwMDAwMDAsIDB4MDAwMDAw MDAsIDB4MDAwMDAwMDAsIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCk7DQoJ CQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgk YmxvY2spOw0KCQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAy MDE0YjUwLCAweDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAw IDogMHgwMDBBLCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8 ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRp bWVkYXRlLA0KCQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJs ZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs ICRjdXJyZW50Wyd0eXBlJ10gPT0gNSA/IDB4MDAwMDAwMTAgOiAweDAwMDAwMDAwLCAkb2Zm c2V0KTsNCgkJCQkkY2VudHJhbCAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMr KzsNCgkJCQkkb2Zmc2V0ICs9ICgzMCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkpOw0K CQkJfQ0KCQkJZWxzZSBpZiAoJGZwID0gQGZvcGVuKCRjdXJyZW50WyduYW1lJ10sICJyYiIp KQ0KCQkJew0KCQkJCSR0ZW1wID0gZnJlYWQoJGZwLCAkY3VycmVudFsnc3RhdCddWzddKTsN CgkJCQlmY2xvc2UoJGZwKTsNCgkJCQkkY3JjMzIgPSBjcmMzMigkdGVtcCk7DQoJCQkJaWYg KCFpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pICYmICR0aGlzLT5vcHRpb25zWydtZXRob2Qn XSA9PSAxKQ0KCQkJCXsNCgkJCQkJJHRlbXAgPSBnemNvbXByZXNzKCR0ZW1wLCAkdGhpcy0+ b3B0aW9uc1snbGV2ZWwnXSk7DQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKSAtIDY7DQoJ CQkJCSR0ZW1wID0gc3Vic3RyKCR0ZW1wLCAyLCAkc2l6ZSk7DQoJCQkJfQ0KCQkJCWVsc2UN CgkJCQkJJHNpemUgPSBzdHJsZW4oJHRlbXApOw0KCQkJCSRibG9jayAuPSBwYWNrKCJWVlZ2 diIsICRjcmMzMiwgJHNpemUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVu dFsnbmFtZTInXSksIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMidd Ow0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgk dGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2 dlZWVlZ2dnZ2dlZWIiwgMHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0 aG9kJ10gPT0gMCA/IDB4MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1 cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAw eDAwMDAgOiAweDAwMDgsICR0aW1lZGF0ZSwNCgkJCQkJJGNyYzMyLCAkc2l6ZSwgJGN1cnJl bnRbJ3N0YXQnXVs3XSwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAwMDAwLCAkb2Zmc2V0KTsNCgkJCQkkY2VudHJh bCAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkZmlsZXMrKzsNCgkJCQkkb2Zmc2V0ICs9 ICgzMCArIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSkgKyAkc2l6ZSk7DQoJCQl9DQoJCQll bHNlDQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IG9wZW4gZmlsZSB7JGN1cnJl bnRbJ25hbWUnXX0gZm9yIHJlYWRpbmcuIEl0IHdhcyBub3QgYWRkZWQuIjsNCgkJfQ0KDQoJ CSR0aGlzLT5hZGRfZGF0YSgkY2VudHJhbCk7DQoNCgkJJHRoaXMtPmFkZF9kYXRhKHBhY2so IlZ2dnZ2VlZ2IiwgMHgwNjA1NGI1MCwgMHgwMDAwLCAweDAwMDAsICRmaWxlcywgJGZpbGVz LCBzdHJsZW4oJGNlbnRyYWwpLCAkb2Zmc2V0LA0KCQkJIWVtcHR5ICgkdGhpcy0+b3B0aW9u c1snY29tbWVudCddKSA/IHN0cmxlbigkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSA6IDB4 MDAwMCkpOw0KDQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pKQ0K CQkJJHRoaXMtPmFkZF9kYXRhKCR0aGlzLT5vcHRpb25zWydjb21tZW50J10pOw0KDQoJCWNo ZGlyKCRwd2QpOw0KDQoJCXJldHVybiAxOw0KCX0NCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgQ2xhc3Mg ZFVuemlwMiB2Mi42Mg0KIw0KIyAgQXV0aG9yOiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQoj ICBFLU1haWw6IGFsZXhhbmRyZWJyIGF0IGdtYWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0g UFIgLyBCcmF6aWwNCiMNCiMgIE9iamVjdGl2ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3Mg cHJvZ3JhbW1lciB0byBlYXNpbHkgdW56aXAgZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJl cXVpcmVtZW50czoNCiMgICAgVGhpcyBjbGFzcyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBF bmFibGVkLiBJdCBpcyBkZWZhdWx0DQojICAgIGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5k IHRoZSB3b3JsZCwgYW5kIGZvciB0aGUgUEhQIFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoN CiMgICAqIEVycm9yIGhhbmRsaW5nDQojICAgKiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0 ZSwgdG8gY29tcGxldGVseSBhdm9pZCBhbnkgZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICog V3JpdGUgb3RoZXIgZGVjb21wcmVzcyBhbGdvcml0aG1zDQojDQojICBNZXRob2RzOg0KIyAg KiBkVW56aXAyKCRmaWxlbmFtZSkgICAgICAgICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZp bGVuYW1lDQojICAqIGdldExpc3QoWyRzdG9wT25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhl IGZpbGUgbGlzdA0KIyAgKiBnZXRFeHRyYUluZm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZl IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29tcHJlc3NlZCBmaWxlDQojICAqIGdldFppcElu Zm8oWyRlbnRyeV0pICAgICAgIC0gUmV0cmlldmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICog dW56aXAoJHppcGZpbGVuYW1lLCBbJG91dGZpbGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBV bnppcCBmaWxlDQojICAqIHVuemlwQWxsKFskb3V0RGlyLCBbJHppcERpciwgWyRtYWludGFp blN0cnVjdHVyZSwgWyRhcHBseUNobW9kXV1dXSkNCiMgICogY2xvc2UoKSAgICAgICAgICAg ICAgICAgICAgLSBDbG9zZSBmaWxlIGhhbmRsZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAq IF9fZGVzdHJveSgpICAgICAgICAgICAgICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCBy ZWxlYXNlIG1lbW9yeQ0KIw0KIyAgSWYgeW91IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZl IGFueSBpZGVhcyB0byBpbXByb3ZlIGl0LCBwbGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBh cmUgYWxsb3dlZCB0byByZWRpc3RyaWJ1dGUgdGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkg bmFtZSBhbmQgY29udGFjdCBlLW1haWwgb24gaXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBV U0UgVEhJUyBDTEFTUyBJTiBBTlkgT0YgWU9VUiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBL Tk9XIQ0KIyAgSWYgeW91IGhhdmUgcHJvYmxlbXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3 aWNlIGJlZm9yZSBjb250YWN0aW5nIG1lIQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KaWYoIWZ1bmN0aW9u X2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKSl7DQoJLy8gSWYgbm90IFBIUDUsIGNyZWF0 ZXMgYSBjb21wYXRpYmxlIGZ1bmN0aW9uDQoJRnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMo JGZpbGUsICRkYXRhKXsNCgkJaWYoJHRtcCA9IGZvcGVuKCRmaWxlLCAidyIpKXsNCgkJCWZ3 cml0ZSgkdG1wLCAkZGF0YSk7DQoJCQlmY2xvc2UoJHRtcCk7DQoJCQlyZXR1cm4gdHJ1ZTsN CgkJfQ0KCQllY2hvICI8Yj5maWxlX3B1dF9jb250ZW50czo8L2I+IENhbm5vdCBjcmVhdGUg ZmlsZSAkZmlsZTxicj4iOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRf ZFVuemlwMnsNCglGdW5jdGlvbiBnZXRWZXJzaW9uKCl7DQoJCXJldHVybiAiMi42MiI7DQoJ fQ0KCS8vIFB1YmxpYw0KCXZhciAkZmlsZU5hbWU7DQoJdmFyICRsYXN0RXJyb3I7DQoJdmFy ICRjb21wcmVzc2VkTGlzdDsgLy8gWW91IHdpbGwgcHJvYmxhYmx5IHVzZSBvbmx5IHRoaXMg b25lIQ0KCXZhciAkY2VudHJhbERpckxpc3Q7IC8vIENlbnRyYWwgZGlyIGxpc3QuLi4gSXQn cyBhIGtpbmQgb2YgJ2V4dHJhIGF0dHJpYnV0ZXMnIGZvciBhIHNldCBvZiBmaWxlcw0KCXZh ciAkZW5kT2ZDZW50cmFsOyAgIC8vIEVuZCBvZiBjZW50cmFsIGRpciwgY29udGFpbnMgWklQ IENvbW1lbnRzDQoJdmFyICRkZWJ1ZzsNCg0KCS8vIFByaXZhdGUNCgl2YXIgJGZoOw0KCXZh ciAkemlwU2lnbmF0dXJlID0gIlx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhl YWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAy IjsgLy8gY2VudHJhbCBkaXIgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJl RT0gIlx4NTBceDRiXHgwNVx4MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJl DQoJDQoJLy8gUHVibGljDQoJRnVuY3Rpb24gc21kX2RVbnppcDIoJGZpbGVOYW1lKXsNCgkJ JHRoaXMtPmZpbGVOYW1lICAgICAgID0gJGZpbGVOYW1lOw0KCQkkdGhpcy0+Y29tcHJlc3Nl ZExpc3QgPSANCgkJJHRoaXMtPmNlbnRyYWxEaXJMaXN0ID0gDQoJCSR0aGlzLT5lbmRPZkNl bnRyYWwgICA9IEFycmF5KCk7DQoJfQ0KCQ0KCUZ1bmN0aW9uIGdldExpc3QoJHN0b3BPbkZp bGU9ZmFsc2Upew0KCQlpZihzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0KSl7DQoJCQkk dGhpcy0+ZGVidWdNc2coMSwgIlJldHVybmluZyBhbHJlYWR5IGxvYWRlZCBmaWxlIGxpc3Qu Iik7DQoJCQlyZXR1cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCQl9DQoJCQ0KCQkvLyBP cGVuIGZpbGUsIGFuZCBzZXQgZmlsZSBoYW5kbGVyDQoJCSRmaCA9IGZvcGVuKCR0aGlzLT5m aWxlTmFtZSwgInIiKTsNCgkJJHRoaXMtPmZoID0gJiRmaDsNCgkJaWYoISRmaCl7DQoJCQkk dGhpcy0+ZGVidWdNc2coMiwgIkZhaWxlZCB0byBsb2FkIGZpbGUuIik7DQoJCQlyZXR1cm4g ZmFsc2U7DQoJCX0NCgkJDQoJCSR0aGlzLT5kZWJ1Z01zZygxLCAiTG9hZGluZyBsaXN0IGZy b20gJ0VuZCBvZiBDZW50cmFsIERpcicgaW5kZXggbGlzdC4uLiIpOw0KCQlpZighJHRoaXMt Pl9sb2FkRmlsZUxpc3RCeUVPRigkZmgsICRzdG9wT25GaWxlKSl7DQoJCQkkdGhpcy0+ZGVi dWdNc2coMSwgIkZhaWxlZCEgVHJ5aW5nIHRvIGxvYWQgbGlzdCBsb29raW5nIGZvciBzaWdu YXR1cmVzLi4uIik7DQoJCQlpZighJHRoaXMtPl9sb2FkRmlsZUxpc3RCeVNpZ25hdHVyZXMo JGZoLCAkc3RvcE9uRmlsZSkpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiRmFpbGVkISBD b3VsZCBub3QgZmluZCBhbnkgdmFsaWQgaGVhZGVyLiIpOw0KCQkJCSR0aGlzLT5kZWJ1Z01z ZygyLCAiWklQIEZpbGUgaXMgY29ycnVwdGVkIG9yIGVtcHR5Iik7DQoJCQkJcmV0dXJuIGZh bHNlOw0KCQkJfQ0KCQl9DQoJCQ0KCQlpZigkdGhpcy0+ZGVidWcpew0KCQkJIy0tLS0tLS0g RGVidWcgY29tcHJlc3NlZExpc3QNCgkJCSRra2sgPSAwOw0KCQkJZWNobyAiPHRhYmxlIGJv cmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQg IzAwMCc+IjsNCgkJCWZvcmVhY2goJHRoaXMtPmNvbXByZXNzZWRMaXN0IGFzICRmaWxlTmFt ZT0+JGl0ZW0pew0KCQkJCWlmKCEka2trICYmICRra2s9MSl7DQoJCQkJCWVjaG8gIjx0ciBz dHlsZT0nYmFja2dyb3VuZDogI0FEQSc+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmll bGROYW1lPT4kdmFsdWUpDQoJCQkJCQllY2hvICI8dGQ+JGZpZWxkTmFtZTwvdGQ+IjsNCgkJ CQkJZWNobyAnPC90cj4nOw0KCQkJCX0NCgkJCQllY2hvICI8dHIgc3R5bGU9J2JhY2tncm91 bmQ6ICNDRkMnPiI7DQoJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUp ew0KCQkJCQlpZigkZmllbGROYW1lID09ICdsYXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCWVj aG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiIuZGF0ZSgiZC9t L1kgSDppOnMiLCAkdmFsdWUpLiI8L3RkPiI7DQoJCQkJCWVsc2UNCgkJCQkJCWVjaG8gIjx0 ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJ CQl9DQoJCQkJZWNobyAiPC90cj4iOw0KCQkJfQ0KCQkJZWNobyAiPC90YWJsZT4iOw0KCQkJ DQoJCQkjLS0tLS0tLSBEZWJ1ZyBjZW50cmFsRGlyTGlzdA0KCQkJJGtrayA9IDA7DQoJCQlp ZihzaXplb2YoJHRoaXMtPmNlbnRyYWxEaXJMaXN0KSl7DQoJCQkJZWNobyAiPHRhYmxlIGJv cmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQg IzAwMCc+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZU5h bWU9PiRpdGVtKXsNCgkJCQkJaWYoISRra2sgJiYgJGtraz0xKXsNCgkJCQkJCWVjaG8gIjx0 ciBzdHlsZT0nYmFja2dyb3VuZDogI0FBRCc+IjsNCgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMg JGZpZWxkTmFtZT0+JHZhbHVlKQ0KCQkJCQkJCWVjaG8gIjx0ZD4kZmllbGROYW1lPC90ZD4i Ow0KCQkJCQkJZWNobyAnPC90cj4nOw0KCQkJCQl9DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0n YmFja2dyb3VuZDogI0NDRic+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1l PT4kdmFsdWUpew0KCQkJCQkJaWYoJGZpZWxkTmFtZSA9PSAnbGFzdG1vZF9kYXRldGltZScp DQoJCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+ Ii5kYXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJCWVsc2UNCgkJ CQkJCQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUnIG5vd3JhcD0nbm93cmFwJz4kdmFs dWU8L3RkPiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJCX0NCgkJCQllY2hv ICI8L3RhYmxlPiI7DQoJCQl9DQoJCQ0KCQkJIy0tLS0tLS0gRGVidWcgZW5kT2ZDZW50cmFs DQoJCQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+ZW5kT2ZDZW50cmFsKSl7DQoJ CQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYScg c3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDAnPiI7DQoJCQkJZWNobyAiPHRyIHN0eWxl PSdiYWNrZ3JvdW5kOiAjREFBJz48dGQgY29sc3Bhbj0nMic+ZFVuemlwIC0gRW5kIG9mIGZp bGU8L3RkPjwvdHI+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5lbmRPZkNlbnRyYWwgYXMgJGZp ZWxkPT4kdmFsdWUpew0KCQkJCQllY2hvICI8dHI+IjsNCgkJCQkJZWNobyAiPHRkIHN0eWxl PSdiYWNrZ3JvdW5kOiAjRkNDJz4kZmllbGQ8L3RkPiI7DQoJCQkJCWVjaG8gIjx0ZCBzdHls ZT0nYmFja2dyb3VuZDogI0ZERCc+JHZhbHVlPC90ZD4iOw0KCQkJCQllY2hvICI8L3RyPiI7 DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJu ICR0aGlzLT5jb21wcmVzc2VkTGlzdDsNCgl9DQoJRnVuY3Rpb24gZ2V0RXh0cmFJbmZvKCRj b21wcmVzc2VkRmlsZU5hbWUpew0KCQlyZXR1cm4NCgkJCWlzc2V0KCR0aGlzLT5jZW50cmFs RGlyTGlzdFskY29tcHJlc3NlZEZpbGVOYW1lXSk/DQoJCQkkdGhpcy0+Y2VudHJhbERpckxp c3RbJGNvbXByZXNzZWRGaWxlTmFtZV06DQoJCQlmYWxzZTsNCgl9DQoJRnVuY3Rpb24gZ2V0 WmlwSW5mbygkZGV0YWlsPWZhbHNlKXsNCgkJcmV0dXJuICRkZXRhaWw/DQoJCQkkdGhpcy0+ ZW5kT2ZDZW50cmFsWyRkZXRhaWxdOg0KCQkJJHRoaXMtPmVuZE9mQ2VudHJhbDsNCgl9DQoJ DQoJRnVuY3Rpb24gdW56aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwgJHRhcmdldEZpbGVOYW1l PWZhbHNlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoIXNpemVvZigkdGhpcy0+Y29tcHJl c3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5aW5nIHRvIHVuemlwIGJl Zm9yZSBsb2FkaW5nIGZpbGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIpOw0KCQkJJHRoaXMtPmdl dExpc3QoZmFsc2UsICRjb21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9DQoJCQ0KCQkkZmRldGFp bHMgPSAmJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdOw0KCQlp ZighaXNzZXQoJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdKSl7 DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkZpbGUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8 L2I+JyBpcyBub3QgY29tcHJlc3NlZCBpbiB0aGUgemlwLiIpOw0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJCWlmKHN1YnN0cigkY29tcHJlc3NlZEZpbGVOYW1lLCAtMSkgPT0gIi8iKXsN CgkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiVHJ5aW5nIHRvIHVuemlwIGEgZm9sZGVyIG5hbWUg JzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+Jy4iKTsNCgkJCXJldHVybiBmYWxzZTsNCgkJ fQ0KCQlpZighJGZkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddKXsNCgkJCSR0aGlzLT5k ZWJ1Z01zZygxLCAiRmlsZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4nIGlzIGVtcHR5 LiIpOw0KCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQlmaWxlX3B1dF9jb250ZW50 cygkdGFyZ2V0RmlsZU5hbWUsICIiKToNCgkJCQkiIjsNCgkJfQ0KCQkNCgkJZnNlZWsoJHRo 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 cHJlc3Npb24gZm9ybWF0IG9uIHRoaXMgaW5zdGFsbGF0aW9uJywNCgkJJ3Vuc3VwcG9ydGVk X2ZpbGV0eXBlJyA9PiAnRmlsZSBpcyBub3Qgb2YgYSBzdXBwb3J0ZWQgdHlwZScsDQoJCSd1 bnN1cHBvcnRlZF9mdWRnZScgPT4gJzogaGl0IFNhdmUgYWdhaW4gdG8gc3RvcmUgYW55d2F5 JywNCgkJJ3VwZGF0ZScgPT4gJ1VwZGF0ZScsDQoJCSd1cGxvYWRfZmFpbGVkJyA9PiAnSW1h Z2UgY291bGQgbm90IGJlIHVwbG9hZGVkJywNCgkJJ3VwbG9hZF9pbWFnZScgPT4gJ1VwbG9h ZCBpbWFnZScsDQoJCSd1cGxvYWRfc3VjY2VzcycgPT4gJ0ltYWdlIHVwbG9hZGVkIHN1Y2Nl c3NmdWxseScsDQoJCSd2ZXJzaW9uJyA9PiAndicsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxh bmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJvcmRlciI7 czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjMiO3M6NDoiaGVscCI7czoyMzY2NjoiPGRpdiBp 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+Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0cyI+Q3JlZGl0czwvaDI+CgoJPHA+VGhp cyBwbHVnaW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9u LCBpZGVhcyBhbmQgZ2VuaXVzIG9mIHRoZSBUZXh0cGF0dGVybiBkZXZlbG9wbWVudCB0ZWFt LCBlc3BlY2lhbGx5IFJvYmVydCBXZXR6bG1heXIgZm9yIHRoZSB0aGVtZSBzdXBwb3J0LiBQ bHVzIG9mIGNvdXJzZSB0aGUgYXJteSBvZiBiZXRhIHRlc3RlcnMsIGlkZWFzIGhhbXN0ZXJz IGFuZCB0aXJlbGVzcyB0aGVtZSBhZHZvY2F0ZXMsIG1vc3Qgbm90YWJseSBTdHVhcnQgQnV0 Y2hlciwgRGFsZSBDaGFwbWFuLCBEYXZlIERlU2FuZHJvLCBhbmQgTWlrZSBEZW5uaXMuPC9w PgoKCTxwPkkgYW0gYWxzbyBpbmRlYnRlZCB0byB0aGUgbGlicmFyaWVzIGhvc3RlZCBhdCA8 YSBocmVmPSJodHRwOi8vcGhwY2xhc3Nlcy5vcmcvIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQ PC9zcGFuPiBDbGFzc2VzPC9hPiB0aGF0IGVuYWJsZWQgbmF0aXZlIGNvbXByZXNzaW9uIGFu ZCBkZWNvbXByZXNzaW9uIG9mIHZhcmlvdXMgdHlwZXMuIFRoZSBoYXJkIHdvcmsgb2YgRGV2 aW4gRG91Y2V0dGUgYW5kIEFsZXhhbmRyZSBUZWRlc2NoaSByZWFsbHkgYWRkZWQgdGhlIGlj aW5nIG9uIHRoZSBjYWtlIGZvciB0aGlzIHBsdWdpbi48L3A+CgoJPHA+S3Vkb3MgYW5kIHRo YW5rcyB0byB5b3UgYWxsLjwvcD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NT ICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWln aHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1 JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1j b2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9y bWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhj OyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsg fQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5z LXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIg eyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNv bG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxw IGgzIHsgY29sb3I6ICMyNzU2ODU7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJp ZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRyYW5zZm9y bTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9oZWxwIGg0 IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzog MXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNz bWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiMzM2Q7IH0KI3NtZF9o ZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9 CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGlu Zy1ib3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHgg c29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxl LXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAucmVxdWlyZWQge2NvbG9yOnJlZDt9CiNzbWRf aGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFr IHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1Mg KioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJmMjIwMTM1MzQ0NmNiYmI1NDJlMmFlNjE2MmIz ZTM0NCI7fQ==