Li4gTWV0YWZ1bmN0aW9ucy9Bcml0aG1ldGljIE9wZXJhdGlvbnMvL25lZ2F0ZSB8NjAKCm5lZ2F0ZQo9PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVAogICAgICAgID4KICAgIHN0cnVjdCBuZWdhdGUKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIHRoZSBuZWdhdGl2ZSAoYWRkaXRpdmUgaW52ZXJzZSkgb2YgaXRzIGFyZ3VtZW50LgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9uZWdhdGUuaHBwPgogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9hcml0aG1ldGljLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfE51bWVyaWMgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFRgYCAgICAgICAgIHwgfEludGVncmFsIENvbnN0YW50fCAgICAgICB8IE9wZXJhdGlvbidzIGFyZ3VtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKfE5vdGU6fCB8bnVtZXJpYyBtZXRhZnVuY3Rpb24gbm90ZXwgfC0tIGVuZCBub3RlfAoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxJbnRlZ3JhbCBDb25zdGFudHwgYGBjYGA6CgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBuZWdhdGU8Yz46OnR5cGUgcjsgCgo6UmV0dXJuIHR5cGU6CiAgICB8SW50ZWdyYWwgQ29uc3RhbnR8LgoKOlNlbWFudGljczoKICAgIEVxdWl2YWxlbnQgdG8gCgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICAgdHlwZWRlZiBpbnRlZ3JhbF9jPCBjOjp2YWx1ZV90eXBlLCAoIC1jOjp2YWx1ZSApID4gcjsKCi4uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBuZWdhdGU8Yz4gcjsgCgo6UmV0dXJuIHR5cGU6CiAgICB8SW50ZWdyYWwgQ29uc3RhbnR8LgoKOlNlbWFudGljczoKICAgIEVxdWl2YWxlbnQgdG8KICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgICAgICBzdHJ1Y3QgciA6IG5lZ2F0ZTxjPjo6dHlwZSB7fTsKCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KCkFtb3J0aXplZCBjb25zdGFudCB0aW1lLgoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0eXBlZGVmIG5lZ2F0ZTwgaW50XzwtMTA+ID46OnR5cGUgcjsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHI6OnZhbHVlLCA9PSwgMTAgKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCByOjp2YWx1ZV90eXBlLCBpbnQgPiApKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfEFyaXRobWV0aWMgT3BlcmF0aW9uc3wsIHxOdW1lcmljIE1ldGFmdW5jdGlvbnwsIHxudW1lcmljX2Nhc3R8LCB8cGx1c3wsIHxtaW51c3wsIHx0aW1lc3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==