IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgSmF2YVNjcmlwdCBsYW5ndWFnZS4KIyBBc3N1bWVzIGFuIGZyX0ZSIGxvY2FsZSBpcyBpbnN0YWxsZWQuCiMgQXNzdW1lcyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQ6IGdqcy4KCmNhdCA8PFxFT0YgPiBwcm9nLmpzCmNvbnN0IEZvcm1hdCA9IGltcG9ydHMuZm9ybWF0Owpjb25zdCBHZXR0ZXh0ID0gaW1wb3J0cy5nZXR0ZXh0OwoKU3RyaW5nLnByb3RvdHlwZS5mb3JtYXQgPSBGb3JtYXQuZm9ybWF0Owpjb25zdCBfID0gR2V0dGV4dC5nZXR0ZXh0OwoKR2V0dGV4dC50ZXh0ZG9tYWluICgicHJvZyIpOwpHZXR0ZXh0LmJpbmR0ZXh0ZG9tYWluICgicHJvZyIsICIuIik7CnByaW50KF8oIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIpKTsKcHJpbnQoXygiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIikuZm9ybWF0KCJGRiIsICJFVVIiKSk7CkVPRgoKOiAke1hHRVRURVhUPXhnZXR0ZXh0fQoke1hHRVRURVhUfSAtbyBwcm9nLnRtcCAtLW9taXQtaGVhZGVyIC0tbm8tbG9jYXRpb24gcHJvZy5qcyB8fCBFeGl0IDEKTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxFT0YgPiBwcm9nLm9rCm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiIgoKIywgamF2YXNjcmlwdC1mb3JtYXQKbXNnaWQgIiVzIGlzIHJlcGxhY2VkIGJ5ICVzLiIKbXNnc3RyICIiCkVPRgoKOiAke0RJRkY9ZGlmZn0KJHtESUZGfSBwcm9nLm9rIHByb2cucG90IHx8IEV4aXQgMQoKY2F0IDw8XEVPRiA+IGZyLnBvCm1zZ2lkICIiCm1zZ3N0ciAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKCm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLiIKCiMgUmV2ZXJzZSB0aGUgYXJndW1lbnRzLgojLCBqYXZhc2NyaXB0LWZvcm1hdAptc2dpZCAiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIgptc2dzdHIgIiUyJHMgcmVtcGxhY2UgJTEkcy4iCkVPRgoKOiAke01TR01FUkdFPW1zZ21lcmdlfQoke01TR01FUkdFfSAtcSAtbyBmci5wby50bXAgZnIucG8gcHJvZy5wb3QgfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBmci5wby50bXAgPiBmci5wby5uZXcgfHwgRXhpdCAxCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IGZyLnBvIGZyLnBvLm5ldyB8fCBFeGl0IDEKCnRlc3QgLWQgZnIgfHwgbWtkaXIgZnIKdGVzdCAtZCBmci9MQ19NRVNTQUdFUyB8fCBta2RpciBmci9MQ19NRVNTQUdFUwoKOiAke01TR0ZNVD1tc2dmbXR9CiR7TVNHRk1UfSAtbyBmci9MQ19NRVNTQUdFUy9wcm9nLm1vIGZyLnBvCgojIFRlc3QgZm9yIHByZXNlbmNlIG9mIGdqcy4KKGdqcyAtaCkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCBcCiAgfHwgeyBlY2hvICJTa2lwcGluZyB0ZXN0OiBnanMgbm90IGZvdW5kIjsgRXhpdCA3NzsgfQooZ2pzIC1jIGltcG9ydHMuZ2V0dGV4dCkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCBcCiAgfHwgeyBlY2hvICJTa2lwcGluZyB0ZXN0OiBnanMgZ2V0dGV4dCBtb2R1bGUgbm90IGZvdW5kIjsgRXhpdCA3NzsgfQooZ2pzIC1jIGltcG9ydHMuZm9ybWF0KSA+L2Rldi9udWxsIDI+L2Rldi9udWxsIFwKICB8fCB7IGVjaG8gIlNraXBwaW5nIHRlc3Q6IGdqcyBmb3JtYXQgbW9kdWxlIG5vdCBmb3VuZCI7IEV4aXQgNzc7IH0KIyBUZXN0IGZvciBwcmVzZW5jZSBvZiBnanMgdmVyc2lvbiAxLjQwIG9yIG5ld2VyLgooZ2pzIC1jICdwcmludChpbXBvcnRzLmZvcm1hdC52cHJpbnRmKCIlMyRzJTIkcyUxJHMiLCBbIngiLCJ5IiwieiJdKSknKSAyPi9kZXYvbnVsbCB8IGdyZXAgenl4ID4vZGV2L251bGwgXAogIHx8IHsgZWNobyAiU2tpcHBpbmcgdGVzdDogZ2pzIHZlcnNpb24gaXMgb2xkZXIgdGhhbiAxLjQwIjsgRXhpdCA3NzsgfQoKIyBUZXN0IHdoaWNoIG9mIHRoZSBmcl9GUiBsb2NhbGVzIGFyZSBpbnN0YWxsZWQuCjogJHtMT0NBTEVfRlI9ZnJfRlJ9CjogJHtMT0NBTEVfRlJfVVRGOD1mcl9GUi5VVEYtOH0KaWYgdGVzdCAkTE9DQUxFX0ZSICE9IG5vbmU7IHRoZW4KICBMQ19BTEw9JExPQ0FMRV9GUiAuLi90ZXN0bG9jYWxlCiAgY2FzZSAkPyBpbgogICAgMCkgOzsKICAgIDc3KSBMT0NBTEVfRlI9bm9uZTs7CiAgICAqKSBFeGl0IDE7OwogIGVzYWMKZmkKaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbgogIExDX0FMTD0kTE9DQUxFX0ZSX1VURjggLi4vdGVzdGxvY2FsZQogIGNhc2UgJD8gaW4KICAgIDApIDs7CiAgICA3NykgTE9DQUxFX0ZSX1VURjg9bm9uZTs7CiAgICAqKSBFeGl0IDE7OwogIGVzYWMKZmkKaWYgdGVzdCAkTE9DQUxFX0ZSID0gbm9uZSAmJiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCA9IG5vbmU7IHRoZW4KICBpZiB0ZXN0IC1mIC91c3IvYmluL2xvY2FsZWRlZjsgdGhlbgogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gZnJlbmNoIGxvY2FsZSBpcyBpbnN0YWxsZWQiCiAgZWxzZQogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gZnJlbmNoIGxvY2FsZSBpcyBzdXBwb3J0ZWQiCiAgZmkKICBFeGl0IDc3CmZpCgo6ICR7RElGRj1kaWZmfQpjYXQgPDxcRU9GID4gcHJvZy5vawqrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uCkVVUiByZW1wbGFjZSBGRi4KRU9GCmNhdCA8PFxFT0YgPiBwcm9nLm9rdQrCq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXTCuywgZGl0IGxlIGdhcsOnb24uCkVVUiByZW1wbGFjZSBGRi4KRU9GCgo6ICR7TE9DQUxFX0ZSPWZyX0ZSfQo6ICR7TE9DQUxFX0ZSX1VURjg9ZnJfRlIuVVRGLTh9CmlmIHRlc3QgJExPQ0FMRV9GUiAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlIKICBMQU5HVUFHRT0gTENfQUxMPSRMT0NBTEVfRlIgZ2pzIHByb2cuanMgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IHByb2cub2sgcHJvZy5vdXQgfHwgRXhpdCAxCmZpCmlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUl9VVEY4CiAgTEFOR1VBR0U9IExDX0FMTD0kTE9DQUxFX0ZSX1VURjggZ2pzIHByb2cuanMgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IC11IHByb2cub2t1IHByb2cub3V0IHx8IEV4aXQgMQpmaQoKRXhpdCAwCg==