# Name: smd_thumbnail v0.22 # 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 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjIyIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo0OToiTXVsdGlwbGUgaW1hZ2UgdGh1bWJuYWlscyBvZiBhcmJpdHJhcnkgZGltZW5zaW9u cyI7czo0OiJjb2RlIjtzOjQ4MDM3OiIvKioNCiAqIHNtZF90aHVtYm5haWwNCiAqDQogKiBB IFRleHRwYXR0ZXJuIENNUyBwbHVnaW4gZm9yIG1hbmFnaW5nIG11bHRpcGxlIGltYWdlIHRo dW1ibmFpbHM6DQogKiAgLT4gQ3JlYXRlIHVubGltaXRlZCB0aHVtYm5haWwgcHJvZmlsZXMg b2YgZGlmZmVyaW5nIHNpemVzIGZvciB2YXJpb3VzIHNpdGUgdXNlcw0KICogIC0+IFRodW1i bmFpbCBmaWxlcyBhcmUgY3JlYXRlZCBpbiB5b3VyIGltYWdlIGRpcmVjdG9yeSAtLSBubyBy ZWFsdGltZSBzY2FsaW5nDQogKiAgLT4gQmF0Y2ggY3JlYXRlIC8gYWx0ZXIgdGh1bWJuYWls cw0KICogIC0+IENob29zZSB0byBzeW5jIHRoZSB0aHVtYm5haWxzIHdpdGggVHhwJ3Mgb3du IHRodW1icw0KICoNCiAqIEBhdXRob3IgU3RlZiBEYXdzb24NCiAqIEBsaW5rICAgaHR0cDov L3N0ZWZkYXdzb24uY29tLw0KICovaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0K CWdsb2JhbCAkc21kX3RodW1iX2V2ZW50LCAkc21kX3RodW1iX3N0eWxlcywgJHNtZF90aHVt Yl9wcmV2czsNCg0KCSRzbWRfdGh1bWJfZXZlbnQgPSAnc21kX3RodW1ibmFpbCc7DQoJJHNt ZF90aHVtYl9wcml2cyA9ICcxLDIsMyc7IC8vIFBsdWdpbiBwcml2cw0KCSRzbWRfdGh1bWJf cHJldnMgPSBhcnJheSgnMScpOyAvLyBQcml2cyBmb3IgcHJlZnMNCg0KCSRzbWRfdGh1bWJf c3R5bGVzID0gYXJyYXkoDQoJCSdlZGl0JyA9Pg0KICAgICAgICAgJy5zbWRfc2VsZWN0ZWQg eyBib3JkZXI6MXB4IHNvbGlkIHJlZDsgYmFja2dyb3VuZDpyZWQ7IH0NCiAgICAgICAgICAj c21kX3RodW1icyBpbWcgeyBwYWRkaW5nOjJweDsgbWFyZ2luOjFweDsgYm9yZGVyOjFweCBz b2xpZCBibGFjazsgfQ0KICAgICAgICAgIC50aHVtYm5haWwtYWx0ZXIgeyBkaXNwbGF5Om5v bmU7IH0nLA0KCQkncHJvZmlsZScgPT4NCiAgICAgICAgICcuc21kX2hpZGRlbiB7IGRpc3Bs YXk6bm9uZTsgfQ0KICAgICAgICAgICNzbWRfdGh1bWJfcHJvZmlsZXMgeyB3aWR0aDo3MDBw eDsgbWFyZ2luOjAgYXV0byAxOHB4OyB9DQogICAgICAgICAgI3NtZF90aHVtYl9iYXRjaCB7 IGZsb2F0OnJpZ2h0OyB9DQogICAgICAgICAgLnNtZF9pbmFjdGl2ZSB7IG9wYWNpdHk6LjM7 IH0NCiAgICAgICAgICAuc21kX3RodW1iX2hlYWRpbmdfYWN0aXZlIHsgY3Vyc29yOnBvaW50 ZXI7IH0NCiAgICAgICAgICAjc21kX3RodW1iX3Byb2ZpbGVfZm9ybSB7IHBhZGRpbmctdG9w OjhweDsgfQ0KICAgICAgICAgIGZvcm0jc21kX3RodW1iX3Byb2ZpbGVfZm9ybSB0ZCB7IGJv cmRlcjogMDsgfQ0KICAgICAgICAgIC5wcmVmLWxhYmVsIHsgdGV4dC1hbGlnbjogcmlnaHQh aW1wb3J0YW50OyB9DQogICAgICAgICAgLnNtZF90aHVtYl9idG4geyB0ZXh0LWFsaWduOnJp Z2h0OyBwYWRkaW5nOjNweDsgfScsDQoJKTsNCg0KCWFkZF9wcml2cygkc21kX3RodW1iX2V2 ZW50LCAkc21kX3RodW1iX3ByaXZzKTsNCglhZGRfcHJpdnMoJ3NtZF90aHVtYl9wcm9maWxl cycsICRzbWRfdGh1bWJfcHJpdnMpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJf d2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLicuJHNtZF90aHVtYl9ldmVudCk7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9wcm9maWxlcycsICdpbWFnZV91aScsICdleHRl bmRfY29udHJvbHMnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1icycsICdpbWFn ZV91aScsICd0aHVtYm5haWwnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX2Vk aXQnLCAnaW1hZ2VfdWknLCAndGh1bWJuYWlsX2VkaXQnKTsNCglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX3RodW1iX2NyZWF0ZScsICdpbWFnZV91aScsICd0aHVtYm5haWxfY3JlYXRlJyk7 DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90aHVtYl9nZW5lcmF0ZScsICdpbWFnZV91cGxv YWRlZCcsICdpbWFnZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfZGVsZXRl JywgJ2ltYWdlX2RlbGV0ZWQnLCAnaW1hZ2UnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21k X3RodW1iX2NyZWF0ZV9vbmUnLCAnaW1hZ2UnLCAnc21kX3RodW1iX2NyZWF0ZV9vbmUnKTsN CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RodW1iX3N3aXRjaF9hY3RpdmUnLCAnaW1hZ2Un LCAnc21kX3RodW1iX3N3aXRjaF9hY3RpdmUnKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21k X3RodW1iX3N3aXRjaF9wcmVmJywgJ2ltYWdlJywgJ3NtZF90aHVtYl9zd2l0Y2hfcHJlZicp Ow0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGh1bWJfaW5zZXJ0JywgJ2ltYWdlJywgJ3Nt ZF90aHVtYm5haWxfaW5zZXJ0JywgMSk7DQp9IGVsc2Ugew0KCXNtZF90aHVtYl9zZXRfaW1w YXRoKCk7DQp9DQppZiAoIWRlZmluZWQoJ1NNRF9USFVNQicpKSB7DQoJZGVmaW5lKCJTTURf VEhVTUIiLCAnc21kX3RodW1ibmFpbCcpOw0KfQ0KaWYgKCFkZWZpbmVkKCdTTURfVEhVTUJf QUNUSVZFJykpIHsNCglkZWZpbmUoIlNNRF9USFVNQl9BQ1RJVkUiLCAxKTsNCn0NCmlmICgh ZGVmaW5lZCgnU01EX1RIVU1CX0NST1AnKSkgew0KCWRlZmluZSgiU01EX1RIVU1CX0NST1Ai LCAyKTsNCn0NCmlmICghZGVmaW5lZCgnU01EX1RIVU1CX1NIQVJQJykpIHsNCglkZWZpbmUo IlNNRF9USFVNQl9TSEFSUCIsIDQpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf dGh1bWJfd2VsY29tZSgkZXZ0LCAkc3RwKSB7DQoJc3dpdGNoICgkc3RwKSB7DQoJCWNhc2Ug J2luc3RhbGxlZCc6DQoJCQlzbWRfdGh1bWJfdGFibGVfaW5zdGFsbCgpOw0KCQkJLy8gUmVt b3ZlIHBlci11c2VyIHByZWZzIG9uIHVwZ3JhZGUgZnJvbSB2MC4xeCB0byB2MC4yMA0KCQkJ c2FmZV9kZWxldGUgKCd0eHBfcHJlZnMnLCAibmFtZSBJTiAoJ3NtZF90aHVtYl90eHBfY3Jl YXRlJywgJ3NtZF90aHVtYl90eHBfZGVsZXRlJywgJ3NtZF90aHVtYl9hdXRvX3JlcGxhY2Un KSBBTkQgdXNlcl9uYW1lICE9ICcnIik7DQoJCQlicmVhazsNCgkJY2FzZSAnZGVsZXRlZCc6 DQoJCQlzbWRfdGh1bWJfdGFibGVfcmVtb3ZlKCk7DQoJCQlicmVhazsNCgl9DQoJcmV0dXJu Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERpc3BsYXkgdGhlIGRl c2lnbmF0ZWQgZGVmYXVsdCB0aHVtYm5haWwgb24gdGhlIGxpc3QgcGFnZQ0KZnVuY3Rpb24g c21kX3RodW1icygkZXZ0LCAkc3RwLCAkZGZsdCwgJGN1cnJpbWcpIHsNCglleHRyYWN0KGdw c2EoYXJyYXkoJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9k JykpKTsNCg0KCWlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3QoKSkgew0KCQkkZGVmYXVsdCA9 IGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycsIDEpOw0KCQlpZiAo JGRlZmF1bHQpIHsNCgkJCSRyb3cgPSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwgIm5hbWU9 JyIuc2FuaXRpemVGb3JVcmwoJGRlZmF1bHQpLiInIik7DQoJCQlpZiAoJHJvdykgew0KCQkJ CSRlZGl0X3VybCA9ICc/ZXZlbnQ9aW1hZ2UnLmEuJ3N0ZXA9aW1hZ2VfZWRpdCcuYS4naWQ9 Jy4kY3VycmltZ1snaWQnXS5hLidzb3J0PScuJHNvcnQuDQoJCQkJCQlhLidkaXI9Jy4kZGly LmEuJ3BhZ2U9Jy4kcGFnZS5hLidzZWFyY2hfbWV0aG9kPScuJHNlYXJjaF9tZXRob2QuYS4n Y3JpdD0nLiRjcml0Ow0KCQkJCSRvdXQgPSBzbWRfdGh1bWJfaW1nKCRyb3csICRjdXJyaW1n KTsNCgkJCQlyZXR1cm4gKCRvdXQpID8gaHJlZigkb3V0LCAkZWRpdF91cmwpIDogZ1R4dCgn bm8nKTsNCgkJCX0gZWxzZSB7DQoJCQkJcmV0dXJuIGdUeHQoJ25vJyk7DQoJCQl9DQoJCX0g ZWxzZSB7DQoJCQlyZXR1cm4gZ1R4dCgnbm8nKTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEb24ndCB3YW50IHRoZSAnY3JlYXRlJyBjb250cm9s cyBhcyB0aGV5J3JlIGhhbmRsZWQgaW4gdGhlIGVkaXQgcG9ydGlvbiBvZiB0aGUgc2NyZWVu DQpmdW5jdGlvbiBzbWRfdGh1bWJfY3JlYXRlKCRldnQsICRzdHAsICRkZmx0LCAkY3Vycmlt Zykgew0KCXJldHVybiAnICc7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gV2l0aCBhIGxvdCBvZiBpbWFnZXMgaW4gdGhlIGRhdGFiYXNlLCBkb2luZyBpdCBhbGwg aW4gb25lIGhpdCB3b3VsZCB0aW1lIG91dC4NCi8vIFNvIGl0J3MgZG9uZSB2aWEgYWpheDsg b25lIHJlcXVlc3QgcGVyIGltYWdlDQpmdW5jdGlvbiBzbWRfdGh1bWJfY3JlYXRlX2dyb3Vw KCR0eXBlLCAkbHN0PScnKSB7DQoJc3dpdGNoICgkdHlwZSkgew0KCQljYXNlICdhbGwnOg0K CQkJJHdoZXJlID0gJzE9MSc7DQoJCQlicmVhazsNCgkJY2FzZSAnc2VsJzoNCgkJCSR3aGVy ZSA9ICgkbHN0KSA/ICdpZCBJTiAoJy5kb1NsYXNoKCRsc3QpLicpJyA6ICcxPTAnOw0KCQkJ YnJlYWs7DQoJCWNhc2UgJ2NhdCc6DQoJCQkkd2hlcmUgPSAiY2F0ZWdvcnkgaW4gKCciLmRv U2xhc2goJGxzdCkuIicpIjsNCgkJCWJyZWFrOw0KCQljYXNlICd1c3InOg0KCQkJJHdoZXJl ID0gImF1dGhvciBpbiAoJyIuZG9TbGFzaCgkbHN0KS4iJykiOw0KCQkJYnJlYWs7DQoJfQ0K DQoJJGltYWdlcyA9IHNhZmVfY29sdW1uKCdpZCcsICd0eHBfaW1hZ2UnLCAkd2hlcmUpOw0K CSRjb3VudCA9IGNvdW50KCRpbWFnZXMpOw0KDQoJZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiPic7DQoJZWNobyAidmFyIGJjdHIgPSAwOyB2YXIgYnRvdCA9IHskY291 bnR9OyI7DQoJZWNobyAnalF1ZXJ5KGZ1bmN0aW9uKCkgeyc7DQoJZWNobyAnalF1ZXJ5KCIj c21kX3RodW1iX2J0b3QiKS50ZXh0KCIvJy4kY291bnQuJyIpOyc7DQoJZm9yZWFjaCAoJGlt YWdlcyBhcyAkaW1nKSB7DQoJCWVjaG8gPDw8RU9KUw0KCQlzZW5kQXN5bmNFdmVudCgNCgkJ ew0KCQkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQkJc3RlcDogJ3NtZF90aHVtYl9j cmVhdGVfb25lJywNCgkJCXNtZF90aHVtYl9pbWdpZDogeyRpbWd9DQoJCX0sIHNtZF9jcmVh dGVfZ3JvdXBfZmVlZGJhY2spOw0KRU9KUzsNCgl9DQoJZWNobyAnfSk7JzsNCgllY2hvIDw8 PEVPSlMNCglmdW5jdGlvbiBzbWRfY3JlYXRlX2dyb3VwX2ZlZWRiYWNrKCkgew0KCQliY3Ry Kys7DQoJCWpRdWVyeSgnI3NtZF90aHVtYl9iY3VycicpLnRleHQoYmN0cik7DQovLwkJaWYg KGJjdHIgPj0gYnRvdCkgew0KLy8JCQlqUXVlcnkoJyNzbWRfdGh1bWJfYmN1cnIsI3NtZF90 aHVtYl9idG90JykuZW1wdHkoKTsNCi8vCQl9DQoJfQ0KRU9KUzsNCgllY2hvICc8L3Njcmlw dD4nOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90 aHVtYl9jcmVhdGVfb25lKCkgew0KCSRjdXJyaW1nID0gZ3BzKCdzbWRfdGh1bWJfaW1naWQn KTsNCglhc3NlcnRfaW50KCRjdXJyaW1nKTsNCg0KCSRycyA9IHNhZmVfcm93cygnKicsIFNN RF9USFVNQiwgJzE9MSBBTkQgZmxhZ3MgJiAnLlNNRF9USFVNQl9BQ1RJVkUpOw0KCSRjdXJy ID0gc2FmZV9yb3coJyonLCAndHhwX2ltYWdlJywgImlkPSIuZG9TbGFzaCgkY3VycmltZykp Ow0KCWlmICgkcnMpIHsNCgkJc21kX3RodW1iX21ha2UoJHJzLCAkY3VyciwgMSk7DQoJCXNl bmRfeG1sX3Jlc3BvbnNlKCk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKCkgew0KCSRuYW1lID0gZG9T bGFzaChncHMoJ3NtZF90aHVtYl9wcm9maWxlJykpOw0KCWlmICgkbmFtZSkgew0KCQlzYWZl X3VwZGF0ZShTTURfVEhVTUIsICdmbGFncyA9IGZsYWdzIF4gJy5TTURfVEhVTUJfQUNUSVZF LCAibmFtZT0nJG5hbWUnIik7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKGFycmF5KCdzbWRfdGh1 bWJfcHJvZmlsZScgPT4gJG5hbWUpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX3N3aXRjaF9wcmVmKCkgew0KCSRuYW1lID0g ZG9TbGFzaChncHMoJ3NtZF90aHVtYl90eHB0eXBlJykpOw0KCSRzdGF0ZSA9IGRvU2xhc2go Z3BzKCdzbWRfdGh1bWJfc3RhdGUnKSk7DQoJaWYgKCRuYW1lKSB7DQoJCXNldF9wcmVmKCdz bWRfdGh1bWJfJy4kbmFtZSwgJHN0YXRlLCAnc21kX3RodW1iJywgUFJFRl9ISURERU4sICd0 ZXh0X2lucHV0Jyk7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKCk7DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9nZW5lcmF0ZSgkZXZ0 LCAkc3RwKSB7DQoJJGlkID0gZG9TbGFzaChncHMoJ2lkJykpOw0KDQoJJGlkID0gKCRpZCkg PyAkaWQgOiAkR0xPQkFMU1snSUQnXTsNCgkkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURfVEhV TUIsICcxPTEgQU5EIGZsYWdzICYgJy5TTURfVEhVTUJfQUNUSVZFKTsNCg0KCXNtZF90aHVt Yl9tYWtlKCRycywgJGlkKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfdGh1bWJfZGVsZXRlKCRldnQsICRzdHApIHsNCgkkaWRzID0gZ3BzKCdz ZWxlY3RlZCcpOw0KCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgJzE9MScpOw0K DQoJJGltYWdlcyA9IHNhZmVfcm93cygnKicsICd0eHBfaW1hZ2UnLCAnaWQgSU4gKCcgLiBq b2luKCcsJyxxdW90ZV9saXN0KCRpZHMpKSAuICcpJyk7DQoJZm9yZWFjaCAoJGltYWdlcyBh cyAkaW1nKSB7DQoJCXNtZF90aHVtYl91bm1ha2UoJHJzLCAkaW1nKTsNCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RodW1iX21ha2UoJHJz LCAkY3VycmltZywgJGZvcmNlPTApIHsNCgkvLyBXcmFwcGVyIGZvciB3ZXRfdGh1bWIgdG8g YWxsb3cgbXVsdGlwbGUgdGh1bWJuYWlscw0KCSRtc2cgPSAnJzsNCglzbWRfdGh1bWJfc2V0 X2ltcGF0aCgpOw0KDQoJaWYgKCFjbGFzc19leGlzdHMoJ3NtZF90aHVtYicpKSB7DQoJCWNs YXNzIHNtZF90aHVtYiBleHRlbmRzIHdldF90aHVtYiB7DQoJCQl2YXIgJG1fZXh0Ow0KCQkJ dmFyICRtX2lkOw0KCQkJdmFyICRtX2RpcjsNCgkJCXZhciAkbV9kZmx0Ow0KCQkJdmFyICR3 aWR0aDsNCgkJCXZhciAkaGVpZ2h0Ow0KCQkJdmFyICRmb3JjZTsNCg0KCQkJLy8gQ29uc3Ry dWN0b3INCgkJCWZ1bmN0aW9uIHNtZF90aHVtYiAoJGlkLCAkZGlyLCAkaW1nX3JvdywgJGlz X2RlZmF1bHQ9ZmFsc2UsICRwcm9fdz0nJywgJHByb19oPScnLCAkZm9yY2U9MCkgew0KCQkJ CSRpZCA9IGFzc2VydF9pbnQoJGlkKTsNCgkJCQlpZiAoJGltZ19yb3cpIHsNCgkJCQkJZXh0 cmFjdCgkaW1nX3Jvdyk7DQoJCQkJCSR0aGlzLT5tX2lkID0gJGlkOw0KCQkJCQkkdGhpcy0+ bV9leHQgPSAkZXh0Ow0KCQkJCQkkdGhpcy0+bV9kaXIgPSAkZGlyOw0KCQkJCQkkdGhpcy0+ Zm9yY2UgPSAkZm9yY2U7DQoJCQkJCSR0aGlzLT53aWR0aCA9ICRwcm9fdzsNCgkJCQkJJHRo aXMtPmhlaWdodCA9ICRwcm9faDsNCgkJCQkJJHRoaXMtPm1fZGZsdCA9ICRpc19kZWZhdWx0 Ow0KCQkJCX0NCgkJCQkkdGhpcy0+d2V0X3RodW1iKCk7IC8vIGNvbnN0cnVjdCBiYXNlIGNs YXNzIGluc3RhbmNlDQoJCQl9DQoNCgkJCWZ1bmN0aW9uIHdyaXRlKCkgew0KCQkJCWlmICgg IWlzc2V0KCR0aGlzLT5tX2V4dCkgKSByZXR1cm4gZmFsc2U7DQoNCgkJCQkkYXV0b3IgPSBn ZXRfcHJlZignc21kX3RodW1iX2F1dG9fcmVwbGFjZScsICcwJyk7DQoJCQkJJHJlY2Zyb20g PSBnZXRfcHJlZignc21kX3RodW1iX2NyZWF0ZV9mcm9tJywgJ2Z1bGwnKTsNCgkJCQkkc3Jj X3N6ID0gKCRyZWNmcm9tID09ICdmdWxsJykgPyAnJyA6ICd0JzsNCgkJCQkkaW5maWxlID0g SU1QQVRILiR0aGlzLT5tX2lkLiRzcmNfc3ouJHRoaXMtPm1fZXh0Ow0KCQkJCSRvdXRmaWxl ID0gSU1QQVRILiR0aGlzLT5tX2Rpci5EUy4kdGhpcy0+bV9pZC4kdGhpcy0+bV9leHQ7DQoN CgkJCQlpZiAoIWZpbGVfZXhpc3RzKCRvdXRmaWxlKSB8fCAkYXV0b3IgfHwgJHRoaXMtPmZv cmNlKSB7DQoJCQkJCS8vIElmIHRoaXMgaXMgdGhlIGRlZmF1bHQgcHJvZmlsZSBhbmQgdGhl IHByZWYgaW5kaWNhdGVzLCB3cml0ZSBhIFR4cCB0aHVtYiB0b28NCgkJCQkJaWYgKCgkdGhp cy0+bV9kZmx0ID09IHRydWUpICYmIChnZXRfcHJlZignc21kX3RodW1iX3R4cF9jcmVhdGUn LCAnMCcpKSkgew0KCQkJCQkJJHR4cF90aHVtYiA9IElNUEFUSC4kdGhpcy0+bV9pZC4ndCcu JHRoaXMtPm1fZXh0Ow0KCQkJCQkJaWYgKCBwYXJlbnQ6OndyaXRlICggJGluZmlsZSwgJHR4 cF90aHVtYiApICkgew0KCQkJCQkJCXNhZmVfdXBkYXRlKCd0eHBfaW1hZ2UnLCAidGh1bWJu YWlsID0gMSwgdGh1bWJfdyA9ICR0aGlzLT53aWR0aCwgdGh1bWJfaCA9ICR0aGlzLT5oZWln aHQiLCAnaWQgPSAnLiR0aGlzLT5tX2lkKTsNCgkJCQkJCQlAY2htb2QoJG91dGZpbGUsIDA2 NDQpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJDQoJCQkJCWlmICggcGFyZW50Ojp3cml0ZSAoICRp bmZpbGUsICRvdXRmaWxlICkgKSB7DQoJCQkJCQlAY2htb2QoJG91dGZpbGUsIDA2NDQpOw0K CQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuIGZhbHNlOw0K CQkJfQ0KCQl9DQoJfQ0KDQoJLy8gSWYgcGFzc2VkIG9ubHkgYW4gSUQsIGxvb2sgdXAgdGhl IHJlc3Qgb2YgdGhlIGltYWdlIGRhdGENCglpZiAoIWlzX2FycmF5KCRjdXJyaW1nKSkgew0K CQlhc3NlcnRfaW50KCRjdXJyaW1nKTsNCgkJJGN1cnJpbWcgPSBzYWZlX3JvdygnKicsICd0 eHBfaW1hZ2UnLCAnaWQ9Jy4kY3VycmltZyk7DQoJfQ0KDQoJLy8gQ3JlYXRlIGVhY2ggdGh1 bWJuYWlsDQoJJHByb19kZmx0ID0gZ2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2Zp bGUnLCAnJyk7DQoJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJLy8gU2FuaXRpemUgYSBs aXR0bGUNCgkJJHdpZHRoID0gKGludCkgJHJvd1snd2lkdGgnXTsNCgkJJGhlaWdodCA9IChp bnQpICRyb3dbJ2hlaWdodCddOw0KCQlpZiAoJHdpZHRoID09IDApICR3aWR0aCA9ICcnOw0K CQlpZiAoJGhlaWdodCA9PSAwKSAkaGVpZ2h0ID0gJyc7DQoJCWlmICgkd2lkdGggPT09ICcn ICYmICRoZWlnaHQgPT09ICcnKSBjb250aW51ZTsNCgkJJGNyb3AgPSAoJHJvd1snZmxhZ3Mn XSAmIFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOw0KCQkkc2hhcnBlbiA9ICgkcm93WydmbGFn cyddICYgU01EX1RIVU1CX1NIQVJQKSA/IDEgOiAwOw0KCQkkaWQgPSAkY3VycmltZ1snaWQn XTsNCgkJJGlzX2RmbHQgPSAoJHJvd1snbmFtZSddID09ICRwcm9fZGZsdCkgPyB0cnVlIDog ZmFsc2U7DQoNCgkJJHQgPSBuZXcgc21kX3RodW1iKCRpZCwgc2FuaXRpemVGb3JVcmwoJHJv d1snbmFtZSddKSwgJGN1cnJpbWcsICRpc19kZmx0LCAkd2lkdGgsICRoZWlnaHQsICRmb3Jj ZSk7DQoJCSR0LT5leHRyYXBvbGF0ZSA9IHRydWU7IC8vIEFsbG93IGJpZ2dlciB0aHVtYnMg dGhhbiBvcmlnaW5hbCBpbWFnZQ0KCQkkdC0+Y3JvcCA9ICgkY3JvcCA9PSAnMScpOw0KCQkk dC0+c2hhcnBlbiA9ICgkc2hhcnBlbiA9PSAnMScpOw0KCQkkdC0+aGludCA9ICcwJzsNCgkJ JHQtPndpZHRoID0gJHdpZHRoOw0KCQkkdC0+aGVpZ2h0ID0gJGhlaWdodDsNCgkJJHQtPnF1 YWxpdHkgPSAkcm93WydxdWFsaXR5J107DQoNCgkJaWYgKCR0LT53cml0ZSgpKSB7DQoJCQkk bXNnID0gZ1R4dCgndGh1bWJuYWlsX3NhdmVkJywgYXJyYXkoJ3tpZH0nID0+ICRpZCkpOw0K CQl9IGVsc2Ugew0KCQkJJG1zZyA9IGFycmF5KGdUeHQoJ3RodW1ibmFpbF9ub3Rfc2F2ZWQn LCBhcnJheSgne2lkfScgPT4gJGlkKSksIEVfRVJST1IpOw0KCQl9DQoJfQ0KCXJldHVybiAk bXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90 aHVtYl91bm1ha2UoJHJzLCAkY3VycmltZykgew0KCSRpZCA9ICRjdXJyaW1nWydpZCddOw0K CSRleHQgPSAkY3VycmltZ1snZXh0J107DQoJJHByb19kZmx0ID0gZ2V0X3ByZWYoJ3NtZF90 aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJyk7DQoJJHR4cF9kZWwgPSBnZXRfcHJlZignc21k X3RodW1iX3R4cF9kZWxldGUnLCAnMCcpOw0KCXNtZF90aHVtYl9zZXRfaW1wYXRoKCk7DQoN Cglmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkkcGF0aCA9IElNUEFUSC5zYW5pdGl6ZUZv clVybCgkcm93WyduYW1lJ10pLkRTLiRpZC4kZXh0Ow0KCQlpZiAoZmlsZV9leGlzdHMoJHBh dGgpKSB7DQoJCQl1bmxpbmsoJHBhdGgpOw0KCQl9DQoNCgkJLy8gQWxzbyByZW1vdmUgVHhw J3MgYnVpbHQtaW4gdGh1bWI/DQoJCWlmICgoJHJvd1snbmFtZSddID09ICRwcm9fZGZsdCkg JiYgKCR0eHBfZGVsID09ICcxJykpIHsNCgkJCSRwYXRoID0gSU1QQVRILiRpZC4ndCcuJGV4 dDsNCgkJCWlmIChmaWxlX2V4aXN0cygkcGF0aCkpIHsNCgkJCQlzYWZlX3VwZGF0ZSgndHhw X2ltYWdlJywgInRodW1ibmFpbCA9IDAsIHRodW1iX3cgPSAwLCB0aHVtYl9oID0gMCIsICdp ZCA9ICcuJGlkKTsNCgkJCQl1bmxpbmsoJHBhdGgpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVy biAnJzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf dGh1bWJfaW5zZXJ0KCkgew0KCWdsb2JhbCAkdHhwY2ZnLCAkdHhwX3VzZXIsICRwYWdlLCAk c29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kOw0KDQoJc21kX3RodW1iX3NldF9p bXBhdGgoKTsNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAn Y3JpdCcsICdzZWFyY2hfbWV0aG9kJykpKTsNCg0KCWluY2x1ZGVfb25jZSB0eHBhdGguJy9s aWIvdHhwbGliX21pc2MucGhwJzsNCg0KCWV4dHJhY3QoJHR4cGNmZyk7DQoJJGlkID0gYXNz ZXJ0X2ludChncHMoJ2lkJykpOw0KCSRwcm9maWxlID0gZ3BzKCdzbWRfdGh1bWJfcHJvZmls ZScpOw0KCSR0aHVtYl9leHQgPSBncHMoJ3NtZF90aHVtYl9leHQnKTsNCg0KCSRhdXRob3Ig PSBmZXRjaCgnYXV0aG9yJywgJ3R4cF9pbWFnZScsICdpZCcsICRpZCk7DQoJaWYgKCFoYXNf cHJpdnMoJ2ltYWdlLmVkaXQnKSAmJiAhKCRhdXRob3IgPT0gJHR4cF91c2VyICYmIGhhc19w cml2cygnaW1hZ2UuZWRpdC5vd24nKSkpIHsNCgkJcmV0dXJuOw0KCX0NCg0KCSRmaWxlID0g JF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddOw0KCSRuYW1lID0gJF9GSUxFU1sndGhl ZmlsZSddWyduYW1lJ107DQoNCgkkZmlsZSA9IGdldF91cGxvYWRlZF9maWxlKCRmaWxlKTsN Cg0KCWlmIChlbXB0eSgkZmlsZSkpDQoJew0KCQlyZXR1cm47DQoJfQ0KDQoJbGlzdCgkdywg JGgsICRleHRlbnNpb24pID0gZ2V0aW1hZ2VzaXplKCRmaWxlKTsNCgkkdmFsaWRfZXh0cyA9 IGFycmF5KA0KCQlJTUFHRVRZUEVfR0lGICA9PiAnLmdpZicsDQoJCUlNQUdFVFlQRV9KUEVH ID0+ICcuanBnJywNCgkJSU1BR0VUWVBFX1BORyAgPT4gJy5wbmcnLA0KCQlJTUFHRVRZUEVf U1dGICA9PiAnLnN3ZicsDQoJKTsNCgkkZXh0ID0gaXNzZXQoJHZhbGlkX2V4dHNbJGV4dGVu c2lvbl0pID8gJHZhbGlkX2V4dHNbJGV4dGVuc2lvbl0gOiAnJzsNCg0KCWlmICgoJGZpbGUg IT09IGZhbHNlKSAmJiAkcHJvZmlsZSAmJiAkZXh0KSB7DQoJCSRuZXdwYXRoID0gSU1QQVRI LnNhbml0aXplRm9yVXJsKCRwcm9maWxlKS5EUy4kaWQuJGV4dDsNCgkJaWYgKHNoaWZ0X3Vw bG9hZGVkX2ZpbGUoJGZpbGUsICRuZXdwYXRoKSA9PSBmYWxzZSkgew0KCQl9IGVsc2Ugew0K CQkJQGNobW9kKCRuZXdwYXRoLCAwNjQ0KTsNCg0KCQkJLy8gSWYgdGhlIHByZWYgaW5kaWNh dGVzLCBkdXBsaWNhdGUgYXMgYSBUeHAgdGh1bWIgdG9vDQoJCQlpZiAoZ2V0X3ByZWYoJ3Nt ZF90aHVtYl90eHBfY3JlYXRlJywgJzAnKSA9PSAxKSB7DQoJCQkJJHR4cF90aHVtYiA9IElN UEFUSC4kaWQuJ3QnLiRleHQ7DQoJCQkJaWYgKCBjb3B5ICggJG5ld3BhdGgsICR0eHBfdGh1 bWIgKSApIHsNCgkJCQkJc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScsICJ0aHVtYm5haWwgPSAx LCB0aHVtYl93ID0gJHcsIHRodW1iX2ggPSAkaCIsICdpZCA9ICcuJGlkKTsNCgkJCQkJQGNo bW9kKCR0eHBfdGh1bWIsIDA2NDQpOw0KCQkJCX0NCgkJCX0NCgkJCSRtZXNzYWdlID0gZ1R4 dCgnaW1hZ2VfdXBsb2FkZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpOw0KCQl9DQoJ fQ0KDQoJLy8gU2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIHJlc29ydCB0byBq cyB0byByZWZyZXNoIHRoZSBwYWdlDQoJJHVybCA9ICc/ZXZlbnQ9aW1hZ2Umc3RlcD1pbWFn ZV9lZGl0JmlkPScuJGlkLicmc29ydD0nLiRzb3J0LicmZGlyPScuJGRpci4nJnBhZ2U9Jy4k cGFnZS4nJnNlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC4nJmNyaXQ9Jy4kY3JpdDsN CgllY2hvIDw8PEVPUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0Kd2luZG93 LmxvY2F0aW9uLmhyZWY9InskdXJsfSI7DQo8L3NjcmlwdD4NCjxub3NjcmlwdD4NCjxtZXRh IGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7dXJsPXskdXJsfSIgLz4NCjwvbm9z Y3JpcHQ+DQpFT1M7DQoJZXhpdDsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfdGh1bWJfZWRpdCgkZXZ0LCAkc3RwLCAkZGZsdCwgJGN1cnJpbWcp IHsNCglnbG9iYWwgJHN0ZXAsICRmaWxlX21heF91cGxvYWRfc2l6ZSwgJHR4cF91c2VyLCAk c21kX3RodW1iX3N0eWxlczsNCg0KCWV4dHJhY3QoZ3BzYShhcnJheSgNCgkJJ2lkJywNCgkJ J3BhZ2UnLA0KCQknc29ydCcsDQoJCSdkaXInLA0KCQknY3JpdCcsDQoJCSdzZWFyY2hfbWV0 aG9kJywNCgkJJ3NtZF90aHVtYm5haWxfc2l6ZScsDQoJCSdzbWRfdGh1bWJuYWlsX2Nob3Nl bl9zaXplJywNCgkJJ3NtZF90aHVtYm5haWxfZGVsZXRlJywNCgkJJ3NtZF9zdGVwJw0KCSkp KTsNCg0KCSRpZCA9ICgkaWQpID8gJGlkIDogJEdMT0JBTFNbJ0lEJ107DQoNCgkvLyBUb2dn bGUgcHJvZmlsZSBwYW5lbA0KCWlmICgkc3RlcCA9PSAnc2F2ZV9wYW5lX3N0YXRlJykgew0K CQlzbWRfdGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCQlyZXR1cm47DQoJfQ0KDQoJ Ly8gQ3JlYXRlL2RlbGV0ZSB0aGUgc2VsZWN0ZWQgdGh1bWJzIGRlcGVuZGluZyBvbiB0aGUg YnV0dG9uIHByZXNzZWQNCglpZiAoJHNtZF9zdGVwID09ICdzbWRfdGh1bWJuYWlsX21hbmFn ZScpIHsNCgkJLy8gVmFsaWRhdGUgdXNlcg0KCQkkYXV0aG9yID0gZmV0Y2goJ2F1dGhvcics ICd0eHBfaW1hZ2UnLCAnaWQnLCAkaWQpOw0KCQlpZiAoIWhhc19wcml2cygnaW1hZ2UuZWRp dCcpICYmICEoJGF1dGhvciA9PSAkdHhwX3VzZXIgJiYgaGFzX3ByaXZzKCdpbWFnZS5lZGl0 Lm93bicpKSkNCgkJew0KCQkJaW1hZ2VfbGlzdChnVHh0KCdyZXN0cmljdGVkX2FyZWEnKSk7 DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvLyBHcmFiIHRoZSB0aHVtYm5haWxzIHRvIHdvcmsg b24NCgkJJHdoZXJlID0gKCRzbWRfdGh1bWJuYWlsX3NpemU9PSdhbGwnKSA/ICcxPTEgQU5E IGZsYWdzICYgJy5TTURfVEhVTUJfQUNUSVZFIDogIm5hbWU9JyIuZG9TbGFzaCgkc21kX3Ro dW1ibmFpbF9jaG9zZW5fc2l6ZSkuIiciOw0KCQkkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURf VEhVTUIsICR3aGVyZSk7DQoNCgkJLy8gRG8gaXQNCgkJaWYoJHNtZF90aHVtYm5haWxfZGVs ZXRlKSB7DQoJCQkkbXNnID0gc21kX3RodW1iX3VubWFrZSgkcnMsICRjdXJyaW1nKTsNCgkJ fSBlbHNlIHsNCgkJCSRtc2cgPSBzbWRfdGh1bWJfbWFrZSgkcnMsICRjdXJyaW1nLCAxKTsN CgkJfQ0KCX0NCg0KCSRleHQgPSAkY3VycmltZ1snZXh0J107DQoJZWNobyA8PDxFT0MNCjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIHNtZF90aHVtYl9zZWxl Y3RvcihzZWwpIHsNCgl2YXIgaWR4ID0gMDsNCglqUXVlcnkoIiNzbWRfdGh1bWJzIGltZyIp LmVhY2goZnVuY3Rpb24oKSB7DQoJCWlmIChqUXVlcnkodGhpcykuaGFzQ2xhc3Moc2VsKSkg ew0KCQkJalF1ZXJ5KHRoaXMpLnRvZ2dsZUNsYXNzKCdzbWRfc2VsZWN0ZWQnKTsNCgkJCWlm IChqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ3NtZF9zZWxlY3RlZCcpKSB7DQoJCQkJalF1ZXJ5 KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxlZCcsIGZhbHNlKTsNCgkJ CQlqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZSIpLnZhbChzZWwpOw0KCQkJCWlkeCA9IGpR dWVyeSgiI3NtZF90aHVtYm5haWxfc2l6ZSBvcHRpb25bdmFsdWU9JyIrc2VsKyInXSIpLmlu ZGV4KCk7DQoJCQkJalF1ZXJ5KCIjc21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZSIpLnZhbChz ZWwpOw0KCQkJfSBlbHNlIHsNCgkJCQlqUXVlcnkoIiNzbWRfdXBsb2FkX3RodW1ibmFpbCIp LmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQoJCQkJalF1ZXJ5KCIjc21kX3RodW1iX3Byb2Zp bGUiKS52YWwoJycpOw0KCQkJCWpRdWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUi KS52YWwoJycpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5KHRoaXMpLnJlbW92ZUNs YXNzKCdzbWRfc2VsZWN0ZWQnKTsNCgkJfQ0KCX0pOw0KCWpRdWVyeSgiI3NtZF90aHVtYm5h aWxfc2l6ZSIpLmF0dHIoInNlbGVjdGVkSW5kZXgiLCBpZHgpOw0KfQ0KZnVuY3Rpb24gc21k X3RodW1iX3NlbGVjdF9jaGFuZ2VkKCkgew0KCW9iaiA9IGpRdWVyeSgiI3NtZF90aHVtYm5h aWxfc2l6ZSIpOw0KCWlmIChvYmouYXR0cigic2VsZWN0ZWRJbmRleCIpID09IDApIHsNCgkJ alF1ZXJ5KCIjc21kX3VwbG9hZF90aHVtYm5haWwiKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUp Ow0KCQlqUXVlcnkoIiNzbWRfdGh1bWJfcHJvZmlsZSIpLnZhbCgnJyk7DQoJCWpRdWVyeSgi I3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwoJycpOw0KCX0gZWxzZSB7DQoJCWpR dWVyeSgiI3NtZF91cGxvYWRfdGh1bWJuYWlsIikuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7 DQoJCWpRdWVyeSgiI3NtZF90aHVtYl9wcm9maWxlIikudmFsKG9iai52YWwoKSk7DQoJCWpR dWVyeSgiI3NtZF90aHVtYm5haWxfY2hvc2VuX3NpemUiKS52YWwob2JqLnZhbCgpKTsNCgl9 DQoJalF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlpZiAo alF1ZXJ5KHRoaXMpLmhhc0NsYXNzKG9iai52YWwoKSkpIHsNCgkJCWpRdWVyeSh0aGlzKS5h ZGRDbGFzcygnc21kX3NlbGVjdGVkJyk7DQoJCX0gZWxzZSB7DQoJCQlqUXVlcnkodGhpcyku cmVtb3ZlQ2xhc3MoJ3NtZF9zZWxlY3RlZCcpOw0KCQl9DQoJfSk7DQp9DQpqUXVlcnkoZnVu Y3Rpb24oKSB7DQoJalF1ZXJ5KCIjc21kX3RodW1icyBpbWciKS5lYWNoKGZ1bmN0aW9uKCkg ew0KCQl2YXIgY2xzID0galF1ZXJ5KHRoaXMpLmF0dHIoJ2NsYXNzJyk7DQoJCWpRdWVyeSh0 aGlzKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCXNtZF90aHVtYl9zZWxlY3RvcihjbHMpOw0K CQl9KTsNCgl9KTsNCglqUXVlcnkoIiNzbWRfdXBsb2FkX3RodW1ibmFpbCIpLmF0dHIoJ2Rp c2FibGVkJywgdHJ1ZSk7DQoJalF1ZXJ5KCIudGh1bWJuYWlsLXVwbG9hZCIpLnByZXBlbmQo JzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNtZF90aHVtYl9pbWdpZCIgdmFsdWU9Insk aWR9IiAvPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzbWRfdGh1bWJfcHJvZmlsZSIgbmFt ZT0ic21kX3RodW1iX3Byb2ZpbGUiIHZhbHVlPSIiIC8+PGlucHV0IHR5cGU9ImhpZGRlbiIg aWQ9InNtZF90aHVtYl9leHQiIG5hbWU9InNtZF90aHVtYl9leHQiIHZhbHVlPSJ7JGV4dH0i IC8+Jyk7DQp9KTsNCjwvc2NyaXB0Pg0KRU9DOw0KDQoJLy8gSW5qZWN0IHN0eWxlcw0KCWVj aG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JyAuICRzbWRfdGh1bWJfc3R5bGVzWydlZGl0 J10gLiAnPC9zdHlsZT4nOw0KDQoJLy8gQWRkIHRodW1ibmFpbHMgYW5kIGNyZWF0aW9uIGNv bnRyb2xzDQoJaWYgKHNtZF90aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCSRycyA9IHNhZmVf cm93cygnKicsIFNNRF9USFVNQiwgJzE9MSBPUkRFUiBCWSBuYW1lJyk7DQoJCWlmICgkcnMp IHsNCgkJCSRwcm9maWxlcyA9IGFycmF5KCdhbGwnID0+IHNtZF90aHVtYl9nVHh0KCdzbWRf dGh1bWJfYWxsX3NpemVzJykpOw0KCQkJJHRodW1ic1tdID0gJzxkaXYgaWQ9InNtZF90aHVt YnMiPic7DQoJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJCWlmICgkcm93WydmbGFn cyddICYgU01EX1RIVU1CX0FDVElWRSkgew0KCQkJCQkkcHJvZmlsZXNbJHJvd1snbmFtZSdd XSA9ICRyb3dbJ25hbWUnXTsNCgkJCQl9DQoJCQkJJHRodW1ic1tdID0gc21kX3RodW1iX2lt Zygkcm93LCAkY3VycmltZyk7DQoJCQl9DQoJCQkkdGh1bWJzW10gPSAnPC9kaXY+JzsNCgkJ CSRxcyA9IGFycmF5KA0KCQkJCSJldmVudCIgPT4gJ2ltYWdlJywNCgkJCQkic3RlcCIgPT4g J2ltYWdlX2VkaXQnLA0KCQkJCSJpZCIgPT4gJGlkLA0KCQkJCSJwYWdlIiA9PiAkcGFnZSwN CgkJCQkic29ydCIgPT4gJHNvcnQsDQoJCQkJImRpciIgPT4gJGRpciwNCgkJCQkiY3JpdCIg PT4gJGNyaXQsDQoJCQkJInNlYXJjaF9tZXRob2QiID0+ICRzZWFyY2hfbWV0aG9kLA0KCQkJ KTsNCg0KCQkJJG91dFtdID0gJzxkaXYgaWQ9InNtZF90aHVtYm5haWxfY29udHJvbCI+PHNw YW4gY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFpbHNf dmlzaWJsZScpID8gJyBleHBhbmRlZCcgOiAnJykuJyI+PGEgaHJlZj0iI3NtZF90aHVtYm5h aWxzIj4nLnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfdGh1bWJuYWlsX2hlYWRpbmcnKS4n PC9hPjwvc3Bhbj48ZGl2IGlkPSJzbWRfdGh1bWJuYWlscyIgY2xhc3M9InRvZ2dsZSIgc3R5 bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFpbHNfdmlzaWJsZScp ID8gJ2Jsb2NrJyA6ICdub25lJykuJyI+JzsNCgkJCSRvdXRbXSA9ICc8Zm9ybSBuYW1lPSJz bWRfdGh1bWJuYWlsX2NyZWF0ZSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249Iicuam9pbl9xcygk cXMpLiciPic7DQoJCQkkb3V0W10gPSBmSW5wdXQoJ2hpZGRlbicsICdzbWRfc3RlcCcsICdz bWRfdGh1bWJuYWlsX21hbmFnZScpOw0KCQkJJG91dFtdID0gZklucHV0KCdoaWRkZW4nLCAn c21kX3RodW1ibmFpbF9jaG9zZW5fc2l6ZScsICcnLCAnJywgJycsICcnLCAnJywgJycsICdz bWRfdGh1bWJuYWlsX2Nob3Nlbl9zaXplJyk7DQoJCQkkb3V0W10gPSBzZWxlY3RJbnB1dCgn c21kX3RodW1ibmFpbF9zaXplJywgJHByb2ZpbGVzLCAnJywgJycsICdvbmNoYW5nZT0icmV0 dXJuIHNtZF90aHVtYl9zZWxlY3RfY2hhbmdlZCgpIjsnLCAnc21kX3RodW1ibmFpbF9zaXpl Jyk7DQoJCQkkb3V0W10gPSBmSW5wdXQoJ3N1Ym1pdCcsICcnLCBnVHh0KCdjcmVhdGUnKSwg J3NtYWxsZXJib3gnKTsNCgkJCSRvdXRbXSA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF90aHVt Ym5haWxfZGVsZXRlJywgZ1R4dCgnZGVsZXRlJyksICdzbWFsbGVyYm94Jyk7DQoJCQkkb3V0 W10gPSBqb2luKCcnLCAkdGh1bWJzKTsNCgkJCSRvdXRbXSA9ICc8L2Zvcm0+JzsNCgkJCSRv dXRbXSA9IHVwbG9hZF9mb3JtKHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfdXBsb2FkJyks ICd1cGxvYWRfdGh1bWJuYWlsJywgJ3NtZF90aHVtYm5haWxfaW5zZXJ0JywgJ2ltYWdlJywg JGlkLCAkZmlsZV9tYXhfdXBsb2FkX3NpemUsICdzbWRfdXBsb2FkX3RodW1ibmFpbCcsICd0 aHVtYm5haWwtdXBsb2FkJyk7DQoJCQkkb3V0W10gPSAnPC9kaXY+JzsNCgkJCXJldHVybiBq b2luKCcnLCAkb3V0KTsNCgkJfQ0KCX0NCglyZXR1cm4gJyAnOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl9pbWcoJHJvdywgJGN1cnJp bWcsICRtZXRhPWFycmF5KCkpIHsNCglnbG9iYWwgJGltZ19kaXIsICRwcmVmczsNCg0KCXNt ZF90aHVtYl9zZXRfaW1wYXRoKCk7DQoNCgkkZGlyID0gc2FuaXRpemVGb3JVcmwoJHJvd1sn bmFtZSddKTsNCgkkaWQgPSAkY3VycmltZ1snaWQnXTsNCgkkZXh0ID0gJGN1cnJpbWdbJ2V4 dCddOw0KDQoJJHBhdGggPSBJTVBBVEguJGRpci5EUy4kaWQuJGV4dDsNCg0KCWlmIChmaWxl X2V4aXN0cygkcGF0aCkpIHsNCgkJJGV4dHJhcyA9ICcnOw0KCQlpZiAoaXNzZXQoJG1ldGFb J2ZvcmNldyddKSB8fCBpc3NldCgkbWV0YVsnZm9yY2VoJ10pKSB7DQoJCQkkZGltcyA9IGdl dGltYWdlc2l6ZSgkcGF0aCk7DQoJCQlpZiAoaXNzZXQoJG1ldGFbJ2ZvcmNldyddKSAmJiAh JHJvd1snd2lkdGgnXSkgew0KCQkJCSRyb3dbJ3dpZHRoJ10gPSAkZGltc1swXTsNCgkJCX0N CgkJCWlmIChpc3NldCgkbWV0YVsnZm9yY2VoJ10pICYmICEkcm93WydoZWlnaHQnXSkgew0K CQkJCSRyb3dbJ2hlaWdodCddID0gJGRpbXNbMV07DQoJCQl9DQoJCQl1bnNldCgkbWV0YVsn Zm9yY2V3J10pOw0KCQkJdW5zZXQoJG1ldGFbJ2ZvcmNlaCddKTsNCgkJfQ0KCQkkdyA9ICgk cm93Wyd3aWR0aCddKSA/ICcgd2lkdGg9IicuJHJvd1snd2lkdGgnXS4nIic6ICcnOw0KCQkk aCA9ICgkcm93WydoZWlnaHQnXSkgPyAnIGhlaWdodD0iJy4kcm93WydoZWlnaHQnXS4nIic6 ICcnOw0KDQoJCSR1RGF0ZSA9ICcnOw0KCQlpZiAoIWlzc2V0KCRtZXRhWydzdGFtcCddKSkg ew0KCQkJJHVEYXRlID0gJz8nLmZpbGVtdGltZSgkcGF0aCk7DQoJCX0NCgkJdW5zZXQoJG1l dGFbJ3N0YW1wJ10pOw0KDQoJCWlmICghaXNzZXQoJG1ldGFbJ2NsYXNzJ10pKSB7DQoJCQkk bWV0YVsnY2xhc3MnXSA9ICRkaXI7DQoJCX0NCg0KCQlmb3JlYWNoICgkbWV0YSBhcyAka2V5 ID0+ICR2YWwpIHsNCgkJCSRleHRyYXMgLj0gJyAnLiRrZXkuJz0iJy4kdmFsLiciJzsNCgkJ fQ0KCQlyZXR1cm4gJzxpbWcgc3JjPSInLmlodS4kaW1nX2Rpci4nLycuJGRpci4nLycuJGlk LiRleHQuJHVEYXRlLiciJy4kdy4kaC4kZXh0cmFzLicgLz4nOw0KCX0NCg0KCXJldHVybiAn JzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1 bWJfcHJvZmlsZXMoJGV2dCwgJHN0cCwgJGRmbHQsICRpbWdsaXN0KSB7DQoJZ2xvYmFsICRz bWRfdGh1bWJfZXZlbnQsICRwcmVmcywgJHN0ZXAsICRzbWRfdGh1bWJfc3R5bGVzLCAkc21k X3RodW1iX3ByZXZzLCAkdHhwX3VzZXI7DQoNCglpZiAoIWhhc19wcml2cyhfX0ZVTkNUSU9O X18pKSB7DQoJCXJldHVybjsNCgl9DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoDQoJCSdwYWdl JywNCgkJJ3NvcnQnLA0KCQknZGlyJywNCgkJJ2NyaXQnLA0KCQknc2VhcmNoX21ldGhvZCcs DQoJCSdzbWRfdGh1bWJfYWRkJywNCgkJJ3NtZF90aHVtYl9jYW5jZWwnLA0KCQknc21kX3Ro dW1iX3NhdmUnLA0KCQknc21kX3RodW1iX25hbWUnLA0KCQknc21kX3RodW1iX25ld25hbWUn LA0KCQknc21kX3RodW1iX3dpZHRoJywNCgkJJ3NtZF90aHVtYl9oZWlnaHQnLA0KCQknc21k X3RodW1iX3F1YWxpdHknLA0KCQknc21kX3RodW1iX2FjdGl2ZScsDQoJCSdzbWRfdGh1bWJf YWN0aXZlX25ldycsDQoJCSdzbWRfdGh1bWJfY3JvcCcsDQoJCSdzbWRfdGh1bWJfc2hhcnBl bicsDQoJCSdzbWRfdGh1bWJfZGVmYXVsdCcsDQoJCSdzbWRfdGh1bWJfc2VsZWN0ZWQnLA0K CQknc21kX3RodW1iX2NhdF9zZWxlY3RlZCcsDQoJCSdzbWRfdGh1bWJfdXNyX3NlbGVjdGVk JywNCgkJJ3NtZF90aHVtYl9ncm91cF90eXBlJywNCgkpKSk7DQoNCgkvLyBTYW5pdGl6ZQ0K CSRxdWFsaXR5ID0gKGlzX251bWVyaWMoJHNtZF90aHVtYl9xdWFsaXR5KSkgPyAoKCRzbWRf dGh1bWJfcXVhbGl0eTwwKSA/IDc1IDogKCgkc21kX3RodW1iX3F1YWxpdHk+MTAwKSA/IDc1 IDogJHNtZF90aHVtYl9xdWFsaXR5KSApIDogNzU7DQoJJHdpZHRoID0gKGlzX251bWVyaWMo JHNtZF90aHVtYl93aWR0aCkpID8gJHNtZF90aHVtYl93aWR0aCA6IDA7DQoJJGhlaWdodCA9 IChpc19udW1lcmljKCRzbWRfdGh1bWJfaGVpZ2h0KSkgPyAkc21kX3RodW1iX2hlaWdodCA6 IDA7DQoJJG5ld25hbWUgPSBzYW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25ld25hbWUpOw0K CSRtc2cgPSAnJzsNCg0KCXNtZF90aHVtYl9zZXRfaW1wYXRoKCk7DQoNCgkvLyBUYWJsZSBj b250cm9sDQoJaWYgKGdwcygncmVtb3ZlJykpIHsNCgkJc21kX3RodW1iX3RhYmxlX3JlbW92 ZSgpOw0KCX0gZWxzZSB7DQoJCWlmICghc21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJ CXNtZF90aHVtYl90YWJsZV9pbnN0YWxsKCk7DQoJCX0NCgl9DQoNCgkvLyBUb2dnbGUgcHJv ZmlsZSBwYW5lbA0KCWlmICgkc3RlcCA9PSAnc2F2ZV9wYW5lX3N0YXRlJykgew0KCQlzbWRf dGh1bWJuYWlsX3NhdmVfcGFuZV9zdGF0ZSgpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKCRz dGVwID09ICdzbWRfdGh1bWJfY3JlYXRlX2dyb3VwJykgew0KCQlzd2l0Y2ggKCRzbWRfdGh1 bWJfZ3JvdXBfdHlwZSkgew0KCQkJY2FzZSAnYWxsJzoNCgkJCQlzbWRfdGh1bWJfY3JlYXRl X2dyb3VwKCdhbGwnKTsNCgkJCQlicmVhazsNCgkJCWNhc2UgJ3NlbCc6DQoJCQkJc21kX3Ro dW1iX2NyZWF0ZV9ncm91cCgnc2VsJywgcnRyaW0oJHNtZF90aHVtYl9zZWxlY3RlZCwgJywn KSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdjYXQnOg0KCQkJCXNtZF90aHVtYl9jcmVhdGVf Z3JvdXAoJ2NhdCcsICRzbWRfdGh1bWJfY2F0X3NlbGVjdGVkKTsNCgkJCQlicmVhazsNCgkJ CWNhc2UgJ3Vzcic6DQoJCQkJc21kX3RodW1iX2NyZWF0ZV9ncm91cCgndXNyJywgJHNtZF90 aHVtYl91c3Jfc2VsZWN0ZWQpOw0KCQkJCWJyZWFrOw0KCQl9DQoJCXNldF9wcmVmKCdwYW5l X3NtZF90aHVtYl9ncm91cF90eXBlJywgJHNtZF90aHVtYl9ncm91cF90eXBlLCAnc21kX3Ro dW1iJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJ JHN0ZXAgPSAnc21kX3RodW1iX3ByZWZzJzsNCgl9DQoNCgkvLyBTYXZlIHByb2ZpbGUNCglp ZiAoJHN0ZXAgPT0gJ3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSB7DQoJCWlmIChzbWRfdGh1 bWJfdGFibGVfZXhpc3QoKSkgew0KCQkJaWYgKCRzbWRfdGh1bWJfY2FuY2VsKSB7DQoJCQkJ Ly8gRG8gbm90aGluZw0KCQkJfSBlbHNlIGlmICgkc21kX3RodW1iX2FkZCkgew0KCQkJCS8v IENyZWF0ZSBuZXcgcHJvZmlsZQ0KCQkJCSRleGlzdHMgPSBzYWZlX3JvdygnKicsIFNNRF9U SFVNQiwgIm5hbWU9JyIuZG9TbGFzaCgkbmV3bmFtZSkuIiciKTsNCgkJCQlpZiAoJGV4aXN0 cykgew0KCQkJCQkkbXNnID0gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9wcm9maWxlX2V4 aXN0cycsIGFycmF5KCd7bmFtZX0nID0+IGRvU2xhc2goJG5ld25hbWUpKSk7DQoJCQkJfSBl bHNlIHsNCgkJCQkJaWYgKCRuZXduYW1lKSB7DQoJCQkJCQkkZmxhZ3MgPSAwOw0KCQkJCQkJ JGZsYWdzID0gKCRzbWRfdGh1bWJfYWN0aXZlX25ldykgPyAkZmxhZ3MgfCBTTURfVEhVTUJf QUNUSVZFIDogJGZsYWdzOw0KCQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfY3JvcCkgPyAk ZmxhZ3MgfCBTTURfVEhVTUJfQ1JPUCA6ICRmbGFnczsNCgkJCQkJCSRmbGFncyA9ICgkc21k X3RodW1iX3NoYXJwZW4pID8gJGZsYWdzIHwgU01EX1RIVU1CX1NIQVJQIDogJGZsYWdzOw0K DQoJCQkJCQlzYWZlX2luc2VydChTTURfVEhVTUIsDQoJCQkJCQkJIm5hbWU9JyIuZG9TbGFz aCgkbmV3bmFtZSkuIiciLg0KCQkJCQkJCSIsIHdpZHRoPSciLmRvU2xhc2goJHdpZHRoKS4i JyIuDQoJCQkJCQkJIiwgaGVpZ2h0PSciLmRvU2xhc2goJGhlaWdodCkuIiciLg0KCQkJCQkJ CSIsIHF1YWxpdHk9JyIuZG9TbGFzaCgkcXVhbGl0eSkuIiciLg0KCQkJCQkJCSIsIGZsYWdz PSciLmRvU2xhc2goJGZsYWdzKS4iJyINCgkJCQkJCSk7DQoNCgkJCQkJCS8vIEFsdGVyIHRo ZSBkZWZhdWx0IHRodW1ibmFpbA0KCQkJCQkJaWYgKCRzbWRfdGh1bWJfZGVmYXVsdCkgew0K CQkJCQkJCXNldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJG5ld25hbWUs ICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTik7DQoJCQkJCQl9DQoNCgkJCQkJCS8vIENyZWF0 ZSB0aGUgdGh1bWJuYWlsIGRpcmVjdG9yeQ0KCQkJCQkJQG1rZGlyKElNUEFUSC4kbmV3bmFt ZSk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCS8vIFVwZGF0ZSBleGlzdGlu ZyBwcm9maWxlDQoJCQkJJG5hbWUgPSBzYW5pdGl6ZUZvclVybCgkc21kX3RodW1iX25hbWUp Ow0KCQkJCSRleGlzdHMgPSBzYWZlX3JvdygnKicsIFNNRF9USFVNQiwgIm5hbWU9JyIuZG9T bGFzaCgkbmV3bmFtZSkuIiciKTsNCgkJCQlpZiAoJGV4aXN0cyAmJiBzdHJ0b2xvd2VyKCRu ZXduYW1lKSAhPSBzdHJ0b2xvd2VyKCRuYW1lKSkgew0KCQkJCQkkbXNnID0gc21kX3RodW1i X2dUeHQoJ3NtZF90aHVtYl9wcm9maWxlX2V4aXN0cycsIGFycmF5KCd7bmFtZX0nID0+IGRv U2xhc2goJG5ld25hbWUpKSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJaWYgKCRuZXduYW1lKSB7 DQoJCQkJCQkkZmxhZ3MgPSAwOw0KCQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfYWN0aXZl KSA/ICRmbGFncyB8IFNNRF9USFVNQl9BQ1RJVkUgOiAkZmxhZ3M7DQoJCQkJCQkkZmxhZ3Mg PSAoJHNtZF90aHVtYl9jcm9wKSA/ICRmbGFncyB8IFNNRF9USFVNQl9DUk9QIDogJGZsYWdz Ow0KCQkJCQkJJGZsYWdzID0gKCRzbWRfdGh1bWJfc2hhcnBlbikgPyAkZmxhZ3MgfCBTTURf VEhVTUJfU0hBUlAgOiAkZmxhZ3M7DQoNCgkJCQkJCXNhZmVfdXBkYXRlKA0KCQkJCQkJCVNN RF9USFVNQiwNCgkJCQkJCQkibmFtZT0nIi5kb1NsYXNoKCRuZXduYW1lKS4iJyINCgkJCQkJ CQkJLiIsIHdpZHRoPSciLmRvU2xhc2goJHdpZHRoKS4iJyINCgkJCQkJCQkJLiIsIGhlaWdo dD0nIi5kb1NsYXNoKCRoZWlnaHQpLiInIg0KCQkJCQkJCQkuIiwgcXVhbGl0eT0nIi5kb1Ns YXNoKCRxdWFsaXR5KS4iJyINCgkJCQkJCQkJLiIsIGZsYWdzPSciLmRvU2xhc2goJGZsYWdz KS4iJyINCgkJCQkJCQksICJuYW1lPSciLmRvU2xhc2goJG5hbWUpLiInIg0KCQkJCQkJKTsN Cg0KCQkJCQkJLy8gQWx0ZXIgdGhlIGRlZmF1bHQgdGh1bWJuYWlsDQoJCQkJCQlpZiAoJHNt ZF90aHVtYl9kZWZhdWx0KSB7DQoJCQkJCQkJc2V0X3ByZWYoJ3NtZF90aHVtYl9kZWZhdWx0 X3Byb2ZpbGUnLCAkbmV3bmFtZSwgJ3NtZF90aHVtYicsIFBSRUZfSElEREVOKTsNCgkJCQkJ CX0gZWxzZSB7DQoJCQkJCQkJLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IGZsYWcgaWYgdGhpcyB1 c2VkIHRvIGJlIHRoZSBkZWZhdWx0DQoJCQkJCQkJaWYgKGdldF9wcmVmKCdzbWRfdGh1bWJf ZGVmYXVsdF9wcm9maWxlJykgPT0gZG9TbGFzaCgkbmFtZSkpIHsNCgkJCQkJCQkJc2V0X3By ZWYoJ3NtZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgJ3NtZF90aHVtYicsIFBSRUZf SElEREVOKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoNCgkJCQkJCS8vIEFkanVzdCB0aGUgdGh1 bWJuYWlsIGRpcmVjdG9yeSBpZiB0aGUgbmFtZSBoYXMgY2hhbmdlZA0KCQkJCQkJaWYgKCRu ZXduYW1lICE9ICRuYW1lKSB7DQoJCQkJCQkJcmVuYW1lKElNUEFUSC4kbmFtZSwgSU1QQVRI LiRuZXduYW1lKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIHsN CgkJCSRtc2cgPSBzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3RhYmxlc19ub3RfaW5zdGFs bGVkJyk7DQoJCX0NCgkJJHN0ZXAgPSAnc21kX3RodW1iX3Byb2ZpbGUnOw0KCX0NCg0KCS8v IERlbGV0ZSBwcm9maWxlDQoJaWYgKCRzdGVwID09ICdzbWRfdGh1bWJfcHJvZmlsZV9kZWxl dGUnKSB7DQoJCWlmIChzbWRfdGh1bWJfdGFibGVfZXhpc3QoKSkgew0KCQkJJHR4cF9kZWwg PSBnZXRfcHJlZignc21kX3RodW1iX3R4cF9kZWxldGUnKTsNCgkJCSR0aGVfZGZsdCA9IGdl dF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycsIDEpOw0KDQoJCQlpZiAo IWVtcHR5KCRzbWRfdGh1bWJfbmFtZSkpIHsNCgkJCQkkbmFtZSA9IHNhbml0aXplRm9yVXJs KCRzbWRfdGh1bWJfbmFtZSk7DQoJCQkJJHJldCA9IHNhZmVfZGVsZXRlKFNNRF9USFVNQiwg Im5hbWU9JyIuZG9TbGFzaCgkbmFtZSkuIiciKTsNCgkJCQlpZiAoJHJldCkgew0KCQkJCQlz bWRfdGh1bWJfcm1kaXIoSU1QQVRILiRuYW1lKTsNCg0KCQkJCQkvLyBEZWxldGUgYWxsIFR4 cCB0aHVtYnMgdG9vPw0KCQkJCQlpZiAoKCRuYW1lID09ICR0aGVfZGZsdCkgJiYgKCR0eHBf ZGVsID09ICcxJykpIHsNCgkJCQkJCSRycyA9IHNhZmVfcm93cygnaWQsIGV4dCcsICd0eHBf aW1hZ2UnLCAndGh1bWJuYWlsID0gMScpOw0KCQkJCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cp IHsNCgkJCQkJCQkkcGF0aCA9IElNUEFUSC4kcm93WydpZCddLid0Jy4kcm93WydleHQnXTsN CgkJCQkJCQlpZiAoZmlsZV9leGlzdHMoJHBhdGgpKSB7DQoJCQkJCQkJCXVubGluaygkcGF0 aCk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScs ICd0aHVtYm5haWwgPSAwLCB0aHVtYl93ID0gMCwgdGh1bWJfaCA9IDAnLCAndGh1bWJuYWls ID0gMScpOw0KCQkJCQl9DQoNCgkJCQkJLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IGZsYWcgaWYg dGhpcyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0DQoJCQkJCWlmIChnZXRfcHJlZignc21kX3Ro dW1iX2RlZmF1bHRfcHJvZmlsZScpID09IGRvU2xhc2goJG5hbWUpKSB7DQoJCQkJCQlzZXRf cHJlZignc21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICcnLCAnc21kX3RodW1iJywgUFJF Rl9ISURERU4pOw0KCQkJCQl9DQoNCgkJCQkJJG1zZyA9IHNtZF90aHVtYl9nVHh0KCdzbWRf dGh1bWJfcHJvZmlsZV9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gZG9TbGFzaCgkbmFt ZSkpKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJJHN0ZXAgPSAnc21kX3RodW1iX3Byb2ZpbGUn Ow0KCX0NCg0KCSRxcyA9IGFycmF5KA0KCQkiZXZlbnQiID0+ICdpbWFnZScsDQoJCSJwYWdl IiA9PiAkcGFnZSwNCgkJInNvcnQiID0+ICRzb3J0LA0KCQkiZGlyIiA9PiAkZGlyLA0KCQki Y3JpdCIgPT4gJGNyaXQsDQoJCSJzZWFyY2hfbWV0aG9kIiA9PiAkc2VhcmNoX21ldGhvZCwN CgkpOw0KDQoJLy8gSW5qZWN0IHN0eWxlcw0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyI+JyAuICRzbWRfdGh1bWJfc3R5bGVzWydwcm9maWxlJ10gLiAnPC9zdHlsZT4nOw0KCSRw cml2cyA9IHNhZmVfZmllbGQoJ3ByaXZzJywgJ3R4cF91c2VycycsICJuYW1lID0gJyIuZG9T bGFzaCgkdHhwX3VzZXIpLiInIik7DQoJJHJpZ2h0cyA9IGluX2FycmF5KCRwcml2cywgJHNt ZF90aHVtYl9wcmV2cykgPyB0cnVlIDogZmFsc2U7DQoNCglpZiAoJHN0ZXAgPT0gJ3NtZF90 aHVtYl9wcmVmcycpIHsNCg0KCQkvLyAqKiBUSFVNQk5BSUwgUFJFRlMgKioNCg0KCQlpZiAo c21kX3RodW1iX3RhYmxlX2V4aXN0KCkpIHsNCgkJCSRwcm9fZGZsdCA9IGdldF9wcmVmKCdz bWRfdGh1bWJfZGVmYXVsdF9wcm9maWxlJywgJycsIDEpOw0KDQoJCQkvLyBTdWJzZWxlY3Qg bGlzdHMgZm9yIHR5cGUgJ2NhdCcgYW5kICd1c3InDQoJCQkkcnMgPSBnZXRUcmVlKCdyb290 JywgJ2ltYWdlJyk7DQoJCQkkYWxsQ2F0cyA9ICRycyA/IHRyZWVTZWxlY3RJbnB1dCgnc21k X3RodW1iX2NhdF9zZWxlY3RlZCcsICRycywgJycpIDogJyc7DQoJCQkkYWxsQ2F0cyA9ICI8 c3Bhbj4iLnN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICctJyksIGFycmF5KCcnLCAnJiM0NTsn KSwgc3RyX3JlcGxhY2UoJzwvJywgJzxcLycsIGFkZHNsYXNoZXMoJGFsbENhdHMpKSkuIjxc L3NwYW4+IjsNCgkJCSRycyA9IHNhZmVfY29sdW1uKCduYW1lJywgJ3R4cF91c2VycycsICJw cml2cyBub3QgaW4oMCw2KSBvcmRlciBieSBuYW1lIGFzYyIpOw0KCQkJJGFsbFVzcnMgPSAk cnMgPyBzZWxlY3RJbnB1dCgnc21kX3RodW1iX3Vzcl9zZWxlY3RlZCcsICRycywgJycsIHRy dWUpIDogJyc7DQoJCQkkYWxsVXNycyA9ICI8c3Bhbj4iLnN0cl9yZXBsYWNlKGFycmF5KCJc biIsICctJyksIGFycmF5KCcnLCAnJiM0NTsnKSwgc3RyX3JlcGxhY2UoJzwvJywgJzxcLycs IGFkZHNsYXNoZXMoJGFsbFVzcnMpKSkuIjxcL3NwYW4+IjsNCg0KCQkJZWNobyA8PDxFT0MN CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIHNtZF90aHVtYl9z d2l0Y2hfcHJlZihvYmosIG5hbWUpIHsNCglpZiAobmFtZSA9PSAnY3JlYXRlX2Zyb20nKSB7 DQoJCXN0YXRlID0galF1ZXJ5KG9iaikudmFsKCk7DQoJfSBlbHNlIHsNCgkJc3RhdGUgPSAo alF1ZXJ5KG9iaikucHJvcCgnY2hlY2tlZCcpKSA/IDEgOiAwOw0KCX0NCglzZW5kQXN5bmNF dmVudCgNCgl7DQoJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwNCgkJc3RlcDogJ3NtZF90 aHVtYl9zd2l0Y2hfcHJlZicsDQoJCXNtZF90aHVtYl90eHB0eXBlOiBuYW1lLA0KCQlzbWRf dGh1bWJfc3RhdGU6IHN0YXRlDQoJfSk7DQp9DQpmdW5jdGlvbiBzbWRfdGh1bWJfY29weV9z ZWxlY3RlZCgpIHsNCglqUXVlcnkoIiNpbWFnZXNfZm9ybSB0Ym9keSAubXVsdGktZWRpdCBp bnB1dDpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpIHsNCgkJalF1ZXJ5KCIjc21kX3RodW1i X3NlbGVjdGVkIikudmFsKGpRdWVyeSgiI3NtZF90aHVtYl9zZWxlY3RlZCIpLnZhbCgpICsg alF1ZXJ5KHRoaXMpLnZhbCgpICsgJywnKTsNCgl9KTsNCn0NCmZ1bmN0aW9uIHNtZF90aHVt Yl9zdWJzZWwob2JqKSB7DQoJb2JqID0galF1ZXJ5KG9iaik7DQoJZGVzdCA9IGpRdWVyeSgn I3NtZF90aHVtYl9zdWJzZWwnKTsNCglpdGVtID0gb2JqLnZhbCgpOw0KCXN3aXRjaCAoaXRl bSkgew0KCQljYXNlICdhbGwnOg0KCQljYXNlICdzZWwnOg0KCQkJZGVzdC5lbXB0eSgpOw0K CQkJYnJlYWs7DQoJCWNhc2UgJ2NhdCc6DQoJCQlkZXN0LmVtcHR5KCkucHJlcGVuZCgneyRh bGxDYXRzfScpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3Vzcic6DQoJCQlkZXN0LmVtcHR5KCku cHJlcGVuZCgneyRhbGxVc3JzfScpOw0KCQkJYnJlYWs7DQoJfQ0KfQ0KalF1ZXJ5KGZ1bmN0 aW9uKCkgew0KCWpRdWVyeSgnI3NtZF90aHVtYl9ncm91cF90eXBlJykuY2hhbmdlKCk7DQp9 KTsNCjwvc2NyaXB0Pg0KRU9DOw0KDQoJCQkkcG5sYnRuID0gJzxhIGNsYXNzPSJuYXZsaW5r IiBocmVmPSI/ZXZlbnQ9aW1hZ2Umc29ydD0nLiRzb3J0LicmZGlyPScuJGRpci4nJnBhZ2U9 Jy4kcGFnZS4nJnNlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC4nJmNyaXQ9Jy4kY3Jp dC4nIj4nLnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfYnRuX3BubCcpLic8L2E+JzsNCgkJ CSRncnBidG4gPSAnPGJ1dHRvbiBjbGFzcz0ibmF2bGluayIgdHlwZT0ic3VibWl0IiBvbmNs aWNrPSJzbWRfdGh1bWJfY29weV9zZWxlY3RlZCgpOyByZXR1cm4gY29uZmlybShcJycuc21k X3RodW1iX2dUeHQoJ3NtZF90aHVtYl9jcmVhdGVfZ3JvdXBfY29uZmlybScpLidcJyk7Ij4n LnNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfYWxsX3RodW1icycpLic8L2J1dHRvbj4nOw0K CQkJJGdycFR5cGVzID0gYXJyYXkoDQoJCQkJJ3NlbCcgPT4gc21kX3RodW1iX2dUeHQoJ3Nt ZF90aHVtYl9ieVNlbCcpLA0KCQkJCSdjYXQnID0+IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1 bWJfYnlDYXQnKSwNCgkJCQkndXNyJyA9PiBzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2J5 VXNyJyksDQoJCQkJJ2FsbCcgPT4gc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9ieUFsbCcp LA0KCQkJKTsNCg0KCQkJJGdycE9wdHMgPSBzZWxlY3RJbnB1dCgnc21kX3RodW1iX2dyb3Vw X3R5cGUnLCAkZ3JwVHlwZXMsIGdldF9wcmVmKCdwYW5lX3NtZF90aHVtYl9ncm91cF90eXBl JywgJ2FsbCcsIDEpLCAnJywgJ29uY2hhbmdlPSJzbWRfdGh1bWJfc3Vic2VsKHRoaXMpOyIn LCAnc21kX3RodW1iX2dyb3VwX3R5cGUnKS4nPHNwYW4gaWQ9InNtZF90aHVtYl9zdWJzZWwi Pjwvc3Bhbj4nOw0KDQoJCQkkb3V0W10gPSAnPGZpZWxkc2V0IGlkPSJzbWRfdGh1bWJfcHJv ZmlsZXMiPjxsZWdlbmQgY2xhc3M9InBsYWluIGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21k X3RodW1ibmFpbF9wcm9maWxlc192aXNpYmxlJykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48 YSBocmVmPSIjc21kX3RodW1ibmFpbF9wcm9maWxlcyI+Jy4oKCRyaWdodHMpID8gc21kX3Ro dW1iX2dUeHQoJ3NtZF90aHVtYl9wcm9maWxlX3ByZWZ0b29sX2hlYWRpbmcnKSA6IHNtZF90 aHVtYl9nVHh0KCdzbWRfdGh1bWJfcHJvZmlsZV90b29sX2hlYWRpbmcnKSkuJzwvYT48L2xl Z2VuZD48ZGl2IGlkPSJzbWRfdGh1bWJuYWlsX3Byb2ZpbGVzIiBjbGFzcz0idG9nZ2xlIiBz dHlsZT0iZGlzcGxheTonLihnZXRfcHJlZigncGFuZV9zbWRfdGh1bWJuYWlsX3Byb2ZpbGVz X3Zpc2libGUnKSA/ICdibG9jaycgOiAnbm9uZScpLiciPic7DQoJCQkkb3V0W10gPSAnPGRp diBjbGFzcz0ic21kX3RodW1iX2J0biI+Jy4kcG5sYnRuLic8L2Rpdj4nOw0KDQoJCQkkb3V0 W10gPSAnPGZpZWxkc2V0PjxsZWdlbmQ+Jy5zbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2Jh dGNoX2xlZ2VuZCcpLic8L2xlZ2VuZD4nOw0KCQkJJG91dFtdID0gJzxkaXYgaWQ9InNtZF90 aHVtYl9iYXRjaCI+PHNwYW4gaWQ9InNtZF90aHVtYl9iY3VyciI+PC9zcGFuPjxzcGFuIGlk PSJzbWRfdGh1bWJfYnRvdCI+PC9zcGFuPjwvZGl2Pic7DQoJCQkkb3V0W10gPSAnPGZvcm0g bWV0aG9kPSJwb3N0IiBuYW1lPSJzbWRfdGh1bWJfbXVsdGlfZWRpdCIgaWQ9InNtZF90aHVt Yl9tdWx0aV9lZGl0IiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkkb3V0W10g PSBzdGFydFRhYmxlKCdzbWRfY29udHJvbCcpOw0KCQkJJG91dFtdID0gZklucHV0KCdoaWRk ZW4nLCAnc21kX3RodW1iX3NlbGVjdGVkJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3Nt ZF90aHVtYl9zZWxlY3RlZCcpOw0KCQkJJG91dFtdID0gZUlucHV0KCRzbWRfdGh1bWJfZXZl bnQpOw0KCQkJJG91dFtdID0gc0lucHV0KCdzbWRfdGh1bWJfY3JlYXRlX2dyb3VwJyk7DQoJ CQkkb3V0W10gPSB0cih0ZChzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2JhdGNoX3ByZWFt YmxlJykuJGdycGJ0bi4kZ3JwT3B0cykpOw0KCQkJJG91dFtdID0gZW5kVGFibGUoKTsNCgkJ CSRvdXRbXSA9ICc8L2Zvcm0+JzsNCgkJCSRvdXRbXSA9ICc8L2ZpZWxkc2V0Pic7DQoNCgkJ CWlmICgkcmlnaHRzKSB7DQoJCQkJJG91dFtdID0gJzxmaWVsZHNldD48bGVnZW5kPicuc21k X3RodW1iX2dUeHQoJ3NtZF90aHVtYl9wcmVmcycpLic8L2xlZ2VuZD4nOw0KCQkJCSRvdXRb XSA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9InNtZF90aHVtYl9wcmVmcyIgaWQ9InNt ZF90aHVtYl9wcmVmc19mb3JtIiBhY3Rpb249Iicuam9pbl9xcygkcXMpLiciPic7DQoJCQkJ JG91dFtdID0gc3RhcnRUYWJsZSgnbGlzdCcpOw0KDQoJCQkJJHR4cF9yZiA9IGdldF9wcmVm KCdzbWRfdGh1bWJfY3JlYXRlX2Zyb20nLCAnZnVsbCcpOw0KCQkJCSRvdXRbXSA9IHRyKA0K CQkJCQl0ZGEoc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl90eHBfY3JlYXRlX2Zyb20nKSwg JyBjbGFzcz0icHJlZi1sYWJlbCInKSAuDQoJCQkJCXRkYSgNCgkJCQkJCSc8aW5wdXQgdHlw ZT0icmFkaW8iIG5hbWU9InNtZF90aHVtYl9jcmVhdGVfZnJvbSIgdmFsdWU9ImZ1bGwiJy4o KCR0eHBfcmY9PSdmdWxsJykgPyAnIiBjaGVja2VkPSJjaGVja2VkIicgOiAnJykuICcgY2xh c3M9InJhZGlvIiBvbmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9wcmVmKHRoaXMsIFwnY3Jl YXRlX2Zyb21cJyk7IiAvPicuc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl90eHBfY3JlYXRl X2Zyb21fZnVsbCcpDQoJCQkJCQkuJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic21kX3Ro dW1iX2NyZWF0ZV9mcm9tIiB2YWx1ZT0idGh1bWIiJy4oKCR0eHBfcmY9PSd0aHVtYicpID8g JyIgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLiAnIGNsYXNzPSJyYWRpbyIgb25jaGFuZ2U9 InNtZF90aHVtYl9zd2l0Y2hfcHJlZih0aGlzLCBcJ2NyZWF0ZV9mcm9tXCcpOyIgLz4nLnNt ZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfdHhwX2NyZWF0ZV9mcm9tX3RodW1iJykNCgkJCQkJ KSk7DQoNCgkJCQlpZiAoJHByb19kZmx0KSB7DQoJCQkJCSR0eHBfYyA9IGdldF9wcmVmKCdz bWRfdGh1bWJfdHhwX2NyZWF0ZScpOw0KCQkJCQkkdHhwX2QgPSBnZXRfcHJlZignc21kX3Ro dW1iX3R4cF9kZWxldGUnKTsNCgkJCQkJJG91dFtdID0gdHIoDQoJCQkJCQl0ZGEoc21kX3Ro dW1iX2dUeHQoJ3NtZF90aHVtYl90eHBfZGVmYXVsdF9zeW5jJyksICcgY2xhc3M9InByZWYt bGFiZWwiJykgLg0KCQkJCQkJdGRhKA0KCQkJCQkJCSc8aW5wdXQgdHlwZT0iY2hlY2tib3gi IG5hbWU9InNtZF90aHVtYl90eHBfY3JlYXRlIiB2YWx1ZT0iMSInLigoJHR4cF9jKSA/ICci IGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4gJyBjbGFzcz0iY2hlY2tib3giIG9uY2hhbmdl PSJzbWRfdGh1bWJfc3dpdGNoX3ByZWYodGhpcywgXCd0eHBfY3JlYXRlXCcpOyIgLz4nLg0K CQkJCQkJCXNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfY3JlYXRlJykuDQoJCQkJCQkJJzxp bnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic21kX3RodW1iX3R4cF9kZWxldGUiIHZhbHVl PSIxIicuKCgkdHhwX2QpID8gJyIgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLiAnIGNsYXNz PSJjaGVja2JveCIgb25jaGFuZ2U9InNtZF90aHVtYl9zd2l0Y2hfcHJlZih0aGlzLCBcJ3R4 cF9kZWxldGVcJyk7IiAvPicuDQoJCQkJCQkJc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9k ZWxldGUnKQ0KCQkJCQkJKSk7DQoJCQkJfQ0KDQoJCQkJJHR4cF9hciA9IGdldF9wcmVmKCdz bWRfdGh1bWJfYXV0b19yZXBsYWNlJyk7DQoJCQkJJG91dFtdID0gdHIoDQoJCQkJCXRkYShz bWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3R4cF9hdXRvX3JlcGxhY2UnKSwgJyBjbGFzcz0i cHJlZi1sYWJlbCBub2xpbmUiJykgLg0KCQkJCQl0ZGEoDQoJCQkJCQknPGlucHV0IHR5cGU9 ImNoZWNrYm94IiBuYW1lPSJzbWRfdGh1bWJfYXV0b19yZXBsYWNlIiB2YWx1ZT0iMSInLigo JHR4cF9hcikgPyAnIiBjaGVja2VkPSJjaGVja2VkIicgOiAnJykuICcgY2xhc3M9ImNoZWNr Ym94IiBvbmNoYW5nZT0ic21kX3RodW1iX3N3aXRjaF9wcmVmKHRoaXMsIFwnYXV0b19yZXBs YWNlXCcpOyIgLz4nDQoJCQkJCSwgJyBjbGFzcz0ibm9saW5lIicpKTsNCg0KCQkJCSRvdXRb XSA9IGVuZFRhYmxlKCk7DQoJCQkJJG91dFtdID0gJzwvZm9ybT48L2ZpZWxkc2V0Pic7DQoJ CQl9DQoJCQkkb3V0W10gPSAnPC9kaXY+PC9maWVsZHNldD4nOw0KCQl9DQoJfSBlbHNlIHsN Cg0KCQkvLyAqKiBUSFVNQk5BSUwgUFJPRklMRVMgKioNCg0KCQkkZWRpdEZvY3VzID0gKCRz dGVwID09ICdzbWRfdGh1bWJfcHJvZmlsZV9lZGl0JykgPyAnalF1ZXJ5KCIjc21kX3RodW1i X3Byb2ZpbGVfZWRpdGVkIGlucHV0W25hbWU9XCdzbWRfdGh1bWJfbmV3bmFtZVwnXSIpLmZv Y3VzKCk7JyA6ICcnOw0KDQoJCWVjaG8gPDw8RU9DDQo8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+DQpmdW5jdGlvbiBzbWRfdGh1bWJfdG9nZ2xlbmV3KCkgew0KCWJveCA9IGpR dWVyeSgiI3NtZF90aHVtYl9wcm9maWxlX2NyZWF0ZSIpOw0KCWlmIChib3guY3NzKCJkaXNw bGF5IikgPT0gIm5vbmUiKSB7DQoJCWJveC5zaG93KCk7DQoJfSBlbHNlIHsNCgkJYm94Lmhp ZGUoKTsNCgl9DQoJalF1ZXJ5KCJpbnB1dC5zbWRfZm9jdXMiKS5mb2N1cygpOw0KCXJldHVy biBmYWxzZTsNCn0NCmZ1bmN0aW9uIHNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlKG5hbWUpIHsN CglzZW5kQXN5bmNFdmVudCgNCgl7DQoJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwNCgkJ c3RlcDogJ3NtZF90aHVtYl9zd2l0Y2hfYWN0aXZlJywNCgkJc21kX3RodW1iX3Byb2ZpbGU6 IG5hbWUNCgl9LCBzbWRfdGh1bWJfc3dpdGNoX2FjdGl2ZV9kb25lKTsNCn0NCmZ1bmN0aW9u IHNtZF90aHVtYl9zd2l0Y2hfYWN0aXZlX2RvbmUoZGF0YSkgew0KCXZhciBzbWRfdGh1bWJf cHJvZmlsZSA9IGpRdWVyeSgnI3NtZF90aHVtYl9wcm9maWxlXycralF1ZXJ5KGRhdGEpLmZp bmQoJ3NtZF90aHVtYl9wcm9maWxlJykuYXR0cigndmFsdWUnKSk7DQoJc21kX3RodW1iX3By b2ZpbGUudG9nZ2xlQ2xhc3MoJ3NtZF9pbmFjdGl2ZScpOw0KCWlmIChzbWRfdGh1bWJfcHJv ZmlsZS5oYXNDbGFzcygnc21kX2luYWN0aXZlJykpIHsNCgkJc21kX3RodW1iX3Byb2ZpbGUu ZmluZCgnaW5wdXQ6Y2hlY2tib3gnKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7DQoJfSBlbHNl IHsNCgkJc21kX3RodW1iX3Byb2ZpbGUuZmluZCgnaW5wdXQ6Y2hlY2tib3gnKS5hdHRyKCdj aGVja2VkJywgJ2NoZWNrZWQnKTsNCgl9DQp9DQoNCmpRdWVyeShmdW5jdGlvbigpIHsNCglq UXVlcnkoJy5zbWRfdGh1bWJfaGVhZGluZ19hY3RpdmUnKS5jbGljayhmdW5jdGlvbigpIHsN CgkJalF1ZXJ5KCcuc21kX3RodW1iX3JvdyBpbnB1dDpjaGVja2JveCcpLmVhY2goZnVuY3Rp b24oKSB7DQoJCQlzbWRfdGh1bWJfc3dpdGNoX2FjdGl2ZShqUXVlcnkodGhpcykucGFyZW50 KCkuYXR0cignY2xhc3MnKSk7DQoJCX0pOw0KCX0pOw0KCXskZWRpdEZvY3VzfQ0KfSk7DQo8 L3NjcmlwdD4NCkVPQzsNCg0KCQkkbmV3YnRuID0gJzxhIGNsYXNzPSJuYXZsaW5rIiBocmVm PSIjIiBvbmNsaWNrPSJyZXR1cm4gc21kX3RodW1iX3RvZ2dsZW5ldygpOyI+Jy5zbWRfdGh1 bWJfZ1R4dCgnc21kX3RodW1iX25ldycpLic8L2E+Jm5ic3A7JzsNCgkJJHByZWZidG4gPSAn PGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD1pbWFnZSZzdGVwPXNtZF90aHVtYl9w cmVmcyZzb3J0PScuJHNvcnQuJyZkaXI9Jy4kZGlyLicmcGFnZT0nLiRwYWdlLicmc2VhcmNo X21ldGhvZD0nLiRzZWFyY2hfbWV0aG9kLicmY3JpdD0nLiRjcml0LiciPicuKCgkcmlnaHRz KSA/IHNtZF90aHVtYl9nVHh0KCdzbWRfdGh1bWJfYnRuX3Rvb2xzX3ByZWZzJykgOiBzbWRf dGh1bWJfZ1R4dCgnc21kX3RodW1iX2J0bl90b29scycpKS4nPC9hPic7DQoNCgkJJGhlYWRp bmdzID0gbi4nPHRoZWFkPicudHIodGRjcygkbmV3YnRuLCA5KSkudHIoDQoJCQluLmNvbHVt bl9oZWFkKCduYW1lJywgJ25hbWUnLCAnaW1hZ2UnLCBmYWxzZSwgJ2FzYycpLg0KCQkJY29s dW1uX2hlYWQoJ3RodW1iX3dpZHRoJywgJ3dpZHRoJywgJ2ltYWdlJywgZmFsc2UpLg0KCQkJ Y29sdW1uX2hlYWQoJ3RodW1iX2hlaWdodCcsICdoZWlnaHQnLCAnaW1hZ2UnLCBmYWxzZSku DQoJCQljb2x1bW5faGVhZChzbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3F1YWxpdHknKSwg J3F1YWxpdHknLCAnaW1hZ2UnLCBmYWxzZSkuDQoJCQljb2x1bW5faGVhZCgna2VlcF9zcXVh cmVfcGl4ZWxzJywgJ2Nyb3AnLCAnaW1hZ2UnLCBmYWxzZSkuDQoJCQljb2x1bW5faGVhZChz bWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3NoYXJwZW4nKSwgJ3NoYXJwZW4nLCAnaW1hZ2Un LCBmYWxzZSkuDQoJCQljb2x1bW5faGVhZCgnYWN0aXZlJywgJ2FjdGl2ZScsICdpbWFnZScs IGZhbHNlLCAnJywgJycsICcnLCAnc21kX3RodW1iX2hlYWRpbmdfYWN0aXZlJykuDQoJCQlj b2x1bW5faGVhZCgnZGVmYXVsdCcsICdkZWZhdWx0JywgJ2ltYWdlJywgZmFsc2UpLg0KCQkJ Y29sdW1uX2hlYWQoc21kX3RodW1iX2dUeHQoJ3NtZF90aHVtYl9hY3Rpb25zJyksICdhY3Rp b25zJywgJ2ltYWdlJywgZmFsc2UpDQoJCSkuJzwvdGhlYWQ+JzsNCg0KCQkkb3V0W10gPSAn PGZpZWxkc2V0IGlkPSJzbWRfdGh1bWJfcHJvZmlsZXMiPjxsZWdlbmQgY2xhc3M9InBsYWlu IGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFpbF9wcm9maWxlc192aXNpYmxl JykgPyAnIGV4cGFuZGVkJyA6ICcnKS4nIj48YSBocmVmPSIjc21kX3RodW1ibmFpbF9wcm9m aWxlcyI+Jy5zbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX3Byb2ZpbGVfaGVhZGluZycpLic8 L2E+PC9sZWdlbmQ+PGRpdiBpZD0ic21kX3RodW1ibmFpbF9wcm9maWxlcyIgY2xhc3M9InRv Z2dsZSIgc3R5bGU9ImRpc3BsYXk6Jy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3RodW1ibmFpbF9w cm9maWxlc192aXNpYmxlJykgPyAnYmxvY2snIDogJ25vbmUnKS4nIj4nOw0KCQkkb3V0W10g PSAnPGRpdiBjbGFzcz0ic21kX3RodW1iX2J0biI+Jy4kcHJlZmJ0bi4nPC9kaXY+JzsNCg0K CQkvLyBNYWluIGxpc3Qgb2YgcHJvZmlsZXMNCgkJJG91dFtdID0gJzxmb3JtIG1ldGhvZD0i cG9zdCIgbmFtZT0ic21kX3RodW1iX3Byb2ZpbGVfZm9ybSIgaWQ9InNtZF90aHVtYl9wcm9m aWxlX2Zvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsNCgkJJG91dFtdID0gc3Rh cnRUYWJsZSgnbGlzdCcpOw0KCQkkb3V0W10gPSAkaGVhZGluZ3M7DQoNCgkJaWYgKHNtZF90 aHVtYl90YWJsZV9leGlzdCgpKSB7DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURfVEhV TUIsICcxPTEgT1JERVIgQlkgbmFtZScpOw0KCQkJJHByb19kZmx0ID0gZ2V0X3ByZWYoJ3Nt ZF90aHVtYl9kZWZhdWx0X3Byb2ZpbGUnLCAnJywgMSk7DQoNCgkJCS8vIE5ldyBQcm9maWxl IHJvdw0KCQkJJG91dFtdPSAnPHRyIGlkPSJzbWRfdGh1bWJfcHJvZmlsZV9jcmVhdGUiIGNs YXNzPSJzbWRfaGlkZGVuIj4nOw0KCQkJJG91dFtdID0gdGQoc0lucHV0KCdzbWRfdGh1bWJf cHJvZmlsZV9zYXZlJykuZklucHV0KCd0ZXh0JywgJ3NtZF90aHVtYl9uZXduYW1lJywgKCgk c3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICRzbWRfdGh1bWJfbmFtZSA6ICcn KSwgJ3NtZF9mb2N1cycpKQ0KCQkJCS50ZChmSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX3dp ZHRoJywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ICR3aWR0aCA6ICcn KSwgJycsICcnLCAnJywgJzQnKSkNCgkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVt Yl9oZWlnaHQnLCAoKCRzdGVwPT0nc21kX3RodW1iX3Byb2ZpbGVfc2F2ZScpID8gJGhlaWdo dCA6ICcnKSwgJycsICcnLCAnJywgJzQnKSkNCgkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3Nt ZF90aHVtYl9xdWFsaXR5JywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ ICRxdWFsaXR5IDogJycpLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJCS50ZChjaGVja2JveCgn c21kX3RodW1iX2Nyb3AnLCAnMScsICgoJHN0ZXA9PSdzbWRfdGh1bWJfcHJvZmlsZV9zYXZl JykgPyAkc21kX3RodW1iX2Nyb3AgOiAwKSkpDQoJCQkJLnRkKGNoZWNrYm94KCdzbWRfdGh1 bWJfc2hhcnBlbicsICcxJywgKCgkc3RlcD09J3NtZF90aHVtYl9wcm9maWxlX3NhdmUnKSA/ ICRzbWRfdGh1bWJfc2hhcnBlbiA6IDApKSkNCgkJCQkudGQoY2hlY2tib3goJ3NtZF90aHVt Yl9hY3RpdmVfbmV3JywgJzEnLCAxKSkNCgkJCQkudGQoY2hlY2tib3goJ3NtZF90aHVtYl9k ZWZhdWx0JywgJzEnLCAwKSkNCgkJCQkudGQoZklucHV0KCdzdWJtaXQnLCAnc21kX3RodW1i X2FkZCcsIGdUeHQoJ2FkZCcpLCAnc21hbGxlcmJveCcpKTsNCgkJCSRvdXRbXT0gJzwvdHI+ JzsNCg0KCQkJLy8gUmVtYWluaW5nIHJvd3MNCgkJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7 DQoJCQkJJGxpbmtfZWR0ID0gam9pbl9xcygkcXMpLicmIzM4O3N0ZXA9c21kX3RodW1iX3By b2ZpbGVfZWRpdCYjMzg7c21kX3RodW1iX25hbWU9Jy4kcm93WyduYW1lJ107DQoJCQkJJGxp bmtfZGVsID0gam9pbl9xcygkcXMpLicmIzM4O3N0ZXA9c21kX3RodW1iX3Byb2ZpbGVfZGVs ZXRlJiMzODtzbWRfdGh1bWJfbmFtZT0nLiRyb3dbJ25hbWUnXTsNCgkJCQkkYnRuRWR0ID0g JzxhIGhyZWY9IicuJGxpbmtfZWR0LiciPlsnIC4gZ1R4dCgnZWRpdCcpIC4gJ108L2E+JzsN CgkJCQkkYnRuRGVsID0gJzxhIGhyZWY9IicuJGxpbmtfZGVsLiciIG9uY2xpY2s9InJldHVy biBjb25maXJtKFwnJy5zbWRfdGh1bWJfZ1R4dCgnc21kX3RodW1iX2RlbGV0ZV9jb25maXJt JywgYXJyYXkoIntuYW1lfSIgPT4gJHJvd1snbmFtZSddKSkuJ1wnKTsiPlsnIC4gZ1R4dCgn ZGVsZXRlJykgLiAnXTwvYT4nOw0KCQkJCSRhY3RpdmUgPSAoJHJvd1snZmxhZ3MnXSAmIFNN RF9USFVNQl9BQ1RJVkUpID8gMSA6IDA7DQoJCQkJJGNyb3AgPSAoJHJvd1snZmxhZ3MnXSAm IFNNRF9USFVNQl9DUk9QKSA/IDEgOiAwOw0KCQkJCSRzaGFycGVuID0gKCRyb3dbJ2ZsYWdz J10gJiBTTURfVEhVTUJfU0hBUlApID8gMSA6IDA7DQoNCgkJCQlpZiAoJHN0ZXAgPT0gJ3Nt ZF90aHVtYl9wcm9maWxlX2VkaXQnICYmICRyb3dbJ25hbWUnXSA9PSAkc21kX3RodW1iX25h bWUpIHsNCgkJCQkJJGJ0blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGh1bWJfc2F2 ZScsIGdUeHQoJ1NhdmUnKSwgJ3NtYWxsZXJib3gnKTsNCgkJCQkJJGJ0bkNhbmNlbCA9IGZJ bnB1dCgnc3VibWl0JywgJ3NtZF90aHVtYl9jYW5jZWwnLCBnVHh0KCdDYW5jZWwnKSwgJ3Nt YWxsZXJib3gnKTsNCgkJCQkJJG91dFtdID0gdHIoDQoJCQkJCQl0ZChoSW5wdXQoJ3NtZF90 aHVtYl9uYW1lJywgJHJvd1snbmFtZSddKS5mSW5wdXQoJ3RleHQnLCAnc21kX3RodW1iX25l d25hbWUnLCAkcm93WyduYW1lJ10pKQ0KCQkJCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRf dGh1bWJfd2lkdGgnLCAkcm93Wyd3aWR0aCddLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJCQkJ LnRkKGZJbnB1dCgndGV4dCcsICdzbWRfdGh1bWJfaGVpZ2h0JywgJHJvd1snaGVpZ2h0J10s ICcnLCAnJywgJycsICc0JykpDQoJCQkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF90aHVt Yl9xdWFsaXR5JywgJHJvd1sncXVhbGl0eSddLCAnJywgJycsICcnLCAnNCcpKQ0KCQkJCQkJ LnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfY3JvcCcsICcxJywgJGNyb3ApKQ0KCQkJCQkJLnRk KGNoZWNrYm94KCdzbWRfdGh1bWJfc2hhcnBlbicsICcxJywgJHNoYXJwZW4pKQ0KCQkJCQkJ LnRkKGNoZWNrYm94KCdzbWRfdGh1bWJfYWN0aXZlJywgJzEnLCAkYWN0aXZlKSwgJycsICRy b3dbJ25hbWUnXSkNCgkJCQkJCS50ZChjaGVja2JveCgnc21kX3RodW1iX2RlZmF1bHQnLCAn MScsICgoJHJvd1snbmFtZSddID09ICRwcm9fZGZsdCkgPyAxIDogMCkpKQ0KCQkJCQkJLnRk KCRidG5TYXZlLiRidG5DYW5jZWwpDQoJCQkJCSwgJyBpZD0ic21kX3RodW1iX3Byb2ZpbGVf ZWRpdGVkIicpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRvdXRbXSA9IHRyKA0KCQkJCQkJdGQo aHJlZigkcm93WyduYW1lJ10sICRsaW5rX2VkdCkpLg0KCQkJCQkJdGQoJHJvd1snd2lkdGgn XSkuDQoJCQkJCQl0ZCgkcm93WydoZWlnaHQnXSkuDQoJCQkJCQl0ZCgkcm93WydxdWFsaXR5 J10pLg0KCQkJCQkJdGQoKCRjcm9wKSA/IGdUeHQoJ3llcycpIDogZ1R4dCgnbm8nKSkuDQoJ CQkJCQl0ZCgoJHNoYXJwZW4pID8gZ1R4dCgneWVzJykgOiBnVHh0KCdubycpKS4NCgkJCQkJ CXRkKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNtZF90aHVtYl9hY3RpdmVfJy4k cm93WyduYW1lJ10uJyIgdmFsdWU9IjEiJy4oKCRhY3RpdmUpID8gJyIgY2hlY2tlZD0iY2hl Y2tlZCInIDogJycpLiAnIGNsYXNzPSJjaGVja2JveCIgb25jaGFuZ2U9InNtZF90aHVtYl9z d2l0Y2hfYWN0aXZlKFwnJy4kcm93WyduYW1lJ10uJ1wnKTsiIC8+JywgJycsICRyb3dbJ25h bWUnXSkuDQoJCQkJCQl0ZCgoJHJvd1snbmFtZSddID09ICRwcm9fZGZsdCkgPyBnVHh0KCd5 ZXMnKSA6IGdUeHQoJ25vJykpLg0KCQkJCQkJdGQoJGJ0bkRlbCkNCgkJCQkJLCAnIGlkPSJz bWRfdGh1bWJfcHJvZmlsZV8nLiRyb3dbJ25hbWUnXS4nIiBjbGFzcz0ic21kX3RodW1iX3Jv dycgLiAoKCRhY3RpdmUpID8gJycgOiAnIHNtZF9pbmFjdGl2ZScpLiciJyk7DQoJCQkJfQ0K CQkJfQ0KCQl9DQoNCgkJJG91dFtdID0gZW5kVGFibGUoKTsNCgkJJG91dFtdID0gJzwvZm9y bT48L2Rpdj48L2ZpZWxkc2V0Pic7DQoJfQ0KDQoJcmV0dXJuIGpvaW4oJycsICRvdXQpOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFVzZWZ1bCBmdW5jdGlvbiBm b3Igb3RoZXIgcGx1Z2lucyB0byB1c2UgdG8gcmV0cmlldmUgYSBsaXN0IG9mIGN1cnJlbnQg cHJvZmlsZXMNCmZ1bmN0aW9uIHNtZF90aHVtYl9nZXRfcHJvZmlsZXMoJGFjdGl2ZT0xLCAk b3JkZXI9J25hbWUnKSB7DQoJJGFsbG93ZWRPcmRlcnMgPSBhcnJheSgnbmFtZScsICd3aWR0 aCcsICdoZWlnaHQnLCdxdWFsaXR5Jyk7DQoJJG9yZGVyID0gaW5fYXJyYXkoJG9yZGVyLCAk YWxsb3dlZE9yZGVycykgPyAkb3JkZXIgOiAnbmFtZSc7DQoNCgkkd2hlcmVbXSA9ICcxPTEn Ow0KCWlmICgkYWN0aXZlKSB7DQoJCSR3aGVyZVtdID0gJ2ZsYWdzICYgJy5TTURfVEhVTUJf QUNUSVZFOw0KCX0NCg0KCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9USFVNQiwgam9pbign IEFORCAnLCAkd2hlcmUpIC4gJyBPUkRFUiBCWSAnLiRvcmRlcik7DQoNCglyZXR1cm4gJHJz Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERlbGV0ZSBhIHRodW1i bmFpbCBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cw0KZnVuY3Rpb24gc21kX3RodW1iX3Jt ZGlyKCRkaXIpIHsNCglpZiAoaXNfZGlyKCRkaXIpKSB7DQoJCSRvYmplY3RzID0gc2NhbmRp cigkZGlyKTsNCgkJZm9yZWFjaCAoJG9iamVjdHMgYXMgJG9iamVjdCkgew0KCQkJaWYgKCRv YmplY3QgIT0gIi4iICYmICRvYmplY3QgIT0gIi4uIikgew0KCQkJCWlmIChmaWxldHlwZSgk ZGlyLkRTLiRvYmplY3QpID09ICJkaXIiKSBzbWRfdGh1bWJfcm1kaXIoJGRpci5EUy4kb2Jq ZWN0KTsgZWxzZSB1bmxpbmsoJGRpci5EUy4kb2JqZWN0KTsNCgkJCX0NCgkJfQ0KCQlyZXNl dCgkb2JqZWN0cyk7DQoJCXJtZGlyKCRkaXIpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGh1bWJfc2V0X2ltcGF0aCgpIHsNCglnbG9i YWwgJHBhdGhfdG9fc2l0ZSwgJGltZ19kaXI7DQoJaWYgKCFkZWZpbmVkKCdJTVBBVEgnKSkg ew0KCQlkZWZpbmUoJ0lNUEFUSCcsICRwYXRoX3RvX3NpdGUuRFMuJGltZ19kaXIuRFMpOw0K CX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBZGQgdGh1bWJuYWls IHRhYmxlIGlmIG5vdCBhbHJlYWR5IGluc3RhbGxlZA0KLy8gRmxhZ3M6IEJpdCAwPUFjdGl2 ZSAvIDE9Q3JvcCAvIDIgPSBTaGFycGVuDQpmdW5jdGlvbiBzbWRfdGh1bWJfdGFibGVfaW5z dGFsbCgpIHsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsNCgkkcmV0ID0gJyc7 DQoJJHNxbCA9IGFycmF5KCk7DQoJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ U1RTIGAiLlBGWC5TTURfVEhVTUIuImAgKA0KCQlgbmFtZWAgdmFyY2hhcigzMikgTk9UIE5V TEwgZGVmYXVsdCAnJywNCgkJYHdpZHRoYCBpbnQoNCkgTk9UIE5VTEwgZGVmYXVsdCAnMCcs DQoJCWBoZWlnaHRgIGludCg0KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJYHF1YWxpdHlg IHRpbnlpbnQoMikgTlVMTCBkZWZhdWx0ICc3NScsDQoJCWBmbGFnc2AgdGlueWludCgyKSBO T1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJUFJJTUFSWSBLRVkgKGBuYW1lYCkNCgkpIEVOR0lO RT1NeUlTQU0iOw0KDQoJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCWRtcCgkc3FsKTsNCgl9DQoJ Zm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCSRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOw0K CQlpZiAoJHJldD09PWZhbHNlKSB7DQoJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7 DQoJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlz cWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7 DQoJCX0NCgl9DQoNCgkvLyBCYWNrdXAgdGhlIGN1cnJlbnQgdGh1bWIgcHJlZnMNCgkkZXhp c3RzID0gc2FmZV9yb3coJyonLCAndHhwX3ByZWZzJywgIm5hbWU9J3NtZF90aHVtYl9iYWNr dXBfdyciKTsNCglpZiAoISRleGlzdHMpIHsNCgkJc2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNr dXBfdycsIGdldF9wcmVmKCd0aHVtYl93JyksICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwg J3RleHRfaW5wdXQnLCAwKTsNCgkJc2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfaCcsIGdl dF9wcmVmKCd0aHVtYl9oJyksICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5w dXQnLCAxKTsNCgkJc2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfYycsIGdldF9wcmVmKCd0 aHVtYl9jcm9wJyksICdzbWRfdGh1bWInLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnLCAy KTsNCg0KCQkvLyBFcmFzZSB0aGUgY3VycmVudCB0aHVtYiBwcmVmcw0KCQlzZXRfcHJlZign dGh1bWJfdycsICcnLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7DQoJCXNldF9wcmVmKCd0aHVt Yl9oJywgJycsICdpbWFnZScsIFBSRUZfSElEREVOKTsNCgkJc2V0X3ByZWYoJ3RodW1iX2Ny b3AnLCAnJywgJ2ltYWdlJywgUFJFRl9ISURERU4pOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBEcm9wIHRhYmxlIGlmIGluIGRhdGFiYXNlDQpmdW5jdGlv biBzbWRfdGh1bWJfdGFibGVfcmVtb3ZlKCkgew0KCSRyZXQgPSAnJzsNCgkkc3FsID0gYXJy YXkoKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsNCglpZiAoc21kX3RodW1i X3RhYmxlX2V4aXN0KCkpIHsNCgkJJHNxbFtdID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIg LlBGWC5TTURfVEhVTUIuICI7ICI7DQoJCWlmKGdwcygnZGVidWcnKSkgew0KCQkJZG1wKCRz cWwpOw0KCQl9DQoJCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkJJHJldCA9IHNhZmVf cXVlcnkoJHFyeSk7DQoJCQlpZiAoJHJldD09PWZhbHNlKSB7DQoJCQkJJEdMT0JBTFNbJ3R4 cF9lcnJfY291bnQnXSsrOw0KCQkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291 bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQkJZWNobyAiPCEt LVxuICRxcnkgXG4tLT5cbiI7DQoJCQl9DQoJCX0NCgl9DQoNCgkvLyBSZXN0b3JlIHRoZSBv cmlnaW5hbCB0aHVtYiBwcmVmcw0KCSRleGlzdHMgPSBzYWZlX3JvdygnKicsICd0eHBfcHJl ZnMnLCAibmFtZT0nc21kX3RodW1iX2JhY2t1cF93JyIpOw0KCWlmICgkZXhpc3RzKSB7DQoJ CXNldF9wcmVmKCd0aHVtYl93JywgZ2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfdycpLCAn aW1hZ2UnLCBQUkVGX0hJRERFTik7DQoJCXNldF9wcmVmKCd0aHVtYl9oJywgZ2V0X3ByZWYo J3NtZF90aHVtYl9iYWNrdXBfaCcpLCAnaW1hZ2UnLCBQUkVGX0hJRERFTik7DQoJCXNldF9w cmVmKCd0aHVtYl9jcm9wJywgZ2V0X3ByZWYoJ3NtZF90aHVtYl9iYWNrdXBfYycpLCAnaW1h Z2UnLCBQUkVGX0hJRERFTik7DQoNCgl9DQoJLy8gRXJhc2UgdGhlIGJhY2t1cCB0aHVtYiBw cmVmcw0KCXNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCAibmFtZSBJTignc21kX3RodW1iX2Jh Y2t1cF93JywgJ3NtZF90aHVtYl9iYWNrdXBfaCcsICdzbWRfdGh1bWJfYmFja3VwX2MnLCAn c21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScsICdwYW5lX3NtZF90aHVtYm5haWxfcHJvZmls ZXNfdmlzaWJsZScsICdwYW5lX3NtZF90aHVtYm5haWxzX3Zpc2libGUnKSIpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYl90YWJsZV9l eGlzdCgkYWxsPScnKSB7DQoJaWYgKCRhbGwpIHsNCgkJJHRibHMgPSBhcnJheShTTURfVEhV TUIgPT4gNSk7DQoJCSRvdXQgPSBjb3VudCgkdGJscyk7DQoJCWZvcmVhY2ggKCR0YmxzIGFz ICR0YmwgPT4gJGNvbHMpIHsNCgkJCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJCQllY2hvICIr KyBUQUJMRSAiLiR0YmwuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRi bCkpLiIgQ09MVU1OUzsgUkVRVUlSRVMgIi4kY29scy4iICsrIi5icjsNCgkJCX0NCgkJCWlm IChjb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpID09ICRjb2xzKSB7DQoJCQkJ JG91dC0tOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAoJG91dD09PTApID8gMSA6IDA7DQoJfSBl bHNlIHsNCgkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJZWNobyAiKysgVEFCTEUgIi5TTURf VEhVTUIuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgU01EX1RIVU1CKSku IiBDT0xVTU5TOyI7DQoJCX0NCgkJcmV0dXJuKEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURf VEhVTUIpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90aHVtYm5haWxf c2F2ZV9wYW5lX3N0YXRlKCkgew0KCSRwYW5lcyA9IGFycmF5KCdzbWRfdGh1bWJuYWlsX3By b2ZpbGVzJywgJ3NtZF90aHVtYm5haWxzJyk7DQoJJHBhbmUgPSBncHMoJ3BhbmUnKTsNCglp ZiAoaW5fYXJyYXkoJHBhbmUsICRwYW5lcykpDQoJew0KCQlzZXRfcHJlZigicGFuZV97JHBh bmV9X3Zpc2libGUiLCAoZ3BzKCd2aXNpYmxlJykgPT0gJ3RydWUnID8gJzEnIDogJzAnKSwg J3NtZF90aHVtYicsIFBSRUZfSElEREVOLCAneWVzbm9yYWRpbycsIDAsIFBSRUZfUFJJVkFU RSk7DQoJCXNlbmRfeG1sX3Jlc3BvbnNlKCk7DQoJfSBlbHNlIHsNCgkJc2VuZF94bWxfcmVz cG9uc2UoYXJyYXkoJ2h0dHAtc3RhdHVzJyA9PiAnNDAwIEJhZCBSZXF1ZXN0JykpOw0KCX0N Cn0NCg0KLy8qKioqKioqKioqKioqKioqKg0KLy8gUFVCTElDIFNJREUgVEFHUw0KLy8qKioq KioqKioqKioqKioqKg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBz bWRfdGh1bWJuYWlsKCRhdHRzKSB7DQoJZ2xvYmFsICR0aGlzaW1hZ2UsICRpbWdfZGlyOw0K DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3R5cGUnICAgICAgID0+IEBnZXRfcHJlZign c21kX3RodW1iX2RlZmF1bHRfcHJvZmlsZScpLA0KCQknaWQnICAgICAgICAgPT4gJycsDQoJ CSduYW1lJyAgICAgICA9PiAnJywNCgkJJ2VzY2FwZScgICAgID0+ICdodG1sJywNCgkJJ3dy YXB0YWcnICAgID0+ICcnLA0KCQknY2xhc3MnICAgICAgPT4gJycsDQoJCSdodG1sX2lkJyAg ICA9PiAnJywNCgkJJ3N0eWxlJyAgICAgID0+ICcnLA0KCQknbGluaycgICAgICAgPT4gJycs DQoJCSdsaW5rX3JlbCcgICA9PiAnJywNCgkJJ3BvcGxpbmsnICAgID0+IDAsDQoJCSdhZGRf c3RhbXAnICA9PiAwLA0KCQknZm9yY2Vfc2l6ZScgPT4gJycsDQoJCSdkaXNwbGF5JyAgICA9 PiAndGh1bWJuYWlsJywgLy8gdGh1bWJuYWlsIChmdWxsIGltZyB0YWcpIG9yIHVybA0KCSks JGF0dHMpKTsNCg0KCWlmICgkbmFtZSkgew0KCQkkbmFtZSA9IGRvU2xhc2goJG5hbWUpOw0K CQkkcnMgPSBzYWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAibmFtZSA9ICckbmFtZScgbGlt aXQgMSIpOw0KCX0gZWxzZWlmICgkaWQpIHsNCgkJJGlkID0gKGludCkgJGlkOw0KCQkkcnMg PSBzYWZlX3JvdygnKicsICd0eHBfaW1hZ2UnLCAiaWQgPSAkaWQgbGltaXQgMSIpOw0KCX0g ZWxzZWlmICgkdGhpc2ltYWdlKSB7DQoJCSRpZCA9IChpbnQpICR0aGlzaW1hZ2VbJ2lkJ107 DQoJCSRycyA9ICR0aGlzaW1hZ2U7DQoJfSBlbHNlIHsNCgkJdHJpZ2dlcl9lcnJvcihnVHh0 KCd1bmtub3duX2ltYWdlJykpOw0KCQlyZXR1cm47DQoJfQ0KDQoJc21kX3RodW1iX3NldF9p bXBhdGgoKTsNCg0KCWlmICgkcnMpIHsNCgkJZXh0cmFjdCgkcnMpOw0KCQkkdGh1bWJpbmZv ID0gc2FmZV9yb3coJyonLCBTTURfVEhVTUIsICJuYW1lPSciLmRvU2xhc2goJHR5cGUpLiIn Iik7DQoJCWlmICgkdGh1bWJpbmZvKSB7DQoJCQkkZGlyID0gc2FuaXRpemVGb3JVcmwoJHRo dW1iaW5mb1snbmFtZSddKTsNCgkJCSRwYXRoID0gSU1QQVRILiRkaXIuRFMuJGlkLiRleHQ7 DQoJCQlpZiAoZmlsZV9leGlzdHMoJHBhdGgpKSB7DQoJCQkJLy8gRHJvcCBvdXQgaWYgYWxs IHdlIG5lZWQgdG8gZGlzcGxheSBpcyB0aGUgdGh1bWIncyBVUkwNCgkJCQlpZiAoJGRpc3Bs YXkgPT0gJ3VybCcpIHsNCgkJCQkJcmV0dXJuIGlodS4kaW1nX2Rpci4nLycuJGRpci4nLycu JGlkLiRleHQ7DQoJCQkJfQ0KCQkJCWlmICgkZXNjYXBlID09ICdodG1sJykgew0KCQkJCQkk YWx0ID0gaHRtbHNwZWNpYWxjaGFycygkYWx0KTsNCgkJCQkJJGNhcHRpb24gPSBodG1sc3Bl Y2lhbGNoYXJzKCRjYXB0aW9uKTsNCgkJCQl9DQoNCgkJCQkkbWV0YVsnYWx0J10gPSAkYWx0 Ow0KCQkJCSRmb3JjZV9zaXplID0gZG9fbGlzdCgkZm9yY2Vfc2l6ZSk7DQoJCQkJaWYgKGlu X2FycmF5KCd3aWR0aCcsICRmb3JjZV9zaXplKSkgew0KCQkJCQkkbWV0YVsnZm9yY2V3J10g PSAxOw0KCQkJCX0NCgkJCQlpZiAoaW5fYXJyYXkoJ2hlaWdodCcsICRmb3JjZV9zaXplKSkg ew0KCQkJCQkkbWV0YVsnZm9yY2VoJ10gPSAxOw0KCQkJCX0NCgkJCQlpZiAoJGFkZF9zdGFt cCA9PSAwKSB7ICRtZXRhWydzdGFtcCddID0gMTsgfSAvLyBOZWdhdGl2ZSBsb2dpYyBzaW5j ZSB3ZSB3YW50IHRoZSBzdGFtcCBvbiBieSBkZWZhdWx0IGZvciB0aGUgYWRtaW4gc2lkZQ0K CQkJCWlmICgkY2FwdGlvbikgeyAkbWV0YVsndGl0bGUnXSA9ICRjYXB0aW9uOyB9DQoJCQkJ aWYgKCRodG1sX2lkICYmICEkd3JhcHRhZykgeyAkbWV0YVsnaWQnXSA9ICRodG1sX2lkOyB9 DQoJCQkJaWYgKCRjbGFzcyAmJiAhJHdyYXB0YWcpIHsgJG1ldGFbJ2NsYXNzJ10gPSAkY2xh c3M7IH0gZWxzZSB7ICRjbGFzcz0kdHlwZTsgfQ0KCQkJCWlmICgkc3R5bGUpIHsgJG1ldGFb J3N0eWxlJ10gPSAkc3R5bGU7IH0NCg0KCQkJCSRvdXQgPSBzbWRfdGh1bWJfaW1nKCR0aHVt YmluZm8sICRycywgJG1ldGEpOw0KDQoJCQkJaWYgKCRsaW5rKSB7DQoJCQkJCSRvdXQgPSBo cmVmKCRvdXQsIGltYWdlc3JjdXJsKCRpZCwgJGV4dCksICghZW1wdHkoJGxpbmtfcmVsKSA/ ICcgcmVsPSInLiRsaW5rX3JlbC4nIicgOiAnJykuJyB0aXRsZT0iJy4kY2FwdGlvbi4nIicp Ow0KCQkJCX0gZWxzZWlmICgkcG9wbGluaykgew0KCQkJCQkkb3V0ID0gJzxhIGhyZWY9Iicu aW1hZ2VzcmN1cmwoJGlkLCAkZXh0KS4nIicuDQoJCQkJCQknIG9uY2xpY2s9IndpbmRvdy5v cGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCAnLg0KCQkJCQkJJ1wnd2lkdGg9Jy4k dy4nLCBoZWlnaHQ9Jy4kaC4nLCBzY3JvbGxiYXJzLCByZXNpemFibGVcJyk7IHJldHVybiBm YWxzZTsiPicuJG91dC4nPC9hPic7DQoJCQkJfQ0KDQoJCQkJcmV0dXJuICgkd3JhcHRhZykg PyBkb1RhZygkb3V0LCAkd3JhcHRhZywgJGNsYXNzLCAnJywgJGh0bWxfaWQpIDogJG91dDsN CgkJCX0NCgkJfQ0KCX0NCg0KCXRyaWdnZXJfZXJyb3IoZ1R4dCgndW5rbm93bl9pbWFnZScp KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfaWZf dGh1bWJuYWlsKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHRoaXNpbWFnZTsNCglhc3Nl cnRfaW1hZ2UoKTsNCg0KCXNtZF90aHVtYl9zZXRfaW1wYXRoKCk7DQoNCglleHRyYWN0KGxB dHRzKGFycmF5KA0KCQkndHlwZScgPT4gQGdldF9wcmVmKCdzbWRfdGh1bWJfZGVmYXVsdF9w cm9maWxlJyksDQoJKSwkYXR0cykpOw0KDQoJJHRodW1iaW5mbyA9IHNhZmVfcm93KCcqJywg U01EX1RIVU1CLCAibmFtZT0nIi5kb1NsYXNoKCR0eXBlKS4iJyIpOw0KCSRyZXQgPSBmYWxz ZTsNCglpZiAoJHRodW1iaW5mbykgew0KCQkkcGF0aCA9IElNUEFUSC5zYW5pdGl6ZUZvclVy bCgkdGh1bWJpbmZvWyduYW1lJ10pLkRTLiR0aGlzaW1hZ2VbJ2lkJ10uJHRoaXNpbWFnZVsn ZXh0J107DQoJCSRyZXQgPSBmaWxlX2V4aXN0cygkcGF0aCk7DQoJfQ0KCXJldHVybiBwYXJz ZShFdmFsRWxzZSgkdGhpbmcsICRyZXQpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2Fs aXNlIGFzIHJlcXVpcmVkDQovLyBUT0RPOiBtYWtlIHRoZXNlIGludG8gYSB0ZXh0cGFjayB3 aGVuIHBsdWdpbiBjb21wb3NlciBzdXBwb3J0cyB0aGVtDQpmdW5jdGlvbiBzbWRfdGh1bWJf Z1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ3Nt ZF90aHVtYl9hY3Rpb25zJyA9PiAnQWN0aW9ucycsDQoJCSdzbWRfdGh1bWJfYWxsX3NpemVz JyA9PiAnQWxsIHNpemVzJywNCgkJJ3NtZF90aHVtYl9hbGxfdGh1bWJzJyA9PiAnQ3JlYXRl JywNCgkJJ3NtZF90aHVtYl9iYXRjaF9sZWdlbmQnID0+ICdDcmVhdGUgLyByZWNyZWF0ZSB0 aHVtYm5haWxzJywNCgkJJ3NtZF90aHVtYl9iYXRjaF9wcmVhbWJsZScgPT4gJ0ZvciBhbGwg YWN0aXZlIHByb2ZpbGVzOiAnLA0KCQknc21kX3RodW1iX2J0bl9wbmwnID0+ICdQcm9maWxl cycsDQoJCSdzbWRfdGh1bWJfYnRuX3Rvb2xzX3ByZWZzJyA9PiAnVG9vbHMgLyBQcmVmcycs DQoJCSdzbWRfdGh1bWJfYnRuX3Rvb2xzJyA9PiAnVG9vbHMnLA0KCQknc21kX3RodW1iX2J5 QWxsJyA9PiAnQWxsJywNCgkJJ3NtZF90aHVtYl9ieVVzcicgPT4gJ0J5IGF1dGhvcicsDQoJ CSdzbWRfdGh1bWJfYnlDYXQnID0+ICdCeSBjYXRlZ29yeScsDQoJCSdzbWRfdGh1bWJfYnlT ZWwnID0+ICdXaXRoIHNlbGVjdGVkJywNCgkJJ3NtZF90aHVtYl9jcmVhdGUnID0+ICdDcmVh dGlvbicsDQoJCSdzbWRfdGh1bWJfY3JlYXRlX2dyb3VwX2NvbmZpcm0nID0+ICdSZWFsbHkg Y3JlYXRlIHRodW1ibmFpbHMgZm9yIEFMTCBhY3RpdmUgcHJvZmlsZXM/IEFueSBleGlzdGlu ZyB0aHVtYnMgd2lsbCBiZSBvdmVyd3JpdHRlbi4nLA0KCQknc21kX3RodW1iX2RlbGV0ZScg PT4gJ0RlbGV0aW9uJywNCgkJJ3NtZF90aHVtYl9kZWxldGVfY29uZmlybScgPT4gJ1JlYWxs eSBkZWxldGUgcHJvZmlsZSB7bmFtZX0/IEl0IHdpbGwgZGVsZXRlIEFMTCB0aHVtYm5haWxz IG9mIHRoaXMgdHlwZS4nLA0KCQknc21kX3RodW1iX25ldycgPT4gJ05ldyBwcm9maWxlJywN CgkJJ3NtZF90aHVtYl9wcmVmcycgPT4gJ1ByZWZlcmVuY2VzJywNCgkJJ3NtZF90aHVtYl9w cm9maWxlX2RlbGV0ZWQnID0+ICdQcm9maWxlICJ7bmFtZX0iIGRlbGV0ZWQnLA0KCQknc21k X3RodW1iX3Byb2ZpbGVfZXhpc3RzJyA9PiAnUHJvZmlsZSAie25hbWV9IiBhbHJlYWR5IGV4 aXN0cycsDQoJCSdzbWRfdGh1bWJfcHJvZmlsZV9oZWFkaW5nJyA9PiAnVGh1bWJuYWlsIHBy b2ZpbGVzJywNCgkJJ3NtZF90aHVtYl9wcm9maWxlX3ByZWZ0b29sX2hlYWRpbmcnID0+ICdU aHVtYm5haWwgdG9vbHMgYW5kIHByZWZzJywNCgkJJ3NtZF90aHVtYl9wcm9maWxlX3Rvb2xf aGVhZGluZycgPT4gJ1RodW1ibmFpbCB0b29scycsDQoJCSdzbWRfdGh1bWJfcXVhbGl0eScg PT4gJ1F1YWxpdHkgKCUpJywNCgkJJ3NtZF90aHVtYl9zaGFycGVuJyA9PiAnU2hhcnBlbics DQoJCSdzbWRfdGh1bWJfdGFibGVzX25vdF9pbnN0YWxsZWQnID0+ICdUYWJsZXMgbm90IGlu c3RhbGxlZDogdHJ5IHJlaW5zdGFsbGluZyB0aGUgcGx1Z2luJywNCgkJJ3NtZF90aHVtYl90 aHVtYm5haWxfaGVhZGluZycgPT4gJ1RodW1ibmFpbHMnLA0KCQknc21kX3RodW1iX3R4cF9h dXRvX3JlcGxhY2UnID0+ICdSZWNyZWF0ZSB0aHVtYm5haWxzIG9uIHJlLXVwbG9hZCBvZiBt YWluIGltYWdlOiAnLA0KCQknc21kX3RodW1iX3R4cF9kZWZhdWx0X3N5bmMnID0+ICdLZWVw IFR4cCB0aHVtYm5haWxzIGluIHN5bmMgd2l0aCBkZWZhdWx0IHByb2ZpbGUgb246ICcsDQoJ CSdzbWRfdGh1bWJfdHhwX2NyZWF0ZV9mcm9tJyA9PiAnQ3JlYXRlIHRodW1ibmFpbHMgZnJv bTogJywNCgkJJ3NtZF90aHVtYl90eHBfY3JlYXRlX2Zyb21fZnVsbCcgPT4gJ0Z1bGwgc2l6 ZSBpbWFnZScsDQoJCSdzbWRfdGh1bWJfdHhwX2NyZWF0ZV9mcm9tX3RodW1iJyA9PiAnVGh1 bWJuYWlsJywNCgkJJ3NtZF90aHVtYl91cGxvYWQnID0+ICdSZXBsYWNlIHNlbGVjdGVkIHRo dW1ibmFpbCcsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9 IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtz OjE6IjIiO3M6NDoiaGVscCI7czoxOTEwODoiPGRpdiBpZD0ic21kX2hlbHAiPgoKCTxoMT5z bWRfdGh1bWJuYWlsPC9oMT4KCgk8aDI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+QXNz aWduIGFueSBudW1iZXIgb2YgdGh1bWJuYWlscyB0byBUeHAmIzgyMTc7cyBpbWFnZXM8L2xp PgoJCTxsaT5CYXRjaCBhc3NpZ24gdGh1bWJuYWlscyB0byBleGlzdGluZyBpbWFnZXM8L2xp PgoJCTxsaT5TZXQgb25lIHRodW1ibmFpbCBzaXplIGFzIGRlZmF1bHQ8L2xpPgoJCTxsaT5E aXNwbGF5IGFueSBvZiB0aGUgdGh1bWJuYWlsIHNpemVzIG9uIHlvdXIgc2l0ZTwvbGk+CgkJ PGxpPktlZXAgdGh1bWJzIGluIHN5bmMgd2l0aCBUeHAmIzgyMTc7cyB0aHVtYnMgaWYgeW91 IHdpc2g8L2xpPgoJCTxsaT5Db25kaXRpb25hbCB0aHVtYm5haWwgY2hlY2sgYXZhaWxhYmxl PC9saT4KCTwvdWw+CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4g YnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29u PC9hPi4gTWFueSB0aGFua3MgdG8gdGhlIGJldGEgdGVzdCBjcmV3IHdobyBvZmZlcmVkIGZl YXR1cmUgYW5kIHdvcmtmbG93IGFkdmljZSwgZXNwZWNpYWxseSB0aGVib21ic2l0ZSwgamFr b2IsIGpzdHViYnMgYW5kIG1hbmlxdWkuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1cGdy YWRpbmcgLyB1bmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVx dWlyZXMgUEhQNSsgYW5kIFR4cCA0LjQuMSs8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdp biBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMv MTE4Ni9zbWRfdGh1bWJuYWlsIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJl Zj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUg dGhlIGNvZGUgaW50byB0aGUgVHhwIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFs bCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9y dW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzQzNjciPmZvcnVtIHRocmVh ZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3Ro ZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPldoZW4g dXBncmFkaW5nIGZyb2ltIHYwLjF4IHRvIHYwLjIwLCB5b3VyIHByZWZlcmVuY2VzIGZvciA8 ZW0+S2VlcCBUeHAgdGh1bWJuYWlscyBpbiBzeW5jIHdpdGggZGVmYXVsdCBwcm9maWxlPC9l bT4gd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgdmlzaXQgdGhlIDxlbT5Ub29scy9QcmVmczwv ZW0+IGFyZWEgdG8gcmVpbnN0YXRlIHRoZSBiZWhhdmlvdXIgeW91IGRlc2lyZS48L3A+CgoJ PHA+VG8gdW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBw YWdlLjwvcD4KCgk8aDI+VXNhZ2UgJiM4MjEyOyBhZG1pbiBzaWRlPC9oMj4KCgk8cD5WaXNp dCB0aGUgQ29udGVudC0mZ3Q7SW1hZ2VzIHRhYi4gQWJvdmUgdGhlIGxpc3Qgb2YgaW1hZ2Vz IGlzIGFuIGFyZWEgbGFiZWxsZWQgPGVtPlRodW1ibmFpbCBQcm9maWxlczwvZW0+LiBDbGlj ayBpdCB0byByZXZlYWwgdGhlIGNvbnRyb2wgcGFuZWwuIFlvdSBjYW4gdG9nZ2xlIHRoaXMg cGFuZWwgb24gYW5kIG9mZiBieSBjbGlja2luZyB0aGUgaGVhZGluZy48L3A+CgoJPHA+WW91 IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBwcm9maWxlIHRvIGJlZ2luIHdpdGgsIHNvIGNs aWNrIHRoZSA8ZW0+TmV3IHByb2ZpbGU8L2VtPiBidXR0b24uIFRoaXMgd2lsbCByZXZlYWwg ZWRpdCBib3hlcyB3aGVyZSB5b3UgY2FuIGVudGVyOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJv bmc+TmFtZTwvc3Ryb25nPjogc29tZSBkZXNjcmlwdGl2ZSBuYW1lIGZvciB0aGlzIHRodW1i bmFpbCBkaW1lbnNpb24uIFlvdSBhcmUgbGltaXRlZCB0byB1c3VhbCBub24td2VpcmQgY2hh cmFjdGVycyBpbiB0aGUgbmFtZTwvbGk+CgkJPGxpPjxzdHJvbmc+V2lkdGg8L3N0cm9uZz46 IHRodW1ibmFpbCB3aWR0aCwgaW4gcGl4ZWxzLiBJZiBsZWZ0IGJsYW5rIChvciBzZXQgdG8g MCkgYW5kIGhlaWdodCBpcyBzcGVjaWZpZWQsIHRoZSB3aWR0aCB3aWxsIGJlIGNvbXB1dGVk IGluIHByb3BvcnRpb24gdG8gdGhlIGhlaWdodDwvbGk+CgkJPGxpPjxzdHJvbmc+SGVpZ2h0 PC9zdHJvbmc+OiB0aHVtYm5haWwgaGVpZ2h0LCBpbiBwaXhlbHMuIElmIGxlZnQgYmxhbmsg KG9yIHNldCB0byAwKSBhbmQgd2lkdGggaXMgc3BlY2lmaWVkLCB0aGUgaGVpZ2h0IHdpbGwg YmUgY29tcHV0ZWQgaW4gcHJvcG9ydGlvbiB0byB0aGUgd2lkdGg8L2xpPgoJCTxsaT48c3Ry b25nPlF1YWxpdHkgKCUpPC9zdHJvbmc+OiBUaGUgcXVhbGl0eSBvZiB0aGUgcmVzdWx0aW5n IHRodW1ibmFpbC4gR2VuZXJhbGx5IG9ubHkgb2YgdXNlIGZvciBqcGcgb3IgcG5nKDI0KSBp bWFnZXMuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIHRoZSBiZXR0ZXIgdGhlIHF1YWxpdHkgYW5k IHRoZSBiaWdnZXIgdGhlIGZpbGUgc2l6ZS4gRGVmYXVsdDogNzU8L2xpPgoJCTxsaT48c3Ry b25nPkNyb3A8L3N0cm9uZz46IHdoZXRoZXIgdG8gY3JvcCB0aGUgaW1hZ2Ugd2hlbiB0aGUg dGh1bWJuYWlsIGlzIGNyZWF0ZWQsIG9yIHNjYWxlIGl0IHRvIGZpdDwvbGk+CgkJPGxpPjxz dHJvbmc+U2hhcnBlbjwvc3Ryb25nPjogd2hldGhlciB0byBhcHBseSBhIHNoYXJwZW5pbmcg ZmlsdGVyIHRvIHRoZSB0aHVtYm5haWwgd2hlbiBpdCBpcyBjcmVhdGVkLiBVc2VmdWwgZm9y IHZlcnkgc21hbGwgaW1hZ2VzPC9saT4KCQk8bGk+PHN0cm9uZz5BY3RpdmU8L3N0cm9uZz46 IEVuYWJsZS9kaXNhYmxlIHRoaXMgdGh1bWJuYWlsIHNpemUgc28gaXQgd2lsbC93b24mIzgy MTc7dCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3aGVuIHRoZSBuZXh0IGltYWdlIGlz IHVwbG9hZGVkLiBDbGljayB0aGUgY2hlY2tib3ggdG8gaW5zdGFudGx5IHN3aXRjaCB0aGUg cHJvZmlsZSBvbi9vZmYuIENsaWNrIHRoZSAmIzgyMTY7QWN0aXZlJiM4MjE3OyB3b3JkIGlu IHRoZSBoZWFkaW5nIHJvdyB0byB0b2dnbGUgdGhlIHN0YXR1cyBvZiBhbGwgcHJvZmlsZXMu IE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgZ292ZXJucyBob3cgdGhlIDxhIGhyZWY9IiNzbWRf dGh1bWJfY3JlYXRlIj5BbGwgc2l6ZXM8L2E+IGRyb3Bkb3duIGVudHJ5IGludGVyYWN0cyB3 aXRoIHRoZSA8ZW0+Q3JlYXRlPC9lbT4gYW5kIDxlbT5EZWxldGU8L2VtPiBidXR0b25zPC9s aT4KCQk8bGk+PHN0cm9uZz5EZWZhdWx0PC9zdHJvbmc+OiBzZXQgdGhpcyB0aHVtYm5haWwg cHJvZmlsZSBhcyB0aGUgZGVmYXVsdC4gVGhlIGRlZmF1bHQgaW1hZ2Ugd2lsbCBiZSBkaXNw bGF5ZWQgaW4gdGhlIEltYWdlcyBsaXN0IGFuZCB3aWxsIGFsc28gYmUgdXNlZCBhcyB0aGUg ZGVmYXVsdCBzaXplIHRvIGJlIGRpc3BsYXllZCB1c2luZyA8Y29kZT4mbHQ7dHhwOnNtZF90 aHVtYm5haWwvJmd0OzwvY29kZT4uIElmIHRoZSBvcHRpb24gdG8gPGEgaHJlZj0iI3NtZF90 aHVtYl9wcmVmcyI+c3luYyB3aXRoIFR4cCYjODIxNztzIHRodW1iczwvYT4gaXMgb24sIGl0 IHdpbGwgYWxzbyBiZWNvbWUgVHhwJiM4MjE3O3Mgc3RhbmRhcmQgKGJ1aWx0LWluKSB0aHVt Ym5haWwgc2l6ZSBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZDwvbGk+Cgk8L3VsPgoKCTxwPk9u Y2UgeW91JiM4MjE3O3ZlIGNvbmZpZ3VyZWQgeW91ciBwcm9maWxlLCBjbGljayBTYXZlIHRv IHN0b3JlIGl0LiBZb3UgY2FuIGFsd2F5cyBlZGl0IGl0IGFnYWluIGJ5IGNsaWNraW5nIGl0 cyBuYW1lLiBHbyBhaGVhZCBhbmQgY3JlYXRlIHNvbWUgbW9yZSBwcm9maWxlcyBmb3IgdGh1 bWJuYWlscyBvZiBkaWZmZXJlbnQgc2l6ZXMvcGFyYW1ldGVycy4gSWYgeW91IHdpc2ggdG8g ZGVsZXRlIGEgcHJvZmlsZSwgaGl0IHRoZSA8ZW0+W0RlbGV0ZV08L2VtPiBidXR0b24gYW5k IGNvbmZpcm0uIDxzdHJvbmc+QWxsIHRodW1ibmFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQg cHJvZmlsZSB3aWxsIGJlIGRlbGV0ZWQ8L3N0cm9uZz4uPC9wPgoKCTxwPkF0IHRoaXMgcG9p bnQsIG5vIHRodW1ibmFpbHMgaGF2ZSBiZWVuIGNyZWF0ZWQuIExldCYjODIxNztzIHJlY3Rp ZnkgdGhhdC48L3A+CgoJPGgzIGlkPSJzbWRfdGh1bWJfY3JlYXRlIj5DcmVhdGluZyB0aHVt Ym5haWxzPC9oMz4KCgk8cD5QaWNrIG9uZSBvZiB5b3VyIGltYWdlcyBhbmQgY2xpY2sgdG8g ZWRpdCBpdC48L3A+CgoJPHA+QmVuZWF0aCB0aGUgbWFpbiBwaWN0dXJlIHlvdSB3aWxsIHNl ZSBhbiBhcmVhIGxhYmVsbGVkIDxlbT5UaHVtYm5haWxzPC9lbT4uIFlvdSBjYW4gdG9nZ2xl IHRoaXMgcGFuZWwgb24gYW5kIG9mZiBieSBjbGlja2luZyB0aGUgaGVhZGluZy48L3A+CgoJ PHA+SW5zaWRlIHRoZSBwYW5lbCBpcyBhIHNpbXBsZSBzZWxlY3QgbGlzdCBjb250YWluaW5n IG9uZSBlbnRyeSBmb3IgZWFjaCB0aHVtYm5haWwgcHJvZmlsZSB5b3UgaGF2ZSBjb25maWd1 cmVkLCBwbHVzIHRoZSBzcGVjaWFsIGVudHJ5IDxlbT5BbGwgc2l6ZXM8L2VtPi4gWW91IGNh biBzZWxlY3Qgb25lIG9mIHRoZXNlIGVudHJpZXMgYW5kIGNsaWNrIDxlbT5DcmVhdGU8L2Vt PiB0byBjcmVhdGUgdGh1bWJuYWlsKHMpIGluIHRoZSBzZWxlY3RlZCBzaXplIG9yIGhpdCA8 ZW0+RGVsZXRlPC9lbT4gdG8gcmVtb3ZlIHRoZSBzZWxlY3RlZCB0aHVtYm5haWwocykuPC9w PgoKCTxwPk9uY2UgY3JlYXRlZCwgdGhlIHRodW1ibmFpbHMgYXBwZWFyIGluIHRoZSBwYW5l bDsgcmVtZW1iZXIgdGhleSBjYW4gYmUgdHVja2VkIGF3YXkgaWYgeW91IGRvbiYjODIxNzt0 IHdhbnQgdG8gbG9vayBhdCB0aGVtLjwvcD4KCgk8cD5JZiB5b3Ugc2VsZWN0IDxlbT5BbGwg c2l6ZXM8L2VtPiBhbmQgaGl0IDxlbT5DcmVhdGU8L2VtPiwgeW91IHdpbGwgZ2V0IG9uZSB0 aHVtYm5haWwgZm9yIGVhY2ggYWN0aXZlIHByb2ZpbGUuIFNpbWlsYXJseSwgaWYgeW91IGhp dCA8ZW0+RGVsZXRlPC9lbT4gYW55IHRodW1ibmFpbHMgc3RvcmVkIGFnYWluc3QgYW4gYWN0 aXZlIHByb2ZpbGUgZm9yIHRoZSBjdXJyZW50IGltYWdlIHdpbGwgYmUgcmVtb3ZlZC4gQnkg dG9nZ2xpbmcgY2VydGFpbiB0aHVtYm5haWwgcHJvZmlsZXMgb24vb2ZmIHlvdSBjYW4gY29u dHJvbCB3aGljaCBvbmVzIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQuPC9wPgoKCTxwPkJ5IGRl ZmF1bHQ6PC9wPgoKCTx1bD4KCQk8bGk+d2hlbiB5b3UgdXBsb2FkIGEgbmV3IGltYWdlLCB0 aHVtYm5haWxzIHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGZvciBhbnkgYWN0aXZl IHByb2ZpbGVzPC9saT4KCQk8bGk+d2hlbiB5b3UgcmVwbGFjZSBhbiBleGlzdGluZyBpbWFn ZSwgdGh1bWJuYWlscyB3aWxsIG9ubHkgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGZvciBh Y3RpdmUgcHJvZmlsZXMgaWYgdGh1bWJzIDxlbT5kbyBub3Q8L2VtPiBhbHJlYWR5IGV4aXN0 LiBUaGlzIG9wdGlvbiBjYW4gYmUgYWx0ZXJlZCB3aXRoIHRoZSA8YSBocmVmPSIjc21kX3Ro dW1iX3ByZWZzIj5wcmVmczwvYT48L2xpPgoJPC91bD4KCgk8cD5Ob3RlIHRoYXQgaWYgeW91 IHVzZSBUeHAmIzgyMTc7cyBtdWx0aS1lZGl0IHRvb2wgdG8gZGVsZXRlIGltYWdlcywgPHN0 cm9uZz5hbGw8L3N0cm9uZz4gY29ycmVzcG9uZGluZyB0aHVtYm5haWxzIGZvciB0aGUgc2Vs ZWN0ZWQgaW1hZ2VzIChpbmNsdWRpbmcgaW5hY3RpdmUgb25lcykgd2lsbCBiZSByZW1vdmVk LjwvcD4KCgk8aDMgaWQ9InNtZF90aHVtYl9jdXN0b20iPkN1c3RvbSB0aHVtYm5haWxzPC9o Mz4KCgk8cD5JZiB5b3UgcHJlZmVyIHRvIG1ha2UgeW91ciBvd24gdGh1bWJzIGluIGFuIGV4 dGVybmFsIHByb2dyYW0sIHlvdSBjYW4gc3RpbGwgc2V0IHVwIHRoZSBwcm9maWxlcyBhcyBu b3JtYWwgYnV0IGluc3RlYWQgb2YgY2xpY2tpbmcgPGVtPkNyZWF0ZTwvZW0+IGluIHRoZSBJ bWFnZSBFZGl0IHNjcmVlbiwgeW91IGNhbiBwaWNrIGEgcHJvZmlsZSBzaXplIGZyb20gdGhl IGRyb3Bkb3duIGFuZCB1c2UgdGhlIGZpbGUgcGlja2VyIGZhY2lsaXR5IChCcm93c2UmIzgy MzA7IC8gQ2hvb3NlJiM4MjMwOykgdG8gc2VsZWN0IGEgdGh1bWJuYWlsIGZyb20geW91ciBo YXJkIGRyaXZlLiBXaGVuIHlvdSBjbGljayA8ZW0+VXBsb2FkPC9lbT4gdGhlIGltYWdlIHdp bGwgYmUgaW5zZXJ0ZWQgYWdhaW5zdCB0aGUgc2VsZWN0ZWQgcHJvZmlsZS48L3A+CgoJPHA+ QXQgYW55IHRpbWUgeW91IGNhbiBjbGljayBvbmUgb2YgdGhlIHRodW1ibmFpbHMgKG9yIHNl bGVjdCBhIHNpemUgZnJvbSB0aGUgZHJvcGRvd24pIGFuZCBjaG9vc2UgZm9yIGFub3RoZXIg aW1hZ2UgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgdGh1bWJuYWlsICYjODIxMjsgZXZlbiBv bmVzIHRoYXQgaGF2ZSBiZWVuIGF1dG8tY3JlYXRlZC4gU29tZSB0aGluZ3MgdG8gbm90ZSBh Ym91dCB0aGlzIGZlYXR1cmU6PC9wPgoKCTx1bD4KCQk8bGk+dGhlIHRodW1ibmFpbCBtdXN0 IGJlIG9mIHRoZSBzYW1lIGZpbGUgdHlwZSBhcyB0aGUgb3JpZ2luYWwgaW1hZ2Ugb3IgdGhl IHVwbG9hZCB3aWxsIGJlIGlnbm9yZWQ8L2xpPgoJCTxsaT55b3UgY2FuIGNsaWNrIGEgaGln aGxpZ2h0ZWQgaW1hZ2UgdG8gZGVzZWxlY3QgaXQ8L2xpPgoJCTxsaT55b3UgY2Fubm90IEJy b3dzZSBmb3IgYW4gaW1hZ2UgKHRoZSBmaWxlIHVwbG9hZCBib3ggaXMgZ3JleWVkIG91dCkg dW5sZXNzIHlvdSBoYXZlIGNob3NlbiBvbmUgcHJvZmlsZTwvbGk+Cgk8L3VsPgoKCTxoMyBp ZD0ic21kX3RodW1iX2JhdGNoIj5CYXRjaCB0aHVtYm5haWwgY3JlYXRpb248L2gzPgoKCTxw PllvdSBjYW4gYWxzbyBjcmVhdGUgdGh1bWJuYWlscyBlbi1tYXNzZS4gQ2xpY2sgdGhlIDxl bT5Ub29sczwvZW0+IGJ1dHRvbiAobGFiZWxsZWQgJiM4MjE2OzxlbT5Ub29scyAvIFByZWZz PC9lbT4mIzgyMTc7IGlmIHlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzKSBpbiB0aGUgdG9w LXJpZ2h0IGhhbmQgY29ybmVyIG9mIHRoZSBzbWRfdGh1bWJuYWlsIGNvbnRyb2wgcGFuZWwu IEZyb20gdGhlcmUgeW91IHdpbGwgc2VlIGFuIGFyZWEgdGhhdCBhbGxvd3MgeW91IHRvIGNy ZWF0ZSB0aHVtYm5haWxzIGZvcjo8L3A+CgoJPHVsPgoJCTxsaT5Pbmx5IHRoZSBzZWxlY3Rl ZCBpbWFnZXMgKHRoZSBjaGVja2JveGVzIG5leHQgdG8gZWFjaCBpbWFnZSk8L2xpPgoJCTxs aT5BbGwgaW1hZ2VzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeTwvbGk+CgkJPGxpPkFsbCBp bWFnZXMgdXBsb2FkZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXI8L2xpPgoJCTxsaT5BbGwgaW1h Z2VzPC9saT4KCTwvdWw+CgoJPHA+QWZ0ZXIgc2VsZWN0aW5nIHRoZSBkZXNpcmVkIG9wdGlv biAoYW5kIGlmIHlvdSBjaG9vc2UgY2F0ZWdvcnkgb3IgYXV0aG9yLCBzZWxlY3Qgb25lIG9m IHRoZSBlbnRyaWVzIGZyb20gdGhlIHNlY29uZGFyeSBsaXN0IHRoYXQgYXBlYXJzKSwgaGl0 IDxlbT5DcmVhdGU8L2VtPi4gT25jZSB5b3UgY29uZmlybSB5b3VyIGFjdGlvbiwgdGhlIHBs dWdpbiB3aWxsIGdvIGF3YXkgYW5kIGNyZWF0ZSB0aHVtYm5haWxzIGZvciBldmVyeSBhY3Rp dmUgcHJvZmlsZSBmb3IgYWxsIGltYWdlcyB0aGF0IG1hdGNoIHlvdXIgY3JpdGVyaWEuIFRo aXMgaXMgYSBxdWljayB3YXkgdG8gZ2VuZXJhdGUgdGh1bWJzIGZvciB5b3VyIGV4aXN0aW5n IGltYWdlcy4gTm90ZSB0aGF0IGlmIHlvdSBjaG9vc2UgdGhlIGZpcnN0IChlbXB0eSkgY2F0 ZWdvcnkgZW50cnksIHRoZW4gYWxsIGltYWdlcyB0aGF0IGhhdmUgbm90IGJlZW4gYXNzaWdu ZWQgYSBjYXRlZ29yeSBhcmUgbWFuaXB1bGF0ZWQuPC9wPgoKCTxwPkJlY2F1c2Ugb2YgdGhl IG5hdHVyZSBvZiB0aGlzIHRvb2wgJiM4MjEyOyBlc3BlY2lhbGx5IHdpdGggbGFyZ2UgaW1h Z2UgcG9vbHMgJiM4MjEyOyB0aGUgcHJvY2VzcyBpcyBkb25lIGFzIGEgYmFja2dyb3VuZCB0 YXNrIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpBWDwvc3Bhbj4uIEFmdGVyIGNsaWNraW5n IHRoZSA8ZW0+Q3JlYXRlPC9lbT4gYnV0dG9uIChhbmQgY29uZmlybWluZyB5b3UgYXJlIHN1 cmUpIGEgY291bnRlciB3aWxsIGFwcGVhciBpbiB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBwcmVm cyBwYW5lbCBzaG93aW5nIGhvdyBtYW55IGltYWdlcyBpdCBoYXMgcHJvY2Vzc2VkIG91dCBv ZiB0aGUgdG90YWwgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgc2V0LiBXaGVuIGl0JiM4MjE3 O3MgZG9uZSwgaWYgeW91IHRoZW4gcmVmcmVzaCB5b3VyIEltYWdlcyB0YWIgKGUuZy4gY2xp Y2sgdG8gdGhlIDxlbT5Qcm9maWxlczwvZW0+IHBhbmUpIHlvdSB3aWxsIHNlZSB5b3VyIGNo b3NlbiBkZWZhdWx0IHRodW1ibmFpbHMgaW4gdGhlIGxpc3QgJiM4MjEyOyBhc3N1bWluZyB5 b3UmIzgyMTc7dmUgc2V0IG9uZSBhcyBkZWZhdWx0LjwvcD4KCgk8aDMgaWQ9InNtZF90aHVt Yl9wcmVmcyI+UHJlZmVyZW5jZXM8L2gzPgoKCTxwPklmIHlvdSBoYXZlIHN1ZmZpY2llbnQg cHJpdmlsZWdlcywgaW4gdGhlIGxvd2VyIHBvcnRpb24gb2YgdGhlIDxlbT5Ub29sczwvZW0+ IHBhbmVsIGFyZSBzb21lIG9wdGlvbnMgdGhhdCBnb3Zlcm4gaG93IHRodW1ibmFpbHMgYXJl IGNyZWF0ZWQgZm9yIGFsbCB1c2Vycy4gVGhlcmUgaXMgbm8gJiM4MjE2O1NhdmUmIzgyMTc7 IGFjdGlvbiBoZXJlOiB0aGUgY2hlY2ttYXJrcyBhcmUgc3RvcmVkIGluIHJlYWwtdGltZSBh bmQgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUuPC9wPgoKCTxoND5DcmVhdGUg c21kX3RodW1ibmFpbHMgZnJvbTwvaDQ+CgoJPHA+R292ZXJucyB3aGV0aGVyIHRoZSBzbWRf dGh1bWJuYWlscyBhcmUgY3JlYXRlZCBmcm9tIHRoZSBmdWxsIHNpemUgaW1hZ2Ugb3IgaXRz IChUeHApIHRodW1ibmFpbC4gSWYgeW91IGhhdmUgZWxlY3RlZCBub3QgdG8gaGF2ZSBUeHAg dGh1bWJuYWlscyBjcmVhdGVkIHRoZW4gaXQmIzgyMTc7bGwgcHJvYmFibHkgbm90IHdvcmsg dmVyeSB3ZWxsIDotKTwvcD4KCgk8cD5UaGlzIHByZWZlcmVuY2UgYXBwbGllczo8L3A+CgoJ PHVsPgoJCTxsaT53aGVuIHlvdSB1c2UgYW55IG9mIHRoZSBiYXRjaCB0b29scyB0byBtYXNz LXByb2R1Y2Ugc21kX3RodW1ibmFpbHM8L2xpPgoJCTxsaT5pZiB5b3UgdXBsb2FkIGEgbmV3 IGltYWdlPC9saT4KCQk8bGk+aWYgeW91IHJldXBsb2FkIGEgbWFpbiBpbWFnZSBhbmQgPGVt PlJlY3JlYXRlIHRodW1ibmFpbHMgb24gcmUtdXBsb2FkIG9mIG1haW4gaW1hZ2U8L2VtPiBp cyBjaGVja2VkPC9saT4KCTwvdWw+CgoJPGg0PktlZXAgVHhwIHRodW1ibmFpbHMgaW4gc3lu YyB3aXRoIGRlZmF1bHQgcHJvZmlsZTwvaDQ+CgoJPHA+KFRoaXMgb3B0aW9uIG9ubHkgYXBw ZWFycyBpZiB5b3UgaGF2ZSBzZXQgYSBwcm9maWxlIGFzIGRlZmF1bHQpPC9wPgoKCTxwPk9y ZGluYXJpbHksIHNtZF90aHVtYm5haWwgd29ya3MgaW5kZXBlbmRlbnRseSBvZiBUeHAmIzgy MTc7cyB0aHVtYnMuIElmIHlvdSBkaXNhYmxlIHRoZSBwbHVnaW4geW91JiM4MjE3O2xsIHNl ZSB0aGF0IGV2ZXJ5dGhpbmcgZ29lcyBiYWNrIHRvIGhvdyBpdCB3YXMgYmVmb3JlIHlvdSBp bnN0YWxsZWQgaXQuIFRoaXMgaXMgZ3JlYXQgYmVjYXVzZSB5b3VyIGhhcmQtZ3JhZnQgaXNu JiM4MjE3O3QgbG9zdCBpZiB5b3UgaGF2ZSB1cGxvYWRlZCB5b3VyIG93biB0aHVtYnMuPC9w PgoKCTxwPkJ1dCBpZiB5b3Ugc3RhcnQgY3JlYXRpbmcgdGh1bWJzIHdpdGggdGhlIHBsdWdp biB5b3Ugd2lsbCBub3RpY2UgdGhhdCBUeHAmIzgyMTc7cyBidWlsdCBpbiB0YWdzIHN1Y2gg YXMgPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2ltYWdlIHRodW1ibmFpbD0mcXVvdDsxJnF1b3Q7 IC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDp0aHVtYm5haWwgLyZndDs8L2NvZGU+ IHdvbiYjODIxNzt0IHdvcmsgZm9yIG5ld2VyIHRodW1ibmFpbHMuIFRoaXMgbWlnaHQgYmUg Y29uZnVzaW5nIHNvIHlvdSBjYW4gb3B0IHRvIGhhdmUgc21kX3RodW1ibmFpbCB1cGRhdGUg eW91ciBUeHAgdGh1bWJuYWlscyBhdCB0aGUgc2FtZSB0aW1lLjwvcD4KCgk8cD5CeSB0aWNr aW5nIGVpdGhlciBvZiB0aGUgY2hlY2tib3hlcywgdGhlIHBsdWdpbiB3aWxsIHRyYWNrIGFu eSBjaGFuZ2VzIDxzdHJvbmc+dG8gdGhlIGRlZmF1bHQgcHJvZmlsZTwvc3Ryb25nPiBhbmQg bWltaWMgdGhlbSB3aXRoIFR4cCYjODIxNztzIHRodW1ibmFpbHMuIFRoaXMgaGFzIGEgZmV3 IGVmZmVjdHMgd29ydGggaGlnaGxpZ2h0aW5nLjwvcD4KCgk8cD5XaGVuIHRoZSA8ZW0+Q3Jl YXRpb248L2VtPiBjaGVja2JveCBpcyB0aWNrZWQ6PC9wPgoKCTxvbD4KCQk8bGk+aWYgeW91 IGJhdGNoIGNyZWF0ZSB0aHVtYnMsIHVwbG9hZCBhIG5ldyBpbWFnZSwgb3IgcmVwbGFjZSBh biBleGlzdGluZyBpbWFnZSwgYSBuZXcgVHhwIHRodW1ibmFpbCB3aWxsIGJlIGNyZWF0ZWQg YXQgdGhlIGRlZmF1bHQgc2l6ZS4gQW55IGV4aXN0aW5nIHRodW1icyB3aWxsIGJlIG92ZXJ3 cml0dGVuPC9saT4KCQk8bGk+aWYgeW91IGNoYW5nZSBkZWZhdWx0IHByb2ZpbGUsIGFueSBU eHAgdGh1bWJuYWlscyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkIHdpbGwgcmVtYWluIGF0IHRo ZSBwcmV2aW91cyBzaXplLiBPbmx5IHdoZW4geW91IHN0YXJ0IGNyZWF0aW5nLCB1cGxvYWRp bmcgb3IgcmVwbGFjaW5nIGltYWdlcyB3aWxsIHRoZSBuZXcgdGh1bWJuYWlsIHNpemVzIGJl IGNyZWF0ZWQ8L2xpPgoJPC9vbD4KCgk8cD5XaGVuIHRoZSA8ZW0+RGVsZXRpb248L2VtPiBj aGVja2JveCBpcyB0aWNrZWQ6PC9wPgoKCTxvbD4KCQk8bGk+aWYgeW91IGRlbGV0ZSBhIHNp bmdsZSB0aHVtYiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBkZWZhdWx0IHByb2ZpbGUsIGJv dGggdGhlIHByb2ZpbGUgdGh1bWIgYW5kIFR4cCYjODIxNztzIHRodW1iIHdpbGwgYmUgZGVs ZXRlZDwvbGk+CgkJPGxpPmlmIHlvdSBkZWxldGUgYW4gZW50aXJlIHByb2ZpbGUsIGFsbCBp dHMgdGh1bWJuYWlscyA8c3Ryb25nPmFuZCBhbGwgVHhwJiM4MjE3O3MgdGh1bWJzPC9zdHJv bmc+IHdpbGwgYmUgcmVtb3ZlZDwvbGk+Cgk8L29sPgoKCTxwPkZ1cnRoZXI6PC9wPgoKCTxv bD4KCQk8bGk+aWYgeW91IGhhdmUgbm8gZGVmYXVsdCBwcm9maWxlLCB0aGUgY2hlY2tib3hl cyBkaXNhcHBlYXIgYW5kIHRoZSBzZXR0aW5ncyBoYXZlIG5vIGVmZmVjdC4gQ2hvb3NlIGEg ZGVmYXVsdCBwcm9maWxlIHRvIHJlaW5zdGF0ZSB0aGUgYmVoYXZpb3VyPC9saT4KCQk8bGk+ aWYgeW91IGRlYWN0aXZhdGUgdGhlIGRlZmF1bHQgcHJvZmlsZSB0aGUgY2hlY2tib3hlcyBo YXZlIG5vIGVmZmVjdCA8c3Ryb25nPnVubGVzczwvc3Ryb25nPiB5b3UgZGVsZXRlIHRoZSBw cm9maWxlIChzaW5jZSB5b3UmIzgyMTc7cmUgZGVsZXRpbmcgaXQsIGl0cyBzdGF0dXMgaXMg JiM4MjE2O2xvc3QmIzgyMTc7IGFuZCB0aGVyZWZvcmUgdGhlIGNoZWNrYm94ZXMgZnVuY3Rp b24gYXMgbm9ybWFsKS4gSWYgdGhlcmUmIzgyMTc7cyBhbnkgZG91YnQsIHVuY2hlY2sgdGhl IDxlbT5EZWxldGlvbjwvZW0+IGNoZWNrYm94IGZpcnN0ITwvbGk+Cgk8L29sPgoKCTxoND5S ZWNyZWF0ZSB0aHVtYm5haWxzIG9uIHJlLXVwbG9hZCBvZiBtYWluIGltYWdlPC9oND4KCgk8 cD5XaGVuIHRoaXMgY2hlY2tib3ggaXMgY2xlYXJlZCBhbmQgeW91IDxzdHJvbmc+cmVwbGFj ZTwvc3Ryb25nPiBhIG1haW4gaW1hZ2UgKGZyb20gdGhlIEltYWdlIEVkaXQgc2NyZWVuKSBh bnkgdGh1bWJuYWlscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIHRvIHRoZSBp bWFnZSBhcmUgbGVmdCBhcyB0aGV5IGFyZSAmIzgyMTI7IG9ubHkgbWlzc2luZyB0aHVtYm5h aWxzIHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZSBtYWluIGltYWdlLiBDb252ZXJzZWx5LCBp ZiB5b3Ugc2V0IHRoaXMgY2hlY2tib3gsIHdoZW4geW91IHVwbG9hZCB0aGUgcmVwbGFjZW1l bnQgaW1hZ2UgPHN0cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+QUxMPC9zcGFuPiBzbWRfdGh1 bWJuYWlscyBmb3IgYWN0aXZlIHByb2ZpbGVzIHdpbGwgYmUgKHJlKWNyZWF0ZWQgZnJvbSB0 aGUgbWFpbiBpbWFnZTwvc3Ryb25nPi48L3A+CgoJPHA+Tm90ZSBvbmUgaW1wb3J0YW50IGV4 Y2VwdGlvbjogVHhwIHRodW1ibmFpbHMgYXJlIDxzdHJvbmc+PHNwYW4gY2xhc3M9ImNhcHMi Pk5PVDwvc3Bhbj48L3N0cm9uZz4gY292ZXJlZCBieSB0aGlzIG9wdGlvbiAmIzgyMTI7IHRo ZXkgYXJlIGdvdmVybmVkIGJ5IHRoZSA8ZW0+S2VlcCBUeHAgdGh1bWJzIGluIHN5bmM8L2Vt PiYjODIxNztzICYjODIxNjtDcmVhdGlvbiYjODIxNzsgY2hlY2tib3guIFRodXMsIGlmIHlv dSB1cGxvYWQgYSByZXBsYWNlbWVudCBpbWFnZSBhbmQgdGhlICYjODIxNjtDcmVhdGlvbiYj ODIxNzsgY2hlY2tib3ggaXMgb24sIHlvdSB3aWxsIHJlcGxhY2UgVHhwJiM4MjE3O3MgdGh1 bWIgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZiB0aGUgPGVtPlJlY3JlYXRlIHRodW1i bmFpbHMmIzgyMzA7PC9lbT4gb3B0aW9uLjwvcD4KCgk8aDIgaWQ9InNtZF90aHVtYl91c2Fn ZSI+VXNhZ2UgJiM4MjEyOyBwdWJsaWMgc2lkZTwvaDI+CgoJPHA+VHdvIG5ldyB0YWdzIGFy ZSBhdmFpbGFibGUgdG8gZGlzcGxheSB5b3VyIHRodW1ibmFpbHMuPC9wPgoKCTxoMyBpZD0i c21kX3RodW1ibmFpbCI+PGNvZGU+Jmx0O3R4cDpzbWRfdGh1bWJuYWlsLyZndDs8L2NvZGU+ PC9oMz4KCgk8cD5BIGRpcmVjdCByZXBsYWNlbWVudCBmb3IgdGhlIGJ1aWx0IGluIDxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9dGh1bWJu YWlsIj50eHA6dGh1bWJuYWlsPC9hPiB0YWcgd2l0aCBleGFjdGx5IHRoZSBzYW1lIGZ1bmN0 aW9uYWxpdHkgYW5kIGF0dHJpYnV0ZXMgYXBhcnQgZnJvbSB0aGVzZSBleGNlcHRpb25zOjwv cD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFuPiA6IHVzZSB0 aGlzIGF0dHJpYnV0ZSB0byBkaXNwbGF5IHRodW1ibmFpbHMgb2YgdGhlIGdpdmVuIHByb2Zp bGUgbmFtZS4gZS5nLiA8Y29kZT50eXBlPSZxdW90O2xhcmdlJnF1b3Q7PC9jb2RlPi4gSWYg eW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgYXR0cmlidXRlLCB0aGUgZGVmYXVsdCBwcm9maWxl IHdpbGwgYmUgdXNlZC4gSWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBwcm9maWxlIHlvdSYjODIx NztsbCBzZWUgd2FybmluZyBtZXNzYWdlczwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5jbGFzczwvc3Bhbj4gOiBpZiBvbWl0dGVkLCB0aGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB3 aWxsIGJlIHVzZWQgYXMgYSBjbGFzcyBuYW1lIGZvciB0aGUgaW1nIHRhZy4gSWYgeW91IHNw ZWNpZnkgYSB3cmFwdGFnIGFuZCBvbWl0IHRoZSBjbGFzcywgdGhlIHByb2ZpbGUgbmFtZSB3 aWxsIGJlIHVzZWQgYXMgYSBjbGFzcyBvbiBib3RoIHRoZSBjb250YWluZXIgYW5kIHRoZSBp bWcgdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmFsaWduPC9zcGFuPiA6IHRo aXMgYXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+YWRkX3N0YW1wPC9zcGFuPiA6IGFkZHMgdGhlIGltYWdlIGZpbGUgbW9kaWZpY2F0 aW9uIHRpbWUgdG8gdGhlIGVuZCBvZiB0aGUgdGh1bWJuYWlsJiM4MjE3O3MgPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj4uIFVzZSA8Y29kZT5hZGRfc3RhbXA9JnF1b3Q7MSZxdW90 OzwvY29kZT4gdG8gc3dpdGNoIHRoaXMgZmVhdHVyZSBvbi4gVGhpcyBoZWxwcyBwcmV2ZW50 IHN0YWxlIGltYWdlcywgYnV0IG1heSBwcmV2ZW50IGJyb3dzZXJzIGZyb20gY2FjaGVpbmcg dGhlIHRodW1icyBwcm9wZXJseSB0aHVzIGluY3JlYXNpbmcgYmFuZHdpZHRoIHVzYWdlLiBE ZWZhdWx0OiAwPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZvcmNlX3NpemU8L3Nw YW4+IDogdXN1YWxseSB3aGVuIHlvdSBzZXQgb25lIG9yIG90aGVyIHdpZHRoL2hlaWdodCB0 byAwIGluIGEgcHJvZmlsZSwgdGhlIGJyb3dzZXIgc2NhbGVzIHRoZSBtaXNzaW5nIGRpbWVu c2lvbiBhdXRvbWF0aWNhbGx5LiBJdCBkb2VzIHRoaXMgYnkgb21pdHRpbmcgdGhlIDxjb2Rl PndpZHRoPTwvY29kZT4gb3IgPGNvZGU+aGVpZ2h0PTwvY29kZT4gYXR0cmlidXRlIGluIHRo ZSA8Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnLiBUaGlzIG1heSBjYXVzZSB2aXN1YWwg YXJ0ZWZhY3RzIGFzIHRoZSBwYWdlIGlzIHJlbmRlcmVkIGFuZCB0aGUgYnJvd3NlciBjYWxj dWxhdGVzIHRoZSBzaXplcy4gSWYgeW91IHdpc2ggdGhlIHBsdWdpbiB0byBhZGQgdGhlIGFj dHVhbCBkaW1lbnNpb24gdG8gdGhlIDxjb2RlPiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcgKHRo ZSBzaXplIGF0IHRoZSB0aW1lIHRoZSB0aHVtYm5haWwgd2FzIGNyZWF0ZWQpLCB0ZWxsIHRo ZSBwbHVnaW4gd2l0aCB0aGlzIGF0dHJpYnV0ZS4gQ2hvb3NlIG9uZSBvciBib3RoIG9mIDxj b2RlPndpZHRoPC9jb2RlPiBvciA8Y29kZT5oZWlnaHQ8L2NvZGU+LiBDb21tYS1zZXBhcmF0 ZSBhcyByZXF1aXJlZC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+ZGlzcGxheTwvc3Bhbj4gOiBieSBkZWZhdWx0LCB0aGlzIHRhZyBvdXRwdXRzIGEg ZnVsbCA8Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnLiBJZiB5b3UganVzdCByZXF1aXJl IHRoZSBpbWFnZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBzbyB5b3UgY2FuIG1h a2UgeW91ciBvd24gaW1hZ2UgdGFncywgc2V0IDxjb2RlPmRpc3BsYXk9JnF1b3Q7dXJsJnF1 b3Q7PC9jb2RlPi4gRGVmYXVsdDogPGNvZGU+dGh1bWJuYWlsPC9jb2RlPjwvbGk+Cgk8L3Vs PgoKCTxwPlRoZSB0YWcgd29ya3MgaW5zaWRlIDxjb2RlPiZsdDt0eHA6aW1hZ2VfbGlzdCZn dDs8L2NvZGU+IG9yIGNhbiBiZSB1c2VkIHN0YW5kYWxvbmUgYnkgc3BlY2lmeWluZyB0aGUg PGNvZGU+aWQ8L2NvZGU+IG9yIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZS48L3A+CgoJ PGgzIGlkPSJzbWRfaWZfdGh1bWJuYWlsIj48Y29kZT4mbHQ7dHhwOnNtZF9pZl90aHVtYm5h aWwvJmd0OzwvY29kZT48L2gzPgoKCTxwPkEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciB0aGUg YnVpbHQgaW4gPGNvZGU+Jmx0O3R4cDppZl90aHVtYm5haWwgLyZndDs8L2NvZGU+IHRhZyB3 aXRoIGV4YWN0bHkgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4gSXQgaGFzIG9uZSBhdHRyaWJ1 dGU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+IDog dXNlIHRoaXMgYXR0cmlidXRlIHRvIGNoZWNrIGZvciB0aHVtYm5haWxzIG9mIHRoZSBnaXZl biBwcm9maWxlIG5hbWUuIGUuZy4gPGNvZGU+dHlwZT0mcXVvdDtNZWRpdW0mcXVvdDs8L2Nv ZGU+LiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUsIHRoZSBkZWZhdWx0 IHByb2ZpbGUgd2lsbCBiZSB0ZXN0ZWQuIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgcHJvZmls ZSB0aGUgdGFnIHdpbGwgYWx3YXlzIHJlbmRlciB0aGUgPGNvZGU+Jmx0O3R4cDplbHNlIC8m Z3Q7PC9jb2RlPiBwb3J0aW9uPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRfdGh1bWJfaG93 X2l0X3dvcmtzIj5Ib3cgaXQgd29ya3M8L2gyPgoKCTxwPkZvciByZWZlcmVuY2UsIHdoZW4g eW91IGNyZWF0ZSBhIHByb2ZpbGUgYSBkaXJlY3RvcnkgaXMgY3JlYXRlZCB3aXRoIHRoYXQg bmFtZSBpbnNpZGUgeW91ciBUeHAgPGNvZGU+aW1hZ2VzPC9jb2RlPiBmb2xkZXIuIEluc2lk ZSB0aGlzIGZvbGRlciB5b3Ugd2lsbCBmaW5kIGltYWdlcyBvZiB0aGUgZm9ybWF0IDxjb2Rl PmlkLmV4dDwvY29kZT46IHdoZXJlIDxjb2RlPmlkPC9jb2RlPiBhbmQgPGNvZGU+ZXh0PC9j b2RlPiBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBpbWFnZSBJRHMgaW4gdGhlIFR4cCBkYXRh YmFzZS4gVGhhdCYjODIxNztzIHByZXR0eSBtdWNoIGl0LjwvcD4KCgk8cD5Zb3UgY2FuIGRl bGV0ZSB0aHVtYm5haWwgZmlsZXMgbWFudWFsbHkgZnJvbSBhbnkgb2YgdGhlc2UgZGlyZWN0 b3JpZXMgYW5kIHRoZSBwbHVnaW4gd2lsbCBmaWd1cmUgZXZlcnl0aGluZyBvdXQuIEJ1dCBp dCYjODIxNztzIHByb2JhYmx5IG5vdCBhZHZpc2FibGUgdG8gZGVsZXRlIHRoZSBkaXJlY3Rv cmllcyB0aGVtc2VsdmVzICYjODIxMjsgdXNlIHRoZSA8ZW0+W0RlbGV0ZV08L2VtPiBidXR0 b25zIGluIHRoZSBjb250cm9sIHBhbmVsIGZvciB0aGF0LjwvcD4KCgk8aDIgaWQ9InNtZF90 aHVtYl9jaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4wNiBBdWcgMjAx MCB8IDAuMTBiZXRhIHwgSW5pdGlhbCBiZXRhIHJlbGVhc2U8L2xpPgoJCTxsaT4wNCBPY3Qg MjAxMCB8IDAuMTAgfCBPZmZpY2lhbCBwdWJsaWMgcmVsZWFzZTwvbGk+CgkJPGxpPjA5IE5v diAyMDEwIHwgMC4xMSB8IEFkZGVkIDxjb2RlPmZvcmNlX3NpemU8L2NvZGU+IGFuZCA8Y29k ZT5hZGRfc3RhbXA8L2NvZGU+IChib3RoIHRoYW5rcyB6ZXJvKSA7IHJlbW92ZWQgdW5uZWNl c3NhcnkgREIgY2FsbDwvbGk+CgkJPGxpPjEwIE5vdiAyMDEwIHwgMC4xMiB8IEFkZGVkIGFi aWxpdHkgdG8gc3luYyBkZWZhdWx0IHByb2ZpbGUgdGh1bWJzIHdpdGggdGhlIGNvcnJlc3Bv bmRpbmcgVHhwIHRodW1ibmFpbHMgKHRoYW5rcyB6ZXJvKTwvbGk+CgkJPGxpPjEwIE5vdiAy MDEwIHwgMC4xMyB8IEFkZGVkIGNvbmZpcm1hdGlvbiBvbiA8ZW0+Q3JlYXRlIGFsbDwvZW0+ IDsgcmVsYWJlbGxlZCB1cGxvYWQgYm94ICh0aGFuayB1bGkpIDsgdGFtZWQgc3R5bGVzIDsg c2lsZW5jZWQgY2htb2Qgd2FybmluZ3MgKHRoYW5rcyB6ZXJvKTwvbGk+CgkJPGxpPjIxIE5v diAyMDEwIHwgMC4xNCB8IFBlcm1pdHRlZCB0aHVtYnMgdG8gYmUgbGFyZ2VyIHRoYW4gdGhl IG9yaWdpbmFsIGltYWdlcyAodGhhbmtzIG1hbmlxdWkpIDsgZml4ZWQgY2FsbGJhY2tzIGZv ciBpbWFnZSB1cGxvYWRpbmcgYW5kIGRlbGV0aW5nPC9saT4KCQk8bGk+MjYgSmFuIDIwMTEg fCAwLjIwIHwgVG9vbHMgLyBwcmVmcyBzZXBhcmF0ZWQgZnJvbSBwcm9maWxlIGxpc3QgOyBw ZXJtaXR0ZWQgYmF0Y2ggY3JlYXRpb24gdmlhIDEpIHNlbGVjdGVkIGltYWdlcyAyKSBjYXRl Z29yeSAzKSBhdXRob3IgKHRoYW5rcyBqcGR1cG9udCkgOyBhZGRlZCBzbWRfdGh1bWJfYXV0 b19yZXBsYWNlIG9wdGlvbiBhbmQgYWx0ZXJlZCBkZWZhdWx0IGJlaGF2aW91ciAodGhhbmtz IG1hbmlxdWkpIDsgZml4ZWQgVHhwIHRodW1ibmFpbCBjcmVhdGlvbiBvbiB0aHVtYm5haWwg cmVwbGFjZSBhbmQgbWFkZSBwcmVmcyBnbG9iYWwgJiM4MjEyOyBhbmQgb25seSBhdmFpbGFi bGUgdG8gc2l0ZSBhZG1pbnMgKGFsbCB0aGFua3MganN0dWJicykgOyBmaXhlZCBOZXcgUHJv ZmlsZSBidXR0b24gd3JhcHBpbmcgKHRoYW5rcyBqcGR1cG9udCk8L2xpPgoJCTxsaT4xMiBN YXkgMjAxMSB8IDAuMjEgfCBBZGRlZCA8Y29kZT5zbWRfdGh1bWJfZ2V0X3Byb2ZpbGVzKCk8 L2NvZGU+IGZvciBvdGhlciBwbHVnaW5zIHRvIGZpbmQgd2hpY2ggcHJvZmlsZXMgYXJlIGF2 YWlsYWJsZTwvbGk+CgkJPGxpPjEyIE9jdCAyMDExIHwgMC4yMiB8IEFkZGVkIDxjb2RlPmRp c3BsYXk8L2NvZGU+IGF0dHJpYnV0ZSA7IGFkZGVkICYjODIxNjtjcmVhdGUgZnJvbSYjODIx NzsgcHJlZmVyZW5jZSAodGhhbmtzIHRoZSBibHVlIGRyYWdvbi9tYW5pcXVpKSA7IGZpeGVk IHBsdWdpbiBmb3IgZGFzaGJvYXJkIHVzZSA7IGZpeGVkIGpRdWVyeSBhdHRyL3Byb3AgaW4g cHJlZnMgOyBmaXhlZCBUeHAgbWVudSBpbnRlcmZlcmVuY2UgKHRoYW5rcyBtYW5pcXVpKTwv bGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8 c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30K I3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNv dXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBl NjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6 bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46 MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgaDEgeyBmb250OiAy MHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVy OyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFk ZGluZzoxMHB4IDAgMDsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRf aGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNw YWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGlu ZTsgfQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7 IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06 IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNz bWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgfQojc21kX2hlbHAgdGFibGUgeyB3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBw YWRkaW5nLWJvdHRvbToxZW07IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3Jk ZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwOyB9CiNzbWRfaGVscCB1bCB7IGxp c3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpy ZWQ7IH0KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRf aGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQg UExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6Ijg2NTExNmRiOTNlOWJiMzA4 MTZkZTkwNzlkMGVmOTA1Ijt9