From owner-freebsd-threads@FreeBSD.ORG Wed Apr 16 23:55:58 2003 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5994E37B401 for ; Wed, 16 Apr 2003 23:55:58 -0700 (PDT) Received: from rwcrmhc52.attbi.com (rwcrmhc52.attbi.com [216.148.227.88]) by mx1.FreeBSD.org (Postfix) with ESMTP id 756A043F93 for ; Wed, 16 Apr 2003 23:55:57 -0700 (PDT) (envelope-from julian@elischer.org) Received: from interjet.elischer.org (12-232-168-4.client.attbi.com[12.232.168.4]) by rwcrmhc52.attbi.com (rwcrmhc52) with ESMTP id <2003041706555405200enuk6e>; Thu, 17 Apr 2003 06:55:54 +0000 Received: from localhost (localhost.elischer.org [127.0.0.1]) by InterJet.elischer.org (8.9.1a/8.9.1) with ESMTP id XAA49182; Wed, 16 Apr 2003 23:55:51 -0700 (PDT) Date: Wed, 16 Apr 2003 23:55:50 -0700 (PDT) From: Julian Elischer To: Jeff Roberson In-Reply-To: <20030416221535.B76635-100000@mail.chesapeake.net> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-499056429-1050562550=:94222" cc: freebsd-threads@freebsd.org Subject: Re: Patches for threads/scheduler abstraction. X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Apr 2003 06:55:58 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-499056429-1050562550=:94222 Content-Type: TEXT/PLAIN; charset=US-ASCII On Wed, 16 Apr 2003, Jeff Roberson wrote: > > On Wed, 16 Apr 2003, Julian Elischer wrote: > > > > > OK I will send them shortly. > > > > These patches are NOT CLEAN > > by which I mean I have not done any tidying up yet. > > > > It is still in the "cat dragged this over the fence" state. > > However it does compile cleanly with only four files knowing what a kse > > is (Not counting ULE, I have not touched ULE yet) (and I would actualy > > rather that you did.. you understand it better). > > > > !!!!!!I have not tried to RUN this yet!!!!!! > > The files that know what a kse is are: > > ref3# grep ksevar.h kern/* > > kern/kern_switch.c:#include > > kern/kern_thread.c:#include > > kern/sched_4bsd.c:#include > > kern/sched_4bsd_kse.c:#include > > (note that kern_thr.c is not one of them) > > > > My plan is: > > eventually, sched_4bsd.c will only do the original BSD > > scheduling (except with threads instead of procsses) > > i.e. unfair, but simple and easy to benchmark on non-threaded apps. > > (or on threaded apps with no competing processes) > > > > sched_4bsd_kse.c will suck in the current contents of kern_switch.c > > and the KSE'd version of sched_4bsd.c. > > > > this will act like the current 4bsd scheduler WITH KSEs > > > > There is a better way to do this. If you would listen to my tiered > approach you could end up with one copy of sched_4bsd and not two. > The kse specific logic could just sit in kern_kse which would not > tell sched_4bsd about threads until they owned the KSE. We could > even do this without the kse structure as a go between. I think that is an overcomplication. the two BSD based files would be very different. For a start the simple one would be queueing threads on the run queues. A system compiled with that scheduelr would have no KSEs anywhere in the entire kernel. The kse one would be queueing KSEs. I don't see how you can do this with a shared file. Anyhow, the following hack (totaly unoptimised.... notice the existance of sched_td_exit, sched_exit_thread, and sched_thr_exit.. I just haven't got to cleaning it) is not so advanced that the question of tiered schedulers is relevant yet.. this patch just shows that it is possible to get the KSEs out of the rst of the system. > > > switch.c will go away (unless you want it as part of ULE). > > > > kern_thread.c will forget all about KSEs > > (but its not there yet). > > > > I'll send the patches in an hour or so.. > > My wife's calling :-/ > > > > > > > > > > > > > > > > > > > > > > > Julian > > > > > > > > > > > > > > > > > > --0-499056429-1050562550=:94222 Content-Type: APPLICATION/octet-stream; name="hack.tgz" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="hack.tgz" dW4ta3NlLmRpZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDc1MTUz ADA3NjQ3NDQ2MDAwADAxMTc1NAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAA/IHN5cy9scy5nbW9uCj8gc3lzL2NvbmYvbHMu Z21vbgo/IHN5cy9pMzg2L2NvbmYvUkVGMwo/IHN5cy9pMzg2L2NvbmYvbHMu Z21vbgo/IHN5cy9rZXJuL3NjaGVkXzRic2Rfa3NlLmMKPyBzeXMvc3lzL2tz ZXZhci5oCj8gc3lzL3N5cy9scy5nbW9uCkluZGV4OiBzeXMvY29uZi9maWxl cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3MvcHJv amVjdHMvbWlycm9yZWQvZnJlZWJzZC9zcmMvc3lzL2NvbmYvZmlsZXMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuNzgyCmRpZmYgLXUgLXIxLjc4MiBmaWxl cwotLS0gc3lzL2NvbmYvZmlsZXMJMjAwMy8wNC8xNSAwNDowODowMQkxLjc4 MgorKysgc3lzL2NvbmYvZmlsZXMJMjAwMy8wNC8xNyAwNjozNDo1MApAQCAt MTA1Myw2ICsxMDUzLDcgQEAKIGtlcm4vbWQ0Yy5jCQlvcHRpb25hbCBuZXRz bWIKIGtlcm4vbWQ1Yy5jCQlzdGFuZGFyZAoga2Vybi9zY2hlZF80YnNkLmMJ b3B0aW9uYWwgc2NoZWRfNGJzZAora2Vybi9zY2hlZF80YnNkX2tzZS5jCW9w dGlvbmFsIHNjaGVkXzRic2QKIGtlcm4vc2NoZWRfdWxlLmMJb3B0aW9uYWwg c2NoZWRfdWxlCiBrZXJuL3N1YnJfYXV0b2NvbmYuYwlzdGFuZGFyZAoga2Vy bi9zdWJyX2JsaXN0LmMJc3RhbmRhcmQKSW5kZXg6IHN5cy9pMzg2L2kzODYv bWFjaGRlcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9y ZXBvcy9wcm9qZWN0cy9taXJyb3JlZC9mcmVlYnNkL3NyYy9zeXMvaTM4Ni9p Mzg2L21hY2hkZXAuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41NjEKZGlm ZiAtdSAtcjEuNTYxIG1hY2hkZXAuYwotLS0gc3lzL2kzODYvaTM4Ni9tYWNo ZGVwLmMJMjAwMy8wNC8wMiAyMzo1MzoyOAkxLjU2MQorKysgc3lzL2kzODYv aTM4Ni9tYWNoZGVwLmMJMjAwMy8wNC8xNyAwNjozNDo1NApAQCAtMTkzMSwx MSArMTkzMSw3IEBACiAJICAgKHRocmVhZDAudGRfa3N0YWNrICsgS1NUQUNL X1BBR0VTICogUEFHRV9TSVpFKSAtIDE7CiAJYXRkZXZiYXNlID0gSVNBX0hP TEVfU1RBUlQgKyBLRVJOQkFTRTsKIAotCS8qCi0gCSAqIFRoaXMgbWF5IGJl IGRvbmUgYmV0dGVyIGxhdGVyIGlmIGl0IGdldHMgbW9yZSBoaWdoIGxldmVs Ci0gCSAqIGNvbXBvbmVudHMgaW4gaXQuIElmIHNvIGp1c3QgbGluayB0ZC0+ dGRfcHJvYyBoZXJlLgotCSAqLwotCXByb2NfbGlua3VwKCZwcm9jMCwgJmtz ZWdycDAsICZrc2UwLCAmdGhyZWFkMCk7CisJdGhyZWFkMC50ZF9wcm9jID0g JnByb2MwOyAvKiBzb21lIHN0dWZmIGFzc3VtZXMgdGhpcyBpcyBhbHJlYWR5 IGRvbmUgKi8KIAogCW1ldGFkYXRhX21pc3NpbmcgPSAwOwogCWlmIChib290 aW5mby5iaV9tb2R1bGVwKSB7CkluZGV4OiBzeXMva2Vybi9pbml0X21haW4u Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3MvcHJv amVjdHMvbWlycm9yZWQvZnJlZWJzZC9zcmMvc3lzL2tlcm4vaW5pdF9tYWlu LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjI5CmRpZmYgLXUgLXIxLjIy OSBpbml0X21haW4uYwotLS0gc3lzL2tlcm4vaW5pdF9tYWluLmMJMjAwMy8w NC8xMyAyMToyOToxMAkxLjIyOQorKysgc3lzL2tlcm4vaW5pdF9tYWluLmMJ MjAwMy8wNC8xNyAwNjozNDo1NQpAQCAtODgsNyArODgsNiBAQAogc3RhdGlj IHN0cnVjdCBwZ3JwIHBncnAwOwogc3RydWN0CXByb2MgcHJvYzA7CiBzdHJ1 Y3QJdGhyZWFkIHRocmVhZDA7Ci1zdHJ1Y3QJa3NlIGtzZTA7CiBzdHJ1Y3QJ a3NlZ3JwIGtzZWdycDA7CiBzdGF0aWMgc3RydWN0IHByb2NzaWcgcHJvY3Np ZzA7CiBzdGF0aWMgc3RydWN0IGZpbGVkZXNjMCBmaWxlZGVzYzA7CkBAIC0z MDgsMTggKzMwNywxMiBAQAogCXJlZ2lzdGVyIHVuc2lnbmVkIGk7CiAJc3Ry dWN0IHRocmVhZCAqdGQ7CiAJc3RydWN0IGtzZWdycCAqa2c7Ci0Jc3RydWN0 IGtzZSAqa2U7CiAKIAlHSUFOVF9SRVFVSVJFRDsKIAlwID0gJnByb2MwOwog CXRkID0gJnRocmVhZDA7Ci0Ja2UgPSAma3NlMDsKIAlrZyA9ICZrc2VncnAw OwogCi0Ja2UtPmtlX3NjaGVkID0ga3NlMF9zY2hlZDsKLQlrZy0+a2dfc2No ZWQgPSBrc2VncnAwX3NjaGVkOwotCXAtPnBfc2NoZWQgPSBwcm9jMF9zY2hl ZDsKLQl0ZC0+dGRfc2NoZWQgPSB0aHJlYWQwX3NjaGVkOwogCiAJLyoKIAkg KiBJbml0aWFsaXplIG1hZ2ljIG51bWJlci4KQEAgLTMyOSw5ICszMjIsMTEg QEAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhyZWFkLCBwcm9jZXNzIGFuZCBw Z3JwIHN0cnVjdHVyZXMuCiAJICovCi0JcHJvY2luaXQoKTsKLQl0aHJlYWRp bml0KCk7CisJcHJvY2luaXQoKTsJCS8qIHNldCB1cCBwcm9jIHpvbmUgKi8K Kwl0aHJlYWRpbml0KCk7CQkvKiBzZXQgdXAgdGhyZWFkLCB1cGNhbGwgYW5k IEtTRUdSUCB6b25lcyAqLworCXNjaGVkaW5pdCgpOwkJLyogc2V0IHVwIHpv bmVzIGV0Yy4gZm9yIHRoZSBzY2hlZHVsZXIgKi8KIAorCiAJLyoKIAkgKiBJ bml0aWFsaXplIHNsZWVwIHF1ZXVlIGhhc2ggdGFibGUKIAkgKi8KQEAgLTM2 MCwxMiArMzU1LDcgQEAKIAogCXAtPnBfc3lzZW50ID0gJm51bGxfc3lzdmVj OwogCi0JLyoKLQkgKiBwcm9jX2xpbmt1cCB3YXMgYWxyZWFkeSBkb25lIGlu IGluaXRfaTM4NigpIG9yIGFscGhhaW5pdCgpIGV0Yy4KLQkgKiBiZWNhdXNl IHRoZSBlYXJsaWVyIGNvZGUgbmVlZGVkIHRvIGZvbGxvdyB0ZC0+dGRfcHJv Yy4gT3RoZXJ3aXNlCi0JICogSSB3b3VsZCBoYXZlIGRvbmUgaXQgaGVyZS4u IG1heWJlIHRoaXMgbWVhbnMgdGhpcyBzaG91bGQgYmUKLQkgKiBkb25lIGVh cmxpZXIgdG9vLgotCSAqLworCXByb2NfbGlua3VwKCZwcm9jMCwgJmtzZWdy cDAsICZ0aHJlYWQwKTsKIAlwLT5wX2ZsYWcgPSBQX1NZU1RFTTsKIAlwLT5w X3NmbGFnID0gUFNfSU5NRU07CiAJcC0+cF9zdGF0ZSA9IFBSU19OT1JNQUw7 CkBAIC0zNzUsMTAgKzM2NSw3IEBACiAJa2ctPmtnX3VzZXJfcHJpID0gUFVT RVI7CiAJdGQtPnRkX3ByaW9yaXR5ID0gUFZNOwogCXRkLT50ZF9iYXNlX3By aSA9IFBVU0VSOwotCXRkLT50ZF9rc2UgPSBrZTsgLyogWFhYS1NFICovCiAJ dGQtPnRkX29uY3B1ID0gMDsKLQlrZS0+a2Vfc3RhdGUgPSBLRVNfVEhSRUFE OwotCWtlLT5rZV90aHJlYWQgPSB0ZDsKIAlwLT5wX3BlZXJzID0gMDsKIAlw LT5wX2xlYWRlciA9IHA7CiAKSW5kZXg6IHN5cy9rZXJuL2tlcm5fY2xvY2su Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3MvcHJv amVjdHMvbWlycm9yZWQvZnJlZWJzZC9zcmMvc3lzL2tlcm4va2Vybl9jbG9j ay5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1NgpkaWZmIC11IC1yMS4x NTYga2Vybl9jbG9jay5jCi0tLSBzeXMva2Vybi9rZXJuX2Nsb2NrLmMJMjAw My8wNC8xMSAwMzozOTowNwkxLjE1NgorKysgc3lzL2tlcm4va2Vybl9jbG9j ay5jCTIwMDMvMDQvMTcgMDY6MzQ6NTUKQEAgLTM1Nyw3ICszNTcsNiBAQAog CXN0cnVjdCBydXNhZ2UgKnJ1OwogCXN0cnVjdCB2bXNwYWNlICp2bTsKIAlz dHJ1Y3QgdGhyZWFkICp0ZDsKLQlzdHJ1Y3Qga3NlICprZTsKIAlzdHJ1Y3Qg cHJvYyAqcDsKIAlsb25nIHJzczsKIApAQCAtMzY1LDcgKzM2NCw2IEBACiAJ cCA9IHRkLT50ZF9wcm9jOwogCiAJbXR4X2xvY2tfc3Bpbl9mbGFncygmc2No ZWRfbG9jaywgTVRYX1FVSUVUKTsKLQlrZSA9IHRkLT50ZF9rc2U7CiAJaWYg KENMS0ZfVVNFUk1PREUoZnJhbWUpKSB7CiAJCS8qCiAJCSAqIENoYXJnZSB0 aGUgdGltZSBhcyBhcHByb3ByaWF0ZS4KQEAgLTM3Myw3ICszNzEsNyBAQAog CQlpZiAocC0+cF9mbGFnICYgUF9USFJFQURFRCkKIAkJCXRocmVhZF9zdGF0 Y2xvY2soMSk7CiAJCXAtPnBfdXRpY2tzKys7Ci0JCWlmIChrZS0+a2Vfa3Nl Z3JwLT5rZ19uaWNlID4gTlpFUk8pCisJCWlmICh0ZC0+dGRfa3NlZ3JwLT5r Z19uaWNlID4gTlpFUk8pCiAJCQljcF90aW1lW0NQX05JQ0VdKys7CiAJCWVs c2UKIAkJCWNwX3RpbWVbQ1BfVVNFUl0rKzsKQEAgLTQwNSw3ICs0MDMsNyBA QAogCQl9CiAJfQogCi0Jc2NoZWRfY2xvY2soa2UpOworCXNjaGVkX2Nsb2Nr KHRkKTsKIAogCS8qIFVwZGF0ZSByZXNvdXJjZSB1c2FnZSBpbnRlZ3JhbHMg YW5kIG1heGltdW1zLiAqLwogCWlmICgocHN0YXRzID0gcC0+cF9zdGF0cykg IT0gTlVMTCAmJgpJbmRleDogc3lzL2tlcm4va2Vybl9mb3JrLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zL3Byb2plY3RzL21p cnJvcmVkL2ZyZWVic2Qvc3JjL3N5cy9rZXJuL2tlcm5fZm9yay5jLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjE5MQpkaWZmIC11IC1yMS4xOTEga2Vybl9m b3JrLmMKLS0tIHN5cy9rZXJuL2tlcm5fZm9yay5jCTIwMDMvMDQvMTEgMDM6 Mzk6MDcJMS4xOTEKKysrIHN5cy9rZXJuL2tlcm5fZm9yay5jCTIwMDMvMDQv MTcgMDY6MzQ6NTUKQEAgLTIxNyw3ICsyMTcsNiBAQAogCXN0cnVjdCBmaWxl ZGVzYyAqZmQ7CiAJc3RydWN0IHByb2MgKnAxID0gdGQtPnRkX3Byb2M7CiAJ c3RydWN0IHRocmVhZCAqdGQyOwotCXN0cnVjdCBrc2UgKmtlMjsKIAlzdHJ1 Y3Qga3NlZ3JwICprZzI7CiAJc3RydWN0IHNpZ2FjdHMgKm5ld3NpZ2FjdHM7 CiAJc3RydWN0IHByb2NzaWcgKm5ld3Byb2NzaWc7CkBAIC00NDgsNyArNDQ3 LDYgQEAKIAkgKi8KIAl0ZDIgPSBGSVJTVF9USFJFQURfSU5fUFJPQyhwMik7 CiAJa2cyID0gRklSU1RfS1NFR1JQX0lOX1BST0MocDIpOwotCWtlMiA9IEZJ UlNUX0tTRV9JTl9LU0VHUlAoa2cyKTsKIAogCS8qIEFsbG9jYXRlIGFuZCBz d2l0Y2ggdG8gYW4gYWx0ZXJuYXRlIGtzdGFjayBpZiBzcGVjaWZpZWQgKi8K IAlpZiAocGFnZXMgIT0gMCkKQEAgLTQ1OCw4ICs0NTYsNiBAQAogCiAJYnpl cm8oJnAyLT5wX3N0YXJ0emVybywKIAkgICAgKHVuc2lnbmVkKSBSQU5HRU9G KHN0cnVjdCBwcm9jLCBwX3N0YXJ0emVybywgcF9lbmR6ZXJvKSk7Ci0JYnpl cm8oJmtlMi0+a2Vfc3RhcnR6ZXJvLAotCSAgICAodW5zaWduZWQpIFJBTkdF T0Yoc3RydWN0IGtzZSwga2Vfc3RhcnR6ZXJvLCBrZV9lbmR6ZXJvKSk7CiAJ Ynplcm8oJnRkMi0+dGRfc3RhcnR6ZXJvLAogCSAgICAodW5zaWduZWQpIFJB TkdFT0Yoc3RydWN0IHRocmVhZCwgdGRfc3RhcnR6ZXJvLCB0ZF9lbmR6ZXJv KSk7CiAJYnplcm8oJmtnMi0+a2dfc3RhcnR6ZXJvLApAQCAtNDc3LDExICs0 NzMsNiBAQAogCSAgICAodW5zaWduZWQpIFJBTkdFT0Yoc3RydWN0IGtzZWdy cCwga2dfc3RhcnRjb3B5LCBrZ19lbmRjb3B5KSk7CiAjdW5kZWYgUkFOR0VP RgogCi0JLyogU2V0IHVwIHRoZSB0aHJlYWQgYXMgYW4gYWN0aXZlIHRocmVh ZCAoYXMgaWYgcnVubmFibGUpLiAqLwotCWtlMi0+a2Vfc3RhdGUgPSBLRVNf VEhSRUFEOwotCWtlMi0+a2VfdGhyZWFkID0gdGQyOwotCXRkMi0+dGRfa3Nl ID0ga2UyOwotCiAJLyoKIAkgKiBEdXBsaWNhdGUgc3ViLXN0cnVjdHVyZXMg YXMgbmVlZGVkLgogCSAqIEluY3JlYXNlIHJlZmVyZW5jZSBjb3VudHMgb24g c2hhcmVkIG9iamVjdHMuCkBAIC00OTYsNyArNDg3LDcgQEAKIAkgKiBBbGxv dyB0aGUgc2NoZWR1bGVyIHRvIGFkanVzdCB0aGUgcHJpb3JpdHkgb2YgdGhl IGNoaWxkIGFuZAogCSAqIHBhcmVudCB3aGlsZSB3ZSBob2xkIHRoZSBzY2hl ZF9sb2NrLgogCSAqLwotCXNjaGVkX2ZvcmsocDEsIHAyKTsKKwlzY2hlZF9m b3JrKHRkLCBwMik7CiAKIAltdHhfdW5sb2NrX3NwaW4oJnNjaGVkX2xvY2sp OwogCXAyLT5wX3VjcmVkID0gY3Job2xkKHRkLT50ZF91Y3JlZCk7CkluZGV4 OiBzeXMva2Vybi9rZXJuX2lkbGUuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvcmVwb3MvcHJvamVjdHMvbWlycm9yZWQvZnJlZWJzZC9z cmMvc3lzL2tlcm4va2Vybl9pZGxlLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMjkKZGlmZiAtdSAtcjEuMjkga2Vybl9pZGxlLmMKLS0tIHN5cy9rZXJu L2tlcm5faWRsZS5jCTIwMDIvMTAvMTIgMDU6MzI6MjMJMS4yOQorKysgc3lz L2tlcm4va2Vybl9pZGxlLmMJMjAwMy8wNC8xNyAwNjozNDo1NQpAQCAtNjUs NyArNjUsNyBAQAogCQlwLT5wX3N0YXRlID0gUFJTX05PUk1BTDsKIAkJdGQg PSBGSVJTVF9USFJFQURfSU5fUFJPQyhwKTsKIAkJdGQtPnRkX3N0YXRlID0g VERTX0NBTl9SVU47Ci0JCXRkLT50ZF9rc2UtPmtlX2ZsYWdzIHw9IEtFRl9J RExFS1NFOyAKKwkJdGQtPnRkX2ZsYWdzIHw9IFRERl9JRExFVEQ7IAogI2lm ZGVmIFNNUAogCX0KICNlbmRpZgpJbmRleDogc3lzL2tlcm4va2Vybl9pbnRy LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zL3By b2plY3RzL21pcnJvcmVkL2ZyZWVic2Qvc3JjL3N5cy9rZXJuL2tlcm5faW50 ci5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkxCmRpZmYgLXUgLXIxLjkx IGtlcm5faW50ci5jCi0tLSBzeXMva2Vybi9rZXJuX2ludHIuYwkyMDAzLzAz LzA0IDIxOjAxOjQyCTEuOTEKKysrIHN5cy9rZXJuL2tlcm5faW50ci5jCTIw MDMvMDQvMTcgMDY6MzQ6NTUKQEAgLTM5Niw3ICszOTYsNyBAQAogCQkJS0FT U0VSVCgoVERfSVNfUlVOTklORyhjdGQpKSwKIAkJCSAgICAoIml0aHJlYWRf c2NoZWR1bGU6IEJhZCBzdGF0ZSBmb3IgY3VydGhyZWFkLiIpKTsKIAkJCWN0 ZC0+dGRfcHJvYy0+cF9zdGF0cy0+cF9ydS5ydV9uaXZjc3crKzsKLQkJCWlm IChjdGQtPnRkX2tzZS0+a2VfZmxhZ3MgJiBLRUZfSURMRUtTRSkKKwkJCWlm IChjdGQtPnRkX2ZsYWdzICYgVERGX0lETEVURCkKIAkJCQljdGQtPnRkX3N0 YXRlID0gVERTX0NBTl9SVU47IC8qIFhYWEtTRSAqLwogCQkJbWlfc3dpdGNo KCk7CiAJCX0gZWxzZSB7CkluZGV4OiBzeXMva2Vybi9rZXJuX2t0ci5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvcy9wcm9qZWN0 cy9taXJyb3JlZC9mcmVlYnNkL3NyYy9zeXMva2Vybi9rZXJuX2t0ci5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXIxLjM1IGtlcm5f a3RyLmMKLS0tIHN5cy9rZXJuL2tlcm5fa3RyLmMJMjAwMy8wMy8xMSAxOTo1 NjoxNgkxLjM1CisrKyBzeXMva2Vybi9rZXJuX2t0ci5jCTIwMDMvMDQvMTcg MDY6MzQ6NTUKQEAgLTE5NSw3ICsxOTUsNyBAQAogI2lmZGVmIEtUUl9BTFEK IAlpZiAoa3RyX2FscV9lbmFibGVkICYmCiAJICAgIHRkLT50ZF9jcml0bmVz dCA9PSAwICYmCi0JICAgICh0ZC0+dGRfa3NlLT5rZV9mbGFncyAmIEtFRl9J RExFS1NFKSA9PSAwICYmCisJICAgICh0ZC0+dGRfZmxhZ3MgJiBUREZfSURM RVREKSA9PSAwICYmCiAJICAgIHRkICE9IGFsZF90aHJlYWQpIHsKIAkJaWYg KGt0cl9hbHFfbWF4ICYmIGt0cl9hbHFfY250ID4ga3RyX2FscV9tYXgpCiAJ CQlnb3RvIGRvbmU7CkluZGV4OiBzeXMva2Vybi9rZXJuX3Byb2MuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3MvcHJvamVjdHMv bWlycm9yZWQvZnJlZWJzZC9zcmMvc3lzL2tlcm4va2Vybl9wcm9jLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTc4CmRpZmYgLXUgLXIxLjE3OCBrZXJu X3Byb2MuYwotLS0gc3lzL2tlcm4va2Vybl9wcm9jLmMJMjAwMy8wNC8xMCAx NzozNTo0NAkxLjE3OAorKysgc3lzL2tlcm4va2Vybl9wcm9jLmMJMjAwMy8w NC8xNyAwNjozNDo1NQpAQCAtMTQ4LDE4ICsxNDgsMTcgQEAKIAlzdHJ1Y3Qg cHJvYyAqcDsKIAlzdHJ1Y3QgdGhyZWFkICp0ZDsKIAlzdHJ1Y3Qga3NlZ3Jw ICprZzsKLQlzdHJ1Y3Qga3NlICprZTsKIAogCS8qIElOVkFSSUFOVFMgY2hl Y2tzIGdvIGhlcmUgKi8KIAlwID0gKHN0cnVjdCBwcm9jICopbWVtOworCXRk ID0gRklSU1RfVEhSRUFEX0lOX1BST0MocCk7CiAJS0FTU0VSVCgocC0+cF9u dW10aHJlYWRzID09IDEpLAogCSAgICAoImJhZCBudW1iZXIgb2YgdGhyZWFk cyBpbiBleGl0aW5nIHByb2Nlc3MiKSk7Ci0gICAgICAgIHRkID0gRklSU1Rf VEhSRUFEX0lOX1BST0MocCk7CisjaWZkZWYgSU5WQVJJQU5UUwogCUtBU1NF UlQoKHRkICE9IE5VTEwpLCAoInByb2NfZHRvcjogYmFkIHRocmVhZCBwb2lu dGVyIikpOwogICAgICAgICBrZyA9IEZJUlNUX0tTRUdSUF9JTl9QUk9DKHAp OwogCUtBU1NFUlQoKGtnICE9IE5VTEwpLCAoInByb2NfZHRvcjogYmFkIGtn IHBvaW50ZXIiKSk7Ci0gICAgICAgIGtlID0gRklSU1RfS1NFX0lOX0tTRUdS UChrZyk7Ci0JS0FTU0VSVCgoa2UgIT0gTlVMTCksICgicHJvY19kdG9yOiBi YWQga2UgcG9pbnRlciIpKTsKKyNlbmRpZgogCiAJLyogRGlzcG9zZSBvZiBh biBhbHRlcm5hdGUga3N0YWNrLCBpZiBpdCBleGlzdHMuCiAJICogWFhYIFdo YXQgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdGhyZWFkIGluIHRoZSBw cm9jPwpAQCAtMTY4LDE0ICsxNjcsNiBAQAogCSAqLwogCWlmICgoKHAtPnBf ZmxhZyAmIFBfS1RIUkVBRCkgIT0gMCkgJiYgKHRkLT50ZF9hbHRrc3RhY2sg IT0gMCkpCiAJCXBtYXBfZGlzcG9zZV9hbHRrc3RhY2sodGQpOwotCi0JLyoK LQkgKiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBrbm93IHRoZSBpbml0aWFs IGxpbmthZ2VzLgotCSAqIHNvIGZvciBub3cgdGVhciB0aGVtIGRvd24gYW5k IHJlbWFrZSB0aGVtLgotCSAqIFRoaXMgaXMgcHJvYmFibHkgdW4tbmVlZGVk IGFzIHdlIGNhbiBwcm9iYWJseSByZWx5Ci0JICogb24gdGhlIHN0YXRlIGNv bWluZyBpbiBoZXJlIGZyb20gd2FpdDQoKS4KLQkgKi8KLQlwcm9jX2xpbmt1 cChwLCBrZywga2UsIHRkKTsKIH0KIAogLyoKQEAgLTE4NywxNSArMTc4LDE0 IEBACiAJc3RydWN0IHByb2MgKnA7CiAJc3RydWN0IHRocmVhZCAqdGQ7CiAJ c3RydWN0IGtzZWdycCAqa2c7Ci0Jc3RydWN0IGtzZSAqa2U7CiAKIAlwID0g KHN0cnVjdCBwcm9jICopbWVtOwogCXAtPnBfc2NoZWQgPSAoc3RydWN0IHBf c2NoZWQgKikmcFsxXTsKIAl2bV9wcm9jX25ldyhwKTsKIAl0ZCA9IHRocmVh ZF9hbGxvYygpOwotCWtlID0ga3NlX2FsbG9jKCk7CiAJa2cgPSBrc2VncnBf YWxsb2MoKTsKLQlwcm9jX2xpbmt1cChwLCBrZywga2UsIHRkKTsKKwlwcm9j X2xpbmt1cChwLCBrZywgdGQpOworCXNjaGVkX25ld3Byb2MocCwga2csIHRk KTsKIH0KIAogLyoKQEAgLTIwNyw3ICsxOTcsNiBAQAogCXN0cnVjdCBwcm9j ICpwOwogCXN0cnVjdCB0aHJlYWQgKnRkOwogCXN0cnVjdCBrc2VncnAgKmtn OwotCXN0cnVjdCBrc2UgKmtlOwogCiAJcCA9IChzdHJ1Y3QgcHJvYyAqKW1l bTsKIAlLQVNTRVJUKChwLT5wX251bXRocmVhZHMgPT0gMSksCkBAIC0yMTYs MTIgKzIwNSwxMCBAQAogCUtBU1NFUlQoKHRkICE9IE5VTEwpLCAoInByb2Nf ZHRvcjogYmFkIHRocmVhZCBwb2ludGVyIikpOwogICAgICAgICBrZyA9IEZJ UlNUX0tTRUdSUF9JTl9QUk9DKHApOwogCUtBU1NFUlQoKGtnICE9IE5VTEwp LCAoInByb2NfZHRvcjogYmFkIGtnIHBvaW50ZXIiKSk7Ci0gICAgICAgIGtl ID0gRklSU1RfS1NFX0lOX0tTRUdSUChrZyk7Ci0JS0FTU0VSVCgoa2UgIT0g TlVMTCksICgicHJvY19kdG9yOiBiYWQga2UgcG9pbnRlciIpKTsKIAl2bV9w cm9jX2Rpc3Bvc2UocCk7CisJc2NoZWRfZGVzdHJveXByb2MocCwga2csIHRk KTsKIAl0aHJlYWRfZnJlZSh0ZCk7CiAJa3NlZ3JwX2ZyZWUoa2cpOwotCWtz ZV9mcmVlKGtlKTsKIH0KIAogLyoKQEAgLTYxMSw3ICs1OTgsNiBAQAogewog CXN0cnVjdCB0aHJlYWQgKnRkOwogCXN0cnVjdCB0aHJlYWQgKnRkMDsKLQlz dHJ1Y3Qga3NlICprZTsKIAlzdHJ1Y3Qga3NlZ3JwICprZzsKIAlzdHJ1Y3Qg dHR5ICp0cDsKIAlzdHJ1Y3Qgc2Vzc2lvbiAqc3A7CkBAIC03MTksOCArNzA1 LDYgQEAKIAkJLyogdnZ2IFhYWEtTRSAqLwogCQlpZiAoIShwLT5wX2ZsYWcg JiBQX1RIUkVBREVEKSkgewogCQkJa2cgPSB0ZC0+dGRfa3NlZ3JwOwotCQkJ a2UgPSB0ZC0+dGRfa3NlOwotCQkJS0FTU0VSVCgoa2UgIT0gTlVMTCksICgi ZmlsbF9raW5mb19wcm9jOiBOdWxsIEtTRSIpKTsKIAkJCWJpbnRpbWUydGlt ZXZhbCgmcC0+cF9ydW50aW1lLCAmdHYpOwogCQkJa3AtPmtpX3J1bnRpbWUg PQogCQkJICAgIHR2LnR2X3NlYyAqICh1X2ludDY0X3QpMTAwMDAwMCArIHR2 LnR2X3VzZWM7CkBAIC03NDIsOSArNzI2LDggQEAKIAkJCWtwLT5raV9wY2Ig PSB0ZC0+dGRfcGNiOwogCQkJa3AtPmtpX2tzdGFjayA9ICh2b2lkICopdGQt PnRkX2tzdGFjazsKIAotCQkJLyogVGhpbmdzIGluIHRoZSBrc2UgKi8KLQkJ CWtwLT5raV9ycWluZGV4ID0ga2UtPmtlX3JxaW5kZXg7Ci0JCQlrcC0+a2lf cGN0Y3B1ID0gc2NoZWRfcGN0Y3B1KGtlKTsKKwkJCWtwLT5raV9ycWluZGV4 ID0gMDsgLyogY2FuJ3QgZ2V0IHRoaXMgbm93ICovCisJCQlrcC0+a2lfcGN0 Y3B1ID0gc2NoZWRfcGN0Y3B1KHRkKTsKIAkJfSBlbHNlIHsKIAkJCWtwLT5r aV9vbmNwdSA9IC0xOwogCQkJa3AtPmtpX2xhc3RjcHUgPSAtMTsKSW5kZXg6 IHN5cy9rZXJuL2tlcm5fc3dpdGNoLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL3JlcG9zL3Byb2plY3RzL21pcnJvcmVkL2ZyZWVic2Qv c3JjL3N5cy9rZXJuL2tlcm5fc3dpdGNoLmMsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuNTcKZGlmZiAtdSAtcjEuNTcga2Vybl9zd2l0Y2guYwotLS0gc3lz L2tlcm4va2Vybl9zd2l0Y2guYwkyMDAzLzA0LzAyIDIzOjUzOjI5CTEuNTcK KysrIHN5cy9rZXJuL2tlcm5fc3dpdGNoLmMJMjAwMy8wNC8xNyAwNjozNDo1 NQpAQCAtOTUsNiArOTUsNyBAQAogI2luY2x1ZGUgPHN5cy9rdHIuaD4KICNp bmNsdWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tdXRleC5oPgor I2luY2x1ZGUgPHN5cy9rc2V2YXIuaD4KICNpbmNsdWRlIDxzeXMvcHJvYy5o PgogI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgogI2luY2x1ZGUgPHN5cy9zY2hl ZC5oPgpJbmRleDogc3lzL2tlcm4va2Vybl90aHIuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3MvcHJvamVjdHMvbWlycm9yZWQv ZnJlZWJzZC9zcmMvc3lzL2tlcm4va2Vybl90aHIuYyx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS41CmRpZmYgLXUgLXIxLjUga2Vybl90aHIuYwotLS0gc3lz L2tlcm4va2Vybl90aHIuYwkyMDAzLzA0LzExIDE5OjI0OjM3CTEuNQorKysg c3lzL2tlcm4va2Vybl90aHIuYwkyMDAzLzA0LzE3IDA2OjM0OjU1CkBAIC01 MiwxMyArNTIsMTEgQEAKIHsKIAlzdHJ1Y3Qga3NlZ3JwICprZzsKIAlzdHJ1 Y3QgdGhyZWFkICp0ZDsKLQlzdHJ1Y3Qga3NlICprZTsKIAlzdHJ1Y3QgcHJv YyAqcDsKIAogCXRkID0gY3VydGhyZWFkOwogCXAgPSB0ZC0+dGRfcHJvYzsK IAlrZyA9IHRkLT50ZF9rc2VncnA7Ci0Ja2UgPSB0ZC0+dGRfa3NlOwogCiAJ bXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOwogCVBST0NfTE9D S19BU1NFUlQocCwgTUFfT1dORUQpOwpAQCAtODAsMTggKzc4LDkgQEAKIAog CS8qIENsZWFuIHVwIGNwdSByZXNvdXJjZXMuICovCiAJY3B1X3RocmVhZF9l eGl0KHRkKTsKKwl0aHJlYWRfdW5saW5rKHRkKTsKKwlzY2hlZF90aHJfZXhp dCh0ZCk7CiAKLQkvKiBYWFggbWFrZSB0aHJlYWRfdW5saW5rKCkgKi8KLQlU QUlMUV9SRU1PVkUoJnAtPnBfdGhyZWFkcywgdGQsIHRkX3BsaXN0KTsKLQlw LT5wX251bXRocmVhZHMtLTsKLQlUQUlMUV9SRU1PVkUoJmtnLT5rZ190aHJl YWRzLCB0ZCwgdGRfa2dsaXN0KTsKLQlrZy0+a2dfbnVtdGhyZWFkcy0tOwot Ci0Ja2UtPmtlX3N0YXRlID0gS0VTX1VOUVVFVUVEOwotCWtlLT5rZV90aHJl YWQgPSBOVUxMOwotCWtzZV91bmxpbmsoa2UpOwotCXNjaGVkX2V4aXRfa3Nl KFRBSUxRX05FWFQoa2UsIGtlX2tnbGlzdCksIGtlKTsKLQogCS8qCiAJICog SWYgd2Ugd2VyZSBzdG9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIGFsbCB0aHJl YWRzIHRvIGV4aXQgYW5kIHRoaXMKIAkgKiBpcyB0aGUgbGFzdCB0aHJlYWQg d2FrZXVwIHRoZSBleGl0aW5nIHRocmVhZC4KQEAgLTEwMSw3ICs5MCw2IEBA CiAJCQl0aHJlYWRfdW5zdXNwZW5kX29uZShwLT5wX3NpbmdsZXRocmVhZCk7 CiAKIAlQUk9DX1VOTE9DSyhwKTsKLQl0ZC0+dGRfa3NlID0gTlVMTDsKIAl0 ZC0+dGRfc3RhdGUgPSBURFNfSU5BQ1RJVkU7CiAjaWYgMAogCXRkLT50ZF9w cm9jID0gTlVMTDsKQEAgLTEyNyw3ICsxMTUsNiBAQAogdGhyX2NyZWF0ZShz dHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRocl9jcmVhdGVfYXJncyAqdWFw KQogICAgIC8qIHVjb250ZXh0X3QgKmN0eCwgdGhyX2lkX3QgKmlkLCBpbnQg ZmxhZ3MgKi8KIHsKLQlzdHJ1Y3Qga3NlICprZTA7CiAJc3RydWN0IHRocmVh ZCAqdGQwOwogCXVjb250ZXh0X3QgY3R4OwogCWludCBlcnJvcjsKQEAgLTE1 NywzMiArMTQ0LDI3IEBACiAJYmNvcHkodGQtPnRkX2ZyYW1lLCB0ZDAtPnRk X2ZyYW1lLCBzaXplb2Yoc3RydWN0IHRyYXBmcmFtZSkpOwogCXRkMC0+dGRf dWNyZWQgPSBjcmhvbGQodGQtPnRkX3VjcmVkKTsKIAotCS8qIEluaXRpYWxp emUgb3VyIGtzZSBzdHJ1Y3R1cmUuICovCi0Ja2UwID0ga3NlX2FsbG9jKCk7 Ci0JYnplcm8oJmtlMC0+a2Vfc3RhcnR6ZXJvLAotCSAgICBSQU5HRU9GKHN0 cnVjdCBrc2UsIGtlX3N0YXJ0emVybywga2VfZW5kemVybykpOwogCiAJLyog U2V0IHVwIG91ciBtYWNoaW5lIGNvbnRleHQuICovCiAJY3B1X3NldF91cGNh bGwodGQwLCB0ZC0+dGRfcGNiKTsKIAllcnJvciA9IHNldF9tY29udGV4dCh0 ZDAsICZjdHgudWNfbWNvbnRleHQpOwogCWlmIChlcnJvciAhPSAwKSB7Ci0J CWtzZV9mcmVlKGtlMCk7CiAJCXRocmVhZF9mcmVlKHRkMCk7CiAJCWdvdG8g b3V0OwogCX0gCiAKLQkvKiBMaW5rIHRoZSB0aHJlYWQgYW5kIGtzZSBpbnRv IHRoZSBrc2VncnAgYW5kIG1ha2UgaXQgcnVubmFibGUuICovCiAJbXR4X2xv Y2tfc3Bpbigmc2NoZWRfbG9jayk7CiAKIAl0aHJlYWRfbGluayh0ZDAsIHRk LT50ZF9rc2VncnApOwotCWtzZV9saW5rKGtlMCwgdGQtPnRkX2tzZWdycCk7 Ci0KLQkvKiBCaW5kIHRoaXMgdGhyZWFkIGFuZCBrc2UgdG9nZXRoZXIuICov Ci0JdGQwLT50ZF9rc2UgPSBrZTA7Ci0Ja2UwLT5rZV90aHJlYWQgPSB0ZDA7 CiAKLQlzY2hlZF9mb3JrX2tzZSh0ZC0+dGRfa3NlLCBrZTApOwotCXNjaGVk X2ZvcmtfdGhyZWFkKHRkLCB0ZDApOworCS8qIERvIHdoYXRldmVyIGlzIG5l ZWRlZCBmb3IgdGhlIHNjaGVkdWxlciAqLworCWVycm9yID0gc2NoZWRfdGhy ZWFkX2ZvcmsodGQsIHRkMCk7CisJaWYgKGVycm9yICE9IDApIHsKKwkJdGhy ZWFkX3VubGluayh0ZCk7CisJCW10eF91bmxvY2tfc3Bpbigmc2NoZWRfbG9j ayk7CisJCXRocmVhZF9mcmVlKHRkMCk7CisJCWdvdG8gb3V0OworCX0KIAog CVREX1NFVF9DQU5fUlVOKHRkMCk7CiAJaWYgKCh1YXAtPmZsYWdzICYgVEhS X1NVU1BFTkRFRCkgPT0gMCkKSW5kZXg6IHN5cy9rZXJuL2tlcm5fdGhyZWFk LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zL3By b2plY3RzL21pcnJvcmVkL2ZyZWVic2Qvc3JjL3N5cy9rZXJuL2tlcm5fdGhy ZWFkLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE0CmRpZmYgLXUgLXIx LjExNCBrZXJuX3RocmVhZC5jCi0tLSBzeXMva2Vybi9rZXJuX3RocmVhZC5j CTIwMDMvMDQvMTAgMTc6MzU6NDQJMS4xMTQKKysrIHN5cy9rZXJuL2tlcm5f dGhyZWFkLmMJMjAwMy8wNC8xNyAwNjozNDo1NQpAQCAtMzQsNiArMzQsNyBA QAogI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAjaW5jbHVkZSA8c3lzL21hbGxv Yy5oPgogI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9r c2V2YXIuaD4KICNpbmNsdWRlIDxzeXMvcHJvYy5oPgogI2luY2x1ZGUgPHN5 cy9zbXAuaD4KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CkBAIC02MSw3ICs2 Miw2IEBACiAgKiBLU0VHUlAgcmVsYXRlZCBzdG9yYWdlLgogICovCiBzdGF0 aWMgdW1hX3pvbmVfdCBrc2VncnBfem9uZTsKLXN0YXRpYyB1bWFfem9uZV90 IGtzZV96b25lOwogc3RhdGljIHVtYV96b25lX3QgdGhyZWFkX3pvbmU7CiBz dGF0aWMgdW1hX3pvbmVfdCB1cGNhbGxfem9uZTsKIApAQCAtMjAzLDE4ICsy MDMsNiBAQAogfQogCiAvKgotICogSW5pdGlhbGl6ZSB0eXBlLXN0YWJsZSBw YXJ0cyBvZiBhIGtzZSAod2hlbiBuZXdseSBjcmVhdGVkKS4KLSAqLwotc3Rh dGljIHZvaWQKLWtzZV9pbml0KHZvaWQgKm1lbSwgaW50IHNpemUpCi17Ci0J c3RydWN0IGtzZQkqa2U7Ci0KLQlrZSA9IChzdHJ1Y3Qga3NlICopbWVtOwot CWtlLT5rZV9zY2hlZCA9IChzdHJ1Y3Qga2Vfc2NoZWQgKikma2VbMV07Ci19 Ci0KLS8qCiAgKiBJbml0aWFsaXplIHR5cGUtc3RhYmxlIHBhcnRzIG9mIGEg a3NlZ3JwICh3aGVuIG5ld2x5IGNyZWF0ZWQpLgogICovCiBzdGF0aWMgdm9p ZApAQCAtMjI2LDQ0ICsyMTQsNiBAQAogCWtnLT5rZ19zY2hlZCA9IChzdHJ1 Y3Qga2dfc2NoZWQgKikma2dbMV07CiB9CiAKLS8qIAotICogS1NFIGlzIGxp bmtlZCBpbnRvIGtzZSBncm91cC4KLSAqLwotdm9pZAota3NlX2xpbmsoc3Ry dWN0IGtzZSAqa2UsIHN0cnVjdCBrc2VncnAgKmtnKQotewotCXN0cnVjdCBw cm9jICpwID0ga2ctPmtnX3Byb2M7Ci0KLQlUQUlMUV9JTlNFUlRfSEVBRCgm a2ctPmtnX2tzZXEsIGtlLCBrZV9rZ2xpc3QpOwotCWtnLT5rZ19rc2VzKys7 Ci0Ja2UtPmtlX3N0YXRlCT0gS0VTX1VOUVVFVUVEOwotCWtlLT5rZV9wcm9j CT0gcDsKLQlrZS0+a2Vfa3NlZ3JwCT0ga2c7Ci0Ja2UtPmtlX3RocmVhZAk9 IE5VTEw7Ci0Ja2UtPmtlX29uY3B1CT0gTk9DUFU7Ci0Ja2UtPmtlX2ZsYWdz CT0gMDsKLX0KLQotdm9pZAota3NlX3VubGluayhzdHJ1Y3Qga3NlICprZSkK LXsKLQlzdHJ1Y3Qga3NlZ3JwICprZzsKLQotCW10eF9hc3NlcnQoJnNjaGVk X2xvY2ssIE1BX09XTkVEKTsKLQlrZyA9IGtlLT5rZV9rc2VncnA7Ci0JVEFJ TFFfUkVNT1ZFKCZrZy0+a2dfa3NlcSwga2UsIGtlX2tnbGlzdCk7Ci0JaWYg KGtlLT5rZV9zdGF0ZSA9PSBLRVNfSURMRSkgewotCQlUQUlMUV9SRU1PVkUo JmtnLT5rZ19pcSwga2UsIGtlX2tncmxpc3QpOwotCQlrZy0+a2dfaWRsZV9r c2VzLS07Ci0JfQotCWlmICgtLWtnLT5rZ19rc2VzID09IDApCi0JCWtzZWdy cF91bmxpbmsoa2cpOwotCS8qCi0JICogQWdncmVnYXRlIHN0YXRzIGZyb20g dGhlIEtTRQotCSAqLwotCWtzZV9zdGFzaChrZSk7Ci19Ci0KIHZvaWQKIGtz ZWdycF9saW5rKHN0cnVjdCBrc2VncnAgKmtnLCBzdHJ1Y3QgcHJvYyAqcCkK IHsKQEAgLTM2NCw4ICszMTQsNyBAQAogICogbGluayB1cCBhbGwgdGhlIHN0 cnVjdHVyZXMgYW5kIGl0cyBpbml0aWFsIHRocmVhZHMgZXRjLgogICovCiB2 b2lkCi1wcm9jX2xpbmt1cChzdHJ1Y3QgcHJvYyAqcCwgc3RydWN0IGtzZWdy cCAqa2csCi0JICAgIHN0cnVjdCBrc2UgKmtlLCBzdHJ1Y3QgdGhyZWFkICp0 ZCkKK3Byb2NfbGlua3VwKHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3Qga3NlZ3Jw ICprZywgc3RydWN0IHRocmVhZCAqdGQpCiB7CiAKIAlUQUlMUV9JTklUKCZw LT5wX2tzZWdycHMpOwkgICAgIC8qIGFsbCBrc2VncnBzIGluIHByb2MgKi8K QEAgLTM3NSw3ICszMjQsNiBAQAogCXAtPnBfbnVtdGhyZWFkcyA9IDA7CiAK IAlrc2VncnBfbGluayhrZywgcCk7Ci0Ja3NlX2xpbmsoa2UsIGtnKTsKIAl0 aHJlYWRfbGluayh0ZCwga2cpOwogfQogCkBAIC04MDUsOSArNzUzLDYgQEAK IAlrc2VncnBfem9uZSA9IHVtYV96Y3JlYXRlKCJLU0VHUlAiLCBzY2hlZF9z aXplb2Zfa3NlZ3JwKCksCiAJICAgIE5VTEwsIE5VTEwsIGtzZWdycF9pbml0 LCBOVUxMLAogCSAgICBVTUFfQUxJR05fQ0FDSEUsIDApOwotCWtzZV96b25l ID0gdW1hX3pjcmVhdGUoIktTRSIsIHNjaGVkX3NpemVvZl9rc2UoKSwKLQkg ICAgTlVMTCwgTlVMTCwga3NlX2luaXQsIE5VTEwsCi0JICAgIFVNQV9BTElH Tl9DQUNIRSwgMCk7CiAJdXBjYWxsX3pvbmUgPSB1bWFfemNyZWF0ZSgiVVBD QUxMIiwgc2l6ZW9mKHN0cnVjdCBrc2VfdXBjYWxsKSwKIAkgICAgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgVU1BX0FMSUdOX0NBQ0hFLCAwKTsKIH0KQEAg LTkyNSwxNSArODcwLDYgQEAKIH0KIAogLyoKLSAqIEFsbG9jYXRlIGEga3Nl LgotICovCi1zdHJ1Y3Qga3NlICoKLWtzZV9hbGxvYyh2b2lkKQotewotCXJl dHVybiAodW1hX3phbGxvYyhrc2Vfem9uZSwgTV9XQUlUT0spKTsKLX0KLQot LyoKICAqIEFsbG9jYXRlIGEgdGhyZWFkLgogICovCiBzdHJ1Y3QgdGhyZWFk ICoKQEAgLTk1MywxNSArODg5LDYgQEAKIH0KIAogLyoKLSAqIERlYWxsb2Nh dGUgYSBrc2UuCi0gKi8KLXZvaWQKLWtzZV9mcmVlKHN0cnVjdCBrc2UgKnRk KQotewotCXVtYV96ZnJlZShrc2Vfem9uZSwgdGQpOwotfQotCi0vKgogICog RGVhbGxvY2F0ZSBhIHRocmVhZC4KICAqLwogdm9pZApAQCAtMTIwMywxMCAr MTEzMCw3IEBACiAJCSAqIHdvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gaGVy ZSAoSSB0aGluaykgc28gaXQgd291bGQKIAkJICogYmUgYSB3YXN0ZS4gKG1p Z2h0IGJlIHVzZWZ1bCBmb3IgcHJvY19maW5pKCkgYXMgd2VsbC4pCiAgCQkg Ki8KLQkJVEFJTFFfUkVNT1ZFKCZwLT5wX3RocmVhZHMsIHRkLCB0ZF9wbGlz dCk7Ci0JCXAtPnBfbnVtdGhyZWFkcy0tOwotCQlUQUlMUV9SRU1PVkUoJmtn LT5rZ190aHJlYWRzLCB0ZCwgdGRfa2dsaXN0KTsKLQkJa2ctPmtnX251bXRo cmVhZHMtLTsKKwkJdGhyZWFkX3VubGluayh0ZCk7CiAJCWlmIChwLT5wX21h eHRocndhaXRzKQogCQkJd2FrZXVwKCZwLT5wX251bXRocmVhZHMpOwogCQkv KgpAQCAtMTIzMSwxNSArMTE1NSwxMSBAQAogCQlpZiAodGQtPnRkX3VwY2Fs bCkKIAkJCXVwY2FsbF9yZW1vdmUodGQpOwogCQotCQlrZS0+a2Vfc3RhdGUg PSBLRVNfVU5RVUVVRUQ7Ci0JCWtlLT5rZV90aHJlYWQgPSBOVUxMOwogCQkv KiAKLQkJICogRGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgS1NFIGF0dGFj aGVkIHRvIHRoaXMgdGhyZWFkLgorCQkgKiBMZXQgdGhlIHNjaGVkdWxlciBk byBhbnl0aGluZyBpdCBuZWVkcyB0byBjbGVhbiB1cC4KIAkJICovCi0JCWlm IChrZS0+a2VfZmxhZ3MgJiBLRUZfRVhJVCkKLQkJCWtzZV91bmxpbmsoa2Up OwotCQllbHNlCi0JCQlrc2VfcmVhc3NpZ24oa2UpOworCQlzY2hlZF90ZGV4 aXQodGQpOworCiAJCVBST0NfVU5MT0NLKHApOwogCQl0ZC0+dGRfa3NlCT0g TlVMTDsKIAkJdGQtPnRkX3N0YXRlCT0gVERTX0lOQUNUSVZFOwpAQCAtMTI0 Nyw3ICsxMTY3LDYgQEAKIAkJdGQtPnRkX3Byb2MJPSBOVUxMOwogI2VuZGlm CiAJCXRkLT50ZF9rc2VncnAJPSBOVUxMOwotCQl0ZC0+dGRfbGFzdF9rc2UJ PSBOVUxMOwogCQlQQ1BVX1NFVChkZWFkdGhyZWFkLCB0ZCk7CiAJfSBlbHNl IHsKIAkJUFJPQ19VTkxPQ0socCk7CkBAIC0xMzExLDYgKzEyMzAsMTggQEAK IAlUQUlMUV9JTlNFUlRfSEVBRCgma2ctPmtnX3RocmVhZHMsIHRkLCB0ZF9r Z2xpc3QpOwogCXAtPnBfbnVtdGhyZWFkcysrOwogCWtnLT5rZ19udW10aHJl YWRzKys7Cit9CisKK3ZvaWQKK3RocmVhZF91bmxpbmsoc3RydWN0IHRocmVh ZCAqdGQpCit7CisJCXN0cnVjdCBwcm9jICpwID0gdGQtPnRkX3Byb2M7CisJ CXN0cnVjdCBrc2VncnAgKmtnID0gdGQtPnRkX2tzZWdycDsKKworCQlUQUlM UV9SRU1PVkUoJnAtPnBfdGhyZWFkcywgdGQsIHRkX3BsaXN0KTsKKwkJcC0+ cF9udW10aHJlYWRzLS07CisJCVRBSUxRX1JFTU9WRSgma2ctPmtnX3RocmVh ZHMsIHRkLCB0ZF9rZ2xpc3QpOworCQlrZy0+a2dfbnVtdGhyZWFkcy0tOwog fQogCiAvKgpJbmRleDogc3lzL2tlcm4vc2NoZWRfNGJzZC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvcy9wcm9qZWN0cy9taXJy b3JlZC9mcmVlYnNkL3NyYy9zeXMva2Vybi9zY2hlZF80YnNkLmMsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAtcjEuMTUgc2NoZWRfNGJz ZC5jCi0tLSBzeXMva2Vybi9zY2hlZF80YnNkLmMJMjAwMy8wNC8xMSAwMzoz OTo0OAkxLjE1CisrKyBzeXMva2Vybi9zY2hlZF80YnNkLmMJMjAwMy8wNC8x NyAwNjozNDo1NQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPHN5cy9r dHIuaD4KICNpbmNsdWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9t dXRleC5oPgorI2luY2x1ZGUgPHN5cy9rc2V2YXIuaD4KICNpbmNsdWRlIDxz eXMvcHJvYy5oPgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZXZhci5oPgogI2lu Y2x1ZGUgPHN5cy9zY2hlZC5oPgpAQCAtNDM4LDEzICs0MzksMTMgQEAKICAq IHJ1biBtdWNoIHJlY2VudGx5LCBhbmQgdG8gcm91bmQtcm9iaW4gYW1vbmcg b3RoZXIgcHJvY2Vzc2VzLgogICovCiB2b2lkCi1zY2hlZF9jbG9jayhzdHJ1 Y3Qga3NlICprZSkKK3NjaGVkX2Nsb2NrKHN0cnVjdCB0aHJlYWQgKnRkKQog ewogCXN0cnVjdCBrc2VncnAgKmtnOwotCXN0cnVjdCB0aHJlYWQgKnRkOwor CXN0cnVjdCBrc2UgKmtlOwogCi0Ja2cgPSBrZS0+a2Vfa3NlZ3JwOwotCXRk ID0ga2UtPmtlX3RocmVhZDsKKwlrZyA9IHRkLT50ZF9rc2VncnA7CisJa2Ug PSB0ZC0+dGRfa3NlOwogCiAJa2UtPmtlX3NjaGVkLT5za2VfY3B0aWNrcysr OwogCWtnLT5rZ19lc3RjcHUgPSBFU1RDUFVMSU0oa2ctPmtnX2VzdGNwdSAr IDEpOwpAQCAtNDg3LDMxICs0ODgsNiBAQAogfQogCiB2b2lkCi1zY2hlZF9m b3JrKHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3QgcHJvYyAqcDEpCi17Ci0Jc2No ZWRfZm9ya19rc2UoRklSU1RfS1NFX0lOX1BST0MocCksIEZJUlNUX0tTRV9J Tl9QUk9DKHAxKSk7Ci0Jc2NoZWRfZm9ya19rc2VncnAoRklSU1RfS1NFR1JQ X0lOX1BST0MocCksIEZJUlNUX0tTRUdSUF9JTl9QUk9DKHAxKSk7Ci0Jc2No ZWRfZm9ya190aHJlYWQoRklSU1RfVEhSRUFEX0lOX1BST0MocCksIEZJUlNU X1RIUkVBRF9JTl9QUk9DKHAxKSk7Ci19Ci0KLXZvaWQKLXNjaGVkX2Zvcmtf a3NlKHN0cnVjdCBrc2UgKmtlLCBzdHJ1Y3Qga3NlICpjaGlsZCkKLXsKLQlj aGlsZC0+a2Vfc2NoZWQtPnNrZV9jcHRpY2tzID0gMDsKLX0KLQotdm9pZAot c2NoZWRfZm9ya19rc2VncnAoc3RydWN0IGtzZWdycCAqa2csIHN0cnVjdCBr c2VncnAgKmNoaWxkKQotewotCWNoaWxkLT5rZ19lc3RjcHUgPSBrZy0+a2df ZXN0Y3B1OwotfQotCi12b2lkCi1zY2hlZF9mb3JrX3RocmVhZChzdHJ1Y3Qg dGhyZWFkICp0ZCwgc3RydWN0IHRocmVhZCAqY2hpbGQpCi17Ci19Ci0KLXZv aWQKIHNjaGVkX25pY2Uoc3RydWN0IGtzZWdycCAqa2csIGludCBuaWNlKQog ewogCWtnLT5rZ19uaWNlID0gbmljZTsKQEAgLTY5NSw3ICs2NzEsMTMgQEAK IH0KIAogZml4cHRfdAotc2NoZWRfcGN0Y3B1KHN0cnVjdCBrc2UgKmtlKQor c2NoZWRfcGN0Y3B1KHN0cnVjdCB0aHJlYWQgKnRkKQogewotCXJldHVybiAo a2UtPmtlX3BjdGNwdSk7CisJc3RydWN0IGtzZSAqa2U7CisKKwlrZSA9IHRk LT50ZF9rc2U7CisJaWYgKGtlKQorCQlyZXR1cm4gKGtlLT5rZV9wY3RjcHUp OworCWVsc2UKKwkJcmV0dXJuICgoZml4cHRfdCkwKTsKIH0KSW5kZXg6IHN5 cy9rZXJuL3NjaGVkX3VsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9yZXBvcy9wcm9qZWN0cy9taXJyb3JlZC9mcmVlYnNkL3NyYy9z eXMva2Vybi9zY2hlZF91bGUuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y OApkaWZmIC11IC1yMS4yOCBzY2hlZF91bGUuYwotLS0gc3lzL2tlcm4vc2No ZWRfdWxlLmMJMjAwMy8wNC8xMiAyMjozMzoyNAkxLjI4CisrKyBzeXMva2Vy bi9zY2hlZF91bGUuYwkyMDAzLzA0LzE3IDA2OjM0OjU1CkBAIC04NTUsMTEg Kzg1NSwxMSBAQAogfQogCiB2b2lkCi1zY2hlZF9jbG9jayhzdHJ1Y3Qga3Nl ICprZSkKK3NjaGVkX2Nsb2NrKHN0cnVjdCB0aHJlYWQgKnRkKQogewogCXN0 cnVjdCBrc2VxICprc2VxOwogCXN0cnVjdCBrc2VncnAgKmtnOwotCXN0cnVj dCB0aHJlYWQgKnRkOworCXN0cnVjdCBrc2UgKmtlCiAjaWYgMAogCXN0cnVj dCBrc2UgKm5rZTsKICNlbmRpZgpAQCAtODgwLDggKzg4MCw4IEBACiAJCQl0 aWNraW5jciA9IDE7CiAJfQogCi0JdGQgPSBrZS0+a2VfdGhyZWFkOwotCWtn ID0ga2UtPmtlX2tzZWdycDsKKwlrZSA9IHRkLT50ZF9rc2U7CisJa2cgPSB0 ZC0+dGRfa3NlZ3JwOwogCiAJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFf T1dORUQpOwogCUtBU1NFUlQoKHRkICE9IE5VTEwpLCAoInNjaGVkY2xvY2s6 IG51bGwgdGhyZWFkIHBvaW50ZXIiKSk7CkBAIC04OTQsNyArODk0LDcgQEAK IAlpZiAoa2UtPmtlX2Z0aWNrICsgU0NIRURfQ1BVX1RJQ0tTICsgaHogPCBr ZS0+a2VfbHRpY2spCiAJCXNjaGVkX3BjdGNwdV91cGRhdGUoa2UpOwogCi0J aWYgKHRkLT50ZF9rc2UtPmtlX2ZsYWdzICYgS0VGX0lETEVLU0UpCisJaWYg KHRkLT50ZF9mbGFncyAmIFREX0lETEVURCkKIAkJcmV0dXJuOwogCiAJQ1RS NChLVFJfVUxFLCAiVGljayBrc2UgJXAgKHNsaWNlOiAlZCwgc2xwdGltZTog JWQsIHJ1bnRpbWU6ICVkKSIsCkluZGV4OiBzeXMva2Vybi9zdWJyX3RyYXAu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3MvcHJv amVjdHMvbWlycm9yZWQvZnJlZWJzZC9zcmMvc3lzL2tlcm4vc3Vicl90cmFw LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUwCmRpZmYgLXUgLXIxLjI1 MCBzdWJyX3RyYXAuYwotLS0gc3lzL2tlcm4vc3Vicl90cmFwLmMJMjAwMy8w My8zMSAyMjo0OToxNgkxLjI1MAorKysgc3lzL2tlcm4vc3Vicl90cmFwLmMJ MjAwMy8wNC8xNyAwNjozNDo1NwpAQCAtMTM5LDcgKzEzOSw2IEBACiB7CiAJ c3RydWN0IHRocmVhZCAqdGQ7CiAJc3RydWN0IHByb2MgKnA7Ci0Jc3RydWN0 IGtzZSAqa2U7CiAJc3RydWN0IGtzZWdycCAqa2c7CiAJc3RydWN0IHJsaW1p dCAqcmxpbTsKIAl1X2ludCBwcnRpY2tzLCBzdGlja3M7CkBAIC0xNzAsNyAr MTY5LDYgQEAKIAkgKiBhc3QoKSB3aWxsIGJlIGNhbGxlZCBhZ2Fpbi4KIAkg Ki8KIAltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsKLQlrZSA9IHRkLT50 ZF9rc2U7CiAJc3RpY2tzID0gdGQtPnRkX3N0aWNrczsKIAlmbGFncyA9IHRk LT50ZF9mbGFnczsKIAlzZmxhZyA9IHAtPnBfc2ZsYWc7CkluZGV4OiBzeXMv c3lzL3Byb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv cmVwb3MvcHJvamVjdHMvbWlycm9yZWQvZnJlZWJzZC9zcmMvc3lzL3N5cy9w cm9jLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEzCmRpZmYgLXUgLXIx LjMxMyBwcm9jLmgKLS0tIHN5cy9zeXMvcHJvYy5oCTIwMDMvMDQvMTMgMjE6 Mjk6MTEJMS4zMTMKKysrIHN5cy9zeXMvcHJvYy5oCTIwMDMvMDQvMTcgMDY6 MzU6MDEKQEAgLTIwMCwyMCArMjAwLDYgQEAKIHN0cnVjdCB0aHJlYWQ7CiAK IC8qCi0gKiBUaGUgc2Vjb25kIHN0cnVjdHVyZSBpcyB0aGUgS2VybmVsIFNj aGVkdWxhYmxlIEVudGl0eS4gKEtTRSkKLSAqIEl0IHJlcHJlc2VudHMgdGhl IGFiaWxpdHkgdG8gdGFrZSBhIHNsb3QgaW4gdGhlIHNjaGVkdWxlciBxdWV1 ZS4KLSAqIEFzIGxvbmcgYXMgdGhpcyBpcyBzY2hlZHVsZWQsIGl0IGNvdWxk IGNvbnRpbnVlIHRvIHJ1biBhbnkgdGhyZWFkcyB0aGF0Ci0gKiBhcmUgYXNz aWduZWQgdG8gdGhlIEtTRUdSUCAoc2VlIGxhdGVyKSB1bnRpbCBlaXRoZXIg aXQgcnVucyBvdXQKLSAqIG9mIHJ1bm5hYmxlIHRocmVhZHMgb2YgaGlnaCBl bm91Z2ggcHJpb3JpdHksIG9yIENQVS4KLSAqIEl0IHJ1bnMgb24gb25lIENQ VSBhbmQgaXMgYXNzaWduZWQgYSBxdWFudHVtIG9mIHRpbWUuIFdoZW4gYSB0 aHJlYWQgaXMKLSAqIGJsb2NrZWQsIFRoZSBLU0UgY29udGludWVzIHRvIHJ1 biBhbmQgd2lsbCBzZWFyY2ggZm9yIGFub3RoZXIgdGhyZWFkCi0gKiBpbiBh IHJ1bm5hYmxlIHN0YXRlIGFtb25nc3QgdGhvc2UgaXQgaGFzLiBJdCBNYXkg ZGVjaWRlIHRvIHJldHVybiB0byB1c2VyCi0gKiBtb2RlIHdpdGggYSBuZXcg J2VtcHR5JyB0aHJlYWQgaWYgdGhlcmUgYXJlIG5vIHJ1bm5hYmxlIHRocmVh ZHMuCi0gKiBUaHJlYWRzIGFyZSB0ZW1wb3JhcmlseSBhc3NvY2lhdGVkIHdp dGggYSBLU0UgZm9yIHNjaGVkdWxpbmcgcmVhc29ucy4KLSAqLwotc3RydWN0 IGtzZTsKLQotLyoKICAqIFRoZSBLU0VHUlAgaXMgYWxsb2NhdGVkIHJlc291 cmNlcyBhY3Jvc3MgYSBudW1iZXIgb2YgQ1BVcy4KICAqIChJbmNsdWRpbmcg YSBudW1iZXIgb2YgQ1BVeFFVQU5UQS4gSXQgcGFyY2VscyB0aGVzZSBRVUFO VEEgdXAgYW1vbmcKICAqIGl0cyBLU0VzLCBlYWNoIG9mIHdoaWNoIHNob3Vs ZCBiZSBydW5uaW5nIGluIGEgZGlmZmVyZW50IENQVS4KQEAgLTIzMywyNSAr MjE5LDEzIEBACiAgKiBmb3JrZWQgcHJvY2VzcyBjbHVzdGVyIGJ5IHNwYXdu aW5nIHNldmVyYWwgS1NFR1JQcy4KICAqLwogc3RydWN0IHByb2M7Ci0KLS8q KioqKioqKioqKioqKioKLSAqIEluIHBpY3R1cmVzOgotIFdpdGggYSBzaW5n bGUgcnVuIHF1ZXVlIHVzZWQgYnkgYWxsIHByb2Nlc3NvcnM6Ci0KLSBSVU5R OiAtLS0+S1NFLS0tS1NFLS0uLi4gICAgICAgICAgICAgICBTTEVFUFE6W10t LS1USFJFQUQtLS1USFJFQUQtLS1USFJFQUQKLQkgICB8ICAgLyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBbXS0tLVRIUkVBRAotCSAgIEtTRUct LS1USFJFQUQtLVRIUkVBRC0tVEhSRUFEICAgICAgIFtdCi0JCQkJCSAgICAg ICBbXS0tLVRIUkVBRC0tLVRIUkVBRAotCi0gIChwcm9jZXNzb3JzIHJ1biBU SFJFQURzIGZyb20gdGhlIEtTRUcgdW50aWwgdGhleSBhcmUgZXhoYXVzdGVk IG9yCi0gIHRoZSBLU0VHIGV4aGF1c3RzIGl0cyBxdWFudHVtKQotCi1XaXRo IFBFUi1DUFUgcnVuIHF1ZXVlczoKLUtTRXMgb24gdGhlIHNlcGFyYXRlIHJ1 biBxdWV1ZXMgZGlyZWN0bHkKLVRoZXkgd291bGQgYmUgZ2l2ZW4gcHJpb3Jp dGllcyBjYWxjdWxhdGVkIGZyb20gdGhlIEtTRUcuCiAKLSAqCi0gKioqKioq KioqKioqKioqKiovCitzdHJ1Y3QgZHVtbXkxIAoreworfTsKKyNpZm5kZWYg X1NZU19LU0VWQVJfSF8KKyNkZWZpbmUgS1NFREVGIGR1bW15MQorI2VuZGlm CiAKIC8qCiAgKiBLZXJuZWwgcnVubmFibGUgY29udGV4dCAodGhyZWFkKS4K QEAgLTI3OSw4ICsyNTMsOCBAQAogI2RlZmluZQl0ZF9zdGFydHplcm8gdGRf ZmxhZ3MKIAlpbnQJCXRkX2ZsYWdzOwkvKiAoaikgVERGXyogZmxhZ3MuICov CiAJaW50CQl0ZF9pbmhpYml0b3JzOwkvKiAoaikgV2h5IGNhbiBub3QgcnVu ICovCi0Jc3RydWN0IGtzZQkqdGRfbGFzdF9rc2U7CS8qIChqKSBQcmV2aW91 cyB2YWx1ZSBvZiB0ZF9rc2UgKi8KLQlzdHJ1Y3Qga3NlCSp0ZF9rc2U7CS8q IChqKSBDdXJyZW50IEtTRSBpZiBydW5uaW5nLiAqLworCXN0cnVjdCBLU0VE RUYJKnRkX2xhc3Rfa3NlOwkvKiAoaikgUHJldmlvdXMgdmFsdWUgb2YgdGRf a3NlICovCisJc3RydWN0IEtTRURFRgkqdGRfa3NlOwkvKiAoaikgQ3VycmVu dCBLU0UgaWYgcnVubmluZy4gKi8KIAlpbnQJCXRkX2R1cGZkOwkvKiAoaykg UmV0IHZhbHVlIGZyb20gZmRvcGVuLiBYWFggKi8KIAl2b2lkCQkqdGRfd2No YW47CS8qIChqKSBTbGVlcCBhZGRyZXNzLiAqLwogCWNvbnN0IGNoYXIJKnRk X3dtZXNnOwkvKiAoaikgUmVhc29uIGZvciBzbGVlcC4gKi8KQEAgLTM0OSw2 ICszMjMsNyBAQAogI2RlZmluZQlUREZfQ0FOX1VOQklORAkweDAwMDAwNCAv KiBPbmx5IHRlbXBvcmFyaWx5IGJvdW5kLiAqLwogI2RlZmluZQlUREZfU0lO VFIJMHgwMDAwMDggLyogU2xlZXAgaXMgaW50ZXJydXB0aWJsZS4gKi8KICNk ZWZpbmUJVERGX1RJTUVPVVQJMHgwMDAwMTAgLyogVGltaW5nIG91dCBkdXJp bmcgc2xlZXAuICovCisjZGVmaW5lCVRERl9JRExFVEQJMHgwMDAwNDAgLyog VGhpcyBpcyBhbiBpZGxlIHRocmVhZCAqLwogI2RlZmluZQlUREZfU0VMRUNU CTB4MDAwMDQwIC8qIFNlbGVjdGluZzsgd2FrZXVwL3dhaXRpbmcgZGFuZ2Vy LiAqLwogI2RlZmluZQlUREZfQ1ZXQUlUUQkweDAwMDA4MCAvKiBUaHJlYWQg aXMgb24gYSBjdl93YWl0cSAobm90IHNscHEpLiAqLwogI2RlZmluZQlUREZf VVBDQUxMSU5HCTB4MDAwMTAwIC8qIFRoaXMgdGhyZWFkIGlzIGRvaW5nIGFu IHVwY2FsbC4gKi8KQEAgLTQxOCw0MyArMzkzLDYgQEAKIH0gd2hpbGUgKDAp CiAKIC8qCi0gKiBUaGUgc2NoZWR1bGFibGUgZW50aXR5IHRoYXQgY2FuIGJl IGdpdmVuIGEgY29udGV4dCB0byBydW4uCi0gKiBBIHByb2Nlc3MgbWF5IGhh dmUgc2V2ZXJhbCBvZiB0aGVzZS4gUHJvYmFibHkgb25lIHBlciBwcm9jZXNz b3IKLSAqIGJ1dCBwb3NpYmx5IGEgZmV3IG1vcmUuIEluIHRoaXMgdW5pdmVy c2UgdGhleSBhcmUgZ3JvdXBlZAotICogd2l0aCBhIEtTRUcgdGhhdCBjb250 YWlucyB0aGUgcHJpb3JpdHkgYW5kIG5pY2VuZXNzCi0gKiBmb3IgdGhlIGdy b3VwLgotICovCi1zdHJ1Y3Qga3NlIHsKLQlzdHJ1Y3QgcHJvYwkqa2VfcHJv YzsJLyogQXNzb2NpYXRlZCBwcm9jZXNzLiAqLwotCXN0cnVjdCBrc2VncnAJ KmtlX2tzZWdycDsJLyogQXNzb2NpYXRlZCBLU0VHLiAqLwotCVRBSUxRX0VO VFJZKGtzZSkga2Vfa2dsaXN0OwkvKiBRdWV1ZSBvZiBhbGwgS1NFcyBpbiBr ZV9rc2VncnAuICovCi0JVEFJTFFfRU5UUlkoa3NlKSBrZV9rZ3JsaXN0Owkv KiBRdWV1ZSBvZiBhbGwgS1NFcyBpbiB0aGlzIHN0YXRlLiAqLwotCVRBSUxR X0VOVFJZKGtzZSkga2VfcHJvY3E7CS8qIChqKSBSdW4gcXVldWUuICovCi0K LSNkZWZpbmUJa2Vfc3RhcnR6ZXJvIGtlX2ZsYWdzCi0JaW50CQlrZV9mbGFn czsJLyogKGopIEtFRl8qIGZsYWdzLiAqLwotCXN0cnVjdCB0aHJlYWQJKmtl X3RocmVhZDsJLyogQWN0aXZlIGFzc29jaWF0ZWQgdGhyZWFkLiAqLwotCWZp eHB0X3QJCWtlX3BjdGNwdTsgICAgIC8qIChqKSAlY3B1IGR1cmluZyBwX3N3 dGltZS4gKi8KLQl1X2NoYXIJCWtlX29uY3B1OwkvKiAoaikgV2hpY2ggY3B1 IHdlIGFyZSBvbi4gKi8KLQljaGFyCQlrZV9ycWluZGV4OwkvKiAoaikgUnVu IHF1ZXVlIGluZGV4LiAqLwotCWVudW0gewotCQlLRVNfVU5VU0VEID0gMHgw LAotCQlLRVNfSURMRSwKLQkJS0VTX09OUlVOUSwKLQkJS0VTX1VOUVVFVUVE LAkJLyogaW4gdHJhbnNpdCAqLwotCQlLRVNfVEhSRUFECQkvKiBzbGF2ZWQg dG8gdGhyZWFkIHN0YXRlICovCi0JfSBrZV9zdGF0ZTsJCQkvKiAoaikgUyog cHJvY2VzcyBzdGF0dXMuICovCi0jZGVmaW5lCWtlX2VuZHplcm8ga2VfZHVt bXkKLQl1X2NoYXIJCWtlX2R1bW15OwotCXN0cnVjdCBrZV9zY2hlZAkqa2Vf c2NoZWQ7CS8qIFNjaGVkdWxlciBzcGVjaWZpYyBkYXRhICovCi19OwotCi0v KiBmbGFncyBrZXB0IGluIGtlX2ZsYWdzICovCi0jZGVmaW5lCUtFRl9JRExF S1NFCTB4MDAwMDQJLyogQSAnUGVyIENQVSBpZGxlIHByb2Nlc3MnLi4gaGFz IG9uZSB0aHJlYWQgKi8KLSNkZWZpbmUJS0VGX0RJRFJVTgkweDAyMDAwCS8q IEtTRSBhY3R1YWxseSByYW4uICovCi0jZGVmaW5lCUtFRl9FWElUCTB4MDQw MDAJLyogS1NFIGlzIGJlaW5nIGtpbGxlZC4gKi8KLQotLyoKICAqIFRoZSB1 cGNhbGwgbWFuYWdlbWVudCBzdHJ1Y3R1cmUuCiAgKiBUaGUgdXBjYWxsIGlz IHVzZWQgd2hlbiByZXR1cm5pbmcgdG8gdXNlcmxhbmQuICBJZiBhIHRocmVh ZCBkb2VzIG5vdCBoYXZlCiAgKiBhbiB1cGNhbGwgb24gcmV0dXJuIHRvIHVz ZXJsYW5kIHRoZSB0aHJlYWQgZXhwb3J0cyBpdHMgY29udGV4dCBhbmQgZXhp dHMuCkBAIC00NzksOCArNDE3LDggQEAKIHN0cnVjdCBrc2VncnAgewogCXN0 cnVjdCBwcm9jCSprZ19wcm9jOwkvKiBQcm9jZXNzIHRoYXQgY29udGFpbnMg dGhpcyBLU0VHLiAqLwogCVRBSUxRX0VOVFJZKGtzZWdycCkga2dfa3NlZ3Jw OwkvKiBRdWV1ZSBvZiBLU0VHcyBpbiBrZ19wcm9jLiAqLwotCVRBSUxRX0hF QUQoLCBrc2UpIGtnX2tzZXE7CS8qIChrZV9rZ2xpc3QpIEFsbCBLU0VzLiAq LwotCVRBSUxRX0hFQUQoLCBrc2UpIGtnX2lxOwkvKiAoa2Vfa2dybGlzdCkg QWxsIGlkbGUgS1NFcy4gKi8KKwlUQUlMUV9IRUFEKCwgS1NFREVGKSBrZ19r c2VxOwkvKiAoa2Vfa2dsaXN0KSBBbGwgS1NFcy4gKi8KKwlUQUlMUV9IRUFE KCwgS1NFREVGKSBrZ19pcTsJLyogKGtlX2tncmxpc3QpIEFsbCBpZGxlIEtT RXMuICovCiAJVEFJTFFfSEVBRCgsIHRocmVhZCkga2dfdGhyZWFkczsvKiAo dGRfa2dsaXN0KSBBbGwgdGhyZWFkcy4gKi8KIAlUQUlMUV9IRUFEKCwgdGhy ZWFkKSBrZ19ydW5xOwkvKiAodGRfcnVucSkgd2FpdGluZyBSVU5OQUJMRSB0 aHJlYWRzICovCiAJVEFJTFFfSEVBRCgsIHRocmVhZCkga2dfc2xwcTsJLyog KHRkX3J1bnEpIE5PTlJVTk5BQkxFIHRocmVhZHMuICovCkBAIC01MjYsOSAr NDY0LDYgQEAKIAlzdHJ1Y3Qgdm1fb2JqZWN0ICpwX3VwYWdlc19vYmo7IC8q IChhKSBVcGFnZXMgb2JqZWN0LiAqLwogCXN0cnVjdCBwcm9jc2lnCSpwX3By b2NzaWc7CS8qIChjKSBTaWduYWwgYWN0aW9ucywgc3RhdGUgKENQVSkuICov CiAKLQkvKnN0cnVjdCBrc2VncnAJcF9rc2VncnA7Ci0Jc3RydWN0IGtzZQlw X2tzZTsgKi8KLQogCS8qCiAJICogVGhlIGZvbGxvd2luZyBkb24ndCBtYWtl IHRvbyBtdWNoIHNlbnNlLi4KIAkgKiBTZWUgdGhlIHRkXyBvciBrZV8gdmVy c2lvbnMgb2YgdGhlIHNhbWUgZmxhZ3MKQEAgLTgyOSw3ICs3NjQsNiBAQAog ZXh0ZXJuIHN0cnVjdCBwcm9jIHByb2MwOwkJLyogUHJvY2VzcyBzbG90IGZv ciBzd2FwcGVyLiAqLwogZXh0ZXJuIHN0cnVjdCB0aHJlYWQgdGhyZWFkMDsJ CS8qIFByaW1hcnkgdGhyZWFkIGluIHByb2MwICovCiBleHRlcm4gc3RydWN0 IGtzZWdycCBrc2VncnAwOwkJLyogUHJpbWFyeSBrc2VncnAgaW4gcHJvYzAg Ki8KLWV4dGVybiBzdHJ1Y3Qga3NlIGtzZTA7CQkJLyogUHJpbWFyeSBrc2Ug aW4gcHJvYzAgKi8KIGV4dGVybiBzdHJ1Y3Qgdm1zcGFjZSB2bXNwYWNlMDsJ CS8qIFZNIHNwYWNlIGZvciBwcm9jMC4gKi8KIGV4dGVybiBpbnQgaG9ndGlj a3M7CQkJLyogTGltaXQgb24ga2VybmVsIGNwdSBob2dzLiAqLwogZXh0ZXJu IGludCBucHJvY3MsIG1heHByb2M7CQkvKiBDdXJyZW50IGFuZCBtYXggbnVt YmVyIG9mIHByb2NzLiAqLwpAQCAtODgwLDggKzgxNCw3IEBACiB2b2lkCXBh cmdzX2hvbGQoc3RydWN0IHBhcmdzICpwYSk7CiB2b2lkCXByb2Npbml0KHZv aWQpOwogdm9pZAl0aHJlYWRpbml0KHZvaWQpOwotdm9pZAlwcm9jX2xpbmt1 cChzdHJ1Y3QgcHJvYyAqcCwgc3RydWN0IGtzZWdycCAqa2csCi0JICAgIHN0 cnVjdCBrc2UgKmtlLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCXByb2Nf bGlua3VwKHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3Qga3NlZ3JwICprZywgc3Ry dWN0IHRocmVhZCAqdGQpOwogdm9pZAlwcm9jX3JlcGFyZW50KHN0cnVjdCBw cm9jICpjaGlsZCwgc3RydWN0IHByb2MgKm5ld3BhcmVudCk7CiBpbnQJc2Vj dXJlbGV2ZWxfZ2Uoc3RydWN0IHVjcmVkICpjciwgaW50IGxldmVsKTsKIGlu dAlzZWN1cmVsZXZlbF9ndChzdHJ1Y3QgdWNyZWQgKmNyLCBpbnQgbGV2ZWwp OwpAQCAtOTEyLDE3ICs4NDUsMTEgQEAKIHN0cnVjdAlrc2VncnAgKmtzZWdy cF9hbGxvYyh2b2lkKTsKIHZvaWQJa3NlZ3JwX2ZyZWUoc3RydWN0IGtzZWdy cCAqa2cpOwogdm9pZAlrc2VncnBfc3Rhc2goc3RydWN0IGtzZWdycCAqa2cp Owotc3RydWN0CWtzZSAqa3NlX2FsbG9jKHZvaWQpOwotdm9pZAlrc2VfZnJl ZShzdHJ1Y3Qga3NlICprZSk7Ci12b2lkCWtzZV9zdGFzaChzdHJ1Y3Qga3Nl ICprZSk7CiB2b2lkCWNwdV9zZXRfdXBjYWxsKHN0cnVjdCB0aHJlYWQgKnRk LCB2b2lkICpwY2IpOwogdm9pZAljcHVfc2V0X3VwY2FsbF9rc2Uoc3RydWN0 IHRocmVhZCAqdGQsIHN0cnVjdCBrc2VfdXBjYWxsICprdSk7CiB2b2lkCWNw dV90aHJlYWRfY2xlYW4oc3RydWN0IHRocmVhZCAqKTsKIHZvaWQJY3B1X3Ro cmVhZF9leGl0KHN0cnVjdCB0aHJlYWQgKik7CiB2b2lkCWNwdV90aHJlYWRf c2V0dXAoc3RydWN0IHRocmVhZCAqdGQpOwotdm9pZAlrc2VfcmVhc3NpZ24o c3RydWN0IGtzZSAqa2UpOwotdm9pZAlrc2VfbGluayhzdHJ1Y3Qga3NlICpr ZSwgc3RydWN0IGtzZWdycCAqa2cpOwotdm9pZAlrc2VfdW5saW5rKHN0cnVj dCBrc2UgKmtlKTsKIHZvaWQJa3NlZ3JwX2xpbmsoc3RydWN0IGtzZWdycCAq a2csIHN0cnVjdCBwcm9jICpwKTsKIHZvaWQJa3NlZ3JwX3VubGluayhzdHJ1 Y3Qga3NlZ3JwICprZyk7CiB2b2lkCXRocmVhZF9zaWduYWxfYWRkKHN0cnVj dCB0aHJlYWQgKnRkLCBpbnQgc2lnKTsKQEAgLTk0Myw2ICs4NzAsNyBAQAog dm9pZAl0aHJlYWRfc3Rhc2goc3RydWN0IHRocmVhZCAqdGQpOwogaW50CXRo cmVhZF9zdXNwZW5kX2NoZWNrKGludCBob3cpOwogdm9pZAl0aHJlYWRfc3Vz cGVuZF9vbmUoc3RydWN0IHRocmVhZCAqdGQpOwordm9pZAl0aHJlYWRfdW5s aW5rKHN0cnVjdCB0aHJlYWQgKnRkKTsKIHZvaWQJdGhyZWFkX3Vuc3VzcGVu ZChzdHJ1Y3QgcHJvYyAqcCk7CiB2b2lkCXRocmVhZF91bnN1c3BlbmRfb25l KHN0cnVjdCB0aHJlYWQgKnRkKTsKIGludAl0aHJlYWRfdXNlcnJldChzdHJ1 Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRyYXBmcmFtZSAqZnJhbWUpOwpAQCAt OTU0LDcgKzg4Miw3IEBACiB2b2lkCXVwY2FsbF9saW5rKHN0cnVjdCBrc2Vf dXBjYWxsICprdSwgc3RydWN0IGtzZWdycCAqa2cpOwogdm9pZAl1cGNhbGxf dW5saW5rKHN0cnVjdCBrc2VfdXBjYWxsICprdSk7CiB2b2lkCXVwY2FsbF9y ZW1vdmUoc3RydWN0IHRocmVhZCAqdGQpOwotdm9pZAl1cGNhbGxfc3Rhc2go c3RydWN0IGtzZV91cGNhbGwgKmtlKTsKK3ZvaWQJdXBjYWxsX3N0YXNoKHN0 cnVjdCBrc2VfdXBjYWxsICprdSk7CiB2b2lkCXRocmVhZF9zYW5pdHlfY2hl Y2soc3RydWN0IHRocmVhZCAqdGQsIGNoYXIgKik7CiB2b2lkCXRocmVhZF9z dG9wcGVkKHN0cnVjdCBwcm9jICpwKTsKIHZvaWQJdGhyZWFkX3N3aXRjaG91 dChzdHJ1Y3QgdGhyZWFkICp0ZCk7CkluZGV4OiBzeXMvc3lzL3NjaGVkLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zL3Byb2pl Y3RzL21pcnJvcmVkL2ZyZWVic2Qvc3JjL3N5cy9zeXMvc2NoZWQuaCx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXIxLjQgc2NoZWQuaAot LS0gc3lzL3N5cy9zY2hlZC5oCTIwMDMvMDQvMTEgMDM6Mzk6MDYJMS40Cisr KyBzeXMvc3lzL3NjaGVkLmgJMjAwMy8wNC8xNyAwNjozNTowMQpAQCAtMzks NyArMzksNyBAQAogICogUHJvYyByZWxhdGVkIHNjaGVkdWxpbmcgaG9va3Mu CiAgKi8KIHZvaWQJc2NoZWRfZXhpdChzdHJ1Y3QgcHJvYyAqcCwgc3RydWN0 IHByb2MgKmNoaWxkKTsKLXZvaWQJc2NoZWRfZm9yayhzdHJ1Y3QgcHJvYyAq cCwgc3RydWN0IHByb2MgKmNoaWxkKTsKK3ZvaWQJc2NoZWRfZm9yayhzdHJ1 Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHByb2MgKmNoaWxkKTsKIAogLyoKICAq IEtTRSBHcm91cHMgY29udGFpbiBzY2hlZHVsaW5nIHByaW9yaXR5IGluZm9y bWF0aW9uLiAgVGhleSByZWNvcmQgdGhlCkBAIC02MywxMiArNjMsMTUgQEAK IHZvaWQJc2NoZWRfdXNlcnJldChzdHJ1Y3QgdGhyZWFkICp0ZCk7CiB2b2lk CXNjaGVkX3dha2V1cChzdHJ1Y3QgdGhyZWFkICp0ZCk7CiAKK2ludAlzY2hl ZF90aHJlYWRfZm9yayhzdHJ1Y3QgdGhyZWFkICp0ZDEsIHN0cnVjdCB0aHJl YWQgKnRkMik7CiAvKgogICogS1NFcyBhcmUgbW92ZWQgb24gYW5kIG9mZiBv ZiBydW4gcXVldWVzLgogICovCitzdHJ1Y3Qga3NlOworCiB2b2lkCXNjaGVk X2FkZChzdHJ1Y3Qga3NlICprZSk7CiBzdHJ1Y3Qga3NlICpzY2hlZF9jaG9v c2Uodm9pZCk7Ci12b2lkCXNjaGVkX2Nsb2NrKHN0cnVjdCBrc2UgKmtlKTsK K3ZvaWQJc2NoZWRfY2xvY2soc3RydWN0IHRocmVhZCAqdGQpOwogdm9pZAlz Y2hlZF9leGl0X2tzZShzdHJ1Y3Qga3NlICprZSwgc3RydWN0IGtzZSAqY2hp bGQpOwogdm9pZAlzY2hlZF9mb3JrX2tzZShzdHJ1Y3Qga3NlICprZSwgc3Ry dWN0IGtzZSAqY2hpbGQpOwogdm9pZAlzY2hlZF9yZW0oc3RydWN0IGtzZSAq a2UpOwpAQCAtNzYsNyArNzksNyBAQAogLyoKICAqIGFuZCB0aGV5IHVzZSB1 cCBjcHUgdGltZS4KICAqLwotZml4cHRfdAlzY2hlZF9wY3RjcHUoc3RydWN0 IGtzZSAqa2UpOworZml4cHRfdAlzY2hlZF9wY3RjcHUoc3RydWN0IHRocmVh ZCAqdGQpOwogCiAvKgogICogVGhlc2UgcHJvY2VkdXJlcyB0ZWxsIHRoZSBw cm9jZXNzIGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gY29kZSBob3cKQEAg LTkyLDQgKzk1LDEyIEBACiBleHRlcm4gc3RydWN0IHBfc2NoZWQgKnByb2Mw X3NjaGVkOwogZXh0ZXJuIHN0cnVjdCB0ZF9zY2hlZCAqdGhyZWFkMF9zY2hl ZDsKIAorCisvKiB0ZW1wIGhhY2tzICovCitpbnQJc2NoZWRfbmV3cHJvYyhz dHJ1Y3QgcHJvYyAqcCwgc3RydWN0IGtzZWdycCAqa2csIHN0cnVjdCB0aHJl YWQgKnRkKTsKK3ZvaWQJc2NoZWRfZGJfcHJpbnQoc3RydWN0IHRocmVhZCAq dGQpOwordm9pZAlzY2hlZGluaXQodm9pZCk7Cit2b2lkCXNjaGVkX3RkZXhp dChzdHJ1Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCXNjaGVkX3Rocl9leGl0KHN0 cnVjdCB0aHJlYWQgKnRkKTsKK3ZvaWQJc2NoZWRfZGVzdHJveXByb2Moc3Ry dWN0IHByb2MgKnAsIHN0cnVjdCBrc2VncnAgKmtnLCBzdHJ1Y3QgdGhyZWFk ICp0ZCk7CiAjZW5kaWYgLyogIV9TWVNfU0NIRURfSF8gKi8KAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3lzL2tlcm4v c2NoZWRfNGJzZF9rc2UuYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ADAxMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDA3Njc2ADA3NjQ3Mzc2 MTQzADAxNDUyNAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAKI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgoKI2luY2x1ZGUgPHN5 cy9zeXN0bS5oPgojaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgojaW5jbHVkZSA8 c3lzL2xvY2suaD4KI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KI2luY2x1ZGUg PHN5cy9tdXRleC5oPgojaW5jbHVkZSA8c3lzL2tzZXZhci5oPgojaW5jbHVk ZSA8c3lzL3Byb2MuaD4KI2luY2x1ZGUgPHN5cy9zbXAuaD4KI2luY2x1ZGUg PHN5cy9zeXNjdGwuaD4KI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPgojaW5j bHVkZSA8c3lzL2ZpbGVkZXNjLmg+CiNpbmNsdWRlIDxzeXMvc2NoZWQuaD4K I2luY2x1ZGUgPHN5cy9zaWduYWx2YXIuaD4KI2luY2x1ZGUgPHN5cy9zeC5o PgojaW5jbHVkZSA8c3lzL3R0eS5oPgojaW5jbHVkZSA8c3lzL3VzZXIuaD4K I2luY2x1ZGUgPHN5cy9qYWlsLmg+CiNpbmNsdWRlIDxzeXMva3NlLmg+CiNp bmNsdWRlIDxzeXMva3RyLmg+CiNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4K CiNpbmNsdWRlIDx2bS92bS5oPgojaW5jbHVkZSA8dm0vdm1fb2JqZWN0Lmg+ CiNpbmNsdWRlIDx2bS9wbWFwLmg+CiNpbmNsdWRlIDx2bS91bWEuaD4KI2lu Y2x1ZGUgPHZtL3ZtX21hcC5oPgoKCnN0cnVjdCAga3NlIGtzZTA7CnN0YXRp YyB1bWFfem9uZV90IGtzZV96b25lOwpzdGF0aWMgdm9pZCBrc2VfaW5pdCh2 b2lkICptZW0sIGludCBzaXplKTsKCnZvaWQKc2NoZWRpbml0KHZvaWQpCnsK CS8qCgkgKiBTZXQgdXAgdGhlIHNjaGVkdWxlciBzcGVjaWZpYyBwYXJ0cyBv ZiBwcm9jMC4KCSAqLwoJa3NlX2xpbmsoJmtzZTAsICZrc2VncnAwKTsKCWtz ZTAua2Vfc2NoZWQgPSBrc2UwX3NjaGVkOwoJa3NlZ3JwMC5rZ19zY2hlZCA9 IGtzZWdycDBfc2NoZWQ7Cglwcm9jMC5wX3NjaGVkID0gcHJvYzBfc2NoZWQ7 Cgl0aHJlYWQwLnRkX3NjaGVkID0gdGhyZWFkMF9zY2hlZDsKCWtzZTAua2Vf c3RhdGUgPSBLRVNfVEhSRUFEOwoJa3NlMC5rZV90aHJlYWQgPSAmdGhyZWFk MDsKCXRocmVhZDAudGRfa3NlID0gJmtzZTA7IC8qIHdlIGFyZSBydW5uaW5n ICovCgoKCWtzZV96b25lID0gdW1hX3pjcmVhdGUoIktTRSIsIHNjaGVkX3Np emVvZl9rc2UoKSwKCSAgICBOVUxMLCBOVUxMLCBrc2VfaW5pdCwgTlVMTCwg VU1BX0FMSUdOX0NBQ0hFLCAwKTsKfQoKLyoKICogSW5pdGlhbGl6ZSB0eXBl LXN0YWJsZSBwYXJ0cyBvZiBhIGtzZSAod2hlbiBuZXdseSBjcmVhdGVkKS4K ICovCnN0YXRpYyB2b2lkCmtzZV9pbml0KHZvaWQgKm1lbSwgaW50IHNpemUp CnsKCXN0cnVjdCBrc2UgICAgICAqa2U7CgoJa2UgPSAoc3RydWN0IGtzZSAq KW1lbTsKCWtlLT5rZV9zY2hlZCA9IChzdHJ1Y3Qga2Vfc2NoZWQgKikma2Vb MV07Cn0KCi8qCiAqIEtTRSBpcyBsaW5rZWQgaW50byBrc2UgZ3JvdXAuICAg CiAqLwp2b2lkCmtzZV9saW5rKHN0cnVjdCBrc2UgKmtlLCBzdHJ1Y3Qga3Nl Z3JwICprZykKewoJc3RydWN0IHByb2MgKnAgPSBrZy0+a2dfcHJvYzsKCQoJ VEFJTFFfSU5TRVJUX0hFQUQoJmtnLT5rZ19rc2VxLCBrZSwga2Vfa2dsaXN0 KTsKCWtnLT5rZ19rc2VzKys7CglrZS0+a2Vfc3RhdGUgICAgPSBLRVNfVU5R VUVVRUQ7CglrZS0+a2VfcHJvYyAgICAgPSBwOwoJa2UtPmtlX2tzZWdycCAg ID0ga2c7CglrZS0+a2VfdGhyZWFkICAgPSBOVUxMOwoJa2UtPmtlX29uY3B1 ICAgID0gTk9DUFU7CglrZS0+a2VfZmxhZ3MgICAgPSAwOwp9CgovKgogKiBB bGxvY2F0ZSBhIGtzZS4KICovCnN0cnVjdCBrc2UgKgprc2VfYWxsb2Modm9p ZCkKewoJcmV0dXJuICh1bWFfemFsbG9jKGtzZV96b25lLCBNX1dBSVRPSykp Owp9CgovKgogKiBEZWFsbG9jYXRlIGEga3NlLgogKi8Kdm9pZAprc2VfZnJl ZShzdHJ1Y3Qga3NlICp0ZCkKewoJdW1hX3pmcmVlKGtzZV96b25lLCB0ZCk7 Cn0KCmludApzY2hlZF9uZXdwcm9jKHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3Qg a3NlZ3JwICprZywgc3RydWN0IHRocmVhZCAqdGQpCnsKCXN0cnVjdCBrc2Ug KmtlOwoKCWtlID0ga3NlX2FsbG9jKCk7CglpZiAoa2UpIHsKCQlrc2VfbGlu ayhrZSwga2cpOwoJCXJldHVybiAoMCk7Cgl9CglyZXR1cm4gKEVOT01FTSk7 Cn0KCnZvaWQKc2NoZWRfZGVzdHJveXByb2Moc3RydWN0IHByb2MgKnAsIHN0 cnVjdCBrc2VncnAgKmtnLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKewoJc3RydWN0 IGtzZSAqa2U7CgoJa2UgPSB0ZC0+dGRfa3NlOwoJaWYgKGtlKQoJCWtzZV9m cmVlKGtlKTsKfQoKdm9pZAprc2VfdW5saW5rKHN0cnVjdCBrc2UgKmtlKQp7 CglzdHJ1Y3Qga3NlZ3JwICprZzsKCgltdHhfYXNzZXJ0KCZzY2hlZF9sb2Nr LCBNQV9PV05FRCk7CglrZyA9IGtlLT5rZV9rc2VncnA7CglUQUlMUV9SRU1P VkUoJmtnLT5rZ19rc2VxLCBrZSwga2Vfa2dsaXN0KTsKCWlmIChrZS0+a2Vf c3RhdGUgPT0gS0VTX0lETEUpIHsKCQlUQUlMUV9SRU1PVkUoJmtnLT5rZ19p cSwga2UsIGtlX2tncmxpc3QpOwoJCWtnLT5rZ19pZGxlX2tzZXMtLTsKCX0K CWlmICgtLWtnLT5rZ19rc2VzID09IDApCgkJa3NlZ3JwX3VubGluayhrZyk7 CgkvKgoJICogQWdncmVnYXRlIHN0YXRzIGZyb20gdGhlIEtTRQoJICovCglr c2Vfc3Rhc2goa2UpOwp9CgoKCiNkZWZpbmUgUkFOR0VPRih0eXBlLCBzdGFy dCwgZW5kKSAob2Zmc2V0b2YodHlwZSwgZW5kKSAtIG9mZnNldG9mKHR5cGUs IHN0YXJ0KSkKCi8qIG5ldyB2ZXJzaW9uIG9mIHNjaGVkLWZvcmsoKSAqLwp2 b2lkCnNjaGVkX2Zvcmsoc3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBwcm9j ICpwMikKewoJc3RydWN0IGtzZSAqa2UyOwoJc3RydWN0IGtzZWdycCAqa2cy OwoJc3RydWN0IHRocmVhZCAqdGQyOwoKICAgICAgICBrZTIgPSBGSVJTVF9L U0VfSU5fUFJPQyhwMik7CiAgICAgICAgdGQyID0gRklSU1RfVEhSRUFEX0lO X1BST0MocDIpOwogICAgICAgIGtnMiA9IEZJUlNUX0tTRUdSUF9JTl9QUk9D KHAyKTsKICAgICAgICBiemVybygma2UyLT5rZV9zdGFydHplcm8sCiAgICAg ICAgICAgICh1bnNpZ25lZCkgUkFOR0VPRihzdHJ1Y3Qga3NlLCBrZV9zdGFy dHplcm8sIGtlX2VuZHplcm8pKTsKICAgICAgICBrZTItPmtlX3N0YXRlID0g S0VTX1RIUkVBRDsKICAgICAgICBrZTItPmtlX3RocmVhZCA9IHRkMjsKCXRk Mi0+dGRfa3NlID0ga2UyOwogICAgICAgIC8qa2UyLT5rZV9zY2hlZC0+c2tl X2NwdGlja3MgPSAwOyAqLyAvKiBYWFggRklYISAqLwogICAgICAgIGtnMi0+ a2dfZXN0Y3B1ID0gdGQtPnRkX2tzZWdycC0+a2dfZXN0Y3B1Owp9CgppbnQK c2NoZWRfdGhyZWFkX2Zvcmsoc3RydWN0IHRocmVhZCAqdGQxLCBzdHJ1Y3Qg dGhyZWFkICp0ZDIpCnsKCXN0cnVjdCBrc2UgKmtlMjsKCS8qIEluaXRpYWxp emUgb3VyIGtzZSBzdHJ1Y3R1cmUuICovCglrZTIgPSBrc2VfYWxsb2MoKTsK CWlmIChrZTIgPT0gTlVMTCkKCQlyZXR1cm4gKEVOT01FTSk7CgliemVybygm a2UyLT5rZV9zdGFydHplcm8sCgkgICAgUkFOR0VPRihzdHJ1Y3Qga3NlLCBr ZV9zdGFydHplcm8sIGtlX2VuZHplcm8pKTsKCWtzZV9saW5rKGtlMiwgdGQy LT50ZF9rc2VncnApOwoJdGQyLT50ZF9rc2UgPSBrZTI7CiAgICAgICAga2Uy LT5rZV90aHJlYWQgPSB0ZDI7CglyZXR1cm4gKDApOwp9Cgp2b2lkCnNjaGVk X3RkZXhpdChzdHJ1Y3QgdGhyZWFkICp0ZCkKewoJc3RydWN0IGtzZSAqa2U7 CgoJa2UgPSB0ZC0+dGRfa3NlOwoJa2UtPmtlX3N0YXRlID0gS0VTX1VOUVVF VUVEOwoJa2UtPmtlX3RocmVhZCA9IE5VTEw7CglpZiAoa2UtPmtlX2ZsYWdz ICYgS0VGX0VYSVQpCgkJa3NlX3VubGluayhrZSk7CgllbHNlCgkJa3NlX3Jl YXNzaWduKGtlKTsKCXRkLT50ZF9rc2UJPSBOVUxMOwoJdGQtPnRkX2xhc3Rf a3NlCT0gTlVMTDsKfQoKdm9pZApzY2hlZF90aHJfZXhpdChzdHJ1Y3QgdGhy ZWFkICp0ZCkKewoJc3RydWN0IGtzZSAqa2U7CgoJa2UgPSB0ZC0+dGRfa3Nl OwoJa2UtPmtlX3N0YXRlID0gS0VTX1VOUVVFVUVEOwoJa2UtPmtlX3RocmVh ZCA9IE5VTEw7Cglrc2VfdW5saW5rKGtlKTsKCXNjaGVkX2V4aXRfa3NlKFRB SUxRX05FWFQoa2UsIGtlX2tnbGlzdCksIGtlKTsKfQoKAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAc3lzL3N5cy9rc2V2YXIuaAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAw MDAwMDExNzA1ADA3NjQ3MzY3MDc3ADAxMzAzMQAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3Rh ciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgogKiBDb3B5cmlnaHQgKEMp IDIwMDEgSnVsaWFuIEVsaXNjaGVyIDxqdWxpYW5AZnJlZWJzZC5vcmc+CiAq IGZvciB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgogKgogKiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAogKiAgICBub3RpY2UocyksIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXMKICogICAg dGhlIGZpcnN0IGxpbmVzIG9mIHRoaXMgZmlsZSB1bm1vZGlmaWVkIG90aGVy IHRoYW4gdGhlIHBvc3NpYmxlIAogKiAgICBhZGRpdGlvbiBvZiBvbmUgb3Ig bW9yZSBjb3B5cmlnaHQgbm90aWNlcy4KICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKICogICAgbm90aWNlKHMpLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIGBgQVMgSVMn JyBBTkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKICog V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQkUgTElB QkxFIEZPUiBBTlkKICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCiAqIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKSBIT1dFVkVSCiAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSAogKiBEQU1BR0UuCiAqCiAqICRGcmVlQlNEOiBzcmMv c3lzL3N5cy9rc2UuaCx2IDEuMTIgMjAwMy8wMy8xOSAwNTo0OTozNyBkYXZp ZHh1IEV4cCAkCiAqLwoKI2lmbmRlZiBfU1lTX0tTRVZBUl9IXwojZGVmaW5l IF9TWVNfS1NFVkFSX0hfCiNpZm5kZWYgX0tFUk5FTAojZXJyb3IgIk5vdCBm b3IgdXNlIG91dHNpZGUgdGhlIGtlcm5lbCIKI2Vsc2UKI2RlZmluZSBLU0VE RUYga3NlCi8qCiAqIFRoZSBzZWNvbmQgc3RydWN0dXJlIGlzIHRoZSBLZXJu ZWwgU2NoZWR1bGFibGUgRW50aXR5LiAoS1NFKQogKiBJdCByZXByZXNlbnRz IHRoZSBhYmlsaXR5IHRvIHRha2UgYSBzbG90IGluIHRoZSBzY2hlZHVsZXIg cXVldWUuCiAqIEFzIGxvbmcgYXMgdGhpcyBpcyBzY2hlZHVsZWQsIGl0IGNv dWxkIGNvbnRpbnVlIHRvIHJ1biBhbnkgdGhyZWFkcyB0aGF0CiAqIGFyZSBh c3NpZ25lZCB0byB0aGUgS1NFR1JQIChzZWUgbGF0ZXIpIHVudGlsIGVpdGhl ciBpdCBydW5zIG91dAogKiBvZiBydW5uYWJsZSB0aHJlYWRzIG9mIGhpZ2gg ZW5vdWdoIHByaW9yaXR5LCBvciBDUFUuCiAqIEl0IHJ1bnMgb24gb25lIENQ VSBhbmQgaXMgYXNzaWduZWQgYSBxdWFudHVtIG9mIHRpbWUuIFdoZW4gYSB0 aHJlYWQgaXMKICogYmxvY2tlZCwgVGhlIEtTRSBjb250aW51ZXMgdG8gcnVu IGFuZCB3aWxsIHNlYXJjaCBmb3IgYW5vdGhlciB0aHJlYWQKICogaW4gYSBy dW5uYWJsZSBzdGF0ZSBhbW9uZ3N0IHRob3NlIGl0IGhhcy4gSXQgTWF5IGRl Y2lkZSB0byByZXR1cm4gdG8gdXNlcgogKiBtb2RlIHdpdGggYSBuZXcgJ2Vt cHR5JyB0aHJlYWQgaWYgdGhlcmUgYXJlIG5vIHJ1bm5hYmxlIHRocmVhZHMu CiAqIFRocmVhZHMgYXJlIHRlbXBvcmFyaWx5IGFzc29jaWF0ZWQgd2l0aCBh IEtTRSBmb3Igc2NoZWR1bGluZyByZWFzb25zLgogKi8Kc3RydWN0IGtzZTsK Ci8qKioqKioqKioqKioqKioKICogSW4gcGljdHVyZXM6CiBXaXRoIGEgc2lu Z2xlIHJ1biBxdWV1ZSB1c2VkIGJ5IGFsbCBwcm9jZXNzb3JzOgoKIFJVTlE6 IC0tLT5LU0UtLS1LU0UtLS4uLiAgICAgICAgICAgICAgIFNMRUVQUTpbXS0t LVRIUkVBRC0tLVRIUkVBRC0tLVRIUkVBRAoJICAgfCAgIC8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgW10tLS1USFJFQUQKCSAgIEtTRUctLS1U SFJFQUQtLVRIUkVBRC0tVEhSRUFEICAgICAgIFtdCgkJCQkJICAgICAgIFtd LS0tVEhSRUFELS0tVEhSRUFECgogIChwcm9jZXNzb3JzIHJ1biBUSFJFQURz IGZyb20gdGhlIEtTRUcgdW50aWwgdGhleSBhcmUgZXhoYXVzdGVkIG9yCiAg dGhlIEtTRUcgZXhoYXVzdHMgaXRzIHF1YW50dW0pCgpXaXRoIFBFUi1DUFUg cnVuIHF1ZXVlczoKS1NFcyBvbiB0aGUgc2VwYXJhdGUgcnVuIHF1ZXVlcyBk aXJlY3RseQpUaGV5IHdvdWxkIGJlIGdpdmVuIHByaW9yaXRpZXMgY2FsY3Vs YXRlZCBmcm9tIHRoZSBLU0VHLgoKICoKICoqKioqKioqKioqKioqKioqLwoK LyoKICogVGhlIHNjaGVkdWxhYmxlIGVudGl0eSB0aGF0IGNhbiBiZSBnaXZl biBhIGNvbnRleHQgdG8gcnVuLgogKiBBIHByb2Nlc3MgbWF5IGhhdmUgc2V2 ZXJhbCBvZiB0aGVzZS4gUHJvYmFibHkgb25lIHBlciBwcm9jZXNzb3IKICog YnV0IHBvc2libHkgYSBmZXcgbW9yZS4gSW4gdGhpcyB1bml2ZXJzZSB0aGV5 IGFyZSBncm91cGVkCiAqIHdpdGggYSBLU0VHIHRoYXQgY29udGFpbnMgdGhl IHByaW9yaXR5IGFuZCBuaWNlbmVzcwogKiBmb3IgdGhlIGdyb3VwLgogKi8K c3RydWN0IGtzZSB7CglzdHJ1Y3QgcHJvYwkqa2VfcHJvYzsJLyogQXNzb2Np YXRlZCBwcm9jZXNzLiAqLwoJc3RydWN0IGtzZWdycAkqa2Vfa3NlZ3JwOwkv KiBBc3NvY2lhdGVkIEtTRUcuICovCglUQUlMUV9FTlRSWShrc2UpIGtlX2tn bGlzdDsJLyogUXVldWUgb2YgYWxsIEtTRXMgaW4ga2Vfa3NlZ3JwLiAqLwoJ VEFJTFFfRU5UUlkoa3NlKSBrZV9rZ3JsaXN0OwkvKiBRdWV1ZSBvZiBhbGwg S1NFcyBpbiB0aGlzIHN0YXRlLiAqLwoJVEFJTFFfRU5UUlkoa3NlKSBrZV9w cm9jcTsJLyogKGopIFJ1biBxdWV1ZS4gKi8KCiNkZWZpbmUJa2Vfc3RhcnR6 ZXJvIGtlX2ZsYWdzCglpbnQJCWtlX2ZsYWdzOwkvKiAoaikgS0VGXyogZmxh Z3MuICovCglzdHJ1Y3QgdGhyZWFkCSprZV90aHJlYWQ7CS8qIEFjdGl2ZSBh c3NvY2lhdGVkIHRocmVhZC4gKi8KCWZpeHB0X3QJCWtlX3BjdGNwdTsgICAg IC8qIChqKSAlY3B1IGR1cmluZyBwX3N3dGltZS4gKi8KCXVfY2hhcgkJa2Vf b25jcHU7CS8qIChqKSBXaGljaCBjcHUgd2UgYXJlIG9uLiAqLwoJY2hhcgkJ a2VfcnFpbmRleDsJLyogKGopIFJ1biBxdWV1ZSBpbmRleC4gKi8KCWVudW0g ewoJCUtFU19VTlVTRUQgPSAweDAsCgkJS0VTX0lETEUsCgkJS0VTX09OUlVO USwKCQlLRVNfVU5RVUVVRUQsCQkvKiBpbiB0cmFuc2l0ICovCgkJS0VTX1RI UkVBRAkJLyogc2xhdmVkIHRvIHRocmVhZCBzdGF0ZSAqLwoJfSBrZV9zdGF0 ZTsJCQkvKiAoaikgUyogcHJvY2VzcyBzdGF0dXMuICovCiNkZWZpbmUJa2Vf ZW5kemVybyBrZV9kdW1teQoJdV9jaGFyCQlrZV9kdW1teTsKCXN0cnVjdCBr ZV9zY2hlZAkqa2Vfc2NoZWQ7CS8qIFNjaGVkdWxlciBzcGVjaWZpYyBkYXRh ICovCn07CgovKiBmbGFncyBrZXB0IGluIGtlX2ZsYWdzICovCiNkZWZpbmUJ S0VGX0lETEVLU0UJMHgwMDAwNAkvKiBBICdQZXIgQ1BVIGlkbGUgcHJvY2Vz cycuLiBoYXMgb25lIHRocmVhZCAqLwojZGVmaW5lCUtFRl9ESURSVU4JMHgw MjAwMAkvKiBLU0UgYWN0dWFsbHkgcmFuLiAqLwojZGVmaW5lCUtFRl9FWElU CTB4MDQwMDAJLyogS1NFIGlzIGJlaW5nIGtpbGxlZC4gKi8KCiNkZWZpbmUJ Rk9SRUFDSF9LU0VfSU5fR1JPVVAoa2csIGtlKQkJCQkJXAoJVEFJTFFfRk9S RUFDSCgoa2UpLCAmKGtnKS0+a2dfa3NlcSwga2Vfa2dsaXN0KQoKLyogWFhY S1NFIHRoZSBsaW5lcyBiZWxvdyBzaG91bGQgcHJvYmFibHkgb25seSBiZSB1 c2VkIGluIDE6MSBjb2RlICovCiNkZWZpbmUJRklSU1RfS1NFX0lOX0tTRUdS UChrZykgVEFJTFFfRklSU1QoJmtnLT5rZ19rc2VxKQojZGVmaW5lCUZJUlNU X0tTRV9JTl9QUk9DKHApIEZJUlNUX0tTRV9JTl9LU0VHUlAoRklSU1RfS1NF R1JQX0lOX1BST0MocCkpCgpleHRlcm4gc3RydWN0IGtzZSBrc2UwOwkJCS8q IFByaW1hcnkga3NlIGluIHByb2MwICovCgovKiB2b2lkCXByb2NfbGlua3Vw KHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3Qga3NlZ3JwICprZywKCSAgICBzdHJ1 Y3Qga3NlICprZSwgc3RydWN0IHRocmVhZCAqdGQpOyAqLwoKLyogTmV3IGlu IEtTRS4gKi8Kc3RydWN0CWtzZSAqa3NlX2FsbG9jKHZvaWQpOwp2b2lkCWtz ZV9mcmVlKHN0cnVjdCBrc2UgKmtlKTsKdm9pZAlrc2Vfc3Rhc2goc3RydWN0 IGtzZSAqa2UpOwp2b2lkCWtzZV9yZWFzc2lnbihzdHJ1Y3Qga3NlICprZSk7 CnZvaWQJa3NlX2xpbmsoc3RydWN0IGtzZSAqa2UsIHN0cnVjdCBrc2VncnAg KmtnKTsKdm9pZAlrc2VfdW5saW5rKHN0cnVjdCBrc2UgKmtlKTsKCiNlbmRp ZgkvKiAhX0tFUk5FTCAqLwoKI2VuZGlmCS8qICFfU1lTX0tTRVZBUl9IXyAq LwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= --0-499056429-1050562550=:94222--