# rvm_plugin_diff v0.2 # Find changes made to installed plugins # # License: GNU GPLv2 or later # # Ruud van Melick # http://vanmelick.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTU6InJ2bV9wbHVnaW5fZGlmZiI7czo3OiJ2ZXJzaW9uIjtz OjM6IjAuMiI7czo2OiJhdXRob3IiO3M6MTU6IlJ1dWQgdmFuIE1lbGljayI7czoxMDoiYXV0 aG9yX3VyaSI7czoyMToiaHR0cDovL3Zhbm1lbGljay5jb20vIjtzOjExOiJkZXNjcmlwdGlv biI7czozODoiRmluZCBjaGFuZ2VzIG1hZGUgdG8gaW5zdGFsbGVkIHBsdWdpbnMiO3M6NDoi dHlwZSI7aToxO3M6NDoiaGVscCI7czo1NjY6Igk8cD5JbiB0aGUgZXh0ZW5zaW9ucyB0YWIs IHlvdSYjODIxNztsbCBmaW5kIGEgbmV3IHRhYiBjYWxsZWQgJiM4MjE2O1BsdWdpbiBEaWZm JiM4MjE3Oywgd2hpY2ggeW91IGNhbiB1c2UgdG86PC9wPgoKCTx1bD4KCQk8bGk+RmluZCB3 aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIGluc3RhbGxlZCBwbHVnaW5zLjwvbGk+CgkJPGxp PkRvd25sb2FkIHRob3NlIGNoYW5nZXMgaW4gdW5pZmllZCBkaWZmIGZvcm1hdC4gVGhlIHJl c3VsdGluZyBwYXRjaCB1c2VzIFVOSVgtc3R5bGUgKExGKSBsaW5lIGVuZGluZ3MsIHdoaWNo IHlvdSBtYXkgaGF2ZSB0byBjb252ZXJ0IGlmIHlvdSYjODIxNztyZSBkZXZlbG9waW5nIG9u IGEgZGlmZmVyZW50IHBsYXRmb3JtIChXaW5kb3dzID0gPHNwYW4gY2xhc3M9ImNhcHMiPjxz cGFuIGNsYXNzPSJjYXBzIj5DUkxGPC9zcGFuPjwvc3Bhbj4sIE1hYyA9IENSKS48L2xpPgoJ CTxsaT5TZWUgdGhlIGNvZGUgd2l0aCBsaW5lIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBv ZiBlYWNoIGxpbmUgKG1ha2VzIGZpbmRpbmcgZXJyb3JzIGVhc2llcikuPC9saT4KCTwvdWw+ IjtzOjQ6ImNvZGUiO3M6ODk5ODoiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgewog IGFkZF9wcml2cygncnZtX3BsdWdpbl9kaWZmJywgJzEsMicpOwogIHJlZ2lzdGVyX3RhYign ZXh0ZW5zaW9ucycsICdydm1fcGx1Z2luX2RpZmYnLCAnUGx1Z2luIERpZmYnKTsKICByZWdp c3Rlcl9jYWxsYmFjaygncnZtX3BsdWdpbl9kaWZmJywgJ3J2bV9wbHVnaW5fZGlmZicpOwp9 CgovKioKICBEaWZmIHJvdXRpbmUgdXNlcyBzb21lIHBhcnRzIG9mIHRoZSBjb2RlIGZvdW5k IGF0IHRoaXMgYWRkcmVzczoKICBodHRwOi8vd3d3LmhvbG9taW5kLmRlL3BocG5ldC9kaWZm Mi5zcmMucGhwCiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYW5pZWwgVW50ZXJiZXJnZXIgPGRp ZmYucGhwbmV0QGhvbG9taW5kLmRlPgogIENvcHlyaWdodCAoQykgMjAwNSAgTmlscyBLbmFw cG1laWVyIChuZXh0IHZlcnNpb24pCiAgTGljZW5zZTogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIG9yIGxhdGVyCiAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz L2dwbC5odG1sCioqLwoKZnVuY3Rpb24gcnZtX3BsdWdpbl9kaWZmKCRldmVudCwgJHN0ZXAp IHsKICBwYWdldG9wKCdQbHVnaW4gRGlmZicpOwoKICAkbmFtZSA9IGdwcygnbmFtZScpOwog ICRub3NwYWNlID0gZ3BzKCdub3NwYWNlJykgPyAxIDogMDsKICAkY29udGV4dCA9IGlzX251 bWVyaWMoZ3BzKCdjb250ZXh0JykpID8gaW50dmFsKGdwcygnY29udGV4dCcpKSA6ICc1JzsK CiAgJHBsdWdpbnMgPSBhcnJheSgpOwogICRtcGx1Z2lucyA9IHNhZmVfY29sdW1uKCduYW1l JywgJ3R4cF9wbHVnaW4nLCAnY29kZSAhPSBjb2RlX3Jlc3RvcmUnKTsKICAkb3BsdWdpbnMg PSBzYWZlX2NvbHVtbignbmFtZScsICd0eHBfcGx1Z2luJywgJ2NvZGUgPSBjb2RlX3Jlc3Rv cmUnKTsKICBhc29ydCgkb3BsdWdpbnMpOyBhc29ydCgkbXBsdWdpbnMpOwogIGlmICgkbXBs dWdpbnMpIHsKICAgICRwbHVnaW5zW10gPSAnICc7CiAgICBpZiAoJG9wbHVnaW5zKSAkcGx1 Z2luc1tdID0gJyAtLS0tLSBNT0RJRklFRCAtLS0tLSAnOwogICAgZm9yZWFjaCgkbXBsdWdp bnMgYXMgJHBsdWdpbikgJHBsdWdpbnNbXSA9ICRwbHVnaW47CiAgfQogIGlmICgkb3BsdWdp bnMpIHsKICAgICRwbHVnaW5zW10gPSAnICc7CiAgICBpZiAoJG1wbHVnaW5zKSAkcGx1Z2lu c1tdID0gJyAtLS0tLSBPUklHSU5BTCAtLS0tLSAnOwogICAgZm9yZWFjaCgkb3BsdWdpbnMg YXMgJHBsdWdpbikgJHBsdWdpbnNbXSA9ICRwbHVnaW47CiAgfQogIGlmIChpc3NldCgkcGx1 Z2luc1skbmFtZV0pKSAkbmFtZSA9ICRwbHVnaW5zWyRuYW1lXTsKCiAgZWNobyAnPGRpdiBz dHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjY2NjO2JhY2tncm91bmQ6I2Y3ZjdmNztwYWRkaW5n OjFlbTttYXJnaW4tbGVmdDoyZW07ZmxvYXQ6bGVmdDsiPic7CiAgZWNobyBmb3JtKAogICAg JzxwPlBsdWdpbiAnLnNlbGVjdElucHV0KCduYW1lJywgJHBsdWdpbnMsICRuYW1lLCAwKS4n PC9wPicuCiAgICAnPHA+U2hvdyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29udGV4dCIg bWF4bGVuZ3RoPSI0IiBzaXplPSIzIiB2YWx1ZT0iJy4kY29udGV4dC4nIiBjbGFzcz0iZWRp dCIgLz4gbGluZXMgYXJvdW5kIGVhY2ggY2hhbmdlPC9wPicuCiAgICAnPHA+Jy5jaGVja2Jv eCgnbm9zcGFjZScsJ2lnbm9yZScsJG5vc3BhY2UpLicgSWdub3JlIHdoaXRlIHNwYWNlIGNo YW5nZXM8L3A+Jy4KICAgIGVJbnB1dCgncnZtX3BsdWdpbl9kaWZmJykuCiAgICBmSW5wdXQo J3N1Ym1pdCcsJycsJ1Nob3cgQ2hhbmdlcycsJ3B1Ymxpc2gnKQogICk7CiAgZWNobyAnPC9k aXY+JzsKICBlY2hvICc8YnIgc3R5bGU9ImNsZWFyOmJvdGgiIC8+JzsKCiAgJHJzID0gc2Fm ZV9yb3coJ2NvZGUsY29kZV9yZXN0b3JlLG5hbWUsdmVyc2lvbicsICd0eHBfcGx1Z2luJywg Im5hbWU9JyIubXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCRuYW1lKS4iJyIpOwogIGlmICgh JHJzKSByZXR1cm47CiAgZXh0cmFjdCgkcnMpOwogIHVuc2V0KCRycyk7CgogICMgZm9yY2Ug VW5peC1zdHlsZSBsaW5lIGJyZWFrcwogICRjb2RlX3Jlc3RvcmUgPSBzdHJfcmVwbGFjZSgi XHJcbiIsIG4sICRjb2RlX3Jlc3RvcmUpOwogICRjb2RlX3Jlc3RvcmUgPSBzdHJfcmVwbGFj ZSgiXHIiLCBuLCAkY29kZV9yZXN0b3JlKTsKICAkY29kZSA9IHN0cl9yZXBsYWNlKCJcclxu IiwgbiwgJGNvZGUpOwogICRjb2RlID0gc3RyX3JlcGxhY2UoIlxyIiwgbiwgJGNvZGUpOwoK ICAjIHNwbGl0IHRoZSBzb3VyY2UgdGV4dCBpbnRvIGFycmF5cyBvZiBsaW5lcwogICR0MSA9 IGV4cGxvZGUobix0cmltKCRjb2RlX3Jlc3RvcmUpKTsKICAkdDIgPSBleHBsb2RlKG4sdHJp bSgkY29kZSkpOwogIHVuc2V0KCRjb2RlX3Jlc3RvcmUsJGNvZGUpOwoKICAjIGJ1aWxkIGEg cmV2ZXJzZS1pbmRleCBhcnJheSB1c2luZyB0aGUgbGluZSBhcyBrZXkgYW5kIGxpbmUgbnVt YmVyIGFzIHZhbHVlCiAgZm9yZWFjaCgkdDEgYXMgJGk9PiR4KSAkcjFbJHhdW10gPSAkaTsK ICBmb3JlYWNoKCR0MiBhcyAkaT0+JHgpICRyMlskeF1bXSA9ICRpOwoKICAkYTE9MDsgJGEy PTA7ICAgIyBzdGFydCBhdCBiZWdpbm5pbmcgb2YgZWFjaCBsaXN0CiAgJGFjdGlvbnMgPSBh cnJheSgpOwogICRpc19kaWZmID0gZmFsc2U7CgogICMgd2FsayB0aGlzIGxvb3AgdW50aWwg d2UgcmVhY2ggdGhlIGVuZCBvZiBvbmUgb2YgdGhlIGxpc3RzCiAgd2hpbGUgKCRhMTxjb3Vu dCgkdDEpICYmICRhMjxjb3VudCgkdDIpKSB7CiAgICAjIGlmIHdlIGhhdmUgYSBjb21tb24g ZWxlbWVudCwgc2F2ZSBpdCBhbmQgZ28gdG8gdGhlIG5leHQKICAgIGlmICgkbm9zcGFjZSA/ IHRyaW0oJHQxWyRhMV0pPT10cmltKCR0MlskYTJdKSA6ICR0MVskYTFdPT0kdDJbJGEyXSkK ICAgICAgeyAkYWN0aW9uc1tdPTA7ICRhMSsrOyAkYTIrKzsgY29udGludWU7IH0KICAgICMg b3RoZXJ3aXNlLCBmaW5kIHRoZSBzaG9ydGVzdCBtb3ZlIChNYW5oYXR0YW4tZGlzdGFuY2Up IGZyb20gdGhlCiAgICAjIGN1cnJlbnQgbG9jYXRpb24KICAgICRpc19kaWZmID0gdHJ1ZTsK ICAgICRiZXN0MT1jb3VudCgkdDEpOyAkYmVzdDI9Y291bnQoJHQyKTsKICAgICRzMT0kYTE7 ICRzMj0kYTI7CiAgICB3aGlsZSgkczErJHMyIDwgJGJlc3QxKyRiZXN0MikgewogICAgICAk ZD0tMTsKICAgICAgZm9yZWFjaCgoYXJyYXkpQCRyMVskdDJbJHMyXV0gYXMgJG4pCiAgICAg ICAgaWYgKCRuPj0kczEpIHsgJGQ9JG47IGJyZWFrOyB9CiAgICAgIGlmICgkZD49JHMxIGFu ZCAkZCskczIgPCAkYmVzdDErJGJlc3QyKQogICAgICAgIHsgJGJlc3QxPSRkOyAkYmVzdDI9 JHMyOyB9CiAgICAgICRkPS0xOwogICAgICBmb3JlYWNoKChhcnJheSlAJHIyWyR0MVskczFd XSBhcyAkbikKICAgICAgICBpZiAoJG4+PSRzMikgeyAkZD0kbjsgYnJlYWs7IH0KICAgICAg aWYgKCRkPj0kczIgYW5kICRzMSskZCA8ICRiZXN0MSskYmVzdDIpCiAgICAgICAgeyAkYmVz dDE9JHMxOyAkYmVzdDI9JGQ7IH0KICAgICAgJHMxKys7ICRzMisrOwogICAgfQogICAgd2hp bGUgKCRhMTwkYmVzdDEpIHsgJGFjdGlvbnNbXT0xOyAkYTErKzsgfSAgIyBkZWxldGVkIGVs ZW1lbnRzCiAgICB3aGlsZSAoJGEyPCRiZXN0MikgeyAkYWN0aW9uc1tdPTI7ICRhMisrOyB9 ICAjIGFkZGVkIGVsZW1lbnRzCiAgfQogIHVuc2V0KCRyMSwkcjIpOwoKICAjIHdlJ3ZlIHJl YWNoZWQgdGhlIGVuZCBvZiBvbmUgbGlzdCwgbm93IHdhbGsgdG8gdGhlIGVuZCBvZiB0aGUg b3RoZXIKICB3aGlsZSgkYTE8Y291bnQoJHQxKSkgeyAkYWN0aW9uc1tdPTE7ICRhMSsrOyB9 ICAjIGRlbGV0ZWQgZWxlbWVudHMKICB3aGlsZSgkYTI8Y291bnQoJHQyKSkgeyAkYWN0aW9u c1tdPTI7ICRhMisrOyB9ICAjIGFkZGVkIGVsZW1lbnRzCgogICMgY3JlYXRlICRsaW5lcyBh cnJheSB3aXRoIGFsbCBuZWVkZWQgaW5mbyBmb3IgZnVydGhlciBwcm9jZXNzaW5nCiAgJGkx PSRpMj0wOwogICRsaW5lcyA9IGFycmF5KCk7CiAgZm9yZWFjaCgkYWN0aW9ucyBhcyAkYWN0 KSB7CiAgICAkbGluZSA9ICgkYWN0PT0xID8gJHQxWyRpMV0gOiAkdDJbJGkyXSk7CiAgICAk bGluZV9vbGQgPSAoJGFjdD09MiA/IDAgOiArKyRpMSk7CiAgICAkbGluZV9uZXcgPSAoJGFj dD09MSA/IDAgOiArKyRpMik7CiAgICAkbGluZXNbXSA9IGFycmF5KCRsaW5lX29sZCwgJGxp bmVfbmV3LCAkbGluZSwgMik7CiAgfQoKICAjIHJlbWVtYmVyIGhvdyBtdWNoIHNwYWNlIHRo ZSBsaW5lIG51bWJlcnMgd2lsbCBuZWVkCiAgJG4xID0gc3RybGVuKGNvdW50KCR0MSkpOyBp ZiAoJG4xIDwgMykgJG4xID0gMzsgJG4xKys7CiAgJG4yID0gc3RybGVuKGNvdW50KCR0Mikp OyBpZiAoJG4yIDwgMykgJG4yID0gMzsgJG4yKys7CiAgdW5zZXQoJHQxLCR0MiwkYWN0aW9u cyk7CgogICMgbWFyayBsaW5lcyB0aGF0IGFyZSBuZWVkZWQgdG8gcHJvdmlkZSBjb250ZXh0 CiAgaWYgKCRpc19kaWZmKSB7CiAgICBpZiAodHJpbSgkY29udGV4dCkgIT0gJycpIHsKICAg ICAgJGNvdW50ID0gMDsKICAgICAgZm9yZWFjaCgkbGluZXMgYXMgJG5yID0+ICRsaW5lKSB7 CiAgICAgICAgaWYgKCRsaW5lWzBdIGFuZCAkbGluZVsxXSkgewogICAgICAgICAgaWYgKCRj b3VudCkgJGNvdW50LS07CiAgICAgICAgICBlbHNlICRsaW5lc1skbnJdWzNdLS07CiAgICAg ICAgfQogICAgICAgIGVsc2UgJGNvdW50ID0gJGNvbnRleHQ7CiAgICAgIH0KICAgICAgJGNv dW50ID0gMDsKICAgICAgZm9yKCRuciA9IGNvdW50KCRsaW5lcyktMTsgJG5yID49IDA7ICRu ci0tKSB7CiAgICAgICAgaWYgKCRsaW5lc1skbnJdWzBdIGFuZCAkbGluZXNbJG5yXVsxXSkg ewogICAgICAgICAgaWYgKCRjb3VudCkgJGNvdW50LS07CiAgICAgICAgICBlbHNlICRsaW5l c1skbnJdWzNdLS07CiAgICAgICAgfQogICAgICAgIGVsc2UgJGNvdW50ID0gJGNvbnRleHQ7 CiAgICAgIH0KICAgIH0KCiAgICAjIHVuaWZpZWQgZGlmZgogICAgaWYgKGdwcygnZm9ybWF0 JykpIHsKICAgICAgJHVkaWZmID0gJyc7CiAgICAgICRkaWZmID0gYXJyYXkoMCwwLDAsMCk7 CiAgICAgIGZvcmVhY2goJGxpbmVzIGFzICRsaW5lKSB7CiAgICAgICAgaWYgKCEkbGluZVsz XSkgewogICAgICAgICAgaWYgKCRvdXQpIHsKICAgICAgICAgICAgJHVkaWZmIC49ICRkaWZm WzRdLiRvdXQ7CiAgICAgICAgICAgICRvdXQgPSAnJzsKICAgICAgICAgICAgJGRpZmYgPSBh cnJheSgwLDAsMCwwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICBpZiAoISRkaWZmWzBdKSAkZGlmZlswXSA9ICRsaW5lWzBdOwogICAgICAgICAg aWYgKCEkZGlmZlsxXSkgJGRpZmZbMV0gPSAkbGluZVsxXTsKICAgICAgICAgIGlmICgkbGlu ZVswXSkgJGRpZmZbMl0gPSAkbGluZVswXTsKICAgICAgICAgIGlmICgkbGluZVsxXSkgJGRp ZmZbM10gPSAkbGluZVsxXTsKICAgICAgICAgICRkaWZmWzRdID0gJ0BAIC0nLiRkaWZmWzBd LicsJy4oJGRpZmZbMl0rMS0kZGlmZlswXSkuJyArJy4kZGlmZlsxXS4nLCcuKCRkaWZmWzNd KzEtJGRpZmZbMV0pLicgQEAnLm47CiAgICAgICAgICAkb3V0IC49ICghJGxpbmVbMV0gPyAn LScgOiAoISRsaW5lWzBdID8gJysnIDogJyAnKSkgLiAkbGluZVsyXSAuIG47CiAgICAgICAg fQogICAgICB9CiAgICAgIGlmICgkb3V0KSAkdWRpZmYgLj0gJGRpZmZbNF0uJG91dDsKCiAg ICAgICMgc2VuZCB1bmlmaWVkIGRpZmYgZmlsZQogICAgICBpZiAoJHVkaWZmKSB7CiAgICAg ICAgJHBsdWdpbiA9ICRuYW1lLictJy4kdmVyc2lvbjsKICAgICAgICAkdGltZSA9IHN0cmZ0 aW1lKCcgJVktJW0tJWQgJUg6JU06JVMuMDAwMDAwMDAwICV6Jyx0aW1lKCkpOwogICAgICAg ICR1ZGlmZiA9ICctLS0gJy4kcGx1Z2luLicub3JpZycuJHRpbWUubi4nKysrICcuJHBsdWdp bi4nLm5ldycuJHRpbWUubi4kdWRpZmY7CiAgICAgICAgb2JfY2xlYW4oKTsKICAgICAgICBo ZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IFBsdWdpbiBEaWZmJyk7CiAgICAgICAgaGVh ZGVyKCdDb250ZW50LVR5cGU6IHRleHQvcGxhaW47Y2hhcnNldD11dGYtOCcpOwogICAgICAg IGhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBzdHJsZW4oJHVkaWZmKSk7CiAgICAgICAg aGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iJyAu ICRwbHVnaW4gLiAnLmRpZmYiJyk7CiAgICAgICAgZWNobyAkdWRpZmY7CiAgICAgICAgb2Jf Zmx1c2goKTsKICAgICAgICBmbHVzaCgpOwogICAgICAgIGV4aXQ7CiAgICAgIH0KICAgIH0K CiAgICAjIGFkZCBpbmxpbmUgZGlmZiBtYXJrZXJzCiAgICAkaW5zID0gJGRlbCA9IGFycmF5 KCk7CiAgICBmb3JlYWNoKCRsaW5lcyBhcyAkbnIgPT4gJGxpbmUpIHsKICAgICAgaWYgKCRs aW5lWzBdIGFuZCAkbGluZVsxXSkgewogICAgICAgIGlmICgkZGVsIGFuZCBjb3VudCgkZGVs KSA9PSBjb3VudCgkaW5zKSkgewogICAgICAgICAgd2hpbGUoJGRlbG5yID0gYXJyYXlfc2hp ZnQoJGRlbCkgYW5kICRpbnNuciA9IGFycmF5X3NoaWZ0KCRpbnMpKSB7CiAgICAgICAgICAg ICRiZWdpbiA9IDA7ICRlbmQgPSAwOwogICAgICAgICAgICAkZGVsc3RyID0gJGxpbmVzWyRk ZWxucl1bMl07CiAgICAgICAgICAgICRpbnNzdHIgPSAkbGluZXNbJGluc25yXVsyXTsKICAg ICAgICAgICAgJG1heCA9IG1pbihzdHJsZW4oJGluc3N0ciksc3RybGVuKCRkZWxzdHIpKTsK ICAgICAgICAgICAgd2hpbGUoJGJlZ2luIDw9ICRtYXggYW5kIHN1YnN0cigkZGVsc3RyLCRi ZWdpbiwxKSA9PSBzdWJzdHIoJGluc3N0ciwkYmVnaW4sMSkpICRiZWdpbisrOwogICAgICAg ICAgICB3aGlsZSgkZW5kIDw9ICRtYXggYW5kIHN1YnN0cigkZGVsc3RyLC0kZW5kLTEsMSkg PT0gc3Vic3RyKCRpbnNzdHIsLSRlbmQtMSwxKSkgJGVuZCsrOwogICAgICAgICAgICBpZiAo ISRiZWdpbiBhbmQgISRlbmQpIGNvbnRpbnVlOwogICAgICAgICAgICBmb3JlYWNoKGFycmF5 KCRkZWxuciwkaW5zbnIpIGFzICRsaW5lbnIpIHsKICAgICAgICAgICAgICAkc3RyID0gJGxp bmVzWyRsaW5lbnJdWzJdOwogICAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJHN0cikgLSAk YmVnaW4gLSAkZW5kOwogICAgICAgICAgICAgIGlmICgkbGVuIDwgMCkgeyAkZW5kICs9ICRs ZW47ICRsZW4gPSAwOyB9CiAgICAgICAgICAgICAgJGxpbmVzWyRsaW5lbnJdWzJdID0gc3Vi c3RyKCRzdHIsMCwkYmVnaW4pLiJcciIuc3Vic3RyKCRzdHIsJGJlZ2luLCRsZW4pLiJcciIu KCRlbmQ/c3Vic3RyKCRzdHIsLSRlbmQpOicnKTsKICAgICAgICAgICAgfQogICAgICAgICAg fQogICAgICAgIH0KICAgICAgICAkaW5zID0gJGRlbCA9IGFycmF5KCk7CiAgICAgIH0KICAg ICAgZWxzZSB7CiAgICAgICAgaWYgKCRsaW5lWzBdKSAkZGVsW10gPSAkbnI7CiAgICAgICAg ZWxzZSAkaW5zW10gPSAkbnI7CiAgICAgIH0KICAgIH0KICB9CgogICMgZG93bmxvYWQgbGlu awogIGlmICgkaXNfZGlmZikgZWNobyAnPHAgc3R5bGU9Im1hcmdpbi1sZWZ0OjNlbSI+PGEg aHJlZj0iP2V2ZW50PXJ2bV9wbHVnaW5fZGlmZicuYS4nZm9ybWF0PWRpZmYnLmEuJ25hbWU9 Jy51cmxlbmNvZGUoJG5hbWUpLmEuJ2NvbnRleHQ9Jy4kY29udGV4dC5hLidub3NwYWNlPScu JG5vc3BhY2UuJyI+RG93bmxvYWQgaW4gPHN0cm9uZz51bmlmaWVkIGRpZmY8L3N0cm9uZz4g Zm9ybWF0PC9hPjwvcD4nOwoKICAjIGNvbG9yIGRpZmYKICAkbHN0eWxlID0gJyBzdHlsZT0i Y29sb3I6ICM5OTk7IGJvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztwYWRkaW5nOjBlbSAu NWVtIDBlbSAwZW07Iic7CiAgZWNobyAnPHByZT4nOwogIGlmICgkaXNfZGlmZikgewogICAg ZWNobyAiPHNwYW4kbHN0eWxlPiIuc3RyX3BhZCgnT2xkJywgJG4xLCAnICcsIFNUUl9QQURf TEVGVCkuJzwvc3Bhbj4nOwogICAgZWNobyAiPHNwYW4kbHN0eWxlPiIuc3RyX3BhZCgnTmV3 JywgJG4yLCAnICcsIFNUUl9QQURfTEVGVCkuJzwvc3Bhbj4nLm47CiAgfQogICRza2lwID0g ZmFsc2U7CiAgZm9yZWFjaCgkbGluZXMgYXMgJGxpbmUpIHsKICAgIGlmICghJGxpbmVbM10p IHsKICAgICAgIyBlbXB0eSBzcGFjZSBiZXR3ZWVuIGRpZmYgcGFydHMKICAgICAgaWYgKCEk c2tpcCkgZWNobyAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjdmN2Y3O2hlaWdodDoyZW07 Ym9yZGVyOjFweCBzb2xpZCAjY2NjIjtib3JkZXItcmlnaHQ6bm9uZTs+Jm5ic3A7PC9kaXY+ JzsKICAgICAgJHNraXAgPSB0cnVlOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGVsc2Ug JHNraXAgPSBmYWxzZTsKICAgIGlmICgkaXNfZGlmZikgZWNobyAiPHNwYW4kbHN0eWxlPiIu c3RyX3BhZCgoJGxpbmVbMF0gPyAkbGluZVswXSA6ICcnKSwkbjEsJyAnLFNUUl9QQURfTEVG VCkuJzwvc3Bhbj4nOwogICAgZWNobyAiPHNwYW4kbHN0eWxlPiIuc3RyX3BhZCgoJGxpbmVb MV0gPyAkbGluZVsxXSA6ICcnKSwkbjIsJyAnLFNUUl9QQURfTEVGVCkuJzwvc3Bhbj4nOwog ICAgaWYgKCEkbGluZVsxXSkgZWNobyAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNmZGQ7 Ij4nOwogICAgaWYgKCEkbGluZVswXSkgZWNobyAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6 ICNkZmQ7Ij4nOwogICAgJHN0ciA9IHN0cl9yZXBsYWNlKCJcdCIsJyAgJyxodG1sc3BlY2lh bGNoYXJzKCRsaW5lWzJdKSk7CiAgICBpZiAoISRsaW5lWzFdIG9yICEkbGluZVswXSkgewog ICAgICAjIGNvbG9yIGlubGluZSBkaWZmCiAgICAgICRjb2xvciA9ICRsaW5lWzBdID8gJyNl YWEnIDogJyM5ZTknOwogICAgICAkc3RyID0gcHJlZ19yZXBsYWNlKCcvXHIoLiopXHIvJywn PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6Jy4kY29sb3IuJyI+JHsxfTwvc3Bhbj4nLCRzdHIp OwogICAgfQogICAgZWNobyAnICcuJHN0cjsKICAgIGlmICghJGxpbmVbMF0gb3IgISRsaW5l WzFdKSBlY2hvICc8L3NwYW4+JzsKICAgIGVjaG8gbjsKICB9CiAgZWNobyAnPC9wcmU+JzsK fSI7czozOiJtZDUiO3M6MzI6IjRhZGNmYWY3MzdkZTc3NDE4M2VjYzE1NTAyOGE5Mjk2Ijt9