From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luck, Tony" Date: Thu, 15 May 2003 21:43:16 +0000 Subject: RE: [Linux-ia64] Re: [PATCH] head.S fix for unusual load addrs MIME-Version: 1 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C31B2A.FE430893" Message-Id: List-Id: References: In-Reply-To: To: linux-ia64@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C31B2A.FE430893 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable > It's a bit of "all of the above": >=20 > - The name isn't all that great, but since it _is_ doing something > rather strange, a strange names seems quite appropriate. The patch > should definitely add a brief (one-liner?) explanation of what > __imva() stands for and what it does. Also, I really dislike the > underscore silliness; let's just use ia64_imva() or some such, so > it's obvious that it is ia64-specific (there is no > namespace-pollution issue as there would be, say, in a user-level > library, so there is really no reason for using an underscore > prefix). >=20 > - the casting should be fixed >=20 > - instead of aspirins, it might be good to add the ASCII art you > posted recently in an appropriate place (either a header-file > or perhaps a Documentation/ia64 file); of course, the picture > you drew included text-replication, so we may want to hold off > with this until that part of the patch is in, too Ok. Here's a new patch (against a snapshot pulled from http://lia64.bkbits.net:8080/linux-ia64-2.5 at about 9:30 this morning). Builds and boots SMP on Tiger. The __tpa() and __imva() macros are gone (along with their accursed double underscore prefixes). Types are cleaned up somewhat, there may be a couple of questionable casts, but this looks to be as close to clean as I can make it. The pre-existing ia64_tpa() function takes a __u64 argument, and returns a __u64 value ... which matches nicely with all the uses in mca.c, = setup.c and smpboot.c which all use and return "unsigned long" (which is close enough to __u64 that the compiler doesn't complain). I've added a new function ia64_imva() which takes a "void *" argument = and returns a "void *" ... which matches with most of the uses, there are = some places that want an "unsigned long" return, so I still have some = typecasts. There's a two-line comment explaining what it does. No ascii art in this patch, it isn't quite at head-ache complexity yet. But I'll definitely put some pictures in when we get to = replication patches. -Tony ------_=_NextPart_001_01C31B2A.FE430893 Content-Type: application/octet-stream; name="reloc2569.diff" Content-Transfer-Encoding: base64 Content-Description: reloc2569.diff Content-Disposition: attachment; filename="reloc2569.diff" ZGlmZiAtcnUgbDI1NjktbW9zYmVyZ2VyL2FyY2gvaWE2NC9rZXJuZWwvZWZpX3N0dWIuUyBsMjU2 OS1hZWdsL2FyY2gvaWE2NC9rZXJuZWwvZWZpX3N0dWIuUwotLS0gbDI1NjktbW9zYmVyZ2VyL2Fy Y2gvaWE2NC9rZXJuZWwvZWZpX3N0dWIuUwlUaHUgTWF5IDE1IDEwOjEyOjA4IDIwMDMKKysrIGwy NTY5LWFlZ2wvYXJjaC9pYTY0L2tlcm5lbC9lZmlfc3R1Yi5TCVRodSBNYXkgMTUgMTE6NDU6MDIg MjAwMwpAQCAtNjIsNyArNjIsNyBAQAogCW1vdiBiNj1yMgogCTs7CiAJYW5kY20gcjE2PWxvYzMs cjE2CQkvLyBnZXQgcHNyIHdpdGggSVQsIERULCBhbmQgUlQgYml0cyBjbGVhcmVkCi0JYnIuY2Fs bC5zcHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hfbW9kZQorCWJyLmNhbGwuc3B0ay5tYW55IHJwPWlh NjRfc3dpdGNoX21vZGVfcGh5cwogLnJldDA6CW1vdiBvdXQ0PWluNQogCW1vdiBvdXQwPWluMQog CW1vdiBvdXQxPWluMgpAQCAtNzMsNyArNzMsNyBAQAogCWJyLmNhbGwuc3B0ay5tYW55IHJwPWI2 CQkvLyBjYWxsIHRoZSBFRkkgZnVuY3Rpb24KIC5yZXQxOgltb3YgYXIucnNjPTAJCQkvLyBwdXQg UlNFIGluIGVuZm9yY2VkIGxhenksIExFIG1vZGUKIAltb3YgcjE2PWxvYzMKLQlici5jYWxsLnNw dGsubWFueSBycD1pYTY0X3N3aXRjaF9tb2RlIC8vIHJldHVybiB0byB2aXJ0dWFsIG1vZGUKKwli ci5jYWxsLnNwdGsubWFueSBycD1pYTY0X3N3aXRjaF9tb2RlX3ZpcnQgLy8gcmV0dXJuIHRvIHZp cnR1YWwgbW9kZQogLnJldDI6CW1vdiBhci5yc2M9bG9jNAkJCS8vIHJlc3RvcmUgUlNFIGNvbmZp Z3VyYXRpb24KIAltb3YgYXIucGZzPWxvYzEKIAltb3YgcnA9bG9jMApkaWZmIC1ydSBsMjU2OS1t b3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGwyNTY5LWFlZ2wvYXJjaC9pYTY0L2tl cm5lbC9lbnRyeS5TCi0tLSBsMjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5T CVRodSBNYXkgMTUgMTA6MTI6MDggMjAwMworKysgbDI1NjktYWVnbC9hcmNoL2lhNjQva2VybmVs L2VudHJ5LlMJVGh1IE1heSAxNSAxMTo0NTowMiAyMDAzCkBAIC0xNzgsMTUgKzE3OCwxMiBAQAog CTs7CiAJc3Q4IFtyMjJdPXNwCQkJLy8gc2F2ZSBrZXJuZWwgc3RhY2sgcG9pbnRlciBvZiBvbGQg dGFzawogCXNoci51IHIyNj1yMjAsSUE2NF9HUkFOVUxFX1NISUZUCi0Jc2hyLnUgcjE3PXIyMCxL RVJORUxfVFJfUEFHRV9TSElGVAotCTs7Ci0JY21wLm5lIHA2LHA3PUtFUk5FTF9UUl9QQUdFX05V TSxyMTcKIAlhZGRzIHIyMT1JQTY0X1RBU0tfVEhSRUFEX0tTUF9PRkZTRVQsaW4wCiAJOzsKIAkv KgogCSAqIElmIHdlJ3ZlIGFscmVhZHkgbWFwcGVkIHRoaXMgdGFzaydzIHBhZ2UsIHdlIGNhbiBz a2lwIGRvaW5nIGl0IGFnYWluLgogCSAqLwotKHA2KQljbXAuZXEgcDcscDY9cjI2LHIyNworCWNt cC5lcSBwNyxwNj1yMjYscjI3CiAocDYpCWJyLmNvbmQuZHBudCAubWFwCiAJOzsKIC5kb25lOgpk aWZmIC1ydSBsMjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMgbDI1NjktYWVn bC9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwotLS0gbDI1NjktbW9zYmVyZ2VyL2FyY2gvaWE2NC9r ZXJuZWwvaGVhZC5TCVRodSBNYXkgMTUgMTA6MTI6MDkgMjAwMworKysgbDI1NjktYWVnbC9hcmNo L2lhNjQva2VybmVsL2hlYWQuUwlUaHUgTWF5IDE1IDExOjQ1OjAyIDIwMDMKQEAgLTYwLDIyICs2 MCw0MiBAQAogCW1vdiByND1yMAogCS5ib2R5CiAKLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIHJl Z2lvbiByZWdpc3RlciBmb3IgcmVnaW9uIDcgYW5kIGluc3RhbGwgYSB0cmFuc2xhdGlvbiByZWdp c3RlcgotCSAqIHRoYXQgbWFwcyB0aGUga2VybmVsJ3MgdGV4dCBhbmQgZGF0YToKLQkgKi8KIAly c20gcHNyLmkgfCBwc3IuaWMKLQltb3YgcjE2PSgoaWE2NF9yaWQoSUE2NF9SRUdJT05fSURfS0VS TkVMLCBQQUdFX09GRlNFVCkgPDwgOCkgfCAoSUE2NF9HUkFOVUxFX1NISUZUIDw8IDIpKQogCTs7 CiAJc3Jsei5pCisJOzsKKwkvKgorCSAqIEluaXRpYWxpemUga2VybmVsIHJlZ2lvbiByZWdpc3Rl cnM6CisJICoJcnJbNV06IFZIUFQgZW5hYmxlZCwgcGFnZSBzaXplID0gUEFHRV9TSElGVAorCSAq CXJyWzZdOiBWSFBUIGRpc2FibGVkLCBwYWdlIHNpemUgPSBJQTY0X0dSQU5VTEVfU0hJRlQKKwkg Kglycls1XTogVkhQVCBkaXNhYmxlZCwgcGFnZSBzaXplID0gSUE2NF9HUkFOVUxFX1NISUZUCisJ ICovCisJbW92IHIxNj0oKGlhNjRfcmlkKElBNjRfUkVHSU9OX0lEX0tFUk5FTCwgKDU8PDYxKSkg PDwgOCkgfCAoUEFHRV9TSElGVCA8PCAyKSB8IDEpCisJbW92bCByMTc9KDU8PDYxKQorCW1vdiBy MTg9KChpYTY0X3JpZChJQTY0X1JFR0lPTl9JRF9LRVJORUwsICg2PDw2MSkpIDw8IDgpIHwgKElB NjRfR1JBTlVMRV9TSElGVCA8PCAyKSkKKwltb3ZsIHIxOT0oNjw8NjEpCisJbW92IHIyMD0oKGlh NjRfcmlkKElBNjRfUkVHSU9OX0lEX0tFUk5FTCwgKDc8PDYxKSkgPDwgOCkgfCAoSUE2NF9HUkFO VUxFX1NISUZUIDw8IDIpKQorCW1vdmwgcjIxPSg3PDw2MSkKKwk7OworCW1vdiBycltyMTddPXIx NgorCW1vdiBycltyMTldPXIxOAorCW1vdiBycltyMjFdPXIyMAorCTs7CisJLyoKKwkgKiBOb3cg cGluIG1hcHBpbmdzIGludG8gdGhlIFRMQiBmb3Iga2VybmVsIHRleHQgYW5kIGRhdGEKKwkgKi8K IAltb3YgcjE4PUtFUk5FTF9UUl9QQUdFX1NISUZUPDwyCiAJbW92bCByMTc9S0VSTkVMX1NUQVJU CiAJOzsKLQltb3YgcnJbcjE3XT1yMTYKIAltb3YgY3IuaXRpcj1yMTgKIAltb3YgY3IuaWZhPXIx NwogCW1vdiByMTY9SUE2NF9UUl9LRVJORUwKLQltb3ZsIHIxOD0oKDEgPDwgS0VSTkVMX1RSX1BB R0VfU0hJRlQpIHwgUEFHRV9LRVJORUwpCisJbW92IHIzPWlwCisJbW92bCByMTg9UEFHRV9LRVJO RUwKKwk7OworCWRlcCByMj0wLHIzLDAsS0VSTkVMX1RSX1BBR0VfU0hJRlQKKwk7OworCW9yIHIx OD1yMixyMTgKIAk7OwogCXNybHouaQogCTs7CkBAIC0xMTMsMTYgKzEzMyw2IEBACiAJbW92IGFy LmZwc3I9cjIKIAk7OwogCi0jaWZkZWYgQ09ORklHX0lBNjRfRUFSTFlfUFJJTlRLCi0JbW92IHIz PSg2PDw4KSB8IChJQTY0X0dSQU5VTEVfU0hJRlQ8PDIpCi0JbW92bCByMj02PDw2MQotCTs7Ci0J bW92IHJyW3IyXT1yMwotCTs7Ci0Jc3Jsei5pCi0JOzsKLSNlbmRpZgotCiAjZGVmaW5lIGlzQVAJ cDIJLy8gYXJlIHdlIGFuIEFwcGxpY2F0aW9uIFByb2Nlc3Nvcj8KICNkZWZpbmUgaXNCUAlwMwkv LyBhcmUgd2UgdGhlIEJvb3RzdHJhcCBQcm9jZXNzb3I/CiAKQEAgLTE0MywxMiArMTUzLDM2IEBA CiAJbW92bCByMj1pbml0X3RocmVhZF91bmlvbgogCWNtcC5lcSBpc0JQLGlzQVA9cjAscjAKICNl bmRpZgotCW1vdiByMTY9S0VSTkVMX1RSX1BBR0VfTlVNCiAJOzsKKwl0cGEgcjM9cjIJCS8vIHIz ID09IHBoeXMgYWRkciBvZiB0YXNrIHN0cnVjdAorCS8vIGxvYWQgbWFwcGluZyBmb3Igc3RhY2sg KHZpcnRhZGRyIGluIHIyLCBwaHlzYWRkciBpbiByMykKKwlyc20gcHNyLmljCisJbW92bCByMTc9 UEFHRV9LRVJORUwKKwk7OworCXNybHouZAorCWRlcCByMTg9MCxyMywwLDEyCisJOzsKKwlvciBy MTg9cjE3LHIxOAorCWRlcCByMj0tMSxyMyw2MSwzCS8vIElNVkEgb2YgdGFzaworCTs7CisJbW92 IHIxNz1ycltyMl0KKwlzaHIudSByMTY9cjMsSUE2NF9HUkFOVUxFX1NISUZUCisJOzsKKwlkZXAg cjE3PTAscjE3LDgsMjQKKwk7OworCW1vdiBjci5pdGlyPXIxNworCW1vdiBjci5pZmE9cjIKKwor CW1vdiByMTk9SUE2NF9UUl9DVVJSRU5UX1NUQUNLCisJOzsKKwlpdHIuZCBkdHJbcjE5XT1yMTgK Kwk7OworCXNzbSBwc3IuaWMKKwlzcmx6LmQKKyAgCTs7CiAKIAkvLyBsb2FkIHRoZSAiY3VycmVu dCIgcG9pbnRlciAocjEzKSBhbmQgYXIuazYgd2l0aCB0aGUgY3VycmVudCB0YXNrCiAJbW92IElB NjRfS1IoQ1VSUkVOVCk9cjIJCS8vIHZpcnR1YWwgYWRkcmVzcwotCS8vIGluaXRpYWxpemUgazQg dG8gYSBzYWZlIHZhbHVlICg2NC0xMjhNQiBpcyBtYXBwZWQgYnkgVFJfS0VSTkVMKQogCW1vdiBJ QTY0X0tSKENVUlJFTlRfU1RBQ0spPXIxNgogCW1vdiByMTM9cjIKIAkvKgpAQCAtNjY1LDE0ICs2 OTksMTQgQEAKIEVORChfX2lhNjRfaW5pdF9mcHUpCiAKIC8qCi0gKiBTd2l0Y2ggZXhlY3V0aW9u IG1vZGUgZnJvbSB2aXJ0dWFsIHRvIHBoeXNpY2FsIG9yIHZpY2UgdmVyc2EuCisgKiBTd2l0Y2gg ZXhlY3V0aW9uIG1vZGUgZnJvbSB2aXJ0dWFsIHRvIHBoeXNpY2FsCiAgKgogICogSW5wdXRzOgog ICoJcjE2ID0gbmV3IHBzciB0byBlc3RhYmxpc2gKICAqCiAgKiBOb3RlOiBSU0UgbXVzdCBhbHJl YWR5IGJlIGluIGVuZm9yY2VkIGxhenkgbW9kZQogICovCi1HTE9CQUxfRU5UUlkoaWE2NF9zd2l0 Y2hfbW9kZSkKK0dMT0JBTF9FTlRSWShpYTY0X3N3aXRjaF9tb2RlX3BoeXMpCiAgewogCWFsbG9j IHIyPWFyLnBmcywwLDAsMCwwCiAJcnNtIHBzci5pIHwgcHNyLmljCQkvLyBkaXNhYmxlIGludGVy cnVwdHMgYW5kIGludGVycnVwdCBjb2xsZWN0aW9uCkBAIC02ODIsMzUgKzcxNiw4NiBAQAogIHsK IAlmbHVzaHJzCQkJCS8vIG11c3QgYmUgZmlyc3QgaW5zbiBpbiBncm91cAogCXNybHouaQotCXNo ci51IHIxOT1yMTUsNjEJCS8vIHIxOSA8LSB0b3AgMyBiaXRzIG9mIGN1cnJlbnQgSVAKICB9CiAJ OzsKIAltb3YgY3IuaXBzcj1yMTYJCQkvLyBzZXQgbmV3IFBTUgotCWFkZCByMz0xZi1pYTY0X3N3 aXRjaF9tb2RlLHIxNQotCXhvciByMTU9MHg3LHIxOQkJCS8vIGZsaXAgdGhlIHJlZ2lvbiBiaXRz CisJYWRkIHIzPTFmLWlhNjRfc3dpdGNoX21vZGVfcGh5cyxyMTUKIAogCW1vdiByMTc9YXIuYnNw CiAJbW92IHIxND1ycAkJCS8vIGdldCByZXR1cm4gYWRkcmVzcyBpbnRvIGEgZ2VuZXJhbCByZWdp c3RlcgorCTs7CiAKLQkvLyBzd2l0Y2ggUlNFIGJhY2tpbmcgc3RvcmU6CisJLy8gZ29pbmcgdG8g cGh5c2ljYWwgbW9kZSwgdXNlIHRwYSB0byB0cmFuc2xhdGUgdmlydC0+cGh5cworCXRwYSByMTc9 cjE3CisJdHBhIHIzPXIzCisJdHBhIHNwPXNwCisJdHBhIHIxND1yMTQKIAk7OwotCWRlcCByMTc9 cjE1LHIxNyw2MSwzCQkvLyBtYWtlIGFyLmJzcCBwaHlzaWNhbCBvciB2aXJ0dWFsCisKIAltb3Yg cjE4PWFyLnJuYXQJCQkvLyBzYXZlIGFyLnJuYXQKLQk7OwogCW1vdiBhci5ic3BzdG9yZT1yMTcJ CS8vIHRoaXMgc3RlcHMgb24gYXIucm5hdAotCWRlcCByMz1yMTUscjMsNjEsMwkJLy8gbWFrZSBy ZmkgcmV0dXJuIGFkZHJlc3MgcGh5c2ljYWwgb3IgdmlydHVhbAorCW1vdiBjci5paXA9cjMKKwlt b3YgY3IuaWZzPXIwCiAJOzsKKwltb3YgYXIucm5hdD1yMTgJCQkvLyByZXN0b3JlIGFyLnJuYXQK KwlyZmkJCQkJLy8gbXVzdCBiZSBsYXN0IGluc24gaW4gZ3JvdXAKKwk7OworMToJbW92IHJwPXIx NAorCWJyLnJldC5zcHRrLm1hbnkgcnAKK0VORChpYTY0X3N3aXRjaF9tb2RlX3BoeXMpCisKKy8q CisgKiBTd2l0Y2ggZXhlY3V0aW9uIG1vZGUgZnJvbSBwaHlzaWNhbCB0byB2aXJ0dWFsCisgKgor ICogSW5wdXRzOgorICoJcjE2ID0gbmV3IHBzciB0byBlc3RhYmxpc2gKKyAqCisgKiBOb3RlOiBS U0UgbXVzdCBhbHJlYWR5IGJlIGluIGVuZm9yY2VkIGxhenkgbW9kZQorICovCitHTE9CQUxfRU5U UlkoaWE2NF9zd2l0Y2hfbW9kZV92aXJ0KQorIHsKKwlhbGxvYyByMj1hci5wZnMsMCwwLDAsMAor CXJzbSBwc3IuaSB8IHBzci5pYwkJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBpbnRlcnJ1cHQg Y29sbGVjdGlvbgorCW1vdiByMTU9aXAKKyB9CisJOzsKKyB7CisJZmx1c2hycwkJCQkvLyBtdXN0 IGJlIGZpcnN0IGluc24gaW4gZ3JvdXAKKwlzcmx6LmkKKyB9CisJOzsKKwltb3YgY3IuaXBzcj1y MTYJCQkvLyBzZXQgbmV3IFBTUgorCWFkZCByMz0xZi1pYTY0X3N3aXRjaF9tb2RlX3ZpcnQscjE1 CisKKwltb3YgcjE3PWFyLmJzcAorCW1vdiByMTQ9cnAJCQkvLyBnZXQgcmV0dXJuIGFkZHJlc3Mg aW50byBhIGdlbmVyYWwgcmVnaXN0ZXIKKwk7OworCisJLy8gZ29pbmcgdG8gdmlydHVhbAorCS8v ICAgLSBmb3IgY29kZSBhZGRyZXNzZXMsIHNldCB1cHBlciBiaXRzIG9mIGFkZHIgdG8gS0VSTkVM X1NUQVJUCisJLy8gICAtIGZvciBzdGFjayBhZGRyZXNzZXMsIHNldCB1cHBlciAzIGJpdHMgdG8g MHhlLi4uLiBEb250IGNoYW5nZSBhbnkgb2YgdGhlCisJLy8gICAgIGxvd2VyIGJpdHMgc2luY2Ug d2Ugd2FudCBpdCB0byBzdGF5IGlkZW50aXR5IG1hcHBlZAorCW1vdmwgcjE4PUtFUk5FTF9TVEFS VAorCWRlcCByMz0wLHIzLEtFUk5FTF9UUl9QQUdFX1NISUZULDY0LUtFUk5FTF9UUl9QQUdFX1NI SUZUCisJZGVwIHIxND0wLHIxNCxLRVJORUxfVFJfUEFHRV9TSElGVCw2NC1LRVJORUxfVFJfUEFH RV9TSElGVAorCWRlcCByMTc9LTEscjE3LDYxLDMgCisJZGVwIHNwPS0xLHNwLDYxLDMgCisJOzsK KwlvciByMz1yMyxyMTgKKwlvciByMTQ9cjE0LHIxOAorCTs7CisKKwltb3YgcjE4PWFyLnJuYXQJ CQkvLyBzYXZlIGFyLnJuYXQKKwltb3YgYXIuYnNwc3RvcmU9cjE3CQkvLyB0aGlzIHN0ZXBzIG9u IGFyLnJuYXQKIAltb3YgY3IuaWlwPXIzCiAJbW92IGNyLmlmcz1yMAotCWRlcCBzcD1yMTUsc3As NjEsMwkJLy8gbWFrZSBzdGFjayBwb2ludGVyIHBoeXNpY2FsIG9yIHZpcnR1YWwKIAk7OwogCW1v diBhci5ybmF0PXIxOAkJCS8vIHJlc3RvcmUgYXIucm5hdAotCWRlcCByMTQ9cjE1LHIxNCw2MSwz CQkvLyBtYWtlIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHBoeXNpY2FsIG9yIHZpcnR1YWwKIAly ZmkJCQkJLy8gbXVzdCBiZSBsYXN0IGluc24gaW4gZ3JvdXAKIAk7OwogMToJbW92IHJwPXIxNAog CWJyLnJldC5zcHRrLm1hbnkgcnAKLUVORChpYTY0X3N3aXRjaF9tb2RlKQorRU5EKGlhNjRfc3dp dGNoX21vZGVfdmlydCkKIAogI2lmZGVmIENPTkZJR19JQTY0X0JSTF9FTVUKIApkaWZmIC1ydSBs MjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgbDI1NjktYWVnbC9h cmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwotLS0gbDI1NjktbW9zYmVyZ2VyL2FyY2gvaWE2 NC9rZXJuZWwvaWE2NF9rc3ltcy5jCVRodSBNYXkgMTUgMTA6MTI6MDkgMjAwMworKysgbDI1Njkt YWVnbC9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwlUaHUgTWF5IDE1IDExOjQ1OjAyIDIw MDMKQEAgLTE1OSw2ICsxNTksNyBAQAogRVhQT1JUX1NZTUJPTChpYTY0X212KTsKICNlbmRpZgog RVhQT1JUX1NZTUJPTChtYWNodmVjX25vb3ApOworRVhQT1JUX1NZTUJPTCh6ZXJvX3BhZ2VfbWVt bWFwX3B0cik7CiAjaWZkZWYgQ09ORklHX1BFUkZNT04KICNpbmNsdWRlIDxhc20vcGVyZm1vbi5o PgogRVhQT1JUX1NZTUJPTChwZm1faW5zdGFsbF9hbHRlcm5hdGVfc3lzd2lkZV9zdWJzeXN0ZW0p OwpkaWZmIC1ydSBsMjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUyBsMjU2OS1h ZWdsL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKLS0tIGwyNTY5LW1vc2Jlcmdlci9hcmNoL2lhNjQv a2VybmVsL2l2dC5TCVRodSBNYXkgMTUgMTA6MTI6MDkgMjAwMworKysgbDI1NjktYWVnbC9hcmNo L2lhNjQva2VybmVsL2l2dC5TCVRodSBNYXkgMTUgMTE6NDU6MDIgMjAwMwpAQCAtMTIyLDggKzEy MiwxMyBAQAogCXNoci51IHIxOD1yMjIsUEdESVJfU0hJRlQJCS8vIGdldCBiaXRzIDMzLTYzIG9m IHRoZSBmYXVsdGluZyBhZGRyZXNzCiAJOzsKIChwNykJZGVwIHIxNz1yMTcscjE5LChQQUdFX1NI SUZULTMpLDMJLy8gcHV0IHJlZ2lvbiBudW1iZXIgYml0cyBpbiBwbGFjZQorCS5nbG9iYWwgaWE2 NF9pdnRfcGF0Y2gxCitpYTY0X2l2dF9wYXRjaDE6Cit7CS5tbHggLy8gd2UgcGF0Y2ggdGhpcyBi dW5kbGUgdG8gaW5jbHVkZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHN3YXBwZXJfcGdfZGlyCiAJc3Js ei5kCQkJCQkvLyBlbnN1cmUgInJzbSBwc3IuZHQiIGhhcyB0YWtlbiBlZmZlY3QKLShwNikJbW92 bCByMTk9X19wYShzd2FwcGVyX3BnX2RpcikJCS8vIHJlZ2lvbiA1IGlzIHJvb3RlZCBhdCBzd2Fw cGVyX3BnX2RpcgorKHA2KQltb3ZsIHIxOT1zd2FwcGVyX3BnX2RpcgkJCS8vIHJlZ2lvbiA1IGlz IHJvb3RlZCBhdCBzd2FwcGVyX3BnX2RpcgorfQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcK IChwNikJc2hyLnUgcjIxPXIyMSxQR0RJUl9TSElGVCtQQUdFX1NISUZUCiAocDcpCXNoci51IHIy MT1yMjEsUEdESVJfU0hJRlQrUEFHRV9TSElGVC0zCiAJOzsKQEAgLTQxNSw4ICs0MjAsMTMgQEAK IAlzaHIudSByMTg9cjE2LFBHRElSX1NISUZUCQkvLyBnZXQgYml0cyAzMy02MyBvZiBmYXVsdGlu ZyBhZGRyZXNzCiAJOzsKIChwNykJZGVwIHIxNz1yMTcscjE5LChQQUdFX1NISUZULTMpLDMJLy8g cHV0IHJlZ2lvbiBudW1iZXIgYml0cyBpbiBwbGFjZQotCXNybHouZAotKHA2KQltb3ZsIHIxOT1f X3BhKHN3YXBwZXJfcGdfZGlyKQkJLy8gcmVnaW9uIDUgaXMgcm9vdGVkIGF0IHN3YXBwZXJfcGdf ZGlyCisJLmdsb2JhbCBpYTY0X2l2dF9wYXRjaDIKK2lhNjRfaXZ0X3BhdGNoMjoKK3sJLm1seCAv LyB3ZSBwYXRjaCB0aGlzIGJ1bmRsZSB0byBpbmNsdWRlIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3dh cHBlcl9wZ19kaXIKKwlzcmx6LmQJCQkJCS8vIGVuc3VyZSAicnNtIHBzci5kdCIgaGFzIHRha2Vu IGVmZmVjdAorKHA2KQltb3ZsIHIxOT1zd2FwcGVyX3BnX2RpcgkJCS8vIHJlZ2lvbiA1IGlzIHJv b3RlZCBhdCBzd2FwcGVyX3BnX2RpcgorfQorCS5wcmVkLnJlbCAibXV0ZXgiLCBwNiwgcDcKIChw NikJc2hyLnUgcjIxPXIyMSxQR0RJUl9TSElGVCtQQUdFX1NISUZUCiAocDcpCXNoci51IHIyMT1y MjEsUEdESVJfU0hJRlQrUEFHRV9TSElGVC0zCiAJOzsKZGlmZiAtcnUgbDI1NjktbW9zYmVyZ2Vy L2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgbDI1NjktYWVnbC9hcmNoL2lhNjQva2VybmVsL21jYS5j Ci0tLSBsMjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwlUaHUgTWF5IDE1IDEw OjEyOjA5IDIwMDMKKysrIGwyNTY5LWFlZ2wvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwlUaHUgTWF5 IDE1IDEzOjE5OjMxIDIwMDMKQEAgLTY2MiwxNyArNjYyLDE3IEBACiAKIAlJQTY0X01DQV9ERUJV RygiaWE2NF9tY2FfaW5pdDogcmVnaXN0ZXJlZCBtY2EgcmVuZGV6dm91cyBzcGlubG9vcCBhbmQg d2FrZXVwIG1lY2guXG4iKTsKIAotCWlhNjRfbWNfaW5mby5pbWlfbWNhX2hhbmRsZXIgICAgICAg ID0gX19wYShtY2FfaGxkbHJfcHRyLT5mcCk7CisJaWE2NF9tY19pbmZvLmltaV9tY2FfaGFuZGxl ciAgICAgICAgPSBpYTY0X3RwYShtY2FfaGxkbHJfcHRyLT5mcCk7CiAJLyoKIAkgKiBYWFggLSBk aXNhYmxlIFNBTCBjaGVja3N1bSBieSBzZXR0aW5nIHNpemUgdG8gMDsgc2hvdWxkIGJlCi0JICoJ X19wYShpYTY0X29zX21jYV9kaXNwYXRjaF9lbmQpIC0gX19wYShpYTY0X29zX21jYV9kaXNwYXRj aCk7CisJICoJaWE2NF90cGEoaWE2NF9vc19tY2FfZGlzcGF0Y2hfZW5kKSAtIGlhNjRfdHBhKGlh NjRfb3NfbWNhX2Rpc3BhdGNoKTsKIAkgKi8KIAlpYTY0X21jX2luZm8uaW1pX21jYV9oYW5kbGVy X3NpemUJPSAwOwogCiAJLyogUmVnaXN0ZXIgdGhlIG9zIG1jYSBoYW5kbGVyIHdpdGggU0FMICov CiAJaWYgKChyYyA9IGlhNjRfc2FsX3NldF92ZWN0b3JzKFNBTF9WRUNUT1JfT1NfTUNBLAogCQkJ CSAgICAgICBpYTY0X21jX2luZm8uaW1pX21jYV9oYW5kbGVyLAotCQkJCSAgICAgICBtY2FfaGxk bHJfcHRyLT5ncCwKKwkJCQkgICAgICAgaWE2NF90cGEobWNhX2hsZGxyX3B0ci0+Z3ApLAogCQkJ CSAgICAgICBpYTY0X21jX2luZm8uaW1pX21jYV9oYW5kbGVyX3NpemUsCiAJCQkJICAgICAgIDAs IDAsIDApKSkKIAl7CkBAIC02ODIsMTUgKzY4MiwxNSBAQAogCX0KIAogCUlBNjRfTUNBX0RFQlVH KCJpYTY0X21jYV9pbml0OiByZWdpc3RlcmVkIG9zIG1jYSBoYW5kbGVyIHdpdGggU0FMIGF0IDB4 JWx4LCBncCA9IDB4JWx4XG4iLAotCQkgICAgICAgaWE2NF9tY19pbmZvLmltaV9tY2FfaGFuZGxl ciwgbWNhX2hsZGxyX3B0ci0+Z3ApOworCQkgICAgICAgaWE2NF9tY19pbmZvLmltaV9tY2FfaGFu ZGxlciwgaWE2NF90cGEobWNhX2hsZGxyX3B0ci0+Z3ApKTsKIAogCS8qCiAJICogWFhYIC0gZGlz YWJsZSBTQUwgY2hlY2tzdW0gYnkgc2V0dGluZyBzaXplIHRvIDAsIHNob3VsZCBiZQogCSAqIElB NjRfSU5JVF9IQU5ETEVSX1NJWkUKIAkgKi8KLQlpYTY0X21jX2luZm8uaW1pX21vbmFyY2hfaW5p dF9oYW5kbGVyCQk9IF9fcGEobW9uX2luaXRfcHRyLT5mcCk7CisJaWE2NF9tY19pbmZvLmltaV9t b25hcmNoX2luaXRfaGFuZGxlcgkJPSBpYTY0X3RwYShtb25faW5pdF9wdHItPmZwKTsKIAlpYTY0 X21jX2luZm8uaW1pX21vbmFyY2hfaW5pdF9oYW5kbGVyX3NpemUJPSAwOwotCWlhNjRfbWNfaW5m by5pbWlfc2xhdmVfaW5pdF9oYW5kbGVyCQk9IF9fcGEoc2xhdmVfaW5pdF9wdHItPmZwKTsKKwlp YTY0X21jX2luZm8uaW1pX3NsYXZlX2luaXRfaGFuZGxlcgkJPSBpYTY0X3RwYShzbGF2ZV9pbml0 X3B0ci0+ZnApOwogCWlhNjRfbWNfaW5mby5pbWlfc2xhdmVfaW5pdF9oYW5kbGVyX3NpemUJPSAw OwogCiAJSUE2NF9NQ0FfREVCVUcoImlhNjRfbWNhX2luaXQ6IG9zIGluaXQgaGFuZGxlciBhdCAl bHhcbiIsCkBAIC02OTksMTAgKzY5OSwxMCBAQAogCS8qIFJlZ2lzdGVyIHRoZSBvcyBpbml0IGhh bmRsZXIgd2l0aCBTQUwgKi8KIAlpZiAoKHJjID0gaWE2NF9zYWxfc2V0X3ZlY3RvcnMoU0FMX1ZF Q1RPUl9PU19JTklULAogCQkJCSAgICAgICBpYTY0X21jX2luZm8uaW1pX21vbmFyY2hfaW5pdF9o YW5kbGVyLAotCQkJCSAgICAgICBfX3BhKGlhNjRfZ2V0X2dwKCkpLAorCQkJCSAgICAgICBpYTY0 X3RwYShpYTY0X2dldF9ncCgpKSwKIAkJCQkgICAgICAgaWE2NF9tY19pbmZvLmltaV9tb25hcmNo X2luaXRfaGFuZGxlcl9zaXplLAogCQkJCSAgICAgICBpYTY0X21jX2luZm8uaW1pX3NsYXZlX2lu aXRfaGFuZGxlciwKLQkJCQkgICAgICAgX19wYShpYTY0X2dldF9ncCgpKSwKKwkJCQkgICAgICAg aWE2NF90cGEoaWE2NF9nZXRfZ3AoKSksCiAJCQkJICAgICAgIGlhNjRfbWNfaW5mby5pbWlfc2xh dmVfaW5pdF9oYW5kbGVyX3NpemUpKSkKIAl7CiAJCXByaW50ayhLRVJOX0VSUiAiaWE2NF9tY2Ff aW5pdDogRmFpbGVkIHRvIHJlZ2lzdGVyIG0vcyBpbml0IGhhbmRsZXJzIHdpdGggU0FMLiAiCmRp ZmYgLXJ1IGwyNTY5LW1vc2Jlcmdlci9hcmNoL2lhNjQva2VybmVsL3BhbC5TIGwyNTY5LWFlZ2wv YXJjaC9pYTY0L2tlcm5lbC9wYWwuUwotLS0gbDI1NjktbW9zYmVyZ2VyL2FyY2gvaWE2NC9rZXJu ZWwvcGFsLlMJVGh1IE1heSAxNSAxMDoxMjowOSAyMDAzCisrKyBsMjU2OS1hZWdsL2FyY2gvaWE2 NC9rZXJuZWwvcGFsLlMJVGh1IE1heSAxNSAxMTo0NTowMiAyMDAzCkBAIC0xNjQsNyArMTY0LDcg QEAKIAk7OwogCW1vdiBsb2M0PWFyLnJzYwkJCS8vIHNhdmUgUlNFIGNvbmZpZ3VyYXRpb24KIAlk ZXAueiBsb2MyPWxvYzIsMCw2MQkJLy8gY29udmVydCBwYWwgZW50cnkgcG9pbnQgdG8gcGh5c2lj YWwKLQlkZXAueiByOD1yOCwwLDYxCQkvLyBjb252ZXJ0IHJwIHRvIHBoeXNpY2FsCisJdHBhIHI4 PXI4CQkJLy8gY29udmVydCBycCB0byBwaHlzaWNhbAogCTs7CiAJbW92IGI3ID0gbG9jMgkJCS8v IGluc3RhbGwgdGFyZ2V0IHRvIGJyYW5jaCByZWcKIAltb3YgYXIucnNjPTAJCQkvLyBwdXQgUlNF IGluIGVuZm9yY2VkIGxhenksIExFIG1vZGUKQEAgLTE3NCwxMyArMTc0LDEzIEBACiAJb3IgbG9j Mz1sb2MzLHIxNwkJLy8gYWRkIGluIHBzciB0aGUgYml0cyB0byBzZXQKIAk7OwogCWFuZGNtIHIx Nj1sb2MzLHIxNgkJLy8gcmVtb3ZlcyBiaXRzIHRvIGNsZWFyIGZyb20gcHNyCi0JYnIuY2FsbC5z cHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hfbW9kZQorCWJyLmNhbGwuc3B0ay5tYW55IHJwPWlhNjRf c3dpdGNoX21vZGVfcGh5cwogLnJldDE6CW1vdiBycCA9IHI4CQkJLy8gaW5zdGFsbCByZXR1cm4g YWRkcmVzcyAocGh5c2ljYWwpCiAJYnIuY29uZC5zcHRrLm1hbnkgYjcKIDE6CiAJbW92IGFyLnJz Yz0wCQkJLy8gcHV0IFJTRSBpbiBlbmZvcmNlZCBsYXp5LCBMRSBtb2RlCiAJbW92IHIxNj1sb2Mz CQkJLy8gcjE2PSBvcmlnaW5hbCBwc3IKLQlici5jYWxsLnNwdGsubWFueSBycD1pYTY0X3N3aXRj aF9tb2RlIC8vIHJldHVybiB0byB2aXJ0dWFsIG1vZGUKKwlici5jYWxsLnNwdGsubWFueSBycD1p YTY0X3N3aXRjaF9tb2RlX3ZpcnQgLy8gcmV0dXJuIHRvIHZpcnR1YWwgbW9kZQogLnJldDI6CiAJ bW92IHBzci5sID0gbG9jMwkJLy8gcmVzdG9yZSBpbml0IFBTUgogCkBAIC0yMjgsMTMgKzIyOCwx MyBAQAogCW1vdiBiNyA9IGxvYzIJCQkvLyBpbnN0YWxsIHRhcmdldCB0byBicmFuY2ggcmVnCiAJ OzsKIAlhbmRjbSByMTY9bG9jMyxyMTYJCS8vIHJlbW92ZXMgYml0cyB0byBjbGVhciBmcm9tIHBz cgotCWJyLmNhbGwuc3B0ay5tYW55IHJwPWlhNjRfc3dpdGNoX21vZGUKKwlici5jYWxsLnNwdGsu bWFueSBycD1pYTY0X3N3aXRjaF9tb2RlX3BoeXMKIC5yZXQ2OgogCWJyLmNhbGwuc3B0ay5tYW55 IHJwPWI3CQkvLyBub3cgbWFrZSB0aGUgY2FsbAogLnJldDc6CiAJbW92IGFyLnJzYz0wCQkJLy8g cHV0IFJTRSBpbiBlbmZvcmNlZCBsYXp5LCBMRSBtb2RlCiAJbW92IHIxNj1sb2MzCQkJLy8gcjE2 PSBvcmlnaW5hbCBwc3IKLQlici5jYWxsLnNwdGsubWFueSBycD1pYTY0X3N3aXRjaF9tb2RlCS8v IHJldHVybiB0byB2aXJ0dWFsIG1vZGUKKwlici5jYWxsLnNwdGsubWFueSBycD1pYTY0X3N3aXRj aF9tb2RlX3ZpcnQJLy8gcmV0dXJuIHRvIHZpcnR1YWwgbW9kZQogCiAucmV0ODoJbW92IHBzci5s ICA9IGxvYzMJCS8vIHJlc3RvcmUgaW5pdCBQU1IKIAltb3YgYXIucGZzID0gbG9jMQpkaWZmIC1y dSBsMjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGwyNTY5LWFlZ2wvYXJj aC9pYTY0L2tlcm5lbC9zZXR1cC5jCi0tLSBsMjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L2tlcm5l bC9zZXR1cC5jCVRodSBNYXkgMTUgMTA6MTI6MDkgMjAwMworKysgbDI1NjktYWVnbC9hcmNoL2lh NjQva2VybmVsL3NldHVwLmMJVGh1IE1heSAxNSAxMzo0Nzo0NCAyMDAzCkBAIC0yNjUsNyArMjY1 LDcgQEAKIHN0YXRpYyB2b2lkCiBmaW5kX21lbW9yeSAodm9pZCkKIHsKLSMJZGVmaW5lIEtFUk5F TF9FTkQJKCh1bnNpZ25lZCBsb25nKSAmX2VuZCkKKyMJZGVmaW5lIEtFUk5FTF9FTkQJKCZfZW5k KQogCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplOwogCXVuc2lnbmVkIGxvbmcgbWF4X3BmbjsK IAlpbnQgbiA9IDA7CkBAIC0yODYsOCArMjg2LDggQEAKIAkJCQkrIHN0cmxlbihfX3ZhKGlhNjRf Ym9vdF9wYXJhbS0+Y29tbWFuZF9saW5lKSkgKyAxKTsKIAluKys7CiAKLQlyc3ZkX3JlZ2lvbltu XS5zdGFydCA9IEtFUk5FTF9TVEFSVDsKLQlyc3ZkX3JlZ2lvbltuXS5lbmQgICA9IEtFUk5FTF9F TkQ7CisJcnN2ZF9yZWdpb25bbl0uc3RhcnQgPSAodW5zaWduZWQgbG9uZykgaWE2NF9pbXZhKCh2 b2lkICopS0VSTkVMX1NUQVJUKTsKKwlyc3ZkX3JlZ2lvbltuXS5lbmQgICA9ICh1bnNpZ25lZCBs b25nKSBpYTY0X2ltdmEoS0VSTkVMX0VORCk7CiAJbisrOwogCiAjaWZkZWYgQ09ORklHX0JMS19E RVZfSU5JVFJECkBAIC0zNDcsNiArMzQ3LDQ3IEBACiAjZW5kaWYKIH0KIAorLyoKKyAqIFRoZXJl IGFyZSB0d28gcGxhY2VzIGluIHRoZSBwZXJmb3JtYW5jZSBjcml0aWNhbCBwYXRoIG9mCisgKiB0 aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGNvZGUgd2hlcmUgd2UgbmVlZCB0byBrbm93IHRoZSBwaHlz aWNhbAorICogYWRkcmVzcyBvZiB0aGUgc3dhcHBlcl9wZ19kaXIgc3RydWN0dXJlLiAgVGhpcyBy b3V0aW5lCisgKiBwYXRjaGVzIHRoZSAibW92bCIgaW5zdHJ1Y3Rpb25zIHRvIGxvYWQgdGhlIHZh bHVlIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0CitwYXRjaF9pdnRfd2l0aF9waHlz X3N3YXBwZXJfcGdfZGlyKHZvaWQpCit7CisJZXh0ZXJuIGNoYXIgaWE2NF9pdnRfcGF0Y2gxW10s IGlhNjRfaXZ0X3BhdGNoMltdOworCXVuc2lnbmVkIGxvbmcgc3BkID0gaWE2NF90cGEoKF9fdTY0 KXN3YXBwZXJfcGdfZGlyKTsKKwl1bnNpZ25lZCBsb25nICpwOworCisJcCA9ICh1bnNpZ25lZCBs b25nICopaWE2NF9pbXZhKGlhNjRfaXZ0X3BhdGNoMSk7CisKKwkqcCA9ICgqcCAmIDB4M2ZmZmZm ZmZmZmZmVUwpIHwKKwkJKChzcGQgJiAweDAwMDAwMGZmZmZjMDAwMDBVTCk8PDI0KTsKKwlwKys7 CisJKnAgPSAoKnAgJiAweGYwMDAwODBmZmY4MDAwMDBVTCkgfAorCQkoKHNwZCAmIDB4ODAwMDAw MDAwMDAwMDAwMFVMKSA+PiA0KSAgfAorCQkoKHNwZCAmIDB4N2ZmZmZmMDAwMDAwMDAwMFVMKSA+ PiA0MCkgfAorCQkoKHNwZCAmIDB4MDAwMDAwMDAwMDFmMDAwMFVMKSA8PCAyOSkgfAorCQkoKHNw ZCAmIDB4MDAwMDAwMDAwMDIwMDAwMFVMKSA8PCAyMykgfAorCQkoKHNwZCAmIDB4MDAwMDAwMDAw MDAwZmY4MFVMKSA8PCA0MykgfAorCQkoKHNwZCAmIDB4MDAwMDAwMDAwMDAwMDA3ZlVMKSA8PCAz Nik7CisKKwlwID0gKHVuc2lnbmVkIGxvbmcgKilpYTY0X2ltdmEoaWE2NF9pdnRfcGF0Y2gyKTsK KworCSpwID0gKCpwICYgMHgzZmZmZmZmZmZmZmZVTCkgfAorCQkoKHNwZCAmIDB4MDAwMDAwZmZm ZmMwMDAwMFVMKTw8MjQpOworCXArKzsKKwkqcCA9ICgqcCAmIDB4ZjAwMDA4MGZmZjgwMDAwMFVM KSB8CisJCSgoc3BkICYgMHg4MDAwMDAwMDAwMDAwMDAwVUwpID4+IDQpICB8CisJCSgoc3BkICYg MHg3ZmZmZmYwMDAwMDAwMDAwVUwpID4+IDQwKSB8CisJCSgoc3BkICYgMHgwMDAwMDAwMDAwMWYw MDAwVUwpIDw8IDI5KSB8CisJCSgoc3BkICYgMHgwMDAwMDAwMDAwMjAwMDAwVUwpIDw8IDIzKSB8 CisJCSgoc3BkICYgMHgwMDAwMDAwMDAwMDBmZjgwVUwpIDw8IDQzKSB8CisJCSgoc3BkICYgMHgw MDAwMDAwMDAwMDAwMDdmVUwpIDw8IDM2KTsKK30KKyNkZWZpbmUgUEFUQ0hfSVZUKCkgcGF0Y2hf aXZ0X3dpdGhfcGh5c19zd2FwcGVyX3BnX2RpcigpCisKIHZvaWQgX19pbml0CiBzZXR1cF9hcmNo IChjaGFyICoqY21kbGluZV9wKQogewpAQCAtMzU1LDYgKzM5Niw4IEBACiAKIAl1bndfaW5pdCgp OwogCisJUEFUQ0hfSVZUKCk7CisKIAkqY21kbGluZV9wID0gX192YShpYTY0X2Jvb3RfcGFyYW0t PmNvbW1hbmRfbGluZSk7CiAJc3RybmNweShzYXZlZF9jb21tYW5kX2xpbmUsICpjbWRsaW5lX3As IHNpemVvZihzYXZlZF9jb21tYW5kX2xpbmUpKTsKIAlzYXZlZF9jb21tYW5kX2xpbmVbQ09NTUFO RF9MSU5FX1NJWkUtMV0gPSAnXDAnOwkJLyogZm9yIHNhZmV0eSAqLwpAQCAtNzU1LDcgKzc5OCw3 IEBACiAJaWYgKGN1cnJlbnQtPm1tKQogCQlCVUcoKTsKIAotCWlhNjRfbW11X2luaXQoY3B1X2Rh dGEpOworCWlhNjRfbW11X2luaXQoaWE2NF9pbXZhKGNwdV9kYXRhKSk7CiAKICNpZmRlZiBDT05G SUdfSUEzMl9TVVBQT1JUCiAJLyogaW5pdGlhbGl6ZSBnbG9iYWwgaWEzMiBzdGF0ZSAtIENSMCBh bmQgQ1I0ICovCmRpZmYgLXJ1IGwyNTY5LW1vc2Jlcmdlci9hcmNoL2lhNjQva2VybmVsL3NtcGJv b3QuYyBsMjU2OS1hZWdsL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCi0tLSBsMjU2OS1tb3Ni ZXJnZXIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMJVGh1IE1heSAxNSAxMDoxMjowOSAyMDAz CisrKyBsMjU2OS1hZWdsL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCVRodSBNYXkgMTUgMTM6 MjI6MTQgMjAwMwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJLyogVGVsbCBTQUwgd2hlcmUgdG8gZHJv cCB0aGUgQVAncy4gICovCiAJYXBfc3RhcnR1cCA9IChzdHJ1Y3QgZnB0ciAqKSBzdGFydF9hcDsK IAlzYWxfcmV0ID0gaWE2NF9zYWxfc2V0X3ZlY3RvcnMoU0FMX1ZFQ1RPUl9PU19CT09UX1JFTkRF WiwKLQkJCQkgICAgICAgX19wYShhcF9zdGFydHVwLT5mcCksIF9fcGEoYXBfc3RhcnR1cC0+Z3Ap LCAwLCAwLCAwLCAwKTsKKwkJCQkgICAgICAgaWE2NF90cGEoYXBfc3RhcnR1cC0+ZnApLCBpYTY0 X3RwYShhcF9zdGFydHVwLT5ncCksIDAsIDAsIDAsIDApOwogCWlmIChzYWxfcmV0IDwgMCkKIAkJ cHJpbnRrKEtFUk5fRVJSICJTTVA6IENhbid0IHNldCBTQUwgQVAgQm9vdCBSZW5kZXp2b3VzOiAl c1xuIiwKIAkJICAgICAgIGlhNjRfc2FsX3N0cmVycm9yKHNhbF9yZXQpKTsKZGlmZiAtcnUgbDI1 NjktbW9zYmVyZ2VyL2FyY2gvaWE2NC9tbS9pbml0LmMgbDI1NjktYWVnbC9hcmNoL2lhNjQvbW0v aW5pdC5jCi0tLSBsMjU2OS1tb3NiZXJnZXIvYXJjaC9pYTY0L21tL2luaXQuYwlUaHUgTWF5IDE1 IDEwOjEyOjA5IDIwMDMKKysrIGwyNTY5LWFlZ2wvYXJjaC9pYTY0L21tL2luaXQuYwlUaHUgTWF5 IDE1IDE0OjA5OjU1IDIwMDMKQEAgLTQ3LDYgKzQ3LDggQEAKIAogc3RhdGljIGludCBwZ3RfY2Fj aGVfd2F0ZXJbMl0gPSB7IDI1LCA1MCB9OwogCitzdHJ1Y3QgcGFnZSAqemVyb19wYWdlX21lbW1h cF9wdHI7CQkvKiBtYXAgZW50cnkgZm9yIHplcm8gcGFnZSAqLworCiB2b2lkCiBjaGVja19wZ3Rf Y2FjaGUgKHZvaWQpCiB7CkBAIC0xMTIsMTQgKzExNCwxNiBAQAogdm9pZAogZnJlZV9pbml0bWVt ICh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGVh ZGRyOwogCi0JYWRkciA9ICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luOwotCWZvciAoOyBh ZGRyIDwgKHVuc2lnbmVkIGxvbmcpICZfX2luaXRfZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewor CWFkZHIgPSAodW5zaWduZWQgbG9uZykgaWE2NF9pbXZhKCZfX2luaXRfYmVnaW4pOworCWVhZGRy ID0gKHVuc2lnbmVkIGxvbmcpIGlhNjRfaW12YSgmX19pbml0X2VuZCk7CisJd2hpbGUgKGFkZHIg PCBlYWRkcikgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlz ZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkciksIDEpOwogCQlmcmVlX3BhZ2UoYWRkcik7 CiAJCSsrdG90YWxyYW1fcGFnZXM7CisJCWFkZHIgKz0gUEFHRV9TSVpFOwogCX0KIAlwcmludGso S0VSTl9JTkZPICJGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiAlbGRrQiBmcmVlZFxuIiwK IAkgICAgICAgKCZfX2luaXRfZW5kIC0gJl9faW5pdF9iZWdpbikgPj4gMTApOwpAQCAtMjY5LDcg KzI3Myw3IEBACiB2b2lkIF9faW5pdAogaWE2NF9tbXVfaW5pdCAodm9pZCAqbXlfY3B1X2RhdGEp CiB7Ci0JdW5zaWduZWQgbG9uZyBwc3IsIHJpZCwgcHRhLCBpbXBsX3ZhX2JpdHM7CisJdW5zaWdu ZWQgbG9uZyBwc3IsIHB0YSwgaW1wbF92YV9iaXRzOwogCWV4dGVybiB2b2lkIF9faW5pdCB0bGJf aW5pdCAodm9pZCk7CiAjaWZkZWYgQ09ORklHX0RJU0FCTEVfVkhQVAogIwlkZWZpbmUgVkhQVF9F TkFCTEVfQklUCTAKQEAgLTI3NywyMSArMjgxLDggQEAKICMJZGVmaW5lIFZIUFRfRU5BQkxFX0JJ VAkxCiAjZW5kaWYKIAotCS8qCi0JICogU2V0IHVwIHRoZSBrZXJuZWwgaWRlbnRpdHkgbWFwcGlu ZyBmb3IgcmVnaW9ucyA2IGFuZCA1LiAgVGhlIG1hcHBpbmcgZm9yIHJlZ2lvbgotCSAqIDcgaXMg c2V0dXAgdXAgaW4gX3N0YXJ0KCkuCi0JICovCisJLyogUGluIG1hcHBpbmcgZm9yIHBlcmNwdSBh cmVhIGludG8gVExCICovCiAJcHNyID0gaWE2NF9jbGVhcl9pYygpOwotCi0JcmlkID0gaWE2NF9y aWQoSUE2NF9SRUdJT05fSURfS0VSTkVMLCBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUKTsKLQlpYTY0 X3NldF9ycihfX0lBNjRfVU5DQUNIRURfT0ZGU0VULCAocmlkIDw8IDgpIHwgKElBNjRfR1JBTlVM RV9TSElGVCA8PCAyKSk7Ci0KLQlyaWQgPSBpYTY0X3JpZChJQTY0X1JFR0lPTl9JRF9LRVJORUws IFZNQUxMT0NfU1RBUlQpOwotCWlhNjRfc2V0X3JyKFZNQUxMT0NfU1RBUlQsIChyaWQgPDwgOCkg fCAoUEFHRV9TSElGVCA8PCAyKSB8IDEpOwotCi0JLyogZW5zdXJlIHJyNiBpcyB1cC10by1kYXRl IGJlZm9yZSBpbnNlcnRpbmcgdGhlIFBFUkNQVV9BRERSIHRyYW5zbGF0aW9uOiAqLwotCWlhNjRf c3Jsel9kKCk7Ci0KIAlpYTY0X2l0cigweDIsIElBNjRfVFJfUEVSQ1BVX0RBVEEsIFBFUkNQVV9B RERSLAogCQkgcHRlX3ZhbChwZm5fcHRlKF9fcGEobXlfY3B1X2RhdGEpID4+IFBBR0VfU0hJRlQs IFBBR0VfS0VSTkVMKSksCiAJCSBQRVJDUFVfUEFHRV9TSElGVCk7CkBAIC00ODksNiArNDgwLDcg QEAKIAogCWRpc2NvbnRpZ19wYWdpbmdfaW5pdCgpOwogCWVmaV9tZW1tYXBfd2Fsayhjb3VudF9w YWdlcywgJm51bV9waHlzcGFnZXMpOworCXplcm9fcGFnZV9tZW1tYXBfcHRyID0gdmlydF90b19w YWdlKGlhNjRfaW12YShlbXB0eV96ZXJvX3BhZ2UpKTsKIH0KICNlbHNlIC8qICFDT05GSUdfRElT Q09OVElHTUVNICovCiB2b2lkCkBAIC01NjAsNiArNTUyLDcgQEAKIAl9CiAJZnJlZV9hcmVhX2lu aXQoem9uZXNfc2l6ZSk7CiAjICBlbmRpZiAvKiAhQ09ORklHX1ZJUlRVQUxfTUVNX01BUCAqLwor CXplcm9fcGFnZV9tZW1tYXBfcHRyID0gdmlydF90b19wYWdlKGlhNjRfaW12YShlbXB0eV96ZXJv X3BhZ2UpKTsKIH0KICNlbmRpZiAvKiAhQ09ORklHX0RJU0NPTlRJR01FTSAqLwogCkBAIC02MzAs NyArNjIzLDcgQEAKIAkJcGd0X2NhY2hlX3dhdGVyWzFdID0gbnVtX3BndF9wYWdlczsKIAogCS8q IGluc3RhbGwgdGhlIGdhdGUgcGFnZSBpbiB0aGUgZ2xvYmFsIHBhZ2UgdGFibGU6ICovCi0JcHV0 X2dhdGVfcGFnZSh2aXJ0X3RvX3BhZ2UoX19zdGFydF9nYXRlX3NlY3Rpb24pLCBHQVRFX0FERFIp OworCXB1dF9nYXRlX3BhZ2UodmlydF90b19wYWdlKGlhNjRfaW12YShfX3N0YXJ0X2dhdGVfc2Vj dGlvbikpLCBHQVRFX0FERFIpOwogCiAjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAogCWlhMzJf Z2R0X2luaXQoKTsKZGlmZiAtcnUgbDI1NjktbW9zYmVyZ2VyL2FyY2gvaWE2NC92bWxpbnV4Lmxk cy5TIGwyNTY5LWFlZ2wvYXJjaC9pYTY0L3ZtbGludXgubGRzLlMKLS0tIGwyNTY5LW1vc2Jlcmdl ci9hcmNoL2lhNjQvdm1saW51eC5sZHMuUwlUaHUgTWF5IDE1IDEwOjEyOjA4IDIwMDMKKysrIGwy NTY5LWFlZ2wvYXJjaC9pYTY0L3ZtbGludXgubGRzLlMJVGh1IE1heSAxNSAxMTo0NjoyNSAyMDAz CkBAIC0zLDggKzMsOSBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9w dHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUu aD4KIAotI2RlZmluZSBMT0FEX09GRlNFVCBQQUdFX09GRlNFVAorI2RlZmluZSBMT0FEX09GRlNF VCBLRVJORUxfU1RBUlQgKyBLRVJORUxfVFJfUEFHRV9TSVpFCiAjaW5jbHVkZSA8YXNtLWdlbmVy aWMvdm1saW51eC5sZHMuaD4KIAogT1VUUFVUX0ZPUk1BVCgiZWxmNjQtaWE2NC1saXR0bGUiKQpA QCAtMjMsMjIgKzI0LDIyIEBACiAJfQogCiAgIHYgPSBQQUdFX09GRlNFVDsJLyogdGhpcyBzeW1i b2wgaXMgaGVyZSB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuLi4gKi8KLSAgcGh5c19zdGFydCA9 IF9zdGFydCAtIFBBR0VfT0ZGU0VUOworICBwaHlzX3N0YXJ0ID0gX3N0YXJ0IC0gTE9BRF9PRkZT RVQ7CiAKICAgLiA9IEtFUk5FTF9TVEFSVDsKIAogICBfdGV4dCA9IC47CiAgIF9zdGV4dCA9IC47 CiAKLSAgLnRleHQgOiBBVChBRERSKC50ZXh0KSAtIFBBR0VfT0ZGU0VUKQorICAudGV4dCA6IEFU KEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpCiAgICAgewogCSooLnRleHQuaXZ0KQogCSooLnRl eHQpCiAgICAgfQotICAudGV4dDIgOiBBVChBRERSKC50ZXh0MikgLSBQQUdFX09GRlNFVCkKKyAg LnRleHQyIDogQVQoQUREUigudGV4dDIpIC0gTE9BRF9PRkZTRVQpCiAJeyAqKC50ZXh0MikgfQog I2lmZGVmIENPTkZJR19TTVAKLSAgLnRleHQubG9jayA6IEFUKEFERFIoLnRleHQubG9jaykgLSBQ QUdFX09GRlNFVCkKKyAgLnRleHQubG9jayA6IEFUKEFERFIoLnRleHQubG9jaykgLSBMT0FEX09G RlNFVCkKIAl7ICooLnRleHQubG9jaykgfQogI2VuZGlmCiAgIF9ldGV4dCA9IC47CkBAIC00Nywx NCArNDgsMTQgQEAKIAogICAvKiBFeGNlcHRpb24gdGFibGUgKi8KICAgLiA9IEFMSUdOKDE2KTsK LSAgX19leF90YWJsZSA6IEFUKEFERFIoX19leF90YWJsZSkgLSBQQUdFX09GRlNFVCkKKyAgX19l eF90YWJsZSA6IEFUKEFERFIoX19leF90YWJsZSkgLSBMT0FEX09GRlNFVCkKIAl7CiAJICBfX3N0 YXJ0X19fZXhfdGFibGUgPSAuOwogCSAgKihfX2V4X3RhYmxlKQogCSAgX19zdG9wX19fZXhfdGFi bGUgPSAuOwogCX0KIAotICBfX21ja2lubGV5X2U5X2J1bmRsZXMgOiBBVChBRERSKF9fbWNraW5s ZXlfZTlfYnVuZGxlcykgLSBQQUdFX09GRlNFVCkKKyAgX19tY2tpbmxleV9lOV9idW5kbGVzIDog QVQoQUREUihfX21ja2lubGV5X2U5X2J1bmRsZXMpIC0gTE9BRF9PRkZTRVQpCiAJewogCSAgX19z dGFydF9fX21ja2lubGV5X2U5X2J1bmRsZXMgPSAuOwogCSAgKihfX21ja2lubGV5X2U5X2J1bmRs ZXMpCkBAIC02Nyw3ICs2OCw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSUE2NF9HRU5FUklDKQog ICAvKiBNYWNoaW5lIFZlY3RvciAqLwogICAuID0gQUxJR04oMTYpOwotICAubWFjaHZlYyA6IEFU KEFERFIoLm1hY2h2ZWMpIC0gUEFHRV9PRkZTRVQpCisgIC5tYWNodmVjIDogQVQoQUREUigubWFj aHZlYykgLSBMT0FEX09GRlNFVCkKIAl7CiAJICBtYWNodmVjX3N0YXJ0ID0gLjsKIAkgICooLm1h Y2h2ZWMpCkBAIC03Nyw5ICs3OCw5IEBACiAKICAgLyogVW53aW5kIGluZm8gJiB0YWJsZTogKi8K ICAgLiA9IEFMSUdOKDgpOwotICAuSUFfNjQudW53aW5kX2luZm8gOiBBVChBRERSKC5JQV82NC51 bndpbmRfaW5mbykgLSBQQUdFX09GRlNFVCkKKyAgLklBXzY0LnVud2luZF9pbmZvIDogQVQoQURE UiguSUFfNjQudW53aW5kX2luZm8pIC0gTE9BRF9PRkZTRVQpCiAJeyAqKC5JQV82NC51bndpbmRf aW5mbyopIH0KLSAgLklBXzY0LnVud2luZCA6IEFUKEFERFIoLklBXzY0LnVud2luZCkgLSBQQUdF X09GRlNFVCkKKyAgLklBXzY0LnVud2luZCA6IEFUKEFERFIoLklBXzY0LnVud2luZCkgLSBMT0FE X09GRlNFVCkKIAl7CiAJICBpYTY0X3Vud19zdGFydCA9IC47CiAJICAqKC5JQV82NC51bndpbmQq KQpAQCAtODgsMjQgKzg5LDI0IEBACiAKICAgUk9EQVRBCiAKLSAgLm9wZCA6IEFUKEFERFIoLm9w ZCkgLSBQQUdFX09GRlNFVCkKKyAgLm9wZCA6IEFUKEFERFIoLm9wZCkgLSBMT0FEX09GRlNFVCkK IAl7ICooLm9wZCkgfQogCiAgIC8qIEluaXRpYWxpemF0aW9uIGNvZGUgYW5kIGRhdGE6ICovCiAK ICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9iZWdpbiA9IC47Ci0gIC5pbml0LnRl eHQgOiBBVChBRERSKC5pbml0LnRleHQpIC0gUEFHRV9PRkZTRVQpCisgIC5pbml0LnRleHQgOiBB VChBRERSKC5pbml0LnRleHQpIC0gTE9BRF9PRkZTRVQpCiAJewogCSAgX3Npbml0dGV4dCA9IC47 CiAJICAqKC5pbml0LnRleHQpCiAJICBfZWluaXR0ZXh0ID0gLjsKIAl9CiAKLSAgLmluaXQuZGF0 YSA6IEFUKEFERFIoLmluaXQuZGF0YSkgLSBQQUdFX09GRlNFVCkKKyAgLmluaXQuZGF0YSA6IEFU KEFERFIoLmluaXQuZGF0YSkgLSBMT0FEX09GRlNFVCkKIAl7ICooLmluaXQuZGF0YSkgfQogCi0g IC5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBQQUdFX09GRlNFVCkKKyAgLmlu aXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKQogCXsKIAkgIF9f aW5pdHJhbWZzX3N0YXJ0ID0gLjsKIAkgICooLmluaXQucmFtZnMpCkBAIC0xMTMsMTkgKzExNCwx OSBAQAogCX0KIAogICAgLiA9IEFMSUdOKDE2KTsKLSAgLmluaXQuc2V0dXAgOiBBVChBRERSKC5p bml0LnNldHVwKSAtIFBBR0VfT0ZGU0VUKQorICAuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQu c2V0dXApIC0gTE9BRF9PRkZTRVQpCiAgICAgICAgIHsKIAkgIF9fc2V0dXBfc3RhcnQgPSAuOwog CSAgKiguaW5pdC5zZXR1cCkKIAkgIF9fc2V0dXBfZW5kID0gLjsKIAl9Ci0gIF9fcGFyYW0gOiBB VChBRERSKF9fcGFyYW0pIC0gUEFHRV9PRkZTRVQpCisgIF9fcGFyYW0gOiBBVChBRERSKF9fcGFy YW0pIC0gTE9BRF9PRkZTRVQpCiAgICAgICAgIHsKIAkgIF9fc3RhcnRfX19wYXJhbSA9IC47CiAJ ICAqKF9fcGFyYW0pCiAJICBfX3N0b3BfX19wYXJhbSA9IC47CiAJfQotICAuaW5pdGNhbGwuaW5p dCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gUEFHRV9PRkZTRVQpCisgIC5pbml0Y2FsbC5p bml0IDogQVQoQUREUiguaW5pdGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkKIAl7CiAJICBfX2lu aXRjYWxsX3N0YXJ0ID0gLjsKIAkgICooLmluaXRjYWxsMS5pbml0KQpAQCAtMTM4LDE3ICsxMzks MTcgQEAKIAkgIF9faW5pdGNhbGxfZW5kID0gLjsKIAl9CiAgICBfX2Nvbl9pbml0Y2FsbF9zdGFy dCA9IC47Ci0gIC5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0 KSAtIFBBR0VfT0ZGU0VUKQorICAuY29uX2luaXRjYWxsLmluaXQgOiBBVChBRERSKC5jb25faW5p dGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkKIAl7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9CiAg IF9fY29uX2luaXRjYWxsX2VuZCA9IC47CiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX2lu aXRfZW5kID0gLjsKIAogICAvKiBUaGUgaW5pdGlhbCB0YXNrIGFuZCBrZXJuZWwgc3RhY2sgKi8K LSAgLmRhdGEuaW5pdF90YXNrIDogQVQoQUREUiguZGF0YS5pbml0X3Rhc2spIC0gUEFHRV9PRkZT RVQpCisgIC5kYXRhLmluaXRfdGFzayA6IEFUKEFERFIoLmRhdGEuaW5pdF90YXNrKSAtIExPQURf T0ZGU0VUKQogCXsgKiguZGF0YS5pbml0X3Rhc2spIH0KIAotICAuZGF0YS5wYWdlX2FsaWduZWQg OiBBVChBRERSKC5kYXRhLnBhZ2VfYWxpZ25lZCkgLSBQQUdFX09GRlNFVCkKKyAgLmRhdGEucGFn ZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpCiAg ICAgICAgIHsgKihfX3NwZWNpYWxfcGFnZV9zZWN0aW9uKQogCSAgX19zdGFydF9nYXRlX3NlY3Rp b24gPSAuOwogCSAgKigudGV4dC5nYXRlKQpAQCAtMTU2LDEzICsxNTcsMTMgQEAKIAl9CiAKICAg LiA9IEFMSUdOKFNNUF9DQUNIRV9CWVRFUyk7Ci0gIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDog QVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBQQUdFX09GRlNFVCkKKyAgLmRhdGEu Y2FjaGVsaW5lX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSAtIExP QURfT0ZGU0VUKQogICAgICAgICB7ICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIH0KIAogICAv KiBQZXItY3B1IGRhdGE6ICovCiAgIC4gPSBBTElHTihQRVJDUFVfUEFHRV9TSVpFKTsKICAgX19w aHlzX3Blcl9jcHVfc3RhcnQgPSAuOwotICAuZGF0YS5wZXJjcHUgUEVSQ1BVX0FERFIgOiBBVChf X3BoeXNfcGVyX2NwdV9zdGFydCAtIFBBR0VfT0ZGU0VUKQorICAuZGF0YS5wZXJjcHUgUEVSQ1BV X0FERFIgOiBBVChfX3BoeXNfcGVyX2NwdV9zdGFydCAtIExPQURfT0ZGU0VUKQogCXsKIAkJX19w ZXJfY3B1X3N0YXJ0ID0gLjsKIAkJKiguZGF0YS5wZXJjcHUpCkBAIC0xNzAsMjQgKzE3MSwyNCBA QAogCX0KICAgLiA9IF9fcGh5c19wZXJfY3B1X3N0YXJ0ICsgUEVSQ1BVX1BBR0VfU0laRTsJLyog ZW5zdXJlIHBlcmNwdSBkYXRhIGZpdHMgaW50byBwZXJjcHUgcGFnZSBzaXplICovCiAKLSAgLmRh dGEgOiBBVChBRERSKC5kYXRhKSAtIFBBR0VfT0ZGU0VUKQorICAuZGF0YSA6IEFUKEFERFIoLmRh dGEpIC0gTE9BRF9PRkZTRVQpCiAJeyAqKC5kYXRhKSAqKC5nbnUubGlua29uY2UuZCopIENPTlNU UlVDVE9SUyB9CiAKICAgLiA9IEFMSUdOKDE2KTsKICAgX19ncCA9IC4gKyAweDIwMDAwMDsJLyog Z3AgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQgZm9yIGV4Yy4gdGFibGUgKi8KIAotICAuZ290IDog QVQoQUREUiguZ290KSAtIFBBR0VfT0ZGU0VUKQorICAuZ290IDogQVQoQUREUiguZ290KSAtIExP QURfT0ZGU0VUKQogCXsgKiguZ290LnBsdCkgKiguZ290KSB9CiAgIC8qIFdlIHdhbnQgdGhlIHNt YWxsIGRhdGEgc2VjdGlvbnMgdG9nZXRoZXIsIHNvIHNpbmdsZS1pbnN0cnVjdGlvbiBvZmZzZXRz CiAgICAgIGNhbiBhY2Nlc3MgdGhlbSBhbGwsIGFuZCBpbml0aWFsaXplZCBkYXRhIGFsbCBiZWZv cmUgdW5pbml0aWFsaXplZCwgc28KICAgICAgd2UgY2FuIHNob3J0ZW4gdGhlIG9uLWRpc2sgc2Vn bWVudCBzaXplLiAgKi8KLSAgLnNkYXRhIDogQVQoQUREUiguc2RhdGEpIC0gUEFHRV9PRkZTRVQp CisgIC5zZGF0YSA6IEFUKEFERFIoLnNkYXRhKSAtIExPQURfT0ZGU0VUKQogCXsgKiguc2RhdGEp IH0KICAgX2VkYXRhICA9ICAuOwogICBfYnNzID0gLjsKLSAgLnNic3MgOiBBVChBRERSKC5zYnNz KSAtIFBBR0VfT0ZGU0VUKQorICAuc2JzcyA6IEFUKEFERFIoLnNic3MpIC0gTE9BRF9PRkZTRVQp CiAJeyAqKC5zYnNzKSAqKC5zY29tbW9uKSB9Ci0gIC5ic3MgOiBBVChBRERSKC5ic3MpIC0gUEFH RV9PRkZTRVQpCisgIC5ic3MgOiBBVChBRERSKC5ic3MpIC0gTE9BRF9PRkZTRVQpCiAJeyAqKC5i c3MpICooQ09NTU9OKSB9CiAKICAgX2VuZCA9IC47CmRpZmYgLXJ1IGwyNTY5LW1vc2Jlcmdlci9p bmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaCBsMjU2OS1hZWdsL2luY2x1ZGUvYXNtLWlhNjQvcGd0 YWJsZS5oCi0tLSBsMjU2OS1tb3NiZXJnZXIvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmgJVGh1 IE1heSAxNSAxMDoxMzowMCAyMDAzCisrKyBsMjU2OS1hZWdsL2luY2x1ZGUvYXNtLWlhNjQvcGd0 YWJsZS5oCVRodSBNYXkgMTUgMTE6NDU6MDIgMjAwMwpAQCAtMjA3LDcgKzIwNyw3IEBACiAjZGVm aW5lIFJHTl9NQVBfTElNSVQJKCgxVUwgPDwgKDQqUEFHRV9TSElGVCAtIDEyKSkgLSBQQUdFX1NJ WkUpCS8qIHBlciByZWdpb24gYWRkciBsaW1pdCAqLwogI2RlZmluZSBSR05fS0VSTkVMCTcKIAot I2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoMHhhMDAwMDAwMDAwMDAwMDAwICsgMypQRVJDUFVfUEFH RV9TSVpFKQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkweGEwMDAwMDAyMDAwMDAwMDAKICNkZWZp bmUgVk1BTExPQ19WTUFERFIoeCkJKCh1bnNpZ25lZCBsb25nKSh4KSkKICNpZmRlZiBDT05GSUdf VklSVFVBTF9NRU1fTUFQCiAjIGRlZmluZSBWTUFMTE9DX0VORF9JTklUCSgweGEwMDAwMDAwMDAw MDAwMDAgKyAoMVVMIDw8ICg0KlBBR0VfU0hJRlQgLSA5KSkpCkBAIC00NTAsNyArNDUwLDggQEAK ICAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KICAqLwogZXh0ZXJuIHVuc2ln bmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZyld OwotI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdl KSkKK2V4dGVybiBzdHJ1Y3QgcGFnZSAqemVyb19wYWdlX21lbW1hcF9wdHI7CisjZGVmaW5lIFpF Uk9fUEFHRSh2YWRkcikgKHplcm9fcGFnZV9tZW1tYXBfcHRyKQogCiAvKiBXZSBwcm92aWRlIG91 ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gY29wZSB3aXRoIFZBIGhvbGVzIGZvciB1c2VybGFu ZCAqLwogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQpAQCAtNDgxLDcgKzQ4Miw2IEBA CiAgKi8KICNkZWZpbmUgS0VSTkVMX1RSX1BBR0VfU0hJRlQJX1BBR0VfU0laRV82NE0KICNkZWZp bmUgS0VSTkVMX1RSX1BBR0VfU0laRQkoMSA8PCBLRVJORUxfVFJfUEFHRV9TSElGVCkKLSNkZWZp bmUgS0VSTkVMX1RSX1BBR0VfTlVNCSgoS0VSTkVMX1NUQVJUIC0gUEFHRV9PRkZTRVQpIC8gS0VS TkVMX1RSX1BBR0VfU0laRSkKIAogLyoKICAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRp YWxpc2UKZGlmZiAtcnUgbDI1NjktbW9zYmVyZ2VyL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29y LmggbDI1NjktYWVnbC9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCi0tLSBsMjU2OS1tb3Ni ZXJnZXIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaAlUaHUgTWF5IDE1IDEwOjEzOjAwIDIw MDMKKysrIGwyNTY5LWFlZ2wvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaAlUaHUgTWF5IDE1 IDEzOjQyOjE3IDIwMDMKQEAgLTkyOSw2ICs5MjksMTggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQog CisvKgorICogVGFrZSBhIG1hcHBlZCBrZXJuZWwgYWRkcmVzcyBhbmQgcmV0dXJuIHRoZSBlcXVp dmFsZW50IGFkZHJlc3MKKyAqIGluIHRoZSByZWdpb24gNyBpZGVudGl0eSBtYXBwZWQgdmlydHVh bCBhcmVhLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgoraWE2NF9pbXZhICh2b2lkICphZGRy KQoreworCXZvaWQgKnJlc3VsdDsKKwlhc20gKCJ0cGEgJTA9JTEiIDogIj1yIihyZXN1bHQpIDog InIiKGFkZHIpKTsKKwlyZXR1cm4gX192YShyZXN1bHQpOworfQorCiAjZGVmaW5lIEFSQ0hfSEFT X1BSRUZFVENICiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVwogI2RlZmluZSBBUkNIX0hBU19T UElOTE9DS19QUkVGRVRDSApkaWZmIC1ydSBsMjU2OS1tb3NiZXJnZXIvaW5jbHVkZS9hc20taWE2 NC9zeXN0ZW0uaCBsMjU2OS1hZWdsL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKLS0tIGwyNTY5 LW1vc2Jlcmdlci9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCVRodSBNYXkgMTUgMTA6MTM6MDAg MjAwMworKysgbDI1NjktYWVnbC9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCVRodSBNYXkgMTUg MTE6NDU6MDIgMjAwMwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9wYWwuaD4KICNp bmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAKLSNkZWZpbmUgS0VSTkVMX1NUQVJUCQkoUEFHRV9PRkZT RVQgKyA2OCoxMDI0KjEwMjQpCisjZGVmaW5lIEtFUk5FTF9TVEFSVAkJKDB4QTAwMDAwMDEwMDAw MDAwMCkKIAogLyogMHhhMDAwMDAwMDAwMDAwMDAwIC0gMHhhMDAwMDAwMDAwMDAwMDAwK1BFUkNQ VV9NQVhfU0laRSByZW1haW4gdW5tYXBwZWQgKi8KICNkZWZpbmUgUEVSQ1BVX0FERFIJCSgweGEw MDAwMDAwMDAwMDAwMDAgKyBQRVJDUFVfUEFHRV9TSVpFKQo= ------_=_NextPart_001_01C31B2A.FE430893--