Lyogc3FsaXRlY29tcGF0LmggLSBjb21wYXRpYmlsaXR5IG1hY3JvcwogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCiAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCiAqCiAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAogKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CiAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKICoKICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCiAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCiAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCiAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICovCgojaW5jbHVkZSAiUHl0aG9uLmgiCgojaWZuZGVmIFBZU1FMSVRFX0NPTVBBVF9ICiNkZWZpbmUgUFlTUUxJVEVfQ09NUEFUX0gKCi8qIGRlZmluZSBQeV9zc2l6ZV90IGZvciBwcmUtMi41IHZlcnNpb25zIG9mIFB5dGhvbiAqLwoKI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMAp0eXBlZGVmIGludCBQeV9zc2l6ZV90Owp0eXBlZGVmIGludCAoKmxlbmZ1bmMpKFB5T2JqZWN0Kik7CiNlbmRpZgoKCi8qIGRlZmluZSBQeURpY3RfQ2hlY2tFeGFjdCBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KI2lmbmRlZiBQeURpY3RfQ2hlY2tFeGFjdAojZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0KG9wKSAoKG9wKS0+b2JfdHlwZSA9PSAmUHlEaWN0X1R5cGUpCiNlbmRpZgoKLyogZGVmaW5lIFB5X0NMRUFSIGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLwojaWZuZGVmIFB5X0NMRUFSCiNkZWZpbmUgUHlfQ0xFQVIob3ApCQkJCVwKICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCiAgICAgICAgICAgICAgICBpZiAob3ApIHsJCQlcCiAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSAoUHlPYmplY3QgKikob3ApOwlcCiAgICAgICAgICAgICAgICAgICAgICAgIChvcCkgPSBOVUxMOwkJXAogICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsJCVwKICAgICAgICAgICAgICAgIH0JCQkJXAogICAgICAgIH0gd2hpbGUgKDApCiNlbmRpZgoKI2lmbmRlZiBQeVZhck9iamVjdF9IRUFEX0lOSVQKI2RlZmluZSBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkgXAogICAgUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpIHNpemUsCiNlbmRpZgoKI2lmbmRlZiBQeV9UWVBFCiNkZWZpbmUgUHlfVFlQRShvYikgKChvYiktPm9iX3R5cGUpCiNlbmRpZgoKI2VuZGlmCg==