# Name: smd_tabber v0.10 # Type: Admin/Public side plugin # Add and manage TXP tabs # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEwOiJzbWRfdGFiYmVyIjtzOjY6ImF1dGhvciI7czoxMToi U3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29u LmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjEwIjtzOjExOiJkZXNjcmlwdGlvbiI7czoy MzoiQWRkIGFuZCBtYW5hZ2UgVFhQIHRhYnMiO3M6NDoiY29kZSI7czoyMzgyOToiaWYgKCFk ZWZpbmVkKCdTTURfVEFCQkVSJykpIHsNCglkZWZpbmUoIlNNRF9UQUJCRVIiLCAnc21kX3Rh YmJlcicpOw0KfQ0KaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICR0 ZXh0YXJyYXksICRzbWRfdGFiYmVyX2V2ZW50LCAkc21kX3RhYmJlcl9zdHlsZXMsICR0eHBf dXNlciwgJHNtZF90YWJiZXJfY2FsbHN0YWNrLCAkc21kX3RhYmJlcl91cHJpdnMsICRzbWRf dGFiYmVyX3ByZXZzOw0KDQoJJHNtZF90YWJiZXJfZXZlbnQgPSAnc21kX3RhYmJlcic7DQoJ JHNtZF90YWJiZXJfcHJldnMgPSAnMSc7DQoJJHNtZF90YWJiZXJfc3R5bGVzID0gYXJyYXko DQoJCSdlZGl0JyA9PiAnI3NtZF90YWJiZXJfd3JhcHBlciB7IG1hcmdpbjowIGF1dG87IHdp ZHRoOjUyMHB4OyB9DQouc21kX3RhYmJlcl9lcXVhbCB7IGRpc3BsYXk6dGFibGU7IGJvcmRl ci1jb2xsYXBzZTpzZXBhcmF0ZTsgbWFyZ2luOjEwcHggYXV0bzsgYm9yZGVyLXNwYWNpbmc6 OHB4OyB9DQouc21kX3RhYmJlcl9yb3cgeyBkaXNwbGF5OnRhYmxlLXJvdzsgfQ0KLnNtZF90 YWJiZXJfcm93IGRpdiB7IGRpc3BsYXk6dGFibGUtY2VsbDsgfQ0KLnNtZF90YWJiZXJfcm93 IC5zbWRfdGFiYmVyX2xhYmVsIHsgd2lkdGg6MTUwcHg7IHRleHQtYWxpZ246cmlnaHQ7IHBh ZGRpbmc6MnB4IDAgMCAwOyB9DQouc21kX3RhYmJlcl9yb3cgLnNtZF90YWJiZXJfdmFsdWUg eyB3aWR0aDozNTBweDsgdmVydGljYWwtYWxpZ246bWlkZGxlOyB9DQojc21kX3RhYmJlcl9z ZWxlY3QgeyBtYXJnaW4tYm90dG9tOi0yMHB4OyB9DQouc21kX3RhYmJlcl9zYXZlIHsgZmxv YXQ6cmlnaHQ7IG1hcmdpbjoxMHB4IDUwcHggMCAwIWltcG9ydGFudDt9JywNCgkJJ3ByZWZz JyA9PiAnLnNtZF9sYWJlbCB7IHRleHQtYWxpZ246IHJpZ2h0IWltcG9ydGFudDsgdmVydGlj YWwtYWxpZ246IHRvcDsgfQ0KCQknLA0KCSk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90 YWJiZXJfd2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLicuJHNtZF90YWJiZXJfZXZlbnQp Ow0KDQoJJHVsaXN0ID0gZ2V0X3ByZWYoJ3NtZF90YWJiZXJfdGFiX3ByaXZzJywgJycpOw0K CSRhbGxvd2VkID0gKCR1bGlzdCkgPyBleHBsb2RlKCcsJywgJHVsaXN0KSA6IGFycmF5KCk7 DQoJJGxldnMgPSAoJGFsbG93ZWQpID8gJzEsMiwzLDQsNSw2JyA6ICcxJzsNCglpZiAoZW1w dHkoJGFsbG93ZWQpIHx8IGluX2FycmF5KCR0eHBfdXNlciwgJGFsbG93ZWQpKSB7DQoJCWFk ZF9wcml2cygkc21kX3RhYmJlcl9ldmVudCwgJGxldnMpOw0KCX0NCg0KCS8vIEdyYWIgdGhp cyBoZXJlIHNvIHRoYXQgdGhlIHByaXZzIGFyZSBrbm93biBpbW1lZGlhdGVseSBhZnRlciBt YW51YWwgaW5zdGFsbA0KCSRzbWRfdGFiYmVyX3Vwcml2cyA9IHNhZmVfZmllbGQoJ3ByaXZz JywgJ3R4cF91c2VycycsICJuYW1lID0gJyIuZG9TbGFzaCgkdHhwX3VzZXIpLiInIik7DQoN CglyZWdpc3Rlcl90YWIoJ2FkbWluJywgJHNtZF90YWJiZXJfZXZlbnQsIHNtZF90YWJiZXJf Z1R4dCgnc21kX3RhYmJlcl90YWJfbmFtZScpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21k X3RhYmJlcl9kaXNwYXRjaCcsICRzbWRfdGFiYmVyX2V2ZW50KTsNCg0KCS8vIERvIHRoZSB0 YWJiaW5nIGRlZWQNCglpZiAoc21kX3RhYmJlcl90YWJsZV9leGlzdCgxKSkgew0KCQlyZWdp c3Rlcl9jYWxsYmFjaygnc21kX3RhYmJlcl9jc3NfbGluaycsICdhZG1pbl9zaWRlJywgJ2hl YWRfZW5kJyk7DQoJCSRzbWRfdGFicyA9IHNhZmVfcm93cygnKicsIFNNRF9UQUJCRVIsICcx PTEgT1JERVIgQlkgYXJlYSwgc29ydF9vcmRlciwgbmFtZScpOw0KDQoJCS8vIFl1ayBidXQg bm8gb3RoZXIgd2F5IHRvIGdldCB0aGVzZS4NCgkJLy8gTkI6ICdzdGFydCcgbWlzc2luZyBv biBwdXJwb3NlIGFzIGl0IGhhcyBubyBwcml2cyBieSBkZWZhdWx0LCBzbyBuZWVkcyB0aGVt IGFkZGluZw0KCSAJJHNtZF9hcmVhcyA9IGFycmF5KCdjb250ZW50JywgJ3ByZXNlbnRhdGlv bicsICdhZG1pbicsICdleHRlbnNpb25zJyk7DQoNCgkJZm9yZWFjaCAoJHNtZF90YWJzIGFz ICRpZHggPT4gJHRhYikgew0KCQkJJG5hbWUgPSAkdGFiWyduYW1lJ107DQoJCQkkYXJlYSA9 ICR0YWJbJ2FyZWEnXTsNCgkJCSRhcmVhbmFtZSA9IHN0cnRvbG93ZXIoc2FuaXRpemVGb3JV cmwoJGFyZWEpKTsNCgkJCSRhcmVhX3ByaXZuYW1lID0gJ3RhYi4nIC4gJGFyZWFuYW1lOw0K CQkJJGNyZWF0ZV90b3AgPSAoIWluX2FycmF5KCRhcmVhbmFtZSwgJHNtZF9hcmVhcykpOw0K CQkJJHRhYm5hbWUgPSBzdHJ0b2xvd2VyKHNhbml0aXplRm9yVXJsKCRuYW1lKSk7DQoNCgkJ CSRlcHJpdnMgPSBleHBsb2RlKCcsJywgJHRhYlsndmlld19wcml2cyddKTsNCgkJCSRyaWdo dHMgPSBpbl9hcnJheSgkc21kX3RhYmJlcl91cHJpdnMsICRlcHJpdnMpOw0KDQoJCQlpZiAo JHJpZ2h0cykgew0KCQkJCWlmICgkY3JlYXRlX3RvcCkgew0KCQkJCQlhZGRfcHJpdnMoJGFy ZWFfcHJpdm5hbWUsICRzbWRfdGFiYmVyX3Vwcml2cyk7DQoJCQkJCSRzbWRfYXJlYXNbXSA9 ICRhcmVhbmFtZTsNCgkJCQkJaWYgKCRhcmVhbmFtZSAhPSAnc3RhcnQnKSB7DQoJCQkJCQkk dGV4dGFycmF5Wyd0YWJfJy4kYXJlYW5hbWVdID0gJGFyZWE7DQoJCQkJCX0NCgkJCQl9DQoN CgkJCQlhZGRfcHJpdnMoJHRhYm5hbWUsICRzbWRfdGFiYmVyX3Vwcml2cyk7DQoJCQkJcmVn aXN0ZXJfdGFiKCRhcmVhbmFtZSwgJHRhYm5hbWUsICRuYW1lKTsNCgkJCQlyZWdpc3Rlcl9j YWxsYmFjaygnc21kX3RhYmJlcl9yZW5kZXJfdGFiJywgJHRhYm5hbWUpOw0KCQkJCSRzbWRf dGFiYmVyX2NhbGxzdGFja1skdGFibmFtZV0gPSBhcnJheSgnbmFtZScgPT4gJG5hbWUsICdw YWdlJyA9PiAkdGFiWydwYWdlJ10sICdzdHlsZScgPT4gJHRhYlsnc3R5bGUnXSk7DQoJCQl9 DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3RhYmJlcl9yZW5kZXJfdGFiKCRldnQsICRzdHApIHsNCglnbG9iYWwgJHNtZF90YWJi ZXJfY2FsbHN0YWNrOw0KDQoJJHRhYl9pbmZvID0gJHNtZF90YWJiZXJfY2FsbHN0YWNrWyRl dnRdOw0KDQoJLy8gQWxsb3cgbXVsdGlwbGUgcGFyc2UgY2FsbHMgZm9yIGFueSBuZXN0ZWQg e3JlcGxhY2VkfSBjb250ZW50DQoJJHBhcnNlX2RlcHRoID0gaW50dmFsKGdldF9wcmVmKCdz bWRfdGFiYmVyX3BhcnNlX2RlcHRoJywgMSkpOw0KDQoJcGFnZXRvcCgkdGFiX2luZm9bJ25h bWUnXSk7DQoNCgkkaHRtbCA9IHNhZmVfZmllbGQoJ3VzZXJfaHRtbCcsICd0eHBfcGFnZScs ICJuYW1lPSciLmRvU2xhc2goJHRhYl9pbmZvWydwYWdlJ10pLiInIik7DQoJaWYgKCEkaHRt bCkgew0KCQkkaHRtbCA9ICc8dHhwOnNtZF90YWJiZXJfZWRpdF9wYWdlIC8+Jy5uLic8dHhw OnNtZF90YWJiZXJfZWRpdF9zdHlsZSAvPic7DQoJfQ0KDQoJLy8gSGFuZCBvdmVyIGNvbnRy b2wgdG8gdGhlIFBhZ2UgY29kZQ0KCWluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoLnBo cCc7DQoJZm9yICgkaWR4ID0gMDsgJGlkeCA8ICRwYXJzZV9kZXB0aDsgJGlkeCsrKSB7DQoJ CSRodG1sID0gcGFyc2UoJGh0bWwpOw0KCX0NCgllY2hvICRodG1sOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90YWJiZXJfZGlzcGF0Y2goJGV2 dCwgJHN0cCkgew0KCWlmKCEkc3RwIG9yICFpbl9hcnJheSgkc3RwLCBhcnJheSgNCgkJCSdz bWRfdGFiYmVyX3RhYmxlX2luc3RhbGwnLA0KCQkJJ3NtZF90YWJiZXJfdGFibGVfcmVtb3Zl JywNCgkJCSdzbWRfdGFiYmVyX2NzcycsDQoJCQknc21kX3RhYmJlcl9wcmVmcycsDQoJCQkn c21kX3RhYmJlcl9wcmVmc2F2ZScsDQoJCQknc21kX3RhYmJlcl9zYXZlJywNCgkJCSdzbWRf dGFiYmVyX2RlbGV0ZScsDQoJCSkpKSB7DQoJCXNtZF90YWJiZXIoJycpOw0KCX0gZWxzZSAk c3RwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21k X3RhYmJlcl93ZWxjb21lKCRldnQsICRzdHApIHsNCgkkbXNnID0gJyc7DQoJc3dpdGNoICgk c3RwKSB7DQoJCWNhc2UgJ2luc3RhbGxlZCc6DQoJCQlzbWRfdGFiYmVyX3RhYmxlX2luc3Rh bGwoMCk7DQoJCQkkbXNnID0gJ1N1cGVydGFicyBhcmUgZ28hJzsNCgkJCWJyZWFrOw0KCQlj YXNlICdkZWxldGVkJzoNCgkJCXNtZF90YWJiZXJfdGFibGVfcmVtb3ZlKDApOw0KCQkJYnJl YWs7DQoJfQ0KCXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF90YWJiZXJfY3NzKCkgew0KCWdsb2JhbCAkZXZlbnQ7DQoJJG5h bWUgPSBkb1NsYXNoKGdwcygnbmFtZScpKTsNCgkkY3NzID0gc2FmZV9maWVsZCgnY3NzJywg J3R4cF9jc3MnLCAibmFtZT0nJG5hbWUnIik7DQoJdW5zZXQoJG5hbWUpOw0KDQoJaWYgKCRj c3MpIHsNCgkJaGVhZGVyKCdDb250ZW50LXR5cGU6IHRleHQvY3NzJyk7DQoJCWVjaG8gJGNz czsNCgkJZXhpdCgpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfdGFiYmVyX2Nzc19saW5rKCkgew0KCWdsb2JhbCAkZXZlbnQsICRzbWRf dGFiYmVyX2V2ZW50Ow0KCS8vIEFubm95aW5nbHksIHdlIG5lZWQgYW4gZXh0cmEgdGVzdCBo ZXJlIGluIGNhc2UgdGhlIHBsdWdpbiBoYXMgYmVlbiBkZWxldGVkLg0KCS8vIFRoaXMgY2Fs bGJhY2sgaXMgcmVnaXN0ZXJlZCBiZWZvcmUgcGx1Z2luIGRlbGV0aW9uIGJ1dCBieSB0aGUg dGltZSBpdCBydW5zIHRoZSB0YWJsZSBpcyBnb25lDQoJaWYgKHNtZF90YWJiZXJfdGFibGVf ZXhpc3QoMSkpIHsNCgkJJHNtZF90YWIgPSBzYWZlX2ZpZWxkKCdzdHlsZScsIFNNRF9UQUJC RVIsICJuYW1lID0gJyIuZG9TbGFzaCgkZXZlbnQpLiInIik7DQoJCWVjaG8gKCRzbWRfdGFi KSA/IG4uJzxsaW5rIGhyZWY9Ij9ldmVudD0nLiRzbWRfdGFiYmVyX2V2ZW50LmEuJ3N0ZXA9 c21kX3RhYmJlcl9jc3MnLmEuJ25hbWU9Jy4kc21kX3RhYi4nIiByZWw9InN0eWxlc2hlZXQi IHR5cGU9InRleHQvY3NzIiAvPicubiA6ICcnOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFiYmVyKCRtc2c9JycpIHsNCglnbG9iYWwg JHNtZF90YWJiZXJfZXZlbnQsICRzbWRfdGFiYmVyX3Vwcml2cywgJHNtZF90YWJiZXJfcHJl dnMsICRzbWRfdGFiYmVyX3N0eWxlczsNCg0KCXBhZ2V0b3Aoc21kX3RhYmJlcl9nVHh0KCdz bWRfdGFiYmVyX3RhYl9uYW1lJyksICRtc2cpOw0KCSRwcmVmX3JpZ2h0cyA9IGluX2FycmF5 KCRzbWRfdGFiYmVyX3ByZXZzLCBleHBsb2RlKCcsJywgJHNtZF90YWJiZXJfdXByaXZzKSk7 DQoNCglpZiAoc21kX3RhYmJlcl90YWJsZV9leGlzdCgxKSkgew0KCQkkdGFiX25hbWUgPSAk dGFiX25ld19uYW1lID0gZ3BzKCdzbWRfdGFiYmVyX25hbWUnKTsNCgkJJGFyZWEgPSAkY3Vy cl9wYWdlID0gJGN1cnJfc3R5bGUgPSAkc29ydF9vcmRlciA9ICcnOw0KCQkkdmlld19wcml2 cyA9IGFycmF5KCk7DQoJCSR0YWJsaXN0ID0gJHNtZF9hcmVhcyA9IGFycmF5KCk7DQoJCSR0 YWJfcHJlZml4ID0gZ2V0X3ByZWYoJ3NtZF90YWJiZXJfdGFiX3ByZWZpeCcsICd0YWJiZXJf JywgMSk7DQoNCgkJLy8gQ2FuJ3QgdXNlIHRoZSBzbWRfdGFicyBhbmQgc21kX2FyZWFzIGxp c3RzIGluIHRoZSBnbG9iYWwgc2NvcGUgJ2NvcyB0aGV5J3JlIHN0YWxlIC8gc3RydG9sb3dl cigpZWQNCgkJJHNtZF90YWJzID0gc2FmZV9yb3dzKCcqJywgU01EX1RBQkJFUiwgJzE9MSBP UkRFUiBCWSBhcmVhLCBzb3J0X29yZGVyLCBuYW1lJyk7DQoJCWlmICgkc21kX3RhYnMpIHsN CgkJCWZvcmVhY2ggKCRzbWRfdGFicyBhcyAkaWR4ID0+ICR0YWIpIHsNCgkJCQkkdGFibGlz dFskdGFiWydhcmVhJ11dWyR0YWJbJ25hbWUnXV0gPSAkdGFiWyduYW1lJ107DQoJCQkJJHNt ZF9hcmVhc1skdGFiWydhcmVhJ11dID0gc3RydG9sb3dlcihzYW5pdGl6ZUZvclVybCgkdGFi WydhcmVhJ10pKTsNCgkNCgkJCQlpZiAoJHRhYlsnbmFtZSddID09ICR0YWJfbmFtZSkgew0K CQkJCQkkc29ydF9vcmRlciA9ICR0YWJbJ3NvcnRfb3JkZXInXTsNCgkJCQkJJGFyZWEgPSAk dGFiWydhcmVhJ107DQoJCQkJCSR2aWV3X3ByaXZzID0gZXhwbG9kZSgnLCcsICR0YWJbJ3Zp ZXdfcHJpdnMnXSk7DQoJCQkJCSRjdXJyX3BhZ2UgPSAkdGFiWydwYWdlJ107DQoJCQkJCSRj dXJyX3N0eWxlID0gJHRhYlsnc3R5bGUnXTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBE ZWZhdWx0IHRvIHRoZSBjdXJyZW50IHVzZXIgbGV2ZWwncyBwcml2cyBmb3IgbmV3IGl0ZW1z DQoJCWlmICgkdGFiX25hbWUgPT0gJycpIHsNCgkJCSR2aWV3X3ByaXZzW10gPSAkc21kX3Rh YmJlcl91cHJpdnM7DQoJCX0NCg0KCQkvLyBCdWlsZCBhIHNlbGVjdCBsaXN0IG9mIHRhYiBu YW1lcywgaW5qZWN0aW5nIG9wdGdyb3VwcyBhYm92ZSBhbnkgYXJlYXMNCgkJJG9wdGdyb3Vw cyA9IChjb3VudCgkdGFibGlzdCkgPiAxKTsgLy8gT25seSBhZGQgb3B0Z3JvdXBzIGlmIHRo ZXJlIGFyZSB0YWJzIGluIG1vcmUgdGhhbiBvbmUgYXJlYQ0KCQkkdGFiU2VsZWN0b3IgPSAn JzsNCgkJaWYgKCR0YWJsaXN0KSB7DQoJCQkkdGFiU2VsZWN0b3IgLj0gJzxzZWxlY3QgbmFt ZT0ic21kX3RhYmJlcl9uYW1lIiBpZD0ic21kX3RhYmJlcl9uYW1lIiBvbmNoYW5nZT0ic3Vi bWl0KHRoaXMuZm9ybSk7Ij4nOw0KCQkJJHRhYlNlbGVjdG9yIC49ICc8b3B0aW9uIHZhbHVl PSIiPicgLiBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJfbmV3X3RhYicpIC4gJzwvb3B0 aW9uPic7DQoJCQkkbGFzdEFyZWEgPSAnJzsNCgkJCSRpbkdyb3VwcyA9IGZhbHNlOyAvLyBJ cyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBmaXJzdCBhcmVhIGlzIHJlYWNoZWQNCgkJCWZvcmVh Y2ggKCR0YWJsaXN0IGFzICR0aGVBcmVhID0+ICR0aGVUYWJzKSB7DQoJCQkJaWYgKCRvcHRn cm91cHMgJiYgJGxhc3RBcmVhICE9ICR0aGVBcmVhKSB7DQoJCQkJCSR0YWJTZWxlY3RvciAu PSAoJGluR3JvdXBzKSA/ICc8L29wdGdyb3VwPicgOiAnJzsNCgkJCQkJJHRhYlNlbGVjdG9y IC49ICc8b3B0Z3JvdXAgbGFiZWw9IicuJHRoZUFyZWEuJyI+JzsNCgkJCQkJJGluR3JvdXBz ID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZvcmVhY2goJHRoZVRhYnMg YXMgJHRoZVRhYiA9PiAkdGFiTmFtZSkgew0KCSAgICAgICAgICAgICR0YWJTZWxlY3RvciAu PSAnPG9wdGlvbiB2YWx1ZT0iJy4kdGhlVGFiLiciJy4oKCR0aGVUYWIgPT0gJHRhYl9uYW1l KSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykuJz4nIC4gJHRhYk5hbWUgLiAnPC9v cHRpb24+JzsNCgkJCQl9DQoJCQl9DQoJCQkkdGFiU2VsZWN0b3IgLj0gKCgkb3B0Z3JvdXBz KSA/ICc8L29wdGdyb3VwPicgOiAnJykgLiAnPC9zZWxlY3Q+JzsNCgkJfQ0KDQoJCSRhcmVh cyA9IGFyZWFzKCk7DQoJCSRhcmVhcyA9IGFycmF5X21lcmdlKCRhcmVhcywgJHNtZF9hcmVh cyk7DQoJCSRhcmVhX2xpc3QgPSBhcnJheSgnJyA9PiBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90 YWJiZXJfbmV3X2FyZWEnKSk7DQoJCWZvcmVhY2ggKCRhcmVhcyBhcyAkaWR4ID0+ICRhbGlz dCkgew0KCQkJJGtleSA9IGFycmF5X3NlYXJjaCgkaWR4LCAkc21kX2FyZWFzKTsNCgkJCWlm ICgka2V5ID09PSBmYWxzZSkgew0KCQkJCSRhcmVhX2xpc3RbJGlkeF0gPSAkaWR4Ow0KCQkJ fSBlbHNlIHsNCgkJCQkkYXJlYV9saXN0WyRrZXldID0gJGtleTsNCgkJCX0NCgkJfQ0KDQoJ CSRwcml2cyA9IGdldF9ncm91cHMoKTsNCgkJJHByaXZzZWwgPSBzbWRfdGFiYmVyX211bHRp X3NlbGVjdCgnc21kX3RhYmJlcl92aWV3X3ByaXZzJywgJHByaXZzLCAkdmlld19wcml2cyk7 DQoNCgkJJHBhZ2VzID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhwX3BhZ2UnLCAibmFtZSBs aWtlICciLmRvU2xhc2goJHRhYl9wcmVmaXgpLiIlJyIpOw0KCQlmb3JlYWNoICgkcGFnZXMg YXMgJGlkeCA9PiAkcGFnZSkgew0KCQkJJHBhZ2VzWyRpZHhdID0gc3RyX3JlcGxhY2UoJHRh Yl9wcmVmaXgsICcnLCAkcGFnZSk7DQoJCX0NCgkJJHN0eWxlcyA9IHNhZmVfY29sdW1uKCdu YW1lJywgJ3R4cF9jc3MnLCAibmFtZSBsaWtlICciLmRvU2xhc2goJHRhYl9wcmVmaXgpLiIl JyIpOw0KCQlmb3JlYWNoICgkc3R5bGVzIGFzICRpZHggPT4gJHN0eWxlKSB7DQoJCQkkc3R5 bGVzWyRpZHhdID0gc3RyX3JlcGxhY2UoJHRhYl9wcmVmaXgsICcnLCAkc3R5bGUpOw0KCQl9 DQoNCgkJJGVkaXRjZWxsID0gKCgkc21kX3RhYnMpDQoJCQkJPyAnPGRpdiBjbGFzcz0ic21k X3RhYmJlcl9sYWJlbCI+Jw0KCQkJCQkuIHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9j aG9vc2UnKQ0KCQkJCQkuICc8L2Rpdj48ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX3ZhbHVlIj4n DQoJCQkJCS4gJHRhYlNlbGVjdG9yDQoJCQkJCS4gKCgkdGFiX25hbWUgIT0gJycpDQoJCQkJ CQk/IHNwIC4gZUxpbmsoc3RydG9sb3dlcihzYW5pdGl6ZUZvclVybCgkdGFiX25hbWUpKSwg JycsICcnLCcnLCBnVHh0KCdWaWV3JykpDQoJCQkJCQk6ICcnKQ0KCQkJCQkuIGVJbnB1dCgk c21kX3RhYmJlcl9ldmVudCkNCgkJCQkJLic8L2Rpdj4nDQoJCQkJOiAnJyk7DQoNCgkJJHBy ZWZfbGluayA9ICRwcmVmX3JpZ2h0cyA/IHNwIC4gZUxpbmsoJHNtZF90YWJiZXJfZXZlbnQs ICdzbWRfdGFiYmVyX3ByZWZzJywgJycsICcnLCAnWycuc21kX3RhYmJlcl9nVHh0KCdzbWRf dGFiYmVyX3ByZWZzJykuJ10nKSA6ICcnOw0KDQoJCS8vIEVkaXQgZm9ybQ0KCQllY2hvICc8 c3R5bGUgdHlwZT0idGV4dC9jc3MiPicgLiAkc21kX3RhYmJlcl9zdHlsZXNbJ2VkaXQnXSAu ICc8L3N0eWxlPic7DQoJCWVjaG8gJzxkaXYgaWQ9InNtZF90YWJiZXJfd3JhcHBlciI+JzsN CgkJZWNobyBoZWQoc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX2hlYWRpbmcnKSwgMik7 DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfcHJlZmxpbmsiPicgLiAkcHJlZl9s aW5rIC4gJzwvZGl2Pic7DQoJCWVjaG8gJzxmb3JtIGlkPSJzbWRfdGFiYmVyX3NlbGVjdCIg YWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+JzsNCgkJZWNobyAnPGRpdiBjbGFz cz0ic21kX3RhYmJlcl9lcXVhbCI+JzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJl cl9yb3ciPicgLiAkZWRpdGNlbGwgLiAnPC9kaXY+PCEtLSBlbmQgcm93IC0tPic7DQoJCWVj aG8gJzwvZGl2PjwvZm9ybT4nOw0KDQoJCWVjaG8gJzxmb3JtIG5hbWU9InNtZF90YWJiZXJf Zm9ybSIgaWQ9InNtZF90YWJiZXJfZm9ybSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0i cG9zdCI+JzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl9lcXVhbCI+JzsNCgkJ ZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl9yb3ciPic7DQoJCWVjaG8gJzxkaXYgY2xh c3M9InNtZF90YWJiZXJfbGFiZWwiPicgLiBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJf bmFtZScpIC4gJzwvZGl2Pic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfdmFs dWUiPicNCgkJCQkuIGZJbnB1dCgndGV4dCcsICdzbWRfdGFiYmVyX25ld19uYW1lJywgJHRh Yl9uZXdfbmFtZSkNCgkJCQkuIGhJbnB1dCgnc21kX3RhYmJlcl9uYW1lJywgJHRhYl9uYW1l KQ0KCQkJCS4gKCgkdGFiX25hbWUgPT0gJycpDQoJCQkJCT8gJycNCgkJCQkJOiBzcCAuICc8 YSBocmVmPSI/ZXZlbnQ9Jy4kc21kX3RhYmJlcl9ldmVudC4gYS4nc3RlcD1zbWRfdGFiYmVy X2RlbGV0ZScgLiBhIC4gJ3NtZF90YWJiZXJfbmFtZT0nLnVybGVuY29kZSgkdGFiX25hbWUp LiciIGNsYXNzPSJzbWFsbGVyYm94IiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycuZ1R4 dCgnY29uZmlybV9kZWxldGVfcG9wdXAnKS4nXCcpOyI+W3hdPC9hPicNCgkJCQkpDQoJCQkJ LiAnPC9kaXY+Jw0KCQkJCS4gJzwvZGl2PjwhLS0gZW5kIHJvdyAtLT4nOw0KCQllY2hvICc8 ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX3JvdyI+JzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21k X3RhYmJlcl9sYWJlbCI+JyAuIHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9zb3J0X29y ZGVyJykgLiAnPC9kaXY+JzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl92YWx1 ZSI+Jw0KCQkJCS4gZklucHV0KCd0ZXh0JywgJ3NtZF90YWJiZXJfc29ydF9vcmRlcicsICRz b3J0X29yZGVyKQ0KCQkJCS4gJzwvZGl2PicNCgkJCQkuICc8L2Rpdj48IS0tIGVuZCByb3cg LS0+JzsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl9yb3ciPic7DQoJCWVjaG8g JzxkaXYgY2xhc3M9InNtZF90YWJiZXJfbGFiZWwiPicgLiBzbWRfdGFiYmVyX2dUeHQoJ3Nt ZF90YWJiZXJfYXJlYScpIC4gJzwvZGl2Pic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90 YWJiZXJfdmFsdWUiPicNCgkJCQkuIHNlbGVjdElucHV0KCdzbWRfdGFiYmVyX2FyZWEnLCAk YXJlYV9saXN0LCAkYXJlYSkNCgkJCQkuIHNwIC4gZklucHV0KCd0ZXh0JywgJ3NtZF90YWJi ZXJfbmV3X2FyZWEnLCAnJykNCgkJCQkuICc8L2Rpdj4nDQoJCQkJLiAnPC9kaXY+PCEtLSBl bmQgcm93IC0tPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfcm93Ij4nOw0K CQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX2xhYmVsIj4nIC4gc21kX3RhYmJlcl9n VHh0KCdzbWRfdGFiYmVyX3ZpZXdfcHJpdnMnKSAuICc8L2Rpdj4nOw0KCQllY2hvICc8ZGl2 IGNsYXNzPSJzbWRfdGFiYmVyX3ZhbHVlIj4nDQoJCQkJLiAkcHJpdnNlbA0KCQkJCS4gJzwv ZGl2PicNCgkJCQkuICc8L2Rpdj48IS0tIGVuZCByb3cgLS0+JzsNCgkJZWNobyAnPGRpdiBj bGFzcz0ic21kX3RhYmJlcl9yb3ciPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJi ZXJfbGFiZWwiPicgLiBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJfcGFnZScpIC4gJzwv ZGl2Pic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfdmFsdWUiPicNCgkJCQku IHNlbGVjdElucHV0KCdzbWRfdGFiYmVyX3BhZ2UnLCAkcGFnZXMsICRjdXJyX3BhZ2UsIHRy dWUpDQoJCQkJLiBzcCAuICgoJGN1cnJfcGFnZSkgPyBlTGluaygncGFnZScsICcnLCAnbmFt ZScsICRjdXJyX3BhZ2UsIGdUeHQoJ2VkaXQnKSkgOiBlTGluaygncGFnZScsICdwYWdlX25l dycsICcnLCAnJywgZ1R4dCgnY3JlYXRlJykpICkNCgkJCQkuICc8L2Rpdj4nDQoJCQkJLiAn PC9kaXY+PCEtLSBlbmQgcm93IC0tPic7DQoJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJi ZXJfcm93Ij4nOw0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdGFiYmVyX2xhYmVsIj4nIC4g c21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX3N0eWxlJykgLiAnPC9kaXY+JzsNCgkJZWNo byAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl92YWx1ZSI+Jw0KCQkJCS4gc2VsZWN0SW5wdXQo J3NtZF90YWJiZXJfc3R5bGUnLCAkc3R5bGVzLCAkY3Vycl9zdHlsZSwgdHJ1ZSkNCgkJCQku IHNwLiAoKCRjdXJyX3N0eWxlKSA/IGVMaW5rKCdjc3MnLCAnJywgJ25hbWUnLCAkY3Vycl9z dHlsZSwgZ1R4dCgnZWRpdCcpKSA6IGVMaW5rKCdjc3MnLCAncG91cicsICcnLCAnJywgZ1R4 dCgnY3JlYXRlJykpICkNCgkJCQkuICc8L2Rpdj4nDQoJCQkJLiAnPC9kaXY+PCEtLSBlbmQg cm93IC0tPic7DQoNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX3RhYmJlcl9yb3ciPic7DQoJ CWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfbGFiZWwiPiZuYnNwOzwvZGl2Pic7DQoJ CWVjaG8gJzxkaXYgY2xhc3M9InNtZF90YWJiZXJfdmFsdWUiPicNCgkJCQkuIGZJbnB1dCgn c3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3NtZF90YWJiZXJfc2F2ZSBwdWJs aXNoJykNCgkJCQkuIGVJbnB1dCgkc21kX3RhYmJlcl9ldmVudCkNCgkJCQkuIHNJbnB1dCgn c21kX3RhYmJlcl9zYXZlJykNCgkJCQkuICc8L2Rpdj4nDQoJCQkJLiAnPC9kaXY+PCEtLSBl bmQgcm93IC0tPic7DQoNCgkJZWNobyAnPC9kaXY+PCEtLSBlbmQgc21kX3RhYmJlcl9lcXVh bCAtLT4nOw0KCQllY2hvICc8L2Zvcm0+JzsNCgkJZWNobyAnPC9kaXY+PCEtLSBlbmQgc21k X3RhYmJlcl93cmFwcGVyIC0tPic7DQoJfSBlbHNlIHsNCgkJLy8gVGFibGUgbm90IGluc3Rh bGxlZA0KCQkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2 ZW50PScuJHNtZF90YWJiZXJfZXZlbnQuYS4nc3RlcD1zbWRfdGFiYmVyX3RhYmxlX2luc3Rh bGwiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQn LCBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJfdGJsX2luc3RhbGxfbGJsJyksICdzbWFs bGVyYm94JykuJzwvZm9ybT4nOw0KCQkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDto ZWlnaHQ6MjVweCInOw0KCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJZWNobyB0cih0 ZGEoc3Ryb25nKHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9wcmVmc19zb21lX3RibCcp KS5ici5icg0KCQkJCS5zbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJfcHJlZnNfc29tZV9l eHBsYWluJykuYnIuYnINCgkJCQkuc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX3ByZWZz X3NvbWVfb3B0cycpLCAnIGNvbHNwYW49IjIiJykNCgkJKTsNCgkJZWNobyB0cih0ZGEoJGJ0 bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJfQ0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90YWJiZXJfc2F2ZSgp IHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgNCgkJJ3NtZF90YWJiZXJfbmFtZScs DQoJCSdzbWRfdGFiYmVyX25ld19uYW1lJywNCgkJJ3NtZF90YWJiZXJfYXJlYScsDQoJCSdz bWRfdGFiYmVyX25ld19hcmVhJywNCgkJJ3NtZF90YWJiZXJfcGFnZScsDQoJCSdzbWRfdGFi YmVyX3N0eWxlJywNCgkJJ3NtZF90YWJiZXJfc29ydF9vcmRlcicsDQoJKSkpKTsNCg0KCSR2 dSA9IGdwcygnc21kX3RhYmJlcl92aWV3X3ByaXZzJyk7DQoJJHNtZF90YWJiZXJfdmlld19w cml2cyA9ICR2dSA/IGRvU2xhc2goam9pbignLCcsICR2dSkpIDogJyc7DQoNCgkkbXNnID0g Jyc7DQoJJHRoZUFyZWEgPSAoJHNtZF90YWJiZXJfbmV3X2FyZWEgPT0gJycpID8gJHNtZF90 YWJiZXJfYXJlYSA6ICRzbWRfdGFiYmVyX25ld19hcmVhOw0KDQoJaWYgKCRzbWRfdGFiYmVy X25ld19uYW1lID09ICcnKSB7DQoJCSRtc2cgPSBhcnJheShzbWRfdGFiYmVyX2dUeHQoJ3Nt ZF90YWJiZXJfbmVlZF9uYW1lJyksIEVfV0FSTklORyk7DQoJfSBlbHNlIHsNCgkJaWYgKCR0 aGVBcmVhID09ICcnKSB7DQoJCQkkbXNnID0gYXJyYXkoc21kX3RhYmJlcl9nVHh0KCdzbWRf dGFiYmVyX25lZWRfYXJlYScpLCBFX1dBUk5JTkcpOw0KCQl9IGVsc2Ugew0KCQkJJGV4aXN0 cyA9IHNhZmVfZmllbGQoJ25hbWUnLCBTTURfVEFCQkVSLCAibmFtZT0nJHNtZF90YWJiZXJf bmV3X25hbWUnIik7DQoJCQkkc2FtZSA9ICgkc21kX3RhYmJlcl9uYW1lICE9ICRzbWRfdGFi YmVyX25ld19uYW1lKSAmJiAkZXhpc3RzOw0KCQkJaWYgKCRzYW1lID09IGZhbHNlKSB7DQoJ CQkJJF9QT1NUWydzbWRfdGFiYmVyX25hbWUnXSA9ICRzbWRfdGFiYmVyX25ld19uYW1lOw0K CQkJCWlmICgkc21kX3RhYmJlcl9uYW1lID09ICcnKSB7DQoJCQkJCXNhZmVfaW5zZXJ0KFNN RF9UQUJCRVIsICJuYW1lPSckc21kX3RhYmJlcl9uZXdfbmFtZScsIHNvcnRfb3JkZXI9JyRz bWRfdGFiYmVyX3NvcnRfb3JkZXInLCBhcmVhPSciLmRvU2xhc2goJHRoZUFyZWEpLiInLCBw YWdlPSckc21kX3RhYmJlcl9wYWdlJywgc3R5bGU9JyRzbWRfdGFiYmVyX3N0eWxlJywgdmll d19wcml2cz0nJHNtZF90YWJiZXJfdmlld19wcml2cyciKTsNCgkJCQkJJG1zZyA9IHNtZF90 YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9jcmVhdGVkJyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJ c2FmZV91cGRhdGUoU01EX1RBQkJFUiwgIm5hbWU9JyRzbWRfdGFiYmVyX25ld19uYW1lJywg c29ydF9vcmRlcj0nJHNtZF90YWJiZXJfc29ydF9vcmRlcicsIGFyZWE9JyIuZG9TbGFzaCgk dGhlQXJlYSkuIicsIHBhZ2U9JyRzbWRfdGFiYmVyX3BhZ2UnLCBzdHlsZT0nJHNtZF90YWJi ZXJfc3R5bGUnLCB2aWV3X3ByaXZzPSckc21kX3RhYmJlcl92aWV3X3ByaXZzJyIsICJuYW1l PSckc21kX3RhYmJlcl9uYW1lJyIpOw0KCQkJCQkkbXNnID0gc21kX3RhYmJlcl9nVHh0KCdz bWRfdGFiYmVyX3NhdmVkJyk7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkbXNnID0gYXJy YXkoc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX2V4aXN0cycpLCBFX1dBUk5JTkcpOw0K CQkJfQ0KCQl9DQoJfQ0KCXNtZF90YWJiZXIoJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3RhYmJlcl9kZWxldGUoKSB7DQoJZ2xvYmFs ICRzbWRfdGFiYmVyX2V2ZW50Ow0KDQoJJG5hbWUgPSBkb1NsYXNoKGdwcygnc21kX3RhYmJl cl9uYW1lJykpOw0KDQoJJHJldCA9IHNhZmVfZGVsZXRlKFNNRF9UQUJCRVIsICJuYW1lPSck bmFtZSciKTsNCgkkbXNnID0gc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX2RlbGV0ZWQn KTsNCg0KCSRfR0VUWydzbWRfdGFiYmVyX25hbWUnXSA9ICcnOw0KDQoJc21kX3RhYmJlcigk bXNnKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRf dGFiYmVyX3ByZWZzKCRtc2c9JycpIHsNCglnbG9iYWwgJHNtZF90YWJiZXJfZXZlbnQsICRz bWRfdGFiYmVyX3N0eWxlczsNCg0KCXBhZ2V0b3Aoc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFi YmVyX3ByZWZzX2xibCcpLCAkbXNnKTsNCg0KCSR1c2VycyA9IHNhZmVfcm93cygnKicsICd0 eHBfdXNlcnMnLCAnMT0xIE9SREVSIEJZIFJlYWxOYW1lJyk7DQoJJHByaXZzID0gYXJyYXko JycgPT4gc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX2FsbF9wdWJzJykpOw0KCWZvcmVh Y2ggKCR1c2VycyBhcyAkaWR4ID0+ICR1c2VyKSB7DQoJCSRwcml2c1skdXNlclsnbmFtZSdd XSA9ICR1c2VyWydSZWFsTmFtZSddOw0KCX0NCg0KCSRjdXJyX3ByaXZzID0gZXhwbG9kZSgn LCcsIGdldF9wcmVmKCdzbWRfdGFiYmVyX3RhYl9wcml2cycsICcnKSk7DQoJJHBhcnNlX2Rl cHRoID0gZ2V0X3ByZWYoJ3NtZF90YWJiZXJfcGFyc2VfZGVwdGgnLCAnMScpOw0KCSR0YWJf cHJlZml4ID0gZ2V0X3ByZWYoJ3NtZF90YWJiZXJfdGFiX3ByZWZpeCcsICd0YWJiZXJfJyk7 DQoNCgllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicgLiAkc21kX3RhYmJlcl9zdHls ZXNbJ3ByZWZzJ10gLiAnPC9zdHlsZT4nOw0KCWVjaG8gJzxmb3JtIGFjdGlvbj0iaW5kZXgu cGhwIiBtZXRob2Q9InBvc3QiIG5hbWU9InNtZF90YWJiZXJfcHJlZnNfZm9ybSI+JzsNCgll Y2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgllY2hvIHRyKHRkYShoZWQoc21kX3RhYmJlcl9n VHh0KCdzbWRfdGFiYmVyX3ByZWZzX2xibCcpLCAyKSwgJyBjb2xzcGFuPSIzIicpKTsNCgll Y2hvIHRyKA0KCQl0ZGEoc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX3RhYl9wcml2cycp LCAnIGNsYXNzPSJzbWRfbGFiZWwiJykNCgkJLiB0ZGEoc21kX3RhYmJlcl9tdWx0aV9zZWxl Y3QoJ3NtZF90YWJiZXJfdGFiX3ByaXZzJywgJHByaXZzLCAkY3Vycl9wcml2cywgMTApKQ0K CSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl90YWJf cHJlZml4JyksICcgY2xhc3M9InNtZF9sYWJlbCInKQ0KCQkuIHRkYShmSW5wdXQoJ3RleHQn LCAnc21kX3RhYmJlcl90YWJfcHJlZml4JywgJHRhYl9wcmVmaXgpKQ0KCSk7DQoJZWNobyB0 cigNCgkJdGRhKHNtZF90YWJiZXJfZ1R4dCgnc21kX3RhYmJlcl9wYXJzZV9kZXB0aCcpLCAn IGNsYXNzPSJzbWRfbGFiZWwiJykNCgkJLiB0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF90YWJi ZXJfcGFyc2VfZGVwdGgnLCAkcGFyc2VfZGVwdGgpKQ0KCSk7DQoJZWNobyB0cih0ZGEoZUxp bmsoJHNtZF90YWJiZXJfZXZlbnQsICcnLCAnJywgJycsIHNtZF90YWJiZXJfZ1R4dCgnc21k X3RhYmJlcl9jYW5jZWwnKSksICcgY2xhc3M9Im5vbGluZSInKSAuIHRkYShmSW5wdXQoJ3N1 Ym1pdCcsICcnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJykuIGVJbnB1dCgkc21kX3RhYmJl cl9ldmVudCkuc0lucHV0KCdzbWRfdGFiYmVyX3ByZWZzYXZlJyksICcgY2xhc3M9Im5vbGlu ZSInKSk7DQoJZWNobyBlbmRUYWJsZSgpOw0KCWVjaG8gJzwvZm9ybT4nOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF90YWJiZXJfcHJlZnNhdmUo KSB7DQoJJGRlcHRoID0gaW50dmFsKGdwcygnc21kX3RhYmJlcl9wYXJzZV9kZXB0aCcpKTsN CgkkcHJlZml4ID0gZ3BzKCdzbWRfdGFiYmVyX3RhYl9wcmVmaXgnKTsNCgkkaXRlbXMgPSBn cHMoJ3NtZF90YWJiZXJfdGFiX3ByaXZzJyk7DQoJJHByaXZzID0gKCRpdGVtcykgPyBqb2lu KCcsJywgJGl0ZW1zKSA6ICcnOw0KCXNldF9wcmVmKCdzbWRfdGFiYmVyX3RhYl9wcml2cycs ICRwcml2cywgJ3NtZF90YWJiZXInLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCglz ZXRfcHJlZignc21kX3RhYmJlcl90YWJfcHJlZml4JywgJHByZWZpeCwgJ3NtZF90YWJiZXIn LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCglzZXRfcHJlZignc21kX3RhYmJlcl9w YXJzZV9kZXB0aCcsICRkZXB0aCwgJ3NtZF90YWJiZXInLCBQUkVGX0hJRERFTiwgJ3RleHRf aW5wdXQnKTsNCg0KCSRtc2cgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcpOw0KCXNtZF90 YWJiZXIoJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX3RhYmJlcl9tdWx0aV9zZWxlY3QoJG5hbWUsICRpdGVtcywgJHNlbD1hcnJheSgp LCAkc2l6ZT0nNycpIHsNCgkkb3V0ID0gJzxzZWxlY3QgbmFtZT0iJy4kbmFtZS4nW10iIG11 bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iJy4kc2l6ZS4nIj4nLm47DQoJZm9yZWFjaCAoJGl0 ZW1zIGFzICRpZHggPT4gJGl0ZW0pIHsNCgkJJG91dCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4k aWR4LiciJy4oKGluX2FycmF5KCRpZHgsICRzZWwpKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVk IicgOiAnJykuJz4nLiRpdGVtLic8L29wdGlvbj4nLm47DQoJfQ0KCSRvdXQgLj0gJzwvc2Vs ZWN0PicubjsNCg0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIEFkZCB0YWJiZXIgdGFibGUgaWYgbm90IGFscmVhZHkgaW5zdGFsbGVkDQpm dW5jdGlvbiBzbWRfdGFiYmVyX3RhYmxlX2luc3RhbGwoJHNob3dwYW5lPScxJykgew0KCSRH TE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOw0KCSRyZXQgPSAnJzsNCgkkc3FsID0gYXJy YXkoKTsNCgkkc3FsW10gPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCIuUEZYLlNN RF9UQUJCRVIuImAgKA0KCQlgbmFtZWAgdmFyY2hhcigzMikgTk9UIE5VTEwgZGVmYXVsdCAn JyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwNCgkJYHNvcnRfb3JkZXJgIHZhcmNoYXIoMzIp IE5VTEwgZGVmYXVsdCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwNCgkJYGFyZWFgIHZh cmNoYXIoMzIpIE5VTEwgZGVmYXVsdCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwNCgkJ YHZpZXdfcHJpdnNgIHZhcmNoYXIoMzIpIE5PVCBOVUxMIGRlZmF1bHQgJycsDQoJCWBwYWdl YCB2YXJjaGFyKDMyKSBOVUxMIGRlZmF1bHQgJycsDQoJCWBzdHlsZWAgdmFyY2hhcigzMikg TlVMTCBkZWZhdWx0ICcnLA0KCQlQUklNQVJZIEtFWSAoYG5hbWVgKQ0KCSkgRU5HSU5FPU15 SVNBTSI7DQoNCglpZihncHMoJ2RlYnVnJykpIHsNCgkJZG1wKCRzcWwpOw0KCX0NCglmb3Jl YWNoICgkc3FsIGFzICRxcnkpIHsNCgkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCWlm ICgkcmV0PT09ZmFsc2UpIHsNCgkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsNCgkJ CWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9l cnJvcigpLiI8YnIgLz5cbiI7DQoJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsNCgkJ fQ0KCX0NCg0KCS8vIFVwZ3JhZGU6IGJlIGtpbmQgdG8gYmV0YSB0ZXN0ZXJzDQoJJGZsZHMg PSBnZXRUaGluZ3MoJ2Rlc2NyaWJlIGAnLlBGWC5TTURfVEFCQkVSLidgJyk7DQoJaWYgKCFp bl9hcnJheSgnc29ydF9vcmRlcicsJGZsZHMpKSB7DQoJCXNhZmVfYWx0ZXIoU01EX1RBQkJF UiwgImFkZCBgc29ydF9vcmRlcmAgdmFyY2hhcigzMikgTlVMTCBkZWZhdWx0ICcnIENPTExB VEUgdXRmOF9nZW5lcmFsX2NpIGFmdGVyIGBuYW1lYCIpOw0KCX0NCg0KCS8vIFNwaXQgb3V0 IHJlc3VsdHMNCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7DQoJCWlm ICgkc2hvd3BhbmUpIHsNCgkJCSRtc2cgPSBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90YWJiZXJf dGJsX2luc3RhbGxlZCcpOw0KCQkJc21kX3RhYmJlcigkbXNnKTsNCgkJfQ0KCX0gZWxzZSB7 DQoJCWlmICgkc2hvd3BhbmUpIHsNCgkJCSRtc2cgPSBzbWRfdGFiYmVyX2dUeHQoJ3NtZF90 YWJiZXJfdGJsX25vdF9pbnN0YWxsZWQnKTsNCgkJCXNtZF90YWJiZXIoJG1zZyk7DQoJCX0N Cgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRHJvcCB0YWJsZSBp ZiBpbiBkYXRhYmFzZQ0KZnVuY3Rpb24gc21kX3RhYmJlcl90YWJsZV9yZW1vdmUoJHNob3dw YW5lPScxJykgew0KCSRyZXQgPSAnJzsNCgkkc3FsID0gYXJyYXkoKTsNCgkkR0xPQkFMU1sn dHhwX2Vycl9jb3VudCddID0gMDsNCgkkc3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMg IiAuUEZYLlNNRF9UQUJCRVIuICI7ICI7DQoJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCWRtcCgk c3FsKTsNCgl9DQoJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCSRyZXQgPSBzYWZlX3F1 ZXJ5KCRxcnkpOw0KCQlpZiAoJHJldD09PWZhbHNlKSB7DQoJCQkkR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddKys7DQoJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10u Ii48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJZWNobyAiPCEtLVxuICRx cnkgXG4tLT5cbiI7DQoJCX0NCgl9DQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10g PT0gMCkgew0KCQlpZiAoJHNob3dwYW5lKSB7DQoJCQkkbXNnID0gc21kX3RhYmJlcl9nVHh0 KCdzbWRfdGFiYmVyX3RibF9yZW1vdmVkJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQlpZiAoJHNo b3dwYW5lKSB7DQoJCQkkbXNnID0gc21kX3RhYmJlcl9nVHh0KCdzbWRfdGFiYmVyX3RibF9u b3RfcmVtb3ZlZCcpOw0KCQkJc21kX3RhYmJlcigkbXNnKTsNCgkJfQ0KCX0NCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFiYmVyX3RhYmxlX2V4 aXN0KCRhbGw9JycpIHsNCglpZiAoJGFsbCkgew0KCQkkdGJscyA9IGFycmF5KFNNRF9UQUJC RVIgPT4gNik7DQoJCSRvdXQgPSBjb3VudCgkdGJscyk7DQoJCWZvcmVhY2ggKCR0YmxzIGFz ICR0YmwgPT4gJGNvbHMpIHsNCgkJCWlmIChncHMoJ2RlYnVnJykpIHsNCgkJCQllY2hvICIr KyBUQUJMRSAiLiR0YmwuIiBIQVMgIi5jb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRi bCkpLiIgQ09MVU1OUzsgUkVRVUlSRVMgIi4kY29scy4iICsrIi5icjsNCgkJCX0NCgkJCWlm IChjb3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpID09ICRjb2xzKSB7DQoJCQkJ JG91dC0tOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAoJG91dD09PTApID8gMSA6IDA7DQoJfSBl bHNlIHsNCgkJaWYgKGdwcygnZGVidWcnKSkgew0KCQkJZWNobyAiKysgVEFCTEUgIi5TTURf VEFCQkVSLiIgSEFTICIuY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF90YWJiZXIp KS4iIENPTFVNTlM7IjsNCgkJfQ0KCQlyZXR1cm4oQHNhZmVfc2hvdygnY29sdW1ucycsIFNN RF9UQUJCRVIpKTsNCgl9DQp9DQoNCi8vICoqKioqKioqKioqDQovLyBQVUJMSUMgVEFHUw0K Ly8gKioqKioqKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX3RhYmJlcl9lZGl0X3BhZ2UoJGF0dHMsICR0aGluZz1OVUxMKSB7DQoJZ2xvYmFsICRz bWRfdGFiYmVyX2NhbGxzdGFjaywgJGV2ZW50Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgN CgkJJ25hbWUnICAgID0+ICRldmVudCwNCgkJJ3RpdGxlJyAgID0+ICdFZGl0IHBhZ2UnLA0K CQknY2xhc3MnICAgPT4gJycsDQoJCSdodG1sX2lkJyA9PiAnJywNCgkJJ3dyYXB0YWcnID0+ ICcnLA0KCSksJGF0dHMpKTsNCg0KCSR0YWJfcHJlZml4ID0gZ2V0X3ByZWYoJ3NtZF90YWJi ZXJfdGFiX3ByZWZpeCcsICd0YWJiZXJfJyk7DQoNCglpZiAoaXNzZXQoJGF0dHNbJ25hbWUn XSkpIHsNCgkJJHBhZ2UgPSAoc3RycG9zKCRuYW1lLCAkdGFiX3ByZWZpeCkgIT09IGZhbHNl KSA/ICRuYW1lIDogJHRhYl9wcmVmaXguJG5hbWU7DQoJfSBlbHNlIHsNCgkJLy8gTG9va3Vw IHRoZSBuYW1lIG9mIHRoZSBwYWdlDQoJCSRldiA9IChzdHJwb3MoJG5hbWUsICR0YWJfcHJl Zml4KSAhPT0gZmFsc2UpID8gc3RyX3JlcGxhY2UoJHRhYl9wcmVmaXgsICcnLCAkbmFtZSkg OiAkbmFtZTsNCgkJJHBhZ2UgPSAoaXNzZXQoJHNtZF90YWJiZXJfY2FsbHN0YWNrWyRldl0p KSA/ICRzbWRfdGFiYmVyX2NhbGxzdGFja1skZXZdWydwYWdlJ10gOiAnJzsNCgl9DQoJJGlk eCA9ICduYW1lJzsNCgkkc3RlcCA9ICcnOw0KCWlmICghJHBhZ2UpIHsNCgkJJHBhZ2UgPSAk aWR4ID0gJyc7DQoJCSRzdGVwID0gJ3BhZ2VfbmV3JzsNCgl9DQoNCgkkbG5rID0gZUxpbmso J3BhZ2UnLCAkc3RlcCwgJGlkeCwgJHBhZ2UsICR0aXRsZSk7DQoJcmV0dXJuICgkd3JhcHRh ZykgPyBkb1RhZygkbG5rLCAkd3JhcHRhZywgJGNsYXNzLCAnJywgJGh0bWxfaWQpIDogJGxu azsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfdGFi YmVyX2VkaXRfc3R5bGUoJGF0dHMsICR0aGluZz1OVUxMKSB7DQoJZ2xvYmFsICRzbWRfdGFi YmVyX2NhbGxzdGFjaywgJGV2ZW50Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ25h bWUnICAgID0+ICRldmVudCwNCgkJJ3RpdGxlJyAgID0+ICdFZGl0IENTUycsDQoJCSdjbGFz cycgICA9PiAnJywNCgkJJ2h0bWxfaWQnID0+ICcnLA0KCQknd3JhcHRhZycgPT4gJycsDQoJ KSwkYXR0cykpOw0KDQoJJHRhYl9wcmVmaXggPSBnZXRfcHJlZignc21kX3RhYmJlcl90YWJf cHJlZml4JywgJ3RhYmJlcl8nKTsNCg0KCWlmIChpc3NldCgkYXR0c1snbmFtZSddKSkgew0K CQkkY3NzID0gKHN0cnBvcygkbmFtZSwgJHRhYl9wcmVmaXgpICE9PSBmYWxzZSkgPyAkbmFt ZSA6ICR0YWJfcHJlZml4LiRuYW1lOw0KCX0gZWxzZSB7DQoJCS8vIExvb2t1cCB0aGUgbmFt ZSBvZiB0aGUgc3R5bGVzaGVldA0KCQkkZXYgPSAoc3RycG9zKCRuYW1lLCAkdGFiX3ByZWZp eCkgIT09IGZhbHNlKSA/IHN0cl9yZXBsYWNlKCR0YWJfcHJlZml4LCAnJywgJG5hbWUpIDog JG5hbWU7DQoJCSRjc3MgPSAoaXNzZXQoJHNtZF90YWJiZXJfY2FsbHN0YWNrWyRldl0pKSA/ ICRzbWRfdGFiYmVyX2NhbGxzdGFja1skZXZdWydzdHlsZSddIDogJyc7DQoJfQ0KDQoJJGlk eCA9ICduYW1lJzsNCgkkc3RlcCA9ICcnOw0KCWlmICghJGNzcykgew0KCQkkY3NzID0gJGlk eCA9ICcnOw0KCQkkc3RlcCA9ICdwb3VyJzsNCgl9DQoNCgkkbG5rID0gZUxpbmsoJ2Nzcycs ICRzdGVwLCAkaWR4LCAkY3NzLCAkdGl0bGUpOw0KCXJldHVybiAoJHdyYXB0YWcpID8gZG9U YWcoJGxuaywgJHdyYXB0YWcsICRjbGFzcywgJycsICRodG1sX2lkKSA6ICRsbms7DQp9DQoN CmZ1bmN0aW9uIHNtZF90YWJiZXJfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJ JGxhbmcgPSBhcnJheSgNCgkJJ3NtZF90YWJiZXJfYWxsX3B1YnMnID0+ICdBbGwgcHVibGlz aGVycycsDQoJCSdzbWRfdGFiYmVyX2FyZWEnID0+ICdBc3NpZ24gdG8gYXJlYTonLA0KCQkn c21kX3RhYmJlcl9jYW5jZWwnID0+ICdbQ2FuY2VsXScsDQoJCSdzbWRfdGFiYmVyX2Nob29z ZScgPT4gJ1NlbGVjdCB0YWIgdG8gZWRpdDonLA0KCQknc21kX3RhYmJlcl9jcmVhdGVkJyA9 PiAnVGFiIGNyZWF0ZWQuIFJlZnJlc2ggdG8gc2VlIGl0JywNCgkJJ3NtZF90YWJiZXJfZGVs ZXRlZCcgPT4gJ1RhYiBkZWxldGVkLiBSZWZyZXNoIHRvIHNlZSBjaGFuZ2VzJywNCgkJJ3Nt ZF90YWJiZXJfZXhpc3RzJyA9PiAnVGFiIGFscmVhZHkgZXhpc3RzJywNCgkJJ3NtZF90YWJi ZXJfaGVhZGluZycgPT4gJ01hbmFnZSBhZGRpdGlvbmFsIFRYUCB0YWJzJywNCgkJJ3NtZF90 YWJiZXJfbmFtZScgPT4gJ1RhYiBuYW1lOicsDQoJCSdzbWRfdGFiYmVyX25lZWRfYXJlYScg PT4gJ1BsZWFzZSBzdXBwbHkgYSBsb2NhdGlvbiBmb3IgdGhlIHRhYicsDQoJCSdzbWRfdGFi YmVyX25lZWRfbmFtZScgPT4gJ1BsZWFzZSBzdXBwbHkgYSB0YWIgbmFtZScsDQoJCSdzbWRf dGFiYmVyX25ld19hcmVhJyA9PiAnTmV3IGFyZWEgPj4nLA0KCQknc21kX3RhYmJlcl9uZXdf dGFiJyA9PiAnTmV3IHRhYicsDQoJCSdzbWRfdGFiYmVyX3BhZ2UnID0+ICdQYWdlIHRlbXBs YXRlOicsDQoJCSdzbWRfdGFiYmVyX3BhcnNlX2RlcHRoJyA9PiAnUGFyc2UgZGVwdGgnLA0K CQknc21kX3RhYmJlcl9wcmVmcycgPT4gJ1ByZWZlcmVuY2VzJywNCgkJJ3NtZF90YWJiZXJf cHJlZnNfbGJsJyA9PiAnVGFiYmVyIHBlZmVyZW5jZXMnLA0KCQknc21kX3RhYmJlcl9wcmVm c19zb21lX2V4cGxhaW4nID0+ICdUaGlzIGlzIGVpdGhlciBhIG5ldyBpbnN0YWxsYXRpb24g b3IgYSBkaWZmZXJlbnQgdmVyc2lvbicuYnIuJ29mIHRoZSBwbHVnaW4gdG8gb25lIHlvdSBo YWQgYmVmb3JlLicsDQoJCSdzbWRfdGFiYmVyX3ByZWZzX3NvbWVfb3B0cycgPT4gJ0NsaWNr ICJJbnN0YWxsIHRhYmxlIiB0byBhZGQgb3IgdXBkYXRlIHRoZSB0YWJsZScuYnIuJ2xlYXZp bmcgYWxsIGV4aXN0aW5nIGRhdGEgdW50b3VjaGVkLicsDQoJCSdzbWRfdGFiYmVyX3ByZWZz X3NvbWVfdGJsJyA9PiAnTm90IGFsbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS4nLA0KCQknc21k X3RhYmJlcl92aWV3X3ByaXZzJyA9PiAnVmlldyBwcml2aWxlZ2VzOicsDQoJCSdzbWRfdGFi YmVyX3NhdmVkJyA9PiAnVGFiIHNhdmVkLiBSZWZyZXNoIHRvIHNlZSBjaGFuZ2VzJywNCgkJ J3NtZF90YWJiZXJfc29ydF9vcmRlcicgPT4gJ1NvcnQgb3JkZXI6JywNCgkJJ3NtZF90YWJi ZXJfc3R5bGUnID0+ICdTdHlsZXNoZWV0OicsDQoJCSdzbWRfdGFiYmVyX3RhYl9uYW1lJyA9 PiAnTWFuYWdlIHRhYnMnLA0KCQknc21kX3RhYmJlcl90YWJfcHJlZml4JyA9PiAnUGFnZS9T dHlsZSBwcmVmaXgnLA0KCQknc21kX3RhYmJlcl90YWJfcHJpdnMnID0+ICdQZXJtaXQgdGFi cyB0byBiZSBtYW5hZ2VkIGJ5JywNCgkJJ3NtZF90YWJiZXJfdGJsX2luc3RhbGxlZCcgPT4g J1RhYmxlIGluc3RhbGxlZCcsDQoJCSdzbWRfdGFiYmVyX3RibF9pbnN0YWxsX2xibCcgPT4g J0luc3RhbGwgdGFibGUnLA0KCQknc21kX3RhYmJlcl90Ymxfbm90X2luc3RhbGxlZCcgPT4g J1RhYmxlIE5PVCBpbnN0YWxsZWQnLA0KCQknc21kX3RhYmJlcl90Ymxfbm90X3JlbW92ZWQn ID0+ICdUYWJsZSBOT1QgcmVtb3ZlZCcsDQoJCSdzbWRfdGFiYmVyX3RibF9yZW1vdmVkJyA9 PiAnVGFibGUgcmVtb3ZlZCcsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAk YXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6 ImZsYWdzIjtzOjE6IjIiO3M6NDoiaGVscCI7czoxMjU2NzoiPGRpdiBpZD0ic21kX2hlbHAi PgoKCTxoMSBpZD0ic21kX3RhYmJlcl90b3AiPnNtZF90YWJiZXI8L2gxPgoKCTxwPkNyZWF0 ZSBhbmQgbWFuYWdlIHlvdXIgb3duIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRh YnMvc3ViLXRhYnMsIHBvcHVsYXRpbmcgdGhlbSB3aXRoIGFueSBjb250ZW50IHlvdSB3aXNo IGZvciB5b3VyIHVzZXJzLiBDb250ZW50IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9z cGFuPiBhcmUgY29udHJvbGxlZCBieSByZWd1bGFyIFRleHRwYXR0ZXJuIFBhZ2VzL1N0eWxl c2hlZXRzLiBBY3RzIGxpa2UgYSBtdWx0aS11c2VyLCBtdWx0aS10YWIgZGFzaGJvYXJkIGZv ciB5b3VyIGFkbWluLXNpZGUgdXNlcnMuPC9wPgoKCTxoMiBpZD0ic21kX3RhYmJlcl9mZWF0 Ij5GZWF0dXJlczo8L2gyPgoKCTx1bD4KCQk8bGk+RGVmaW5lIGVpdGhlciB0b3AtbGV2ZWwg dGFicyBvciBzdWItdGFicyBpbiB5b3VyIG1lbnUgaGllcmFyY2h5PC9saT4KCQk8bGk+QXNz aWduIGEgUGFnZSBhbmQgYSBTdHlsZSB0byBtZW51IGl0ZW1zPC9saT4KCQk8bGk+VHdvIGNv bnZlbmllbmNlIHRhZ3MgYWxsb3cgeW91IHRvIGFkZCBFZGl0IGxpbmtzIGluIHlvdXIgbWFy a3VwIGZvciBxdWljayBhY2Nlc3MgdG8gZWRpdCB0aGUgdGFiJiM4MjE3O3MgY29udGVudDwv bGk+Cgk8L3VsPgoKCTxoMj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD5Xcml0dGVuIGJ5 IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3Nvbjwv YT4uIFNwYXduZWQgZnJvbSBhbiBpZGVhIGJ5IG1hdmVyaWNrLCB3aXRoIHRoYW5rcy4gS3Vk b3MgdG8gdGhlIGZlZWRiYWNrIGZyb20gdGhlIGJldGEgdGVzdCB0ZWFtICYjODIxMjsgbWFy dWNoYW4gYW5kIG1hdmVyaWNrICYjODIxMjsgd2hvIHB1dCB1cCB3aXRoIGVuZGxlc3MgbmV3 IHZlcnNpb25zIGEgZGF5IHVudGlsIEkgZ290IGl0IHJpZ2h0LjwvcD4KCgk8aDI+SW5zdGFs bGF0aW9uIC8gdW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPlJl cXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuNC4wKzwvcD4KCgk8cD5E b3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0 dGVybi5vcmcvcGx1Z2lucy8xMjE2L3NtZF90YWJiZXIiPnRleHRwYXR0ZXJuLm9yZzwvYT4s IG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBh Z2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhbmUsIGluc3RhbGwgYW5k IGVuYWJsZSB0aGUgcGx1Z2luLiBUbyB1bmluc3RhbGwsIGRlbGV0ZSBmcm9tIHRoZSA8ZW0+ QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhZ2UuIFRoZSB0YWJsZSBjb250YWluaW5nIHRo ZSBleHRyYSB0YWIgZGVmaW5pdGlvbnMgd2lsbCBiZSByZW1vdmVkIGJ1dCB5b3VyIHRhYiBQ YWdlcyBhbmQgU3R5bGVzaGVldHMgd2lsbCByZW1haW4uPC9wPgoKCTxwPlZpc2l0IHRoZSA8 YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9 MzU4ODIiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24g dGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxoMiBpZD0i c21kX3RhYmJlcl91c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPlZpc2l0IDxlbT5BZG1pbi0mZ3Q7 TWFuYWdlIHRhYnM8L2VtPi4gV2hlbiB0aGVyZSBhcmUgc29tZSBjdXN0b20gdGFicyBkZWZp bmVkLCB0aGUgZHJvcGRvd24gYmVuZWF0aCB0aGUgaGVhZGluZyBjb250YWlucyBhIGxpc3Qg b2YgYWxsIHlvdXIgdGFicywgZ3JvdXBlZCBieSB0aGVpciBhcmVhLiBDaG9vc2Ugb25lIG9m IHRoZSB0YWJzIHRvIGxvYWQgaXQgaW50byB0aGUgYm94ZXMgYmVsb3cgZm9yIGVkaXRpbmcu IFRoZSBib3hlcyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRh YiBuYW1lPC9zcGFuPiA6IG5hbWUgb2YgeW91ciB0YWIgYXMgaXQgYXBwZWFycyB0byB5b3Vy IHVzZXJzIChjYXNlIHNlbnNpdGl2ZSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ U29ydCBvcmRlcjwvc3Bhbj4gOiBhbiBvcHRpb25hbCB2YWx1ZSB5b3UgY2FuIGFzc2lnbiB0 byB0aGlzIHRhYiB0aGF0IGRpY3RhdGVzIHRoZSBwb3NpdGlvbiBpdCB3aWxsIG9jY3VweSBp biB5b3VyIHRhYiBzZXF1ZW5jZS4gVGFicyBhcmUgc29ydGVkIGJ5IHRoaXMgdmFsdWUgYmVm b3JlIGJlaW5nIHNsb3R0ZWQgaW50byB0aGUgbWVudTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5Bc3NpZ24gdG8gYXJlYTwvc3Bhbj4gOiBzZWxlY3Qgd2hpY2ggdG9wLWxldmVs IHRhYiB5b3VyIG5ldyB0YWIgd2lsbCBhcHBlYXIgdW5kZXIuIElmIHlvdSB3YW50IHRvIGNy ZWF0ZSBhIG5ldyBvbmUsIHR5cGUgaXQgaW4gdGhlIGFkamFjZW50IGJveCAoY2FzZSBzZW5z aXRpdmUpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZpZXcgcHJpdmlsZWdlczwv c3Bhbj4gOiBzZWxlY3QgdGhlIHVzZXIgcHJpdmlsZWdlIGxldmVscyB0aGF0IGFyZSBhbGxv d2VkIHRvIHNlZSB0aGlzIHRhYi4gRGVmYXVsdDogY3VycmVudCBsZXZlbCBvZiBsb2dnZWQt aW4gdXNlci4gTm90ZSB0aGF0ICYjODIxNjtub25lJiM4MjE3OyBpcyBhbiBvcHRpb24uIFRo aXMgYWxsb3dzIHlvdSB0byByZW1vdmUgYSBtZW51IGZyb20gb3BlcmF0aW9uIGFuZCAmIzgy MTY7cGFyayYjODIxNzsgaXQgd2hpbGUgaXQgaXMgYmVpbmcgY3JlYXRlZC9lZGl0ZWQsIHdp dGhvdXQgZmVhciBvZiBhbnlvbmUgYmVpbmcgYWJsZSB0byBzZWUgd2hhdCB5b3UgYXJlIGRv aW5nLiBXaGVuIHlvdSBhcmUgcmVhZHkgdG8gcHV0IGl0IGludG8gcHJvZHVjdGlvbiwgc2lt cGx5IHJlYXNzaWduIGl0IHRvIGEgcmVndWxhciB1c2VyIGxldmVsPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPlBhZ2UgdGVtcGxhdGU8L3NwYW4+IDogaWYgeW91IGhhdmUgZGVm aW5lZCBhdCBsZWFzdCBvbmUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gUGFnZSAo aW4gPGVtPlByZXNlbnRhdGlvbi0mZ3Q7UGFnZXM8L2VtPikgd2l0aCB0aGUgZGVzaWduYXRl ZCBwcmVmaXggKDxjb2RlPnRhYmJlcl88L2NvZGU+IGJ5IGRlZmF1bHQpIHRoZW4geW91IHdp bGwgc2VlIHRob3NlIHBhZ2VzIGxpc3RlZCBoZXJlLiBDaG9vc2Ugb25lIHRvIGFzc2lnbiBp dCB0byB0aGlzIHRhYi4gQ2xpY2sgdGhlIGFkamFjZW50IDxlbT5DcmVhdGU8L2VtPiBvciA8 ZW0+RWRpdDwvZW0+IGxpbmsgYXMgYSBzaG9ydGN1dCB0byA8ZW0+UHJlc2VudGF0aW9uLSZn dDtQYWdlczwvZW0+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlN0eWxlc2hlZXQ8 L3NwYW4+IDogaWYgeW91IGhhdmUgZGVmaW5lZCBhdCBsZWFzdCBvbmUgPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gU3R5bGVzaGVldCAoaW4gPGVtPlByZXNlbnRhdGlvbi0mZ3Q7 U3R5bGU8L2VtPikgd2l0aCB0aGUgZGVzaWduYXRlZCBwcmVmaXggKDxjb2RlPnRhYmJlcl88 L2NvZGU+IGJ5IGRlZmF1bHQpIHRoZW4geW91IHdpbGwgc2VlIHRob3NlIHNoZWV0cyBsaXN0 ZWQgaGVyZS4gQ2hvb3NlIG9uZSB0byBhc3NpZ24gaXQgdG8gdGhpcyB0YWIuIENsaWNrIHRo ZSBhZGphY2VudCA8ZW0+Q3JlYXRlPC9lbT4gb3IgPGVtPkVkaXQ8L2VtPiBsaW5rIGFzIGEg c2hvcnRjdXQgdG8gPGVtPlByZXNlbnRhdGlvbi0mZ3Q7U3R5bGU8L2VtPjwvbGk+Cgk8L3Vs PgoKCTxwPkEgZmV3IG5vdGVzOjwvcD4KCgk8dWw+CgkJPGxpPkFsb25nc2lkZSB0aGUgdGFi IHNlbGVjdG9yIG9mIGFueSB0YWIgeW91IGFyZSBlZGl0aW5nIGlzIGEgPGVtPlZpZXc8L2Vt PiBsaW5rLiBDbGljayB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzZWxlY3RlZCB0YWI8L2xp PgoJCTxsaT5BbG9uZ3NpZGUgdGhlIDxlbT5UYWIgbmFtZTwvZW0+IGJveCBvZiBhbnkgdGFi IHlvdSBhcmUgZWRpdGluZyBpcyBhbiBbeF0gbGluay4gQ2xpY2sgdG8gZGVsZXRlIHRoZSB0 YWI8L2xpPgoJCTxsaT5QdWJsaXNoZXIgbGV2ZWwgYWNjb3VudHMgYWxzbyBoYXZlIGEgPGEg aHJlZj0iI3NtZF90YWJiZXJfcHJlZnMiPltQcmVmZXJlbmNlc108L2E+IGxpbmsgYmVsb3cg dGhlIGhlYWRlcjwvbGk+CgkJPGxpPlRhYiBhbmQgQXJlYSBuYW1lcyBhcmUgYm90aCBjYXNl IHNlbnNpdGl2ZTogbmFtZSB0aGVtIGFzIHlvdSB3YW50IHlvdXIgdXNlcnMgdG8gc2VlIHRo ZSB0YWJzPC9saT4KCQk8bGk+VGhlIHNvcnQgb3JkZXIgYWxsb3dzIHlvdSB0byBhcmJpdHJh cmlseSBvcmRlciB0aGUgdGFicyB3aXRob3V0IGhhdmluZyB0byByZWx5IG9uIGludmVudGl2 ZSBuYW1pbmcgc3RyYXRlZ2llcy4gSWYgYWxsIHRoZSBzb3J0IGJveGVzIGFyZSBsZWZ0IGVt cHR5LCB0aGUgb3JkZXIgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWxwaGFiZXRpYyBvcmRlciBv ZiB0aGUgdGFiIG5hbWVzPC9saT4KCQk8bGk+WW91IG5lZWQgdG8gcmVsb2FkIHRoZSBhZG1p biBzaWRlIGFmdGVyIHNhdmluZyB0byBzZWUgYW55IGNoYW5nZXM8L2xpPgoJCTxsaT5Ub3Ag bGV2ZWwgdGFicyA8c3BhbiBjbGFzcz0iY2FwcyI+TVVTVDwvc3Bhbj4gaGF2ZSBhdCBsZWFz dCBvbmUgc3ViLXRhYiBpbiBvcmRlciBmb3IgdGhlbSB0byBiZSB2aXNpYmxlPC9saT4KCQk8 bGk+VGFiIG5hbWVzIG11c3QgYmUgdW5pcXVlICYjODIxMjsgZXZlbiBpZiB0aGV5IG9jY3Vw eSBkaWZmZXJlbnQgdG9wLWxldmVsIHRhYnM8L2xpPgoJCTxsaT5OZXcgdG9wLWxldmVsIHRh YnMgY2Fubm90IGJlIHBvc2l0aW9uZWQgKGl0JiM4MjE3O3MgYSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBsaW1pdGF0aW9uKS4gVGhleSB3aWxsIGFsd2F5cyBhcHBlYXIgYWZ0 ZXIgRXh0ZW5zaW9ucyBhbmQgd2lsbCBiZSBsaXN0ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVy LiBJZiB5b3Ugd2FudCBzb21ldGhpbmcgdG8gc3RhbmQgb3V0LCBhdHRhY2ggaXQgdG8gdGhl ICYjODIxNjtzdGFydCYjODIxNzsgdGFiPC9saT4KCQk8bGk+UGFnZXMgYW5kIFN0eWxlcyBt dXN0IGJlZ2luIHdpdGggeW91ciBjaG9zZW4gcHJlZml4IChEZWZhdWx0OiA8Y29kZT50YWJi ZXJfPC9jb2RlPikgdG8gYmUgc2VsZWN0YWJsZSBieSB0aGUgcGx1Z2luLiBDaGFuZ2UgdGhl IHByZWZpeCB2aWEgdGhlIHBsdWdpbiYjODIxNztzIDxhIGhyZWY9IiNzbWRfdGFiYmVyX3By ZWZzIj5QcmVmZXJlbmNlczwvYT48L2xpPgoJCTxsaT5JZiB5b3UgdmlldyB0aGUgY29udGVu dCBvZiBhIHRhYiB0aGF0IGhhcyBubyBQYWdlIGFzc2lnbmVkLCBhIGRlZmF1bHQgcGFnZSB3 aWxsIGJlIHVzZWQgd2hpY2ggY29udGFpbnMgJiM4MjE2O0VkaXQgUGFnZSYjODIxNzsgYW5k ICYjODIxNjtFZGl0IFN0eWxlJiM4MjE3OyBsaW5rczwvbGk+CgkJPGxpPlBhZ2VzIGFuZCBT dHlsZXMgY2FuIGNvbnRhaW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdGFncyBh bmQgYXJlIHBhcnNlZCBhcyBpZiBvbiB0aGUgcHVibGljIHNpZGUuIEJ1dCB5b3UgZG9uJiM4 MjE3O3QgbmVlZCBhIDxzcGFuIGNsYXNzPSJjYXBzIj5EVEQ8L3NwYW4+L2hlYWQvYm9keS9m b290ZXIgZWxlbWVudCBoZXJlIGJlY2F1c2UgdGhleSBhcmUgc3VwcGxpZWQgYnkgdGhlIGFk bWluIGludGVyZmFjZTogeW91IGFyZSBqdXN0IGZpbGxpbmcgaW4gdGhlIGNvbnRlbnQgYmV0 d2VlbiB0aGUgbWVudSBhbmQgdGhlIGZvb3RlcjwvbGk+CgkJPGxpPklmIHlvdSBhcmUgdXNp bmcgdGFncyB0aGF0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZWlyIGNvbnRleHQsIHlvdSB3 aWxsIHByb2JhYmx5IGhhdmUgdG8gbWFudWFsbHkgc3BlY2lmeSB0aGUgY29udGV4dCB3aGVu IHVzaW5nIHRob3NlIHRhZ3MgaW4gYWRtaW4tc2lkZSBwYWdlczwvbGk+CgkJPGxpPlVzaW5n IHNtZF9mYXV4X3JvbGUgaXMgYSBnb29kIHdheSB0byBxdWlja2x5IHN3aXRjaCB1c2VyIGxl dmVsIHNvIHlvdSBjYW4gc2VlIHRoZSB0YWIgc3RydWN0dXJlcyB5b3UgaGF2ZSBjcmVhdGVk PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRfdGFiYmVyX3ByZWZzIj5QcmVmZXJlbmNlczwv aDI+CgoJPHA+PHN0cm9uZz5QZXJtaXQgdGFicyB0byBiZSBtYW5hZ2VkIGJ5PC9zdHJvbmc+ PC9wPgoKCTxwPkJ5IGRlZmF1bHQgdGhlIHRhYiBtYW5hZ2VyIGlzIG9ubHkgYXZhaWxhYmxl IHRvIGFueSB1c2VyIHdpdGggYSBQdWJsaXNoZXIgYWNjb3VudC4gU29tZXRpbWVzIHlvdSBt YXkgd2FudCB0byBzdHJpY3RseSBjb250cm9sIHdobyBjYW4gb3IgY2Fubm90IGFkZC9lZGl0 IHRhYnMuIElmIHlvdSB3aXNoIHRvIGRvIHRoaXMsIHNlbGVjdCB1c2VyIGFjY291bnRzIGZy b20gdGhlIDxlbT5QZXJtaXQgdGFicyB0byBiZSBtYW5hZ2VkIGJ5PC9lbT4gbGlzdCBhbmQg aGl0IFNhdmUuIEZyb20gdGhhdCBwb2ludCBvbiwgb25seSB0aG9zZSBleHBsaWNpdCB1c2Vy IGFjY291bnRzIHdpbGwgYmUgYWxsb3dlZCBhY2Nlc3MgdG8gdGhlIHRhYiBtYW5hZ2VyLiA8 c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5CZSBjYXJlZnVsIG5vdCB0byBsb2NrIHlvdXJzZWxm IG91dDwvc3Bhbj4gOi0pPC9wPgoKCTxwPk5vdGUgdGhhdCBubyByZXN0cmljdGlvbnMgYXJl IHBsYWNlZCBvbiB3aG8gY2FuIGVkaXQgdGhlIHRhYiBQYWdlcyBhbmQgU3R5bGVzOiB0aGV5 IGFyZSBzdWJqZWN0IHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3Mg dXN1YWwgcGVybWlzc2lvbnMgc3RydWN0dXJlIHNvIGlmIHlvdSB3YW50IHRvIHJlc3RyaWN0 IGFjY2VzcyB0byB0aGVzZSBlbGVtZW50cywgY2hvb3NlIHN1aXRhYmxlIGFjY291bnRzIGZv ciB5b3VyIHVzZXJzIGFuZCB0aWUgdGhlbSB0byB0aGUgcGx1Z2luJiM4MjE3O3MgcHJlZnMu PC9wPgoKCTxwPjxzdHJvbmc+UGFnZS9TdHlsZSBwcmVmaXg8L3N0cm9uZz48L3A+CgoJPHA+ SW4gb3JkZXIgdG8gYmUgYXNzaWduYWJsZSB0byBhIHRhYiwgeW91ciBjdXN0b20gcGFnZXMg LyBzdHlsZXNoZWV0cyBtdXN0IGJlZ2luIHdpdGggYSBkZWZpbmVkIHByZWZpeC4gU2V0IHRo ZSBwcmVmaXggaGVyZS4gRGVmYXVsdDogPGNvZGU+dGFiYmVyXzwvY29kZT4uPC9wPgoKCTxw PjxzdHJvbmc+UGFyc2UgZGVwdGg8L3N0cm9uZz48L3A+CgoJPHA+TW9zdCBvZiB0aGUgdGlt ZSwgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyBwYXJzZXIgdGFrZXMg Y2FyZSBvZiBuZXN0ZWQgdGFncyBuaWNlbHkgYnV0IGluIHNvbWUgcmFyZSBpbnN0YW5jZXMg eW91IG1heSBoYXZlLCBzYXksIDxjb2RlPntyZXBsYWNlbWVudH08L2NvZGU+IHN0cmluZ3Mg aW5zaWRlIHRhZ3MgaW5zaWRlIHRhZ3MgYW5kIHRoZSBwYXJzZXIgbWlnaHQgbm90IGJlIHJl cGxhY2luZyBldmVyeXRoaW5nLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIGluY3JlYXNlIHRo ZSBwYXJzZSBkZXB0aCBvZiBzbWRfdGFiYmVyIHNvIGl0IGNhbiBkaXZlIGRlZXBlciBpbnRv IHRoZSBuZXN0ZWQgdGFnIHRyZWUuIFRoZSBkZWZhdWx0IGlzIG9uZSBwYXNzLCBidXQgaWYg eW91IHdpc2ggdG8gaW5jcmVhc2UgaXQsIGRvIHNvIHVzaW5nIHRoaXMgdmFsdWUuPC9wPgoK CTxoMiBpZD0ic21kX3RhYmJlcl90YWdzIj5QdWJsaWMgdGFnczwvaDI+CgoJPGgzPjxjb2Rl PiZsdDt0eHA6c21kX3RhYmJlcl9lZGl0X3BhZ2UgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4m bHQ7dHhwOnNtZF90YWJiZXJfZWRpdF9zdHlsZSAvJmd0OzwvY29kZT48L2gzPgoKCTxwPlJl bmRlcnMgYSBsaW5rIHRvIHRoZSA8ZW0+UHJlc2VudGF0aW9uLSZndDtQYWdlczwvZW0+IG9y IDxlbT5QcmVzZW50YXRpb24tJmd0O1N0eWxlPC9lbT4gdGFicywgcmVzcGVjdGl2ZWx5LCB3 aXRoIHRoZSBjdXJyZW50IHBhZ2Uvc3R5bGVzaGVldCBsb2FkZWQgcmVhZHkgZm9yIGVkaXRp bmcuIElmIHRoZSByZXNvdXJjZSBkb2VzbiYjODIxNzt0IHlldCBleGlzdCB0aGUgbGluayB3 aWxsIHRha2UgeW91IHRvIGFuIGVtcHR5IGRvY3VtZW50LiBZb3UgbXVzdCBiZWdpbiB0aGUg bmFtZSBvZiB5b3VyIHBhZ2Uvc3R5bGVzaGVldCB3aXRoIHlvdXIgY2hvc2VuIHByZWZpeCAo c2VlIDxhIGhyZWY9IiNzbWRfdGFiYmVyX3ByZWZzIj5wcmVmczwvYT4pIGZvciBpdCB0byBi ZSBwaWNrZWQgdXAgYnkgdGhlIHBsdWdpbi48L3A+CgoJPHA+T3B0aW9uYWwgYXJndW1lbnRz OjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1lPC9zcGFuPjogb3Zl cnJpZGUgdGhlIGRlZmF1bHQgbmFtZS4gSWYgeW91IHdhbnQgdG8gZm9yY2UgdGhlIGxpbmsg dG8gZWRpdCBhIHBhcnRpY3VsYXIgUGFnZS9TdHlsZXNoZWV0LCBzcGVjaWZ5IGl0IGhlcmUs IGVpdGhlciB3aXRoIG9yIHdpdGhvdXQgdGhlIHByZWZpeDwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj50aXRsZTwvc3Bhbj4gOiB0aGUgdGl0bGUgb2YgdGhlIGxpbmsuIERlZmF1 bHQ6IDxjb2RlPkVkaXQgcGFnZTwvY29kZT4gLyA8Y29kZT5FZGl0IENTUzwvY29kZT4sIHJl c3BlY3RpdmVseTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFu PiA6IHRoZSAoWClIVE1MIGVsZW1lbnQgKHdpdGhvdXQgYW5nbGUgYnJhY2tldHMpIHRvIHN1 cnJvdW5kIHRoZSBsaW5rLCBlLmcuIDxjb2RlPndyYXB0YWc9JnF1b3Q7c3BhbiZxdW90Ozwv Y29kZT4uIFdpdGhvdXQgdGhpcyBhdHRyaWJ1dGUgc2V0LCA8Y29kZT5jbGFzczwvY29kZT4g YW5kIDxjb2RlPmh0bWxfaWQ8L2NvZGU+IHdpbGwgZG8gbm90aGluZy4gRGVmYXVsdDogdW5z ZXQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPiA6IHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzc25hbWUgdG8gYXBwbHkgdG8gdGhl IHdyYXB0YWcuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pmh0bWxfaWQ8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBp ZCBhdHRyaWJ1dGUgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcuIERlZmF1bHQ6IHVuc2V0PC9s aT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRfdGFiYmVyX25vdGVzIj5HZW5lcmFsIG5vdGVzPC9o Mj4KCgk8cD5UaGVyZSBpcyBub3RoaW5nIHRvIHN0b3AgeW91IHVzaW5nIG90aGVyIGRhc2hi b2FyZCBvciBtZW51IG1hbmFnZW1lbnQgcGx1Z2lucyB3aXRoIHNtZF90YWJiZXIuIEJ1dCB0 aGUgb3BlbiBhcmNoaXRlY3R1cmUgb2Ygc21kX3RhYmJlciBtZWFucyB0aGF0LCB3aXRoIGEg Yml0IG9mIHBsYW5uaW5nLCB5b3UgY2FuIHByb2JhYmx5IHJlcGxpY2F0ZSBtb3N0IGRhc2hi b2FyZC9tZW51IGZ1bmN0aW9uYWxpdHkgYW5kIHBlcmhhcHMgZG8gZXZlbiBtb3JlIHdpdGgg aXQuIEhlcmUgYXJlIHNvbWUgY29tbW9uIHRoaW5ncyB0aGF0IG90aGVyIHBsdWdpbnMgcHJv dmlkZSBhbmQgaG93IHNtZF90YWJiZXIgY2FuIGJlIHVzZWQgdG8gZGVsaXZlciBzaW1pbGFy IGZ1bmN0aW9uYWxpdHk6PC9wPgoKCTx1bD4KCQk8bGk+bHVtX3VzZXJfbWVudQoJPHVsPgoJ CTxsaT5hbHRob3VnaCBub3QgYXMgcG9pbnQgbiYjODIxNzsgY2xpY2ssIHlvdSBjb3VsZCBj cmVhdGUgYSBQYWdlIHdpdGggYSBncmlkIG9mIHNob3J0Y3V0cyBvbiBpdC4gWW91IGNvdWxk IGRlZmluZSBhbiBzbWRfbWFjcm8gY2FsbGVkICYjODIxNjtsdW1fY2VsbCYjODIxNzsgdGhh dCBjb3VsZCB0YWtlIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGUgaWNvbiwgZGVzdGluYXRp b24gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4sIGV0Yy4gQ2FsbGluZyB0aGF0IG11 bHRpcGxlIHRpbWVzIGluIHlvdXIgdGFiJiM4MjE3O3MgUGFnZSB3b3VsZCByZW5kZXIgdGhl IG1lbnUgZ3JpZC4gWW91IGNvdWxkIGV2ZW4gd3JhcCBzb21lIGNlbGxzIGluIHJ2bV9wcml2 aWxlZ2VkIHRhZ3MgdG8gY29udHJvbCB3aG8gY291bGQgc2VlIHdoaWNoIGljb25zPC9saT4K CTwvdWw+PC9saT4KCQk8bGk+am1kX2Rhc2hib2FyZCAvIHNlZF9kYXNoYm9hcmQgLyBhcm9f bXlBZG1pbgoJPHVsPgoJCTxsaT55b3UgY2FuIGFkZCB5b3VyIG93biB0YWJzIHVuZGVyIHRo ZSBzdGFydCB0YWI8L2xpPgoJCTxsaT55b3UgY2FuIHJlY3JlYXRlIHRoZSBlZGl0IGxpbmsg ZnVuY3Rpb25hbGl0eSB2aWEgYW4gc21kX21hY3JvLCByc3hfZnJvbnRlbmRfZWRpdCwgY2ho X2FkbWluX3RhZ3MsIHJzc19hcnRpY2xlX2VkaXQsIG9yIGV2ZW4gYSA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBmb3JtIHdpdGggdHhwOnlpZWxkPC9saT4KCQk8bGk+ZW1wbG95 IHVwbV90ZXh0aWxlIGZvciBmaW5lLWdyYWluZWQgVGV4dGlsZSBwcm9jZXNzaW5nIGluc2lk ZSB5b3VyIFBhZ2VzIChpdCYjODIxNztzIG1vcmUgcm9idXN0IHRoYW4gaGF2aW5nIHRvIGVz Y2FwZSB0YWdzLWluLXRhZ3Mgd2l0aCA8Y29kZT5ub3RleHRpbGUuPC9jb2RlPiBvciA8Y29k ZT49PTwvY29kZT4pLiBBbHRlcm5hdGl2ZWx5LCB3cml0ZSB5b3VyIGNvbnRlbnQgaW4gQXJ0 aWNsZXMgYW5kIGltcG9ydCB0aGVtIGludG8geW91ciBQYWdlcyB3aXRoIHR4cDphcnRpY2xl X2N1c3RvbTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPmVzcV9hZG1pbl9zcGxhc2gKCTx1bD4K CQk8bGk+YWdhaW4sIHNtZF90YWJiZXIgY2FuIGJlIHRvbGQgdG8gcmVzaWRlIG9uIGl0cyBv d24gdGFiIGFuZCB5b3UgY2FuIHdyaXRlIHlvdXIgaGVscCB0ZXh0IGluIGEgdGFiIFBhZ2Ug d2l0aCBvcHRpb25hbCB1cG1fdGV4dGlsZSBzdXBwb3J0PC9saT4KCTwvdWw+PC9saT4KCTwv dWw+CgoJPHA+SWYgbm9uZSBvZiB0aGUgYWJvdmUgYXBwZWFscywgeW91IGNhbiBvZiBjb3Vy c2UgbWl4IHNtZF90YWJiZXIgd2l0aCBvdGhlciB0YWItbWFraW5nIHBsdWdpbnMgYnV0IHBs ZWFzZSBiZSBhd2FyZSB0aGF0IGVhY2ggcGx1Z2luIGRvZXMgdGhpbmdzIGluIHRoZWlyIG93 biB3YXkgYW5kIG1ldGhvZHMgb2YgbWFuaXB1bGF0aW5nIG1lbnVzIHZhcnkgZ3JlYXRseS4g VGhlcmVmb3JlLCBpZiB5b3UgZXhwZXJpZW5jZSBvZGQgbWVudSBiYXIgYmVoYXZpb3VyIHlv dSBtYXkgY29uc2lkZXIgc3dpdGNoaW5nIG9mZiB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBz dWNoIHBsdWdpbnMgdG8gdHJhY2sgZG93biB3aGF0JiM4MjE3O3MgZ29pbmcgb24uPC9wPgoK CTxoMiBpZD0ic21kX3RhYmJlcl9jaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHA+MzEg TWFyIDExIHwgMC4xMCB8IEluaXRpYWwgcHVibGljIHJlbGVhc2U8L3A+Cgo8L2Rpdj4KPCEt LSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQt d2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBt b25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0KI3Nt ZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90 dGVkICM5OTk7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGlu ZzoxMHB4OyB9CiNzbWRfaGVscCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJp ZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9y ZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAx N3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAx MnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEw cHggMCAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9oZWxwIGg0IHsgZm9u dDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBt YXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVs cCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dy b3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7 IHdpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTsgYm9y ZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsg Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW07IH0KI3NtZF9oZWxwIHVsIHsg bGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLmltcG9ydGFudCB7IGNvbG9y OnJlZDsgfQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3Nt ZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVO RCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiZDdmNjQ4N2IwZTk1MmVi OTg0OGQ3NDAwODA3ZTRmNmQiO30=