Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9sb3dlcl9ib3VuZCB8NjAKCmxvd2VyX2JvdW5kCj09PT09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgLCB0eXBlbmFtZSBQcmVkID0gbGVzczxfMSxfMj4KICAgICAgICA+CiAgICBzdHJ1Y3QgbG93ZXJfYm91bmQKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgc29ydGVkIGBgU2VxdWVuY2VgYCB3aGVyZSBgYFRgYCBjb3VsZCBiZSBpbnNlcnRlZCB3aXRob3V0IAp2aW9sYXRpbmcgdGhlIG9yZGVyaW5nLgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9sb3dlcl9ib3VuZC5ocHA+CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8YGBTZXF1ZW5jZWBgICAgfCB8Rm9yd2FyZCBTZXF1ZW5jZXwgICAgICAgICAgICB8IEEgc29ydGVkIHNlcXVlbmNlIHRvIHNlYXJjaCBpbi4gICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfGBgVGBgICAgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICAgICAgfCBBIHR5cGUgdG8gc2VhcmNoIGEgcG9zaXRpb24gZm9yLiAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnxgYFByZWRgYCAgICAgICB8IEJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258ICAgIHwgQSBzZWFyY2ggY3JpdGVyaWEuICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHNvcnRlZCB8Rm9yd2FyZCBTZXF1ZW5jZXwgYGBzYGAsIGJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258IGBgcHJlZGBgLCBhbmQKYXJiaXRyYXJ5IHR5cGUgYGB4YGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgbG93ZXJfYm91bmQ8IHMseCxwcmVkID46OnR5cGUgaTsgCgo6UmV0dXJuIHR5cGU6CiAgICB8Rm9yd2FyZCBJdGVyYXRvcnwuCgo6U2VtYW50aWNzOgogICAgYGBpYGAgaXMgdGhlIGZ1cnRoZXJtb3N0IGl0ZXJhdG9yIGluIHxiZWdpbi9lbmQ8cz58IHN1Y2ggdGhhdCwgZm9yIGV2ZXJ5IGl0ZXJhdG9yIAogICAgYGBqYGAgaW4gW2BgYmVnaW48cz46OnR5cGVgYCwgYGBpYGApLAogICAgCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICAgICBhcHBseTwgcHJlZCwgZGVyZWY8aj46OnR5cGUsIHggPjo6dHlwZTo6dmFsdWUgPT0gdHJ1ZQoKCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KClRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgaXMgbG9nYXJpdGhtaWM6IGF0IG1vc3QgbG9nXCA6c3ViOmAyYFwgKCBgYHNpemU8cz46OnZhbHVlYGAgKSArIDEuIApJZiBgYHNgYCBpcyBhIHxSYW5kb20gQWNjZXNzIFNlcXVlbmNlfCB0aGVuIHRoZSBudW1iZXIgb2Ygc3RlcHMgdGhyb3VnaCB0aGUgcmFuZ2UgCmlzIGFsc28gbG9nYXJpdGhtaWM7IG90aGVyd2lzZSwgdGhlIG51bWJlciBvZiBzdGVwcyBpcyBwcm9wb3J0aW9uYWwgdG8gCmBgc2l6ZTxzPjo6dmFsdWVgYC4KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiB2ZWN0b3JfYzxpbnQsMSwyLDMsMywzLDUsOD4gbnVtYmVyczsKICAgIHR5cGVkZWYgbG93ZXJfYm91bmQ8IG51bWJlcnMsIGludF88Mz4gPjo6dHlwZSBpdGVyOwoKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIAogICAgICAgICAgKGRpc3RhbmNlPCBiZWdpbjxudW1iZXJzPjo6dHlwZSxpdGVyID46OnZhbHVlKSwgPT0sIDIKICAgICAgICApOwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBkZXJlZjxpdGVyPjo6dHlwZTo6dmFsdWUsID09LCAzICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxRdWVyeWluZyBBbGdvcml0aG1zfCwgfHVwcGVyX2JvdW5kfCwgfGZpbmR8LCB8ZmluZF9pZnwsIHxtaW5fZWxlbWVudHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==