Li4gTWV0YWZ1bmN0aW9ucy9Bcml0aG1ldGljIE9wZXJhdGlvbnMvL21vZHVsdXMgfDUwCgptb2R1bHVzCj09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVDEKICAgICAgICAsIHR5cGVuYW1lIFQyCiAgICAgICAgPgogICAgc3RydWN0IG1vZHVsdXMKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIHRoZSBtb2R1bHVzIG9mIGl0cyBhcmd1bWVudHMuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL21vZHVsdXMuaHBwPgogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9hcml0aG1ldGljLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfE51bWVyaWMgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFQxYGAsIGBgVDJgYHwgfEludGVncmFsIENvbnN0YW50fCAgICAgICB8IE9wZXJhdGlvbidzIGFyZ3VtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKfE5vdGU6fCB8bnVtZXJpYyBtZXRhZnVuY3Rpb24gbm90ZXwgfC0tIGVuZCBub3RlfAoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxJbnRlZ3JhbCBDb25zdGFudHxcIHMgYGBjMWBgIGFuZCBgYGMyYGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgbW9kdWx1czxjMSxjMj46OnR5cGUgcjsKCjpSZXR1cm4gdHlwZToKICAgIHxJbnRlZ3JhbCBDb25zdGFudHwuCgo6UHJlY29uZGl0aW9uOgogICAgYGBjMjo6dmFsdWUgIT0gMGBgIAoKOlNlbWFudGljczoKICAgIEVxdWl2YWxlbnQgdG8gCiAgICAgICAgCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICAgICB0eXBlZGVmIGludGVncmFsX2M8CiAgICAgICAgICAgICAgdHlwZW9mKGMxOjp2YWx1ZSAlIGMyOjp2YWx1ZSkKICAgICAgICAgICAgLCAoIGMxOjp2YWx1ZSAlIGMyOjp2YWx1ZSApCiAgICAgICAgICAgID4gcjsKCgouLiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgbW9kdWx1czxjMSxjMj4gcjsKCjpSZXR1cm4gdHlwZToKICAgIHxJbnRlZ3JhbCBDb25zdGFudHwuCgo6UHJlY29uZGl0aW9uOgogICAgYGBjMjo6dmFsdWUgIT0gMGBgIAogCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvIAogICAgCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICAgICBzdHJ1Y3QgciA6IG1vZHVsdXM8YzEsYzI+Ojp0eXBlIHt9OwoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgbW9kdWx1czwgaW50XzwxMD4sIGxvbmdfPDM+ID46OnR5cGUgcjsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHI6OnZhbHVlLCA9PSwgMSApOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IHI6OnZhbHVlX3R5cGUsIGxvbmcgPiApKTsKCgoKU2VlIGFsc28KLS0tLS0tLS0KCnxNZXRhZnVuY3Rpb25zfCwgfE51bWVyaWMgTWV0YWZ1bmN0aW9ufCwgfG51bWVyaWNfY2FzdHwsIHxkaXZpZGVzfCwgfHRpbWVzfCwgfHBsdXN8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=