IyEvYmluL3NoCiMKIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgojCgp0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc2hvcnRsb2cKJwoKLiAuL3Rlc3QtbGliLnNoCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwoJZWNobyAxID5hMSAmJgoJZ2l0IGFkZCBhMSAmJgoJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgoJY29tbWl0PSQocHJpbnRmICIlc1xuIiAiVGVzdCIgIiIgfCBnaXQgY29tbWl0LXRyZWUgIiR0cmVlIikgJiYKCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiICYmCgoJZWNobyAyID5hMSAmJgoJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkiIGExICYmCgoJIyB0ZXN0IGlmIHRoZSB3cmFwcGluZyBpcyBzdGlsbCB2YWxpZAoJIyB3aGVuIHJlcGxhY2luZyBhbGwgaXMgYnkgdHJlYmxlIGNsZWZzLgoJZWNobyAzID5hMSAmJgoJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkKAoJCWVjaG8gIlRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseSIgfAoJCXNlZCAicy9pLzEyMzQvZyIgfAoJCXRyIDEyMzQgIlwzNjBcMjM1XDIwNFwyMzYiKSIgYTEgJiYKCgkjIG5vdyBmc2NrIHVwIHRoZSB1dGY4CglnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2Rpbmcgbm9uLXV0Zi04ICYmCgllY2hvIDQgPmExICYmCglnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiQoCgkJZWNobyAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiB8CgkJc2VkICJzL2kvMTIzNC9nIiB8CgkJdHIgMTIzNCAiXDM3MFwyMzVcMjA0XDIzNiIpIiBhMSAmJgoKCWVjaG8gNSA+YTEgJiYKCWdpdCBjb21taXQgLS1xdWlldCAtbSAiYQkJCQkJCQkJMTIJMzQJNTYJNzgiIGExICYmCgoJZWNobyA2ID5hMSAmJgoJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJDb21taXQgYnkgc29tZW9uZSBlbHNlIiBcCgkJLS1hdXRob3I9IlNvbWVvbmUgZWxzZSA8bm90IW1lPiIgYTEgJiYKCgljYXQgPmV4cGVjdC50ZW1wbGF0ZSA8PC1cRU9GCglBIFUgVGhvciAoNSk6CgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgkgICAgICBTVUJKRUNUCgoJU29tZW9uZSBlbHNlICgxKToKCSAgICAgIFNVQkpFQ1QKCglFT0YKJwoKZnV6eigpIHsKCWZpbGU9JDEgJiYKCXNlZCAiCgkJCXMvJF94NDAvT0JKRUNUX05BTUUvZwoJCQlzLyRfeDA1L09CSklEL2cKCQkJcy9eIFx7Nlx9W0NUYV0uKi8gICAgICBTVUJKRUNUL2cKCQkJcy9eIFx7OFx9W14gXS4qLyAgICAgICAgQ09OVElOVUFUSU9OL2cKCQkiIDwiJGZpbGUiID4iJGZpbGUuZnV6enkiICYmCglzZWQgIi9DT05USU5VQVRJT04vIGQiIDwiJGZpbGUuZnV6enkiCn0KCnRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCcgJwoJZ2l0IHNob3J0bG9nIEhFQUQgPmxvZyAmJgoJZnV6eiBsb2cgPmxvZy5wcmVkaWN0YWJsZSAmJgoJdGVzdF9jbXAgZXhwZWN0LnRlbXBsYXRlIGxvZy5wcmVkaWN0YWJsZQonCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgZm9ybWF0JyAnCglzZWQgcy9TVUJKRUNUL09CSkVDVF9OQU1FLyBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgoJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlSCIgSEVBRCA+bG9nICYmCglmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCgl0ZXN0X2NtcCBleHBlY3QgbG9nLnByZWRpY3RhYmxlCicKCnRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJicmV2JyAnCglzZWQgcy9TVUJKRUNUL09CSklELyBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgoJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlaCIgLS1hYmJyZXY9NSBIRUFEID5sb2cgJiYKCWZ1enogbG9nID5sb2cucHJlZGljdGFibGUgJiYKCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKJwoKdGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IGZyb20gdXNlci1kZWZpbmVkIGZvcm1hdCBpcyByZS13cmFwcGVkJyAnCglzZWQgInMvU1VCSkVDVC90d28gbGluZXMvIiBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgoJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSJ0d28lbmxpbmVzIiBIRUFEID5sb2cgJiYKCWZ1enogbG9nID5sb2cucHJlZGljdGFibGUgJiYKCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKJwoKdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3Nob3J0bG9nIHdyYXBwaW5nJyAnCgljYXQgPmV4cGVjdCA8PFxFT0YgJiYKQSBVIFRob3IgKDUpOgogICAgICBUZXN0CiAgICAgIFRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZgogICAgICAgICBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseQogICAgICBUaPCdhJ5zIPCdhJ5zIGEgdmVyeSwgdmVyeSBsb25nIGbwnYSecnN0IGzwnYSebmUgZm9yIHRoZSBjb21t8J2EnnQgbWVzc2FnZSB0byBzZWUg8J2EnmYKICAgICAgICAg8J2EnnQg8J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKICAgICAgVGj4nYSecyD4nYSecyBhIHZlcnksIHZlcnkgbG9uZyBm+J2EnnJzdCBs+J2Enm5lIGZvciB0aGUgY29tbfidhJ50CiAgICAgICAgIG1lc3NhZ2UgdG8gc2VlIPidhJ5mIPidhJ50IPidhJ5zIHdyYXBwZWQgY29ycmVjdGx5CiAgICAgIGEJCQkJCQkJCTEyCTM0CiAgICAgICAgIDU2CTc4CgpTb21lb25lIGVsc2UgKDEpOgogICAgICBDb21taXQgYnkgc29tZW9uZSBlbHNlCgpFT0YKCWdpdCBzaG9ydGxvZyAtdyBIRUFEID5vdXQgJiYKCXRlc3RfY21wIGV4cGVjdCBvdXQKJwoKdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3Nob3J0bG9nIGZyb20gbm9uLWdpdCBkaXJlY3RvcnknICcKCWdpdCBsb2cgLS1uby1leHBhbmQtdGFicyBIRUFEID5sb2cgJiYKCUdJVF9ESVI9bm9uLWV4aXN0aW5nIGdpdCBzaG9ydGxvZyAtdyA8bG9nID5vdXQgJiYKCXRlc3RfY21wIGV4cGVjdCBvdXQKJwoKdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3Nob3J0bG9nIGNhbiByZWFkIC0tZm9ybWF0PXJhdyBvdXRwdXQnICcKCWdpdCBsb2cgLS1mb3JtYXQ9cmF3IEhFQUQgPmxvZyAmJgoJR0lUX0RJUj1ub24tZXhpc3RpbmcgZ2l0IHNob3J0bG9nIC13IDxsb2cgPm91dCAmJgoJdGVzdF9jbXAgZXhwZWN0IG91dAonCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBzaG91bGQgYWRkIG5ld2xpbmUgd2hlbiBpbnB1dCBsaW5lIG1hdGNoZXMgd3JhcGxlbicgJwoJY2F0ID5leHBlY3QgPDxcRU9GICYmCkEgVSBUaG9yICgyKToKICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiOiBiYmJiYmJiYiBiYmIgYmJiYiBiYmJiYmJiIGJiIGJiYmIgYmJiIGJiYmJiIGJiYmJiYgogICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhOiBhYWFhYWEgYWFhYWFhYWFhYSBhYWFhIGFhYWFhYWFhIGFhIGFhYWEgYWEgYWFhCgpFT0YKCWdpdCBzaG9ydGxvZyAtdyA+b3V0IDw8XEVPRiAmJgpjb21taXQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQpBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CkRhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKCiAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhOiBhYWFhYWEgYWFhYWFhYWFhYSBhYWFhIGFhYWFhYWFhIGFhIGFhYWEgYWEgYWFhCgpjb21taXQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgpBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CkRhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKCiAgICBiYmJiYmJiYmJiYmJiYmJiYmI6IGJiYmJiYmJiIGJiYiBiYmJiIGJiYmJiYmIgYmIgYmJiYiBiYmIgYmJiYmIgYmJiYmJiCgpFT0YKCXRlc3RfY21wIGV4cGVjdCBvdXQKJwoKaWNvbnZmcm9tdXRmOHRvaXNvODg1OTEoKSB7CglwcmludGYgIiVzIiAiJCoiIHwgaWNvbnYgLWYgVVRGLTggLXQgSVNPODg1OS0xCn0KCkRTQ0hPPSJKw7Zow6RubsOrcyBcIkRzY2jDtlwiIFNjaGluZMOrbGluIgpEU0NIT0U9IiREU0NITyA8Sm9oYW5uZXMuU2NoaW5kZWxpbkBnbXguZGU+IgpNU0cxPSJzZXQgYTEgdG8gMiBhbmQgc29tZSBub24tQVNDSUkgY2hhcnM6IMOEw5/DuCIKTVNHMj0ic2V0IGExIHRvIDMgYW5kIHNvbWUgbm9uLUFTQ0lJIGNoYXJzOiDDocOmw68iCmNhdCA+IGV4cGVjdCA8PCBFT0YKJERTQ0hPICgyKToKICAgICAgJE1TRzEKICAgICAgJE1TRzIKCkVPRgoKdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3Nob3J0bG9nIGVuY29kaW5nJyAnCglnaXQgcmVzZXQgLS1oYXJkICIkY29tbWl0IiAmJgoJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKCWVjaG8gMiA+IGExICYmCglnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0cxIiAtLWF1dGhvcj0iJERTQ0hPRSIgYTEgJiYKCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAiSVNPODg1OS0xIiAmJgoJZWNobyAzID4gYTEgJiYKCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJE1TRzIiKSIgXAoJCS0tYXV0aG9yPSIkKGljb252ZnJvbXV0Zjh0b2lzbzg4NTkxICIkRFNDSE9FIikiIGExICYmCglnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRlbmNvZGluZyAmJgoJZ2l0IHNob3J0bG9nIEhFQUR+Mi4uID4gb3V0ICYmCnRlc3RfY21wIGV4cGVjdCBvdXQnCgp0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyB3aXRoIHJldmlzaW9uIHBzZXVkbyBvcHRpb25zJyAnCglnaXQgc2hvcnRsb2cgLS1hbGwgJiYKCWdpdCBzaG9ydGxvZyAtLWJyYW5jaGVzICYmCglnaXQgc2hvcnRsb2cgLS1leGNsdWRlPXJlZnMvaGVhZHMvbSogLS1hbGwKJwoKdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgd2l0aCAtLW91dHB1dD08ZmlsZT4nICcKCWdpdCBzaG9ydGxvZyAtLW91dHB1dD1zaG9ydGxvZyAtMSBtYXN0ZXIgPm91dHB1dCAmJgoJdGVzdCAhIC1zIG91dHB1dCAmJgoJdGVzdF9saW5lX2NvdW50ID0gMyBzaG9ydGxvZwonCgp0ZXN0X2RvbmUK