Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp12336212rwb; Sat, 26 Nov 2022 07:34:10 -0800 (PST) X-Google-Smtp-Source: AA0mqf4Chd8xzv6a2K+ydqYn0NSJZbW4QwUqezZ8FRYIDv92GwGQ+aG9b8DVvugIaURJeULKuO25 X-Received: by 2002:aa7:d3c9:0:b0:459:aa70:d4b6 with SMTP id o9-20020aa7d3c9000000b00459aa70d4b6mr40887118edr.224.1669476849948; Sat, 26 Nov 2022 07:34:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669476849; cv=none; d=google.com; s=arc-20160816; b=Qdxj7CfS6rxHjRTDRjNe62+8NRhiFfjHX4duHh2gbTwfH594GHK36fxjbY9GgWPcgB mKAdndJskRJi6MgYbgVoJPFkkkiu5qnAvRikVwCtOXVkztWTgDvck+R1AOceKNrV9stQ cAJhKaY8mlxMrpuh0F7FmwcvjnCOWjKf8nAEC1TSuadNej1Rkf5+IN24pE2yUFqLN6ap JPoD6Zq7MgSrHITu8RuOPUr8FY08DUV3wals4PKFfe42hlMaq08ku9lTVWiDd/tudVFl NC9TpWzm3NHYlH4dha3jBu/Sv5/7VMzGvPwOJNMYRof9seB+2fpyN/8ivdjJQD3Uim0P 088g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :dkim-signature:dkim-signature; bh=Biat/fnX3PNiy+tE7mxoZhMVu1ELER+xx6rk+TYVv18=; b=gQyxuA05jh5uNQUJ6u7h3yCMbAsp2ZuQhR6JqmnbDeXQp7/pKB1wKJ+12VuuK4AEHh fS0aXRcsOr4fZLJiYmXXPZknDh3wEw3lQTq0gdcJPnd0WcbI2MBd3BxqZlAso2GA2T41 4uwNDU8TJF2fk4BAXlLoTGpxuUY4PlgEuPXZ0j4pFwbTc4TLOPxtbMODXauRbTE8JzVo FbSapkmMseaalzStc7uQksy8yLqVIol29g0mNGGg4pPNJ5fLuU/+FUGQ7zSDSXi0HUxr oTFCI9+QsJ+1Ygo00HF3WJX3bPKDO4e0X6zWmm42OXRApj2ZPB3nQvBxDrTf6rYujeZ6 3Ocw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=SlhApCCv; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519 header.b=JVM1inyK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n12-20020aa7d04c000000b004549b880c67si5583171edo.42.2022.11.26.07.33.41; Sat, 26 Nov 2022 07:34:09 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=SlhApCCv; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519 header.b=JVM1inyK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229706AbiKZOwF (ORCPT + 84 others); Sat, 26 Nov 2022 09:52:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229700AbiKZOwC (ORCPT ); Sat, 26 Nov 2022 09:52:02 -0500 Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB1C31B9C4; Sat, 26 Nov 2022 06:51:58 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id D765B1F88B; Sat, 26 Nov 2022 14:51:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1669474315; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Biat/fnX3PNiy+tE7mxoZhMVu1ELER+xx6rk+TYVv18=; b=SlhApCCvKDiYeuq8UrDfbldlmqIJyep6ZHCkeo7GanM6XtBVyCU0KhHuUWK7uEaltD1ZXa //GlNBi+4EzWT7o3vgfPleRcj5HT/uzPAxv63pV7CNdhlXNd7wv52oKEqnTpsAb1gz0Mc0 +MznQccs/n9QSF5jB5nGicoX7Iu8tDU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1669474315; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Biat/fnX3PNiy+tE7mxoZhMVu1ELER+xx6rk+TYVv18=; b=JVM1inyK7xc2AHhBjsINujqwKLkskxQJU9EQw2A6H8sDfKjg9g2Jt1vyl2Rc+/mYMJux2/ fW/ynm6q6YDGb3Bg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 6D6D213A8D; Sat, 26 Nov 2022 14:51:55 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id UTXgGAsogmNzLQAAMHmgww (envelope-from ); Sat, 26 Nov 2022 14:51:55 +0000 Message-ID: <488b261a-843e-de94-bace-16364e6f9d92@suse.de> Date: Sat, 26 Nov 2022 15:51:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: [PATCH/RFC 3/3] drm: atari: Add a DRM driver for Atari graphics hardware Content-Language: en-US To: Geert Uytterhoeven , Maarten Lankhorst , Maxime Ripard , David Airlie , Daniel Vetter Cc: Michael Schmitz , linux-m68k@vger.kernel.org, Helge Deller , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <9ef3ed30a45a367db0231ea2e98f6f37ba860b4c.1669406382.git.geert@linux-m68k.org> From: Thomas Zimmermann In-Reply-To: <9ef3ed30a45a367db0231ea2e98f6f37ba860b4c.1669406382.git.geert@linux-m68k.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------ZkGgoIC9JWNqP6H1mcQIhqcP" X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------ZkGgoIC9JWNqP6H1mcQIhqcP Content-Type: multipart/mixed; boundary="------------pMaauVpGXDs4ikQbubxuupzL"; protected-headers="v1" From: Thomas Zimmermann To: Geert Uytterhoeven , Maarten Lankhorst , Maxime Ripard , David Airlie , Daniel Vetter Cc: Michael Schmitz , linux-m68k@vger.kernel.org, Helge Deller , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Message-ID: <488b261a-843e-de94-bace-16364e6f9d92@suse.de> Subject: Re: [PATCH/RFC 3/3] drm: atari: Add a DRM driver for Atari graphics hardware References: <9ef3ed30a45a367db0231ea2e98f6f37ba860b4c.1669406382.git.geert@linux-m68k.org> In-Reply-To: <9ef3ed30a45a367db0231ea2e98f6f37ba860b4c.1669406382.git.geert@linux-m68k.org> --------------pMaauVpGXDs4ikQbubxuupzL Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGksDQoNCnRoYXQncyBhbiBpbnRlcmVzdGluZyBkcml2ZXIuIEkgbGVmdCBhIGZldyBjb21t ZW50cyBiZWxvdy4NCg0KQW0gMjUuMTEuMjIgdW0gMjE6MzEgc2NocmllYiBHZWVydCBVeXR0 ZXJob2V2ZW46DQo+IFN1cHBvcnRlZCBmb3JtYXRzOg0KPiAgICAtIENbMTI0OF0sDQo+ICAg IC0gUkcxNiAoYm90aCBzdGFuZGFyZCBEUk0gKGxpdHRsZS1lbmRpYW4pIGFuZCBuYXRpdmUg KGJpZy1lbmRpYW4pKSwNCj4gICAgLSBYUjI0Lg0KPiANCj4gUkcxNiBhbmQgWFIyNCBhcmUg b25seSBzdXBwb3J0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBSR0I1NjUgaGFyZHdhcmUNCj4g bW9kZSBvbiBGYWxjb24sIGFuZCBhcmUgc3ViamVjdCB0byBoYXJkd2FyZSByZXN0cmljdGlv bnMgKGxpbWl0ZWQgdG8NCj4gZS5nLiAicXZnYSIgYW5kICJodmdhIiBtb2RlcykuDQo+IA0K PiBBbGwgZm9ybWF0cyB1c2UgYSBzaGFkb3cgYnVmZmVyIChUT0RPOiBCRSBSRzE2IGJ1ZmZl cnMgZnJvbSBTVC1SQU0pLg0KPiBJbml0aWFsIG1vZGUgc2V0dGluZyB3b3JrcywgbGF0ZXIg bW9kZSBjaGFuZ2VzIHNvbWV0aW1lcyBmYWlsLg0KPiANCj4gRGV2ZWxvcGVkIGFuZCB0ZXN0 ZWQgb24gQVJBbnlNLg0KPiANCj4gUHJvYmFibHkgdGhpcyBzaG91bGQgbm90IGJlIHVuZGVy IC90aW55IDstKQ0KPiANCj4gcm9vdEBhdGFyaTp+IyBtb2RldGVzdCAtTSBhdGFyaV9kcm0N Cj4gRW5jb2RlcnM6DQo+IGlkCWNydGMJdHlwZQlwb3NzaWJsZSBjcnRjcwlwb3NzaWJsZSBj bG9uZXMNCj4gMzUJMzQJbm9uZQkweDAwMDAwMDAxCTB4MDAwMDAwMDENCj4gDQo+IENvbm5l Y3RvcnM6DQo+IGlkCWVuY29kZXIJc3RhdHVzCQluYW1lCQlzaXplIChtbSkJbW9kZXMJZW5j b2RlcnMNCj4gMzEJMzUJY29ubmVjdGVkCVZHQS0xICAgICAgICAgIAkweDAJCTkJMzUNCj4g ICAgbW9kZXM6DQo+IAlpbmRleCBuYW1lIHJlZnJlc2ggKEh6KSBoZGlzcCBoc3MgaHNlIGh0 b3QgdmRpc3AgdnNzIHZzZSB2dG90DQo+ICAgICMwIHZnYTcwIDcwLjcyIDY0MCA2NTggNzU4 IDgwMCA0MDAgNDExIDQxNCA0NDUgMjUxNzYgZmxhZ3M6IG5oc3luYywgcHZzeW5jLCBwY3N5 bmM7IHR5cGU6IHByZWZlcnJlZCwgZHJpdmVyDQo+ICAgICMxIHR0LW1pZCA2MC4zMyA2NDAg NzQwIDg4MCAxMDAwIDQ4MCA0OTYgNTI2IDUzNCAzMjIxNiBmbGFnczogbmhzeW5jLCBudnN5 bmMsIG5jc3luYzsgdHlwZTogZHJpdmVyDQo+ICAgICMyIHZnYSA1OS45NCA2NDAgNjU4IDc1 OCA4MDAgNDgwIDQ5MSA0OTQgNTI1IDI1MTc2IGZsYWdzOiBuaHN5bmMsIG52c3luYywgbmNz eW5jOyB0eXBlOiBkcml2ZXINCj4gICAgIzMgc3QtaGlnaCA3OC41MSA2NDAgNjQwIDc2OCA4 OTYgNDAwIDQxNCA0MTggNDU4IDMyMjE2IGZsYWdzOiBuaHN5bmMsIG52c3luYywgbmNzeW5j OyB0eXBlOiBkcml2ZXINCj4gICAgIzQgdHQtbG93IDg4LjcyIDMyMCA0MjAgNTYwIDY4MCA0 ODAgNDk2IDUyNiA1MzQgMzIyMTYgZmxhZ3M6IG5oc3luYywgbnZzeW5jLCBuY3N5bmM7IHR5 cGU6IGRyaXZlcg0KPiAgICAjNSBodmdhIDU5Ljk0IDMyMCAzMjkgMzc5IDQwMCA0ODAgNDkx IDQ5NCA1MjUgMTI1ODggZmxhZ3M6IG5oc3luYywgbnZzeW5jLCBuY3N5bmM7IHR5cGU6IGRy aXZlcg0KPiAgICAjNiBzdC1taWQgMTY1LjAzIDY0MCA2NTYgNzUyIDc4NCAyMDAgMjE0IDIx OCAyNDkgMzIyMTYgZmxhZ3M6IG5oc3luYywgbnZzeW5jLCBuY3N5bmM7IHR5cGU6IGRyaXZl cg0KPiAgICAjNyBxdmdhIDYwLjA2IDMyMCAzMjkgMzc5IDQwMCAyNDAgMjQ1IDI0NyAyNjIg MTI1ODggZmxhZ3M6IG5oc3luYywgbnZzeW5jLCBkYmxzY2FuLCBuY3N5bmM7IHR5cGU6IGRy aXZlcg0KPiAgICAjOCBzdC1sb3cgMjc4Ljg0IDMyMCAzMzYgNDMyIDQ2NCAyMDAgMjE0IDIx OCAyNDkgMzIyMTYgZmxhZ3M6IG5oc3luYywgbnZzeW5jLCBuY3N5bmM7IHR5cGU6IGRyaXZl cg0KPiAgICBwcm9wczoNCj4gCTEgRURJRDoNCj4gCQlmbGFnczogaW1tdXRhYmxlIGJsb2IN Cj4gCQlibG9iczoNCj4gDQo+IAkJdmFsdWU6DQo+IAkyIERQTVM6DQo+IAkJZmxhZ3M6IGVu dW0NCj4gCQllbnVtczogT249MCBTdGFuZGJ5PTEgU3VzcGVuZD0yIE9mZj0zDQo+IAkJdmFs dWU6IDANCj4gCTUgbGluay1zdGF0dXM6DQo+IAkJZmxhZ3M6IGVudW0NCj4gCQllbnVtczog R29vZD0wIEJhZD0xDQo+IAkJdmFsdWU6IDANCj4gCTYgbm9uLWRlc2t0b3A6DQo+IAkJZmxh Z3M6IGltbXV0YWJsZSByYW5nZQ0KPiAJCXZhbHVlczogMCAxDQo+IAkJdmFsdWU6IDANCj4g CTQgVElMRToNCj4gCQlmbGFnczogaW1tdXRhYmxlIGJsb2INCj4gCQlibG9iczoNCj4gDQo+ IAkJdmFsdWU6DQo+IA0KPiBDUlRDczoNCj4gaWQJZmIJcG9zCXNpemUNCj4gMzQJMzYJKDAs MCkJKDMyMHgyNDApDQo+ICAgICMwIHF2Z2EgNjAuMDYgMzIwIDMyOSAzNzkgNDAwIDI0MCAy NDUgMjQ3IDI2MiAxMjU4OCBmbGFnczogbmhzeW5jLCBudnN5bmMsIGRibHNjYW4sIG5jc3lu YzsgdHlwZTogZHJpdmVyDQo+ICAgIHByb3BzOg0KPiAJMjQgVlJSX0VOQUJMRUQ6DQo+IAkJ ZmxhZ3M6IHJhbmdlDQo+IAkJdmFsdWVzOiAwIDENCj4gCQl2YWx1ZTogMA0KPiAJMjggR0FN TUFfTFVUOg0KPiAJCWZsYWdzOiBibG9iDQo+IAkJYmxvYnM6DQo+IA0KPiAJCXZhbHVlOg0K PiAJCQkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhYWFhMDAwMA0KPiAJCQkwMDAwYWFhYTAw MDAwMDAwMDAwMGFhYWFhYWFhMDAwMA0KPiAJCQlhYWFhMDAwMDAwMDAwMDAwYWFhYTAwMDBh YWFhMDAwMA0KPiAJCQlhYWFhNTU1NTAwMDAwMDAwYWFhYWFhYWFhYWFhMDAwMA0KPiAJCQk1 NTU1NTU1NTU1NTUwMDAwNTU1NTU1NTVmZmZmMDAwMA0KPiAJCQk1NTU1ZmZmZjU1NTUwMDAw NTU1NWZmZmZmZmZmMDAwMA0KPiAJCQlmZmZmNTU1NTU1NTUwMDAwZmZmZjU1NTVmZmZmMDAw MA0KPiAJCQlmZmZmZmZmZjU1NTUwMDAwZmZmZmZmZmZmZmZmMDAwMA0KPiAJCQkxMDAwMTAw MDEwMDAwMDAwMTEwMDExMDAxMTAwMDAwMA0KPiAJCQkxMjAwMTIwMDEyMDAwMDAwMTMwMDEz MDAxMzAwMDAwMA0KPiAJCQkxNDAwMTQwMDE0MDAwMDAwMTUwMDE1MDAxNTAwMDAwMA0KPiAJ CQkxNjAwMTYwMDE2MDAwMDAwMTcwMDE3MDAxNzAwMDAwMA0KPiAJCQkxODAwMTgwMDE4MDAw MDAwMTkwMDE5MDAxOTAwMDAwMA0KPiAJCQkxYTAwMWEwMDFhMDAwMDAwMWIwMDFiMDAxYjAw MDAwMA0KPiAJCQkxYzAwMWMwMDFjMDAwMDAwMWQwMDFkMDAxZDAwMDAwMA0KPiAJCQkxZTAw MWUwMDFlMDAwMDAwMWYwMDFmMDAxZjAwMDAwMA0KPiAJCQkyMDAwMjAwMDIwMDAwMDAwMjEw MDIxMDAyMTAwMDAwMA0KPiAJCQkyMjAwMjIwMDIyMDAwMDAwMjMwMDIzMDAyMzAwMDAwMA0K PiAJCQkyNDAwMjQwMDI0MDAwMDAwMjUwMDI1MDAyNTAwMDAwMA0KPiAJCQkyNjAwMjYwMDI2 MDAwMDAwMjcwMDI3MDAyNzAwMDAwMA0KPiAJCQkyODAwMjgwMDI4MDAwMDAwMjkwMDI5MDAy OTAwMDAwMA0KPiAJCQkyYTAwMmEwMDJhMDAwMDAwMmIwMDJiMDAyYjAwMDAwMA0KPiAJCQky YzAwMmMwMDJjMDAwMDAwMmQwMDJkMDAyZDAwMDAwMA0KPiAJCQkyZTAwMmUwMDJlMDAwMDAw MmYwMDJmMDAyZjAwMDAwMA0KPiAJCQkzMDAwMzAwMDMwMDAwMDAwMzEwMDMxMDAzMTAwMDAw MA0KPiAJCQkzMjAwMzIwMDMyMDAwMDAwMzMwMDMzMDAzMzAwMDAwMA0KPiAJCQkzNDAwMzQw MDM0MDAwMDAwMzUwMDM1MDAzNTAwMDAwMA0KPiAJCQkzNjAwMzYwMDM2MDAwMDAwMzcwMDM3 MDAzNzAwMDAwMA0KPiAJCQkzODAwMzgwMDM4MDAwMDAwMzkwMDM5MDAzOTAwMDAwMA0KPiAJ CQkzYTAwM2EwMDNhMDAwMDAwM2IwMDNiMDAzYjAwMDAwMA0KPiAJCQkzYzAwM2MwMDNjMDAw MDAwM2QwMDNkMDAzZDAwMDAwMA0KPiAJCQkzZTAwM2UwMDNlMDAwMDAwM2YwMDNmMDAzZjAw MDAwMA0KPiAJCQk0MDAwNDAwMDQwMDAwMDAwNDEwMDQxMDA0MTAwMDAwMA0KPiAJCQk0MjAw NDIwMDQyMDAwMDAwNDMwMDQzMDA0MzAwMDAwMA0KPiAJCQk0NDAwNDQwMDQ0MDAwMDAwNDUw MDQ1MDA0NTAwMDAwMA0KPiAJCQk0NjAwNDYwMDQ2MDAwMDAwNDcwMDQ3MDA0NzAwMDAwMA0K PiAJCQk0ODAwNDgwMDQ4MDAwMDAwNDkwMDQ5MDA0OTAwMDAwMA0KPiAJCQk0YTAwNGEwMDRh MDAwMDAwNGIwMDRiMDA0YjAwMDAwMA0KPiAJCQk0YzAwNGMwMDRjMDAwMDAwNGQwMDRkMDA0 ZDAwMDAwMA0KPiAJCQk0ZTAwNGUwMDRlMDAwMDAwNGYwMDRmMDA0ZjAwMDAwMA0KPiAJCQk1 MDAwNTAwMDUwMDAwMDAwNTEwMDUxMDA1MTAwMDAwMA0KPiAJCQk1MjAwNTIwMDUyMDAwMDAw NTMwMDUzMDA1MzAwMDAwMA0KPiAJCQk1NDAwNTQwMDU0MDAwMDAwNTUwMDU1MDA1NTAwMDAw MA0KPiAJCQk1NjAwNTYwMDU2MDAwMDAwNTcwMDU3MDA1NzAwMDAwMA0KPiAJCQk1ODAwNTgw MDU4MDAwMDAwNTkwMDU5MDA1OTAwMDAwMA0KPiAJCQk1YTAwNWEwMDVhMDAwMDAwNWIwMDVi MDA1YjAwMDAwMA0KPiAJCQk1YzAwNWMwMDVjMDAwMDAwNWQwMDVkMDA1ZDAwMDAwMA0KPiAJ CQk1ZTAwNWUwMDVlMDAwMDAwNWYwMDVmMDA1ZjAwMDAwMA0KPiAJCQk2MDAwNjAwMDYwMDAw MDAwNjEwMDYxMDA2MTAwMDAwMA0KPiAJCQk2MjAwNjIwMDYyMDAwMDAwNjMwMDYzMDA2MzAw MDAwMA0KPiAJCQk2NDAwNjQwMDY0MDAwMDAwNjUwMDY1MDA2NTAwMDAwMA0KPiAJCQk2NjAw NjYwMDY2MDAwMDAwNjcwMDY3MDA2NzAwMDAwMA0KPiAJCQk2ODAwNjgwMDY4MDAwMDAwNjkw MDY5MDA2OTAwMDAwMA0KPiAJCQk2YTAwNmEwMDZhMDAwMDAwNmIwMDZiMDA2YjAwMDAwMA0K PiAJCQk2YzAwNmMwMDZjMDAwMDAwNmQwMDZkMDA2ZDAwMDAwMA0KPiAJCQk2ZTAwNmUwMDZl MDAwMDAwNmYwMDZmMDA2ZjAwMDAwMA0KPiAJCQk3MDAwNzAwMDcwMDAwMDAwNzEwMDcxMDA3 MTAwMDAwMA0KPiAJCQk3MjAwNzIwMDcyMDAwMDAwNzMwMDczMDA3MzAwMDAwMA0KPiAJCQk3 NDAwNzQwMDc0MDAwMDAwNzUwMDc1MDA3NTAwMDAwMA0KPiAJCQk3NjAwNzYwMDc2MDAwMDAw NzcwMDc3MDA3NzAwMDAwMA0KPiAJCQk3ODAwNzgwMDc4MDAwMDAwNzkwMDc5MDA3OTAwMDAw MA0KPiAJCQk3YTAwN2EwMDdhMDAwMDAwN2IwMDdiMDA3YjAwMDAwMA0KPiAJCQk3YzAwN2Mw MDdjMDAwMDAwN2QwMDdkMDA3ZDAwMDAwMA0KPiAJCQk3ZTAwN2UwMDdlMDAwMDAwN2YwMDdm MDA3ZjAwMDAwMA0KPiAJCQk4MDAwODAwMDgwMDAwMDAwODEwMDgxMDA4MTAwMDAwMA0KPiAJ CQk4MjAwODIwMDgyMDAwMDAwODMwMDgzMDA4MzAwMDAwMA0KPiAJCQk4NDAwODQwMDg0MDAw MDAwODUwMDg1MDA4NTAwMDAwMA0KPiAJCQk4NjAwODYwMDg2MDAwMDAwODcwMDg3MDA4NzAw MDAwMA0KPiAJCQk4ODAwODgwMDg4MDAwMDAwODkwMDg5MDA4OTAwMDAwMA0KPiAJCQk4YTAw OGEwMDhhMDAwMDAwOGIwMDhiMDA4YjAwMDAwMA0KPiAJCQk4YzAwOGMwMDhjMDAwMDAwOGQw MDhkMDA4ZDAwMDAwMA0KPiAJCQk4ZTAwOGUwMDhlMDAwMDAwOGYwMDhmMDA4ZjAwMDAwMA0K PiAJCQk5MDAwOTAwMDkwMDAwMDAwOTEwMDkxMDA5MTAwMDAwMA0KPiAJCQk5MjAwOTIwMDky MDAwMDAwOTMwMDkzMDA5MzAwMDAwMA0KPiAJCQk5NDAwOTQwMDk0MDAwMDAwOTUwMDk1MDA5 NTAwMDAwMA0KPiAJCQk5NjAwOTYwMDk2MDAwMDAwOTcwMDk3MDA5NzAwMDAwMA0KPiAJCQk5 ODAwOTgwMDk4MDAwMDAwOTkwMDk5MDA5OTAwMDAwMA0KPiAJCQk5YTAwOWEwMDlhMDAwMDAw OWIwMDliMDA5YjAwMDAwMA0KPiAJCQk5YzAwOWMwMDljMDAwMDAwOWQwMDlkMDA5ZDAwMDAw MA0KPiAJCQk5ZTAwOWUwMDllMDAwMDAwOWYwMDlmMDA5ZjAwMDAwMA0KPiAJCQlhMDAwYTAw MGEwMDAwMDAwYTEwMGExMDBhMTAwMDAwMA0KPiAJCQlhMjAwYTIwMGEyMDAwMDAwYTMwMGEz MDBhMzAwMDAwMA0KPiAJCQlhNDAwYTQwMGE0MDAwMDAwYTUwMGE1MDBhNTAwMDAwMA0KPiAJ CQlhNjAwYTYwMGE2MDAwMDAwYTcwMGE3MDBhNzAwMDAwMA0KPiAJCQlhODAwYTgwMGE4MDAw MDAwYTkwMGE5MDBhOTAwMDAwMA0KPiAJCQlhYTAwYWEwMGFhMDAwMDAwYWIwMGFiMDBhYjAw MDAwMA0KPiAJCQlhYzAwYWMwMGFjMDAwMDAwYWQwMGFkMDBhZDAwMDAwMA0KPiAJCQlhZTAw YWUwMGFlMDAwMDAwYWYwMGFmMDBhZjAwMDAwMA0KPiAJCQliMDAwYjAwMGIwMDAwMDAwYjEw MGIxMDBiMTAwMDAwMA0KPiAJCQliMjAwYjIwMGIyMDAwMDAwYjMwMGIzMDBiMzAwMDAwMA0K PiAJCQliNDAwYjQwMGI0MDAwMDAwYjUwMGI1MDBiNTAwMDAwMA0KPiAJCQliNjAwYjYwMGI2 MDAwMDAwYjcwMGI3MDBiNzAwMDAwMA0KPiAJCQliODAwYjgwMGI4MDAwMDAwYjkwMGI5MDBi OTAwMDAwMA0KPiAJCQliYTAwYmEwMGJhMDAwMDAwYmIwMGJiMDBiYjAwMDAwMA0KPiAJCQli YzAwYmMwMGJjMDAwMDAwYmQwMGJkMDBiZDAwMDAwMA0KPiAJCQliZTAwYmUwMGJlMDAwMDAw YmYwMGJmMDBiZjAwMDAwMA0KPiAJCQljMDAwYzAwMGMwMDAwMDAwYzEwMGMxMDBjMTAwMDAw MA0KPiAJCQljMjAwYzIwMGMyMDAwMDAwYzMwMGMzMDBjMzAwMDAwMA0KPiAJCQljNDAwYzQw MGM0MDAwMDAwYzUwMGM1MDBjNTAwMDAwMA0KPiAJCQljNjAwYzYwMGM2MDAwMDAwYzcwMGM3 MDBjNzAwMDAwMA0KPiAJCQljODAwYzgwMGM4MDAwMDAwYzkwMGM5MDBjOTAwMDAwMA0KPiAJ CQljYTAwY2EwMGNhMDAwMDAwY2IwMGNiMDBjYjAwMDAwMA0KPiAJCQljYzAwY2MwMGNjMDAw MDAwY2QwMGNkMDBjZDAwMDAwMA0KPiAJCQljZTAwY2UwMGNlMDAwMDAwY2YwMGNmMDBjZjAw MDAwMA0KPiAJCQlkMDAwZDAwMGQwMDAwMDAwZDEwMGQxMDBkMTAwMDAwMA0KPiAJCQlkMjAw ZDIwMGQyMDAwMDAwZDMwMGQzMDBkMzAwMDAwMA0KPiAJCQlkNDAwZDQwMGQ0MDAwMDAwZDUw MGQ1MDBkNTAwMDAwMA0KPiAJCQlkNjAwZDYwMGQ2MDAwMDAwZDcwMGQ3MDBkNzAwMDAwMA0K PiAJCQlkODAwZDgwMGQ4MDAwMDAwZDkwMGQ5MDBkOTAwMDAwMA0KPiAJCQlkYTAwZGEwMGRh MDAwMDAwZGIwMGRiMDBkYjAwMDAwMA0KPiAJCQlkYzAwZGMwMGRjMDAwMDAwZGQwMGRkMDBk ZDAwMDAwMA0KPiAJCQlkZTAwZGUwMGRlMDAwMDAwZGYwMGRmMDBkZjAwMDAwMA0KPiAJCQll MDAwZTAwMGUwMDAwMDAwZTEwMGUxMDBlMTAwMDAwMA0KPiAJCQllMjAwZTIwMGUyMDAwMDAw ZTMwMGUzMDBlMzAwMDAwMA0KPiAJCQllNDAwZTQwMGU0MDAwMDAwZTUwMGU1MDBlNTAwMDAw MA0KPiAJCQllNjAwZTYwMGU2MDAwMDAwZTcwMGU3MDBlNzAwMDAwMA0KPiAJCQllODAwZTgw MGU4MDAwMDAwZTkwMGU5MDBlOTAwMDAwMA0KPiAJCQllYTAwZWEwMGVhMDAwMDAwZWIwMGVi MDBlYjAwMDAwMA0KPiAJCQllYzAwZWMwMGVjMDAwMDAwZWQwMGVkMDBlZDAwMDAwMA0KPiAJ CQllZTAwZWUwMGVlMDAwMDAwZWYwMGVmMDBlZjAwMDAwMA0KPiAJCQlmMDAwZjAwMGYwMDAw MDAwZjEwMGYxMDBmMTAwMDAwMA0KPiAJCQlmMjAwZjIwMGYyMDAwMDAwZjMwMGYzMDBmMzAw MDAwMA0KPiAJCQlmNDAwZjQwMGY0MDAwMDAwZjUwMGY1MDBmNTAwMDAwMA0KPiAJCQlmNjAw ZjYwMGY2MDAwMDAwZjcwMGY3MDBmNzAwMDAwMA0KPiAJCQlmODAwZjgwMGY4MDAwMDAwZjkw MGY5MDBmOTAwMDAwMA0KPiAJCQlmYTAwZmEwMGZhMDAwMDAwZmIwMGZiMDBmYjAwMDAwMA0K PiAJCQlmYzAwZmMwMGZjMDAwMDAwZmQwMGZkMDBmZDAwMDAwMA0KPiAJCQlmZTAwZmUwMGZl MDAwMDAwZmYwMGZmMDBmZjAwMDAwMA0KPiAJMjkgR0FNTUFfTFVUX1NJWkU6DQo+IAkJZmxh Z3M6IGltbXV0YWJsZSByYW5nZQ0KPiAJCXZhbHVlczogMCA0Mjk0OTY3Mjk1DQo+IAkJdmFs dWU6IDI1Ng0KPiANCj4gUGxhbmVzOg0KPiBpZAljcnRjCWZiCUNSVEMgeCx5CXgseQlnYW1t YSBzaXplCXBvc3NpYmxlIGNydGNzDQo+IDMyCTM0CTM2CTAsMAkJMCwwCTAgICAgICAgCTB4 MDAwMDAwMDENCj4gICAgZm9ybWF0czogQzEgICBDMiAgIEM0ICAgQzggICBSRzE2IFJHMTZi ZSBYUjI0DQo+ICAgIHByb3BzOg0KPiAJOCB0eXBlOg0KPiAJCWZsYWdzOiBpbW11dGFibGUg ZW51bQ0KPiAJCWVudW1zOiBPdmVybGF5PTAgUHJpbWFyeT0xIEN1cnNvcj0yDQo+IAkJdmFs dWU6IDENCj4gCTMwIElOX0ZPUk1BVFM6DQo+IAkJZmxhZ3M6IGltbXV0YWJsZSBibG9iDQo+ IAkJYmxvYnM6DQo+IA0KPiAJCXZhbHVlOg0KPiAJCQkwMDAwMDAwMTAwMDAwMDAwMDAwMDAw MDcwMDAwMDAxOA0KPiAJCQkwMDAwMDAwMTAwMDAwMDM4MjAyMDMxNDMyMDIwMzI0Mw0KPiAJ CQkyMDIwMzQ0MzIwMjAzODQzMzYzMTQ3NTJiNjMxNDc1Mg0KPiAJCQkzNDMyNTI1ODAwMDAw MDAwMDAwMDAwMDAwMDAwMDA3Zg0KPiAJCQkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMA0KPiAJCWluX2Zvcm1hdHMgYmxvYiBkZWNvZGVkOg0KPiAJCQkgQzEgIDogIExJTkVB Ug0KPiAJCQkgQzIgIDogIExJTkVBUg0KPiAJCQkgQzQgIDogIExJTkVBUg0KPiAJCQkgQzgg IDogIExJTkVBUg0KPiAJCQkgUkcxNjogIExJTkVBUg0KPiAJCQkgUkcxNmJlOiAgTElORUFS DQo+IAkJCSBYUjI0OiAgTElORUFSDQo+IA0KPiBGcmFtZSBidWZmZXJzOg0KPiBpZAlzaXpl CXBpdGNoDQo+IA0KPiByb290QGF0YXJpOn4jDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBHZWVy dCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPg0KPiAtLS0NCj4gICBkcml2 ZXJzL2dwdS9kcm0vdGlueS9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgICA4ICsNCj4g ICBkcml2ZXJzL2dwdS9kcm0vdGlueS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgICAx ICsNCj4gICAuLi4vYXRhZmIuYyA9PiBncHUvZHJtL3RpbnkvYXRhcmlfZHJtLmN9ICAgICAg fCAyNTM2ICsrKysrKysrKysrKystLS0tDQo+ICAgMyBmaWxlcyBjaGFuZ2VkLCAyMDE3IGlu c2VydGlvbnMoKyksIDUyOCBkZWxldGlvbnMoLSkNCj4gICBjb3B5IGRyaXZlcnMve3ZpZGVv L2ZiZGV2L2F0YWZiLmMgPT4gZ3B1L2RybS90aW55L2F0YXJpX2RybS5jfSAoNTclKQ0KPiAN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55L0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vdGlueS9LY29uZmlnDQo+IGluZGV4IGY2ODg5ZjY0OWJjMTgyMTcuLjE3N2Nj ZjQwZjA1YTJiOTkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aW55L0tjb25m aWcNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpbnkvS2NvbmZpZw0KPiBAQCAtMTAsNiAr MTAsMTQgQEAgY29uZmlnIERSTV9BUkNQR1UNCj4gICANCj4gICAJICBJZiBNIGlzIHNlbGVj dGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXJjcGd1Lg0KPiAgIA0KPiArY29uZmln IERSTV9BVEFSSQ0KPiArCXRyaXN0YXRlICJEUk0gc3VwcG9ydCBmb3IgQXRhcmkgbmF0aXZl IGNoaXBzZXQiDQo+ICsJZGVwZW5kcyBvbiBEUk0gJiYgQVRBUkkNCj4gKwlzZWxlY3QgRFJN X0tNU19IRUxQRVINCj4gKwlzZWxlY3QgRFJNX0dFTV9TSE1FTV9IRUxQRVINCg0KQWxwaGFi ZXRpY2FsIHNvcnRpbmcgb2YgdGhlIHNlbGVjdCBzdGF0ZW1lbnRzLg0KDQo+ICsJaGVscA0K PiArCSBUaGlzIGlzIGEgS01TIGRyaXZlciBmb3IgdGhlIGJ1aWx0aW4gZ3JhcGhpY3MgY2hp cHNldCBmb3VuZCBpbiBBdGFyaXMuDQo+ICsNCj4gICBjb25maWcgRFJNX0JPQ0hTDQo+ICAg CXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgYm9jaHMgZGlzcGkgdmdhIGludGVyZmFjZSAo cWVtdSBzdGR2Z2EpIg0KPiAgIAlkZXBlbmRzIG9uIERSTSAmJiBQQ0kgJiYgTU1VDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS90aW55L01ha2VmaWxlDQo+IGluZGV4IDc2ZGRlODlhMDQ0YjdkZGQuLjFmNTRiZGZl ZTE2MjMwODMgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aW55L01ha2VmaWxl DQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55L01ha2VmaWxlDQo+IEBAIC0xLDYgKzEs NyBAQA0KPiAgICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiAg IA0KPiAgIG9iai0kKENPTkZJR19EUk1fQVJDUEdVKQkJKz0gYXJjcGd1Lm8NCj4gK29iai0k KENPTkZJR19EUk1fQVRBUkkpCQkJKz0gYXRhcmlfZHJtLm8NCj4gICBvYmotJChDT05GSUdf RFJNX0JPQ0hTKQkJCSs9IGJvY2hzLm8NCj4gICBvYmotJChDT05GSUdfRFJNX0NJUlJVU19R RU1VKQkJKz0gY2lycnVzLm8NCj4gICBvYmotJChDT05GSUdfRFJNX0dNMTJVMzIwKQkJKz0g Z20xMnUzMjAubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9hdGFmYi5j IGIvZHJpdmVycy9ncHUvZHJtL3RpbnkvYXRhcmlfZHJtLmMNCj4gc2ltaWxhcml0eSBpbmRl eCA1NyUNCj4gY29weSBmcm9tIGRyaXZlcnMvdmlkZW8vZmJkZXYvYXRhZmIuYw0KPiBjb3B5 IHRvIGRyaXZlcnMvZ3B1L2RybS90aW55L2F0YXJpX2RybS5jDQo+IGluZGV4IDJiYzQwODk4 NjVlNjBhYzIuLmQyNmUwZmRkZDNiZWExYmUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdmlk ZW8vZmJkZXYvYXRhZmIuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueS9hdGFyaV9k cm0uYw0KPiBAQCAtMSw4MSArMSw3OSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCj4gICAvKg0KPiAtICogbGludXgvZHJpdmVycy92aWRlby9hdGFmYi5j IC0tIEF0YXJpIGJ1aWx0aW4gY2hpcHNldCBmcmFtZSBidWZmZXIgZGV2aWNlDQo+IC0gKg0K PiAtICogIENvcHlyaWdodCAoQykgMTk5NCBNYXJ0aW4gU2NoYWxsZXIgJiBSb21hbiBIb2Rl aw0KPiAtICoNCj4gLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQo+IC0gKiBMaWNlbnNlLiAg U2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJj aGl2ZQ0KPiAtICogZm9yIG1vcmUgZGV0YWlscy4NCj4gLSAqDQo+IC0gKiBIaXN0b3J5Og0K PiAtICogICAtIDAzIEphbiA5NTogT3JpZ2luYWwgdmVyc2lvbiBieSBNYXJ0aW4gU2NoYWxs ZXI6IFRoZSBUVCBkcml2ZXIgYW5kDQo+IC0gKiAgICAgICAgICAgICAgICBhbGwgdGhlIGRl dmljZSBpbmRlcGVuZGVudCBzdHVmZg0KPiAtICogICAtIDA5IEphbiA5NTogUm9tYW46IEkn dmUgYWRkZWQgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIChod19zd2l0Y2gpDQo+IC0gKiAg ICAgICAgICAgICAgICBhbmQgd3JvdGUgdGhlIEZhbGNvbiwgU1QoRSksIGFuZCBFeHRlcm5h bCBkcml2ZXJzDQo+IC0gKiAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgb3JpZ2luYWwg VFQgZHJpdmVyLg0KPiAtICogICAtIDA3IE1heSA5NTogTWFydGluOiBBZGRlZCBjb2xvcm1h cCBvcGVyYXRpb25zIGZvciB0aGUgZXh0ZXJuYWwgZHJpdmVyDQo+IC0gKiAgIC0gMjEgTWF5 IDk1OiBNYXJ0aW46IEFkZGVkIHN1cHBvcnQgZm9yIG92ZXJzY2FuDQo+IC0gKgkJICBBbmRy ZWFzOiBzb21lIGJ1ZyBmaXhlcyBmb3IgdGhpcw0KPiAtICogICAtICAgIEp1bCA5NTogR3Vl bnRoZXIgS2VsbGV0ZXIgPGd1ZW50aGVyQHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5k ZT46DQo+IC0gKiAgICAgICAgICAgICAgICBQcm9ncmFtbWFibGUgRmFsY29uIHZpZGVvIG1v ZGVzDQo+IC0gKiAgICAgICAgICAgICAgICAodGhhbmtzIHRvIENocmlzdGlhbiBDYXJ0dXMg Zm9yIGRvY3VtZW50YXRpb24NCj4gLSAqICAgICAgICAgICAgICAgIG9mIFZJREVMIHJlZ2lz dGVycykuDQo+IC0gKiAgIC0gMjcgRGVjIDk1OiBHdWVudGhlcjogSW1wbGVtZW50ZWQgdXNl ciBkZWZpbmFibGUgdmlkZW8gbW9kZXMgInVzZXJbMC03XSINCj4gLSAqICAgICAgICAgICAg ICAgIG9uIG1pbm9yIDI0Li4uMzEuICJ1c2VyMCIgbWF5IGJlIHNldCBvbiBjb21tYW5kbGlu ZSBieQ0KPiAtICogICAgICAgICAgICAgICAgIlI8eD47PHk+OzxkZXB0aD4iLiAoTWFrZXMg c2Vuc2Ugb25seSBvbiBGYWxjb24pDQo+IC0gKiAgICAgICAgICAgICAgICBWaWRlbyBtb2Rl IHN3aXRjaCBvbiBGYWxjb24gbm93IGRvbmUgYXQgbmV4dCBWQkwgaW50ZXJydXB0DQo+IC0g KiAgICAgICAgICAgICAgICB0byBhdm9pZCB0aGUgYW5ub3lpbmcgcmlnaHQgc2hpZnQgb2Yg dGhlIHNjcmVlbi4NCj4gLSAqICAgLSAyMyBTZXAgOTc6IEp1ZXJnZW46IGFkZGVkIHhyZXNf dmlydHVhbCBmb3IgY2FyZHMgbGlrZSBQcm9NU1QNCj4gLSAqICAgICAgICAgICAgICAgIFRo ZSBleHRlcm5hbC1wYXJ0IGlzIGxlZ2FjeSwgdGhlcmVmb3JlIGhhcmR3YXJlLXNwZWNpZmlj DQo+IC0gKiAgICAgICAgICAgICAgICBmdW5jdGlvbnMgbGlrZSBwYW5uaW5nL2hhcmR3YXJl c2Nyb2xsaW5nL2JsYW5raW5nIGlzbid0DQo+IC0gKgkJCQkgIHN1cHBvcnRlZC4NCj4gLSAq ICAgLSAyOSBTZXAgOTc6IEp1ZXJnZW46IGFkZGVkIFJvbWFucyBzdWdnZXN0aW9uIGZvciBw YW5fZGlzcGxheQ0KPiAtICoJCQkJICAodmFyLT54b2Zmc2V0IHdhcyBjaGFuZ2VkIGV2ZW4g aWYgbm8gc2V0X3NjcmVlbl9iYXNlIGF2YWlsLikNCj4gLSAqCSAtIDA1IE9jdCA5NzogSnVl cmdlbjogZXh0ZmIgKFBBQ0tFRF9QSVhFTCkgaXMgRkJfUFNFVURPQ09MT1IgJ2NhdXNlDQo+ IC0gKgkJCQkgIHdlIGtub3cgaG93IHRvIHNldCB0aGUgY29sb3JzDQo+IC0gKgkJCQkgIGV4 dF8qcGFsZXR0ZTogcmVhZCBmcm9tIGV4dF9jb2xvcnMgKGZvcm1lciBNVjMwMF9jb2xvcnMp DQo+IC0gKgkJCQkJCQkgICAgd3JpdGUgdG8gZXh0X2NvbG9ycyBhbmQgUkFNREFDDQo+IC0g Kg0KPiAtICogVG8gZG86DQo+IC0gKiAgIC0gRm9yIHRoZSBGYWxjb24gaXQgaXMgbm90IHBv c3NpYmxlIHRvIHNldCByYW5kb20gdmlkZW8gbW9kZXMgb24NCj4gLSAqICAgICBTTTEyNCBh bmQgU0MvVFYsIG9ubHkgdGhlIGJvb3R1cCByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZC4NCj4g KyAqIENvcHlyaWdodCAyMDIwLTIwMjIgR2xpZGVyIGJ2DQo+ICAgICoNCj4gKyAqIEJhc2Vk IG9uIGRyaXZlcnMvdmlkZW8vYXRhZmIuYw0KPiArICogQ29weXJpZ2h0IChDKSAxOTk0IE1h cnRpbiBTY2hhbGxlciAmIFJvbWFuIEhvZGVrDQo+ICAgICovDQo+ICAgDQo+IC0jZGVmaW5l IEFUQUZCX1RUDQo+IC0jZGVmaW5lIEFUQUZCX1NURQ0KPiAtI2RlZmluZSBBVEFGQl9FWFQN Cj4gLSNkZWZpbmUgQVRBRkJfRkFMQ09ODQo+IC0NCj4gLSNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4 L3N0cmluZy5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L21tLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvY29uc29sZS5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2Vycm5vLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZmIuaD4NCj4gICAjaW5j bHVkZSA8bGludXgvaW5pdC5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tbS5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4NCj4gLQ0KPiAtI2luY2x1ZGUgPGFzbS9zZXR1cC5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC91YWNjZXNz Lmg+DQo+IC0jaW5jbHVkZSA8YXNtL2lycS5oPg0KPiAtI2luY2x1ZGUgPGFzbS9pby5oPg0K PiAgIA0KPiAgICNpbmNsdWRlIDxhc20vYXRhcmlody5oPg0KPiAgICNpbmNsdWRlIDxhc20v YXRhcmlpbnRzLmg+DQo+IC0jaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+DQo+IC0NCj4g LSNpbmNsdWRlIDxsaW51eC9mYi5oPg0KPiAgICNpbmNsdWRlIDxhc20vYXRhcmlrYi5oPg0K PiArI2luY2x1ZGUgPGFzbS9hdGFyaV9zdHJhbS5oPg0KPiArI2luY2x1ZGUgPGFzbS9pby5o Pg0KPiArI2luY2x1ZGUgPGFzbS9pcnEuaD4NCj4gKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4N Cj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19zdGF0 ZV9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPg0KPiArI2lu Y2x1ZGUgPGRybS9kcm1fZGFtYWdlX2hlbHBlci5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1f ZHJ2Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4NCj4gKyNpbmNsdWRl IDxkcm0vZHJtX2ZiZGV2X2dlbmVyaWMuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUu aD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Zvcm1hdF9oZWxwZXIuaD4NCj4gKyNpbmNsdWRl IDxkcm0vZHJtX2ZvdXJjYy5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fZnJhbWVidWZmZXIu aD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5j bHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9pb2N0 bC5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1fbWFuYWdlZC5oPg0KPiArI2luY2x1ZGUgPGRy bS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oPg0KPiArI2luY2x1ZGUgPGRybS9kcm1f bW9kZXMuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPg0KPiArI2lu Y2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4NCg0KSSdkIHByZWZlciB0byBu b3QgYWRkIG5ldyBzaW1wbGUtS01TIGRyaXZlcnMgdG8gRFJNLiBJIGZvdW5kIHRoYXQgdGhl c2UgDQpoZWxwZXJzIGFkZCBsaXR0bGUgdmFsdWUgYW5kIHJlcXVpcmUgYWRkaXRpb25hbCBj b2RlIGluIG90aGVyIHBsYWNlcyBvZiANCkRSTS4gQnV0IHVzaW5nIHJlZ3VsYXIgYXRvbWlj IGhlbHBlcnMgaXMgbm90IGEgcmVxdWlyZW1lbnQuDQoNCj4gKyNpbmNsdWRlIDxkcm0vZHJt X3ZibGFuay5oPg0KPiArDQo+ICsjaW5jbHVkZSAiLi4vLi4vLi4vdmlkZW8vZmJkZXYvYzJw LmgiDQo+ICsjaW5jbHVkZSAiLi4vLi4vLi4vdmlkZW8vZmJkZXYvYzJwX2NvcmUuaCINCg0K VGhlc2UgaW5jbHVkZSBzdGF0ZW1lbnRzIGFyZSBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEu IEkgc3VnZ2VzdCB0byBtb3ZlIA0KdGhlIGhlYWRlcnMgYW5kIGNvZGUgaW50byBkcml2ZXJz L3ZpZGVvIGFuZCBzaGFyZSBpdCBhbW9uZyB0aGUgdmFyaW91cyANCmRyaXZlcnMuDQoNCkFG QUlVIHRoZSBjb2RlIGlzIGFib3V0IGZvcm1hdCBjb252ZXJzaW9uLiBTbyBpbiB0aGUgbG9u ZyB0ZXJtLCB3ZSBtYXkgDQp3YW50IHRvIGhhdmUgRFJNIGZvcm1hdCBjb252ZXJzaW9uIGhl bHBlcnMgZm9yIHRoaXMuDQoNCj4gICANCj4gLSNpbmNsdWRlICJjMnAuaCINCj4gLSNpbmNs dWRlICJhdGFmYi5oIg0KPiArI2RlZmluZSBBVEFGQl9UVA0KPiArI2RlZmluZSBBVEFGQl9T VEUNCj4gKyNkZWZpbmUgQVRBRkJfRVhUDQo+ICsjZGVmaW5lIEFUQUZCX0ZBTENPTg0KPiAg IA0KPiAgICNkZWZpbmUgU1dJVENIX0FDSUEgMHgwMQkJLyogbW9kZXMgZm9yIHN3aXRjaCBv biBPdmVyU2NhbiAqLw0KPiAgICNkZWZpbmUgU1dJVENIX1NORDYgMHg0MA0KPiAgICNkZWZp bmUgU1dJVENIX1NORDcgMHg4MA0KPiAgICNkZWZpbmUgU1dJVENIX05PTkUgMHgwMA0KPiAg IA0KPiArI2RlZmluZSBEUklWRVJfTkFNRSAiYXRhcmlfZHJtIg0KPiArDQo+ICsvLyBGSVhN RSBXaXRob3V0IHJvdW5kaW5nCQkJCQkJV2l0aCByb3VuZGluZw0KPiArLy8gRklYTUUgMTI1 ODgga0h6ID0+IDc5NDQwIHBzCQkJCQkJMTI1ODgga0h6ID0+IDc5NDQxIHBzDQo+ICsvLyBG SVhNRSBmYWxjb25fZW5jb2RlX3ZhciBjaGFuZ2VkIHBpeGNsb2NrIGZyb20gNzk0NDAgdG8g Nzk0NDIJCS4uLiBmcm9tIDc5NDQxIHRvIDc5NDQyDQo+ICsvLyBGSVhNRSA3OTQ0MiBwcyA9 PiAxMjU4NyBrSHoJCQkJCQk3OTQ0MiBwcyA9PiAxMjU4OCBrSHoNCj4gKy8vIEZJWE1FIDEy NTg3IGtIeiA9PiA3OTQ0NyBwcyA9PiBGQUlMDQo+ICsjdW5kZWYgUElDT1MyS0haDQo+ICsj dW5kZWYgS0haMlBJQ09TDQo+ICsjZGVmaW5lIFBJQ09TMktIWihhKSBESVZfUk9VTkRfQ0xP U0VTVCgxMDAwMDAwMDAwVUwsIChhKSkNCj4gKyNkZWZpbmUgS0haMlBJQ09TKGEpIERJVl9S T1VORF9DTE9TRVNUKDEwMDAwMDAwMDBVTCwgKGEpKQ0KPiAgIA0KPiAgIHN0YXRpYyBpbnQg ZGVmYXVsdF9wYXI7CQkvKiBkZWZhdWx0IHJlc29sdXRpb24gKDA9bm9uZSkgKi8NCj4gICAN Cj4gQEAgLTEyMyw3ICsxMjEsNiBAQCBzdGF0aWMgc3RydWN0IGF0YWZiX3BhciB7DQo+ICAg CQkJc2hvcnQgbW9ubzsNCj4gICAJCQlzaG9ydCBzdGVfbW9kZTsNCj4gICAJCQlzaG9ydCBi cHA7DQo+IC0JCQl1MzIgcHNldWRvX3BhbGV0dGVbMTZdOw0KPiAgIAkJfSBmYWxjb247DQo+ ICAgI2VuZGlmDQo+ICAgCQkvKiBOb3RoaW5nIG5lZWRlZCBmb3IgZXh0ZXJuYWwgbW9kZSAq Lw0KPiBAQCAtMjM2LDY0ICsyMzMsMjQgQEAgc3RhdGljIGludCAqTVYzMDBfcmVnID0gTVYz MDBfcmVnXzhiaXQ7DQo+ICAgI2VuZGlmIC8qIEFUQUZCX0VYVCAqLw0KPiAgIA0KPiAgIA0K PiAtLyoNCj4gLSAqIHN0cnVjdCBmYl9vcHMgew0KPiAtICoJKiBvcGVuL3JlbGVhc2UgYW5k IHVzYWdlIG1hcmtpbmcNCj4gLSAqCXN0cnVjdCBtb2R1bGUgKm93bmVyOw0KPiAtICoJaW50 ICgqZmJfb3Blbikoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKTsNCj4gLSAqCWlu dCAoKmZiX3JlbGVhc2UpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcik7DQo+IC0g Kg0KPiAtICoJKiBGb3IgZnJhbWVidWZmZXJzIHdpdGggc3RyYW5nZSBub24gbGluZWFyIGxh eW91dHMgb3IgdGhhdCBkbyBub3QNCj4gLSAqCSogd29yayB3aXRoIG5vcm1hbCBtZW1vcnkg bWFwcGVkIGFjY2Vzcw0KPiAtICoJc3NpemVfdCAoKmZiX3JlYWQpKHN0cnVjdCBmaWxlICpm aWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7DQo+ IC0gKglzc2l6ZV90ICgqZmJfd3JpdGUpKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFy IF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7DQo+IC0gKg0KPiAt ICoJKiBjaGVja3MgdmFyIGFuZCBldmVudHVhbGx5IHR3ZWFrcyBpdCB0byBzb21ldGhpbmcg c3VwcG9ydGVkLA0KPiAtICoJKiBET0VTIE5PVCBNT0RJRlkgUEFSICoNCj4gLSAqCWludCAo KmZiX2NoZWNrX3Zhcikoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBm Yl9pbmZvICppbmZvKTsNCj4gLSAqDQo+IC0gKgkqIHNldCB0aGUgdmlkZW8gbW9kZSBhY2Nv cmRpbmcgdG8gaW5mby0+dmFyICoNCj4gLSAqCWludCAoKmZiX3NldF9wYXIpKHN0cnVjdCBm Yl9pbmZvICppbmZvKTsNCj4gLSAqDQo+IC0gKgkqIHNldCBjb2xvciByZWdpc3RlciAqDQo+ IC0gKglpbnQgKCpmYl9zZXRjb2xyZWcpKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQg aW50IHJlZCwgdW5zaWduZWQgaW50IGdyZWVuLA0KPiAtICoJCQkgICAgdW5zaWduZWQgaW50 IGJsdWUsIHVuc2lnbmVkIGludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsNCj4g LSAqDQo+IC0gKgkqIHNldCBjb2xvciByZWdpc3RlcnMgaW4gYmF0Y2ggKg0KPiAtICoJaW50 ICgqZmJfc2V0Y21hcCkoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICpp bmZvKTsNCj4gLSAqDQo+IC0gKgkqIGJsYW5rIGRpc3BsYXkgKg0KPiAtICoJaW50ICgqZmJf YmxhbmspKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pOw0KPiAtICoNCj4gLSAq CSogcGFuIGRpc3BsYXkgKg0KPiAtICoJaW50ICgqZmJfcGFuX2Rpc3BsYXkpKHN0cnVjdCBm Yl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7DQo+IC0gKg0K PiAtICoJKioqIFRoZSBtZWF0IG9mIHRoZSBkcmF3aW5nIGVuZ2luZSAqKioNCj4gLSAqCSog RHJhd3MgYSByZWN0YW5nbGUgKg0KPiAtICoJdm9pZCAoKmZiX2ZpbGxyZWN0KSAoc3RydWN0 IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7DQo+IC0g KgkqIENvcHkgZGF0YSBmcm9tIGFyZWEgdG8gYW5vdGhlciAqDQo+IC0gKgl2b2lkICgqZmJf Y29weWFyZWEpIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlh cmVhICpyZWdpb24pOw0KPiAtICoJKiBEcmF3cyBhIGltYWdlIHRvIHRoZSBkaXNwbGF5ICoN Cj4gLSAqCXZvaWQgKCpmYl9pbWFnZWJsaXQpIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29u c3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSk7DQo+IC0gKg0KPiAtICoJKiBEcmF3cyBjdXJz b3IgKg0KPiAtICoJaW50ICgqZmJfY3Vyc29yKSAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0 cnVjdCBmYl9jdXJzb3IgKmN1cnNvcik7DQo+IC0gKg0KPiAtICoJKiB3YWl0IGZvciBibGl0 IGlkbGUsIG9wdGlvbmFsICoNCj4gLSAqCWludCAoKmZiX3N5bmMpKHN0cnVjdCBmYl9pbmZv ICppbmZvKTsNCj4gLSAqDQo+IC0gKgkqIHBlcmZvcm0gZmIgc3BlY2lmaWMgaW9jdGwgKG9w dGlvbmFsKSAqDQo+IC0gKglpbnQgKCpmYl9pb2N0bCkoc3RydWN0IGZiX2luZm8gKmluZm8s IHVuc2lnbmVkIGludCBjbWQsDQo+IC0gKgkJCXVuc2lnbmVkIGxvbmcgYXJnKTsNCj4gLSAq DQo+IC0gKgkqIEhhbmRsZSAzMmJpdCBjb21wYXQgaW9jdGwgKG9wdGlvbmFsKSAqDQo+IC0g KglpbnQgKCpmYl9jb21wYXRfaW9jdGwpKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25l ZCBpbnQgY21kLA0KPiAtICoJCQl1bnNpZ25lZCBsb25nIGFyZyk7DQo+IC0gKg0KPiAtICoJ KiBwZXJmb3JtIGZiIHNwZWNpZmljIG1tYXAgKg0KPiAtICoJaW50ICgqZmJfbW1hcCkoc3Ry dWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsNCj4gLSAq IH0gOw0KPiAtICovDQo+ICtzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSB7DQo+ICsJc3RydWN0 IGRybV9kZXZpY2UgZGV2Ow0KPiArCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSBw aXBlOw0KPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm47DQo+ICsJdW5zaWduZWQgaW50 IGJwcDsNCj4gKwl1bnNpZ25lZCBpbnQgcGl0Y2g7DQo+ICsJdW5zaWduZWQgaW50IGRlZm1v ZGU7DQo+ICsJLy8gRklYTUUgZ2xvYmFsIGZpZWxkcw0KPiArCXVuc2lnbmVkIGludCBuZXh0 X2JwcDsNCj4gK307DQo+ICsNCj4gKy8vIEZJWE1FIHBhc3MgYXRhcmlfZHJtIHRvIGFsbCBm dW5jdGlvbnMgdGhhdCB1c2UgYXRhcmlfZHJtX2Zyb21fZGV2KCk/DQo+ICsjZGVmaW5lIGF0 YXJpX2RybV9mcm9tX2RldihfZGV2KQlcDQo+ICsJY29udGFpbmVyX29mKF9kZXYsIHN0cnVj dCBhdGFyaV9kcm1fZGV2aWNlLCBkZXYpDQo+ICsjZGVmaW5lIGF0YXJpX2RybV9mcm9tX3Bp cGUoX3BpcGUpCVwNCj4gKwljb250YWluZXJfb2YoX3BpcGUsIHN0cnVjdCBhdGFyaV9kcm1f ZGV2aWNlLCBwaXBlKQ0KPiArI2RlZmluZSBhdGFyaV9kcm1fZnJvbV9jb25uKF9jb25uKQlc DQo+ICsJY29udGFpbmVyX29mKF9jb25uLCBzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSwgY29u bikNCj4gICANCj4gICANCj4gICAvKiArK3JvbWFuOiBUaGlzIHN0cnVjdHVyZSBhYnN0cmFj dHMgZnJvbSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAoU1QoZSksDQo+IEBAIC0zMTEsNiAr MjY4LDkgQEAgc3RhdGljIGludCAqTVYzMDBfcmVnID0gTVYzMDBfcmVnXzhiaXQ7DQo+ICAg ICogICB2YWx1ZXMgaW4gdGhlICdwYXInIHN0cnVjdHVyZS4NCj4gICAgKiAhISEgT2Jzb2xl dGUsIHBlcmhhcHMgISEhDQo+ICAgICoNCj4gKyAqIGludCAoKmNvbmZpZ19pbml0KShzdHJ1 Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtKQ0KPiArICogICBGSVhNRQ0KPiArDQo+ ICAgICogaW50ICgqZGVjb2RlX3Zhcikoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIs DQo+ICAgICogICAgICAgICAgICAgICAgICAgc3RydWN0IGF0YWZiX3BhciAqcGFyKQ0KPiAg ICAqICAgR2V0IHRoZSB2aWRlbyBwYXJhbXMgb3V0IG9mICd2YXInLiBJZiBhIHZhbHVlIGRv ZXNuJ3QgZml0LCByb3VuZA0KPiBAQCAtMzQ4LDYgKzMwOCw3IEBAIHN0YXRpYyBzdHJ1Y3Qg ZmJfaHdzd2l0Y2ggew0KPiAgIAlpbnQgKCpkZXRlY3QpKHZvaWQpOw0KPiAgIAlpbnQgKCpl bmNvZGVfZml4KShzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwNCj4gICAJCQkgIHN0 cnVjdCBhdGFmYl9wYXIgKnBhcik7DQo+ICsJaW50ICgqY29uZmlnX2luaXQpKHN0cnVjdCBh dGFyaV9kcm1fZGV2aWNlICphdGFyaV9kcm0pOw0KPiAgIAlpbnQgKCpkZWNvZGVfdmFyKShz dHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwNCj4gICAJCQkgIHN0cnVjdCBhdGFmYl9w YXIgKnBhcik7DQo+ICAgCWludCAoKmVuY29kZV92YXIpKHN0cnVjdCBmYl92YXJfc2NyZWVu aW5mbyAqdmFyLA0KPiBAQCAtMzU1LDYgKzMxNiw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmJfaHdz d2l0Y2ggew0KPiAgIAl2b2lkICgqZ2V0X3Bhcikoc3RydWN0IGF0YWZiX3BhciAqcGFyKTsN Cj4gICAJdm9pZCAoKnNldF9wYXIpKHN0cnVjdCBhdGFmYl9wYXIgKnBhcik7DQo+ICAgCXZv aWQgKCpzZXRfc2NyZWVuX2Jhc2UpKHZvaWQgKnNfYmFzZSk7DQo+ICsJdm9pZCAoKnNldF9j b2xfcmVnKSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsDQo+ICsJCQkg ICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSk7DQo+ICAgCWludCAo KmJsYW5rKShpbnQgYmxhbmtfbW9kZSk7DQo+ICAgCWludCAoKnBhbl9kaXNwbGF5KShzdHJ1 Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwNCj4gICAJCQkgICBzdHJ1Y3QgZmJfaW5mbyAq aW5mbyk7DQo+IEBAIC00NTEsNzAgKzQxNCwzNSBAQCBzdGF0aWMgc3RydWN0IGZiX3Zhcl9z Y3JlZW5pbmZvIGF0YWZiX3ByZWRlZmluZWRbXSA9IHsNCj4gICANCj4gICBzdGF0aWMgaW50 IG51bV9hdGFmYl9wcmVkZWZpbmVkID0gQVJSQVlfU0laRShhdGFmYl9wcmVkZWZpbmVkKTsN Cj4gICANCj4gLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGF0YWZiX21vZGVkYltdIF9f aW5pdGRhdGEgPSB7DQo+IC0JLyoNCj4gLQkgKiAgQXRhcmkgVmlkZW8gTW9kZXMNCj4gLQkg Kg0KPiAtCSAqICBJZiB5b3UgY2hhbmdlIHRoZXNlLCBtYWtlIHN1cmUgdG8gdXBkYXRlIERF Rk1PREVfKiBhcyB3ZWxsIQ0KPiAtCSAqLw0KPiAtDQo+IC0JLyoNCj4gLQkgKiAgU1QvVFQg VmlkZW8gTW9kZXMNCj4gLQkgKi8NCj4gLQ0KPiAtCXsNCj4gLQkJLyogMzIweDIwMCwgMTUg a0h6LCA2MCBIeiAoU1QgbG93KSAqLw0KPiAtCQkic3QtbG93IiwgNjAsIDMyMCwgMjAwLCAz MjAwMCwgMzIsIDE2LCAzMSwgMTQsIDk2LCA0LA0KPiAtCQkwLCBGQl9WTU9ERV9OT05JTlRF UkxBQ0VEDQo+IC0JfSwgew0KPiAtCQkvKiA2NDB4MjAwLCAxNSBrSHosIDYwIEh6IChTVCBt ZWRpdW0pICovDQo+IC0JCSJzdC1taWQiLCA2MCwgNjQwLCAyMDAsIDMyMDAwLCAzMiwgMTYs IDMxLCAxNCwgOTYsIDQsDQo+IC0JCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQNCj4gLQl9 LCB7DQo+IC0JCS8qIDY0MHg0MDAsIDMwLjI1IGtIeiwgNjMuNSBIeiAoU1QgaGlnaCkgKi8N Cj4gLQkJInN0LWhpZ2giLCA2MywgNjQwLCA0MDAsIDMyMDAwLCAxMjgsIDAsIDQwLCAxNCwg MTI4LCA0LA0KPiAtCQkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEDQo+IC0JfSwgew0KPiAt CQkvKiAzMjB4NDgwLCAxNSBrSHosIDYwIEh6IChUVCBsb3cpICovDQo+IC0JCSJ0dC1sb3ci LCA2MCwgMzIwLCA0ODAsIDMxMDQxLCAxMjAsIDEwMCwgOCwgMTYsIDE0MCwgMzAsDQo+IC0J CTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQNCj4gLQl9LCB7DQo+IC0JCS8qIDY0MHg0ODAs IDI5IGtIeiwgNTcgSHogKFRUIG1lZGl1bSkgKi8NCj4gLQkJInR0LW1pZCIsIDYwLCA2NDAs IDQ4MCwgMzEwNDEsIDEyMCwgMTAwLCA4LCAxNiwgMTQwLCAzMCwNCj4gLQkJMCwgRkJfVk1P REVfTk9OSU5URVJMQUNFRA0KPiAtCX0sIHsNCj4gLQkJLyogMTI4MHg5NjAsIDcyIGtIeiwg NzIgSHogKFRUIGhpZ2gpICovDQo+IC0JCSJ0dC1oaWdoIiwgNzIsIDEyODAsIDk2MCwgNzc2 MCwgMjYwLCA2MCwgMzYsIDQsIDE5MiwgNCwNCj4gLQkJMCwgRkJfVk1PREVfTk9OSU5URVJM QUNFRA0KPiAtCX0sDQo+IC0NCj4gLQkvKg0KPiAtCSAqICBWR0EgVmlkZW8gTW9kZXMNCj4g LQkgKi8NCj4gLQ0KPiAtCXsNCj4gLQkJLyogNjQweDQ4MCwgMzEga0h6LCA2MCBIeiAoVkdB KSAqLw0KPiAtCQkidmdhIiwgNjAsIDY0MCwgNDgwLCAzOTcyMSwgNDIsIDE4LCAzMSwgMTEs IDEwMCwgMywNCj4gLQkJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRA0KPiAtCX0sIHsNCj4g LQkJLyogNjQweDQwMCwgMzEga0h6LCA3MCBIeiAoVkdBKSAqLw0KPiAtCQkidmdhNzAiLCA3 MCwgNjQwLCA0MDAsIDM5NzIxLCA0MiwgMTgsIDMxLCAxMSwgMTAwLCAzLA0KPiAtCQlGQl9T WU5DX1ZFUlRfSElHSF9BQ1QgfCBGQl9TWU5DX0NPTVBfSElHSF9BQ1QsIEZCX1ZNT0RFX05P TklOVEVSTEFDRUQNCj4gLQl9LA0KPiAtDQo+IC0JLyoNCj4gLQkgKiAgRmFsY29uIEhpUmVz IFZpZGVvIE1vZGVzDQo+IC0JICovDQo+IC0NCj4gLQl7DQo+IC0JCS8qIDg5Nng2MDgsIDMx IGtIeiwgNjAgSHogKEZhbGNvbiBIaWdoKSAqLw0KPiAtCQkiZmFsaCIsIDYwLCA4OTYsIDYw OCwgMzIwMDAsIDE4LCA0MiwgMzEsIDEsIDk2LDMsDQo+IC0JCTAsIEZCX1ZNT0RFX05PTklO VEVSTEFDRUQNCj4gLQl9LA0KPiArLy8gRklYTUUgMzIuMjE1OTA1IE1IeiBOVFNDDQo+ICsv LyBGSVhNRSAzMi4wODQ5ODggTUh6IFBBTA0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlIGF0YXJpX2RybV9tb2Rlc1tdID0gew0KPiArCXsgRFJNX01PREUoInN0 LWxvdyIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMjIxNiwgMzIwLCAzMzYsIDQzMiwgNDY0 LCAwLCAyMDAsIDIxNCwgMjE4LCAyNDksIDAsDQo+ICsJCSBEUk1fTU9ERV9GTEFHX05IU1lO QyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DIHwgRFJNX01PREVfRkxBR19OQ1NZTkMpIH0sDQo+ ICsJeyBEUk1fTU9ERSgic3QtbWlkIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDMyMjE2LCA2 NDAsIDY1NiwgNzUyLCA3ODQsIDAsIDIwMCwgMjE0LCAyMTgsIDI0OSwgMCwNCj4gKwkJIERS TV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMgfCBEUk1fTU9ERV9G TEFHX05DU1lOQykgfSwNCj4gKwl7IERSTV9NT0RFKCJzdC1oaWdoIiwgRFJNX01PREVfVFlQ RV9EUklWRVIsIDMyMjE2LCA2NDAsIDY0MCwgNzY4LCA4OTYsIDAsIDQwMCwgNDE0LCA0MTgs IDQ1OCwgMCwNCj4gKwkJIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19O VlNZTkMgfCBEUk1fTU9ERV9GTEFHX05DU1lOQykgfSwNCj4gKwl7IERSTV9NT0RFKCJ0dC1s b3ciLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzIyMTYsIDMyMCwgNDIwLCA1NjAsIDY4MCwg MCwgNDgwLCA0OTYsIDUyNiwgNTM0LCAwLA0KPiArCQkgRFJNX01PREVfRkxBR19OSFNZTkMg fCBEUk1fTU9ERV9GTEFHX05WU1lOQyB8IERSTV9NT0RFX0ZMQUdfTkNTWU5DKSB9LA0KPiAr CXsgRFJNX01PREUoInR0LW1pZCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMjIxNiwgNjQw LCA3NDAsIDg4MCwgMTAwMCwgMCwgNDgwLCA0OTYsIDUyNiwgNTM0LCAwLA0KPiArCQkgRFJN X01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQyB8IERSTV9NT0RFX0ZM QUdfTkNTWU5DKSB9LA0KPiArCS8vIE5vdCB1c2luZyB0dC1oaWdoIG1vZGU6IFZJUlRVQUxf WA0KPiArCXsgRFJNX01PREUoInR0LWhpZ2giLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTI4 ODY0LCAxMjgwLCAxMzQwLCAxNTMyLCAxNzkyLCAwLCA5NjAsIDk2NCwgOTY4LCAxMDA0LCAw LA0KPiArCQkgRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQyB8 IERSTV9NT0RFX0ZMQUdfTkNTWU5DKSB9LA0KPiArCXsgRFJNX01PREUoInZnYSIsIERSTV9N T0RFX1RZUEVfRFJJVkVSLCAyNTE3NiwgNjQwLCA2NTgsIDc1OCwgODAwLCAwLCA0ODAsIDQ5 MSwgNDk0LCA1MjUsIDAsDQo+ICsJCSBEUk1fTU9ERV9GTEFHX05IU1lOQyB8IERSTV9NT0RF X0ZMQUdfTlZTWU5DIHwgRFJNX01PREVfRkxBR19OQ1NZTkMpIH0sDQo+ICsJeyBEUk1fTU9E RSgidmdhNzAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjUxNzYsIDY0MCwgNjU4LCA3NTgs IDgwMCwgMCwgNDAwLCA0MTEsIDQxNCwgNDQ1LCAwLA0KPiArCQkgRFJNX01PREVfRkxBR19O SFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyB8IERSTV9NT0RFX0ZMQUdfUENTWU5DKSB9 LA0KPiArICAgICAgICB7IERSTV9NT0RFKCJxdmdhIiwgRFJNX01PREVfVFlQRV9EUklWRVIs IDEyNTg4LCAzMjAsIDMyOSwgMzc5LCA0MDAsIDAsIDI0MCwgMjQ1LCAyNDcsIDI2MiwgMCwN Cj4gKwkJIERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMgfCBE Uk1fTU9ERV9GTEFHX0RCTFNDQU4gfCBEUk1fTU9ERV9GTEFHX05DU1lOQykgfSwNCj4gKwl7 IERSTV9NT0RFKCJodmdhIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDEyNTg4LCAzMjAsIDMy OSwgMzc5LCA0MDAsIDAsIDQ4MCwgNDkxLCA0OTQsIDUyNSwgMCwNCj4gKwkJIERSTV9NT0RF X0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMgfCBEUk1fTU9ERV9GTEFHX05D U1lOQykgfSwNCj4gKwkvLyBOb3QgdXNpbmcgZmFsaCBtb2RlOiBWSVJUVUFMX1gNCj4gKwl7 IERSTV9NT0RFKCJmYWxoIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDMxMjUwLCA4OTYsIDkz OCwgMTAzNCwgMTA1MiwgMCwgNjA4LCA2MDksIDYxMiwgNjQzLCAwLA0KPiArCQkgRFJNX01P REVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQyB8IERSTV9NT0RFX0ZMQUdf TkNTWU5DKSB9LA0KPiAgIH07DQo+ICAgDQo+IC0jZGVmaW5lIE5VTV9UT1RBTF9NT0RFUyAg QVJSQVlfU0laRShhdGFmYl9tb2RlZGIpDQo+IC0NCj4gICBzdGF0aWMgY2hhciAqbW9kZV9v cHRpb24gX19pbml0ZGF0YSA9IE5VTEw7DQo+ICAgDQo+ICAgIC8qIGRlZmF1bHQgbW9kZXMg Ki8NCj4gQEAgLTU0Niw3ICs0NzQsNiBAQCBzdGF0aWMgaW50IGdldF92aWRlb19tb2RlKGNo YXIgKnZuYW1lKQ0KPiAgIH0NCj4gICANCj4gICANCj4gLQ0KPiAgIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0gVFQgc3BlY2lmaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8NCj4gICANCj4gICAjaWZkZWYgQVRBRkJfVFQNCj4gQEAgLTU3Niw2ICs1MDMsMjYgQEAg c3RhdGljIGludCB0dF9lbmNvZGVfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4 LCBzdHJ1Y3QgYXRhZmJfcGFyICpwYXIpDQo+ICAgCXJldHVybiAwOw0KPiAgIH0NCj4gICAN Cj4gK3N0YXRpYyBpbnQgdHRfY29uZmlnX2luaXQoc3RydWN0IGF0YXJpX2RybV9kZXZpY2Ug KmF0YXJpX2RybSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmF0YXJp X2RybS0+ZGV2Ow0KPiArDQo+ICsJaWYgKG1vbm9fbW9uaSkgew0KPiArCQlkZXYtPm1vZGVf Y29uZmlnLm1pbl93aWR0aCA9IDA7DQo+ICsJCWRldi0+bW9kZV9jb25maWcubWluX2hlaWdo dCA9IDA7DQo+ICsJCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gc3R0dF94cmVzICog MjsNCj4gKwkJZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gdHRfeXJlcyAqIDI7DQo+ ICsJCWRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoID0gMTsNCj4gKwl9IGVsc2Ug ew0KPiArCQlkZXYtPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDA7DQo+ICsJCWRldi0+bW9k ZV9jb25maWcubWluX2hlaWdodCA9IDA7DQo+ICsJCWRldi0+bW9kZV9jb25maWcubWF4X3dp ZHRoID0gc3R0dF94cmVzOw0KPiArCQlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSB0 dF95cmVzOw0KPiArCQlkZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9kZXB0aCA9IDQ7DQo+ ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICAgc3RhdGljIGludCB0dF9kZWNv ZGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgYXRhZmJfcGFy ICpwYXIpDQo+ICAgew0KPiAgIAlpbnQgeHJlcyA9IHZhci0+eHJlczsNCj4gQEAgLTc2Niwy MCArNzEzLDE4IEBAIHN0YXRpYyB2b2lkIHR0X3NldF9wYXIoc3RydWN0IGF0YWZiX3BhciAq cGFyKQ0KPiAgIAkJZmJody0+c2V0X3NjcmVlbl9iYXNlKHBhci0+c2NyZWVuX2Jhc2UpOw0K PiAgIH0NCj4gICANCj4gLXN0YXRpYyBpbnQgdHRfc2V0Y29scmVnKHVuc2lnbmVkIGludCBy ZWdubywgdW5zaWduZWQgaW50IHJlZCwNCj4gLQkJCXVuc2lnbmVkIGludCBncmVlbiwgdW5z aWduZWQgaW50IGJsdWUsDQo+IC0JCQl1bnNpZ25lZCBpbnQgdHJhbnNwLCBzdHJ1Y3QgZmJf aW5mbyAqaW5mbykNCj4gK3N0YXRpYyB2b2lkIHR0X3NldF9jb2xfcmVnKHVuc2lnbmVkIGlu dCByZWdubywgdW5zaWduZWQgaW50IHJlZCwNCj4gKwkJCSAgIHVuc2lnbmVkIGludCBncmVl biwgdW5zaWduZWQgaW50IGJsdWUpDQo+ICAgew0KPiAgIAlpZiAoKHNoaWZ0ZXJfdHQudHRf c2hpZnRtb2RlICYgVFRfU0hJRlRFUl9NT0RFTUFTSykgPT0gVFRfU0hJRlRFUl9TVEhJR0gp DQo+ICAgCQlyZWdubyArPSAyNTQ7DQo+ICAgCWlmIChyZWdubyA+IDI1NSkNCj4gLQkJcmV0 dXJuIDE7DQo+ICsJCXJldHVybjsNCj4gICAJdHRfcGFsZXR0ZVtyZWdub10gPSAoKChyZWQg Pj4gMTIpIDw8IDgpIHwgKChncmVlbiA+PiAxMikgPDwgNCkgfA0KPiAgIAkJCSAgICAgKGJs dWUgPj4gMTIpKTsNCj4gICAJaWYgKChzaGlmdGVyX3R0LnR0X3NoaWZ0bW9kZSAmIFRUX1NI SUZURVJfTU9ERU1BU0spID09DQo+ICAgCSAgICBUVF9TSElGVEVSX1NUSElHSCAmJiByZWdu byA9PSAyNTQpDQo+ICAgCQl0dF9wYWxldHRlWzBdID0gMDsNCj4gLQlyZXR1cm4gMDsNCj4g ICB9DQo+ICAgDQo+ICAgc3RhdGljIGludCB0dF9kZXRlY3Qodm9pZCkNCj4gQEAgLTg3Nyw2 ICs4MjIsMTggQEAgc3RhdGljIGludCBmYWxjb25fZW5jb2RlX2ZpeChzdHJ1Y3QgZmJfZml4 X3NjcmVlbmluZm8gKmZpeCwNCj4gICAJcmV0dXJuIDA7DQo+ICAgfQ0KPiAgIA0KPiArc3Rh dGljIGludCBmYWxjb25fY29uZmlnX2luaXQoc3RydWN0IGF0YXJpX2RybV9kZXZpY2UgKmF0 YXJpX2RybSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmF0YXJpX2Ry bS0+ZGV2Ow0KPiArDQo+ICsJZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSAzMjA7DQo+ ICsJZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gMjAwOw0KPiArCWRldi0+bW9kZV9j b25maWcubWF4X3dpZHRoID0gNjQwOwkvLyBGSVhNRSA4OTY7DQo+ICsJZGV2LT5tb2RlX2Nv bmZpZy5tYXhfaGVpZ2h0ID0gNDgwOwkvLyBGSVhNRSA2MDg7DQo+ICsJZGV2LT5tb2RlX2Nv bmZpZy5wcmVmZXJyZWRfZGVwdGggPSA0Ow0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICAgc3RhdGljIGludCBmYWxjb25fZGVjb2RlX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmlu Zm8gKnZhciwNCj4gICAJCQkgICAgIHN0cnVjdCBhdGFmYl9wYXIgKnBhcikNCj4gICB7DQo+ IEBAIC0xMjUzLDYgKzEyMTAsOSBAQCBzdGF0aWMgaW50IGZhbGNvbl9kZWNvZGVfdmFyKHN0 cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLA0KPiAgIAkJZ290byBhZ2FpbjsNCj4gICAJ fQ0KPiAgIAlpZiAoaGZyZXEgPiBmYl9pbmZvLm1vbnNwZWNzLmhmbWF4IHx8IGhmcmVxIDwg ZmJfaW5mby5tb25zcGVjcy5oZm1pbikNCj4gKy8vIEZJWE1FIGF0YXJpX2RybV9waXBlX21v ZGVfZml4dXA6ICJodmdhIjogNjMgMTI1ODggMzIwIDM0MSAzOTEgNDAwIDQ4MCA0OTYgNDk4 IDUwMyAweDQwIDB4MTBhDQo+ICsvLyBGSVhNRSBmYWxjb25fZGVjb2RlX3ZhcjoxMzE2OiBo ZnJlcSAyMDAwMCBvdXQtb2YtcmFuZ2UNCj4gKy8vIEZJWE1FIDMyMHg0ODAgdmlydCAzMjB4 MTk0NSBvZmYgMCwwIGJwcCA0IGdyYXkgMCByZWQgMC80LzAgZ3JlZW4gMC80LzAgYmx1ZSAw LzQvMCB0cmFuc3AgMC8wLzAgbm9uc3RkIDAgYWN0IDAgMHgwbW0gYWNjZWxfZmxhZ3MgMHgw IHBpeGNsb2NrIDc5NDQ3IG1hcmdpbnMgOS8yMS81LzE2IHN5bmMgNTAvMi8wIHZtb2RlIDAg cm90YXRlIDAgY29sb3JzcGFjZSAweDANCj4gICAJCXJldHVybiAtRUlOVkFMOw0KPiAgIA0K PiAgIAkvKiBWeHgtcmVnaXN0ZXJzICovDQo+IEBAIC0xNTcxLDkgKzE1MzEsMTIgQEAgc3Rh dGljIHZvaWQgZmFsY29uX3NldF9wYXIoc3RydWN0IGF0YWZiX3BhciAqcGFyKQ0KPiAgIAlm X2NoYW5nZV9tb2RlID0gMTsNCj4gICB9DQo+ICAgDQo+IC1zdGF0aWMgaXJxcmV0dXJuX3Qg ZmFsY29uX3ZibF9zd2l0Y2hlcihpbnQgaXJxLCB2b2lkICpkdW1teSkNCj4gK3N0YXRpYyBp bnQgZl92YmxhbmtfZW5hYmxlZDsJLy8gRklYTUUNCj4gKw0KPiArc3RhdGljIGlycXJldHVy bl90IGZhbGNvbl92Ymxfc3dpdGNoZXIoaW50IGlycSwgdm9pZCAqZGV2KQ0KPiAgIHsNCj4g ICAJc3RydWN0IGZhbGNvbl9odyAqaHcgPSAmZl9uZXdfbW9kZTsNCj4gKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBkZXY7DQo+ICAgDQo+ICAgCWlmIChmX2NoYW5nZV9tb2RlKSB7DQo+ ICAgCQlmX2NoYW5nZV9tb2RlID0gMDsNCj4gQEAgLTE2MjYsNiArMTU4OSwxNCBAQCBzdGF0 aWMgaXJxcmV0dXJuX3QgZmFsY29uX3ZibF9zd2l0Y2hlcihpbnQgaXJxLCB2b2lkICpkdW1t eSkNCj4gICAJCXZpZGVsLnhvZmZzZXQgPSBjdXJyZW50X3Bhci5ody5mYWxjb24ueG9mZnNl dDsNCj4gICAJCXNoaWZ0ZXJfZjAzMC5vZmZfbmV4dCA9IGN1cnJlbnRfcGFyLmh3LmZhbGNv bi5saW5lX29mZnNldDsNCj4gICAJfQ0KPiArDQo+ICsJaWYgKGZfdmJsYW5rX2VuYWJsZWQp DQo+ICsJCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoY3J0Yyk7DQo+ICsJaWYgKGNydGMtPnN0 YXRlICYmIGNydGMtPnN0YXRlLT5ldmVudCkgew0KPiArCQlkcm1fY3J0Y19zZW5kX3ZibGFu a19ldmVudChjcnRjLCBjcnRjLT5zdGF0ZS0+ZXZlbnQpOw0KPiArCQljcnRjLT5zdGF0ZS0+ ZXZlbnQgPSBOVUxMOw0KPiArCX0NCj4gKw0KPiAgIAlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ ICAgfQ0KPiAgIA0KPiBAQCAtMTY2MSwxMiArMTYzMiwxMiBAQCBzdGF0aWMgaW50IGZhbGNv bl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwNCj4gICAJcmV0 dXJuIDA7DQo+ICAgfQ0KPiAgIA0KPiAtc3RhdGljIGludCBmYWxjb25fc2V0Y29scmVnKHVu c2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwNCj4gLQkJCSAgICB1bnNpZ25l ZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLA0KPiAtCQkJICAgIHVuc2lnbmVkIGlu dCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPiArc3RhdGljIHZvaWQgZmFsY29u X3NldF9jb2xfcmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwNCj4g KwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlKQ0KPiAg IHsNCj4gICAJaWYgKHJlZ25vID4gMjU1KQ0KPiAtCQlyZXR1cm4gMTsNCj4gKwkJcmV0dXJu Ow0KPiArDQo+ICAgCWYwMzBfY29sW3JlZ25vXSA9ICgoKHJlZCAmIDB4ZmMwMCkgPDwgMTYp IHwNCj4gICAJCQkgICAoKGdyZWVuICYgMHhmYzAwKSA8PCA4KSB8DQo+ICAgCQkJICAgKChi bHVlICYgMHhmYzAwKSA+PiA4KSk7DQo+IEBAIC0xNjc1LDExICsxNjQ2LDcgQEAgc3RhdGlj IGludCBmYWxjb25fc2V0Y29scmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50 IHJlZCwNCj4gICAJCQkoKCgocmVkICYgMHhlMDAwKSA+PiAxMykgICB8ICgocmVkICYgMHgx MDAwKSA+PiAxMikpIDw8IDgpICAgfA0KPiAgIAkJCSgoKChncmVlbiAmIDB4ZTAwMCkgPj4g MTMpIHwgKChncmVlbiAmIDB4MTAwMCkgPj4gMTIpKSA8PCA0KSB8DQo+ICAgCQkJICAgKChi bHVlICYgMHhlMDAwKSA+PiAxMykgfCAoKGJsdWUgJiAweDEwMDApID4+IDEyKTsNCj4gLQkJ KCh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gKChyZWQgJiAweGY4MDAp IHwNCj4gLQkJCQkJCSAgICAgICAoKGdyZWVuICYgMHhmYzAwKSA+PiA1KSB8DQo+IC0JCQkJ CQkgICAgICAgKChibHVlICYgMHhmODAwKSA+PiAxMSkpOw0KPiAgIAl9DQo+IC0JcmV0dXJu IDA7DQo+ICAgfQ0KPiAgIA0KPiAgIHN0YXRpYyBpbnQgZmFsY29uX2JsYW5rKGludCBibGFu a19tb2RlKQ0KPiBAQCAtMTc5NSw2ICsxNzYyLDE4IEBAIHN0YXRpYyBpbnQgc3RzdGVfZW5j b2RlX2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwNCj4gICAJcmV0dXJuIDA7 DQo+ICAgfQ0KPiAgIA0KPiArc3RhdGljIGludCBzdHN0ZV9jb25maWdfaW5pdChzdHJ1Y3Qg YXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSAmYXRhcmlfZHJtLT5kZXY7DQo+ICsNCj4gKwlkZXYtPm1vZGVfY29uZmln Lm1pbl93aWR0aCA9IDA7DQo+ICsJZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gMDsN Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IHN0dHRfeHJlczsNCj4gKwlkZXYt Pm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBzdF95cmVzOw0KPiArCWRldi0+bW9kZV9jb25m aWcucHJlZmVycmVkX2RlcHRoID0gbW9ub19tb25pID8gMSA6IDQ7DQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gICBzdGF0aWMgaW50IHN0c3RlX2RlY29kZV92YXIoc3RydWN0IGZi X3Zhcl9zY3JlZW5pbmZvICp2YXIsDQo+ICAgCQkJICAgIHN0cnVjdCBhdGFmYl9wYXIgKnBh cikNCj4gICB7DQo+IEBAIC0xOTQ5LDEyICsxOTI4LDExIEBAIHN0YXRpYyB2b2lkIHN0c3Rl X3NldF9wYXIoc3RydWN0IGF0YWZiX3BhciAqcGFyKQ0KPiAgIAkJZmJody0+c2V0X3NjcmVl bl9iYXNlKHBhci0+c2NyZWVuX2Jhc2UpOw0KPiAgIH0NCj4gICANCj4gLXN0YXRpYyBpbnQg c3RzdGVfc2V0Y29scmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwN Cj4gLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsDQo+IC0J CQkgICB1bnNpZ25lZCBpbnQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykNCj4gK3N0 YXRpYyB2b2lkIHN0c3RlX3NldF9jb2xfcmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWdu ZWQgaW50IHJlZCwNCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQg aW50IGJsdWUpDQo+ICAgew0KPiAgIAlpZiAocmVnbm8gPiAxNSkNCj4gLQkJcmV0dXJuIDE7 DQo+ICsJCXJldHVybjsNCj4gICAJcmVkID4+PSAxMjsNCj4gICAJYmx1ZSA+Pj0gMTI7DQo+ ICAgCWdyZWVuID4+PSAxMjsNCj4gQEAgLTE5NjgsNyArMTk0Niw2IEBAIHN0YXRpYyBpbnQg c3RzdGVfc2V0Y29scmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwN Cj4gICAJCQkoKHJlZCAmIDB4ZSkgPDwgNykgfA0KPiAgIAkJCSgoZ3JlZW4gJiAweGUpIDw8 IDMpIHwNCj4gICAJCQkoKGJsdWUgJiAweGUpID4+IDEpOw0KPiAtCXJldHVybiAwOw0KPiAg IH0NCj4gICANCj4gICBzdGF0aWMgaW50IHN0c3RlX2RldGVjdCh2b2lkKQ0KPiBAQCAtMjEx Miw2ICsyMDg5LDE5IEBAIHN0YXRpYyBpbnQgZXh0X2VuY29kZV9maXgoc3RydWN0IGZiX2Zp eF9zY3JlZW5pbmZvICpmaXgsIHN0cnVjdCBhdGFmYl9wYXIgKnBhcikNCj4gICAJcmV0dXJu IDA7DQo+ICAgfQ0KPiAgIA0KPiArc3RhdGljIGludCBleHRfY29uZmlnX2luaXQoc3RydWN0 IGF0YXJpX2RybV9kZXZpY2UgKmF0YXJpX2RybSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZmJfdmFy X3NjcmVlbmluZm8gKm15dmFyID0gJmF0YWZiX3ByZWRlZmluZWRbMF07DQo+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9ICZhdGFyaV9kcm0tPmRldjsNCj4gKw0KPiArCWRldi0+bW9k ZV9jb25maWcubWluX3dpZHRoID0gMDsNCj4gKwlkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWln aHQgPSAwOw0KPiArCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gbXl2YXItPnhyZXM7 DQo+ICsJZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gbXl2YXItPnlyZXM7DQo+ICsJ ZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGggPSBteXZhci0+Yml0c19wZXJfcGl4 ZWw7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gICBzdGF0aWMgaW50IGV4dF9kZWNv ZGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgYXRhZmJfcGFy ICpwYXIpDQo+ICAgew0KPiAgIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKm15dmFyID0g JmF0YWZiX3ByZWRlZmluZWRbMF07DQo+IEBAIC0yMTg3LDE3ICsyMTc3LDE2IEBAIHN0YXRp YyB2b2lkIGV4dF9zZXRfcGFyKHN0cnVjdCBhdGFmYl9wYXIgKnBhcikNCj4gICAJCXRtcCA9 IElOQigweDNkYSk7CQkJXA0KPiAgIAl9IHdoaWxlICgwKQ0KPiAgIA0KPiAtc3RhdGljIGlu dCBleHRfc2V0Y29scmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwN Cj4gLQkJCSB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLA0KPiAtCQkJ IHVuc2lnbmVkIGludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPiArc3RhdGlj IHZvaWQgZXh0X3NldF9jb2xfcmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50 IHJlZCwNCj4gKwkJCSAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVl KQ0KPiAgIHsNCj4gICAJdW5zaWduZWQgY2hhciBjb2xtYXNrID0gKDEgPDwgZXh0ZXJuYWxf Yml0c3BlcmNvbCkgLSAxOw0KPiAgIA0KPiAgIAlpZiAoIWV4dGVybmFsX3ZnYWlvYmFzZSkN Cj4gLQkJcmV0dXJuIDE7DQo+ICsJCXJldHVybjsNCj4gICANCj4gICAJaWYgKHJlZ25vID4g MjU1KQ0KPiAtCQlyZXR1cm4gMTsNCj4gKwkJcmV0dXJuOw0KPiAgIA0KPiAgIAlyZWQgPj49 IDg7DQo+ICAgCWdyZWVuID4+PSA4Ow0KPiBAQCAtMjIxMywxNiArMjIwMiwxNiBAQCBzdGF0 aWMgaW50IGV4dF9zZXRjb2xyZWcodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQg cmVkLA0KPiAgIAkJREFDRGVsYXk7DQo+ICAgCQlPVVRCKDB4M2M5LCBibHVlICYgY29sbWFz ayk7DQo+ICAgCQlEQUNEZWxheTsNCj4gLQkJcmV0dXJuIDA7DQo+ICsJCXJldHVybjsNCj4g ICANCj4gICAJY2FzZSBJU19NVjMwMDoNCj4gICAJCU9VVEIoKE1WMzAwX3JlZ1tyZWdub10g PDwgMikgKyAxLCByZWQpOw0KPiAgIAkJT1VUQigoTVYzMDBfcmVnW3JlZ25vXSA8PCAyKSAr IDEsIGdyZWVuKTsNCj4gICAJCU9VVEIoKE1WMzAwX3JlZ1tyZWdub10gPDwgMikgKyAxLCBi bHVlKTsNCj4gLQkJcmV0dXJuIDA7DQo+ICsJCXJldHVybjsNCj4gICANCj4gICAJZGVmYXVs dDoNCj4gLQkJcmV0dXJuIDE7DQo+ICsJCXJldHVybjsNCj4gICAJfQ0KPiAgIH0NCj4gICAN Cj4gQEAgLTIyNzUsMTEgKzIyNjQsMTMgQEAgc3RhdGljIGludCBwYW5fZGlzcGxheShzdHJ1 Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pDQo+ICAg c3RhdGljIHN0cnVjdCBmYl9od3N3aXRjaCB0dF9zd2l0Y2ggPSB7DQo+ICAgCS5kZXRlY3QJ CT0gdHRfZGV0ZWN0LA0KPiAgIAkuZW5jb2RlX2ZpeAk9IHR0X2VuY29kZV9maXgsDQo+ICsJ LmNvbmZpZ19pbml0CT0gdHRfY29uZmlnX2luaXQsDQo+ICAgCS5kZWNvZGVfdmFyCT0gdHRf ZGVjb2RlX3ZhciwNCj4gICAJLmVuY29kZV92YXIJPSB0dF9lbmNvZGVfdmFyLA0KPiAgIAku Z2V0X3Bhcgk9IHR0X2dldF9wYXIsDQo+ICAgCS5zZXRfcGFyCT0gdHRfc2V0X3BhciwNCj4g ICAJLnNldF9zY3JlZW5fYmFzZSA9IHNldF9zY3JlZW5fYmFzZSwNCj4gKwkuc2V0X2NvbF9y ZWcJPSB0dF9zZXRfY29sX3JlZywNCj4gICAJLnBhbl9kaXNwbGF5CT0gcGFuX2Rpc3BsYXks DQo+ICAgfTsNCj4gICAjZW5kaWYNCj4gQEAgLTIyODgsMTEgKzIyNzksMTMgQEAgc3RhdGlj IHN0cnVjdCBmYl9od3N3aXRjaCB0dF9zd2l0Y2ggPSB7DQo+ICAgc3RhdGljIHN0cnVjdCBm Yl9od3N3aXRjaCBmYWxjb25fc3dpdGNoID0gew0KPiAgIAkuZGV0ZWN0CQk9IGZhbGNvbl9k ZXRlY3QsDQo+ICAgCS5lbmNvZGVfZml4CT0gZmFsY29uX2VuY29kZV9maXgsDQo+ICsJLmNv bmZpZ19pbml0CT0gZmFsY29uX2NvbmZpZ19pbml0LA0KPiAgIAkuZGVjb2RlX3Zhcgk9IGZh bGNvbl9kZWNvZGVfdmFyLA0KPiAgIAkuZW5jb2RlX3Zhcgk9IGZhbGNvbl9lbmNvZGVfdmFy LA0KPiAgIAkuZ2V0X3Bhcgk9IGZhbGNvbl9nZXRfcGFyLA0KPiAgIAkuc2V0X3Bhcgk9IGZh bGNvbl9zZXRfcGFyLA0KPiAgIAkuc2V0X3NjcmVlbl9iYXNlID0gc2V0X3NjcmVlbl9iYXNl LA0KPiArCS5zZXRfY29sX3JlZwk9IGZhbGNvbl9zZXRfY29sX3JlZywNCj4gICAJLmJsYW5r CQk9IGZhbGNvbl9ibGFuaywNCj4gICAJLnBhbl9kaXNwbGF5CT0gZmFsY29uX3Bhbl9kaXNw bGF5LA0KPiAgIH07DQo+IEBAIC0yMzAyLDExICsyMjk1LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qg ZmJfaHdzd2l0Y2ggZmFsY29uX3N3aXRjaCA9IHsNCj4gICBzdGF0aWMgc3RydWN0IGZiX2h3 c3dpdGNoIHN0X3N3aXRjaCA9IHsNCj4gICAJLmRldGVjdAkJPSBzdHN0ZV9kZXRlY3QsDQo+ ICAgCS5lbmNvZGVfZml4CT0gc3RzdGVfZW5jb2RlX2ZpeCwNCj4gKwkuY29uZmlnX2luaXQJ PSBzdHN0ZV9jb25maWdfaW5pdCwNCj4gICAJLmRlY29kZV92YXIJPSBzdHN0ZV9kZWNvZGVf dmFyLA0KPiAgIAkuZW5jb2RlX3Zhcgk9IHN0c3RlX2VuY29kZV92YXIsDQo+ICAgCS5nZXRf cGFyCT0gc3RzdGVfZ2V0X3BhciwNCj4gICAJLnNldF9wYXIJPSBzdHN0ZV9zZXRfcGFyLA0K PiAgIAkuc2V0X3NjcmVlbl9iYXNlID0gc3RzdGVfc2V0X3NjcmVlbl9iYXNlLA0KPiArCS5z ZXRfY29sX3JlZwk9IHN0c3RlX3NldF9jb2xfcmVnLA0KPiAgIAkucGFuX2Rpc3BsYXkJPSBw YW5fZGlzcGxheQ0KPiAgIH07DQo+ICAgI2VuZGlmDQo+IEBAIC0yMzE1LDEwICsyMzEwLDEy IEBAIHN0YXRpYyBzdHJ1Y3QgZmJfaHdzd2l0Y2ggc3Rfc3dpdGNoID0gew0KPiAgIHN0YXRp YyBzdHJ1Y3QgZmJfaHdzd2l0Y2ggZXh0X3N3aXRjaCA9IHsNCj4gICAJLmRldGVjdAkJPSBl eHRfZGV0ZWN0LA0KPiAgIAkuZW5jb2RlX2ZpeAk9IGV4dF9lbmNvZGVfZml4LA0KPiArCS5j b25maWdfaW5pdAk9IGV4dF9jb25maWdfaW5pdCwNCj4gICAJLmRlY29kZV92YXIJPSBleHRf ZGVjb2RlX3ZhciwNCj4gICAJLmVuY29kZV92YXIJPSBleHRfZW5jb2RlX3ZhciwNCj4gICAJ LmdldF9wYXIJPSBleHRfZ2V0X3BhciwNCj4gICAJLnNldF9wYXIJPSBleHRfc2V0X3BhciwN Cj4gKwkuc2V0X2NvbF9yZWcJPSBleHRfc2V0X2NvbF9yZWcsDQo+ICAgfTsNCj4gICAjZW5k aWYNCg0KVGhpcyBkZXNpZ24gaXMgcHJvYmxlbWF0aWMuIEl0IHJlY3JlYXRlcyBmYmRldiBp bnRlcmZhY2VzIHdpdGhpbiBEUk0gYW5kIA0KbWFrZXMgaXQgdmVyeSBoYXJkIHRvIGNvbnZl cnQgdGhlIGRyaXZlciB0byBnb29kIERSTSBjb2RlLiBJIHN1Z2dlc3QgdG8gDQpicmFuY2gg YXQgdGhlIG91dGVyLW1vc3QgcG9pbnQgZm9yIGVhY2ggc3VwcG9ydGVkIG1vZGVsLiBTbyBl YWNoIG1vZGVsIA0KZWZmZWN0aXZlbHkgcmVjZWl2ZXMgaXQncyBvd24gbW9kZS1jb25maWcg cGlwZWxpbmUuIENvbW1vbiBjb2RlIGNhbiANCnN0aWxsIGJlIHNoYXJlZC4NCg0KRm9yIGEg Z29vZCBleGFtcGxlLCBJJ2QgcmVmZXIgdG8gdGhlIGxhdGVzdCBtZ2FnMjAwIGRyaXZlciwg d2hpY2ggDQppbXBsZW1lbnRzIHRoaXMgcGF0dGVybiBmb3IgdGhlIHZhcmlldHkgb2YgcmV2 aXNpb25zIG9mIGl0cyBoYXJkd2FyZS4NCg0KDQo+ICAgDQo+IEBAIC0yMzg2LDkgKzIzODMs NiBAQCBzdGF0aWMgaW50IGF0YWZiX2dldF92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZv ICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQ0KPiAgIAlyZXR1cm4gMDsNCj4gICB9DQo+ ICAgDQo+IC0vLyBObyBsb25nZXIgY2FsbGVkIGJ5IGZiY29uIQ0KPiAtLy8gU3RpbGwgY2Fs bGVkIGJ5IHNldF92YXIgaW50ZXJuYWxseQ0KPiAtDQo+ICAgc3RhdGljIHZvaWQgYXRhZmJf c2V0X2Rpc3Aoc3RydWN0IGZiX2luZm8gKmluZm8pDQo+ICAgew0KPiAgIAlhdGFmYl9nZXRf dmFyKCZpbmZvLT52YXIsIGluZm8pOw0KPiBAQCAtMjQwOCwxODkgKzI0MDIsNiBAQCBhdGFm Yl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZi X2luZm8gKmluZm8pDQo+ICAgCXJldHVybiBmYmh3LT5wYW5fZGlzcGxheSh2YXIsIGluZm8p Ow0KPiAgIH0NCj4gICANCj4gLS8qDQo+IC0gKiBnZW5lcmljIGRyYXdpbmcgcm91dGluZXM7 IGltYWdlYmxpdCBuZWVkcyB1cGRhdGluZyBmb3IgaW1hZ2UgZGVwdGggPiAxDQo+IC0gKi8N Cj4gLQ0KPiAtc3RhdGljIHZvaWQgYXRhZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmlu Zm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkNCj4gLXsNCj4gLQlzdHJ1Y3Qg YXRhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7DQo+IC0JaW50IHgyLCB5MjsNCj4gLQl1MzIg d2lkdGgsIGhlaWdodDsNCj4gLQ0KPiAtCWlmICghcmVjdC0+d2lkdGggfHwgIXJlY3QtPmhl aWdodCkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0jaWZkZWYgQVRBRkJfRkFMQ09ODQo+IC0J aWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNikgew0KPiAtCQljZmJfZmlsbHJl Y3QoaW5mbywgcmVjdCk7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0jZW5kaWYNCj4gLQ0K PiAtCS8qDQo+IC0JICogV2UgY291bGQgdXNlIGhhcmR3YXJlIGNsaXBwaW5nIGJ1dCBvbiBt YW55IGNhcmRzIHlvdSBnZXQgYXJvdW5kDQo+IC0JICogaGFyZHdhcmUgY2xpcHBpbmcgYnkg d3JpdGluZyB0byBmcmFtZWJ1ZmZlciBkaXJlY3RseS4NCj4gLQkgKiAqLw0KPiAtCXgyID0g cmVjdC0+ZHggKyByZWN0LT53aWR0aDsNCj4gLQl5MiA9IHJlY3QtPmR5ICsgcmVjdC0+aGVp Z2h0Ow0KPiAtCXgyID0geDIgPCBpbmZvLT52YXIueHJlc192aXJ0dWFsID8geDIgOiBpbmZv LT52YXIueHJlc192aXJ0dWFsOw0KPiAtCXkyID0geTIgPCBpbmZvLT52YXIueXJlc192aXJ0 dWFsID8geTIgOiBpbmZvLT52YXIueXJlc192aXJ0dWFsOw0KPiAtCXdpZHRoID0geDIgLSBy ZWN0LT5keDsNCj4gLQloZWlnaHQgPSB5MiAtIHJlY3QtPmR5Ow0KPiAtDQo+IC0JaWYgKGlu Zm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAxKQ0KPiAtCQlhdGFmYl9tZmJfZmlsbHJlY3Qo aW5mbywgcGFyLT5uZXh0X2xpbmUsIHJlY3QtPmNvbG9yLA0KPiAtCQkJCSAgIHJlY3QtPmR5 LCByZWN0LT5keCwgaGVpZ2h0LCB3aWR0aCk7DQo+IC0JZWxzZSBpZiAoaW5mby0+dmFyLmJp dHNfcGVyX3BpeGVsID09IDIpDQo+IC0JCWF0YWZiX2lwbGFuMnAyX2ZpbGxyZWN0KGluZm8s IHBhci0+bmV4dF9saW5lLCByZWN0LT5jb2xvciwNCj4gLQkJCQkJcmVjdC0+ZHksIHJlY3Qt PmR4LCBoZWlnaHQsIHdpZHRoKTsNCj4gLQllbHNlIGlmIChpbmZvLT52YXIuYml0c19wZXJf cGl4ZWwgPT0gNCkNCj4gLQkJYXRhZmJfaXBsYW4ycDRfZmlsbHJlY3QoaW5mbywgcGFyLT5u ZXh0X2xpbmUsIHJlY3QtPmNvbG9yLA0KPiAtCQkJCQlyZWN0LT5keSwgcmVjdC0+ZHgsIGhl aWdodCwgd2lkdGgpOw0KPiAtCWVsc2UNCj4gLQkJYXRhZmJfaXBsYW4ycDhfZmlsbHJlY3Qo aW5mbywgcGFyLT5uZXh0X2xpbmUsIHJlY3QtPmNvbG9yLA0KPiAtCQkJCQlyZWN0LT5keSwg cmVjdC0+ZHgsIGhlaWdodCwgd2lkdGgpOw0KPiAtDQo+IC0JcmV0dXJuOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgdm9pZCBhdGFmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywg Y29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQ0KPiAtew0KPiAtCXN0cnVjdCBhdGFm Yl9wYXIgKnBhciA9IGluZm8tPnBhcjsNCj4gLQlpbnQgeDIsIHkyOw0KPiAtCXUzMiBkeCwg ZHksIHN4LCBzeSwgd2lkdGgsIGhlaWdodDsNCj4gLQlpbnQgcmV2X2NvcHkgPSAwOw0KPiAt DQo+IC0jaWZkZWYgQVRBRkJfRkFMQ09ODQo+IC0JaWYgKGluZm8tPnZhci5iaXRzX3Blcl9w aXhlbCA9PSAxNikgew0KPiAtCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7DQo+IC0JCXJl dHVybjsNCj4gLQl9DQo+IC0jZW5kaWYNCj4gLQ0KPiAtCS8qIGNsaXAgdGhlIGRlc3RpbmF0 aW9uICovDQo+IC0JeDIgPSBhcmVhLT5keCArIGFyZWEtPndpZHRoOw0KPiAtCXkyID0gYXJl YS0+ZHkgKyBhcmVhLT5oZWlnaHQ7DQo+IC0JZHggPSBhcmVhLT5keCA+IDAgPyBhcmVhLT5k eCA6IDA7DQo+IC0JZHkgPSBhcmVhLT5keSA+IDAgPyBhcmVhLT5keSA6IDA7DQo+IC0JeDIg PSB4MiA8IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgPyB4MiA6IGluZm8tPnZhci54cmVzX3Zp cnR1YWw7DQo+IC0JeTIgPSB5MiA8IGluZm8tPnZhci55cmVzX3ZpcnR1YWwgPyB5MiA6IGlu Zm8tPnZhci55cmVzX3ZpcnR1YWw7DQo+IC0Jd2lkdGggPSB4MiAtIGR4Ow0KPiAtCWhlaWdo dCA9IHkyIC0gZHk7DQo+IC0NCj4gLQlpZiAoYXJlYS0+c3ggKyBkeCA8IGFyZWEtPmR4IHx8 IGFyZWEtPnN5ICsgZHkgPCBhcmVhLT5keSkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JLyog dXBkYXRlIHN4LHN5ICovDQo+IC0Jc3ggPSBhcmVhLT5zeCArIChkeCAtIGFyZWEtPmR4KTsN Cj4gLQlzeSA9IGFyZWEtPnN5ICsgKGR5IC0gYXJlYS0+ZHkpOw0KPiAtDQo+IC0JLyogdGhl IHNvdXJjZSBtdXN0IGJlIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSB2aXJ0dWFsIHNjcmVlbiAq Lw0KPiAtCWlmIChzeCArIHdpZHRoID4gaW5mby0+dmFyLnhyZXNfdmlydHVhbCB8fA0KPiAt CQkJc3kgKyBoZWlnaHQgPiBpbmZvLT52YXIueXJlc192aXJ0dWFsKQ0KPiAtCQlyZXR1cm47 DQo+IC0NCj4gLQlpZiAoZHkgPiBzeSB8fCAoZHkgPT0gc3kgJiYgZHggPiBzeCkpIHsNCj4g LQkJZHkgKz0gaGVpZ2h0Ow0KPiAtCQlzeSArPSBoZWlnaHQ7DQo+IC0JCXJldl9jb3B5ID0g MTsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDEp DQo+IC0JCWF0YWZiX21mYl9jb3B5YXJlYShpbmZvLCBwYXItPm5leHRfbGluZSwgc3ksIHN4 LCBkeSwgZHgsIGhlaWdodCwgd2lkdGgpOw0KPiAtCWVsc2UgaWYgKGluZm8tPnZhci5iaXRz X3Blcl9waXhlbCA9PSAyKQ0KPiAtCQlhdGFmYl9pcGxhbjJwMl9jb3B5YXJlYShpbmZvLCBw YXItPm5leHRfbGluZSwgc3ksIHN4LCBkeSwgZHgsIGhlaWdodCwgd2lkdGgpOw0KPiAtCWVs c2UgaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA0KQ0KPiAtCQlhdGFmYl9pcGxh bjJwNF9jb3B5YXJlYShpbmZvLCBwYXItPm5leHRfbGluZSwgc3ksIHN4LCBkeSwgZHgsIGhl aWdodCwgd2lkdGgpOw0KPiAtCWVsc2UNCj4gLQkJYXRhZmJfaXBsYW4ycDhfY29weWFyZWEo aW5mbywgcGFyLT5uZXh0X2xpbmUsIHN5LCBzeCwgZHksIGR4LCBoZWlnaHQsIHdpZHRoKTsN Cj4gLQ0KPiAtCXJldHVybjsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgYXRhZmJfaW1h Z2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmlt YWdlKQ0KPiAtew0KPiAtCXN0cnVjdCBhdGFmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsNCj4g LQlpbnQgeDIsIHkyOw0KPiAtCWNvbnN0IGNoYXIgKnNyYzsNCj4gLQl1MzIgZHgsIGR5LCB3 aWR0aCwgaGVpZ2h0LCBwaXRjaDsNCj4gLQ0KPiAtI2lmZGVmIEFUQUZCX0ZBTENPTg0KPiAt CWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMTYpIHsNCj4gLQkJY2ZiX2ltYWdl YmxpdChpbmZvLCBpbWFnZSk7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0jZW5kaWYNCj4g LQ0KPiAtCS8qDQo+IC0JICogV2UgY291bGQgdXNlIGhhcmR3YXJlIGNsaXBwaW5nIGJ1dCBv biBtYW55IGNhcmRzIHlvdSBnZXQgYXJvdW5kDQo+IC0JICogaGFyZHdhcmUgY2xpcHBpbmcg Ynkgd3JpdGluZyB0byBmcmFtZWJ1ZmZlciBkaXJlY3RseSBsaWtlIHdlIGFyZQ0KPiAtCSAq IGRvaW5nIGhlcmUuDQo+IC0JICovDQo+IC0JeDIgPSBpbWFnZS0+ZHggKyBpbWFnZS0+d2lk dGg7DQo+IC0JeTIgPSBpbWFnZS0+ZHkgKyBpbWFnZS0+aGVpZ2h0Ow0KPiAtCWR4ID0gaW1h Z2UtPmR4Ow0KPiAtCWR5ID0gaW1hZ2UtPmR5Ow0KPiAtCXgyID0geDIgPCBpbmZvLT52YXIu eHJlc192aXJ0dWFsID8geDIgOiBpbmZvLT52YXIueHJlc192aXJ0dWFsOw0KPiAtCXkyID0g eTIgPCBpbmZvLT52YXIueXJlc192aXJ0dWFsID8geTIgOiBpbmZvLT52YXIueXJlc192aXJ0 dWFsOw0KPiAtCXdpZHRoID0geDIgLSBkeDsNCj4gLQloZWlnaHQgPSB5MiAtIGR5Ow0KPiAt DQo+IC0JaWYgKGltYWdlLT5kZXB0aCA9PSAxKSB7DQo+IC0JCS8vIHVzZWQgZm9yIGZvbnQg ZGF0YQ0KPiAtCQlzcmMgPSBpbWFnZS0+ZGF0YTsNCj4gLQkJcGl0Y2ggPSAoaW1hZ2UtPndp ZHRoICsgNykgLyA4Ow0KPiAtCQl3aGlsZSAoaGVpZ2h0LS0pIHsNCj4gLQ0KPiAtCQkJaWYg KGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAxKQ0KPiAtCQkJCWF0YWZiX21mYl9saW5l ZmlsbChpbmZvLCBwYXItPm5leHRfbGluZSwNCj4gLQkJCQkJCSAgIGR5LCBkeCwgd2lkdGgs IHNyYywNCj4gLQkJCQkJCSAgIGltYWdlLT5iZ19jb2xvciwgaW1hZ2UtPmZnX2NvbG9yKTsN Cj4gLQkJCWVsc2UgaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAyKQ0KPiAtCQkJ CWF0YWZiX2lwbGFuMnAyX2xpbmVmaWxsKGluZm8sIHBhci0+bmV4dF9saW5lLA0KPiAtCQkJ CQkJCWR5LCBkeCwgd2lkdGgsIHNyYywNCj4gLQkJCQkJCQlpbWFnZS0+YmdfY29sb3IsIGlt YWdlLT5mZ19jb2xvcik7DQo+IC0JCQllbHNlIGlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4 ZWwgPT0gNCkNCj4gLQkJCQlhdGFmYl9pcGxhbjJwNF9saW5lZmlsbChpbmZvLCBwYXItPm5l eHRfbGluZSwNCj4gLQkJCQkJCQlkeSwgZHgsIHdpZHRoLCBzcmMsDQo+IC0JCQkJCQkJaW1h Z2UtPmJnX2NvbG9yLCBpbWFnZS0+ZmdfY29sb3IpOw0KPiAtCQkJZWxzZQ0KPiAtCQkJCWF0 YWZiX2lwbGFuMnA4X2xpbmVmaWxsKGluZm8sIHBhci0+bmV4dF9saW5lLA0KPiAtCQkJCQkJ CWR5LCBkeCwgd2lkdGgsIHNyYywNCj4gLQkJCQkJCQlpbWFnZS0+YmdfY29sb3IsIGltYWdl LT5mZ19jb2xvcik7DQo+IC0JCQlkeSsrOw0KPiAtCQkJc3JjICs9IHBpdGNoOw0KPiAtCQl9 DQo+IC0JfSBlbHNlIHsNCj4gLQkJYzJwX2lwbGFuMihpbmZvLT5zY3JlZW5fYmFzZSwgaW1h Z2UtPmRhdGEsIGR4LCBkeSwgd2lkdGgsDQo+IC0JCQkgICBoZWlnaHQsIHBhci0+bmV4dF9s aW5lLCBpbWFnZS0+d2lkdGgsDQo+IC0JCQkgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwp Ow0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludA0KPiAtYXRhZmJfaW9jdGwoc3Ry dWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJn KQ0KPiAtew0KPiAtCXN3aXRjaCAoY21kKSB7DQo+IC0jaWZkZWYgRkJDTURfR0VUX0NVUlJF TlRQQVINCj4gLQljYXNlIEZCQ01EX0dFVF9DVVJSRU5UUEFSOg0KPiAtCQlpZiAoY29weV90 b191c2VyKCh2b2lkICopYXJnLCAmY3VycmVudF9wYXIsDQo+IC0JCQkJIHNpemVvZihzdHJ1 Y3QgYXRhZmJfcGFyKSkpDQo+IC0JCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQkJcmV0dXJuIDA7 DQo+IC0jZW5kaWYNCj4gLSNpZmRlZiBGQkNNRF9TRVRfQ1VSUkVOVFBBUg0KPiAtCWNhc2Ug RkJDTURfU0VUX0NVUlJFTlRQQVI6DQo+IC0JCWlmIChjb3B5X2Zyb21fdXNlcigmY3VycmVu dF9wYXIsICh2b2lkICopYXJnLA0KPiAtCQkJCSAgIHNpemVvZihzdHJ1Y3QgYXRhZmJfcGFy KSkpDQo+IC0JCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQkJYXRhX3NldF9wYXIoJmN1cnJlbnRf cGFyKTsNCj4gLQkJcmV0dXJuIDA7DQo+IC0jZW5kaWYNCj4gLQl9DQo+IC0JcmV0dXJuIC1F SU5WQUw7DQo+IC19DQo+ICAgDQo+ICAgLyogKHVuKWJsYW5rL3Bvd2Vyb2ZmDQo+ICAgICog MCA9IHVuYmxhbmsNCj4gQEAgLTI2MDEsMjcgKzI0MTIsMjAgQEAgYXRhZmJfaW9jdGwoc3Ry dWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJn KQ0KPiAgICAqLw0KPiAgIHN0YXRpYyBpbnQgYXRhZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1 Y3QgZmJfaW5mbyAqaW5mbykNCj4gICB7DQo+IC0JdW5zaWduZWQgc2hvcnQgYmxhY2tbMTZd Ow0KPiAtCXN0cnVjdCBmYl9jbWFwIGNtYXA7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsN Cj4gICAJaWYgKGZiaHctPmJsYW5rICYmICFmYmh3LT5ibGFuayhibGFuaykpDQo+ICAgCQly ZXR1cm4gMTsNCj4gKw0KPiAgIAlpZiAoYmxhbmspIHsNCj4gLQkJbWVtc2V0KGJsYWNrLCAw LCAxNiAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOw0KPiAtCQljbWFwLnJlZCA9IGJsYWNr Ow0KPiAtCQljbWFwLmdyZWVuID0gYmxhY2s7DQo+IC0JCWNtYXAuYmx1ZSA9IGJsYWNrOw0K PiAtCQljbWFwLnRyYW5zcCA9IE5VTEw7DQo+IC0JCWNtYXAuc3RhcnQgPSAwOw0KPiAtCQlj bWFwLmxlbiA9IDE2Ow0KPiAtCQlmYl9zZXRfY21hcCgmY21hcCwgaW5mbyk7DQo+ICsJCS8v IEZJWE1FIFdoYXQgaWYgYnBwID4gND8NCj4gKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKysp DQo+ICsJCQlmYmh3LT5zZXRfY29sX3JlZyhpLCAwLCAwLCAwKTsNCj4gICAJfQ0KPiAtI2lm IDANCj4gLQllbHNlDQo+IC0JCWRvX2luc3RhbGxfY21hcChpbmZvKTsNCj4gLSNlbmRpZg0K PiAgIAlyZXR1cm4gMDsNCj4gICB9DQo+ICAgDQo+ICsNCj4gICAJLyoNCj4gICAJICogTmV3 IGZiY29uIGludGVyZmFjZSAuLi4NCj4gICAJICovDQo+IEBAIC0yNjY5LDEwICsyNDczLDYg QEAgc3RhdGljIHN0cnVjdCBmYl9vcHMgYXRhZmJfb3BzID0gew0KPiAgIAkuZmJfc2V0X3Bh cgk9IGF0YWZiX3NldF9wYXIsDQo+ICAgCS5mYl9ibGFuayA9CWF0YWZiX2JsYW5rLA0KPiAg IAkuZmJfcGFuX2Rpc3BsYXkJPSBhdGFmYl9wYW5fZGlzcGxheSwNCj4gLQkuZmJfZmlsbHJl Y3QJPSBhdGFmYl9maWxscmVjdCwNCj4gLQkuZmJfY29weWFyZWEJPSBhdGFmYl9jb3B5YXJl YSwNCj4gLQkuZmJfaW1hZ2VibGl0CT0gYXRhZmJfaW1hZ2VibGl0LA0KPiAtCS5mYl9pb2N0 bCA9CWF0YWZiX2lvY3RsLA0KPiAgIH07DQo+ICAgDQo+ICAgc3RhdGljIHZvaWQgY2hlY2tf ZGVmYXVsdF9wYXIoaW50IGRldGVjdGVkX21vZGUpDQo+IEBAIC0yNzE2LDcgKzI1MTYsNyBA QCBzdGF0aWMgdm9pZCBjaGVja19kZWZhdWx0X3BhcihpbnQgZGV0ZWN0ZWRfbW9kZSkNCj4g ICB9DQo+ICAgDQo+ICAgI2lmZGVmIEFUQUZCX0VYVA0KPiAtc3RhdGljIHZvaWQgX19pbml0 IGF0YWZiX3NldHVwX2V4dChjaGFyICpzcGVjKQ0KPiArc3RhdGljIHZvaWQgYXRhZmJfc2V0 dXBfZXh0KGNoYXIgKnNwZWMpDQo+ICAgew0KPiAgIAlpbnQgeHJlcywgeHJlc192aXJ0dWFs LCB5cmVzLCBkZXB0aCwgcGxhbmVzOw0KPiAgIAl1bnNpZ25lZCBsb25nIGFkZHIsIGxlbjsN Cj4gQEAgLTI5NDgsOSArMjc0OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGF0YWZiX3NldHVw KGNoYXIgKm9wdGlvbnMpDQo+ICAgCQlpZiAoKHRlbXAgPSBnZXRfdmlkZW9fbW9kZSh0aGlz X29wdCkpKSB7DQo+ICAgCQkJZGVmYXVsdF9wYXIgPSB0ZW1wOw0KPiAgIAkJCW1vZGVfb3B0 aW9uID0gdGhpc19vcHQ7DQo+IC0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgImlu dmVyc2UiKSkNCj4gLQkJCWZiX2ludmVydF9jbWFwcygpOw0KPiAtCQllbHNlIGlmICghc3Ry bmNtcCh0aGlzX29wdCwgImh3c2Nyb2xsXyIsIDkpKSB7DQo+ICsJCX0gZWxzZSBpZiAoIXN0 cm5jbXAodGhpc19vcHQsICJod3Njcm9sbF8iLCA5KSkgew0KPiAgIAkJCWh3c2Nyb2xsID0g c2ltcGxlX3N0cnRvdWwodGhpc19vcHQgKyA5LCBOVUxMLCAxMCk7DQo+ICAgCQkJaWYgKGh3 c2Nyb2xsIDwgMCkNCj4gICAJCQkJaHdzY3JvbGwgPSAwOw0KPiBAQCAtMjk4Myw4NiArMjc4 MSwxNzI4IEBAIHN0YXRpYyBpbnQgX19pbml0IGF0YWZiX3NldHVwKGNoYXIgKm9wdGlvbnMp DQo+ICAgCXJldHVybiAwOw0KPiAgIH0NCj4gICANCj4gLXN0YXRpYyBpbnQgX19pbml0IGF0 YWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICsNCj4gKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAqLw0KPiArLyoNCj4gKyAqIFRoZSBtZWF0IG9mIHRoaXMgZHJpdmVyLiBU aGUgY29yZSBwYXNzZXMgdXMgYSBtb2RlIGFuZCB3ZSBoYXZlIHRvIHByb2dyYW0NCj4gKyAq IGl0LiBUaGUgbW9kZXNldHRpbmcgaGVyZSBpcyB0aGUgYmFyZSBtaW5pbXVtIHJlcXVpcmVk IHRvIHNhdGlzZnkgdGhlIHFlbXUNCj4gKyAqIGVtdWxhdGlvbiBvZiB0aGlzIGhhcmR3YXJl LCBhbmQgcnVubmluZyB0aGlzIGFnYWluc3QgYSByZWFsIGRldmljZSBpcw0KPiArICogbGlr ZWx5IHRvIHJlc3VsdCBpbiBhbiBpbmFkZXF1YXRlbHkgcHJvZ3JhbW1lZCBtb2RlLiBXZSd2 ZSBhbHJlYWR5IGhhZA0KPiArICogdGhlIG9wcG9ydHVuaXR5IHRvIG1vZGlmeSB0aGUgbW9k ZSwgc28gd2hhdGV2ZXIgd2UgcmVjZWl2ZSBoZXJlIHNob3VsZA0KPiArICogYmUgc29tZXRo aW5nIHRoYXQgY2FuIGJlIGNvcnJlY3RseSBwcm9ncmFtbWVkIGFuZCBkaXNwbGF5ZWQNCj4g KyAqLw0KPiArDQo+ICtzdGF0aWMgdm9pZCBhdGFyaV9kcm1fc2V0X3N0YXJ0X2FkZHJlc3Mo c3RydWN0IGF0YXJpX2RybV9kZXZpY2UgKmF0YXJpX2RybSwNCj4gKwkJCQkJdTMyIG9mZnNl dCkNCj4gICB7DQo+IC0JaW50IHBhZCwgZGV0ZWN0ZWRfbW9kZSwgZXJyb3I7DQo+IC0JdW5z aWduZWQgaW50IGRlZm1vZGUgPSAwOw0KPiAtCXVuc2lnbmVkIGxvbmcgbWVtX3JlcTsNCj4g LQljaGFyICpvcHRpb24gPSBOVUxMOw0KPiArCWludCBpZHg7DQo+ICAgDQo+IC0JaWYgKGZi X2dldF9vcHRpb25zKCJhdGFmYiIsICZvcHRpb24pKQ0KPiAtCQlyZXR1cm4gLUVOT0RFVjsN Cj4gLQlhdGFmYl9zZXR1cChvcHRpb24pOw0KPiAtCWRldl9kYmcoJnBkZXYtPmRldiwgIiVz OiBzdGFydFxuIiwgX19mdW5jX18pOw0KPiArCWlmICghZHJtX2Rldl9lbnRlcigmYXRhcmlf ZHJtLT5kZXYsICZpZHgpKQ0KPiArCQlyZXR1cm47DQo+ICAgDQo+IC0JZG8gew0KPiAtI2lm ZGVmIEFUQUZCX0VYVA0KPiAtCQlpZiAoZXh0ZXJuYWxfYWRkcikgew0KPiAtCQkJZGV2X2Ri ZygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6aW5nIGV4dGVybmFsIGh3XG4iKTsNCj4gLQkJCWZi aHcgPSAmZXh0X3N3aXRjaDsNCj4gLQkJCWF0YWZiX29wcy5mYl9zZXRjb2xyZWcgPSAmZXh0 X3NldGNvbHJlZzsNCj4gLQkJCWRlZm1vZGUgPSBERUZNT0RFX0VYVDsNCj4gLQkJCWJyZWFr Ow0KPiAtCQl9DQo+IC0jZW5kaWYNCj4gLSNpZmRlZiBBVEFGQl9UVA0KPiAtCQlpZiAoQVRB UklIV19QUkVTRU5UKFRUX1NISUZURVIpKSB7DQo+IC0JCQlkZXZfZGJnKCZwZGV2LT5kZXYs ICJpbml0aWFsaXppbmcgVFQgaHdcbiIpOw0KPiAtCQkJZmJodyA9ICZ0dF9zd2l0Y2g7DQo+ IC0JCQlhdGFmYl9vcHMuZmJfc2V0Y29scmVnID0gJnR0X3NldGNvbHJlZzsNCj4gLQkJCWRl Zm1vZGUgPSBERUZNT0RFX1RUOw0KPiAtCQkJYnJlYWs7DQo+IC0JCX0NCj4gLSNlbmRpZg0K PiAtI2lmZGVmIEFUQUZCX0ZBTENPTg0KPiAtCQlpZiAoQVRBUklIV19QUkVTRU5UKFZJREVM X1NISUZURVIpKSB7DQo+IC0JCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0aWFsaXppbmcg RmFsY29uIGh3XG4iKTsNCj4gLQkJCWZiaHcgPSAmZmFsY29uX3N3aXRjaDsNCj4gLQkJCWF0 YWZiX29wcy5mYl9zZXRjb2xyZWcgPSAmZmFsY29uX3NldGNvbHJlZzsNCj4gLQkJCWVycm9y ID0gcmVxdWVzdF9pcnEoSVJRX0FVVE9fNCwgZmFsY29uX3ZibF9zd2l0Y2hlciwgMCwNCj4g LQkJCQkJICAgICJmcmFtZWJ1ZmZlcjptb2Rlc3dpdGNoIiwNCj4gLQkJCQkJICAgIGZhbGNv bl92Ymxfc3dpdGNoZXIpOw0KPiAtCQkJaWYgKGVycm9yKQ0KPiAtCQkJCXJldHVybiBlcnJv cjsNCj4gLQkJCWRlZm1vZGUgPSBERUZNT0RFX0YzMDsNCj4gLQkJCWJyZWFrOw0KPiAtCQl9 DQo+IC0jZW5kaWYNCj4gLSNpZmRlZiBBVEFGQl9TVEUNCj4gLQkJaWYgKEFUQVJJSFdfUFJF U0VOVChTVE5EX1NISUZURVIpIHx8DQo+IC0JCSAgICBBVEFSSUhXX1BSRVNFTlQoRVhURF9T SElGVEVSKSkgew0KPiAtCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6aW5nIFNU L0UgaHdcbiIpOw0KPiAtCQkJZmJodyA9ICZzdF9zd2l0Y2g7DQo+IC0JCQlhdGFmYl9vcHMu ZmJfc2V0Y29scmVnID0gJnN0c3RlX3NldGNvbHJlZzsNCj4gLQkJCWRlZm1vZGUgPSBERUZN T0RFX1NURTsNCj4gLQkJCWJyZWFrOw0KPiAtCQl9DQo+IC0JCWZiaHcgPSAmc3Rfc3dpdGNo Ow0KPiAtCQlhdGFmYl9vcHMuZmJfc2V0Y29scmVnID0gJnN0c3RlX3NldGNvbHJlZzsNCj4g LQkJZGV2X3dhcm4oJnBkZXYtPmRldiwNCj4gLQkJCSAiQ2Fubm90IGRldGVybWluZSB2aWRl byBoYXJkd2FyZTsgZGVmYXVsdGluZyB0byBTVChlKVxuIik7DQo+IC0jZWxzZSAvKiBBVEFG Ql9TVEUgKi8NCj4gLQkJLyogbm8gZGVmYXVsdCBkcml2ZXIgaW5jbHVkZWQgKi8NCj4gLQkJ LyogTm9ib2R5IHdpbGwgZXZlciBzZWUgdGhpcyBtZXNzYWdlIDotKSAqLw0KPiAtCQlwYW5p YygiQ2Fubm90IGluaXRpYWxpemUgdmlkZW8gaGFyZHdhcmUiKTsNCj4gLSNlbmRpZg0KPiAt CX0gd2hpbGUgKDApOw0KPiArCWlmIChmYmh3LT5zZXRfc2NyZWVuX2Jhc2UpDQo+ICsJCWZi aHctPnNldF9zY3JlZW5fYmFzZShzY3JlZW5fYmFzZSArIG9mZnNldCk7DQo+ICAgDQo+IC0J LyogTXVsdGlzeW5jIG1vbml0b3IgY2FwYWJpbGl0aWVzICovDQo+IC0JLyogQXRhcmktVE9T IGRlZmF1bHRzIGlmIG5vIGJvb3Qgb3B0aW9uIHByZXNlbnQgKi8NCj4gLQlpZiAoZmJfaW5m by5tb25zcGVjcy5oZm1pbiA9PSAwKSB7DQo+IC0JCWZiX2luZm8ubW9uc3BlY3MuaGZtaW4g PSAzMTAwMDsNCj4gLQkJZmJfaW5mby5tb25zcGVjcy5oZm1heCA9IDMyMDAwOw0KPiAtCQlm Yl9pbmZvLm1vbnNwZWNzLnZmbWluID0gNTg7DQo+IC0JCWZiX2luZm8ubW9uc3BlY3MudmZt YXggPSA2MjsNCj4gLQl9DQo+ICsJZHJtX2Rldl9leGl0KGlkeCk7DQo+ICt9DQo+ICAgDQo+ IC0JZGV0ZWN0ZWRfbW9kZSA9IGZiaHctPmRldGVjdCgpOw0KPiAtCWNoZWNrX2RlZmF1bHRf cGFyKGRldGVjdGVkX21vZGUpOw0KPiAtI2lmZGVmIEFUQUZCX0VYVA0KPiAtCWlmICghZXh0 ZXJuYWxfYWRkcikgew0KPiAtI2VuZGlmIC8qIEFUQUZCX0VYVCAqLw0KPiAtCQltZW1fcmVx ID0gZGVmYXVsdF9tZW1fcmVxICsgb3ZzY19vZmZzZXQgKyBvdnNjX2FkZGxlbjsNCj4gK3N0 YXRpYyBpbnQgYXRhcmlfZHJtX21vZGVfc2V0KHN0cnVjdCBhdGFyaV9kcm1fZGV2aWNlICph dGFyaV9kcm0sDQo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwN Cj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQ0KPiArew0KPiArCWlu dCBpZHg7DQo+ICsNCj4gKwlpZiAoIWRybV9kZXZfZW50ZXIoJmF0YXJpX2RybS0+ZGV2LCAm aWR4KSkNCj4gKwkJcmV0dXJuIC0xOw0KPiArDQo+ICsJc3dpdGNoIChmYi0+Zm9ybWF0LT5m b3JtYXQpIHsNCj4gKwljYXNlIERSTV9GT1JNQVRfQzE6DQo+ICsJY2FzZSBEUk1fRk9STUFU X0MyOg0KPiArCWNhc2UgRFJNX0ZPUk1BVF9DNDoNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwlj YXNlIERSTV9GT1JNQVRfQzg6DQo+ICsJCS8vIEZJWE1FIFRUICYgRmFsY29uIG9ubHkNCj4g KwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Og0KPiArCWNhc2Ug RFJNX0ZPUk1BVF9SR0I1NjUgfCBEUk1fRk9STUFUX0JJR19FTkRJQU46DQo+ICsJY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4Og0KPiArCQkvLyBGSVhNRSBGYWxjb24gb25seQ0KPiArCQli cmVhazsNCj4gKw0KPiArCQkvLyBGSVhNRQ0KPiArCQlicmVhazsNCj4gKw0KPiArCWRlZmF1 bHQ6DQo+ICsJCWRybV9kZXZfZXhpdChpZHgpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0K PiArDQo+ICsJLy8gRklYTUUgc3dpdGNoIG1vZGUNCj4gKwlhdGFyaV9kcm0tPmJwcCA9IGZi X2luZm8udmFyLmJpdHNfcGVyX3BpeGVsOw0KPiArDQo+ICsJLyogUHJvZ3JhbSB0aGUgcGl0 Y2ggKi8NCj4gKwlhdGFyaV9kcm0tPnBpdGNoID0gY3VycmVudF9wYXIubmV4dF9saW5lOw0K PiArDQo+ICsJYXRhcmlfZHJtX3NldF9zdGFydF9hZGRyZXNzKGF0YXJpX2RybSwgMCk7DQo+ ICsNCj4gKwkvKiBVbmJsYW5rIChuZWVkZWQgb24gUzMgcmVzdW1lLCB2Z2FiaW9zIGRvZXNu J3QgZG8gaXQgdGhlbikgKi8NCj4gKwkvLyBGSVhNRQ0KPiArDQo+ICsJZHJtX2Rldl9leGl0 KGlkeCk7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8vIEZJWE1FIHBsYWluIGNv cHkNCj4gK3N0YXRpYyB2b2lkIGF0YXJpX2RybV9mYl9jMV90b19pcGxhbjJwMShjb25zdCB2 b2lkICp2YWRkciwNCj4gKwkJCQkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs DQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqcmVjdCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtID0gYXRhcmlfZHJtX2Zyb21fZGV2KGZi LT5kZXYpOw0KPiArCXVuc2lnbmVkIGludCBieXRlcywgbGluZXMsIHgxOw0KPiArCXZvaWQg KmRzdCA9IHNjcmVlbl9iYXNlOw0KPiArDQo+ICsJYnl0ZXMgPSBESVZfUk9VTkRfVVAoZHJt X3JlY3Rfd2lkdGgocmVjdCkgKyByZWN0LT54MSAlIDgsIDgpOw0KPiArCXgxID0gcmVjdC0+ eDEgJiAtODsNCj4gKwlsaW5lcyA9IGRybV9yZWN0X2hlaWdodChyZWN0KTsNCj4gKw0KPiAr CWRzdCArPSByZWN0LT55MSAqIGF0YXJpX2RybS0+cGl0Y2ggKyB4MSAvIDg7DQo+ICsJdmFk ZHIgKz0gcmVjdC0+eTEgKiBmYi0+cGl0Y2hlc1swXSArIHgxIC8gODsNCj4gKw0KPiArCXdo aWxlIChsaW5lcy0tKSB7DQo+ICsJCW1lbWNweShkc3QsIHZhZGRyLCBieXRlcyk7DQo+ICsJ CXZhZGRyICs9IGZiLT5waXRjaGVzWzBdOw0KPiArCQlkc3QgKz0gYXRhcmlfZHJtLT5waXRj aDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0YXJpX2RybV9mYl9jMl90 b19pcGxhbjJwMl9saW5lKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqdmFkZHIsDQo+ICsJCQkJ CSAgICAgdW5zaWduZWQgaW50IHdvcmRzKQ0KPiArew0KPiArCXVuaW9uIHsNCj4gKwkJdTgg cGl4ZWxzWzRdOw0KPiArCQl1MzIgd29yZHNbMl07DQo+ICsJfSBjMnA7DQo+ICsNCj4gKwl3 aGlsZSAod29yZHMtLSkgew0KPiArCQkvKg0KPiArCQkgKiBMb2FkIDE2IGNodW5reSAyLWJp dCBwaXhlbHMNCj4gKwkJICovDQo+ICsJCW1lbWNweShjMnAucGl4ZWxzLCB2YWRkciwgc2l6 ZW9mKGMycC5waXhlbHMpKTsNCj4gKwkJdmFkZHIgKz0gNDsNCj4gKw0KPiArCQkvKg0KPiAr CQkgKiBQZXJmb3JtIGEgZnVsbCBDMlAgc3RlcCBvbiAyIDMyLWJpdCB3b3Jkcw0KPiArCQkg Ki8NCj4gKwkJdHJhbnNwMngoYzJwLndvcmRzLCAxLCAxKTsNCj4gKwkJdHJhbnNwMihjMnAu d29yZHMsIDE2LCAxKTsNCj4gKwkJdHJhbnNwMihjMnAud29yZHMsIDgsIDEpOw0KPiArCQl0 cmFuc3AyKGMycC53b3JkcywgNCwgMSk7DQo+ICsJCXRyYW5zcDIoYzJwLndvcmRzLCAyLCAx KTsNCj4gKwkJdHJhbnNwMihjMnAud29yZHMsIDEsIDEpOw0KPiArDQo+ICsJCS8qDQo+ICsJ CSAqIFN0b3JlIHBsYW5hciBkYXRhICgyIHBsYW5lcyBwZXIgMzItYml0IHdvcmQpDQo+ICsJ CSAqIFNlY29uZCB3b3JkIG9ubHkhDQo+ICsJCSAqLw0KPiArCQltZW1jcHkoZHN0LCAmYzJw LndvcmRzWzFdLCBzaXplb2YoYzJwLndvcmRzWzFdKSk7DQo+ICsJCWRzdCArPSA0Ow0KPiAr CX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRhcmlfZHJtX2ZiX2MyX3RvX2lwbGFu MnAyKGNvbnN0IHZvaWQgKnZhZGRyLA0KPiArCQkJCQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwNCj4gKwkJCQkJY29uc3Qgc3RydWN0IGRybV9yZWN0ICpyZWN0KQ0KPiAr ew0KPiArCXN0cnVjdCBhdGFyaV9kcm1fZGV2aWNlICphdGFyaV9kcm0gPSBhdGFyaV9kcm1f ZnJvbV9kZXYoZmItPmRldik7DQo+ICsJdW5zaWduZWQgaW50IHdvcmRzLCBsaW5lcywgeDE7 DQo+ICsJdm9pZCAqZHN0ID0gc2NyZWVuX2Jhc2U7DQo+ICsNCj4gKwl3b3JkcyA9IERJVl9S T1VORF9VUChkcm1fcmVjdF93aWR0aChyZWN0KSArIHJlY3QtPngxICUgMTYsIDE2KTsNCj4g Kwl4MSA9IHJlY3QtPngxICYgLTE2Ow0KPiArCWxpbmVzID0gZHJtX3JlY3RfaGVpZ2h0KHJl Y3QpOw0KPiArDQo+ICsJZHN0ICs9IHJlY3QtPnkxICogYXRhcmlfZHJtLT5waXRjaCArIHgx IC8gNDsNCj4gKwl2YWRkciArPSByZWN0LT55MSAqIGZiLT5waXRjaGVzWzBdICsgeDEgLyA0 Ow0KPiArDQo+ICsJd2hpbGUgKGxpbmVzLS0pIHsNCj4gKwkJYXRhcmlfZHJtX2ZiX2MyX3Rv X2lwbGFuMnAyX2xpbmUoZHN0LCB2YWRkciwgd29yZHMpOw0KPiArCQl2YWRkciArPSBmYi0+ cGl0Y2hlc1swXTsNCj4gKwkJZHN0ICs9IGF0YXJpX2RybS0+cGl0Y2g7DQo+ICsJfQ0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhdGFyaV9kcm1fZmJfYzRfdG9faXBsYW4ycDRfbGlu ZShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnZhZGRyLA0KPiArCQkJCQkgICAgIHVuc2lnbmVk IGludCB3b3JkcykNCj4gK3sNCj4gKwl1bmlvbiB7DQo+ICsJCXU4IHBpeGVsc1s4XTsNCj4g KwkJdTMyIHdvcmRzWzJdOw0KPiArCX0gYzJwOw0KPiArDQo+ICsJd2hpbGUgKHdvcmRzLS0p IHsNCj4gKwkJLyoNCj4gKwkJICogTG9hZCAxNiBjaHVua3kgNC1iaXQgcGl4ZWxzDQo+ICsJ CSAqLw0KPiArCQltZW1jcHkoYzJwLnBpeGVscywgdmFkZHIsIHNpemVvZihjMnAucGl4ZWxz KSk7DQo+ICsJCXZhZGRyICs9IDg7DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogUGVyZm9ybSBh IGZ1bGwgQzJQIHN0ZXAgb24gMiAzMi1iaXQgd29yZHMNCj4gKwkJICovDQo+ICsJCXRyYW5z cDIoYzJwLndvcmRzLCA4LCAxKTsNCj4gKwkJdHJhbnNwMihjMnAud29yZHMsIDIsIDEpOw0K PiArCQl0cmFuc3AyeChjMnAud29yZHMsIDEsIDEpOw0KPiArCQl0cmFuc3AyKGMycC53b3Jk cywgMTYsIDEpOw0KPiArCQl0cmFuc3AyKGMycC53b3JkcywgNCwgMSk7DQo+ICsJCXRyYW5z cDIoYzJwLndvcmRzLCAxLCAxKTsNCj4gKw0KPiArCQkvKg0KPiArCQkgKiBTdG9yZSBwbGFu YXIgZGF0YSAoMiBwbGFuZXMgcGVyIDMyLWJpdCB3b3JkKQ0KPiArCQkgKi8NCj4gKwkJbWVt Y3B5KGRzdCwgYzJwLndvcmRzLCBzaXplb2YoYzJwLndvcmRzKSk7DQo+ICsJCWRzdCArPSA4 Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRhcmlfZHJtX2ZiX2M0X3Rv X2lwbGFuMnA0KGNvbnN0IHZvaWQgKnZhZGRyLA0KPiArCQkJCQljb25zdCBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiwNCj4gKwkJCQkJY29uc3Qgc3RydWN0IGRybV9yZWN0ICpyZWN0 KQ0KPiArew0KPiArCXN0cnVjdCBhdGFyaV9kcm1fZGV2aWNlICphdGFyaV9kcm0gPSBhdGFy aV9kcm1fZnJvbV9kZXYoZmItPmRldik7DQo+ICsJdW5zaWduZWQgaW50IHdvcmRzLCBsaW5l cywgeDE7DQo+ICsJdm9pZCAqZHN0ID0gc2NyZWVuX2Jhc2U7DQo+ICsNCj4gKwl3b3JkcyA9 IERJVl9ST1VORF9VUChkcm1fcmVjdF93aWR0aChyZWN0KSArIHJlY3QtPngxICUgMTYsIDE2 KTsNCj4gKwl4MSA9IHJlY3QtPngxICYgLTE2Ow0KPiArCWxpbmVzID0gZHJtX3JlY3RfaGVp Z2h0KHJlY3QpOw0KPiArDQo+ICsJZHN0ICs9IHJlY3QtPnkxICogYXRhcmlfZHJtLT5waXRj aCArIHgxIC8gMjsNCj4gKwl2YWRkciArPSByZWN0LT55MSAqIGZiLT5waXRjaGVzWzBdICsg eDEgLyAyOw0KPiArDQo+ICsJd2hpbGUgKGxpbmVzLS0pIHsNCj4gKwkJYXRhcmlfZHJtX2Zi X2M0X3RvX2lwbGFuMnA0X2xpbmUoZHN0LCB2YWRkciwgd29yZHMpOw0KPiArCQl2YWRkciAr PSBmYi0+cGl0Y2hlc1swXTsNCj4gKwkJZHN0ICs9IGF0YXJpX2RybS0+cGl0Y2g7DQo+ICsJ fQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhdGFyaV9kcm1fZmJfYzhfdG9faXBsYW4y cDhfbGluZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnZhZGRyLA0KPiArCQkJCQkgICAgIHVu c2lnbmVkIGludCB3b3JkcykNCj4gK3sNCj4gKwkvLyBGSVhNRSBHZXQgcmlkIG9mIHBpeGVs cyBhbmQgdW5pb24NCj4gKwkvLyBGSVhNRSBVc2UgZ2V0X3VuYWxpZ25lZF9iZTMyKCkgYW5k IHN0b3JlIGRpcmVjdGx5IGluIHdvcmRzDQo+ICsJLy8gRklYTUUgSXMgaXQgbW9yZSBlZmZp Y2llbnQgdG8gd29yayBvbiAxNi1iaXQgd29yZHM/DQo+ICsJLy8gRklYTUUgYXJhbnltL3Ny Yy9ob3N0c2NyZWVuLmNwcDpIb3N0U2NyZWVuOjpiaXRwbGFuZVRvQ2h1bmt5KCkNCj4gKwkv LyBGSVhNRSBDaGVjayBhc20gb3V0cHV0ISEhIQ0KPiArCXVuaW9uIHsNCj4gKwkJdTggcGl4 ZWxzWzE2XTsNCj4gKwkJdTMyIHdvcmRzWzRdOw0KPiArCX0gYzJwOw0KPiArDQo+ICsJd2hp bGUgKHdvcmRzLS0pIHsNCj4gKwkJLyoNCj4gKwkJICogTG9hZCAxNiBjaHVua3kgOC1iaXQg cGl4ZWxzDQo+ICsJCSAqLw0KPiArCQltZW1jcHkoYzJwLnBpeGVscywgdmFkZHIsIHNpemVv ZihjMnAucGl4ZWxzKSk7DQo+ICsJCXZhZGRyICs9IDE2Ow0KPiArDQo+ICsJCS8qDQo+ICsJ CSAqIFBlcmZvcm0gYSBmdWxsIEMyUCBzdGVwIG9uIDQgMzItYml0IHdvcmRzDQo+ICsJCSAq Lw0KPiArCQl0cmFuc3A0KGMycC53b3JkcywgOCwgMik7DQo+ICsJCXRyYW5zcDQoYzJwLndv cmRzLCAxLCAyKTsNCj4gKwkJdHJhbnNwNHgoYzJwLndvcmRzLCAxNiwgMik7DQo+ICsJCXRy YW5zcDR4KGMycC53b3JkcywgMiwgMik7DQo+ICsJCXRyYW5zcDQoYzJwLndvcmRzLCA0LCAx KTsNCj4gKw0KPiArCQkvKg0KPiArCQkgKiBTdG9yZSBwZXJtdXRhdGVkIHBsYW5hciBkYXRh ICgyIHBsYW5lcyBwZXIgMzItYml0IHdvcmQpDQo+ICsJCSAqLw0KPiArCQlwdXRfdW5hbGln bmVkX2JlMzIoYzJwLndvcmRzWzFdLCBkc3QpOw0KPiArCQlkc3QgKz0gNDsNCj4gKwkJcHV0 X3VuYWxpZ25lZF9iZTMyKGMycC53b3Jkc1szXSwgZHN0KTsNCj4gKwkJZHN0ICs9IDQ7DQo+ ICsJCXB1dF91bmFsaWduZWRfYmUzMihjMnAud29yZHNbMF0sIGRzdCk7DQo+ICsJCWRzdCAr PSA0Ow0KPiArCQlwdXRfdW5hbGlnbmVkX2JlMzIoYzJwLndvcmRzWzJdLCBkc3QpOw0KPiAr CQlkc3QgKz0gNDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0YXJpX2Ry bV9mYl9jOF90b19pcGxhbjJwOChjb25zdCB2b2lkICp2YWRkciwNCj4gKwkJCQkJY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsDQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBkcm1f cmVjdCAqcmVjdCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlf ZHJtID0gYXRhcmlfZHJtX2Zyb21fZGV2KGZiLT5kZXYpOw0KPiArCXVuc2lnbmVkIGludCB3 b3JkcywgbGluZXMsIHgxOw0KPiArCXZvaWQgKmRzdCA9IHNjcmVlbl9iYXNlOw0KPiArDQo+ ICsJd29yZHMgPSBESVZfUk9VTkRfVVAoZHJtX3JlY3Rfd2lkdGgocmVjdCkgKyByZWN0LT54 MSAlIDE2LCAxNik7DQo+ICsJeDEgPSByZWN0LT54MSAmIC0xNjsNCj4gKwlsaW5lcyA9IGRy bV9yZWN0X2hlaWdodChyZWN0KTsNCj4gKw0KPiArCWRzdCArPSByZWN0LT55MSAqIGF0YXJp X2RybS0+cGl0Y2ggKyB4MTsNCj4gKwl2YWRkciArPSByZWN0LT55MSAqIGZiLT5waXRjaGVz WzBdICsgeDE7DQo+ICsNCj4gKwl3aGlsZSAobGluZXMtLSkgew0KPiArCQlhdGFyaV9kcm1f ZmJfYzhfdG9faXBsYW4ycDhfbGluZShkc3QsIHZhZGRyLCB3b3Jkcyk7DQo+ICsJCXZhZGRy ICs9IGZiLT5waXRjaGVzWzBdOw0KPiArCQlkc3QgKz0gYXRhcmlfZHJtLT5waXRjaDsNCj4g Kwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0YXJpX2RybV9sb2FkX2NsdXQzMzIo dm9pZCkNCj4gK3sNCj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7 IGkgPCAyNTY7IGkrKykgew0KPiArCQl1MTYgciA9ICgoaSA+PiA1KSAmIDcpICogMHgxZmZm Ow0KPiArCQl1MTYgZyA9ICgoaSA+PiAyKSAmIDcpICogMHgxZmZmOw0KPiArCQl1MTYgYiA9 IChpICYgMykgKiAweDNmZmY7DQo+ICsJCWZiaHctPnNldF9jb2xfcmVnKGksIHIsIGcsIGIp Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArLy8jZGVmaW5lIEVNVUxBVEVfTEVTU0VSX0ZPUk1B VFMNCj4gKw0KPiArI2lmZGVmIEVNVUxBVEVfTEVTU0VSX0ZPUk1BVFMNCj4gK3N0YXRpYyB2 b2lkIGF0YXJpX2RybV9mYl9jMV90b19pcGxhbjJwWF9saW5lKGNoYXIgKmRzdCwgY29uc3Qg Y2hhciAqdmFkZHIsDQo+ICsJCQkJCSAgICAgdW5zaWduZWQgaW50IHdvcmRzLA0KPiArCQkJ CQkgICAgIHVuc2lnbmVkIGludCBicHApDQo+ICt7DQo+ICsJd2hpbGUgKHdvcmRzLS0pIHsN Cj4gKwkJcHV0X3VuYWxpZ25lZF9iZTE2KGdldF91bmFsaWduZWRfYmUxNih2YWRkciksIGRz dCk7DQo+ICsJCWRzdCArPSAyOw0KPiArCQl2YWRkciArPSAyOw0KPiArDQo+ICsJCW1lbXNl dChkc3QsIDAsIChicHAgLSAxKSAqIDIpOw0KPiArCQlkc3QgKz0gKGJwcCAtIDEpICogMjsN Cj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0YXJpX2RybV9mYl9jMV90b19p cGxhbjJwWChjb25zdCB2b2lkICp2YWRkciwNCj4gKwkJCQkJY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsDQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqcmVjdCkN Cj4gK3sNCj4gKwlzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtID0gYXRhcmlf ZHJtX2Zyb21fZGV2KGZiLT5kZXYpOw0KPiArCXVuc2lnbmVkIGludCB3b3JkcywgbGluZXMs IHgxLCBicHAgPSBhdGFyaV9kcm0tPmJwcDsNCj4gKwl2b2lkICpkc3QgPSBzY3JlZW5fYmFz ZTsNCj4gKw0KPiArCXdvcmRzID0gRElWX1JPVU5EX1VQKGRybV9yZWN0X3dpZHRoKHJlY3Qp ICsgcmVjdC0+eDEgJSAxNiwgMTYpOw0KPiArCXgxID0gcmVjdC0+eDEgJiAtMTY7DQo+ICsJ bGluZXMgPSBkcm1fcmVjdF9oZWlnaHQocmVjdCk7DQo+ICsNCj4gKwlkc3QgKz0gcmVjdC0+ eTEgKiBhdGFyaV9kcm0tPnBpdGNoICsgeDEgKiBicHAgLyA4Ow0KPiArCXZhZGRyICs9IHJl Y3QtPnkxICogZmItPnBpdGNoZXNbMF0gKyB4MSAvIDg7DQo+ICsNCj4gKwl3aGlsZSAobGlu ZXMtLSkgew0KPiArCQlhdGFyaV9kcm1fZmJfYzFfdG9faXBsYW4ycFhfbGluZShkc3QsIHZh ZGRyLCB3b3JkcywgYnBwKTsNCj4gKwkJdmFkZHIgKz0gZmItPnBpdGNoZXNbMF07DQo+ICsJ CWRzdCArPSBhdGFyaV9kcm0tPnBpdGNoOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGlj IHZvaWQgYXRhcmlfZHJtX2ZiX2MyX3RvX2lwbGFuMnBYX2xpbmUoY2hhciAqZHN0LCBjb25z dCBjaGFyICp2YWRkciwNCj4gKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgd29yZHMsDQo+ICsJ CQkJCSAgICAgdW5zaWduZWQgaW50IGJwcCkNCj4gK3sNCj4gKwl1bmlvbiB7DQo+ICsJCXU4 IHBpeGVsc1s0XTsNCj4gKwkJdTMyIHdvcmRzWzJdOw0KPiArCX0gYzJwOw0KPiArDQo+ICsJ d2hpbGUgKHdvcmRzLS0pIHsNCj4gKwkJLyoNCj4gKwkJICogTG9hZCAxNiBjaHVua3kgMi1i aXQgcGl4ZWxzDQo+ICsJCSAqLw0KPiArCQltZW1jcHkoYzJwLnBpeGVscywgdmFkZHIsIHNp emVvZihjMnAucGl4ZWxzKSk7DQo+ICsJCXZhZGRyICs9IDQ7DQo+ICsNCj4gKwkJLyoNCj4g KwkJICogUGVyZm9ybSBhIGZ1bGwgQzJQIHN0ZXAgb24gMiAzMi1iaXQgd29yZHMNCj4gKwkJ ICovDQo+ICsJCXRyYW5zcDJ4KGMycC53b3JkcywgMSwgMSk7DQo+ICsJCXRyYW5zcDIoYzJw LndvcmRzLCAxNiwgMSk7DQo+ICsJCXRyYW5zcDIoYzJwLndvcmRzLCA4LCAxKTsNCj4gKwkJ dHJhbnNwMihjMnAud29yZHMsIDQsIDEpOw0KPiArCQl0cmFuc3AyKGMycC53b3JkcywgMiwg MSk7DQo+ICsJCXRyYW5zcDIoYzJwLndvcmRzLCAxLCAxKTsNCj4gKw0KPiArCQkvKg0KPiAr CQkgKiBTdG9yZSBwbGFuYXIgZGF0YSAoMiBwbGFuZXMgcGVyIDMyLWJpdCB3b3JkKQ0KPiAr CQkgKiBTZWNvbmQgd29yZCBvbmx5IQ0KPiArCQkgKi8NCj4gKwkJbWVtY3B5KGRzdCwgJmMy cC53b3Jkc1sxXSwgc2l6ZW9mKGMycC53b3Jkc1sxXSkpOw0KPiArCQlkc3QgKz0gNDsNCj4g KwkJbWVtc2V0KGRzdCwgMCwgKGJwcCAtIDIpICogMik7DQo+ICsJCWRzdCArPSAoYnBwIC0g MikgKiAyOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRhcmlfZHJtX2Zi X2MyX3RvX2lwbGFuMnBYKGNvbnN0IHZvaWQgKnZhZGRyLA0KPiArCQkJCQljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwNCj4gKwkJCQkJY29uc3Qgc3RydWN0IGRybV9yZWN0 ICpyZWN0KQ0KPiArew0KPiArCXN0cnVjdCBhdGFyaV9kcm1fZGV2aWNlICphdGFyaV9kcm0g PSBhdGFyaV9kcm1fZnJvbV9kZXYoZmItPmRldik7DQo+ICsJdW5zaWduZWQgaW50IHdvcmRz LCBsaW5lcywgeDEsIGJwcCA9IGF0YXJpX2RybS0+YnBwOw0KPiArCXZvaWQgKmRzdCA9IHNj cmVlbl9iYXNlOw0KPiArDQo+ICsJd29yZHMgPSBESVZfUk9VTkRfVVAoZHJtX3JlY3Rfd2lk dGgocmVjdCkgKyByZWN0LT54MSAlIDE2LCAxNik7DQo+ICsJeDEgPSByZWN0LT54MSAmIC0x NjsNCj4gKwlsaW5lcyA9IGRybV9yZWN0X2hlaWdodChyZWN0KTsNCj4gKw0KPiArCWRzdCAr PSByZWN0LT55MSAqIGF0YXJpX2RybS0+cGl0Y2ggKyB4MSAqIGJwcCAvIDg7DQo+ICsJdmFk ZHIgKz0gcmVjdC0+eTEgKiBmYi0+cGl0Y2hlc1swXSArIHgxIC8gNDsNCj4gKw0KPiArCXdo aWxlIChsaW5lcy0tKSB7DQo+ICsJCWF0YXJpX2RybV9mYl9jMl90b19pcGxhbjJwWF9saW5l KGRzdCwgdmFkZHIsIHdvcmRzLCBicHApOw0KPiArCQl2YWRkciArPSBmYi0+cGl0Y2hlc1sw XTsNCj4gKwkJZHN0ICs9IGF0YXJpX2RybS0+cGl0Y2g7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBhdGFyaV9kcm1fZmJfYzRfdG9faXBsYW4ycFhfbGluZShjaGFyICpk c3QsIGNvbnN0IGNoYXIgKnZhZGRyLA0KPiArCQkJCQkgICAgIHVuc2lnbmVkIGludCB3b3Jk cywNCj4gKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgYnBwKQ0KPiArew0KPiArCXVuaW9uIHsN Cj4gKwkJdTggcGl4ZWxzWzhdOw0KPiArCQl1MzIgd29yZHNbMl07DQo+ICsJfSBjMnA7DQo+ ICsNCj4gKwl3aGlsZSAod29yZHMtLSkgew0KPiArCQkvKg0KPiArCQkgKiBMb2FkIDE2IGNo dW5reSA0LWJpdCBwaXhlbHMNCj4gKwkJICovDQo+ICsJCW1lbWNweShjMnAucGl4ZWxzLCB2 YWRkciwgc2l6ZW9mKGMycC5waXhlbHMpKTsNCj4gKwkJdmFkZHIgKz0gODsNCj4gKw0KPiAr CQkvKg0KPiArCQkgKiBQZXJmb3JtIGEgZnVsbCBDMlAgc3RlcCBvbiAyIDMyLWJpdCB3b3Jk cw0KPiArCQkgKi8NCj4gKwkJdHJhbnNwMihjMnAud29yZHMsIDgsIDEpOw0KPiArCQl0cmFu c3AyKGMycC53b3JkcywgMiwgMSk7DQo+ICsJCXRyYW5zcDJ4KGMycC53b3JkcywgMSwgMSk7 DQo+ICsJCXRyYW5zcDIoYzJwLndvcmRzLCAxNiwgMSk7DQo+ICsJCXRyYW5zcDIoYzJwLndv cmRzLCA0LCAxKTsNCj4gKwkJdHJhbnNwMihjMnAud29yZHMsIDEsIDEpOw0KPiArDQo+ICsJ CS8qDQo+ICsJCSAqIFN0b3JlIHBsYW5hciBkYXRhICgyIHBsYW5lcyBwZXIgMzItYml0IHdv cmQpDQo+ICsJCSAqLw0KPiArCQltZW1jcHkoZHN0LCBjMnAud29yZHMsIHNpemVvZihjMnAu d29yZHMpKTsNCj4gKwkJZHN0ICs9IDg7DQo+ICsJCW1lbXNldChkc3QsIDAsIChicHAgLSA0 KSAqIDIpOw0KPiArCQlkc3QgKz0gKGJwcCAtIDQpICogMjsNCj4gKwl9DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGF0YXJpX2RybV9mYl9jNF90b19pcGxhbjJwWChjb25zdCB2b2lk ICp2YWRkciwNCj4gKwkJCQkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsDQo+ ICsJCQkJCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqcmVjdCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg YXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtID0gYXRhcmlfZHJtX2Zyb21fZGV2KGZiLT5k ZXYpOw0KPiArCXVuc2lnbmVkIGludCB3b3JkcywgbGluZXMsIHgxLCBicHAgPSBhdGFyaV9k cm0tPmJwcDsNCj4gKwl2b2lkICpkc3QgPSBzY3JlZW5fYmFzZTsNCj4gKw0KPiArCXdvcmRz ID0gRElWX1JPVU5EX1VQKGRybV9yZWN0X3dpZHRoKHJlY3QpICsgcmVjdC0+eDEgJSAxNiwg MTYpOw0KPiArCXgxID0gcmVjdC0+eDEgJiAtMTY7DQo+ICsJbGluZXMgPSBkcm1fcmVjdF9o ZWlnaHQocmVjdCk7DQo+ICsNCj4gKwlkc3QgKz0gcmVjdC0+eTEgKiBhdGFyaV9kcm0tPnBp dGNoICsgeDEgKiBicHAgLyA4Ow0KPiArCXZhZGRyICs9IHJlY3QtPnkxICogZmItPnBpdGNo ZXNbMF0gKyB4MSAvIDI7DQo+ICsNCj4gKwl3aGlsZSAobGluZXMtLSkgew0KPiArCQlhdGFy aV9kcm1fZmJfYzRfdG9faXBsYW4ycFhfbGluZShkc3QsIHZhZGRyLCB3b3JkcywgYnBwKTsN Cj4gKwkJdmFkZHIgKz0gZmItPnBpdGNoZXNbMF07DQo+ICsJCWRzdCArPSBhdGFyaV9kcm0t PnBpdGNoOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHJtX2ZiX3JnYjU2 NV90b19yZ2IzMzJfbGluZSh1OCAqZGJ1ZiwgY29uc3QgX19sZTE2ICpzYnVmLA0KPiArCQkJ CQkgdW5zaWduZWQgaW50IHBpeGVscykNCj4gK3sNCj4gKwl1bnNpZ25lZCBpbnQgeDsNCj4g Kwl1MTYgcGl4Ow0KPiArDQo+ICsJZm9yICh4ID0gMDsgeCA8IHBpeGVsczsgeCsrKSB7DQo+ ICsJCXBpeCA9IGxlMTZfdG9fY3B1KHNidWZbeF0pOw0KPiArCQlkYnVmW3hdID0gKChwaXgg JiAweGUwMDApID4+IDgpIHwNCj4gKwkJCSAgKChwaXggJiAweDA3MDApID4+IDYpIHwNCj4g KwkJCSAgKChwaXggJiAweDAwMWMpID4+IDMpOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgYXRhcmlfZHJtX2ZiX3JnYjU2NV90b19yZ2IzMzIoY29uc3Qgdm9pZCAqdmFk ZHIsDQo+ICsJCQkJCSAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsDQo+ICsJ CQkJCSAgY29uc3Qgc3RydWN0IGRybV9yZWN0ICpyZWN0KQ0KPiArew0KPiArCXN0cnVjdCBh dGFyaV9kcm1fZGV2aWNlICphdGFyaV9kcm0gPSBhdGFyaV9kcm1fZnJvbV9kZXYoZmItPmRl dik7DQo+ICsJdW5zaWduZWQgaW50IHdvcmRzLCBwaXhlbHMsIGxpbmVzLCB4MTsNCj4gKwl2 b2lkICpkc3QgPSBzY3JlZW5fYmFzZTsNCj4gKwl2b2lkICpidWY7DQo+ICsNCj4gKwkvLyBG SVhNRSBKdXN0IGZvciB0ZXN0aW5nDQo+ICsJLy8gRklYTUUgUkdCNTY1IHNob3VsZCBvbmx5 IGJlIHVzZWQgd2l0aCBSR0I1NjUgKEZhbGNvbiBvciBBUkFueU0pDQo+ICsJYXRhcmlfZHJt X2xvYWRfY2x1dDMzMigpOw0KPiArDQo+ICsJd29yZHMgPSBESVZfUk9VTkRfVVAoZHJtX3Jl Y3Rfd2lkdGgocmVjdCkgKyByZWN0LT54MSAlIDE2LCAxNik7DQo+ICsJeDEgPSByZWN0LT54 MSAmIC0xNjsNCj4gKwlwaXhlbHMgPSB3b3JkcyAqIDE2Ow0KPiArCWxpbmVzID0gZHJtX3Jl Y3RfaGVpZ2h0KHJlY3QpOw0KPiArDQo+ICsJYnVmID0ga21hbGxvYyhwaXhlbHMsIEdGUF9L RVJORUwpOw0KPiArCWlmICghYnVmKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlkc3QgKz0g cmVjdC0+eTEgKiBhdGFyaV9kcm0tPnBpdGNoICsgeDE7DQo+ICsJdmFkZHIgKz0gcmVjdC0+ eTEgKiBmYi0+cGl0Y2hlc1swXSArIHgxICogZmItPmZvcm1hdC0+Y3BwWzBdOw0KPiArDQo+ ICsJd2hpbGUgKGxpbmVzLS0pIHsNCj4gKwkJZHJtX2ZiX3JnYjU2NV90b19yZ2IzMzJfbGlu ZShidWYsIHZhZGRyLCBwaXhlbHMpOw0KPiArCQlhdGFyaV9kcm1fZmJfYzhfdG9faXBsYW4y cDhfbGluZShkc3QsIGJ1Ziwgd29yZHMpOw0KPiArCQl2YWRkciArPSBmYi0+cGl0Y2hlc1sw XTsNCj4gKwkJZHN0ICs9IGF0YXJpX2RybS0+cGl0Y2g7DQo+ICsJfQ0KPiArDQo+ICsJa2Zy ZWUoYnVmKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHJtX2ZiX3JnYjU2NWJlX3Rv X3JnYjMzMl9saW5lKHU4ICpkYnVmLCBjb25zdCBfX2JlMTYgKnNidWYsDQo+ICsJCQkJCSAg IHVuc2lnbmVkIGludCBwaXhlbHMpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IHg7DQo+ICsJ dTE2IHBpeDsNCj4gKw0KPiArCWZvciAoeCA9IDA7IHggPCBwaXhlbHM7IHgrKykgew0KPiAr CQlwaXggPSBiZTE2X3RvX2NwdShzYnVmW3hdKTsNCj4gKwkJZGJ1Zlt4XSA9ICgocGl4ICYg MHhlMDAwKSA+PiA4KSB8DQo+ICsJCQkgICgocGl4ICYgMHgwNzAwKSA+PiA2KSB8DQo+ICsJ CQkgICgocGl4ICYgMHgwMDFjKSA+PiAzKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGF0YXJpX2RybV9mYl9yZ2I1NjViZV90b19yZ2IzMzIoY29uc3Qgdm9pZCAqdmFk ZHIsDQo+ICsJCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwNCj4g KwkJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqcmVjdCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtID0gYXRhcmlfZHJtX2Zyb21fZGV2KGZi LT5kZXYpOw0KPiArCXVuc2lnbmVkIGludCB3b3JkcywgcGl4ZWxzLCBsaW5lcywgeDE7DQo+ ICsJdm9pZCAqZHN0ID0gc2NyZWVuX2Jhc2U7DQo+ICsJdm9pZCAqYnVmOw0KPiArDQo+ICsJ Ly8gRklYTUUgSnVzdCBmb3IgdGVzdGluZw0KPiArCS8vIEZJWE1FIFJHQjU2NSBzaG91bGQg b25seSBiZSB1c2VkIHdpdGggUkdCNTY1IChGYWxjb24gb3IgQVJBbnlNKQ0KPiArCWF0YXJp X2RybV9sb2FkX2NsdXQzMzIoKTsNCj4gKw0KPiArCXdvcmRzID0gRElWX1JPVU5EX1VQKGRy bV9yZWN0X3dpZHRoKHJlY3QpICsgcmVjdC0+eDEgJSAxNiwgMTYpOw0KPiArCXgxID0gcmVj dC0+eDEgJiAtMTY7DQo+ICsJcGl4ZWxzID0gd29yZHMgKiAxNjsNCj4gKwlsaW5lcyA9IGRy bV9yZWN0X2hlaWdodChyZWN0KTsNCj4gKw0KPiArCWJ1ZiA9IGttYWxsb2MocGl4ZWxzLCBH RlBfS0VSTkVMKTsNCj4gKwlpZiAoIWJ1ZikNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJZHN0 ICs9IHJlY3QtPnkxICogYXRhcmlfZHJtLT5waXRjaCArIHgxOw0KPiArCXZhZGRyICs9IHJl Y3QtPnkxICogZmItPnBpdGNoZXNbMF0gKyB4MSAqIGZiLT5mb3JtYXQtPmNwcFswXTsNCj4g Kw0KPiArCXdoaWxlIChsaW5lcy0tKSB7DQo+ICsJCWRybV9mYl9yZ2I1NjViZV90b19yZ2Iz MzJfbGluZShidWYsIHZhZGRyLCBwaXhlbHMpOw0KPiArCQlhdGFyaV9kcm1fZmJfYzhfdG9f aXBsYW4ycDhfbGluZShkc3QsIGJ1Ziwgd29yZHMpOw0KPiArCQl2YWRkciArPSBmYi0+cGl0 Y2hlc1swXTsNCj4gKwkJZHN0ICs9IGF0YXJpX2RybS0+cGl0Y2g7DQo+ICsJfQ0KPiArDQo+ ICsJa2ZyZWUoYnVmKTsNCj4gK30NCj4gKyNlbmRpZiAvLyBFTVVMQVRFX0xFU1NFUl9GT1JN QVRTDQo+ICsNCj4gKy8vIEZJWE1FIEV4cG9ydCBpbiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Zv cm1hdF9oZWxwZXIuYz8NCj4gK3N0YXRpYyB2b2lkIGRybV9mYl94cmdiODg4OF90b19yZ2Iz MzJfbGluZSh1OCAqZGJ1ZiwgY29uc3QgX19sZTMyICpzYnVmLA0KPiArCQkJCQkgICB1bnNp Z25lZCBpbnQgcGl4ZWxzKQ0KPiArew0KPiArCXVuc2lnbmVkIGludCB4Ow0KPiArCXUzMiBw aXg7DQo+ICsNCj4gKwlmb3IgKHggPSAwOyB4IDwgcGl4ZWxzOyB4KyspIHsNCj4gKwkJcGl4 ID0gbGUzMl90b19jcHUoc2J1Zlt4XSk7DQo+ICsJCWRidWZbeF0gPSAoKHBpeCAmIDB4MDBl MDAwMDApID4+IDE2KSB8DQo+ICsJCQkgICgocGl4ICYgMHgwMDAwZTAwMCkgPj4gMTEpIHwN Cj4gKwkJCSAgKChwaXggJiAweDAwMDAwMGMwKSA+PiA2KTsNCj4gKwl9DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGF0YXJpX2RybV9mYl94cmdiODg4OF90b19yZ2IzMzIoY29uc3Qg dm9pZCAqdmFkZHIsDQo+ICsJCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwNCj4gKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fcmVjdCAqcmVjdCkNCj4gK3sN Cj4gKwlzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtID0gYXRhcmlfZHJtX2Zy b21fZGV2KGZiLT5kZXYpOw0KPiArCXVuc2lnbmVkIGludCB3b3JkcywgcGl4ZWxzLCBsaW5l cywgeDE7DQo+ICsJdm9pZCAqZHN0ID0gc2NyZWVuX2Jhc2U7DQo+ICsJdm9pZCAqYnVmOw0K PiArDQo+ICsJLy8gRklYTUUgSnVzdCBmb3IgdGVzdGluZw0KPiArCS8vIEZJWE1FIFhSR0I4 ODg4IHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCBSR0I1NjUgKEZhbGNvbiBvciBBUkFueU0p DQo+ICsJYXRhcmlfZHJtX2xvYWRfY2x1dDMzMigpOw0KPiArDQo+ICsJd29yZHMgPSBESVZf Uk9VTkRfVVAoZHJtX3JlY3Rfd2lkdGgocmVjdCkgKyByZWN0LT54MSAlIDE2LCAxNik7DQo+ ICsJeDEgPSByZWN0LT54MSAmIC0xNjsNCj4gKwlwaXhlbHMgPSB3b3JkcyAqIDE2Ow0KPiAr CWxpbmVzID0gZHJtX3JlY3RfaGVpZ2h0KHJlY3QpOw0KPiArDQo+ICsJYnVmID0ga21hbGxv YyhwaXhlbHMsIEdGUF9LRVJORUwpOw0KPiArCWlmICghYnVmKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwlkc3QgKz0gcmVjdC0+eTEgKiBhdGFyaV9kcm0tPnBpdGNoICsgeDE7DQo+ICsJ dmFkZHIgKz0gcmVjdC0+eTEgKiBmYi0+cGl0Y2hlc1swXSArIHgxICogZmItPmZvcm1hdC0+ Y3BwWzBdOw0KPiArDQo+ICsJd2hpbGUgKGxpbmVzLS0pIHsNCj4gKwkJZHJtX2ZiX3hyZ2I4 ODg4X3RvX3JnYjMzMl9saW5lKGJ1ZiwgdmFkZHIsIHBpeGVscyk7DQo+ICsJCWF0YXJpX2Ry bV9mYl9jOF90b19pcGxhbjJwOF9saW5lKGRzdCwgYnVmLCB3b3Jkcyk7DQo+ICsJCXZhZGRy ICs9IGZiLT5waXRjaGVzWzBdOw0KPiArCQlkc3QgKz0gYXRhcmlfZHJtLT5waXRjaDsNCj4g Kwl9DQo+ICsNCj4gKwlrZnJlZShidWYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0 YXJpX2RybV9mYl9ibGl0X3JlY3QoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs DQo+ICsJCQkJICBjb25zdCBzdHJ1Y3QgaW9zeXNfbWFwICptYXAsDQo+ICsJCQkJICBzdHJ1 Y3QgZHJtX3JlY3QgKnJlY3QpDQo+ICt7DQo+ICsJc3RydWN0IGF0YXJpX2RybV9kZXZpY2Ug KmF0YXJpX2RybSA9IGF0YXJpX2RybV9mcm9tX2RldihmYi0+ZGV2KTsNCj4gKwl2b2lkICp2 bWFwID0gbWFwLT52YWRkcjsgLyogVE9ETzogVXNlIG1hcHBpbmcgYWJzdHJhY3Rpb24gcHJv cGVybHkgKi8NCj4gKwlzdHJ1Y3QgaW9zeXNfbWFwIGRzdCA9IElPU1lTX01BUF9JTklUX1ZB RERSKHNjcmVlbl9iYXNlKTsNCj4gKwlpbnQgaWR4Ow0KPiArDQo+ICsJaWYgKCFkcm1fZGV2 X2VudGVyKCZhdGFyaV9kcm0tPmRldiwgJmlkeCkpDQo+ICsJCXJldHVybiAtRU5PREVWOw0K PiArDQo+ICsJLy8gRklYTUUgRG8gd2UgbmVlZCB0byBzdXBwb3J0IGNvbnZlcnNpb24gZnJv bSBDbiB0byBDbT8NCj4gKwkvLyBGSVhNRSBPbmx5IHVwIChuIDwgbSk/DQo+ICsJLy8gRklY TUUgQWxzbyBkb3duIChuID4gbSk/DQo+ICsJLy8gRklYTUUgTm8sIGp1c3QgZm9yIHRlc3Rp bmcNCj4gKwlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgew0KPiArCWNhc2UgRFJNX0ZP Uk1BVF9DMToNCj4gKyNpZmRlZiBFTVVMQVRFX0xFU1NFUl9GT1JNQVRTDQo+ICsJCWlmIChh dGFyaV9kcm0tPmJwcCA+IDEgJiYgYXRhcmlfZHJtLT5icHAgPD0gOCkgew0KPiArCQkJLy8g RklYTUUgRm9yIHRlc3Rpbmcgb25seQ0KPiArCQkJYXRhcmlfZHJtX2ZiX2MxX3RvX2lwbGFu MnBYKHZtYXAsIGZiLCByZWN0KTsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsjZW5kaWYg Ly8gRU1VTEFURV9MRVNTRVJfRk9STUFUUw0KPiArDQo+ICsJCWlmIChhdGFyaV9kcm0tPmJw cCAhPSAxKQ0KPiArCQkJZ290byB1bnN1cHBvcnRlZDsNCj4gKw0KPiArCQkvLyBGSVhNRSBs aWtlIGJwcD0xNiBhZnRlciBhbGlnbmluZyByZWN0IHdpdGggcGl4ZWwgZ3JpZA0KPiArCQlh dGFyaV9kcm1fZmJfYzFfdG9faXBsYW4ycDEodm1hcCwgZmIsIHJlY3QpOw0KPiArCQlicmVh azsNCj4gKw0KPiArCWNhc2UgRFJNX0ZPUk1BVF9DMjoNCj4gKyNpZmRlZiBFTVVMQVRFX0xF U1NFUl9GT1JNQVRTDQo+ICsJCWlmIChhdGFyaV9kcm0tPmJwcCA+IDIgJiYgYXRhcmlfZHJt LT5icHAgPD0gOCkgew0KPiArCQkJLy8gRklYTUUgRm9yIHRlc3Rpbmcgb25seQ0KPiArCQkJ YXRhcmlfZHJtX2ZiX2MyX3RvX2lwbGFuMnBYKHZtYXAsIGZiLCByZWN0KTsNCj4gKwkJCWJy ZWFrOw0KPiArCQl9DQo+ICsjZW5kaWYgLy8gRU1VTEFURV9MRVNTRVJfRk9STUFUUw0KPiAr DQo+ICsJCWlmIChhdGFyaV9kcm0tPmJwcCAhPSAyKQ0KPiArCQkJZ290byB1bnN1cHBvcnRl ZDsNCj4gKw0KPiArCQlhdGFyaV9kcm1fZmJfYzJfdG9faXBsYW4ycDIodm1hcCwgZmIsIHJl Y3QpOw0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgRFJNX0ZPUk1BVF9DNDoNCj4gKyNp ZmRlZiBFTVVMQVRFX0xFU1NFUl9GT1JNQVRTDQo+ICsJCWlmIChhdGFyaV9kcm0tPmJwcCA+ IDQgJiYgYXRhcmlfZHJtLT5icHAgPD0gOCkgew0KPiArCQkJLy8gRklYTUUgRm9yIHRlc3Rp bmcgb25seQ0KPiArCQkJYXRhcmlfZHJtX2ZiX2M0X3RvX2lwbGFuMnBYKHZtYXAsIGZiLCBy ZWN0KTsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsjZW5kaWYgLy8gRU1VTEFURV9MRVNT RVJfRk9STUFUUw0KPiArDQo+ICsJCWlmIChhdGFyaV9kcm0tPmJwcCAhPSA0KQ0KPiArCQkJ Z290byB1bnN1cHBvcnRlZDsNCj4gKw0KPiArCQlhdGFyaV9kcm1fZmJfYzRfdG9faXBsYW4y cDQodm1hcCwgZmIsIHJlY3QpOw0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgRFJNX0ZP Uk1BVF9DODoNCj4gKwkJaWYgKGF0YXJpX2RybS0+YnBwICE9IDgpDQo+ICsJCQlnb3RvIHVu c3VwcG9ydGVkOw0KPiArDQo+ICsJCWF0YXJpX2RybV9mYl9jOF90b19pcGxhbjJwOCh2bWFw LCBmYiwgcmVjdCk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBEUk1fRk9STUFUX1JH QjU2NToNCj4gKwkJc3dpdGNoIChhdGFyaV9kcm0tPmJwcCkgew0KPiArI2lmZGVmIEVNVUxB VEVfTEVTU0VSX0ZPUk1BVFMNCj4gKwkJY2FzZSA4Og0KPiArCQkJLy8gRklYTUUgRm9yIHRl c3Rpbmcgb25seQ0KPiArCQkJYXRhcmlfZHJtX2ZiX3JnYjU2NV90b19yZ2IzMzIodm1hcCwg ZmIsIHJlY3QpOw0KPiArCQkJYnJlYWs7DQo+ICsjZW5kaWYgLy8gRU1VTEFURV9MRVNTRVJf Rk9STUFUUw0KPiArDQo+ICsJCWNhc2UgMTY6DQo+ICsJCQlpb3N5c19tYXBfaW5jcigmZHN0 LA0KPiArCQkJCSAgICAgICBkcm1fZmJfY2xpcF9vZmZzZXQoYXRhcmlfZHJtLT5waXRjaCwN Cj4gKwkJCQkJCQkgIGZiLT5mb3JtYXQsIHJlY3QpKTsNCj4gKwkJCWRybV9mYl9zd2FiKCZk c3QsICZhdGFyaV9kcm0tPnBpdGNoLCBtYXAsIGZiLCByZWN0LA0KPiArCQkJCSAgICB0cnVl KTsNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWRlZmF1bHQ6DQo+ICsJCQlnb3RvIHVuc3Vw cG9ydGVkOw0KPiArCQl9DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBEUk1fRk9STUFU X1JHQjU2NSB8IERSTV9GT1JNQVRfQklHX0VORElBTjoNCj4gKwkJc3dpdGNoIChhdGFyaV9k cm0tPmJwcCkgew0KPiArI2lmZGVmIEVNVUxBVEVfTEVTU0VSX0ZPUk1BVFMNCj4gKwkJY2Fz ZSA4Og0KPiArCQkJLy8gRklYTUUgRm9yIHRlc3Rpbmcgb25seQ0KPiArCQkJYXRhcmlfZHJt X2ZiX3JnYjU2NWJlX3RvX3JnYjMzMih2bWFwLCBmYiwgcmVjdCk7DQo+ICsJCQlicmVhazsN Cj4gKyNlbmRpZiAvLyBFTVVMQVRFX0xFU1NFUl9GT1JNQVRTDQo+ICsNCj4gKwkJY2FzZSAx NjoNCj4gKwkJCWlvc3lzX21hcF9pbmNyKCZkc3QsDQo+ICsJCQkJICAgICAgIGRybV9mYl9j bGlwX29mZnNldChhdGFyaV9kcm0tPnBpdGNoLA0KPiArCQkJCQkJCSAgZmItPmZvcm1hdCwg cmVjdCkpOw0KPiArCQkJZHJtX2ZiX21lbWNweSgmZHN0LCAmYXRhcmlfZHJtLT5waXRjaCwg bWFwLCBmYiwgcmVjdCk7DQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQlkZWZhdWx0Og0KPiAr CQkJZ290byB1bnN1cHBvcnRlZDsNCj4gKwkJfQ0KPiArCQlicmVhazsNCj4gKw0KPiArCWNh c2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoNCj4gKwkJc3dpdGNoIChhdGFyaV9kcm0tPmJwcCkg ew0KPiArCQljYXNlIDg6DQo+ICsJCQlhdGFyaV9kcm1fZmJfeHJnYjg4ODhfdG9fcmdiMzMy KHZtYXAsIGZiLCByZWN0KTsNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWNhc2UgMTY6DQo+ ICsJCQlpb3N5c19tYXBfaW5jcigmZHN0LA0KPiArCQkJCSAgICAgICBkcm1fZmJfY2xpcF9v ZmZzZXQoYXRhcmlfZHJtLT5waXRjaCwNCj4gKwkJCQkJCQkgIGZiLT5mb3JtYXQsIHJlY3Qp KTsNCj4gKwkJCWRybV9mYl94cmdiODg4OF90b19yZ2I1NjUoJmRzdCwgJmF0YXJpX2RybS0+ cGl0Y2gsIG1hcCwNCj4gKwkJCQkJCSAgZmIsIHJlY3QsIGZhbHNlKTsNCj4gKwkJCWJyZWFr Ow0KPiArDQo+ICsJCWRlZmF1bHQ6DQo+ICsJCQlnb3RvIHVuc3VwcG9ydGVkOw0KPiArCQl9 DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJZGVmYXVsdDoNCj4gKwkJZHJtX1dBUk5fT05DRShm Yi0+ZGV2LCAxLCAiRm9ybWF0ICVwNGNjIG5vdCBzdXBwb3J0ZWRcbiIsDQo+ICsJCQkgICAg ICBmYi0+Zm9ybWF0KTsNCj4gKwkJZ290byB1bnN1cHBvcnRlZDsNCj4gKwl9DQo+ICsNCj4g K3Vuc3VwcG9ydGVkOg0KPiArCWRybV9kZXZfZXhpdChpZHgpOw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGF0YXJpX2RybV9mYl9ibGl0X2Z1bGxzY3JlZW4o c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsDQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBpb3N5 c19tYXAgKm1hcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3JlY3QgZnVsbHNjcmVlbiA9IHsN Cj4gKwkJLngxID0gMCwNCj4gKwkJLngyID0gZmItPndpZHRoLA0KPiArCQkueTEgPSAwLA0K PiArCQkueTIgPSBmYi0+aGVpZ2h0LA0KPiArCX07DQo+ICsJcmV0dXJuIGF0YXJpX2RybV9m Yl9ibGl0X3JlY3QoZmIsIG1hcCwgJmZ1bGxzY3JlZW4pOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IGF0YXJpX2RybV9jaGVja19zaXplKGludCB3aWR0aCwgaW50IGhlaWdodCwNCj4g KwkJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikNCj4gK3sNCj4gKwlpbnQgcGl0Y2gg PSB3aWR0aDsNCj4gKw0KPiArCWlmIChmYikNCj4gKwkJcGl0Y2ggPSBmYi0+cGl0Y2hlc1sw XTsNCj4gKw0KPiArCWlmIChmYiAmJiB3aWR0aCA+IGZiLT5kZXYtPm1vZGVfY29uZmlnLm1h eF93aWR0aCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAocGl0Y2ggKiBo ZWlnaHQgPiBzY3JlZW5fbGVuKQ0KPiArCQl7fSAvL0ZJWE1FIHJldHVybiAtRUlOVkFMOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0K PiArLyogYXRhcmlfZHJtIGNvbm5lY3RvcgkJCQkJCSAgICAgICovDQo+ICsNCj4gK3N0YXRp YyBpbnQgYXRhcmlfZHJtX2Nvbm5fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uKQ0KPiArew0KPiArCXN0cnVjdCBhdGFyaV9kcm1fZGV2aWNlICphdGFyaV9kcm0gPSBh dGFyaV9kcm1fZnJvbV9jb25uKGNvbm4pOw0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjb25uLT5kZXY7DQo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7DQo+ICsJ dW5zaWduZWQgaW50IGkgPSAwOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoYXRhcmlfZHJtX21vZGVzKTsgaSsrKSB7DQo+ICsJCW1vZGUgPSBkcm1fbW9kZV9kdXBs aWNhdGUoZGV2LCAmYXRhcmlfZHJtX21vZGVzW2ldKTsNCj4gKwkJaWYgKCFtb2RlKQ0KPiAr CQkJYnJlYWs7DQo+ICsNCj4gKwkJaWYgKGkgPT0gYXRhcmlfZHJtLT5kZWZtb2RlKQ0KPiAr CQkJbW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsNCj4gKw0KPiArCQlk cm1fbW9kZV9wcm9iZWRfYWRkKGNvbm4sIG1vZGUpOw0KPiArCX0NCj4gKw0KPiArCXJldHVy biBpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGF0YXJpX2RybV9jb25uX21vZGVfdmFs aWQNCj4gKyAqDQo+ICsgKiBDYWxsYmFjayB0byB2YWxpZGF0ZSBhIG1vZGUgZm9yIGEgY29u bmVjdG9yLCBpcnJlc3BlY3RpdmUgb2YgdGhlDQo+ICsgKiBzcGVjaWZpYyBkaXNwbGF5IGNv bmZpZ3VyYXRpb24uDQo+ICsgKg0KPiArICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IHRo ZSBwcm9iZSBoZWxwZXJzIHRvIGZpbHRlciB0aGUgbW9kZSBsaXN0DQo+ICsgKiAod2hpY2gg aXMgdXN1YWxseSBkZXJpdmVkIGZyb20gdGhlIEVESUQgZGF0YSBibG9jayBmcm9tIHRoZSBz aW5rKS4NCj4gKyAqIFNlZSBlLmcuIGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcygpLg0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW9uYWwuDQo+ ICsgKg0KPiArICogTk9URToNCj4gKyAqDQo+ICsgKiBUaGlzIG9ubHkgZmlsdGVycyB0aGUg bW9kZSBsaXN0IHN1cHBsaWVkIHRvIHVzZXJzcGFjZSBpbiB0aGUNCj4gKyAqIEdFVENPTk5F Q1RPUiBJT0NUTC4gQ29tcGFyZWQgdG8gJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5tb2Rl X3ZhbGlkLA0KPiArICogJmRybV9jcnRjX2hlbHBlcl9mdW5jcy5tb2RlX3ZhbGlkIGFuZCAm ZHJtX2JyaWRnZV9mdW5jcy5tb2RlX3ZhbGlkLA0KPiArICogd2hpY2ggYXJlIGFsc28gY2Fs bGVkIGJ5IHRoZSBhdG9taWMgaGVscGVycyBmcm9tDQo+ICsgKiBkcm1fYXRvbWljX2hlbHBl cl9jaGVja19tb2Rlc2V0KCkuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBmb3JjZSBhbmQN Cj4gKyAqIGlnbm9yZSBzaW5rIGNvbnN0cmFpbnQgKGxpa2UgdGhlIHBpeGVsIGNsb2NrIGxp bWl0cyBpbiB0aGUgc2NyZWVuJ3MNCj4gKyAqIEVESUQpLCB3aGljaCBpcyB1c2VmdWwgZm9y IGUuZy4gdGVzdGluZywgb3Igd29ya2luZyBhcm91bmQgYSBicm9rZW4NCj4gKyAqIEVESUQu IEFueSBzb3VyY2UgaGFyZHdhcmUgY29uc3RyYWludCAod2hpY2ggYWx3YXlzIG5lZWQgdG8g YmUNCj4gKyAqIGVuZm9yY2VkKSB0aGVyZWZvcmUgc2hvdWxkIGJlIGNoZWNrZWQgaW4gb25l IG9mIHRoZSBhYm92ZSBjYWxsYmFja3MsDQo+ICsgKiBhbmQgbm90IHRoaXMgb25lIGhlcmUu DQo+ICsgKg0KPiArICogVG8gYXZvaWQgcmFjZXMgd2l0aCBjb25jdXJyZW50IGNvbm5lY3Rv ciBzdGF0ZSB1cGRhdGVzLCB0aGUgaGVscGVyDQo+ICsgKiBsaWJyYXJpZXMgYWx3YXlzIGNh bGwgdGhpcyB3aXRoIHRoZSAmZHJtX21vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgNCj4g KyAqIGhlbGQuIEJlY2F1c2Ugb2YgdGhpcyBpdCdzIHNhZmUgdG8gaW5zcGVjdCAmZHJtX2Nv bm5lY3Rvci0+c3RhdGUuDQo+ICsgKg0KPiArICogUkVUVVJOUzoNCj4gKyAqDQo+ICsgKiBF aXRoZXIgJmRybV9tb2RlX3N0YXR1cy5NT0RFX09LIG9yIG9uZSBvZiB0aGUgZmFpbHVyZSBy ZWFzb25zIGluICZlbnVtDQo+ICsgKiBkcm1fbW9kZV9zdGF0dXMuDQo+ICsgKi8NCj4gK3N0 YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBhdGFyaV9kcm1fY29ubl9tb2RlX3ZhbGlkKA0K PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkNCj4gK3sNCj4gKwkvLyBGSVhNRQ0KPiArCXJldHVybiBNT0RFX09LOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzIGF0YXJpX2RybV9jb25uX2hlbHBlcl9mdW5jcyA9IHsNCj4gKwkuZ2V0X21vZGVzID0g YXRhcmlfZHJtX2Nvbm5fZ2V0X21vZGVzLA0KPiArCS5tb2RlX3ZhbGlkID0gYXRhcmlfZHJt X2Nvbm5fbW9kZV92YWxpZCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9mdW5jcyBhdGFyaV9kcm1fY29ubl9mdW5jcyA9IHsNCj4gKwkuZmls bF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywNCj4g KwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwNCj4gKwkucmVzZXQgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsDQo+ICsJLmF0b21pY19kdXBsaWNhdGVf c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLA0K PiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9kZXN0cm95X3N0YXRlLA0KPiArfTsNCj4gKw0KPiArLy8gRklYTUUgY3JlYXRlIGR5bmFt aWNhbGx5IGZyb20gYXRhcmlfZHJtX21vZGVzW10/DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9uYW1lZF9tb2RlIGF0YXJpX2RybV9uYW1lZF9tb2Rlc1tdID0NCj4gK3sNCj4gKwl7 IC5uYW1lID0gInN0LWxvdyIgfSwNCj4gKwl7IC5uYW1lID0gInN0LW1pZCIgfSwNCj4gKwl7 IC5uYW1lID0gInN0LWhpZ2giIH0sDQo+ICsJeyAubmFtZSA9ICJ0dC1sb3ciIH0sDQo+ICsJ eyAubmFtZSA9ICJ0dC1taWQiIH0sDQo+ICsJeyAubmFtZSA9ICJ0dC1oaWdoIiB9LA0KPiAr CXsgLm5hbWUgPSAidmdhIiB9LA0KPiArCXsgLm5hbWUgPSAidmdhNzAiIH0sDQo+ICsJeyAu bmFtZSA9ICJxdmdhIiB9LA0KPiArCXsgLm5hbWUgPSAiaHZnYSIgfSwNCj4gKwl7IC5uYW1l ID0gImZhbGgiIH0sDQo+ICsJeyAvKiBzZW50aW5lbCAqLyB9DQo+ICt9Ow0KPiArDQo+ICtz dGF0aWMgaW50IGF0YXJpX2RybV9jb25uX2luaXQoc3RydWN0IGF0YXJpX2RybV9kZXZpY2Ug KmF0YXJpX2RybSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiA9ICZh dGFyaV9kcm0tPmNvbm47DQo+ICsJY29uc3Qgc3RydWN0IGRybV9jbWRsaW5lX21vZGUgKmNt ZGxpbmVfbW9kZTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJLy8gRklYTUUgRGVwZW5kcyBv biBtb25pdG9yIHR5cGUuIEhhbmRsZSBpbiAuY29uZmlnX2luaXQoKT8NCj4gKwljb25uLT5p bnRlcmxhY2VfYWxsb3dlZCA9IHRydWU7DQo+ICsJY29ubi0+ZG91Ymxlc2Nhbl9hbGxvd2Vk ID0gdHJ1ZTsNCj4gKwljb25uLT5uYW1lZF9tb2RlcyA9IGF0YXJpX2RybV9uYW1lZF9tb2Rl czsNCj4gKw0KPiArCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uLCAmYXRhcmlfZHJt X2Nvbm5faGVscGVyX2Z1bmNzKTsNCj4gKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoJmF0 YXJpX2RybS0+ZGV2LCBjb25uLCAmYXRhcmlfZHJtX2Nvbm5fZnVuY3MsDQo+ICsJCQkJIERS TV9NT0RFX0NPTk5FQ1RPUl9WR0EpOw0KPiArDQo+ICsJY21kbGluZV9tb2RlID0gJmNvbm4t PmNtZGxpbmVfbW9kZTsNCj4gKwlpZiAoY21kbGluZV9tb2RlLT5zcGVjaWZpZWQpIHsNCj4g KwkJcHJfaW5mbygiICAgIG5hbWUgJXNcbiIsIGNtZGxpbmVfbW9kZS0+bmFtZSk7DQo+ICsJ CXByX2luZm8oIiAgICByZXNvbHV0aW9uICV1eCV1XG4iLCBjbWRsaW5lX21vZGUtPnhyZXMs DQo+ICsJCQljbWRsaW5lX21vZGUtPnlyZXMpOw0KPiArCX0NCj4gKwlpZiAoY21kbGluZV9t b2RlLT5icHBfc3BlY2lmaWVkKQ0KPiArCQlwcl9pbmZvKCIgICAgYnBwICV1XG4iLCBjbWRs aW5lX21vZGUtPmJwcCk7DQo+ICsJaWYgKGNtZGxpbmVfbW9kZS0+cmVmcmVzaF9zcGVjaWZp ZWQpDQo+ICsJCXByX2luZm8oIiAgICByZWZyZXNoICV1XG4iLCBjbWRsaW5lX21vZGUtPnJl ZnJlc2gpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArLy8gRklYTUUg aGVscGVycyBmcm9tDQo+ICsvLyAiW1BBVENIIHYyIDUvMTVdIGRybS9mYmNvbnY6IEFkZCBE Uk0gPC0+IGZiZGV2IHBpeGVsLWZvcm1hdCBjb252ZXJzaW9uIg0KPiArLy8gYnkgVGhvbWFz IFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+DQoNCkFsbCB0aGVzZSBGSVhNRXMg d2lsbCBuZWVkIHRvIGJlIHJlc29sdmVkLg0KDQo+ICsvLyBGSVhNRSBoZWxwZXJzIGZyb20N Cj4gKy8vICJbUEFUQ0ggdjIgNi8xNV0gZHJtL2ZiY29udjogQWRkIG1vZGUgY29udmVyc2lv biBEUk0gPC0+IGZiZGV2Ig0KPiArLy8gYnkgVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJt YW5uQHN1c2UuZGU+DQo+ICsvKioNCj4gKyAqIGRybV9tb2RlX3VwZGF0ZV9mcm9tX2ZiX3Zp ZGVvbW9kZSAtIFNldHMgYSBkcm1fZGlzcGxheSBtb2RlIHN0cnVlY3R1cmUNCj4gKyAqCWZy b20gYW4gZmJfdmlkZW9tb2RlIHN0cnVjdHVyZQ0KPiArICogQG1vZGU6CXRoZSBEUk0gZGlz cGxheSBtb2RlIHN0cnVjdHVyZSB0byB1cGRhdGUNCj4gKyAqIEBmYl9tb2RlOglhbiBmYl92 aWRlb21vZGUgc3RydWN0dXJlDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9tb2RlX3Vw ZGF0ZV9mcm9tX2ZiX3ZpZGVvbW9kZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwN Cj4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqZmJfbW9kZSkNCj4g K3sNCj4gKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVI7DQo+ICsNCj4gKwlt b2RlLT5jbG9jayA9IFBJQ09TMktIWihmYl9tb2RlLT5waXhjbG9jayk7DQo+ICsNCj4gKwlt b2RlLT5oZGlzcGxheSA9IGZiX21vZGUtPnhyZXM7DQo+ICsJbW9kZS0+aHN5bmNfc3RhcnQg PSBtb2RlLT5oZGlzcGxheSArIGZiX21vZGUtPnJpZ2h0X21hcmdpbjsNCj4gKwltb2RlLT5o c3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIGZiX21vZGUtPmhzeW5jX2xlbjsNCj4g Kwltb2RlLT5odG90YWwgPSBtb2RlLT5oc3luY19lbmQgKyBmYl9tb2RlLT5sZWZ0X21hcmdp bjsNCj4gKwltb2RlLT5oc2tldyA9IDA7DQo+ICsNCj4gKwltb2RlLT52ZGlzcGxheSA9IGZi X21vZGUtPnlyZXM7DQo+ICsJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSAr IGZiX21vZGUtPmxvd2VyX21hcmdpbjsNCj4gKwltb2RlLT52c3luY19lbmQgPSBtb2RlLT52 c3luY19zdGFydCArIGZiX21vZGUtPnZzeW5jX2xlbjsNCj4gKwltb2RlLT52dG90YWwgPSBt b2RlLT52c3luY19lbmQgKyBmYl9tb2RlLT51cHBlcl9tYXJnaW47DQo+ICsJbW9kZS0+dnNj YW4gPSAwOw0KPiArDQo+ICsJbW9kZS0+ZmxhZ3MgPSAwOw0KPiArDQo+ICsJaWYgKGZiX21v ZGUtPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkNCj4gKwkJbW9kZS0+ZmxhZ3MgfD0g RFJNX01PREVfRkxBR19QSFNZTkM7DQo+ICsJZWxzZQ0KPiArCQltb2RlLT5mbGFncyB8PSBE Uk1fTU9ERV9GTEFHX05IU1lOQzsNCj4gKw0KPiArCWlmIChmYl9tb2RlLT5zeW5jICYgRkJf U1lOQ19WRVJUX0hJR0hfQUNUKQ0KPiArCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFH X1BWU1lOQzsNCj4gKwllbHNlDQo+ICsJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdf TlZTWU5DOw0KPiArDQo+ICsJaWYgKGZiX21vZGUtPnN5bmMgJiBGQl9TWU5DX0NPTVBfSElH SF9BQ1QpDQo+ICsJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfQ1NZTkMgfCBEUk1f TU9ERV9GTEFHX1BDU1lOQzsNCj4gKw0KPiArCWlmIChmYl9tb2RlLT52bW9kZSAmIEZCX1ZN T0RFX0lOVEVSTEFDRUQpDQo+ICsJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5U RVJMQUNFOw0KPiArDQo+ICsJaWYgKGZiX21vZGUtPnZtb2RlICYgRkJfVk1PREVfRE9VQkxF KQ0KPiArCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47DQo+ICsNCj4g Kwltb2RlLT53aWR0aF9tbSA9IDA7DQo+ICsJbW9kZS0+aGVpZ2h0X21tID0gMDsNCj4gKw0K PiArCS8qIGZpbmFsIHN0ZXA7IGRlcGVuZHMgb24gcHJldmlvdXMgc2V0dXAgKi8NCj4gKwlp ZiAoZmJfbW9kZS0+bmFtZSkgew0KPiArCQlzdHJuY3B5KG1vZGUtPm5hbWUsIGZiX21vZGUt Pm5hbWUsIHNpemVvZihtb2RlLT5uYW1lKSAtIDEpOw0KPiArCQltb2RlLT5uYW1lW3NpemVv Zihtb2RlLT5uYW1lKSAtIDFdID0gJ1wwJzsNCj4gKwl9IGVsc2Ugew0KPiArCQlkcm1fbW9k ZV9zZXRfbmFtZShtb2RlKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJt X21vZGVfdXBkYXRlX2Zyb21fZmJfdmFyX3NjcmVlbmluZm8gLSBTZXRzIGEgZHJtX2Rpc3Bs YXkgbW9kZSBzdHJ1Y3R1cmUNCj4gKyAqCWZyb20gYW4gZmJfdmFyX3NjcmVlbm1vZGUgc3Ry dWN0dXJlDQo+ICsgKiBAbW9kZToJdGhlIERSTSBkaXNwbGF5IG1vZGUgc3RydWN0dXJlIHRv IHVwZGF0ZQ0KPiArICogQGZiX3ZhcjoJYW4gZmJfdmFyX3NjcmVlbmluZm8gc3RydWN0dXJl DQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9tb2RlX3VwZGF0ZV9mcm9tX2ZiX3Zhcl9z Y3JlZW5pbmZvKA0KPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLCBjb25zdCBz dHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZiX3ZhcikNCj4gK3sNCj4gKwlzdHJ1Y3QgZmJf dmlkZW9tb2RlIGZiX21vZGU7DQo+ICsNCj4gKwlmYl92YXJfdG9fdmlkZW9tb2RlKCZmYl9t b2RlLCBmYl92YXIpOw0KPiArCWRybV9tb2RlX3VwZGF0ZV9mcm9tX2ZiX3ZpZGVvbW9kZSht b2RlLCAmZmJfbW9kZSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2ZiY29udl9p bml0X2ZiX3ZpZGVvbW9kZV9mcm9tX21vZGUgLSBpbml0aWFsaXplcyBhbiBmYl92aWRlb21v ZGUNCj4gKyAqCXN0cnVjdHVyZSBmcm9tIGEgRFJNIGRpc3BsYXkgbW9kZQ0KPiArICogQGZi X21vZGU6CXRoZSBmYl92aWRlb21vZGUgc3RydWN0dXJlIHRvIHVwZGF0ZQ0KPiArICogQG1v ZGU6CWEgRFJNIGRpc3BsYXkgbW9kZQ0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBkcm1fZmJj b252X2luaXRfZmJfdmlkZW9tb2RlX2Zyb21fbW9kZSgNCj4gKwlzdHJ1Y3QgZmJfdmlkZW9t b2RlICpmYl9tb2RlLCBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4g K3sNCj4gKwltZW1zZXQoZmJfbW9kZSwgMCwgc2l6ZW9mKCpmYl9tb2RlKSk7DQo+ICsNCj4g KwlmYl9tb2RlLT5uYW1lID0gTlVMTDsNCj4gKwlmYl9tb2RlLT5yZWZyZXNoID0gZHJtX21v ZGVfdnJlZnJlc2gobW9kZSk7DQo+ICsJZmJfbW9kZS0+eHJlcyA9IG1vZGUtPmhkaXNwbGF5 Ow0KPiArCWZiX21vZGUtPnlyZXMgPSBtb2RlLT52ZGlzcGxheTsNCj4gKwlmYl9tb2RlLT5w aXhjbG9jayA9IEtIWjJQSUNPUyhtb2RlLT5jbG9jayk7DQo+ICsJZmJfbW9kZS0+bGVmdF9t YXJnaW4gPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7DQo+ICsJZmJfbW9kZS0+ cmlnaHRfbWFyZ2luID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsNCj4g KwlmYl9tb2RlLT51cHBlcl9tYXJnaW4gPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19l bmQ7DQo+ICsJZmJfbW9kZS0+bG93ZXJfbWFyZ2luID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBt b2RlLT52ZGlzcGxheTsNCj4gKwlmYl9tb2RlLT5oc3luY19sZW4gPSBtb2RlLT5oc3luY19l bmQgLSBtb2RlLT5oc3luY19zdGFydDsNCj4gKwlmYl9tb2RlLT52c3luY19sZW4gPSBtb2Rl LT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsNCj4gKw0KPiArCWZiX21vZGUtPnN5 bmMgPSAwOw0KPiArCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQ0K PiArCQlmYl9tb2RlLT5zeW5jIHw9IEZCX1NZTkNfSE9SX0hJR0hfQUNUOw0KPiArCWlmICht b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQ0KPiArCQlmYl9tb2RlLT5zeW5j IHw9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVDsNCj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiAoRFJN X01PREVfRkxBR19DU1lOQyB8IERSTV9NT0RFX0ZMQUdfUENTWU5DKSkNCj4gKwkJZmJfbW9k ZS0+c3luYyB8PSBGQl9TWU5DX0NPTVBfSElHSF9BQ1Q7DQo+ICsNCj4gKwlmYl9tb2RlLT52 bW9kZSA9IDA7DQo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxB Q0UpDQo+ICsJCWZiX21vZGUtPnZtb2RlIHw9IEZCX1ZNT0RFX0lOVEVSTEFDRUQ7DQo+ICsJ aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQ0KPiArCQlmYl9tb2Rl LT52bW9kZSB8PSBGQl9WTU9ERV9ET1VCTEU7DQo+ICsNCj4gKwlmYl9tb2RlLT5mbGFnID0g MDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZmJjb252X3VwZGF0ZV9mYl92YXJf c2NyZWVuaW5mb19mcm9tX21vZGUgLSB1cGRhdGVzIGFuDQo+ICsgKglmYl92YXJfc2NyZWVu aW5mbyBzdHJ1Y3R1cmUgZnJvbSBhIERSTSBkaXNwbGF5IG1vZGUNCj4gKyAqIEBmYl92YXI6 CXRoZSBmYl92YXJfc2NyZWVuaW5mbyBzdHJ1Y3R1cmUgdG8gdXBkYXRlDQo+ICsgKiBAbW9k ZToJYSBEUk0gZGlzcGxheSBtb2RlDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9mYmNv bnZfdXBkYXRlX2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fbW9kZSgNCj4gKwlzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gKmZiX3ZhciwgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpDQo+ICt7DQo+ICsJc3RydWN0IGZiX3ZpZGVvbW9kZSBmYl9tb2RlOw0KPiArDQo+ ICsJZHJtX2ZiY29udl9pbml0X2ZiX3ZpZGVvbW9kZV9mcm9tX21vZGUoJmZiX21vZGUsIG1v ZGUpOw0KPiArCWZiX3ZpZGVvbW9kZV90b192YXIoZmJfdmFyLCAmZmJfbW9kZSk7DQo+ICsN Cj4gKwlmYl92YXItPmhlaWdodCA9IG1vZGUtPmhlaWdodF9tbTsNCj4gKwlmYl92YXItPndp ZHRoID0gbW9kZS0+d2lkdGhfbW07DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2Zi Y29udl9pbml0X2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fbW9kZSAtIGluaXRpYWxpemUgYW4N Cj4gKyAqCWZiX3Zhcl9zY3JlZW5pbmZvIHN0cnVjdHVyZSBmcm9tIGEgRFJNIGRpc3BsYXkg bW9kZQ0KPiArICogQGZiX3ZhcjoJdGhlIGZiX3Zhcl9zY3JlZW5pbmZvIHN0cnVjdHVyZSB0 byB1cGRhdGUNCj4gKyAqIEBtb2RlOglhIERSTSBkaXNwbGF5IG1vZGUNCj4gKyAqDQo+ICsg KiBUaGlzIGlzIHRoZSBzYW1lIGFzIGRybV9mYmNvbnZfdXBkYXRlX2ZiX3Zhcl9zY3JlZW5p bmZvX2Zyb21fbW9kZSgpLCBidXQNCj4gKyAqIGZpcnN0IGNsZWFycyB0aGUgZmJfc2NyZWVu aW5mbyBzdHJ1Y3R1cmUgdG8gMC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZHJtX2ZiY29u dl9pbml0X2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fbW9kZSgNCj4gKwlzdHJ1Y3QgZmJfdmFy X3NjcmVlbmluZm8gKmZiX3ZhciwgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpDQo+ICt7DQo+ICsJbWVtc2V0KGZiX3ZhciwgMCwgc2l6ZW9mKCpmYl92YXIpKTsNCj4g Kwlkcm1fZmJjb252X3VwZGF0ZV9mYl92YXJfc2NyZWVuaW5mb19mcm9tX21vZGUoZmJfdmFy LCBtb2RlKTsNCj4gK30NCj4gKw0KPiArLy8gRklYTUUgaGVscGVycyBmcm9tDQo+ICsvLyAi W1BBVENIIHYyIDgvMTVdIGRybS9mYmNvbnY6IEFkZCBwbGFuZS1zdGF0ZSBjaGVjayBhbmQg dXBkYXRlIg0KPiArLy8gYnkgVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2Uu ZGU+DQo+ICtzdGF0aWMgdm9pZCBkcm1fZmJjb252X3VwZGF0ZV9mYl92YXJfc2NyZWVuaW5m b19mcm9tX2NydGNfc3RhdGUoDQo+ICsJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92 YXIsIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkNCj4gK3sNCj4gKwljb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZjcnRjX3N0YXRlLT5hZGp1c3Rl ZF9tb2RlOw0KPiArDQo+ICsJZHJtX2ZiY29udl91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9f ZnJvbV9tb2RlKGZiX3ZhciwgbW9kZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZHJt X2ZiY29udl91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9mcmFtZWJ1ZmZlcigNCj4g KwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpDQo+ICt7DQo+ICsJc3dpdGNoIChmYi0+Zm9ybWF0WzBdLmZvcm1hdCkgew0KPiAr CWNhc2UgRFJNX0ZPUk1BVF9DMToNCj4gKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE7DQo+ ICsJCWdvdG8gY29sb3JfaW5kZXhlZDsNCj4gKw0KPiArCWNhc2UgRFJNX0ZPUk1BVF9DMjoN Cj4gKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDI7DQo+ICsJCWdvdG8gY29sb3JfaW5kZXhl ZDsNCj4gKw0KPiArCWNhc2UgRFJNX0ZPUk1BVF9DNDoNCj4gKwkJdmFyLT5iaXRzX3Blcl9w aXhlbCA9IDQ7DQo+ICsJCWdvdG8gY29sb3JfaW5kZXhlZDsNCj4gKw0KPiArCWNhc2UgRFJN X0ZPUk1BVF9DODoNCj4gKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDg7DQo+ICtjb2xvcl9p bmRleGVkOg0KPiArCQl2YXItPnJlZC5vZmZzZXQgPSAwOw0KPiArCQl2YXItPnJlZC5sZW5n dGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOw0KPiArCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7 DQo+ICsJCXZhci0+Z3JlZW4ubGVuZ3RoID0gdmFyLT5iaXRzX3Blcl9waXhlbDsNCj4gKwkJ dmFyLT5ibHVlLm9mZnNldCA9IDA7DQo+ICsJCXZhci0+Ymx1ZS5sZW5ndGggPSB2YXItPmJp dHNfcGVyX3BpeGVsOw0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgRFJNX0ZPUk1BVF9S R0I1NjU6CQkJCS8vIEZJWE1FIEZhbGNvbiBvbmx5DQo+ICsJY2FzZSBEUk1fRk9STUFUX1JH QjU2NSB8IERSTV9GT1JNQVRfQklHX0VORElBTjoJLy8gRklYTUUgRmFsY29uIG9ubHkNCj4g KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CQkJLy8gRklYTUUgRW11bGF0ZWQNCj4gKwkJ Ly8gRklYTUUgRmFsbCBiYWNrIHRvIEM4L1JHQjMzMiBpZiAhRmFsY29uIG9yIHBpeGNsb2Nr IHRvbyBoaWdoDQo+ICsJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsNCj4gKwkJdmFyLT5y ZWQub2Zmc2V0ID0gMTE7DQo+ICsJCXZhci0+cmVkLmxlbmd0aCA9IDU7DQo+ICsJCXZhci0+ Z3JlZW4ub2Zmc2V0ID0gNTsNCj4gKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2Ow0KPiArCQl2 YXItPmJsdWUub2Zmc2V0ID0gMDsNCj4gKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7DQo+ICsJ CWJyZWFrOw0KPiArDQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJ fQ0KPiArDQo+ICsJdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsNCj4gKwl2YXItPmdyZWVuLm1z Yl9yaWdodCA9IDA7DQo+ICsJdmFyLT5ibHVlLm1zYl9yaWdodCA9IDA7DQo+ICsJdmFyLT50 cmFuc3Aub2Zmc2V0ID0gMDsNCj4gKwl2YXItPnRyYW5zcC5sZW5ndGggPSAwOw0KPiArCXZh ci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7DQo+ICsJdmFyLT5ncmF5c2NhbGUgPSAwOw0KPiAr CXZhci0+bm9uc3RkID0gMDsNCj4gKw0KPiArCS8qIE91ciB2aXJ0dWFsIHNjcmVlbiBjb3Zl cnMgYWxsIHRoZSBncmFwaGljcyBtZW1vcnkgKHNhbnMgc29tZQ0KPiArCSAqIHRyYWlsaW5n IGJ5dGVzKS4gVGhpcyBhbGxvd3MgZm9yIHNldHRpbmcgdGhlIHNjYW5vdXQgYnVmZmVyJ3MN Cj4gKwkgKiBhZGRyZXNzIHdpdGggZmJfcGFuX2Rpc3BsYXkoKS4NCj4gKwkgKi8NCj4gKw0K PiArI2lmIDANCj4gKwkvLyBGSVhNRSBmYi0+cGl0Y2hlc1swXSBpcyBub3QgY29uc3Q/DQo+ ICsJLy8gRklYTUUgaHZnYUBYUjI0DQo+ICsJLy8gRklYTUUgMzIweDQ4MCB2aXJ0IDY0MHgy NDMgb2ZmIDAsMCBicHAgMTYgZ3JheSAwIHJlZCAxMS81LzAgZ3JlZW4gNS82LzAgYmx1ZSAw LzUvMCB0cmFuc3AgMC8wLzAgbm9uc3RkIDAgYWN0IDB4MCAweDBtbSBhY2NlbF9mbGFncyAw eDAgcGl4Y2xvY2sgNzk0NDEgbWFyZ2lucyA5LzIxLzUvMTYgc3luYyA1MC8yLzAgdm1vZGUg MHgwIHJvdGF0ZSAwIGNvbG9yc3BhY2UgMHgwDQo+ICsJLy8gRklYTUUgZmFsY29uX2RlY29k ZV92YXI6MTQxNzogdmlydHVhbCBzY3JlZW4gNjQweDQ4MCB0b28gbGFyZ2UNCj4gKwl2YXIt PnhyZXNfdmlydHVhbCA9IGZiLT5waXRjaGVzWzBdICogOCAvIHZhci0+Yml0c19wZXJfcGl4 ZWw7DQo+ICsJdmFyLT55cmVzX3ZpcnR1YWwgPSBzY3JlZW5fbGVuIC8gZmItPnBpdGNoZXNb MF07DQo+ICsjZWxzZQ0KPiArCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOw0KPiAr CXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOw0KPiArI2VuZGlmDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gKy8vIEZJWE1FIGhlbHBlcnMgZnJvbQ0KPiArLy8gIltQQVRD SCB2MiA5LzE1XSBkcm0vZmJjb252OiBNb2RlLXNldHRpbmcgcGlwZWxpbmUgZW5hYmxlIC8g ZGlzYWJsZSINCj4gKy8vIGJ5IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNl LmRlPg0KPiArc3RhdGljIGludCBkcm1fZmJjb252X3VwZGF0ZV9mYl92YXJfc2NyZWVuaW5m b19mcm9tX3NpbXBsZV9kaXNwbGF5X3BpcGUoDQo+ICsJc3RydWN0IGZiX3Zhcl9zY3JlZW5p bmZvICpmYl92YXIsIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkNCj4g K3sNCj4gKwlzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtID0gYXRhcmlfZHJt X2Zyb21fcGlwZShwaXBlKTsNCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gcGlw ZS0+Y3J0Yy5wcmltYXJ5Ow0KPiArDQo+ICsJaWYgKHByaW1hcnkgJiYgcHJpbWFyeS0+c3Rh dGUgJiYgcHJpbWFyeS0+c3RhdGUtPmZiKQ0KPiArCQlyZXR1cm4gZHJtX2ZiY29udl91cGRh dGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9mcmFtZWJ1ZmZlcigNCj4gKwkJCWZiX3Zhciwg cHJpbWFyeS0+c3RhdGUtPmZiKTsNCj4gKw0KPiArCWZiX3Zhci0+eHJlc192aXJ0dWFsID0g ZmJfdmFyLT54cmVzOw0KPiArCWZiX3Zhci0+eXJlc192aXJ0dWFsID0gZmJfdmFyLT55cmVz Ow0KPiArI2lmIDANCj4gKwkvLyBGSVhNRSBUaGlzIGlzIHdyb25nISBCcHAgc2hvdWxkIGJl IGRlcml2ZWQgZnJvbSBmb3VyY2MNCj4gKwlmYl92YXItPmJpdHNfcGVyX3BpeGVsID0gYXRh cmlfZHJtLT5kZXYubW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoOw0KPiArCXByX2luZm8o IiVzOiV1OiB1c2luZyAldSBicHAgKGZyb20gcHJlZmVycmVkX2RlcHRoKVxuIiwgX19mdW5j X18sDQo+ICsJCV9fTElORV9fLCBmYl92YXItPmJpdHNfcGVyX3BpeGVsKTsNCj4gKyNlbHNl DQo+ICsJZmJfdmFyLT5iaXRzX3Blcl9waXhlbCA9IGF0YXJpX2RybS0+bmV4dF9icHA7DQo+ ICsjZW5kaWYNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8NCj4gKy8qIGF0YXJpX2RybSAoc2ltcGxlKSBkaXNwbGF5IHBpcGUJCQkJICAg ICAgKi8NCj4gKw0KPiArLyoqDQo+ICsgKiBhdGFyaV9kcm1fcGlwZV9tb2RlX3ZhbGlkDQo+ ICsgKg0KPiArICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIGNoZWNrIGlmIGEgc3BlY2lm aWMgbW9kZSBpcyB2YWxpZCBpbiB0aGUNCj4gKyAqIGNydGMgdXNlZCBpbiB0aGlzIHNpbXBs ZSBkaXNwbGF5IHBpcGUuIFRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkDQo+ICsgKiBpZiB0 aGUgZGlzcGxheSBwaXBlIGhhcyBzb21lIHNvcnQgb2YgcmVzdHJpY3Rpb24gaW4gdGhlIG1v ZGVzDQo+ICsgKiBpdCBjYW4gZGlzcGxheS4gRm9yIGV4YW1wbGUsIGEgZ2l2ZW4gZGlzcGxh eSBwaXBlIG1heSBiZSByZXNwb25zaWJsZQ0KPiArICogdG8gc2V0IGEgY2xvY2sgdmFsdWUu IElmIHRoZSBjbG9jayBjYW4gbm90IHByb2R1Y2UgYWxsIHRoZSB2YWx1ZXMNCj4gKyAqIGZv ciB0aGUgYXZhaWxhYmxlIG1vZGVzIHRoZW4gdGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCB0 byByZXN0cmljdA0KPiArICogdGhlIG51bWJlciBvZiBtb2RlcyB0byBvbmx5IHRoZSBvbmVz IHRoYXQgY2FuIGJlIGRpc3BsYXllZC4gQW5vdGhlcg0KPiArICogcmVhc29uIGNhbiBiZSBi YW5kd2lkdGggbWl0aWdhdGlvbjogdGhlIG1lbW9yeSBwb3J0IG9uIHRoZSBkaXNwbGF5DQo+ ICsgKiBjb250cm9sbGVyIGNhbiBoYXZlIGJhbmR3aWR0aCBsaW1pdGF0aW9ucyBub3QgYWxs b3dpbmcgcGl4ZWwgZGF0YQ0KPiArICogdG8gYmUgZmV0Y2hlZCBhdCBhbnkgcmF0ZS4NCj4g KyAqDQo+ICsgKiBUaGlzIGhvb2sgaXMgdXNlZCBieSB0aGUgcHJvYmUgaGVscGVycyB0byBm aWx0ZXIgdGhlIG1vZGUgbGlzdCBpbg0KPiArICogZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzKCksIGFuZCBpdCBpcyB1c2VkIGJ5IHRoZQ0KPiArICogYXRvbWlj IGhlbHBlcnMgdG8gdmFsaWRhdGUgbW9kZXMgc3VwcGxpZWQgYnkgdXNlcnNwYWNlIGluDQo+ ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19tb2Rlc2V0KCkuDQo+ICsgKg0KPiArICog VGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4NCj4gKyAqDQo+ICsgKiBOT1RFOg0KPiArICoN Cj4gKyAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgYm90aCBjYWxsZWQgZnJvbSB0aGUgY2hl Y2sgcGhhc2Ugb2YgYW4gYXRvbWljDQo+ICsgKiBjb21taXQsIGFuZCB0aGUgbW9kZSB2YWxp ZGF0aW9uIGluIHRoZSBwcm9iZSBwYXRocyBpdCBpcyBub3QgYWxsb3dlZA0KPiArICogdG8g bG9vayBhdCBhbnl0aGluZyBlbHNlIGJ1dCB0aGUgcGFzc2VkLWluIG1vZGUsIGFuZCB2YWxp ZGF0ZSBpdA0KPiArICogYWdhaW5zdCBjb25maWd1cmF0aW9uLWludmFyaWFudCBoYXJkd2Fy ZSBjb25zdHJhaW50cy4NCj4gKyAqDQo+ICsgKiBSRVRVUk5TOg0KPiArICoNCj4gKyAqIGRy bV9tb2RlX3N0YXR1cyBFbnVtDQo+ICsgKi8NCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0 YXR1cw0KPiArYXRhcmlfZHJtX3BpcGVfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX3NpbXBsZV9k aXNwbGF5X3BpcGUgKnBpcGUsDQo+ICsJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQ0KPiArew0KPiArCWlmIChhdGFyaV9kcm1fY2hlY2tfc2l6ZShtb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksIE5VTEwpIDwgMCkNCj4gKwkJcmV0dXJuIE1PREVf QkFEOw0KPiArDQo+ICsJcmV0dXJuIE1PREVfT0s7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogYXRhcmlfZHJtX3BpcGVfbW9kZV9maXh1cDoNCj4gKyAqDQo+ICsgKiBUaGlzIGNhbGxi YWNrIGlzIHVzZWQgdG8gdmFsaWRhdGUgYSBtb2RlLiBUaGUgcGFyYW1ldGVyIG1vZGUgaXMg dGhlDQo+ICsgKiBkaXNwbGF5IG1vZGUgdGhhdCB1c2Vyc3BhY2UgcmVxdWVzdGVkLCBhZGp1 c3RlZF9tb2RlIGlzIHRoZSBtb2RlIHRoZQ0KPiArICogZW5jb2RlcnMgbmVlZCB0byBiZSBm ZWQgd2l0aC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGludmVyc2Ugc2VtYW50aWNzDQo+ICsg KiBvZiB0aGUgbWVhbmluZyBmb3IgdGhlICZkcm1fZW5jb2RlciBhbmQgJmRybV9icmlkZ2Vf ZnVuY3MubW9kZV9maXh1cA0KPiArICogdmZ1bmMuIElmIHRoZSBDUlRDIG9mIHRoZSBzaW1w bGUgZGlzcGxheSBwaXBlIGNhbm5vdCBzdXBwb3J0IHRoZQ0KPiArICogcmVxdWVzdGVkIGNv bnZlcnNpb24gZnJvbSBtb2RlIHRvIGFkanVzdGVkX21vZGUgaXQgc2hvdWxkIHJlamVjdCB0 aGUNCj4gKyAqIG1vZGVzZXQuDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBpcyBvcHRp b25hbC4NCj4gKyAqDQo+ICsgKiBOT1RFOg0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGluIHRoZSBjaGVjayBwaGFzZSBvZiBhdG9taWMgbW9kZXNldHMsIHdoaWNo DQo+ICsgKiBjYW4gYmUgYWJvcnRlZCBmb3IgYW55IHJlYXNvbiAoaW5jbHVkaW5nIG9uIHVz ZXJzcGFjZSdzIHJlcXVlc3QgdG8NCj4gKyAqIGp1c3QgY2hlY2sgd2hldGhlciBhIGNvbmZp Z3VyYXRpb24gd291bGQgYmUgcG9zc2libGUpLiBBdG9taWMgZHJpdmVycw0KPiArICogTVVT VCBOT1QgdG91Y2ggYW55IHBlcnNpc3RlbnQgc3RhdGUgKGhhcmR3YXJlIG9yIHNvZnR3YXJl KSBvciBkYXRhDQo+ICsgKiBzdHJ1Y3R1cmVzIGV4Y2VwdCB0aGUgcGFzc2VkIGluIGFkanVz dGVkX21vZGUgcGFyYW1ldGVyLg0KPiArICoNCj4gKyAqIEF0b21pYyBkcml2ZXJzIHdoaWNo IG5lZWQgdG8gaW5zcGVjdCBhbmQgYWRqdXN0IG1vcmUgc3RhdGUgc2hvdWxkDQo+ICsgKiBp bnN0ZWFkIHVzZSB0aGUgQGF0b21pY19jaGVjayBjYWxsYmFjaywgYnV0IG5vdGUgdGhhdCB0 aGV5J3JlIG5vdA0KPiArICogcGVyZmVjdGx5IGVxdWl2YWxlbnQ6IEBtb2RlX3ZhbGlkIGlz IGNhbGxlZCBmcm9tDQo+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19tb2Rlc2V0KCks IGJ1dCBAYXRvbWljX2NoZWNrIGlzIGNhbGxlZCBmcm9tDQo+ICsgKiBkcm1fYXRvbWljX2hl bHBlcl9jaGVja19wbGFuZXMoKSwgYmVjYXVzZSBvcmlnaW5hbGx5IGl0IHdhcyBtZWFudCBm b3INCj4gKyAqIHBsYW5lIHVwZGF0ZSBjaGVja3Mgb25seS4NCj4gKyAqDQo+ICsgKiBBbHNv IGJld2FyZSB0aGF0IHVzZXJzcGFjZSBjYW4gcmVxdWVzdCBpdHMgb3duIGN1c3RvbSBtb2Rl cywgbmVpdGhlcg0KPiArICogY29yZSBub3IgaGVscGVycyBmaWx0ZXIgbW9kZXMgdG8gdGhl IGxpc3Qgb2YgcHJvYmUgbW9kZXMgcmVwb3J0ZWQgYnkNCj4gKyAqIHRoZSBHRVRDT05ORUNU T1IgSU9DVEwgYW5kIHN0b3JlZCBpbiAmZHJtX2Nvbm5lY3Rvci5tb2Rlcy4gVG8gZW5zdXJl DQo+ICsgKiB0aGF0IG1vZGVzIGFyZSBmaWx0ZXJlZCBjb25zaXN0ZW50bHkgcHV0IGFueSBD UlRDIGNvbnN0cmFpbnRzIGFuZA0KPiArICogbGltaXRzIGNoZWNrcyBpbnRvIEBtb2RlX3Zh bGlkLg0KPiArICoNCj4gKyAqIFJFVFVSTlM6DQo+ICsgKg0KPiArICogVHJ1ZSBpZiBhbiBh Y2NlcHRhYmxlIGNvbmZpZ3VyYXRpb24gaXMgcG9zc2libGUsIGZhbHNlIGlmIHRoZSBtb2Rl c2V0DQo+ICsgKiBvcGVyYXRpb24gc2hvdWxkIGJlIHJlamVjdGVkLg0KPiArICovDQo+ICtz dGF0aWMgYm9vbCBhdGFyaV9kcm1fcGlwZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywNCj4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwNCj4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9k ZSkNCj4gK3sNCj4gKwkvLyBGSVhNRQ0KPiArCS8vIEJhc2VkIG9uIGRybV9mYmNvbnZfc2lt cGxlX2Rpc3BsYXlfcGlwZV9tb2RlX2ZpeHVwKCkgaW4NCj4gKwkvLyAiW1BBVENIIHYyIDkv MTVdIGRybS9mYmNvbnY6IE1vZGUtc2V0dGluZyBwaXBlbGluZSBlbmFibGUgLyBkaXNhYmxl Ig0KPiArCS8vIGJ5IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPg0K PiArCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSA9DQo+ICsJCWNvbnRh aW5lcl9vZihjcnRjLCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUsIGNydGMpOw0K PiArCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7DQo+ICsJaW50IHJldDsNCj4gKw0K PiArCWRybV9mYmNvbnZfaW5pdF9mYl92YXJfc2NyZWVuaW5mb19mcm9tX21vZGUoJnZhciwg bW9kZSk7DQo+ICsNCj4gKwkvLyBGSVhNRSBUaGlzIGlzIHdyb25nISBCcHAgc2hvdWxkIGJl IGRlcml2ZWQgZnJvbSBmb3VyY2MNCj4gKwlyZXQgPSBkcm1fZmJjb252X3VwZGF0ZV9mYl92 YXJfc2NyZWVuaW5mb19mcm9tX3NpbXBsZV9kaXNwbGF5X3BpcGUoDQo+ICsJCSZ2YXIsIHBp cGUpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiB0cnVlOw0KPiArDQo+ICtyZXR1cm4g dHJ1ZTsgLy8gRklYTUUNCj4gKwlyZXQgPSBhdGFmYl9jaGVja192YXIoJnZhciwgJmZiX2lu Zm8pOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlk cm1fbW9kZV91cGRhdGVfZnJvbV9mYl92YXJfc2NyZWVuaW5mbyhhZGp1c3RlZF9tb2RlLCAm dmFyKTsNCj4gKw0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArc3RhdGljIGludCBhdGFy aV9kcm1fcGlwZV9jaGVjayhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUs DQo+ICsJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsDQo+ICsJCQkJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBh dGFyaV9kcm1fZGV2aWNlICphdGFyaV9kcm0gPSBhdGFyaV9kcm1fZnJvbV9waXBlKHBpcGUp Ow0KPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmZiOw0K PiArDQo+ICsJLy8gRklYTUUNCj4gKwkvLyBCYXNlZCBvbiBkcm1fZmJjb252X3NpbXBsZV9k aXNwbGF5X3BpcGVfY2hlY2soKSBpbg0KPiArCS8vICJbUEFUQ0ggdjIgOC8xNV0gZHJtL2Zi Y29udjogQWRkIHBsYW5lLXN0YXRlIGNoZWNrIGFuZCB1cGRhdGUiDQo+ICsJLy8gYnkgVGhv bWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+DQo+ICsJaW50IHJldDsNCj4g KwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBD UlRDIGNoZWNrDQo+ICsJICovDQo+ICsNCj4gKwkvKiBEUk0gcG9ydGluZyBub3Rlczogd2hl biBmYmNvbiB0YWtlcyBvdmVyIHRoZSBjb25zb2xlLCBpdCByZWd1bGFybHkNCj4gKwkgKiBj aGFuZ2VzIHRoZSBkaXNwbGF5IG1vZGUuIFdoZXJlJ3MgYXBwYXJlbnRseSBubyB3YXkgdG8g ZGV0ZWN0IHRoaXMNCj4gKwkgKiBkaXJlY3RseSBmcm9tIGZiY29uIGl0c2VsZi4gRFJNJ3Mg bW9kZSBpbmZvcm1hdGlvbiBtaWdodCB0aGVyZWZvcmUNCj4gKwkgKiBiZSBvdXQgb2YgZGF0 YSwgYWZ0ZXIgaXQgdGFrZXMgb3ZlciB0aGUgZGlzcGxheSBhdCBhIGxhdGVyIHRpbWUuDQo+ ICsJICogSGVyZSwgd2UgdGVzdCB0aGUgQ1JUQydzIGN1cnJlbnQgbW9kZSB3aXRoIHRoZSBm YmRldiBzdGF0ZS4gSWYgdGhleQ0KPiArCSAqIGRvIG5vdCBtYXRjaCwgd2UgcmVxdWVzdCBh IG1vZGUgY2hhbmdlIGZyb20gRFJNLiBJZiB5b3UgcG9ydCBhbg0KPiArCSAqIGZiZGV2IGRy aXZlciB0byBEUk0sIHlvdSBjYW4gcmVtb3ZlIHRoaXMgY29kZSBzZWN0aW9uLCBEUk0gd2ls bA0KPiArCSAqIGJlIGluIGZ1bGwgY29udHJvbCBvZiB0aGUgZGlzcGxheSBkZXZpY2UgYW5k IGRvZXNuJ3QgaGF2ZSB0byByZWFjdA0KPiArCSAqIHRvIGNoYW5nZXMgZnJvbSBleHRlcm5h bCBzb3VyY2VzLg0KPiArCSAqLw0KPiArDQo+ICsJaWYgKCFjcnRjX3N0YXRlLT5tb2RlX2No YW5nZWQgJiYgY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5jbG9jaykgew0KPiArCQlzdHJ1 Y3QgZmJfdmlkZW9tb2RlIGZiX21vZGUsIGZiX3Zhcl9tb2RlOw0KPiArDQo+ICsJCWRybV9m YmNvbnZfaW5pdF9mYl92aWRlb21vZGVfZnJvbV9tb2RlKA0KPiArCQkJJmZiX21vZGUsICZj cnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlKTsNCj4gKwkJZmJfdmFyX3RvX3ZpZGVvbW9kZSgm ZmJfdmFyX21vZGUsICZmYl9pbmZvLnZhcik7DQo+ICsJCWlmICghZmJfbW9kZV9pc19lcXVh bCgmZmJfbW9kZSwgJmZiX3Zhcl9tb2RlKSkNCj4gKwkJCWNydGNfc3RhdGUtPm1vZGVfY2hh bmdlZCA9IHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBQbGFuZSBjaGVjaw0K PiArCSAqLw0KPiArDQo+ICsJaWYgKCFwbGFuZV9zdGF0ZS0+Y3J0YykNCj4gKwkJcmV0dXJu IDA7DQo+ICsNCj4gKwlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0 ZShwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwNCj4gKwkJCQkJCSAgMSA8PCAxNiwgMSA8PCAx NiwNCj4gKwkJCQkJCSAgZmFsc2UsIHRydWUpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQly ZXR1cm4gcmV0Ow0KPiArDQo+ICsJaWYgKCFwbGFuZV9zdGF0ZS0+dmlzaWJsZSB8fCAhZmIp DQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJLyogVmlydHVhbCBzY3JlZW4gc2l6ZXMgYXJl IG5vdCBzdXBwb3J0ZWQuDQo+ICsJICovDQo+ICsNCj4gKwlpZiAoZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT5kc3QpICE9IGZiLT53aWR0aCB8fA0KPiArCSAgICBkcm1fcmVjdF9o ZWlnaHQoJnBsYW5lX3N0YXRlLT5kc3QpICE9IGZiLT5oZWlnaHQpIHsNCj4gKwkJRFJNX0VS Uk9SKCJmYmNvbnY6IHZpcnR1YWwgc2NyZWVuIHNpemVzIG5vdCBzdXBwb3J0ZWRcbiIpOw0K PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJaWYgKHBsYW5lX3N0YXRlLT5kc3Qu eDEgfHwgcGxhbmVfc3RhdGUtPmRzdC55MSkgew0KPiArCQlEUk1fRVJST1IoImZiY29udjog dmlydHVhbCBzY3JlZW4gb2Zmc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOw0KPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBQaXhlbCBmb3JtYXRzIGhhdmUgdG8gYmUg Y29tcGF0aWJsZSB3aXRoIGZiZGV2LiBUaGlzIGlzDQo+ICsJICogdXN1YWxseSBzb21lIHZh cmlhdGlvbiBvZiBYUkdCLg0KPiArCSAqLw0KPiArDQo+ICsJaWYgKCFwaXBlLT5wbGFuZS5z dGF0ZSB8fCAhcGlwZS0+cGxhbmUuc3RhdGUtPmZiIHx8DQo+ICsJICAgIHBpcGUtPnBsYW5l LnN0YXRlLT5mYi0+Zm9ybWF0WzBdLmZvcm1hdCAhPSBmYi0+Zm9ybWF0WzBdLmZvcm1hdCkg ew0KPiArCQltZW1jcHkoJnZhciwgJmZiX2luZm8udmFyLCBzaXplb2YodmFyKSk7DQo+ICsJ CWRybV9mYmNvbnZfdXBkYXRlX2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fY3J0Y19zdGF0ZSgN Cj4gKwkJCSZ2YXIsIGNydGNfc3RhdGUpOw0KPiArCQlhdGFyaV9kcm0tPm5leHRfYnBwID0g dmFyLmJpdHNfcGVyX3BpeGVsOw0KPiArCQlkcm1fZmJjb252X3VwZGF0ZV9mYl92YXJfc2Ny ZWVuaW5mb19mcm9tX2ZyYW1lYnVmZmVyKCZ2YXIsIGZiKTsNCj4gKwkJcmV0ID0gYXRhZmJf Y2hlY2tfdmFyKCZ2YXIsICZmYl9pbmZvKTsNCj4gKwkJaWYgKHJldCA8IDApDQo+ICsJCQly ZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBhdGFyaV9kcm1fcGlwZV9lbmFibGUoc3RydWN0IGRybV9zaW1wbGVfZGlz cGxheV9waXBlICpwaXBlLA0KPiArCQkJCSAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLA0KPiArCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp DQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0 Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsNCj4gKwlzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSAq YXRhcmlfZHJtID0gYXRhcmlfZHJtX2Zyb21fcGlwZShwaXBlKTsNCj4gKwlzdHJ1Y3QgZHJt X3NoYWRvd19wbGFuZV9zdGF0ZSAqc2hhZG93X3BsYW5lX3N0YXRlID0NCj4gKwkJdG9fZHJt X3NoYWRvd19wbGFuZV9zdGF0ZShwbGFuZV9zdGF0ZSk7DQo+ICsJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+ZmI7DQo+ICsJc3RydWN0IGRybV9jcnRjICpj cnRjID0gJnBpcGUtPmNydGM7DQo+ICsJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsN Cj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOw0KPiAr CWZfdmJsYW5rX2VuYWJsZWQgPSAxOwkvLyBGSVhNRQ0KPiArCS8vIEZJWE1FDQo+ICsNCj4g KwkvLyBGSVhNRQ0KPiArCS8vIEJhc2VkIG9uIGRybV9mYmNvbnZfc2ltcGxlX2Rpc3BsYXlf cGlwZV9lbmFibGUoKSBpbg0KPiArCS8vICJbUEFUQ0ggdjIgOS8xNV0gZHJtL2ZiY29udjog TW9kZS1zZXR0aW5nIHBpcGVsaW5lIGVuYWJsZSAvIGRpc2FibGUiDQo+ICsJLy8gYnkgVGhv bWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+DQo+ICsNCj4gKwkvKiBBcyB0 aGlzIGlzIGF0b21pYyBtb2RlIHNldHRpbmcsIGFueSBmdW5jdGlvbiBjYWxsIGlzIG5vdA0K PiArCSAqIGFsbG93ZWQgdG8gZmFpbC4gSWYgaXQgZG9lcywgYW4gYWRkaXRpb25hbCB0ZXN0 IHNob3VsZCBiZQ0KPiArCSAqIGFkZGVkIHRvIHNpbXBsZV9kaXNwbGF5X3BpcGVfY2hlY2so KS4NCj4gKwkgKi8NCj4gKw0KPiArCWRybV9mYmNvbnZfaW5pdF9mYl92YXJfc2NyZWVuaW5m b19mcm9tX21vZGUoJnZhciwgbW9kZSk7DQo+ICsNCj4gKwlpZiAocGxhbmVfc3RhdGUgJiYg ZmIpIHsNCj4gKwkJcmV0ID0gZHJtX2ZiY29udl91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9f ZnJvbV9mcmFtZWJ1ZmZlcigNCj4gKwkJCSZ2YXIsIGZiKTsNCj4gKwkJaWYgKHJldCkNCj4g KwkJCXJldHVybjsNCj4gKwl9IGVsc2Ugew0KPiArCQl2YXIueHJlc192aXJ0dWFsID0gdmFy LnhyZXM7DQo+ICsJCXZhci55cmVzX3ZpcnR1YWwgPSB2YXIueXJlczsNCj4gKwl9DQo+ICsN Cj4gKwlmYl9pbmZvLnZhciA9IHZhcjsNCj4gKwlhdGFmYl9zZXRfcGFyKCZmYl9pbmZvKTsN Cj4gKwlhdGFyaV9kcm1fbW9kZV9zZXQoYXRhcmlfZHJtLCAmY3J0Y19zdGF0ZS0+bW9kZSwg ZmIpOw0KPiArCWF0YWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssICZmYl9pbmZvKTsNCj4g Kw0KPiArCWF0YXJpX2RybV9mYl9ibGl0X2Z1bGxzY3JlZW4oZmIsICZzaGFkb3dfcGxhbmVf c3RhdGUtPmRhdGFbMF0pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhdGFyaV9kcm1f cGlwZV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsNCj4gKw0KPiAr CWZfdmJsYW5rX2VuYWJsZWQgPSAwOwkvLyBGSVhNRQ0KPiArCWRybV9jcnRjX3ZibGFua19v ZmYoY3J0Yyk7DQo+ICsJYXRhZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCAmZmJfaW5m byk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGF0YXJpX2RybV9sb2FkX2x1dChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlID0gY3J0Yy0+c3RhdGU7DQo+ICsJc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1 dDsNCj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gKw0KPiArCWlmICghY3J0Y19zdGF0ZS0+Z2Ft bWFfbHV0IHx8ICFjcnRjLT5lbmFibGVkKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlsdXQg PSBjcnRjX3N0YXRlLT5nYW1tYV9sdXQtPmRhdGE7DQo+ICsNCj4gKwkvLyBGSVhNRSBoYXJk Y29kZWQgMjU2DQo+ICsJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQ0KPiArCQlmYmh3LT5z ZXRfY29sX3JlZyhpLCBsdXRbaV0ucmVkLCBsdXRbaV0uZ3JlZW4sIGx1dFtpXS5ibHVlKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYXRhcmlfZHJtX3BpcGVfdXBkYXRlKHN0cnVj dCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwNCj4gKwkJCQkgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYXRhcmlf ZHJtX2RldmljZSAqYXRhcmlfZHJtID0gYXRhcmlfZHJtX2Zyb21fcGlwZShwaXBlKTsNCj4g KwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9IHBpcGUtPnBsYW5lLnN0 YXRlOw0KPiArCXN0cnVjdCBkcm1fc2hhZG93X3BsYW5lX3N0YXRlICpzaGFkb3dfcGxhbmVf c3RhdGUgPQ0KPiArCQl0b19kcm1fc2hhZG93X3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKTsN Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5mYjsNCj4g KwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsNCj4gKwlzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gdmFyOw0KPiArCXN0cnVjdCBkcm1fcmVjdCByZWN0Ow0KPiArCWlu dCByZXQ7DQo+ICsNCj4gKwlpZiAoIWZiKSB7DQo+ICsJCS8qIE5vIGZyYW1lYnVmZmVyIGlu c3RhbGxlZDsgYmxhbmsgZGlzcGxheS4gKi8NCj4gKwkJYXRhZmJfYmxhbmsoRkJfQkxBTktf Tk9STUFMLCAmZmJfaW5mbyk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwkvLyBG SVhNRQ0KPiArCS8vIEJhc2VkIG9uIGRybV9mYmNvbnZfc2ltcGxlX2Rpc3BsYXlfcGlwZV9l bmFibGUoKSBpbg0KPiArCS8vICJbUEFUQ0ggdjIgOC8xNV0gZHJtL2ZiY29udjogQWRkIHBs YW5lLXN0YXRlIGNoZWNrIGFuZCB1cGRhdGUiDQo+ICsJLy8gYnkgVGhvbWFzIFppbW1lcm1h bm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+DQo+ICsNCj4gKwkvKg0KPiArCSAqIFBsYW5lIHVw ZGF0ZQ0KPiArCSAqLw0KPiArDQo+ICsJLy8gRklYTUUgQWx3YXlzIHRydWUgZm9yIHhyZ2I4 ODg4LXRvLXJnYjMzMi9yZ2I1NjU/DQo+ICsJaWYgKGF0YXJpX2RybS0+YnBwICE9IGRybV9m b3JtYXRfaW5mb19icHAoZmItPmZvcm1hdCwgMCkgfHwNCj4gKwkgICAgZmJfaW5mby52YXIu eHJlc192aXJ0dWFsICE9IGZiLT53aWR0aCkgew0KPiArCQkvKg0KPiArCQkgKiBQaXhlbCBm b3JtYXQgY2hhbmdlZCwgdXBkYXRlIGZiX2luZm8gYWNjb3JkaW5nbHkNCj4gKwkJICovDQo+ ICsNCj4gKwkJdmFyID0gZmJfaW5mby52YXI7DQo+ICsJCXJldCA9IGRybV9mYmNvbnZfdXBk YXRlX2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fZnJhbWVidWZmZXIoDQo+ICsJCQkmdmFyLCBm Yik7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm47DQo+ICsNCj4gKwkJZmJfaW5mby52 YXIgPSB2YXI7DQo+ICsJCWF0YWZiX3NldF9wYXIoJmZiX2luZm8pOw0KPiArI2lmIDENCj4g KwkJYXRhcmlfZHJtX21vZGVfc2V0KGF0YXJpX2RybSwgJmNydGMtPm1vZGUsIGZiKTsNCj4g KyNlbmRpZg0KPiArCX0NCj4gKw0KPiArCS8vIEZJWE1FIENhbGxlZCBtdWx0aXBsZSB0aW1l cyAoZmJfc2V0X2xvZ29jbWFwKCkgdXNlcyBmYl9jbWFwLmxlbiA9IDE2KQ0KPiArCWlmICgh b2xkX3BsYW5lX3N0YXRlLT5mYiB8fCAvKiBmaXJzdC10aW1lIHVwZGF0ZSAqLw0KPiArCSAg ICBhdGFyaV9kcm0tPmJwcCAhPSBkcm1fZm9ybWF0X2luZm9fYnBwKGZiLT5mb3JtYXQsIDAp IHx8DQo+ICsJICAgIGNydGMtPnN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQpIHsNCj4gKw0K PiArCQkvKiBEUk0gcG9ydGluZyBub3RlczogQmVsb3cgd2Ugc2V0IHRoZSBMVVRzIGZvciBw YWxldHRlIGFuZA0KPiArCQkgKiBnYW1tYSBjb3JyZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVk IGJ5IHNvbWUgZmJkZXYgZHJpdmVycywNCj4gKwkJICogc3VjaCBhcyBudmlkaWFmYiBhbmQg YXR5ZmIsIHdoaWNoIGRvbid0IGluaXRpYWxpemUgdGhlDQo+ICsJCSAqIHRhYmxlIHRvIHBh c3MtdGhyb3VnaCB0aGUgZnJhbWVidWZmZXIgdmFsdWVzIHVuY2hhbmdlZC4gVGhpcw0KPiAr CQkgKiBpcyBhY3R1YWxseSBDUlRDIHN0YXRlLCBidXQgdGhlIHJlc3BlY3RpdmUgZnVuY3Rp b24NCj4gKwkJICogY3J0Y19oZWxwZXJfbW9kZV9zZXRfbm9mYigpIGlzIG9ubHkgY2FsbGVk IHdoZW4gYSBDUlRDDQo+ICsJCSAqIHByb3BlcnR5IGNoYW5nZXMsIGNoYW5nZXMgaW4gY29s b3IgZm9ybWF0cyBhcmUgbm90IGhhbmRsZWQNCj4gKwkJICogdGhlcmUuIFdoZW4geW91J3Jl IHBvcnRpbmcgYSBmYmRldiBkcml2ZXIgdG8gRFJNLCByZW1vdmUNCj4gKwkJICogdGhlIGNh bGwuIEdhbW1hIExVVHMgYXJlIENSVEMgcHJvcGVydGllcyBhbmQgc2hvdWxkIGJlDQo+ICsJ CSAqIGhhbmRsZWQgdGhlcmUuIEVpdGhlciByZW1vdmUgZ2FtbWEgY29ycmVjdGlvbiBvciBz ZXQgdXANCj4gKwkJICogdGhlIHJlc3BlY3RpdmUgQ1JUQyBwcm9wZXJ0aWVzIGZvciB1c2Vy c3BhY2UuDQo+ICsJCSAqLw0KPiArCQlhdGFyaV9kcm1fbG9hZF9sdXQoY3J0Yyk7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9tZXJnZWQob2xkX3Bs YW5lX3N0YXRlLCBwbGFuZV9zdGF0ZSwNCj4gKwkJCQkJICAgICZyZWN0KSkNCj4gKwkJYXRh cmlfZHJtX2ZiX2JsaXRfcmVjdChmYiwgJnNoYWRvd19wbGFuZV9zdGF0ZS0+ZGF0YVswXSwg JnJlY3QpOw0KPiArDQo+ICsJLy8gRklYTUUgcmVtb3ZpbmcgdGhlIGJsb2NrIGJlbG93IHRy aWdnZXJzIFdBUk5fT04obmV3X2NydGNfc3RhdGUtPmV2ZW50KSBpbiBkcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pY19oZWxwZXIuYzoyNDc1IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9o d19kb25lDQo+ICsJLy8gRklYTUUgSSBzdGlsbCBzZWUgdGhhdCB3YXJuaW5nIHdoZW4gcnVu bmluZyBtb2RldGVzdA0KPiArCWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpIHsNCj4gKwkJc3Bp bl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsNCj4gKwkJZHJtX2NydGNfc2Vu ZF92YmxhbmtfZXZlbnQoY3J0YywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsNCj4gKwkJY3J0Yy0+ c3RhdGUtPmV2ZW50ID0gTlVMTDsNCj4gKwkJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYt PmV2ZW50X2xvY2spOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBhdGFyaV9kcm1fcGlwZV9mdW5jcyA9 IHsNCj4gKwkubW9kZV92YWxpZCA9IGF0YXJpX2RybV9waXBlX21vZGVfdmFsaWQsDQo+ICsJ Lm1vZGVfZml4dXAgPSBhdGFyaV9kcm1fcGlwZV9tb2RlX2ZpeHVwLA0KPiArCS5jaGVjawkg ICAgPSBhdGFyaV9kcm1fcGlwZV9jaGVjaywNCj4gKwkuZW5hYmxlCSAgICA9IGF0YXJpX2Ry bV9waXBlX2VuYWJsZSwNCj4gKwkuZGlzYWJsZSAgICA9IGF0YXJpX2RybV9waXBlX2Rpc2Fi bGUsDQo+ICsJLnVwZGF0ZQkgICAgPSBhdGFyaV9kcm1fcGlwZV91cGRhdGUsDQo+ICsJRFJN X0dFTV9TSU1QTEVfRElTUExBWV9QSVBFX1NIQURPV19QTEFORV9GVU5DUywNCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCB1aW50MzJfdCBhdGFyaV9kcm1fZm9ybWF0c1tdID0gew0K PiArCURSTV9GT1JNQVRfQzEsCQkvKiBGSVhNRSAqLw0KPiArCURSTV9GT1JNQVRfQzIsCQkv KiBGSVhNRSAqLw0KPiArCURSTV9GT1JNQVRfQzQsCQkvKiBGSVhNRSAqLw0KPiArCURSTV9G T1JNQVRfQzgsCQkvKiBGSVhNRSBUVCAmIEZhbGNvbiBvbmx5ICovDQo+ICsJRFJNX0ZPUk1B VF9SR0I1NjUsCS8qIEZJWE1FIEZhbGNvbiBvbmx5ICovDQo+ICsJRFJNX0ZPUk1BVF9SR0I1 NjUgfCBEUk1fRk9STUFUX0JJR19FTkRJQU4sCS8qIEZJWE1FIEZhbGNvbiBvbmx5ICovDQo+ ICsJRFJNX0ZPUk1BVF9YUkdCODg4OCwJLyogRklYTUUgQWx3YXlzIG5lZWRlZD8gRS5nLiBm b3IgbW9kZXRlc3QgKi8NCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCB1aW50NjRfdCBh dGFyaV9kcm1fbW9kaWZpZXJzW10gPSB7DQo+ICsJRFJNX0ZPUk1BVF9NT0RfTElORUFSLA0K PiArCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQg YXRhcmlfZHJtX3BpcGVfaW5pdChzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJt KQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBkcm1fc2ltcGxlX2Rpc3Bs YXlfcGlwZV9pbml0KCZhdGFyaV9kcm0tPmRldiwgJmF0YXJpX2RybS0+cGlwZSwNCj4gKwkJ CQkJICAgJmF0YXJpX2RybV9waXBlX2Z1bmNzLA0KPiArCQkJCQkgICBhdGFyaV9kcm1fZm9y bWF0cywNCj4gKwkJCQkJICAgQVJSQVlfU0laRShhdGFyaV9kcm1fZm9ybWF0cyksDQo+ICsJ CQkJCSAgIGF0YXJpX2RybV9tb2RpZmllcnMsDQo+ICsJCQkJCSAgICZhdGFyaV9kcm0tPmNv bm4pOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkvLyBGSVhN RSBoYXJkY29kZWQgMjU2DQo+ICsJZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZSgmYXRh cmlfZHJtLT5waXBlLmNydGMsIDI1Nik7DQo+ICsJZHJtX2NydGNfZW5hYmxlX2NvbG9yX21n bXQoJmF0YXJpX2RybS0+cGlwZS5jcnRjLCAwLCBmYWxzZSwgMjU2KTsNCj4gKw0KPiArCWRy bV9wbGFuZV9lbmFibGVfZmJfZGFtYWdlX2NsaXBzKCZhdGFyaV9kcm0tPnBpcGUucGxhbmUp Ow0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCj4g Ky8qIGF0YXJpX2RybSBmcmFtZWJ1ZmZlcnMgJiBtb2RlIGNvbmZpZwkJCQkgICAgICAqLw0K PiArDQo+ICtzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcioNCj4gK2F0YXJpX2RybV9m Yl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsDQo+ICsJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9j bWQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7DQo+ICsNCj4gKwlz d2l0Y2ggKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpIHsNCj4gKwljYXNlIERSTV9GT1JNQVRf QzE6DQo+ICsJY2FzZSBEUk1fRk9STUFUX0MyOg0KPiArCWNhc2UgRFJNX0ZPUk1BVF9DNDoN Cj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIERSTV9GT1JNQVRfQzg6DQo+ICsJCS8vIEZJ WE1FIFRUICYgRmFsY29uIG9ubHkNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIERSTV9G T1JNQVRfUkdCNTY1Og0KPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjUgfCBEUk1fRk9STUFU X0JJR19FTkRJQU46DQo+ICsJCS8vIEZJWE1FIEZhbGNvbiBvbmx5DQo+ICsJCWJyZWFrOw0K PiArDQo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Og0KPiArCQkvLyBGSVhNRQ0KPiAr CQlicmVhazsNCj4gKw0KPiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOw0KPiArCX0NCg0KVGhlIGZvcm1hdCBjaGVja3MgZG9uJ3QgYmVsb25nIGhlcmUuIElJ UkMgdGhlIGZvcm1hdCB3aWxsIGJlIHZhbGlkYXRlZCANCndoZW4geW91IHRyeSB0byBzZXQg dGhlIGZyYW1lYnVmZmVyIGZvciBhIHBsYW5lIGR1cmluZyB0aGUgYXRvbWljIGNvbW1pdA0K DQo+ICsNCj4gKwlpZiAoYXRhcmlfZHJtX2NoZWNrX3NpemUobW9kZV9jbWQtPndpZHRoLCBt b2RlX2NtZC0+aGVpZ2h0LCBOVUxMKSA8IDApDQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOw0KDQpTYW1lIGhlcmUuIFRoZSBzaXplIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHdoZW4g dGhlIGZyYW1lYnVmZmVyIGlzIHVzZWQuDQoNCj4gKw0KPiArCS8vIEZJWE1FIGFsbG9jYXRl IEMxIGFuZCBSR0I1NjUgaW4gU1QtUkFNPw0KPiArCWZiID0gZHJtX2dlbV9mYl9jcmVhdGVf d2l0aF9kaXJ0eShkZXYsIGZpbGVfcHJpdiwgbW9kZV9jbWQpOw0KPiArCWRybV9XQVJOX09O X09OQ0UoZGV2LCBmYi0+cGl0Y2hlc1swXSA+IGZiLT53aWR0aCAqDQo+ICsJCQkgICAgICBk cm1fZm9ybWF0X2luZm9fYnBwKGZiLT5mb3JtYXQsIDApIC8gOCk7DQo+ICsJcmV0dXJuIGZi Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19m dW5jcyBhdGFyaV9kcm1fbW9kZV9jb25maWdfZnVuY3MgPSB7DQo+ICsJLmZiX2NyZWF0ZSA9 IGF0YXJpX2RybV9mYl9jcmVhdGUsDQo+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNf aGVscGVyX2NoZWNrLAkvLyBGSVhNRQ0KPiArCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21p Y19oZWxwZXJfY29tbWl0LAkvLyBGSVhNRQ0KDQpXaHkgRklYTUVzPyBUaGVzIGVsaW5lcyBh cHBlYXIgY29ycmVjdC4NCg0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBhdGFyaV9kcm1f bW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgYXRhcmlfZHJtX2RldmljZSAqYXRhcmlfZHJtKQ0K PiArew0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmYXRhcmlfZHJtLT5kZXY7DQo+ ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IGRybW1fbW9kZV9jb25maWdfaW5pdChkZXYp Ow0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBmYmh3 LT5jb25maWdfaW5pdChhdGFyaV9kcm0pOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiBy ZXQ7DQo+ICsNCj4gKwlkZXYtPm1vZGVfY29uZmlnLnByZWZlcl9zaGFkb3cgPSAwOw0KPiAr CS8vIEZJWE1FIGRybV9tb2RlX2FkZGZiMl9pb2N0bCgpIG5lZWRzDQo+ICsJLy8gRklYTUUg cXVpcmtfYWRkZmJfcHJlZmVyX2hvc3RfYnl0ZV9vcmRlciBvbiBiaWctZW5kaWFuDQo+ICsJ ZGV2LT5tb2RlX2NvbmZpZy5xdWlya19hZGRmYl9wcmVmZXJfaG9zdF9ieXRlX29yZGVyID0g dHJ1ZTsNCj4gKwlkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJmF0YXJpX2RybV9tb2RlX2Nv bmZpZ19mdW5jczsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gKi8NCj4gKw0KPiArREVGSU5FX0RSTV9HRU1fRk9QUyhhdGFyaV9kcm1fZm9w cyk7DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2RyaXZlciBhdGFyaV9kcm1f ZHJpdmVyID0gew0KPiArCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERS SVZFUl9HRU0gfCBEUklWRVJfQVRPTUlDLA0KPiArDQo+ICsJLm5hbWUJCSA9IERSSVZFUl9O QU1FLA0KPiArCS5kZXNjCQkgPSAiQXRhcmkiLA0KPiArCS5kYXRlCQkgPSAiMjAyMCIsDQo+ ICsJLm1ham9yCQkgPSAxLA0KPiArCS5taW5vcgkJID0gMCwNCj4gKw0KPiArCS5mb3BzCQkg PSAmYXRhcmlfZHJtX2ZvcHMsDQo+ICsJRFJNX0dFTV9TSE1FTV9EUklWRVJfT1BTLA0KPiAr fTsNCj4gKw0KPiArc3RhdGljIGludCBfX2luaXQgYXRhcmlfZHJtX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGF0YXJpX2RybV9kZXZp Y2UgKmF0YXJpX2RybTsNCj4gKwlpbnQgcGFkLCBkZXRlY3RlZF9tb2RlLCBlcnJvcjsNCj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Ow0KPiArCXVuc2lnbmVkIGxvbmcgbWVtX3JlcTsN Cj4gKwljaGFyICpvcHRpb24gPSBOVUxMOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAo ZmJfZ2V0X29wdGlvbnMoImF0YWZiIiwgJm9wdGlvbikpDQo+ICsJCXJldHVybiAtRU5PREVW Ow0KDQpUaGF0IGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgaGVyZS4NCg0KQmVzdCByZWdh cmRzDQpUaG9tYXMNCg0KPiArDQo+ICsJcmV0ID0gLUVOT01FTTsNCj4gKwlhdGFyaV9kcm0g PSBkZXZtX2RybV9kZXZfYWxsb2MoJnBkZXYtPmRldiwgJmF0YXJpX2RybV9kcml2ZXIsDQo+ ICsJCQkJICAgICAgIHN0cnVjdCBhdGFyaV9kcm1fZGV2aWNlLCBkZXYpOw0KPiArCWlmIChJ U19FUlIoYXRhcmlfZHJtKSkNCj4gKwkJcmV0dXJuIFBUUl9FUlIoYXRhcmlfZHJtKTsNCj4g Kw0KPiArCWRldiA9ICZhdGFyaV9kcm0tPmRldjsNCj4gKw0KPiArCWF0YWZiX3NldHVwKG9w dGlvbik7DQo+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IHN0YXJ0XG4iLCBfX2Z1bmNf Xyk7DQo+ICsNCj4gKwlkbyB7DQo+ICsjaWZkZWYgQVRBRkJfRVhUDQo+ICsJCWlmIChleHRl cm5hbF9hZGRyKSB7DQo+ICsJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0aWFsaXppbmcg ZXh0ZXJuYWwgaHdcbiIpOw0KPiArCQkJZmJodyA9ICZleHRfc3dpdGNoOw0KPiArCQkJYXRh cmlfZHJtLT5kZWZtb2RlID0gREVGTU9ERV9FWFQ7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0K PiArI2VuZGlmDQo+ICsjaWZkZWYgQVRBRkJfVFQNCj4gKwkJaWYgKEFUQVJJSFdfUFJFU0VO VChUVF9TSElGVEVSKSkgew0KPiArCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6 aW5nIFRUIGh3XG4iKTsNCj4gKwkJCWZiaHcgPSAmdHRfc3dpdGNoOw0KPiArCQkJYXRhcmlf ZHJtLT5kZWZtb2RlID0gREVGTU9ERV9UVDsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsj ZW5kaWYNCj4gKyNpZmRlZiBBVEFGQl9GQUxDT04NCj4gKwkJaWYgKEFUQVJJSFdfUFJFU0VO VChWSURFTF9TSElGVEVSKSkgew0KPiArCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW5pdGlh bGl6aW5nIEZhbGNvbiBod1xuIik7DQo+ICsJCQlmYmh3ID0gJmZhbGNvbl9zd2l0Y2g7DQo+ ICsJCQllcnJvciA9IHJlcXVlc3RfaXJxKElSUV9BVVRPXzQsIGZhbGNvbl92Ymxfc3dpdGNo ZXIsIDAsDQo+ICsJCQkJCSAgICAiZnJhbWVidWZmZXI6bW9kZXN3aXRjaCIsDQo+ICsJCQkJ CSAgICAmYXRhcmlfZHJtLT5waXBlLmNydGMpOw0KPiArCQkJaWYgKGVycm9yKQ0KPiArCQkJ CXJldHVybiBlcnJvcjsNCj4gKwkJCWF0YXJpX2RybS0+ZGVmbW9kZSA9IERFRk1PREVfRjMw Ow0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKyNlbmRpZg0KPiArI2lmZGVmIEFUQUZCX1NU RQ0KPiArCQlpZiAoQVRBUklIV19QUkVTRU5UKFNUTkRfU0hJRlRFUikgfHwNCj4gKwkJICAg IEFUQVJJSFdfUFJFU0VOVChFWFREX1NISUZURVIpKSB7DQo+ICsJCQlkZXZfZGJnKCZwZGV2 LT5kZXYsICJpbml0aWFsaXppbmcgU1QvRSBod1xuIik7DQo+ICsJCQlmYmh3ID0gJnN0X3N3 aXRjaDsNCj4gKwkJCWF0YXJpX2RybS0+ZGVmbW9kZSA9IERFRk1PREVfU1RFOw0KPiArCQkJ YnJlYWs7DQo+ICsJCX0NCj4gKwkJZmJodyA9ICZzdF9zd2l0Y2g7DQo+ICsJCWRldl93YXJu KCZwZGV2LT5kZXYsDQo+ICsJCQkgIkNhbm5vdCBkZXRlcm1pbmUgdmlkZW8gaGFyZHdhcmU7 IGRlZmF1bHRpbmcgdG8gU1QoZSlcbiIpOw0KPiArI2Vsc2UgLyogQVRBRkJfU1RFICovDQo+ ICsJCS8qIG5vIGRlZmF1bHQgZHJpdmVyIGluY2x1ZGVkICovDQo+ICsJCS8qIE5vYm9keSB3 aWxsIGV2ZXIgc2VlIHRoaXMgbWVzc2FnZSA6LSkgKi8NCj4gKwkJcGFuaWMoIkNhbm5vdCBp bml0aWFsaXplIHZpZGVvIGhhcmR3YXJlIik7DQo+ICsjZW5kaWYNCj4gKwl9IHdoaWxlICgw KTsNCj4gKw0KPiArCS8qIE11bHRpc3luYyBtb25pdG9yIGNhcGFiaWxpdGllcyAqLw0KPiAr CS8qIEF0YXJpLVRPUyBkZWZhdWx0cyBpZiBubyBib290IG9wdGlvbiBwcmVzZW50ICovDQo+ ICsJaWYgKGZiX2luZm8ubW9uc3BlY3MuaGZtaW4gPT0gMCkgew0KPiArCQlmYl9pbmZvLm1v bnNwZWNzLmhmbWluID0gMzEwMDA7DQo+ICsJCWZiX2luZm8ubW9uc3BlY3MuaGZtYXggPSAz MzAwMDsJLy8gRklYTUUgc3RtaWQgZmFpbHMgd2l0aCAzMjAwMA0KPiArCQlmYl9pbmZvLm1v bnNwZWNzLnZmbWluID0gNTg7DQo+ICsJCWZiX2luZm8ubW9uc3BlY3MudmZtYXggPSA2MjsN Cj4gKwl9DQo+ICsNCj4gKwlkZXRlY3RlZF9tb2RlID0gZmJody0+ZGV0ZWN0KCk7DQo+ICsJ Y2hlY2tfZGVmYXVsdF9wYXIoZGV0ZWN0ZWRfbW9kZSk7DQo+ICsjaWZkZWYgQVRBRkJfRVhU DQo+ICsJaWYgKCFleHRlcm5hbF9hZGRyKSB7DQo+ICsjZW5kaWYgLyogQVRBRkJfRVhUICov DQo+ICsJCW1lbV9yZXEgPSBkZWZhdWx0X21lbV9yZXEgKyBvdnNjX29mZnNldCArIG92c2Nf YWRkbGVuOw0KPiAgIAkJbWVtX3JlcSA9IFBBR0VfQUxJR04obWVtX3JlcSkgKyBQQUdFX1NJ WkU7DQo+ICAgCQlzY3JlZW5fYmFzZSA9IGF0YXJpX3N0cmFtX2FsbG9jKG1lbV9yZXEsICJh dGFmYiIpOw0KPiAgIAkJaWYgKCFzY3JlZW5fYmFzZSkNCj4gQEAgLTMwOTgsNyArNDUzOCw2 IEBAIHN0YXRpYyBpbnQgX19pbml0IGF0YWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpDQo+ICAgCX0NCj4gICAjZW5kaWYgLyogQVRBRkJfRVhUICovDQo+ICAgDQo+ IC0vLwlzdHJjcHkoZmJfaW5mby5tb2RlLT5uYW1lLCAiQXRhcmkgQnVpbHRpbiAiKTsNCj4g ICAJZmJfaW5mby5mYm9wcyA9ICZhdGFmYl9vcHM7DQo+ICAgCS8vIHRyeSB0byBzZXQgZGVm YXVsdCAoZGV0ZWN0ZWQ7IHJlcXVlc3RlZCkgdmFyDQo+ICAgCWRvX2ZiX3NldF92YXIoJmF0 YWZiX3ByZWRlZmluZWRbZGVmYXVsdF9wYXIgLSAxXSwgMSk7DQo+IEBAIC0zMTA5LDI1ICs0 NTQ4LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGF0YWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpDQo+ICAgCS8vIHNvIHNldCBzYW5lIHZhciBmaXJzdCwgdGhlbiBj YWxsIGF0YWZiX3NldF9wYXINCj4gICAJYXRhZmJfZ2V0X3ZhcigmZmJfaW5mby52YXIsICZm Yl9pbmZvKTsNCj4gICANCj4gLSNpZmRlZiBBVEFGQl9GQUxDT04NCj4gLQlmYl9pbmZvLnBz ZXVkb19wYWxldHRlID0gY3VycmVudF9wYXIuaHcuZmFsY29uLnBzZXVkb19wYWxldHRlOw0K PiAtI2VuZGlmDQo+ICAgCWZiX2luZm8uZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOw0K PiAgIA0KPiAtCWlmICghZmJfZmluZF9tb2RlKCZmYl9pbmZvLnZhciwgJmZiX2luZm8sIG1v ZGVfb3B0aW9uLCBhdGFmYl9tb2RlZGIsDQo+IC0JCQkgIE5VTV9UT1RBTF9NT0RFUywgJmF0 YWZiX21vZGVkYltkZWZtb2RlXSwNCj4gLQkJCSAgZmJfaW5mby52YXIuYml0c19wZXJfcGl4 ZWwpKSB7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCWZiX3ZpZGVv bW9kZV90b19tb2RlbGlzdChhdGFmYl9tb2RlZGIsIE5VTV9UT1RBTF9NT0RFUywNCj4gLQkJ CQkgJmZiX2luZm8ubW9kZWxpc3QpOw0KPiAtDQo+ICAgCWF0YWZiX3NldF9kaXNwKCZmYl9p bmZvKTsNCj4gICANCj4gLQlmYl9hbGxvY19jbWFwKCYoZmJfaW5mby5jbWFwKSwgMSA8PCBm Yl9pbmZvLnZhci5iaXRzX3Blcl9waXhlbCwgMCk7DQo+IC0NCj4gLQ0KPiAgIAlkZXZfaW5m bygmcGRldi0+ZGV2LCAiRGV0ZXJtaW5lZCAlZHglZCwgZGVwdGggJWRcbiIsIGZiX2luZm8u dmFyLnhyZXMsDQo+ICAgCQkgZmJfaW5mby52YXIueXJlcywgZmJfaW5mby52YXIuYml0c19w ZXJfcGl4ZWwpOw0KPiAgIAlpZiAoKGZiX2luZm8udmFyLnhyZXMgIT0gZmJfaW5mby52YXIu eHJlc192aXJ0dWFsKSB8fA0KPiBAQCAtMzEzNSw1MyArNDU1OSwxMDkgQEAgc3RhdGljIGlu dCBfX2luaXQgYXRhZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4g ICAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIgICB2aXJ0dWFsICVkeCVkXG4iLA0KPiAgIAkJ CSBmYl9pbmZvLnZhci54cmVzX3ZpcnR1YWwsIGZiX2luZm8udmFyLnlyZXNfdmlydHVhbCk7 DQo+ICAgDQo+IC0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKSA8IDApIHsN Cj4gKwlhdGFyaV9kcm0tPmJwcCA9IGZiX2luZm8udmFyLmJpdHNfcGVyX3BpeGVsOw0KPiAr DQo+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KCZhdGFyaV9kcm0tPmRldiwgMSk7DQo+ICsJ aWYgKHJldCkNCj4gKwkJZ290byBmYWlsOw0KPiArDQo+ICsJcmV0ID0gYXRhcmlfZHJtX21v ZGVfY29uZmlnX2luaXQoYXRhcmlfZHJtKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIGZh aWw7DQo+ICsNCj4gKwlyZXQgPSBhdGFyaV9kcm1fY29ubl9pbml0KGF0YXJpX2RybSk7DQo+ ICsJaWYgKHJldCA8IDApDQo+ICsJCWdvdG8gZmFpbDsNCj4gKw0KPiArCXJldCA9IGF0YXJp X2RybV9waXBlX2luaXQoYXRhcmlfZHJtKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJZ290 byBmYWlsOw0KPiArDQo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7DQo+ICsNCj4g KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOw0KPiArCXJldCA9IGRybV9kZXZf cmVnaXN0ZXIoZGV2LCAwKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIGZhaWw7DQo+ICsN Cj4gKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQXRhcmkgRFJNLCB1c2luZyAlZEsgb2Ygdmlk ZW8gbWVtb3J5XG4iLA0KPiArCQkgc2NyZWVuX2xlbiA+PiAxMCk7DQo+ICsNCj4gKwlkcm1f ZmJkZXZfZ2VuZXJpY19zZXR1cChkZXYsIGRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2Rl cHRoKTsNCj4gKw0KPiArCS8qIFRPRE86IFRoaXMgZHJpdmVyIGNhbm5vdCBiZSB1bmxvYWRl ZCB5ZXQgKi8NCj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArZmFpbDoNCj4gKwkvKiBGSVhNRSBk cm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoKSAqLw0KPiArCS8qIEZJWE1FIGNsZWFudXAgbm9u LWV4dGVybmFsIGZyYW1lIGJ1ZmZlciAqLw0KPiAgICNpZmRlZiBBVEFGQl9FWFQNCj4gLQkJ aWYgKGV4dGVybmFsX2FkZHIpIHsNCj4gLQkJCWlvdW5tYXAoZXh0ZXJuYWxfc2NyZWVuX2Jh c2UpOw0KPiAtCQkJZXh0ZXJuYWxfYWRkciA9IDA7DQo+IC0JCX0NCj4gLQkJaWYgKGV4dGVy bmFsX3ZnYWlvYmFzZSkgew0KPiAtCQkJaW91bm1hcCgodm9pZCopZXh0ZXJuYWxfdmdhaW9i YXNlKTsNCj4gLQkJCWV4dGVybmFsX3ZnYWlvYmFzZSA9IDA7DQo+IC0JCX0NCj4gLSNlbmRp Zg0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwlpZiAoZXh0ZXJuYWxfYWRkcikgew0KPiAr CQlpb3VubWFwKGV4dGVybmFsX3NjcmVlbl9iYXNlKTsNCj4gKwkJZXh0ZXJuYWxfYWRkciA9 IDA7DQo+ICsJfQ0KPiArCWlmIChleHRlcm5hbF92Z2Fpb2Jhc2UpIHsNCj4gKwkJaW91bm1h cCgodm9pZCopZXh0ZXJuYWxfdmdhaW9iYXNlKTsNCj4gKwkJZXh0ZXJuYWxfdmdhaW9iYXNl ID0gMDsNCj4gICAJfQ0KPiArI2VuZGlmDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gICAN Cj4gLQlmYl9pbmZvKCZmYl9pbmZvLCAiZnJhbWUgYnVmZmVyIGRldmljZSwgdXNpbmcgJWRL IG9mIHZpZGVvIG1lbW9yeVxuIiwNCj4gLQkJc2NyZWVuX2xlbiA+PiAxMCk7DQo+ICsjaWYg MCAvLyBGSVhNRQ0KPiArc3RhdGljIGludCBhdGFyaV9kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiArDQo+ICsJZHJtX2Rldl91bnBsdWco ZGV2KTsNCj4gKwlkcm1fYXRvbWljX2hlbHBlcl9zaHV0ZG93bihkZXYpOw0KPiAgIA0KPiAt CS8qIFRPRE86IFRoaXMgZHJpdmVyIGNhbm5vdCBiZSB1bmxvYWRlZCB5ZXQgKi8NCj4gICAJ cmV0dXJuIDA7DQo+ICAgfQ0KPiArI2VuZGlmDQo+ICAgDQo+IC1zdGF0aWMgdm9pZCBhdGFm Yl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArc3RhdGljIHZv aWQgYXRhcmlfZHJtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ ICAgew0KPiAgIAkvKiBVbmJsYW5rIGJlZm9yZSBrZXhlYyAqLw0KPiAgIAlpZiAoZmJody0+ YmxhbmspDQo+ICAgCQlmYmh3LT5ibGFuaygwKTsNCj4gICB9DQo+ICAgDQo+IC1zdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdGFmYl9kcml2ZXIgPSB7DQo+IC0JLnNodXRkb3du CT0gYXRhZmJfc2h1dGRvd24sDQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBh dGFyaV9kcm1fcGxhdGZvcm1fZHJpdmVyID0gew0KPiAgIAkuZHJpdmVyCT0gew0KPiAtCQku bmFtZQk9ICJhdGFmYiIsDQo+ICsJCS5uYW1lID0gRFJJVkVSX05BTUUsDQo+ICAgCX0sDQo+ ICsJLy8gRklYTUUgLnByb2JlID0gYXRhcmlfZHJtX3Byb2JlLA0KPiArCS8vIEZJWE1FIC5y ZW1vdmUgPSBhdGFyaV9kcm1fcmVtb3ZlLA0KPiArCS5zaHV0ZG93biA9IGF0YXJpX2RybV9z aHV0ZG93biwNCj4gICB9Ow0KPiAgIA0KPiAtc3RhdGljIGludCBfX2luaXQgYXRhZmJfaW5p dCh2b2lkKQ0KPiArc3RhdGljIGludCBfX2luaXQgYXRhcmlfZHJtX2luaXQodm9pZCkNCj4g ICB7DQo+ICAgCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQo+ICAgDQo+ICAgCWlm ICghTUFDSF9JU19BVEFSSSkNCj4gICAJCXJldHVybiAtRU5PREVWOw0KPiAgIA0KPiAtCXBk ZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJhdGFmYiIsIC0xLCBOVUxM LCAwKTsNCj4gKwkvLyBGSVhNRSBTaG91bGQgdXNlIHRoZSBzYW1lIHBsYXRmb3JtIGRldmlj ZSBhcyBhdGFmYg0KPiArCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxl KERSSVZFUl9OQU1FLCAtMSwgTlVMTCwgMCk7DQo+ICAgCWlmIChJU19FUlIocGRldikpDQo+ ICAgCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsNCj4gICANCj4gLQlyZXR1cm4gcGxhdGZvcm1f ZHJpdmVyX3Byb2JlKCZhdGFmYl9kcml2ZXIsIGF0YWZiX3Byb2JlKTsNCj4gKwkvLyBGSVhN RSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXINCj4gKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVy X3Byb2JlKCZhdGFyaV9kcm1fcGxhdGZvcm1fZHJpdmVyLA0KPiArCQkJCSAgICAgYXRhcmlf ZHJtX3Byb2JlKTsNCj4gK30NCj4gKw0KPiArbW9kdWxlX2luaXQoYXRhcmlfZHJtX2luaXQp Ow0KPiArDQo+ICsjaWYgMCAvLyBGSVhNRQ0KPiArc3RhdGljIHZvaWQgX19leGl0IGF0YXJp X2RybV9leGl0KHZvaWQpDQo+ICt7DQo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIo JmF0YXJpX2RybV9wbGF0Zm9ybV9kcml2ZXIpOw0KPiAgIH0NCj4gICANCj4gLWRldmljZV9p bml0Y2FsbChhdGFmYl9pbml0KTsNCj4gK21vZHVsZV9leGl0KGF0YXJpX2RybV9leGl0KTsN Cj4gKyNlbmRpZg0KPiArDQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQoNCi0tIA0KVGhv bWFzIFppbW1lcm1hbm4NCkdyYXBoaWNzIERyaXZlciBEZXZlbG9wZXINClNVU0UgU29mdHdh cmUgU29sdXRpb25zIEdlcm1hbnkgR21iSA0KTWF4ZmVsZHN0ci4gNSwgOTA0MDkgTsO8cm5i ZXJnLCBHZXJtYW55DQooSFJCIDM2ODA5LCBBRyBOw7xybmJlcmcpDQpHZXNjaMOkZnRzZsO8 aHJlcjogSXZvIFRvdGV2DQo= --------------pMaauVpGXDs4ikQbubxuupzL-- --------------ZkGgoIC9JWNqP6H1mcQIhqcP Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAmOCKAoFAwAAAAAACgkQlh/E3EQov+AP Lg//VaH5y8E2HJ1i+4xupxJoUmstTpMBM891CFoS1qAiEhG3Llc3Ds0aKbGHhbBsMei8wlc4Uhfp MwXHvnEGKXZtofAfy6cj+qTp23VWvCeBWW0pI8691bxXxExJC6FjyDSLVTFQmW64RsG/aFVHFpHb HP1bw4fW16DYad3Y1O6X/ADis3J+V3g87ZwA7GgZjaZxTfB7iitQBF6mKazStlwLag5Hqxkez500 dlfwBrAbwOstjRJBxUJtGh8csUTH5/j6sWKCWdF1Y09kXXDFvQzCXRWxzDpuQ/2rngu6z+dmBfKL cASnDaja/J2QYLNFYGMktRLivljErSSsszvSjoENzI+LV0ChJ9W4hyzJOlP302QSTeL99qz1gGdl LKwy+gdJx7VJrO9u9tOSlb4WX7nQgMGFuDbJJ61qwfgzwAYv0mmhhpG4cTMZgDnorAtHLb3tO7zz X0DfxLacIjnIkjnqPhTHL1KmlD+UQkEjcNL1yEwE9bSqFSHkD5dFYOj3pQhR/j+ZCoX0q0wfdCpy UFtKohfoJibvaPf11wlwmqtdpk9uNU0W753t+GoCVcIiUiv4aysvKusaZQl6a1GyUZj2dS2cgzTu Rgxqgz8DingRPqJkd1Bw1EejZfMCwXVrNkD0BkPqk8uD4OC39K6fgBj6ZHkXvCrx1UvgaIs/QN6S b5o= =buCQ -----END PGP SIGNATURE----- --------------ZkGgoIC9JWNqP6H1mcQIhqcP--