IiBUZXN0cyBmb3IgdGhlIHdyaXRlZmlsZSgpIGZ1bmN0aW9uIGFuZCBzb21lIDp3cml0ZSBjb21tYW5kcy4KCnNvdXJjZSBjaGVjay52aW0Kc291cmNlIHRlcm1fdXRpbC52aW0KCmZ1bmMgVGVzdF93cml0ZWZpbGUoKQogIGxldCBmID0gdGVtcG5hbWUoKQogIGNhbGwgd3JpdGVmaWxlKFsib3ZlciIsIndyaXR0ZW4iXSwgZiwgImIiKQogIGNhbGwgd3JpdGVmaWxlKFsiaGVsbG8iLCJ3b3JsZCJdLCBmLCAiYiIpCiAgY2FsbCB3cml0ZWZpbGUoWyIhIiwgImdvb2QiXSwgZiwgImEiKQogIGNhbGwgd3JpdGVmaWxlKFsibW9ybmluZyJdLCBmLCAiYWIiKQogIGNhbGwgd3JpdGVmaWxlKFsiIiwgInZpbW1lcnMiXSwgZiwgImFiIikKICBsZXQgbCA9IHJlYWRmaWxlKGYpCiAgY2FsbCBhc3NlcnRfZXF1YWwoImhlbGxvIiwgbFswXSkKICBjYWxsIGFzc2VydF9lcXVhbCgid29ybGQhIiwgbFsxXSkKICBjYWxsIGFzc2VydF9lcXVhbCgiZ29vZCIsIGxbMl0pCiAgY2FsbCBhc3NlcnRfZXF1YWwoIm1vcm5pbmciLCBsWzNdKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJ2aW1tZXJzIiwgbFs0XSkKICBjYWxsIGRlbGV0ZShmKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoInRleHQiLCAiWGZpbGUiKScsICdFNDc1OiBJbnZhbGlkIGFyZ3VtZW50OiB3cml0ZWZpbGUoKSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgTGlzdCBvciBhIEJsb2InKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2lnbm9yZV9yZWdleHBfZXJyb3IoKQogIHdyaXRlIFh0W3otYV1lc3QudHh0CiAgY2FsbCBkZWxldGUoJ1h0W3otYV1lc3QudHh0JykKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9mYWlsc19nZW50bHkoKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbInRlc3QiXSwgIlhmaWxlIiwgW10pJywgJ0U3MzA6JykKICBjYWxsIGFzc2VydF9mYWxzZShmaWxlcmVhZGFibGUoIlhmaWxlIikpCiAgY2FsbCBkZWxldGUoIlhmaWxlIikKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFsidGVzdCIsIFtdLCBbXSwgW10sICJ0c2V0Il0sICJYZmlsZSIpJywgJ0U3MzA6JykKICBjYWxsIGFzc2VydF9mYWxzZShmaWxlcmVhZGFibGUoIlhmaWxlIikpCiAgY2FsbCBkZWxldGUoIlhmaWxlIikKCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2NhbGwgd3JpdGVmaWxlKFtdLCAiWGZpbGUiLCBbXSknLCAnRTczMDonKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgiWGZpbGUiKSkKICBjYWxsIGRlbGV0ZSgiWGZpbGUiKQoKICBjYWxsIGFzc2VydF9mYWlscygnY2FsbCB3cml0ZWZpbGUoW10sIFtdKScsICdFNzMwOicpCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfZmFpbHNfY29udmVyc2lvbigpCiAgQ2hlY2tGZWF0dXJlIGljb252CiAgaWYgaGFzKCdzdW4nKQogICAgdGhyb3cgJ1NraXBwZWQ6IGRvZXMgbm90IHdvcmsgb24gU3VuT1MnCiAgZW5kaWYKICAiIFdpdGhvdXQgYSBiYWNrdXAgZmlsZSB0aGUgd3JpdGUgd29uJ3QgaGFwcGVuIGlmIHRoZXJlIGlzIGEgY29udmVyc2lvbgogICIgZXJyb3IuCiAgc2V0IG5vYmFja3VwIG5vd3JpdGViYWNrdXAgYmFja3VwZGlyPS4gYmFja3Vwc2tpcD0KICBuZXcKICBsZXQgY29udGVudHMgPSBbImxpbmUgb25lIiwgImxpbmUgdHdvIl0KICBjYWxsIHdyaXRlZmlsZShjb250ZW50cywgJ1hmaWxlJykKICBlZGl0IFhmaWxlCiAgY2FsbCBzZXRsaW5lKDEsIFsiZmlyc3QgbGluZSIsICJjYW5ub3QgY29udmVydCBcdTAxMGIiLCAidGhpcmQgbGluZSJdKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZSArK2VuYz1jcDkzMicsICdFNTEzOicpCiAgY2FsbCBhc3NlcnRfZXF1YWwoY29udGVudHMsIHJlYWRmaWxlKCdYZmlsZScpKQoKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQogIGJ3aXBlIQogIHNldCBiYWNrdXAmIHdyaXRlYmFja3VwJiBiYWNrdXBkaXImdmltIGJhY2t1cHNraXAmdmltCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfZmFpbHNfY29udmVyc2lvbjIoKQogIENoZWNrRmVhdHVyZSBpY29udgogIGlmIGhhcygnc3VuJykKICAgIHRocm93ICdTa2lwcGVkOiBkb2VzIG5vdCB3b3JrIG9uIFN1bk9TJwogIGVuZGlmCiAgIiBXaXRoIGEgYmFja3VwIGZpbGUgdGhlIHdyaXRlIGhhcHBlbnMgZXZlbiBpZiB0aGVyZSBpcyBhIGNvbnZlcnNpb24gZXJyb3IsCiAgIiBidXQgdGhlbiB0aGUgYmFja3VwIGZpbGUgbXVzdCByZW1haW4KICBzZXQgbm9iYWNrdXAgd3JpdGViYWNrdXAgYmFja3VwZGlyPS4gYmFja3Vwc2tpcD0KICBsZXQgY29udGVudHMgPSBbImxpbmUgb25lIiwgImxpbmUgdHdvIl0KICBjYWxsIHdyaXRlZmlsZShjb250ZW50cywgJ1hmaWxlX2NvbnZlcnNpb25fZXJyJykKICBlZGl0IFhmaWxlX2NvbnZlcnNpb25fZXJyCiAgY2FsbCBzZXRsaW5lKDEsIFsiZmlyc3QgbGluZSIsICJjYW5ub3QgY29udmVydCBcdTAxMGIiLCAidGhpcmQgbGluZSJdKQogIHNldCBmaWxlZW5jb2Rpbmc9bGF0aW4xCiAgbGV0IG91dHB1dCA9IGV4ZWN1dGUoJ3dyaXRlJykKICBjYWxsIGFzc2VydF9tYXRjaCgnQ09OVkVSU0lPTiBFUlJPUicsIG91dHB1dCkKICBjYWxsIGFzc2VydF9lcXVhbChjb250ZW50cywgcmVhZGZpbGUoJ1hmaWxlX2NvbnZlcnNpb25fZXJyficpKQoKICBjYWxsIGRlbGV0ZSgnWGZpbGVfY29udmVyc2lvbl9lcnInKQogIGNhbGwgZGVsZXRlKCdYZmlsZV9jb252ZXJzaW9uX2Vycn4nKQogIGJ3aXBlIQogIHNldCBiYWNrdXAmIHdyaXRlYmFja3VwJiBiYWNrdXBkaXImdmltIGJhY2t1cHNraXAmdmltCmVuZGZ1bmMKCmZ1bmMgU2V0RmxhZyh0aW1lcikKICBsZXQgZzpmbGFnID0gMQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVfcXVpdF9zcGxpdCgpCiAgIiBQcmV2ZW50IGV4aXRpbmcgYnkgc3BsaXR0aW5nIHdpbmRvdyBvbiBmaWxlIHdyaXRlLgogIGF1Z3JvdXAgdGVzdGdyb3VwCiAgICBhdXRvY21kIEJ1ZldyaXRlUHJlICogc3BsaXQKICBhdWdyb3VwIEVORAogIGUhIFhmaWxlCiAgY2FsbCBzZXRsaW5lKDEsICdub3RoaW5nJykKICB3cQoKICBpZiBoYXMoJ3RpbWVycycpCiAgICAiIHRpbWVyIHdpbGwgbm90IHJ1biBpZiAiZXhpdGluZyIgaXMgc3RpbGwgc2V0CiAgICBsZXQgZzpmbGFnID0gMAogICAgY2FsbCB0aW1lcl9zdGFydCgxLCAnU2V0RmxhZycpCiAgICBzbGVlcCA1MG0KICAgIGNhbGwgYXNzZXJ0X2VxdWFsKDEsIGc6ZmxhZykKICAgIHVubGV0IGc6ZmxhZwogIGVuZGlmCiAgYXUhIHRlc3Rncm91cAogIGJ3aXBlIFhmaWxlCiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKZnVuYyBUZXN0X25vd3JpdGVfcXVpdF9zcGxpdCgpCiAgIiBQcmV2ZW50IGV4aXRpbmcgYnkgb3BlbmluZyBhIGhlbHAgd2luZG93LgogIGUhIFhmaWxlCiAgaGVscAogIHdpbmNtZCB3CiAgZXhlIHdpbm5yKCkgLiAncScKCiAgaWYgaGFzKCd0aW1lcnMnKQogICAgIiB0aW1lciB3aWxsIG5vdCBydW4gaWYgImV4aXRpbmciIGlzIHN0aWxsIHNldAogICAgbGV0IGc6ZmxhZyA9IDAKICAgIGNhbGwgdGltZXJfc3RhcnQoMSwgJ1NldEZsYWcnKQogICAgc2xlZXAgNTBtCiAgICBjYWxsIGFzc2VydF9lcXVhbCgxLCBnOmZsYWcpCiAgICB1bmxldCBnOmZsYWcKICBlbmRpZgogIGJ3aXBlIFhmaWxlCmVuZGZ1bmMKCmZ1bmMgVGVzdF93cml0ZWZpbGVfc3luY19hcmcoKQogICIgVGhpcyBkb2Vzbid0IGNoZWNrIGlmIGZzeW5jKCkgd29ya3MsIG9ubHkgdGhhdCB0aGUgYXJndW1lbnQgaXMgYWNjZXB0ZWQuCiAgY2FsbCB3cml0ZWZpbGUoWydvbmUnXSwgJ1h0ZXN0JywgJ3MnKQogIGNhbGwgd3JpdGVmaWxlKFsndHdvJ10sICdYdGVzdCcsICdTJykKICBjYWxsIGRlbGV0ZSgnWHRlc3QnKQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX3N5bmNfZGV2X3N0ZG91dCgpCiAgQ2hlY2tVbml4CiAgaWYgZmlsZXdyaXRhYmxlKCcvZGV2L3N0ZG91dCcpCiAgICAiIEp1c3QgY2hlY2sgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYW4gZXJyb3IuCiAgICBjYWxsIHdyaXRlZmlsZShbJ29uZSddLCAnL2Rldi9zdGRvdXQnKQogIGVsc2UKICAgIHRocm93ICdTa2lwcGVkOiAvZGV2L3N0ZG91dCBpcyBub3Qgd3JpdGFibGUnCiAgZW5kaWYKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlZmlsZV9hdXRvd3JpdGUoKQogIHNldCBhdXRvd3JpdGUKICBuZXcKICBuZXh0IFhhIFhiIFhjCiAgY2FsbCBzZXRsaW5lKDEsICdhYWEnKQogIG5leHQKICBjYWxsIGFzc2VydF9lcXVhbChbJ2FhYSddLCByZWFkZmlsZSgnWGEnKSkKICBjYWxsIHNldGxpbmUoMSwgJ2JiYicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2VkaXQgWFgnKQogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGInKSkKCiAgc2V0IGF1dG93cml0ZWFsbAogIGVkaXQgWFgKICBjYWxsIGFzc2VydF9lcXVhbChbJ2JiYiddLCByZWFkZmlsZSgnWGInKSkKCiAgYndpcGUhCiAgY2FsbCBkZWxldGUoJ1hhJykKICBjYWxsIGRlbGV0ZSgnWGInKQogIHNldCBub2F1dG93cml0ZQplbmRmdW5jCgpmdW5jIFRlc3Rfd3JpdGVmaWxlX2F1dG93cml0ZV9ub3dyaXRlKCkKICBzZXQgYXV0b3dyaXRlCiAgbmV3CiAgbmV4dCBYYSBYYiBYYwogIHNldCBidWZ0eXBlPW5vd3JpdGUKICBjYWxsIHNldGxpbmUoMSwgJ2FhYScpCiAgbGV0IGJ1ZiA9IGJ1Zm5yKCclJykKICAiIGJ1ZmZlciBjb250ZW50cyBzaWxlbnRseSBsb3N0CiAgZWRpdCBYWAogIGNhbGwgYXNzZXJ0X2ZhbHNlKGZpbGVyZWFkYWJsZSgnWGEnKSkKICByZXdpbmQKICBjYWxsIGFzc2VydF9lcXVhbCgnJywgZ2V0bGluZSgxKSkKCiAgYndpcGUhCiAgc2V0IG5vYXV0b3dyaXRlCmVuZGZ1bmMKCiIgVGVzdCBmb3IgJzp3ICE8Y21kPicgdG8gcGlwZSBsaW5lcyBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBhbiBleHRlcm5hbAoiIGNvbW1hbmQuCmZ1bmMgVGVzdF93cml0ZV9waXBlX3RvX2NtZCgpCiAgQ2hlY2tVbml4CiAgbmV3CiAgY2FsbCBzZXRsaW5lKDEsIFsnTDEnLCAnTDInLCAnTDMnLCAnTDQnXSkKICAyLDN3ICFjYXQgPiBYZmlsZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnTDInLCAnTDMnXSwgcmVhZGZpbGUoJ1hmaWxlJykpCiAgY2xvc2UhCiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciA6c2F2ZWFzCmZ1bmMgVGVzdF9zYXZlYXMoKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdzYXZlYXMnLCAnRTQ3MTonKQogIGNhbGwgd3JpdGVmaWxlKFsnTDEnXSwgJ1hmaWxlJykKICBuZXcgWGZpbGUKICBuZXcKICBjYWxsIHNldGxpbmUoMSwgWydMMSddKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdzYXZlYXMgWGZpbGUnLCAnRTEzOTonKQogIGNsb3NlIQogIGVuZXcgfCBvbmx5CiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKZnVuYyBUZXN0X3dyaXRlX2Vycm9ycygpCiAgIiBUZXN0IGZvciB3cml0aW5nIHBhcnRpYWwgYnVmZmVyCiAgY2FsbCB3cml0ZWZpbGUoWydMMScsICdMMicsICdMMyddLCAnWGZpbGUnKQogIG5ldyBYZmlsZQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCcxLDJ3cml0ZScsICdFMTQwOicpCiAgY2xvc2UhCgogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3ID4gWHRlc3QnLCAnRTQ5NDonKQogCiAgIiBUcnkgdG8gb3ZlcndyaXRlIGEgZGlyZWN0b3J5CiAgaWYgaGFzKCd1bml4JykKICAgIGNhbGwgbWtkaXIoJ1hkaXIxJykKICAgIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZSBYZGlyMScsICdFMTc6JykKICAgIGNhbGwgZGVsZXRlKCdYZGlyMScsICdkJykKICBlbmRpZgoKICAiIFRlc3QgZm9yIDp3YWxsIGZvciBhIGJ1ZmZlciB3aXRoIG5vIG5hbWUKICBlbmV3IHwgb25seQogIGNhbGwgc2V0bGluZSgxLCBbJ0wxJ10pCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dhbGwnLCAnRTE0MTonKQogIGVuZXchCgogICIgVGVzdCBmb3Igd3JpdGluZyBhICdyZWFkb25seScgZmlsZQogIG5ldyBYZmlsZQogIHNldCByZWFkb25seQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFNDU6JykKICBjbG9zZQoKICAiIFRlc3QgZm9yIHdyaXRpbmcgdG8gYSByZWFkLW9ubHkgZmlsZQogIG5ldyBYZmlsZQogIGNhbGwgc2V0ZnBlcm0oJ1hmaWxlJywgJ3ItLXItLXItLScpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlJywgJ0U1MDU6JykKICBjYWxsIHNldGZwZXJtKCdYZmlsZScsICdydy1ydy1ydy0nKQogIGNsb3NlCgogIGNhbGwgZGVsZXRlKCdYZmlsZScpCgogIGNhbGwgd3JpdGVmaWxlKHRlc3RfbnVsbF9saXN0KCksICdYZmlsZScpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCdYZmlsZScpKQogIGNhbGwgd3JpdGVmaWxlKHRlc3RfbnVsbF9ibG9iKCksICdYZmlsZScpCiAgY2FsbCBhc3NlcnRfZmFsc2UoZmlsZXJlYWRhYmxlKCdYZmlsZScpKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbXSwgIiIpJywgJ0U0ODI6JykKCiAgIiB2ZXJ5IGxvbmcgZmlsZSBuYW1lCiAgbGV0IGxvbmdfZm5hbWUgPSByZXBlYXQoJ24nLCA1MDAwKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdleGUgIncgIiAuLiBsb25nX2ZuYW1lJywgJ0U3NTonKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCdjYWxsIHdyaXRlZmlsZShbXSwgbG9uZ19mbmFtZSknLCAnRTQ4MjonKQplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgdG8gYSBmaWxlIHdoaWNoIGlzIG1vZGlmaWVkIGFmdGVyIFZpbSByZWFkIGl0CmZ1bmMgVGVzdF93cml0ZV9maWxlX210aW1lKCkKICBDaGVja0VuZ2xpc2gKICBDaGVja1J1blZpbUluVGVybWluYWwKCiAgIiBGaXJzdCByZWFkIHRoZSBmaWxlIGludG8gYSBidWZmZXIKICBjYWxsIHdyaXRlZmlsZShbIkxpbmUxIiwgIkxpbmUyIl0sICdYZmlsZScpCiAgbGV0IG9sZF9mdGltZSA9IGdldGZ0aW1lKCdYZmlsZScpCiAgbGV0IGJ1ZiA9IFJ1blZpbUluVGVybWluYWwoJ1hmaWxlJywgI3tyb3dzIDogMTB9KQogIGNhbGwgVGVybVdhaXQoYnVmKQogIGNhbGwgdGVybV9zZW5ka2V5cyhidWYsICI6c2V0IG5vc3dhcGZpbGVcPENSPiIpCiAgY2FsbCBUZXJtV2FpdChidWYpCgogICIgTW9kaWZ5IHRoZSBmaWxlIGRpcmVjdGx5LiAgTWFrZSBzdXJlIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzCiAgIiBkaWZmZXJlbnQuIE5vdGUgdGhhdCBvbiBMaW51eC9Vbml4LCB0aGUgZmlsZSBpcyBjb25zaWRlcmVkIG1vZGlmaWVkCiAgIiBvdXRzaWRlLCBvbmx5IGlmIHRoZSBkaWZmZXJlbmNlIGlzIDIgc2Vjb25kcyBvciBtb3JlCiAgc2xlZXAgMQogIGNhbGwgd3JpdGVmaWxlKFsiTGluZTMiLCAiTGluZTQiXSwgJ1hmaWxlJykKICBsZXQgbmV3X2Z0aW1lID0gZ2V0ZnRpbWUoJ1hmaWxlJykKICB3aGlsZSBuZXdfZnRpbWUgLSBvbGRfZnRpbWUgPCAyCiAgICBzbGVlcCAxMDBtCiAgICBjYWxsIHdyaXRlZmlsZShbIkxpbmUzIiwgIkxpbmU0Il0sICdYZmlsZScpCiAgICBsZXQgbmV3X2Z0aW1lID0gZ2V0ZnRpbWUoJ1hmaWxlJykKICBlbmR3aGlsZQoKICAiIFRyeSB0byBvdmVyd3JpdGUgdGhlIGZpbGUgYW5kIGNoZWNrIGZvciB0aGUgcHJvbXB0CiAgY2FsbCB0ZXJtX3NlbmRrZXlzKGJ1ZiwgIjp3XDxDUj4iKQogIGNhbGwgVGVybVdhaXQoYnVmKQogIGNhbGwgV2FpdEZvckFzc2VydCh7LT4gYXNzZXJ0X2VxdWFsKCJXQVJOSU5HOiBUaGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHJlYWRpbmcgaXQhISEiLCB0ZXJtX2dldGxpbmUoYnVmLCA5KSl9KQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdG8gaXQgKHkvbik/IiwKICAgICAgICBcIHRlcm1fZ2V0bGluZShidWYsIDEwKSkKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAiblw8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIGFzc2VydF9lcXVhbChuZXdfZnRpbWUsIGdldGZ0aW1lKCdYZmlsZScpKQogIGNhbGwgdGVybV9zZW5ka2V5cyhidWYsICI6d1w8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIHRlcm1fc2VuZGtleXMoYnVmLCAieVw8Q1I+IikKICBjYWxsIFRlcm1XYWl0KGJ1ZikKICBjYWxsIFdhaXRGb3JBc3NlcnQoey0+IGFzc2VydF9lcXVhbCgnTGluZTInLCByZWFkZmlsZSgnWGZpbGUnKVsxXSl9KQoKICAiIGNsZWFuIHVwCiAgY2FsbCBTdG9wVmltSW5UZXJtaW5hbChidWYpCiAgY2FsbCBkZWxldGUoJ1hmaWxlJykKZW5kZnVuYwoKIiBUZXN0IGZvciBhbiBhdXRvY21kIHVubG9hZGluZyBhIGJ1ZmZlciBkdXJpbmcgYSB3cml0ZSBjb21tYW5kCmZ1bmMgVGVzdF93cml0ZV9hdXRvY21kX3VubG9hZGJ1Zl9sb2NrbWFyaygpCiAgYXVncm91cCBXcml0ZVRlc3QKICAgIGF1dG9jbWQgQnVmV3JpdGVQcmUgWGZpbGUgZW5ldyB8IHdyaXRlCiAgYXVncm91cCBFTkQKICBlIFhmaWxlCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ2xvY2ttYXJrcyB3cml0ZScsIFsnRTMyOicsICdFMjAzOiddKQogIGF1Z3JvdXAgV3JpdGVUZXN0CiAgICBhdSEKICBhdWdyb3VwIEVORAogIGF1Z3JvdXAhIFdyaXRlVGVzdAplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgYSBidWZmZXIgd2l0aCAnYWN3cml0ZScgYnV0IHdpdGhvdXQgYXV0b2NtZHMKZnVuYyBUZXN0X3dyaXRlX2Fjd3JpdGVfZXJyb3IoKQogIG5ldyBYZmlsZQogIGNhbGwgc2V0bGluZSgxLCBbJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10pCiAgc2V0IGJ1ZnR5cGU9YWN3cml0ZQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFNjc2OicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJzEsMndyaXRlIScsICdFNjc2OicpCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3cgPj4nLCAnRTY3NjonKQogIGNsb3NlIQplbmRmdW5jCgoiIFRlc3QgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgbGluZXMgZnJvbSBhbiBhdXRvY21kIHdoZW4gd3JpdGluZyBhIGJ1ZmZlcgpmdW5jIFRlc3Rfd3JpdGVfYXV0b2NtZF9hZGRfcmVtb3ZlX2xpbmVzKCkKICBuZXcgWGZpbGUKICBjYWxsIHNldGxpbmUoMSwgWydhYWEnLCAnYmJiJywgJ2NjYycsICdkZGQnXSkKCiAgIiBBdXRvY21kIGRlbGV0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGUgd2hlbiB3cml0aW5nIGEgcGFydGlhbCBmaWxlCiAgYXVncm91cCBXcml0ZVRlc3QyCiAgICBhdSEKICAgIGF1dG9jbWQgRmlsZVdyaXRlUHJlIFhmaWxlIDEsMmQKICBhdWdyb3VwIEVORAogIGNhbGwgYXNzZXJ0X2ZhaWxzKCcyLDN3IScsICdFMjA0OicpCgogICIgQXV0b2NtZCBhZGRpbmcgbGluZXMgdG8gYSBmaWxlIHdoZW4gd3JpdGluZyBhIHBhcnRpYWwgZmlsZQogIGF1Z3JvdXAgV3JpdGVUZXN0MgogICAgYXUhCiAgICBhdXRvY21kIEZpbGVXcml0ZVByZSBYZmlsZSBjYWxsIGFwcGVuZCgwLCBbJ3h4eCcsICd5eXknXSkKICBhdWdyb3VwIEVORAogICVkCiAgY2FsbCBzZXRsaW5lKDEsIFsnYWFhJywgJ2JiYicsICdjY2MnLCAnZGRkJ10pCiAgMSwydyEKICBjYWxsIGFzc2VydF9lcXVhbChbJ3h4eCcsICd5eXknLCAnYWFhJywgJ2JiYiddLCByZWFkZmlsZSgnWGZpbGUnKSkKCiAgIiBBdXRvY21kIGRlbGV0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGUgd2hlbiB3cml0aW5nIHRoZSB3aG9sZSBmaWxlCiAgYXVncm91cCBXcml0ZVRlc3QyCiAgICBhdSEKICAgIGF1dG9jbWQgQnVmV3JpdGVQcmUgWGZpbGUgMSwyZAogIGF1Z3JvdXAgRU5ECiAgJWQKICBjYWxsIHNldGxpbmUoMSwgWydhYWEnLCAnYmJiJywgJ2NjYycsICdkZGQnXSkKICB3CiAgY2FsbCBhc3NlcnRfZXF1YWwoWydjY2MnLCAnZGRkJ10sIHJlYWRmaWxlKCdYZmlsZScpKQoKICBhdWdyb3VwIFdyaXRlVGVzdDIKICAgIGF1IQogIGF1Z3JvdXAgRU5ECiAgYXVncm91cCEgV3JpdGVUZXN0MgoKICBjbG9zZSEKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQplbmRmdW5jCgoiIFRlc3QgZm9yIHdyaXRpbmcgdG8gYSByZWFkb25seSBmaWxlCmZ1bmMgVGVzdF93cml0ZV9yZWFkb25seSgpCiAgY2FsbCB3cml0ZWZpbGUoW10sICdYZmlsZScpCiAgY2FsbCBzZXRmcGVybSgnWGZpbGUnLCAici0tLS0tLS0tIikKICBlZGl0IFhmaWxlCiAgc2V0IG5vcmVhZG9ubHkgYmFja3Vwc2tpcD0KICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUnLCAnRTUwNTonKQogIGxldCBzYXZlX2NwbyA9ICZjcG8KICBzZXQgY3BvKz1XCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlIScsICdFNTA0OicpCiAgbGV0ICZjcG8gPSBzYXZlX2NwbwogIGNhbGwgc2V0bGluZSgxLCBbJ2xpbmUxJ10pCiAgd3JpdGUhCiAgY2FsbCBhc3NlcnRfZXF1YWwoWydsaW5lMSddLCByZWFkZmlsZSgnWGZpbGUnKSkKICBzZXQgYmFja3Vwc2tpcCYKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQplbmRmdW5jCgoiIFRlc3QgZm9yICdwYXRjaG1vZGUnCmZ1bmMgVGVzdF9wYXRjaG1vZGUoKQogIGNhbGwgd3JpdGVmaWxlKFsnb25lJ10sICdYZmlsZScpCiAgc2V0IHBhdGNobW9kZT0ub3JpZyBub2JhY2t1cCBiYWNrdXBza2lwPSB3cml0ZWJhY2t1cAogIG5ldyBYZmlsZQogIGNhbGwgc2V0bGluZSgxLCAndHdvJykKICAiIGZpcnN0IHdyaXRlIHNob3VsZCBjcmVhdGUgdGhlIC5vcmlnIGZpbGUKICB3cml0ZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnb25lJ10sIHJlYWRmaWxlKCdYZmlsZS5vcmlnJykpCiAgY2FsbCBzZXRsaW5lKDEsICd0aHJlZScpCiAgIiBzdWJzZXF1ZW50IHdyaXRlcyBzaG91bGQgbm90IGNyZWF0ZS9tb2RpZnkgdGhlIC5vcmlnIGZpbGUKICB3cml0ZQogIGNhbGwgYXNzZXJ0X2VxdWFsKFsnb25lJ10sIHJlYWRmaWxlKCdYZmlsZS5vcmlnJykpCiAgc2V0IHBhdGNobW9kZSYgYmFja3VwJiBiYWNrdXBza2lwJiB3cml0ZWJhY2t1cCYKICBjYWxsIGRlbGV0ZSgnWGZpbGUnKQogIGNhbGwgZGVsZXRlKCdYZmlsZS5vcmlnJykKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIHRvIGEgZmlsZSBpbiBhIHJlYWRvbmx5IGRpcmVjdG9yeQpmdW5jIFRlc3Rfd3JpdGVfcmVhZG9ubHlfZGlyKCkKICAiIE9uIE1TLVdpbmRvd3MsIG1vZGlmeWluZyBmaWxlcyBpbiBhIHJlYWQtb25seSBkaXJlY3RvcnkgaXMgYWxsb3dlZC4KICBDaGVja1VuaXgKICBjYWxsIG1rZGlyKCdYZGlyJykKICBjYWxsIHdyaXRlZmlsZShbJ29uZSddLCAnWGRpci9YZmlsZTEnKQogIGNhbGwgc2V0ZnBlcm0oJ1hkaXInLCAnci14ci0tci0tJykKICAiIHRyeSB0byBjcmVhdGUgYSBuZXcgZmlsZSBpbiB0aGUgZGlyZWN0b3J5CiAgbmV3IFhkaXIvWGZpbGUyCiAgY2FsbCBzZXRsaW5lKDEsICd0d28nKQogIGNhbGwgYXNzZXJ0X2ZhaWxzKCd3cml0ZScsICdFMjEyOicpCiAgIiB0cnkgdG8gY3JlYXRlIGEgYmFja3VwIGZpbGUgaW4gdGhlIGRpcmVjdG9yeQogIGVkaXQhIFhkaXIvWGZpbGUxCiAgc2V0IGJhY2t1cGRpcj0uL1hkaXIgYmFja3Vwc2tpcD0KICBzZXQgcGF0Y2htb2RlPS5vcmlnCiAgY2FsbCBhc3NlcnRfZmFpbHMoJ3dyaXRlJywgJ0U1MDk6JykKICBjYWxsIHNldGZwZXJtKCdYZGlyJywgJ3J3eHItLXItLScpCiAgY2FsbCBkZWxldGUoJ1hkaXInLCAncmYnKQogIHNldCBiYWNrdXBkaXImIGJhY2t1cHNraXAmIHBhdGNobW9kZSYKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIGEgZmlsZSB1c2luZyBpbnZhbGlkIGZpbGUgZW5jb2RpbmcKZnVuYyBUZXN0X3dyaXRlX2ludmFsaWRfZW5jb2RpbmcoKQogIG5ldwogIGNhbGwgc2V0bGluZSgxLCAnYWJjJykKICBjYWxsIGFzc2VydF9mYWlscygnd3JpdGUgKytlbmM9YXhieWMgWGZpbGUnLCAnRTIxMzonKQogIGNsb3NlIQplbmRmdW5jCgoiIFRlc3RzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIHdpdGggY29udmVyc2lvbiBmb3IgV2luMzIuCmZ1bmMgVGVzdF93cml0ZV9maWxlX2VuY29kaW5nKCkKICBDaGVja01TV2luZG93cwogIGxldCBzYXZlX2VuY29kaW5nID0gJmVuY29kaW5nCiAgbGV0IHNhdmVfZmlsZWVuY29kaW5ncyA9ICZmaWxlZW5jb2RpbmdzCiAgc2V0IGVuY29kaW5nJiBmaWxlZW5jb2RpbmdzJgogIGxldCB0ZXh0ID08PCB0cmltIEVORAogICAgMSB1dGYtOCB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDIgY3AxMjUxIHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQogICAgMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIHdyaXRlZmlsZSh0ZXh0LCAnWGZpbGUnKQogIGVkaXQgWGZpbGUKCiAgIiB3cml0ZSB0ZXN0czoKICAiIGNvbWJpbmUgdGhyZWUgdmFsdWVzIGZvciAnZW5jb2RpbmcnIHdpdGggdGhyZWUgdmFsdWVzIGZvciAnZmlsZWVuY29kaW5nJwogICIgYWxzbyB3cml0ZSBmaWxlcyBmb3IgcmVhZCB0ZXN0cwogIGNhbGwgY3Vyc29yKDEsIDEpCiAgc2V0IGVuY29kaW5nPXV0Zi04CiAgLnchICsrZW5jPXV0Zi04IFh0ZXN0CiAgLncgKytlbmM9Y3AxMjUxID4+IFh0ZXN0CiAgLncgKytlbmM9Y3A4NjYgPj4gWHRlc3QKICAudyEgKytlbmM9dXRmLTggWHV0ZjgKICBsZXQgZXhwZWN0ZWQgPTw8IHRyaW0gRU5ECiAgICAxIHV0Zi04IHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMSB1dGYtOCB0ZXh0OiDE6/8gVmltIHZlcnNpb24gNi4yLiAgz+7x6+Xk7eXlIOjn7OXt5e3o5TogMTk3MCBKYW4gMDEKICAgIDEgdXRmLTggdGV4dDoghKvvIFZpbSB2ZXJzaW9uIDYuMi4gII+u4aulpK2lpSCop6ylraWtqKU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYdGVzdCcpKQoKICBjYWxsIGN1cnNvcigyLCAxKQogIHNldCBlbmNvZGluZz1jcDEyNTEKICAudyEgKytlbmM9dXRmLTggWHRlc3QKICAudyArK2VuYz1jcDEyNTEgPj4gWHRlc3QKICAudyArK2VuYz1jcDg2NiA+PiBYdGVzdAogIC53ISArK2VuYz1jcDEyNTEgWGNwMTI1MQogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDIgY3AxMjUxIHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQogICAgMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAyIGNwMTI1MSB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIGFzc2VydF9lcXVhbChleHBlY3RlZCwgcmVhZGZpbGUoJ1h0ZXN0JykpCgogIGNhbGwgY3Vyc29yKDMsIDEpCiAgc2V0IGVuY29kaW5nPWNwODY2CiAgLnchICsrZW5jPXV0Zi04IFh0ZXN0CiAgLncgKytlbmM9Y3AxMjUxID4+IFh0ZXN0CiAgLncgKytlbmM9Y3A4NjYgPj4gWHRlc3QKICAudyEgKytlbmM9Y3A4NjYgWGNwODY2CiAgbGV0IGV4cGVjdGVkID08PCB0cmltIEVORAogICAgMyBjcDg2NiB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDMgY3A4NjYgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAzIGNwODY2IHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogIEVORAogIGNhbGwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLCByZWFkZmlsZSgnWHRlc3QnKSkKCiAgIiByZWFkIHRocmVlICdmaWxlZW5jb2RpbmcncyB3aXRoIHV0Zi04ICdlbmNvZGluZycKICBzZXQgZW5jb2Rpbmc9dXRmLTggZmVuY3M9dXRmLTgsY3AxMjUxCiAgZSBYdXRmOAogIC53ISArK2VuYz11dGYtOCBYdGVzdAogIGUgWGNwMTI1MQogIC53ICsrZW5jPXV0Zi04ID4+IFh0ZXN0CiAgc2V0IGZlbmNzPXV0Zi04LGNwODY2CiAgZSBYY3A4NjYKICAudyArK2VuYz11dGYtOCA+PiBYdGVzdAogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDEgdXRmLTggdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgICAyIGNwMTI1MSB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKICAgIDMgY3A4NjYgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYdGVzdCcpKQoKICAiIHJlYWQgdGhyZWUgJ2ZpbGVlbmNvZGluZydzIHdpdGggY3AxMjUxICdlbmNvZGluZycKICBzZXQgZW5jb2Rpbmc9dXRmLTggZmVuY3M9dXRmLTgsY3AxMjUxCiAgZSBYdXRmOAogIC53ISArK2VuYz1jcDEyNTEgWHRlc3QKICBlIFhjcDEyNTEKICAudyArK2VuYz1jcDEyNTEgPj4gWHRlc3QKICBzZXQgZmVuY3M9dXRmLTgsY3A4NjYKICBlIFhjcDg2NgogIC53ICsrZW5jPWNwMTI1MSA+PiBYdGVzdAogIGxldCBleHBlY3RlZCA9PDwgdHJpbSBFTkQKICAgIDEgdXRmLTggdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgICAyIGNwMTI1MSB0ZXh0OiDE6/8gVmltIHZlcnNpb24gNi4yLiAgz+7x6+Xk7eXlIOjn7OXt5e3o5TogMTk3MCBKYW4gMDEKICAgIDMgY3A4NjYgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiAgRU5ECiAgY2FsbCBhc3NlcnRfZXF1YWwoZXhwZWN0ZWQsIHJlYWRmaWxlKCdYdGVzdCcpKQoKICAiIHJlYWQgdGhyZWUgJ2ZpbGVlbmNvZGluZydzIHdpdGggY3A4NjYgJ2VuY29kaW5nJwogIHNldCBlbmNvZGluZz1jcDg2NiBmZW5jcz11dGYtOCxjcDEyNTEKICBlIFh1dGY4CiAgLnchICsrZW5jPWNwODY2IFh0ZXN0CiAgZSBYY3AxMjUxCiAgLncgKytlbmM9Y3A4NjYgPj4gWHRlc3QKICBzZXQgZmVuY3M9dXRmLTgsY3A4NjYKICBlIFhjcDg2NgogIC53ICsrZW5jPWNwODY2ID4+IFh0ZXN0CiAgbGV0IGV4cGVjdGVkID08PCB0cmltIEVORAogICAgMSB1dGYtOCB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICAgIDIgY3AxMjUxIHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQogICAgMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKICBFTkQKICBjYWxsIGFzc2VydF9lcXVhbChleHBlY3RlZCwgcmVhZGZpbGUoJ1h0ZXN0JykpCgogIGNhbGwgZGVsZXRlKCdYZmlsZScpCiAgY2FsbCBkZWxldGUoJ1h0ZXN0JykKICBjYWxsIGRlbGV0ZSgnWHV0ZjgnKQogIGNhbGwgZGVsZXRlKCdYY3AxMjUxJykKICBjYWxsIGRlbGV0ZSgnWGNwODY2JykKICBsZXQgJmVuY29kaW5nID0gc2F2ZV9lbmNvZGluZwogIGxldCAmZmlsZWVuY29kaW5ncyA9IHNhdmVfZmlsZWVuY29kaW5ncwogICVidyEKZW5kZnVuYwoKIiBUZXN0IGZvciB3cml0aW5nIGFuZCByZWFkaW5nIGEgZmlsZSBzdGFydGluZyB3aXRoIGEgQk9NLgoiIEJ5dGUgT3JkZXIgTWFyayAoQk9NKSBjaGFyYWN0ZXIgZm9yIHZhcmlvdXMgZW5jb2RpbmdzIGlzIGJlbG93OgoiICAgICBVVEYtOCAgICAgIDogRUYgQkIgQkYKIiAgICAgVVRGLTE2IChCRSk6IEZFIEZGCiIgICAgIFVURi0xNiAoTEUpOiBGRiBGRQoiICAgICBVVEYtMzIgKEJFKTogMDAgMDAgRkUgRkYKIiAgICAgVVRGLTMyIChMRSk6IEZGIEZFIDAwIDAwCmZ1bmMgVGVzdF9yZWFkd3JpdGVfZmlsZV93aXRoX2JvbSgpCiAgbGV0IHV0ZjhfYm9tID0gIlx4RUZceEJCXHhCRiIKICBsZXQgdXRmMTZiZV9ib20gPSAiXHhGRVx4RkYiCiAgbGV0IHV0ZjE2bGVfYm9tID0gIlx4RkZceEZFIgogIGxldCB1dGYzMmJlX2JvbSA9ICJcblxuXHhGRVx4RkYiCiAgbGV0IHV0ZjMybGVfYm9tID0gIlx4RkZceEZFXG5cbiIKICBsZXQgc2F2ZV9maWxlZW5jb2RpbmcgPSAmZmlsZWVuY29kaW5nCiAgc2V0IGNwb3B0aW9ucys9UwoKICAiIENoZWNrIHRoYXQgZWRpdGluZyBhIGxhdGluMSBmaWxlIGRvZXNuJ3Qgc2VlIGEgQk9NCiAgY2FsbCB3cml0ZWZpbGUoWyJceEZFXHhGRWxhdGluLTEiXSwgJ1h0ZXN0MScpCiAgZWRpdCBYdGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgnbGF0aW4xJywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgwLCAmYm9tYikKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSBYZmlsZTIKICBjYWxsIGFzc2VydF9lcXVhbChbIlx4RkVceEZFbGF0aW4tMSIsICcnXSwgcmVhZGZpbGUoJ1hmaWxlMicsICdiJykpCiAgc2V0IGJvbWIgZmVuYz1sYXRpbjEKICB3cml0ZSBYdGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbIlx4RkVceEZFbGF0aW4tMSIsICcnXSwgcmVhZGZpbGUoJ1h0ZXN0MycsICdiJykpCiAgc2V0IGJvbWImCgogICIgQ2hlY2sgdXRmLTggQk9NCiAgJWJ3IQogIGNhbGwgd3JpdGVmaWxlKFt1dGY4X2JvbSAuLiAidXRmLTgiXSwgJ1h0ZXN0MScpCiAgZWRpdCEgWHRlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3V0Zi04JywgJmZpbGVlbmNvZGluZykKICBjYWxsIGFzc2VydF9lcXVhbCgxLCAmYm9tYikKICBjYWxsIGFzc2VydF9lcXVhbCgndXRmLTgnLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYZmlsZTIKICBjYWxsIGFzc2VydF9lcXVhbChbJ3V0Zi04JywgJyddLCByZWFkZmlsZSgnWGZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11dGYtOAogIHchIFh0ZXN0MwogIGNhbGwgYXNzZXJ0X2VxdWFsKFt1dGY4X2JvbSAuLiAidXRmLTgiLCAnJ10sIHJlYWRmaWxlKCdYdGVzdDMnLCAnYicpKQoKICAiIENoZWNrIHV0Zi04IHdpdGggYW4gZXJyb3IgKHdpbGwgZmFsbCBiYWNrIHRvIGxhdGluLTEpCiAgJWJ3IQogIGNhbGwgd3JpdGVmaWxlKFt1dGY4X2JvbSAuLiAidXRmLThceDgwZXJyIl0sICdYdGVzdDEnKQogIGVkaXQhIFh0ZXN0MQogIGNhbGwgYXNzZXJ0X2VxdWFsKCdsYXRpbjEnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDAsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCJceEMzXHhBRlx4QzJceEJCXHhDMlx4QkZ1dGYtOFx4QzJceDgwZXJyIiwgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWGZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjhfYm9tIC4uICJ1dGYtOFx4ODBlcnIiLCAnJ10sIHJlYWRmaWxlKCdYZmlsZTInLCAnYicpKQogIHNldCBmZW5jPXV0Zi04CiAgdyEgWHRlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJceEMzXHhBRlx4QzJceEJCXHhDMlx4QkZ1dGYtOFx4QzJceDgwZXJyIiwgJyddLAogICAgICAgIFwgcmVhZGZpbGUoJ1h0ZXN0MycsICdiJykpCgogICIgQ2hlY2sgdWNzLTIgQk9NCiAgJWJ3IQogIGNhbGwgd3JpdGVmaWxlKFt1dGYxNmJlX2JvbSAuLiAiXG51XG5jXG5zXG4tXG4yXG4iXSwgJ1h0ZXN0MScpCiAgZWRpdCEgWHRlc3QxCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3V0Zi0xNicsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy0yJywgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWGZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJ1Y3MtMiIsICcnXSwgcmVhZGZpbGUoJ1hmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dWNzLTIKICB3ISBYdGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmMTZiZV9ib20gLi4gIlxudVxuY1xuc1xuLVxuMlxuIiwgJyddLAogICAgICAgIFwgcmVhZGZpbGUoJ1h0ZXN0MycsICdiJykpCgogICIgQ2hlY2sgdWNzLTJsZSBCT00KICAlYnchCiAgY2FsbCB3cml0ZWZpbGUoW3V0ZjE2bGVfYm9tIC4uICJ1XG5jXG5zXG4tXG4yXG5sXG5lXG4iXSwgJ1h0ZXN0MScpCiAgIiBOZWVkIHRvIGFkZCBhIE5VTCBieXRlIGFmdGVyIHRoZSBOTCBieXRlCiAgY2FsbCB3cml0ZWZpbGUoMHowMCwgJ1h0ZXN0MScsICdhJykKICBlZGl0ISBYdGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgndXRmLTE2bGUnLCAmZmlsZWVuY29kaW5nKQogIGNhbGwgYXNzZXJ0X2VxdWFsKDEsICZib21iKQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1Y3MtMmxlJywgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWGZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJ1Y3MtMmxlIiwgJyddLCByZWFkZmlsZSgnWGZpbGUyJywgJ2InKSkKICBzZXQgZmVuYz11Y3MtMmxlCiAgdyEgWHRlc3QzCiAgY2FsbCBhc3NlcnRfZXF1YWwoW3V0ZjE2bGVfYm9tIC4uICJ1XG5jXG5zXG4tXG4yXG5sXG5lXG4iLCAiXG4iXSwKICAgICAgICBcIHJlYWRmaWxlKCdYdGVzdDMnLCAnYicpKQoKICAiIENoZWNrIHVjcy00IEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmMzJiZV9ib20gLi4gIlxuXG5cbnVcblxuXG5jXG5cblxuc1xuXG5cbi1cblxuXG40XG5cblxuIl0sICdYdGVzdDEnKQogIGVkaXQhIFh0ZXN0MQogIGNhbGwgYXNzZXJ0X2VxdWFsKCd1Y3MtNCcsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy00JywgZ2V0bGluZSgxKSkKICBzZXQgZmVuYz1sYXRpbjEKICB3cml0ZSEgWGZpbGUyCiAgY2FsbCBhc3NlcnRfZXF1YWwoWyJ1Y3MtNCIsICcnXSwgcmVhZGZpbGUoJ1hmaWxlMicsICdiJykpCiAgc2V0IGZlbmM9dWNzLTQKICB3ISBYdGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmMzJiZV9ib20gLi4gIlxuXG5cbnVcblxuXG5jXG5cblxuc1xuXG5cbi1cblxuXG40XG5cblxuIiwgJyddLCByZWFkZmlsZSgnWHRlc3QzJywgJ2InKSkKCiAgIiBDaGVjayB1Y3MtNGxlIEJPTQogICVidyEKICBjYWxsIHdyaXRlZmlsZShbdXRmMzJsZV9ib20gLi4gInVcblxuXG5jXG5cblxuc1xuXG5cbi1cblxuXG40XG5cblxubFxuXG5cbmVcblxuXG4iXSwgJ1h0ZXN0MScpCiAgIiBOZWVkIHRvIGFkZCB0aHJlZSBOVUwgYnl0ZXMgYWZ0ZXIgdGhlIE5MIGJ5dGUKICBjYWxsIHdyaXRlZmlsZSgwejAwMDAwMCwgJ1h0ZXN0MScsICdhJykKICBlZGl0ISBYdGVzdDEKICBjYWxsIGFzc2VydF9lcXVhbCgndWNzLTRsZScsICZmaWxlZW5jb2RpbmcpCiAgY2FsbCBhc3NlcnRfZXF1YWwoMSwgJmJvbWIpCiAgY2FsbCBhc3NlcnRfZXF1YWwoJ3Vjcy00bGUnLCBnZXRsaW5lKDEpKQogIHNldCBmZW5jPWxhdGluMQogIHdyaXRlISBYZmlsZTIKICBjYWxsIGFzc2VydF9lcXVhbChbInVjcy00bGUiLCAnJ10sIHJlYWRmaWxlKCdYZmlsZTInLCAnYicpKQogIHNldCBmZW5jPXVjcy00bGUKICB3ISBYdGVzdDMKICBjYWxsIGFzc2VydF9lcXVhbChbdXRmMzJsZV9ib20gLi4gInVcblxuXG5jXG5cblxuc1xuXG5cbi1cblxuXG40XG5cblxubFxuXG5cbmVcblxuXG4iLCAiXG5cblxuIl0sIHJlYWRmaWxlKCdYdGVzdDMnLCAnYicpKQoKICBzZXQgY3BvcHRpb25zLT1TCiAgbGV0ICZmaWxlZW5jb2RpbmcgPSBzYXZlX2ZpbGVlbmNvZGluZwogIGNhbGwgZGVsZXRlKCdYdGVzdDEnKQogIGNhbGwgZGVsZXRlKCdYZmlsZTInKQogIGNhbGwgZGVsZXRlKCdYdGVzdDMnKQogICVidyEKZW5kZnVuYwoKIiB2aW06IHNoaWZ0d2lkdGg9MiBzdHM9MiBleHBhbmR0YWIK