Lyogcm93LmggLSBhbiBlbmhhbmNlZCB0dXBsZSBmb3IgZGF0YWJhc2Ugcm93cw0KICoNCiAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4NCiAqDQogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4NCiAqDQogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZA0KICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcw0KICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4NCiAqDQogKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwNCiAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQNCiAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoNCiAqDQogKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdA0KICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUNCiAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQ0KICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4NCiAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlDQogKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuDQogKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLg0KICovDQoNCiNpZm5kZWYgUFlTUUxJVEVfUk9XX0gNCiNkZWZpbmUgUFlTUUxJVEVfUk9XX0gNCiNpbmNsdWRlICJQeXRob24uaCINCg0KdHlwZWRlZiBzdHJ1Y3QgX1Jvdw0Kew0KICAgIFB5T2JqZWN0X0hFQUQNCiAgICBQeU9iamVjdCogZGF0YTsNCiAgICBQeU9iamVjdCogZGVzY3JpcHRpb247DQp9IHB5c3FsaXRlX1JvdzsNCg0KZXh0ZXJuIFB5VHlwZU9iamVjdCBweXNxbGl0ZV9Sb3dUeXBlOw0KDQppbnQgcHlzcWxpdGVfcm93X3NldHVwX3R5cGVzKHZvaWQpOw0KDQojZW5kaWYNCg==