Li4gTWFjcm9zL0NvbmZpZ3VyYXRpb24vL0JPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgfDIwCgpCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgI2lmICFkZWZpbmVkKEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkpCiAgICAjICAgZGVmaW5lIEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgXFwKICAgICAgICAgICAgfGlkaWN8IFxcCiAgICAvXCpcKi8KICAgICNlbmRpZgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpgYEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFlgYCBpcyBhbiBvdmVycmlkYWJsZSBjb25maWd1cmF0aW9uIG1hY3JvIApyZWd1bGF0aW5nIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBhcml0eSBvZiBgbWV0YWZ1bmN0aW9uc2BfXyBhbmQgCmBtZXRhZnVuY3Rpb24gY2xhc3Nlc2BfXy4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgCmxpYnJhcnksIGBgQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWWBgIGhhcyBhIGRlZmF1bHQgdmFsdWUgb2YgNS4gVG8gCm92ZXJyaWRlIHRoZSBkZWZhdWx0IGxpbWl0LCBkZWZpbmUgYGBCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZYGAgdG8KdGhlIGRlc2lyZWQgbWF4aW11bSBhcml0eSBiZWZvcmUgaW5jbHVkaW5nIGFueSBsaWJyYXJ5IGhlYWRlci4gCnxwcmVwcm9jZXNzZWQgaGVhZGVycyBkaXNjbGFpbWVyfAoKX18gYE1ldGFmdW5jdGlvbmBfCl9fIGBNZXRhZnVuY3Rpb24gQ2xhc3NgXwoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICNkZWZpbmUgQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUwogICAgI2RlZmluZSBCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZIDIKICAgIGBgI2BgXCBpbmNsdWRlIDxib29zdC9tcGwvYXBwbHkuaHBwPgogICAgCiAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6Om1wbDsKCiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4gc3RydWN0IHNlY29uZAogICAgewogICAgICAgIHR5cGVkZWYgVDIgdHlwZTsKICAgIH07CgogICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMgPiBzdHJ1Y3QgdGhpcmQKICAgIHsKICAgICAgICB0eXBlZGVmIFQzIHR5cGU7CiAgICB9OwoKICAgIHR5cGVkZWYgYXBwbHk8IHNlY29uZDxfMSxfMl8+LGludCxsb25nID46OnR5cGUgcjE7CiAgICAvLyB0eXBlZGVmIGFwcGx5PCB0aGlyZDxfMSxfMl8sXzM+LGludCxsb25nLGZsb2F0ID46OnR5cGUgcjI7IC8vIGVycm9yIQoKClNlZSBhbHNvCi0tLS0tLS0tCgp8TWFjcm9zfCwgfENvbmZpZ3VyYXRpb258LCB8Qk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSU3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==