From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=132.226.202.154 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792659276; b=HjCI8l+NzZoy5tdB27fJdHzgY53NHl5iWEuj6fjSzMzxu+5QpN/k9H9bqrWaL1XmuAoD sXZEqjquF+0K2AnAi1NuqluFTVylffdz76vcwP/9CrH6kfQHMHivw+JLbBrjECzd5Ougx KRQq5CE7EhSHJf9om1Iq9f8KO2EyazDeUfmWYe266cEXZocH9ZkvKKsSjEySiHLibFOpI lMWFTirfXG5reAZ6h4VK+iyLpEBfVew16vDqQWaOJvmFmXXkUDgDiuFUKMEi6azK8N1cF If/yYVlHNIP8kVEP1b8HL3gcubX5pUrRA0hn1zcKsYBZnH8LcKvAlBBhi9j7gJkkZGg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792659276; h=DMARC-Filter:Received:X-Originating-IP:Date:X-CM-HeaderCharset:From: To:Cc:Subject:X-Priority:X-Mailer:X-CM-CTRLMSGS:Content-Type: MIME-Version:Message-ID:X-Coremail-Locale:X-CM-TRANSID: X-CM-SenderInfo:X-Coremail-Antispam; bh=9mWlz5Lk4iYdONbSWIfm5fTcYgn4dDAET8RrkV+Pm58=; b=KWg8n5NvaEhIdKEVbMbDzPdX59mjkvZdry29JnhVdczW009c2BhwjcekWJUQtX2Zl8+/ 5gpoWfSr8g+JmYx2Yo16tIMFs/mzSHIXelWttD4VMYgjATNYAuIjm0trxutJ5w5tKMI7F gi/iRAVLRHtWZpCdAr4avUM1zsph6rJw8zUDWR8j/gW68DxpFwb9mBegIJgMhYP09Y/pg 943J2+oazjElR16w2BtmkuWUru+3/0vxFhDaldpVZ92/wmmD++uQ3+TF+wUvvkX4eNfJu Nd8fDVmdCA4b1nqKgzTW9NUSD3OG7QtWeXdlfGIzLuYnEL7DHafRnSdh/brdgeH+gKQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none header.from=hust.edu.cn; spf=pass smtp.mailfrom=hust.edu.cn; arc=none smtp.remote-ip=132.226.202.154 Received: from fraori-sdnproxy-3.icoremail.net (fraori-sdnproxy-3.icoremail.net [132.226.202.154]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4DB76606A324; Thu, 22 Oct 2026 08:54:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 4DB76606A324 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=hust.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hust.edu.cn Received: from xuhx$hust.edu.cn ( [10.11.162.68] ) by ajax-webmail-app2 (Coremail) ; Thu, 22 Oct 2026 16:54:24 +0800 (GMT+08:00) Date: Thu, 22 Oct 2026 16:54:24 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?5b6Q5pmX57+U?= To: stefan@datenfreihafen.org, alex.aring@gmail.com, miquel.raynal@bootlin.com Cc: linux-wpan@vger.kernel.org, linux-kernel@vger.kernel.org Subject: ieee802154: mcr20a: single lp->reg_msg reused from two unlocked contexts (xmit vs IRQ completion chain) double-submits the same spi_message and corrupts the SPI queue X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2025.3-cmXT6 build 20260810(6c94e3b5) Copyright (c) 2002-2026 www.mailtech.cn hust X-CM-CTRLMSGS: =?B?fKm5aTiH6nJ5xwDR7hwMki1N8jM= Content-Type: multipart/mixed; boundary="----=_Part_280281_1485314978.1792659264993" X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-ID: <21c16b8e.147eb.1a162d195e1.Coremail.xuhx@hust.edu.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID:IQEQrMDmDnhCz9lqKPJTAA--.58370W X-CM-SenderInfo: bgsqjkayqyjmo6kx23oohg3hdfq/1tbiAgIIB2rY5eyIwAAAs8 X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= ------=_Part_280281_1485314978.1792659264993 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 bWNyMjBhIHJldXNlcyBvbmUgc3RydWN0IHNwaV9tZXNzYWdlIChscC0+cmVnX21zZykgYXMgdGhl IHRyYW5zbWl0CnZlaGljbGUgZm9yIGJvdGggdGhlIG5ldGRldiB4bWl0IHBhdGggYW5kIHRoZSBJ UlEtZHJpdmVuIGNvbXBsZXRpb24KY2hhaW4sIHdpdGggbm8gbG9jayBjb21tb24gdG8gdGhlIHR3 byBjb250ZXh0cywgc28gYSBjb25jdXJyZW50IHhtaXQKcmUtZmlsbHMgYW5kIHJlLXN1Ym1pdHMg YSBtZXNzYWdlIHRoYXQgaXMgc3RpbGwgcXVldWVkOyB0aGUgU1BJIGNvcmUKYWNjZXB0cyB0aGUg ZG91YmxlIGxpc3RfYWRkX3RhaWwoKSB3aXRob3V0IGFueSBjaGVjaywgYW5kIHRoZSByZXN1bHRp bmcKcXVldWUgY29ycnVwdGlvbiBwZXJtYW5lbnRseSBoYW5ncyBzcGlfc3luYygpIGNhbGxlcnMg LS0gaW5jbHVkaW5nIHRoZQpSVE5MLWhvbGRpbmcgaW50ZXJmYWNlLWNsb3NlIHBhdGggLS0gb3Ig d2VkZ2VzIHRoZSB3aG9sZSBjb250cm9sbGVyCnF1ZXVlLgoKClRoZSBkcml2ZXIncyBhY3R1YWwg bXV0dWFsIGV4Y2x1c2lvbiByZWxpZXMgb24gY2hpcC1wcm90b2NvbCBjYXVzYWxpdHkKKHRoZSBj b21wbGV0aW9uIGNoYWluIG9ubHkgcmUtYXJtcyBpdHNlbGYgYWZ0ZXIgdGhlIHByZXZpb3VzIG1l c3NhZ2UKZmluaXNoZWQpIGFuZCBvbiBtYWM4MDIxNTQncyBUWCBxdWV1ZSBob2xkLCB3aGljaCBv bmx5IHNlcmlhbGl6ZXMgVFgKYWdhaW5zdCBUWC4gTm90aGluZyBzZXJpYWxpemVzIHRoZSBSWC9J UlEgY29tcGxldGlvbiBjaGFpbiAoU1BJCmNvbnRyb2xsZXIga3dvcmtlciBjb250ZXh0KSBhZ2Fp bnN0IGEgbmV3bHkgc3RhcnRlZCB0cmFuc21pc3Npb24KKG5kb19zdGFydF94bWl0IGNvbnRleHQp OiBib3RoIHNpZGVzIGZpbGwgbHAtPnJlZ19tc2cncyBjb21wbGV0ZS8KdHJhbnNmZXIvbGVuZ3Ro IGZpZWxkcyBhbmQgY2FsbCBzcGlfYXN5bmMoKSBvbiB0aGUgc2FtZSBvYmplY3QKKG1jcjIwYS5j OjQ3NS00ODAgdnMgbWNyMjBhLmM6ODQwLTg0NC85NDAtOTQ1LzQ1MS00NTYpLCBhbmQKX19zcGlf cXVldWVkX3RyYW5zZmVyKCkgZG9lcyBhbiB1bmNoZWNrZWQgbGlzdF9hZGRfdGFpbCgmbXNnLT5x dWV1ZSwKJmN0bHItPnF1ZXVlKSAoZHJpdmVycy9zcGkvc3BpLmM6MjQ3OSBpbiA3LjMpLiBWZXJp ZmllZCBvbiBtYWlubGluZQo3LjMgd2l0aCBhIGZ1bmN0aW9uLWZvci1mdW5jdGlvbiBzaW11bGF0 b3Igb2YgdGhlIHJlYWwgbWVzc2FnZSBmbG93CihyZXByb2R1Y2VyIGF0dGFjaGVkKTogMjAxIGRv dWJsZS1zdWJtaXNzaW9ucyBjYXVnaHQgaW4gMzkwIGNvbnRyb2xsZWQKeG1pdCBhdHRlbXB0cywg YW5kIDEgZnVsbHkgbmF0dXJhbCBjb2xsaXNpb24gaW4gODAwMCBhdHRlbXB0cyB3aXRob3V0CmFu eSBhcnRpZmljaWFsIGRlbGF5LiBPbiBhIHByb2R1Y3Rpb24ga2VybmVsIChubyBDT05GSUdfREVC VUdfTElTVCkKdGhlIHNlY29uZCBsaXN0X2FkZCBpcyBub3QgcmVqZWN0ZWQgYnV0IGxhbmRzIGFz IHJlYWwgbGlzdCBjb3JydXB0aW9uLgpObyBzcGVjaWFsIHByaXZpbGVnZXMgYXJlIG5lZWRlZCBm b3IgdGhlIHRyaWdnZXJpbmcgc29ja2V0IHRyYWZmaWMKb25jZSB0aGUgaW50ZXJmYWNlIGlzIHVw OyBNQ1IyMEEgaGFyZHdhcmUgaXMgcmVxdWlyZWQuCgoKVGhlIGRldGFpbGVkIGRlc2NyaXB0aW9u OgoKKiBUZXN0IGVudmlyb25tZW50IC8gYWZmZWN0ZWQgdmVyc2lvbgoKTGludXggdmVyc2lvbiA3 LjMuMCAoZ2NjIDEzLjMuMCwgR05VIGxkIDIuNDIpICMxIFNNUCBQUkVFTVBUX0RZTkFNSUMKLS0g dmFuaWxsYSBtYWlubGluZSA3LjMgcmVsZWFzZSB0YXJiYWxsIChrZXJuZWwub3JnLCB1bm1vZGlm aWVkKSwKcmVidWlsdCB3aXRoIENPTkZJR19TUEk9eSwgQ09ORklHX1JFR01BUF9TUEk9eSwKQ09O RklHX0RFQlVHX0xJU1Q9eSwgQ09ORklHX0xJU1RfSEFSREVORUQ9eSwgS0FTQU4gZW5hYmxlZCwg UUVNVS9LVk0KeDg2XzY0IGd1ZXN0LiBkcml2ZXJzL25ldC9pZWVlODAyMTU0L21jcjIwYS5jIGlz IGJ5dGUtaWRlbnRpY2FsIGluCjcuMS41IGFuZCA3LjM7IGxpbmUgbnVtYmVycyBiZWxvdyBhcmUg ZnJvbSA3LjMgKD0gNy4xLjUpLgoKKiBNZWNoYW5pc20KCk9uZSBzcGlfbWVzc2FnZSwgZm91ciBw cm9kdWNlcnMsIHR3byBjb250ZXh0cywgbm8gY29tbW9uIGxvY2s6CgotIG5ldGRldiB4bWl0IHBh dGggKHByb2Nlc3Mvc29mdGlycSBjb250ZXh0KToKbWNyMjBhX3htaXQoKSBmaWxscyBscC0+cmVn X21zZyAoY29tcGxldGU9TlVMTCwgdHJhbnNmZXIKY29tbWFuZC9kYXRhLCBsZW5ndGhzOyBtY3Iy MGEuYzo0NzUtNDgwKSBhbmQgY2FsbHMKc3BpX2FzeW5jKGxwLT5zcGksICZscC0+cmVnX21zZyku CgotIElSUS1kcml2ZW4gY29tcGxldGlvbiBjaGFpbiAoU1BJIGNvbnRyb2xsZXIga3dvcmtlciBj b250ZXh0KToKdGhlIGhhcmQgSVJRIHN1Ym1pdHMgaXJxX21zZzsgaXRzIGNvbXBsZXRpb25zIGNo YWluIHJlZ19tc2cKcmUtc3VibWlzc2lvbnM6IHdyaXRlX3R4X2J1Zl9jb21wbGV0ZSgpIChtY3Iy MGEuYzo0NTEtNDU2KSwKaGFuZGxlX3J4KCkgKG1jcjIwYS5jOjg0MC04NDQpLCBpcnFfc3RhdHVz X2NvbXBsZXRlKCkKKG1jcjIwYS5jOjk0MC05NDUpIGVhY2ggcmUtZmlsbCB0aGUgU0FNRSBscC0+ cmVnX21zZyBmaWVsZHMgYW5kCnNwaV9hc3luYygpIGl0IHRvIGRlcml2ZSB0aGUgbmV4dCBjaGFp biBzdGVwLgoKClRoZSBzZXJpYWxpemF0aW9uIHRoYXQgZXhpc3RzIGRvZXMgbm90IGNvdmVyIHRo aXMgcGFpcjoKCi0gbWFjODAyMTU0J3MgaWVlZTgwMjE1NF9ob2xkX3F1ZXVlL3JlbGVhc2VfcXVl dWUKKG5ldC9tYWM4MDIxNTQvdXRpbC5jOjY3LTg1LCBwaHktPnF1ZXVlX2xvY2sgKyBob2xkX3R4 cykgc3RvcHMKdGhlIG5ldGRldiBxdWV1ZSBhcm91bmQgZHJpdmVyIHhtaXQvY29tcGxldGUgcGFp cnMgLS0gVFggdnMgVFgKb25seTsgdGhlIFJYIGNoYWluIG5ldmVyIHRha2VzIGl0LgoKLSBscC0+ aXNfdHggaXRzZWxmIGlzIGFuIHVubG9ja2VkIGNyb3NzLWNvbnRleHQgZmxhZzsgdGhlIGNoYWlu CnJlYWRlcnMgKG1jcjIwYS5jOjg5Ny85MDkvOTIxKSByYWNlIHRoZSB4bWl0IHdyaXRlciAoNDcz KS4KCi0gU1BJIGNvcmU6IF9fc3BpX3F1ZXVlZF90cmFuc2ZlcigpIGFwcGVuZHMKbGlzdF9hZGRf dGFpbCgmbXNnLT5xdWV1ZSwgJmN0bHItPnF1ZXVlKSB3aXRoIG5vCiJhbHJlYWR5IHF1ZXVlZCIg Y2hlY2ssIGFuZCBfX3NwaV9wdW1wX21lc3NhZ2VzKCkgZGVxdWV1ZXMgd2l0aApsaXN0X2ZpcnN0 X2VudHJ5KCkrbGlzdF9kZWxfaW5pdCgpLiBBIHNlY29uZCBlbnF1ZXVlIG9mIGEgbm9kZQpzdGls bCBpbiB0aGUgcXVldWUgb3ZlcndyaXRlcyBtc2ctPm5leHQvbXNnLT5wcmV2IGFuZCBvbmUKbmVp Z2hib3IncyBwb2ludGVyIHdoaWxlIHRoZSBvdGhlciBuZWlnaGJvciBrZWVwcyBwb2ludGluZyBh dAppdC4KCgpDb25jcmV0ZSBjb3JydXB0aW9uIGZvcm1zIChmaXJzdCB0d28gYXJlIHRoZSBvbmVz IHRoZSByZXByb2R1Y2VyCmNhdGNoZXMsIHNoYXBlIG5ldz09cHJldiA9PSBxdWV1ZS10YWlsIHNl bGYtbG9vcCk6CgoxLiBRdWV1ZS10YWlsIHNlbGYtbG9vcDogdGhlIGRvdWJsZSBhZGQgaGFwcGVu cyB3aGlsZSByZWdfbXNnIGlzCnRoZSBsYXN0IGVudHJ5IChuZXcgPT0gcHJldiBpbiB0aGUgREVC VUdfTElTVCByZXBvcnQpOgpyZWdfbXNnLT5uZXh0ID0gcmVnX21zZywgZGV0YWNoZWQgZnJvbSB0 aGUgaGVhZCAtLQpsaXN0X2VtcHR5KCkgc3RheXMgZmFsc2UgZm9yZXZlciwgdGhlIHB1bXAgcmUt cGlja3MgdGhlIHNhbWUKbWVzc2FnZSwgZXZlcnkgZGV2aWNlIG9uIHRoaXMgY29udHJvbGxlciBz dG9wcyBtYWtpbmcKcHJvZ3Jlc3M7IGNvbnRyb2xsZXIgdGVhcmRvd24gcG9sbHMgYW5kIGZhaWxz CihzcGlfc3RvcF9xdWV1ZSgpIHRpbWVvdXQgcGF0aCkuCgoyLiBPcnBoYW5lZCByYW5nZTogYSBt aWQtcXVldWUgZG91YmxlIGFkZCBtYWtlcyBldmVyeXRoaW5nIGFmdGVyCnRoZSBvbGQgcG9zaXRp b24gdW5yZWFjaGFibGUuIEFueSBzcGlfc3luYygpIHdob3NlIGNvbXBsZXRpb24KbGl2ZXMgaW4g dGhhdCByYW5nZSBuZXZlciBmaXJlczogX19zcGlfc3luYygpIGJsb2NrcyBvbiBhCnN0YWNrIGNv bXBsZXRpb24gZm9yZXZlci4gSWYgdGhlIG9ycGhhbmVkIHN5bmMgbWVzc2FnZSBpcyB0aGUKb25l IG1jcjIwYV9zdG9wKCkgc3VibWl0cyBkdXJpbmcgaW50ZXJmYWNlIGNsb3NlIChjYWxsZWQKdW5k ZXIgUlROTCksIHRoZSBoYW5nIGlzIGEga2VybmVsLWxldmVsIG5ldHdvcmtpbmcgZGVhZGxvY2su CgozLiBGaWVsZCB0ZWFyaW5nIChubyBleGFjdCBkb3VibGUtYWRkIG5lZWRlZCk6IHRoZSB0d28g Y29udGV4dHMKY29uY3VycmVudGx5IHdyaXRlIHJlZ19tc2ctPmNvbXBsZXRlL3JlZ19jbWQvcmVn X2RhdGEgd2hpbGUKdGhlIG90aGVyIHNpZGUgcmVhZHMvc3VibWl0cyB0aGVtLCBzbyBhIG1lc3Nh Z2UgY2FuIGJlIHF1ZXVlZAp3aXRoIGEgbWl4ZWQgc3RhdGUgLS0gZS5nLiBjb21wbGV0ZSBvdmVy d3JpdHRlbiB0byBOVUxMIGFmdGVyCnRoZSBjaGFpbiBzZXQgaXQgKGNoYWluIGJyZWFrcywgY2hp cCBJUlEgbGVmdCBkaXNhYmxlZCwKbmV0aWYgcXVldWUgbmV2ZXIgcmVsZWFzZWQpIG9yIGEgY29t cGxldGlvbiBjb25zdW1pbmcgdGhlCndyb25nIGJ1ZmZlci4KCgoqIFRyaWdnZXIgbW9kZWwKCgpJ bnRlcmZhY2UgdXAgKGJyb3VnaHQgdXAgYnkgYW4gYWRtaW5pc3RyYXRvciBvbmNlKSArIGFueSBS WCB0cmFmZmljCmtlZXBpbmcgdGhlIGNvbXBsZXRpb24gY2hhaW4gYWN0aXZlICsgYSBsb2NhbCBz b2NrZXQgc2VuZGluZwo4MDIuMTUuNCBmcmFtZXMuIFRoZSBzZW5kaW5nIHNpZGUgbmVlZHMgbm8g cHJpdmlsZWdlczsgdGhlIGNoYWluCmlzIGFjdGl2ZSBmb3IgdGVucy10by1odW5kcmVkcyBvZiBt aWNyb3NlY29uZHMgYWZ0ZXIgZWFjaCByZWNlaXZlZApmcmFtZSwgYW5kIGEgc29ja2V0IHNlbmQg bGFuZGluZyBpbiB0aGF0IHdpbmRvdyByYWNlcyBpdC4gUmVxdWlyZXMKTUNSMjBBIGhhcmR3YXJl LiBDb25zZXF1ZW5jZTogaGFuZy9kZWFkbG9jayBhbmQgY29udHJvbGxlci13aWRlCkkvTyBzdGFs bCAoRG9TKS4KCgoqIFJlcHJvZHVjZXIgKGF0dGFjaGVkOiBtY3JzaW0uYykgYW5kIHJlc3VsdHMg b24gNy4zCgptY3JzaW0uYyBpcyBhIHNlbGYtY29udGFpbmVkIG1vZHVsZTogYSBtaW5pbWFsIHNv ZnR3YXJlLWxvb3BiYWNrIFNQSQpjb250cm9sbGVyIChzcGlfcmVnaXN0ZXJfY29udHJvbGxlcikg cGx1cyBhIGRyaXZlciB0aGF0IG1pcnJvcnMgdGhlCnJlYWwgbWNyMjBhIG1lc3NhZ2UgZmxvdyBm dW5jdGlvbi1mb3ItZnVuY3Rpb24gKHNhbWUgcmVnX21zZwpyZXVzZSwgc2FtZSBmb3VyIHByb2R1 Y2VycyBhY3Jvc3MgdGhlIHNhbWUgdHdvIGNvbnRleHRzOyBzaW11bGF0ZWQKY2hpcCBJUlEgKyBw ZXItbWVzc2FnZSBjb250cm9sbGVyIGRlbGF5IHRvIHNoYXBlIHRoZSB3aW5kb3cpLiBObwprZXJu ZWwgc291cmNlIG1vZGlmaWNhdGlvbjsgbmVlZHMgQ09ORklHX1NQST15IGFuZApDT05GSUdfUkVH TUFQX1NQST15ICh0aGUga2VybmVsIEkgdGVzdGVkIGFsc28gaGFkIENPTkZJR19ERUJVR19MSVNU PQp5IHNvIHRoZSBjb3JydXB0aW9uIGlzIGNhdWdodCBhcyBhIHdhcm5pbmcgaW5zdGVhZCBvZiBs YW5kaW5nKS4KCiMgYnVpbGQKbWFrZSAtQyA8a2VybmVsLWJ1aWxkLWRpcj4gTT0kUFdEIG1vZHVs ZXMKIyBjb250cm9sbGVkIHdpbmRvdyAocm9vdCk6Cmluc21vZCBtY3JzaW0ua28gaXJxX3Blcmlv ZF9tcz0zMCB4ZmVyX2RlbGF5X21zPTYwCmVjaG8gInhtaXQgNDAwIDIwMDAiID4gL3N5cy9tb2R1 bGUvbWNyc2ltL3BhcmFtZXRlcnMvYWN0aW9uCmVjaG8gc3RhdHVzID4gL3N5cy9tb2R1bGUvbWNy c2ltL3BhcmFtZXRlcnMvYWN0aW9uCiMgbmF0dXJhbCB3aW5kb3cgKG5vIGFydGlmaWNpYWwgZGVs YXkpOgpybW1vZCBtY3JzaW07IGluc21vZCBtY3JzaW0ua28gaXJxX3BlcmlvZF9tcz0xMCB4ZmVy X2RlbGF5X21zPTAKZWNobyAieG1pdCA4MDAwIDIwMCIgPiAvc3lzL21vZHVsZS9tY3JzaW0vcGFy YW1ldGVycy9hY3Rpb24KCgpSZXN1bHRzICg3LjMsIDQgdkNQVSk6CgotIGNvbnRyb2xsZWQ6IDIw MSAibGlzdF9hZGQgZG91YmxlIGFkZDogbmV3PS4uLiA9PSBwcmV2PS4uLiIKY2F0Y2hlcyBkdXJp bmcgMzkwIHhtaXQgc3VibWlzc2lvbnMgKGVhY2ggY2F0Y2ggaXMgdGhlIGV4YWN0CnNlbGYtbG9v cCBmb3JtIDE7IHRoZSByZWplY3Rpb25zIGNvbWUgZnJvbSBDT05GSUdfREVCVUdfTElTVCAtLQp3 aXRob3V0IGl0IHRoZXNlIGxhbmQgYXMgcmVhbCBjb3JydXB0aW9uKTsKLSBuYXR1cmFsOiAxIGNv bGxpc2lvbiBpbiA4MDAwIHN1Ym1pc3Npb25zLCBzYW1lIG5ldz09cHJldgpzaGFwZSwgd2l0aCAx OC40TSBtZXNzYWdlcyBvdGhlcndpc2UgcHJvY2Vzc2VkIGNsZWFubHkgLS0gdGhlCnJhY2UgZXhp c3RzIGluIHRoZSB1bm1vZGlmaWVkIHRpbWluZywgb25seSB0aGUgcmF0ZSBpcyBzbWFsbC4KCgpU aGUgc2FtZSBzaW11bGF0b3IgYWxzbyBkZW1vbnN0cmF0ZXMgZm9ybSAyIG9uIHJlcXVlc3QgKCJz eW5jcHJvYmUiCmFjdGlvbiBkcml2ZXMgYW4gc3BpX3N5bmMoKSB3aG9zZSBjb21wbGV0aW9uIGdl dHMgb3JwaGFuZWQgYnkgdGhlCnNhbWUgZG91YmxlLXN1Ym1pc3Npb24pLgoKVGhhbmtzIGZvciB0 YWtpbmcgYSBsb29rLgoKUmVnYXJkcywKSGFueGlhbmcgWHUKeHVoeEBodXN0LmVkdS5jbgoKCg== ------=_Part_280281_1485314978.1792659264993 Content-Type: text/plain; name=mcrsim.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mcrsim.c" Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLyoKICogbWNyc2ltLmMgLSBkeW5h bWljIHZlcmlmaWNhdGlvbiBmb3IgSFYtMiAvIE4tMSBvZiB0aGUgZHJpdmVycy9iYXNlCiAqIHJh Y2UtY29uZGl0aW9uIGF1ZGl0IChtY3IyMGEtZmFtaWx5IGFzeW5jIFNQSSBjb21wbGV0aW9uIGNo YWlucyB2cwogKiB0ZWFyZG93biksIGFnYWluc3QgdGhlIEtBU0FOK0RFQlVHX0xJU1Qga2VybmVs IChidWlsZC1rYXNhbi1zcGkpLgogKgogKiBJdCByZXByb2R1Y2VzIHRoZSBtY3IyMGEgc3RydWN0 dXJlIGZhaXRoZnVsbHkgYXQgdGhlIEFQSSBsZXZlbCwgd2l0aAogKiBaRVJPIGtlcm5lbC1zb3Vy Y2UgbW9kaWZpY2F0aW9uOgogKgogKiAgIC0gYSBmYWtlLCBzb2Z0d2FyZS1sb29wYmFjayBTUEkg Y29udHJvbGxlciAocXVldWUtYmFzZWQsCiAqICAgICB0cmFuc2Zlcl9vbmVfbWVzc2FnZSArIHNw aV9maW5hbGl6ZV9jdXJyZW50X21lc3NhZ2UpLCB3aGljaCBrZWVwcwogKiAgICAgcHJvY2Vzc2lu ZyBpdHMgcXVldWUgaW5kZXBlbmRlbnRseSBvZiBzbGF2ZS1kcml2ZXIgYmluZGluZywKICogICAg IGV4YWN0bHkgbGlrZSBhIHJlYWwgY29udHJvbGxlci4gIEFuIG9wdGlvbmFsIHBlci1tZXNzYWdl IGRlbGF5CiAqICAgICAoeGZlcl9kZWxheV9tcykgd2lkZW5zIHRoZSBuYXR1cmFsIHdpbmRvd3Mg Zm9yIG9ic2VydmF0aW9uLgogKiAgIC0gb25lIGZha2Ugc2xhdmUgZGV2aWNlICJtY3JzaW0iIGJv dW5kIHRvIGEgZHJpdmVyIHdob3NlIHByaXZhdGUKICogICAgIGRhdGEgKGxwKSBpcyBhIHBsYWlu IGt6YWxsb2MgKE5PVCBkZXZtKSwgZnJlZWQgZGlyZWN0bHkgaW4KICogICAgIC5yZW1vdmUganVz dCBsaWtlIGllZWU4MDIxNTRfZnJlZV9odygpIGZyZWVzIHRoZSBzaW5nbGUKICogICAgIHdwYW5f cGh5K2xvY2FsK2xwIGFsbG9jYXRpb24gaW5zaWRlIG1jcjIwYV9yZW1vdmUoKS4KICogICAtIGFu IG1jcjIwYS1zaGFwZWQgYXN5bmNocm9ub3VzIGNvbXBsZXRpb24gY2hhaW4gZHJpdmVuIGJ5IGEK ICogICAgIHBlcmlvZGljIGRlbGF5ZWRfd29yayB0aGF0IHBsYXlzIHRoZSByb2xlIG9mIHRoZSBj aGlwIElSUQogKiAgICAgKGluaXRpYXRvciBvbmx5OyB0aGUgY2hhaW4gaXRzZWxmIHN1cnZpdmVz IG9uIGl0cyBvd24pOgogKgogKiAgICAgICBzaW1faXJxKGR3b3JrKSAtPiBzcGlfYXN5bmMoJmxw LT5pcnFfbXNnKQogKiAgICAgICAgIC0+IGlycV9zdGF0dXNfY29tcGxldGUgOiByZWdtYXBfdXBk YXRlX2JpdHNfYXN5bmMobHAtPnJlZ21hcCkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKyBzcGlfYXN5bmMoJmxwLT5yZWdfbXNnKQogKiAgICAgICAgIC0+IGlycV9jbGVhbl9j b21wbGV0ZSAgOiByZWFkcyBscC0+aXJxX2RhdGEsIGRpc3BhdGNoZXMKICogICAgICAgICAtPiBo YW5kbGVfcnggICAgICAgICAgIDogcmVmaWxscyBhbmQgcmVzdWJtaXRzICZscC0+cmVnX21zZwog KiAgICAgICAgIC0+IHJ4X3JlYWRfbGVuX2NvbXBsZXRlOiBzcGlfYXN5bmMoJmxwLT5yeF9idWZf bXNnKQogKiAgICAgICAgIC0+IHJ4X2J1Zl9jb21wbGV0ZSAgICAgOiByZWFkcyBscC0+cnhfYnVm LCB0aGVuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ21hcF91cGRhdGVf Yml0c19hc3luYyhscC0+cmVnbWFwKQogKgogKiAgICAgQWxsIGNhbGxiYWNrcyBkZXJlZmVyZW5j ZSB0aGUgcmF3IGxwIHBvaW50ZXI7IGxwLT5yZWdfbXNnIGlzCiAqICAgICBzaGFyZWQgYnkgdGhl IGNoYWluIEFORCBieSB0aGUgInhtaXQiIHBhdGggKE4tMSkuCiAqICAgLSByZWdtYXAgaXMgZGV2 bV9yZWdtYXBfaW5pdF9zcGkoKTogZnJlZWQgYnkgZGV2cmVzIEFGVEVSCiAqICAgICAucmVtb3Zl IHJldHVybnMgKGF1dGhlbnRpYyBkZC5jIG9yZGVyaW5nKSwgd2hpbGUgY2hhaW4gY2FsbGJhY2tz CiAqICAgICBrZWVwIGNhbGxpbmcgcmVnbWFwX3VwZGF0ZV9iaXRzX2FzeW5jIChIVi0yIHN0ZXAg NiA9IEhWLTEgd2lkZQogKiAgICAgd2luZG93IHRocm91Z2ggdGhlIHJlYWwgcmVnbWFwLXNwaSBw YXRoKS4KICoKICogRmlkZWxpdHkgYm91bmRhcmllcyAoZG9jdW1lbnRlZCBpbiB0aGUgYXVkaXQg cmVwb3J0KToKICogICAtIHRoZSBjaGlwIElSUSBpcyBzaW11bGF0ZWQgYnkgYSBwZXJpb2RpYyB3 b3JrICh0aGUgaW5pdGlhdG9yKTsKICogICAgIHRoZSBwcm9wZXJ0eSB1bmRlciB0ZXN0IGlzIHRo ZSBjaGFpbidzIHN1cnZpdmFsIHBhc3QgdW5iaW5kLAogKiAgICAgbm90IHRoZSBJUlEgaXRzZWxm OwogKiAgIC0gdGhlIGllZWU4MDIxNTQvbWFjODAyMTU0IHVwcGVyIGxheWVyIGlzIHJlcGxhY2Vk IGJ5IGRpcmVjdAogKiAgICAgbG9nLWFuZC1yZXN1Ym1pdDsKICogICAtIE4tMSdzIG5hdHVyYWwg cHJvYmFiaWxpc3RpYyBjb2xsaXNpb24gaXMgbWFkZSBuZWFyLWNlcnRhaW4gYnkKICogICAgIHhm ZXJfZGVsYXlfbXMgKGNvbnRyb2xsZWQgd2luZG93KSwgcGx1cyBhIG5hdHVyYWwgaGFtbWVyIG1v ZGUuCiAqCiAqIEFjdGlvbnMgKGVjaG8gLi4uID4gL3N5cy9tb2R1bGUvbWNyc2ltL3BhcmFtZXRl cnMvYWN0aW9uKToKICogICBydW4gPG1zPiAgICAgICAgICA6IGtlZXAgdGhlIGNoYWluIHJ1bm5p bmcgZm9yIG1zIChzdGF0cyBwcmludGVkKQogKiAgIHhtaXQgPG4+IDx1cz4gICAgIDogTi0xOiBr dGhyZWFkIGxvb3BzIHRoZSBtY3IyMGFfeG1pdC1zaGFwZWQgYm9keQogKiAgICAgICAgICAgICAg ICAgICAgICAgKGZpbGxzIGxwLT5yZWdfbXNnICsgc3BpX2FzeW5jKSBuIHRpbWVzCiAqICAgc3lu Y3Byb2JlICAgICAgICAgOiBOLTEgb3V0Y29tZSBwcm9iZTogb25lIHN5bmMgcmVnbWFwIG9wIHdp dGggYQogKiAgICAgICAgICAgICAgICAgICAgICAgNXMgaGFuZyB3YXRjaGRvZyAob3JwaGFuZWQt bWVzc2FnZSBldmlkZW5jZSkKICogICBzdGF0dXMgICAgICAgICAgICA6IHN0YXRpc3RpY3MKICog VW5iaW5kIGZvciBIVi0yIGlzIGRyaXZlbiBmcm9tIHRoZSBWTSBpbml0IHNjcmlwdCB2aWEKICog ICBlY2hvIHNwaUIuQyA+IC9zeXMvYnVzL3NwaS9kcml2ZXJzL21jcnNpbS91bmJpbmQKICovCiNk ZWZpbmUgcHJfZm10KGZtdCkgIk1DUlNJTTogIiBmbXQKCiNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5j bHVkZSA8bGludXgva3RocmVhZC5oPgojaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KI2luY2x1ZGUg PGxpbnV4L3dvcmtxdWV1ZS5oPgojaW5jbHVkZSA8bGludXgvc2xhYi5oPgojaW5jbHVkZSA8bGlu dXgvc3BpL3NwaS5oPgojaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgojaW5jbHVkZSA8bGlu dXgva3RpbWUuaD4KI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgoKLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8q IHR1bmFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KCnN0YXRpYyBpbnQgaXJxX3BlcmlvZF9tcyA9IDQwOwptb2R1bGVfcGFy YW0oaXJxX3BlcmlvZF9tcywgaW50LCAwNjAwKTsKTU9EVUxFX1BBUk1fREVTQyhpcnFfcGVyaW9k X21zLCAic2ltdWxhdGVkIGNoaXAgSVJRIHBlcmlvZCAoY2hhaW4gaW5pdGlhdG9yKSIpOwoKc3Rh dGljIGludCB4ZmVyX2RlbGF5X21zID0gODA7Cm1vZHVsZV9wYXJhbSh4ZmVyX2RlbGF5X21zLCBp bnQsIDA2MDApOwpNT0RVTEVfUEFSTV9ERVNDKHhmZXJfZGVsYXlfbXMsICJwZXItbWVzc2FnZSBk ZWxheSBpbnNpZGUgdGhlIGZha2UgY29udHJvbGxlciAoY29udHJvbGxlZCB3aW5kb3cpIik7Cgov KiBmYWtlIGNoaXAgcmVnaXN0ZXJzIChtY3IyMGEgbmFtZXMga2VwdCBmb3IgdHJhY2VhYmlsaXR5 KSAqLwojZGVmaW5lIERBUl9JUlFfU1RTMQkweDAyCiNkZWZpbmUgREFSX1BIWV9DVFJMMQkweDEw CiNkZWZpbmUgREFSX1JYX0ZSTV9MRU4JMHgxMwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIGZha2Ugc29m dHdhcmUtbG9vcGJhY2sgU1BJIGNvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KCiNkZWZpbmUgU0lNX0NTX01BWAk0CgpzdHJ1Y3QgbWNyc2ltX2N0cmwgewoJc3RydWN0 IHBsYXRmb3JtX2RldmljZQkqcGRldjsKCXN0cnVjdCBzcGlfY29udHJvbGxlcgkqY3RscjsKCXU4 CQkJcmVnZmlsZVtTSU1fQ1NfTUFYXVsxMjhdOwoJdTgJCQlhZGRyW1NJTV9DU19NQVhdOwoJYm9v bAkJCXJkW1NJTV9DU19NQVhdOwp9OwoKc3RhdGljIHN0cnVjdCBtY3JzaW1fY3RybCAqZ19jdHJs OwpzdGF0aWMgc3RydWN0IHNwaV9kZXZpY2UgKmdfc3BpZGV2OwoKc3RhdGljIGF0b21pY19sb25n X3Qgc3RhdF9tc2dzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTsKc3RhdGljIGF0b21pY19sb25nX3Qg c3RhdF9kZWxheWVkID0gQVRPTUlDX0xPTkdfSU5JVCgwKTsKc3RhdGljIGF0b21pY19sb25nX3Qg c3RhdF9pcnFfc3VibWl0ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTsKc3RhdGljIGF0b21pY19sb25n X3Qgc3RhdF9jaGFpbl9zdGVwcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7CnN0YXRpYyBhdG9taWNf bG9uZ190IHN0YXRfeG1pdCA9IEFUT01JQ19MT05HX0lOSVQoMCk7CnN0YXRpYyBhdG9taWNfbG9u Z190IHN0YXRfYXN5bmNfY2FsbHMgPSBBVE9NSUNfTE9OR19JTklUKDApOwoKc3RhdGljIHZvaWQg c2ltX2hhbmRsZV9tZXNzYWdlKHN0cnVjdCBtY3JzaW1fY3RybCAqYywgc3RydWN0IHNwaV9tZXNz YWdlICptKQp7CglzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOwoJdTggY3MgPSBtLT5zcGktPmNo aXBfc2VsZWN0WzBdOwoJdW5zaWduZWQgaW50IGk7CgoJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZmVy LCAmbS0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CgkJY29uc3QgdTggKnR4ID0geGZlci0+ dHhfYnVmOwoJCXU4ICpyeCA9IHhmZXItPnJ4X2J1ZjsKCgkJZm9yIChpID0gMDsgaSA8IHhmZXIt PmxlbjsgaSsrKSB7CgkJCWlmICh0eCkgewoJCQkJdTggYiA9IHR4W2ldOwoKCQkJCWlmIChpID09 IDApIHsKCQkJCQljLT5hZGRyW2NzXSA9IGIgJiAweDdmOwoJCQkJCWMtPnJkW2NzXSA9ICEhKGIg JiAweDgwKTsKCQkJCX0gZWxzZSBpZiAoIWMtPnJkW2NzXSkgewoJCQkJCWMtPnJlZ2ZpbGVbY3Nd W2MtPmFkZHJbY3NdICYgMHg3Zl0gPSBiOwoJCQkJCWMtPmFkZHJbY3NdKys7CgkJCQl9CgkJCX0K CQkJaWYgKHJ4KQoJCQkJcnhbaV0gPSBjLT5yZWdmaWxlW2NzXVtjLT5hZGRyW2NzXSsrICYgMHg3 Zl07CgkJfQoJCW0tPmFjdHVhbF9sZW5ndGggKz0geGZlci0+bGVuOwoJfQp9CgpzdGF0aWMgaW50 IG1jcnNpbV90cmFuc2Zlcl9vbmVfbWVzc2FnZShzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHIs CgkJCQkgICAgICAgc3RydWN0IHNwaV9tZXNzYWdlICptKQp7CglhdG9taWNfbG9uZ19pbmMoJnN0 YXRfbXNncyk7CglpZiAoeGZlcl9kZWxheV9tcyA+IDApIHsKCQlhdG9taWNfbG9uZ19pbmMoJnN0 YXRfZGVsYXllZCk7CgkJbXNsZWVwKHhmZXJfZGVsYXlfbXMpOwoJfQoJc2ltX2hhbmRsZV9tZXNz YWdlKHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKGN0bHIpLCBtKTsKCW0tPnN0YXR1cyA9IDA7 CglzcGlfZmluYWxpemVfY3VycmVudF9tZXNzYWdlKGN0bHIpOwoJcmV0dXJuIDA7Cn0KCi8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLwovKiBtY3IyMGEtc2hhcGVkIHNsYXZlIGRyaXZlciAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCgpzdHJ1Y3QgbWNyc2ltX2xwIHsKCXN0cnVjdCBz cGlfZGV2aWNlCSpzcGk7CglzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOwoKCXN0cnVjdCBzcGlfbWVz c2FnZQlpcnFfbXNnOwoJc3RydWN0IHNwaV90cmFuc2ZlcglpcnFfeGhkcjsKCXN0cnVjdCBzcGlf dHJhbnNmZXIJaXJxX3hkYXRhOwoJdTgJCQlpcnFfaGRyOwoJdTgJCQlpcnFfZGF0YVsyXTsKCglz dHJ1Y3Qgc3BpX21lc3NhZ2UJcmVnX21zZzsJCS8qIFNIQVJFRCBieSBjaGFpbiArIHhtaXQgKE4t MSkgKi8KCXN0cnVjdCBzcGlfdHJhbnNmZXIJcmVnX3hjbWQ7CglzdHJ1Y3Qgc3BpX3RyYW5zZmVy CXJlZ194ZGF0YTsKCXU4CQkJcmVnX2NtZDsKCXU4CQkJcmVnX2RhdGFbNF07CgoJc3RydWN0IHNw aV9tZXNzYWdlCXJ4X2J1Zl9tc2c7CglzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXJ4X3hoZHI7CglzdHJ1 Y3Qgc3BpX3RyYW5zZmVyCXJ4X3hidWY7CglzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXJ4X3hscWk7Cgl1 OAkJCXJ4X2hkcjsKCXU4CQkJcnhfYnVmWzMyXTsKCXU4CQkJcnhfbHFpOwoKCXN0cnVjdCBkZWxh eWVkX3dvcmsJc2ltX2lycTsJLyogY2hpcC1JUlEgaW5pdGlhdG9yICovCglpbnQJCQlhbGl2ZTsK CWludAkJCWNoYWluX2J1c3k7CS8qIElSUS1saW5lIGdhdGluZyBhbmFsb2c6IHRoZSByZWFsIGNo aXAKCQkJCQkgKiBkb2VzIG5vdCByZS1yYWlzZSB0aGUgSVJRIHdoaWxlIHRoZQoJCQkJCSAqIGNo YWluIG93bnMgaXQgKElTUiBkaXNhYmxlcyBpdCkgKi8KfTsKCnN0YXRpYyB2b2lkIG1jcnNpbV9p cnFfc3RhdHVzX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQpOwpzdGF0aWMgdm9pZCBtY3JzaW1fcnhf YnVmX2NvbXBsZXRlKHZvaWQgKmNvbnRleHQpOwoKc3RhdGljIHZvaWQgc2V0dXBfbWVzc2FnZXMo c3RydWN0IG1jcnNpbV9scCAqbHApCnsKCXNwaV9tZXNzYWdlX2luaXQoJmxwLT5pcnFfbXNnKTsK CWxwLT5pcnFfbXNnLmNvbnRleHQgPSBscDsKCWxwLT5pcnFfbXNnLmNvbXBsZXRlID0gbWNyc2lt X2lycV9zdGF0dXNfY29tcGxldGU7CglscC0+aXJxX3hoZHIubGVuID0gMTsKCWxwLT5pcnFfeGhk ci50eF9idWYgPSAmbHAtPmlycV9oZHI7CglscC0+aXJxX3hoZHIucnhfYnVmID0gJmxwLT5pcnFf aGRyOwoJbHAtPmlycV94ZGF0YS5sZW4gPSAyOwoJbHAtPmlycV94ZGF0YS5yeF9idWYgPSBscC0+ aXJxX2RhdGE7CglzcGlfbWVzc2FnZV9hZGRfdGFpbCgmbHAtPmlycV94aGRyLCAmbHAtPmlycV9t c2cpOwoJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJmxwLT5pcnFfeGRhdGEsICZscC0+aXJxX21zZyk7 CgoJc3BpX21lc3NhZ2VfaW5pdCgmbHAtPnJlZ19tc2cpOwoJbHAtPnJlZ19tc2cuY29udGV4dCA9 IGxwOwoJbHAtPnJlZ194Y21kLmxlbiA9IDE7CglscC0+cmVnX3hjbWQudHhfYnVmID0gJmxwLT5y ZWdfY21kOwoJbHAtPnJlZ194Y21kLnJ4X2J1ZiA9ICZscC0+cmVnX2NtZDsKCWxwLT5yZWdfeGRh dGEucnhfYnVmID0gbHAtPnJlZ19kYXRhOwoJbHAtPnJlZ194ZGF0YS50eF9idWYgPSBscC0+cmVn X2RhdGE7CglzcGlfbWVzc2FnZV9hZGRfdGFpbCgmbHAtPnJlZ194Y21kLCAmbHAtPnJlZ19tc2cp OwoJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJmxwLT5yZWdfeGRhdGEsICZscC0+cmVnX21zZyk7CgoJ c3BpX21lc3NhZ2VfaW5pdCgmbHAtPnJ4X2J1Zl9tc2cpOwoJbHAtPnJ4X2J1Zl9tc2cuY29udGV4 dCA9IGxwOwoJbHAtPnJ4X2J1Zl9tc2cuY29tcGxldGUgPSBtY3JzaW1fcnhfYnVmX2NvbXBsZXRl OwoJbHAtPnJ4X3hoZHIubGVuID0gMTsKCWxwLT5yeF94aGRyLnR4X2J1ZiA9ICZscC0+cnhfaGRy OwoJbHAtPnJ4X3hoZHIucnhfYnVmID0gJmxwLT5yeF9oZHI7CglscC0+cnhfeGJ1Zi5yeF9idWYg PSBscC0+cnhfYnVmOwoJbHAtPnJ4X3hscWkubGVuID0gMTsKCWxwLT5yeF94bHFpLnJ4X2J1ZiA9 ICZscC0+cnhfbHFpOwoJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJmxwLT5yeF94aGRyLCAmbHAtPnJ4 X2J1Zl9tc2cpOwoJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJmxwLT5yeF94YnVmLCAmbHAtPnJ4X2J1 Zl9tc2cpOwoJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJmxwLT5yeF94bHFpLCAmbHAtPnJ4X2J1Zl9t c2cpOwp9CgovKiAtLS0tIHRoZSBjaGFpbiAobWlycm9ycyBtY3IyMGEuYyBjYWxsYmFja3Mgb25l LXRvLW9uZSkgLS0tLS0tLS0tLS0tLSAqLwoKc3RhdGljIHZvaWQgbWNyc2ltX3JlcXVlc3Rfcngo c3RydWN0IG1jcnNpbV9scCAqbHApCnsKCWF0b21pY19sb25nX2luYygmc3RhdF9hc3luY19jYWxs cyk7CglyZWdtYXBfdXBkYXRlX2JpdHNfYXN5bmMobHAtPnJlZ21hcCwgREFSX1BIWV9DVFJMMSwg MHgxZiwgMHgwNSk7Cn0KCnN0YXRpYyB2b2lkIG1jcnNpbV9yeF9idWZfY29tcGxldGUodm9pZCAq Y29udGV4dCkKewoJc3RydWN0IG1jcnNpbV9scCAqbHAgPSBjb250ZXh0OwoKCWF0b21pY19sb25n X2luYygmc3RhdF9jaGFpbl9zdGVwcyk7CgkvKiBtY3IyMGE6IHJlYWRzIGxwLT5yZWdfZGF0YVsw XSAmIGxwLT5yeF9idWYgLi4uICovCglwcl9pbmZvX3JhdGVsaW1pdGVkKCJDSEFJTjogcnhfYnVm X2NvbXBsZXRlIGRlcmVmcyBscD0lcHggcnhfYnVmWzBdPSUwMnggbHFpPSUwMnhcbiIsCgkJCSAg ICBscCwgbHAtPnJ4X2J1ZlswXSwgbHAtPnJ4X2xxaSk7CglscC0+Y2hhaW5fYnVzeSA9IDA7CS8q IG1jcjIwYTogY2hhaW4gZW5kID09IElSUSByZS1lbmFibGVkICovCgltY3JzaW1fcmVxdWVzdF9y eChscCk7Cn0KCnN0YXRpYyB2b2lkIG1jcnNpbV9yeF9yZWFkX2xlbl9jb21wbGV0ZSh2b2lkICpj b250ZXh0KQp7CglzdHJ1Y3QgbWNyc2ltX2xwICpscCA9IGNvbnRleHQ7CglpbnQgcmV0OwoKCWF0 b21pY19sb25nX2luYygmc3RhdF9jaGFpbl9zdGVwcyk7CglscC0+cnhfeGJ1Zi5sZW4gPSBscC0+ cmVnX2RhdGFbMF0gJiAweDFmOwoJcmV0ID0gc3BpX2FzeW5jKGxwLT5zcGksICZscC0+cnhfYnVm X21zZyk7CglpZiAocmV0KQoJCXByX2Vycl9yYXRlbGltaXRlZCgicnggYnVmIHN1Ym1pdCByZXQ9 JWRcbiIsIHJldCk7Cn0KCnN0YXRpYyB2b2lkIG1jcnNpbV9oYW5kbGVfcngoc3RydWN0IG1jcnNp bV9scCAqbHApCnsKCWF0b21pY19sb25nX2luYygmc3RhdF9jaGFpbl9zdGVwcyk7CglscC0+cmVn X21zZy5jb21wbGV0ZSA9IG1jcnNpbV9yeF9yZWFkX2xlbl9jb21wbGV0ZTsKCWxwLT5yZWdfY21k ID0gREFSX1JYX0ZSTV9MRU47CglscC0+cmVnX3hkYXRhLmxlbiA9IDE7CglzcGlfYXN5bmMobHAt PnNwaSwgJmxwLT5yZWdfbXNnKTsKfQoKc3RhdGljIHZvaWQgbWNyc2ltX2lycV9jbGVhbl9jb21w bGV0ZSh2b2lkICpjb250ZXh0KQp7CglzdHJ1Y3QgbWNyc2ltX2xwICpscCA9IGNvbnRleHQ7CgoJ YXRvbWljX2xvbmdfaW5jKCZzdGF0X2NoYWluX3N0ZXBzKTsKCS8qIG1jcjIwYTogcmVhZHMgbHAt PmlycV9kYXRhLCBlbmFibGVfaXJxKCksIGRpc3BhdGNoZXMgKi8KCXByX2luZm9fcmF0ZWxpbWl0 ZWQoIkNIQUlOOiBpcnFfY2xlYW5fY29tcGxldGUgZGVyZWZzIGxwPSVweCBpcnFfZGF0YT0lMDJ4 ICUwMnhcbiIsCgkJCSAgICBscCwgbHAtPmlycV9kYXRhWzBdLCBscC0+aXJxX2RhdGFbMV0pOwoJ bWNyc2ltX2hhbmRsZV9yeChscCk7Cn0KCnN0YXRpYyB2b2lkIG1jcnNpbV9pcnFfc3RhdHVzX2Nv bXBsZXRlKHZvaWQgKmNvbnRleHQpCnsKCXN0cnVjdCBtY3JzaW1fbHAgKmxwID0gY29udGV4dDsK CWludCByZXQ7CgoJYXRvbWljX2xvbmdfaW5jKCZzdGF0X2NoYWluX3N0ZXBzKTsKCS8qIG1jcjIw YV9pcnFfc3RhdHVzX2NvbXBsZXRlOiBhc3luYyByZWdtYXAgd3JpdGUgKyByZXN1Ym1pdCByZWdf bXNnICovCglhdG9taWNfbG9uZ19pbmMoJnN0YXRfYXN5bmNfY2FsbHMpOwoJcmVnbWFwX3VwZGF0 ZV9iaXRzX2FzeW5jKGxwLT5yZWdtYXAsIERBUl9QSFlfQ1RSTDEsIDB4MWYsIDB4MDApOwoKCWxw LT5yZWdfbXNnLmNvbXBsZXRlID0gbWNyc2ltX2lycV9jbGVhbl9jb21wbGV0ZTsKCWxwLT5yZWdf Y21kID0gREFSX0lSUV9TVFMxOwoJbHAtPnJlZ19kYXRhWzBdID0gbHAtPmlycV9kYXRhWzBdOwoJ bHAtPnJlZ19kYXRhWzFdID0gbHAtPmlycV9kYXRhWzFdOwoJbHAtPnJlZ194ZGF0YS5sZW4gPSAy OwoJcmV0ID0gc3BpX2FzeW5jKGxwLT5zcGksICZscC0+cmVnX21zZyk7CglpZiAocmV0KQoJCXBy X2Vycl9yYXRlbGltaXRlZCgiaXJxIGNsZWFuIHN1Ym1pdCByZXQ9JWRcbiIsIHJldCk7Cn0KCnN0 YXRpYyB2b2lkIG1jcnNpbV9pcnFfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKewoJc3Ry dWN0IG1jcnNpbV9scCAqbHAgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1jcnNpbV9scCwgc2lt X2lycS53b3JrKTsKCglpZiAoIWxwLT5hbGl2ZSkKCQlyZXR1cm47CglzY2hlZHVsZV9kZWxheWVk X3dvcmsoJmxwLT5zaW1faXJxLCBtc2Vjc190b19qaWZmaWVzKGlycV9wZXJpb2RfbXMpKTsKCWlm IChscC0+Y2hhaW5fYnVzeSkKCQlyZXR1cm47CS8qIGhhcmR3YXJlIElSUS1saW5lIGdhdGluZyBh bmFsb2cgKi8KCWxwLT5jaGFpbl9idXN5ID0gMTsKCWxwLT5pcnFfaGRyID0gMHg4MCB8IERBUl9J UlFfU1RTMTsKCWF0b21pY19sb25nX2luYygmc3RhdF9pcnFfc3VibWl0KTsKCWlmIChzcGlfYXN5 bmMobHAtPnNwaSwgJmxwLT5pcnFfbXNnKSkKCQlscC0+Y2hhaW5fYnVzeSA9IDA7Cn0KCi8qIC0t LS0gcHJvYmUgLyByZW1vdmU6IHRoZSBtY3IyMGEgbGlmZWN5Y2xlLCB1bm1vZGlmaWVkIHNoYXBl IC0tLS0tLS0tICovCgpzdGF0aWMgYm9vbCBtY3JzaW1fdm9sYXRpbGUoc3RydWN0IGRldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQp7CgkvKiBtY3IyMGFfZGFyX3ZvbGF0aWxlKCk6IG9ubHkg dGhlIElSUSBzdGF0dXMgcmVncyBhcmUgdm9sYXRpbGUgKi8KCXN3aXRjaCAocmVnKSB7CgljYXNl IERBUl9JUlFfU1RTMToKCQlyZXR1cm4gdHJ1ZTsKCWRlZmF1bHQ6CgkJcmV0dXJuIGZhbHNlOwoJ fQp9CgpzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbWNyc2ltX3JlZ21hcF9jZmcg PSB7CgkucmVnX2JpdHMgPSA4LAoJLnZhbF9iaXRzID0gOCwKCS5jYWNoZV90eXBlID0gUkVHQ0FD SEVfTUFQTEUsCS8qIG1jcjIwYSB1c2VzIFJFR0NBQ0hFX01BUExFICovCgkudm9sYXRpbGVfcmVn ID0gbWNyc2ltX3ZvbGF0aWxlLAp9OwoKc3RhdGljIGludCBtY3JzaW1fcHJvYmUoc3RydWN0IHNw aV9kZXZpY2UgKnNwaSkKewoJc3RydWN0IG1jcnNpbV9scCAqbHA7CgoJbHAgPSBremFsbG9jKHNp emVvZigqbHApLCBHRlBfS0VSTkVMKTsKCWlmICghbHApCgkJcmV0dXJuIC1FTk9NRU07CglscC0+ c3BpID0gc3BpOwoJbHAtPmFsaXZlID0gMTsKCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGxwKTsKCgls cC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9zcGkoc3BpLCAmbWNyc2ltX3JlZ21hcF9jZmcp OwoJaWYgKElTX0VSUihscC0+cmVnbWFwKSkgewoJCWtmcmVlKGxwKTsKCQlyZXR1cm4gUFRSX0VS UihscC0+cmVnbWFwKTsKCX0KCgkvKgoJICogbWNyMjBhX3N0YXJ0KCkvbWNyMjBhX3BoeV9pbml0 KCkgd3JpdGUgREFSX1BIWV9DVFJMMSBmcm9tIHByb2Nlc3MKCSAqIGNvbnRleHQgYmVmb3JlIHRo ZSBJUlEgY2hhaW4gZXZlciBydW5zOyB0aGlzIGFsc28gcHJpbWVzIHRoZQoJICogcmVnbWFwIGNh Y2hlIHNvIHRoZSBjaGFpbidzIHVwZGF0ZV9iaXRzX2FzeW5jKCkgcmVhZHMgbmV2ZXIgZmFsbAoJ ICogYmFjayB0byBhIGJ1cyByZWFkIGZyb20gY29tcGxldGlvbiBjb250ZXh0LgoJICovCglyZWdt YXBfdXBkYXRlX2JpdHMobHAtPnJlZ21hcCwgREFSX1BIWV9DVFJMMSwgMHgxZiwgMHgwMCk7CgoJ c2V0dXBfbWVzc2FnZXMobHApOwoJSU5JVF9ERUxBWUVEX1dPUksoJmxwLT5zaW1faXJxLCBtY3Jz aW1faXJxX3dvcmtmbik7CgoJcHJfaW5mbygicHJvYmU6IHNwaT0lcHggbHA9JXB4IHJlZ21hcD0l cHggKGNoYWluIGluaXRpYXRvciBwZXJpb2Q9JWRtcyB4ZmVyX2RlbGF5PSVkbXMpXG4iLAoJCXNw aSwgbHAsIGxwLT5yZWdtYXAsIGlycV9wZXJpb2RfbXMsIHhmZXJfZGVsYXlfbXMpOwoJc2NoZWR1 bGVfZGVsYXllZF93b3JrKCZscC0+c2ltX2lycSwgbXNlY3NfdG9famlmZmllcyhpcnFfcGVyaW9k X21zKSk7CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgbWNyc2ltX3JlbW92ZShzdHJ1Y3Qgc3Bp X2RldmljZSAqc3BpKQp7CglzdHJ1Y3QgbWNyc2ltX2xwICpscCA9IHNwaV9nZXRfZHJ2ZGF0YShz cGkpOwoKCXByX2luZm8oInJlbW92ZSBFTlRFUjogbHA9JXB4IHJlZ21hcD0lcHggKG1jcjIwYSBz aGFwZTogc3luYyB3cml0ZSArIHN0b3AgaW5pdGlhdG9yICsga2ZyZWUsIE5PIGNoYWluIGRyYWlu KVxuIiwKCQlscCwgbHAtPnJlZ21hcCk7CgoJLyogbWNyMjBhX3N0b3AgYW5hbG9nOiBvbmUgU1lO QyByZWdtYXAgd3JpdGUgKHNwaV9zeW5jKSAuLi4gKi8KCXJlZ21hcF91cGRhdGVfYml0cyhscC0+ cmVnbWFwLCBEQVJfUEhZX0NUUkwxLCAweDFmLCAweDAwKTsKCS8qIC4uLiBhbmQgc3RvcCB0aGUg SVJRIGluaXRpYXRvciAoZGlzYWJsZV9pcnEgYW5hbG9nKSAqLwoJbHAtPmFsaXZlID0gMDsKCWNh bmNlbF9kZWxheWVkX3dvcmtfc3luYygmbHAtPnNpbV9pcnEpOwoKCS8qIG1jcjIwYV9yZW1vdmUg YW5hbG9nOiBpZWVlODAyMTU0X2ZyZWVfaHcgLT4ga2ZyZWUgb2YgdGhlIHNpbmdsZQoJICogYWxs b2NhdGlvbi4gIFRoZSBpbi1mbGlnaHQgY2hhaW4gaXMgTk9UIHdhaXRlZCBmb3IgKHRoZSBidWcp LiAqLwoJa2ZyZWUobHApOwoKCXByX2luZm8oInJlbW92ZSBET05FOiBscCBmcmVlZDsgYW55IHF1 ZXVlZC9jb21wbGV0aW5nIGNoYWluIG1lc3NhZ2VzIG5vdyBkZXJlZmVyZW5jZSBmcmVlZCBtZW1v cnk7IGRldm0gcmVnbWFwX2V4aXQgZm9sbG93cyB2aWEgZGV2cmVzXG4iKTsKfQoKc3RhdGljIGNv bnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIG1jcnNpbV9pZHNbXSA9IHsKCXsgIm1jcnNpbSIgfSwK CXsgfQp9OwpNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgbWNyc2ltX2lkcyk7CgpzdGF0aWMgc3Ry dWN0IHNwaV9kcml2ZXIgbWNyc2ltX2RyaXZlciA9IHsKCS5kcml2ZXIgPSB7CgkJLm5hbWUgPSAi bWNyc2ltIiwKCX0sCgkucHJvYmUgPSBtY3JzaW1fcHJvYmUsCgkucmVtb3ZlID0gbWNyc2ltX3Jl bW92ZSwKCS5pZF90YWJsZSA9IG1jcnNpbV9pZHMsCn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogYWN0 aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLwoKc3RhdGljIGNoYXIgYWN0aW9uX2NtZFs2NF07CgpzdGF0aWMgaW50IHhtaXRf bG9vcHMgPSAyMDA7CnN0YXRpYyBpbnQgeG1pdF9pbnRlcnZhbF91cyA9IDEwMDA7CgpzdGF0aWMg aW50IHhtaXRfdGhyZWFkKHZvaWQgKmRhdGEpCnsKCXN0cnVjdCBtY3JzaW1fbHAgKmxwID0gZGF0 YTsKCWludCBpOwoKCXByX2luZm8oIlhNSVQ6IGt0aHJlYWQgcnVubmluZyBtY3IyMGFfeG1pdC1z aGFwZWQgYm9keSAlZCB0aW1lcywgaW50ZXJ2YWw9JWR1cywgcmVnX21zZz0lcHhcbiIsCgkJeG1p dF9sb29wcywgeG1pdF9pbnRlcnZhbF91cywgJmxwLT5yZWdfbXNnKTsKCWZvciAoaSA9IDA7IGkg PCB4bWl0X2xvb3BzICYmICFrdGhyZWFkX3Nob3VsZF9zdG9wKCk7IGkrKykgewoJCS8qID09IG1j cjIwYV94bWl0KCkgYm9keTogdW5sb2NrZWQgcmVmaWxsICsgc3VibWl0IG9mIHRoZQoJCSAqIFNB TUUgbHAtPnJlZ19tc2cgdGhhdCB0aGUgSVJRIGNoYWluIGFsc28gdXNlcyAqLwoJCWxwLT5yZWdf bXNnLmNvbXBsZXRlID0gTlVMTDsKCQlscC0+cmVnX2NtZCA9IERBUl9QSFlfQ1RSTDE7CgkJbHAt PnJlZ19kYXRhWzBdID0gMHgwMDsJCS8qIFhDVlNFUV9JRExFICovCgkJbHAtPnJlZ194ZGF0YS5s ZW4gPSAxOwoJCWF0b21pY19sb25nX2luYygmc3RhdF94bWl0KTsKCQlzcGlfYXN5bmMobHAtPnNw aSwgJmxwLT5yZWdfbXNnKTsKCQl1c2xlZXBfcmFuZ2UoeG1pdF9pbnRlcnZhbF91cywgeG1pdF9p bnRlcnZhbF91cyArIDEwMCk7Cgl9Cglwcl9pbmZvKCJYTUlUOiBrdGhyZWFkIGRvbmUgYWZ0ZXIg JWQgc3VibWl0c1xuIiwgaSk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGF0b21pY190IHN5bmNwcm9i ZV9kb25lID0gQVRPTUlDX0lOSVQoMCk7CnN0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIHN5bmNw cm9iZV93ZDsKCnN0YXRpYyBpbnQgc3luY3Byb2JlX3J1bih2b2lkICpkYXRhKQp7CglzdHJ1Y3Qg bWNyc2ltX2xwICpscCA9IGRhdGE7CgoJcHJfaW5mbygiU1lOQ1BST0JFOiBpc3N1aW5nIG9uZSBT WU5DIHJlZ21hcCBvcCAoaGFuZyA9IG9ycGhhbmVkLW1lc3NhZ2UgZXZpZGVuY2UpXG4iKTsKCXJl Z21hcF91cGRhdGVfYml0cyhscC0+cmVnbWFwLCAweDExLCAweGZmLCAweDU1KTsKCWF0b21pY19z ZXQoJnN5bmNwcm9iZV9kb25lLCAxKTsKCXByX2luZm8oIlNZTkNQUk9CRTogQ09NUExFVEVEIChx dWV1ZSBzdGlsbCBmdW5jdGlvbmFsKVxuIik7CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgc3lu Y3Byb2JlX3dhdGNoZG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKewoJaWYgKCFhdG9taWNfcmVh ZCgmc3luY3Byb2JlX2RvbmUpKQoJCXByX2VycigiU1lOQ1BST0JFLUhVTkc6IHN5bmMgcmVnbWFw IG9wIGRpZCBOT1QgY29tcGxldGUgd2l0aGluIDVzIC0+IG1lc3NhZ2Ugb3JwaGFuZWQgYnkgcXVl dWUgY29ycnVwdGlvbiAoTi0xIG91dGNvbWUgMSlcbiIpOwoJZWxzZQoJCXByX2luZm8oIlNZTkNQ Uk9CRS1XRDogb3AgZmluaXNoZWQgaW4gdGltZVxuIik7Cn0KCnN0YXRpYyB2b2lkIGFjdGlvbl93 b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3KQp7CgljaGFyIGNtZFs2NF07CgljaGFyICpwLCAq Y3A7Cglsb25nIG4gPSAwOwoKCXN0cnNjcHkoY21kLCBzdHJzdHJpcChhY3Rpb25fY21kKSwgc2l6 ZW9mKGNtZCkpOwoJY3AgPSBjbWQ7CglwID0gc3Ryc2VwKCZjcCwgIiAiKTsKCWlmIChjcCAmJiBj cFswXSAmJiBrc3RydG9sKGNwLCAwLCAmbikpCgkJbiA9IDA7CgoJaWYgKCFzdHJjbXAocCwgInJ1 biIpKSB7CgkJbXNsZWVwKG4gPyBuIDogMTAwMCk7CgkJcHJfaW5mbygicnVuOiBzbGVwdCAlbGRt c1xuIiwgbiA/IG4gOiAxMDAwKTsKCX0gZWxzZSBpZiAoIXN0cmNtcChwLCAieG1pdCIpKSB7CgkJ c3RydWN0IHRhc2tfc3RydWN0ICp0OwoKCQlpZiAoY3AgJiYgY3BbMF0pIHsKCQkJY2hhciAqcTsK CQkJbG9uZyB2OwoKCQkJaWYgKCFrc3RydG9sKHN0cnNlcCgmY3AsICIgIiksIDAsICZ2KSkKCQkJ CXhtaXRfbG9vcHMgPSAoaW50KXY7CgkJCXEgPSBjcDsKCQkJaWYgKHEgJiYgcVswXSAmJiAha3N0 cnRvbChxLCAwLCAmdikpCgkJCQl4bWl0X2ludGVydmFsX3VzID0gKGludCl2OwoJCX0KCQlpZiAo IWdfc3BpZGV2KSB7CgkJCXByX2VycigieG1pdDogbm8gc3BpIGRldmljZVxuIik7CgkJCWdvdG8g b3V0OwoJCX0KCQl0ID0ga3RocmVhZF9ydW4oeG1pdF90aHJlYWQsIHNwaV9nZXRfZHJ2ZGF0YShn X3NwaWRldiksICJtY3JzaW1feG1pdCIpOwoJCWlmIChJU19FUlIodCkpCgkJCXByX2VycigieG1p dDoga3RocmVhZCBmYWlsZWRcbiIpOwoJfSBlbHNlIGlmICghc3RyY21wKHAsICJzeW5jcHJvYmUi KSkgewoJCWlmICghZ19zcGlkZXYpIHsKCQkJcHJfZXJyKCJzeW5jcHJvYmU6IG5vIHNwaSBkZXZp Y2VcbiIpOwoJCQlnb3RvIG91dDsKCQl9CgkJYXRvbWljX3NldCgmc3luY3Byb2JlX2RvbmUsIDAp OwoJCUlOSVRfREVMQVlFRF9XT1JLKCZzeW5jcHJvYmVfd2QsIHN5bmNwcm9iZV93YXRjaGRvZyk7 CgkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzeW5jcHJvYmVfd2QsIG1zZWNzX3RvX2ppZmZpZXMo NTAwMCkpOwoJCXsKCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0OwoKCQkJdCA9IGt0aHJlYWRfcnVu KHN5bmNwcm9iZV9ydW4sIHNwaV9nZXRfZHJ2ZGF0YShnX3NwaWRldiksICJtY3JzaW1fc3luY3Ai KTsKCQkJaWYgKElTX0VSUih0KSkKCQkJCXByX2Vycigic3luY3Byb2JlOiBrdGhyZWFkIGZhaWxl ZFxuIik7CgkJfQoJfSBlbHNlIGlmICghc3RyY21wKHAsICJzdGF0dXMiKSkgewoJCXByX2luZm8o InN0YXR1czogbXNncz0lbGQgZGVsYXllZF9tc2dzKHN0YWxsZWQpPSVsZCBpcnFfc3VibWl0cz0l bGQgY2hhaW5fc3RlcHM9JWxkIHhtaXRfc3VibWl0cz0lbGQgcmVnbWFwX2FzeW5jPSVsZFxuIiwK CQkJYXRvbWljX2xvbmdfcmVhZCgmc3RhdF9tc2dzKSwKCQkJYXRvbWljX2xvbmdfcmVhZCgmc3Rh dF9kZWxheWVkKSwKCQkJYXRvbWljX2xvbmdfcmVhZCgmc3RhdF9pcnFfc3VibWl0KSwKCQkJYXRv bWljX2xvbmdfcmVhZCgmc3RhdF9jaGFpbl9zdGVwcyksCgkJCWF0b21pY19sb25nX3JlYWQoJnN0 YXRfeG1pdCksCgkJCWF0b21pY19sb25nX3JlYWQoJnN0YXRfYXN5bmNfY2FsbHMpKTsKCX0gZWxz ZSB7CgkJcHJfaW5mbygidW5rbm93biBhY3Rpb24gJyVzJ1xuIiwgcCk7Cgl9Cm91dDoKCXByX2lu Zm8oIkFDVElPTl9DT01QTEVURVxuIik7Cn0KCnN0YXRpYyBERUNMQVJFX1dPUksoYWN0aW9uX3dv cmssIGFjdGlvbl93b3JrZm4pOwoKc3RhdGljIGludCBhY3Rpb25fc2V0KGNvbnN0IGNoYXIgKnZh bCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCnsKCWludCByZXQgPSBwYXJhbV9zZXRf Y29weXN0cmluZyh2YWwsIGtwKTsKCglpZiAocmV0ID09IDApCgkJc2NoZWR1bGVfd29yaygmYWN0 aW9uX3dvcmspOwoJcmV0dXJuIHJldDsKfQoKc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFy YW1fb3BzIGFjdGlvbl9vcHMgPSB7Cgkuc2V0ID0gYWN0aW9uX3NldCwKCS5nZXQgPSBwYXJhbV9n ZXRfc3RyaW5nLAp9OwpzdGF0aWMgc3RydWN0IGtwYXJhbV9zdHJpbmcgYWN0aW9uX3BhcmFtID0g ewoJLm1heGxlbiA9IHNpemVvZihhY3Rpb25fY21kKSwKCS5zdHJpbmcgPSBhY3Rpb25fY21kLAp9 Owptb2R1bGVfcGFyYW1fY2IoYWN0aW9uLCAmYWN0aW9uX29wcywgJmFjdGlvbl9wYXJhbSwgMDIw MCk7Ck1PRFVMRV9QQVJNX0RFU0MoYWN0aW9uLCAicnVuIDxtcz4gfCB4bWl0IDxuPiA8dXM+IHwg c3luY3Byb2JlIHwgc3RhdHVzIik7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogbW9kdWxlIGluaXQ6IGZh a2UgY29udHJvbGxlciArIHNsYXZlIGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAqLwoK c3RhdGljIGludCBfX2luaXQgbWNyc2ltX2luaXQodm9pZCkKewoJc3RydWN0IG1jcnNpbV9jdHJs ICpjOwoJc3RydWN0IHNwaV9ib2FyZF9pbmZvIGluZm87CglpbnQgcmV0OwoKCXJldCA9IHNwaV9y ZWdpc3Rlcl9kcml2ZXIoJm1jcnNpbV9kcml2ZXIpOwoJaWYgKHJldCkKCQlyZXR1cm4gcmV0OwoK CWMgPSBremFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOwoJaWYgKCFjKSB7CgkJcmV0ID0g LUVOT01FTTsKCQlnb3RvIGVycl9kcnY7Cgl9CgljLT5wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3Jl Z2lzdGVyX3NpbXBsZSgibWNyc2ltLWN0cmwiLCAtMSwgTlVMTCwgMCk7CglpZiAoSVNfRVJSKGMt PnBkZXYpKSB7CgkJcmV0ID0gUFRSX0VSUihjLT5wZGV2KTsKCQlnb3RvIGVycl9mcmVlOwoJfQoK CWMtPmN0bHIgPSBzcGlfYWxsb2NfaG9zdCgmYy0+cGRldi0+ZGV2LCAwKTsKCWlmICghYy0+Y3Rs cikgewoJCXJldCA9IC1FTk9NRU07CgkJZ290byBlcnJfcGRldjsKCX0KCWMtPmN0bHItPmJ1c19u dW0gPSAtMTsKCWMtPmN0bHItPm51bV9jaGlwc2VsZWN0ID0gU0lNX0NTX01BWDsKCWMtPmN0bHIt Pm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfQ1NfSElHSCB8IFNQSV9MU0Jf RklSU1Q7CgljLT5jdGxyLT50cmFuc2Zlcl9vbmVfbWVzc2FnZSA9IG1jcnNpbV90cmFuc2Zlcl9v bmVfbWVzc2FnZTsKCXNwaV9jb250cm9sbGVyX3NldF9kZXZkYXRhKGMtPmN0bHIsIGMpOwoKCXJl dCA9IHNwaV9yZWdpc3Rlcl9jb250cm9sbGVyKGMtPmN0bHIpOwoJaWYgKHJldCkKCQlnb3RvIGVy cl9jdGxyOwoJZ19jdHJsID0gYzsKCgltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Cglz dHJzY3B5KGluZm8ubW9kYWxpYXMsICJtY3JzaW0iLCBzaXplb2YoaW5mby5tb2RhbGlhcykpOwoJ aW5mby5idXNfbnVtID0gYy0+Y3Rsci0+YnVzX251bTsKCWluZm8uY2hpcF9zZWxlY3QgPSAwOwoJ aW5mby5tYXhfc3BlZWRfaHogPSAxMDAwMDAwOwoJaW5mby5tb2RlID0gU1BJX01PREVfMDsKCgln X3NwaWRldiA9IHNwaV9uZXdfZGV2aWNlKGMtPmN0bHIsICZpbmZvKTsKCWlmICghZ19zcGlkZXYp IHsKCQlwcl9lcnIoInNwaV9uZXdfZGV2aWNlIGZhaWxlZFxuIik7CgkJcmV0ID0gLUVOT0RFVjsK CQlnb3RvIGVycl9jdHJsX3JlZzsKCX0KCglwcl9pbmZvKCJpbml0OiBjb250cm9sbGVyIGJ1c19u dW09JWQgZGV2aWNlPSVzICh1bmJpbmQ6IGVjaG8gJXMgPiAvc3lzL2J1cy9zcGkvZHJpdmVycy9t Y3JzaW0vdW5iaW5kKVxuIiwKCQljLT5jdGxyLT5idXNfbnVtLCBkZXZfbmFtZSgmZ19zcGlkZXYt PmRldiksIGRldl9uYW1lKCZnX3NwaWRldi0+ZGV2KSk7CglyZXR1cm4gMDsKCmVycl9jdHJsX3Jl ZzoKCXNwaV91bnJlZ2lzdGVyX2NvbnRyb2xsZXIoYy0+Y3Rscik7CglnX2N0cmwgPSBOVUxMOwpl cnJfY3RscjoKCXNwaV9jb250cm9sbGVyX3B1dChjLT5jdGxyKTsKZXJyX3BkZXY6CglwbGF0Zm9y bV9kZXZpY2VfdW5yZWdpc3RlcihjLT5wZGV2KTsKZXJyX2ZyZWU6CglrZnJlZShjKTsKZXJyX2Ry djoKCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbWNyc2ltX2RyaXZlcik7CglyZXR1cm4gcmV0Owp9 CgpzdGF0aWMgdm9pZCBfX2V4aXQgbWNyc2ltX2V4aXQodm9pZCkKewoJaWYgKGdfc3BpZGV2KSB7 CgkJc3BpX3VucmVnaXN0ZXJfZGV2aWNlKGdfc3BpZGV2KTsKCQlnX3NwaWRldiA9IE5VTEw7Cgl9 CglpZiAoZ19jdHJsKSB7CgkJc3BpX3VucmVnaXN0ZXJfY29udHJvbGxlcihnX2N0cmwtPmN0bHIp OwoJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdfY3RybC0+cGRldik7CgkJa2ZyZWUoZ19j dHJsKTsKCQlnX2N0cmwgPSBOVUxMOwoJfQoJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZtY3JzaW1f ZHJpdmVyKTsKCXByX2luZm8oInJlbW92ZWRcbiIpOwp9Cgptb2R1bGVfaW5pdChtY3JzaW1faW5p dCk7Cm1vZHVsZV9leGl0KG1jcnNpbV9leGl0KTsKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpNT0RV TEVfREVTQ1JJUFRJT04oIkhWLTIvTi0xIHZlcmlmaWNhdGlvbjogbWNyMjBhLXNoYXBlZCBhc3lu YyBTUEkgY2hhaW4gdnMgdW5iaW5kIik7Cg== ------=_Part_280281_1485314978.1792659264993--