From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7B362C4451C for ; Wed, 22 Jul 2026 07:34:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=XgJKfufKYNPRCREqIkkAfEhKO8CBFn+SU/LRyvl+9eY=; b=FvmZrWFz9x0pDW GEUBdF2N47bGzrexIlojyg8DsOrV57EuNqNE7btwk4PCeL0jIGnlWUKcFnDFn0atNOhTGlukT/OdT ZOpzniXo6/QEEOhVYWGRt0/BClVJRQi82J15t0x0p/IkjaIIist6LUF5jFG839hxLhkbqjxYZkEvQ vf2mfTZ3oAljP/fnkR/UBjhGxKRp6oX11xB2EwqVf2gNynqWMuplg2sOjKNDGOun22y6Owc3zTJaH DWBV9ACjjYrCRwO7WIp389bkJNW5IHk+h8be/UhoSr8h/VV1ZxcpM+o1tvL4yDRh6Nyat6teMQsWN hnciUKNy08OwgniCxZKA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wmRTe-0000000B4q0-1GZN; Wed, 22 Jul 2026 07:34:50 +0000 Received: from flow-b2-smtp.messagingengine.com ([202.12.124.137]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wmRTX-0000000B4lP-0DVm; Wed, 22 Jul 2026 07:34:46 +0000 Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailflow.stl.internal (Postfix) with ESMTP id 113AF130009C; Wed, 22 Jul 2026 03:34:42 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Wed, 22 Jul 2026 03:34:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gahingwoo.com; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm1; t=1784705681; x=1784709281; bh=B9oQwDZX21l161TFqLZTDth4Aqx0xSWM rUtC7vBV6JU=; b=c83TSdqi0NTi+jkbBtjCpFzBRwyy16SBHuyqEKwun0Xh+cS1 q2l7yqK4OA33Bksks4m+uh3JW46ctzS9ICqRAHV2RJmiqrr1hh6WYyqW6f9qGpUk FM12LgP/us222oWzUKkZmWrOXQFRs7Qc8ND+Qw53+EHAH+6Ci1C57NXZnTGFC1K1 oUZy6RnX1vK4seDUxipNBEh3ESo+TDKVIkabQ5pZXF3q9oQCO1nWZAMorhPxAS1p Un4ZWU+lw/vMGR2SqpWML77lAKKXxi7eW3rXYSbky7EH4dw68NyjvJxtiQJWCtW1 1GthzjhT2L3ve0Aq2KRb4+rHf+RpruTKLX/P7w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1784705681; x= 1784709281; bh=B9oQwDZX21l161TFqLZTDth4Aqx0xSWMrUtC7vBV6JU=; b=P 0pZeW5CT04Ozwk2awKy8cuVlkoweRxnS5cONOfh4iHzkPTv0DrllwBXNuEIJ073x QA6hUkVpm+LMt1TYCB/qz3HigobJglk2YjHh8RaE9ddSflmQfX936vO9LdOL7Cvy WIKLz4RF+EPu8NYeeIENUbbX6fKcMUhhBpOtf3iJkeJpWKtOGAAOQ3x3aDVkTmgb QfRUf5WLdUPmyWHdQFSgc+s8aYzV6DjQ0XRwz/GYSxSqZVlnNsAXwjetPG9JVj33 OMoIQ7mySMOcOCXY9GsBq0mif3JarPTINmuO+wBVdi6hsaQWq6iC+yv9DhO2pDi2 s+B0H+Egp9nbd8C77dWYQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTEto4wZzesSWKRFBeaZw0rExF6mpmHpZ3b8SIYnwNWqpgEgXrpakBLUc5zmwxSVbF phaJxpux4sa/YkXXtAW2Ik/3zzRl+qRcWarjsmPTO345pZkQEw/HiwezHulv0MmjNheVoa bOEMk3tPdhsiIuzv1zMrw6GGZXJVbACq+dzZc+20GPlKaX8xiRTR6n3JjiP8f7r5mNd5X3 AWVrbgAt6k+2Deng+sOLBAAGfRL2xsFhQBxqagM7hSCQcXOrREwNPaDYPLwL4b2AW+ytMY 8+pHpr3vxQONiVf2BKGMaUxyhnvbCxdJyyEyL/Zh/4JjBZgdxQr0qBVbX7t6tULYg4J0jX DY/ODeS7JpXWCY1az19lmWDZ9p7QvFVs/BXbqLwodG/M7wavHn8VdhmYGurpO96pfhWQuA rW1kdLT38H/mWa63bxIYQHh/ZofTIBJSpNugRReJtxqqX6OF46vx/6fE+TCx1dYofvSqqX eRyZmFLsBOU7FIgTu+ecjLjr/hEJQH0itrjaMsc9Yn0/LgzqcNj+J0b7uFJgjXtho4aQ3q vYDCCMelcvDu4YRg5v6QwSF98K3oYfqbVZOGzx54JJkpb+zU2Nv9fkBiV7z9gpcFGsBIRt n7hc5Tf10h7KFofEyCcXEMenPqkmxlPv0Ej3BRRbC6sVnl9YH8o8FIFtc+qw X-ME-Proxy: Feedback-ID: i7a5e4b5f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 22 Jul 2026 03:34:36 -0400 (EDT) From: Jiaxing Hu To: mchehab@kernel.org, heiko@sntech.de, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, nicolas.dufresne@collabora.com Cc: ezequiel@vanguardiasur.com.ar, linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Jiaxing Hu Subject: [RFC PATCH 2/3] media: rockchip: add VEPU510 H.264 encoder driver for RK3576 Date: Wed, 22 Jul 2026 19:34:16 +1200 Message-ID: <20260722073417.2064667-3-gahing@gahingwoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260722073417.2064667-1-gahing@gahingwoo.com> References: <20260722073417.2064667-1-gahing@gahingwoo.com> MIME-Version: 1.0 X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org QWRkIGEgZnJvbS1zY3JhdGNoIHN0YXRlZnVsIFY0TDIgbWVtMm1lbSBkcml2ZXIgZm9yIHRoZSBS b2NrY2hpcCBSSzM1NzYKVkVQVTUxMCBILjI2NCBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChyYXcg TlYxMiBpbiwgSC4yNjQgQW5uZXgtQiBvdXQpLAptb2RlbGxlZCBvbiB0aGUgdmVyaXNpbGljb24v aGFudHJvIGRldmljZV9ydW4oKS9jb2RlY19vcHMgc3BsaXQgcmF0aGVyCnRoYW4gdGhlIGRvd25z dHJlYW0gTVBQLXNlcnZpY2UvdGFzay1xdWV1ZSBtb2RlbC4KClRoZSB0d28gZW5jb2RlciBjb3Jl cyAocmt2ZW5jMC9ya3ZlbmMxKSBhcmUgZXhwb3NlZCBhcyB0d28gaW5kZXBlbmRlbnQKVjRMMiBN Mk0gZGV2aWNlIG5vZGVzLCBlYWNoIGRyaXZpbmcgb25lIHBoeXNpY2FsIGNvcmUgc3RhbmRhbG9u ZTsgdGhlCmRvd25zdHJlYW0gdmVuZG9yIENDVSBjcm9zcy1jb3JlIGxvYWQtYmFsYW5jaW5nIGlz IG5vdCBpbXBsZW1lbnRlZC4KClJlZ2lzdGVyIGZpZWxkIHNlbWFudGljcyB3ZXJlIHdvcmtlZCBv dXQgYnkgdHJpYWwtYW5kLWVycm9yIGFnYWluc3QKUm9ja2NoaXAncyBvd24gb3Blbi1zb3VyY2Ug dXNlcnNwYWNlIGNvZGVjIGxpYnJhcnkgKHJvY2tjaGlwLWxpbnV4L21wcCkKYW5kIGNyb3NzLWNo ZWNrZWQgYWdhaW5zdCBhIHJlYWwgcmVnaXN0ZXItd3JpdGUgdHJhY2Ugb2YgdGhlIGRvd25zdHJl YW0KdmVuZG9yIHN0YWNrIHJ1bm5pbmcgdGhlIHNhbWUgZW5jb2RlLgoKSW50cmEgKEktZnJhbWUp IGVuY29kaW5nIGlzIGNvbmZpcm1lZCB3b3JraW5nIG9uIHJlYWwgaGFyZHdhcmUgKFJhZHhhClJP Q0sgNEQpOiBpdCBwcm9kdWNlcyB2YWxpZCBILjI2NCB0aGF0IHRoZSByZWZlcmVuY2UgZGVjb2Rl cnMgYWNjZXB0LgpJbnRlciAoUC1mcmFtZSkgZW5jb2Rpbmcgc3RpbGwgaGl0cyBhIGhhcmR3YXJl LXdhdGNoZG9nIHN0YWxsIGluIHRoZQpyZWZlcmVuY2UtcmVhZCBkYXRhcGF0aCAtLSB0aGlzIGlz IHRoZSBtYWluIG9wZW4gcXVlc3Rpb24gZm9yIHRoaXMgUkZDOwpzZWUgdGhlIGNvdmVyIGxldHRl ciBmb3IgdGhlIGZ1bGwgc3ltcHRvbSBhbmFseXNpcy4KClNpZ25lZC1vZmYtYnk6IEppYXhpbmcg SHUgPGdhaGluZ0BnYWhpbmd3b28uY29tPgotLS0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9j a2NoaXAvS2NvbmZpZyAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3JvY2tjaGlwL01ha2VmaWxlICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9yb2NrY2hpcC9ya3ZlbmMvS2NvbmZpZyAgICAgfCAgIDE0ICsKIGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vcm9ja2NoaXAvcmt2ZW5jL01ha2VmaWxlICAgIHwgICAgNiArCiAuLi4vbWVkaWEv cGxhdGZvcm0vcm9ja2NoaXAvcmt2ZW5jL3JrdmVuYy1oMjY0LmMgICB8IDEwOTUgKysrKysrKysr KysrKysrKysrKysKIC4uLi9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9ya3ZlbmMvcmt2ZW5jLXJl Z3MuaCAgIHwgIDkyOSArKysrKysrKysrKysrKysrKwogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9y b2NrY2hpcC9ya3ZlbmMvcmt2ZW5jLmMgICAgfCAgODkyICsrKysrKysrKysrKysrKysKIGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmt2ZW5jL3JrdmVuYy5oICAgIHwgIDIxMiArKysr CiA4IGZpbGVzIGNoYW5nZWQsIDMxNTAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCBiYTQwMWQzMmYuLmU2YWZhNjA5MiAxMDA2NDQKLS0t IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtNiwzICs2LDQgQEAgc291cmNlICJk cml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JnYS9LY29uZmlnIgogc291cmNlICJkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JrY2lmL0tjb25maWciCiBzb3VyY2UgImRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmtpc3AxL0tjb25maWciCiBzb3VyY2UgImRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmt2ZGVjL0tjb25maWciCitzb3VyY2UgImRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmt2ZW5jL0tjb25maWciCmRpZmYgLS1naXQgYS9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9yb2NrY2hpcC9NYWtlZmlsZQppbmRleCAwZTBiMmNiYmQuLjZhMWQ4NDdhMSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9NYWtlZmlsZQorKysgYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL01ha2VmaWxlCkBAIC0zLDMgKzMsNCBAQCBv YmoteSArPSByZ2EvCiBvYmoteSArPSBya2NpZi8KIG9iai15ICs9IHJraXNwMS8KIG9iai15ICs9 IHJrdmRlYy8KK29iai15ICs9IHJrdmVuYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vcm9ja2NoaXAvcmt2ZW5jL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Jv Y2tjaGlwL3JrdmVuYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MC4uY2QyYTljMmViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9y b2NrY2hpcC9ya3ZlbmMvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACisjIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCitjb25maWcgVklERU9fUk9DS0NISVBfVkVQVTUxMAorCXRyaXN0 YXRlICJSb2NrY2hpcCBWRVBVNTEwIFZpZGVvIEVuY29kZXIgZHJpdmVyIgorCWRlcGVuZHMgb24g QVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIFZJREVPX0RFVgorCXNl bGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRworCXNlbGVjdCBWNEwyX01FTTJNRU1fREVWCisJaGVs cAorCSAgU3VwcG9ydCBmb3IgdGhlIFJvY2tjaGlwIFZFUFU1MTAgaGFyZHdhcmUgdmlkZW8gZW5j b2RlciBJUAorCSAgcHJlc2VudCBvbiB0aGUgUkszNTc2IFNvQywgd2hpY2ggYWNjZWxlcmF0ZXMg SC4yNjQgdmlkZW8KKwkgIGVuY29kaW5nLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFz IGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBy b2NrY2hpcC12ZXB1NTEwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2Nr Y2hpcC9ya3ZlbmMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3Jr dmVuYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjMyMmJm MTBhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAv cmt2ZW5jL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAorb2JqLSQoQ09ORklHX1ZJREVPX1JPQ0tDSElQX1ZFUFU1MTApICs9IHJvY2tj aGlwLXZlcHU1MTAubworCityb2NrY2hpcC12ZXB1NTEwLXkgKz0gXAorCQkgICAgICBya3ZlbmMu byBcCisJCSAgICAgIHJrdmVuYy1oMjY0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vcm9ja2NoaXAvcmt2ZW5jL3JrdmVuYy1oMjY0LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL3JvY2tjaGlwL3JrdmVuYy9ya3ZlbmMtaDI2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uNThiNGZiNjViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9yb2NrY2hpcC9ya3ZlbmMvcmt2ZW5jLWgyNjQuYwpAQCAtMCwwICsxLDEwOTUg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogUm9ja2NoaXAg VkVQVTUxMCBILjI2NCBjb2RlYyBiYWNrZW5kLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyNiBK aWF4aW5nIEh1IDxnYWhpbmdAZ2FoaW5nd29vLmNvbT4KKyAqCisgKiBWRVBVNTEwIGVtaXRzIGNv bXBsZXRlIEFubmV4LUIgc2xpY2UgTkFMIHVuaXRzIChuYWxfdW5pdF9oZWFkZXIgKworICogc2xp Y2VfaGVhZGVyICsgc2xpY2VfZGF0YSkgZGlyZWN0bHkgZnJvbSBoYXJkd2FyZSDigJQgdGhlIGV4 dGVuc2l2ZQorICogc3ludF9zbGkwL3N5bnRfc2xpMS9zeW50X3NsaTIvc3ludF9uYWwgcmVnaXN0 ZXIgc2V0IGV4aXN0cyBwcmVjaXNlbHkKKyAqIGJlY2F1c2UgdGhlIHNsaWNlX2hlYWRlcigpIHN5 bnRheCBpcyBnZW5lcmF0ZWQgYnkgdGhlIGhhcmR3YXJlIGZyb20KKyAqIHRob3NlIGZpZWxkcyAo Y3Jvc3MtY2hlY2tlZCBhZ2FpbnN0IHJvY2tjaGlwLWxpbnV4L21wcCdzCisgKiBoYWxfaDI2NGVf dmVwdTUxMC5jLCB3aGljaCBwcm9ncmFtcyB0aGUgaWRlbnRpY2FsIGZpZWxkcyBmcm9tIGl0cyBv d24KKyAqIHNvZnR3YXJlIEgyNjRlU2xpY2UvSDI2NGVQcHMgc3RydWN0cykuIFdoYXQgdGhlIGhh cmR3YXJlIGRvZXMgKm5vdCoKKyAqIGdlbmVyYXRlIGlzIHRoZSBTUFMvUFBTIChwYXJhbWV0ZXIg c2V0cyBhcmUgYSBwZXItc3RyZWFtLCBub3QKKyAqIHBlci1mcmFtZSwgY29uY2VwdCwgYW5kIHBy b2ZpbGVfaWRjL2xldmVsX2lkYy9WVUkgaGF2ZSBubyByZWdpc3RlcgorICogcmVwcmVzZW50YXRp b24gYXQgYWxsKSDigJQgbXBwJ3Mgb3duIGBoMjY0ZV92ZXB1X3N0cmVhbV9hbWVuZF8qYCBzdGFn ZQorICogY29uZmlybXMgcGFyYW1ldGVyIHNldHMgYXJlIGFzc2VtYmxlZCBpbiBzb2Z0d2FyZSBh cm91bmQgdGhlIGhhcmR3YXJlCisgKiBzbGljZSBwYXlsb2FkLCB3aGljaCBpcyBleGFjdGx5IHdo YXQgcmt2ZW5jX2gyNjRfZ2VuX3Nwc19wcHMoKSBiZWxvdworICogZG9lcywgYW5hbG9nb3VzIHRv IHRoZSB1cHN0cmVhbSBoYW50cm8gSlBFRyBlbmNvZGVyIGRyaXZlcidzIHNvZnR3YXJlCisgKiBK RklGIGhlYWRlciBwcmVwZW5kLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorCisj aW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1k bWEtY29udGlnLmg+CisKKyNpbmNsdWRlICJya3ZlbmMuaCIKKyNpbmNsdWRlICJya3ZlbmMtcmVn cy5oIgorCisvKiBTUFMgbG9nMl9tYXhfZnJhbWVfbnVtX21pbnVzNCAvIGxvZzJfbWF4X3BpY19v cmRlcl9jbnRfbHNiX21pbnVzNDogYm90aAorICogZml4ZWQgYXQgNCAoOC1iaXQgZmllbGRzKSBz byBmcmFtZV9udW0vcG9jX2xzYiB3cmFwIHdlbGwgcGFzdCBhbnkgc2FuZQorICogR09QIHNpemUg d2hpbGUgc3RpbGwgZml0dGluZyB0aGUgNC1iaXQgc3ludF9zcHMubWF4X2ZudW0vbXBvY19sbTQK KyAqIGhhcmR3YXJlIGZpZWxkcyAodmFsaWQgcmFuZ2UgMC0xMiBwZXIgc3BlYywgMC0xNSBwZXIg cmVnaXN0ZXIgd2lkdGgpLgorICovCisjZGVmaW5lIFJLVkVOQ19IMjY0X0xPRzJfTUFYX0ZSQU1F X05VTQkJNAorI2RlZmluZSBSS1ZFTkNfSDI2NF9MT0cyX01BWF9QT0NfTFNCCQk0CisKKy8qIFBB UkFNICgweDE3MDAtMHgxOWNjKSBhbmQgU1FJICgweDIwMDAtMHgyMGI4KSBjbGFzcyBjb250ZW50 OiBtcHAncyBvd24KKyAqICpkZWZhdWx0LXR1bmluZy1wcm9maWxlKiBjb25zdGFudCB0YWJsZXMg KFJETyBsYW1iZGEvY29zdCB0YWJsZXMgYW5kCisgKiBzdWJqZWN0aXZlLXF1YWxpdHkgdHVuaW5n IHJlc3BlY3RpdmVseSksIHNlbGVjdGVkIGJ5IGEgdHVuaW5nIGtub2IgdGhpcworICogZHJpdmVy IGRvZXNuJ3QgZXhwb3NlIHJhdGhlciB0aGFuIGJ5IHJlc29sdXRpb24vUVAvY29udGVudCAtLSBz byBhCisgKiBmaXhlZCBjb25zdGFudCB0YWJsZSBpcyB0aGUgY29ycmVjdCB2MSBpbXBsZW1lbnRh dGlvbiwgbm90IGEKKyAqIHBsYWNlaG9sZGVyLiBDYXB0dXJlZCB2aWEgd3RyYWNlIGZyb20gYSBy ZWFsIHN1Y2Nlc3NmdWwKKyAqIHJvY2tjaGlwLWxpbnV4L21wcCBgbXBpX2VuY190ZXN0YCBlbmNv ZGUgYW5kIGNyb3NzLWNoZWNrZWQgYWdhaW5zdCB0aGUKKyAqIGRlY2xhcmVkIGNsYXNzIGJvdW5k YXJpZXMgaW4gbXBwX3JrdmVuYzIuYydzIGh3X2luZm8gdGFibGUgKFNRSSdzCisgKiBkZWNsYXJl ZCByYW5nZSBleHRlbmRzIHRvIDB4MjEyYywgYnV0IGEgcmVhbCBlbmNvZGUgbmV2ZXIgdG91Y2hl cyBwYXN0CisgKiAweDIwYjgsIHNvIHRoaXMgZHJpdmVyIGRvZXNuJ3QgZWl0aGVyKS4gU2VlIHRo ZSBSQ19ST0kgYmFubmVyIGNvbW1lbnQKKyAqIGluIHJrdmVuYy1yZWdzLmggZm9yIHdoeSB0aGVz ZSBjbGFzc2VzIGFyZSBub3QgYWN0dWFsbHkgb3B0aW9uYWwKKyAqIGRlc3BpdGUgbm90aGluZyBp biB0aGUgdXNlcnNwYWNlIEhBTCBldmVyIGRvY3VtZW50aW5nIHRoZW0gYXMgcmVxdWlyZWQuCisg Ki8KK3N0YXRpYyBjb25zdCB1MzIgcmt2ZW5jX3Bhcl9jbGFzc1tdID0geworCTB4MDAwMzAwMDEs IDB4MDAwODAwMDYsIDB4MDAwMzAwMDEsIDB4MDAwODAwMDYsIDB4MDAwMzAwMDEsIDB4MDAwODAw MDYsCisJMHgwMDAwMGZmZiwgMHgxMDEwMTAxMCwgMHgxMDEwMTAxMCwgMHgxNjE0MWExNiwgMHgx MzE0MTUxMiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAw LCAweDAwMDAwMDAwLCAweDAwMDIwMDAxLCAweDAwMmQwMDA2LAorCTB4MDAwMDAwMDAsIDB4MDAw MDAwMDAsIDB4MDAxMDEwMTAsIDB4MDAxMjExMTIsIDB4MDAxMDEwMTAsIDB4MDAwMDAwMDAsCisJ MHgwMDAwMDEwMywgMHgwNTAwYzAxMCwgMHgwMDAwMDAwMCwgMHgwNDA0MDQwNCwgMHgwMDAwMDAy MSwgMHgwMDAwMDAwMCwKKwkweDAwNDAxMDA0LCAweDAwODA2MDQwLCAweDAwMDAwMDAwLCAweDAw MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAs IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAw MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgw MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAw LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAw MDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwg MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAw MCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAw MDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAs IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAw MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAw LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAw MDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwg MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAw MDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAw MDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAs IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAw MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAw LAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDksIDB4MDAwMDAwMGIsIDB4MDAw MDAwMGUsIDB4MDAwMDAwMTEsCisJMHgwMDAwMDAxNiwgMHgwMDAwMDAxYiwgMHgwMDAwMDAyMiwg MHgwMDAwMDAyYiwgMHgwMDAwMDAzNiwgMHgwMDAwMDA0NSwKKwkweDAwMDAwMDU2LCAweDAwMDAw MDZkLCAweDAwMDAwMDg5LCAweDAwMDAwMGFkLCAweDAwMDAwMGRhLCAweDAwMDAwMTEyLAorCTB4 MDAwMDAxNTksIDB4MDAwMDAxYjMsIDB4MDAwMDAyMjQsIDB4MDAwMDAyYjMsIDB4MDAwMDAzNjYs IDB4MDAwMDA0NDksCisJMHgwMDAwMDU2NiwgMHgwMDAwMDZjZCwgMHgwMDAwMDg5MSwgMHgwMDAw MGFjYiwgMHgwMDAwMGQ5YSwgMHgwMDAwMTNjMSwKKwkweDAwMDAxOGU0LCAweDAwMDAxZjVjLCAw eDAwMDAyNzgzLCAweDAwMDAzMWM4LCAweDAwMDAzZWI4LCAweDAwMDA0ZjA2LAorCTB4MDAwMDYz OTAsIDB4MDAwMDhlMTQsIDB4MDAwMGIzMDIsIDB4MDAwMGUxOGEsIDB4MDAwMTFjMjksIDB4MDAw MTY2MDUsCisJMHgwMDAxYzMxMywgMHgwMDAyN2FlMSwgMHgwMDAzMWZlNiwgMHgwMDAzZWZjZiwg MHgwMDA0ZjVjMywgMHgwMDA2ZTc4NSwKKwkweDAwMDhiMmVmLCAweDAwMGFmNWMzLCAweDAwMGYx ZTdhLCAweDAwMTMwYzdmLCAweDAwMTgwMDAwLCAweDAwMWUzY2Y0LAorfTsKKworc3RhdGljIGNv bnN0IHUzMiBya3ZlbmNfc3FpX2NsYXNzW10gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwg MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMmYxMCwKKwkweDAwMTgw MDAwLCAweDAwNDAwMDMwLCAweDAwMjAwMDEwLCAweDAwNjAwMDMwLCAweDAwMTgwMDMwLCAweDAw MzAwMDYwLAorCTB4MDMwMTAzMDEsIDB4MDQwMTA0MDEsIDB4MDMwMDAzMDAsIDB4MDAwMDAzMDEs IDB4MDkwNjA5MDYsIDB4MDgwNjBiMDYsCisJMHgxNDA2MTQwOSwgMHgwMDAwMTAwNywgMHgwMDA2 MDAwYSwgMHgwMDAwMzE1MSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAw eDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDcwMDAwLCAweDAwMTkwMDBm LAorCTB4MTAxMDEwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAw MDAwMDAsIDB4MDAyODAwMTQsCisJMHgwMDAwMDA0OCwgMHgxMDEwMTAxMCwgMHgwMDAwMDAwMCwg MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwOCwKKwkweDAwMDAwMDIwLCAweDEwMTAx MDEwLCAweDAwMDAwMDAwLCAweDA0MDEwNDAxLCAweDA4MDgxMDEwLAorfTsKKworc3RhdGljIHZv aWQgcmt2ZW5jX3dyaXRlX3RhYmxlX3JlbGF4ZWQoc3RydWN0IHJrdmVuY19kZXYgKmRldiwgdTMy IGJhc2Vfb2ZmLAorCQkJCQljb25zdCB1MzIgKndvcmRzLCBzaXplX3QgY291bnQpCit7CisJc2l6 ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJcmt2ZW5jX3dyaXRlX3Jl bGF4ZWQoZGV2LCBiYXNlX29mZiArIDQgKiBpLCB3b3Jkc1tpXSk7Cit9CisKKy8qIC0tLS0gbWlu aW1hbCBSQlNQIGJpdCB3cml0ZXIgZm9yIFNQUy9QUFMgLS0tLSAqLworCitzdHJ1Y3Qgcmt2ZW5j X2JpdHdyaXRlciB7CisJdTggKmJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlzaXplX3QgYnl0ZV9wb3M7 CisJdTggYml0X3BvczsKK307CisKK3N0YXRpYyB2b2lkIGJ3X2luaXQoc3RydWN0IHJrdmVuY19i aXR3cml0ZXIgKmJ3LCB1OCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlidy0+YnVmID0gYnVmOwor CWJ3LT5zaXplID0gc2l6ZTsKKwlidy0+Ynl0ZV9wb3MgPSAwOworCWJ3LT5iaXRfcG9zID0gMDsK KwltZW1zZXQoYnVmLCAwLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgYndfcHV0X2JpdChzdHJ1 Y3Qgcmt2ZW5jX2JpdHdyaXRlciAqYncsIHUzMiBiaXQpCit7CisJaWYgKGJ3LT5ieXRlX3BvcyA+ PSBidy0+c2l6ZSkKKwkJcmV0dXJuOworCisJaWYgKGJpdCkKKwkJYnctPmJ1Zltidy0+Ynl0ZV9w b3NdIHw9IEJJVCg3IC0gYnctPmJpdF9wb3MpOworCisJaWYgKCsrYnctPmJpdF9wb3MgPT0gOCkg eworCQlidy0+Yml0X3BvcyA9IDA7CisJCWJ3LT5ieXRlX3BvcysrOworCX0KK30KKworc3RhdGlj IHZvaWQgYndfcHV0X2JpdHMoc3RydWN0IHJrdmVuY19iaXR3cml0ZXIgKmJ3LCB1MzIgdmFsLCB1 bnNpZ25lZCBpbnQgbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IG4gLSAxOyBpID49IDA7IGkt LSkKKwkJYndfcHV0X2JpdChidywgKHZhbCA+PiBpKSAmIDEpOworfQorCisvKiBFeHAtR29sb21i IHVlKHYpICovCitzdGF0aWMgdm9pZCBid19wdXRfdWUoc3RydWN0IHJrdmVuY19iaXR3cml0ZXIg KmJ3LCB1MzIgdmFsKQoreworCXUzMiBjb2RlID0gdmFsICsgMTsKKwl1bnNpZ25lZCBpbnQgbiA9 IGNvZGUgPyBmbHMoY29kZSkgLSAxIDogMDsKKworCWJ3X3B1dF9iaXRzKGJ3LCAwLCBuKTsKKwli d19wdXRfYml0cyhidywgY29kZSwgbiArIDEpOworfQorCisvKiBFeHAtR29sb21iIHNlKHYpICov CitzdGF0aWMgdm9pZCBid19wdXRfc2Uoc3RydWN0IHJrdmVuY19iaXR3cml0ZXIgKmJ3LCBpbnQg dmFsKQoreworCXUzMiBjb2RlID0gdmFsIDw9IDAgPyAodTMyKSgtdmFsKSAqIDIgOiAodTMyKXZh bCAqIDIgLSAxOworCisJYndfcHV0X3VlKGJ3LCBjb2RlKTsKK30KKworc3RhdGljIHZvaWQgYndf cmJzcF90cmFpbGluZ19iaXRzKHN0cnVjdCBya3ZlbmNfYml0d3JpdGVyICpidykKK3sKKwlid19w dXRfYml0KGJ3LCAxKTsKKwl3aGlsZSAoYnctPmJpdF9wb3MgIT0gMCkKKwkJYndfcHV0X2JpdChi dywgMCk7Cit9CisKKy8qIEVtaXQgb25lIEFubmV4LUIgTkFMIHVuaXQgKHN0YXJ0IGNvZGUgKyBo ZWFkZXIgKyBlc2NhcGVkIFJCU1ApIGludG8gb3V0LAorICogcmV0dXJucyBieXRlcyB3cml0dGVu LgorICovCitzdGF0aWMgc2l6ZV90IHJrdmVuY193cml0ZV9uYWwodTggKm91dCwgc2l6ZV90IG91 dF9zaXplLCB1OCBuYWxfcmVmX2lkYywKKwkJCSAgICAgICB1OCBuYWxfdW5pdF90eXBlLCBjb25z dCB1OCAqcmJzcCwgc2l6ZV90IHJic3BfbGVuKQoreworCXN0YXRpYyBjb25zdCB1OCBzdGFydF9j b2RlW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfTsKKwlzaXplX3QgcG9zID0gMDsKKwl1 bnNpZ25lZCBpbnQgemVyb19ydW4gPSAwOworCXNpemVfdCBpOworCisJaWYgKG91dF9zaXplIDwg c2l6ZW9mKHN0YXJ0X2NvZGUpICsgMSkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkob3V0LCBzdGFy dF9jb2RlLCBzaXplb2Yoc3RhcnRfY29kZSkpOworCXBvcyArPSBzaXplb2Yoc3RhcnRfY29kZSk7 CisJb3V0W3BvcysrXSA9IChuYWxfcmVmX2lkYyA8PCA1KSB8IG5hbF91bml0X3R5cGU7CisKKwlm b3IgKGkgPSAwOyBpIDwgcmJzcF9sZW4gJiYgcG9zIDwgb3V0X3NpemU7IGkrKykgeworCQlpZiAo emVyb19ydW4gPj0gMiAmJiByYnNwW2ldIDw9IDMpIHsKKwkJCW91dFtwb3MrK10gPSAweDAzOwor CQkJemVyb19ydW4gPSAwOworCQkJaWYgKHBvcyA+PSBvdXRfc2l6ZSkKKwkJCQlicmVhazsKKwkJ fQorCQlvdXRbcG9zKytdID0gcmJzcFtpXTsKKwkJemVyb19ydW4gPSByYnNwW2ldID09IDAgPyB6 ZXJvX3J1biArIDEgOiAwOworCX0KKworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBjb25zdCB1 OCBya3ZlbmNfaDI2NF9sZXZlbF9pZGNbXSA9IHsKKwlbVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVW RUxfMV8wXSA9IDEwLAorCVtWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xQl0gID0gMTEsCisJ W1Y0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMV0gPSAxMSwKKwlbVjRMMl9NUEVHX1ZJREVP X0gyNjRfTEVWRUxfMV8yXSA9IDEyLAorCVtWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzNd ID0gMTMsCisJW1Y0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzJfMF0gPSAyMCwKKwlbVjRMMl9N UEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8xXSA9IDIxLAorCVtWNEwyX01QRUdfVklERU9fSDI2NF9M RVZFTF8yXzJdID0gMjIsCisJW1Y0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMF0gPSAzMCwK KwlbVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18xXSA9IDMxLAorCVtWNEwyX01QRUdfVklE RU9fSDI2NF9MRVZFTF8zXzJdID0gMzIsCisJW1Y0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzRf MF0gPSA0MCwKKwlbVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8xXSA9IDQxLAorCVtWNEwy X01QRUdfVklERU9fSDI2NF9MRVZFTF80XzJdID0gNDIsCit9OworCitzdGF0aWMgdm9pZCBya3Zl bmNfaDI2NF9nZW5fc3BzX3BwcyhzdHJ1Y3Qgcmt2ZW5jX2N0eCAqY3R4KQoreworCXN0cnVjdCBy a3ZlbmNfaDI2NF9jdHggKmgyNjQgPSAmY3R4LT5oMjY0OworCXN0cnVjdCBya3ZlbmNfYml0d3Jp dGVyIGJ3OworCXU4IHJic3BbMzJdOworCXNpemVfdCByYnNwX2xlbiwgcG9zID0gMDsKKwl1bnNp Z25lZCBpbnQgd2lkdGggPSBjdHgtPmNvZGVkX2ZtdC53aWR0aDsKKwl1bnNpZ25lZCBpbnQgaGVp Z2h0ID0gY3R4LT5jb2RlZF9mbXQuaGVpZ2h0OworCXVuc2lnbmVkIGludCBtYl93ID0gQUxJR04o d2lkdGgsIDE2KSAvIDE2OworCXVuc2lnbmVkIGludCBtYl9oID0gQUxJR04oaGVpZ2h0LCAxNikg LyAxNjsKKwl1bnNpZ25lZCBpbnQgY3JvcF93ID0gbWJfdyAqIDE2IC0gd2lkdGg7CisJdW5zaWdu ZWQgaW50IGNyb3BfaCA9IG1iX2ggKiAxNiAtIGhlaWdodDsKKwlib29sIGNyb3AgPSBjcm9wX3cg fHwgY3JvcF9oOworCWJvb2wgaXNfbWFpbiA9IGgyNjQtPnByb2ZpbGUtPnZhbCA9PSBWNEwyX01Q RUdfVklERU9fSDI2NF9QUk9GSUxFX01BSU47CisJdTggcHJvZmlsZV9pZGMgPSBpc19tYWluID8g NzcgOiA2NjsKKwl1OCBsZXZlbF9pZGMgPSBya3ZlbmNfaDI2NF9sZXZlbF9pZGNbaDI2NC0+bGV2 ZWwtPnZhbF07CisJYm9vbCBjYWJhYyA9IGgyNjQtPmVudHJvcHlfbW9kZS0+dmFsID09IFY0TDJf TVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQUJBQzsKKworCS8qIFNQUyAobmFsX3JlZl9p ZGM9MSwgbmFsX3VuaXRfdHlwZT03KSAqLworCWJ3X2luaXQoJmJ3LCByYnNwLCBzaXplb2YocmJz cCkpOworCWJ3X3B1dF9iaXRzKCZidywgcHJvZmlsZV9pZGMsIDgpOworCWJ3X3B1dF9iaXRzKCZi dywgMCwgOCk7IC8qIGNvbnN0cmFpbnRfc2V0MC4uNV9mbGFnICsgcmVzZXJ2ZWRfemVyb18yYml0 cyAqLworCWJ3X3B1dF9iaXRzKCZidywgbGV2ZWxfaWRjLCA4KTsKKwlid19wdXRfdWUoJmJ3LCAw KTsgLyogc2VxX3BhcmFtZXRlcl9zZXRfaWQgKi8KKwlid19wdXRfdWUoJmJ3LCBSS1ZFTkNfSDI2 NF9MT0cyX01BWF9GUkFNRV9OVU0pOworCWJ3X3B1dF91ZSgmYncsIDApOyAvKiBwaWNfb3JkZXJf Y250X3R5cGUgKi8KKwlid19wdXRfdWUoJmJ3LCBSS1ZFTkNfSDI2NF9MT0cyX01BWF9QT0NfTFNC KTsKKwlid19wdXRfdWUoJmJ3LCAxKTsgLyogbWF4X251bV9yZWZfZnJhbWVzICovCisJYndfcHV0 X2JpdCgmYncsIDApOyAvKiBnYXBzX2luX2ZyYW1lX251bV92YWx1ZV9hbGxvd2VkX2ZsYWcgKi8K Kwlid19wdXRfdWUoJmJ3LCBtYl93IC0gMSk7CisJYndfcHV0X3VlKCZidywgbWJfaCAtIDEpOwor CWJ3X3B1dF9iaXQoJmJ3LCAxKTsgLyogZnJhbWVfbWJzX29ubHlfZmxhZyAqLworCWJ3X3B1dF9i aXQoJmJ3LCAxKTsgLyogZGlyZWN0Xzh4OF9pbmZlcmVuY2VfZmxhZyAqLworCWJ3X3B1dF9iaXQo JmJ3LCBjcm9wKTsKKwlpZiAoY3JvcCkgeworCQlid19wdXRfdWUoJmJ3LCAwKTsKKwkJYndfcHV0 X3VlKCZidywgY3JvcF93IC8gMik7CisJCWJ3X3B1dF91ZSgmYncsIDApOworCQlid19wdXRfdWUo JmJ3LCBjcm9wX2ggLyAyKTsKKwl9CisJYndfcHV0X2JpdCgmYncsIDApOyAvKiB2dWlfcGFyYW1l dGVyc19wcmVzZW50X2ZsYWcgKi8KKwlid19yYnNwX3RyYWlsaW5nX2JpdHMoJmJ3KTsKKwlyYnNw X2xlbiA9IGJ3LmJ5dGVfcG9zOworCXBvcyArPSBya3ZlbmNfd3JpdGVfbmFsKGgyNjQtPnNwc19w cHNfbmFsICsgcG9zLAorCQkJCXNpemVvZihoMjY0LT5zcHNfcHBzX25hbCkgLSBwb3MsIDEsIDcs IHJic3AsIHJic3BfbGVuKTsKKworCS8qIFBQUyAobmFsX3JlZl9pZGM9MSwgbmFsX3VuaXRfdHlw ZT04KSAqLworCWJ3X2luaXQoJmJ3LCByYnNwLCBzaXplb2YocmJzcCkpOworCWJ3X3B1dF91ZSgm YncsIDApOyAvKiBwaWNfcGFyYW1ldGVyX3NldF9pZCAqLworCWJ3X3B1dF91ZSgmYncsIDApOyAv KiBzZXFfcGFyYW1ldGVyX3NldF9pZCAqLworCWJ3X3B1dF9iaXQoJmJ3LCBjYWJhYyk7CisJYndf cHV0X2JpdCgmYncsIDApOyAvKiBib3R0b21fZmllbGRfcGljX29yZGVyX2luX2ZyYW1lX3ByZXNl bnRfZmxhZyAqLworCWJ3X3B1dF91ZSgmYncsIDApOyAvKiBudW1fc2xpY2VfZ3JvdXBzX21pbnVz MSAqLworCWJ3X3B1dF91ZSgmYncsIDApOyAvKiBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2 ZV9taW51czEgKi8KKwlid19wdXRfdWUoJmJ3LCAwKTsgLyogbnVtX3JlZl9pZHhfbDFfZGVmYXVs dF9hY3RpdmVfbWludXMxICovCisJYndfcHV0X2JpdCgmYncsIDApOyAvKiB3ZWlnaHRlZF9wcmVk X2ZsYWcgKi8KKwlid19wdXRfYml0cygmYncsIDAsIDIpOyAvKiB3ZWlnaHRlZF9iaXByZWRfaWRj ICovCisJYndfcHV0X3NlKCZidywgKGludCloMjY0LT5pX3FwLT52YWwgLSAyNik7IC8qIHBpY19p bml0X3FwX21pbnVzMjYgKi8KKwlid19wdXRfc2UoJmJ3LCAwKTsgLyogcGljX2luaXRfcXNfbWlu dXMyNiAqLworCWJ3X3B1dF9zZSgmYncsIDApOyAvKiBjaHJvbWFfcXBfaW5kZXhfb2Zmc2V0ICov CisJYndfcHV0X2JpdCgmYncsIDEpOyAvKiBkZWJsb2NraW5nX2ZpbHRlcl9jb250cm9sX3ByZXNl bnRfZmxhZyAqLworCWJ3X3B1dF9iaXQoJmJ3LCAwKTsgLyogY29uc3RyYWluZWRfaW50cmFfcHJl ZF9mbGFnICovCisJYndfcHV0X2JpdCgmYncsIDApOyAvKiByZWR1bmRhbnRfcGljX2NudF9wcmVz ZW50X2ZsYWcgKi8KKwlid19yYnNwX3RyYWlsaW5nX2JpdHMoJmJ3KTsKKwlyYnNwX2xlbiA9IGJ3 LmJ5dGVfcG9zOworCXBvcyArPSBya3ZlbmNfd3JpdGVfbmFsKGgyNjQtPnNwc19wcHNfbmFsICsg cG9zLAorCQkJCXNpemVvZihoMjY0LT5zcHNfcHBzX25hbCkgLSBwb3MsIDEsIDgsIHJic3AsIHJi c3BfbGVuKTsKKworCWgyNjQtPnNwc19wcHNfbGVuID0gcG9zOworfQorCisvKiAtLS0tIGNvbnRy b2xzIC0tLS0gKi8KKworc3RhdGljIGludCBya3ZlbmNfaDI2NF9zX2N0cmwoc3RydWN0IHY0bDJf Y3RybCAqY3RybCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X2N0cmxfb3BzIHJrdmVuY19oMjY0X2N0cmxfb3BzID0geworCS5zX2N0cmwgPSBya3ZlbmNfaDI2 NF9zX2N0cmwsCit9OworCitzdGF0aWMgaW50IHJrdmVuY19oMjY0X2luaXRfY3RybHMoc3RydWN0 IHJrdmVuY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZj dHgtPmN0cmxfaGFuZGxlcjsKKwlzdHJ1Y3Qgcmt2ZW5jX2gyNjRfY3R4ICpoMjY0ID0gJmN0eC0+ aDI2NDsKKworCS8qIEFkdmlzb3J5IG9ubHkgaW4gdjE6IHRoZSBoYXJkd2FyZSByY19lbj0wIGZp eGVkLVFQCisJICogcGF0aCAocmNfcXApIGlzIHdoYXQncyBhY3R1YWxseSB3aXJlZCB1cCwgbm90 IHRoaXMgYml0cmF0ZSB2YWx1ZS4KKwkgKi8KKwloMjY0LT5iaXRyYXRlID0gdjRsMl9jdHJsX25l d19zdGQoaGRsLCAmcmt2ZW5jX2gyNjRfY3RybF9vcHMsCisJCQkJCSAgVjRMMl9DSURfTVBFR19W SURFT19CSVRSQVRFLAorCQkJCQkgIDY0MDAwLCAxMDAwMDAwMDAsIDEsIDIwMDAwMDApOworCisJ aDI2NC0+cHJvZmlsZSA9IHY0bDJfY3RybF9uZXdfc3RkX21lbnUoaGRsLCAmcmt2ZW5jX2gyNjRf Y3RybF9vcHMsCisJCQlWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRSwKKwkJCVY0TDJf TVBFR19WSURFT19IMjY0X1BST0ZJTEVfTUFJTiwKKwkJCUJJVChWNEwyX01QRUdfVklERU9fSDI2 NF9QUk9GSUxFX0NPTlNUUkFJTkVEX0JBU0VMSU5FKSwKKwkJCVY0TDJfTVBFR19WSURFT19IMjY0 X1BST0ZJTEVfQkFTRUxJTkUpOworCisJaDI2NC0+bGV2ZWwgPSB2NGwyX2N0cmxfbmV3X3N0ZF9t ZW51KGhkbCwgJnJrdmVuY19oMjY0X2N0cmxfb3BzLAorCQkJVjRMMl9DSURfTVBFR19WSURFT19I MjY0X0xFVkVMLAorCQkJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8yLAorCQkJQklUKFY0 TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFCKSwKKwkJCVY0TDJfTVBFR19WSURFT19IMjY0X0xF VkVMXzRfMCk7CisKKwloMjY0LT5lbnRyb3B5X21vZGUgPSB2NGwyX2N0cmxfbmV3X3N0ZF9tZW51 KGhkbCwgJnJrdmVuY19oMjY0X2N0cmxfb3BzLAorCQkJVjRMMl9DSURfTVBFR19WSURFT19IMjY0 X0VOVFJPUFlfTU9ERSwKKwkJCVY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQUJB QywgMCwKKwkJCVY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQVZMQyk7CisKKwlo MjY0LT5nb3Bfc2l6ZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnJrdmVuY19oMjY0X2N0cmxf b3BzLAorCQkJCQkgICBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFLAorCQkJCQkgICAxLCAz MDAsIDEsIDMwKTsKKworCWgyNjQtPmlfcXAgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZya3Zl bmNfaDI2NF9jdHJsX29wcywKKwkJCQkgICAgICAgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lf RlJBTUVfUVAsCisJCQkJICAgICAgIDAsIDUxLCAxLCAyNik7CisKKwloMjY0LT5wX3FwID0gdjRs Ml9jdHJsX25ld19zdGQoaGRsLCAmcmt2ZW5jX2gyNjRfY3RybF9vcHMsCisJCQkJICAgICAgIFY0 TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QX0ZSQU1FX1FQLAorCQkJCSAgICAgICAwLCA1MSwgMSwg MjgpOworCisJcmV0dXJuIGhkbC0+ZXJyb3I7Cit9CisKKy8qIC0tLS0gc3RhcnQvc3RvcCAtLS0t ICovCisKK3N0YXRpYyBpbnQgcmt2ZW5jX2gyNjRfc3RhcnQoc3RydWN0IHJrdmVuY19jdHggKmN0 eCkKK3sKKwlzdHJ1Y3Qgcmt2ZW5jX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHJrdmVu Y19oMjY0X2N0eCAqaDI2NCA9ICZjdHgtPmgyNjQ7CisJLyogRXhhY3QgZm9ybXVsYXMgZnJvbSBt cHAncyByZWNvbi1idWZmZXIgc2l6aW5nIGZ1bmN0aW9uICh0aGUgb25lCisJICogdGhhdCBmZWVk cyBoYWxfYnVmc19zZXR1cCgpKSDigJQgYWxpZ25lZF9oIGhhcyB0aGUgc2FtZSArMTYgZnVkZ2UK KwkgKiBtcHAgYXBwbGllcywgbm90IGp1c3QgTVBQX0FMSUdOKGhlaWdodCwgMTYpLgorCSAqLwor CXVuc2lnbmVkIGludCBhbGlnbmVkX3cgPSBBTElHTihjdHgtPmNvZGVkX2ZtdC53aWR0aCwgNjQp OworCXVuc2lnbmVkIGludCBhbGlnbmVkX2ggPSBBTElHTihjdHgtPmNvZGVkX2ZtdC5oZWlnaHQs IDE2KSArIDE2OworCXNpemVfdCBmYmNfaGRyX3NpemUgPSBBTElHTigoc2l6ZV90KWFsaWduZWRf dyAqIGFsaWduZWRfaCAvIDY0LCBTWl84Syk7CisJc2l6ZV90IGZiY19iZHlfc2l6ZSA9IChzaXpl X3QpYWxpZ25lZF93ICogYWxpZ25lZF9oICogMyAvIDI7CisJc2l6ZV90IHRvdGFsX3NpemU7CisJ aW50IGk7CisKKwltZW1zZXQoJmgyNjQtPmZyYW1lX251bSwgMCwKKwkgICAgICAgc2l6ZW9mKCpo MjY0KSAtIG9mZnNldG9mKHN0cnVjdCBya3ZlbmNfaDI2NF9jdHgsIGZyYW1lX251bSkpOworCisJ aDI2NC0+cGl4ZWxfaGRyX3NpemUgPSBmYmNfaGRyX3NpemU7CisJaDI2NC0+cGl4ZWxfYnVmX3Np emUgPSBmYmNfaGRyX3NpemUgKyBmYmNfYmR5X3NpemU7CisJaDI2NC0+dGh1bWJfYnVmX3NpemUg PSBBTElHTigoYWxpZ25lZF93IC8gNjQpICogKGFsaWduZWRfaCAvIDY0KSAqIDI1NiwgU1pfOEsp OworCWgyNjQtPnNtZWFyX2J1Zl9zaXplID0gQUxJR04oYWxpZ25lZF93IC8gNjQsIDE2KSAqIEFM SUdOKGFsaWduZWRfaCAvIDE2LCAxNik7CisJdG90YWxfc2l6ZSA9IGgyNjQtPnBpeGVsX2J1Zl9z aXplICsgaDI2NC0+dGh1bWJfYnVmX3NpemUgKyBoMjY0LT5zbWVhcl9idWZfc2l6ZTsKKworCWZv ciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaDI2NC0+cmVjbl9idWZfY3B1W2ldID0gZG1hX2Fs bG9jX2NvaGVyZW50KGRldi0+ZGV2LCB0b3RhbF9zaXplLAorCQkJCQkJCSAgICZoMjY0LT5yZWNu X2J1Zl9kbWFbaV0sCisJCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmICghaDI2NC0+cmVjbl9i dWZfY3B1W2ldKSB7CisJCQlpZiAoaSkKKwkJCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmRldiwg dG90YWxfc2l6ZSwKKwkJCQkJCSAgaDI2NC0+cmVjbl9idWZfY3B1WzBdLAorCQkJCQkJICBoMjY0 LT5yZWNuX2J1Zl9kbWFbMF0pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwloMjY0 LT5tZWl3X2J1Zl9jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5kZXYsIFNaXzRLLCAmaDI2 NC0+bWVpd19idWZfZG1hLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFoMjY0LT5tZWl3X2J1 Zl9jcHUpIHsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJCWRtYV9mcmVlX2NvaGVyZW50 KGRldi0+ZGV2LCB0b3RhbF9zaXplLAorCQkJCQkgIGgyNjQtPnJlY25fYnVmX2NwdVtpXSwgaDI2 NC0+cmVjbl9idWZfZG1hW2ldKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQ2F0Y2gt YWxsIHNjcmF0Y2ggYnVmZmVyIGZvciB0aGUgYXV4aWxpYXJ5IEZSQU1FLWNsYXNzIHdyaXRlCisJ ICogcG9pbnRlcnMgKHNlZSB0aGUgZmllbGQgY29tbWVudCBpbiBya3ZlbmMuaCkuIFNpemVkIGxp a2UgYSBmdWxsCisJICogcmVjb24gYnVmZmVyIHNvIGV2ZW4gYSBmdWxsLWZyYW1lLXNpemVkIHNw dXJpb3VzIHdyaXRlIGZpdHMuCisJICovCisJcmt2ZW5jX2gyNjRfZ2VuX3Nwc19wcHMoY3R4KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBya3ZlbmNfaDI2NF9zdG9wKHN0cnVjdCBy a3ZlbmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHJrdmVuY19kZXYgKmRldiA9IGN0eC0+ZGV2Owor CXN0cnVjdCBya3ZlbmNfaDI2NF9jdHggKmgyNjQgPSAmY3R4LT5oMjY0OworCXNpemVfdCB0b3Rh bF9zaXplID0gaDI2NC0+cGl4ZWxfYnVmX3NpemUgKyBoMjY0LT50aHVtYl9idWZfc2l6ZSArCisJ CQkgICAgIGgyNjQtPnNtZWFyX2J1Zl9zaXplOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IDI7IGkrKykgeworCQlpZiAoaDI2NC0+cmVjbl9idWZfY3B1W2ldKQorCQkJZG1hX2ZyZWVfY29o ZXJlbnQoZGV2LT5kZXYsIHRvdGFsX3NpemUsCisJCQkJCSAgaDI2NC0+cmVjbl9idWZfY3B1W2ld LCBoMjY0LT5yZWNuX2J1Zl9kbWFbaV0pOworCQloMjY0LT5yZWNuX2J1Zl9jcHVbaV0gPSBOVUxM OworCX0KKworCWlmIChoMjY0LT5tZWl3X2J1Zl9jcHUpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRl di0+ZGV2LCBTWl80SywgaDI2NC0+bWVpd19idWZfY3B1LCBoMjY0LT5tZWl3X2J1Zl9kbWEpOwor CWgyNjQtPm1laXdfYnVmX2NwdSA9IE5VTEw7Cit9CisKKy8qIFZFUFU1MTAtb25seSBxdWlyayBz ZXF1ZW5jZSwgd3JpdHRlbiB1bmNvbmRpdGlvbmFsbHkgb24gZXZlcnkgdGFzayBieQorICogdGhl IGRvd25zdHJlYW0gdmVuZG9yIGtlcm5lbCBkcml2ZXIgKGRyaXZlcnMvdmlkZW8vcm9ja2NoaXAv bXBwLworICogbXBwX3JrdmVuYzIuYzpya3ZlbmNfcnVuKCksIDB4NzQvMHgzMDggYmxvY2spLiBB YnNlbnQgZnJvbQorICogcm9ja2NoaXAtbGludXgvbXBwJ3MgdXNlcnNwYWNlIEhBTCBlbnRpcmVs eSAoaXQgbmV2ZXIgdG91Y2hlcyB0aGVzZQorICogcmVnaXN0ZXJzKSwgc28gaXQgY2Fubm90IGJl IGNyb3NzLWNoZWNrZWQgYWdhaW5zdCB0aGUgdXNlcnNwYWNlIHNvdXJjZQorICog4oCUIHRyZWF0 ZWQgYXMgYW4gb3BhcXVlIHJlcXVpcmVkIHNpbGljb24gd29ya2Fyb3VuZCBmb3IgaG9sZGluZyB0 aGUKKyAqIGVuY29kZXIgb2ZmICJhdXRvLXJlc3RhcnQiIHVudGlsIHRoaXMgZHJpdmVyJ3MgSVJR IG1vZGVsIHJlYWRzIHRoZQorICogY29tcGxldGlvbiBzdGF0dXMuCisgKgorICogRVhQRVJJTUVO VCwgUkVTVUxUIE5FR0FUSVZFIChzZWUgZ2l0IGxvZyk6IGRpc2FibGluZyB0aGlzIHF1aXJrIHdh cworICogdHJpZWQgYXMgYSBoeXBvdGhlc2lzIGZvciBhIGdlbnVpbmUgaGFyZHdhcmUtd2F0Y2hk b2cgc3RhbGwKKyAqIChpbnRfc3RhIHdkZ19zdGEpIHNlZW4gb24gZmlyc3QgYm9hcmQgYnJpbmct dXAuIFRoZSBib2FyZCBoaXQgdGhlCisgKiBleGFjdCBzYW1lIHN0YWxsIHdpdGggdGhpcyBxdWly ayBkaXNhYmxlZCwgc28gaXQgaXMgbm90IHRoZSBjYXVzZSDigJQKKyAqIHJlLWVuYWJsZWQgcGVy IHRoZSB2ZW5kb3IncyAidW5jb25kaXRpb25hbGx5IHJlcXVpcmVkIiBjbGFpbSwgc2luY2UKKyAq IHJlbW92aW5nIGl0IGRlbW9uc3RyYXRlZCBubyBiZW5lZml0LiBTZWUgcmt2ZW5jLXJlZ3MuaCBS Q19ST0ktY2xhc3MKKyAqIGNvbW1lbnQgZm9yIHRoZSBuZXh0IGh5cG90aGVzaXMgKHJvaV9xdGhk MC0zIG5ldmVyIHdyaXR0ZW4pLgorICovCitzdGF0aWMgdm9pZCBya3ZlbmNfdmVwdTUxMF9xdWly ayhzdHJ1Y3Qgcmt2ZW5jX2RldiAqZGV2KQoreworCXJrdmVuY193cml0ZShkZXYsIFJLVkVOQ19S RUdfRFZCTV9IT0xELCBSS1ZFTkNfRFZCTV9IT0xEX1ZBTCk7CisJcmt2ZW5jX3dyaXRlKGRldiwg UktWRU5DX1JFR19FTkNfSUQsIFJLVkVOQ19FTkNfSURfUVVJUktfVkFMKTsKK30KKworc3RhdGlj IHZvaWQgcmt2ZW5jX2gyNjRfcnVuKHN0cnVjdCBya3ZlbmNfY3R4ICpjdHgpCit7CisJc3RydWN0 IHJrdmVuY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXN0cnVjdCBya3ZlbmNfaDI2NF9jdHggKmgy NjQgPSAmY3R4LT5oMjY0OworCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnNyY19idWYgPSBya3Zl bmNfZ2V0X3NyY19idWYoY3R4KTsKKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpkc3RfYnVmID0g cmt2ZW5jX2dldF9kc3RfYnVmKGN0eCk7CisJZG1hX2FkZHJfdCBzcmNfZG1hID0gdmIyX2RtYV9j b250aWdfcGxhbmVfZG1hX2FkZHIoJnNyY19idWYtPnZiMl9idWYsIDApOworCWRtYV9hZGRyX3Qg ZHN0X2RtYSA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZkc3RfYnVmLT52YjJfYnVm LCAwKTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjdHgtPmNvZGVkX2ZtdC53aWR0aDsKKwl1bnNp Z25lZCBpbnQgaGVpZ2h0ID0gY3R4LT5jb2RlZF9mbXQuaGVpZ2h0OworCXVuc2lnbmVkIGludCBh bGlnbmVkX3cgPSBBTElHTih3aWR0aCwgMTYpOworCXVuc2lnbmVkIGludCBhbGlnbmVkX2ggPSBB TElHTihoZWlnaHQsIDE2KTsKKwl1bnNpZ25lZCBpbnQgdXZfb2Zmc2V0ID0gY3R4LT5zcmNfZm10 LmJ5dGVzcGVybGluZSAqIGN0eC0+c3JjX2ZtdC5oZWlnaHQ7CisJdW5zaWduZWQgaW50IGRzdF9z aXplID0gdmIyX3BsYW5lX3NpemUoJmRzdF9idWYtPnZiMl9idWYsIDApOworCWJvb2wgaXNfaWRy ID0gaDI2NC0+Z29wX3BvcyA9PSAwOworCXVuc2lnbmVkIGludCBoZWFkZXJfbGVuID0gaXNfaWRy ID8gaDI2NC0+c3BzX3Bwc19sZW4gOiAwOworCXVuc2lnbmVkIGludCB3cml0ZV9pZHggPSBoMjY0 LT5mcmFtZV9udW0gJiAxOworCS8qIEZyYW1lIDAgaGFzIG5vIHByZXZpb3VzbHktd3JpdHRlbiBy ZWZlcmVuY2UgYXQgYWxsIC0tIGFsaWFzIHJlYWQgdG8KKwkgKiB3cml0ZSAocmVhbCBoYXJkd2Fy ZSdzIHJlZnJfaWR4ID09IGN1cnJfaWR4IGZvciBmcmFtZSAwLCBzZWUgdGhlCisJICogcmt2ZW5j X2gyNjRfY3R4IGNvbW1lbnQgaW4gcmt2ZW5jLmgpLiBGcm9tIGZyYW1lIDEgb24sIGJ1Zlt3cml0 ZV9pZHgKKwkgKiBeIDFdIGdlbnVpbmVseSBob2xkcyB0aGUgcHJldmlvdXMgZnJhbWUncyByZWFs IHJlY29uc3RydWN0aW9uLgorCSAqLworCXVuc2lnbmVkIGludCByZWFkX2lkeCA9IGgyNjQtPmZy YW1lX251bSA9PSAwID8gd3JpdGVfaWR4IDogKHdyaXRlX2lkeCBeIDEpOworCWJvb2wgaXNfbWFp biA9IGgyNjQtPnByb2ZpbGUtPnZhbCA9PSBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX01B SU47CisJYm9vbCBjYWJhYyA9IGgyNjQtPmVudHJvcHlfbW9kZS0+dmFsID09IFY0TDJfTVBFR19W SURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQUJBQzsKKwl1MzIgcXAgPSBpc19pZHIgPyBoMjY0LT5p X3FwLT52YWwgOiBoMjY0LT5wX3FwLT52YWw7CisJdW5pb24gcmt2ZW5jX3JlZ19lbmNfcGljIGVu Y19waWMgPSB7IC52YWwgPSAwIH07CisJdW5pb24gcmt2ZW5jX3JlZ19lbmNfcnNsIGVuY19yc2wg PSB7IC52YWwgPSAwIH07CisJdW5pb24gcmt2ZW5jX3JlZ19zcmNfZmlsbCBzcmNfZmlsbCA9IHsg LnZhbCA9IDAgfTsKKwl1bmlvbiBya3ZlbmNfcmVnX3NyY19mbXQgc3JjX2ZtdCA9IHsgLnZhbCA9 IDAgfTsKKwl1bmlvbiBya3ZlbmNfcmVnX3NyY19zdHJkMCBzcmNfc3RyZDAgPSB7IC52YWwgPSAw IH07CisJdW5pb24gcmt2ZW5jX3JlZ19zcmNfc3RyZDEgc3JjX3N0cmQxID0geyAudmFsID0gMCB9 OworCXVuaW9uIHJrdmVuY19yZWdfcmNfY2ZnIHJjX2NmZyA9IHsgLnZhbCA9IDAgfTsKKwl1bmlv biBya3ZlbmNfcmVnX3JjX3FwIHJjX3FwID0geyAudmFsID0gMCB9OworCXVuaW9uIHJrdmVuY19y ZWdfc2xpX3NwbHQgc2xpX3NwbHQgPSB7IC52YWwgPSAwIH07CisJdW5pb24gcmt2ZW5jX3JlZ19y ZG9fY2ZnIHJkb19jZmcgPSB7IC52YWwgPSAwIH07CisJdW5pb24gcmt2ZW5jX3JlZ19zeW50X25h bCBzeW50X25hbCA9IHsgLnZhbCA9IDAgfTsKKwl1bmlvbiBya3ZlbmNfcmVnX3N5bnRfc3BzIHN5 bnRfc3BzID0geyAudmFsID0gMCB9OworCXVuaW9uIHJrdmVuY19yZWdfc3ludF9wcHMgc3ludF9w cHMgPSB7IC52YWwgPSAwIH07CisJdW5pb24gcmt2ZW5jX3JlZ19zeW50X3NsaTAgc3ludF9zbGkw ID0geyAudmFsID0gMCB9OworCXVuaW9uIHJrdmVuY19yZWdfc3ludF9zbGkxIHN5bnRfc2xpMSA9 IHsgLnZhbCA9IDAgfTsKKwl1bmlvbiBya3ZlbmNfcmVnX3N5bnRfc2xpMiBzeW50X3NsaTIgPSB7 IC52YWwgPSAwIH07CisKKwlpZiAoaGVhZGVyX2xlbikKKwkJbWVtY3B5KHZiMl9wbGFuZV92YWRk cigmZHN0X2J1Zi0+dmIyX2J1ZiwgMCksIGgyNjQtPnNwc19wcHNfbmFsLCBoZWFkZXJfbGVuKTsK KworCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19EQkdfQ0xSLCBSS1ZFTkNf REJHX0NMUl9WQUwpOworCisJLyogRGVmaW5lIGV2ZXJ5IEZSQU1FLWNsYXNzIGFkZHJlc3MvcG9p bnRlciByZWdpc3RlciAoMHgyNzAtMHgyZTgpIGJ5CisJICogemVyb2luZyBpdCBiZWZvcmUgdGhl IHNwZWNpZmljIHBvaW50ZXJzIGJlbG93IG92ZXJ3cml0ZSB0aGUgb25lcyB0aGlzCisJICogZHJp dmVyIGFjdHVhbGx5IHVzZXMuIFRoaXMgbWF0Y2hlcyB0aGUgZG93bnN0cmVhbSB2ZW5kb3Iga2Vy bmVsLCB3aGljaAorCSAqIHdyaXRlcyBpdHMgRU5USVJFIHJlZ2lzdGVyIGZpbGUgbGluZWFybHkg ZXZlcnkgZnJhbWUgc28gbm8gcmVnaXN0ZXIKKwkgKiBldmVyIGNhcnJpZXMgc3RhbGUgYm9vdGxv YWRlci9BVEYvcHJldmlvdXMtc2Vzc2lvbiBnYXJiYWdlLiBEb2luZyB0aGlzCisJICogbW92ZWQg dGhlIGxvbmctc3RhbmRpbmcgcmtfaW9tbXUgd3JpdGUgZmF1bHQgZnJvbSBhIGJvb3QtdmFyeWlu ZworCSAqIGdhcmJhZ2UgSU9WQSAodGhlIHRlbGwtdGFsZSAweD8/YjIzOT8/IHN0YWxlLXBvaW50 ZXIgc2lnbmF0dXJlKSB0byBhCisJICogYmVuaWduLCBkZXRlcm1pbmlzdGljIDB4MC4KKwkgKgor CSAqIFRoYXQgcmVzaWR1YWwgd3JpdGVAMCAoQlVHLTIpIGlzIGEgSFctc3ludGhlc2l6ZWQgd3Jp dGUgdGhyb3VnaCBvbmUgb2YKKwkgKiB0aGVzZSBub3ctemVybyBwb2ludGVycyAoYmVzdCBjYW5k aWRhdGU6IHRoZSB2cnNwX3J0bl9lbiByZXR1cm4td3JpdGUKKwkgKiB0byB0aGUgemVybyBvbmxp bmVfYWRkcjsgdGhlIHZlbmRvciBzZXRzIHRoZSBzYW1lIEVOQ19JRCBxdWlyayB3aXRoCisJICog b25saW5lX2FkZHI9MCBhbmQgZG9lcyBOT1QgZmF1bHQsIHNvIGl0IGlzIGNvc21ldGljKS4gSXQg aXMgY29uZmlybWVkCisJICogSU5ERVBFTkRFTlQgb2YgdGhlIFAtZnJhbWUgaGFuZyBhbmQgaGFy bWxlc3MgdG8gdGhlIEktZnJhbWU6IGEKKwkgKiBtdWx0aS1hZ2VudCBldmlkZW5jZSBhdWRpdCBl c3RhYmxpc2hlZCB0aGUgZmF1bHQgaXMgYSBzZXBhcmF0ZSBBWEkKKwkgKiB0cmFuc2FjdGlvbiBm cm9tIHRoZSByZWFsIHJlY29uIHdyaXRlIChyZnB3PXZhbGlkKSwgaXQgbmV2ZXIgbGFuZHMKKwkg KiAoSU9WQSAwIHB0ZSBpbnZhbGlkKSwgYW5kIGl0IGNhbm5vdCBjb3JydXB0IHRoZSByZWZlcmVu Y2UgdGhlIFAtZnJhbWUKKwkgKiByZWFkcy4gQW4gZWFybGllciBhdHRlbXB0IHRvIHJlZGlyZWN0 IHRoZXNlIHBvaW50ZXJzIHRvIHNjcmF0Y2ggRE1BCisJICogYnVmZmVycyAoY29sbXZ3L2NvbG12 ci9scGZ3L2VidWZ0L2VidWZiKSBoYWQgTk8gbWVhc3VyZWQgZWZmZWN0IG9uCisJICogZWl0aGVy IGJ1ZyBhbmQgZGl2ZXJnZWQgZnJvbSB0aGUgdmVuZG9yICh3aGljaCBrZWVwcyB0aGVtIDApLCBz byBpdCB3YXMKKwkgKiByZXZlcnRlZCAtLSB6ZXJvaW5nIGFsb25lIGlzIHRoZSB2ZW5kb3ItbWF0 Y2hpbmcgYmVoYXZpb3VyLgorCSAqLworCXsKKwkJdTMyIG9mZjsKKworCQlmb3IgKG9mZiA9IFJL VkVOQ19SRUdfRlJBTUVfT0ZGU0VUOyBvZmYgPD0gUktWRU5DX1JFR19BRFJfUk9JUjsgb2ZmICs9 IDQpCisJCQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIG9mZiwgMCk7CisJfQorCisJLyogU291 cmNlIGZyYW1lIChOVjEyKTogYWRyX3NyYzAgPSBZLCBhZHJfc3JjMSA9IFVWLiBhZHJfc3JjMiAo YSAzcmQKKwkgKiBwbGFuZSBwb2ludGVyIE5WMTIgZG9lc24ndCBoYXZlKSBtdXN0IGVxdWFsIGFk cl9zcmMxLCBub3QgMCDigJQgbXBwJ3MKKwkgKiBoYWxfaDI2NGVfdmVwdTUxMC5jIHNldHMgaXQg dW5jb25kaXRpb25hbGx5IHRvIHRoZSBzYW1lIGZkIGFzCisJICogYWRyX3NyYzEgZXZlbiBmb3Ig Mi1wbGFuZSBmb3JtYXRzOyBjb25maXJtZWQgdmlhIGEgcmVhbCB3dHJhY2UKKwkgKiBjYXB0dXJl IHRoaXMgaXMgZ2VudWluZWx5IG5vbi16ZXJvIG9uIGEgd29ya2luZyBlbmNvZGUuCisJICovCisJ cmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX0FEUl9TUkMwLCBzcmNfZG1hKTsK Kwlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfQURSX1NSQzEsIHNyY19kbWEg KyB1dl9vZmZzZXQpOworCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19BRFJf U1JDMiwgc3JjX2RtYSArIHV2X29mZnNldCk7CisKKwkvKiBBbGwgdGhyZWUgb2YgcGl4ZWwoRkJD KS90aHVtYi9zbWVhciBhcmUgd3JpdHRlbiBieSBoYXJkd2FyZSBvbgorCSAqIGV2ZXJ5IGZyYW1l IHJlZ2FyZGxlc3Mgb2YgZmVhdHVyZSB1c2Ug4oCUIHNlZSB0aGUgcmt2ZW5jX2gyNjRfY3R4CisJ ICogY29tbWVudCBpbiBya3ZlbmMuaC4gTGVhdmluZyBhbnkgb2YgdGhlc2UgYXQgMCBJT01NVS1m YXVsdHMgaW4gYQorCSAqIHRpZ2h0IHJldHJ5IGxvb3AgaW5zdGVhZCBvZiBmYWlsaW5nIGNsZWFu bHkuIFRoZSByZWFkIHNpZGUKKwkgKiAocmZwci9kc3ByL3NtZWFyX3JkKSBhbGlhc2VzIHRoZSB3 cml0ZSBzaWRlIG9uIGZyYW1lIDAgdmlhCisJICogcmVhZF9pZHggPT0gd3JpdGVfaWR4LCBzZWUg dGhlIHJlYWRfaWR4IGNvbW1lbnQgYWJvdmUuCisJICovCisJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQo ZGV2LCBSS1ZFTkNfUkVHX1JGUFdfSF9BRERSLCBoMjY0LT5yZWNuX2J1Zl9kbWFbd3JpdGVfaWR4 XSk7CisJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX1JGUFdfQl9BRERSLAor CQkJICAgICBoMjY0LT5yZWNuX2J1Zl9kbWFbd3JpdGVfaWR4XSArIGgyNjQtPnBpeGVsX2hkcl9z aXplKTsKKwlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfRFNQV19BRERSLAor CQkJICAgICBoMjY0LT5yZWNuX2J1Zl9kbWFbd3JpdGVfaWR4XSArIGgyNjQtPnBpeGVsX2J1Zl9z aXplKTsKKwlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfQURSX1NNRUFSX1dS LAorCQkJICAgICBoMjY0LT5yZWNuX2J1Zl9kbWFbd3JpdGVfaWR4XSArIGgyNjQtPnBpeGVsX2J1 Zl9zaXplICsKKwkJCSAgICAgaDI2NC0+dGh1bWJfYnVmX3NpemUpOworCisJcmt2ZW5jX3dyaXRl X3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX1JGUFJfSF9BRERSLCBoMjY0LT5yZWNuX2J1Zl9kbWFb cmVhZF9pZHhdKTsKKwlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfUkZQUl9C X0FERFIsCisJCQkgICAgIGgyNjQtPnJlY25fYnVmX2RtYVtyZWFkX2lkeF0gKyBoMjY0LT5waXhl bF9oZHJfc2l6ZSk7CisJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX0RTUFJf QUREUiwKKwkJCSAgICAgaDI2NC0+cmVjbl9idWZfZG1hW3JlYWRfaWR4XSArIGgyNjQtPnBpeGVs X2J1Zl9zaXplKTsKKwlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfQURSX1NN RUFSX1JELAorCQkJICAgICBoMjY0LT5yZWNuX2J1Zl9kbWFbcmVhZF9pZHhdICsgaDI2NC0+cGl4 ZWxfYnVmX3NpemUgKworCQkJICAgICBoMjY0LT50aHVtYl9idWZfc2l6ZSk7CisKKwlya3ZlbmNf d3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfTUVJV19BRERSLCBoMjY0LT5tZWl3X2J1Zl9k bWEpOworCisJLyogSW50ZXJsYWNlZC1maWVsZCByZWNvbiBhZGRyZXNzZXM6IHRoaXMgZHJpdmVy IG5ldmVyIGVuY29kZXMKKwkgKiBpbnRlcmxhY2VkIGNvbnRlbnQsIHNvIHJmcHQvcmZwYiBzdGF5 IGRpc2FibGVkIC0tIGJ1dCByZWFsIGhhcmR3YXJlCisJICogZXhwZWN0cyB0aGUgbGl0ZXJhbCBz ZW50aW5lbCAweGZmZmZmZmZmIGluIHJmcHRfaC9yZnB0X2Igc3BlY2lmaWNhbGx5CisJICogKG5v dCBhIHZhbGlkIGZkLWVtYmVkZGVkIGFkZHJlc3MpLCBub3QgYSBwbGFpbiAwLiByZnBiX2gvYWRy X3JmcGJfYgorCSAqIGFyZSAwIG9uIGEgcmVhbCBlbmNvZGUgdG9vLgorCSAqLworCXJrdmVuY193 cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19SRlBUX0hfQUREUiwgUktWRU5DX1JGUFRfRElT QUJMRUQpOworCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19SRlBCX0hfQURE UiwgMCk7CisJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX1JGUFRfQl9BRERS LCBSS1ZFTkNfUkZQVF9ESVNBQkxFRCk7CisJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZF TkNfUkVHX0FEUl9SRlBCX0IsIDApOworCisJLyogQml0c3RyZWFtIHJpbmcgYnVmZmVyOiBoYXJk d2FyZSB3cml0ZXMgaXRzIGNvbXBsZXRlIHNsaWNlIE5BTAorCSAqIHN0YXJ0aW5nIHJpZ2h0IGFm dGVyIG91ciBzb2Z0d2FyZS13cml0dGVuIFNQUy9QUFMgcHJlZml4IChpZiBhbnkpLgorCSAqLwor CXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19CU0JUX0FERFIsIGRzdF9kbWEg KyBkc3Rfc2l6ZSAtIDEpOworCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19C U0JCX0FERFIsIGRzdF9kbWEgKyBoZWFkZXJfbGVuKTsKKwlya3ZlbmNfd3JpdGVfcmVsYXhlZChk ZXYsIFJLVkVOQ19SRUdfQURSX0JTQlMsIGRzdF9kbWEgKyBoZWFkZXJfbGVuKTsKKwlya3ZlbmNf d3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfQlNCUl9BRERSLCBkc3RfZG1hICsgaGVhZGVy X2xlbik7CisKKwllbmNfcnNsLnBpY193ZDhfbTEgPSBhbGlnbmVkX3cgLyA4IC0gMTsKKwllbmNf cnNsLnBpY19oZDhfbTEgPSBhbGlnbmVkX2ggLyA4IC0gMTsKKwlya3ZlbmNfd3JpdGVfcmVsYXhl ZChkZXYsIFJLVkVOQ19SRUdfRU5DX1JTTCwgZW5jX3JzbC52YWwpOworCisJc3JjX2ZpbGwucGlj X3dmaWxsID0gYWxpZ25lZF93IC0gd2lkdGg7CisJc3JjX2ZpbGwucGljX2hmaWxsID0gYWxpZ25l ZF9oIC0gaGVpZ2h0OworCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19TUkNf RklMTCwgc3JjX2ZpbGwudmFsKTsKKworCXNyY19mbXQuc3JjX2NmbXQgPSBSS1ZFTkNfU1JDX0ZN VF9ZVVY0MjBTUDsKKwlzcmNfZm10Lm91dF9mbXQgPSAxOyAvKiBzZWUgUktWRU5DX1NSQ19GTVRf WVVWNDIwU1AgY29tbWVudCBpbiBya3ZlbmMtcmVncy5oICovCisJcmt2ZW5jX3dyaXRlX3JlbGF4 ZWQoZGV2LCBSS1ZFTkNfUkVHX1NSQ19GTVQsIHNyY19mbXQudmFsKTsKKworCXJrdmVuY193cml0 ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19TUkNfUFJPQywgMCk7CisJcmt2ZW5jX3dyaXRlX3Jl bGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX1BJQ19PRlNULCAwKTsKKworCXNyY19zdHJkMC5zcmNfc3Ry ZDAgPSBjdHgtPnNyY19mbXQuYnl0ZXNwZXJsaW5lOworCXJrdmVuY193cml0ZV9yZWxheGVkKGRl diwgUktWRU5DX1JFR19TUkNfU1RSRDAsIHNyY19zdHJkMC52YWwpOworCXNyY19zdHJkMS5zcmNf c3RyZDEgPSBjdHgtPnNyY19mbXQuYnl0ZXNwZXJsaW5lOworCXJrdmVuY193cml0ZV9yZWxheGVk KGRldiwgUktWRU5DX1JFR19TUkNfU1RSRDEsIHNyY19zdHJkMS52YWwpOworCisJLyogUkMgY29u ZmlndXJhdGlvbjogcmNfZW49MS9hcV9lbj0xIHdpdGggYSByZWFsIChpZiBhcHByb3hpbWF0ZSAt LQorCSAqIHNlZSBiZWxvdykgcmNfYWRqL3JjX2R0aGQgdGhyZXNob2xkIGxhZGRlciwgYnV0IHJj X3FwX3JhbmdlPTAgYW5kCisJICogcmNfbWluX3FwPT1yY19tYXhfcXAgc28gdGhlIEFRIGVuZ2lu ZSBoYXMgbm8gcm9vbSB0byBhY3R1YWxseSBtb3ZlCisJICogUVAgYXdheSBmcm9tIHRoZSByZXF1 ZXN0ZWQgdmFsdWUuIFRoaXMgaXMgZ2VudWluZSBmaXhlZC1RUAorCSAqICpvdXRwdXQqIHZpYSBh IHJlYWwsIG5vbi1kZWdlbmVyYXRlIFJDICpyZWdpc3RlciBjb25maWd1cmF0aW9uKiAtLQorCSAq IE5PVCB0aGUgZHJpdmVyJ3Mgb3JpZ2luYWwgcmNfZW49MC9hbGwtemVyby10aHJlc2hvbGQgZGVz aWduLCB3aGljaAorCSAqIGJvYXJkIGJyaW5nLXVwIHByb3ZlZCByZXByb2R1Y2libHkgc3RhbGxz IHRoZSBoYXJkd2FyZSAoc2VlIHRoZQorCSAqIFJDX1JPSSBiYW5uZXIgY29tbWVudCBpbiBya3Zl bmMtcmVncy5oIGZvciB0aGUgZnVsbCBzdG9yeSBhbmQgdGhlCisJICogZXhhY3QgcmVhbC1oYXJk d2FyZSBjYXB0dXJlIHRoYXQgcGlubmVkIHRoaXMgZG93bikuCisJICoKKwkgKiBiaXRfdGFyZ2V0 IGlzIG9ubHkgYSByb3VnaCBwZXItZnJhbWUgYml0IGJ1ZGdldCAoYml0cmF0ZSBjb250cm9sCisJ ICogZGl2aWRlZCBieSBhbiBhc3N1bWVkIDMwZnBzIC0tIHYxIGRvZXNuJ3QgbmVnb3RpYXRlIHJl YWwgZnJhbWUKKwkgKiBpbnRlcnZhbHMpIGZlZWRpbmcgbXBwJ3MgcmVhbCB0aHJlc2hvbGQtbGFk ZGVyIGZvcm11bGEKKwkgKiAoc2V0dXBfdmVwdTUxMF9yY19iYXNlKCkpOyBzaW5jZSByY19xcF9y YW5nZT0wIGNsYW1wcyBBUSB0byBhCisJICogbm8tb3AgcmVnYXJkbGVzcywgdGhlIGV4YWN0IHZh bHVlIG9ubHkgbmVlZHMgdG8gYmUgc2FuZSBhbmQKKwkgKiBub24tZGVnZW5lcmF0ZSwgbm90IGFj Y3VyYXRlIC0tIHRydWUgYWRhcHRpdmUgYml0cmF0ZSB0cmFja2luZyBpcworCSAqIGEgZm9sbG93 LXVwLgorCSAqLworCXsKKwkJdW5zaWduZWQgaW50IG1iX3cgPSBhbGlnbmVkX3cgLyAxNjsKKwkJ dW5zaWduZWQgaW50IG1iX2ggPSBhbGlnbmVkX2ggLyAxNjsKKwkJczMyIGJpdF90YXJnZXQgPSAo czMyKShoMjY0LT5iaXRyYXRlLT52YWwgLyAzMCk7CisJCXMzMiBtYl90YXJnZXRfYml0c19tdWxf MTYgPQorCQkJKHMzMikoKChzNjQpYml0X3RhcmdldCA8PCA0KSAvIChtYl93ICogbWJfaCkpOwor CQlzMzIgbWJfdGFyZ2V0X2JpdHM7CisJCXMzMiBuZWdhdGl2ZV9iaXRzX3RoZCwgcG9zaXRpdmVf Yml0c190aGQ7CisJCXVuaW9uIHJrdmVuY19yZWdfcmNfYWRqMCByY19hZGowID0geyAudmFsID0g MCB9OworCQl1bmlvbiBya3ZlbmNfcmVnX3JjX2FkajEgcmNfYWRqMSA9IHsgLnZhbCA9IDAgfTsK KworCQlpZiAobWJfdGFyZ2V0X2JpdHNfbXVsXzE2ID49IDB4MTAwMDAwKQorCQkJbWJfdGFyZ2V0 X2JpdHNfbXVsXzE2ID0gMHg1MDAwMDsKKworCQltYl90YXJnZXRfYml0cyA9IChtYl90YXJnZXRf Yml0c19tdWxfMTYgKiAoczMyKW1iX3cpID4+IDQ7CisJCW5lZ2F0aXZlX2JpdHNfdGhkID0gMCAt IDUgKiBtYl90YXJnZXRfYml0cyAvIDE2OworCQlwb3NpdGl2ZV9iaXRzX3RoZCA9IDUgKiBtYl90 YXJnZXRfYml0cyAvIDE2OworCisJCXJjX2NmZy5yY19lbiA9IDE7CisJCXJjX2NmZy5hcV9lbiA9 IDE7CisJCXJjX2NmZy5yY19jdHVfbnVtID0gbWJfdzsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQo ZGV2LCBSS1ZFTkNfUkVHX1JDX0NGRywgcmNfY2ZnLnZhbCk7CisKKwkJcmNfcXAucmNfbWF4X3Fw ID0gcXA7CisJCXJjX3FwLnJjX21pbl9xcCA9IHFwOworCQkvKiBFWFBFUklNRU5ULCBSRVNVTFQg TkVHQVRJVkUgKHNlZSBnaXQgbG9nKTogdHJpZWQgcmNfcXBfcmFuZ2U9MQorCQkgKiAobWF0Y2hp bmcgYSByZWFsIHN1Y2Nlc3NmdWwgbXBwIGNhcHR1cmUncyBhZGFwdGl2ZS1SQyB2YWx1ZSkKKwkJ ICogaW5zdGVhZCBvZiAwLCBhcyBhIGh5cG90aGVzaXMgZm9yIHRoZSBpc29sYXRlZCBya19pb21t dSBmYXVsdAorCQkgKiBiZWxvdyAtLSBkaWRuJ3Qgc3RvcCBpdCwgYW5kIGNvbWJpbmVkIHdpdGgg b3RoZXIgZXhwZXJpbWVudGFsCisJCSAqIGNoYW5nZXMgYXQgdGhlIHRpbWUsIGJvYXJkIHRlc3Rp bmcgc2hvd2VkIGEgcmVhbCByZWdyZXNzaW9uCisJCSAqIChldmVyeSBmcmFtZSBmYWlsaW5nIHdp dGggYSBnZW51aW5lIGhhcmR3YXJlIHdhdGNoZG9nIHVuZGVyCisJCSAqIG11bHRpLWZyYW1lIHRl c3RpbmcpLiBSZXZlcnRlZCB0byAwLCB3aGljaCBpcyBjb25maXJtZWQgc2FmZQorCQkgKiBmb3Ig dGhlIGZpeGVkLVFQIG91dHB1dCB0aGlzIGRyaXZlciBhY3R1YWxseSB3YW50cyAod2l0aAorCQkg KiByY19taW5fcXA9PXJjX21heF9xcCwgQVEgaGFzIG5vIHJvb20gdG8gbW92ZSBRUCByZWdhcmRs ZXNzIG9mCisJCSAqIHJhbmdlLCBzbyAwIHZzIDEgc2hvdWxkbid0IG1hdHRlciBmb3IgY29ycmVj dG5lc3MgLS0gYnV0IDAgaXMKKwkJICogdGhlIHZhbHVlIHRoYXQncyBhY3R1YWxseSBiZWVuIGNv bmZpcm1lZCBub3QgdG8gcmVncmVzcykuCisJCSAqLworCQlyY19xcC5yY19xcF9yYW5nZSA9IDA7 CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19SQ19RUCwgcmNfcXAudmFs KTsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX1JDX1RHVCwgKHUzMilt Yl90YXJnZXRfYml0c19tdWxfMTYpOworCisJCS8qIG1wcCdzIG93biBjb25zdGFudCBxcF9hZGog bGFkZGVyLCBzYW1lIGZvciBldmVyeSBmcmFtZQorCQkgKiByZWdhcmRsZXNzIG9mIGNvbnRlbnQv cmVzb2x1dGlvbi9RUC4KKwkJICovCisJCXJjX2FkajAucXBfYWRqMCA9IC0yOworCQlyY19hZGow LnFwX2FkajEgPSAtMTsKKwkJcmNfYWRqMC5xcF9hZGoyID0gMDsKKwkJcmNfYWRqMC5xcF9hZGoz ID0gMTsKKwkJcmNfYWRqMC5xcF9hZGo0ID0gMjsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2 LCBSS1ZFTkNfUkVHX1JDX0FESjAsIHJjX2FkajAudmFsKTsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4 ZWQoZGV2LCBSS1ZFTkNfUkVHX1JDX0FESjEsIHJjX2FkajEudmFsKTsKKworCQlya3ZlbmNfd3Jp dGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfUkNfRFRIRCgwKSwgKHUzMikoNCAqIG5lZ2F0aXZl X2JpdHNfdGhkKSk7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19SQ19E VEhEKDEpLCAodTMyKW5lZ2F0aXZlX2JpdHNfdGhkKTsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQo ZGV2LCBSS1ZFTkNfUkVHX1JDX0RUSEQoMiksICh1MzIpcG9zaXRpdmVfYml0c190aGQpOworCQly a3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfUkNfRFRIRCgzKSwgKHUzMikoNCAq IHBvc2l0aXZlX2JpdHNfdGhkKSk7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5D X1JFR19SQ19EVEhEKDQpLCBSS1ZFTkNfUkNfRFRIRF9TRU5USU5FTCk7CisJCXJrdmVuY193cml0 ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19SQ19EVEhEKDUpLCBSS1ZFTkNfUkNfRFRIRF9TRU5U SU5FTCk7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19SQ19EVEhEKDYp LCBSS1ZFTkNfUkNfRFRIRF9TRU5USU5FTCk7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwg UktWRU5DX1JFR19SQ19EVEhEKDcpLCBSS1ZFTkNfUkNfRFRIRF9TRU5USU5FTCk7CisJCXJrdmVu Y193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19SQ19EVEhEKDgpLCBSS1ZFTkNfUkNfRFRI RF9TRU5USU5FTCk7CisJfQorCisJLyogUk9JIFFQLWNsYW1wIHRocmVzaG9sZHM6IHdyaXR0ZW4g dW5jb25kaXRpb25hbGx5IGJ5IG1wcCByZWdhcmRsZXNzCisJICogb2YgUkMgbW9kZSAoc2VlIHJr dmVuYy1yZWdzLmggYmFubmVyIGNvbW1lbnQpIOKAlCBldmVyeSBhcmVhJ3MKKwkgKiBbcXBtaW4s cXBtYXhdIGlzIHNldCB0byB0aGlzIGZyYW1lJ3MgUVAgc28gdGhlIGNsYW1wIGlzIGEgbm8tb3AK KwkgKiByYXRoZXIgdGhhbiBmb3JjaW5nIGV2ZXJ5IG1hY3JvYmxvY2sgdG8gUVAgMC4KKwkgKi8K Kwl7CisJCXVuaW9uIHJrdmVuY19yZWdfcm9pX3F0aGQwIHJvaV9xdGhkMCA9IHsgLnZhbCA9IDAg fTsKKwkJdW5pb24gcmt2ZW5jX3JlZ19yb2lfcXRoZDEgcm9pX3F0aGQxID0geyAudmFsID0gMCB9 OworCQl1bmlvbiBya3ZlbmNfcmVnX3JvaV9xdGhkMiByb2lfcXRoZDIgPSB7IC52YWwgPSAwIH07 CisJCXVuaW9uIHJrdmVuY19yZWdfcm9pX3F0aGQzIHJvaV9xdGhkMyA9IHsgLnZhbCA9IDAgfTsK KworCQlyb2lfcXRoZDAucXBtaW5fYXJlYTAgPSBxcDsgcm9pX3F0aGQwLnFwbWF4X2FyZWEwID0g cXA7CisJCXJvaV9xdGhkMC5xcG1pbl9hcmVhMSA9IHFwOyByb2lfcXRoZDAucXBtYXhfYXJlYTEg PSBxcDsKKwkJcm9pX3F0aGQwLnFwbWluX2FyZWEyID0gcXA7CisJCXJrdmVuY193cml0ZV9yZWxh eGVkKGRldiwgUktWRU5DX1JFR19ST0lfUVRIRDAsIHJvaV9xdGhkMC52YWwpOworCisJCXJvaV9x dGhkMS5xcG1heF9hcmVhMiA9IHFwOworCQlyb2lfcXRoZDEucXBtaW5fYXJlYTMgPSBxcDsgcm9p X3F0aGQxLnFwbWF4X2FyZWEzID0gcXA7CisJCXJvaV9xdGhkMS5xcG1pbl9hcmVhNCA9IHFwOyBy b2lfcXRoZDEucXBtYXhfYXJlYTQgPSBxcDsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBS S1ZFTkNfUkVHX1JPSV9RVEhEMSwgcm9pX3F0aGQxLnZhbCk7CisKKwkJcm9pX3F0aGQyLnFwbWlu X2FyZWE1ID0gcXA7IHJvaV9xdGhkMi5xcG1heF9hcmVhNSA9IHFwOworCQlyb2lfcXRoZDIucXBt aW5fYXJlYTYgPSBxcDsgcm9pX3F0aGQyLnFwbWF4X2FyZWE2ID0gcXA7CisJCXJvaV9xdGhkMi5x cG1pbl9hcmVhNyA9IHFwOworCQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdf Uk9JX1FUSEQyLCByb2lfcXRoZDIudmFsKTsKKworCQlyb2lfcXRoZDMucXBtYXhfYXJlYTcgPSBx cDsKKwkJcm9pX3F0aGQzLnFwbWFwX21vZGUgPSAxOyAvKiBtYXRjaGVzIG1wcCdzIGhhcmRjb2Rl ZCB2YWx1ZSAqLworCQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfUk9JX1FU SEQzLCByb2lfcXRoZDMudmFsKTsKKwl9CisKKwkvKiBBUSBhY3Rpdml0eSBMVVQgLyBNQUQtc3Rh dGlzdGljcyB0aHJlc2hvbGRzIC8gY2hyb21hIEtMVVQgb2Zmc2V0OgorCSAqIHNlZSB0aGUgYmFu bmVyIGNvbW1lbnQgYWJvdmUgUktWRU5DX1JFR19BUV9UVEhEIGluIHJrdmVuYy1yZWdzLmggLS0K KwkgKiByZWFsIGZpZWxkcyB0aGlzIGRyaXZlciBuZXZlciB3cm90ZSBhdCBhbGwgdW50aWwgbm93 LCBmb3VuZCBieQorCSAqIGRpZmZpbmcgYWdhaW5zdCBtcHAncyBzZXR1cF92ZXB1NTEwX2FxKCkv c2V0dXBfdmVwdTUxMF9tZSgpLworCSAqIHNldHVwX3ZlcHU1MTBfcmRvX3ByZWQoKSwgYWxsIHdy aXR0ZW4gdW5jb25kaXRpb25hbGx5IGV2ZXJ5IGZyYW1lCisJICogKG1wcCdzIG93biBkZWZhdWx0 IGFxX3R0aGQvYXFfc3RlcCB0YWJsZXMgYXJlIGlkZW50aWNhbCBmb3IgSSBhbmQgUAorCSAqIHNs aWNlczsga2x1dF9vZnN0IGlzIDYgZm9yIGJvdGggaW4gdGhlIG5vbi1JUEMtdHVuaW5nIGRlZmF1 bHQgdGhpcworCSAqIGRyaXZlciBtYXRjaGVzKS4KKwkgKi8KKwl7CisJCXN0YXRpYyBjb25zdCB1 OCBhcV90dGhkWzE2XSA9IHsKKwkJCTAsIDAsIDAsIDAsIDMsIDMsIDUsIDUsIDgsIDgsIDgsIDE1 LCAxNSwgMjAsIDI1LCAyNSwKKwkJfTsKKwkJc3RhdGljIGNvbnN0IHMzMiBhcV9zdGVwWzE2XSA9 IHsKKwkJCS04LCAtNywgLTYsIC01LCAtNCwgLTMsIC0yLCAtMSwgMCwgMSwgMiwgMywgNCwgNSwg NywgOCwKKwkJfTsKKwkJdW5pb24gcmt2ZW5jX3JlZ19hcV9zdHAwIGFxX3N0cDAgPSB7IC52YWwg PSAwIH07CisJCXVuaW9uIHJrdmVuY19yZWdfYXFfc3RwMSBhcV9zdHAxID0geyAudmFsID0gMCB9 OworCQl1bmlvbiBya3ZlbmNfcmVnX2FxX3N0cDIgYXFfc3RwMiA9IHsgLnZhbCA9IDAgfTsKKwkJ dW5pb24gcmt2ZW5jX3JlZ19tYWRpX3N0X3RoZCBtYWRpX3N0X3RoZCA9IHsgLnZhbCA9IDAgfTsK KwkJdW5pb24gcmt2ZW5jX3JlZ19tYWRwX3N0X3RoZDAgbWFkcF9zdF90aGQwID0geyAudmFsID0g MCB9OworCQl1bmlvbiBya3ZlbmNfcmVnX21hZHBfc3RfdGhkMSBtYWRwX3N0X3RoZDEgPSB7IC52 YWwgPSAwIH07CisJCXVuaW9uIHJrdmVuY19yZWdfa2x1dF9vZnN0IGtsdXRfb2ZzdCA9IHsgLnZh bCA9IDAgfTsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg eworCQkJdTMyIHdvcmQgPSBhcV90dGhkWzQgKiBpXSB8IChhcV90dGhkWzQgKiBpICsgMV0gPDwg OCkgfAorCQkJCSAgIChhcV90dGhkWzQgKiBpICsgMl0gPDwgMTYpIHwgKGFxX3R0aGRbNCAqIGkg KyAzXSA8PCAyNCk7CisKKwkJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19B UV9UVEhEICsgNCAqIGksIHdvcmQpOworCQl9CisKKwkJYXFfc3RwMC5hcV9zdHBfczAgPSBhcV9z dGVwWzBdOyBhcV9zdHAwLmFxX3N0cF8wdDEgPSBhcV9zdGVwWzFdOworCQlhcV9zdHAwLmFxX3N0 cF8xdDIgPSBhcV9zdGVwWzJdOyBhcV9zdHAwLmFxX3N0cF8ydDMgPSBhcV9zdGVwWzNdOworCQlh cV9zdHAwLmFxX3N0cF8zdDQgPSBhcV9zdGVwWzRdOyBhcV9zdHAwLmFxX3N0cF80dDUgPSBhcV9z dGVwWzVdOworCQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfQVFfU1RQMCwg YXFfc3RwMC52YWwpOworCisJCS8qIGFxX3N0cF83dDggaXMgYSBoYXJkY29kZWQgMCBpbiBtcHAn cyBzZXR1cF92ZXB1NTEwX2FxKCksIG5vdAorCQkgKiBhcV9zdGVwWzhdIC0tIGEgZ2VudWluZSBv ZmYtYnktb25lIHF1aXJrIGluIHRoZSB2ZW5kb3IgSEFMCisJCSAqIChhcV9zdGVwWzguLjEwXSBz aGlmdCBpbnRvIGFxX3N0cF84dDkuLjEwdDExIGluc3RlYWQpLCByZWFsCisJCSAqIGhhcmR3YXJl IGV4cGVjdHMgZXhhY3RseSB0aGlzIG1hcHBpbmcgc28gaXQncyByZXByb2R1Y2VkCisJCSAqIHZl cmJhdGltIHJhdGhlciB0aGFuICJjb3JyZWN0ZWQiLgorCQkgKi8KKwkJYXFfc3RwMS5hcV9zdHBf NXQ2ID0gYXFfc3RlcFs2XTsgYXFfc3RwMS5hcV9zdHBfNnQ3ID0gYXFfc3RlcFs3XTsKKwkJYXFf c3RwMS5hcV9zdHBfN3Q4ID0gMDsgYXFfc3RwMS5hcV9zdHBfOHQ5ID0gYXFfc3RlcFs4XTsKKwkJ YXFfc3RwMS5hcV9zdHBfOXQxMCA9IGFxX3N0ZXBbOV07IGFxX3N0cDEuYXFfc3RwXzEwdDExID0g YXFfc3RlcFsxMF07CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19BUV9T VFAxLCBhcV9zdHAxLnZhbCk7CisKKwkJLyogYXFfc3RwMidzIG1pZGRsZSB0d28gZmllbGRzICgx MnQxMy8xM3QxNCkgZG9uJ3QgbWF0Y2gKKwkJICogaDI2NF9QL0lfYXFfc3RlcF9kZWZhdWx0J3Mg YXFfc3RlcFsxMl0vWzEzXSB2ZXJiYXRpbSAtLSBjcm9zcy0KKwkJICogY2hlY2tlZCBhZ2FpbnN0 IHRoZSByZWFsIHZlbmRvciB3dHJhY2UgY2FwdHVyZSBmcm9tIHRoZQorCQkgKiBvcmlnaW5hbCBJ LWZyYW1lIGJyaW5nLXVwIChyZWdpc3RlciAweDEwNWMgd2FzIDB4MDA4MzljYTMKKwkJICogdGhl cmUpLCB3aGljaCBkZWNvZGVzIHRvIDMvNS83LzcvOCwgbm90IDMvNC81LzcvOC4gVXNpbmcgdGhl CisJCSAqIGNvbmZpcm1lZC1yZWFsIHZhbHVlcyBmb3IgdGhpcyBvbmUgcmVnaXN0ZXIgaW5zdGVh ZCBvZiB0aGUKKwkJICogc291cmNlLWRlcml2ZWQgdGFibGUsIHNpbmNlIHJlYWwgc2lsaWNvbiBp cyB0aGUgaGlnaGVyLXRydXRoCisJCSAqIHNvdXJjZSB3aGVuIHRoZSB0d28gZGlzYWdyZWUuCisJ CSAqLworCQlhcV9zdHAyLmFxX3N0cF8xMXQxMiA9IGFxX3N0ZXBbMTFdOyBhcV9zdHAyLmFxX3N0 cF8xMnQxMyA9IDU7CisJCWFxX3N0cDIuYXFfc3RwXzEzdDE0ID0gNzsgYXFfc3RwMi5hcV9zdHBf MTR0MTUgPSBhcV9zdGVwWzE0XTsKKwkJYXFfc3RwMi5hcV9zdHBfYjE1ID0gYXFfc3RlcFsxNV07 CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19BUV9TVFAyLCBhcV9zdHAy LnZhbCk7CisKKwkJbWFkaV9zdF90aGQubWFkaV90aDAgPSA1OworCQltYWRpX3N0X3RoZC5tYWRp X3RoMSA9IDEyOworCQltYWRpX3N0X3RoZC5tYWRpX3RoMiA9IDIwOworCQlya3ZlbmNfd3JpdGVf cmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfTUFESV9TVF9USEQsIG1hZGlfc3RfdGhkLnZhbCk7CisK KwkJbWFkcF9zdF90aGQwLm1hZHBfdGgwID0gNCA8PCA0OworCQltYWRwX3N0X3RoZDAubWFkcF90 aDEgPSA5IDw8IDQ7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19NQURQ X1NUX1RIRDAsIG1hZHBfc3RfdGhkMC52YWwpOworCisJCW1hZHBfc3RfdGhkMS5tYWRwX3RoMiA9 IDE1IDw8IDQ7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19NQURQX1NU X1RIRDEsIG1hZHBfc3RfdGhkMS52YWwpOworCisJCWtsdXRfb2ZzdC5jaHJtX2tsdXRfb2ZzdCA9 IDY7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19LTFVUX09GU1QsIGts dXRfb2ZzdC52YWwpOworCX0KKworCS8qIFBBUkFNL1NRSTogbXBwJ3MgZGVmYXVsdC10dW5pbmcg Y29uc3RhbnQgdGFibGVzIC0tIHNlZSB0aGUgY29tbWVudAorCSAqIG9uIHJrdmVuY19wYXJfY2xh c3Mvcmt2ZW5jX3NxaV9jbGFzcyBhYm92ZS4gU0NMOiB0aGlzIGRyaXZlciBuZXZlcgorCSAqIHVz ZXMgYSBjdXN0b20gSC4yNjQgc2NhbGluZyBsaXN0LCBzbyB0aGUgd2hvbGUgY2xhc3MgaXMgemVy byAtLQorCSAqIHdyaXR0ZW4gZXhwbGljaXRseSBldmVyeSBmcmFtZSByYXRoZXIgdGhhbiByZWx5 aW5nIG9uIFBPUi9sZWZ0b3ZlcgorCSAqIHN0YXRlLCBzaW5jZSByZWFsIGhhcmR3YXJlIHN0aWxs IGV4cGVjdHMgdGhlIGNsYXNzIHRvIGhhdmUgYmVlbgorCSAqIHdyaXR0ZW4gKHNlZSBya3ZlbmMt cmVncy5oIGJhbm5lciBjb21tZW50KS4KKwkgKi8KKwlya3ZlbmNfd3JpdGVfdGFibGVfcmVsYXhl ZChkZXYsIFJLVkVOQ19SRUdfUEFSX09GRlNFVCwgcmt2ZW5jX3Bhcl9jbGFzcywKKwkJCQkgICBB UlJBWV9TSVpFKHJrdmVuY19wYXJfY2xhc3MpKTsKKwlya3ZlbmNfd3JpdGVfdGFibGVfcmVsYXhl ZChkZXYsIFJLVkVOQ19SRUdfU1FJX09GRlNFVCwgcmt2ZW5jX3NxaV9jbGFzcywKKwkJCQkgICBB UlJBWV9TSVpFKHJrdmVuY19zcWlfY2xhc3MpKTsKKwl7CisJCXUzMiBvZmY7CisKKwkJZm9yIChv ZmYgPSBSS1ZFTkNfUkVHX1NDTF9PRkZTRVQ7CisJCSAgICAgb2ZmIDwgUktWRU5DX1JFR19TQ0xf T0ZGU0VUICsgUktWRU5DX1JFR19TQ0xfU0laRTsgb2ZmICs9IDQpCisJCQlya3ZlbmNfd3JpdGVf cmVsYXhlZChkZXYsIG9mZiwgMCk7CisJfQorCisJLyogQVRSIChhbnRpLXJpbmdpbmcpIHdlaWdo dHMgKyBzbWVhcl9vcHRfY2ZnLnN0YXRlZF9tb2RlOiBwYXRjaCB0aGUKKwkgKiBoYW5kZnVsIG9m IFBBUkFNL1NRSSB3b3JkcyB0aGF0IGFyZSBnZW51aW5lbHkgSS9QLXNsaWNlLWRlcGVuZGVudCBv bgorCSAqIHRvcCBvZiB0aGUgc3RhdGljIGJsb2JzIGFib3ZlIC0tIHNlZSB0aGUgQ09SUkVDVElP TiBiYW5uZXIgY29tbWVudHMKKwkgKiBvbiBSS1ZFTkNfUkVHX0FUUl9USEQxIGFuZCBSS1ZFTkNf UkVHX1NNRUFSX09QVF9DRkcgaW4gcmt2ZW5jLXJlZ3MuaC4KKwkgKiBWYWx1ZXMgYmVsb3cgYXJl IG1wcCdzIHJlYWwgc2V0dXBfdmVwdTUxMF9hbnRpX3JpbmdpbmcoKS8KKwkgKiBzZXR1cF92ZXB1 NTEwX2FudGlfc21lYXIoKSBjb25zdGFudHMgZm9yIHRoaXMgZHJpdmVyJ3Mgbm9uLUlQQyBzY2Vu ZQorCSAqIG1vZGUsIGNvbmZpcm1lZCBleGFjdGx5IGFnYWluc3QgYSByZWFsIDMtZnJhbWUgd3Ry YWNlIGNhcHR1cmUuCisJICovCisJeworCQl1bmlvbiBya3ZlbmNfcmVnX2F0cl90aGQxIGF0cl90 aGQxID0geyAudmFsID0gMCB9OworCQl1bmlvbiBya3ZlbmNfcmVnX2F0cl93Z3QgYXRyX3dndDE2 ID0geyAudmFsID0gMCB9OworCQl1bmlvbiBya3ZlbmNfcmVnX2F0cl93Z3QgYXRyX3dndDggPSB7 IC52YWwgPSAwIH07CisJCXVuaW9uIHJrdmVuY19yZWdfYXRyX3dndCBhdHJfd2d0NCA9IHsgLnZh bCA9IDAgfTsKKwkJdW5pb24gcmt2ZW5jX3JlZ19zbWVhcl9vcHRfY2ZnIHNtZWFyX29wdF9jZmcg PSB7IC52YWwgPSAwIH07CisKKwkJYXRyX3RoZDEudGhkcXAgPSA0NTsKKwkJaWYgKGlzX2lkcikg eworCQkJYXRyX3RoZDEudGhkMiA9IDY7CisJCQlhdHJfd2d0MTYud2d0MCA9IDE2OyBhdHJfd2d0 MTYud2d0MSA9IDE2OyBhdHJfd2d0MTYud2d0MiA9IDE2OworCQkJYXRyX3dndDgud2d0MCA9IDE4 OyBhdHJfd2d0OC53Z3QxID0gMTc7IGF0cl93Z3Q4LndndDIgPSAxODsKKwkJCWF0cl93Z3Q0Lndn dDAgPSAxNjsgYXRyX3dndDQud2d0MSA9IDE2OyBhdHJfd2d0NC53Z3QyID0gMTY7CisJCX0gZWxz ZSB7CisJCQlhdHJfdGhkMS50aGQyID0gNzsKKwkJCWF0cl93Z3QxNi53Z3QwID0gMjM7IGF0cl93 Z3QxNi53Z3QxID0gMjI7IGF0cl93Z3QxNi53Z3QyID0gMjA7CisJCQlhdHJfd2d0OC53Z3QwID0g MjQ7IGF0cl93Z3Q4LndndDEgPSAyNDsgYXRyX3dndDgud2d0MiA9IDI0OworCQkJYXRyX3dndDQu d2d0MCA9IDIzOyBhdHJfd2d0NC53Z3QxID0gMjI7IGF0cl93Z3Q0LndndDIgPSAyMDsKKwkJfQor CQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfQVRSX1RIRDEsIGF0cl90aGQx LnZhbCk7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19BVFJfV0dUMTYs IGF0cl93Z3QxNi52YWwpOworCQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdf QVRSX1dHVDgsIGF0cl93Z3Q4LnZhbCk7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktW RU5DX1JFR19BVFJfV0dUNCwgYXRyX3dndDQudmFsKTsKKworCQlzbWVhcl9vcHRfY2ZnLnJkb19z bWVhcl9sdmwxNl9tdWx0aSA9IDE2OworCQlzbWVhcl9vcHRfY2ZnLnJkb19zbWVhcl9lbiA9IDA7 CisJCXNtZWFyX29wdF9jZmcuc3RhdGVkX21vZGUgPSAoaXNfaWRyIHx8IGgyNjQtPmxhc3RfZnJh bWVfd2FzX2lkcikgPyAxIDogMjsKKwkJLyogU3RhdGljIGFwcHJveGltYXRpb24gb2YgYSByZWFs IHBlci1ibG9jay1zdGF0aXN0aWNzLWRlcml2ZWQKKwkJICogdmFsdWUgLS0gc2VlIHRoZSBSS1ZF TkNfUkVHX1NNRUFSX09QVF9DRkcgY29tbWVudC4KKwkJICovCisJCXNtZWFyX29wdF9jZmcucmRv X3NtZWFyX2RsdF9xcCA9IGlzX2lkciA/IC0xIDogLTM7CisJCXJrdmVuY193cml0ZV9yZWxheGVk KGRldiwgUktWRU5DX1JFR19TTUVBUl9PUFRfQ0ZHLCBzbWVhcl9vcHRfY2ZnLnZhbCk7CisJfQor CisJLyogU2luZ2xlIHNsaWNlIHBlciBmcmFtZSBpbiB2MS4gKi8KKwlya3ZlbmNfd3JpdGVfcmVs YXhlZChkZXYsIFJLVkVOQ19SRUdfU0xJX1NQTFQsIHNsaV9zcGx0LnZhbCk7CisJcmt2ZW5jX3dy aXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX1NMSV9CWVRFLCAwKTsKKwlya3ZlbmNfd3JpdGVf cmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfU0xJX0NOVU0sIDApOworCisJLyogTW90aW9uLWVzdGlt YXRpb24gc2VhcmNoIGNvbmZpZyDigJQgd3JpdHRlbiB1bmNvbmRpdGlvbmFsbHkgYnkgbXBwCisJ ICogb24gZXZlcnkgZnJhbWUgcmVnYXJkbGVzcyBvZiBJL1AgKHNlZSBya3ZlbmMtcmVncy5oIGJh bm5lcgorCSAqIGNvbW1lbnQpOyB2YWx1ZXMgYXJlIG1wcCdzIG93biBoYXJkY29kZWQgY29uc3Rh bnRzLgorCSAqLworCXsKKwkJdW5pb24gcmt2ZW5jX3JlZ19tZV9ybmdlIG1lX3JuZ2UgPSB7IC52 YWwgPSAwIH07CisJCXVuaW9uIHJrdmVuY19yZWdfbWVfY2ZnIG1lX2NmZyA9IHsgLnZhbCA9IDAg fTsKKwkJdW5pb24gcmt2ZW5jX3JlZ19tZV9jYWNoIG1lX2NhY2ggPSB7IC52YWwgPSAwIH07CisK KwkJbWVfcm5nZS5jaW1lX3NyY2hfZHduaCA9IDE1OworCQltZV9ybmdlLmNpbWVfc3JjaF91cGgg PSAxNTsKKwkJbWVfcm5nZS5jaW1lX3NyY2hfcmd0dyA9IDEyOworCQltZV9ybmdlLmNpbWVfc3Jj aF9sZnR3ID0gMTI7CisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19NRV9S TkdFLCBtZV9ybmdlLnZhbCk7CisKKwkJbWVfY2ZnLnNyZ25fbWF4X251bSA9IDU0OworCQltZV9j ZmcuY2ltZV9kaXN0X3RocmUgPSAxMDI0OworCQltZV9jZmcucm1lX3NyY2hfaCA9IDM7CisJCW1l X2NmZy5ybWVfc3JjaF92ID0gMzsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNf UkVHX01FX0NGRywgbWVfY2ZnLnZhbCk7CisKKwkJbWVfY2FjaC5jaW1lX3plcm9fdGhyZSA9IDY0 OworCQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfTUVfQ0FDSCwgbWVfY2Fj aC52YWwpOworCX0KKworCS8qIE1hdGNoZXMgc2V0dXBfdmVwdTUxMF9yZG9fcHJlZCgpJ3MgZGVy aXZhdGlvbiBpbiB0aGUgdmVuZG9yIEhBTC4KKwkgKiBjaHJtX3NwY2wvY2N3YV9lL2F0cl9tdWx0 X3NlbF9lIGFyZSB1bmNvbmRpdGlvbmFsIDFzIGluIG1wcAorCSAqIHJlZ2FyZGxlc3Mgb2YgcHJv ZmlsZS9sZXZlbC90dW5lIGNvbmZpZyAtLSBzZWUgcmt2ZW5jLXJlZ3MuaC4KKwkgKi8KKwlyZG9f Y2ZnLnJlY3Rfc2l6ZSA9ICFpc19tYWluICYmIHJrdmVuY19oMjY0X2xldmVsX2lkY1toMjY0LT5s ZXZlbC0+dmFsXSA8PSAzMDsKKwlyZG9fY2ZnLnZsY19sbXQgPSAhaXNfbWFpbiAmJiAhY2FiYWM7 CisJcmRvX2NmZy5jaHJtX3NwY2wgPSAxOworCXJkb19jZmcuY2N3YV9lID0gMTsKKwlyZG9fY2Zn LmF0cl9tdWx0X3NlbF9lID0gMTsKKwlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19S RUdfUkRPX0NGRywgcmRvX2NmZy52YWwpOworCisJLyogbXBwIHNldHMgc3ludF9uYWwubmFsX3Jl Zl9pZGMgPSBzbGljZS0+bmFsX3JlZmVyZW5jZV9pZGMsIHdoaWNoIGlzCisJICogTk9UIGEgZmxh dCAxIGZvciBldmVyeSBmcmFtZSAtLSBhIHJlYWwgMy1mcmFtZSBjYXB0dXJlIHNob3dlZCAzIGZv cgorCSAqIHRoZSBJRFIgc2xpY2UgYW5kIDIgZm9yIFAgc2xpY2VzIChib3RoIHJlYWwgcmVmZXJl bmNlcywgbWF0Y2hpbmcKKwkgKiB0aGlzIGRyaXZlcidzIHVuY29uZGl0aW9uYWwgZW5jX3BpYy5j dXJfZnJtX3JlZj0xKS4gVGhpcyBkcml2ZXIKKwkgKiBwcmV2aW91c2x5IGhhcmRjb2RlZCAxIGZv ciBib3RoLCBhIHJlYWwgc3BlYy1jb21wbGlhbmNlIGdhcCBpbiB0aGUKKwkgKiBoYXJkd2FyZS1n ZW5lcmF0ZWQgc2xpY2UgTkFMIGhlYWRlciAobm90IGtub3duIHRvIGJlIGhhbmctcmVsYXRlZCAt LQorCSAqIHRoZSBoYXJkd2FyZSBqdXN0IGVtaXRzIHdoYXRldmVyIHZhbHVlIGl0J3MgZ2l2ZW4p LgorCSAqLworCXN5bnRfbmFsLm5hbF9yZWZfaWRjID0gaXNfaWRyID8gMyA6IDI7CisJc3ludF9u YWwubmFsX3VuaXRfdHlwZSA9IGlzX2lkciA/IDUgOiAxOworCXJrdmVuY193cml0ZV9yZWxheGVk KGRldiwgUktWRU5DX1JFR19TWU5UX05BTCwgc3ludF9uYWwudmFsKTsKKworCXN5bnRfc3BzLm1h eF9mbnVtID0gUktWRU5DX0gyNjRfTE9HMl9NQVhfRlJBTUVfTlVNOworCXN5bnRfc3BzLmRyY3Rf OHg4ID0gMTsKKwlzeW50X3Nwcy5tcG9jX2xtNCA9IFJLVkVOQ19IMjY0X0xPRzJfTUFYX1BPQ19M U0I7CisJc3ludF9zcHMucG9jX3R5cGUgPSAwOworCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwg UktWRU5DX1JFR19TWU5UX1NQUywgc3ludF9zcHMudmFsKTsKKworCXN5bnRfcHBzLmV0cHlfbW9k ZSA9IGNhYmFjOworCXN5bnRfcHBzLmNzaXBfZmxhZyA9IDA7CisJc3ludF9wcHMubnVtX3JlZjBf aWR4ID0gMDsKKwlzeW50X3Bwcy5udW1fcmVmMV9pZHggPSAwOworCXN5bnRfcHBzLnBpY19pbml0 X3FwID0gaDI2NC0+aV9xcC0+dmFsOworCXN5bnRfcHBzLmNiX29mc3QgPSAwOworCXN5bnRfcHBz LmNyX29mc3QgPSAwOworCXN5bnRfcHBzLmRiZl9jcF9mbGcgPSAxOworCXJrdmVuY193cml0ZV9y ZWxheGVkKGRldiwgUktWRU5DX1JFR19TWU5UX1BQUywgc3ludF9wcHMudmFsKTsKKworCXN5bnRf c2xpMC5zbGlfdHlwZSA9IGlzX2lkciA/IFJLVkVOQ19TTElfVFlQRV9JIDogUktWRU5DX1NMSV9U WVBFX1A7CisJc3ludF9zbGkwLnBwc19pZCA9IDA7CisJc3ludF9zbGkwLmNiY19pbml0X2lkYyA9 IDA7CisJc3ludF9zbGkwLmZybV9udW0gPSBoMjY0LT5mcmFtZV9udW07CisJcmt2ZW5jX3dyaXRl X3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX1NZTlRfU0xJMCwgc3ludF9zbGkwLnZhbCk7CisKKwlz eW50X3NsaTEuaWRyX3BpZCA9IGgyNjQtPmlkcl9waWNfaWQ7CisJc3ludF9zbGkxLnBvY19sc2Ig PSBoMjY0LT5wb2NfbHNiOworCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19T WU5UX1NMSTEsIHN5bnRfc2xpMS52YWwpOworCisJc3ludF9zbGkyLmRpc19kYmxrX2lkYyA9IDA7 CisJc3ludF9zbGkyLnNsaV9hbHBoX29mc3QgPSAwOworCXN5bnRfc2xpMi5zbGlfYmV0YV9vZnN0 ID0gMDsKKwlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfU1lOVF9TTEkyLCBz eW50X3NsaTIudmFsKTsKKworCWVuY19waWMuZW5jX3N0bmQgPSBSS1ZFTkNfRU5DX1NUTkRfSDI2 NDsKKwllbmNfcGljLmN1cl9mcm1fcmVmID0gMTsKKwllbmNfcGljLnBpY19xcCA9IHFwOworCWVu Y19waWMucmVjX2ZiY19kaXMgPSAwOworCS8qIG1wcCdzIHNldHVwX3ZlcHU1MTBfY29kZWMoKSBz ZXRzIHRoaXMgdW5jb25kaXRpb25hbGx5IHRvIDEgb24gZXZlcnkKKwkgKiBmcmFtZTsgY29uZmly bWVkIG5vdCBqdXN0IGZyb20gc291cmNlIGJ1dCBmcm9tIHRoZSByZWFsIHZlbmRvcgorCSAqIHd0 cmFjZSBjYXB0dXJlIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBJLWZyYW1lIGJyaW5nLXVwICgweDMw MCB3YXMKKwkgKiAweDQwMDAxOTFjIHRoZXJlLCBiaXQ0IHNldCkgLS0gdGhpcyBkcml2ZXIgaGFk IG5ldmVyIHNldCBpdCBhdCBhbGwuCisJICovCisJZW5jX3BpYy5ic19zY3AgPSAxOworCS8qIG1w cCdzIGhhbF9oMjY0ZV92ZXB1NTEwX2dlbl9yZWdzKCkgc2V0cyB0aGlzIHdoZW5ldmVyIGEgcmVh bAorCSAqIG1vdGlvbi1kZXRlY3Rpb24taW5mbyBidWZmZXIgaXMgcHJvdmlkZWQgKG1laV9zdG9y ID0gdGFzay0+bWRfaW5mbworCSAqID8gMSA6IDApIC0tIHRoaXMgZHJpdmVyIGFsd2F5cyBwcm92 aWRlcyBvbmUgKG1laXdfYnVmX2RtYSBiZWxvdyksCisJICogc28gdGhpcyBtdXN0IGFsd2F5cyBi ZSAxIHRvby4gUHJldmlvdXNseSBsZWZ0IDAgZGVzcGl0ZSB0aGUgYWRkcmVzcworCSAqIGJlaW5n IHZhbGlkOiBhIG1pc21hdGNoIGJldHdlZW4gImhlcmUncyBhIHJlYWwgYnVmZmVyIiBhbmQgImRv bid0CisJICogYWN0dWFsbHkgc3RvcmUgdG8gaXQiIHRoYXQgcGxhdXNpYmx5IG9ubHkgYml0ZXMg b25jZSB0aGUgTUUgZW5naW5lCisJICogaGFzIHJlYWwgbW90aW9uLXZlY3RvciBvdXRwdXQgdG8g d3JpdGUsIGkuZS4gZ2VudWluZSBpbnRlci1mcmFtZQorCSAqIChQLWZyYW1lKSBzZWFyY2ggLS0g YW4gSS1mcmFtZSdzIHRyaXZpYWwvYWJzZW50IE1FIGFjdGl2aXR5IG1heQorCSAqIG5ldmVyIGFj dHVhbGx5IGV4ZXJjaXNlIHRoZSB3cml0ZS1lbmFibGUgcGF0aCB0aGlzIGdhdGVzLgorCSAqLwor CWVuY19waWMubWVpX3N0b3IgPSAxOworCS8qIHNsZW5fZmlmbyBpcyBkZWxpYmVyYXRlbHkgbGVm dCAwIGZvciB0aGlzIEZJUlNUIEVOQ19QSUMgd3JpdGUuIFRoZQorCSAqIHZlbmRvciBhcm1zIHRo ZSBzbGljZS1sZW5ndGggRklGTyBpbiBhIHR3by1zdGVwIHNlcXVlbmNlOiBFTkNfUElDIGlzCisJ ICogd3JpdHRlbiB3aXRoIHNsZW5fZmlmbz0wIGR1cmluZyBzZXR1cCwgdGhlbiBSRS13cml0dGVu IHdpdGgKKwkgKiBzbGVuX2ZpZm89MSBhcyB0aGUgdmVyeSBsYXN0IHJlZ2lzdGVyIGJlZm9yZSBF TkNfU1RBUlQuIEEgcmVhbAorCSAqIG11bHRpLWZyYW1lIHd0cmFjZSBjYXB0dXJlIHNob3dzIHRo aXMgb24gRVZFUlkgZnJhbWUgKEkgYW5kIGJvdGggUCk6CisJICogMHgzMDAgd3JpdHRlbiB0d2lj ZSwgZS5nLiBQLWZyYW1lIGAweDAwMDAxYTFjYCAoc2xlbl9maWZvPTApIGVhcmx5CisJICogdGhl biBgMHg0MDAwMWExY2AgKHNsZW5fZmlmbz0xKSBhdCB0aGUga2ljay4gVGhpcyBkcml2ZXIgcHJl dmlvdXNseQorCSAqIHdyb3RlIEVOQ19QSUMgb25jZSB3aXRoIHNsZW5fZmlmbz0xIGFuZCB0aGVu IHdyb3RlIERVQUxfQ09SRSBhZnRlcgorCSAqIGl0IC0tIHNvIGl0IG5ldmVyIHJlcHJvZHVjZWQg dGhlIHZlbmRvcidzICJhcm0gdGhlIEZJRk8gYXMgdGhlIGZpbmFsCisJICogYWN0aW9uIGltbWVk aWF0ZWx5IGJlZm9yZSB0aGUga2ljayIgb3JkZXJpbmcuIFRoYXQgdHdvLXN0ZXAgYXJtIGlzCisJ ICogdGhlIHN0cm9uZ2VzdC1yZW1haW5pbmcgcmVnaXN0ZXItbGV2ZWwgZGlmZmVyZW5jZSBmb3Ig dGhlIFAtZnJhbWUKKwkgKiBoYW5nOiB0aGUgSS1mcmFtZSBsaW1wcyB0aHJvdWdoIHdpdGhvdXQg aXQsIGJ1dCBhIFAtZnJhbWUgcHJvZHVjZXMKKwkgKiBnZW51aW5lIHNsaWNlLUZJRk8gdHJhZmZp YyB0aGF0IG1heSBkZXBlbmQgb24gdGhlIEZJRk8gYmVpbmcgYXJtZWQKKwkgKiBsYXN0LiBTZWUg dGhlIGtpY2sgc2VxdWVuY2UgYmVsb3cuCisJICovCisJZW5jX3BpYy5zbGVuX2ZpZm8gPSAwOwor CisJLyogRmlyc3QgRU5DX1BJQyB3cml0ZSAoc2xlbl9maWZvPTApIGFuZCBEVUFMX0NPUkUsIGJv dGggaW4gdGhlCisJICogdmVuZG9yJ3MgZWFybHkgImNvbmZpZyIgcG9zaXRpb24gLS0gdGhlIGNh cHR1cmUgd3JpdGVzIDB4MzAwCisJICogKHNsZW5fZmlmbz0wKSBhbmQgMHgzMDQ9MHgxNCB0b2dl dGhlciBpbiB0aGUgRlJBTUUtY2xhc3MgcmVnaW9uLAorCSAqIHdlbGwgYmVmb3JlIHRoZSBraWNr LCBOT1QgaW50ZXJsZWF2ZWQgaW50byB0aGUga2ljayB0YWlsLgorCSAqCisJICogRFVBTF9DT1JF PTB4MTQ6IHNlZSB0aGUgdW5pb24gcmt2ZW5jX3JlZ19kdWFsX2NvcmUgY29tbWVudCBpbgorCSAq IHJrdmVuYy1yZWdzLmguIENvbmZpcm1lZCB3cml0dGVuIG9uY2UgcGVyIGZyYW1lIChzZXE2Mi83 MTQvMTM2NiBpbgorCSAqIHRoZSBtdWx0aS1mcmFtZSBjYXB0dXJlKSBldmVuIGZvciB0aGlzIGZ1 bGx5IHN0YW5kYWxvbmUgc2luZ2xlLWNvcmUKKwkgKiBlbmNvZGU7IGxlYXZpbmcgaXQgMCBkaWQg Tk9UIHN0b3AgdGhlIGlzb2xhdGVkIHJrX2lvbW11IGZhdWx0LgorCSAqLworCXJrdmVuY193cml0 ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19FTkNfUElDLCBlbmNfcGljLnZhbCk7CisJcmt2ZW5j X3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX0RVQUxfQ09SRSwgMHgxNCk7CisKKwkvKiBD b250cm9sLWNsYXNzIChWZXB1NTEwQ29udHJvbENmZykgc2V0dXAgKyB0aGUgdmVuZG9yJ3MgZXhh Y3Qga2ljaworCSAqIHRhaWwuIFRoZSBraWNrIG9yZGVyIGlzIHRyYW5zY3JpYmVkIHZlcmJhdGlt IGZyb20gYSByZWFsIG11bHRpLWZyYW1lCisJICogd3RyYWNlIGNhcHR1cmUgKHRoZSBsYXN0IHdy aXRlcyBvZiBldmVyeSBmcmFtZSwgaWRlbnRpY2FsIGFjcm9zcyBJCisJICogYW5kIGJvdGggUCBm cmFtZXMpOgorCSAqICAgRU5DX1dERygweDM4KSAtPiBEVkJNX0hPTEQoMHg3NCkgLT4gRU5DX0lE KDB4MzA4KSAtPiBJTlRfRU4oMHgyMCkKKwkgKiAgIC0+IEVOQ19QSUMoMHgzMDAsIHNsZW5fZmlm bz0xKSAtPiBFTkNfU1RBUlQoMHgxMCkKKwkgKiB3aXRoIEVOQ19QSUMgKEZJRk8tYXJtZWQpIGFz IHRoZSBmaW5hbCBjb25maWcgd3JpdGUgYmVmb3JlIHRoZSBraWNrLgorCSAqLworCXsKKwkJdW5p b24gcmt2ZW5jX3JlZ19pbnRfYml0cyBpbnRfZW4gPSB7IC52YWwgPSAwIH07CisJCXVuaW9uIHJr dmVuY19yZWdfb3B0X3N0cmcgb3B0X3N0cmcgPSB7IC52YWwgPSAwIH07CisJCXVuaW9uIHJrdmVu Y19yZWdfZHRybnNfbWFwIGR0cm5zX21hcCA9IHsgLnZhbCA9IDAgfTsKKwkJdW5pb24gcmt2ZW5j X3JlZ19lbmNfc3RydCBlbmNfc3RydCA9IHsgLnZhbCA9IDAgfTsKKworCQlpbnRfZW4uZW5jX2Rv bmUgPSAxOworCQlpbnRfZW4ubGt0X25vZGVfZG9uZSA9IDE7CisJCWludF9lbi5zY2xyX2RvbmUg PSAxOworCQlpbnRfZW4udnNsY19kb25lID0gMTsgLyogbWlycm9ycyBlbmNfcGljLnNsZW5fZmlm byBhcm1lZCBiZWxvdyAqLworCQlpbnRfZW4udmJzZl9vZmx3ID0gMTsKKwkJaW50X2VuLnZidWZf bGVucyA9IDE7CisJCWludF9lbi5lbmNfZXJyID0gMTsKKwkJaW50X2VuLnZzcmNfZXJyID0gMTsK KwkJaW50X2VuLndkZyA9IDE7CisJCWludF9lbi5sa3RfZXJyX2ludCA9IDE7CisJCWludF9lbi5s a3RfZXJyX3N0b3AgPSAxOworCQlpbnRfZW4ubGt0X2ZvcmNlX3N0b3AgPSAxOworCQlpbnRfZW4u anNsY19kb25lID0gMTsKKwkJaW50X2VuLmpic2Zfb2ZsdyA9IDE7CisJCWludF9lbi5qYnVmX2xl bnMgPSAxOworCisJCS8qIEVhcmx5IGNvbmZpZyB3cml0ZXMgKHRoZSB2ZW5kb3IgZW1pdHMgdGhl c2UgaW4gaXRzIGxpbmVhcgorCQkgKiBvZmZzZXQtb3JkZXJlZCBkdW1wLCB3ZWxsIGJlZm9yZSB0 aGUga2ljayk6IElOVF9NQVNLLCBPUFRfU1RSRywKKwkJICogRFRSTlNfTUFQLiBJTlRfRU4gaXRz ZWxmIGlzIGRlZmVycmVkIHRvIHRoZSBraWNrIHRhaWwgYmVsb3cgdG8KKwkJICogbWF0Y2ggdGhl IGNhcHR1cmUgKElOVF9FTiBpcyByZS13cml0dGVuIHJpZ2h0IGJlZm9yZSBFTkNfUElDKS4KKwkJ ICovCisJCXJrdmVuY193cml0ZV9yZWxheGVkKGRldiwgUktWRU5DX1JFR19JTlRfTUFTSywgMCk7 CisKKwkJb3B0X3N0cmcuY2tlID0gMTsKKwkJb3B0X3N0cmcucmVzZXRuX2h3X2VuID0gMTsKKwkJ cmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBSS1ZFTkNfUkVHX09QVF9TVFJHLCBvcHRfc3RyZy52 YWwpOworCisJCWR0cm5zX21hcC5ic3dfYnVzX2VkaW4gPSA3OworCQlya3ZlbmNfd3JpdGVfcmVs YXhlZChkZXYsIFJLVkVOQ19SRUdfRFRSTlNfTUFQLCBkdHJuc19tYXAudmFsKTsKKworCQkvKiAt LS0tIGV4YWN0IHZlbmRvciBraWNrIHRhaWwgLS0tLSAqLworCQlya3ZlbmNfd3JpdGUoZGV2LCBS S1ZFTkNfUkVHX0VOQ19XREcsIHJrdmVuY19jYWxjX3dkZyhkZXYsIHdpZHRoLCBoZWlnaHQpKTsK KwkJcmt2ZW5jX3ZlcHU1MTBfcXVpcmsoZGV2KTsgLyogRFZCTV9IT0xEKDB4NzQpICsgRU5DX0lE KDB4MzA4KSAqLworCQlya3ZlbmNfd3JpdGVfcmVsYXhlZChkZXYsIFJLVkVOQ19SRUdfSU5UX0VO LCBpbnRfZW4udmFsKTsKKworCQkvKiBGaW5hbCBFTkNfUElDIHJlLXdyaXRlIHdpdGggc2xlbl9m aWZvPTEgLS0gYXJtcyB0aGUgc2xpY2UtbGVuZ3RoCisJCSAqIEZJRk8gYXMgdGhlIHZlcnkgbGFz dCBhY3Rpb24gYmVmb3JlIEVOQ19TVEFSVCwgbWF0Y2hpbmcgdGhlCisJCSAqIGNhcHR1cmUgZXhh Y3RseS4gVGhpcyBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlIHR3by1zdGVwIGFybS4KKwkJICov CisJCWVuY19waWMuc2xlbl9maWZvID0gMTsKKwkJcmt2ZW5jX3dyaXRlX3JlbGF4ZWQoZGV2LCBS S1ZFTkNfUkVHX0VOQ19QSUMsIGVuY19waWMudmFsKTsKKworCQl3bWIoKTsgLyogYWxsIHRhc2sg cmVnaXN0ZXJzIHZpc2libGUgYmVmb3JlIHRoZSBraWNrIGJlbG93ICovCisKKwkJZW5jX3N0cnQu bGt0X251bSA9IDA7CisJCWVuY19zdHJ0LnZlcHVfY21kID0gUktWRU5DX1ZFUFVfQ01EX0VOQzsK KwkJcmt2ZW5jX3dyaXRlKGRldiwgUktWRU5DX1JFR19FTkNfU1RBUlQsIGVuY19zdHJ0LnZhbCk7 CisJfQorfQorCitzdGF0aWMgdm9pZCBya3ZlbmNfaDI2NF9kb25lKHN0cnVjdCBya3ZlbmNfY3R4 ICpjdHgsIGVudW0gdmIyX2J1ZmZlcl9zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgcmt2ZW5jX2Rl diAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHJrdmVuY19oMjY0X2N0eCAqaDI2NCA9ICZjdHgt PmgyNjQ7CisJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqZHN0X2J1ZiA9IHJrdmVuY19nZXRfZHN0 X2J1ZihjdHgpOworCWJvb2wgaXNfaWRyID0gaDI2NC0+Z29wX3BvcyA9PSAwOworCisJaWYgKHN0 YXRlID09IFZCMl9CVUZfU1RBVEVfRE9ORSkgeworCQl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbiA9 IGlzX2lkciA/IGgyNjQtPnNwc19wcHNfbGVuIDogMDsKKwkJdTMyIGh3X2xlbiA9IHJrdmVuY19y ZWFkKGRldiwgUktWRU5DX1JFR19TVF9CU19MRU5HVEgpOworCisJCXZiMl9zZXRfcGxhbmVfcGF5 bG9hZCgmZHN0X2J1Zi0+dmIyX2J1ZiwgMCwgaGVhZGVyX2xlbiArIGh3X2xlbik7CisJCWRzdF9i dWYtPmZsYWdzIHw9IGlzX2lkciA/IFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUUgOiBWNEwyX0JVRl9G TEFHX1BGUkFNRTsKKworCQloMjY0LT5mcmFtZV9udW0gPSAoaDI2NC0+ZnJhbWVfbnVtICsgMSkg JgorCQkJCSAgR0VOTUFTSyhSS1ZFTkNfSDI2NF9MT0cyX01BWF9GUkFNRV9OVU0gKyAzLCAwKTsK KwkJaDI2NC0+cG9jX2xzYiA9IChoMjY0LT5wb2NfbHNiICsgMikgJgorCQkJCUdFTk1BU0soUktW RU5DX0gyNjRfTE9HMl9NQVhfUE9DX0xTQiArIDMsIDApOworCQloMjY0LT5sYXN0X2ZyYW1lX3dh c19pZHIgPSBpc19pZHI7CisJCWlmICgrK2gyNjQtPmdvcF9wb3MgPj0gaDI2NC0+Z29wX3NpemUt PnZhbCkKKwkJCWgyNjQtPmdvcF9wb3MgPSAwOworCQlpZiAoaDI2NC0+Z29wX3BvcyA9PSAwKQor CQkJaDI2NC0+aWRyX3BpY19pZCsrOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBya3Zl bmNfY29kZWRfZm10X29wcyBya3ZlbmNfaDI2NF9vcHMgPSB7CisJLmluaXRfY3RybHMgPSBya3Zl bmNfaDI2NF9pbml0X2N0cmxzLAorCS5zdGFydCA9IHJrdmVuY19oMjY0X3N0YXJ0LAorCS5zdG9w ID0gcmt2ZW5jX2gyNjRfc3RvcCwKKwkucnVuID0gcmt2ZW5jX2gyNjRfcnVuLAorCS5kb25lID0g cmt2ZW5jX2gyNjRfZG9uZSwKK307CisKK2NvbnN0IHN0cnVjdCBya3ZlbmNfY29kZWRfZm10X2Rl c2Mgcmt2ZW5jX2gyNjRfZm10X2Rlc2MgPSB7CisJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9IMjY0 LAorCS5mcm1zaXplID0geworCQkuZnJtc2l6ZV9taW5fd2lkdGggPSAxNzYsCisJCS5mcm1zaXpl X21heF93aWR0aCA9IDQwOTYsCisJCS5mcm1zaXplX3N0ZXBfd2lkdGggPSAyLAorCQkuZnJtc2l6 ZV9taW5faGVpZ2h0ID0gMTQ0LAorCQkuZnJtc2l6ZV9tYXhfaGVpZ2h0ID0gMjU2MCwKKwkJLmZy bXNpemVfc3RlcF9oZWlnaHQgPSAyLAorCX0sCisJLm9wcyA9ICZya3ZlbmNfaDI2NF9vcHMsCit9 OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9ya3ZlbmMvcmt2 ZW5jLXJlZ3MuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmt2ZW5jL3JrdmVu Yy1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4zNTNiYTNlYmEK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JrdmVu Yy9ya3ZlbmMtcmVncy5oCkBAIC0wLDAgKzEsOTI5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCAqLworLyoKKyAqIFJvY2tjaGlwIFZFUFU1MTAgKFJLMzU3NikgaGFyZHdh cmUgdmlkZW8gZW5jb2RlciByZWdpc3RlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDI2IEpp YXhpbmcgSHUgPGdhaGluZ0BnYWhpbmd3b28uY29tPgorICoKKyAqIEZpZWxkIGxheW91dCBjcm9z cy1jaGVja2VkIGFnYWluc3QgUm9ja2NoaXAncyBvd24gb3Blbi1zb3VyY2UgdXNlcnNwYWNlCisg KiBjb2RlYyBsaWJyYXJ5IChnaXRodWIuY29tL3JvY2tjaGlwLWxpbnV4L21wcCwKKyAqIG1wcC9o YWwvcmtlbmMve2NvbW1vbi92ZXB1NTEwX2NvbW1vbi5oLGgyNjRlL2hhbF9oMjY0ZV92ZXB1NTEw X3JlZy5ofSwKKyAqIEFwYWNoZS0yLjApIOKAlCB0aGF0IGxpYnJhcnkgaXMgdGhlIG9ubHkgcGxh Y2UgdGhlIFJDL1BJQy9QQVJBTSByZWdpc3RlcgorICogZmllbGQgbmFtZXMgZXhpc3Q7IHRoZSBk b3duc3RyZWFtIHJvY2tjaGlwLWxpbnV4L2tlcm5lbCBtcHBfcmt2ZW5jMi5jCisgKiBkcml2ZXIg dHJlYXRzIHRob3NlIGNsYXNzZXMgYXMgYW4gb3BhcXVlIGJ5dGUgYmxvYiBhbmQgbmV2ZXIgbmFt ZXMgYQorICogc2luZ2xlIGZpZWxkIGJleW9uZCB0aGUgaGFuZGZ1bCBvZiBjb250cm9sL3N0YXR1 cyByZWdpc3RlcnMgYmVsb3cuCisgKgorICogUmVnaXN0ZXIgY2xhc3NlcyAoYnl0ZSBvZmZzZXRz IHdpdGhpbiB0aGUgcGVyLWNvcmUgTU1JTyB3aW5kb3cpOgorICogICBCQVNFICAgMHgwMDAwLTB4 MDEyMCAgY29udHJvbCAvIElSUSAvIHdhdGNoZG9nCisgKiAgIEZSQU1FICAweDAyNzAtMHgwM2Y0 ICBwZXItZnJhbWUgcGljdHVyZSBjb25maWcgKyBILjI2NCBzeW50YXgKKyAqICAgUkNfUk9JIDB4 MTAwMC0weDExMGMgIFJPSSAvIGFkYXB0aXZlLXF1YW50IGhlbHBlciB0YWJsZXMKKyAqICAgUEFS QU0gIDB4MTcwMC0weDE5Y2MgIFJETy9NRS9xdWFudCB0dW5pbmcgdGFibGVzCisgKiAgIFNRSSAg ICAweDIwMDAtMHgyMTJjICBzdWJqZWN0aXZlLXF1YWxpdHkgdHVuaW5nCisgKiAgIFNDTCAgICAw eDIyMDAtMHgyNTg0ICBzY2FsaW5nIGxpc3RzCisgKiAgIFNUQVRVUyAweDQwMDAtMHg0MjRjICBy ZWFkLW9ubHkgc3RhdHVzCisgKiAgIERFQlVHICAweDUwMDAtMHg1MjMwICBkZWJ1ZyBjb3VudGVy cworICoKKyAqIElNUE9SVEFOVCDigJQgUEFSQU0vU1FJL1NDTCBhbmQgdGhlIFJDX1JPSSByY19h ZGovcmNfZHRoZCB0aHJlc2hvbGQgbGFkZGVyCisgKiBhcmUgTk9UIG9wdGlvbmFsIGRlc3BpdGUg bXBwJ3Mgb3duIEZJWFFQLW1vZGUgY29kZSBwYXRoIG5ldmVyIHRvdWNoaW5nCisgKiB0aGVtIChy Yy0+cmNfbW9kZSA9PSBNUFBfRU5DX1JDX01PREVfRklYUVAgcmV0dXJucyBlYXJseSBmcm9tCisg KiBzZXR1cF92ZXB1NTEwX3JjX2Jhc2UoKSBiZWZvcmUgc2V0dGluZyByY19hZGowLzEvcmNfZHRo ZF8wXzgsIGFuZAorICogbm90aGluZyBpbiBtcHAgZXZlciBkb2N1bWVudHMgUEFSQU0vU1FJIGFz IHJlcXVpcmVkKS4gQm9hcmQgYnJpbmctdXAKKyAqIHNwZW50IGEgbG9uZyB0aW1lIG9uIGV4YWN0 bHkgdGhpcyBhc3N1bXB0aW9uOiBhIGZyb20tc2NyYXRjaCB0ZXN0IGNsaWVudAorICogcmVwcm9k dWNlZCB0aGUgZHJpdmVyJ3MgZXhhY3QgaGFyZHdhcmUtaW50ZXJuYWwtd2F0Y2hkb2cgc3RhbGwK KyAqIChpbnRfc3RhLndkZ19zdGEsIH41MG1zIGFmdGVyIGtpY2spIHdpdGggdGhlc2UgY2xhc3Nl cyBsZWZ0IGF0IHRoZWlyCisgKiBQT1IvbmV2ZXItd3JpdHRlbiBzdGF0ZSwgYnl0ZS1mb3ItYnl0 ZSBtYXRjaGVkIGV2ZXJ5dGhpbmcgZWxzZSBhZ2FpbnN0IGEKKyAqIHJlYWwgcm9ja2NoaXAtbGlu dXgvbXBwIGBtcGlfZW5jX3Rlc3RgIGNhcHR1cmUsIGFuZCB0aGUgc3RhbGwgcGVyc2lzdGVkCisg KiB1bnRpbCBQQVJBTStTUUkrU0NMIHdlcmUgd3JpdHRlbiBhbmQgdGhlIFJDX1JPSSB0aHJlc2hv bGQgbGFkZGVyIHdhcworICogcG9wdWxhdGVkIChyY19kdGhkXzBfOCBsZWZ0IGF0IDAgaW5zdGVh ZCBvZiB0aGUgcmVhbCAibmV2ZXIgdHJpZ2dlciIKKyAqIDB4N0ZGRkZGRkYgc2VudGluZWwgaXMg aXRzZWxmIHN1ZmZpY2llbnQgdG8gcmVwcm9kdWNlIHRoZSBzdGFsbCBhbG9uZSkuCisgKiBXaGF0 ZXZlciBpbnRlcm5hbCBlbmdpbmUgY29uc3VtZXMgdGhlc2Ug4oCUIGFsbW9zdCBjZXJ0YWlubHkg dGhlIFJETy8KKyAqIG1vZGUtZGVjaXNpb24gYW5kIGFkYXB0aXZlLXF1YW50IGhhcmR3YXJlIGJs b2NrcyDigJQgYXBwZWFycyB0byBuZWVkIGEKKyAqIHZhbGlkLCBub24tZGVnZW5lcmF0ZSBjb25m aWd1cmF0aW9uIHRvIGNvbXBsZXRlIGF0IGFsbCwgbm90IGp1c3QgdG8KKyAqIGNvbXB1dGUgZ29v ZCBvdXRwdXQuIFNlZSBya3ZlbmMtaDI2NC5jIGZvciB3aGF0J3MgYWN0dWFsbHkgd3JpdHRlbiBh bmQKKyAqIHdoeSAoUEFSL1NRSSBhcmUgbXBwJ3MgKmRlZmF1bHQtdHVuaW5nKiBjb25zdGFudCB0 YWJsZXMsIG5vdCBwZXItZnJhbWUKKyAqIGNvbnRlbnQtZGVyaXZlZCwgc28gaGFyZGNvZGluZyB0 aGVtIGlzIGEgZGVsaWJlcmF0ZSB2MSBjaG9pY2UsIG5vdCBhCisgKiBwbGFjZWhvbGRlcikuCisg KgorICogRWFjaCBwZXItZnJhbWUgcmVnaXN0ZXIgYmVsb3cgaXMgYSB1bmlvbiBvZiBpdHMgbmFt ZWQgYml0ZmllbGRzIGFuZCBhCisgKiByYXcgdTMyIC52YWwsIHNvIGNhbGxlcnMgYnVpbGQgdGhl IHZhbHVlIGZpZWxkLWJ5LWZpZWxkIGFuZCB3cml0ZSBpdAorICogd2l0aCBhIHNpbmdsZSBya3Zl bmNfd3JpdGUoZGV2LCBSS1ZFTkNfUkVHXyosIHJlZy52YWwpLgorICovCisKKyNpZm5kZWYgUktW RU5DX1JFR1NfSF8KKyNkZWZpbmUgUktWRU5DX1JFR1NfSF8KKworI2luY2x1ZGUgPGxpbnV4L2Jp dHMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFJLVkVOQ19SRUdfRlJB TUVfT0ZGU0VUCQkweDI3MAorI2RlZmluZSBSS1ZFTkNfUkVHX1NUQVRVU19PRkZTRVQJMHg0MDAw CisjZGVmaW5lIFJLVkVOQ19SRUdfREVCVUdfT0ZGU0VUCQkweDUwMDAKKworLyogLS0tLSBCQVNF IGNsYXNzICgweDAwMDAtMHgwMTIwKSwgYS5rLmEuIFZlcHU1MTBDb250cm9sQ2ZnIGluIG1wcC4K KyAqIEJpdCBsYXlvdXQgYmVsb3cgaXMgdHJhbnNjcmliZWQgZGlyZWN0bHkgZnJvbQorICogbXBw L2hhbC9ya2VuYy9jb21tb24vdmVwdTUxMF9jb21tb24uaCAoVmVwdTUxMENvbnRyb2xDZmdfdCkg 4oCUIHRoaXMKKyAqIHN1cGVyc2VkZXMgYW4gZWFybGllciwgbGVzcyBwcmVjaXNlIHJlYWRpbmcg b2YgdGhlc2Ugc2FtZSByZWdpc3RlcnMKKyAqIGZyb20gdGhlIGRvd25zdHJlYW0gdmVuZG9yICpr ZXJuZWwqIGRyaXZlcidzIGNvbW1lbnRzICh3aGljaCBnb3QgdGhlCisgKiBFTkNfV0RHIGZpZWxk IHdpZHRoL3Bvc2l0aW9uIGFuZCBzZXZlcmFsIElOVF8qIGJpdCBtZWFuaW5ncyB3cm9uZykuCisg Ki8KKyNkZWZpbmUgUktWRU5DX1JFR19WRVJTSU9OCQkweDAwMDAJLyogcmVhZC1vbmx5IElQIGlk ZW50aWZpY2F0aW9uICovCisjZGVmaW5lIFJLVkVOQ19SRUdfRU5DX1NUQVJUCQkweDAwMTAJLyog ZW5jX3N0cnQgKi8KKyNkZWZpbmUgUktWRU5DX1JFR19FTkNfQ0xSCQkweDAwMTQJLyogYml0MCBz YWZlX2NsciwgYml0MSBmb3JjZV9jbHIgKi8KKyNkZWZpbmUgUktWRU5DX0VOQ19DTFJfU0FGRQkJ MHgxCisjZGVmaW5lIFJLVkVOQ19FTkNfQ0xSX0ZPUkNFCQkweDIKKyNkZWZpbmUgUktWRU5DX1ND TFJfRE9ORV9TVEEJCUJJVCgyKQkvKiBpbnRfc3RhIHNjbHJfZG9uZSwgc2V0IHdoZW4gc2FmZS1j bHIgY29tcGxldGVzICovCisjZGVmaW5lIFJLVkVOQ19SRUdfVlNfTERMWQkJMHgwMDE4CisKK3Vu aW9uIHJrdmVuY19yZWdfdmVyc2lvbiB7CisJc3RydWN0IHsKKwkJdTMyIHN1Yl92ZXI6ODsKKwkJ dTMyIGgyNjRfY2FwOjE7CisJCXUzMiBoZXZjX2NhcDoxOworCQl1MzIgcmVzZXJ2ZWQ6MjsKKwkJ dTMyIHJlc19jYXA6NDsKKwkJdTMyIG9zZF9jYXA6MjsKKwkJdTMyIGZpbHRyX2NhcDoyOworCQl1 MzIgYmZybV9jYXA6MTsKKwkJdTMyIGZiY19jYXA6MjsKKwkJdTMyIHJlc2VydmVkMToxOworCQl1 MzIgaXBfaWQ6ODsKKwl9OworCXUzMiB2YWw7Cit9OworI2RlZmluZSBSS1ZFTkNfUkVHX0lOVF9F TgkJMHgwMDIwCisjZGVmaW5lIFJLVkVOQ19SRUdfSU5UX01BU0sJCTB4MDAyNAorI2RlZmluZSBS S1ZFTkNfUkVHX0lOVF9DTFIJCTB4MDAyOAorI2RlZmluZSBSS1ZFTkNfUkVHX0lOVF9TVEEJCTB4 MDAyYworI2RlZmluZSBSS1ZFTkNfUkVHX0RUUk5TX01BUAkJMHgwMDMwCisjZGVmaW5lIFJLVkVO Q19SRUdfRFRSTlNfQ0ZHCQkweDAwMzQKKyNkZWZpbmUgUktWRU5DX1JFR19FTkNfV0RHCQkweDAw MzgKKyNkZWZpbmUgUktWRU5DX1JFR19PUFRfU1RSRwkJMHgwMDU0CisKKy8qIFZFUFU1MTAtb25s eSAiRFZCTSBob2xkIiBxdWlyayAoc2VlIHJrdmVuY192ZXB1NTEwX3F1aXJrKCkgaW4KKyAqIHJr dmVuYy1oMjY0LmMpLiBObyBmaWVsZCBuYW1lIGV4aXN0cyBpbiB0aGUgdmVuZG9yIEhBTCBmb3Ig dGhpcyDigJQgaXQgaXMKKyAqIG5vdCB3cml0dGVuIGJ5IHJvY2tjaGlwLWxpbnV4L21wcCBhdCBh bGwsIG9ubHkgYnkgdGhlIGRvd25zdHJlYW0ga2VybmVsCisgKiBkcml2ZXIsIHNvIGl0cyBleGFj dCBwdXJwb3NlIGJleW9uZCB0aGUgdmVuZG9yIGNvbW1lbnQgKCJ2ZXB1IHdpbGwgaG9sZAorICog d2hlbiBlbmNvZGluZyBmaW5pc2giKSBpcyB1bnZlcmlmaWVkLiBUcmVhdGVkIGFzIGFuIG9wYXF1 ZSByZXF1aXJlZAorICogd3JpdGUgc2VxdWVuY2UuCisgKi8KKyNkZWZpbmUgUktWRU5DX1JFR19E VkJNX0hPTEQJCTB4MDA3NAorI2RlZmluZSBSS1ZFTkNfRFZCTV9IT0xEX1ZBTAkJMHgyMworCisv KiBlbmNfc3RydCAoMHgwMDEwKTogdGhlIGFjdHVhbCAiZ28iIHRyaWdnZXIgaXMgdGhlIDMtYml0 IHZlcHVfY21kIGZpZWxkCisgKiBhdCBiaXRzWzEwOjhdLCBOT1QgdGhlIHdob2xlIHJlZ2lzdGVy IHNldCB0byAxIOKAlCB2ZXB1X2NtZD0xIGlzIG1wcCdzCisgKiBzZXR1cF92ZXB1NTEwX25vcm1h bCgpOyBsa3RfbnVtIChiaXRzWzc6MF0pIGlzIHRoZSBsaW5rLXRhYmxlIHRhc2sKKyAqIGNvdW50 LCBpcnJlbGV2YW50IGhlcmUgc2luY2UgdjEgZG9lc24ndCB1c2UgbGluay9DQ1UgbW9kZS4KKyAq LwordW5pb24gcmt2ZW5jX3JlZ19lbmNfc3RydCB7CisJc3RydWN0IHsKKwkJdTMyIGxrdF9udW06 ODsKKwkJdTMyIHZlcHVfY21kOjM7CisJCXUzMiByZXNlcnZlZDoyMTsKKwl9OworCXUzMiB2YWw7 Cit9OworCisjZGVmaW5lIFJLVkVOQ19WRVBVX0NNRF9FTkMJCTEKKworLyogaW50X2VuIC8gaW50 X21zayAvIGludF9jbHIgLyBpbnRfc3RhIGFsbCBzaGFyZSB0aGlzIGJpdCBsYXlvdXQuICovCit1 bmlvbiBya3ZlbmNfcmVnX2ludF9iaXRzIHsKKwlzdHJ1Y3QgeworCQl1MzIgZW5jX2RvbmU6MTsK KwkJdTMyIGxrdF9ub2RlX2RvbmU6MTsKKwkJdTMyIHNjbHJfZG9uZToxOworCQl1MzIgdnNsY19k b25lOjE7CisJCXUzMiB2YnNmX29mbHc6MTsKKwkJdTMyIHZidWZfbGVuczoxOworCQl1MzIgZW5j X2VycjoxOworCQl1MzIgdnNyY19lcnI6MTsKKwkJdTMyIHdkZzoxOworCQl1MzIgbGt0X2Vycl9p bnQ6MTsKKwkJdTMyIGxrdF9lcnJfc3RvcDoxOworCQl1MzIgbGt0X2ZvcmNlX3N0b3A6MTsKKwkJ dTMyIGpzbGNfZG9uZToxOworCQl1MzIgamJzZl9vZmx3OjE7CisJCXUzMiBqYnVmX2xlbnM6MTsK KwkJdTMyIGR2Ym1fZXJyOjE7CisJCXUzMiByZXNlcnZlZDoxNjsKKwl9OworCXUzMiB2YWw7Cit9 OworCisvKiBIYXJkLWVycm9yIGJpdHMgd29ydGggYWJvcnRpbmcgdGhlIGZyYW1lIG92ZXI7IGVu Y19kb25lL2xrdF9ub2RlX2RvbmUvCisgKiBzY2xyX2RvbmUvdnNsY19kb25lL3ZidWZfbGVucy9q c2xjX2RvbmUvamJzZl9vZmx3L2pidWZfbGVucyBhcmUgZWl0aGVyCisgKiBub3JtYWwgY29tcGxl dGlvbiBzaWduYWxzIG9yIEpQRUctb25seSAoaGFybWxlc3Mgbm8tb3BzIGZvciBILjI2NCkuCisg Ki8KKyNkZWZpbmUgUktWRU5DX0lOVF9FUlJPUl9NQVNLIFwKKwkoQklUKDQpIC8qIHZic2Zfb2Zs dyAqLyB8IEJJVCg2KSAvKiBlbmNfZXJyICovIHwgQklUKDcpIC8qIHZzcmNfZXJyICovIHwgXAor CSBCSVQoOCkgLyogd2RnICovIHwgQklUKDkpIC8qIGxrdF9lcnJfaW50ICovIHwgQklUKDEwKSAv KiBsa3RfZXJyX3N0b3AgKi8gfCBcCisJIEJJVCgxMSkgLyogbGt0X2ZvcmNlX3N0b3AgKi8gfCBC SVQoMTUpIC8qIGR2Ym1fZXJyICovKQorCit1bmlvbiBya3ZlbmNfcmVnX2VuY193ZGcgeworCXN0 cnVjdCB7CisJCXUzMiB2c19sb2FkX3RoZDoyNDsKKwkJdTMyIHJlc2VydmVkOjg7CisJfTsKKwl1 MzIgdmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19vcHRfc3RyZyB7CisJc3RydWN0IHsKKwkJ dTMyIGNrZToxOworCQl1MzIgcmVzZXRuX2h3X2VuOjE7CisJCXUzMiByZnByX2Vycl9lOjE7CisJ CXUzMiBzcmFtX2NrZ19lbjoxOworCQl1MzIgbGlua19lcnJfc3RvcDoxOworCQl1MzIgcmVzZXJ2 ZWQ6Mjc7CisJfTsKKwl1MzIgdmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19kdHJuc19tYXAg eworCXN0cnVjdCB7CisJCXUzMiBqcGVnX2J1c19lZGluOjQ7CisJCXUzMiBzcmNfYnVzX2VkaW46 NDsKKwkJdTMyIG1laXdfYnVzX2VkaW46NDsKKwkJdTMyIGJzd19idXNfZWRpbjo0OworCQl1MzIg cmVzZXJ2ZWQ6ODsKKwkJdTMyIGxrdHdfYnVzX2VkaW46NDsKKwkJdTMyIHJlY19uZmJjX2J1c19l ZGluOjQ7CisJfTsKKwl1MzIgdmFsOworfTsKKworLyogLS0tLSBGUkFNRSBjbGFzcyAoMHgwMjcw LTB4MDNmNCksIGZpZWxkcyBtaXJyb3IgVmVwdTUxMEZybUNvbW1vbiArCisgKiB0aGUgSC4yNjQt c3BlY2lmaWMgdHJhaWxlciBmcm9tIEgyNjRlVmVwdTUxMEZyYW1lIGluIG1wcC4KKyAqLwordW5p b24gcmt2ZW5jX3JlZ19lbmNfcGljIHsKKwlzdHJ1Y3QgeworCQl1MzIgZW5jX3N0bmQ6MjsJCQkv KiAwID0gSC4yNjQgKi8KKwkJdTMyIGN1cl9mcm1fcmVmOjE7CisJCXUzMiBtZWlfc3RvcjoxOwor CQl1MzIgYnNfc2NwOjE7CisJCXUzMiByZXNlcnZlZDA6MzsKKwkJdTMyIHBpY19xcDo2OworCQl1 MzIgbnVtX3BpY190b3RfY3VyX2hldmM6NTsKKwkJdTMyIGxvZzJfY3R1X251bV9oZXZjOjU7CisJ CXUzMiByZXNlcnZlZDE6NjsKKwkJdTMyIHNsZW5fZmlmbzoxOworCQl1MzIgcmVjX2ZiY19kaXM6 MTsKKwl9OworCXUzMiB2YWw7Cit9OworCisjZGVmaW5lIFJLVkVOQ19FTkNfU1RORF9IMjY0CQkw CisKKy8qIGR1YWxfY29yZSAoMHgzMDQpIGlzIHRoZSBDQ1UgY3Jvc3MtY29yZSBkdWFsLWVuY29k ZXIgaGFuZHNoYWtlIHJlZ2lzdGVyCisgKiAoRENIU19SRUdfT0ZGU0VUIGluIHRoZSBkb3duc3Ry ZWFtIHZlbmRvciBrZXJuZWwncyBtcHBfcmt2ZW5jMi5jKSAtLQorICogdXNlZCBmb3IgY2hhaW5p bmcgYSBmcmFtZSdzIGVuY29kZSBhY3Jvc3MgYm90aCBWRVBVNTEwIGNvcmVzLiBUaGlzCisgKiBk cml2ZXIgZGVsaWJlcmF0ZWx5IGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQgKHNlZSB0aGUgYXJjaGl0 ZWN0dXJlCisgKiBjb21tZW50IGluIHJrdmVuYy5jKSwgYnV0IHRoZSByZWdpc3RlciBpcyBzdGls bCB3cml0dGVuIGV4cGxpY2l0bHkgZXZlcnkKKyAqIGZyYW1lIHRvIGEgZGVmaW5lZCB2YWx1ZSAo ZGNoc190eGU9MSwgaS5lLiAweDE0KTogdGhlIHZlbmRvciBrZXJuZWwncworICogb3duIHJrdmVu YzJfcGF0Y2hfZGNocygpIHdyaXRlcyBleGFjdGx5IHRoaXMgb24gZXZlcnkgdGFzaywgZXZlbiBm dWxseQorICogc3RhbmRhbG9uZSBub24tY2hhaW5lZCBvbmVzIChjb25maXJtZWQgYWdhaW5zdCBh IHJlYWwgcmVnaXN0ZXItd3JpdGUKKyAqIHRyYWNlIG9mIHRoZSB2ZW5kb3Igc3RhY2spLCBzbyBh IFBPUi9sZWZ0b3ZlciB2YWx1ZSBpcyBub3Qgd2hhdCB0aGUKKyAqIGhhcmR3YXJlIGV4cGVjdHMu CisgKi8KK3VuaW9uIHJrdmVuY19yZWdfZHVhbF9jb3JlIHsKKwlzdHJ1Y3QgeworCQl1MzIgZGNo c190eGlkOjI7CisJCXUzMiBkY2hzX3J4aWQ6MjsKKwkJdTMyIGRjaHNfdHhlOjE7CisJCXUzMiBk Y2hzX3J4ZToxOworCQl1MzIgcmVzZXJ2ZWQwOjI7CisJCXUzMiBkY2hzX2RseTo4OworCQl1MzIg ZGNoc19vZnN0OjEwOworCQl1MzIgcmVzZXJ2ZWQxOjY7CisJfTsKKwl1MzIgdmFsOworfTsKKwor dW5pb24gcmt2ZW5jX3JlZ19lbmNfaWQgeworCXN0cnVjdCB7CisJCXUzMiBmcmFtZV9pZDo4Owor CQl1MzIgZnJtX2lkX21hdGNoOjE7CisJCXUzMiByZXNlcnZlZDA6NzsKKwkJdTMyIGNoX2lkOjI7 CisJCXUzMiB2cnNwX3J0bl9lbjoxOworCQl1MzIgdmluZl9yZXFfZW46MTsKKwkJdTMyIHJlc2Vy dmVkMToxMjsKKwl9OworCXUzMiB2YWw7Cit9OworCisvKiBWRVBVNTEwLW9ubHkgcXVpcmsgdmFs dWUsIHNlZSBya3ZlbmNfdmVwdTUxMF9xdWlyaygpIGluIHJrdmVuYy1oMjY0LmMuICovCisjZGVm aW5lIFJLVkVOQ19FTkNfSURfUVVJUktfVkFMCQkoQklUKDE4KSB8IEJJVCgxNikpCisKK3VuaW9u IHJrdmVuY19yZWdfZW5jX3JzbCB7CisJc3RydWN0IHsKKwkJdTMyIHBpY193ZDhfbTE6MTE7CisJ CXUzMiByZXNlcnZlZDA6NTsKKwkJdTMyIHBpY19oZDhfbTE6MTE7CisJCXUzMiByZXNlcnZlZDE6 NTsKKwl9OworCXUzMiB2YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX3NyY19maWxsIHsKKwlz dHJ1Y3QgeworCQl1MzIgcGljX3dmaWxsOjY7CisJCXUzMiByZXNlcnZlZDA6MTA7CisJCXUzMiBw aWNfaGZpbGw6NjsKKwkJdTMyIHJlc2VydmVkMToxMDsKKwl9OworCXUzMiB2YWw7Cit9OworCit1 bmlvbiBya3ZlbmNfcmVnX3NyY19mbXQgeworCXN0cnVjdCB7CisJCXUzMiBhbHBoYV9zd2FwOjE7 CisJCXUzMiByYnV2X3N3YXA6MTsKKwkJdTMyIHNyY19jZm10OjQ7CisJCXUzMiBzcmNfcmNuZTox OworCQl1MzIgb3V0X2ZtdDoxOworCQl1MzIgc3JjX3JhbmdlX3RybnNfZW46MTsKKwkJdTMyIHNy Y19yYW5nZV90cm5zX3NlbDoxOworCQl1MzIgY2hyb21hX2RzX21vZGU6MTsKKwkJdTMyIHJlc2Vy dmVkOjIxOworCX07CisJdTMyIHZhbDsKK307CisKKy8qIHNyY19jZm10IHZhbHVlcyAoVmVwdUZt dCBlbnVtLCB2ZXB1NXh4X2NvbW1vbi5oKSDigJQgb25seSB0aGUgb25lIHYxIHVzZXMuICovCisj ZGVmaW5lIFJLVkVOQ19TUkNfRk1UX1lVVjQyMFNQCQk2CS8qIE5WMTIgKi8KKy8qIG91dF9mbXQg KGJpdDcpOiByZWFsIGNhcHR1cmUgYWx3YXlzIGhhcyB0aGlzIHNldCAoc3JjX2ZtdCA9PSAweDk4 LCBub3QKKyAqIGp1c3Qgc3JjX2NmbXQncyAweDE4KSBmb3IgYSByZWFsIHN1Y2Nlc3NmdWwgZW5j b2RlOyBtcHAncyBvd24gZmllbGQgbmFtZQorICogc3VnZ2VzdHMgYW4gb3V0cHV0LXBsYW5lIGZv cm1hdCB0b2dnbGUgYnV0IG5vdGhpbmcgaW4gdGhlIHVzZXJzcGFjZSBIQUwKKyAqIGV2ZXIgbmFt ZXMgaXRzIG1lYW5pbmcgYmV5b25kIHRoZSBiaXQgcG9zaXRpb24uIFRyZWF0ZWQgYXMgYSByZXF1 aXJlZAorICogIm11c3QgYmUgMSIgYml0LCBsaWtlIHRoZSBEVkJNLWhvbGQgcXVpcmsuCisgKi8K KwordW5pb24gcmt2ZW5jX3JlZ19zcmNfcHJvYyB7CisJc3RydWN0IHsKKwkJdTMyIGNyX2ZvcmNl X3ZhbHVlOjg7CisJCXUzMiBjYl9mb3JjZV92YWx1ZTo4OworCQl1MzIgY2hyb21hX2ZvcmNlX2Vu OjE7CisJCXUzMiByZXNlcnZlZDA6OTsKKwkJdTMyIHNyY19taXJyOjE7CisJCXUzMiBzcmNfcm90 OjI7CisJCXUzMiB0aWxlNHg0X2VuOjE7CisJCXUzMiByZXNlcnZlZDE6MjsKKwl9OworCXUzMiB2 YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX3BpY19vZnN0IHsKKwlzdHJ1Y3QgeworCQl1MzIg cGljX29mc3RfeDoxNDsKKwkJdTMyIHJlc2VydmVkMDoyOworCQl1MzIgcGljX29mc3RfeToxNDsK KwkJdTMyIHJlc2VydmVkMToyOworCX07CisJdTMyIHZhbDsKK307CisKK3VuaW9uIHJrdmVuY19y ZWdfc3JjX3N0cmQwIHsKKwlzdHJ1Y3QgeworCQl1MzIgc3JjX3N0cmQwOjIxOworCQl1MzIgcmVz ZXJ2ZWQ6MTE7CisJfTsKKwl1MzIgdmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19zcmNfc3Ry ZDEgeworCXN0cnVjdCB7CisJCXUzMiBzcmNfc3RyZDE6MTY7CisJCXUzMiByZXNlcnZlZDoxNjsK Kwl9OworCXUzMiB2YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX3JjX2NmZyB7CisJc3RydWN0 IHsKKwkJdTMyIHJjX2VuOjE7CisJCXUzMiBhcV9lbjoxOworCQl1MzIgcmVzZXJ2ZWQ6MTA7CisJ CXUzMiByY19jdHVfbnVtOjIwOworCX07CisJdTMyIHZhbDsKK307CisKK3VuaW9uIHJrdmVuY19y ZWdfcmNfcXAgeworCXN0cnVjdCB7CisJCXUzMiByZXNlcnZlZDoxNjsKKwkJdTMyIHJjX3FwX3Jh bmdlOjQ7CisJCXUzMiByY19tYXhfcXA6NjsKKwkJdTMyIHJjX21pbl9xcDo2OworCX07CisJdTMy IHZhbDsKK307CisKK3VuaW9uIHJrdmVuY19yZWdfcmNfdGd0IHsKKwlzdHJ1Y3QgeworCQl1MzIg Y3R1X2ViaXQ6MjA7CisJCXUzMiByZXNlcnZlZDoxMjsKKwl9OworCXUzMiB2YWw7Cit9OworCit1 bmlvbiBya3ZlbmNfcmVnX3NsaV9zcGx0IHsKKwlzdHJ1Y3QgeworCQl1MzIgc2xpX3NwbHQ6MTsK KwkJdTMyIHNsaV9zcGx0X21vZGU6MTsKKwkJdTMyIHNsaV9zcGx0X2Nwc3Q6MTsKKwkJdTMyIHJl c2VydmVkMDoxMjsKKwkJdTMyIHNsaV9mbHNoOjE7CisJCXUzMiBzbGlfbWF4X251bV9tMToxNTsK KwkJdTMyIHJlc2VydmVkMToxOworCX07CisJdTMyIHZhbDsKK307CisKK3VuaW9uIHJrdmVuY19y ZWdfc2xpX2J5dGUgeworCXN0cnVjdCB7CisJCXUzMiBzbGlfc3BsdF9ieXRlOjIwOworCQl1MzIg cmVzZXJ2ZWQ6MTI7CisJfTsKKwl1MzIgdmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19zbGlf Y251bSB7CisJc3RydWN0IHsKKwkJdTMyIHNsaV9zcGx0X2NudW1fbTE6MjA7CisJCXUzMiByZXNl cnZlZDoxMjsKKwl9OworCXUzMiB2YWw7Cit9OworCisvKiBILjI2NC1zcGVjaWZpYyB0cmFpbGVy LCAweDNhMC0weDNmNC4KKyAqIHJkb19jZmcuY2hybV9zcGNsL2Njd2FfZS9hdHJfbXVsdF9zZWxf ZTogbXBwJ3Mgc2V0dXBfdmVwdTUxMF9yZG9fcHJlZCgpCisgKiAoaGFsX2gyNjRlX3ZlcHU1MTAu Yykgc2V0cyB0aGVzZSB0aHJlZSB1bmNvbmRpdGlvbmFsbHkgdG8gMSBvbiBldmVyeQorICogc2lu Z2xlIGZyYW1lIC0tIG5vdCBnYXRlZCBieSBwcm9maWxlL2xldmVsL3R1bmUgY29uZmlnIGxpa2Ug cmVjdF9zaXplLworICogdmxjX2xtdC9hdGZfZS9hdHJfZSBhcmUuIEZvdW5kIG1pc3NpbmcgYnkg ZGlmZmluZyBhZ2FpbnN0IHRoYXQgZnVuY3Rpb24KKyAqIGRpcmVjdGx5OyBwcmV2aW91c2x5IGxl ZnQgYXQgdGhlaXIgcmVzZXQtdmFsdWUgMCBoZXJlIHNpbmNlIG5vdGhpbmcgaW4KKyAqIHRoaXMg ZHJpdmVyIGV2ZXIgc2V0IHRoZW0uCisgKi8KK3VuaW9uIHJrdmVuY19yZWdfcmRvX2NmZyB7CisJ c3RydWN0IHsKKwkJdTMyIHJlY3Rfc2l6ZToxOworCQl1MzIgcmVzZXJ2ZWQwOjI7CisJCXUzMiB2 bGNfbG10OjE7CisJCXUzMiBjaHJtX3NwY2w6MTsKKwkJdTMyIHJlc2VydmVkMTo4OworCQl1MzIg Y2N3YV9lOjE7CisJCXUzMiByZXNlcnZlZDI6MTsKKwkJdTMyIGF0cl9lOjE7CisJCXUzMiByZXNl cnZlZDM6NDsKKwkJdTMyIHNjbF9sc3Rfc2VsOjI7CisJCXUzMiByZXNlcnZlZDQ6NjsKKwkJdTMy IGF0Zl9lOjE7CisJCXUzMiBhdHJfbXVsdF9zZWxfZToxOworCQl1MzIgcmVzZXJ2ZWQ1OjI7CisJ fTsKKwl1MzIgdmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19zeW50X25hbCB7CisJc3RydWN0 IHsKKwkJdTMyIG5hbF9yZWZfaWRjOjI7CisJCXUzMiBuYWxfdW5pdF90eXBlOjU7CisJCXUzMiBy ZXNlcnZlZDoyNTsKKwl9OworCXUzMiB2YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX3N5bnRf c3BzIHsKKwlzdHJ1Y3QgeworCQl1MzIgbWF4X2ZudW06NDsJCS8qIGxvZzJfbWF4X2ZyYW1lX251 bV9taW51czQgKi8KKwkJdTMyIGRyY3RfOHg4OjE7CQkvKiBkaXJlY3RfOHg4X2luZmVyZW5jZV9m bGFnICovCisJCXUzMiBtcG9jX2xtNDo0OwkJLyogbG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2Jf bWludXM0ICovCisJCXUzMiBwb2NfdHlwZToyOwkJLyogcGljX29yZGVyX2NudF90eXBlICovCisJ CXUzMiByZXNlcnZlZDoyMTsKKwl9OworCXUzMiB2YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVn X3N5bnRfcHBzIHsKKwlzdHJ1Y3QgeworCQl1MzIgZXRweV9tb2RlOjE7CS8qIGVudHJvcHlfY29k aW5nX21vZGVfZmxhZzogMD1DQVZMQyAxPUNBQkFDICovCisJCXUzMiB0cm5zXzh4ODoxOwkJLyog dHJhbnNmb3JtXzh4OF9tb2RlX2ZsYWcgKi8KKwkJdTMyIGNzaXBfZmxhZzoxOwkvKiBjb25zdHJh aW5lZF9pbnRyYV9wcmVkX2ZsYWcgKi8KKwkJdTMyIG51bV9yZWYwX2lkeDoyOworCQl1MzIgbnVt X3JlZjFfaWR4OjI7CisJCXUzMiBwaWNfaW5pdF9xcDo2OworCQl1MzIgY2Jfb2ZzdDo1OworCQl1 MzIgY3Jfb2ZzdDo1OworCQl1MzIgcmVzZXJ2ZWQ6MTsKKwkJdTMyIGRiZl9jcF9mbGc6MTsJLyog ZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9wcmVzZW50X2ZsYWcgKi8KKwkJdTMyIHJlc2VydmVk MTo3OworCX07CisJdTMyIHZhbDsKK307CisKK3VuaW9uIHJrdmVuY19yZWdfc3ludF9zbGkwIHsK KwlzdHJ1Y3QgeworCQl1MzIgc2xpX3R5cGU6MjsKKwkJdTMyIHBwc19pZDo4OworCQl1MzIgZHJj dF9zbXZwOjE7CisJCXUzMiBudW1fcmVmX292cmQ6MTsKKwkJdTMyIGNiY19pbml0X2lkYzoyOwor CQl1MzIgcmVzZXJ2ZWQ6MjsKKwkJdTMyIGZybV9udW06MTY7CisJfTsKKwl1MzIgdmFsOworfTsK KworI2RlZmluZSBSS1ZFTkNfU0xJX1RZUEVfUAkJMAorI2RlZmluZSBSS1ZFTkNfU0xJX1RZUEVf SQkJMgorCit1bmlvbiBya3ZlbmNfcmVnX3N5bnRfc2xpMSB7CisJc3RydWN0IHsKKwkJdTMyIGlk cl9waWQ6MTY7CisJCXUzMiBwb2NfbHNiOjE2OworCX07CisJdTMyIHZhbDsKK307CisKK3VuaW9u IHJrdmVuY19yZWdfc3ludF9zbGkyIHsKKwlzdHJ1Y3QgeworCQl1MzIgcm9kcl9waWNfaWR4OjI7 CisJCXUzMiByZWZfbGlzdDBfcm9kcjoxOworCQl1MzIgc2xpX2JldGFfb2ZzdDo0OworCQl1MzIg c2xpX2FscGhfb2ZzdDo0OworCQl1MzIgZGlzX2RibGtfaWRjOjI7CisJCXUzMiByZXNlcnZlZDoz OworCQl1MzIgcm9kcl9waWNfbnVtOjE2OworCX07CisJdTMyIHZhbDsKK307CisKKy8qIEFic29s dXRlIGJ5dGUgb2Zmc2V0cyBvZiBlYWNoIEZSQU1FLWNsYXNzIHJlZ2lzdGVyIHRoaXMgZHJpdmVy IHRvdWNoZXMuICovCisjZGVmaW5lIFJLVkVOQ19SRUdfQURSX1NSQzAJCTB4MjgwCisjZGVmaW5l IFJLVkVOQ19SRUdfQURSX1NSQzEJCTB4Mjg0CisjZGVmaW5lIFJLVkVOQ19SRUdfQURSX1NSQzIJ CTB4Mjg4CisjZGVmaW5lIFJLVkVOQ19SRUdfUkZQV19IX0FERFIJCTB4MjhjCisjZGVmaW5lIFJL VkVOQ19SRUdfUkZQV19CX0FERFIJCTB4MjkwCisjZGVmaW5lIFJLVkVOQ19SRUdfUkZQUl9IX0FE RFIJCTB4Mjk0CisjZGVmaW5lIFJLVkVOQ19SRUdfUkZQUl9CX0FERFIJCTB4Mjk4CisjZGVmaW5l IFJLVkVOQ19SRUdfTUVJV19BRERSCQkweDJhYwkvKiBtb3Rpb24tZGV0ZWN0aW9uLWluZm8gd3Jp dGUgcHRyICovCisjZGVmaW5lIFJLVkVOQ19SRUdfRFNQV19BRERSCQkweDJhNAorI2RlZmluZSBS S1ZFTkNfUkVHX0RTUFJfQUREUgkJMHgyYTgKKyNkZWZpbmUgUktWRU5DX1JFR19CU0JUX0FERFIJ CTB4MmIwCisjZGVmaW5lIFJLVkVOQ19SRUdfQlNCQl9BRERSCQkweDJiNAorI2RlZmluZSBSS1ZF TkNfUkVHX0FEUl9CU0JTCQkweDJiOAorI2RlZmluZSBSS1ZFTkNfUkVHX0JTQlJfQUREUgkJMHgy YmMKKy8qIHJmcHQvcmZwYiAoInRvcCIvImJvdHRvbSIgZmllbGQgcmVjb24gYWRkcmVzc2VzLCBp bnRlcmxhY2VkLW9ubHkpOgorICogcmVhbCBjYXB0dXJlIGFsd2F5cyBjYXJyaWVzIHRoZSBsaXRl cmFsIHNlbnRpbmVsIDB4ZmZmZmZmZmYgaW4KKyAqIHJmcHRfaC9yZnB0X2IgKG5vdCBhbiBmZC1l bWJlZGRlZCBwb2ludGVyIC0tIGFuIGZkIG9mIDB4M2ZmLzEwMjMgaXMKKyAqIG5ldmVyIHZhbGlk IG9uIGEgcmVhbCBzeXN0ZW0sIHNvIHRoaXMgcmVhZHMgYXMgYW4gZXhwbGljaXQKKyAqICJkaXNh YmxlZC9ubyBpbnRlcmxhY2VkIGZpZWxkcyIgcGF0dGVybiksIHdpdGggcmZwYl9oL2Fkcl9yZnBi X2IgYXQgMC4KKyAqLworI2RlZmluZSBSS1ZFTkNfUkVHX1JGUFRfSF9BRERSCQkweDJkMAorI2Rl ZmluZSBSS1ZFTkNfUkVHX1JGUEJfSF9BRERSCQkweDJkNAorI2RlZmluZSBSS1ZFTkNfUkVHX1JG UFRfQl9BRERSCQkweDJkOAorI2RlZmluZSBSS1ZFTkNfUkVHX0FEUl9SRlBCX0IJCTB4MmRjCisj ZGVmaW5lIFJLVkVOQ19SRlBUX0RJU0FCTEVECQkweGZmZmZmZmZmCisjZGVmaW5lIFJLVkVOQ19S RUdfQURSX1NNRUFSX1JECQkweDJlMAorI2RlZmluZSBSS1ZFTkNfUkVHX0FEUl9TTUVBUl9XUgkJ MHgyZTQKKy8qIExhc3QgRE1BIHBvaW50ZXIgaW4gdGhlIEZSQU1FIGNsYXNzIChST0kgcmVhZCBh ZGRyZXNzKS4gVGhlIHdob2xlCisgKiAweDI3MC0weDJlOCBibG9jayBpcyB6ZXJvZWQgYXQgdGhl IHRvcCBvZiBya3ZlbmNfaDI2NF9ydW4oKSB0byBjbGVhciBhbnkKKyAqIHN0YWxlL2dhcmJhZ2Ug d3JpdGUgcG9pbnRlcnMgKGxwZncvbHBmci9lYnVmdC9lYnVmYiBhdCAweDJjMC0weDJjYywgdGhp cywKKyAqIGFuZCAweDI5Yy8weDJhMCkgdGhhdCB0aGUgdmVuZG9yIGFsd2F5cyB3cml0ZXMgYnV0 IHRoaXMgZHJpdmVyIG90aGVyd2lzZQorICogc2tpcHMgLS0gc2VlIHRoZSBiaWcgY29tbWVudCB0 aGVyZS4KKyAqLworI2RlZmluZSBSS1ZFTkNfUkVHX0FEUl9ST0lSCQkweDJlOAorI2RlZmluZSBS S1ZFTkNfUkVHX0VOQ19QSUMJCTB4MzAwCisjZGVmaW5lIFJLVkVOQ19SRUdfRFVBTF9DT1JFCQkw eDMwNAorI2RlZmluZSBSS1ZFTkNfUkVHX0VOQ19JRAkJMHgzMDgKKyNkZWZpbmUgUktWRU5DX1JF R19FTkNfUlNMCQkweDMxMAorI2RlZmluZSBSS1ZFTkNfUkVHX1NSQ19GSUxMCQkweDMxNAorI2Rl ZmluZSBSS1ZFTkNfUkVHX1NSQ19GTVQJCTB4MzE4CisjZGVmaW5lIFJLVkVOQ19SRUdfU1JDX1BS T0MJCTB4MzJjCisjZGVmaW5lIFJLVkVOQ19SRUdfUElDX09GU1QJCTB4MzMwCisjZGVmaW5lIFJL VkVOQ19SRUdfU1JDX1NUUkQwCQkweDMzNAorI2RlZmluZSBSS1ZFTkNfUkVHX1NSQ19TVFJEMQkJ MHgzMzgKKyNkZWZpbmUgUktWRU5DX1JFR19SQ19DRkcJCTB4MzUwCisjZGVmaW5lIFJLVkVOQ19S RUdfUkNfUVAJCTB4MzU0CisjZGVmaW5lIFJLVkVOQ19SRUdfUkNfVEdUCQkweDM1OAorI2RlZmlu ZSBSS1ZFTkNfUkVHX1NMSV9TUExUCQkweDM2MAorI2RlZmluZSBSS1ZFTkNfUkVHX1NMSV9CWVRF CQkweDM2NAorI2RlZmluZSBSS1ZFTkNfUkVHX1NMSV9DTlVNCQkweDM2OAorCisvKiBNb3Rpb24t ZXN0aW1hdGlvbiBzZWFyY2gtcmFuZ2UvY29uZmlnL2NhY2hlIHJlZ2lzdGVyczogd3JpdHRlbgor ICogKnVuY29uZGl0aW9uYWxseSogYnkgbXBwJ3Mgc2V0dXBfdmVwdTUxMF9tZSgpIG9uIGV2ZXJ5 IHNpbmdsZSBmcmFtZQorICogKG5vIGNvbmRpdGlvbmFsIGd1YXJkIOKAlCBub3QgZ2F0ZWQgYmVo aW5kIFAtZnJhbWUvaW50ZXItbW9kZSB1c2UpLAorICogc2FtZSAicmVxdWlyZWQgcmVnYXJkbGVz cyBvZiB3aGF0IHlvdSdkIGFzc3VtZSBmcm9tIHRoZSBmZWF0dXJlCisgKiBuYW1lIiBwYXR0ZXJu IGFzIHRoZSByb2lfcXRoZCBhbmQgdGh1bWIvc21lYXItYnVmZmVyIHJlZ2lzdGVycy4KKyAqIFZh bHVlcyBiZWxvdyBhcmUgbXBwJ3Mgb3duIGhhcmRjb2RlZCBjb25zdGFudHMsIG5vdCBwZXItY29u dGVudAorICogdHVuaW5nIOKAlCBhIHplcm9lZCBjaW1lX2Rpc3RfdGhyZS9zcmduX21heF9udW0g aGVyZSBpcyBhIHBsYXVzaWJsZQorICogY2F1c2Ugb2YgYSBnZW51aW5lIE1FLWVuZ2luZSBzZWFy Y2gvbG9vcCBzdGFsbC4KKyAqLworI2RlZmluZSBSS1ZFTkNfUkVHX01FX1JOR0UJCTB4MzcwCisj ZGVmaW5lIFJLVkVOQ19SRUdfTUVfQ0ZHCQkweDM3NAorI2RlZmluZSBSS1ZFTkNfUkVHX01FX0NB Q0gJCTB4Mzc4CisKK3VuaW9uIHJrdmVuY19yZWdfbWVfcm5nZSB7CisJc3RydWN0IHsKKwkJdTMy IGNpbWVfc3JjaF9kd25oOjQ7CisJCXUzMiBjaW1lX3NyY2hfdXBoOjQ7CisJCXUzMiBjaW1lX3Ny Y2hfcmd0dzo0OworCQl1MzIgY2ltZV9zcmNoX2xmdHc6NDsKKwkJdTMyIGRsdF9mcm1fbnVtOjE2 OworCX07CisJdTMyIHZhbDsKK307CisKK3VuaW9uIHJrdmVuY19yZWdfbWVfY2ZnIHsKKwlzdHJ1 Y3QgeworCQl1MzIgc3Jnbl9tYXhfbnVtOjc7CisJCXUzMiBjaW1lX2Rpc3RfdGhyZToxMzsKKwkJ dTMyIHJtZV9zcmNoX2g6MjsKKwkJdTMyIHJtZV9zcmNoX3Y6MjsKKwkJdTMyIHJtZV9kaXM6MzsK KwkJdTMyIHJlc2VydmVkOjE7CisJCXUzMiBmbWVfZGlzOjM7CisJCXUzMiByZXNlcnZlZDE6MTsK Kwl9OworCXUzMiB2YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX21lX2NhY2ggeworCXN0cnVj dCB7CisJCXUzMiBjaW1lX3plcm9fdGhyZToxMzsKKwkJdTMyIHJlc2VydmVkOjE1OworCQl1MzIg Zm1lX3ByZWZzdV9lbjoyOworCQl1MzIgY29sbXZfc3Rvcl9oZXZjOjE7CisJCXUzMiBjb2xtdl9s b2FkX2hldmM6MTsKKwl9OworCXUzMiB2YWw7Cit9OworCisjZGVmaW5lIFJLVkVOQ19SRUdfUkRP X0NGRwkJMHgzYTAKKyNkZWZpbmUgUktWRU5DX1JFR19TWU5UX05BTAkJMHgzYjAKKyNkZWZpbmUg UktWRU5DX1JFR19TWU5UX1NQUwkJMHgzYjQKKyNkZWZpbmUgUktWRU5DX1JFR19TWU5UX1BQUwkJ MHgzYjgKKyNkZWZpbmUgUktWRU5DX1JFR19TWU5UX1NMSTAJCTB4M2JjCisjZGVmaW5lIFJLVkVO Q19SRUdfU1lOVF9TTEkxCQkweDNjMAorI2RlZmluZSBSS1ZFTkNfUkVHX1NZTlRfU0xJMgkJMHgz YzQKKworLyogLS0tLSBSQ19ST0kgY2xhc3MgKDB4MTAwMC0weDExMGMpLCBhLmsuYS4gVmVwdTUx MFJjUm9pIGluIG1wcC4KKyAqCisgKiByY19hZGowL3JjX2FkajEvcmNfZHRoZF8wXzggKDB4MTAw MC0weDEwMjgpIGFyZSB0aGUgYWRhcHRpdmUtcXVhbnQKKyAqIGJpdC1jb3VudC1kZXZpYXRpb24g dGhyZXNob2xkIGxhZGRlcjogbXBwJ3Mgc2V0dXBfdmVwdTUxMF9yY19iYXNlKCkKKyAqIGNvbXB1 dGVzIHRoZXNlIGZyb20gdGhlIGZyYW1lJ3MgYml0IGJ1ZGdldCBpbiBpdHMgbm9uLUZJWFFQIHBh dGgsIGJ1dAorICogc2tpcHMgdGhlbSBlbnRpcmVseSAoZWFybHkgYHJldHVybmApIGluIHRydWUg TVBQX0VOQ19SQ19NT0RFX0ZJWFFQIG1vZGUKKyAqIOKAlCB0aGlzIGRyaXZlcidzIG9yaWdpbmFs IGRlc2lnbiBhc3N1bWVkIHRoYXQgbWVhbnQgInNhZmUgdG8gbGVhdmUgYXQKKyAqIDAiLCBtYXRj aGluZyBkaXNhYmxlZCBSQy9BUS4gQm9hcmQgYnJpbmctdXAgcHJvdmVkIHRoYXQgYXNzdW1wdGlv bgorICogd3Jvbmc6IGxlYXZpbmcgcmNfZHRoZF8wXzggYXQgMCAocmVhZCBieSBoYXJkd2FyZSBh cyAiYWx3YXlzIHBhc3QKKyAqIHRocmVzaG9sZCIgcmF0aGVyIHRoYW4gbXBwJ3MgcmVhbCAibmV2 ZXIgdHJpZ2dlciIgMHg3RkZGRkZGRiBzZW50aW5lbAorICogZm9yIHRoZSBvdXRlciBlbnRyaWVz KSByZXByb2R1Y2VzIHRoZSBleGFjdCBoYXJkd2FyZS13YXRjaGRvZyBzdGFsbCBvbgorICogaXRz IG93bi4gVGhpcyBkcml2ZXIgbm93IGFsd2F5cyBydW5zIHdpdGggcmNfY2ZnLnJjX2VuPTEvYXFf ZW49MSBhbmQgYQorICogcmVhbCAoaWYgYXBwcm94aW1hdGUg4oCUIHNlZSBya3ZlbmMtaDI2NC5j KSB0aHJlc2hvbGQgbGFkZGVyLCBidXQgY2xhbXBzCisgKiByY19xcC5yY19taW5fcXA9PXJjX21h eF9xcCBhbmQgcmNfcXBfcmFuZ2U9MCBzbyB0aGUgQVEgZW5naW5lIGhhcyBubworICogcm9vbSB0 byBhY3R1YWxseSBtb3ZlIHRoZSBRUCBhd2F5IGZyb20gdGhlIHJlcXVlc3RlZCB2YWx1ZSDigJQg Z2VudWluZQorICogZml4ZWQtUVAgKm91dHB1dCosIGp1c3Qgbm90IGZpeGVkLVFQICpyZWdpc3Rl ciBjb25maWd1cmF0aW9uKi4KKyAqCisgKiByb2lfcXRoZDAtMzogbXBwJ3Mgc2V0dXBfdmVwdTUx MF9yY19iYXNlKCkgd3JpdGVzIHRoZXNlCisgKiAqdW5jb25kaXRpb25hbGx5KiwgYmVmb3JlIGV2 ZW4gY2hlY2tpbmcgUkMgbW9kZSDigJQgZXZlcnkgUk9JIGFyZWEncworICogW3FwbWluLCBxcG1h eF0gY2xhbXAgcmFuZ2UgaXMgc2V0IHRvIHRoZSBmcmFtZSdzIGFjdHVhbAorICogW3F1YWxpdHlf bWluLCBxdWFsaXR5X21heF0gcmVnYXJkbGVzcy4KKyAqLworI2RlZmluZSBSS1ZFTkNfUkVHX1JD X0FESjAJCTB4MTAwMAorI2RlZmluZSBSS1ZFTkNfUkVHX1JDX0FESjEJCTB4MTAwNAorI2RlZmlu ZSBSS1ZFTkNfUkVHX1JDX0RUSEQobikJCSgweDEwMDggKyA0ICogKG4pKQkvKiBuID0gMC4uOCAq LworCit1bmlvbiBya3ZlbmNfcmVnX3JjX2FkajAgeworCXN0cnVjdCB7CisJCXMzMiBxcF9hZGow OjU7CisJCXMzMiBxcF9hZGoxOjU7CisJCXMzMiBxcF9hZGoyOjU7CisJCXMzMiBxcF9hZGozOjU7 CisJCXMzMiBxcF9hZGo0OjU7CisJCXUzMiByZXNlcnZlZDo3OworCX07CisJdTMyIHZhbDsKK307 CisKK3VuaW9uIHJrdmVuY19yZWdfcmNfYWRqMSB7CisJc3RydWN0IHsKKwkJczMyIHFwX2FkajU6 NTsKKwkJczMyIHFwX2FkajY6NTsKKwkJczMyIHFwX2Fkajc6NTsKKwkJczMyIHFwX2Fkajg6NTsK KwkJdTMyIHJlc2VydmVkOjEyOworCX07CisJdTMyIHZhbDsKK307CisKKyNkZWZpbmUgUktWRU5D X1JDX0RUSERfU0VOVElORUwJMHg3ZmZmZmZmZgorCisjZGVmaW5lIFJLVkVOQ19SRUdfUk9JX1FU SEQwCQkweDEwMzAKKyNkZWZpbmUgUktWRU5DX1JFR19ST0lfUVRIRDEJCTB4MTAzNAorI2RlZmlu ZSBSS1ZFTkNfUkVHX1JPSV9RVEhEMgkJMHgxMDM4CisjZGVmaW5lIFJLVkVOQ19SRUdfUk9JX1FU SEQzCQkweDEwM2MKKwordW5pb24gcmt2ZW5jX3JlZ19yb2lfcXRoZDAgeworCXN0cnVjdCB7CisJ CXUzMiBxcG1pbl9hcmVhMDo2OworCQl1MzIgcXBtYXhfYXJlYTA6NjsKKwkJdTMyIHFwbWluX2Fy ZWExOjY7CisJCXUzMiBxcG1heF9hcmVhMTo2OworCQl1MzIgcXBtaW5fYXJlYTI6NjsKKwkJdTMy IHJlc2VydmVkOjI7CisJfTsKKwl1MzIgdmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19yb2lf cXRoZDEgeworCXN0cnVjdCB7CisJCXUzMiBxcG1heF9hcmVhMjo2OworCQl1MzIgcXBtaW5fYXJl YTM6NjsKKwkJdTMyIHFwbWF4X2FyZWEzOjY7CisJCXUzMiBxcG1pbl9hcmVhNDo2OworCQl1MzIg cXBtYXhfYXJlYTQ6NjsKKwkJdTMyIHJlc2VydmVkOjI7CisJfTsKKwl1MzIgdmFsOworfTsKKwor dW5pb24gcmt2ZW5jX3JlZ19yb2lfcXRoZDIgeworCXN0cnVjdCB7CisJCXUzMiBxcG1pbl9hcmVh NTo2OworCQl1MzIgcXBtYXhfYXJlYTU6NjsKKwkJdTMyIHFwbWluX2FyZWE2OjY7CisJCXUzMiBx cG1heF9hcmVhNjo2OworCQl1MzIgcXBtaW5fYXJlYTc6NjsKKwkJdTMyIHJlc2VydmVkOjI7CisJ fTsKKwl1MzIgdmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19yb2lfcXRoZDMgeworCXN0cnVj dCB7CisJCXUzMiBxcG1heF9hcmVhNzo2OworCQl1MzIgcmVzZXJ2ZWQ6MjQ7CisJCXUzMiBxcG1h cF9tb2RlOjI7CisJfTsKKwl1MzIgdmFsOworfTsKKworLyogUkNfUk9JIHRhaWwgKDB4MTA0NC0w eDEwN2MpOiBBUSBhY3Rpdml0eSB0aHJlc2hvbGQvc3RlcCBMVVQsIE1BRC1iYXNlZAorICogc3Rh dGlzdGljcyB0aHJlc2hvbGRzLCBhbmQgYSBjaHJvbWEgS0xVVCBvZmZzZXQgLS0gYWxsIHJlYWwg ZmllbGRzIGluCisgKiBtcHAncyBWZXB1NTEwUmNSb2kgc3RydWN0ICh2ZXB1NTEwX2NvbW1vbi5o KSB0aGF0IHRoaXMgZHJpdmVyIHVzZWQgdG8KKyAqIGxlYXZlIGVudGlyZWx5IHVud3JpdHRlbi4g Rm91bmQgYnkgZGlmZmluZyB0aGlzIGRyaXZlcidzIHJlZ2lzdGVyIHdyaXRlcworICogYWdhaW5z dCBtcHAncyBhY3R1YWwgc2V0dXBfdmVwdTUxMF9hcSgpL3NldHVwX3ZlcHU1MTBfbWUoKS8KKyAq IHNldHVwX3ZlcHU1MTBfcmRvX3ByZWQoKSAoaGFsX2gyNjRlX3ZlcHU1MTAuYyksIG5vdCBqdXN0 IHRoZSBzaW5nbGUKKyAqIEktZnJhbWUgd3RyYWNlIGNhcHR1cmUgdXNlZCB0byBmaXggdGhlIG9y aWdpbmFsIHdob2xlLWNsYXNzIHN0YWxsIChzZWUKKyAqIHRoZSBSQ19ST0kgYmFubmVyIGNvbW1l bnQgYWJvdmUpIC0tIHRoYXQgY2FwdHVyZSBuZXZlciBleGVyY2lzZWQgdGhlc2UKKyAqIHBhcnRp Y3VsYXIgb2Zmc2V0cyBlaXRoZXIsIHNpbmNlIGEgZnJvbS1zY3JhdGNoIGRyaXZlciBvbmx5IHdy aXRlcyB3aGF0CisgKiBpdCdzIHRvbGQgdG8sIGFuZCBub3RoaW5nIGhhZCB0b2xkIGl0IHRvIHdy aXRlIHRoZXNlIHlldC4KKyAqCisgKiBtcHAgd3JpdGVzIGFxX3R0aGQvYXFfc3RwL21hZGlfc3Rf dGhkL21hZHBfc3RfdGhkMC9tYWRwX3N0X3RoZDEKKyAqIHVuY29uZGl0aW9uYWxseSBvbiBldmVy eSBmcmFtZSByZWdhcmRsZXNzIG9mIHNsaWNlIHR5cGUgKHNldHVwX3ZlcHU1MTBfbWUoKQorICog aGFzIG5vIEkvUCBicmFuY2ggZm9yIHRoZXNlKSwgYW5kIGtsdXRfb2ZzdC5jaHJtX2tsdXRfb2Zz dCBpcyA2IGZvciBJCisgKiBzbGljZXMgYW5kIDYgb3IgOSBmb3IgUCBzbGljZXMgZGVwZW5kaW5n IG9uIGFuIElQQyBzY2VuZS10dW5pbmcgbW9kZSB0aGlzCisgKiBkcml2ZXIgZG9lc24ndCBleHBv c2UgKHNvIDYgaXMgY29ycmVjdCBmb3IgYm90aCBoZXJlKS4gVGhlc2Ugc2l0IGluCisgKiBleGFj dGx5IHRoZSByZWdpc3RlciBjbGFzcyBib2FyZCBicmluZy11cCBhbHJlYWR5IHByb3ZlZCBuZWVk cworICogbm9uLWRlZ2VuZXJhdGUgY29udGVudCBmb3IgdGhlIGhhcmR3YXJlIHRvIGNvbXBsZXRl IGF0IGFsbCAoc2VlIHRoZSBSQ19ST0kKKyAqIGJhbm5lciBjb21tZW50KSAtLSBsZWZ0IGF0IFBP Ui9sZWZ0b3ZlciAwIGluc3RlYWQgb2YgbXBwJ3MgcmVhbCBub256ZXJvCisgKiB0YWJsZSwgdGhp cyBpcyBhIHBsYXVzaWJsZSBzb3VyY2Ugb2YgYSByZWFsIGludGVybmFsIHN0YWxsIHRoYXQgaGFw cGVucyB0bworICogb25seSBiaXRlIG9uY2UgcmVhbCBwZXItYmxvY2sgYWN0aXZpdHkvTUFEIHN0 YXRpc3RpY3MgZ2V0IGNvbXB1dGVkIGFuZAorICogY29tcGFyZWQgYWdhaW5zdCB0aGVzZSB0aHJl c2hvbGRzLCBpLmUuIGR1cmluZyBnZW51aW5lIGludGVyLW1vZGUKKyAqIChQLWZyYW1lKSBhbmFs eXNpcyByYXRoZXIgdGhhbiBpbnRyYS4KKyAqLworI2RlZmluZSBSS1ZFTkNfUkVHX0FRX1RUSEQJ CTB4MTA0NAkvKiA0IHdvcmRzLCAxNiBwYWNrZWQgdTggdGhyZXNob2xkcyAqLworI2RlZmluZSBS S1ZFTkNfUkVHX0FRX1NUUDAJCTB4MTA1NAorI2RlZmluZSBSS1ZFTkNfUkVHX0FRX1NUUDEJCTB4 MTA1OAorI2RlZmluZSBSS1ZFTkNfUkVHX0FRX1NUUDIJCTB4MTA1YworI2RlZmluZSBSS1ZFTkNf UkVHX01BRElfU1RfVEhECQkweDEwNjQKKyNkZWZpbmUgUktWRU5DX1JFR19NQURQX1NUX1RIRDAJ MHgxMDY4CisjZGVmaW5lIFJLVkVOQ19SRUdfTUFEUF9TVF9USEQxCTB4MTA2YworI2RlZmluZSBS S1ZFTkNfUkVHX0tMVVRfT0ZTVAkJMHgxMDdjCisKK3VuaW9uIHJrdmVuY19yZWdfYXFfc3RwMCB7 CisJc3RydWN0IHsKKwkJczMyIGFxX3N0cF9zMDo1OworCQlzMzIgYXFfc3RwXzB0MTo1OworCQlz MzIgYXFfc3RwXzF0Mjo1OworCQlzMzIgYXFfc3RwXzJ0Mzo1OworCQlzMzIgYXFfc3RwXzN0NDo1 OworCQlzMzIgYXFfc3RwXzR0NTo1OworCQl1MzIgcmVzZXJ2ZWQ6MjsKKwl9OworCXUzMiB2YWw7 Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX2FxX3N0cDEgeworCXN0cnVjdCB7CisJCXMzMiBhcV9z dHBfNXQ2OjU7CisJCXMzMiBhcV9zdHBfNnQ3OjU7CisJCXMzMiBhcV9zdHBfN3Q4OjU7CisJCXMz MiBhcV9zdHBfOHQ5OjU7CisJCXMzMiBhcV9zdHBfOXQxMDo1OworCQlzMzIgYXFfc3RwXzEwdDEx OjU7CisJCXUzMiByZXNlcnZlZDoyOworCX07CisJdTMyIHZhbDsKK307CisKK3VuaW9uIHJrdmVu Y19yZWdfYXFfc3RwMiB7CisJc3RydWN0IHsKKwkJczMyIGFxX3N0cF8xMXQxMjo1OworCQlzMzIg YXFfc3RwXzEydDEzOjU7CisJCXMzMiBhcV9zdHBfMTN0MTQ6NTsKKwkJczMyIGFxX3N0cF8xNHQx NTo1OworCQlzMzIgYXFfc3RwX2IxNTo1OworCQl1MzIgcmVzZXJ2ZWQ6NzsKKwl9OworCXUzMiB2 YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX21hZGlfc3RfdGhkIHsKKwlzdHJ1Y3QgeworCQl1 MzIgbWFkaV90aDA6ODsKKwkJdTMyIG1hZGlfdGgxOjg7CisJCXUzMiBtYWRpX3RoMjo4OworCQl1 MzIgcmVzZXJ2ZWQ6ODsKKwl9OworCXUzMiB2YWw7Cit9OworCit1bmlvbiBya3ZlbmNfcmVnX21h ZHBfc3RfdGhkMCB7CisJc3RydWN0IHsKKwkJdTMyIG1hZHBfdGgwOjEyOworCQl1MzIgcmVzZXJ2 ZWQ6NDsKKwkJdTMyIG1hZHBfdGgxOjEyOworCQl1MzIgcmVzZXJ2ZWQxOjQ7CisJfTsKKwl1MzIg dmFsOworfTsKKwordW5pb24gcmt2ZW5jX3JlZ19tYWRwX3N0X3RoZDEgeworCXN0cnVjdCB7CisJ CXUzMiBtYWRwX3RoMjoxMjsKKwkJdTMyIHJlc2VydmVkOjIwOworCX07CisJdTMyIHZhbDsKK307 CisKK3VuaW9uIHJrdmVuY19yZWdfa2x1dF9vZnN0IHsKKwlzdHJ1Y3QgeworCQl1MzIgY2hybV9r bHV0X29mc3Q6NDsKKwkJdTMyIHJlc2VydmVkOjQ7CisJCXUzMiBpbnRlcl9jaHJtX2Rpc3RfbXVs dGk6NjsKKwkJdTMyIHJlc2VydmVkMToxODsKKwl9OworCXUzMiB2YWw7Cit9OworCisvKiAtLS0t IFBBUkFNIGNsYXNzICgweDE3MDAtMHgxOWNjKSwgYS5rLmEuIFZlcHU1MTBQYXJhbSBpbiBtcHAu CisgKiBSRE8gbGFtYmRhL2Nvc3QgdGFibGVzIHBsdXMgYSBoYW5kZnVsIG9mIHNtYWxsIHF1YW50 LXR1bmluZyB0YWJsZXMgYWhlYWQKKyAqIG9mIHRoZW0uIG1wcCB0cmVhdHMgdGhlIGJ1bGsgb2Yg dGhpcyBhcyBhICpkZWZhdWx0LXR1bmluZyBwcm9maWxlKgorICogY29uc3RhbnQgdGFibGUgKGB2 ZXB1NTF4X2gyNjRlX2xhbWJkYV9kZWZhdWx0XzYwYC9gX2N2cl82MGAsIHNlbGVjdGVkIGJ5Cisg KiBhIHR1bmluZyAibGFtYmRhX2lkeCIga25vYiB0aGlzIGRyaXZlciBkb2Vzbid0IGV4cG9zZSwg bm90IGJ5CisgKiByZXNvbHV0aW9uL1FQL2NvbnRlbnQpIOKAlCBzbyBhIGZpeGVkIGNvbnN0YW50 IHRhYmxlIGhlcmUsIGNhcHR1cmVkIGZyb20KKyAqIGEgcmVhbCBzdWNjZXNzZnVsIGVuY29kZSB2 aWEgd3RyYWNlIGFuZCBjcm9zcy1jaGVja2VkIGFnYWluc3QgdGhlCisgKiB0YWJsZSdzIG1vbm90 b25pY2FsbHktaW5jcmVhc2luZy1sYW1iZGEgc2hhcGUsIGlzIGEgZGVsaWJlcmF0ZSB2MQorICog Y2hvaWNlLCBub3QgYSBwbGFjZWhvbGRlci4gU2VlIFJLVkVOQ19QQVJfQ0xBU1NfV09SRFMgaW4g cmt2ZW5jLWgyNjQuYy4KKyAqCisgKiBDT1JSRUNUSU9OICgyMDI2LTA3LTIxLCBmcm9tIGEgcmVh bCBtdWx0aS1mcmFtZSB3dHJhY2UgY2FwdHVyZSk6IHRoZQorICogInN0YXRpYyBibG9iLCBzYW1l IGZvciBldmVyeSBmcmFtZSIgY2hhcmFjdGVyaXphdGlvbiBhYm92ZSBpcyBXUk9ORyBmb3IKKyAq IGZvdXIgc3BlY2lmaWMgd29yZHMgaW5zaWRlIGl0IC0tIG1wcCdzIHNldHVwX3ZlcHU1MTBfYW50 aV9yaW5naW5nKCkKKyAqIChoYWxfaDI2NGVfdmVwdTUxMC5jKSBjb21wdXRlcyByZWFsLCBkaWZm ZXJlbnQgQVRSIChhbnRpLXJpbmdpbmcpIHdlaWdodAorICogdmFsdWVzIGRlcGVuZGluZyBvbiBJ LXNsaWNlIHZzIFAtc2xpY2UsIG5vdCBqdXN0IHRoZSB0dW5lL3NjZW5lLW1vZGUKKyAqIGNvbmZp ZyBhIHNpbmdsZSBJLWZyYW1lIGNhcHR1cmUgY2FuIHNlZS4gQSAzLWZyYW1lIHJlYWwgY2FwdHVy ZSAoZnJhbWUgMAorICogSSwgZnJhbWVzIDEtMiBQKSBzaG93ZWQgdGhlc2UgZm91ciBvZmZzZXRz IGNoYW5nZSBiZXR3ZWVuIHRoZSBJLWZyYW1lIGFuZAorICogQk9USCBQLWZyYW1lcywgd2hpbGUg c3RheWluZyBpZGVudGljYWwgYmV0d2VlbiB0aGUgdHdvIFAtZnJhbWVzIC0tCisgKiBjb25jbHVz aXZlIGV2aWRlbmNlIG9mIGFuIEkvUCBzcGxpdCwgbm90IHBlci1jb250ZW50IG5vaXNlLiBUaGlz IGRyaXZlcidzCisgKiBzdGF0aWMgYHJrdmVuY19wYXJfY2xhc3NgIGJsb2Igd2FzIGNhcHR1cmVk IGZyb20gYW4gSS1mcmFtZS1vbmx5IHNlc3Npb24sCisgKiBzbyBldmVyeSBQLWZyYW1lIHdhcyBz aWxlbnRseSBnZXR0aW5nIHRoZSBJLXNsaWNlIEFUUiB3ZWlnaHRzLiBTZWUKKyAqIFJLVkVOQ19S RUdfQVRSX1RIRDEvV0dUMTYvV0dUOC9XR1Q0IGJlbG93IGFuZCB0aGUgcGF0Y2ggaW4gcmt2ZW5j LWgyNjQuYy4KKyAqLworI2RlZmluZSBSS1ZFTkNfUkVHX1BBUl9PRkZTRVQJCTB4MTcwMAorI2Rl ZmluZSBSS1ZFTkNfUkVHX1BBUl9TSVpFCQkweDAyZDAJLyogMHgxOWNjIC0gMHgxNzAwICsgNCAq LworCisjZGVmaW5lIFJLVkVOQ19SRUdfQVRSX1RIRDEJCTB4MTc0NAkvKiB0aGQyIChJL1AtZGVw ZW5kZW50KSArIHRoZHFwIChjb25zdGFudCkgKi8KKyNkZWZpbmUgUktWRU5DX1JFR19BVFJfV0dU MTYJCTB4MTc1MAorI2RlZmluZSBSS1ZFTkNfUkVHX0FUUl9XR1Q4CQkweDE3NTQKKyNkZWZpbmUg UktWRU5DX1JFR19BVFJfV0dUNAkJMHgxNzU4CisKK3VuaW9uIHJrdmVuY19yZWdfYXRyX3RoZDEg eworCXN0cnVjdCB7CisJCXUzMiB0aGQyOjg7CisJCXUzMiByZXNlcnZlZDA6ODsKKwkJdTMyIHRo ZHFwOjY7CisJCXUzMiByZXNlcnZlZDE6MTA7CisJfTsKKwl1MzIgdmFsOworfTsKKwordW5pb24g cmt2ZW5jX3JlZ19hdHJfd2d0IHsKKwlzdHJ1Y3QgeworCQl1MzIgd2d0MDo4OworCQl1MzIgd2d0 MTo4OworCQl1MzIgd2d0Mjo4OworCQl1MzIgcmVzZXJ2ZWQ6ODsKKwl9OworCXUzMiB2YWw7Cit9 OworCisvKiAtLS0tIFNRSSBjbGFzcyAoMHgyMDAwLTB4MjEyYyksICJzdWJqZWN0aXZlIEFkanVz dCIgcXVhbnQgdHVuaW5nLgorICogU2FtZSBkZWZhdWx0LXR1bmluZy1wcm9maWxlIGNoYXJhY3Rl cml6YXRpb24gYXMgUEFSQU0gYWJvdmUg4oCUIGEgcmVhbAorICogc3VjY2Vzc2Z1bCBlbmNvZGUg b25seSBldmVyIHdyb3RlIHRoZSBmaXJzdCAweDIwMDAtMHgyMGI4ICh0aGUgcmVzdCBvZgorICog dGhlIGRlY2xhcmVkIGNsYXNzIHJhbmdlIHdhcyBuZXZlciB0b3VjaGVkIGV2ZW4gYnkgYSBnZW51 aW5lbHkgd29ya2luZworICogZW5jb2RlLCBzbyB0aGlzIGRyaXZlciBkb2Vzbid0IHdyaXRlIGl0 IGVpdGhlcikuCisgKgorICogQ09SUkVDVElPTiAoMjAyNi0wNy0yMSk6IHNhbWUgY2F2ZWF0IGFz IFBBUkFNIGFib3ZlIGFwcGxpZXMgdG8gb25lIHdvcmQsCisgKiBzbWVhcl9vcHRfY2ZnICgweDIw MTQsIG1wcCdzIHNldHVwX3ZlcHU1MTBfYW50aV9zbWVhcigpKS4gSXRzCisgKiBgc3RhdGVkX21v ZGVgIGZpZWxkIGlzIDEgaWYgKHRoaXMgc2xpY2UgaXMgSSkgT1IgKHRoZSAqcHJldmlvdXMqIGVu Y29kZWQKKyAqIGZyYW1lIHdhcyBJKSwgZWxzZSAyIC0tIGEgcmVhbCBtdWx0aS1mcmFtZSBjYXB0 dXJlIGNvbmZpcm1lZCB0aGlzIGV4YWN0bHkKKyAqIChmcmFtZSAwIEk6IDE7IGZyYW1lIDEgUCwg cHJldmlvdXM9STogMTsgZnJhbWUgMiBQLCBwcmV2aW91cz1QOiAyKSwgcHVyZQorICogc2xpY2Ut aGlzdG9yeSBzdGF0ZSB0aGlzIGRyaXZlciBjYW4gdHJhY2sgdHJpdmlhbGx5LiBJdHMKKyAqIGBy ZG9fc21lYXJfZGx0X3FwYCBmaWVsZCBpcyBhIGdlbnVpbmVseSBkaWZmZXJlbnQsIGhhcmRlciBj YXNlOiBtcHAKKyAqIGRlcml2ZXMgaXQgZnJvbSByZWFsIHBlci1ibG9jayAic21lYXIiIGFjdGl2 aXR5IHN0YXRpc3RpY3MgcmVhZCBiYWNrIGZyb20KKyAqIHRoZSAqcHJldmlvdXMqIGZyYW1lJ3Mg YWN0dWFsIGhhcmR3YXJlIGVuY29kZSAoYGN0eC0+bGFzdF9mcmFtZV9mYmAsCisgKiBwb3B1bGF0 ZWQgZnJvbSBERUJVRy1jbGFzcyBjb3VudGVycyB0aGlzIGRyaXZlciBoYXMgbmV2ZXIgaW1wbGVt ZW50ZWQKKyAqIHJlYWRiYWNrIGZvcikgLS0gbm90IGp1c3Qgc2xpY2UgdHlwZS4gVGhlIGNhcHR1 cmUgc2hvd2VkIC0xIChJKSB0aGVuIC0zCisgKiAoYm90aCBQIGZyYW1lcyksIHdoaWNoIHRoaXMg ZHJpdmVyIGFwcHJveGltYXRlcyBhcyBhIHN0YXRpYyBwZXItc2xpY2UtCisgKiB0eXBlIGNvbnN0 YW50IChyZWFsIGNvbnRlbnQtYWRhcHRpdmUgdHJhY2tpbmcgaXMgYSBmb2xsb3ctdXAsIHNlZQor ICogdGhpcyBkcml2ZXIgYXBwcm94aW1hdGVzIGl0LCBzaW5jZSBpbXBsZW1lbnRpbmcgZnVsbCBz bWVhci1zdGF0aXN0aWNzIHJlYWRiYWNrIGlzIG91dCBvZgorICogc2NvcGUgaGVyZSBhbmQgdGhp cyBmaWVsZCdzIGVmZmVjdCBpcyBSRE8gY29zdCB0dW5pbmcsIG5vdCBrbm93biB0byBiZQorICog aGFuZy1yZWxldmFudCBsaWtlIHRoZSBSQ19ST0kgY2xhc3Mgd2FzLgorICovCisjZGVmaW5lIFJL VkVOQ19SRUdfU1FJX09GRlNFVAkJMHgyMDAwCisjZGVmaW5lIFJLVkVOQ19SRUdfU1FJX1NJWkUJ CTB4MDBiYwkvKiAweDIwYjggLSAweDIwMDAgKyA0LCBub3QgdGhlIGZ1bGwgY2xhc3MgKi8KKwor I2RlZmluZSBSS1ZFTkNfUkVHX1NNRUFSX09QVF9DRkcJMHgyMDE0CisKK3VuaW9uIHJrdmVuY19y ZWdfc21lYXJfb3B0X2NmZyB7CisJc3RydWN0IHsKKwkJdTMyIHJkb19zbWVhcl9sdmwxNl9tdWx0 aTo4OworCQlzMzIgcmRvX3NtZWFyX2RsdF9xcDo0OworCQl1MzIgcmVzZXJ2ZWQ6MTsKKwkJdTMy IHN0YXRlZF9tb2RlOjI7CisJCXUzMiByZG9fc21lYXJfZW46MTsKKwkJdTMyIHJlc2VydmVkMTox NjsKKwl9OworCXUzMiB2YWw7Cit9OworCisvKiAtLS0tIFNDTCBjbGFzcyAoMHgyMjAwLTB4MjU4 NCksIHNjYWxpbmcgbGlzdHMuCisgKiBBbGwtemVybyBmb3IgYW55IGVuY29kZSB0aGF0IGRvZXNu J3QgdXNlIGEgY3VzdG9tIEguMjY0IHNjYWxpbmcgbGlzdAorICogKHRoaXMgZHJpdmVyIG5ldmVy IGRvZXMpIOKAlCB3cml0dGVuIGV4cGxpY2l0bHkgYW55d2F5LCBldmVyeSBmcmFtZSwKKyAqIHJh dGhlciB0aGFuIHJlbHlpbmcgb24gUE9SL2xlZnRvdmVyLXN0YXRlIGJlaW5nIHplcm8uCisgKi8K KyNkZWZpbmUgUktWRU5DX1JFR19TQ0xfT0ZGU0VUCQkweDIyMDAKKyNkZWZpbmUgUktWRU5DX1JF R19TQ0xfU0laRQkJMHgwMzg4CS8qIDB4MjU4NCAtIDB4MjIwMCArIDQsIGZ1bGwgY2xhc3MgKi8K KworLyogLS0tLSBTVEFUVVMgY2xhc3MgKDB4NDAwMC0weDQyNGMpLCByZWFkLW9ubHkgLS0tLSAq LworI2RlZmluZSBSS1ZFTkNfUkVHX1NUX0JTX0xFTkdUSAkweDQwMDAJLyogYnNfbGd0aF9sMzI6 IHRoaXMtZnJhbWUgYnl0ZSBjb3VudCAqLworI2RlZmluZSBSS1ZFTkNfUkVHX1NUX0JTQgkweDQw MmMJLyogY3VycmVudCBiaXRzdHJlYW0gd3JpdGUgcG9pbnRlciAqLworI2RlZmluZSBSS1ZFTkNf UkVHX1NUX1NMSUNFX05VTQkweDQwMzQJLyogc2xpY2UtZmlmbyBvY2N1cGFuY3ksICYgMHgzZiAq LworI2RlZmluZSBSS1ZFTkNfUkVHX1NUX1NMSUNFX0xFTgkweDQwMzgJLyogc2xpY2UtbGVuZ3Ro IGZpZm8gcmVhZCBwb3J0ICovCisKKyNkZWZpbmUgUktWRU5DX1NMSUNFX0xFTl9MQVNUCQlCSVQo MzEpCisKKy8qIC0tLS0gREVCVUcgY2xhc3MgLS0tLSAqLworI2RlZmluZSBSS1ZFTkNfUkVHX0RC R19DTFIJCTB4NTMwMAorI2RlZmluZSBSS1ZFTkNfREJHX0NMUl9WQUwJCTB4MgorCisjZW5kaWYg LyogUktWRU5DX1JFR1NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v cm9ja2NoaXAvcmt2ZW5jL3JrdmVuYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hp cC9ya3ZlbmMvcmt2ZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5k NzBiY2M1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tj aGlwL3JrdmVuYy9ya3ZlbmMuYwpAQCAtMCwwICsxLDg5MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBSb2NrY2hpcCBWRVBVNTEwIChSSzM1NzYpIGhhcmR3 YXJlIHZpZGVvIGVuY29kZXIgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyNiBKaWF4 aW5nIEh1IDxnYWhpbmdAZ2FoaW5nd29vLmNvbT4KKyAqCisgKiBBcmNoaXRlY3R1cmUgbm90ZXMg KHNlZSBhbHNvIHJrdmVuYy1yZWdzLmgpOgorICoKKyAqICAtIFRoaXMgaXMgYSAqc3RhdGVmdWwq IFY0TDIgbWVtMm1lbSBlbmNvZGVyIChyYXcgTlYxMiBpbiBvbiBPVVRQVVQsCisgKiAgICBILjI2 NCBBbm5leC1CIG91dCBvbiBDQVBUVVJFKSBtb2RlbGxlZCBvbgorICogICAgZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS92ZXJpc2lsaWNvbidzIGhhbnRyb19kcnYuYyBkZXZpY2VfcnVuKCkvCisgKiAg ICBjb2RlY19vcHN7cnVuLGRvbmV9IHNwbGl0LCBOT1Qgb24gcmt2ZGVjJ3Mgc3RhdGVsZXNzIHJl cXVlc3QtQVBJCisgKiAgICBkZWNvZGVyIHBhdHRlcm4g4oCUIGFuIGVuY29kZXIgaGFzIG5vIHBl ci1mcmFtZSBiaXRzdHJlYW0gdG8gcGFyc2UsCisgKiAgICBzbyB0aGVyZSBpcyBub3RoaW5nIGFu YWxvZ291cyB0byBya3ZkZWNfcnVuX3ByZWFtYmxlL3Bvc3RhbWJsZSBoZXJlLgorICoKKyAqICAt IFRoZSB2ZW5kb3IgZG93bnN0cmVhbSBkcml2ZXIgKHJvY2tjaGlwLWxpbnV4L2tlcm5lbCwKKyAq ICAgIGRyaXZlcnMvdmlkZW8vcm9ja2NoaXAvbXBwL21wcF9ya3ZlbmMyLmMpIGdyb3VwcyBya3Zl bmMwL3JrdmVuYzEKKyAqICAgIHVuZGVyIGEgIkNDVSIgKHJvY2tjaGlwLHJrdi1lbmNvZGVyLXJr MzU3Ni1jY3UpIHRoYXQgZG9lcyBwdXJlCisgKiAgICBzb2Z0d2FyZSB0YXNrLXF1ZXVlIGxvYWQg YmFsYW5jaW5nIGFjcm9zcyBib3RoIGNvcmVzLCBwbHVzIGFuCisgKiAgICBvcHRpb25hbCBEQ0hT IChkdWFsLWNvcmUtaGFuZHNoYWtlKSByZWdpc3RlciBwcm90b2NvbCB1c2VkIG9ubHkKKyAqICAg IHdoZW4gKmRlbGliZXJhdGVseSogc3BsaXR0aW5nIG9uZSBmcmFtZSdzIHJvd3MgYWNyb3NzIGJv dGggY29yZXMuCisgKiAgICBUaGVyZSBpcyBubyBoYXJkd2FyZSBkZXNjcmlwdG9yL2xpbmstbGlz dCBlbmdpbmUgYmVoaW5kIGl0ICh1bmxpa2UKKyAqICAgIHRoZSBkZWNvZGVyJ3MgQ0NVKS4gdjEg b2YgdGhpcyBkcml2ZXIgZG9lcyBub3QgaW1wbGVtZW50IGVpdGhlcjoKKyAqICAgIHJrdmVuYzAg YW5kIHJrdmVuYzEgYXJlIGV4cG9zZWQgYXMgdHdvIGluZGVwZW5kZW50IFY0TDIgTTJNIGRldmlj ZQorICogICAgbm9kZXMsIGVhY2ggZHJpdmluZyBvbmUgcGh5c2ljYWwgY29yZSBzdGFuZGFsb25l IOKAlCB0aGUgc2FtZQorICogICAgc2ltcGxpZmljYXRpb24gcmt2ZGVjIGl0c2VsZiBtYWtlcyBm b3IgbXVsdGktY29yZSBWRFBVIGhhcmR3YXJlCisgKiAgICAoc2VlIHJrdmRlY19kaXNhYmxlX211 bHRpY29yZSgpKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUg PGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8bWVk aWEvdjRsMi1ldmVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRl IDxtZWRpYS92NGwyLW1lbTJtZW0uaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNv bnRpZy5oPgorCisjaW5jbHVkZSAicmt2ZW5jLmgiCisjaW5jbHVkZSAicmt2ZW5jLXJlZ3MuaCIK KworI2RlZmluZSBSS1ZFTkNfV0FUQ0hET0dfVElNRU9VVF9NUwk4MDAKKyNkZWZpbmUgUktWRU5D X0RFRkFVTFRfV0lEVEgJCTE3NgorI2RlZmluZSBSS1ZFTkNfREVGQVVMVF9IRUlHSFQJCTE0NAor I2RlZmluZSBSS1ZFTkNfTUFYX1dJRFRICQk0MDk2CisjZGVmaW5lIFJLVkVOQ19NQVhfSEVJR0hU CQkyNTYwCisKKyNkZWZpbmUgUktWRU5DX0FVVE9TVVNQRU5EX0RFTEFZX01TCQkxMDAKKworLyog UGVyLXJlc29sdXRpb24gaGFyZHdhcmUgd2F0Y2hkb2cgdGhyZXNob2xkIHRhYmxlLCBwb3J0ZWQg ZnJvbSB0aGUKKyAqIGRvd25zdHJlYW0gdmVuZG9yIGRyaXZlcidzIHJrdmVuYzJfY2FsY190aW1l b3V0X3RoZCgpIC8KKyAqIHJrdmVuYzJfdGltZW91dF90aGRfYnlfcnNsW10uIFZFUFU1MTAgc2Nh bGVzIHRoZSBFTkNfV0RHIHJlZ2lzdGVyIGluCisgKiB1bml0cyBvZiAyNTYgY29yZS1jbG9jayBj eWNsZXMgKG90aGVyIFZFUFUgdmFyaWFudHMgdXNlIDEwMjQpIOKAlCB0aGlzCisgKiDDlzI1NiBm YWN0b3IgaXMgY29uZmlybWVkIGZyb20gdGhlIHZlbmRvciBrZXJuZWwgc291cmNlLiBUaGUgZmll bGQKKyAqIGl0c2VsZiAodnNfbG9hZF90aGQsIGJpdHNbMjM6MF0gb2YgRU5DX1dERyBwZXIgbXBw J3MgVmVwdTUxMENvbnRyb2xDZmcpCisgKiBpcyAyNCBiaXRzIHdpZGUsIG5vdCAidGhlIHJlZ2lz dGVyJ3MgdG9wIGJ5dGUiIGFzIGFuIGVhcmxpZXIgcmVhZGluZyBvZgorICogdGhlIHZlbmRvciBr ZXJuZWwgZHJpdmVyJ3MgY29tbWVudHMgc3VnZ2VzdGVkOyB0aGF0IGVhcmxpZXIgcmVhZGluZwor ICogcHJvZHVjZWQgYSB3cm9uZyBzaGlmdCAoc2VlIGdpdCBoaXN0b3J5KS4KKyAqLworc3RydWN0 IHJrdmVuY193ZGdfZW50cnkgeworCXUzMiBwaXhlbHM7CisJdTMyIG1zOworfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBya3ZlbmNfd2RnX2VudHJ5IHJrdmVuY193ZGdfdGFibGVbXSA9IHsKKwl7 IDE5MjAgKiAxMDg4LCA1MCB9LAorCXsgMjU2MCAqIDE0NDAsIDEwMCB9LAorCXsgNDA5NiAqIDIz MDQsIDIwMCB9LAorCXsgODE5MiAqIDgxOTIsIDQwMCB9LAorCXsgMTUzNjAgKiA4NjQwLCA4MDAg fSwKK307CisKK3UzMiBya3ZlbmNfY2FsY193ZGcoc3RydWN0IHJrdmVuY19kZXYgKmRldiwgdW5z aWduZWQgaW50IHdpZHRoLAorCQkgICAgdW5zaWduZWQgaW50IGhlaWdodCkKK3sKKwl1bnNpZ25l ZCBpbnQgcGl4ZWxzID0gd2lkdGggKiBoZWlnaHQ7CisJdW5zaWduZWQgaW50IG1zID0gcmt2ZW5j X3dkZ190YWJsZVtBUlJBWV9TSVpFKHJrdmVuY193ZGdfdGFibGUpIC0gMV0ubXM7CisJdTY0IGN5 Y2xlczsKKwl1MzIgdGhkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo cmt2ZW5jX3dkZ190YWJsZSk7IGkrKykgeworCQlpZiAocGl4ZWxzIDw9IHJrdmVuY193ZGdfdGFi bGVbaV0ucGl4ZWxzKSB7CisJCQltcyA9IHJrdmVuY193ZGdfdGFibGVbaV0ubXM7CisJCQlicmVh azsKKwkJfQorCX0KKworCWN5Y2xlcyA9ICh1NjQpbXMgKiAoZGV2LT5jb3JlX2Nsa19yYXRlIC8g MTAwMCk7CisJZG9fZGl2KGN5Y2xlcywgMjU2KTsKKwl0aGQgPSBtaW5fdCh1NjQsIGN5Y2xlcywg MHhmZmZmZmYpOworCisJcmV0dXJuIHRoZDsKK30KKworLyogLS0tLSBmb3JtYXQgaGVscGVycyAt LS0tICovCisKK3N0YXRpYyBjb25zdCB1MzIgcmt2ZW5jX3NyY19mb3VyY2MgPSBWNEwyX1BJWF9G TVRfTlYxMjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBya3ZlbmNfY29kZWRfZm10X2Rlc2MgKnJr dmVuY19jb2RlZF9kZXNjc1tdID0geworCSZya3ZlbmNfaDI2NF9mbXRfZGVzYywKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgcmt2ZW5jX2NvZGVkX2ZtdF9kZXNjICpya3ZlbmNfZmluZF9jb2Rl ZF9kZXNjKHUzMiBmb3VyY2MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShya3ZlbmNfY29kZWRfZGVzY3MpOyBpKyspIHsKKwkJaWYgKHJrdmVuY19jb2RlZF9kZXNj c1tpXS0+Zm91cmNjID09IGZvdXJjYykKKwkJCXJldHVybiBya3ZlbmNfY29kZWRfZGVzY3NbaV07 CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1MzIgcmt2ZW5jX252MTJfc2l6ZWlt YWdlKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKK3sKKwlyZXR1cm4g d2lkdGggKiBoZWlnaHQgKyAyICogQUxJR04od2lkdGgsIDIpIC8gMiAqIEFMSUdOKGhlaWdodCwg MikgLyAyICogMjsKK30KKworc3RhdGljIHUzMiBya3ZlbmNfY29kZWRfc2l6ZWltYWdlKHVuc2ln bmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKK3sKKwkvKiBHZW5lcm91cyBmaXhl ZCB1cHBlciBib3VuZCBmb3IgYSBzaW5nbGUgZml4ZWQtUVAgYmFzZWxpbmUgZnJhbWU7CisJICog cmV2aXNpdCBvbmNlIHJlYWwgQ0JSL1ZCUiBidWRnZXQgY29udHJvbCBsYW5kcy4KKwkgKi8KKwly ZXR1cm4gbWF4X3QodTMyLCB3aWR0aCAqIGhlaWdodCwgU1pfMTI4Syk7Cit9CisKK3N0YXRpYyB2 b2lkIHJrdmVuY19maWxsX3NyY19mbXQoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqZm10KQorewor CWZtdC0+cGl4ZWxmb3JtYXQgPSBya3ZlbmNfc3JjX2ZvdXJjYzsKKwlmbXQtPndpZHRoID0gY2xh bXBfdCh1MzIsIGZtdC0+d2lkdGgsIFJLVkVOQ19ERUZBVUxUX1dJRFRILCBSS1ZFTkNfTUFYX1dJ RFRIKTsKKwlmbXQtPmhlaWdodCA9IGNsYW1wX3QodTMyLCBmbXQtPmhlaWdodCwgUktWRU5DX0RF RkFVTFRfSEVJR0hULCBSS1ZFTkNfTUFYX0hFSUdIVCk7CisJZm10LT53aWR0aCA9IEFMSUdOKGZt dC0+d2lkdGgsIDIpOworCWZtdC0+aGVpZ2h0ID0gQUxJR04oZm10LT5oZWlnaHQsIDIpOworCWZt dC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJZm10LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xP UlNQQUNFX1JFQzcwOTsKKwlmbXQtPmJ5dGVzcGVybGluZSA9IGZtdC0+d2lkdGg7CisJZm10LT5z aXplaW1hZ2UgPSBya3ZlbmNfbnYxMl9zaXplaW1hZ2UoZm10LT53aWR0aCwgZm10LT5oZWlnaHQp OworfQorCitzdGF0aWMgdm9pZCBya3ZlbmNfZmlsbF9jb2RlZF9mbXQoc3RydWN0IHY0bDJfcGl4 X2Zvcm1hdCAqZm10LAorCQkJCSAgY29uc3Qgc3RydWN0IHJrdmVuY19jb2RlZF9mbXRfZGVzYyAq ZGVzYykKK3sKKwlmbXQtPnBpeGVsZm9ybWF0ID0gZGVzYy0+Zm91cmNjOworCWZtdC0+d2lkdGgg PSBjbGFtcF90KHUzMiwgZm10LT53aWR0aCwgZGVzYy0+ZnJtc2l6ZS5mcm1zaXplX21pbl93aWR0 aCwKKwkJCSAgICAgIGRlc2MtPmZybXNpemUuZnJtc2l6ZV9tYXhfd2lkdGgpOworCWZtdC0+aGVp Z2h0ID0gY2xhbXBfdCh1MzIsIGZtdC0+aGVpZ2h0LCBkZXNjLT5mcm1zaXplLmZybXNpemVfbWlu X2hlaWdodCwKKwkJCSAgICAgICBkZXNjLT5mcm1zaXplLmZybXNpemVfbWF4X2hlaWdodCk7CisJ Zm10LT53aWR0aCA9IEFMSUdOKGZtdC0+d2lkdGgsIDIpOworCWZtdC0+aGVpZ2h0ID0gQUxJR04o Zm10LT5oZWlnaHQsIDIpOworCWZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJZm10LT5i eXRlc3BlcmxpbmUgPSAwOworCWZtdC0+c2l6ZWltYWdlID0gcmt2ZW5jX2NvZGVkX3NpemVpbWFn ZShmbXQtPndpZHRoLCBmbXQtPmhlaWdodCk7Cit9CisKKy8qIC0tLS0gaW9jdGxfb3BzIC0tLS0g Ki8KKworc3RhdGljIGludCBya3ZlbmNfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQg KnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3Ryc2NweShj YXAtPmRyaXZlciwgInJrdmVuYyIsIHNpemVvZihjYXAtPmRyaXZlcikpOworCXN0cnNjcHkoY2Fw LT5jYXJkLCAicm9ja2NoaXAscmt2LWVuY29kZXItcmszNTc2Iiwgc2l6ZW9mKGNhcC0+Y2FyZCkp OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJrdmVuY19lbnVtX2ZtdF92aWRfY2FwKHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSAgIHN0cnVjdCB2NGwyX2ZtdGRlc2Mg KmYpCit7CisJaWYgKGYtPmluZGV4ID49IEFSUkFZX1NJWkUocmt2ZW5jX2NvZGVkX2Rlc2NzKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmLT5waXhlbGZvcm1hdCA9IHJrdmVuY19jb2RlZF9kZXNj c1tmLT5pbmRleF0tPmZvdXJjYzsKKwlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NF RDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBya3ZlbmNfZW51bV9mbXRfdmlkX291dChz dHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9mbXRkZXNj ICpmKQoreworCWlmIChmLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWYtPnBp eGVsZm9ybWF0ID0gcmt2ZW5jX3NyY19mb3VyY2M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgcmt2ZW5jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJ CQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBya3ZlbmNfY3R4ICpjdHggPSBm aF90b19ya3ZlbmNfY3R4KGZpbGVfdG9fdjRsMl9maChmaWxlKSk7CisKKwlmLT5mbXQucGl4ID0g Y3R4LT5jb2RlZF9mbXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmt2ZW5jX2dfZm10 X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJf Zm9ybWF0ICpmKQoreworCXN0cnVjdCBya3ZlbmNfY3R4ICpjdHggPSBmaF90b19ya3ZlbmNfY3R4 KGZpbGVfdG9fdjRsMl9maChmaWxlKSk7CisKKwlmLT5mbXQucGl4ID0gY3R4LT5zcmNfZm10Owor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJrdmVuY190cnlfZm10X3ZpZF9jYXAoc3RydWN0 IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7 CisJY29uc3Qgc3RydWN0IHJrdmVuY19jb2RlZF9mbXRfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBy a3ZlbmNfZmluZF9jb2RlZF9kZXNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWlmICghZGVz YykKKwkJZGVzYyA9IHJrdmVuY19jb2RlZF9kZXNjc1swXTsKKworCXJrdmVuY19maWxsX2NvZGVk X2ZtdCgmZi0+Zm10LnBpeCwgZGVzYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmt2 ZW5jX3RyeV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkg IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlya3ZlbmNfZmlsbF9zcmNfZm10KCZmLT5mbXQu cGl4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBya3ZlbmNfc19mbXRfdmlkX2NhcChz dHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYp Cit7CisJc3RydWN0IHJrdmVuY19jdHggKmN0eCA9IGZoX3RvX3JrdmVuY19jdHgoZmlsZV90b192 NGwyX2ZoKGZpbGUpKTsKKwljb25zdCBzdHJ1Y3Qgcmt2ZW5jX2NvZGVkX2ZtdF9kZXNjICpkZXNj OworCisJaWYgKHZiMl9pc19idXN5KHY0bDJfbTJtX2dldF9kc3RfdnEoY3R4LT5maC5tMm1fY3R4 KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlkZXNjID0gcmt2ZW5jX2ZpbmRfY29kZWRfZGVzYyhm LT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlpZiAoIWRlc2MpCisJCWRlc2MgPSBya3ZlbmNfY29k ZWRfZGVzY3NbMF07CisKKwlya3ZlbmNfZmlsbF9jb2RlZF9mbXQoJmYtPmZtdC5waXgsIGRlc2Mp OworCWN0eC0+Y29kZWRfZm10ID0gZi0+Zm10LnBpeDsKKwljdHgtPmNvZGVkX2Rlc2MgPSBkZXNj OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJrdmVuY19zX2ZtdF92aWRfb3V0KHN0cnVj dCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sK KwlzdHJ1Y3Qgcmt2ZW5jX2N0eCAqY3R4ID0gZmhfdG9fcmt2ZW5jX2N0eChmaWxlX3RvX3Y0bDJf ZmgoZmlsZSkpOworCisJaWYgKHZiMl9pc19idXN5KHY0bDJfbTJtX2dldF9zcmNfdnEoY3R4LT5m aC5tMm1fY3R4KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlya3ZlbmNfZmlsbF9zcmNfZm10KCZm LT5mbXQucGl4KTsKKwljdHgtPnNyY19mbXQgPSBmLT5mbXQucGl4OworCXJldHVybiAwOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHJrdmVuY19pb2N0bF9vcHMgPSB7 CisJLnZpZGlvY19xdWVyeWNhcAkJPSBya3ZlbmNfcXVlcnljYXAsCisKKwkudmlkaW9jX2VudW1f Zm10X3ZpZF9jYXAJPSBya3ZlbmNfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3Zp ZF9jYXAJCT0gcmt2ZW5jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJ CT0gcmt2ZW5jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAJCT0gcmt2 ZW5jX3NfZm10X3ZpZF9jYXAsCisKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9vdXQJPSBya3ZlbmNf ZW51bV9mbXRfdmlkX291dCwKKwkudmlkaW9jX2dfZm10X3ZpZF9vdXQJCT0gcmt2ZW5jX2dfZm10 X3ZpZF9vdXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdXQJCT0gcmt2ZW5jX3RyeV9mbXRfdmlk X291dCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdXQJCT0gcmt2ZW5jX3NfZm10X3ZpZF9vdXQsCisK KwkudmlkaW9jX3JlcWJ1ZnMJCQk9IHY0bDJfbTJtX2lvY3RsX3JlcWJ1ZnMsCisJLnZpZGlvY19x dWVyeWJ1ZgkJPSB2NGwyX20ybV9pb2N0bF9xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYJCQk9IHY0 bDJfbTJtX2lvY3RsX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJCT0gdjRsMl9tMm1faW9jdGxfZHFi dWYsCisJLnZpZGlvY19wcmVwYXJlX2J1ZgkJPSB2NGwyX20ybV9pb2N0bF9wcmVwYXJlX2J1ZiwK KwkudmlkaW9jX2NyZWF0ZV9idWZzCQk9IHY0bDJfbTJtX2lvY3RsX2NyZWF0ZV9idWZzLAorCS52 aWRpb2NfZXhwYnVmCQkJPSB2NGwyX20ybV9pb2N0bF9leHBidWYsCisJLnZpZGlvY19zdHJlYW1v bgkJPSB2NGwyX20ybV9pb2N0bF9zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZgkJPSB2NGwy X20ybV9pb2N0bF9zdHJlYW1vZmYsCisKKwkudmlkaW9jX3RyeV9lbmNvZGVyX2NtZAkJPSB2NGwy X20ybV9pb2N0bF90cnlfZW5jb2Rlcl9jbWQsCisJLnZpZGlvY19lbmNvZGVyX2NtZAkJPSB2NGwy X20ybV9pb2N0bF9lbmNvZGVyX2NtZCwKKworCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0 bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsCisJLnZpZGlvY191bnN1YnNjcmliZV9ldmVudAk9IHY0 bDJfZXZlbnRfdW5zdWJzY3JpYmUsCit9OworCisvKiAtLS0tIHZiMl9vcHMgLS0tLSAqLworCitz dGF0aWMgaW50IHJrdmVuY19xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWdu ZWQgaW50ICpudW1fYnVmZmVycywKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqbnVtX3BsYW5lcywg dW5zaWduZWQgaW50IHNpemVzW10sCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICphbGxvY19kZXZz W10pCit7CisJc3RydWN0IHJrdmVuY19jdHggKmN0eCA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwor CXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmZtdDsKKworCWZtdCA9IFY0TDJfVFlQRV9JU19PVVRQ VVQodnEtPnR5cGUpID8gJmN0eC0+c3JjX2ZtdCA6ICZjdHgtPmNvZGVkX2ZtdDsKKworCWlmICgq bnVtX3BsYW5lcykgeworCQlpZiAoc2l6ZXNbMF0gPCBmbXQtPnNpemVpbWFnZSkKKwkJCXJldHVy biAtRUlOVkFMOworCX0gZWxzZSB7CisJCSpudW1fcGxhbmVzID0gMTsKKwkJc2l6ZXNbMF0gPSBm bXQtPnNpemVpbWFnZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBya3ZlbmNf YnVmX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCB2YjJfdjRsMl9i dWZmZXIgKnZidWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOworCXN0cnVjdCBya3ZlbmNfY3R4 ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOworCXN0cnVjdCB2NGwyX3Bp eF9mb3JtYXQgKmZtdDsKKworCWZtdCA9IFY0TDJfVFlQRV9JU19PVVRQVVQodmItPnZiMl9xdWV1 ZS0+dHlwZSkgPyAmY3R4LT5zcmNfZm10IDogJmN0eC0+Y29kZWRfZm10OworCisJaWYgKHZiMl9w bGFuZV9zaXplKHZiLCAwKSA8IGZtdC0+c2l6ZWltYWdlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmIChWNEwyX1RZUEVfSVNfT1VUUFVUKHZiLT52YjJfcXVldWUtPnR5cGUpKQorCQl2YjJfc2V0 X3BsYW5lX3BheWxvYWQodmIsIDAsIGZtdC0+c2l6ZWltYWdlKTsKKwllbHNlCisJCXZidWYtPmZp ZWxkID0gVjRMMl9GSUVMRF9OT05FOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJr dmVuY19idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBya3ZlbmNf Y3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOworCisJdjRsMl9tMm1f YnVmX3F1ZXVlKGN0eC0+ZmgubTJtX2N0eCwgdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKSk7Cit9CisK K3N0YXRpYyBpbnQgcmt2ZW5jX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1 bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHJrdmVuY19jdHggKmN0eCA9IHZiMl9nZXRf ZHJ2X3ByaXYocSk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoVjRMMl9UWVBFX0lTX09VVFBVVChx LT50eXBlKSAmJiBjdHgtPmNvZGVkX2Rlc2MgJiYgY3R4LT5jb2RlZF9kZXNjLT5vcHMtPnN0YXJ0 KQorCQlyZXQgPSBjdHgtPmNvZGVkX2Rlc2MtPm9wcy0+c3RhcnQoY3R4KTsKKworCWlmIChyZXQp IHsKKwkJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZjsKKworCQl3aGlsZSAoKHZidWYgPSB2 NGwyX20ybV9zcmNfYnVmX3JlbW92ZShjdHgtPmZoLm0ybV9jdHgpKSkKKwkJCXY0bDJfbTJtX2J1 Zl9kb25lKHZidWYsIFZCMl9CVUZfU1RBVEVfUVVFVUVEKTsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCBya3ZlbmNfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAq cSkKK3sKKwlzdHJ1Y3Qgcmt2ZW5jX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdihxKTsKKwlz dHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmOworCisJZm9yICg7OykgeworCQlpZiAoVjRMMl9U WVBFX0lTX09VVFBVVChxLT50eXBlKSkKKwkJCXZidWYgPSB2NGwyX20ybV9zcmNfYnVmX3JlbW92 ZShjdHgtPmZoLm0ybV9jdHgpOworCQllbHNlCisJCQl2YnVmID0gdjRsMl9tMm1fZHN0X2J1Zl9y ZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsKKworCQlpZiAoIXZidWYpCisJCQlicmVhazsKKworCQl2 NGwyX20ybV9idWZfZG9uZSh2YnVmLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwl9CisKKwlpZiAo VjRMMl9UWVBFX0lTX09VVFBVVChxLT50eXBlKSAmJiBjdHgtPmNvZGVkX2Rlc2MgJiYgY3R4LT5j b2RlZF9kZXNjLT5vcHMtPnN0b3ApCisJCWN0eC0+Y29kZWRfZGVzYy0+b3BzLT5zdG9wKGN0eCk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmIyX29wcyBya3ZlbmNfcW9wcyA9IHsKKwkucXVl dWVfc2V0dXAJPSBya3ZlbmNfcXVldWVfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlCT0gcmt2ZW5jX2J1 Zl9wcmVwYXJlLAorCS5idWZfcXVldWUJPSBya3ZlbmNfYnVmX3F1ZXVlLAorCS5zdGFydF9zdHJl YW1pbmcgPSBya3ZlbmNfc3RhcnRfc3RyZWFtaW5nLAorCS5zdG9wX3N0cmVhbWluZwk9IHJrdmVu Y19zdG9wX3N0cmVhbWluZywKK307CisKK3N0YXRpYyBpbnQgcmt2ZW5jX3F1ZXVlX2luaXQodm9p ZCAqcHJpdiwgc3RydWN0IHZiMl9xdWV1ZSAqc3JjX3ZxLAorCQkJICAgICBzdHJ1Y3QgdmIyX3F1 ZXVlICpkc3RfdnEpCit7CisJc3RydWN0IHJrdmVuY19jdHggKmN0eCA9IHByaXY7CisJaW50IHJl dDsKKworCXNyY192cS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCXNyY192 cS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUY7CisJc3JjX3ZxLT5kcnZfcHJpdiA9 IGN0eDsKKwlzcmNfdnEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9tMm1f YnVmZmVyKTsKKwlzcmNfdnEtPm9wcyA9ICZya3ZlbmNfcW9wczsKKwlzcmNfdnEtPm1lbV9vcHMg PSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOworCXNyY192cS0+dGltZXN0YW1wX2ZsYWdzID0gVjRM Ml9CVUZfRkxBR19USU1FU1RBTVBfQ09QWTsKKwlzcmNfdnEtPmxvY2sgPSAmY3R4LT5kZXYtPnZm ZF9tdXRleDsKKwlzcmNfdnEtPmRldiA9IGN0eC0+ZGV2LT52NGwyX2Rldi5kZXY7CisJcmV0ID0g dmIyX3F1ZXVlX2luaXQoc3JjX3ZxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHN0 X3ZxLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWRzdF92cS0+aW9fbW9k ZXMgPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUY7CisJZHN0X3ZxLT5kcnZfcHJpdiA9IGN0eDsKKwlk c3RfdnEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9tMm1fYnVmZmVyKTsK Kwlkc3RfdnEtPm9wcyA9ICZya3ZlbmNfcW9wczsKKwlkc3RfdnEtPm1lbV9vcHMgPSAmdmIyX2Rt YV9jb250aWdfbWVtb3BzOworCWRzdF92cS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxB R19USU1FU1RBTVBfQ09QWTsKKwlkc3RfdnEtPmxvY2sgPSAmY3R4LT5kZXYtPnZmZF9tdXRleDsK Kwlkc3RfdnEtPmRldiA9IGN0eC0+ZGV2LT52NGwyX2Rldi5kZXY7CisJcmV0dXJuIHZiMl9xdWV1 ZV9pbml0KGRzdF92cSk7Cit9CisKKy8qIC0tLS0gdjRsMl9tMm1fb3BzIC0tLS0gKi8KKwordm9p ZCBya3ZlbmNfam9iX2ZpbmlzaChzdHJ1Y3Qgcmt2ZW5jX2RldiAqZGV2LCBzdHJ1Y3Qgcmt2ZW5j X2N0eCAqY3R4LAorCQkgICAgICAgZW51bSB2YjJfYnVmZmVyX3N0YXRlIHN0YXRlKQoreworCWNs a19idWxrX2Rpc2FibGUoZGV2LT5udW1fY2xvY2tzLCBkZXYtPmNsb2Nrcyk7CisJcG1fcnVudGlt ZV9tYXJrX2xhc3RfYnVzeShkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQo ZGV2LT5kZXYpOworCisJZGV2LT5jdXJfY3R4ID0gTlVMTDsKKwl2NGwyX20ybV9idWZfZG9uZV9h bmRfam9iX2ZpbmlzaChkZXYtPm0ybV9kZXYsIGN0eC0+ZmgubTJtX2N0eCwgc3RhdGUpOworfQor CitzdGF0aWMgdm9pZCBya3ZlbmNfZGV2aWNlX3J1bih2b2lkICpwcml2KQoreworCXN0cnVjdCBy a3ZlbmNfY3R4ICpjdHggPSBwcml2OworCXN0cnVjdCBya3ZlbmNfZGV2ICpkZXYgPSBjdHgtPmRl djsKKwlpbnQgcmV0OworCisJcmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkZXYtPmRl dik7CisJaWYgKHJldCA8IDApIHsKKwkJdjRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5pc2go ZGV2LT5tMm1fZGV2LCBjdHgtPmZoLm0ybV9jdHgsCisJCQkJCQkgIFZCMl9CVUZfU1RBVEVfRVJS T1IpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gY2xrX2J1bGtfZW5hYmxlKGRldi0+bnVtX2Ns b2NrcywgZGV2LT5jbG9ja3MpOworCWlmIChyZXQpIHsKKwkJcG1fcnVudGltZV9wdXRfYXV0b3N1 c3BlbmQoZGV2LT5kZXYpOworCQl2NGwyX20ybV9idWZfZG9uZV9hbmRfam9iX2ZpbmlzaChkZXYt Pm0ybV9kZXYsIGN0eC0+ZmgubTJtX2N0eCwKKwkJCQkJCSAgVkIyX0JVRl9TVEFURV9FUlJPUik7 CisJCXJldHVybjsKKwl9CisKKwl2NGwyX20ybV9idWZfY29weV9tZXRhZGF0YShya3ZlbmNfZ2V0 X3NyY19idWYoY3R4KSwgcmt2ZW5jX2dldF9kc3RfYnVmKGN0eCkpOworCisJZGV2LT5jdXJfY3R4 ID0gY3R4OworCWRldi0+aXJxX3N0YXR1cyA9IDA7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZk ZXYtPndhdGNoZG9nX3dvcmssCisJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKFJLVkVOQ19XQVRD SERPR19USU1FT1VUX01TKSk7CisKKwljdHgtPmNvZGVkX2Rlc2MtPm9wcy0+cnVuKGN0eCk7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9tMm1fb3BzIHJrdmVuY19tMm1fb3BzID0gewor CS5kZXZpY2VfcnVuID0gcmt2ZW5jX2RldmljZV9ydW4sCit9OworCisvKiAtLS0tIElSUSBoYW5k bGluZyAtLS0tICovCisKK3N0YXRpYyBib29sIHJrdmVuY19kcmFpbl9zbGljZXMoc3RydWN0IHJr dmVuY19kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBya3ZlbmNfcmVhZChkZXYs IFJLVkVOQ19SRUdfU1RfU0xJQ0VfTlVNKSAmIDB4M2Y7CisJYm9vbCBsYXN0ID0gZmFsc2U7CisJ dW5zaWduZWQgaW50IGk7CisJdTMyIHZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr KSB7CisJCXZhbCA9IHJrdmVuY19yZWFkKGRldiwgUktWRU5DX1JFR19TVF9TTElDRV9MRU4pOwor CQlpZiAodmFsICYgQklUKDMxKSkKKwkJCWxhc3QgPSB0cnVlOworCX0KKworCXJldHVybiBsYXN0 OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgcmt2ZW5jX2lycShpbnQgaXJxLCB2b2lkICpwcml2 KQoreworCXN0cnVjdCBya3ZlbmNfZGV2ICpkZXYgPSBwcml2OworCXUzMiBzdGF0dXMgPSBya3Zl bmNfcmVhZChkZXYsIFJLVkVOQ19SRUdfSU5UX1NUQSk7CisJYm9vbCBkb25lID0gZmFsc2U7CisK Kwlya3ZlbmNfd3JpdGUoZGV2LCBSS1ZFTkNfUkVHX0lOVF9DTFIsIHN0YXR1cyk7CisKKwlpZiAo c3RhdHVzICYgQklUKDgpIC8qIHdkZ19zdGEgKi8pIHsKKwkJdTMyIG1hc2sgPSBya3ZlbmNfcmVh ZChkZXYsIFJLVkVOQ19SRUdfSU5UX01BU0spOworCisJCXJrdmVuY193cml0ZShkZXYsIFJLVkVO Q19SRUdfSU5UX01BU0ssIG1hc2sgfCBCSVQoOCkpOworCX0KKworCWlmICghZGV2LT5jdXJfY3R4 KQorCQlyZXR1cm4gc3RhdHVzID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKKworCS8qIFZFUFU1 MTAgZXJyYXRhICh2ZW5kb3IgY29tbWVudCk6IGludF9zdGEgRU5DX0RPTkUgaXMgbm90IHJlbGlh YmxlCisJICogb24gaXRzIG93biDigJQgdGhlIGhhcmR3YXJlIGhhcyBiZWVuIG9ic2VydmVkIHRv IHNraXAgcmFpc2luZyBpdAorCSAqIGV2ZW4gdGhvdWdoIHRoZSBmcmFtZSBpcyBhY3R1YWxseSBm aW5pc2hlZC4gVGhlIHNsaWNlLWxlbmd0aAorCSAqIEZJRk8ncyAibGFzdCIgZmxhZyAoYWx3YXlz IHBvcHVsYXRlZCBiZWNhdXNlIEVOQ19QSUMuU0xFTl9GSUZPIGlzCisJICogZm9yY2VkIG9uIGZv ciBldmVyeSBWRVBVNTEwIHRhc2ssIHNlZSBya3ZlbmNfdmVwdTUxMF9xdWlyaygpKSBpcworCSAq IHRoZSBhdXRob3JpdGF0aXZlIGNvbXBsZXRpb24gc2lnbmFsIGluc3RlYWQuCisJICovCisJaWYg KHJrdmVuY19kcmFpbl9zbGljZXMoZGV2KSkgeworCQlya3ZlbmNfd3JpdGUoZGV2LCBSS1ZFTkNf UkVHX0VOQ19JRCwgMCk7CisJCXVkZWxheSg1KTsKKwkJc3RhdHVzIHw9IHJrdmVuY19yZWFkKGRl diwgUktWRU5DX1JFR19JTlRfU1RBKTsKKwkJZG9uZSA9IHRydWU7CisJfQorCisJaWYgKHN0YXR1 cyAmIChCSVQoMCkgLyogZW5jX2RvbmVfc3RhICovIHwgUktWRU5DX0lOVF9FUlJPUl9NQVNLKSkK KwkJZG9uZSA9IHRydWU7CisKKwlkZXYtPmlycV9zdGF0dXMgfD0gc3RhdHVzOworCisJcmV0dXJu IGRvbmUgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfSEFORExFRDsKK30KKworLyogR3JhY2VmdWwg Y29yZSByZWNvdmVyeSBhZnRlciBhbiBlcnJvci90aW1lb3V0LCBtaXJyb3JpbmcgdGhlIGRvd25z dHJlYW0KKyAqIHZlbmRvciBrZXJuZWwncyBya3ZlbmNfc29mdF9yZXNldCgpIChtcHBfcmt2ZW5j Mi5jKTogYSBTQUZFIGNsZWFyIHZpYQorICogRU5DX0NMUiBkcmFpbnMgdGhlIGNvcmUncyBvdXRz dGFuZGluZyBBWEkgdHJhbnNhY3Rpb25zIHNvIHRoZSBJT01NVSBjYW4KKyAqIGRpc2FibGUgY2xl YW5seSwgdGhlbiBhIEZPUkNFIGNsZWFyICsgaW50ZXJydXB0LXN0YXRlIHdpcGUgcmV0dXJucyB0 aGUgY29yZQorICogdG8gYSBkZWZpbmVkIHN0YXRlLiBXaXRob3V0IHRoaXMsIGEgaHVuZyBQLWZy YW1lIGxlYXZlcyB0aGUgY29yZSB3ZWRnZWQgYW5kCisgKiBhbiB1bmFja25vd2xlZGdlZCB3cml0 ZSBmYXVsdCBzdHVjayBhY3RpdmUsIHdoaWNoIGNhc2NhZGVzIGludG8gdGhlIE5FWFQKKyAqIGVu Y29kZSBmYWlsaW5nICgicmtfaW9tbXUgRGlzYWJsZSBwYWdpbmcgcmVxdWVzdCB0aW1lZCBvdXQi KS4gT25seSBldmVyCisgKiBjYWxsZWQgZnJvbSB0aGUgSVJRIGVycm9yIHBhdGgsIHNvIGl0IGNh biBuZXZlciB0b3VjaCBhIGdvb2QgZnJhbWU7IGNsb2NrcworICogYXJlIHN0aWxsIGVuYWJsZWQg aGVyZSAocmt2ZW5jX2pvYl9maW5pc2ggZGlzYWJsZXMgdGhlbSBhZnRlcndhcmRzKS4KKyAqLwor c3RhdGljIHZvaWQgcmt2ZW5jX3NvZnRfcmVzZXQoc3RydWN0IHJrdmVuY19kZXYgKmRldikKK3sK Kwl1MzIgc3RhOworCWludCByZXQ7CisKKwlya3ZlbmNfd3JpdGUoZGV2LCBSS1ZFTkNfUkVHX0lO VF9NQVNLLCAweDNmZik7CisJcmt2ZW5jX3dyaXRlKGRldiwgUktWRU5DX1JFR19FTkNfQ0xSLCBS S1ZFTkNfRU5DX0NMUl9TQUZFKTsKKwlyZXQgPSByZWFkbF9yZWxheGVkX3BvbGxfdGltZW91dChk ZXYtPnJlZ3MgKyBSS1ZFTkNfUkVHX0lOVF9TVEEsIHN0YSwKKwkJCQkJIHN0YSAmIFJLVkVOQ19T Q0xSX0RPTkVfU1RBLCAwLCAxMDAwKTsKKwlya3ZlbmNfd3JpdGUoZGV2LCBSS1ZFTkNfUkVHX0VO Q19DTFIsIFJLVkVOQ19FTkNfQ0xSX0ZPUkNFKTsKKwl1ZGVsYXkoNSk7CisJcmt2ZW5jX3dyaXRl KGRldiwgUktWRU5DX1JFR19FTkNfQ0xSLCAwKTsKKwlya3ZlbmNfd3JpdGUoZGV2LCBSS1ZFTkNf UkVHX0lOVF9DTFIsIDB4ZmZmZmZmZmYpOworCXJrdmVuY193cml0ZShkZXYsIFJLVkVOQ19SRUdf SU5UX1NUQSwgMCk7CisKKwlpZiAocmV0KSB7CisJCS8qIFNhZmUgY2xlYXIgbmV2ZXIgY29tcGxl dGVkIC0tIGZhbGwgYmFjayB0byBhIGZ1bGwgY29yZSByZXNldC4gKi8KKwkJZGV2X3dhcm4oZGV2 LT5kZXYsICJzYWZlIHJlc2V0IHRpbWVkIG91dCwgZm9yY2luZyBjb3JlIHJlc2V0XG4iKTsKKwkJ cmVzZXRfY29udHJvbF9hc3NlcnQoZGV2LT5yc3QpOworCQl1ZGVsYXkoNSk7CisJCXJlc2V0X2Nv bnRyb2xfZGVhc3NlcnQoZGV2LT5yc3QpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHJr dmVuY19pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHJrdmVuY19k ZXYgKmRldiA9IHByaXY7CisJc3RydWN0IHJrdmVuY19jdHggKmN0eCA9IGRldi0+Y3VyX2N0eDsK KwllbnVtIHZiMl9idWZmZXJfc3RhdGUgc3RhdGU7CisKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIElS UV9IQU5ETEVEOworCisJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZkZXYtPndhdGNoZG9nX3dv cmspKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlzdGF0ZSA9IChkZXYtPmlycV9zdGF0dXMg JiBSS1ZFTkNfSU5UX0VSUk9SX01BU0spID8KKwkJVkIyX0JVRl9TVEFURV9FUlJPUiA6IFZCMl9C VUZfU1RBVEVfRE9ORTsKKworCWlmIChzdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0VSUk9SKSB7CisJ CWRldl93YXJuKGRldi0+ZGV2LAorCQkJICJlbmNvZGUgZXJyb3IsIGludF9zdGE9MHglMDh4IChl cnJvciBiaXRzOiAlcyVzJXMlcyVzJXMlcyVzKSAiCisJCQkgInZlcnNpb249MHglMDh4IGVuY19z dHJ0PTB4JTA4eCBpbnRfZW49MHglMDh4IGludF9tc2s9MHglMDh4ICIKKwkJCSAiZW5jX3dkZz0w eCUwOHggZW5jX3JzbD0weCUwOHggZW5jX3BpYz0weCUwOHggc3ludF9zbGkwPTB4JTA4eCAiCisJ CQkgImJzX2xndGg9MHglMDh4IHNsaWNlX251bT0weCUwOHggc3RfYnNiPTB4JTA4eFxuIiwKKwkJ CSBkZXYtPmlycV9zdGF0dXMsCisJCQkgZGV2LT5pcnFfc3RhdHVzICYgQklUKDQpID8gInZic2Zf b2ZsdyAiIDogIiIsCisJCQkgZGV2LT5pcnFfc3RhdHVzICYgQklUKDYpID8gImVuY19lcnIgIiA6 ICIiLAorCQkJIGRldi0+aXJxX3N0YXR1cyAmIEJJVCg3KSA/ICJ2c3JjX2VyciAiIDogIiIsCisJ CQkgZGV2LT5pcnFfc3RhdHVzICYgQklUKDgpID8gIndkZyAiIDogIiIsCisJCQkgZGV2LT5pcnFf c3RhdHVzICYgQklUKDkpID8gImxrdF9lcnJfaW50ICIgOiAiIiwKKwkJCSBkZXYtPmlycV9zdGF0 dXMgJiBCSVQoMTApID8gImxrdF9lcnJfc3RvcCAiIDogIiIsCisJCQkgZGV2LT5pcnFfc3RhdHVz ICYgQklUKDExKSA/ICJsa3RfZm9yY2Vfc3RvcCAiIDogIiIsCisJCQkgZGV2LT5pcnFfc3RhdHVz ICYgQklUKDE1KSA/ICJkdmJtX2VyciAiIDogIiIsCisJCQkgLyogdmVyc2lvbiBpcyBhIGZpeGVk IElQLWlkZW50aWZpY2F0aW9uIHJlYWRiYWNrOiBpZiB0aGlzCisJCQkgICogY29tZXMgYmFjayAw eDAwMDAwMDAwIG9yIDB4ZmZmZmZmZmYsIHRoZSBNTUlPIHJlZ2lvbgorCQkJICAqIGl0c2VsZiBp cyBkZWFkIChjbG9jay9wb3dlci9tYXBwaW5nKSwgbm90IGFuIGVuY29kZQorCQkJICAqIGNvbmZp ZyBwcm9ibGVtIOKAlCBhIG11Y2ggbW9yZSBmdW5kYW1lbnRhbCBjbGFzcyBvZiBidWcKKwkJCSAg KiB0aGFuIGFueXRoaW5nIHJlZ2lzdGVyLXZhbHVlLWxldmVsIHdlJ3ZlIGF1ZGl0ZWQgc28gZmFy LgorCQkJICAqLworCQkJIHJrdmVuY19yZWFkKGRldiwgUktWRU5DX1JFR19WRVJTSU9OKSwKKwkJ CSBya3ZlbmNfcmVhZChkZXYsIFJLVkVOQ19SRUdfRU5DX1NUQVJUKSwKKwkJCSBya3ZlbmNfcmVh ZChkZXYsIFJLVkVOQ19SRUdfSU5UX0VOKSwKKwkJCSBya3ZlbmNfcmVhZChkZXYsIFJLVkVOQ19S RUdfSU5UX01BU0spLAorCQkJIHJrdmVuY19yZWFkKGRldiwgUktWRU5DX1JFR19FTkNfV0RHKSwK KwkJCSBya3ZlbmNfcmVhZChkZXYsIFJLVkVOQ19SRUdfRU5DX1JTTCksCisJCQkgcmt2ZW5jX3Jl YWQoZGV2LCBSS1ZFTkNfUkVHX0VOQ19QSUMpLAorCQkJIHJrdmVuY19yZWFkKGRldiwgUktWRU5D X1JFR19TWU5UX1NMSTApLAorCQkJIHJrdmVuY19yZWFkKGRldiwgUktWRU5DX1JFR19TVF9CU19M RU5HVEgpLAorCQkJIHJrdmVuY19yZWFkKGRldiwgUktWRU5DX1JFR19TVF9TTElDRV9OVU0pLAor CQkJIHJrdmVuY19yZWFkKGRldiwgUktWRU5DX1JFR19TVF9CU0IpKTsKKworCQkvKiBSZWxlYXNl IHRoZSBEVkJNL2VuY29kZXIgaG9sZCAob25seSB0aGUgZHJhaW4tc2xpY2VzIGNvbXBsZXRpb24K KwkJICogcGF0aCBkaWQgdGhpcyBiZWZvcmUpIGFuZCBncmFjZWZ1bGx5IHJlc2V0IHRoZSB3ZWRn ZWQgY29yZSBzbworCQkgKiB0aGUgZmF1bHQgaXMgZHJhaW5lZCBhbmQgdGhlIE5FWFQgZW5jb2Rl IHN0YXJ0cyBjbGVhbi4KKwkJICovCisJCXJrdmVuY193cml0ZShkZXYsIFJLVkVOQ19SRUdfRU5D X0lELCAwKTsKKwkJcmt2ZW5jX3NvZnRfcmVzZXQoZGV2KTsKKwl9CisKKwljdHgtPmNvZGVkX2Rl c2MtPm9wcy0+ZG9uZShjdHgsIHN0YXRlKTsKKwlya3ZlbmNfam9iX2ZpbmlzaChkZXYsIGN0eCwg c3RhdGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBya3ZlbmNf d2F0Y2hkb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBya3ZlbmNfZGV2 ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJrdmVuY19kZXYsCisJCQkJCSAgICAg IHdhdGNoZG9nX3dvcmsud29yayk7CisJc3RydWN0IHJrdmVuY19jdHggKmN0eCA9IGRldi0+Y3Vy X2N0eDsKKworCWlmICghY3R4KQorCQlyZXR1cm47CisKKwlkZXZfd2FybihkZXYtPmRldiwgImVu Y29kZSB0aW1lb3V0LCByZXNldHRpbmcgY29yZVxuIik7CisKKwlyZXNldF9jb250cm9sX2Fzc2Vy dChkZXYtPnJzdCk7CisJdWRlbGF5KDUpOworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZGV2LT5y c3QpOworCisJY3R4LT5jb2RlZF9kZXNjLT5vcHMtPmRvbmUoY3R4LCBWQjJfQlVGX1NUQVRFX0VS Uk9SKTsKKwlya3ZlbmNfam9iX2ZpbmlzaChkZXYsIGN0eCwgVkIyX0JVRl9TVEFURV9FUlJPUik7 Cit9CisKKy8qIC0tLS0gY3RybHMgLyBmaWxlIG9wcyAtLS0tICovCisKK3N0YXRpYyBpbnQgcmt2 ZW5jX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHJrdmVuY19kZXYgKmRldiA9 IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJrdmVuY19jdHggKmN0eDsKKwlpbnQgcmV0 OworCisJY3R4ID0ga3phbGxvY19vYmooKmN0eCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5P TUVNOworCisJdjRsMl9maF9pbml0KCZjdHgtPmZoLCAmZGV2LT52ZmQpOworCWZpbGUtPnByaXZh dGVfZGF0YSA9ICZjdHgtPmZoOworCWN0eC0+ZGV2ID0gZGV2OworCisJY3R4LT5jb2RlZF9kZXNj ID0gcmt2ZW5jX2NvZGVkX2Rlc2NzWzBdOworCWN0eC0+Y29kZWRfZm10LndpZHRoID0gUktWRU5D X0RFRkFVTFRfV0lEVEg7CisJY3R4LT5jb2RlZF9mbXQuaGVpZ2h0ID0gUktWRU5DX0RFRkFVTFRf SEVJR0hUOworCXJrdmVuY19maWxsX2NvZGVkX2ZtdCgmY3R4LT5jb2RlZF9mbXQsIGN0eC0+Y29k ZWRfZGVzYyk7CisJY3R4LT5zcmNfZm10LndpZHRoID0gUktWRU5DX0RFRkFVTFRfV0lEVEg7CisJ Y3R4LT5zcmNfZm10LmhlaWdodCA9IFJLVkVOQ19ERUZBVUxUX0hFSUdIVDsKKwlya3ZlbmNfZmls bF9zcmNfZm10KCZjdHgtPnNyY19mbXQpOworCisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmY3R4 LT5jdHJsX2hhbmRsZXIsIDE2KTsKKwljdHgtPmZoLmN0cmxfaGFuZGxlciA9ICZjdHgtPmN0cmxf aGFuZGxlcjsKKworCXJldCA9IGN0eC0+Y29kZWRfZGVzYy0+b3BzLT5pbml0X2N0cmxzKGN0eCk7 CisJaWYgKCFyZXQpCisJCXJldCA9IGN0eC0+Y3RybF9oYW5kbGVyLmVycm9yOworCWlmICghcmV0 KQorCQlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmY3R4LT5jdHJsX2hhbmRsZXIpOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlcjsKKworCWN0eC0+ZmgubTJtX2N0eCA9 IHY0bDJfbTJtX2N0eF9pbml0KGRldi0+bTJtX2RldiwgY3R4LCBya3ZlbmNfcXVldWVfaW5pdCk7 CisJaWYgKElTX0VSUihjdHgtPmZoLm0ybV9jdHgpKSB7CisJCXJldCA9IFBUUl9FUlIoY3R4LT5m aC5tMm1fY3R4KTsKKwkJZ290byBlcnJfZnJlZV9oYW5kbGVyOworCX0KKworCXY0bDJfZmhfYWRk KCZjdHgtPmZoLCBmaWxlKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9oYW5kbGVyOgorCXY0 bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmN0eC0+Y3RybF9oYW5kbGVyKTsKKwl2NGwyX2ZoX2V4aXQo JmN0eC0+ZmgpOworCWtmcmVlKGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBy a3ZlbmNfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgcmt2ZW5jX2N0eCAq Y3R4ID0gZmhfdG9fcmt2ZW5jX2N0eChmaWxlLT5wcml2YXRlX2RhdGEpOworCisJdjRsMl9maF9k ZWwoJmN0eC0+ZmgsIGZpbGUpOworCXY0bDJfbTJtX2N0eF9yZWxlYXNlKGN0eC0+ZmgubTJtX2N0 eCk7CisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmY3R4LT5jdHJsX2hhbmRsZXIpOworCXY0bDJf ZmhfZXhpdCgmY3R4LT5maCk7CisJa2ZyZWUoY3R4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBya3ZlbmNfZm9wcyA9IHsKKwkub3du ZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcmt2ZW5jX29wZW4sCisJLnJlbGVhc2UJPSBy a3ZlbmNfcmVsZWFzZSwKKwkucG9sbAkJPSB2NGwyX20ybV9mb3BfcG9sbCwKKwkudW5sb2NrZWRf aW9jdGwJPSB2aWRlb19pb2N0bDIsCisJLm1tYXAJCT0gdjRsMl9tMm1fZm9wX21tYXAsCit9Owor CisvKiAtLS0tIHByb2JlL3JlbW92ZSAtLS0tICovCisKK3N0YXRpYyBpbnQgcmt2ZW5jX3J1bnRp bWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJrdmVuY19kZXYgKnJr dmVuYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBh cmUocmt2ZW5jLT5udW1fY2xvY2tzLCBya3ZlbmMtPmNsb2Nrcyk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcmt2ZW5jX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3Qgcmt2ZW5jX2RldiAqcmt2ZW5jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwly ZXR1cm4gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUocmt2ZW5jLT5udW1fY2xvY2tzLCBya3ZlbmMt PmNsb2Nrcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBya3ZlbmNfcG1f b3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyhya3ZlbmNfcnVudGltZV9zdXNwZW5kLCBya3Zl bmNfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgaW50IHJrdmVuY19wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw ZGV2LT5kZXY7CisJc3RydWN0IHJrdmVuY19kZXYgKnJrdmVuYzsKKwlzdHJ1Y3QgY2xrX2J1bGtf ZGF0YSAqY2xrOworCWludCBpcnEsIHJldCwgaTsKKworCXJrdmVuYyA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqcmt2ZW5jKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFya3ZlbmMpCisJCXJldHVy biAtRU5PTUVNOworCisJcmt2ZW5jLT5kZXYgPSBkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgcmt2ZW5jKTsKKwltdXRleF9pbml0KCZya3ZlbmMtPnZmZF9tdXRleCk7CisJSU5JVF9E RUxBWUVEX1dPUksoJnJrdmVuYy0+d2F0Y2hkb2dfd29yaywgcmt2ZW5jX3dhdGNoZG9nKTsKKwor CXJrdmVuYy0+cmVncyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsK KwlpZiAoSVNfRVJSKHJrdmVuYy0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKHJrdmVuYy0+cmVn cyk7CisKKwkvKiBCdWZmZXIgcG9pbnRlciByZWdpc3RlcnMgKGFkcl9zcmMwLzEvMiwgYnNiKiwg cmZwKikgYXJlIDMyIGJpdHMKKwkgKiB3aWRlOyBlYWNoIGNvcmUgc2l0cyBiZWhpbmQgaXRzIG93 biBya3ZlbmN7MCwxfV9tbXUgSU9NTVUsIHdoaWNoCisJICogdGhpcyBETUEgbWFzayBrZWVwcyB3 aXRoaW4gYSAzMi1iaXQgSU9WQSBhcGVydHVyZS4KKwkgKi8KKwlyZXQgPSBkbWFfc2V0X21hc2tf YW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJmYWlsZWQgdG8gc2V0IERNQSBtYXNrXG4iKTsKKwor CWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVy biBpcnE7CisKKwlyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9hbGwoZGV2LCAmcmt2ZW5jLT5jbG9j a3MpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgImZh aWxlZCB0byBnZXQgY2xvY2tzXG4iKTsKKwlya3ZlbmMtPm51bV9jbG9ja3MgPSByZXQ7CisKKwlm b3IgKGkgPSAwOyBpIDwgcmt2ZW5jLT5udW1fY2xvY2tzOyBpKyspIHsKKwkJY2xrID0gJnJrdmVu Yy0+Y2xvY2tzW2ldOworCQlpZiAoIXN0cmNtcChjbGstPmlkLCAiY2xrX2NvcmUiKSkKKwkJCXJr dmVuYy0+Y29yZV9jbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPmNsayk7CisJfQorCWlmICgh cmt2ZW5jLT5jb3JlX2Nsa19yYXRlKQorCQlya3ZlbmMtPmNvcmVfY2xrX3JhdGUgPSA3MDIwMDAw MDA7CisKKwlya3ZlbmMtPnJzdCA9IGRldm1fcmVzZXRfY29udHJvbF9hcnJheV9nZXRfZXhjbHVz aXZlKGRldik7CisJaWYgKElTX0VSUihya3ZlbmMtPnJzdCkpCisJCXJldHVybiBkZXZfZXJyX3By b2JlKGRldiwgUFRSX0VSUihya3ZlbmMtPnJzdCksCisJCQkJICAgICAiZmFpbGVkIHRvIGdldCBy ZXNldHNcbiIpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGlycSwg cmt2ZW5jX2lycSwgcmt2ZW5jX2lycV90aHJlYWQsCisJCQkJCUlSUUZfT05FU0hPVCwgZGV2X25h bWUoZGV2KSwgcmt2ZW5jKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYs IHJldCwgImZhaWxlZCB0byByZXF1ZXN0IGlycVxuIik7CisKKwlyZXQgPSB2NGwyX2RldmljZV9y ZWdpc3RlcihkZXYsICZya3ZlbmMtPnY0bDJfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gZGV2 X2Vycl9wcm9iZShkZXYsIHJldCwgImZhaWxlZCB0byByZWdpc3RlciB2NGwyIGRldmljZVxuIik7 CisKKwlya3ZlbmMtPm0ybV9kZXYgPSB2NGwyX20ybV9pbml0KCZya3ZlbmNfbTJtX29wcyk7CisJ aWYgKElTX0VSUihya3ZlbmMtPm0ybV9kZXYpKSB7CisJCXJldCA9IFBUUl9FUlIocmt2ZW5jLT5t Mm1fZGV2KTsKKwkJZ290byBlcnJfdW5yZWdfdjRsMjsKKwl9CisKKwlya3ZlbmMtPnZmZCA9IChz dHJ1Y3QgdmlkZW9fZGV2aWNlKXsKKwkJLmZvcHMJCT0gJnJrdmVuY19mb3BzLAorCQkuaW9jdGxf b3BzCT0gJnJrdmVuY19pb2N0bF9vcHMsCisJCS5taW5vcgkJPSAtMSwKKwkJLnJlbGVhc2UJPSB2 aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKKwkJLmxvY2sJCT0gJnJrdmVuYy0+dmZkX211dGV4 LAorCQkudjRsMl9kZXYJPSAmcmt2ZW5jLT52NGwyX2RldiwKKwkJLnZmbF9kaXIJPSBWRkxfRElS X00yTSwKKwkJLmRldmljZV9jYXBzCT0gVjRMMl9DQVBfVklERU9fTTJNIHwgVjRMMl9DQVBfU1RS RUFNSU5HLAorCX07CisJc3Ryc2NweShya3ZlbmMtPnZmZC5uYW1lLCAicmt2ZW5jIiwgc2l6ZW9m KHJrdmVuYy0+dmZkLm5hbWUpKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmcmt2ZW5jLT52ZmQsIHJr dmVuYyk7CisKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShkZXYsIFJLVkVOQ19B VVRPU1VTUEVORF9ERUxBWV9NUyk7CisJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoZGV2KTsK KwlkZXZtX3BtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwkvKgorCSAqIE9uZS10aW1lIHJlc2V0 IGN5Y2xlICh2aWEgYSByZWFsIHBtX3J1bnRpbWUgYWN0aXZhdGlvbiwgc28gdGhlCisJICogcG93 ZXIgZG9tYWluIGFuZCBjbG9ja3MgYXJlIGdlbnVpbmVseSBvbiByYXRoZXIgdGhhbiBhc3N1bWlu ZyByYXcKKwkgKiBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZSgpIGFsb25lIHdvdWxkIHBvd2VyIGFu IHVuYXR0YWNoZWQgZ2VucGQpCisJICogc28gdGhlIGNvcmUgc3RhcnRzIGZyb20gYSBkZWZpbmVk IHN0YXRlIHJhdGhlciB0aGFuIHdoYXRldmVyIHRoZQorCSAqIGJvb3Rsb2FkZXIvQVRGIGxlZnQg aXQgaW4gLS0gb3RoZXJ3aXNlIHJlc2V0IGlzIG9ubHkgZXZlciB0b3VjaGVkCisJICogYnkgcmt2 ZW5jX3dhdGNoZG9nKCkncyBlcnJvci1yZWNvdmVyeSBwYXRoLCBuZXZlciBvbiBhIG5vcm1hbAor CSAqIGZpcnN0IGFjdGl2YXRpb24uIEJvYXJkIGJyaW5nLXVwIHNhdyBhbiBpc29sYXRlZCBya19p b21tdSB3cml0ZQorCSAqIGZhdWx0IGF0IGFuIElPVkEgdGhhdCBjaGFuZ2VkIGJldHdlZW4gYm9v dHMgYW5kIG1hdGNoZWQgbm9uZSBvZgorCSAqIHRoaXMgZHJpdmVyJ3Mgb3duIGJ1ZmZlciBhZGRy ZXNzZXMsIGNvbnNpc3RlbnQgd2l0aCB1bmRlZmluZWQKKwkgKiBib290LXZhcnlpbmcgaGFyZHdh cmUgc3RhdGUuCisJICoKKwkgKiBEb25lIG9uY2UgaGVyZSwgbm90IG9uIGV2ZXJ5IHJrdmVuY19y dW50aW1lX3Jlc3VtZSgpOiB0aGF0IHdhcworCSAqIHRyaWVkIGZpcnN0IGFuZCBtYWRlIHRoaW5n cyB3b3JzZSAoYSBoYXJkd2FyZS1yZXBvcnRlZCAiZW5jX2VyciIKKwkgKiBzdGF0dXMgb24gdGhl IHZlcnkgbmV4dCBlbmNvZGUsIHdpdGggYSBiaXRzdHJlYW0gbGVuZ3RoIHdpbGRseQorCSAqIGxh cmdlciB0aGFuIHRoZSBzYW1lIHRlc3QgZnJhbWUgZXZlciBwcm9kdWNlZCBiZWZvcmUpIC0tIHNv bWV0aGluZworCSAqIGFib3V0IHRoaXMgY29yZSdzIHN0YXRlIGlzIGV4cGVjdGVkIHRvIHBlcnNp c3QgZm9yIHRoZSBsaWZlIG9mIHRoZQorCSAqIHNlc3Npb24sIG5vdCBiZSByZS1pbml0aWFsaXpl ZCBiZWZvcmUgZXZlcnkgc2luZ2xlIGZyYW1lLgorCSAqLworCXJldCA9IHBtX3J1bnRpbWVfcmVz dW1lX2FuZF9nZXQoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYs IHJldCwgImZhaWxlZCB0byBwb3dlciB1cCBmb3IgaW5pdGlhbCByZXNldFxuIik7CisJcmVzZXRf Y29udHJvbF9hc3NlcnQocmt2ZW5jLT5yc3QpOworCXVkZWxheSg1KTsKKwlyZXNldF9jb250cm9s X2RlYXNzZXJ0KHJrdmVuYy0+cnN0KTsKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7 CisJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZGV2KTsKKworCXJldCA9IHZpZGVvX3JlZ2lz dGVyX2RldmljZSgmcmt2ZW5jLT52ZmQsIFZGTF9UWVBFX1ZJREVPLCAtMSk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGRl dmljZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfbTJtOworCX0KKworCWRldl9pbmZvKGRldiwg IlZFUFU1MTAgZW5jb2RlciBjb3JlIHJlZ2lzdGVyZWQgYXMgJXNcbiIsCisJCSB2aWRlb19kZXZp Y2Vfbm9kZV9uYW1lKCZya3ZlbmMtPnZmZCkpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWxlYXNl X20ybToKKwl2NGwyX20ybV9yZWxlYXNlKHJrdmVuYy0+bTJtX2Rldik7CitlcnJfdW5yZWdfdjRs MjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZya3ZlbmMtPnY0bDJfZGV2KTsKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBya3ZlbmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJc3RydWN0IHJrdmVuY19kZXYgKnJrdmVuYyA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZya3ZlbmMtPndhdGNo ZG9nX3dvcmspOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZya3ZlbmMtPnZmZCk7CisJdjRs Ml9tMm1fcmVsZWFzZShya3ZlbmMtPm0ybV9kZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIo JnJrdmVuYy0+djRsMl9kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBya3ZlbmNfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzU3 Ni12ZXB1IiB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcmt2ZW5jX29mX21h dGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmt2ZW5jX2RyaXZlciA9IHsK KwkucHJvYmUgPSBya3ZlbmNfcHJvYmUsCisJLnJlbW92ZSA9IHJrdmVuY19yZW1vdmUsCisJLmRy aXZlciA9IHsKKwkJLm5hbWUgPSAicmt2ZW5jIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcmt2ZW5j X29mX21hdGNoLAorCQkucG0gPSAmcmt2ZW5jX3BtX29wcywKKwl9LAorfTsKK21vZHVsZV9wbGF0 Zm9ybV9kcml2ZXIocmt2ZW5jX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiUm9ja2No aXAgVkVQVTUxMCB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9ya3ZlbmMvcmt2 ZW5jLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL3JrdmVuYy9ya3ZlbmMuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjNlM2UzMGRlMwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmt2ZW5jL3JrdmVuYy5o CkBAIC0wLDAgKzEsMjEyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq LworLyoKKyAqIFJvY2tjaGlwIFZFUFU1MTAgKFJLMzU3NikgaGFyZHdhcmUgdmlkZW8gZW5jb2Rl ciBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDI2IEppYXhpbmcgSHUgPGdhaGluZ0Bn YWhpbmd3b28uY29tPgorICovCisKKyNpZm5kZWYgUktWRU5DX0hfCisjZGVmaW5lIFJLVkVOQ19I XworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5o PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jl c2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvd29y a3F1ZXVlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgorI2luY2x1ZGUgPG1lZGlh L3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1tZW0ybWVtLmg+CisjaW5jbHVk ZSA8bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4KKworc3RydWN0IHJrdmVuY19jdHg7CisKK3N0cnVj dCBya3ZlbmNfZm10IHsKKwl1MzIgZm91cmNjOworCXVuc2lnbmVkIGludCBmcm1zaXplX21pbl93 aWR0aDsKKwl1bnNpZ25lZCBpbnQgZnJtc2l6ZV9tYXhfd2lkdGg7CisJdW5zaWduZWQgaW50IGZy bXNpemVfc3RlcF93aWR0aDsKKwl1bnNpZ25lZCBpbnQgZnJtc2l6ZV9taW5faGVpZ2h0OworCXVu c2lnbmVkIGludCBmcm1zaXplX21heF9oZWlnaHQ7CisJdW5zaWduZWQgaW50IGZybXNpemVfc3Rl cF9oZWlnaHQ7Cit9OworCisvKgorICogUGVyLWNvZGVkLWZvcm1hdCAoSC4yNjQsIGxhdGVyIEhF VkMpIG9wZXJhdGlvbiB2dGFibGUuIE1pcnJvcnMgdGhlIHNwbGl0CisgKiBya3ZkZWMgdXNlcyBm b3IgaXRzIHBlci1jb2RlYyBiYWNrZW5kcywgYWRhcHRlZCBmb3IgYSAqc3RhdGVmdWwqIG1lbTJt ZW0KKyAqIGVuY29kZXIgKG5vIFY0TDIgcmVxdWVzdC1BUEkgcHJlYW1ibGUvcG9zdGFtYmxlLCB1 bmxpa2Ugcmt2ZGVjKSDigJQgdGhlCisgKiBkZXZpY2VfcnVuKCkvZG9uZSgpIHNwbGl0IG1hdGNo ZXMgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbidzCisgKiBoYW50cm9fY29kZWNf b3BzIGluc3RlYWQuCisgKi8KK3N0cnVjdCBya3ZlbmNfY29kZWRfZm10X29wcyB7CisJLyogUmVn aXN0ZXJzIHRoaXMgZm9ybWF0J3MgVjRMMiBjb250cm9scyBpbnRvIGN0eC0+Y3RybF9oYW5kbGVy LiAqLworCWludCAoKmluaXRfY3RybHMpKHN0cnVjdCBya3ZlbmNfY3R4ICpjdHgpOworCWludCAo KnN0YXJ0KShzdHJ1Y3Qgcmt2ZW5jX2N0eCAqY3R4KTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IHJr dmVuY19jdHggKmN0eCk7CisJdm9pZCAoKnJ1bikoc3RydWN0IHJrdmVuY19jdHggKmN0eCk7CisJ LyogQ2FsbGVkIGZyb20gdGhlIHRocmVhZGVkIElSUSBoYW5kbGVyIG9uY2UgaGFyZHdhcmUgcmVw b3J0cyBmcmFtZQorCSAqIGRvbmUuIE11c3Qgc2V0IHRoZSBDQVBUVVJFIGJ1ZmZlcidzIGJ5dGVz dXNlZC90aW1lc3RhbXAvZmxhZ3MuCisJICovCisJdm9pZCAoKmRvbmUpKHN0cnVjdCBya3ZlbmNf Y3R4ICpjdHgsIGVudW0gdmIyX2J1ZmZlcl9zdGF0ZSBzdGF0ZSk7Cit9OworCitzdHJ1Y3Qgcmt2 ZW5jX2NvZGVkX2ZtdF9kZXNjIHsKKwl1MzIgZm91cmNjOworCXN0cnVjdCBya3ZlbmNfZm10IGZy bXNpemU7CisJY29uc3Qgc3RydWN0IHJrdmVuY19jb2RlZF9mbXRfb3BzICpvcHM7Cit9OworCitz dHJ1Y3Qgcmt2ZW5jX2RldiB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVj dCB2aWRlb19kZXZpY2UgdmZkOworCXN0cnVjdCB2NGwyX20ybV9kZXYgKm0ybV9kZXY7CisKKwlz dHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGtfYnVs a19kYXRhICpjbG9ja3M7CisJaW50IG51bV9jbG9ja3M7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wg KnJzdDsKKworCS8qIFByb3RlY3RzIGN0eCBsaXN0IC8gaGFyZHdhcmUgYWNjZXNzIG9yZGVyaW5n LiB2YjIgcXVldWVzIGFscmVhZHkKKwkgKiBzZXJpYWxpemUgcGVyLWNvbnRleHQgc3RyZWFtaW5n OyB0aGlzIGFkZGl0aW9uYWxseSBzZXJpYWxpemVzCisJICogYWNjZXNzIHRvIHRoZSBvbmUgcGh5 c2ljYWwgY29yZSBhY3Jvc3MgY29udGV4dHMgKHJrdmVuYzAvcmt2ZW5jMQorCSAqIGFyZSB0d28g c2VwYXJhdGUgcmt2ZW5jX2RldiBpbnN0YW5jZXMsIGVhY2ggb3duaW5nIG9uZSBjb3JlIOKAlAor CSAqIHYxIGRvZXMgbm90IGltcGxlbWVudCB0aGUgdmVuZG9yIGRyaXZlcidzIENDVSBjcm9zcy1j b3JlIHRhc2sKKwkgKiBkaXNwYXRjaC9sb2FkLWJhbGFuY2luZykuCisJICovCisJc3RydWN0IG11 dGV4IHZmZF9tdXRleDsKKworCXN0cnVjdCBya3ZlbmNfY3R4ICpjdXJfY3R4OworCXN0cnVjdCBk ZWxheWVkX3dvcmsgd2F0Y2hkb2dfd29yazsKKworCXVuc2lnbmVkIGludCBjb3JlX2Nsa19yYXRl OworCisJLyogQWNjdW11bGF0ZWQgYnkgdGhlIGhhcmQgSVJRIGhhbmRsZXIsIGNvbnN1bWVkIGJ5 IHRoZSB0aHJlYWRlZCBvbmUuICovCisJdTMyIGlycV9zdGF0dXM7Cit9OworCitzdHJ1Y3Qgcmt2 ZW5jX2gyNjRfY3R4IHsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpiaXRyYXRlOworCXN0cnVjdCB2NGwy X2N0cmwgKnByb2ZpbGU7CisJc3RydWN0IHY0bDJfY3RybCAqbGV2ZWw7CisJc3RydWN0IHY0bDJf Y3RybCAqZW50cm9weV9tb2RlOworCXN0cnVjdCB2NGwyX2N0cmwgKmdvcF9zaXplOworCXN0cnVj dCB2NGwyX2N0cmwgKmlfcXA7CisJc3RydWN0IHY0bDJfY3RybCAqcF9xcDsKKworCXVuc2lnbmVk IGludCBmcmFtZV9udW07CisJdW5zaWduZWQgaW50IHBvY19sc2I7CisJdW5zaWduZWQgaW50IGdv cF9wb3M7CisJdW5zaWduZWQgaW50IGlkcl9waWNfaWQ7CisKKwkvKiBXaGV0aGVyIHRoZSAqcHJl dmlvdXMqIGVuY29kZWQgZnJhbWUgd2FzIGFuIElEUiAtLSBtcHAncworCSAqIHNldHVwX3ZlcHU1 MTBfYW50aV9zbWVhcigpIGtleXMgc21lYXJfb3B0X2NmZy5zdGF0ZWRfbW9kZSBvZmYgYm90aAor CSAqIHRoZSBjdXJyZW50IHNsaWNlIHR5cGUgQU5EIHRoZSBwcmV2aW91cyBmcmFtZSdzLCBzZWUg cmt2ZW5jLXJlZ3MuaC4KKwkgKiBaZXJvZWQgYnkgcmt2ZW5jX2gyNjRfc3RhcnQoKSdzIG1lbXNl dDsgZG9lc24ndCBtYXR0ZXIgZm9yIGZyYW1lIDAKKwkgKiAoYWx3YXlzIElEUiByZWdhcmRsZXNz KS4KKwkgKi8KKwlib29sIGxhc3RfZnJhbWVfd2FzX2lkcjsKKworCS8qIFNvZnR3YXJlLXN5bnRo ZXNpemVkIFNQUy9QUFMsIGVtaXR0ZWQgKEFubmV4LUIpIGFoZWFkIG9mIHRoZSBmaXJzdAorCSAq IGhhcmR3YXJlIHNsaWNlIHBheWxvYWQgb2YgZWFjaCBJRFIgYWNjZXNzIHVuaXQ7IHNlZSBya3Zl bmMtaDI2NC5jLgorCSAqLworCXU4IHNwc19wcHNfbmFsWzY0XTsKKwlzaXplX3Qgc3BzX3Bwc19s ZW47CisKKwkvKiBWRVBVNTEwIHJlY29uc3RydWN0cy9yZWZlcmVuY2VzIGZyYW1lcyBvbmx5IHRo cm91Z2ggdGhyZWUgaW50ZXJuYWwKKwkgKiBzY3JhdGNoIHJlZ2lvbnMgcGVyIGZyYW1lIHNsb3Qg 4oCUIGFuIEZCQy1jb21wcmVzc2VkIHBpeGVsIGJ1ZmZlcgorCSAqIChoZWFkZXIrYm9keSksIGEg InRodW1ibmFpbCIgZG93bnNhbXBsZSBidWZmZXIgKGRzcHcvZHNwcl9hZGRyKSwKKwkgKiBhbmQg YSAic21lYXIiIGJ1ZmZlciAoYWRyX3NtZWFyX3dyL3JkKSDigJQgYWxsIHRocmVlIGFyZSB3cml0 dGVuIGJ5CisJICogaGFyZHdhcmUgb24gKmV2ZXJ5KiBmcmFtZSByZWdhcmRsZXNzIG9mIHdoaWNo IGVuY29kZXIgZmVhdHVyZXMgYXJlCisJICogaW4gdXNlIChjb25maXJtZWQgZnJvbSBtcHAncyBz ZXR1cF92ZXB1NTEwX3JlY25fcmVmcigpLCB3aGljaCBzZXRzCisJICogYWxsIHRocmVlIHVuY29u ZGl0aW9uYWxseSB3aGVuZXZlciBhIGN1cnJlbnQvcmVmZXJlbmNlIGJ1ZmZlciBzbG90CisJICog ZXhpc3RzIGF0IGFsbCkuIExlYXZpbmcgYW55IG9mIHRoZW0gYXQgYSBOVUxMIHBvaW50ZXIgY2F1 c2VzIGEKKwkgKiBjb250aW51b3VzIElPTU1VIHdyaXRlLWZhdWx0IHN0b3JtIGF0IGlvdmEgMHgw LCBub3QgYSBjbGVhbiBlcnJvci4KKwkgKgorCSAqIFRoaXMgZHJpdmVyIG93bnMgYSAyLWRlZXAg cGluZy1wb25nIHBvb2wgb2YgZHJpdmVyLXByaXZhdGUgRE1BCisJICogYnVmZmVyczogYnVmW2Zy YW1lX251bSAlIDJdIGlzIHRoaXMgZnJhbWUncyB3cml0ZSB0YXJnZXQsCisJICogYnVmWyhmcmFt ZV9udW0gKyAxKSAlIDJdIGlzIHRoZSBwcmV2aW91cyBmcmFtZSdzIHJlYWQgcmVmZXJlbmNlIOKA lAorCSAqIEVYQ0VQVCBvbiB0aGUgdmVyeSBmaXJzdCBmcmFtZSBvZiBhIHNlc3Npb24gKGZyYW1l X251bSA9PSAwKSwgd2hlcmUKKwkgKiB0aGVyZSBpcyBubyBwcmV2aW91c2x5LXdyaXR0ZW4gcmVm ZXJlbmNlIGF0IGFsbDogbXBwJ3MgcmVhbAorCSAqIGhhbF9oMjY0ZV92ZXB1NTEwLmMgc2V0dXBf dmVwdTUxMF9yZWNuX3JlZnIoKSBkcmF3cyB0aGUgInJlYWQiIHNpZGUKKwkgKiBmcm9tIGEgYHJl ZnJgIHBpbmctcG9uZyBzbG90IHRoYXQgZXF1YWxzIHRoZSBgY3VycmAgKHdyaXRlKSBzbG90CisJ ICogaW5kZXggZm9yIGZyYW1lIDAsIGkuZS4gcmVhbCBoYXJkd2FyZSBnZXRzIHJlYWQgPT0gd3Jp dGUsIHRoZSBzYW1lCisJICogYnVmZmVyIGFsaWFzZWQgYm90aCB3YXlzLCBub3QgYSBzZWNvbmQg bmV2ZXItd3JpdHRlbiBhbGxvY2F0aW9uLgorCSAqIFNlZSBya3ZlbmNfaDI2NF9ydW4oKSdzIHJl YWRfaWR4IGNvbXB1dGF0aW9uLgorCSAqCisJICogRWFjaCBidWZmZXIgaXMgb25lIGRtYV9hbGxv Y19jb2hlcmVudCgpIGFsbG9jYXRpb24gc3BsaXQgaW50byB0aHJlZQorCSAqIGNvbnNlY3V0aXZl IHJlZ2lvbnMgWzAsIHBpeGVsX2J1Zl9zaXplKSwgW3BpeGVsX2J1Zl9zaXplLAorCSAqICt0aHVt Yl9idWZfc2l6ZSksIFsrdGh1bWJfYnVmX3NpemUsICtzbWVhcl9idWZfc2l6ZSkuIFNpemVzIGFy ZQorCSAqIG1wcCdzIGV4YWN0IHNldHVwX3ZlcHU1MTBfcHJlcGFyZV9yZWNuX2J1ZnMoKSBmb3Jt dWxhcywgbm90IGEgZ3Vlc3MuCisJICovCisJdm9pZCAqcmVjbl9idWZfY3B1WzJdOworCWRtYV9h ZGRyX3QgcmVjbl9idWZfZG1hWzJdOworCXNpemVfdCBwaXhlbF9idWZfc2l6ZTsJLyogRkJDIGhl YWRlciArIGJvZHkgKi8KKwlzaXplX3QgcGl4ZWxfaGRyX3NpemU7CS8qIEZCQyBoZWFkZXIgcG9y dGlvbiBvZiBwaXhlbF9idWZfc2l6ZSAqLworCXNpemVfdCB0aHVtYl9idWZfc2l6ZTsKKwlzaXpl X3Qgc21lYXJfYnVmX3NpemU7CisKKwkvKiBNb3Rpb24tZGV0ZWN0aW9uLWluZm8gd3JpdGUgYnVm ZmVyIChtZWl3X2FkZHIpLiBSZWFsIGhhcmR3YXJlCisJICogd3JpdGVzIGhlcmUgZXZlbiB0aG91 Z2ggbm90aGluZyBpbiB0aGUgdXNlcnNwYWNlIEhBTCBkb2N1bWVudHMgdGhlCisJICogZmVhdHVy ZSBhcyByZXF1aXJlZCBmb3IgYSBwbGFpbiBlbmNvZGUg4oCUIGJvYXJkIGJyaW5nLXVwIGZvdW5k IGEKKwkgKiByZWFsIHN1Y2Nlc3NmdWwgZW5jb2RlIGFsd2F5cyBoYXMgYSByZWFsIGFkZHJlc3Mg aGVyZSwgc28gdGhpcworCSAqIGRyaXZlciBhbGxvY2F0ZXMgb25lIHJhdGhlciB0aGFuIGFzc3Vt aW5nIDAgaXMgc2FmZS4gQ29udGVudCBpcworCSAqIG5ldmVyIHJlYWQgYmFjayAodjEgZG9lc24n dCBleHBvc2UgbW90aW9uIHZlY3RvcnMgdG8gdXNlcnNwYWNlKS4KKwkgKi8KKwl2b2lkICptZWl3 X2J1Zl9jcHU7CisJZG1hX2FkZHJfdCBtZWl3X2J1Zl9kbWE7Cit9OworCitzdHJ1Y3Qgcmt2ZW5j X2N0eCB7CisJc3RydWN0IHY0bDJfZmggZmg7CisJc3RydWN0IHJrdmVuY19kZXYgKmRldjsKKwor CXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc3JjX2ZtdDsJLyogT1VUUFVUOiByYXcgTlYxMiAqLwor CXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgY29kZWRfZm10OyAvKiBDQVBUVVJFOiBIMjY0L0hFVkMg Ki8KKwljb25zdCBzdHJ1Y3Qgcmt2ZW5jX2NvZGVkX2ZtdF9kZXNjICpjb2RlZF9kZXNjOworCisJ c3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsKKworCXVuaW9uIHsKKwkJc3Ry dWN0IHJrdmVuY19oMjY0X2N0eCBoMjY0OworCX07Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVj dCBya3ZlbmNfY3R4ICpmaF90b19ya3ZlbmNfY3R4KHN0cnVjdCB2NGwyX2ZoICpmaCkKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGZoLCBzdHJ1Y3Qgcmt2ZW5jX2N0eCwgZmgpOworfQorCitzdGF0 aWMgaW5saW5lIHUzMiBya3ZlbmNfcmVhZChzdHJ1Y3Qgcmt2ZW5jX2RldiAqZGV2LCB1MzIgcmVn KQoreworCXJldHVybiByZWFkbChkZXYtPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgcmt2ZW5jX3dyaXRlKHN0cnVjdCBya3ZlbmNfZGV2ICpkZXYsIHUzMiByZWcsIHUzMiB2 YWwpCit7CisJd3JpdGVsKHZhbCwgZGV2LT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIHJrdmVuY193cml0ZV9yZWxheGVkKHN0cnVjdCBya3ZlbmNfZGV2ICpkZXYsIHUzMiBy ZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBkZXYtPnJlZ3MgKyByZWcpOwor fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnJrdmVuY19nZXRfc3Jj X2J1ZihzdHJ1Y3Qgcmt2ZW5jX2N0eCAqY3R4KQoreworCXJldHVybiB2NGwyX20ybV9uZXh0X3Ny Y19idWYoY3R4LT5maC5tMm1fY3R4KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmIyX3Y0 bDJfYnVmZmVyICpya3ZlbmNfZ2V0X2RzdF9idWYoc3RydWN0IHJrdmVuY19jdHggKmN0eCkKK3sK KwlyZXR1cm4gdjRsMl9tMm1fbmV4dF9kc3RfYnVmKGN0eC0+ZmgubTJtX2N0eCk7Cit9CisKK2V4 dGVybiBjb25zdCBzdHJ1Y3Qgcmt2ZW5jX2NvZGVkX2ZtdF9kZXNjIHJrdmVuY19oMjY0X2ZtdF9k ZXNjOworCit2b2lkIHJrdmVuY19qb2JfZmluaXNoKHN0cnVjdCBya3ZlbmNfZGV2ICpkZXYsIHN0 cnVjdCBya3ZlbmNfY3R4ICpjdHgsCisJCSAgICAgICBlbnVtIHZiMl9idWZmZXJfc3RhdGUgc3Rh dGUpOwordTMyIHJrdmVuY19jYWxjX3dkZyhzdHJ1Y3Qgcmt2ZW5jX2RldiAqZGV2LCB1bnNpZ25l ZCBpbnQgd2lkdGgsCisJCSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKKworI2VuZGlmIC8qIFJL VkVOQ19IXyAqLwotLSAKMi40My4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlw QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1yb2NrY2hpcAo=