From owner-freebsd-wireless@FreeBSD.ORG Sun Sep 15 04:08:39 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8B7861AA; Sun, 15 Sep 2013 04:08:39 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-ve0-x233.google.com (mail-ve0-x233.google.com [IPv6:2607:f8b0:400c:c01::233]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DF4A92C8E; Sun, 15 Sep 2013 04:08:38 +0000 (UTC) Received: by mail-ve0-f179.google.com with SMTP id c14so2114668vea.10 for ; Sat, 14 Sep 2013 21:08:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=0z7uI68xX1Akpmw/frvbXJlDC2dYr3wjaUmaDq0i31k=; b=dmIPAKJRciifk1x9bibmcqZ5qTzv1BS/XoVu4sJau5WLj9jlyQonxNaV9WN4EysK7j pTC3t8rzihF/5+CDTvim3jaN6aNEWsJ5xkB1Wv8w1CvK4SBOuRYjnDCpLU6+fUNdZKud /qOvNSJ4SXSP/OIWUl49Mju//e8WJC5Cn18FiGgJ/FEUxX7Y0UqxXTXe3iHlCDQ6BrY7 zNRkK933C9YzTUMMRnkPUg8YX4N3MWXsrikXuL4G0F28Q/p2CMOSUZGueRk7NWAmCLxJ 32DYMkdxxOPEbYAKUSJcWbunlUKCeQbbbVYzMpgcg6DflvjJebrrxbBQEKMiGze1RBTs BvjA== MIME-Version: 1.0 X-Received: by 10.58.44.37 with SMTP id b5mr20357548vem.4.1379218117981; Sat, 14 Sep 2013 21:08:37 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Sat, 14 Sep 2013 21:08:37 -0700 (PDT) In-Reply-To: References: Date: Sun, 15 Sep 2013 12:08:37 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: multipart/mixed; boundary=089e013a132afd7f2f04e6643d3a X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 15 Sep 2013 04:08:39 -0000 --089e013a132afd7f2f04e6643d3a Content-Type: text/plain; charset=ISO-8859-1 Hi! Yes, a call to ieee80211_ratectl_rc_info_set() is needed. To make other drivers work, the __init__ and __findrate__ parts also need to be adapted. When initialize the ratectl state, a cap flag must be properly set and feed to ieee80211_ratectl_init(). __findrate__ part should be repalced with our ieee80211_ratectl_rates(). I've added ieee80211_ratectl_rc_info_get() to be used to get the ieee80211_rc_info. If found the tag, use it; if not, add a new one and use it. Then we don't need to free it explicitly (the tag is freed when associated mbuf is freed) and this interface is unified to both __findrate__ and __complete__. Thanks! Chenchong On Sat, Sep 14, 2013 at 11:21 PM, Adrian Chadd wrote: > Ah, cool! I see you've only just made the other drivers compile; what's > required to make them work? i guess a call > to ieee80211_ratectl_rc_info_set() ? > > Maybe you should add a ieee80211_ratectl_rc_info_set_mbuf() helper that > does the "lookup tag; if one exists use it else use a temporary one" code > that you put in if_ath.c, if_ath_tx.c. > > Other than that, this is looking very good! thankyou! > > > -adrian > > > > On 13 September 2013 20:52, Chenchong Qin wrote: > >> Hi, >> >> Here is latest update. Per-device ratectl statistics is implemented in >> ath and attached when ath is attaching. >> >> Thanks! >> >> Chenchong >> >> >> On Sat, Sep 14, 2013 at 3:37 AM, Adrian Chadd wrote: >> >>> Sweet, thanks! >>> >>> >>> >>> -adrian >>> >>> >>> >>> On 13 September 2013 09:11, Chenchong Qin wrote: >>> >>>> Hi! >>>> >>>> Here is some updates. >>>> >>>> Another member is added to ieee80211_rc_info to record value of the >>>> maximum aggregate size. Then, in aggregation scenario, ratectl algo can >>>> inform aggregation selection code of proper maximum aggregate size. >>>> >>>> Per-vap ratectl statistics is exported through sysctl. When >>>> ieee80211_ratectl_init() is called, this statistics api is attached. It's >>>> convenient to implement the per-device api -- just traverse the vap list >>>> and call per-vap api for each vap. But, we know that ratectl of net80211 >>>> provides service to vap-granularity object, not to device directly. So, is >>>> it more suitable to implement the per-device api in device driver (i.e. >>>> attach per-device api when attaching the device)? >>>> >>>> Code will be posted later. >>>> >>>> Thanks! >>>> >>>> Chenchong >>>> >>>> >>>> On Thu, Sep 12, 2013 at 2:05 AM, Adrian Chadd wrote: >>>> >>>>> Hi, >>>>> >>>>> For now, yes, you have to assume that you won't always get a response >>>>> for a rate lookup. The buffer may be sent with NOACK set, it may be deleted >>>>> during a channel change or scan, etc. >>>>> >>>>> And yes - the rate control lookup stuff for aggregate frames is a bit >>>>> messy. It would be nice for the rate control code to return the rate _and_ >>>>> the maximum aggregate size, in case the aggregation selection wants to cap >>>>> how long frames are at the given choice. >>>>> >>>>> >>>>> >>>>> -adrian >>>>> >>>>> >>>>> >>>>> On 11 September 2013 10:29, Chenchong Qin wrote: >>>>> >>>>>> Hi! >>>>>> >>>>>> I've added some aggregation support here! >>>>>> >>>>>> At first I intend to pass subframe informations(nframes, per-subframe >>>>>> length etc.) >>>>>> to the ratectl api. But it seems to be a paradox that rate lookup >>>>>> must be performed >>>>>> before the ampdu is formed (aggregation limit based on the rate >>>>>> control decision >>>>>> is need) and subframe informations can be obtain only after the ampdu >>>>>> is formed. >>>>>> So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let it >>>>>> distinguish >>>>>> aggregation and non-aggregation scenarios. If rate lookup is called >>>>>> in an aggregation >>>>>> scenario, this flag is set. Then, ratectl algo knows that it's now >>>>>> finding rates for an >>>>>> ampdu and the framelen which records len of the first frame can be >>>>>> ignored. When >>>>>> it comes to complete period, tx status that shows number of subframes >>>>>> been sent >>>>>> and number of subframes been successfully received is passed to the >>>>>> ratectl api. >>>>>> >>>>>> I also get a question here - whether one tx that doesn't perform rate >>>>>> lookup will call >>>>>> the complete procedure? >>>>>> >>>>>> Thanks! >>>>>> >>>>>> Chenchong >>>>>> >>>>>> >>>>>> On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin < >>>>>> qinchenchong@gmail.com> wrote: >>>>>> >>>>>>> Hi! >>>>>>> >>>>>>> I've added the common ratectl state as an mbuf tag! >>>>>>> >>>>>>> After days of frustration (compile errors, boot failed, kernel >>>>>>> panics, suddenly kernel freezing...), it seems that ath now can use >>>>>>> 11n-aware net80211 ratectl api to do rate control. Attachment[0] is the >>>>>>> diff of modifications to dev/ath. Changes to net80211 is minor this time. >>>>>>> Just add some debug msgs to it. Please reference my gsoc svn repo >>>>>>> . >>>>>>> >>>>>>> It's worth mentioning that sometimes the kernel will "freezing" (it >>>>>>> looks like all things stop working, screen is freezing, keyboard and mouse >>>>>>> are not responding) after wireless stuff start working for a while. At >>>>>>> first, I consider it caused by my modification to ath. But this strange >>>>>>> thing can also happen in a head kernel (r255382). Attachment[1] is some >>>>>>> useful messages just before it happens. By the way, I use a AR9227 device. >>>>>>> >>>>>>> And, I found that, for aggregation scenario, ath gathers tx >>>>>>> information and update the ratectl states. So, what we can do to net80211 >>>>>>> to let it support aggregation? >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> Chenchong >>>>>>> >>>>>>> >>>>>>> On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin < >>>>>>> qinchenchong@gmail.com> wrote: >>>>>>> >>>>>>>> OK! >>>>>>>> >>>>>>>> Thanks! :-) >>>>>>>> >>>>>>>> Chenchong >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd wrote: >>>>>>>> >>>>>>>>> Hi! >>>>>>>>> >>>>>>>>> You can declare an mbuf tag and use that. Look at M_TXCB in >>>>>>>>> net80211 and how mbuf tags are added. >>>>>>>>> >>>>>>>>> I've long thought about adding a net80211 mbuf tag to represent >>>>>>>>> -all- of the tx related state - TX callback, rate control, rate completion, >>>>>>>>> aggregation state, retry count, etc. That way all the drivers can use it. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -adrian >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --089e013a132afd7f2f04e6643d3a Content-Type: application/octet-stream; name="20130915-net80211-ratectl-ath.diff" Content-Disposition: attachment; filename="20130915-net80211-ratectl-ath.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hllqt0vv0 SW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9hbXJyLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEv aWVlZTgwMjExX2FtcnIuYwkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjEx X2FtcnIuYwkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQAogCiAjaW5jbHVkZSA8bmV0 ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9odC5o PgorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CiAjaW5jbHVkZSA8bmV0 ODAyMTEvaWVlZTgwMjExX2FtcnIuaD4KLSNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0 ZWN0bC5oPgogCiAjZGVmaW5lIGlzX3N1Y2Nlc3MoYW1uKQlcCiAJKChhbW4pLT5hbW5fcmV0cnlj bnQgPCAoYW1uKS0+YW1uX3R4Y250IC8gMTApCkBAIC01OCwxOCArNTgsMTkgQEAKIAkoKGFtbikt PmFtbl90eGNudCA+IDEwKQogCiBzdGF0aWMgdm9pZAlhbXJyX3NldGludGVydmFsKGNvbnN0IHN0 cnVjdCBpZWVlODAyMTF2YXAgKiwgaW50KTsKLXN0YXRpYyB2b2lkCWFtcnJfaW5pdChzdHJ1Y3Qg aWVlZTgwMjExdmFwICopOworc3RhdGljIHZvaWQJYW1ycl9pbml0KHN0cnVjdCBpZWVlODAyMTF2 YXAgKiwgdWludDMyX3QpOwogc3RhdGljIHZvaWQJYW1ycl9kZWluaXQoc3RydWN0IGllZWU4MDIx MXZhcCAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfbm9kZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9ub2Rl ICopOwogc3RhdGljIGludAlhbXJyX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2FtcnIgKiwKICAg ICAJCQlzdHJ1Y3QgaWVlZTgwMjExX2FtcnJfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUg Kik7CiBzdGF0aWMgaW50CWFtcnJfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgdm9pZCAq LCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZAlhbXJyX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKik7CiBzdGF0aWMgdm9pZAlhbXJyX3R4X2Nv bXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwKLSAgICAJCQljb25zdCBzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKiwgaW50LCAKLQkJCXZvaWQgKiwgdm9pZCAqKTsKLXN0YXRpYyB2b2lk CWFtcnJfdHhfdXBkYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwKKyAgICAJCQlj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICop Oworc3RhdGljIHZvaWQJYW1ycl90eF91cGRhdGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq LAogCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHZvaWQgKiwgdm9pZCAqLCB2b2lk ICopOworc3RhdGljIHZvaWQJYW1ycl9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICop Owogc3RhdGljIHZvaWQJYW1ycl9zeXNjdGxhdHRhY2goc3RydWN0IGllZWU4MDIxMXZhcCAqLAog CQkJc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqLCBzdHJ1Y3Qgc3lzY3RsX29pZCAqKTsKIApAQCAt ODUsOSArODYsMTEgQEAKIAkuaXJfbm9kZV9pbml0CT0gYW1ycl9ub2RlX2luaXQsCiAJLmlyX25v ZGVfZGVpbml0CT0gYW1ycl9ub2RlX2RlaW5pdCwKIAkuaXJfcmF0ZQk9IGFtcnJfcmF0ZSwKKwku aXJfcmF0ZXMJPSBhbXJyX3JhdGVzLAogCS5pcl90eF9jb21wbGV0ZQk9IGFtcnJfdHhfY29tcGxl dGUsCiAJLmlyX3R4X3VwZGF0ZQk9IGFtcnJfdHhfdXBkYXRlLAogCS5pcl9zZXRpbnRlcnZhbAk9 IGFtcnJfc2V0aW50ZXJ2YWwsCisJLmlyX3N0YXRzCT0gYW1ycl9zdGF0cywKIH07CiBJRUVFODAy MTFfUkFURUNUTF9NT0RVTEUoYW1yciwgMSk7CiBJRUVFODAyMTFfUkFURUNUTF9BTEcoYW1yciwg SUVFRTgwMjExX1JBVEVDVExfQU1SUiwgYW1ycik7CkBAIC0xMDUsNyArMTA4LDcgQEAKIH0KIAog c3RhdGljIHZvaWQKLWFtcnJfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCithbXJyX2lu aXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCB1aW50MzJfdCBjYXBhYmlsaXRpZXMpCiB7CiAJ c3RydWN0IGllZWU4MDIxMV9hbXJyICphbXJyOwogCkBAIC0xMTcsNiArMTIwLDEwIEBACiAJCWlm X3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHJhdGVjdGwgc3RydWN0dXJlXG4i KTsKIAkJcmV0dXJuOwogCX0KKworCXN0cnVjdCBpZWVlODAyMTFfcmNfc3RhdCAqIGlycyA9IElF RUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmlyc19jYXBhYmlsaXRpZXMgPSBjYXBh YmlsaXRpZXM7CisKIAlhbXJyLT5hbXJyX21pbl9zdWNjZXNzX3RocmVzaG9sZCA9IElFRUU4MDIx MV9BTVJSX01JTl9TVUNDRVNTX1RIUkVTSE9MRDsKIAlhbXJyLT5hbXJyX21heF9zdWNjZXNzX3Ro cmVzaG9sZCA9IElFRUU4MDIxMV9BTVJSX01BWF9TVUNDRVNTX1RIUkVTSE9MRDsKIAlhbXJyX3Nl dGludGVydmFsKHZhcCwgNTAwIC8qIG1zICovKTsKQEAgLTEyOSwxNyArMTM2LDYgQEAKIAlmcmVl KHZhcC0+aXZfcnMsIE1fODAyMTFfUkFURUNUTCk7CiB9CiAKLXN0YXRpYyBpbnQKLWFtcnJfbm9k ZV9pc18xMW4oc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKLXsKLQotCWlmIChuaS0+bmlfY2hh biA9PSBOVUxMKQotCQlyZXR1cm4gKDApOwotCWlmIChuaS0+bmlfY2hhbiA9PSBJRUVFODAyMTFf Q0hBTl9BTllDKQotCQlyZXR1cm4gKDApOwotCXJldHVybiAoSUVFRTgwMjExX0lTX0NIQU5fSFQo bmktPm5pX2NoYW4pKTsKLX0KLQogc3RhdGljIHZvaWQKIGFtcnJfbm9kZV9pbml0KHN0cnVjdCBp ZWVlODAyMTFfbm9kZSAqbmkpCiB7CkBAIC0xNTksMjkgKzE1NSwyMCBAQAogCQl9CiAJfSBlbHNl CiAJCWFtbiA9IG5pLT5uaV9yY3RsczsKKwogCWFtbi0+YW1uX2FtcnIgPSBhbXJyOwogCWFtbi0+ YW1uX3N1Y2Nlc3MgPSAwOwogCWFtbi0+YW1uX3JlY292ZXJ5ID0gMDsKIAlhbW4tPmFtbl90eGNu dCA9IGFtbi0+YW1uX3JldHJ5Y250ID0gMDsKIAlhbW4tPmFtbl9zdWNjZXNzX3RocmVzaG9sZCA9 IGFtcnItPmFtcnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCi0JLyogMTFuIG9yIG5vdD8gUGlj ayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkv KiBYWFggZXcgKi8KLQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19S QVRFQ1RMLCBuaSwKLQkJICAgICIlczogMTFuIG5vZGUiLCBfX2Z1bmNfXyk7Ci0JCXJzID0gKHN0 cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqKSAmbmktPm5pX2h0cmF0ZXM7Ci0JfSBlbHNlIHsKLQkJ SUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKLQkJ ICAgICIlczogbm9uLTExbiBub2RlIiwgX19mdW5jX18pOwotCQlycyA9ICZuaS0+bmlfcmF0ZXM7 Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwogCiAJLyogSW5p dGlhbCByYXRlIC0gbG93ZXN0ICovCiAJcmF0ZSA9IHJzLT5yc19yYXRlc1swXTsKIAogCS8qIFhY WCBjbGVhciB0aGUgYmFzaWMgcmF0ZSBmbGFnIGlmIGl0J3Mgbm90IDExbiAqLwotCWlmICghIGFt cnJfbm9kZV9pc18xMW4obmkpKQorCWlmICghIGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4o bmkpKQogCQlyYXRlICY9IElFRUU4MDIxMV9SQVRFX1ZBTDsKIAogCS8qIHBpY2sgaW5pdGlhbCBy YXRlIGZyb20gdGhlIHJhdGVzZXQgLSBIVCBvciBvdGhlcndpc2UgKi8KQEAgLTE4OSw3ICsxNzYs NyBAQAogCSAgICBhbW4tPmFtbl9yaXgtLSkgewogCQkvKiBsZWdhY3kgLSBhbnl0aGluZyA8IDM2 bWJpdCwgc3RvcCBzZWFyY2hpbmcgKi8KIAkJLyogMTFuIC0gc3RvcCBhdCBNQ1M0IC8gTUNTMTIg LyBNQ1MyOCAqLwotCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkgJiYKKwkJaWYgKGllZWU4MDIx MV9yYXRlY3RsX25vZGVfaXMxMW4obmkpICYmCiAJCSAgICAocnMtPnJzX3JhdGVzW2Ftbi0+YW1u X3JpeF0gJiAweDcpIDwgNCkKIAkJCWJyZWFrOwogCQllbHNlIGlmICgocnMtPnJzX3JhdGVzW2Ft bi0+YW1uX3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwpIDw9IDcyKQpAQCAtMTk4LDcgKzE4NSw3 IEBACiAJfQogCiAJLyogaWYgdGhlIHJhdGUgaXMgYW4gMTFuIHJhdGUsIGVuc3VyZSB0aGUgTUNT IGJpdCBpcyBzZXQgKi8KLQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJaWYgKGllZWU4MDIx MV9yYXRlY3RsX25vZGVfaXMxMW4obmkpKQogCQlyYXRlIHw9IElFRUU4MDIxMV9SQVRFX01DUzsK IAogCS8qIEFzc2lnbiBpbml0aWFsIHJhdGUgZnJvbSB0aGUgcmF0ZXNldCAqLwpAQCAtMjA2LDkg KzE5Myw4IEBACiAJYW1uLT5hbW5fdGlja3MgPSB0aWNrczsKIAogCUlFRUU4MDIxMV9OT1RFKG5p LT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCi0JICAgICJBTVJSOiBucmF0ZXM9 JWQsIGluaXRpYWwgcmF0ZSAlZCIsCi0JICAgIHJzLT5yc19ucmF0ZXMsCi0JICAgIHJhdGUpOwor CSAgICAiJXM6IEFNUlI6IG5yYXRlcz0lZCwgaW5pdGlhbCByYXRlICVkIiwKKwkJX19mdW5jX18s IHJzLT5yc19ucmF0ZXMsIHJhdGUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjI2LDE3ICsyMTIs MTIgQEAKIAogCUtBU1NFUlQoaXNfZW5vdWdoKGFtbiksICgidHhjbnQgJWQiLCBhbW4tPmFtbl90 eGNudCkpOwogCi0JLyogMTFuIG9yIG5vdD8gUGljayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlm IChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkvKiBYWFggZXcgKi8KLQkJcnMgPSAoc3RydWN0 IGllZWU4MDIxMV9yYXRlc2V0ICopICZuaS0+bmlfaHRyYXRlczsKLQl9IGVsc2UgewotCQlycyA9 ICZuaS0+bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQo bmkpOwogCisKIAlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVD VEwsIG5pLAotCSAgICAiQU1SUjogY3VycmVudCByYXRlICVkLCB0eGNudD0lZCwgcmV0cnljbnQ9 JWQiLAotCSAgICBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKKwkgICAg IiVzOiBBTVJSOiBjdXJyZW50IHJhdGUgJWQsIHR4Y250PSVkLCByZXRyeWNudD0lZCIsCisJICAg IF9fZnVuY19fLCBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKIAkgICAg YW1uLT5hbW5fdHhjbnQsCiAJICAgIGFtbi0+YW1uX3JldHJ5Y250KTsKIApAQCAtMjU2LDggKzIz Nyw4IEBACiAJCQlhbW4tPmFtbl9zdWNjZXNzID0gMDsKIAkJCXJpeCsrOwogCQkJSUVFRTgwMjEx X05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKLQkJCSAgICAiQU1S UiBpbmNyZWFzaW5nIHJhdGUgJWQgKHR4Y250PSVkIHJldHJ5Y250PSVkKSIsCi0JCQkgICAgcnMt PnJzX3JhdGVzW3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwsCisJCQkgICAgIiVzOiBBTVJSIGlu Y3JlYXNpbmcgcmF0ZSAlZCAodHhjbnQ9JWQgcmV0cnljbnQ9JWQpIiwKKwkJCSAgICBfX2Z1bmNf XywgcnMtPnJzX3JhdGVzW3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwsCiAJCQkgICAgYW1uLT5h bW5fdHhjbnQsIGFtbi0+YW1uX3JldHJ5Y250KTsKIAkJfSBlbHNlIHsKIAkJCWFtbi0+YW1uX3Jl Y292ZXJ5ID0gMDsKQEAgLTI3Nyw4ICsyNTgsOCBAQAogCQkJfQogCQkJcml4LS07CiAJCQlJRUVF ODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAotCQkJICAg ICJBTVJSIGRlY3JlYXNpbmcgcmF0ZSAlZCAodHhjbnQ9JWQgcmV0cnljbnQ9JWQpIiwKLQkJCSAg ICBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKKwkJCSAgICAiJXM6IEFN UlIgZGVjcmVhc2luZyByYXRlICVkICh0eGNudD0lZCByZXRyeWNudD0lZCkiLAorCQkJICAgIF9f ZnVuY19fLCBycy0+cnNfcmF0ZXNbcml4XSAmIElFRUU4MDIxMV9SQVRFX1ZBTCwKIAkJCSAgICBh bW4tPmFtbl90eGNudCwgYW1uLT5hbW5fcmV0cnljbnQpOwogCQl9CiAJCWFtbi0+YW1uX3JlY292 ZXJ5ID0gMDsKQEAgLTMwNCwxMyArMjg1LDcgQEAKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jh dGVzZXQgKnJzID0gTlVMTDsKIAlpbnQgcml4OwogCi0JLyogMTFuIG9yIG5vdD8gUGljayB0aGUg cmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5pKSkgewotCQkvKiBYWFgg ZXcgKi8KLQkJcnMgPSAoc3RydWN0IGllZWU4MDIxMV9yYXRlc2V0ICopICZuaS0+bmlfaHRyYXRl czsKLQl9IGVsc2UgewotCQlycyA9ICZuaS0+bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjEx X3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwogCiAJaWYgKGlzX2Vub3VnaChhbW4pICYmICh0aWNr cyAtIGFtbi0+YW1uX3RpY2tzKSA+IGFtcnItPmFtcnJfaW50ZXJ2YWwpIHsKIAkJcml4ID0gYW1y cl91cGRhdGUoYW1yciwgYW1uLCBuaSk7CkBAIC0zMTgsNyArMjkzLDcgQEAKIAkJCS8qIHVwZGF0 ZSBwdWJsaWMgcmF0ZSAqLwogCQkJbmktPm5pX3R4cmF0ZSA9IHJzLT5yc19yYXRlc1tyaXhdOwog CQkJLyogWFhYIHN0cmlwIGJhc2ljIHJhdGUgZmxhZyBmcm9tIHR4cmF0ZSwgaWYgbm9uLTExbiAq LwotCQkJaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKQorCQkJaWYgKGllZWU4MDIxMV9yYXRlY3Rs X25vZGVfaXMxMW4obmkpKQogCQkJCW5pLT5uaV90eHJhdGUgfD0gSUVFRTgwMjExX1JBVEVfTUNT OwogCQkJZWxzZQogCQkJCW5pLT5uaV90eHJhdGUgJj0gSUVFRTgwMjExX1JBVEVfVkFMOwpAQCAt MzMwLDYgKzMwNSw3NiBAQAogCXJldHVybiByaXg7CiB9CiAKK3N0YXRpYyB2b2lkCithbXJyX3Jh dGVzKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAq cmNfaW5mbykKK3sKKyNkZWZpbmUJUkFURShfaXgpCShycy0+cnNfcmF0ZXNbKF9peCldICYgSUVF RTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoX2l4KQkocnMtPnJzX3JhdGVzWyhfaXgpXSB8 IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMgPSBy Y19pbmZvLT5pcmlfcmM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlc2V0ICpycyA9IE5V TEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IE5VTEw7CisJaW50 IHJpeCwgY29kZTsKKworCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwor CXJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUobmktPm5pX2ljLT5pY19jdXJjaGFuKTsKKwlJ RUVFODAyMTFfRFBSSU5URihuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIAorCSAg ICAiJXM6IGNoYW5uZWwgZmxhZ3M6IDB4JTA4eFxuIiwgX19mdW5jX18sIAorCQluaS0+bmlfaWMt PmljX2N1cmNoYW4tPmljX2ZsYWdzKTsgCisJCisJcml4ID0gYW1ycl9yYXRlKG5pLCBOVUxMLCAw KTsKKworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxhZ3MgPSByY1syXS5mbGFncyA9IHJjWzNdLmZs YWdzID0gMDsKKworCWlmIChycy0+cnNfbnJhdGVzID4gMCkgeworCQljb2RlID0gaWVlZTgwMjEx X3JhdGVjdGxfbm9kZV9pczExbihuaSk/IE1DUyhyaXgpIDogUkFURShyaXgpOworCQlyY1swXS5y aXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCisJCWlmIChJRUVFODAyMTFfUkFURUNU TF9IQVNDQVBfTVJSKG5pLT5uaV92YXApKSB7CisJCQlyY1swXS50cmllcyA9IDE7CisJCQlyY1sx XS50cmllcyA9IDE7CisJCQlyY1syXS50cmllcyA9IDE7CisJCQlyY1szXS50cmllcyA9IDE7CisJ CQlpZiAoLS1yaXggPj0gMCkgeworCQkJCWNvZGUgPSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lz MTFuKG5pKT8gTUNTKHJpeCkgOiBSQVRFKHJpeCk7CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVD b2RlVG9JbmRleFtjb2RlXTsKKwkJCX0gZWxzZSB7CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVD b2RlVG9JbmRleFswXTsKKwkJCX0KKwkJCWlmICgtLXJpeCA+PSAwKSB7CisJCQkJY29kZSA9IGll ZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1Mocml4KSA6IFJBVEUocml4KTsKKwkJ CQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCQkJfSBlbHNlIHsKKwkJ CQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzBdOworCQkJfQorCQkJaWYgKHJpeCA+ PSAwKSB7CisJCQkJLyogTkI6IG9ubHkgZG8gdGhpcyBpZiB3ZSBkaWRuJ3QgYWxyZWFkeSBkbyBp dCBhYm92ZSAqLworCQkJCWNvZGUgPSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lzMTFuKG5pKT8g TUNTKDApIDogUkFURSgwKTsKKwkJCQlyY1szXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2Nv ZGVdOworCQkJfSBlbHNlIHsKKwkJCQlyY1szXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzBd OworCQkJfQorCQl9IGVsc2UgeworCQkJcmNbMF0udHJpZXMgPSBJRUVFODAyMTFfUkFURUNUTF9U WE1BWFRSWTsKKworCQkJcmNbMV0udHJpZXMgPSAwOworCQkJcmNbMl0udHJpZXMgPSAwOworCQkJ cmNbM10udHJpZXMgPSAwOworCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFswXTsK KwkJCXJjWzJdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbMF07CisJCQlyY1szXS5yaXggPSBy dC0+cmF0ZUNvZGVUb0luZGV4WzBdOworCQl9CisJfQorCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92 YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJICAgICIlczogQU1SUiByYXRlIHNldHMo cml4LCB0cmllcykuIHJjWzBdOiglZCwgJWQpLCByY1sxXTooJWQsICVkKSwgIiAKKwkJInJjWzJd OiglZCwgJWQpLCByY1szXTooJWQsICVkKSIsIF9fZnVuY19fLCAKKwkJcmNbMF0ucml4LCByY1sw XS50cmllcywKKwkJcmNbMV0ucml4LCByY1sxXS50cmllcywgCisJCXJjWzJdLnJpeCwgcmNbMl0u dHJpZXMsIAorCQlyY1szXS5yaXgsIHJjWzNdLnRyaWVzKTsKKyN1bmRlZiBSQVRFCisjdW5kZWYg TUNTCit9CisKIC8qCiAgKiBVcGRhdGUgc3RhdGlzdGljcyB3aXRoIHR4IGNvbXBsZXRlIHN0YXR1 cy4gIE9rIGlzIG5vbi16ZXJvCiAgKiBpZiB0aGUgcGFja2V0IGlzIGtub3duIHRvIGJlIEFDSydk LiAgUmV0cmllcyBoYXMgdGhlIG51bWJlcgpAQCAtMzM3LDE2ICszODIsMjIgQEAKICAqLwogc3Rh dGljIHZvaWQKIGFtcnJfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw LAotICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywKLSAgICB2b2lk ICphcmcxLCB2b2lkICphcmcyIF9fdW51c2VkKQorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFf bm9kZSAqbmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykKIHsKIAlzdHJ1Y3Qg aWVlZTgwMjExX2FtcnJfbm9kZSAqYW1uID0gbmktPm5pX3JjdGxzOwotCWludCByZXRyaWVzID0g KihpbnQgKilhcmcxOwogCi0JYW1uLT5hbW5fdHhjbnQrKzsKLQlpZiAob2spCi0JCWFtbi0+YW1u X3N1Y2Nlc3MrKzsKLQlhbW4tPmFtbl9yZXRyeWNudCArPSByZXRyaWVzOworCS8qIHVwZGF0ZSBw ZXIgdmFwIHN0YXRpc3RpY3MgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdCh2YXAs IHJjX2luZm8pOworCisJYW1uLT5hbW5fdHhjbnQgKz0gcmNfaW5mby0+aXJpX3R4Y250OworCWFt bi0+YW1uX3N1Y2Nlc3MgKz0gKHJjX2luZm8tPmlyaV90eGNudCAtIHJjX2luZm8tPmlyaV9mYWls Y250KTsKKwlhbW4tPmFtbl9yZXRyeWNudCArPSByY19pbmZvLT5pcmlfcmV0cnljbnQ7CisKKwlJ RUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJICAgICIlczog QU1SUiB0eCBjb21wbGV0ZS4gdHhjbnQ9JWQoJWQpIHN1Y2Nlc3M9JWQoJWQpIHJldHJ5Y250PSVk KCVkKVxuIiwKKwkgICAgX19mdW5jX18sIGFtbi0+YW1uX3R4Y250LCByY19pbmZvLT5pcmlfdHhj bnQsCisJCWFtbi0+YW1uX3N1Y2Nlc3MsIChyY19pbmZvLT5pcmlfdHhjbnQgLSByY19pbmZvLT5p cmlfZmFpbGNudCksCisJCWFtbi0+YW1uX3JldHJ5Y250LCByY19pbmZvLT5pcmlfcmV0cnljbnQp OwogfQogCiAvKgpAQCAtMzY0LDggKzQxNSwyMSBAQAogCWFtbi0+YW1uX3R4Y250ID0gdHhjbnQ7 CiAJYW1uLT5hbW5fc3VjY2VzcyA9IHN1Y2Nlc3M7CiAJYW1uLT5hbW5fcmV0cnljbnQgPSByZXRy eWNudDsKKwlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJ ICAgICIlczogQU1SUiB0eCB1cGRhdGUuIHR4Y250PSVkIHN1Y2Nlc3M9JWQgcmV0cnljbnQ9JWRc biIsCisJICAgIF9fZnVuY19fLCB0eGNudCwgc3VjY2VzcywgcmV0cnljbnQpOwogfQogCitzdGF0 aWMgdm9pZAorYW1ycl9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCit7CisJ c3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2 YXApOworCXByaW50ZigidHggY291bnQ6ICVkIChvayBjb3VudDogJWQsIGZhaWwgY291bnQ6ICVk KVxuIgorCQkJInJldHJ5IGNvdW50OiAlZCAoc2hvcnQgcmV0cnk6ICVkLCBsb25nIHJldHJ5OiAl ZClcbiIsCisJCQlpcnMtPmlyc190eGNudCwgaXJzLT5pcnNfdHhjbnQgLSBpcnMtPmlyc19mYWls Y250LCBpcnMtPmlyc19mYWlsY250LAorCQkJaXJzLT5pcnNfcmV0cnljbnQsIGlycy0+aXJzX3No b3J0cmV0cnksIGlycy0+aXJzX2xvbmdyZXRyeSk7Cit9CisKIHN0YXRpYyBpbnQKIGFtcnJfc3lz Y3RsX2ludGVydmFsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCiB7CkluZGV4OiBuZXQ4MDIxMS9pZWVl ODAyMTFfcmF0ZWN0bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3Rs LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmMJKHdv cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKi0KICAqIENvcHlyaWdodCAoYykgMjAxMCBS dWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVu Y2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CkBAIC00OSw2ICs1MCw0MCBAQAogCiBNQUxMT0NfREVGSU5FKE1fODAy MTFfUkFURUNUTCwgIjgwMjExcmF0ZWN0bCIsICI4MDIuMTEgcmF0ZSBjb250cm9sIik7CiAKK2Vu dW0geworCU1DU19IVDIwLAorCU1DU19IVDIwX1NHSSwKKwlNQ1NfSFQ0MCwKKwlNQ1NfSFQ0MF9T R0ksCit9OworCitpbnQgbWF4XzRtc19mcmFtZWxlbls0XVszMl0gPSB7CisJW01DU19IVDIwXSA9 IHsKKwkJMzIxMiwgIDY0MzIsICA5NjQ4LCAgMTI4NjQsICAxOTMwMCwgIDI1NzM2LCAgMjg5NTIs ICAzMjE3MiwKKwkJNjQyNCwgIDEyODUyLCAxOTI4MCwgMjU3MDgsICAzODU2OCwgIDUxNDI0LCAg NTc4NTIsICA2NDI4MCwKKwkJOTYyOCwgIDE5MjYwLCAyODg5NiwgMzg1MjgsICA1Nzc5MiwgIDY1 NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMTI4MjgsIDI1NjU2LCAzODQ4OCwgNTEzMjAsICA2NTUz MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQyMF9TR0ldID0geworCQkz NTcyLCAgNzE0NCwgIDEwNzIwLCAgMTQyOTYsICAyMTQ0NCwgIDI4NTk2LCAgMzIxNzIsICAzNTc0 NCwKKwkJNzE0MCwgIDE0Mjg0LCAyMTQyOCwgIDI4NTY4LCAgNDI4NTYsICA1NzE0NCwgIDY0Mjg4 LCAgNjU1MzIsCisJCTEwNzAwLCAyMTQwOCwgMzIxMTIsICA0MjgxNiwgIDY0MjI4LCAgNjU1MzIs ICA2NTUzMiwgIDY1NTMyLAorCQkxNDI1NiwgMjg1MTYsIDQyNzgwLCAgNTcwNDAsICA2NTUzMiwg IDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF0gPSB7CisJCTY2ODAsICAx MzM2MCwgIDIwMDQ0LCAgMjY3MjQsICA0MDA5MiwgIDUzNDU2LCAgNjAxNDAsICA2NTUzMiwKKwkJ MTMzNDgsIDI2NzAwLCAgNDAwNTIsICA1MzQwMCwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1 NTMyLAorCQkyMDAwNCwgNDAwMDgsICA2MDAxNiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1 NTMyLCAgNjU1MzIsCisJCTI2NjQ0LCA1MzI5MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1 NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAorCVtNQ1NfSFQ0MF9TR0ldID0geworCQk3NDIwLCAg MTQ4NDQsICAyMjI3MiwgIDI5Njk2LCAgNDQ1NDQsICA1OTM5NiwgIDY1NTMyLCAgNjU1MzIsCisJ CTE0ODMyLCAyOTY2OCwgIDQ0NTA0LCAgNTkzNDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2 NTUzMiwKKwkJMjIyMzIsIDQ0NDY0LCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2 NTUzMiwgIDY1NTMyLAorCQkyOTYxNiwgNTkyMzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2 NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJfQorfTsKKwogdm9pZAogaWVlZTgwMjExX3JhdGVjdGxf cmVnaXN0ZXIoaW50IHR5cGUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCAqcmF0ZWN0 bCkKIHsKQEAgLTY1LDEyICsxMDAsMzYgQEAKIAlyYXRlY3Rsc1t0eXBlXSA9IE5VTEw7CiB9CiAK K3N0YXRpYyBpbnQKK3JhdGVjdGxfc3lzY3RsX3N0YXRzKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7 CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlpbnQgZXJyb3IsIHY7CisKKwl2 ID0gMDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ2LCAwLCByZXEpOworCWlm IChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKworCWllZWU4MDIxMV9y YXRlY3RsX3N0YXRzKHZhcCk7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQKLWllZWU4MDIxMV9yYXRl Y3RsX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQoraWVlZTgwMjExX3JhdGVjdGxfaW5p dChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxpdGllcykKIHsKIAlp ZiAodmFwLT5pdl9yYXRlID09IHJhdGVjdGxzW0lFRUU4MDIxMV9SQVRFQ1RMX05PTkVdKQogCQlp ZWVlODAyMTFfcmF0ZWN0bF9zZXQodmFwLCBJRUVFODAyMTFfUkFURUNUTF9BTVJSKTsKLQl2YXAt Pml2X3JhdGUtPmlyX2luaXQodmFwKTsKKwl2YXAtPml2X3JhdGUtPmlyX2luaXQodmFwLCBjYXBh YmlsaXRpZXMpOworCisJU1lTQ1RMX0FERF9QUk9DKHZhcC0+aXZfc3lzY3RsLCBTWVNDVExfQ0hJ TERSRU4odmFwLT5pdl9vaWQpLCAKKwkJCU9JRF9BVVRPLCAicmF0ZWN0bF9zdGF0cyIsIENUTFRZ UEVfSU5UIHwgQ1RMRkxBR19SVywgCisJCQl2YXAsIDAsIHJhdGVjdGxfc3lzY3RsX3N0YXRzLCAi SSIsIAorCQkJInBlci12YXAgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0aWNzIik7CisKKwlJRUVF ODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkgICAgIiVzOiByYXRl Y3RsIGluaXRpYWxpemVkLiBjYXBzPTB4JTA4eFxuIiwKKwkgICAgX19mdW5jX18sIGNhcGFiaWxp dGllcyk7CiB9CiAKIHZvaWQKQEAgLTkwLDMgKzE0OSwxMTAgQEAKIAl9CiAJdmFwLT5pdl9yYXRl ID0gcmF0ZWN0bHNbdHlwZV07CiB9CisKK3ZvaWQKK2llZWU4MDIxMV9yYXRlY3RsX2NvbXBsZXRl X3JjZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKKwkJc3RydWN0IGllZWU4MDIxMV9y Y19pbmZvICpyY19pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92 YXA7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOwor CWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqIHJ0ID0gTlVMTDsKKwl1aW50OF90 IHJhdGU7CisJaW50IGk7CisKKwlydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKG5pLT5uaV9p Yy0+aWNfY3VyY2hhbik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCByYXRlIGNvbnRyb2wgY29kZSBk b2Vzbid0IG1lc3MgaXQgdXAuCisJICogSWYgZW5hYmxlIHJ0cy9jdHMgYW5kIGlzIHByZS04MDIu MTFuLCBibGFuayB0cmllcyAxLCAyLCAzIAorCSAqLworCisJaWYgKCEgSUVFRTgwMjExX1JBVEVD VExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwl7CisJCWZvciAoaSA9IDE7IGkgPCBJRUVFODAyMTFf UkFURUNUTF9OVU07IGkrKykKKwkJeworCQkJaWYgKHJjWzBdLmZsYWdzICYgSUVFRTgwMjExX1JB VEVDVExfRkxBR19SVFNDVFMpCisJCQkJcmNbaV0udHJpZXMgPSAwOworCQkJcmNbaV0uZmxhZ3Mg Jj0gfklFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfUlRTQ1RTOyAKKwkJfQorCX0KKworCWZvciAoaSA9 IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykgeworCQkKKwkJaWYgKHJjW2ldLnRy aWVzID09IDApCisJCQljb250aW51ZTsKKworCQlyYXRlID0gcnQtPmluZm9bcmNbaV0ucml4XS5k b3QxMVJhdGU7CisKKwkJLyogT25seSBlbmFibGUgZHVhbC1zdHJlYW0sIHNob3J0Z2ksIDIwNDAg aWYgSFQgaXMgc2V0ICovCisKKwkJaWYgKElTX0hUX1JBVEUocmF0ZSkpIHsKKwkJCXJjW2ldLmZs YWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfSFQ7CisKKwkJCWlmIChpZWVlODAyMTFfcmF0 ZWN0bF9oYXNjYXBfY3c0MChuaSkpCisJCQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVD VExfRkxBR19DVzQwOworCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3Nob3J0Z2ko bmkpKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU0dJOworCQkJ LyoKKwkJCSAqIElmIHdlIGhhdmUgU1RCQyBUWCBlbmFibGVkIGFuZCB0aGUgcmVjZWl2ZXIKKwkJ CSAqIGNhbiByZWNlaXZlIChhdCBsZWFzdCkgMSBzdHJlYW0gU1RCQywgQU5EIGl0J3MKKwkJCSAq IE1DUyAwLTcsIEFORCB3ZSBoYXZlIGF0IGxlYXN0IHR3byBjaGFpbnMgZW5hYmxlZCwKKwkJCSAq IGVuYWJsZSBTVEJDLgorCQkJICovCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0 YmMobmkpICYmCisJCQkJKHJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpIDwgOCAmJgorCQkJCUhU X1JDXzJfU1RSRUFNUyhyYXRlKSA9PSAxKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9S QVRFQ1RMX0ZMQUdfU1RCQzsKKwkJCQorCQkJLyoKKwkJCSAqIER1YWwgLyBUcmlwbGUgc3RyZWFt IHJhdGU/CisJCQkgKi8KKwkJCWlmIChIVF9SQ18yX1NUUkVBTVMocmF0ZSkgPT0gMikKKwkJCQly Y1tpXS5mbGFncyB8PSBJRUVFODAyMTFfUkFURUNUTF9GTEFHX0RTOworCQkJZWxzZSBpZiAoSFRf UkNfMl9TVFJFQU1TKHJhdGUpID09IDMpCisJCQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JB VEVDVExfRkxBR19UUzsKKworCQkJLyoKKwkJCSAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSA0bXMg ZnJhbWUgbGVuZ3RoIGJhc2VkCisJCQkgKiBvbiB0aGUgTUNTIHJhdGUsIFNHSSBhbmQgY2hhbm5l bCB3aWR0aCBmbGFncy4KKwkJCSAqLworCQkJaWYgKEhUX1JDXzJfTUNTKHJhdGUpIDwgMzIpIHsK KwkJCQlpbnQgajsKKwkJCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9GTEFH X0NXNDApIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19T R0kpCisJCQkJCQlqID0gTUNTX0hUNDBfU0dJOworCQkJCQllbHNlCisJCQkJCQlqID0gTUNTX0hU NDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVD VExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNTX0hUMjBfU0dJOworCQkJCQllbHNlCisJCQkJCQlq ID0gTUNTX0hUMjA7CisJCQkJfQorCQkJCXJjW2ldLm1heDRtc2ZyYW1lbGVuID0KKwkJCQkgICAg bWF4XzRtc19mcmFtZWxlbltqXVtIVF9SQ18yX01DUyhyYXRlKV07CisJCQl9CisJCX0gZWxzZSB7 CisJCQlyY1tpXS5tYXg0bXNmcmFtZWxlbiA9IDA7CisKKwkJCS8qCisJCQkgKiBPbmx5IGVuYWJs ZSBzaG9ydCBwcmVhbWJsZSBmb3IgbGVnYWN5IHJhdGVzCisJCQkgKi8KKwkJCWlmIChyY19pbmZv LT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9JTkZPX1NQKQorCQkJCXJjW2ldLmZsYWdz IHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1A7CisJCX0KKworCQkvKgorCQkgKiBDYWxjdWxh dGUgdGhlIG1heGltdW0gVFggcG93ZXIgY2FwIGZvciB0aGUgY3VycmVudAorCQkgKiBub2RlLiAK KwkJICogUmF0ZSBjb250cm9sIGFsZ28gY2FuJ3QgY29udHJvbCBUWCBwb3dlciBieSBub3cuCisJ CSAqLworCQlyY1tpXS50eF9wb3dlcl9jYXAgPSBpZWVlODAyMTFfZ2V0X25vZGVfdHhwb3dlcihu aSk7CisJCQorCX0KKwlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JB VEVDVEwsIG5pLAorCSAgICAiJXM6IGZsYWdzOiByY1swXToweCUwOHgsIHJjWzFdOjB4JTA4eCwg IgorCQkicmNbMl06MHglMDh4LCByY1szXToweCUwOHhcbiIsIF9fZnVuY19fLCAKKwkJcmNbMF0u ZmxhZ3MsIHJjWzFdLmZsYWdzLCByY1syXS5mbGFncywgcmNbM10uZmxhZ3MpOworfQorCkluZGV4 OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2ll ZWU4MDIxMV9yYXRlY3RsLmgJKHJldmlzaW9uIDI1NDgyNikKKysrIG5ldDgwMjExL2llZWU4MDIx MV9yYXRlY3RsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKi0KICAqIENvcHly aWdodCAoYykgMjAxMCBSdWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdo dCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCw2ICsyNSw4IEBACiAgKgogICog JEZyZWVCU0QkCiAgKi8KKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX0hfCisj ZGVmaW5lIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9IXwogCiBlbnVtIGllZWU4MDIxMV9y YXRlYWxncyB7CiAJSUVFRTgwMjExX1JBVEVDVExfQU1SUgkJPSAwLApAQCAtMzcsMjggKzQwLDEx NSBAQAogI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTCTEKICNkZWZpbmUJSUVF RTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRQkwCiAKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExf VFJVRQkJMQorI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GQUxTRQkJMAorCisjZGVmaW5lCUlF RUU4MDIxMV9SQVRFQ1RMX05VTQkJNAorI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9UWE1BWFRS WQkxMQorCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfRFMJCTB4MDEJLyogZHVhbC1z dHJlYW0gcmF0ZSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX0NXNDAJCTB4MDIJ LyogdXNlIEhUNDAgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kJCTB4MDQJ LyogdXNlIHNob3J0LUdJICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfSFQJCTB4 MDgJLyogdXNlIEhUICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfUlRTQ1RTCTB4 MTAJLyogZW5hYmxlIFJUUy9DVFMgcHJvdGVjdGlvbiAqLworI2RlZmluZQlJRUVFODAyMTFfUkFU RUNUTF9GTEFHX1NUQkMJCTB4MjAJLyogZW5hYmxlIFNUQkMgKi8KKyNkZWZpbmUJSUVFRTgwMjEx X1JBVEVDVExfRkxBR19UUwkJMHg0MAkvKiB0cmlwbGUtc3RyZWFtIHJhdGUgKi8KKyNkZWZpbmUJ SUVFRTgwMjExX1JBVEVDVExfRkxBR19TUAkJMHg4MAkvKiBzaG9ydCBwcmVhbWJsZSAqLworCisv KiBIYXJkd2FyZSBDQVBzIG9mZmVyZWQgdG8gcmF0ZSBjb250cm9sIGFsZ28gKi8KKyNkZWZpbmUJ SUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUgkJCTB4MDEJLyogc3VwcG9ydCBNUlIgKi8KKyNkZWZp bmUJSUVFRTgwMjExX1JBVEVDVExfQ0FQX01SUlBST1QJCTB4MDIJLyogc3VwcG9ydCBNUlIgKyBw cm90ZWN0ICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NVUxUWENIQUlOCTB4MDQJ LyogaGFzIG1vcmUgdGhhbiAxIHR4Y2hhaW4gKi8KKworI2RlZmluZSBJU19WQVBfSFQodmFwKQko KHZhcCktPml2X2h0Y2FwcyAmIElFRUU4MDIxMV9IVENfSFQpCisjZGVmaW5lIElTX0hUX1JBVEUo X3JhdGUpICAgKChfcmF0ZSkgJiAweDgwKQorI2RlZmluZSBIVF9SQ18yX01DUyhfcmMpICAgICgo X3JjKSAmIDB4N2YpCisjZGVmaW5lIEhUX1JDXzJfU1RSRUFNUyhfcmMpICAgICgoKChfcmMpICYg MHg3OCkgPj4gMykgKyAxKQorCitleHRlcm4gaW50IG1heF80bXNfZnJhbWVsZW5bNF1bMzJdOwor CitzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyB7CisJdWludDhfdCByaXg7CQkvKiByYXRldGFi bGUgaW5kZXgsIG5vdCByYXRlIGNvZGUgKi8KKwl1aW50OF90IHJhdGVjb2RlOwkvKiBoYXJkd2Fy ZSByYXRlIGNvZGUgKi8KKwl1aW50OF90IHRyaWVzOworCXVpbnQ4X3QgdHhfcG93ZXJfY2FwOwor CXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IG1heDRtc2ZyYW1lbGVuOworfTsKKworc3RydWN0 IGllZWU4MDIxMV9yY19pbmZvIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyBpcmlfcmNb SUVFRTgwMjExX1JBVEVDVExfTlVNXTsKKwl1aW50MzJfdCBpcmlfZnJhbWVsZW47CisJdWludDE2 X3QgaXJpX2ZsYWdzOwkJCS8qIFNlZSBiZWxvdyAqLworCXVpbnQxNl90IGlyaV9tYXhhZ2dyc2l6 ZTsJLyogTWF4aW11bSBhZ2dyZWdhdGUgc2l6ZSAqLworCisJLyogVFggaW5mbyAqLworCXVpbnQ4 X3QgaXJpX3R4Y250OwkJCS8qIFRYIGNvdW50ICovCisJdWludDhfdCBpcmlfZmFpbGNudDsJCS8q IFRYIHJldHJ5LWZhaWwgY291bnQgKi8KKwl1aW50OF90IGlyaV9va2NudDsJCQkvKiBUWCBvayB3 aXRoIG9yIHdpdGhvdXQgcmV0cnkgKi8KKwl1aW50OF90IGlyaV9yZXRyeWNudDsJCS8qIFRYIHJl dHJ5IGNvdW50ICovCisJdWludDhfdCBpcmlfc2hvcnRyZXRyeTsKKwl1aW50OF90IGlyaV9sb25n cmV0cnk7CisJdWludDhfdCBpcmlfZmluYWx0c2k7CisJdWludDhfdCBpcmlfdHhyYXRlOwkJCS8q IEhXIHR4IHJhdGUgKi8KK307CisKKy8qIGllZWU4MDIxMV9yY19pbmZvIGZsYWdzICovCisjZGVm aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0lORk9fU1AJCTB4MDEJLyogc2hvcnQgcHJlYW1ibGUgKi8K KyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSCQkweDAyCS8qIGFnZ3JlZ2F0aW9u IHNjZW5hcmlvICovCisKKyNkZWZpbmUgTkVUODAyMTFfVEFHX1JBVEVDVEwgICAxICAgLyogbmV0 ODAyMTEgcmF0ZWN0bCBzdGF0ZSAqLworCisvKgorICogbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0 aWNzLiAKKyAqIHBlciB2YXAgcmF0ZWN0bCBzZWV0aW5nIG11c3Qgc3RhcnQgd2l0aCB0aGlzIGNv bW1vbiBzdGF0ZS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9yY19zdGF0IHsKKwl1aW50MzJfdCBp cnNfY2FwYWJpbGl0aWVzOwkJLyogaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9mZmVyZWQgdG8gcmMg Ki8KKworCS8qIHJhdGVjdGwgc3RhdGlzdGljcyAqLworCXVpbnQzMl90IGlyc190eGNudDsKKwl1 aW50MzJfdCBpcnNfZmFpbGNudDsKKwl1aW50MzJfdCBpcnNfcmV0cnljbnQ7CisJdWludDMyX3Qg aXJzX3Nob3J0cmV0cnk7CisJdWludDMyX3QgaXJzX2xvbmdyZXRyeTsKK307CisKKyNkZWZpbmUg SUVFRTgwMjExX1JBVEVDVExfU1RBVChfdmFwKSBcCisJKChzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0 YXQgKikoKF92YXApLT5pdl9ycykpCisKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQ X01SUihfdmFwKSBcCisJKElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3ZhcCktPmlyc19jYXBhYmls aXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSKQorI2RlZmluZQlJRUVFODAyMTFfUkFU RUNUTF9IQVNDQVBfTVJSUFJPVChfdmFwKSBcCisJKElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3Zh cCktPmlyc19jYXBhYmlsaXRpZXMgJiBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSUFJPVCkKKyNk ZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hBSU4oX3ZhcCkgXAorCShJRUVF ODAyMTFfUkFURUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVzICYgSUVFRTgwMjExX1JB VEVDVExfQ0FQX01VTFRYQ0hBSU4pCisKIHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCB7CiAJY29u c3QgY2hhciAqaXJfbmFtZTsKIAlpbnQJKCppcl9hdHRhY2gpKGNvbnN0IHN0cnVjdCBpZWVlODAy MTF2YXAgKik7CiAJdm9pZAkoKmlyX2RldGFjaCkoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAq KTsKLQl2b2lkCSgqaXJfaW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKKwl2b2lkCSgqaXJf aW5pdCkoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiAJdm9pZAkoKmlyX2RlaW5p dCkoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIAl2b2lkCSgqaXJfbm9kZV9pbml0KShzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKik7CiAJdm9pZAkoKmlyX25vZGVfZGVpbml0KShzdHJ1Y3QgaWVlZTgw MjExX25vZGUgKik7CiAJaW50CSgqaXJfcmF0ZSkoc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHZv aWQgKiwgdWludDMyX3QpOworCXZvaWQJKCppcl9yYXRlcykoc3RydWN0IGllZWU4MDIxMV9ub2Rl ICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIAl2b2lkCSgqaXJfdHhfY29tcGxldGUp KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwKLQkgICAgCQkJICBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX25vZGUgKiwgaW50LAotCSAgICAJCQkgIHZvaWQgKiwgdm9pZCAqKTsKKwkgICAgCQkJ ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZv ICopOwogCXZvaWQJKCppcl90eF91cGRhdGUpKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwK IAkgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosCiAJICAgIAkJCXZvaWQgKiwg dm9pZCAqLCB2b2lkICopOwogCXZvaWQJKCppcl9zZXRpbnRlcnZhbCkoY29uc3Qgc3RydWN0IGll ZWU4MDIxMXZhcCAqLCBpbnQpOworCXZvaWQJKCppcl9zdGF0cykoY29uc3Qgc3RydWN0IGllZWU4 MDIxMXZhcCAqKTsKIH07CiAKIHZvaWQJaWVlZTgwMjExX3JhdGVjdGxfcmVnaXN0ZXIoaW50LCBj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVjdGwgKik7CiB2b2lkCWllZWU4MDIxMV9yYXRlY3Rs X3VucmVnaXN0ZXIoaW50KTsKLXZvaWQJaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVl ZTgwMjExdmFwICopOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHN0cnVjdCBpZWVlODAy MTF2YXAgKiwgdWludDMyX3QpOwogdm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9zZXQoc3RydWN0IGll ZWU4MDIxMXZhcCAqLCBpbnQpOwordm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9jb21wbGV0ZV9yY2Zs YWdzKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCAKKwkJCQkJCXN0cnVjdCBpZWVlODAyMTFfcmNf aW5mbyopOwogCiBNQUxMT0NfREVDTEFSRShNXzgwMjExX1JBVEVDVEwpOwogCkBAIC03NCw2ICsx NjQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CiAK IAl2YXAtPml2X3JhdGUtPmlyX25vZGVfaW5pdChuaSk7CisJSUVFRTgwMjExX0RQUklOVEYodmFw LCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IG5ldDgwMjExIHJhdGVjdGwgbm9kZSBp bml0ZWQuXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5saW5lCkBAIC04Miw2 ICsxNzQsOCBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7 CiAKIAl2YXAtPml2X3JhdGUtPmlyX25vZGVfZGVpbml0KG5pKTsKKwlJRUVFODAyMTFfRFBSSU5U Rih2YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJCSIlczogbmV0ODAyMTEgcmF0ZWN0bCBu b2RlIGRlaW5pdGVkLlxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IF9faW5saW5lCkBA IC05MywxMCArMTg3LDI2IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5saW5lCitpZWVlODAyMTFf cmF0ZWN0bF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjEx X3JjX2luZm8gKnJjX2luZm8pCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0g bmktPm5pX3ZhcDsKKworCWlmIChyY19pbmZvLT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNU TF9JTkZPX0FHR1IpIAorCQlyY19pbmZvLT5pcmlfZnJhbWVsZW4gPSAwOworCisJSUVFRTgwMjEx X0RQUklOVEYodmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkiJXM6IGZpbmQgcmF0ZSBz ZXRzIGZvciAlc2FnZ3JlZ2F0aW9uIHNjZW5hcmlvLlxuIiwgX19mdW5jX18sIAorCQkJKHJjX2lu Zm8tPmlyaV9mbGFncyAmIElFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUik/ICIiIDogIm5vbi0i KTsKKworCXZhcC0+aXZfcmF0ZS0+aXJfcmF0ZXMobmksIHJjX2luZm8pOworCWllZWU4MDIxMV9y YXRlY3RsX2NvbXBsZXRlX3JjZmxhZ3MobmksIHJjX2luZm8pOworfQorCitzdGF0aWMgdm9pZCBf X2lubGluZQogaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4 MDIxMXZhcCAqdmFwLAotICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBz dGF0dXMsIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpCisgICAgY29uc3Qgc3RydWN0IGllZWU4MDIx MV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQogewotCXZhcC0+ aXZfcmF0ZS0+aXJfdHhfY29tcGxldGUodmFwLCBuaSwgc3RhdHVzLCBhcmcxLCBhcmcyKTsKKwl2 YXAtPml2X3JhdGUtPmlyX3R4X2NvbXBsZXRlKHZhcCwgbmksIHJjX2luZm8pOwogfQogCiBzdGF0 aWMgdm9pZCBfX2lubGluZQpAQCAtMTE1LDMgKzIyNSwxMzUgQEAKIAkJcmV0dXJuOwogCXZhcC0+ aXZfcmF0ZS0+aXJfc2V0aW50ZXJ2YWwodmFwLCBtc2Vjcyk7CiB9CisKK3N0YXRpYyB2b2lkIF9f aW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFw ICp2YXApCit7CisJcHJpbnRmKCJcblslc106IG5ldDgwMjExIHJhdGVjdGwgc3RhdGlzdGljcyAo JXMpXG4iLCAKKwkJCXZhcC0+aXZfaWZwLT5pZl94bmFtZSwgdmFwLT5pdl9yYXRlLT5pcl9uYW1l KTsKKwlpZiAodmFwLT5pdl9yYXRlLT5pcl9zdGF0cyA9PSBOVUxMKQorCQlyZXR1cm47CisJdmFw LT5pdl9yYXRlLT5pcl9zdGF0cyh2YXApOworfQorCitzdGF0aWMgaW50IF9faW5saW5lCitpZWVl ODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p KQoreworCXJldHVybiBuaS0+bmlfY2h3ID09IDQwOworfQorCitzdGF0aWMgaW50IF9faW5saW5l CitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfc2hvcnRnaShjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx X25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOworCisJ aWYgKG5pLT5uaV9jaHcgPT0gNDAgJiYKKwkJaWMtPmljX2h0Y2FwcyAmIElFRUU4MDIxMV9IVENB UF9TSE9SVEdJNDAgJiYKKwkJbmktPm5pX2h0Y2FwICYgSUVFRTgwMjExX0hUQ0FQX1NIT1JUR0k0 MCkKKwkJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX1RSVUU7CisKKwlpZiAobmktPm5pX2NodyA9 PSAyMCAmJgorCQlpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hUQ0FQX1NIT1JUR0kyMCAmJgor CQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRHSTIwKQorCQlyZXR1cm4gSUVF RTgwMjExX1JBVEVDVExfVFJVRTsKKworCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9GQUxTRTsK K30KKworc3RhdGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0YmMo Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExY29t ICppYyA9IG5pLT5uaV9pYzsKKworCWlmIChpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hUQ0FQ X1RYU1RCQyAmJgorCQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfUlhTVEJDXzFTVFJF QU0gJiYKKwkJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01VTFRYQ0hBSU4obmktPm5pX3ZhcCkp CisJCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9UUlVFOworCQorCXJldHVybiBJRUVFODAyMTFf UkFURUNUTF9GQUxTRTsKK30KKworc3RhdGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVj dGxfbm9kZV9pczExbihjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCWlmIChu aS0+bmlfY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCWlmIChuaS0+bmlfY2hhbiA9PSBJ RUVFODAyMTFfQ0hBTl9BTllDKQorCQlyZXR1cm4gKDApOworCXJldHVybiAoSUVFRTgwMjExX0lT X0NIQU5fSFQobmktPm5pX2NoYW4pKTsKK30KKworX19pbmxpbmUgc3RhdGljIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfcmF0ZXNldCAqCitpZWVlODAyMTFfcmF0ZWN0bF9nZXRfcmF0ZXNldChjb25z dCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFf cmF0ZXNldCAqcnMgPSBOVUxMOworCS8qIDExbiBvciBub3Q/IFBpY2sgdGhlIHJpZ2h0IHJhdGVz ZXQgKi8KKwlpZiAoaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSkpIHsKKwkJSUVFRTgw MjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkiJXM6 IDExbiBub2RlIiwgX19mdW5jX18pOworCQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQg KikgJm5pLT5uaV9odHJhdGVzOworCX0gZWxzZSB7CisJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92 YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkgICAgIiVzOiBub24tMTFuIG5vZGUi LCBfX2Z1bmNfXyk7CisJCXJzID0gJm5pLT5uaV9yYXRlczsKKwl9CisJcmV0dXJuIHJzOworfQor CitzdGF0aWMgdm9pZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfdXBkYXRlX3N0YXQoY29u c3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jj X2luZm8gKnJjX2luZm8pCit7CisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0gSUVF RTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX3R4Y250ICs9IHJjX2luZm8tPmly aV90eGNudDsKKwlpcnMtPmlyc19mYWlsY250ICs9IHJjX2luZm8tPmlyaV9mYWlsY250OworCWly cy0+aXJzX3JldHJ5Y250ICs9IHJjX2luZm8tPmlyaV9yZXRyeWNudDsKKwlpcnMtPmlyc19zaG9y dHJldHJ5ICs9IHJjX2luZm8tPmlyaV9zaG9ydHJldHJ5OworCWlycy0+aXJzX2xvbmdyZXRyeSAr PSByY19pbmZvLT5pcmlfbG9uZ3JldHJ5OworfQorCitzdGF0aWMgdm9pZCBfX2lubGluZQoraWVl ZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p bmZvLAorCQl1aW50OF90IHR4Y250LCB1aW50OF90IGZhaWxjbnQsIHVpbnQzMl90IGZyYW1lbGVu LAorCQl1aW50OF90IHNob3J0cmV0cnksIHVpbnQ4X3QgbG9uZ3JldHJ5LAorCQl1aW50OF90IGZp bmFsdHNpLCB1aW50OF90IHR4cmF0ZSkKK3sKKwlyY19pbmZvLT5pcmlfdHhjbnQgPSB0eGNudDsK KwlyY19pbmZvLT5pcmlfZmFpbGNudCA9IGZhaWxjbnQ7CisJcmNfaW5mby0+aXJpX29rY250ID0g dHhjbnQgLSBmYWlsY250OworCXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9IGZyYW1lbGVuOworCXJj X2luZm8tPmlyaV9zaG9ydHJldHJ5ID0gc2hvcnRyZXRyeTsKKwlyY19pbmZvLT5pcmlfbG9uZ3Jl dHJ5ID0gbG9uZ3JldHJ5OworCXJjX2luZm8tPmlyaV9yZXRyeWNudCA9IHNob3J0cmV0cnkgKyBs b25ncmV0cnk7CisJcmNfaW5mby0+aXJpX2ZpbmFsdHNpID0gZmluYWx0c2k7CisJcmNfaW5mby0+ aXJpX3R4cmF0ZSA9IHR4cmF0ZTsKK30KKworX19pbmxpbmUgc3RhdGljIHN0cnVjdCBpZWVlODAy MTFfcmNfaW5mbyAqCitpZWVlODAyMTFfcmF0ZWN0bF9yY19pbmZvX2dldChzdHJ1Y3QgaWVlZTgw MjExX25vZGUgKm5pLAorCQlzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlzdHJ1Y3QgbV90YWcgKm10YWc7 CisKKyAgICBtdGFnID0gbV90YWdfbG9jYXRlKG0sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5F VDgwMjExX1RBR19SQVRFQ1RMLCBOVUxMKTsKKworCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAs IElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkiJXM6ICVzcmF0ZWN0bCBtYnVmIHRhZyBm b3VuZC5cbiIsIF9fZnVuY19fLCAKKwkJCShOVUxMID09IG10YWc/ICJubyAiOiIiKSk7CithZ2Fp bjoKKwlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCW10YWcgPSBtX3RhZ19hbGxvYyhNVEFHX0FCSV9O RVQ4MDIxMSwgTkVUODAyMTFfVEFHX1JBVEVDVEwsCisJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAy MTFfcmNfaW5mbyksIE1fTk9XQUlUKTsKKwkJaWYgKE5VTEwgPT0gbXRhZykgeworCQkJSUVFRTgw MjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkJIiVz OiBjYW4ndCBhbGxvYyBtYnVmIHRhZyBmb3IgcmF0ZWN0bC5cbiIsIF9fZnVuY19fKTsKKwkJCWdv dG8gYWdhaW47CisJCX0KKwkJYnplcm8obXRhZyArIDEsIG10YWctPm1fdGFnX2xlbik7CisJCW1f dGFnX3ByZXBlbmQobSwgbXRhZyk7CisJfQorCXJldHVybiAoc3RydWN0IGllZWU4MDIxMV9yY19p bmZvKikobXRhZyArIDEpOworfQorCisjZW5kaWYKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9m cmVlYnNkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuYwkocmV2 aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuYwkod29ya2luZyBj b3B5KQpAQCAtMjYyLDcgKzI2Miw5IEBACiAJCSJkcml2ZXJfY2FwcyIsIENUTEZMQUdfUlcsICZ2 YXAtPml2X2NhcHMsIDAsCiAJCSJkcml2ZXIgY2FwYWJpbGl0aWVzIik7CiAjaWZkZWYgSUVFRTgw MjExX0RFQlVHCisJaWVlZTgwMjExX2RlYnVnIHw9IChJRUVFODAyMTFfTVNHX1JBVEVDVEx8SUVF RTgwMjExX01TR19OT0RFfElFRUU4MDIxMV9NU0dfU0NBTik7CiAJdmFwLT5pdl9kZWJ1ZyA9IGll ZWU4MDIxMV9kZWJ1ZzsKKwlpZl9wcmludGYoaWZwLCAiJXM6IGl2X2RlYnVnPTB4JTA4eFxuIiwg X19mdW5jX18sIHZhcC0+aXZfZGVidWcpOwogCVNZU0NUTF9BRERfVUlOVChjdHgsIFNZU0NUTF9D SElMRFJFTihvaWQpLCBPSURfQVVUTywKIAkJImRlYnVnIiwgQ1RMRkxBR19SVywgJnZhcC0+aXZf ZGVidWcsIDAsCiAJCSJjb250cm9sIGRlYnVnZ2luZyBwcmludGZzIik7CkluZGV4OiBuZXQ4MDIx MS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgw MjExX3JhdGVjdGxfbm9uZS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIxMS9pZWVlODAy MTFfcmF0ZWN0bF9ub25lLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwyNiBAQAogCiAj aW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2ll ZWU4MDIxMV9yYXRlY3RsLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxf bm9uZS5oPgogCiBzdGF0aWMgdm9pZAotbm9uZV9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh cCkKK25vbmVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxp dGllcykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5vbmU7CisKKwlLQVNTRVJUKHZhcC0+ aXZfcnMgPT0gTlVMTCwgKCIlcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMiLCBfX2Z1bmNfXykpOwor CisJbm9uZSA9IHZhcC0+aXZfcnMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbm9u ZSksCisJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwlpZiAobm9uZSA9 PSBOVUxMKSB7CisJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHJhdGVj dGwgc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0cnVjdCBpZWVlODAyMTFfcmNf c3RhdCAqIGlycyA9IElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmlyc19jYXBh YmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7CisKKwkvKiAuLi4gKi8KIH0KIAogc3RhdGljIHZvaWQK QEAgLTU5LDYgKzc1LDI1IEBACiBzdGF0aWMgdm9pZAogbm9uZV9ub2RlX2luaXQoc3RydWN0IGll ZWU4MDIxMV9ub2RlICpuaSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlf dmFwOworCXN0cnVjdCBpZWVlODAyMTFfbm9uZSAqbm9uZSA9IHZhcC0+aXZfcnM7CisJc3RydWN0 IGllZWU4MDIxMV9ub25lX25vZGUgKm5vbjsKKworCWlmIChuaS0+bmlfcmN0bHMgPT0gTlVMTCkg eworCQluaS0+bmlfcmN0bHMgPSBub24gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFf bm9uZV9ub2RlKSwKKwkJICAgIE1fODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJ aWYgKG5vbiA9PSBOVUxMKSB7CisJCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBh bGxvYyBwZXItbm9kZSByYXRlY3RsICIKKwkJCSAgICAic3RydWN0dXJlXG4iKTsKKwkJCXJldHVy bjsKKwkJfQorCX0gZWxzZQorCQlub24gPSBuaS0+bmlfcmN0bHM7CisKKwlub24tPm5vbl9ub25l ID0gbm9uZTsKKworCS8qIC4uLiAqLworCQogCW5pLT5uaV90eHJhdGUgPSBuaS0+bmlfcmF0ZXMu cnNfcmF0ZXNbMF0gJiBJRUVFODAyMTFfUkFURV9WQUw7CiB9CiAKQEAgLTc4LDggKzExMyw3IEBA CiAKIHN0YXRpYyB2b2lkCiBub25lX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2 YXAgKnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgb2ssCi0g ICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiBfX3VudXNlZCkKKyAgICBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCiB7CiB9 CiAKSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5l dDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBuZXQ4MDIx MS9pZWVlODAyMTFfcnNzYWRhcHQuYwkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQAog CQkJCSAgICBwYXJtIyNfZGVub20pCiAKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X3NldGludGVydmFs KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKiwgaW50KTsKLXN0YXRpYyB2b2lkCXJzc2FkYXB0 X2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKK3N0YXRpYyB2b2lkCXJzc2FkYXB0X2luaXQo c3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9k ZWluaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X3VwZGF0 ZXN0YXRzKHN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRfbm9kZSAqKTsKIHN0YXRpYyB2b2lkCXJz c2FkYXB0X25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7CkBAIC04NCw4ICs4NCw3 IEBACiBzdGF0aWMgdm9pZAlyc3NhZGFwdF9yYWlzZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfcnNz YWRhcHRfbm9kZSAqLAogCQkJaW50LCBpbnQpOwogc3RhdGljIHZvaWQJcnNzYWRhcHRfdHhfY29t cGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLAotICAgIAkJCWNvbnN0IHN0cnVjdCBp ZWVlODAyMTFfbm9kZSAqLCBpbnQsCi0JCQl2b2lkICosIHZvaWQgKik7CisgICAgCQkJY29uc3Qg c3RydWN0IGllZWU4MDIxMV9ub2RlICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIHN0 YXRpYyB2b2lkCXJzc2FkYXB0X3N5c2N0bGF0dGFjaChzdHJ1Y3QgaWVlZTgwMjExdmFwICosCiAJ CQlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICosIHN0cnVjdCBzeXNjdGxfb2lkICopOwogCkBAIC0x MjEsNyArMTIwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXJzc2FkYXB0X2luaXQoc3RydWN0IGll ZWU4MDIxMXZhcCAqdmFwKQorcnNzYWRhcHRfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAs IHVpbnQzMl90IGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3Jzc2FkYXB0ICpy czsKIApAQCAtMTM0LDYgKzEzMywxMCBAQAogCQlpZl9wcmludGYodmFwLT5pdl9pZnAsICJjb3Vs ZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7CiAJCXJldHVybjsKIAl9CisKKwlzdHJ1 Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFfUkFURUNUTF9TVEFUKHZhcCk7 CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOworCiAJcnMtPnZhcCA9IHZh cDsKIAlyc3NhZGFwdF9zZXRpbnRlcnZhbCh2YXAsIDUwMCAvKiBtc2VjcyAqLyk7CiAJcnNzYWRh cHRfc3lzY3RsYXR0YWNoKHZhcCwgdmFwLT5pdl9zeXNjdGwsIHZhcC0+aXZfb2lkKTsKQEAgLTMw NywxMCArMzEwLDExIEBACiAKIHN0YXRpYyB2b2lkCiByc3NhZGFwdF90eF9jb21wbGV0ZShjb25z dCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCi0gICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9u b2RlICpuaSwgaW50IHN1Y2Nlc3MsIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIpCisgICAgY29uc3Qg c3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19p bmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHRfbm9kZSAqcmEgPSBuaS0+bmlfcmN0 bHM7Ci0JaW50IHBrdGxlbiA9ICooaW50ICopYXJnMSwgcnNzaSA9ICooaW50ICopYXJnMjsKKwkv KmludCBwa3RsZW4gPSAqKGludCAqKWFyZzEsIHJzc2kgPSAqKGludCAqKWFyZzI7Ki8KKwlpbnQg cGt0bGVuID0gMCwgcnNzaSA9IDAsIHN1Y2Nlc3MgPSAwOyAvKiBqdXN0IG1ha2UgaXQgY29tcGls ZWQuIHFjYyAqLwogCiAJaWYgKHN1Y2Nlc3MpIHsKIAkJcmEtPnJhX25vaysrOwpJbmRleDogbmV0 ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4 MDIxMV9yY19zYW1wbGUuYwkocmV2aXNpb24gMCkKKysrIG5ldDgwMjExL2llZWU4MDIxMV9yY19z YW1wbGUuYwkocmV2aXNpb24gMjU2ODI1KQpAQCAtMCwwICsxLDExNDEgQEAKKy8qICRGcmVlQlNE OiBoZWFkL3N5cy9kZXYvYXRoL2F0aF9yYXRlL3NhbXBsZS9zYW1wbGUuYyAyNDg1NzMgMjAxMy0w Mi0yNyAwNDozMzowNlogYWRyaWFuICQqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBK b2huIEJpY2tldAorICogQ29weXJpZ2h0IChjKSAyMDEzIENoZW5jaG9uZyBRaW4gPGNjcWluQEZy ZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQ UkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K KworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSAib3B0X3dsYW4uaCIKKworI2lu Y2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxz eXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNj dGwuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgor CisjaWZkZWYgSU5FVAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0 L2lmX2V0aGVyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIu aD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfaHQuaD4KKyNpbmNsdWRlIDxuZXQ4MDIx MS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yY19z YW1wbGUuaD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQu aD4KKworc3RhdGljIHZvaWQJc2FtcGxlX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50 MzJfdCk7CitzdGF0aWMgdm9pZAlzYW1wbGVfZGVpbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKik7 CitzdGF0aWMgdm9pZAlzYW1wbGVfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsK K3N0YXRpYyB2b2lkCXNhbXBsZV9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7 CitzdGF0aWMgaW50CXNhbXBsZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICos IHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkCXNhbXBsZV90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3Qg aWVlZTgwMjExdmFwICosCisgICAgCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIGlu dCwgCisJCQl2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZAlzYW1wbGVfdHhfdXBkYXRlKGNv bnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwKKwkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFf bm9kZSAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkCXNhbXBsZV9zZXRp bnRlcnZhbChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICosIGludCk7CisKKy8qIG51bWJlciBv ZiByZWZlcmVuY2VzIGZyb20gbmV0ODAyMTEgbGF5ZXIgKi8KK3N0YXRpYwlpbnQgbnJlZnMgPSAw OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlY3RsIHNhbXBsZSA9IHsKKwku aXJfbmFtZQk9ICJzYW1wbGUiLAorCS5pcl9hdHRhY2gJPSBOVUxMLAorCS5pcl9kZXRhY2gJPSBO VUxMLAorCS5pcl9pbml0CT0gc2FtcGxlX2luaXQsCisJLmlyX2RlaW5pdAk9IHNhbXBsZV9kZWlu aXQsCisJLmlyX25vZGVfaW5pdAk9IHNhbXBsZV9ub2RlX2luaXQsCisJLmlyX25vZGVfZGVpbml0 CT0gc2FtcGxlX25vZGVfZGVpbml0LAorCS5pcl9yYXRlCT0gc2FtcGxlX3JhdGUsCisJLmlyX3Jh dGVzCT0gc2FtcGxlX3JhdGVzLAorCS5pcl90eF9jb21wbGV0ZQk9IHNhbXBsZV90eF9jb21wbGV0 ZSwKKwkuaXJfdHhfdXBkYXRlCT0gc2FtcGxlX3R4X3VwZGF0ZSwKKwkuaXJfc2V0aW50ZXJ2YWwJ PSBzYW1wbGVfc2V0aW50ZXJ2YWwsCit9OworSUVFRTgwMjExX1JBVEVDVExfTU9EVUxFKHNhbXBs ZSwgMSk7CitJRUVFODAyMTFfUkFURUNUTF9BTEcoc2FtcGxlLCBJRUVFODAyMTFfUkFURUNUTF9T QU1QTEUsIHNhbXBsZSk7CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfaW5pdChzdHJ1Y3QgaWVlZTgw MjExdmFwICp2YXAsIHVpbnQzMl90IGNhcGFiaWxpdGllcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjEx X3NhbXBsZSAqc2FtcGxlOworCisJS0FTU0VSVCh2YXAtPml2X3JzID09IE5VTEwsICgiJXMgY2Fs bGVkIG11bHRpcGxlIHRpbWVzIiwgX19mdW5jX18pKTsKKworCXNhbXBsZSA9IHZhcC0+aXZfcnMg PSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc2FtcGxlKSwKKwkgICAgTV84MDIxMV9S QVRFQ1RMLCBNX05PV0FJVHxNX1pFUk8pOworCWlmIChzYW1wbGUgPT0gTlVMTCkgeworCQlpZl9w cmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7 CisJCXJldHVybjsKKwl9CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVF ODAyMTFfUkFURUNUTF9TVEFUKHZhcCk7CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJp bGl0aWVzOworCisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX3JhdGUgPSA3NTsJCS8qIGV3bWEg cGVyY2VudGFnZSAoWzAuLjk5XSkgKi8KKwlzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfbWlucGFj a2V0cyA9IDEwMCAvICgxMDAgLSBzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZSk7CisJc2Ft cGxlLT5zYW1wbGVfcmF0ZSA9IDEwOwkJCS8qICV0aW1lIHRvIHRyeSBkaWZmIHR4IHJhdGVzICov CisJc2FtcGxlLT5zYW1wbGVfbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMgPSAzOwkvKiB0aHJlc2hv bGQgZm9yIHJhdGUgc2FtcGxpbmcqLworCXNhbXBsZS0+c2FtcGxlX3N0YWxlX2ZhaWx1cmVfdGlt ZW91dCA9IDEwICogaHo7CS8qIDEwIHNlY29uZHMgKi8KKwlzYW1wbGUtPnNhbXBsZV9taW5fc3dp dGNoID0gaHo7CQkJLyogMSBzZWNvbmQgKi8KKwlzYW1wbGVfc2V0aW50ZXJ2YWwodmFwLCA1MDAg LyogbXMgKi8pOyAJLyogYWN0dWFsbHkgZG8gbm90aGluZyAqLworCXNhbXBsZV9zeXNjdGxhdHRh Y2godmFwLCB2YXAtPml2X3N5c2N0bCwgdmFwLT5pdl9vaWQpOworfQorCitzdGF0aWMgdm9pZAor c2FtcGxlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApCit7CisJZnJlZSh2YXAtPml2 X3JzLCBNXzgwMjExX1JBVEVDVEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1 bGUgKm1ycl9zY2hlZHVsZXNbSUVFRTgwMjExX01PREVfTUFYKzJdID0geworCU5VTEwsCQkvKiBJ RUVFODAyMTFfTU9ERV9BVVRPICovCisJc2VyaWVzXzExYSwJLyogSUVFRTgwMjExX01PREVfMTFB ICovCisJc2VyaWVzXzExZywJLyogSUVFRTgwMjExX01PREVfMTFCICovCisJc2VyaWVzXzExZywJ LyogSUVFRTgwMjExX01PREVfMTFHICovCisJTlVMTCwJCS8qIElFRUU4MDIxMV9NT0RFX0ZIICov CisJc2VyaWVzXzExYSwJLyogSUVFRTgwMjExX01PREVfVFVSQk9fQSAqLworCXNlcmllc18xMWcs CS8qIElFRUU4MDIxMV9NT0RFX1RVUkJPX0cgKi8KKwlzZXJpZXNfMTFhLAkvKiBJRUVFODAyMTFf TU9ERV9TVFVSQk9fQSAqLworCXNlcmllc18xMW5hLAkvKiBJRUVFODAyMTFfTU9ERV8xMU5BICov CisJc2VyaWVzXzExbmcsCS8qIElFRUU4MDIxMV9NT0RFXzExTkcgKi8KKwlzZXJpZXNfaGFsZiwJ LyogSUVFRTgwMjExX01PREVfSEFMRiAqLworCXNlcmllc19xdWFydGVyLAkvKiBJRUVFODAyMTFf TU9ERV9RVUFSVEVSICovCit9OworCitzdGF0aWMgdm9pZAorc2FtcGxlX25vZGVfaW5pdChzdHJ1 Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworI2RlZmluZQlSQVRFKF9peCkJKG5pLT5uaV9yYXRl cy5yc19yYXRlc1soX2l4KV0gJiBJRUVFODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCURPVDExUkFU RShfaXgpCShydC0+aW5mb1soX2l4KV0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQor I2RlZmluZQlNQ1MoX2l4KQkobmktPm5pX2h0cmF0ZXMucnNfcmF0ZXNbX2l4XSB8IElFRUU4MDIx MV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOworCXN0 cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOworCXN0cnVjdCBpZWVl ODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9y YXRlX3RhYmxlICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1 cmNoYW4pOworCWVudW0gaWVlZTgwMjExX3BoeW1vZGUgY3VybW9kZSA9IGllZWU4MDIxMV9jaGFu Mm1vZGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJaW50IHgsIHksIHJpeDsKKworCWlmIChu aS0+bmlfcmN0bHMgPT0gTlVMTCkgeworCQluaS0+bmlfcmN0bHMgPSBzYW4gPSBtYWxsb2Moc2l6 ZW9mKHN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUpLAorCQkgICAgTV84MDIxMV9SQVRFQ1RM LCBNX05PV0FJVHxNX1pFUk8pOworCQlpZiAoc2FuID09IE5VTEwpIHsKKwkJCWlmX3ByaW50Zih2 YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHBlci1ub2RlIHJhdGVjdGwgIgorCQkJICAgICJz dHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCXNhbiA9IG5pLT5uaV9y Y3RsczsKKwkKKwlzYW4tPnNhbl9zYW1wbGUgPSBzYW1wbGU7CisKKwlLQVNTRVJUKHJ0ICE9IE5V TEwsICgibm8gcmF0ZSB0YWJsZSwgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCXNhbi0+c2NoZWQg PSBtcnJfc2NoZWR1bGVzW2N1cm1vZGVdOworCUtBU1NFUlQoc2FuLT5zY2hlZCAhPSBOVUxMLCAo Im5vIG1yciBzY2hlZHVsZSBmb3IgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCXNhbi0+c3RhdGlj X3JpeCA9IC0xOworCXNhbXBsZV91cGRhdGVfc3RhdGljX3JpeChuaSk7CisKKwkvKgorCSAqIENv bnN0cnVjdCBhIGJpdG1hc2sgb2YgdXNhYmxlIHJhdGVzLiAgVGhpcyBoYXMgYWxsCisJICogbmVn b3RpYXRlZCByYXRlcyBtaW51cyB0aG9zZSBtYXJrZWQgYnkgdGhlIGhhbCBhcworCSAqIHRvIGJl IGlnbm9yZWQgZm9yIGRvaW5nIHJhdGUgY29udHJvbC4KKwkgKi8KKwlzYW4tPnJhdGVtYXNrID0g MDsKKworCS8qIE1DUyByYXRlcyAqLworCWlmIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E RV9IVCkgeworCQlmb3IgKHggPSAwOyB4IDwgbmktPm5pX2h0cmF0ZXMucnNfbnJhdGVzOyB4Kysp IHsKKwkJCXJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbTUNTKHgpXTsKKwkJCWlmIChyaXggPT0g MHhmZikKKwkJCQljb250aW51ZTsKKwkJCS8qIHNraXAgcmF0ZXMgbWFya2VkIGJyb2tlbiBieSBo YWwgKi8KKwkJCWlmICghcnQtPmluZm9bcml4XS52YWxpZCkKKwkJCQljb250aW51ZTsKKwkJCUtB U1NFUlQocml4IDwgU0FNUExFX01BWFJBVEVTLAorCQkJICAgICgibWNzICV1IGhhcyByaXggJWQi LCBNQ1MoeCksIHJpeCkpOworCQkJc2FuLT5yYXRlbWFzayB8PSAodWludDY0X3QpIDE8PHJpeDsK KwkJfQorCX0KKworCS8qIExlZ2FjeSByYXRlcyAqLworCWZvciAoeCA9IDA7IHggPCBuaS0+bmlf cmF0ZXMucnNfbnJhdGVzOyB4KyspIHsKKwkJcml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtSQVRF KHgpXTsKKwkJaWYgKHJpeCA9PSAweGZmKQorCQkJY29udGludWU7CisJCS8qIHNraXAgcmF0ZXMg bWFya2VkIGJyb2tlbiBieSBoYWwgKi8KKwkJaWYgKCFydC0+aW5mb1tyaXhdLnZhbGlkKQorCQkJ Y29udGludWU7CisJCUtBU1NFUlQocml4IDwgU0FNUExFX01BWFJBVEVTLAorCQkgICAgKCJyYXRl ICV1IGhhcyByaXggJWQiLCBSQVRFKHgpLCByaXgpKTsKKwkJc2FuLT5yYXRlbWFzayB8PSAodWlu dDY0X3QpIDE8PHJpeDsKKwl9CisKKwlmb3IgKHkgPSAwOyB5IDwgTlVNX1BBQ0tFVF9TSVpFX0JJ TlM7IHkrKykgeworCQlpbnQgc2l6ZSA9IGJpbl90b19zaXplKHkpOworCQl1aW50NjRfdCBtYXNr OworCisJCXNhbi0+cGFja2V0c19zZW50W3ldID0gMDsKKwkJc2FuLT5jdXJyZW50X3NhbXBsZV9y aXhbeV0gPSAtMTsKKwkJc2FuLT5sYXN0X3NhbXBsZV9yaXhbeV0gPSAwOworCQkvKiBYWFggc3Rh cnQgd2l0aCBmaXJzdCB2YWxpZCByYXRlICovCisJCXNhbi0+Y3VycmVudF9yaXhbeV0gPSBmZnMo c2FuLT5yYXRlbWFzayktMTsKKwkJCisJCS8qCisJCSAqIEluaXRpYWxpemUgdGhlIHN0YXRpc3Rp Y3MgYnVja2V0czsgdGhlc2UgYXJlCisJCSAqIGluZGV4ZWQgYnkgdGhlIHJhdGUgY29kZSBpbmRl eC4KKwkJICovCisJCWZvciAocml4ID0gMCwgbWFzayA9IHNhbi0+cmF0ZW1hc2s7IG1hc2sgIT0g MDsgcml4KyssIG1hc2sgPj49IDEpIHsKKwkJCWlmICgobWFzayAmIDEpID09IDApCQkvKiBub3Qg YSB2YWxpZCByYXRlICovCisJCQkJY29udGludWU7CisJCQlzYW4tPnN0YXRzW3ldW3JpeF0uc3Vj Y2Vzc2l2ZV9mYWlsdXJlcyA9IDA7CisJCQlzYW4tPnN0YXRzW3ldW3JpeF0udHJpZXMgPSAwOwor CQkJc2FuLT5zdGF0c1t5XVtyaXhdLnRvdGFsX3BhY2tldHMgPSAwOworCQkJc2FuLT5zdGF0c1t5 XVtyaXhdLnBhY2tldHNfYWNrZWQgPSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmxhc3RfdHgg PSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmV3bWFfcGN0ID0gMDsKKwkJCQorCQkJc2FuLT5z dGF0c1t5XVtyaXhdLnBlcmZlY3RfdHhfdGltZSA9CisJCQkgICAgY2FsY191c2Vjc191bmljYXN0 X3BhY2tldCh2YXAsIHNpemUsIHJpeCwgMCwgMCwKKwkJCSAgICAobmktPm5pX2NodyA9PSA0MCkp OworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLmF2ZXJhZ2VfdHhfdGltZSA9CisJCQkgICAgc2FuLT5z dGF0c1t5XVtyaXhdLnBlcmZlY3RfdHhfdGltZTsKKwkJfQorCX0KKworCS8qIHNldCB0aGUgdmlz aWJsZSBiaXQtcmF0ZSAqLworCWlmIChzYW4tPnN0YXRpY19yaXggIT0gLTEpCisJCW5pLT5uaV90 eHJhdGUgPSBET1QxMVJBVEUoc2FuLT5zdGF0aWNfcml4KTsKKwllbHNlCisJCW5pLT5uaV90eHJh dGUgPSBSQVRFKDApOworI3VuZGVmIFJBVEUKKyN1bmRlZiBET1QxMVJBVEUKKyN1bmRlZiBNQ1MK K30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25v ZGUgKm5pKQoreworCWZyZWUobmktPm5pX3JjdGxzLCBNXzgwMjExX1JBVEVDVEwpOworfQorCitz dGF0aWMgaW50Citkb3QxMXJhdGUoY29uc3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LCBpbnQg cml4KQoreworCWlmIChyaXggPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJ0LT5pbmZvW3Jp eF0ucGh5ID09IElFRUU4MDIxMV9UX0hUID8KKwkgICAgcnQtPmluZm9bcml4XS5kb3QxMVJhdGUg OiAocnQtPmluZm9bcml4XS5kb3QxMVJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpIC8gMjsKK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKgorZG90MTFyYXRlX2xhYmVsKGNvbnN0IGllZWU4MDIxMV9y YXRlX3RhYmxlICpydCwgaW50IHJpeCkKK3sKKwlpZiAocml4IDwgMCkKKwkJcmV0dXJuICIiOwor CXJldHVybiBydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCA/ICJNQ1MiIDogIk1i ICI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHJpeCB3aXRoIHRoZSBsb3dlc3QgYXZlcmFnZV90 eF90aW1lLAorICogb3IgLTEgaWYgYWxsIHRoZSBhdmVyYWdlX3R4X3RpbWVzIGFyZSAwLgorICov CitzdGF0aWMgX19pbmxpbmUgaW50CitwaWNrX2Jlc3RfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgw MjExX25vZGUgKm5pLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LAorICAg IGludCBzaXplX2JpbiwgaW50IHJlcXVpcmVfYWNrZWRfYmVmb3JlKQoreworCXN0cnVjdCBpZWVl ODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKyAgICBpbnQgYmVzdF9yYXRl X3JpeCwgYmVzdF9yYXRlX3R0LCBiZXN0X3JhdGVfcGN0OworCXVpbnQ2NF90IG1hc2s7CisJaW50 IHJpeCwgdHQsIHBjdDsKKworICAgIGJlc3RfcmF0ZV9yaXggPSAwOworICAgIGJlc3RfcmF0ZV90 dCA9IDA7CisJYmVzdF9yYXRlX3BjdCA9IDA7CisKKwlmb3IgKG1hc2sgPSBzYW4tPnJhdGVtYXNr LCByaXggPSAwOyBtYXNrICE9IDA7IG1hc2sgPj49IDEsIHJpeCsrKSB7CisJCWlmICgobWFzayAm IDEpID09IDApCQkvKiBub3QgYSBzdXBwb3J0ZWQgcmF0ZSAqLworCQkJY29udGludWU7CisKKwkJ LyogRG9uJ3QgcGljayBhIG5vbi1IVCByYXRlIGZvciBhIEhUIG5vZGUgKi8KKwkJaWYgKChuaS0+ bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgJiYKKwkJICAgIChydC0+aW5mb1tyaXhdLnBo eSAhPSBJRUVFODAyMTFfVF9IVCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdHQgPSBzYW4t PnN0YXRzW3NpemVfYmluXVtyaXhdLmF2ZXJhZ2VfdHhfdGltZTsKKwkJaWYgKHR0IDw9IDAgfHwK KwkJICAgIChyZXF1aXJlX2Fja2VkX2JlZm9yZSAmJgorCQkgICAgICFzYW4tPnN0YXRzW3NpemVf YmluXVtyaXhdLnBhY2tldHNfYWNrZWQpKQorCQkJY29udGludWU7CisKKwkJLyogQ2FsY3VsYXRl IHBlcmNlbnRhZ2UgaWYgcG9zc2libGUgKi8KKwkJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Jp eF0udG90YWxfcGFja2V0cyA+IDApIHsKKwkJCXBjdCA9IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Jp eF0uZXdtYV9wY3Q7CisJCX0gZWxzZSB7CisJCQkvKiBYWFggZm9yIG5vdywgYXNzdW1lIDk1JSBv ayAqLworCQkJcGN0ID0gOTU7CisJCX0KKworCQkvKiBkb24ndCB1c2UgYSBiaXQtcmF0ZSB0aGF0 IGhhcyBiZWVuIGZhaWxpbmcgKi8KKwkJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3Vj Y2Vzc2l2ZV9mYWlsdXJlcyA+IDMpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3IgSFQs IERvbid0IHVzZSBhIGJpdCByYXRlIHRoYXQgaXMgbXVjaCBtb3JlCisJCSAqIGxvc3N5IHRoYW4g dGhlIGJlc3QuCisJCSAqCisJCSAqIFhYWCB0aGlzIGlzbid0IG9wdGltYWw7IGl0J3MganVzdCBk ZXNpZ25lZCB0bworCQkgKiBlbGltaW5hdGUgcmF0ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgb2J2 aW91c2x5CisJCSAqIHdvcnNlLgorCQkgKi8KKwkJaWYgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIx MV9OT0RFX0hUKSB7CisJCQlpZiAoYmVzdF9yYXRlX3BjdCA+IChwY3QgKyA1MCkpCisJCQkJY29u dGludWU7CisJCX0KKworCQkvKgorCQkgKiBGb3Igbm9uLU1DUyByYXRlcywgdXNlIHRoZSBjdXJy ZW50IGF2ZXJhZ2UgdHh0aW1lIGZvcgorCQkgKiBjb21wYXJpc29uLgorCQkgKi8KKwkJaWYgKCEg KG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkgeworCQkJaWYgKGJlc3RfcmF0ZV90 dCA9PSAwIHx8IHR0IDw9IGJlc3RfcmF0ZV90dCkgeworCQkJCWJlc3RfcmF0ZV90dCA9IHR0Owor CQkJCWJlc3RfcmF0ZV9yaXggPSByaXg7CisJCQkJYmVzdF9yYXRlX3BjdCA9IHBjdDsKKwkJCX0K KwkJfQorCisJCS8qCisJCSAqIFNpbmNlIDIgc3RyZWFtIHJhdGVzIGhhdmUgc2xpZ2h0bHkgaGln aGVyIFRYIHRpbWVzLAorCQkgKiBhbGxvdyBhIGxpdHRsZSBiaXQgb2YgbGVld2F5LiBUaGlzIHNo b3VsZCBsYXRlcgorCQkgKiBiZSBhYnN0cmFjdGVkIG91dCBhbmQgcHJvcGVybHkgaGFuZGxlZC4K KwkJICovCisJCWlmIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgeworCQkJaWYg KGJlc3RfcmF0ZV90dCA9PSAwIHx8ICh0dCAqIDggPD0gYmVzdF9yYXRlX3R0ICogMTApKSB7CisJ CQkJYmVzdF9yYXRlX3R0ID0gdHQ7CisJCQkJYmVzdF9yYXRlX3JpeCA9IHJpeDsKKwkJCQliZXN0 X3JhdGVfcGN0ID0gcGN0OworCQkJfQorCQl9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChi ZXN0X3JhdGVfdHQgPyBiZXN0X3JhdGVfcml4IDogLTEpOworfQorCisvKgorICogUGljayBhIGdv b2QgInJhbmRvbSIgYml0LXJhdGUgdG8gc2FtcGxlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25l LgorICovCitzdGF0aWMgX19pbmxpbmUgaW50CitwaWNrX3NhbXBsZV9yYXRlKGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfbm9kZSAqbmksIGNvbnN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCwgCisJ aW50IHNpemVfYmluKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShydC0+aW5mb1tpeF0uZG90 MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoaXgpCQkocnQtPmluZm9b aXhdLmRvdDExUmF0ZSB8IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgwMjExX3Nh bXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUg KnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsKKwlpbnQgY3VycmVudF9yaXgsIHJpeDsKKwl1bnNp Z25lZCBjdXJyZW50X3R0OworCXVpbnQ2NF90IG1hc2s7CisJCisJY3VycmVudF9yaXggPSBzYW4t PmN1cnJlbnRfcml4W3NpemVfYmluXTsKKwlpZiAoY3VycmVudF9yaXggPCAwKSB7CisJCS8qIG5v IHN1Y2Nlc3NlcyB5ZXQsIHNlbmQgYXQgdGhlIGxvd2VzdCBiaXQtcmF0ZSAqLworCQkvKiBYWFgg c2hvdWxkIHJldHVybiBNQ1MwIGlmIEhUICovCisJCXJldHVybiAwOworCX0KKworCWN1cnJlbnRf dHQgPSBzYW4tPnN0YXRzW3NpemVfYmluXVtjdXJyZW50X3JpeF0uYXZlcmFnZV90eF90aW1lOwor CisJcml4ID0gc2FuLT5sYXN0X3NhbXBsZV9yaXhbc2l6ZV9iaW5dKzE7CS8qIG5leHQgc2FtcGxl IHJhdGUgKi8KKwltYXNrID0gc2FuLT5yYXRlbWFzayAmfiAoKHVpbnQ2NF90KSAxPDxjdXJyZW50 X3JpeCk7LyogZG9uJ3Qgc2FtcGxlIGN1cnJlbnQgcmF0ZSAqLworCXdoaWxlIChtYXNrICE9IDAp IHsKKwkJaWYgKChtYXNrICYgKCh1aW50NjRfdCkgMTw8cml4KSkgPT0gMCkgewkvKiBub3QgYSBz dXBwb3J0ZWQgcmF0ZSAqLworCW5leHRyYXRlOgorCQkJaWYgKCsrcml4ID49IHJ0LT5yYXRlQ291 bnQpCisJCQkJcml4ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVGhlIGZv bGxvd2luZyBjb2RlIHN0b3BzIHRyeWluZyB0byBzYW1wbGUKKwkJICogbm9uLU1DUyByYXRlcyB3 aGVuIHNwZWFraW5nIHRvIGFuIE1DUyBub2RlLgorCQkgKiBIb3dldmVyLCBhdCBsZWFzdCBmb3Ig Q0NLIHJhdGVzIGluIDIuNEdIeiBtb2RlLAorCQkgKiB0aGUgbm9uLU1DUyByYXRlcyBNQVkgYWN0 dWFsbHkgcHJvdmlkZSBiZXR0ZXIKKwkJICogUEVSIGF0IHRoZSB2ZXJ5IGZhciBlZGdlIG9mIHJl Y2VwdGlvbi4KKwkJICoKKwkJICogSG93ZXZlciEgVW50aWwgYXRoX3JhdGVfZm9ybV9hZ2dyKCkg Z3Jvd3MKKwkJICogc29tZSBsb2dpYyB0byBub3QgZm9ybSBhZ2dyZWdhdGVzIGlmIHRoZQorCQkg KiBzZWxlY3RlZCByYXRlIGlzIG5vbi1NQ1MsIHRoaXMgd29uJ3Qgd29yay4KKwkJICoKKwkJICog U28gZG9uJ3QgZGlzYWJsZSB0aGlzIGNvZGUgdW50aWwgeW91J3ZlIHRhdWdodAorCQkgKiBhdGhf cmF0ZV9mb3JtX2FnZ3IoKSB0byBkcm9wIG91dCBpZiBhbnkgb2YKKwkJICogdGhlIHNlbGVjdGVk IHJhdGVzIGFyZSBub24tTUNTLgorCQkgKi8KKyNpZiAxCisJCS8qIGlmIHRoZSBub2RlIGlzIEhU IGFuZCB0aGUgcmF0ZSBpc24ndCBIVCwgZG9uJ3QgYm90aGVyIHNhbXBsZSAqLworCQlpZiAoKG5p LT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSAmJgorCQkgICAgKHJ0LT5pbmZvW3JpeF0u cGh5ICE9IElFRUU4MDIxMV9UX0hUKSkgeworCQkJbWFzayAmPSB+KCh1aW50NjRfdCkgMTw8cml4 KTsKKwkJCWdvdG8gbmV4dHJhdGU7CisJCX0KKyNlbmRpZgorCisJCS8qIHRoaXMgYml0LXJhdGUg aXMgYWx3YXlzIHdvcnNlIHRoYW4gdGhlIGN1cnJlbnQgb25lICovCisJCWlmIChzYW4tPnN0YXRz W3NpemVfYmluXVtyaXhdLnBlcmZlY3RfdHhfdGltZSA+IGN1cnJlbnRfdHQpIHsKKwkJCW1hc2sg Jj0gfigodWludDY0X3QpIDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOworCQl9CisKKwkJLyog cmFyZWx5IHNhbXBsZSBiaXQtcmF0ZXMgdGhhdCBmYWlsIGEgbG90ICovCisJCWlmIChzYW4tPnN0 YXRzW3NpemVfYmluXVtyaXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPiBzYW1wbGUtPnNhbXBsZV9t YXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcyAmJgorCQkgICAgdGlja3MgLSBzYW4tPnN0YXRzW3NpemVf YmluXVtyaXhdLmxhc3RfdHggPCBzYW1wbGUtPnNhbXBsZV9zdGFsZV9mYWlsdXJlX3RpbWVvdXQp IHsKKwkJCW1hc2sgJj0gfigodWludDY0X3QpIDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOwor CQl9CisKKwkJLyoKKwkJICogRm9yIEhULCBvbmx5IHNhbXBsZSBhIGZldyByYXRlcyBvbiBlaXRo ZXIgc2lkZSBvZiB0aGUKKwkJICogY3VycmVudCByaXg7IHRoZXJlJ3MgcXVpdGUgbGlrZWx5IGEg bG90IG9mIHRoZW0uCisJCSAqLworCQlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVf SFQpIHsKKwkJCWlmIChyaXggPCAoY3VycmVudF9yaXggLSAzKSB8fAorCQkJICAgIHJpeCA+IChj dXJyZW50X3JpeCArIDMpKSB7CisJCQkJbWFzayAmPSB+KCh1aW50NjRfdCkgMTw8cml4KTsKKwkJ CQlnb3RvIG5leHRyYXRlOworCQkJfQorCQl9CisKKwkJLyogRG9uJ3Qgc2FtcGxlIG1vcmUgdGhh biAyIHJhdGVzIGhpZ2hlciBmb3IgcmF0ZXMgPiAxMU0gZm9yIG5vbi1IVCByYXRlcyAqLworCQlp ZiAoISAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpKSB7CisJCQlpZiAoRE9UMTFS QVRFKHJpeCkgPiAyKjExICYmIHJpeCA+IGN1cnJlbnRfcml4ICsgMikgeworCQkJCW1hc2sgJj0g figodWludDY0X3QpIDE8PHJpeCk7CisJCQkJZ290byBuZXh0cmF0ZTsKKwkJCX0KKwkJfQorCisJ CXNhbi0+bGFzdF9zYW1wbGVfcml4W3NpemVfYmluXSA9IHJpeDsKKwkJcmV0dXJuIHJpeDsKKwl9 CisJcmV0dXJuIGN1cnJlbnRfcml4OworI3VuZGVmIERPVDExUkFURQorI3VuZGVmIE1DUworfQor CitzdGF0aWMgaW50CitzYW1wbGVfZ2V0X3N0YXRpY19yaXgoY29uc3Qgc3RydWN0IGllZWU4MDIx MV9ub2RlICpuaSkKK3sKKyNkZWZpbmUJUkFURShfaXgpCShuaS0+bmlfcmF0ZXMucnNfcmF0ZXNb KF9peCldICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoX2l4KQkobmktPm5pX2h0 cmF0ZXMucnNfcmF0ZXNbX2l4XSB8IElFRUU4MDIxMV9SQVRFX01DUykKKwlzdHJ1Y3QgaWVlZTgw MjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90 YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFu KTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4cGFyYW0gKnRwID0gbmktPm5pX3R4cGFybXM7 CisJaW50IHNyYXRlOworCisJLyogQ2hlY2sgTUNTIHJhdGVzICovCisJZm9yIChzcmF0ZSA9IG5p LT5uaV9odHJhdGVzLnJzX25yYXRlcyAtIDE7IHNyYXRlID49IDA7IHNyYXRlLS0pIHsKKwkJaWYg KE1DUyhzcmF0ZSkgPT0gdHAtPnVjYXN0cmF0ZSkKKwkJCXJldHVybiBydC0+cmF0ZUNvZGVUb0lu ZGV4W3RwLT51Y2FzdHJhdGVdOworCX0KKworCS8qIENoZWNrIGxlZ2FjeSByYXRlcyAqLworCWZv ciAoc3JhdGUgPSBuaS0+bmlfcmF0ZXMucnNfbnJhdGVzIC0gMTsgc3JhdGUgPj0gMDsgc3JhdGUt LSkgeworCQlpZiAoUkFURShzcmF0ZSkgPT0gdHAtPnVjYXN0cmF0ZSkKKwkJCXJldHVybiBydC0+ cmF0ZUNvZGVUb0luZGV4W3RwLT51Y2FzdHJhdGVdOworCX0KKwlyZXR1cm4gLTE7CisjdW5kZWYJ UkFURQorI3VuZGVmCU1DUworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3VwZGF0ZV9zdGF0aWNf cml4KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1w bGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhw YXJhbSAqdHAgPSBuaS0+bmlfdHhwYXJtczsKKworCWlmICh0cCAhPSBOVUxMICYmIHRwLT51Y2Fz dHJhdGUgIT0gSUVFRTgwMjExX0ZJWEVEX1JBVEVfTk9ORSkgeworCQkvKgorCQkgKiBBIGZpeGVk IHJhdGUgaXMgdG8gYmUgdXNlZDsgdWNhc3RyYXRlIGlzIHRoZSBJRUVFIGNvZGUKKwkJICogZm9y IHRoaXMgcmF0ZSAoc2FucyBiYXNpYyBiaXQpLiAgQ2hlY2sgdGhpcyBhZ2FpbnN0IHRoZQorCQkg KiBuZWdvdGlhdGVkIHJhdGUgc2V0IGZvciB0aGUgbm9kZS4gIE5vdGUgdGhlIGZpeGVkIHJhdGUK KwkJICogbWF5IG5vdCBiZSBhdmFpbGFibGUgZm9yIHZhcmlvdXMgcmVhc29ucyBzbyB3ZSBvbmx5 CisJCSAqIHNldHVwIHRoZSBzdGF0aWMgcmF0ZSBpbmRleCBpZiB0aGUgbG9va3VwIGlzIHN1Y2Nl c3NmdWwuCisJCSAqLworCQlzYW4tPnN0YXRpY19yaXggPSBzYW1wbGVfZ2V0X3N0YXRpY19yaXgo bmkpOworCX0gZWxzZSB7CisJCXNhbi0+c3RhdGljX3JpeCA9IC0xOworCX0KK30KKworLyoKKyAq IFBpY2sgYSBub24tSFQgcmF0ZSB0byBiZWdpbiB1c2luZy4KKyAqLworc3RhdGljIGludAorc2Ft cGxlX3BpY2tfc2VlZF9yYXRlX2xlZ2FjeShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p LCBpbnQgZnJhbWVMZW4pCit7CisjZGVmaW5lCURPVDExUkFURShpeCkJKHJ0LT5pbmZvW2l4XS5k b3QxMVJhdGUgJiBJRUVFODAyMTFfUkFURV9WQUwpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFw ID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+ bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4 MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCQorCWNvbnN0IGlu dCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lTGVuKTsKKwlpbnQgcml4ID0gLTE7CisKKwkv KiBubyBwYWNrZXQgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHkgeWV0ICovCisJZm9yIChyaXgg PSBydC0+cmF0ZUNvdW50LTE7IHJpeCA+IDA7IHJpeC0tKSB7CisJCWlmICgoc2FuLT5yYXRlbWFz ayAmICgodWludDY0X3QpIDE8PHJpeCkpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBTa2lw IEhUIHJhdGVzICovCisJCWlmIChydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCkK KwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFBpY2sgdGhlIGhpZ2hlc3QgcmF0ZSA8PSAzNiBN YnBzCisJCSAqIHRoYXQgaGFzbid0IGZhaWxlZC4KKwkJICovCisJCWlmIChET1QxMVJBVEUocml4 KSA8PSA3MiAmJgorCQkgICAgc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2Zh aWx1cmVzID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByaXg7CisjdW5kZWYg RE9UMTFSQVRFCit9CisKKy8qCisgKiBQaWNrIGEgSFQgcmF0ZSB0byBiZWdpbiB1c2luZy4KKyAq CisgKiBEb24ndCB1c2UgYW55IG5vbi1IVCByYXRlczsgb25seSBjb25zaWRlciBIVCByYXRlcy4K KyAqLworc3RhdGljIGludAorc2FtcGxlX3BpY2tfc2VlZF9yYXRlX2h0KGNvbnN0IHN0cnVjdCBp ZWVlODAyMTFfbm9kZSAqbmksIGludCBmcmFtZUxlbikKK3sKKyNkZWZpbmUJTUNTKGl4KQkJKHJ0 LT5pbmZvW2l4XS5kb3QxMVJhdGUgfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4 MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2Rl ICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxl ICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOwor CQorCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lTGVuKTsKKwlpbnQgcml4 ID0gLTEsIGh0X3JpeCA9IC0xOworCisJLyogbm8gcGFja2V0IGhhcyBiZWVuIHNlbnQgc3VjY2Vz c2Z1bGx5IHlldCAqLworCWZvciAocml4ID0gcnQtPnJhdGVDb3VudC0xOyByaXggPiAwOyByaXgt LSkgeworCQkvKiBTa2lwIHJhdGVzIHdlIGNhbid0IHVzZSAqLworCQlpZiAoKHNhbi0+cmF0ZW1h c2sgJiAoKHVpbnQ2NF90KSAxPDxyaXgpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogS2Vl cCBhIGNvcHkgb2YgdGhlIGxhc3Qgc2VlbiBIVCByYXRlIGluZGV4ICovCisJCWlmIChydC0+aW5m b1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCkKKwkJCWh0X3JpeCA9IHJpeDsKKworCQkvKiBT a2lwIG5vbi1IVCByYXRlcyAqLworCQlpZiAocnQtPmluZm9bcml4XS5waHkgIT0gSUVFRTgwMjEx X1RfSFQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBQaWNrIGEgbWVkaXVtLXNwZWVkIHJh dGUgcmVnYXJkbGVzcyBvZiBzdHJlYW0gY291bnQKKwkJICogd2hpY2ggaGFzIG5vdCBzZWVuIGFu eSBmYWlsdXJlcy4gSGlnaGVyIHJhdGVzIG1heSBmYWlsOworCQkgKiB3ZSdsbCB0cnkgdGhlbSBs YXRlci4KKwkJICovCisJCWlmICgoKE1DUyhyaXgpICYgMHg3KSA8PSA0KSAmJgorCQkgICAgc2Fu LT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID09IDApIHsKKwkJCWJy ZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBhbGwgdGhlIE1DUyByYXRlcyBoYXZlIHN1Y2Nl c3NpdmUgZmFpbHVyZXMsIHJpeCBzaG91bGQgYmUKKwkgKiA+IDA7IG90aGVyd2lzZSB1c2UgdGhl IGxvd2VzdCBNQ1Mgcml4IChob3BlZnVsbHkgTUNTIDAuKQorCSAqLworCXJldHVybiBNQVgocml4 LCBodF9yaXgpOworI3VuZGVmIE1DUworfQorCitzdGF0aWMgaW50CitzYW1wbGVfcmF0ZShzdHJ1 Y3QgaWVlZTgwMjExX25vZGUgKm5pLCB2b2lkICphcmcgX191bnVzZWQsIHVpbnQzMl90IGlhcmcg X191bnVzZWQpCit7CisjZGVmaW5lCURPVDExUkFURShpeCkJKHJ0LT5pbmZvW2l4XS5kb3QxMVJh dGUgJiBJRUVFODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCU1DUyhpeCkJCShydC0+aW5mb1tpeF0u ZG90MTFSYXRlIHwgSUVFRTgwMjExX1JBVEVfTUNTKQorI2RlZmluZQlSQVRFKGl4KQkoRE9UMTFS QVRFKGl4KSAvIDIpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwlz dHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisJc3RydWN0 IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsKKwljb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFw LT5pdl9pYy0+aWNfY3VyY2hhbik7CisJCisJaW50IHJpeCwgbXJyLCBiZXN0X3JpeCwgY2hhbmdl X3JhdGVzOworCXVuc2lnbmVkIGF2ZXJhZ2VfdHhfdGltZTsKKwkKKwlzaXplX3QgZnJhbWVMZW4g PSAoc2l6ZV90KWlhcmc7CisJY29uc3QgaW50IHNpemVfYmluID0gc2l6ZV90b19iaW4oZnJhbWVM ZW4pOworCisJc2FtcGxlX3VwZGF0ZV9zdGF0aWNfcml4KG5pKTsKKworCWlmIChzYW4tPnN0YXRp Y19yaXggIT0gLTEpIHsKKwkJcml4ID0gc2FuLT5zdGF0aWNfcml4OworCQlnb3RvIGRvbmU7CisJ fQorCisJaWYgKElFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIodmFwKSkKKwkJbXJyID0gMTsK KwlpZiAoISBJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSUFJPVCh2YXApKQorCQltcnIgPSAw OworCisJYmVzdF9yaXggPSBwaWNrX2Jlc3RfcmF0ZShuaSwgcnQsIHNpemVfYmluLCAhbXJyKTsK KwlpZiAoYmVzdF9yaXggPj0gMCkgeworCQlhdmVyYWdlX3R4X3RpbWUgPSBzYW4tPnN0YXRzW3Np emVfYmluXVtiZXN0X3JpeF0uYXZlcmFnZV90eF90aW1lOworCX0gZWxzZSB7CisJCWF2ZXJhZ2Vf dHhfdGltZSA9IDA7CisJfQorCisJLyoKKwkgKiBMaW1pdCB0aGUgdGltZSBtZWFzdXJpbmcgdGhl IHBlcmZvcm1hbmNlIG9mIG90aGVyIHR4CisJICogcmF0ZXMgdG8gc2FtcGxlX3JhdGUlIG9mIHRo ZSB0b3RhbCB0cmFuc21pc3Npb24gdGltZS4KKwkgKi8KKwlpZiAoc2FuLT5zYW1wbGVfdHRbc2l6 ZV9iaW5dIDwgYXZlcmFnZV90eF90aW1lICogKHNhbi0+cGFja2V0c19zaW5jZV9zYW1wbGVbc2l6 ZV9iaW5dICoKKwkJc2FtcGxlLT5zYW1wbGVfcmF0ZS8xMDApKSB7CisJCXJpeCA9IHBpY2tfc2Ft cGxlX3JhdGUobmksIHJ0LCBzaXplX2Jpbik7CisJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgw MjExX01TR19SQVRFQ1RMLAorCQkgICAgICZuaSwgImF0dCAlZCBzYW1wbGVfdHQgJWQgc2l6ZSAl dSBzYW1wbGUgcmF0ZSAlZCAlcyBjdXJyZW50IHJhdGUgJWQgJXMiLAorCQkgICAgIGF2ZXJhZ2Vf dHhfdGltZSwKKwkJICAgICBzYW4tPnNhbXBsZV90dFtzaXplX2Jpbl0sCisJCSAgICAgYmluX3Rv X3NpemUoc2l6ZV9iaW4pLAorCQkgICAgIGRvdDExcmF0ZShydCwgcml4KSwKKwkJICAgICBkb3Qx MXJhdGVfbGFiZWwocnQsIHJpeCksCisJCSAgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmN1cnJlbnRf cml4W3NpemVfYmluXSksCisJCSAgICAgZG90MTFyYXRlX2xhYmVsKHJ0LCBzYW4tPmN1cnJlbnRf cml4W3NpemVfYmluXSkpOworCQlpZiAocml4ICE9IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5d KSB7CisJCQlzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSByaXg7CisJCX0gZWxz ZSB7CisJCQlzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSAtMTsKKwkJfQorCQlz YW4tPnBhY2tldHNfc2luY2Vfc2FtcGxlW3NpemVfYmluXSA9IDA7CisJfSBlbHNlIHsKKwkJY2hh bmdlX3JhdGVzID0gMDsKKwkJaWYgKCFzYW4tPnBhY2tldHNfc2VudFtzaXplX2Jpbl0gfHwgYmVz dF9yaXggPT0gLTEpIHsKKwkJCS8qIG5vIHBhY2tldCBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxs eSB5ZXQgKi8KKwkJCWNoYW5nZV9yYXRlcyA9IDE7CisJCQlpZiAobmktPm5pX2ZsYWdzICYgSUVF RTgwMjExX05PREVfSFQpCisJCQkJYmVzdF9yaXggPSBzYW1wbGVfcGlja19zZWVkX3JhdGVfaHQo bmksIGZyYW1lTGVuKTsKKwkJCWVsc2UKKwkJCQliZXN0X3JpeCA9IHNhbXBsZV9waWNrX3NlZWRf cmF0ZV9sZWdhY3kobmksIGZyYW1lTGVuKTsKKwkJfSBlbHNlIGlmIChzYW4tPnBhY2tldHNfc2Vu dFtzaXplX2Jpbl0gPCAyMCkgeworCQkJLyogbGV0IHRoZSBiaXQtcmF0ZSBzd2l0Y2ggcXVpY2ts eSBkdXJpbmcgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCQlJRUVFODAyMTFfTk9URSh2YXAs CisJCQkgICAgSUVFRTgwMjExX01TR19SQVRFQ1RMLCAmbmksCisJCQkgICAgIiVzOiBzd2l0Y2hp bmcgcXVpY2tseS4uIiwgX19mdW5jX18pOworCQkJY2hhbmdlX3JhdGVzID0gMTsKKwkJfSBlbHNl IGlmICh0aWNrcyAtIHNhbXBsZS0+c2FtcGxlX21pbl9zd2l0Y2ggPiBzYW4tPnRpY2tzX3NpbmNl X3N3aXRjaFtzaXplX2Jpbl0pIHsKKwkJCS8qIG1pbl9zd2l0Y2ggc2Vjb25kcyBoYXZlIGdvbmUg YnkgKi8KKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwKKwkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVD VEwsICZuaSwKKwkJCSAgICAiJXM6IG1pbl9zd2l0Y2ggJWQgPiB0aWNrc19zaW5jZV9zd2l0Y2gg JWQuLiIsCisJCQkgICAgX19mdW5jX18sIHRpY2tzIC0gc2FtcGxlLT5zYW1wbGVfbWluX3N3aXRj aCwgc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dKTsKKwkJCWNoYW5nZV9yYXRlcyA9 IDE7CisJCX0gZWxzZSBpZiAoKCEgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkg JiYKKwkJICAgICgyKmF2ZXJhZ2VfdHhfdGltZSA8IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3Nhbi0+ Y3VycmVudF9yaXhbc2l6ZV9iaW5dXS5hdmVyYWdlX3R4X3RpbWUpKSB7CisJCQkvKiB0aGUgY3Vy cmVudCBiaXQtcmF0ZSBpcyB0d2ljZSBhcyBzbG93IGFzIHRoZSBiZXN0IG9uZSAqLworCQkJSUVF RTgwMjExX05PVEUodmFwLAorCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAorCQkJ ICAgICIlczogMnggYXR0ICg9ICVkKSA8IGN1cl9yaXggYXR0ICVkIiwKKwkJCSAgICBfX2Z1bmNf XywKKwkJCSAgICAyICogYXZlcmFnZV90eF90aW1lLCBzYW4tPnN0YXRzW3NpemVfYmluXVtzYW4t PmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lKTsKKwkJCWNoYW5nZV9yYXRl cyA9IDE7CisJCX0gZWxzZSBpZiAoKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkg eworCQkJaW50IGN1cl9yaXggPSBzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXTsKKwkJCWludCBj dXJfYXR0ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bY3VyX3JpeF0uYXZlcmFnZV90eF90aW1lOwor CQkJLyoKKwkJCSAqIElmIHRoZSBub2RlIGlzIEhULCB1cGdyYWRlIGl0IGlmIHRoZSBNQ1MgcmF0 ZSBpcworCQkJICogaGlnaGVyIGFuZCB0aGUgYXZlcmFnZSB0eCB0aW1lIGlzIHdpdGhpbiAyMCUg b2YKKwkJCSAqIHRoZSBjdXJyZW50IHJhdGUuIEl0IGNhbiBmYWlsIGEgbGl0dGxlLgorCQkJICoK KwkJCSAqIFRoaXMgaXMgbGlrZWx5IG5vdCBvcHRpbWFsIQorCQkJICovCisjaWYgMAorCQkJcHJp bnRmKCJjdXIgcml4L2F0dCAleC8lZCwgYmVzdCByaXgvYXR0ICV4LyVkXG4iLAorCQkJICAgIE1D UyhjdXJfcml4KSwgY3VyX2F0dCwgTUNTKGJlc3Rfcml4KSwgYXZlcmFnZV90eF90aW1lKTsKKyNl bmRpZgorCQkJaWYgKChNQ1MoYmVzdF9yaXgpID4gTUNTKGN1cl9yaXgpKSAmJgorCQkJICAgIChh dmVyYWdlX3R4X3RpbWUgKiA4KSA8PSAoY3VyX2F0dCAqIDEwKSkgeworCQkJCUlFRUU4MDIxMV9O T1RFKHZhcCwKKwkJCQkgICAgSUVFRTgwMjExX01TR19SQVRFQ1RMLCAmbmksCisJCQkJICAgICIl czogSFQ6IGJlc3Rfcml4IDB4JWQgPiBjdXJfcml4IDB4JXgsIGF2ZXJhZ2VfdHhfdGltZSAlZCwg Y3VyX2F0dCAlZCIsCisJCQkJICAgIF9fZnVuY19fLAorCQkJCSAgICBNQ1MoYmVzdF9yaXgpLCBN Q1MoY3VyX3JpeCksIGF2ZXJhZ2VfdHhfdGltZSwgY3VyX2F0dCk7CisJCQkJY2hhbmdlX3JhdGVz ID0gMTsKKwkJCX0KKwkJfQorCisJCXNhbi0+cGFja2V0c19zaW5jZV9zYW1wbGVbc2l6ZV9iaW5d Kys7CisJCQorCQlpZiAoY2hhbmdlX3JhdGVzKSB7CisJCQlpZiAoYmVzdF9yaXggIT0gc2FuLT5j dXJyZW50X3JpeFtzaXplX2Jpbl0pIHsKKwkJCQlJRUVFODAyMTFfTk9URSh2YXAsCisJCQkJICAg IElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJCQkgICAgJm5pLAorIiVzOiBzaXplICVkIHN3aXRj aCByYXRlICVkICglZC8lZCkgLT4gJWQgKCVkLyVkKSBhZnRlciAlZCBwYWNrZXRzIG1yciAlZCIs CisJCQkJICAgIF9fZnVuY19fLAorCQkJCSAgICBiaW5fdG9fc2l6ZShzaXplX2JpbiksCisJCQkJ ICAgIFJBVEUoc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl0pLAorCQkJCSAgICBzYW4tPnN0YXRz W3NpemVfYmluXVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lLAor CQkJCSAgICBzYW4tPnN0YXRzW3NpemVfYmluXVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0u cGVyZmVjdF90eF90aW1lLAorCQkJCSAgICBSQVRFKGJlc3Rfcml4KSwKKwkJCQkgICAgc2FuLT5z dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLmF2ZXJhZ2VfdHhfdGltZSwKKwkJCQkgICAgc2FuLT5z dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLnBlcmZlY3RfdHhfdGltZSwKKwkJCQkgICAgc2FuLT5w YWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0sCisJCQkJICAgIG1ycik7CisJCQl9CisJCQlz YW4tPnBhY2tldHNfc2luY2Vfc3dpdGNoW3NpemVfYmluXSA9IDA7CisJCQlzYW4tPmN1cnJlbnRf cml4W3NpemVfYmluXSA9IGJlc3Rfcml4OworCQkJc2FuLT50aWNrc19zaW5jZV9zd2l0Y2hbc2l6 ZV9iaW5dID0gdGlja3M7CisJCQkvKiAKKwkJCSAqIFNldCB0aGUgdmlzaWJsZSB0eHJhdGUgZm9y IHRoaXMgbm9kZS4KKwkJCSAqLworCQkJbmktPm5pX3R4cmF0ZSA9IGRvdDExcmF0ZShydCwgYmVz dF9yaXgpOworCQl9CisJCXJpeCA9IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dOworCQlzYW4t PnBhY2tldHNfc2luY2Vfc3dpdGNoW3NpemVfYmluXSsrOworCX0KKwkvLyAqdHJ5MCA9IG1yciA/ IHNhbi0+c2NoZWRbcml4XS50MCA6IEFUSF9UWE1BWFRSWTsKK2RvbmU6CisKKwkvKgorCSAqIFRo aXMgYnVnIHRvdGFsbHkgc3Vja3MgYW5kIHNob3VsZCBiZSBmaXhlZC4KKwkgKgorCSAqIEZvciBu b3cgdGhvdWdoLCBsZXQncyBub3QgcGFuaWMsIHNvIHdlIGNhbiBzdGFydCB0byBmaWd1cmUKKwkg KiBvdXQgaG93IHRvIGJldHRlciByZXByb2R1Y2UgaXQuCisJICovCisJaWYgKHJpeCA8IDAgfHwg cml4ID49IHJ0LT5yYXRlQ291bnQpIHsKKwkJcHJpbnRmKCIlczogRVJST1I6IHJpeCAlZCBvdXQg b2YgYm91bmRzIChyYXRlQ291bnQ9JWQpXG4iLAorCQkgICAgX19mdW5jX18sCisJCSAgICByaXgs CisJCSAgICBydC0+cmF0ZUNvdW50KTsKKwkJICAgIHJpeCA9IDA7CS8qIFhYWCBqdXN0IGRlZmF1 bHQgZm9yIG5vdyAqLworCX0KKwlLQVNTRVJUKHJpeCA+PSAwICYmIHJpeCA8IHJ0LT5yYXRlQ291 bnQsICgicml4IGlzICVkIiwgcml4KSk7CisKKwkvLyAqcml4MCA9IHJpeDsKKwkvLyAqdHhyYXRl ID0gcnQtPmluZm9bcml4XS5yYXRlQ29kZQorCS8vIAl8IChzaG9ydFByZWFtYmxlID8gcnQtPmlu Zm9bcml4XS5zaG9ydFByZWFtYmxlIDogMCk7CisJc2FuLT5wYWNrZXRzX3NlbnRbc2l6ZV9iaW5d Kys7CisKKwlyZXR1cm4gcml4OworI3VuZGVmIERPVDExUkFURQorI3VuZGVmIE1DUworI3VuZGVm IFJBVEUKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX25v ZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCit7CisJc3RydWN0IGll ZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCXVpbnQ4X3Qgcml4MCA9 IHNhbXBsZV9yYXRlKG5pLCBOVUxMLCAwKTsKKwljb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSAqc2No ZWQgPSAmc2FuLT5zY2hlZFtyaXgwXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMg PSByY19pbmZvLT5pcmlfcmM7CisKKwlLQVNTRVJUKHJpeDAgPT0gc2NoZWQtPnIwLCAoInJpeDAg KCV4KSAhPSBzY2hlZC0+cjAgKCV4KSFcbiIsCisJICAgIHJpeDAsIHNjaGVkLT5yMCkpOworCS8q IFhYWCAqLworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxhZ3MgPSByY1syXS5mbGFncyA9IHJjWzNd LmZsYWdzID0gMDsKKworCXJjWzBdLnJpeCA9IHNjaGVkLT5yMDsKKwlyY1sxXS5yaXggPSBzY2hl ZC0+cjE7CisJcmNbMl0ucml4ID0gc2NoZWQtPnIyOworCXJjWzNdLnJpeCA9IHNjaGVkLT5yMzsK KworCXJjWzBdLnRyaWVzID0gc2NoZWQtPnQwOworCXJjWzFdLnRyaWVzID0gc2NoZWQtPnQxOwor CXJjWzJdLnRyaWVzID0gc2NoZWQtPnQyOworCXJjWzNdLnRyaWVzID0gc2NoZWQtPnQzOworfQor CitzdGF0aWMgdm9pZAordXBkYXRlX3N0YXRzKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh cCwKKyAgICAJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAorCQkgIGludCBmcmFt ZV9zaXplLAorCQkgIGludCByaXgwLCBpbnQgdHJpZXMwLAorCQkgIGludCByaXgxLCBpbnQgdHJp ZXMxLAorCQkgIGludCByaXgyLCBpbnQgdHJpZXMyLAorCQkgIGludCByaXgzLCBpbnQgdHJpZXMz LAorCQkgIGludCBzaG9ydF90cmllcywgaW50IHRyaWVzLAorCQkgIGludCBuZnJhbWVzLCBpbnQg bmJhZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0 bHM7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHNhbi0+c2FuX3NhbXBsZTsK KworCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmluKGZyYW1lX3NpemUpOworCWNvbnN0 IGludCBzaXplID0gYmluX3RvX3NpemUoc2l6ZV9iaW4pOworCisJaW50IGlzX2h0NDAgPSBpZWVl ODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MCh2YXAsIG5pKTsKKwlpbnQgdHQsIHRyaWVzX3NvX2Zh cjsKKwlpbnQgcGN0OworCisJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCByaXgwKSkKKwkJcmV0 dXJuOworCXR0ID0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAsIHNpemUsIHJpeDAsIHNo b3J0X3RyaWVzLAorCQlNSU4odHJpZXMwLCB0cmllcykgLSAxLCBpc19odDQwKTsKKwl0cmllc19z b19mYXIgPSB0cmllczA7CisKKwlpZiAodHJpZXMxICYmIHRyaWVzX3NvX2ZhciA8IHRyaWVzKSB7 CisJCWlmICghSVNfUkFURV9ERUZJTkVEKHNhbiwgcml4MSkpCisJCQlyZXR1cm47CisJCXR0ICs9 IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCByaXgxLCBzaG9ydF90cmllcywK KwkJCU1JTih0cmllczEgKyB0cmllc19zb19mYXIsIHRyaWVzKSAtIHRyaWVzX3NvX2ZhciAtIDEs IGlzX2h0NDApOworCQl0cmllc19zb19mYXIgKz0gdHJpZXMxOworCX0KKworCWlmICh0cmllczIg JiYgdHJpZXNfc29fZmFyIDwgdHJpZXMpIHsKKwkJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCBy aXgyKSkKKwkJCXJldHVybjsKKwkJdHQgKz0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAs IHNpemUsIHJpeDIsIHNob3J0X3RyaWVzLAorCQkJTUlOKHRyaWVzMiArIHRyaWVzX3NvX2Zhciwg dHJpZXMpIC0gdHJpZXNfc29fZmFyIC0gMSwgaXNfaHQ0MCk7CisJCXRyaWVzX3NvX2ZhciArPSB0 cmllczI7CisJfQorCisJaWYgKHRyaWVzMyAmJiB0cmllc19zb19mYXIgPCB0cmllcykgeworCQlp ZiAoIUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeDMpKQorCQkJcmV0dXJuOworCQl0dCArPSBjYWxj X3VzZWNzX3VuaWNhc3RfcGFja2V0KHZhcCwgc2l6ZSwgcml4Mywgc2hvcnRfdHJpZXMsCisJCQlN SU4odHJpZXMzICsgdHJpZXNfc29fZmFyLCB0cmllcykgLSB0cmllc19zb19mYXIgLSAxLCBpc19o dDQwKTsKKwl9CisKKwlpZiAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0udG90YWxfcGFja2V0 cyA8IHNhbXBsZS0+c2FucGxlX3Ntb290aGluZ19taW5wYWNrZXRzKSB7CisJCS8qIGp1c3QgYXZl cmFnZSB0aGUgZmlyc3QgZmV3IHBhY2tldHMgKi8KKwkJaW50IGF2Z190eCA9IHNhbi0+c3RhdHNb c2l6ZV9iaW5dW3JpeDBdLmF2ZXJhZ2VfdHhfdGltZTsKKwkJaW50IHBhY2tldHMgPSBzYW4tPnN0 YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRzOworCQlzYW4tPnN0YXRzW3NpemVfYmlu XVtyaXgwXS5hdmVyYWdlX3R4X3RpbWUgPSAodHQrKGF2Z190eCpwYWNrZXRzKSkvKHBhY2tldHMr bmZyYW1lcyk7CisJfSBlbHNlIHsKKwkJLyogdXNlIGEgZXdtYSAqLworCQlzYW4tPnN0YXRzW3Np emVfYmluXVtyaXgwXS5hdmVyYWdlX3R4X3RpbWUgPSAKKwkJCSgoc2FuLT5zdGF0c1tzaXplX2Jp bl1bcml4MF0uYXZlcmFnZV90eF90aW1lICogc2FtcGxlLT5zYW5wbGVfc21vb3RoaW5nX3JhdGUp ICsgCisJCQkgKHR0ICogKDEwMCAtIHNhbXBsZS0+c2FucGxlX3Ntb290aGluZ19yYXRlKSkpIC8g MTAwOworCX0KKwkKKwkvKgorCSAqIFhYWCBEb24ndCBtYXJrIHRoZSBoaWdoZXIgYml0IHJhdGVz IGFzIGFsc28gaGF2aW5nIGZhaWxlZDsgYXMgdGhpcworCSAqIHVuZm9ydHVuYXRlbHkgc3RvcHMg dGhvc2UgcmF0ZXMgZnJvbSBiZWluZyB0YXN0ZWQgd2hlbiB0cnlpbmcgdG8KKwkgKiBUWC4gVGhp cyBoYXBwZW5zIHdpdGggMTFuIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChuZnJhbWVzID09IG5i YWQpIHsKKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyAr PSBuYmFkOworCisJfSBlbHNlIHsKKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ucGFja2V0 c19hY2tlZCArPSAobmZyYW1lcyAtIG5iYWQpOworCQlzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgw XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID0gMDsKKwl9CisJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4 MF0udHJpZXMgKz0gdHJpZXM7CisJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ubGFzdF90eCA9 IHRpY2tzOworCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tldHMgKz0gbmZy YW1lczsKKworCS8qIHVwZGF0ZSBFV01BIGZvciB0aGlzIHJpeCAqLworCisJLyogQ2FsY3VsYXRl IHBlcmNlbnRhZ2UgYmFzZWQgb24gY3VycmVudCByYXRlICovCisJaWYgKG5mcmFtZXMgPT0gMCkK KwkJbmZyYW1lcyA9IG5iYWQgPSAxOworCXBjdCA9ICgobmZyYW1lcyAtIG5iYWQpICogMTAwMCkg LyBuZnJhbWVzOworCisJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tl dHMgPAorCSAgICBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfbWlucGFja2V0cykgeworCQkvKiBq dXN0IGF2ZXJhZ2UgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCWludCBhX3BjdCA9IChzYW4t PnN0YXRzW3NpemVfYmluXVtyaXgwXS5wYWNrZXRzX2Fja2VkICogMTAwMCkgLworCQkgICAgKHNh bi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFsX3BhY2tldHMpOworCQlzYW4tPnN0YXRzW3Np emVfYmluXVtyaXgwXS5ld21hX3BjdCA9IGFfcGN0OworCX0gZWxzZSB7CisJCS8qIHVzZSBhIGV3 bWEgKi8KKwkJc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgPQorCQkJKChzYW4t PnN0YXRzW3NpemVfYmluXVtyaXgwXS5ld21hX3BjdCAqIHNhbXBsZS0+c2FucGxlX3Ntb290aGlu Z19yYXRlKSArCisJCQkgKHBjdCAqICgxMDAgLSBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfcmF0 ZSkpKSAvIDEwMDsKKwl9CisKKwlpZiAocml4MCA9PSBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtz aXplX2Jpbl0pIHsKKwkJc2FuLT5zYW1wbGVfdHRbc2l6ZV9iaW5dID0gdHQ7CisJCXNhbi0+Y3Vy cmVudF9zYW1wbGVfcml4W3NpemVfYmluXSA9IC0xOworCX0KK30KKworc3RhdGljIHZvaWQKK3Nh bXBsZV90eF9jb21wbGV0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisgICAgY29u c3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgaW50IG9rLAorICAgIHZvaWQgKmFyZzEsIHZv aWQgKmFyZzIpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5p X3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQgPSBpZWVlODAy MTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFuKTsKKworCS8qIFhYWCBuZWVk IHRvIGNoYW5nZSBhcmcyIHRvIHBvaW50ZXIgb2YgaWVlZTgwMjExX3JjX2luZm8gKi8KKwlzdHJ1 Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZv KilhcmcyOworCisJaW50IGZpbmFsX3JpeCwgc2hvcnRfdHJpZXMsIGxvbmdfdHJpZXM7CisJaW50 IG5mcmFtZXMsIG5iYWQ7CisJaW50IGZyYW1lX3NpemUsIG1ycjsKKworCS8qIHVwZGF0ZSBwZXIg dmFwIHN0YXRpc3RpY3MgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdCh2YXAsIHJj X2luZm8pOworCisJZmluYWxfcml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtyY19pbmZvLT5pcmlf dHhyYXRlXTsKKwlzaG9ydF90cmllcyA9IHJjX2luZm8tPmlyaV9zaG9ydHJldHJ5OworCS8qIFhY WCB3aHkgcGx1cyAxIGhlcmU/ICovCisJbG9uZ190cmllcyA9IHJjX2luZm8tPmlyaV9sb25ncmV0 cnkgKyAxOworCisJbmZyYW1lcyA9IHJjX2luZm8tPmlyaV90eGNudDsKKwluYmFkID0gcmNfaW5m by0+aXJpX2ZhaWxjbnQ7CisKKwlmcmFtZV9zaXplID0gcmNfaW5mby0+aXJpX2ZyYW1lbGVuOwor CW1yciA9IDA7CisKKwlpZiAobmZyYW1lcyA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAo ZnJhbWVfc2l6ZSA9PSAwKQkJICAgIC8qIE5COiBzaG91bGQgbm90IGhhcHBlbiAqLworCQlmcmFt ZV9zaXplID0gMTUwMDsKKworCWlmIChzYW4tPnJhdGVtYXNrID09IDApIHsKKwkJcmV0dXJuOwor CX0KKwkKKwlpZiAoSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUih2YXApKQorCQltcnIgPSAx OworCS8qIFhYWCBjaGVjayBIVCBwcm90bW9kZSB0b28gKi8KKwlpZiAobXJyICYmICFJRUVFODAy MTFfUkFURUNUTF9IQVNDQVBfTVJSUFJPVCh2YXApKQorCQltcnIgPSAwOworCQorCWlmICghbXJy IHx8IHJjX2luZm8tPmlyaV9maW5hbHRzaSA9PSAwKSB7CisJCWlmICghSVNfUkFURV9ERUZJTkVE KHNhbiwgZmluYWxfcml4KSkgeworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIE9ubHkgb25l IHJhdGUgd2FzIHVzZWQ7IG9wdGltaXplIHdvcmsuCisJCSAqLworCQl1cGRhdGVfc3RhdHModmFw LCBuaSwgZnJhbWVfc2l6ZSwgCisJCQkgICAgIGZpbmFsX3JpeCwgbG9uZ190cmllcywKKwkJCSAg ICAgMCwgMCwKKwkJCSAgICAgMCwgMCwKKwkJCSAgICAgMCwgMCwKKwkJCSAgICAgc2hvcnRfdHJp ZXMsIGxvbmdfdHJpZXMsCisJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCisJfSBlbHNlIHsKKwkJ aW50IGZpbmFsVFNJZHggPSByY19pbmZvLT5pcmlfZmluYWx0c2k7CisJCWludCBpOworCisJCS8q CisJCSAqIE5COiBzZXJpZXMgPiAwIGFyZSBub3QgcGVuYWxpemVkIGZvciBmYWlsdXJlCisJCSAq IGJhc2VkIG9uIHRoZSB0cnkgY291bnRzIHVuZGVyIHRoZSBhc3N1bXB0aW9uCisJCSAqIHRoYXQg bG9zc2VzIGFyZSBvZnRlbiBidXJzdHkgYW5kIHNpbmNlIHdlCisJCSAqIHNhbXBsZSBoaWdoZXIg cmF0ZXMgMSB0cnkgYXQgYSB0aW1lIGRvaW5nIHNvCisJCSAqIG1heSB1bmZhaXJseSBwZW5hbGl6 ZSB0aGVtLgorCQkgKi8KKwkJaWYgKHJjWzBdLnRyaWVzKSB7CisJCQl1cGRhdGVfc3RhdHModmFw LCBuaSwgZnJhbWVfc2l6ZSwKKwkJCQkgICAgIHJjWzBdLnJpeCwgcmNbMF0udHJpZXMsCisJCQkJ ICAgICByY1sxXS5yaXgsIHJjWzFdLnRyaWVzLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1syXS50 cmllcywKKwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICBzaG9ydF90 cmllcywgbG9uZ190cmllcywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCQkJbG9uZ190cmll cyAtPSByY1swXS50cmllczsKKwkJfQorCQkKKwkJaWYgKHJjWzFdLnRyaWVzICYmIGZpbmFsVFNJ ZHggPiAwKSB7CisJCQl1cGRhdGVfc3RhdHModmFwLCBuaSwgZnJhbWVfc2l6ZSwKKwkJCQkgICAg IHJjWzFdLnJpeCwgcmNbMV0udHJpZXMsCisJCQkJICAgICByY1syXS5yaXgsIHJjWzJdLnRyaWVz LAorCQkJCSAgICAgcmNbM10ucml4LCByY1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJ ICAgICBzaG9ydF90cmllcywgbG9uZ190cmllcywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOwor CQkJbG9uZ190cmllcyAtPSByY1sxXS50cmllczsKKwkJfQorCisJCWlmIChyY1syXS50cmllcyAm JiBmaW5hbFRTSWR4ID4gMSkgeworCQkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZyYW1lX3NpemUs CisJCQkJICAgICByY1syXS5yaXgsIHJjWzJdLnRyaWVzLAorCQkJCSAgICAgcmNbM10ucml4LCBy Y1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICAwLCAwLAorCQkJCSAgICAgc2hv cnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBuYmFkKTsKKwkJCWxvbmdf dHJpZXMgLT0gcmNbMl0udHJpZXM7CisJCX0KKworCQlpZiAocmNbM10udHJpZXMgJiYgZmluYWxU U0lkeCA+IDIpIHsKKwkJCXVwZGF0ZV9zdGF0cyh2YXAsIG5pLCBmcmFtZV9zaXplLAorCQkJCSAg ICAgcmNbM10ucml4LCByY1szXS50cmllcywKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICAwLCAw LAorCQkJCSAgICAgMCwgMCwKKwkJCQkgICAgIHNob3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJ CSAgICAgbmZyYW1lcywgbmJhZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVf dHhfdXBkYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgY29uc3Qgc3RydWN0IGll ZWU4MDIxMV9ub2RlICpuaSwKKyAgICB2b2lkICphcmcxLCB2b2lkICphcmcyLCB2b2lkICphcmcz KQoreworCS8qIG5vdGhpbmcgaGVyZS4gKi8KK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9zZXRp bnRlcnZhbChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIGludCBtc2VjcykKK3sKKwlz dHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5pdl9yczsKKwlpbnQgdDsKKwor CWlmIChtc2VjcyA8IDEwMCkKKwkJbXNlY3MgPSAxMDA7CisJdCA9IG1zZWNzX3RvX3RpY2tzKG1z ZWNzKTsKKwkvKiBpZWVlODAyMTFfc2FtcGxlIGRvZXNuJ3QgaGF2ZSB0aGUgc2FtcGxlX2ludGVy dmFsIGZpZWxkIGJ5IG5vdyAqLworCS8vIHNhbXBsZS0+c2FtcGxlX2ludGVydmFsID0gKHQgPCAx KSA/IDEgOiB0OworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3N0YXRzKHZvaWQgKmFyZywgc3Ry dWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBu aS0+bmlfdmFwOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9y Y3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjEx X2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJdWludDY0X3QgbWFzazsK KwlpbnQgcml4LCB5OworCisJcHJpbnRmKCJcblslc10gcmVmY250ICVkIHN0YXRpY19yaXggKCVk ICVzKSByYXRlbWFzayAweCVqeFxuIiwKKwkgICAgZXRoZXJfc3ByaW50ZihuaS0+bmlfbWFjYWRk ciksIGllZWU4MDIxMV9ub2RlX3JlZmNudChuaSksCisJICAgIGRvdDExcmF0ZShydCwgc2FuLT5z dGF0aWNfcml4KSwKKwkgICAgZG90MTFyYXRlX2xhYmVsKHJ0LCBzYW4tPnN0YXRpY19yaXgpLAor CSAgICAodWludG1heF90KXNhbi0+cmF0ZW1hc2spOworCWZvciAoeSA9IDA7IHkgPCBOVU1fUEFD S0VUX1NJWkVfQklOUzsgeSsrKSB7CisJCXByaW50ZigiWyU0dV0gY3VyIHJpeCAlZCAoJWQgJXMp IHNpbmNlIHN3aXRjaDogcGFja2V0cyAlZCB0aWNrcyAldVxuIiwKKwkJICAgIGJpbl90b19zaXpl KHkpLCBzYW4tPmN1cnJlbnRfcml4W3ldLAorCQkgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmN1cnJl bnRfcml4W3ldKSwKKwkJICAgIGRvdDExcmF0ZV9sYWJlbChydCwgc2FuLT5jdXJyZW50X3JpeFt5 XSksCisJCSAgICBzYW4tPnBhY2tldHNfc2luY2Vfc3dpdGNoW3ldLCBzYW4tPnRpY2tzX3NpbmNl X3N3aXRjaFt5XSk7CisJCXByaW50ZigiWyU0dV0gbGFzdCBzYW1wbGUgKCVkICVzKSBjdXIgc2Ft cGxlICglZCAlcykgcGFja2V0cyBzZW50ICVkXG4iLAorCQkgICAgYmluX3RvX3NpemUoeSksCisJ CSAgICBkb3QxMXJhdGUocnQsIHNhbi0+bGFzdF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIGRvdDEx cmF0ZV9sYWJlbChydCwgc2FuLT5sYXN0X3NhbXBsZV9yaXhbeV0pLAorCQkgICAgZG90MTFyYXRl KHJ0LCBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFt5XSksCisJCSAgICBkb3QxMXJhdGVfbGFiZWwo cnQsIHNhbi0+Y3VycmVudF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIHNhbi0+cGFja2V0c19zZW50 W3ldKTsKKwkJcHJpbnRmKCJbJTR1XSBwYWNrZXRzIHNpbmNlIHNhbXBsZSAlZCBzYW1wbGUgdHQg JXVcbiIsCisJCSAgICBiaW5fdG9fc2l6ZSh5KSwgc2FuLT5wYWNrZXRzX3NpbmNlX3NhbXBsZVt5 XSwKKwkJICAgIHNhbi0+c2FtcGxlX3R0W3ldKTsKKwl9CisJZm9yIChtYXNrID0gc2FuLT5yYXRl bWFzaywgcml4ID0gMDsgbWFzayAhPSAwOyBtYXNrID4+PSAxLCByaXgrKykgeworCQlpZiAoKG1h c2sgJiAxKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQlmb3IgKHkgPSAwOyB5IDwgTlVNX1BBQ0tF VF9TSVpFX0JJTlM7IHkrKykgeworCQkJaWYgKHNhbi0+c3RhdHNbeV1bcml4XS50b3RhbF9wYWNr ZXRzID09IDApCisJCQkJY29udGludWU7CisJCQlwcmludGYoIlslMnUgJXM6JTR1XSAlOGp1OiUt OGp1ICglM2QlJSkgKEVXTUEgJTNkLiUxZCUlKSBUICU4anUgRiAlNGQgYXZnICU1dSBsYXN0ICV1 XG4iLAorCQkJICAgIGRvdDExcmF0ZShydCwgcml4KSwgZG90MTFyYXRlX2xhYmVsKHJ0LCByaXgp LAorCQkJICAgIGJpbl90b19zaXplKHkpLAorCQkJICAgICh1aW50bWF4X3QpIHNhbi0+c3RhdHNb eV1bcml4XS50b3RhbF9wYWNrZXRzLAorCQkJICAgICh1aW50bWF4X3QpIHNhbi0+c3RhdHNbeV1b cml4XS5wYWNrZXRzX2Fja2VkLAorCQkJICAgIChpbnQpICgoc2FuLT5zdGF0c1t5XVtyaXhdLnBh Y2tldHNfYWNrZWQgKiAxMDBVTEwpIC8KKwkJCSAgICAgc2FuLT5zdGF0c1t5XVtyaXhdLnRvdGFs X3BhY2tldHMpLAorCQkJICAgIHNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCAvIDEwLAorCQkJ ICAgIHNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCAlIDEwLAorCQkJICAgICh1aW50bWF4X3Qp IHNhbi0+c3RhdHNbeV1bcml4XS50cmllcywKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uc3Vj Y2Vzc2l2ZV9mYWlsdXJlcywKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uYXZlcmFnZV90eF90 aW1lLAorCQkJICAgIHRpY2tzIC0gc2FuLT5zdGF0c1t5XVtyaXhdLmxhc3RfdHgpOworCQl9CisJ fQorfQorCitzdGF0aWMgaW50CitzYW1wbGVfc3lzY3RsX3N0YXRzKFNZU0NUTF9IQU5ETEVSX0FS R1MpCit7CisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gYXJnMTsKKwlzdHJ1Y3QgaWVlZTgw MjExY29tICppYyA9IHZhcC0+aXZfaWZwLT5pZl9sMmNvbTsKKwlpbnQgZXJyb3IsIHY7CisKKwl2 ID0gMDsKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ2LCAwLCByZXEpOworCWlm IChlcnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZWVlODAyMTFfaXRl cmF0ZV9ub2RlcygmaWMtPmljX3N0YSwgc2FtcGxlX3N0YXRzLCBOVUxMKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludAorc2FtcGxlX3N5c2N0bF9zbW9vdGhpbmdfcmF0ZShTWVNDVExfSEFO RExFUl9BUkdTKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGFyZzE7CisJc3RydWN0 IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHZhcC0+aXZfcnM7CisJaW50IHJhdGUsIGVycm9y OworCisJcmF0ZSA9IHNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19yYXRlOworCWVycm9yID0gc3lz Y3RsX2hhbmRsZV9pbnQob2lkcCwgJnJhdGUsIDAsIHJlcSk7CisJaWYgKGVycm9yIHx8ICFyZXEt Pm5ld3B0cikKKwkJcmV0dXJuIGVycm9yOworCWlmICghKDAgPD0gcmF0ZSAmJiByYXRlIDwgMTAw KSkKKwkJcmV0dXJuIEVJTlZBTDsKKwlzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZSA9IHJh dGU7CisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX21pbnBhY2tldHMgPSAxMDAgLyAoMTAwIC0g cmF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhbXBsZV9zeXNjdGxfc2FtcGxl X3JhdGUoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAg PSBhcmcxOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOwor CWludCByYXRlLCBlcnJvcjsKKworCXJhdGUgPSBzYW1wbGUtPnNhbXBsZV9yYXRlOworCWVycm9y ID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJnJhdGUsIDAsIHJlcSk7CisJaWYgKGVycm9yIHx8 ICFyZXEtPm5ld3B0cikKKwkJcmV0dXJuIGVycm9yOworCWlmICghKDIgPD0gcmF0ZSAmJiByYXRl IDw9IDEwMCkpCisJCXJldHVybiBFSU5WQUw7CisJc2FtcGxlLT5zYW1wbGVfcmF0ZSA9IHJhdGU7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfc3lzY3RsYXR0YWNoKHN0cnVj dCBpZWVlODAyMTF2YXAgKnZhcCwKKyAgICBzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICpjdHgsIHN0 cnVjdCBzeXNjdGxfb2lkICp0cmVlKQoreworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9D SElMRFJFTih0cmVlKSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfc21vb3RoaW5nX3JhdGUiLCBD VExUWVBFX0lOVCB8IENUTEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zbW9v dGhpbmdfcmF0ZSwgIkkiLAorCSAgICAic2FtcGxlOiBzbW9vdGhpbmcgcmF0ZSBmb3IgYXZnIHR4 IHRpbWUgKCUlKSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9DSElMRFJFTih0cmVl KSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfcmF0ZSIsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19S VywgdmFwLCAwLAorCSAgICBzYW1wbGVfc3lzY3RsX3NhbXBsZV9yYXRlLCAiSSIsCisJICAgICJz YW1wbGU6IHBlcmNlbnQgYWlyIHRpbWUgZGV2b3RlZCB0byBzYW1wbGluZyBuZXcgcmF0ZXMgKCUl KSIpOworCS8qIFhYWCBtYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcywgc3RhbGVfZmFpbHVyZV90aW1l b3V0LCBtaW5fc3dpdGNoICovCisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVO KHRyZWUpLCBPSURfQVVUTywKKwkgICAgInNhbXBsZV9zdGF0cyIsIENUTFRZUEVfSU5UIHwgQ1RM RkxBR19SVywgdmFwLCAwLAorCSAgICBzYW1wbGVfc3lzY3RsX3N0YXRzLCAiSSIsICJzYW1wbGU6 IHByaW50IHN0YXRpc3RpY3MiKTsKK30KSW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yY19zYW1w bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmgJKHJldmlz aW9uIDApCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmgJKHJldmlzaW9uIDI1Njgy NSkKQEAgLTAsMCArMSwyODcgQEAKKy8qICRGcmVlQlNEOiBoZWFkL3N5cy9kZXYvYXRoL2F0aF9y YXRlL3NhbXBsZS9zYW1wbGUuaCAyNDAzODIgMjAxMi0wOC0xNSAwNzoxMDoxMFogYWRyaWFuICQq LworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBKb2huIEJpY2tldAorICogQ29weXJpZ2h0 IChjKSAyMDEzIENoZW5jaG9uZyBRaW4gPGNjcWluQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5p bXVtIGEgZGlzY2xhaW1lcgorICogICAgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNj bGFpbWVyIGJlbG93ICgiRGlzY2xhaW1lciIpIGFuZCBhbnkKKyAqICAgIHJlZGlzdHJpYnV0aW9u IG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbiBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5CisgKiAg ICBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIgYmluYXJ5IHJlZGlz dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBj b3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3Jz IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFT IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJ TkdFTUVOVCwgTUVSQ0hBTlRJQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJ R0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBM QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIx MV9SQVRFQ1RMX1NBTVBMRV9IXworI2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExf U0FNUExFX0hfCisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCisv KgorICogZm9yIG5vdywgd2UgdHJhY2sgcGVyZm9ybWFuY2UgZm9yIHRocmVlIGRpZmZlcmVudCBw YWNrZXQKKyAqIHNpemUgYnVja2V0cworICovCisjZGVmaW5lIE5VTV9QQUNLRVRfU0laRV9CSU5T IDIKKyNkZWZpbmUJU0FNUExFX01BWFJBVEVTCTY0CQkvKiBOQjogY29ycmVzcG9uZHMgdG8gaGFs IGluZm9bMzJdICovCisKKy8qCisgKiBSYXRlIGNvbnRyb2wgc2V0dGluZ3MuCisgKi8KK3N0cnVj dCBpZWVlODAyMTFfc2FtcGxlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgc2FtcGxlX3N0 YXQ7CisJaW50CXNhbXBsZV9zbW9vdGhpbmdfcmF0ZTsJCQkvKiBld21hIHBlcmNlbnRhZ2UgWzAu Ljk5XSAqLworCWludAlzYW1wbGVfc21vb3RoaW5nX21pbnBhY2tldHM7CisJaW50CXNhbXBsZV9y YXRlOwkJCS8qICV0aW1lIHRvIHRyeSBkaWZmZXJlbnQgdHggcmF0ZXMgKi8KKwlpbnQJc2FtcGxl X21heF9zdWNjZXNzaXZlX2ZhaWx1cmVzOworCWludAlzYW1wbGVfc3RhbGVfZmFpbHVyZV90aW1l b3V0OwkvKiBob3cgbG9uZyB0byBob25vciBtYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlcyAqLworCWlu dAlzYW1wbGVfbWluX3N3aXRjaDsJCS8qIG1pbiB0aW1lIGJldHdlZW4gcmF0ZSBjaGFuZ2VzICov CisJaW50CXNhbXBsZV9taW5fZ29vZF9wY3Q7CS8qIG1pbiBnb29kIHBlcmNlbnRhZ2UgZm9yIGEg cmF0ZSB0byBiZSBjb25zaWRlcmVkICovCit9OworCitzdHJ1Y3QgcmF0ZV9zdGF0cyB7CQorCXVu c2lnbmVkIGF2ZXJhZ2VfdHhfdGltZTsKKwlpbnQgc3VjY2Vzc2l2ZV9mYWlsdXJlczsKKwl1aW50 NjRfdCB0cmllczsKKwl1aW50NjRfdCB0b3RhbF9wYWNrZXRzOwkvKiBwa3RzIHRvdGFsIHNpbmNl IGFzc29jICovCisJdWludDY0X3QgcGFja2V0c19hY2tlZDsJLyogcGt0cyBhY2tlZCBzaW5jZSBh c3NvYyAqLworCWludCBld21hX3BjdDsJLyogRVdNQSBwZXJjZW50YWdlICovCisJdW5zaWduZWQg cGVyZmVjdF90eF90aW1lOyAvKiB0cmFuc21pdCB0aW1lIGZvciAwIHJldHJpZXMgKi8KKwlpbnQg bGFzdF90eDsKK307CisKK3N0cnVjdCB0eHNjaGVkdWxlIHsKKwl1aW50OF90CXQwLCByMDsJCS8q IHNlcmllcyAwOiB0cmllcywgcmF0ZSBjb2RlICovCisJdWludDhfdAl0MSwgcjE7CQkvKiBzZXJp ZXMgMTogdHJpZXMsIHJhdGUgY29kZSAqLworCXVpbnQ4X3QJdDIsIHIyOwkJLyogc2VyaWVzIDI6 IHRyaWVzLCByYXRlIGNvZGUgKi8KKwl1aW50OF90CXQzLCByMzsJCS8qIHNlcmllcyAzOiB0cmll cywgcmF0ZSBjb2RlICovCit9OworCisvKgorICogUmF0ZSBjb250cm9sIHN0YXRlIGZvciBhIGdp dmVuIG5vZGUuCisgKi8KKy8qIFhYWCBjaGFuZ2UgbmFtaW5nIGNvbnZlcnNpb24/ICovCitzdHJ1 Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2Fu X3NhbXBsZTsvKiBiYWNrcG9pbnRlciAqLworCWludCBzdGF0aWNfcml4OwkJCS8qIHJhdGUgaW5k ZXggb2YgZml4ZWQgdHggcmF0ZSAqLworCXVpbnQ2NF90IHJhdGVtYXNrOwkJLyogYml0IG1hc2sg b2YgdmFsaWQgcmF0ZSBpbmRpY2VzICovCisJY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgKnNjaGVk OwkvKiB0eCBzY2hlZHVsZSB0YWJsZSAqLworCisJc3RydWN0IHJhdGVfc3RhdHMgc3RhdHNbTlVN X1BBQ0tFVF9TSVpFX0JJTlNdW1NBTVBMRV9NQVhSQVRFU107CisJaW50IGxhc3Rfc2FtcGxlX3Jp eFtOVU1fUEFDS0VUX1NJWkVfQklOU107CisKKwlpbnQgY3VycmVudF9zYW1wbGVfcml4W05VTV9Q QUNLRVRfU0laRV9CSU5TXTsgICAgICAgCisJaW50IHBhY2tldHNfc2VudFtOVU1fUEFDS0VUX1NJ WkVfQklOU107CisKKwlpbnQgY3VycmVudF9yaXhbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCWlu dCBwYWNrZXRzX3NpbmNlX3N3aXRjaFtOVU1fUEFDS0VUX1NJWkVfQklOU107CisJdW5zaWduZWQg dGlja3Nfc2luY2Vfc3dpdGNoW05VTV9QQUNLRVRfU0laRV9CSU5TXTsKKworCWludCBwYWNrZXRz X3NpbmNlX3NhbXBsZVtOVU1fUEFDS0VUX1NJWkVfQklOU107CisJdW5zaWduZWQgc2FtcGxlX3R0 W05VTV9QQUNLRVRfU0laRV9CSU5TXTsKK307CisKKyNkZWZpbmUJSVNfUkFURV9ERUZJTkVEKHNh biwgcml4KQkoKChzYW4pLT5yYXRlbWFzayAmICgxPDwocml4KSkpICE9IDApCisKKyNpZm5kZWYg TUlOCisjZGVmaW5lCU1JTihhLGIpCSgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZW5kaWYKKyNp Zm5kZWYgTUFYCisjZGVmaW5lCU1BWChhLGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZW5k aWYKKworc3RhdGljIGNvbnN0IGludCBwYWNrZXRfc2l6ZV9iaW5zW05VTV9QQUNLRVRfU0laRV9C SU5TXSAgPSB7IDI1MCwgMTYwMCB9OworCitzdGF0aWMgaW5saW5lIGludAorYmluX3RvX3NpemUo aW50IGluZGV4KQoreworCXJldHVybiBwYWNrZXRfc2l6ZV9iaW5zW2luZGV4XTsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK3NpemVfdG9fYmluKGludCBzaXplKSAKK3sKKyNpZiBOVU1fUEFDS0VU X1NJWkVfQklOUyA+IDEKKwlpZiAoc2l6ZSA8PSBwYWNrZXRfc2l6ZV9iaW5zWzBdKQorCQlyZXR1 cm4gMDsKKyNlbmRpZgorI2lmIE5VTV9QQUNLRVRfU0laRV9CSU5TID4gMgorCWlmIChzaXplIDw9 IHBhY2tldF9zaXplX2JpbnNbMV0pCisJCXJldHVybiAxOworI2VuZGlmCisjaWYgTlVNX1BBQ0tF VF9TSVpFX0JJTlMgPiAzCisJaWYgKHNpemUgPD0gcGFja2V0X3NpemVfYmluc1syXSkKKwkJcmV0 dXJuIDI7CisjZW5kaWYKKyNpZiBOVU1fUEFDS0VUX1NJWkVfQklOUyA+IDQKKyNlcnJvciAiYWRk IHN1cHBvcnQgZm9yIG1vcmUgcGFja2V0IHNpemVzIgorI2VuZGlmCisJcmV0dXJuIE5VTV9QQUNL RVRfU0laRV9CSU5TLTE7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBzYW1wbGVfcGt0X3R4dGltZShj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0LAorCXVpbnQzMl90IGZyYW1lTGVu LCB1aW50MTZfdCByYXRlaXgsIGludCBpc2h0NDAsIGludCBpc1Nob3J0UHJlYW1ibGUpCit7CisJ dWludDhfdCByYzsKKyAgICBpbnQgbnVtU3RyZWFtczsKKworICAgIHJjID0gcnQtPmluZm9bcmF0 ZWl4XS5yYXRlQ29kZTsKKworICAgIC8qIExlZ2FjeSByYXRlPyBSZXR1cm4gdGhlIG9sZCB3YXkg Ki8KKyAgICBpZiAoISBJU19IVF9SQVRFKHJjKSkKKyAgICAJcmV0dXJuIGllZWU4MDIxMV9jb21w dXRlX2R1cmF0aW9uKHJ0LCBmcmFtZUxlbiwgcmF0ZWl4LCBpc1Nob3J0UHJlYW1ibGUpOworCisg ICAgLyogMTFuIGZyYW1lIC0gZXh0cmFjdCBvdXQgdGhlIG51bWJlciBvZiBzcGF0aWFsIHN0cmVh bXMgKi8KKyAgICBudW1TdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKKyAgICBLQVNTRVJU KG51bVN0cmVhbXMgPiAwICYmIG51bVN0cmVhbXMgPD0gNCwKKyAgICAgICAgKCJudW1iZXIgb2Yg c3BhdGlhbCBzdHJlYW1zIG5lZWRzIHRvIGJlIDEuLjM6IE1DUyByYXRlIDB4JXghIiwKKyAgICAg ICAgcmF0ZWl4KSk7CisKKyAgICByZXR1cm4gaWVlZTgwMjExX2NvbXB1dGVfZHVyYXRpb25faHQo ZnJhbWVMZW4sIHJjLCBudW1TdHJlYW1zLCBpc2h0NDAsIGlzU2hvcnRQcmVhbWJsZSk7Cit9CisK KyNkZWZpbmUgV0lGSV9DV19NSU4gMzEKKyNkZWZpbmUgV0lGSV9DV19NQVggMTAyMworCisvKgor ICogQ2FsY3VsYXRlIHRoZSB0cmFuc21pdCBkdXJhdGlvbiBvZiBhIGZyYW1lLgorICovCitzdGF0 aWMgdW5zaWduZWQgY2FsY191c2Vjc191bmljYXN0X3BhY2tldChjb25zdCBzdHJ1Y3QgaWVlZTgw MjExdmFwICp2YXAsCisJCQkJaW50IGxlbmd0aCwKKwkJCQlpbnQgcml4LCBpbnQgc2hvcnRfcmV0 cmllcywKKwkJCQlpbnQgbG9uZ19yZXRyaWVzLCBpbnQgaXNfaHQ0MCkKK3sKKwljb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFw LT5pdl9pYy0+aWNfY3VyY2hhbik7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2 X2ljOworCWludCBjdXJtb2RlID0gaWVlZTgwMjExX2NoYW4ybW9kZSh2YXAtPml2X2ljLT5pY19j dXJjaGFuKTsKKwkKKwl1bnNpZ25lZCB0X3Nsb3QsIHRfZGlmcywgdF9zaWZzOyAKKwlpbnQgcnRz LCBjdHM7CisJaW50IHR0LCB4LCBjdywgY2l4OworCisJaW50IHR0ID0gMDsKKwlpbnQgeCA9IDA7 CisJaW50IGN3ID0gV0lGSV9DV19NSU47CisKKwlLQVNTRVJUKHJ0ICE9IE5VTEwsICgibm8gcmF0 ZSB0YWJsZSwgbW9kZSAldSIsIGN1cm1vZGUpKTsKKworCWlmIChyaXggPj0gcnQtPnJhdGVDb3Vu dCkgeworCQlwcmludGYoImJvZ3VzIHJpeCAlZCwgbWF4ICV1LCBtb2RlICV1XG4iLAorCQkgICAg ICAgcml4LCBydC0+cmF0ZUNvdW50LCBjdXJtb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCWNpeCA9 IHJ0LT5pbmZvW3JpeF0uY29udHJvbFJhdGU7CisJLyogCisJICogWFhYIGdldHRpbmcgbWFjL3Bo eSBsZXZlbCB0aW1pbmdzIHNob3VsZCBiZSBmaXhlZCBmb3IgdHVyYm8KKwkgKiByYXRlcywgYW5k IHRoZXJlIGlzIHByb2JhYmx5IGEgd2F5IHRvIGdldCB0aGlzIGZyb20gdGhlCisJICogaGFsLi4u CisJICovCisJc3dpdGNoIChydC0+aW5mb1tyaXhdLnBoeSkgeworCWNhc2UgSUVFRTgwMjExX1Rf T0ZETToKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gMTY7CisJCXRfZGlmcyA9IDI4OworCQkv KiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIElFRUU4MDIxMV9UX1RVUkJPOgorCQl0X3Nsb3QgPSA5 OworCQl0X3NpZnMgPSA4OworCQl0X2RpZnMgPSAyODsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAy MTFfVF9IVDoKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gODsKKwkJdF9kaWZzID0gMjg7CisJ CWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1RfRFM6CisJCS8qIGZhbGwgdGhyb3VnaCB0byBkZWZh dWx0ICovCisJZGVmYXVsdDoKKwkJLyogcGcgMjA1IGllZWUuODAyLjExLnBkZiAqLworCQl0X3Ns b3QgPSAyMDsKKwkJdF9kaWZzID0gNTA7CisJCXRfc2lmcyA9IDEwOworCX0KKworCXJ0cyA9IGN0 cyA9IDA7CisKKwlpZiAoKGljLT5pY19mbGFncyAmIElFRUU4MDIxMV9GX1VTRVBST1QpICYmCisJ ICAgIHJ0LT5pbmZvW3JpeF0ucGh5ID09IElFRUU4MDIxMV9UX09GRE0pIHsKKwkJaWYgKGljLT5p Y19wcm90bW9kZSA9PSBJRUVFODAyMTFfUFJPVF9SVFNDVFMpCisJCQlydHMgPSAxOworCQllbHNl IGlmIChpYy0+aWNfcHJvdG1vZGUgPT0gSUVFRTgwMjExX1BST1RfQ1RTT05MWSkKKwkJCWN0cyA9 IDE7CisKKwkJaW50IHByb3RyaXg7CisgICAgCWlmIChjdXJtb2RlID09IElFRUU4MDIxMV9NT0RF XzExRykKKyAgICAJICAgIHByb3RyaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4WzIqMl07CisgICAg CWVsc2UgCisgICAgCSAgICBwcm90cml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFsyKjFdOworICAg IAlpZiAoMHhmZiA9PSBwcm90cml4KQorICAgIAkJcHJvdHJpeCA9IDA7CisKKwkJY2l4ID0gcnQt PmluZm9bcHJvdHJpeF0uY29udHJvbFJhdGU7CisJfQorCisJaWYgKDAgLypsZW5ndGggPiBpYy0+ aWNfcnRzdGhyZXNob2xkICovKSB7CisJCXJ0cyA9IDE7CisJfQorCisJaWYgKHJ0cyB8fCBjdHMp IHsKKwkJaW50IGN0c3JhdGU7CisJCWludCBjdHNkdXJhdGlvbiA9IDA7CisKKwkJLyogTkI6IHRo aXMgaXMgaW50ZW50aW9uYWxseSBub3QgYSBydW50aW1lIGNoZWNrICovCisJCUtBU1NFUlQoY2l4 IDwgcnQtPnJhdGVDb3VudCwKKwkJICAgICgiYm9ndXMgY2l4ICVkLCBtYXggJXUsIG1vZGUgJXVc biIsIGNpeCwgcnQtPnJhdGVDb3VudCwKKwkJICAgICBjdXJtb2RlKSk7CisKKwkJY3RzcmF0ZSA9 IHJ0LT5pbmZvW2NpeF0ucmF0ZUNvZGUgfCBydC0+aW5mb1tjaXhdLnNob3J0UHJlYW1ibGU7CisJ CWlmIChydHMpCQkvKiBTSUZTICsgQ1RTICovCisJCQljdHNkdXJhdGlvbiArPSBydC0+aW5mb1tj aXhdLnNwQWNrRHVyYXRpb247CisKKwkJLyogWFhYIGFzc3VtZXMgc2hvcnQgcHJlYW1ibGUgKi8K KwkJY3RzZHVyYXRpb24gKz0gc2FtcGxlX3BrdF90eHRpbWUocnQsIGxlbmd0aCwgcml4LCBpc19o dDQwLCAwKTsKKworCQlpZiAoY3RzKQkvKiBTSUZTICsgQUNLICovCisJCQljdHNkdXJhdGlvbiAr PSBydC0+aW5mb1tjaXhdLnNwQWNrRHVyYXRpb247CisKKwkJdHQgKz0gKHNob3J0X3JldHJpZXMg KyAxKSAqIGN0c2R1cmF0aW9uOworCX0KKwl0dCArPSB0X2RpZnM7CisKKwkvKiBYWFggYXNzdW1l cyBzaG9ydCBwcmVhbWJsZSAqLworCXR0ICs9IChsb25nX3JldHJpZXMrMSkqc2FtcGxlX3BrdF90 eHRpbWUocnQsIGxlbmd0aCwgcml4LCBpc19odDQwLCAwKTsKKworCXR0ICs9IChsb25nX3JldHJp ZXMrMSkqKHRfc2lmcyArIHJ0LT5pbmZvW3JpeF0uc3BBY2tEdXJhdGlvbik7CisKKwlmb3IgKHgg PSAwOyB4IDw9IHNob3J0X3JldHJpZXMgKyBsb25nX3JldHJpZXM7IHgrKykgeworCQljdyA9IE1J TihXSUZJX0NXX01BWCwgKGN3ICsgMSkgKiAyKTsKKwkJdHQgKz0gKHRfc2xvdCAqIGN3LzIpOwor CX0KKwlyZXR1cm4gdHQ7Cit9CisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVD VExfU0FNUExFX0hfICovCkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lv biAwKQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lvbiAyNTY4 MjUpCkBAIC0wLDAgKzEsMzggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDEzIENoZW5jaG9u ZyBRaW4gPGNjcWluQEZyZWVCU0Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9z ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRo ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBh cHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVH QVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YK KyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAq IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04s IEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX05FVDgwMjExX0lFRUU4 MDIxMV9SQVRFQ1RMX05PTkVfSF8KKyNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RM X05PTkVfSF8KKworI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CisKKy8q CisgKiBSYXRlIGNvbnRyb2wgc2V0dGluZ3MuCisgKi8KKworc3RydWN0IGllZWU4MDIxMV9ub25l IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgbm9uZV9zdGF0OworCS8qIG90aGVyIHN0dWZm cyAqLworfTsKKworLyoKKyAqIFJhdGUgY29udHJvbCBzdGF0ZSBmb3IgYSBnaXZlbiBub2RlLgor ICovCitzdHJ1Y3QgaWVlZTgwMjExX25vbmVfbm9kZSB7CisJc3RydWN0IGllZWU4MDIxMV9ub25l ICpub25fbm9uZTsKK307CisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExf Tk9ORV9IXyAqLwpJbmRleDogbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90eHNjaGVkLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90eHNjaGVkLmgJKHJl dmlzaW9uIDApCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQuaAkocmV2 aXNpb24gMjU2ODI1KQpAQCAtMCwwICsxLDI0MSBAQAorLyogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rl di9hdGgvYXRoX3JhdGUvc2FtcGxlL3R4X3NjaGVkdWxlcy5oIDI0MDM4NCAyMDEyLTA4LTE1IDA3 OjUwOjQyWiBhZHJpYW4gJCovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1IEpvaG4gQmlj a2V0CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgQ2hlbmNob25nIFFpbiA8Y2NxaW5ARnJlZUJTRC5v cmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQg bW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzaW1pbGFyIHRvIHRoZSAi Tk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cgKCJEaXNjbGFpbWVyIikgYW5kIGFueQorICog ICAgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1 YnN0YW50aWFsbHkKKyAqICAgIHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVy dGhlciBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0 aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9m IGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3 YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U UklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTk9OSU5GUklOR0VNRU5ULCBNRVJDSEFOVElCSUxJVFkKKyAqIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisjaWZuZGVm CV9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9TQU1QTEVfVFhTQ0hFRFVMRVNfSF8KKyNkZWZp bmUJX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9UWFNDSEVEVUxFU19IXworCisj aW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNkZWZpbmUgQShfcikgXAorICAgICgoKF9yKSA9PSA2 KSAgID8gMCA6ICgoKF9yKSA9PSA5KSAgID8gMSA6ICgoKF9yKSA9PSAxMikgID8gMiA6IFwKKyAg ICAoKChfcikgPT0gMTgpICA/IDMgOiAoKChfcikgPT0gMjQpICA/IDQgOiAoKChfcikgPT0gMzYp ICA/IDUgOiBcCisgICAgKCgoX3IpID09IDQ4KSAgPyA2IDogKCgoX3IpID09IDU0KSAgPyA3IDog MCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzXzExYVtdID0g eworCXsgMyxBKCA2KSwgMyxBKCAgNiksIDAsQSggIDYpLCAwLEEoIDYpIH0sCS8qICAgNk1iL3Mg Ki8KKwl7IDQsQSggOSksIDMsQSggIDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9LAkvKiAgIDlNYi9z ICovCisJeyA0LEEoMTIpLCAzLEEoICA2KSwgNCxBKCAgNiksIDAsQSggNikgfSwJLyogIDEyTWIv cyAqLworCXsgNCxBKDE4KSwgMyxBKCAxMiksIDQsQSggIDYpLCAyLEEoIDYpIH0sCS8qICAxOE1i L3MgKi8KKwl7IDQsQSgyNCksIDMsQSggMTgpLCA0LEEoIDEyKSwgMixBKCA2KSB9LAkvKiAgMjRN Yi9zICovCisJeyA0LEEoMzYpLCAzLEEoIDI0KSwgNCxBKCAxOCksIDIsQSggNikgfSwJLyogIDM2 TWIvcyAqLworCXsgNCxBKDQ4KSwgMyxBKCAzNiksIDQsQSggMjQpLCAyLEEoMTIpIH0sCS8qICA0 OE1iL3MgKi8KKwl7IDQsQSg1NCksIDMsQSggNDgpLCA0LEEoIDM2KSwgMixBKDI0KSB9CS8qICA1 NE1iL3MgKi8KK307CisKKyNkZWZpbmUgTkExKF9yKSBcCisJKCgoX3IpID09IDYuNSkgID8gOCA6 ICgoKF9yKSA9PSAxMykgID8gIDkgOiAoKChfcikgPT0gMTkuNSk/IDEwIDogXAorCSgoKF9yKSA9 PSAyNikgID8gMTEgOiAoKChfcikgPT0gMzkpICA/IDEyIDogKCgoX3IpID09IDUyKSAgPyAxMyA6 IFwKKwkoKChfcikgPT0gNTguNSk/IDE0IDogKCgoX3IpID09IDY1KSAgPyAxNSA6IDApKSkpKSkp KQorI2RlZmluZSBOQTIoX3IpIFwKKwkoKChfcikgPT0gMTMpID8gMTYgOiAoKChfcikgPT0gMjYp ID8gMTcgOiAoKChfcikgPT0gMzkpID8gMTggOiBcCisJKCgoX3IpID09IDUyKSA/IDE5IDogKCgo X3IpID09IDc4KSA/IDIwIDogKCgoX3IpID09IDEwNCk/IDIxIDogXAorCSgoKF9yKSA9PSAxMTcp PyAyMiA6ICgoKF9yKSA9PSAxMzApPyAyMyA6IDApKSkpKSkpKQorI2RlZmluZSBOQTMoX3IpIFwK KwkoKChfcikgPT0gMTkuNSkgID8gMjQgOiAoKChfcikgPT0gMzkpID8gMjUgOiAoKChfcikgPT0g NTguNSkgID8gMjYgOiBcCisJKCgoX3IpID09IDc4KSAgPyAyNyA6ICgoKF9yKSA9PSAxMTcpID8g MjggOiAoKChfcikgPT0gMTU2KSA/IDI5IDogXAorCSgoKF9yKSA9PSAxNzUuNSkgPyAzMCA6ICgo KF9yKSA9PSAxOTUpPyAzMSA6IDApKSkpKSkpKQorc3RhdGljIGNvbnN0IHN0cnVjdCB0eHNjaGVk dWxlIHNlcmllc18xMW5hW10gPSB7CisJeyAzLEEoIDYpLCAzLEEoICA2KSwgMCxBKCAgNiksIDAs QSggNikgfSwgICAgICAgLyogICA2TWIvcyAqLworCXsgNCxBKCA5KSwgMyxBKCAgNiksIDQsQSgg IDYpLCAwLEEoIDYpIH0sICAgICAgIC8qICAgOU1iL3MgKi8KKwl7IDQsQSgxMiksIDMsQSggIDYp LCA0LEEoICA2KSwgMCxBKCA2KSB9LCAgICAgICAvKiAgMTJNYi9zICovCisJeyA0LEEoMTgpLCAz LEEoIDEyKSwgNCxBKCAgNiksIDIsQSggNikgfSwgICAgICAgLyogIDE4TWIvcyAqLworCXsgNCxB KDI0KSwgMyxBKCAxOCksIDQsQSggMTIpLCAyLEEoIDYpIH0sICAgICAgIC8qICAyNE1iL3MgKi8K Kwl7IDQsQSgzNiksIDMsQSggMjQpLCA0LEEoIDE4KSwgMixBKCA2KSB9LCAgICAgICAvKiAgMzZN Yi9zICovCisJeyA0LEEoNDgpLCAzLEEoIDM2KSwgNCxBKCAyNCksIDIsQSgxMikgfSwgICAgICAg LyogIDQ4TWIvcyAqLworCXsgNCxBKDU0KSwgMyxBKCA0OCksIDQsQSggMzYpLCAyLEEoMjQpIH0s ICAgICAgIC8qICA1NE1iL3MgKi8KKworCS8qIDEgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkEx KCA2LjUpLCAzLE5BMSggNi41KSwgMCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwgIC8qIDYuNU1i L3MgKi8KKwl7IDQsTkExKCAgMTMpLCAzLE5BMSggNi41KSwgNCxOQTEoIDYuNSksIDAsTkExKDYu NSkgfSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkExKDE5LjUpLCAzLE5BMSggNi41KSwgNCxOQTEo IDYuNSksIDAsTkExKDYuNSkgfSwgIC8qMTkuNU1iL3MgKi8KKwl7IDQsTkExKCAgMjYpLCAzLE5B MSgxOS41KSwgNCxOQTEoIDYuNSksIDIsTkExKDYuNSkgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQs TkExKCAgMzkpLCAzLE5BMSggIDI2KSwgNCxOQTEoMTkuNSksIDIsTkExKDYuNSkgfSwgIC8qICAz OU1iL3MgKi8KKwl7IDQsTkExKCAgNTIpLCAzLE5BMSggIDM5KSwgNCxOQTEoICAyNiksIDIsTkEx KDYuNSkgfSwgIC8qICA1Mk1iL3MgKi8KKwl7IDQsTkExKDU4LjUpLCAzLE5BMSggIDUyKSwgNCxO QTEoICAzOSksIDIsTkExKCAxMykgfSwgIC8qNTguNU1iL3MgKi8KKwl7IDQsTkExKCAgNjUpLCAz LE5BMSg1OC41KSwgNCxOQTEoICA1MiksIDIsTkExKCAxMykgfSwgIC8qICA2NU1iL3MgKi8KKwor CS8qIDIgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkEyKCAgMTMpLCAzLE5BMiggIDEzKSwgMCxO QTIoICAxMyksIDAsTkEyKCAxMykgfSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkEyKCAgMjYpLCAz LE5BMiggIDEzKSwgNCxOQTIoICAxMyksIDAsTkEyKCAxMykgfSwgIC8qICAyNk1iL3MgKi8KKwl7 IDQsTkEyKCAgMzkpLCAzLE5BMiggIDI2KSwgNCxOQTIoICAxMyksIDIsTkEyKCAxMykgfSwgIC8q ICAzOU1iL3MgKi8KKwl7IDQsTkEyKCAgNTIpLCAzLE5BMiggIDM5KSwgNCxOQTIoICAyNiksIDIs TkEyKCAxMykgfSwgIC8qICA1Mk1iL3MgKi8KKwl7IDQsTkEyKCAgNzgpLCAzLE5BMiggIDUyKSwg NCxOQTIoICAzOSksIDIsTkEyKCAxMykgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDQsTkEyKCAxMDQp LCAzLE5BMiggIDc4KSwgNCxOQTIoICA1MiksIDIsTkEyKCAxMykgfSwgIC8qIDEwNE1iL3MgKi8K Kwl7IDQsTkEyKCAxMTcpLCAzLE5BMiggMTA0KSwgNCxOQTIoICA3OCksIDIsTkEyKCAyNikgfSwg IC8qIDExN01iL3MgKi8KKwl7IDQsTkEyKCAxMzApLCAzLE5BMiggMTE3KSwgNCxOQTIoIDEwNCks IDIsTkEyKCAyNikgfSwgICAvKiAxMzBNYi9zICovCisKKwkvKiAzIHN0cmVhbSByYXRlcyAqLwor CisJeyAzLE5BMygxOS41KSwgMyxOQTMoMTkuNSksIDAsTkEzKDE5LjUpLCAwLE5BMygxOS41KSB9 LCAgLyogIDE5TWIvcyAqLworCXsgMyxOQTMoICAzOSksIDMsTkEzKDE5LjUpLCAwLE5BMygxOS41 KSwgMCxOQTMoMTkuNSkgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDMsTkEzKDU4LjUpLCAzLE5BMygg IDM5KSwgMCxOQTMoMTkuNSksIDAsTkEzKDE5LjUpIH0sICAvKiAgNThNYi9zICovCisJeyAzLE5B MyggIDc4KSwgMyxOQTMoNTguNSksIDAsTkEzKCAgMzkpLCAwLE5BMygxOS41KSB9LCAgLyogIDc4 TWIvcyAqLworCXsgMyxOQTMoIDExNyksIDMsTkEzKCAgNzgpLCAwLE5BMyg1OC41KSwgMCxOQTMo MTkuNSkgfSwgIC8qIDExN01iL3MgKi8KKwl7IDMsTkEzKCAxNTYpLCAzLE5BMyggMTE3KSwgMCxO QTMoICA3OCksIDAsTkEzKDE5LjUpIH0sICAvKiAgMTU2TWIvcyAqLworCXsgMyxOQTMoMTc1LjUp LCAzLE5BMyggMTU2KSwgMCxOQTMoIDExNyksIDAsTkEzKCAgMzkpIH0sICAvKiAgMTc1TWIvcyAq LworCXsgMyxOQTMoIDE5NSksIDMsTkEzKCAxOTUpLCAwLE5BMyggMTU2KSwgMCxOQTMoNTguNSkg fSwgIC8qIDE5NU1iL3MgKi8KK307CisjdW5kZWYgQQorI3VuZGVmIE5BMworI3VuZGVmIE5BMgor I3VuZGVmIE5BMQorCisjZGVmaW5lIEcoX3IpIFwKKyAgICAoKChfcikgPT0gMSkgICA/IDAgOiAo KChfcikgPT0gMikgICA/IDEgOiAoKChfcikgPT0gNS41KSA/IDIgOiBcCisgICAgKCgoX3IpID09 IDExKSAgPyAzIDogKCgoX3IpID09IDYpICAgPyA0IDogKCgoX3IpID09IDkpICAgPyA1IDogXAor ICAgICgoKF9yKSA9PSAxMikgID8gNiA6ICgoKF9yKSA9PSAxOCkgID8gNyA6ICgoKF9yKSA9PSAy NCkgID8gOCA6IFwKKyAgICAoKChfcikgPT0gMzYpICA/IDkgOiAoKChfcikgPT0gNDgpICA/IDEw IDogKCgoX3IpID09IDU0KSAgPyAxMSA6IDApKSkpKSkpKSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFnW10gPSB7CisJeyAzLEcoIDEpLCAzLEcoICAxKSwgMCxH KCAgMSksIDAsRyggMSkgfSwJLyogICAxTWIvcyAqLworCXsgNCxHKCAyKSwgMyxHKCAgMSksIDQs RyggIDEpLCAwLEcoIDEpIH0sCS8qICAgMk1iL3MgKi8KKwl7IDQsRyg1LjUpLDMsRyggIDIpLCA0 LEcoICAxKSwgMixHKCAxKSB9LAkvKiA1LjVNYi9zICovCisJeyA0LEcoMTEpLCAzLEcoNS41KSwg NCxHKCAgMiksIDIsRyggMSkgfSwJLyogIDExTWIvcyAqLworCXsgNCxHKCA2KSwgMyxHKDUuNSks IDQsRyggIDIpLCAyLEcoIDEpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsRyggOSksIDMsRyggIDYp LCA0LEcoNS41KSwgMixHKCAxKSB9LAkvKiAgIDlNYi9zICovCisJeyA0LEcoMTIpLCAzLEcoIDEx KSwgNCxHKDUuNSksIDIsRyggMSkgfSwJLyogIDEyTWIvcyAqLworCXsgNCxHKDE4KSwgMyxHKCAx MiksIDQsRyggMTEpLCAyLEcoIDEpIH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsRygyNCksIDMsRygg MTgpLCA0LEcoIDEyKSwgMixHKCAxKSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEcoMzYpLCAzLEco IDI0KSwgNCxHKCAxOCksIDIsRyggMSkgfSwJLyogIDM2TWIvcyAqLworCXsgNCxHKDQ4KSwgMyxH KCAzNiksIDQsRyggMjQpLCAyLEcoIDEpIH0sCS8qICA0OE1iL3MgKi8KKwl7IDQsRyg1NCksIDMs RyggNDgpLCA0LEcoIDM2KSwgMixHKCAxKSB9CS8qICA1NE1iL3MgKi8KK307CisKKyNkZWZpbmUg TkcxKF9yKSBcCisJKCgoX3IpID09IDYuNSkgPyAxMiA6ICgoKF9yKSA9PSAxMykgPyAxMyA6ICgo KF9yKSA9PSAxOS41KT8gMTQgOiBcCisJKCgoX3IpID09IDI2KSAgPyAxNSA6ICgoKF9yKSA9PSAz OSkgPyAxNiA6ICgoKF9yKSA9PSA1MikgID8gMTcgOiBcCisJKCgoX3IpID09IDU4LjUpPyAxOCA6 ICgoKF9yKSA9PSA2NSkgPyAxOSA6IDApKSkpKSkpKQorI2RlZmluZSBORzIoX3IpIFwKKwkoKChf cikgPT0gMTMpICA/IDIwIDogKCgoX3IpID09IDI2KSA/IDIxIDogKCgoX3IpID09IDM5KSAgPyAy MiA6IFwKKwkoKChfcikgPT0gNTIpICA/IDIzIDogKCgoX3IpID09IDc4KSA/IDI0IDogKCgoX3Ip ID09IDEwNCkgPyAyNSA6IFwKKwkoKChfcikgPT0gMTE3KSA/IDI2IDogKCgoX3IpID09IDEzMCk/ IDI3IDogMCkpKSkpKSkpCisjZGVmaW5lIE5HMyhfcikgXAorCSgoKF9yKSA9PSAxOS41KSAgPyAy OCA6ICgoKF9yKSA9PSAzOSkgPyAyOSA6ICgoKF9yKSA9PSA1OC41KSAgPyAzMCA6IFwKKwkoKChf cikgPT0gNzgpICA/IDMxIDogKCgoX3IpID09IDExNykgPyAzMiA6ICgoKF9yKSA9PSAxNTYpID8g MzMgOiBcCisJKCgoX3IpID09IDE3NS41KSA/IDM0IDogKCgoX3IpID09IDE5NSk/IDM1IDogMCkp KSkpKSkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFuZ1tdID0g eworCXsgMyxHKCAxKSwgMyxHKCAgMSksIDAsRyggIDEpLCAwLEcoIDEpIH0sICAgICAgIC8qICAg MU1iL3MgKi8KKwl7IDQsRyggMiksIDMsRyggIDEpLCA0LEcoICAxKSwgMCxHKCAxKSB9LCAgICAg ICAvKiAgIDJNYi9zICovCisJeyA0LEcoNS41KSwzLEcoICAyKSwgNCxHKCAgMSksIDIsRyggMSkg fSwgICAgICAgLyogNS41TWIvcyAqLworCXsgNCxHKDExKSwgMyxHKDUuNSksIDQsRyggIDIpLCAy LEcoIDEpIH0sICAgICAgIC8qICAxMU1iL3MgKi8KKwl7IDQsRyggNiksIDMsRyg1LjUpLCA0LEco ICAyKSwgMixHKCAxKSB9LCAgICAgICAvKiAgIDZNYi9zICovCisJeyA0LEcoIDkpLCAzLEcoICA2 KSwgNCxHKDUuNSksIDIsRyggMSkgfSwgICAgICAgLyogICA5TWIvcyAqLworCXsgNCxHKDEyKSwg MyxHKCAxMSksIDQsRyg1LjUpLCAyLEcoIDEpIH0sICAgICAgIC8qICAxMk1iL3MgKi8KKwl7IDQs RygxOCksIDMsRyggMTIpLCA0LEcoIDExKSwgMixHKCAxKSB9LCAgICAgICAvKiAgMThNYi9zICov CisJeyA0LEcoMjQpLCAzLEcoIDE4KSwgNCxHKCAxMiksIDIsRyggMSkgfSwgICAgICAgLyogIDI0 TWIvcyAqLworCXsgNCxHKDM2KSwgMyxHKCAyNCksIDQsRyggMTgpLCAyLEcoIDEpIH0sICAgICAg IC8qICAzNk1iL3MgKi8KKwl7IDQsRyg0OCksIDMsRyggMzYpLCA0LEcoIDI0KSwgMixHKCAxKSB9 LCAgICAgICAvKiAgNDhNYi9zICovCisJeyA0LEcoNTQpLCAzLEcoIDQ4KSwgNCxHKCAzNiksIDIs RyggMSkgfSwgICAgICAgLyogIDU0TWIvcyAqLworCisJLyogMSBzdHJlYW0gcmF0ZXMgKi8KKwor CXsgMyxORzEoIDYuNSksIDMsTkcxKCA2LjUpLCAwLE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAg LyogNi41TWIvcyAqLworCXsgNCxORzEoICAxMyksIDMsTkcxKCA2LjUpLCA0LE5HMSggNi41KSwg MCxORzEoNi41KSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzEoMTkuNSksIDMsTkcxKCA2LjUp LCA0LE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAgLyoxOS41TWIvcyAqLworCXsgNCxORzEoICAy NiksIDMsTkcxKDE5LjUpLCA0LE5HMSggNi41KSwgMixORzEoNi41KSB9LCAgLyogIDI2TWIvcyAq LworCXsgNCxORzEoICAzOSksIDMsTkcxKCAgMjYpLCA0LE5HMSgxOS41KSwgMixORzEoNi41KSB9 LCAgLyogIDM5TWIvcyAqLworCXsgNCxORzEoICA1MiksIDMsTkcxKCAgMzkpLCA0LE5HMSggIDI2 KSwgMixORzEoNi41KSB9LCAgLyogIDUyTWIvcyAqLworCXsgNCxORzEoNTguNSksIDMsTkcxKCAg NTIpLCA0LE5HMSggIDM5KSwgMixORzEoIDEzKSB9LCAgLyo1OC41TWIvcyAqLworCXsgNCxORzEo ICA2NSksIDMsTkcxKDU4LjUpLCA0LE5HMSggIDUyKSwgMixORzEoIDEzKSB9LCAgLyogIDY1TWIv cyAqLworCisJLyogMiBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxORzIoICAxMyksIDMsTkcyKCAg MTMpLCAwLE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzIo ICAyNiksIDMsTkcyKCAgMTMpLCA0LE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDI2TWIv cyAqLworCXsgNCxORzIoICAzOSksIDMsTkcyKCAgMjYpLCA0LE5HMiggIDEzKSwgMixORzIoIDEz KSB9LCAgLyogIDM5TWIvcyAqLworCXsgNCxORzIoICA1MiksIDMsTkcyKCAgMzkpLCA0LE5HMigg IDI2KSwgMixORzIoIDEzKSB9LCAgLyogIDUyTWIvcyAqLworCXsgNCxORzIoICA3OCksIDMsTkcy KCAgNTIpLCA0LE5HMiggIDM5KSwgMixORzIoIDEzKSB9LCAgLyogIDc4TWIvcyAqLworCXsgNCxO RzIoIDEwNCksIDMsTkcyKCAgNzgpLCA0LE5HMiggIDUyKSwgMixORzIoIDEzKSB9LCAgLyogMTA0 TWIvcyAqLworCXsgNCxORzIoIDExNyksIDMsTkcyKCAxMDQpLCA0LE5HMiggIDc4KSwgMixORzIo IDI2KSB9LCAgLyogMTE3TWIvcyAqLworCXsgNCxORzIoIDEzMCksIDMsTkcyKCAxMTcpLCA0LE5H MiggMTA0KSwgMixORzIoIDI2KSB9LCAgLyogMTMwTWIvcyAqLworCisJLyogMyBzdHJlYW0gcmF0 ZXMgKi8KKworCXsgMyxORzMoMTkuNSksIDMsTkczKDE5LjUpLCAwLE5HMygxOS41KSwgMCxORzMo MTkuNSkgfSwgIC8qICAxOU1iL3MgKi8KKwl7IDMsTkczKCAgMzkpLCAzLE5HMygxOS41KSwgMCxO RzMoMTkuNSksIDAsTkczKDE5LjUpIH0sICAvKiAgMzlNYi9zICovCisJeyAzLE5HMyg1OC41KSwg MyxORzMoICAzOSksIDAsTkczKDE5LjUpLCAwLE5HMygxOS41KSB9LCAgLyogIDU4TWIvcyAqLwor CXsgMyxORzMoICA3OCksIDMsTkczKDU4LjUpLCAwLE5HMyggIDM5KSwgMCxORzMoMTkuNSkgfSwg IC8qICA3OE1iL3MgKi8KKwl7IDMsTkczKCAxMTcpLCAzLE5HMyggIDc4KSwgMCxORzMoNTguNSks IDAsTkczKDE5LjUpIH0sICAvKiAxMTdNYi9zICovCisJeyAzLE5HMyggMTU2KSwgMyxORzMoIDEx NyksIDAsTkczKCAgNzgpLCAwLE5HMygxOS41KSB9LCAgLyogIDE1Nk1iL3MgKi8KKwl7IDMsTkcz KDE3NS41KSwgMyxORzMoIDE1NiksIDAsTkczKCAxMTcpLCAwLE5HMyggIDM5KSB9LCAgLyogIDE3 NU1iL3MgKi8KKwl7IDMsTkczKCAxOTUpLCAzLE5HMyggMTk1KSwgMCxORzMoIDE1NiksIDAsTkcz KDU4LjUpIH0sICAvKiAxOTVNYi9zICovCisKK307CisjdW5kZWYgRworI3VuZGVmIE5HMworI3Vu ZGVmIE5HMgorI3VuZGVmIE5HMQorCisjZGVmaW5lIEgoX3IpIFwKKyAgICAoKChfcikgPT0gMykg ICA/IDAgOiAoKChfcikgPT0gNC41KSA/IDEgOiAoKChfcikgPT0gNikgID8gMiA6IFwKKyAgICAo KChfcikgPT0gOSkgICA/IDMgOiAoKChfcikgPT0gMTIpICA/IDQgOiAoKChfcikgPT0gMTgpID8g NSA6IFwKKyAgICAoKChfcikgPT0gMjQpICA/IDYgOiAoKChfcikgPT0gMjcpICA/IDcgOiAwKSkp KSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfaGFsZltdID0gewor CXsgMyxIKCAzKSwgMyxIKCAgMyksIDAsSCggIDMpLCAwLEgoIDMpIH0sCS8qICAgM01iL3MgKi8K Kwl7IDQsSCg0LjUpLDMsSCggIDMpLCA0LEgoICAzKSwgMCxIKCAzKSB9LAkvKiA0LjVNYi9zICov CisJeyA0LEgoIDYpLCAzLEgoICAzKSwgNCxIKCAgMyksIDAsSCggMykgfSwJLyogICA2TWIvcyAq LworCXsgNCxIKCA5KSwgMyxIKCAgNiksIDQsSCggIDMpLCAyLEgoIDMpIH0sCS8qICAgOU1iL3Mg Ki8KKwl7IDQsSCgxMiksIDMsSCggIDkpLCA0LEgoICA2KSwgMixIKCAzKSB9LAkvKiAgMTJNYi9z ICovCisJeyA0LEgoMTgpLCAzLEgoIDEyKSwgNCxIKCAgOSksIDIsSCggMykgfSwJLyogIDE4TWIv cyAqLworCXsgNCxIKDI0KSwgMyxIKCAxOCksIDQsSCggMTIpLCAyLEgoIDYpIH0sCS8qICAyNE1i L3MgKi8KKwl7IDQsSCgyNyksIDMsSCggMjQpLCA0LEgoIDE4KSwgMixIKDEyKSB9CS8qICAyN01i L3MgKi8KK307CisjdW5kZWYgSAorCisjaWZkZWYgUQorI3VuZGVmIFEKKyNlbmRpZgorI2RlZmlu ZSBRKF9yKSBcCisgICAgKCgoX3IpID09IDEuNSkgPyAwIDogKCgoX3IpID09Mi4yNSkgPyAxIDog KCgoX3IpID09IDMpICA/IDIgOiBcCisgICAgKCgoX3IpID09IDQuNSkgPyAzIDogKCgoX3IpID09 ICA2KSAgPyA0IDogKCgoX3IpID09IDkpICA/IDUgOiBcCisgICAgKCgoX3IpID09IDEyKSAgPyA2 IDogKCgoX3IpID09IDEzLjUpPyA3IDogMCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4 c2NoZWR1bGUgc2VyaWVzX3F1YXJ0ZXJbXSA9IHsKKwl7IDMsUSggMS41KSwzLFEoMS41KSwgMCxR KDEuNSksIDAsUSgxLjUpIH0sCS8qIDEuNU1iL3MgKi8KKwl7IDQsUSgyLjI1KSwzLFEoMS41KSwg NCxRKDEuNSksIDAsUSgxLjUpIH0sCS8qMi4yNU1iL3MgKi8KKwl7IDQsUSggICAzKSwzLFEoMS41 KSwgNCxRKDEuNSksIDAsUSgxLjUpIH0sCS8qICAgM01iL3MgKi8KKwl7IDQsUSggNC41KSwzLFEo ICAzKSwgNCxRKDEuNSksIDIsUSgxLjUpIH0sCS8qIDQuNU1iL3MgKi8KKwl7IDQsUSggICA2KSwz LFEoNC41KSwgNCxRKCAgMyksIDIsUSgxLjUpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsUSggICA5 KSwzLFEoICA2KSwgNCxRKDQuNSksIDIsUSgxLjUpIH0sCS8qICAgOU1iL3MgKi8KKwl7IDQsUSgg IDEyKSwzLFEoICA5KSwgNCxRKCAgNiksIDIsUSggIDMpIH0sCS8qICAxMk1iL3MgKi8KKwl7IDQs USgxMy41KSwzLFEoIDEyKSwgNCxRKCAgOSksIDIsUSggIDYpIH0JLyoxMy41TWIvcyAqLworfTsK KyN1bmRlZiBRCisKKyNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfU0FNUExF X1RYU0NIRURVTEVTX0hfICovCkluZGV4OiBuZXQ4MDIxMS9pZWVlODAyMTFfcnNzYWRhcHQuaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcnNzYWRhcHQuaAkocmV2aXNpb24gMjU0 ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX3Jzc2FkYXB0LmgJKHdvcmtpbmcgY29weSkKQEAg LTMyLDYgKzMyLDggQEAKICNpZm5kZWYgX05FVDgwMjExX0lFRUU4MDIxMV9SU1NBREFQVF9IXwog I2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JTU0FEQVBUX0hfCiAKKyNpbmNsdWRlIDxuZXQ4 MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCiAvKiBEYXRhLXJhdGUgYWRhcHRhdGlvbiBsb29z ZWx5IGJhc2VkIG9uICJMaW5rIEFkYXB0YXRpb24gU3RyYXRlZ3kKICAqIGZvciBJRUVFIDgwMi4x MSBXTEFOIHZpYSBSZWNlaXZlZCBTaWduYWwgU3RyZW5ndGggTWVhc3VyZW1lbnQiCiAgKiBieSBK YXZpZXIgZGVsIFByYWRvIFBhdm9uIGFuZCBTdW5naHl1biBDaG9pLgpAQCAtNDMsNiArNDUsNyBA QAogI2RlZmluZQlJRUVFODAyMTFfUlNTQURBUFRfQktUUE9XRVIJMwkvKiAyKipfQktUUE9XRVIg Ki8KIAogc3RydWN0IGllZWU4MDIxMV9yc3NhZGFwdCB7CisJc3RydWN0IGllZWU4MDIxMV9yY19z dGF0IHJzc2FkYXB0X3N0YXQ7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwOwogCWlu dAlpbnRlcnZhbDsJCQkvKiB1cGRhdGUgaW50ZXJ2YWwgKHRpY2tzKSAqLwogfTsKSW5kZXg6IG5l dDgwMjExL2llZWU4MDIxMV9hbXJyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjEx X2FtcnIuaAkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVlZTgwMjExX2FtcnIuaAko d29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBfTkVUODAyMTFfSUVFRTgw MjExX0FNUlJfSF8KICNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9BTVJSX0hfCiAKKyNpbmNs dWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogLyotCiAgKiBOYWl2ZSBpbXBsZW1l bnRhdGlvbiBvZiB0aGUgQWRhcHRpdmUgTXVsdGkgUmF0ZSBSZXRyeSBhbGdvcml0aG06CiAgKgpA QCAtMzUsNiArMzYsNyBAQAogc3RydWN0IGllZWU4MDIxMXZhcDsKIAogc3RydWN0IGllZWU4MDIx MV9hbXJyIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgYW1ycl9zdGF0OwogCXVfaW50CWFt cnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCXVfaW50CWFtcnJfbWF4X3N1Y2Nlc3NfdGhyZXNo b2xkOwogCWludAlhbXJyX2ludGVydmFsOwkJLyogdXBkYXRlIGludGVydmFsICh0aWNrcykgKi8K SW5kZXg6IGRldi9pd24vaWZfaXduLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2l3bi9pZl9pd24uYwko cmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2l3bi9pZl9pd24uYwkod29ya2luZyBjb3B5KQpAQCAt ODc2LDcgKzg3Niw4IEBACiAJaXZwLT5pdl9uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3c3RhdGU7CiAJ dmFwLT5pdl9uZXdzdGF0ZSA9IGl3bl9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9yYXRlY3RsX2lu aXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0 bF9pbml0KHZhcCwgMCk7CiAJLyogQ29tcGxldGUgc2V0dXAuICovCiAJaWVlZTgwMjExX3ZhcF9h dHRhY2godmFwLCBpd25fbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlp Yy0+aWNfb3Btb2RlID0gb3Btb2RlOwpAQCAtMjQ5OSw3ICsyNTAwLDggQEAKIAl1aW50NjRfdCBi aXRtYXA7CiAJdWludDE2X3Qgc3NuOwogCXVpbnQ4X3QgdGlkOwotCWludCBhY2tmYWlsY250ID0g MCwgaSwgbGFzdGlkeCwgcWlkLCAqcmVzLCBzaGlmdDsKKwkvKiBpbnQgZmFpbGNudCA9IDA7ICov CisJaW50IGksIGxhc3RpZHgsIHFpZCwgKnJlcywgc2hpZnQ7CiAKIAlidXNfZG1hbWFwX3N5bmMo c2MtPnJ4cS5kYXRhX2RtYXQsIGRhdGEtPm1hcCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwogCkBA IC0yNTYzLDEyICsyNTY1LDE4IEBACiAJZm9yIChpID0gMDsgYml0bWFwOyBpKyspIHsKIAkJaWYg KChiaXRtYXAgJiAxKSA9PSAwKSB7CiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKKyNpZiAwCiAJCQlp ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwKIAkJCSAgICBJRUVF ODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYKKwkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksIE5VTEwpOyAvKiBq dXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwkKIAkJfSBlbHNlIHsKIAkJCWlmcC0+aWZfb3Bh Y2tldHMrKzsKKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlf dmFwLCBuaSwKIAkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmYWNrZmFpbGNu dCwgTlVMTCk7CisjZW5kaWYKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5u aV92YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KIAkJfQog CQliaXRtYXAgPj49IDE7CiAJfQpAQCAtMjgwNywxMiArMjgxNSwxOCBAQAogCSAqLwogCWlmIChz dGF0dXMgJiBJV05fVFhfRkFJTCkgewogCQlpZnAtPmlmX29lcnJvcnMrKzsKKyNpZiAwCiAJCWll ZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCSAgICBJRUVFODAyMTFfUkFU RUNUTF9UWF9GQUlMVVJFLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYKKwkJaWVlZTgwMjEx X3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21w aWxlZC4gcWNjICovCiAJfSBlbHNlIHsKIAkJaWZwLT5pZl9vcGFja2V0cysrOworI2lmIDAKIAkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJICAgIElFRUU4MDIxMV9S QVRFQ1RMX1RYX1NVQ0NFU1MsICZhY2tmYWlsY250LCBOVUxMKTsKKyNlbmRpZgorCQlpZWVlODAy MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv bXBpbGVkLiBxY2MgKi8KIAl9CiAJbV9mcmVlbShtKTsKIAlpZWVlODAyMTFfZnJlZV9ub2RlKG5p KTsKSW5kZXg6IGRldi9id2kvaWZfYndpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2J3aS9pZl9id2ku YwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2J3aS9pZl9id2kuYwkod29ya2luZyBjb3B5KQpA QCAtNjE3LDcgKzYxNyw4IEBACiAjaWYgMAogCXZhcC0+aXZfdXBkYXRlX2JlYWNvbiA9IGJ3aV9i ZWFjb25fdXBkYXRlOwogI2VuZGlmCi0JaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8q IFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAw KTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBi d2lfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKQEAgLTMzNzcsOSArMzM3 OCwxMiBAQAogCQkJICogd2VsbCBzbyB0byBhdm9pZCBvdmVyLWFnZ3Jlc3NpdmUgZG93bnNoaWZ0 aW5nIHdlCiAJCQkgKiB0cmVhdCBhbnkgbnVtYmVyIG9mIHJldHJpZXMgYXMgIjEiLgogCQkJICov CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCSAg ICAoZGF0YV90eGNudCA+IDEpID8gSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUyA6CiAJCQkg ICAgICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsICZhY2tlZCwgTlVMTCk7CisjZW5k aWYKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBq dXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCQl9CiAKIAkJLyoKSW5kZXg6IGRldi9id24v aWZfYnduLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2J3bi9pZl9id24uYwkocmV2aXNpb24gMjU0ODI2 KQorKysgZGV2L2J3bi9pZl9id24uYwkod29ya2luZyBjb3B5KQpAQCAtMjk3MCw3ICsyOTcwLDgg QEAKIAkvKiBvdmVycmlkZSBtYXggYWlkIHNvIHN0YSdzIGNhbm5vdCBhc3NvYyB3aGVuIHdlJ3Jl IG91dCBvZiBzdGEgaWQncyAqLwogCXZhcC0+aXZfbWF4X2FpZCA9IEJXTl9TVEFJRF9NQVg7CiAK LQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2Fw ICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCiAJLyogY29tcGxldGUgc2V0 dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2Us CkBAIC04OTkxLDggKzg5OTIsOSBAQAogCXN0cnVjdCBid25fc3RhdHMgKnN0YXRzID0gJm1hYy0+ bWFjX3N0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmk7CiAJc3RydWN0IGllZWU4MDIx MXZhcCAqdmFwOwotCWludCByZXRyeWNudCA9IDAsIHNsb3Q7Ci0KKwkvKmludCByZXRyeWNudCA9 IDAsIHNsb3Q7Ki8KKwlpbnQgc2xvdDsKKwkKIAlCV05fQVNTRVJUX0xPQ0tFRChtYWMtPm1hY19z Yyk7CiAKIAlpZiAoc3RhdHVzLT5pbSkKQEAgLTkwMjAsMTEgKzkwMjIsMTQgQEAKIAkJCQlpZiAo bWV0YS0+bXRfaXNsYXN0KSB7CiAJCQkJCW5pID0gbWV0YS0+bXRfbmk7CiAJCQkJCXZhcCA9IG5p LT5uaV92YXA7CisjaWYgMAogCQkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAs IG5pLAogCQkJCQkgICAgc3RhdHVzLT5hY2sgPwogCQkJCQkgICAgICBJRUVFODAyMTFfUkFURUNU TF9UWF9TVUNDRVNTIDoKIAkJCQkJICAgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwK IAkJCQkJICAgICZyZXRyeWNudCwgMCk7CisjZW5kaWYKKwkJCQkJaWVlZTgwMjExX3JhdGVjdGxf dHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj ICovCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlzbG90ID0gYnduX2RtYV9uZXh0c2xvdChkciwg c2xvdCk7CkBAIC05MDQxLDExICs5MDQ2LDE0IEBACiAJCQl9CiAJCQluaSA9IHRwLT50cF9uaTsK IAkJCXZhcCA9IG5pLT5uaV92YXA7CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t cGxldGUodmFwLCBuaSwKIAkJCSAgICBzdGF0dXMtPmFjayA/CiAJCQkgICAgICBJRUVFODAyMTFf UkFURUNUTF9UWF9TVUNDRVNTIDoKIAkJCSAgICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxV UkUsCiAJCQkgICAgJnJldHJ5Y250LCAwKTsKKyNlbmRpZgorCQkJaWVlZTgwMjExX3JhdGVjdGxf dHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj ICovCiAJCX0KIAkJYnduX3Bpb19oYW5kbGVfdHhlb2YobWFjLCBzdGF0dXMpOwogCX0KSW5kZXg6 IGRldi91c2Ivd2xhbi9pZl96eWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdXNiL3dsYW4vaWZfenlk LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi91c2Ivd2xhbi9pZl96eWQuYwkod29ya2luZyBj b3B5KQpAQCAtNDk2LDcgKzQ5Niw4IEBACiAJenZwLT5uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3c3Rh dGU7CiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHp5ZF9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9yYXRl Y3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAyMTFf cmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0aW50ZXJ2YWwodmFw LCAxMDAwIC8qIDEgc2VjICovKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCkBAIC02NjQsMTIg KzY2NSwxNSBAQAogCQkJICovCiAJCQluaSA9IGllZWU4MDIxMV9maW5kX3R4bm9kZSh2YXAsIHJl dHJ5LT5tYWNhZGRyKTsKIAkJCWlmIChuaSAhPSBOVUxMKSB7Ci0JCQkJaW50IHJldHJ5Y250ID0K LQkJCQkgICAgKGludCkobGUxNnRvaChyZXRyeS0+Y291bnQpICYgMHhmZik7CisJCQkJLyppbnQg cmV0cnljbnQgPQorCQkJCSAgICAoaW50KShsZTE2dG9oKHJldHJ5LT5jb3VudCkgJiAweGZmKTsq LwogCQkJCQorI2lmIDAKIAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5p LAogCQkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLAogCQkJCSAgICAmcmV0cnlj bnQsIE5VTEwpOworI2VuZGlmCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFw LCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCiAJCQkJaWVlZTgw MjExX2ZyZWVfbm9kZShuaSk7CiAJCQl9CiAJCQlpZiAobGUxNnRvaChyZXRyeS0+Y291bnQpICYg MHgxMDApCkluZGV4OiBkZXYvdXNiL3dsYW4vaWZfcnVtLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Vz Yi93bGFuL2lmX3J1bS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvdXNiL3dsYW4vaWZfcnVt LmMJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw3ICs2MTMsOCBAQAogCiAJdXNiX2NhbGxvdXRfaW5p dF9tdHgoJnJ2cC0+cmF0ZWN0bF9jaCwgJnNjLT5zY19tdHgsIDApOwogCVRBU0tfSU5JVCgmcnZw LT5yYXRlY3RsX3Rhc2ssIDAsIHJ1bV9yYXRlY3RsX3Rhc2ssIHJ2cCk7Ci0JaWVlZTgwMjExX3Jh dGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIx MV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRlcnZhbCh2 YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjEx X3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFf c3RhdHVzKTsKSW5kZXg6IGRldi91c2Ivd2xhbi9pZl91cmFsLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2 L3VzYi93bGFuL2lmX3VyYWwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3VzYi93bGFuL2lm X3VyYWwuYwkod29ya2luZyBjb3B5KQpAQCAtNTk4LDcgKzU5OCw4IEBACiAKIAl1c2JfY2FsbG91 dF9pbml0X210eCgmdXZwLT5yYXRlY3RsX2NoLCAmc2MtPnNjX210eCwgMCk7CiAJVEFTS19JTklU KCZ1dnAtPnJhdGVjdGxfdGFzaywgMCwgdXJhbF9yYXRlY3RsX3Rhc2ssIHV2cCk7Ci0JaWVlZTgw MjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWll ZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRl cnZhbCh2YXAsIDEwMDAgLyogMSBzZWMgKi8pOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KSW5k ZXg6IGRldi91c2Ivd2xhbi9pZl9ydW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvdXNiL3dsYW4vaWZf cnVuLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi91c2Ivd2xhbi9pZl9ydW4uYwkod29ya2lu ZyBjb3B5KQpAQCAtODIwLDcgKzgyMCw4IEBACiAJcnZwLT5uZXdzdGF0ZSA9IHZhcC0+aXZfbmV3 c3RhdGU7CiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHJ1bl9uZXdzdGF0ZTsKIAotCWllZWU4MDIxMV9y YXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAy MTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0aW50ZXJ2YWwo dmFwLCAxMDAwIC8qIDEgc2VjICovKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCkluZGV4OiBk ZXYvd3BpL2lmX3dwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRldi93cGkvaWZfd3BpLmMJKHJldmlzaW9u IDI1NDgyNikKKysrIGRldi93cGkvaWZfd3BpLmMJKHdvcmtpbmcgY29weSkKQEAgLTc4Miw3ICs3 ODIsOCBAQAogCXd2cC0+bmV3c3RhdGUgPSB2YXAtPml2X25ld3N0YXRlOwogCXZhcC0+aXZfbmV3 c3RhdGUgPSB3cGlfbmV3c3RhdGU7CiAKLQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJ LyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAs IDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBp ZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVkaWFfc3RhdHVzKTsKIAlpYy0+aWNf b3Btb2RlID0gb3Btb2RlOwpAQCAtMTU5Niw4ICsxNTk3LDExIEBACiAJCURQUklOVEZOKFdQSV9E RUJVR19UWCwgKCIlZCByZXRyaWVzXG4iLCBzdGF0LT5udHJpZXMpKTsKIAkJcmV0cnljbnQgPSAx OwogCX0KKyNpZiAwCiAJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgSUVF RTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywKIAkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRp ZgorCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0 IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCiAJLyogWFhYIG9lcnJvcnMgc2hvdWxkIG9ubHkg Y291bnQgZXJyb3JzICFtYXh0cmllcyAqLwogCWlmICgobGUzMnRvaChzdGF0LT5zdGF0dXMpICYg MHhmZikgIT0gMSkKSW5kZXg6IGRldi9yYWwvcnQyNTYwLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Jh bC9ydDI1NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3JhbC9ydDI1NjAuYwkod29ya2lu ZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw4IEBACiAJdmFwLT5pdl9uZXdzdGF0ZSA9IHJ0MjU2MF9u ZXdzdGF0ZTsKIAl2YXAtPml2X3VwZGF0ZV9iZWFjb24gPSBydDI1NjBfYmVhY29uX3VwZGF0ZTsK IAotCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBj YXAgKi8KKwlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJLyogY29tcGxldGUgc2V0 dXAgKi8KIAlpZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2Us IGllZWU4MDIxMV9tZWRpYV9zdGF0dXMpOwogCWlmIChUQUlMUV9GSVJTVCgmaWMtPmljX3ZhcHMp ID09IHZhcCkKQEAgLTk1NSw5ICs5NTYsMTMgQEAKIAogCQkJRFBSSU5URk4oc2MsIDEwLCAiJXNc biIsICJkYXRhIGZyYW1lIHNlbnQgc3VjY2Vzc2Z1bGx5Iik7CiAJCQlpZiAoZGF0YS0+cml4ICE9 IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t cGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisj aWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCQkJICAg IElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MsCiAJCQkJICAgICZyZXRyeWNudCwgTlVMTCk7 CisjZW5kaWYKKwogCQkJaWZwLT5pZl9vcGFja2V0cysrOwogCQkJYnJlYWs7CiAKQEAgLTk2Nyw5 ICs5NzIsMTIgQEAKIAkJCURQUklOVEZOKHNjLCA5LCAiZGF0YSBmcmFtZSBzZW50IGFmdGVyICV1 IHJldHJpZXNcbiIsCiAJCQkgICAgcmV0cnljbnQpOwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVF ODAyMTFfRklYRURfUkFURV9OT05FKQorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl KHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAK IAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVF ODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLAogCQkJCSAgICAmcmV0cnljbnQsIE5VTEwpOworI2Vu ZGlmCiAJCQlpZnAtPmlmX29wYWNrZXRzKys7CiAJCQlicmVhazsKIApAQCAtOTc5LDkgKzk4Nywx MiBAQAogCQkJRFBSSU5URk4oc2MsIDksICJkYXRhIGZyYW1lIGZhaWxlZCBhZnRlciAlZCByZXRy aWVzXG4iLAogCQkJICAgIHJldHJ5Y250KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjEx X0ZJWEVEX1JBVEVfTk9ORSkKKwkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAs IG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjEx X1JBVEVDVExfVFhfRkFJTFVSRSwKIAkJCQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgog CQkJaWZwLT5pZl9vZXJyb3JzKys7CiAJCQlicmVhazsKIApJbmRleDogZGV2L3JhbC9ydDI2NjEu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBkZXYvcmFsL3J0MjY2MS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBk ZXYvcmFsL3J0MjY2MS5jCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNyArNDIzLDggQEAKIAl2YXAt Pml2X3VwZGF0ZV9iZWFjb24gPSBydDI2NjFfYmVhY29uX3VwZGF0ZTsKICNlbmRpZgogCi0JaWVl ZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLwor CWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwog CWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVlZTgw MjExX21lZGlhX3N0YXR1cyk7CiAJaWYgKFRBSUxRX0ZJUlNUKCZpYy0+aWNfdmFwcykgPT0gdmFw KQpAQCAtOTA1LDkgKzkwNiwxMiBAQAogCQkJRFBSSU5URk4oc2MsIDEwLCAiZGF0YSBmcmFtZSBz ZW50IHN1Y2Nlc3NmdWxseSBhZnRlciAiCiAJCQkgICAgIiVkIHJldHJpZXNcbiIsIHJldHJ5Y250 KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjExX0ZJWEVEX1JBVEVfTk9ORSkKKwkJCQlp ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtl IGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29t cGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywKIAkJ CQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5pZl9vcGFja2V0cysrOwog CQkJYnJlYWs7CiAKQEAgLTkxNyw5ICs5MjEsMTIgQEAKIAkJCURQUklOVEZOKHNjLCA5LCAiJXNc biIsCiAJCQkgICAgInNlbmRpbmcgZGF0YSBmcmFtZSBmYWlsZWQgKHRvbyBtdWNoIHJldHJpZXMp Iik7CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJ aWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFr ZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2Nv bXBsZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsCiAJ CQkJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb2Vycm9ycysrOwog CQkJYnJlYWs7CiAKSW5kZXg6IGRldi9yYWwvcnQyODYwLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L3Jh bC9ydDI4NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L3JhbC9ydDI4NjAuYwkod29ya2lu ZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw4IEBACiAJLyogSFcgc3VwcG9ydHMgdXAgdG8gMjU1IFNU QXMgKDAtMjU0KSBpbiBIb3N0QVAgYW5kIElCU1MgbW9kZXMgKi8KIAl2YXAtPml2X21heF9haWQg PSBtaW4oSUVFRTgwMjExX0FJRF9NQVgsIFJUMjg2MF9XQ0lEX01BWCk7CiAKLQlpZWVlODAyMTFf cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgw MjExX3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVk aWFfc3RhdHVzKTsKIAlpZiAoVEFJTFFfRklSU1QoJmljLT5pY192YXBzKSA9PSB2YXApCkBAIC0x MTIxLDExICsxMTIyLDE3IEBACiAJCQkJcmV0cnljbnQgPSAxOwogCQkJZWxzZQogCQkJCXJldHJ5 Y250ID0gMDsKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5p LCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQlpZWVl ODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwKIAkJCSAgICBJRUVFODAy MTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCiAJCX0gZWxz ZSB7CisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgTlVM TCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJaWVlZTgwMjEx X3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJCQkgICAgSUVFRTgwMjExX1JB VEVDVExfVFhfRkFJTFVSRSwgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5pZl9v ZXJyb3JzKys7CiAJCX0KIAl9CkluZGV4OiBkZXYvYXRoL2lmX2F0aF9zeXNjdGwuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBkZXYvYXRoL2lmX2F0aF9zeXNjdGwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2 L2F0aC9pZl9hdGhfc3lzY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAKIAog I2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9p ZWVlODAyMTFfcmVnZG9tYWluLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVj dGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIx MS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5kaWYKQEAgLTYwMiw2ICs2MDMsMjggQEAKIH0KICNl bmRpZiAvKiBBVEhfREVCVUdfQUxRICovCiAKK3N0YXRpYyBpbnQKK2F0aF9zeXNjdGxfcmF0ZWN0 bF9zdGF0cyhTWVNDVExfSEFORExFUl9BUkdTKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0g YXJnMTsKKwlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHNjLT5zY19pZnAtPmlmX2wyY29tOyAK KwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXA7CisJaW50IGVycm9yLCB2OworCisJdiA9IDA7CisJ ZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmdiwgMCwgcmVxKTsKKwlpZiAoZXJyb3Ig fHwgIXJlcS0+bmV3cHRyKQorCQlyZXR1cm4gZXJyb3I7CisKKwlwcmludGYoIlxuWyVzXTogcGVy LWRldmljZSBuZXQ4MDIxMSByYXRlY3RsIHN0YXRpc3RpY3NcbiIsIAorCQkJaWMtPmljX2lmcC0+ aWZfeG5hbWUpOworCVRBSUxRX0ZPUkVBQ0godmFwLCAmaWMtPmljX3ZhcHMsIGl2X25leHQpIHsK KwkJaWVlZTgwMjExX3JhdGVjdGxfc3RhdHModmFwKTsKKwl9CisJCQorCXJldHVybiAwOworfQor CiB2b2lkCiBhdGhfc3lzY3RsYXR0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewpAQCAtNzky LDYgKzgxNSwxMCBAQAogI2lmZGVmCUFUSF9ERUJVR19BTFEKIAlhdGhfc3lzY3RsX2FscV9hdHRh Y2goc2MpOwogI2VuZGlmCisJCisJU1lTQ1RMX0FERF9QUk9DKGN0eCwgU1lTQ1RMX0NISUxEUkVO KHRyZWUpLCBPSURfQVVUTywKKwkJInJhdGVjdGxfc3RhdHMiLCBDVExUWVBFX0lOVCB8IENUTEZM QUdfUlcsIHNjLCAwLAorCQlhdGhfc3lzY3RsX3JhdGVjdGxfc3RhdHMsICJJIiwgInBlci1kZXZp Y2UgbmV0ODAyMTEgcmF0ZWN0bCBzdGF0aXN0aWNzIik7CiB9CiAKIHN0YXRpYyBpbnQKSW5kZXg6 IGRldi9hdGgvaWZfYXRoX3R4X2h0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZGV2L2F0aC9pZl9hdGhfdHhf aHQuYwkocmV2aXNpb24gMjU0ODI2KQorKysgZGV2L2F0aC9pZl9hdGhfdHhfaHQuYwkod29ya2lu ZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQAogCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjEx X3Zhci5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yZWdkb21haW4uaD4KKworI2lu Y2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmg+CiAjaWZkZWYgSUVFRTgwMjExX1NV UFBPUlRfU1VQRVJHCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3N1cGVyZy5oPgogI2Vu ZGlmCkBAIC0yMjEsMTMgKzIyMyw0NyBAQAogdm9pZAogYXRoX3R4X3JhdGVfZmlsbF9yY2ZsYWdz KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7Ci0Jc3RydWN0IGll ZWU4MDIxMV9ub2RlICpuaSA9IGJmLT5iZl9ub2RlOwotCXN0cnVjdCBpZWVlODAyMTFjb20gKmlj ID0gbmktPm5pX2ljOworCS8vIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9k ZTsKKwkvLyBzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKIAljb25zdCBIQUxf UkFURV9UQUJMRSAqcnQgPSBzYy0+c2NfY3VycmF0ZXM7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMg KnJjID0gYmYtPmJmX3N0YXRlLmJmc19yYzsKKwlzdHJ1Y3QgYXRoX3JjX3NlcmllcyAqYXRoX3Jj ID0gYmYtPmJmX3N0YXRlLmJmc19yYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2lu Zm8gPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IE5VTEw7CisJc3Ry dWN0IG1fdGFnICptdGFnOwogCXVpbnQ4X3QgcmF0ZTsKIAlpbnQgaTsKIAorCW10YWcgPSBtX3Rh Z19sb2NhdGUoYmYtPmJmX20sIE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5FVDgwMjExX1RBR19S QVRFQ1RMLCBOVUxMKTsKKwlpZiAoTlVMTCA9PSBtdGFnKQorCQlyZXR1cm47CisKKwlyY19pbmZv ID0gKHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyopKG10YWcgKyAxKTsKKwlyYyA9IHJjX2luZm8t PmlyaV9yYzsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykg eworCQlpZiAocmNbaV0udHJpZXMgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXJhdGUgPSBydC0+ aW5mb1tyY1tpXS5yaXhdLnJhdGVDb2RlOworCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFf UkFURUNUTF9GTEFHX1NQKQorCQkJcmF0ZSB8PSBydC0+aW5mb1tyY1tpXS5yaXhdLnNob3J0UHJl YW1ibGU7CisKKwkJcmNbaV0ucmF0ZWNvZGUgPSByYXRlOworCisJCWF0aF9yY1tpXS5yaXggPSBy Y1tpXS5yaXg7CisJCWF0aF9yY1tpXS50cmllcyA9IHJjW2ldLnRyaWVzOworCQlhdGhfcmNbaV0u ZmxhZ3MgPSByY1tpXS5mbGFnczsKKwkJYXRoX3JjW2ldLnJhdGVjb2RlID0gcmNbaV0ucmF0ZWNv ZGU7CisJCWF0aF9yY1tpXS50eF9wb3dlcl9jYXAgPSByY1tpXS50eF9wb3dlcl9jYXA7CisJCWF0 aF9yY1tpXS5tYXg0bXNmcmFtZWxlbiA9IHJjW2ldLm1heDRtc2ZyYW1lbGVuOworCQkKKwkJRFBS SU5URihzYywgQVRIX0RFQlVHX1NXX1RYX0FHR1IsCisJCSAgICAiJXM6IGk9JWQsIHJhdGU9MHgl eCwgZmxhZ3M9MHgleCwgbWF4NG1zPSVkXG4iLAorCQkgICAgX19mdW5jX18sIGksIHJhdGUsIHJj W2ldLmZsYWdzLCByY1tpXS5tYXg0bXNmcmFtZWxlbik7CisJfQorCisjaWYgMAogCWZvciAoaSA9 IDA7IGkgPCBBVEhfUkNfTlVNOyBpKyspIHsKIAkJcmNbaV0uZmxhZ3MgPSAwOwogCQlpZiAocmNb aV0udHJpZXMgPT0gMCkKQEAgLTMyNSw2ICszNjEsNyBAQAogCQkgICAgIiVzOiBpPSVkLCByYXRl PTB4JXgsIGZsYWdzPTB4JXgsIG1heDRtcz0lZFxuIiwKIAkJICAgIF9fZnVuY19fLCBpLCByYXRl LCByY1tpXS5mbGFncywgcmNbaV0ubWF4NG1zZnJhbWVsZW4pOwogCX0KKyNlbmRpZgogfQogCiAv KgpJbmRleDogZGV2L2F0aC9pZl9hdGhfdHguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvYXRoL2lmX2F0 aF90eC5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBkZXYvYXRoL2lmX2F0aF90eC5jCSh3b3JraW5n IGNvcHkpCkBAIC03Miw2ICs3Miw4IEBACiAKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFf dmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2RvbWFpbi5oPgorCisjaW5j bHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQ UE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5k aWYKQEAgLTEzODcsNiArMTM4OSw5IEBACiBzdGF0aWMgdm9pZAogYXRoX3R4X2RvX3JhdGVsb29r dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKKwlzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CisJc3RydWN0IGllZWU4MDIxMV9yY19p bmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMgPSBO VUxMOwogCXVpbnQ4X3QgcmF0ZSwgcml4OwogCWludCB0cnkwOwogCkBAIC0xMzk1LDcgKzE0MDAs NyBAQAogCiAJLyogR2V0IHJpZCBvZiBhbnkgcHJldmlvdXMgc3RhdGUgKi8KIAliemVybyhiZi0+ YmZfc3RhdGUuYmZzX3JjLCBzaXplb2YoYmYtPmJmX3N0YXRlLmJmc19yYykpOwotCisjaWYgMAog CUFUSF9OT0RFX0xPQ0soQVRIX05PREUoYmYtPmJmX25vZGUpKTsKIAlhdGhfcmF0ZV9maW5kcmF0 ZShzYywgQVRIX05PREUoYmYtPmJmX25vZGUpLCBiZi0+YmZfc3RhdGUuYmZzX3NocHJlYW0sCiAJ ICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLCAmcml4LCAmdHJ5MCwgJnJhdGUpOwpAQCAtMTQw OSw3ICsxNDE0LDI1IEBACiAJCWF0aF9yYXRlX2dldHh0eHJhdGVzKHNjLCBBVEhfTk9ERShiZi0+ YmZfbm9kZSksIHJpeCwKIAkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcmMpOwogCUFUSF9OT0RFX1VO TE9DSyhBVEhfTk9ERShiZi0+YmZfbm9kZSkpOworI2VuZGlmCiAKKwkvKiBuZXQ4MDIxMSByYXRl Y3RsICovCisJcmNfaW5mbyA9IGllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fZ2V0KG5pLCBiZi0+ YmZfbSk7CisJcmMgPSByY19pbmZvLT5pcmlfcmM7CisJCisJcmNfaW5mby0+aXJpX2ZsYWdzID0g MDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19zaHByZWFtKQorCQlyY19pbmZvLT5pcmlfZmxhZ3Mg fD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19TUDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19hZ2dy KQorCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOwor CXJjX2luZm8tPmlyaV9mcmFtZWxlbiA9IGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuOworCisJaWVl ZTgwMjExX3JhdGVjdGxfcmF0ZXMobmksIHJjX2luZm8pOworCisJcml4ID0gcmNbMF0ucml4Owor CXRyeTAgPSByY1swXS50cmllczsKKwlyYXRlID0gbmktPm5pX3R4cmF0ZTsKKwogCXNjLT5zY190 eHJpeCA9IHJpeDsJLyogZm9yIExFRCBibGlua2luZyAqLwogCXNjLT5zY19sYXN0ZGF0YXJpeCA9 IHJpeDsJLyogZm9yIGZhc3QgZnJhbWVzICovCiAJYmYtPmJmX3N0YXRlLmJmc190cnkwID0gdHJ5 MDsKQEAgLTE1MzAsNyArMTU1Myw4IEBACiAJICogZnJhbWVzIHRoYXQgbXVzdCBnbyBvdXQgLSBl ZyBtYW5hZ2VtZW50L3JhdyBmcmFtZXMuCiAJICovCiAJYmYtPmJmX3N0YXRlLmJmc190eGZsYWdz IHw9IEhBTF9UWERFU0NfQ0xSRE1BU0s7Ci0KKwkKKwliZi0+YmZfc3RhdGUuYmZzX2FnZ3IgPSAw OwogCS8qIFNldHVwIHRoZSBkZXNjcmlwdG9yIGJlZm9yZSBoYW5kb2ZmICovCiAJYXRoX3R4X2Rv X3JhdGVsb29rdXAoc2MsIGJmKTsKIAlhdGhfdHhfY2FsY19kdXJhdGlvbihzYywgYmYpOwpAQCAt NDA1OCw2ICs0MDgyLDcgQEAKIAlpbnQgdGlkID0gYmYtPmJmX3N0YXRlLmJmc190aWQ7CiAJc3Ry dWN0IGF0aF90aWQgKmF0aWQgPSAmYW4tPmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3Rh dHVzICp0cyA9ICZiZi0+YmZfc3RhdHVzLmRzX3R4c3RhdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Jj X2luZm8gKnJjX2luZm8gPSBOVUxMOwogCiAJLyogVGhlIFRJRCBzdGF0ZSBpcyBwcm90ZWN0ZWQg YmVoaW5kIHRoZSBUWFEgbG9jayAqLwogCUFUSF9UWF9MT0NLKHNjKTsKQEAgLTQxMDgsOSArNDEz MywyMyBAQAogCSAqIGR1cmluZyBhIGh3IHF1ZXVlIGRyYWluIGFuZCB0aGUgZnJhbWUgd2FudGVk IGFuIEFDSy4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwICYmICgoYmYtPmJmX3N0YXRlLmJmc190eGZs YWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkpCisJeworI2lmIDAKIAkJYXRoX3R4X3VwZGF0 ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNfcmMsCiAJCSAgICB0cywgYmYtPmJm X3N0YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAodHMtPnRzX3N0YXR1cyA9PSAwKSA/IDAgOiAx KTsKKyNlbmRpZgorCQorCQkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJCXJjX2luZm8gPSBpZWVl ODAyMTFfcmF0ZWN0bF9yY19pbmZvX2dldChuaSwgYmYtPmJmX20pOworCQlpZWVlODAyMTFfcmF0 ZWN0bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCTEsICh0cy0+dHNfc3RhdHVzID09IDAgPyAw IDogMSksIAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAorCQkJCXRzLT50c19zaG9ydHJl dHJ5LCB0cy0+dHNfbG9uZ3JldHJ5LAorCQkJCXRzLT50c19maW5hbHRzaSwgdHMtPnRzX3JhdGUp OworCQlyY19pbmZvLT5pcmlfZmxhZ3MgJj0gfklFRUU4MDIxMV9SQVRFQ1RMX0lORk9fQUdHUjsJ CisJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZv KTsKKwl9CiAKIAlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwgZmFpbCk7CiB9CkBAIC00NDc1 LDYgKzQ1MTQsOCBAQAogCWludCBkcm9wcyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV90eF9hbXBk dSAqdGFwOwogCWF0aF9idWZoZWFkIGJmX2NxOworCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzID0g YmZfZmlyc3QtPmJmX3N0YXR1cy5kc190eHN0YXQ7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZv ICpyY19pbmZvID0gTlVMTDsKIAogCVRBSUxRX0lOSVQoJmJmX3EpOwogCVRBSUxRX0lOSVQoJmJm X2NxKTsKQEAgLTQ0ODUsMTAgKzQ1MjYsMjMgQEAKIAkgKiBYWFggdXNlIHRoZSBsZW5ndGggaW4g dGhlIGZpcnN0IGZyYW1lIGluIHRoZSBzZXJpZXM7CiAJICogWFhYIGp1c3Qgc28gdGhpbmdzIGFy ZSBjb25zaXN0ZW50IGZvciBub3cuCiAJICovCisjaWYgMAogCWF0aF90eF91cGRhdGVfcmF0ZWN0 cmwoc2MsIG5pLCBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX3JjLAogCSAgICAmYmZfZmlyc3QtPmJm X3N0YXR1cy5kc190eHN0YXQsCiAJICAgIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAog CSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5i ZnNfbmZyYW1lcyk7CisjZW5kaWYKKwkKKwkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJcmNfaW5m byA9IGllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fZ2V0KG5pLCBiZl9maXJzdC0+YmZfbSk7CisJ aWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCWJmX2ZpcnN0LT5iZl9z dGF0ZS5iZnNfbmZyYW1lcywgCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsCisJ CQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCXRzLnRzX3Nob3J0cmV0cnksIHRz LnRzX2xvbmdyZXRyeSwKKwkJCXRzLnRzX2ZpbmFsdHNpLCB0cy50c19yYXRlKTsKKwlyY19pbmZv LT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCWllZWU4MDIxMV9y YXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsKIAogCUFUSF9UWF9M T0NLKHNjKTsKIAl0YXAgPSBhdGhfdHhfZ2V0X3R4X3RpZChhbiwgdGlkLT50aWQpOwpAQCAtNDYy Niw5ICs0NjgwLDEyIEBACiAJaW50IG5mcmFtZXMgPSAwLCBuYmFkID0gMCwgbmY7CiAJaW50IHBr dGxlbjsKIAkvKiBYWFggdGhlcmUncyB0b28gbXVjaCBvbiB0aGUgc3RhY2s/ICovCisjaWYgMAog CXN0cnVjdCBhdGhfcmNfc2VyaWVzIHJjW0FUSF9SQ19OVU1dOworI2VuZGlmCiAJaW50IHR4c2Vx OwotCisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3Qg bWJ1ZiAqbTsKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfU1dfVFhfQUdHUiwgIiVzOiBjYWxsZWQ7 IGh3cV9kZXB0aD0lZFxuIiwKIAkgICAgX19mdW5jX18sIGF0aWQtPmh3cV9kZXB0aCk7CiAKQEAg LTQ3NDgsNyArNDgwNSw3IEBACiAJaXNhZ2dyID0gYmZfZmlyc3QtPmJmX3N0YXRlLmJmc19hZ2dy OwogCWJhWzBdID0gdHMudHNfYmFfbG93OwogCWJhWzFdID0gdHMudHNfYmFfaGlnaDsKLQorI2lm IDAKIAkvKgogCSAqIENvcHkgdGhlIFRYIGNvbXBsZXRpb24gc3RhdHVzIGFuZCB0aGUgcmF0ZSBj b250cm9sCiAJICogc2VyaWVzIGZyb20gdGhlIGZpcnN0IGRlc2NyaXB0b3IsIGFzIGl0IG1heSBi ZSBmcmVlZApAQCAtNDc1Niw2ICs0ODEzLDExIEBACiAJICogaW50byB0aGluZ3MuCiAJICovCiAJ bWVtY3B5KHJjLCBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX3JjLCBzaXplb2YocmMpKTsKKyNlbmRp ZgorCS8qIAorCSAqIEdldCB0aGUgbWJ1ZiBoZXJlLCBhcyBiZl9maXJzdCB3aWxsIGJlIHNldCB0 byBOVUxMIGxhdGVyLiAKKwkgKi8KKwltID0gYmZfZmlyc3QtPmJmX207IAogCiAJRFBSSU5URihz YywgQVRIX0RFQlVHX1NXX1RYX0FHR1IsCiAJICAgICIlczogdHhhX3N0YXJ0PSVkLCB0eF9vaz0l ZCwgc3RhdHVzPSUuOHgsIGZsYWdzPSUuOHgsICIKQEAgLTQ4NzMsOCArNDkzNSwyMCBAQAogCSAq IGNvbnRyb2wgY29kZS4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwKQorCXsKKyNpZiAwCQogCQlhdGhf dHhfdXBkYXRlX3JhdGVjdHJsKHNjLCBuaSwgcmMsICZ0cywgcGt0bGVuLCBuZnJhbWVzLAogCQkg ICAgbmJhZCk7CisjZW5kaWYKKwkJLyogbmV0ODAyMTEgcmF0ZWN0bCAqLworCQlyY19pbmZvID0g aWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIG0pOworCQlpZWVlODAyMTFfcmF0ZWN0 bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCQluZnJhbWVzLCBuYmFkLCBwa3RsZW4sCisJCQkJ CXRzLnRzX3Nob3J0cmV0cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQkJdHMudHNfZmluYWx0c2ks IHRzLnRzX3JhdGUpOworCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExf SU5GT19BR0dSOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBu aSwgcmNfaW5mbyk7CisJfQogCiAJLyoKIAkgKiBzZW5kIGJhciBpZiB3ZSBkcm9wcGVkIGFueSBm cmFtZXMKQEAgLTQ5NDgsNiArNTAyMiw3IEBACiAJc3RydWN0IGF0aF90aWQgKmF0aWQgPSAmYW4t PmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzOwogCWludCBkcm9wcyA9IDA7 CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKIAogCS8qCiAJICog VGFrZSBhIGNvcHkgb2YgdGhpczsgZmlsdGVyaW5nL2Nsb25pbmcgdGhlIGZyYW1lIG1heSBmcmVl IHRoZQpAQCAtNDk2MiwxMSArNTAzNywyMiBAQAogCSAqIERvIGl0IG91dHNpZGUgb2YgdGhlIFRY USBsb2NrLgogCSAqLwogCWlmIChmYWlsID09IDAgJiYgKChiZi0+YmZfc3RhdGUuYmZzX3R4Zmxh Z3MgJiBIQUxfVFhERVNDX05PQUNLKSA9PSAwKSkKKwl7CisjaWYgMAkKIAkJYXRoX3R4X3VwZGF0 ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNfcmMsCiAJCSAgICAmYmYtPmJmX3N0 YXR1cy5kc190eHN0YXQsCiAJCSAgICBiZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKIAkJICAgIDEs ICh0cy50c19zdGF0dXMgPT0gMCkgPyAwIDogMSk7Ci0KKyNlbmRpZgorCQlyY19pbmZvID0gaWVl ZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIGJmLT5iZl9tKTsKKwkJaWVlZTgwMjExX3Jh dGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkxLCAodHMudHNfc3RhdHVzID09IDAgPyAw IDogMSksIAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAorCQkJCXRzLnRzX3Nob3J0cmV0 cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQl0cy50c19maW5hbHRzaSwgdHMudHNfcmF0ZSk7CisJ CXJjX2luZm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCQlp ZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgcmNfaW5mbyk7CisJ fQogCS8qCiAJICogVGhpcyBpcyBjYWxsZWQgZWFybHkgc28gYXRpZC0+aHdxX2RlcHRoIGNhbiBi ZSB0cmFja2VkLgogCSAqIFRoaXMgdW5mb3J0dW5hdGVseSBtZWFucyB0aGF0IGl0J3MgcmVsZWFz ZWQgYW5kIHJlZ3JhYmJlZApAQCAtNTE4Myw2ICs1MjY5LDE1IEBACiAJCX0KIAogCQkvKgorCQkg KiBJZiBub24tYWdncmVnYXRlIHNjZW5hcmlvIGFwcGVhcnMsIHRoaXMgd2lsbCBiZSAKKwkJICog dHVybmVkIG9mZi4KKwkJICoKKwkJICogVGhpcyBmbGFnIGlzIHVzZWQgYnkgYXRoX3R4X2RvX3Jh dGVsb29rdXAoKSB0byAKKwkJICogZGlzdGluZ3Vpc2ggYWdnci9ub24tYWdnciBzY2VuYXJpby4g IAorCQkgKi8KKwkJYmYtPmJmX3N0YXRlLmJmc19hZ2dyID0gMTsKKworCQkvKgogCQkgKiBJZiB0 aGUgcGFja2V0IGRvZXNuJ3QgZmFsbCB3aXRoaW4gdGhlIEJBVyAoZWcgYSBOVUxMCiAJCSAqIGRh dGEgZnJhbWUpLCBzY2hlZHVsZSBpdCBkaXJlY3RseTsgY29udGludWUuCiAJCSAqLwpAQCAtNTQy NSw2ICs1NTIwLDcgQEAKIAkJLyogVXBkYXRlIENMUkRNQVNLIGp1c3QgYmVmb3JlIHRoaXMgZnJh bWUgaXMgcXVldWVkICovCiAJCWF0aF90eF91cGRhdGVfY2xyZG1hc2soc2MsIHRpZCwgYmYpOwog CisJCWJmLT5iZl9zdGF0ZS5iZnNfYWdnciA9IDA7IAogCQkvKiBQcm9ncmFtIGRlc2NyaXB0b3Jz ICsgcmF0ZSBjb250cm9sICovCiAJCWF0aF90eF9kb19yYXRlbG9va3VwKHNjLCBiZik7CiAJCWF0 aF90eF9jYWxjX2R1cmF0aW9uKHNjLCBiZik7CkluZGV4OiBkZXYvYXRoL2lmX2F0aC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGRldi9hdGgvaWZfYXRoLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGRldi9hdGgv aWZfYXRoLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAKIAogI2luY2x1ZGUgPG5l dDgwMjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVn ZG9tYWluLmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lm ZGVmIElFRUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIx MV9zdXBlcmcuaD4KICNlbmRpZgpAQCAtMzIyLDYgKzMyNCw3IEBACiAJc2MtPnNjX2FoID0gYWg7 CiAJc2MtPnNjX2ludmFsaWQgPSAwOwkvKiByZWFkeSB0byBnbywgZW5hYmxlIGludGVycnVwdCBo YW5kbGluZyAqLwogI2lmZGVmCUFUSF9ERUJVRworCWF0aF9kZWJ1ZyB8PSBBVEhfREVCVUdfTk9E RTsgCiAJc2MtPnNjX2RlYnVnID0gYXRoX2RlYnVnOwogI2VuZGlmCiAKQEAgLTEzODAsNiArMTM4 MywxNiBAQAogCX0KIAlBVEhfVU5MT0NLKHNjKTsKIAorCXVpbnQzMl90IGNhcHMgPSAwOworCWlm IChzYy0+c2NfbXJyZXRyeSkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSOwor CWlmIChzYy0+c2NfbXJycHJvdCkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJS UFJPVDsKKwlpZiAoc2MtPnNjX3R4Y2hhaW5tYXNrID4gMSkKKwkJY2FwcyB8PSBJRUVFODAyMTFf UkFURUNUTF9DQVBfTVVMVFhDSEFJTjsKKworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCBj YXBzKTsKKwkKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZh cCwgYXRoX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJcmV0dXJuIHZh cDsKQEAgLTE0MTQsNiArMTQyNyw3IEBACiAJCWF0aF9zdG9wcmVjdihzYywgMSk7CQkvKiBzdG9w IHJlY3Ygc2lkZSAqLwogCX0KIAorCWllZWU4MDIxMV9yYXRlY3RsX2RlaW5pdCh2YXApOwogCWll ZWU4MDIxMV92YXBfZGV0YWNoKHZhcCk7CiAKIAkvKgpAQCAtNDA0Miw2ICs0MDU2LDcgQEAKIHsK IAlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CiAJc3RydWN0IGF0aF9u b2RlICphbiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVM TDsKIAogCUFUSF9UWF9VTkxPQ0tfQVNTRVJUKHNjKTsKIAlBVEhfVFhRX1VOTE9DS19BU1NFUlQo dHhxKTsKQEAgLTQwNjgsMTAgKzQwODMsMjEgQEAKIAkJCSAqIFhYWCBhc3N1bWUgdGhpcyBpc24n dCBhbiBhZ2dyZWdhdGUKIAkJCSAqIGZyYW1lLgogCQkJICovCisjaWYgMAogCQkJYXRoX3R4X3Vw ZGF0ZV9yYXRlY3RybChzYywgbmksCiAJCQkgICAgIGJmLT5iZl9zdGF0ZS5iZnNfcmMsIHRzLAog CQkJICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGt0bGVuLCAxLAogCQkJICAgICh0cy0+dHNfc3RhdHVz ID09IDAgPyAwIDogMSkpOworI2VuZGlmCisJCQkvKiBuZXQ4MDIxMSByYXRlY3RsICovCisJCQly Y19pbmZvID0gaWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19nZXQobmksIGJmLT5iZl9tKTsKKwkJ CWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQkJCTEsICh0cy0+dHNf c3RhdHVzID09IDAgPyAwIDogMSksIAorCQkJCQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJ CQkJdHMtPnRzX3Nob3J0cmV0cnksIHRzLT50c19sb25ncmV0cnksCisJCQkJCXRzLT50c19maW5h bHRzaSwgdHMtPnRzX3JhdGUpOworCQkJcmNfaW5mby0+aXJpX2ZsYWdzICY9IH5JRUVFODAyMTFf UkFURUNUTF9JTkZPX0FHR1I7CQorCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmkt Pm5pX3ZhcCwgbmksIHJjX2luZm8pOwogCQl9CiAJCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJm LCAwKTsKIAl9IGVsc2UKQEAgLTU1NzQsOSArNTYwMCwxNSBAQAogCiAJYW4tPmFuX21jYXN0cml4 ID0gYXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5tY2FzdHJhdGUpOwogCWFuLT5hbl9tZ210cml4ID0g YXRoX3R4X2ZpbmRyaXgoc2MsIHRwLT5tZ210cmF0ZSk7Ci0KKyNpZiAwCiAJYXRoX3JhdGVfbmV3 YXNzb2Moc2MsIGFuLCBpc25ldyk7CisjZW5kaWYKIAorCURQUklOVEYoc2MsIEFUSF9ERUJVR19O T0RFLCAiJXM6IG5ld2Fzc29jIGlzIG5ldzogJWRcbiIsCisJCQlfX2Z1bmNfXywgaXNuZXcpOwor CWlmIChpc25ldykKKwkJaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pbml0KG5pKTsKKwogCWlmIChp c25ldyAmJgogCSAgICAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1BSSVZBQ1kpID09IDAg JiYgc2MtPnNjX2hhc2NscmtleSAmJgogCSAgICBuaS0+bmlfdWNhc3RrZXkud2tfa2V5aXggPT0g SUVFRTgwMjExX0tFWUlYX05PTkUpCg== --089e013a132afd7f2f04e6643d3a--