Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9maW5kIHwxMAoKZmluZAo9PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgPgogICAgc3RydWN0IGZpbmQKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHR5cGUgYGBUYGAgaW4gYSBgYFNlcXVlbmNlYGAuIAoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9maW5kLmhwcD4KCgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxdWVuY2VgYCAgfCB8Rm9yd2FyZCBTZXF1ZW5jZXwgICAgfCBBIHNlcXVlbmNlIHRvIHNlYXJjaCBpbi4gICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgVGBgICAgICAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgfCBBIHR5cGUgdG8gc2VhcmNoIGZvci4gICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxGb3J3YXJkIFNlcXVlbmNlfCBgYHNgYCBhbmQgYXJiaXRyYXJ5IHR5cGUgYGB0YGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgZmluZDxzLHQ+Ojp0eXBlIGk7CiAgICAKCjpSZXR1cm4gdHlwZToKICAgIHxGb3J3YXJkIEl0ZXJhdG9yfC4KICAgIAo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0bwoKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgIHR5cGVkZWYgZmluZF9pZjxzLCBpc19zYW1lPF8sdD4gPjo6dHlwZSBpOwoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKTGluZWFyLiBBdCBtb3N0IGBgc2l6ZTxzPjo6dmFsdWVgYCBjb21wYXJpc29ucyBmb3IgaWRlbnRpdHkuIAoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0eXBlZGVmIHZlY3RvcjxjaGFyLGludCx1bnNpZ25lZCxsb25nLHVuc2lnbmVkIGxvbmc+IHR5cGVzOwogICAgdHlwZWRlZiBmaW5kPHR5cGVzLHVuc2lnbmVkPjo6dHlwZSBpdGVyOwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgZGVyZWY8aXRlcj46OnR5cGUsIHVuc2lnbmVkID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBpdGVyOjpwb3M6OnZhbHVlLCA9PSwgMiApOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8UXVlcnlpbmcgQWxnb3JpdGhtc3wsIHxjb250YWluc3wsIHxmaW5kX2lmfCwgfGNvdW50fCwgfGxvd2VyX2JvdW5kfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK