# Name: smd_article_stats v0.30 # Type: Admin/Public plugin # Get article/excerpt statistics and display them to visitors # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjE3OiJzbWRfYXJ0aWNsZV9zdGF0cyI7czo2OiJhdXRob3Ii O3M6MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3Rl ZmRhd3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4zMCI7czoxMToiZGVzY3JpcHRp b24iO3M6NTk6IkdldCBhcnRpY2xlL2V4Y2VycHQgc3RhdGlzdGljcyBhbmQgZGlzcGxheSB0 aGVtIHRvIHZpc2l0b3JzIjtzOjQ6ImNvZGUiO3M6MTAwNTk6Ii8qKgogKiBzbWRfYXJ0aWNs ZV9zdGF0cwogKgogKiBBIFRleHRwYXR0ZXJuIENNUyBwbHVnaW4gZm9yIGNvdW50aW5nIHdv cmRzIGluIGFydGljbGUgZmllbGRzIGFuZCBvcHRpb25hbGx5IGRpc3BsYXlpbmcgdGhlbSB0 byB2aXNpdG9ycwogKiAgLT4gQ2hvb3NlIHdoaWNoIGZpZWxkcyB0byBjb3VudCBvbiB0aGUg YWRtaW4gc2lkZQogKiAgLT4gQ3VzdG9taXplIHdoZXJlIHlvdSB3YW50IHRoZSBjb3VudCB0 byBiZSBkaXNwbGF5ZWQKICogIC0+IFNob3dzIElEIG9mIGN1cnJlbnRseSBlZGl0ZWQgYXJ0 aWNsZS4KICoKICogQGF1dGhvciBTdGVmIERhd3NvbgogKiBAbGluayAgIGh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8KICovCgovLyBUT0RPOgovLyAgKiBUaW55TUNFIC0tIGFjY2Vzc2luZyBm aWVsZHMgaW5zaWRlIGlmcmFtZXM/CgppZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7 CgkkYWxsX3ByaXZzID0gYXJyYXlfa2V5cyhnZXRfZ3JvdXBzKCkpOwoJdW5zZXQoJGFsbF9w cml2c1thcnJheV9zZWFyY2goJzAnLCAkYWxsX3ByaXZzKV0pOyAvLyBSZW1vdmUgJ25vbmUn CgkkYWxsX2pvaW5lZCA9IGpvaW4oJywnLCAkYWxsX3ByaXZzKTsKCglhZGRfcHJpdnMoJ3Nt ZF9hcnRzdGF0X3ByZWZzJywgJGFsbF9qb2luZWQpOwoJYWRkX3ByaXZzKCdwcmVmcy5zbWRf YXJ0c3RhdCcsICRhbGxfam9pbmVkKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXJ0c3Rh dF9wcmVmcycsICdwcmVmcycsICcnLCAxKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXJ0 aWNsZV9pbmZvJywgJ2FydGljbGUnKTsKCSRzbWRfYWlfcHJlZnMgPSBzbWRfYXJ0aWNsZV9p bmZvX3ByZWZzKCk7Cglmb3JlYWNoICgkc21kX2FpX3ByZWZzIGFzICRrZXkgPT4gJHByZWZv YmopIHsKCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FydGljbGVfaW5mb19wb3BoZWxwJywg J2FkbWluX2hlbHAnLCAka2V5KTsKCX0KfQoKLy8gUHVibGljIHNpZGUgaW5mbwpmdW5jdGlv biBzbWRfYXJ0aWNsZV9zdGF0cygkYXR0cywgJHRoaW5nPU5VTEwpIHsKCWdsb2JhbCAkdGhp c2FydGljbGU7CgoJYXNzZXJ0X2FydGljbGUoKTsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJ CSd3cmFwdGFnJyAgPT4gJycsCgkJJ2NsYXNzJyAgICA9PiBfX0ZVTkNUSU9OX18sCgkJJ2Jy ZWFrJyAgICA9PiAnJywKCQknbGFiZWwnICAgID0+ICcnLAoJCSdsYWJlbHRhZycgPT4gJycs CgkJJ2l0ZW0nICAgICA9PiAnJywKCSksICRhdHRzKSk7CgoJJG91dCA9IGFycmF5KCk7CgoJ Ly8gaXRlbSBub3Qgc3BlY2lmaWVkPyBVc2UgdGhlIGFycmF5ICdrZXlzJyBmcm9tIHRoZSBw cmVmCglpZiAoZW1wdHkoJGl0ZW0pKSB7CgkJJGZsZExpc3QgPSBkb19saXN0KGdldF9wcmVm KCdzbWRfYXJ0c3RhdF9maWVsZHMnKSk7CgkJJGNmcyA9IGdldEN1c3RvbUZpZWxkcygpOwoK CQlmb3JlYWNoICgkZmxkTGlzdCBhcyAkZmxkKSB7CgkJCSRmbGRJbmZvID0gZG9fbGlzdCgk ZmxkLCAnLT4nKTsKCQkJJGZpZWxkID0gJGZsZEluZm9bMF07CgkJCWlmIChzdHJwb3MoJGZp ZWxkLCAnY3VzdG9tXycpICE9PSBmYWxzZSkgewoJCQkJJGNmbnVtID0gc3RyX3JlcGxhY2Uo J2N1c3RvbV8nLCAnJywgJGZpZWxkKTsKCQkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRjZm51 bSwgJGNmcykpIHsKCQkJCQkkZmllbGQgPSAkY2ZzWyRjZm51bV07CgkJCQl9IGVsc2UgewoJ CQkJCS8vIEJvZ3VzIENGOiBza2lwIGl0CgkJCQkJY29udGludWU7CgkJCQl9CgkJCX0KCQkJ JGl0ZW1bXSA9IHN0cnRvbG93ZXIoJGZpZWxkKTsKCQl9Cgl9IGVsc2UgewoJCSRpdGVtID0g ZG9fbGlzdCgkaXRlbSk7Cgl9CgoJJG91dFtdID0gc21kX2FydGljbGVfaW5mb19jb3VudCgk aXRlbSwgJHRoaXNhcnRpY2xlKTsKCglyZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRh ZykuZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcyk7Cn0KCi8vIEFkbWlu LXNpZGUgaW5mbyAtLSBhdXRvLXVwZGF0ZWQgdmlhIGpRdWVyeQpmdW5jdGlvbiBzbWRfYXJ0 aWNsZV9pbmZvKCRldmVudCwgJHN0ZXApIHsKCWdsb2JhbCAkYXBwX21vZGU7CgoJZXh0cmFj dChncHNhKGFycmF5KCd2aWV3JykpKTsKCglpbmNsdWRlX29uY2UgdHhwYXRoLicvcHVibGlz aC90YWdoYW5kbGVycy5waHAnOwoJaWYoISR2aWV3IHx8IGdwcygnc2F2ZScpIHx8IGdwcygn cHVibGlzaCcpKSB7CgkJJHZpZXcgPSAndGV4dCc7Cgl9CgoJaWYgKCR2aWV3ID09ICd0ZXh0 JykgewoJCSRzY3JlZW5fbG9jcyA9IGFycmF5KAoJCQknbm9uZScgICAgICAgICAgICAgICAg ICA9PiAnJywKCQkJJ2V4Y2VycHRfYmVsb3cnICAgICAgICAgPT4gJ2pxfC5leGNlcnB0fGFm dGVyJywKCQkJJ2F1dGhvcl9iZWxvdycgICAgICAgICAgPT4gJ2pxfC5hdXRob3J8YWZ0ZXIn LAoJCQknc3RhdHVzX2Fib3ZlJyAgICAgICAgICA9PiAnanF8I3dyaXRlLXN0YXR1c3xiZWZv cmUnLAoJCQkndGl0bGVfYWJvdmUnICAgICAgICAgICA9PiAnanF8I2FydGljbGUtbWFpbnxw cmVwZW5kJywKCQkJJ3RleHRmaWx0ZXJfaGVscF9hYm92ZScgPT4gJ2pxfCN0ZXh0ZmlsdGVy X2dyb3VwfGJlZm9yZScsCgkJCSd0ZXh0ZmlsdGVyX2hlbHBfYmVsb3cnID0+ICdqcXwjdGV4 dGZpbHRlcl9ncm91cHxhZnRlcicsIC8vIEZvciA0LjYueCsKCQkJJ3RleHRpbGVfaGVscF9h Ym92ZScgICAgPT4gJ2pxfCNhcnRpY2xlLWNvbC0xfHByZXBlbmQnLAoJCQkndGV4dGlsZV9o ZWxwX2JlbG93JyAgICA9PiAnanF8I3RleHRpbGVfaGVscHxhZnRlcicsIC8vIEZvciA0LjUu eAoJCSk7CgoJCS8vIENoZWNrIGhpZGRlbiBwcmVmIGFuZCBzYW5pdGl6ZQoJCSRwb3NuID0g Z2V0X3ByZWYoJ3NtZF9hcnRzdGF0X3BvcycsICdzdGF0dXNfYWJvdmUnKTsKCQkkcG9zbiA9 IChhcnJheV9rZXlfZXhpc3RzKCRwb3NuLCAkc2NyZWVuX2xvY3MpKSA/ICRwb3NuIDogJ3N0 YXR1c19hYm92ZSc7CgoJCSRwbGFjZXIgPSBleHBsb2RlKCd8JywgJHNjcmVlbl9sb2NzWyRw b3NuXSk7CgkJZG9BcnJheSgkcGxhY2VyLCAnZXNjYXBlX2pzJyk7CgoJCS8vIFNwbGl0IGFu ZCByZWNvbWJpbmUgdG8gZ2V0IHJpZCBvZiBzcGFjZXMKCQkvLyBUT0RPOiBlcnJvciBkZXRl Y3Rpb24gaWYgbWlzc2luZyBlbnRyaWVzCgkJJGZsZExpc3QgPSBkb19saXN0KGdldF9wcmVm KCdzbWRfYXJ0c3RhdF9maWVsZHMnLCAnQm9keSAtPiAjYm9keSwgRXhjZXJwdCAtPiAjZXhj ZXJwdCcpKTsKCQkkZmxkQW5jaG9ycyA9IGFycmF5KCcwJyk7IC8vIFBsYWNlaG9sZGVyIHNp bmNlIFN0YXR1cyBpc24ndCBhIGNvdW50YWJsZSBmaWVsZCwgYnV0IHdlIG5lZWQgaXQgbGF0 ZXIKCQkkZGJfZmllbGRzID0gYXJyYXkoJ1N0YXR1cycpOwoKCQlmb3JlYWNoICgkZmxkTGlz dCBhcyAkZmxkKSB7CgkJCSRmbGRJbmZvID0gZG9fbGlzdCgkZmxkLCAnLT4nKTsKCQkJJGRi X2ZpZWxkc1tdID0gJGZsZEluZm9bMF07CgkJCWlmIChpc3NldCgkZmxkSW5mb1sxXSkpIHsK CQkJCSRmbGRBbmNob3JzW10gPSAkZmxkSW5mb1sxXTsKCQkJfQoJCX0KCgkJYXJyYXlfc2hp ZnQoJGZsZEFuY2hvcnMpOyAvLyBHb29kYnllIFN0YXR1cyBhbmNob3IKCQkkanNfZmllbGRz ID0gZXNjYXBlX2pzKGltcGxvZGUoJywnLCAkZmxkQW5jaG9ycykpOwoJCSRqc19hcnJheV9m aWVsZHMgPSBpbXBsb2RlKCcsJywgZG9BcnJheShkb0FycmF5KCRmbGRBbmNob3JzLCAnZXNj YXBlX2pzJyksICdkb1F1b3RlJykpOwoKCQkkaWQgPSAoZW1wdHkoJEdMT0JBTFNbJ0lEJ10p ID8gZ3BzKCdJRCcpIDogJEdMT0JBTFNbJ0lEJ10pOwoKCQlpZiAoZW1wdHkoJGlkKSkgewoJ CQkkcnMgPSAkZGJfZmllbGRzOwoJCX0gZWxzZSB7CgkJCSRycyA9IHNhZmVfcm93KGpvaW4o JywnLCBkb0FycmF5KCRkYl9maWVsZHMsICdkb1NsYXNoJykpLCAndGV4dHBhdHRlcm4nLCAn SUQ9Jy5kb1NsYXNoKCRpZCkpOwoJCX0KCgkJJGlkbGluayA9IChnZXRfcHJlZignc21kX2Fy dHN0YXRfaWQnKSA9PT0gJzEnKSA/ICgoJGlkICYmIGluX2FycmF5KCRyc1snU3RhdHVzJ10s IGFycmF5KFNUQVRVU19MSVZFLCBTVEFUVVNfU1RJQ0tZKSkpID8gaHJlZigkaWQsIHBlcm1s aW5rdXJsX2lkKCRpZCkpIDogJGlkKSA6ICcnOwoJCSRpbmRpdiA9IGFycmF5KCk7CgkJJHdv cmRzID0gMDsKCgkJYXJyYXlfc2hpZnQoJGRiX2ZpZWxkcyk7IC8vIEdvb2RieWUgU3RhdHVz IGZpZWxkCgkJZm9yZWFjaCAoJGRiX2ZpZWxkcyBhcyAkaWR4ID0+ICRmbGQpIHsKCQkJJHdj ID0gc21kX2FydGljbGVfaW5mb19jb3VudCgkZmxkLCAkcnMpOwoJCQkkd29yZHMgKz0gJHdj OwoJCQkkaW5kaXZbXSA9ICc8c3BhbiBjbGFzcz0ic21kX2FydGljbGVfc3RhdHNfJyAuICRp ZHggLiAnIj4nLiR3Yy4nPC9zcGFuPic7CgkJfQoJCWdUeHRTY3JpcHQoYXJyYXkoJ3NtZF9h cnRzdGF0X3dvcmRfc2luZ3VsYXInLCAnc21kX2FydHN0YXRfd29yZF9wbHVyYWwnKSk7CgkJ JHNpbmdzdHJpbmcgPSBnZXRfcHJlZignc21kX2FydHN0YXRfc2luZ3VsYXInLCAnMScpOwoJ CSRzaW5nbGVzID0gZG9fbGlzdCgkc2luZ3N0cmluZyk7CgkJJG91dDEgPSBlc2NhcGVfanMo CgkJCWRlZmluZWQoJ1BSRUZfUExVR0lOJykKCQkJCT8gd3JhcEdyb3VwKCdzbWRfYXJ0c3Rh dCcsICc8c3BhbiBjbGFzcz0ic21kX2FydGljbGVfc3RhdHNfd2MiPicuJHdvcmRzLic8L3Nw YW4+IDxzcGFuIGNsYXNzPSJzbWRfYXJ0aWNsZV9zdGF0c193ZCI+Jy4oaW5fYXJyYXkoJHdv cmRzLCAkc2luZ2xlcykgPyBnVHh0KCdzbWRfYXJ0c3RhdF93b3JkX3Npbmd1bGFyJykgOiBn VHh0KCdzbWRfYXJ0c3RhdF93b3JkX3BsdXJhbCcpKS4nPC9zcGFuPjogKCAnIC4gam9pbign IC8gJywgJGluZGl2KSAuJyApJy4oKCRpZGxpbmspID8gJyB8ICcgLiBnVHh0KCdpZCcpIC5u LiAkaWRsaW5rIDogJycpLCAnc21kX2FydHN0YXQnKQoJCQkJOiAnPGZpZWxkc2V0PjxsZWdl bmQ+Jy5nVHh0KCdzbWRfYXJ0c3RhdF9sZWdlbmQnKS4nPC9sZWdlbmQ+PHA+PHNwYW4gY2xh c3M9InNtZF9hcnRpY2xlX3N0YXRzX3djIj4nLiR3b3Jkcy4nPC9zcGFuPiA8c3BhbiBjbGFz cz0ic21kX2FydGljbGVfc3RhdHNfd2QiPicuKGluX2FycmF5KCR3b3JkcywgJHNpbmdsZXMp ID8gZ1R4dCgnc21kX2FydHN0YXRfd29yZF9zaW5ndWxhcicpIDogZ1R4dCgnc21kX2FydHN0 YXRfd29yZF9wbHVyYWwnKSkuJzwvc3Bhbj46ICggJyAuIGpvaW4oJyAvICcsICRpbmRpdikg LicgKScuKCgkaWRsaW5rKSA/ICcgfCAnIC4gZ1R4dCgnaWQnKSAubi4gJGlkbGluayA6ICcn KS4nPC9wPjwvZmllbGRzZXQ+JwoJCSk7CgkJJG91dDIgPSBzY3JpcHRfanMoPDw8RU9KUwpq UXVlcnkoZnVuY3Rpb24oKSB7Cgl2YXIgc2luZ2xpc3QgPSBbeyRzaW5nc3RyaW5nfV07CgoJ alF1ZXJ5KCJ7JGpzX2ZpZWxkc30iKS5rZXl1cChmdW5jdGlvbigpIHsKCQl2YXIgZmxkcyA9 IFt7JGpzX2FycmF5X2ZpZWxkc31dOwoJCXZhciB3ZHMgPSAwOwoJCXZhciBjb250ZW50ID0g Jyc7CgkJZm9yIChpZHggPSAwOyBpZHggPCBmbGRzLmxlbmd0aDsgaWR4KyspIHsKCQkJaWYg KGpRdWVyeShmbGRzW2lkeF0pLmxlbmd0aCA+IDApIHsKCQkJCWNvbnRlbnQgPSBqUXVlcnko Zmxkc1tpZHhdKS52YWwoKTsKCQkJCWNvbnRlbnQgKz0gKGNvbnRlbnQubGVuZ3RoID4gMCkg PyAiICIgOiAiIjsKCQkJCXdvcmRfY291bnQgPSBjb250ZW50LnJlcGxhY2UoLyg8KFtePl0r KT4pL2lnLCIiKS5zcGxpdCgvXHMrLykubGVuZ3RoLTEKCQkJCWpRdWVyeSgiLnNtZF9hcnRp Y2xlX3N0YXRzXyIraWR4KS50ZXh0KHdvcmRfY291bnQpOwoJCQkJd2RzICs9IHdvcmRfY291 bnQ7CgkJCX0KCQl9CgoJCWpRdWVyeSgiLnNtZF9hcnRpY2xlX3N0YXRzX3djIikudGV4dCh3 ZHMpOwoJCWpRdWVyeSgiLnNtZF9hcnRpY2xlX3N0YXRzX3dkIikudGV4dCgoKGpRdWVyeS5p bkFycmF5KHdkcywgc2luZ2xpc3QpID4gLTEpID8gdGV4dHBhdHRlcm4uZ1R4dCgnc21kX2Fy dHN0YXRfd29yZF9zaW5ndWxhcicpIDogdGV4dHBhdHRlcm4uZ1R4dCgnc21kX2FydHN0YXRf d29yZF9wbHVyYWwnKSkpOwoJfSkua2V5dXAoKTsKfSk7CkVPSlMKCQkpOwoKCQlpZiAoJHBs YWNlclswXSA9PSAnanEnICYmICRhcHBfbW9kZSAhPSAnYXN5bmMnKSB7CgkJCWVjaG8gJzxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5qUXVlcnkoZnVuY3Rpb24oKSB7IGpRdWVy eSgiJy4kcGxhY2VyWzFdLiciKS4nLiRwbGFjZXJbMl0uJyhcJycuJG91dDEuJ1wnKTsgfSk7 PC9zY3JpcHQ+Jy4kb3V0MjsKCQl9Cgl9Cn0KCi8vIEdldCBwb3BoZWxwIGNvbnRlbnQgZnJv bSBzdGVmZGF3c29uLmNvbQpmdW5jdGlvbiBzbWRfYXJ0aWNsZV9pbmZvX3BvcGhlbHAoJGV2 dCwgJHN0cCwgJHVpLCAkdmFycykgewoJcmV0dXJuIHN0cl9yZXBsYWNlKEhFTFBfVVJMLCAn aHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9zdXBwb3J0LycsICR1aSk7Cn0KCi8v IEluc3RhbGwgcHJlZnMgaWYgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0CmZ1bmN0aW9uIHNt ZF9hcnRzdGF0X3ByZWZzKCRldnQsICRzdHApIHsKCSRzbWRfYWlfcHJlZnMgPSBzbWRfYXJ0 aWNsZV9pbmZvX3ByZWZzKCk7Cglmb3JlYWNoICgkc21kX2FpX3ByZWZzIGFzICRrZXkgPT4g JHByZWZvYmopIHsKCQlpZiAoZ2V0X3ByZWYoJGtleSkgPT09ICcnKSB7CgkJCXNldF9wcmVm KCRrZXksIGRvU2xhc2goJHByZWZvYmpbJ2RlZmF1bHQnXSksICdzbWRfYXJ0c3RhdCcsICRw cmVmb2JqWyd0eXBlJ10sICRwcmVmb2JqWydodG1sJ10sICRwcmVmb2JqWydwb3NpdGlvbidd LCAkcHJlZm9ialsndmlzaWJpbGl0eSddKTsKCQl9Cgl9Cn0KCi8vIE9ubHkgcmVuZGVyIHRo ZSBwcmVmIGlmIGVub3VnaCBwcml2cyBleGlzdApmdW5jdGlvbiBzbWRfYXJ0c3RhdF9yZXN0 cmljdGVkKCRrZXksICR2YWwpIHsKCWdsb2JhbCAkdHhwX3VzZXI7CglzdGF0aWMgJHNtZF9h cnRzdGF0X3ByaXZzID0gYXJyYXkoKTsKCglpZiAoYXJyYXlfa2V5X2V4aXN0cygkdHhwX3Vz ZXIsICRzbWRfYXJ0c3RhdF9wcml2cykpIHsKCQkkcHJpdnMgPSAkc21kX2FydHN0YXRfcHJp dnNbJHR4cF91c2VyXTsKCX0gZWxzZSB7CgkJJHNhZmVfdXNlciA9IGRvU2xhc2goJHR4cF91 c2VyKTsKCQkkcHJpdnMgPSBzYWZlX2ZpZWxkKCdwcml2cycsICd0eHBfdXNlcnMnLCAibmFt ZT0nJHNhZmVfdXNlciciKTsKCQkkc21kX2FydHN0YXRfcHJpdnNbJHR4cF91c2VyXSA9ICRw cml2czsKCX0KICAgaWYgKCRwcml2cyA9PT0gJzEnKSB7CgkJcmV0dXJuIGZJbnB1dCgndGV4 dCcsICRrZXksICR2YWwsICcnLCAnJywgJycsIElOUFVUX1JFR1VMQVIpOwoJfSBlbHNlIHsK CQlyZXR1cm4gZ1R4dCgnc21kX2FydHN0YXRfc2V0X2J5X2FkbWluJyk7Cgl9Cn0KLy8gUmVu ZGVyIHRoZSBwb3NpdGlvbiBwcmVmCmZ1bmN0aW9uIHNtZF9hcnRzdGF0X3Bvcygka2V5LCAk dmFsKSB7Cgkkc21kX2FpX3ByZWZzID0gc21kX2FydGljbGVfaW5mb19wcmVmcygpOwoJJG9i aiA9ICRzbWRfYWlfcHJlZnNbJGtleV07CglyZXR1cm4gc2VsZWN0SW5wdXQoJGtleSwgJG9i alsnY29udGVudCddLCAkdmFsKTsKfQovLyBTZXR0aW5ncyBmb3IgdGhlIHBsdWdpbgovLyBU T0RPOiBVc2UgUFJFRl9QTFVHSU4gY29uc3RhbnQgYWZ0ZXIgNC42LjAgcmVsZWFzZWQKZnVu Y3Rpb24gc21kX2FydGljbGVfaW5mb19wcmVmcygpIHsKCSRzbWRfYWlfcHJlZnMgPSBhcnJh eSgKCQknc21kX2FydHN0YXRfZmllbGRzJyA9PiBhcnJheSgKCQkJJ2h0bWwnICAgICAgID0+ ICdzbWRfYXJ0c3RhdF9yZXN0cmljdGVkJywKCQkJJ3R5cGUnICAgICAgID0+IFBSRUZfQURW QU5DRUQsCgkJCSdwb3NpdGlvbicgICA9PiAxMCwKCQkJJ2RlZmF1bHQnICAgID0+ICdCb2R5 IC0+ICNib2R5LCBFeGNlcnB0IC0+ICNleGNlcnB0JywKCQkJJ2dyb3VwJyAgICAgID0+ICdz bWRfYXJ0c3RhdF9zZXR0aW5ncycsCgkJCSd2aXNpYmlsaXR5JyA9PiBQUkVGX0dMT0JBTCwK CQkpLAoJCSdzbWRfYXJ0c3RhdF9wb3MnID0+IGFycmF5KAoJCQknaHRtbCcgICAgICAgPT4g J3NtZF9hcnRzdGF0X3BvcycsCgkJCSd0eXBlJyAgICAgICA9PiBQUkVGX0FEVkFOQ0VELAoJ CQkncG9zaXRpb24nICAgPT4gMjAsCgkJCSdjb250ZW50JyAgICA9PiBhcnJheSgKCQkJCSdu b25lJyAgICAgICAgICAgICAgICAgID0+IGdUeHQoJ25vbmUnKSwKCQkJCSdleGNlcnB0X2Jl bG93JyAgICAgICAgID0+IGdUeHQoJ3NtZF9hcnRzdGF0X3Bvc19iZWxvd19leGNlcnB0Jyks CgkJCQknYXV0aG9yX2JlbG93JyAgICAgICAgICA9PiBnVHh0KCdzbWRfYXJ0c3RhdF9wb3Nf YmVsb3dfYXV0aG9yJyksCgkJCQknc3RhdHVzX2Fib3ZlJyAgICAgICAgICA9PiBnVHh0KCdz bWRfYXJ0c3RhdF9wb3NfYWJvdmVfc3RhdHVzJyksCgkJCQkndGl0bGVfYWJvdmUnICAgICAg ICAgICA9PiBnVHh0KCdzbWRfYXJ0c3RhdF9wb3NfYWJvdmVfdGl0bGUnKSwKCQkJCSd0ZXh0 aWxlX2hlbHBfYWJvdmUnICAgID0+IGdUeHQoJ3NtZF9hcnRzdGF0X3Bvc19hYm92ZV90ZXh0 aWxlJyksCi8vCQkJCSd0ZXh0ZmlsdGVyX2hlbHBfYWJvdmUnID0+IGdUeHQoJ3NtZF9hcnRz dGF0X3Bvc19hYm92ZV90ZXh0ZmlsdGVyJyksIC8vIFVuY29tbWVudCBhZnRlciA0LjYuMCBy ZWxlYXNlIGFuZCByZW1vdmUgdGV4dGlsZV9oZWxwX2Fib3ZlLiBVcGdyYWRlIGFueW9uZSB1 c2luZyB0aGlzIHNldHRpbmcgdG8gdGhlIG5ldyBvbmUgYXV0b21hdGljYWxseQoJCQkJJ3Rl eHRpbGVfaGVscF9iZWxvdycgICAgPT4gZ1R4dCgnc21kX2FydHN0YXRfcG9zX2JlbG93X3Rl eHRpbGUnKSwKLy8JCQkJJ3RleHRmaWx0ZXJfaGVscF9iZWxvdycgPT4gZ1R4dCgnc21kX2Fy dHN0YXRfcG9zX2JlbG93X3RleHRmaWx0ZXInKSwgLy8gVW5jb21tZW50IGFmdGVyIDQuNi4w IHJlbGVhc2UgYW5kIHJlbW92ZSB0ZXh0aWxlX2hlbHBfYmVsb3cuIFVwZ3JhZGUgYW55b25l IHVzaW5nIHRoaXMgc2V0dGluZyB0byB0aGUgbmV3IG9uZSBhdXRvbWF0aWNhbGx5CgkJCQkp LAoJCQknZGVmYXVsdCcgICAgPT4gJ3N0YXR1c19hYm92ZScsCgkJCSdncm91cCcgICAgICA9 PiAnc21kX2FydHN0YXRfc2V0dGluZ3MnLAoJCQkndmlzaWJpbGl0eScgPT4gUFJFRl9QUklW QVRFLAoJCSksCgkJJ3NtZF9hcnRzdGF0X2lkJyA9PiBhcnJheSgKCQkJJ2h0bWwnICAgICAg ID0+ICd5ZXNub3JhZGlvJywKCQkJJ3R5cGUnICAgICAgID0+IFBSRUZfQURWQU5DRUQsCgkJ CSdwb3NpdGlvbicgICA9PiAzMCwKCQkJJ2RlZmF1bHQnICAgID0+ICcwJywKCQkJJ2dyb3Vw JyAgICAgID0+ICdzbWRfYXJ0c3RhdF9zZXR0aW5ncycsCgkJCSd2aXNpYmlsaXR5JyA9PiBQ UkVGX1BSSVZBVEUsCgkJKSwKCQknc21kX2FydHN0YXRfc2luZ3VsYXInID0+IGFycmF5KAoJ CQknaHRtbCcgICAgICAgPT4gJ3NtZF9hcnRzdGF0X3Jlc3RyaWN0ZWQnLAoJCQkndHlwZScg ICAgICAgPT4gUFJFRl9BRFZBTkNFRCwKCQkJJ3Bvc2l0aW9uJyAgID0+IDQwLAoJCQknZGVm YXVsdCcgICAgPT4gJzEnLAoJCQknZ3JvdXAnICAgICAgPT4gJ3NtZF9hcnRzdGF0X3NldHRp bmdzJywKCQkJJ3Zpc2liaWxpdHknID0+IFBSRUZfR0xPQkFMLAoJCSksCgkpOwoKCXJldHVy biAkc21kX2FpX3ByZWZzOwp9CgovLyBMaWJyYXJ5IGZ1bmN0aW9uIHRvIGNvdW50IHdvcmRz IGluIHRoZSBnaXZlbiBmaWVsZCBpdGVtcwpmdW5jdGlvbiBzbWRfYXJ0aWNsZV9pbmZvX2Nv dW50KCRpdGVtLCAkZnJvbSkgewoJJHdvcmRzID0gMDsKCSRub3RhZ3MgPSAnLyg8KFtePl0r Pyk+KS8nOwoKCSRpdGVtID0gaXNfYXJyYXkoJGl0ZW0pID8gJGl0ZW0gOiBhcnJheSgkaXRl bSk7Cglmb3JlYWNoICgkaXRlbSBhcyAkd2hhdG5vdCkgewoJCSRjb250ZW50ID0gKGlzc2V0 KCRmcm9tWyR3aGF0bm90XSkpID8gcHJlZ19yZXBsYWNlKCRub3RhZ3MsICcnLCB0cmltKCRm cm9tWyR3aGF0bm90XSkpIC4gKChzdHJsZW4oJGZyb21bJHdoYXRub3RdKT09MCkgPyAnJyA6 ICcgJykgOiAnJzsKCQlpZiAoJGNvbnRlbnQpIHsKCQkJJHdvcmRzICs9IHByZWdfbWF0Y2hf YWxsKCdAXHMrQCcsICRjb250ZW50LCAkbSk7CgkJfQoJfQoJcmV0dXJuICR3b3JkczsKfSI7 czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czox OiIwIjtzOjQ6ImhlbHAiO3M6MzkwNDoiPGgxPnNtZF9hcnRpY2xlX3N0YXRzPC9oMT4KCgk8 cD5QdXQgdGhpcyB0YWcgaW4geW91ciBhcnRpY2xlIGZvcm0gdG8gZGlzcGxheSBpbmZvIGFi b3V0IHRoZSBjdXJyZW50IGFydGljbGUuIFRhZ3MgYXJlIGlnbm9yZWQgaW4gdGhlIGNhbGN1 bGF0aW9uLiBOb3RlIHRoYXQgaXQgb25seSBkaXNwbGF5cyB0aGUgYWN0dWFsIG51bWJlciBv ZiB3b3JkcyBlbnRlcmVkIGluIHRoZSBhcnRpY2xlIGl0c2VsZiAmIzgyMTI7IGlmIHNvbWUg b2YgdGhlIGNvbnRlbnQgaXMgZGVyaXZlZCBmcm9tIG90aGVyIGZvcm1zLCBpdCB3aWxsIG5v dCBiZSBpbmNsdWRlZC48L3A+CgoJPGgyPkF0dHJpYnV0ZXM8L2gyPgoKCTx1bD4KCQk8bGk+ PHN0cm9uZz5pdGVtPC9zdHJvbmc+IDogbGlzdCBvZiBpdGVtcyB5b3Ugd2FudCB0byBjb3Vu dC4gVGhlIG1vc3QgY29tbW9uIG9uZXMgYXJlIDxjb2RlPmJvZHk8L2NvZGU+LCA8Y29kZT5l eGNlcnB0PC9jb2RlPiBvciA8Y29kZT50aXRsZTwvY29kZT4gdG8gZ2V0IHRoZSBudW1iZXIg b2Ygd29yZHMgaW4gdGhlIHJlbGV2YW50IGZpZWxkcy4gWW91IGNhbiBzdXBwbHkgYW55IGFy dGljbGUgZmllbGQgeW91IGxpa2UgaGVyZSAoZS5nLiBjdXN0b20gZmllbGQ6IDxjb2RlPml0 ZW09JnF1b3Q7Ym9keSwgYm9vayBwcmVjaXMsIGJvb2sgYXV0aG9yJnF1b3Q7PC9jb2RlPiku IElmIHlvdSBkb24mIzgyMTc7dCBzcGVjaWZ5IGFueXRoaW5nIHRoZW4gdGhlIGZpZWxkcyB1 c2VkIHdpbGwgYmUgdGhvc2Ugc2VsZWN0ZWQgZnJvbSB0aGUgPGEgaHJlZj0iI3NtZF9hcnRz dGF0X3ByZWZzIj5wcmVmczwvYT48L2xpPgoJCTxsaT48c3Ryb25nPmxhYmVsPC9zdHJvbmc+ IDogbGFiZWwgdGV4dCB0byBvdXRwdXQgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgY291bnQ8L2xp PgoJCTxsaT48c3Ryb25nPmxhYmVsdGFnPC9zdHJvbmc+IDogPHNwYW4gY2xhc3M9ImNhcHMi PkhUTUw8L3NwYW4+IHRhZyB3aXRob3V0IGJyYWNrZXRzIHRvIHdyYXAgYXJvdW5kIHRoZSBs YWJlbDwvbGk+CgkJPGxpPjxzdHJvbmc+d3JhcHRhZzwvc3Ryb25nPiA6IDxzcGFuIGNsYXNz PSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgd2l0aG91dCBicmFja2V0cyB0byB3cmFwIGFyb3Vu ZCB0aGUgb3V0cHV0PC9saT4KCQk8bGk+PHN0cm9uZz5jbGFzczwvc3Ryb25nPiA6IDxzcGFu IGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzbmFtZSB0byBhcHBseSB0byB0aGUgd3Jh cHRhZyAoZGVmYXVsdDogPGNvZGU+c21kX2FydGljbGVfc3RhdHM8L2NvZGU+KTwvbGk+Cgk8 L3VsPgoKCTxoMj5BZG1pbiBzaWRlPC9oMj4KCgk8cD5PbiB0aGUgV3JpdGUgcGFuZWwsIHRo ZSBudW1iZXIgb2Ygd29yZHMgaW4gdGhlIGRvY3VtZW50IGFyZSBkaXNwbGF5ZWQgaW4gYSBz dGF0cyBwYW5lbC4gSXQgaXMgdXBkYXRlZCBpbiByZWFsIHRpbWUgYXMgd29yZHMgYXJlIGVu dGVyZWQgaW4gdGhlIGdpdmVuIGZpZWxkcyAoZGVmaW5lZCBpbiB0aGUgcGx1Z2luIHByZWZl cmVuY2VzKS4gVGhlIGFydGljbGUgSUQgY2FuIGFsc28gYmUgZGlzcGxheWVkOyBoeXBlcmxp bmtlZCB0byB0aGUgYXJ0aWNsZSBpdHNlbGYgaWYgaXQmIzgyMTc7cyBsaXZlIG9yIHN0aWNr eS4gU2V0IHRoZSA8aT5TaG93IGFydGljbGUgSUQ8L2k+IHByZWZlcmVuY2UgYWNjb3JkaW5n bHkuPC9wPgoKCTxwPklmIHlvdSB3aXNoIHRvIG1vdmUgdGhlIHBhbmVsIHRvIGEgZGlmZmVy ZW50IGxvY2F0aW9uIG9uIHRoZSBXcml0ZSBwYW5lbCwgdmlzaXQgdGhlIEFkdmFuY2VkIHBy ZWZzLiBZb3UgY2FuIHRoZW4gY2hvb3NlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGl0ZW1zIGZy b20gdGhlIGxpc3Q6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4+QWJvdmUgU3RhdHVzPC9zcGFu PiA6IChkZWZhdWx0IGxvY2F0aW9uKSBhYm92ZSB0aGUgU3RhdHVzIGJveC48L2xpPgoJCTxs aT48c3Bhbj5BYm92ZSBUaXRsZTwvc3Bhbj4gOiBhYm92ZSB0aGUgVGl0bGUgYm94LjwvbGk+ CgkJPGxpPjxzcGFuPkFib3ZlIFRleHRpbGU8L3NwYW4+IDogYWJvdmUgdGhlIFRleHRpbGUg SGVscCB0d2lzdHkuPC9saT4KCQk8bGk+PHNwYW4+QmVsb3cgVGV4dGlsZTwvc3Bhbj4gOiBi ZWxvdyB0aGUgVGV4dGlsZSBIZWxwIHR3aXN0eS48L2xpPgoJCTxsaT48c3Bhbj5CZWxvdyBF eGNlcnB0PC9zcGFuPiA6IEltbWVkaWF0ZWx5IGJlbmVhdGggdGhlIEV4Y2VycHQuPC9saT4K CQk8bGk+PHNwYW4+QmVsb3cgQXV0aG9yPC9zcGFuPiA6IEJlbmVhdGggdGhlIGF1dGhvciBp bmZvICh3aGljaCBpcyB1bmRlciB0aGUgRXhjZXJwdCkuIE5vdGUgdGhpcyBwb3NpdGlvbiB3 b24mIzgyMTc7dCBhcHBlYXIgZm9yIG5ldyBhcnRpY2xlcyB1bnRpbCB0aGV5IGFyZSBwdWJs aXNoZWQuPC9saT4KCQk8bGk+PHNwYW4+Tm9uZTwvc3Bhbj4gOiBkaXNhYmxlIHRoZSBwYW5l bC48L2xpPgoJPC91bD4KCgk8cD5Zb3UgbWF5IGFsc28gY3VzdG9taXplIHdoaWNoIGZpZWxk cyBjb250cmlidXRlIHRvIHRoZSBjb3VudCBieSBhbHRlcmluZyB0aGUgdmFsdWUgaW4gdGhl IDxpPldvcmQgY291bnQgZmllbGRzIGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+RE9NPC9zcGFu PiBzZWxlY3RvcnM8L2k+IGJveC4gTGlzdCB0aGUgZmllbGRzIHVzaW5nIHRoZSBzeW50YXgg PGk+ZmllbGQ8L2k+IC0mZ3Q7IDxpPjxzcGFuIGNsYXNzPSJjYXBzIj5ET008L3NwYW4+IHNl bGVjdG9yPC9pPiBhbmQgc2VwYXJhdGUgZWFjaCBmaWVsZCB3aXRoIGEgY29tbWEuIEZvciBl eGFtcGxlLCB0byBjb3VudCB3b3JkcyBpbiB0aGUgYm9keSwgZXhjZXJwdCBhbmQgY3VzdG9t IDIgZmllbGRzIHNldCB0aGUgcHJlZmVyZW5jZSB0bzo8L3A+Cgo8cHJlPjxjb2RlPkJvZHkg LSZndDsgI2JvZHksIEV4Y2VycHQgLSZndDsgI2V4Y2VycHQsIGN1c3RvbV8yIC0mZ3Q7ICNj dXN0b20tMgo8L2NvZGU+PC9wcmU+CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxw PldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0 ZWYgRGF3c29uPC9hPi4gVGhhbmtzIHRvIGJvdGggemVtIGFuZCBpYmxhc3RvZmYgZm9yIHRo ZSBvcmlnaW5hbCB3b3JrcyB0aGF0IHRoaXMgcGx1Z2luIGJvcnJvd3MgYXMgaXRzIGZvdW5k YXRpb24uPC9wPgoKCTxoMj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MjQgQXVnIDIw MDkgfCAwLjEwIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MDcgTm92IDIwMDkgfCAw LjIwIHwgSW1wcm92ZWQgY291bnRpbmcgdG8gaWdub3JlIHRhZ3MgYW5kIGFkZGVkIHJlYWwt dGltZSBhZG1pbi1zaWRlIGNvdW50ZXIgKGJvdGggdGhhbmtzIHNwZWVrZSk8L2xpPgoJCTxs aT4yMiBGZWIgMjAxMCB8IDAuMjEgfCBQcmV2ZW50ZWQgZXJyb3IgbWVzc2FnZSBpZiBzdGVw IG1hbmdsZWQ8L2xpPgoJCTxsaT4wNiBKdW4gMjAxMSB8IDAuMjIgfCBBZGRlZCBwYXJhZ3Jh cGggd3JhcHBlciB0byBmaWVsZHNldCBmb3IgY29uc2lzdGVuY3kgd2l0aCA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIGxheW91dCAodGhhbmtzIHBoaWx3YXJlaGFt KTwvbGk+CgkJPGxpPjE0IEZlYiAyMDEyIHwgMC4yMyB8IEZpeGVkIGV4Y2VycHRfYmVsb3cg YXV0by11cGRhdGUgbWVjaGFuaXNtIDsgYWRkZWQgYXV0aG9yX2JlbG93IHBvc2l0aW9uPC9s aT4KCQk8bGk+MDQgQXByIDIwMTIgfCAwLjI0IHwgRXhwYW5kZWQgdGhlIGF2YWlsYWJsZSBm aWVsZHMgdG8gYW55dGhpbmcgaW4gdGhlIGFydGljbGUgKHRoYW5rcyBUZWVtdSk8L2xpPgoJ CTxsaT4yMSBOb3YgMjAxMiB8IDAuMzAgfCBGb3IgVHhwIDQuNS4wKyA7IGFkZGVkIHZpc2li bGUgcHJlZnMgOyBtYWRlIHNtZF9hcnRpY2xlX3N0YXRzIHRhZyB0YWtlIG9uIGRlZmF1bHRz IDsgZGlzcGxheSBvZiBJRCBpcyBvcHRpb25hbDwvbGk+Cgk8L3VsPiI7czozOiJtZDUiO3M6 MzI6ImJhZDk2YjZkMDEwY2IwNDcxMDFlNTY5OGI3ZTA1NGJlIjtzOjg6InRleHRwYWNrIjtz OjE2MjM6IiNAc21kX2FydHN0YXQKc21kX2FydHN0YXQgPT4gQXJ0aWNsZSBzdGF0aXN0aWNz CnNtZF9hcnRzdGF0X2ZpZWxkcyA9PiBXb3JkIGNvdW50IGZpZWxkcyBhbmQgRE9NIHNlbGVj dG9ycwpzbWRfYXJ0c3RhdF9pZCA9PiBTaG93IGFydGljbGUgSUQKc21kX2FydHN0YXRfbGVn ZW5kID0+IEFydGljbGUgc3RhdHMKc21kX2FydHN0YXRfcG9zID0+IFBvc2l0aW9uIG9mIHN0 YXRzIHBhbmVsCnNtZF9hcnRzdGF0X3Bvc19hYm92ZV9zdGF0dXMgPT4gQWJvdmUgU3RhdHVz CnNtZF9hcnRzdGF0X3Bvc19hYm92ZV90ZXh0ZmlsdGVyID0+IEFib3ZlIFRleHRmaWx0ZXIK c21kX2FydHN0YXRfcG9zX2Fib3ZlX3RleHRpbGUgPT4gQWJvdmUgVGV4dGlsZQpzbWRfYXJ0 c3RhdF9wb3NfYWJvdmVfdGl0bGUgPT4gQWJvdmUgVGl0bGUKc21kX2FydHN0YXRfcG9zX2Jl bG93X2F1dGhvciA9PiBCZWxvdyBBdXRob3IKc21kX2FydHN0YXRfcG9zX2JlbG93X2V4Y2Vy cHQgPT4gQmVsb3cgRXhjZXJwdApzbWRfYXJ0c3RhdF9wb3NfYmVsb3dfdGV4dGZpbHRlciA9 PiBCZWxvdyBUZXh0ZmlsdGVyCnNtZF9hcnRzdGF0X3Bvc19iZWxvd190ZXh0aWxlID0+IEJl bG93IFRleHRpbGUKc21kX2FydHN0YXRfc2V0X2J5X2FkbWluID0+IFNldCBieSBhZG1pbmlz dHJhdG9yCnNtZF9hcnRzdGF0X3Npbmd1bGFyID0+IE51bWJlcnMgdHJlYXRlZCBhcyAnc2lu Z3VsYXInCnNtZF9hcnRzdGF0X3dvcmRfcGx1cmFsID0+IHdvcmRzCnNtZF9hcnRzdGF0X3dv cmRfc2luZ3VsYXIgPT4gd29yZAojQHNtZF9hcnRzdGF0CiNAbGFuZ3VhZ2UgZnItZnIKc21k X2FydHN0YXQgPT4gU3RhdGlzdGlxdWVzIGQnYXJ0aWNsZQpzbWRfYXJ0c3RhdF9maWVsZHMg PT4gQ2hhbXBzIGRlIGTDqWNvbXB0ZSBldCBzw6lsZWN0ZXVyIGR1IERPTQpzbWRfYXJ0c3Rh dF9pZCA9PiBBZmZpY2hlciBsJ0lEIGRlIGwnYXJ0aWNsZQpzbWRfYXJ0c3RhdF9sZWdlbmQg PT4gU3RhdGlzdGlxdWVzIGFydGljbGUKc21kX2FydHN0YXRfcG9zID0+IEVtcGxhY2VtZW50 IGRhbnMgbGEgcGFnZQpzbWRfYXJ0c3RhdF9wb3NfYWJvdmVfc3RhdHVzID0+IEF1IGRlc3N1 cyBkZXMgc3RhdHV0cwpzbWRfYXJ0c3RhdF9wb3NfYWJvdmVfdGV4dGZpbHRlciA9PiBBdSBk ZXNzdXMgZHUgc8OpbGVjdGV1ciBBaWRlIFRleHRpbGUKc21kX2FydHN0YXRfcG9zX2Fib3Zl X3RleHRpbGUgPT4gQXUgZGVzc3VzIGRlIGwnYWlkZSBUZXh0aWxlCnNtZF9hcnRzdGF0X3Bv c19hYm92ZV90aXRsZSA9PiBBdSBkZXNzdXMgZHUgdGl0cmUKc21kX2FydHN0YXRfcG9zX2Jl bG93X2F1dGhvciA9PiBTb3VzIGxlIG5vbSBkJ2F1dGV1cgpzbWRfYXJ0c3RhdF9wb3NfYmVs b3dfZXhjZXJwdCA9PiBTb3VzIGxlIHLDqXN1bcOpCnNtZF9hcnRzdGF0X3Bvc19iZWxvd190 ZXh0ZmlsdGVyID0+IEVuIGRlc3NvdXMgZHUgc8OpbGVjdGV1ciBBaWRlIFRleHRpbGUKc21k X2FydHN0YXRfcG9zX2JlbG93X3RleHRpbGUgPT4gRW4gZGVzc291cyBkZSBsJ2FpZGUgVGV4 dGlsZQpzbWRfYXJ0c3RhdF9zaW5ndWxhciA9PiBOb21icmUgcHJpcyBhdSBzaW5ndWxpZXIK c21kX2FydHN0YXRfd29yZF9wbHVyYWwgPT4gTW90cwpzbWRfYXJ0c3RhdF93b3JkX3Npbmd1 bGFyID0+IE1vdCI7fQ==