LyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAqIHRoYXQgbWF5IGFwcGx5OgogKi8KLyoKICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICovCi8qCiAqIE5vdGU6CiAqICAgIElmIG5ldyBkZWZhdWx0X3N0b3JlIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoaXMgaGVhZGVyIGZpbGUsCiAqICAgIHRoZW4gcmVtZW1iZXIgdG8gcnVuICdwZXJsL2RlZmF1bHRfc3RvcmUvZ2VuJyB0byB1cGRhdGUgdGhlCiAqICAgIGNvcnJlc3BvbmRpbmcgcGVybCBpbnRlcmZhY2UuCiAqLwovKgogKiBAZmlsZSBkZWZhdWx0X3N0b3JlLmg6IHN0b3JhZ2Ugc3BhY2UgZm9yIGRlZmF1bHRzCiAqCiAqIEBhZGR0b2dyb3VwIGRlZmF1bHRfc3RvcmUKICoKICogQHsKICovCiNpZm5kZWYgREVGQVVMVF9TVE9SRV9ICiNkZWZpbmUgREVGQVVMVF9TVE9SRV9ICgojaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICAgICAgICAgICJDIiB7CiNlbmRpZgoKI2RlZmluZSBORVRTTk1QX0RTX01BWF9JRFMgMwojZGVmaW5lIE5FVFNOTVBfRFNfTUFYX1NVQklEUyA0OCAgICAgICAgLyogbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA4ICovCgogICAgLyoKICAgICAqIGJlZ2luIHN0b3JhZ2UgZGVmaW5pdGlvbnMgCiAgICAgKi8KLyoqCiAqIEBkZWYgTkVUU05NUF9EU19MSUJSQVJZX0lECiAqIFRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgInN0b3JpZCIgYXJndW1lbnQgdG8gdGhlIEFQSS4KICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJSQVJZX0lEICAgICAwCiNkZWZpbmUgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCAxCiNkZWZpbmUgTkVUU05NUF9EU19UT0tFTl9JRCAgICAgICAyCgogICAgLyoKICAgICAqIFRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgIndoaWNoIiBhcmd1bWVudCB0byB0aGUgQVBJLAogICAgICogd2hlbiB0aGUgc3RvcmVpZCBhcmd1bWVudCBpcyBORVRTTk1QX0RTX0xJQlJBUllfSUQgCiAgICAgKi8KICAgIC8qCiAgICAgKiBsaWJyYXJ5IGJvb2xlYW5zIAogICAgICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX0VSUk9SUyAgICAgICAgICAwCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0FWRV9NSUJfREVTQ1JTICAgICAxCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX0NPTU1FTlRfVEVSTSAgICAyCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX1BBUlNFX0xBQkVMICAgICAzCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQgICAgICAgICA0CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTE9HX1RJTUVTVEFNUCAgICAgICA1CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9SRUFEX0NPTkZJR1MgICA2ICAgIC8qIGRvbid0IHJlYWQgbm9ybWFsIGNvbmZpZyBmaWxlcyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfQ09ORklHX0xPQUQgICAgICBORVRTTk1QX0RTX0xJQl9ET05UX1JFQURfQ09ORklHUwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9SRVBMQUNFICAgICAgICAgNyAgICAvKiByZXBsYWNlIG9iamVjdHMgZnJvbSBsYXRlc3QgbW9kdWxlICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfTlVNRVJJQ19FTlVNICA4ICAgIC8qIHByaW50IG9ubHkgbnVtZXJpYyBlbnVtIHZhbHVlcyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX05VTUVSSUNfT0lEUyAgOSAgICAvKiBwcmludCBvbmx5IG51bWVyaWMgZW51bSB2YWx1ZXMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX0JSRUFLRE9XTl9PSURTIDEwICAgLyogZG9udCBwcmludCBvaWQgaW5kZXhlcyBzcGVjaWFsbHkgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgIDExICAgLyogZG9uJ3QgdXNlIHRoZSBhbGFybSgpIHNpZ25hbCAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX0ZVTExfT0lEICAgICAgMTIgICAvKiBwcmludCBmdWxseSBxdWFsaWZpZWQgb2lkcyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5UICAgICAgICAgMTMgICAvKiBwcmludCB2ZXJ5IGJyaWVmIG91dHB1dCBmb3IgcGFyc2luZyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1JBTkRPTV9BQ0NFU1MJICAgMTQgICAvKiByYW5kb20gYWNjZXNzIHRvIG9pZCBsYWJlbHMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SRUdFWF9BQ0NFU1MJICAgMTUgICAvKiByZWdleCBtYXRjaGluZyB0byBvaWQgbGFiZWxzICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9DSEVDS19SQU5HRSAgICAxNiAgIC8qIGRvbid0IGNoZWNrIHZhbHVlcyBmb3IgcmFuZ2VzIG9uIHNlbmQgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19UT0tFTl9XQVJOSU5HUyAgIDE3ICAgLyogbm8gd2FybiBhYm91dCB1bmtub3duIGNvbmZpZyB0b2tlbnMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OVU1FUklDX1RJTUVUSUNLUyAgIDE4ICAgLyogcHJpbnQgdGltZXRpY2tzIGFzIGEgbnVtYmVyICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRVNDQVBFX1FVT1RFUyAgICAgICAxOSAgIC8qIHNoZWxsIGVzY2FwZSBxdW90ZSBtYXJrcyBpbiBvaWRzICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVWRVJTRV9FTkNPREUgICAgICAyMCAgIC8qIGVuY29kZSBwYWNrZXRzIGZyb20gYmFjayB0byBmcm9udCAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX0JBUkVfVkFMVUUJICAgMjEgICAvKiBqdXN0IHByaW50IHZhbHVlIChub3QgT0lEID0gdmFsdWUpICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRVhURU5ERURfSU5ERVgJICAgMjIgICAvKiBwcmludCBleHRlbmRlZCBpbmRleCBmb3JtYXQgW3gxXVt4Ml0gKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9IRVhfVEVYVCAgICAgIDIzICAgLyogcHJpbnQgQVNDSUkgdGV4dCBhbG9uZyB3aXRoIGhleCBzdHJpbmdzICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfVUNEX1NUWUxFX09JRCAyNCAgIC8qIHByaW50IE9JRCdzIHVzaW5nIHRoZSBVQ0Qtc3R5bGUgcHJlZml4IHN1cHByZXNzaW9uICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVBRF9VQ0RfU1RZTEVfT0lEICAyNSAgIC8qIHJlcXVpcmUgdG9wLWxldmVsIE9JRHMgdG8gYmUgcHJlZml4ZWQgd2l0aCBhIGRvdCAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hBVkVfUkVBRF9QUkVNSUJfQ09ORklHIDI2ICAgICAgIC8qIGhhdmUgdGhlIHByZS1taWIgcGFyc2luZyBjb25maWcgdG9rZW5zIGJlZW4gcHJvY2Vzc2VkICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfSEFWRV9SRUFEX0NPTkZJRyAgICAyNyAgIC8qIGhhdmUgdGhlIGNvbmZpZyB0b2tlbnMgYmVlbiBwcm9jZXNzZWQgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9RVUlDS0VfUFJJTlQgICAgICAgIDI4ICAgCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9QUklOVF9VTklUUyAgICAyOSAvKiBkb24ndCBwcmludCBVTklUUyBzdWZmaXggKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19ESVNQTEFZX0hJTlQgICAgIDMwIC8qIGRvbid0IGFwcGx5IERJU1BMQVktSElOVHMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl8xNkJJVF9JRFMgICAgICAgICAgIDMxICAgLyogcmVzdHJpY3QgcmVxdWVzdElEcywgZXRjIHRvIDE2LWJpdCB2YWx1ZXMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX1BFUlNJU1RfU1RBVEUgIDMyCS8qIGRvbid0IGxvYWQgY29uZmlnIGFuZCBkb24ndCBsb2FkL3NhdmUgcGVyc2lzdGVudCBmaWxlICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfMkRJR0lUX0hFWF9PVVRQVVQgICAzMwkvKiBwcmludCBhIGxlYWRpbmcgMCBvbiBoZXggdmFsdWVzIDw9ICdmJyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0lHTk9SRV9OT19DT01NVU5JVFkgMzQJLyogZG9uJ3QgY29tcGxhaW4gaWYgbm8gY29tbXVuaXR5IGlzIHNwZWNpZmllZCBpbiB0aGUgY29tbWFuZCBhcmd1bWVudHMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfTE9BRCAgMzUgLyogZG9uJ3QgbG9hZCBwZXJzaXN0ZW50IGZpbGUgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfU0FWRSAgMzYgLyogZG9uJ3Qgc2F2ZSBwZXJzaXN0ZW50IGZpbGUgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BUFBFTkRfTE9HRklMRVMgICAgIDM3IC8qIGFwcGVuZCwgZG9uJ3Qgb3ZlcndyaXRlLCBsb2cgZmlsZXMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19ESVNDT1ZFUlkgICAgICAgIDM4IC8qIGRvbid0IHN1cHBvcnQgUkZDNTM0MyBjb250ZXh0RW5naW5lSUQgZGlzY292ZXJ5ICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVggICAgICAzOSAvKiBUU00ncyBzaW1wbGUgc2VjdXJpdHkgbmFtZSBtYXBwaW5nICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9MT0FEX0hPU1RfRklMRVMgNDAgLyogZG9uJ3QgcmVhZCBob3N0LmNvbmYgZmlsZXMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ETlNTRUNfV0FSTl9PTkxZICAgICA0MSAvKiB0cmVhZCBETlNTRUMgZXJyb3JzIGFzIHdhcm5pbmdzICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUFYX0JPT0xfSUQgICAgICAgICAgNDggLyogbWF0Y2ggTkVUU05NUF9EU19NQVhfU1VCSURTICovCgogICAgLyoKICAgICAqIGxpYnJhcnkgaW50ZWdlcnMgCiAgICAgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfV0FSTklOR1MgICAgICAgICAwCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VDTEVWRUwgICAgICAgICAgICAgMQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NOTVBWRVJTSU9OICAgICAgICAgIDIKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQgICAgICAgICAzCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQgICAgNAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX1NVRkZJWF9PTkxZICAgIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFUCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1RSSU5HX09VVFBVVF9GT1JNQVQgNQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hFWF9PVVRQVVRfTEVOR1RIICAgIDYKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRVJWRVJTRU5EQlVGICAgICAgICA3IC8qIHNlbmQgYnVmZmVyIChzZXJ2ZXIpICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VSVkVSUkVDVkJVRiAgICAgICAgOCAvKiByZWNlaXZlIGJ1ZmZlciAoc2VydmVyKSAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVFNFTkRCVUYgICAgICAgIDkgLyogc2VuZCBidWZmZXIgKGNsaWVudCkgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DTElFTlRSRUNWQlVGICAgICAgIDEwIC8qIHJlY2VpdmUgYnVmZmVyIChjbGllbnQpICovCiNkZWZpbmUgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19QRVJNICAgICAxMQojZGVmaW5lIE5FVFNOTVBfRFNfU1NIRE9NQUlOX0RJUl9QRVJNICAgICAgMTIKI2RlZmluZSBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX1VTRVIgICAgIDEyCiNkZWZpbmUgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19HUk9VUCAgICAxMwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RJTUVPVVQgICAgICAgICAgICAgMTQKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SRVRSSUVTICAgICAgICAgICAgIDE1CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUFYX0lOVF9JRCAgICAgICAgICA0OCAvKiBtYXRjaCBORVRTTk1QX0RTX01BWF9TVUJJRFMgKi8KICAgIAogICAgLyoKICAgICAqIHNwZWNpYWwgbWVhbmluZ3MgZm9yIHRoZSBkZWZhdWx0IFNOTVAgdmVyc2lvbiBzbG90IChORVRTTk1QX0RTX0xJQl9TTk1QVkVSU0lPTikgCiAgICAgKi8KI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCiNkZWZpbmUgTkVUU05NUF9EU19TTk1QX1ZFUlNJT05fMSAgICAxMjggICAgICAgIC8qIGJvZ3VzICovCiNlbmRpZgojaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCiNkZWZpbmUgTkVUU05NUF9EU19TTk1QX1ZFUlNJT05fMmMgICAxICAvKiByZWFsICovCiNlbmRpZgojZGVmaW5lIE5FVFNOTVBfRFNfU05NUF9WRVJTSU9OXzMgICAgMyAgLyogcmVhbCAqLwoKCiAgICAvKgogICAgICogbGlicmFyeSBzdHJpbmdzIAogICAgICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VDTkFNRSAgICAgICAgICAgMAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NPTlRFWFQgICAgICAgICAgIDEKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFICAgICAgICAyCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVVUSFBBU1NQSFJBU0UgICAgMwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSVZQQVNTUEhSQVNFICAgIDQKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PUFRJT05BTENPTkZJRyAgICA1CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVBQVFlQRSAgICAgICAgICAgNgojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NPTU1VTklUWSAgICAgICAgIDcKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QRVJTSVNURU5UX0RJUiAgICA4CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ09ORklHVVJBVElPTl9ESVIgOQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFQ01PREVMICAgICAgICAgIDEwCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCRElSUyAgICAgICAgICAgMTEKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURTVUZGSVggICAgICAgICAxMgojZGVmaW5lIE5FVFNOTVBfRFNfTElCX09JRFBSRUZJWCAgICAgICAgIDEzCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIgICAgICAgMTQKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9URU1QX0ZJTEVfUEFUVEVSTiAxNQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FVVEhNQVNURVJLRVkgICAgIDE2CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJVk1BU1RFUktFWSAgICAgMTcKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BVVRITE9DQUxJWkVES0VZICAxOAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSVZMT0NBTElaRURLRVkgIDE5CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVBQVFlQRVMgICAgICAgICAgMjAKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9LU01fS0VZVEFCICAgICAgICAyMQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0tTTV9TRVJWSUNFX05BTUUgIDIyCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfWDUwOV9DTElFTlRfUFVCICAgMjMKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9YNTA5X1NFUlZFUl9QVUIgICAyNAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NTSFRPU05NUF9TT0NLRVQgIDI1CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0VSVF9FWFRSQV9TVUJESVIgMjYKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9IT1NUTkFNRSAgICAgICAgICAyNwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1g1MDlfQ1JMX0ZJTEUgICAgIDI4CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfVExTX0FMR09SSVRNUyAgICAgMjkKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9UTFNfTE9DQUxfQ0VSVCAgICAzMAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RMU19QRUVSX0NFUlQgICAgIDMxCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1NIX1VTRVJOQU1FICAgICAgMzIKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TU0hfUFVCS0VZICAgICAgICAzMwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NTSF9QUklWS0VZICAgICAgIDM0CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUFYX1NUUl9JRCAgICAgICAgNDggLyogbWF0Y2ggTkVUU05NUF9EU19NQVhfU1VCSURTICovCgogICAgLyoKICAgICAqIGVuZCBzdG9yYWdlIGRlZmluaXRpb25zIAogICAgICovCgogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGludCB2YWx1ZSk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4oaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBpbnQgdmFsdWUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhpbnQgc3RvcmVpZCwgaW50IHdoaWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGNoYXIgICAgICAgICAgICpuZXRzbm1wX2RzX2dldF9zdHJpbmcoaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3ZvaWQoaW50IHN0b3JlaWQsIGludCB3aGljaCwgdm9pZCAqdmFsdWUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIHZvaWQgICAgICAgICAgICpuZXRzbm1wX2RzX2dldF92b2lkKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyh1X2NoYXIgdHlwZSwgY29uc3QgY2hhciAqZnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBpbnQgc3RvcmVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNoKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIodV9jaGFyIHR5cGUsIGNvbnN0IGNoYXIgKmZ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgaW50IHN0b3JlaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfcGFyc2VfYm9vbGVhbihjaGFyICpsaW5lKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9kc19zaHV0ZG93bih2b2lkKTsKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgojZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFRkFVTFRfU1RPUkVfSCAqLwovKiogQH0gKi8K