LyoKICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlCiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgoKI2RlZmluZSBCT09UX1NFRwkweGZmZmYwMDAwCS8qIGxpbmVhciBzZWdtZW50IG9mIGJvb3QgY29kZSAqLwojZGVmaW5lIGEzMgkJLmJ5dGUgMHg2NzsKI2RlZmluZSBvMzIJCS5ieXRlIDB4NjY7Cgouc2VjdGlvbiAuc3RhcnQxNiwgImF4IgouY29kZTE2Ci5nbG9ibCBzdGFydDE2CnN0YXJ0MTY6CgkvKiBGaXJzdCB3ZSBsZXQgdGhlIEJTUCBkbyBzb21lIGVhcmx5IGluaXRpYWxpemF0aW9uCgkgKiB0aGlzIGNvZGUgaGF2ZSB0byBtYXAgdGhlIGZsYXNoIHRvIGl0cyBmaW5hbCBwb3NpdGlvbgoJICovCgltb3YJJGJvYXJkX2luaXQxNl9yZXQsICVicAoJam1wCWJvYXJkX2luaXQxNgpib2FyZF9pbml0MTZfcmV0OgoKCS8qIFR1cm4gb2YgY2FjaGUgKHRoaXMgbWlnaHQgcmVxdWlyZSBhIDQ4Ni1jbGFzcyBDUFUpICovCgltb3ZsCSVjcjAsICVlYXgKCW9ybAkkMHg2MDAwMDAwMCwlZWF4Cgltb3ZsCSVlYXgsICVjcjAKCXdiaW52ZAoKCS8qIGxvYWQgdGhlIHRlbXBvcmFyeSBHbG9iYWwgRGVzY3JpcHRvciBUYWJsZSAqLwpvMzIgY3MJbGlkdAlpZHRfcHRyCm8zMiBjcwlsZ2R0CWdkdF9wdHIKCgkvKiBOb3csIHdlIGVudGVyIHByb3RlY3RlZCBtb2RlICovCgltb3ZsCSVjcjAsICVlYXgKCW9ybAkkMSwlZWF4Cgltb3ZsCSVlYXgsICVjcjAKCgkvKiBGbHVzaCB0aGUgcHJlZmV0Y2ggcXVldWUgKi8KCWptcAlmZgpmZjoKCS8qIFRlbGwgMzItYml0IGNvZGUgaXQgaXMgYmVpbmcgZW50ZXJlZCBmcm9tIGhhcmQtcmVzZXQgKi8KCW1vdncJJDB4MDAwMSwgJWJ4CgoJLyogRmluYWxseSBqdW1wIHRvIHRoZSAzMmJpdCBpbml0aWFsaXphdGlvbiBjb2RlICovCgltb3Z3CSRjb2RlMzJzdGFydCwgJWF4Cgltb3Z3CSVheCwlYnAKbzMyIGNzCWxqbXAJKiglYnApCgoJLyogNDgtYml0IGZhciBwb2ludGVyICovCmNvZGUzMnN0YXJ0OgoJLmxvbmcJX3N0YXJ0CQkvKiBvZmZzZXQgKi8KCS53b3JkCTB4MTAJCS8qIHNlZ21lbnQgKi8KCmlkdF9wdHI6Cgkud29yZAkwCQkvKiBsaW1pdCAqLwoJLmxvbmcJMAkJLyogYmFzZSAqLwoKLyoKICogVGhlIGZvbGxvd2luZyBHbG9iYWwgRGVzY3JpcHRvciBUYWJsZSBpcyBqdXN0IGVub3VnaCB0byBnZXQgdXMgaW50bwogKiAnRmxhdCBQcm90ZWN0ZWQgTW9kZScgLSBJdCB3aWxsIGJlIGRpc2NhcmRlZCBhcyBzb29uIGFzIHRoZSBmaW5hbAogKiBHRFQgaXMgc2V0dXAgaW4gYSBzYWZlIGxvY2F0aW9uIGluIFJBTQogKi8KZ2R0X3B0cjoKCS53b3JkCTB4MjAJCS8qIGxpbWl0ICgzMiBieXRlcyA9IDQgR0RUIGVudHJpZXMpICovCgkubG9uZwlCT09UX1NFRyArIGdkdAkvKiBiYXNlICovCgoJLyogVGhlIEdEVCB0YWJsZSAuLi4KCSAqCgkgKgkgU2VsZWN0b3IJVHlwZQoJICoJIDB4MDAJCU5VTEwKCSAqCSAweDA4CQlVbnVzZWQKCSAqCSAweDEwCQkzMmJpdCBjb2RlCgkgKgkgMHgxOAkJMzJiaXQgZGF0YS9zdGFjawoJICovCgpnZHQ6Cgkud29yZAkwLCAwLCAwLCAwCS8qIE5VTEwgICovCgkud29yZAkwLCAwLCAwLCAwCS8qIHVudXNlZCAqLwoKCS53b3JkCTB4RkZGRgkJLyogNEdiIC0gKDB4MTAwMDAwKjB4MTAwMCA9IDRHYikgKi8KCS53b3JkCTAJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KCS53b3JkCTB4OUIwMAkJLyogY29kZSByZWFkL2V4ZWMgKi8KCS53b3JkCTB4MDBDRgkJLyogZ3JhbnVsYXJpdHkgPSA0MDk2LCAzODYgKCs1dGggbmliYmxlIG9mIGxpbWl0KSAqLwoKCS53b3JkCTB4RkZGRgkJLyogNEdiIC0gKDB4MTAwMDAwKjB4MTAwMCA9IDRHYikgKi8KCS53b3JkCTB4MAkJLyogYmFzZSBhZGRyZXNzID0gMCAqLwoJLndvcmQJMHg5MzAwCQkvKiBkYXRhIHJlYWQvd3JpdGUgKi8KCS53b3JkCTB4MDBDRgkJLyogZ3JhbnVsYXJpdHkgPSA0MDk2LCAzODYgKCs1dGggbmliYmxlIG9mIGxpbWl0KSAqLwo=