From mboxrd@z Thu Jan 1 00:00:00 1970 From: DJBARROW@de.ibm.com To: gdb-patches@sourceware.cygnus.com, s390-patches@gnu.org, Binutils Patches , bash_maintainers@gnu.org Cc: schwidefsky@de.ibm.com, ARENZ@de.ibm.com Subject: New gdb 31 & 64 bit patches for S/390 Date: Tue, 27 Feb 2001 12:39:00 -0000 Message-id: X-SW-Source: 2001-02/msg00484.html Content-type: multipart/mixed; boundary="----------=_1583534347-29878-1" This is a multi-part message in MIME format... ------------=_1583534347-29878-1 Content-length: 1215 Hi All, Here are the latest gdb patches for S/390, they are against yesterdays repository ( Feb 26th ) I have spent a lot of time reworking the stuff to get it down to as few files as possible, & addressing issues brought up on previous submissions ( a hell of a lot more time than the 64 bit port took :-) ). & hope it is accepted this time. The only thing I'm aware of which isn't working properly is gdb /boot/vmlinux /proc/kcore when compiled for multiarch This is because the bfd stuff returns bfd_arch_unknown & set_gdbarch_from_file complains because gdbarch_update_p can't fix up this, this however is quite normal for the /proc/kcore file even when compiled without multi-arch, the code works fine when compiled without multi-arch. (See attached file: gdb.s390.270201.binutils.config.diff)(See attached file: gdb.s390.270201.config.diff)(See attached file: gdb.s390.270201.core.diff)(See attached file: gdb.s390.270201.readline.config.diff)(See attached file: S390ChangeLog.gdb) (See attached file: S390ChangeLog.Root) D.J. Barrow Gnu/Linux for S/390 kernel developer eMail: djbarrow@de.ibm.com,barrow_dj@yahoo.com Phone: +49-(0)7031-16-2583 IBM Germany Lab, Schönaicherstr. 220, 71032 Böblingen ------------=_1583534347-29878-1 Content-Type: text/x-diff; charset=us-ascii; name="gdb.s390.270201.binutils.config.diff" Content-Disposition: inline; filename="gdb.s390.270201.binutils.config.diff" Content-Transfer-Encoding: base64 Content-Length: 545 LS0tIHNyYy5vcmlnL2JmZC9jb25maWd1cmUuaW4JVGh1IEZlYiAyMiAxNzoz ODo0NSAyMDAxCisrKyBzcmMubmV3L2JmZC9jb25maWd1cmUuaW4JTW9uIEZl YiAyNiAxOTowMzoxNiAyMDAxCkBAIC0xNTEsNiArMTUxLDcgQEAKICAgaHBw YSotKi1tcGVpeCopCUNPUkVGSUxFPWhwdXgtY29yZS5sbyA7OwogICBocHBh Ki0qLWJzZCopCQlDT1JFRklMRT0iaHB1eC1jb3JlLmxvIGhwcGFic2QtY29y ZS5sbyIKIAkJCUNPUkVGTEFHPSItREhQVVhfQ09SRSAtREhQUEFCU0RfQ09S RSIgOzsKKyAgczM5MCotKi0qKSAgICAgICAgICAgIENPUkVGSUxFPXRyYWQt Y29yZS5sbyA7OwkKICAgaTM3MC0qLSopCQkKIAlDT1JFRklMRT10cmFkLWNv cmUubG8KIAlUUkFEX0hFQURFUj0nImhvc3RzL2kzNzBsaW51eC5oIicK ------------=_1583534347-29878-1 Content-Type: text/x-diff; charset=us-ascii; name="gdb.s390.270201.config.diff" Content-Disposition: inline; filename="gdb.s390.270201.config.diff" Content-Transfer-Encoding: base64 Content-Length: 1765 LS0tIHNyYy5vcmlnL2NvbmZpZy5zdWIJU2F0IEZlYiAxMCAwMTo1NTo0NiAy MDAxCisrKyBzcmMubmV3L2NvbmZpZy5zdWIJTW9uIEZlYiAyNiAxNzo1Nzoz NyAyMDAxCkBAIC03NDAsNiArNzQwLDEyIEBACiAJcnRwYyB8IHJ0cGMtKikK IAkJYmFzaWNfbWFjaGluZT1yb21wLWlibQogCQk7OworCXMzOTAgfCBzMzkw LSogKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHgg fCBzMzkweC0qICkKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsK IAlzYTI5MjAwKQogCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCiAJCW9zPS11 ZGkKLS0tIHNyYy5vcmlnL2dkYi9jb25maWd1cmUuaG9zdAlUaHUgRmViICA4 IDA3OjMwOjIzIDIwMDEKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZ3VyZS5ob3N0 CU1vbiBGZWIgMjYgMTc6NTc6MzcgMjAwMQpAQCAtMTgsNiArMTgsNyBAQAog bTg4KikJCQlnZGJfaG9zdF9jcHU9bTg4ayA7OwogcG93ZXJwYyopCQlnZGJf aG9zdF9jcHU9cG93ZXJwYyA7Owogc3BhcmM2NCkJCWdkYl9ob3N0X2NwdT1z cGFyYyA7OworczM5MCopICAgICAgICAgICAgICAgICAgZ2RiX2hvc3RfY3B1 PXMzOTAgOzsKICopCQkJZ2RiX2hvc3RfY3B1PSRob3N0X2NwdSA7OwogCiBl c2FjCkBAIC0xNTgsNSArMTU5LDEwIEBACiB2YXgtKi1ic2QqKQkJZ2RiX2hv c3Q9dmF4YnNkIDs7CiB2YXgtKi11bHRyaXgyKikJCWdkYl9ob3N0PXZheHVs dDIgOzsKIHZheC0qLXVsdHJpeCopCQlnZGJfaG9zdD12YXh1bHQgOzsKLQor czM5MCotKi0qKSAgICAgICAgICAgICAgIGdkYl9ob3N0PXMzOTAgOzsKIGVz YWMKKworCisKKworCi0tLSBzcmMub3JpZy9nZGIvY29uZmlndXJlLnRndAlU aHUgRmViICA4IDA3OjMwOjIzIDIwMDEKKysrIHNyYy5uZXcvZ2RiL2NvbmZp Z3VyZS50Z3QJTW9uIEZlYiAyNiAxNzo1NzozNyAyMDAxCkBAIC0yNiw2ICsy Niw3IEBACiBzdHJvbmdhcm0qKQkJZ2RiX3RhcmdldF9jcHU9YXJtIDs7CiB4 c2NhbGUqKQkJZ2RiX3RhcmdldF9jcHU9YXJtIDs7CiB2ODUwKikJCQlnZGJf dGFyZ2V0X2NwdT12ODUwIDs7CitzMzkwKikgICAgICAgICAgICAgICAgICBn ZGJfdGFyZ2V0X2NwdT1zMzkwIDs7CiAqKQkJCWdkYl90YXJnZXRfY3B1PSR0 YXJnZXRfY3B1IDs7CiAKIGVzYWMKQEAgLTMwNSw2ICszMDYsOCBAQAogCiB6 OGstKi1jb2ZmKikJCWdkYl90YXJnZXQ9ejhrIDs7CiAKK3MzOTAtKi0qKSAg ICAgICAgICAgICAgIGdkYl90YXJnZXQ9czM5MCA7OworczM5MHgtKi0qKSAg ICAgICAgICAgICAgZ2RiX3RhcmdldD1zMzkweCA7OwogZXNhYwogCiAK ------------=_1583534347-29878-1 Content-Type: text/x-diff; charset=us-ascii; name="gdb.s390.270201.core.diff" Content-Disposition: inline; filename="gdb.s390.270201.core.diff" Content-Transfer-Encoding: base64 Content-Length: 106413 ZGlmZiAtdSAtciAtTiBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvbm0tbGlu dXguaCBzcmMubmV3L2dkYi9jb25maWcvczM5MC9ubS1saW51eC5oCi0tLSBz cmMub3JpZy9nZGIvY29uZmlnL3MzOTAvbm0tbGludXguaAlUaHUgSmFuICAx IDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZy9zMzkwL25t LWxpbnV4LmgJTW9uIEZlYiAyNiAxNzo1Nzo0OSAyMDAxCkBAIC0wLDAgKzEs MTA3IEBACisvKiBOYXRpdmUgc3VwcG9ydCBmb3IgTGludXggZm9yIFMzOTAK KyAgIAorICAgQ29weXJpZ2h0IDE5ODYsIDE5ODcsIDE5ODksIDE5OTIsIDE5 OTYsIDE5OTgsIDIwMDAKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorICAgUG9ydGVkIGJ5IEQuSi4gQmFycm93IGZvciBJQk0gRGV1dHNj aGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uLgorICAg ZGVyaXZlZCBmcm9tIGkzOTAtbm1saW51eC5oCisgICBUaGlzIGZpbGUgaXMg cGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwg SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgQm9zdG9u LCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmIE5NX0xJTlVY X0gKKyNkZWZpbmUgTk1fTElOVVhfSAorCisjaW5jbHVkZSAiY29uZmlnL25t LWxpbnV4LmgiCisKKyNkZWZpbmUgUkVHSVNURVJfVV9BRERSKGFkZHIsIGJs b2NrZW5kLCByZWdubykgXAorCShhZGRyKSA9IHMzOTBfcmVnaXN0ZXJfdV9h ZGRyKChibG9ja2VuZCksKHJlZ25vKSk7CitleHRlcm4gaW50IHMzOTBfcmVn aXN0ZXJfdV9hZGRyIChpbnQsIGludCk7CisKKy8qIFJldHVybiBzaXplb2Yg dXNlciBzdHJ1Y3QgdG8gY2FsbGVycyBpbiBsZXNzIG1hY2hpbmUgZGVwZW5k ZW50IHJvdXRpbmVzICovCisKKyNkZWZpbmUgS0VSTkVMX1VfU0laRSBrZXJu ZWxfdV9zaXplKCkKK2V4dGVybiBpbnQga2VybmVsX3Vfc2l6ZSAodm9pZCk7 CisKKyNkZWZpbmUgVV9SRUdTX09GRlNFVCAwCisKKworLyogV2UgZGVmaW5l IHRoaXMgaWYgbGluay5oIGlzIGF2YWlsYWJsZSwgYmVjYXVzZSB3aXRoIEVM RiB3ZSB1c2UgU1ZSNCBzdHlsZQorICAgc2hhcmVkIGxpYnJhcmllcy4gKi8K KworI2lmZGVmIEhBVkVfTElOS19ICisjZGVmaW5lIFNWUjRfU0hBUkVEX0xJ QlMKKyNpbmNsdWRlICJzb2xpYi5oIgkJLyogU3VwcG9ydCBmb3Igc2hhcmVk IGxpYnJhcmllcy4gKi8KKyNlbmRpZgorCisKKy8qIFdBVENIUE9JTlQgU1BF Q0lGSUMgU1RVRkYgKi8KKworI2RlZmluZSBUQVJHRVRfSEFTX0hBUkRXQVJF X1dBVENIUE9JTlRTCisjZGVmaW5lIEhBVkVfQ09OVElOVUFCTEVfV0FUQ0hQ T0lOVAorI2RlZmluZSBIQVZFX1NURVBQQUJMRV9XQVRDSFBPSU5UCisjZGVm aW5lIHRhcmdldF9pbnNlcnRfd2F0Y2hwb2ludChhZGRyLCBsZW4sIHR5cGUp ICBcCisgIHMzOTBfaW5zZXJ0X3dhdGNocG9pbnQgKGluZmVyaW9yX3BpZCwg YWRkciwgbGVuLCB0eXBlKQorCisjZGVmaW5lIHRhcmdldF9yZW1vdmVfd2F0 Y2hwb2ludChhZGRyLCBsZW4sIHR5cGUpICBcCisgIHMzOTBfcmVtb3ZlX3dh dGNocG9pbnQgKGluZmVyaW9yX3BpZCwgYWRkciwgbGVuKQorCitleHRlcm4g aW50IHdhdGNoX2FyZWFfY250OworLyogZ2RiIGlmIHJlYWxseSBzdHVwaWQg JiBjYWxscyB0aGlzIGFsbCB0aGUgdGltZSB3aXRob3V0IGEKKyAgIHdhdGNo cG9pbnQgZXZlbiBiZWluZyBzZXQgKi8KKyNkZWZpbmUgU1RPUFBFRF9CWV9X QVRDSFBPSU5UKFcpICBcCisgICh3YXRjaF9hcmVhX2NudCYmczM5MF9zdG9w cGVkX2J5X3dhdGNocG9pbnQgKGluZmVyaW9yX3BpZCkpCisKK2V4dGVybiBD T1JFX0FERFIgczM5MF9zdG9wcGVkX2J5X3dhdGNocG9pbnQgKGludCk7CisK Ky8qCisgIFR5cGUgY2FuIGJlIDEgZm9yIGEgcmVhZF93YXRjaHBvaW50IG9y IDIgZm9yIGFuIGFjY2VzcyB3YXRjaHBvaW50LgorICovCitleHRlcm4gaW50 IHMzOTBfaW5zZXJ0X3dhdGNocG9pbnQgKGludCBwaWQsIENPUkVfQUREUiBh ZGRyLCBpbnQgbGVuLCBpbnQgcncpOworZXh0ZXJuIGludCBzMzkwX3JlbW92 ZV93YXRjaHBvaW50IChpbnQgcGlkLCBDT1JFX0FERFIgYWRkciwgaW50IGxl bik7CisjZGVmaW5lIFRBUkdFVF9DQU5fVVNFX0hBUkRXQVJFX1dBVENIUE9J TlQodHlwZSwgY250LCBvdCkgXAorCSAoKCh0eXBlKSA9PSBicF9oYXJkd2Fy ZV93YXRjaHBvaW50KXx8IFwKKwkgKCh0eXBlKSA9PSBicF93YXRjaHBvaW50 KXx8IFwKKwkgKCh0eXBlKSA9PSBicF9yZWFkX3dhdGNocG9pbnQpIHx8IFwK KyAgICAgICAgICgodHlwZSkgPT0gYnBfYWNjZXNzX3dhdGNocG9pbnQpKQor CisKKy8qIEZJWE1FOiBrZXR0ZW5pcy8yMDAwLTA5LTAzOiBUaGlzIHNob3Vs ZCBiZSBtb3ZlZCB0byAuLi9ubS1saW51eC5oCisgICBvbmNlIHdlIGhhdmUg Y29udmVydGVkIGFsbCBMaW51eCB0YXJnZXRzIHRvIHVzZSB0aGUgbmV3IHRo cmVhZHMKKyAgIHN0dWZmICh3aXRob3V0IHRoZSAjdW5kZWYgb2YgY291cnNl KS4gICovCisjdW5kZWYgUFJFUEFSRV9UT19QUk9DRUVECisKKy8qIFNldCB0 byAxIGlmIHBvc3QgNS4wICovCisjaWYgMQorZXh0ZXJuIGludCBsaW5fbHdw X3ByZXBhcmVfdG9fcHJvY2VlZCAodm9pZCk7CisjZGVmaW5lIFBSRVBBUkVf VE9fUFJPQ0VFRChzZWxlY3RfaXQpIGxpbl9sd3BfcHJlcGFyZV90b19wcm9j ZWVkICgpCisjZWxzZQorZXh0ZXJuIGludCBsaW51eHRocmVhZHNfcHJlcGFy ZV90b19wcm9jZWVkIChpbnQgc3RlcCk7CisjZGVmaW5lIFBSRVBBUkVfVE9f UFJPQ0VFRChzZWxlY3RfaXQpIGxpbnV4dGhyZWFkc19wcmVwYXJlX3RvX3By b2NlZWQgKHNlbGVjdF9pdCkKKyNlbmRpZgorCisKK2V4dGVybiB2b2lkIGxp bl9sd3BfYXR0YWNoX2x3cCAoaW50IHBpZCwgaW50IHZlcmJvc2UpOworI2Rl ZmluZSBBVFRBQ0hfTFdQKHBpZCwgdmVyYm9zZSkgbGluX2x3cF9hdHRhY2hf bHdwICgocGlkKSwgKHZlcmJvc2UpKQorCisjaW5jbHVkZSA8c2lnbmFsLmg+ CisKK2V4dGVybiB2b2lkIGxpbl90aHJlYWRfZ2V0X3RocmVhZF9zaWduYWxz IChzaWdzZXRfdCAqIG1hc2spOworI2RlZmluZSBHRVRfVEhSRUFEX1NJR05B TFMobWFzaykgbGluX3RocmVhZF9nZXRfdGhyZWFkX3NpZ25hbHMgKG1hc2sp CisKKy8qIE5lZWRlZCBmb3IgczM5MHggKi8KKyNkZWZpbmUgUFRSQUNFX0FS RzNfVFlQRSBsb25nCisjZGVmaW5lIFBUUkFDRV9YRkVSX1RZUEUgbG9uZwor I2VuZGlmIC8qIG5tX2xpbnV4LmggKi8KZGlmZiAtdSAtciAtTiBzcmMub3Jp Zy9nZGIvY29uZmlnL3MzOTAvczM5MC5taCBzcmMubmV3L2dkYi9jb25maWcv czM5MC9zMzkwLm1oCi0tLSBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvczM5 MC5taAlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2Ri L2NvbmZpZy9zMzkwL3MzOTAubWgJTW9uIEZlYiAyNiAxNzo1Nzo0OSAyMDAx CkBAIC0wLDAgKzEsMTQgQEAKKyMgSG9zdDogUzM5MCwgcnVubmluZyBMaW51 eAorCitYTV9GSUxFPSB4bS1saW51eC5oCitYREVQRklMRVM9IAorWE1fQ0xJ QlM9CisKK05BVF9GSUxFPSBubS1saW51eC5oCisjTkFUREVQRklMRVM9IGlu ZnB0cmFjZS5vIHNvbGliLm8gaW5mdGFyZy5vIGZvcmstY2hpbGQubyBjb3Jl bG93Lm8gXAorIwkgICBzMzkwLW5hdC5vIGxpbnV4LXRocmVhZC5vIGNvcmUt YW91dC5vIGNvcmUtcmVnc2V0Lm8KKyMgcG9zdCA1LjAgbmF0ZGVwZmlsZXMu CitOQVRERVBGSUxFUz0gaW5mcHRyYWNlLm8gc29saWIubyBpbmZ0YXJnLm8g Zm9yay1jaGlsZC5vIGNvcmVsb3cubyBcCisJICAgczM5MC1uYXQubyB0aHJl YWQtZGIubyBsaW4tbHdwLm8gcHJvYy1zZXJ2aWNlLm8gXAorICAgICAgICAg IGNvcmUtYW91dC5vIGNvcmUtcmVnc2V0Lm8gc29saWItc3ZyNC5vIAorTE9B RExJQkVTID0gLWxkbCAtcmR5bmFtaWMKZGlmZiAtdSAtciAtTiBzcmMub3Jp Zy9nZGIvY29uZmlnL3MzOTAvczM5MC5tdCBzcmMubmV3L2dkYi9jb25maWcv czM5MC9zMzkwLm10Ci0tLSBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvczM5 MC5tdAlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2Ri L2NvbmZpZy9zMzkwL3MzOTAubXQJTW9uIEZlYiAyNiAxNzo1Nzo0OSAyMDAx CkBAIC0wLDAgKzEsNCBAQAorIyBUYXJnZXQ6IFMzOTAgcnVubmluZyBMaW51 eAorVE1fRklMRT0gdG0tbGludXguaAorVERFUEZJTEVTPXMzOTAtdGRlcC5v CitHREJfTVVMVElfQVJDSD0yCmRpZmYgLXUgLXIgLU4gc3JjLm9yaWcvZ2Ri L2NvbmZpZy9zMzkwL3MzOTB4Lm10IHNyYy5uZXcvZ2RiL2NvbmZpZy9zMzkw L3MzOTB4Lm10Ci0tLSBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvczM5MHgu bXQJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisrKyBzcmMubmV3L2dkYi9j b25maWcvczM5MC9zMzkweC5tdAlNb24gRmViIDI2IDE3OjU3OjQ5IDIwMDEK QEAgLTAsMCArMSw1IEBACisjIFRhcmdldDogUzM5MHggcnVubmluZyBMaW51 eAorVE1fRklMRT0gdG0tbGludXguaAorTVRfQ0ZMQUdTPSAtRENPTkZJR19B UkNIX1MzOTBYCitUREVQRklMRVM9czM5MC10ZGVwLm8KK0dEQl9NVUxUSV9B UkNIPTIKZGlmZiAtdSAtciAtTiBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAv dG0tbGludXguaCBzcmMubmV3L2dkYi9jb25maWcvczM5MC90bS1saW51eC5o Ci0tLSBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvdG0tbGludXguaAlUaHUg SmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZy9z MzkwL3RtLWxpbnV4LmgJTW9uIEZlYiAyNiAxNzo1Nzo0OSAyMDAxCkBAIC0w LDAgKzEsNjYgQEAKKy8qIFRhcmdldCBkZWZpbml0aW9ucyBmb3IgR0RCIGZv ciBhIHMzOTAgcnVubmluZyBMaW51eC4KKyAgIENvcHlyaWdodCAoQykgMTk5 OS0yMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29u dHJpYnV0ZWQgYnkgRC5KLiBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20s YmFycm93X2RqQHlhaG9vLmNvbSkKKyAgIGZvciBJQk0gRGV1dHNjaGxhbmQg RW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uLgorCisgICBUaGlz IGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91 bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBC b3N0b24sIE1BCisgICAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVm IFRNX0xJTlVYX0gKKyNkZWZpbmUgVE1fTElOVVhfSAorI2luY2x1ZGUgImNv bmZpZy90bS1saW51eC5oIgorI2luY2x1ZGUgInMzOTAvdG0tczM5MC5oIgor CisKKyNkZWZpbmUgUzM5MF9TSUdOQUxfRlJBTUVTSVpFICAoR0RCX1RBUkdF VF9JU19FU0FNRSA/IDE2MDo5NikKKyNkZWZpbmUgczM5MF9OUl9zaWdyZXR1 cm4gICAgICAgICAgMTE5CisjZGVmaW5lIHMzOTBfTlJfcnRfc2lncmV0dXJu ICAgICAgIDE3MworI2RlZmluZSBTMzkwX1NJR0NPTlRFWFRfTlNJRyAgICAg IDY0CisjZGVmaW5lIFMzOTBfU0lHQ09OVEVYVF9OU0lHX0JQVyAgMzIKKy8q IFNpemUgb2Ygc3RhY2sgZnJhbWUgYWxsb2NhdGVkIHdoZW4gY2FsbGluZyBz aWduYWwgaGFuZGxlci4gKi8KKyNkZWZpbmUgUzM5MF9TSUdDT05URVhUX05T SUdfV09SRFMJKFMzOTBfU0lHQ09OVEVYVF9OU0lHIC8gUzM5MF9TSUdDT05U RVhUX05TSUdfQlBXKQorCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fczM5 MF9yZWdzX2NvbW1vbiByZWdzOworICBfX3MzOTBfZnBfcmVncyBmcHJlZ3M7 Cit9CitzMzkwX3NpZ3JlZ3M7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIF9f dTMyIG9sZG1hc2tbUzM5MF9TSUdDT05URVhUX05TSUdfV09SRFNdOworICBz MzkwX3NpZ3JlZ3MgKnNyZWdzOworfQorczM5MF9zaWdjb250ZXh0OworCit0 eXBlZGVmIHN0cnVjdAoreworICBfX3MzOTB4X3JlZ3NfY29tbW9uIHJlZ3M7 CisgIF9fczM5MF9mcF9yZWdzIGZwcmVnczsKK30KK3MzOTB4X3NpZ3JlZ3M7 CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fdTMyIG9sZG1hc2tbUzM5MF9T SUdDT05URVhUX05TSUdfV09SRFNdOworICBzMzkweF9zaWdyZWdzICpzcmVn czsKK30KK3MzOTB4X3NpZ2NvbnRleHQ7CisKKyNlbmRpZiAvKiBUTV9MSU5V WF9IICovCmRpZmYgLXUgLXIgLU4gc3JjLm9yaWcvZ2RiL2NvbmZpZy9zMzkw L3RtLXMzOTAuaCBzcmMubmV3L2dkYi9jb25maWcvczM5MC90bS1zMzkwLmgK LS0tIHNyYy5vcmlnL2dkYi9jb25maWcvczM5MC90bS1zMzkwLmgJVGh1IEph biAgMSAwMTowMDowMCAxOTcwCisrKyBzcmMubmV3L2dkYi9jb25maWcvczM5 MC90bS1zMzkwLmgJVHVlIEZlYiAyNyAxNjo0NzowMyAyMDAxCkBAIC0wLDAg KzEsMzkwIEBACisvKiBNYWNybyBkZWZpbml0aW9ucyBmb3IgR0RCIG9uIGFu IFMzOTAuCisgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEQuSi4g QmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5j b20pCisgICBmb3IgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgs IElCTSBDb3Jwb3JhdGlvbi4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0RCLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y CisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAg MDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmICFkZWZpbmVkKFRNX1MzOTBf SCkKKyNkZWZpbmUgVE1fUzM5MF9IIDEKKyNpbmNsdWRlIDxhc20vdHlwZXMu aD4KKyNpZiBHREJfTVVMVElfQVJDSAorI2RlZmluZSBHREJfVEFSR0VUX0lT X0VTQU1FIChUQVJHRVRfQVJDSElURUNUVVJFLT5tYWNoID09IGJmZF9tYWNo X3MzOTBfZXNhbWUpCisjZWxzZQorI2lmIENPTkZJR19BUkNIX1MzOTBYCisj ZGVmaW5lIEdEQl9UQVJHRVRfSVNfRVNBTUUgKDEpCisjZWxzZQorI2RlZmlu ZSBHREJfVEFSR0VUX0lTX0VTQU1FICgwKQorI2VuZGlmIC8qIENPTkZJR19B UkNIX1MzOTBYICovCisjZW5kaWYgLyogR0RCX01VTFRJX0FSQ0ggKi8KKwor I2lmIGRlZmluZWQoUzM5MF9UREVQKSAmJiBHREJfTVVMVElfQVJDSAorI2Rl ZmluZSBTMzkwX1JFR0lTVEVSX1NJWkUgUkVHSVNURVJfU0laRQorI2Vsc2UK KyNpZiBDT05GSUdfQVJDSF9TMzkwWAorI2RlZmluZSBTMzkwX1JFR0lTVEVS X1NJWkUgICg4KQorI2Vsc2UKKyNkZWZpbmUgUzM5MF9SRUdJU1RFUl9TSVpF ICAoNCkKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLworI2VuZGlm IC8qIGRlZmluZWQoUzM5MF9UREVQKSAmJiBHREJfTVVMVElfQVJDSCAqLwor CisKKyNkZWZpbmUgUzM5MF9TVEFDS19GUkFNRV9PVkVSSEVBRCAgKEdEQl9U QVJHRVRfSVNfRVNBTUUgPyAxNjA6OTYpCisjZGVmaW5lIFMzOTBfTlVNX0dQ UlMgICAgICAoMTYpCisjZGVmaW5lIFMzOTBfR1BSX1NJWkUgICAgICBTMzkw X1JFR0lTVEVSX1NJWkUKKyNkZWZpbmUgUzM5MF9QU1dfTUFTS19TSVpFIFMz OTBfUkVHSVNURVJfU0laRQorI2RlZmluZSBTMzkwX1BTV19BRERSX1NJWkUg UzM5MF9SRUdJU1RFUl9TSVpFCisjZGVmaW5lIFMzOTBfTlVNX0ZQUlMgICAg ICAoMTYpCisjZGVmaW5lIFMzOTBfRlBSX1NJWkUgICAgICAoOCkKKyNkZWZp bmUgUzM5MF9GUENfU0laRSAgICAgICg0KQorI2RlZmluZSBTMzkwX0ZQQ19Q QURfU0laRSAgKDQpCS8qIGdjYyBpbnNpc3RzIG9uIGFsaWduaW5nIHRoZSBm cHJlZ3MgKi8KKyNkZWZpbmUgUzM5MF9OVU1fQ1JTICAgICAgICgxNikKKyNk ZWZpbmUgUzM5MF9DUl9TSVpFICAgICAgIFMzOTBfUkVHSVNURVJfU0laRQor I2RlZmluZSBTMzkwX05VTV9BQ1JTICAgICAgKDE2KQorI2RlZmluZSBTMzkw X0FDUl9TSVpFICAgICAgKDQpCisKKyNkZWZpbmUgUzM5MF9BQ1IwX09GRlNF VCAoKFMzOTBfUFNXX01BU0tfU0laRStTMzkwX1BTV19BRERSX1NJWkUpKyhT MzkwX0dQUl9TSVpFKlMzOTBfTlVNX0dQUlMpKQorI2RlZmluZSBTMzkwX0NS MF9PRkZTRVQgKFMzOTBfQUNSMF9PRkZTRVQrKFMzOTBfQUNSX1NJWkUrUzM5 MF9OVU1fQUNSUykpCisjZGVmaW5lIFMzOTBfRlBDX09GRlNFVCAoUzM5MF9D UjBfT0ZGU0VUKyhTMzkwX0NSX1NJWkUqUzM5MF9OVU1fQ1JTKSkKKyNkZWZp bmUgUzM5MF9GUDBfT0ZGU0VUIChTMzkwX0ZQQ19PRkZTRVQrKFMzOTBfRlBD X1NJWkUrUzM5MF9GUENfUEFEX1NJWkUpKQorI2RlZmluZSBTMzkwX0dQUjZf U1RBQ0tfT0ZGU0VUIChHREJfVEFSR0VUX0lTX0VTQU1FID8gNDg6MjQpCisK K3R5cGVkZWYgc3RydWN0Cit7CisgIF9fdTMyIG1hc2s7CisgIF9fdTMyIGFk ZHI7Cit9IHMzOTBfcHN3X3QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgp KSk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fdTY0IG1hc2s7CisgIF9f dTY0IGFkZHI7Cit9IHMzOTB4X3Bzd190IF9fYXR0cmlidXRlX18gKChhbGln bmVkICg4KSkpOworCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0Cisg IHsKKyAgICBfX3UzMiBoaTsKKyAgICBfX3UzMiBsbzsKKyAgfQorICBmcDsK KyAgX191MzIgZjsKK30gczM5MF9mcmVnX3Q7CisKK3R5cGVkZWYgc3RydWN0 Cit7CisgIC8qIFRoZSBjb21waWxlciBhcHBlYXJzIHRvIGxpa2UgYWxpZ25p bmcgZnJlZ190IG9uIGFuIDggYnl0ZSBib3VuZGFyeQorICAgICBzbyBJIGFs d2F5cyBhY2Nlc3MgZnByZWdzLCB0aGlzIHdhcyBjYXVzaW5nIGZ1biB3aGVu IEkgd2FzIGRvaW5nCisgICAgIGNvZXJzaW9ucy4gKi8KKyAgX191MzIgZnBj OworICBzMzkwX2ZyZWdfdCBmcHJzW1MzOTBfTlVNX0ZQUlNdOworfSBfX3Mz OTBfZnBfcmVnczsKKworLyogZ2RiIHN0cnVjdHVyZXMgJiB0aGUga2VybmVs IGhhdmUgdGhpcyBtdWNoIGFsd2F5cyBpbiBjb21tb24gKi8KKyNkZWZpbmUg X19TMzkwX1JFR1NfQ09NTU9OICAgICBcCitzMzkwX3Bzd190IHBzdzsgICAg ICAgICAgICAgICAgXAorX191MzIgZ3Byc1tTMzkwX05VTV9HUFJTXTsgICAg IFwKK19fdTMyICBhY3JzW1MzOTBfTlVNX0FDUlNdOworCisjZGVmaW5lIF9f UzM5MFhfUkVHU19DT01NT04gICAgXAorczM5MHhfcHN3X3QgcHN3OyAgICAg ICAgICAgICAgIFwKK19fdTY0IGdwcnNbUzM5MF9OVU1fR1BSU107ICAgICBc CitfX3UzMiAgYWNyc1tTMzkwX05VTV9BQ1JTXTsKKworCit0eXBlZGVmIHN0 cnVjdAoreworX19TMzkwX1JFR1NfQ09NTU9OCit9IF9fczM5MF9yZWdzX2Nv bW1vbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKK19fUzM5MFhfUkVHU19DT01N T04KK30gX19zMzkweF9yZWdzX2NvbW1vbjsKKworCisKKy8qIFNlcXVlbmNl IG9mIGJ5dGVzIGZvciBicmVha3BvaW50IGlsbGVnYWwgaW5zdHJ1Y3Rpb24u ICAqLworI2RlZmluZSBTMzkwX0JSRUFLUE9JTlQgezB4MCwweDF9CisjZGVm aW5lIFMzOTBfQlJFQUtQT0lOVF9VMTYgKChfX3UxNikweDAwMDEpCisjZGVm aW5lIFMzOTBfU1lTQ0FMTF9PUENPREUgKChfX3UxNikweDBhMDApCisjZGVm aW5lIFMzOTBfU1lTQ0FMTF9TSVpFICAgMgorCisjZGVmaW5lIFMzOTBfTUFY X0lOU1RSX1NJWkUgNgorI2RlZmluZSBTMzkwX05VTV9SRUdTICAgICAgKDIr UzM5MF9OVU1fR1BSUytTMzkwX05VTV9BQ1JTK1MzOTBfTlVNX0NSUysxK1Mz OTBfTlVNX0ZQUlMpCisjZGVmaW5lIFMzOTBfRklSU1RfQUNSICAgICAoMitT MzkwX05VTV9HUFJTKQorI2RlZmluZSBTMzkwX0xBU1RfQUNSICAgICAgKFMz OTBfRklSU1RfQUNSK1MzOTBfTlVNX0FDUlMtMSkKKyNkZWZpbmUgUzM5MF9G SVJTVF9DUiAgICAgIChTMzkwX0ZJUlNUX0FDUitTMzkwX05VTV9BQ1JTKQor I2RlZmluZSBTMzkwX0xBU1RfQ1IgICAgICAgKFMzOTBfRklSU1RfQ1IrUzM5 MF9OVU1fQ1JTLTEpCisKKyNkZWZpbmUgUzM5MF9QU1dNX1JFR05VTSAgICAw CisjZGVmaW5lIFMzOTBfUENfUkVHTlVNICAgICAgMQorI2RlZmluZQlTMzkw X0dQMF9SRUdOVU0gICAgIDIJLyogR1BSIHJlZ2lzdGVyIDAgKi8KKyNkZWZp bmUgUzM5MF9HUF9MQVNUX1JFR05VTSAoUzM5MF9HUDBfUkVHTlVNK1MzOTBf TlVNX0dQUlMtMSkKKy8qIFVzdWFsbHkgcmV0dXJuIGFkZHJlc3MgKi8KKyNk ZWZpbmUgUzM5MF9SRVRBRERSX1JFR05VTSAoUzM5MF9HUDBfUkVHTlVNKzE0 KQorLyogQ29udGFpbnMgYWRkcmVzcyBvZiB0b3Agb2Ygc3RhY2sgKi8KKyNk ZWZpbmUgUzM5MF9TUF9SRUdOVU0gICAgICAoUzM5MF9HUDBfUkVHTlVNKzE1 KQorLyogbmVlZGVkIGluIGZpbmR2YXIuYyBzdGlsbCAqLwkKKyNkZWZpbmUg UzM5MF9GUF9SRUdOVU0gICAgIFMzOTBfU1BfUkVHTlVNCQorI2RlZmluZSBT MzkwX0ZSQU1FX1JFR05VTSAgKFMzOTBfR1AwX1JFR05VTSsxMSkKKyNkZWZp bmUgUzM5MF9GUENfUkVHTlVNICAgIChTMzkwX0dQMF9SRUdOVU0rUzM5MF9O VU1fR1BSUytTMzkwX05VTV9BQ1JTK1MzOTBfTlVNX0NSUykKKy8qIEZQUiAo RmxvYXRpbmcgcG9pbnQpIHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzM5MF9G UDBfUkVHTlVNICAgIChTMzkwX0ZQQ19SRUdOVU0rMSkKKy8qIExhc3QgZmxv YXRpbmcgcG9pbnQgcmVnaXN0ZXIgKi8JCisjZGVmaW5lIFMzOTBfRlBMQVNU X1JFR05VTSAoUzM5MF9GUDBfUkVHTlVNK1MzOTBfTlVNX0ZQUlMtMSkJCisj ZGVmaW5lIFMzOTBfTEFTVF9SRUdOVU0gICBTMzkwX0ZQTEFTVF9SRUdOVU0K KworLyogVGhlIHRvcCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBhcyBzaW1pbGFy IGFzIHBvc3NpYmxlIHRvIGEgCisgICBwdF9yZWdzIHN0cnVjdHVyZSB0byBz aW1wbGlmeSBjb2RlICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX1MzOTBf UkVHU19DT01NT04gCisgIF9fdTMyIGNyc1tTMzkwX05VTV9DUlNdOworICBf X3MzOTBfZnBfcmVncyBmcF9yZWdzOworfSBzMzkwX2dkYl9yZWdzIF9fYXR0 cmlidXRlX18gKChwYWNrZWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAg X19TMzkwWF9SRUdTX0NPTU1PTiAKKyAgX191NjQgY3JzW1MzOTBfTlVNX0NS U107CisgIF9fczM5MF9mcF9yZWdzIGZwX3JlZ3M7Cit9IHMzOTB4X2dkYl9y ZWdzIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZGVmaW5lIFMz OTBfUkVHSVNURVJfTkFNRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorInBzd20iLCJw c3dhIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisiZ3ByMCIsImdwcjEiLCJncHIyIiwiZ3ByMyIsImdw cjQiLCJncHI1IiwiZ3ByNiIsImdwcjciLCAgICAgICAgIFwKKyJncHI4Iiwi Z3ByOSIsImdwcjEwIiwiZ3ByMTEiLCJncHIxMiIsImdwcjEzIiwiZ3ByMTQi LCJncHIxNSIsICAgXAorImFjcjAiLCJhY3IxIiwiYWNyMiIsImFjcjMiLCJh Y3I0IiwiYWNyNSIsImFjcjYiLCJhY3I3IiwgICAgICAgICBcCisiYWNyOCIs ImFjcjkiLCJhY3IxMCIsImFjcjExIiwiYWNyMTIiLCJhY3IxMyIsImFjcjE0 IiwiYWNyMTUiLCAgIFwKKyJjcjAiLCJjcjEiLCJjcjIiLCJjcjMiLCJjcjQi LCJjcjUiLCJjcjYiLCJjcjciLCAgICAgICAgICAgICAgICAgXAorImNyOCIs ImNyOSIsImNyMTAiLCJjcjExIiwiY3IxMiIsImNyMTMiLCJjcjE0IiwiY3Ix NSIsICAgICAgICAgICBcCisiZnBjIiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyJmcHIw IiwiZnByMSIsImZwcjIiLCJmcHIzIiwiZnByNCIsImZwcjUiLCJmcHI2Iiwi ZnByNyIsICAgICAgICAgXAorImZwcjgiLCJmcHI5IiwiZnByMTAiLCJmcHIx MSIsImZwcjEyIiwiZnByMTMiLCJmcHIxNCIsImZwcjE1IiAgICBcCit9CisK KworLyogaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgZm9yIGNhbGwgZHVtbXkgaXMg YXMgZm9sbG93cworICAgYnJhcyAlcjEsLis4ICAgICAgOyAweEE3MTUwMDA0 ICAgCisgICBsb25nIGJhc3JhZGRyICAgICA7IDB4MDAwMDAwMDAKKyAgIGwg ICAgJXIxLDAoJXIxKSAgIDsgMHg1ODEwMTAwMAorICAgYmFzciAlcjE0LCVy MSAgICAgOyAweDBERTEKKyAgIGJyZWFrcG9pbnQgICAgICAgIDsgMHgwMDAx ICovCisjZGVmaW5lIFMzOTBfQ0FMTF9EVU1NWSB7MHhBNzE1MDAwNCwweDAw MDAwMDAwLDB4NTgxMDEwMDAsMHgwREUxMDAwMHxTMzkwX0JSRUFLUE9JTlRf VTE2fQorI2RlZmluZSBTMzkwX0NBTExfRFVNTVlfTEVOR1RIIDE2CisjZGVm aW5lIFMzOTBfQ0FMTF9BRERSX09GRlNFVCAgNAorCisKKy8qIGluc3RydWN0 aW9uIHNlcXVlbmNlIGZvciBjYWxsIGR1bW15IGlzIGFzIGZvbGxvd3MKKyAg IGJyYXMgJXIxLC4rMTIgICAgIDsgMHhBNzE1MDAwNiAgIAorICAgbG9uZyBi YXNyYWRkciAgICAgOyAweDAwMDAwMDAwMDAwMDAwMDAKKyAgIGxnICAgJXIx LDAoJXIxKSAgIDsgMHhFMzEwMTAwMDAwMDQKKyAgIGJhc3IgJXIxNCwlcjEg ICAgIDsgMHgwREUxCisgICBicmVha3BvaW50ICAgICAgICA7IDB4MDAwMSAq LworCisjZGVmaW5lIFMzOTBYX0NBTExfRFVNTVkgezB4QTcxNTAwMDYwMDAw MDAwMCwweDAwMDAwMDAwRTMxMDEwMDAsIFwKKzB4MDAwNDBERTEwMDAwMDAw MHxTMzkwX0JSRUFLUE9JTlRfVTE2PDwxNn0KKyNkZWZpbmUgUzM5MFhfQ0FM TF9EVU1NWV9MRU5HVEggMjIKKworI2RlZmluZSBTMzkwX1JFR0lTVEVSX0JZ VEVTICAgIFwKKygoUzM5MF9GUDBfT0ZGU0VUKSsoUzM5MF9GUFJfU0laRSpT MzkwX05VTV9GUFJTKSkKKworCisjaWYgIUdEQl9NVUxUSV9BUkNICisjaWYg Q09ORklHX0FSQ0hfUzM5MFgKKyNkZWZpbmUgQ0FMTF9EVU1NWSAgICAgICAg IFMzOTBYX0NBTExfRFVNTVkKKyNkZWZpbmUgQ0FMTF9EVU1NWV9MRU5HVEgg IFMzOTBYX0NBTExfRFVNTVlfTEVOR1RICitpbnQgczM5MHhfcmVnaXN0ZXJf cmF3X3NpemUgKGludCByZWdfbnIpOworI2RlZmluZSBSRUdJU1RFUl9SQVdf U0laRShyZWdfbnIpIHMzOTB4X3JlZ2lzdGVyX3Jhd19zaXplKHJlZ19ucikK Kworc3RydWN0IHR5cGUgKnMzOTB4X3JlZ2lzdGVyX3ZpcnR1YWxfdHlwZSAo aW50IHJlZ25vKTsKKyNkZWZpbmUgUkVHSVNURVJfVklSVFVBTF9UWVBFKHJl Z25vKSBzMzkweF9yZWdpc3Rlcl92aXJ0dWFsX3R5cGUocmVnbm8pCisKKyNk ZWZpbmUgVEFSR0VUX0xPTkdfQklUICg4ICogVEFSR0VUX0NIQVJfQklUKQor I2RlZmluZSBUQVJHRVRfTE9OR19MT05HX0JJVCAoVEFSR0VUX0xPTkdfQklU KQorI2RlZmluZSBUQVJHRVRfUFRSX0JJVCAoVEFSR0VUX0xPTkdfQklUKQor I2Vsc2UKKyNkZWZpbmUgQ0FMTF9EVU1NWSAgICAgICAgIFMzOTBfQ0FMTF9E VU1NWQorI2RlZmluZSBDQUxMX0RVTU1ZX0xFTkdUSCAgUzM5MF9DQUxMX0RV TU1ZX0xFTkdUSAoraW50IHMzOTBfcmVnaXN0ZXJfcmF3X3NpemUgKGludCBy ZWdfbnIpOworI2RlZmluZSBSRUdJU1RFUl9SQVdfU0laRShyZWdfbnIpIHMz OTBfcmVnaXN0ZXJfcmF3X3NpemUocmVnX25yKQorCitzdHJ1Y3QgdHlwZSAq czM5MF9yZWdpc3Rlcl92aXJ0dWFsX3R5cGUgKGludCByZWdubyk7CisjZGVm aW5lIFJFR0lTVEVSX1ZJUlRVQUxfVFlQRShyZWdubykgczM5MF9yZWdpc3Rl cl92aXJ0dWFsX3R5cGUocmVnbm8pCisjZGVmaW5lIEFERFJfQklUU19SRU1P VkUoYWRkcikgKChhZGRyKSYweDdmZmZmZmZmKQorCisjZW5kaWYgLyogQ09O RklHX0FSQ0hfUzM5MFggKi8KKyNkZWZpbmUgQkVMSUVWRV9QQ0NfUFJPTU9U SU9OIDAKKyNkZWZpbmUgVVNFX0dFTkVSSUNfRFVNTVlfRlJBTUVTIDAKKyNk ZWZpbmUgQ0FMTF9EVU1NWV9MT0NBVElPTiBPTl9TVEFDSworI2RlZmluZSBD QUxMX0RVTU1ZX1NUQVJUX09GRlNFVCAwCisKKyNkZWZpbmUgUkVHSVNURVJf QllURVMgICBTMzkwX1JFR0lTVEVSX0JZVEVTCisjZGVmaW5lIFBDX1JFR05V TSAgICAgICAgUzM5MF9QQ19SRUdOVU0KKyNkZWZpbmUgU1BfUkVHTlVNICAg ICAgICBTMzkwX1NQX1JFR05VTQorI2RlZmluZSBGUF9SRUdOVU0gICAgICAg IFMzOTBfRlBfUkVHTlVNCisjZGVmaW5lIEZQMF9SRUdOVU0gICAgICAgUzM5 MF9GUDBfUkVHTlVNCisjZGVmaW5lIE5VTV9SRUdTICAgICAgICAgUzM5MF9O VU1fUkVHUworI2RlZmluZSBOVU1fRlBSUyAgICAgICAgIFMzOTBfTlVNX0ZQ UlMKKyNkZWZpbmUgRlAwX09GRlNFVCAgICAgICBTMzkwX0ZQMF9PRkZTRVQK KyNkZWZpbmUgRlBSX1NJWkUgICAgICAgICBTMzkwX0ZQUl9TSVpFCisjZGVm aW5lIFJFR0lTVEVSX1NJWkUgICAgUzM5MF9SRUdJU1RFUl9TSVpFCisKKyNk ZWZpbmUgUkVHSVNURVJfVklSVFVBTF9TSVpFKHJlZ19ucikgUkVHSVNURVJf UkFXX1NJWkUocmVnX25yKQorCisjZGVmaW5lIFRBUkdFVF9CWVRFX09SREVS IEJJR19FTkRJQU4KKworLyogVXNlZCBmb3IgZXhhbXBsZSBpbiB2YWxwcmlu dC5jOnByaW50X2Zsb2F0aW5nKCkgdG8gZW5hYmxlIGNoZWNraW5nCisgICBm b3IgTmFOJ3MgKi8KKyNkZWZpbmUgSUVFRV9GTE9BVCAoMSkKKworLyogT2Zm c2V0IGZyb20gYWRkcmVzcyBvZiBmdW5jdGlvbiB0byBzdGFydCBvZiBpdHMg Y29kZS4KKyAgIFplcm8gb24gbW9zdCBtYWNoaW5lcy4gICovCisjZGVmaW5l IEZVTkNUSU9OX1NUQVJUX09GRlNFVCAwCisKKy8qIFN0YWNrIGdyb3dzIGRv d253YXJkLiAgKi8KKyNkZWZpbmUgSU5ORVJfVEhBTihsaHMscmhzKSAoKGxo cykgPCAocmhzKSkKKworLyogTGFyZ2VzdCB2YWx1ZSBSRUdJU1RFUl9SQVdf U0laRSBjYW4gaGF2ZS4gICovCisjZGVmaW5lIE1BWF9SRUdJU1RFUl9SQVdf U0laRSA4CisKKy8qIExhcmdlc3QgdmFsdWUgUkVHSVNURVJfVklSVFVBTF9T SVpFIGNhbiBoYXZlLiAgKi8KKyNkZWZpbmUgTUFYX1JFR0lTVEVSX1ZJUlRV QUxfU0laRSA4CisKKyNkZWZpbmUgQlJFQUtQT0lOVCBTMzkwX0JSRUFLUE9J TlQKKy8qIEFtb3VudCBQQyBtdXN0IGJlIGRlY3JlbWVudGVkIGJ5IGFmdGVy IGEgYnJlYWtwb2ludC4KKyAgIFRoaXMgaXMgb2Z0ZW4gdGhlIG51bWJlciBv ZiBieXRlcyBpbiBCUkVBS1BPSU5UCisgICBidXQgbm90IGFsd2F5cy4gICov CisjZGVmaW5lIERFQ1JfUENfQUZURVJfQlJFQUsgMgorCit2b2lkIHMzOTBf cG9wX2ZyYW1lICh2b2lkKTsKKyNkZWZpbmUgUE9QX0ZSQU1FCXMzOTBfcG9w X2ZyYW1lKCkKKwordm9pZCBzMzkwX3B1c2hfZHVtbXlfZnJhbWUgKHZvaWQp OworI2RlZmluZSBQVVNIX0RVTU1ZX0ZSQU1FCXMzOTBfcHVzaF9kdW1teV9m cmFtZSgpCisKK3N0cnVjdCB2YWx1ZTsKKworQ09SRV9BRERSIHMzOTBfcHVz aF9hcmd1bWVudHMgKGludCBuYXJncywgc3RydWN0IHZhbHVlICoqYXJncywg Q09SRV9BRERSIHNwLAorCQkJICAgICAgIGludCBzdHJ1Y3RfcmV0dXJuLCBD T1JFX0FERFIgc3RydWN0X2FkZHIpOworI2RlZmluZQlQVVNIX0FSR1VNRU5U UyhuYXJncywgYXJncywgc3AsIHN0cnVjdF9yZXR1cm4sIHN0cnVjdF9hZGRy KSBcCisgIHNwID0gczM5MF9wdXNoX2FyZ3VtZW50cygobmFyZ3MpLCAoYXJn cyksIChzcCksIChzdHJ1Y3RfcmV0dXJuKSwgKHN0cnVjdF9hZGRyKSkKKwor aW50IHMzOTBfcGNfaW5fY2FsbF9kdW1teSAoQ09SRV9BRERSIHBjLCBDT1JF X0FERFIgc3AsCisJCQkgICBDT1JFX0FERFIgZnJhbWVfYWRkcmVzcyk7Cisj ZGVmaW5lIFBDX0lOX0NBTExfRFVNTVkocGMsIHNwLCBmcmFtZV9hZGRyZXNz KSBcCitzMzkwX3BjX2luX2NhbGxfZHVtbXkocGMsc3AsZnJhbWVfYWRkcmVz cykKKwordm9pZCBzMzkwX2ZpeF9jYWxsX2R1bW15IChjaGFyICpkdW1teSwg Q09SRV9BRERSIHBjLCBDT1JFX0FERFIgZnVuLAorCQkJICBpbnQgbmFyZ3Ms IHN0cnVjdCB2YWx1ZSAqKmFyZ3MsCisJCQkgIHN0cnVjdCB0eXBlICp2YWx1 ZV90eXBlLCBpbnQgdXNpbmdfZ2NjKTsKKyNkZWZpbmUgRklYX0NBTExfRFVN TVkoZHVtbXksIHBjLCBmdW4sIG5hcmdzLCBhcmdzLCB2YWx1ZV90eXBlLCB1 c2luZ19nY2MpIFwKK3MzOTBfZml4X2NhbGxfZHVtbXkoZHVtbXkscGMsZnVu LG5hcmdzLGFyZ3MsdmFsdWVfdHlwZSx1c2luZ19nY2MpOworCisKK3ZvaWQg czM5MF9zdG9yZV9zdHJ1Y3RfcmV0dXJuIChDT1JFX0FERFIgYWRkciwgQ09S RV9BRERSIHNwKTsKKyNkZWZpbmUgU1RPUkVfU1RSVUNUX1JFVFVSTihhZGRy LHNwKSBcCitzMzkwX3N0b3JlX3N0cnVjdF9yZXR1cm4oYWRkcixzcCk7CisK Ky8qIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgYXQgc3RhcnQgb2YgYXJnbGlz dCB0aGF0IGFyZSBub3QgcmVhbGx5IGFyZ3MuICAqLworI2RlZmluZSBGUkFN RV9BUkdTX1NLSVAgMAorCitDT1JFX0FERFIgczM5MF9za2lwX3Byb2xvZ3Vl IChDT1JFX0FERFIgcGMpOworI2RlZmluZSBTS0lQX1BST0xPR1VFKHBjKSBz MzkwX3NraXBfcHJvbG9ndWUocGMpOworCitDT1JFX0FERFIgczM5MF9mcmFt ZV9hcmdzX2FkZHJlc3MgKHN0cnVjdCBmcmFtZV9pbmZvICpmaSk7CisjZGVm aW5lIEZSQU1FX0FSR1NfQUREUkVTUyhmaSkgczM5MF9mcmFtZV9hcmdzX2Fk ZHJlc3MoZmkpCisKKyNkZWZpbmUgRlJBTUVfTE9DQUxTX0FERFJFU1MoZmkp CUZSQU1FX0FSR1NfQUREUkVTUyhmaSkKKyNkZWZpbmUgRlJBTUVfTlVNX0FS R1MoZmkpICgtMSkJLyogV2UgY2FuJ3QgZG8gdGhpcyAqLwordm9pZCBzMzkw X2V4dHJhY3RfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqdmFsdHlwZSwg Y2hhciAqcmVnYnVmLAorCQkJCWNoYXIgKnZhbGJ1Zik7CisjZGVmaW5lIEVY VFJBQ1RfUkVUVVJOX1ZBTFVFKHZhbHR5cGUscmVnYnVmLHZhbGJ1ZikgXAor ICBzMzkwX2V4dHJhY3RfcmV0dXJuX3ZhbHVlKHZhbHR5cGUscmVnYnVmLHZh bGJ1ZikKKwordm9pZCBzMzkwX3N0b3JlX3JldHVybl92YWx1ZSAoc3RydWN0 IHR5cGUgKnZhbHR5cGUsIGNoYXIgKnZhbGJ1Zik7CisjZGVmaW5lIFNUT1JF X1JFVFVSTl9WQUxVRSh2YWx0eXBlLHZhbGJ1ZikgXAorIHMzOTBfc3RvcmVf cmV0dXJuX3ZhbHVlKHZhbHR5cGUsdmFsYnVmKQorCisvKiBSZXR1cm4gc2F2 ZWQgUEMgZnJvbSBhIGZyYW1lICovCitDT1JFX0FERFIgczM5MF9mcmFtZV9z YXZlZF9wYyAoc3RydWN0IGZyYW1lX2luZm8gKmZpKTsKKyNkZWZpbmUgRlJB TUVfU0FWRURfUEMoZmkpIHMzOTBfZnJhbWVfc2F2ZWRfcGMoZmkpCisKKy8q IEZSQU1FX0NIQUlOIHRha2VzIGEgZnJhbWUncyBub21pbmFsIGFkZHJlc3MK KyAgIGFuZCBwcm9kdWNlcyB0aGUgZnJhbWUncyBjaGFpbi1wb2ludGVyLiAq LworQ09SRV9BRERSIHMzOTBfZnJhbWVfY2hhaW4gKHN0cnVjdCBmcmFtZV9p bmZvICp0aGlzZnJhbWUpOworI2RlZmluZSBGUkFNRV9DSEFJTih0aGlzZnJh bWUpIHMzOTBfZnJhbWVfY2hhaW4odGhpc2ZyYW1lKQorCisvKiBJbW1lZGlh dGVseSBhZnRlciBhIGZ1bmN0aW9uIGNhbGwsIHJldHVybiB0aGUgc2F2ZWQg cGMuCisgICBDYW4ndCBnbyB0aHJvdWdoIHRoZSBmcmFtZXMgZm9yIHRoaXMg YmVjYXVzZSBvbiBzb21lIG1hY2hpbmVzCisgICB0aGUgbmV3IGZyYW1lIGlz IG5vdCBzZXQgdXAgdW50aWwgdGhlIG5ldyBmdW5jdGlvbiBleGVjdXRlcwor ICAgc29tZSBpbnN0cnVjdGlvbnMuICAqLworQ09SRV9BRERSIHMzOTBfc2F2 ZWRfcGNfYWZ0ZXJfY2FsbCAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lKTsK KyNkZWZpbmUJU0FWRURfUENfQUZURVJfQ0FMTChmcmFtZSkgczM5MF9zYXZl ZF9wY19hZnRlcl9jYWxsKGZyYW1lKQorCit2b2lkIHMzOTBfd3JpdGVfZnAg KENPUkVfQUREUiB2YWwpOworI2RlZmluZSBUQVJHRVRfV1JJVEVfRlAodmFs KSBzMzkwX3dyaXRlX2ZwKHZhbCkKKworQ09SRV9BRERSIHMzOTBfcmVhZF9m cCAoKTsKKyNkZWZpbmUgVEFSR0VUX1JFQURfRlAoKSAgIHMzOTBfcmVhZF9m cCgpCisKK3ZvaWQgczM5MF9mcmFtZV9pbml0X3NhdmVkX3JlZ3MgKHN0cnVj dCBmcmFtZV9pbmZvICpmaSk7CisjZGVmaW5lIEZSQU1FX0lOSVRfU0FWRURf UkVHUyhmaSkgczM5MF9mcmFtZV9pbml0X3NhdmVkX3JlZ3MoZmkpOworCit2 b2lkIHMzOTBfaW5pdF9mcmFtZV9wY19maXJzdCAoaW50IG5leHRfZnJvbWxl YWYsIHN0cnVjdCBmcmFtZV9pbmZvICpmaSk7CisjZGVmaW5lCUlOSVRfRlJB TUVfUENfRklSU1QoZnJvbWxlYWYsIGZpKSBzMzkwX2luaXRfZnJhbWVfcGNf Zmlyc3QoKGZyb21sZWFmKSwoZmkpKQorCit2b2lkIHMzOTBfaW5pdF9leHRy YV9mcmFtZV9pbmZvIChpbnQgZnJvbWxlYWYsIHN0cnVjdCBmcmFtZV9pbmZv ICpmaSk7CisjZGVmaW5lCUlOSVRfRVhUUkFfRlJBTUVfSU5GTyhmcm9tbGVh ZiwgZmkpIHMzOTBfaW5pdF9leHRyYV9mcmFtZV9pbmZvKChmcm9tbGVhZiks KGZpKSkKKworLyogQSBtYWNybyB0aGF0IHRlbGxzIHVzIHdoZXRoZXIgdGhl IGZ1bmN0aW9uIGludm9jYXRpb24gcmVwcmVzZW50ZWQKKyAgIGJ5IEZJIGRv ZXMgbm90IGhhdmUgYSBmcmFtZSBvbiB0aGUgc3RhY2sgYXNzb2NpYXRlZCB3 aXRoIGl0LiAgSWYgaXQKKyAgIGRvZXMgbm90LCBGUkFNRUxFU1MgaXMgc2V0 IHRvIDEsIGVsc2UgMC4gICovCitpbnQgczM5MF9mcmFtZWxlc3NfZnVuY3Rp b25faW52b2NhdGlvbiAoc3RydWN0IGZyYW1lX2luZm8gKmZpKTsKKyNkZWZp bmUgRlJBTUVMRVNTX0ZVTkNUSU9OX0lOVk9DQVRJT04oZmkpIFwKKyAgczM5 MF9mcmFtZWxlc3NfZnVuY3Rpb25faW52b2NhdGlvbihmaSkKKworLyogT2J2 aW91c2x5IHB0cmFjZSBmb3IgdXNlciBwcm9ncmFtIHRyYWNpbmcgY2Fubm90 IGJlIGFsbG93ZWQKKyAgbWVzcyB3aXRoIGNvbnRyb2wgcmVnaXN0ZXJzIChl eGNlcHQgcGVyIHJlZ2lzdGVycyBmb3IgaGFyZHdhcmUgd2F0Y2hwb2ludHMp LAorICB3aGVuIHdlIGFkZCBrZXJuZWwgZGVidWdnaW5nIHdlIG1heSBuZWVk IHRvIGFsdGVyIHRoZXNlIG1hY3Jvcy4gKi8KK2ludCBzMzkwX2Nhbm5vdF9m ZXRjaF9yZWdpc3RlciAoaW50IHJlZ25vKTsKKyNkZWZpbmUgQ0FOTk9UX0ZF VENIX1JFR0lTVEVSKHJlZ25vKSBzMzkwX2Nhbm5vdF9mZXRjaF9yZWdpc3Rl cihyZWdubykKKyNkZWZpbmUgQ0FOTk9UX1NUT1JFX1JFR0lTVEVSKHJlZ25v KSBzMzkwX2Nhbm5vdF9mZXRjaF9yZWdpc3RlcihyZWdubykKKworaW50IHMz OTBfcmVnaXN0ZXJfYnl0ZSAoaW50IHJlZ19ucik7CisjZGVmaW5lIFJFR0lT VEVSX0JZVEUocmVnX25yKSBzMzkwX3JlZ2lzdGVyX2J5dGUocmVnX25yKQor CisKK2NoYXIgKnMzOTBfcmVnaXN0ZXJfbmFtZSAoaW50IHJlZ19ucik7Cisj ZGVmaW5lIFJFR0lTVEVSX05BTUUocmVnX25yKSBzMzkwX3JlZ2lzdGVyX25h bWUocmVnX25yKQorCitpbnQgczM5MF9zdGFiX3JlZ190b19yZWdudW0gKGlu dCByZWdubyk7CisjZGVmaW5lIFNUQUJfUkVHX1RPX1JFR05VTShyZWdubykg XAorczM5MF9zdGFiX3JlZ190b19yZWdudW0ocmVnbm8pCisjZGVmaW5lIERX QVJGX1JFR19UT19SRUdOVU0ocmVnbm8pIFNUQUJfUkVHX1RPX1JFR05VTShy ZWdubykKKyNkZWZpbmUgRFdBUkYyX1JFR19UT19SRUdOVU0ocmVnbm8pIFNU QUJfUkVHX1RPX1JFR05VTShyZWdubykKKyNlbmRpZiAvKiAhR0RCX01VTFRJ X0FSQ0ggKi8KKyNlbmRpZiAvKiBpZm5kZWYgVE1fUzM5MF9IICovCisKKwor CmRpZmYgLXUgLXIgLU4gc3JjLm9yaWcvZ2RiL2NvbmZpZy9zMzkwL3htLWxp bnV4Lmggc3JjLm5ldy9nZGIvY29uZmlnL3MzOTAveG0tbGludXguaAotLS0g c3JjLm9yaWcvZ2RiL2NvbmZpZy9zMzkwL3htLWxpbnV4LmgJVGh1IEphbiAg MSAwMTowMDowMCAxOTcwCisrKyBzcmMubmV3L2dkYi9jb25maWcvczM5MC94 bS1saW51eC5oCU1vbiBGZWIgMjYgMTc6NTc6NDkgMjAwMQpAQCAtMCwwICsx LDM4IEBACisvKiBOYXRpdmUgc3VwcG9ydCBmb3IgR05VL0xpbnV4LCBmb3Ig R0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorICAgQ29weXJpZ2h0IChDKSAxOTk5 LTIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250 cmlidXRlZCBieSBELkouIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxi YXJyb3dfZGpAeWFob28uY29tKQorICAgZm9yIElCTSBEZXV0c2NobGFuZCBF bnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCisKKyAgIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJv c3RvbiwgTUEKKyAgIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYg WE1fTElOVVhfSAorI2RlZmluZSBYTV9MSU5VWF9ICisKKyNkZWZpbmUgSE9T VF9CWVRFX09SREVSIEJJR19FTkRJQU4KKworCisvKiBUaGlzIGlzIHRoZSBh bW91bnQgdG8gc3VidHJhY3QgZnJvbSB1LnVfYXIwCisgICB0byBnZXQgdGhl IG9mZnNldCBpbiB0aGUgY29yZSBmaWxlIG9mIHRoZSByZWdpc3RlciB2YWx1 ZXMuICAqLworI2RlZmluZSBLRVJORUxfVV9BRERSIDB4MAorCisjZGVmaW5l IE5FRURfUE9TSVhfU0VUUEdJRAorCisvKiBOZWVkIFJfT0sgZXRjLCBidXQg VVNHIGlzbid0IGRlZmluZWQuICAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgor CisjZW5kaWYgLyogI2lmbmRlZiBYTV9MSU5VWF9IICovCi0tLSAvZGV2L251 bGwJVHVlIEp1biAgMSAxMToyNToxOSAxOTk5CisrKyBzcmMubmV3L2dkYi9z MzkwLW5hdC5jCVR1ZSBGZWIgMjcgMTY6NDY6NTQgMjAwMQpAQCAtMCwwICsx LDI5MiBAQAorLyogUzM5MCBuYXRpdmUtZGVwZW5kZW50IGNvZGUgZm9yIEdE QiwgdGhlIEdOVSBkZWJ1Z2dlci4KKyAgIENvcHlyaWdodCAxOTk5LTIwMDEg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKKyAgIENvbnRyaWJ1dGVk IGJ5IEQuSi4gQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19k akB5YWhvby5jb20pCisgICBmb3IgSUJNIERldXRzY2hsYW5kIEVudHdpY2ts dW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbi4KKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJ bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEK KyAgIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpbmNsdWRlICJkZWZzLmgi CisjaW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Cisj aW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNz b3IuaD4KKyNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+CisjaW5jbHVkZSA8c3lz L3VzZXIuaD4KKyNpbmNsdWRlIDx2YWx1ZS5oPgorCitpbnQKK3MzOTBfcmVn aXN0ZXJfdV9hZGRyIChpbnQgYmxvY2tlbmQsIGludCByZWdudW0pCit7Cisg IGludCByZXR2YWw7CisKKyAgaWYgKHJlZ251bSA+PSBTMzkwX0dQMF9SRUdO VU0gJiYgcmVnbnVtIDw9IFMzOTBfR1BfTEFTVF9SRUdOVU0pCisgICAgcmV0 dmFsID0gUFRfR1BSMCArICgocmVnbnVtIC0gUzM5MF9HUDBfUkVHTlVNKSAq IFMzOTBfR1BSX1NJWkUpOworICBlbHNlIGlmIChyZWdudW0gPj0gUzM5MF9Q U1dNX1JFR05VTSAmJiByZWdudW0gPD0gUzM5MF9QQ19SRUdOVU0pCisgICAg cmV0dmFsID0gUFRfUFNXTUFTSyArICgocmVnbnVtIC0gUzM5MF9QU1dNX1JF R05VTSkgKiBTMzkwX1BTV19NQVNLX1NJWkUpOworICBlbHNlIGlmIChyZWdu dW0gPT0gUzM5MF9GUENfUkVHTlVNKQorICAgIHJldHZhbCA9IFBUX0ZQQzsK KyAgZWxzZSBpZiAocmVnbnVtID49IFMzOTBfRlAwX1JFR05VTSAmJiByZWdu dW0gPD0gUzM5MF9GUExBU1RfUkVHTlVNKQorICAgIHJldHZhbCA9CisjaWYg Q09ORklHX0FSQ0hfUzM5MFgKKyAgICAgIFBUX0ZQUjAKKyNlbHNlCisgICAg ICBQVF9GUFIwX0hJCisjZW5kaWYKKyAgICAgICsgKChyZWdudW0gLSBTMzkw X0ZQMF9SRUdOVU0pICogUzM5MF9GUFJfU0laRSk7CisgIGVsc2UgaWYgKHJl Z251bSA+PSBTMzkwX0ZJUlNUX0FDUiAmJiByZWdudW0gPD0gUzM5MF9MQVNU X0FDUikKKyAgICByZXR2YWwgPSBQVF9BQ1IwICsgKChyZWdudW0gLSBTMzkw X0ZJUlNUX0FDUikgKiBTMzkwX0FDUl9TSVpFKTsKKyAgZWxzZSBpZiAocmVn bnVtID49IChTMzkwX0ZJUlNUX0NSICsgOSkgJiYgcmVnbnVtIDw9IChTMzkw X0ZJUlNUX0NSICsgMTEpKQorICAgIHJldHZhbCA9IFBUX0NSXzkgKyAoKHJl Z251bSAtIChTMzkwX0ZJUlNUX0NSICsgOSkpICogUzM5MF9DUl9TSVpFKTsK KyAgZWxzZQorICAgIHsKKyAgICAgIGVycm9yICgiczM5MF9yZWdpc3Rlcl91 X2FkZHIgaW52YWxpZCByZWdudW0gJXMgJWQgcmVnbnVtPSVkIiwgX19GSUxF X18sCisJICAgICAoaW50KV9fTElORV9fLCByZWdudW0pOworICAgICAgcmV0 dmFsID0gMDsKKyAgICB9CisgIHJldHVybiByZXR2YWwgKyBibG9ja2VuZDsK K30KKworLyogd2F0Y2hfYXJlYXMgYXJlIHJlcXVpcmVkIGlmIHlvdSBwdXQg MiBvciBtb3JlIHdhdGNocG9pbnRzIG9uIHRoZSBzYW1lIAorICAgYWRkcmVz cyBvciBvdmVybGFwcGluZyBhcmVhcyBnZGIgd2lsbCBjYWxsIHVzIHRvIGRl bGV0ZSB0aGUgd2F0Y2hwb2ludCAKKyAgIG1vcmUgdGhhbiBvbmNlIHdoZW4g d2UgdHJ5IHRvIGRlbGV0ZSB0aGVtLgorICAgYXR0ZW1wdGVkIHJlZmVyZW5j ZSBjb3VudGluZyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBhcmVhcyB1bmZv cnR1bmF0ZWx5CisgICB0aGV5IGRpZG4ndCBzaHJpbmsgd2hlbiBhcmVhcyBo YWQgdG8gYmUgc3BsaXQgb3ZlcmxhcHBpbmcgb2NjdXJzLiAqLworc3RydWN0 IHdhdGNoX2FyZWE7Cit0eXBlZGVmIHN0cnVjdCB3YXRjaF9hcmVhIHdhdGNo X2FyZWE7CitzdHJ1Y3Qgd2F0Y2hfYXJlYQoreworICB3YXRjaF9hcmVhICpu ZXh0OworICBDT1JFX0FERFIgbG9fYWRkcjsKKyAgQ09SRV9BRERSIGhpX2Fk ZHI7Cit9OworCitzdGF0aWMgd2F0Y2hfYXJlYSAqd2F0Y2hfYmFzZSA9IE5V TEw7CitpbnQgd2F0Y2hfYXJlYV9jbnQgPSAwOworc3RhdGljIENPUkVfQURE UiB3YXRjaF9sb19hZGRyID0gMCwgd2F0Y2hfaGlfYWRkciA9IDA7CisKKwor CitDT1JFX0FERFIgczM5MF9zdG9wcGVkX2J5X3dhdGNocG9pbnQgKGludCBw aWQpCit7CisgIHBlcl9sb3djb3JlX2JpdHMgcGVyX2xvd2NvcmU7CisgIHB0 cmFjZV9hcmVhIHBhcmVhOworCisgIHBhcmVhLmxlbiA9IHNpemVvZiAocGVy X2xvd2NvcmUpOworICBwYXJlYS5wcm9jZXNzX2FkZHIgPSAoYWRkcl90KSAm IHBlcl9sb3djb3JlOworICBwYXJlYS5rZXJuZWxfYWRkciA9IHB0X29mZiAo cGVyX2luZm8ubG93Y29yZSk7CisgIHB0cmFjZSAoUFRSQUNFX1BFRUtVU1Jf QVJFQSwgcGlkLCAmcGFyZWEpOworICByZXR1cm4gKChwZXJfbG93Y29yZS5w ZXJjX3N0b3JhZ2VfYWx0ZXJhdGlvbiA9PSAxKSAmJgorCSAgIChwZXJfbG93 Y29yZS5wZXJjX3N0b3JlX3JlYWxfYWRkcmVzcyA9PSAwKSk7Cit9CisKKwor dm9pZAorczM5MF9maXhfd2F0Y2hfcG9pbnRzIChpbnQgcGlkKQoreworICBw ZXJfc3RydWN0IHBlcl9pbmZvOworICBwdHJhY2VfYXJlYSBwYXJlYTsKKwor ICBwYXJlYS5sZW4gPSBzaXplb2YgKHBlcl9pbmZvKTsKKyAgcGFyZWEucHJv Y2Vzc19hZGRyID0gKGFkZHJfdCkgJiBwZXJfaW5mbzsKKyAgcGFyZWEua2Vy bmVsX2FkZHIgPSBQVF9DUl85OworICBwdHJhY2UgKFBUUkFDRV9QRUVLVVNS X0FSRUEsIHBpZCwgJnBhcmVhKTsKKyAgLyogVGhlIGtlcm5lbCBhdXRvbWF0 aWNhbGx5IHNldHMgdGhlIHBzdyBmb3IgcGVyIGRlcGVuZGluZyAqLworICAv KiBvbiB3aGV0aGVyIHRoZSBwZXIgY29udHJvbCByZWdpc3RlcnMgYXJlIHNl dCBmb3IgZXZlbnQgcmVjb3JkaW5nICovCisgIC8qICYgc2V0cyBjcjkgJiBj cjEwIGFwcHJvcHJpYXRlbHkgYWxzbyAqLworICBpZiAod2F0Y2hfYXJlYV9j bnQpCisgICAgeworICAgICAgcGVyX2luZm8uY29udHJvbF9yZWdzLmJpdHMu ZW1fc3RvcmFnZV9hbHRlcmF0aW9uID0gMTsKKyAgICAgIHBlcl9pbmZvLmNv bnRyb2xfcmVncy5iaXRzLnN0b3JhZ2VfYWx0X3NwYWNlX2N0bCA9IDE7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgcGVyX2luZm8uY29udHJvbF9y ZWdzLmJpdHMuZW1fc3RvcmFnZV9hbHRlcmF0aW9uID0gMDsKKyAgICAgIHBl cl9pbmZvLmNvbnRyb2xfcmVncy5iaXRzLnN0b3JhZ2VfYWx0X3NwYWNlX2N0 bCA9IDA7CisgICAgfQorICBwZXJfaW5mby5zdGFydGluZ19hZGRyID0gd2F0 Y2hfbG9fYWRkcjsKKyAgcGVyX2luZm8uZW5kaW5nX2FkZHIgPSB3YXRjaF9o aV9hZGRyOworICBwdHJhY2UgKFBUUkFDRV9QT0tFVVNSX0FSRUEsIHBpZCwg JnBhcmVhKTsKK30KKworaW50CitzMzkwX2luc2VydF93YXRjaHBvaW50IChp bnQgcGlkLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbiwgaW50IHJ3KQorewor ICBDT1JFX0FERFIgaGlfYWRkciA9IGFkZHIgKyBsZW4gLSAxOworICB3YXRj aF9hcmVhICpuZXdBcmVhID0gKHdhdGNoX2FyZWEgKikgbWFsbG9jIChzaXpl b2YgKHdhdGNoX2FyZWEpKTsKKworCisgIGlmIChuZXdBcmVhKQorICAgIHsK KyAgICAgIG5ld0FyZWEtPm5leHQgPSB3YXRjaF9iYXNlOworICAgICAgd2F0 Y2hfYmFzZSA9IG5ld0FyZWE7CisgICAgICB3YXRjaF9sb19hZGRyID0gbWlu ICh3YXRjaF9sb19hZGRyLCBhZGRyKTsKKyAgICAgIHdhdGNoX2hpX2FkZHIg PSBtYXggKHdhdGNoX2hpX2FkZHIsIGhpX2FkZHIpOworICAgICAgbmV3QXJl YS0+bG9fYWRkciA9IGFkZHI7CisgICAgICBuZXdBcmVhLT5oaV9hZGRyID0g aGlfYWRkcjsKKyAgICAgIGlmICh3YXRjaF9hcmVhX2NudCA9PSAwKQorCXsK KwkgIHdhdGNoX2xvX2FkZHIgPSBuZXdBcmVhLT5sb19hZGRyOworCSAgd2F0 Y2hfaGlfYWRkciA9IG5ld0FyZWEtPmhpX2FkZHI7CisJfQorICAgICAgd2F0 Y2hfYXJlYV9jbnQrKzsKKyAgICAgIHMzOTBfZml4X3dhdGNoX3BvaW50cyAo cGlkKTsKKyAgICB9CisgIHJldHVybiBuZXdBcmVhID8gMCA6IC0xIDsKK30K KworCitpbnQKK3MzOTBfcmVtb3ZlX3dhdGNocG9pbnQgKGludCBwaWQsIENP UkVfQUREUiBhZGRyLCBpbnQgbGVuKQoreworICB3YXRjaF9hcmVhICpjdXJy ID0gd2F0Y2hfYmFzZSwgKnByZXYsICptYXRjaEN1cnI7CisgIENPUkVfQURE UiBoaV9hZGRyID0gYWRkciArIGxlbiAtIDE7CisgIENPUkVfQUREUiB3YXRj aF9zZWNvbmRfbG9fYWRkciA9IDB4ZmZmZmZmZmZVTCwgd2F0Y2hfc2Vjb25k X2hpX2FkZHIgPSAwOworICBpbnQgbG9fYWRkcl9yZWZfY250LCBoaV9hZGRy X3JlZl9jbnQ7CisgIHByZXYgPSBtYXRjaEN1cnIgPSBOVUxMOworICBsb19h ZGRyX3JlZl9jbnQgPSAoYWRkciA9PSB3YXRjaF9sb19hZGRyKTsKKyAgaGlf YWRkcl9yZWZfY250ID0gKGFkZHIgPT0gd2F0Y2hfaGlfYWRkcik7CisgIHdo aWxlIChjdXJyKQorICAgIHsKKyAgICAgIGlmIChtYXRjaEN1cnIgPT0gTlVM TCkKKwl7CisJICBpZiAoY3Vyci0+bG9fYWRkciA9PSBhZGRyICYmIGN1cnIt PmhpX2FkZHIgPT0gaGlfYWRkcikKKwkgICAgeworCSAgICAgIG1hdGNoQ3Vy ciA9IGN1cnI7CisJICAgICAgaWYgKHByZXYpCisJCXByZXYtPm5leHQgPSBj dXJyLT5uZXh0OworCSAgICAgIGVsc2UKKwkJd2F0Y2hfYmFzZSA9IGN1cnIt Pm5leHQ7CisJICAgIH0KKwkgIHByZXYgPSBjdXJyOworCX0KKyAgICAgIGlm IChsb19hZGRyX3JlZl9jbnQpCisJeworCSAgaWYgKHdhdGNoX2xvX2FkZHIg PT0gY3Vyci0+bG9fYWRkcikKKwkgICAgbG9fYWRkcl9yZWZfY250Kys7CisJ ICBpZiAoY3Vyci0+bG9fYWRkciA+IHdhdGNoX2xvX2FkZHIgJiYKKwkgICAg ICBjdXJyLT5sb19hZGRyIDwgd2F0Y2hfc2Vjb25kX2xvX2FkZHIpCisJICAg IHdhdGNoX3NlY29uZF9sb19hZGRyID0gY3Vyci0+bG9fYWRkcjsKKwl9Cisg ICAgICBpZiAoaGlfYWRkcl9yZWZfY250KQorCXsKKwkgIGlmICh3YXRjaF9o aV9hZGRyID09IGN1cnItPmhpX2FkZHIpCisJICAgIGhpX2FkZHJfcmVmX2Nu dCsrOworCSAgaWYgKGN1cnItPmhpX2FkZHIgPCB3YXRjaF9oaV9hZGRyICYm CisJICAgICAgY3Vyci0+aGlfYWRkciA+IHdhdGNoX3NlY29uZF9oaV9hZGRy KQorCSAgICB3YXRjaF9zZWNvbmRfaGlfYWRkciA9IGN1cnItPmhpX2FkZHI7 CisJfQorICAgICAgY3VyciA9IGN1cnItPm5leHQ7CisgICAgfQorICBpZiAo bWF0Y2hDdXJyKQorICAgIHsKKyAgICAgIGZyZWUgKG1hdGNoQ3Vycik7Cisg ICAgICB3YXRjaF9hcmVhX2NudC0tOworICAgICAgaWYgKHdhdGNoX2FyZWFf Y250KQorCXsKKwkgIGlmIChsb19hZGRyX3JlZl9jbnQgPT0gMikKKwkgICAg d2F0Y2hfbG9fYWRkciA9IHdhdGNoX3NlY29uZF9sb19hZGRyOworCSAgaWYg KGhpX2FkZHJfcmVmX2NudCA9PSAyKQorCSAgICB3YXRjaF9oaV9hZGRyID0g d2F0Y2hfc2Vjb25kX2hpX2FkZHI7CisJfQorICAgICAgZWxzZQorCXsKKwkg IHdhdGNoX2xvX2FkZHIgPSB3YXRjaF9oaV9hZGRyID0gMDsKKwl9CisgICAg ICBzMzkwX2ZpeF93YXRjaF9wb2ludHMgKHBpZCk7CisgICAgICByZXR1cm4g MDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRlcnIsCisJCQkgICJBdHRlbXB0IHRvIHJlbW92ZSBu b25leGlzdGVudCB3YXRjaHBvaW50IGluIHMzOTBfcmVtb3ZlX3dhdGNocG9p bnRcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KKworaW50Citr ZXJuZWxfdV9zaXplICh2b2lkKQoreworICByZXR1cm4gc2l6ZW9mKHN0cnVj dCB1c2VyKTsKK30KKworCisjaWYgIChkZWZpbmVkIChTMzkwX0ZQMF9SRUdO VU0pICYmIGRlZmluZWQgKEhBVkVfRlBSRUdTRVRfVCkgJiYgZGVmaW5lZChI QVZFX1NZU19QUk9DRlNfSCkgJiYgZGVmaW5lZCAoSEFWRV9HUkVHU0VUX1Qp KQordm9pZAorc3VwcGx5X2dyZWdzZXQgKGdyZWdzZXRfdCAqIGdyZWdzZXRw KQoreworICBpbnQgcmVnaTsKKyAgczM5MF9yZWdzX2NvbW1vbiAqczM5MHJl Z3MgPSAoczM5MF9yZWdzX2NvbW1vbiAqKSBncmVnc2V0cDsKKworICBmb3Ig KHJlZ2kgPSAwOyByZWdpIDwgUzM5MF9OVU1fR1BSUzsgcmVnaSsrKQorICAg IHN1cHBseV9yZWdpc3RlciAoUzM5MF9HUDBfUkVHTlVNICsgcmVnaSwgKGNo YXIgKikgJnMzOTByZWdzLT5ncHJzW3JlZ2ldKTsKKyAgc3VwcGx5X3JlZ2lz dGVyIChTMzkwX1BTV01fUkVHTlVNLCAoY2hhciAqKSAmczM5MHJlZ3MtPnBz dy5tYXNrKTsKKyAgc3VwcGx5X3JlZ2lzdGVyIChTMzkwX1BDX1JFR05VTSwg KGNoYXIgKikgJnMzOTByZWdzLT5wc3cuYWRkcik7CisgIGZvciAocmVnaSA9 IDA7IHJlZ2kgPCBTMzkwX05VTV9BQ1JTOyByZWdpKyspCisgICAgc3VwcGx5 X3JlZ2lzdGVyIChTMzkwX0ZJUlNUX0FDUiArIHJlZ2ksIChjaGFyICopICZz MzkwcmVncy0+YWNyc1tyZWdpXSk7CisgIC8qIHVuZm9ydHVuYXRlbHkgdGhp cyBpc24ndCBpbiBncmVnc2V0cCAqLworICBmb3IgKHJlZ2kgPSAwOyByZWdp IDwgUzM5MF9OVU1fQ1JTOyByZWdpKyspCisgICAgc3VwcGx5X3JlZ2lzdGVy IChTMzkwX0ZJUlNUX0NSICsgcmVnaSwgTlVMTCk7Cit9CisKKwordm9pZAor c3VwcGx5X2ZwcmVnc2V0IChmcHJlZ3NldF90ICogZnByZWdzZXRwKQorewor ICBpbnQgcmVnaTsKKworICBzdXBwbHlfcmVnaXN0ZXIgKFMzOTBfRlBDX1JF R05VTSwgKGNoYXIgKikgJmZwcmVnc2V0cC0+ZnBjKTsKKyAgZm9yIChyZWdp ID0gMDsgcmVnaSA8IFMzOTBfTlVNX0ZQUlM7IHJlZ2krKykKKyAgICBzdXBw bHlfcmVnaXN0ZXIgKFMzOTBfRlAwX1JFR05VTSArIHJlZ2ksIChjaGFyICop ICZmcHJlZ3NldHAtPmZwcnNbcmVnaV0pOworCit9CisKK3ZvaWQKK2ZpbGxf Z3JlZ3NldCAoZ3JlZ3NldF90ICogZ3JlZ3NldHAsIGludCByZWdubykKK3sK KyAgaWYgKHJlZ25vID49IFMzOTBfRklSU1RfQ1IgJiYgcmVnbm8gPD0gUzM5 MF9MQVNUX0NSKQorICAgIG1lbXNldCAoJigoX191OCAqKSBncmVnc2V0cClb UkVHSVNURVJfQllURSAocmVnbm8pXSwgMCwKKwkgICAgUkVHSVNURVJfUkFX X1NJWkUgKHJlZ25vKSk7CisgIGlmIChyZWdubyAhPSAtMSkKKyAgICBzdXBw bHlfcmVnaXN0ZXIgKHJlZ25vLCAmKChfX3U4ICopIGdyZWdzZXRwKVtSRUdJ U1RFUl9CWVRFIChyZWdubyldKTsKKyAgZWxzZQorICAgIHN1cHBseV9ncmVn c2V0IChncmVnc2V0cCk7Cit9CisKKy8qICBHaXZlbiBhIHBvaW50ZXIgdG8g YSBmbG9hdGluZyBwb2ludCByZWdpc3RlciBzZXQgaW4gL3Byb2MgZm9ybWF0 CisgICAoZnByZWdzZXRfdCAqKSwgdXBkYXRlIHRoZSByZWdpc3RlciBzcGVj aWZpZWQgYnkgUkVHTk8gZnJvbSBnZGIncyBpZGVhCisgICBvZiB0aGUgY3Vy cmVudCBmbG9hdGluZyBwb2ludCByZWdpc3RlciBzZXQuICBJZiBSRUdOTyBp cyAtMSwgdXBkYXRlCisgICB0aGVtIGFsbC4gKi8KKwordm9pZAorZmlsbF9m cHJlZ3NldCAoZnByZWdzZXRfdCAqIGZwcmVnc2V0cCwgaW50IHJlZ25vKQor eworICBpZiAocmVnbm8gPT0gLTEpCisgICAgc3VwcGx5X2ZwcmVnc2V0IChm cHJlZ3NldHApOworICBlbHNlCisgICAgc3VwcGx5X3JlZ2lzdGVyIChyZWdu bywKKwkJICAgICAmKChfX3U4ICopIGZwcmVnc2V0cClbUkVHSVNURVJfQllU RSAocmVnbm8pIC0KKwkJCQkJICAgUkVHSVNURVJfQllURSAoUzM5MF9GUENf UkVHTlVNKV0pOworfQorCisKKyNlbHNlCisjZXJyb3IgIlRoZXJlIGFyZSBh IGZldyBwb3NzaWJpbGl0aWVzIGhlcmUiCisjZXJyb3IgIjEpIFlvdSBhcmVu J3QgY29tcGlsaW5nIGZvciBsaW51eCAmIGRvbid0IG5lZWQgYSBjb3JlIGR1 bXBzIHRvIHdvcmsuIgorI2Vycm9yICIyKSBUaGUgaGVhZGVyIGZpbGVzIHN5 cy9lbGYuaCBzeXMvdXNlci5oIHN5cy9wdHJhY2UuaCAmIHN5cy9wcm9jZnMu aCIKKyNlcnJvciAibGliYyBmaWxlcyBhcmUgaW5jb25zaXN0ZW50IHdpdGgg bGludXgvaW5jbHVkZS9hc20tczM5MC8iCisjZXJyb3IgIjMpIHlvdSBkaWRu J3QgZG8gYSBjb21wbGV0ZWx5IGNsZWFuIGJ1aWxkICYgZGVsZXRlIGNvbmZp Zy5jYWNoZS4iCisjZW5kaWYKLS0tIC9kZXYvbnVsbAlUdWUgSnVuICAxIDEx OjI1OjE5IDE5OTkKKysrIHNyYy5uZXcvZ2RiL3MzOTAtdGRlcC5jCVR1ZSBG ZWIgMjcgMTU6MTA6NDcgMjAwMQpAQCAtMCwwICsxLDEzMDggQEAKKy8qIFRh cmdldC1kZXBlbmRlbnQgY29kZSBmb3IgR0RCLCB0aGUgR05VIGRlYnVnZ2Vy LgorICAgQ29weXJpZ2h0IDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisgICBDb250cmlidXRlZCBieSBELkouIEJhcnJvdyAoZGpiYXJy b3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICAgZm9yIElC TSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRp b24uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug LSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcsIFVTQS4g ICovCisKKyNkZWZpbmUgUzM5MF9UREVQCQkvKiBmb3Igc3BlY2lhbCBtYWNy b3MgaW4gdG0tczM5MC5oICovCisjaW5jbHVkZSA8ZGVmcy5oPgorI2luY2x1 ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1 ZGUgImluZmVyaW9yLmgiCisjaW5jbHVkZSAic3ltdGFiLmgiCisjaW5jbHVk ZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiZ2RiY29yZS5oIgorI2luY2x1ZGUg ImdkYmNtZC5oIgorI2luY2x1ZGUgInN5bWZpbGUuaCIKKyNpbmNsdWRlICJv YmpmaWxlcy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAiLi4vYmZk L2JmZC5oIgorI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCisKKyNpZm5kZWYg VFJVRQorI2RlZmluZSBUUlVFIDEKKyNlbmRpZgorI2lmbmRlZiBGQUxTRQor I2RlZmluZSBGQUxTRSAwCisjZW5kaWYKKworI3VuZGVmIG9mZnNldG9mCisj ZGVmaW5lIG9mZnNldG9mKHR5cGUsIG1lbWJlcikgKChDT1JFX0FERFIpICYg KCh0eXBlKikwKSAtPiBtZW1iZXIgKQorCisjZGVmaW5lIHMzOTBfb2Zmc2V0 b2YoZXNhbWVfdHlwZSxlc2FfdHlwZSxtZW1iZXIpIFwKKyhHREJfVEFSR0VU X0lTX0VTQU1FID8gb2Zmc2V0b2YoZXNhbWVfdHlwZSxtZW1iZXIpIDogb2Zm c2V0b2YoZXNhX3R5cGUsbWVtYmVyKSkKKworI2RlZmluZSBzMzkwX3NpemVv Zihlc2FtZV90eXBlLGVzYV90eXBlKSBcCisoR0RCX1RBUkdFVF9JU19FU0FN RSA/IHNpemVvZihlc2FtZV90eXBlKSA6IHNpemVvZihlc2FfdHlwZSkpCisK KyNkZWZpbmUgU0laRU9GX1MzOTBfR0RCX1JFR1MgczM5MF9zaXplb2YoczM5 MHhfZ2RiX3JlZ3MsczM5MF9nZGJfcmVncykKKworCitzdHJ1Y3QgZnJhbWVf ZXh0cmFfaW5mbworeworICBpbnQgaW5pdGlhbGlzZWQ7CisgIGludCBnb29k X3Byb2xvZ3VlOworICBDT1JFX0FERFIgZnVuY3Rpb25fc3RhcnQ7CisgIENP UkVfQUREUiBza2lwX3Byb2xvZ3VlX2Z1bmN0aW9uX3N0YXJ0OworICBDT1JF X0FERFIgc2F2ZWRfcGNfdmFsaWQ7CisgIENPUkVfQUREUiBzYXZlZF9wYzsK KyAgQ09SRV9BRERSIHNpZ19maXhlZF9zYXZlZF9wY192YWxpZDsKKyAgQ09S RV9BRERSIHNpZ19maXhlZF9zYXZlZF9wYzsKKyAgX191MzIgc3RhY2tfYm91 Z2h0OwkJLyogYW1vdW50IHdlIGRlY3JlbWVudCB0aGUgc3RhY2sgcG9pbnRl ciBieSAqLworICBpbnQgaGFzX2ZyYW1lX3BvaW50ZXI7CS8qIGZyYW1lIHBv aW50ZXIgbmVlZGVkIGZvciBhbGxvY2EgKi8KK307CisKKworc3RhdGljIENP UkVfQUREUiBzMzkwX2ZyYW1lX3NhdmVkX3BjX25vZml4IChzdHJ1Y3QgZnJh bWVfaW5mbyAqZmkpOworCitpbnQKK3MzOTBfcmVhZGluc3RydWN0aW9uIChf X3U4IGluc3RyW10sIENPUkVfQUREUiBhdCwKKwkJICAgICAgc3RydWN0IGRp c2Fzc2VtYmxlX2luZm8gKmluZm8pCit7CisgIGludCBpbnN0cmxlbjsKKwor ICBzdGF0aWMgaW50IHMzOTBfaW5zdHJsZW5bXSA9IHsKKyAgICAyLAorICAg IDQsCisgICAgNCwKKyAgICA2CisgIH07CisgIGlmICgoKmluZm8tPnJlYWRf bWVtb3J5X2Z1bmMpIChhdCwgJmluc3RyWzBdLCAyLCBpbmZvKSkKKyAgICBy ZXR1cm4gLTE7CisgIGluc3RybGVuID0gczM5MF9pbnN0cmxlbltpbnN0clsw XSA+PiA2XTsKKyAgaWYgKCgqaW5mby0+cmVhZF9tZW1vcnlfZnVuYykgKGF0 ICsgMiwgJmluc3RyWzJdLCBpbnN0cmxlbiAtIDIsIGluZm8pKQorICAgIHJl dHVybiAtMTsKKyAgcmV0dXJuIGluc3RybGVuOworfQorCitzdGF0aWMgdm9p ZAorczM5MF9tZW1zZXRfZXh0cmFfaW5mbyAoc3RydWN0IGZyYW1lX2V4dHJh X2luZm8gKmZleHRyYV9pbmZvKQoreworICBtZW1zZXQgKGZleHRyYV9pbmZv LCAwLCBzaXplb2YgKHN0cnVjdCBmcmFtZV9leHRyYV9pbmZvKSk7Cit9CisK KworCitjaGFyICoKK3MzOTBfcmVnaXN0ZXJfbmFtZSAoaW50IHJlZ19ucikK K3sKKyAgc3RhdGljIGNoYXIgKnJlZ2lzdGVyX25hbWVzW10gPSBTMzkwX1JF R0lTVEVSX05BTUVTOworCisgIGlmIChyZWdfbnIgPj0gUzM5MF9MQVNUX1JF R05VTSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIHJlZ2lzdGVyX25h bWVzW3JlZ19ucl07Cit9CisKKworCitpbnQKK3MzOTBfY2Fubm90X2ZldGNo X3JlZ2lzdGVyIChpbnQgcmVnbm8pCit7CisgIHJldHVybiAocmVnbm8gPj0g UzM5MF9GSVJTVF9DUiAmJiByZWdubyA8IChTMzkwX0ZJUlNUX0NSICsgOSkp IHx8CisgICAgKHJlZ25vID49IChTMzkwX0ZJUlNUX0NSICsgMTIpICYmIHJl Z25vIDw9IFMzOTBfTEFTVF9DUik7Cit9CisKK2ludAorczM5MF9zdGFiX3Jl Z190b19yZWdudW0gKGludCByZWdubykKK3sKKyAgcmV0dXJuIHJlZ25vID49 IDY0ID8gUzM5MF9QU1dNX1JFR05VTSAtIDY0IDoKKyAgICByZWdubyA+PSA0 OCA/IFMzOTBfRklSU1RfQUNSIC0gNDggOgorICAgIHJlZ25vID49IDMyID8g UzM5MF9GSVJTVF9DUiAtIDMyIDoKKyAgICByZWdubyA8PSAxNSA/IChyZWdu byArIDIpIDoKKyAgICBTMzkwX0ZQMF9SRUdOVU0gKyAoKHJlZ25vIC0gMTYp ICYgOCkgKyAoKChyZWdubyAtIDE2KSAmIDMpIDw8IDEpICsKKyAgICAoKChy ZWdubyAtIDE2KSAmIDQpID4+IDIpOworfQorCisKKworLyogczM5MF9nZXRf ZnJhbWVfaW5mbyBiYXNlZCBvbiBIYXJ0bXV0cworICAgcHJvbG9ndWUgZGVm aW5pdGlvbiBpbgorICAgZ2NjLTIuOC4xL2NvbmZpZy9sMzkwL2xpbnV4LmMg CisKKyAgIEl0IHJlYWRzIG9uZSBpbnN0cnVjdGlvbiBhdCBhIHRpbWUgJiBi YXNlZCBvbiB3aGV0aGVyCisgICBpdCBsb29rcyBsaWtlIHByb2xvZ3VlIGNv ZGUgb3Igbm90IGl0IG1ha2VzIGEgZGVjaXNpb24gb24KKyAgIHdoZXRoZXIg dGhlIHByb2xvZ3VlIGlzIG92ZXIsIHRoZXJlIGFyZSB2YXJpb3VzIHN0YXRl IG1hY2hpbmVzCisgICBpbiB0aGUgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhl IHByb2xvZ3VlIGNvZGUgaXMgcG9zc2lsYnkgdmFsaWQuCisgICAKKyAgIFRo aXMgaXMgZG9uZSB0byBob3BlZnVsbHkgYWxsb3cgdGhlIGNvZGUgc3Vydml2 ZSBtaW5vciByZXZzIG9mCisgICBjYWxsaW5nIGNvbnZlbnRpb25zLgorCisg IGZleHRyYV9pbmZvIG11c3QgYmUgYWxyZWFkeSBzZXQgdXAgdG8gY29tZSBp biB3aXRoIHNhdmVkX3JlZ3Mgbm90IE5VTEwgKi8KKworaW50CitzMzkwX2dl dF9mcmFtZV9pbmZvIChDT1JFX0FERFIgcGMsIHN0cnVjdCBmcmFtZV9leHRy YV9pbmZvICpmZXh0cmFfaW5mbywKKwkJICAgICBzdHJ1Y3QgZnJhbWVfaW5m byAqZmksIGludCBpbml0X2V4dHJhX2luZm8pCit7CisjZGVmaW5lIENPTlNU X1BPT0xfUkVHSURYIDEzCisjZGVmaW5lIEdPVF9SRUdJRFggICAgICAgIDEy CisgIF9fdTggaW5zdHJbUzM5MF9NQVhfSU5TVFJfU0laRV07CisgIENPUkVf QUREUiB0ZXN0X3BjID0gcGMsIHRlc3RfcGMyOworICBDT1JFX0FERFIgb3Jp Z19zcCA9IDAsIHNhdmVfcmVnX2FkZHIgPSAwLCAqc2F2ZWRfcmVncyA9IE5V TEw7CisgIGludCB2YWxpZF9wcm9sb2d1ZSwgZ29vZF9wcm9sb2d1ZSA9IEZB TFNFOworICBpbnQgZ3Byc19zYXZlZFtTMzkwX05VTV9HUFJTXTsKKyAgaW50 IGZwcnNfc2F2ZWRbUzM5MF9OVU1fRlBSU107CisgIGludCByZWdpZHgsIGlu c3RybGVuOworICBpbnQgc2F2ZV9saW5rX3JlZ2lkeCwgc3VidHJhY3Rfc3Bf cmVnaWR4OworICBpbnQgY29uc3RfcG9vbF9zdGF0ZSwgc2F2ZV9saW5rX3N0 YXRlLCBnb3Rfc3RhdGU7CisgIGludCBmcmFtZV9wb2ludGVyX2ZvdW5kLCB2 YXJhcmdzX3N0YXRlOworICBpbnQgbG9vcF9jbnQsIGdkYl9ncHJfc3RvcmUs IGdkYl9mcHJfc3RvcmU7CisgIGludCBmcmFtZV9wb2ludGVyX3JlZ2lkeCA9 IDB4ZjsKKyAgaW50IG9mZnNldCwgZXhwZWN0ZWRfb2Zmc2V0OworICBpbnQg ZXJyID0gMDsKKyAgZGlzYXNzZW1ibGVfaW5mbyBpbmZvOworICBjb25zdF9w b29sX3N0YXRlID0gc2F2ZV9saW5rX3N0YXRlID0gZ290X3N0YXRlID0gdmFy YXJnc19zdGF0ZSA9IDA7CisgIGZyYW1lX3BvaW50ZXJfZm91bmQgPSBGQUxT RTsKKyAgbWVtc2V0IChncHJzX3NhdmVkLCAwLCBzaXplb2YgKGdwcnNfc2F2 ZWQpKTsKKyAgbWVtc2V0IChmcHJzX3NhdmVkLCAwLCBzaXplb2YgKGZwcnNf c2F2ZWQpKTsKKyAgaW5mby5yZWFkX21lbW9yeV9mdW5jID0gZGlzX2FzbV9y ZWFkX21lbW9yeTsKKworICBzYXZlX2xpbmtfcmVnaWR4ID0gc3VidHJhY3Rf c3BfcmVnaWR4ID0gMDsKKyAgaWYgKGZpKQorICAgIHsKKyAgICAgIHNhdmVk X3JlZ3MgPSBmaS0+c2F2ZWRfcmVnczsKKyAgICAgIG9yaWdfc3AgPSBmaS0+ ZnJhbWUgKyBmZXh0cmFfaW5mby0+c3RhY2tfYm91Z2h0OworICAgIH0KKyAg aWYgKGZleHRyYV9pbmZvKQorICAgIHsKKyAgICAgIGlmIChpbml0X2V4dHJh X2luZm8gfHwgZmV4dHJhX2luZm8tPmluaXRpYWxpc2VkID09IEZBTFNFKQor CXsKKwkgIHMzOTBfbWVtc2V0X2V4dHJhX2luZm8gKGZleHRyYV9pbmZvKTsK KwkgIGZleHRyYV9pbmZvLT5mdW5jdGlvbl9zdGFydCA9IHBjOworCSAgZmV4 dHJhX2luZm8tPmluaXRpYWxpc2VkID0gVFJVRTsKKwl9CisgICAgfQorICBp bnN0cmxlbiA9IDA7CisgIGRvCisgICAgeworICAgICAgdmFsaWRfcHJvbG9n dWUgPSBGQUxTRTsKKyAgICAgIHRlc3RfcGMgKz0gaW5zdHJsZW47CisgICAg ICAvKiBhZGQgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uIGxlbiAqLworICAg ICAgaW5zdHJsZW4gPSBzMzkwX3JlYWRpbnN0cnVjdGlvbiAoaW5zdHIsIHRl c3RfcGMsICZpbmZvKTsKKyAgICAgIGlmIChpbnN0cmxlbiA8IDApCisJewor CSAgZ29vZF9wcm9sb2d1ZSA9IEZBTFNFOworCSAgZXJyID0gLTE7CisJICBi cmVhazsKKwl9CisgICAgICBpZiAoc2F2ZV9saW5rX3N0YXRlID09IDApCisJ eworCSAgLyogY2hlY2sgZm9yIGEgc3RhY2sgcmVsYXRpdmUgU1RNRyBvciBT VE0gKi8KKwkgIGlmICgoKEdEQl9UQVJHRVRfSVNfRVNBTUUgJiYKKwkJKChp bnN0clswXSA9PSAweGViKSAmJiAoaW5zdHJbNV0gPT0gMHgyNCkpKSB8fAor CSAgICAgICAoaW5zdHJbMF0gPT0gMHg5MCkpICYmICgoaW5zdHJbMl0gPj4g NCkgPT0gMHhmKSkKKwkgICAgeworCSAgICAgIHJlZ2lkeCA9IChpbnN0clsx XSA+PiA0KTsKKwkgICAgICBpZiAocmVnaWR4IDwgNikKKwkJdmFyYXJnc19z dGF0ZSA9IDE7CisJICAgICAgb2Zmc2V0ID0gKCgqKChfX3UxNiAqKSAmIGlu c3RyWzJdKSkgJiAweGZmZik7CisJICAgICAgZXhwZWN0ZWRfb2Zmc2V0ID0K KwkJUzM5MF9HUFI2X1NUQUNLX09GRlNFVCArIChTMzkwX0dQUl9TSVpFICog KHJlZ2lkeCAtIDYpKTsKKwkgICAgICBpZiAob2Zmc2V0ICE9IGV4cGVjdGVk X29mZnNldCkKKwkJeworCQkgIGdvb2RfcHJvbG9ndWUgPSBGQUxTRTsKKwkJ ICBicmVhazsKKwkJfQorCSAgICAgIGlmIChzYXZlZF9yZWdzKQorCQlzYXZl X3JlZ19hZGRyID0gb3JpZ19zcCArIG9mZnNldDsKKwkgICAgICBmb3IgKDsg cmVnaWR4IDw9IChpbnN0clsxXSAmIDB4Zik7IHJlZ2lkeCsrKQorCQl7CisJ CSAgaWYgKGdwcnNfc2F2ZWRbcmVnaWR4XSkKKwkJICAgIHsKKwkJICAgICAg Z29vZF9wcm9sb2d1ZSA9IEZBTFNFOworCQkgICAgICBicmVhazsKKwkJICAg IH0KKwkJICBnb29kX3Byb2xvZ3VlID0gVFJVRTsKKwkJICBncHJzX3NhdmVk W3JlZ2lkeF0gPSBUUlVFOworCQkgIGlmIChzYXZlZF9yZWdzKQorCQkgICAg eworCQkgICAgICBzYXZlZF9yZWdzW1MzOTBfR1AwX1JFR05VTSArIHJlZ2lk eF0gPSBzYXZlX3JlZ19hZGRyOworCQkgICAgICBzYXZlX3JlZ19hZGRyICs9 IFMzOTBfR1BSX1NJWkU7CisJCSAgICB9CisJCX0KKwkgICAgICB2YWxpZF9w cm9sb2d1ZSA9IFRSVUU7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwl9 CisgICAgICAvKiBjaGVjayBmb3IgYSBzdGFjayByZWxhdGl2ZSBTVEcgb3Ig U1QgKi8KKyAgICAgIGlmICgoc2F2ZV9saW5rX3N0YXRlID09IDAgfHwgc2F2 ZV9saW5rX3N0YXRlID09IDMpICYmCisJICAoKEdEQl9UQVJHRVRfSVNfRVNB TUUgJiYKKwkgICAgKChpbnN0clswXSA9PSAweGUzKSAmJiAoaW5zdHJbNV0g PT0gMHgyNCkpKSB8fAorCSAgIChpbnN0clswXSA9PSAweDUwKSkgJiYgKChp bnN0clsyXSA+PiA0KSA9PSAweGYpKQorCXsKKwkgIHJlZ2lkeCA9IGluc3Ry WzFdID4+IDQ7CisJICBvZmZzZXQgPSAoKCooKF9fdTE2ICopICYgaW5zdHJb Ml0pKSAmIDB4ZmZmKTsKKwkgIGlmIChvZmZzZXQgPT0gMCkKKwkgICAgewor CSAgICAgIGlmIChzYXZlX2xpbmtfc3RhdGUgPT0gMyAmJiByZWdpZHggPT0g c2F2ZV9saW5rX3JlZ2lkeCkKKwkJeworCQkgIHNhdmVfbGlua19zdGF0ZSA9 IDQ7CisJCSAgdmFsaWRfcHJvbG9ndWUgPSBUUlVFOworCQkgIGNvbnRpbnVl OworCQl9CisJICAgICAgZWxzZQorCQlicmVhazsKKwkgICAgfQorCSAgaWYg KHJlZ2lkeCA8IDYpCisJICAgIHZhcmFyZ3Nfc3RhdGUgPSAxOworCSAgZXhw ZWN0ZWRfb2Zmc2V0ID0KKwkgICAgUzM5MF9HUFI2X1NUQUNLX09GRlNFVCAr IChTMzkwX0dQUl9TSVpFICogKHJlZ2lkeCAtIDYpKTsKKwkgIGlmIChvZmZz ZXQgIT0gZXhwZWN0ZWRfb2Zmc2V0KQorCSAgICB7CisJICAgICAgZ29vZF9w cm9sb2d1ZSA9IEZBTFNFOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBp ZiAoZ3Byc19zYXZlZFtyZWdpZHhdKQorCSAgICB7CisJICAgICAgZ29vZF9w cm9sb2d1ZSA9IEZBTFNFOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBn b29kX3Byb2xvZ3VlID0gVFJVRTsKKwkgIGdwcnNfc2F2ZWRbcmVnaWR4XSA9 IFRSVUU7CisJICBpZiAoc2F2ZWRfcmVncykKKwkgICAgeworCSAgICAgIHNh dmVfcmVnX2FkZHIgPSBvcmlnX3NwICsgb2Zmc2V0OworCSAgICAgIHNhdmVk X3JlZ3NbUzM5MF9HUDBfUkVHTlVNICsgcmVnaWR4XSA9IHNhdmVfcmVnX2Fk ZHI7CisJICAgIH0KKwkgIHZhbGlkX3Byb2xvZ3VlID0gVFJVRTsKKwkgIGNv bnRpbnVlOworCX0KKworICAgICAgLyogY2hlY2sgZm9yIFNURCAqLworICAg ICAgaWYgKGluc3RyWzBdID09IDB4NjAgJiYgKGluc3RyWzJdID4+IDQpID09 IDB4ZikKKwl7CisJICByZWdpZHggPSBpbnN0clsxXSA+PiA0OworCSAgaWYg KHJlZ2lkeCA9PSAwIHx8IHJlZ2lkeCA9PSAyKQorCSAgICB2YXJhcmdzX3N0 YXRlID0gMTsKKwkgIGlmIChmcHJzX3NhdmVkW3JlZ2lkeF0pCisJICAgIHsK KwkgICAgICBnb29kX3Byb2xvZ3VlID0gRkFMU0U7CisJICAgICAgYnJlYWs7 CisJICAgIH0KKwkgIGZwcnNfc2F2ZWRbcmVnaWR4XSA9IFRSVUU7CisJICBp ZiAoc2F2ZWRfcmVncykKKwkgICAgeworCSAgICAgIHNhdmVfcmVnX2FkZHIg PSBvcmlnX3NwICsgKCgqKChfX3UxNiAqKSAmIGluc3RyWzJdKSkgJiAweGZm Zik7CisJICAgICAgc2F2ZWRfcmVnc1tTMzkwX0ZQMF9SRUdOVU0gKyByZWdp ZHhdID0gc2F2ZV9yZWdfYWRkcjsKKwkgICAgfQorCSAgdmFsaWRfcHJvbG9n dWUgPSBUUlVFOworCSAgY29udGludWU7CisJfQorCisKKyAgICAgIGlmIChj b25zdF9wb29sX3N0YXRlID09IDApCisJeworCSAgLyogQ2hlY2sgZm9yIEJB U1IgZ3ByMTMsZ3ByMCB1c2VkIHRvIGxvYWQgY29uc3RhbnQgcG9vbCBwb2lu dGVyIHRvIHIxMyBpbiBvbGQgY29tcGlsZXIgKi8KKwkgIGlmIChHREJfVEFS R0VUX0lTX0VTQU1FICYmIGluc3RyWzBdID09IDB4ZCAmJiAoaW5zdHJbMV0g JiAweGYpID09IDAKKwkgICAgICAmJiAoKGluc3RyWzFdID4+IDQpID09IENP TlNUX1BPT0xfUkVHSURYKSkKKwkgICAgeworCSAgICAgIGNvbnN0X3Bvb2xf c3RhdGUgPSAxOworCSAgICAgIHZhbGlkX3Byb2xvZ3VlID0gVFJVRTsKKwkg ICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgLyogQ2hlY2sgZm9yIG5ldyBm YW5nbGVkIGJyYXMgJXIxMyxuZXdwYyB0byBsb2FkIG5ldyBjb25zdGFudCBw b29sICovCisJICAvKiBlbWJlZGRlZCBpbiBjb2RlICovCisJICBpZiAoKGlu c3RyWzBdID09IDB4YTcpICYmICgoaW5zdHJbMV0gJiAweGYpID09IDB4NSkg JiYKKwkgICAgICAoKGluc3RyWzFdID4+IDQpID09IENPTlNUX1BPT0xfUkVH SURYKQorCSAgICAgICYmICgoaW5zdHJbMl0gJiAweDgwKSA9PSAwKSkKKwkg ICAgeworCSAgICAgIGNvbnN0X3Bvb2xfc3RhdGUgPSAyOworCSAgICAgIHRl c3RfcGMgKz0gKCgqKChfX3UxNiAqKSAmIGluc3RyWzJdKSA8PCAxKSAtIGlu c3RybGVuKTsKKwkgICAgICB2YWxpZF9wcm9sb2d1ZSA9IFRSVUU7CisJICAg ICAgY29udGludWU7CisJICAgIH0KKwl9CisgICAgICAvKiBDaGVjayBmb3Ig QUdISSBvciBBSEkgQ09OU1RfUE9PTF9SRUdJRFgsdmFsICovCisgICAgICBp ZiAoY29uc3RfcG9vbF9zdGF0ZSA9PSAxICYmIChpbnN0clswXSA9PSAweGE3 KSAmJgorCSAgKChHREJfVEFSR0VUX0lTX0VTQU1FICYmCisJICAgIChpbnN0 clsxXSA9PSAoKENPTlNUX1BPT0xfUkVHSURYIDw8IDQpIHwgMHhiKSkpIHx8 CisJICAgKGluc3RyWzFdID09ICgoQ09OU1RfUE9PTF9SRUdJRFggPDwgNCkg fCAweGEpKSkpCisJeworCSAgY29uc3RfcG9vbF9zdGF0ZSA9IDI7CisJICB2 YWxpZF9wcm9sb2d1ZSA9IFRSVUU7CisJICBjb250aW51ZTsKKwl9CisgICAg ICAvKiBDaGVjayBmb3IgTEdSIG9yIExSIGdwcngsMTUgKi8KKyAgICAgIGlm ICgoR0RCX1RBUkdFVF9JU19FU0FNRSAmJgorCSAgIGluc3RyWzBdID09IDB4 YjkgJiYgaW5zdHJbMV0gPT0gMHgwNCAmJiAoaW5zdHJbM10gJiAweGYpID09 IDB4ZikgfHwKKwkgIChpbnN0clswXSA9PSAweDE4ICYmIChpbnN0clsxXSAm IDB4ZikgPT0gMHhmKSkKKwl7CisJICBpZiAoR0RCX1RBUkdFVF9JU19FU0FN RSkKKwkgICAgcmVnaWR4ID0gaW5zdHJbM10gPj4gNDsKKwkgIGVsc2UKKwkg ICAgcmVnaWR4ID0gaW5zdHJbMV0gPj4gNDsKKwkgIGlmIChzYXZlX2xpbmtf c3RhdGUgPT0gMCAmJiByZWdpZHggIT0gMHhiKQorCSAgICB7CisJICAgICAg LyogQWxtb3N0IGRlZmludGVseSBjb2RlIGZvcgorCSAgICAgICAgIGRlY3Jl bWVudGluZyB0aGUgc3RhY2sgcG9pbnRlciAKKwkgICAgICAgICAoIGkuZS4g YSBub24gbGVhZiBmdW5jdGlvbiAKKwkgICAgICAgICBvciBlbHNlIGxlYWYg d2l0aCBsb2NhbHMgKSAqLworCSAgICAgIHNhdmVfbGlua19yZWdpZHggPSBy ZWdpZHg7CisJICAgICAgc2F2ZV9saW5rX3N0YXRlID0gMTsKKwkgICAgICB2 YWxpZF9wcm9sb2d1ZSA9IFRSVUU7CisJICAgICAgY29udGludWU7CisJICAg IH0KKwkgIC8qIFdlIHVzZSB0aGlzIGZyYW1lIHBvaW50ZXIgZm9yIGFsbG9j YQorCSAgICAgdW5mb3J0dW5hdGVseSB3ZSBuZWVkIHRvIGFzc3VtZSBpdHMg Z3ByMTEKKwkgICAgIG90aGVyd2lzZSB3ZSB3b3VsZCBuZWVkIGEgc21hcnRl ciBwcm9sb2d1ZQorCSAgICAgd2Fsa2VyLiAqLworCSAgaWYgKGZyYW1lX3Bv aW50ZXJfZm91bmQgPT0gRkFMU0UgJiYgcmVnaWR4ID09IDB4YikKKwkgICAg eworCSAgICAgIGZyYW1lX3BvaW50ZXJfcmVnaWR4ID0gMHhiOworCSAgICAg IGZyYW1lX3BvaW50ZXJfZm91bmQgPSBUUlVFOworCSAgICAgIGlmIChmZXh0 cmFfaW5mbykKKwkJZmV4dHJhX2luZm8tPmhhc19mcmFtZV9wb2ludGVyID0g VFJVRTsKKwkgICAgICB2YWxpZF9wcm9sb2d1ZSA9IFRSVUU7CisJICAgICAg Y29udGludWU7CisJICAgIH0KKwl9CisgICAgICAvKiBDaGVjayBmb3IgQUhJ IG9yIEFHSEkgZ3ByMTUsdmFsICovCisgICAgICBpZiAoc2F2ZV9saW5rX3N0 YXRlID09IDEgJiYgKGluc3RyWzBdID09IDB4YTcpICYmCisJICAoKEdEQl9U QVJHRVRfSVNfRVNBTUUgJiYgKGluc3RyWzFdID09IDB4ZmIpKSB8fCAoaW5z dHJbMV0gPT0gMHhmYSkpKQorCXsKKwkgIGlmIChmZXh0cmFfaW5mbykKKwkg ICAgZmV4dHJhX2luZm8tPnN0YWNrX2JvdWdodCA9IC0oKigoX19zMTYgKikg JiBpbnN0clsyXSkpOworCSAgc2F2ZV9saW5rX3N0YXRlID0gMzsKKwkgIHZh bGlkX3Byb2xvZ3VlID0gVFJVRTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAg IC8qIEFsdGVybmF0aXZlbHkgY2hlY2sgZm9yIHRoZSBjb21wbGV4IGNvbnN0 cnVjdGlvbiBmb3IKKyAgICAgICAgIGJ1eWluZyBtb3JlIHRoYW4gMzJrIG9m IHN0YWNrCisgICAgICAgICBCUkFTIGdwcngsLis4CisgICAgICAgICBsb25n IHZhbHMgICAgJXIxNSwwKCVncHJ4KSAgZ3ByeCBjdXJyZW50bHkgcjEgKi8K KyAgICAgIGlmICgoc2F2ZV9saW5rX3N0YXRlID09IDEpICYmIChpbnN0clsw XSA9PSAweGE3KQorCSAgJiYgKChpbnN0clsxXSAmIDB4ZikgPT0gMHg1KSAm JiAoKigoX191MTYgKikgJiBpbnN0clsyXSkgPT0gMHg0KQorCSAgJiYgKChp bnN0clsxXSA+PiA0KSAhPSBDT05TVF9QT09MX1JFR0lEWCkpCisJeworCSAg c3VidHJhY3Rfc3BfcmVnaWR4ID0gaW5zdHJbMV0gPj4gNDsKKwkgIHNhdmVf bGlua19zdGF0ZSA9IDI7CisJICBpZiAoZmV4dHJhX2luZm8pCisJICAgIHRh cmdldF9yZWFkX21lbW9yeSAodGVzdF9wYyArIGluc3RybGVuLAorCQkJCShj aGFyICopICZmZXh0cmFfaW5mby0+c3RhY2tfYm91Z2h0LAorCQkJCXNpemVv ZiAoZmV4dHJhX2luZm8tPnN0YWNrX2JvdWdodCkpOworCSAgdGVzdF9wYyAr PSA0OworCSAgdmFsaWRfcHJvbG9ndWUgPSBUUlVFOworCSAgY29udGludWU7 CisJfQorICAgICAgaWYgKHNhdmVfbGlua19zdGF0ZSA9PSAyICYmICgqKChf X3UxNiAqKSAmIGluc3RyWzBdKSA9PSAweDViZjApICYmCisJICAoKigoX191 MTYgKikgJiBpbnN0clsyXSkgPT0gc3VidHJhY3Rfc3BfcmVnaWR4IDw8IDEy KSkKKwl7CisJICBzYXZlX2xpbmtfc3RhdGUgPSAzOworCSAgdmFsaWRfcHJv bG9ndWUgPSBUUlVFOworCSAgY29udGludWU7CisJfQorICAgICAgLyogY2hl Y2sgZm9yIExBIGdwcngsb2Zmc2V0KDE1KSB1c2VkIGZvciB2YXJhcmdzICov CisgICAgICBpZiAodmFyYXJnc19zdGF0ZSA9PSAxICYmCisJICBpbnN0clsw XSA9PSAweDQxICYmICgoaW5zdHJbMV0gJiAweGYpID09IDApCisJICAmJiAo KGluc3RyWzJdID4+IDQpID09IDB4ZikpCisJeworCSAgdmFyYXJnc19zdGF0 ZSA9IDI7CisJICB2YWxpZF9wcm9sb2d1ZSA9IFRSVUU7CisJICBjb250aW51 ZTsKKwl9CisgICAgICAvKgorICAgICAgICAgQ2hlY2sgZm9yIGEgR09UIGxv YWQKKyAgICAgICAgIHdlIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGluZm8gbGlr ZSB3aGV0aGVyIHdlCisgICAgICAgICBhcmUgY29tcGlsZWQgLWZwaWMgdG8g Y2hlY2sgd2hldGhlciB0aGlzIGlzIHZhbGlkCisgICAgICAgICBwcm9sb2d1 ZSAqLworICAgICAgaWYgKGdvdF9zdGF0ZSA9PSAwICYmIGNvbnN0X3Bvb2xf c3RhdGUgPT0gMiAmJiBpbnN0clswXSA9PSAweDU4CisJICAmJiAoaW5zdHJb Ml0gPT0gKENPTlNUX1BPT0xfUkVHSURYIDw8IDQpKQorCSAgJiYgKChpbnN0 clsxXSA+PiA0KSA9PSBHT1RfUkVHSURYKSkKKwl7CisJICBnb3Rfc3RhdGUg PT0gMTsKKwkgIHZhbGlkX3Byb2xvZ3VlID0gVFJVRTsKKwkgIGNvbnRpbnVl OworCX0KKyAgICAgIC8qIENoZWNrIGZvciBzdWJzZXF1ZW50IGFyIGdvdF9y ZWdpZHgsYmFzcl9yZWdpZHggKi8KKyAgICAgIGlmIChnb3Rfc3RhdGUgPT0g MSAmJiBpbnN0clswXSA9PSAweDFhICYmCisJICBpbnN0clsxXSA9PSAoKEdP VF9SRUdJRFggPDwgNCkgfCBDT05TVF9QT09MX1JFR0lEWCkpCisJeworCSAg Z290X3N0YXRlID0gMjsKKwkgIHZhbGlkX3Byb2xvZ3VlID0gVFJVRTsKKwkg IGNvbnRpbnVlOworCX0KKyAgICB9CisgIHdoaWxlICh2YWxpZF9wcm9sb2d1 ZSAmJiBnb29kX3Byb2xvZ3VlKTsKKyAgaWYgKGdvb2RfcHJvbG9ndWUgPT0g VFJVRSkKKyAgICB7CisgICAgICBnb29kX3Byb2xvZ3VlID0gKCgoZ290X3N0 YXRlID09IDApIHx8IChnb3Rfc3RhdGUgPT0gMikpICYmCisJCSAgICAgICAo KGNvbnN0X3Bvb2xfc3RhdGUgPT0gMCkgfHwgKGNvbnN0X3Bvb2xfc3RhdGUg PT0gMikpICYmCisJCSAgICAgICAoKHNhdmVfbGlua19zdGF0ZSA9PSAwKSB8 fCAoc2F2ZV9saW5rX3N0YXRlID09IDQpKSAmJgorCQkgICAgICAgKCh2YXJh cmdzX3N0YXRlID09IDApIHx8ICh2YXJhcmdzX3N0YXRlID09IDIpKSk7Cisg ICAgfQorICBpZiAoZmV4dHJhX2luZm8pCisgICAgeworICAgICAgZmV4dHJh X2luZm8tPmdvb2RfcHJvbG9ndWUgPSBnb29kX3Byb2xvZ3VlOworICAgICAg ZmV4dHJhX2luZm8tPnNraXBfcHJvbG9ndWVfZnVuY3Rpb25fc3RhcnQgPQor CShnb29kX3Byb2xvZ3VlID8gdGVzdF9wYyA6IHBjKTsKKyAgICB9CisgIHJl dHVybiBlcnI7Cit9CisKKworc3RhdGljIENPUkVfQUREUgorczM5MF9zbmlm Zl9wY19mdW5jdGlvbl9zdGFydCAoQ09SRV9BRERSIHBjKQoreworICBDT1JF X0FERFIgZnVuY3Rpb25fc3RhcnQsIHRlc3RfZnVuY3Rpb25fc3RhcnQsIHJl dF9mdW5jdGlvbl9zdGFydCwgbG9vcF9kZWM7CisgIGludCBsb29wX2NudCwg ZXJyOworICBzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbyBmZXh0cmFfaW5mbzsK KyAgZnVuY3Rpb25fc3RhcnQgPSBnZXRfcGNfZnVuY3Rpb25fc3RhcnQgKHBj KTsKKworICBpZiAoZnVuY3Rpb25fc3RhcnQgPT0gMCkKKyAgICB7CisgICAg ICB0ZXN0X2Z1bmN0aW9uX3N0YXJ0ID0gcGM7CisgICAgICBpZiAodGVzdF9m dW5jdGlvbl9zdGFydCAmIDEpCisJbG9vcF9kZWMgPSAxOwkJLyogVGhpcyBp cyBhIHN1c3BpY2lvdXMgYWRkcmVzcyAqLworICAgICAgZWxzZQorCWxvb3Bf ZGVjID0gMjsKKyAgICAgIGxvb3BfY250ID0gMDsKKyAgICAgIGRvCisJewor CSAgZXJyID0KKwkgICAgczM5MF9nZXRfZnJhbWVfaW5mbyAodGVzdF9mdW5j dGlvbl9zdGFydCwgJmZleHRyYV9pbmZvLCBOVUxMLAorCQkJCSBUUlVFKTsK KwkgIGxvb3BfY250Kys7CisJICB0ZXN0X2Z1bmN0aW9uX3N0YXJ0IC09IGxv b3BfZGVjOworCX0KKyAgICAgIHdoaWxlIChlcnIgPT0gMCAmJiBsb29wX2Nu dCA8IDQwOTYKKwkgICAgICYmIGZleHRyYV9pbmZvLmdvb2RfcHJvbG9ndWUg PT0gRkFMU0UpOworICAgICAgaWYgKGZleHRyYV9pbmZvLmdvb2RfcHJvbG9n dWUpCisJZnVuY3Rpb25fc3RhcnQgPSBmZXh0cmFfaW5mby5mdW5jdGlvbl9z dGFydDsKKyAgICB9CisgIHJldHVybiBmdW5jdGlvbl9zdGFydDsKK30KKwor CisKK0NPUkVfQUREUiBzMzkwX2Z1bmN0aW9uX3N0YXJ0IChzdHJ1Y3QgZnJh bWVfaW5mbyAqIGZpKQoreworICBDT1JFX0FERFIgZnVuY3Rpb25fc3RhcnQg PSAwOworCisgIGlmIChmaS0+ZXh0cmFfaW5mbyAmJiBmaS0+ZXh0cmFfaW5m by0+aW5pdGlhbGlzZWQpCisgICAgZnVuY3Rpb25fc3RhcnQgPSBmaS0+ZXh0 cmFfaW5mby0+ZnVuY3Rpb25fc3RhcnQ7CisgIGVsc2UgaWYgKGZpLT5wYykK KyAgICBmdW5jdGlvbl9zdGFydCA9IGdldF9wY19mdW5jdGlvbl9zdGFydCAo ZmktPnBjKTsKKyAgcmV0dXJuIGZ1bmN0aW9uX3N0YXJ0OworfQorCisKKwor CitpbnQKK3MzOTBfZnJhbWVsZXNzX2Z1bmN0aW9uX2ludm9jYXRpb24gKHN0 cnVjdCBmcmFtZV9pbmZvICpmaSkKK3sKKyAgc3RydWN0IGZyYW1lX2V4dHJh X2luZm8gZmV4dHJhX2luZm8sICpmZXh0cmFfaW5mb19wdHI7CisgIGludCBm cmFtZWxlc3MgPSAwOworCisgIGlmIChmaS0+bmV4dCA9PSBOVUxMKQkJLyog bm8gbWF5IGJlIGZyYW1lbGVzcyAqLworICAgIHsKKyAgICAgIGlmIChmaS0+ ZXh0cmFfaW5mbykKKwlmZXh0cmFfaW5mb19wdHIgPSBmaS0+ZXh0cmFfaW5m bzsKKyAgICAgIGVsc2UKKwl7CisJICBmZXh0cmFfaW5mb19wdHIgPSAmZmV4 dHJhX2luZm87CisJICBzMzkwX2dldF9mcmFtZV9pbmZvIChzMzkwX3NuaWZm X3BjX2Z1bmN0aW9uX3N0YXJ0IChmaS0+cGMpLAorCQkJICAgICAgIGZleHRy YV9pbmZvX3B0ciwgTlVMTCwgVFJVRSk7CisJfQorICAgICAgZnJhbWVsZXNz ID0gKChmZXh0cmFfaW5mb19wdHItPmdvb2RfcHJvbG9ndWUpCisJCSAgICYm IChmZXh0cmFfaW5mb19wdHItPnN0YWNrX2JvdWdodCA9PSAwKSk7CisgICAg fQorICByZXR1cm4gZnJhbWVsZXNzOworCit9CisKKworc3RhdGljIGludAor czM5MF9pc19zaWdyZXR1cm4gKENPUkVfQUREUiBwYywgc3RydWN0IGZyYW1l X2luZm8gKnNpZ2hhbmRsZXJfZmksCisJCSAgIENPUkVfQUREUiAqIHNyZWdz LCBDT1JFX0FERFIgKiBzaWdjYWxsZXJfcGMpCit7CisgIF9fdTggaW5zdHJb UzM5MF9NQVhfSU5TVFJfU0laRV07CisgIGRpc2Fzc2VtYmxlX2luZm8gaW5m bzsKKyAgaW50IGluc3RybGVuOworICBDT1JFX0FERFIgc2NvbnRleHQ7Cisg IGludCByZXR2YWwgPSBGQUxTRTsKKyAgQ09SRV9BRERSIG9yaWdfc3A7Cisg IENPUkVfQUREUiB0ZW1wX3NyZWdzOworCisgIHNjb250ZXh0ID0gdGVtcF9z cmVncyA9IDA7CisKKyAgaW5mby5yZWFkX21lbW9yeV9mdW5jID0gZGlzX2Fz bV9yZWFkX21lbW9yeTsKKyAgaW5zdHJsZW4gPSBzMzkwX3JlYWRpbnN0cnVj dGlvbiAoaW5zdHIsIHBjLCAmaW5mbyk7CisgIGlmIChzaWdjYWxsZXJfcGMp CisgICAgKnNpZ2NhbGxlcl9wYyA9IDA7CisgIGlmICgoaW5zdHJsZW4gPT0g UzM5MF9TWVNDQUxMX1NJWkUpICYmCisgICAgICAoKCgoUzM5MF9TWVNDQUxM X09QQ09ERSB8IHMzOTBfTlJfc2lncmV0dXJuKSkgPT0gKihfX3UxNiAqKSBp bnN0cikgfHwKKyAgICAgICAoKChTMzkwX1NZU0NBTExfT1BDT0RFIHwgczM5 MF9OUl9ydF9zaWdyZXR1cm4pKSA9PSAqKF9fdTE2ICopIGluc3RyKSkpCisg ICAgeworICAgICAgaWYgKHNpZ2hhbmRsZXJfZmkpCisJeworCSAgaWYgKHMz OTBfZnJhbWVsZXNzX2Z1bmN0aW9uX2ludm9jYXRpb24gKHNpZ2hhbmRsZXJf ZmkpKQorCSAgICBvcmlnX3NwID0gc2lnaGFuZGxlcl9maS0+ZnJhbWU7CisJ ICBlbHNlCisJICAgIG9yaWdfc3AgPSBBRERSX0JJVFNfUkVNT1ZFICgoQ09S RV9BRERSKQorCQkJCQlyZWFkX21lbW9yeV9pbnRlZ2VyIChzaWdoYW5kbGVy X2ZpLT5mcmFtZSwKKwkJCQkJCQkgICAgIFMzOTBfR1BSX1NJWkUpKTsKKwkg IGlmIChvcmlnX3NwICYmIHNpZ2NhbGxlcl9wYykKKwkgICAgeworCSAgICAg IHNjb250ZXh0ID0gb3JpZ19zcCArIFMzOTBfU0lHTkFMX0ZSQU1FU0laRTsK KwkgICAgICB0ZW1wX3NyZWdzID0gQUREUl9CSVRTX1JFTU9WRSgoQ09SRV9B RERSKQorCQkJCQkgICAgcmVhZF9tZW1vcnlfaW50ZWdlciAoc2NvbnRleHQg KyAKKwkJCQkJCXMzOTBfb2Zmc2V0b2YoczM5MHhfc2lnY29udGV4dCxzMzkw X3NpZ2NvbnRleHQsc3JlZ3MpLAorCQkJCQkJUzM5MF9HUFJfU0laRSkpOwor CSAgICAgICpzaWdjYWxsZXJfcGMgPQorCQlBRERSX0JJVFNfUkVNT1ZFICgo Q09SRV9BRERSKQorCQkJCSAgcmVhZF9tZW1vcnlfaW50ZWdlciAodGVtcF9z cmVncyArCisJCQkJICBzMzkwX29mZnNldG9mKHMzOTB4X3NpZ3JlZ3MsczM5 MF9zaWdyZWdzLHJlZ3MucHN3LmFkZHIpLAorCQkJCSAgUzM5MF9QU1dfQURE Ul9TSVpFKSk7CisJICAgIH0KKwl9CisgICAgICByZXR2YWwgPSBUUlVFOwor ICAgIH0KKyAgaWYgKHNyZWdzKQorICAgICpzcmVncyA9IHRlbXBfc3JlZ3M7 CisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgIFdlIG5lZWQgdG8gZG8g c29tZXRoaW5nIGJldHRlciBoZXJlIGJ1dCB0aGlzIHdpbGwga2VlcCB1cyBv dXQgb2YgdHJvdWJsZQorICBmb3IgdGhlIG1vbWVudC4KKyAgRm9yIHNvbWUg cmVhc29uIHRoZSBibG9ja2ZyYW1lLmMgY2FsbHMgdXMgd2l0aCBmaS0+bmV4 dC0+ZnJvbWxlYWYKKyAgc28gdGhpcyBzZWVtcyBvZiBsaXR0bGUgdXNlIHRv IHVzLiAqLwordm9pZAorczM5MF9pbml0X2ZyYW1lX3BjX2ZpcnN0IChpbnQg bmV4dF9mcm9tbGVhZiwgc3RydWN0IGZyYW1lX2luZm8gKmZpKQoreworICBD T1JFX0FERFIgc2lnY2FsbGVyX3BjOworCisgIGZpLT5wYyA9IDA7CisgIGlm IChuZXh0X2Zyb21sZWFmKQorICAgIHsKKyAgICAgIGZpLT5wYyA9IEFERFJf QklUU19SRU1PVkUgKHJlYWRfcmVnaXN0ZXIgKFMzOTBfUkVUQUREUl9SRUdO VU0pKTsKKyAgICAgIC8qIGZpeCBzaWduYWwgaGFuZGxlcnMgKi8KKyAgICB9 CisgIGVsc2UgaWYgKGZpLT5uZXh0ICYmIGZpLT5uZXh0LT5wYykKKyAgICBm aS0+cGMgPSBzMzkwX2ZyYW1lX3NhdmVkX3BjX25vZml4IChmaS0+bmV4dCk7 CisgIGlmIChmaS0+cGMgJiYgZmktPm5leHQgJiYgZmktPm5leHQtPmZyYW1l ICYmCisgICAgICBzMzkwX2lzX3NpZ3JldHVybiAoZmktPnBjLCBmaS0+bmV4 dCwgTlVMTCwgJnNpZ2NhbGxlcl9wYykpCisgICAgeworICAgICAgZmktPnBj ID0gc2lnY2FsbGVyX3BjOworICAgIH0KKworfQorCit2b2lkCitzMzkwX2lu aXRfZXh0cmFfZnJhbWVfaW5mbyAoaW50IGZyb21sZWFmLCBzdHJ1Y3QgZnJh bWVfaW5mbyAqZmkpCit7CisgIGZpLT5leHRyYV9pbmZvID0gZnJhbWVfb2Jz dGFja19hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbykp OworICBpZiAoZmktPnBjKQorICAgIHMzOTBfZ2V0X2ZyYW1lX2luZm8gKHMz OTBfc25pZmZfcGNfZnVuY3Rpb25fc3RhcnQgKGZpLT5wYyksCisJCQkgZmkt PmV4dHJhX2luZm8sIE5VTEwsIFRSVUUpOworICBlbHNlCisgICAgczM5MF9t ZW1zZXRfZXh0cmFfaW5mbyAoZmktPmV4dHJhX2luZm8pOworfQorCisvKiBJ ZiBzYXZlZCByZWdpc3RlcnMgb2YgZnJhbWUgRkkgYXJlIG5vdCBrbm93biB5 ZXQsIHJlYWQgYW5kIGNhY2hlIHRoZW0uCisgICAmRkVYVFJBX0lORk9QIGNv bnRhaW5zIHN0cnVjdCBmcmFtZV9leHRyYV9pbmZvOyBUREFUQVAgY2FuIGJl IE5VTEwsCisgICBpbiB3aGljaCBjYXNlIHRoZSBmcmFtZWRhdGEgYXJlIHJl YWQuICAqLworCit2b2lkCitzMzkwX2ZyYW1lX2luaXRfc2F2ZWRfcmVncyAo c3RydWN0IGZyYW1lX2luZm8gKmZpKQoreworCisgIGlmIChmaS0+c2F2ZWRf cmVncyA9PSBOVUxMKQorICAgIHsKKworICAgICAgZnJhbWVfc2F2ZWRfcmVn c196YWxsb2MgKGZpKTsKKyAgICAgIGlmIChmaS0+ZXh0cmFfaW5mbykKKwl7 CisJICBpZiAoIWZpLT5leHRyYV9pbmZvLT5pbml0aWFsaXNlZCAmJiBmaS0+ cGMpCisJICAgIHMzOTBfZ2V0X2ZyYW1lX2luZm8gKHMzOTBfc25pZmZfcGNf ZnVuY3Rpb25fc3RhcnQgKGZpLT5wYyksCisJCQkJIGZpLT5leHRyYV9pbmZv LCBmaSwgVFJVRSk7CisJICBpZiAoZmktPmV4dHJhX2luZm8tPmdvb2RfcHJv bG9ndWUpCisJICAgIHMzOTBfZ2V0X2ZyYW1lX2luZm8gKGZpLT5leHRyYV9p bmZvLT5mdW5jdGlvbl9zdGFydCwKKwkJCQkgZmktPmV4dHJhX2luZm8sIGZp LCBGQUxTRSk7CisJfQorICAgIH0KK30KKworCisKK0NPUkVfQUREUiBzMzkw X2ZyYW1lX2FyZ3NfYWRkcmVzcyAoc3RydWN0IGZyYW1lX2luZm8gKmZpKQor eworCisgIC8qIEFwcGFyZW50bHkgZ2RiIGFscmVhZHkga25vd3MgZ2RiX2Fy Z3Nfb2Zmc2V0IGl0c2VsZiAqLworICByZXR1cm4gZmktPmZyYW1lOworfQor CisKK3N0YXRpYyBDT1JFX0FERFIKK3MzOTBfZnJhbWVfc2F2ZWRfcGNfbm9m aXggKHN0cnVjdCBmcmFtZV9pbmZvICpmaSkKK3sKKyAgaWYgKGZpLT5leHRy YV9pbmZvICYmIGZpLT5leHRyYV9pbmZvLT5zYXZlZF9wY192YWxpZCkKKyAg ICByZXR1cm4gZmktPmV4dHJhX2luZm8tPnNhdmVkX3BjOworICBzMzkwX2Zy YW1lX2luaXRfc2F2ZWRfcmVncyAoZmkpOworICBpZiAoZmktPmV4dHJhX2lu Zm8pCisgICAgeworICAgICAgZmktPmV4dHJhX2luZm8tPnNhdmVkX3BjX3Zh bGlkID0gVFJVRTsKKyAgICAgIGlmIChmaS0+ZXh0cmFfaW5mby0+Z29vZF9w cm9sb2d1ZSkKKwl7CisJICByZXR1cm4gKGZpLT5leHRyYV9pbmZvLT5zYXZl ZF9wYyA9CisJCSAgQUREUl9CSVRTX1JFTU9WRShyZWFkX21lbW9yeV9pbnRl Z2VyKGZpLT5zYXZlZF9yZWdzW1MzOTBfUkVUQUREUl9SRUdOVU1dLAorCQkJ CQkJICAgICAgIFMzOTBfR1BSX1NJWkUpKSk7CisJfQorICAgIH0KKyAgcmV0 dXJuIDA7Cit9CisKK0NPUkVfQUREUiBzMzkwX2ZyYW1lX3NhdmVkX3BjIChz dHJ1Y3QgZnJhbWVfaW5mbyAqIGZpKQoreworICBDT1JFX0FERFIgc2F2ZWRf cGMgPSAwLCBzaWdfcGM7CisKKyAgaWYgKGZpLT5leHRyYV9pbmZvICYmIGZp LT5leHRyYV9pbmZvLT5zaWdfZml4ZWRfc2F2ZWRfcGNfdmFsaWQpCisgICAg cmV0dXJuIGZpLT5leHRyYV9pbmZvLT5zaWdfZml4ZWRfc2F2ZWRfcGM7Cisg IHNhdmVkX3BjID0gczM5MF9mcmFtZV9zYXZlZF9wY19ub2ZpeCAoZmkpOwor CisgIGlmIChmaS0+ZXh0cmFfaW5mbykKKyAgICB7CisgICAgICBmaS0+ZXh0 cmFfaW5mby0+c2lnX2ZpeGVkX3NhdmVkX3BjX3ZhbGlkID0gVFJVRTsKKyAg ICAgIGlmIChzYXZlZF9wYykKKwl7CisJICBpZiAoczM5MF9pc19zaWdyZXR1 cm4gKHNhdmVkX3BjLCBmaSwgTlVMTCwgJnNpZ19wYykpCisJICAgIHNhdmVk X3BjID0gc2lnX3BjOworCX0KKyAgICAgIGZpLT5leHRyYV9pbmZvLT5zaWdf Zml4ZWRfc2F2ZWRfcGMgPSBzYXZlZF9wYzsKKyAgICB9CisgIHJldHVybiBz YXZlZF9wYzsKK30KKworCisKKworLyogV2Ugd2FudCBiYWNrdHJhY2VzIG91 dCBvZiBzaWduYWwgaGFuZGxlcnMgc28gd2UgZG9uJ3QKKyAgIHNldCB0aGlz ZnJhbWUtPnNpZ25hbF9oYW5kbGVyX2NhbGxlciB0byAxICovCisKK0NPUkVf QUREUiBzMzkwX2ZyYW1lX2NoYWluIChzdHJ1Y3QgZnJhbWVfaW5mbyAqIHRo aXNmcmFtZSkKK3sKKworICBDT1JFX0FERFIgcHJldl9mcCA9IDA7CisgIHN0 cnVjdCBmcmFtZV9leHRyYV9pbmZvIGZleHRyYV9pbmZvOworICBDT1JFX0FE RFIgc2F2ZWRfcGMsIHNpZ19wYzsKKyAgaW50IHJlZ25vOworICBDT1JFX0FE RFIgc3JlZ3M7CisgIGludCBzaWdyZXR1cm47CisKKyAgaWYgKHRoaXNmcmFt ZS0+cHJldiAmJiB0aGlzZnJhbWUtPnByZXYtPmZyYW1lKQorICAgIHByZXZf ZnAgPSB0aGlzZnJhbWUtPnByZXYtPmZyYW1lOworICBlbHNlCisgICAgewor ICAgICAgLyogV2UgaGF2ZSB0byBkbyBzb21lIHdvcmsgKi8KKyAgICAgIGlm ICghdGhpc2ZyYW1lLT5wYykKKwlyZXR1cm4gMDsKKyAgICAgIHNhdmVkX3Bj ID0gczM5MF9mcmFtZV9zYXZlZF9wY19ub2ZpeCAodGhpc2ZyYW1lKTsKKyAg ICAgIGlmICghc2F2ZWRfcGMpCisJcmV0dXJuIDA7CisgICAgICBpZiAoCisJ ICAoc2lncmV0dXJuID0KKwkgICBzMzkwX2lzX3NpZ3JldHVybiAoc2F2ZWRf cGMsIHRoaXNmcmFtZSwgJnNyZWdzLCAmc2lnX3BjKSkpCisJc2F2ZWRfcGMg PSBzaWdfcGM7CisgICAgICBzMzkwX2dldF9mcmFtZV9pbmZvIChzMzkwX3Nu aWZmX3BjX2Z1bmN0aW9uX3N0YXJ0IChzYXZlZF9wYyksCisJCQkgICAmZmV4 dHJhX2luZm8sIE5VTEwsIFRSVUUpOworICAgICAgaWYgKCFmZXh0cmFfaW5m by5nb29kX3Byb2xvZ3VlKQorCXJldHVybiAwOworICAgICAgaWYgKHNpZ3Jl dHVybikKKwlwcmV2X2ZwID0KKwkgIEFERFJfQklUU19SRU1PVkUgKChDT1JF X0FERFIpCisJCQkgICAgcmVhZF9tZW1vcnlfaW50ZWdlciAoc3JlZ3MgKwor CQkJCQkJIHMzOTBfb2Zmc2V0b2YgKHMzOTB4X3NpZ3JlZ3MsCisJCQkJCQkJ CXMzOTBfc2lncmVncywKKwkJCQkJCQkJcmVncy4KKwkJCQkJCQkJZ3Bycwor CQkJCQkJCQlbZmV4dHJhX2luZm8uCisJCQkJCQkJCSBoYXNfZnJhbWVfcG9p bnRlcgorCQkJCQkJCQkgPyAxMSA6IDE1XSksCisJCQkJCQkgUzM5MF9HUFJf U0laRSkpOworICAgICAgZWxzZQorCXsKKwkgIHJlZ25vID0KKwkgICAgKGZl eHRyYV9pbmZvLgorCSAgICAgaGFzX2ZyYW1lX3BvaW50ZXIgPyBTMzkwX0ZS QU1FX1JFR05VTSA6IFMzOTBfU1BfUkVHTlVNKTsKKwkgIC8qIGlmIGl0IHdh c24ndCBzYXZlZCB3ZSBtdXN0IGJlIGluIHRoZSBpbm5lcm1vc3QgZnJhbWUg Ki8KKwkgIHByZXZfZnAgPSBBRERSX0JJVFNfUkVNT1ZFICh0aGlzZnJhbWUt PnNhdmVkX3JlZ3NbcmVnbm9dID8KKwkJCQkgICAgICByZWFkX21lbW9yeV9p bnRlZ2VyICh0aGlzZnJhbWUtPgorCQkJCQkJCSAgIHNhdmVkX3JlZ3NbcmVn bm9dLAorCQkJCQkJCSAgIFMzOTBfR1BSX1NJWkUpIDoKKwkJCQkgICAgICBy ZWFkX3JlZ2lzdGVyIChyZWdubykpOworCX0KKworCisgICAgfQorICByZXR1 cm4gcHJldl9mcDsKK30KKworLyoKKyAgV2hldGhlciBzdHJ1Y3QgZnJhbWVf ZXh0cmFfaW5mbyBpcyBhY3R1YWxseSBuZWVkZWQgSSdsbCBoYXZlIHRvIGZp Z3VyZQorICBvdXQgYXMgb3VyIGZyYW1lcyBhcmUgc2ltaWxhciB0byByczYw MDAgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eQorICBpMzg2IGRvc2VuJ3QgbmVl ZCBpdC4gKi8KKworCisKKy8qIGEgZ2l2ZW4gcmV0dXJuIHZhbHVlIGluIGBy ZWdidWYnIHdpdGggYSB0eXBlIGB2YWx0eXBlJywgZXh0cmFjdCBhbmQgY29w eSBpdHMKKyAgIHZhbHVlIGludG8gYHZhbGJ1ZicgKi8KK3ZvaWQKK3MzOTBf ZXh0cmFjdF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICp2YWx0eXBlLCBj aGFyICpyZWdidWYsIGNoYXIgKnZhbGJ1ZikKK3sKKyAgLyogZmxvYXRzIGFu ZCBkb3VibGVzIGFyZSByZXR1cm5lZCBpbiBmcHIwLiBmcHIncyBoYXZlIGEg c2l6ZSBvZiA4IGJ5dGVzLgorICAgICBXZSBuZWVkIHRvIHRydW5jYXRlIHRo ZSByZXR1cm4gdmFsdWUgaW50byBmbG9hdCBzaXplICg0IGJ5dGUpIGlmCisg ICAgIG5lY2Vzc2FyeS4gKi8KKyAgaW50IGxlbiA9IFRZUEVfTEVOR1RIICh2 YWx0eXBlKTsKKworICBpZiAoVFlQRV9DT0RFICh2YWx0eXBlKSA9PSBUWVBF X0NPREVfRkxUKQorICAgIHsKKyAgICAgIGlmIChsZW4gPiAoVEFSR0VUX0ZM T0FUX0JJVD4+MykpCisJbWVtY3B5ICh2YWxidWYsJnJlZ2J1ZltSRUdJU1RF Ul9CWVRFIChTMzkwX0ZQMF9SRUdOVU0pXSxsZW4pOworICAgICAgZWxzZQor CXsKKwkgIC8qIGZsb2F0ICovCisJICBET1VCTEVTVCB2YWw7CisJICAKKwkg IGZsb2F0Zm9ybWF0X3RvX2RvdWJsZXN0ICgmZmxvYXRmb3JtYXRfaWVlZV9k b3VibGVfYmlnLAorCQkJCSAgICZyZWdidWZbUkVHSVNURVJfQllURSAoUzM5 MF9GUDBfUkVHTlVNKV0sICZ2YWwpOworCSAgc3RvcmVfZmxvYXRpbmcgKHZh bGJ1ZixsZW4sIHZhbCk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIGludCBvZmZzZXQgPSAwOworICAgICAgLyogcmV0dXJuIHZhbHVlIGlz IGNvcGllZCBzdGFydGluZyBmcm9tIHIyLiAqLworICAgICAgaWYgKFRZUEVf TEVOR1RIICh2YWx0eXBlKSA8IFMzOTBfR1BSX1NJWkUpCisJb2Zmc2V0ID0g UzM5MF9HUFJfU0laRSAtIFRZUEVfTEVOR1RIICh2YWx0eXBlKTsKKyAgICAg IG1lbWNweSAodmFsYnVmLAorCSAgICAgIHJlZ2J1ZiArIFJFR0lTVEVSX0JZ VEUgKFMzOTBfR1AwX1JFR05VTSArIDIpICsgb2Zmc2V0LAorCSAgICAgIFRZ UEVfTEVOR1RIICh2YWx0eXBlKSk7CisgICAgfQorfQorCisKK3N0YXRpYyBj aGFyICoKK3MzOTBfcHJvbW90ZV9pbnRlZ2VyX2FyZ3VtZW50KHN0cnVjdCB0 eXBlICp2YWx0eXBlLGNoYXIgKnZhbGJ1ZixjaGFyICpyZWdfYnVmZixpbnQg KmFyZ2xlbikKK3sKKyAgY2hhciAqdmFsdWU9dmFsYnVmOworICBpbnQgbGVu PVRZUEVfTEVOR1RIICh2YWx0eXBlKTsKKyAgCisgIGlmIChsZW4gPCBTMzkw X0dQUl9TSVpFKQorICAgIHsKKyAgICAgIC8qIFdlIG5lZWQgdG8gdXBncmFk ZSB0aGlzIHZhbHVlIHRvIGEgcmVnaXN0ZXIgdG8gcGFzcyBpdCBjb3JyZWN0 bHkgKi8KKyAgICAgIGludCBpZHgsZGlmZj1TMzkwX0dQUl9TSVpFLWxlbixu ZWdhdGl2ZSA9ICghVFlQRV9VTlNJR05FRCAodmFsdHlwZSkmJnZhbHVlWzBd JjB4ODApOwkJICAKKyAgICAgIGZvcihpZHg9MDtpZHg8UzM5MF9HUFJfU0la RTtpZHgrKykKKwl7CisJICByZWdfYnVmZltpZHhdID0gKGlkeDxkaWZmID8g KG5lZ2F0aXZlID8gMHhmZjoweDApIDogCisJCQkgICB2YWx1ZVtpZHgtZGlm Zl0gKTsKKwl9CisgICAgICB2YWx1ZT1yZWdfYnVmZjsKKyAgICAgICphcmds ZW4gPSBTMzkwX0dQUl9TSVpFOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIGlmIChsZW4gJiAoUzM5MF9HUFJfU0laRSAtIDEpKQorCXsKKwkgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGVyciwKKwkJCSAgICAgICJzMzkw X3Byb21vdGVfaW50ZWdlcl9hcmd1bWVudCBkZXRlY3RlZCBhbiBhcmd1bWVu dCBub3QgIgorCQkJICAgICAgImEgbXVsdGlwbGUgb2YgUzM5MF9HUFJfU0la RSAmIGdyZWF0ZXIgdGhhbiBTMzkwX0dQUl9TSVpFICIKKwkJCSAgICAgICJ3 ZSBtaWdodCBub3QgZGVhbCB3aXRoIHRoaXMgY29ycmVjdGx5LlxuIik7CisJ fQorICAgICAgKmFyZ2xlbiA9IGxlbjsKKyAgICB9CisKKyAgcmV0dXJuKHZh bHVlKTsKK30KKwordm9pZAorczM5MF9zdG9yZV9yZXR1cm5fdmFsdWUgKHN0 cnVjdCB0eXBlICp2YWx0eXBlLCBjaGFyICp2YWxidWYpCit7CisgIGludCAg ICAgYXJnbGVuOworICBjaGFyICAgICpyZWdfYnVmZj1hbGxvY2EobWF4KFMz OTBfRlBSX1NJWkUsUzM5MF9SRUdJU1RFUl9TSVpFKSksKnZhbHVlOworCisg IGlmIChUWVBFX0NPREUgKHZhbHR5cGUpID09IFRZUEVfQ09ERV9GTFQpCisg ICAgeworICAgICAgIERPVUJMRVNUIHRlbXBmbG9hdCA9IGV4dHJhY3RfZmxv YXRpbmcgKHZhbGJ1ZixUWVBFX0xFTkdUSCAodmFsdHlwZSkpOworCSAgICAg IAorICAgICAgIGZsb2F0Zm9ybWF0X2Zyb21fZG91Ymxlc3QgKCAmZmxvYXRm b3JtYXRfaWVlZV9kb3VibGVfYmlnLCZ0ZW1wZmxvYXQsIHJlZ19idWZmKTsK KyAgICAgICB3cml0ZV9yZWdpc3Rlcl9ieXRlcyAoUkVHSVNURVJfQllURSAo UzM5MF9GUDBfUkVHTlVNKSxyZWdfYnVmZixTMzkwX0ZQUl9TSVpFKTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICB2YWx1ZT1zMzkwX3Byb21vdGVf aW50ZWdlcl9hcmd1bWVudCh2YWx0eXBlLHZhbGJ1ZixyZWdfYnVmZiwmYXJn bGVuKTsKKyAgICAgIC8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyByZXR1cm5lZCBp biBHUFIyIGFuZCB1cC4gKi8KKyAgICAgIHdyaXRlX3JlZ2lzdGVyX2J5dGVz IChSRUdJU1RFUl9CWVRFIChTMzkwX0dQMF9SRUdOVU0gKyAyKSwgdmFsdWUs IGFyZ2xlbik7CisgICAgfQorfQorc3RhdGljIGludAorZ2RiX3ByaW50X2lu c25fczM5MCAoYmZkX3ZtYSBtZW1hZGRyLCBkaXNhc3NlbWJsZV9pbmZvICog aW5mbykKK3sKKyAgX191OCBpbnN0cmJ1ZmZbUzM5MF9NQVhfSU5TVFJfU0la RV07CisgIGludCBpbnN0cmxlbiwgY250OworCisgIGluc3RybGVuID0gczM5 MF9yZWFkaW5zdHJ1Y3Rpb24gKGluc3RyYnVmZiwgKENPUkVfQUREUikgbWVt YWRkciwgaW5mbyk7CisgIGlmIChpbnN0cmxlbiA8IDApCisgICAgeworICAg ICAgKCppbmZvLT5tZW1vcnlfZXJyb3JfZnVuYykgKGluc3RybGVuLCBtZW1h ZGRyLCBpbmZvKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGZvciAo Y250ID0gMDsgY250IDwgaW5zdHJsZW47IGNudCsrKQorICAgIGluZm8tPmZw cmludGZfZnVuYyAoaW5mby0+c3RyZWFtLCAiJTAyWCAiLCBpbnN0cmJ1ZmZb Y250XSk7CisgIGZvciAoY250ID0gaW5zdHJsZW47IGNudCA8IFMzOTBfTUFY X0lOU1RSX1NJWkU7IGNudCsrKQorICAgIGluZm8tPmZwcmludGZfZnVuYyAo aW5mby0+c3RyZWFtLCAiICAgIik7CisgIGluc3RybGVuID0gcHJpbnRfaW5z bl9zMzkwIChtZW1hZGRyLCBpbmZvKTsKKyAgcmV0dXJuIGluc3RybGVuOwor fQorCisKKworLyogTm90IHRoZSBtb3N0IGVmZmljZW50IGNvZGUgaW4gdGhl IHdvcmxkICovCitpbnQKK3MzOTBfZnBfcmVnbnVtICgpCit7CisgIGludCBy ZWdubyA9IFMzOTBfU1BfUkVHTlVNOworICBzdHJ1Y3QgZnJhbWVfZXh0cmFf aW5mbyBmZXh0cmFfaW5mbzsKKyAgczM5MF9nZXRfZnJhbWVfaW5mbyAoczM5 MF9zbmlmZl9wY19mdW5jdGlvbl9zdGFydAorCQkgICAgICAgKHJlYWRfcmVn aXN0ZXIgKFMzOTBfUENfUkVHTlVNKSksICZmZXh0cmFfaW5mbywgTlVMTCwK KwkJICAgICAgIFRSVUUpOworICBpZiAoZmV4dHJhX2luZm8uZ29vZF9wcm9s b2d1ZSAmJiBmZXh0cmFfaW5mby5oYXNfZnJhbWVfcG9pbnRlcikKKyAgICBy ZWdubyA9IFMzOTBfRlJBTUVfUkVHTlVNOworICByZXR1cm4gcmVnbm87Cit9 CisKK0NPUkVfQUREUiBzMzkwX3JlYWRfZnAgKCkKK3sKKyAgcmV0dXJuIHJl YWRfcmVnaXN0ZXIgKHMzOTBfZnBfcmVnbnVtICgpKTsKK30KKworCit2b2lk CitzMzkwX3dyaXRlX2ZwIChDT1JFX0FERFIgdmFsKQoreworICB3cml0ZV9y ZWdpc3RlciAoczM5MF9mcF9yZWdudW0gKCksIHZhbCk7Cit9CisKKwordm9p ZAorczM5MF9wdXNoX2R1bW15X2ZyYW1lICgpCit7CisgIENPUkVfQUREUiBv cmlnX3NwID0gcmVhZF9yZWdpc3RlciAoUzM5MF9TUF9SRUdOVU0pLCBuZXdf c3A7CisgIHZvaWQgKnNhdmVkX3JlZ3M9YWxsb2NhKFNJWkVPRl9TMzkwX0dE Ql9SRUdTKTsKKworICBuZXdfc3AgPSAob3JpZ19zcCAtIChTSVpFT0ZfUzM5 MF9HREJfUkVHUyArIFMzOTBfR1BSX1NJWkUpKTsKKyAgcmVhZF9yZWdpc3Rl cl9ieXRlcyAoMCwgKGNoYXIgKilzYXZlZF9yZWdzLFNJWkVPRl9TMzkwX0dE Ql9SRUdTKTsKKyAgLyogVXNlIHNhdmVkIGNvcHkgaW5zdGVhZCBvZiBvcmln X3NwIGFzIHRoaXMgd2lsbCBoYXZlIHRoZSBjb3JyZWN0IGVuZGlhbm5lc3Mg Ki8KKyAgd3JpdGVfbWVtb3J5IChuZXdfc3AsIChjaGFyICopc2F2ZWRfcmVn cysgCisJCXMzOTBfb2Zmc2V0b2YoczM5MHhfZ2RiX3JlZ3MsczM5MF9nZGJf cmVncyxncHJzW1MzOTBfU1BfUkVHTlVNXSksCisJCVMzOTBfR1BSX1NJWkUp OworICB3cml0ZV9tZW1vcnkgKG5ld19zcCArIFMzOTBfR1BSX1NJWkUsIChj aGFyICopICZzYXZlZF9yZWdzLAorCQlTSVpFT0ZfUzM5MF9HREJfUkVHUyk7 CisgIHdyaXRlX3JlZ2lzdGVyIChTMzkwX1NQX1JFR05VTSwgbmV3X3NwKTsK K30KKworLyogcG9wIHRoZSBpbm5lcm1vc3QgZnJhbWUsIGdvIGJhY2sgdG8g dGhlIGNhbGxlci4KKyAgICBVc2VkIGluIGBjYWxsX2Z1bmN0aW9uX2J5X2hh bmQnIHRvIHJlbW92ZSBhbiBhcnRpZmljaWFsIHN0YWNrCisgICAgIGZyYW1l LiAgKi8KK3ZvaWQKK3MzOTBfcG9wX2ZyYW1lICgpCit7CisgIENPUkVfQURE UiBuZXdfc3AgPSByZWFkX3JlZ2lzdGVyIChTMzkwX1NQX1JFR05VTSksIG9y aWdfc3A7CisgIHZvaWQgKnNhdmVkX3JlZ3M9YWxsb2NhKFNJWkVPRl9TMzkw X0dEQl9SRUdTKTsKKworCisgIHJlYWRfbWVtb3J5IChuZXdfc3AgKyBTMzkw X0dQUl9TSVpFLCAoY2hhciAqKXNhdmVkX3JlZ3MsCisJICAgICAgIHMzOTBf c2l6ZW9mKHMzOTB4X2dkYl9yZWdzLHMzOTBfZ2RiX3JlZ3MpKTsKKyAgd3Jp dGVfcmVnaXN0ZXJfYnl0ZXMgKDAsIChjaGFyICopICZzYXZlZF9yZWdzLFNJ WkVPRl9TMzkwX0dEQl9SRUdTKTsKK30KKworLyogdXNlZCBieSBjYWxsIGZ1 bmN0aW9uIGJ5IGhhbmQKKyAgc3RydWN0X3JldHVybiBpbmRpY2F0ZXMgdGhh dCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJ1Y3R1cmUgJgorICB0aGVy ZWZvcmUgZ3ByMiBzdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUg dG8gYmUgcmV0dXJuZWQgYXMKKyAgb3Bwb3NlZCB0byB0aGUgZmlyc3QgYXJn dW1lbnQuCisgIEN1cnJlbnRseSBJIGhhdmVuJ3Qgc2VlbiBhIFRZUEVfQ09E RV9JTlQgd2hvc2Ugc2l6ZSB3YXNuJ3QgMl5uIG9yIGxlc3MKKyAgdGhhbiBT MzkwX0dQUl9TSVpFIHRoaXMgaXMgZ29vZCBiZWNhdXNlIEkgZG9uJ3Qgc2Vl bSB0byBoYXZlIHRvIHdvcnJ5CisgIGFib3V0IHNpZ24gZXh0ZW5kaW5nIHB1 c2hlZCBhcmd1bWVudHMgKGkuZS4gYSBzaWduZWQgY2hhciBjdXJyZW50bHkK KyAgY29tZXMgaW50byB0aGlzIGNvZGUgd2l0aCBhIHNpemUgb2YgNCApLiAq LworCitDT1JFX0FERFIKK3MzOTBfcHVzaF9hcmd1bWVudHMgKGludCBuYXJn cywgdmFsdWVfcHRyICogYXJncywgQ09SRV9BRERSIHNwLAorCQkgICAgIGlu dCBzdHJ1Y3RfcmV0dXJuLCBDT1JFX0FERFIgc3RydWN0X2FkZHIpCit7Cisg IGludCBudW1fZmxvYXRfYXJncywgbnVtX2dwcl9hcmdzLCBvcmlnX251bV9n cHJfYXJncywgYXJnbm87CisgIGludCBzZWNvbmRfcGFzcywgbGVuLCBhcmds ZW4sIGdwcnNfcmVxdWlyZWQ7CisgIENPUkVfQUREUiBvdXRnb2luZ19hcmdz X3B0ciwgb3V0Z29pbmdfYXJnc19zcGFjZTsKKyAgdmFsdWVfcHRyIGFyZzsK KyAgc3RydWN0IHR5cGUgKnR5cGU7CisgIGludCBtYXhfbnVtX2dwcl9hcmdz ID0gNSAtIChzdHJ1Y3RfcmV0dXJuID8gMSA6IDApOworICBpbnQgYXJnMF9y ZWdudW0gPSBTMzkwX0dQMF9SRUdOVU0gKyAyICsgKHN0cnVjdF9yZXR1cm4g PyAxIDogMCk7CisgIGNoYXIgICAgKnJlZ19idWZmPWFsbG9jYShtYXgoUzM5 MF9GUFJfU0laRSxTMzkwX1JFR0lTVEVSX1NJWkUpKSwqdmFsdWU7CisKKyAg Zm9yIChzZWNvbmRfcGFzcyA9IEZBTFNFOyBzZWNvbmRfcGFzcyA8PSBUUlVF OyBzZWNvbmRfcGFzcysrKQorICAgIHsKKyAgICAgIGlmIChzZWNvbmRfcGFz cykKKwlvdXRnb2luZ19hcmdzX3B0ciA9IHNwICsgUzM5MF9TVEFDS19GUkFN RV9PVkVSSEVBRDsKKyAgICAgIGVsc2UKKwlvdXRnb2luZ19hcmdzX3B0ciA9 IDA7CisgICAgICBudW1fZmxvYXRfYXJncyA9IDA7CisgICAgICBudW1fZ3By X2FyZ3MgPSAwOworICAgICAgZm9yIChhcmdubyA9IDA7IGFyZ25vIDwgbmFy Z3M7IGFyZ25vKyspCisJeworCSAgYXJnID0gYXJnc1thcmdub107CisJICB0 eXBlID0gY2hlY2tfdHlwZWRlZiAoVkFMVUVfVFlQRSAoYXJnKSk7CisJICBs ZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7CisJICBpZiAoVFlQRV9DT0RFICh0 eXBlKSA9PSBUWVBFX0NPREVfRkxUKQorCSAgICB7CisJICAgICAgaW50IGFs bF9mbG9hdF9yZWdpc3RlcnNfdXNlZD1udW1fZmxvYXRfYXJncyA+IChHREJf VEFSR0VUX0lTX0VTQU1FID8gMyA6IDEpOworCisJICAgICAgaWYoc2Vjb25k X3Bhc3MpCisJCXsKKwkJICBET1VCTEVTVCB0ZW1wZmxvYXQgPSBleHRyYWN0 X2Zsb2F0aW5nIChWQUxVRV9DT05URU5UUyhhcmcpLGxlbik7CisJICAgICAg CisKKwkJICBmbG9hdGZvcm1hdF9mcm9tX2RvdWJsZXN0ICggYWxsX2Zsb2F0 X3JlZ2lzdGVyc191c2VkICYmIAorCQkJCQkgICAgICBsZW4gPT0gKFRBUkdF VF9GTE9BVF9CSVQ+PjMpIAorCQkJCQkgICAgICA/ICZmbG9hdGZvcm1hdF9p ZWVlX3NpbmdsZV9iaWcKKwkJCQkJICAgICAgOiAmZmxvYXRmb3JtYXRfaWVl ZV9kb3VibGVfYmlnLCAKKwkJCQkJICAgICAgJnRlbXBmbG9hdCwgcmVnX2J1 ZmYpOworCQkgIGlmKGFsbF9mbG9hdF9yZWdpc3RlcnNfdXNlZCkKKwkJICAg IHdyaXRlX21lbW9yeSAob3V0Z29pbmdfYXJnc19wdHIscmVnX2J1ZmYsIGxl bik7CisJCSAgZWxzZQorCQkgICAgd3JpdGVfcmVnaXN0ZXJfYnl0ZXMgKFJF R0lTVEVSX0JZVEUoKFMzOTBfRlAwX1JFR05VTSkgCisJCQkJCSAgKyAoMiAq IG51bV9mbG9hdF9hcmdzKSkscmVnX2J1ZmYsCisJCQkJCVMzOTBfRlBSX1NJ WkUpOworCQl9CisJICAgICAgaWYoYWxsX2Zsb2F0X3JlZ2lzdGVyc191c2Vk KQorCQlvdXRnb2luZ19hcmdzX3B0ciArPSBsZW47CisJICAgICAgbnVtX2Zs b2F0X2FyZ3MrKzsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAg Z3Byc19yZXF1aXJlZCA9ICgobGVuICsgKFMzOTBfR1BSX1NJWkUgLSAxKSkg LyBTMzkwX0dQUl9TSVpFKTsKKworCSAgICAgIHZhbHVlPXMzOTBfcHJvbW90 ZV9pbnRlZ2VyX2FyZ3VtZW50KHR5cGUsVkFMVUVfQ09OVEVOVFMoYXJnKSxy ZWdfYnVmZiwmYXJnbGVuKTsKKworCSAgICAgIG9yaWdfbnVtX2dwcl9hcmdz ID0gbnVtX2dwcl9hcmdzOworCSAgICAgIG51bV9ncHJfYXJncyArPSBncHJz X3JlcXVpcmVkOworCSAgICAgIGlmIChudW1fZ3ByX2FyZ3MgPiBtYXhfbnVt X2dwcl9hcmdzKQorCQl7CisJCSAgaWYgKHNlY29uZF9wYXNzKQorCQkgICAg d3JpdGVfbWVtb3J5IChvdXRnb2luZ19hcmdzX3B0ciwgdmFsdWUsIGFyZ2xl bik7CisJCSAgb3V0Z29pbmdfYXJnc19wdHIgKz0gYXJnbGVuOworCQl9CisJ ICAgICAgZWxzZQorCQl7CisJCSAgaWYgKHNlY29uZF9wYXNzKQorCQkgICAg d3JpdGVfcmVnaXN0ZXJfYnl0ZXMgKFJFR0lTVEVSX0JZVEUgKGFyZzBfcmVn bnVtKQorCQkJCQkgICsgKG9yaWdfbnVtX2dwcl9hcmdzICogUzM5MF9HUFJf U0laRSksCisJCQkJCSAgdmFsdWUsYXJnbGVuKTsKKwkJfQorCSAgICB9CisJ fQorICAgICAgaWYgKCFzZWNvbmRfcGFzcykKKwl7CisJICBvdXRnb2luZ19h cmdzX3NwYWNlID0gb3V0Z29pbmdfYXJnc19wdHI7CisJICAvKiBBbGlnbiB0 byAxNiBieXRlcyBiZWNhdXNlIGJlY2F1c2UgSSBsaWtlIGFsaWdubWVudCAm IAorCSAgICAgc29tZSBvZiB0aGUga2VybmVsIGNvZGUgcmVxdWlyZXMgOCBi eXRlIHN0YWNrIGFsaWdubWVudCBhdCBsZWFzdC4gKi8KKwkgIHNwID0gKHNw IC0gKFMzOTBfU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBvdXRnb2luZ19hcmdz X3B0cikpICYgKC0xNik7CisJfQorCisgICAgfQorICByZXR1cm4gc3A7CisK K30KKworCisjaWYgZGVmaW5lZChHREJfTVVMVElfQVJDSCkgfHwgIWRlZmlu ZWQoQ09ORklHX0FSQ0hfUzM5MFgpCit2b2lkCitzMzkwX2ZpeF9jYWxsX2R1 bW15IChjaGFyICpkdW1teSwgQ09SRV9BRERSIHBjLCBDT1JFX0FERFIgZnVu LCBpbnQgbmFyZ3MsCisJCSAgICAgc3RydWN0IHZhbHVlICoqYXJncywgc3Ry dWN0IHR5cGUgKnZhbHVlX3R5cGUsCisJCSAgICAgaW50IHVzaW5nX2djYykK K3sKKyAgKihfX3UzMiAqKSAoKGNoYXIgKikgJmR1bW15WzRdKSA9IGZ1bjsK K30KKy8qIE51bWJlciBvZiBieXRlcyBvZiBzdG9yYWdlIGluIHRoZSBhY3R1 YWwgbWFjaGluZSByZXByZXNlbnRhdGlvbgorICAgZm9yIHJlZ2lzdGVyIE4u IAorICAgTm90ZSB0aGF0IHRoZSB1bnNpZ25lZCBjYXN0IGhlcmUgZm9yY2Vz IHRoZSByZXN1bHQgb2YgdGhlCisgICBzdWJ0cmFjdGlvbiB0byB2ZXJ5IGhp Z2ggcG9zaXRpdmUgdmFsdWVzIGlmIE4gPCBTMzkwX0ZQMF9SRUdOVU0gKi8K K2ludAorczM5MF9yZWdpc3Rlcl9yYXdfc2l6ZSAoaW50IHJlZ19ucikKK3sK KyAgcmV0dXJuICgodW5zaWduZWQpIHJlZ19uciAtIFMzOTBfRlAwX1JFR05V TSkgPAorCSAgIFMzOTBfTlVNX0ZQUlMgPyBTMzkwX0ZQUl9TSVpFIDogNDsK K30KKworLyogUmV0dXJuIHRoZSBHREIgdHlwZSBvYmplY3QgZm9yIHRoZSAi c3RhbmRhcmQiIGRhdGEgdHlwZQorICAgb2YgZGF0YSBpbiByZWdpc3RlciBO LiAgKi8KK3N0cnVjdCB0eXBlICoKK3MzOTBfcmVnaXN0ZXJfdmlydHVhbF90 eXBlIChpbnQgcmVnbm8pCit7CisgIHJldHVybiAoKHVuc2lnbmVkKSByZWdu byAtIFMzOTBfRlBDX1JFR05VTSkgPAorICAgIFMzOTBfTlVNX0ZQUlMgPyBi dWlsdGluX3R5cGVfZG91YmxlIDogYnVpbHRpbl90eXBlX2ludDsKK30KKwor I2VuZGlmCisKKyNpZiBkZWZpbmVkKEdEQl9NVUxUSV9BUkNIKSB8fCBkZWZp bmVkKENPTkZJR19BUkNIX1MzOTBYKQordm9pZAorczM5MHhfZml4X2NhbGxf ZHVtbXkgKGNoYXIgKmR1bW15LCBDT1JFX0FERFIgcGMsIENPUkVfQUREUiBm dW4sIGludCBuYXJncywKKwkJICAgICAgc3RydWN0IHZhbHVlICoqYXJncywg c3RydWN0IHR5cGUgKnZhbHVlX3R5cGUsCisJCSAgICAgIGludCB1c2luZ19n Y2MpCit7CisgICooX191NjQgKikgKChjaGFyICopICZkdW1teVs0XSkgPSBm dW47Cit9CisKK2ludAorczM5MHhfcmVnaXN0ZXJfcmF3X3NpemUgKGludCBy ZWdfbnIpCit7CisgIHJldHVybiAocmVnX25yID09IFMzOTBfRlBDX1JFR05V TSkKKwkgIHx8IChyZWdfbnIgPj0gUzM5MF9GSVJTVF9BQ1IgJiYgcmVnX25y IDw9IFMzOTBfTEFTVF9BQ1IpID8gNCA6IDggOworfQorCitzdHJ1Y3QgdHlw ZSAqCitzMzkweF9yZWdpc3Rlcl92aXJ0dWFsX3R5cGUgKGludCByZWdubykK K3sKKyAgcmV0dXJuIChyZWdubyA9PSBTMzkwX0ZQQ19SRUdOVU0pIHx8Cisg ICAgKHJlZ25vID49IFMzOTBfRklSU1RfQUNSICYmIHJlZ25vIDw9IFMzOTBf TEFTVF9BQ1IpID8gYnVpbHRpbl90eXBlX2ludCA6CisgICAgKHJlZ25vID49 IFMzOTBfRlAwX1JFR05VTSkgPyBidWlsdGluX3R5cGVfZG91YmxlIDogYnVp bHRpbl90eXBlX2xvbmc7Cit9CisKKyNlbmRpZgorCisKK3ZvaWQKK3MzOTBf c3RvcmVfc3RydWN0X3JldHVybiAoQ09SRV9BRERSIGFkZHIsIENPUkVfQURE UiBzcCkKK3sKKyAgd3JpdGVfcmVnaXN0ZXIgKFMzOTBfR1AwX1JFR05VTSAr IDIsIGFkZHIpOworfQorCisKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKgor czM5MF9icmVha3BvaW50X2Zyb21fcGMgKENPUkVfQUREUiAqIHBjcHRyLCBp bnQgKmxlbnB0cikKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYnJlYWtw b2ludFtdID0gUzM5MF9CUkVBS1BPSU5UOworCisgICpsZW5wdHIgPSBzaXpl b2YgKGJyZWFrcG9pbnQpOworICByZXR1cm4gYnJlYWtwb2ludDsKK30KKwor LyogQWR2YW5jZSBQQyBhY3Jvc3MgYW55IGZ1bmN0aW9uIGVudHJ5IHByb2xv Z3VlIGluc3RydWN0aW9ucyB0byByZWFjaCBzb21lCisgICAicmVhbCIgY29k ZS4gICovCitDT1JFX0FERFIKK3MzOTBfc2tpcF9wcm9sb2d1ZSAoQ09SRV9B RERSIHBjKQoreworICBzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbyBmZXh0cmFf aW5mbzsKKworICBzMzkwX2dldF9mcmFtZV9pbmZvIChwYywgJmZleHRyYV9p bmZvLCBOVUxMLCBUUlVFKTsKKyAgcmV0dXJuIGZleHRyYV9pbmZvLnNraXBf cHJvbG9ndWVfZnVuY3Rpb25fc3RhcnQ7Cit9CisKKy8qIHBjX2luX2NhbGxf ZHVtbXlfb24gc3RhY2sgbWF5IHdvcmsgZm9yIHVzIG11c3QgdGVzdCB0aGlz ICovCitpbnQKK3MzOTBfcGNfaW5fY2FsbF9kdW1teSAoQ09SRV9BRERSIHBj LCBDT1JFX0FERFIgc3AsIENPUkVfQUREUiBmcmFtZV9hZGRyZXNzKQorewor ICByZXR1cm4gcGMgPiBzcCAmJiBwYyA8IChzcCArIDQwOTYpOworfQorCisv KiBJbW1lZGlhdGVseSBhZnRlciBhIGZ1bmN0aW9uIGNhbGwsIHJldHVybiB0 aGUgc2F2ZWQgcGMuCisgICBDYW4ndCBnbyB0aHJvdWdoIHRoZSBmcmFtZXMg Zm9yIHRoaXMgYmVjYXVzZSBvbiBzb21lIG1hY2hpbmVzCisgICB0aGUgbmV3 IGZyYW1lIGlzIG5vdCBzZXQgdXAgdW50aWwgdGhlIG5ldyBmdW5jdGlvbiBl eGVjdXRlcworICAgc29tZSBpbnN0cnVjdGlvbnMuICAqLworQ09SRV9BRERS IHMzOTBfc2F2ZWRfcGNfYWZ0ZXJfY2FsbCAoc3RydWN0IGZyYW1lX2luZm8g KiBmcmFtZSkKK3sKKyAgcmV0dXJuIEFERFJfQklUU19SRU1PVkUgKHJlYWRf cmVnaXN0ZXIgKFMzOTBfUkVUQUREUl9SRUdOVU0pKTsKK30KKworI2lmIEdE Ql9NVUxUSV9BUkNICitzdGF0aWMgQ09SRV9BRERSCitzMzkwX2FkZHJfYml0 c19yZW1vdmUgKENPUkVfQUREUiBhZGRyKQoreworICByZXR1cm4gKGFkZHIp ICYgMHg3ZmZmZmZmZjsKK30KKyNlbmRpZgorCitpbnQKK3MzOTBfcmVnaXN0 ZXJfYnl0ZSAoaW50IHJlZ19ucikKK3sKKyAgcmV0dXJuICgoKHJlZ19ucikg PD0gUzM5MF9HUF9MQVNUX1JFR05VTSA/IChyZWdfbnIpICogUzM5MF9HUFJf U0laRSA6CisJICAgKHJlZ19ucikgPD0KKwkgICBTMzkwX0xBU1RfQUNSID8g KFMzOTBfQUNSMF9PRkZTRVQgKworCQkJICAgICgoKHJlZ19ucikgLSBTMzkw X0ZJUlNUX0FDUikgKgorCQkJICAgICBTMzkwX0FDUl9TSVpFKSkgOiAocmVn X25yKSA8PQorCSAgIFMzOTBfTEFTVF9DUiA/IChTMzkwX0NSMF9PRkZTRVQg KworCQkJICAgKCgocmVnX25yKSAtIFMzOTBfRklSU1RfQ1IpICoKKwkJCSAg ICBTMzkwX0NSX1NJWkUpKSA6IChyZWdfbnIpID09CisJICAgUzM5MF9GUENf UkVHTlVNID8gUzM5MF9GUENfT0ZGU0VUIDogKFMzOTBfRlAwX09GRlNFVCAr CisJCQkJCQkoKChyZWdfbnIpIC0gUzM5MF9GUDBfUkVHTlVNKQorCQkJCQkJ ICogUzM5MF9GUFJfU0laRSkpKSk7Cit9CisKKyNpZiBHREJfTVVMVElfQVJD SAorc3RydWN0IGdkYmFyY2ggKgorczM5MF9nZGJhcmNoX2luaXQgKHN0cnVj dCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJj aGVzKQoreworICBzdGF0aWMgTE9OR0VTVCBzMzkwX2NhbGxfZHVtbXlfd29y ZHNbXSA9IFMzOTBfQ0FMTF9EVU1NWTsKKyAgc3RhdGljIExPTkdFU1QgczM5 MHhfY2FsbF9kdW1teV93b3Jkc1tdID0gUzM5MFhfQ0FMTF9EVU1NWTsKKyAg c3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7CisgIHN0cnVjdCBnZGJhcmNoX3Rk ZXAgKnRkZXA7CisgIGludCBlbGZfZmxhZ3M7CisKKyAgLyogRmlyc3Qgc2Vl IGlmIHRoZXJlIGlzIGFscmVhZHkgYSBnZGJhcmNoIHRoYXQgY2FuIHNhdGlz ZnkgdGhlIHJlcXVlc3QuICAqLworICBhcmNoZXMgPSBnZGJhcmNoX2xpc3Rf bG9va3VwX2J5X2luZm8gKGFyY2hlcywgJmluZm8pOworICBpZiAoYXJjaGVz ICE9IE5VTEwpCisgICAgcmV0dXJuIGFyY2hlcy0+Z2RiYXJjaDsKKworICAv KiBOb25lIGZvdW5kOiBpcyB0aGUgcmVxdWVzdCBmb3IgYSBzMzkwIGFyY2hp dGVjdHVyZT8gKi8KKyAgaWYgKGluZm8uYmZkX2FyY2hpdGVjdHVyZSAhPSBi ZmRfYXJjaF9zMzkwKQorICAgIHJldHVybiBOVUxMOwkJLyogTm87IHRoZW4g aXQncyBub3QgZm9yIHVzLiAgKi8KKworICAvKiBZZXM6IGNyZWF0ZSBhIG5l dyBnZGJhcmNoIGZvciB0aGUgc3BlY2lmaWVkIG1hY2hpbmUgdHlwZS4gICov CisgIGdkYmFyY2ggPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgTlVMTCk7CisK KyAgc2V0X2dkYmFyY2hfYmVsaWV2ZV9wY2NfcHJvbW90aW9uIChnZGJhcmNo LCAwKTsKKworICAvKiBXZSBkb24ndCBkZWZpbmUgc2V0X2dkYmFyY2hfY2Fs bF9kdW1teV9icmVha3BvaW50X29mZnNldCAKKyAgICAgYXMgd2UgYWxyZWFk eSBoYXZlIGEgYnJlYWtwb2ludCBpbnNlcnRlZC4gKi8KKyAgc2V0X2dkYmFy Y2hfdXNlX2dlbmVyaWNfZHVtbXlfZnJhbWVzIChnZGJhcmNoLCAwKTsKKwor ICBzZXRfZ2RiYXJjaF9jYWxsX2R1bW15X2xvY2F0aW9uIChnZGJhcmNoLCBP Tl9TVEFDSyk7CisgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfc3RhcnRfb2Zm c2V0IChnZGJhcmNoLCAwKTsKKyAgc2V0X2dkYmFyY2hfcGNfaW5fY2FsbF9k dW1teSAoZ2RiYXJjaCwgczM5MF9wY19pbl9jYWxsX2R1bW15KTsKKyAgc2V0 X2dkYmFyY2hfZnJhbWVfYXJnc19za2lwIChnZGJhcmNoLCAwKTsKKyAgc2V0 X2dkYmFyY2hfZnJhbWVfYXJnc19hZGRyZXNzIChnZGJhcmNoLCBzMzkwX2Zy YW1lX2FyZ3NfYWRkcmVzcyk7CisgIHNldF9nZGJhcmNoX2ZyYW1lX2NoYWlu IChnZGJhcmNoLCBzMzkwX2ZyYW1lX2NoYWluKTsKKyAgc2V0X2dkYmFyY2hf ZnJhbWVfaW5pdF9zYXZlZF9yZWdzIChnZGJhcmNoLCBzMzkwX2ZyYW1lX2lu aXRfc2F2ZWRfcmVncyk7CisgIHNldF9nZGJhcmNoX2ZyYW1lX2xvY2Fsc19h ZGRyZXNzIChnZGJhcmNoLCBzMzkwX2ZyYW1lX2FyZ3NfYWRkcmVzcyk7Cisg IC8qIFdlIGNhbid0IGRvIHRoaXMgKi8KKyAgc2V0X2dkYmFyY2hfZnJhbWVf bnVtX2FyZ3MgKGdkYmFyY2gsIGZyYW1lX251bV9hcmdzX3Vua25vd24pOwor ICBzZXRfZ2RiYXJjaF9zdG9yZV9zdHJ1Y3RfcmV0dXJuIChnZGJhcmNoLCBz MzkwX3N0b3JlX3N0cnVjdF9yZXR1cm4pOworICBzZXRfZ2RiYXJjaF9leHRy YWN0X3JldHVybl92YWx1ZSAoZ2RiYXJjaCwgczM5MF9leHRyYWN0X3JldHVy bl92YWx1ZSk7CisgIHNldF9nZGJhcmNoX3N0b3JlX3JldHVybl92YWx1ZSAo Z2RiYXJjaCwgczM5MF9zdG9yZV9yZXR1cm5fdmFsdWUpOworICAvKiBBbW91 bnQgUEMgbXVzdCBiZSBkZWNyZW1lbnRlZCBieSBhZnRlciBhIGJyZWFrcG9p bnQuCisgICAgIFRoaXMgaXMgb2Z0ZW4gdGhlIG51bWJlciBvZiBieXRlcyBp biBCUkVBS1BPSU5UCisgICAgIGJ1dCBub3QgYWx3YXlzLiAgKi8KKyAgc2V0 X2dkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCwgMik7Cisg IHNldF9nZGJhcmNoX3BvcF9mcmFtZSAoZ2RiYXJjaCwgczM5MF9wb3BfZnJh bWUpOworICBzZXRfZ2RiYXJjaF9wdXNoX2R1bW15X2ZyYW1lIChnZGJhcmNo LCBzMzkwX3B1c2hfZHVtbXlfZnJhbWUpOworICBzZXRfZ2RiYXJjaF9wdXNo X2FyZ3VtZW50cyAoZ2RiYXJjaCwgczM5MF9wdXNoX2FyZ3VtZW50cyk7Cisg IHNldF9nZGJhcmNoX2llZWVfZmxvYXQgKGdkYmFyY2gsIDEpOworICAvKiBT dGFjayBncm93cyBkb3dud2FyZC4gICovCisgIHNldF9nZGJhcmNoX2lubmVy X3RoYW4gKGdkYmFyY2gsIGNvcmVfYWRkcl9sZXNzdGhhbik7CisgIC8qIE9m ZnNldCBmcm9tIGFkZHJlc3Mgb2YgZnVuY3Rpb24gdG8gc3RhcnQgb2YgaXRz IGNvZGUuCisgICAgIFplcm8gb24gbW9zdCBtYWNoaW5lcy4gICovCisgIHNl dF9nZGJhcmNoX2Z1bmN0aW9uX3N0YXJ0X29mZnNldCAoZ2RiYXJjaCwgMCk7 CisgIHNldF9nZGJhcmNoX21heF9yZWdpc3Rlcl9yYXdfc2l6ZSAoZ2RiYXJj aCwgOCk7CisgIHNldF9nZGJhcmNoX21heF9yZWdpc3Rlcl92aXJ0dWFsX3Np emUgKGdkYmFyY2gsIDgpOworICBzZXRfZ2RiYXJjaF9icmVha3BvaW50X2Zy b21fcGMgKGdkYmFyY2gsIHMzOTBfYnJlYWtwb2ludF9mcm9tX3BjKTsKKyAg c2V0X2dkYmFyY2hfc2tpcF9wcm9sb2d1ZSAoZ2RiYXJjaCwgczM5MF9za2lw X3Byb2xvZ3VlKTsKKyAgc2V0X2dkYmFyY2hfaW5pdF9leHRyYV9mcmFtZV9p bmZvIChnZGJhcmNoLCBzMzkwX2luaXRfZXh0cmFfZnJhbWVfaW5mbyk7Cisg IHNldF9nZGJhcmNoX2luaXRfZnJhbWVfcGNfZmlyc3QgKGdkYmFyY2gsIHMz OTBfaW5pdF9mcmFtZV9wY19maXJzdCk7CisgIHNldF9nZGJhcmNoX3JlYWRf ZnAgKGdkYmFyY2gsIHMzOTBfcmVhZF9mcCk7CisgIHNldF9nZGJhcmNoX3dy aXRlX2ZwIChnZGJhcmNoLCBzMzkwX3dyaXRlX2ZwKTsKKyAgLyogVGhpcyBm dW5jdGlvbiB0aGF0IHRlbGxzIHVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlu dm9jYXRpb24gcmVwcmVzZW50ZWQKKyAgICAgYnkgRkkgZG9lcyBub3QgaGF2 ZSBhIGZyYW1lIG9uIHRoZSBzdGFjayBhc3NvY2lhdGVkIHdpdGggaXQuICBJ ZiBpdAorICAgICBkb2VzIG5vdCwgRlJBTUVMRVNTIGlzIHNldCB0byAxLCBl bHNlIDAuICAqLworICBzZXRfZ2RiYXJjaF9mcmFtZWxlc3NfZnVuY3Rpb25f aW52b2NhdGlvbiAoZ2RiYXJjaCwKKwkJCQkJICAgICBzMzkwX2ZyYW1lbGVz c19mdW5jdGlvbl9pbnZvY2F0aW9uKTsKKyAgLyogUmV0dXJuIHNhdmVkIFBD IGZyb20gYSBmcmFtZSAqLworICBzZXRfZ2RiYXJjaF9mcmFtZV9zYXZlZF9w YyAoZ2RiYXJjaCwgczM5MF9mcmFtZV9zYXZlZF9wYyk7CisgIC8qIEZSQU1F X0NIQUlOIHRha2VzIGEgZnJhbWUncyBub21pbmFsIGFkZHJlc3MKKyAgICAg YW5kIHByb2R1Y2VzIHRoZSBmcmFtZSdzIGNoYWluLXBvaW50ZXIuICovCisg IHNldF9nZGJhcmNoX2ZyYW1lX2NoYWluIChnZGJhcmNoLCBzMzkwX2ZyYW1l X2NoYWluKTsKKyAgc2V0X2dkYmFyY2hfc2F2ZWRfcGNfYWZ0ZXJfY2FsbCAo Z2RiYXJjaCwgczM5MF9zYXZlZF9wY19hZnRlcl9jYWxsKTsKKyAgc2V0X2dk YmFyY2hfcmVnaXN0ZXJfYnl0ZSAoZ2RiYXJjaCwgczM5MF9yZWdpc3Rlcl9i eXRlKTsKKyAgc2V0X2dkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoLCBTMzkw X1BDX1JFR05VTSk7CisgIHNldF9nZGJhcmNoX3NwX3JlZ251bSAoZ2RiYXJj aCwgUzM5MF9TUF9SRUdOVU0pOworICBzZXRfZ2RiYXJjaF9mcF9yZWdudW0g KGdkYmFyY2gsIFMzOTBfRlBfUkVHTlVNKTsKKyAgc2V0X2dkYmFyY2hfZnAw X3JlZ251bSAoZ2RiYXJjaCwgUzM5MF9GUDBfUkVHTlVNKTsKKyAgc2V0X2dk YmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gsIFMzOTBfTlVNX1JFR1MpOworICBz ZXRfZ2RiYXJjaF9jYW5ub3RfZmV0Y2hfcmVnaXN0ZXIgKGdkYmFyY2gsIHMz OTBfY2Fubm90X2ZldGNoX3JlZ2lzdGVyKTsKKyAgc2V0X2dkYmFyY2hfY2Fu bm90X3N0b3JlX3JlZ2lzdGVyIChnZGJhcmNoLCBzMzkwX2Nhbm5vdF9mZXRj aF9yZWdpc3Rlcik7CisgIHNldF9nZGJhcmNoX2dldF9zYXZlZF9yZWdpc3Rl ciAoZ2RiYXJjaCwgZ2VuZXJpY19nZXRfc2F2ZWRfcmVnaXN0ZXIpOworICBz ZXRfZ2RiYXJjaF91c2Vfc3RydWN0X2NvbnZlbnRpb24gKGdkYmFyY2gsIGdl bmVyaWNfdXNlX3N0cnVjdF9jb252ZW50aW9uKTsKKyAgc2V0X2dkYmFyY2hf ZnJhbWVfY2hhaW5fdmFsaWQgKGdkYmFyY2gsIGZpbGVfZnJhbWVfY2hhaW5f dmFsaWQpOworICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChnZGJhcmNo LCBzMzkwX3JlZ2lzdGVyX25hbWUpOworICBzZXRfZ2RiYXJjaF9zdGFiX3Jl Z190b19yZWdudW0gKGdkYmFyY2gsIHMzOTBfc3RhYl9yZWdfdG9fcmVnbnVt KTsKKyAgc2V0X2dkYmFyY2hfZHdhcmZfcmVnX3RvX3JlZ251bSAoZ2RiYXJj aCwgczM5MF9zdGFiX3JlZ190b19yZWdudW0pOworICBzZXRfZ2RiYXJjaF9k d2FyZjJfcmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgczM5MF9zdGFiX3JlZ190 b19yZWdudW0pOworCisKKyAgLyogU3R1ZmYgYmVsb3cgaGVyZSB3b3VsZG4n dCBiZSByZXF1aXJlZCBpZiBnZGJhcmNoLnNoIHdhcyBhIGxpdHRsZSAqLwor ICAvKiBtb3JlIGludGVsbGlnZW50ICovCisgIHNldF9nZGJhcmNoX2NhbGxf ZHVtbXlfYnJlYWtwb2ludF9vZmZzZXRfcCAoZ2RiYXJjaCwgMCk7CisgIHNl dF9nZGJhcmNoX2NhbGxfZHVtbXlfcCAoZ2RiYXJjaCwgMSk7CisgIHNldF9n ZGJhcmNoX2NhbGxfZHVtbXlfc3RhY2tfYWRqdXN0X3AgKGdkYmFyY2gsIDAp OworICBzZXRfZ2RiYXJjaF9leHRyYWN0X3N0cnVjdF92YWx1ZV9hZGRyZXNz X3AgKGdkYmFyY2gsIDApOworICBzd2l0Y2ggKGluZm8uYmZkX2FyY2hfaW5m by0+bWFjaCkKKyAgICB7CisgICAgY2FzZSBiZmRfbWFjaF9zMzkwX2VzYToK KyAgICAgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3NpemUgKGdkYmFyY2gsIDQp OworICAgICAgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9sZW5ndGggKGdkYmFy Y2gsIFMzOTBfQ0FMTF9EVU1NWV9MRU5HVEgpOworICAgICAgc2V0X2dkYmFy Y2hfcmVnaXN0ZXJfcmF3X3NpemUgKGdkYmFyY2gsIHMzOTBfcmVnaXN0ZXJf cmF3X3NpemUpOworICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfdmlydHVh bF9zaXplIChnZGJhcmNoLCBzMzkwX3JlZ2lzdGVyX3Jhd19zaXplKTsKKyAg ICAgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3ZpcnR1YWxfdHlwZSAoZ2RiYXJj aCwgczM5MF9yZWdpc3Rlcl92aXJ0dWFsX3R5cGUpOworCisgICAgICBzZXRf Z2RiYXJjaF9hZGRyX2JpdHNfcmVtb3ZlIChnZGJhcmNoLCBzMzkwX2FkZHJf Yml0c19yZW1vdmUpOworICAgICAgc2V0X2dkYmFyY2hfZml4X2NhbGxfZHVt bXkgKGdkYmFyY2gsIHMzOTBfZml4X2NhbGxfZHVtbXkpOworICAgICAgc2V0 X2dkYmFyY2hfc2l6ZW9mX2NhbGxfZHVtbXlfd29yZHMgKGdkYmFyY2gsCisJ CQkJCSAgIHNpemVvZiAoczM5MF9jYWxsX2R1bW15X3dvcmRzKSk7CisgICAg ICBzZXRfZ2RiYXJjaF9jYWxsX2R1bW15X3dvcmRzIChnZGJhcmNoLCBzMzkw X2NhbGxfZHVtbXlfd29yZHMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBi ZmRfbWFjaF9zMzkwX2VzYW1lOgorICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0 ZXJfc2l6ZSAoZ2RiYXJjaCwgOCk7CisgICAgICBzZXRfZ2RiYXJjaF9jYWxs X2R1bW15X2xlbmd0aCAoZ2RiYXJjaCwgUzM5MFhfQ0FMTF9EVU1NWV9MRU5H VEgpOworICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfcmF3X3NpemUgKGdk YmFyY2gsIHMzOTB4X3JlZ2lzdGVyX3Jhd19zaXplKTsKKyAgICAgIHNldF9n ZGJhcmNoX3JlZ2lzdGVyX3ZpcnR1YWxfc2l6ZSAoZ2RiYXJjaCwgczM5MHhf cmVnaXN0ZXJfcmF3X3NpemUpOworICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0 ZXJfdmlydHVhbF90eXBlIChnZGJhcmNoLAorCQkJCQkgczM5MHhfcmVnaXN0 ZXJfdmlydHVhbF90eXBlKTsKKworICAgICAgc2V0X2dkYmFyY2hfbG9uZ19i aXQgKGdkYmFyY2gsIDY0KTsKKyAgICAgIHNldF9nZGJhcmNoX2xvbmdfbG9u Z19iaXQgKGdkYmFyY2gsIDY0KTsKKyAgICAgIHNldF9nZGJhcmNoX3B0cl9i aXQgKGdkYmFyY2gsIDY0KTsKKyAgICAgIHNldF9nZGJhcmNoX2ZpeF9jYWxs X2R1bW15IChnZGJhcmNoLCBzMzkweF9maXhfY2FsbF9kdW1teSk7CisgICAg ICBzZXRfZ2RiYXJjaF9zaXplb2ZfY2FsbF9kdW1teV93b3JkcyAoZ2RiYXJj aCwKKwkJCQkJICAgc2l6ZW9mIChzMzkweF9jYWxsX2R1bW15X3dvcmRzKSk7 CisgICAgICBzZXRfZ2RiYXJjaF9jYWxsX2R1bW15X3dvcmRzIChnZGJhcmNo LCBzMzkweF9jYWxsX2R1bW15X3dvcmRzKTsKKyAgICAgIGJyZWFrOworICAg IH0KKyAgLyogUkVHSVNURVJfU0laRSBpcyBzZXQgdXAgc28gdGhpcyBpcyBj b3JyZWN0IGhlcmUgKi8KKyAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfYnl0ZXMg KGdkYmFyY2gsIFMzOTBfUkVHSVNURVJfQllURVMpOworICByZXR1cm4gZ2Ri YXJjaDsKK30KKyNlbmRpZgorCisKK3ZvaWQKK19pbml0aWFsaXplX3MzOTBf dGRlcCAoKQoreworICBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgKnMzOTBf YXJjaF9wdHIgPQorICAgIGJmZF9sb29rdXBfYXJjaCAoYmZkX2FyY2hfczM5 MCwgMCk7CisKKyNpZiBHREJfTVVMVElfQVJDSAorICAvKiBIb29rIHVzIGlu dG8gdGhlIGdkYmFyY2ggbWVjaGFuaXNtLiAgKi8KKyAgcmVnaXN0ZXJfZ2Ri YXJjaF9pbml0IChiZmRfYXJjaF9zMzkwLCBzMzkwX2dkYmFyY2hfaW5pdCk7 CisjZW5kaWYKKyAgaWYgKCF0bV9wcmludF9pbnNuKQkJLyogU29tZW9uZSBt YXkgaGF2ZSBhbHJlYWR5IHNldCBpdCAqLworICAgIHRtX3ByaW50X2luc24g PSBnZGJfcHJpbnRfaW5zbl9zMzkwOworICBpZiAoczM5MF9hcmNoX3B0cikK KyAgICB0bV9wcmludF9pbnNuX2luZm8ubWFjaCA9IHMzOTBfYXJjaF9wdHIt Pm1hY2g7CisgIGVsc2UKKyAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18s IF9fTElORV9fLAorCQkgICAgIl9pbml0aWFsaXplX3MzOTBfdGRlcDogYmZk X2xvb2t1cF9hcmNoIGZhaWxlZCBmb3IgYmZkX2FyY2hfczM5MCByZWNvbXBp bGUuXG4iKTsKK30KLS0tIHNyYy5vcmlnL2dkYi9nZGJhcmNoLnNoCVRodSBG ZWIgIDggMDc6MDM6NTMgMjAwMQorKysgc3JjLm5ldy9nZGIvZ2RiYXJjaC5z aAlUdWUgRmViIDI3IDIwOjEyOjM3IDIwMDEKQEAgLTM1LDcgKzM1LDcgQEAK IAogCiAjIEZvcm1hdCBvZiB0aGUgaW5wdXQgdGFibGUKLXJlYWQ9ImNsYXNz IGxldmVsIG1hY3JvIHJldHVybnR5cGUgZnVuY3Rpb24gZm9ybWFsIGFjdHVh bCBhdHRyaWIgc3RhdGljZGVmYXVsdCBwcmVkZWZhdWx0IHBvc3RkZWZhdWx0 IGludmFsaWRfcCBmbXQgcHJpbnQgcHJpbnRfcCBkZXNjcmlwdGlvbiIKK3Jl YWQ9ImNsYXNzIGxldmVsIG1hY3JvIHJldHVybnR5cGUgZnVuY3Rpb24gZm9y bWFsIGFjdHVhbCBhdHRyaWIgc3RhdGljZGVmYXVsdCBwcmVkZWZhdWx0IHBv c3RkZWZhdWx0IGludmFsaWRfcCBmbXQgcHJpbnQgcHJpbnRfcCBkZXNjcmlw dGlvbiBhbGxvd19udWxsX2Z1bmN0aW9uIG51bGxfZnVuY3Rpb25fZGVmYXVs dF9yZXR2YWwiCiAKIGRvX3JlYWQgKCkKIHsKQEAgLTMwMyw3ICszMDMsMTQg QEAKICAgICBkZXNjcmlwdGlvbiApIDogOzsKIAogCSMgQ3VycmVudGx5IHVu dXNlZC4KLQorICAgIGFsbG93X251bGxfZnVuY3Rpb24gKSA6IDs7CisgICAg ICAgICMgdGhpcyBkZWZpbml0aW9uIGlzIHNldCB0byBhbgorCSMgbm9uIGVt cHR5IHN0cmluZyBpZiBpdCBpcyBva2F5IGZvciB0aGUgZ2RiYXJjaCBmdW5j dGlvbgorCSMgdG8gYmUgbnVsbC4KKyAgICBudWxsX2Z1bmN0aW9uX2RlZmF1 bHRfcmV0dmFsICkgOiA7OworICAgICAgICAjIHRoaXMgZGVmaW5pdG9uIGlz IHRoZQorCSMgZGVmYXVsdCByZXR1cm4gdmFsdWUgZm9yIGEgdW5kZWZpbmVk IGZ1bmN0aW9uCisgICAgICAgICMgKGkuZS4gYWxsb3dfbnVsbF9mdW5jdGlv biBpcyBkZWZpbmVkICkuCiAgICAgKikgZXhpdCAxOzsKICAgZXNhYwogZG9u ZQpAQCAtNDAxLDcgKzQwOCw3IEBACiB2OjI6Q0FMTF9EVU1NWV9MT0NBVElP TjppbnQ6Y2FsbF9kdW1teV9sb2NhdGlvbjo6OjowOjAKIGY6MjpDQUxMX0RV TU1ZX0FERFJFU1M6Q09SRV9BRERSOmNhbGxfZHVtbXlfYWRkcmVzczp2b2lk Ojo6MDowOjpnZGJhcmNoLT5jYWxsX2R1bW15X2xvY2F0aW9uID09IEFUX0VO VFJZX1BPSU5UICYmIGdkYmFyY2gtPmNhbGxfZHVtbXlfYWRkcmVzcyA9PSAw CiB2OjI6Q0FMTF9EVU1NWV9TVEFSVF9PRkZTRVQ6Q09SRV9BRERSOmNhbGxf ZHVtbXlfc3RhcnRfb2Zmc2V0Ojo6OjA6LTE6OjoweCUwOGx4Ci12OjI6Q0FM TF9EVU1NWV9CUkVBS1BPSU5UX09GRlNFVDpDT1JFX0FERFI6Y2FsbF9kdW1t eV9icmVha3BvaW50X29mZnNldDo6OjowOi0xOjo6MHglMDhseDo6Q0FMTF9E VU1NWV9CUkVBS1BPSU5UX09GRlNFVF9QCit2OjI6Q0FMTF9EVU1NWV9CUkVB S1BPSU5UX09GRlNFVDpDT1JFX0FERFI6Y2FsbF9kdW1teV9icmVha3BvaW50 X29mZnNldDo6OjowOi0xOjpnZGJhcmNoLT5jYWxsX2R1bW15X2JyZWFrcG9p bnRfb2Zmc2V0X3AgJiYgZ2RiYXJjaC0+Y2FsbF9kdW1teV9icmVha3BvaW50 X29mZnNldCA9PSAtMToweCUwOGx4OjpDQUxMX0RVTU1ZX0JSRUFLUE9JTlRf T0ZGU0VUX1AKIHY6MTpDQUxMX0RVTU1ZX0JSRUFLUE9JTlRfT0ZGU0VUX1A6 aW50OmNhbGxfZHVtbXlfYnJlYWtwb2ludF9vZmZzZXRfcDo6OjowOi0xCiB2 OjI6Q0FMTF9EVU1NWV9MRU5HVEg6aW50OmNhbGxfZHVtbXlfbGVuZ3RoOjo6 OjA6LTE6Ojo6OkNBTExfRFVNTVlfTE9DQVRJT04gPT0gQkVGT1JFX1RFWFRf RU5EIHx8IENBTExfRFVNTVlfTE9DQVRJT04gPT0gQUZURVJfVEVYVF9FTkQK IGY6MjpQQ19JTl9DQUxMX0RVTU1ZOmludDpwY19pbl9jYWxsX2R1bW15OkNP UkVfQUREUiBwYywgQ09SRV9BRERSIHNwLCBDT1JFX0FERFIgZnJhbWVfYWRk cmVzczpwYywgc3AsIGZyYW1lX2FkZHJlc3M6OjA6MApAQCAtNDM2LDcgKzQ0 Myw3IEBACiBmOjI6RVhUUkFDVF9SRVRVUk5fVkFMVUU6dm9pZDpleHRyYWN0 X3JldHVybl92YWx1ZTpzdHJ1Y3QgdHlwZSAqdHlwZSwgY2hhciAqcmVnYnVm LCBjaGFyICp2YWxidWY6dHlwZSwgcmVnYnVmLCB2YWxidWY6OjA6MAogZjox OlBVU0hfQVJHVU1FTlRTOkNPUkVfQUREUjpwdXNoX2FyZ3VtZW50czppbnQg bmFyZ3MsIHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIENPUkVfQUREUiBzcCwgaW50 IHN0cnVjdF9yZXR1cm4sIENPUkVfQUREUiBzdHJ1Y3RfYWRkcjpuYXJncywg YXJncywgc3AsIHN0cnVjdF9yZXR1cm4sIHN0cnVjdF9hZGRyOjowOjAKIGY6 MjpQVVNIX0RVTU1ZX0ZSQU1FOnZvaWQ6cHVzaF9kdW1teV9mcmFtZTp2b2lk Oi06OjowCi1mOjE6UFVTSF9SRVRVUk5fQUREUkVTUzpDT1JFX0FERFI6cHVz aF9yZXR1cm5fYWRkcmVzczpDT1JFX0FERFIgcGMsIENPUkVfQUREUiBzcDpw Yywgc3A6OjowCitmOjE6UFVTSF9SRVRVUk5fQUREUkVTUzpDT1JFX0FERFI6 cHVzaF9yZXR1cm5fYWRkcmVzczpDT1JFX0FERFIgcGMsIENPUkVfQUREUiBz cDpwYywgc3A6OjowOjowOjo6OjoxOnNwCiBmOjI6UE9QX0ZSQU1FOnZvaWQ6 cG9wX2ZyYW1lOnZvaWQ6LTo6OjAKICMKICMgSSB3aXNoIHRoYXQgdGhlc2Ug d291bGQganVzdCBnbyBhd2F5Li4uLgpAQCAtNDQ5LDcgKzQ1Niw4IEBACiAj CiBmOjI6U1RPUkVfU1RSVUNUX1JFVFVSTjp2b2lkOnN0b3JlX3N0cnVjdF9y ZXR1cm46Q09SRV9BRERSIGFkZHIsIENPUkVfQUREUiBzcDphZGRyLCBzcDo6 OjAKIGY6MjpTVE9SRV9SRVRVUk5fVkFMVUU6dm9pZDpzdG9yZV9yZXR1cm5f dmFsdWU6c3RydWN0IHR5cGUgKnR5cGUsIGNoYXIgKnZhbGJ1Zjp0eXBlLCB2 YWxidWY6OjowCi1mOjI6RVhUUkFDVF9TVFJVQ1RfVkFMVUVfQUREUkVTUzpD T1JFX0FERFI6ZXh0cmFjdF9zdHJ1Y3RfdmFsdWVfYWRkcmVzczpjaGFyICpy ZWdidWY6cmVnYnVmOjo6MAorZjoyOkVYVFJBQ1RfU1RSVUNUX1ZBTFVFX0FE RFJFU1M6Q09SRV9BRERSOmV4dHJhY3Rfc3RydWN0X3ZhbHVlX2FkZHJlc3M6 Y2hhciAqcmVnYnVmOnJlZ2J1Zjo6MDowOjpnZGJhcmNoLT5leHRyYWN0X3N0 cnVjdF92YWx1ZV9hZGRyZXNzX3AgJiYgZ2RiYXJjaC0+ZXh0cmFjdF9zdHJ1 Y3RfdmFsdWVfYWRkcmVzcyA9PSAwCit2OjI6RVhUUkFDVF9TVFJVQ1RfVkFM VUVfQUREUkVTU19QOmludDpleHRyYWN0X3N0cnVjdF92YWx1ZV9hZGRyZXNz X3A6Ojo6MDotMQogZjoyOlVTRV9TVFJVQ1RfQ09OVkVOVElPTjppbnQ6dXNl X3N0cnVjdF9jb252ZW50aW9uOmludCBnY2NfcCwgc3RydWN0IHR5cGUgKnZh bHVlX3R5cGU6Z2NjX3AsIHZhbHVlX3R5cGU6OjowCiAjCiBmOjI6RlJBTUVf SU5JVF9TQVZFRF9SRUdTOnZvaWQ6ZnJhbWVfaW5pdF9zYXZlZF9yZWdzOnN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZTpmcmFtZTo6MDowCkBAIC00NTksNiAr NDY3LDEwIEBACiBmOjI6UFJPTE9HVUVfRlJBTUVMRVNTX1A6aW50OnByb2xv Z3VlX2ZyYW1lbGVzc19wOkNPUkVfQUREUiBpcDppcDo6MDpnZW5lcmljX3By b2xvZ3VlX2ZyYW1lbGVzc19wOjowCiBmOjI6SU5ORVJfVEhBTjppbnQ6aW5u ZXJfdGhhbjpDT1JFX0FERFIgbGhzLCBDT1JFX0FERFIgcmhzOmxocywgcmhz OjowOjAKIGY6MjpCUkVBS1BPSU5UX0ZST01fUEM6dW5zaWduZWQgY2hhciAq OmJyZWFrcG9pbnRfZnJvbV9wYzpDT1JFX0FERFIgKnBjcHRyLCBpbnQgKmxl bnB0cjpwY3B0ciwgbGVucHRyOjo6bGVnYWN5X2JyZWFrcG9pbnRfZnJvbV9w Yzo6MAorZjoyOklOSVRfRlJBTUVfUENfRklSU1Q6dm9pZDppbml0X2ZyYW1l X3BjX2ZpcnN0OmludCBmcm9tbGVhZixzdHJ1Y3QgZnJhbWVfaW5mbyAqZmk6 ZnJvbWxlYWYsZmk6Ojo6Ojo6Ojo6MQorZjoyOkNBTk5PVF9TVE9SRV9SRUdJ U1RFUjppbnQ6Y2Fubm90X3N0b3JlX3JlZ2lzdGVyOmludCByZWdubzpyZWdu bzo6Ojo6Ojo6OjoxOjAKK2Y6MjpDQU5OT1RfRkVUQ0hfUkVHSVNURVI6aW50 OmNhbm5vdF9mZXRjaF9yZWdpc3RlcjppbnQgcmVnbm86cmVnbm86Ojo6Ojo6 Ojo6MTowCitmOjI6QUREUl9CSVRTX1JFTU9WRTpDT1JFX0FERFI6YWRkcl9i aXRzX3JlbW92ZTpDT1JFX0FERFIgYWRkcjphZGRyOjo6Ojo6Ojo6OjE6YWRk cgogZjoyOk1FTU9SWV9JTlNFUlRfQlJFQUtQT0lOVDppbnQ6bWVtb3J5X2lu c2VydF9icmVha3BvaW50OkNPUkVfQUREUiBhZGRyLCBjaGFyICpjb250ZW50 c19jYWNoZTphZGRyLCBjb250ZW50c19jYWNoZTo6MDpkZWZhdWx0X21lbW9y eV9pbnNlcnRfYnJlYWtwb2ludDo6MAogZjoyOk1FTU9SWV9SRU1PVkVfQlJF QUtQT0lOVDppbnQ6bWVtb3J5X3JlbW92ZV9icmVha3BvaW50OkNPUkVfQURE UiBhZGRyLCBjaGFyICpjb250ZW50c19jYWNoZTphZGRyLCBjb250ZW50c19j YWNoZTo6MDpkZWZhdWx0X21lbW9yeV9yZW1vdmVfYnJlYWtwb2ludDo6MAog djoyOkRFQ1JfUENfQUZURVJfQlJFQUs6Q09SRV9BRERSOmRlY3JfcGNfYWZ0 ZXJfYnJlYWs6Ojo6MDotMQpAQCAtMTQ0MCwxMiArMTQ1MiwyNSBAQAogCSAg cHJpbnRmICJnZGJhcmNoXyR7ZnVuY3Rpb259IChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCwgJHtmb3JtYWx9KVxuIgogCWZpCiAJcHJpbnRmICJ7XG4iCi0g ICAgICAgIHByaW50ZiAiICBpZiAoZ2RiYXJjaC0+JHtmdW5jdGlvbn0gPT0g MClcbiIKLSAgICAgICAgcHJpbnRmICIgICAgaW50ZXJuYWxfZXJyb3IgKF9f RklMRV9fLCBfX0xJTkVfXyxcbiIKLQlwcmludGYgIiAgICAgICAgICAgICAg ICAgICAgXCJnZGJhcmNoOiBnZGJhcmNoXyR7ZnVuY3Rpb259IGludmFsaWRc Iik7XG4iCisJaWYgWyAiJHthbGxvd19udWxsX2Z1bmN0aW9ufSIgPSAiIiBd CisJdGhlbgorCSAgICBwcmludGYgIiAgaWYgKGdkYmFyY2gtPiR7ZnVuY3Rp b259ID09IDApXG4iCisJICAgIHByaW50ZiAiICAgIGludGVybmFsX2Vycm9y IChfX0ZJTEVfXywgX19MSU5FX18sXG4iCisJICAgIHByaW50ZiAiICAgICAg ICAgICAgICAgICAgICBcImdkYmFyY2g6IGdkYmFyY2hfJHtmdW5jdGlvbn0g aW52YWxpZFwiKTtcbiIKKwlmaQogCXByaW50ZiAiICBpZiAoZ2RiYXJjaF9k ZWJ1ZyA+PSAyKVxuIgogCXByaW50ZiAiICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywgXCJnZGJhcmNoXyR7ZnVuY3Rpb259IGNhbGxlZFxc XFxuXCIpO1xuIgogICAgICAgICB0ZXN0ICIke2FjdHVhbH0iID0gIi0iICYm IGFjdHVhbD0iIgorIAlpZiBbICIke2FsbG93X251bGxfZnVuY3Rpb259IiBd CisgCXRoZW4KKyAJICBwcmludGYgIiAgaWYgKGdkYmFyY2gtPiR7ZnVuY3Rp b259ID09IDApXG4iCisgCSAgaWYgWyAiJHtyZXR1cm50eXBlfSIgPSAidm9p ZCIgXQorIAkgIHRoZW4KKyAJICAgIHByaW50ZiAiICAgIHJldHVybjtcbiIK KyAJICBlbHNlCisgCSAgICBwcmludGYgIiAgICByZXR1cm4gJHtudWxsX2Z1 bmN0aW9uX2RlZmF1bHRfcmV0dmFsfTtcbiIKKyAgICAgICAgICAgIGZpCisg CWZpCiAgICAgICAgCWlmIFsgIiR7cmV0dXJudHlwZX0iID0gInZvaWQiIF0K IAl0aGVuCiAJICBwcmludGYgIiAgZ2RiYXJjaC0+JHtmdW5jdGlvbn0gKCR7 YWN0dWFsfSk7XG4iCi0tLSBzcmMub3JpZy9nZGIvY29yZS1hb3V0LmMJU3Vu IEp1bCAzMCAwMzo0ODoyNCAyMDAwCisrKyBzcmMubmV3L2dkYi9jb3JlLWFv dXQuYwlUdWUgRmViIDI3IDE3OjM2OjM1IDIwMDEKQEAgLTgxLDYgKzgxLDcg QEAKICAgaW50IGJhZF9yZWcgPSAtMTsKICAgQ09SRV9BRERSIHJlZ19wdHIg PSAtcmVnX2FkZHI7CS8qIE9yaWdpbmFsIHUudV9hcjAgaXMgLXJlZ19hZGRy LiAqLwogICBpbnQgbnVtcmVncyA9IEFSQ0hfTlVNX1JFR1M7CisgIGNoYXIg KmJ1Zj1hbGxvY2EoTUFYX1JFR0lTVEVSX1JBV19TSVpFKTsKIAogICAvKiBJ ZiB1LnVfYXIwIHdhcyBhbiBhYnNvbHV0ZSBhZGRyZXNzIGluIHRoZSBjb3Jl IGZpbGUsIHJlbGF0aXZpemUgaXQgbm93LAogICAgICBzbyB3ZSBjYW4gdXNl IGl0IGFzIGFuIG9mZnNldCBpbnRvIGNvcmVfcmVnX3NlY3QuICBXaGVuIHdl J3JlIGRvbmUsCkBAIC05MywxMiArOTQsMjAgQEAKIAogICBmb3IgKHJlZ25v ID0gMDsgcmVnbm8gPCBudW1yZWdzOyByZWdubysrKQogICAgIHsKLSAgICAg IGFkZHIgPSBDT1JFX1JFR0lTVEVSX0FERFIgKHJlZ25vLCByZWdfcHRyKTsK LSAgICAgIGlmIChhZGRyID49IGNvcmVfcmVnX3NpemUKLQkgICYmIGJhZF9y ZWcgPCAwKQotCWJhZF9yZWcgPSByZWdubzsKKyAgICAgICBpZiAoQ0FOTk9U X0ZFVENIX1JFR0lTVEVSIChyZWdubykpCisJeworCSAgbWVtc2V0IChidWYs ICdcMCcsIFJFR0lTVEVSX1JBV19TSVpFIChyZWdubykpOwkvKiBTdXBwbHkg emVyb2VzICovCisJICBzdXBwbHlfcmVnaXN0ZXIgKHJlZ25vLCBidWYpOwor CX0KICAgICAgIGVsc2UKLQlzdXBwbHlfcmVnaXN0ZXIgKHJlZ25vLCBjb3Jl X3JlZ19zZWN0ICsgYWRkcik7CisJeworCSAgYWRkciA9IENPUkVfUkVHSVNU RVJfQUREUiAocmVnbm8sIHJlZ19wdHIpOworCSAgaWYgKGFkZHIgPj0gY29y ZV9yZWdfc2l6ZQorCSAgICAgICYmIGJhZF9yZWcgPCAwKQorCSAgICBiYWRf cmVnID0gcmVnbm87CisJICBlbHNlCisJICAgIHN1cHBseV9yZWdpc3RlciAo cmVnbm8sIGNvcmVfcmVnX3NlY3QgKyBhZGRyKTsKKwl9CiAgICAgfQogCiAg IGlmIChiYWRfcmVnID49IDApCg== ------------=_1583534347-29878-1 Content-Type: text/x-diff; charset=us-ascii; name="gdb.s390.270201.readline.config.diff" Content-Disposition: inline; filename="gdb.s390.270201.readline.config.diff" Content-Transfer-Encoding: base64 Content-Length: 354 LS0tIHNyYy5vcmlnL3JlYWRsaW5lL2NvbmZpZ3VyZS5pbglTdW4gSnVsICA5 IDE5OjE5OjU2IDIwMDAKKysrIHNyYy5uZXcvcmVhZGxpbmUvY29uZmlndXJl LmluCU1vbiBGZWIgMjYgMTc6NTg6MDQgMjAwMQpAQCAtMTI5LDYgKzEyOSw3 IEBACiAKIGNhc2UgIiRob3N0X2NwdSIgaW4KICpjcmF5KikJTE9DQUxfQ0ZM QUdTPS1EQ1JBWSA7OworKnMzOTAqKSBMT0NBTF9DRkxBR1M9LWZzaWduZWQt Y2hhciA7OwogZXNhYwogCiBjYXNlICIkaG9zdF9vcyIgaW4K ------------=_1583534347-29878-1 Content-Type: text/plain; charset=us-ascii; name="S390ChangeLog.gdb" Content-Disposition: inline; filename="S390ChangeLog.gdb" Content-Transfer-Encoding: base64 Content-Length: 1961 MjAwMS0wMi0yNiAgRC5KLiBCYXJyb3cgPGRqYmFycm93QGRlLmlibS5jb20s YmFycm93X2RqQHlhaG9vLmNvbT4KCSogczM5MC1uYXQuYyBOZXcgZmlsZSBB ZGRlZCBmb3IgUy8zOTAgMzEgJiA2NCBiaXQgdGFyZ2V0LgoJKiBzMzkwLXRk ZXAuYyBMaWtld2lzZS4KCSogY29uZmlnL3MzOTAvbm0tbGludXguaCBMaWtl d2lzZS4JIAoJKiBjb25maWcvczM5MC9zMzkweC5tdCBMaWtld2lzZS4KCSog Y29uZmlnL3MzOTAvdG0tbGludXguaCAgTGlrZXdpc2UuICAKCSogY29uZmln L3MzOTAveG0tbGludXguaCBMaWtld2lzZQoJKiBjb25maWcvczM5MC9zMzkw Lm1oIExpa2V3aXNlLgoJKiBjb25maWcvczM5MC9zMzkwLm10IExpa2V3aXNl LgoJKiBjb25maWcvczM5MC90bS1zMzkwLmggTGlrZXdpc2UuCiAgICAgICAg KiBjb25maWcuaW4gQWRkZWQgZGVmaW5pdGlvbnMgZm9yIFMvMzkwIDMxICYg NjQgYml0IHRhcmdldC4KCSogY29uZmlndXJlLmhvc3QgTGlrZXdpc2UuCgkq IGNvbmZpZ3VyZS5pbiBMaWtld2lzZS4KCSogY29uZmlndXJlLnRndCAgTGlr ZXdpc2UuCgogICAgICAgICogZ2RiYXJjaC5zaCBBZGRlZCAyIGRlZmluaXRp b25zIHRvIHRoZSBpbnB1dCB0YWJsZQoJYWxsb3dfbnVsbF9mdW5jdGlvbiwg dGhpcyBkZWZpbml0aW9uIGlzIHNldCB0byBhbgoJbm9uIGVtcHR5IHN0cmlu ZyBpZiBpdCBpcyBva2F5IGZvciB0aGUgZ2RiYXJjaCBmdW5jdGlvbgoJdG8g YmUgbnVsbC4KCW51bGxfZnVuY3Rpb25fZGVmYXVsdF9yZXR2YWwsIHRoaXMg ZGVmaW5pdG9uIGlzIHRoZQoJZGVmYXVsdCByZXR1cm4gdmFsdWUgZm9yIGEg dW5kZWZpbmVkIGZ1bmN0aW9uCgkoaS5lLiBhbGxvd19udWxsX2Z1bmN0aW9u IGlzIGRlZmluZWQgKS4KCUFkZGVkIG5ldyBtYWNyb3MgcmVxdWlyZWQgZm9y IFMvMzkwCglJTklUX0ZSQU1FX1BDX0ZJUlNUCglDQU5OT1RfU1RPUkVfUkVH SVNURVIKCUNBTk5PVF9GRVRDSF9SRUdJU1RFUgoJQUREUl9CSVRTX1JFTU9W RQoJRVhUUkFDVF9TVFJVQ1RfVkFMVUVfQUREUkVTU19QICAgICAgICAKCglJ bXByb3ZlZCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBmb2xsb3dpbmcgbWFjcm9z LgoJUFVTSF9SRVRVUk5fQUREUkVTUyAKCWFkZGVkIGFsbG93IG51bGwgZnVu Y3Rpb24gc28gZGVmYXVsdCBiZWhhdmlvdXIgd291bGQgYmUgY29ycmVjdC4K CUVYVFJBQ1RfU1RSVUNUX1ZBTFVFX0FERFJFU1MKCWFkZGVkIGNoZWNrIGZv ciBFWFRSQUNUX1NUUlVDVF9WQUxVRV9BRERSRVNTX1AKCUNBTExfRFVNTVlf QlJFQUtQT0lOVF9PRkZTRVQKCgkqIGNvcmUtYW91dC5jIGFkZGVkIGNoZWNr IGZvciBDQU5OT1RfRkVUQ0hfUkVHSVNURVIKCWluIGZldGNoX2NvcmVfcmVn aXN0ZXJzLgoJKiBhcmNoLXV0aWxzLmMgYWRkZWQgY2hlY2sgZm9yIEJGRF9F TkRJQU5fVU5LTk9XTgoJaW4gc2V0X2VuZGlhbl9mcm9tX2ZpbGUuCgoKCgoK CgoKCg== ------------=_1583534347-29878-1 Content-Type: text/plain; charset=us-ascii; name="S390ChangeLog.Root" Content-Disposition: inline; filename="S390ChangeLog.Root" Content-Transfer-Encoding: base64 Content-Length: 236 MjAwMS0wMi0yNiAgRC5KLiBCYXJyb3cgPGRqYmFycm93QGRlLmlibS5jb20s YmFycm93X2RqQHlhaG9vLmNvbT4KCSogY29uZmlnLnN1YjogQWRkZWQgUy8z OTAgMzEgJiA2NCBiaXQgdGFyZ2V0LgoJKiBjb25maWd1cmUuaW46IExpa2V3 aXNlLgogICAgICAgICogY29uZmlnLmd1ZXNzOiBMaWtld2lzZS4= ------------=_1583534347-29878-1-- >From hiller@redhat.com Tue Feb 27 13:36:00 2001 From: Matt Hiller To: gdb-patches@sources.redhat.com Subject: [patch] Translation of mn10300 debugging symbols to gdb's internalregister numbering scheme Date: Tue, 27 Feb 2001 13:36:00 -0000 Message-id: X-SW-Source: 2001-02/msg00485.html Content-length: 1791 At http://gcc.gnu.org/ml/gcc-patches/2001-02/msg01491.html , Alex Oliva describes an inconsistency in the register numbering for mn10300 between gcc and the other tools. Matushita has developed debugging tools based on the numbering gcc uses, so we are obliged to alter the behavior of gdb instead. The following patch has gdb translate debugging register numbers to gdb REGNUMs. I do not have write access to this repository; my patch, if acceptable, will have to be committed by someone else. -- Matt Hiller GCC Engineer, Red Hat, Inc., Sunnyvale office hiller@redhat.com 2001-02-27 Matt Hiller * config/mn10300/tm-mn10300.h (DWARF_REG_TO_REGNUM): New macro. (STAB_REG_TO_REGNUM): New macro. Index: config/mn10300/tm-mn10300.h =================================================================== RCS file: /cvs/src/src/gdb/config/mn10300/tm-mn10300.h,v retrieving revision 1.4 diff -u -p -r1.4 tm-mn10300.h --- config/mn10300/tm-mn10300.h 2000/08/12 03:28:42 1.4 +++ config/mn10300/tm-mn10300.h 2001/02/27 21:33:46 @@ -167,3 +167,15 @@ extern use_struct_convention_fn mn10300_ extern void mn10300_virtual_frame_pointer (CORE_ADDR, long *, long *); #define TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFP) \ mn10300_virtual_frame_pointer ((PC), (REGP), (OFFP)) + +/* Convert a DWARF register number to a gdb REGNUM. */ +#define DWARF_REG_TO_REGNUM(num) \ + (((num) <= 7) ? (num) \ + : (num == 8) ? (-1) /* ap, which won't appear in debugging info. */ \ + : (num == 9) ? (SP_REGNUM) \ + : (10 <= num && num <= 17) ? ((num - 10) + E0_REGNUM) \ + : (-1)) /* program counter, etc., none of which appear in debugging + info. */ + +/* Convert a STAB register number to a gdb REGNUM. */ +#define STAB_REG_TO_REGNUM(num) DWARF_REG_TO_REGNUM (num)