# Name: smd_thumbnail v0.21 # Type: Admin/Public side plugin # Multiple image thumbnails of arbitrary dimensions # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfdGh1bWJuYWlsIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjIxIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo0OToiTXVsdGlwbGUgaW1hZ2UgdGh1bWJuYWlscyBvZiBhcmJpdHJhcnkgZGltZW5zaW9u cyI7czo0OiJjb2RlIjtzOjQ2MTgyOiJpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7 DQoJZ2xvYmFsICRzbWRfdGh1bWJfZXZlbnQsICRzbWRfdGh1bWJfc3R5bGVzLCAkc21kX3Ro dW1iX3ByZXZzOw0KDQoJJHNtZF90aHVtYl9ldmVudCA9ICdzbWRfdGh1bWJuYWlsJzsNCgkk c21kX3RodW1iX3ByaXZzID0gJzEsMiwzJzsgLy8gUGx1Z2luIHByaXZzDQoJJHNtZF90aHVt Yl9wcmV2cyA9IGFycmF5KCcxJyk7IC8vIFByaXZzIGZvciBwcmVmcw0KDQoJJHNtZF90aHVt Yl9zdHlsZXMgPSBhcnJheSgNCgkJJ2VkaXQnID0+DQogICAgICAgICAnLnNtZF9zZWxlY3Rl ZCB7IGJvcmRlcjoxcHggc29saWQgcmVkOyBiYWNrZ3JvdW5kOnJlZDsgfQ0KICAgICAgICAg ICNzbWRfdGh1bWJzIGltZyB7IHBhZGRpbmc6MnB4OyBtYXJnaW46MXB4OyBib3JkZXI6MXB4 IHNvbGlkIGJsYWNrOyB9DQogICAgICAgICAgLnRodW1ibmFpbC1hbHRlciB7IGRpc3BsYXk6 bm9uZTsgfScsDQoJCSdwcm9maWxlJyA9Pg0KICAgICAgICAgJy5zbWRfaGlkZGVuIHsgZGlz cGxheTpub25lOyB9DQogICAgICAgICAgI3NtZF90aHVtYl9wcm9maWxlcyB7IHdpZHRoOjcw MHB4OyBtYXJnaW46MCBhdXRvIDE4cHg7IHBvc2l0aW9uOnJlbGF0aXZlOyB9DQogICAgICAg ICAgI3NtZF90aHVtYl9iYXRjaCB7IGZsb2F0OnJpZ2h0OyB9DQogICAgICAgICAgLnNtZF9p bmFjdGl2ZSB7IG9wYWNpdHk6LjM7IH0NCiAgICAgICAgICAuc21kX3RodW1iX2hlYWRpbmdf YWN0aXZlIHsgY3Vyc29yOnBvaW50ZXI7IH0NCiAgICAgICAgICAjc21kX3RodW1iX3Byb2Zp bGVfZm9ybSB7IHBhZGRpbmctdG9wOjhweDsgfQ0KICAgICAgICAgIGZvcm0jc21kX3RodW1i X3Byb2ZpbGVfZm9ybSB0ZCB7IGJvcmRlcjogMDsgfQ0KICAgICAgICAgIC5wcmVmLWxhYmVs IHsgdGV4dC1hbGlnbjogcmlnaHQhaW1wb3J0YW50OyB9DQogICAgICAgICAgLnNtZF90aHVt Yl9idG4geyBwb3NpdGlvbjphYnNvbHV0ZTsgcmlnaHQ6MTBweDsgdG9wOi0xMnB4OyB0ZXh0 LWFsaWduOmNlbnRlcjsgcGFkZGluZzozcHg7IH0nLA0KCSk7DQoNCglhZGRfcHJpdnMoJHNt ZF90aHVtYl9ldmVudCwgJHNtZF90aHVtYl9wcml2cyk7DQoJYWRkX3ByaXZzKCdzbWRfdGh1 bWJfcHJvZmlsZXMnLCAkc21kX3RodW1iX3ByaXZzKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3RodW1iX3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNsZS4nLiRzbWRfdGh1bWJfZXZl bnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfcHJvZmlsZXMnLCAnaW1hZ2Vf dWknLCAnZXh0ZW5kX2NvbnRyb2xzJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVt YnMnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWlsJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF90aHVtYl9lZGl0JywgJ2ltYWdlX3VpJywgJ3RodW1ibmFpbF9lZGl0Jyk7DQoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9jcmVhdGUnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWls X2NyZWF0ZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfZ2VuZXJhdGUnLCAn aW1hZ2VfdXBsb2FkZWQnLCAnaW1hZ2UnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Ro dW1iX2RlbGV0ZScsICdpbWFnZV9kZWxldGVkJywgJ2ltYWdlJyk7DQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF90aHVtYl9jcmVhdGVfb25lJywgJ2ltYWdlJywgJ3NtZF90aHVtYl9jcmVh dGVfb25lJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9zd2l0Y2hfYWN0aXZl JywgJ2ltYWdlJywgJ3NtZF90aHVtYl9zd2l0Y2hfYWN0aXZlJyk7DQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF90aHVtYl9zd2l0Y2hfcHJlZicsICdpbWFnZScsICdzbWRfdGh1bWJfc3dp dGNoX3ByZWYnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX2luc2VydCcsICdp bWFnZScsICdzbWRfdGh1bWJuYWlsX2luc2VydCcsIDEpOw0KDQp9IGVsc2Ugew0KCWdsb2Jh bCAkcGF0aF90b19zaXRlLCAkaW1nX2RpcjsNCglpZiAoIWRlZmluZWQoJ0lNUEFUSCcpKSB7 DQoJCWRlZmluZSgiSU1QQVRIIiwkcGF0aF90b19zaXRlLkRTLiRpbWdfZGlyLkRTKTsNCgl9 DQp9DQoNCmlmICghZGVmaW5lZCgnU01EX1RIVU1CJykpIHsNCglkZWZpbmUoIlNNRF9USFVN QiIsICdzbWRfdGh1bWJuYWlsJyk7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9USFVNQl9BQ1RJ VkUnKSkgew0KCWRlZmluZSgiU01EX1RIVU1CX0FDVElWRSIsIDEpOw0KfQ0KaWYgKCFkZWZp bmVkKCdTTURfVEhVTUJfQ1JPUCcpKSB7DQoJZGVmaW5lKCJTTURfVEhVTUJfQ1JPUCIsIDIp Ow0KfQ0KaWYgKCFkZWZpbmVkKCdTTURfVEhVTUJfU0hBUlAnKSkgew0KCWRlZmluZSgiU01E X1RIVU1CX1NIQVJQIiwgNCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVt Yl93ZWxjb21lKCRldnQsICRzdHApIHsNCglzd2l0Y2ggKCRzdHApIHsNCgkJY2FzZSAnaW5z dGFsbGVkJzoNCgkJCXNtZF90aHVtYl90YWJsZV9pbnN0YWxsKCk7DQoJCQkvLyBSZW1vdmUg cGVyLXVzZXIgcHJlZnMgb24gdXBncmFkZSBmcm9tIHYwLjF4IHRvIHYwLjIwDQoJCQlzYWZl X2RlbGV0ZSAoJ3R4cF9wcmVmcycsICJuYW1lIElOICgnc21kX3RodW1iX3R4cF9jcmVhdGUn LCAnc21kX3RodW1iX3R4cF9kZWxldGUnLCAnc21kX3RodW1iX2F1dG9fcmVwbGFjZScpIEFO RCB1c2VyX25hbWUgIT0gJyciKTsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJ CXNtZF90aHVtYl90YWJsZV9yZW1vdmUoKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm47DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGlzcGxheSB0aGUgZGVzaWdu YXRlZCBkZWZhdWx0IHRodW1ibmFpbCBvbiB0aGUgbGlzdCBwYWdlDQpmdW5jdGlvbiBzbWRf dGh1bWJzKCRldnQsICRzdHAsICRkZmx0LCAkY3VycmltZykgew0KCWV4dHJhY3QoZ3BzYShh cnJheSgncGFnZScsICdzb3J0JywgJ2RpcicsICdjcml0JywgJ3NlYXJjaF9tZXRob2QnKSkp Ow0KDQoJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCSRkZWZhdWx0ID0gZ2V0 X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgMSk7DQoJCWlmICgkZGVm YXVsdCkgew0KCQkJJHJvdyA9IHNhZmVfcm93KCcqJywgU01EX1RIVU1CLCAibmFtZT0nIi5z YW5pdGl6ZUZvclVybCgkZGVmYXVsdCkuIiciKTsNCgkJCWlmICgkcm93KSB7DQoJCQkJJGVk aXRfdXJsID0gJz9ldmVudD1pbWFnZScuYS4nc3RlcD1pbWFnZV9lZGl0Jy5hLidpZD0nLiRj dXJyaW1nWydpZCddLmEuJ3NvcnQ9Jy4kc29ydC4NCgkJCQkJCWEuJ2Rpcj0nLiRkaXIuYS4n cGFnZT0nLiRwYWdlLmEuJ3NlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC5hLidjcml0 PScuJGNyaXQ7DQoJCQkJJG91dCA9IHNtZF90aHVtYl9pbWcoJHJvdywgJGN1cnJpbWcpOw0K CQkJCXJldHVybiAoJG91dCkgPyBocmVmKCRvdXQsICRlZGl0X3VybCkgOiBnVHh0KCdubycp Ow0KCQkJfSBlbHNlIHsNCgkJCQlyZXR1cm4gZ1R4dCgnbm8nKTsNCgkJCX0NCgkJfSBlbHNl IHsNCgkJCXJldHVybiBnVHh0KCdubycpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIERvbid0IHdhbnQgdGhlICdjcmVhdGUnIGNvbnRyb2xzIGFz IHRoZXkncmUgaGFuZGxlZCBpbiB0aGUgZWRpdCBwb3J0aW9uIG9mIHRoZSBzY3JlZW4NCmZ1 bmN0aW9uIHNtZF90aHVtYl9jcmVhdGUoJGV2dCwgJHN0cCwgJGRmbHQsICRjdXJyaW1nKSB7 DQoJcmV0dXJuICcgJzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBX aXRoIGEgbG90IG9mIGltYWdlcyBpbiB0aGUgZGF0YWJhc2UsIGRvaW5nIGl0IGFsbCBpbiBv bmUgaGl0IHdvdWxkIHRpbWUgb3V0Lg0KLy8gU28gaXQncyBkb25lIHZpYSBhamF4OyBvbmUg cmVxdWVzdCBwZXIgaW1hZ2UNCmZ1bmN0aW9uIHNtZF90aHVtYl9jcmVhdGVfZ3JvdXAoJHR5 cGUsICRsc3Q9JycpIHsNCglzd2l0Y2ggKCR0eXBlKSB7DQoJCWNhc2UgJ2FsbCc6DQoJCQkk d2hlcmUgPSAnMT0xJzsNCgkJCWJyZWFrOw0KCQljYXNlICdzZWwnOg0KCQkJJHdoZXJlID0g KCRsc3QpID8gJ2lkIElOICgnLmRvU2xhc2goJGxzdCkuJyknIDogJzE9MCc7DQoJCQlicmVh azsNCgkJY2FzZSAnY2F0JzoNCgkJCSR3aGVyZSA9ICJjYXRlZ29yeSBpbiAoJyIuZG9TbGFz aCgkbHN0KS4iJykiOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3Vzcic6DQoJCQkkd2hlcmUgPSAi YXV0aG9yIGluICgnIi5kb1NsYXNoKCRsc3QpLiInKSI7DQoJCQlicmVhazsNCgl9DQoNCgkk aW1hZ2VzID0gc2FmZV9jb2x1bW4oJ2lkJywgJ3R4cF9pbWFnZScsICR3aGVyZSk7DQoJJGNv dW50ID0gY291bnQoJGltYWdlcyk7DQoNCgllY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+JzsNCgllY2hvICJ2YXIgYmN0ciA9IDA7IHZhciBidG90ID0geyRjb3VudH07 IjsNCgllY2hvICdqUXVlcnkoZnVuY3Rpb24oKSB7JzsNCgllY2hvICdqUXVlcnkoIiNzbWRf dGh1bWJfYnRvdCIpLnRleHQoIi8nLiRjb3VudC4nIik7JzsNCglmb3JlYWNoICgkaW1hZ2Vz IGFzICRpbWcpIHsNCgkJZWNobyA8PDxFT0pTDQoJCXNlbmRBc3luY0V2ZW50KA0KCQl7DQoJ CQlldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsDQoJCQlzdGVwOiAnc21kX3RodW1iX2NyZWF0 ZV9vbmUnLA0KCQkJc21kX3RodW1iX2ltZ2lkOiB7JGltZ30NCgkJfSwgc21kX2NyZWF0ZV9n cm91cF9mZWVkYmFjayk7DQpFT0pTOw0KCX0NCgllY2hvICd9KTsnOw0KCWVjaG8gPDw8RU9K Uw0KCWZ1bmN0aW9uIHNtZF9jcmVhdGVfZ3JvdXBfZmVlZGJhY2soKSB7DQoJCWJjdHIrKzsN CgkJalF1ZXJ5KCcjc21kX3RodW1iX2JjdXJyJykudGV4dChiY3RyKTsNCi8vCQlpZiAoYmN0 ciA+PSBidG90KSB7DQovLwkJCWpRdWVyeSgnI3NtZF90aHVtYl9iY3Vyciwjc21kX3RodW1i X2J0b3QnKS5lbXB0eSgpOw0KLy8JCX0NCgl9DQpFT0pTOw0KCWVjaG8gJzwvc2NyaXB0Pic7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1i X2NyZWF0ZV9vbmUoKSB7DQoJJGN1cnJpbWcgPSBncHMoJ3NtZF90aHVtYl9pbWdpZCcpOw0K CWFzc2VydF9pbnQoJGN1cnJpbWcpOw0KDQoJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RI VU1CLCAnMT0xIEFORCBmbGFncyAmICcuU01EX1RIVU1CX0FDVElWRSk7DQoJJGN1cnIgPSBz YWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAiaWQ9Ii5kb1NsYXNoKCRjdXJyaW1nKSk7DQoJ aWYgKCRycykgew0KCQlzbWRfdGh1bWJfbWFrZSgkcnMsICRjdXJyLCAxKTsNCgkJc2VuZF94 bWxfcmVzcG9uc2UoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9hY3RpdmUoKSB7DQoJJG5hbWUgPSBkb1NsYXNo KGdwcygnc21kX3RodW1iX3Byb2ZpbGUnKSk7DQoJaWYgKCRuYW1lKSB7DQoJCXNhZmVfdXBk YXRlKFNNRF9USFVNQiwgJ2ZsYWdzID0gZmxhZ3MgXiAnLlNNRF9USFVNQl9BQ1RJVkUsICJu YW1lPSckbmFtZSciKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoYXJyYXkoJ3NtZF90aHVtYl9w cm9maWxlJyA9PiAkbmFtZSkpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfc3dpdGNoX3ByZWYoKSB7DQoJJG5hbWUgPSBkb1Ns YXNoKGdwcygnc21kX3RodW1iX3R4cHR5cGUnKSk7DQoJJHN0YXRlID0gZG9TbGFzaChncHMo J3NtZF90aHVtYl9zdGF0ZScpKTsNCglpZiAoJG5hbWUpIHsNCgkJc2V0X3ByZWYoJ3NtZF90 aHVtYl8nLiRuYW1lLCAkc3RhdGUsICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3RleHRf aW5wdXQnKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX2dlbmVyYXRlKCRldnQsICRz dHApIHsNCgkkaWQgPSBkb1NsYXNoKGdwcygnaWQnKSk7DQoNCgkkaWQgPSAoJGlkKSA/ICRp ZCA6ICRHTE9CQUxTWydJRCddOw0KCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwg JzE9MSBBTkQgZmxhZ3MgJiAnLlNNRF9USFVNQl9BQ1RJVkUpOw0KDQoJc21kX3RodW1iX21h a2UoJHJzLCAkaWQpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF90aHVtYl9kZWxldGUoJGV2dCwgJHN0cCkgew0KCSRpZHMgPSBncHMoJ3NlbGVj dGVkJyk7DQoJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCAnMT0xJyk7DQoNCgkk aW1hZ2VzID0gc2FmZV9yb3dzKCcqJywgJ3R4cF9pbWFnZScsICdpZCBJTiAoJyAuIGpvaW4o JywnLHF1b3RlX2xpc3QoJGlkcykpIC4gJyknKTsNCglmb3JlYWNoICgkaW1hZ2VzIGFzICRp bWcpIHsNCgkJc21kX3RodW1iX3VubWFrZSgkcnMsICRpbWcpOw0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfbWFrZSgkcnMsICRj dXJyaW1nLCAkZm9yY2U9MCkgew0KCS8vIFdyYXBwZXIgZm9yIHdldF90aHVtYiB0byBhbGxv dyBtdWx0aXBsZSB0aHVtYm5haWxzDQoJJG1zZyA9ICcnOw0KCWlmICghY2xhc3NfZXhpc3Rz KCdzbWRfdGh1bWInKSkgew0KCQljbGFzcyBzbWRfdGh1bWIgZXh0ZW5kcyB3ZXRfdGh1bWIg ew0KCQkJdmFyICRtX2V4dDsNCgkJCXZhciAkbV9pZDsNCgkJCXZhciAkbV9kaXI7DQoJCQl2 YXIgJG1fZGZsdDsNCgkJCXZhciAkd2lkdGg7DQoJCQl2YXIgJGhlaWdodDsNCgkJCXZhciAk Zm9yY2U7DQoNCgkJCS8vIENvbnN0cnVjdG9yDQoJCQlmdW5jdGlvbiBzbWRfdGh1bWIgKCRp ZCwgJGRpciwgJGltZ19yb3csICRpc19kZWZhdWx0PWZhbHNlLCAkcHJvX3c9JycsICRwcm9f aD0nJywgJGZvcmNlPTApIHsNCgkJCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7DQoJCQkJaWYg KCRpbWdfcm93KSB7DQoJCQkJCWV4dHJhY3QoJGltZ19yb3cpOw0KCQkJCQkkdGhpcy0+bV9p ZCA9ICRpZDsNCgkJCQkJJHRoaXMtPm1fZXh0ID0gJGV4dDsNCgkJCQkJJHRoaXMtPm1fZGly ID0gJGRpcjsNCgkJCQkJJHRoaXMtPmZvcmNlID0gJGZvcmNlOw0KCQkJCQkkdGhpcy0+d2lk dGggPSAkcHJvX3c7DQoJCQkJCSR0aGlzLT5oZWlnaHQgPSAkcHJvX2g7DQoJCQkJCSR0aGlz LT5tX2RmbHQgPSAkaXNfZGVmYXVsdDsNCgkJCQl9DQoJCQkJJHRoaXMtPndldF90aHVtYigp OyAvLyBjb25zdHJ1Y3QgYmFzZSBjbGFzcyBpbnN0YW5jZQ0KCQkJfQ0KDQoJCQlmdW5jdGlv biB3cml0ZSgpIHsNCgkJCQlpZiAoICFpc3NldCgkdGhpcy0+bV9leHQpICkgcmV0dXJuIGZh bHNlOw0KDQoJCQkJJGF1dG9yID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9hdXRvX3JlcGxhY2Un LCAnMCcpOw0KCQkJCSRpbmZpbGUgPSBJTVBBVEguJHRoaXMtPm1faWQuJHRoaXMtPm1fZXh0 Ow0KCQkJCSRvdXRmaWxlID0gSU1QQVRILiR0aGlzLT5tX2Rpci5EUy4kdGhpcy0+bV9pZC4k dGhpcy0+bV9leHQ7DQoNCgkJCQlpZiAoIWZpbGVfZXhpc3RzKCRvdXRmaWxlKSB8fCAkYXV0 b3IgfHwgJHRoaXMtPmZvcmNlKSB7DQoJCQkJCS8vIElmIHRoaXMgaXMgdGhlIGRlZmF1bHQg cHJvZmlsZSBhbmQgdGhlIHByZWYgaW5kaWNhdGVzLCB3cml0ZSBhIFRYUCB0aHVtYiB0b28N CgkJCQkJaWYgKCgkdGhpcy0+bV9kZmx0ID09IHRydWUpICYmIChnZXRfcHJlZignc21kX3Ro dW1iX3R4cF9jcmVhdGUnLCAnMCcpKSkgew0KCQkJCQkJJHR4cF90aHVtYiA9IElNUEFUSC4k dGhpcy0+bV9pZC4ndCcuJHRoaXMtPm1fZXh0Ow0KCQkJCQkJaWYgKCBwYXJlbnQ6OndyaXRl ICggJGluZmlsZSwgJHR4cF90aHVtYiApICkgew0KCQkJCQkJCXNhZmVfdXBkYXRlKCd0eHBf aW1hZ2UnLCAidGh1bWJuYWlsID0gMSwgdGh1bWJfdyA9ICR0aGlzLT53aWR0aCwgdGh1bWJf aCA9ICR0aGlzLT5oZWlnaHQiLCAnaWQgPSAnLiR0aGlzLT5tX2lkKTsNCgkJCQkJCQlAY2ht b2QoJG91dGZpbGUsIDA2NDQpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJDQoJCQkJCWlmICggcGFy ZW50Ojp3cml0ZSAoICRpbmZpbGUsICRvdXRmaWxlICkgKSB7DQoJCQkJCQlAY2htb2QoJG91 dGZpbGUsIDA2NDQpOw0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJ cmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gSWYgcGFzc2VkIG9ubHkgYW4g SUQsIGxvb2sgdXAgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGENCglpZiAoIWlzX2FycmF5 KCRjdXJyaW1nKSkgew0KCQlhc3NlcnRfaW50KCRjdXJyaW1nKTsNCgkJJGN1cnJpbWcgPSBz YWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAnaWQ9Jy4kY3VycmltZyk7DQoJfQ0KDQoJLy8g Q3JlYXRlIGVhY2ggdGh1bWJuYWlsDQoJJHByb19kZmx0ID0gZ2V0X3ByZWYoJ3NtZF90aHVt Yl9kZWZhdWx0X3Byb2ZpbGUnLCAnJyk7DQoJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJ Ly8gU2FuaXRpemUgYSBsaXR0bGUNCgkJJHdpZHRoID0gKGludCkgJHJvd1snd2lkdGgnXTsN CgkJJGhlaWdodCA9IChpbnQpICRyb3dbJ2hlaWdodCddOw0KCQlpZiAoJHdpZHRoID09IDAp ICR3aWR0aCA9ICcnOw0KCQlpZiAoJGhlaWdodCA9PSAwKSAkaGVpZ2h0ID0gJyc7DQoJCWlm ICgkd2lkdGggPT09ICcnICYmICRoZWlnaHQgPT09ICcnKSBjb250aW51ZTsNCgkJJGNyb3Ag PSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOw0KCQkkc2hhcnBl biA9ICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX1NIQVJQKSA/IDEgOiAwOw0KCQkkaWQg PSAkY3VycmltZ1snaWQnXTsNCgkJJGlzX2RmbHQgPSAoJHJvd1snbmFtZSddID09ICRwcm9f ZGZsdCkgPyB0cnVlIDogZmFsc2U7DQoNCgkJJHQgPSBuZXcgc21kX3RodW1iKCRpZCwgc2Fu aXRpemVGb3JVcmwoJHJvd1snbmFtZSddKSwgJGN1cnJpbWcsICRpc19kZmx0LCAkd2lkdGgs ICRoZWlnaHQsICRmb3JjZSk7DQoJCSR0LT5leHRyYXBvbGF0ZSA9IHRydWU7IC8vIEFsbG93 IGJpZ2dlciB0aHVtYnMgdGhhbiBvcmlnaW5hbCBpbWFnZQ0KCQkkdC0+Y3JvcCA9ICgkY3Jv cCA9PSAnMScpOw0KCQkkdC0+c2hhcnBlbiA9ICgkc2hhcnBlbiA9PSAnMScpOw0KCQkkdC0+ aGludCA9ICcwJzsNCgkJJHQtPndpZHRoID0gJHdpZHRoOw0KCQkkdC0+aGVpZ2h0ID0gJGhl aWdodDsNCgkJJHQtPnF1YWxpdHkgPSAkcm93WydxdWFsaXR5J107DQoNCgkJaWYgKCR0LT53 cml0ZSgpKSB7DQoJCQkkbXNnID0gZ1R4dCgndGh1bWJuYWlsX3NhdmVkJywgYXJyYXkoJ3tp ZH0nID0+ICRpZCkpOw0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IGFycmF5KGdUeHQoJ3RodW1i bmFpbF9ub3Rfc2F2ZWQnLCBhcnJheSgne2lkfScgPT4gJGlkKSksIEVfRVJST1IpOw0KCQl9 DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF90aHVtYl91bm1ha2UoJHJzLCAkY3VycmltZykgew0KCSRpZCA9ICRj dXJyaW1nWydpZCddOw0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoJJHByb19kZmx0ID0g Z2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJyk7DQoJJHR4cF9kZWwg PSBnZXRfcHJlZignc21kX3RodW1iX3R4cF9kZWxldGUnLCAnMCcpOw0KDQoJZm9yZWFjaCAo JHJzIGFzICRyb3cpIHsNCgkJJHBhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwoJHJvd1sn bmFtZSddKS5EUy4kaWQuJGV4dDsNCgkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgew0KCQkJ dW5saW5rKCRwYXRoKTsNCgkJfQ0KDQoJCS8vIEFsc28gcmVtb3ZlIFRYUCdzIGJ1aWx0LWlu IHRodW1iPw0KCQlpZiAoKCRyb3dbJ25hbWUnXSA9PSAkcHJvX2RmbHQpICYmICgkdHhwX2Rl bCA9PSAnMScpKSB7DQoJCQkkcGF0aCA9IElNUEFUSC4kaWQuJ3QnLiRleHQ7DQoJCQlpZiAo ZmlsZV9leGlzdHMoJHBhdGgpKSB7DQoJCQkJc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScsICJ0 aHVtYm5haWwgPSAwLCB0aHVtYl93ID0gMCwgdGh1bWJfaCA9IDAiLCAnaWQgPSAnLiRpZCk7 DQoJCQkJdW5saW5rKCRwYXRoKTsNCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gJyc7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX2luc2Vy dCgpIHsNCglnbG9iYWwgJHR4cGNmZywkdHhwX3VzZXIsJGltZ19kaXIsJHBhdGhfdG9fc2l0 ZSwgJHBhZ2UsICRzb3J0LCAkZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2Q7DQoNCglpZiAo IWRlZmluZWQoJ0lNUEFUSCcpKSB7DQoJCWRlZmluZSgnSU1QQVRIJywkcGF0aF90b19zaXRl LkRTLiRpbWdfZGlyLkRTKTsNCgl9DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAn c29ydCcsICdkaXInLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJykpKTsNCg0KCWluY2x1ZGVf b25jZSB0eHBhdGguJy9saWIvdHhwbGliX21pc2MucGhwJzsNCg0KCWV4dHJhY3QoJHR4cGNm Zyk7DQoJJGlkID0gYXNzZXJ0X2ludChncHMoJ2lkJykpOw0KCSRwcm9maWxlID0gZ3BzKCdz bWRfdGh1bWJfcHJvZmlsZScpOw0KCSR0aHVtYl9leHQgPSBncHMoJ3NtZF90aHVtYl9leHQn KTsNCg0KCSRhdXRob3IgPSBmZXRjaCgnYXV0aG9yJywgJ3R4cF9pbWFnZScsICdpZCcsICRp ZCk7DQoJaWYgKCFoYXNfcHJpdnMoJ2ltYWdlLmVkaXQnKSAmJiAhKCRhdXRob3IgPT0gJHR4 cF91c2VyICYmIGhhc19wcml2cygnaW1hZ2UuZWRpdC5vd24nKSkpIHsNCgkJcmV0dXJuOw0K CX0NCg0KCSRmaWxlID0gJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddOw0KCSRuYW1l ID0gJF9GSUxFU1sndGhlZmlsZSddWyduYW1lJ107DQoNCgkkZmlsZSA9IGdldF91cGxvYWRl ZF9maWxlKCRmaWxlKTsNCg0KCWlmIChlbXB0eSgkZmlsZSkpDQoJew0KCQlyZXR1cm47DQoJ fQ0KDQoJbGlzdCgkdywgJGgsICRleHRlbnNpb24pID0gZ2V0aW1hZ2VzaXplKCRmaWxlKTsN CgkkdmFsaWRfZXh0cyA9IGFycmF5KA0KCQlJTUFHRVRZUEVfR0lGICA9PiAnLmdpZicsDQoJ CUlNQUdFVFlQRV9KUEVHID0+ICcuanBnJywNCgkJSU1BR0VUWVBFX1BORyAgPT4gJy5wbmcn LA0KCQlJTUFHRVRZUEVfU1dGICA9PiAnLnN3ZicsDQoJKTsNCgkkZXh0ID0gaXNzZXQoJHZh bGlkX2V4dHNbJGV4dGVuc2lvbl0pID8gJHZhbGlkX2V4dHNbJGV4dGVuc2lvbl0gOiAnJzsN Cg0KCWlmICgoJGZpbGUgIT09IGZhbHNlKSAmJiAkcHJvZmlsZSAmJiAkZXh0KSB7DQoJCSRu ZXdwYXRoID0gSU1QQVRILnNhbml0aXplRm9yVXJsKCRwcm9maWxlKS5EUy4kaWQuJGV4dDsN CgkJaWYgKHNoaWZ0X3VwbG9hZGVkX2ZpbGUoJGZpbGUsICRuZXdwYXRoKSA9PSBmYWxzZSkg ew0KCQl9IGVsc2Ugew0KCQkJQGNobW9kKCRuZXdwYXRoLCAwNjQ0KTsNCg0KCQkJLy8gSWYg dGhlIHByZWYgaW5kaWNhdGVzLCBkdXBsaWNhdGUgYXMgYSBUWFAgdGh1bWIgdG9vDQoJCQlp ZiAoZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfY3JlYXRlJywgJzAnKSA9PSAxKSB7DQoJCQkJ JHR4cF90aHVtYiA9IElNUEFUSC4kaWQuJ3QnLiRleHQ7DQoJCQkJaWYgKCBjb3B5ICggJG5l d3BhdGgsICR0eHBfdGh1bWIgKSApIHsNCgkJCQkJc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScs ICJ0aHVtYm5haWwgPSAxLCB0aHVtYl93ID0gJHcsIHRodW1iX2ggPSAkaCIsICdpZCA9ICcu JGlkKTsNCgkJCQkJQGNobW9kKCR0eHBfdGh1bWIsIDA2NDQpOw0KCQkJCX0NCgkJCX0NCgkJ CSRtZXNzYWdlID0gZ1R4dCgnaW1hZ2VfdXBsb2FkZWQnLCBhcnJheSgne25hbWV9JyA9PiAk bmFtZSkpOw0KCQl9DQoJfQ0KDQoJLy8gU2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNl bnQsIHJlc29ydCB0byBqcyB0byByZWZyZXNoIHRoZSBwYWdlDQoJJHVybCA9ICc/ZXZlbnQ9 aW1hZ2Umc3RlcD1pbWFnZV9lZGl0JmlkPScuJGlkLicmc29ydD0nLiRzb3J0LicmZGlyPScu JGRpci4nJnBhZ2U9Jy4kcGFnZS4nJnNlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC4n JmNyaXQ9Jy4kY3JpdDsNCgllY2hvIDw8PEVPUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiPg0Kd2luZG93LmxvY2F0aW9uLmhyZWY9InskdXJsfSI7DQo8L3NjcmlwdD4NCjxu b3NjcmlwdD4NCjxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7dXJsPXsk dXJsfSIgLz4NCjwvbm9zY3JpcHQ+DQpFT1M7DQoJZXhpdDsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfZWRpdCgkZXZ0LCAkc3RwLCAk ZGZsdCwgJGN1cnJpbWcpIHsNCglnbG9iYWwgJHN0ZXAsICRmaWxlX21heF91cGxvYWRfc2l6 ZSwgJHR4cF91c2VyLCAkc21kX3RodW1iX3N0eWxlczsNCg0KCWV4dHJhY3QoZ3BzYShhcnJh eSgNCgkJJ2lkJywNCgkJJ3BhZ2UnLA0KCQknc29ydCcsDQoJCSdkaXInLA0KCQknY3JpdCcs DQoJCSdzZWFyY2hfbWV0aG9kJywNCgkJJ3NtZF90aHVtYm5haWxfc2l6ZScsDQoJCSdzbWRf dGh1bWJuYWlsX2Nob3Nlbl9zaXplJywNCgkJJ3NtZF90aHVtYm5haWxfZGVsZXRlJywNCgkJ J3NtZF9zdGVwJw0KCSkpKTsNCg0KCSRpZCA9ICgkaWQpID8gJGlkIDogJEdMT0JBTFNbJ0lE J107DQoNCgkvLyBUb2dnbGUgcHJvZmlsZSBwYW5lbA0KCWlmICgkc3RlcCA9PSAnc2F2ZV9w YW5lX3N0YXRlJykgew0KCQlzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCQly ZXR1cm47DQoJfQ0KDQoJLy8gQ3JlYXRlL2RlbGV0ZSB0aGUgc2VsZWN0ZWQgdGh1bWJzIGRl cGVuZGluZyBvbiB0aGUgYnV0dG9uIHByZXNzZWQNCglpZiAoJHNtZF9zdGVwID09ICdzbWRf dGh1bWJuYWlsX21hbmFnZScpIHsNCgkJLy8gVmFsaWRhdGUgdXNlcg0KCQkkYXV0aG9yID0g ZmV0Y2goJ2F1dGhvcicsICd0eHBfaW1hZ2UnLCAnaWQnLCAkaWQpOw0KCQlpZiAoIWhhc19w cml2cygnaW1hZ2UuZWRpdCcpICYmICEoJGF1dGhvciA9PSAkdHhwX3VzZXIgJiYgaGFzX3By aXZzKCdpbWFnZS5lZGl0Lm93bicpKSkNCgkJew0KCQkJaW1hZ2VfbGlzdChnVHh0KCdyZXN0 cmljdGVkX2FyZWEnKSk7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvLyBHcmFiIHRoZSB0aHVt Ym5haWxzIHRvIHdvcmsgb24NCgkJJHdoZXJlID0gKCRzbWRfdGh1bWJuYWlsX3NpemU9PSdh bGwnKSA/ICcxPTEgQU5EIGZsYWdzICYgJy5TTURfVEhVTUJfQUNUSVZFIDogIm5hbWU9JyIu ZG9TbGFzaCgkc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZSkuIiciOw0KCQkkcnMgPSBzYWZl X3Jvd3MoJyonLCBTTURfVEhVTUIsICR3aGVyZSk7DQoNCgkJLy8gRG8gaXQNCgkJaWYoJHNt ZF90aHVtYm5haWxfZGVsZXRlKSB7DQoJCQkkbXNnID0gc21kX3RodW1iX3VubWFrZSgkcnMs ICRjdXJyaW1nKTsNCgkJfSBlbHNlIHsNCgkJCSRtc2cgPSBzbWRfdGh1bWJfbWFrZSgkcnMs ICRjdXJyaW1nLCAxKTsNCgkJfQ0KCX0NCg0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoJ ZWNobyA8PDxFT0MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9u IHNtZF90aHVtYl9zZWxlY3RvcihzZWwpIHsNCgl2YXIgaWR4ID0gMDsNCglqUXVlcnkoIiNz bWRfdGh1bWJzIGltZyIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWlmIChqUXVlcnkodGhpcyku aGFzQ2xhc3Moc2VsKSkgew0KCQkJalF1ZXJ5KHRoaXMpLnRvZ2dsZUNsYXNzKCdzbWRfc2Vs ZWN0ZWQnKTsNCgkJCWlmIChqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ3NtZF9zZWxlY3RlZCcp KSB7DQoJCQkJalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxl ZCcsIGZhbHNlKTsNCgkJCQlqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZSIpLnZhbChzZWwp Ow0KCQkJCWlkeCA9IGpRdWVyeSgiI3NtZF90aHVtYm5haWxfc2l6ZSBvcHRpb25bdmFsdWU9 JyIrc2VsKyInXSIpLmluZGV4KCk7DQoJCQkJalF1ZXJ5KCIjc21kX3RodW1ibmFpbF9jaG9z ZW5fc2l6ZSIpLnZhbChzZWwpOw0KCQkJfSBlbHNlIHsNCgkJCQlqUXVlcnkoIiNzbWRfdXBs b2FkX3RodW1ibmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQoJCQkJalF1ZXJ5KCIj c21kX3RodW1iX3Byb2ZpbGUiKS52YWwoJycpOw0KCQkJCWpRdWVyeSgiI3NtZF90aHVtYm5h aWxfY2hvc2VuX3NpemUiKS52YWwoJycpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5 KHRoaXMpLnJlbW92ZUNsYXNzKCdzbWRfc2VsZWN0ZWQnKTsNCgkJfQ0KCX0pOw0KCWpRdWVy eSgiI3NtZF90aHVtYm5haWxfc2l6ZSIpLmF0dHIoInNlbGVjdGVkSW5kZXgiLCBpZHgpOw0K fQ0KZnVuY3Rpb24gc21kX3RodW1iX3NlbGVjdF9jaGFuZ2VkKCkgew0KCW9iaiA9IGpRdWVy eSgiI3NtZF90aHVtYm5haWxfc2l6ZSIpOw0KCWlmIChvYmouYXR0cigic2VsZWN0ZWRJbmRl eCIpID09IDApIHsNCgkJalF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdk aXNhYmxlZCcsIHRydWUpOw0KCQlqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZSIpLnZhbCgn Jyk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwoJycpOw0K CX0gZWxzZSB7DQoJCWpRdWVyeSgiI3NtZF91cGxvYWRfdGh1bWJuYWlsIikuYXR0cignZGlz YWJsZWQnLCBmYWxzZSk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYl9wcm9maWxlIikudmFsKG9i ai52YWwoKSk7DQoJCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwo b2JqLnZhbCgpKTsNCgl9DQoJalF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5lYWNoKGZ1bmN0 aW9uKCkgew0KCQlpZiAoalF1ZXJ5KHRoaXMpLmhhc0NsYXNzKG9iai52YWwoKSkpIHsNCgkJ CWpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc21kX3NlbGVjdGVkJyk7DQoJCX0gZWxzZSB7DQoJ CQlqUXVlcnkodGhpcykucmVtb3ZlQ2xhc3MoJ3NtZF9zZWxlY3RlZCcpOw0KCQl9DQoJfSk7 DQp9DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5l YWNoKGZ1bmN0aW9uKCkgew0KCQl2YXIgY2xzID0galF1ZXJ5KHRoaXMpLmF0dHIoJ2NsYXNz Jyk7DQoJCWpRdWVyeSh0aGlzKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCXNtZF90aHVtYl9z ZWxlY3RvcihjbHMpOw0KCQl9KTsNCgl9KTsNCglqUXVlcnkoIiNzbWRfdXBsb2FkX3RodW1i bmFpbCIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQoJalF1ZXJ5KCIudGh1bWJuYWlsLXVw bG9hZCIpLnByZXBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNtZF90aHVtYl9p bWdpZCIgdmFsdWU9InskaWR9IiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzbWRfdGh1 bWJfcHJvZmlsZSIgbmFtZT0ic21kX3RodW1iX3Byb2ZpbGUiIHZhbHVlPSIiIC8+PGlucHV0 IHR5cGU9ImhpZGRlbiIgaWQ9InNtZF90aHVtYl9leHQiIG5hbWU9InNtZF90aHVtYl9leHQi IHZhbHVlPSJ7JGV4dH0iIC8+Jyk7DQp9KTsNCjwvc2NyaXB0Pg0KRU9DOw0KDQoJLy8gSW5q ZWN0IHN0eWxlcw0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JyAuICRzbWRfdGh1 bWJfc3R5bGVzWydlZGl0J10gLiAnPC9zdHlsZT4nOw0KDQoJLy8gQWRkIHRodW1ibmFpbHMg YW5kIGNyZWF0aW9uIGNvbnRyb2xzDQoJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7 DQoJCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBPUkRFUiBCWSBuYW1l Jyk7DQoJCWlmICgkcnMpIHsNCgkJCSRwcm9maWxlcyA9IGFycmF5KCdhbGwnID0+IHNtZF90 aHVtYl9nVHh0KCdzbWRfdGh1bWJfYWxsX3NpemVzJykpOw0KCQkJJHRodW1ic1tdID0gJzxk aXYgaWQ9InNtZF90aHVtYnMiPic7DQoJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJ CWlmICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX0FDVElWRSkgew0KCQkJCQkkcHJvZmls ZXNbJHJvd1snbmFtZSddXSA9ICRyb3dbJ25hbWUnXTsNCgkJCQl9DQoJCQkJJHRodW1ic1td ID0gc21kX3RodW1iX2ltZygkcm93LCAkY3VycmltZyk7DQoJCQl9DQoJCQkkdGh1bWJzW10g PSAnPC9kaXY+JzsNCgkJCSRxcyA9IGFycmF5KA0KCQkJCSJldmVudCIgPT4gJ2ltYWdlJywN CgkJCQkic3RlcCIgPT4gJ2ltYWdlX2VkaXQnLA0KCQkJCSJpZCIgPT4gJGlkLA0KCQkJCSJw YWdlIiA9PiAkcGFnZSwNCgkJCQkic29ydCIgPT4gJHNvcnQsDQoJCQkJImRpciIgPT4gJGRp ciwNCgkJCQkiY3JpdCIgPT4gJGNyaXQsDQoJCQkJInNlYXJjaF9tZXRob2QiID0+ICRzZWFy Y2hfbWV0aG9kLA0KCQkJKTsNCg0KCQkJJG91dFtdID0gJzxkaXYgaWQ9InNtZF90aHVtYm5h aWxfY29udHJvbCI+PHNwYW4gY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVf c21kX3RodW1ibmFpbHNfdmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+PGEgaHJl Zj0iI3NtZF90aHVtYm5haWxzIj4nLnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfdGh1bWJu YWlsX2hlYWRpbmcnKS4nPC9hPjwvc3Bhbj48ZGl2IGlkPSJzbWRfdGh1bWJuYWlscyIgY2xh c3M9InRvZ2dsZSIgc3R5bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1i bmFpbHNfdmlzaWJsZScpID8gJ2Jsb2NrJyA6ICdub25lJykuJyI+JzsNCgkJCSRvdXRbXSA9 ICc8Zm9ybSBuYW1lPSJzbWRfdGh1bWJuYWlsX2NyZWF0ZSIgbWV0aG9kPSJwb3N0IiBhY3Rp b249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkkb3V0W10gPSBmSW5wdXQoJ2hpZGRlbics ICdzbWRfc3RlcCcsICdzbWRfdGh1bWJuYWlsX21hbmFnZScpOw0KCQkJJG91dFtdID0gZklu cHV0KCdoaWRkZW4nLCAnc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZScsICcnLCAnJywgJycs ICcnLCAnJywgJycsICdzbWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplJyk7DQoJCQkkb3V0W10g PSBzZWxlY3RJbnB1dCgnc21kX3RodW1ibmFpbF9zaXplJywgJHByb2ZpbGVzLCAnJywgJycs ICdvbmNoYW5nZT0icmV0dXJuIHNtZF90aHVtYl9zZWxlY3RfY2hhbmdlZCgpIjsnLCAnc21k X3RodW1ibmFpbF9zaXplJyk7DQoJCQkkb3V0W10gPSBmSW5wdXQoJ3N1Ym1pdCcsICcnLCBn VHh0KCdjcmVhdGUnKSwgJ3NtYWxsZXJib3gnKTsNCgkJCSRvdXRbXSA9IGZJbnB1dCgnc3Vi bWl0JywgJ3NtZF90aHVtYm5haWxfZGVsZXRlJywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVy Ym94Jyk7DQoJCQkkb3V0W10gPSBqb2luKCcnLCAkdGh1bWJzKTsNCgkJCSRvdXRbXSA9ICc8 L2Zvcm0+JzsNCgkJCSRvdXRbXSA9IHVwbG9hZF9mb3JtKHNtZF90aHVtYl9nVHh0KCdzbWRf dGh1bWJfdXBsb2FkJyksICd1cGxvYWRfdGh1bWJuYWlsJywgJ3NtZF90aHVtYm5haWxfaW5z ZXJ0JywgJ2ltYWdlJywgJGlkLCAkZmlsZV9tYXhfdXBsb2FkX3NpemUsICdzbWRfdXBsb2Fk X3RodW1ibmFpbCcsICd0aHVtYm5haWwtdXBsb2FkJyk7DQoJCQkkb3V0W10gPSAnPC9kaXY+ JzsNCgkJCXJldHVybiBqb2luKCcnLCAkb3V0KTsNCgkJfQ0KCX0NCglyZXR1cm4gJyAnOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9p bWcoJHJvdywgJGN1cnJpbWcsICRtZXRhPWFycmF5KCkpIHsNCglnbG9iYWwgJGltZ19kaXIs ICRwcmVmczsNCg0KCSRkaXIgPSBzYW5pdGl6ZUZvclVybCgkcm93WyduYW1lJ10pOw0KCSRp ZCA9ICRjdXJyaW1nWydpZCddOw0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoNCgkkcGF0 aCA9IElNUEFUSC4kZGlyLkRTLiRpZC4kZXh0Ow0KDQoJaWYgKGZpbGVfZXhpc3RzKCRwYXRo KSkgew0KCQkkZXh0cmFzID0gJyc7DQoJCWlmIChpc3NldCgkbWV0YVsnZm9yY2V3J10pIHx8 IGlzc2V0KCRtZXRhWydmb3JjZWgnXSkpIHsNCgkJCSRkaW1zID0gZ2V0aW1hZ2VzaXplKCRw YXRoKTsNCgkJCWlmIChpc3NldCgkbWV0YVsnZm9yY2V3J10pICYmICEkcm93Wyd3aWR0aCdd KSB7DQoJCQkJJHJvd1snd2lkdGgnXSA9ICRkaW1zWzBdOw0KCQkJfQ0KCQkJaWYgKGlzc2V0 KCRtZXRhWydmb3JjZWgnXSkgJiYgISRyb3dbJ2hlaWdodCddKSB7DQoJCQkJJHJvd1snaGVp Z2h0J10gPSAkZGltc1sxXTsNCgkJCX0NCgkJCXVuc2V0KCRtZXRhWydmb3JjZXcnXSk7DQoJ CQl1bnNldCgkbWV0YVsnZm9yY2VoJ10pOw0KCQl9DQoJCSR3ID0gKCRyb3dbJ3dpZHRoJ10p ID8gJyB3aWR0aD0iJy4kcm93Wyd3aWR0aCddLiciJzogJyc7DQoJCSRoID0gKCRyb3dbJ2hl aWdodCddKSA/ICcgaGVpZ2h0PSInLiRyb3dbJ2hlaWdodCddLiciJzogJyc7DQoNCgkJJHVE YXRlID0gJyc7DQoJCWlmICghaXNzZXQoJG1ldGFbJ3N0YW1wJ10pKSB7DQoJCQkkdURhdGUg PSAnPycuZmlsZW10aW1lKCRwYXRoKTsNCgkJfQ0KCQl1bnNldCgkbWV0YVsnc3RhbXAnXSk7 DQoNCgkJaWYgKCFpc3NldCgkbWV0YVsnY2xhc3MnXSkpIHsNCgkJCSRtZXRhWydjbGFzcydd ID0gJGRpcjsNCgkJfQ0KDQoJCWZvcmVhY2ggKCRtZXRhIGFzICRrZXkgPT4gJHZhbCkgew0K CQkJJGV4dHJhcyAuPSAnICcuJGtleS4nPSInLiR2YWwuJyInOw0KCQl9DQoJCXJldHVybiAn PGltZyBzcmM9IicuaWh1LiRpbWdfZGlyLicvJy4kZGlyLicvJy4kaWQuJGV4dC4kdURhdGUu JyInLiR3LiRoLiRleHRyYXMuJyAvPic7DQoJfQ0KDQoJcmV0dXJuICcnOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9wcm9maWxlcygk ZXZ0LCAkc3RwLCAkZGZsdCwgJGltZ2xpc3QpIHsNCglnbG9iYWwgJHNtZF90aHVtYl9ldmVu dCwgJHByZWZzLCAkc3RlcCwgJHNtZF90aHVtYl9zdHlsZXMsICRzbWRfdGh1bWJfcHJldnMs ICR0eHBfdXNlcjsNCg0KCWlmICghaGFzX3ByaXZzKF9fRlVOQ1RJT05fXykpIHsNCgkJcmV0 dXJuOw0KCX0NCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgNCgkJJ3BhZ2UnLA0KCQknc29ydCcs DQoJCSdkaXInLA0KCQknY3JpdCcsDQoJCSdzZWFyY2hfbWV0aG9kJywNCgkJJ3NtZF90aHVt Yl9hZGQnLA0KCQknc21kX3RodW1iX2NhbmNlbCcsDQoJCSdzbWRfdGh1bWJfc2F2ZScsDQoJ CSdzbWRfdGh1bWJfbmFtZScsDQoJCSdzbWRfdGh1bWJfbmV3bmFtZScsDQoJCSdzbWRfdGh1 bWJfd2lkdGgnLA0KCQknc21kX3RodW1iX2hlaWdodCcsDQoJCSdzbWRfdGh1bWJfcXVhbGl0 eScsDQoJCSdzbWRfdGh1bWJfYWN0aXZlJywNCgkJJ3NtZF90aHVtYl9hY3RpdmVfbmV3JywN CgkJJ3NtZF90aHVtYl9jcm9wJywNCgkJJ3NtZF90aHVtYl9zaGFycGVuJywNCgkJJ3NtZF90 aHVtYl9kZWZhdWx0JywNCgkJJ3NtZF90aHVtYl9zZWxlY3RlZCcsDQoJCSdzbWRfdGh1bWJf Y2F0X3NlbGVjdGVkJywNCgkJJ3NtZF90aHVtYl91c3Jfc2VsZWN0ZWQnLA0KCQknc21kX3Ro dW1iX2dyb3VwX3R5cGUnLA0KCSkpKTsNCg0KCS8vIFNhbml0aXplDQoJJHF1YWxpdHkgPSAo aXNfbnVtZXJpYygkc21kX3RodW1iX3F1YWxpdHkpKSA/ICgoJHNtZF90aHVtYl9xdWFsaXR5 PDApID8gNzUgOiAoKCRzbWRfdGh1bWJfcXVhbGl0eT4xMDApID8gNzUgOiAkc21kX3RodW1i X3F1YWxpdHkpICkgOiA3NTsNCgkkd2lkdGggPSAoaXNfbnVtZXJpYygkc21kX3RodW1iX3dp ZHRoKSkgPyAkc21kX3RodW1iX3dpZHRoIDogMDsNCgkkaGVpZ2h0ID0gKGlzX251bWVyaWMo JHNtZF90aHVtYl9oZWlnaHQpKSA/ICRzbWRfdGh1bWJfaGVpZ2h0IDogMDsNCgkkbmV3bmFt ZSA9IHNhbml0aXplRm9yVXJsKCRzbWRfdGh1bWJfbmV3bmFtZSk7DQoJJG1zZyA9ICcnOw0K DQoJLy8gVGFibGUgY29udHJvbA0KCWlmIChncHMoJ3JlbW92ZScpKSB7DQoJCXNtZF90aHVt Yl90YWJsZV9yZW1vdmUoKTsNCgl9IGVsc2Ugew0KCQlpZiAoIXNtZF90aHVtYl90YWJsZV9l eGlzdCgpKSB7DQoJCQlzbWRfdGh1bWJfdGFibGVfaW5zdGFsbCgpOw0KCQl9DQoJfQ0KDQoJ Ly8gVG9nZ2xlIHByb2ZpbGUgcGFuZWwNCglpZiAoJHN0ZXAgPT0gJ3NhdmVfcGFuZV9zdGF0 ZScpIHsNCgkJc21kX3RodW1ibmFpbF9zYXZlX3BhbmVfc3RhdGUoKTsNCgkJcmV0dXJuOw0K CX0NCg0KCWlmICgkc3RlcCA9PSAnc21kX3RodW1iX2NyZWF0ZV9ncm91cCcpIHsNCgkJc3dp dGNoICgkc21kX3RodW1iX2dyb3VwX3R5cGUpIHsNCgkJCWNhc2UgJ2FsbCc6DQoJCQkJc21k X3RodW1iX2NyZWF0ZV9ncm91cCgnYWxsJyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdzZWwn Og0KCQkJCXNtZF90aHVtYl9jcmVhdGVfZ3JvdXAoJ3NlbCcsIHJ0cmltKCRzbWRfdGh1bWJf c2VsZWN0ZWQsICcsJykpOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAnY2F0JzoNCgkJCQlzbWRf dGh1bWJfY3JlYXRlX2dyb3VwKCdjYXQnLCAkc21kX3RodW1iX2NhdF9zZWxlY3RlZCk7DQoJ CQkJYnJlYWs7DQoJCQljYXNlICd1c3InOg0KCQkJCXNtZF90aHVtYl9jcmVhdGVfZ3JvdXAo J3VzcicsICRzbWRfdGh1bWJfdXNyX3NlbGVjdGVkKTsNCgkJCQlicmVhazsNCgkJfQ0KCQlz ZXRfcHJlZigncGFuZV9zbWRfdGh1bWJfZ3JvdXBfdHlwZScsICRzbWRfdGh1bWJfZ3JvdXBf dHlwZSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZf UFJJVkFURSk7DQoJCSRzdGVwID0gJ3NtZF90aHVtYl9wcmVmcyc7DQoJfQ0KDQoJLy8gU2F2 ZSBwcm9maWxlDQoJaWYgKCRzdGVwID09ICdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgew0K CQlpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJCWlmICgkc21kX3RodW1iX2Nh bmNlbCkgew0KCQkJCS8vIERvIG5vdGhpbmcNCgkJCX0gZWxzZSBpZiAoJHNtZF90aHVtYl9h ZGQpIHsNCgkJCQkvLyBDcmVhdGUgbmV3IHByb2ZpbGUNCgkJCQkkZXhpc3RzID0gc2FmZV9y b3coJyonLCBTTURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2goJG5ld25hbWUpLiInIik7DQoJ CQkJaWYgKCRleGlzdHMpIHsNCgkJCQkJJG1zZyA9IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1 bWJfcHJvZmlsZV9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiBkb1NsYXNoKCRuZXduYW1l KSkpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWlmICgkbmV3bmFtZSkgew0KCQkJCQkJJGZsYWdz ID0gMDsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1iX2FjdGl2ZV9uZXcpID8gJGZsYWdz IHwgU01EX1RIVU1CX0FDVElWRSA6ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3Ro dW1iX2Nyb3ApID8gJGZsYWdzIHwgU01EX1RIVU1CX0NST1AgOiAkZmxhZ3M7DQoJCQkJCQkk ZmxhZ3MgPSAoJHNtZF90aHVtYl9zaGFycGVuKSA/ICRmbGFncyB8IFNNRF9USFVNQl9TSEFS UCA6ICRmbGFnczsNCg0KCQkJCQkJc2FmZV9pbnNlcnQoU01EX1RIVU1CLA0KCQkJCQkJCSJu YW1lPSciLmRvU2xhc2goJG5ld25hbWUpLiInIi4NCgkJCQkJCQkiLCB3aWR0aD0nIi5kb1Ns YXNoKCR3aWR0aCkuIiciLg0KCQkJCQkJCSIsIGhlaWdodD0nIi5kb1NsYXNoKCRoZWlnaHQp LiInIi4NCgkJCQkJCQkiLCBxdWFsaXR5PSciLmRvU2xhc2goJHF1YWxpdHkpLiInIi4NCgkJ CQkJCQkiLCBmbGFncz0nIi5kb1NsYXNoKCRmbGFncykuIiciDQoJCQkJCQkpOw0KDQoJCQkJ CQkvLyBBbHRlciB0aGUgZGVmYXVsdCB0aHVtYm5haWwNCgkJCQkJCWlmICgkc21kX3RodW1i X2RlZmF1bHQpIHsNCgkJCQkJCQlzZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmls ZScsICRuZXduYW1lLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4pOw0KCQkJCQkJfQ0KDQoJ CQkJCQkvLyBDcmVhdGUgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkNCgkJCQkJCUBta2RpcihJ TVBBVEguJG5ld25hbWUpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkvLyBV cGRhdGUgZXhpc3RpbmcgcHJvZmlsZQ0KCQkJCSRuYW1lID0gc2FuaXRpemVGb3JVcmwoJHNt ZF90aHVtYl9uYW1lKTsNCgkJCQkkZXhpc3RzID0gc2FmZV9yb3coJyonLCBTTURfVEhVTUIs ICJuYW1lPSciLmRvU2xhc2goJG5ld25hbWUpLiInIik7DQoJCQkJaWYgKCRleGlzdHMgJiYg c3RydG9sb3dlcigkbmV3bmFtZSkgIT0gc3RydG9sb3dlcigkbmFtZSkpIHsNCgkJCQkJJG1z ZyA9IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfcHJvZmlsZV9leGlzdHMnLCBhcnJheSgn e25hbWV9JyA9PiBkb1NsYXNoKCRuZXduYW1lKSkpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWlm ICgkbmV3bmFtZSkgew0KCQkJCQkJJGZsYWdzID0gMDsNCgkJCQkJCSRmbGFncyA9ICgkc21k X3RodW1iX2FjdGl2ZSkgPyAkZmxhZ3MgfCBTTURfVEhVTUJfQUNUSVZFIDogJGZsYWdzOw0K CQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfY3JvcCkgPyAkZmxhZ3MgfCBTTURfVEhVTUJf Q1JPUCA6ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21kX3RodW1iX3NoYXJwZW4pID8g JGZsYWdzIHwgU01EX1RIVU1CX1NIQVJQIDogJGZsYWdzOw0KDQoJCQkJCQlzYWZlX3VwZGF0 ZSgNCgkJCQkJCQlTTURfVEhVTUIsDQoJCQkJCQkJIm5hbWU9JyIuZG9TbGFzaCgkbmV3bmFt ZSkuIiciDQoJCQkJCQkJCS4iLCB3aWR0aD0nIi5kb1NsYXNoKCR3aWR0aCkuIiciDQoJCQkJ CQkJCS4iLCBoZWlnaHQ9JyIuZG9TbGFzaCgkaGVpZ2h0KS4iJyINCgkJCQkJCQkJLiIsIHF1 YWxpdHk9JyIuZG9TbGFzaCgkcXVhbGl0eSkuIiciDQoJCQkJCQkJCS4iLCBmbGFncz0nIi5k b1NsYXNoKCRmbGFncykuIiciDQoJCQkJCQkJLCAibmFtZT0nIi5kb1NsYXNoKCRuYW1lKS4i JyINCgkJCQkJCSk7DQoNCgkJCQkJCS8vIEFsdGVyIHRoZSBkZWZhdWx0IHRodW1ibmFpbA0K CQkJCQkJaWYgKCRzbWRfdGh1bWJfZGVmYXVsdCkgew0KCQkJCQkJCXNldF9wcmVmKCdzbWRf dGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJG5ld25hbWUsICdzbWRfdGh1bWInLCBQUkVGX0hJ RERFTik7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgZGVmYXVsdCBm bGFnIGlmIHRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdA0KCQkJCQkJCWlmIChnZXRfcHJl Zignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScpID09IGRvU2xhc2goJG5hbWUpKSB7DQoJ CQkJCQkJCXNldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycsICdzbWRf dGh1bWInLCBQUkVGX0hJRERFTik7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KDQoJCQkJCQkvLyBB ZGp1c3QgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkgaWYgdGhlIG5hbWUgaGFzIGNoYW5nZWQN CgkJCQkJCWlmICgkbmV3bmFtZSAhPSAkbmFtZSkgew0KCQkJCQkJCXJlbmFtZShJTVBBVEgu JG5hbWUsIElNUEFUSC4kbmV3bmFtZSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9 DQoJCX0gZWxzZSB7DQoJCQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl90YWJs ZXNfbm90X2luc3RhbGxlZCcpOw0KCQl9DQoJCSRzdGVwID0gJ3NtZF90aHVtYl9wcm9maWxl JzsNCgl9DQoNCgkvLyBEZWxldGUgcHJvZmlsZQ0KCWlmICgkc3RlcCA9PSAnc21kX3RodW1i X3Byb2ZpbGVfZGVsZXRlJykgew0KCQlpZiAoc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsN CgkJCSR0eHBfZGVsID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfZGVsZXRlJyk7DQoJCQkk dGhlX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAx KTsNCg0KCQkJaWYgKCFlbXB0eSgkc21kX3RodW1iX25hbWUpKSB7DQoJCQkJJG5hbWUgPSBz YW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25hbWUpOw0KCQkJCSRyZXQgPSBzYWZlX2RlbGV0 ZShTTURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2goJG5hbWUpLiInIik7DQoJCQkJaWYgKCRy ZXQpIHsNCgkJCQkJc21kX3RodW1iX3JtZGlyKElNUEFUSC4kbmFtZSk7DQoNCgkJCQkJLy8g RGVsZXRlIGFsbCBUWFAgdGh1bWJzIHRvbz8NCgkJCQkJaWYgKCgkbmFtZSA9PSAkdGhlX2Rm bHQpICYmICgkdHhwX2RlbCA9PSAnMScpKSB7DQoJCQkJCQkkcnMgPSBzYWZlX3Jvd3MoJ2lk LCBleHQnLCAndHhwX2ltYWdlJywgJ3RodW1ibmFpbCA9IDEnKTsNCgkJCQkJCWZvcmVhY2gg KCRycyBhcyAkcm93KSB7DQoJCQkJCQkJJHBhdGggPSBJTVBBVEguJHJvd1snaWQnXS4ndCcu JHJvd1snZXh0J107DQoJCQkJCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkgew0KCQkJCQkJ CQl1bmxpbmsoJHBhdGgpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCXNhZmVfdXBkYXRl KCd0eHBfaW1hZ2UnLCAndGh1bWJuYWlsID0gMCwgdGh1bWJfdyA9IDAsIHRodW1iX2ggPSAw JywgJ3RodW1ibmFpbCA9IDEnKTsNCgkJCQkJfQ0KDQoJCQkJCS8vIFJlbW92ZSB0aGUgZGVm YXVsdCBmbGFnIGlmIHRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdA0KCQkJCQlpZiAoZ2V0 X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKSA9PSBkb1NsYXNoKCRuYW1lKSkg ew0KCQkJCQkJc2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgJ3Nt ZF90aHVtYicsIFBSRUZfSElEREVOKTsNCgkJCQkJfQ0KDQoJCQkJCSRtc2cgPSBzbWRfdGh1 bWJfZ1R4dCgnc21kX3RodW1iX3Byb2ZpbGVfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ IGRvU2xhc2goJG5hbWUpKSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRzdGVwID0gJ3NtZF90 aHVtYl9wcm9maWxlJzsNCgl9DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAnaW1h Z2UnLA0KCQkicGFnZSIgPT4gJHBhZ2UsDQoJCSJzb3J0IiA9PiAkc29ydCwNCgkJImRpciIg PT4gJGRpciwNCgkJImNyaXQiID0+ICRjcml0LA0KCQkic2VhcmNoX21ldGhvZCIgPT4gJHNl YXJjaF9tZXRob2QsDQoJKTsNCg0KCS8vIEluamVjdCBzdHlsZXMNCgllY2hvICc8c3R5bGUg dHlwZT0idGV4dC9jc3MiPicgLiAkc21kX3RodW1iX3N0eWxlc1sncHJvZmlsZSddIC4gJzwv c3R5bGU+JzsNCgkkcHJpdnMgPSBzYWZlX2ZpZWxkKCdwcml2cycsICd0eHBfdXNlcnMnLCAi bmFtZSA9ICciLmRvU2xhc2goJHR4cF91c2VyKS4iJyIpOw0KCSRyaWdodHMgPSBpbl9hcnJh eSgkcHJpdnMsICRzbWRfdGh1bWJfcHJldnMpID8gdHJ1ZSA6IGZhbHNlOw0KDQoJaWYgKCRz dGVwID09ICdzbWRfdGh1bWJfcHJlZnMnKSB7DQoNCgkJLy8gKiogVEhVTUJOQUlMIFBSRUZT ICoqDQoNCgkJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCQkkcHJvX2RmbHQg PSBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAxKTsNCg0KCQkJ Ly8gU3Vic2VsZWN0IGxpc3RzIGZvciB0eXBlICdjYXQnIGFuZCAndXNyJw0KCQkJJHJzID0g Z2V0VHJlZSgncm9vdCcsICdpbWFnZScpOw0KCQkJJGFsbENhdHMgPSAkcnMgPyB0cmVlU2Vs ZWN0SW5wdXQoJ3NtZF90aHVtYl9jYXRfc2VsZWN0ZWQnLCAkcnMsICcnKSA6ICcnOw0KCQkJ JGFsbENhdHMgPSAiPHNwYW4+Ii5zdHJfcmVwbGFjZShhcnJheSgiXG4iLCAnLScpLCBhcnJh eSgnJywgJyYjNDU7JyksIHN0cl9yZXBsYWNlKCc8LycsICc8XC8nLCBhZGRzbGFzaGVzKCRh bGxDYXRzKSkpLiI8XC9zcGFuPiI7DQoJCQkkcnMgPSBzYWZlX2NvbHVtbignbmFtZScsICd0 eHBfdXNlcnMnLCAicHJpdnMgbm90IGluKDAsNikgb3JkZXIgYnkgbmFtZSBhc2MiKTsNCgkJ CSRhbGxVc3JzID0gJHJzID8gc2VsZWN0SW5wdXQoJ3NtZF90aHVtYl91c3Jfc2VsZWN0ZWQn LCAkcnMsICcnLCB0cnVlKSA6ICcnOw0KCQkJJGFsbFVzcnMgPSAiPHNwYW4+Ii5zdHJfcmVw bGFjZShhcnJheSgiXG4iLCAnLScpLCBhcnJheSgnJywgJyYjNDU7JyksIHN0cl9yZXBsYWNl KCc8LycsICc8XC8nLCBhZGRzbGFzaGVzKCRhbGxVc3JzKSkpLiI8XC9zcGFuPiI7DQoNCgkJ CWVjaG8gPDw8RU9DDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlv biBzbWRfdGh1bWJfc3dpdGNoX3ByZWYob2JqLCBuYW1lKSB7DQoJdmFyIHN0YXRlID0gKGpR dWVyeShvYmopLmF0dHIoJ2NoZWNrZWQnKSkgPyAxIDogMDsNCglzZW5kQXN5bmNFdmVudCgN Cgl7DQoJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwNCgkJc3RlcDogJ3NtZF90aHVtYl9z d2l0Y2hfcHJlZicsDQoJCXNtZF90aHVtYl90eHB0eXBlOiBuYW1lLA0KCQlzbWRfdGh1bWJf c3RhdGU6IHN0YXRlDQoJfSk7DQp9DQpmdW5jdGlvbiBzbWRfdGh1bWJfY29weV9zZWxlY3Rl ZCgpIHsNCglqUXVlcnkoIiNpbWFnZXNfZm9ybSB0Ym9keSAubXVsdGktZWRpdCBpbnB1dDpj aGVja2VkIikuZWFjaChmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KCIjc21kX3RodW1iX3NlbGVj dGVkIikudmFsKGpRdWVyeSgiI3NtZF90aHVtYl9zZWxlY3RlZCIpLnZhbCgpICsgalF1ZXJ5 KHRoaXMpLnZhbCgpICsgJywnKTsNCgl9KTsNCn0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zdWJz ZWwob2JqKSB7DQoJb2JqID0galF1ZXJ5KG9iaik7DQoJZGVzdCA9IGpRdWVyeSgnI3NtZF90 aHVtYl9zdWJzZWwnKTsNCglpdGVtID0gb2JqLnZhbCgpOw0KCXN3aXRjaCAoaXRlbSkgew0K CQljYXNlICdhbGwnOg0KCQljYXNlICdzZWwnOg0KCQkJZGVzdC5lbXB0eSgpOw0KCQkJYnJl YWs7DQoJCWNhc2UgJ2NhdCc6DQoJCQlkZXN0LmVtcHR5KCkucHJlcGVuZCgneyRhbGxDYXRz fScpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3Vzcic6DQoJCQlkZXN0LmVtcHR5KCkucHJlcGVu ZCgneyRhbGxVc3JzfScpOw0KCQkJYnJlYWs7DQoJfQ0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkg ew0KCWpRdWVyeSgnI3NtZF90aHVtYl9ncm91cF90eXBlJykuY2hhbmdlKCk7DQp9KTsNCjwv c2NyaXB0Pg0KRU9DOw0KDQoJCQkkcG5sYnRuID0gJzxhIGNsYXNzPSJuYXZsaW5rIiBocmVm PSI/ZXZlbnQ9aW1hZ2Umc29ydD0nLiRzb3J0LicmZGlyPScuJGRpci4nJnBhZ2U9Jy4kcGFn ZS4nJnNlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC4nJmNyaXQ9Jy4kY3JpdC4nIj4n LnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfYnRuX3BubCcpLic8L2E+JzsNCgkJCSRncnBi dG4gPSAnPGJ1dHRvbiBjbGFzcz0ibmF2bGluayIgdHlwZT0ic3VibWl0IiBvbmNsaWNrPSJz bWRfdGh1bWJfY29weV9zZWxlY3RlZCgpOyByZXR1cm4gY29uZmlybShcJycuc21kX3RodW1i X2dUeHQoJ3NtZF90aHVtYl9jcmVhdGVfZ3JvdXBfY29uZmlybScpLidcJyk7Ij4nLnNtZF90 aHVtYl9nVHh0KCdzbWRfdGh1bWJfYWxsX3RodW1icycpLic8L2J1dHRvbj4nOw0KCQkJJGdy cFR5cGVzID0gYXJyYXkoDQoJCQkJJ3NlbCcgPT4gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVt Yl9ieVNlbCcpLA0KCQkJCSdjYXQnID0+IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfYnlD YXQnKSwNCgkJCQkndXNyJyA9PiBzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2J5VXNyJyks DQoJCQkJJ2FsbCcgPT4gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9ieUFsbCcpLA0KCQkJ KTsNCg0KCQkJJGdycE9wdHMgPSBzZWxlY3RJbnB1dCgnc21kX3RodW1iX2dyb3VwX3R5cGUn LCAkZ3JwVHlwZXMsIGdldF9wcmVmKCdwYW5lX3NtZF90aHVtYl9ncm91cF90eXBlJywgJ2Fs bCcsIDEpLCAnJywgJ29uY2hhbmdlPSJzbWRfdGh1bWJfc3Vic2VsKHRoaXMpOyInLCAnc21k X3RodW1iX2dyb3VwX3R5cGUnKS4nPHNwYW4gaWQ9InNtZF90aHVtYl9zdWJzZWwiPjwvc3Bh bj4nOw0KDQoJCQkkb3V0W10gPSAnPGZpZWxkc2V0IGlkPSJzbWRfdGh1bWJfcHJvZmlsZXMi PjxsZWdlbmQgY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1i bmFpbF9wcm9maWxlc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48YSBocmVm PSIjc21kX3RodW1ibmFpbF9wcm9maWxlcyI+Jy4oKCRyaWdodHMpID8gc21kX3RodW1iX2dU eHQoJ3NtZF90aHVtYl9wcm9maWxlX3ByZWZ0b29sX2hlYWRpbmcnKSA6IHNtZF90aHVtYl9n VHh0KCdzbWRfdGh1bWJfcHJvZmlsZV90b29sX2hlYWRpbmcnKSkuJzwvYT48L2xlZ2VuZD48 ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0i ZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2li bGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJCQkkb3V0W10gPSAnPGRpdiBjbGFz cz0ic21kX3RodW1iX2J0biI+Jy4kcG5sYnRuLic8L2Rpdj4nOw0KDQoJCQkkb3V0W10gPSAn PGZpZWxkc2V0PjxsZWdlbmQ+Jy5zbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2JhdGNoX2xl Z2VuZCcpLic8L2xlZ2VuZD4nOw0KCQkJJG91dFtdID0gJzxkaXYgaWQ9InNtZF90aHVtYl9i YXRjaCI+PHNwYW4gaWQ9InNtZF90aHVtYl9iY3VyciI+PC9zcGFuPjxzcGFuIGlkPSJzbWRf dGh1bWJfYnRvdCI+PC9zcGFuPjwvZGl2Pic7DQoJCQkkb3V0W10gPSAnPGZvcm0gbWV0aG9k PSJwb3N0IiBuYW1lPSJzbWRfdGh1bWJfbXVsdGlfZWRpdCIgaWQ9InNtZF90aHVtYl9tdWx0 aV9lZGl0IiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkkb3V0W10gPSBzdGFy dFRhYmxlKCdzbWRfY29udHJvbCcpOw0KCQkJJG91dFtdID0gZklucHV0KCdoaWRkZW4nLCAn c21kX3RodW1iX3NlbGVjdGVkJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF90aHVt Yl9zZWxlY3RlZCcpOw0KCQkJJG91dFtdID0gZUlucHV0KCRzbWRfdGh1bWJfZXZlbnQpOw0K CQkJJG91dFtdID0gc0lucHV0KCdzbWRfdGh1bWJfY3JlYXRlX2dyb3VwJyk7DQoJCQkkb3V0 W10gPSB0cih0ZChzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2JhdGNoX3ByZWFtYmxlJyku JGdycGJ0bi4kZ3JwT3B0cykpOw0KCQkJJG91dFtdID0gZW5kVGFibGUoKTsNCgkJCSRvdXRb XSA9ICc8L2Zvcm0+JzsNCgkJCSRvdXRbXSA9ICc8L2ZpZWxkc2V0Pic7DQoNCgkJCWlmICgk cmlnaHRzKSB7DQoJCQkJJG91dFtdID0gJzxmaWVsZHNldD48bGVnZW5kPicuc21kX3RodW1i X2dUeHQoJ3NtZF90aHVtYl9wcmVmcycpLic8L2xlZ2VuZD4nOw0KCQkJCSRvdXRbXSA9ICc8 Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9InNtZF90aHVtYl9wcmVmcyIgaWQ9InNtZF90aHVt Yl9wcmVmc19mb3JtIiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkJJG91dFtd ID0gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCQ0KCQkJCWlmICgkcHJvX2RmbHQpIHsNCgkJCQkJ JHR4cF9jID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl90eHBfY3JlYXRlJyk7DQoJCQkJCSR0eHBf ZCA9IGdldF9wcmVmKCdzbWRfdGh1bWJfdHhwX2RlbGV0ZScpOw0KCQkJCQkkb3V0W10gPSB0 cigNCgkJCQkJCXRkYShzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3R4cF9kZWZhdWx0X3N5 bmMnKSwgJyBjbGFzcz0icHJlZi1sYWJlbCInKSAuDQoJCQkJCQl0ZGEoDQoJCQkJCQkJJzxp bnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic21kX3RodW1iX3R4cF9jcmVhdGUiIHZhbHVl PSIxIicuKCgkdHhwX2MpID8gJyIgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLiAnIGNsYXNz PSJjaGVja2JveCIgb25jaGFuZ2U9InNtZF90aHVtYl9zd2l0Y2hfcHJlZih0aGlzLCBcJ3R4 cF9jcmVhdGVcJyk7IiAvPicuDQoJCQkJCQkJc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9j cmVhdGUnKS4NCgkJCQkJCQknPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzbWRfdGh1 bWJfdHhwX2RlbGV0ZSIgdmFsdWU9IjEiJy4oKCR0eHBfZCkgPyAnIiBjaGVja2VkPSJjaGVj a2VkIicgOiAnJykuICcgY2xhc3M9ImNoZWNrYm94IiBvbmNoYW5nZT0ic21kX3RodW1iX3N3 aXRjaF9wcmVmKHRoaXMsIFwndHhwX2RlbGV0ZVwnKTsiIC8+Jy4NCgkJCQkJCQlzbWRfdGh1 bWJfZ1R4dCgnc21kX3RodW1iX2RlbGV0ZScpDQoJCQkJCQkpKTsNCgkJCQl9DQoJCQkJJHR4 cF9hciA9IGdldF9wcmVmKCdzbWRfdGh1bWJfYXV0b19yZXBsYWNlJyk7DQoJCQkJJG91dFtd ID0gdHIoDQoJCQkJCXRkYShzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3R4cF9hdXRvX3Jl cGxhY2UnKSwgJyBjbGFzcz0icHJlZi1sYWJlbCInKSAuDQoJCQkJCXRkYSgNCgkJCQkJCSc8 aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNtZF90aHVtYl9hdXRvX3JlcGxhY2UiIHZh bHVlPSIxIicuKCgkdHhwX2FyKSA/ICciIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4gJyBj bGFzcz0iY2hlY2tib3giIG9uY2hhbmdlPSJzbWRfdGh1bWJfc3dpdGNoX3ByZWYodGhpcywg XCdhdXRvX3JlcGxhY2VcJyk7IiAvPicNCgkJCQkJKSk7DQoJCQkJJG91dFtdID0gZW5kVGFi bGUoKTsNCgkJCQkkb3V0W10gPSAnPC9mb3JtPjwvZmllbGRzZXQ+JzsNCgkJCX0NCgkJCSRv dXRbXSA9ICc8L2Rpdj48L2ZpZWxkc2V0Pic7DQoJCX0NCgl9IGVsc2Ugew0KDQoJCS8vICoq IFRIVU1CTkFJTCBQUk9GSUxFUyAqKg0KDQoJCSRlZGl0Rm9jdXMgPSAoJHN0ZXAgPT0gJ3Nt ZF90aHVtYl9wcm9maWxlX2VkaXQnKSA/ICdqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZV9l ZGl0ZWQgaW5wdXRbbmFtZT1cJ3NtZF90aHVtYl9uZXduYW1lXCddIikuZm9jdXMoKTsnIDog Jyc7DQoNCgkJZWNobyA8PDxFT0MNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4N CmZ1bmN0aW9uIHNtZF90aHVtYl90b2dnbGVuZXcoKSB7DQoJYm94ID0galF1ZXJ5KCIjc21k X3RodW1iX3Byb2ZpbGVfY3JlYXRlIik7DQoJaWYgKGJveC5jc3MoImRpc3BsYXkiKSA9PSAi bm9uZSIpIHsNCgkJYm94LnNob3coKTsNCgl9IGVsc2Ugew0KCQlib3guaGlkZSgpOw0KCX0N CglqUXVlcnkoImlucHV0LnNtZF9mb2N1cyIpLmZvY3VzKCk7DQoJcmV0dXJuIGZhbHNlOw0K fQ0KZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9hY3RpdmUobmFtZSkgew0KCXNlbmRBc3lu Y0V2ZW50KA0KCXsNCgkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQlzdGVwOiAnc21k X3RodW1iX3N3aXRjaF9hY3RpdmUnLA0KCQlzbWRfdGh1bWJfcHJvZmlsZTogbmFtZQ0KCX0s IHNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlX2RvbmUpOw0KfQ0KZnVuY3Rpb24gc21kX3RodW1i X3N3aXRjaF9hY3RpdmVfZG9uZShkYXRhKSB7DQoJdmFyIHNtZF90aHVtYl9wcm9maWxlID0g alF1ZXJ5KCcjc21kX3RodW1iX3Byb2ZpbGVfJytqUXVlcnkoZGF0YSkuZmluZCgnc21kX3Ro dW1iX3Byb2ZpbGUnKS5hdHRyKCd2YWx1ZScpKTsNCglzbWRfdGh1bWJfcHJvZmlsZS50b2dn bGVDbGFzcygnc21kX2luYWN0aXZlJyk7DQoJaWYgKHNtZF90aHVtYl9wcm9maWxlLmhhc0Ns YXNzKCdzbWRfaW5hY3RpdmUnKSkgew0KCQlzbWRfdGh1bWJfcHJvZmlsZS5maW5kKCdpbnB1 dDpjaGVja2JveCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsNCgl9IGVsc2Ugew0KCQlzbWRf dGh1bWJfcHJvZmlsZS5maW5kKCdpbnB1dDpjaGVja2JveCcpLmF0dHIoJ2NoZWNrZWQnLCAn Y2hlY2tlZCcpOw0KCX0NCn0NCg0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgnLnNt ZF90aHVtYl9oZWFkaW5nX2FjdGl2ZScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnko Jy5zbWRfdGh1bWJfcm93IGlucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbigpIHsNCgkJ CXNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCdj bGFzcycpKTsNCgkJfSk7DQoJfSk7DQoJeyRlZGl0Rm9jdXN9DQp9KTsNCjwvc2NyaXB0Pg0K RU9DOw0KDQoJCSRuZXdidG4gPSAnPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9IiMiIG9uY2xp Y2s9InJldHVybiBzbWRfdGh1bWJfdG9nZ2xlbmV3KCk7Ij4nLnNtZF90aHVtYl9nVHh0KCdz bWRfdGh1bWJfbmV3JykuJzwvYT4mbmJzcDsnOw0KCQkkcHJlZmJ0biA9ICc8YSBjbGFzcz0i bmF2bGluayIgaHJlZj0iP2V2ZW50PWltYWdlJnN0ZXA9c21kX3RodW1iX3ByZWZzJnNvcnQ9 Jy4kc29ydC4nJmRpcj0nLiRkaXIuJyZwYWdlPScuJHBhZ2UuJyZzZWFyY2hfbWV0aG9kPScu JHNlYXJjaF9tZXRob2QuJyZjcml0PScuJGNyaXQuJyI+Jy4oKCRyaWdodHMpID8gc21kX3Ro dW1iX2dUeHQoJ3NtZF90aHVtYl9idG5fdG9vbHNfcHJlZnMnKSA6IHNtZF90aHVtYl9nVHh0 KCdzbWRfdGh1bWJfYnRuX3Rvb2xzJykpLic8L2E+JzsNCg0KCQkkaGVhZGluZ3MgPSBuLic8 dGhlYWQ+Jy50cih0ZGNzKCRuZXdidG4sIDkpKS50cigNCgkJCW4uY29sdW1uX2hlYWQoJ25h bWUnLCAnbmFtZScsICdpbWFnZScsIGZhbHNlLCAnYXNjJykuDQoJCQljb2x1bW5faGVhZCgn dGh1bWJfd2lkdGgnLCAnd2lkdGgnLCAnaW1hZ2UnLCBmYWxzZSkuDQoJCQljb2x1bW5faGVh ZCgndGh1bWJfaGVpZ2h0JywgJ2hlaWdodCcsICdpbWFnZScsIGZhbHNlKS4NCgkJCWNvbHVt bl9oZWFkKHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfcXVhbGl0eScpLCAncXVhbGl0eScs ICdpbWFnZScsIGZhbHNlKS4NCgkJCWNvbHVtbl9oZWFkKCdrZWVwX3NxdWFyZV9waXhlbHMn LCAnY3JvcCcsICdpbWFnZScsIGZhbHNlKS4NCgkJCWNvbHVtbl9oZWFkKHNtZF90aHVtYl9n VHh0KCdzbWRfdGh1bWJfc2hhcnBlbicpLCAnc2hhcnBlbicsICdpbWFnZScsIGZhbHNlKS4N CgkJCWNvbHVtbl9oZWFkKCdhY3RpdmUnLCAnYWN0aXZlJywgJ2ltYWdlJywgZmFsc2UsICcn LCAnJywgJycsICdzbWRfdGh1bWJfaGVhZGluZ19hY3RpdmUnKS4NCgkJCWNvbHVtbl9oZWFk KCdkZWZhdWx0JywgJ2RlZmF1bHQnLCAnaW1hZ2UnLCBmYWxzZSkuDQoJCQljb2x1bW5faGVh ZChzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2FjdGlvbnMnKSwgJ2FjdGlvbnMnLCAnaW1h Z2UnLCBmYWxzZSkNCgkJKS4nPC90aGVhZD4nOw0KDQoJCSRvdXRbXSA9ICc8ZmllbGRzZXQg aWQ9InNtZF90aHVtYl9wcm9maWxlcyI+PGxlZ2VuZCBjbGFzcz0icGxhaW4gbGV2ZXInLihn ZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zpc2libGUnKSA/ICcgZXhw YW5kZWQnIDogJycpLiciPjxhIGhyZWY9IiNzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIj4nLnNt ZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfcHJvZmlsZV9oZWFkaW5nJykuJzwvYT48L2xlZ2Vu ZD48ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBzdHls ZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVzX3Zp c2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJCSRvdXRbXSA9ICc8ZGl2IGNs YXNzPSJzbWRfdGh1bWJfYnRuIj4nLiRwcmVmYnRuLic8L2Rpdj4nOw0KDQoJCS8vIE1haW4g bGlzdCBvZiBwcm9maWxlcw0KCQkkb3V0W10gPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBuYW1l PSJzbWRfdGh1bWJfcHJvZmlsZV9mb3JtIiBpZD0ic21kX3RodW1iX3Byb2ZpbGVfZm9ybSIg YWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0KCQkkb3V0W10gPSBzdGFydFRhYmxlKCds aXN0Jyk7DQoJCSRvdXRbXSA9ICRoZWFkaW5nczsNCg0KCQlpZiAoc21kX3RodW1iX3RhYmxl X2V4aXN0KCkpIHsNCgkJCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBP UkRFUiBCWSBuYW1lJyk7DQoJCQkkcHJvX2RmbHQgPSBnZXRfcHJlZignc21kX3RodW1iX2Rl ZmF1bHRfcHJvZmlsZScsICcnLCAxKTsNCg0KCQkJLy8gTmV3IFByb2ZpbGUgcm93DQoJCQkk b3V0W109ICc8dHIgaWQ9InNtZF90aHVtYl9wcm9maWxlX2NyZWF0ZSIgY2xhc3M9InNtZF9o aWRkZW4iPic7DQoJCQkkb3V0W10gPSB0ZChzSW5wdXQoJ3NtZF90aHVtYl9wcm9maWxlX3Nh dmUnKS5mSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX25ld25hbWUnLCAoKCRzdGVwPT0nc21k X3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHNtZF90aHVtYl9uYW1lIDogJycpLCAnc21kX2Zv Y3VzJykpDQoJCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfdGh1bWJfd2lkdGgnLCAoKCRz dGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHdpZHRoIDogJycpLCAnJywgJycs ICcnLCAnNCcpKQ0KCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX2hlaWdodCcs ICgoJHN0ZXA9PSdzbWRfdGh1bWJfcHJvZmlsZV9zYXZlJykgPyAkaGVpZ2h0IDogJycpLCAn JywgJycsICcnLCAnNCcpKQ0KCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX3F1 YWxpdHknLCAoKCRzdGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHF1YWxpdHkg OiAnJyksICcnLCAnJywgJycsICc0JykpDQoJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJf Y3JvcCcsICcxJywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRzbWRf dGh1bWJfY3JvcCA6IDApKSkNCgkJCQkudGQoY2hlY2tib3goJ3NtZF90aHVtYl9zaGFycGVu JywgJzEnLCAoKCRzdGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJHNtZF90aHVt Yl9zaGFycGVuIDogMCkpKQ0KCQkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX2FjdGl2ZV9u ZXcnLCAnMScsIDEpKQ0KCQkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX2RlZmF1bHQnLCAn MScsIDApKQ0KCQkJCS50ZChmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGh1bWJfYWRkJywgZ1R4 dCgnYWRkJyksICdzbWFsbGVyYm94JykpOw0KCQkJJG91dFtdPSAnPC90cj4nOw0KDQoJCQkv LyBSZW1haW5pbmcgcm93cw0KCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCQkkbGlu a19lZHQgPSBqb2luX3FzKCRxcykuJyYjMzg7c3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9lZGl0 JiMzODtzbWRfdGh1bWJfbmFtZT0nLiRyb3dbJ25hbWUnXTsNCgkJCQkkbGlua19kZWwgPSBq b2luX3FzKCRxcykuJyYjMzg7c3RlcD1zbWRfdGh1bWJfcHJvZmlsZV9kZWxldGUmIzM4O3Nt ZF90aHVtYl9uYW1lPScuJHJvd1snbmFtZSddOw0KCQkJCSRidG5FZHQgPSAnPGEgaHJlZj0i Jy4kbGlua19lZHQuJyI+WycgLiBnVHh0KCdlZGl0JykgLiAnXTwvYT4nOw0KCQkJCSRidG5E ZWwgPSAnPGEgaHJlZj0iJy4kbGlua19kZWwuJyIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0o XCcnLnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgi e25hbWV9IiA9PiAkcm93WyduYW1lJ10pKS4nXCcpOyI+WycgLiBnVHh0KCdkZWxldGUnKSAu ICddPC9hPic7DQoJCQkJJGFjdGl2ZSA9ICgkcm93WydmbGFncyddICYgU01EX1RIVU1CX0FD VElWRSkgPyAxIDogMDsNCgkJCQkkY3JvcCA9ICgkcm93WydmbGFncyddICYgU01EX1RIVU1C X0NST1ApID8gMSA6IDA7DQoJCQkJJHNoYXJwZW4gPSAoJHJvd1snZmxhZ3MnXSAmIFNNRF9U SFVNQl9TSEFSUCkgPyAxIDogMDsNCg0KCQkJCWlmICgkc3RlcCA9PSAnc21kX3RodW1iX3By b2ZpbGVfZWRpdCcgJiYgJHJvd1snbmFtZSddID09ICRzbWRfdGh1bWJfbmFtZSkgew0KCQkJ CQkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9zYXZlJywgZ1R4dCgn U2F2ZScpLCAnc21hbGxlcmJveCcpOw0KCQkJCQkkYnRuQ2FuY2VsID0gZklucHV0KCdzdWJt aXQnLCAnc21kX3RodW1iX2NhbmNlbCcsIGdUeHQoJ0NhbmNlbCcpLCAnc21hbGxlcmJveCcp Ow0KCQkJCQkkb3V0W10gPSB0cigNCgkJCQkJCXRkKGhJbnB1dCgnc21kX3RodW1iX25hbWUn LCAkcm93WyduYW1lJ10pLmZJbnB1dCgndGV4dCcsICdzbWRfdGh1bWJfbmV3bmFtZScsICRy b3dbJ25hbWUnXSkpDQoJCQkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl93aWR0 aCcsICRyb3dbJ3dpZHRoJ10sICcnLCAnJywgJycsICc0JykpDQoJCQkJCQkudGQoZklucHV0 KCd0ZXh0JywgJ3NtZF90aHVtYl9oZWlnaHQnLCAkcm93WydoZWlnaHQnXSwgJycsICcnLCAn JywgJzQnKSkNCgkJCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX3F1YWxpdHkn LCAkcm93WydxdWFsaXR5J10sICcnLCAnJywgJycsICc0JykpDQoJCQkJCQkudGQoY2hlY2ti b3goJ3NtZF90aHVtYl9jcm9wJywgJzEnLCAkY3JvcCkpDQoJCQkJCQkudGQoY2hlY2tib3go J3NtZF90aHVtYl9zaGFycGVuJywgJzEnLCAkc2hhcnBlbikpDQoJCQkJCQkudGQoY2hlY2ti b3goJ3NtZF90aHVtYl9hY3RpdmUnLCAnMScsICRhY3RpdmUpLCAnJywgJHJvd1snbmFtZSdd KQ0KCQkJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfZGVmYXVsdCcsICcxJywgKCgkcm93 WyduYW1lJ10gPT0gJHByb19kZmx0KSA/IDEgOiAwKSkpDQoJCQkJCQkudGQoJGJ0blNhdmUu JGJ0bkNhbmNlbCkNCgkJCQkJLCAnIGlkPSJzbWRfdGh1bWJfcHJvZmlsZV9lZGl0ZWQiJyk7 DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG91dFtdID0gdHIoDQoJCQkJCQl0ZChocmVmKCRyb3db J25hbWUnXSwgJGxpbmtfZWR0KSkuDQoJCQkJCQl0ZCgkcm93Wyd3aWR0aCddKS4NCgkJCQkJ CXRkKCRyb3dbJ2hlaWdodCddKS4NCgkJCQkJCXRkKCRyb3dbJ3F1YWxpdHknXSkuDQoJCQkJ CQl0ZCgoJGNyb3ApID8gZ1R4dCgneWVzJykgOiBnVHh0KCdubycpKS4NCgkJCQkJCXRkKCgk c2hhcnBlbikgPyBnVHh0KCd5ZXMnKSA6IGdUeHQoJ25vJykpLg0KCQkJCQkJdGQoJzxpbnB1 dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic21kX3RodW1iX2FjdGl2ZV8nLiRyb3dbJ25hbWUn XS4nIiB2YWx1ZT0iMSInLigoJGFjdGl2ZSkgPyAnIiBjaGVja2VkPSJjaGVja2VkIicgOiAn JykuICcgY2xhc3M9ImNoZWNrYm94IiBvbmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9hY3Rp dmUoXCcnLiRyb3dbJ25hbWUnXS4nXCcpOyIgLz4nLCAnJywgJHJvd1snbmFtZSddKS4NCgkJ CQkJCXRkKCgkcm93WyduYW1lJ10gPT0gJHByb19kZmx0KSA/IGdUeHQoJ3llcycpIDogZ1R4 dCgnbm8nKSkuDQoJCQkJCQl0ZCgkYnRuRGVsKQ0KCQkJCQksICcgaWQ9InNtZF90aHVtYl9w cm9maWxlXycuJHJvd1snbmFtZSddLiciIGNsYXNzPSJzbWRfdGh1bWJfcm93JyAuICgoJGFj dGl2ZSkgPyAnJyA6ICcgc21kX2luYWN0aXZlJykuJyInKTsNCgkJCQl9DQoJCQl9DQoJCX0N Cg0KCQkkb3V0W10gPSBlbmRUYWJsZSgpOw0KCQkkb3V0W10gPSAnPC9mb3JtPjwvZGl2Pjwv ZmllbGRzZXQ+JzsNCgl9DQoNCglyZXR1cm4gam9pbignJywgJG91dCk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVXNlZnVsIGZ1bmN0aW9uIGZvciBvdGhlciBw bHVnaW5zIHRvIHVzZSB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgY3VycmVudCBwcm9maWxlcw0K ZnVuY3Rpb24gc21kX3RodW1iX2dldF9wcm9maWxlcygkYWN0aXZlPTEsICRvcmRlcj0nbmFt ZScpIHsNCgkkYWxsb3dlZE9yZGVycyA9IGFycmF5KCduYW1lJywgJ3dpZHRoJywgJ2hlaWdo dCcsJ3F1YWxpdHknKTsNCgkkb3JkZXIgPSBpbl9hcnJheSgkb3JkZXIsICRhbGxvd2VkT3Jk ZXJzKSA/ICRvcmRlciA6ICduYW1lJzsNCg0KCSR3aGVyZVtdID0gJzE9MSc7DQoJaWYgKCRh Y3RpdmUpIHsNCgkJJHdoZXJlW10gPSAnZmxhZ3MgJiAnLlNNRF9USFVNQl9BQ1RJVkU7DQoJ fQ0KDQoJJHJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RIVU1CLCBqb2luKCcgQU5EICcsICR3 aGVyZSkgLiAnIE9SREVSIEJZICcuJG9yZGVyKTsNCg0KCXJldHVybiAkcnM7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRGVsZXRlIGEgdGh1bWJuYWlsIGRpcmVj dG9yeSBhbmQgaXRzIGNvbnRlbnRzDQpmdW5jdGlvbiBzbWRfdGh1bWJfcm1kaXIoJGRpcikg ew0KCWlmIChpc19kaXIoJGRpcikpIHsNCgkJJG9iamVjdHMgPSBzY2FuZGlyKCRkaXIpOw0K CQlmb3JlYWNoICgkb2JqZWN0cyBhcyAkb2JqZWN0KSB7DQoJCQlpZiAoJG9iamVjdCAhPSAi LiIgJiYgJG9iamVjdCAhPSAiLi4iKSB7DQoJCQkJaWYgKGZpbGV0eXBlKCRkaXIuRFMuJG9i amVjdCkgPT0gImRpciIpIHNtZF90aHVtYl9ybWRpcigkZGlyLkRTLiRvYmplY3QpOyBlbHNl IHVubGluaygkZGlyLkRTLiRvYmplY3QpOw0KCQkJfQ0KCQl9DQoJCXJlc2V0KCRvYmplY3Rz KTsNCgkJcm1kaXIoJGRpcik7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIEFkZCB0aHVtYm5haWwgdGFibGUgaWYgbm90IGFscmVhZHkgaW5zdGFsbGVkDQov LyBGbGFnczogQml0IDA9QWN0aXZlIC8gMT1Dcm9wIC8gMiA9IFNoYXJwZW4NCmZ1bmN0aW9u IHNtZF90aHVtYl90YWJsZV9pbnN0YWxsKCkgew0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50 J10gPSAwOw0KCSRyZXQgPSAnJzsNCgkkc3FsID0gYXJyYXkoKTsNCgkkc3FsW10gPSAiQ1JF QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCIuUEZYLlNNRF9USFVNQi4iYCAoDQoJCWBuYW1l YCB2YXJjaGFyKDMyKSBOT1QgTlVMTCBkZWZhdWx0ICcnLA0KCQlgd2lkdGhgIGludCg0KSBO T1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJYGhlaWdodGAgaW50KDQpIE5PVCBOVUxMIGRlZmF1 bHQgJzAnLA0KCQlgcXVhbGl0eWAgdGlueWludCgyKSBOVUxMIGRlZmF1bHQgJzc1JywNCgkJ YGZsYWdzYCB0aW55aW50KDIpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLA0KCQlQUklNQVJZIEtF WSAoYG5hbWVgKQ0KCSkgRU5HSU5FPU15SVNBTSI7DQoNCglpZihncHMoJ2RlYnVnJykpIHsN CgkJZG1wKCRzcWwpOw0KCX0NCglmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsNCgkJJHJldCA9 IHNhZmVfcXVlcnkoJHFyeSk7DQoJCWlmICgkcmV0PT09ZmFsc2UpIHsNCgkJCSRHTE9CQUxT Wyd0eHBfZXJyX2NvdW50J10rKzsNCgkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJf Y291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQllY2hvICI8 IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJfQ0KCX0NCg0KCS8vIEJhY2t1cCB0aGUgY3VycmVu dCB0aHVtYiBwcmVmcw0KCSRleGlzdHMgPSBzYWZlX3JvdygnKicsICd0eHBfcHJlZnMnLCAi bmFtZT0nc21kX3RodW1iX2JhY2t1cF93JyIpOw0KCWlmICghJGV4aXN0cykgew0KCQlzZXRf cHJlZignc21kX3RodW1iX2JhY2t1cF93JywgZ2V0X3ByZWYoJ3RodW1iX3cnKSwgJ3NtZF90 aHVtYicsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDApOw0KCQlzZXRfcHJlZignc21k X3RodW1iX2JhY2t1cF9oJywgZ2V0X3ByZWYoJ3RodW1iX2gnKSwgJ3NtZF90aHVtYicsIFBS RUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDEpOw0KCQlzZXRfcHJlZignc21kX3RodW1iX2Jh Y2t1cF9jJywgZ2V0X3ByZWYoJ3RodW1iX2Nyb3AnKSwgJ3NtZF90aHVtYicsIFBSRUZfSElE REVOLCAndGV4dF9pbnB1dCcsIDIpOw0KDQoJCS8vIEVyYXNlIHRoZSBjdXJyZW50IHRodW1i IHByZWZzDQoJCXNldF9wcmVmKCd0aHVtYl93JywgJycsICdpbWFnZScsIFBSRUZfSElEREVO KTsNCgkJc2V0X3ByZWYoJ3RodW1iX2gnLCAnJywgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0K CQlzZXRfcHJlZigndGh1bWJfY3JvcCcsICcnLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERyb3AgdGFibGUgaWYg aW4gZGF0YWJhc2UNCmZ1bmN0aW9uIHNtZF90aHVtYl90YWJsZV9yZW1vdmUoKSB7DQoJJHJl dCA9ICcnOw0KCSRzcWwgPSBhcnJheSgpOw0KCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10g PSAwOw0KCWlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3QoKSkgew0KCQkkc3FsW10gPSAiRFJP UCBUQUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9USFVNQi4gIjsgIjsNCgkJaWYoZ3BzKCdk ZWJ1ZycpKSB7DQoJCQlkbXAoJHNxbCk7DQoJCX0NCgkJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5 KSB7DQoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJCWlmICgkcmV0PT09ZmFsc2Up IHsNCgkJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7DQoJCQkJZWNobyAiPGI+Ii4k R0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAv PlxuIjsNCgkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJCX0NCgkJfQ0KCX0N Cg0KCS8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHRodW1iIHByZWZzDQoJJGV4aXN0cyA9IHNh ZmVfcm93KCcqJywgJ3R4cF9wcmVmcycsICJuYW1lPSdzbWRfdGh1bWJfYmFja3VwX3cnIik7 DQoJaWYgKCRleGlzdHMpIHsNCgkJc2V0X3ByZWYoJ3RodW1iX3cnLCBnZXRfcHJlZignc21k X3RodW1iX2JhY2t1cF93JyksICdpbWFnZScsIFBSRUZfSElEREVOKTsNCgkJc2V0X3ByZWYo J3RodW1iX2gnLCBnZXRfcHJlZignc21kX3RodW1iX2JhY2t1cF9oJyksICdpbWFnZScsIFBS RUZfSElEREVOKTsNCgkJc2V0X3ByZWYoJ3RodW1iX2Nyb3AnLCBnZXRfcHJlZignc21kX3Ro dW1iX2JhY2t1cF9jJyksICdpbWFnZScsIFBSRUZfSElEREVOKTsNCg0KCX0NCgkvLyBFcmFz ZSB0aGUgYmFja3VwIHRodW1iIHByZWZzDQoJc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsICJu YW1lIElOKCdzbWRfdGh1bWJfYmFja3VwX3cnLCAnc21kX3RodW1iX2JhY2t1cF9oJywgJ3Nt ZF90aHVtYl9iYWNrdXBfYycsICdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJ3BhbmVf c21kX3RodW1ibmFpbF9wcm9maWxlc192aXNpYmxlJywgJ3BhbmVfc21kX3RodW1ibmFpbHNf dmlzaWJsZScpIik7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX3RodW1iX3RhYmxlX2V4aXN0KCRhbGw9JycpIHsNCglpZiAoJGFsbCkgew0KCQkk dGJscyA9IGFycmF5KFNNRF9USFVNQiA9PiA1KTsNCgkJJG91dCA9IGNvdW50KCR0YmxzKTsN CgkJZm9yZWFjaCAoJHRibHMgYXMgJHRibCA9PiAkY29scykgew0KCQkJaWYgKGdwcygnZGVi dWcnKSkgew0KCQkJCWVjaG8gIisrIFRBQkxFICIuJHRibC4iIEhBUyAiLmNvdW50KEBzYWZl X3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkuIiBDT0xVTU5TOyBSRVFVSVJFUyAiLiRjb2xzLiIg KysiLmJyOw0KCQkJfQ0KCQkJaWYgKGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJs KSkgPT0gJGNvbHMpIHsNCgkJCQkkb3V0LS07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICgkb3V0 PT09MCkgPyAxIDogMDsNCgl9IGVsc2Ugew0KCQlpZiAoZ3BzKCdkZWJ1ZycpKSB7DQoJCQll Y2hvICIrKyBUQUJMRSAiLlNNRF9USFVNQi4iIEhBUyAiLmNvdW50KEBzYWZlX3Nob3coJ2Nv bHVtbnMnLCBTTURfVEhVTUIpKS4iIENPTFVNTlM7IjsNCgkJfQ0KCQlyZXR1cm4oQHNhZmVf c2hvdygnY29sdW1ucycsIFNNRF9USFVNQikpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX3RodW1ibmFpbF9zYXZlX3BhbmVfc3RhdGUoKSB7DQoJJHBhbmVzID0gYXJy YXkoJ3NtZF90aHVtYm5haWxfcHJvZmlsZXMnLCAnc21kX3RodW1ibmFpbHMnKTsNCgkkcGFu ZSA9IGdwcygncGFuZScpOw0KCWlmIChpbl9hcnJheSgkcGFuZSwgJHBhbmVzKSkNCgl7DQoJ CXNldF9wcmVmKCJwYW5lX3skcGFuZX1fdmlzaWJsZSIsIChncHMoJ3Zpc2libGUnKSA9PSAn dHJ1ZScgPyAnMScgOiAnMCcpLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4sICd5ZXNub3Jh ZGlvJywgMCwgUFJFRl9QUklWQVRFKTsNCgkJc2VuZF94bWxfcmVzcG9uc2UoKTsNCgl9IGVs c2Ugew0KCQlzZW5kX3htbF9yZXNwb25zZShhcnJheSgnaHR0cC1zdGF0dXMnID0+ICc0MDAg QmFkIFJlcXVlc3QnKSk7DQoJfQ0KfQ0KDQovLyoqKioqKioqKioqKioqKioqDQovLyBQVUJM SUMgU0lERSBUQUdTDQovLyoqKioqKioqKioqKioqKioqDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYm5haWwoJGF0dHMpIHsNCglnbG9iYWwgJHRo aXNpbWFnZTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0eXBlJyAgICAgICA9PiBA Z2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnKSwNCgkJJ2lkJyAgICAgICAg ID0+ICcnLA0KCQknbmFtZScgICAgICAgPT4gJycsDQoJCSdlc2NhcGUnICAgICA9PiAnaHRt bCcsDQoJCSd3cmFwdGFnJyAgICA9PiAnJywNCgkJJ2NsYXNzJyAgICAgID0+ICcnLA0KCQkn aHRtbF9pZCcgICAgPT4gJycsDQoJCSdzdHlsZScgICAgICA9PiAnJywNCgkJJ2xpbmsnICAg ICAgID0+ICcnLA0KCQknbGlua19yZWwnICAgPT4gJycsDQoJCSdwb3BsaW5rJyAgICA9PiAw LA0KCQknYWRkX3N0YW1wJyAgPT4gMCwNCgkJJ2ZvcmNlX3NpemUnID0+ICcnLA0KCSksJGF0 dHMpKTsNCg0KCWlmICgkbmFtZSkgew0KCQkkbmFtZSA9IGRvU2xhc2goJG5hbWUpOw0KCQkk cnMgPSBzYWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAibmFtZSA9ICckbmFtZScgbGltaXQg MSIpOw0KCX0gZWxzZWlmICgkaWQpIHsNCgkJJGlkID0gKGludCkgJGlkOw0KCQkkcnMgPSBz YWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAiaWQgPSAkaWQgbGltaXQgMSIpOw0KCX0gZWxz ZWlmICgkdGhpc2ltYWdlKSB7DQoJCSRpZCA9IChpbnQpICR0aGlzaW1hZ2VbJ2lkJ107DQoJ CSRycyA9ICR0aGlzaW1hZ2U7DQoJfSBlbHNlIHsNCgkJdHJpZ2dlcl9lcnJvcihnVHh0KCd1 bmtub3duX2ltYWdlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKCRycykgew0KCQlleHRy YWN0KCRycyk7DQoJCSR0aHVtYmluZm8gPSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwgIm5h bWU9JyIuZG9TbGFzaCgkdHlwZSkuIiciKTsNCgkJaWYgKCR0aHVtYmluZm8pIHsNCgkJCSRw YXRoID0gSU1QQVRILnNhbml0aXplRm9yVXJsKCR0aHVtYmluZm9bJ25hbWUnXSkuRFMuJGlk LiRleHQ7DQoJCQlpZiAoZmlsZV9leGlzdHMoJHBhdGgpKSB7DQoJCQkJaWYgKCRlc2NhcGUg PT0gJ2h0bWwnKSB7DQoJCQkJCSRhbHQgPSBodG1sc3BlY2lhbGNoYXJzKCRhbHQpOw0KCQkJ CQkkY2FwdGlvbiA9IGh0bWxzcGVjaWFsY2hhcnMoJGNhcHRpb24pOw0KCQkJCX0NCg0KCQkJ CSRtZXRhWydhbHQnXSA9ICRhbHQ7DQoJCQkJJGZvcmNlX3NpemUgPSBkb19saXN0KCRmb3Jj ZV9zaXplKTsNCgkJCQlpZiAoaW5fYXJyYXkoJ3dpZHRoJywgJGZvcmNlX3NpemUpKSB7DQoJ CQkJCSRtZXRhWydmb3JjZXcnXSA9IDE7DQoJCQkJfQ0KCQkJCWlmIChpbl9hcnJheSgnaGVp Z2h0JywgJGZvcmNlX3NpemUpKSB7DQoJCQkJCSRtZXRhWydmb3JjZWgnXSA9IDE7DQoJCQkJ fQ0KCQkJCWlmICgkYWRkX3N0YW1wID09IDApIHsgJG1ldGFbJ3N0YW1wJ10gPSAxOyB9IC8v IE5lZ2F0aXZlIGxvZ2ljIHNpbmNlIHdlIHdhbnQgdGhlIHN0YW1wIG9uIGJ5IGRlZmF1bHQg Zm9yIHRoZSBhZG1pbiBzaWRlDQoJCQkJaWYgKCRjYXB0aW9uKSB7ICRtZXRhWyd0aXRsZSdd ID0gJGNhcHRpb247IH0NCgkJCQlpZiAoJGh0bWxfaWQgJiYgISR3cmFwdGFnKSB7ICRtZXRh WydpZCddID0gJGh0bWxfaWQ7IH0NCgkJCQlpZiAoJGNsYXNzICYmICEkd3JhcHRhZykgeyAk bWV0YVsnY2xhc3MnXSA9ICRjbGFzczsgfSBlbHNlIHsgJGNsYXNzPSR0eXBlOyB9DQoJCQkJ aWYgKCRzdHlsZSkgeyAkbWV0YVsnc3R5bGUnXSA9ICRzdHlsZTsgfQ0KDQoJCQkJJG91dCA9 IHNtZF90aHVtYl9pbWcoJHRodW1iaW5mbywgJHJzLCAkbWV0YSk7DQoNCgkJCQlpZiAoJGxp bmspIHsNCgkJCQkJJG91dCA9IGhyZWYoJG91dCwgaW1hZ2VzcmN1cmwoJGlkLCAkZXh0KSwg KCFlbXB0eSgkbGlua19yZWwpID8gJyByZWw9IicuJGxpbmtfcmVsLiciJyA6ICcnKS4nIHRp dGxlPSInLiRjYXB0aW9uLiciJyk7DQoJCQkJfSBlbHNlaWYgKCRwb3BsaW5rKSB7DQoJCQkJ CSRvdXQgPSAnPGEgaHJlZj0iJy5pbWFnZXNyY3VybCgkaWQsICRleHQpLiciJy4NCgkJCQkJ CScgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsICcu DQoJCQkJCQknXCd3aWR0aD0nLiR3LicsIGhlaWdodD0nLiRoLicsIHNjcm9sbGJhcnMsIHJl c2l6YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+Jy4kb3V0Lic8L2E+JzsNCgkJCQl9DQoNCgkJ CQlyZXR1cm4gKCR3cmFwdGFnKSA/IGRvVGFnKCRvdXQsICR3cmFwdGFnLCAkY2xhc3MsICcn LCAkaHRtbF9pZCkgOiAkb3V0Ow0KCQkJfQ0KCQl9DQoJfQ0KDQoJdHJpZ2dlcl9lcnJvcihn VHh0KCd1bmtub3duX2ltYWdlJykpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9pZl90aHVtYm5haWwoJGF0dHMsICR0aGluZykgew0KCWdsb2Jh bCAkdGhpc2ltYWdlOw0KCWFzc2VydF9pbWFnZSgpOw0KDQoJZXh0cmFjdChsQXR0cyhhcnJh eSgNCgkJJ3R5cGUnID0+IEBnZXRfcHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScp LA0KCSksJGF0dHMpKTsNCg0KCSR0aHVtYmluZm8gPSBzYWZlX3JvdygnKicsIFNNRF9USFVN QiwgIm5hbWU9JyIuZG9TbGFzaCgkdHlwZSkuIiciKTsNCgkkcmV0ID0gZmFsc2U7DQoJaWYg KCR0aHVtYmluZm8pIHsNCgkJJHBhdGggPSBJTVBBVEguc2FuaXRpemVGb3JVcmwoJHRodW1i aW5mb1snbmFtZSddKS5EUy4kdGhpc2ltYWdlWydpZCddLiR0aGlzaW1hZ2VbJ2V4dCddOw0K CQkkcmV0ID0gZmlsZV9leGlzdHMoJHBhdGgpOw0KCX0NCglyZXR1cm4gcGFyc2UoRXZhbEVs c2UoJHRoaW5nLCAkcmV0KSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gUGx1Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyBy ZXF1aXJlZA0KLy8gVE9ETzogbWFrZSB0aGVzZSBpbnRvIGEgdGV4dHBhY2sgd2hlbiBwbHVn aW4gY29tcG9zZXIgc3VwcG9ydHMgdGhlbQ0KZnVuY3Rpb24gc21kX3RodW1iX2dUeHQoJHdo YXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJCSdzbWRfdGh1bWJf YWN0aW9ucycgPT4gJ0FjdGlvbnMnLA0KCQknc21kX3RodW1iX2FsbF9zaXplcycgPT4gJ0Fs bCBzaXplcycsDQoJCSdzbWRfdGh1bWJfYWxsX3RodW1icycgPT4gJ0NyZWF0ZScsDQoJCSdz bWRfdGh1bWJfYmF0Y2hfbGVnZW5kJyA9PiAnQ3JlYXRlIC8gcmVjcmVhdGUgdGh1bWJuYWls cycsDQoJCSdzbWRfdGh1bWJfYmF0Y2hfcHJlYW1ibGUnID0+ICdGb3IgYWxsIGFjdGl2ZSBw cm9maWxlczogJywNCgkJJ3NtZF90aHVtYl9idG5fcG5sJyA9PiAnUHJvZmlsZXMnLA0KCQkn c21kX3RodW1iX2J0bl90b29sc19wcmVmcycgPT4gJ1Rvb2xzIC8gUHJlZnMnLA0KCQknc21k X3RodW1iX2J0bl90b29scycgPT4gJ1Rvb2xzJywNCgkJJ3NtZF90aHVtYl9ieUFsbCcgPT4g J0FsbCcsDQoJCSdzbWRfdGh1bWJfYnlVc3InID0+ICdCeSBhdXRob3InLA0KCQknc21kX3Ro dW1iX2J5Q2F0JyA9PiAnQnkgY2F0ZWdvcnknLA0KCQknc21kX3RodW1iX2J5U2VsJyA9PiAn V2l0aCBzZWxlY3RlZCcsDQoJCSdzbWRfdGh1bWJfY3JlYXRlJyA9PiAnQ3JlYXRpb24nLA0K CQknc21kX3RodW1iX2NyZWF0ZV9ncm91cF9jb25maXJtJyA9PiAnUmVhbGx5IGNyZWF0ZSB0 aHVtYm5haWxzIGZvciBBTEwgYWN0aXZlIHByb2ZpbGVzPyBBbnkgZXhpc3RpbmcgdGh1bWJz IHdpbGwgYmUgb3ZlcndyaXR0ZW4uJywNCgkJJ3NtZF90aHVtYl9kZWxldGUnID0+ICdEZWxl dGlvbicsDQoJCSdzbWRfdGh1bWJfZGVsZXRlX2NvbmZpcm0nID0+ICdSZWFsbHkgZGVsZXRl IHByb2ZpbGUge25hbWV9PyBJdCB3aWxsIGRlbGV0ZSBBTEwgdGh1bWJuYWlscyBvZiB0aGlz IHR5cGUuJywNCgkJJ3NtZF90aHVtYl9uZXcnID0+ICdOZXcgcHJvZmlsZScsDQoJCSdzbWRf dGh1bWJfcHJlZnMnID0+ICdQcmVmZXJlbmNlcycsDQoJCSdzbWRfdGh1bWJfcHJvZmlsZV9k ZWxldGVkJyA9PiAnUHJvZmlsZSAie25hbWV9IiBkZWxldGVkJywNCgkJJ3NtZF90aHVtYl9w cm9maWxlX2V4aXN0cycgPT4gJ1Byb2ZpbGUgIntuYW1lfSIgYWxyZWFkeSBleGlzdHMnLA0K CQknc21kX3RodW1iX3Byb2ZpbGVfaGVhZGluZycgPT4gJ1RodW1ibmFpbCBwcm9maWxlcycs DQoJCSdzbWRfdGh1bWJfcHJvZmlsZV9wcmVmdG9vbF9oZWFkaW5nJyA9PiAnVGh1bWJuYWls IHRvb2xzIGFuZCBwcmVmcycsDQoJCSdzbWRfdGh1bWJfcHJvZmlsZV90b29sX2hlYWRpbmcn ID0+ICdUaHVtYm5haWwgdG9vbHMnLA0KCQknc21kX3RodW1iX3F1YWxpdHknID0+ICdRdWFs aXR5ICglKScsDQoJCSdzbWRfdGh1bWJfc2hhcnBlbicgPT4gJ1NoYXJwZW4nLA0KCQknc21k X3RodW1iX3RhYmxlc19ub3RfaW5zdGFsbGVkJyA9PiAnVGFibGVzIG5vdCBpbnN0YWxsZWQ6 IHRyeSByZWluc3RhbGxpbmcgdGhlIHBsdWdpbicsDQoJCSdzbWRfdGh1bWJfdGh1bWJuYWls X2hlYWRpbmcnID0+ICdUaHVtYm5haWxzJywNCgkJJ3NtZF90aHVtYl90eHBfYXV0b19yZXBs YWNlJyA9PiAnUmVjcmVhdGUgdGh1bWJuYWlscyBvbiByZS11cGxvYWQgb2YgbWFpbiBpbWFn ZTogJywNCgkJJ3NtZF90aHVtYl90eHBfZGVmYXVsdF9zeW5jJyA9PiAnS2VlcCBUWFAgdGh1 bWJuYWlscyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxlIG9uOiAnLA0KCQknc21kX3Ro dW1iX3VwbG9hZCcgPT4gJ1JlcGxhY2Ugc2VsZWN0ZWQgdGh1bWJuYWlsJywNCgkpOw0KCXJl dHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIx IjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMiI7czo0OiJoZWxwIjtz OjE4NjY2OiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxPnNtZF90aHVtYm5haWw8L2gxPgoK CTxoMj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5Bc3NpZ24gYW55IG51bWJlciBvZiB0 aHVtYm5haWxzIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgaW1h Z2VzPC9saT4KCQk8bGk+QmF0Y2ggYXNzaWduIHRodW1ibmFpbHMgdG8gZXhpc3RpbmcgaW1h Z2VzPC9saT4KCQk8bGk+U2V0IG9uZSB0aHVtYm5haWwgc2l6ZSBhcyBkZWZhdWx0PC9saT4K CQk8bGk+RGlzcGxheSBhbnkgb2YgdGhlIHRodW1ibmFpbCBzaXplcyBvbiB5b3VyIHNpdGU8 L2xpPgoJCTxsaT5LZWVwIHRodW1icyBpbiBzeW5jIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4mIzgyMTc7cyB0aHVtYnMgaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5Db25k aXRpb25hbCB0aHVtYm5haWwgY2hlY2sgYXZhaWxhYmxlPC9saT4KCTwvdWw+CgoJPGgyPkF1 dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0 ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8g dGhlIGJldGEgdGVzdCBjcmV3IHdobyBvZmZlcmVkIGZlYXR1cmUgYW5kIHdvcmtmbG93IGFk dmljZSwgZXNwZWNpYWxseSB0aGVib21ic2l0ZSwgamFrb2IsIGpzdHViYnMgYW5kIG1hbmlx dWkuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1cGdyYWRpbmcgLyB1bmluc3RhbGxhdGlv bjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgUEhQNSsgYW5kIDxzcGFu IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMy4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0aGUg cGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1 Z2lucy8xMTg2L3NtZF90aHVtYm5haWwiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBw YXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBB ZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2lu LiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3 dG9waWMucGhwP2lkPTM0MzY3Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3Ig dG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwv cD4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5XaGVuIHVwZ3JhZGluZyBmcm9pbSB2MC4xeCB0 byB2MC4yMCwgeW91ciBwcmVmZXJlbmNlcyBmb3IgPGVtPktlZXAgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gdGh1bWJuYWlscyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxl PC9lbT4gd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgdmlzaXQgdGhlIDxlbT5Ub29scy9QcmVm czwvZW0+IGFyZWEgdG8gcmVpbnN0YXRlIHRoZSBiZWhhdmlvdXIgeW91IGRlc2lyZS48L3A+ CgoJPHA+VG8gdW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lu cyBwYWdlLjwvcD4KCgk8aDI+VXNhZ2UgJiM4MjEyOyBhZG1pbiBzaWRlPC9oMj4KCgk8cD5W aXNpdCB0aGUgQ29udGVudC0mZ3Q7SW1hZ2VzIHRhYi4gQWJvdmUgdGhlIGxpc3Qgb2YgaW1h Z2VzIGlzIGFuIGFyZWEgbGFiZWxsZWQgPGVtPlRodW1ibmFpbCBQcm9maWxlczwvZW0+LiBD bGljayBpdCB0byByZXZlYWwgdGhlIGNvbnRyb2wgcGFuZWwuIFlvdSBjYW4gdG9nZ2xlIHRo aXMgcGFuZWwgb24gYW5kIG9mZiBieSBjbGlja2luZyB0aGUgaGVhZGluZy48L3A+CgoJPHA+ WW91IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBwcm9maWxlIHRvIGJlZ2luIHdpdGgsIHNv IGNsaWNrIHRoZSA8ZW0+TmV3IHByb2ZpbGU8L2VtPiBidXR0b24uIFRoaXMgd2lsbCByZXZl YWwgZWRpdCBib3hlcyB3aGVyZSB5b3UgY2FuIGVudGVyOjwvcD4KCgk8dWw+CgkJPGxpPjxz dHJvbmc+TmFtZTwvc3Ryb25nPjogc29tZSBkZXNjcmlwdGl2ZSBuYW1lIGZvciB0aGlzIHRo dW1ibmFpbCBkaW1lbnNpb24uIFlvdSBhcmUgbGltaXRlZCB0byB1c3VhbCBub24td2VpcmQg Y2hhcmFjdGVycyBpbiB0aGUgbmFtZTwvbGk+CgkJPGxpPjxzdHJvbmc+V2lkdGg8L3N0cm9u Zz46IHRodW1ibmFpbCB3aWR0aCwgaW4gcGl4ZWxzLiBJZiBsZWZ0IGJsYW5rIChvciBzZXQg dG8gMCkgYW5kIGhlaWdodCBpcyBzcGVjaWZpZWQsIHRoZSB3aWR0aCB3aWxsIGJlIGNvbXB1 dGVkIGluIHByb3BvcnRpb24gdG8gdGhlIGhlaWdodDwvbGk+CgkJPGxpPjxzdHJvbmc+SGVp Z2h0PC9zdHJvbmc+OiB0aHVtYm5haWwgaGVpZ2h0LCBpbiBwaXhlbHMuIElmIGxlZnQgYmxh bmsgKG9yIHNldCB0byAwKSBhbmQgd2lkdGggaXMgc3BlY2lmaWVkLCB0aGUgaGVpZ2h0IHdp bGwgYmUgY29tcHV0ZWQgaW4gcHJvcG9ydGlvbiB0byB0aGUgd2lkdGg8L2xpPgoJCTxsaT48 c3Ryb25nPlF1YWxpdHkgKCUpPC9zdHJvbmc+OiBUaGUgcXVhbGl0eSBvZiB0aGUgcmVzdWx0 aW5nIHRodW1ibmFpbC4gR2VuZXJhbGx5IG9ubHkgb2YgdXNlIGZvciBqcGcgb3IgcG5nKDI0 KSBpbWFnZXMuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIHRoZSBiZXR0ZXIgdGhlIHF1YWxpdHkg YW5kIHRoZSBiaWdnZXIgdGhlIGZpbGUgc2l6ZS4gRGVmYXVsdDogNzU8L2xpPgoJCTxsaT48 c3Ryb25nPkNyb3A8L3N0cm9uZz46IHdoZXRoZXIgdG8gY3JvcCB0aGUgaW1hZ2Ugd2hlbiB0 aGUgdGh1bWJuYWlsIGlzIGNyZWF0ZWQsIG9yIHNjYWxlIGl0IHRvIGZpdDwvbGk+CgkJPGxp PjxzdHJvbmc+U2hhcnBlbjwvc3Ryb25nPjogd2hldGhlciB0byBhcHBseSBhIHNoYXJwZW5p bmcgZmlsdGVyIHRvIHRoZSB0aHVtYm5haWwgd2hlbiBpdCBpcyBjcmVhdGVkLiBVc2VmdWwg Zm9yIHZlcnkgc21hbGwgaW1hZ2VzPC9saT4KCQk8bGk+PHN0cm9uZz5BY3RpdmU8L3N0cm9u Zz46IEVuYWJsZS9kaXNhYmxlIHRoaXMgdGh1bWJuYWlsIHNpemUgc28gaXQgd2lsbC93b24m IzgyMTc7dCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3aGVuIHRoZSBuZXh0IGltYWdl IGlzIHVwbG9hZGVkLiBDbGljayB0aGUgY2hlY2tib3ggdG8gaW5zdGFudGx5IHN3aXRjaCB0 aGUgcHJvZmlsZSBvbi9vZmYuIENsaWNrIHRoZSAmIzgyMTY7QWN0aXZlJiM4MjE3OyB3b3Jk IGluIHRoZSBoZWFkaW5nIHJvdyB0byB0b2dnbGUgdGhlIHN0YXR1cyBvZiBhbGwgcHJvZmls ZXMuIE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgZ292ZXJucyBob3cgdGhlIDxhIGhyZWY9IiNz bWRfdGh1bWJfY3JlYXRlIj5BbGwgc2l6ZXM8L2E+IGRyb3Bkb3duIGVudHJ5IGludGVyYWN0 cyB3aXRoIHRoZSA8ZW0+Q3JlYXRlPC9lbT4gYW5kIDxlbT5EZWxldGU8L2VtPiBidXR0b25z PC9saT4KCQk8bGk+PHN0cm9uZz5EZWZhdWx0PC9zdHJvbmc+OiBzZXQgdGhpcyB0aHVtYm5h aWwgcHJvZmlsZSBhcyB0aGUgZGVmYXVsdC4gVGhlIGRlZmF1bHQgaW1hZ2Ugd2lsbCBiZSBk aXNwbGF5ZWQgaW4gdGhlIEltYWdlcyBsaXN0IGFuZCB3aWxsIGFsc28gYmUgdXNlZCBhcyB0 aGUgZGVmYXVsdCBzaXplIHRvIGJlIGRpc3BsYXllZCB1c2luZyA8Y29kZT4mbHQ7dHhwOnNt ZF90aHVtYm5haWwvJmd0OzwvY29kZT4uIElmIHRoZSBvcHRpb24gdG8gPGEgaHJlZj0iI3Nt ZF90aHVtYl9wcmVmcyI+c3luYyB3aXRoIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ JiM4MjE3O3MgdGh1bWJzPC9hPiBpcyBvbiwgaXQgd2lsbCBhbHNvIGJlY29tZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHN0YW5kYXJkIChidWlsdC1pbikgdGh1 bWJuYWlsIHNpemUgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQ8L2xpPgoJPC91bD4KCgk8cD5P bmNlIHlvdSYjODIxNzt2ZSBjb25maWd1cmVkIHlvdXIgcHJvZmlsZSwgY2xpY2sgU2F2ZSB0 byBzdG9yZSBpdC4gWW91IGNhbiBhbHdheXMgZWRpdCBpdCBhZ2FpbiBieSBjbGlja2luZyBp dHMgbmFtZS4gR28gYWhlYWQgYW5kIGNyZWF0ZSBzb21lIG1vcmUgcHJvZmlsZXMgZm9yIHRo dW1ibmFpbHMgb2YgZGlmZmVyZW50IHNpemVzL3BhcmFtZXRlcnMuIElmIHlvdSB3aXNoIHRv IGRlbGV0ZSBhIHByb2ZpbGUsIGhpdCB0aGUgPGVtPltEZWxldGVdPC9lbT4gYnV0dG9uIGFu ZCBjb25maXJtLiA8c3Ryb25nPkFsbCB0aHVtYm5haWxzIGFzc29jaWF0ZWQgd2l0aCB0aGF0 IHByb2ZpbGUgd2lsbCBiZSBkZWxldGVkPC9zdHJvbmc+LjwvcD4KCgk8cD5BdCB0aGlzIHBv aW50LCBubyB0aHVtYm5haWxzIGhhdmUgYmVlbiBjcmVhdGVkLiBMZXQmIzgyMTc7cyByZWN0 aWZ5IHRoYXQuPC9wPgoKCTxoMyBpZD0ic21kX3RodW1iX2NyZWF0ZSI+Q3JlYXRpbmcgdGh1 bWJuYWlsczwvaDM+CgoJPHA+UGljayBvbmUgb2YgeW91ciBpbWFnZXMgYW5kIGNsaWNrIHRv IGVkaXQgaXQuPC9wPgoKCTxwPkJlbmVhdGggdGhlIG1haW4gcGljdHVyZSB5b3Ugd2lsbCBz ZWUgYW4gYXJlYSBsYWJlbGxlZCA8ZW0+VGh1bWJuYWlsczwvZW0+LiBZb3UgY2FuIHRvZ2ds ZSB0aGlzIHBhbmVsIG9uIGFuZCBvZmYgYnkgY2xpY2tpbmcgdGhlIGhlYWRpbmcuPC9wPgoK CTxwPkluc2lkZSB0aGUgcGFuZWwgaXMgYSBzaW1wbGUgc2VsZWN0IGxpc3QgY29udGFpbmlu ZyBvbmUgZW50cnkgZm9yIGVhY2ggdGh1bWJuYWlsIHByb2ZpbGUgeW91IGhhdmUgY29uZmln dXJlZCwgcGx1cyB0aGUgc3BlY2lhbCBlbnRyeSA8ZW0+QWxsIHNpemVzPC9lbT4uIFlvdSBj YW4gc2VsZWN0IG9uZSBvZiB0aGVzZSBlbnRyaWVzIGFuZCBjbGljayA8ZW0+Q3JlYXRlPC9l bT4gdG8gY3JlYXRlIHRodW1ibmFpbChzKSBpbiB0aGUgc2VsZWN0ZWQgc2l6ZSBvciBoaXQg PGVtPkRlbGV0ZTwvZW0+IHRvIHJlbW92ZSB0aGUgc2VsZWN0ZWQgdGh1bWJuYWlsKHMpLjwv cD4KCgk8cD5PbmNlIGNyZWF0ZWQsIHRoZSB0aHVtYm5haWxzIGFwcGVhciBpbiB0aGUgcGFu ZWw7IHJlbWVtYmVyIHRoZXkgY2FuIGJlIHR1Y2tlZCBhd2F5IGlmIHlvdSBkb24mIzgyMTc7 dCB3YW50IHRvIGxvb2sgYXQgdGhlbS48L3A+CgoJPHA+SWYgeW91IHNlbGVjdCA8ZW0+QWxs IHNpemVzPC9lbT4gYW5kIGhpdCA8ZW0+Q3JlYXRlPC9lbT4sIHlvdSB3aWxsIGdldCBvbmUg dGh1bWJuYWlsIGZvciBlYWNoIGFjdGl2ZSBwcm9maWxlLiBTaW1pbGFybHksIGlmIHlvdSBo aXQgPGVtPkRlbGV0ZTwvZW0+IGFueSB0aHVtYm5haWxzIHN0b3JlZCBhZ2FpbnN0IGFuIGFj dGl2ZSBwcm9maWxlIGZvciB0aGUgY3VycmVudCBpbWFnZSB3aWxsIGJlIHJlbW92ZWQuIEJ5 IHRvZ2dsaW5nIGNlcnRhaW4gdGh1bWJuYWlsIHByb2ZpbGVzIG9uL29mZiB5b3UgY2FuIGNv bnRyb2wgd2hpY2ggb25lcyBhcmUgY3JlYXRlZCBvciBkZWxldGVkLjwvcD4KCgk8cD5CeSBk ZWZhdWx0OjwvcD4KCgk8dWw+CgkJPGxpPndoZW4geW91IHVwbG9hZCBhIG5ldyBpbWFnZSwg dGh1bWJuYWlscyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgYW55IGFjdGl2 ZSBwcm9maWxlczwvbGk+CgkJPGxpPndoZW4geW91IHJlcGxhY2UgYW4gZXhpc3RpbmcgaW1h Z2UsIHRodW1ibmFpbHMgd2lsbCBvbmx5IGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3Ig YWN0aXZlIHByb2ZpbGVzIGlmIHRodW1icyA8ZW0+ZG8gbm90PC9lbT4gYWxyZWFkeSBleGlz dC4gVGhpcyBvcHRpb24gY2FuIGJlIGFsdGVyZWQgd2l0aCB0aGUgPGEgaHJlZj0iI3NtZF90 aHVtYl9wcmVmcyI+cHJlZnM8L2E+PC9saT4KCTwvdWw+CgoJPHA+Tm90ZSB0aGF0IGlmIHlv dSB1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBtdWx0aS1lZGl0 IHRvb2wgdG8gZGVsZXRlIGltYWdlcywgPHN0cm9uZz5hbGw8L3N0cm9uZz4gY29ycmVzcG9u ZGluZyB0aHVtYm5haWxzIGZvciB0aGUgc2VsZWN0ZWQgaW1hZ2VzIChpbmNsdWRpbmcgaW5h Y3RpdmUgb25lcykgd2lsbCBiZSByZW1vdmVkLjwvcD4KCgk8aDMgaWQ9InNtZF90aHVtYl9j dXN0b20iPkN1c3RvbSB0aHVtYm5haWxzPC9oMz4KCgk8cD5JZiB5b3UgcHJlZmVyIHRvIG1h a2UgeW91ciBvd24gdGh1bWJzIGluIGFuIGV4dGVybmFsIHByb2dyYW0sIHlvdSBjYW4gc3Rp bGwgc2V0IHVwIHRoZSBwcm9maWxlcyBhcyBub3JtYWwgYnV0IGluc3RlYWQgb2YgY2xpY2tp bmcgPGVtPkNyZWF0ZTwvZW0+IGluIHRoZSBJbWFnZSBFZGl0IHNjcmVlbiwgeW91IGNhbiBw aWNrIGEgcHJvZmlsZSBzaXplIGZyb20gdGhlIGRyb3Bkb3duIGFuZCB1c2UgdGhlIGZpbGUg cGlja2VyIGZhY2lsaXR5IChCcm93c2UmIzgyMzA7IC8gQ2hvb3NlJiM4MjMwOykgdG8gc2Vs ZWN0IGEgdGh1bWJuYWlsIGZyb20geW91ciBoYXJkIGRyaXZlLiBXaGVuIHlvdSBjbGljayA8 ZW0+VXBsb2FkPC9lbT4gdGhlIGltYWdlIHdpbGwgYmUgaW5zZXJ0ZWQgYWdhaW5zdCB0aGUg c2VsZWN0ZWQgcHJvZmlsZS48L3A+CgoJPHA+QXQgYW55IHRpbWUgeW91IGNhbiBjbGljayBv bmUgb2YgdGhlIHRodW1ibmFpbHMgKG9yIHNlbGVjdCBhIHNpemUgZnJvbSB0aGUgZHJvcGRv d24pIGFuZCBjaG9vc2UgZm9yIGFub3RoZXIgaW1hZ2UgdG8gcmVwbGFjZSB0aGUgZXhpc3Rp bmcgdGh1bWJuYWlsICYjODIxMjsgZXZlbiBvbmVzIHRoYXQgaGF2ZSBiZWVuIGF1dG8tY3Jl YXRlZC4gU29tZSB0aGluZ3MgdG8gbm90ZSBhYm91dCB0aGlzIGZlYXR1cmU6PC9wPgoKCTx1 bD4KCQk8bGk+dGhlIHRodW1ibmFpbCBtdXN0IGJlIG9mIHRoZSBzYW1lIGZpbGUgdHlwZSBh cyB0aGUgb3JpZ2luYWwgaW1hZ2Ugb3IgdGhlIHVwbG9hZCB3aWxsIGJlIGlnbm9yZWQ8L2xp PgoJCTxsaT55b3UgY2FuIGNsaWNrIGEgaGlnaGxpZ2h0ZWQgaW1hZ2UgdG8gZGVzZWxlY3Qg aXQ8L2xpPgoJCTxsaT55b3UgY2Fubm90IEJyb3dzZSBmb3IgYW4gaW1hZ2UgKHRoZSBmaWxl IHVwbG9hZCBib3ggaXMgZ3JleWVkIG91dCkgdW5sZXNzIHlvdSBoYXZlIGNob3NlbiBvbmUg cHJvZmlsZTwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0ic21kX3RodW1iX2JhdGNoIj5CYXRjaCB0 aHVtYm5haWwgY3JlYXRpb248L2gzPgoKCTxwPllvdSBjYW4gYWxzbyBjcmVhdGUgdGh1bWJu YWlscyBlbi1tYXNzZS4gQ2xpY2sgdGhlIDxlbT5Ub29sczwvZW0+IGJ1dHRvbiAobGFiZWxs ZWQgJiM4MjE2OzxlbT5Ub29scyAvIFByZWZzPC9lbT4mIzgyMTc7IGlmIHlvdSBoYXZlIHN1 ZmZpY2llbnQgcmlnaHRzKSBpbiB0aGUgdG9wLXJpZ2h0IGhhbmQgY29ybmVyIG9mIHRoZSBz bWRfdGh1bWJuYWlsIGNvbnRyb2wgcGFuZWwuIEZyb20gdGhlcmUgeW91IHdpbGwgc2VlIGFu IGFyZWEgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSB0aHVtYm5haWxzIGZvcjo8L3A+CgoJ PHVsPgoJCTxsaT5Pbmx5IHRoZSBzZWxlY3RlZCBpbWFnZXMgKHRoZSBjaGVja2JveGVzIG5l eHQgdG8gZWFjaCBpbWFnZSk8L2xpPgoJCTxsaT5BbGwgaW1hZ2VzIG9mIGEgcGFydGljdWxh ciBjYXRlZ29yeTwvbGk+CgkJPGxpPkFsbCBpbWFnZXMgdXBsb2FkZWQgYnkgYSBwYXJ0aWN1 bGFyIHVzZXI8L2xpPgoJCTxsaT5BbGwgaW1hZ2VzPC9saT4KCTwvdWw+CgoJPHA+QWZ0ZXIg c2VsZWN0aW5nIHRoZSBkZXNpcmVkIG9wdGlvbiAoYW5kIGlmIHlvdSBjaG9vc2UgY2F0ZWdv cnkgb3IgYXV0aG9yLCBzZWxlY3Qgb25lIG9mIHRoZSBlbnRyaWVzIGZyb20gdGhlIHNlY29u ZGFyeSBsaXN0IHRoYXQgYXBlYXJzKSwgaGl0IDxlbT5DcmVhdGU8L2VtPi4gT25jZSB5b3Ug Y29uZmlybSB5b3VyIGFjdGlvbiwgdGhlIHBsdWdpbiB3aWxsIGdvIGF3YXkgYW5kIGNyZWF0 ZSB0aHVtYm5haWxzIGZvciBldmVyeSBhY3RpdmUgcHJvZmlsZSBmb3IgYWxsIGltYWdlcyB0 aGF0IG1hdGNoIHlvdXIgY3JpdGVyaWEuIFRoaXMgaXMgYSBxdWljayB3YXkgdG8gZ2VuZXJh dGUgdGh1bWJzIGZvciB5b3VyIGV4aXN0aW5nIGltYWdlcy4gTm90ZSB0aGF0IGlmIHlvdSBj aG9vc2UgdGhlIGZpcnN0IChlbXB0eSkgY2F0ZWdvcnkgZW50cnksIHRoZW4gYWxsIGltYWdl cyB0aGF0IGhhdmUgbm90IGJlZW4gYXNzaWduZWQgYSBjYXRlZ29yeSBhcmUgbWFuaXB1bGF0 ZWQuPC9wPgoKCTxwPkJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiB0aGlzIHRvb2wgJiM4MjEy OyBlc3BlY2lhbGx5IHdpdGggbGFyZ2UgaW1hZ2UgcG9vbHMgJiM4MjEyOyB0aGUgcHJvY2Vz cyBpcyBkb25lIGFzIGEgYmFja2dyb3VuZCB0YXNrIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+ QUpBWDwvc3Bhbj4uIEFmdGVyIGNsaWNraW5nIHRoZSA8ZW0+Q3JlYXRlPC9lbT4gYnV0dG9u IChhbmQgY29uZmlybWluZyB5b3UgYXJlIHN1cmUpIGEgY291bnRlciB3aWxsIGFwcGVhciBp biB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBwcmVmcyBwYW5lbCBzaG93aW5nIGhvdyBtYW55IGlt YWdlcyBpdCBoYXMgcHJvY2Vzc2VkIG91dCBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGltYWdl cyBpbiB0aGUgc2V0LiBXaGVuIGl0JiM4MjE3O3MgZG9uZSwgaWYgeW91IHRoZW4gcmVmcmVz aCB5b3VyIEltYWdlcyB0YWIgKGUuZy4gY2xpY2sgdG8gdGhlIDxlbT5Qcm9maWxlczwvZW0+ IHBhbmUpIHlvdSB3aWxsIHNlZSB5b3VyIGNob3NlbiBkZWZhdWx0IHRodW1ibmFpbHMgaW4g dGhlIGxpc3QgJiM4MjEyOyBhc3N1bWluZyB5b3UmIzgyMTc7dmUgc2V0IG9uZSBhcyBkZWZh dWx0LjwvcD4KCgk8aDMgaWQ9InNtZF90aHVtYl9wcmVmcyI+UHJlZmVyZW5jZXM8L2gzPgoK CTxwPklmIHlvdSBoYXZlIHN1ZmZpY2llbnQgcHJpdmlsZWdlcywgaW4gdGhlIGxvd2VyIHBv cnRpb24gb2YgdGhlIDxlbT5Ub29sczwvZW0+IHBhbmVsIGFyZSBzb21lIG9wdGlvbnMgdGhh dCBnb3Zlcm4gaG93IHRodW1ibmFpbHMgYXJlIGNyZWF0ZWQgZm9yIGFsbCB1c2Vycy4gVGhl cmUgaXMgbm8gJiM4MjE2O1NhdmUmIzgyMTc7IGFjdGlvbiBoZXJlOiB0aGUgY2hlY2ttYXJr cyBhcmUgc3RvcmVkIGluIHJlYWwtdGltZSBhbmQgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJl bnQgc3RhdGUuPC9wPgoKCTxoND5LZWVwIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IHRodW1ibmFpbHMgaW4gc3luYyB3aXRoIGRlZmF1bHQgcHJvZmlsZTwvaDQ+CgoJPHA+KFRo aXMgb3B0aW9uIG9ubHkgYXBwZWFycyBpZiB5b3UgaGF2ZSBzZXQgYSBwcm9maWxlIGFzIGRl ZmF1bHQpPC9wPgoKCTxwPk9yZGluYXJpbHksIHNtZF90aHVtYm5haWwgd29ya3MgaW5kZXBl bmRlbnRseSBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHRodW1i cy4gSWYgeW91IGRpc2FibGUgdGhlIHBsdWdpbiB5b3UmIzgyMTc7bGwgc2VlIHRoYXQgZXZl cnl0aGluZyBnb2VzIGJhY2sgdG8gaG93IGl0IHdhcyBiZWZvcmUgeW91IGluc3RhbGxlZCBp dC4gVGhpcyBpcyBncmVhdCBiZWNhdXNlIHlvdXIgaGFyZC1ncmFmdCBpc24mIzgyMTc7dCBs b3N0IGlmIHlvdSBoYXZlIHVwbG9hZGVkIHlvdXIgb3duIHRodW1icy48L3A+CgoJPHA+QnV0 IGlmIHlvdSBzdGFydCBjcmVhdGluZyB0aHVtYnMgd2l0aCB0aGUgcGx1Z2luIHlvdSB3aWxs IG5vdGljZSB0aGF0IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgYnVp bHQgaW4gdGFncyBzdWNoIGFzIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZV9pbWFnZSB0aHVtYm5h aWw9JnF1b3Q7MSZxdW90OyAvJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDt0eHA6dGh1bWJu YWlsIC8mZ3Q7PC9jb2RlPiB3b24mIzgyMTc7dCB3b3JrIGZvciBuZXdlciB0aHVtYm5haWxz LiBUaGlzIG1pZ2h0IGJlIGNvbmZ1c2luZyBzbywgaWYgeW91IHByZWZlciwgeW91IGNhbiBv cHQgdG8gaGF2ZSBzbWRfdGh1bWJuYWlsIHVwZGF0ZSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IHRodW1ibmFpbHMgYXQgdGhlIHNhbWUgdGltZS48L3A+CgoJPHA+Qnkg dGlja2luZyBlaXRoZXIgb2YgdGhlIGNoZWNrYm94ZXMsIHRoZSBwbHVnaW4gd2lsbCB0cmFj ayBhbnkgY2hhbmdlcyA8c3Ryb25nPnRvIHRoZSBkZWZhdWx0IHByb2ZpbGU8L3N0cm9uZz4g YW5kIG1pbWljIHRoZW0gd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIx NztzIHRodW1ibmFpbHMuIFRoaXMgaGFzIGEgZmV3IGVmZmVjdHMgd29ydGggaGlnaGxpZ2h0 aW5nLjwvcD4KCgk8cD5XaGVuIHRoZSA8ZW0+Q3JlYXRpb248L2VtPiBjaGVja2JveCBpcyB0 aWNrZWQ6PC9wPgoKCTxvbD4KCQk8bGk+aWYgeW91IGJhdGNoIGNyZWF0ZSB0aHVtYnMsIHVw bG9hZCBhIG5ldyBpbWFnZSwgb3IgcmVwbGFjZSBhbiBleGlzdGluZyBpbWFnZSwgYSBuZXcg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGh1bWJuYWlsIHdpbGwgYmUgY3JlYXRl ZCBhdCB0aGUgZGVmYXVsdCBzaXplLiBBbnkgZXhpc3RpbmcgdGh1bWJzIHdpbGwgYmUgb3Zl cndyaXR0ZW48L2xpPgoJCTxsaT5pZiB5b3UgY2hhbmdlIGRlZmF1bHQgcHJvZmlsZSwgYW55 IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRodW1ibmFpbHMgdGhhdCBoYXZlIGJl ZW4gY3JlYXRlZCB3aWxsIHJlbWFpbiBhdCB0aGUgcHJldmlvdXMgc2l6ZS4gT25seSB3aGVu IHlvdSBzdGFydCBjcmVhdGluZywgdXBsb2FkaW5nIG9yIHJlcGxhY2luZyBpbWFnZXMgd2ls bCB0aGUgbmV3IHRodW1ibmFpbCBzaXplcyBiZSBjcmVhdGVkPC9saT4KCTwvb2w+CgoJPHA+ V2hlbiB0aGUgPGVtPkRlbGV0aW9uPC9lbT4gY2hlY2tib3ggaXMgdGlja2VkOjwvcD4KCgk8 b2w+CgkJPGxpPmlmIHlvdSBkZWxldGUgYSBzaW5nbGUgdGh1bWIgdGhhdCBjb3JyZXNwb25k cyB0byB0aGUgZGVmYXVsdCBwcm9maWxlLCBib3RoIHRoZSBwcm9maWxlIHRodW1iIGFuZCA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIHRodW1iIHdpbGwgYmUgZGVs ZXRlZDwvbGk+CgkJPGxpPmlmIHlvdSBkZWxldGUgYW4gZW50aXJlIHByb2ZpbGUsIGFsbCBp dHMgdGh1bWJuYWlscyA8c3Ryb25nPmFuZCBhbGwgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4mIzgyMTc7cyB0aHVtYnM8L3N0cm9uZz4gd2lsbCBiZSByZW1vdmVkPC9saT4KCTwv b2w+CgoJPHA+RnVydGhlcjo8L3A+CgoJPG9sPgoJCTxsaT5pZiB5b3UgaGF2ZSBubyBkZWZh dWx0IHByb2ZpbGUsIHRoZSBjaGVja2JveGVzIGRpc2FwcGVhciBhbmQgdGhlIHNldHRpbmdz IGhhdmUgbm8gZWZmZWN0LiBDaG9vc2UgYSBkZWZhdWx0IHByb2ZpbGUgdG8gcmVpbnN0YXRl IHRoZSBiZWhhdmlvdXI8L2xpPgoJCTxsaT5pZiB5b3UgZGVhY3RpdmF0ZSB0aGUgZGVmYXVs dCBwcm9maWxlIHRoZSBjaGVja2JveGVzIGhhdmUgbm8gZWZmZWN0IDxzdHJvbmc+dW5sZXNz PC9zdHJvbmc+IHlvdSBkZWxldGUgdGhlIHByb2ZpbGUgKHNpbmNlIHlvdSYjODIxNztyZSBk ZWxldGluZyBpdCwgaXRzIHN0YXR1cyBpcyAmIzgyMTY7bG9zdCYjODIxNzsgYW5kIHRoZXJl Zm9yZSB0aGUgY2hlY2tib3hlcyBmdW5jdGlvbiBhcyBub3JtYWwpLiBJZiB0aGVyZSYjODIx NztzIGFueSBkb3VidCwgdW5jaGVjayB0aGUgPGVtPkRlbGV0aW9uPC9lbT4gY2hlY2tib3gg Zmlyc3QhPC9saT4KCTwvb2w+CgoJPGg0PlJlY3JlYXRlIHRodW1ibmFpbHMgb24gcmUtdXBs b2FkIG9mIG1haW4gaW1hZ2U8L2g0PgoKCTxwPldoZW4gdGhpcyBjaGVja2JveCBpcyBjbGVh cmVkIGFuZCB5b3UgPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+IGEgbWFpbiBpbWFnZSAoZnJv bSB0aGUgSW1hZ2UgRWRpdCBzY3JlZW4pIGFueSB0aHVtYm5haWxzIHRoYXQgaGF2ZSBhbHJl YWR5IGJlZW4gYXNzaWduZWQgdG8gdGhlIGltYWdlIGFyZSBsZWZ0IGFzIHRoZXkgYXJlICYj ODIxMjsgb25seSBtaXNzaW5nIHRodW1ibmFpbHMgd2lsbCBiZSBjcmVhdGVkIGZyb20gdGhl IG1haW4gaW1hZ2UuIENvbnZlcnNlbHksIGlmIHlvdSBzZXQgdGhpcyBjaGVja2JveCwgd2hl biB5b3UgdXBsb2FkIHRoZSByZXBsYWNlbWVudCBpbWFnZSA8c3Ryb25nPjxzcGFuIGNsYXNz PSJjYXBzIj5BTEw8L3NwYW4+IHNtZF90aHVtYm5haWxzIGZvciBhY3RpdmUgcHJvZmlsZXMg d2lsbCBiZSAocmUpY3JlYXRlZCBmcm9tIHRoZSBtYWluIGltYWdlPC9zdHJvbmc+LjwvcD4K Cgk8cD5Ob3RlIG9uZSBpbXBvcnRhbnQgZXhjZXB0aW9uOiA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiB0aHVtYm5haWxzIGFyZSA8c3Ryb25nPjxzcGFuIGNsYXNzPSJjYXBzIj5O T1Q8L3NwYW4+PC9zdHJvbmc+IGNvdmVyZWQgYnkgdGhpcyBvcHRpb24gJiM4MjEyOyB0aGV5 IGFyZSBnb3Zlcm5lZCBieSB0aGUgPGVtPktlZXAgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gdGh1bWJzIGluIHN5bmM8L2VtPiYjODIxNztzICYjODIxNjtDcmVhdGlvbiYjODIx NzsgY2hlY2tib3guIFRodXMsIGlmIHlvdSB1cGxvYWQgYSByZXBsYWNlbWVudCBpbWFnZSBh bmQgdGhlICYjODIxNjtDcmVhdGlvbiYjODIxNzsgY2hlY2tib3ggaXMgb24sIHlvdSB3aWxs IHJlcGxhY2UgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0aHVtYiBy ZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZSA8ZW0+UmVjcmVhdGUgdGh1bWJuYWls cyYjODIzMDs8L2VtPiBvcHRpb24uPC9wPgoKCTxoMiBpZD0ic21kX3RodW1iX3VzYWdlIj5V c2FnZSAmIzgyMTI7IHB1YmxpYyBzaWRlPC9oMj4KCgk8cD5Ud28gbmV3IHRhZ3MgYXJlIGF2 YWlsYWJsZSB0byBkaXNwbGF5IHlvdXIgdGh1bWJuYWlscy48L3A+CgoJPGgzIGlkPSJzbWRf dGh1bWJuYWlsIj48Y29kZT4mbHQ7dHhwOnNtZF90aHVtYm5haWwvJmd0OzwvY29kZT48L2gz PgoKCTxwPkEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciB0aGUgYnVpbHQgaW4gPGEgaHJlZj0i aHR0cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT10aHVtYm5haWwi PnR4cDp0aHVtYm5haWw8L2E+IHRhZyB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgZnVuY3Rpb25h bGl0eSBhbmQgYXR0cmlidXRlcyBhcGFydCBmcm9tIHRoZXNlIGV4Y2VwdGlvbnM6PC9wPgoK CTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdXNlIHRoaXMg YXR0cmlidXRlIHRvIGRpc3BsYXkgdGh1bWJuYWlscyBvZiB0aGUgZ2l2ZW4gcHJvZmlsZSBu YW1lLiBlLmcuIDxjb2RlPnR5cGU9JnF1b3Q7bGFyZ2UmcXVvdDs8L2NvZGU+LiBJZiB5b3Ug ZG8gbm90IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0IHByb2ZpbGUgd2ls bCBiZSB1c2VkLiBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IHByb2ZpbGUgeW91JiM4MjE3O2xs IHNlZSB3YXJuaW5nIG1lc3NhZ2VzPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNs YXNzPC9zcGFuPiA6IGlmIG9taXR0ZWQsIHRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHdpbGwg YmUgdXNlZCBhcyBhIGNsYXNzIG5hbWUgZm9yIHRoZSBpbWcgdGFnLiBJZiB5b3Ugc3BlY2lm eSBhIHdyYXB0YWcgYW5kIG9taXQgdGhlIGNsYXNzLCB0aGUgcHJvZmlsZSBuYW1lIHdpbGwg YmUgdXNlZCBhcyBhIGNsYXNzIG9uIGJvdGggdGhlIGNvbnRhaW5lciBhbmQgdGhlIGltZyB0 YWc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+YWxpZ248L3NwYW4+IDogdGhpcyBh dHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5hZGRfc3RhbXA8L3NwYW4+IDogYWRkcyB0aGUgaW1hZ2UgZmlsZSBtb2RpZmljYXRpb24g dGltZSB0byB0aGUgZW5kIG9mIHRoZSB0aHVtYm5haWwmIzgyMTc7cyA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPi4gVXNlIDxjb2RlPmFkZF9zdGFtcD0mcXVvdDsxJnF1b3Q7PC9j b2RlPiB0byBzd2l0Y2ggdGhpcyBmZWF0dXJlIG9uLiBUaGlzIGhlbHBzIHByZXZlbnQgc3Rh bGUgaW1hZ2VzLCBidXQgbWF5IHByZXZlbnQgYnJvd3NlcnMgZnJvbSBjYWNoZWluZyB0aGUg dGh1bWJzIHByb3Blcmx5IHRodXMgaW5jcmVhc2luZyBiYW5kd2lkdGggdXNhZ2UuIERlZmF1 bHQ6IDA8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9yY2Vfc2l6ZTwvc3Bhbj4g OiB1c3VhbGx5IHdoZW4geW91IHNldCBvbmUgb3Igb3RoZXIgd2lkdGgvaGVpZ2h0IHRvIDAg aW4gYSBwcm9maWxlLCB0aGUgYnJvd3NlciBzY2FsZXMgdGhlIG1pc3NpbmcgZGltZW5zaW9u IGF1dG9tYXRpY2FsbHkuIEl0IGRvZXMgdGhpcyBieSBvbWl0dGluZyB0aGUgPGNvZGU+d2lk dGg9PC9jb2RlPiBvciA8Y29kZT5oZWlnaHQ9PC9jb2RlPiBhdHRyaWJ1dGUgaW4gdGhlIDxj b2RlPiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcuIFRoaXMgbWF5IGNhdXNlIHZpc3VhbCBhcnRl ZmFjdHMgYXMgdGhlIHBhZ2UgaXMgcmVuZGVyZWQgYW5kIHRoZSBicm93c2VyIGNhbGN1bGF0 ZXMgdGhlIHNpemVzLiBJZiB5b3Ugd2lzaCB0aGUgcGx1Z2luIHRvIGFkZCB0aGUgYWN0dWFs IGRpbWVuc2lvbiB0byB0aGUgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IHRhZyAodGhlIHNp emUgYXQgdGhlIHRpbWUgdGhlIHRodW1ibmFpbCB3YXMgY3JlYXRlZCksIHRlbGwgdGhlIHBs dWdpbiB3aXRoIHRoaXMgYXR0cmlidXRlLiBDaG9vc2Ugb25lIG9yIGJvdGggb2YgPGNvZGU+ d2lkdGg8L2NvZGU+IG9yIDxjb2RlPmhlaWdodDwvY29kZT4uIENvbW1hLXNlcGFyYXRlIGFz IHJlcXVpcmVkLiBEZWZhdWx0OiB1bnNldDwvbGk+Cgk8L3VsPgoKCTxwPlRoZSB0YWcgd29y a3MgaW5zaWRlIDxjb2RlPiZsdDt0eHA6aW1hZ2VfbGlzdCZndDs8L2NvZGU+IG9yIGNhbiBi ZSB1c2VkIHN0YW5kYWxvbmUgYnkgc3BlY2lmeWluZyB0aGUgPGNvZGU+aWQ8L2NvZGU+IG9y IDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZS48L3A+CgoJPGgzIGlkPSJzbWRfaWZfdGh1 bWJuYWlsIj48Y29kZT4mbHQ7dHhwOnNtZF9pZl90aHVtYm5haWwvJmd0OzwvY29kZT48L2gz PgoKCTxwPkEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciB0aGUgYnVpbHQgaW4gPGNvZGU+Jmx0 O3R4cDppZl90aHVtYm5haWwgLyZndDs8L2NvZGU+IHRhZyB3aXRoIGV4YWN0bHkgdGhlIHNh bWUgZnVuY3Rpb25hbGl0eS4gSXQgaGFzIG9uZSBhdHRyaWJ1dGU6PC9wPgoKCTx1bD4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDogdXNlIHRoaXMgYXR0cmlidXRl IHRvIGNoZWNrIGZvciB0aHVtYm5haWxzIG9mIHRoZSBnaXZlbiBwcm9maWxlIG5hbWUuIGUu Zy4gPGNvZGU+dHlwZT0mcXVvdDtNZWRpdW0mcXVvdDs8L2NvZGU+LiBJZiB5b3UgZG8gbm90 IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0IHByb2ZpbGUgd2lsbCBiZSB0 ZXN0ZWQuIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgcHJvZmlsZSB0aGUgdGFnIHdpbGwgYWx3 YXlzIHJlbmRlciB0aGUgPGNvZGU+Jmx0O3R4cDplbHNlIC8mZ3Q7PC9jb2RlPiBwb3J0aW9u PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRfdGh1bWJfaG93X2l0X3dvcmtzIj5Ib3cgaXQg d29ya3M8L2gyPgoKCTxwPkZvciByZWZlcmVuY2UsIHdoZW4geW91IGNyZWF0ZSBhIHByb2Zp bGUgYSBkaXJlY3RvcnkgaXMgY3JlYXRlZCB3aXRoIHRoYXQgbmFtZSBpbnNpZGUgeW91ciA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA8Y29kZT5pbWFnZXM8L2NvZGU+IGZvbGRl ci4gSW5zaWRlIHRoaXMgZm9sZGVyIHlvdSB3aWxsIGZpbmQgaW1hZ2VzIG9mIHRoZSBmb3Jt YXQgPGNvZGU+aWQuZXh0PC9jb2RlPjogd2hlcmUgPGNvZGU+aWQ8L2NvZGU+IGFuZCA8Y29k ZT5leHQ8L2NvZGU+IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIGltYWdlIElEcyBpbiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gZGF0YWJhc2UuIFRoYXQmIzgyMTc7cyBw cmV0dHkgbXVjaCBpdC48L3A+CgoJPHA+WW91IGNhbiBkZWxldGUgdGh1bWJuYWlsIGZpbGVz IG1hbnVhbGx5IGZyb20gYW55IG9mIHRoZXNlIGRpcmVjdG9yaWVzIGFuZCB0aGUgcGx1Z2lu IHdpbGwgZmlndXJlIGV2ZXJ5dGhpbmcgb3V0LiBCdXQgaXQmIzgyMTc7cyBwcm9iYWJseSBu b3QgYWR2aXNhYmxlIHRvIGRlbGV0ZSB0aGUgZGlyZWN0b3JpZXMgdGhlbXNlbHZlcyAmIzgy MTI7IHVzZSB0aGUgPGVtPltEZWxldGVdPC9lbT4gYnV0dG9ucyBpbiB0aGUgY29udHJvbCBw YW5lbCBmb3IgdGhhdC48L3A+CgoJPGgyIGlkPSJzbWRfdGh1bWJfY2hhbmdlbG9nIj5DaGFu Z2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MDYgQXVnIDEwIHwgMC4xMGJldGEgfCBJbml0aWFs IGJldGEgcmVsZWFzZTwvbGk+CgkJPGxpPjA0IE9jdCAxMCB8IDAuMTAgfCBPZmZpY2lhbCBw dWJsaWMgcmVsZWFzZTwvbGk+CgkJPGxpPjA5IE5vdiAxMCB8IDAuMTEgfCBBZGRlZCA8Y29k ZT5mb3JjZV9zaXplPC9jb2RlPiBhbmQgPGNvZGU+YWRkX3N0YW1wPC9jb2RlPiAoYm90aCB0 aGFua3MgemVybykgOyByZW1vdmVkIHVubmVjZXNzYXJ5IERCIGNhbGw8L2xpPgoJCTxsaT4x MCBOb3YgMTAgfCAwLjEyIHwgQWRkZWQgYWJpbGl0eSB0byBzeW5jIGRlZmF1bHQgcHJvZmls ZSB0aHVtYnMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiB0aHVtYm5haWxzICh0aGFua3MgemVybyk8L2xpPgoJCTxsaT4xMCBOb3YgMTAg fCAwLjEzIHwgQWRkZWQgY29uZmlybWF0aW9uIG9uIDxlbT5DcmVhdGUgYWxsPC9lbT4gOyBy ZWxhYmVsbGVkIHVwbG9hZCBib3ggKHRoYW5rIHVsaSkgOyB0YW1lZCBzdHlsZXMgOyBzaWxl bmNlZCBjaG1vZCB3YXJuaW5ncyAodGhhbmtzIHplcm8pPC9saT4KCQk8bGk+MjEgTm92IDEw IHwgMC4xNCB8IFBlcm1pdHRlZCB0aHVtYnMgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlIG9yaWdp bmFsIGltYWdlcyAodGhhbmtzIG1hbmlxdWkpIDsgZml4ZWQgY2FsbGJhY2tzIGZvciBpbWFn ZSB1cGxvYWRpbmcgYW5kIGRlbGV0aW5nPC9saT4KCQk8bGk+MjYgSmFuIDExIHwgMC4yMCB8 IFRvb2xzIC8gcHJlZnMgc2VwYXJhdGVkIGZyb20gcHJvZmlsZSBsaXN0IDsgcGVybWl0dGVk IGJhdGNoIGNyZWF0aW9uIHZpYSAxKSBzZWxlY3RlZCBpbWFnZXMgMikgY2F0ZWdvcnkgMykg YXV0aG9yICh0aGFua3MganBkdXBvbnQpIDsgYWRkZWQgc21kX3RodW1iX2F1dG9fcmVwbGFj ZSBvcHRpb24gYW5kIGFsdGVyZWQgZGVmYXVsdCBiZWhhdmlvdXIgKHRoYW5rcyBtYW5pcXVp KSA7IGZpeGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRodW1ibmFpbCBjcmVh dGlvbiBvbiB0aHVtYm5haWwgcmVwbGFjZSBhbmQgbWFkZSBwcmVmcyBnbG9iYWwgJiM4MjEy OyBhbmQgb25seSBhdmFpbGFibGUgdG8gc2l0ZSBhZG1pbnMgKGFsbCB0aGFua3MganN0dWJi cykgOyBmaXhlZCBOZXcgUHJvZmlsZSBidXR0b24gd3JhcHBpbmcgKHRoYW5rcyBqcGR1cG9u dCk8L2xpPgoJCTxsaT4xMiBNYXkgMTEgfCAwLjIxIHwgQWRkZWQgPGNvZGU+c21kX3RodW1i X2dldF9wcm9maWxlcygpPC9jb2RlPiBmb3Igb3RoZXIgcGx1Z2lucyB0byBmaW5kIHdoaWNo IHByb2ZpbGVzIGFyZSBhdmFpbGFibGU8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBC RUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9o ZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6 Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFj ZTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAg Y29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7 IH0KI3NtZF9oZWxwIGgxIHsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJn aW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90 dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2Vv cmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJp YWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7 IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IH0KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9s ZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46 IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5t IHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNl ZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6 OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyB9CiNzbWRfaGVs cCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41 ZW0gMDsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRf aGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1 cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7 IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1 IjtzOjMyOiJhM2VlOTAyNTRlMGY4YjRjNDY4ZjVmZDRhZTAzMTMyNSI7fQ==