Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp2086634rwb; Fri, 2 Dec 2022 05:26:07 -0800 (PST) X-Google-Smtp-Source: AA0mqf4PZ/lo2Jz+B6+V5hT99YPwpHKDJ8Xs3Lxs8KYa7d887FQOoAgPoAcErS5Jkz/O8o7NZY6M X-Received: by 2002:aa7:cad5:0:b0:461:948e:55db with SMTP id l21-20020aa7cad5000000b00461948e55dbmr64716653edt.131.1669987566795; Fri, 02 Dec 2022 05:26:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669987566; cv=none; d=google.com; s=arc-20160816; b=pP4AKoa+LFicXxXvNhq0Wb4kmVCzrfTBqxmxIX6tdgBKQ7PsxsNLFQVu8SiWQTWkZC ei3oSxmKAkklXOvZHnfW1QRyZeM4wyw1mwz+wb6Ow2+rs74tX4E/C97yRx7Hmqy3J11P /d1YqNCGekaFwUtheT/gaZt44mti2qFd118a2nGz1/7r+fMyyavwKHQO4mYhLR1fb8Zm mlPUMbPiJ6RZ9aP8W9yWARWdRvGlm+yuFUm85mC9yPXAGsa4zlBaF+F9C3ctlMoh519j 1fMvCLQTo+I01K0ik1NoEY0o0cERMhXLl07I3PUdqps5ZbCRKlMhFWWaeGe/NT34HR+W l0Lw== 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=5NbLYFuUQM+GF7APPbSkkDmJcib55ZKJYBsA3INEA8A=; b=vGmZ6zLPOG/SRTDUkH1evb15YtROXztC4dbLAnAcfNY6S4L7Pu82sI0O5avDeTWxDY 4xEpExM6dsiXAy4nWJbwxEcIJhLz2NIkjeP6T0L+oSp61UJeW5r4Ygnh6N+ZWk7fohTM EXFlzTMuxvCf8iYGn4d23yUqLZnDpYamCJvg8tA2XbDz6iJcitKKNDbG0C0qd98YTMRX Nwa0KPwefAY48HrmwwYEMYlpqXH17FcfCMRqej2K3anU8CVlSIDrSVQVYHgZLoXXa5F7 STviJ+n+pA/k6+Qz81d3Fi2sLwIkgya4vgnNTUC9d0dwimgWdR3fO2iyQbgp0CobjeP5 5dZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=oqsT0NsS; dkim=neutral (no key) header.i=@suse.de; 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 x14-20020a05640226ce00b0046107f9520csi5890818edd.210.2022.12.02.05.25.41; Fri, 02 Dec 2022 05:26:06 -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=oqsT0NsS; dkim=neutral (no key) header.i=@suse.de; 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 S233575AbiLBNAw (ORCPT + 83 others); Fri, 2 Dec 2022 08:00:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231776AbiLBNAu (ORCPT ); Fri, 2 Dec 2022 08:00:50 -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 85A8EBDCE6 for ; Fri, 2 Dec 2022 05:00:48 -0800 (PST) Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73]) (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 07ECE1F88C; Fri, 2 Dec 2022 13:00:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1669986047; 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=5NbLYFuUQM+GF7APPbSkkDmJcib55ZKJYBsA3INEA8A=; b=oqsT0NsS7+NyZTJZ715l3bgs4PhvVYqbnoVz8KAkSjsIGFUFVK5oeDzbfaK/OWJPPTHItS d7+0OhYoca+QMjhm8n6lijhPeYCFSfy+6iH2lvuwHm4Ric7udodxL62YSlknIyT3lV0QKT 1odYW0PMqFInVxK+/YqYmd1/EM8/TXE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1669986047; 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=5NbLYFuUQM+GF7APPbSkkDmJcib55ZKJYBsA3INEA8A=; b=5HYZ4QDJAb9N4W5G+uVAHwe8CHapA6N0h6zJaSocvMCO6RE6JQDQ9xKN7nojSAbqCIuX4o 8DHmv7GS1yW7lVBQ== Received: from imap1.suse-dmz.suse.de (imap1.suse-dmz.suse.de [192.168.254.73]) (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 imap1.suse-dmz.suse.de (Postfix) with ESMTPS id 54A0E133DE; Fri, 2 Dec 2022 13:00:46 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap1.suse-dmz.suse.de with ESMTPSA id eGCwE/72iWP8PQAAGKfGzw (envelope-from ); Fri, 02 Dec 2022 13:00:46 +0000 Message-ID: <39d8ac1a-d92f-7cdc-14cd-944342f78c1a@suse.de> Date: Fri, 2 Dec 2022 14:00:45 +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: [RESEND PATCH linux-next 2/2] drm: Remove some obsolete drivers(tdfx, mga, i810, savage, r128, sis) Content-Language: en-US To: Cai Huoqing Cc: Maarten Lankhorst , Maxime Ripard , David Airlie , Daniel Vetter , Randy Dunlap , Borislav Petkov , Danilo Krummrich , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org References: <20221202120230.20264-1-cai.huoqing@linux.dev> From: Thomas Zimmermann In-Reply-To: <20221202120230.20264-1-cai.huoqing@linux.dev> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------l0RAmvvdRQNw460QO75xoDu9" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------l0RAmvvdRQNw460QO75xoDu9 Content-Type: multipart/mixed; boundary="------------XWGE6nYnMHBNCA1TWcWsBai5"; protected-headers="v1" From: Thomas Zimmermann To: Cai Huoqing Cc: Maarten Lankhorst , Maxime Ripard , David Airlie , Daniel Vetter , Randy Dunlap , Borislav Petkov , Danilo Krummrich , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Message-ID: <39d8ac1a-d92f-7cdc-14cd-944342f78c1a@suse.de> Subject: Re: [RESEND PATCH linux-next 2/2] drm: Remove some obsolete drivers(tdfx, mga, i810, savage, r128, sis) References: <20221202120230.20264-1-cai.huoqing@linux.dev> In-Reply-To: <20221202120230.20264-1-cai.huoqing@linux.dev> --------------XWGE6nYnMHBNCA1TWcWsBai5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMDIuMTIuMjIgdW0gMTM6MDEgc2NocmllYiBDYWkgSHVvcWluZzoNCj4gQ29t bWl0IDM5OTUxNmFiMGZlZSAoIk1BSU5UQUlORVJTOiBBZGQgYSBidW5jaCBvZiBsZWdhY3kg KFVNUykgRFJNIGRyaXZlcnMiKQ0KPiBtYXJrZWQgdGhlc2UgZHJpdmVycyBvYnNvbGV0ZSA3 IHllYXJzIGFnby4NCj4gQW5kIHRoZSBtZXNhIFVNRCBvZiB0aGVzZSBkcm0gZHJpdmVycyBh bHJlYWR5IGluIGRlcHJlY2F0ZWQgbGlzdA0KPiBpbiB0aGUgbGluazogaHR0cHM6Ly9kb2Nz Lm1lc2EzZC5vcmcvc3lzdGVtcy5odG1sDQo+IA0KPiAzZGZ4IEdsaWRlLS0+ZHJpdmVyL2dw dS9kcm0vdGRmeA0KPiBNYXRyb3gtLT5kcml2ZXIvZ3B1L2RybS9tZ2ENCj4gSW50ZWwgaTgx MC0tPmRyaXZlci9ncHUvZHJtL2k4MTANCj4gUzMgU2F2YWdlLS0+ZHJpdmVycy9ncHUvZHJt L3NhdmFnZS8NCj4gQVRJIFJhZ2UgMTI4LT5kcml2ZXJzL2dwdS9kcm0vcjEyOC8NCj4gU2ls aWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMtPmRyaXZlcnMvZ3B1L2RybS9zaXMvDQo+IA0KPiBJ dCdzIHRpbWUgdG8gcmVtb3ZlIHRoZXNlLg0KDQpBdCBmaXJzdCwgSSB3YXMgYWJvdXQgdG8g cmVwbHkgYSBzaW1wbGUgJ05vJy4gQnV0IHRoaW5raW5nIGFib3V0IGl0LCB3ZSANCnNob3Vs ZCBjb25zaWRlciBkb2luZyB0aGlzLiBFdmVyeSBvdGhlciBjb21wb25lbnQgKE1lc2EsIFgx MSwgM2QgZ2FtZXMpIA0KdGhhdCBjb3VsZCByZWFsaXN0aWNhbGx5IHVzZSB0aGVzZSBkcml2 ZXJzIGlzIG9ic29sZXRlIGJ5IG5vdy4NCg0KQW5kIHBsZWFzZSBhZGQgdmlhIHRvIHRoZSBw YXRjaHNldC4gVGhlcmUncyBvbi1nb2luZyB3b3JrIHRvIGNyZWF0ZSBhIA0KS01TIGRyaXZl ciBhbmQgdGhhdCdzIGVhc2llciB3aXRob3V0IHRoZSBvbGQgVU1TIGRyaXZlci4NCg0KQmVz dCByZWdhcmRzDQpUaG9tYXMNCg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2FpIEh1b3Fpbmcg PGNhaS5odW9xaW5nQGxpbnV4LmRldj4NCj4gLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL0tj b25maWcgICAgICAgICAgICAgICB8ICAgNTAgLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSAgICAgICAgICAgICAgfCAgICA2IC0NCj4gICBkcml2ZXJzL2dwdS9kcm0vaTgxMC9N YWtlZmlsZSAgICAgICAgIHwgICAgOCAtDQo+ICAgZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgx MF9kbWEuYyAgICAgICB8IDEyNjYgLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAgIGRyaXZlcnMv Z3B1L2RybS9pODEwL2k4MTBfZHJ2LmMgICAgICAgfCAgMTAxIC0tDQo+ICAgZHJpdmVycy9n cHUvZHJtL2k4MTAvaTgxMF9kcnYuaCAgICAgICB8ICAyNDYgLS0tLQ0KPiAgIGRyaXZlcnMv Z3B1L2RybS9tZ2EvTWFrZWZpbGUgICAgICAgICAgfCAgIDExIC0NCj4gICBkcml2ZXJzL2dw dS9kcm0vbWdhL21nYV9kbWEuYyAgICAgICAgIHwgMTE2OCAtLS0tLS0tLS0tLS0tLS0tLS0N Cj4gICBkcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYyAgICAgICAgIHwgIDEwNCAtLQ0K PiAgIGRyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oICAgICAgICAgfCAgNjg1IC0tLS0t LS0tLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaW9jMzIuYyAgICAgICB8ICAx OTcgLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaXJxLmMgICAgICAgICB8ICAx NjkgLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYyAgICAgICB8IDEw OTkgLS0tLS0tLS0tLS0tLS0tLS0NCj4gICBkcml2ZXJzL2dwdS9kcm0vbWdhL21nYV93YXJw LmMgICAgICAgIHwgIDE2NyAtLS0NCj4gICBkcml2ZXJzL2dwdS9kcm0vcjEyOC9NYWtlZmls ZSAgICAgICAgIHwgICAxMCAtDQo+ICAgZHJpdmVycy9ncHUvZHJtL3IxMjgvYXRpX3BjaWdh cnQuYyAgICB8ICAyMjggLS0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yMTI4L2F0aV9wY2ln YXJ0LmggICAgfCAgIDMxIC0NCj4gICBkcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5j ICAgICAgIHwgIDk0NCAtLS0tLS0tLS0tLS0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yMTI4 L3IxMjhfZHJ2LmMgICAgICAgfCAgMTE2IC0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL3IxMjgv cjEyOF9kcnYuaCAgICAgICB8ICA1NDQgLS0tLS0tLS0NCj4gICBkcml2ZXJzL2dwdS9kcm0v cjEyOC9yMTI4X2lvYzMyLmMgICAgIHwgIDE5OSAtLS0NCj4gICBkcml2ZXJzL2dwdS9kcm0v cjEyOC9yMTI4X2lycS5jICAgICAgIHwgIDExOCAtLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9y MTI4L3IxMjhfc3RhdGUuYyAgICAgfCAxNjQxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cj4gICBkcml2ZXJzL2dwdS9kcm0vc2F2YWdlL01ha2VmaWxlICAgICAgIHwgICAgOSAtDQo+ ICAgZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfYmNpLmMgICB8IDEwODIgLS0tLS0t LS0tLS0tLS0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2Rydi5jICAg fCAgIDkxIC0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfZHJ2LmggICB8 ICA1ODAgLS0tLS0tLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2Vfc3Rh dGUuYyB8IDExNjkgLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL3Np cy9NYWtlZmlsZSAgICAgICAgICB8ICAgMTAgLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9zaXMv c2lzX2Rydi5jICAgICAgICAgfCAgMTQzIC0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9zaXMv c2lzX2Rydi5oICAgICAgICAgfCAgIDgwIC0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL3Npcy9z aXNfbW0uYyAgICAgICAgICB8ICAzNjMgLS0tLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL3Rk ZngvTWFrZWZpbGUgICAgICAgICB8ICAgIDggLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS90ZGZ4 L3RkZnhfZHJ2LmMgICAgICAgfCAgIDkwIC0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL3RkZngv dGRmeF9kcnYuaCAgICAgICB8ICAgNDcgLQ0KPiAgIDM1IGZpbGVzIGNoYW5nZWQsIDEyNzgw IGRlbGV0aW9ucygtKQ0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTgxMC9NYWtlZmlsZQ0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTgxMC9pODEwX2RtYS5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pODEwL2k4MTBfZHJ2LmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k4MTAvaTgxMF9kcnYuaA0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbWdhL01ha2VmaWxlDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZ2EvbWdhX2RtYS5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZ2EvbWdhX2Rydi5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZ2EvbWdhX2Rydi5oDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZ2EvbWdhX2lvYzMyLmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21nYS9tZ2FfaXJxLmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21nYS9tZ2Ffc3RhdGUuYw0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbWdhL21nYV93YXJwLmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3IxMjgvTWFrZWZpbGUNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3IxMjgvYXRpX3BjaWdhcnQuYw0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vcjEyOC9hdGlfcGNpZ2FydC5oDQo+ICAgZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMNCj4gICBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYw0KPiAgIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oDQo+ICAgZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaW9jMzIuYw0KPiAgIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lycS5jDQo+ICAgZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYw0KPiAg IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc2F2YWdlL01ha2VmaWxlDQo+ ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2Jj aS5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2 YWdlX2Rydi5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zYXZh Z2Uvc2F2YWdlX2Rydi5oDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9zYXZhZ2Uvc2F2YWdlX3N0YXRlLmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3Npcy9NYWtlZmlsZQ0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vc2lzL3Npc19kcnYuYw0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vc2lzL3Npc19kcnYuaA0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vc2lzL3Npc19tbS5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS90ZGZ4L01ha2VmaWxlDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcNCj4gaW5kZXggMzE1 Y2JkZjYxOTc5Li5hNzBhODc3OTg4OTQgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnDQo+IEBAIC0zOTIs NDkgKzM5Miw2IEBAIG1lbnVjb25maWcgRFJNX0xFR0FDWQ0KPiAgIA0KPiAgIGlmIERSTV9M RUdBQ1kNCj4gICANCj4gLWNvbmZpZyBEUk1fVERGWA0KPiAtCXRyaXN0YXRlICIzZGZ4IEJh bnNoZWUvVm9vZG9vMysiDQo+IC0JZGVwZW5kcyBvbiBEUk0gJiYgUENJDQo+IC0JaGVscA0K PiAtCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgM2RmeCBCYW5zaGVlIG9y IFZvb2RvbzMgKG9yIGxhdGVyKSwNCj4gLQkgIGdyYXBoaWNzIGNhcmQuICBJZiBNIGlzIHNl bGVjdGVkLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRkZnguDQo+IC0NCj4gLWNvbmZp ZyBEUk1fUjEyOA0KPiAtCXRyaXN0YXRlICJBVEkgUmFnZSAxMjgiDQo+IC0JZGVwZW5kcyBv biBEUk0gJiYgUENJDQo+IC0Jc2VsZWN0IEZXX0xPQURFUg0KPiAtCWhlbHANCj4gLQkgIENo b29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBBVEkgUmFnZSAxMjggZ3JhcGhpY3Mg Y2FyZC4gIElmIE0NCj4gLQkgIGlzIHNlbGVjdGVkLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2Fs bGVkIHIxMjguICBBR1Agc3VwcG9ydCBmb3INCj4gLQkgIHRoaXMgY2FyZCBpcyBzdHJvbmds eSBzdWdnZXN0ZWQgKHVubGVzcyB5b3UgaGF2ZSBhIFBDSSB2ZXJzaW9uKS4NCj4gLQ0KPiAt Y29uZmlnIERSTV9JODEwDQo+IC0JdHJpc3RhdGUgIkludGVsIEk4MTAiDQo+IC0JIyAhUFJF RU1QVElPTiBiZWNhdXNlIG9mIG1pc3NpbmcgaW9jdGwgbG9ja2luZw0KPiAtCWRlcGVuZHMg b24gRFJNICYmIEFHUCAmJiBBR1BfSU5URUwgJiYgKCFQUkVFTVBUSU9OIHx8IEJST0tFTikN Cj4gLQloZWxwDQo+IC0JICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gSW50 ZWwgSTgxMCBncmFwaGljcyBjYXJkLiAgSWYgTSBpcw0KPiAtCSAgc2VsZWN0ZWQsIHRoZSBt b2R1bGUgd2lsbCBiZSBjYWxsZWQgaTgxMC4gIEFHUCBzdXBwb3J0IGlzIHJlcXVpcmVkDQo+ IC0JICBmb3IgdGhpcyBkcml2ZXIgdG8gd29yay4NCj4gLQ0KPiAtY29uZmlnIERSTV9NR0EN Cj4gLQl0cmlzdGF0ZSAiTWF0cm94IGcyMDAvZzQwMCINCj4gLQlkZXBlbmRzIG9uIERSTSAm JiBQQ0kNCj4gLQlzZWxlY3QgRldfTE9BREVSDQo+IC0JaGVscA0KPiAtCSAgQ2hvb3NlIHRo aXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWF0cm94IEcyMDAsIEc0MDAgb3IgRzQ1MCBncmFw aGljcw0KPiAtCSAgY2FyZC4gIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbCBi ZSBjYWxsZWQgbWdhLiAgQUdQDQo+IC0JICBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGlz IGRyaXZlciB0byB3b3JrLg0KPiAtDQo+IC1jb25maWcgRFJNX1NJUw0KPiAtCXRyaXN0YXRl ICJTaVMgdmlkZW8gY2FyZHMiDQo+IC0JZGVwZW5kcyBvbiBEUk0gJiYgQUdQDQo+IC0JZGVw ZW5kcyBvbiBGQl9TSVMgfHwgRkJfU0lTPW4NCj4gLQloZWxwDQo+IC0JICBDaG9vc2UgdGhp cyBvcHRpb24gaWYgeW91IGhhdmUgYSBTaVMgNjMwIG9yIGNvbXBhdGlibGUgdmlkZW8NCj4g LQkgIGNoaXBzZXQuIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxl ZCBzaXMuIEFHUA0KPiAtCSAgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIg dG8gd29yay4NCj4gLQ0KPiAgIGNvbmZpZyBEUk1fVklBDQo+ICAgCXRyaXN0YXRlICJWaWEg dW5pY2hyb21lIHZpZGVvIGNhcmRzIg0KPiAgIAlkZXBlbmRzIG9uIERSTSAmJiBQQ0kNCj4g QEAgLTQ0MiwxMyArMzk5LDYgQEAgY29uZmlnIERSTV9WSUENCj4gICAJICBDaG9vc2UgdGhp cyBvcHRpb24gaWYgeW91IGhhdmUgYSBWaWEgdW5pY2hyb21lIG9yIGNvbXBhdGlibGUgdmlk ZW8NCj4gICAJICBjaGlwc2V0LiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBi ZSBjYWxsZWQgdmlhLg0KPiAgIA0KPiAtY29uZmlnIERSTV9TQVZBR0UNCj4gLQl0cmlzdGF0 ZSAiU2F2YWdlIHZpZGVvIGNhcmRzIg0KPiAtCWRlcGVuZHMgb24gRFJNICYmIFBDSQ0KPiAt CWhlbHANCj4gLQkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFNhdmFnZTNE LzQvU3VwZXJTYXZhZ2UvUHJvL1R3aXN0ZXINCj4gLQkgIGNoaXBzZXQuIElmIE0gaXMgc2Vs ZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYXZhZ2UuDQo+IC0NCj4gICBlbmRp ZiAjIERSTV9MRUdBQ1kNCj4gICANCj4gICBjb25maWcgRFJNX0VYUE9SVF9GT1JfVEVTVFMN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQ0KPiBpbmRleCBjYzYzNzM0M2Q4N2IuLjQ4OWZhZGYxOTUwNyAxMDA2 NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZQ0KPiBAQCAtMTM0LDE5ICsxMzQsMTMgQEAgb2JqLXkJCQkrPSBh cm0vDQo+ICAgb2JqLXkJCQkrPSBkaXNwbGF5Lw0KPiAgIG9iai0kKENPTkZJR19EUk1fVFRN KQkrPSB0dG0vDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9TQ0hFRCkJKz0gc2NoZWR1bGVyLw0K PiAtb2JqLSQoQ09ORklHX0RSTV9UREZYKQkrPSB0ZGZ4Lw0KPiAtb2JqLSQoQ09ORklHX0RS TV9SMTI4KQkrPSByMTI4Lw0KPiAgIG9iai0kKENPTkZJR19EUk1fUkFERU9OKSs9IHJhZGVv bi8NCj4gICBvYmotJChDT05GSUdfRFJNX0FNREdQVSkrPSBhbWQvYW1kZ3B1Lw0KPiAtb2Jq LSQoQ09ORklHX0RSTV9NR0EpCSs9IG1nYS8NCj4gLW9iai0kKENPTkZJR19EUk1fSTgxMCkJ Kz0gaTgxMC8NCj4gICBvYmotJChDT05GSUdfRFJNX0k5MTUpCSs9IGk5MTUvDQo+ICAgb2Jq LSQoQ09ORklHX0RSTV9LTUJfRElTUExBWSkgICs9IGttYi8NCj4gICBvYmotJChDT05GSUdf RFJNX01HQUcyMDApICs9IG1nYWcyMDAvDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9WM0QpICAr PSB2M2QvDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9WQzQpICArPSB2YzQvDQo+IC1vYmotJChD T05GSUdfRFJNX1NJUykgICArPSBzaXMvDQo+IC1vYmotJChDT05GSUdfRFJNX1NBVkFHRSkr PSBzYXZhZ2UvDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9WTVdHRlgpKz0gdm13Z2Z4Lw0KPiAg IG9iai0kKENPTkZJR19EUk1fVklBKQkrPXZpYS8NCj4gICBvYmotJChDT05GSUdfRFJNX1ZH RU0pCSs9IHZnZW0vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL01ha2VmaWxlDQo+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCBjMTgxZjg1MjhjNWMuLjAwMDAwMDAwMDAwMA0KPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9NYWtlZmlsZQ0KPiArKysgL2Rldi9udWxsDQo+IEBA IC0xLDggKzAsMCBAQA0KPiAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5DQo+IC0jDQo+IC0jIE1ha2VmaWxlIGZvciB0aGUgZHJtIGRldmljZSBkcml2ZXIuICBU aGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUNCj4gLSMgRGlyZWN0IFJlbmRl cmluZyBJbmZyYXN0cnVjdHVyZSAoRFJJKSBpbiBYRnJlZTg2IDQuMS4wIGFuZCBoaWdoZXIu DQo+IC0NCj4gLWk4MTAteSA6PSBpODEwX2Rydi5vIGk4MTBfZG1hLm8NCj4gLQ0KPiAtb2Jq LSQoQ09ORklHX0RSTV9JODEwKQkrPSBpODEwLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pODEwL2k4MTBfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rt YS5jDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCA5ZmI0ZGQ2MzM0MmYu LjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5j DQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMTI2NiArMCwwIEBADQo+IC0vKiBpODEwX2Rt YS5jIC0tIERNQSBzdXBwb3J0IGZvciB0aGUgaTgxMCAtKi0gbGludXgtYyAtKi0NCj4gLSAq IENyZWF0ZWQ6IE1vbiBEZWMgMTMgMDE6NTA6MDEgMTk5OSBieSBqaGFydG1hbm5AcHJlY2lz aW9uaW5zaWdodC5jb20NCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgMTk5OSBQcmVjaXNpb24g SW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuDQo+IC0gKiBDb3B5cmlnaHQgMjAw MCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEuDQo+IC0g KiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4gLSAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh DQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAtICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCj4g LSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dA0K PiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICogU29mdHdhcmUuDQo+IC0gKg0KPiAt ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KPiAt ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBQUkVDSVNJT04gSU5TSUdIVCBBTkQvT1Ig SVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KPiAt ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsDQo+IC0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVINCj4gLSAq IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gLSAqDQo+IC0gKiBBdXRob3JzOiBSaWNr YXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4NCj4gLSAqCSAgICBKZWZm IEhhcnRtYW5uIDxqaGFydG1hbm5AdmFsaW51eC5jb20+DQo+IC0gKiAgICAgICAgICBLZWl0 aCBXaGl0d2VsbCA8a2VpdGhAdHVuZ3N0ZW5ncmFwaGljcy5jb20+DQo+IC0gKg0KPiAtICov DQo+IC0NCj4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4 L21tYW4uaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gLQ0KPiAtI2luY2x1ZGUg PGRybS9kcm1fZGV2aWNlLmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4NCj4gLSNp bmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+ DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPiAtI2luY2x1ZGUgPGRybS9pODEw X2RybS5oPg0KPiAtDQo+IC0jaW5jbHVkZSAiaTgxMF9kcnYuaCINCj4gLQ0KPiAtI2RlZmlu ZSBJODEwX0JVRl9GUkVFCQkyDQo+IC0jZGVmaW5lIEk4MTBfQlVGX0NMSUVOVAkJMQ0KPiAt I2RlZmluZSBJODEwX0JVRl9IQVJEV0FSRQkwDQo+IC0NCj4gLSNkZWZpbmUgSTgxMF9CVUZf VU5NQVBQRUQgMA0KPiAtI2RlZmluZSBJODEwX0JVRl9NQVBQRUQgICAxDQo+IC0NCj4gLXN0 YXRpYyBzdHJ1Y3QgZHJtX2J1ZiAqaTgxMF9mcmVlbGlzdF9nZXQoc3RydWN0IGRybV9kZXZp Y2UgKiBkZXYpDQo+IC17DQo+IC0Jc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYt PmRtYTsNCj4gLQlpbnQgaTsNCj4gLQlpbnQgdXNlZDsNCj4gLQ0KPiAtCS8qIExpbmVhciBz ZWFyY2ggbWlnaHQgbm90IGJlIHRoZSBiZXN0IHNvbHV0aW9uICovDQo+IC0NCj4gLQlmb3Ig KGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgew0KPiAtCQlzdHJ1Y3QgZHJtX2J1 ZiAqYnVmID0gZG1hLT5idWZsaXN0W2ldOw0KPiAtCQlkcm1faTgxMF9idWZfcHJpdl90ICpi dWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0JCS8qIEluIHVzZSBpcyBhbHJlYWR5 IGEgcG9pbnRlciAqLw0KPiAtCQl1c2VkID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJ ODEwX0JVRl9GUkVFLA0KPiAtCQkJICAgICAgIEk4MTBfQlVGX0NMSUVOVCk7DQo+IC0JCWlm ICh1c2VkID09IEk4MTBfQlVGX0ZSRUUpDQo+IC0JCQlyZXR1cm4gYnVmOw0KPiAtCX0NCj4g LQlyZXR1cm4gTlVMTDsNCj4gLX0NCj4gLQ0KPiAtLyogVGhpcyBzaG91bGQgb25seSBiZSBj YWxsZWQgaWYgdGhlIGJ1ZmZlciBpcyBub3Qgc2VudCB0byB0aGUgaGFyZHdhcmUNCj4gLSAq IHlldCwgdGhlIGhhcmR3YXJlIHVwZGF0ZXMgaW4gdXNlIGZvciB1cyBvbmNlIGl0cyBvbiB0 aGUgcmluZyBidWZmZXIuDQo+IC0gKi8NCj4gLQ0KPiAtc3RhdGljIGludCBpODEwX2ZyZWVs aXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAqYnVmKQ0K PiAtew0KPiAtCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJp dmF0ZTsNCj4gLQlpbnQgdXNlZDsNCj4gLQ0KPiAtCS8qIEluIHVzZSBpcyBhbHJlYWR5IGEg cG9pbnRlciAqLw0KPiAtCXVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBf QlVGX0NMSUVOVCwgSTgxMF9CVUZfRlJFRSk7DQo+IC0JaWYgKHVzZWQgIT0gSTgxMF9CVUZf Q0xJRU5UKSB7DQo+IC0JCURSTV9FUlJPUigiRnJlZWluZyBidWZmZXIgdGhhdHMgbm90IGlu IHVzZSA6ICVkXG4iLCBidWYtPmlkeCk7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0N Cj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IGk4MTBfbW1h cF9idWZmZXJzKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkNCj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSBmaWxwLT5wcml2YXRlX2Rh dGE7DQo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldjsNCj4gLQlkcm1faTgxMF9wcml2YXRl X3QgKmRldl9wcml2Ow0KPiAtCXN0cnVjdCBkcm1fYnVmICpidWY7DQo+IC0JZHJtX2k4MTBf YnVmX3ByaXZfdCAqYnVmX3ByaXY7DQo+IC0NCj4gLQlkZXYgPSBwcml2LT5taW5vci0+ZGV2 Ow0KPiAtCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlidWYgPSBkZXZfcHJp di0+bW1hcF9idWZmZXI7DQo+IC0JYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAt DQo+IC0Jdm1hLT52bV9mbGFncyB8PSBWTV9ET05UQ09QWTsNCj4gLQ0KPiAtCWJ1Zl9wcml2 LT5jdXJyZW50bHlfbWFwcGVkID0gSTgxMF9CVUZfTUFQUEVEOw0KPiAtDQo+IC0JaWYgKGlv X3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsDQo+IC0JCQkgICAgICAgdm1h LT52bV9wZ29mZiwNCj4gLQkJCSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQs IHZtYS0+dm1fcGFnZV9wcm90KSkNCj4gLQkJcmV0dXJuIC1FQUdBSU47DQo+IC0JcmV0dXJu IDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IGk4MTBfYnVmZmVyX2ZvcHMgPSB7DQo+IC0JLm9wZW4gPSBkcm1fb3BlbiwNCj4gLQkucmVs ZWFzZSA9IGRybV9yZWxlYXNlLA0KPiAtCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwN Cj4gLQkubW1hcCA9IGk4MTBfbW1hcF9idWZmZXJzLA0KPiAtCS5jb21wYXRfaW9jdGwgPSBk cm1fY29tcGF0X2lvY3RsLA0KPiAtCS5sbHNlZWsgPSBub29wX2xsc2VlaywNCj4gLX07DQo+ IC0NCj4gLXN0YXRpYyBpbnQgaTgxMF9tYXBfYnVmZmVyKHN0cnVjdCBkcm1fYnVmICpidWYs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBmaWxlX3ByaXYtPm1pbm9yLT5kZXY7DQo+IC0JZHJtX2k4MTBfYnVmX3By aXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9pODEwX3ByaXZh dGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgKm9sZF9mb3BzOw0KPiAtCWludCByZXRjb2RlID0gMDsNCj4gLQ0K PiAtCWlmIChidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9PSBJODEwX0JVRl9NQVBQRUQp DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtDQo+IC0JLyogVGhpcyBpcyBhbGwgZW50aXJl bHkgYnJva2VuICovDQo+IC0Jb2xkX2ZvcHMgPSBmaWxlX3ByaXYtPmZpbHAtPmZfb3A7DQo+ IC0JZmlsZV9wcml2LT5maWxwLT5mX29wID0gJmk4MTBfYnVmZmVyX2ZvcHM7DQo+IC0JZGV2 X3ByaXYtPm1tYXBfYnVmZmVyID0gYnVmOw0KPiAtCWJ1Zl9wcml2LT52aXJ0dWFsID0gKHZv aWQgKil2bV9tbWFwKGZpbGVfcHJpdi0+ZmlscCwgMCwgYnVmLT50b3RhbCwNCj4gLQkJCQkJ ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsDQo+IC0JCQkJCSAgICBNQVBfU0hBUkVELCBi dWYtPmJ1c19hZGRyZXNzKTsNCj4gLQlkZXZfcHJpdi0+bW1hcF9idWZmZXIgPSBOVUxMOw0K PiAtCWZpbGVfcHJpdi0+ZmlscC0+Zl9vcCA9IG9sZF9mb3BzOw0KPiAtCWlmIChJU19FUlIo YnVmX3ByaXYtPnZpcnR1YWwpKSB7DQo+IC0JCS8qIFJlYWwgZXJyb3IgKi8NCj4gLQkJRFJN X0VSUk9SKCJtbWFwIGVycm9yXG4iKTsNCj4gLQkJcmV0Y29kZSA9IFBUUl9FUlIoYnVmX3By aXYtPnZpcnR1YWwpOw0KPiAtCQlidWZfcHJpdi0+dmlydHVhbCA9IE5VTEw7DQo+IC0JfQ0K PiAtDQo+IC0JcmV0dXJuIHJldGNvZGU7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgx MF91bm1hcF9idWZmZXIoc3RydWN0IGRybV9idWYgKmJ1ZikNCj4gLXsNCj4gLQlkcm1faTgx MF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0JaW50IHJl dGNvZGUgPSAwOw0KPiAtDQo+IC0JaWYgKGJ1Zl9wcml2LT5jdXJyZW50bHlfbWFwcGVkICE9 IEk4MTBfQlVGX01BUFBFRCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0NCj4gLQlyZXRj b2RlID0gdm1fbXVubWFwKCh1bnNpZ25lZCBsb25nKWJ1Zl9wcml2LT52aXJ0dWFsLA0KPiAt CQkJICAgIChzaXplX3QpIGJ1Zi0+dG90YWwpOw0KPiAtDQo+IC0JYnVmX3ByaXYtPmN1cnJl bnRseV9tYXBwZWQgPSBJODEwX0JVRl9VTk1BUFBFRDsNCj4gLQlidWZfcHJpdi0+dmlydHVh bCA9IE5VTEw7DQo+IC0NCj4gLQlyZXR1cm4gcmV0Y29kZTsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIGludCBpODEwX2RtYV9nZXRfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRy bV9pODEwX2RtYV90ICpkLA0KPiAtCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fYnVmICpidWY7DQo+IC0JZHJtX2k4MTBfYnVm X3ByaXZfdCAqYnVmX3ByaXY7DQo+IC0JaW50IHJldGNvZGUgPSAwOw0KPiAtDQo+IC0JYnVm ID0gaTgxMF9mcmVlbGlzdF9nZXQoZGV2KTsNCj4gLQlpZiAoIWJ1Zikgew0KPiAtCQlyZXRj b2RlID0gLUVOT01FTTsNCj4gLQkJRFJNX0RFQlVHKCJyZXRjb2RlPSVkXG4iLCByZXRjb2Rl KTsNCj4gLQkJcmV0dXJuIHJldGNvZGU7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0Y29kZSA9IGk4 MTBfbWFwX2J1ZmZlcihidWYsIGZpbGVfcHJpdik7DQo+IC0JaWYgKHJldGNvZGUpIHsNCj4g LQkJaTgxMF9mcmVlbGlzdF9wdXQoZGV2LCBidWYpOw0KPiAtCQlEUk1fRVJST1IoIm1hcGJ1 ZiBmYWlsZWQsIHJldGNvZGUgJWRcbiIsIHJldGNvZGUpOw0KPiAtCQlyZXR1cm4gcmV0Y29k ZTsNCj4gLQl9DQo+IC0JYnVmLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7DQo+IC0JYnVmX3By aXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtCWQtPmdyYW50ZWQgPSAxOw0KPiAtCWQtPnJl cXVlc3RfaWR4ID0gYnVmLT5pZHg7DQo+IC0JZC0+cmVxdWVzdF9zaXplID0gYnVmLT50b3Rh bDsNCj4gLQlkLT52aXJ0dWFsID0gYnVmX3ByaXYtPnZpcnR1YWw7DQo+IC0NCj4gLQlyZXR1 cm4gcmV0Y29kZTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBpODEwX2RtYV9jbGVhbnVw KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpDQo+IC17DQo+IC0Jc3RydWN0IGRybV9kZXZpY2Vf ZG1hICpkbWEgPSBkZXYtPmRtYTsNCj4gLQ0KPiAtCS8qIE1ha2Ugc3VyZSBpbnRlcnJ1cHRz IGFyZSBkaXNhYmxlZCBoZXJlIGJlY2F1c2UgdGhlIHVuaW5zdGFsbCBpb2N0bA0KPiAtCSAq IG1heSBub3QgaGF2ZSBiZWVuIGNhbGxlZCBmcm9tIHVzZXJzcGFjZSBhbmQgYWZ0ZXIgZGV2 X3ByaXZhdGUNCj4gLQkgKiBpcyBmcmVlZCwgaXQncyB0b28gbGF0ZS4NCj4gLQkgKi8NCj4g LQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0lSUSkgJiYg ZGV2LT5pcnFfZW5hYmxlZCkNCj4gLQkJZHJtX2xlZ2FjeV9pcnFfdW5pbnN0YWxsKGRldik7 DQo+IC0NCj4gLQlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgew0KPiAtCQlpbnQgaTsNCj4gLQkJ ZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9DQo+IC0JCSAgICAoZHJtX2k4MTBfcHJp dmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0NCj4gLQkJaWYgKGRldl9wcml2LT5y aW5nLnZpcnR1YWxfc3RhcnQpDQo+IC0JCQlkcm1fbGVnYWN5X2lvcmVtYXBmcmVlKCZkZXZf cHJpdi0+cmluZy5tYXAsIGRldik7DQo+IC0JCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3Bh Z2UpIHsNCj4gLQkJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+ZGV2LCBQQUdFX1NJWkUsDQo+ IC0JCQkJCSAgZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLA0KPiAtCQkJCQkgIGRldl9wcml2 LT5kbWFfc3RhdHVzX3BhZ2UpOw0KPiAtCQl9DQo+IC0JCWtmcmVlKGRldi0+ZGV2X3ByaXZh dGUpOw0KPiAtCQlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsNCj4gLQ0KPiAtCQlmb3IgKGkg PSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgew0KPiAtCQkJc3RydWN0IGRybV9idWYg KmJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsNCj4gLQkJCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1 Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCQkJaWYgKGJ1Zl9wcml2LT5r ZXJuZWxfdmlydHVhbCAmJiBidWYtPnRvdGFsKQ0KPiAtCQkJCWRybV9sZWdhY3lfaW9yZW1h cGZyZWUoJmJ1Zl9wcml2LT5tYXAsIGRldik7DQo+IC0JCX0NCj4gLQl9DQo+IC0JcmV0dXJu IDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgxMF93YWl0X3Jpbmcoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgaW50IG4pDQo+IC17DQo+IC0JZHJtX2k4MTBfcHJpdmF0ZV90ICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX2k4MTBfcmluZ19idWZmZXJf dCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOw0KPiAtCWludCBpdGVycyA9IDA7DQo+IC0J dW5zaWduZWQgbG9uZyBlbmQ7DQo+IC0JdW5zaWduZWQgaW50IGxhc3RfaGVhZCA9IEk4MTBf UkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsNCj4gLQ0KPiAtCWVuZCA9 IGppZmZpZXMgKyAoSFogKiAzKTsNCj4gLQl3aGlsZSAocmluZy0+c3BhY2UgPCBuKSB7DQo+ IC0JCXJpbmctPmhlYWQgPSBJODEwX1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFE X0FERFI7DQo+IC0JCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsg OCk7DQo+IC0JCWlmIChyaW5nLT5zcGFjZSA8IDApDQo+IC0JCQlyaW5nLT5zcGFjZSArPSBy aW5nLT5TaXplOw0KPiAtDQo+IC0JCWlmIChyaW5nLT5oZWFkICE9IGxhc3RfaGVhZCkgew0K PiAtCQkJZW5kID0gamlmZmllcyArIChIWiAqIDMpOw0KPiAtCQkJbGFzdF9oZWFkID0gcmlu Zy0+aGVhZDsNCj4gLQkJfQ0KPiAtDQo+IC0JCWl0ZXJzKys7DQo+IC0JCWlmICh0aW1lX2Jl Zm9yZShlbmQsIGppZmZpZXMpKSB7DQo+IC0JCQlEUk1fRVJST1IoInNwYWNlOiAlZCB3YW50 ZWQgJWRcbiIsIHJpbmctPnNwYWNlLCBuKTsNCj4gLQkJCURSTV9FUlJPUigibG9ja3VwXG4i KTsNCj4gLQkJCWdvdG8gb3V0X3dhaXRfcmluZzsNCj4gLQkJfQ0KPiAtCQl1ZGVsYXkoMSk7 DQo+IC0JfQ0KPiAtDQo+IC1vdXRfd2FpdF9yaW5nOg0KPiAtCXJldHVybiBpdGVyczsNCj4g LX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX2k4MTBfcmluZ19idWZmZXJfdCAq cmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOw0KPiAtDQo+IC0JcmluZy0+aGVhZCA9IEk4MTBf UkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsNCj4gLQlyaW5nLT50YWls ID0gSTgxMF9SRUFEKExQX1JJTkcgKyBSSU5HX1RBSUwpOw0KPiAtCXJpbmctPnNwYWNlID0g cmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7DQo+IC0JaWYgKHJpbmctPnNwYWNlIDwg MCkNCj4gLQkJcmluZy0+c3BhY2UgKz0gcmluZy0+U2l6ZTsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIGludCBpODEwX2ZyZWVsaXN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJt X2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2Rldmlj ZV9kbWEgKmRtYSA9IGRldi0+ZG1hOw0KPiAtCWludCBteV9pZHggPSAyNDsNCj4gLQl1MzIg Kmh3X3N0YXR1cyA9ICh1MzIgKikgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSArIG15X2lk eCk7DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlpZiAoZG1hLT5idWZfY291bnQgPiAxMDE5KSB7 DQo+IC0JCS8qIE5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHN0YXR1cyBwYWdlIGZvciB0aGUg ZnJlZWxpc3QgKi8NCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JZm9y IChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsNCj4gLQkJc3RydWN0IGRybV9i dWYgKmJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsNCj4gLQkJZHJtX2k4MTBfYnVmX3ByaXZfdCAq YnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JCWJ1Zl9wcml2LT5pbl91 c2UgPSBod19zdGF0dXMrKzsNCj4gLQkJYnVmX3ByaXYtPm15X3VzZV9pZHggPSBteV9pZHg7 DQo+IC0JCW15X2lkeCArPSA0Ow0KPiAtDQo+IC0JCSpidWZfcHJpdi0+aW5fdXNlID0gSTgx MF9CVUZfRlJFRTsNCj4gLQ0KPiAtCQlidWZfcHJpdi0+bWFwLm9mZnNldCA9IGJ1Zi0+YnVz X2FkZHJlc3M7DQo+IC0JCWJ1Zl9wcml2LT5tYXAuc2l6ZSA9IGJ1Zi0+dG90YWw7DQo+IC0J CWJ1Zl9wcml2LT5tYXAudHlwZSA9IF9EUk1fQUdQOw0KPiAtCQlidWZfcHJpdi0+bWFwLmZs YWdzID0gMDsNCj4gLQkJYnVmX3ByaXYtPm1hcC5tdHJyID0gMDsNCj4gLQ0KPiAtCQlkcm1f bGVnYWN5X2lvcmVtYXAoJmJ1Zl9wcml2LT5tYXAsIGRldik7DQo+IC0JCWJ1Zl9wcml2LT5r ZXJuZWxfdmlydHVhbCA9IGJ1Zl9wcml2LT5tYXAuaGFuZGxlOw0KPiAtDQo+IC0JfQ0KPiAt CXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IGk4MTBfZG1hX2luaXRpYWxp emUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCSAgICAgICBkcm1faTgxMF9wcml2 YXRlX3QgKmRldl9wcml2LA0KPiAtCQkJICAgICAgIGRybV9pODEwX2luaXRfdCAqaW5pdCkN Cj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3Q7DQo+IC0JbWVtc2V0KGRl dl9wcml2LCAwLCBzaXplb2YoZHJtX2k4MTBfcHJpdmF0ZV90KSk7DQo+IC0NCj4gLQlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHJfbGlzdCwgJmRldi0+bWFwbGlzdCwgaGVhZCkgew0KPiAtCQlp ZiAocl9saXN0LT5tYXAgJiYNCj4gLQkJICAgIHJfbGlzdC0+bWFwLT50eXBlID09IF9EUk1f U0hNICYmDQo+IC0JCSAgICByX2xpc3QtPm1hcC0+ZmxhZ3MgJiBfRFJNX0NPTlRBSU5TX0xP Q0spIHsNCj4gLQkJCWRldl9wcml2LT5zYXJlYV9tYXAgPSByX2xpc3QtPm1hcDsNCj4gLQkJ CWJyZWFrOw0KPiAtCQl9DQo+IC0JfQ0KPiAtCWlmICghZGV2X3ByaXYtPnNhcmVhX21hcCkg ew0KPiAtCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsNCj4gLQkJaTgx MF9kbWFfY2xlYW51cChkZXYpOw0KPiAtCQlEUk1fRVJST1IoImNhbiBub3QgZmluZCBzYXJl YSFcbiIpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0JZGV2X3ByaXYtPm1t aW9fbWFwID0gZHJtX2xlZ2FjeV9maW5kbWFwKGRldiwgaW5pdC0+bW1pb19vZmZzZXQpOw0K PiAtCWlmICghZGV2X3ByaXYtPm1taW9fbWFwKSB7DQo+IC0JCWRldi0+ZGV2X3ByaXZhdGUg PSAodm9pZCAqKWRldl9wcml2Ow0KPiAtCQlpODEwX2RtYV9jbGVhbnVwKGRldik7DQo+IC0J CURSTV9FUlJPUigiY2FuIG5vdCBmaW5kIG1taW8gbWFwIVxuIik7DQo+IC0JCXJldHVybiAt RUlOVkFMOw0KPiAtCX0NCj4gLQlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZm ZXJzX29mZnNldDsNCj4gLQlkZXYtPmFncF9idWZmZXJfbWFwID0gZHJtX2xlZ2FjeV9maW5k bWFwKGRldiwgaW5pdC0+YnVmZmVyc19vZmZzZXQpOw0KPiAtCWlmICghZGV2LT5hZ3BfYnVm ZmVyX21hcCkgew0KPiAtCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsN Cj4gLQkJaTgxMF9kbWFfY2xlYW51cChkZXYpOw0KPiAtCQlEUk1fRVJST1IoImNhbiBub3Qg ZmluZCBkbWEgYnVmZmVyIG1hcCFcbiIpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9 DQo+IC0NCj4gLQlkZXZfcHJpdi0+c2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICop DQo+IC0JICAgICgodTggKikgZGV2X3ByaXYtPnNhcmVhX21hcC0+aGFuZGxlICsgaW5pdC0+ c2FyZWFfcHJpdl9vZmZzZXQpOw0KPiAtDQo+IC0JZGV2X3ByaXYtPnJpbmcuU3RhcnQgPSBp bml0LT5yaW5nX3N0YXJ0Ow0KPiAtCWRldl9wcml2LT5yaW5nLkVuZCA9IGluaXQtPnJpbmdf ZW5kOw0KPiAtCWRldl9wcml2LT5yaW5nLlNpemUgPSBpbml0LT5yaW5nX3NpemU7DQo+IC0N Cj4gLQlkZXZfcHJpdi0+cmluZy5tYXAub2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2UgKyBpbml0 LT5yaW5nX3N0YXJ0Ow0KPiAtCWRldl9wcml2LT5yaW5nLm1hcC5zaXplID0gaW5pdC0+cmlu Z19zaXplOw0KPiAtCWRldl9wcml2LT5yaW5nLm1hcC50eXBlID0gX0RSTV9BR1A7DQo+IC0J ZGV2X3ByaXYtPnJpbmcubWFwLmZsYWdzID0gMDsNCj4gLQlkZXZfcHJpdi0+cmluZy5tYXAu bXRyciA9IDA7DQo+IC0NCj4gLQlkcm1fbGVnYWN5X2lvcmVtYXAoJmRldl9wcml2LT5yaW5n Lm1hcCwgZGV2KTsNCj4gLQ0KPiAtCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09 IE5VTEwpIHsNCj4gLQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7DQo+ IC0JCWk4MTBfZG1hX2NsZWFudXAoZGV2KTsNCj4gLQkJRFJNX0VSUk9SKCJjYW4gbm90IGlv cmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciINCj4gLQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7 DQo+IC0JCXJldHVybiAtRU5PTUVNOw0KPiAtCX0NCj4gLQ0KPiAtCWRldl9wcml2LT5yaW5n LnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOw0KPiAtDQo+IC0J ZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrID0gZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDE7DQo+ IC0NCj4gLQlkZXZfcHJpdi0+dyA9IGluaXQtPnc7DQo+IC0JZGV2X3ByaXYtPmggPSBpbml0 LT5oOw0KPiAtCWRldl9wcml2LT5waXRjaCA9IGluaXQtPnBpdGNoOw0KPiAtCWRldl9wcml2 LT5iYWNrX29mZnNldCA9IGluaXQtPmJhY2tfb2Zmc2V0Ow0KPiAtCWRldl9wcml2LT5kZXB0 aF9vZmZzZXQgPSBpbml0LT5kZXB0aF9vZmZzZXQ7DQo+IC0JZGV2X3ByaXYtPmZyb250X29m ZnNldCA9IGluaXQtPmZyb250X29mZnNldDsNCj4gLQ0KPiAtCWRldl9wcml2LT5vdmVybGF5 X29mZnNldCA9IGluaXQtPm92ZXJsYXlfb2Zmc2V0Ow0KPiAtCWRldl9wcml2LT5vdmVybGF5 X3BoeXNpY2FsID0gaW5pdC0+b3ZlcmxheV9waHlzaWNhbDsNCj4gLQ0KPiAtCWRldl9wcml2 LT5mcm9udF9kaTEgPSBpbml0LT5mcm9udF9vZmZzZXQgfCBpbml0LT5waXRjaF9iaXRzOw0K PiAtCWRldl9wcml2LT5iYWNrX2RpMSA9IGluaXQtPmJhY2tfb2Zmc2V0IHwgaW5pdC0+cGl0 Y2hfYml0czsNCj4gLQlkZXZfcHJpdi0+emkxID0gaW5pdC0+ZGVwdGhfb2Zmc2V0IHwgaW5p dC0+cGl0Y2hfYml0czsNCj4gLQ0KPiAtCS8qIFByb2dyYW0gSGFyZHdhcmUgU3RhdHVzIFBh Z2UgKi8NCj4gLQlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPQ0KPiAtCQlkbWFfYWxsb2Nf Y29oZXJlbnQoZGV2LT5kZXYsIFBBR0VfU0laRSwNCj4gLQkJCQkgICAmZGV2X3ByaXYtPmRt YV9zdGF0dXNfcGFnZSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFkZXZfcHJpdi0+aHdfc3Rh dHVzX3BhZ2UpIHsNCj4gLQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7 DQo+IC0JCWk4MTBfZG1hX2NsZWFudXAoZGV2KTsNCj4gLQkJRFJNX0VSUk9SKCJDYW4gbm90 IGFsbG9jYXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsNCj4gLQkJcmV0dXJuIC1FTk9N RU07DQo+IC0JfQ0KPiAtCURSTV9ERUJVRygiaHcgc3RhdHVzIHBhZ2UgQCAlcFxuIiwgZGV2 X3ByaXYtPmh3X3N0YXR1c19wYWdlKTsNCj4gLQ0KPiAtCUk4MTBfV1JJVEUoMHgwMjA4MCwg ZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7DQo+IC0JRFJNX0RFQlVHKCJFbmFibGVkIGhh cmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsNCj4gLQ0KPiAtCS8qIE5vdyB3ZSBuZWVkIHRvIGlu aXQgb3VyIGZyZWVsaXN0ICovDQo+IC0JaWYgKGk4MTBfZnJlZWxpc3RfaW5pdChkZXYsIGRl dl9wcml2KSAhPSAwKSB7DQo+IC0JCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9w cml2Ow0KPiAtCQlpODEwX2RtYV9jbGVhbnVwKGRldik7DQo+IC0JCURSTV9FUlJPUigiTm90 IGVub3VnaCBzcGFjZSBpbiB0aGUgc3RhdHVzIHBhZ2UgZm9yIg0KPiAtCQkJICAiIHRoZSBm cmVlbGlzdFxuIik7DQo+IC0JCXJldHVybiAtRU5PTUVNOw0KPiAtCX0NCj4gLQlkZXYtPmRl dl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsNCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAt fQ0KPiAtDQo+IC1zdGF0aWMgaW50IGk4MTBfZG1hX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikN Cj4gLXsNCj4gLQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2Ow0KPiAtCWRybV9pODEw X2luaXRfdCAqaW5pdCA9IGRhdGE7DQo+IC0JaW50IHJldGNvZGUgPSAwOw0KPiAtDQo+IC0J c3dpdGNoIChpbml0LT5mdW5jKSB7DQo+IC0JY2FzZSBJODEwX0lOSVRfRE1BXzFfNDoNCj4g LQkJRFJNX0lORk8oIlVzaW5nIHYxLjQgaW5pdC5cbiIpOw0KPiAtCQlkZXZfcHJpdiA9IGtt YWxsb2Moc2l6ZW9mKGRybV9pODEwX3ByaXZhdGVfdCksIEdGUF9LRVJORUwpOw0KPiAtCQlp ZiAoZGV2X3ByaXYgPT0gTlVMTCkNCj4gLQkJCXJldHVybiAtRU5PTUVNOw0KPiAtCQlyZXRj b2RlID0gaTgxMF9kbWFfaW5pdGlhbGl6ZShkZXYsIGRldl9wcml2LCBpbml0KTsNCj4gLQkJ YnJlYWs7DQo+IC0NCj4gLQljYXNlIEk4MTBfQ0xFQU5VUF9ETUE6DQo+IC0JCURSTV9JTkZP KCJETUEgQ2xlYW51cFxuIik7DQo+IC0JCXJldGNvZGUgPSBpODEwX2RtYV9jbGVhbnVwKGRl dik7DQo+IC0JCWJyZWFrOw0KPiAtCWRlZmF1bHQ6DQo+IC0JCXJldHVybiAtRUlOVkFMOw0K PiAtCX0NCj4gLQ0KPiAtCXJldHVybiByZXRjb2RlOw0KPiAtfQ0KPiAtDQo+IC0vKiBNb3N0 IGVmZmljaWVudCB3YXkgdG8gdmVyaWZ5IHN0YXRlIGZvciB0aGUgaTgxMCBpcyBhcyBpdCBp cw0KPiAtICogZW1pdHRlZC4gIE5vbi1jb25mb3JtYW50IHN0YXRlIGlzIHNpbGVudGx5IGRy b3BwZWQuDQo+IC0gKg0KPiAtICogVXNlICd2b2xhdGlsZScgJiBsb2NhbCB2YXIgdG1wIHRv IGZvcmNlIHRoZSBlbWl0dGVkIHZhbHVlcyB0byBiZQ0KPiAtICogaWRlbnRpY2FsIHRvIHRo ZSB2ZXJpZmllZCBvbmVzLg0KPiAtICovDQo+IC1zdGF0aWMgdm9pZCBpODEwRW1pdENvbnRl eHRWZXJpZmllZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAtCQkJCSAgICB2b2xhdGls ZSB1bnNpZ25lZCBpbnQgKmNvZGUpDQo+IC17DQo+IC0JZHJtX2k4MTBfcHJpdmF0ZV90ICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JaW50IGksIGogPSAwOw0KPiAtCXVu c2lnbmVkIGludCB0bXA7DQo+IC0JUklOR19MT0NBTFM7DQo+IC0NCj4gLQlCRUdJTl9MUF9S SU5HKEk4MTBfQ1RYX1NFVFVQX1NJWkUpOw0KPiAtDQo+IC0JT1VUX1JJTkcoR0ZYX09QX0NP TE9SX0ZBQ1RPUik7DQo+IC0JT1VUX1JJTkcoY29kZVtJODEwX0NUWFJFR19DRjFdKTsNCj4g LQ0KPiAtCU9VVF9SSU5HKEdGWF9PUF9TVElQUExFKTsNCj4gLQlPVVRfUklORyhjb2RlW0k4 MTBfQ1RYUkVHX1NUMV0pOw0KPiAtDQo+IC0JZm9yIChpID0gNDsgaSA8IEk4MTBfQ1RYX1NF VFVQX1NJWkU7IGkrKykgew0KPiAtCQl0bXAgPSBjb2RlW2ldOw0KPiAtDQo+IC0JCWlmICgo dG1wICYgKDcgPDwgMjkpKSA9PSAoMyA8PCAyOSkgJiYNCj4gLQkJICAgICh0bXAgJiAoMHgx ZiA8PCAyNCkpIDwgKDB4MWQgPDwgMjQpKSB7DQo+IC0JCQlPVVRfUklORyh0bXApOw0KPiAt CQkJaisrOw0KPiAtCQl9IGVsc2UNCj4gLQkJCXByaW50aygiY29uc3RleHQgc3RhdGUgZHJv cHBlZCEhIVxuIik7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGogJiAxKQ0KPiAtCQlPVVRfUklO RygwKTsNCj4gLQ0KPiAtCUFEVkFOQ0VfTFBfUklORygpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0 aWMgdm9pZCBpODEwRW1pdFRleFZlcmlmaWVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv bGF0aWxlIHVuc2lnbmVkIGludCAqY29kZSkNCj4gLXsNCj4gLQlkcm1faTgxMF9wcml2YXRl X3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlpbnQgaSwgaiA9IDA7DQo+ IC0JdW5zaWduZWQgaW50IHRtcDsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQ0KPiAtCUJFR0lO X0xQX1JJTkcoSTgxMF9URVhfU0VUVVBfU0laRSk7DQo+IC0NCj4gLQlPVVRfUklORyhHRlhf T1BfTUFQX0lORk8pOw0KPiAtCU9VVF9SSU5HKGNvZGVbSTgxMF9URVhSRUdfTUkxXSk7DQo+ IC0JT1VUX1JJTkcoY29kZVtJODEwX1RFWFJFR19NSTJdKTsNCj4gLQlPVVRfUklORyhjb2Rl W0k4MTBfVEVYUkVHX01JM10pOw0KPiAtDQo+IC0JZm9yIChpID0gNDsgaSA8IEk4MTBfVEVY X1NFVFVQX1NJWkU7IGkrKykgew0KPiAtCQl0bXAgPSBjb2RlW2ldOw0KPiAtDQo+IC0JCWlm ICgodG1wICYgKDcgPDwgMjkpKSA9PSAoMyA8PCAyOSkgJiYNCj4gLQkJICAgICh0bXAgJiAo MHgxZiA8PCAyNCkpIDwgKDB4MWQgPDwgMjQpKSB7DQo+IC0JCQlPVVRfUklORyh0bXApOw0K PiAtCQkJaisrOw0KPiAtCQl9IGVsc2UNCj4gLQkJCXByaW50aygidGV4dHVyZSBzdGF0ZSBk cm9wcGVkISEhXG4iKTsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoaiAmIDEpDQo+IC0JCU9VVF9S SU5HKDApOw0KPiAtDQo+IC0JQURWQU5DRV9MUF9SSU5HKCk7DQo+IC19DQo+IC0NCj4gLS8q IE5lZWQgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGNoZWNraW5nIHdoZW4gc2V0dGluZyB0aGUg ZGVzdCBidWZmZXIuDQo+IC0gKi8NCj4gLXN0YXRpYyB2b2lkIGk4MTBFbWl0RGVzdFZlcmlm aWVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJIHZvbGF0aWxlIHVuc2lnbmVk IGludCAqY29kZSkNCj4gLXsNCj4gLQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQl1bnNpZ25lZCBpbnQgdG1wOw0KPiAtCVJJTkdfTE9D QUxTOw0KPiAtDQo+IC0JQkVHSU5fTFBfUklORyhJODEwX0RFU1RfU0VUVVBfU0laRSArIDIp Ow0KPiAtDQo+IC0JdG1wID0gY29kZVtJODEwX0RFU1RSRUdfREkxXTsNCj4gLQlpZiAodG1w ID09IGRldl9wcml2LT5mcm9udF9kaTEgfHwgdG1wID09IGRldl9wcml2LT5iYWNrX2RpMSkg ew0KPiAtCQlPVVRfUklORyhDTURfT1BfREVTVEJVRkZFUl9JTkZPKTsNCj4gLQkJT1VUX1JJ TkcodG1wKTsNCj4gLQl9IGVsc2UNCj4gLQkJRFJNX0RFQlVHKCJiYWQgZGkxICV4IChhbGxv dyAleCBvciAleClcbiIsDQo+IC0JCQkgIHRtcCwgZGV2X3ByaXYtPmZyb250X2RpMSwgZGV2 X3ByaXYtPmJhY2tfZGkxKTsNCj4gLQ0KPiAtCS8qIGludmFyaWVudDoNCj4gLQkgKi8NCj4g LQlPVVRfUklORyhDTURfT1BfWl9CVUZGRVJfSU5GTyk7DQo+IC0JT1VUX1JJTkcoZGV2X3By aXYtPnppMSk7DQo+IC0NCj4gLQlPVVRfUklORyhHRlhfT1BfREVTVEJVRkZFUl9WQVJTKTsN Cj4gLQlPVVRfUklORyhjb2RlW0k4MTBfREVTVFJFR19EVjFdKTsNCj4gLQ0KPiAtCU9VVF9S SU5HKEdGWF9PUF9EUkFXUkVDVF9JTkZPKTsNCj4gLQlPVVRfUklORyhjb2RlW0k4MTBfREVT VFJFR19EUjFdKTsNCj4gLQlPVVRfUklORyhjb2RlW0k4MTBfREVTVFJFR19EUjJdKTsNCj4g LQlPVVRfUklORyhjb2RlW0k4MTBfREVTVFJFR19EUjNdKTsNCj4gLQlPVVRfUklORyhjb2Rl W0k4MTBfREVTVFJFR19EUjRdKTsNCj4gLQlPVVRfUklORygwKTsNCj4gLQ0KPiAtCUFEVkFO Q0VfTFBfUklORygpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBpODEwRW1pdFN0YXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JZHJtX2k4MTBfcHJpdmF0ZV90 ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX2k4MTBfc2FyZWFfdCAq c2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCXVuc2lnbmVkIGludCBk aXJ0eSA9IHNhcmVhX3ByaXYtPmRpcnR5Ow0KPiAtDQo+IC0JRFJNX0RFQlVHKCIleFxuIiwg ZGlydHkpOw0KPiAtDQo+IC0JaWYgKGRpcnR5ICYgSTgxMF9VUExPQURfQlVGRkVSUykgew0K PiAtCQlpODEwRW1pdERlc3RWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPkJ1ZmZlclN0YXRl KTsNCj4gLQkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfkk4MTBfVVBMT0FEX0JVRkZFUlM7DQo+ IC0JfQ0KPiAtDQo+IC0JaWYgKGRpcnR5ICYgSTgxMF9VUExPQURfQ1RYKSB7DQo+IC0JCWk4 MTBFbWl0Q29udGV4dFZlcmlmaWVkKGRldiwgc2FyZWFfcHJpdi0+Q29udGV4dFN0YXRlKTsN Cj4gLQkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfkk4MTBfVVBMT0FEX0NUWDsNCj4gLQl9DQo+ IC0NCj4gLQlpZiAoZGlydHkgJiBJODEwX1VQTE9BRF9URVgwKSB7DQo+IC0JCWk4MTBFbWl0 VGV4VmVyaWZpZWQoZGV2LCBzYXJlYV9wcml2LT5UZXhTdGF0ZVswXSk7DQo+IC0JCXNhcmVh X3ByaXYtPmRpcnR5ICY9IH5JODEwX1VQTE9BRF9URVgwOw0KPiAtCX0NCj4gLQ0KPiAtCWlm IChkaXJ0eSAmIEk4MTBfVVBMT0FEX1RFWDEpIHsNCj4gLQkJaTgxMEVtaXRUZXhWZXJpZmll ZChkZXYsIHNhcmVhX3ByaXYtPlRleFN0YXRlWzFdKTsNCj4gLQkJc2FyZWFfcHJpdi0+ZGly dHkgJj0gfkk4MTBfVVBMT0FEX1RFWDE7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC0vKiBuZWVk IHRvIHZlcmlmeQ0KPiAtICovDQo+IC1zdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9j bGVhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MsDQo+IC0JCQkJICAgIHVu c2lnbmVkIGludCBjbGVhcl9jb2xvciwNCj4gLQkJCQkgICAgdW5zaWduZWQgaW50IGNsZWFy X3p2YWwpDQo+IC17DQo+IC0JZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9w cml2LT5zYXJlYV9wcml2Ow0KPiAtCWludCBuYm94ID0gc2FyZWFfcHJpdi0+bmJveDsNCj4g LQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcGJveCA9IHNhcmVhX3ByaXYtPmJveGVzOw0KPiAt CWludCBwaXRjaCA9IGRldl9wcml2LT5waXRjaDsNCj4gLQlpbnQgY3BwID0gMjsNCj4gLQlp bnQgaTsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQ0KPiAtCWlmIChkZXZfcHJpdi0+Y3VycmVu dF9wYWdlID09IDEpIHsNCj4gLQkJdW5zaWduZWQgaW50IHRtcCA9IGZsYWdzOw0KPiAtDQo+ IC0JCWZsYWdzICY9IH4oSTgxMF9GUk9OVCB8IEk4MTBfQkFDSyk7DQo+IC0JCWlmICh0bXAg JiBJODEwX0ZST05UKQ0KPiAtCQkJZmxhZ3MgfD0gSTgxMF9CQUNLOw0KPiAtCQlpZiAodG1w ICYgSTgxMF9CQUNLKQ0KPiAtCQkJZmxhZ3MgfD0gSTgxMF9GUk9OVDsNCj4gLQl9DQo+IC0N Cj4gLQlpODEwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsNCj4gLQ0KPiAtCWlmIChuYm94 ID4gSTgxMF9OUl9TQVJFQV9DTElQUkVDVFMpDQo+IC0JCW5ib3ggPSBJODEwX05SX1NBUkVB X0NMSVBSRUNUUzsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyssIHBib3gr Kykgew0KPiAtCQl1bnNpZ25lZCBpbnQgeCA9IHBib3gtPngxOw0KPiAtCQl1bnNpZ25lZCBp bnQgeSA9IHBib3gtPnkxOw0KPiAtCQl1bnNpZ25lZCBpbnQgd2lkdGggPSAocGJveC0+eDIg LSB4KSAqIGNwcDsNCj4gLQkJdW5zaWduZWQgaW50IGhlaWdodCA9IHBib3gtPnkyIC0geTsN Cj4gLQkJdW5zaWduZWQgaW50IHN0YXJ0ID0geSAqIHBpdGNoICsgeCAqIGNwcDsNCj4gLQ0K PiAtCQlpZiAocGJveC0+eDEgPiBwYm94LT54MiB8fA0KPiAtCQkgICAgcGJveC0+eTEgPiBw Ym94LT55MiB8fA0KPiAtCQkgICAgcGJveC0+eDIgPiBkZXZfcHJpdi0+dyB8fCBwYm94LT55 MiA+IGRldl9wcml2LT5oKQ0KPiAtCQkJY29udGludWU7DQo+IC0NCj4gLQkJaWYgKGZsYWdz ICYgSTgxMF9GUk9OVCkgew0KPiAtCQkJQkVHSU5fTFBfUklORyg2KTsNCj4gLQkJCU9VVF9S SU5HKEJSMDBfQklUQkxUX0NMSUVOVCB8IEJSMDBfT1BfQ09MT1JfQkxUIHwgMHgzKTsNCj4g LQkJCU9VVF9SSU5HKEJSMTNfU09MSURfUEFUVEVSTiB8ICgweEYwIDw8IDE2KSB8IHBpdGNo KTsNCj4gLQkJCU9VVF9SSU5HKChoZWlnaHQgPDwgMTYpIHwgd2lkdGgpOw0KPiAtCQkJT1VU X1JJTkcoc3RhcnQpOw0KPiAtCQkJT1VUX1JJTkcoY2xlYXJfY29sb3IpOw0KPiAtCQkJT1VU X1JJTkcoMCk7DQo+IC0JCQlBRFZBTkNFX0xQX1JJTkcoKTsNCj4gLQkJfQ0KPiAtDQo+IC0J CWlmIChmbGFncyAmIEk4MTBfQkFDSykgew0KPiAtCQkJQkVHSU5fTFBfUklORyg2KTsNCj4g LQkJCU9VVF9SSU5HKEJSMDBfQklUQkxUX0NMSUVOVCB8IEJSMDBfT1BfQ09MT1JfQkxUIHwg MHgzKTsNCj4gLQkJCU9VVF9SSU5HKEJSMTNfU09MSURfUEFUVEVSTiB8ICgweEYwIDw8IDE2 KSB8IHBpdGNoKTsNCj4gLQkJCU9VVF9SSU5HKChoZWlnaHQgPDwgMTYpIHwgd2lkdGgpOw0K PiAtCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ICsgc3RhcnQpOw0KPiAtCQkJ T1VUX1JJTkcoY2xlYXJfY29sb3IpOw0KPiAtCQkJT1VUX1JJTkcoMCk7DQo+IC0JCQlBRFZB TkNFX0xQX1JJTkcoKTsNCj4gLQkJfQ0KPiAtDQo+IC0JCWlmIChmbGFncyAmIEk4MTBfREVQ VEgpIHsNCj4gLQkJCUJFR0lOX0xQX1JJTkcoNik7DQo+IC0JCQlPVVRfUklORyhCUjAwX0JJ VEJMVF9DTElFTlQgfCBCUjAwX09QX0NPTE9SX0JMVCB8IDB4Myk7DQo+IC0JCQlPVVRfUklO RyhCUjEzX1NPTElEX1BBVFRFUk4gfCAoMHhGMCA8PCAxNikgfCBwaXRjaCk7DQo+IC0JCQlP VVRfUklORygoaGVpZ2h0IDw8IDE2KSB8IHdpZHRoKTsNCj4gLQkJCU9VVF9SSU5HKGRldl9w cml2LT5kZXB0aF9vZmZzZXQgKyBzdGFydCk7DQo+IC0JCQlPVVRfUklORyhjbGVhcl96dmFs KTsNCj4gLQkJCU9VVF9SSU5HKDApOw0KPiAtCQkJQURWQU5DRV9MUF9SSU5HKCk7DQo+IC0J CX0NCj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGk4MTBfZG1hX2Rpc3BhdGNo X3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1faTgxMF9wcml2 YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlkcm1faTgxMF9zYXJl YV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JaW50IG5ib3gg PSBzYXJlYV9wcml2LT5uYm94Ow0KPiAtCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpwYm94ID0g c2FyZWFfcHJpdi0+Ym94ZXM7DQo+IC0JaW50IHBpdGNoID0gZGV2X3ByaXYtPnBpdGNoOw0K PiAtCWludCBjcHAgPSAyOw0KPiAtCWludCBpOw0KPiAtCVJJTkdfTE9DQUxTOw0KPiAtDQo+ IC0JRFJNX0RFQlVHKCJzd2FwYnVmZmVyc1xuIik7DQo+IC0NCj4gLQlpODEwX2tlcm5lbF9s b3N0X2NvbnRleHQoZGV2KTsNCj4gLQ0KPiAtCWlmIChuYm94ID4gSTgxMF9OUl9TQVJFQV9D TElQUkVDVFMpDQo+IC0JCW5ib3ggPSBJODEwX05SX1NBUkVBX0NMSVBSRUNUUzsNCj4gLQ0K PiAtCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyssIHBib3grKykgew0KPiAtCQl1bnNpZ25l ZCBpbnQgdyA9IHBib3gtPngyIC0gcGJveC0+eDE7DQo+IC0JCXVuc2lnbmVkIGludCBoID0g cGJveC0+eTIgLSBwYm94LT55MTsNCj4gLQkJdW5zaWduZWQgaW50IGRzdCA9IHBib3gtPngx ICogY3BwICsgcGJveC0+eTEgKiBwaXRjaDsNCj4gLQkJdW5zaWduZWQgaW50IHN0YXJ0ID0g ZHN0Ow0KPiAtDQo+IC0JCWlmIChwYm94LT54MSA+IHBib3gtPngyIHx8DQo+IC0JCSAgICBw Ym94LT55MSA+IHBib3gtPnkyIHx8DQo+IC0JCSAgICBwYm94LT54MiA+IGRldl9wcml2LT53 IHx8IHBib3gtPnkyID4gZGV2X3ByaXYtPmgpDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAt CQlCRUdJTl9MUF9SSU5HKDYpOw0KPiAtCQlPVVRfUklORyhCUjAwX0JJVEJMVF9DTElFTlQg fCBCUjAwX09QX1NSQ19DT1BZX0JMVCB8IDB4NCk7DQo+IC0JCU9VVF9SSU5HKHBpdGNoIHwg KDB4Q0MgPDwgMTYpKTsNCj4gLQkJT1VUX1JJTkcoKGggPDwgMTYpIHwgKHcgKiBjcHApKTsN Cj4gLQkJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkNCj4gLQkJCU9VVF9SSU5H KGRldl9wcml2LT5mcm9udF9vZmZzZXQgKyBzdGFydCk7DQo+IC0JCWVsc2UNCj4gLQkJCU9V VF9SSU5HKGRldl9wcml2LT5iYWNrX29mZnNldCArIHN0YXJ0KTsNCj4gLQkJT1VUX1JJTkco cGl0Y2gpOw0KPiAtCQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwKQ0KPiAtCQkJ T1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ICsgc3RhcnQpOw0KPiAtCQllbHNlDQo+ IC0JCQlPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICsgc3RhcnQpOw0KPiAtCQlB RFZBTkNFX0xQX1JJTkcoKTsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGk4 MTBfZG1hX2Rpc3BhdGNoX3ZlcnRleChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAtCQkJ CSAgICAgc3RydWN0IGRybV9idWYgKmJ1ZiwgaW50IGRpc2NhcmQsIGludCB1c2VkKQ0KPiAt ew0KPiAtCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Ow0KPiAtCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0 ZTsNCj4gLQlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVh X3ByaXY7DQo+IC0Jc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveCA9IHNhcmVhX3ByaXYtPmJv eGVzOw0KPiAtCWludCBuYm94ID0gc2FyZWFfcHJpdi0+bmJveDsNCj4gLQl1bnNpZ25lZCBs b25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylidWYtPmJ1c19hZGRyZXNzOw0KPiAtCXVu c2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyZXNzIC0gZGV2LT5hZ3AtPmJhc2U7DQo+IC0JaW50 IGkgPSAwOw0KPiAtCVJJTkdfTE9DQUxTOw0KPiAtDQo+IC0JaTgxMF9rZXJuZWxfbG9zdF9j b250ZXh0KGRldik7DQo+IC0NCj4gLQlpZiAobmJveCA+IEk4MTBfTlJfU0FSRUFfQ0xJUFJF Q1RTKQ0KPiAtCQluYm94ID0gSTgxMF9OUl9TQVJFQV9DTElQUkVDVFM7DQo+IC0NCj4gLQlp ZiAodXNlZCA8IDAgfHwgdXNlZCA+IDQgKiAxMDI0KQ0KPiAtCQl1c2VkID0gMDsNCj4gLQ0K PiAtCWlmIChzYXJlYV9wcml2LT5kaXJ0eSkNCj4gLQkJaTgxMEVtaXRTdGF0ZShkZXYpOw0K PiAtDQo+IC0JaWYgKGJ1Zl9wcml2LT5jdXJyZW50bHlfbWFwcGVkID09IEk4MTBfQlVGX01B UFBFRCkgew0KPiAtCQl1bnNpZ25lZCBpbnQgcHJpbSA9IChzYXJlYV9wcml2LT52ZXJ0ZXhf cHJpbSAmIFBSX01BU0spOw0KPiAtDQo+IC0JCSoodTMyICopIGJ1Zl9wcml2LT5rZXJuZWxf dmlydHVhbCA9DQo+IC0JCSAgICAoKEdGWF9PUF9QUklNSVRJVkUgfCBwcmltIHwgKCh1c2Vk IC8gNCkgLSAyKSkpOw0KPiAtDQo+IC0JCWlmICh1c2VkICYgNCkgew0KPiAtCQkJKih1MzIg KikgKChjaGFyICopIGJ1Zl9wcml2LT5rZXJuZWxfdmlydHVhbCArIHVzZWQpID0gMDsNCj4g LQkJCXVzZWQgKz0gNDsNCj4gLQkJfQ0KPiAtDQo+IC0JCWk4MTBfdW5tYXBfYnVmZmVyKGJ1 Zik7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKHVzZWQpIHsNCj4gLQkJZG8gew0KPiAtCQkJaWYg KGkgPCBuYm94KSB7DQo+IC0JCQkJQkVHSU5fTFBfUklORyg0KTsNCj4gLQkJCQlPVVRfUklO RyhHRlhfT1BfU0NJU1NPUiB8IFNDX1VQREFURV9TQ0lTU09SIHwNCj4gLQkJCQkJIFNDX0VO QUJMRSk7DQo+IC0JCQkJT1VUX1JJTkcoR0ZYX09QX1NDSVNTT1JfSU5GTyk7DQo+IC0JCQkJ T1VUX1JJTkcoYm94W2ldLngxIHwgKGJveFtpXS55MSA8PCAxNikpOw0KPiAtCQkJCU9VVF9S SU5HKChib3hbaV0ueDIgLQ0KPiAtCQkJCQkgIDEpIHwgKChib3hbaV0ueTIgLSAxKSA8PCAx NikpOw0KPiAtCQkJCUFEVkFOQ0VfTFBfUklORygpOw0KPiAtCQkJfQ0KPiAtDQo+IC0JCQlC RUdJTl9MUF9SSU5HKDQpOw0KPiAtCQkJT1VUX1JJTkcoQ01EX09QX0JBVENIX0JVRkZFUik7 DQo+IC0JCQlPVVRfUklORyhzdGFydCB8IEJCMV9QUk9URUNURUQpOw0KPiAtCQkJT1VUX1JJ Tkcoc3RhcnQgKyB1c2VkIC0gNCk7DQo+IC0JCQlPVVRfUklORygwKTsNCj4gLQkJCUFEVkFO Q0VfTFBfUklORygpOw0KPiAtDQo+IC0JCX0gd2hpbGUgKCsraSA8IG5ib3gpOw0KPiAtCX0N Cj4gLQ0KPiAtCWlmIChkaXNjYXJkKSB7DQo+IC0JCWRldl9wcml2LT5jb3VudGVyKys7DQo+ IC0NCj4gLQkJKHZvaWQpY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODEwX0JVRl9DTElF TlQsDQo+IC0JCQkgICAgICBJODEwX0JVRl9IQVJEV0FSRSk7DQo+IC0NCj4gLQkJQkVHSU5f TFBfUklORyg4KTsNCj4gLQkJT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7DQo+IC0J CU9VVF9SSU5HKDIwKTsNCj4gLQkJT1VUX1JJTkcoZGV2X3ByaXYtPmNvdW50ZXIpOw0KPiAt CQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsNCj4gLQkJT1VUX1JJTkcoYnVmX3By aXYtPm15X3VzZV9pZHgpOw0KPiAtCQlPVVRfUklORyhJODEwX0JVRl9GUkVFKTsNCj4gLQkJ T1VUX1JJTkcoQ01EX1JFUE9SVF9IRUFEKTsNCj4gLQkJT1VUX1JJTkcoMCk7DQo+IC0JCUFE VkFOQ0VfTFBfUklORygpOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaTgx MF9kbWFfZGlzcGF0Y2hfZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KPiAtew0KPiAt CWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAt CWludCBwaXRjaCA9IGRldl9wcml2LT5waXRjaDsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQ0K PiAtCURSTV9ERUJVRygicGFnZT0lZCBwZkN1cnJlbnRQYWdlPSVkXG4iLA0KPiAtCQkgIGRl dl9wcml2LT5jdXJyZW50X3BhZ2UsDQo+IC0JCSAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBm X2N1cnJlbnRfcGFnZSk7DQo+IC0NCj4gLQlpODEwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2 KTsNCj4gLQ0KPiAtCUJFR0lOX0xQX1JJTkcoMik7DQo+IC0JT1VUX1JJTkcoSU5TVF9QQVJT RVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFKTsNCj4g LQlPVVRfUklORygwKTsNCj4gLQlBRFZBTkNFX0xQX1JJTkcoKTsNCj4gLQ0KPiAtCUJFR0lO X0xQX1JJTkcoSTgxMF9ERVNUX1NFVFVQX1NJWkUgKyAyKTsNCj4gLQkvKiBPbiBpODE1IGF0 IGxlYXN0IEFTWU5DIGlzIGJ1Z2d5ICovDQo+IC0JLyogcGl0Y2g8PDUgaXMgZnJvbSAxMS4y LjggcDE1OCwNCj4gLQkgICBpdHMgdGhlIHBpdGNoIC8gOCB0aGVuIGxlZnQgc2hpZnRlZCA4 LA0KPiAtCSAgIHNvIChwaXRjaCA+PiAzKSA8PCA4ICovDQo+IC0JT1VUX1JJTkcoQ01EX09Q X0ZST05UQlVGRkVSX0lORk8gfCAocGl0Y2ggPDwgNSkgLyp8IEFTWU5DX0ZMSVAgKi8gKTsN Cj4gLQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwKSB7DQo+IC0JCU9VVF9SSU5H KGRldl9wcml2LT5iYWNrX29mZnNldCk7DQo+IC0JCWRldl9wcml2LT5jdXJyZW50X3BhZ2Ug PSAxOw0KPiAtCX0gZWxzZSB7DQo+IC0JCU9VVF9SSU5HKGRldl9wcml2LT5mcm9udF9vZmZz ZXQpOw0KPiAtCQlkZXZfcHJpdi0+Y3VycmVudF9wYWdlID0gMDsNCj4gLQl9DQo+IC0JT1VU X1JJTkcoMCk7DQo+IC0JQURWQU5DRV9MUF9SSU5HKCk7DQo+IC0NCj4gLQlCRUdJTl9MUF9S SU5HKDIpOw0KPiAtCU9VVF9SSU5HKENNRF9PUF9XQUlUX0ZPUl9FVkVOVCB8IFdBSVRfRk9S X1BMQU5FX0FfRkxJUCk7DQo+IC0JT1VUX1JJTkcoMCk7DQo+IC0JQURWQU5DRV9MUF9SSU5H KCk7DQo+IC0NCj4gLQkvKiBJbmNyZW1lbnQgdGhlIGZyYW1lIGNvdW50ZXIuICBUaGUgY2xp ZW50LXNpZGUgM0QgZHJpdmVyIG11c3QNCj4gLQkgKiB0aHJvdHRsZSB0aGUgZnJhbWVyYXRl IGJ5IHdhaXRpbmcgZm9yIHRoaXMgdmFsdWUgYmVmb3JlDQo+IC0JICogcGVyZm9ybWluZyB0 aGUgc3dhcGJ1ZmZlciBpb2N0bC4NCj4gLQkgKi8NCj4gLQlkZXZfcHJpdi0+c2FyZWFfcHJp di0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsNCj4gLQ0KPiAt fQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBpODEwX2RtYV9xdWllc2NlbnQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQ0KPiAtCWk4MTBfa2Vy bmVsX2xvc3RfY29udGV4dChkZXYpOw0KPiAtDQo+IC0JQkVHSU5fTFBfUklORyg0KTsNCj4g LQlPVVRfUklORyhJTlNUX1BBUlNFUl9DTElFTlQgfCBJTlNUX09QX0ZMVVNIIHwgSU5TVF9G TFVTSF9NQVBfQ0FDSEUpOw0KPiAtCU9VVF9SSU5HKENNRF9SRVBPUlRfSEVBRCk7DQo+IC0J T1VUX1JJTkcoMCk7DQo+IC0JT1VUX1JJTkcoMCk7DQo+IC0JQURWQU5DRV9MUF9SSU5HKCk7 DQo+IC0NCj4gLQlpODEwX3dhaXRfcmluZyhkZXYsIGRldl9wcml2LT5yaW5nLlNpemUgLSA4 KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaTgxMF9mbHVzaF9xdWV1ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1h ID0gZGV2LT5kbWE7DQo+IC0JaW50IGk7DQo+IC0JUklOR19MT0NBTFM7DQo+IC0NCj4gLQlp ODEwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsNCj4gLQ0KPiAtCUJFR0lOX0xQX1JJTkco Mik7DQo+IC0JT1VUX1JJTkcoQ01EX1JFUE9SVF9IRUFEKTsNCj4gLQlPVVRfUklORygwKTsN Cj4gLQlBRFZBTkNFX0xQX1JJTkcoKTsNCj4gLQ0KPiAtCWk4MTBfd2FpdF9yaW5nKGRldiwg ZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDgpOw0KPiAtDQo+IC0JZm9yIChpID0gMDsgaSA8IGRt YS0+YnVmX2NvdW50OyBpKyspIHsNCj4gLQkJc3RydWN0IGRybV9idWYgKmJ1ZiA9IGRtYS0+ YnVmbGlzdFtpXTsNCj4gLQkJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYt PmRldl9wcml2YXRlOw0KPiAtDQo+IC0JCWludCB1c2VkID0gY21weGNoZyhidWZfcHJpdi0+ aW5fdXNlLCBJODEwX0JVRl9IQVJEV0FSRSwNCj4gLQkJCQkgICBJODEwX0JVRl9GUkVFKTsN Cj4gLQ0KPiAtCQlpZiAodXNlZCA9PSBJODEwX0JVRl9IQVJEV0FSRSkNCj4gLQkJCURSTV9E RUJVRygicmVjbGFpbWVkIGZyb20gSEFSRFdBUkVcbiIpOw0KPiAtCQlpZiAodXNlZCA9PSBJ ODEwX0JVRl9DTElFTlQpDQo+IC0JCQlEUk1fREVCVUcoInN0aWxsIG9uIGNsaWVudFxuIik7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuOw0KPiAtfQ0KPiAtDQo+IC0vKiBNdXN0IGJlIGNh bGxlZCB3aXRoIHRoZSBsb2NrIGhlbGQgKi8NCj4gLXZvaWQgaTgxMF9kcml2ZXJfcmVjbGFp bV9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1h ID0gZGV2LT5kbWE7DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlpZiAoIWRtYSkNCj4gLQkJcmV0 dXJuOw0KPiAtCWlmICghZGV2LT5kZXZfcHJpdmF0ZSkNCj4gLQkJcmV0dXJuOw0KPiAtCWlm ICghZG1hLT5idWZsaXN0KQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlpODEwX2ZsdXNoX3F1 ZXVlKGRldik7DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkr Kykgew0KPiAtCQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmID0gZG1hLT5idWZsaXN0W2ldOw0KPiAt CQlkcm1faTgxMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+ IC0NCj4gLQkJaWYgKGJ1Zi0+ZmlsZV9wcml2ID09IGZpbGVfcHJpdiAmJiBidWZfcHJpdikg ew0KPiAtCQkJaW50IHVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBfQlVG X0NMSUVOVCwNCj4gLQkJCQkJICAgSTgxMF9CVUZfRlJFRSk7DQo+IC0NCj4gLQkJCWlmICh1 c2VkID09IEk4MTBfQlVGX0NMSUVOVCkNCj4gLQkJCQlEUk1fREVCVUcoInJlY2xhaW1lZCBm cm9tIGNsaWVudFxuIik7DQo+IC0JCQlpZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQg PT0gSTgxMF9CVUZfTUFQUEVEKQ0KPiAtCQkJCWJ1Zl9wcml2LT5jdXJyZW50bHlfbWFwcGVk ID0gSTgxMF9CVUZfVU5NQVBQRUQ7DQo+IC0JCX0NCj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0 YXRpYyBpbnQgaTgxMF9mbHVzaF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLA0KPiAtCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0K PiAtCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7DQo+IC0NCj4gLQlp ODEwX2ZsdXNoX3F1ZXVlKGRldik7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0 YXRpYyBpbnQgaTgxMF9kbWFfdmVydGV4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsDQo+IC0JCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsNCj4g LQlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOw0KPiAtCWRybV9pODEw X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2 X3ByaXZhdGU7DQo+IC0JdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3Bh Z2U7DQo+IC0JZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJl YV90ICopDQo+IC0JICAgIGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCWRybV9pODEwX3Zl cnRleF90ICp2ZXJ0ZXggPSBkYXRhOw0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJO KGRldiwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCURSTV9ERUJVRygiaWR4ICVkIHVzZWQgJWQg ZGlzY2FyZCAlZFxuIiwNCj4gLQkJICB2ZXJ0ZXgtPmlkeCwgdmVydGV4LT51c2VkLCB2ZXJ0 ZXgtPmRpc2NhcmQpOw0KPiAtDQo+IC0JaWYgKHZlcnRleC0+aWR4IDwgMCB8fCB2ZXJ0ZXgt PmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0NCj4g LQlpODEwX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoZGV2LA0KPiAtCQkJCSBkbWEtPmJ1Zmxpc3Rb dmVydGV4LT5pZHhdLA0KPiAtCQkJCSB2ZXJ0ZXgtPmRpc2NhcmQsIHZlcnRleC0+dXNlZCk7 DQo+IC0NCj4gLQlzYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRl ciAtIDE7DQo+IC0Jc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVz WzVdOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgx MF9jbGVhcl9idWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0J CQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlkcm1faTgxMF9j bGVhcl90ICpjbGVhciA9IGRhdGE7DQo+IC0NCj4gLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4o ZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JLyogR0g6IFNvbWVvbmUncyBkb2luZyBuYXN0 eSB0aGluZ3MuLi4gKi8NCj4gLQlpZiAoIWRldi0+ZGV2X3ByaXZhdGUpDQo+IC0JCXJldHVy biAtRUlOVkFMOw0KPiAtDQo+IC0JaTgxMF9kbWFfZGlzcGF0Y2hfY2xlYXIoZGV2LCBjbGVh ci0+ZmxhZ3MsDQo+IC0JCQkJY2xlYXItPmNsZWFyX2NvbG9yLCBjbGVhci0+Y2xlYXJfZGVw dGgpOw0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IGk4MTBfc3dh cF9idWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0JCQkgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCURSTV9ERUJVRygiXG4iKTsN Cj4gLQ0KPiAtCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7DQo+IC0N Cj4gLQlpODEwX2RtYV9kaXNwYXRjaF9zd2FwKGRldik7DQo+IC0JcmV0dXJuIDA7DQo+IC19 DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgxMF9nZXRhZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwNCj4gLQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KQ0KPiAtew0KPiAtCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBf cHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JdTMyICpod19zdGF0dXMgPSBk ZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7DQo+IC0JZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFf cHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICopDQo+IC0JICAgIGRldl9wcml2LT5zYXJlYV9w cml2Ow0KPiAtDQo+IC0Jc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3Rh dHVzWzVdOw0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IGk4MTBf Z2V0YnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0JCSAgICAg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlpbnQgcmV0Y29kZSA9 IDA7DQo+IC0JZHJtX2k4MTBfZG1hX3QgKmQgPSBkYXRhOw0KPiAtCWRybV9pODEwX3ByaXZh dGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZh dGU7DQo+IC0JdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7DQo+ IC0JZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICop DQo+IC0JICAgIGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtDQo+IC0JTE9DS19URVNUX1dJ VEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCWQtPmdyYW50ZWQgPSAwOw0K PiAtDQo+IC0JcmV0Y29kZSA9IGk4MTBfZG1hX2dldF9idWZmZXIoZGV2LCBkLCBmaWxlX3By aXYpOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJpODEwX2RtYTogJWQgcmV0dXJuaW5nICVkLCBn cmFudGVkID0gJWRcbiIsDQo+IC0JCSAgdGFza19waWRfbnIoY3VycmVudCksIHJldGNvZGUs IGQtPmdyYW50ZWQpOw0KPiAtDQo+IC0Jc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChp bnQpaHdfc3RhdHVzWzVdOw0KPiAtDQo+IC0JcmV0dXJuIHJldGNvZGU7DQo+IC19DQo+IC0N Cj4gLXN0YXRpYyBpbnQgaTgxMF9jb3B5YnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsDQo+IC0JCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsNCj4g LQkvKiBOZXZlciBjb3B5IC0gMi40LnggZG9lc24ndCBuZWVkIGl0ICovDQo+IC0JcmV0dXJu IDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgxMF9kb2NvcHkoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQ0KPiAtew0KPiAtCS8qIE5ldmVyIGNvcHkgLSAyLjQueCBkb2Vzbid0IG5lZWQgaXQg Ki8NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaTgxMF9kbWFf ZGlzcGF0Y2hfbWMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9idWYgKmJ1 ZiwgaW50IHVzZWQsDQo+IC0JCQkJIHVuc2lnbmVkIGludCBsYXN0X3JlbmRlcikNCj4gLXsN Cj4gLQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsN Cj4gLQlkcm1faTgxMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7 DQo+IC0JZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9w cml2Ow0KPiAtCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWJ1Zi0+ YnVzX2FkZHJlc3M7DQo+IC0JdW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHJlc3MgLSBkZXYt PmFncC0+YmFzZTsNCj4gLQlpbnQgdTsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQ0KPiAtCWk4 MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOw0KPiAtDQo+IC0JdSA9IGNtcHhjaGcoYnVm X3ByaXYtPmluX3VzZSwgSTgxMF9CVUZfQ0xJRU5ULCBJODEwX0JVRl9IQVJEV0FSRSk7DQo+ IC0JaWYgKHUgIT0gSTgxMF9CVUZfQ0xJRU5UKQ0KPiAtCQlEUk1fREVCVUcoIk1DIGZvdW5k IGJ1ZmZlciB0aGF0IGlzbid0IG1pbmUhXG4iKTsNCj4gLQ0KPiAtCWlmICh1c2VkIDwgMCB8 fCB1c2VkID4gNCAqIDEwMjQpDQo+IC0JCXVzZWQgPSAwOw0KPiAtDQo+IC0Jc2FyZWFfcHJp di0+ZGlydHkgPSAweDdmOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJhZGRyIDB4JWx4LCB1c2Vk IDB4JXhcbiIsIGFkZHJlc3MsIHVzZWQpOw0KPiAtDQo+IC0JZGV2X3ByaXYtPmNvdW50ZXIr KzsNCj4gLQlEUk1fREVCVUcoImRpc3BhdGNoIGNvdW50ZXIgOiAlbGRcbiIsIGRldl9wcml2 LT5jb3VudGVyKTsNCj4gLQlEUk1fREVCVUcoInN0YXJ0IDogJWx4XG4iLCBzdGFydCk7DQo+ IC0JRFJNX0RFQlVHKCJ1c2VkIDogJWRcbiIsIHVzZWQpOw0KPiAtCURSTV9ERUJVRygic3Rh cnQgKyB1c2VkIC0gNCA6ICVsZFxuIiwgc3RhcnQgKyB1c2VkIC0gNCk7DQo+IC0NCj4gLQlp ZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgxMF9CVUZfTUFQUEVEKSB7DQo+ IC0JCWlmICh1c2VkICYgNCkgew0KPiAtCQkJKih1MzIgKikgKChjaGFyICopIGJ1Zl9wcml2 LT52aXJ0dWFsICsgdXNlZCkgPSAwOw0KPiAtCQkJdXNlZCArPSA0Ow0KPiAtCQl9DQo+IC0N Cj4gLQkJaTgxMF91bm1hcF9idWZmZXIoYnVmKTsNCj4gLQl9DQo+IC0JQkVHSU5fTFBfUklO Ryg0KTsNCj4gLQlPVVRfUklORyhDTURfT1BfQkFUQ0hfQlVGRkVSKTsNCj4gLQlPVVRfUklO RyhzdGFydCB8IEJCMV9QUk9URUNURUQpOw0KPiAtCU9VVF9SSU5HKHN0YXJ0ICsgdXNlZCAt IDQpOw0KPiAtCU9VVF9SSU5HKDApOw0KPiAtCUFEVkFOQ0VfTFBfUklORygpOw0KPiAtDQo+ IC0JQkVHSU5fTFBfUklORyg4KTsNCj4gLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURY KTsNCj4gLQlPVVRfUklORyhidWZfcHJpdi0+bXlfdXNlX2lkeCk7DQo+IC0JT1VUX1JJTkco STgxMF9CVUZfRlJFRSk7DQo+IC0JT1VUX1JJTkcoMCk7DQo+IC0NCj4gLQlPVVRfUklORyhD TURfU1RPUkVfRFdPUkRfSURYKTsNCj4gLQlPVVRfUklORygxNik7DQo+IC0JT1VUX1JJTkco bGFzdF9yZW5kZXIpOw0KPiAtCU9VVF9SSU5HKDApOw0KPiAtCUFEVkFOQ0VfTFBfUklORygp Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IGk4MTBfZG1hX21jKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0JCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdikNCj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ ZG1hOw0KPiAtCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJp dmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JdTMyICpod19zdGF0dXMgPSBkZXZf cHJpdi0+aHdfc3RhdHVzX3BhZ2U7DQo+IC0JZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJp diA9IChkcm1faTgxMF9zYXJlYV90ICopDQo+IC0JICAgIGRldl9wcml2LT5zYXJlYV9wcml2 Ow0KPiAtCWRybV9pODEwX21jX3QgKm1jID0gZGF0YTsNCj4gLQ0KPiAtCUxPQ0tfVEVTVF9X SVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7DQo+IC0NCj4gLQlpZiAobWMtPmlkeCA+PSBk bWEtPmJ1Zl9jb3VudCB8fCBtYy0+aWR4IDwgMCkNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0NCj4gLQlpODEwX2RtYV9kaXNwYXRjaF9tYyhkZXYsIGRtYS0+YnVmbGlzdFttYy0+aWR4 XSwgbWMtPnVzZWQsDQo+IC0JCQkgICAgIG1jLT5sYXN0X3JlbmRlcik7DQo+IC0NCj4gLQlz YXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlciAtIDE7DQo+IC0J c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOw0KPiAtDQo+ IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgxMF9yc3RhdHVzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0JCQlzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2 ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0J cmV0dXJuIChpbnQpKCgodTMyICopIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVs0XSk7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgxMF9vdjBfaW5mbyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLA0KPiAtCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQ0KPiAtew0KPiAtCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4 MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX2k4MTBfb3Zlcmxh eV90ICpvdiA9IGRhdGE7DQo+IC0NCj4gLQlvdi0+b2Zmc2V0ID0gZGV2X3ByaXYtPm92ZXJs YXlfb2Zmc2V0Ow0KPiAtCW92LT5waHlzaWNhbCA9IGRldl9wcml2LT5vdmVybGF5X3BoeXNp Y2FsOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgx MF9mc3RhdHVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0JCQlz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlkcm1faTgxMF9wcml2YXRl X3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRl Ow0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsNCj4g LQlyZXR1cm4gSTgxMF9SRUFEKDB4MzAwMDgpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50 IGk4MTBfb3YwX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4g LQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlkcm1faTgxMF9w cml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9w cml2YXRlOw0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2 KTsNCj4gLQ0KPiAtCS8qIFRlbGwgdGhlIG92ZXJsYXkgdG8gdXBkYXRlICovDQo+IC0JSTgx MF9XUklURSgweDMwMDAwLCBkZXZfcHJpdi0+b3ZlcmxheV9waHlzaWNhbCB8IDB4ODAwMDAw MDApOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLS8qIE5vdCBzdXJlIHdo eSB0aGlzIGlzbid0IHNldCBhbGwgdGhlIHRpbWU6DQo+IC0gKi8NCj4gLXN0YXRpYyB2b2lk IGk4MTBfZG9faW5pdF9wYWdlZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KPiAtew0K PiAtCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0K PiAtDQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtCWRldl9wcml2LT5wYWdlX2ZsaXBwaW5n ID0gMTsNCj4gLQlkZXZfcHJpdi0+Y3VycmVudF9wYWdlID0gMDsNCj4gLQlkZXZfcHJpdi0+ c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBpODEwX2RvX2NsZWFudXBfcGFnZWZsaXAoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1faTgxMF9wcml2YXRlX3QgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCURSTV9ERUJVRygiXG4iKTsN Cj4gLQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSAhPSAwKQ0KPiAtCQlpODEwX2RtYV9k aXNwYXRjaF9mbGlwKGRldik7DQo+IC0NCj4gLQlkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyA9 IDA7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgaTgxMF9mbGlw X2J1ZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJCSAgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX2k4MTBfcHJpdmF0ZV90 ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0NCj4gLQlEUk1fREVCVUcoIlxu Iik7DQo+IC0NCj4gLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0K PiAtDQo+IC0JaWYgKCFkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykNCj4gLQkJaTgxMF9kb19p bml0X3BhZ2VmbGlwKGRldik7DQo+IC0NCj4gLQlpODEwX2RtYV9kaXNwYXRjaF9mbGlwKGRl dik7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLWludCBpODEwX2RyaXZlcl9sb2Fk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpDQo+IC17DQo+ IC0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldi0+ZGV2KTsNCj4gLQ0K PiAtCWRldi0+YWdwID0gZHJtX2xlZ2FjeV9hZ3BfaW5pdChkZXYpOw0KPiAtCWlmIChkZXYt PmFncCkgew0KPiAtCQlkZXYtPmFncC0+YWdwX210cnIgPSBhcmNoX3BoeXNfd2NfYWRkKA0K PiAtCQkJZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfYmFzZSwNCj4gLQkJCWRldi0+YWdwLT5h Z3BfaW5mby5hcGVyX3NpemUgKg0KPiAtCQkJMTAyNCAqIDEwMjQpOw0KPiAtCX0NCj4gLQ0K PiAtCS8qIE91ciB1c2Vyc3BhY2UgZGVwZW5kcyB1cG9uIHRoZSBhZ3AgbWFwcGluZyBzdXBw b3J0LiAqLw0KPiAtCWlmICghZGV2LT5hZ3ApDQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAt DQo+IC0JcGNpX3NldF9tYXN0ZXIocGRldik7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0N Cj4gLQ0KPiAtdm9pZCBpODEwX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2Ug KmRldikNCj4gLXsNCj4gLQlpODEwX2RtYV9jbGVhbnVwKGRldik7DQo+IC19DQo+IC0NCj4g LXZvaWQgaTgxMF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JaWYgKGRldi0+ZGV2X3ByaXZh dGUpIHsNCj4gLQkJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7DQo+IC0JCWlmIChkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykNCj4gLQkJCWk4MTBf ZG9fY2xlYW51cF9wYWdlZmxpcChkZXYpOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChmaWxlX3By aXYtPm1hc3RlciAmJiBmaWxlX3ByaXYtPm1hc3Rlci0+bG9jay5od19sb2NrKSB7DQo+IC0J CWRybV9sZWdhY3lfaWRsZWxvY2tfdGFrZSgmZmlsZV9wcml2LT5tYXN0ZXItPmxvY2spOw0K PiAtCQlpODEwX2RyaXZlcl9yZWNsYWltX2J1ZmZlcnMoZGV2LCBmaWxlX3ByaXYpOw0KPiAt CQlkcm1fbGVnYWN5X2lkbGVsb2NrX3JlbGVhc2UoJmZpbGVfcHJpdi0+bWFzdGVyLT5sb2Nr KTsNCj4gLQl9IGVsc2Ugew0KPiAtCQkvKiBtYXN0ZXIgZGlzYXBwZWFyZWQsIGNsZWFuIHVw IHN0dWZmIGFueXdheSBhbmQgaG9wZSBub3RoaW5nDQo+IC0JCSAqIGdvZXMgd3JvbmcgKi8N Cj4gLQkJaTgxMF9kcml2ZXJfcmVjbGFpbV9idWZmZXJzKGRldiwgZmlsZV9wcml2KTsNCj4g LQl9DQo+IC0NCj4gLX0NCj4gLQ0KPiAtaW50IGk4MTBfZHJpdmVyX2RtYV9xdWllc2NlbnQo c3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlpODEwX2RtYV9xdWllc2NlbnQo ZGV2KTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtY29uc3Qgc3RydWN0IGRybV9p b2N0bF9kZXNjIGk4MTBfaW9jdGxzW10gPSB7DQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTgx MF9JTklULCBpODEwX2RtYV9pbml0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09O TFl8RFJNX1VOTE9DS0VEKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihJODEwX1ZFUlRFWCwg aTgxMF9kbWFfdmVydGV4LCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLA0KPiAtCURSTV9JT0NU TF9ERUZfRFJWKEk4MTBfQ0xFQVIsIGk4MTBfY2xlYXJfYnVmcywgRFJNX0FVVEh8RFJNX1VO TE9DS0VEKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihJODEwX0ZMVVNILCBpODEwX2ZsdXNo X2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJW KEk4MTBfR0VUQUdFLCBpODEwX2dldGFnZSwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwNCj4g LQlEUk1fSU9DVExfREVGX0RSVihJODEwX0dFVEJVRiwgaTgxMF9nZXRidWYsIERSTV9BVVRI fERSTV9VTkxPQ0tFRCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTgxMF9TV0FQLCBpODEw X3N3YXBfYnVmcywgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwNCj4gLQlEUk1fSU9DVExfREVG X0RSVihJODEwX0NPUFksIGk4MTBfY29weWJ1ZiwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwN Cj4gLQlEUk1fSU9DVExfREVGX0RSVihJODEwX0RPQ09QWSwgaTgxMF9kb2NvcHksIERSTV9B VVRIfERSTV9VTkxPQ0tFRCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTgxMF9PVjBJTkZP LCBpODEwX292MF9pbmZvLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLA0KPiAtCURSTV9JT0NU TF9ERUZfRFJWKEk4MTBfRlNUQVRVUywgaTgxMF9mc3RhdHVzLCBEUk1fQVVUSHxEUk1fVU5M T0NLRUQpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJWKEk4MTBfT1YwRkxJUCwgaTgxMF9vdjBf ZmxpcCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihJ ODEwX01DLCBpODEwX2RtYV9tYywgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZ fERSTV9VTkxPQ0tFRCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoSTgxMF9SU1RBVFVTLCBp ODEwX3JzdGF0dXMsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksDQo+IC0JRFJNX0lPQ1RMX0RF Rl9EUlYoSTgxMF9GTElQLCBpODEwX2ZsaXBfYnVmcywgRFJNX0FVVEh8RFJNX1VOTE9DS0VE KSwNCj4gLX07DQo+IC0NCj4gLWludCBpODEwX21heF9pb2N0bCA9IEFSUkFZX1NJWkUoaTgx MF9pb2N0bHMpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9k cnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMNCj4gZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDBlNTNhMDY2ZDRkYi4uMDAwMDAwMDAwMDAwDQo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMNCj4gKysrIC9kZXYvbnVsbA0K PiBAQCAtMSwxMDEgKzAsMCBAQA0KPiAtLyogaTgxMF9kcnYuYyAtLSBJODEwIGRyaXZlciAt Ki0gbGludXgtYyAtKi0NCj4gLSAqIENyZWF0ZWQ6IE1vbiBEZWMgMTMgMDE6NTY6MjIgMTk5 OSBieSBqaGFydG1hbm5AcHJlY2lzaW9uaW5zaWdodC5jb20NCj4gLSAqDQo+IC0gKiBDb3B5 cmlnaHQgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMu DQo+IC0gKiBDb3B5cmlnaHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZh bGUsIENhbGlmb3JuaWEuDQo+IC0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4g LSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAt ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0g KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUNCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dA0KPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICog U29mdHdhcmUuDQo+IC0gKg0KPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLA0KPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBWQSBM SU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SDQo+IC0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCj4gLSAqIEFSSVNJTkcg RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUg0KPiAtICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KPiAtICoN Cj4gLSAqIEF1dGhvcnM6DQo+IC0gKiAgICBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0 aEB2YWxpbnV4LmNvbT4NCj4gLSAqICAgIEplZmYgSGFydG1hbm4gPGpoYXJ0bWFubkB2YWxp bnV4LmNvbT4NCj4gLSAqICAgIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4N Cj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVkZSAiaTgxMF9kcnYuaCINCj4gLQ0KPiAtI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiAtDQo+ IC0jaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUu aD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX3BjaWlkcy5oPg0KPiAtI2luY2x1ZGUgPGRybS9p ODEwX2RybS5oPg0KPiAtDQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBw Y2lpZGxpc3RbXSA9IHsNCj4gLQlpODEwX1BDSV9JRFMNCj4gLX07DQo+IC0NCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk4MTBfZHJpdmVyX2ZvcHMgPSB7DQo+ IC0JLm93bmVyID0gVEhJU19NT0RVTEUsDQo+IC0JLm9wZW4gPSBkcm1fb3BlbiwNCj4gLQku cmVsZWFzZSA9IGRybV9yZWxlYXNlLA0KPiAtCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0 bCwNCj4gLQkubW1hcCA9IGRybV9sZWdhY3lfbW1hcCwNCj4gLQkucG9sbCA9IGRybV9wb2xs LA0KPiAtCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLA0KPiAtCS5sbHNlZWsg PSBub29wX2xsc2VlaywNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZl ciBkcml2ZXIgPSB7DQo+IC0JLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9VU0VfQUdQIHwg RFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0xFR0FDWSwNCj4gLQkuZGV2X3ByaXZfc2l6ZSA9 IHNpemVvZihkcm1faTgxMF9idWZfcHJpdl90KSwNCj4gLQkubG9hZCA9IGk4MTBfZHJpdmVy X2xvYWQsDQo+IC0JLmxhc3RjbG9zZSA9IGk4MTBfZHJpdmVyX2xhc3RjbG9zZSwNCj4gLQku cHJlY2xvc2UgPSBpODEwX2RyaXZlcl9wcmVjbG9zZSwNCj4gLQkuZG1hX3F1aWVzY2VudCA9 IGk4MTBfZHJpdmVyX2RtYV9xdWllc2NlbnQsDQo+IC0JLmlvY3RscyA9IGk4MTBfaW9jdGxz LA0KPiAtCS5mb3BzID0gJmk4MTBfZHJpdmVyX2ZvcHMsDQo+IC0JLm5hbWUgPSBEUklWRVJf TkFNRSwNCj4gLQkuZGVzYyA9IERSSVZFUl9ERVNDLA0KPiAtCS5kYXRlID0gRFJJVkVSX0RB VEUsDQo+IC0JLm1ham9yID0gRFJJVkVSX01BSk9SLA0KPiAtCS5taW5vciA9IERSSVZFUl9N SU5PUiwNCj4gLQkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMLA0KPiAtfTsNCj4g LQ0KPiAtc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGk4MTBfcGNpX2RyaXZlciA9IHsNCj4g LQkubmFtZSA9IERSSVZFUl9OQU1FLA0KPiAtCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwNCj4g LX07DQo+IC0NCj4gLXN0YXRpYyBpbnQgX19pbml0IGk4MTBfaW5pdCh2b2lkKQ0KPiAtew0K PiAtCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgew0KPiAtCQlwcl9lcnIoImRybS9p ODEwIGRvZXMgbm90IHN1cHBvcnQgU01QXG4iKTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JfQ0KPiAtCWRyaXZlci5udW1faW9jdGxzID0gaTgxMF9tYXhfaW9jdGw7DQo+IC0JcmV0 dXJuIGRybV9sZWdhY3lfcGNpX2luaXQoJmRyaXZlciwgJmk4MTBfcGNpX2RyaXZlcik7DQo+ IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIF9fZXhpdCBpODEwX2V4aXQodm9pZCkNCj4gLXsN Cj4gLQlkcm1fbGVnYWN5X3BjaV9leGl0KCZkcml2ZXIsICZpODEwX3BjaV9kcml2ZXIpOw0K PiAtfQ0KPiAtDQo+IC1tb2R1bGVfaW5pdChpODEwX2luaXQpOw0KPiAtbW9kdWxlX2V4aXQo aTgxMF9leGl0KTsNCj4gLQ0KPiAtTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsNCj4g LU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7DQo+IC1NT0RVTEVfTElDRU5TRSgi R1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k4MTAvaTgxMF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2 LmgNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDlkZjM5ODFmZmM2Ni4u MDAwMDAwMDAwMDAwDQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmgN Cj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSwyNDYgKzAsMCBAQA0KPiAtLyogaTgxMF9kcnYu aCAtLSBQcml2YXRlIGhlYWRlciBmb3IgdGhlIE1hdHJveCBnMjAwL2c0MDAgZHJpdmVyIC0q LSBsaW51eC1jIC0qLQ0KPiAtICogQ3JlYXRlZDogTW9uIERlYyAxMyAwMTo1MDowMSAxOTk5 IGJ5IGpoYXJ0bWFubkBwcmVjaXNpb25pbnNpZ2h0LmNvbQ0KPiAtICoNCj4gLSAqIENvcHly aWdodCAxOTk5IFByZWNpc2lvbiBJbnNpZ2h0LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4N Cj4gLSAqIENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFs ZSwgQ2FsaWZvcm5pYS4NCj4gLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+IC0gKg0KPiAt ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0g KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gLSAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQ0KPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gLSAqDQo+IC0gKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0DQo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+IC0gKiBT b2Z0d2FyZS4NCj4gLSAqDQo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiAtICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksDQo+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4gLSAqIFBSRUNJ U0lPTiBJTlNJR0hUIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SDQo+IC0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCj4gLSAqIEFSSVNJTkcg RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUg0KPiAtICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KPiAtICoN Cj4gLSAqIEF1dGhvcnM6IFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXgu Y29tPg0KPiAtICoJICAgIEplZmYgSGFydG1hbm4gPGpoYXJ0bWFubkB2YWxpbnV4LmNvbT4N Cj4gLSAqDQo+IC0gKi8NCj4gLQ0KPiAtI2lmbmRlZiBfSTgxMF9EUlZfSF8NCj4gLSNkZWZp bmUgX0k4MTBfRFJWX0hfDQo+IC0NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+DQo+ IC0jaW5jbHVkZSA8ZHJtL2RybV9sZWdhY3kuaD4NCj4gLSNpbmNsdWRlIDxkcm0vaTgxMF9k cm0uaD4NCj4gLQ0KPiAtLyogR2VuZXJhbCBjdXN0b21pemF0aW9uOg0KPiAtICovDQo+IC0N Cj4gLSNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIlZBIExpbnV4IFN5c3RlbXMgSW5jLiINCj4g LQ0KPiAtI2RlZmluZSBEUklWRVJfTkFNRQkJImk4MTAiDQo+IC0jZGVmaW5lIERSSVZFUl9E RVNDCQkiSW50ZWwgaTgxMCINCj4gLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDAzMDYwNSIN Cj4gLQ0KPiAtLyogSW50ZXJmYWNlIGhpc3RvcnkNCj4gLSAqDQo+IC0gKiAxLjEgICAtIFhG cmVlODYgNC4xDQo+IC0gKiAxLjIgICAtIFh2TUMgaW50ZXJmYWNlcw0KPiAtICogICAgICAg LSBYRnJlZTg2IDQuMg0KPiAtICogMS4yLjEgLSBEaXNhYmxlIGNvcHlpbmcgY29kZSAobGVh dmUgc3R1YiBpb2N0bHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQ0KPiAtICogICAg ICAgLSBSZW1vdmUgcmVxdWlyZW1lbnQgZm9yIGludGVycnVwdCAobGVhdmUgc3R1YnMgYWdh aW4pDQo+IC0gKiAxLjMgICAtIEFkZCBwYWdlIGZsaXBwaW5nLg0KPiAtICogMS40ICAgLSBm aXggRFJNIGludGVyZmFjZQ0KPiAtICovDQo+IC0jZGVmaW5lIERSSVZFUl9NQUpPUgkJMQ0K PiAtI2RlZmluZSBEUklWRVJfTUlOT1IJCTQNCj4gLSNkZWZpbmUgRFJJVkVSX1BBVENITEVW RUwJMA0KPiAtDQo+IC10eXBlZGVmIHN0cnVjdCBkcm1faTgxMF9idWZfcHJpdiB7DQo+IC0J dTMyICppbl91c2U7DQo+IC0JaW50IG15X3VzZV9pZHg7DQo+IC0JaW50IGN1cnJlbnRseV9t YXBwZWQ7DQo+IC0Jdm9pZCAqdmlydHVhbDsNCj4gLQl2b2lkICprZXJuZWxfdmlydHVhbDsN Cj4gLQlkcm1fbG9jYWxfbWFwX3QgbWFwOw0KPiAtfSBkcm1faTgxMF9idWZfcHJpdl90Ow0K PiAtDQo+IC10eXBlZGVmIHN0cnVjdCBfZHJtX2k4MTBfcmluZ19idWZmZXIgew0KPiAtCWlu dCB0YWlsX21hc2s7DQo+IC0JdW5zaWduZWQgbG9uZyBTdGFydDsNCj4gLQl1bnNpZ25lZCBs b25nIEVuZDsNCj4gLQl1bnNpZ25lZCBsb25nIFNpemU7DQo+IC0JdTggKnZpcnR1YWxfc3Rh cnQ7DQo+IC0JaW50IGhlYWQ7DQo+IC0JaW50IHRhaWw7DQo+IC0JaW50IHNwYWNlOw0KPiAt CWRybV9sb2NhbF9tYXBfdCBtYXA7DQo+IC19IGRybV9pODEwX3JpbmdfYnVmZmVyX3Q7DQo+ IC0NCj4gLXR5cGVkZWYgc3RydWN0IGRybV9pODEwX3ByaXZhdGUgew0KPiAtCXN0cnVjdCBk cm1fbG9jYWxfbWFwICpzYXJlYV9tYXA7DQo+IC0Jc3RydWN0IGRybV9sb2NhbF9tYXAgKm1t aW9fbWFwOw0KPiAtDQo+IC0JZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdjsNCj4gLQlk cm1faTgxMF9yaW5nX2J1ZmZlcl90IHJpbmc7DQo+IC0NCj4gLQl2b2lkICpod19zdGF0dXNf cGFnZTsNCj4gLQl1bnNpZ25lZCBsb25nIGNvdW50ZXI7DQo+IC0NCj4gLQlkbWFfYWRkcl90 IGRtYV9zdGF0dXNfcGFnZTsNCj4gLQ0KPiAtCXN0cnVjdCBkcm1fYnVmICptbWFwX2J1ZmZl cjsNCj4gLQ0KPiAtCXUzMiBmcm9udF9kaTEsIGJhY2tfZGkxLCB6aTE7DQo+IC0NCj4gLQlp bnQgYmFja19vZmZzZXQ7DQo+IC0JaW50IGRlcHRoX29mZnNldDsNCj4gLQlpbnQgb3Zlcmxh eV9vZmZzZXQ7DQo+IC0JaW50IG92ZXJsYXlfcGh5c2ljYWw7DQo+IC0JaW50IHcsIGg7DQo+ IC0JaW50IHBpdGNoOw0KPiAtCWludCBiYWNrX3BpdGNoOw0KPiAtCWludCBkZXB0aF9waXRj aDsNCj4gLQ0KPiAtCWludCBkb19ib3hlczsNCj4gLQlpbnQgZG1hX3VzZWQ7DQo+IC0NCj4g LQlpbnQgY3VycmVudF9wYWdlOw0KPiAtCWludCBwYWdlX2ZsaXBwaW5nOw0KPiAtDQo+IC0J d2FpdF9xdWV1ZV9oZWFkX3QgaXJxX3F1ZXVlOw0KPiAtCWF0b21pY190IGlycV9yZWNlaXZl ZDsNCj4gLQlhdG9taWNfdCBpcnFfZW1pdHRlZDsNCj4gLQ0KPiAtCWludCBmcm9udF9vZmZz ZXQ7DQo+IC19IGRybV9pODEwX3ByaXZhdGVfdDsNCj4gLQ0KPiAtCQkJCS8qIGk4MTBfZG1h LmMgKi8NCj4gLWV4dGVybiBpbnQgaTgxMF9kcml2ZXJfZG1hX3F1aWVzY2VudChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsNCj4gLXZvaWQgaTgxMF9kcml2ZXJfcmVjbGFpbV9idWZmZXJz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkgICAgICAgICBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4gaW50IGk4MTBfZHJpdmVyX2xvYWQoc3RydWN0 IGRybV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7DQo+IC1leHRlcm4gdm9pZCBp ODEwX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7DQo+IC1leHRl cm4gdm9pZCBpODEwX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0K PiAtCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC0NCj4gLWV4dGVybiBs b25nIGk4MTBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVu c2lnbmVkIGxvbmcgYXJnKTsNCj4gLWV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rl c2MgaTgxMF9pb2N0bHNbXTsNCj4gLWV4dGVybiBpbnQgaTgxMF9tYXhfaW9jdGw7DQo+IC0N Cj4gLSNkZWZpbmUgSTgxMF9CQVNFKHJlZykJCSgodW5zaWduZWQgbG9uZykgXA0KPiAtCQkJ CWRldl9wcml2LT5tbWlvX21hcC0+aGFuZGxlKQ0KPiAtI2RlZmluZSBJODEwX0FERFIocmVn KQkJKEk4MTBfQkFTRShyZWcpICsgcmVnKQ0KPiAtI2RlZmluZSBJODEwX0RFUkVGKHJlZykJ CSgqKF9fdm9sYXRpbGVfXyBpbnQgKilJODEwX0FERFIocmVnKSkNCj4gLSNkZWZpbmUgSTgx MF9SRUFEKHJlZykJCUk4MTBfREVSRUYocmVnKQ0KPiAtI2RlZmluZSBJODEwX1dSSVRFKHJl ZywgdmFsKQlkbyB7IEk4MTBfREVSRUYocmVnKSA9IHZhbDsgfSB3aGlsZSAoMCkNCj4gLSNk ZWZpbmUgSTgxMF9ERVJFRjE2KHJlZykJKCooX192b2xhdGlsZV9fIHUxNiAqKUk4MTBfQURE UihyZWcpKQ0KPiAtI2RlZmluZSBJODEwX1JFQUQxNihyZWcpCUk4MTBfREVSRUYxNihyZWcp DQo+IC0jZGVmaW5lIEk4MTBfV1JJVEUxNihyZWcsIHZhbCkJZG8geyBJODEwX0RFUkVGMTYo cmVnKSA9IHZhbDsgfSB3aGlsZSAoMCkNCj4gLQ0KPiAtI2RlZmluZSBJODEwX1ZFUkJPU0Ug MA0KPiAtI2RlZmluZSBSSU5HX0xPQ0FMUwl1bnNpZ25lZCBpbnQgb3V0cmluZywgcmluZ21h c2s7IFwNCj4gLQkJCXZvbGF0aWxlIGNoYXIgKnZpcnQ7DQo+IC0NCj4gLSNkZWZpbmUgQkVH SU5fTFBfUklORyhuKSBkbyB7CQkJCQlcDQo+IC0JaWYgKEk4MTBfVkVSQk9TRSkJCQkJCVwN Cj4gLQkJRFJNX0RFQlVHKCJCRUdJTl9MUF9SSU5HKCVkKVxuIiwgbik7CQlcDQo+IC0JaWYg KGRldl9wcml2LT5yaW5nLnNwYWNlIDwgbio0KQkJCQlcDQo+IC0JCWk4MTBfd2FpdF9yaW5n KGRldiwgbio0KTsJCQlcDQo+IC0JZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gbio0OwkJCQlc DQo+IC0Jb3V0cmluZyA9IGRldl9wcml2LT5yaW5nLnRhaWw7CQkJCVwNCj4gLQlyaW5nbWFz ayA9IGRldl9wcml2LT5yaW5nLnRhaWxfbWFzazsJCQlcDQo+IC0JdmlydCA9IGRldl9wcml2 LT5yaW5nLnZpcnR1YWxfc3RhcnQ7CQkJXA0KPiAtfSB3aGlsZSAoMCkNCj4gLQ0KPiAtI2Rl ZmluZSBBRFZBTkNFX0xQX1JJTkcoKSBkbyB7CQkJCQlcDQo+IC0JaWYgKEk4MTBfVkVSQk9T RSkJCQkJCVwNCj4gLQkJRFJNX0RFQlVHKCJBRFZBTkNFX0xQX1JJTkdcbiIpOwkJCVwNCj4g LQlkZXZfcHJpdi0+cmluZy50YWlsID0gb3V0cmluZzsJCQkJXA0KPiAtCUk4MTBfV1JJVEUo TFBfUklORyArIFJJTkdfVEFJTCwgb3V0cmluZyk7CQlcDQo+IC19IHdoaWxlICgwKQ0KPiAt DQo+IC0jZGVmaW5lIE9VVF9SSU5HKG4pIGRvIHsJCQkJCVwNCj4gLQlpZiAoSTgxMF9WRVJC T1NFKQkJCQkJXA0KPiAtCQlEUk1fREVCVUcoIiAgIE9VVF9SSU5HICV4XG4iLCAoaW50KShu KSk7CVwNCj4gLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh2aXJ0ICsgb3V0cmluZykg PSBuOwkJXA0KPiAtCW91dHJpbmcgKz0gNDsJCQkJCQlcDQo+IC0Jb3V0cmluZyAmPSByaW5n bWFzazsJCQkJCVwNCj4gLX0gd2hpbGUgKDApDQo+IC0NCj4gLSNkZWZpbmUgR0ZYX09QX1VT RVJfSU5URVJSVVBUCQkoKDA8PDI5KXwoMjw8MjMpKQ0KPiAtI2RlZmluZSBHRlhfT1BfQlJF QUtQT0lOVF9JTlRFUlJVUFQJKCgwPDwyOSl8KDE8PDIzKSkNCj4gLSNkZWZpbmUgQ01EX1JF UE9SVF9IRUFECQkJKDc8PDIzKQ0KPiAtI2RlZmluZSBDTURfU1RPUkVfRFdPUkRfSURYCQko KDB4MjE8PDIzKSB8IDB4MSkNCj4gLSNkZWZpbmUgQ01EX09QX0JBVENIX0JVRkZFUiAgKCgw eDA8PDI5KXwoMHgzMDw8MjMpfDB4MSkNCj4gLQ0KPiAtI2RlZmluZSBJTlNUX1BBUlNFUl9D TElFTlQgICAweDAwMDAwMDAwDQo+IC0jZGVmaW5lIElOU1RfT1BfRkxVU0ggICAgICAgIDB4 MDIwMDAwMDANCj4gLSNkZWZpbmUgSU5TVF9GTFVTSF9NQVBfQ0FDSEUgMHgwMDAwMDAwMQ0K PiAtDQo+IC0jZGVmaW5lIEJCMV9TVEFSVF9BRERSX01BU0sgICAofjB4NykNCj4gLSNkZWZp bmUgQkIxX1BST1RFQ1RFRCAgICAgICAgICgxPDwwKQ0KPiAtI2RlZmluZSBCQjFfVU5QUk9U RUNURUQgICAgICAgKDA8PDApDQo+IC0jZGVmaW5lIEJCMl9FTkRfQUREUl9NQVNLICAgICAo fjB4NykNCj4gLQ0KPiAtI2RlZmluZSBJODEwUkVHX0hXU1RBTQkJMHgwMjA5OA0KPiAtI2Rl ZmluZSBJODEwUkVHX0lOVF9JREVOVElUWV9SCTB4MDIwYTQNCj4gLSNkZWZpbmUgSTgxMFJF R19JTlRfTUFTS19SCTB4MDIwYTgNCj4gLSNkZWZpbmUgSTgxMFJFR19JTlRfRU5BQkxFX1IJ MHgwMjBhMA0KPiAtDQo+IC0jZGVmaW5lIExQX1JJTkcJCQkweDIwMzANCj4gLSNkZWZpbmUg SFBfUklORwkJCTB4MjA0MA0KPiAtI2RlZmluZSBSSU5HX1RBSUwJCTB4MDANCj4gLSNkZWZp bmUgVEFJTF9BRERSCQkweDAwMEZGRkY4DQo+IC0jZGVmaW5lIFJJTkdfSEVBRAkJMHgwNA0K PiAtI2RlZmluZSBIRUFEX1dSQVBfQ09VTlQJCTB4RkZFMDAwMDANCj4gLSNkZWZpbmUgSEVB RF9XUkFQX09ORQkJMHgwMDIwMDAwMA0KPiAtI2RlZmluZSBIRUFEX0FERFIJCTB4MDAxRkZG RkMNCj4gLSNkZWZpbmUgUklOR19TVEFSVAkJMHgwOA0KPiAtI2RlZmluZSBTVEFSVF9BRERS CQkweDAwRkZGRkY4DQo+IC0jZGVmaW5lIFJJTkdfTEVOCQkweDBDDQo+IC0jZGVmaW5lIFJJ TkdfTlJfUEFHRVMJCTB4MDAwRkYwMDANCj4gLSNkZWZpbmUgUklOR19SRVBPUlRfTUFTSwkw eDAwMDAwMDA2DQo+IC0jZGVmaW5lIFJJTkdfUkVQT1JUXzY0SwkJMHgwMDAwMDAwMg0KPiAt I2RlZmluZSBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQNCj4gLSNkZWZpbmUgUklOR19O T19SRVBPUlQJCTB4MDAwMDAwMDANCj4gLSNkZWZpbmUgUklOR19WQUxJRF9NQVNLCQkweDAw MDAwMDAxDQo+IC0jZGVmaW5lIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDENCj4gLSNkZWZpbmUg UklOR19JTlZBTElECQkweDAwMDAwMDAwDQo+IC0NCj4gLSNkZWZpbmUgR0ZYX09QX1NDSVNT T1IgICAgICAgICAoKDB4Mzw8MjkpfCgweDFjPDwyNCl8KDB4MTA8PDE5KSkNCj4gLSNkZWZp bmUgU0NfVVBEQVRFX1NDSVNTT1IgICAgICAgKDB4MTw8MSkNCj4gLSNkZWZpbmUgU0NfRU5B QkxFX01BU0sgICAgICAgICAgKDB4MTw8MCkNCj4gLSNkZWZpbmUgU0NfRU5BQkxFICAgICAg ICAgICAgICAgKDB4MTw8MCkNCj4gLQ0KPiAtI2RlZmluZSBHRlhfT1BfU0NJU1NPUl9JTkZP ICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MTw8MTYpfCgweDEpKQ0KPiAtI2RlZmlu ZSBTQ0lfWU1JTl9NQVNLICAgICAgKDB4ZmZmZjw8MTYpDQo+IC0jZGVmaW5lIFNDSV9YTUlO X01BU0sgICAgICAoMHhmZmZmPDwwKQ0KPiAtI2RlZmluZSBTQ0lfWU1BWF9NQVNLICAgICAg KDB4ZmZmZjw8MTYpDQo+IC0jZGVmaW5lIFNDSV9YTUFYX01BU0sgICAgICAoMHhmZmZmPDww KQ0KPiAtDQo+IC0jZGVmaW5lIEdGWF9PUF9DT0xPUl9GQUNUT1IgICAgICAoKDB4Mzw8Mjkp fCgweDFkPDwyNCl8KDB4MTw8MTYpfDB4MCkNCj4gLSNkZWZpbmUgR0ZYX09QX1NUSVBQTEUg ICAgICAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4Mzw8MTYpKQ0KPiAtI2RlZmlu ZSBHRlhfT1BfTUFQX0lORk8gICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfDB4MikN Cj4gLSNkZWZpbmUgR0ZYX09QX0RFU1RCVUZGRVJfVkFSUyAgICgoMHgzPDwyOSl8KDB4MWQ8 PDI0KXwoMHg4NTw8MTYpfDB4MCkNCj4gLSNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk8g ICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4MDw8MTYpfCgweDMpKQ0KPiAtI2RlZmlu ZSBHRlhfT1BfUFJJTUlUSVZFICAgICAgICAgKCgweDM8PDI5KXwoMHgxZjw8MjQpKQ0KPiAt DQo+IC0jZGVmaW5lIENNRF9PUF9aX0JVRkZFUl9JTkZPICAgICAoKDB4MDw8MjkpfCgweDE2 PDwyMykpDQo+IC0jZGVmaW5lIENNRF9PUF9ERVNUQlVGRkVSX0lORk8gICAoKDB4MDw8Mjkp fCgweDE1PDwyMykpDQo+IC0jZGVmaW5lIENNRF9PUF9GUk9OVEJVRkZFUl9JTkZPICAoKDB4 MDw8MjkpfCgweDE0PDwyMykpDQo+IC0jZGVmaW5lIENNRF9PUF9XQUlUX0ZPUl9FVkVOVCAg ICAoKDB4MDw8MjkpfCgweDAzPDwyMykpDQo+IC0NCj4gLSNkZWZpbmUgQlIwMF9CSVRCTFRf Q0xJRU5UICAgMHg0MDAwMDAwMA0KPiAtI2RlZmluZSBCUjAwX09QX0NPTE9SX0JMVCAgICAw eDEwMDAwMDAwDQo+IC0jZGVmaW5lIEJSMDBfT1BfU1JDX0NPUFlfQkxUIDB4MTBDMDAwMDAN Cj4gLSNkZWZpbmUgQlIxM19TT0xJRF9QQVRURVJOICAgMHg4MDAwMDAwMA0KPiAtDQo+IC0j ZGVmaW5lIFdBSVRfRk9SX1BMQU5FX0FfU0NBTkxJTkVTICgxPDwxKQ0KPiAtI2RlZmluZSBX QUlUX0ZPUl9QTEFORV9BX0ZMSVAgICAgICAoMTw8MikNCj4gLSNkZWZpbmUgV0FJVF9GT1Jf VkJMQU5LICgxPDwzKQ0KPiAtDQo+IC0jZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tZ2EvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL01ha2VmaWxlDQo+ IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCBkYjA3YzdmY2M5OTYuLjAwMDAw MDAwMDAwMA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL01ha2VmaWxlDQo+ICsrKyAv ZGV2L251bGwNCj4gQEAgLTEsMTEgKzAsMCBAQA0KPiAtIyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vbmx5DQo+IC0jDQo+IC0jIE1ha2VmaWxlIGZvciB0aGUgZHJtIGRl dmljZSBkcml2ZXIuICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUNCj4g LSMgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAoRFJJKSBpbiBYRnJlZTg2IDQu MS4wIGFuZCBoaWdoZXIuDQo+IC0NCj4gLW1nYS15IDo9IG1nYV9kcnYubyBtZ2FfZG1hLm8g bWdhX3N0YXRlLm8gbWdhX3dhcnAubyBtZ2FfaXJxLm8NCj4gLQ0KPiAtbWdhLSQoQ09ORklH X0NPTVBBVCkgKz0gbWdhX2lvYzMyLm8NCj4gLQ0KPiAtb2JqLSQoQ09ORklHX0RSTV9NR0Ep CSs9IG1nYS5vDQo+IC0NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdh X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMNCj4gZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDMzMWMyZjBkYTU3YS4uMDAwMDAwMDAwMDAwDQo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2RtYS5jDQo+ICsrKyAvZGV2L251bGwNCj4g QEAgLTEsMTE2OCArMCwwIEBADQo+IC0vKiBtZ2FfZG1hLmMgLS0gRE1BIHN1cHBvcnQgZm9y IG1nYSBnMjAwL2c0MDAgLSotIGxpbnV4LWMgLSotDQo+IC0gKiBDcmVhdGVkOiBNb24gRGVj IDEzIDAxOjUwOjAxIDE5OTkgYnkgamhhcnRtYW5uQHByZWNpc2lvbmluc2lnaHQuY29tDQo+ IC0gKg0KPiAtICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENl ZGFyIFBhcmssIFRleGFzLg0KPiAtICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVt cywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLg0KPiAtICogQWxsIFJpZ2h0cyBSZXNl cnZlZC4NCj4gLSAqDQo+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KPiAtICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwNCj4gLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24NCj4gLSAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLA0KPiAtICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+IC0gKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Og0KPiAtICoNCj4gLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQNCj4gLSAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUNCj4gLSAqIFNvZnR3YXJlLg0KPiAtICoNCj4gLSAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SDQo+IC0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCj4gLSAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTA0KPiAtICogUFJFQ0lTSU9OIElOU0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1INCj4gLSAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LA0KPiAtICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSDQo+IC0gKiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuDQo+IC0gKi8NCj4gLQ0KPiAtLyoNCj4gLSAqIFxmaWxlIG1nYV9kbWEuYw0K PiAtICogRE1BIHN1cHBvcnQgZm9yIE1HQSBHMjAwIC8gRzQwMC4NCj4gLSAqDQo+IC0gKiBc YXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPg0KPiAt ICogXGF1dGhvciBKZWZmIEhhcnRtYW5uIDxqaGFydG1hbm5AdmFsaW51eC5jb20+DQo+IC0g KiBcYXV0aG9yIEtlaXRoIFdoaXR3ZWxsIDxrZWl0aEB0dW5nc3RlbmdyYXBoaWNzLmNvbT4N Cj4gLSAqIFxhdXRob3IgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPg0KPiAt ICovDQo+IC0NCj4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiAtDQo+IC0jaW5jbHVk ZSAibWdhX2Rydi5oIg0KPiAtDQo+IC0jZGVmaW5lIE1HQV9ERUZBVUxUX1VTRUNfVElNRU9V VAkxMDAwMA0KPiAtI2RlZmluZSBNR0FfRlJFRUxJU1RfREVCVUcJCTANCj4gLQ0KPiAtI2Rl ZmluZSBNSU5JTUFMX0NMRUFOVVAgMA0KPiAtI2RlZmluZSBGVUxMX0NMRUFOVVAgMQ0KPiAt c3RhdGljIGludCBtZ2FfZG9fY2xlYW51cF9kbWEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg aW50IGZ1bGxfY2xlYW51cCk7DQo+IC0NCj4gLS8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLSAqIEVuZ2lu ZSBjb250cm9sDQo+IC0gKi8NCj4gLQ0KPiAtaW50IG1nYV9kb193YWl0X2Zvcl9pZGxlKGRy bV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsNCj4gLQl1MzIgc3RhdHVzID0gMDsN Cj4gLQlpbnQgaTsNCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlmb3IgKGkgPSAw OyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7DQo+IC0JCXN0YXR1cyA9IE1H QV9SRUFEKE1HQV9TVEFUVVMpICYgTUdBX0VOR0lORV9JRExFX01BU0s7DQo+IC0JCWlmIChz dGF0dXMgPT0gTUdBX0VORFBSRE1BU1RTKSB7DQo+IC0JCQlNR0FfV1JJVEU4KE1HQV9DUlRD X0lOREVYLCAwKTsNCj4gLQkJCXJldHVybiAwOw0KPiAtCQl9DQo+IC0JCXVkZWxheSgxKTsN Cj4gLQl9DQo+IC0NCj4gLSNpZiBNR0FfRE1BX0RFQlVHDQo+IC0JRFJNX0VSUk9SKCJmYWls ZWQhXG4iKTsNCj4gLQlEUk1fSU5GTygiICAgc3RhdHVzPTB4JTA4eFxuIiwgc3RhdHVzKTsN Cj4gLSNlbmRpZg0KPiAtCXJldHVybiAtRUJVU1k7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBp bnQgbWdhX2RvX2RtYV9yZXNldChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17 DQo+IC0JZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3By aXY7DQo+IC0JZHJtX21nYV9wcmltYXJ5X2J1ZmZlcl90ICpwcmltYXJ5ID0gJmRldl9wcml2 LT5wcmltOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JLyogVGhlIHBy aW1hcnkgRE1BIHN0cmVhbSBzaG91bGQgbG9vayBsaWtlIG5ldyByaWdodCBhYm91dCBub3cu DQo+IC0JICovDQo+IC0JcHJpbWFyeS0+dGFpbCA9IDA7DQo+IC0JcHJpbWFyeS0+c3BhY2Ug PSBwcmltYXJ5LT5zaXplOw0KPiAtCXByaW1hcnktPmxhc3RfZmx1c2ggPSAwOw0KPiAtDQo+ IC0Jc2FyZWFfcHJpdi0+bGFzdF93cmFwID0gMDsNCj4gLQ0KPiAtCS8qIEZJWE1FOiBSZXNl dCBjb3VudGVycywgYnVmZmVyIGFnZXMgZXRjLi4uDQo+IC0JICovDQo+IC0NCj4gLQkvKiBG SVhNRTogV2hhdCBlbHNlIGRvIHdlIG5lZWQgdG8gcmVpbml0aWFsaXplPyAgV0FSUCBzdHVm Zj8NCj4gLQkgKi8NCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC0vKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQo+IC0gKiBQcmltYXJ5IERNQSBzdHJlYW0NCj4gLSAqLw0KPiAtDQo+IC12b2lk IG1nYV9kb19kbWFfZmx1c2goZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0K PiAtCWRybV9tZ2FfcHJpbWFyeV9idWZmZXJfdCAqcHJpbWFyeSA9ICZkZXZfcHJpdi0+cHJp bTsNCj4gLQl1MzIgaGVhZCwgdGFpbDsNCj4gLQl1MzIgc3RhdHVzID0gMDsNCj4gLQlpbnQg aTsNCj4gLQlETUFfTE9DQUxTOw0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCS8q IFdlIG5lZWQgdG8gd2FpdCBzbyB0aGF0IHdlIGNhbiBkbyBhbiBzYWZlIGZsdXNoICovDQo+ IC0JZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgew0KPiAt CQlzdGF0dXMgPSBNR0FfUkVBRChNR0FfU1RBVFVTKSAmIE1HQV9FTkdJTkVfSURMRV9NQVNL Ow0KPiAtCQlpZiAoc3RhdHVzID09IE1HQV9FTkRQUkRNQVNUUykNCj4gLQkJCWJyZWFrOw0K PiAtCQl1ZGVsYXkoMSk7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKHByaW1hcnktPnRhaWwgPT0g cHJpbWFyeS0+bGFzdF9mbHVzaCkgew0KPiAtCQlEUk1fREVCVUcoIiAgIGJhaWxpbmcgb3V0 Li4uXG4iKTsNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gLQ0KPiAtCXRhaWwgPSBwcmltYXJ5 LT50YWlsICsgZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldDsNCj4gLQ0KPiAtCS8qIFdlIG5l ZWQgdG8gcGFkIHRoZSBzdHJlYW0gYmV0d2VlbiBmbHVzaGVzLCBhcyB0aGUgY2FyZA0KPiAt CSAqIGFjdHVhbGx5IChwYXJ0aWFsbHk/KSByZWFkcyB0aGUgZmlyc3Qgb2YgdGhlc2UgY29t bWFuZHMuDQo+IC0JICogU2VlIHBhZ2UgNC0xNiBpbiB0aGUgRzQwMCBtYW51YWwsIG1pZGRs ZSBvZiB0aGUgcGFnZSBvciBzby4NCj4gLQkgKi8NCj4gLQlCRUdJTl9ETUEoMSk7DQo+IC0N Cj4gLQlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfRE1B UEFELCAweDAwMDAwMDAwLA0KPiAtCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsIE1HQV9E TUFQQUQsIDB4MDAwMDAwMDApOw0KPiAtDQo+IC0JQURWQU5DRV9ETUEoKTsNCj4gLQ0KPiAt CXByaW1hcnktPmxhc3RfZmx1c2ggPSBwcmltYXJ5LT50YWlsOw0KPiAtDQo+IC0JaGVhZCA9 IE1HQV9SRUFEKE1HQV9QUklNQUREUkVTUyk7DQo+IC0NCj4gLQlpZiAoaGVhZCA8PSB0YWls KQ0KPiAtCQlwcmltYXJ5LT5zcGFjZSA9IHByaW1hcnktPnNpemUgLSBwcmltYXJ5LT50YWls Ow0KPiAtCWVsc2UNCj4gLQkJcHJpbWFyeS0+c3BhY2UgPSBoZWFkIC0gdGFpbDsNCj4gLQ0K PiAtCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsICh1bnNpZ25lZCBsb25nKSho ZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkpOw0KPiAtCURSTV9ERUJVRygiICAg dGFpbCA9IDB4JTA2bHhcbiIsICh1bnNpZ25lZCBsb25nKSh0YWlsIC0gZGV2X3ByaXYtPnBy aW1hcnktPm9mZnNldCkpOw0KPiAtCURSTV9ERUJVRygiICBzcGFjZSA9IDB4JTA2eFxuIiwg cHJpbWFyeS0+c3BhY2UpOw0KPiAtDQo+IC0JbWdhX2ZsdXNoX3dyaXRlX2NvbWJpbmUoKTsN Cj4gLQlNR0FfV1JJVEUoTUdBX1BSSU1FTkQsIHRhaWwgfCBkZXZfcHJpdi0+ZG1hX2FjY2Vz cyk7DQo+IC0NCj4gLQlEUk1fREVCVUcoImRvbmUuXG4iKTsNCj4gLX0NCj4gLQ0KPiAtdm9p ZCBtZ2FfZG9fZG1hX3dyYXBfc3RhcnQoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0K PiAtew0KPiAtCWRybV9tZ2FfcHJpbWFyeV9idWZmZXJfdCAqcHJpbWFyeSA9ICZkZXZfcHJp di0+cHJpbTsNCj4gLQl1MzIgaGVhZCwgdGFpbDsNCj4gLQlETUFfTE9DQUxTOw0KPiAtCURS TV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCUJFR0lOX0RNQV9XUkFQKCk7DQo+IC0NCj4gLQlE TUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfRE1BUEFELCAw eDAwMDAwMDAwLA0KPiAtCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsIE1HQV9ETUFQQUQs IDB4MDAwMDAwMDApOw0KPiAtDQo+IC0JQURWQU5DRV9ETUEoKTsNCj4gLQ0KPiAtCXRhaWwg PSBwcmltYXJ5LT50YWlsICsgZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldDsNCj4gLQ0KPiAt CXByaW1hcnktPnRhaWwgPSAwOw0KPiAtCXByaW1hcnktPmxhc3RfZmx1c2ggPSAwOw0KPiAt CXByaW1hcnktPmxhc3Rfd3JhcCsrOw0KPiAtDQo+IC0JaGVhZCA9IE1HQV9SRUFEKE1HQV9Q UklNQUREUkVTUyk7DQo+IC0NCj4gLQlpZiAoaGVhZCA9PSBkZXZfcHJpdi0+cHJpbWFyeS0+ b2Zmc2V0KQ0KPiAtCQlwcmltYXJ5LT5zcGFjZSA9IHByaW1hcnktPnNpemU7DQo+IC0JZWxz ZQ0KPiAtCQlwcmltYXJ5LT5zcGFjZSA9IGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zm c2V0Ow0KPiAtDQo+IC0JRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgKHVuc2ln bmVkIGxvbmcpKGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7DQo+IC0JRFJN X0RFQlVHKCIgICB0YWlsID0gMHglMDZ4XG4iLCBwcmltYXJ5LT50YWlsKTsNCj4gLQlEUk1f REVCVUcoIiAgIHdyYXAgPSAlZFxuIiwgcHJpbWFyeS0+bGFzdF93cmFwKTsNCj4gLQlEUk1f REVCVUcoIiAgc3BhY2UgPSAweCUwNnhcbiIsIHByaW1hcnktPnNwYWNlKTsNCj4gLQ0KPiAt CW1nYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7DQo+IC0JTUdBX1dSSVRFKE1HQV9QUklNRU5E LCB0YWlsIHwgZGV2X3ByaXYtPmRtYV9hY2Nlc3MpOw0KPiAtDQo+IC0Jc2V0X2JpdCgwLCAm cHJpbWFyeS0+d3JhcHBlZCk7DQo+IC0JRFJNX0RFQlVHKCJkb25lLlxuIik7DQo+IC19DQo+ IC0NCj4gLXZvaWQgbWdhX2RvX2RtYV93cmFwX2VuZChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2 X3ByaXYpDQo+IC17DQo+IC0JZHJtX21nYV9wcmltYXJ5X2J1ZmZlcl90ICpwcmltYXJ5ID0g JmRldl9wcml2LT5wcmltOw0KPiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRl dl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCXUzMiBoZWFkID0gZGV2X3ByaXYtPnByaW1hcnkt Pm9mZnNldDsNCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlzYXJlYV9wcml2LT5s YXN0X3dyYXArKzsNCj4gLQlEUk1fREVCVUcoIiAgIHdyYXAgPSAlZFxuIiwgc2FyZWFfcHJp di0+bGFzdF93cmFwKTsNCj4gLQ0KPiAtCW1nYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7DQo+ IC0JTUdBX1dSSVRFKE1HQV9QUklNQUREUkVTUywgaGVhZCB8IE1HQV9ETUFfR0VORVJBTCk7 DQo+IC0NCj4gLQljbGVhcl9iaXQoMCwgJnByaW1hcnktPndyYXBwZWQpOw0KPiAtCURSTV9E RUJVRygiZG9uZS5cbiIpOw0KPiAtfQ0KPiAtDQo+IC0vKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0gKiBG cmVlbGlzdCBtYW5hZ2VtZW50DQo+IC0gKi8NCj4gLQ0KPiAtI2RlZmluZSBNR0FfQlVGRkVS X1VTRUQJCSh+MCkNCj4gLSNkZWZpbmUgTUdBX0JVRkZFUl9GUkVFCQkwDQo+IC0NCj4gLSNp ZiBNR0FfRlJFRUxJU1RfREVCVUcNCj4gLXN0YXRpYyB2b2lkIG1nYV9mcmVlbGlzdF9wcmlu dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCWRybV9tZ2FfcHJpdmF0ZV90 ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX21nYV9mcmVlbGlzdF90 ICplbnRyeTsNCj4gLQ0KPiAtCURSTV9JTkZPKCJcbiIpOw0KPiAtCURSTV9JTkZPKCJjdXJy ZW50IGRpc3BhdGNoOiBsYXN0PTB4JXggZG9uZT0weCV4XG4iLA0KPiAtCQkgZGV2X3ByaXYt PnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2gsDQo+IC0JCSAodW5zaWduZWQgaW50KShNR0Ff UkVBRChNR0FfUFJJTUFERFJFU1MpIC0NCj4gLQkJCQlkZXZfcHJpdi0+cHJpbWFyeS0+b2Zm c2V0KSk7DQo+IC0JRFJNX0lORk8oImN1cnJlbnQgZnJlZWxpc3Q6XG4iKTsNCj4gLQ0KPiAt CWZvciAoZW50cnkgPSBkZXZfcHJpdi0+aGVhZC0+bmV4dDsgZW50cnk7IGVudHJ5ID0gZW50 cnktPm5leHQpIHsNCj4gLQkJRFJNX0lORk8oIiAgICVwICAgaWR4PSUyZCAgYWdlPTB4JXgg MHglMDZseFxuIiwNCj4gLQkJCSBlbnRyeSwgZW50cnktPmJ1Zi0+aWR4LCBlbnRyeS0+YWdl LmhlYWQsDQo+IC0JCQkgKHVuc2lnbmVkIGxvbmcpKGVudHJ5LT5hZ2UuaGVhZCAtIGRldl9w cml2LT5wcmltYXJ5LT5vZmZzZXQpKTsNCj4gLQl9DQo+IC0JRFJNX0lORk8oIlxuIik7DQo+ IC19DQo+IC0jZW5kaWYNCj4gLQ0KPiAtc3RhdGljIGludCBtZ2FfZnJlZWxpc3RfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+ IC17DQo+IC0Jc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsNCj4gLQlz dHJ1Y3QgZHJtX2J1ZiAqYnVmOw0KPiAtCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXY7 DQo+IC0JZHJtX21nYV9mcmVlbGlzdF90ICplbnRyeTsNCj4gLQlpbnQgaTsNCj4gLQlEUk1f REVCVUcoImNvdW50PSVkXG4iLCBkbWEtPmJ1Zl9jb3VudCk7DQo+IC0NCj4gLQlkZXZfcHJp di0+aGVhZCA9IGt6YWxsb2Moc2l6ZW9mKGRybV9tZ2FfZnJlZWxpc3RfdCksIEdGUF9LRVJO RUwpOw0KPiAtCWlmIChkZXZfcHJpdi0+aGVhZCA9PSBOVUxMKQ0KPiAtCQlyZXR1cm4gLUVO T01FTTsNCj4gLQ0KPiAtCVNFVF9BR0UoJmRldl9wcml2LT5oZWFkLT5hZ2UsIE1HQV9CVUZG RVJfVVNFRCwgMCk7DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7 IGkrKykgew0KPiAtCQlidWYgPSBkbWEtPmJ1Zmxpc3RbaV07DQo+IC0JCWJ1Zl9wcml2ID0g YnVmLT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKGRy bV9tZ2FfZnJlZWxpc3RfdCksIEdGUF9LRVJORUwpOw0KPiAtCQlpZiAoZW50cnkgPT0gTlVM TCkNCj4gLQkJCXJldHVybiAtRU5PTUVNOw0KPiAtDQo+IC0JCWVudHJ5LT5uZXh0ID0gZGV2 X3ByaXYtPmhlYWQtPm5leHQ7DQo+IC0JCWVudHJ5LT5wcmV2ID0gZGV2X3ByaXYtPmhlYWQ7 DQo+IC0JCVNFVF9BR0UoJmVudHJ5LT5hZ2UsIE1HQV9CVUZGRVJfRlJFRSwgMCk7DQo+IC0J CWVudHJ5LT5idWYgPSBidWY7DQo+IC0NCj4gLQkJaWYgKGRldl9wcml2LT5oZWFkLT5uZXh0 ICE9IE5VTEwpDQo+IC0JCQlkZXZfcHJpdi0+aGVhZC0+bmV4dC0+cHJldiA9IGVudHJ5Ow0K PiAtCQlpZiAoZW50cnktPm5leHQgPT0gTlVMTCkNCj4gLQkJCWRldl9wcml2LT50YWlsID0g ZW50cnk7DQo+IC0NCj4gLQkJYnVmX3ByaXYtPmxpc3RfZW50cnkgPSBlbnRyeTsNCj4gLQkJ YnVmX3ByaXYtPmRpc2NhcmQgPSAwOw0KPiAtCQlidWZfcHJpdi0+ZGlzcGF0Y2hlZCA9IDA7 DQo+IC0NCj4gLQkJZGV2X3ByaXYtPmhlYWQtPm5leHQgPSBlbnRyeTsNCj4gLQl9DQo+IC0N Cj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgbWdhX2ZyZWVsaXN0 X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1fbWdhX3By aXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2FfZnJl ZWxpc3RfdCAqZW50cnk7DQo+IC0JZHJtX21nYV9mcmVlbGlzdF90ICpuZXh0Ow0KPiAtCURS TV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCWVudHJ5ID0gZGV2X3ByaXYtPmhlYWQ7DQo+IC0J d2hpbGUgKGVudHJ5KSB7DQo+IC0JCW5leHQgPSBlbnRyeS0+bmV4dDsNCj4gLQkJa2ZyZWUo ZW50cnkpOw0KPiAtCQllbnRyeSA9IG5leHQ7DQo+IC0JfQ0KPiAtDQo+IC0JZGV2X3ByaXYt PmhlYWQgPSBkZXZfcHJpdi0+dGFpbCA9IE5VTEw7DQo+IC19DQo+IC0NCj4gLSNpZiAwDQo+ IC0vKiBGSVhNRTogU3RpbGwgbmVlZGVkPw0KPiAtICovDQo+IC1zdGF0aWMgdm9pZCBtZ2Ff ZnJlZWxpc3RfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlzdHJ1 Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOw0KPiAtCXN0cnVjdCBkcm1fYnVm ICpidWY7DQo+IC0JZHJtX21nYV9idWZfcHJpdl90ICpidWZfcHJpdjsNCj4gLQlpbnQgaTsN Cj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7DQo+IC0J CWJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsNCj4gLQkJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2 YXRlOw0KPiAtCQlTRVRfQUdFKCZidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLCBNR0FfQlVG RkVSX0ZSRUUsIDApOw0KPiAtCX0NCj4gLX0NCj4gLSNlbmRpZg0KPiAtDQo+IC1zdGF0aWMg c3RydWN0IGRybV9idWYgKm1nYV9mcmVlbGlzdF9nZXQoc3RydWN0IGRybV9kZXZpY2UgKiBk ZXYpDQo+IC17DQo+IC0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsNCj4gLQlkcm1fbWdhX2ZyZWVsaXN0X3QgKm5leHQ7DQo+IC0JZHJtX21nYV9m cmVlbGlzdF90ICpwcmV2Ow0KPiAtCWRybV9tZ2FfZnJlZWxpc3RfdCAqdGFpbCA9IGRldl9w cml2LT50YWlsOw0KPiAtCXUzMiBoZWFkLCB3cmFwOw0KPiAtCURSTV9ERUJVRygiXG4iKTsN Cj4gLQ0KPiAtCWhlYWQgPSBNR0FfUkVBRChNR0FfUFJJTUFERFJFU1MpOw0KPiAtCXdyYXAg PSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF93cmFwOw0KPiAtDQo+IC0JRFJNX0RFQlVH KCIgICB0YWlsPTB4JTA2bHggJWRcbiIsDQo+IC0JCSAgdGFpbC0+YWdlLmhlYWQgPw0KPiAt CQkgICh1bnNpZ25lZCBsb25nKSh0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5 LT5vZmZzZXQpIDogMCwNCj4gLQkJICB0YWlsLT5hZ2Uud3JhcCk7DQo+IC0JRFJNX0RFQlVH KCIgICBoZWFkPTB4JTA2bHggJWRcbiIsDQo+IC0JCSAgKHVuc2lnbmVkIGxvbmcpKGhlYWQg LSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSwgd3JhcCk7DQo+IC0NCj4gLQlpZiAoVEVT VF9BR0UoJnRhaWwtPmFnZSwgaGVhZCwgd3JhcCkpIHsNCj4gLQkJcHJldiA9IGRldl9wcml2 LT50YWlsLT5wcmV2Ow0KPiAtCQluZXh0ID0gZGV2X3ByaXYtPnRhaWw7DQo+IC0JCXByZXYt Pm5leHQgPSBOVUxMOw0KPiAtCQluZXh0LT5wcmV2ID0gbmV4dC0+bmV4dCA9IE5VTEw7DQo+ IC0JCWRldl9wcml2LT50YWlsID0gcHJldjsNCj4gLQkJU0VUX0FHRSgmbmV4dC0+YWdlLCBN R0FfQlVGRkVSX1VTRUQsIDApOw0KPiAtCQlyZXR1cm4gbmV4dC0+YnVmOw0KPiAtCX0NCj4g LQ0KPiAtCURSTV9ERUJVRygicmV0dXJuaW5nIE5VTEwhXG4iKTsNCj4gLQlyZXR1cm4gTlVM TDsNCj4gLX0NCj4gLQ0KPiAtaW50IG1nYV9mcmVlbGlzdF9wdXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGRybV9idWYgKmJ1ZikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZh dGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2FfYnVmX3By aXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2FfZnJlZWxp c3RfdCAqaGVhZCwgKmVudHJ5LCAqcHJldjsNCj4gLQ0KPiAtCURSTV9ERUJVRygiYWdlPTB4 JTA2bHggd3JhcD0lZFxuIiwNCj4gLQkJICAodW5zaWduZWQgbG9uZykoYnVmX3ByaXYtPmxp c3RfZW50cnktPmFnZS5oZWFkIC0NCj4gLQkJCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZz ZXQpLA0KPiAtCQkgIGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2Uud3JhcCk7DQo+IC0NCj4g LQllbnRyeSA9IGJ1Zl9wcml2LT5saXN0X2VudHJ5Ow0KPiAtCWhlYWQgPSBkZXZfcHJpdi0+ aGVhZDsNCj4gLQ0KPiAtCWlmIChidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLmhlYWQgPT0g TUdBX0JVRkZFUl9VU0VEKSB7DQo+IC0JCVNFVF9BR0UoJmVudHJ5LT5hZ2UsIE1HQV9CVUZG RVJfRlJFRSwgMCk7DQo+IC0JCXByZXYgPSBkZXZfcHJpdi0+dGFpbDsNCj4gLQkJcHJldi0+ bmV4dCA9IGVudHJ5Ow0KPiAtCQllbnRyeS0+cHJldiA9IHByZXY7DQo+IC0JCWVudHJ5LT5u ZXh0ID0gTlVMTDsNCj4gLQl9IGVsc2Ugew0KPiAtCQlwcmV2ID0gaGVhZC0+bmV4dDsNCj4g LQkJaGVhZC0+bmV4dCA9IGVudHJ5Ow0KPiAtCQlwcmV2LT5wcmV2ID0gZW50cnk7DQo+IC0J CWVudHJ5LT5wcmV2ID0gaGVhZDsNCj4gLQkJZW50cnktPm5leHQgPSBwcmV2Ow0KPiAtCX0N Cj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC0vKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0g KiBETUEgaW5pdGlhbGl6YXRpb24sIGNsZWFudXANCj4gLSAqLw0KPiAtDQo+IC1pbnQgbWdh X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxh Z3MpDQo+IC17DQo+IC0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldi0+ ZGV2KTsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXY7DQo+IC0JaW50IHJldDsN Cj4gLQ0KPiAtCS8qIFRoZXJlIGFyZSBQQ0kgdmVyc2lvbnMgb2YgdGhlIEc0NTAuICBUaGVz ZSBjYXJkcyBoYXZlIHRoZQ0KPiAtCSAqIHNhbWUgUENJIElEIGFzIHRoZSBBR1AgRzQ1MCwg YnV0IGhhdmUgYW4gYWRkaXRpb25hbCBQQ0ktdG8tUENJDQo+IC0JICogYnJpZGdlIGNoaXAu ICBXZSBkZXRlY3QgdGhlc2UgY2FyZHMsIHdoaWNoIGFyZSBub3QgY3VycmVudGx5DQo+IC0J ICogc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBieSBsb29raW5nIGF0IHRoZSBkZXZpY2Ug SUQgb2YgdGhlDQo+IC0JICogYnVzIHRoZSAiY2FyZCIgaXMgb24uICBJZiB2ZW5kb3IgaXMg MHgzMzg4IChIaW50IENvcnApIGFuZCB0aGUNCj4gLQkgKiBkZXZpY2UgaXMgMHgwMDIxIChI QjYgVW5pdmVyc2FsIFBDSS1QQ0kgYnJpZGdlKSwgd2UgcmVqZWN0IHRoZQ0KPiAtCSAqIGRl dmljZS4NCj4gLQkgKi8NCj4gLQlpZiAoKHBkZXYtPmRldmljZSA9PSAweDA1MjUpICYmIHBk ZXYtPmJ1cy0+c2VsZg0KPiAtCSAgICAmJiAocGRldi0+YnVzLT5zZWxmLT52ZW5kb3IgPT0g MHgzMzg4KQ0KPiAtCSAgICAmJiAocGRldi0+YnVzLT5zZWxmLT5kZXZpY2UgPT0gMHgwMDIx KQ0KPiAtCSAgICAmJiBkZXYtPmFncCkgew0KPiAtCQkvKiBGSVhNRTogVGhpcyBzaG91bGQg YmUgcXVpcmtlZCBpbiB0aGUgcGNpIGNvcmUsIGJ1dCBvaCB3ZWxsDQo+IC0JCSAqIHRoZSBo dyBwcm9iYWJseSBzdG9wcGVkIGV4aXN0aW5nLiAqLw0KPiAtCQlhcmNoX3BoeXNfd2NfZGVs KGRldi0+YWdwLT5hZ3BfbXRycik7DQo+IC0JCWtmcmVlKGRldi0+YWdwKTsNCj4gLQkJZGV2 LT5hZ3AgPSBOVUxMOw0KPiAtCX0NCj4gLQlkZXZfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKGRy bV9tZ2FfcHJpdmF0ZV90KSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFkZXZfcHJpdikNCj4g LQkJcmV0dXJuIC1FTk9NRU07DQo+IC0NCj4gLQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQg KilkZXZfcHJpdjsNCj4gLQ0KPiAtCWRldl9wcml2LT51c2VjX3RpbWVvdXQgPSBNR0FfREVG QVVMVF9VU0VDX1RJTUVPVVQ7DQo+IC0JZGV2X3ByaXYtPmNoaXBzZXQgPSBmbGFnczsNCj4g LQ0KPiAtCXBjaV9zZXRfbWFzdGVyKHBkZXYpOw0KPiAtDQo+IC0JZGV2X3ByaXYtPm1taW9f YmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsNCj4gLQlkZXZfcHJpdi0+bW1p b19zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsNCj4gLQ0KPiAtCXJldCA9IGRy bV92YmxhbmtfaW5pdChkZXYsIDEpOw0KPiAtDQo+IC0JaWYgKHJldCkgew0KPiAtCQkodm9p ZCkgbWdhX2RyaXZlcl91bmxvYWQoZGV2KTsNCj4gLQkJcmV0dXJuIHJldDsNCj4gLQl9DQo+ IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtI2lmIElTX0VOQUJMRUQoQ09ORklH X0FHUCkNCj4gLS8qDQo+IC0gKiBCb290c3RyYXAgdGhlIGRyaXZlciBmb3IgQUdQIERNQS4N Cj4gLSAqDQo+IC0gKiBcdG9kbw0KPiAtICogSW52ZXN0aWdhdGUgd2hldGhlciB0aGVyZSBp cyBhbnkgYmVuZWZpdCB0byBzdG9yaW5nIHRoZSBXQVJQIG1pY3JvY29kZSBpbg0KPiAtICog QUdQIG1lbW9yeS4gIElmIG5vdCwgdGhlIG1pY3JvY29kZSBtYXkgYXMgd2VsbCBhbHdheXMg YmUgcHV0IGluIFBDSQ0KPiAtICogbWVtb3J5Lg0KPiAtICoNCj4gLSAqIFx0b2RvDQo+IC0g KiBUaGlzIHJvdXRpbmUgbmVlZHMgdG8gc2V0IGRtYV9icy0+YWdwX21vZGUgdG8gdGhlIG1v ZGUgYWN0dWFsbHkgY29uZmlndXJlZA0KPiAtICogaW4gdGhlIGhhcmR3YXJlLiAgTG9va2lu ZyBqdXN0IGF0IHRoZSBMaW51eCBBR1AgZHJpdmVyIGNvZGUsIEkgZG9uJ3Qgc2VlDQo+IC0g KiBhbiBlYXN5IHdheSB0byBkZXRlcm1pbmUgdGhpcy4NCj4gLSAqDQo+IC0gKiBcc2EgbWdh X2RvX2RtYV9ib290c3RyYXAsIG1nYV9kb19wY2lfZG1hX2Jvb3RzdHJhcA0KPiAtICovDQo+ IC1zdGF0aWMgaW50IG1nYV9kb19hZ3BfZG1hX2Jvb3RzdHJhcChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LA0KPiAtCQkJCSAgICBkcm1fbWdhX2RtYV9ib290c3RyYXBfdCAqZG1hX2JzKQ0K PiAtew0KPiAtCWRybV9tZ2FfcHJpdmF0ZV90ICpjb25zdCBkZXZfcHJpdiA9DQo+IC0JICAg IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCXVuc2lnbmVk IGludCB3YXJwX3NpemUgPSBNR0FfV0FSUF9VQ09ERV9TSVpFOw0KPiAtCWludCBlcnI7DQo+ IC0JdW5zaWduZWQgb2Zmc2V0Ow0KPiAtCWNvbnN0IHVuc2lnbmVkIHNlY29uZGFyeV9zaXpl ID0gZG1hX2JzLT5zZWNvbmRhcnlfYmluX2NvdW50DQo+IC0JICAgICogZG1hX2JzLT5zZWNv bmRhcnlfYmluX3NpemU7DQo+IC0JY29uc3QgdW5zaWduZWQgYWdwX3NpemUgPSAoZG1hX2Jz LT5hZ3Bfc2l6ZSA8PCAyMCk7DQo+IC0Jc3RydWN0IGRybV9idWZfZGVzYyByZXE7DQo+IC0J c3RydWN0IGRybV9hZ3BfbW9kZSBtb2RlOw0KPiAtCXN0cnVjdCBkcm1fYWdwX2luZm8gaW5m bzsNCj4gLQlzdHJ1Y3QgZHJtX2FncF9idWZmZXIgYWdwX3JlcTsNCj4gLQlzdHJ1Y3QgZHJt X2FncF9iaW5kaW5nIGJpbmRfcmVxOw0KPiAtDQo+IC0JLyogQWNxdWlyZSBBR1AuICovDQo+ IC0JZXJyID0gZHJtX2xlZ2FjeV9hZ3BfYWNxdWlyZShkZXYpOw0KPiAtCWlmIChlcnIpIHsN Cj4gLQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gYWNxdWlyZSBBR1A6ICVkXG4iLCBlcnIpOw0K PiAtCQlyZXR1cm4gZXJyOw0KPiAtCX0NCj4gLQ0KPiAtCWVyciA9IGRybV9sZWdhY3lfYWdw X2luZm8oZGV2LCAmaW5mbyk7DQo+IC0JaWYgKGVycikgew0KPiAtCQlEUk1fRVJST1IoIlVu YWJsZSB0byBnZXQgQUdQIGluZm86ICVkXG4iLCBlcnIpOw0KPiAtCQlyZXR1cm4gZXJyOw0K PiAtCX0NCj4gLQ0KPiAtCW1vZGUubW9kZSA9IChpbmZvLm1vZGUgJiB+MHgwNykgfCBkbWFf YnMtPmFncF9tb2RlOw0KPiAtCWVyciA9IGRybV9sZWdhY3lfYWdwX2VuYWJsZShkZXYsIG1v ZGUpOw0KPiAtCWlmIChlcnIpIHsNCj4gLQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZW5hYmxl IEFHUCAobW9kZSA9IDB4JWx4KVxuIiwgbW9kZS5tb2RlKTsNCj4gLQkJcmV0dXJuIGVycjsN Cj4gLQl9DQo+IC0NCj4gLQkvKiBJbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgQUdQIG1vZGUg Y29uZmlndXJhdGlvbiwgdGhlIEcyMDAgQUdQIGNhcmRzDQo+IC0JICogbmVlZCB0byBoYXZl IHRoZSBBR1AgbW9kZSAibWFudWFsbHkiIHNldC4NCj4gLQkgKi8NCj4gLQ0KPiAtCWlmIChk ZXZfcHJpdi0+Y2hpcHNldCA9PSBNR0FfQ0FSRF9UWVBFX0cyMDApIHsNCj4gLQkJaWYgKG1v ZGUubW9kZSAmIDB4MDIpDQo+IC0JCQlNR0FfV1JJVEUoTUdBX0FHUF9QTEwsIE1HQV9BR1Ay WFBMTF9FTkFCTEUpOw0KPiAtCQllbHNlDQo+IC0JCQlNR0FfV1JJVEUoTUdBX0FHUF9QTEws IE1HQV9BR1AyWFBMTF9ESVNBQkxFKTsNCj4gLQl9DQo+IC0NCj4gLQkvKiBBbGxvY2F0ZSBh bmQgYmluZCBBR1AgbWVtb3J5LiAqLw0KPiAtCWFncF9yZXEuc2l6ZSA9IGFncF9zaXplOw0K PiAtCWFncF9yZXEudHlwZSA9IDA7DQo+IC0JZXJyID0gZHJtX2xlZ2FjeV9hZ3BfYWxsb2Mo ZGV2LCAmYWdwX3JlcSk7DQo+IC0JaWYgKGVycikgew0KPiAtCQlkZXZfcHJpdi0+YWdwX3Np emUgPSAwOw0KPiAtCQlEUk1fRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSAldU1CIEFHUCBt ZW1vcnlcbiIsDQo+IC0JCQkgIGRtYV9icy0+YWdwX3NpemUpOw0KPiAtCQlyZXR1cm4gZXJy Ow0KPiAtCX0NCj4gLQ0KPiAtCWRldl9wcml2LT5hZ3Bfc2l6ZSA9IGFncF9zaXplOw0KPiAt CWRldl9wcml2LT5hZ3BfaGFuZGxlID0gYWdwX3JlcS5oYW5kbGU7DQo+IC0NCj4gLQliaW5k X3JlcS5oYW5kbGUgPSBhZ3BfcmVxLmhhbmRsZTsNCj4gLQliaW5kX3JlcS5vZmZzZXQgPSAw Ow0KPiAtCWVyciA9IGRybV9sZWdhY3lfYWdwX2JpbmQoZGV2LCAmYmluZF9yZXEpOw0KPiAt CWlmIChlcnIpIHsNCj4gLQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gYmluZCBBR1AgbWVtb3J5 OiAlZFxuIiwgZXJyKTsNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQl9DQo+IC0NCj4gLQkvKiBN YWtlIGRybV9sZWdhY3lfYWRkYnVmcyBoYXBweSBieSBub3QgdHJ5aW5nIHRvIGNyZWF0ZSBh IG1hcHBpbmcgZm9yDQo+IC0JICogbGVzcyB0aGFuIGEgcGFnZS4NCj4gLQkgKi8NCj4gLQlp ZiAod2FycF9zaXplIDwgUEFHRV9TSVpFKQ0KPiAtCQl3YXJwX3NpemUgPSBQQUdFX1NJWkU7 DQo+IC0NCj4gLQlvZmZzZXQgPSAwOw0KPiAtCWVyciA9IGRybV9sZWdhY3lfYWRkbWFwKGRl diwgb2Zmc2V0LCB3YXJwX3NpemUsDQo+IC0JCQkJX0RSTV9BR1AsIF9EUk1fUkVBRF9PTkxZ LCAmZGV2X3ByaXYtPndhcnApOw0KPiAtCWlmIChlcnIpIHsNCj4gLQkJRFJNX0VSUk9SKCJV bmFibGUgdG8gbWFwIFdBUlAgbWljcm9jb2RlOiAlZFxuIiwgZXJyKTsNCj4gLQkJcmV0dXJu IGVycjsNCj4gLQl9DQo+IC0NCj4gLQlvZmZzZXQgKz0gd2FycF9zaXplOw0KPiAtCWVyciA9 IGRybV9sZWdhY3lfYWRkbWFwKGRldiwgb2Zmc2V0LCBkbWFfYnMtPnByaW1hcnlfc2l6ZSwN Cj4gLQkJCQlfRFJNX0FHUCwgX0RSTV9SRUFEX09OTFksICZkZXZfcHJpdi0+cHJpbWFyeSk7 DQo+IC0JaWYgKGVycikgew0KPiAtCQlEUk1fRVJST1IoIlVuYWJsZSB0byBtYXAgcHJpbWFy eSBETUEgcmVnaW9uOiAlZFxuIiwgZXJyKTsNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQl9DQo+ IC0NCj4gLQlvZmZzZXQgKz0gZG1hX2JzLT5wcmltYXJ5X3NpemU7DQo+IC0JZXJyID0gZHJt X2xlZ2FjeV9hZGRtYXAoZGV2LCBvZmZzZXQsIHNlY29uZGFyeV9zaXplLA0KPiAtCQkJCV9E Uk1fQUdQLCAwLCAmZGV2LT5hZ3BfYnVmZmVyX21hcCk7DQo+IC0JaWYgKGVycikgew0KPiAt CQlEUk1fRVJST1IoIlVuYWJsZSB0byBtYXAgc2Vjb25kYXJ5IERNQSByZWdpb246ICVkXG4i LCBlcnIpOw0KPiAtCQlyZXR1cm4gZXJyOw0KPiAtCX0NCj4gLQ0KPiAtCSh2b2lkKW1lbXNl dCgmcmVxLCAwLCBzaXplb2YocmVxKSk7DQo+IC0JcmVxLmNvdW50ID0gZG1hX2JzLT5zZWNv bmRhcnlfYmluX2NvdW50Ow0KPiAtCXJlcS5zaXplID0gZG1hX2JzLT5zZWNvbmRhcnlfYmlu X3NpemU7DQo+IC0JcmVxLmZsYWdzID0gX0RSTV9BR1BfQlVGRkVSOw0KPiAtCXJlcS5hZ3Bf c3RhcnQgPSBvZmZzZXQ7DQo+IC0NCj4gLQllcnIgPSBkcm1fbGVnYWN5X2FkZGJ1ZnNfYWdw KGRldiwgJnJlcSk7DQo+IC0JaWYgKGVycikgew0KPiAtCQlEUk1fRVJST1IoIlVuYWJsZSB0 byBhZGQgc2Vjb25kYXJ5IERNQSBidWZmZXJzOiAlZFxuIiwgZXJyKTsNCj4gLQkJcmV0dXJu IGVycjsNCj4gLQl9DQo+IC0NCj4gLQl7DQo+IC0JCXN0cnVjdCBkcm1fbWFwX2xpc3QgKl9l bnRyeTsNCj4gLQkJdW5zaWduZWQgbG9uZyBhZ3BfdG9rZW4gPSAwOw0KPiAtDQo+IC0JCWxp c3RfZm9yX2VhY2hfZW50cnkoX2VudHJ5LCAmZGV2LT5tYXBsaXN0LCBoZWFkKSB7DQo+IC0J CQlpZiAoX2VudHJ5LT5tYXAgPT0gZGV2LT5hZ3BfYnVmZmVyX21hcCkNCj4gLQkJCQlhZ3Bf dG9rZW4gPSBfZW50cnktPnVzZXJfdG9rZW47DQo+IC0JCX0NCj4gLQkJaWYgKCFhZ3BfdG9r ZW4pDQo+IC0JCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQ0KPiAtCQlkZXYtPmFncF9idWZmZXJf dG9rZW4gPSBhZ3BfdG9rZW47DQo+IC0JfQ0KPiAtDQo+IC0Jb2Zmc2V0ICs9IHNlY29uZGFy eV9zaXplOw0KPiAtCWVyciA9IGRybV9sZWdhY3lfYWRkbWFwKGRldiwgb2Zmc2V0LCBhZ3Bf c2l6ZSAtIG9mZnNldCwNCj4gLQkJCQlfRFJNX0FHUCwgMCwgJmRldl9wcml2LT5hZ3BfdGV4 dHVyZXMpOw0KPiAtCWlmIChlcnIpIHsNCj4gLQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gbWFw IEFHUCB0ZXh0dXJlIHJlZ2lvbiAlZFxuIiwgZXJyKTsNCj4gLQkJcmV0dXJuIGVycjsNCj4g LQl9DQo+IC0NCj4gLQlkcm1fbGVnYWN5X2lvcmVtYXAoZGV2X3ByaXYtPndhcnAsIGRldik7 DQo+IC0JZHJtX2xlZ2FjeV9pb3JlbWFwKGRldl9wcml2LT5wcmltYXJ5LCBkZXYpOw0KPiAt CWRybV9sZWdhY3lfaW9yZW1hcChkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOw0KPiAtDQo+ IC0JaWYgKCFkZXZfcHJpdi0+d2FycC0+aGFuZGxlIHx8DQo+IC0JICAgICFkZXZfcHJpdi0+ cHJpbWFyeS0+aGFuZGxlIHx8ICFkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUpIHsNCj4g LQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW9yZW1hcCBhZ3AgcmVnaW9ucyEgKCVwLCAlcCwg JXApXG4iLA0KPiAtCQkJICBkZXZfcHJpdi0+d2FycC0+aGFuZGxlLCBkZXZfcHJpdi0+cHJp bWFyeS0+aGFuZGxlLA0KPiAtCQkJICBkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUpOw0K PiAtCQlyZXR1cm4gLUVOT01FTTsNCj4gLQl9DQo+IC0NCj4gLQlkZXZfcHJpdi0+ZG1hX2Fj Y2VzcyA9IE1HQV9QQUdQWEZFUjsNCj4gLQlkZXZfcHJpdi0+d2FncF9lbmFibGUgPSBNR0Ff V0FHUF9FTkFCTEU7DQo+IC0NCj4gLQlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgY2FyZCBmb3Ig QUdQIERNQS5cbiIpOw0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtI2Vsc2UNCj4gLXN0YXRp YyBpbnQgbWdhX2RvX2FncF9kbWFfYm9vdHN0cmFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs DQo+IC0JCQkJICAgIGRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90ICpkbWFfYnMpDQo+IC17DQo+ IC0JcmV0dXJuIC1FSU5WQUw7DQo+IC19DQo+IC0jZW5kaWYNCj4gLQ0KPiAtLyoNCj4gLSAq IEJvb3RzdHJhcCB0aGUgZHJpdmVyIGZvciBQQ0kgRE1BLg0KPiAtICoNCj4gLSAqIFx0b2Rv DQo+IC0gKiBUaGUgYWxnb3JpdGhtIGZvciBkZWNyZWFzaW5nIHRoZSBzaXplIG9mIHRoZSBw cmltYXJ5IERNQSBidWZmZXIgY291bGQgYmUNCj4gLSAqIGJldHRlci4gIFRoZSBzaXplIHNo b3VsZCBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IHBhZ2Ugc2l6ZSwgdGhlbg0KPiAt ICogZGVjcmVhc2UgdGhlIHJlcXVlc3Qgc2l6ZSBieSBhIHNpbmdsZSBwYWdlIGVhY2ggcGFz cyB0aHJvdWdoIHRoZSBsb29wLg0KPiAtICoNCj4gLSAqIFx0b2RvDQo+IC0gKiBEZXRlcm1p bmUgd2hldGhlciB0aGUgbWF4aW11bSBhZGRyZXNzIHBhc3NlZCB0byBkcm1fcGNpX2FsbG9j IGlzIGNvcnJlY3QuDQo+IC0gKiBUaGUgc2FtZSBnb2VzIGZvciBkcm1fbGVnYWN5X2FkZGJ1 ZnNfcGNpLg0KPiAtICoNCj4gLSAqIFxzYSBtZ2FfZG9fZG1hX2Jvb3RzdHJhcCwgbWdhX2Rv X2FncF9kbWFfYm9vdHN0cmFwDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQgbWdhX2RvX3BjaV9k bWFfYm9vdHN0cmFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJICAgIGRybV9t Z2FfZG1hX2Jvb3RzdHJhcF90ICpkbWFfYnMpDQo+IC17DQo+IC0JZHJtX21nYV9wcml2YXRl X3QgKmNvbnN0IGRldl9wcml2ID0NCj4gLQkgICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRl di0+ZGV2X3ByaXZhdGU7DQo+IC0JdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IE1HQV9XQVJQ X1VDT0RFX1NJWkU7DQo+IC0JdW5zaWduZWQgaW50IHByaW1hcnlfc2l6ZTsNCj4gLQl1bnNp Z25lZCBpbnQgYmluX2NvdW50Ow0KPiAtCWludCBlcnI7DQo+IC0Jc3RydWN0IGRybV9idWZf ZGVzYyByZXE7DQo+IC0NCj4gLQlpZiAoZGV2LT5kbWEgPT0gTlVMTCkgew0KPiAtCQlEUk1f RVJST1IoImRldi0+ZG1hIGlzIE5VTExcbiIpOw0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4g LQl9DQo+IC0NCj4gLQkvKiBNYWtlIGRybV9sZWdhY3lfYWRkYnVmcyBoYXBweSBieSBub3Qg dHJ5aW5nIHRvIGNyZWF0ZSBhIG1hcHBpbmcgZm9yDQo+IC0JICogbGVzcyB0aGFuIGEgcGFn ZS4NCj4gLQkgKi8NCj4gLQlpZiAod2FycF9zaXplIDwgUEFHRV9TSVpFKQ0KPiAtCQl3YXJw X3NpemUgPSBQQUdFX1NJWkU7DQo+IC0NCj4gLQkvKiBUaGUgcHJvcGVyIGFsaWdubWVudCBp cyAweDEwMCBmb3IgdGhpcyBtYXBwaW5nICovDQo+IC0JZXJyID0gZHJtX2xlZ2FjeV9hZGRt YXAoZGV2LCAwLCB3YXJwX3NpemUsIF9EUk1fQ09OU0lTVEVOVCwNCj4gLQkJCQlfRFJNX1JF QURfT05MWSwgJmRldl9wcml2LT53YXJwKTsNCj4gLQlpZiAoZXJyICE9IDApIHsNCj4gLQkJ RFJNX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIG1hcHBpbmcgZm9yIFdBUlAgbWljcm9jb2Rl OiAlZFxuIiwNCj4gLQkJCSAgZXJyKTsNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQl9DQo+IC0N Cj4gLQkvKiBPdGhlciB0aGFuIHRoZSBib3R0b20gdHdvIGJpdHMgYmVpbmcgdXNlZCB0byBl bmNvZGUgb3RoZXINCj4gLQkgKiBpbmZvcm1hdGlvbiwgdGhlcmUgZG9uJ3QgYXBwZWFyIHRv IGJlIGFueSByZXN0cmljdGlvbnMgb24gdGhlDQo+IC0JICogYWxpZ25tZW50IG9mIHRoZSBw cmltYXJ5IG9yIHNlY29uZGFyeSBETUEgYnVmZmVycy4NCj4gLQkgKi8NCj4gLQ0KPiAtCWZv ciAocHJpbWFyeV9zaXplID0gZG1hX2JzLT5wcmltYXJ5X3NpemU7IHByaW1hcnlfc2l6ZSAh PSAwOw0KPiAtCSAgICAgcHJpbWFyeV9zaXplID4+PSAxKSB7DQo+IC0JCS8qIFRoZSBwcm9w ZXIgYWxpZ25tZW50IGZvciB0aGlzIG1hcHBpbmcgaXMgMHgwNCAqLw0KPiAtCQllcnIgPSBk cm1fbGVnYWN5X2FkZG1hcChkZXYsIDAsIHByaW1hcnlfc2l6ZSwgX0RSTV9DT05TSVNURU5U LA0KPiAtCQkJCQlfRFJNX1JFQURfT05MWSwgJmRldl9wcml2LT5wcmltYXJ5KTsNCj4gLQkJ aWYgKCFlcnIpDQo+IC0JCQlicmVhazsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoZXJyICE9IDAp IHsNCj4gLQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgcHJpbWFyeSBETUEgcmVn aW9uOiAlZFxuIiwgZXJyKTsNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0JfQ0KPiAtDQo+ IC0JaWYgKGRldl9wcml2LT5wcmltYXJ5LT5zaXplICE9IGRtYV9icy0+cHJpbWFyeV9zaXpl KSB7DQo+IC0JCURSTV9JTkZPKCJQcmltYXJ5IERNQSBidWZmZXIgc2l6ZSByZWR1Y2VkIGZy b20gJXUgdG8gJXUuXG4iLA0KPiAtCQkJIGRtYV9icy0+cHJpbWFyeV9zaXplLA0KPiAtCQkJ ICh1bnNpZ25lZClkZXZfcHJpdi0+cHJpbWFyeS0+c2l6ZSk7DQo+IC0JCWRtYV9icy0+cHJp bWFyeV9zaXplID0gZGV2X3ByaXYtPnByaW1hcnktPnNpemU7DQo+IC0JfQ0KPiAtDQo+IC0J Zm9yIChiaW5fY291bnQgPSBkbWFfYnMtPnNlY29uZGFyeV9iaW5fY291bnQ7IGJpbl9jb3Vu dCA+IDA7DQo+IC0JICAgICBiaW5fY291bnQtLSkgew0KPiAtCQkodm9pZCltZW1zZXQoJnJl cSwgMCwgc2l6ZW9mKHJlcSkpOw0KPiAtCQlyZXEuY291bnQgPSBiaW5fY291bnQ7DQo+IC0J CXJlcS5zaXplID0gZG1hX2JzLT5zZWNvbmRhcnlfYmluX3NpemU7DQo+IC0NCj4gLQkJZXJy ID0gZHJtX2xlZ2FjeV9hZGRidWZzX3BjaShkZXYsICZyZXEpOw0KPiAtCQlpZiAoIWVycikN Cj4gLQkJCWJyZWFrOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChiaW5fY291bnQgPT0gMCkgew0K PiAtCQlEUk1fRVJST1IoIlVuYWJsZSB0byBhZGQgc2Vjb25kYXJ5IERNQSBidWZmZXJzOiAl ZFxuIiwgZXJyKTsNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoYmlu X2NvdW50ICE9IGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9jb3VudCkgew0KPiAtCQlEUk1fSU5G TygiU2Vjb25kYXJ5IFBDSSBETUEgYnVmZmVyIGJpbiBjb3VudCByZWR1Y2VkIGZyb20gJXUg Ig0KPiAtCQkJICJ0byAldS5cbiIsIGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9jb3VudCwgYmlu X2NvdW50KTsNCj4gLQ0KPiAtCQlkbWFfYnMtPnNlY29uZGFyeV9iaW5fY291bnQgPSBiaW5f Y291bnQ7DQo+IC0JfQ0KPiAtDQo+IC0JZGV2X3ByaXYtPmRtYV9hY2Nlc3MgPSAwOw0KPiAt CWRldl9wcml2LT53YWdwX2VuYWJsZSA9IDA7DQo+IC0NCj4gLQlkbWFfYnMtPmFncF9tb2Rl ID0gMDsNCj4gLQ0KPiAtCURSTV9JTkZPKCJJbml0aWFsaXplZCBjYXJkIGZvciBQQ0kgRE1B LlxuIik7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgbWdhX2Rv X2RtYV9ib290c3RyYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCQlkcm1fbWdh X2RtYV9ib290c3RyYXBfdCAqZG1hX2JzKQ0KPiAtew0KPiAtCWNvbnN0IGludCBpc19hZ3Ag PSAoZG1hX2JzLT5hZ3BfbW9kZSAhPSAwKSAmJiBkZXYtPmFncDsNCj4gLQlpbnQgZXJyOw0K PiAtCWRybV9tZ2FfcHJpdmF0ZV90ICpjb25zdCBkZXZfcHJpdiA9DQo+IC0JICAgIChkcm1f bWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JZGV2X3ByaXYt PnVzZWRfbmV3X2RtYV9pbml0ID0gMTsNCj4gLQ0KPiAtCS8qIFRoZSBmaXJzdCBzdGVwcyBh cmUgdGhlIHNhbWUgZm9yIGJvdGggUENJIGFuZCBBR1AgYmFzZWQgRE1BLiAgTWFwDQo+IC0J ICogdGhlIGNhcmRzIE1NSU8gcmVnaXN0ZXJzIGFuZCBtYXAgYSBzdGF0dXMgcGFnZS4NCj4g LQkgKi8NCj4gLQllcnIgPSBkcm1fbGVnYWN5X2FkZG1hcChkZXYsIGRldl9wcml2LT5tbWlv X2Jhc2UsIGRldl9wcml2LT5tbWlvX3NpemUsDQo+IC0JCQkJX0RSTV9SRUdJU1RFUlMsIF9E Uk1fUkVBRF9PTkxZLA0KPiAtCQkJCSZkZXZfcHJpdi0+bW1pbyk7DQo+IC0JaWYgKGVycikg ew0KPiAtCQlEUk1fRVJST1IoIlVuYWJsZSB0byBtYXAgTU1JTyByZWdpb246ICVkXG4iLCBl cnIpOw0KPiAtCQlyZXR1cm4gZXJyOw0KPiAtCX0NCj4gLQ0KPiAtCWVyciA9IGRybV9sZWdh Y3lfYWRkbWFwKGRldiwgMCwgU0FSRUFfTUFYLCBfRFJNX1NITSwNCj4gLQkJCQlfRFJNX1JF QURfT05MWSB8IF9EUk1fTE9DS0VEIHwgX0RSTV9LRVJORUwsDQo+IC0JCQkgJmRldl9wcml2 LT5zdGF0dXMpOw0KPiAtCWlmIChlcnIpIHsNCj4gLQkJRFJNX0VSUk9SKCJVbmFibGUgdG8g bWFwIHN0YXR1cyByZWdpb246ICVkXG4iLCBlcnIpOw0KPiAtCQlyZXR1cm4gZXJyOw0KPiAt CX0NCj4gLQ0KPiAtCS8qIFRoZSBETUEgaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlIGlzIHNs aWdodGx5IGRpZmZlcmVudCBmb3IgUENJIGFuZA0KPiAtCSAqIEFHUCBjYXJkcy4gIEFHUCBj YXJkcyBqdXN0IGFsbG9jYXRlIGEgbGFyZ2UgYmxvY2sgb2YgQUdQIG1lbW9yeSBhbmQNCj4g LQkgKiBjYXJ2ZSBvZmYgcG9ydGlvbnMgb2YgaXQgZm9yIGludGVybmFsIHVzZXMuICBUaGUg cmVtYWluaW5nIG1lbW9yeQ0KPiAtCSAqIGlzIHJldHVybmVkIHRvIHVzZXItbW9kZSB0byBi ZSB1c2VkIGZvciBBR1AgdGV4dHVyZXMuDQo+IC0JICovDQo+IC0JaWYgKGlzX2FncCkNCj4g LQkJZXJyID0gbWdhX2RvX2FncF9kbWFfYm9vdHN0cmFwKGRldiwgZG1hX2JzKTsNCj4gLQ0K PiAtCS8qIElmIHdlIGF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRoZSBjYXJkIGZvciBBR1Ag RE1BIGJ1dCBmYWlsZWQsDQo+IC0JICogY2xlYW4tdXAgYW55IG1lc3MgdGhhdCBtYXkgaGF2 ZSBiZWVuIGNyZWF0ZWQuDQo+IC0JICovDQo+IC0NCj4gLQlpZiAoZXJyKQ0KPiAtCQltZ2Ff ZG9fY2xlYW51cF9kbWEoZGV2LCBNSU5JTUFMX0NMRUFOVVApOw0KPiAtDQo+IC0JLyogTm90 IG9ubHkgZG8gd2Ugd2FudCB0byB0cnkgYW5kIGluaXRpYWxpemVkIFBDSSBjYXJkcyBmb3Ig UENJIERNQSwNCj4gLQkgKiBidXQgd2UgYWxzbyB0cnkgdG8gaW5pdGlhbGl6ZWQgQUdQIGNh cmRzIHRoYXQgY291bGQgbm90IGJlDQo+IC0JICogaW5pdGlhbGl6ZWQgZm9yIEFHUCBETUEu ICBUaGlzIGNvdmVycyB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGFuIEFHUA0KPiAtCSAqIGNh cmQgaW4gYSBzeXN0ZW0gd2l0aCBhbiB1bnN1cHBvcnRlZCBBR1AgY2hpcHNldC4gIEluIHRo YXQgY2FzZSB0aGUNCj4gLQkgKiBjYXJkIHdpbGwgYmUgZGV0ZWN0ZWQgYXMgQUdQLCBidXQg d2Ugd29uJ3QgYmUgYWJsZSB0byBhbGxvY2F0ZSBhbnkNCj4gLQkgKiBBR1AgbWVtb3J5LCBl dGMuDQo+IC0JICovDQo+IC0NCj4gLQlpZiAoIWlzX2FncCB8fCBlcnIpDQo+IC0JCWVyciA9 IG1nYV9kb19wY2lfZG1hX2Jvb3RzdHJhcChkZXYsIGRtYV9icyk7DQo+IC0NCj4gLQlyZXR1 cm4gZXJyOw0KPiAtfQ0KPiAtDQo+IC1pbnQgbWdhX2RtYV9ib290c3RyYXAoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKmJvb3Rz dHJhcCA9IGRhdGE7DQo+IC0JaW50IGVycjsNCj4gLQlzdGF0aWMgY29uc3QgaW50IG1vZGVz W10gPSB7IDAsIDEsIDIsIDIsIDQsIDQsIDQsIDQgfTsNCj4gLQljb25zdCBkcm1fbWdhX3By aXZhdGVfdCAqY29uc3QgZGV2X3ByaXYgPQ0KPiAtCQkoZHJtX21nYV9wcml2YXRlX3QgKikg ZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCWVyciA9IG1nYV9kb19kbWFfYm9vdHN0cmFw KGRldiwgYm9vdHN0cmFwKTsNCj4gLQlpZiAoZXJyKSB7DQo+IC0JCW1nYV9kb19jbGVhbnVw X2RtYShkZXYsIEZVTExfQ0xFQU5VUCk7DQo+IC0JCXJldHVybiBlcnI7DQo+IC0JfQ0KPiAt DQo+IC0JaWYgKGRldl9wcml2LT5hZ3BfdGV4dHVyZXMgIT0gTlVMTCkgew0KPiAtCQlib290 c3RyYXAtPnRleHR1cmVfaGFuZGxlID0gZGV2X3ByaXYtPmFncF90ZXh0dXJlcy0+b2Zmc2V0 Ow0KPiAtCQlib290c3RyYXAtPnRleHR1cmVfc2l6ZSA9IGRldl9wcml2LT5hZ3BfdGV4dHVy ZXMtPnNpemU7DQo+IC0JfSBlbHNlIHsNCj4gLQkJYm9vdHN0cmFwLT50ZXh0dXJlX2hhbmRs ZSA9IDA7DQo+IC0JCWJvb3RzdHJhcC0+dGV4dHVyZV9zaXplID0gMDsNCj4gLQl9DQo+IC0N Cj4gLQlib290c3RyYXAtPmFncF9tb2RlID0gbW9kZXNbYm9vdHN0cmFwLT5hZ3BfbW9kZSAm IDB4MDddOw0KPiAtDQo+IC0JcmV0dXJuIGVycjsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlu dCBtZ2FfZG9faW5pdF9kbWEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX21nYV9pbml0 X3QgKmluaXQpDQo+IC17DQo+IC0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2Ow0KPiAt CWludCByZXQ7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JaWYgKGluaXQtPnNncmFtKQ0KPiAtCQlkZXZf cHJpdi0+Y2xlYXJfY21kID0gTUdBX0RXR0NUTF9DTEVBUiB8IE1HQV9BVFlQRV9CTEs7DQo+ IC0JZWxzZQ0KPiAtCQlkZXZfcHJpdi0+Y2xlYXJfY21kID0gTUdBX0RXR0NUTF9DTEVBUiB8 IE1HQV9BVFlQRV9SU1RSOw0KPiAtCWRldl9wcml2LT5tYWNjZXNzID0gaW5pdC0+bWFjY2Vz czsNCj4gLQ0KPiAtCWRldl9wcml2LT5mYl9jcHAgPSBpbml0LT5mYl9jcHA7DQo+IC0JZGV2 X3ByaXYtPmZyb250X29mZnNldCA9IGluaXQtPmZyb250X29mZnNldDsNCj4gLQlkZXZfcHJp di0+ZnJvbnRfcGl0Y2ggPSBpbml0LT5mcm9udF9waXRjaDsNCj4gLQlkZXZfcHJpdi0+YmFj a19vZmZzZXQgPSBpbml0LT5iYWNrX29mZnNldDsNCj4gLQlkZXZfcHJpdi0+YmFja19waXRj aCA9IGluaXQtPmJhY2tfcGl0Y2g7DQo+IC0NCj4gLQlkZXZfcHJpdi0+ZGVwdGhfY3BwID0g aW5pdC0+ZGVwdGhfY3BwOw0KPiAtCWRldl9wcml2LT5kZXB0aF9vZmZzZXQgPSBpbml0LT5k ZXB0aF9vZmZzZXQ7DQo+IC0JZGV2X3ByaXYtPmRlcHRoX3BpdGNoID0gaW5pdC0+ZGVwdGhf cGl0Y2g7DQo+IC0NCj4gLQkvKiBGSVhNRTogTmVlZCB0byBzdXBwb3J0IEFHUCB0ZXh0dXJl cy4uLg0KPiAtCSAqLw0KPiAtCWRldl9wcml2LT50ZXh0dXJlX29mZnNldCA9IGluaXQtPnRl eHR1cmVfb2Zmc2V0WzBdOw0KPiAtCWRldl9wcml2LT50ZXh0dXJlX3NpemUgPSBpbml0LT50 ZXh0dXJlX3NpemVbMF07DQo+IC0NCj4gLQlkZXZfcHJpdi0+c2FyZWEgPSBkcm1fbGVnYWN5 X2dldHNhcmVhKGRldik7DQo+IC0JaWYgKCFkZXZfcHJpdi0+c2FyZWEpIHsNCj4gLQkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gZmluZCBzYXJlYSFcbiIpOw0KPiAtCQlyZXR1cm4gLUVJTlZB TDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoIWRldl9wcml2LT51c2VkX25ld19kbWFfaW5pdCkg ew0KPiAtDQo+IC0JCWRldl9wcml2LT5kbWFfYWNjZXNzID0gTUdBX1BBR1BYRkVSOw0KPiAt CQlkZXZfcHJpdi0+d2FncF9lbmFibGUgPSBNR0FfV0FHUF9FTkFCTEU7DQo+IC0NCj4gLQkJ ZGV2X3ByaXYtPnN0YXR1cyA9IGRybV9sZWdhY3lfZmluZG1hcChkZXYsIGluaXQtPnN0YXR1 c19vZmZzZXQpOw0KPiAtCQlpZiAoIWRldl9wcml2LT5zdGF0dXMpIHsNCj4gLQkJCURSTV9F UlJPUigiZmFpbGVkIHRvIGZpbmQgc3RhdHVzIHBhZ2UhXG4iKTsNCj4gLQkJCXJldHVybiAt RUlOVkFMOw0KPiAtCQl9DQo+IC0JCWRldl9wcml2LT5tbWlvID0gZHJtX2xlZ2FjeV9maW5k bWFwKGRldiwgaW5pdC0+bW1pb19vZmZzZXQpOw0KPiAtCQlpZiAoIWRldl9wcml2LT5tbWlv KSB7DQo+IC0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIG1taW8gcmVnaW9uIVxuIik7 DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlkZXZfcHJpdi0+d2FycCA9 IGRybV9sZWdhY3lfZmluZG1hcChkZXYsIGluaXQtPndhcnBfb2Zmc2V0KTsNCj4gLQkJaWYg KCFkZXZfcHJpdi0+d2FycCkgew0KPiAtCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCB3 YXJwIG1pY3JvY29kZSByZWdpb24hXG4iKTsNCj4gLQkJCXJldHVybiAtRUlOVkFMOw0KPiAt CQl9DQo+IC0JCWRldl9wcml2LT5wcmltYXJ5ID0gZHJtX2xlZ2FjeV9maW5kbWFwKGRldiwg aW5pdC0+cHJpbWFyeV9vZmZzZXQpOw0KPiAtCQlpZiAoIWRldl9wcml2LT5wcmltYXJ5KSB7 DQo+IC0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIHByaW1hcnkgZG1hIHJlZ2lvbiFc biIpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCX0NCj4gLQkJZGV2LT5hZ3BfYnVm ZmVyX3Rva2VuID0gaW5pdC0+YnVmZmVyc19vZmZzZXQ7DQo+IC0JCWRldi0+YWdwX2J1ZmZl cl9tYXAgPQ0KPiAtCQkgICAgZHJtX2xlZ2FjeV9maW5kbWFwKGRldiwgaW5pdC0+YnVmZmVy c19vZmZzZXQpOw0KPiAtCQlpZiAoIWRldi0+YWdwX2J1ZmZlcl9tYXApIHsNCj4gLQkJCURS TV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgZG1hIGJ1ZmZlciByZWdpb24hXG4iKTsNCj4gLQkJ CXJldHVybiAtRUlOVkFMOw0KPiAtCQl9DQo+IC0NCj4gLQkJZHJtX2xlZ2FjeV9pb3JlbWFw KGRldl9wcml2LT53YXJwLCBkZXYpOw0KPiAtCQlkcm1fbGVnYWN5X2lvcmVtYXAoZGV2X3By aXYtPnByaW1hcnksIGRldik7DQo+IC0JCWRybV9sZWdhY3lfaW9yZW1hcChkZXYtPmFncF9i dWZmZXJfbWFwLCBkZXYpOw0KPiAtCX0NCj4gLQ0KPiAtCWRldl9wcml2LT5zYXJlYV9wcml2 ID0NCj4gLQkgICAgKGRybV9tZ2Ffc2FyZWFfdCAqKSAoKHU4ICopIGRldl9wcml2LT5zYXJl YS0+aGFuZGxlICsNCj4gLQkJCQkgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOw0KPiAtDQo+ IC0JaWYgKCFkZXZfcHJpdi0+d2FycC0+aGFuZGxlIHx8DQo+IC0JICAgICFkZXZfcHJpdi0+ cHJpbWFyeS0+aGFuZGxlIHx8DQo+IC0JICAgICgoZGV2X3ByaXYtPmRtYV9hY2Nlc3MgIT0g MCkgJiYNCj4gLQkgICAgICgoZGV2LT5hZ3BfYnVmZmVyX21hcCA9PSBOVUxMKSB8fA0KPiAt CSAgICAgIChkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPT0gTlVMTCkpKSkgew0KPiAt CQlEUk1fRVJST1IoImZhaWxlZCB0byBpb3JlbWFwIGFncCByZWdpb25zIVxuIik7DQo+IC0J CXJldHVybiAtRU5PTUVNOw0KPiAtCX0NCj4gLQ0KPiAtCXJldCA9IG1nYV93YXJwX2luc3Rh bGxfbWljcm9jb2RlKGRldl9wcml2KTsNCj4gLQlpZiAocmV0IDwgMCkgew0KPiAtCQlEUk1f RVJST1IoImZhaWxlZCB0byBpbnN0YWxsIFdBUlAgdWNvZGUhOiAlZFxuIiwgcmV0KTsNCj4g LQkJcmV0dXJuIHJldDsNCj4gLQl9DQo+IC0NCj4gLQlyZXQgPSBtZ2Ffd2FycF9pbml0KGRl dl9wcml2KTsNCj4gLQlpZiAocmV0IDwgMCkgew0KPiAtCQlEUk1fRVJST1IoImZhaWxlZCB0 byBpbml0IFdBUlAgZW5naW5lITogJWRcbiIsIHJldCk7DQo+IC0JCXJldHVybiByZXQ7DQo+ IC0JfQ0KPiAtDQo+IC0JZGV2X3ByaXYtPnByaW0uc3RhdHVzID0gKHUzMiAqKSBkZXZfcHJp di0+c3RhdHVzLT5oYW5kbGU7DQo+IC0NCj4gLQltZ2FfZG9fd2FpdF9mb3JfaWRsZShkZXZf cHJpdik7DQo+IC0NCj4gLQkvKiBJbml0IHRoZSBwcmltYXJ5IERNQSByZWdpc3RlcnMuDQo+ IC0JICovDQo+IC0JTUdBX1dSSVRFKE1HQV9QUklNQUREUkVTUywgZGV2X3ByaXYtPnByaW1h cnktPm9mZnNldCB8IE1HQV9ETUFfR0VORVJBTCk7DQo+IC0jaWYgMA0KPiAtCU1HQV9XUklU RShNR0FfUFJJTVBUUiwgdmlydF90b19idXMoKHZvaWQgKilkZXZfcHJpdi0+cHJpbS5zdGF0 dXMpIHwgTUdBX1BSSU1QVFJFTjAgfAkvKiBTb2Z0IHRyYXAsIFNFQ0VORCwgU0VUVVBFTkQg Ki8NCj4gLQkJICBNR0FfUFJJTVBUUkVOMSk7CS8qIERXR1NZTkMgKi8NCj4gLSNlbmRpZg0K PiAtDQo+IC0JZGV2X3ByaXYtPnByaW0uc3RhcnQgPSAodTggKikgZGV2X3ByaXYtPnByaW1h cnktPmhhbmRsZTsNCj4gLQlkZXZfcHJpdi0+cHJpbS5lbmQgPSAoKHU4ICopIGRldl9wcml2 LT5wcmltYXJ5LT5oYW5kbGUNCj4gLQkJCSAgICAgICsgZGV2X3ByaXYtPnByaW1hcnktPnNp emUpOw0KPiAtCWRldl9wcml2LT5wcmltLnNpemUgPSBkZXZfcHJpdi0+cHJpbWFyeS0+c2l6 ZTsNCj4gLQ0KPiAtCWRldl9wcml2LT5wcmltLnRhaWwgPSAwOw0KPiAtCWRldl9wcml2LT5w cmltLnNwYWNlID0gZGV2X3ByaXYtPnByaW0uc2l6ZTsNCj4gLQlkZXZfcHJpdi0+cHJpbS53 cmFwcGVkID0gMDsNCj4gLQ0KPiAtCWRldl9wcml2LT5wcmltLmxhc3RfZmx1c2ggPSAwOw0K PiAtCWRldl9wcml2LT5wcmltLmxhc3Rfd3JhcCA9IDA7DQo+IC0NCj4gLQlkZXZfcHJpdi0+ cHJpbS5oaWdoX21hcmsgPSAyNTYgKiBETUFfQkxPQ0tfU0laRTsNCj4gLQ0KPiAtCWRldl9w cml2LT5wcmltLnN0YXR1c1swXSA9IGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQ7DQo+IC0J ZGV2X3ByaXYtPnByaW0uc3RhdHVzWzFdID0gMDsNCj4gLQ0KPiAtCWRldl9wcml2LT5zYXJl YV9wcml2LT5sYXN0X3dyYXAgPSAwOw0KPiAtCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0 X2ZyYW1lLmhlYWQgPSAwOw0KPiAtCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1l LndyYXAgPSAwOw0KPiAtDQo+IC0JaWYgKG1nYV9mcmVlbGlzdF9pbml0KGRldiwgZGV2X3By aXYpIDwgMCkgew0KPiAtCQlEUk1fRVJST1IoImNvdWxkIG5vdCBpbml0aWFsaXplIGZyZWVs aXN0XG4iKTsNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJu IDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgbWdhX2RvX2NsZWFudXBfZG1hKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCBmdWxsX2NsZWFudXApDQo+IC17DQo+IC0JaW50IGVy ciA9IDA7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JLyogTWFrZSBzdXJlIGlu dGVycnVwdHMgYXJlIGRpc2FibGVkIGhlcmUgYmVjYXVzZSB0aGUgdW5pbnN0YWxsIGlvY3Rs DQo+IC0JICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBh ZnRlciBkZXZfcHJpdmF0ZQ0KPiAtCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLg0KPiAt CSAqLw0KPiAtCWlmIChkZXYtPmlycV9lbmFibGVkKQ0KPiAtCQlkcm1fbGVnYWN5X2lycV91 bmluc3RhbGwoZGV2KTsNCj4gLQ0KPiAtCWlmIChkZXYtPmRldl9wcml2YXRlKSB7DQo+IC0J CWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0N Cj4gLQkJaWYgKChkZXZfcHJpdi0+d2FycCAhPSBOVUxMKQ0KPiAtCQkgICAgJiYgKGRldl9w cml2LT53YXJwLT50eXBlICE9IF9EUk1fQ09OU0lTVEVOVCkpDQo+IC0JCQlkcm1fbGVnYWN5 X2lvcmVtYXBmcmVlKGRldl9wcml2LT53YXJwLCBkZXYpOw0KPiAtDQo+IC0JCWlmICgoZGV2 X3ByaXYtPnByaW1hcnkgIT0gTlVMTCkNCj4gLQkJICAgICYmIChkZXZfcHJpdi0+cHJpbWFy eS0+dHlwZSAhPSBfRFJNX0NPTlNJU1RFTlQpKQ0KPiAtCQkJZHJtX2xlZ2FjeV9pb3JlbWFw ZnJlZShkZXZfcHJpdi0+cHJpbWFyeSwgZGV2KTsNCj4gLQ0KPiAtCQlpZiAoZGV2LT5hZ3Bf YnVmZmVyX21hcCAhPSBOVUxMKQ0KPiAtCQkJZHJtX2xlZ2FjeV9pb3JlbWFwZnJlZShkZXYt PmFncF9idWZmZXJfbWFwLCBkZXYpOw0KPiAtDQo+IC0JCWlmIChkZXZfcHJpdi0+dXNlZF9u ZXdfZG1hX2luaXQpIHsNCj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19BR1ApDQo+IC0JCQlp ZiAoZGV2X3ByaXYtPmFncF9oYW5kbGUgIT0gMCkgew0KPiAtCQkJCXN0cnVjdCBkcm1fYWdw X2JpbmRpbmcgdW5iaW5kX3JlcTsNCj4gLQkJCQlzdHJ1Y3QgZHJtX2FncF9idWZmZXIgZnJl ZV9yZXE7DQo+IC0NCj4gLQkJCQl1bmJpbmRfcmVxLmhhbmRsZSA9IGRldl9wcml2LT5hZ3Bf aGFuZGxlOw0KPiAtCQkJCWRybV9sZWdhY3lfYWdwX3VuYmluZChkZXYsICZ1bmJpbmRfcmVx KTsNCj4gLQ0KPiAtCQkJCWZyZWVfcmVxLmhhbmRsZSA9IGRldl9wcml2LT5hZ3BfaGFuZGxl Ow0KPiAtCQkJCWRybV9sZWdhY3lfYWdwX2ZyZWUoZGV2LCAmZnJlZV9yZXEpOw0KPiAtDQo+ IC0JCQkJZGV2X3ByaXYtPmFncF90ZXh0dXJlcyA9IE5VTEw7DQo+IC0JCQkJZGV2X3ByaXYt PmFncF9zaXplID0gMDsNCj4gLQkJCQlkZXZfcHJpdi0+YWdwX2hhbmRsZSA9IDA7DQo+IC0J CQl9DQo+IC0NCj4gLQkJCWlmICgoZGV2LT5hZ3AgIT0gTlVMTCkgJiYgZGV2LT5hZ3AtPmFj cXVpcmVkKQ0KPiAtCQkJCWVyciA9IGRybV9sZWdhY3lfYWdwX3JlbGVhc2UoZGV2KTsNCj4g LSNlbmRpZg0KPiAtCQl9DQo+IC0NCj4gLQkJZGV2X3ByaXYtPndhcnAgPSBOVUxMOw0KPiAt CQlkZXZfcHJpdi0+cHJpbWFyeSA9IE5VTEw7DQo+IC0JCWRldl9wcml2LT5zYXJlYSA9IE5V TEw7DQo+IC0JCWRldl9wcml2LT5zYXJlYV9wcml2ID0gTlVMTDsNCj4gLQkJZGV2LT5hZ3Bf YnVmZmVyX21hcCA9IE5VTEw7DQo+IC0NCj4gLQkJaWYgKGZ1bGxfY2xlYW51cCkgew0KPiAt CQkJZGV2X3ByaXYtPm1taW8gPSBOVUxMOw0KPiAtCQkJZGV2X3ByaXYtPnN0YXR1cyA9IE5V TEw7DQo+IC0JCQlkZXZfcHJpdi0+dXNlZF9uZXdfZG1hX2luaXQgPSAwOw0KPiAtCQl9DQo+ IC0NCj4gLQkJbWVtc2V0KCZkZXZfcHJpdi0+cHJpbSwgMCwgc2l6ZW9mKGRldl9wcml2LT5w cmltKSk7DQo+IC0JCWRldl9wcml2LT53YXJwX3BpcGUgPSAwOw0KPiAtCQltZW1zZXQoZGV2 X3ByaXYtPndhcnBfcGlwZV9waHlzLCAwLA0KPiAtCQkgICAgICAgc2l6ZW9mKGRldl9wcml2 LT53YXJwX3BpcGVfcGh5cykpOw0KPiAtDQo+IC0JCWlmIChkZXZfcHJpdi0+aGVhZCAhPSBO VUxMKQ0KPiAtCQkJbWdhX2ZyZWVsaXN0X2NsZWFudXAoZGV2KTsNCj4gLQl9DQo+IC0NCj4g LQlyZXR1cm4gZXJyOw0KPiAtfQ0KPiAtDQo+IC1pbnQgbWdhX2RtYV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0JCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdikNCj4gLXsNCj4gLQlkcm1fbWdhX2luaXRfdCAqaW5pdCA9IGRhdGE7DQo+IC0J aW50IGVycjsNCj4gLQ0KPiAtCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJp dik7DQo+IC0NCj4gLQlzd2l0Y2ggKGluaXQtPmZ1bmMpIHsNCj4gLQljYXNlIE1HQV9JTklU X0RNQToNCj4gLQkJZXJyID0gbWdhX2RvX2luaXRfZG1hKGRldiwgaW5pdCk7DQo+IC0JCWlm IChlcnIpDQo+IC0JCQkodm9pZCltZ2FfZG9fY2xlYW51cF9kbWEoZGV2LCBGVUxMX0NMRUFO VVApOw0KPiAtCQlyZXR1cm4gZXJyOw0KPiAtCWNhc2UgTUdBX0NMRUFOVVBfRE1BOg0KPiAt CQlyZXR1cm4gbWdhX2RvX2NsZWFudXBfZG1hKGRldiwgRlVMTF9DTEVBTlVQKTsNCj4gLQl9 DQo+IC0NCj4gLQlyZXR1cm4gLUVJTlZBTDsNCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiAtICogUHJpbWFyeSBETUEgc3RyZWFtIG1hbmFnZW1lbnQNCj4gLSAqLw0KPiAtDQo+ IC1pbnQgbWdhX2RtYV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LA0KPiAtCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCWRybV9t Z2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRl dl9wcml2YXRlOw0KPiAtCXN0cnVjdCBkcm1fbG9jayAqbG9jayA9IGRhdGE7DQo+IC0NCj4g LQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JRFJN X0RFQlVHKCIlcyVzJXNcbiIsDQo+IC0JCSAgKGxvY2stPmZsYWdzICYgX0RSTV9MT0NLX0ZM VVNIKSA/ICJmbHVzaCwgIiA6ICIiLA0KPiAtCQkgIChsb2NrLT5mbGFncyAmIF9EUk1fTE9D S19GTFVTSF9BTEwpID8gImZsdXNoIGFsbCwgIiA6ICIiLA0KPiAtCQkgIChsb2NrLT5mbGFn cyAmIF9EUk1fTE9DS19RVUlFU0NFTlQpID8gImlkbGUsICIgOiAiIik7DQo+IC0NCj4gLQlX UkFQX1dBSVRfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JaWYgKGxvY2stPmZs YWdzICYgKF9EUk1fTE9DS19GTFVTSCB8IF9EUk1fTE9DS19GTFVTSF9BTEwpKQ0KPiAtCQlt Z2FfZG9fZG1hX2ZsdXNoKGRldl9wcml2KTsNCj4gLQ0KPiAtCWlmIChsb2NrLT5mbGFncyAm IF9EUk1fTE9DS19RVUlFU0NFTlQpIHsNCj4gLSNpZiBNR0FfRE1BX0RFQlVHDQo+IC0JCWlu dCByZXQgPSBtZ2FfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7DQo+IC0JCWlmIChyZXQg PCAwKQ0KPiAtCQkJRFJNX0lORk8oIi1FQlVTWVxuIik7DQo+IC0JCXJldHVybiByZXQ7DQo+ IC0jZWxzZQ0KPiAtCQlyZXR1cm4gbWdhX2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOw0K PiAtI2VuZGlmDQo+IC0JfSBlbHNlIHsNCj4gLQkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAtfQ0K PiAtDQo+IC1pbnQgbWdhX2RtYV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLA0KPiAtCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAt CWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBk ZXYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwg ZmlsZV9wcml2KTsNCj4gLQ0KPiAtCXJldHVybiBtZ2FfZG9fZG1hX3Jlc2V0KGRldl9wcml2 KTsNCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtICogRE1BIGJ1ZmZlciBtYW5h Z2VtZW50DQo+IC0gKi8NCj4gLQ0KPiAtc3RhdGljIGludCBtZ2FfZG1hX2dldF9idWZmZXJz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkgICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZG1hICpkKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1f YnVmICpidWY7DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlmb3IgKGkgPSBkLT5ncmFudGVkX2Nv dW50OyBpIDwgZC0+cmVxdWVzdF9jb3VudDsgaSsrKSB7DQo+IC0JCWJ1ZiA9IG1nYV9mcmVl bGlzdF9nZXQoZGV2KTsNCj4gLQkJaWYgKCFidWYpDQo+IC0JCQlyZXR1cm4gLUVBR0FJTjsN Cj4gLQ0KPiAtCQlidWYtPmZpbGVfcHJpdiA9IGZpbGVfcHJpdjsNCj4gLQ0KPiAtCQlpZiAo Y29weV90b191c2VyKCZkLT5yZXF1ZXN0X2luZGljZXNbaV0sDQo+IC0JCQkJICAgICAmYnVm LT5pZHgsIHNpemVvZihidWYtPmlkeCkpKQ0KPiAtCQkJcmV0dXJuIC1FRkFVTFQ7DQo+IC0J CWlmIChjb3B5X3RvX3VzZXIoJmQtPnJlcXVlc3Rfc2l6ZXNbaV0sDQo+IC0JCQkJICAgICAm YnVmLT50b3RhbCwgc2l6ZW9mKGJ1Zi0+dG90YWwpKSkNCj4gLQkJCXJldHVybiAtRUZBVUxU Ow0KPiAtDQo+IC0JCWQtPmdyYW50ZWRfY291bnQrKzsNCj4gLQl9DQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLWludCBtZ2FfZG1hX2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7DQo+ IC0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICop IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0Jc3RydWN0IGRybV9kbWEgKmQgPSBkYXRhOw0KPiAt CWludCByZXQgPSAwOw0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmls ZV9wcml2KTsNCj4gLQ0KPiAtCS8qIFBsZWFzZSBkb24ndCBzZW5kIHVzIGJ1ZmZlcnMuDQo+ IC0JICovDQo+IC0JaWYgKGQtPnNlbmRfY291bnQgIT0gMCkgew0KPiAtCQlEUk1fRVJST1Io IlByb2Nlc3MgJWQgdHJ5aW5nIHRvIHNlbmQgJWQgYnVmZmVycyB2aWEgZHJtRE1BXG4iLA0K PiAtCQkJICB0YXNrX3BpZF9ucihjdXJyZW50KSwgZC0+c2VuZF9jb3VudCk7DQo+IC0JCXJl dHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCS8qIFdlJ2xsIHNlbmQgeW91IGJ1ZmZl cnMuDQo+IC0JICovDQo+IC0JaWYgKGQtPnJlcXVlc3RfY291bnQgPCAwIHx8IGQtPnJlcXVl c3RfY291bnQgPiBkbWEtPmJ1Zl9jb3VudCkgew0KPiAtCQlEUk1fRVJST1IoIlByb2Nlc3Mg JWQgdHJ5aW5nIHRvIGdldCAlZCBidWZmZXJzIChvZiAlZCBtYXgpXG4iLA0KPiAtCQkJICB0 YXNrX3BpZF9ucihjdXJyZW50KSwgZC0+cmVxdWVzdF9jb3VudCwNCj4gLQkJCSAgZG1hLT5i dWZfY291bnQpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlXUkFQ X1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JZC0+Z3JhbnRlZF9jb3Vu dCA9IDA7DQo+IC0NCj4gLQlpZiAoZC0+cmVxdWVzdF9jb3VudCkNCj4gLQkJcmV0ID0gbWdh X2RtYV9nZXRfYnVmZmVycyhkZXYsIGZpbGVfcHJpdiwgZCk7DQo+IC0NCj4gLQlyZXR1cm4g cmV0Ow0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAtICogQ2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBt b2R1bGUgaXMgdW5sb2FkZWQuDQo+IC0gKi8NCj4gLXZvaWQgbWdhX2RyaXZlcl91bmxvYWQo c3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlrZnJlZShkZXYtPmRldl9wcml2 YXRlKTsNCj4gLQlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsNCj4gLX0NCj4gLQ0KPiAtLyoN Cj4gLSAqIENhbGxlZCB3aGVuIHRoZSBsYXN0IG9wZW5lciBvZiB0aGUgZGV2aWNlIGlzIGNs b3NlZC4NCj4gLSAqLw0KPiAtdm9pZCBtZ2FfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCW1nYV9kb19jbGVhbnVwX2RtYShkZXYsIEZVTExf Q0xFQU5VUCk7DQo+IC19DQo+IC0NCj4gLWludCBtZ2FfZHJpdmVyX2RtYV9xdWllc2NlbnQo c3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCXJldHVybiBtZ2FfZG9fd2FpdF9m b3JfaWRsZShkZXZfcHJpdik7DQo+IC19DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWdhL21nYV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jDQo+IGRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCA3MTEyOGU2ZjZhZTkuLjAwMDAwMDAw MDAwMA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuYw0KPiArKysgL2Rl di9udWxsDQo+IEBAIC0xLDEwNCArMCwwIEBADQo+IC0vKiBtZ2FfZHJ2LmMgLS0gTWF0cm94 IEcyMDAvRzQwMCBkcml2ZXIgLSotIGxpbnV4LWMgLSotDQo+IC0gKiBDcmVhdGVkOiBNb24g RGVjIDEzIDAxOjU2OjIyIDE5OTkgYnkgamhhcnRtYW5uQHByZWNpc2lvbmluc2lnaHQuY29t DQo+IC0gKg0KPiAtICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4s IENlZGFyIFBhcmssIFRleGFzLg0KPiAtICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lz dGVtcywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLg0KPiAtICogQWxsIFJpZ2h0cyBS ZXNlcnZlZC4NCj4gLSAqDQo+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KPiAtICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwNCj4gLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24NCj4gLSAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLA0KPiAtICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+IC0gKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOg0KPiAtICoNCj4gLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQNCj4gLSAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUNCj4gLSAqIFNvZnR3YXJlLg0KPiAtICoNCj4gLSAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SDQo+IC0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCj4gLSAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTA0KPiAtICogVkEgTElOVVggU1lTVEVNUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KPiAtICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsDQo+IC0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1INCj4gLSAqIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4NCj4gLSAqDQo+IC0gKiBBdXRob3JzOg0KPiAtICogICAgUmlja2FyZCBF LiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+DQo+IC0gKiAgICBHYXJldGggSHVn aGVzIDxnYXJldGhAdmFsaW51eC5jb20+DQo+IC0gKi8NCj4gLQ0KPiAtI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPg0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4NCj4gLSNp bmNsdWRlIDxkcm0vZHJtX3BjaWlkcy5oPg0KPiAtDQo+IC0jaW5jbHVkZSAibWdhX2Rydi5o Ig0KPiAtDQo+IC1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7 DQo+IC0JbWdhX1BDSV9JRFMNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIG1nYV9kcml2ZXJfZm9wcyA9IHsNCj4gLQkub3duZXIgPSBUSElT X01PRFVMRSwNCj4gLQkub3BlbiA9IGRybV9vcGVuLA0KPiAtCS5yZWxlYXNlID0gZHJtX3Jl bGVhc2UsDQo+IC0JLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLA0KPiAtCS5tbWFwID0g ZHJtX2xlZ2FjeV9tbWFwLA0KPiAtCS5wb2xsID0gZHJtX3BvbGwsDQo+IC0jaWZkZWYgQ09O RklHX0NPTVBBVA0KPiAtCS5jb21wYXRfaW9jdGwgPSBtZ2FfY29tcGF0X2lvY3RsLA0KPiAt I2VuZGlmDQo+IC0JLmxsc2VlayA9IG5vb3BfbGxzZWVrLA0KPiAtfTsNCj4gLQ0KPiAtc3Rh dGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsNCj4gLQkuZHJpdmVyX2ZlYXR1cmVz ID0NCj4gLQkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9M RUdBQ1kgfA0KPiAtCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEsDQo+ IC0JLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX21nYV9idWZfcHJpdl90KSwNCj4gLQku bG9hZCA9IG1nYV9kcml2ZXJfbG9hZCwNCj4gLQkudW5sb2FkID0gbWdhX2RyaXZlcl91bmxv YWQsDQo+IC0JLmxhc3RjbG9zZSA9IG1nYV9kcml2ZXJfbGFzdGNsb3NlLA0KPiAtCS5kbWFf cXVpZXNjZW50ID0gbWdhX2RyaXZlcl9kbWFfcXVpZXNjZW50LA0KPiAtCS5nZXRfdmJsYW5r X2NvdW50ZXIgPSBtZ2FfZ2V0X3ZibGFua19jb3VudGVyLA0KPiAtCS5lbmFibGVfdmJsYW5r ID0gbWdhX2VuYWJsZV92YmxhbmssDQo+IC0JLmRpc2FibGVfdmJsYW5rID0gbWdhX2Rpc2Fi bGVfdmJsYW5rLA0KPiAtCS5pcnFfcHJlaW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3ByZWlu c3RhbGwsDQo+IC0JLmlycV9wb3N0aW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0 YWxsLA0KPiAtCS5pcnFfdW5pbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLA0K PiAtCS5pcnFfaGFuZGxlciA9IG1nYV9kcml2ZXJfaXJxX2hhbmRsZXIsDQo+IC0JLmlvY3Rs cyA9IG1nYV9pb2N0bHMsDQo+IC0JLmRtYV9pb2N0bCA9IG1nYV9kbWFfYnVmZmVycywNCj4g LQkuZm9wcyA9ICZtZ2FfZHJpdmVyX2ZvcHMsDQo+IC0JLm5hbWUgPSBEUklWRVJfTkFNRSwN Cj4gLQkuZGVzYyA9IERSSVZFUl9ERVNDLA0KPiAtCS5kYXRlID0gRFJJVkVSX0RBVEUsDQo+ IC0JLm1ham9yID0gRFJJVkVSX01BSk9SLA0KPiAtCS5taW5vciA9IERSSVZFUl9NSU5PUiwN Cj4gLQkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMLA0KPiAtfTsNCj4gLQ0KPiAt c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1nYV9wY2lfZHJpdmVyID0gew0KPiAtCS5uYW1l ID0gRFJJVkVSX05BTUUsDQo+IC0JLmlkX3RhYmxlID0gcGNpaWRsaXN0LA0KPiAtfTsNCj4g LQ0KPiAtc3RhdGljIGludCBfX2luaXQgbWdhX2luaXQodm9pZCkNCj4gLXsNCj4gLQlkcml2 ZXIubnVtX2lvY3RscyA9IG1nYV9tYXhfaW9jdGw7DQo+IC0JcmV0dXJuIGRybV9sZWdhY3lf cGNpX2luaXQoJmRyaXZlciwgJm1nYV9wY2lfZHJpdmVyKTsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIHZvaWQgX19leGl0IG1nYV9leGl0KHZvaWQpDQo+IC17DQo+IC0JZHJtX2xlZ2FjeV9w Y2lfZXhpdCgmZHJpdmVyLCAmbWdhX3BjaV9kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1tb2R1 bGVfaW5pdChtZ2FfaW5pdCk7DQo+IC1tb2R1bGVfZXhpdChtZ2FfZXhpdCk7DQo+IC0NCj4g LU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7DQo+IC1NT0RVTEVfREVTQ1JJUFRJT04o RFJJVkVSX0RFU0MpOw0KPiAtTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCBy aWdodHMiKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgNCj4gZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IGY2MTQwMWM3MGI5MC4uMDAwMDAwMDAwMDAwDQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEs Njg1ICswLDAgQEANCj4gLS8qIG1nYV9kcnYuaCAtLSBQcml2YXRlIGhlYWRlciBmb3IgdGhl IE1hdHJveCBHMjAwL0c0MDAgZHJpdmVyIC0qLSBsaW51eC1jIC0qLQ0KPiAtICogQ3JlYXRl ZDogTW9uIERlYyAxMyAwMTo1MDowMSAxOTk5IGJ5IGpoYXJ0bWFubkBwcmVjaXNpb25pbnNp Z2h0LmNvbQ0KPiAtICoNCj4gLSAqIENvcHlyaWdodCAxOTk5IFByZWNpc2lvbiBJbnNpZ2h0 LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4NCj4gLSAqIENvcHlyaWdodCAyMDAwIFZBIExp bnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4NCj4gLSAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gLSAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+IC0g KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KPiAtICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoNCj4gLSAqDQo+IC0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0DQo+IC0gKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlDQo+IC0gKiBTb2Z0d2FyZS4NCj4gLSAqDQo+IC0gKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUg0KPiAtICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+IC0gKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwNCj4gLSAqIFZBIExJTlVYIFNZU1RFTVMgQU5EL09SIElUUyBTVVBQ TElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1INCj4gLSAqIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLA0KPiAtICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQo+IC0gKiBPVEhFUiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuDQo+IC0gKg0KPiAtICogQXV0aG9yczoNCj4gLSAqICAgIEdh cmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4NCj4gLSAqLw0KPiAtDQo+IC0jaWZu ZGVmIF9fTUdBX0RSVl9IX18NCj4gLSNkZWZpbmUgX19NR0FfRFJWX0hfXw0KPiAtDQo+IC0j aW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvcGNpLmg+ DQo+IC0jaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL2Ry bV9kZXZpY2UuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4NCj4gLSNpbmNsdWRl IDxkcm0vZHJtX2lvY3RsLmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9sZWdhY3kuaD4NCj4g LSNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9zYXJl YS5oPg0KPiAtI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+DQo+IC0jaW5jbHVkZSA8ZHJt L21nYV9kcm0uaD4NCj4gLQ0KPiAtLyogR2VuZXJhbCBjdXN0b21pemF0aW9uOg0KPiAtICov DQo+IC0NCj4gLSNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIkdhcmV0aCBIdWdoZXMsIFZBIExp bnV4IFN5c3RlbXMgSW5jLiINCj4gLQ0KPiAtI2RlZmluZSBEUklWRVJfTkFNRQkJIm1nYSIN Cj4gLSNkZWZpbmUgRFJJVkVSX0RFU0MJCSJNYXRyb3ggRzIwMC9HNDAwIg0KPiAtI2RlZmlu ZSBEUklWRVJfREFURQkJIjIwMDUxMTAyIg0KPiAtDQo+IC0jZGVmaW5lIERSSVZFUl9NQUpP UgkJMw0KPiAtI2RlZmluZSBEUklWRVJfTUlOT1IJCTINCj4gLSNkZWZpbmUgRFJJVkVSX1BB VENITEVWRUwJMQ0KPiAtDQo+IC10eXBlZGVmIHN0cnVjdCBkcm1fbWdhX3ByaW1hcnlfYnVm ZmVyIHsNCj4gLQl1OCAqc3RhcnQ7DQo+IC0JdTggKmVuZDsNCj4gLQlpbnQgc2l6ZTsNCj4g LQ0KPiAtCXUzMiB0YWlsOw0KPiAtCWludCBzcGFjZTsNCj4gLQl2b2xhdGlsZSBsb25nIHdy YXBwZWQ7DQo+IC0NCj4gLQl2b2xhdGlsZSB1MzIgKnN0YXR1czsNCj4gLQ0KPiAtCXUzMiBs YXN0X2ZsdXNoOw0KPiAtCXUzMiBsYXN0X3dyYXA7DQo+IC0NCj4gLQl1MzIgaGlnaF9tYXJr Ow0KPiAtfSBkcm1fbWdhX3ByaW1hcnlfYnVmZmVyX3Q7DQo+IC0NCj4gLXR5cGVkZWYgc3Ry dWN0IGRybV9tZ2FfZnJlZWxpc3Qgew0KPiAtCXN0cnVjdCBkcm1fbWdhX2ZyZWVsaXN0ICpu ZXh0Ow0KPiAtCXN0cnVjdCBkcm1fbWdhX2ZyZWVsaXN0ICpwcmV2Ow0KPiAtCWRybV9tZ2Ff YWdlX3QgYWdlOw0KPiAtCXN0cnVjdCBkcm1fYnVmICpidWY7DQo+IC19IGRybV9tZ2FfZnJl ZWxpc3RfdDsNCj4gLQ0KPiAtdHlwZWRlZiBzdHJ1Y3Qgew0KPiAtCWRybV9tZ2FfZnJlZWxp c3RfdCAqbGlzdF9lbnRyeTsNCj4gLQlpbnQgZGlzY2FyZDsNCj4gLQlpbnQgZGlzcGF0Y2hl ZDsNCj4gLX0gZHJtX21nYV9idWZfcHJpdl90Ow0KPiAtDQo+IC10eXBlZGVmIHN0cnVjdCBk cm1fbWdhX3ByaXZhdGUgew0KPiAtCWRybV9tZ2FfcHJpbWFyeV9idWZmZXJfdCBwcmltOw0K PiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdjsNCj4gLQ0KPiAtCWRybV9tZ2FfZnJl ZWxpc3RfdCAqaGVhZDsNCj4gLQlkcm1fbWdhX2ZyZWVsaXN0X3QgKnRhaWw7DQo+IC0NCj4g LQl1bnNpZ25lZCBpbnQgd2FycF9waXBlOw0KPiAtCXVuc2lnbmVkIGxvbmcgd2FycF9waXBl X3BoeXNbTUdBX01BWF9XQVJQX1BJUEVTXTsNCj4gLQ0KPiAtCWludCBjaGlwc2V0Ow0KPiAt CWludCB1c2VjX3RpbWVvdXQ7DQo+IC0NCj4gLQkvKioNCj4gLQkgKiBJZiBzZXQsIHRoZSBu ZXcgRE1BIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdhcyB1c2VkLiAgVGhpcyBpcw0KPiAt CSAqIHByaW1hcmlsbHkgdXNlZCB0byBzZWxlY3QgaG93IHRoZSBkcml2ZXIgc2hvdWxkIHVu aW5pdGlhbGl6ZWQgaXRzDQo+IC0JICogaW50ZXJuYWwgRE1BIHN0cnVjdHVyZXMuDQo+IC0J ICovDQo+IC0JaW50IHVzZWRfbmV3X2RtYV9pbml0Ow0KPiAtDQo+IC0JLyoqDQo+IC0JICog SWYgQUdQIG1lbW9yeSBpcyB1c2VkIGZvciBETUEgYnVmZmVycywgdGhpcyB3aWxsIGJlIHRo ZSB2YWx1ZQ0KPiAtCSAqIFxjIE1HQV9QQUdQWEZFUi4gIE90aGVyd2lzZSwgaXQgd2lsbCBi ZSB6ZXJvIChmb3IgYSBQQ0kgdHJhbnNmZXIpLg0KPiAtCSAqLw0KPiAtCXUzMiBkbWFfYWNj ZXNzOw0KPiAtDQo+IC0JLyoqDQo+IC0JICogSWYgQUdQIG1lbW9yeSBpcyB1c2VkIGZvciBE TUEgYnVmZmVycywgdGhpcyB3aWxsIGJlIHRoZSB2YWx1ZQ0KPiAtCSAqIFxjIE1HQV9XQUdQ X0VOQUJMRS4gIE90aGVyd2lzZSwgaXQgd2lsbCBiZSB6ZXJvIChmb3IgYSBQQ0kNCj4gLQkg KiB0cmFuc2ZlcikuDQo+IC0JICovDQo+IC0JdTMyIHdhZ3BfZW5hYmxlOw0KPiAtDQo+IC0J LyoqDQo+IC0JICogXG5hbWUgTU1JTyByZWdpb24gcGFyYW1ldGVycy4NCj4gLQkgKg0KPiAt CSAqIFxzYSBkcm1fbWdhX3ByaXZhdGVfdDo6bW1pbw0KPiAtCSAqLw0KPiAtCS8qQHsgKi8N Cj4gLQlyZXNvdXJjZV9zaXplX3QgbW1pb19iYXNlOwkgICAvKio8IEJ1cyBhZGRyZXNzIG9m IGJhc2Ugb2YgTU1JTy4gKi8NCj4gLQlyZXNvdXJjZV9zaXplX3QgbW1pb19zaXplOwkgICAv Kio8IFNpemUgb2YgdGhlIE1NSU8gcmVnaW9uLiAqLw0KPiAtCS8qQH0gKi8NCj4gLQ0KPiAt CXUzMiBjbGVhcl9jbWQ7DQo+IC0JdTMyIG1hY2Nlc3M7DQo+IC0NCj4gLQlhdG9taWNfdCB2 YmxfcmVjZWl2ZWQ7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHZibGFua3MgcmVjZWl2ZWQu ICovDQo+IC0Jd2FpdF9xdWV1ZV9oZWFkX3QgZmVuY2VfcXVldWU7DQo+IC0JYXRvbWljX3Qg bGFzdF9mZW5jZV9yZXRpcmVkOw0KPiAtCXUzMiBuZXh0X2ZlbmNlX3RvX3Bvc3Q7DQo+IC0N Cj4gLQl1bnNpZ25lZCBpbnQgZmJfY3BwOw0KPiAtCXVuc2lnbmVkIGludCBmcm9udF9vZmZz ZXQ7DQo+IC0JdW5zaWduZWQgaW50IGZyb250X3BpdGNoOw0KPiAtCXVuc2lnbmVkIGludCBi YWNrX29mZnNldDsNCj4gLQl1bnNpZ25lZCBpbnQgYmFja19waXRjaDsNCj4gLQ0KPiAtCXVu c2lnbmVkIGludCBkZXB0aF9jcHA7DQo+IC0JdW5zaWduZWQgaW50IGRlcHRoX29mZnNldDsN Cj4gLQl1bnNpZ25lZCBpbnQgZGVwdGhfcGl0Y2g7DQo+IC0NCj4gLQl1bnNpZ25lZCBpbnQg dGV4dHVyZV9vZmZzZXQ7DQo+IC0JdW5zaWduZWQgaW50IHRleHR1cmVfc2l6ZTsNCj4gLQ0K PiAtCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7DQo+IC0JZHJtX2xvY2FsX21hcF90ICptbWlv Ow0KPiAtCWRybV9sb2NhbF9tYXBfdCAqc3RhdHVzOw0KPiAtCWRybV9sb2NhbF9tYXBfdCAq d2FycDsNCj4gLQlkcm1fbG9jYWxfbWFwX3QgKnByaW1hcnk7DQo+IC0JZHJtX2xvY2FsX21h cF90ICphZ3BfdGV4dHVyZXM7DQo+IC0NCj4gLQl1bnNpZ25lZCBsb25nIGFncF9oYW5kbGU7 DQo+IC0JdW5zaWduZWQgaW50IGFncF9zaXplOw0KPiAtfSBkcm1fbWdhX3ByaXZhdGVfdDsN Cj4gLQ0KPiAtZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBtZ2FfaW9jdGxz W107DQo+IC1leHRlcm4gaW50IG1nYV9tYXhfaW9jdGw7DQo+IC0NCj4gLQkJCQkvKiBtZ2Ff ZG1hLmMgKi8NCj4gLWV4dGVybiBpbnQgbWdhX2RtYV9ib290c3RyYXAoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJCSAgICAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpOw0KPiAtZXh0ZXJuIGludCBtZ2FfZG1hX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KTsNCj4gLWV4dGVybiBpbnQgbWdhX2dldHBhcmFtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsDQo+IC0JCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC1l eHRlcm4gaW50IG1nYV9kbWFfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwNCj4gLQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4g aW50IG1nYV9kbWFfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwN Cj4gLQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4gaW50IG1n YV9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLA0KPiAt CQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOw0KPiAtZXh0ZXJuIGludCBtZ2Ff ZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFn cyk7DQo+IC1leHRlcm4gdm9pZCBtZ2FfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsNCj4gLWV4dGVybiB2b2lkIG1nYV9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOw0KPiAtZXh0ZXJuIGludCBtZ2FfZHJpdmVyX2RtYV9xdWllc2Nl bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7DQo+IC0NCj4gLWV4dGVybiBpbnQgbWdhX2Rv X3dhaXRfZm9yX2lkbGUoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KTsNCj4gLQ0KPiAt ZXh0ZXJuIHZvaWQgbWdhX2RvX2RtYV9mbHVzaChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3By aXYpOw0KPiAtZXh0ZXJuIHZvaWQgbWdhX2RvX2RtYV93cmFwX3N0YXJ0KGRybV9tZ2FfcHJp dmF0ZV90ICpkZXZfcHJpdik7DQo+IC1leHRlcm4gdm9pZCBtZ2FfZG9fZG1hX3dyYXBfZW5k KGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdik7DQo+IC0NCj4gLWV4dGVybiBpbnQgbWdh X2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1ZiAq YnVmKTsNCj4gLQ0KPiAtCQkJCS8qIG1nYV93YXJwLmMgKi8NCj4gLWV4dGVybiBpbnQgbWdh X3dhcnBfaW5zdGFsbF9taWNyb2NvZGUoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KTsN Cj4gLWV4dGVybiBpbnQgbWdhX3dhcnBfaW5pdChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3By aXYpOw0KPiAtDQo+IC0JCQkJLyogbWdhX2lycS5jICovDQo+IC1leHRlcm4gaW50IG1nYV9l bmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBl KTsNCj4gLWV4dGVybiB2b2lkIG1nYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSk7DQo+IC1leHRlcm4gdTMyIG1nYV9nZXRfdmJs YW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUp Ow0KPiAtZXh0ZXJuIHZvaWQgbWdhX2RyaXZlcl9mZW5jZV93YWl0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOw0KPiAtZXh0ZXJuIGludCBtZ2Ff ZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGlu dCAqc2VxdWVuY2UpOw0KPiAtZXh0ZXJuIGlycXJldHVybl90IG1nYV9kcml2ZXJfaXJxX2hh bmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKTsNCj4gLWV4dGVybiB2b2lkIG1nYV9kcml2ZXJf aXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7DQo+IC1leHRlcm4gaW50 IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOw0K PiAtZXh0ZXJuIHZvaWQgbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOw0KPiAtZXh0ZXJuIGxvbmcgbWdhX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmls ZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwNCj4gLQkJCSAgICAgdW5zaWduZWQgbG9uZyBh cmcpOw0KPiAtDQo+IC0jZGVmaW5lIG1nYV9mbHVzaF93cml0ZV9jb21iaW5lKCkJd21iKCkN Cj4gLQ0KPiAtI2RlZmluZSBNR0FfUkVBRDgocmVnKSBcDQo+IC0JcmVhZGIoKCh2b2lkIF9f aW9tZW0gKilkZXZfcHJpdi0+bW1pby0+aGFuZGxlKSArIChyZWcpKQ0KPiAtI2RlZmluZSBN R0FfUkVBRChyZWcpIFwNCj4gLQlyZWFkbCgoKHZvaWQgX19pb21lbSAqKWRldl9wcml2LT5t bWlvLT5oYW5kbGUpICsgKHJlZykpDQo+IC0jZGVmaW5lIE1HQV9XUklURTgocmVnLCB2YWwp IFwNCj4gLQl3cml0ZWIodmFsLCAoKHZvaWQgX19pb21lbSAqKWRldl9wcml2LT5tbWlvLT5o YW5kbGUpICsgKHJlZykpDQo+IC0jZGVmaW5lIE1HQV9XUklURShyZWcsIHZhbCkgXA0KPiAt CXdyaXRlbCh2YWwsICgodm9pZCBfX2lvbWVtICopZGV2X3ByaXYtPm1taW8tPmhhbmRsZSkg KyAocmVnKSkNCj4gLQ0KPiAtI2RlZmluZSBEV0dSRUcwCQkweDFjMDANCj4gLSNkZWZpbmUg RFdHUkVHMF9FTkQJMHgxZGZmDQo+IC0jZGVmaW5lIERXR1JFRzEJCTB4MmMwMA0KPiAtI2Rl ZmluZSBEV0dSRUcxX0VORAkweDJkZmYNCj4gLQ0KPiAtI2RlZmluZSBJU1JFRzAocikJKHIg Pj0gRFdHUkVHMCAmJiByIDw9IERXR1JFRzBfRU5EKQ0KPiAtI2RlZmluZSBETUFSRUcwKHIp CSh1OCkoKHIgLSBEV0dSRUcwKSA+PiAyKQ0KPiAtI2RlZmluZSBETUFSRUcxKHIpCSh1OCko KChyIC0gRFdHUkVHMSkgPj4gMikgfCAweDgwKQ0KPiAtI2RlZmluZSBETUFSRUcocikJKElT UkVHMChyKSA/IERNQVJFRzAocikgOiBETUFSRUcxKHIpKQ0KPiAtDQo+IC0vKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQo+IC0gKiBIZWxwZXIgbWFjcm9zcy4uLg0KPiAtICovDQo+IC0NCj4gLSNkZWZpbmUg TUdBX0VNSVRfU1RBVEUoZGV2X3ByaXYsIGRpcnR5KQkJCQkJXA0KPiAtZG8gewkJCQkJCQkJ CVwNCj4gLQlpZiAoKGRpcnR5KSAmIH5NR0FfVVBMT0FEX0NMSVBSRUNUUykgewkJCQlcDQo+ IC0JCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSBNR0FfQ0FSRF9UWVBFX0c0MDApCQlcDQo+ IC0JCQltZ2FfZzQwMF9lbWl0X3N0YXRlKGRldl9wcml2KTsJCQlcDQo+IC0JCWVsc2UJCQkJ CQkJXA0KPiAtCQkJbWdhX2cyMDBfZW1pdF9zdGF0ZShkZXZfcHJpdik7CQkJXA0KPiAtCX0J CQkJCQkJCVwNCj4gLX0gd2hpbGUgKDApDQo+IC0NCj4gLSNkZWZpbmUgV1JBUF9URVNUX1dJ VEhfUkVUVVJOKGRldl9wcml2KQkJCQkJXA0KPiAtZG8gewkJCQkJCQkJCVwNCj4gLQlpZiAo dGVzdF9iaXQoMCwgJmRldl9wcml2LT5wcmltLndyYXBwZWQpKSB7CQkJXA0KPiAtCQlpZiAo bWdhX2lzX2lkbGUoZGV2X3ByaXYpKSB7CQkJCVwNCj4gLQkJCW1nYV9kb19kbWFfd3JhcF9l bmQoZGV2X3ByaXYpOwkJCVwNCj4gLQkJfSBlbHNlIGlmIChkZXZfcHJpdi0+cHJpbS5zcGFj ZSA8CQkJXA0KPiAtCQkJICAgZGV2X3ByaXYtPnByaW0uaGlnaF9tYXJrKSB7CQkJXA0KPiAt CQkJaWYgKE1HQV9ETUFfREVCVUcpCQkJCVwNCj4gLQkJCQlEUk1fSU5GTygid3JhcC4uLlxu Iik7CQkJXA0KPiAtCQkJcmV0dXJuIC1FQlVTWTsJCQkJCVwNCj4gLQkJfQkJCQkJCQlcDQo+ IC0JfQkJCQkJCQkJXA0KPiAtfSB3aGlsZSAoMCkNCj4gLQ0KPiAtI2RlZmluZSBXUkFQX1dB SVRfV0lUSF9SRVRVUk4oZGV2X3ByaXYpCQkJCQlcDQo+IC1kbyB7CQkJCQkJCQkJXA0KPiAt CWlmICh0ZXN0X2JpdCgwLCAmZGV2X3ByaXYtPnByaW0ud3JhcHBlZCkpIHsJCQlcDQo+IC0J CWlmIChtZ2FfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdikgPCAwKSB7CQlcDQo+IC0JCQlp ZiAoTUdBX0RNQV9ERUJVRykJCQkJXA0KPiAtCQkJCURSTV9JTkZPKCJ3cmFwLi4uXG4iKTsJ CQlcDQo+IC0JCQlyZXR1cm4gLUVCVVNZOwkJCQkJXA0KPiAtCQl9CQkJCQkJCVwNCj4gLQkJ bWdhX2RvX2RtYV93cmFwX2VuZChkZXZfcHJpdik7CQkJCVwNCj4gLQl9CQkJCQkJCQlcDQo+ IC19IHdoaWxlICgwKQ0KPiAtDQo+IC0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0gKiBQcmltYXJ5IERN QSBjb21tYW5kIHN0cmVhbQ0KPiAtICovDQo+IC0NCj4gLSNkZWZpbmUgTUdBX1ZFUkJPU0UJ MA0KPiAtDQo+IC0jZGVmaW5lIERNQV9MT0NBTFMJdW5zaWduZWQgaW50IHdyaXRlOyB2b2xh dGlsZSB1OCAqcHJpbTsNCj4gLQ0KPiAtI2RlZmluZSBETUFfQkxPQ0tfU0laRQkoNSAqIHNp emVvZih1MzIpKQ0KPiAtDQo+IC0jZGVmaW5lIEJFR0lOX0RNQShuKQkJCQkJCQlcDQo+IC1k byB7CQkJCQkJCQkJXA0KPiAtCWlmIChNR0FfVkVSQk9TRSkgewkJCQkJCVwNCj4gLQkJRFJN X0lORk8oIkJFR0lOX0RNQSglZClcbiIsIChuKSk7CQkJXA0KPiAtCQlEUk1fSU5GTygiICAg c3BhY2U9MHgleCByZXE9MHglenhcbiIsCQkJXA0KPiAtCQkJIGRldl9wcml2LT5wcmltLnNw YWNlLCAobikgKiBETUFfQkxPQ0tfU0laRSk7CVwNCj4gLQl9CQkJCQkJCQlcDQo+IC0JcHJp bSA9IGRldl9wcml2LT5wcmltLnN0YXJ0OwkJCQkJXA0KPiAtCXdyaXRlID0gZGV2X3ByaXYt PnByaW0udGFpbDsJCQkJCVwNCj4gLX0gd2hpbGUgKDApDQo+IC0NCj4gLSNkZWZpbmUgQkVH SU5fRE1BX1dSQVAoKQkJCQkJCVwNCj4gLWRvIHsJCQkJCQkJCQlcDQo+IC0JaWYgKE1HQV9W RVJCT1NFKSB7CQkJCQkJXA0KPiAtCQlEUk1fSU5GTygiQkVHSU5fRE1BKClcbiIpOwkJCQlc DQo+IC0JCURSTV9JTkZPKCIgICBzcGFjZT0weCV4XG4iLCBkZXZfcHJpdi0+cHJpbS5zcGFj ZSk7CVwNCj4gLQl9CQkJCQkJCQlcDQo+IC0JcHJpbSA9IGRldl9wcml2LT5wcmltLnN0YXJ0 OwkJCQkJXA0KPiAtCXdyaXRlID0gZGV2X3ByaXYtPnByaW0udGFpbDsJCQkJCVwNCj4gLX0g d2hpbGUgKDApDQo+IC0NCj4gLSNkZWZpbmUgQURWQU5DRV9ETUEoKQkJCQkJCQlcDQo+IC1k byB7CQkJCQkJCQkJXA0KPiAtCWRldl9wcml2LT5wcmltLnRhaWwgPSB3cml0ZTsJCQkJCVwN Cj4gLQlpZiAoTUdBX1ZFUkJPU0UpCQkJCQkJXA0KPiAtCQlEUk1fSU5GTygiQURWQU5DRV9E TUEoKSB0YWlsPTB4JTA1eCBzcD0weCV4XG4iLAkJXA0KPiAtCQkJIHdyaXRlLCBkZXZfcHJp di0+cHJpbS5zcGFjZSk7CQkJXA0KPiAtfSB3aGlsZSAoMCkNCj4gLQ0KPiAtI2RlZmluZSBG TFVTSF9ETUEoKQkJCQkJCQlcDQo+IC1kbyB7CQkJCQkJCQkJXA0KPiAtCWlmICgwKSB7CQkJ CQkJCVwNCj4gLQkJRFJNX0lORk8oIlxuIik7CQkJCQkJXA0KPiAtCQlEUk1fSU5GTygiICAg dGFpbD0weCUwNnggaGVhZD0weCUwNmx4XG4iLAkJXA0KPiAtCQkJIGRldl9wcml2LT5wcmlt LnRhaWwsCQkJCVwNCj4gLQkJCSAodW5zaWduZWQgbG9uZykoTUdBX1JFQUQoTUdBX1BSSU1B RERSRVNTKSAtCVwNCj4gLQkJCQkJIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpKTsJXA0K PiAtCX0JCQkJCQkJCVwNCj4gLQlpZiAoIXRlc3RfYml0KDAsICZkZXZfcHJpdi0+cHJpbS53 cmFwcGVkKSkgewkJCVwNCj4gLQkJaWYgKGRldl9wcml2LT5wcmltLnNwYWNlIDwgZGV2X3By aXYtPnByaW0uaGlnaF9tYXJrKQlcDQo+IC0JCQltZ2FfZG9fZG1hX3dyYXBfc3RhcnQoZGV2 X3ByaXYpOwkJXA0KPiAtCQllbHNlCQkJCQkJCVwNCj4gLQkJCW1nYV9kb19kbWFfZmx1c2go ZGV2X3ByaXYpOwkJCVwNCj4gLQl9CQkJCQkJCQlcDQo+IC19IHdoaWxlICgwKQ0KPiAtDQo+ IC0vKiBOZXZlciB1c2UgdGhpcywgYWx3YXlzIHVzZSBETUFfQkxPQ0soLi4uKSBmb3IgcHJp bWFyeSBETUEgb3V0cHV0Lg0KPiAtICovDQo+IC0jZGVmaW5lIERNQV9XUklURShvZmZzZXQs IHZhbCkJCQkJCQlcDQo+IC1kbyB7CQkJCQkJCQkJXA0KPiAtCWlmIChNR0FfVkVSQk9TRSkJ CQkJCQlcDQo+IC0JCURSTV9JTkZPKCIgICBETUFfV1JJVEUoIDB4JTA4eCApIGF0IDB4JTA0 enhcbiIsCQlcDQo+IC0JCQkgKHUzMikodmFsKSwgd3JpdGUgKyAob2Zmc2V0KSAqIHNpemVv Zih1MzIpKTsJXA0KPiAtCSoodm9sYXRpbGUgdTMyICopKHByaW0gKyB3cml0ZSArIChvZmZz ZXQpICogc2l6ZW9mKHUzMikpID0gdmFsOwlcDQo+IC19IHdoaWxlICgwKQ0KPiAtDQo+IC0j ZGVmaW5lIERNQV9CTE9DSyhyZWcwLCB2YWwwLCByZWcxLCB2YWwxLCByZWcyLCB2YWwyLCBy ZWczLCB2YWwzKQlcDQo+IC1kbyB7CQkJCQkJCQkJXA0KPiAtCURNQV9XUklURSgwLCAoKERN QVJFRyhyZWcwKSA8PCAwKSB8CQkJCVwNCj4gLQkJICAgICAgKERNQVJFRyhyZWcxKSA8PCA4 KSB8CQkJCVwNCj4gLQkJICAgICAgKERNQVJFRyhyZWcyKSA8PCAxNikgfAkJCQlcDQo+IC0J CSAgICAgIChETUFSRUcocmVnMykgPDwgMjQpKSk7CQkJCVwNCj4gLQlETUFfV1JJVEUoMSwg dmFsMCk7CQkJCQkJXA0KPiAtCURNQV9XUklURSgyLCB2YWwxKTsJCQkJCQlcDQo+IC0JRE1B X1dSSVRFKDMsIHZhbDIpOwkJCQkJCVwNCj4gLQlETUFfV1JJVEUoNCwgdmFsMyk7CQkJCQkJ XA0KPiAtCXdyaXRlICs9IERNQV9CTE9DS19TSVpFOwkJCQkJXA0KPiAtfSB3aGlsZSAoMCkN Cj4gLQ0KPiAtLyogQnVmZmVyIGFnaW5nIHZpYSBwcmltYXJ5IERNQSBzdHJlYW0gaGVhZCBw b2ludGVyLg0KPiAtICovDQo+IC0NCj4gLSNkZWZpbmUgU0VUX0FHRShhZ2UsIGgsIHcpCQkJ CQkJXA0KPiAtZG8gewkJCQkJCQkJCVwNCj4gLQkoYWdlKS0+aGVhZCA9IGg7CQkJCQkJXA0K PiAtCShhZ2UpLT53cmFwID0gdzsJCQkJCQlcDQo+IC19IHdoaWxlICgwKQ0KPiAtDQo+IC0j ZGVmaW5lIFRFU1RfQUdFKGFnZSwgaCwgdykJCSgoYWdlKS0+d3JhcCA8IHcgfHwJCVwNCj4g LQkJCQkJICgoYWdlKS0+d3JhcCA9PSB3ICYmCQlcDQo+IC0JCQkJCSAgKGFnZSktPmhlYWQg PCBoKSkNCj4gLQ0KPiAtI2RlZmluZSBBR0VfQlVGRkVSKGJ1Zl9wcml2KQkJCQkJCVwNCj4g LWRvIHsJCQkJCQkJCQlcDQo+IC0JZHJtX21nYV9mcmVlbGlzdF90ICplbnRyeSA9IChidWZf cHJpdiktPmxpc3RfZW50cnk7CQlcDQo+IC0JaWYgKChidWZfcHJpdiktPmRpc3BhdGNoZWQp IHsJCQkJCVwNCj4gLQkJZW50cnktPmFnZS5oZWFkID0gKGRldl9wcml2LT5wcmltLnRhaWwg KwkJXA0KPiAtCQkJCSAgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOwkJXA0KPiAtCQll bnRyeS0+YWdlLndyYXAgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF93cmFwOwlcDQo+ IC0JfSBlbHNlIHsJCQkJCQkJXA0KPiAtCQllbnRyeS0+YWdlLmhlYWQgPSAwOwkJCQkJXA0K PiAtCQllbnRyeS0+YWdlLndyYXAgPSAwOwkJCQkJXA0KPiAtCX0JCQkJCQkJCVwNCj4gLX0g d2hpbGUgKDApDQo+IC0NCj4gLSNkZWZpbmUgTUdBX0VOR0lORV9JRExFX01BU0sJCShNR0Ff U09GVFJBUEVOIHwJCVwNCj4gLQkJCQkJIE1HQV9EV0dFTkdTVFMgfAkJXA0KPiAtCQkJCQkg TUdBX0VORFBSRE1BU1RTKQ0KPiAtI2RlZmluZSBNR0FfRE1BX0lETEVfTUFTSwkJKE1HQV9T T0ZUUkFQRU4gfAkJXA0KPiAtCQkJCQkgTUdBX0VORFBSRE1BU1RTKQ0KPiAtDQo+IC0jZGVm aW5lIE1HQV9ETUFfREVCVUcJCQkwDQo+IC0NCj4gLS8qIEEgcmVkdWNlZCBzZXQgb2YgdGhl IG1nYSByZWdpc3RlcnMuDQo+IC0gKi8NCj4gLSNkZWZpbmUgTUdBX0NSVENfSU5ERVgJCQkw eDFmZDQNCj4gLSNkZWZpbmUgTUdBX0NSVENfREFUQQkJCTB4MWZkNQ0KPiAtDQo+IC0vKiBD UlRDMTEgKi8NCj4gLSNkZWZpbmUgTUdBX1ZJTlRDTFIJCQkoMSA8PCA0KQ0KPiAtI2RlZmlu ZSBNR0FfVklOVEVOCQkJKDEgPDwgNSkNCj4gLQ0KPiAtI2RlZmluZSBNR0FfQUxQSEFDVFJM CQkJMHgyYzdjDQo+IC0jZGVmaW5lIE1HQV9BUjAJCQkJMHgxYzYwDQo+IC0jZGVmaW5lIE1H QV9BUjEJCQkJMHgxYzY0DQo+IC0jZGVmaW5lIE1HQV9BUjIJCQkJMHgxYzY4DQo+IC0jZGVm aW5lIE1HQV9BUjMJCQkJMHgxYzZjDQo+IC0jZGVmaW5lIE1HQV9BUjQJCQkJMHgxYzcwDQo+ IC0jZGVmaW5lIE1HQV9BUjUJCQkJMHgxYzc0DQo+IC0jZGVmaW5lIE1HQV9BUjYJCQkJMHgx Yzc4DQo+IC0NCj4gLSNkZWZpbmUgTUdBX0NYQk5EUlkJCQkweDFjODANCj4gLSNkZWZpbmUg TUdBX0NYTEVGVAkJCTB4MWNhMA0KPiAtI2RlZmluZSBNR0FfQ1hSSUdIVAkJCTB4MWNhNA0K PiAtDQo+IC0jZGVmaW5lIE1HQV9ETUFQQUQJCQkweDFjNTQNCj4gLSNkZWZpbmUgTUdBX0RT VE9SRwkJCTB4MmNiOA0KPiAtI2RlZmluZSBNR0FfRFdHQ1RMCQkJMHgxYzAwDQo+IC0jCWRl ZmluZSBNR0FfT1BDT0RfTUFTSwkJCSgxNSA8PCAwKQ0KPiAtIwlkZWZpbmUgTUdBX09QQ09E X1RSQVAJCQkoNCA8PCAwKQ0KPiAtIwlkZWZpbmUgTUdBX09QQ09EX1RFWFRVUkVfVFJBUAkJ KDYgPDwgMCkNCj4gLSMJZGVmaW5lIE1HQV9PUENPRF9CSVRCTFQJCQkoOCA8PCAwKQ0KPiAt IwlkZWZpbmUgTUdBX09QQ09EX0lMT0FECQkJKDkgPDwgMCkNCj4gLSMJZGVmaW5lIE1HQV9B VFlQRV9NQVNLCQkJKDcgPDwgNCkNCj4gLSMJZGVmaW5lIE1HQV9BVFlQRV9SUEwJCQkoMCA8 PCA0KQ0KPiAtIwlkZWZpbmUgTUdBX0FUWVBFX1JTVFIJCQkoMSA8PCA0KQ0KPiAtIwlkZWZp bmUgTUdBX0FUWVBFX1pJCQkJKDMgPDwgNCkNCj4gLSMJZGVmaW5lIE1HQV9BVFlQRV9CTEsJ CQkoNCA8PCA0KQ0KPiAtIwlkZWZpbmUgTUdBX0FUWVBFX0kJCQkoNyA8PCA0KQ0KPiAtIwlk ZWZpbmUgTUdBX0xJTkVBUgkJCSgxIDw8IDcpDQo+IC0jCWRlZmluZSBNR0FfWk1PREVfTUFT SwkJCSg3IDw8IDgpDQo+IC0jCWRlZmluZSBNR0FfWk1PREVfTk9aQ01QCQkJKDAgPDwgOCkN Cj4gLSMJZGVmaW5lIE1HQV9aTU9ERV9aRQkJCSgyIDw8IDgpDQo+IC0jCWRlZmluZSBNR0Ff Wk1PREVfWk5FCQkJKDMgPDwgOCkNCj4gLSMJZGVmaW5lIE1HQV9aTU9ERV9aTFQJCQkoNCA8 PCA4KQ0KPiAtIwlkZWZpbmUgTUdBX1pNT0RFX1pMVEUJCQkoNSA8PCA4KQ0KPiAtIwlkZWZp bmUgTUdBX1pNT0RFX1pHVAkJCSg2IDw8IDgpDQo+IC0jCWRlZmluZSBNR0FfWk1PREVfWkdU RQkJCSg3IDw8IDgpDQo+IC0jCWRlZmluZSBNR0FfU09MSUQJCQkoMSA8PCAxMSkNCj4gLSMJ ZGVmaW5lIE1HQV9BUlpFUk8JCQkoMSA8PCAxMikNCj4gLSMJZGVmaW5lIE1HQV9TR05aRVJP CQkJKDEgPDwgMTMpDQo+IC0jCWRlZmluZSBNR0FfU0hJRlRaRVJPCQkJKDEgPDwgMTQpDQo+ IC0jCWRlZmluZSBNR0FfQk9QX01BU0sJCQkoMTUgPDwgMTYpDQo+IC0jCWRlZmluZSBNR0Ff Qk9QX1pFUk8JCQkoMCA8PCAxNikNCj4gLSMJZGVmaW5lIE1HQV9CT1BfRFNUCQkJKDEwIDw8 IDE2KQ0KPiAtIwlkZWZpbmUgTUdBX0JPUF9TUkMJCQkoMTIgPDwgMTYpDQo+IC0jCWRlZmlu ZSBNR0FfQk9QX09ORQkJCSgxNSA8PCAxNikNCj4gLSMJZGVmaW5lIE1HQV9UUkFOU19TSElG VAkJCTIwDQo+IC0jCWRlZmluZSBNR0FfVFJBTlNfTUFTSwkJCSgxNSA8PCAyMCkNCj4gLSMJ ZGVmaW5lIE1HQV9CTFRNT0RfTUFTSwkJCSgxNSA8PCAyNSkNCj4gLSMJZGVmaW5lIE1HQV9C TFRNT0RfQk1PTk9MRUYJCSgwIDw8IDI1KQ0KPiAtIwlkZWZpbmUgTUdBX0JMVE1PRF9CTU9O T1dGCQkoNCA8PCAyNSkNCj4gLSMJZGVmaW5lIE1HQV9CTFRNT0RfUExBTgkJCSgxIDw8IDI1 KQ0KPiAtIwlkZWZpbmUgTUdBX0JMVE1PRF9CRkNPTAkJCSgyIDw8IDI1KQ0KPiAtIwlkZWZp bmUgTUdBX0JMVE1PRF9CVTMyQkdSCQkoMyA8PCAyNSkNCj4gLSMJZGVmaW5lIE1HQV9CTFRN T0RfQlUzMlJHQgkJKDcgPDwgMjUpDQo+IC0jCWRlZmluZSBNR0FfQkxUTU9EX0JVMjRCR1IJ CSgxMSA8PCAyNSkNCj4gLSMJZGVmaW5lIE1HQV9CTFRNT0RfQlUyNFJHQgkJKDE1IDw8IDI1 KQ0KPiAtIwlkZWZpbmUgTUdBX1BBVFRFUk4JCQkoMSA8PCAyOSkNCj4gLSMJZGVmaW5lIE1H QV9UUkFOU0MJCQkoMSA8PCAzMCkNCj4gLSMJZGVmaW5lIE1HQV9DTElQRElTCQkJKDEgPDwg MzEpDQo+IC0jZGVmaW5lIE1HQV9EV0dTWU5DCQkJMHgyYzRjDQo+IC0NCj4gLSNkZWZpbmUg TUdBX0ZDT0wJCQkweDFjMjQNCj4gLSNkZWZpbmUgTUdBX0ZJRk9TVEFUVVMJCQkweDFlMTAN Cj4gLSNkZWZpbmUgTUdBX0ZPR0NPTAkJCTB4MWNmNA0KPiAtI2RlZmluZSBNR0FfRlhCTkRS WQkJCTB4MWM4NA0KPiAtI2RlZmluZSBNR0FfRlhMRUZUCQkJMHgxY2E4DQo+IC0jZGVmaW5l IE1HQV9GWFJJR0hUCQkJMHgxY2FjDQo+IC0NCj4gLSNkZWZpbmUgTUdBX0lDTEVBUgkJCTB4 MWUxOA0KPiAtIwlkZWZpbmUgTUdBX1NPRlRSQVBJQ0xSCQkJKDEgPDwgMCkNCj4gLSMJZGVm aW5lIE1HQV9WTElORUlDTFIJCQkoMSA8PCA1KQ0KPiAtI2RlZmluZSBNR0FfSUVOCQkJCTB4 MWUxYw0KPiAtIwlkZWZpbmUgTUdBX1NPRlRSQVBJRU4JCQkoMSA8PCAwKQ0KPiAtIwlkZWZp bmUgTUdBX1ZMSU5FSUVOCQkJKDEgPDwgNSkNCj4gLQ0KPiAtI2RlZmluZSBNR0FfTEVOCQkJ CTB4MWM1Yw0KPiAtDQo+IC0jZGVmaW5lIE1HQV9NQUNDRVNTCQkJMHgxYzA0DQo+IC0NCj4g LSNkZWZpbmUgTUdBX1BJVENICQkJMHgxYzhjDQo+IC0jZGVmaW5lIE1HQV9QTE5XVAkJCTB4 MWMxYw0KPiAtI2RlZmluZSBNR0FfUFJJTUFERFJFU1MJCQkweDFlNTgNCj4gLSMJZGVmaW5l IE1HQV9ETUFfR0VORVJBTAkJCSgwIDw8IDApDQo+IC0jCWRlZmluZSBNR0FfRE1BX0JMSVQJ CQkoMSA8PCAwKQ0KPiAtIwlkZWZpbmUgTUdBX0RNQV9WRUNUT1IJCQkoMiA8PCAwKQ0KPiAt IwlkZWZpbmUgTUdBX0RNQV9WRVJURVgJCQkoMyA8PCAwKQ0KPiAtI2RlZmluZSBNR0FfUFJJ TUVORAkJCTB4MWU1Yw0KPiAtIwlkZWZpbmUgTUdBX1BSSU1OT1NUQVJUCQkJKDEgPDwgMCkN Cj4gLSMJZGVmaW5lIE1HQV9QQUdQWEZFUgkJCSgxIDw8IDEpDQo+IC0jZGVmaW5lIE1HQV9Q UklNUFRSCQkJMHgxZTUwDQo+IC0jCWRlZmluZSBNR0FfUFJJTVBUUkVOMAkJCSgxIDw8IDAp DQo+IC0jCWRlZmluZSBNR0FfUFJJTVBUUkVOMQkJCSgxIDw8IDEpDQo+IC0NCj4gLSNkZWZp bmUgTUdBX1JTVAkJCQkweDFlNDANCj4gLSMJZGVmaW5lIE1HQV9TT0ZUUkVTRVQJCQkoMSA8 PCAwKQ0KPiAtIwlkZWZpbmUgTUdBX1NPRlRFWFRSU1QJCQkoMSA8PCAxKQ0KPiAtDQo+IC0j ZGVmaW5lIE1HQV9TRUNBRERSRVNTCQkJMHgyYzQwDQo+IC0jZGVmaW5lIE1HQV9TRUNFTkQJ CQkweDJjNDQNCj4gLSNkZWZpbmUgTUdBX1NFVFVQQUREUkVTUwkJMHgyY2QwDQo+IC0jZGVm aW5lIE1HQV9TRVRVUEVORAkJCTB4MmNkNA0KPiAtI2RlZmluZSBNR0FfU0dOCQkJCTB4MWM1 OA0KPiAtI2RlZmluZSBNR0FfU09GVFJBUAkJCTB4MmM0OA0KPiAtI2RlZmluZSBNR0FfU1JD T1JHCQkJMHgyY2I0DQo+IC0jCWRlZmluZSBNR0FfU1JNTUFQX01BU0sJCQkoMSA8PCAwKQ0K PiAtIwlkZWZpbmUgTUdBX1NSQ01BUF9GQgkJCSgwIDw8IDApDQo+IC0jCWRlZmluZSBNR0Ff U1JDTUFQX1NZU01FTQkJKDEgPDwgMCkNCj4gLSMJZGVmaW5lIE1HQV9TUkNBQ0NfTUFTSwkJ CSgxIDw8IDEpDQo+IC0jCWRlZmluZSBNR0FfU1JDQUNDX1BDSQkJCSgwIDw8IDEpDQo+IC0j CWRlZmluZSBNR0FfU1JDQUNDX0FHUAkJCSgxIDw8IDEpDQo+IC0jZGVmaW5lIE1HQV9TVEFU VVMJCQkweDFlMTQNCj4gLSMJZGVmaW5lIE1HQV9TT0ZUUkFQRU4JCQkoMSA8PCAwKQ0KPiAt IwlkZWZpbmUgTUdBX1ZTWU5DUEVOCQkJKDEgPDwgNCkNCj4gLSMJZGVmaW5lIE1HQV9WTElO RVBFTgkJCSgxIDw8IDUpDQo+IC0jCWRlZmluZSBNR0FfRFdHRU5HU1RTCQkJKDEgPDwgMTYp DQo+IC0jCWRlZmluZSBNR0FfRU5EUFJETUFTVFMJCQkoMSA8PCAxNykNCj4gLSNkZWZpbmUg TUdBX1NURU5DSUwJCQkweDJjYzgNCj4gLSNkZWZpbmUgTUdBX1NURU5DSUxDVEwJCQkweDJj Y2MNCj4gLQ0KPiAtI2RlZmluZSBNR0FfVERVQUxTVEFHRTAJCQkweDJjZjgNCj4gLSNkZWZp bmUgTUdBX1REVUFMU1RBR0UxCQkJMHgyY2ZjDQo+IC0jZGVmaW5lIE1HQV9URVhCT1JERVJD T0wJCTB4MmM1Yw0KPiAtI2RlZmluZSBNR0FfVEVYQ1RMCQkJMHgyYzMwDQo+IC0jZGVmaW5l IE1HQV9URVhDVEwyCQkJMHgyYzNjDQo+IC0jCWRlZmluZSBNR0FfRFVBTFRFWAkJCSgxIDw8 IDcpDQo+IC0jCWRlZmluZSBNR0FfRzQwMF9UQzJfTUFHSUMJCSgxIDw8IDE1KQ0KPiAtIwlk ZWZpbmUgTUdBX01BUDFfRU5BQkxFCQkJKDEgPDwgMzEpDQo+IC0jZGVmaW5lIE1HQV9URVhG SUxURVIJCQkweDJjNTgNCj4gLSNkZWZpbmUgTUdBX1RFWEhFSUdIVAkJCTB4MmMyYw0KPiAt I2RlZmluZSBNR0FfVEVYT1JHCQkJMHgyYzI0DQo+IC0jCWRlZmluZSBNR0FfVEVYT1JHTUFQ X01BU0sJCSgxIDw8IDApDQo+IC0jCWRlZmluZSBNR0FfVEVYT1JHTUFQX0ZCCQkJKDAgPDwg MCkNCj4gLSMJZGVmaW5lIE1HQV9URVhPUkdNQVBfU1lTTUVNCQkoMSA8PCAwKQ0KPiAtIwlk ZWZpbmUgTUdBX1RFWE9SR0FDQ19NQVNLCQkoMSA8PCAxKQ0KPiAtIwlkZWZpbmUgTUdBX1RF WE9SR0FDQ19QQ0kJCSgwIDw8IDEpDQo+IC0jCWRlZmluZSBNR0FfVEVYT1JHQUNDX0FHUAkJ KDEgPDwgMSkNCj4gLSNkZWZpbmUgTUdBX1RFWE9SRzEJCQkweDJjYTQNCj4gLSNkZWZpbmUg TUdBX1RFWE9SRzIJCQkweDJjYTgNCj4gLSNkZWZpbmUgTUdBX1RFWE9SRzMJCQkweDJjYWMN Cj4gLSNkZWZpbmUgTUdBX1RFWE9SRzQJCQkweDJjYjANCj4gLSNkZWZpbmUgTUdBX1RFWFRS QU5TCQkJMHgyYzM0DQo+IC0jZGVmaW5lIE1HQV9URVhUUkFOU0hJR0gJCTB4MmMzOA0KPiAt I2RlZmluZSBNR0FfVEVYV0lEVEgJCQkweDJjMjgNCj4gLQ0KPiAtI2RlZmluZSBNR0FfV0FD Q0VQVFNFUQkJCTB4MWRkNA0KPiAtI2RlZmluZSBNR0FfV0NPREVBRERSCQkJMHgxZTZjDQo+ IC0jZGVmaW5lIE1HQV9XRkxBRwkJCTB4MWRjNA0KPiAtI2RlZmluZSBNR0FfV0ZMQUcxCQkJ MHgxZGUwDQo+IC0jZGVmaW5lIE1HQV9XRkxBR05CCQkJMHgxZTY0DQo+IC0jZGVmaW5lIE1H QV9XRkxBR05CMQkJCTB4MWUwOA0KPiAtI2RlZmluZSBNR0FfV0dFVE1TQgkJCTB4MWRjOA0K PiAtI2RlZmluZSBNR0FfV0lBRERSCQkJMHgxZGMwDQo+IC0jZGVmaW5lIE1HQV9XSUFERFIy CQkJMHgxZGQ4DQo+IC0jCWRlZmluZSBNR0FfV01PREVfU1VTUEVORAkJKDAgPDwgMCkNCj4g LSMJZGVmaW5lIE1HQV9XTU9ERV9SRVNVTUUJCQkoMSA8PCAwKQ0KPiAtIwlkZWZpbmUgTUdB X1dNT0RFX0pVTVAJCQkoMiA8PCAwKQ0KPiAtIwlkZWZpbmUgTUdBX1dNT0RFX1NUQVJUCQkJ KDMgPDwgMCkNCj4gLSMJZGVmaW5lIE1HQV9XQUdQX0VOQUJMRQkJCSgxIDw8IDIpDQo+IC0j ZGVmaW5lIE1HQV9XTUlTQwkJCTB4MWU3MA0KPiAtIwlkZWZpbmUgTUdBX1dVQ09ERUNBQ0hF X0VOQUJMRQkJKDEgPDwgMCkNCj4gLSMJZGVmaW5lIE1HQV9XTUFTVEVSX0VOQUJMRQkJKDEg PDwgMSkNCj4gLSMJZGVmaW5lIE1HQV9XQ0FDSEVGTFVTSF9FTkFCTEUJCSgxIDw8IDMpDQo+ IC0jZGVmaW5lIE1HQV9XVlJUWFNaCQkJMHgxZGNjDQo+IC0NCj4gLSNkZWZpbmUgTUdBX1lC T1QJCQkweDFjOWMNCj4gLSNkZWZpbmUgTUdBX1lEU1QJCQkweDFjOTANCj4gLSNkZWZpbmUg TUdBX1lEU1RMRU4JCQkweDFjODgNCj4gLSNkZWZpbmUgTUdBX1lEU1RPUkcJCQkweDFjOTQN Cj4gLSNkZWZpbmUgTUdBX1lUT1AJCQkweDFjOTgNCj4gLQ0KPiAtI2RlZmluZSBNR0FfWk9S RwkJCTB4MWMwYw0KPiAtDQo+IC0vKiBUaGlzIGZpbmlzaGVzIHRoZSBjdXJyZW50IGJhdGNo IG9mIGNvbW1hbmRzDQo+IC0gKi8NCj4gLSNkZWZpbmUgTUdBX0VYRUMJCQkweDAxMDANCj4g LQ0KPiAtLyogQUdQIFBMTCBlbmNvZGluZyAoZm9yIEcyMDAgb25seSkuDQo+IC0gKi8NCj4g LSNkZWZpbmUgTUdBX0FHUF9QTEwJCQkweDFlNGMNCj4gLSMJZGVmaW5lIE1HQV9BR1AyWFBM TF9ESVNBQkxFCQkoMCA8PCAwKQ0KPiAtIwlkZWZpbmUgTUdBX0FHUDJYUExMX0VOQUJMRQkJ KDEgPDwgMCkNCj4gLQ0KPiAtLyogV2FycCByZWdpc3RlcnMNCj4gLSAqLw0KPiAtI2RlZmlu ZSBNR0FfV1IwCQkJCTB4MmQwMA0KPiAtI2RlZmluZSBNR0FfV1IxCQkJCTB4MmQwNA0KPiAt I2RlZmluZSBNR0FfV1IyCQkJCTB4MmQwOA0KPiAtI2RlZmluZSBNR0FfV1IzCQkJCTB4MmQw Yw0KPiAtI2RlZmluZSBNR0FfV1I0CQkJCTB4MmQxMA0KPiAtI2RlZmluZSBNR0FfV1I1CQkJ CTB4MmQxNA0KPiAtI2RlZmluZSBNR0FfV1I2CQkJCTB4MmQxOA0KPiAtI2RlZmluZSBNR0Ff V1I3CQkJCTB4MmQxYw0KPiAtI2RlZmluZSBNR0FfV1I4CQkJCTB4MmQyMA0KPiAtI2RlZmlu ZSBNR0FfV1I5CQkJCTB4MmQyNA0KPiAtI2RlZmluZSBNR0FfV1IxMAkJCTB4MmQyOA0KPiAt I2RlZmluZSBNR0FfV1IxMQkJCTB4MmQyYw0KPiAtI2RlZmluZSBNR0FfV1IxMgkJCTB4MmQz MA0KPiAtI2RlZmluZSBNR0FfV1IxMwkJCTB4MmQzNA0KPiAtI2RlZmluZSBNR0FfV1IxNAkJ CTB4MmQzOA0KPiAtI2RlZmluZSBNR0FfV1IxNQkJCTB4MmQzYw0KPiAtI2RlZmluZSBNR0Ff V1IxNgkJCTB4MmQ0MA0KPiAtI2RlZmluZSBNR0FfV1IxNwkJCTB4MmQ0NA0KPiAtI2RlZmlu ZSBNR0FfV1IxOAkJCTB4MmQ0OA0KPiAtI2RlZmluZSBNR0FfV1IxOQkJCTB4MmQ0Yw0KPiAt I2RlZmluZSBNR0FfV1IyMAkJCTB4MmQ1MA0KPiAtI2RlZmluZSBNR0FfV1IyMQkJCTB4MmQ1 NA0KPiAtI2RlZmluZSBNR0FfV1IyMgkJCTB4MmQ1OA0KPiAtI2RlZmluZSBNR0FfV1IyMwkJ CTB4MmQ1Yw0KPiAtI2RlZmluZSBNR0FfV1IyNAkJCTB4MmQ2MA0KPiAtI2RlZmluZSBNR0Ff V1IyNQkJCTB4MmQ2NA0KPiAtI2RlZmluZSBNR0FfV1IyNgkJCTB4MmQ2OA0KPiAtI2RlZmlu ZSBNR0FfV1IyNwkJCTB4MmQ2Yw0KPiAtI2RlZmluZSBNR0FfV1IyOAkJCTB4MmQ3MA0KPiAt I2RlZmluZSBNR0FfV1IyOQkJCTB4MmQ3NA0KPiAtI2RlZmluZSBNR0FfV1IzMAkJCTB4MmQ3 OA0KPiAtI2RlZmluZSBNR0FfV1IzMQkJCTB4MmQ3Yw0KPiAtI2RlZmluZSBNR0FfV1IzMgkJ CTB4MmQ4MA0KPiAtI2RlZmluZSBNR0FfV1IzMwkJCTB4MmQ4NA0KPiAtI2RlZmluZSBNR0Ff V1IzNAkJCTB4MmQ4OA0KPiAtI2RlZmluZSBNR0FfV1IzNQkJCTB4MmQ4Yw0KPiAtI2RlZmlu ZSBNR0FfV1IzNgkJCTB4MmQ5MA0KPiAtI2RlZmluZSBNR0FfV1IzNwkJCTB4MmQ5NA0KPiAt I2RlZmluZSBNR0FfV1IzOAkJCTB4MmQ5OA0KPiAtI2RlZmluZSBNR0FfV1IzOQkJCTB4MmQ5 Yw0KPiAtI2RlZmluZSBNR0FfV1I0MAkJCTB4MmRhMA0KPiAtI2RlZmluZSBNR0FfV1I0MQkJ CTB4MmRhNA0KPiAtI2RlZmluZSBNR0FfV1I0MgkJCTB4MmRhOA0KPiAtI2RlZmluZSBNR0Ff V1I0MwkJCTB4MmRhYw0KPiAtI2RlZmluZSBNR0FfV1I0NAkJCTB4MmRiMA0KPiAtI2RlZmlu ZSBNR0FfV1I0NQkJCTB4MmRiNA0KPiAtI2RlZmluZSBNR0FfV1I0NgkJCTB4MmRiOA0KPiAt I2RlZmluZSBNR0FfV1I0NwkJCTB4MmRiYw0KPiAtI2RlZmluZSBNR0FfV1I0OAkJCTB4MmRj MA0KPiAtI2RlZmluZSBNR0FfV1I0OQkJCTB4MmRjNA0KPiAtI2RlZmluZSBNR0FfV1I1MAkJ CTB4MmRjOA0KPiAtI2RlZmluZSBNR0FfV1I1MQkJCTB4MmRjYw0KPiAtI2RlZmluZSBNR0Ff V1I1MgkJCTB4MmRkMA0KPiAtI2RlZmluZSBNR0FfV1I1MwkJCTB4MmRkNA0KPiAtI2RlZmlu ZSBNR0FfV1I1NAkJCTB4MmRkOA0KPiAtI2RlZmluZSBNR0FfV1I1NQkJCTB4MmRkYw0KPiAt I2RlZmluZSBNR0FfV1I1NgkJCTB4MmRlMA0KPiAtI2RlZmluZSBNR0FfV1I1NwkJCTB4MmRl NA0KPiAtI2RlZmluZSBNR0FfV1I1OAkJCTB4MmRlOA0KPiAtI2RlZmluZSBNR0FfV1I1OQkJ CTB4MmRlYw0KPiAtI2RlZmluZSBNR0FfV1I2MAkJCTB4MmRmMA0KPiAtI2RlZmluZSBNR0Ff V1I2MQkJCTB4MmRmNA0KPiAtI2RlZmluZSBNR0FfV1I2MgkJCTB4MmRmOA0KPiAtI2RlZmlu ZSBNR0FfV1I2MwkJCTB4MmRmYw0KPiAtIwlkZWZpbmUgTUdBX0c0MDBfV1JfTUFHSUMJCSgx IDw8IDYpDQo+IC0jCWRlZmluZSBNR0FfRzQwMF9XUjU2X01BR0lDCQkweDQ2NDgwMDAwCS8q IDEyODAwLjBmICovDQo+IC0NCj4gLSNkZWZpbmUgTUdBX0lMT0FEX0FMSUdOCQk2NA0KPiAt I2RlZmluZSBNR0FfSUxPQURfTUFTSwkJKE1HQV9JTE9BRF9BTElHTiAtIDEpDQo+IC0NCj4g LSNkZWZpbmUgTUdBX0RXR0NUTF9GTFVTSAkoTUdBX09QQ09EX1RFWFRVUkVfVFJBUCB8CQlc DQo+IC0JCQkJIE1HQV9BVFlQRV9JIHwJCQkJXA0KPiAtCQkJCSBNR0FfWk1PREVfTk9aQ01Q IHwJCQlcDQo+IC0JCQkJIE1HQV9BUlpFUk8gfAkJCQlcDQo+IC0JCQkJIE1HQV9TR05aRVJP IHwJCQkJXA0KPiAtCQkJCSBNR0FfQk9QX1NSQyB8CQkJCVwNCj4gLQkJCQkgKDE1IDw8IE1H QV9UUkFOU19TSElGVCkpDQo+IC0NCj4gLSNkZWZpbmUgTUdBX0RXR0NUTF9DTEVBUgkoTUdB X09QQ09EX1RSQVAgfAkJCVwNCj4gLQkJCQkgTUdBX1pNT0RFX05PWkNNUCB8CQkJXA0KPiAt CQkJCSBNR0FfU09MSUQgfAkJCQlcDQo+IC0JCQkJIE1HQV9BUlpFUk8gfAkJCQlcDQo+IC0J CQkJIE1HQV9TR05aRVJPIHwJCQkJXA0KPiAtCQkJCSBNR0FfU0hJRlRaRVJPIHwJCQlcDQo+ IC0JCQkJIE1HQV9CT1BfU1JDIHwJCQkJXA0KPiAtCQkJCSAoMCA8PCBNR0FfVFJBTlNfU0hJ RlQpIHwJCVwNCj4gLQkJCQkgTUdBX0JMVE1PRF9CTU9OT0xFRiB8CQkJXA0KPiAtCQkJCSBN R0FfVFJBTlNDIHwJCQkJXA0KPiAtCQkJCSBNR0FfQ0xJUERJUykNCj4gLQ0KPiAtI2RlZmlu ZSBNR0FfRFdHQ1RMX0NPUFkJCShNR0FfT1BDT0RfQklUQkxUIHwJCQlcDQo+IC0JCQkJIE1H QV9BVFlQRV9SUEwgfAkJCVwNCj4gLQkJCQkgTUdBX1NHTlpFUk8gfAkJCQlcDQo+IC0JCQkJ IE1HQV9TSElGVFpFUk8gfAkJCVwNCj4gLQkJCQkgTUdBX0JPUF9TUkMgfAkJCQlcDQo+IC0J CQkJICgwIDw8IE1HQV9UUkFOU19TSElGVCkgfAkJXA0KPiAtCQkJCSBNR0FfQkxUTU9EX0JG Q09MIHwJCQlcDQo+IC0JCQkJIE1HQV9DTElQRElTKQ0KPiAtDQo+IC0vKiBTaW1wbGUgaWRs ZSB0ZXN0Lg0KPiAtICovDQo+IC1zdGF0aWMgX19pbmxpbmVfXyBpbnQgbWdhX2lzX2lkbGUo ZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCXUzMiBzdGF0dXMgPSBN R0FfUkVBRChNR0FfU1RBVFVTKSAmIE1HQV9FTkdJTkVfSURMRV9NQVNLOw0KPiAtCXJldHVy biAoc3RhdHVzID09IE1HQV9FTkRQUkRNQVNUUyk7DQo+IC19DQo+IC0NCj4gLSNlbmRpZg0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaW9jMzIuYyBiL2RyaXZl cnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDg5NDQ3MjkyMWMzMC4uMDAwMDAwMDAwMDAwDQo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSwxOTcg KzAsMCBAQA0KPiAtLyoNCj4gLSAqIFxmaWxlIG1nYV9pb2MzMi5jDQo+IC0gKg0KPiAtICog MzItYml0IGlvY3RsIGNvbXBhdGliaWxpdHkgcm91dGluZXMgZm9yIHRoZSBNR0EgRFJNLg0K PiAtICoNCj4gLSAqIFxhdXRob3IgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+IHdp dGggY29kZSBmcm9tIHBhdGNoZXMgYnkgRWdiZXJ0IEVpY2gNCj4gLSAqDQo+IC0gKg0KPiAt ICogQ29weXJpZ2h0IChDKSBQYXVsIE1hY2tlcnJhcyAyMDA1DQo+IC0gKiBDb3B5cmlnaHQg KEMpIEVnYmVydCBFaWNoIDIwMDMsMjAwNA0KPiAtICogQ29weXJpZ2h0IChDKSBEYXZlIEFp cmxpZSAyMDA1DQo+IC0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4gLSAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAtICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0gKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUNCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dA0KPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICogU29mdHdh cmUuDQo+IC0gKg0KPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLA0KPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBUSEUgQVVUSE9S IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwN Cj4gLSAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORyBGUk9NLA0KPiAtICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KPiAtICogSU4g VEhFIFNPRlRXQVJFLg0KPiAtICovDQo+IC0NCj4gLSNpbmNsdWRlIDxsaW51eC9jb21wYXQu aD4NCj4gLQ0KPiAtI2luY2x1ZGUgIm1nYV9kcnYuaCINCj4gLQ0KPiAtdHlwZWRlZiBzdHJ1 Y3QgZHJtMzJfbWdhX2luaXQgew0KPiAtCWludCBmdW5jOw0KPiAtCXUzMiBzYXJlYV9wcml2 X29mZnNldDsNCj4gLQlzdHJ1Y3RfZ3JvdXAoYWx3YXlzMzJiaXQsDQo+IC0JCWludCBjaGlw c2V0Ow0KPiAtCQlpbnQgc2dyYW07DQo+IC0JCXVuc2lnbmVkIGludCBtYWNjZXNzOw0KPiAt CQl1bnNpZ25lZCBpbnQgZmJfY3BwOw0KPiAtCQl1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0 LCBmcm9udF9waXRjaDsNCj4gLQkJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0LCBiYWNrX3Bp dGNoOw0KPiAtCQl1bnNpZ25lZCBpbnQgZGVwdGhfY3BwOw0KPiAtCQl1bnNpZ25lZCBpbnQg ZGVwdGhfb2Zmc2V0LCBkZXB0aF9waXRjaDsNCj4gLQkJdW5zaWduZWQgaW50IHRleHR1cmVf b2Zmc2V0W01HQV9OUl9URVhfSEVBUFNdOw0KPiAtCQl1bnNpZ25lZCBpbnQgdGV4dHVyZV9z aXplW01HQV9OUl9URVhfSEVBUFNdOw0KPiAtCSk7DQo+IC0JdTMyIGZiX29mZnNldDsNCj4g LQl1MzIgbW1pb19vZmZzZXQ7DQo+IC0JdTMyIHN0YXR1c19vZmZzZXQ7DQo+IC0JdTMyIHdh cnBfb2Zmc2V0Ow0KPiAtCXUzMiBwcmltYXJ5X29mZnNldDsNCj4gLQl1MzIgYnVmZmVyc19v ZmZzZXQ7DQo+IC19IGRybV9tZ2FfaW5pdDMyX3Q7DQo+IC0NCj4gLXN0YXRpYyBpbnQgY29t cGF0X21nYV9pbml0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLA0KPiAt CQkJICAgdW5zaWduZWQgbG9uZyBhcmcpDQo+IC17DQo+IC0JZHJtX21nYV9pbml0MzJfdCBp bml0MzI7DQo+IC0JZHJtX21nYV9pbml0X3QgaW5pdDsNCj4gLQ0KPiAtCWlmIChjb3B5X2Zy b21fdXNlcigmaW5pdDMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbml0MzIpKSkN Cj4gLQkJcmV0dXJuIC1FRkFVTFQ7DQo+IC0NCj4gLQlpbml0LmZ1bmMgPSBpbml0MzIuZnVu YzsNCj4gLQlpbml0LnNhcmVhX3ByaXZfb2Zmc2V0ID0gaW5pdDMyLnNhcmVhX3ByaXZfb2Zm c2V0Ow0KPiAtCW1lbWNweSgmaW5pdC5hbHdheXMzMmJpdCwgJmluaXQzMi5hbHdheXMzMmJp dCwNCj4gLQkgICAgICAgc2l6ZW9mKGluaXQzMi5hbHdheXMzMmJpdCkpOw0KPiAtCWluaXQu ZmJfb2Zmc2V0ID0gaW5pdDMyLmZiX29mZnNldDsNCj4gLQlpbml0Lm1taW9fb2Zmc2V0ID0g aW5pdDMyLm1taW9fb2Zmc2V0Ow0KPiAtCWluaXQuc3RhdHVzX29mZnNldCA9IGluaXQzMi5z dGF0dXNfb2Zmc2V0Ow0KPiAtCWluaXQud2FycF9vZmZzZXQgPSBpbml0MzIud2FycF9vZmZz ZXQ7DQo+IC0JaW5pdC5wcmltYXJ5X29mZnNldCA9IGluaXQzMi5wcmltYXJ5X29mZnNldDsN Cj4gLQlpbml0LmJ1ZmZlcnNfb2Zmc2V0ID0gaW5pdDMyLmJ1ZmZlcnNfb2Zmc2V0Ow0KPiAt DQo+IC0JcmV0dXJuIGRybV9pb2N0bF9rZXJuZWwoZmlsZSwgbWdhX2RtYV9pbml0LCAmaW5p dCwNCj4gLQkJCQlEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpOw0KPiAtfQ0K PiAtDQo+IC10eXBlZGVmIHN0cnVjdCBkcm1fbWdhX2dldHBhcmFtMzIgew0KPiAtCWludCBw YXJhbTsNCj4gLQl1MzIgdmFsdWU7DQo+IC19IGRybV9tZ2FfZ2V0cGFyYW0zMl90Ow0KPiAt DQo+IC1zdGF0aWMgaW50IGNvbXBhdF9tZ2FfZ2V0cGFyYW0oc3RydWN0IGZpbGUgKmZpbGUs IHVuc2lnbmVkIGludCBjbWQsDQo+IC0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpDQo+ IC17DQo+IC0JZHJtX21nYV9nZXRwYXJhbTMyX3QgZ2V0cGFyYW0zMjsNCj4gLQlkcm1fbWdh X2dldHBhcmFtX3QgZ2V0cGFyYW07DQo+IC0NCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJmdl dHBhcmFtMzIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGdldHBhcmFtMzIpKSkNCj4g LQkJcmV0dXJuIC1FRkFVTFQ7DQo+IC0NCj4gLQlnZXRwYXJhbS5wYXJhbSA9IGdldHBhcmFt MzIucGFyYW07DQo+IC0JZ2V0cGFyYW0udmFsdWUgPSBjb21wYXRfcHRyKGdldHBhcmFtMzIu dmFsdWUpOw0KPiAtCXJldHVybiBkcm1faW9jdGxfa2VybmVsKGZpbGUsIG1nYV9nZXRwYXJh bSwgJmdldHBhcmFtLCBEUk1fQVVUSCk7DQo+IC19DQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0 IGRybV9tZ2FfZHJtX2Jvb3RzdHJhcDMyIHsNCj4gLQl1MzIgdGV4dHVyZV9oYW5kbGU7DQo+ IC0JdTMyIHRleHR1cmVfc2l6ZTsNCj4gLQl1MzIgcHJpbWFyeV9zaXplOw0KPiAtCXUzMiBz ZWNvbmRhcnlfYmluX2NvdW50Ow0KPiAtCXUzMiBzZWNvbmRhcnlfYmluX3NpemU7DQo+IC0J dTMyIGFncF9tb2RlOw0KPiAtCXU4IGFncF9zaXplOw0KPiAtfSBkcm1fbWdhX2RtYV9ib290 c3RyYXAzMl90Ow0KPiAtDQo+IC1zdGF0aWMgaW50IGNvbXBhdF9tZ2FfZG1hX2Jvb3RzdHJh cChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwNCj4gLQkJCQkgICAgdW5z aWduZWQgbG9uZyBhcmcpDQo+IC17DQo+IC0JZHJtX21nYV9kbWFfYm9vdHN0cmFwMzJfdCBk bWFfYm9vdHN0cmFwMzI7DQo+IC0JZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgZG1hX2Jvb3Rz dHJhcDsNCj4gLQlpbnQgZXJyOw0KPiAtDQo+IC0JaWYgKGNvcHlfZnJvbV91c2VyKCZkbWFf Ym9vdHN0cmFwMzIsICh2b2lkIF9fdXNlciAqKWFyZywNCj4gLQkJCSAgIHNpemVvZihkbWFf Ym9vdHN0cmFwMzIpKSkNCj4gLQkJcmV0dXJuIC1FRkFVTFQ7DQo+IC0NCj4gLQlkbWFfYm9v dHN0cmFwLnRleHR1cmVfaGFuZGxlID0gZG1hX2Jvb3RzdHJhcDMyLnRleHR1cmVfaGFuZGxl Ow0KPiAtCWRtYV9ib290c3RyYXAudGV4dHVyZV9zaXplID0gZG1hX2Jvb3RzdHJhcDMyLnRl eHR1cmVfc2l6ZTsNCj4gLQlkbWFfYm9vdHN0cmFwLnByaW1hcnlfc2l6ZSA9IGRtYV9ib290 c3RyYXAzMi5wcmltYXJ5X3NpemU7DQo+IC0JZG1hX2Jvb3RzdHJhcC5zZWNvbmRhcnlfYmlu X2NvdW50ID0gZG1hX2Jvb3RzdHJhcDMyLnNlY29uZGFyeV9iaW5fY291bnQ7DQo+IC0JZG1h X2Jvb3RzdHJhcC5zZWNvbmRhcnlfYmluX3NpemUgPSBkbWFfYm9vdHN0cmFwMzIuc2Vjb25k YXJ5X2Jpbl9zaXplOw0KPiAtCWRtYV9ib290c3RyYXAuYWdwX21vZGUgPSBkbWFfYm9vdHN0 cmFwMzIuYWdwX21vZGU7DQo+IC0JZG1hX2Jvb3RzdHJhcC5hZ3Bfc2l6ZSA9IGRtYV9ib290 c3RyYXAzMi5hZ3Bfc2l6ZTsNCj4gLQ0KPiAtCWVyciA9IGRybV9pb2N0bF9rZXJuZWwoZmls ZSwgbWdhX2RtYV9ib290c3RyYXAsICZkbWFfYm9vdHN0cmFwLA0KPiAtCQkJCURSTV9BVVRI fERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSk7DQo+IC0JaWYgKGVycikNCj4gLQkJcmV0dXJu IGVycjsNCj4gLQ0KPiAtCWRtYV9ib290c3RyYXAzMi50ZXh0dXJlX2hhbmRsZSA9IGRtYV9i b290c3RyYXAudGV4dHVyZV9oYW5kbGU7DQo+IC0JZG1hX2Jvb3RzdHJhcDMyLnRleHR1cmVf c2l6ZSA9IGRtYV9ib290c3RyYXAudGV4dHVyZV9zaXplOw0KPiAtCWRtYV9ib290c3RyYXAz Mi5wcmltYXJ5X3NpemUgPSBkbWFfYm9vdHN0cmFwLnByaW1hcnlfc2l6ZTsNCj4gLQlkbWFf Ym9vdHN0cmFwMzIuc2Vjb25kYXJ5X2Jpbl9jb3VudCA9IGRtYV9ib290c3RyYXAuc2Vjb25k YXJ5X2Jpbl9jb3VudDsNCj4gLQlkbWFfYm9vdHN0cmFwMzIuc2Vjb25kYXJ5X2Jpbl9zaXpl ID0gZG1hX2Jvb3RzdHJhcC5zZWNvbmRhcnlfYmluX3NpemU7DQo+IC0JZG1hX2Jvb3RzdHJh cDMyLmFncF9tb2RlID0gZG1hX2Jvb3RzdHJhcC5hZ3BfbW9kZTsNCj4gLQlkbWFfYm9vdHN0 cmFwMzIuYWdwX3NpemUgPSBkbWFfYm9vdHN0cmFwLmFncF9zaXplOw0KPiAtCWlmIChjb3B5 X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZG1hX2Jvb3RzdHJhcDMyLA0KPiAtCQkJ IHNpemVvZihkbWFfYm9vdHN0cmFwMzIpKSkNCj4gLQkJcmV0dXJuIC1FRkFVTFQ7DQo+IC0N Cj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHN0cnVjdCB7DQo+IC0JZHJt X2lvY3RsX2NvbXBhdF90ICpmbjsNCj4gLQljaGFyICpuYW1lOw0KPiAtfSBtZ2FfY29tcGF0 X2lvY3Rsc1tdID0gew0KPiAtI2RlZmluZSBEUk1fSU9DVEwzMl9ERUYobiwgZilbRFJNXyMj bl0gPSB7LmZuID0gZiwgLm5hbWUgPSAjbn0NCj4gLQlEUk1fSU9DVEwzMl9ERUYoTUdBX0lO SVQsIGNvbXBhdF9tZ2FfaW5pdCksDQo+IC0JRFJNX0lPQ1RMMzJfREVGKE1HQV9HRVRQQVJB TSwgY29tcGF0X21nYV9nZXRwYXJhbSksDQo+IC0JRFJNX0lPQ1RMMzJfREVGKE1HQV9ETUFf Qk9PVFNUUkFQLCBjb21wYXRfbWdhX2RtYV9ib290c3RyYXApLA0KPiAtfTsNCj4gLQ0KPiAt LyoqDQo+IC0gKiBtZ2FfY29tcGF0X2lvY3RsIC0gQ2FsbGVkIHdoZW5ldmVyIGEgMzItYml0 IHByb2Nlc3MgcnVubmluZyB1bmRlcg0KPiAtICogICAgICAgICAgICAgICAgICAgIGEgNjQt Yml0IGtlcm5lbCBwZXJmb3JtcyBhbiBpb2N0bCBvbiAvZGV2L2RyaS9jYXJkPG4+Lg0KPiAt ICoNCj4gLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIuDQo+IC0gKiBAY21kOiAgY29tbWFuZC4N Cj4gLSAqIEBhcmc6ICB1c2VyIGFyZ3VtZW50Lg0KPiAtICogcmV0dXJuOiB6ZXJvIG9uIHN1 Y2Nlc3Mgb3IgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuDQo+IC0gKi8NCj4gLWxvbmcg bWdhX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwg dW5zaWduZWQgbG9uZyBhcmcpDQo+IC17DQo+IC0JdW5zaWduZWQgaW50IG5yID0gRFJNX0lP Q1RMX05SKGNtZCk7DQo+IC0Jc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmaWxwLT5w cml2YXRlX2RhdGE7DQo+IC0JZHJtX2lvY3RsX2NvbXBhdF90ICpmbiA9IE5VTEw7DQo+IC0J aW50IHJldDsNCj4gLQ0KPiAtCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UpDQo+IC0JCXJl dHVybiBkcm1fY29tcGF0X2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsNCj4gLQ0KPiAtCWlmIChu ciA+PSBEUk1fQ09NTUFORF9CQVNFICsgQVJSQVlfU0laRShtZ2FfY29tcGF0X2lvY3Rscykp DQo+IC0JCXJldHVybiBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOw0KPiAtDQo+IC0JZm4g PSBtZ2FfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdLmZuOw0KPiAtCWlm ICghZm4pDQo+IC0JCXJldHVybiBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOw0KPiAtDQo+ IC0JRFJNX0RFQlVHKCJwaWQ9JWQsIGRldj0weCVseCwgYXV0aD0lZCwgJXNcbiIsDQo+IC0J CSAgdGFza19waWRfbnIoY3VycmVudCksDQo+IC0JCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYo ZmlsZV9wcml2LT5taW5vci0+a2Rldi0+ZGV2dCksDQo+IC0JCSAgZmlsZV9wcml2LT5hdXRo ZW50aWNhdGVkLA0KPiAtCQkgIG1nYV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRf QkFTRV0ubmFtZSk7DQo+IC0JcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsNCj4gLQlp ZiAocmV0KQ0KPiAtCQlEUk1fREVCVUcoInJldCA9ICVkXG4iLCByZXQpOw0KPiAtCXJldHVy biByZXQ7DQo+IC19DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9p cnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lycS5jDQo+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCBhN2U2ZmZjODBhNzguLjAwMDAwMDAwMDAwMA0KPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYw0KPiArKysgL2Rldi9udWxsDQo+IEBA IC0xLDE2OSArMCwwIEBADQo+IC0vKiBtZ2FfaXJxLmMgLS0gSVJRIGhhbmRsaW5nIGZvciBy YWRlb24gLSotIGxpbnV4LWMgLSotDQo+IC0gKi8NCj4gLS8qDQo+IC0gKiBDb3B5cmlnaHQg KEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2Vy dmVkLg0KPiAtICoNCj4gLSAqIFRoZSBXZWF0aGVyIENoYW5uZWwgKFRNKSBmdW5kZWQgVHVu Z3N0ZW4gR3JhcGhpY3MgdG8gZGV2ZWxvcCB0aGUNCj4gLSAqIGluaXRpYWwgcmVsZWFzZSBv ZiB0aGUgUmFkZW9uIDg1MDAgZHJpdmVyIHVuZGVyIHRoZSBYRnJlZTg2IGxpY2Vuc2UuDQo+ IC0gKiBUaGlzIG5vdGljZSBtdXN0IGJlIHByZXNlcnZlZC4NCj4gLSAqDQo+IC0gKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQ0KPiAtICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCj4gLSAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24NCj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KPiAtICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlDQo+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiAtICoNCj4gLSAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQNCj4gLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUNCj4gLSAqIFNvZnR3YXJl Lg0KPiAtICoNCj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQo+IC0gKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwNCj4gLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTA0KPiAtICogUFJFQ0lTSU9OIElO U0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1INCj4gLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLA0KPiAtICogQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSDQo+IC0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQo+IC0gKg0KPiAtICog QXV0aG9yczoNCj4gLSAqICAgIEtlaXRoIFdoaXR3ZWxsIDxrZWl0aEB0dW5nc3RlbmdyYXBo aWNzLmNvbT4NCj4gLSAqICAgIEVyaWMgQW5ob2x0IDxhbmhvbHRARnJlZUJTRC5vcmc+DQo+ IC0gKi8NCj4gLQ0KPiAtI2luY2x1ZGUgIm1nYV9kcnYuaCINCj4gLQ0KPiAtdTMyIG1nYV9n ZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50 IHBpcGUpDQo+IC17DQo+IC0JY29uc3QgZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9w cml2ID0NCj4gLQkJKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+ IC0NCj4gLQlpZiAocGlwZSAhPSAwKQ0KPiAtCQlyZXR1cm4gMDsNCj4gLQ0KPiAtCXJldHVy biBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7DQo+IC19DQo+IC0NCj4g LQ0KPiAtaXJxcmV0dXJuX3QgbWdhX2RyaXZlcl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICphcmcpDQo+IC17DQo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJt X2RldmljZSAqKSBhcmc7DQo+IC0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRy bV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JaW50IHN0YXR1czsN Cj4gLQlpbnQgaGFuZGxlZCA9IDA7DQo+IC0NCj4gLQlzdGF0dXMgPSBNR0FfUkVBRChNR0Ff U1RBVFVTKTsNCj4gLQ0KPiAtCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8NCj4gLQlpZiAoc3Rh dHVzICYgTUdBX1ZMSU5FUEVOKSB7DQo+IC0JCU1HQV9XUklURShNR0FfSUNMRUFSLCBNR0Ff VkxJTkVJQ0xSKTsNCj4gLQkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7 DQo+IC0JCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7DQo+IC0JCWhhbmRsZWQgPSAxOw0K PiAtCX0NCj4gLQ0KPiAtCS8qIFNPRlRSQVAgaW50ZXJydXB0ICovDQo+IC0JaWYgKHN0YXR1 cyAmIE1HQV9TT0ZUUkFQRU4pIHsNCj4gLQkJY29uc3QgdTMyIHByaW1fc3RhcnQgPSBNR0Ff UkVBRChNR0FfUFJJTUFERFJFU1MpOw0KPiAtCQljb25zdCB1MzIgcHJpbV9lbmQgPSBNR0Ff UkVBRChNR0FfUFJJTUVORCk7DQo+IC0NCj4gLQ0KPiAtCQlNR0FfV1JJVEUoTUdBX0lDTEVB UiwgTUdBX1NPRlRSQVBJQ0xSKTsNCj4gLQ0KPiAtCQkvKiBJbiBhZGRpdGlvbiB0byBjbGVh cmluZyB0aGUgaW50ZXJydXB0LXBlbmRpbmcgYml0LCB3ZQ0KPiAtCQkgKiBoYXZlIHRvIHdy aXRlIHRvIE1HQV9QUklNRU5EIHRvIHJlLXN0YXJ0IHRoZSBETUEgb3BlcmF0aW9uLg0KPiAt CQkgKi8NCj4gLQkJaWYgKChwcmltX3N0YXJ0ICYgfjB4MDMpICE9IChwcmltX2VuZCAmIH4w eDAzKSkNCj4gLQkJCU1HQV9XUklURShNR0FfUFJJTUVORCwgcHJpbV9lbmQpOw0KPiAtDQo+ IC0JCWF0b21pY19pbmMoJmRldl9wcml2LT5sYXN0X2ZlbmNlX3JldGlyZWQpOw0KPiAtCQl3 YWtlX3VwKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOw0KPiAtCQloYW5kbGVkID0gMTsNCj4g LQl9DQo+IC0NCj4gLQlpZiAoaGFuZGxlZCkNCj4gLQkJcmV0dXJuIElSUV9IQU5ETEVEOw0K PiAtCXJldHVybiBJUlFfTk9ORTsNCj4gLX0NCj4gLQ0KPiAtaW50IG1nYV9lbmFibGVfdmJs YW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQ0KPiAtew0K PiAtCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAq KSBkZXYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JaWYgKHBpcGUgIT0gMCkgew0KPiAtCQlE Uk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMg JXVcbiIsDQo+IC0JCQkgIHBpcGUpOw0KPiAtCQlyZXR1cm4gMDsNCj4gLQl9DQo+IC0NCj4g LQlNR0FfV1JJVEUoTUdBX0lFTiwgTUdBX1ZMSU5FSUVOIHwgTUdBX1NPRlRSQVBFTik7DQo+ IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLQ0KPiAtdm9pZCBtZ2FfZGlzYWJsZV92Ymxh bmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpDQo+IC17DQo+ IC0JaWYgKHBpcGUgIT0gMCkgew0KPiAtCQlEUk1fRVJST1IoInRyaWVkIHRvIGRpc2FibGUg dmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICV1XG4iLA0KPiAtCQkJICBwaXBlKTsNCj4g LQl9DQo+IC0NCj4gLQkvKiBEbyAqTk9UKiBkaXNhYmxlIHRoZSB2ZXJ0aWNhbCByZWZyZXNo IGludGVycnVwdC4gIE1HQSBkb2Vzbid0IGhhdmUNCj4gLQkgKiBhIG5pY2UgaGFyZHdhcmUg Y291bnRlciB0aGF0IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHJlZnJlc2hlcyB3aGVuDQo+IC0J ICogdGhlIGludGVycnVwdCBpcyBkaXNhYmxlZCwgYW5kIHRoZSBrZXJuZWwgZG9lc24ndCBr bm93IHRoZSByZWZyZXNoDQo+IC0JICogcmF0ZSB0byBjYWxjdWxhdGUgYW4gZXN0aW1hdGUu DQo+IC0JICovDQo+IC0JLyogTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1H QV9TT0ZUUkFQRU4pOyAqLw0KPiAtfQ0KPiAtDQo+IC12b2lkIG1nYV9kcml2ZXJfZmVuY2Vf d2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQ0K PiAtew0KPiAtCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZh dGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCXVuc2lnbmVkIGludCBjdXJfZmVuY2U7 DQo+IC0NCj4gLQkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJy ZW50IHNlcXVlbmNlIG51bWJlcg0KPiAtCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFu IHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycw0KPiAtCSAqIHVzaW5nIGZlbmNlcy4NCj4g LQkgKi8NCj4gLQl3YWl0X2V2ZW50X3RpbWVvdXQoZGV2X3ByaXYtPmZlbmNlX3F1ZXVlLA0K PiAtCQkgICAgKCgoY3VyX2ZlbmNlID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5sYXN0X2Zl bmNlX3JldGlyZWQpKQ0KPiAtCQkgICAgICAtICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSwN Cj4gLQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMzAwMCkpOw0KPiAtDQo+IC0JKnNlcXVlbmNl ID0gY3VyX2ZlbmNlOw0KPiAtfQ0KPiAtDQo+IC12b2lkIG1nYV9kcml2ZXJfaXJxX3ByZWlu c3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZh dGVfdCAqZGV2X3ByaXYgPSAoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0 ZTsNCj4gLQ0KPiAtCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLw0KPiAtCU1HQV9X UklURShNR0FfSUVOLCAwKTsNCj4gLQkvKiBDbGVhciBiaXRzIGlmIHRoZXkncmUgYWxyZWFk eSBoaWdoICovDQo+IC0JTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIH4wKTsNCj4gLX0NCj4gLQ0K PiAtaW50IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpDQo+IC17DQo+IC0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2Ff cHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0NCj4gLQlpbml0X3dhaXRxdWV1 ZV9oZWFkKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOw0KPiAtDQo+IC0JLyogVHVybiBvbiBz b2Z0IHRyYXAgaW50ZXJydXB0LiAgVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyBhcmUgZW5h YmxlZA0KPiAtCSAqIGluIG1nYV9lbmFibGVfdmJsYW5rLg0KPiAtCSAqLw0KPiAtCU1HQV9X UklURShNR0FfSUVOLCBNR0FfU09GVFJBUEVOKTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4g LQ0KPiAtdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX21n YV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlpZiAoIWRldl9wcml2KQ0K PiAtCQlyZXR1cm47DQo+IC0NCj4gLQkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8N Cj4gLQlNR0FfV1JJVEUoTUdBX0lFTiwgMCk7DQo+IC0NCj4gLQlkZXYtPmlycV9lbmFibGVk ID0gZmFsc2U7DQo+IC19DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21n YV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYw0KPiBkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggNWI3MjQ3YjU4NDUxLi4wMDAwMDAwMDAwMDAN Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYw0KPiArKysgL2Rldi9u dWxsDQo+IEBAIC0xLDEwOTkgKzAsMCBAQA0KPiAtLyogbWdhX3N0YXRlLmMgLS0gU3RhdGUg c3VwcG9ydCBmb3IgTUdBIEcyMDAvRzQwMCAtKi0gbGludXgtYyAtKi0NCj4gLSAqIENyZWF0 ZWQ6IFRodSBKYW4gMjcgMDI6NTM6NDMgMjAwMCBieSBqaGFydG1hbm5AcHJlY2lzaW9uaW5z aWdodC5jb20NCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgMTk5OSBQcmVjaXNpb24gSW5zaWdo dCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuDQo+IC0gKiBDb3B5cmlnaHQgMjAwMCBWQSBM aW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEuDQo+IC0gKiBBbGwg UmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4gLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQo+IC0g KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAtICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiAt ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCj4gLSAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dA0KPiAtICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICogU29mdHdhcmUuDQo+IC0gKg0KPiAtICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KPiAtICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQ UExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SDQo+IC0gKiBPVEhF UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwNCj4gLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUg0KPiAtICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLg0KPiAtICoNCj4gLSAqIEF1dGhvcnM6DQo+IC0gKiAgICBK ZWZmIEhhcnRtYW5uIDxqaGFydG1hbm5AdmFsaW51eC5jb20+DQo+IC0gKiAgICBLZWl0aCBX aGl0d2VsbCA8a2VpdGhAdHVuZ3N0ZW5ncmFwaGljcy5jb20+DQo+IC0gKg0KPiAtICogUmV3 cml0dGVuIGJ5Og0KPiAtICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29t Pg0KPiAtICovDQo+IC0NCj4gLSNpbmNsdWRlICJtZ2FfZHJ2LmgiDQo+IC0NCj4gLS8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCj4gLSAqIERNQSBoYXJkd2FyZSBzdGF0ZSBwcm9ncmFtbWluZyBmdW5jdGlv bnMNCj4gLSAqLw0KPiAtDQo+IC1zdGF0aWMgdm9pZCBtZ2FfZW1pdF9jbGlwX3JlY3QoZHJt X21nYV9wcml2YXRlX3QgKmRldl9wcml2LA0KPiAtCQkJICAgICAgIHN0cnVjdCBkcm1fY2xp cF9yZWN0ICpib3gpDQo+IC17DQo+IC0JZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0g ZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JZHJtX21nYV9jb250ZXh0X3JlZ3NfdCAqY3R4 ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7DQo+IC0JdW5zaWduZWQgaW50IHBpdGNo ID0gZGV2X3ByaXYtPmZyb250X3BpdGNoOw0KPiAtCURNQV9MT0NBTFM7DQo+IC0NCj4gLQlC RUdJTl9ETUEoMik7DQo+IC0NCj4gLQkvKiBGb3JjZSByZXNldCBvZiBEV0dDVEwgb24gRzQw MCAoZWxpbWluYXRlcyBjbGlwIGRpc2FibGUgYml0KS4NCj4gLQkgKi8NCj4gLQlpZiAoZGV2 X3ByaXYtPmNoaXBzZXQgPj0gTUdBX0NBUkRfVFlQRV9HNDAwKSB7DQo+IC0JCURNQV9CTE9D SyhNR0FfRFdHQ1RMLCBjdHgtPmR3Z2N0bCwNCj4gLQkJCSAgTUdBX0xFTiArIE1HQV9FWEVD LCAweDgwMDAwMDAwLA0KPiAtCQkJICBNR0FfRFdHQ1RMLCBjdHgtPmR3Z2N0bCwNCj4gLQkJ CSAgTUdBX0xFTiArIE1HQV9FWEVDLCAweDgwMDAwMDAwKTsNCj4gLQl9DQo+IC0JRE1BX0JM T0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX0NYQk5EUlksICgoYm94 LT54MiAtIDEpIDw8IDE2KSB8IGJveC0+eDEsDQo+IC0JCSAgTUdBX1lUT1AsIGJveC0+eTEg KiBwaXRjaCwgTUdBX1lCT1QsIChib3gtPnkyIC0gMSkgKiBwaXRjaCk7DQo+IC0NCj4gLQlB RFZBTkNFX0RNQSgpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1n YV9nMjAwX2VtaXRfY29udGV4dChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17 DQo+IC0JZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3By aXY7DQo+IC0JZHJtX21nYV9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNv bnRleHRfc3RhdGU7DQo+IC0JRE1BX0xPQ0FMUzsNCj4gLQ0KPiAtCUJFR0lOX0RNQSgzKTsN Cj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfRFNUT1JHLCBjdHgtPmRzdG9yZywNCj4gLQkJICBN R0FfTUFDQ0VTUywgY3R4LT5tYWNjZXNzLA0KPiAtCQkgIE1HQV9QTE5XVCwgY3R4LT5wbG53 dCwgTUdBX0RXR0NUTCwgY3R4LT5kd2djdGwpOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9B TFBIQUNUUkwsIGN0eC0+YWxwaGFjdHJsLA0KPiAtCQkgIE1HQV9GT0dDT0wsIGN0eC0+Zm9n Y29sb3IsDQo+IC0JCSAgTUdBX1dGTEFHLCBjdHgtPndmbGFnLCBNR0FfWk9SRywgZGV2X3By aXYtPmRlcHRoX29mZnNldCk7DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX0ZDT0wsIGN0eC0+ ZmNvbCwNCj4gLQkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAtCQkgIE1HQV9ETUFQ QUQsIDB4MDAwMDAwMDAsIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDApOw0KPiAtDQo+IC0JQURW QU5DRV9ETUEoKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2Ff ZzQwMF9lbWl0X2NvbnRleHQoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0K PiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2 Ow0KPiAtCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250 ZXh0X3N0YXRlOw0KPiAtCURNQV9MT0NBTFM7DQo+IC0NCj4gLQlCRUdJTl9ETUEoNCk7DQo+ IC0NCj4gLQlETUFfQkxPQ0soTUdBX0RTVE9SRywgY3R4LT5kc3RvcmcsDQo+IC0JCSAgTUdB X01BQ0NFU1MsIGN0eC0+bWFjY2VzcywNCj4gLQkJICBNR0FfUExOV1QsIGN0eC0+cGxud3Qs IE1HQV9EV0dDVEwsIGN0eC0+ZHdnY3RsKTsNCj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfQUxQ SEFDVFJMLCBjdHgtPmFscGhhY3RybCwNCj4gLQkJICBNR0FfRk9HQ09MLCBjdHgtPmZvZ2Nv bG9yLA0KPiAtCQkgIE1HQV9XRkxBRywgY3R4LT53ZmxhZywgTUdBX1pPUkcsIGRldl9wcml2 LT5kZXB0aF9vZmZzZXQpOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9XRkxBRzEsIGN0eC0+ d2ZsYWcsDQo+IC0JCSAgTUdBX1REVUFMU1RBR0UwLCBjdHgtPnRkdWFsc3RhZ2UwLA0KPiAt CQkgIE1HQV9URFVBTFNUQUdFMSwgY3R4LT50ZHVhbHN0YWdlMSwgTUdBX0ZDT0wsIGN0eC0+ ZmNvbCk7DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX1NURU5DSUwsIGN0eC0+c3RlbmNpbCwN Cj4gLQkJICBNR0FfU1RFTkNJTENUTCwgY3R4LT5zdGVuY2lsY3RsLA0KPiAtCQkgIE1HQV9E TUFQQUQsIDB4MDAwMDAwMDAsIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDApOw0KPiAtDQo+IC0J QURWQU5DRV9ETUEoKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIF9faW5saW5lX18gdm9pZCBt Z2FfZzIwMF9lbWl0X3RleDAoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0K PiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2 Ow0KPiAtCWRybV9tZ2FfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9wcml2LT50ZXhf c3RhdGVbMF07DQo+IC0JRE1BX0xPQ0FMUzsNCj4gLQ0KPiAtCUJFR0lOX0RNQSg0KTsNCj4g LQ0KPiAtCURNQV9CTE9DSyhNR0FfVEVYQ1RMMiwgdGV4LT50ZXhjdGwyLA0KPiAtCQkgIE1H QV9URVhDVEwsIHRleC0+dGV4Y3RsLA0KPiAtCQkgIE1HQV9URVhGSUxURVIsIHRleC0+dGV4 ZmlsdGVyLA0KPiAtCQkgIE1HQV9URVhCT1JERVJDT0wsIHRleC0+dGV4Ym9yZGVyY29sKTsN Cj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfVEVYT1JHLCB0ZXgtPnRleG9yZywNCj4gLQkJICBN R0FfVEVYT1JHMSwgdGV4LT50ZXhvcmcxLA0KPiAtCQkgIE1HQV9URVhPUkcyLCB0ZXgtPnRl eG9yZzIsIE1HQV9URVhPUkczLCB0ZXgtPnRleG9yZzMpOw0KPiAtDQo+IC0JRE1BX0JMT0NL KE1HQV9URVhPUkc0LCB0ZXgtPnRleG9yZzQsDQo+IC0JCSAgTUdBX1RFWFdJRFRILCB0ZXgt PnRleHdpZHRoLA0KPiAtCQkgIE1HQV9URVhIRUlHSFQsIHRleC0+dGV4aGVpZ2h0LCBNR0Ff V1IyNCwgdGV4LT50ZXh3aWR0aCk7DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX1dSMzQsIHRl eC0+dGV4aGVpZ2h0LA0KPiAtCQkgIE1HQV9URVhUUkFOUywgMHgwMDAwZmZmZiwNCj4gLQkJ ICBNR0FfVEVYVFJBTlNISUdILCAweDAwMDBmZmZmLCBNR0FfRE1BUEFELCAweDAwMDAwMDAw KTsNCj4gLQ0KPiAtCUFEVkFOQ0VfRE1BKCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBfX2lu bGluZV9fIHZvaWQgbWdhX2c0MDBfZW1pdF90ZXgwKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZf cHJpdikNCj4gLXsNCj4gLQlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJp di0+c2FyZWFfcHJpdjsNCj4gLQlkcm1fbWdhX3RleHR1cmVfcmVnc190ICp0ZXggPSAmc2Fy ZWFfcHJpdi0+dGV4X3N0YXRlWzBdOw0KPiAtCURNQV9MT0NBTFM7DQo+IC0NCj4gLS8qCXBy aW50aygibWdhX2c0MDBfZW1pdF90ZXgwICV4ICV4ICV4XG4iLCB0ZXgtPnRleG9yZywgKi8N Cj4gLS8qCSAgICAgICB0ZXgtPnRleGN0bCwgdGV4LT50ZXhjdGwyKTsgKi8NCj4gLQ0KPiAt CUJFR0lOX0RNQSg2KTsNCj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfVEVYQ1RMMiwgdGV4LT50 ZXhjdGwyIHwgTUdBX0c0MDBfVEMyX01BR0lDLA0KPiAtCQkgIE1HQV9URVhDVEwsIHRleC0+ dGV4Y3RsLA0KPiAtCQkgIE1HQV9URVhGSUxURVIsIHRleC0+dGV4ZmlsdGVyLA0KPiAtCQkg IE1HQV9URVhCT1JERVJDT0wsIHRleC0+dGV4Ym9yZGVyY29sKTsNCj4gLQ0KPiAtCURNQV9C TE9DSyhNR0FfVEVYT1JHLCB0ZXgtPnRleG9yZywNCj4gLQkJICBNR0FfVEVYT1JHMSwgdGV4 LT50ZXhvcmcxLA0KPiAtCQkgIE1HQV9URVhPUkcyLCB0ZXgtPnRleG9yZzIsIE1HQV9URVhP UkczLCB0ZXgtPnRleG9yZzMpOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9URVhPUkc0LCB0 ZXgtPnRleG9yZzQsDQo+IC0JCSAgTUdBX1RFWFdJRFRILCB0ZXgtPnRleHdpZHRoLA0KPiAt CQkgIE1HQV9URVhIRUlHSFQsIHRleC0+dGV4aGVpZ2h0LCBNR0FfV1I0OSwgMHgwMDAwMDAw MCk7DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX1dSNTcsIDB4MDAwMDAwMDAsDQo+IC0JCSAg TUdBX1dSNTMsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX1dSNjEsIDB4MDAwMDAwMDAsIE1H QV9XUjUyLCBNR0FfRzQwMF9XUl9NQUdJQyk7DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX1dS NjAsIE1HQV9HNDAwX1dSX01BR0lDLA0KPiAtCQkgIE1HQV9XUjU0LCB0ZXgtPnRleHdpZHRo IHwgTUdBX0c0MDBfV1JfTUFHSUMsDQo+IC0JCSAgTUdBX1dSNjIsIHRleC0+dGV4aGVpZ2h0 IHwgTUdBX0c0MDBfV1JfTUFHSUMsDQo+IC0JCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCk7 DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJICBN R0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAtCQkgIE1HQV9URVhUUkFOUywgMHgwMDAwZmZm ZiwgTUdBX1RFWFRSQU5TSElHSCwgMHgwMDAwZmZmZik7DQo+IC0NCj4gLQlBRFZBTkNFX0RN QSgpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nNDAwX2Vt aXRfdGV4MShkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0JZHJtX21n YV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JZHJt X21nYV90ZXh0dXJlX3JlZ3NfdCAqdGV4ID0gJnNhcmVhX3ByaXYtPnRleF9zdGF0ZVsxXTsN Cj4gLQlETUFfTE9DQUxTOw0KPiAtDQo+IC0vKglwcmludGsoIm1nYV9nNDAwX2VtaXRfdGV4 MSAleCAleCAleFxuIiwgdGV4LT50ZXhvcmcsICAqLw0KPiAtLyoJICAgICAgIHRleC0+dGV4 Y3RsLCB0ZXgtPnRleGN0bDIpOyAqLw0KPiAtDQo+IC0JQkVHSU5fRE1BKDUpOw0KPiAtDQo+ IC0JRE1BX0JMT0NLKE1HQV9URVhDVEwyLCAodGV4LT50ZXhjdGwyIHwNCj4gLQkJCQlNR0Ff TUFQMV9FTkFCTEUgfA0KPiAtCQkJCU1HQV9HNDAwX1RDMl9NQUdJQyksDQo+IC0JCSAgTUdB X1RFWENUTCwgdGV4LT50ZXhjdGwsDQo+IC0JCSAgTUdBX1RFWEZJTFRFUiwgdGV4LT50ZXhm aWx0ZXIsDQo+IC0JCSAgTUdBX1RFWEJPUkRFUkNPTCwgdGV4LT50ZXhib3JkZXJjb2wpOw0K PiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9URVhPUkcsIHRleC0+dGV4b3JnLA0KPiAtCQkgIE1H QV9URVhPUkcxLCB0ZXgtPnRleG9yZzEsDQo+IC0JCSAgTUdBX1RFWE9SRzIsIHRleC0+dGV4 b3JnMiwgTUdBX1RFWE9SRzMsIHRleC0+dGV4b3JnMyk7DQo+IC0NCj4gLQlETUFfQkxPQ0so TUdBX1RFWE9SRzQsIHRleC0+dGV4b3JnNCwNCj4gLQkJICBNR0FfVEVYV0lEVEgsIHRleC0+ dGV4d2lkdGgsDQo+IC0JCSAgTUdBX1RFWEhFSUdIVCwgdGV4LT50ZXhoZWlnaHQsIE1HQV9X UjQ5LCAweDAwMDAwMDAwKTsNCj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfV1I1NywgMHgwMDAw MDAwMCwNCj4gLQkJICBNR0FfV1I1MywgMHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfV1I2MSwg MHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfV1I1MiwgdGV4LT50ZXh3aWR0aCB8IE1HQV9HNDAw X1dSX01BR0lDKTsNCj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfV1I2MCwgdGV4LT50ZXhoZWln aHQgfCBNR0FfRzQwMF9XUl9NQUdJQywNCj4gLQkJICBNR0FfVEVYVFJBTlMsIDB4MDAwMGZm ZmYsDQo+IC0JCSAgTUdBX1RFWFRSQU5TSElHSCwgMHgwMDAwZmZmZiwNCj4gLQkJICBNR0Ff VEVYQ1RMMiwgdGV4LT50ZXhjdGwyIHwgTUdBX0c0MDBfVEMyX01BR0lDKTsNCj4gLQ0KPiAt CUFEVkFOQ0VfRE1BKCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBfX2lubGluZV9fIHZvaWQg bWdhX2cyMDBfZW1pdF9waXBlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsN Cj4gLQlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJp djsNCj4gLQl1bnNpZ25lZCBpbnQgcGlwZSA9IHNhcmVhX3ByaXYtPndhcnBfcGlwZTsNCj4g LQlETUFfTE9DQUxTOw0KPiAtDQo+IC0JQkVHSU5fRE1BKDMpOw0KPiAtDQo+IC0JRE1BX0JM T0NLKE1HQV9XSUFERFIsIE1HQV9XTU9ERV9TVVNQRU5ELA0KPiAtCQkgIE1HQV9XVlJUWFNa LCAweDAwMDAwMDA3LA0KPiAtCQkgIE1HQV9XRkxBRywgMHgwMDAwMDAwMCwgTUdBX1dSMjQs IDB4MDAwMDAwMDApOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9XUjI1LCAweDAwMDAwMTAw LA0KPiAtCQkgIE1HQV9XUjM0LCAweDAwMDAwMDAwLA0KPiAtCQkgIE1HQV9XUjQyLCAweDAw MDBmZmZmLCBNR0FfV1I2MCwgMHgwMDAwZmZmZik7DQo+IC0NCj4gLQkvKiBQYWRkaW5nIHJl cXVpcmVkIGR1ZSB0byBoYXJkd2FyZSBidWcuDQo+IC0JICovDQo+IC0JRE1BX0JMT0NLKE1H QV9ETUFQQUQsIDB4ZmZmZmZmZmYsDQo+IC0JCSAgTUdBX0RNQVBBRCwgMHhmZmZmZmZmZiwN Cj4gLQkJICBNR0FfRE1BUEFELCAweGZmZmZmZmZmLA0KPiAtCQkgIE1HQV9XSUFERFIsIChk ZXZfcHJpdi0+d2FycF9waXBlX3BoeXNbcGlwZV0gfA0KPiAtCQkJICAgICAgIE1HQV9XTU9E RV9TVEFSVCB8IGRldl9wcml2LT53YWdwX2VuYWJsZSkpOw0KPiAtDQo+IC0JQURWQU5DRV9E TUEoKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzQwMF9l bWl0X3BpcGUoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCWRybV9t Z2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCXVu c2lnbmVkIGludCBwaXBlID0gc2FyZWFfcHJpdi0+d2FycF9waXBlOw0KPiAtCURNQV9MT0NB TFM7DQo+IC0NCj4gLS8qCXByaW50aygibWdhX2c0MDBfZW1pdF9waXBlICV4XG4iLCBwaXBl KTsgKi8NCj4gLQ0KPiAtCUJFR0lOX0RNQSgxMCk7DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdB X1dJQUREUjIsIE1HQV9XTU9ERV9TVVNQRU5ELA0KPiAtCQkgIE1HQV9ETUFQQUQsIDB4MDAw MDAwMDAsDQo+IC0JCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwgTUdBX0RNQVBBRCwgMHgw MDAwMDAwMCk7DQo+IC0NCj4gLQlpZiAocGlwZSAmIE1HQV9UMikgew0KPiAtCQlETUFfQkxP Q0soTUdBX1dWUlRYU1osIDB4MDAwMDFlMDksDQo+IC0JCQkgIE1HQV9ETUFQQUQsIDB4MDAw MDAwMDAsDQo+IC0JCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsIE1HQV9ETUFQQUQsIDB4 MDAwMDAwMDApOw0KPiAtDQo+IC0JCURNQV9CTE9DSyhNR0FfV0FDQ0VQVFNFUSwgMHgwMDAw MDAwMCwNCj4gLQkJCSAgTUdBX1dBQ0NFUFRTRVEsIDB4MDAwMDAwMDAsDQo+IC0JCQkgIE1H QV9XQUNDRVBUU0VRLCAweDAwMDAwMDAwLA0KPiAtCQkJICBNR0FfV0FDQ0VQVFNFUSwgMHgx ZTAwMDAwMCk7DQo+IC0JfSBlbHNlIHsNCj4gLQkJaWYgKGRldl9wcml2LT53YXJwX3BpcGUg JiBNR0FfVDIpIHsNCj4gLQkJCS8qIEZsdXNoIHRoZSBXQVJQIHBpcGUgKi8NCj4gLQkJCURN QV9CTE9DSyhNR0FfWURTVCwgMHgwMDAwMDAwMCwNCj4gLQkJCQkgIE1HQV9GWExFRlQsIDB4 MDAwMDAwMDAsDQo+IC0JCQkJICBNR0FfRlhSSUdIVCwgMHgwMDAwMDAwMSwNCj4gLQkJCQkg IE1HQV9EV0dDVEwsIE1HQV9EV0dDVExfRkxVU0gpOw0KPiAtDQo+IC0JCQlETUFfQkxPQ0so TUdBX0xFTiArIE1HQV9FWEVDLCAweDAwMDAwMDAxLA0KPiAtCQkJCSAgTUdBX0RXR1NZTkMs IDB4MDAwMDcwMDAsDQo+IC0JCQkJICBNR0FfVEVYQ1RMMiwgTUdBX0c0MDBfVEMyX01BR0lD LA0KPiAtCQkJCSAgTUdBX0xFTiArIE1HQV9FWEVDLCAweDAwMDAwMDAwKTsNCj4gLQ0KPiAt CQkJRE1BX0JMT0NLKE1HQV9URVhDVEwyLCAoTUdBX0RVQUxURVggfA0KPiAtCQkJCQkJTUdB X0c0MDBfVEMyX01BR0lDKSwNCj4gLQkJCQkgIE1HQV9MRU4gKyBNR0FfRVhFQywgMHgwMDAw MDAwMCwNCj4gLQkJCQkgIE1HQV9URVhDVEwyLCBNR0FfRzQwMF9UQzJfTUFHSUMsDQo+IC0J CQkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsNCj4gLQkJfQ0KPiAtDQo+IC0JCURNQV9C TE9DSyhNR0FfV1ZSVFhTWiwgMHgwMDAwMTgwNywNCj4gLQkJCSAgTUdBX0RNQVBBRCwgMHgw MDAwMDAwMCwNCj4gLQkJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwgTUdBX0RNQVBBRCwg MHgwMDAwMDAwMCk7DQo+IC0NCj4gLQkJRE1BX0JMT0NLKE1HQV9XQUNDRVBUU0VRLCAweDAw MDAwMDAwLA0KPiAtCQkJICBNR0FfV0FDQ0VQVFNFUSwgMHgwMDAwMDAwMCwNCj4gLQkJCSAg TUdBX1dBQ0NFUFRTRVEsIDB4MDAwMDAwMDAsDQo+IC0JCQkgIE1HQV9XQUNDRVBUU0VRLCAw eDE4MDAwMDAwKTsNCj4gLQl9DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX1dGTEFHLCAweDAw MDAwMDAwLA0KPiAtCQkgIE1HQV9XRkxBRzEsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX1dS NTYsIE1HQV9HNDAwX1dSNTZfTUFHSUMsIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDApOw0KPiAt DQo+IC0JRE1BX0JMT0NLKE1HQV9XUjQ5LCAweDAwMDAwMDAwLAkvKiB0ZXgwICAgICAgICAg ICAgICAqLw0KPiAtCQkgIE1HQV9XUjU3LCAweDAwMDAwMDAwLAkvKiB0ZXgwICAgICAgICAg ICAgICAqLw0KPiAtCQkgIE1HQV9XUjUzLCAweDAwMDAwMDAwLAkvKiB0ZXgxICAgICAgICAg ICAgICAqLw0KPiAtCQkgIE1HQV9XUjYxLCAweDAwMDAwMDAwKTsJLyogdGV4MSAgICAgICAg ICAgICAgKi8NCj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfV1I1NCwgTUdBX0c0MDBfV1JfTUFH SUMsCS8qIHRleDAgd2lkdGggICAgICAgICovDQo+IC0JCSAgTUdBX1dSNjIsIE1HQV9HNDAw X1dSX01BR0lDLAkvKiB0ZXgwIGhlaWdodCAgICAgICAqLw0KPiAtCQkgIE1HQV9XUjUyLCBN R0FfRzQwMF9XUl9NQUdJQywJLyogdGV4MSB3aWR0aCAgICAgICAgKi8NCj4gLQkJICBNR0Ff V1I2MCwgTUdBX0c0MDBfV1JfTUFHSUMpOwkvKiB0ZXgxIGhlaWdodCAgICAgICAqLw0KPiAt DQo+IC0JLyogUGFkZGluZyByZXF1aXJlZCBkdWUgdG8gaGFyZHdhcmUgYnVnICovDQo+IC0J RE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4ZmZmZmZmZmYsDQo+IC0JCSAgTUdBX0RNQVBBRCwg MHhmZmZmZmZmZiwNCj4gLQkJICBNR0FfRE1BUEFELCAweGZmZmZmZmZmLA0KPiAtCQkgIE1H QV9XSUFERFIyLCAoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzW3BpcGVdIHwNCj4gLQkJCQlN R0FfV01PREVfU1RBUlQgfCBkZXZfcHJpdi0+d2FncF9lbmFibGUpKTsNCj4gLQ0KPiAtCUFE VkFOQ0VfRE1BKCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIG1nYV9nMjAwX2VtaXRf c3RhdGUoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCWRybV9tZ2Ff c2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCXVuc2ln bmVkIGludCBkaXJ0eSA9IHNhcmVhX3ByaXYtPmRpcnR5Ow0KPiAtDQo+IC0JaWYgKHNhcmVh X3ByaXYtPndhcnBfcGlwZSAhPSBkZXZfcHJpdi0+d2FycF9waXBlKSB7DQo+IC0JCW1nYV9n MjAwX2VtaXRfcGlwZShkZXZfcHJpdik7DQo+IC0JCWRldl9wcml2LT53YXJwX3BpcGUgPSBz YXJlYV9wcml2LT53YXJwX3BpcGU7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGRpcnR5ICYgTUdB X1VQTE9BRF9DT05URVhUKSB7DQo+IC0JCW1nYV9nMjAwX2VtaXRfY29udGV4dChkZXZfcHJp dik7DQo+IC0JCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5NR0FfVVBMT0FEX0NPTlRFWFQ7DQo+ IC0JfQ0KPiAtDQo+IC0JaWYgKGRpcnR5ICYgTUdBX1VQTE9BRF9URVgwKSB7DQo+IC0JCW1n YV9nMjAwX2VtaXRfdGV4MChkZXZfcHJpdik7DQo+IC0JCXNhcmVhX3ByaXYtPmRpcnR5ICY9 IH5NR0FfVVBMT0FEX1RFWDA7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBt Z2FfZzQwMF9lbWl0X3N0YXRlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsN Cj4gLQlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJp djsNCj4gLQl1bnNpZ25lZCBpbnQgZGlydHkgPSBzYXJlYV9wcml2LT5kaXJ0eTsNCj4gLQlp bnQgbXVsdGl0ZXggPSBzYXJlYV9wcml2LT53YXJwX3BpcGUgJiBNR0FfVDI7DQo+IC0NCj4g LQlpZiAoc2FyZWFfcHJpdi0+d2FycF9waXBlICE9IGRldl9wcml2LT53YXJwX3BpcGUpIHsN Cj4gLQkJbWdhX2c0MDBfZW1pdF9waXBlKGRldl9wcml2KTsNCj4gLQkJZGV2X3ByaXYtPndh cnBfcGlwZSA9IHNhcmVhX3ByaXYtPndhcnBfcGlwZTsNCj4gLQl9DQo+IC0NCj4gLQlpZiAo ZGlydHkgJiBNR0FfVVBMT0FEX0NPTlRFWFQpIHsNCj4gLQkJbWdhX2c0MDBfZW1pdF9jb250 ZXh0KGRldl9wcml2KTsNCj4gLQkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfk1HQV9VUExPQURf Q09OVEVYVDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoZGlydHkgJiBNR0FfVVBMT0FEX1RFWDAp IHsNCj4gLQkJbWdhX2c0MDBfZW1pdF90ZXgwKGRldl9wcml2KTsNCj4gLQkJc2FyZWFfcHJp di0+ZGlydHkgJj0gfk1HQV9VUExPQURfVEVYMDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoKGRp cnR5ICYgTUdBX1VQTE9BRF9URVgxKSAmJiBtdWx0aXRleCkgew0KPiAtCQltZ2FfZzQwMF9l bWl0X3RleDEoZGV2X3ByaXYpOw0KPiAtCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+TUdBX1VQ TE9BRF9URVgxOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtICog U0FSRUEgc3RhdGUgdmVyaWZpY2F0aW9uDQo+IC0gKi8NCj4gLQ0KPiAtLyogRGlzYWxsb3cg YWxsIHdyaXRlIGRlc3RpbmF0aW9ucyBleGNlcHQgdGhlIGZyb250IGFuZCBiYWNrYnVmZmVy Lg0KPiAtICovDQo+IC1zdGF0aWMgaW50IG1nYV92ZXJpZnlfY29udGV4dChkcm1fbWdhX3By aXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0JZHJtX21nYV9zYXJlYV90ICpzYXJlYV9w cml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JZHJtX21nYV9jb250ZXh0X3JlZ3Nf dCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7DQo+IC0NCj4gLQlpZiAoY3R4 LT5kc3RvcmcgIT0gZGV2X3ByaXYtPmZyb250X29mZnNldCAmJg0KPiAtCSAgICBjdHgtPmRz dG9yZyAhPSBkZXZfcHJpdi0+YmFja19vZmZzZXQpIHsNCj4gLQkJRFJNX0VSUk9SKCIqKiog YmFkIERTVE9SRzogJXggKGZyb250ICV4LCBiYWNrICV4KVxuXG4iLA0KPiAtCQkJICBjdHgt PmRzdG9yZywgZGV2X3ByaXYtPmZyb250X29mZnNldCwNCj4gLQkJCSAgZGV2X3ByaXYtPmJh Y2tfb2Zmc2V0KTsNCj4gLQkJY3R4LT5kc3RvcmcgPSAwOw0KPiAtCQlyZXR1cm4gLUVJTlZB TDsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtLyogRGlzYWxs b3cgdGV4dHVyZSByZWFkcyBmcm9tIFBDSSBzcGFjZS4NCj4gLSAqLw0KPiAtc3RhdGljIGlu dCBtZ2FfdmVyaWZ5X3RleChkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCB1bml0 KQ0KPiAtew0KPiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5z YXJlYV9wcml2Ow0KPiAtCWRybV9tZ2FfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9w cml2LT50ZXhfc3RhdGVbdW5pdF07DQo+IC0JdW5zaWduZWQgaW50IG9yZzsNCj4gLQ0KPiAt CW9yZyA9IHRleC0+dGV4b3JnICYgKE1HQV9URVhPUkdNQVBfTUFTSyB8IE1HQV9URVhPUkdB Q0NfTUFTSyk7DQo+IC0NCj4gLQlpZiAob3JnID09IChNR0FfVEVYT1JHTUFQX1NZU01FTSB8 IE1HQV9URVhPUkdBQ0NfUENJKSkgew0KPiAtCQlEUk1fRVJST1IoIioqKiBiYWQgVEVYT1JH OiAweCV4LCB1bml0ICVkXG4iLCB0ZXgtPnRleG9yZywgdW5pdCk7DQo+IC0JCXRleC0+dGV4 b3JnID0gMDsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJu IDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgbWdhX3ZlcmlmeV9zdGF0ZShkcm1fbWdh X3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0JZHJtX21nYV9zYXJlYV90ICpzYXJl YV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JdW5zaWduZWQgaW50IGRpcnR5 ID0gc2FyZWFfcHJpdi0+ZGlydHk7DQo+IC0JaW50IHJldCA9IDA7DQo+IC0NCj4gLQlpZiAo c2FyZWFfcHJpdi0+bmJveCA+IE1HQV9OUl9TQVJFQV9DTElQUkVDVFMpDQo+IC0JCXNhcmVh X3ByaXYtPm5ib3ggPSBNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTOw0KPiAtDQo+IC0JaWYgKGRp cnR5ICYgTUdBX1VQTE9BRF9DT05URVhUKQ0KPiAtCQlyZXQgfD0gbWdhX3ZlcmlmeV9jb250 ZXh0KGRldl9wcml2KTsNCj4gLQ0KPiAtCWlmIChkaXJ0eSAmIE1HQV9VUExPQURfVEVYMCkN Cj4gLQkJcmV0IHw9IG1nYV92ZXJpZnlfdGV4KGRldl9wcml2LCAwKTsNCj4gLQ0KPiAtCWlm IChkZXZfcHJpdi0+Y2hpcHNldCA+PSBNR0FfQ0FSRF9UWVBFX0c0MDApIHsNCj4gLQkJaWYg KGRpcnR5ICYgTUdBX1VQTE9BRF9URVgxKQ0KPiAtCQkJcmV0IHw9IG1nYV92ZXJpZnlfdGV4 KGRldl9wcml2LCAxKTsNCj4gLQ0KPiAtCQlpZiAoZGlydHkgJiBNR0FfVVBMT0FEX1BJUEUp DQo+IC0JCQlyZXQgfD0gKHNhcmVhX3ByaXYtPndhcnBfcGlwZSA+IE1HQV9NQVhfRzQwMF9Q SVBFUyk7DQo+IC0JfSBlbHNlIHsNCj4gLQkJaWYgKGRpcnR5ICYgTUdBX1VQTE9BRF9QSVBF KQ0KPiAtCQkJcmV0IHw9IChzYXJlYV9wcml2LT53YXJwX3BpcGUgPiBNR0FfTUFYX0cyMDBf UElQRVMpOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiAocmV0ID09IDApOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgaW50IG1nYV92ZXJpZnlfaWxvYWQoZHJtX21nYV9wcml2YXRlX3QgKmRl dl9wcml2LA0KPiAtCQkJICAgIHVuc2lnbmVkIGludCBkc3RvcmcsIHVuc2lnbmVkIGludCBs ZW5ndGgpDQo+IC17DQo+IC0JaWYgKGRzdG9yZyA8IGRldl9wcml2LT50ZXh0dXJlX29mZnNl dCB8fA0KPiAtCSAgICBkc3RvcmcgKyBsZW5ndGggPiAoZGV2X3ByaXYtPnRleHR1cmVfb2Zm c2V0ICsNCj4gLQkJCSAgICAgICBkZXZfcHJpdi0+dGV4dHVyZV9zaXplKSkgew0KPiAtCQlE Uk1fRVJST1IoIioqKiBiYWQgaWxvYWQgRFNUT1JHOiAweCV4XG4iLCBkc3RvcmcpOw0KPiAt CQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAobGVuZ3RoICYgTUdBX0lM T0FEX01BU0spIHsNCj4gLQkJRFJNX0VSUk9SKCIqKiogYmFkIGlsb2FkIGxlbmd0aDogMHgl eFxuIiwNCj4gLQkJCSAgbGVuZ3RoICYgTUdBX0lMT0FEX01BU0spOw0KPiAtCQlyZXR1cm4g LUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIGludCBtZ2FfdmVyaWZ5X2JsaXQoZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2LA0K PiAtCQkJICAgdW5zaWduZWQgaW50IHNyY29yZywgdW5zaWduZWQgaW50IGRzdG9yZykNCj4g LXsNCj4gLQlpZiAoKHNyY29yZyAmIDB4MykgPT0gKE1HQV9TUkNBQ0NfUENJIHwgTUdBX1NS Q01BUF9TWVNNRU0pIHx8DQo+IC0JICAgIChkc3RvcmcgJiAweDMpID09IChNR0FfU1JDQUND X1BDSSB8IE1HQV9TUkNNQVBfU1lTTUVNKSkgew0KPiAtCQlEUk1fRVJST1IoIioqKiBiYWQg YmxpdDogc3JjPTB4JXggZHN0PTB4JXhcbiIsIHNyY29yZywgZHN0b3JnKTsNCj4gLQkJcmV0 dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC0vKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQo+IC0gKg0KPiAtICovDQo+IC0NCj4gLXN0YXRpYyB2b2lkIG1nYV9kbWFf ZGlzcGF0Y2hfY2xlYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX21nYV9jbGVhcl90 ICpjbGVhcikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9w cml2LT5zYXJlYV9wcml2Ow0KPiAtCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZz YXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOw0KPiAtCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpw Ym94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7DQo+IC0JaW50IG5ib3ggPSBzYXJlYV9wcml2LT5u Ym94Ow0KPiAtCWludCBpOw0KPiAtCURNQV9MT0NBTFM7DQo+IC0JRFJNX0RFQlVHKCJcbiIp Ow0KPiAtDQo+IC0JQkVHSU5fRE1BKDEpOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9ETUFQ QUQsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJ ICBNR0FfRFdHU1lOQywgMHgwMDAwNzEwMCwgTUdBX0RXR1NZTkMsIDB4MDAwMDcwMDApOw0K PiAtDQo+IC0JQURWQU5DRV9ETUEoKTsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBuYm94 OyBpKyspIHsNCj4gLQkJc3RydWN0IGRybV9jbGlwX3JlY3QgKmJveCA9ICZwYm94W2ldOw0K PiAtCQl1MzIgaGVpZ2h0ID0gYm94LT55MiAtIGJveC0+eTE7DQo+IC0NCj4gLQkJRFJNX0RF QlVHKCIgICBmcm9tPSVkLCVkIHRvPSVkLCVkXG4iLA0KPiAtCQkJICBib3gtPngxLCBib3gt PnkxLCBib3gtPngyLCBib3gtPnkyKTsNCj4gLQ0KPiAtCQlpZiAoY2xlYXItPmZsYWdzICYg TUdBX0ZST05UKSB7DQo+IC0JCQlCRUdJTl9ETUEoMik7DQo+IC0NCj4gLQkJCURNQV9CTE9D SyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAtCQkJCSAgTUdBX1BMTldULCBjbGVhci0+ Y29sb3JfbWFzaywNCj4gLQkJCQkgIE1HQV9ZRFNUTEVOLCAoYm94LT55MSA8PCAxNikgfCBo ZWlnaHQsDQo+IC0JCQkJICBNR0FfRlhCTkRSWSwgKGJveC0+eDIgPDwgMTYpIHwgYm94LT54 MSk7DQo+IC0NCj4gLQkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAt CQkJCSAgTUdBX0ZDT0wsIGNsZWFyLT5jbGVhcl9jb2xvciwNCj4gLQkJCQkgIE1HQV9EU1RP UkcsIGRldl9wcml2LT5mcm9udF9vZmZzZXQsDQo+IC0JCQkJICBNR0FfRFdHQ1RMICsgTUdB X0VYRUMsIGRldl9wcml2LT5jbGVhcl9jbWQpOw0KPiAtDQo+IC0JCQlBRFZBTkNFX0RNQSgp Ow0KPiAtCQl9DQo+IC0NCj4gLQkJaWYgKGNsZWFyLT5mbGFncyAmIE1HQV9CQUNLKSB7DQo+ IC0JCQlCRUdJTl9ETUEoMik7DQo+IC0NCj4gLQkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAw eDAwMDAwMDAwLA0KPiAtCQkJCSAgTUdBX1BMTldULCBjbGVhci0+Y29sb3JfbWFzaywNCj4g LQkJCQkgIE1HQV9ZRFNUTEVOLCAoYm94LT55MSA8PCAxNikgfCBoZWlnaHQsDQo+IC0JCQkJ ICBNR0FfRlhCTkRSWSwgKGJveC0+eDIgPDwgMTYpIHwgYm94LT54MSk7DQo+IC0NCj4gLQkJ CURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAtCQkJCSAgTUdBX0ZDT0ws IGNsZWFyLT5jbGVhcl9jb2xvciwNCj4gLQkJCQkgIE1HQV9EU1RPUkcsIGRldl9wcml2LT5i YWNrX29mZnNldCwNCj4gLQkJCQkgIE1HQV9EV0dDVEwgKyBNR0FfRVhFQywgZGV2X3ByaXYt PmNsZWFyX2NtZCk7DQo+IC0NCj4gLQkJCUFEVkFOQ0VfRE1BKCk7DQo+IC0JCX0NCj4gLQ0K PiAtCQlpZiAoY2xlYXItPmZsYWdzICYgTUdBX0RFUFRIKSB7DQo+IC0JCQlCRUdJTl9ETUEo Mik7DQo+IC0NCj4gLQkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAt CQkJCSAgTUdBX1BMTldULCBjbGVhci0+ZGVwdGhfbWFzaywNCj4gLQkJCQkgIE1HQV9ZRFNU TEVOLCAoYm94LT55MSA8PCAxNikgfCBoZWlnaHQsDQo+IC0JCQkJICBNR0FfRlhCTkRSWSwg KGJveC0+eDIgPDwgMTYpIHwgYm94LT54MSk7DQo+IC0NCj4gLQkJCURNQV9CTE9DSyhNR0Ff RE1BUEFELCAweDAwMDAwMDAwLA0KPiAtCQkJCSAgTUdBX0ZDT0wsIGNsZWFyLT5jbGVhcl9k ZXB0aCwNCj4gLQkJCQkgIE1HQV9EU1RPUkcsIGRldl9wcml2LT5kZXB0aF9vZmZzZXQsDQo+ IC0JCQkJICBNR0FfRFdHQ1RMICsgTUdBX0VYRUMsIGRldl9wcml2LT5jbGVhcl9jbWQpOw0K PiAtDQo+IC0JCQlBRFZBTkNFX0RNQSgpOw0KPiAtCQl9DQo+IC0NCj4gLQl9DQo+IC0NCj4g LQlCRUdJTl9ETUEoMSk7DQo+IC0NCj4gLQkvKiBGb3JjZSByZXNldCBvZiBEV0dDVEwgKi8N Cj4gLQlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfRE1B UEFELCAweDAwMDAwMDAwLA0KPiAtCQkgIE1HQV9QTE5XVCwgY3R4LT5wbG53dCwgTUdBX0RX R0NUTCwgY3R4LT5kd2djdGwpOw0KPiAtDQo+IC0JQURWQU5DRV9ETUEoKTsNCj4gLQ0KPiAt CUZMVVNIX0RNQSgpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3Bh dGNoX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1fbWdhX3By aXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2Ffc2Fy ZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCWRybV9tZ2Ff Y29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOw0KPiAt CXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpwYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7DQo+IC0J aW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94Ow0KPiAtCWludCBpOw0KPiAtCURNQV9MT0NB TFM7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0Jc2FyZWFfcHJpdi0+bGFzdF9m cmFtZS5oZWFkID0gZGV2X3ByaXYtPnByaW0udGFpbDsNCj4gLQlzYXJlYV9wcml2LT5sYXN0 X2ZyYW1lLndyYXAgPSBkZXZfcHJpdi0+cHJpbS5sYXN0X3dyYXA7DQo+IC0NCj4gLQlCRUdJ Tl9ETUEoNCArIG5ib3gpOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAw MDAwMDAsDQo+IC0JCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfRFdH U1lOQywgMHgwMDAwNzEwMCwgTUdBX0RXR1NZTkMsIDB4MDAwMDcwMDApOw0KPiAtDQo+IC0J RE1BX0JMT0NLKE1HQV9EU1RPUkcsIGRldl9wcml2LT5mcm9udF9vZmZzZXQsDQo+IC0JCSAg TUdBX01BQ0NFU1MsIGRldl9wcml2LT5tYWNjZXNzLA0KPiAtCQkgIE1HQV9TUkNPUkcsIGRl dl9wcml2LT5iYWNrX29mZnNldCwNCj4gLQkJICBNR0FfQVI1LCBkZXZfcHJpdi0+ZnJvbnRf cGl0Y2gpOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsDQo+ IC0JCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfUExOV1QsIDB4ZmZm ZmZmZmYsIE1HQV9EV0dDVEwsIE1HQV9EV0dDVExfQ09QWSk7DQo+IC0NCj4gLQlmb3IgKGkg PSAwOyBpIDwgbmJveDsgaSsrKSB7DQo+IC0JCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3gg PSAmcGJveFtpXTsNCj4gLQkJdTMyIGhlaWdodCA9IGJveC0+eTIgLSBib3gtPnkxOw0KPiAt CQl1MzIgc3RhcnQgPSBib3gtPnkxICogZGV2X3ByaXYtPmZyb250X3BpdGNoOw0KPiAtDQo+ IC0JCURSTV9ERUJVRygiICAgZnJvbT0lZCwlZCB0bz0lZCwlZFxuIiwNCj4gLQkJCSAgYm94 LT54MSwgYm94LT55MSwgYm94LT54MiwgYm94LT55Mik7DQo+IC0NCj4gLQkJRE1BX0JMT0NL KE1HQV9BUjAsIHN0YXJ0ICsgYm94LT54MiAtIDEsDQo+IC0JCQkgIE1HQV9BUjMsIHN0YXJ0 ICsgYm94LT54MSwNCj4gLQkJCSAgTUdBX0ZYQk5EUlksICgoYm94LT54MiAtIDEpIDw8IDE2 KSB8IGJveC0+eDEsDQo+IC0JCQkgIE1HQV9ZRFNUTEVOICsgTUdBX0VYRUMsIChib3gtPnkx IDw8IDE2KSB8IGhlaWdodCk7DQo+IC0JfQ0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9ETUFQ QUQsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX1BMTldULCBjdHgtPnBsbnd0LA0KPiAtCQkg IE1HQV9TUkNPUkcsIGRldl9wcml2LT5mcm9udF9vZmZzZXQsIE1HQV9EV0dDVEwsIGN0eC0+ ZHdnY3RsKTsNCj4gLQ0KPiAtCUFEVkFOQ0VfRE1BKCk7DQo+IC0NCj4gLQlGTFVTSF9ETUEo KTsNCj4gLQ0KPiAtCURSTV9ERUJVRygiLi4uIGRvbmUuXG4iKTsNCj4gLX0NCj4gLQ0KPiAt c3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IGRybV9idWYgKmJ1ZikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVf dCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2FfYnVmX3ByaXZf dCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2Ffc2FyZWFfdCAq c2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCXUzMiBhZGRyZXNzID0g KHUzMikgYnVmLT5idXNfYWRkcmVzczsNCj4gLQl1MzIgbGVuZ3RoID0gKHUzMikgYnVmLT51 c2VkOw0KPiAtCWludCBpID0gMDsNCj4gLQlETUFfTE9DQUxTOw0KPiAtCURSTV9ERUJVRygi YnVmPSVkIHVzZWQ9JWRcbiIsIGJ1Zi0+aWR4LCBidWYtPnVzZWQpOw0KPiAtDQo+IC0JaWYg KGJ1Zi0+dXNlZCkgew0KPiAtCQlidWZfcHJpdi0+ZGlzcGF0Y2hlZCA9IDE7DQo+IC0NCj4g LQkJTUdBX0VNSVRfU1RBVEUoZGV2X3ByaXYsIHNhcmVhX3ByaXYtPmRpcnR5KTsNCj4gLQ0K PiAtCQlkbyB7DQo+IC0JCQlpZiAoaSA8IHNhcmVhX3ByaXYtPm5ib3gpIHsNCj4gLQkJCQlt Z2FfZW1pdF9jbGlwX3JlY3QoZGV2X3ByaXYsDQo+IC0JCQkJCQkgICAmc2FyZWFfcHJpdi0+ Ym94ZXNbaV0pOw0KPiAtCQkJfQ0KPiAtDQo+IC0JCQlCRUdJTl9ETUEoMSk7DQo+IC0NCj4g LQkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAtCQkJCSAgTUdBX0RN QVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJCQkgIE1HQV9TRUNBRERSRVNTLCAoYWRkcmVzcyB8 DQo+IC0JCQkJCQkgICBNR0FfRE1BX1ZFUlRFWCksDQo+IC0JCQkJICBNR0FfU0VDRU5ELCAo KGFkZHJlc3MgKyBsZW5ndGgpIHwNCj4gLQkJCQkJICAgICAgIGRldl9wcml2LT5kbWFfYWNj ZXNzKSk7DQo+IC0NCj4gLQkJCUFEVkFOQ0VfRE1BKCk7DQo+IC0JCX0gd2hpbGUgKCsraSA8 IHNhcmVhX3ByaXYtPm5ib3gpOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChidWZfcHJpdi0+ZGlz Y2FyZCkgew0KPiAtCQlBR0VfQlVGRkVSKGJ1Zl9wcml2KTsNCj4gLQkJYnVmLT5wZW5kaW5n ID0gMDsNCj4gLQkJYnVmLT51c2VkID0gMDsNCj4gLQkJYnVmX3ByaXYtPmRpc3BhdGNoZWQg PSAwOw0KPiAtDQo+IC0JCW1nYV9mcmVlbGlzdF9wdXQoZGV2LCBidWYpOw0KPiAtCX0NCj4g LQ0KPiAtCUZMVVNIX0RNQSgpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBtZ2FfZG1h X2Rpc3BhdGNoX2luZGljZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9i dWYgKmJ1ZiwNCj4gLQkJCQkgICAgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50 IGVuZCkNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOw0KPiAtCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRl dl9wcml2YXRlOw0KPiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2 LT5zYXJlYV9wcml2Ow0KPiAtCXUzMiBhZGRyZXNzID0gKHUzMikgYnVmLT5idXNfYWRkcmVz czsNCj4gLQlpbnQgaSA9IDA7DQo+IC0JRE1BX0xPQ0FMUzsNCj4gLQlEUk1fREVCVUcoImJ1 Zj0lZCBzdGFydD0lZCBlbmQ9JWRcbiIsIGJ1Zi0+aWR4LCBzdGFydCwgZW5kKTsNCj4gLQ0K PiAtCWlmIChzdGFydCAhPSBlbmQpIHsNCj4gLQkJYnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAx Ow0KPiAtDQo+IC0JCU1HQV9FTUlUX1NUQVRFKGRldl9wcml2LCBzYXJlYV9wcml2LT5kaXJ0 eSk7DQo+IC0NCj4gLQkJZG8gew0KPiAtCQkJaWYgKGkgPCBzYXJlYV9wcml2LT5uYm94KSB7 DQo+IC0JCQkJbWdhX2VtaXRfY2xpcF9yZWN0KGRldl9wcml2LA0KPiAtCQkJCQkJICAgJnNh cmVhX3ByaXYtPmJveGVzW2ldKTsNCj4gLQkJCX0NCj4gLQ0KPiAtCQkJQkVHSU5fRE1BKDEp Ow0KPiAtDQo+IC0JCQlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJ CQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsDQo+IC0JCQkJICBNR0FfU0VUVVBBRERSRVNT LCBhZGRyZXNzICsgc3RhcnQsDQo+IC0JCQkJICBNR0FfU0VUVVBFTkQsICgoYWRkcmVzcyAr IGVuZCkgfA0KPiAtCQkJCQkJIGRldl9wcml2LT5kbWFfYWNjZXNzKSk7DQo+IC0NCj4gLQkJ CUFEVkFOQ0VfRE1BKCk7DQo+IC0JCX0gd2hpbGUgKCsraSA8IHNhcmVhX3ByaXYtPm5ib3gp Ow0KPiAtCX0NCj4gLQ0KPiAtCWlmIChidWZfcHJpdi0+ZGlzY2FyZCkgew0KPiAtCQlBR0Vf QlVGRkVSKGJ1Zl9wcml2KTsNCj4gLQkJYnVmLT5wZW5kaW5nID0gMDsNCj4gLQkJYnVmLT51 c2VkID0gMDsNCj4gLQkJYnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAwOw0KPiAtDQo+IC0JCW1n YV9mcmVlbGlzdF9wdXQoZGV2LCBidWYpOw0KPiAtCX0NCj4gLQ0KPiAtCUZMVVNIX0RNQSgp Ow0KPiAtfQ0KPiAtDQo+IC0vKiBUaGlzIGNvcGllcyBhIDY0IGJ5dGUgYWxpZ25lZCBhZ3Ag cmVnaW9uIHRvIHRoZSBmcmFtYnVmZmVyIHdpdGggYQ0KPiAtICogc3RhbmRhcmQgYmxpdCwg dGhlIGlvY3RsIG5lZWRzIHRvIGRvIGNoZWNraW5nLg0KPiAtICovDQo+IC1zdGF0aWMgdm9p ZCBtZ2FfZG1hX2Rpc3BhdGNoX2lsb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fYnVmICpidWYsDQo+IC0JCQkJICAgdW5zaWduZWQgaW50IGRzdG9yZywgdW5zaWdu ZWQgaW50IGxlbmd0aCkNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXYg PSBidWYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgKmN0eCA9 ICZkZXZfcHJpdi0+c2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsNCj4gLQl1MzIgc3Jjb3Jn ID0NCj4gLQkgICAgYnVmLT5idXNfYWRkcmVzcyB8IGRldl9wcml2LT5kbWFfYWNjZXNzIHwg TUdBX1NSQ01BUF9TWVNNRU07DQo+IC0JdTMyIHkyOw0KPiAtCURNQV9MT0NBTFM7DQo+IC0J RFJNX0RFQlVHKCJidWY9JWQgdXNlZD0lZFxuIiwgYnVmLT5pZHgsIGJ1Zi0+dXNlZCk7DQo+ IC0NCj4gLQl5MiA9IGxlbmd0aCAvIDY0Ow0KPiAtDQo+IC0JQkVHSU5fRE1BKDUpOw0KPiAt DQo+IC0JRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX0RN QVBBRCwgMHgwMDAwMDAwMCwNCj4gLQkJICBNR0FfRFdHU1lOQywgMHgwMDAwNzEwMCwgTUdB X0RXR1NZTkMsIDB4MDAwMDcwMDApOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9EU1RPUkcs IGRzdG9yZywNCj4gLQkJICBNR0FfTUFDQ0VTUywgMHgwMDAwMDAwMCwgTUdBX1NSQ09SRywg c3Jjb3JnLCBNR0FfQVI1LCA2NCk7DQo+IC0NCj4gLQlETUFfQkxPQ0soTUdBX1BJVENILCA2 NCwNCj4gLQkJICBNR0FfUExOV1QsIDB4ZmZmZmZmZmYsDQo+IC0JCSAgTUdBX0RNQVBBRCwg MHgwMDAwMDAwMCwgTUdBX0RXR0NUTCwgTUdBX0RXR0NUTF9DT1BZKTsNCj4gLQ0KPiAtCURN QV9CTE9DSyhNR0FfQVIwLCA2MywNCj4gLQkJICBNR0FfQVIzLCAwLA0KPiAtCQkgIE1HQV9G WEJORFJZLCAoNjMgPDwgMTYpIHwgMCwgTUdBX1lEU1RMRU4gKyBNR0FfRVhFQywgeTIpOw0K PiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9QTE5XVCwgY3R4LT5wbG53dCwNCj4gLQkJICBNR0Ff U1JDT1JHLCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0LA0KPiAtCQkgIE1HQV9QSVRDSCwgZGV2 X3ByaXYtPmZyb250X3BpdGNoLCBNR0FfRFdHU1lOQywgMHgwMDAwNzAwMCk7DQo+IC0NCj4g LQlBRFZBTkNFX0RNQSgpOw0KPiAtDQo+IC0JQUdFX0JVRkZFUihidWZfcHJpdik7DQo+IC0N Cj4gLQlidWYtPnBlbmRpbmcgPSAwOw0KPiAtCWJ1Zi0+dXNlZCA9IDA7DQo+IC0JYnVmX3By aXYtPmRpc3BhdGNoZWQgPSAwOw0KPiAtDQo+IC0JbWdhX2ZyZWVsaXN0X3B1dChkZXYsIGJ1 Zik7DQo+IC0NCj4gLQlGTFVTSF9ETUEoKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQg bWdhX2RtYV9kaXNwYXRjaF9ibGl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9tZ2Ff YmxpdF90ICpibGl0KQ0KPiAtew0KPiAtCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0g ZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JZHJtX21nYV9jb250ZXh0X3JlZ3NfdCAqY3R4 ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7DQo+IC0Jc3RydWN0IGRybV9jbGlwX3Jl Y3QgKnBib3ggPSBzYXJlYV9wcml2LT5ib3hlczsNCj4gLQlpbnQgbmJveCA9IHNhcmVhX3By aXYtPm5ib3g7DQo+IC0JdTMyIHNjYW5kaXIgPSAwLCBpOw0KPiAtCURNQV9MT0NBTFM7DQo+ IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JQkVHSU5fRE1BKDQgKyBuYm94KTsNCj4g LQ0KPiAtCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLA0KPiAtCQkgIE1HQV9E TUFQQUQsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX0RXR1NZTkMsIDB4MDAwMDcxMDAsIE1H QV9EV0dTWU5DLCAweDAwMDA3MDAwKTsNCj4gLQ0KPiAtCURNQV9CTE9DSyhNR0FfRFdHQ1RM LCBNR0FfRFdHQ1RMX0NPUFksDQo+IC0JCSAgTUdBX1BMTldULCBibGl0LT5wbGFuZW1hc2ss DQo+IC0JCSAgTUdBX1NSQ09SRywgYmxpdC0+c3Jjb3JnLCBNR0FfRFNUT1JHLCBibGl0LT5k c3RvcmcpOw0KPiAtDQo+IC0JRE1BX0JMT0NLKE1HQV9TR04sIHNjYW5kaXIsDQo+IC0JCSAg TUdBX01BQ0NFU1MsIGRldl9wcml2LT5tYWNjZXNzLA0KPiAtCQkgIE1HQV9BUjUsIGJsaXQt PnlkaXIgKiBibGl0LT5zcmNfcGl0Y2gsDQo+IC0JCSAgTUdBX1BJVENILCBibGl0LT5kc3Rf cGl0Y2gpOw0KPiAtDQo+IC0JZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKykgew0KPiAtCQlp bnQgc3JjeCA9IHBib3hbaV0ueDEgKyBibGl0LT5kZWx0YV9zeDsNCj4gLQkJaW50IHNyY3kg PSBwYm94W2ldLnkxICsgYmxpdC0+ZGVsdGFfc3k7DQo+IC0JCWludCBkc3R4ID0gcGJveFtp XS54MSArIGJsaXQtPmRlbHRhX2R4Ow0KPiAtCQlpbnQgZHN0eSA9IHBib3hbaV0ueTEgKyBi bGl0LT5kZWx0YV9keTsNCj4gLQkJaW50IGggPSBwYm94W2ldLnkyIC0gcGJveFtpXS55MTsN Cj4gLQkJaW50IHcgPSBwYm94W2ldLngyIC0gcGJveFtpXS54MSAtIDE7DQo+IC0JCWludCBz dGFydDsNCj4gLQ0KPiAtCQlpZiAoYmxpdC0+eWRpciA9PSAtMSkNCj4gLQkJCXNyY3kgPSBi bGl0LT5oZWlnaHQgLSBzcmN5IC0gMTsNCj4gLQ0KPiAtCQlzdGFydCA9IHNyY3kgKiBibGl0 LT5zcmNfcGl0Y2ggKyBzcmN4Ow0KPiAtDQo+IC0JCURNQV9CTE9DSyhNR0FfQVIwLCBzdGFy dCArIHcsDQo+IC0JCQkgIE1HQV9BUjMsIHN0YXJ0LA0KPiAtCQkJICBNR0FfRlhCTkRSWSwg KChkc3R4ICsgdykgPDwgMTYpIHwgKGRzdHggJiAweGZmZmYpLA0KPiAtCQkJICBNR0FfWURT VExFTiArIE1HQV9FWEVDLCAoZHN0eSA8PCAxNikgfCBoKTsNCj4gLQl9DQo+IC0NCj4gLQkv KiBEbyBzb21ldGhpbmcgdG8gZmx1c2ggQUdQPw0KPiAtCSAqLw0KPiAtDQo+IC0JLyogRm9y Y2UgcmVzZXQgb2YgRFdHQ1RMICovDQo+IC0JRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAw MDAwMDAsDQo+IC0JCSAgTUdBX1BMTldULCBjdHgtPnBsbnd0LA0KPiAtCQkgIE1HQV9QSVRD SCwgZGV2X3ByaXYtPmZyb250X3BpdGNoLCBNR0FfRFdHQ1RMLCBjdHgtPmR3Z2N0bCk7DQo+ IC0NCj4gLQlBRFZBTkNFX0RNQSgpOw0KPiAtfQ0KPiAtDQo+IC0vKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ IC0gKg0KPiAtICovDQo+IC0NCj4gLXN0YXRpYyBpbnQgbWdhX2RtYV9jbGVhcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOw0KPiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5z YXJlYV9wcml2Ow0KPiAtCWRybV9tZ2FfY2xlYXJfdCAqY2xlYXIgPSBkYXRhOw0KPiAtDQo+ IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCWlm IChzYXJlYV9wcml2LT5uYm94ID4gTUdBX05SX1NBUkVBX0NMSVBSRUNUUykNCj4gLQkJc2Fy ZWFfcHJpdi0+bmJveCA9IE1HQV9OUl9TQVJFQV9DTElQUkVDVFM7DQo+IC0NCj4gLQlXUkFQ X1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JbWdhX2RtYV9kaXNwYXRj aF9jbGVhcihkZXYsIGNsZWFyKTsNCj4gLQ0KPiAtCS8qIE1ha2Ugc3VyZSB3ZSByZXN0b3Jl IHRoZSAzRCBzdGF0ZSBuZXh0IHRpbWUuDQo+IC0JICovDQo+IC0JZGV2X3ByaXYtPnNhcmVh X3ByaXYtPmRpcnR5IHw9IE1HQV9VUExPQURfQ09OVEVYVDsNCj4gLQ0KPiAtCXJldHVybiAw Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IG1nYV9kbWFfc3dhcChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4g LXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Ow0KPiAtCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9w cml2Ow0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsN Cj4gLQ0KPiAtCWlmIChzYXJlYV9wcml2LT5uYm94ID4gTUdBX05SX1NBUkVBX0NMSVBSRUNU UykNCj4gLQkJc2FyZWFfcHJpdi0+bmJveCA9IE1HQV9OUl9TQVJFQV9DTElQUkVDVFM7DQo+ IC0NCj4gLQlXUkFQX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JbWdh X2RtYV9kaXNwYXRjaF9zd2FwKGRldik7DQo+IC0NCj4gLQkvKiBNYWtlIHN1cmUgd2UgcmVz dG9yZSB0aGUgM0Qgc3RhdGUgbmV4dCB0aW1lLg0KPiAtCSAqLw0KPiAtCWRldl9wcml2LT5z YXJlYV9wcml2LT5kaXJ0eSB8PSBNR0FfVVBMT0FEX0NPTlRFWFQ7DQo+IC0NCj4gLQlyZXR1 cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBtZ2FfZG1hX3ZlcnRleChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dikNCj4gLXsNCj4gLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOw0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7DQo+ IC0Jc3RydWN0IGRybV9idWYgKmJ1ZjsNCj4gLQlkcm1fbWdhX2J1Zl9wcml2X3QgKmJ1Zl9w cml2Ow0KPiAtCWRybV9tZ2FfdmVydGV4X3QgKnZlcnRleCA9IGRhdGE7DQo+IC0NCj4gLQlM T0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JaWYgKHZl cnRleC0+aWR4IDwgMCB8fCB2ZXJ0ZXgtPmlkeCA+IGRtYS0+YnVmX2NvdW50KQ0KPiAtCQly ZXR1cm4gLUVJTlZBTDsNCj4gLQlidWYgPSBkbWEtPmJ1Zmxpc3RbdmVydGV4LT5pZHhdOw0K PiAtCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCWJ1Zi0+dXNlZCA9 IHZlcnRleC0+dXNlZDsNCj4gLQlidWZfcHJpdi0+ZGlzY2FyZCA9IHZlcnRleC0+ZGlzY2Fy ZDsNCj4gLQ0KPiAtCWlmICghbWdhX3ZlcmlmeV9zdGF0ZShkZXZfcHJpdikpIHsNCj4gLQkJ aWYgKHZlcnRleC0+ZGlzY2FyZCkgew0KPiAtCQkJaWYgKGJ1Zl9wcml2LT5kaXNwYXRjaGVk ID09IDEpDQo+IC0JCQkJQUdFX0JVRkZFUihidWZfcHJpdik7DQo+IC0JCQlidWZfcHJpdi0+ ZGlzcGF0Y2hlZCA9IDA7DQo+IC0JCQltZ2FfZnJlZWxpc3RfcHV0KGRldiwgYnVmKTsNCj4g LQkJfQ0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlXUkFQX1RFU1Rf V0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JbWdhX2RtYV9kaXNwYXRjaF92ZXJ0 ZXgoZGV2LCBidWYpOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRp YyBpbnQgbWdhX2RtYV9pbmRpY2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCWRybV9tZ2FfcHJp dmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0Jc3RydWN0IGRybV9k ZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsNCj4gLQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOw0K PiAtCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXY7DQo+IC0JZHJtX21nYV9pbmRpY2Vz X3QgKmluZGljZXMgPSBkYXRhOw0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRl diwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCWlmIChpbmRpY2VzLT5pZHggPCAwIHx8IGluZGlj ZXMtPmlkeCA+IGRtYS0+YnVmX2NvdW50KQ0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQ0K PiAtCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpbmRpY2VzLT5pZHhdOw0KPiAtCWJ1Zl9wcml2ID0g YnVmLT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCWJ1Zl9wcml2LT5kaXNjYXJkID0gaW5kaWNl cy0+ZGlzY2FyZDsNCj4gLQ0KPiAtCWlmICghbWdhX3ZlcmlmeV9zdGF0ZShkZXZfcHJpdikp IHsNCj4gLQkJaWYgKGluZGljZXMtPmRpc2NhcmQpIHsNCj4gLQkJCWlmIChidWZfcHJpdi0+ ZGlzcGF0Y2hlZCA9PSAxKQ0KPiAtCQkJCUFHRV9CVUZGRVIoYnVmX3ByaXYpOw0KPiAtCQkJ YnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAwOw0KPiAtCQkJbWdhX2ZyZWVsaXN0X3B1dChkZXYs IGJ1Zik7DQo+IC0JCX0NCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0J V1JBUF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsNCj4gLQ0KPiAtCW1nYV9kbWFfZGlz cGF0Y2hfaW5kaWNlcyhkZXYsIGJ1ZiwgaW5kaWNlcy0+c3RhcnQsIGluZGljZXMtPmVuZCk7 DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBtZ2FfZG1h X2lsb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1h ID0gZGV2LT5kbWE7DQo+IC0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsNCj4gLQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOw0KPiAtCWRybV9tZ2FfaWxv YWRfdCAqaWxvYWQgPSBkYXRhOw0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCUxP Q0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7DQo+IC0NCj4gLSNpZiAwDQo+ IC0JaWYgKG1nYV9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KSA8IDApIHsNCj4gLQkJaWYg KE1HQV9ETUFfREVCVUcpDQo+IC0JCQlEUk1fSU5GTygiLUVCVVNZXG4iKTsNCj4gLQkJcmV0 dXJuIC1FQlVTWTsNCj4gLQl9DQo+IC0jZW5kaWYNCj4gLQlpZiAoaWxvYWQtPmlkeCA8IDAg fHwgaWxvYWQtPmlkeCA+IGRtYS0+YnVmX2NvdW50KQ0KPiAtCQlyZXR1cm4gLUVJTlZBTDsN Cj4gLQ0KPiAtCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpbG9hZC0+aWR4XTsNCj4gLQ0KPiAtCWlm IChtZ2FfdmVyaWZ5X2lsb2FkKGRldl9wcml2LCBpbG9hZC0+ZHN0b3JnLCBpbG9hZC0+bGVu Z3RoKSkgew0KPiAtCQltZ2FfZnJlZWxpc3RfcHV0KGRldiwgYnVmKTsNCj4gLQkJcmV0dXJu IC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JV1JBUF9URVNUX1dJVEhfUkVUVVJOKGRldl9w cml2KTsNCj4gLQ0KPiAtCW1nYV9kbWFfZGlzcGF0Y2hfaWxvYWQoZGV2LCBidWYsIGlsb2Fk LT5kc3RvcmcsIGlsb2FkLT5sZW5ndGgpOw0KPiAtDQo+IC0JLyogTWFrZSBzdXJlIHdlIHJl c3RvcmUgdGhlIDNEIHN0YXRlIG5leHQgdGltZS4NCj4gLQkgKi8NCj4gLQlkZXZfcHJpdi0+ c2FyZWFfcHJpdi0+ZGlydHkgfD0gTUdBX1VQTE9BRF9DT05URVhUOw0KPiAtDQo+IC0JcmV0 dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgbWdhX2RtYV9ibGl0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KQ0KPiAtew0KPiAtCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7DQo+IC0JZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNh cmVhX3ByaXY7DQo+IC0JZHJtX21nYV9ibGl0X3QgKmJsaXQgPSBkYXRhOw0KPiAtCURSTV9E RUJVRygiXG4iKTsNCj4gLQ0KPiAtCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVf cHJpdik7DQo+IC0NCj4gLQlpZiAoc2FyZWFfcHJpdi0+bmJveCA+IE1HQV9OUl9TQVJFQV9D TElQUkVDVFMpDQo+IC0JCXNhcmVhX3ByaXYtPm5ib3ggPSBNR0FfTlJfU0FSRUFfQ0xJUFJF Q1RTOw0KPiAtDQo+IC0JaWYgKG1nYV92ZXJpZnlfYmxpdChkZXZfcHJpdiwgYmxpdC0+c3Jj b3JnLCBibGl0LT5kc3RvcmcpKQ0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQ0KPiAtCVdS QVBfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQltZ2FfZG1hX2Rpc3Bh dGNoX2JsaXQoZGV2LCBibGl0KTsNCj4gLQ0KPiAtCS8qIE1ha2Ugc3VyZSB3ZSByZXN0b3Jl IHRoZSAzRCBzdGF0ZSBuZXh0IHRpbWUuDQo+IC0JICovDQo+IC0JZGV2X3ByaXYtPnNhcmVh X3ByaXYtPmRpcnR5IHw9IE1HQV9VUExPQURfQ09OVEVYVDsNCj4gLQ0KPiAtCXJldHVybiAw Ow0KPiAtfQ0KPiAtDQo+IC1pbnQgbWdhX2dldHBhcmFtKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAt CWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0J ZHJtX21nYV9nZXRwYXJhbV90ICpwYXJhbSA9IGRhdGE7DQo+IC0Jc3RydWN0IHBjaV9kZXYg KnBkZXYgPSB0b19wY2lfZGV2KGRldi0+ZGV2KTsNCj4gLQlpbnQgdmFsdWU7DQo+IC0NCj4g LQlpZiAoIWRldl9wcml2KSB7DQo+IC0JCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5p dGlhbGl6YXRpb25cbiIpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4g LQlEUk1fREVCVUcoInBpZD0lZFxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOw0KPiAtDQo+ IC0Jc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsNCj4gLQljYXNlIE1HQV9QQVJBTV9JUlFfTlI6 DQo+IC0JCXZhbHVlID0gcGRldi0+aXJxOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIE1HQV9Q QVJBTV9DQVJEX1RZUEU6DQo+IC0JCXZhbHVlID0gZGV2X3ByaXYtPmNoaXBzZXQ7DQo+IC0J CWJyZWFrOw0KPiAtCWRlZmF1bHQ6DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4g LQ0KPiAtCWlmIChjb3B5X3RvX3VzZXIocGFyYW0tPnZhbHVlLCAmdmFsdWUsIHNpemVvZihp bnQpKSkgew0KPiAtCQlEUk1fRVJST1IoImNvcHlfdG9fdXNlclxuIik7DQo+IC0JCXJldHVy biAtRUZBVUxUOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgaW50IG1nYV9zZXRfZmVuY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX21nYV9w cml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQl1MzIgKmZlbmNl ID0gZGF0YTsNCj4gLQlETUFfTE9DQUxTOw0KPiAtDQo+IC0JaWYgKCFkZXZfcHJpdikgew0K PiAtCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsNCj4g LQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JRFJNX0RFQlVHKCJwaWQ9JWRc biIsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsNCj4gLQ0KPiAtCS8qIEkgd291bGQgbm9ybWFs IGRvIHRoaXMgYXNzaWdubWVudCBpbiB0aGUgZGVjbGFyYXRpb24gb2YgZmVuY2UsDQo+IC0J ICogYnV0IGRldl9wcml2IG1heSBiZSBOVUxMLg0KPiAtCSAqLw0KPiAtDQo+IC0JKmZlbmNl ID0gZGV2X3ByaXYtPm5leHRfZmVuY2VfdG9fcG9zdDsNCj4gLQlkZXZfcHJpdi0+bmV4dF9m ZW5jZV90b19wb3N0Kys7DQo+IC0NCj4gLQlCRUdJTl9ETUEoMSk7DQo+IC0JRE1BX0JMT0NL KE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsDQo+IC0JCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAw MCwNCj4gLQkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLCBNR0FfU09GVFJBUCwgMHgwMDAw MDAwMCk7DQo+IC0JQURWQU5DRV9ETUEoKTsNCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0K PiAtDQo+IC1zdGF0aWMgaW50IG1nYV93YWl0X2ZlbmNlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqDQo+IC1maWxlX3ByaXYpDQo+IC17 DQo+IC0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsN Cj4gLQl1MzIgKmZlbmNlID0gZGF0YTsNCj4gLQ0KPiAtCWlmICghZGV2X3ByaXYpIHsNCj4g LQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7DQo+IC0J CXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCURSTV9ERUJVRygicGlkPSVkXG4i LCB0YXNrX3BpZF9ucihjdXJyZW50KSk7DQo+IC0NCj4gLQltZ2FfZHJpdmVyX2ZlbmNlX3dh aXQoZGV2LCBmZW5jZSk7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLWNvbnN0IHN0 cnVjdCBkcm1faW9jdGxfZGVzYyBtZ2FfaW9jdGxzW10gPSB7DQo+IC0JRFJNX0lPQ1RMX0RF Rl9EUlYoTUdBX0lOSVQsIG1nYV9kbWFfaW5pdCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1f Uk9PVF9PTkxZKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihNR0FfRkxVU0gsIG1nYV9kbWFf Zmx1c2gsIERSTV9BVVRIKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihNR0FfUkVTRVQsIG1n YV9kbWFfcmVzZXQsIERSTV9BVVRIKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihNR0FfU1dB UCwgbWdhX2RtYV9zd2FwLCBEUk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoTUdB X0NMRUFSLCBtZ2FfZG1hX2NsZWFyLCBEUk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9E UlYoTUdBX1ZFUlRFWCwgbWdhX2RtYV92ZXJ0ZXgsIERSTV9BVVRIKSwNCj4gLQlEUk1fSU9D VExfREVGX0RSVihNR0FfSU5ESUNFUywgbWdhX2RtYV9pbmRpY2VzLCBEUk1fQVVUSCksDQo+ IC0JRFJNX0lPQ1RMX0RFRl9EUlYoTUdBX0lMT0FELCBtZ2FfZG1hX2lsb2FkLCBEUk1fQVVU SCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoTUdBX0JMSVQsIG1nYV9kbWFfYmxpdCwgRFJN X0FVVEgpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJWKE1HQV9HRVRQQVJBTSwgbWdhX2dldHBh cmFtLCBEUk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoTUdBX1NFVF9GRU5DRSwg bWdhX3NldF9mZW5jZSwgRFJNX0FVVEgpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJWKE1HQV9X QUlUX0ZFTkNFLCBtZ2Ffd2FpdF9mZW5jZSwgRFJNX0FVVEgpLA0KPiAtCURSTV9JT0NUTF9E RUZfRFJWKE1HQV9ETUFfQk9PVFNUUkFQLCBtZ2FfZG1hX2Jvb3RzdHJhcCwgRFJNX0FVVEh8 RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwNCj4gLX07DQo+IC0NCj4gLWludCBtZ2FfbWF4 X2lvY3RsID0gQVJSQVlfU0laRShtZ2FfaW9jdGxzKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZ2EvbWdhX3dhcnAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3dh cnAuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggYjVlZjFkMmM4YjFj Li4wMDAwMDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffd2FycC5j DQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMTY3ICswLDAgQEANCj4gLS8qIG1nYV93YXJw LmMgLS0gTWF0cm94IEcyMDAvRzQwMCBXQVJQIGVuZ2luZSBtYW5hZ2VtZW50IC0qLSBsaW51 eC1jIC0qLQ0KPiAtICogQ3JlYXRlZDogVGh1IEphbiAxMSAyMToyOTozMiAyMDAxIGJ5IGdh cmV0aEB2YWxpbnV4LmNvbQ0KPiAtICoNCj4gLSAqIENvcHlyaWdodCAyMDAwIFZBIExpbnV4 IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4NCj4gLSAqIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gLSAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksDQo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+IC0gKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwNCj4gLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KPiAtICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoNCj4gLSAqDQo+IC0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0DQo+IC0gKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlDQo+IC0gKiBTb2Z0d2FyZS4NCj4gLSAqDQo+IC0gKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUg0KPiAtICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+IC0gKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwNCj4gLSAqIFZBIExJTlVYIFNZU1RFTVMgQU5EL09SIElUUyBTVVBQTElF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1INCj4gLSAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLA0KPiAtICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQo+IC0gKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuDQo+IC0gKg0KPiAtICogQXV0aG9yczoNCj4gLSAqICAgIEdhcmV0 aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4NCj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVk ZSA8bGludXgvZmlybXdhcmUuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9paGV4Lmg+DQo+IC0j aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+DQo+IC0NCj4gLSNpbmNsdWRlICJtZ2FfZHJ2LmgiDQo+IC0NCj4gLSNkZWZp bmUgRklSTVdBUkVfRzIwMCAibWF0cm94L2cyMDBfd2FycC5mdyINCj4gLSNkZWZpbmUgRklS TVdBUkVfRzQwMCAibWF0cm94L2c0MDBfd2FycC5mdyINCj4gLQ0KPiAtTU9EVUxFX0ZJUk1X QVJFKEZJUk1XQVJFX0cyMDApOw0KPiAtTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX0c0MDAp Ow0KPiAtDQo+IC0jZGVmaW5lIE1HQV9XQVJQX0NPREVfQUxJR04JCTI1NgkvKiBpbiBieXRl cyAqLw0KPiAtDQo+IC0jZGVmaW5lIFdBUlBfVUNPREVfU0laRShzaXplKQkJQUxJR04oc2l6 ZSwgTUdBX1dBUlBfQ09ERV9BTElHTikNCj4gLQ0KPiAtaW50IG1nYV93YXJwX2luc3RhbGxf bWljcm9jb2RlKGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsNCj4gLQl1bnNp Z25lZCBjaGFyICp2Y2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+aGFuZGxlOw0KPiAtCXVuc2ln bmVkIGxvbmcgcGNiYXNlID0gZGV2X3ByaXYtPndhcnAtPm9mZnNldDsNCj4gLQljb25zdCBj aGFyICpmaXJtd2FyZV9uYW1lOw0KPiAtCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7 DQo+IC0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7DQo+IC0JY29uc3Qgc3Ry dWN0IGloZXhfYmlucmVjICpyZWM7DQo+IC0JdW5zaWduZWQgaW50IHNpemU7DQo+IC0JaW50 IG5fcGlwZXMsIHdoZXJlOw0KPiAtCWludCByYyA9IDA7DQo+IC0NCj4gLQlzd2l0Y2ggKGRl dl9wcml2LT5jaGlwc2V0KSB7DQo+IC0JY2FzZSBNR0FfQ0FSRF9UWVBFX0c0MDA6DQo+IC0J Y2FzZSBNR0FfQ0FSRF9UWVBFX0c1NTA6DQo+IC0JCWZpcm13YXJlX25hbWUgPSBGSVJNV0FS RV9HNDAwOw0KPiAtCQluX3BpcGVzID0gTUdBX01BWF9HNDAwX1BJUEVTOw0KPiAtCQlicmVh azsNCj4gLQljYXNlIE1HQV9DQVJEX1RZUEVfRzIwMDoNCj4gLQkJZmlybXdhcmVfbmFtZSA9 IEZJUk1XQVJFX0cyMDA7DQo+IC0JCW5fcGlwZXMgPSBNR0FfTUFYX0cyMDBfUElQRVM7DQo+ IC0JCWJyZWFrOw0KPiAtCWRlZmF1bHQ6DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0N Cj4gLQ0KPiAtCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtZ2Ff d2FycCIsIDAsIE5VTEwsIDApOw0KPiAtCWlmIChJU19FUlIocGRldikpIHsNCj4gLQkJRFJN X0VSUk9SKCJtZ2E6IEZhaWxlZCB0byByZWdpc3RlciBtaWNyb2NvZGVcbiIpOw0KPiAtCQly ZXR1cm4gUFRSX0VSUihwZGV2KTsNCj4gLQl9DQo+IC0JcmMgPSByZXF1ZXN0X2loZXhfZmly bXdhcmUoJmZ3LCBmaXJtd2FyZV9uYW1lLCAmcGRldi0+ZGV2KTsNCj4gLQlwbGF0Zm9ybV9k ZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsNCj4gLQlpZiAocmMpIHsNCj4gLQkJRFJNX0VSUk9S KCJtZ2E6IEZhaWxlZCB0byBsb2FkIG1pY3JvY29kZSBcIiVzXCJcbiIsDQo+IC0JCQkgIGZp cm13YXJlX25hbWUpOw0KPiAtCQlyZXR1cm4gcmM7DQo+IC0JfQ0KPiAtDQo+IC0Jc2l6ZSA9 IDA7DQo+IC0Jd2hlcmUgPSAwOw0KPiAtCWZvciAocmVjID0gKGNvbnN0IHN0cnVjdCBpaGV4 X2JpbnJlYyAqKWZ3LT5kYXRhOw0KPiAtCSAgICAgcmVjOw0KPiAtCSAgICAgcmVjID0gaWhl eF9uZXh0X2JpbnJlYyhyZWMpKSB7DQo+IC0JCXNpemUgKz0gV0FSUF9VQ09ERV9TSVpFKGJl MTZfdG9fY3B1KHJlYy0+bGVuKSk7DQo+IC0JCXdoZXJlKys7DQo+IC0JfQ0KPiAtDQo+IC0J aWYgKHdoZXJlICE9IG5fcGlwZXMpIHsNCj4gLQkJRFJNX0VSUk9SKCJtZ2E6IEludmFsaWQg bWljcm9jb2RlIFwiJXNcIlxuIiwgZmlybXdhcmVfbmFtZSk7DQo+IC0JCXJjID0gLUVJTlZB TDsNCj4gLQkJZ290byBvdXQ7DQo+IC0JfQ0KPiAtCXNpemUgPSBQQUdFX0FMSUdOKHNpemUp Ow0KPiAtCURSTV9ERUJVRygiTUdBIHVjb2RlIHNpemUgPSAlZCBieXRlc1xuIiwgc2l6ZSk7 DQo+IC0JaWYgKHNpemUgPiBkZXZfcHJpdi0+d2FycC0+c2l6ZSkgew0KPiAtCQlEUk1fRVJS T1IoIm1pY3JvY29kZSB0b28gbGFyZ2UhICgldSA+ICVsdSlcbiIsDQo+IC0JCQkgIHNpemUs IGRldl9wcml2LT53YXJwLT5zaXplKTsNCj4gLQkJcmMgPSAtRU5PTUVNOw0KPiAtCQlnb3Rv IG91dDsNCj4gLQl9DQo+IC0NCj4gLQltZW1zZXQoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlz LCAwLCBzaXplb2YoZGV2X3ByaXYtPndhcnBfcGlwZV9waHlzKSk7DQo+IC0NCj4gLQl3aGVy ZSA9IDA7DQo+IC0JZm9yIChyZWMgPSAoY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICopZnct PmRhdGE7DQo+IC0JICAgICByZWM7DQo+IC0JICAgICByZWMgPSBpaGV4X25leHRfYmlucmVj KHJlYykpIHsNCj4gLQkJdW5zaWduZWQgaW50IHNyY19zaXplLCBkc3Rfc2l6ZTsNCj4gLQ0K PiAtCQlEUk1fREVCVUcoIiBwY2Jhc2UgPSAweCUwOGx4ICB2Y2Jhc2UgPSAlcFxuIiwgcGNi YXNlLCB2Y2Jhc2UpOw0KPiAtCQlkZXZfcHJpdi0+d2FycF9waXBlX3BoeXNbd2hlcmVdID0g cGNiYXNlOw0KPiAtCQlzcmNfc2l6ZSA9IGJlMTZfdG9fY3B1KHJlYy0+bGVuKTsNCj4gLQkJ ZHN0X3NpemUgPSBXQVJQX1VDT0RFX1NJWkUoc3JjX3NpemUpOw0KPiAtCQltZW1jcHkodmNi YXNlLCByZWMtPmRhdGEsIHNyY19zaXplKTsNCj4gLQkJcGNiYXNlICs9IGRzdF9zaXplOw0K PiAtCQl2Y2Jhc2UgKz0gZHN0X3NpemU7DQo+IC0JCXdoZXJlKys7DQo+IC0JfQ0KPiAtDQo+ IC1vdXQ6DQo+IC0JcmVsZWFzZV9maXJtd2FyZShmdyk7DQo+IC0JcmV0dXJuIHJjOw0KPiAt fQ0KPiAtDQo+IC0jZGVmaW5lIFdNSVNDX0VYUEVDVEVECQkoTUdBX1dVQ09ERUNBQ0hFX0VO QUJMRSB8IE1HQV9XTUFTVEVSX0VOQUJMRSkNCj4gLQ0KPiAtaW50IG1nYV93YXJwX2luaXQo ZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCXUzMiB3bWlzYzsNCj4g LQ0KPiAtCS8qIEZJWE1FOiBHZXQgcmlkIG9mIHRoZXNlIGRhbW5lZCBtYWdpYyBudW1iZXJz Li4uDQo+IC0JICovDQo+IC0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgew0KPiAtCWNh c2UgTUdBX0NBUkRfVFlQRV9HNDAwOg0KPiAtCWNhc2UgTUdBX0NBUkRfVFlQRV9HNTUwOg0K PiAtCQlNR0FfV1JJVEUoTUdBX1dJQUREUjIsIE1HQV9XTU9ERV9TVVNQRU5EKTsNCj4gLQkJ TUdBX1dSSVRFKE1HQV9XR0VUTVNCLCAweDAwMDAwRTAwKTsNCj4gLQkJTUdBX1dSSVRFKE1H QV9XVlJUWFNaLCAweDAwMDAxODA3KTsNCj4gLQkJTUdBX1dSSVRFKE1HQV9XQUNDRVBUU0VR LCAweDE4MDAwMDAwKTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBNR0FfQ0FSRF9UWVBFX0cy MDA6DQo+IC0JCU1HQV9XUklURShNR0FfV0lBRERSLCBNR0FfV01PREVfU1VTUEVORCk7DQo+ IC0JCU1HQV9XUklURShNR0FfV0dFVE1TQiwgMHgxNjA2KTsNCj4gLQkJTUdBX1dSSVRFKE1H QV9XVlJUWFNaLCA3KTsNCj4gLQkJYnJlYWs7DQo+IC0JZGVmYXVsdDoNCj4gLQkJcmV0dXJu IC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JTUdBX1dSSVRFKE1HQV9XTUlTQywgKE1HQV9X VUNPREVDQUNIRV9FTkFCTEUgfA0KPiAtCQkJICAgICAgTUdBX1dNQVNURVJfRU5BQkxFIHwg TUdBX1dDQUNIRUZMVVNIX0VOQUJMRSkpOw0KPiAtCXdtaXNjID0gTUdBX1JFQUQoTUdBX1dN SVNDKTsNCj4gLQlpZiAod21pc2MgIT0gV01JU0NfRVhQRUNURUQpIHsNCj4gLQkJRFJNX0VS Uk9SKCJXQVJQIGVuZ2luZSBjb25maWcgZmFpbGVkISAweCV4ICE9IDB4JXhcbiIsDQo+IC0J CQkgIHdtaXNjLCBXTUlTQ19FWFBFQ1RFRCk7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAt CX0NCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3IxMjgvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9NYWtlZmlsZQ0K PiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggYzA3YTA2OTUzM2VmLi4wMDAw MDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvTWFrZWZpbGUNCj4gKysr IC9kZXYvbnVsbA0KPiBAQCAtMSwxMCArMCwwIEBADQo+IC0jIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gLSMNCj4gLSMgTWFrZWZpbGUgZm9yIHRoZSBkcm0g ZGV2aWNlIGRyaXZlci4gIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZQ0K PiAtIyBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYg NC4xLjAgYW5kIGhpZ2hlci4NCj4gLQ0KPiAtcjEyOC15ICAgOj0gcjEyOF9kcnYubyByMTI4 X2NjZS5vIHIxMjhfc3RhdGUubyByMTI4X2lycS5vIGF0aV9wY2lnYXJ0Lm8NCj4gLQ0KPiAt cjEyOC0kKENPTkZJR19DT01QQVQpICAgKz0gcjEyOF9pb2MzMi5vDQo+IC0NCj4gLW9iai0k KENPTkZJR19EUk1fUjEyOCkJKz0gcjEyOC5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcjEyOC9hdGlfcGNpZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvYXRpX3Bj aWdhcnQuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggZGRlMDUwMWFl YTY4Li4wMDAwMDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvYXRpX3Bj aWdhcnQuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDIyOCArMCwwIEBADQo+IC0vKg0K PiAtICogXGZpbGUgYXRpX3BjaWdhcnQuYw0KPiAtICogQVRJIFBDSSBHQVJUIHN1cHBvcnQN Cj4gLSAqDQo+IC0gKiBcYXV0aG9yIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNv bT4NCj4gLSAqLw0KPiAtDQo+IC0vKg0KPiAtICogQ3JlYXRlZDogV2VkIERlYyAxMyAyMTo1 MjoxOSAyMDAwIGJ5IGdhcmV0aEB2YWxpbnV4LmNvbQ0KPiAtICoNCj4gLSAqIENvcHlyaWdo dCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4N Cj4gLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0gKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gLSAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQ0KPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gLSAqDQo+IC0gKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0DQo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+IC0gKiBTb2Z0d2FyZS4NCj4gLSAq DQo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiAtICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks DQo+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4gLSAqIFBSRUNJU0lPTiBJTlNJR0hUIEFO RC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S DQo+IC0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCj4gLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUg0K PiAtICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KPiAtICovDQo+IC0NCj4gLSNpbmNs dWRlIDxsaW51eC9leHBvcnQuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gLQ0K PiAtI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9s ZWdhY3kuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+IC0NCj4gLSNpbmNs dWRlICJhdGlfcGNpZ2FydC5oIg0KPiAtDQo+IC0jIGRlZmluZSBBVElfUENJR0FSVF9QQUdF X1NJWkUJCTQwOTYJLyoqPCBQQ0kgR0FSVCBwYWdlIHNpemUgKi8NCj4gLQ0KPiAtc3RhdGlj IGludCBkcm1fYXRpX2FsbG9jX3BjaWdhcnRfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwNCj4gLQkJCQkgICAgICAgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICpnYXJ0X2lu Zm8pDQo+IC17DQo+IC0JZHJtX2RtYV9oYW5kbGVfdCAqZG1haCA9IGttYWxsb2Moc2l6ZW9m KGRybV9kbWFfaGFuZGxlX3QpLCBHRlBfS0VSTkVMKTsNCj4gLQ0KPiAtCWlmICghZG1haCkN Cj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0NCj4gLQlkbWFoLT5zaXplID0gZ2FydF9pbmZv LT50YWJsZV9zaXplOw0KPiAtCWRtYWgtPnZhZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRl di0+ZGV2LA0KPiAtCQkJCQkgZG1haC0+c2l6ZSwNCj4gLQkJCQkJICZkbWFoLT5idXNhZGRy LA0KPiAtCQkJCQkgR0ZQX0tFUk5FTCk7DQo+IC0NCj4gLQlpZiAoIWRtYWgtPnZhZGRyKSB7 DQo+IC0JCWtmcmVlKGRtYWgpOw0KPiAtCQlyZXR1cm4gLUVOT01FTTsNCj4gLQl9DQo+IC0N Cj4gLQlnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZSA9IGRtYWg7DQo+IC0JcmV0dXJuIDA7DQo+ IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGRybV9hdGlfZnJlZV9wY2lnYXJ0X3RhYmxlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJICAgICAgIHN0cnVjdCBkcm1fYXRpX3Bj aWdhcnRfaW5mbyAqZ2FydF9pbmZvKQ0KPiAtew0KPiAtCWRybV9kbWFfaGFuZGxlX3QgKmRt YWggPSBnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZTsNCj4gLQ0KPiAtCWRtYV9mcmVlX2NvaGVy ZW50KGRldi0+ZGV2LCBkbWFoLT5zaXplLCBkbWFoLT52YWRkciwgZG1haC0+YnVzYWRkcik7 DQo+IC0Ja2ZyZWUoZG1haCk7DQo+IC0NCj4gLQlnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZSA9 IE5VTEw7DQo+IC19DQo+IC0NCj4gLWludCBkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRf aW5mbykNCj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOw0K PiAtCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPmRldik7DQo+IC0J dW5zaWduZWQgbG9uZyBwYWdlczsNCj4gLQlpbnQgaTsNCj4gLQlpbnQgbWF4X3BhZ2VzOw0K PiAtDQo+IC0JLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0 aW9ucyAqLw0KPiAtCWlmICghZW50cnkpIHsNCj4gLQkJRFJNX0VSUk9SKCJubyBzY2F0dGVy L2dhdGhlciBtZW1vcnkhXG4iKTsNCj4gLQkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAtDQo+IC0J aWYgKGdhcnRfaW5mby0+YnVzX2FkZHIpIHsNCj4gLQ0KPiAtCQltYXhfcGFnZXMgPSAoZ2Fy dF9pbmZvLT50YWJsZV9zaXplIC8gc2l6ZW9mKHUzMikpOw0KPiAtCQlwYWdlcyA9IChlbnRy eS0+cGFnZXMgPD0gbWF4X3BhZ2VzKQ0KPiAtCQkgID8gZW50cnktPnBhZ2VzIDogbWF4X3Bh Z2VzOw0KPiAtDQo+IC0JCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7DQo+IC0JCQlp ZiAoIWVudHJ5LT5idXNhZGRyW2ldKQ0KPiAtCQkJCWJyZWFrOw0KPiAtCQkJZG1hX3VubWFw X3BhZ2UoJnBkZXYtPmRldiwgZW50cnktPmJ1c2FkZHJbaV0sDQo+IC0JCQkJICAgICAgIFBB R0VfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOw0KPiAtCQl9DQo+IC0NCj4gLQkJaWYgKGdh cnRfaW5mby0+Z2FydF90YWJsZV9sb2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfTUFJTikNCj4g LQkJCWdhcnRfaW5mby0+YnVzX2FkZHIgPSAwOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChnYXJ0 X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4gJiYNCj4g LQkgICAgZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUpIHsNCj4gLQkJZHJtX2F0aV9mcmVlX3Bj aWdhcnRfdGFibGUoZGV2LCBnYXJ0X2luZm8pOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiAx Ow0KPiAtfQ0KPiAtDQo+IC1pbnQgZHJtX2F0aV9wY2lnYXJ0X2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZvICpnYXJ0X2luZm8pDQo+ IC17DQo+IC0Jc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9ICZnYXJ0X2luZm8tPm1hcHBp bmc7DQo+IC0Jc3RydWN0IGRybV9zZ19tZW0gKmVudHJ5ID0gZGV2LT5zZzsNCj4gLQlzdHJ1 Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2LT5kZXYpOw0KPiAtCXZvaWQgKmFk ZHJlc3MgPSBOVUxMOw0KPiAtCXVuc2lnbmVkIGxvbmcgcGFnZXM7DQo+IC0JdTMyICpwY2lf Z2FydCA9IE5VTEwsIHBhZ2VfYmFzZSwgZ2FydF9pZHg7DQo+IC0JZG1hX2FkZHJfdCBidXNf YWRkcmVzcyA9IDA7DQo+IC0JaW50IGksIGosIHJldCA9IC1FTk9NRU07DQo+IC0JaW50IG1h eF9hdGlfcGFnZXMsIG1heF9yZWFsX3BhZ2VzOw0KPiAtDQo+IC0JaWYgKCFlbnRyeSkgew0K PiAtCQlEUk1fRVJST1IoIm5vIHNjYXR0ZXIvZ2F0aGVyIG1lbW9yeSFcbiIpOw0KPiAtCQln b3RvIGRvbmU7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGdhcnRfaW5mby0+Z2FydF90YWJsZV9s b2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfTUFJTikgew0KPiAtCQlEUk1fREVCVUcoIlBDSTog bm8gdGFibGUgaW4gVlJBTTogdXNpbmcgbm9ybWFsIFJBTVxuIik7DQo+IC0NCj4gLQkJaWYg KGRtYV9zZXRfbWFzaygmcGRldi0+ZGV2LCBnYXJ0X2luZm8tPnRhYmxlX21hc2spKSB7DQo+ IC0JCQlEUk1fRVJST1IoImZhaWwgdG8gc2V0IGRtYSBtYXNrIHRvIDB4JUx4XG4iLA0KPiAt CQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylnYXJ0X2luZm8tPnRhYmxlX21hc2spOw0KPiAt CQkJcmV0ID0gLUVGQVVMVDsNCj4gLQkJCWdvdG8gZG9uZTsNCj4gLQkJfQ0KPiAtDQo+IC0J CXJldCA9IGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZShkZXYsIGdhcnRfaW5mbyk7DQo+ IC0JCWlmIChyZXQpIHsNCj4gLQkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIFBDSSBH QVJUIHBhZ2UhXG4iKTsNCj4gLQkJCWdvdG8gZG9uZTsNCj4gLQkJfQ0KPiAtDQo+IC0JCXBj aV9nYXJ0ID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOw0KPiAtCQlhZGRyZXNz ID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOw0KPiAtCQlidXNfYWRkcmVzcyA9 IGdhcnRfaW5mby0+dGFibGVfaGFuZGxlLT5idXNhZGRyOw0KPiAtCX0gZWxzZSB7DQo+IC0J CWFkZHJlc3MgPSBnYXJ0X2luZm8tPmFkZHI7DQo+IC0JCWJ1c19hZGRyZXNzID0gZ2FydF9p bmZvLT5idXNfYWRkcjsNCj4gLQkJRFJNX0RFQlVHKCJQQ0k6IEdhcnQgVGFibGU6IFZSQU0g JTA4TFggbWFwcGVkIGF0ICUwOGxYXG4iLA0KPiAtCQkJICAodW5zaWduZWQgbG9uZyBsb25n KWJ1c19hZGRyZXNzLA0KPiAtCQkJICAodW5zaWduZWQgbG9uZylhZGRyZXNzKTsNCj4gLQl9 DQo+IC0NCj4gLQ0KPiAtCW1heF9hdGlfcGFnZXMgPSAoZ2FydF9pbmZvLT50YWJsZV9zaXpl IC8gc2l6ZW9mKHUzMikpOw0KPiAtCW1heF9yZWFsX3BhZ2VzID0gbWF4X2F0aV9wYWdlcyAv IChQQUdFX1NJWkUgLyBBVElfUENJR0FSVF9QQUdFX1NJWkUpOw0KPiAtCXBhZ2VzID0gKGVu dHJ5LT5wYWdlcyA8PSBtYXhfcmVhbF9wYWdlcykNCj4gLQkgICAgPyBlbnRyeS0+cGFnZXMg OiBtYXhfcmVhbF9wYWdlczsNCj4gLQ0KPiAtCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVf bG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pIHsNCj4gLQkJbWVtc2V0KHBjaV9nYXJ0 LCAwLCBtYXhfYXRpX3BhZ2VzICogc2l6ZW9mKHUzMikpOw0KPiAtCX0gZWxzZSB7DQo+IC0J CW1lbXNldF9pbygodm9pZCBfX2lvbWVtICopbWFwLT5oYW5kbGUsIDAsIG1heF9hdGlfcGFn ZXMgKiBzaXplb2YodTMyKSk7DQo+IC0JfQ0KPiAtDQo+IC0JZ2FydF9pZHggPSAwOw0KPiAt CWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7DQo+IC0JCS8qIHdlIG5lZWQgdG8gc3Vw cG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8NCj4gLQkJZW50cnktPmJ1c2Fk ZHJbaV0gPSBkbWFfbWFwX3BhZ2UoJnBkZXYtPmRldiwgZW50cnktPnBhZ2VsaXN0W2ldLA0K PiAtCQkJCQkJIDAsIFBBR0VfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOw0KPiAtCQlpZiAo ZG1hX21hcHBpbmdfZXJyb3IoJnBkZXYtPmRldiwgZW50cnktPmJ1c2FkZHJbaV0pKSB7DQo+ IC0JCQlEUk1fRVJST1IoInVuYWJsZSB0byBtYXAgUENJR0FSVCBwYWdlcyFcbiIpOw0KPiAt CQkJZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LCBnYXJ0X2luZm8pOw0KPiAtCQkJYWRk cmVzcyA9IE5VTEw7DQo+IC0JCQlidXNfYWRkcmVzcyA9IDA7DQo+IC0JCQlyZXQgPSAtRU5P TUVNOw0KPiAtCQkJZ290byBkb25lOw0KPiAtCQl9DQo+IC0JCXBhZ2VfYmFzZSA9ICh1MzIp IGVudHJ5LT5idXNhZGRyW2ldOw0KPiAtDQo+IC0JCWZvciAoaiA9IDA7IGogPCAoUEFHRV9T SVpFIC8gQVRJX1BDSUdBUlRfUEFHRV9TSVpFKTsgaisrKSB7DQo+IC0JCQl1MzIgb2Zmc2V0 Ow0KPiAtCQkJdTMyIHZhbDsNCj4gLQ0KPiAtCQkJc3dpdGNoKGdhcnRfaW5mby0+Z2FydF9y ZWdfaWYpIHsNCj4gLQkJCWNhc2UgRFJNX0FUSV9HQVJUX0lHUDoNCj4gLQkJCQl2YWwgPSBw YWdlX2Jhc2UgfCAweGM7DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQljYXNlIERSTV9BVElfR0FS VF9QQ0lFOg0KPiAtCQkJCXZhbCA9IChwYWdlX2Jhc2UgPj4gOCkgfCAweGM7DQo+IC0JCQkJ YnJlYWs7DQo+IC0JCQlkZWZhdWx0Og0KPiAtCQkJY2FzZSBEUk1fQVRJX0dBUlRfUENJOg0K PiAtCQkJCXZhbCA9IHBhZ2VfYmFzZTsNCj4gLQkJCQlicmVhazsNCj4gLQkJCX0NCj4gLQkJ CWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0NCj4gLQkJCSAgICBEUk1f QVRJX0dBUlRfTUFJTikgew0KPiAtCQkJCXBjaV9nYXJ0W2dhcnRfaWR4XSA9IGNwdV90b19s ZTMyKHZhbCk7DQo+IC0JCQl9IGVsc2Ugew0KPiAtCQkJCW9mZnNldCA9IGdhcnRfaWR4ICog c2l6ZW9mKHUzMik7DQo+IC0JCQkJd3JpdGVsKHZhbCwgKHZvaWQgX19pb21lbSAqKW1hcC0+ aGFuZGxlICsgb2Zmc2V0KTsNCj4gLQkJCX0NCj4gLQkJCWdhcnRfaWR4Kys7DQo+IC0JCQlw YWdlX2Jhc2UgKz0gQVRJX1BDSUdBUlRfUEFHRV9TSVpFOw0KPiAtCQl9DQo+IC0JfQ0KPiAt CXJldCA9IDA7DQo+IC0NCj4gLSNpZmRlZiBDT05GSUdfWDg2DQo+IC0Jd2JpbnZkKCk7DQo+ IC0jZWxzZQ0KPiAtCW1iKCk7DQo+IC0jZW5kaWYNCj4gLQ0KPiAtICAgICAgZG9uZToNCj4g LQlnYXJ0X2luZm8tPmFkZHIgPSBhZGRyZXNzOw0KPiAtCWdhcnRfaW5mby0+YnVzX2FkZHIg PSBidXNfYWRkcmVzczsNCj4gLQlyZXR1cm4gcmV0Ow0KPiAtfQ0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3IxMjgvYXRpX3BjaWdhcnQuaCBiL2RyaXZlcnMvZ3B1L2RybS9y MTI4L2F0aV9wY2lnYXJ0LmgNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IGE3MjhhMTM2NGU2Ni4uMDAwMDAwMDAwMDAwDQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9y MTI4L2F0aV9wY2lnYXJ0LmgNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSwzMSArMCwwIEBA DQo+IC0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiAtI2lmbmRl ZiBEUk1fQVRJX1BDSUdBUlRfSA0KPiAtI2RlZmluZSBEUk1fQVRJX1BDSUdBUlRfSA0KPiAt DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9sZWdhY3kuaD4NCj4gLQ0KPiAtLyogbG9jYXRpb24g b2YgR0FSVCB0YWJsZSAqLw0KPiAtI2RlZmluZSBEUk1fQVRJX0dBUlRfTUFJTiAxDQo+IC0j ZGVmaW5lIERSTV9BVElfR0FSVF9GQiAgIDINCj4gLQ0KPiAtI2RlZmluZSBEUk1fQVRJX0dB UlRfUENJIDENCj4gLSNkZWZpbmUgRFJNX0FUSV9HQVJUX1BDSUUgMg0KPiAtI2RlZmluZSBE Uk1fQVRJX0dBUlRfSUdQIDMNCj4gLQ0KPiAtc3RydWN0IGRybV9hdGlfcGNpZ2FydF9pbmZv IHsNCj4gLQlpbnQgZ2FydF90YWJsZV9sb2NhdGlvbjsNCj4gLQlpbnQgZ2FydF9yZWdfaWY7 DQo+IC0Jdm9pZCAqYWRkcjsNCj4gLQlkbWFfYWRkcl90IGJ1c19hZGRyOw0KPiAtCWRtYV9h ZGRyX3QgdGFibGVfbWFzazsNCj4gLQlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnRhYmxlX2hh bmRsZTsNCj4gLQlzdHJ1Y3QgZHJtX2xvY2FsX21hcCBtYXBwaW5nOw0KPiAtCWludCB0YWJs ZV9zaXplOw0KPiAtfTsNCj4gLQ0KPiAtZXh0ZXJuIGludCBkcm1fYXRpX3BjaWdhcnRfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAtCQkJCXN0cnVjdCBkcm1fYXRpX3BjaWdh cnRfaW5mbyAqIGdhcnRfaW5mbyk7DQo+IC1leHRlcm4gaW50IGRybV9hdGlfcGNpZ2FydF9j bGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJICAgc3RydWN0IGRybV9h dGlfcGNpZ2FydF9pbmZvICogZ2FydF9pbmZvKTsNCj4gLQ0KPiAtI2VuZGlmDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5jIGIvZHJpdmVycy9ncHUv ZHJtL3IxMjgvcjEyOF9jY2UuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggYzA0ZDg0YTY5ZGQyLi4wMDAwMDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3IxMjgvcjEyOF9jY2UuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDk0NCArMCwwIEBA DQo+IC0vKiByMTI4X2NjZS5jIC0tIEFUSSBSYWdlIDEyOCBkcml2ZXIgLSotIGxpbnV4LWMg LSotDQo+IC0gKiBDcmVhdGVkOiBXZWQgQXByICA1IDE5OjI0OjE5IDIwMDAgYnkga2V2aW5A cHJlY2lzaW9uaW5zaWdodC5jb20NCj4gLSAqLw0KPiAtLyoNCj4gLSAqIENvcHlyaWdodCAy MDAwIFByZWNpc2lvbiBJbnNpZ2h0LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4NCj4gLSAq IENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2Fs aWZvcm5pYS4NCj4gLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0gKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gLSAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQ0KPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gLSAqDQo+IC0gKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0DQo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+IC0gKiBTb2Z0d2Fy ZS4NCj4gLSAqDQo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiAtICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksDQo+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4gLSAqIFBSRUNJU0lPTiBJ TlNJR0hUIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SDQo+IC0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCj4gLSAqIEFSSVNJTkcgRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUg0KPiAtICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KPiAtICoNCj4gLSAq IEF1dGhvcnM6DQo+IC0gKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+ DQo+IC0gKi8NCj4gLQ0KPiAtI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+IC0jaW5jbHVk ZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5o Pg0KPiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gLSNpbmNs dWRlIDxsaW51eC91YWNjZXNzLmg+DQo+IC0NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2Rldmlj ZS5oPg0KPiAtI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5oPg0KPiAtI2luY2x1ZGUgPGRybS9k cm1fbGVnYWN5Lmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPiAtI2luY2x1 ZGUgPGRybS9yMTI4X2RybS5oPg0KPiAtDQo+IC0jaW5jbHVkZSAicjEyOF9kcnYuaCINCj4g LQ0KPiAtI2RlZmluZSBSMTI4X0ZJRk9fREVCVUcJCTANCj4gLQ0KPiAtI2RlZmluZSBGSVJN V0FSRV9OQU1FCQkicjEyOC9yMTI4X2NjZS5iaW4iDQo+IC0NCj4gLU1PRFVMRV9GSVJNV0FS RShGSVJNV0FSRV9OQU1FKTsNCj4gLQ0KPiAtc3RhdGljIGludCBSMTI4X1JFQURfUExMKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBhZGRyKQ0KPiAtew0KPiAtCWRybV9yMTI4X3By aXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JUjEyOF9X UklURTgoUjEyOF9DTE9DS19DTlRMX0lOREVYLCBhZGRyICYgMHgxZik7DQo+IC0JcmV0dXJu IFIxMjhfUkVBRChSMTI4X0NMT0NLX0NOVExfREFUQSk7DQo+IC19DQo+IC0NCj4gLSNpZiBS MTI4X0ZJRk9fREVCVUcNCj4gLXN0YXRpYyB2b2lkIHIxMjhfc3RhdHVzKGRybV9yMTI4X3By aXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0JcHJpbnRrKCJHVUlfU1RBVCAgICAgICAg ICAgPSAweCUwOHhcbiIsDQo+IC0JICAgICAgICh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKFIx MjhfR1VJX1NUQVQpKTsNCj4gLQlwcmludGsoIlBNNF9TVEFUICAgICAgICAgICA9IDB4JTA4 eFxuIiwNCj4gLQkgICAgICAgKHVuc2lnbmVkIGludClSMTI4X1JFQUQoUjEyOF9QTTRfU1RB VCkpOw0KPiAtCXByaW50aygiUE00X0JVRkZFUl9ETF9XUFRSID0gMHglMDh4XG4iLA0KPiAt CSAgICAgICAodW5zaWduZWQgaW50KVIxMjhfUkVBRChSMTI4X1BNNF9CVUZGRVJfRExfV1BU UikpOw0KPiAtCXByaW50aygiUE00X0JVRkZFUl9ETF9SUFRSID0gMHglMDh4XG4iLA0KPiAt CSAgICAgICAodW5zaWduZWQgaW50KVIxMjhfUkVBRChSMTI4X1BNNF9CVUZGRVJfRExfUlBU UikpOw0KPiAtCXByaW50aygiUE00X01JQ1JPX0NOVEwgICAgID0gMHglMDh4XG4iLA0KPiAt CSAgICAgICAodW5zaWduZWQgaW50KVIxMjhfUkVBRChSMTI4X1BNNF9NSUNST19DTlRMKSk7 DQo+IC0JcHJpbnRrKCJQTTRfQlVGRkVSX0NOVEwgICAgPSAweCUwOHhcbiIsDQo+IC0JICAg ICAgICh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKFIxMjhfUE00X0JVRkZFUl9DTlRMKSk7DQo+ IC19DQo+IC0jZW5kaWYNCj4gLQ0KPiAtLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtICogRW5naW5lLCBG SUZPIGNvbnRyb2wNCj4gLSAqLw0KPiAtDQo+IC1zdGF0aWMgaW50IHIxMjhfZG9fcGl4Y2Fj aGVfZmx1c2goZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsNCj4gLQl1MzIg dG1wOw0KPiAtCWludCBpOw0KPiAtDQo+IC0JdG1wID0gUjEyOF9SRUFEKFIxMjhfUENfTkdV SV9DVExTVEFUKSB8IFIxMjhfUENfRkxVU0hfQUxMOw0KPiAtCVIxMjhfV1JJVEUoUjEyOF9Q Q19OR1VJX0NUTFNUQVQsIHRtcCk7DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3By aXYtPnVzZWNfdGltZW91dDsgaSsrKSB7DQo+IC0JCWlmICghKFIxMjhfUkVBRChSMTI4X1BD X05HVUlfQ1RMU1RBVCkgJiBSMTI4X1BDX0JVU1kpKQ0KPiAtCQkJcmV0dXJuIDA7DQo+IC0J CXVkZWxheSgxKTsNCj4gLQl9DQo+IC0NCj4gLSNpZiBSMTI4X0ZJRk9fREVCVUcNCj4gLQlE Uk1fRVJST1IoImZhaWxlZCFcbiIpOw0KPiAtI2VuZGlmDQo+IC0JcmV0dXJuIC1FQlVTWTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCByMTI4X2RvX3dhaXRfZm9yX2ZpZm8oZHJtX3Ix MjhfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGVudHJpZXMpDQo+IC17DQo+IC0JaW50IGk7 DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsr KSB7DQo+IC0JCWludCBzbG90cyA9IFIxMjhfUkVBRChSMTI4X0dVSV9TVEFUKSAmIFIxMjhf R1VJX0ZJRk9DTlRfTUFTSzsNCj4gLQkJaWYgKHNsb3RzID49IGVudHJpZXMpDQo+IC0JCQly ZXR1cm4gMDsNCj4gLQkJdWRlbGF5KDEpOw0KPiAtCX0NCj4gLQ0KPiAtI2lmIFIxMjhfRklG T19ERUJVRw0KPiAtCURSTV9FUlJPUigiZmFpbGVkIVxuIik7DQo+IC0jZW5kaWYNCj4gLQly ZXR1cm4gLUVCVVNZOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IHIxMjhfZG9fd2FpdF9m b3JfaWRsZShkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCWludCBp LCByZXQ7DQo+IC0NCj4gLQlyZXQgPSByMTI4X2RvX3dhaXRfZm9yX2ZpZm8oZGV2X3ByaXYs IDY0KTsNCj4gLQlpZiAocmV0KQ0KPiAtCQlyZXR1cm4gcmV0Ow0KPiAtDQo+IC0JZm9yIChp ID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgew0KPiAtCQlpZiAoIShS MTI4X1JFQUQoUjEyOF9HVUlfU1RBVCkgJiBSMTI4X0dVSV9BQ1RJVkUpKSB7DQo+IC0JCQly MTI4X2RvX3BpeGNhY2hlX2ZsdXNoKGRldl9wcml2KTsNCj4gLQkJCXJldHVybiAwOw0KPiAt CQl9DQo+IC0JCXVkZWxheSgxKTsNCj4gLQl9DQo+IC0NCj4gLSNpZiBSMTI4X0ZJRk9fREVC VUcNCj4gLQlEUk1fRVJST1IoImZhaWxlZCFcbiIpOw0KPiAtI2VuZGlmDQo+IC0JcmV0dXJu IC1FQlVTWTsNCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtICogQ0NFIGNvbnRy b2wsIGluaXRpYWxpemF0aW9uDQo+IC0gKi8NCj4gLQ0KPiAtLyogTG9hZCB0aGUgbWljcm9j b2RlIGZvciB0aGUgQ0NFICovDQo+IC1zdGF0aWMgaW50IHIxMjhfY2NlX2xvYWRfbWljcm9j b2RlKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0Jc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldjsNCj4gLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3Ow0K PiAtCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsNCj4gLQlpbnQgcmMsIGk7DQo+IC0NCj4gLQlE Uk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lz dGVyX3NpbXBsZSgicjEyOF9jY2UiLCAwLCBOVUxMLCAwKTsNCj4gLQlpZiAoSVNfRVJSKHBk ZXYpKSB7DQo+IC0JCXByX2VycigicjEyOF9jY2U6IEZhaWxlZCB0byByZWdpc3RlciBmaXJt d2FyZVxuIik7DQo+IC0JCXJldHVybiBQVFJfRVJSKHBkZXYpOw0KPiAtCX0NCj4gLQlyYyA9 IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBGSVJNV0FSRV9OQU1FLCAmcGRldi0+ZGV2KTsNCj4g LQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsNCj4gLQlpZiAocmMpIHsNCj4g LQkJcHJfZXJyKCJyMTI4X2NjZTogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4i LA0KPiAtCQkgICAgICAgRklSTVdBUkVfTkFNRSk7DQo+IC0JCXJldHVybiByYzsNCj4gLQl9 DQo+IC0NCj4gLQlpZiAoZnctPnNpemUgIT0gMjU2ICogOCkgew0KPiAtCQlwcl9lcnIoInIx MjhfY2NlOiBCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwNCj4gLQkJ ICAgICAgIGZ3LT5zaXplLCBGSVJNV0FSRV9OQU1FKTsNCj4gLQkJcmMgPSAtRUlOVkFMOw0K PiAtCQlnb3RvIG91dF9yZWxlYXNlOw0KPiAtCX0NCj4gLQ0KPiAtCXIxMjhfZG9fd2FpdF9m b3JfaWRsZShkZXZfcHJpdik7DQo+IC0NCj4gLQlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAq KWZ3LT5kYXRhOw0KPiAtCVIxMjhfV1JJVEUoUjEyOF9QTTRfTUlDUk9DT0RFX0FERFIsIDAp Ow0KPiAtCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgew0KPiAtCQlSMTI4X1dSSVRFKFIx MjhfUE00X01JQ1JPQ09ERV9EQVRBSCwNCj4gLQkJCSAgIGJlMzJfdG9fY3B1cCgmZndfZGF0 YVtpICogMl0pKTsNCj4gLQkJUjEyOF9XUklURShSMTI4X1BNNF9NSUNST0NPREVfREFUQUws DQo+IC0JCQkgICBiZTMyX3RvX2NwdXAoJmZ3X2RhdGFbaSAqIDIgKyAxXSkpOw0KPiAtCX0N Cj4gLQ0KPiAtb3V0X3JlbGVhc2U6DQo+IC0JcmVsZWFzZV9maXJtd2FyZShmdyk7DQo+IC0J cmV0dXJuIHJjOw0KPiAtfQ0KPiAtDQo+IC0vKiBGbHVzaCBhbnkgcGVuZGluZyBjb21tYW5k cyB0byB0aGUgQ0NFLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGp1c3QNCj4gLSAqIHBy aW9yIHRvIGEgd2FpdCBmb3IgaWRsZSwgYXMgaXQgaW5mb3JtcyB0aGUgZW5naW5lIHRoYXQg dGhlIGNvbW1hbmQNCj4gLSAqIHN0cmVhbSBpcyBlbmRpbmcuDQo+IC0gKi8NCj4gLXN0YXRp YyB2b2lkIHIxMjhfZG9fY2NlX2ZsdXNoKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYp DQo+IC17DQo+IC0JdTMyIHRtcDsNCj4gLQ0KPiAtCXRtcCA9IFIxMjhfUkVBRChSMTI4X1BN NF9CVUZGRVJfRExfV1BUUikgfCBSMTI4X1BNNF9CVUZGRVJfRExfRE9ORTsNCj4gLQlSMTI4 X1dSSVRFKFIxMjhfUE00X0JVRkZFUl9ETF9XUFRSLCB0bXApOw0KPiAtfQ0KPiAtDQo+IC0v KiBXYWl0IGZvciB0aGUgQ0NFIHRvIGdvIGlkbGUuDQo+IC0gKi8NCj4gLWludCByMTI4X2Rv X2NjZV9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0JaW50 IGk7DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsg aSsrKSB7DQo+IC0JCWlmIChHRVRfUklOR19IRUFEKGRldl9wcml2KSA9PSBkZXZfcHJpdi0+ cmluZy50YWlsKSB7DQo+IC0JCQlpbnQgcG00c3RhdCA9IFIxMjhfUkVBRChSMTI4X1BNNF9T VEFUKTsNCj4gLQkJCWlmICgoKHBtNHN0YXQgJiBSMTI4X1BNNF9GSUZPQ05UX01BU0spID49 DQo+IC0JCQkgICAgIGRldl9wcml2LT5jY2VfZmlmb19zaXplKSAmJg0KPiAtCQkJICAgICEo cG00c3RhdCAmIChSMTI4X1BNNF9CVVNZIHwNCj4gLQkJCQkJIFIxMjhfUE00X0dVSV9BQ1RJ VkUpKSkgew0KPiAtCQkJCXJldHVybiByMTI4X2RvX3BpeGNhY2hlX2ZsdXNoKGRldl9wcml2 KTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiAtCQl1ZGVsYXkoMSk7DQo+IC0JfQ0KPiAtDQo+IC0j aWYgUjEyOF9GSUZPX0RFQlVHDQo+IC0JRFJNX0VSUk9SKCJmYWlsZWQhXG4iKTsNCj4gLQly MTI4X3N0YXR1cyhkZXZfcHJpdik7DQo+IC0jZW5kaWYNCj4gLQlyZXR1cm4gLUVCVVNZOw0K PiAtfQ0KPiAtDQo+IC0vKiBTdGFydCB0aGUgQ29uY3VycmVudCBDb21tYW5kIEVuZ2luZS4N Cj4gLSAqLw0KPiAtc3RhdGljIHZvaWQgcjEyOF9kb19jY2Vfc3RhcnQoZHJtX3IxMjhfcHJp dmF0ZV90ICpkZXZfcHJpdikNCj4gLXsNCj4gLQlyMTI4X2RvX3dhaXRfZm9yX2lkbGUoZGV2 X3ByaXYpOw0KPiAtDQo+IC0JUjEyOF9XUklURShSMTI4X1BNNF9CVUZGRVJfQ05UTCwNCj4g LQkJICAgZGV2X3ByaXYtPmNjZV9tb2RlIHwgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3DQo+ IC0JCSAgIHwgUjEyOF9QTTRfQlVGRkVSX0NOVExfTk9VUERBVEUpOw0KPiAtCVIxMjhfUkVB RChSMTI4X1BNNF9CVUZGRVJfQUREUik7CS8qIGFzIHBlciB0aGUgc2FtcGxlIGNvZGUgKi8N Cj4gLQlSMTI4X1dSSVRFKFIxMjhfUE00X01JQ1JPX0NOVEwsIFIxMjhfUE00X01JQ1JPX0ZS RUVSVU4pOw0KPiAtDQo+IC0JZGV2X3ByaXYtPmNjZV9ydW5uaW5nID0gMTsNCj4gLX0NCj4g LQ0KPiAtLyogUmVzZXQgdGhlIENvbmN1cnJlbnQgQ29tbWFuZCBFbmdpbmUuICBUaGlzIHdp bGwgbm90IGZsdXNoIGFueSBwZW5kaW5nDQo+IC0gKiBjb21tYW5kcywgc28geW91IG11c3Qg d2FpdCBmb3IgdGhlIENDRSBjb21tYW5kIHN0cmVhbSB0byBjb21wbGV0ZQ0KPiAtICogYmVm b3JlIGNhbGxpbmcgdGhpcyByb3V0aW5lLg0KPiAtICovDQo+IC1zdGF0aWMgdm9pZCByMTI4 X2RvX2NjZV9yZXNldChkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAt CVIxMjhfV1JJVEUoUjEyOF9QTTRfQlVGRkVSX0RMX1dQVFIsIDApOw0KPiAtCVIxMjhfV1JJ VEUoUjEyOF9QTTRfQlVGRkVSX0RMX1JQVFIsIDApOw0KPiAtCWRldl9wcml2LT5yaW5nLnRh aWwgPSAwOw0KPiAtfQ0KPiAtDQo+IC0vKiBTdG9wIHRoZSBDb25jdXJyZW50IENvbW1hbmQg RW5naW5lLiAgVGhpcyB3aWxsIG5vdCBmbHVzaCBhbnkgcGVuZGluZw0KPiAtICogY29tbWFu ZHMsIHNvIHlvdSBtdXN0IGZsdXNoIHRoZSBjb21tYW5kIHN0cmVhbSBhbmQgd2FpdCBmb3Ig dGhlIENDRQ0KPiAtICogdG8gZ28gaWRsZSBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUu DQo+IC0gKi8NCj4gLXN0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX3N0b3AoZHJtX3IxMjhfcHJp dmF0ZV90ICpkZXZfcHJpdikNCj4gLXsNCj4gLQlSMTI4X1dSSVRFKFIxMjhfUE00X01JQ1JP X0NOVEwsIDApOw0KPiAtCVIxMjhfV1JJVEUoUjEyOF9QTTRfQlVGRkVSX0NOVEwsDQo+IC0J CSAgIFIxMjhfUE00X05PTlBNNCB8IFIxMjhfUE00X0JVRkZFUl9DTlRMX05PVVBEQVRFKTsN Cj4gLQ0KPiAtCWRldl9wcml2LT5jY2VfcnVubmluZyA9IDA7DQo+IC19DQo+IC0NCj4gLS8q IFJlc2V0IHRoZSBlbmdpbmUuICBUaGlzIHdpbGwgc3RvcCB0aGUgQ0NFIGlmIGl0IGlzIHJ1 bm5pbmcuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQgcjEyOF9kb19lbmdpbmVfcmVzZXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQl1MzIgY2xvY2tfY250bF9pbmRleCwg bWNsa19jbnRsLCBnZW5fcmVzZXRfY250bDsNCj4gLQ0KPiAtCXIxMjhfZG9fcGl4Y2FjaGVf Zmx1c2goZGV2X3ByaXYpOw0KPiAtDQo+IC0JY2xvY2tfY250bF9pbmRleCA9IFIxMjhfUkVB RChSMTI4X0NMT0NLX0NOVExfSU5ERVgpOw0KPiAtCW1jbGtfY250bCA9IFIxMjhfUkVBRF9Q TEwoZGV2LCBSMTI4X01DTEtfQ05UTCk7DQo+IC0NCj4gLQlSMTI4X1dSSVRFX1BMTChSMTI4 X01DTEtfQ05UTCwNCj4gLQkJICAgICAgIG1jbGtfY250bCB8IFIxMjhfRk9SQ0VfR0NQIHwg UjEyOF9GT1JDRV9QSVBFM0RfQ1ApOw0KPiAtDQo+IC0JZ2VuX3Jlc2V0X2NudGwgPSBSMTI4 X1JFQUQoUjEyOF9HRU5fUkVTRVRfQ05UTCk7DQo+IC0NCj4gLQkvKiBUYWtlbiBmcm9tIHRo ZSBzYW1wbGUgY29kZSAtIGRvIG5vdCBjaGFuZ2UgKi8NCj4gLQlSMTI4X1dSSVRFKFIxMjhf R0VOX1JFU0VUX0NOVEwsIGdlbl9yZXNldF9jbnRsIHwgUjEyOF9TT0ZUX1JFU0VUX0dVSSk7 DQo+IC0JUjEyOF9SRUFEKFIxMjhfR0VOX1JFU0VUX0NOVEwpOw0KPiAtCVIxMjhfV1JJVEUo UjEyOF9HRU5fUkVTRVRfQ05UTCwgZ2VuX3Jlc2V0X2NudGwgJiB+UjEyOF9TT0ZUX1JFU0VU X0dVSSk7DQo+IC0JUjEyOF9SRUFEKFIxMjhfR0VOX1JFU0VUX0NOVEwpOw0KPiAtDQo+IC0J UjEyOF9XUklURV9QTEwoUjEyOF9NQ0xLX0NOVEwsIG1jbGtfY250bCk7DQo+IC0JUjEyOF9X UklURShSMTI4X0NMT0NLX0NOVExfSU5ERVgsIGNsb2NrX2NudGxfaW5kZXgpOw0KPiAtCVIx MjhfV1JJVEUoUjEyOF9HRU5fUkVTRVRfQ05UTCwgZ2VuX3Jlc2V0X2NudGwpOw0KPiAtDQo+ IC0JLyogUmVzZXQgdGhlIENDRSByaW5nICovDQo+IC0JcjEyOF9kb19jY2VfcmVzZXQoZGV2 X3ByaXYpOw0KPiAtDQo+IC0JLyogVGhlIENDRSBpcyBubyBsb25nZXIgcnVubmluZyBhZnRl ciBhbiBlbmdpbmUgcmVzZXQgKi8NCj4gLQlkZXZfcHJpdi0+Y2NlX3J1bm5pbmcgPSAwOw0K PiAtDQo+IC0JLyogUmVzZXQgYW55IHBlbmRpbmcgdmVydGV4LCBpbmRpcmVjdCBidWZmZXJz ICovDQo+IC0JcjEyOF9mcmVlbGlzdF9yZXNldChkZXYpOw0KPiAtDQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2luaXRfcmluZ19idWZmZXIo c3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCQkgICAgICBkcm1fcjEyOF9wcml2YXRl X3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCXUzMiByaW5nX3N0YXJ0Ow0KPiAtCXUzMiB0bXA7 DQo+IC0NCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQkvKiBUaGUgbWFudWFsIChw LiAyKSBzYXlzIHRoaXMgYWRkcmVzcyBpcyBpbiAiVk0gc3BhY2UiLiAgVGhpcw0KPiAtCSAq IG1lYW5zIGl0J3MgYW4gb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIEFHUCBzcGFjZS4NCj4g LQkgKi8NCj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19BR1ApDQo+IC0JaWYgKCFkZXZfcHJp di0+aXNfcGNpKQ0KPiAtCQlyaW5nX3N0YXJ0ID0gZGV2X3ByaXYtPmNjZV9yaW5nLT5vZmZz ZXQgLSBkZXYtPmFncC0+YmFzZTsNCj4gLQllbHNlDQo+IC0jZW5kaWYNCj4gLQkJcmluZ19z dGFydCA9IGRldl9wcml2LT5jY2VfcmluZy0+b2Zmc2V0IC0NCj4gLQkJICAgICh1bnNpZ25l ZCBsb25nKWRldi0+c2ctPnZpcnR1YWw7DQo+IC0NCj4gLQlSMTI4X1dSSVRFKFIxMjhfUE00 X0JVRkZFUl9PRkZTRVQsIHJpbmdfc3RhcnQgfCBSMTI4X0FHUF9PRkZTRVQpOw0KPiAtDQo+ IC0JUjEyOF9XUklURShSMTI4X1BNNF9CVUZGRVJfRExfV1BUUiwgMCk7DQo+IC0JUjEyOF9X UklURShSMTI4X1BNNF9CVUZGRVJfRExfUlBUUiwgMCk7DQo+IC0NCj4gLQkvKiBTZXQgd2F0 ZXJtYXJrIGNvbnRyb2wgKi8NCj4gLQlSMTI4X1dSSVRFKFIxMjhfUE00X0JVRkZFUl9XTV9D TlRMLA0KPiAtCQkgICAoKFIxMjhfV0FURVJNQVJLX0wgLyA0KSA8PCBSMTI4X1dNQV9TSElG VCkNCj4gLQkJICAgfCAoKFIxMjhfV0FURVJNQVJLX00gLyA0KSA8PCBSMTI4X1dNQl9TSElG VCkNCj4gLQkJICAgfCAoKFIxMjhfV0FURVJNQVJLX04gLyA0KSA8PCBSMTI4X1dNQ19TSElG VCkNCj4gLQkJICAgfCAoKFIxMjhfV0FURVJNQVJLX0sgLyA2NCkgPDwgUjEyOF9XQl9XTV9T SElGVCkpOw0KPiAtDQo+IC0JLyogRm9yY2UgcmVhZC4gIFdoeT8gIEJlY2F1c2UgaXQncyBp biB0aGUgZXhhbXBsZXMuLi4gKi8NCj4gLQlSMTI4X1JFQUQoUjEyOF9QTTRfQlVGRkVSX0FE RFIpOw0KPiAtDQo+IC0JLyogVHVybiBvbiBidXMgbWFzdGVyaW5nICovDQo+IC0JdG1wID0g UjEyOF9SRUFEKFIxMjhfQlVTX0NOVEwpICYgflIxMjhfQlVTX01BU1RFUl9ESVM7DQo+IC0J UjEyOF9XUklURShSMTI4X0JVU19DTlRMLCB0bXApOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg aW50IHIxMjhfZG9faW5pdF9jY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX3IxMjhf aW5pdF90ICppbml0KQ0KPiAtew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXY7 DQo+IC0JaW50IHJjOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JaWYg KGRldi0+ZGV2X3ByaXZhdGUpIHsNCj4gLQkJRFJNX0RFQlVHKCJjYWxsZWQgd2hlbiBhbHJl YWR5IGluaXRpYWxpemVkXG4iKTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAt DQo+IC0JZGV2X3ByaXYgPSBremFsbG9jKHNpemVvZihkcm1fcjEyOF9wcml2YXRlX3QpLCBH RlBfS0VSTkVMKTsNCj4gLQlpZiAoZGV2X3ByaXYgPT0gTlVMTCkNCj4gLQkJcmV0dXJuIC1F Tk9NRU07DQo+IC0NCj4gLQlkZXZfcHJpdi0+aXNfcGNpID0gaW5pdC0+aXNfcGNpOw0KPiAt DQo+IC0JaWYgKGRldl9wcml2LT5pc19wY2kgJiYgIWRldi0+c2cpIHsNCj4gLQkJRFJNX0VS Uk9SKCJQQ0kgR0FSVCBtZW1vcnkgbm90IGFsbG9jYXRlZCFcbiIpOw0KPiAtCQlkZXYtPmRl dl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsNCj4gLQkJcjEyOF9kb19jbGVhbnVwX2Nj ZShkZXYpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlkZXZfcHJp di0+dXNlY190aW1lb3V0ID0gaW5pdC0+dXNlY190aW1lb3V0Ow0KPiAtCWlmIChkZXZfcHJp di0+dXNlY190aW1lb3V0IDwgMSB8fA0KPiAtCSAgICBkZXZfcHJpdi0+dXNlY190aW1lb3V0 ID4gUjEyOF9NQVhfVVNFQ19USU1FT1VUKSB7DQo+IC0JCURSTV9ERUJVRygiVElNRU9VVCBw cm9ibGVtIVxuIik7DQo+IC0JCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2 Ow0KPiAtCQlyMTI4X2RvX2NsZWFudXBfY2NlKGRldik7DQo+IC0JCXJldHVybiAtRUlOVkFM Ow0KPiAtCX0NCj4gLQ0KPiAtCWRldl9wcml2LT5jY2VfbW9kZSA9IGluaXQtPmNjZV9tb2Rl Ow0KPiAtDQo+IC0JLyogR0g6IFNpbXBsZSBpZGxlIGNoZWNrLg0KPiAtCSAqLw0KPiAtCWF0 b21pY19zZXQoJmRldl9wcml2LT5pZGxlX2NvdW50LCAwKTsNCj4gLQ0KPiAtCS8qIFdlIGRv bid0IHN1cHBvcnQgYW55dGhpbmcgb3RoZXIgdGhhbiBidXMtbWFzdGVyaW5nIHJpbmcgbW9k ZSwNCj4gLQkgKiBidXQgdGhlIHJpbmcgY2FuIGJlIGluIGVpdGhlciBBR1Agb3IgUENJIHNw YWNlIGZvciB0aGUgcmluZw0KPiAtCSAqIHJlYWQgcG9pbnRlci4NCj4gLQkgKi8NCj4gLQlp ZiAoKGluaXQtPmNjZV9tb2RlICE9IFIxMjhfUE00XzE5MkJNKSAmJg0KPiAtCSAgICAoaW5p dC0+Y2NlX21vZGUgIT0gUjEyOF9QTTRfMTI4Qk1fNjRJTkRCTSkgJiYNCj4gLQkgICAgKGlu aXQtPmNjZV9tb2RlICE9IFIxMjhfUE00XzY0Qk1fMTI4SU5EQk0pICYmDQo+IC0JICAgIChp bml0LT5jY2VfbW9kZSAhPSBSMTI4X1BNNF82NEJNXzY0VkNCTV82NElOREJNKSkgew0KPiAt CQlEUk1fREVCVUcoIkJhZCBjY2VfbW9kZSFcbiIpOw0KPiAtCQlkZXYtPmRldl9wcml2YXRl ID0gKHZvaWQgKilkZXZfcHJpdjsNCj4gLQkJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOw0K PiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlzd2l0Y2ggKGluaXQtPmNj ZV9tb2RlKSB7DQo+IC0JY2FzZSBSMTI4X1BNNF9OT05QTTQ6DQo+IC0JCWRldl9wcml2LT5j Y2VfZmlmb19zaXplID0gMDsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBSMTI4X1BNNF8xOTJQ SU86DQo+IC0JY2FzZSBSMTI4X1BNNF8xOTJCTToNCj4gLQkJZGV2X3ByaXYtPmNjZV9maWZv X3NpemUgPSAxOTI7DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgUjEyOF9QTTRfMTI4UElPXzY0 SU5EQk06DQo+IC0JY2FzZSBSMTI4X1BNNF8xMjhCTV82NElOREJNOg0KPiAtCQlkZXZfcHJp di0+Y2NlX2ZpZm9fc2l6ZSA9IDEyODsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBSMTI4X1BN NF82NFBJT18xMjhJTkRCTToNCj4gLQljYXNlIFIxMjhfUE00XzY0Qk1fMTI4SU5EQk06DQo+ IC0JY2FzZSBSMTI4X1BNNF82NFBJT182NFZDQk1fNjRJTkRCTToNCj4gLQljYXNlIFIxMjhf UE00XzY0Qk1fNjRWQ0JNXzY0SU5EQk06DQo+IC0JY2FzZSBSMTI4X1BNNF82NFBJT182NFZD UElPXzY0SU5EUElPOg0KPiAtCQlkZXZfcHJpdi0+Y2NlX2ZpZm9fc2l6ZSA9IDY0Ow0KPiAt CQlicmVhazsNCj4gLQl9DQo+IC0NCj4gLQlzd2l0Y2ggKGluaXQtPmZiX2JwcCkgew0KPiAt CWNhc2UgMTY6DQo+IC0JCWRldl9wcml2LT5jb2xvcl9mbXQgPSBSMTI4X0RBVEFUWVBFX1JH QjU2NTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSAzMjoNCj4gLQlkZWZhdWx0Og0KPiAtCQlk ZXZfcHJpdi0+Y29sb3JfZm10ID0gUjEyOF9EQVRBVFlQRV9BUkdCODg4ODsNCj4gLQkJYnJl YWs7DQo+IC0JfQ0KPiAtCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9v ZmZzZXQ7DQo+IC0JZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5pdC0+ZnJvbnRfcGl0Y2g7 DQo+IC0JZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7DQo+IC0J ZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNoOw0KPiAtDQo+IC0Jc3dp dGNoIChpbml0LT5kZXB0aF9icHApIHsNCj4gLQljYXNlIDE2Og0KPiAtCQlkZXZfcHJpdi0+ ZGVwdGhfZm10ID0gUjEyOF9EQVRBVFlQRV9SR0I1NjU7DQo+IC0JCWJyZWFrOw0KPiAtCWNh c2UgMjQ6DQo+IC0JY2FzZSAzMjoNCj4gLQlkZWZhdWx0Og0KPiAtCQlkZXZfcHJpdi0+ZGVw dGhfZm10ID0gUjEyOF9EQVRBVFlQRV9BUkdCODg4ODsNCj4gLQkJYnJlYWs7DQo+IC0JfQ0K PiAtCWRldl9wcml2LT5kZXB0aF9vZmZzZXQgPSBpbml0LT5kZXB0aF9vZmZzZXQ7DQo+IC0J ZGV2X3ByaXYtPmRlcHRoX3BpdGNoID0gaW5pdC0+ZGVwdGhfcGl0Y2g7DQo+IC0JZGV2X3By aXYtPnNwYW5fb2Zmc2V0ID0gaW5pdC0+c3Bhbl9vZmZzZXQ7DQo+IC0NCj4gLQlkZXZfcHJp di0+ZnJvbnRfcGl0Y2hfb2Zmc2V0X2MgPSAoKChkZXZfcHJpdi0+ZnJvbnRfcGl0Y2ggLyA4 KSA8PCAyMSkgfA0KPiAtCQkJCQkgIChkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ID4+IDUpKTsN Cj4gLQlkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXRfYyA9ICgoKGRldl9wcml2LT5iYWNr X3BpdGNoIC8gOCkgPDwgMjEpIHwNCj4gLQkJCQkJIChkZXZfcHJpdi0+YmFja19vZmZzZXQg Pj4gNSkpOw0KPiAtCWRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXRfYyA9ICgoKGRldl9w cml2LT5kZXB0aF9waXRjaCAvIDgpIDw8IDIxKSB8DQo+IC0JCQkJCSAgKGRldl9wcml2LT5k ZXB0aF9vZmZzZXQgPj4gNSkgfA0KPiAtCQkJCQkgIFIxMjhfRFNUX1RJTEUpOw0KPiAtCWRl dl9wcml2LT5zcGFuX3BpdGNoX29mZnNldF9jID0gKCgoZGV2X3ByaXYtPmRlcHRoX3BpdGNo IC8gOCkgPDwgMjEpIHwNCj4gLQkJCQkJIChkZXZfcHJpdi0+c3Bhbl9vZmZzZXQgPj4gNSkp Ow0KPiAtDQo+IC0JZGV2X3ByaXYtPnNhcmVhID0gZHJtX2xlZ2FjeV9nZXRzYXJlYShkZXYp Ow0KPiAtCWlmICghZGV2X3ByaXYtPnNhcmVhKSB7DQo+IC0JCURSTV9FUlJPUigiY291bGQg bm90IGZpbmQgc2FyZWEhXG4iKTsNCj4gLQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICop ZGV2X3ByaXY7DQo+IC0JCXIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsNCj4gLQkJcmV0dXJu IC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JZGV2X3ByaXYtPm1taW8gPSBkcm1fbGVnYWN5 X2ZpbmRtYXAoZGV2LCBpbml0LT5tbWlvX29mZnNldCk7DQo+IC0JaWYgKCFkZXZfcHJpdi0+ bW1pbykgew0KPiAtCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIG1taW8gcmVnaW9uIVxu Iik7DQo+IC0JCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2Ow0KPiAtCQly MTI4X2RvX2NsZWFudXBfY2NlKGRldik7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0N Cj4gLQlkZXZfcHJpdi0+Y2NlX3JpbmcgPSBkcm1fbGVnYWN5X2ZpbmRtYXAoZGV2LCBpbml0 LT5yaW5nX29mZnNldCk7DQo+IC0JaWYgKCFkZXZfcHJpdi0+Y2NlX3JpbmcpIHsNCj4gLQkJ RFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBjY2UgcmluZyByZWdpb24hXG4iKTsNCj4gLQkJ ZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7DQo+IC0JCXIxMjhfZG9fY2xl YW51cF9jY2UoZGV2KTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtCWRldl9w cml2LT5yaW5nX3JwdHIgPSBkcm1fbGVnYWN5X2ZpbmRtYXAoZGV2LCBpbml0LT5yaW5nX3Jw dHJfb2Zmc2V0KTsNCj4gLQlpZiAoIWRldl9wcml2LT5yaW5nX3JwdHIpIHsNCj4gLQkJRFJN X0VSUk9SKCJjb3VsZCBub3QgZmluZCByaW5nIHJlYWQgcG9pbnRlciFcbiIpOw0KPiAtCQlk ZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsNCj4gLQkJcjEyOF9kb19jbGVh bnVwX2NjZShkZXYpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0JZGV2LT5h Z3BfYnVmZmVyX3Rva2VuID0gaW5pdC0+YnVmZmVyc19vZmZzZXQ7DQo+IC0JZGV2LT5hZ3Bf YnVmZmVyX21hcCA9IGRybV9sZWdhY3lfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zm c2V0KTsNCj4gLQlpZiAoIWRldi0+YWdwX2J1ZmZlcl9tYXApIHsNCj4gLQkJRFJNX0VSUk9S KCJjb3VsZCBub3QgZmluZCBkbWEgYnVmZmVyIHJlZ2lvbiFcbiIpOw0KPiAtCQlkZXYtPmRl dl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsNCj4gLQkJcjEyOF9kb19jbGVhbnVwX2Nj ZShkZXYpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoIWRl dl9wcml2LT5pc19wY2kpIHsNCj4gLQkJZGV2X3ByaXYtPmFncF90ZXh0dXJlcyA9DQo+IC0J CSAgICBkcm1fbGVnYWN5X2ZpbmRtYXAoZGV2LCBpbml0LT5hZ3BfdGV4dHVyZXNfb2Zmc2V0 KTsNCj4gLQkJaWYgKCFkZXZfcHJpdi0+YWdwX3RleHR1cmVzKSB7DQo+IC0JCQlEUk1fRVJS T1IoImNvdWxkIG5vdCBmaW5kIGFncCB0ZXh0dXJlIHJlZ2lvbiFcbiIpOw0KPiAtCQkJZGV2 LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7DQo+IC0JCQlyMTI4X2RvX2NsZWFu dXBfY2NlKGRldik7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCX0NCj4g LQ0KPiAtCWRldl9wcml2LT5zYXJlYV9wcml2ID0NCj4gLQkgICAgKGRybV9yMTI4X3NhcmVh X3QgKikgKCh1OCAqKSBkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArDQo+IC0JCQkJICBpbml0 LT5zYXJlYV9wcml2X29mZnNldCk7DQo+IC0NCj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19B R1ApDQo+IC0JaWYgKCFkZXZfcHJpdi0+aXNfcGNpKSB7DQo+IC0JCWRybV9sZWdhY3lfaW9y ZW1hcF93YyhkZXZfcHJpdi0+Y2NlX3JpbmcsIGRldik7DQo+IC0JCWRybV9sZWdhY3lfaW9y ZW1hcF93YyhkZXZfcHJpdi0+cmluZ19ycHRyLCBkZXYpOw0KPiAtCQlkcm1fbGVnYWN5X2lv cmVtYXBfd2MoZGV2LT5hZ3BfYnVmZmVyX21hcCwgZGV2KTsNCj4gLQkJaWYgKCFkZXZfcHJp di0+Y2NlX3JpbmctPmhhbmRsZSB8fA0KPiAtCQkgICAgIWRldl9wcml2LT5yaW5nX3JwdHIt PmhhbmRsZSB8fA0KPiAtCQkgICAgIWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSkgew0K PiAtCQkJRFJNX0VSUk9SKCJDb3VsZCBub3QgaW9yZW1hcCBhZ3AgcmVnaW9ucyFcbiIpOw0K PiAtCQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7DQo+IC0JCQlyMTI4 X2RvX2NsZWFudXBfY2NlKGRldik7DQo+IC0JCQlyZXR1cm4gLUVOT01FTTsNCj4gLQkJfQ0K PiAtCX0gZWxzZQ0KPiAtI2VuZGlmDQo+IC0Jew0KPiAtCQlkZXZfcHJpdi0+Y2NlX3Jpbmct PmhhbmRsZSA9DQo+IC0JCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jY2Vf cmluZy0+b2Zmc2V0Ow0KPiAtCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQ0KPiAt CQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7 DQo+IC0JCWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSA9DQo+IC0JCQkodm9pZCAqKSh1 bnNpZ25lZCBsb25nKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsNCj4gLQl9DQo+IC0N Cj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19BR1ApDQo+IC0JaWYgKCFkZXZfcHJpdi0+aXNf cGNpKQ0KPiAtCQlkZXZfcHJpdi0+Y2NlX2J1ZmZlcnNfb2Zmc2V0ID0gZGV2LT5hZ3AtPmJh c2U7DQo+IC0JZWxzZQ0KPiAtI2VuZGlmDQo+IC0JCWRldl9wcml2LT5jY2VfYnVmZmVyc19v ZmZzZXQgPSAodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsOw0KPiAtDQo+IC0JZGV2 X3ByaXYtPnJpbmcuc3RhcnQgPSAodTMyICopIGRldl9wcml2LT5jY2VfcmluZy0+aGFuZGxl Ow0KPiAtCWRldl9wcml2LT5yaW5nLmVuZCA9ICgodTMyICopIGRldl9wcml2LT5jY2Vfcmlu Zy0+aGFuZGxlDQo+IC0JCQkgICAgICArIGluaXQtPnJpbmdfc2l6ZSAvIHNpemVvZih1MzIp KTsNCj4gLQlkZXZfcHJpdi0+cmluZy5zaXplID0gaW5pdC0+cmluZ19zaXplOw0KPiAtCWRl dl9wcml2LT5yaW5nLnNpemVfbDJxdyA9IG9yZGVyX2Jhc2VfMihpbml0LT5yaW5nX3NpemUg LyA4KTsNCj4gLQ0KPiAtCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IChkZXZfcHJpdi0+ cmluZy5zaXplIC8gc2l6ZW9mKHUzMikpIC0gMTsNCj4gLQ0KPiAtCWRldl9wcml2LT5yaW5n LmhpZ2hfbWFyayA9IDEyODsNCj4gLQ0KPiAtCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0 X2ZyYW1lID0gMDsNCj4gLQlSMTI4X1dSSVRFKFIxMjhfTEFTVF9GUkFNRV9SRUcsIGRldl9w cml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lKTsNCj4gLQ0KPiAtCWRldl9wcml2LT5zYXJl YV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gMDsNCj4gLQlSMTI4X1dSSVRFKFIxMjhfTEFTVF9E SVNQQVRDSF9SRUcsIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoKTsNCj4g LQ0KPiAtI2lmIElTX0VOQUJMRUQoQ09ORklHX0FHUCkNCj4gLQlpZiAoZGV2X3ByaXYtPmlz X3BjaSkgew0KPiAtI2VuZGlmDQo+IC0JCWRldl9wcml2LT5nYXJ0X2luZm8udGFibGVfbWFz ayA9IERNQV9CSVRfTUFTSygzMik7DQo+IC0JCWRldl9wcml2LT5nYXJ0X2luZm8uZ2FydF90 YWJsZV9sb2NhdGlvbiA9IERSTV9BVElfR0FSVF9NQUlOOw0KPiAtCQlkZXZfcHJpdi0+Z2Fy dF9pbmZvLnRhYmxlX3NpemUgPSBSMTI4X1BDSUdBUlRfVEFCTEVfU0laRTsNCj4gLQkJZGV2 X3ByaXYtPmdhcnRfaW5mby5hZGRyID0gTlVMTDsNCj4gLQkJZGV2X3ByaXYtPmdhcnRfaW5m by5idXNfYWRkciA9IDA7DQo+IC0JCWRldl9wcml2LT5nYXJ0X2luZm8uZ2FydF9yZWdfaWYg PSBEUk1fQVRJX0dBUlRfUENJOw0KPiAtCQlyYyA9IGRybV9hdGlfcGNpZ2FydF9pbml0KGRl diwgJmRldl9wcml2LT5nYXJ0X2luZm8pOw0KPiAtCQlpZiAocmMpIHsNCj4gLQkJCURSTV9F UlJPUigiZmFpbGVkIHRvIGluaXQgUENJIEdBUlQhXG4iKTsNCj4gLQkJCWRldi0+ZGV2X3By aXZhdGUgPSAodm9pZCAqKWRldl9wcml2Ow0KPiAtCQkJcjEyOF9kb19jbGVhbnVwX2NjZShk ZXYpOw0KPiAtCQkJcmV0dXJuIHJjOw0KPiAtCQl9DQo+IC0JCVIxMjhfV1JJVEUoUjEyOF9Q Q0lfR0FSVF9QQUdFLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKTsNCj4gLSNpZiBJ U19FTkFCTEVEKENPTkZJR19BR1ApDQo+IC0JfQ0KPiAtI2VuZGlmDQo+IC0NCj4gLQlyMTI4 X2NjZV9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYpOw0KPiAtCXJjID0gcjEyOF9j Y2VfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOw0KPiAtDQo+IC0JZGV2LT5kZXZfcHJpdmF0 ZSA9ICh2b2lkICopZGV2X3ByaXY7DQo+IC0NCj4gLQlyMTI4X2RvX2VuZ2luZV9yZXNldChk ZXYpOw0KPiAtDQo+IC0JaWYgKHJjKSB7DQo+IC0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGxv YWQgZmlybXdhcmUhXG4iKTsNCj4gLQkJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOw0KPiAt CX0NCj4gLQ0KPiAtCXJldHVybiByYzsNCj4gLX0NCj4gLQ0KPiAtaW50IHIxMjhfZG9fY2xl YW51cF9jY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQ0KPiAtCS8qIE1h a2Ugc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBoZXJlIGJlY2F1c2UgdGhlIHVuaW5z dGFsbCBpb2N0bA0KPiAtCSAqIG1heSBub3QgaGF2ZSBiZWVuIGNhbGxlZCBmcm9tIHVzZXJz cGFjZSBhbmQgYWZ0ZXIgZGV2X3ByaXZhdGUNCj4gLQkgKiBpcyBmcmVlZCwgaXQncyB0b28g bGF0ZS4NCj4gLQkgKi8NCj4gLQlpZiAoZGV2LT5pcnFfZW5hYmxlZCkNCj4gLQkJZHJtX2xl Z2FjeV9pcnFfdW5pbnN0YWxsKGRldik7DQo+IC0NCj4gLQlpZiAoZGV2LT5kZXZfcHJpdmF0 ZSkgew0KPiAtCQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsNCj4gLQ0KPiAtI2lmIElTX0VOQUJMRUQoQ09ORklHX0FHUCkNCj4gLQkJaWYgKCFk ZXZfcHJpdi0+aXNfcGNpKSB7DQo+IC0JCQlpZiAoZGV2X3ByaXYtPmNjZV9yaW5nICE9IE5V TEwpDQo+IC0JCQkJZHJtX2xlZ2FjeV9pb3JlbWFwZnJlZShkZXZfcHJpdi0+Y2NlX3Jpbmcs IGRldik7DQo+IC0JCQlpZiAoZGV2X3ByaXYtPnJpbmdfcnB0ciAhPSBOVUxMKQ0KPiAtCQkJ CWRybV9sZWdhY3lfaW9yZW1hcGZyZWUoZGV2X3ByaXYtPnJpbmdfcnB0ciwgZGV2KTsNCj4g LQkJCWlmIChkZXYtPmFncF9idWZmZXJfbWFwICE9IE5VTEwpIHsNCj4gLQkJCQlkcm1fbGVn YWN5X2lvcmVtYXBmcmVlKGRldi0+YWdwX2J1ZmZlcl9tYXAsIGRldik7DQo+IC0JCQkJZGV2 LT5hZ3BfYnVmZmVyX21hcCA9IE5VTEw7DQo+IC0JCQl9DQo+IC0JCX0gZWxzZQ0KPiAtI2Vu ZGlmDQo+IC0JCXsNCj4gLQkJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKQ0K PiAtCQkJCWlmICghZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LA0KPiAtCQkJCQkJCSZk ZXZfcHJpdi0+Z2FydF9pbmZvKSkNCj4gLQkJCQkJRFJNX0VSUk9SDQo+IC0JCQkJCSAgICAo ImZhaWxlZCB0byBjbGVhbnVwIFBDSSBHQVJUIVxuIik7DQo+IC0JCX0NCj4gLQ0KPiAtCQlr ZnJlZShkZXYtPmRldl9wcml2YXRlKTsNCj4gLQkJZGV2LT5kZXZfcHJpdmF0ZSA9IE5VTEw7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLWludCByMTI4X2Nj ZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCWRybV9yMTI4X2luaXRfdCAqaW5pdCA9IGRh dGE7DQo+IC0NCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlMT0NLX1RFU1RfV0lU SF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0Jc3dpdGNoIChpbml0LT5mdW5j KSB7DQo+IC0JY2FzZSBSMTI4X0lOSVRfQ0NFOg0KPiAtCQlyZXR1cm4gcjEyOF9kb19pbml0 X2NjZShkZXYsIGluaXQpOw0KPiAtCWNhc2UgUjEyOF9DTEVBTlVQX0NDRToNCj4gLQkJcmV0 dXJuIHIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4g LUVJTlZBTDsNCj4gLX0NCj4gLQ0KPiAtaW50IHIxMjhfY2NlX3N0YXJ0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0K PiAtew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOw0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCUxPQ0tfVEVTVF9XSVRIX1JF VFVSTihkZXYsIGZpbGVfcHJpdik7DQo+IC0NCj4gLQlERVZfSU5JVF9URVNUX1dJVEhfUkVU VVJOKGRldl9wcml2KTsNCj4gLQ0KPiAtCWlmIChkZXZfcHJpdi0+Y2NlX3J1bm5pbmcgfHwg ZGV2X3ByaXYtPmNjZV9tb2RlID09IFIxMjhfUE00X05PTlBNNCkgew0KPiAtCQlEUk1fREVC VUcoIndoaWxlIENDRSBydW5uaW5nXG4iKTsNCj4gLQkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAt DQo+IC0JcjEyOF9kb19jY2Vfc3RhcnQoZGV2X3ByaXYpOw0KPiAtDQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLS8qIFN0b3AgdGhlIENDRS4gIFRoZSBlbmdpbmUgbXVzdCBoYXZl IGJlZW4gaWRsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcw0KPiAtICogcm91dGluZS4NCj4gLSAq Lw0KPiAtaW50IHIxMjhfY2NlX3N0b3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhf cHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3IxMjhf Y2NlX3N0b3BfdCAqc3RvcCA9IGRhdGE7DQo+IC0JaW50IHJldDsNCj4gLQlEUk1fREVCVUco IlxuIik7DQo+IC0NCj4gLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYp Ow0KPiAtDQo+IC0JREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0N Cj4gLQkvKiBGbHVzaCBhbnkgcGVuZGluZyBDQ0UgY29tbWFuZHMuICBUaGlzIGVuc3VyZXMg YW55IG91dHN0YW5kaW5nDQo+IC0JICogY29tbWFuZHMgYXJlIGV4ZWN0dXRlZCBieSB0aGUg ZW5naW5lIGJlZm9yZSB3ZSB0dXJuIGl0IG9mZi4NCj4gLQkgKi8NCj4gLQlpZiAoc3RvcC0+ Zmx1c2gpDQo+IC0JCXIxMjhfZG9fY2NlX2ZsdXNoKGRldl9wcml2KTsNCj4gLQ0KPiAtCS8q IElmIHdlIGZhaWwgdG8gbWFrZSB0aGUgZW5naW5lIGdvIGlkbGUsIHdlIHJldHVybiBhbiBl cnJvcg0KPiAtCSAqIGNvZGUgc28gdGhhdCB0aGUgRFJNIGlvY3RsIHdyYXBwZXIgY2FuIHRy eSBhZ2Fpbi4NCj4gLQkgKi8NCj4gLQlpZiAoc3RvcC0+aWRsZSkgew0KPiAtCQlyZXQgPSBy MTI4X2RvX2NjZV9pZGxlKGRldl9wcml2KTsNCj4gLQkJaWYgKHJldCkNCj4gLQkJCXJldHVy biByZXQ7DQo+IC0JfQ0KPiAtDQo+IC0JLyogRmluYWxseSwgd2UgY2FuIHR1cm4gb2ZmIHRo ZSBDQ0UuICBJZiB0aGUgZW5naW5lIGlzbid0IGlkbGUsDQo+IC0JICogd2Ugd2lsbCBnZXQg c29tZSBkcm9wcGVkIHRyaWFuZ2xlcyBhcyB0aGV5IHdvbid0IGJlIGZ1bGx5DQo+IC0JICog cmVuZGVyZWQgYmVmb3JlIHRoZSBDQ0UgaXMgc2h1dCBkb3duLg0KPiAtCSAqLw0KPiAtCXIx MjhfZG9fY2NlX3N0b3AoZGV2X3ByaXYpOw0KPiAtDQo+IC0JLyogUmVzZXQgdGhlIGVuZ2lu ZSAqLw0KPiAtCXIxMjhfZG9fZW5naW5lX3Jlc2V0KGRldik7DQo+IC0NCj4gLQlyZXR1cm4g MDsNCj4gLX0NCj4gLQ0KPiAtLyogSnVzdCByZXNldCB0aGUgQ0NFIHJpbmcuICBDYWxsZWQg YXMgcGFydCBvZiBhbiBYIFNlcnZlciBlbmdpbmUgcmVzZXQuDQo+IC0gKi8NCj4gLWludCBy MTI4X2NjZV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3Qg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+ IC0NCj4gLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+ IC0JREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQlyMTI4 X2RvX2NjZV9yZXNldChkZXZfcHJpdik7DQo+IC0NCj4gLQkvKiBUaGUgQ0NFIGlzIG5vIGxv bmdlciBydW5uaW5nIGFmdGVyIGFuIGVuZ2luZSByZXNldCAqLw0KPiAtCWRldl9wcml2LT5j Y2VfcnVubmluZyA9IDA7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtaW50 IHIxMjhfY2NlX2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90 ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0K PiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsNCj4gLQ0K PiAtCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JaWYg KGRldl9wcml2LT5jY2VfcnVubmluZykNCj4gLQkJcjEyOF9kb19jY2VfZmx1c2goZGV2X3By aXYpOw0KPiAtDQo+IC0JcmV0dXJuIHIxMjhfZG9fY2NlX2lkbGUoZGV2X3ByaXYpOw0KPiAt fQ0KPiAtDQo+IC1pbnQgcjEyOF9lbmdpbmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0J RFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwg ZmlsZV9wcml2KTsNCj4gLQ0KPiAtCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2LT5k ZXZfcHJpdmF0ZSk7DQo+IC0NCj4gLQlyZXR1cm4gcjEyOF9kb19lbmdpbmVfcmVzZXQoZGV2 KTsNCj4gLX0NCj4gLQ0KPiAtaW50IHIxMjhfZnVsbHNjcmVlbihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikNCj4gLXsN Cj4gLQlyZXR1cm4gLUVJTlZBTDsNCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAt ICogRnJlZWxpc3QgbWFuYWdlbWVudA0KPiAtICovDQo+IC0jZGVmaW5lIFIxMjhfQlVGRkVS X1VTRUQJMHhmZmZmZmZmZg0KPiAtI2RlZmluZSBSMTI4X0JVRkZFUl9GUkVFCTANCj4gLQ0K PiAtI2lmIDANCj4gLXN0YXRpYyBpbnQgcjEyOF9mcmVlbGlzdF9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpDQo+IC17DQo+IC0Jc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBk ZXYtPmRtYTsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsNCj4gLQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOw0KPiAtCWRybV9yMTI4X2J1Zl9w cml2X3QgKmJ1Zl9wcml2Ow0KPiAtCWRybV9yMTI4X2ZyZWVsaXN0X3QgKmVudHJ5Ow0KPiAt CWludCBpOw0KPiAtDQo+IC0JZGV2X3ByaXYtPmhlYWQgPSBremFsbG9jKHNpemVvZihkcm1f cjEyOF9mcmVlbGlzdF90KSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKGRldl9wcml2LT5oZWFk ID09IE5VTEwpDQo+IC0JCXJldHVybiAtRU5PTUVNOw0KPiAtDQo+IC0JZGV2X3ByaXYtPmhl YWQtPmFnZSA9IFIxMjhfQlVGRkVSX1VTRUQ7DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwg ZG1hLT5idWZfY291bnQ7IGkrKykgew0KPiAtCQlidWYgPSBkbWEtPmJ1Zmxpc3RbaV07DQo+ IC0JCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCQllbnRyeSA9IGtt YWxsb2Moc2l6ZW9mKGRybV9yMTI4X2ZyZWVsaXN0X3QpLCBHRlBfS0VSTkVMKTsNCj4gLQkJ aWYgKCFlbnRyeSkNCj4gLQkJCXJldHVybiAtRU5PTUVNOw0KPiAtDQo+IC0JCWVudHJ5LT5h Z2UgPSBSMTI4X0JVRkZFUl9GUkVFOw0KPiAtCQllbnRyeS0+YnVmID0gYnVmOw0KPiAtCQll bnRyeS0+cHJldiA9IGRldl9wcml2LT5oZWFkOw0KPiAtCQllbnRyeS0+bmV4dCA9IGRldl9w cml2LT5oZWFkLT5uZXh0Ow0KPiAtCQlpZiAoIWVudHJ5LT5uZXh0KQ0KPiAtCQkJZGV2X3By aXYtPnRhaWwgPSBlbnRyeTsNCj4gLQ0KPiAtCQlidWZfcHJpdi0+ZGlzY2FyZCA9IDA7DQo+ IC0JCWJ1Zl9wcml2LT5kaXNwYXRjaGVkID0gMDsNCj4gLQkJYnVmX3ByaXYtPmxpc3RfZW50 cnkgPSBlbnRyeTsNCj4gLQ0KPiAtCQlkZXZfcHJpdi0+aGVhZC0+bmV4dCA9IGVudHJ5Ow0K PiAtDQo+IC0JCWlmIChkZXZfcHJpdi0+aGVhZC0+bmV4dCkNCj4gLQkJCWRldl9wcml2LT5o ZWFkLT5uZXh0LT5wcmV2ID0gZW50cnk7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+ IC0NCj4gLX0NCj4gLSNlbmRpZg0KPiAtDQo+IC1zdGF0aWMgc3RydWN0IGRybV9idWYgKnIx MjhfZnJlZWxpc3RfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQ0KPiAtew0KPiAtCXN0 cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7DQo+IC0JZHJtX3IxMjhfcHJp dmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3IxMjhfYnVm X3ByaXZfdCAqYnVmX3ByaXY7DQo+IC0Jc3RydWN0IGRybV9idWYgKmJ1ZjsNCj4gLQlpbnQg aSwgdDsNCj4gLQ0KPiAtCS8qIEZJWE1FOiBPcHRpbWl6ZSAtLSB1c2UgZnJlZWxpc3QgY29k ZSAqLw0KPiAtDQo+IC0JZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsN Cj4gLQkJYnVmID0gZG1hLT5idWZsaXN0W2ldOw0KPiAtCQlidWZfcHJpdiA9IGJ1Zi0+ZGV2 X3ByaXZhdGU7DQo+IC0JCWlmICghYnVmLT5maWxlX3ByaXYpDQo+IC0JCQlyZXR1cm4gYnVm Ow0KPiAtCX0NCj4gLQ0KPiAtCWZvciAodCA9IDA7IHQgPCBkZXZfcHJpdi0+dXNlY190aW1l b3V0OyB0KyspIHsNCj4gLQkJdTMyIGRvbmVfYWdlID0gUjEyOF9SRUFEKFIxMjhfTEFTVF9E SVNQQVRDSF9SRUcpOw0KPiAtDQo+IC0JCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3Vu dDsgaSsrKSB7DQo+IC0JCQlidWYgPSBkbWEtPmJ1Zmxpc3RbaV07DQo+IC0JCQlidWZfcHJp diA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0JCQlpZiAoYnVmLT5wZW5kaW5nICYmIGJ1Zl9w cml2LT5hZ2UgPD0gZG9uZV9hZ2UpIHsNCj4gLQkJCQkvKiBUaGUgYnVmZmVyIGhhcyBiZWVu IHByb2Nlc3NlZCwgc28gaXQNCj4gLQkJCQkgKiBjYW4gbm93IGJlIHVzZWQuDQo+IC0JCQkJ ICovDQo+IC0JCQkJYnVmLT5wZW5kaW5nID0gMDsNCj4gLQkJCQlyZXR1cm4gYnVmOw0KPiAt CQkJfQ0KPiAtCQl9DQo+IC0JCXVkZWxheSgxKTsNCj4gLQl9DQo+IC0NCj4gLQlEUk1fREVC VUcoInJldHVybmluZyBOVUxMIVxuIik7DQo+IC0JcmV0dXJuIE5VTEw7DQo+IC19DQo+IC0N Cj4gLXZvaWQgcjEyOF9mcmVlbGlzdF9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0K PiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7DQo+IC0J aW50IGk7DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykg ew0KPiAtCQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmID0gZG1hLT5idWZsaXN0W2ldOw0KPiAtCQlk cm1fcjEyOF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0J CWJ1Zl9wcml2LT5hZ2UgPSAwOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiAtICogQ0NFIGNvbW1hbmQgc3VibWlzc2lvbg0KPiAtICovDQo+IC0NCj4gLWludCBy MTI4X3dhaXRfcmluZyhkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgbikNCj4g LXsNCj4gLQlkcm1fcjEyOF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJmRldl9wcml2LT5yaW5n Ow0KPiAtCWludCBpOw0KPiAtDQo+IC0JZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2Vj X3RpbWVvdXQ7IGkrKykgew0KPiAtCQlyMTI4X3VwZGF0ZV9yaW5nX3NuYXBzaG90KGRldl9w cml2KTsNCj4gLQkJaWYgKHJpbmctPnNwYWNlID49IG4pDQo+IC0JCQlyZXR1cm4gMDsNCj4g LQkJdWRlbGF5KDEpOw0KPiAtCX0NCj4gLQ0KPiAtCS8qIEZJWE1FOiBUaGlzIGlzIGJlaW5n IGlnbm9yZWQuLi4gKi8NCj4gLQlEUk1fRVJST1IoImZhaWxlZCFcbiIpOw0KPiAtCXJldHVy biAtRUJVU1k7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgcjEyOF9jY2VfZ2V0X2J1ZmZl cnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdiwNCj4gLQkJCQlzdHJ1Y3QgZHJtX2RtYSAqZCkNCj4gLXsNCj4gLQlpbnQgaTsN Cj4gLQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOw0KPiAtDQo+IC0JZm9yIChpID0gZC0+Z3JhbnRl ZF9jb3VudDsgaSA8IGQtPnJlcXVlc3RfY291bnQ7IGkrKykgew0KPiAtCQlidWYgPSByMTI4 X2ZyZWVsaXN0X2dldChkZXYpOw0KPiAtCQlpZiAoIWJ1ZikNCj4gLQkJCXJldHVybiAtRUFH QUlOOw0KPiAtDQo+IC0JCWJ1Zi0+ZmlsZV9wcml2ID0gZmlsZV9wcml2Ow0KPiAtDQo+IC0J CWlmIChjb3B5X3RvX3VzZXIoJmQtPnJlcXVlc3RfaW5kaWNlc1tpXSwgJmJ1Zi0+aWR4LA0K PiAtCQkJCSAgICAgc2l6ZW9mKGJ1Zi0+aWR4KSkpDQo+IC0JCQlyZXR1cm4gLUVGQVVMVDsN Cj4gLQkJaWYgKGNvcHlfdG9fdXNlcigmZC0+cmVxdWVzdF9zaXplc1tpXSwgJmJ1Zi0+dG90 YWwsDQo+IC0JCQkJICAgICBzaXplb2YoYnVmLT50b3RhbCkpKQ0KPiAtCQkJcmV0dXJuIC1F RkFVTFQ7DQo+IC0NCj4gLQkJZC0+Z3JhbnRlZF9jb3VudCsrOw0KPiAtCX0NCj4gLQlyZXR1 cm4gMDsNCj4gLX0NCj4gLQ0KPiAtaW50IHIxMjhfY2NlX2J1ZmZlcnMoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+ IC17DQo+IC0Jc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsNCj4gLQlp bnQgcmV0ID0gMDsNCj4gLQlzdHJ1Y3QgZHJtX2RtYSAqZCA9IGRhdGE7DQo+IC0NCj4gLQlM T0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JLyogUGxl YXNlIGRvbid0IHNlbmQgdXMgYnVmZmVycy4NCj4gLQkgKi8NCj4gLQlpZiAoZC0+c2VuZF9j b3VudCAhPSAwKSB7DQo+IC0JCURSTV9FUlJPUigiUHJvY2VzcyAlZCB0cnlpbmcgdG8gc2Vu ZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsDQo+IC0JCQkgIHRhc2tfcGlkX25yKGN1cnJl bnQpLCBkLT5zZW5kX2NvdW50KTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAt DQo+IC0JLyogV2UnbGwgc2VuZCB5b3UgYnVmZmVycy4NCj4gLQkgKi8NCj4gLQlpZiAoZC0+ cmVxdWVzdF9jb3VudCA8IDAgfHwgZC0+cmVxdWVzdF9jb3VudCA+IGRtYS0+YnVmX2NvdW50 KSB7DQo+IC0JCURSTV9FUlJPUigiUHJvY2VzcyAlZCB0cnlpbmcgdG8gZ2V0ICVkIGJ1ZmZl cnMgKG9mICVkIG1heClcbiIsDQo+IC0JCQkgIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBkLT5y ZXF1ZXN0X2NvdW50LCBkbWEtPmJ1Zl9jb3VudCk7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0K PiAtCX0NCj4gLQ0KPiAtCWQtPmdyYW50ZWRfY291bnQgPSAwOw0KPiAtDQo+IC0JaWYgKGQt PnJlcXVlc3RfY291bnQpDQo+IC0JCXJldCA9IHIxMjhfY2NlX2dldF9idWZmZXJzKGRldiwg ZmlsZV9wcml2LCBkKTsNCj4gLQ0KPiAtCXJldHVybiByZXQ7DQo+IC19DQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJt L3IxMjgvcjEyOF9kcnYuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg ZTM1YTNhMTQ0OWJkLi4wMDAwMDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ix MjgvcjEyOF9kcnYuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDExNiArMCwwIEBADQo+ IC0vKiByMTI4X2Rydi5jIC0tIEFUSSBSYWdlIDEyOCBkcml2ZXIgLSotIGxpbnV4LWMgLSot DQo+IC0gKiBDcmVhdGVkOiBNb24gRGVjIDEzIDA5OjQ3OjI3IDE5OTkgYnkgZmFpdGhAcHJl Y2lzaW9uaW5zaWdodC5jb20NCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgMTk5OSBQcmVjaXNp b24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuDQo+IC0gKiBDb3B5cmlnaHQg MjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEuDQo+ IC0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4gLSAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAtICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0gKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUN Cj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dA0KPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICogU29mdHdhcmUuDQo+IC0gKg0K PiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0K PiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBWQSBMSU5VWCBTWVNURU1TIEFORC9P UiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SDQo+ IC0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwNCj4gLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUg0KPiAtICogT1RI RVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KPiAtICoNCj4gLSAqIEF1dGhvcnM6DQo+ IC0gKiAgICBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4NCj4g LSAqICAgIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4NCj4gLSAqLw0KPiAt DQo+IC0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvcGNp Lmg+DQo+IC0NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPg0KPiAtI2luY2x1ZGUgPGRy bS9kcm1fZmlsZS5oPg0KPiAtI2luY2x1ZGUgPGRybS9kcm1fcGNpaWRzLmg+DQo+IC0jaW5j bHVkZSA8ZHJtL2RybV92YmxhbmsuaD4NCj4gLSNpbmNsdWRlIDxkcm0vcjEyOF9kcm0uaD4N Cj4gLQ0KPiAtI2luY2x1ZGUgInIxMjhfZHJ2LmgiDQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3Qg cGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsNCj4gLQlyMTI4X1BDSV9JRFMNCj4gLX07 DQo+IC0NCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHIxMjhfZHJp dmVyX2ZvcHMgPSB7DQo+IC0JLm93bmVyID0gVEhJU19NT0RVTEUsDQo+IC0JLm9wZW4gPSBk cm1fb3BlbiwNCj4gLQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLA0KPiAtCS51bmxvY2tlZF9p b2N0bCA9IGRybV9pb2N0bCwNCj4gLQkubW1hcCA9IGRybV9sZWdhY3lfbW1hcCwNCj4gLQku cG9sbCA9IGRybV9wb2xsLA0KPiAtI2lmZGVmIENPTkZJR19DT01QQVQNCj4gLQkuY29tcGF0 X2lvY3RsID0gcjEyOF9jb21wYXRfaW9jdGwsDQo+IC0jZW5kaWYNCj4gLQkubGxzZWVrID0g bm9vcF9sbHNlZWssDQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg ZHJpdmVyID0gew0KPiAtCS5kcml2ZXJfZmVhdHVyZXMgPQ0KPiAtCSAgICBEUklWRVJfVVNF X0FHUCB8IERSSVZFUl9QQ0lfRE1BIHwgRFJJVkVSX1NHIHwgRFJJVkVSX0xFR0FDWSB8DQo+ IC0JICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSwNCj4gLQkuZGV2X3By aXZfc2l6ZSA9IHNpemVvZihkcm1fcjEyOF9idWZfcHJpdl90KSwNCj4gLQkubG9hZCA9IHIx MjhfZHJpdmVyX2xvYWQsDQo+IC0JLnByZWNsb3NlID0gcjEyOF9kcml2ZXJfcHJlY2xvc2Us DQo+IC0JLmxhc3RjbG9zZSA9IHIxMjhfZHJpdmVyX2xhc3RjbG9zZSwNCj4gLQkuZ2V0X3Zi bGFua19jb3VudGVyID0gcjEyOF9nZXRfdmJsYW5rX2NvdW50ZXIsDQo+IC0JLmVuYWJsZV92 YmxhbmsgPSByMTI4X2VuYWJsZV92YmxhbmssDQo+IC0JLmRpc2FibGVfdmJsYW5rID0gcjEy OF9kaXNhYmxlX3ZibGFuaywNCj4gLQkuaXJxX3ByZWluc3RhbGwgPSByMTI4X2RyaXZlcl9p cnFfcHJlaW5zdGFsbCwNCj4gLQkuaXJxX3Bvc3RpbnN0YWxsID0gcjEyOF9kcml2ZXJfaXJx X3Bvc3RpbnN0YWxsLA0KPiAtCS5pcnFfdW5pbnN0YWxsID0gcjEyOF9kcml2ZXJfaXJxX3Vu aW5zdGFsbCwNCj4gLQkuaXJxX2hhbmRsZXIgPSByMTI4X2RyaXZlcl9pcnFfaGFuZGxlciwN Cj4gLQkuaW9jdGxzID0gcjEyOF9pb2N0bHMsDQo+IC0JLmRtYV9pb2N0bCA9IHIxMjhfY2Nl X2J1ZmZlcnMsDQo+IC0JLmZvcHMgPSAmcjEyOF9kcml2ZXJfZm9wcywNCj4gLQkubmFtZSA9 IERSSVZFUl9OQU1FLA0KPiAtCS5kZXNjID0gRFJJVkVSX0RFU0MsDQo+IC0JLmRhdGUgPSBE UklWRVJfREFURSwNCj4gLQkubWFqb3IgPSBEUklWRVJfTUFKT1IsDQo+IC0JLm1pbm9yID0g RFJJVkVSX01JTk9SLA0KPiAtCS5wYXRjaGxldmVsID0gRFJJVkVSX1BBVENITEVWRUwsDQo+ IC19Ow0KPiAtDQo+IC1pbnQgcjEyOF9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQ0KPiAtew0KPiAtCXN0cnVjdCBwY2lfZGV2ICpw ZGV2ID0gdG9fcGNpX2RldihkZXYtPmRldik7DQo+IC0NCj4gLQlwY2lfc2V0X21hc3Rlcihw ZGV2KTsNCj4gLQlyZXR1cm4gZHJtX3ZibGFua19pbml0KGRldiwgMSk7DQo+IC19DQo+IC0N Cj4gLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciByMTI4X3BjaV9kcml2ZXIgPSB7DQo+IC0J Lm5hbWUgPSBEUklWRVJfTkFNRSwNCj4gLQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsDQo+IC19 Ow0KPiAtDQo+IC1zdGF0aWMgaW50IF9faW5pdCByMTI4X2luaXQodm9pZCkNCj4gLXsNCj4g LQlkcml2ZXIubnVtX2lvY3RscyA9IHIxMjhfbWF4X2lvY3RsOw0KPiAtDQo+IC0JcmV0dXJu IGRybV9sZWdhY3lfcGNpX2luaXQoJmRyaXZlciwgJnIxMjhfcGNpX2RyaXZlcik7DQo+IC19 DQo+IC0NCj4gLXN0YXRpYyB2b2lkIF9fZXhpdCByMTI4X2V4aXQodm9pZCkNCj4gLXsNCj4g LQlkcm1fbGVnYWN5X3BjaV9leGl0KCZkcml2ZXIsICZyMTI4X3BjaV9kcml2ZXIpOw0KPiAt fQ0KPiAtDQo+IC1tb2R1bGVfaW5pdChyMTI4X2luaXQpOw0KPiAtbW9kdWxlX2V4aXQocjEy OF9leGl0KTsNCj4gLQ0KPiAtTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsNCj4gLU1P RFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7DQo+IC1NT0RVTEVfTElDRU5TRSgiR1BM IGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3IxMjgvcjEyOF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgN Cj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDk3MGUxOTJiMGQ1MS4uMDAw MDAwMDAwMDAwDQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgNCj4g KysrIC9kZXYvbnVsbA0KPiBAQCAtMSw1NDQgKzAsMCBAQA0KPiAtLyogcjEyOF9kcnYuaCAt LSBQcml2YXRlIGhlYWRlciBmb3IgcjEyOCBkcml2ZXIgLSotIGxpbnV4LWMgLSotDQo+IC0g KiBDcmVhdGVkOiBNb24gRGVjIDEzIDA5OjUxOjExIDE5OTkgYnkgZmFpdGhAcHJlY2lzaW9u aW5zaWdodC5jb20NCj4gLSAqLw0KPiAtLyoNCj4gLSAqIENvcHlyaWdodCAxOTk5IFByZWNp c2lvbiBJbnNpZ2h0LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4NCj4gLSAqIENvcHlyaWdo dCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4N Cj4gLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0gKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gLSAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQ0KPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gLSAqDQo+IC0gKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0DQo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+IC0gKiBTb2Z0d2FyZS4NCj4gLSAq DQo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiAtICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks DQo+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4gLSAqIFBSRUNJU0lPTiBJTlNJR0hUIEFO RC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S DQo+IC0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCj4gLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUg0K PiAtICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KPiAtICoNCj4gLSAqIEF1dGhvcnM6 DQo+IC0gKiAgICBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4N Cj4gLSAqICAgIEtldmluIEUuIE1hcnRpbiA8bWFydGluQHZhbGludXguY29tPg0KPiAtICog ICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPg0KPiAtICogICAgTWljaGVs IETDpG56ZXIgPGRhZW56ZXJtQHN0dWRlbnQuZXRoei5jaD4NCj4gLSAqLw0KPiAtDQo+IC0j aWZuZGVmIF9fUjEyOF9EUlZfSF9fDQo+IC0jZGVmaW5lIF9fUjEyOF9EUlZfSF9fDQo+IC0N Cj4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L2lvLmg+ DQo+IC0jaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+DQo+IC0NCj4gLSNpbmNsdWRlIDxk cm0vZHJtX2lvY3RsLmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9sZWdhY3kuaD4NCj4gLSNp bmNsdWRlIDxkcm0vcjEyOF9kcm0uaD4NCj4gLQ0KPiAtI2luY2x1ZGUgImF0aV9wY2lnYXJ0 LmgiDQo+IC0NCj4gLS8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoNCj4gLSAqLw0KPiAtI2Rl ZmluZSBEUklWRVJfQVVUSE9SCQkiR2FyZXRoIEh1Z2hlcywgVkEgTGludXggU3lzdGVtcyBJ bmMuIg0KPiAtDQo+IC0jZGVmaW5lIERSSVZFUl9OQU1FCQkicjEyOCINCj4gLSNkZWZpbmUg RFJJVkVSX0RFU0MJCSJBVEkgUmFnZSAxMjgiDQo+IC0jZGVmaW5lIERSSVZFUl9EQVRFCQki MjAwMzA3MjUiDQo+IC0NCj4gLS8qIEludGVyZmFjZSBoaXN0b3J5Og0KPiAtICoNCj4gLSAq ID8/ICAtID8/DQo+IC0gKiAyLjQgLSBBZGQgc3VwcG9ydCBmb3IgeWNiY3IgdGV4dHVyZXMg KG5vIG5ldyBpb2N0bHMpDQo+IC0gKiAyLjUgLSBBZGQgRkxJUCBpb2N0bCwgZGlzYWJsZSBG VUxMU0NSRUVOLg0KPiAtICovDQo+IC0jZGVmaW5lIERSSVZFUl9NQUpPUgkJMg0KPiAtI2Rl ZmluZSBEUklWRVJfTUlOT1IJCTUNCj4gLSNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMA0K PiAtDQo+IC0jZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCQlSMTI4X1JFQUQoUjEy OF9QTTRfQlVGRkVSX0RMX1JQVFIpDQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0IGRybV9yMTI4 X2ZyZWVsaXN0IHsNCj4gLQl1bnNpZ25lZCBpbnQgYWdlOw0KPiAtCXN0cnVjdCBkcm1fYnVm ICpidWY7DQo+IC0Jc3RydWN0IGRybV9yMTI4X2ZyZWVsaXN0ICpuZXh0Ow0KPiAtCXN0cnVj dCBkcm1fcjEyOF9mcmVlbGlzdCAqcHJldjsNCj4gLX0gZHJtX3IxMjhfZnJlZWxpc3RfdDsN Cj4gLQ0KPiAtdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfcmluZ19idWZmZXIgew0KPiAtCXUz MiAqc3RhcnQ7DQo+IC0JdTMyICplbmQ7DQo+IC0JaW50IHNpemU7DQo+IC0JaW50IHNpemVf bDJxdzsNCj4gLQ0KPiAtCXUzMiB0YWlsOw0KPiAtCXUzMiB0YWlsX21hc2s7DQo+IC0JaW50 IHNwYWNlOw0KPiAtDQo+IC0JaW50IGhpZ2hfbWFyazsNCj4gLX0gZHJtX3IxMjhfcmluZ19i dWZmZXJfdDsNCj4gLQ0KPiAtdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfcHJpdmF0ZSB7DQo+ IC0JZHJtX3IxMjhfcmluZ19idWZmZXJfdCByaW5nOw0KPiAtCWRybV9yMTI4X3NhcmVhX3Qg KnNhcmVhX3ByaXY7DQo+IC0NCj4gLQlpbnQgY2NlX21vZGU7DQo+IC0JaW50IGNjZV9maWZv X3NpemU7DQo+IC0JaW50IGNjZV9ydW5uaW5nOw0KPiAtDQo+IC0JZHJtX3IxMjhfZnJlZWxp c3RfdCAqaGVhZDsNCj4gLQlkcm1fcjEyOF9mcmVlbGlzdF90ICp0YWlsOw0KPiAtDQo+IC0J aW50IHVzZWNfdGltZW91dDsNCj4gLQlpbnQgaXNfcGNpOw0KPiAtCXVuc2lnbmVkIGxvbmcg Y2NlX2J1ZmZlcnNfb2Zmc2V0Ow0KPiAtDQo+IC0JYXRvbWljX3QgaWRsZV9jb3VudDsNCj4g LQ0KPiAtCWludCBwYWdlX2ZsaXBwaW5nOw0KPiAtCWludCBjdXJyZW50X3BhZ2U7DQo+IC0J dTMyIGNydGNfb2Zmc2V0Ow0KPiAtCXUzMiBjcnRjX29mZnNldF9jbnRsOw0KPiAtDQo+IC0J YXRvbWljX3QgdmJsX3JlY2VpdmVkOw0KPiAtDQo+IC0JdTMyIGNvbG9yX2ZtdDsNCj4gLQl1 bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0Ow0KPiAtCXVuc2lnbmVkIGludCBmcm9udF9waXRj aDsNCj4gLQl1bnNpZ25lZCBpbnQgYmFja19vZmZzZXQ7DQo+IC0JdW5zaWduZWQgaW50IGJh Y2tfcGl0Y2g7DQo+IC0NCj4gLQl1MzIgZGVwdGhfZm10Ow0KPiAtCXVuc2lnbmVkIGludCBk ZXB0aF9vZmZzZXQ7DQo+IC0JdW5zaWduZWQgaW50IGRlcHRoX3BpdGNoOw0KPiAtCXVuc2ln bmVkIGludCBzcGFuX29mZnNldDsNCj4gLQ0KPiAtCXUzMiBmcm9udF9waXRjaF9vZmZzZXRf YzsNCj4gLQl1MzIgYmFja19waXRjaF9vZmZzZXRfYzsNCj4gLQl1MzIgZGVwdGhfcGl0Y2hf b2Zmc2V0X2M7DQo+IC0JdTMyIHNwYW5fcGl0Y2hfb2Zmc2V0X2M7DQo+IC0NCj4gLQlkcm1f bG9jYWxfbWFwX3QgKnNhcmVhOw0KPiAtCWRybV9sb2NhbF9tYXBfdCAqbW1pbzsNCj4gLQlk cm1fbG9jYWxfbWFwX3QgKmNjZV9yaW5nOw0KPiAtCWRybV9sb2NhbF9tYXBfdCAqcmluZ19y cHRyOw0KPiAtCWRybV9sb2NhbF9tYXBfdCAqYWdwX3RleHR1cmVzOw0KPiAtCXN0cnVjdCBk cm1fYXRpX3BjaWdhcnRfaW5mbyBnYXJ0X2luZm87DQo+IC19IGRybV9yMTI4X3ByaXZhdGVf dDsNCj4gLQ0KPiAtdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfYnVmX3ByaXYgew0KPiAtCXUz MiBhZ2U7DQo+IC0JaW50IHByaW07DQo+IC0JaW50IGRpc2NhcmQ7DQo+IC0JaW50IGRpc3Bh dGNoZWQ7DQo+IC0JZHJtX3IxMjhfZnJlZWxpc3RfdCAqbGlzdF9lbnRyeTsNCj4gLX0gZHJt X3IxMjhfYnVmX3ByaXZfdDsNCj4gLQ0KPiAtZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1faW9j dGxfZGVzYyByMTI4X2lvY3Rsc1tdOw0KPiAtZXh0ZXJuIGludCByMTI4X21heF9pb2N0bDsN Cj4gLQ0KPiAtCQkJCS8qIHIxMjhfY2NlLmMgKi8NCj4gLWV4dGVybiBpbnQgcjEyOF9jY2Vf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4gaW50IHIxMjhfY2NlX3N0YXJ0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KTsNCj4gLWV4dGVybiBpbnQgcjEyOF9jY2Vfc3RvcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4g aW50IHIxMjhfY2NlX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsNCj4gLWV4dGVybiBpbnQgcjEyOF9jY2Vf aWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4gaW50IHIxMjhfZW5naW5lX3Jlc2V0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KTsNCj4gLWV4dGVybiBpbnQgcjEyOF9mdWxsc2NyZWVuKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsNCj4gLWV4 dGVybiBpbnQgcjEyOF9jY2VfYnVmZmVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC0NCj4gLWV4dGVybiBp bnQgcjEyOF9jY2Vfc3RpcHBsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4gaW50IHIxMjhfY2Nl X2RlcHRoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KTsNCj4gLWV4dGVybiBpbnQgcjEyOF9nZXRwYXJhbShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dik7DQo+IC0NCj4gLWV4dGVybiB2b2lkIHIxMjhfZnJlZWxpc3RfcmVzZXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7DQo+IC0NCj4gLWV4dGVybiBpbnQgcjEyOF93YWl0X3JpbmcoZHJt X3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IG4pOw0KPiAtDQo+IC1leHRlcm4gaW50 IHIxMjhfZG9fY2NlX2lkbGUoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdik7DQo+IC1l eHRlcm4gaW50IHIxMjhfZG9fY2xlYW51cF9jY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 DQo+IC0NCj4gLWV4dGVybiBpbnQgcjEyOF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKTsNCj4gLWV4dGVybiB2b2lkIHIxMjhfZGlz YWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUp Ow0KPiAtZXh0ZXJuIHUzMiByMTI4X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSk7DQo+IC1leHRlcm4gaXJxcmV0dXJuX3Qg cjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKTsNCj4gLWV4dGVy biB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOw0KPiAtZXh0ZXJuIGludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7DQo+IC1leHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5p bnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOw0KPiAtZXh0ZXJuIHZvaWQgcjEyOF9k cml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOw0KPiAtZXh0ZXJuIGlu dCByMTI4X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxv bmcgZmxhZ3MpOw0KPiAtZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYp Ow0KPiAtDQo+IC1leHRlcm4gbG9uZyByMTI4X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAq ZmlscCwgdW5zaWduZWQgaW50IGNtZCwNCj4gLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJn KTsNCj4gLQ0KPiAtLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMsIHJlZ2lzdGVyIGFjY2VzcyBt YWNyb3MgYW5kIGRybUFkZE1hcCBjb25zdGFudHMNCj4gLSAqIGZvciBSYWdlIDEyOCBrZXJu ZWwgZHJpdmVyLg0KPiAtICovDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9BVVhfU0NfQ05UTAkJ MHgxNjYwDQo+IC0jCWRlZmluZSBSMTI4X0FVWDFfU0NfRU4JCQkoMSA8PCAwKQ0KPiAtIwlk ZWZpbmUgUjEyOF9BVVgxX1NDX01PREVfT1IJCSgwIDw8IDEpDQo+IC0jCWRlZmluZSBSMTI4 X0FVWDFfU0NfTU9ERV9OQU5ECQkoMSA8PCAxKQ0KPiAtIwlkZWZpbmUgUjEyOF9BVVgyX1ND X0VOCQkJKDEgPDwgMikNCj4gLSMJZGVmaW5lIFIxMjhfQVVYMl9TQ19NT0RFX09SCQkoMCA8 PCAzKQ0KPiAtIwlkZWZpbmUgUjEyOF9BVVgyX1NDX01PREVfTkFORAkJKDEgPDwgMykNCj4g LSMJZGVmaW5lIFIxMjhfQVVYM19TQ19FTgkJCSgxIDw8IDQpDQo+IC0jCWRlZmluZSBSMTI4 X0FVWDNfU0NfTU9ERV9PUgkJKDAgPDwgNSkNCj4gLSMJZGVmaW5lIFIxMjhfQVVYM19TQ19N T0RFX05BTkQJCSgxIDw8IDUpDQo+IC0jZGVmaW5lIFIxMjhfQVVYMV9TQ19MRUZUCQkweDE2 NjQNCj4gLSNkZWZpbmUgUjEyOF9BVVgxX1NDX1JJR0hUCQkweDE2NjgNCj4gLSNkZWZpbmUg UjEyOF9BVVgxX1NDX1RPUAkJMHgxNjZjDQo+IC0jZGVmaW5lIFIxMjhfQVVYMV9TQ19CT1RU T00JCTB4MTY3MA0KPiAtI2RlZmluZSBSMTI4X0FVWDJfU0NfTEVGVAkJMHgxNjc0DQo+IC0j ZGVmaW5lIFIxMjhfQVVYMl9TQ19SSUdIVAkJMHgxNjc4DQo+IC0jZGVmaW5lIFIxMjhfQVVY Ml9TQ19UT1AJCTB4MTY3Yw0KPiAtI2RlZmluZSBSMTI4X0FVWDJfU0NfQk9UVE9NCQkweDE2 ODANCj4gLSNkZWZpbmUgUjEyOF9BVVgzX1NDX0xFRlQJCTB4MTY4NA0KPiAtI2RlZmluZSBS MTI4X0FVWDNfU0NfUklHSFQJCTB4MTY4OA0KPiAtI2RlZmluZSBSMTI4X0FVWDNfU0NfVE9Q CQkweDE2OGMNCj4gLSNkZWZpbmUgUjEyOF9BVVgzX1NDX0JPVFRPTQkJMHgxNjkwDQo+IC0N Cj4gLSNkZWZpbmUgUjEyOF9CUlVTSF9EQVRBMAkJMHgxNDgwDQo+IC0jZGVmaW5lIFIxMjhf QlVTX0NOVEwJCQkweDAwMzANCj4gLSMJZGVmaW5lIFIxMjhfQlVTX01BU1RFUl9ESVMJCSgx IDw8IDYpDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9DTE9DS19DTlRMX0lOREVYCQkweDAwMDgN Cj4gLSNkZWZpbmUgUjEyOF9DTE9DS19DTlRMX0RBVEEJCTB4MDAwYw0KPiAtIwlkZWZpbmUg UjEyOF9QTExfV1JfRU4JCQkoMSA8PCA3KQ0KPiAtI2RlZmluZSBSMTI4X0NPTlNUQU5UX0NP TE9SX0MJCTB4MWQzNA0KPiAtI2RlZmluZSBSMTI4X0NSVENfT0ZGU0VUCQkweDAyMjQNCj4g LSNkZWZpbmUgUjEyOF9DUlRDX09GRlNFVF9DTlRMCQkweDAyMjgNCj4gLSMJZGVmaW5lIFIx MjhfQ1JUQ19PRkZTRVRfRkxJUF9DTlRMCSgxIDw8IDE2KQ0KPiAtDQo+IC0jZGVmaW5lIFIx MjhfRFBfR1VJX01BU1RFUl9DTlRMCQkweDE0NmMNCj4gLSMgICAgICAgZGVmaW5lIFIxMjhf R01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAkoMSAgICA8PCAgMCkNCj4gLSMgICAgICAgZGVm aW5lIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTAkoMSAgICA8PCAgMSkNCj4gLSMJ ZGVmaW5lIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SCSgxMyAgIDw8ICA0KQ0KPiAtIwlk ZWZpbmUgUjEyOF9HTUNfQlJVU0hfTk9ORQkJKDE1ICAgPDwgIDQpDQo+IC0jCWRlZmluZSBS MTI4X0dNQ19EU1RfMTZCUFAJCSg0ICAgIDw8ICA4KQ0KPiAtIwlkZWZpbmUgUjEyOF9HTUNf RFNUXzI0QlBQCQkoNSAgICA8PCAgOCkNCj4gLSMJZGVmaW5lIFIxMjhfR01DX0RTVF8zMkJQ UAkJKDYgICAgPDwgIDgpDQo+IC0jICAgICAgIGRlZmluZSBSMTI4X0dNQ19EU1RfREFUQVRZ UEVfU0hJRlQJOA0KPiAtIwlkZWZpbmUgUjEyOF9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SCSgz ICAgIDw8IDEyKQ0KPiAtIwlkZWZpbmUgUjEyOF9EUF9TUkNfU09VUkNFX01FTU9SWQkoMiAg ICA8PCAyNCkNCj4gLSMJZGVmaW5lIFIxMjhfRFBfU1JDX1NPVVJDRV9IT1NUX0RBVEEJKDMg ICAgPDwgMjQpDQo+IC0jCWRlZmluZSBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTCSgxICAg IDw8IDI4KQ0KPiAtIwlkZWZpbmUgUjEyOF9HTUNfQVVYX0NMSVBfRElTCQkoMSAgICA8PCAy OSkNCj4gLSMJZGVmaW5lIFIxMjhfR01DX1dSX01TS19ESVMJCSgxICAgIDw8IDMwKQ0KPiAt IwlkZWZpbmUgUjEyOF9ST1AzX1MJCQkweDAwY2MwMDAwDQo+IC0jCWRlZmluZSBSMTI4X1JP UDNfUAkJCTB4MDBmMDAwMDANCj4gLSNkZWZpbmUgUjEyOF9EUF9XUklURV9NQVNLCQkweDE2 Y2MNCj4gLSNkZWZpbmUgUjEyOF9EU1RfUElUQ0hfT0ZGU0VUX0MJCTB4MWM4MA0KPiAtIwlk ZWZpbmUgUjEyOF9EU1RfVElMRQkJCSgxIDw8IDMxKQ0KPiAtDQo+IC0jZGVmaW5lIFIxMjhf R0VOX0lOVF9DTlRMCQkweDAwNDANCj4gLSMJZGVmaW5lIFIxMjhfQ1JUQ19WQkxBTktfSU5U X0VOCQkoMSA8PCAgMCkNCj4gLSNkZWZpbmUgUjEyOF9HRU5fSU5UX1NUQVRVUwkJMHgwMDQ0 DQo+IC0jCWRlZmluZSBSMTI4X0NSVENfVkJMQU5LX0lOVAkJKDEgPDwgIDApDQo+IC0jCWRl ZmluZSBSMTI4X0NSVENfVkJMQU5LX0lOVF9BSwkJKDEgPDwgIDApDQo+IC0jZGVmaW5lIFIx MjhfR0VOX1JFU0VUX0NOVEwJCTB4MDBmMA0KPiAtIwlkZWZpbmUgUjEyOF9TT0ZUX1JFU0VU X0dVSQkJKDEgPDwgIDApDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9HVUlfU0NSQVRDSF9SRUcw CQkweDE1ZTANCj4gLSNkZWZpbmUgUjEyOF9HVUlfU0NSQVRDSF9SRUcxCQkweDE1ZTQNCj4g LSNkZWZpbmUgUjEyOF9HVUlfU0NSQVRDSF9SRUcyCQkweDE1ZTgNCj4gLSNkZWZpbmUgUjEy OF9HVUlfU0NSQVRDSF9SRUczCQkweDE1ZWMNCj4gLSNkZWZpbmUgUjEyOF9HVUlfU0NSQVRD SF9SRUc0CQkweDE1ZjANCj4gLSNkZWZpbmUgUjEyOF9HVUlfU0NSQVRDSF9SRUc1CQkweDE1 ZjQNCj4gLQ0KPiAtI2RlZmluZSBSMTI4X0dVSV9TVEFUCQkJMHgxNzQwDQo+IC0jCWRlZmlu ZSBSMTI4X0dVSV9GSUZPQ05UX01BU0sJCTB4MGZmZg0KPiAtIwlkZWZpbmUgUjEyOF9HVUlf QUNUSVZFCQkJKDEgPDwgMzEpDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9NQ0xLX0NOVEwJCQkw eDAwMGYNCj4gLSMJZGVmaW5lIFIxMjhfRk9SQ0VfR0NQCQkJKDEgPDwgMTYpDQo+IC0jCWRl ZmluZSBSMTI4X0ZPUkNFX1BJUEUzRF9DUAkJKDEgPDwgMTcpDQo+IC0jCWRlZmluZSBSMTI4 X0ZPUkNFX1JDUAkJCSgxIDw8IDE4KQ0KPiAtDQo+IC0jZGVmaW5lIFIxMjhfUENfR1VJX0NU TFNUQVQJCTB4MTc0OA0KPiAtI2RlZmluZSBSMTI4X1BDX05HVUlfQ1RMU1RBVAkJMHgwMTg0 DQo+IC0jCWRlZmluZSBSMTI4X1BDX0ZMVVNIX0dVSQkJKDMgPDwgMCkNCj4gLSMJZGVmaW5l IFIxMjhfUENfUklfR1VJCQkJKDEgPDwgMikNCj4gLSMJZGVmaW5lIFIxMjhfUENfRkxVU0hf QUxMCQkweDAwZmYNCj4gLSMJZGVmaW5lIFIxMjhfUENfQlVTWQkJCSgxIDw8IDMxKQ0KPiAt DQo+IC0jZGVmaW5lIFIxMjhfUENJX0dBUlRfUEFHRQkJMHgwMTdjDQo+IC0jZGVmaW5lIFIx MjhfUFJJTV9URVhfQ05UTF9DCQkweDFjYjANCj4gLQ0KPiAtI2RlZmluZSBSMTI4X1NDQUxF XzNEX0NOVEwJCTB4MWEwMA0KPiAtI2RlZmluZSBSMTI4X1NFQ19URVhfQ05UTF9DCQkweDFk MDANCj4gLSNkZWZpbmUgUjEyOF9TRUNfVEVYVFVSRV9CT1JERVJfQ09MT1JfQwkweDFkM2MN Cj4gLSNkZWZpbmUgUjEyOF9TRVRVUF9DTlRMCQkJMHgxYmM0DQo+IC0jZGVmaW5lIFIxMjhf U1RFTl9SRUZfTUFTS19DCQkweDFkNDANCj4gLQ0KPiAtI2RlZmluZSBSMTI4X1RFWF9DTlRM X0MJCQkweDFjOWMNCj4gLSMJZGVmaW5lIFIxMjhfVEVYX0NBQ0hFX0ZMVVNICQkoMSA8PCAy MykNCj4gLQ0KPiAtI2RlZmluZSBSMTI4X1dBSVRfVU5USUwJCQkweDE3MjANCj4gLSMJZGVm aW5lIFIxMjhfRVZFTlRfQ1JUQ19PRkZTRVQJCSgxIDw8IDApDQo+IC0jZGVmaW5lIFIxMjhf V0lORE9XX1hZX09GRlNFVAkJMHgxYmNjDQo+IC0NCj4gLS8qIENDRSByZWdpc3RlcnMNCj4g LSAqLw0KPiAtI2RlZmluZSBSMTI4X1BNNF9CVUZGRVJfT0ZGU0VUCQkweDA3MDANCj4gLSNk ZWZpbmUgUjEyOF9QTTRfQlVGRkVSX0NOVEwJCTB4MDcwNA0KPiAtIwlkZWZpbmUgUjEyOF9Q TTRfTUFTSwkJCSgxNSA8PCAyOCkNCj4gLSMJZGVmaW5lIFIxMjhfUE00X05PTlBNNAkJCSgw ICA8PCAyOCkNCj4gLSMJZGVmaW5lIFIxMjhfUE00XzE5MlBJTwkJCSgxICA8PCAyOCkNCj4g LSMJZGVmaW5lIFIxMjhfUE00XzE5MkJNCQkJKDIgIDw8IDI4KQ0KPiAtIwlkZWZpbmUgUjEy OF9QTTRfMTI4UElPXzY0SU5EQk0JCSgzICA8PCAyOCkNCj4gLSMJZGVmaW5lIFIxMjhfUE00 XzEyOEJNXzY0SU5EQk0JCSg0ICA8PCAyOCkNCj4gLSMJZGVmaW5lIFIxMjhfUE00XzY0UElP XzEyOElOREJNCQkoNSAgPDwgMjgpDQo+IC0jCWRlZmluZSBSMTI4X1BNNF82NEJNXzEyOElO REJNCQkoNiAgPDwgMjgpDQo+IC0jCWRlZmluZSBSMTI4X1BNNF82NFBJT182NFZDQk1fNjRJ TkRCTQkoNyAgPDwgMjgpDQo+IC0jCWRlZmluZSBSMTI4X1BNNF82NEJNXzY0VkNCTV82NElO REJNCSg4VSAgPDwgMjgpDQo+IC0jCWRlZmluZSBSMTI4X1BNNF82NFBJT182NFZDUElPXzY0 SU5EUElPCSgxNVUgPDwgMjgpDQo+IC0jCWRlZmluZSBSMTI4X1BNNF9CVUZGRVJfQ05UTF9O T1VQREFURQkoMSAgPDwgMjcpDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9QTTRfQlVGRkVSX1dN X0NOVEwJCTB4MDcwOA0KPiAtIwlkZWZpbmUgUjEyOF9XTUFfU0hJRlQJCQkwDQo+IC0jCWRl ZmluZSBSMTI4X1dNQl9TSElGVAkJCTgNCj4gLSMJZGVmaW5lIFIxMjhfV01DX1NISUZUCQkJ MTYNCj4gLSMJZGVmaW5lIFIxMjhfV0JfV01fU0hJRlQJCQkyNA0KPiAtDQo+IC0jZGVmaW5l IFIxMjhfUE00X0JVRkZFUl9ETF9SUFRSX0FERFIJMHgwNzBjDQo+IC0jZGVmaW5lIFIxMjhf UE00X0JVRkZFUl9ETF9SUFRSCQkweDA3MTANCj4gLSNkZWZpbmUgUjEyOF9QTTRfQlVGRkVS X0RMX1dQVFIJCTB4MDcxNA0KPiAtIwlkZWZpbmUgUjEyOF9QTTRfQlVGRkVSX0RMX0RPTkUJ CSgxIDw8IDMxKQ0KPiAtDQo+IC0jZGVmaW5lIFIxMjhfUE00X1ZDX0ZQVV9TRVRVUAkJMHgw NzFjDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9QTTRfSVdfSU5ET0ZGCQkweDA3MzgNCj4gLSNk ZWZpbmUgUjEyOF9QTTRfSVdfSU5EU0laRQkJMHgwNzNjDQo+IC0NCj4gLSNkZWZpbmUgUjEy OF9QTTRfU1RBVAkJCTB4MDdiOA0KPiAtIwlkZWZpbmUgUjEyOF9QTTRfRklGT0NOVF9NQVNL CQkweDBmZmYNCj4gLSMJZGVmaW5lIFIxMjhfUE00X0JVU1kJCQkoMSA8PCAxNikNCj4gLSMJ ZGVmaW5lIFIxMjhfUE00X0dVSV9BQ1RJVkUJCSgxIDw8IDMxKQ0KPiAtDQo+IC0jZGVmaW5l IFIxMjhfUE00X01JQ1JPQ09ERV9BRERSCQkweDA3ZDQNCj4gLSNkZWZpbmUgUjEyOF9QTTRf TUlDUk9DT0RFX1JBRERSCTB4MDdkOA0KPiAtI2RlZmluZSBSMTI4X1BNNF9NSUNST0NPREVf REFUQUgJMHgwN2RjDQo+IC0jZGVmaW5lIFIxMjhfUE00X01JQ1JPQ09ERV9EQVRBTAkweDA3 ZTANCj4gLQ0KPiAtI2RlZmluZSBSMTI4X1BNNF9CVUZGRVJfQUREUgkJMHgwN2YwDQo+IC0j ZGVmaW5lIFIxMjhfUE00X01JQ1JPX0NOVEwJCTB4MDdmYw0KPiAtIwlkZWZpbmUgUjEyOF9Q TTRfTUlDUk9fRlJFRVJVTgkJKDEgPDwgMzApDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9QTTRf RklGT19EQVRBX0VWRU4JCTB4MTAwMA0KPiAtI2RlZmluZSBSMTI4X1BNNF9GSUZPX0RBVEFf T0RECQkweDEwMDQNCj4gLQ0KPiAtLyogQ0NFIGNvbW1hbmQgcGFja2V0cw0KPiAtICovDQo+ IC0jZGVmaW5lIFIxMjhfQ0NFX1BBQ0tFVDAJCTB4MDAwMDAwMDANCj4gLSNkZWZpbmUgUjEy OF9DQ0VfUEFDS0VUMQkJMHg0MDAwMDAwMA0KPiAtI2RlZmluZSBSMTI4X0NDRV9QQUNLRVQy CQkweDgwMDAwMDAwDQo+IC0jZGVmaW5lIFIxMjhfQ0NFX1BBQ0tFVDMJCTB4QzAwMDAwMDAN Cj4gLSMJZGVmaW5lIFIxMjhfQ05UTF9IT1NUREFUQV9CTFQJCTB4MDAwMDk0MDANCj4gLSMJ ZGVmaW5lIFIxMjhfQ05UTF9QQUlOVF9NVUxUSQkJMHgwMDAwOUEwMA0KPiAtIwlkZWZpbmUg UjEyOF9DTlRMX0JJVEJMVF9NVUxUSQkJMHgwMDAwOUIwMA0KPiAtIwlkZWZpbmUgUjEyOF8z RF9STkRSX0dFTl9JTkRYX1BSSU0JMHgwMDAwMjMwMA0KPiAtDQo+IC0jZGVmaW5lIFIxMjhf Q0NFX1BBQ0tFVF9NQVNLCQkweEMwMDAwMDAwDQo+IC0jZGVmaW5lIFIxMjhfQ0NFX1BBQ0tF VF9DT1VOVF9NQVNLCTB4M2ZmZjAwMDANCj4gLSNkZWZpbmUgUjEyOF9DQ0VfUEFDS0VUMF9S RUdfTUFTSwkweDAwMDAwN2ZmDQo+IC0jZGVmaW5lIFIxMjhfQ0NFX1BBQ0tFVDFfUkVHMF9N QVNLCTB4MDAwMDA3ZmYNCj4gLSNkZWZpbmUgUjEyOF9DQ0VfUEFDS0VUMV9SRUcxX01BU0sJ MHgwMDNmZjgwMA0KPiAtDQo+IC0jZGVmaW5lIFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBF X05PTkUJCTB4MDAwMDAwMDANCj4gLSNkZWZpbmUgUjEyOF9DQ0VfVkNfQ05UTF9QUklNX1RZ UEVfUE9JTlQJMHgwMDAwMDAwMQ0KPiAtI2RlZmluZSBSMTI4X0NDRV9WQ19DTlRMX1BSSU1f VFlQRV9MSU5FCQkweDAwMDAwMDAyDQo+IC0jZGVmaW5lIFIxMjhfQ0NFX1ZDX0NOVExfUFJJ TV9UWVBFX1BPTFlfTElORQkweDAwMDAwMDAzDQo+IC0jZGVmaW5lIFIxMjhfQ0NFX1ZDX0NO VExfUFJJTV9UWVBFX1RSSV9MSVNUCTB4MDAwMDAwMDQNCj4gLSNkZWZpbmUgUjEyOF9DQ0Vf VkNfQ05UTF9QUklNX1RZUEVfVFJJX0ZBTgkweDAwMDAwMDA1DQo+IC0jZGVmaW5lIFIxMjhf Q0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9TVFJJUAkweDAwMDAwMDA2DQo+IC0jZGVmaW5l IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9UWVBFMgkweDAwMDAwMDA3DQo+IC0j ZGVmaW5lIFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9XQUxLX0lORAkJMHgwMDAwMDAxMA0KPiAt I2RlZmluZSBSMTI4X0NDRV9WQ19DTlRMX1BSSU1fV0FMS19MSVNUCQkweDAwMDAwMDIwDQo+ IC0jZGVmaW5lIFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9XQUxLX1JJTkcJCTB4MDAwMDAwMzAN Cj4gLSNkZWZpbmUgUjEyOF9DQ0VfVkNfQ05UTF9OVU1fU0hJRlQJCTE2DQo+IC0NCj4gLSNk ZWZpbmUgUjEyOF9EQVRBVFlQRV9WUQkJMA0KPiAtI2RlZmluZSBSMTI4X0RBVEFUWVBFX0NJ NAkJMQ0KPiAtI2RlZmluZSBSMTI4X0RBVEFUWVBFX0NJOAkJMg0KPiAtI2RlZmluZSBSMTI4 X0RBVEFUWVBFX0FSR0IxNTU1CQkzDQo+IC0jZGVmaW5lIFIxMjhfREFUQVRZUEVfUkdCNTY1 CQk0DQo+IC0jZGVmaW5lIFIxMjhfREFUQVRZUEVfUkdCODg4CQk1DQo+IC0jZGVmaW5lIFIx MjhfREFUQVRZUEVfQVJHQjg4ODgJCTYNCj4gLSNkZWZpbmUgUjEyOF9EQVRBVFlQRV9SR0Iz MzIJCTcNCj4gLSNkZWZpbmUgUjEyOF9EQVRBVFlQRV9ZOAkJOA0KPiAtI2RlZmluZSBSMTI4 X0RBVEFUWVBFX1JHQjgJCTkNCj4gLSNkZWZpbmUgUjEyOF9EQVRBVFlQRV9DSTE2CQkxMA0K PiAtI2RlZmluZSBSMTI4X0RBVEFUWVBFX1lWWVU0MjIJCTExDQo+IC0jZGVmaW5lIFIxMjhf REFUQVRZUEVfVllVWTQyMgkJMTINCj4gLSNkZWZpbmUgUjEyOF9EQVRBVFlQRV9BWVVWNDQ0 CQkxNA0KPiAtI2RlZmluZSBSMTI4X0RBVEFUWVBFX0FSR0I0NDQ0CQkxNQ0KPiAtDQo+IC0v KiBDb25zdGFudHMgKi8NCj4gLSNkZWZpbmUgUjEyOF9BR1BfT0ZGU0VUCQkJMHgwMjAwMDAw MA0KPiAtDQo+IC0jZGVmaW5lIFIxMjhfV0FURVJNQVJLX0wJCTE2DQo+IC0jZGVmaW5lIFIx MjhfV0FURVJNQVJLX00JCTgNCj4gLSNkZWZpbmUgUjEyOF9XQVRFUk1BUktfTgkJOA0KPiAt I2RlZmluZSBSMTI4X1dBVEVSTUFSS19LCQkxMjgNCj4gLQ0KPiAtI2RlZmluZSBSMTI4X01B WF9VU0VDX1RJTUVPVVQJCTEwMDAwMAkvKiAxMDAgbXMgKi8NCj4gLQ0KPiAtI2RlZmluZSBS MTI4X0xBU1RfRlJBTUVfUkVHCQlSMTI4X0dVSV9TQ1JBVENIX1JFRzANCj4gLSNkZWZpbmUg UjEyOF9MQVNUX0RJU1BBVENIX1JFRwkJUjEyOF9HVUlfU0NSQVRDSF9SRUcxDQo+IC0jZGVm aW5lIFIxMjhfTUFYX1ZCX0FHRQkJCTB4N2ZmZmZmZmYNCj4gLSNkZWZpbmUgUjEyOF9NQVhf VkJfVkVSVFMJCSgweGZmZmYpDQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9SSU5HX0hJR0hfTUFS SwkJMTI4DQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9QRVJGT1JNQU5DRV9CT1hFUwkJMA0KPiAt DQo+IC0jZGVmaW5lIFIxMjhfUENJR0FSVF9UQUJMRV9TSVpFICAgICAgICAgMzI3NjgNCj4g LQ0KPiAtI2RlZmluZSBSMTI4X1JFQUQocmVnKQkJcmVhZGwoKCh2b2lkIF9faW9tZW0gKilk ZXZfcHJpdi0+bW1pby0+aGFuZGxlKSArIChyZWcpKQ0KPiAtI2RlZmluZSBSMTI4X1dSSVRF KHJlZywgdmFsKQl3cml0ZWwodmFsLCAoKHZvaWQgX19pb21lbSAqKWRldl9wcml2LT5tbWlv LT5oYW5kbGUpICsgKHJlZykpDQo+IC0jZGVmaW5lIFIxMjhfUkVBRDgocmVnKQkJcmVhZGIo KCh2b2lkIF9faW9tZW0gKilkZXZfcHJpdi0+bW1pby0+aGFuZGxlKSArIChyZWcpKQ0KPiAt I2RlZmluZSBSMTI4X1dSSVRFOChyZWcsIHZhbCkJd3JpdGViKHZhbCwgKCh2b2lkIF9faW9t ZW0gKilkZXZfcHJpdi0+bW1pby0+aGFuZGxlKSArIChyZWcpKQ0KPiAtDQo+IC0jZGVmaW5l IFIxMjhfV1JJVEVfUExMKGFkZHIsIHZhbCkJCQkJCVwNCj4gLWRvIHsJCQkJCQkJCQlcDQo+ IC0JUjEyOF9XUklURTgoUjEyOF9DTE9DS19DTlRMX0lOREVYLAkJCQlcDQo+IC0JCSAgICAo KGFkZHIpICYgMHgxZikgfCBSMTI4X1BMTF9XUl9FTik7CQkJXA0KPiAtCVIxMjhfV1JJVEUo UjEyOF9DTE9DS19DTlRMX0RBVEEsICh2YWwpKTsJCQlcDQo+IC19IHdoaWxlICgwKQ0KPiAt DQo+IC0jZGVmaW5lIENDRV9QQUNLRVQwKHJlZywgbikJCShSMTI4X0NDRV9QQUNLRVQwIHwJ CVwNCj4gLQkJCQkJICgobikgPDwgMTYpIHwgKChyZWcpID4+IDIpKQ0KPiAtI2RlZmluZSBD Q0VfUEFDS0VUMShyZWcwLCByZWcxKQkJKFIxMjhfQ0NFX1BBQ0tFVDEgfAkJXA0KPiAtCQkJ CQkgKCgocmVnMSkgPj4gMikgPDwgMTEpIHwgKChyZWcwKSA+PiAyKSkNCj4gLSNkZWZpbmUg Q0NFX1BBQ0tFVDIoKQkJCShSMTI4X0NDRV9QQUNLRVQyKQ0KPiAtI2RlZmluZSBDQ0VfUEFD S0VUMyhwa3QsIG4pCQkoUjEyOF9DQ0VfUEFDS0VUMyB8CQlcDQo+IC0JCQkJCSAocGt0KSB8 ICgobikgPDwgMTYpKQ0KPiAtDQo+IC1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfdXBk YXRlX3Jpbmdfc25hcHNob3QoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsN Cj4gLQlkcm1fcjEyOF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJmRldl9wcml2LT5yaW5nOw0K PiAtCXJpbmctPnNwYWNlID0gKEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpIC0gcmluZy0+dGFp bCkgKiBzaXplb2YodTMyKTsNCj4gLQlpZiAocmluZy0+c3BhY2UgPD0gMCkNCj4gLQkJcmlu Zy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsNCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K PiAtICogTWlzYyBoZWxwZXIgbWFjcm9zDQo+IC0gKi8NCj4gLQ0KPiAtI2RlZmluZSBERVZf SU5JVF9URVNUX1dJVEhfUkVUVVJOKF9kZXZfcHJpdikJCQkJXA0KPiAtZG8gewkJCQkJCQkJ CVwNCj4gLQlpZiAoIV9kZXZfcHJpdikgewkJCQkJCVwNCj4gLQkJRFJNX0VSUk9SKCJjYWxs ZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7CQlcDQo+IC0JCXJldHVybiAtRUlOVkFM OwkJCQkJCVwNCj4gLQl9CQkJCQkJCQlcDQo+IC19IHdoaWxlICgwKQ0KPiAtDQo+IC0jZGVm aW5lIFJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdikJCQkJXA0KPiAtZG8g ewkJCQkJCQkJCVwNCj4gLQlkcm1fcjEyOF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJmRldl9w cml2LT5yaW5nOyBpbnQgaTsJCVwNCj4gLQlpZiAocmluZy0+c3BhY2UgPCByaW5nLT5oaWdo X21hcmspIHsJCQkJXA0KPiAtCQlmb3IgKGkgPSAwIDsgaSA8IGRldl9wcml2LT51c2VjX3Rp bWVvdXQgOyBpKyspIHsJXA0KPiAtCQkJcjEyOF91cGRhdGVfcmluZ19zbmFwc2hvdChkZXZf cHJpdik7CQlcDQo+IC0JCQlpZiAocmluZy0+c3BhY2UgPj0gcmluZy0+aGlnaF9tYXJrKQkJ XA0KPiAtCQkJCWdvdG8gX19yaW5nX3NwYWNlX2RvbmU7CQkJXA0KPiAtCQkJdWRlbGF5KDEp OwkJCQkJXA0KPiAtCQl9CQkJCQkJCVwNCj4gLQkJRFJNX0VSUk9SKCJyaW5nIHNwYWNlIGNo ZWNrIGZhaWxlZCFcbiIpOwkJXA0KPiAtCQlyZXR1cm4gLUVCVVNZOwkJCQkJCVwNCj4gLQl9 CQkJCQkJCQlcDQo+IC0gX19yaW5nX3NwYWNlX2RvbmU6CQkJCQkJCVwNCj4gLQk7CQkJCQkJ CQlcDQo+IC19IHdoaWxlICgwKQ0KPiAtDQo+IC0jZGVmaW5lIFZCX0FHRV9URVNUX1dJVEhf UkVUVVJOKGRldl9wcml2KQkJCQlcDQo+IC1kbyB7CQkJCQkJCQkJXA0KPiAtCWRybV9yMTI4 X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsJCVwNCj4gLQlp ZiAoc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA+PSBSMTI4X01BWF9WQl9BR0UpIHsJCVwN Cj4gLQkJaW50IF9fcmV0ID0gcjEyOF9kb19jY2VfaWRsZShkZXZfcHJpdik7CQkJXA0KPiAt CQlpZiAoX19yZXQpCQkJCQkJXA0KPiAtCQkJcmV0dXJuIF9fcmV0OwkJCQkJXA0KPiAtCQlz YXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gMDsJCQkJXA0KPiAtCQlyMTI4X2ZyZWVsaXN0 X3Jlc2V0KGRldik7CQkJCVwNCj4gLQl9CQkJCQkJCQlcDQo+IC19IHdoaWxlICgwKQ0KPiAt DQo+IC0jZGVmaW5lIFIxMjhfV0FJVF9VTlRJTF9QQUdFX0ZMSVBQRUQoKSBkbyB7CQkJCVwN Cj4gLQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1dBSVRfVU5USUwsIDApKTsJCQlcDQo+ IC0JT1VUX1JJTkcoUjEyOF9FVkVOVF9DUlRDX09GRlNFVCk7CQkJCVwNCj4gLX0gd2hpbGUg KDApDQo+IC0NCj4gLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLSAqIFJpbmcgY29udHJvbA0KPiAtICov DQo+IC0NCj4gLSNkZWZpbmUgUjEyOF9WRVJCT1NFCTANCj4gLQ0KPiAtI2RlZmluZSBSSU5H X0xPQ0FMUwkJCQkJCQlcDQo+IC0JaW50IHdyaXRlLCBfbnI7IHVuc2lnbmVkIGludCB0YWls X21hc2s7IHZvbGF0aWxlIHUzMiAqcmluZzsNCj4gLQ0KPiAtI2RlZmluZSBCRUdJTl9SSU5H KG4pIGRvIHsJCQkJCQlcDQo+IC0JaWYgKFIxMjhfVkVSQk9TRSkJCQkJCQlcDQo+IC0JCURS TV9JTkZPKCJCRUdJTl9SSU5HKCVkKVxuIiwgKG4pKTsJCQlcDQo+IC0JaWYgKGRldl9wcml2 LT5yaW5nLnNwYWNlIDw9IChuKSAqIHNpemVvZih1MzIpKSB7CQlcDQo+IC0JCUNPTU1JVF9S SU5HKCk7CQkJCQkJXA0KPiAtCQlyMTI4X3dhaXRfcmluZyhkZXZfcHJpdiwgKG4pICogc2l6 ZW9mKHUzMikpOwkJXA0KPiAtCX0JCQkJCQkJCVwNCj4gLQlfbnIgPSBuOyBkZXZfcHJpdi0+ cmluZy5zcGFjZSAtPSAobikgKiBzaXplb2YodTMyKTsJCVwNCj4gLQlyaW5nID0gZGV2X3By aXYtPnJpbmcuc3RhcnQ7CQkJCQlcDQo+IC0Jd3JpdGUgPSBkZXZfcHJpdi0+cmluZy50YWls OwkJCQkJXA0KPiAtCXRhaWxfbWFzayA9IGRldl9wcml2LT5yaW5nLnRhaWxfbWFzazsJCQkJ XA0KPiAtfSB3aGlsZSAoMCkNCj4gLQ0KPiAtLyogWW91IGNhbiBzZXQgdGhpcyB0byB6ZXJv IGlmIHlvdSB3YW50LiAgSWYgdGhlIGNhcmQgbG9ja3MgdXAsIHlvdSdsbA0KPiAtICogbmVl ZCB0byBrZWVwIHRoaXMgc2V0LiAgSXQgd29ya3MgYXJvdW5kIGEgYnVnIGluIGVhcmx5IHJl dnMgb2YgdGhlDQo+IC0gKiBSYWdlIDEyOCBjaGlwc2V0LCB3aGVyZSB0aGUgQ0NFIHdvdWxk IHJlYWQgMzIgZHdvcmRzIHBhc3QgdGhlIGVuZCBvZg0KPiAtICogdGhlIHJpbmcgYnVmZmVy IGJlZm9yZSB3cmFwcGluZyBhcm91bmQuDQo+IC0gKi8NCj4gLSNkZWZpbmUgUjEyOF9CUk9L RU5fQ0NFCTENCj4gLQ0KPiAtI2RlZmluZSBBRFZBTkNFX1JJTkcoKSBkbyB7CQkJCQkJXA0K PiAtCWlmIChSMTI4X1ZFUkJPU0UpCQkJCQkJXA0KPiAtCQlEUk1fSU5GTygiQURWQU5DRV9S SU5HKCkgd3I9MHglMDZ4IHRhaWw9MHglMDZ4XG4iLAlcDQo+IC0JCQkgd3JpdGUsIGRldl9w cml2LT5yaW5nLnRhaWwpOwkJCVwNCj4gLQlpZiAoUjEyOF9CUk9LRU5fQ0NFICYmIHdyaXRl IDwgMzIpCQkJCVwNCj4gLQkJbWVtY3B5KGRldl9wcml2LT5yaW5nLmVuZCwJCQkJXA0KPiAt CQkgICAgICAgZGV2X3ByaXYtPnJpbmcuc3RhcnQsCQkJCVwNCj4gLQkJICAgICAgIHdyaXRl ICogc2l6ZW9mKHUzMikpOwkJCQlcDQo+IC0JaWYgKCgoZGV2X3ByaXYtPnJpbmcudGFpbCAr IF9ucikgJiB0YWlsX21hc2spICE9IHdyaXRlKQkJXA0KPiAtCQlEUk1fRVJST1IoCQkJCQkJ XA0KPiAtCQkJIkFEVkFOQ0VfUklORygpOiBtaXNtYXRjaDogbnI6ICV4IHdyaXRlOiAleCBs aW5lOiAlZFxuIiwJXA0KPiAtCQkJKChkZXZfcHJpdi0+cmluZy50YWlsICsgX25yKSAmIHRh aWxfbWFzayksCVwNCj4gLQkJCXdyaXRlLCBfX0xJTkVfXyk7CQkJCVwNCj4gLQllbHNlCQkJ CQkJCQlcDQo+IC0JCWRldl9wcml2LT5yaW5nLnRhaWwgPSB3cml0ZTsJCQkJXA0KPiAtfSB3 aGlsZSAoMCkNCj4gLQ0KPiAtI2RlZmluZSBDT01NSVRfUklORygpIGRvIHsJCQkJCQlcDQo+ IC0JaWYgKFIxMjhfVkVSQk9TRSkJCQkJCQlcDQo+IC0JCURSTV9JTkZPKCJDT01NSVRfUklO RygpIHRhaWw9MHglMDZ4XG4iLAkJCVwNCj4gLQkJCSBkZXZfcHJpdi0+cmluZy50YWlsKTsJ CQkJXA0KPiAtCW1iKCk7CQkJCQkJXA0KPiAtCVIxMjhfV1JJVEUoUjEyOF9QTTRfQlVGRkVS X0RMX1dQVFIsIGRldl9wcml2LT5yaW5nLnRhaWwpOwlcDQo+IC0JUjEyOF9SRUFEKFIxMjhf UE00X0JVRkZFUl9ETF9XUFRSKTsJCQkJXA0KPiAtfSB3aGlsZSAoMCkNCj4gLQ0KPiAtI2Rl ZmluZSBPVVRfUklORyh4KSBkbyB7CQkJCQkJXA0KPiAtCWlmIChSMTI4X1ZFUkJPU0UpCQkJ CQkJXA0KPiAtCQlEUk1fSU5GTygiICAgT1VUX1JJTkcoIDB4JTA4eCApIGF0IDB4JXhcbiIs CQlcDQo+IC0JCQkgKHVuc2lnbmVkIGludCkoeCksIHdyaXRlKTsJCQlcDQo+IC0JcmluZ1t3 cml0ZSsrXSA9IGNwdV90b19sZTMyKHgpOwkJCQkJXA0KPiAtCXdyaXRlICY9IHRhaWxfbWFz azsJCQkJCQlcDQo+IC19IHdoaWxlICgwKQ0KPiAtDQo+IC0jZW5kaWYJCQkJLyogX19SMTI4 X0RSVl9IX18gKi8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhf aW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaW9jMzIuYw0KPiBkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggY2RlYjFkYjg3MjIyLi4wMDAwMDAwMDAwMDAN Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jDQo+ICsrKyAvZGV2 L251bGwNCj4gQEAgLTEsMTk5ICswLDAgQEANCj4gLS8qDQo+IC0gKiBcZmlsZSByMTI4X2lv YzMyLmMNCj4gLSAqDQo+IC0gKiAzMi1iaXQgaW9jdGwgY29tcGF0aWJpbGl0eSByb3V0aW5l cyBmb3IgdGhlIFIxMjggRFJNLg0KPiAtICoNCj4gLSAqIFxhdXRob3IgRGF2ZSBBaXJsaWUg PGFpcmxpZWRAbGludXguaWU+IHdpdGggY29kZSBmcm9tIHBhdGNoZXMgYnkgRWdiZXJ0IEVp Y2gNCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgKEMpIFBhdWwgTWFja2VycmFzIDIwMDUNCj4g LSAqIENvcHlyaWdodCAoQykgRWdiZXJ0IEVpY2ggMjAwMywyMDA0DQo+IC0gKiBDb3B5cmln aHQgKEMpIERhdmUgQWlybGllIDIwMDUNCj4gLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+ IC0gKg0KPiAtICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksDQo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwNCj4gLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gLSAq DQo+IC0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0DQo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl DQo+IC0gKiBTb2Z0d2FyZS4NCj4gLSAqDQo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0K PiAtICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4g LSAqIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIgTElBQklMSVRZLA0KPiAtICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQo+IC0gKiBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTDQo+IC0gKiBJTiBUSEUgU09GVFdBUkUuDQo+IC0gKi8NCj4gLQ0KPiAtI2luY2x1ZGUg PGxpbnV4L2NvbXBhdC5oPg0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL3IxMjhfZHJtLmg+DQo+ IC0NCj4gLSNpbmNsdWRlICJyMTI4X2Rydi5oIg0KPiAtDQo+IC10eXBlZGVmIHN0cnVjdCBk cm1fcjEyOF9pbml0MzIgew0KPiAtCWludCBmdW5jOw0KPiAtCXVuc2lnbmVkIGludCBzYXJl YV9wcml2X29mZnNldDsNCj4gLQlpbnQgaXNfcGNpOw0KPiAtCWludCBjY2VfbW9kZTsNCj4g LQlpbnQgY2NlX3NlY3VyZTsNCj4gLQlpbnQgcmluZ19zaXplOw0KPiAtCWludCB1c2VjX3Rp bWVvdXQ7DQo+IC0NCj4gLQl1bnNpZ25lZCBpbnQgZmJfYnBwOw0KPiAtCXVuc2lnbmVkIGlu dCBmcm9udF9vZmZzZXQsIGZyb250X3BpdGNoOw0KPiAtCXVuc2lnbmVkIGludCBiYWNrX29m ZnNldCwgYmFja19waXRjaDsNCj4gLQl1bnNpZ25lZCBpbnQgZGVwdGhfYnBwOw0KPiAtCXVu c2lnbmVkIGludCBkZXB0aF9vZmZzZXQsIGRlcHRoX3BpdGNoOw0KPiAtCXVuc2lnbmVkIGlu dCBzcGFuX29mZnNldDsNCj4gLQ0KPiAtCXVuc2lnbmVkIGludCBmYl9vZmZzZXQ7DQo+IC0J dW5zaWduZWQgaW50IG1taW9fb2Zmc2V0Ow0KPiAtCXVuc2lnbmVkIGludCByaW5nX29mZnNl dDsNCj4gLQl1bnNpZ25lZCBpbnQgcmluZ19ycHRyX29mZnNldDsNCj4gLQl1bnNpZ25lZCBp bnQgYnVmZmVyc19vZmZzZXQ7DQo+IC0JdW5zaWduZWQgaW50IGFncF90ZXh0dXJlc19vZmZz ZXQ7DQo+IC19IGRybV9yMTI4X2luaXQzMl90Ow0KPiAtDQo+IC1zdGF0aWMgaW50IGNvbXBh dF9yMTI4X2luaXQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsDQo+IC0J CQkgICAgdW5zaWduZWQgbG9uZyBhcmcpDQo+IC17DQo+IC0JZHJtX3IxMjhfaW5pdDMyX3Qg aW5pdDMyOw0KPiAtCWRybV9yMTI4X2luaXRfdCBpbml0Ow0KPiAtDQo+IC0JaWYgKGNvcHlf ZnJvbV91c2VyKCZpbml0MzIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGluaXQzMikp KQ0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQ0KPiAtCWluaXQuZnVuYyA9IGluaXQzMi5m dW5jOw0KPiAtCWluaXQuc2FyZWFfcHJpdl9vZmZzZXQgPSBpbml0MzIuc2FyZWFfcHJpdl9v ZmZzZXQ7DQo+IC0JaW5pdC5pc19wY2kgPSBpbml0MzIuaXNfcGNpOw0KPiAtCWluaXQuY2Nl X21vZGUgPSBpbml0MzIuY2NlX21vZGU7DQo+IC0JaW5pdC5jY2Vfc2VjdXJlID0gaW5pdDMy LmNjZV9zZWN1cmU7DQo+IC0JaW5pdC5yaW5nX3NpemUgPSBpbml0MzIucmluZ19zaXplOw0K PiAtCWluaXQudXNlY190aW1lb3V0ID0gaW5pdDMyLnVzZWNfdGltZW91dDsNCj4gLQlpbml0 LmZiX2JwcCA9IGluaXQzMi5mYl9icHA7DQo+IC0JaW5pdC5mcm9udF9vZmZzZXQgPSBpbml0 MzIuZnJvbnRfb2Zmc2V0Ow0KPiAtCWluaXQuZnJvbnRfcGl0Y2ggPSBpbml0MzIuZnJvbnRf cGl0Y2g7DQo+IC0JaW5pdC5iYWNrX29mZnNldCA9IGluaXQzMi5iYWNrX29mZnNldDsNCj4g LQlpbml0LmJhY2tfcGl0Y2ggPSBpbml0MzIuYmFja19waXRjaDsNCj4gLQlpbml0LmRlcHRo X2JwcCA9IGluaXQzMi5kZXB0aF9icHA7DQo+IC0JaW5pdC5kZXB0aF9vZmZzZXQgPSBpbml0 MzIuZGVwdGhfb2Zmc2V0Ow0KPiAtCWluaXQuZGVwdGhfcGl0Y2ggPSBpbml0MzIuZGVwdGhf cGl0Y2g7DQo+IC0JaW5pdC5zcGFuX29mZnNldCA9IGluaXQzMi5zcGFuX29mZnNldDsNCj4g LQlpbml0LmZiX29mZnNldCA9IGluaXQzMi5mYl9vZmZzZXQ7DQo+IC0JaW5pdC5tbWlvX29m ZnNldCA9IGluaXQzMi5tbWlvX29mZnNldDsNCj4gLQlpbml0LnJpbmdfb2Zmc2V0ID0gaW5p dDMyLnJpbmdfb2Zmc2V0Ow0KPiAtCWluaXQucmluZ19ycHRyX29mZnNldCA9IGluaXQzMi5y aW5nX3JwdHJfb2Zmc2V0Ow0KPiAtCWluaXQuYnVmZmVyc19vZmZzZXQgPSBpbml0MzIuYnVm ZmVyc19vZmZzZXQ7DQo+IC0JaW5pdC5hZ3BfdGV4dHVyZXNfb2Zmc2V0ID0gaW5pdDMyLmFn cF90ZXh0dXJlc19vZmZzZXQ7DQo+IC0NCj4gLQlyZXR1cm4gZHJtX2lvY3RsX2tlcm5lbChm aWxlLCByMTI4X2NjZV9pbml0LCAmaW5pdCwNCj4gLQkJCURSTV9BVVRIfERSTV9NQVNURVJ8 RFJNX1JPT1RfT05MWSk7DQo+IC19DQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0IGRybV9yMTI4 X2RlcHRoMzIgew0KPiAtCWludCBmdW5jOw0KPiAtCWludCBuOw0KPiAtCXUzMiB4Ow0KPiAt CXUzMiB5Ow0KPiAtCXUzMiBidWZmZXI7DQo+IC0JdTMyIG1hc2s7DQo+IC19IGRybV9yMTI4 X2RlcHRoMzJfdDsNCj4gLQ0KPiAtc3RhdGljIGludCBjb21wYXRfcjEyOF9kZXB0aChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwNCj4gLQkJCSAgICAgdW5zaWduZWQg bG9uZyBhcmcpDQo+IC17DQo+IC0JZHJtX3IxMjhfZGVwdGgzMl90IGRlcHRoMzI7DQo+IC0J ZHJtX3IxMjhfZGVwdGhfdCBkZXB0aDsNCj4gLQ0KPiAtCWlmIChjb3B5X2Zyb21fdXNlcigm ZGVwdGgzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoZGVwdGgzMikpKQ0KPiAtCQly ZXR1cm4gLUVGQVVMVDsNCj4gLQ0KPiAtCWRlcHRoLmZ1bmMgPSBkZXB0aDMyLmZ1bmM7DQo+ IC0JZGVwdGgubiA9IGRlcHRoMzIubjsNCj4gLQlkZXB0aC54ID0gY29tcGF0X3B0cihkZXB0 aDMyLngpOw0KPiAtCWRlcHRoLnkgPSBjb21wYXRfcHRyKGRlcHRoMzIueSk7DQo+IC0JZGVw dGguYnVmZmVyID0gY29tcGF0X3B0cihkZXB0aDMyLmJ1ZmZlcik7DQo+IC0JZGVwdGgubWFz ayA9IGNvbXBhdF9wdHIoZGVwdGgzMi5tYXNrKTsNCj4gLQ0KPiAtCXJldHVybiBkcm1faW9j dGxfa2VybmVsKGZpbGUsIHIxMjhfY2NlX2RlcHRoLCAmZGVwdGgsIERSTV9BVVRIKTsNCj4g LX0NCj4gLQ0KPiAtdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfc3RpcHBsZTMyIHsNCj4gLQl1 MzIgbWFzazsNCj4gLX0gZHJtX3IxMjhfc3RpcHBsZTMyX3Q7DQo+IC0NCj4gLXN0YXRpYyBp bnQgY29tcGF0X3IxMjhfc3RpcHBsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50 IGNtZCwNCj4gLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykNCj4gLXsNCj4gLQlkcm1f cjEyOF9zdGlwcGxlMzJfdCBzdGlwcGxlMzI7DQo+IC0JZHJtX3IxMjhfc3RpcHBsZV90IHN0 aXBwbGU7DQo+IC0NCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJnN0aXBwbGUzMiwgKHZvaWQg X191c2VyICopYXJnLCBzaXplb2Yoc3RpcHBsZTMyKSkpDQo+IC0JCXJldHVybiAtRUZBVUxU Ow0KPiAtDQo+IC0Jc3RpcHBsZS5tYXNrID0gY29tcGF0X3B0cihzdGlwcGxlMzIubWFzayk7 DQo+IC0NCj4gLQlyZXR1cm4gZHJtX2lvY3RsX2tlcm5lbChmaWxlLCByMTI4X2NjZV9zdGlw cGxlLCAmc3RpcHBsZSwgRFJNX0FVVEgpOw0KPiAtfQ0KPiAtDQo+IC10eXBlZGVmIHN0cnVj dCBkcm1fcjEyOF9nZXRwYXJhbTMyIHsNCj4gLQlpbnQgcGFyYW07DQo+IC0JdTMyIHZhbHVl Ow0KPiAtfSBkcm1fcjEyOF9nZXRwYXJhbTMyX3Q7DQo+IC0NCj4gLXN0YXRpYyBpbnQgY29t cGF0X3IxMjhfZ2V0cGFyYW0oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQs DQo+IC0JCQkJdW5zaWduZWQgbG9uZyBhcmcpDQo+IC17DQo+IC0JZHJtX3IxMjhfZ2V0cGFy YW0zMl90IGdldHBhcmFtMzI7DQo+IC0JZHJtX3IxMjhfZ2V0cGFyYW1fdCBnZXRwYXJhbTsN Cj4gLQ0KPiAtCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0cGFyYW0zMiwgKHZvaWQgX191c2Vy ICopYXJnLCBzaXplb2YoZ2V0cGFyYW0zMikpKQ0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4g LQ0KPiAtCWdldHBhcmFtLnBhcmFtID0gZ2V0cGFyYW0zMi5wYXJhbTsNCj4gLQlnZXRwYXJh bS52YWx1ZSA9IGNvbXBhdF9wdHIoZ2V0cGFyYW0zMi52YWx1ZSk7DQo+IC0NCj4gLQlyZXR1 cm4gZHJtX2lvY3RsX2tlcm5lbChmaWxlLCByMTI4X2dldHBhcmFtLCAmZ2V0cGFyYW0sIERS TV9BVVRIKTsNCj4gLX0NCj4gLQ0KPiAtZHJtX2lvY3RsX2NvbXBhdF90ICpyMTI4X2NvbXBh dF9pb2N0bHNbXSA9IHsNCj4gLQlbRFJNX1IxMjhfSU5JVF0gPSBjb21wYXRfcjEyOF9pbml0 LA0KPiAtCVtEUk1fUjEyOF9ERVBUSF0gPSBjb21wYXRfcjEyOF9kZXB0aCwNCj4gLQlbRFJN X1IxMjhfU1RJUFBMRV0gPSBjb21wYXRfcjEyOF9zdGlwcGxlLA0KPiAtCVtEUk1fUjEyOF9H RVRQQVJBTV0gPSBjb21wYXRfcjEyOF9nZXRwYXJhbSwNCj4gLX07DQo+IC0NCj4gLS8qKg0K PiAtICogcjEyOF9jb21wYXRfaW9jdGwgLSBDYWxsZWQgd2hlbmV2ZXIgYSAzMi1iaXQgcHJv Y2VzcyBydW5uaW5nIHVuZGVyDQo+IC0gKiAgICAgICAgICAgICAgICAgICAgIGEgNjQtYml0 IGtlcm5lbCBwZXJmb3JtcyBhbiBpb2N0bCBvbiAvZGV2L2RyaS9jYXJkPG4+Lg0KPiAtICoN Cj4gLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIuDQo+IC0gKiBAY21kOiBjb21tYW5kLg0KPiAt ICogQGFyZzogdXNlciBhcmd1bWVudC4NCj4gLSAqIHJldHVybjogemVybyBvbiBzdWNjZXNz IG9yIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlLg0KPiAtICovDQo+IC1sb25nIHIxMjhf Y29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNp Z25lZCBsb25nIGFyZykNCj4gLXsNCj4gLQl1bnNpZ25lZCBpbnQgbnIgPSBEUk1fSU9DVExf TlIoY21kKTsNCj4gLQlkcm1faW9jdGxfY29tcGF0X3QgKmZuID0gTlVMTDsNCj4gLQlpbnQg cmV0Ow0KPiAtDQo+IC0JaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSkNCj4gLQkJcmV0dXJu IGRybV9jb21wYXRfaW9jdGwoZmlscCwgY21kLCBhcmcpOw0KPiAtDQo+IC0JaWYgKG5yIDwg RFJNX0NPTU1BTkRfQkFTRSArIEFSUkFZX1NJWkUocjEyOF9jb21wYXRfaW9jdGxzKSkNCj4g LQkJZm4gPSByMTI4X2NvbXBhdF9pb2N0bHNbbnIgLSBEUk1fQ09NTUFORF9CQVNFXTsNCj4g LQ0KPiAtCWlmIChmbiAhPSBOVUxMKQ0KPiAtCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBh cmcpOw0KPiAtCWVsc2UNCj4gLQkJcmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsN Cj4gLQ0KPiAtCXJldHVybiByZXQ7DQo+IC19DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcjEyOC9yMTI4X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEu Yw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggZDg0ZTljOTZlMjBhLi4w MDAwMDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYw0K PiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDExOCArMCwwIEBADQo+IC0vKiByMTI4X2lycS5j IC0tIElSUSBoYW5kbGluZyBmb3IgcmFkZW9uIC0qLSBsaW51eC1jIC0qLSAqLw0KPiAtLyoN Cj4gLSAqIENvcHlyaWdodCAoQykgVGhlIFdlYXRoZXIgQ2hhbm5lbCwgSW5jLiAgMjAwMi4g IEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogVGhlIFdlYXRoZXIgQ2hhbm5l bCAoVE0pIGZ1bmRlZCBUdW5nc3RlbiBHcmFwaGljcyB0byBkZXZlbG9wIHRoZQ0KPiAtICog aW5pdGlhbCByZWxlYXNlIG9mIHRoZSBSYWRlb24gODUwMCBkcml2ZXIgdW5kZXIgdGhlIFhG cmVlODYgbGljZW5zZS4NCj4gLSAqIFRoaXMgbm90aWNlIG11c3QgYmUgcHJlc2VydmVkLg0K PiAtICoNCj4gLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLA0KPiAtICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsDQo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0g Kg0KPiAtICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dA0KPiAtICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQ0KPiAtICogU29mdHdhcmUuDQo+IC0gKg0KPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IN Cj4gLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+ IC0gKiBQUkVDSVNJT04gSU5TSUdIVCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KPiAtICogT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+IC0g KiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVINCj4gLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4NCj4gLSAqDQo+IC0gKiBBdXRob3JzOg0KPiAtICogICAgS2VpdGggV2hpdHdlbGwgPGtl aXRoQHR1bmdzdGVuZ3JhcGhpY3MuY29tPg0KPiAtICogICAgRXJpYyBBbmhvbHQgPGFuaG9s dEBGcmVlQlNELm9yZz4NCj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9kZXZp Y2UuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+IC0jaW5jbHVkZSA8ZHJt L2RybV92YmxhbmsuaD4NCj4gLSNpbmNsdWRlIDxkcm0vcjEyOF9kcm0uaD4NCj4gLQ0KPiAt I2luY2x1ZGUgInIxMjhfZHJ2LmgiDQo+IC0NCj4gLXUzMiByMTI4X2dldF92YmxhbmtfY291 bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkNCj4gLXsN Cj4gLQljb25zdCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsNCj4gLQ0KPiAtCWlmIChwaXBlICE9IDApDQo+IC0JCXJldHVybiAwOw0KPiAtDQo+ IC0JcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsNCj4gLX0N Cj4gLQ0KPiAtaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoaW50IGlycSwg dm9pZCAqYXJnKQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0 IGRybV9kZXZpY2UgKikgYXJnOw0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYg PSAoZHJtX3IxMjhfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JaW50IHN0 YXR1czsNCj4gLQ0KPiAtCXN0YXR1cyA9IFIxMjhfUkVBRChSMTI4X0dFTl9JTlRfU1RBVFVT KTsNCj4gLQ0KPiAtCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8NCj4gLQlpZiAoc3RhdHVzICYg UjEyOF9DUlRDX1ZCTEFOS19JTlQpIHsNCj4gLQkJUjEyOF9XUklURShSMTI4X0dFTl9JTlRf U1RBVFVTLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9BSyk7DQo+IC0JCWF0b21pY19pbmMoJmRl dl9wcml2LT52YmxfcmVjZWl2ZWQpOw0KPiAtCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDAp Ow0KPiAtCQlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+IC0JfQ0KPiAtCXJldHVybiBJUlFfTk9O RTsNCj4gLX0NCj4gLQ0KPiAtaW50IHIxMjhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2 YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCWlmIChwaXBl ICE9IDApIHsNCj4gLQkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICV1XG4iLCBfX2Z1bmNf XywgcGlwZSk7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCVIxMjhf V1JJVEUoUjEyOF9HRU5fSU5UX0NOVEwsIFIxMjhfQ1JUQ19WQkxBTktfSU5UX0VOKTsNCj4g LQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtdm9pZCByMTI4X2Rpc2FibGVfdmJsYW5rKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQ0KPiAtew0KPiAtCWlm IChwaXBlICE9IDApDQo+IC0JCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAldVxuIiwgX19m dW5jX18sIHBpcGUpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBGSVhNRTogaW1wbGVtZW50IHBy b3BlciBpbnRlcnJ1cHQgZGlzYWJsZSBieSB1c2luZyB0aGUgdmJsYW5rDQo+IC0JICogY291 bnRlciByZWdpc3RlciAoaWYgYXZhaWxhYmxlKQ0KPiAtCSAqDQo+IC0JICogUjEyOF9XUklU RShSMTI4X0dFTl9JTlRfQ05UTCwNCj4gLQkgKiAgICAgICAgICAgIFIxMjhfUkVBRChSMTI4 X0dFTl9JTlRfQ05UTCkgJiB+UjEyOF9DUlRDX1ZCTEFOS19JTlRfRU4pOw0KPiAtCSAqLw0K PiAtfQ0KPiAtDQo+IC12b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJp diA9IChkcm1fcjEyOF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAt CS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLw0KPiAtCVIxMjhfV1JJVEUoUjEyOF9H RU5fSU5UX0NOVEwsIDApOw0KPiAtCS8qIENsZWFyIHZibGFuayBiaXQgaWYgaXQncyBhbHJl YWR5IGhpZ2ggKi8NCj4gLQlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9TVEFUVVMsIFIxMjhf Q1JUQ19WQkxBTktfSU5UX0FLKTsNCj4gLX0NCj4gLQ0KPiAtaW50IHIxMjhfZHJpdmVyX2ly cV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCXJldHVy biAwOw0KPiAtfQ0KPiAtDQo+IC12b2lkIHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRl dl9wcml2ID0gKGRybV9yMTI4X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOw0KPiAt CWlmICghZGV2X3ByaXYpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCS8qIERpc2FibGUgKmFs bCogaW50ZXJydXB0cyAqLw0KPiAtCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX0NOVEwsIDAp Ow0KPiAtfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0 ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jDQo+IGRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCBhYzEzZmMyYTAyMTQuLjAwMDAwMDAwMDAwMA0KPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMNCj4gKysrIC9kZXYvbnVs bA0KPiBAQCAtMSwxNjQxICswLDAgQEANCj4gLS8qIHIxMjhfc3RhdGUuYyAtLSBTdGF0ZSBz dXBwb3J0IGZvciByMTI4IC0qLSBsaW51eC1jIC0qLQ0KPiAtICogQ3JlYXRlZDogVGh1IEph biAyNyAwMjo1Mzo0MyAyMDAwIGJ5IGdhcmV0aEB2YWxpbnV4LmNvbQ0KPiAtICovDQo+IC0v Kg0KPiAtICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVtcywgSW5jLiwgU3Vubnl2 YWxlLCBDYWxpZm9ybmlhLg0KPiAtICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCj4gLSAqDQo+ IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KPiAtICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCj4g LSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24NCj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KPiAt ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlDQo+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiAtICoNCj4gLSAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQNCj4gLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUNCj4gLSAq IFNvZnR3YXJlLg0KPiAtICoNCj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQo+IC0gKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwNCj4gLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTA0KPiAtICogUFJF Q0lTSU9OIElOU0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1INCj4gLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLA0KPiAtICogQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSDQo+IC0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQo+IC0g Kg0KPiAtICogQXV0aG9yczoNCj4gLSAqICAgIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxp bnV4LmNvbT4NCj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+IC0j aW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4N Cj4gLQ0KPiAtI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+DQo+IC0jaW5jbHVkZSA8ZHJt L2RybV9maWxlLmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPiAtI2luY2x1 ZGUgPGRybS9yMTI4X2RybS5oPg0KPiAtDQo+IC0jaW5jbHVkZSAicjEyOF9kcnYuaCINCj4g LQ0KPiAtLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KPiAtICogQ0NFIGhhcmR3YXJlIHN0YXRlIHByb2dyYW1t aW5nIGZ1bmN0aW9ucw0KPiAtICovDQo+IC0NCj4gLXN0YXRpYyB2b2lkIHIxMjhfZW1pdF9j bGlwX3JlY3RzKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYsDQo+IC0JCQkJIHN0cnVj dCBkcm1fY2xpcF9yZWN0ICpib3hlcywgaW50IGNvdW50KQ0KPiAtew0KPiAtCXUzMiBhdXhf c2NfY250bCA9IDB4MDAwMDAwMDA7DQo+IC0JUklOR19MT0NBTFM7DQo+IC0JRFJNX0RFQlVH KCJcbiIpOw0KPiAtDQo+IC0JQkVHSU5fUklORygoY291bnQgPCAzID8gY291bnQgOiAzKSAq IDUgKyAyKTsNCj4gLQ0KPiAtCWlmIChjb3VudCA+PSAxKSB7DQo+IC0JCU9VVF9SSU5HKEND RV9QQUNLRVQwKFIxMjhfQVVYMV9TQ19MRUZULCAzKSk7DQo+IC0JCU9VVF9SSU5HKGJveGVz WzBdLngxKTsNCj4gLQkJT1VUX1JJTkcoYm94ZXNbMF0ueDIgLSAxKTsNCj4gLQkJT1VUX1JJ TkcoYm94ZXNbMF0ueTEpOw0KPiAtCQlPVVRfUklORyhib3hlc1swXS55MiAtIDEpOw0KPiAt DQo+IC0JCWF1eF9zY19jbnRsIHw9IChSMTI4X0FVWDFfU0NfRU4gfCBSMTI4X0FVWDFfU0Nf TU9ERV9PUik7DQo+IC0JfQ0KPiAtCWlmIChjb3VudCA+PSAyKSB7DQo+IC0JCU9VVF9SSU5H KENDRV9QQUNLRVQwKFIxMjhfQVVYMl9TQ19MRUZULCAzKSk7DQo+IC0JCU9VVF9SSU5HKGJv eGVzWzFdLngxKTsNCj4gLQkJT1VUX1JJTkcoYm94ZXNbMV0ueDIgLSAxKTsNCj4gLQkJT1VU X1JJTkcoYm94ZXNbMV0ueTEpOw0KPiAtCQlPVVRfUklORyhib3hlc1sxXS55MiAtIDEpOw0K PiAtDQo+IC0JCWF1eF9zY19jbnRsIHw9IChSMTI4X0FVWDJfU0NfRU4gfCBSMTI4X0FVWDJf U0NfTU9ERV9PUik7DQo+IC0JfQ0KPiAtCWlmIChjb3VudCA+PSAzKSB7DQo+IC0JCU9VVF9S SU5HKENDRV9QQUNLRVQwKFIxMjhfQVVYM19TQ19MRUZULCAzKSk7DQo+IC0JCU9VVF9SSU5H KGJveGVzWzJdLngxKTsNCj4gLQkJT1VUX1JJTkcoYm94ZXNbMl0ueDIgLSAxKTsNCj4gLQkJ T1VUX1JJTkcoYm94ZXNbMl0ueTEpOw0KPiAtCQlPVVRfUklORyhib3hlc1syXS55MiAtIDEp Ow0KPiAtDQo+IC0JCWF1eF9zY19jbnRsIHw9IChSMTI4X0FVWDNfU0NfRU4gfCBSMTI4X0FV WDNfU0NfTU9ERV9PUik7DQo+IC0JfQ0KPiAtDQo+IC0JT1VUX1JJTkcoQ0NFX1BBQ0tFVDAo UjEyOF9BVVhfU0NfQ05UTCwgMCkpOw0KPiAtCU9VVF9SSU5HKGF1eF9zY19jbnRsKTsNCj4g LQ0KPiAtCUFEVkFOQ0VfUklORygpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgX19pbmxpbmVf XyB2b2lkIHIxMjhfZW1pdF9jb3JlKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+ IC17DQo+IC0JZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJl YV9wcml2Ow0KPiAtCWRybV9yMTI4X2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJp di0+Y29udGV4dF9zdGF0ZTsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQlEUk1fREVCVUcoIlxu Iik7DQo+IC0NCj4gLQlCRUdJTl9SSU5HKDIpOw0KPiAtDQo+IC0JT1VUX1JJTkcoQ0NFX1BB Q0tFVDAoUjEyOF9TQ0FMRV8zRF9DTlRMLCAwKSk7DQo+IC0JT1VUX1JJTkcoY3R4LT5zY2Fs ZV8zZF9jbnRsKTsNCj4gLQ0KPiAtCUFEVkFOQ0VfUklORygpOw0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfZW1pdF9jb250ZXh0KGRybV9yMTI4X3ByaXZh dGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJp diA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCWRybV9yMTI4X2NvbnRleHRfcmVnc190 ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsNCj4gLQlSSU5HX0xPQ0FMUzsN Cj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlCRUdJTl9SSU5HKDEzKTsNCj4gLQ0K PiAtCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfRFNUX1BJVENIX09GRlNFVF9DLCAxMSkp Ow0KPiAtCU9VVF9SSU5HKGN0eC0+ZHN0X3BpdGNoX29mZnNldF9jKTsNCj4gLQlPVVRfUklO RyhjdHgtPmRwX2d1aV9tYXN0ZXJfY250bF9jKTsNCj4gLQlPVVRfUklORyhjdHgtPnNjX3Rv cF9sZWZ0X2MpOw0KPiAtCU9VVF9SSU5HKGN0eC0+c2NfYm90dG9tX3JpZ2h0X2MpOw0KPiAt CU9VVF9SSU5HKGN0eC0+el9vZmZzZXRfYyk7DQo+IC0JT1VUX1JJTkcoY3R4LT56X3BpdGNo X2MpOw0KPiAtCU9VVF9SSU5HKGN0eC0+el9zdGVuX2NudGxfYyk7DQo+IC0JT1VUX1JJTkco Y3R4LT50ZXhfY250bF9jKTsNCj4gLQlPVVRfUklORyhjdHgtPm1pc2NfM2Rfc3RhdGVfY250 bF9yZWcpOw0KPiAtCU9VVF9SSU5HKGN0eC0+dGV4dHVyZV9jbHJfY21wX2Nscl9jKTsNCj4g LQlPVVRfUklORyhjdHgtPnRleHR1cmVfY2xyX2NtcF9tc2tfYyk7DQo+IC0JT1VUX1JJTkco Y3R4LT5mb2dfY29sb3JfYyk7DQo+IC0NCj4gLQlBRFZBTkNFX1JJTkcoKTsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfc2V0dXAoZHJtX3IxMjhf cHJpdmF0ZV90ICpkZXZfcHJpdikNCj4gLXsNCj4gLQlkcm1fcjEyOF9zYXJlYV90ICpzYXJl YV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JZHJtX3IxMjhfY29udGV4dF9y ZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOw0KPiAtCVJJTkdfTE9D QUxTOw0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCUJFR0lOX1JJTkcoMyk7DQo+ IC0NCj4gLQlPVVRfUklORyhDQ0VfUEFDS0VUMShSMTI4X1NFVFVQX0NOVEwsIFIxMjhfUE00 X1ZDX0ZQVV9TRVRVUCkpOw0KPiAtCU9VVF9SSU5HKGN0eC0+c2V0dXBfY250bCk7DQo+IC0J T1VUX1JJTkcoY3R4LT5wbTRfdmNfZnB1X3NldHVwKTsNCj4gLQ0KPiAtCUFEVkFOQ0VfUklO RygpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfZW1pdF9t YXNrcyhkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCWRybV9yMTI4 X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsNCj4gLQlkcm1f cjEyOF9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7 DQo+IC0JUklOR19MT0NBTFM7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JQkVH SU5fUklORyg1KTsNCj4gLQ0KPiAtCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfRFBfV1JJ VEVfTUFTSywgMCkpOw0KPiAtCU9VVF9SSU5HKGN0eC0+ZHBfd3JpdGVfbWFzayk7DQo+IC0N Cj4gLQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1NURU5fUkVGX01BU0tfQywgMSkpOw0K PiAtCU9VVF9SSU5HKGN0eC0+c3Rlbl9yZWZfbWFza19jKTsNCj4gLQlPVVRfUklORyhjdHgt PnBsYW5lXzNkX21hc2tfYyk7DQo+IC0NCj4gLQlBRFZBTkNFX1JJTkcoKTsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfd2luZG93KGRybV9yMTI4 X3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfc2FyZWFfdCAqc2Fy ZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCWRybV9yMTI4X2NvbnRleHRf cmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsNCj4gLQlSSU5HX0xP Q0FMUzsNCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlCRUdJTl9SSU5HKDIpOw0K PiAtDQo+IC0JT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9XSU5ET1dfWFlfT0ZGU0VULCAw KSk7DQo+IC0JT1VUX1JJTkcoY3R4LT53aW5kb3dfeHlfb2Zmc2V0KTsNCj4gLQ0KPiAtCUFE VkFOQ0VfUklORygpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIx MjhfZW1pdF90ZXgwKGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYpDQo+IC17DQo+IC0J ZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2Ow0K PiAtCWRybV9yMTI4X2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4 dF9zdGF0ZTsNCj4gLQlkcm1fcjEyOF90ZXh0dXJlX3JlZ3NfdCAqdGV4ID0gJnNhcmVhX3By aXYtPnRleF9zdGF0ZVswXTsNCj4gLQlpbnQgaTsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQlE Uk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlCRUdJTl9SSU5HKDcgKyBSMTI4X01BWF9URVhU VVJFX0xFVkVMUyk7DQo+IC0NCj4gLQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1BSSU1f VEVYX0NOVExfQywNCj4gLQkJCSAgICAgMiArIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTKSk7 DQo+IC0JT1VUX1JJTkcodGV4LT50ZXhfY250bCk7DQo+IC0JT1VUX1JJTkcodGV4LT50ZXhf Y29tYmluZV9jbnRsKTsNCj4gLQlPVVRfUklORyhjdHgtPnRleF9zaXplX3BpdGNoX2MpOw0K PiAtCWZvciAoaSA9IDA7IGkgPCBSMTI4X01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQ0KPiAt CQlPVVRfUklORyh0ZXgtPnRleF9vZmZzZXRbaV0pOw0KPiAtDQo+IC0JT1VUX1JJTkcoQ0NF X1BBQ0tFVDAoUjEyOF9DT05TVEFOVF9DT0xPUl9DLCAxKSk7DQo+IC0JT1VUX1JJTkcoY3R4 LT5jb25zdGFudF9jb2xvcl9jKTsNCj4gLQlPVVRfUklORyh0ZXgtPnRleF9ib3JkZXJfY29s b3IpOw0KPiAtDQo+IC0JQURWQU5DRV9SSU5HKCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBf X2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3RleDEoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZf cHJpdikNCj4gLXsNCj4gLQlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3By aXYtPnNhcmVhX3ByaXY7DQo+IC0JZHJtX3IxMjhfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZz YXJlYV9wcml2LT50ZXhfc3RhdGVbMV07DQo+IC0JaW50IGk7DQo+IC0JUklOR19MT0NBTFM7 DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JQkVHSU5fUklORyg1ICsgUjEyOF9N QVhfVEVYVFVSRV9MRVZFTFMpOw0KPiAtDQo+IC0JT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEy OF9TRUNfVEVYX0NOVExfQywgMSArIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTKSk7DQo+IC0J T1VUX1JJTkcodGV4LT50ZXhfY250bCk7DQo+IC0JT1VUX1JJTkcodGV4LT50ZXhfY29tYmlu ZV9jbnRsKTsNCj4gLQlmb3IgKGkgPSAwOyBpIDwgUjEyOF9NQVhfVEVYVFVSRV9MRVZFTFM7 IGkrKykNCj4gLQkJT1VUX1JJTkcodGV4LT50ZXhfb2Zmc2V0W2ldKTsNCj4gLQ0KPiAtCU9V VF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfU0VDX1RFWFRVUkVfQk9SREVSX0NPTE9SX0MsIDAp KTsNCj4gLQlPVVRfUklORyh0ZXgtPnRleF9ib3JkZXJfY29sb3IpOw0KPiAtDQo+IC0JQURW QU5DRV9SSU5HKCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHIxMjhfZW1pdF9zdGF0 ZShkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2KQ0KPiAtew0KPiAtCWRybV9yMTI4X3Nh cmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsNCj4gLQl1bnNpZ25l ZCBpbnQgZGlydHkgPSBzYXJlYV9wcml2LT5kaXJ0eTsNCj4gLQ0KPiAtCURSTV9ERUJVRygi ZGlydHk9MHglMDh4XG4iLCBkaXJ0eSk7DQo+IC0NCj4gLQlpZiAoZGlydHkgJiBSMTI4X1VQ TE9BRF9DT1JFKSB7DQo+IC0JCXIxMjhfZW1pdF9jb3JlKGRldl9wcml2KTsNCj4gLQkJc2Fy ZWFfcHJpdi0+ZGlydHkgJj0gflIxMjhfVVBMT0FEX0NPUkU7DQo+IC0JfQ0KPiAtDQo+IC0J aWYgKGRpcnR5ICYgUjEyOF9VUExPQURfQ09OVEVYVCkgew0KPiAtCQlyMTI4X2VtaXRfY29u dGV4dChkZXZfcHJpdik7DQo+IC0JCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5SMTI4X1VQTE9B RF9DT05URVhUOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChkaXJ0eSAmIFIxMjhfVVBMT0FEX1NF VFVQKSB7DQo+IC0JCXIxMjhfZW1pdF9zZXR1cChkZXZfcHJpdik7DQo+IC0JCXNhcmVhX3By aXYtPmRpcnR5ICY9IH5SMTI4X1VQTE9BRF9TRVRVUDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAo ZGlydHkgJiBSMTI4X1VQTE9BRF9NQVNLUykgew0KPiAtCQlyMTI4X2VtaXRfbWFza3MoZGV2 X3ByaXYpOw0KPiAtCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+UjEyOF9VUExPQURfTUFTS1M7 DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGRpcnR5ICYgUjEyOF9VUExPQURfV0lORE9XKSB7DQo+ IC0JCXIxMjhfZW1pdF93aW5kb3coZGV2X3ByaXYpOw0KPiAtCQlzYXJlYV9wcml2LT5kaXJ0 eSAmPSB+UjEyOF9VUExPQURfV0lORE9XOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChkaXJ0eSAm IFIxMjhfVVBMT0FEX1RFWDApIHsNCj4gLQkJcjEyOF9lbWl0X3RleDAoZGV2X3ByaXYpOw0K PiAtCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+UjEyOF9VUExPQURfVEVYMDsNCj4gLQl9DQo+ IC0NCj4gLQlpZiAoZGlydHkgJiBSMTI4X1VQTE9BRF9URVgxKSB7DQo+IC0JCXIxMjhfZW1p dF90ZXgxKGRldl9wcml2KTsNCj4gLQkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gflIxMjhfVVBM T0FEX1RFWDE7DQo+IC0JfQ0KPiAtDQo+IC0JLyogVHVybiBvZmYgdGhlIHRleHR1cmUgY2Fj aGUgZmx1c2hpbmcgKi8NCj4gLQlzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlLnRleF9jbnRs X2MgJj0gflIxMjhfVEVYX0NBQ0hFX0ZMVVNIOw0KPiAtDQo+IC0Jc2FyZWFfcHJpdi0+ZGly dHkgJj0gflIxMjhfUkVRVUlSRV9RVUlFU0NFTkNFOw0KPiAtfQ0KPiAtDQo+IC0jaWYgUjEy OF9QRVJGT1JNQU5DRV9CT1hFUw0KPiAtLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtICogUGVyZm9ybWFu Y2UgbW9uaXRvcmluZyBmdW5jdGlvbnMNCj4gLSAqLw0KPiAtDQo+IC1zdGF0aWMgdm9pZCBy MTI4X2NsZWFyX2JveChkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2LA0KPiAtCQkJICAg aW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCByLCBpbnQgZywgaW50IGIpDQo+IC17 DQo+IC0JdTMyIHBpdGNoLCBvZmZzZXQ7DQo+IC0JdTMyIGZiX2JwcCwgY29sb3I7DQo+IC0J UklOR19MT0NBTFM7DQo+IC0NCj4gLQlzd2l0Y2ggKGRldl9wcml2LT5mYl9icHApIHsNCj4g LQljYXNlIDE2Og0KPiAtCQlmYl9icHAgPSBSMTI4X0dNQ19EU1RfMTZCUFA7DQo+IC0JCWNv bG9yID0gKCgociAmIDB4ZjgpIDw8IDgpIHwNCj4gLQkJCSAoKGcgJiAweGZjKSA8PCAzKSB8 ICgoYiAmIDB4ZjgpID4+IDMpKTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSAyNDoNCj4gLQkJ ZmJfYnBwID0gUjEyOF9HTUNfRFNUXzI0QlBQOw0KPiAtCQljb2xvciA9ICgociA8PCAxNikg fCAoZyA8PCA4KSB8IGIpOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIDMyOg0KPiAtCQlmYl9i cHAgPSBSMTI4X0dNQ19EU1RfMzJCUFA7DQo+IC0JCWNvbG9yID0gKCgoMHhmZikgPDwgMjQp IHwgKHIgPDwgMTYpIHwgKGcgPDwgOCkgfCBiKTsNCj4gLQkJYnJlYWs7DQo+IC0JZGVmYXVs dDoNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gLQ0KPiAtCW9mZnNldCA9IGRldl9wcml2LT5i YWNrX29mZnNldDsNCj4gLQlwaXRjaCA9IGRldl9wcml2LT5iYWNrX3BpdGNoID4+IDM7DQo+ IC0NCj4gLQlCRUdJTl9SSU5HKDYpOw0KPiAtDQo+IC0JT1VUX1JJTkcoQ0NFX1BBQ0tFVDMo UjEyOF9DTlRMX1BBSU5UX01VTFRJLCA0KSk7DQo+IC0JT1VUX1JJTkcoUjEyOF9HTUNfRFNU X1BJVENIX09GRlNFVF9DTlRMIHwNCj4gLQkJIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9S IHwNCj4gLQkJIGZiX2JwcCB8DQo+IC0JCSBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1Ig fA0KPiAtCQkgUjEyOF9ST1AzX1AgfA0KPiAtCQkgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJ UyB8IFIxMjhfR01DX0FVWF9DTElQX0RJUyk7DQo+IC0NCj4gLQlPVVRfUklORygocGl0Y2gg PDwgMjEpIHwgKG9mZnNldCA+PiA1KSk7DQo+IC0JT1VUX1JJTkcoY29sb3IpOw0KPiAtDQo+ IC0JT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7DQo+IC0JT1VUX1JJTkcoKHcgPDwgMTYpIHwg aCk7DQo+IC0NCj4gLQlBRFZBTkNFX1JJTkcoKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZv aWQgcjEyOF9jY2VfcGVyZm9ybWFuY2VfYm94ZXMoZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZf cHJpdikNCj4gLXsNCj4gLQlpZiAoYXRvbWljX3JlYWQoJmRldl9wcml2LT5pZGxlX2NvdW50 KSA9PSAwKQ0KPiAtCQlyMTI4X2NsZWFyX2JveChkZXZfcHJpdiwgNjQsIDQsIDgsIDgsIDAs IDI1NSwgMCk7DQo+IC0JZWxzZQ0KPiAtCQlhdG9taWNfc2V0KCZkZXZfcHJpdi0+aWRsZV9j b3VudCwgMCk7DQo+IC19DQo+IC0NCj4gLSNlbmRpZg0KPiAtDQo+IC0vKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQo+IC0gKiBDQ0UgY29tbWFuZCBkaXNwYXRjaCBmdW5jdGlvbnMNCj4gLSAqLw0KPiAtDQo+ IC1zdGF0aWMgdm9pZCByMTI4X3ByaW50X2RpcnR5KGNvbnN0IGNoYXIgKm1zZywgdW5zaWdu ZWQgaW50IGZsYWdzKQ0KPiAtew0KPiAtCURSTV9JTkZPKCIlczogKDB4JXgpICVzJXMlcyVz JXMlcyVzJXMlc1xuIiwNCj4gLQkJIG1zZywNCj4gLQkJIGZsYWdzLA0KPiAtCQkgKGZsYWdz ICYgUjEyOF9VUExPQURfQ09SRSkgPyAiY29yZSwgIiA6ICIiLA0KPiAtCQkgKGZsYWdzICYg UjEyOF9VUExPQURfQ09OVEVYVCkgPyAiY29udGV4dCwgIiA6ICIiLA0KPiAtCQkgKGZsYWdz ICYgUjEyOF9VUExPQURfU0VUVVApID8gInNldHVwLCAiIDogIiIsDQo+IC0JCSAoZmxhZ3Mg JiBSMTI4X1VQTE9BRF9URVgwKSA/ICJ0ZXgwLCAiIDogIiIsDQo+IC0JCSAoZmxhZ3MgJiBS MTI4X1VQTE9BRF9URVgxKSA/ICJ0ZXgxLCAiIDogIiIsDQo+IC0JCSAoZmxhZ3MgJiBSMTI4 X1VQTE9BRF9NQVNLUykgPyAibWFza3MsICIgOiAiIiwNCj4gLQkJIChmbGFncyAmIFIxMjhf VVBMT0FEX1dJTkRPVykgPyAid2luZG93LCAiIDogIiIsDQo+IC0JCSAoZmxhZ3MgJiBSMTI4 X1VQTE9BRF9DTElQUkVDVFMpID8gImNsaXByZWN0cywgIiA6ICIiLA0KPiAtCQkgKGZsYWdz ICYgUjEyOF9SRVFVSVJFX1FVSUVTQ0VOQ0UpID8gInF1aWVzY2VuY2UsICIgOiAiIik7DQo+ IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2NsZWFyKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJICAgIGRybV9yMTI4X2NsZWFyX3QgKmNsZWFy KQ0KPiAtew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOw0KPiAtCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+ c2FyZWFfcHJpdjsNCj4gLQlpbnQgbmJveCA9IHNhcmVhX3ByaXYtPm5ib3g7DQo+IC0Jc3Ry dWN0IGRybV9jbGlwX3JlY3QgKnBib3ggPSBzYXJlYV9wcml2LT5ib3hlczsNCj4gLQl1bnNp Z25lZCBpbnQgZmxhZ3MgPSBjbGVhci0+ZmxhZ3M7DQo+IC0JaW50IGk7DQo+IC0JUklOR19M T0NBTFM7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JaWYgKGRldl9wcml2LT5w YWdlX2ZsaXBwaW5nICYmIGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSkgew0KPiAtCQl1 bnNpZ25lZCBpbnQgdG1wID0gZmxhZ3M7DQo+IC0NCj4gLQkJZmxhZ3MgJj0gfihSMTI4X0ZS T05UIHwgUjEyOF9CQUNLKTsNCj4gLQkJaWYgKHRtcCAmIFIxMjhfRlJPTlQpDQo+IC0JCQlm bGFncyB8PSBSMTI4X0JBQ0s7DQo+IC0JCWlmICh0bXAgJiBSMTI4X0JBQ0spDQo+IC0JCQlm bGFncyB8PSBSMTI4X0ZST05UOw0KPiAtCX0NCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBu Ym94OyBpKyspIHsNCj4gLQkJaW50IHggPSBwYm94W2ldLngxOw0KPiAtCQlpbnQgeSA9IHBi b3hbaV0ueTE7DQo+IC0JCWludCB3ID0gcGJveFtpXS54MiAtIHg7DQo+IC0JCWludCBoID0g cGJveFtpXS55MiAtIHk7DQo+IC0NCj4gLQkJRFJNX0RFQlVHKCJkaXNwYXRjaCBjbGVhciAl ZCwlZC0lZCwlZCBmbGFncyAweCV4XG4iLA0KPiAtCQkJICBwYm94W2ldLngxLCBwYm94W2ld LnkxLCBwYm94W2ldLngyLA0KPiAtCQkJICBwYm94W2ldLnkyLCBmbGFncyk7DQo+IC0NCj4g LQkJaWYgKGZsYWdzICYgKFIxMjhfRlJPTlQgfCBSMTI4X0JBQ0spKSB7DQo+IC0JCQlCRUdJ Tl9SSU5HKDIpOw0KPiAtDQo+IC0JCQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0RQX1dS SVRFX01BU0ssIDApKTsNCj4gLQkJCU9VVF9SSU5HKGNsZWFyLT5jb2xvcl9tYXNrKTsNCj4g LQ0KPiAtCQkJQURWQU5DRV9SSU5HKCk7DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAoZmxhZ3Mg JiBSMTI4X0ZST05UKSB7DQo+IC0JCQlCRUdJTl9SSU5HKDYpOw0KPiAtDQo+IC0JCQlPVVRf UklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfUEFJTlRfTVVMVEksIDQpKTsNCj4gLQkJCU9V VF9SSU5HKFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8DQo+IC0JCQkJIFIxMjhf R01DX0JSVVNIX1NPTElEX0NPTE9SIHwNCj4gLQkJCQkgKGRldl9wcml2LT5jb2xvcl9mbXQg PDwgOCkgfA0KPiAtCQkJCSBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfA0KPiAtCQkJ CSBSMTI4X1JPUDNfUCB8DQo+IC0JCQkJIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfA0K PiAtCQkJCSBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMpOw0KPiAtDQo+IC0JCQlPVVRfUklORyhk ZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0X2MpOw0KPiAtCQkJT1VUX1JJTkcoY2xlYXIt PmNsZWFyX2NvbG9yKTsNCj4gLQ0KPiAtCQkJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7DQo+ IC0JCQlPVVRfUklORygodyA8PCAxNikgfCBoKTsNCj4gLQ0KPiAtCQkJQURWQU5DRV9SSU5H KCk7DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAoZmxhZ3MgJiBSMTI4X0JBQ0spIHsNCj4gLQkJ CUJFR0lOX1JJTkcoNik7DQo+IC0NCj4gLQkJCU9VVF9SSU5HKENDRV9QQUNLRVQzKFIxMjhf Q05UTF9QQUlOVF9NVUxUSSwgNCkpOw0KPiAtCQkJT1VUX1JJTkcoUjEyOF9HTUNfRFNUX1BJ VENIX09GRlNFVF9DTlRMIHwNCj4gLQkJCQkgUjEyOF9HTUNfQlJVU0hfU09MSURfQ09MT1Ig fA0KPiAtCQkJCSAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA8PCA4KSB8DQo+IC0JCQkJIFIxMjhf R01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8DQo+IC0JCQkJIFIxMjhfUk9QM19QIHwNCj4gLQkJ CQkgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8DQo+IC0JCQkJIFIxMjhfR01DX0FVWF9D TElQX0RJUyk7DQo+IC0NCj4gLQkJCU9VVF9SSU5HKGRldl9wcml2LT5iYWNrX3BpdGNoX29m ZnNldF9jKTsNCj4gLQkJCU9VVF9SSU5HKGNsZWFyLT5jbGVhcl9jb2xvcik7DQo+IC0NCj4g LQkJCU9VVF9SSU5HKCh4IDw8IDE2KSB8IHkpOw0KPiAtCQkJT1VUX1JJTkcoKHcgPDwgMTYp IHwgaCk7DQo+IC0NCj4gLQkJCUFEVkFOQ0VfUklORygpOw0KPiAtCQl9DQo+IC0NCj4gLQkJ aWYgKGZsYWdzICYgUjEyOF9ERVBUSCkgew0KPiAtCQkJQkVHSU5fUklORyg2KTsNCj4gLQ0K PiAtCQkJT1VUX1JJTkcoQ0NFX1BBQ0tFVDMoUjEyOF9DTlRMX1BBSU5UX01VTFRJLCA0KSk7 DQo+IC0JCQlPVVRfUklORyhSMTI4X0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfA0KPiAt CQkJCSBSMTI4X0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8DQo+IC0JCQkJIChkZXZfcHJpdi0+ ZGVwdGhfZm10IDw8IDgpIHwNCj4gLQkJCQkgUjEyOF9HTUNfU1JDX0RBVEFUWVBFX0NPTE9S IHwNCj4gLQkJCQkgUjEyOF9ST1AzX1AgfA0KPiAtCQkJCSBSMTI4X0dNQ19DTFJfQ01QX0NO VExfRElTIHwNCj4gLQkJCQkgUjEyOF9HTUNfQVVYX0NMSVBfRElTIHwgUjEyOF9HTUNfV1Jf TVNLX0RJUyk7DQo+IC0NCj4gLQkJCU9VVF9SSU5HKGRldl9wcml2LT5kZXB0aF9waXRjaF9v ZmZzZXRfYyk7DQo+IC0JCQlPVVRfUklORyhjbGVhci0+Y2xlYXJfZGVwdGgpOw0KPiAtDQo+ IC0JCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsNCj4gLQkJCU9VVF9SSU5HKCh3IDw8IDE2 KSB8IGgpOw0KPiAtDQo+IC0JCQlBRFZBTkNFX1JJTkcoKTsNCj4gLQkJfQ0KPiAtCX0NCj4g LX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfc3dhcChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3By aXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsNCj4gLQlpbnQgbmJveCA9IHNhcmVhX3ByaXYt Pm5ib3g7DQo+IC0Jc3RydWN0IGRybV9jbGlwX3JlY3QgKnBib3ggPSBzYXJlYV9wcml2LT5i b3hlczsNCj4gLQlpbnQgaTsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQlEUk1fREVCVUcoIlxu Iik7DQo+IC0NCj4gLSNpZiBSMTI4X1BFUkZPUk1BTkNFX0JPWEVTDQo+IC0JLyogRG8gc29t ZSB0cml2aWFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuLi4NCj4gLQkgKi8NCj4gLQlyMTI4 X2NjZV9wZXJmb3JtYW5jZV9ib3hlcyhkZXZfcHJpdik7DQo+IC0jZW5kaWYNCj4gLQ0KPiAt CWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsNCj4gLQkJaW50IHggPSBwYm94W2ldLngx Ow0KPiAtCQlpbnQgeSA9IHBib3hbaV0ueTE7DQo+IC0JCWludCB3ID0gcGJveFtpXS54MiAt IHg7DQo+IC0JCWludCBoID0gcGJveFtpXS55MiAtIHk7DQo+IC0NCj4gLQkJQkVHSU5fUklO Ryg3KTsNCj4gLQ0KPiAtCQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfQklUQkxU X01VTFRJLCA1KSk7DQo+IC0JCU9VVF9SSU5HKFIxMjhfR01DX1NSQ19QSVRDSF9PRkZTRVRf Q05UTCB8DQo+IC0JCQkgUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwNCj4gLQkJ CSBSMTI4X0dNQ19CUlVTSF9OT05FIHwNCj4gLQkJCSAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA8 PCA4KSB8DQo+IC0JCQkgUjEyOF9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwNCj4gLQkJCSBS MTI4X1JPUDNfUyB8DQo+IC0JCQkgUjEyOF9EUF9TUkNfU09VUkNFX01FTU9SWSB8DQo+IC0J CQkgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8DQo+IC0JCQkgUjEyOF9HTUNfQVVYX0NM SVBfRElTIHwgUjEyOF9HTUNfV1JfTVNLX0RJUyk7DQo+IC0NCj4gLQkJLyogTWFrZSB0aGlz IHdvcmsgZXZlbiBpZiBmcm9udCAmIGJhY2sgYXJlIGZsaXBwZWQ6DQo+IC0JCSAqLw0KPiAt CQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwKSB7DQo+IC0JCQlPVVRfUklORyhk ZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXRfYyk7DQo+IC0JCQlPVVRfUklORyhkZXZfcHJp di0+ZnJvbnRfcGl0Y2hfb2Zmc2V0X2MpOw0KPiAtCQl9IGVsc2Ugew0KPiAtCQkJT1VUX1JJ TkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldF9jKTsNCj4gLQkJCU9VVF9SSU5HKGRl dl9wcml2LT5iYWNrX3BpdGNoX29mZnNldF9jKTsNCj4gLQkJfQ0KPiAtDQo+IC0JCU9VVF9S SU5HKCh4IDw8IDE2KSB8IHkpOw0KPiAtCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsNCj4g LQkJT1VUX1JJTkcoKHcgPDwgMTYpIHwgaCk7DQo+IC0NCj4gLQkJQURWQU5DRV9SSU5HKCk7 DQo+IC0JfQ0KPiAtDQo+IC0JLyogSW5jcmVtZW50IHRoZSBmcmFtZSBjb3VudGVyLiAgVGhl IGNsaWVudC1zaWRlIDNEIGRyaXZlciBtdXN0DQo+IC0JICogdGhyb3R0bGUgdGhlIGZyYW1l cmF0ZSBieSB3YWl0aW5nIGZvciB0aGlzIHZhbHVlIGJlZm9yZQ0KPiAtCSAqIHBlcmZvcm1p bmcgdGhlIHN3YXBidWZmZXIgaW9jdGwuDQo+IC0JICovDQo+IC0JZGV2X3ByaXYtPnNhcmVh X3ByaXYtPmxhc3RfZnJhbWUrKzsNCj4gLQ0KPiAtCUJFR0lOX1JJTkcoMik7DQo+IC0NCj4g LQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0xBU1RfRlJBTUVfUkVHLCAwKSk7DQo+IC0J T1VUX1JJTkcoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOw0KPiAtDQo+IC0J QURWQU5DRV9SSU5HKCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rp c3BhdGNoX2ZsaXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlkcm1fcjEy OF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlSSU5HX0xP Q0FMUzsNCj4gLQlEUk1fREVCVUcoInBhZ2U9JWQgcGZDdXJyZW50UGFnZT0lZFxuIiwNCj4g LQkJICBkZXZfcHJpdi0+Y3VycmVudF9wYWdlLCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZD dXJyZW50UGFnZSk7DQo+IC0NCj4gLSNpZiBSMTI4X1BFUkZPUk1BTkNFX0JPWEVTDQo+IC0J LyogRG8gc29tZSB0cml2aWFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuLi4NCj4gLQkgKi8N Cj4gLQlyMTI4X2NjZV9wZXJmb3JtYW5jZV9ib3hlcyhkZXZfcHJpdik7DQo+IC0jZW5kaWYN Cj4gLQ0KPiAtCUJFR0lOX1JJTkcoNCk7DQo+IC0NCj4gLQlSMTI4X1dBSVRfVU5USUxfUEFH RV9GTElQUEVEKCk7DQo+IC0JT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9DUlRDX09GRlNF VCwgMCkpOw0KPiAtDQo+IC0JaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkNCj4g LQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsNCj4gLQllbHNlDQo+IC0JCU9V VF9SSU5HKGRldl9wcml2LT5mcm9udF9vZmZzZXQpOw0KPiAtDQo+IC0JQURWQU5DRV9SSU5H KCk7DQo+IC0NCj4gLQkvKiBJbmNyZW1lbnQgdGhlIGZyYW1lIGNvdW50ZXIuICBUaGUgY2xp ZW50LXNpZGUgM0QgZHJpdmVyIG11c3QNCj4gLQkgKiB0aHJvdHRsZSB0aGUgZnJhbWVyYXRl IGJ5IHdhaXRpbmcgZm9yIHRoaXMgdmFsdWUgYmVmb3JlDQo+IC0JICogcGVyZm9ybWluZyB0 aGUgc3dhcGJ1ZmZlciBpb2N0bC4NCj4gLQkgKi8NCj4gLQlkZXZfcHJpdi0+c2FyZWFfcHJp di0+bGFzdF9mcmFtZSsrOw0KPiAtCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQ YWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9DQo+IC0JICAgIDEgLSBkZXZfcHJpdi0+ Y3VycmVudF9wYWdlOw0KPiAtDQo+IC0JQkVHSU5fUklORygyKTsNCj4gLQ0KPiAtCU9VVF9S SU5HKENDRV9QQUNLRVQwKFIxMjhfTEFTVF9GUkFNRV9SRUcsIDApKTsNCj4gLQlPVVRfUklO RyhkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSk7DQo+IC0NCj4gLQlBRFZBTkNF X1JJTkcoKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hf dmVydGV4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYnVmICpidWYpDQo+ IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7DQo+IC0JZHJtX3IxMjhfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2 YXRlOw0KPiAtCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2Fy ZWFfcHJpdjsNCj4gLQlpbnQgZm9ybWF0ID0gc2FyZWFfcHJpdi0+dmNfZm9ybWF0Ow0KPiAt CWludCBvZmZzZXQgPSBidWYtPmJ1c19hZGRyZXNzOw0KPiAtCWludCBzaXplID0gYnVmLT51 c2VkOw0KPiAtCWludCBwcmltID0gYnVmX3ByaXYtPnByaW07DQo+IC0JaW50IGkgPSAwOw0K PiAtCVJJTkdfTE9DQUxTOw0KPiAtCURSTV9ERUJVRygiYnVmPSVkIG5ib3g9JWRcbiIsIGJ1 Zi0+aWR4LCBzYXJlYV9wcml2LT5uYm94KTsNCj4gLQ0KPiAtCWlmICgwKQ0KPiAtCQlyMTI4 X3ByaW50X2RpcnR5KCJkaXNwYXRjaF92ZXJ0ZXgiLCBzYXJlYV9wcml2LT5kaXJ0eSk7DQo+ IC0NCj4gLQlpZiAoYnVmLT51c2VkKSB7DQo+IC0JCWJ1Zl9wcml2LT5kaXNwYXRjaGVkID0g MTsNCj4gLQ0KPiAtCQlpZiAoc2FyZWFfcHJpdi0+ZGlydHkgJiB+UjEyOF9VUExPQURfQ0xJ UFJFQ1RTKQ0KPiAtCQkJcjEyOF9lbWl0X3N0YXRlKGRldl9wcml2KTsNCj4gLQ0KPiAtCQlk byB7DQo+IC0JCQkvKiBFbWl0IHRoZSBuZXh0IHNldCBvZiB1cCB0byB0aHJlZSBjbGlwcmVj dHMgKi8NCj4gLQkJCWlmIChpIDwgc2FyZWFfcHJpdi0+bmJveCkgew0KPiAtCQkJCXIxMjhf ZW1pdF9jbGlwX3JlY3RzKGRldl9wcml2LA0KPiAtCQkJCQkJICAgICAmc2FyZWFfcHJpdi0+ Ym94ZXNbaV0sDQo+IC0JCQkJCQkgICAgIHNhcmVhX3ByaXYtPm5ib3ggLSBpKTsNCj4gLQkJ CX0NCj4gLQ0KPiAtCQkJLyogRW1pdCB0aGUgdmVydGV4IGJ1ZmZlciByZW5kZXJpbmcgY29t bWFuZHMgKi8NCj4gLQkJCUJFR0lOX1JJTkcoNSk7DQo+IC0NCj4gLQkJCU9VVF9SSU5HKEND RV9QQUNLRVQzKFIxMjhfM0RfUk5EUl9HRU5fSU5EWF9QUklNLCAzKSk7DQo+IC0JCQlPVVRf UklORyhvZmZzZXQpOw0KPiAtCQkJT1VUX1JJTkcoc2l6ZSk7DQo+IC0JCQlPVVRfUklORyhm b3JtYXQpOw0KPiAtCQkJT1VUX1JJTkcocHJpbSB8IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9X QUxLX0xJU1QgfA0KPiAtCQkJCSAoc2l6ZSA8PCBSMTI4X0NDRV9WQ19DTlRMX05VTV9TSElG VCkpOw0KPiAtDQo+IC0JCQlBRFZBTkNFX1JJTkcoKTsNCj4gLQ0KPiAtCQkJaSArPSAzOw0K PiAtCQl9IHdoaWxlIChpIDwgc2FyZWFfcHJpdi0+bmJveCk7DQo+IC0JfQ0KPiAtDQo+IC0J aWYgKGJ1Zl9wcml2LT5kaXNjYXJkKSB7DQo+IC0JCWJ1Zl9wcml2LT5hZ2UgPSBkZXZfcHJp di0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaDsNCj4gLQ0KPiAtCQkvKiBFbWl0IHRoZSB2 ZXJ0ZXggYnVmZmVyIGFnZSAqLw0KPiAtCQlCRUdJTl9SSU5HKDIpOw0KPiAtDQo+IC0JCU9V VF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfTEFTVF9ESVNQQVRDSF9SRUcsIDApKTsNCj4gLQkJ T1VUX1JJTkcoYnVmX3ByaXYtPmFnZSk7DQo+IC0NCj4gLQkJQURWQU5DRV9SSU5HKCk7DQo+ IC0NCj4gLQkJYnVmLT5wZW5kaW5nID0gMTsNCj4gLQkJYnVmLT51c2VkID0gMDsNCj4gLQkJ LyogRklYTUU6IENoZWNrIGRpc3BhdGNoZWQgZmllbGQgKi8NCj4gLQkJYnVmX3ByaXYtPmRp c3BhdGNoZWQgPSAwOw0KPiAtCX0NCj4gLQ0KPiAtCWRldl9wcml2LT5zYXJlYV9wcml2LT5s YXN0X2Rpc3BhdGNoKys7DQo+IC0NCj4gLQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+UjEyOF9V UExPQURfQ0xJUFJFQ1RTOw0KPiAtCXNhcmVhX3ByaXYtPm5ib3ggPSAwOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVjdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LA0KPiAtCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQg c3RhcnQsIGludCBlbmQpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3IxMjhfYnVmX3ByaXZfdCAqYnVmX3By aXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtCVJJTkdfTE9DQUxTOw0KPiAtCURSTV9ERUJV RygiaW5kaXJlY3Q6IGJ1Zj0lZCBzPTB4JXggZT0weCV4XG4iLCBidWYtPmlkeCwgc3RhcnQs IGVuZCk7DQo+IC0NCj4gLQlpZiAoc3RhcnQgIT0gZW5kKSB7DQo+IC0JCWludCBvZmZzZXQg PSBidWYtPmJ1c19hZGRyZXNzICsgc3RhcnQ7DQo+IC0JCWludCBkd29yZHMgPSAoZW5kIC0g c3RhcnQgKyAzKSAvIHNpemVvZih1MzIpOw0KPiAtDQo+IC0JCS8qIEluZGlyZWN0IGJ1ZmZl ciBkYXRhIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YNCj4gLQkJICogZHdvcmRzLCBzbyBp ZiB3ZSd2ZSBiZWVuIGdpdmVuIGFuIG9kZCBudW1iZXIgd2UgbXVzdA0KPiAtCQkgKiBwYWQg dGhlIGRhdGEgd2l0aCBhIFR5cGUtMiBDQ0UgcGFja2V0Lg0KPiAtCQkgKi8NCj4gLQkJaWYg KGR3b3JkcyAmIDEpIHsNCj4gLQkJCXUzMiAqZGF0YSA9ICh1MzIgKikNCj4gLQkJCSAgICAo KGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUNCj4gLQkJCSAgICAgKyBidWYt Pm9mZnNldCArIHN0YXJ0KTsNCj4gLQkJCWRhdGFbZHdvcmRzKytdID0gY3B1X3RvX2xlMzIo UjEyOF9DQ0VfUEFDS0VUMik7DQo+IC0JCX0NCj4gLQ0KPiAtCQlidWZfcHJpdi0+ZGlzcGF0 Y2hlZCA9IDE7DQo+IC0NCj4gLQkJLyogRmlyZSBvZmYgdGhlIGluZGlyZWN0IGJ1ZmZlciAq Lw0KPiAtCQlCRUdJTl9SSU5HKDMpOw0KPiAtDQo+IC0JCU9VVF9SSU5HKENDRV9QQUNLRVQw KFIxMjhfUE00X0lXX0lORE9GRiwgMSkpOw0KPiAtCQlPVVRfUklORyhvZmZzZXQpOw0KPiAt CQlPVVRfUklORyhkd29yZHMpOw0KPiAtDQo+IC0JCUFEVkFOQ0VfUklORygpOw0KPiAtCX0N Cj4gLQ0KPiAtCWlmIChidWZfcHJpdi0+ZGlzY2FyZCkgew0KPiAtCQlidWZfcHJpdi0+YWdl ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2g7DQo+IC0NCj4gLQkJLyog RW1pdCB0aGUgaW5kaXJlY3QgYnVmZmVyIGFnZSAqLw0KPiAtCQlCRUdJTl9SSU5HKDIpOw0K PiAtDQo+IC0JCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfTEFTVF9ESVNQQVRDSF9SRUcs IDApKTsNCj4gLQkJT1VUX1JJTkcoYnVmX3ByaXYtPmFnZSk7DQo+IC0NCj4gLQkJQURWQU5D RV9SSU5HKCk7DQo+IC0NCj4gLQkJYnVmLT5wZW5kaW5nID0gMTsNCj4gLQkJYnVmLT51c2Vk ID0gMDsNCj4gLQkJLyogRklYTUU6IENoZWNrIGRpc3BhdGNoZWQgZmllbGQgKi8NCj4gLQkJ YnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAwOw0KPiAtCX0NCj4gLQ0KPiAtCWRldl9wcml2LT5z YXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoKys7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lk IHIxMjhfY2NlX2Rpc3BhdGNoX2luZGljZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4g LQkJCQkgICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLA0KPiAtCQkJCSAgICAgIGludCBzdGFy dCwgaW50IGVuZCwgaW50IGNvdW50KQ0KPiAtew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9yMTI4X2J1Zl9wcml2X3Qg KmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsNCj4gLQlkcm1fcjEyOF9zYXJlYV90ICpz YXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7DQo+IC0JaW50IGZvcm1hdCA9IHNh cmVhX3ByaXYtPnZjX2Zvcm1hdDsNCj4gLQlpbnQgb2Zmc2V0ID0gZGV2LT5hZ3BfYnVmZmVy X21hcC0+b2Zmc2V0IC0gZGV2X3ByaXYtPmNjZV9idWZmZXJzX29mZnNldDsNCj4gLQlpbnQg cHJpbSA9IGJ1Zl9wcml2LT5wcmltOw0KPiAtCXUzMiAqZGF0YTsNCj4gLQlpbnQgZHdvcmRz Ow0KPiAtCWludCBpID0gMDsNCj4gLQlSSU5HX0xPQ0FMUzsNCj4gLQlEUk1fREVCVUcoImlu ZGljZXM6IHM9JWQgZT0lZCBjPSVkXG4iLCBzdGFydCwgZW5kLCBjb3VudCk7DQo+IC0NCj4g LQlpZiAoMCkNCj4gLQkJcjEyOF9wcmludF9kaXJ0eSgiZGlzcGF0Y2hfaW5kaWNlcyIsIHNh cmVhX3ByaXYtPmRpcnR5KTsNCj4gLQ0KPiAtCWlmIChzdGFydCAhPSBlbmQpIHsNCj4gLQkJ YnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAxOw0KPiAtDQo+IC0JCWlmIChzYXJlYV9wcml2LT5k aXJ0eSAmIH5SMTI4X1VQTE9BRF9DTElQUkVDVFMpDQo+IC0JCQlyMTI4X2VtaXRfc3RhdGUo ZGV2X3ByaXYpOw0KPiAtDQo+IC0JCWR3b3JkcyA9IChlbmQgLSBzdGFydCArIDMpIC8gc2l6 ZW9mKHUzMik7DQo+IC0NCj4gLQkJZGF0YSA9ICh1MzIgKikgKChjaGFyICopZGV2LT5hZ3Bf YnVmZmVyX21hcC0+aGFuZGxlDQo+IC0JCQkJKyBidWYtPm9mZnNldCArIHN0YXJ0KTsNCj4g LQ0KPiAtCQlkYXRhWzBdID0gY3B1X3RvX2xlMzIoQ0NFX1BBQ0tFVDMoUjEyOF8zRF9STkRS X0dFTl9JTkRYX1BSSU0sDQo+IC0JCQkJCQkgIGR3b3JkcyAtIDIpKTsNCj4gLQ0KPiAtCQlk YXRhWzFdID0gY3B1X3RvX2xlMzIob2Zmc2V0KTsNCj4gLQkJZGF0YVsyXSA9IGNwdV90b19s ZTMyKFIxMjhfTUFYX1ZCX1ZFUlRTKTsNCj4gLQkJZGF0YVszXSA9IGNwdV90b19sZTMyKGZv cm1hdCk7DQo+IC0JCWRhdGFbNF0gPSBjcHVfdG9fbGUzMigocHJpbSB8IFIxMjhfQ0NFX1ZD X0NOVExfUFJJTV9XQUxLX0lORCB8DQo+IC0JCQkJICAgICAgIChjb3VudCA8PCAxNikpKTsN Cj4gLQ0KPiAtCQlpZiAoY291bnQgJiAweDEpIHsNCj4gLSNpZmRlZiBfX0xJVFRMRV9FTkRJ QU4NCj4gLQkJCWRhdGFbZHdvcmRzIC0gMV0gJj0gMHgwMDAwZmZmZjsNCj4gLSNlbHNlDQo+ IC0JCQlkYXRhW2R3b3JkcyAtIDFdICY9IDB4ZmZmZjAwMDA7DQo+IC0jZW5kaWYNCj4gLQkJ fQ0KPiAtDQo+IC0JCWRvIHsNCj4gLQkJCS8qIEVtaXQgdGhlIG5leHQgc2V0IG9mIHVwIHRv IHRocmVlIGNsaXByZWN0cyAqLw0KPiAtCQkJaWYgKGkgPCBzYXJlYV9wcml2LT5uYm94KSB7 DQo+IC0JCQkJcjEyOF9lbWl0X2NsaXBfcmVjdHMoZGV2X3ByaXYsDQo+IC0JCQkJCQkgICAg ICZzYXJlYV9wcml2LT5ib3hlc1tpXSwNCj4gLQkJCQkJCSAgICAgc2FyZWFfcHJpdi0+bmJv eCAtIGkpOw0KPiAtCQkJfQ0KPiAtDQo+IC0JCQlyMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVj dChkZXYsIGJ1Ziwgc3RhcnQsIGVuZCk7DQo+IC0NCj4gLQkJCWkgKz0gMzsNCj4gLQkJfSB3 aGlsZSAoaSA8IHNhcmVhX3ByaXYtPm5ib3gpOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChidWZf cHJpdi0+ZGlzY2FyZCkgew0KPiAtCQlidWZfcHJpdi0+YWdlID0gZGV2X3ByaXYtPnNhcmVh X3ByaXYtPmxhc3RfZGlzcGF0Y2g7DQo+IC0NCj4gLQkJLyogRW1pdCB0aGUgdmVydGV4IGJ1 ZmZlciBhZ2UgKi8NCj4gLQkJQkVHSU5fUklORygyKTsNCj4gLQ0KPiAtCQlPVVRfUklORyhD Q0VfUEFDS0VUMChSMTI4X0xBU1RfRElTUEFUQ0hfUkVHLCAwKSk7DQo+IC0JCU9VVF9SSU5H KGJ1Zl9wcml2LT5hZ2UpOw0KPiAtDQo+IC0JCUFEVkFOQ0VfUklORygpOw0KPiAtDQo+IC0J CWJ1Zi0+cGVuZGluZyA9IDE7DQo+IC0JCS8qIEZJWE1FOiBDaGVjayBkaXNwYXRjaGVkIGZp ZWxkICovDQo+IC0JCWJ1Zl9wcml2LT5kaXNwYXRjaGVkID0gMDsNCj4gLQl9DQo+IC0NCj4g LQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCsrOw0KPiAtDQo+IC0Jc2Fy ZWFfcHJpdi0+ZGlydHkgJj0gflIxMjhfVVBMT0FEX0NMSVBSRUNUUzsNCj4gLQlzYXJlYV9w cml2LT5uYm94ID0gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCByMTI4X2NjZV9kaXNw YXRjaF9ibGl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJICBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwNCj4gLQkJCQkgIGRybV9yMTI4X2JsaXRfdCAqYmxpdCkNCj4g LXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsNCj4gLQlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOw0KPiAtCXN0 cnVjdCBkcm1fYnVmICpidWY7DQo+IC0JZHJtX3IxMjhfYnVmX3ByaXZfdCAqYnVmX3ByaXY7 DQo+IC0JdTMyICpkYXRhOw0KPiAtCWludCBkd29yZF9zaGlmdCwgZHdvcmRzOw0KPiAtCVJJ TkdfTE9DQUxTOw0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCS8qIFRoZSBjb21w aWxlciB3b24ndCBvcHRpbWl6ZSBhd2F5IGEgZGl2aXNpb24gYnkgYSB2YXJpYWJsZSwNCj4g LQkgKiBldmVuIGlmIHRoZSBvbmx5IGxlZ2FsIHZhbHVlcyBhcmUgcG93ZXJzIG9mIHR3by4g IFRodXMsIHdlJ2xsDQo+IC0JICogdXNlIGEgc2hpZnQgaW5zdGVhZC4NCj4gLQkgKi8NCj4g LQlzd2l0Y2ggKGJsaXQtPmZvcm1hdCkgew0KPiAtCWNhc2UgUjEyOF9EQVRBVFlQRV9BUkdC ODg4ODoNCj4gLQkJZHdvcmRfc2hpZnQgPSAwOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIFIx MjhfREFUQVRZUEVfQVJHQjE1NTU6DQo+IC0JY2FzZSBSMTI4X0RBVEFUWVBFX1JHQjU2NToN Cj4gLQljYXNlIFIxMjhfREFUQVRZUEVfQVJHQjQ0NDQ6DQo+IC0JY2FzZSBSMTI4X0RBVEFU WVBFX1lWWVU0MjI6DQo+IC0JY2FzZSBSMTI4X0RBVEFUWVBFX1ZZVVk0MjI6DQo+IC0JCWR3 b3JkX3NoaWZ0ID0gMTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBSMTI4X0RBVEFUWVBFX0NJ ODoNCj4gLQljYXNlIFIxMjhfREFUQVRZUEVfUkdCODoNCj4gLQkJZHdvcmRfc2hpZnQgPSAy Ow0KPiAtCQlicmVhazsNCj4gLQlkZWZhdWx0Og0KPiAtCQlEUk1fRVJST1IoImludmFsaWQg YmxpdCBmb3JtYXQgJWRcbiIsIGJsaXQtPmZvcm1hdCk7DQo+IC0JCXJldHVybiAtRUlOVkFM Ow0KPiAtCX0NCj4gLQ0KPiAtCS8qIEZsdXNoIHRoZSBwaXhlbCBjYWNoZSwgYW5kIG1hcmsg dGhlIGNvbnRlbnRzIGFzIFJlYWQgSW52YWxpZC4NCj4gLQkgKiBUaGlzIGVuc3VyZXMgbm8g cGl4ZWwgZGF0YSBnZXRzIG1peGVkIHVwIHdpdGggdGhlIHRleHR1cmUNCj4gLQkgKiBkYXRh IGZyb20gdGhlIGhvc3QgZGF0YSBibGl0LCBvdGhlcndpc2UgcGFydCBvZiB0aGUgdGV4dHVy ZQ0KPiAtCSAqIGltYWdlIG1heSBiZSBjb3JydXB0ZWQuDQo+IC0JICovDQo+IC0JQkVHSU5f UklORygyKTsNCj4gLQ0KPiAtCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfUENfR1VJX0NU TFNUQVQsIDApKTsNCj4gLQlPVVRfUklORyhSMTI4X1BDX1JJX0dVSSB8IFIxMjhfUENfRkxV U0hfR1VJKTsNCj4gLQ0KPiAtCUFEVkFOQ0VfUklORygpOw0KPiAtDQo+IC0JLyogRGlzcGF0 Y2ggdGhlIGluZGlyZWN0IGJ1ZmZlci4NCj4gLQkgKi8NCj4gLQlidWYgPSBkbWEtPmJ1Zmxp c3RbYmxpdC0+aWR4XTsNCj4gLQlidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0N Cj4gLQlpZiAoYnVmLT5maWxlX3ByaXYgIT0gZmlsZV9wcml2KSB7DQo+IC0JCURSTV9FUlJP UigicHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsDQo+IC0JCQkgIHRh c2tfcGlkX25yKGN1cnJlbnQpLCBidWYtPmZpbGVfcHJpdik7DQo+IC0JCXJldHVybiAtRUlO VkFMOw0KPiAtCX0NCj4gLQlpZiAoYnVmLT5wZW5kaW5nKSB7DQo+IC0JCURSTV9FUlJPUigi c2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgYmxpdC0+aWR4KTsNCj4gLQkJcmV0dXJu IC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JYnVmX3ByaXYtPmRpc2NhcmQgPSAxOw0KPiAt DQo+IC0JZHdvcmRzID0gKGJsaXQtPndpZHRoICogYmxpdC0+aGVpZ2h0KSA+PiBkd29yZF9z aGlmdDsNCj4gLQ0KPiAtCWRhdGEgPSAodTMyICopICgoY2hhciAqKWRldi0+YWdwX2J1ZmZl cl9tYXAtPmhhbmRsZSArIGJ1Zi0+b2Zmc2V0KTsNCj4gLQ0KPiAtCWRhdGFbMF0gPSBjcHVf dG9fbGUzMihDQ0VfUEFDS0VUMyhSMTI4X0NOVExfSE9TVERBVEFfQkxULCBkd29yZHMgKyA2 KSk7DQo+IC0JZGF0YVsxXSA9IGNwdV90b19sZTMyKChSMTI4X0dNQ19EU1RfUElUQ0hfT0ZG U0VUX0NOVEwgfA0KPiAtCQkJICAgICAgIFIxMjhfR01DX0JSVVNIX05PTkUgfA0KPiAtCQkJ ICAgICAgIChibGl0LT5mb3JtYXQgPDwgOCkgfA0KPiAtCQkJICAgICAgIFIxMjhfR01DX1NS Q19EQVRBVFlQRV9DT0xPUiB8DQo+IC0JCQkgICAgICAgUjEyOF9ST1AzX1MgfA0KPiAtCQkJ ICAgICAgIFIxMjhfRFBfU1JDX1NPVVJDRV9IT1NUX0RBVEEgfA0KPiAtCQkJICAgICAgIFIx MjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfA0KPiAtCQkJICAgICAgIFIxMjhfR01DX0FVWF9D TElQX0RJUyB8IFIxMjhfR01DX1dSX01TS19ESVMpKTsNCj4gLQ0KPiAtCWRhdGFbMl0gPSBj cHVfdG9fbGUzMigoYmxpdC0+cGl0Y2ggPDwgMjEpIHwgKGJsaXQtPm9mZnNldCA+PiA1KSk7 DQo+IC0JZGF0YVszXSA9IGNwdV90b19sZTMyKDB4ZmZmZmZmZmYpOw0KPiAtCWRhdGFbNF0g PSBjcHVfdG9fbGUzMigweGZmZmZmZmZmKTsNCj4gLQlkYXRhWzVdID0gY3B1X3RvX2xlMzIo KGJsaXQtPnkgPDwgMTYpIHwgYmxpdC0+eCk7DQo+IC0JZGF0YVs2XSA9IGNwdV90b19sZTMy KChibGl0LT5oZWlnaHQgPDwgMTYpIHwgYmxpdC0+d2lkdGgpOw0KPiAtCWRhdGFbN10gPSBj cHVfdG9fbGUzMihkd29yZHMpOw0KPiAtDQo+IC0JYnVmLT51c2VkID0gKGR3b3JkcyArIDgp ICogc2l6ZW9mKHUzMik7DQo+IC0NCj4gLQlyMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVjdChk ZXYsIGJ1ZiwgMCwgYnVmLT51c2VkKTsNCj4gLQ0KPiAtCS8qIEZsdXNoIHRoZSBwaXhlbCBj YWNoZSBhZnRlciB0aGUgYmxpdCBjb21wbGV0ZXMuICBUaGlzIGVuc3VyZXMNCj4gLQkgKiB0 aGUgdGV4dHVyZSBkYXRhIGlzIHdyaXR0ZW4gb3V0IHRvIG1lbW9yeSBiZWZvcmUgcmVuZGVy aW5nDQo+IC0JICogY29udGludWVzLg0KPiAtCSAqLw0KPiAtCUJFR0lOX1JJTkcoMik7DQo+ IC0NCj4gLQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1BDX0dVSV9DVExTVEFULCAwKSk7 DQo+IC0JT1VUX1JJTkcoUjEyOF9QQ19GTFVTSF9HVUkpOw0KPiAtDQo+IC0JQURWQU5DRV9S SU5HKCk7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiAtICogVGlsZWQgZGVwdGggYnVmZmVyIG1hbmFnZW1lbnQNCj4gLSAqDQo+IC0gKiBG SVhNRTogVGhlc2Ugc2hvdWxkIGFsbCBzZXQgdGhlIGRlc3RpbmF0aW9uIHdyaXRlIG1hc2sg Zm9yIHdoZW4gd2UNCj4gLSAqIGhhdmUgaGFyZHdhcmUgc3RlbmNpbCBzdXBwb3J0Lg0KPiAt ICovDQo+IC0NCj4gLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfd3JpdGVfc3Bhbihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAtCQkJCQlkcm1fcjEyOF9kZXB0aF90ICpkZXB0 aCkNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsNCj4gLQlpbnQgY291bnQsIHgsIHk7DQo+IC0JdTMyICpidWZmZXI7DQo+IC0J dTggKm1hc2s7DQo+IC0JaW50IGksIGJ1ZmZlcl9zaXplLCBtYXNrX3NpemU7DQo+IC0JUklO R19MT0NBTFM7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JY291bnQgPSBkZXB0 aC0+bjsNCj4gLQlpZiAoY291bnQgPiA0MDk2IHx8IGNvdW50IDw9IDApDQo+IC0JCXJldHVy biAtRU1TR1NJWkU7DQo+IC0NCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJngsIGRlcHRoLT54 LCBzaXplb2YoeCkpKQ0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQlpZiAoY29weV9mcm9t X3VzZXIoJnksIGRlcHRoLT55LCBzaXplb2YoeSkpKQ0KPiAtCQlyZXR1cm4gLUVGQVVMVDsN Cj4gLQ0KPiAtCWJ1ZmZlcl9zaXplID0gZGVwdGgtPm4gKiBzaXplb2YodTMyKTsNCj4gLQli dWZmZXIgPSBtZW1kdXBfdXNlcihkZXB0aC0+YnVmZmVyLCBidWZmZXJfc2l6ZSk7DQo+IC0J aWYgKElTX0VSUihidWZmZXIpKQ0KPiAtCQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOw0KPiAt DQo+IC0JbWFza19zaXplID0gZGVwdGgtPm47DQo+IC0JaWYgKGRlcHRoLT5tYXNrKSB7DQo+ IC0JCW1hc2sgPSBtZW1kdXBfdXNlcihkZXB0aC0+bWFzaywgbWFza19zaXplKTsNCj4gLQkJ aWYgKElTX0VSUihtYXNrKSkgew0KPiAtCQkJa2ZyZWUoYnVmZmVyKTsNCj4gLQkJCXJldHVy biBQVFJfRVJSKG1hc2spOw0KPiAtCQl9DQo+IC0NCj4gLQkJZm9yIChpID0gMDsgaSA8IGNv dW50OyBpKyssIHgrKykgew0KPiAtCQkJaWYgKG1hc2tbaV0pIHsNCj4gLQkJCQlCRUdJTl9S SU5HKDYpOw0KPiAtDQo+IC0JCQkJT1VUX1JJTkcoQ0NFX1BBQ0tFVDMoUjEyOF9DTlRMX1BB SU5UX01VTFRJLCA0KSk7DQo+IC0JCQkJT1VUX1JJTkcoUjEyOF9HTUNfRFNUX1BJVENIX09G RlNFVF9DTlRMIHwNCj4gLQkJCQkJIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwNCj4g LQkJCQkJIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwNCj4gLQkJCQkJIFIxMjhfR01D X1NSQ19EQVRBVFlQRV9DT0xPUiB8DQo+IC0JCQkJCSBSMTI4X1JPUDNfUCB8DQo+IC0JCQkJ CSBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwNCj4gLQkJCQkJIFIxMjhfR01DX1dSX01T S19ESVMpOw0KPiAtDQo+IC0JCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29m ZnNldF9jKTsNCj4gLQkJCQlPVVRfUklORyhidWZmZXJbaV0pOw0KPiAtDQo+IC0JCQkJT1VU X1JJTkcoKHggPDwgMTYpIHwgeSk7DQo+IC0JCQkJT1VUX1JJTkcoKDEgPDwgMTYpIHwgMSk7 DQo+IC0NCj4gLQkJCQlBRFZBTkNFX1JJTkcoKTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiAtDQo+ IC0JCWtmcmVlKG1hc2spOw0KPiAtCX0gZWxzZSB7DQo+IC0JCWZvciAoaSA9IDA7IGkgPCBj b3VudDsgaSsrLCB4KyspIHsNCj4gLQkJCUJFR0lOX1JJTkcoNik7DQo+IC0NCj4gLQkJCU9V VF9SSU5HKENDRV9QQUNLRVQzKFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCkpOw0KPiAtCQkJ T1VUX1JJTkcoUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwNCj4gLQkJCQkgUjEy OF9HTUNfQlJVU0hfU09MSURfQ09MT1IgfA0KPiAtCQkJCSAoZGV2X3ByaXYtPmRlcHRoX2Zt dCA8PCA4KSB8DQo+IC0JCQkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8DQo+IC0J CQkJIFIxMjhfUk9QM19QIHwNCj4gLQkJCQkgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8 DQo+IC0JCQkJIFIxMjhfR01DX1dSX01TS19ESVMpOw0KPiAtDQo+IC0JCQlPVVRfUklORyhk ZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MpOw0KPiAtCQkJT1VUX1JJTkcoYnVmZmVy W2ldKTsNCj4gLQ0KPiAtCQkJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7DQo+IC0JCQlPVVRf UklORygoMSA8PCAxNikgfCAxKTsNCj4gLQ0KPiAtCQkJQURWQU5DRV9SSU5HKCk7DQo+IC0J CX0NCj4gLQl9DQo+IC0NCj4gLQlrZnJlZShidWZmZXIpOw0KPiAtDQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfd3JpdGVfcGl4 ZWxzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJCSAgZHJtX3IxMjhfZGVwdGhf dCAqZGVwdGgpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7DQo+IC0JaW50IGNvdW50LCAqeCwgKnk7DQo+IC0JdTMyICpidWZm ZXI7DQo+IC0JdTggKm1hc2s7DQo+IC0JaW50IGksIHhidWZfc2l6ZSwgeWJ1Zl9zaXplLCBi dWZmZXJfc2l6ZSwgbWFza19zaXplOw0KPiAtCVJJTkdfTE9DQUxTOw0KPiAtCURSTV9ERUJV RygiXG4iKTsNCj4gLQ0KPiAtCWNvdW50ID0gZGVwdGgtPm47DQo+IC0JaWYgKGNvdW50ID4g NDA5NiB8fCBjb3VudCA8PSAwKQ0KPiAtCQlyZXR1cm4gLUVNU0dTSVpFOw0KPiAtDQo+IC0J eGJ1Zl9zaXplID0gY291bnQgKiBzaXplb2YoKngpOw0KPiAtCXlidWZfc2l6ZSA9IGNvdW50 ICogc2l6ZW9mKCp5KTsNCj4gLQl4ID0gbWVtZHVwX3VzZXIoZGVwdGgtPngsIHhidWZfc2l6 ZSk7DQo+IC0JaWYgKElTX0VSUih4KSkNCj4gLQkJcmV0dXJuIFBUUl9FUlIoeCk7DQo+IC0J eSA9IG1lbWR1cF91c2VyKGRlcHRoLT55LCB5YnVmX3NpemUpOw0KPiAtCWlmIChJU19FUlIo eSkpIHsNCj4gLQkJa2ZyZWUoeCk7DQo+IC0JCXJldHVybiBQVFJfRVJSKHkpOw0KPiAtCX0N Cj4gLQlidWZmZXJfc2l6ZSA9IGRlcHRoLT5uICogc2l6ZW9mKHUzMik7DQo+IC0JYnVmZmVy ID0gbWVtZHVwX3VzZXIoZGVwdGgtPmJ1ZmZlciwgYnVmZmVyX3NpemUpOw0KPiAtCWlmIChJ U19FUlIoYnVmZmVyKSkgew0KPiAtCQlrZnJlZSh4KTsNCj4gLQkJa2ZyZWUoeSk7DQo+IC0J CXJldHVybiBQVFJfRVJSKGJ1ZmZlcik7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGRlcHRoLT5t YXNrKSB7DQo+IC0JCW1hc2tfc2l6ZSA9IGRlcHRoLT5uOw0KPiAtCQltYXNrID0gbWVtZHVw X3VzZXIoZGVwdGgtPm1hc2ssIG1hc2tfc2l6ZSk7DQo+IC0JCWlmIChJU19FUlIobWFzaykp IHsNCj4gLQkJCWtmcmVlKHgpOw0KPiAtCQkJa2ZyZWUoeSk7DQo+IC0JCQlrZnJlZShidWZm ZXIpOw0KPiAtCQkJcmV0dXJuIFBUUl9FUlIobWFzayk7DQo+IC0JCX0NCj4gLQ0KPiAtCQlm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KPiAtCQkJaWYgKG1hc2tbaV0pIHsNCj4g LQkJCQlCRUdJTl9SSU5HKDYpOw0KPiAtDQo+IC0JCQkJT1VUX1JJTkcoQ0NFX1BBQ0tFVDMo UjEyOF9DTlRMX1BBSU5UX01VTFRJLCA0KSk7DQo+IC0JCQkJT1VUX1JJTkcoUjEyOF9HTUNf RFNUX1BJVENIX09GRlNFVF9DTlRMIHwNCj4gLQkJCQkJIFIxMjhfR01DX0JSVVNIX1NPTElE X0NPTE9SIHwNCj4gLQkJCQkJIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwNCj4gLQkJ CQkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8DQo+IC0JCQkJCSBSMTI4X1JPUDNf UCB8DQo+IC0JCQkJCSBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwNCj4gLQkJCQkJIFIx MjhfR01DX1dSX01TS19ESVMpOw0KPiAtDQo+IC0JCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmRl cHRoX3BpdGNoX29mZnNldF9jKTsNCj4gLQkJCQlPVVRfUklORyhidWZmZXJbaV0pOw0KPiAt DQo+IC0JCQkJT1VUX1JJTkcoKHhbaV0gPDwgMTYpIHwgeVtpXSk7DQo+IC0JCQkJT1VUX1JJ TkcoKDEgPDwgMTYpIHwgMSk7DQo+IC0NCj4gLQkJCQlBRFZBTkNFX1JJTkcoKTsNCj4gLQkJ CX0NCj4gLQkJfQ0KPiAtDQo+IC0JCWtmcmVlKG1hc2spOw0KPiAtCX0gZWxzZSB7DQo+IC0J CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQo+IC0JCQlCRUdJTl9SSU5HKDYpOw0K PiAtDQo+IC0JCQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfUEFJTlRfTVVMVEks IDQpKTsNCj4gLQkJCU9VVF9SSU5HKFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8 DQo+IC0JCQkJIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwNCj4gLQkJCQkgKGRldl9w cml2LT5kZXB0aF9mbXQgPDwgOCkgfA0KPiAtCQkJCSBSMTI4X0dNQ19TUkNfREFUQVRZUEVf Q09MT1IgfA0KPiAtCQkJCSBSMTI4X1JPUDNfUCB8DQo+IC0JCQkJIFIxMjhfR01DX0NMUl9D TVBfQ05UTF9ESVMgfA0KPiAtCQkJCSBSMTI4X0dNQ19XUl9NU0tfRElTKTsNCj4gLQ0KPiAt CQkJT1VUX1JJTkcoZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29mZnNldF9jKTsNCj4gLQkJCU9V VF9SSU5HKGJ1ZmZlcltpXSk7DQo+IC0NCj4gLQkJCU9VVF9SSU5HKCh4W2ldIDw8IDE2KSB8 IHlbaV0pOw0KPiAtCQkJT1VUX1JJTkcoKDEgPDwgMTYpIHwgMSk7DQo+IC0NCj4gLQkJCUFE VkFOQ0VfUklORygpOw0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+IC0Ja2ZyZWUoeCk7DQo+IC0J a2ZyZWUoeSk7DQo+IC0Ja2ZyZWUoYnVmZmVyKTsNCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAt fQ0KPiAtDQo+IC1zdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3JlYWRfc3BhbihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAtCQkJCSAgICAgICBkcm1fcjEyOF9kZXB0aF90ICpk ZXB0aCkNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsNCj4gLQlpbnQgY291bnQsIHgsIHk7DQo+IC0JUklOR19MT0NBTFM7DQo+ IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JY291bnQgPSBkZXB0aC0+bjsNCj4gLQlp ZiAoY291bnQgPiA0MDk2IHx8IGNvdW50IDw9IDApDQo+IC0JCXJldHVybiAtRU1TR1NJWkU7 DQo+IC0NCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJngsIGRlcHRoLT54LCBzaXplb2YoeCkp KQ0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJnksIGRl cHRoLT55LCBzaXplb2YoeSkpKQ0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQ0KPiAtCUJF R0lOX1JJTkcoNyk7DQo+IC0NCj4gLQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExf QklUQkxUX01VTFRJLCA1KSk7DQo+IC0JT1VUX1JJTkcoUjEyOF9HTUNfU1JDX1BJVENIX09G RlNFVF9DTlRMIHwNCj4gLQkJIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8DQo+ IC0JCSBSMTI4X0dNQ19CUlVTSF9OT05FIHwNCj4gLQkJIChkZXZfcHJpdi0+ZGVwdGhfZm10 IDw8IDgpIHwNCj4gLQkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8DQo+IC0JCSBS MTI4X1JPUDNfUyB8DQo+IC0JCSBSMTI4X0RQX1NSQ19TT1VSQ0VfTUVNT1JZIHwNCj4gLQkJ IFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfCBSMTI4X0dNQ19XUl9NU0tfRElTKTsNCj4g LQ0KPiAtCU9VVF9SSU5HKGRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXRfYyk7DQo+IC0J T1VUX1JJTkcoZGV2X3ByaXYtPnNwYW5fcGl0Y2hfb2Zmc2V0X2MpOw0KPiAtDQo+IC0JT1VU X1JJTkcoKHggPDwgMTYpIHwgeSk7DQo+IC0JT1VUX1JJTkcoKDAgPDwgMTYpIHwgMCk7DQo+ IC0JT1VUX1JJTkcoKGNvdW50IDw8IDE2KSB8IDEpOw0KPiAtDQo+IC0JQURWQU5DRV9SSU5H KCk7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCByMTI4 X2NjZV9kaXNwYXRjaF9yZWFkX3BpeGVscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAt CQkJCQkgZHJtX3IxMjhfZGVwdGhfdCAqZGVwdGgpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJp dmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JaW50IGNvdW50LCAq eCwgKnk7DQo+IC0JaW50IGksIHhidWZfc2l6ZSwgeWJ1Zl9zaXplOw0KPiAtCVJJTkdfTE9D QUxTOw0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCWNvdW50ID0gZGVwdGgtPm47 DQo+IC0JaWYgKGNvdW50ID4gNDA5NiB8fCBjb3VudCA8PSAwKQ0KPiAtCQlyZXR1cm4gLUVN U0dTSVpFOw0KPiAtDQo+IC0JaWYgKGNvdW50ID4gZGV2X3ByaXYtPmRlcHRoX3BpdGNoKQ0K PiAtCQljb3VudCA9IGRldl9wcml2LT5kZXB0aF9waXRjaDsNCj4gLQ0KPiAtCXhidWZfc2l6 ZSA9IGNvdW50ICogc2l6ZW9mKCp4KTsNCj4gLQl5YnVmX3NpemUgPSBjb3VudCAqIHNpemVv ZigqeSk7DQo+IC0JeCA9IGttYWxsb2MoeGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsNCj4gLQlp ZiAoeCA9PSBOVUxMKQ0KPiAtCQlyZXR1cm4gLUVOT01FTTsNCj4gLQl5ID0ga21hbGxvYyh5 YnVmX3NpemUsIEdGUF9LRVJORUwpOw0KPiAtCWlmICh5ID09IE5VTEwpIHsNCj4gLQkJa2Zy ZWUoeCk7DQo+IC0JCXJldHVybiAtRU5PTUVNOw0KPiAtCX0NCj4gLQlpZiAoY29weV9mcm9t X3VzZXIoeCwgZGVwdGgtPngsIHhidWZfc2l6ZSkpIHsNCj4gLQkJa2ZyZWUoeCk7DQo+IC0J CWtmcmVlKHkpOw0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQl9DQo+IC0JaWYgKGNvcHlf ZnJvbV91c2VyKHksIGRlcHRoLT55LCB5YnVmX3NpemUpKSB7DQo+IC0JCWtmcmVlKHgpOw0K PiAtCQlrZnJlZSh5KTsNCj4gLQkJcmV0dXJuIC1FRkFVTFQ7DQo+IC0JfQ0KPiAtDQo+IC0J Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCj4gLQkJQkVHSU5fUklORyg3KTsNCj4g LQ0KPiAtCQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfQklUQkxUX01VTFRJLCA1 KSk7DQo+IC0JCU9VVF9SSU5HKFIxMjhfR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTCB8DQo+ IC0JCQkgUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwNCj4gLQkJCSBSMTI4X0dN Q19CUlVTSF9OT05FIHwNCj4gLQkJCSAoZGV2X3ByaXYtPmRlcHRoX2ZtdCA8PCA4KSB8DQo+ IC0JCQkgUjEyOF9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwNCj4gLQkJCSBSMTI4X1JPUDNf UyB8DQo+IC0JCQkgUjEyOF9EUF9TUkNfU09VUkNFX01FTU9SWSB8DQo+IC0JCQkgUjEyOF9H TUNfQ0xSX0NNUF9DTlRMX0RJUyB8IFIxMjhfR01DX1dSX01TS19ESVMpOw0KPiAtDQo+IC0J CU9VVF9SSU5HKGRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXRfYyk7DQo+IC0JCU9VVF9S SU5HKGRldl9wcml2LT5zcGFuX3BpdGNoX29mZnNldF9jKTsNCj4gLQ0KPiAtCQlPVVRfUklO RygoeFtpXSA8PCAxNikgfCB5W2ldKTsNCj4gLQkJT1VUX1JJTkcoKGkgPDwgMTYpIHwgMCk7 DQo+IC0JCU9VVF9SSU5HKCgxIDw8IDE2KSB8IDEpOw0KPiAtDQo+IC0JCUFEVkFOQ0VfUklO RygpOw0KPiAtCX0NCj4gLQ0KPiAtCWtmcmVlKHgpOw0KPiAtCWtmcmVlKHkpOw0KPiAtDQo+ IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLS8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLSAqIFBvbHln b24gc3RpcHBsZQ0KPiAtICovDQo+IC0NCj4gLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3Bh dGNoX3N0aXBwbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyICpzdGlwcGxlKQ0KPiAt ew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Ow0KPiAtCWludCBpOw0KPiAtCVJJTkdfTE9DQUxTOw0KPiAtCURSTV9ERUJVRygiXG4iKTsN Cj4gLQ0KPiAtCUJFR0lOX1JJTkcoMzMpOw0KPiAtDQo+IC0JT1VUX1JJTkcoQ0NFX1BBQ0tF VDAoUjEyOF9CUlVTSF9EQVRBMCwgMzEpKTsNCj4gLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkr KykNCj4gLQkJT1VUX1JJTkcoc3RpcHBsZVtpXSk7DQo+IC0NCj4gLQlBRFZBTkNFX1JJTkco KTsNCj4gLX0NCj4gLQ0KPiAtLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtICogSU9DVEwgZnVuY3Rpb25z DQo+IC0gKi8NCj4gLQ0KPiAtc3RhdGljIGludCByMTI4X2NjZV9jbGVhcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikN Cj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsNCj4gLQlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2Ow0KPiAtCWRybV9yMTI4 X2NsZWFyX3QgKmNsZWFyID0gZGF0YTsNCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4g LQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JREVW X0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQlSSU5HX1NQQUNF X1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0Jc2FyZWFfcHJpdiA9IGRl dl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtDQo+IC0JaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBS MTI4X05SX1NBUkVBX0NMSVBSRUNUUykNCj4gLQkJc2FyZWFfcHJpdi0+bmJveCA9IFIxMjhf TlJfU0FSRUFfQ0xJUFJFQ1RTOw0KPiAtDQo+IC0JcjEyOF9jY2VfZGlzcGF0Y2hfY2xlYXIo ZGV2LCBjbGVhcik7DQo+IC0JQ09NTUlUX1JJTkcoKTsNCj4gLQ0KPiAtCS8qIE1ha2Ugc3Vy ZSB3ZSByZXN0b3JlIHRoZSAzRCBzdGF0ZSBuZXh0IHRpbWUuDQo+IC0JICovDQo+IC0JZGV2 X3ByaXYtPnNhcmVhX3ByaXYtPmRpcnR5IHw9IFIxMjhfVVBMT0FEX0NPTlRFWFQgfCBSMTI4 X1VQTE9BRF9NQVNLUzsNCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0 aWMgaW50IHIxMjhfZG9faW5pdF9wYWdlZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0K PiAtew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOw0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAtCWRldl9wcml2LT5jcnRjX29m ZnNldCA9IFIxMjhfUkVBRChSMTI4X0NSVENfT0ZGU0VUKTsNCj4gLQlkZXZfcHJpdi0+Y3J0 Y19vZmZzZXRfY250bCA9IFIxMjhfUkVBRChSMTI4X0NSVENfT0ZGU0VUX0NOVEwpOw0KPiAt DQo+IC0JUjEyOF9XUklURShSMTI4X0NSVENfT0ZGU0VULCBkZXZfcHJpdi0+ZnJvbnRfb2Zm c2V0KTsNCj4gLQlSMTI4X1dSSVRFKFIxMjhfQ1JUQ19PRkZTRVRfQ05UTCwNCj4gLQkJICAg ZGV2X3ByaXYtPmNydGNfb2Zmc2V0X2NudGwgfCBSMTI4X0NSVENfT0ZGU0VUX0ZMSVBfQ05U TCk7DQo+IC0NCj4gLQlkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyA9IDE7DQo+IC0JZGV2X3By aXYtPmN1cnJlbnRfcGFnZSA9IDA7DQo+IC0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3Vy cmVudFBhZ2UgPSBkZXZfcHJpdi0+Y3VycmVudF9wYWdlOw0KPiAtDQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgcjEyOF9kb19jbGVhbnVwX3BhZ2VmbGlwKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAt DQo+IC0JUjEyOF9XUklURShSMTI4X0NSVENfT0ZGU0VULCBkZXZfcHJpdi0+Y3J0Y19vZmZz ZXQpOw0KPiAtCVIxMjhfV1JJVEUoUjEyOF9DUlRDX09GRlNFVF9DTlRMLCBkZXZfcHJpdi0+ Y3J0Y19vZmZzZXRfY250bCk7DQo+IC0NCj4gLQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFn ZSAhPSAwKSB7DQo+IC0JCXIxMjhfY2NlX2Rpc3BhdGNoX2ZsaXAoZGV2KTsNCj4gLQkJQ09N TUlUX1JJTkcoKTsNCj4gLQl9DQo+IC0NCj4gLQlkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyA9 IDA7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLS8qIFN3YXBwaW5nIGFuZCBmbGlw cGluZyBhcmUgZGlmZmVyZW50IG9wZXJhdGlvbnMsIG5lZWQgZGlmZmVyZW50IGlvY3Rscy4N Cj4gLSAqIFRoZXkgY2FuICYgc2hvdWxkIGJlIGludGVybWl4ZWQgdG8gc3VwcG9ydCBtdWx0 aXBsZSAzZCB3aW5kb3dzLg0KPiAtICovDQo+IC0NCj4gLXN0YXRpYyBpbnQgcjEyOF9jY2Vf ZmxpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlM T0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JREVWX0lO SVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQlSSU5HX1NQQUNFX1RF U1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JaWYgKCFkZXZfcHJpdi0+cGFn ZV9mbGlwcGluZykNCj4gLQkJcjEyOF9kb19pbml0X3BhZ2VmbGlwKGRldik7DQo+IC0NCj4g LQlyMTI4X2NjZV9kaXNwYXRjaF9mbGlwKGRldik7DQo+IC0NCj4gLQlDT01NSVRfUklORygp Ow0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IHIxMjhfY2NlX3N3 YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9 IGRldl9wcml2LT5zYXJlYV9wcml2Ow0KPiAtCURSTV9ERUJVRygiXG4iKTsNCj4gLQ0KPiAt CUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7DQo+IC0NCj4gLQlERVZf SU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsNCj4gLQ0KPiAtCVJJTkdfU1BBQ0Vf VEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQlpZiAoc2FyZWFfcHJpdi0+ bmJveCA+IFIxMjhfTlJfU0FSRUFfQ0xJUFJFQ1RTKQ0KPiAtCQlzYXJlYV9wcml2LT5uYm94 ID0gUjEyOF9OUl9TQVJFQV9DTElQUkVDVFM7DQo+IC0NCj4gLQlyMTI4X2NjZV9kaXNwYXRj aF9zd2FwKGRldik7DQo+IC0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmRpcnR5IHw9IChSMTI4 X1VQTE9BRF9DT05URVhUIHwNCj4gLQkJCQkJUjEyOF9VUExPQURfTUFTS1MpOw0KPiAtDQo+ IC0JQ09NTUlUX1JJTkcoKTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGlj IGludCByMTI4X2NjZV92ZXJ0ZXgoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJp dmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0Jc3RydWN0IGRybV9k ZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsNCj4gLQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOw0K PiAtCWRybV9yMTI4X2J1Zl9wcml2X3QgKmJ1Zl9wcml2Ow0KPiAtCWRybV9yMTI4X3ZlcnRl eF90ICp2ZXJ0ZXggPSBkYXRhOw0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRl diwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2 X3ByaXYpOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJwaWQ9JWQgaW5kZXg9JWQgY291bnQ9JWQg ZGlzY2FyZD0lZFxuIiwNCj4gLQkJICB0YXNrX3BpZF9ucihjdXJyZW50KSwgdmVydGV4LT5p ZHgsIHZlcnRleC0+Y291bnQsIHZlcnRleC0+ZGlzY2FyZCk7DQo+IC0NCj4gLQlpZiAodmVy dGV4LT5pZHggPCAwIHx8IHZlcnRleC0+aWR4ID49IGRtYS0+YnVmX2NvdW50KSB7DQo+IC0J CURSTV9FUlJPUigiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLA0KPiAtCQkJICB2 ZXJ0ZXgtPmlkeCwgZG1hLT5idWZfY291bnQgLSAxKTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7 DQo+IC0JfQ0KPiAtCWlmICh2ZXJ0ZXgtPnByaW0gPCAwIHx8DQo+IC0JICAgIHZlcnRleC0+ cHJpbSA+IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9UWVBFMikgew0KPiAtCQlE Uk1fRVJST1IoImJ1ZmZlciBwcmltICVkXG4iLCB2ZXJ0ZXgtPnByaW0pOw0KPiAtCQlyZXR1 cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRV Uk4oZGV2X3ByaXYpOw0KPiAtCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsN Cj4gLQ0KPiAtCWJ1ZiA9IGRtYS0+YnVmbGlzdFt2ZXJ0ZXgtPmlkeF07DQo+IC0JYnVmX3By aXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JaWYgKGJ1Zi0+ZmlsZV9wcml2ICE9 IGZpbGVfcHJpdikgew0KPiAtCQlEUk1fRVJST1IoInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVy IG93bmVkIGJ5ICVwXG4iLA0KPiAtCQkJICB0YXNrX3BpZF9ucihjdXJyZW50KSwgYnVmLT5m aWxlX3ByaXYpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0JaWYgKGJ1Zi0+ cGVuZGluZykgew0KPiAtCQlEUk1fRVJST1IoInNlbmRpbmcgcGVuZGluZyBidWZmZXIgJWRc biIsIHZlcnRleC0+aWR4KTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+ IC0JYnVmLT51c2VkID0gdmVydGV4LT5jb3VudDsNCj4gLQlidWZfcHJpdi0+cHJpbSA9IHZl cnRleC0+cHJpbTsNCj4gLQlidWZfcHJpdi0+ZGlzY2FyZCA9IHZlcnRleC0+ZGlzY2FyZDsN Cj4gLQ0KPiAtCXIxMjhfY2NlX2Rpc3BhdGNoX3ZlcnRleChkZXYsIGJ1Zik7DQo+IC0NCj4g LQlDT01NSVRfUklORygpOw0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg aW50IHIxMjhfY2NlX2luZGljZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJp dmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0Jc3RydWN0IGRybV9k ZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsNCj4gLQlzdHJ1Y3QgZHJtX2J1ZiAqYnVmOw0K PiAtCWRybV9yMTI4X2J1Zl9wcml2X3QgKmJ1Zl9wcml2Ow0KPiAtCWRybV9yMTI4X2luZGlj ZXNfdCAqZWx0cyA9IGRhdGE7DQo+IC0JaW50IGNvdW50Ow0KPiAtDQo+IC0JTE9DS19URVNU X1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCURFVl9JTklUX1RFU1Rf V0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJwaWQ9JWQgYnVm PSVkIHM9JWQgZT0lZCBkPSVkXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwNCj4gLQkJICBl bHRzLT5pZHgsIGVsdHMtPnN0YXJ0LCBlbHRzLT5lbmQsIGVsdHMtPmRpc2NhcmQpOw0KPiAt DQo+IC0JaWYgKGVsdHMtPmlkeCA8IDAgfHwgZWx0cy0+aWR4ID49IGRtYS0+YnVmX2NvdW50 KSB7DQo+IC0JCURSTV9FUlJPUigiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLA0K PiAtCQkJICBlbHRzLT5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSk7DQo+IC0JCXJldHVybiAt RUlOVkFMOw0KPiAtCX0NCj4gLQlpZiAoZWx0cy0+cHJpbSA8IDAgfHwNCj4gLQkgICAgZWx0 cy0+cHJpbSA+IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9UWVBFMikgew0KPiAt CQlEUk1fRVJST1IoImJ1ZmZlciBwcmltICVkXG4iLCBlbHRzLT5wcmltKTsNCj4gLQkJcmV0 dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVU VVJOKGRldl9wcml2KTsNCj4gLQlWQl9BR0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7 DQo+IC0NCj4gLQlidWYgPSBkbWEtPmJ1Zmxpc3RbZWx0cy0+aWR4XTsNCj4gLQlidWZfcHJp diA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0NCj4gLQlpZiAoYnVmLT5maWxlX3ByaXYgIT0g ZmlsZV9wcml2KSB7DQo+IC0JCURSTV9FUlJPUigicHJvY2VzcyAlZCB1c2luZyBidWZmZXIg b3duZWQgYnkgJXBcbiIsDQo+IC0JCQkgIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBidWYtPmZp bGVfcHJpdik7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQlpZiAoYnVmLT5w ZW5kaW5nKSB7DQo+IC0JCURSTV9FUlJPUigic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxu IiwgZWx0cy0+aWR4KTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0J Y291bnQgPSAoZWx0cy0+ZW5kIC0gZWx0cy0+c3RhcnQpIC8gc2l6ZW9mKHUxNik7DQo+IC0J ZWx0cy0+c3RhcnQgLT0gUjEyOF9JTkRFWF9QUklNX09GRlNFVDsNCj4gLQ0KPiAtCWlmIChl bHRzLT5zdGFydCAmIDB4Nykgew0KPiAtCQlEUk1fRVJST1IoIm1pc2FsaWduZWQgYnVmZmVy IDB4JXhcbiIsIGVsdHMtPnN0YXJ0KTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0K PiAtCWlmIChlbHRzLT5zdGFydCA8IGJ1Zi0+dXNlZCkgew0KPiAtCQlEUk1fRVJST1IoIm5v IGhlYWRlciAweCV4IC0gMHgleFxuIiwgZWx0cy0+c3RhcnQsIGJ1Zi0+dXNlZCk7DQo+IC0J CXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCWJ1Zi0+dXNlZCA9IGVsdHMtPmVu ZDsNCj4gLQlidWZfcHJpdi0+cHJpbSA9IGVsdHMtPnByaW07DQo+IC0JYnVmX3ByaXYtPmRp c2NhcmQgPSBlbHRzLT5kaXNjYXJkOw0KPiAtDQo+IC0JcjEyOF9jY2VfZGlzcGF0Y2hfaW5k aWNlcyhkZXYsIGJ1ZiwgZWx0cy0+c3RhcnQsIGVsdHMtPmVuZCwgY291bnQpOw0KPiAtDQo+ IC0JQ09NTUlUX1JJTkcoKTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGlj IGludCByMTI4X2NjZV9ibGl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2 aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3IxMjhfYmxpdF90ICpibGl0ID0g ZGF0YTsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRl diwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCURFVl9JTklUX1RFU1RfV0lUSF9SRVRVUk4oZGV2 X3ByaXYpOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJwaWQ9JWQgaW5kZXg9JWRcbiIsIHRhc2tf cGlkX25yKGN1cnJlbnQpLCBibGl0LT5pZHgpOw0KPiAtDQo+IC0JaWYgKGJsaXQtPmlkeCA8 IDAgfHwgYmxpdC0+aWR4ID49IGRtYS0+YnVmX2NvdW50KSB7DQo+IC0JCURSTV9FUlJPUigi YnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLA0KPiAtCQkJICBibGl0LT5pZHgsIGRt YS0+YnVmX2NvdW50IC0gMSk7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0K PiAtCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0JVkJfQUdF X1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOw0KPiAtDQo+IC0JcmV0ID0gcjEyOF9jY2Vf ZGlzcGF0Y2hfYmxpdChkZXYsIGZpbGVfcHJpdiwgYmxpdCk7DQo+IC0NCj4gLQlDT01NSVRf UklORygpOw0KPiAtCXJldHVybiByZXQ7DQo+IC19DQo+IC0NCj4gLWludCByMTI4X2NjZV9k ZXB0aChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikNCj4gLXsNCj4gLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlkcm1fcjEyOF9kZXB0aF90ICpkZXB0aCA9IGRh dGE7DQo+IC0JaW50IHJldDsNCj4gLQ0KPiAtCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYs IGZpbGVfcHJpdik7DQo+IC0NCj4gLQlERVZfSU5JVF9URVNUX1dJVEhfUkVUVVJOKGRldl9w cml2KTsNCj4gLQ0KPiAtCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7 DQo+IC0NCj4gLQlyZXQgPSAtRUlOVkFMOw0KPiAtCXN3aXRjaCAoZGVwdGgtPmZ1bmMpIHsN Cj4gLQljYXNlIFIxMjhfV1JJVEVfU1BBTjoNCj4gLQkJcmV0ID0gcjEyOF9jY2VfZGlzcGF0 Y2hfd3JpdGVfc3BhbihkZXYsIGRlcHRoKTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBSMTI4 X1dSSVRFX1BJWEVMUzoNCj4gLQkJcmV0ID0gcjEyOF9jY2VfZGlzcGF0Y2hfd3JpdGVfcGl4 ZWxzKGRldiwgZGVwdGgpOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIFIxMjhfUkVBRF9TUEFO Og0KPiAtCQlyZXQgPSByMTI4X2NjZV9kaXNwYXRjaF9yZWFkX3NwYW4oZGV2LCBkZXB0aCk7 DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgUjEyOF9SRUFEX1BJWEVMUzoNCj4gLQkJcmV0ID0g cjEyOF9jY2VfZGlzcGF0Y2hfcmVhZF9waXhlbHMoZGV2LCBkZXB0aCk7DQo+IC0JCWJyZWFr Ow0KPiAtCX0NCj4gLQ0KPiAtCUNPTU1JVF9SSU5HKCk7DQo+IC0JcmV0dXJuIHJldDsNCj4g LX0NCj4gLQ0KPiAtaW50IHIxMjhfY2NlX3N0aXBwbGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0J ZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0J ZHJtX3IxMjhfc3RpcHBsZV90ICpzdGlwcGxlID0gZGF0YTsNCj4gLQl1MzIgbWFza1szMl07 DQo+IC0NCj4gLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAt DQo+IC0JREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQlp ZiAoY29weV9mcm9tX3VzZXIoJm1hc2ssIHN0aXBwbGUtPm1hc2ssIDMyICogc2l6ZW9mKHUz MikpKQ0KPiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4gLQ0KPiAtCVJJTkdfU1BBQ0VfVEVTVF9X SVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQlyMTI4X2NjZV9kaXNwYXRjaF9zdGlw cGxlKGRldiwgbWFzayk7DQo+IC0NCj4gLQlDT01NSVRfUklORygpOw0KPiAtCXJldHVybiAw Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IHIxMjhfY2NlX2luZGlyZWN0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KQ0KPiAtew0KPiAtCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOw0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7DQo+ IC0Jc3RydWN0IGRybV9idWYgKmJ1ZjsNCj4gLQlkcm1fcjEyOF9idWZfcHJpdl90ICpidWZf cHJpdjsNCj4gLQlkcm1fcjEyOF9pbmRpcmVjdF90ICppbmRpcmVjdCA9IGRhdGE7DQo+IC0j aWYgMA0KPiAtCVJJTkdfTE9DQUxTOw0KPiAtI2VuZGlmDQo+IC0NCj4gLQlMT0NLX1RFU1Rf V0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JREVWX0lOSVRfVEVTVF9X SVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0NCj4gLQlEUk1fREVCVUcoImlkeD0lZCBzPSVk IGU9JWQgZD0lZFxuIiwNCj4gLQkJICBpbmRpcmVjdC0+aWR4LCBpbmRpcmVjdC0+c3RhcnQs IGluZGlyZWN0LT5lbmQsDQo+IC0JCSAgaW5kaXJlY3QtPmRpc2NhcmQpOw0KPiAtDQo+IC0J aWYgKGluZGlyZWN0LT5pZHggPCAwIHx8IGluZGlyZWN0LT5pZHggPj0gZG1hLT5idWZfY291 bnQpIHsNCj4gLQkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIs DQo+IC0JCQkgIGluZGlyZWN0LT5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSk7DQo+IC0JCXJl dHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpbmRp cmVjdC0+aWR4XTsNCj4gLQlidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0NCj4g LQlpZiAoYnVmLT5maWxlX3ByaXYgIT0gZmlsZV9wcml2KSB7DQo+IC0JCURSTV9FUlJPUigi cHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsDQo+IC0JCQkgIHRhc2tf cGlkX25yKGN1cnJlbnQpLCBidWYtPmZpbGVfcHJpdik7DQo+IC0JCXJldHVybiAtRUlOVkFM Ow0KPiAtCX0NCj4gLQlpZiAoYnVmLT5wZW5kaW5nKSB7DQo+IC0JCURSTV9FUlJPUigic2Vu ZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgaW5kaXJlY3QtPmlkeCk7DQo+IC0JCXJldHVy biAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChpbmRpcmVjdC0+c3RhcnQgPCBidWYt PnVzZWQpIHsNCj4gLQkJRFJNX0VSUk9SKCJyZXVzaW5nIGluZGlyZWN0OiBzdGFydD0weCV4 IGFjdHVhbD0weCV4XG4iLA0KPiAtCQkJICBpbmRpcmVjdC0+c3RhcnQsIGJ1Zi0+dXNlZCk7 DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCVJJTkdfU1BBQ0VfVEVT VF9XSVRIX1JFVFVSTihkZXZfcHJpdik7DQo+IC0JVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4o ZGV2X3ByaXYpOw0KPiAtDQo+IC0JYnVmLT51c2VkID0gaW5kaXJlY3QtPmVuZDsNCj4gLQli dWZfcHJpdi0+ZGlzY2FyZCA9IGluZGlyZWN0LT5kaXNjYXJkOw0KPiAtDQo+IC0jaWYgMA0K PiAtCS8qIFdhaXQgZm9yIHRoZSAzRCBzdHJlYW0gdG8gaWRsZSBiZWZvcmUgdGhlIGluZGly ZWN0IGJ1ZmZlcg0KPiAtCSAqIGNvbnRhaW5pbmcgMkQgYWNjZWxlcmF0aW9uIGNvbW1hbmRz IGlzIHByb2Nlc3NlZC4NCj4gLQkgKi8NCj4gLQlCRUdJTl9SSU5HKDIpOw0KPiAtCVJBREVP Tl9XQUlUX1VOVElMXzNEX0lETEUoKTsNCj4gLQlBRFZBTkNFX1JJTkcoKTsNCj4gLSNlbmRp Zg0KPiAtDQo+IC0JLyogRGlzcGF0Y2ggdGhlIGluZGlyZWN0IGJ1ZmZlciBmdWxsIG9mIGNv bW1hbmRzIGZyb20gdGhlDQo+IC0JICogWCBzZXJ2ZXIuICBUaGlzIGlzIGluc2VjdXJlIGFu ZCBpcyB0aHVzIG9ubHkgYXZhaWxhYmxlIHRvDQo+IC0JICogcHJpdmlsZWdlZCBjbGllbnRz Lg0KPiAtCSAqLw0KPiAtCXIxMjhfY2NlX2Rpc3BhdGNoX2luZGlyZWN0KGRldiwgYnVmLCBp bmRpcmVjdC0+c3RhcnQsIGluZGlyZWN0LT5lbmQpOw0KPiAtDQo+IC0JQ09NTUlUX1JJTkco KTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtaW50IHIxMjhfZ2V0cGFyYW0oc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYpDQo+IC17DQo+IC0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3IxMjhfZ2V0cGFyYW1fdCAqcGFyYW0gPSBkYXRhOw0K PiAtCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPmRldik7DQo+IC0J aW50IHZhbHVlOw0KPiAtDQo+IC0JREVWX0lOSVRfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJp dik7DQo+IC0NCj4gLQlEUk1fREVCVUcoInBpZD0lZFxuIiwgdGFza19waWRfbnIoY3VycmVu dCkpOw0KPiAtDQo+IC0Jc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsNCj4gLQljYXNlIFIxMjhf UEFSQU1fSVJRX05SOg0KPiAtCQl2YWx1ZSA9IHBkZXYtPmlycTsNCj4gLQkJYnJlYWs7DQo+ IC0JZGVmYXVsdDoNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JaWYg KGNvcHlfdG9fdXNlcihwYXJhbS0+dmFsdWUsICZ2YWx1ZSwgc2l6ZW9mKGludCkpKSB7DQo+ IC0JCURSTV9FUlJPUigiY29weV90b191c2VyXG4iKTsNCj4gLQkJcmV0dXJuIC1FRkFVTFQ7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXZvaWQgcjEyOF9k cml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JaWYgKGRldi0+ZGV2X3ByaXZhdGUpIHsNCj4gLQkJ ZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0J CWlmIChkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykNCj4gLQkJCXIxMjhfZG9fY2xlYW51cF9w YWdlZmxpcChkZXYpOw0KPiAtCX0NCj4gLX0NCj4gLXZvaWQgcjEyOF9kcml2ZXJfbGFzdGNs b3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JcjEyOF9kb19jbGVhbnVw X2NjZShkZXYpOw0KPiAtfQ0KPiAtDQo+IC1jb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2Mg cjEyOF9pb2N0bHNbXSA9IHsNCj4gLQlEUk1fSU9DVExfREVGX0RSVihSMTI4X0lOSVQsIHIx MjhfY2NlX2luaXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksDQo+IC0J RFJNX0lPQ1RMX0RFRl9EUlYoUjEyOF9DQ0VfU1RBUlQsIHIxMjhfY2NlX3N0YXJ0LCBEUk1f QVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJW KFIxMjhfQ0NFX1NUT1AsIHIxMjhfY2NlX3N0b3AsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJN X1JPT1RfT05MWSksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoUjEyOF9DQ0VfUkVTRVQsIHIx MjhfY2NlX3Jlc2V0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLA0KPiAt CURSTV9JT0NUTF9ERUZfRFJWKFIxMjhfQ0NFX0lETEUsIHIxMjhfY2NlX2lkbGUsIERSTV9B VVRIKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihSMTI4X1JFU0VULCByMTI4X2VuZ2luZV9y ZXNldCwgRFJNX0FVVEgpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJWKFIxMjhfRlVMTFNDUkVF TiwgcjEyOF9mdWxsc2NyZWVuLCBEUk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYo UjEyOF9TV0FQLCByMTI4X2NjZV9zd2FwLCBEUk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RF Rl9EUlYoUjEyOF9GTElQLCByMTI4X2NjZV9mbGlwLCBEUk1fQVVUSCksDQo+IC0JRFJNX0lP Q1RMX0RFRl9EUlYoUjEyOF9DTEVBUiwgcjEyOF9jY2VfY2xlYXIsIERSTV9BVVRIKSwNCj4g LQlEUk1fSU9DVExfREVGX0RSVihSMTI4X1ZFUlRFWCwgcjEyOF9jY2VfdmVydGV4LCBEUk1f QVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoUjEyOF9JTkRJQ0VTLCByMTI4X2NjZV9p bmRpY2VzLCBEUk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoUjEyOF9CTElULCBy MTI4X2NjZV9ibGl0LCBEUk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoUjEyOF9E RVBUSCwgcjEyOF9jY2VfZGVwdGgsIERSTV9BVVRIKSwNCj4gLQlEUk1fSU9DVExfREVGX0RS VihSMTI4X1NUSVBQTEUsIHIxMjhfY2NlX3N0aXBwbGUsIERSTV9BVVRIKSwNCj4gLQlEUk1f SU9DVExfREVGX0RSVihSMTI4X0lORElSRUNULCByMTI4X2NjZV9pbmRpcmVjdCwgRFJNX0FV VEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihS MTI4X0dFVFBBUkFNLCByMTI4X2dldHBhcmFtLCBEUk1fQVVUSCksDQo+IC19Ow0KPiAtDQo+ IC1pbnQgcjEyOF9tYXhfaW9jdGwgPSBBUlJBWV9TSVpFKHIxMjhfaW9jdGxzKTsNCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vc2F2YWdlL01ha2VmaWxlDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAzZTUyMDc2M2QyNTkuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vc2F2YWdlL01ha2VmaWxlDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsOSArMCwwIEBA DQo+IC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gLSMNCj4g LSMgTWFrZWZpbGUgZm9yIHRoZSBkcm0gZGV2aWNlIGRyaXZlci4gIFRoaXMgZHJpdmVyIHBy b3ZpZGVzIHN1cHBvcnQgZm9yIHRoZQ0KPiAtIyBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3Ry dWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlci4NCj4gLQ0KPiAtc2F2 YWdlLXkgOj0gc2F2YWdlX2Rydi5vIHNhdmFnZV9iY2kubyBzYXZhZ2Vfc3RhdGUubw0KPiAt DQo+IC1vYmotJChDT05GSUdfRFJNX1NBVkFHRSkrPSBzYXZhZ2Uubw0KPiAtDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYyBiL2RyaXZlcnMv Z3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCBlMzMzODVkZmUzZWQuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0x LDEwODIgKzAsMCBAQA0KPiAtLyogc2F2YWdlX2JjaS5jIC0tIEJDSSBzdXBwb3J0IGZvciBT YXZhZ2UNCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgMjAwNCAgRmVsaXggS3VlaGxpbmcNCj4g LSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0gKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsDQo+IC0gKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUN Cj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUNCj4g LSAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zDQo+IC0gKiBvZiB0aGUgU29mdHdhcmUuDQo+IC0gKg0K PiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsDQo+IC0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YNCj4gLSAqIE1FUkNIQU5UQUJJ TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EDQo+IC0gKiBOT04t SU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBGRUxJWCBLVUVITElORyBCRSBMSUFC TEUgRk9SDQo+IC0gKiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRg0KPiAtICogQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9ODQo+IC0gKiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU V0FSRS4NCj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gLSNp bmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+IC0j aW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPg0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9k ZXZpY2UuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4NCj4gLSNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+DQo+IC0jaW5jbHVkZSA8ZHJtL3NhdmFnZV9kcm0uaD4NCj4gLQ0K PiAtI2luY2x1ZGUgInNhdmFnZV9kcnYuaCINCj4gLQ0KPiAtLyogTmVlZCBhIGxvbmcgdGlt ZW91dCBmb3Igc2hhZG93IHN0YXR1cyB1cGRhdGVzIGNhbiB0YWtlIGEgd2hpbGUNCj4gLSAq IGFuZCBzbyBjYW4gd2FpdGluZyBmb3IgZXZlbnRzIHdoZW4gdGhlIHF1ZXVlIGlzIGZ1bGwu ICovDQo+IC0jZGVmaW5lIFNBVkFHRV9ERUZBVUxUX1VTRUNfVElNRU9VVAkxMDAwMDAwCS8q IDFzICovDQo+IC0jZGVmaW5lIFNBVkFHRV9FVkVOVF9VU0VDX1RJTUVPVVQJNTAwMDAwMAkv KiA1cyAqLw0KPiAtI2RlZmluZSBTQVZBR0VfRlJFRUxJU1RfREVCVUcJCTANCj4gLQ0KPiAt c3RhdGljIGludCBzYXZhZ2VfZG9fY2xlYW51cF9iY2koc3RydWN0IGRybV9kZXZpY2UgKmRl dik7DQo+IC0NCj4gLXN0YXRpYyBpbnQNCj4gLXNhdmFnZV9iY2lfd2FpdF9maWZvX3NoYWRv dyhkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1bnNpZ25lZCBpbnQgbikNCj4g LXsNCj4gLQl1aW50MzJfdCBtYXNrID0gZGV2X3ByaXYtPnN0YXR1c191c2VkX21hc2s7DQo+ IC0JdWludDMyX3QgdGhyZXNob2xkID0gZGV2X3ByaXYtPmJjaV90aHJlc2hvbGRfaGk7DQo+ IC0JdWludDMyX3Qgc3RhdHVzOw0KPiAtCWludCBpOw0KPiAtDQo+IC0jaWYgU0FWQUdFX0JD SV9ERUJVRw0KPiAtCWlmIChuID4gZGV2X3ByaXYtPmNvYl9zaXplICsgU0FWQUdFX0JDSV9G SUZPX1NJWkUgLSB0aHJlc2hvbGQpDQo+IC0JCURSTV9FUlJPUigiVHJ5aW5nIHRvIGVtaXQg JWQgd29yZHMgIg0KPiAtCQkJICAiKG1vcmUgdGhhbiBndWFyYW50ZWVkIHNwYWNlIGluIENP QilcbiIsIG4pOw0KPiAtI2VuZGlmDQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgU0FWQUdF X0RFRkFVTFRfVVNFQ19USU1FT1VUOyBpKyspIHsNCj4gLQkJbWIoKTsNCj4gLQkJc3RhdHVz ID0gZGV2X3ByaXYtPnN0YXR1c19wdHJbMF07DQo+IC0JCWlmICgoc3RhdHVzICYgbWFzaykg PCB0aHJlc2hvbGQpDQo+IC0JCQlyZXR1cm4gMDsNCj4gLQkJdWRlbGF5KDEpOw0KPiAtCX0N Cj4gLQ0KPiAtI2lmIFNBVkFHRV9CQ0lfREVCVUcNCj4gLQlEUk1fRVJST1IoImZhaWxlZCFc biIpOw0KPiAtCURSTV9JTkZPKCIgICBzdGF0dXM9MHglMDh4LCB0aHJlc2hvbGQ9MHglMDh4 XG4iLCBzdGF0dXMsIHRocmVzaG9sZCk7DQo+IC0jZW5kaWYNCj4gLQlyZXR1cm4gLUVCVVNZ Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50DQo+IC1zYXZhZ2VfYmNpX3dhaXRfZmlmb19z M2QoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdW5zaWduZWQgaW50IG4pDQo+ IC17DQo+IC0JdWludDMyX3QgbWF4VXNlZCA9IGRldl9wcml2LT5jb2Jfc2l6ZSArIFNBVkFH RV9CQ0lfRklGT19TSVpFIC0gbjsNCj4gLQl1aW50MzJfdCBzdGF0dXM7DQo+IC0JaW50IGk7 DQo+IC0NCj4gLQlmb3IgKGkgPSAwOyBpIDwgU0FWQUdFX0RFRkFVTFRfVVNFQ19USU1FT1VU OyBpKyspIHsNCj4gLQkJc3RhdHVzID0gU0FWQUdFX1JFQUQoU0FWQUdFX1NUQVRVU19XT1JE MCk7DQo+IC0JCWlmICgoc3RhdHVzICYgU0FWQUdFX0ZJRk9fVVNFRF9NQVNLX1MzRCkgPD0g bWF4VXNlZCkNCj4gLQkJCXJldHVybiAwOw0KPiAtCQl1ZGVsYXkoMSk7DQo+IC0JfQ0KPiAt DQo+IC0jaWYgU0FWQUdFX0JDSV9ERUJVRw0KPiAtCURSTV9FUlJPUigiZmFpbGVkIVxuIik7 DQo+IC0JRFJNX0lORk8oIiAgIHN0YXR1cz0weCUwOHhcbiIsIHN0YXR1cyk7DQo+IC0jZW5k aWYNCj4gLQlyZXR1cm4gLUVCVVNZOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50DQo+IC1z YXZhZ2VfYmNpX3dhaXRfZmlmb19zNChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2 LCB1bnNpZ25lZCBpbnQgbikNCj4gLXsNCj4gLQl1aW50MzJfdCBtYXhVc2VkID0gZGV2X3By aXYtPmNvYl9zaXplICsgU0FWQUdFX0JDSV9GSUZPX1NJWkUgLSBuOw0KPiAtCXVpbnQzMl90 IHN0YXR1czsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBTQVZBR0Vf REVGQVVMVF9VU0VDX1RJTUVPVVQ7IGkrKykgew0KPiAtCQlzdGF0dXMgPSBTQVZBR0VfUkVB RChTQVZBR0VfQUxUX1NUQVRVU19XT1JEMCk7DQo+IC0JCWlmICgoc3RhdHVzICYgU0FWQUdF X0ZJRk9fVVNFRF9NQVNLX1M0KSA8PSBtYXhVc2VkKQ0KPiAtCQkJcmV0dXJuIDA7DQo+IC0J CXVkZWxheSgxKTsNCj4gLQl9DQo+IC0NCj4gLSNpZiBTQVZBR0VfQkNJX0RFQlVHDQo+IC0J RFJNX0VSUk9SKCJmYWlsZWQhXG4iKTsNCj4gLQlEUk1fSU5GTygiICAgc3RhdHVzPTB4JTA4 eFxuIiwgc3RhdHVzKTsNCj4gLSNlbmRpZg0KPiAtCXJldHVybiAtRUJVU1k7DQo+IC19DQo+ IC0NCj4gLS8qDQo+IC0gKiBXYWl0aW5nIGZvciBldmVudHMuDQo+IC0gKg0KPiAtICogVGhl IEJJT1NyZXNldHMgdGhlIGV2ZW50IHRhZyB0byAwIG9uIG1vZGUgY2hhbmdlcy4gVGhlcmVm b3JlIHdlDQo+IC0gKiBuZXZlciBlbWl0IDAgdG8gdGhlIGV2ZW50IHRhZy4gSWYgd2UgZmlu ZCBhIDAgZXZlbnQgdGFnIHdlIGtub3cgdGhlDQo+IC0gKiBCSU9TIHN0b21wZWQgb24gaXQg YW5kIHJldHVybiBzdWNjZXNzIGFzc3VtaW5nIHRoYXQgdGhlIEJJT1Mgd2FpdGVkDQo+IC0g KiBmb3IgZW5naW5lIGlkbGUuDQo+IC0gKg0KPiAtICogTm90ZTogaWYgdGhlIFhzZXJ2ZXIg dXNlcyB0aGUgZXZlbnQgdGFnIGl0IGhhcyB0byBmb2xsb3cgdGhlIHNhbWUNCj4gLSAqIHJ1 bGUuIE90aGVyd2lzZSB0aGVyZSBtYXkgYmUgZ2xpdGNoZXMgZXZlcnkgMl4xNiBldmVudHMu DQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQNCj4gLXNhdmFnZV9iY2lfd2FpdF9ldmVudF9zaGFk b3coZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDE2X3QgZSkNCj4gLXsN Cj4gLQl1aW50MzJfdCBzdGF0dXM7DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlmb3IgKGkgPSAw OyBpIDwgU0FWQUdFX0VWRU5UX1VTRUNfVElNRU9VVDsgaSsrKSB7DQo+IC0JCW1iKCk7DQo+ IC0JCXN0YXR1cyA9IGRldl9wcml2LT5zdGF0dXNfcHRyWzFdOw0KPiAtCQlpZiAoKCgoc3Rh dHVzICYgMHhmZmZmKSAtIGUpICYgMHhmZmZmKSA8PSAweDdmZmYgfHwNCj4gLQkJICAgIChz dGF0dXMgJiAweGZmZmYpID09IDApDQo+IC0JCQlyZXR1cm4gMDsNCj4gLQkJdWRlbGF5KDEp Ow0KPiAtCX0NCj4gLQ0KPiAtI2lmIFNBVkFHRV9CQ0lfREVCVUcNCj4gLQlEUk1fRVJST1Io ImZhaWxlZCFcbiIpOw0KPiAtCURSTV9JTkZPKCIgICBzdGF0dXM9MHglMDh4LCBlPTB4JTA0 eFxuIiwgc3RhdHVzLCBlKTsNCj4gLSNlbmRpZg0KPiAtDQo+IC0JcmV0dXJuIC1FQlVTWTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludA0KPiAtc2F2YWdlX2JjaV93YWl0X2V2ZW50X3Jl Zyhkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1aW50MTZfdCBlKQ0KPiAtew0K PiAtCXVpbnQzMl90IHN0YXR1czsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7 IGkgPCBTQVZBR0VfRVZFTlRfVVNFQ19USU1FT1VUOyBpKyspIHsNCj4gLQkJc3RhdHVzID0g U0FWQUdFX1JFQUQoU0FWQUdFX1NUQVRVU19XT1JEMSk7DQo+IC0JCWlmICgoKChzdGF0dXMg JiAweGZmZmYpIC0gZSkgJiAweGZmZmYpIDw9IDB4N2ZmZiB8fA0KPiAtCQkgICAgKHN0YXR1 cyAmIDB4ZmZmZikgPT0gMCkNCj4gLQkJCXJldHVybiAwOw0KPiAtCQl1ZGVsYXkoMSk7DQo+ IC0JfQ0KPiAtDQo+IC0jaWYgU0FWQUdFX0JDSV9ERUJVRw0KPiAtCURSTV9FUlJPUigiZmFp bGVkIVxuIik7DQo+IC0JRFJNX0lORk8oIiAgIHN0YXR1cz0weCUwOHgsIGU9MHglMDR4XG4i LCBzdGF0dXMsIGUpOw0KPiAtI2VuZGlmDQo+IC0NCj4gLQlyZXR1cm4gLUVCVVNZOw0KPiAt fQ0KPiAtDQo+IC11aW50MTZfdCBzYXZhZ2VfYmNpX2VtaXRfZXZlbnQoZHJtX3NhdmFnZV9w cml2YXRlX3QgKiBkZXZfcHJpdiwNCj4gLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3Mp DQo+IC17DQo+IC0JdWludDE2X3QgY291bnQ7DQo+IC0JQkNJX0xPQ0FMUzsNCj4gLQ0KPiAt CWlmIChkZXZfcHJpdi0+c3RhdHVzX3B0cikgew0KPiAtCQkvKiBjb29yZGluYXRlIHdpdGgg WHNlcnZlciAqLw0KPiAtCQljb3VudCA9IGRldl9wcml2LT5zdGF0dXNfcHRyWzEwMjNdOw0K PiAtCQlpZiAoY291bnQgPCBkZXZfcHJpdi0+ZXZlbnRfY291bnRlcikNCj4gLQkJCWRldl9w cml2LT5ldmVudF93cmFwKys7DQo+IC0JfSBlbHNlIHsNCj4gLQkJY291bnQgPSBkZXZfcHJp di0+ZXZlbnRfY291bnRlcjsNCj4gLQl9DQo+IC0JY291bnQgPSAoY291bnQgKyAxKSAmIDB4 ZmZmZjsNCj4gLQlpZiAoY291bnQgPT0gMCkgew0KPiAtCQljb3VudCsrOwkvKiBTZWUgdGhl IGNvbW1lbnQgYWJvdmUgc2F2YWdlX3dhaXRfZXZlbnRfKi4gKi8NCj4gLQkJZGV2X3ByaXYt PmV2ZW50X3dyYXArKzsNCj4gLQl9DQo+IC0JZGV2X3ByaXYtPmV2ZW50X2NvdW50ZXIgPSBj b3VudDsNCj4gLQlpZiAoZGV2X3ByaXYtPnN0YXR1c19wdHIpDQo+IC0JCWRldl9wcml2LT5z dGF0dXNfcHRyWzEwMjNdID0gKHVpbnQzMl90KSBjb3VudDsNCj4gLQ0KPiAtCWlmICgoZmxh Z3MgJiAoU0FWQUdFX1dBSVRfMkQgfCBTQVZBR0VfV0FJVF8zRCkpKSB7DQo+IC0JCXVuc2ln bmVkIGludCB3YWl0X2NtZCA9IEJDSV9DTURfV0FJVDsNCj4gLQkJaWYgKChmbGFncyAmIFNB VkFHRV9XQUlUXzJEKSkNCj4gLQkJCXdhaXRfY21kIHw9IEJDSV9DTURfV0FJVF8yRDsNCj4g LQkJaWYgKChmbGFncyAmIFNBVkFHRV9XQUlUXzNEKSkNCj4gLQkJCXdhaXRfY21kIHw9IEJD SV9DTURfV0FJVF8zRDsNCj4gLQkJQkVHSU5fQkNJKDIpOw0KPiAtCQlCQ0lfV1JJVEUod2Fp dF9jbWQpOw0KPiAtCX0gZWxzZSB7DQo+IC0JCUJFR0lOX0JDSSgxKTsNCj4gLQl9DQo+IC0J QkNJX1dSSVRFKEJDSV9DTURfVVBEQVRFX0VWRU5UX1RBRyB8ICh1aW50MzJfdCkgY291bnQp Ow0KPiAtDQo+IC0JcmV0dXJuIGNvdW50Ow0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAtICogRnJl ZWxpc3QgbWFuYWdlbWVudA0KPiAtICovDQo+IC1zdGF0aWMgaW50IHNhdmFnZV9mcmVlbGlz dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQ0KPiAtew0KPiAtCWRybV9zYXZhZ2Vf cHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0Jc3RydWN0IGRy bV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsNCj4gLQlzdHJ1Y3QgZHJtX2J1ZiAqYnVm Ow0KPiAtCWRybV9zYXZhZ2VfYnVmX3ByaXZfdCAqZW50cnk7DQo+IC0JaW50IGk7DQo+IC0J RFJNX0RFQlVHKCJjb3VudD0lZFxuIiwgZG1hLT5idWZfY291bnQpOw0KPiAtDQo+IC0JZGV2 X3ByaXYtPmhlYWQubmV4dCA9ICZkZXZfcHJpdi0+dGFpbDsNCj4gLQlkZXZfcHJpdi0+aGVh ZC5wcmV2ID0gTlVMTDsNCj4gLQlkZXZfcHJpdi0+aGVhZC5idWYgPSBOVUxMOw0KPiAtDQo+ IC0JZGV2X3ByaXYtPnRhaWwubmV4dCA9IE5VTEw7DQo+IC0JZGV2X3ByaXYtPnRhaWwucHJl diA9ICZkZXZfcHJpdi0+aGVhZDsNCj4gLQlkZXZfcHJpdi0+dGFpbC5idWYgPSBOVUxMOw0K PiAtDQo+IC0JZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsNCj4gLQkJ YnVmID0gZG1hLT5idWZsaXN0W2ldOw0KPiAtCQllbnRyeSA9IGJ1Zi0+ZGV2X3ByaXZhdGU7 DQo+IC0NCj4gLQkJU0VUX0FHRSgmZW50cnktPmFnZSwgMCwgMCk7DQo+IC0JCWVudHJ5LT5i dWYgPSBidWY7DQo+IC0NCj4gLQkJZW50cnktPm5leHQgPSBkZXZfcHJpdi0+aGVhZC5uZXh0 Ow0KPiAtCQllbnRyeS0+cHJldiA9ICZkZXZfcHJpdi0+aGVhZDsNCj4gLQkJZGV2X3ByaXYt PmhlYWQubmV4dC0+cHJldiA9IGVudHJ5Ow0KPiAtCQlkZXZfcHJpdi0+aGVhZC5uZXh0ID0g ZW50cnk7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRp YyBzdHJ1Y3QgZHJtX2J1ZiAqc2F2YWdlX2ZyZWVsaXN0X2dldChzdHJ1Y3QgZHJtX2Rldmlj ZSAqIGRldikNCj4gLXsNCj4gLQlkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOw0KPiAtCWRybV9zYXZhZ2VfYnVmX3ByaXZfdCAqdGFpbCA9IGRl dl9wcml2LT50YWlsLnByZXY7DQo+IC0JdWludDE2X3QgZXZlbnQ7DQo+IC0JdW5zaWduZWQg aW50IHdyYXA7DQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAtDQo+IC0JVVBEQVRFX0VWRU5U X0NPVU5URVIoKTsNCj4gLQlpZiAoZGV2X3ByaXYtPnN0YXR1c19wdHIpDQo+IC0JCWV2ZW50 ID0gZGV2X3ByaXYtPnN0YXR1c19wdHJbMV0gJiAweGZmZmY7DQo+IC0JZWxzZQ0KPiAtCQll dmVudCA9IFNBVkFHRV9SRUFEKFNBVkFHRV9TVEFUVVNfV09SRDEpICYgMHhmZmZmOw0KPiAt CXdyYXAgPSBkZXZfcHJpdi0+ZXZlbnRfd3JhcDsNCj4gLQlpZiAoZXZlbnQgPiBkZXZfcHJp di0+ZXZlbnRfY291bnRlcikNCj4gLQkJd3JhcC0tOwkJLyogaGFyZHdhcmUgaGFzbid0IHBh c3NlZCB0aGUgbGFzdCB3cmFwIHlldCAqLw0KPiAtDQo+IC0JRFJNX0RFQlVHKCIgICB0YWls PTB4JTA0eCAlZFxuIiwgdGFpbC0+YWdlLmV2ZW50LCB0YWlsLT5hZ2Uud3JhcCk7DQo+IC0J RFJNX0RFQlVHKCIgICBoZWFkPTB4JTA0eCAlZFxuIiwgZXZlbnQsIHdyYXApOw0KPiAtDQo+ IC0JaWYgKHRhaWwtPmJ1ZiAmJiAoVEVTVF9BR0UoJnRhaWwtPmFnZSwgZXZlbnQsIHdyYXAp IHx8IGV2ZW50ID09IDApKSB7DQo+IC0JCWRybV9zYXZhZ2VfYnVmX3ByaXZfdCAqbmV4dCA9 IHRhaWwtPm5leHQ7DQo+IC0JCWRybV9zYXZhZ2VfYnVmX3ByaXZfdCAqcHJldiA9IHRhaWwt PnByZXY7DQo+IC0JCXByZXYtPm5leHQgPSBuZXh0Ow0KPiAtCQluZXh0LT5wcmV2ID0gcHJl djsNCj4gLQkJdGFpbC0+bmV4dCA9IHRhaWwtPnByZXYgPSBOVUxMOw0KPiAtCQlyZXR1cm4g dGFpbC0+YnVmOw0KPiAtCX0NCj4gLQ0KPiAtCURSTV9ERUJVRygicmV0dXJuaW5nIE5VTEws IHRhaWwtPmJ1Zj0lcCFcbiIsIHRhaWwtPmJ1Zik7DQo+IC0JcmV0dXJuIE5VTEw7DQo+IC19 DQo+IC0NCj4gLXZvaWQgc2F2YWdlX2ZyZWVsaXN0X3B1dChzdHJ1Y3QgZHJtX2RldmljZSAq IGRldiwgc3RydWN0IGRybV9idWYgKiBidWYpDQo+IC17DQo+IC0JZHJtX3NhdmFnZV9wcml2 YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlkcm1fc2F2YWdlX2J1 Zl9wcml2X3QgKmVudHJ5ID0gYnVmLT5kZXZfcHJpdmF0ZSwgKnByZXYsICpuZXh0Ow0KPiAt DQo+IC0JRFJNX0RFQlVHKCJhZ2U9MHglMDR4IHdyYXA9JWRcbiIsIGVudHJ5LT5hZ2UuZXZl bnQsIGVudHJ5LT5hZ2Uud3JhcCk7DQo+IC0NCj4gLQlpZiAoZW50cnktPm5leHQgIT0gTlVM TCB8fCBlbnRyeS0+cHJldiAhPSBOVUxMKSB7DQo+IC0JCURSTV9FUlJPUigiZW50cnkgYWxy ZWFkeSBvbiBmcmVlbGlzdC5cbiIpOw0KPiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+IC0J cHJldiA9ICZkZXZfcHJpdi0+aGVhZDsNCj4gLQluZXh0ID0gcHJldi0+bmV4dDsNCj4gLQlw cmV2LT5uZXh0ID0gZW50cnk7DQo+IC0JbmV4dC0+cHJldiA9IGVudHJ5Ow0KPiAtCWVudHJ5 LT5wcmV2ID0gcHJldjsNCj4gLQllbnRyeS0+bmV4dCA9IG5leHQ7DQo+IC19DQo+IC0NCj4g LS8qDQo+IC0gKiBDb21tYW5kIERNQQ0KPiAtICovDQo+IC1zdGF0aWMgaW50IHNhdmFnZV9k bWFfaW5pdChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2KQ0KPiAtew0KPiAtCXVu c2lnbmVkIGludCBpOw0KPiAtDQo+IC0JZGV2X3ByaXYtPm5yX2RtYV9wYWdlcyA9IGRldl9w cml2LT5jbWRfZG1hLT5zaXplIC8NCj4gLQkgICAgKFNBVkFHRV9ETUFfUEFHRV9TSVpFICog NCk7DQo+IC0JZGV2X3ByaXYtPmRtYV9wYWdlcyA9IGttYWxsb2NfYXJyYXkoZGV2X3ByaXYt Pm5yX2RtYV9wYWdlcywNCj4gLQkJCQkJICAgIHNpemVvZihkcm1fc2F2YWdlX2RtYV9wYWdl X3QpLA0KPiAtCQkJCQkgICAgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKGRldl9wcml2LT5kbWFf cGFnZXMgPT0gTlVMTCkNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0NCj4gLQlmb3IgKGkg PSAwOyBpIDwgZGV2X3ByaXYtPm5yX2RtYV9wYWdlczsgKytpKSB7DQo+IC0JCVNFVF9BR0Uo JmRldl9wcml2LT5kbWFfcGFnZXNbaV0uYWdlLCAwLCAwKTsNCj4gLQkJZGV2X3ByaXYtPmRt YV9wYWdlc1tpXS51c2VkID0gMDsNCj4gLQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tpXS5mbHVz aGVkID0gMDsNCj4gLQl9DQo+IC0JU0VUX0FHRSgmZGV2X3ByaXYtPmxhc3RfZG1hX2FnZSwg MCwgMCk7DQo+IC0NCj4gLQlkZXZfcHJpdi0+Zmlyc3RfZG1hX3BhZ2UgPSAwOw0KPiAtCWRl dl9wcml2LT5jdXJyZW50X2RtYV9wYWdlID0gMDsNCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAt fQ0KPiAtDQo+IC12b2lkIHNhdmFnZV9kbWFfcmVzZXQoZHJtX3NhdmFnZV9wcml2YXRlX3Qg KiBkZXZfcHJpdikNCj4gLXsNCj4gLQl1aW50MTZfdCBldmVudDsNCj4gLQl1bnNpZ25lZCBp bnQgd3JhcCwgaTsNCj4gLQlldmVudCA9IHNhdmFnZV9iY2lfZW1pdF9ldmVudChkZXZfcHJp diwgMCk7DQo+IC0Jd3JhcCA9IGRldl9wcml2LT5ldmVudF93cmFwOw0KPiAtCWZvciAoaSA9 IDA7IGkgPCBkZXZfcHJpdi0+bnJfZG1hX3BhZ2VzOyArK2kpIHsNCj4gLQkJU0VUX0FHRSgm ZGV2X3ByaXYtPmRtYV9wYWdlc1tpXS5hZ2UsIGV2ZW50LCB3cmFwKTsNCj4gLQkJZGV2X3By aXYtPmRtYV9wYWdlc1tpXS51c2VkID0gMDsNCj4gLQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tp XS5mbHVzaGVkID0gMDsNCj4gLQl9DQo+IC0JU0VUX0FHRSgmZGV2X3ByaXYtPmxhc3RfZG1h X2FnZSwgZXZlbnQsIHdyYXApOw0KPiAtCWRldl9wcml2LT5maXJzdF9kbWFfcGFnZSA9IGRl dl9wcml2LT5jdXJyZW50X2RtYV9wYWdlID0gMDsNCj4gLX0NCj4gLQ0KPiAtdm9pZCBzYXZh Z2VfZG1hX3dhaXQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdW5zaWduZWQg aW50IHBhZ2UpDQo+IC17DQo+IC0JdWludDE2X3QgZXZlbnQ7DQo+IC0JdW5zaWduZWQgaW50 IHdyYXA7DQo+IC0NCj4gLQkvKiBGYWtlZCBETUEgYnVmZmVyIHBhZ2VzIGRvbid0IGFnZS4g Ki8NCj4gLQlpZiAoZGV2X3ByaXYtPmNtZF9kbWEgPT0gJmRldl9wcml2LT5mYWtlX2RtYSkN Cj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JVVBEQVRFX0VWRU5UX0NPVU5URVIoKTsNCj4gLQlp ZiAoZGV2X3ByaXYtPnN0YXR1c19wdHIpDQo+IC0JCWV2ZW50ID0gZGV2X3ByaXYtPnN0YXR1 c19wdHJbMV0gJiAweGZmZmY7DQo+IC0JZWxzZQ0KPiAtCQlldmVudCA9IFNBVkFHRV9SRUFE KFNBVkFHRV9TVEFUVVNfV09SRDEpICYgMHhmZmZmOw0KPiAtCXdyYXAgPSBkZXZfcHJpdi0+ ZXZlbnRfd3JhcDsNCj4gLQlpZiAoZXZlbnQgPiBkZXZfcHJpdi0+ZXZlbnRfY291bnRlcikN Cj4gLQkJd3JhcC0tOwkJLyogaGFyZHdhcmUgaGFzbid0IHBhc3NlZCB0aGUgbGFzdCB3cmFw IHlldCAqLw0KPiAtDQo+IC0JaWYgKGRldl9wcml2LT5kbWFfcGFnZXNbcGFnZV0uYWdlLndy YXAgPiB3cmFwIHx8DQo+IC0JICAgIChkZXZfcHJpdi0+ZG1hX3BhZ2VzW3BhZ2VdLmFnZS53 cmFwID09IHdyYXAgJiYNCj4gLQkgICAgIGRldl9wcml2LT5kbWFfcGFnZXNbcGFnZV0uYWdl LmV2ZW50ID4gZXZlbnQpKSB7DQo+IC0JCWlmIChkZXZfcHJpdi0+d2FpdF9ldm50KGRldl9w cml2LA0KPiAtCQkJCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW3BhZ2VdLmFnZS5ldmVudCkNCj4g LQkJICAgIDwgMCkNCj4gLQkJCURSTV9FUlJPUigid2FpdF9ldm50IGZhaWxlZCFcbiIpOw0K PiAtCX0NCj4gLX0NCj4gLQ0KPiAtdWludDMyX3QgKnNhdmFnZV9kbWFfYWxsb2MoZHJtX3Nh dmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdW5zaWduZWQgaW50IG4pDQo+IC17DQo+IC0J dW5zaWduZWQgaW50IGN1ciA9IGRldl9wcml2LT5jdXJyZW50X2RtYV9wYWdlOw0KPiAtCXVu c2lnbmVkIGludCByZXN0ID0gU0FWQUdFX0RNQV9QQUdFX1NJWkUgLQ0KPiAtCSAgICBkZXZf cHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZDsNCj4gLQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMg PSAobiAtIHJlc3QgKyBTQVZBR0VfRE1BX1BBR0VfU0laRSAtIDEpIC8NCj4gLQkgICAgU0FW QUdFX0RNQV9QQUdFX1NJWkU7DQo+IC0JdWludDMyX3QgKmRtYV9wdHI7DQo+IC0JdW5zaWdu ZWQgaW50IGk7DQo+IC0NCj4gLQlEUk1fREVCVUcoImN1cj0ldSwgY3VyLT51c2VkPSV1LCBu PSV1LCByZXN0PSV1LCBucl9wYWdlcz0ldVxuIiwNCj4gLQkJICBjdXIsIGRldl9wcml2LT5k bWFfcGFnZXNbY3VyXS51c2VkLCBuLCByZXN0LCBucl9wYWdlcyk7DQo+IC0NCj4gLQlpZiAo Y3VyICsgbnJfcGFnZXMgPCBkZXZfcHJpdi0+bnJfZG1hX3BhZ2VzKSB7DQo+IC0JCWRtYV9w dHIgPSAodWludDMyX3QgKikgZGV2X3ByaXYtPmNtZF9kbWEtPmhhbmRsZSArDQo+IC0JCSAg ICBjdXIgKiBTQVZBR0VfRE1BX1BBR0VfU0laRSArIGRldl9wcml2LT5kbWFfcGFnZXNbY3Vy XS51c2VkOw0KPiAtCQlpZiAobiA8IHJlc3QpDQo+IC0JCQlyZXN0ID0gbjsNCj4gLQkJZGV2 X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQgKz0gcmVzdDsNCj4gLQkJbiAtPSByZXN0Ow0K PiAtCQljdXIrKzsNCj4gLQl9IGVsc2Ugew0KPiAtCQlkZXZfcHJpdi0+ZG1hX2ZsdXNoKGRl dl9wcml2KTsNCj4gLQkJbnJfcGFnZXMgPQ0KPiAtCQkgICAgKG4gKyBTQVZBR0VfRE1BX1BB R0VfU0laRSAtIDEpIC8gU0FWQUdFX0RNQV9QQUdFX1NJWkU7DQo+IC0JCWZvciAoaSA9IGN1 cjsgaSA8IGRldl9wcml2LT5ucl9kbWFfcGFnZXM7ICsraSkgew0KPiAtCQkJZGV2X3ByaXYt PmRtYV9wYWdlc1tpXS5hZ2UgPSBkZXZfcHJpdi0+bGFzdF9kbWFfYWdlOw0KPiAtCQkJZGV2 X3ByaXYtPmRtYV9wYWdlc1tpXS51c2VkID0gMDsNCj4gLQkJCWRldl9wcml2LT5kbWFfcGFn ZXNbaV0uZmx1c2hlZCA9IDA7DQo+IC0JCX0NCj4gLQkJZG1hX3B0ciA9ICh1aW50MzJfdCAq KSBkZXZfcHJpdi0+Y21kX2RtYS0+aGFuZGxlOw0KPiAtCQlkZXZfcHJpdi0+Zmlyc3RfZG1h X3BhZ2UgPSBjdXIgPSAwOw0KPiAtCX0NCj4gLQlmb3IgKGkgPSBjdXI7IG5yX3BhZ2VzID4g MDsgKytpLCAtLW5yX3BhZ2VzKSB7DQo+IC0jaWYgU0FWQUdFX0RNQV9ERUJVRw0KPiAtCQlp ZiAoZGV2X3ByaXYtPmRtYV9wYWdlc1tpXS51c2VkKSB7DQo+IC0JCQlEUk1fRVJST1IoInVu Zmx1c2hlZCBwYWdlICV1OiB1c2VkPSV1XG4iLA0KPiAtCQkJCSAgaSwgZGV2X3ByaXYtPmRt YV9wYWdlc1tpXS51c2VkKTsNCj4gLQkJfQ0KPiAtI2VuZGlmDQo+IC0JCWlmIChuID4gU0FW QUdFX0RNQV9QQUdFX1NJWkUpDQo+IC0JCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ldLnVzZWQg PSBTQVZBR0VfRE1BX1BBR0VfU0laRTsNCj4gLQkJZWxzZQ0KPiAtCQkJZGV2X3ByaXYtPmRt YV9wYWdlc1tpXS51c2VkID0gbjsNCj4gLQkJbiAtPSBTQVZBR0VfRE1BX1BBR0VfU0laRTsN Cj4gLQl9DQo+IC0JZGV2X3ByaXYtPmN1cnJlbnRfZG1hX3BhZ2UgPSAtLWk7DQo+IC0NCj4g LQlEUk1fREVCVUcoImN1cj0ldSwgY3VyLT51c2VkPSV1LCBuPSV1XG4iLA0KPiAtCQkgIGks IGRldl9wcml2LT5kbWFfcGFnZXNbaV0udXNlZCwgbik7DQo+IC0NCj4gLQlzYXZhZ2VfZG1h X3dhaXQoZGV2X3ByaXYsIGRldl9wcml2LT5jdXJyZW50X2RtYV9wYWdlKTsNCj4gLQ0KPiAt CXJldHVybiBkbWFfcHRyOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBzYXZhZ2VfZG1h X2ZsdXNoKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYpDQo+IC17DQo+IC0JdW5z aWduZWQgaW50IGZpcnN0ID0gZGV2X3ByaXYtPmZpcnN0X2RtYV9wYWdlOw0KPiAtCXVuc2ln bmVkIGludCBjdXIgPSBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZTsNCj4gLQl1aW50MTZf dCBldmVudDsNCj4gLQl1bnNpZ25lZCBpbnQgd3JhcCwgcGFkLCBhbGlnbiwgbGVuLCBpOw0K PiAtCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOw0KPiAtCUJDSV9MT0NBTFM7DQo+IC0NCj4g LQlpZiAoZmlyc3QgPT0gY3VyICYmDQo+IC0JICAgIGRldl9wcml2LT5kbWFfcGFnZXNbY3Vy XS51c2VkID09IGRldl9wcml2LT5kbWFfcGFnZXNbY3VyXS5mbHVzaGVkKQ0KPiAtCQlyZXR1 cm47DQo+IC0NCj4gLQkvKiBwYWQgbGVuZ3RoIHRvIG11bHRpcGxlcyBvZiAyIGVudHJpZXMN Cj4gLQkgKiBhbGlnbiBzdGFydCBvZiBuZXh0IERNQSBibG9jayB0byBtdWx0aWxlcyBvZiA4 IGVudHJpZXMgKi8NCj4gLQlwYWQgPSAtZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQg JiAxOw0KPiAtCWFsaWduID0gLShkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZCArIHBh ZCkgJiA3Ow0KPiAtDQo+IC0JRFJNX0RFQlVHKCJmaXJzdD0ldSwgY3VyPSV1LCBmaXJzdC0+ Zmx1c2hlZD0ldSwgY3VyLT51c2VkPSV1LCAiDQo+IC0JCSAgInBhZD0ldSwgYWxpZ249JXVc biIsDQo+IC0JCSAgZmlyc3QsIGN1ciwgZGV2X3ByaXYtPmRtYV9wYWdlc1tmaXJzdF0uZmx1 c2hlZCwNCj4gLQkJICBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZCwgcGFkLCBhbGln bik7DQo+IC0NCj4gLQkvKiBwYWQgd2l0aCBub29wcyAqLw0KPiAtCWlmIChwYWQpIHsNCj4g LQkJdWludDMyX3QgKmRtYV9wdHIgPSAodWludDMyX3QgKikgZGV2X3ByaXYtPmNtZF9kbWEt PmhhbmRsZSArDQo+IC0JCSAgICBjdXIgKiBTQVZBR0VfRE1BX1BBR0VfU0laRSArIGRldl9w cml2LT5kbWFfcGFnZXNbY3VyXS51c2VkOw0KPiAtCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1 cl0udXNlZCArPSBwYWQ7DQo+IC0JCXdoaWxlIChwYWQgIT0gMCkgew0KPiAtCQkJKmRtYV9w dHIrKyA9IEJDSV9DTURfV0FJVDsNCj4gLQkJCXBhZC0tOw0KPiAtCQl9DQo+IC0JfQ0KPiAt DQo+IC0JbWIoKTsNCj4gLQ0KPiAtCS8qIGRvIGZsdXNoIC4uLiAqLw0KPiAtCXBoeXNfYWRk ciA9IGRldl9wcml2LT5jbWRfZG1hLT5vZmZzZXQgKw0KPiAtCSAgICAoZmlyc3QgKiBTQVZB R0VfRE1BX1BBR0VfU0laRSArDQo+IC0JICAgICBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ZpcnN0 XS5mbHVzaGVkKSAqIDQ7DQo+IC0JbGVuID0gKGN1ciAtIGZpcnN0KSAqIFNBVkFHRV9ETUFf UEFHRV9TSVpFICsNCj4gLQkgICAgZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQgLSBk ZXZfcHJpdi0+ZG1hX3BhZ2VzW2ZpcnN0XS5mbHVzaGVkOw0KPiAtDQo+IC0JRFJNX0RFQlVH KCJwaHlzX2FkZHI9JWx4LCBsZW49JXVcbiIsDQo+IC0JCSAgcGh5c19hZGRyIHwgZGV2X3By aXYtPmRtYV90eXBlLCBsZW4pOw0KPiAtDQo+IC0JQkVHSU5fQkNJKDMpOw0KPiAtCUJDSV9T RVRfUkVHSVNURVJTKFNBVkFHRV9ETUFCVUZBRERSLCAxKTsNCj4gLQlCQ0lfV1JJVEUocGh5 c19hZGRyIHwgZGV2X3ByaXYtPmRtYV90eXBlKTsNCj4gLQlCQ0lfRE1BKGxlbik7DQo+IC0N Cj4gLQkvKiBmaXggYWxpZ25tZW50IG9mIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBibG9jayAq Lw0KPiAtCWRldl9wcml2LT5kbWFfcGFnZXNbY3VyXS51c2VkICs9IGFsaWduOw0KPiAtDQo+ IC0JLyogYWdlIERNQSBwYWdlcyAqLw0KPiAtCWV2ZW50ID0gc2F2YWdlX2JjaV9lbWl0X2V2 ZW50KGRldl9wcml2LCAwKTsNCj4gLQl3cmFwID0gZGV2X3ByaXYtPmV2ZW50X3dyYXA7DQo+ IC0JZm9yIChpID0gZmlyc3Q7IGkgPCBjdXI7ICsraSkgew0KPiAtCQlTRVRfQUdFKCZkZXZf cHJpdi0+ZG1hX3BhZ2VzW2ldLmFnZSwgZXZlbnQsIHdyYXApOw0KPiAtCQlkZXZfcHJpdi0+ ZG1hX3BhZ2VzW2ldLnVzZWQgPSAwOw0KPiAtCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ldLmZs dXNoZWQgPSAwOw0KPiAtCX0NCj4gLQkvKiBhZ2UgdGhlIGN1cnJlbnQgcGFnZSBvbmx5IHdo ZW4gaXQncyBmdWxsICovDQo+IC0JaWYgKGRldl9wcml2LT5kbWFfcGFnZXNbY3VyXS51c2Vk ID09IFNBVkFHRV9ETUFfUEFHRV9TSVpFKSB7DQo+IC0JCVNFVF9BR0UoJmRldl9wcml2LT5k bWFfcGFnZXNbY3VyXS5hZ2UsIGV2ZW50LCB3cmFwKTsNCj4gLQkJZGV2X3ByaXYtPmRtYV9w YWdlc1tjdXJdLnVzZWQgPSAwOw0KPiAtCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0uZmx1 c2hlZCA9IDA7DQo+IC0JCS8qIGFkdmFuY2UgdG8gbmV4dCBwYWdlICovDQo+IC0JCWN1cisr Ow0KPiAtCQlpZiAoY3VyID09IGRldl9wcml2LT5ucl9kbWFfcGFnZXMpDQo+IC0JCQljdXIg PSAwOw0KPiAtCQlkZXZfcHJpdi0+Zmlyc3RfZG1hX3BhZ2UgPSBkZXZfcHJpdi0+Y3VycmVu dF9kbWFfcGFnZSA9IGN1cjsNCj4gLQl9IGVsc2Ugew0KPiAtCQlkZXZfcHJpdi0+Zmlyc3Rf ZG1hX3BhZ2UgPSBjdXI7DQo+IC0JCWRldl9wcml2LT5kbWFfcGFnZXNbY3VyXS5mbHVzaGVk ID0gZGV2X3ByaXYtPmRtYV9wYWdlc1tpXS51c2VkOw0KPiAtCX0NCj4gLQlTRVRfQUdFKCZk ZXZfcHJpdi0+bGFzdF9kbWFfYWdlLCBldmVudCwgd3JhcCk7DQo+IC0NCj4gLQlEUk1fREVC VUcoImZpcnN0PWN1cj0ldSwgY3VyLT51c2VkPSV1LCBjdXItPmZsdXNoZWQ9JXVcbiIsIGN1 ciwNCj4gLQkJICBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZCwNCj4gLQkJICBkZXZf cHJpdi0+ZG1hX3BhZ2VzW2N1cl0uZmx1c2hlZCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2 b2lkIHNhdmFnZV9mYWtlX2RtYV9mbHVzaChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9w cml2KQ0KPiAtew0KPiAtCXVuc2lnbmVkIGludCBpLCBqOw0KPiAtCUJDSV9MT0NBTFM7DQo+ IC0NCj4gLQlpZiAoZGV2X3ByaXYtPmZpcnN0X2RtYV9wYWdlID09IGRldl9wcml2LT5jdXJy ZW50X2RtYV9wYWdlICYmDQo+IC0JICAgIGRldl9wcml2LT5kbWFfcGFnZXNbZGV2X3ByaXYt PmN1cnJlbnRfZG1hX3BhZ2VdLnVzZWQgPT0gMCkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0J RFJNX0RFQlVHKCJmaXJzdD0ldSwgY3VyPSV1LCBjdXItPnVzZWQ9JXVcbiIsDQo+IC0JCSAg ZGV2X3ByaXYtPmZpcnN0X2RtYV9wYWdlLCBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZSwN Cj4gLQkJICBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2Rldl9wcml2LT5jdXJyZW50X2RtYV9wYWdl XS51c2VkKTsNCj4gLQ0KPiAtCWZvciAoaSA9IGRldl9wcml2LT5maXJzdF9kbWFfcGFnZTsN Cj4gLQkgICAgIGkgPD0gZGV2X3ByaXYtPmN1cnJlbnRfZG1hX3BhZ2UgJiYgZGV2X3ByaXYt PmRtYV9wYWdlc1tpXS51c2VkOw0KPiAtCSAgICAgKytpKSB7DQo+IC0JCXVpbnQzMl90ICpk bWFfcHRyID0gKHVpbnQzMl90ICopIGRldl9wcml2LT5jbWRfZG1hLT5oYW5kbGUgKw0KPiAt CQkgICAgaSAqIFNBVkFHRV9ETUFfUEFHRV9TSVpFOw0KPiAtI2lmIFNBVkFHRV9ETUFfREVC VUcNCj4gLQkJLyogU2FuaXR5IGNoZWNrOiBhbGwgcGFnZXMgZXhjZXB0IHRoZSBsYXN0IG9u ZSBtdXN0IGJlIGZ1bGwuICovDQo+IC0JCWlmIChpIDwgZGV2X3ByaXYtPmN1cnJlbnRfZG1h X3BhZ2UgJiYNCj4gLQkJICAgIGRldl9wcml2LT5kbWFfcGFnZXNbaV0udXNlZCAhPSBTQVZB R0VfRE1BX1BBR0VfU0laRSkgew0KPiAtCQkJRFJNX0VSUk9SKCJwYXJ0aWFsIERNQSBwYWdl ICV1OiB1c2VkPSV1IiwNCj4gLQkJCQkgIGksIGRldl9wcml2LT5kbWFfcGFnZXNbaV0udXNl ZCk7DQo+IC0JCX0NCj4gLSNlbmRpZg0KPiAtCQlCRUdJTl9CQ0koZGV2X3ByaXYtPmRtYV9w YWdlc1tpXS51c2VkKTsNCj4gLQkJZm9yIChqID0gMDsgaiA8IGRldl9wcml2LT5kbWFfcGFn ZXNbaV0udXNlZDsgKytqKSB7DQo+IC0JCQlCQ0lfV1JJVEUoZG1hX3B0cltqXSk7DQo+IC0J CX0NCj4gLQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tpXS51c2VkID0gMDsNCj4gLQl9DQo+IC0N Cj4gLQkvKiByZXNldCB0byBmaXJzdCBwYWdlICovDQo+IC0JZGV2X3ByaXYtPmZpcnN0X2Rt YV9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfZG1hX3BhZ2UgPSAwOw0KPiAtfQ0KPiAtDQo+ IC1pbnQgc2F2YWdlX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2ln bmVkIGxvbmcgY2hpcHNldCkNCj4gLXsNCj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRv X3BjaV9kZXYoZGV2LT5kZXYpOw0KPiAtCWRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJp djsNCj4gLQ0KPiAtCWRldl9wcml2ID0ga3phbGxvYyhzaXplb2YoZHJtX3NhdmFnZV9wcml2 YXRlX3QpLCBHRlBfS0VSTkVMKTsNCj4gLQlpZiAoZGV2X3ByaXYgPT0gTlVMTCkNCj4gLQkJ cmV0dXJuIC1FTk9NRU07DQo+IC0NCj4gLQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilk ZXZfcHJpdjsNCj4gLQ0KPiAtCWRldl9wcml2LT5jaGlwc2V0ID0gKGVudW0gc2F2YWdlX2Zh bWlseSljaGlwc2V0Ow0KPiAtDQo+IC0JcGNpX3NldF9tYXN0ZXIocGRldik7DQo+IC0NCj4g LQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtDQo+IC0vKg0KPiAtICogSW5pdGlhbGl6ZSBt YXBwaW5ncy4gT24gU2F2YWdlNCBhbmQgU2F2YWdlSVggdGhlIGFsaWdubWVudA0KPiAtICog YW5kIHNpemUgb2YgdGhlIGFwZXJ0dXJlIGlzIG5vdCBzdWl0YWJsZSBmb3IgYXV0b21hdGlj IE1UUlIgc2V0dXANCj4gLSAqIGluIGRybV9sZWdhY3lfYWRkbWFwLiBUaGVyZWZvcmUgd2Ug YWRkIHRoZW0gbWFudWFsbHkgYmVmb3JlIHRoZSBtYXBzIGFyZQ0KPiAtICogaW5pdGlhbGl6 ZWQsIGFuZCB0ZWFyIHRoZW0gZG93biBvbiBsYXN0IGNsb3NlLg0KPiAtICovDQo+IC1pbnQg c2F2YWdlX2RyaXZlcl9maXJzdG9wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsN Cj4gLQlkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Ow0KPiAtCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPmRldik7DQo+ IC0JdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2UsIGZiX2Jhc2UsIGZiX3NpemUsIGFwZXJ0dXJl X2Jhc2U7DQo+IC0JaW50IHJldCA9IDA7DQo+IC0NCj4gLQlpZiAoUzNfU0FWQUdFM0RfU0VS SUVTKGRldl9wcml2LT5jaGlwc2V0KSkgew0KPiAtCQlmYl9iYXNlID0gcGNpX3Jlc291cmNl X3N0YXJ0KHBkZXYsIDApOw0KPiAtCQlmYl9zaXplID0gU0FWQUdFX0ZCX1NJWkVfUzM7DQo+ IC0JCW1taW9fYmFzZSA9IGZiX2Jhc2UgKyBTQVZBR0VfRkJfU0laRV9TMzsNCj4gLQkJYXBl cnR1cmVfYmFzZSA9IGZiX2Jhc2UgKyBTQVZBR0VfQVBFUlRVUkVfT0ZGU0VUOw0KPiAtCQkv KiB0aGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSAqLw0KPiAtCQlpZiAocGNpX3Jlc291cmNl X2xlbihwZGV2LCAwKSA9PSAweDA4MDAwMDAwKSB7DQo+IC0JCQkvKiBEb24ndCBtYWtlIE1N SU8gd3JpdGUtY29iaW5pbmchIFdlIG5lZWQgMw0KPiAtCQkJICogTVRSUnMuICovDQo+IC0J CQlkZXZfcHJpdi0+bXRycl9oYW5kbGVzWzBdID0NCj4gLQkJCQlhcmNoX3BoeXNfd2NfYWRk KGZiX2Jhc2UsIDB4MDEwMDAwMDApOw0KPiAtCQkJZGV2X3ByaXYtPm10cnJfaGFuZGxlc1sx XSA9DQo+IC0JCQkJYXJjaF9waHlzX3djX2FkZChmYl9iYXNlICsgMHgwMjAwMDAwMCwNCj4g LQkJCQkJCSAweDAyMDAwMDAwKTsNCj4gLQkJCWRldl9wcml2LT5tdHJyX2hhbmRsZXNbMl0g PQ0KPiAtCQkJCWFyY2hfcGh5c193Y19hZGQoZmJfYmFzZSArIDB4MDQwMDAwMDAsDQo+IC0J CQkJCQkweDA0MDAwMDAwKTsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCURSTV9FUlJPUigic3Ry YW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGxseFxuIiwNCj4gLQkJCQkgICh1bnNpZ25lZCBs b25nIGxvbmcpDQo+IC0JCQkJICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsNCj4gLQkJ fQ0KPiAtCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gUzNfU1VQRVJTQVZBR0Ug JiYNCj4gLQkJICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gUzNfU0FWQUdFMjAwMCkgew0KPiAt CQltbWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7DQo+IC0JCWZiX2Jh c2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7DQo+IC0JCWZiX3NpemUgPSBTQVZB R0VfRkJfU0laRV9TNDsNCj4gLQkJYXBlcnR1cmVfYmFzZSA9IGZiX2Jhc2UgKyBTQVZBR0Vf QVBFUlRVUkVfT0ZGU0VUOw0KPiAtCQkvKiB0aGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSAq Lw0KPiAtCQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSA9PSAweDA4MDAwMDAwKSB7 DQo+IC0JCQkvKiBDYW4gdXNlIG9uZSBNVFJSIHRvIGNvdmVyIGJvdGggZmIgYW5kDQo+IC0J CQkgKiBhcGVydHVyZS4gKi8NCj4gLQkJCWRldl9wcml2LT5tdHJyX2hhbmRsZXNbMF0gPQ0K PiAtCQkJCWFyY2hfcGh5c193Y19hZGQoZmJfYmFzZSwNCj4gLQkJCQkJCSAweDA4MDAwMDAw KTsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3Vy Y2VfbGVuICUwOGxseFxuIiwNCj4gLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpDQo+IC0J CQkJICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpKTsNCj4gLQkJfQ0KPiAtCX0gZWxzZSB7 DQo+IC0JCW1taW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsNCj4gLQkJ ZmJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsNCj4gLQkJZmJfc2l6ZSA9 IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7DQo+IC0JCWFwZXJ0dXJlX2Jhc2UgPSBwY2lf cmVzb3VyY2Vfc3RhcnQocGRldiwgMik7DQo+IC0JCS8qIEF1dG9tYXRpYyBNVFJSIHNldHVw IHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLiAqLw0KPiAtCX0NCj4gLQ0KPiAtCXJldCA9IGRy bV9sZWdhY3lfYWRkbWFwKGRldiwgbW1pb19iYXNlLCBTQVZBR0VfTU1JT19TSVpFLA0KPiAt CQkJCV9EUk1fUkVHSVNURVJTLCBfRFJNX1JFQURfT05MWSwNCj4gLQkJCQkmZGV2X3ByaXYt Pm1taW8pOw0KPiAtCWlmIChyZXQpDQo+IC0JCXJldHVybiByZXQ7DQo+IC0NCj4gLQlyZXQg PSBkcm1fbGVnYWN5X2FkZG1hcChkZXYsIGZiX2Jhc2UsIGZiX3NpemUsIF9EUk1fRlJBTUVf QlVGRkVSLA0KPiAtCQkJCV9EUk1fV1JJVEVfQ09NQklOSU5HLCAmZGV2X3ByaXYtPmZiKTsN Cj4gLQlpZiAocmV0KQ0KPiAtCQlyZXR1cm4gcmV0Ow0KPiAtDQo+IC0JcmV0ID0gZHJtX2xl Z2FjeV9hZGRtYXAoZGV2LCBhcGVydHVyZV9iYXNlLCBTQVZBR0VfQVBFUlRVUkVfU0laRSwN Cj4gLQkJCQlfRFJNX0ZSQU1FX0JVRkZFUiwgX0RSTV9XUklURV9DT01CSU5JTkcsDQo+IC0J CQkJJmRldl9wcml2LT5hcGVydHVyZSk7DQo+IC0JcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0K PiAtLyoNCj4gLSAqIERlbGV0ZSBNVFJScyBhbmQgZnJlZSBkZXZpY2UtcHJpdmF0ZSBkYXRh Lg0KPiAtICovDQo+IC12b2lkIHNhdmFnZV9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7 IGkgPCAzOyArK2kpIHsNCj4gLQkJYXJjaF9waHlzX3djX2RlbChkZXZfcHJpdi0+bXRycl9o YW5kbGVzW2ldKTsNCj4gLQkJZGV2X3ByaXYtPm10cnJfaGFuZGxlc1tpXSA9IDA7DQo+IC0J fQ0KPiAtfQ0KPiAtDQo+IC12b2lkIHNhdmFnZV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCWtmcmVlKGRldl9wcml2KTsNCj4gLX0N Cj4gLQ0KPiAtc3RhdGljIGludCBzYXZhZ2VfZG9faW5pdF9iY2koc3RydWN0IGRybV9kZXZp Y2UgKiBkZXYsIGRybV9zYXZhZ2VfaW5pdF90ICogaW5pdCkNCj4gLXsNCj4gLQlkcm1fc2F2 YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0J aWYgKGluaXQtPmZiX2JwcCAhPSAxNiAmJiBpbml0LT5mYl9icHAgIT0gMzIpIHsNCj4gLQkJ RFJNX0VSUk9SKCJpbnZhbGlkIGZyYW1lIGJ1ZmZlciBicHAgJWQhXG4iLCBpbml0LT5mYl9i cHApOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0JaWYgKGluaXQtPmRlcHRo X2JwcCAhPSAxNiAmJiBpbml0LT5kZXB0aF9icHAgIT0gMzIpIHsNCj4gLQkJRFJNX0VSUk9S KCJpbnZhbGlkIGRlcHRoIGJ1ZmZlciBicHAgJWQhXG4iLCBpbml0LT5mYl9icHApOw0KPiAt CQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0JaWYgKGluaXQtPmRtYV90eXBlICE9IFNB VkFHRV9ETUFfQUdQICYmDQo+IC0JICAgIGluaXQtPmRtYV90eXBlICE9IFNBVkFHRV9ETUFf UENJKSB7DQo+IC0JCURSTV9FUlJPUigiaW52YWxpZCBkbWEgbWVtb3J5IHR5cGUgJWQhXG4i LCBpbml0LT5kbWFfdHlwZSk7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0K PiAtCWRldl9wcml2LT5jb2Jfc2l6ZSA9IGluaXQtPmNvYl9zaXplOw0KPiAtCWRldl9wcml2 LT5iY2lfdGhyZXNob2xkX2xvID0gaW5pdC0+YmNpX3RocmVzaG9sZF9sbzsNCj4gLQlkZXZf cHJpdi0+YmNpX3RocmVzaG9sZF9oaSA9IGluaXQtPmJjaV90aHJlc2hvbGRfaGk7DQo+IC0J ZGV2X3ByaXYtPmRtYV90eXBlID0gaW5pdC0+ZG1hX3R5cGU7DQo+IC0NCj4gLQlkZXZfcHJp di0+ZmJfYnBwID0gaW5pdC0+ZmJfYnBwOw0KPiAtCWRldl9wcml2LT5mcm9udF9vZmZzZXQg PSBpbml0LT5mcm9udF9vZmZzZXQ7DQo+IC0JZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5p dC0+ZnJvbnRfcGl0Y2g7DQo+IC0JZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFj a19vZmZzZXQ7DQo+IC0JZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNo Ow0KPiAtCWRldl9wcml2LT5kZXB0aF9icHAgPSBpbml0LT5kZXB0aF9icHA7DQo+IC0JZGV2 X3ByaXYtPmRlcHRoX29mZnNldCA9IGluaXQtPmRlcHRoX29mZnNldDsNCj4gLQlkZXZfcHJp di0+ZGVwdGhfcGl0Y2ggPSBpbml0LT5kZXB0aF9waXRjaDsNCj4gLQ0KPiAtCWRldl9wcml2 LT50ZXh0dXJlX29mZnNldCA9IGluaXQtPnRleHR1cmVfb2Zmc2V0Ow0KPiAtCWRldl9wcml2 LT50ZXh0dXJlX3NpemUgPSBpbml0LT50ZXh0dXJlX3NpemU7DQo+IC0NCj4gLQlkZXZfcHJp di0+c2FyZWEgPSBkcm1fbGVnYWN5X2dldHNhcmVhKGRldik7DQo+IC0JaWYgKCFkZXZfcHJp di0+c2FyZWEpIHsNCj4gLQkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBzYXJlYSFcbiIp Ow0KPiAtCQlzYXZhZ2VfZG9fY2xlYW51cF9iY2koZGV2KTsNCj4gLQkJcmV0dXJuIC1FSU5W QUw7DQo+IC0JfQ0KPiAtCWlmIChpbml0LT5zdGF0dXNfb2Zmc2V0ICE9IDApIHsNCj4gLQkJ ZGV2X3ByaXYtPnN0YXR1cyA9IGRybV9sZWdhY3lfZmluZG1hcChkZXYsIGluaXQtPnN0YXR1 c19vZmZzZXQpOw0KPiAtCQlpZiAoIWRldl9wcml2LT5zdGF0dXMpIHsNCj4gLQkJCURSTV9F UlJPUigiY291bGQgbm90IGZpbmQgc2hhZG93IHN0YXR1cyByZWdpb24hXG4iKTsNCj4gLQkJ CXNhdmFnZV9kb19jbGVhbnVwX2JjaShkZXYpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JCX0NCj4gLQl9IGVsc2Ugew0KPiAtCQlkZXZfcHJpdi0+c3RhdHVzID0gTlVMTDsNCj4g LQl9DQo+IC0JaWYgKGRldl9wcml2LT5kbWFfdHlwZSA9PSBTQVZBR0VfRE1BX0FHUCAmJiBp bml0LT5idWZmZXJzX29mZnNldCkgew0KPiAtCQlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBp bml0LT5idWZmZXJzX29mZnNldDsNCj4gLQkJZGV2LT5hZ3BfYnVmZmVyX21hcCA9IGRybV9s ZWdhY3lfZmluZG1hcChkZXYsDQo+IC0JCQkJCQkgICAgICAgaW5pdC0+YnVmZmVyc19vZmZz ZXQpOw0KPiAtCQlpZiAoIWRldi0+YWdwX2J1ZmZlcl9tYXApIHsNCj4gLQkJCURSTV9FUlJP UigiY291bGQgbm90IGZpbmQgRE1BIGJ1ZmZlciByZWdpb24hXG4iKTsNCj4gLQkJCXNhdmFn ZV9kb19jbGVhbnVwX2JjaShkZXYpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCX0N Cj4gLQkJZHJtX2xlZ2FjeV9pb3JlbWFwKGRldi0+YWdwX2J1ZmZlcl9tYXAsIGRldik7DQo+ IC0JCWlmICghZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlKSB7DQo+IC0JCQlEUk1fRVJS T1IoImZhaWxlZCB0byBpb3JlbWFwIERNQSBidWZmZXIgcmVnaW9uIVxuIik7DQo+IC0JCQlz YXZhZ2VfZG9fY2xlYW51cF9iY2koZGV2KTsNCj4gLQkJCXJldHVybiAtRU5PTUVNOw0KPiAt CQl9DQo+IC0JfQ0KPiAtCWlmIChpbml0LT5hZ3BfdGV4dHVyZXNfb2Zmc2V0KSB7DQo+IC0J CWRldl9wcml2LT5hZ3BfdGV4dHVyZXMgPQ0KPiAtCQkgICAgZHJtX2xlZ2FjeV9maW5kbWFw KGRldiwgaW5pdC0+YWdwX3RleHR1cmVzX29mZnNldCk7DQo+IC0JCWlmICghZGV2X3ByaXYt PmFncF90ZXh0dXJlcykgew0KPiAtCQkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBhZ3Ag dGV4dHVyZSByZWdpb24hXG4iKTsNCj4gLQkJCXNhdmFnZV9kb19jbGVhbnVwX2JjaShkZXYp Ow0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCX0NCj4gLQl9IGVsc2Ugew0KPiAtCQlk ZXZfcHJpdi0+YWdwX3RleHR1cmVzID0gTlVMTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoaW5p dC0+Y21kX2RtYV9vZmZzZXQpIHsNCj4gLQkJaWYgKFMzX1NBVkFHRTNEX1NFUklFUyhkZXZf cHJpdi0+Y2hpcHNldCkpIHsNCj4gLQkJCURSTV9FUlJPUigiY29tbWFuZCBETUEgbm90IHN1 cHBvcnRlZCBvbiAiDQo+IC0JCQkJICAiU2F2YWdlM0QvTVgvSVguXG4iKTsNCj4gLQkJCXNh dmFnZV9kb19jbGVhbnVwX2JjaShkZXYpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0J CX0NCj4gLQkJaWYgKGRldi0+ZG1hICYmIGRldi0+ZG1hLT5idWZsaXN0KSB7DQo+IC0JCQlE Uk1fRVJST1IoImNvbW1hbmQgYW5kIHZlcnRleCBETUEgbm90IHN1cHBvcnRlZCAiDQo+IC0J CQkJICAiYXQgdGhlIHNhbWUgdGltZS5cbiIpOw0KPiAtCQkJc2F2YWdlX2RvX2NsZWFudXBf YmNpKGRldik7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlkZXZfcHJp di0+Y21kX2RtYSA9IGRybV9sZWdhY3lfZmluZG1hcChkZXYsIGluaXQtPmNtZF9kbWFfb2Zm c2V0KTsNCj4gLQkJaWYgKCFkZXZfcHJpdi0+Y21kX2RtYSkgew0KPiAtCQkJRFJNX0VSUk9S KCJjb3VsZCBub3QgZmluZCBjb21tYW5kIERNQSByZWdpb24hXG4iKTsNCj4gLQkJCXNhdmFn ZV9kb19jbGVhbnVwX2JjaShkZXYpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCX0N Cj4gLQkJaWYgKGRldl9wcml2LT5kbWFfdHlwZSA9PSBTQVZBR0VfRE1BX0FHUCkgew0KPiAt CQkJaWYgKGRldl9wcml2LT5jbWRfZG1hLT50eXBlICE9IF9EUk1fQUdQKSB7DQo+IC0JCQkJ RFJNX0VSUk9SKCJBR1AgY29tbWFuZCBETUEgcmVnaW9uIGlzIG5vdCBhICINCj4gLQkJCQkJ ICAiX0RSTV9BR1AgbWFwIVxuIik7DQo+IC0JCQkJc2F2YWdlX2RvX2NsZWFudXBfYmNpKGRl dik7DQo+IC0JCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCQl9DQo+IC0JCQlkcm1fbGVnYWN5 X2lvcmVtYXAoZGV2X3ByaXYtPmNtZF9kbWEsIGRldik7DQo+IC0JCQlpZiAoIWRldl9wcml2 LT5jbWRfZG1hLT5oYW5kbGUpIHsNCj4gLQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBpb3Jl bWFwIGNvbW1hbmQgIg0KPiAtCQkJCQkgICJETUEgcmVnaW9uIVxuIik7DQo+IC0JCQkJc2F2 YWdlX2RvX2NsZWFudXBfYmNpKGRldik7DQo+IC0JCQkJcmV0dXJuIC1FTk9NRU07DQo+IC0J CQl9DQo+IC0JCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNtZF9kbWEtPnR5cGUgIT0gX0RSTV9D T05TSVNURU5UKSB7DQo+IC0JCQlEUk1fRVJST1IoIlBDSSBjb21tYW5kIERNQSByZWdpb24g aXMgbm90IGEgIg0KPiAtCQkJCSAgIl9EUk1fQ09OU0lTVEVOVCBtYXAhXG4iKTsNCj4gLQkJ CXNhdmFnZV9kb19jbGVhbnVwX2JjaShkZXYpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JCX0NCj4gLQl9IGVsc2Ugew0KPiAtCQlkZXZfcHJpdi0+Y21kX2RtYSA9IE5VTEw7DQo+ IC0JfQ0KPiAtDQo+IC0JZGV2X3ByaXYtPmRtYV9mbHVzaCA9IHNhdmFnZV9kbWFfZmx1c2g7 DQo+IC0JaWYgKCFkZXZfcHJpdi0+Y21kX2RtYSkgew0KPiAtCQlEUk1fREVCVUcoImZhbGxp bmcgYmFjayB0byBmYWtlZCBjb21tYW5kIERNQS5cbiIpOw0KPiAtCQlkZXZfcHJpdi0+ZmFr ZV9kbWEub2Zmc2V0ID0gMDsNCj4gLQkJZGV2X3ByaXYtPmZha2VfZG1hLnNpemUgPSBTQVZB R0VfRkFLRV9ETUFfU0laRTsNCj4gLQkJZGV2X3ByaXYtPmZha2VfZG1hLnR5cGUgPSBfRFJN X1NITTsNCj4gLQkJZGV2X3ByaXYtPmZha2VfZG1hLmhhbmRsZSA9IGttYWxsb2MoU0FWQUdF X0ZBS0VfRE1BX1NJWkUsDQo+IC0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7DQo+IC0JCWlmICgh ZGV2X3ByaXYtPmZha2VfZG1hLmhhbmRsZSkgew0KPiAtCQkJRFJNX0VSUk9SKCJjb3VsZCBu b3QgYWxsb2NhdGUgZmFrZWQgRE1BIGJ1ZmZlciFcbiIpOw0KPiAtCQkJc2F2YWdlX2RvX2Ns ZWFudXBfYmNpKGRldik7DQo+IC0JCQlyZXR1cm4gLUVOT01FTTsNCj4gLQkJfQ0KPiAtCQlk ZXZfcHJpdi0+Y21kX2RtYSA9ICZkZXZfcHJpdi0+ZmFrZV9kbWE7DQo+IC0JCWRldl9wcml2 LT5kbWFfZmx1c2ggPSBzYXZhZ2VfZmFrZV9kbWFfZmx1c2g7DQo+IC0JfQ0KPiAtDQo+IC0J ZGV2X3ByaXYtPnNhcmVhX3ByaXYgPQ0KPiAtCSAgICAoZHJtX3NhdmFnZV9zYXJlYV90ICop ICgodWludDhfdCAqKSBkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArDQo+IC0JCQkJICAgIGlu aXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsNCj4gLQ0KPiAtCS8qIHNldHVwIGJpdG1hcCBkZXNj cmlwdG9ycyAqLw0KPiAtCXsNCj4gLQkJdW5zaWduZWQgaW50IGNvbG9yX3RpbGVfZm9ybWF0 Ow0KPiAtCQl1bnNpZ25lZCBpbnQgZGVwdGhfdGlsZV9mb3JtYXQ7DQo+IC0JCXVuc2lnbmVk IGludCBmcm9udF9zdHJpZGUsIGJhY2tfc3RyaWRlLCBkZXB0aF9zdHJpZGU7DQo+IC0JCWlm IChkZXZfcHJpdi0+Y2hpcHNldCA8PSBTM19TQVZBR0U0KSB7DQo+IC0JCQljb2xvcl90aWxl X2Zvcm1hdCA9IGRldl9wcml2LT5mYl9icHAgPT0gMTYgPw0KPiAtCQkJICAgIFNBVkFHRV9C RF9USUxFXzE2QlBQIDogU0FWQUdFX0JEX1RJTEVfMzJCUFA7DQo+IC0JCQlkZXB0aF90aWxl X2Zvcm1hdCA9IGRldl9wcml2LT5kZXB0aF9icHAgPT0gMTYgPw0KPiAtCQkJICAgIFNBVkFH RV9CRF9USUxFXzE2QlBQIDogU0FWQUdFX0JEX1RJTEVfMzJCUFA7DQo+IC0JCX0gZWxzZSB7 DQo+IC0JCQljb2xvcl90aWxlX2Zvcm1hdCA9IFNBVkFHRV9CRF9USUxFX0RFU1Q7DQo+IC0J CQlkZXB0aF90aWxlX2Zvcm1hdCA9IFNBVkFHRV9CRF9USUxFX0RFU1Q7DQo+IC0JCX0NCj4g LQkJZnJvbnRfc3RyaWRlID0gZGV2X3ByaXYtPmZyb250X3BpdGNoIC8gKGRldl9wcml2LT5m Yl9icHAgLyA4KTsNCj4gLQkJYmFja19zdHJpZGUgPSBkZXZfcHJpdi0+YmFja19waXRjaCAv IChkZXZfcHJpdi0+ZmJfYnBwIC8gOCk7DQo+IC0JCWRlcHRoX3N0cmlkZSA9DQo+IC0JCSAg ICBkZXZfcHJpdi0+ZGVwdGhfcGl0Y2ggLyAoZGV2X3ByaXYtPmRlcHRoX2JwcCAvIDgpOw0K PiAtDQo+IC0JCWRldl9wcml2LT5mcm9udF9iZCA9IGZyb250X3N0cmlkZSB8IFNBVkFHRV9C RF9CV19ESVNBQkxFIHwNCj4gLQkJICAgIChkZXZfcHJpdi0+ZmJfYnBwIDw8IFNBVkFHRV9C RF9CUFBfU0hJRlQpIHwNCj4gLQkJICAgIChjb2xvcl90aWxlX2Zvcm1hdCA8PCBTQVZBR0Vf QkRfVElMRV9TSElGVCk7DQo+IC0NCj4gLQkJZGV2X3ByaXYtPmJhY2tfYmQgPSBiYWNrX3N0 cmlkZSB8IFNBVkFHRV9CRF9CV19ESVNBQkxFIHwNCj4gLQkJICAgIChkZXZfcHJpdi0+ZmJf YnBwIDw8IFNBVkFHRV9CRF9CUFBfU0hJRlQpIHwNCj4gLQkJICAgIChjb2xvcl90aWxlX2Zv cm1hdCA8PCBTQVZBR0VfQkRfVElMRV9TSElGVCk7DQo+IC0NCj4gLQkJZGV2X3ByaXYtPmRl cHRoX2JkID0gZGVwdGhfc3RyaWRlIHwgU0FWQUdFX0JEX0JXX0RJU0FCTEUgfA0KPiAtCQkg ICAgKGRldl9wcml2LT5kZXB0aF9icHAgPDwgU0FWQUdFX0JEX0JQUF9TSElGVCkgfA0KPiAt CQkgICAgKGRlcHRoX3RpbGVfZm9ybWF0IDw8IFNBVkFHRV9CRF9USUxFX1NISUZUKTsNCj4g LQl9DQo+IC0NCj4gLQkvKiBzZXR1cCBzdGF0dXMgYW5kIGJjaSBwdHIgKi8NCj4gLQlkZXZf cHJpdi0+ZXZlbnRfY291bnRlciA9IDA7DQo+IC0JZGV2X3ByaXYtPmV2ZW50X3dyYXAgPSAw Ow0KPiAtCWRldl9wcml2LT5iY2lfcHRyID0gKHZvbGF0aWxlIHVpbnQzMl90ICopDQo+IC0J ICAgICgodWludDhfdCAqKSBkZXZfcHJpdi0+bW1pby0+aGFuZGxlICsgU0FWQUdFX0JDSV9P RkZTRVQpOw0KPiAtCWlmIChTM19TQVZBR0UzRF9TRVJJRVMoZGV2X3ByaXYtPmNoaXBzZXQp KSB7DQo+IC0JCWRldl9wcml2LT5zdGF0dXNfdXNlZF9tYXNrID0gU0FWQUdFX0ZJRk9fVVNF RF9NQVNLX1MzRDsNCj4gLQl9IGVsc2Ugew0KPiAtCQlkZXZfcHJpdi0+c3RhdHVzX3VzZWRf bWFzayA9IFNBVkFHRV9GSUZPX1VTRURfTUFTS19TNDsNCj4gLQl9DQo+IC0JaWYgKGRldl9w cml2LT5zdGF0dXMgIT0gTlVMTCkgew0KPiAtCQlkZXZfcHJpdi0+c3RhdHVzX3B0ciA9DQo+ IC0JCSAgICAodm9sYXRpbGUgdWludDMyX3QgKilkZXZfcHJpdi0+c3RhdHVzLT5oYW5kbGU7 DQo+IC0JCWRldl9wcml2LT53YWl0X2ZpZm8gPSBzYXZhZ2VfYmNpX3dhaXRfZmlmb19zaGFk b3c7DQo+IC0JCWRldl9wcml2LT53YWl0X2V2bnQgPSBzYXZhZ2VfYmNpX3dhaXRfZXZlbnRf c2hhZG93Ow0KPiAtCQlkZXZfcHJpdi0+c3RhdHVzX3B0clsxMDIzXSA9IGRldl9wcml2LT5l dmVudF9jb3VudGVyOw0KPiAtCX0gZWxzZSB7DQo+IC0JCWRldl9wcml2LT5zdGF0dXNfcHRy ID0gTlVMTDsNCj4gLQkJaWYgKFMzX1NBVkFHRTNEX1NFUklFUyhkZXZfcHJpdi0+Y2hpcHNl dCkpIHsNCj4gLQkJCWRldl9wcml2LT53YWl0X2ZpZm8gPSBzYXZhZ2VfYmNpX3dhaXRfZmlm b19zM2Q7DQo+IC0JCX0gZWxzZSB7DQo+IC0JCQlkZXZfcHJpdi0+d2FpdF9maWZvID0gc2F2 YWdlX2JjaV93YWl0X2ZpZm9fczQ7DQo+IC0JCX0NCj4gLQkJZGV2X3ByaXYtPndhaXRfZXZu dCA9IHNhdmFnZV9iY2lfd2FpdF9ldmVudF9yZWc7DQo+IC0JfQ0KPiAtDQo+IC0JLyogY2xp cHJlY3QgZnVuY3Rpb25zICovDQo+IC0JaWYgKFMzX1NBVkFHRTNEX1NFUklFUyhkZXZfcHJp di0+Y2hpcHNldCkpDQo+IC0JCWRldl9wcml2LT5lbWl0X2NsaXBfcmVjdCA9IHNhdmFnZV9l bWl0X2NsaXBfcmVjdF9zM2Q7DQo+IC0JZWxzZQ0KPiAtCQlkZXZfcHJpdi0+ZW1pdF9jbGlw X3JlY3QgPSBzYXZhZ2VfZW1pdF9jbGlwX3JlY3RfczQ7DQo+IC0NCj4gLQlpZiAoc2F2YWdl X2ZyZWVsaXN0X2luaXQoZGV2KSA8IDApIHsNCj4gLQkJRFJNX0VSUk9SKCJjb3VsZCBub3Qg aW5pdGlhbGl6ZSBmcmVlbGlzdFxuIik7DQo+IC0JCXNhdmFnZV9kb19jbGVhbnVwX2JjaShk ZXYpOw0KPiAtCQlyZXR1cm4gLUVOT01FTTsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoc2F2YWdl X2RtYV9pbml0KGRldl9wcml2KSA8IDApIHsNCj4gLQkJRFJNX0VSUk9SKCJjb3VsZCBub3Qg aW5pdGlhbGl6ZSBjb21tYW5kIERNQVxuIik7DQo+IC0JCXNhdmFnZV9kb19jbGVhbnVwX2Jj aShkZXYpOw0KPiAtCQlyZXR1cm4gLUVOT01FTTsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4g MDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzYXZhZ2VfZG9fY2xlYW51cF9iY2koc3Ry dWN0IGRybV9kZXZpY2UgKiBkZXYpDQo+IC17DQo+IC0JZHJtX3NhdmFnZV9wcml2YXRlX3Qg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQ0KPiAtCWlmIChkZXZfcHJpdi0+ Y21kX2RtYSA9PSAmZGV2X3ByaXYtPmZha2VfZG1hKSB7DQo+IC0JCWtmcmVlKGRldl9wcml2 LT5mYWtlX2RtYS5oYW5kbGUpOw0KPiAtCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNtZF9kbWEg JiYgZGV2X3ByaXYtPmNtZF9kbWEtPmhhbmRsZSAmJg0KPiAtCQkgICBkZXZfcHJpdi0+Y21k X2RtYS0+dHlwZSA9PSBfRFJNX0FHUCAmJg0KPiAtCQkgICBkZXZfcHJpdi0+ZG1hX3R5cGUg PT0gU0FWQUdFX0RNQV9BR1ApDQo+IC0JCWRybV9sZWdhY3lfaW9yZW1hcGZyZWUoZGV2X3By aXYtPmNtZF9kbWEsIGRldik7DQo+IC0NCj4gLQlpZiAoZGV2X3ByaXYtPmRtYV90eXBlID09 IFNBVkFHRV9ETUFfQUdQICYmDQo+IC0JICAgIGRldi0+YWdwX2J1ZmZlcl9tYXAgJiYgZGV2 LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlKSB7DQo+IC0JCWRybV9sZWdhY3lfaW9yZW1hcGZy ZWUoZGV2LT5hZ3BfYnVmZmVyX21hcCwgZGV2KTsNCj4gLQkJLyogbWFrZSBzdXJlIHRoZSBu ZXh0IGluc3RhbmNlICh3aGljaCBtYXkgYmUgcnVubmluZw0KPiAtCQkgKiBpbiBQQ0kgbW9k ZSkgZG9lc24ndCB0cnkgdG8gdXNlIGFuIG9sZA0KPiAtCQkgKiBhZ3BfYnVmZmVyX21hcC4g Ki8NCj4gLQkJZGV2LT5hZ3BfYnVmZmVyX21hcCA9IE5VTEw7DQo+IC0JfQ0KPiAtDQo+IC0J a2ZyZWUoZGV2X3ByaXYtPmRtYV9wYWdlcyk7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0N Cj4gLQ0KPiAtc3RhdGljIGludCBzYXZhZ2VfYmNpX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+ IC0JZHJtX3NhdmFnZV9pbml0X3QgKmluaXQgPSBkYXRhOw0KPiAtDQo+IC0JTE9DS19URVNU X1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsNCj4gLQ0KPiAtCXN3aXRjaCAoaW5pdC0+ ZnVuYykgew0KPiAtCWNhc2UgU0FWQUdFX0lOSVRfQkNJOg0KPiAtCQlyZXR1cm4gc2F2YWdl X2RvX2luaXRfYmNpKGRldiwgaW5pdCk7DQo+IC0JY2FzZSBTQVZBR0VfQ0xFQU5VUF9CQ0k6 DQo+IC0JCXJldHVybiBzYXZhZ2VfZG9fY2xlYW51cF9iY2koZGV2KTsNCj4gLQl9DQo+IC0N Cj4gLQlyZXR1cm4gLUVJTlZBTDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzYXZhZ2Vf YmNpX2V2ZW50X2VtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3NhdmFnZV9wcml2YXRl X3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlkcm1fc2F2YWdlX2V2ZW50 X2VtaXRfdCAqZXZlbnQgPSBkYXRhOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJcbiIpOw0KPiAt DQo+IC0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsNCj4gLQ0KPiAt CWV2ZW50LT5jb3VudCA9IHNhdmFnZV9iY2lfZW1pdF9ldmVudChkZXZfcHJpdiwgZXZlbnQt PmZsYWdzKTsNCj4gLQlldmVudC0+Y291bnQgfD0gZGV2X3ByaXYtPmV2ZW50X3dyYXAgPDwg MTY7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzYXZh Z2VfYmNpX2V2ZW50X3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3NhdmFnZV9wcml2 YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlkcm1fc2F2YWdlX2V2 ZW50X3dhaXRfdCAqZXZlbnQgPSBkYXRhOw0KPiAtCXVuc2lnbmVkIGludCBldmVudF9lLCBo d19lOw0KPiAtCXVuc2lnbmVkIGludCBldmVudF93LCBod193Ow0KPiAtDQo+IC0JRFJNX0RF QlVHKCJcbiIpOw0KPiAtDQo+IC0JVVBEQVRFX0VWRU5UX0NPVU5URVIoKTsNCj4gLQlpZiAo ZGV2X3ByaXYtPnN0YXR1c19wdHIpDQo+IC0JCWh3X2UgPSBkZXZfcHJpdi0+c3RhdHVzX3B0 clsxXSAmIDB4ZmZmZjsNCj4gLQllbHNlDQo+IC0JCWh3X2UgPSBTQVZBR0VfUkVBRChTQVZB R0VfU1RBVFVTX1dPUkQxKSAmIDB4ZmZmZjsNCj4gLQlod193ID0gZGV2X3ByaXYtPmV2ZW50 X3dyYXA7DQo+IC0JaWYgKGh3X2UgPiBkZXZfcHJpdi0+ZXZlbnRfY291bnRlcikNCj4gLQkJ aHdfdy0tOwkJLyogaGFyZHdhcmUgaGFzbid0IHBhc3NlZCB0aGUgbGFzdCB3cmFwIHlldCAq Lw0KPiAtDQo+IC0JZXZlbnRfZSA9IGV2ZW50LT5jb3VudCAmIDB4ZmZmZjsNCj4gLQlldmVu dF93ID0gZXZlbnQtPmNvdW50ID4+IDE2Ow0KPiAtDQo+IC0JLyogRG9uJ3QgbmVlZCB0byB3 YWl0IGlmDQo+IC0JICogLSBldmVudCBjb3VudGVyIHdyYXBwZWQgc2luY2UgdGhlIGV2ZW50 IHdhcyBlbWl0dGVkIG9yDQo+IC0JICogLSB0aGUgaGFyZHdhcmUgaGFzIGFkdmFuY2VkIHVw IHRvIG9yIG92ZXIgdGhlIGV2ZW50IHRvIHdhaXQgZm9yLg0KPiAtCSAqLw0KPiAtCWlmIChl dmVudF93IDwgaHdfdyB8fCAoZXZlbnRfdyA9PSBod193ICYmIGV2ZW50X2UgPD0gaHdfZSkp DQo+IC0JCXJldHVybiAwOw0KPiAtCWVsc2UNCj4gLQkJcmV0dXJuIGRldl9wcml2LT53YWl0 X2V2bnQoZGV2X3ByaXYsIGV2ZW50X2UpOw0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAtICogRE1B IGJ1ZmZlciBtYW5hZ2VtZW50DQo+IC0gKi8NCj4gLQ0KPiAtc3RhdGljIGludCBzYXZhZ2Vf YmNpX2dldF9idWZmZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsDQo+IC0JCQkJICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwNCj4gLQkJCQkgIHN0cnVjdCBkcm1fZG1hICpkKQ0K PiAtew0KPiAtCXN0cnVjdCBkcm1fYnVmICpidWY7DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlm b3IgKGkgPSBkLT5ncmFudGVkX2NvdW50OyBpIDwgZC0+cmVxdWVzdF9jb3VudDsgaSsrKSB7 DQo+IC0JCWJ1ZiA9IHNhdmFnZV9mcmVlbGlzdF9nZXQoZGV2KTsNCj4gLQkJaWYgKCFidWYp DQo+IC0JCQlyZXR1cm4gLUVBR0FJTjsNCj4gLQ0KPiAtCQlidWYtPmZpbGVfcHJpdiA9IGZp bGVfcHJpdjsNCj4gLQ0KPiAtCQlpZiAoY29weV90b191c2VyKCZkLT5yZXF1ZXN0X2luZGlj ZXNbaV0sDQo+IC0JCQkJICAgICAmYnVmLT5pZHgsIHNpemVvZihidWYtPmlkeCkpKQ0KPiAt CQkJcmV0dXJuIC1FRkFVTFQ7DQo+IC0JCWlmIChjb3B5X3RvX3VzZXIoJmQtPnJlcXVlc3Rf c2l6ZXNbaV0sDQo+IC0JCQkJICAgICAmYnVmLT50b3RhbCwgc2l6ZW9mKGJ1Zi0+dG90YWwp KSkNCj4gLQkJCXJldHVybiAtRUZBVUxUOw0KPiAtDQo+IC0JCWQtPmdyYW50ZWRfY291bnQr KzsNCj4gLQl9DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLWludCBzYXZhZ2VfYmNp X2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0Jc3RydWN0IGRybV9kZXZpY2VfZG1hICpk bWEgPSBkZXYtPmRtYTsNCj4gLQlzdHJ1Y3QgZHJtX2RtYSAqZCA9IGRhdGE7DQo+IC0JaW50 IHJldCA9IDA7DQo+IC0NCj4gLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3By aXYpOw0KPiAtDQo+IC0JLyogUGxlYXNlIGRvbid0IHNlbmQgdXMgYnVmZmVycy4NCj4gLQkg Ki8NCj4gLQlpZiAoZC0+c2VuZF9jb3VudCAhPSAwKSB7DQo+IC0JCURSTV9FUlJPUigiUHJv Y2VzcyAlZCB0cnlpbmcgdG8gc2VuZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsDQo+IC0J CQkgIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBkLT5zZW5kX2NvdW50KTsNCj4gLQkJcmV0dXJu IC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JLyogV2UnbGwgc2VuZCB5b3UgYnVmZmVycy4N Cj4gLQkgKi8NCj4gLQlpZiAoZC0+cmVxdWVzdF9jb3VudCA8IDAgfHwgZC0+cmVxdWVzdF9j b3VudCA+IGRtYS0+YnVmX2NvdW50KSB7DQo+IC0JCURSTV9FUlJPUigiUHJvY2VzcyAlZCB0 cnlpbmcgdG8gZ2V0ICVkIGJ1ZmZlcnMgKG9mICVkIG1heClcbiIsDQo+IC0JCQkgIHRhc2tf cGlkX25yKGN1cnJlbnQpLCBkLT5yZXF1ZXN0X2NvdW50LCBkbWEtPmJ1Zl9jb3VudCk7DQo+ IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCWQtPmdyYW50ZWRfY291bnQg PSAwOw0KPiAtDQo+IC0JaWYgKGQtPnJlcXVlc3RfY291bnQpIHsNCj4gLQkJcmV0ID0gc2F2 YWdlX2JjaV9nZXRfYnVmZmVycyhkZXYsIGZpbGVfcHJpdiwgZCk7DQo+IC0JfQ0KPiAtDQo+ IC0JcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtdm9pZCBzYXZhZ2VfcmVjbGFpbV9idWZm ZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KQ0KPiAtew0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlX2RtYSAqZG1hID0gZGV2LT5kbWE7DQo+ IC0JZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsN Cj4gLQlpbnQgcmVsZWFzZV9pZGxlbG9jayA9IDA7DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlp ZiAoIWRtYSkNCj4gLQkJcmV0dXJuOw0KPiAtCWlmICghZGV2X3ByaXYpDQo+IC0JCXJldHVy bjsNCj4gLQlpZiAoIWRtYS0+YnVmbGlzdCkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JaWYg KGZpbGVfcHJpdi0+bWFzdGVyICYmIGZpbGVfcHJpdi0+bWFzdGVyLT5sb2NrLmh3X2xvY2sp IHsNCj4gLQkJZHJtX2xlZ2FjeV9pZGxlbG9ja190YWtlKCZmaWxlX3ByaXYtPm1hc3Rlci0+ bG9jayk7DQo+IC0JCXJlbGVhc2VfaWRsZWxvY2sgPSAxOw0KPiAtCX0NCj4gLQ0KPiAtCWZv ciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7DQo+IC0JCXN0cnVjdCBkcm1f YnVmICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07DQo+IC0JCWRybV9zYXZhZ2VfYnVmX3ByaXZf dCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOw0KPiAtDQo+IC0JCWlmIChidWYtPmZp bGVfcHJpdiA9PSBmaWxlX3ByaXYgJiYgYnVmX3ByaXYgJiYNCj4gLQkJICAgIGJ1Zl9wcml2 LT5uZXh0ID09IE5VTEwgJiYgYnVmX3ByaXYtPnByZXYgPT0gTlVMTCkgew0KPiAtCQkJdWlu dDE2X3QgZXZlbnQ7DQo+IC0JCQlEUk1fREVCVUcoInJlY2xhaW1lZCBmcm9tIGNsaWVudFxu Iik7DQo+IC0JCQlldmVudCA9IHNhdmFnZV9iY2lfZW1pdF9ldmVudChkZXZfcHJpdiwgU0FW QUdFX1dBSVRfM0QpOw0KPiAtCQkJU0VUX0FHRSgmYnVmX3ByaXYtPmFnZSwgZXZlbnQsIGRl dl9wcml2LT5ldmVudF93cmFwKTsNCj4gLQkJCXNhdmFnZV9mcmVlbGlzdF9wdXQoZGV2LCBi dWYpOw0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKHJlbGVhc2VfaWRsZWxvY2spDQo+ IC0JCWRybV9sZWdhY3lfaWRsZWxvY2tfcmVsZWFzZSgmZmlsZV9wcml2LT5tYXN0ZXItPmxv Y2spOw0KPiAtfQ0KPiAtDQo+IC1jb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2Mgc2F2YWdl X2lvY3Rsc1tdID0gew0KPiAtCURSTV9JT0NUTF9ERUZfRFJWKFNBVkFHRV9CQ0lfSU5JVCwg c2F2YWdlX2JjaV9pbml0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLA0K PiAtCURSTV9JT0NUTF9ERUZfRFJWKFNBVkFHRV9CQ0lfQ01EQlVGLCBzYXZhZ2VfYmNpX2Nt ZGJ1ZiwgRFJNX0FVVEgpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJWKFNBVkFHRV9CQ0lfRVZF TlRfRU1JVCwgc2F2YWdlX2JjaV9ldmVudF9lbWl0LCBEUk1fQVVUSCksDQo+IC0JRFJNX0lP Q1RMX0RFRl9EUlYoU0FWQUdFX0JDSV9FVkVOVF9XQUlULCBzYXZhZ2VfYmNpX2V2ZW50X3dh aXQsIERSTV9BVVRIKSwNCj4gLX07DQo+IC0NCj4gLWludCBzYXZhZ2VfbWF4X2lvY3RsID0g QVJSQVlfU0laRShzYXZhZ2VfaW9jdGxzKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9zYXZhZ2Uvc2F2YWdlX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZh Z2VfZHJ2LmMNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDc5OWJkMTFh ZGI5Yy4uMDAwMDAwMDAwMDAwDQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2 YWdlX2Rydi5jDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsOTEgKzAsMCBAQA0KPiAtLyog c2F2YWdlX2Rydi5jIC0tIFNhdmFnZSBkcml2ZXIgZm9yIExpbnV4DQo+IC0gKg0KPiAtICog Q29weXJpZ2h0IDIwMDQgIEZlbGl4IEt1ZWhsaW5nDQo+IC0gKiBBbGwgUmlnaHRzIFJlc2Vy dmVkLg0KPiAtICoNCj4gLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQo+IC0gKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLA0KPiAtICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YiBsaWNlbnNlLA0KPiAtICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+IC0gKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Og0KPiAtICoNCj4gLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlDQo+IC0gKiBuZXh0IHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cw0KPiAtICogb2YgdGhlIFNvZnR3YXJlLg0KPiAtICoNCj4gLSAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KPiAt ICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GDQo+IC0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORA0KPiAtICogTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8g RVZFTlQgU0hBTEwgRkVMSVggS1VFSExJTkcgQkUgTElBQkxFIEZPUg0KPiAtICogQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YNCj4gLSAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTg0KPiAtICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQo+IC0gKi8NCj4gLQ0K PiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3BjaS5o Pg0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4NCj4gLSNpbmNsdWRlIDxkcm0v ZHJtX2ZpbGUuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX3BjaWlkcy5oPg0KPiAtDQo+IC0j aW5jbHVkZSAic2F2YWdlX2Rydi5oIg0KPiAtDQo+IC1zdGF0aWMgc3RydWN0IHBjaV9kZXZp Y2VfaWQgcGNpaWRsaXN0W10gPSB7DQo+IC0Jc2F2YWdlX1BDSV9JRFMNCj4gLX07DQo+IC0N Cj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNhdmFnZV9kcml2ZXJf Zm9wcyA9IHsNCj4gLQkub3duZXIgPSBUSElTX01PRFVMRSwNCj4gLQkub3BlbiA9IGRybV9v cGVuLA0KPiAtCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsDQo+IC0JLnVubG9ja2VkX2lvY3Rs ID0gZHJtX2lvY3RsLA0KPiAtCS5tbWFwID0gZHJtX2xlZ2FjeV9tbWFwLA0KPiAtCS5wb2xs ID0gZHJtX3BvbGwsDQo+IC0JLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsDQo+ IC0JLmxsc2VlayA9IG5vb3BfbGxzZWVrLA0KPiAtfTsNCj4gLQ0KPiAtc3RhdGljIHN0cnVj dCBkcm1fZHJpdmVyIGRyaXZlciA9IHsNCj4gLQkuZHJpdmVyX2ZlYXR1cmVzID0NCj4gLQkg ICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfUENJX0RNQSB8 IERSSVZFUl9MRUdBQ1ksDQo+IC0JLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX3NhdmFn ZV9idWZfcHJpdl90KSwNCj4gLQkubG9hZCA9IHNhdmFnZV9kcml2ZXJfbG9hZCwNCj4gLQku Zmlyc3RvcGVuID0gc2F2YWdlX2RyaXZlcl9maXJzdG9wZW4sDQo+IC0JLnByZWNsb3NlID0g c2F2YWdlX3JlY2xhaW1fYnVmZmVycywNCj4gLQkubGFzdGNsb3NlID0gc2F2YWdlX2RyaXZl cl9sYXN0Y2xvc2UsDQo+IC0JLnVubG9hZCA9IHNhdmFnZV9kcml2ZXJfdW5sb2FkLA0KPiAt CS5pb2N0bHMgPSBzYXZhZ2VfaW9jdGxzLA0KPiAtCS5kbWFfaW9jdGwgPSBzYXZhZ2VfYmNp X2J1ZmZlcnMsDQo+IC0JLmZvcHMgPSAmc2F2YWdlX2RyaXZlcl9mb3BzLA0KPiAtCS5uYW1l ID0gRFJJVkVSX05BTUUsDQo+IC0JLmRlc2MgPSBEUklWRVJfREVTQywNCj4gLQkuZGF0ZSA9 IERSSVZFUl9EQVRFLA0KPiAtCS5tYWpvciA9IERSSVZFUl9NQUpPUiwNCj4gLQkubWlub3Ig PSBEUklWRVJfTUlOT1IsDQo+IC0JLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTCwN Cj4gLX07DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzYXZhZ2VfcGNpX2Ry aXZlciA9IHsNCj4gLQkubmFtZSA9IERSSVZFUl9OQU1FLA0KPiAtCS5pZF90YWJsZSA9IHBj aWlkbGlzdCwNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBpbnQgX19pbml0IHNhdmFnZV9pbml0 KHZvaWQpDQo+IC17DQo+IC0JZHJpdmVyLm51bV9pb2N0bHMgPSBzYXZhZ2VfbWF4X2lvY3Rs Ow0KPiAtCXJldHVybiBkcm1fbGVnYWN5X3BjaV9pbml0KCZkcml2ZXIsICZzYXZhZ2VfcGNp X2RyaXZlcik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIF9fZXhpdCBzYXZhZ2VfZXhp dCh2b2lkKQ0KPiAtew0KPiAtCWRybV9sZWdhY3lfcGNpX2V4aXQoJmRyaXZlciwgJnNhdmFn ZV9wY2lfZHJpdmVyKTsNCj4gLX0NCj4gLQ0KPiAtbW9kdWxlX2luaXQoc2F2YWdlX2luaXQp Ow0KPiAtbW9kdWxlX2V4aXQoc2F2YWdlX2V4aXQpOw0KPiAtDQo+IC1NT0RVTEVfQVVUSE9S KERSSVZFUl9BVVRIT1IpOw0KPiAtTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsN Cj4gLU1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7DQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2Rydi5oDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCBiMDA4MWJiNjQ3NzYuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9kcnYuaA0KPiArKysgL2Rldi9udWxsDQo+IEBA IC0xLDU4MCArMCwwIEBADQo+IC0vKiBzYXZhZ2VfZHJ2LmggLS0gUHJpdmF0ZSBoZWFkZXIg Zm9yIHRoZSBzYXZhZ2UgZHJpdmVyICovDQo+IC0vKg0KPiAtICogQ29weXJpZ2h0IDIwMDQg IEZlbGl4IEt1ZWhsaW5nDQo+IC0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4g LSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAt ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLA0KPiAt ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlDQo+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiAtICoNCj4gLSAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlDQo+IC0gKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucw0KPiAtICogb2YgdGhl IFNvZnR3YXJlLg0KPiAtICoNCj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KPiAtICogRVhQUkVTUyBPUiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G DQo+IC0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORA0KPiAtICogTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgRkVM SVggS1VFSExJTkcgQkUgTElBQkxFIEZPUg0KPiAtICogQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YNCj4gLSAqIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTg0KPiAtICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQo+IC0gKi8NCj4gLQ0KPiAtI2lmbmRlZiBfX1NB VkFHRV9EUlZfSF9fDQo+IC0jZGVmaW5lIF9fU0FWQUdFX0RSVl9IX18NCj4gLQ0KPiAtI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+DQo+IC0NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+ DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9sZWdhY3kuaD4NCj4gLSNpbmNsdWRlIDxkcm0vc2F2 YWdlX2RybS5oPg0KPiAtDQo+IC0jZGVmaW5lIERSSVZFUl9BVVRIT1IJIkZlbGl4IEt1ZWhs aW5nIg0KPiAtDQo+IC0jZGVmaW5lIERSSVZFUl9OQU1FCSJzYXZhZ2UiDQo+IC0jZGVmaW5l IERSSVZFUl9ERVNDCSJTYXZhZ2UzRC9NWC9JWCwgU2F2YWdlNCwgU3VwZXJTYXZhZ2UsIFR3 aXN0ZXIsIFByb1NhdmFnZVtERFJdIg0KPiAtI2RlZmluZSBEUklWRVJfREFURQkiMjAwNTAz MTMiDQo+IC0NCj4gLSNkZWZpbmUgRFJJVkVSX01BSk9SCQkyDQo+IC0jZGVmaW5lIERSSVZF Ul9NSU5PUgkJNA0KPiAtI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkxDQo+IC0vKiBJbnRl cmZhY2UgaGlzdG9yeToNCj4gLSAqDQo+IC0gKiAxLnggICBUaGUgRFJNIGRyaXZlciBmcm9t IHRoZSBWSUEvUzMgY29kZSBkcm9wLCBiYXNpY2FsbHkgYSBkdW1teQ0KPiAtICogMi4wICAg VGhlIGZpcnN0IHJlYWwgRFJNDQo+IC0gKiAyLjEgICBTY2lzc29ycyByZWdpc3RlcnMgbWFu YWdlZCBieSB0aGUgRFJNLCAzRCBvcGVyYXRpb25zIGNsaXBwZWQgYnkNCj4gLSAqICAgICAg IGNsaXByZWN0cyBvZiB0aGUgY21kYnVmIGlvY3RsDQo+IC0gKiAyLjIgICBJbXBsZW1lbnRl ZCBTQVZBR0VfQ01EX0RNQV9JRFggYW5kIFNBVkFHRV9DTURfVkJfSURYDQo+IC0gKiAyLjMg ICBFdmVudCBjb3VudGVycyB1c2VkIGJ5IEJDSV9FVkVOVF9FTUlUL1dBSVQgaW9jdGxzIGFy ZSBub3cgMzIgYml0cw0KPiAtICogICAgICAgd2lkZSBhbmQgdGh1cyB2ZXJ5IGxvbmcgbGl2 ZWQgKHVubGlrZWx5IHRvIGV2ZXIgd3JhcCkuIFRoZSBzaXplDQo+IC0gKiAgICAgICBpbiB0 aGUgc3RydWN0IHdhcyAzMiBiaXRzIGJlZm9yZSwgYnV0IG9ubHkgMTYgYml0cyB3ZXJlIHVz ZWQNCj4gLSAqIDIuNCAgIEltcGxlbWVudGVkIGNvbW1hbmQgRE1BLiBOb3cgZHJtX3NhdmFn ZV9pbml0X3QuY21kX2RtYV9vZmZzZXQgaXMNCj4gLSAqICAgICAgIGFjdHVhbGx5IHVzZWQN Cj4gLSAqLw0KPiAtDQo+IC10eXBlZGVmIHN0cnVjdCBkcm1fc2F2YWdlX2FnZSB7DQo+IC0J dWludDE2X3QgZXZlbnQ7DQo+IC0JdW5zaWduZWQgaW50IHdyYXA7DQo+IC19IGRybV9zYXZh Z2VfYWdlX3Q7DQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0IGRybV9zYXZhZ2VfYnVmX3ByaXYg ew0KPiAtCXN0cnVjdCBkcm1fc2F2YWdlX2J1Zl9wcml2ICpuZXh0Ow0KPiAtCXN0cnVjdCBk cm1fc2F2YWdlX2J1Zl9wcml2ICpwcmV2Ow0KPiAtCWRybV9zYXZhZ2VfYWdlX3QgYWdlOw0K PiAtCXN0cnVjdCBkcm1fYnVmICpidWY7DQo+IC19IGRybV9zYXZhZ2VfYnVmX3ByaXZfdDsN Cj4gLQ0KPiAtdHlwZWRlZiBzdHJ1Y3QgZHJtX3NhdmFnZV9kbWFfcGFnZSB7DQo+IC0JZHJt X3NhdmFnZV9hZ2VfdCBhZ2U7DQo+IC0JdW5zaWduZWQgaW50IHVzZWQsIGZsdXNoZWQ7DQo+ IC19IGRybV9zYXZhZ2VfZG1hX3BhZ2VfdDsNCj4gLSNkZWZpbmUgU0FWQUdFX0RNQV9QQUdF X1NJWkUgMTAyNAkvKiBpbiBkd29yZHMgKi8NCj4gLS8qIEZha2UgRE1BIGJ1ZmZlciBzaXpl IGluIGJ5dGVzLiA0IHBhZ2VzLiBBbGxvd3MgYSBtYXhpbXVtIGNvbW1hbmQNCj4gLSAqIHNp emUgb2YgMTZrYnl0ZXMgb3IgNGsgZW50cmllcy4gTWluaW11bSByZXF1aXJlbWVudCB3b3Vs ZCBiZQ0KPiAtICogMTBrYnl0ZXMgZm9yIDI1NSA0MC1ieXRlIHZlcnRpY2VzIGluIG9uZSBk cmF3aW5nIGNvbW1hbmQuICovDQo+IC0jZGVmaW5lIFNBVkFHRV9GQUtFX0RNQV9TSVpFIChT QVZBR0VfRE1BX1BBR0VfU0laRSo0KjQpDQo+IC0NCj4gLS8qIGludGVyZXN0aW5nIGJpdHMg b2YgaGFyZHdhcmUgc3RhdGUgdGhhdCBhcmUgc2F2ZWQgaW4gZGV2X3ByaXYgKi8NCj4gLXR5 cGVkZWYgdW5pb24gew0KPiAtCXN0cnVjdCBkcm1fc2F2YWdlX2NvbW1vbl9zdGF0ZSB7DQo+ IC0JCXVpbnQzMl90IHZiYWRkcjsNCj4gLQl9IGNvbW1vbjsNCj4gLQlzdHJ1Y3Qgew0KPiAt CQl1bnNpZ25lZCBjaGFyIHBhZFtzaXplb2Yoc3RydWN0IGRybV9zYXZhZ2VfY29tbW9uX3N0 YXRlKV07DQo+IC0JCXVpbnQzMl90IHRleGN0cmwsIHRleGFkZHI7DQo+IC0JCXVpbnQzMl90 IHNjc3RhcnQsIG5ld19zY3N0YXJ0Ow0KPiAtCQl1aW50MzJfdCBzY2VuZCwgbmV3X3NjZW5k Ow0KPiAtCX0gczNkOw0KPiAtCXN0cnVjdCB7DQo+IC0JCXVuc2lnbmVkIGNoYXIgcGFkW3Np emVvZihzdHJ1Y3QgZHJtX3NhdmFnZV9jb21tb25fc3RhdGUpXTsNCj4gLQkJdWludDMyX3Qg dGV4ZGVzY3IsIHRleGFkZHIwLCB0ZXhhZGRyMTsNCj4gLQkJdWludDMyX3QgZHJhd2N0cmww LCBuZXdfZHJhd2N0cmwwOw0KPiAtCQl1aW50MzJfdCBkcmF3Y3RybDEsIG5ld19kcmF3Y3Ry bDE7DQo+IC0JfSBzNDsNCj4gLX0gZHJtX3NhdmFnZV9zdGF0ZV90Ow0KPiAtDQo+IC0vKiB0 aGVzZSBjaGlwIHRhZ3Mgc2hvdWxkIG1hdGNoIHRoZSBvbmVzIGluIHRoZSAyRCBkcml2ZXIg aW4gc2F2YWdlX3JlZ3MuaC4gKi8NCj4gLWVudW0gc2F2YWdlX2ZhbWlseSB7DQo+IC0JUzNf VU5LTk9XTiA9IDAsDQo+IC0JUzNfU0FWQUdFM0QsDQo+IC0JUzNfU0FWQUdFX01YLA0KPiAt CVMzX1NBVkFHRTQsDQo+IC0JUzNfUFJPU0FWQUdFLA0KPiAtCVMzX1RXSVNURVIsDQo+IC0J UzNfUFJPU0FWQUdFRERSLA0KPiAtCVMzX1NVUEVSU0FWQUdFLA0KPiAtCVMzX1NBVkFHRTIw MDAsDQo+IC0JUzNfTEFTVA0KPiAtfTsNCj4gLQ0KPiAtZXh0ZXJuIGNvbnN0IHN0cnVjdCBk cm1faW9jdGxfZGVzYyBzYXZhZ2VfaW9jdGxzW107DQo+IC1leHRlcm4gaW50IHNhdmFnZV9t YXhfaW9jdGw7DQo+IC0NCj4gLSNkZWZpbmUgUzNfU0FWQUdFM0RfU0VSSUVTKGNoaXApICAo KGNoaXA+PVMzX1NBVkFHRTNEKSAmJiAoY2hpcDw9UzNfU0FWQUdFX01YKSkNCj4gLQ0KPiAt I2RlZmluZSBTM19TQVZBR0U0X1NFUklFUyhjaGlwKSAgKChjaGlwPT1TM19TQVZBR0U0KSAg ICAgICAgICAgIFwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAo Y2hpcD09UzNfUFJPU0FWQUdFKSAgICAgICBcDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfHwgKGNoaXA9PVMzX1RXSVNURVIpICAgICAgICAgXA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChjaGlwPT1TM19QUk9TQVZBR0VERFIp KQ0KPiAtDQo+IC0jZGVmaW5lCVMzX1NBVkFHRV9NT0JJTEVfU0VSSUVTKGNoaXApCSgoY2hp cD09UzNfU0FWQUdFX01YKSB8fCAoY2hpcD09UzNfU1VQRVJTQVZBR0UpKQ0KPiAtDQo+IC0j ZGVmaW5lIFMzX1NBVkFHRV9TRVJJRVMoY2hpcCkgICAgKChjaGlwPj1TM19TQVZBR0UzRCkg JiYgKGNoaXA8PVMzX1NBVkFHRTIwMDApKQ0KPiAtDQo+IC0jZGVmaW5lIFMzX01PQklMRV9U V0lTVEVSX1NFUklFUyhjaGlwKSAgICgoY2hpcD09UzNfVFdJU1RFUikgICAgXA0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwoY2hpcD09UzNfUFJP U0FWQUdFRERSKSkNCj4gLQ0KPiAtLyogZmxhZ3MgKi8NCj4gLSNkZWZpbmUgU0FWQUdFX0lT X0FHUCAxDQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0IGRybV9zYXZhZ2VfcHJpdmF0ZSB7DQo+ IC0JZHJtX3NhdmFnZV9zYXJlYV90ICpzYXJlYV9wcml2Ow0KPiAtDQo+IC0JZHJtX3NhdmFn ZV9idWZfcHJpdl90IGhlYWQsIHRhaWw7DQo+IC0NCj4gLQkvKiB3aG8gYW0gST8gKi8NCj4g LQllbnVtIHNhdmFnZV9mYW1pbHkgY2hpcHNldDsNCj4gLQ0KPiAtCXVuc2lnbmVkIGludCBj b2Jfc2l6ZTsNCj4gLQl1bnNpZ25lZCBpbnQgYmNpX3RocmVzaG9sZF9sbywgYmNpX3RocmVz aG9sZF9oaTsNCj4gLQl1bnNpZ25lZCBpbnQgZG1hX3R5cGU7DQo+IC0NCj4gLQkvKiBmcmFt ZSBidWZmZXIgbGF5b3V0ICovDQo+IC0JdW5zaWduZWQgaW50IGZiX2JwcDsNCj4gLQl1bnNp Z25lZCBpbnQgZnJvbnRfb2Zmc2V0LCBmcm9udF9waXRjaDsNCj4gLQl1bnNpZ25lZCBpbnQg YmFja19vZmZzZXQsIGJhY2tfcGl0Y2g7DQo+IC0JdW5zaWduZWQgaW50IGRlcHRoX2JwcDsN Cj4gLQl1bnNpZ25lZCBpbnQgZGVwdGhfb2Zmc2V0LCBkZXB0aF9waXRjaDsNCj4gLQ0KPiAt CS8qIGJpdG1hcCBkZXNjcmlwdG9ycyBmb3Igc3dhcCBhbmQgY2xlYXIgKi8NCj4gLQl1bnNp Z25lZCBpbnQgZnJvbnRfYmQsIGJhY2tfYmQsIGRlcHRoX2JkOw0KPiAtDQo+IC0JLyogbG9j YWwgdGV4dHVyZXMgKi8NCj4gLQl1bnNpZ25lZCBpbnQgdGV4dHVyZV9vZmZzZXQ7DQo+IC0J dW5zaWduZWQgaW50IHRleHR1cmVfc2l6ZTsNCj4gLQ0KPiAtCS8qIG1lbW9yeSByZWdpb25z IGluIHBoeXNpY2FsIG1lbW9yeSAqLw0KPiAtCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7DQo+ IC0JZHJtX2xvY2FsX21hcF90ICptbWlvOw0KPiAtCWRybV9sb2NhbF9tYXBfdCAqZmI7DQo+ IC0JZHJtX2xvY2FsX21hcF90ICphcGVydHVyZTsNCj4gLQlkcm1fbG9jYWxfbWFwX3QgKnN0 YXR1czsNCj4gLQlkcm1fbG9jYWxfbWFwX3QgKmFncF90ZXh0dXJlczsNCj4gLQlkcm1fbG9j YWxfbWFwX3QgKmNtZF9kbWE7DQo+IC0JZHJtX2xvY2FsX21hcF90IGZha2VfZG1hOw0KPiAt DQo+IC0JaW50IG10cnJfaGFuZGxlc1szXTsNCj4gLQ0KPiAtCS8qIEJDSSBhbmQgc3RhdHVz LXJlbGF0ZWQgc3R1ZmYgKi8NCj4gLQl2b2xhdGlsZSB1aW50MzJfdCAqc3RhdHVzX3B0ciwg KmJjaV9wdHI7DQo+IC0JdWludDMyX3Qgc3RhdHVzX3VzZWRfbWFzazsNCj4gLQl1aW50MTZf dCBldmVudF9jb3VudGVyOw0KPiAtCXVuc2lnbmVkIGludCBldmVudF93cmFwOw0KPiAtDQo+ IC0JLyogU2F2YWdlNCBjb21tYW5kIERNQSAqLw0KPiAtCWRybV9zYXZhZ2VfZG1hX3BhZ2Vf dCAqZG1hX3BhZ2VzOw0KPiAtCXVuc2lnbmVkIGludCBucl9kbWFfcGFnZXMsIGZpcnN0X2Rt YV9wYWdlLCBjdXJyZW50X2RtYV9wYWdlOw0KPiAtCWRybV9zYXZhZ2VfYWdlX3QgbGFzdF9k bWFfYWdlOw0KPiAtDQo+IC0JLyogc2F2ZWQgaHcgc3RhdGUgZm9yIGdsb2JhbC9sb2NhbCBj aGVjayBvbiBTM0QgKi8NCj4gLQl1aW50MzJfdCBod19kcmF3X2N0cmwsIGh3X3pidWZfY3Ry bDsNCj4gLQkvKiBhbmQgZm9yIHNjaXNzb3JzIChnbG9iYWwsIHNvIGRvbid0IGVtaXQgaWYg bm90IGNoYW5nZWQpICovDQo+IC0JdWludDMyX3QgaHdfc2Npc3NvcnNfc3RhcnQsIGh3X3Nj aXNzb3JzX2VuZDsNCj4gLQ0KPiAtCWRybV9zYXZhZ2Vfc3RhdGVfdCBzdGF0ZTsNCj4gLQ0K PiAtCS8qIGFmdGVyIGVtaXR0aW5nIGEgd2FpdCBjbWQgU2F2YWdlM0QgbmVlZHMgNjMgbm9w cyBiZWZvcmUgbmV4dCBETUEgKi8NCj4gLQl1bnNpZ25lZCBpbnQgd2FpdGluZzsNCj4gLQ0K PiAtCS8qIGNvbmZpZy9oYXJkd2FyZS1kZXBlbmRlbnQgZnVuY3Rpb24gcG9pbnRlcnMgKi8N Cj4gLQlpbnQgKCp3YWl0X2ZpZm8pIChzdHJ1Y3QgZHJtX3NhdmFnZV9wcml2YXRlICogZGV2 X3ByaXYsIHVuc2lnbmVkIGludCBuKTsNCj4gLQlpbnQgKCp3YWl0X2V2bnQpIChzdHJ1Y3Qg ZHJtX3NhdmFnZV9wcml2YXRlICogZGV2X3ByaXYsIHVpbnQxNl90IGUpOw0KPiAtCS8qIEVy ciwgdGhlcmUgaXMgYSBtYWNybyB3YWl0X2V2ZW50IGluIGluY2x1ZGUvbGludXgvd2FpdC5o Lg0KPiAtCSAqIEF2b2lkIHVud2FudGVkIG1hY3JvIGV4cGFuc2lvbi4gKi8NCj4gLQl2b2lk ICgqZW1pdF9jbGlwX3JlY3QpIChzdHJ1Y3QgZHJtX3NhdmFnZV9wcml2YXRlICogZGV2X3By aXYsDQo+IC0JCQkJY29uc3Qgc3RydWN0IGRybV9jbGlwX3JlY3QgKiBwYm94KTsNCj4gLQl2 b2lkICgqZG1hX2ZsdXNoKSAoc3RydWN0IGRybV9zYXZhZ2VfcHJpdmF0ZSAqIGRldl9wcml2 KTsNCj4gLX0gZHJtX3NhdmFnZV9wcml2YXRlX3Q7DQo+IC0NCj4gLS8qIGlvY3RscyAqLw0K PiAtZXh0ZXJuIGludCBzYXZhZ2VfYmNpX2NtZGJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC1leHRlcm4g aW50IHNhdmFnZV9iY2lfYnVmZmVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7DQo+IC0NCj4gLS8qIEJDSSBmdW5j dGlvbnMgKi8NCj4gLWV4dGVybiB1aW50MTZfdCBzYXZhZ2VfYmNpX2VtaXRfZXZlbnQoZHJt X3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwNCj4gLQkJCQkgICAgICB1bnNpZ25lZCBp bnQgZmxhZ3MpOw0KPiAtZXh0ZXJuIHZvaWQgc2F2YWdlX2ZyZWVsaXN0X3B1dChzdHJ1Y3Qg ZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9idWYgKiBidWYpOw0KPiAtZXh0ZXJuIHZv aWQgc2F2YWdlX2RtYV9yZXNldChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2KTsN Cj4gLWV4dGVybiB2b2lkIHNhdmFnZV9kbWFfd2FpdChkcm1fc2F2YWdlX3ByaXZhdGVfdCAq IGRldl9wcml2LCB1bnNpZ25lZCBpbnQgcGFnZSk7DQo+IC1leHRlcm4gdWludDMyX3QgKnNh dmFnZV9kbWFfYWxsb2MoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwNCj4gLQkJ CQkgIHVuc2lnbmVkIGludCBuKTsNCj4gLWV4dGVybiBpbnQgc2F2YWdlX2RyaXZlcl9sb2Fk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgY2hpcHNldCk7DQo+IC1l eHRlcm4gaW50IHNhdmFnZV9kcml2ZXJfZmlyc3RvcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOw0KPiAtZXh0ZXJuIHZvaWQgc2F2YWdlX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7DQo+IC1leHRlcm4gdm9pZCBzYXZhZ2VfZHJpdmVyX3VubG9hZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsNCj4gLWV4dGVybiB2b2lkIHNhdmFnZV9yZWNsYWlt X2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCQkgICBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdik7DQo+IC0NCj4gLS8qIHN0YXRlIGZ1bmN0aW9ucyAqLw0KPiAt ZXh0ZXJuIHZvaWQgc2F2YWdlX2VtaXRfY2xpcF9yZWN0X3MzZChkcm1fc2F2YWdlX3ByaXZh dGVfdCAqIGRldl9wcml2LA0KPiAtCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY2xpcF9y ZWN0ICogcGJveCk7DQo+IC1leHRlcm4gdm9pZCBzYXZhZ2VfZW1pdF9jbGlwX3JlY3RfczQo ZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwNCj4gLQkJCQkgICAgIGNvbnN0IHN0 cnVjdCBkcm1fY2xpcF9yZWN0ICogcGJveCk7DQo+IC0NCj4gLSNkZWZpbmUgU0FWQUdFX0ZC X1NJWkVfUzMJMHgwMTAwMDAwMAkvKiAgMTZNQiAqLw0KPiAtI2RlZmluZSBTQVZBR0VfRkJf U0laRV9TNAkweDAyMDAwMDAwCS8qICAzMk1CICovDQo+IC0jZGVmaW5lIFNBVkFHRV9NTUlP X1NJWkUgICAgICAgIDB4MDAwODAwMDAJLyogNTEya0IgKi8NCj4gLSNkZWZpbmUgU0FWQUdF X0FQRVJUVVJFX09GRlNFVCAgMHgwMjAwMDAwMAkvKiAgMzJNQiAqLw0KPiAtI2RlZmluZSBT QVZBR0VfQVBFUlRVUkVfU0laRSAgICAweDA1MDAwMDAwCS8qIDUgdGlsZWQgc3VyZmFjZXMs IDE2TUIgZWFjaCAqLw0KPiAtDQo+IC0jZGVmaW5lIFNBVkFHRV9CQ0lfT0ZGU0VUICAgICAg IDB4MDAwMTAwMDAJLyogb2Zmc2V0IG9mIHRoZSBCQ0kgcmVnaW9uDQo+IC0JCQkJCQkgKiBp bnNpZGUgdGhlIE1NSU8gcmVnaW9uICovDQo+IC0jZGVmaW5lIFNBVkFHRV9CQ0lfRklGT19T SVpFCTMyCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIG9uLWNoaXANCj4gLQkJCQkJICogQkNJ IEZJRk8gKi8NCj4gLQ0KPiAtLyoNCj4gLSAqIE1NSU8gcmVnaXN0ZXJzDQo+IC0gKi8NCj4g LSNkZWZpbmUgU0FWQUdFX1NUQVRVU19XT1JEMAkJMHg0OEMwMA0KPiAtI2RlZmluZSBTQVZB R0VfU1RBVFVTX1dPUkQxCQkweDQ4QzA0DQo+IC0jZGVmaW5lIFNBVkFHRV9BTFRfU1RBVFVT X1dPUkQwIAkweDQ4QzYwDQo+IC0NCj4gLSNkZWZpbmUgU0FWQUdFX0ZJRk9fVVNFRF9NQVNL X1MzRAkweDAwMDFmZmZmDQo+IC0jZGVmaW5lIFNBVkFHRV9GSUZPX1VTRURfTUFTS19TNAkw eDAwMWZmZmZmDQo+IC0NCj4gLS8qIENvcGllZCBmcm9tIHNhdmFnZV9iY2kuaCBpbiB0aGUg MkQgZHJpdmVyIHdpdGggc29tZSByZW5hbWluZy4gKi8NCj4gLQ0KPiAtLyogQml0bWFwIGRl c2NyaXB0b3JzICovDQo+IC0jZGVmaW5lIFNBVkFHRV9CRF9TVFJJREVfU0hJRlQgMA0KPiAt I2RlZmluZSBTQVZBR0VfQkRfQlBQX1NISUZUICAgMTYNCj4gLSNkZWZpbmUgU0FWQUdFX0JE X1RJTEVfU0hJRlQgIDI0DQo+IC0jZGVmaW5lIFNBVkFHRV9CRF9CV19ESVNBQkxFICAoMTw8 MjgpDQo+IC0vKiBjb21tb246ICovDQo+IC0jZGVmaW5lCVNBVkFHRV9CRF9USUxFX0xJTkVB UgkJMA0KPiAtLyogc2F2YWdlNCwgTVgsIElYLCAzRCAqLw0KPiAtI2RlZmluZQlTQVZBR0Vf QkRfVElMRV8xNkJQUAkJMg0KPiAtI2RlZmluZQlTQVZBR0VfQkRfVElMRV8zMkJQUAkJMw0K PiAtLyogdHdpc3RlciwgcHJvc2F2YWdlLCBERFIsIHN1cGVyc2F2YWdlLCAyMDAwICovDQo+ IC0jZGVmaW5lCVNBVkFHRV9CRF9USUxFX0RFU1QJCTENCj4gLSNkZWZpbmUJU0FWQUdFX0JE X1RJTEVfVEVYVFVSRQkJMg0KPiAtLyogR0JEIC0gQkNJIGVuYWJsZSAqLw0KPiAtLyogc2F2 YWdlNCwgTVgsIElYLCAzRCAqLw0KPiAtI2RlZmluZSBTQVZBR0VfR0JEX0JDSV9FTkFCTEUg ICAgICAgICAgICAgICAgICAgIDgNCj4gLS8qIHR3aXN0ZXIsIHByb3NhdmFnZSwgRERSLCBz dXBlcnNhdmFnZSwgMjAwMCAqLw0KPiAtI2RlZmluZSBTQVZBR0VfR0JEX0JDSV9FTkFCTEVf VFdJU1RFUiAgICAgICAgICAgIDANCj4gLQ0KPiAtI2RlZmluZSBTQVZBR0VfR0JEX0JJR19F TkRJQU4gICAgICAgICAgICAgICAgICAgIDQNCj4gLSNkZWZpbmUgU0FWQUdFX0dCRF9MSVRU TEVfRU5ESUFOICAgICAgICAgICAgICAgICAwDQo+IC0jZGVmaW5lIFNBVkFHRV9HQkRfNjQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KPiAtDQo+IC0vKiAgR2xvYmFsIEJpdG1h cCBEZXNjcmlwdG9yICovDQo+IC0jZGVmaW5lIFNBVkFHRV9CQ0lfR0xCX0JEX0xPVyAgICAg ICAgICAgICAweDgxNjgNCj4gLSNkZWZpbmUgU0FWQUdFX0JDSV9HTEJfQkRfSElHSCAgICAg ICAgICAgIDB4ODE2Qw0KPiAtDQo+IC0vKg0KPiAtICogQkNJIHJlZ2lzdGVycw0KPiAtICov DQo+IC0vKiBTYXZhZ2U0L1R3aXN0ZXIvUHJvU2F2YWdlIDNEIHJlZ2lzdGVycyAqLw0KPiAt I2RlZmluZSBTQVZBR0VfRFJBV0xPQ0FMQ1RSTF9TNAkJMHgxZQ0KPiAtI2RlZmluZSBTQVZB R0VfVEVYUEFMQUREUl9TNAkJMHgxZg0KPiAtI2RlZmluZSBTQVZBR0VfVEVYQ1RSTDBfUzQJ CTB4MjANCj4gLSNkZWZpbmUgU0FWQUdFX1RFWENUUkwxX1M0CQkweDIxDQo+IC0jZGVmaW5l IFNBVkFHRV9URVhBRERSMF9TNAkJMHgyMg0KPiAtI2RlZmluZSBTQVZBR0VfVEVYQUREUjFf UzQJCTB4MjMNCj4gLSNkZWZpbmUgU0FWQUdFX1RFWEJMRU5EMF9TNAkJMHgyNA0KPiAtI2Rl ZmluZSBTQVZBR0VfVEVYQkxFTkQxX1M0CQkweDI1DQo+IC0jZGVmaW5lIFNBVkFHRV9URVhY UFJDTFJfUzQJCTB4MjYJLyogbmV2ZXIgdXNlZCAqLw0KPiAtI2RlZmluZSBTQVZBR0VfVEVY REVTQ1JfUzQJCTB4MjcNCj4gLSNkZWZpbmUgU0FWQUdFX0ZPR1RBQkxFX1M0CQkweDI4DQo+ IC0jZGVmaW5lIFNBVkFHRV9GT0dDVFJMX1M0CQkweDMwDQo+IC0jZGVmaW5lIFNBVkFHRV9T VEVOQ0lMQ1RSTF9TNAkJMHgzMQ0KPiAtI2RlZmluZSBTQVZBR0VfWkJVRkNUUkxfUzQJCTB4 MzINCj4gLSNkZWZpbmUgU0FWQUdFX1pCVUZPRkZfUzQJCTB4MzMNCj4gLSNkZWZpbmUgU0FW QUdFX0RFU1RDVFJMX1M0CQkweDM0DQo+IC0jZGVmaW5lIFNBVkFHRV9EUkFXQ1RSTDBfUzQJ CTB4MzUNCj4gLSNkZWZpbmUgU0FWQUdFX0RSQVdDVFJMMV9TNAkJMHgzNg0KPiAtI2RlZmlu ZSBTQVZBR0VfWldBVEVSTUFSS19TNAkJMHgzNw0KPiAtI2RlZmluZSBTQVZBR0VfREVTVFRF WFJXV0FURVJNQVJLX1M0CTB4MzgNCj4gLSNkZWZpbmUgU0FWQUdFX1RFWEJMRU5EQ09MT1Jf UzQJCTB4MzkNCj4gLS8qIFNhdmFnZTNEL01YL0lYIDNEIHJlZ2lzdGVycyAqLw0KPiAtI2Rl ZmluZSBTQVZBR0VfVEVYUEFMQUREUl9TM0QJCTB4MTgNCj4gLSNkZWZpbmUgU0FWQUdFX1RF WFhQUkNMUl9TM0QJCTB4MTkJLyogbmV2ZXIgdXNlZCAqLw0KPiAtI2RlZmluZSBTQVZBR0Vf VEVYQUREUl9TM0QJCTB4MUENCj4gLSNkZWZpbmUgU0FWQUdFX1RFWERFU0NSX1MzRAkJMHgx Qg0KPiAtI2RlZmluZSBTQVZBR0VfVEVYQ1RSTF9TM0QJCTB4MUMNCj4gLSNkZWZpbmUgU0FW QUdFX0ZPR1RBQkxFX1MzRAkJMHgyMA0KPiAtI2RlZmluZSBTQVZBR0VfRk9HQ1RSTF9TM0QJ CTB4MzANCj4gLSNkZWZpbmUgU0FWQUdFX0RSQVdDVFJMX1MzRAkJMHgzMQ0KPiAtI2RlZmlu ZSBTQVZBR0VfWkJVRkNUUkxfUzNECQkweDMyDQo+IC0jZGVmaW5lIFNBVkFHRV9aQlVGT0ZG X1MzRAkJMHgzMw0KPiAtI2RlZmluZSBTQVZBR0VfREVTVENUUkxfUzNECQkweDM0DQo+IC0j ZGVmaW5lIFNBVkFHRV9TQ1NUQVJUX1MzRAkJMHgzNQ0KPiAtI2RlZmluZSBTQVZBR0VfU0NF TkRfUzNECQkweDM2DQo+IC0jZGVmaW5lIFNBVkFHRV9aV0FURVJNQVJLX1MzRAkJMHgzNw0K PiAtI2RlZmluZSBTQVZBR0VfREVTVFRFWFJXV0FURVJNQVJLX1MzRAkweDM4DQo+IC0vKiBj b21tb24gc3R1ZmYgKi8NCj4gLSNkZWZpbmUgU0FWQUdFX1ZFUlRCVUZBRERSCQkweDNlDQo+ IC0jZGVmaW5lIFNBVkFHRV9CSVRQTEFORVdUTUFTSwkJMHhkNw0KPiAtI2RlZmluZSBTQVZB R0VfRE1BQlVGQUREUgkJMHg1MQ0KPiAtDQo+IC0vKiB0ZXh0dXJlIGVuYWJsZSBiaXRzIChu ZWVkZWQgZm9yIHRleCBhZGRyIGNoZWNraW5nKSAqLw0KPiAtI2RlZmluZSBTQVZBR0VfVEVY Q1RSTF9URVhFTl9NQVNLCTB4MDAwMTAwMDAJLyogUzNEICovDQo+IC0jZGVmaW5lIFNBVkFH RV9URVhERVNDUl9URVgwRU5fTUFTSwkweDAyMDAwMDAwCS8qIFM0ICovDQo+IC0jZGVmaW5l IFNBVkFHRV9URVhERVNDUl9URVgxRU5fTUFTSwkweDA0MDAwMDAwCS8qIFM0ICovDQo+IC0N Cj4gLS8qIEdsb2JhbCBmaWVsZHMgaW4gU2F2YWdlNC9Ud2lzdGVyL1Byb1NhdmFnZSAzRCBy ZWdpc3RlcnM6DQo+IC0gKg0KPiAtICogQWxsIHRleHR1cmUgcmVnaXN0ZXJzIGFuZCBEcmF3 TG9jYWxDdHJsIGFyZSBsb2NhbC4gQWxsIG90aGVyDQo+IC0gKiByZWdpc3RlcnMgYXJlIGds b2JhbC4gKi8NCj4gLQ0KPiAtLyogR2xvYmFsIGZpZWxkcyBpbiBTYXZhZ2UzRC9NWC9JWCAz RCByZWdpc3RlcnM6DQo+IC0gKg0KPiAtICogQWxsIHRleHR1cmUgcmVnaXN0ZXJzIGFyZSBs b2NhbC4gRHJhd0N0cmwgYW5kIFpCdWZDdHJsIGFyZQ0KPiAtICogcGFydGlhbGx5IGxvY2Fs LiBBbGwgb3RoZXIgcmVnaXN0ZXJzIGFyZSBnbG9iYWwuDQo+IC0gKg0KPiAtICogRHJhd0N0 cmwgZ2xvYmFsIGZpZWxkczogY3VsbE1vZGUsIGFscGhhVGVzdENtcEZ1bmMsIGFscGhhVGVz dEVuLCBhbHBoYVJlZlZhbA0KPiAtICogWkJ1ZkN0cmwgZ2xvYmFsIGZpZWxkczogekNtcEZ1 bmMsIHpCdWZFbg0KPiAtICovDQo+IC0jZGVmaW5lIFNBVkFHRV9EUkFXQ1RSTF9TM0RfR0xP QkFMCTB4MDNmM2MwMGMNCj4gLSNkZWZpbmUgU0FWQUdFX1pCVUZDVFJMX1MzRF9HTE9CQUwJ MHgwMDAwMDAyNw0KPiAtDQo+IC0vKiBNYXNrcyBmb3Igc2Npc3NvciBiaXRzIChkcmF3Q3Ry bFswMV0gb24gczQsIHNjaXNzb3JTdGFydC9FbmQgb24gczNkKQ0KPiAtICovDQo+IC0jZGVm aW5lIFNBVkFHRV9TQ0lTU09SX01BU0tfUzQJCTB4MDBmZmY3ZmYNCj4gLSNkZWZpbmUgU0FW QUdFX1NDSVNTT1JfTUFTS19TM0QJCTB4MDdmZjA3ZmYNCj4gLQ0KPiAtLyoNCj4gLSAqIEJD SSBjb21tYW5kcw0KPiAtICovDQo+IC0jZGVmaW5lIEJDSV9DTURfTk9QICAgICAgICAgICAg ICAgICAgMHg0MDAwMDAwMA0KPiAtI2RlZmluZSBCQ0lfQ01EX1JFQ1QgICAgICAgICAgICAg ICAgIDB4NDgwMDAwMDANCj4gLSNkZWZpbmUgQkNJX0NNRF9SRUNUX1hQICAgICAgICAgICAg ICAweDAxMDAwMDAwDQo+IC0jZGVmaW5lIEJDSV9DTURfUkVDVF9ZUCAgICAgICAgICAgICAg MHgwMjAwMDAwMA0KPiAtI2RlZmluZSBCQ0lfQ01EX1NDQU5MSU5FICAgICAgICAgICAgIDB4 NTAwMDAwMDANCj4gLSNkZWZpbmUgQkNJX0NNRF9MSU5FICAgICAgICAgICAgICAgICAweDVD MDAwMDAwDQo+IC0jZGVmaW5lIEJDSV9DTURfTElORV9MQVNUX1BJWEVMICAgICAgMHg1ODAw MDAwMA0KPiAtI2RlZmluZSBCQ0lfQ01EX0JZVEVfVEVYVCAgICAgICAgICAgIDB4NjMwMDAw MDANCj4gLSNkZWZpbmUgQkNJX0NNRF9OVF9CWVRFX1RFWFQgICAgICAgICAweDY3MDAwMDAw DQo+IC0jZGVmaW5lIEJDSV9DTURfQklUX1RFWFQgICAgICAgICAgICAgMHg2QzAwMDAwMA0K PiAtI2RlZmluZSBCQ0lfQ01EX0dFVF9ST1AoY21kKSAgICAgICAgICgoKGNtZCkgPj4gMTYp ICYgMHhGRikNCj4gLSNkZWZpbmUgQkNJX0NNRF9TRVRfUk9QKGNtZCwgcm9wKSAgICAoKGNt ZCkgfD0gKChyb3AgJiAweEZGKSA8PCAxNikpDQo+IC0jZGVmaW5lIEJDSV9DTURfU0VORF9D T0xPUiAgICAgICAgICAgMHgwMDAwODAwMA0KPiAtDQo+IC0jZGVmaW5lIEJDSV9DTURfQ0xJ UF9OT05FICAgICAgICAgICAgMHgwMDAwMDAwMA0KPiAtI2RlZmluZSBCQ0lfQ01EX0NMSVBf Q1VSUkVOVCAgICAgICAgIDB4MDAwMDIwMDANCj4gLSNkZWZpbmUgQkNJX0NNRF9DTElQX0xS ICAgICAgICAgICAgICAweDAwMDA0MDAwDQo+IC0jZGVmaW5lIEJDSV9DTURfQ0xJUF9ORVcg ICAgICAgICAgICAgMHgwMDAwNjAwMA0KPiAtDQo+IC0jZGVmaW5lIEJDSV9DTURfREVTVF9H QkQgICAgICAgICAgICAgMHgwMDAwMDAwMA0KPiAtI2RlZmluZSBCQ0lfQ01EX0RFU1RfUEJE ICAgICAgICAgICAgIDB4MDAwMDA4MDANCj4gLSNkZWZpbmUgQkNJX0NNRF9ERVNUX1BCRF9O RVcgICAgICAgICAweDAwMDAwQzAwDQo+IC0jZGVmaW5lIEJDSV9DTURfREVTVF9TQkQgICAg ICAgICAgICAgMHgwMDAwMTAwMA0KPiAtI2RlZmluZSBCQ0lfQ01EX0RFU1RfU0JEX05FVyAg ICAgICAgIDB4MDAwMDE0MDANCj4gLQ0KPiAtI2RlZmluZSBCQ0lfQ01EX1NSQ19UUkFOU1BB UkVOVCAgICAgIDB4MDAwMDAyMDANCj4gLSNkZWZpbmUgQkNJX0NNRF9TUkNfU09MSUQgICAg ICAgICAgICAweDAwMDAwMDAwDQo+IC0jZGVmaW5lIEJDSV9DTURfU1JDX0dCRCAgICAgICAg ICAgICAgMHgwMDAwMDAyMA0KPiAtI2RlZmluZSBCQ0lfQ01EX1NSQ19DT0xPUiAgICAgICAg ICAgIDB4MDAwMDAwNDANCj4gLSNkZWZpbmUgQkNJX0NNRF9TUkNfTU9OTyAgICAgICAgICAg ICAweDAwMDAwMDYwDQo+IC0jZGVmaW5lIEJDSV9DTURfU1JDX1BCRF9DT0xPUiAgICAgICAg MHgwMDAwMDA4MA0KPiAtI2RlZmluZSBCQ0lfQ01EX1NSQ19QQkRfTU9OTyAgICAgICAgIDB4 MDAwMDAwQTANCj4gLSNkZWZpbmUgQkNJX0NNRF9TUkNfUEJEX0NPTE9SX05FVyAgICAweDAw MDAwMEMwDQo+IC0jZGVmaW5lIEJDSV9DTURfU1JDX1BCRF9NT05PX05FVyAgICAgMHgwMDAw MDBFMA0KPiAtI2RlZmluZSBCQ0lfQ01EX1NSQ19TQkRfQ09MT1IgICAgICAgIDB4MDAwMDAx MDANCj4gLSNkZWZpbmUgQkNJX0NNRF9TUkNfU0JEX01PTk8gICAgICAgICAweDAwMDAwMTIw DQo+IC0jZGVmaW5lIEJDSV9DTURfU1JDX1NCRF9DT0xPUl9ORVcgICAgMHgwMDAwMDE0MA0K PiAtI2RlZmluZSBCQ0lfQ01EX1NSQ19TQkRfTU9OT19ORVcgICAgIDB4MDAwMDAxNjANCj4g LQ0KPiAtI2RlZmluZSBCQ0lfQ01EX1BBVF9UUkFOU1BBUkVOVCAgICAgIDB4MDAwMDAwMTAN Cj4gLSNkZWZpbmUgQkNJX0NNRF9QQVRfTk9ORSAgICAgICAgICAgICAweDAwMDAwMDAwDQo+ IC0jZGVmaW5lIEJDSV9DTURfUEFUX0NPTE9SICAgICAgICAgICAgMHgwMDAwMDAwMg0KPiAt I2RlZmluZSBCQ0lfQ01EX1BBVF9NT05PICAgICAgICAgICAgIDB4MDAwMDAwMDMNCj4gLSNk ZWZpbmUgQkNJX0NNRF9QQVRfUEJEX0NPTE9SICAgICAgICAweDAwMDAwMDA0DQo+IC0jZGVm aW5lIEJDSV9DTURfUEFUX1BCRF9NT05PICAgICAgICAgMHgwMDAwMDAwNQ0KPiAtI2RlZmlu ZSBCQ0lfQ01EX1BBVF9QQkRfQ09MT1JfTkVXICAgIDB4MDAwMDAwMDYNCj4gLSNkZWZpbmUg QkNJX0NNRF9QQVRfUEJEX01PTk9fTkVXICAgICAweDAwMDAwMDA3DQo+IC0jZGVmaW5lIEJD SV9DTURfUEFUX1NCRF9DT0xPUiAgICAgICAgMHgwMDAwMDAwOA0KPiAtI2RlZmluZSBCQ0lf Q01EX1BBVF9TQkRfTU9OTyAgICAgICAgIDB4MDAwMDAwMDkNCj4gLSNkZWZpbmUgQkNJX0NN RF9QQVRfU0JEX0NPTE9SX05FVyAgICAweDAwMDAwMDBBDQo+IC0jZGVmaW5lIEJDSV9DTURf UEFUX1NCRF9NT05PX05FVyAgICAgMHgwMDAwMDAwQg0KPiAtDQo+IC0jZGVmaW5lIEJDSV9C RF9CV19ESVNBQkxFICAgICAgICAgICAgMHgxMDAwMDAwMA0KPiAtI2RlZmluZSBCQ0lfQkRf VElMRV9NQVNLICAgICAgICAgICAgIDB4MDMwMDAwMDANCj4gLSNkZWZpbmUgQkNJX0JEX1RJ TEVfTk9ORSAgICAgICAgICAgICAweDAwMDAwMDAwDQo+IC0jZGVmaW5lIEJDSV9CRF9USUxF XzE2ICAgICAgICAgICAgICAgMHgwMjAwMDAwMA0KPiAtI2RlZmluZSBCQ0lfQkRfVElMRV8z MiAgICAgICAgICAgICAgIDB4MDMwMDAwMDANCj4gLSNkZWZpbmUgQkNJX0JEX0dFVF9CUFAo YmQpICAgICAgICAgICAoKChiZCkgPj4gMTYpICYgMHhGRikNCj4gLSNkZWZpbmUgQkNJX0JE X1NFVF9CUFAoYmQsIGJwcCkgICAgICAoKGJkKSB8PSAoKChicHApICYgMHhGRikgPDwgMTYp KQ0KPiAtI2RlZmluZSBCQ0lfQkRfR0VUX1NUUklERShiZCkgICAgICAgICgoYmQpICYgMHhG RkZGKQ0KPiAtI2RlZmluZSBCQ0lfQkRfU0VUX1NUUklERShiZCwgc3QpICAgICgoYmQpIHw9 ICgoc3QpICYgMHhGRkZGKSkNCj4gLQ0KPiAtI2RlZmluZSBCQ0lfQ01EX1NFVF9SRUdJU1RF UiAgICAgICAgICAgIDB4OTYwMDAwMDANCj4gLQ0KPiAtI2RlZmluZSBCQ0lfQ01EX1dBSVQg ICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDANCj4gLSNkZWZpbmUgQkNJX0NNRF9XQUlU XzNEICAgICAgICAgICAgICAgICAweDAwMDEwMDAwDQo+IC0jZGVmaW5lIEJDSV9DTURfV0FJ VF8yRCAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMA0KPiAtDQo+IC0jZGVmaW5lIEJDSV9D TURfVVBEQVRFX0VWRU5UX1RBRyAgICAgICAgMHg5ODAwMDAwMA0KPiAtDQo+IC0jZGVmaW5l IEJDSV9DTURfRFJBV19QUklNICAgICAgICAgICAgICAgMHg4MDAwMDAwMA0KPiAtI2RlZmlu ZSBCQ0lfQ01EX0RSQVdfSU5ERVhFRF9QUklNICAgICAgIDB4ODgwMDAwMDANCj4gLSNkZWZp bmUgQkNJX0NNRF9EUkFXX0NPTlQgICAgICAgICAgICAgICAweDAxMDAwMDAwDQo+IC0jZGVm aW5lIEJDSV9DTURfRFJBV19UUklMSVNUICAgICAgICAgICAgMHgwMDAwMDAwMA0KPiAtI2Rl ZmluZSBCQ0lfQ01EX0RSQVdfVFJJU1RSSVAgICAgICAgICAgIDB4MDIwMDAwMDANCj4gLSNk ZWZpbmUgQkNJX0NNRF9EUkFXX1RSSUZBTiAgICAgICAgICAgICAweDA0MDAwMDAwDQo+IC0j ZGVmaW5lIEJDSV9DTURfRFJBV19TS0lQRkxBR1MgICAgICAgICAgMHgwMDAwMDBmZg0KPiAt I2RlZmluZSBCQ0lfQ01EX0RSQVdfTk9fWgkJMHgwMDAwMDAwMQ0KPiAtI2RlZmluZSBCQ0lf Q01EX0RSQVdfTk9fVwkJMHgwMDAwMDAwMg0KPiAtI2RlZmluZSBCQ0lfQ01EX0RSQVdfTk9f Q0QJCTB4MDAwMDAwMDQNCj4gLSNkZWZpbmUgQkNJX0NNRF9EUkFXX05PX0NTCQkweDAwMDAw MDA4DQo+IC0jZGVmaW5lIEJDSV9DTURfRFJBV19OT19VMAkJMHgwMDAwMDAxMA0KPiAtI2Rl ZmluZSBCQ0lfQ01EX0RSQVdfTk9fVjAJCTB4MDAwMDAwMjANCj4gLSNkZWZpbmUgQkNJX0NN RF9EUkFXX05PX1VWMAkJMHgwMDAwMDAzMA0KPiAtI2RlZmluZSBCQ0lfQ01EX0RSQVdfTk9f VTEJCTB4MDAwMDAwNDANCj4gLSNkZWZpbmUgQkNJX0NNRF9EUkFXX05PX1YxCQkweDAwMDAw MDgwDQo+IC0jZGVmaW5lIEJDSV9DTURfRFJBV19OT19VVjEJCTB4MDAwMDAwYzANCj4gLQ0K PiAtI2RlZmluZSBCQ0lfQ01EX0RNQQkJCTB4YTgwMDAwMDANCj4gLQ0KPiAtI2RlZmluZSBC Q0lfV19IKHcsIGgpICAgICAgICAgICAgICAgICgoKChoKSA8PCAxNikgfCAodykpICYgMHgw RkZGMEZGRikNCj4gLSNkZWZpbmUgQkNJX1hfWSh4LCB5KSAgICAgICAgICAgICAgICAoKCgo eSkgPDwgMTYpIHwgKHgpKSAmIDB4MEZGRjBGRkYpDQo+IC0jZGVmaW5lIEJDSV9YX1coeCwg eSkgICAgICAgICAgICAgICAgKCgoKHcpIDw8IDE2KSB8ICh4KSkgJiAweDBGRkYwRkZGKQ0K PiAtI2RlZmluZSBCQ0lfQ0xJUF9MUihsLCByKSAgICAgICAgICAgICgoKChyKSA8PCAxNikg fCAobCkpICYgMHgwRkZGMEZGRikNCj4gLSNkZWZpbmUgQkNJX0NMSVBfVEwodCwgbCkgICAg ICAgICAgICAoKCgodCkgPDwgMTYpIHwgKGwpKSAmIDB4MEZGRjBGRkYpDQo+IC0jZGVmaW5l IEJDSV9DTElQX0JSKGIsIHIpICAgICAgICAgICAgKCgoKGIpIDw8IDE2KSB8IChyKSkgJiAw eDBGRkYwRkZGKQ0KPiAtDQo+IC0jZGVmaW5lIEJDSV9MSU5FX1hfWSh4LCB5KSAgICAgICAg ICAgKCgoeSkgPDwgMTYpIHwgKCh4KSAmIDB4RkZGRikpDQo+IC0jZGVmaW5lIEJDSV9MSU5F X1NURVBTKGRpYWcsIGF4aSkgICAgKCgoYXhpKSA8PCAxNikgfCAoKGRpYWcpICYgMHhGRkZG KSkNCj4gLSNkZWZpbmUgQkNJX0xJTkVfTUlTQyhtYWosIHltLCB4cCwgeXAsIGVycikgXA0K PiAtCSgoKG1haikgJiAweDFGRkYpIHwgXA0KPiAtCSgoeW0pID8gMTw8MTMgOiAwKSB8IFwN Cj4gLQkoKHhwKSA/IDE8PDE0IDogMCkgfCBcDQo+IC0JKCh5cCkgPyAxPDwxNSA6IDApIHwg XA0KPiAtCSgoZXJyKSA8PCAxNikpDQo+IC0NCj4gLS8qDQo+IC0gKiBjb21tb24gY29tbWFu ZHMNCj4gLSAqLw0KPiAtI2RlZmluZSBCQ0lfU0VUX1JFR0lTVEVSUyggZmlyc3QsIG4gKQkJ CVwNCj4gLQlCQ0lfV1JJVEUoQkNJX0NNRF9TRVRfUkVHSVNURVIgfAkJXA0KPiAtCQkgICgo dWludDMyX3QpKG4pICYgMHhmZikgPDwgMTYgfAlcDQo+IC0JCSAgKCh1aW50MzJfdCkoZmly c3QpICYgMHhmZmZmKSkNCj4gLSNkZWZpbmUgRE1BX1NFVF9SRUdJU1RFUlMoIGZpcnN0LCBu ICkJCQlcDQo+IC0JRE1BX1dSSVRFKEJDSV9DTURfU0VUX1JFR0lTVEVSIHwJCVwNCj4gLQkJ ICAoKHVpbnQzMl90KShuKSAmIDB4ZmYpIDw8IDE2IHwJXA0KPiAtCQkgICgodWludDMyX3Qp KGZpcnN0KSAmIDB4ZmZmZikpDQo+IC0NCj4gLSNkZWZpbmUgQkNJX0RSQVdfUFJJTUlUSVZF KG4sIHR5cGUsIHNraXApICAgICAgICAgXA0KPiAtICAgICAgICBCQ0lfV1JJVEUoQkNJX0NN RF9EUkFXX1BSSU0gfCAodHlwZSkgfCAoc2tpcCkgfCBcDQo+IC0JCSAgKChuKSA8PCAxNikp DQo+IC0jZGVmaW5lIERNQV9EUkFXX1BSSU1JVElWRShuLCB0eXBlLCBza2lwKSAgICAgICAg IFwNCj4gLSAgICAgICAgRE1BX1dSSVRFKEJDSV9DTURfRFJBV19QUklNIHwgKHR5cGUpIHwg KHNraXApIHwgXA0KPiAtCQkgICgobikgPDwgMTYpKQ0KPiAtDQo+IC0jZGVmaW5lIEJDSV9E UkFXX0lORElDRVNfUzNEKG4sIHR5cGUsIGkwKSAgICAgICAgIFwNCj4gLSAgICAgICAgQkNJ X1dSSVRFKEJDSV9DTURfRFJBV19JTkRFWEVEX1BSSU0gfCAodHlwZSkgfCAgXA0KPiAtCQkg ICgobikgPDwgMTYpIHwgKGkwKSkNCj4gLQ0KPiAtI2RlZmluZSBCQ0lfRFJBV19JTkRJQ0VT X1M0KG4sIHR5cGUsIHNraXApICAgICAgICBcDQo+IC0gICAgICAgIEJDSV9XUklURShCQ0lf Q01EX0RSQVdfSU5ERVhFRF9QUklNIHwgKHR5cGUpIHwgIFwNCj4gLSAgICAgICAgICAgICAg ICAgIChza2lwKSB8ICgobikgPDwgMTYpKQ0KPiAtDQo+IC0jZGVmaW5lIEJDSV9ETUEobikJ XA0KPiAtCUJDSV9XUklURShCQ0lfQ01EX0RNQSB8ICgoKG4pID4+IDEpIC0gMSkpDQo+IC0N Cj4gLS8qDQo+IC0gKiBhY2Nlc3MgdG8gTU1JTw0KPiAtICovDQo+IC0jZGVmaW5lIFNBVkFH RV9SRUFEKHJlZykgXA0KPiAtICAgICAgIHJlYWRsKCgodm9pZCBfX2lvbWVtICopZGV2X3By aXYtPm1taW8tPmhhbmRsZSkgKyAocmVnKSkNCj4gLSNkZWZpbmUgU0FWQUdFX1dSSVRFKHJl ZykgXA0KPiAtCXdyaXRlbCh2YWwsICgodm9pZCBfX2lvbWVtICopZGV2X3ByaXYtPm1taW8t PmhhbmRsZSkgKyAocmVnKSkNCj4gLQ0KPiAtLyoNCj4gLSAqIGFjY2VzcyB0byB0aGUgYnVy c3QgY29tbWFuZCBpbnRlcmZhY2UgKEJDSSkNCj4gLSAqLw0KPiAtI2RlZmluZSBTQVZBR0Vf QkNJX0RFQlVHIDENCj4gLQ0KPiAtI2RlZmluZSBCQ0lfTE9DQUxTICAgIHZvbGF0aWxlIHVp bnQzMl90ICpiY2lfcHRyOw0KPiAtDQo+IC0jZGVmaW5lIEJFR0lOX0JDSSggbiApIGRvIHsJ CQlcDQo+IC0JZGV2X3ByaXYtPndhaXRfZmlmbyhkZXZfcHJpdiwgKG4pKTsJXA0KPiAtCWJj aV9wdHIgPSBkZXZfcHJpdi0+YmNpX3B0cjsJCVwNCj4gLX0gd2hpbGUoMCkNCj4gLQ0KPiAt I2RlZmluZSBCQ0lfV1JJVEUoIHZhbCApICpiY2lfcHRyKysgPSAodWludDMyX3QpKHZhbCkN Cj4gLQ0KPiAtLyoNCj4gLSAqIGNvbW1hbmQgRE1BIHN1cHBvcnQNCj4gLSAqLw0KPiAtI2Rl ZmluZSBTQVZBR0VfRE1BX0RFQlVHIDENCj4gLQ0KPiAtI2RlZmluZSBETUFfTE9DQUxTICAg dWludDMyX3QgKmRtYV9wdHI7DQo+IC0NCj4gLSNkZWZpbmUgQkVHSU5fRE1BKCBuICkgZG8g ewkJCQkJCVwNCj4gLQl1bnNpZ25lZCBpbnQgY3VyID0gZGV2X3ByaXYtPmN1cnJlbnRfZG1h X3BhZ2U7CQkJXA0KPiAtCXVuc2lnbmVkIGludCByZXN0ID0gU0FWQUdFX0RNQV9QQUdFX1NJ WkUgLQkJCVwNCj4gLQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQ7CQkJCVwNCj4g LQlpZiAoKG4pID4gcmVzdCkgewkJCQkJCVwNCj4gLQkJZG1hX3B0ciA9IHNhdmFnZV9kbWFf YWxsb2MoZGV2X3ByaXYsIChuKSk7CQlcDQo+IC0JfSBlbHNlIHsgLyogZmFzdCBwYXRoIGZv ciBzbWFsbCBhbGxvY2F0aW9ucyAqLwkJCVwNCj4gLQkJZG1hX3B0ciA9ICh1aW50MzJfdCAq KWRldl9wcml2LT5jbWRfZG1hLT5oYW5kbGUgKwlcDQo+IC0JCQljdXIgKiBTQVZBR0VfRE1B X1BBR0VfU0laRSArCQkJXA0KPiAtCQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQ7 CQkJXA0KPiAtCQlpZiAoZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQgPT0gMCkJCQlc DQo+IC0JCQlzYXZhZ2VfZG1hX3dhaXQoZGV2X3ByaXYsIGN1cik7CQkJXA0KPiAtCQlkZXZf cHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZCArPSAobik7CQkJXA0KPiAtCX0JCQkJCQkJCVwN Cj4gLX0gd2hpbGUoMCkNCj4gLQ0KPiAtI2RlZmluZSBETUFfV1JJVEUoIHZhbCApICpkbWFf cHRyKysgPSAodWludDMyX3QpKHZhbCkNCj4gLQ0KPiAtI2RlZmluZSBETUFfQ09QWShzcmMs IG4pIGRvIHsJCQkJCVwNCj4gLQltZW1jcHkoZG1hX3B0ciwgKHNyYyksIChuKSo0KTsJCQkJ XA0KPiAtCWRtYV9wdHIgKz0gbjsJCQkJCQlcDQo+IC19IHdoaWxlKDApDQo+IC0NCj4gLSNp ZiBTQVZBR0VfRE1BX0RFQlVHDQo+IC0jZGVmaW5lIERNQV9DT01NSVQoKSBkbyB7CQkJCQkJ XA0KPiAtCXVuc2lnbmVkIGludCBjdXIgPSBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZTsJ CQlcDQo+IC0JdWludDMyX3QgKmV4cGVjdGVkID0gKHVpbnQzMl90ICopZGV2X3ByaXYtPmNt ZF9kbWEtPmhhbmRsZSArCVwNCj4gLQkJCWN1ciAqIFNBVkFHRV9ETUFfUEFHRV9TSVpFICsJ CQlcDQo+IC0JCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZDsJCQlcDQo+IC0JaWYg KGRtYV9wdHIgIT0gZXhwZWN0ZWQpIHsJCQkJCVwNCj4gLQkJRFJNX0VSUk9SKCJETUEgYWxs b2NhdGlvbiBhbmQgdXNlIGRvbid0IG1hdGNoOiAiCVwNCj4gLQkJCSAgIiVwICE9ICVwXG4i LCBleHBlY3RlZCwgZG1hX3B0cik7CQlcDQo+IC0JCXNhdmFnZV9kbWFfcmVzZXQoZGV2X3By aXYpOwkJCQlcDQo+IC0JfQkJCQkJCQkJXA0KPiAtfSB3aGlsZSgwKQ0KPiAtI2Vsc2UNCj4g LSNkZWZpbmUgRE1BX0NPTU1JVCgpIGRvIHsvKiBub3RoaW5nICovfSB3aGlsZSgwKQ0KPiAt I2VuZGlmDQo+IC0NCj4gLSNkZWZpbmUgRE1BX0ZMVVNIKCkgZGV2X3ByaXYtPmRtYV9mbHVz aChkZXZfcHJpdikNCj4gLQ0KPiAtLyogQnVmZmVyIGFnaW5nIHZpYSBldmVudCB0YWcNCj4g LSAqLw0KPiAtDQo+IC0jZGVmaW5lIFVQREFURV9FVkVOVF9DT1VOVEVSKCApIGRvIHsJCQlc DQo+IC0JaWYgKGRldl9wcml2LT5zdGF0dXNfcHRyKSB7CQkJXA0KPiAtCQl1aW50MTZfdCBj b3VudDsJCQkJXA0KPiAtCQkvKiBjb29yZGluYXRlIHdpdGggWHNlcnZlciAqLwkJXA0KPiAt CQljb3VudCA9IGRldl9wcml2LT5zdGF0dXNfcHRyWzEwMjNdOwlcDQo+IC0JCWlmIChjb3Vu dCA8IGRldl9wcml2LT5ldmVudF9jb3VudGVyKQlcDQo+IC0JCQlkZXZfcHJpdi0+ZXZlbnRf d3JhcCsrOwkJXA0KPiAtCQlkZXZfcHJpdi0+ZXZlbnRfY291bnRlciA9IGNvdW50OwlcDQo+ IC0JfQkJCQkJCVwNCj4gLX0gd2hpbGUoMCkNCj4gLQ0KPiAtI2RlZmluZSBTRVRfQUdFKCBh Z2UsIGUsIHcgKSBkbyB7CVwNCj4gLQkoYWdlKS0+ZXZlbnQgPSBlOwkJXA0KPiAtCShhZ2Up LT53cmFwID0gdzsJCVwNCj4gLX0gd2hpbGUoMCkNCj4gLQ0KPiAtI2RlZmluZSBURVNUX0FH RSggYWdlLCBlLCB3ICkJCQkJXA0KPiAtCSggKGFnZSktPndyYXAgPCAodykgfHwgKCAoYWdl KS0+d3JhcCA9PSAodykgJiYgKGFnZSktPmV2ZW50IDw9IChlKSApICkNCj4gLQ0KPiAtI2Vu ZGlmCQkJCS8qIF9fU0FWQUdFX0RSVl9IX18gKi8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9zYXZhZ2Uvc2F2YWdlX3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2F2YWdl L3NhdmFnZV9zdGF0ZS5jDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCBl MGQ0MGFlNjdkNTQuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2F2 YWdlL3NhdmFnZV9zdGF0ZS5jDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMTE2OSArMCww IEBADQo+IC0vKiBzYXZhZ2Vfc3RhdGUuYyAtLSBTdGF0ZSBhbmQgZHJhd2luZyBzdXBwb3J0 IGZvciBTYXZhZ2UNCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgMjAwNCAgRmVsaXggS3VlaGxp bmcNCj4gLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+IC0gKg0KPiAtICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0gKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsDQo+IC0gKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUNCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUNCj4gLSAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zDQo+IC0gKiBvZiB0aGUgU29mdHdhcmUuDQo+ IC0gKg0KPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQo+IC0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YNCj4gLSAqIE1FUkNI QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EDQo+IC0g KiBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBGRUxJWCBLVUVITElORyBC RSBMSUFCTEUgRk9SDQo+IC0gKiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRg0KPiAtICogQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9ODQo+IC0g KiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4NCj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvc2xhYi5oPg0K PiAtI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4NCj4gLQ0KPiAtI2luY2x1ZGUgPGRybS9k cm1fZGV2aWNlLmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+DQo+IC0jaW5jbHVk ZSA8ZHJtL2RybV9wcmludC5oPg0KPiAtI2luY2x1ZGUgPGRybS9zYXZhZ2VfZHJtLmg+DQo+ IC0NCj4gLSNpbmNsdWRlICJzYXZhZ2VfZHJ2LmgiDQo+IC0NCj4gLXZvaWQgc2F2YWdlX2Vt aXRfY2xpcF9yZWN0X3MzZChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LA0KPiAt CQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY2xpcF9yZWN0ICogcGJveCkNCj4gLXsNCj4g LQl1aW50MzJfdCBzY3N0YXJ0ID0gZGV2X3ByaXYtPnN0YXRlLnMzZC5uZXdfc2NzdGFydDsN Cj4gLQl1aW50MzJfdCBzY2VuZCA9IGRldl9wcml2LT5zdGF0ZS5zM2QubmV3X3NjZW5kOw0K PiAtCXNjc3RhcnQgPSAoc2NzdGFydCAmIH5TQVZBR0VfU0NJU1NPUl9NQVNLX1MzRCkgfA0K PiAtCSAgICAoKHVpbnQzMl90KSBwYm94LT54MSAmIDB4MDAwMDA3ZmYpIHwNCj4gLQkgICAg KCgodWludDMyX3QpIHBib3gtPnkxIDw8IDE2KSAmIDB4MDdmZjAwMDApOw0KPiAtCXNjZW5k ID0gKHNjZW5kICYgflNBVkFHRV9TQ0lTU09SX01BU0tfUzNEKSB8DQo+IC0JICAgICgoKHVp bnQzMl90KSBwYm94LT54MiAtIDEpICYgMHgwMDAwMDdmZikgfA0KPiAtCSAgICAoKCgodWlu dDMyX3QpIHBib3gtPnkyIC0gMSkgPDwgMTYpICYgMHgwN2ZmMDAwMCk7DQo+IC0JaWYgKHNj c3RhcnQgIT0gZGV2X3ByaXYtPnN0YXRlLnMzZC5zY3N0YXJ0IHx8DQo+IC0JICAgIHNjZW5k ICE9IGRldl9wcml2LT5zdGF0ZS5zM2Quc2NlbmQpIHsNCj4gLQkJRE1BX0xPQ0FMUzsNCj4g LQkJQkVHSU5fRE1BKDQpOw0KPiAtCQlETUFfV1JJVEUoQkNJX0NNRF9XQUlUIHwgQkNJX0NN RF9XQUlUXzNEKTsNCj4gLQkJRE1BX1NFVF9SRUdJU1RFUlMoU0FWQUdFX1NDU1RBUlRfUzNE LCAyKTsNCj4gLQkJRE1BX1dSSVRFKHNjc3RhcnQpOw0KPiAtCQlETUFfV1JJVEUoc2NlbmQp Ow0KPiAtCQlkZXZfcHJpdi0+c3RhdGUuczNkLnNjc3RhcnQgPSBzY3N0YXJ0Ow0KPiAtCQlk ZXZfcHJpdi0+c3RhdGUuczNkLnNjZW5kID0gc2NlbmQ7DQo+IC0JCWRldl9wcml2LT53YWl0 aW5nID0gMTsNCj4gLQkJRE1BX0NPTU1JVCgpOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtdm9p ZCBzYXZhZ2VfZW1pdF9jbGlwX3JlY3RfczQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZf cHJpdiwNCj4gLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY2xpcF9yZWN0ICogcGJveCkN Cj4gLXsNCj4gLQl1aW50MzJfdCBkcmF3Y3RybDAgPSBkZXZfcHJpdi0+c3RhdGUuczQubmV3 X2RyYXdjdHJsMDsNCj4gLQl1aW50MzJfdCBkcmF3Y3RybDEgPSBkZXZfcHJpdi0+c3RhdGUu czQubmV3X2RyYXdjdHJsMTsNCj4gLQlkcmF3Y3RybDAgPSAoZHJhd2N0cmwwICYgflNBVkFH RV9TQ0lTU09SX01BU0tfUzQpIHwNCj4gLQkgICAgKCh1aW50MzJfdCkgcGJveC0+eDEgJiAw eDAwMDAwN2ZmKSB8DQo+IC0JICAgICgoKHVpbnQzMl90KSBwYm94LT55MSA8PCAxMikgJiAw eDAwZmZmMDAwKTsNCj4gLQlkcmF3Y3RybDEgPSAoZHJhd2N0cmwxICYgflNBVkFHRV9TQ0lT U09SX01BU0tfUzQpIHwNCj4gLQkgICAgKCgodWludDMyX3QpIHBib3gtPngyIC0gMSkgJiAw eDAwMDAwN2ZmKSB8DQo+IC0JICAgICgoKCh1aW50MzJfdCkgcGJveC0+eTIgLSAxKSA8PCAx MikgJiAweDAwZmZmMDAwKTsNCj4gLQlpZiAoZHJhd2N0cmwwICE9IGRldl9wcml2LT5zdGF0 ZS5zNC5kcmF3Y3RybDAgfHwNCj4gLQkgICAgZHJhd2N0cmwxICE9IGRldl9wcml2LT5zdGF0 ZS5zNC5kcmF3Y3RybDEpIHsNCj4gLQkJRE1BX0xPQ0FMUzsNCj4gLQkJQkVHSU5fRE1BKDQp Ow0KPiAtCQlETUFfV1JJVEUoQkNJX0NNRF9XQUlUIHwgQkNJX0NNRF9XQUlUXzNEKTsNCj4g LQkJRE1BX1NFVF9SRUdJU1RFUlMoU0FWQUdFX0RSQVdDVFJMMF9TNCwgMik7DQo+IC0JCURN QV9XUklURShkcmF3Y3RybDApOw0KPiAtCQlETUFfV1JJVEUoZHJhd2N0cmwxKTsNCj4gLQkJ ZGV2X3ByaXYtPnN0YXRlLnM0LmRyYXdjdHJsMCA9IGRyYXdjdHJsMDsNCj4gLQkJZGV2X3By aXYtPnN0YXRlLnM0LmRyYXdjdHJsMSA9IGRyYXdjdHJsMTsNCj4gLQkJZGV2X3ByaXYtPndh aXRpbmcgPSAxOw0KPiAtCQlETUFfQ09NTUlUKCk7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgaW50IHNhdmFnZV92ZXJpZnlfdGV4YWRkcihkcm1fc2F2YWdlX3ByaXZhdGVfdCAq IGRldl9wcml2LCBpbnQgdW5pdCwNCj4gLQkJCQkgdWludDMyX3QgYWRkcikNCj4gLXsNCj4g LQlpZiAoKGFkZHIgJiA2KSAhPSAyKSB7CS8qIHJlc2VydmVkIGJpdHMgKi8NCj4gLQkJRFJN X0VSUk9SKCJiYWQgdGV4QWRkciVkICUwOHggKHJlc2VydmVkIGJpdHMpXG4iLCB1bml0LCBh ZGRyKTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtCWlmICghKGFkZHIgJiAx KSkgewkvKiBsb2NhbCAqLw0KPiAtCQlhZGRyICY9IH43Ow0KPiAtCQlpZiAoYWRkciA8IGRl dl9wcml2LT50ZXh0dXJlX29mZnNldCB8fA0KPiAtCQkgICAgYWRkciA+PSBkZXZfcHJpdi0+ dGV4dHVyZV9vZmZzZXQgKyBkZXZfcHJpdi0+dGV4dHVyZV9zaXplKSB7DQo+IC0JCQlEUk1f RVJST1INCj4gLQkJCSAgICAoImJhZCB0ZXhBZGRyJWQgJTA4eCAobG9jYWwgYWRkciBvdXQg b2YgcmFuZ2UpXG4iLA0KPiAtCQkJICAgICB1bml0LCBhZGRyKTsNCj4gLQkJCXJldHVybiAt RUlOVkFMOw0KPiAtCQl9DQo+IC0JfSBlbHNlIHsJCS8qIEFHUCAqLw0KPiAtCQlpZiAoIWRl dl9wcml2LT5hZ3BfdGV4dHVyZXMpIHsNCj4gLQkJCURSTV9FUlJPUigiYmFkIHRleEFkZHIl ZCAlMDh4IChBR1Agbm90IGF2YWlsYWJsZSlcbiIsDQo+IC0JCQkJICB1bml0LCBhZGRyKTsN Cj4gLQkJCXJldHVybiAtRUlOVkFMOw0KPiAtCQl9DQo+IC0JCWFkZHIgJj0gfjc7DQo+IC0J CWlmIChhZGRyIDwgZGV2X3ByaXYtPmFncF90ZXh0dXJlcy0+b2Zmc2V0IHx8DQo+IC0JCSAg ICBhZGRyID49IChkZXZfcHJpdi0+YWdwX3RleHR1cmVzLT5vZmZzZXQgKw0KPiAtCQkJICAg ICBkZXZfcHJpdi0+YWdwX3RleHR1cmVzLT5zaXplKSkgew0KPiAtCQkJRFJNX0VSUk9SDQo+ IC0JCQkgICAgKCJiYWQgdGV4QWRkciVkICUwOHggKEFHUCBhZGRyIG91dCBvZiByYW5nZSlc biIsDQo+IC0JCQkgICAgIHVuaXQsIGFkZHIpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JCX0NCj4gLQl9DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLSNkZWZpbmUgU0FW RV9TVEFURShyZWcsd2hlcmUpCQkJXA0KPiAtCWlmKHN0YXJ0IDw9IHJlZyAmJiBzdGFydCtj b3VudCA+IHJlZykJXA0KPiAtCQlkZXZfcHJpdi0+c3RhdGUud2hlcmUgPSByZWdzW3JlZyAt IHN0YXJ0XQ0KPiAtI2RlZmluZSBTQVZFX1NUQVRFX01BU0socmVnLHdoZXJlLG1hc2spIGRv IHsJCQlcDQo+IC0JaWYoc3RhcnQgPD0gcmVnICYmIHN0YXJ0K2NvdW50ID4gcmVnKSB7CQkJ XA0KPiAtCQl1aW50MzJfdCB0bXA7CQkJCQlcDQo+IC0JCXRtcCA9IHJlZ3NbcmVnIC0gc3Rh cnRdOwkJCVwNCj4gLQkJZGV2X3ByaXYtPnN0YXRlLndoZXJlID0gKHRtcCAmIChtYXNrKSkg fAlcDQo+IC0JCQkoZGV2X3ByaXYtPnN0YXRlLndoZXJlICYgfihtYXNrKSk7CVwNCj4gLQl9 CQkJCQkJCVwNCj4gLX0gd2hpbGUgKDApDQo+IC0NCj4gLXN0YXRpYyBpbnQgc2F2YWdlX3Zl cmlmeV9zdGF0ZV9zM2QoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwNCj4gLQkJ CQkgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCwNCj4gLQkJCQkg ICBjb25zdCB1aW50MzJfdCAqcmVncykNCj4gLXsNCj4gLQlpZiAoc3RhcnQgPCBTQVZBR0Vf VEVYUEFMQUREUl9TM0QgfHwNCj4gLQkgICAgc3RhcnQgKyBjb3VudCAtIDEgPiBTQVZBR0Vf REVTVFRFWFJXV0FURVJNQVJLX1MzRCkgew0KPiAtCQlEUk1fRVJST1IoImludmFsaWQgcmVn aXN0ZXIgcmFuZ2UgKDB4JTA0eC0weCUwNHgpXG4iLA0KPiAtCQkJICBzdGFydCwgc3RhcnQg KyBjb3VudCAtIDEpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlT QVZFX1NUQVRFX01BU0soU0FWQUdFX1NDU1RBUlRfUzNELCBzM2QubmV3X3Njc3RhcnQsDQo+ IC0JCQl+U0FWQUdFX1NDSVNTT1JfTUFTS19TM0QpOw0KPiAtCVNBVkVfU1RBVEVfTUFTSyhT QVZBR0VfU0NFTkRfUzNELCBzM2QubmV3X3NjZW5kLA0KPiAtCQkJflNBVkFHRV9TQ0lTU09S X01BU0tfUzNEKTsNCj4gLQ0KPiAtCS8qIGlmIGFueSB0ZXh0dXJlIHJlZ3Mgd2VyZSBjaGFu Z2VkIC4uLiAqLw0KPiAtCWlmIChzdGFydCA8PSBTQVZBR0VfVEVYQ1RSTF9TM0QgJiYNCj4g LQkgICAgc3RhcnQgKyBjb3VudCA+IFNBVkFHRV9URVhQQUxBRERSX1MzRCkgew0KPiAtCQkv KiAuLi4gY2hlY2sgdGV4dHVyZSBzdGF0ZSAqLw0KPiAtCQlTQVZFX1NUQVRFKFNBVkFHRV9U RVhDVFJMX1MzRCwgczNkLnRleGN0cmwpOw0KPiAtCQlTQVZFX1NUQVRFKFNBVkFHRV9URVhB RERSX1MzRCwgczNkLnRleGFkZHIpOw0KPiAtCQlpZiAoZGV2X3ByaXYtPnN0YXRlLnMzZC50 ZXhjdHJsICYgU0FWQUdFX1RFWENUUkxfVEVYRU5fTUFTSykNCj4gLQkJCXJldHVybiBzYXZh Z2VfdmVyaWZ5X3RleGFkZHIoZGV2X3ByaXYsIDAsDQo+IC0JCQkJCQlkZXZfcHJpdi0+c3Rh dGUuczNkLnRleGFkZHIpOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgaW50IHNhdmFnZV92ZXJpZnlfc3RhdGVfczQoZHJtX3NhdmFnZV9wcml2 YXRlX3QgKiBkZXZfcHJpdiwNCj4gLQkJCQkgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWdu ZWQgaW50IGNvdW50LA0KPiAtCQkJCSAgY29uc3QgdWludDMyX3QgKnJlZ3MpDQo+IC17DQo+ IC0JaW50IHJldCA9IDA7DQo+IC0NCj4gLQlpZiAoc3RhcnQgPCBTQVZBR0VfRFJBV0xPQ0FM Q1RSTF9TNCB8fA0KPiAtCSAgICBzdGFydCArIGNvdW50IC0gMSA+IFNBVkFHRV9URVhCTEVO RENPTE9SX1M0KSB7DQo+IC0JCURSTV9FUlJPUigiaW52YWxpZCByZWdpc3RlciByYW5nZSAo MHglMDR4LTB4JTA0eClcbiIsDQo+IC0JCQkgIHN0YXJ0LCBzdGFydCArIGNvdW50IC0gMSk7 DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCVNBVkVfU1RBVEVfTUFT SyhTQVZBR0VfRFJBV0NUUkwwX1M0LCBzNC5uZXdfZHJhd2N0cmwwLA0KPiAtCQkJflNBVkFH RV9TQ0lTU09SX01BU0tfUzQpOw0KPiAtCVNBVkVfU1RBVEVfTUFTSyhTQVZBR0VfRFJBV0NU UkwxX1M0LCBzNC5uZXdfZHJhd2N0cmwxLA0KPiAtCQkJflNBVkFHRV9TQ0lTU09SX01BU0tf UzQpOw0KPiAtDQo+IC0JLyogaWYgYW55IHRleHR1cmUgcmVncyB3ZXJlIGNoYW5nZWQgLi4u ICovDQo+IC0JaWYgKHN0YXJ0IDw9IFNBVkFHRV9URVhERVNDUl9TNCAmJg0KPiAtCSAgICBz dGFydCArIGNvdW50ID4gU0FWQUdFX1RFWFBBTEFERFJfUzQpIHsNCj4gLQkJLyogLi4uIGNo ZWNrIHRleHR1cmUgc3RhdGUgKi8NCj4gLQkJU0FWRV9TVEFURShTQVZBR0VfVEVYREVTQ1Jf UzQsIHM0LnRleGRlc2NyKTsNCj4gLQkJU0FWRV9TVEFURShTQVZBR0VfVEVYQUREUjBfUzQs IHM0LnRleGFkZHIwKTsNCj4gLQkJU0FWRV9TVEFURShTQVZBR0VfVEVYQUREUjFfUzQsIHM0 LnRleGFkZHIxKTsNCj4gLQkJaWYgKGRldl9wcml2LT5zdGF0ZS5zNC50ZXhkZXNjciAmIFNB VkFHRV9URVhERVNDUl9URVgwRU5fTUFTSykNCj4gLQkJCXJldCB8PSBzYXZhZ2VfdmVyaWZ5 X3RleGFkZHIoZGV2X3ByaXYsIDAsDQo+IC0JCQkJCQlkZXZfcHJpdi0+c3RhdGUuczQudGV4 YWRkcjApOw0KPiAtCQlpZiAoZGV2X3ByaXYtPnN0YXRlLnM0LnRleGRlc2NyICYgU0FWQUdF X1RFWERFU0NSX1RFWDFFTl9NQVNLKQ0KPiAtCQkJcmV0IHw9IHNhdmFnZV92ZXJpZnlfdGV4 YWRkcihkZXZfcHJpdiwgMSwNCj4gLQkJCQkJCWRldl9wcml2LT5zdGF0ZS5zNC50ZXhhZGRy MSk7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtI3VuZGVm IFNBVkVfU1RBVEUNCj4gLSN1bmRlZiBTQVZFX1NUQVRFX01BU0sNCj4gLQ0KPiAtc3RhdGlj IGludCBzYXZhZ2VfZGlzcGF0Y2hfc3RhdGUoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZf cHJpdiwNCj4gLQkJCQkgY29uc3QgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgKiBjbWRfaGVh ZGVyLA0KPiAtCQkJCSBjb25zdCB1aW50MzJfdCAqcmVncykNCj4gLXsNCj4gLQl1bnNpZ25l ZCBpbnQgY291bnQgPSBjbWRfaGVhZGVyLT5zdGF0ZS5jb3VudDsNCj4gLQl1bnNpZ25lZCBp bnQgc3RhcnQgPSBjbWRfaGVhZGVyLT5zdGF0ZS5zdGFydDsNCj4gLQl1bnNpZ25lZCBpbnQg Y291bnQyID0gMDsNCj4gLQl1bnNpZ25lZCBpbnQgYmNpX3NpemU7DQo+IC0JaW50IHJldDsN Cj4gLQlETUFfTE9DQUxTOw0KPiAtDQo+IC0JaWYgKCFjb3VudCkNCj4gLQkJcmV0dXJuIDA7 DQo+IC0NCj4gLQlpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkg ew0KPiAtCQlyZXQgPSBzYXZhZ2VfdmVyaWZ5X3N0YXRlX3MzZChkZXZfcHJpdiwgc3RhcnQs IGNvdW50LCByZWdzKTsNCj4gLQkJaWYgKHJldCAhPSAwKQ0KPiAtCQkJcmV0dXJuIHJldDsN Cj4gLQkJLyogc2Npc3NvciByZWdzIGFyZSBlbWl0dGVkIGluIHNhdmFnZV9kaXNwYXRjaF9k cmF3ICovDQo+IC0JCWlmIChzdGFydCA8IFNBVkFHRV9TQ1NUQVJUX1MzRCkgew0KPiAtCQkJ aWYgKHN0YXJ0ICsgY291bnQgPiBTQVZBR0VfU0NFTkRfUzNEICsgMSkNCj4gLQkJCQljb3Vu dDIgPSBjb3VudCAtIChTQVZBR0VfU0NFTkRfUzNEICsgMSAtIHN0YXJ0KTsNCj4gLQkJCWlm IChzdGFydCArIGNvdW50ID4gU0FWQUdFX1NDU1RBUlRfUzNEKQ0KPiAtCQkJCWNvdW50ID0g U0FWQUdFX1NDU1RBUlRfUzNEIC0gc3RhcnQ7DQo+IC0JCX0gZWxzZSBpZiAoc3RhcnQgPD0g U0FWQUdFX1NDRU5EX1MzRCkgew0KPiAtCQkJaWYgKHN0YXJ0ICsgY291bnQgPiBTQVZBR0Vf U0NFTkRfUzNEICsgMSkgew0KPiAtCQkJCWNvdW50IC09IFNBVkFHRV9TQ0VORF9TM0QgKyAx IC0gc3RhcnQ7DQo+IC0JCQkJc3RhcnQgPSBTQVZBR0VfU0NFTkRfUzNEICsgMTsNCj4gLQkJ CX0gZWxzZQ0KPiAtCQkJCXJldHVybiAwOw0KPiAtCQl9DQo+IC0JfSBlbHNlIHsNCj4gLQkJ cmV0ID0gc2F2YWdlX3ZlcmlmeV9zdGF0ZV9zNChkZXZfcHJpdiwgc3RhcnQsIGNvdW50LCBy ZWdzKTsNCj4gLQkJaWYgKHJldCAhPSAwKQ0KPiAtCQkJcmV0dXJuIHJldDsNCj4gLQkJLyog c2Npc3NvciByZWdzIGFyZSBlbWl0dGVkIGluIHNhdmFnZV9kaXNwYXRjaF9kcmF3ICovDQo+ IC0JCWlmIChzdGFydCA8IFNBVkFHRV9EUkFXQ1RSTDBfUzQpIHsNCj4gLQkJCWlmIChzdGFy dCArIGNvdW50ID4gU0FWQUdFX0RSQVdDVFJMMV9TNCArIDEpDQo+IC0JCQkJY291bnQyID0g Y291bnQgLQ0KPiAtCQkJCQkgKFNBVkFHRV9EUkFXQ1RSTDFfUzQgKyAxIC0gc3RhcnQpOw0K PiAtCQkJaWYgKHN0YXJ0ICsgY291bnQgPiBTQVZBR0VfRFJBV0NUUkwwX1M0KQ0KPiAtCQkJ CWNvdW50ID0gU0FWQUdFX0RSQVdDVFJMMF9TNCAtIHN0YXJ0Ow0KPiAtCQl9IGVsc2UgaWYg KHN0YXJ0IDw9IFNBVkFHRV9EUkFXQ1RSTDFfUzQpIHsNCj4gLQkJCWlmIChzdGFydCArIGNv dW50ID4gU0FWQUdFX0RSQVdDVFJMMV9TNCArIDEpIHsNCj4gLQkJCQljb3VudCAtPSBTQVZB R0VfRFJBV0NUUkwxX1M0ICsgMSAtIHN0YXJ0Ow0KPiAtCQkJCXN0YXJ0ID0gU0FWQUdFX0RS QVdDVFJMMV9TNCArIDE7DQo+IC0JCQl9IGVsc2UNCj4gLQkJCQlyZXR1cm4gMDsNCj4gLQkJ fQ0KPiAtCX0NCj4gLQ0KPiAtCWJjaV9zaXplID0gY291bnQgKyAoY291bnQgKyAyNTQpIC8g MjU1ICsgY291bnQyICsgKGNvdW50MiArIDI1NCkgLyAyNTU7DQo+IC0NCj4gLQlpZiAoY21k X2hlYWRlci0+c3RhdGUuZ2xvYmFsKSB7DQo+IC0JCUJFR0lOX0RNQShiY2lfc2l6ZSArIDEp Ow0KPiAtCQlETUFfV1JJVEUoQkNJX0NNRF9XQUlUIHwgQkNJX0NNRF9XQUlUXzNEKTsNCj4g LQkJZGV2X3ByaXYtPndhaXRpbmcgPSAxOw0KPiAtCX0gZWxzZSB7DQo+IC0JCUJFR0lOX0RN QShiY2lfc2l6ZSk7DQo+IC0JfQ0KPiAtDQo+IC0JZG8gew0KPiAtCQl3aGlsZSAoY291bnQg PiAwKSB7DQo+IC0JCQl1bnNpZ25lZCBpbnQgbiA9IGNvdW50IDwgMjU1ID8gY291bnQgOiAy NTU7DQo+IC0JCQlETUFfU0VUX1JFR0lTVEVSUyhzdGFydCwgbik7DQo+IC0JCQlETUFfQ09Q WShyZWdzLCBuKTsNCj4gLQkJCWNvdW50IC09IG47DQo+IC0JCQlzdGFydCArPSBuOw0KPiAt CQkJcmVncyArPSBuOw0KPiAtCQl9DQo+IC0JCXN0YXJ0ICs9IDI7DQo+IC0JCXJlZ3MgKz0g MjsNCj4gLQkJY291bnQgPSBjb3VudDI7DQo+IC0JCWNvdW50MiA9IDA7DQo+IC0JfSB3aGls ZSAoY291bnQpOw0KPiAtDQo+IC0JRE1BX0NPTU1JVCgpOw0KPiAtDQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgc2F2YWdlX2Rpc3BhdGNoX2RtYV9wcmltKGRy bV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsDQo+IC0JCQkJICAgIGNvbnN0IGRybV9z YXZhZ2VfY21kX2hlYWRlcl90ICogY21kX2hlYWRlciwNCj4gLQkJCQkgICAgY29uc3Qgc3Ry dWN0IGRybV9idWYgKiBkbWFidWYpDQo+IC17DQo+IC0JdW5zaWduZWQgY2hhciByZW9yZGVy ID0gMDsNCj4gLQl1bnNpZ25lZCBpbnQgcHJpbSA9IGNtZF9oZWFkZXItPnByaW0ucHJpbTsN Cj4gLQl1bnNpZ25lZCBpbnQgc2tpcCA9IGNtZF9oZWFkZXItPnByaW0uc2tpcDsNCj4gLQl1 bnNpZ25lZCBpbnQgbiA9IGNtZF9oZWFkZXItPnByaW0uY291bnQ7DQo+IC0JdW5zaWduZWQg aW50IHN0YXJ0ID0gY21kX2hlYWRlci0+cHJpbS5zdGFydDsNCj4gLQl1bnNpZ25lZCBpbnQg aTsNCj4gLQlCQ0lfTE9DQUxTOw0KPiAtDQo+IC0JaWYgKCFkbWFidWYpIHsNCj4gLQkJRFJN X0VSUk9SKCJjYWxsZWQgd2l0aG91dCBkbWEgYnVmZmVycyFcbiIpOw0KPiAtCQlyZXR1cm4g LUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoIW4pDQo+IC0JCXJldHVybiAwOw0KPiAt DQo+IC0Jc3dpdGNoIChwcmltKSB7DQo+IC0JY2FzZSBTQVZBR0VfUFJJTV9UUklMSVNUXzIw MToNCj4gLQkJcmVvcmRlciA9IDE7DQo+IC0JCXByaW0gPSBTQVZBR0VfUFJJTV9UUklMSVNU Ow0KPiAtCQlmYWxsdGhyb3VnaDsNCj4gLQljYXNlIFNBVkFHRV9QUklNX1RSSUxJU1Q6DQo+ IC0JCWlmIChuICUgMyAhPSAwKSB7DQo+IC0JCQlEUk1fRVJST1IoIndyb25nIG51bWJlciBv ZiB2ZXJ0aWNlcyAldSBpbiBUUklMSVNUXG4iLA0KPiAtCQkJCSAgbik7DQo+IC0JCQlyZXR1 cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlicmVhazsNCj4gLQljYXNlIFNBVkFHRV9QUklN X1RSSVNUUklQOg0KPiAtCWNhc2UgU0FWQUdFX1BSSU1fVFJJRkFOOg0KPiAtCQlpZiAobiA8 IDMpIHsNCj4gLQkJCURSTV9FUlJPUg0KPiAtCQkJICAgICgid3JvbmcgbnVtYmVyIG9mIHZl cnRpY2VzICV1IGluIFRSSUZBTi9TVFJJUFxuIiwNCj4gLQkJCSAgICAgbik7DQo+IC0JCQly ZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlicmVhazsNCj4gLQlkZWZhdWx0Og0KPiAt CQlEUk1fRVJST1IoImludmFsaWQgcHJpbWl0aXZlIHR5cGUgJXVcbiIsIHByaW0pOw0KPiAt CQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoUzNfU0FWQUdFM0RfU0VS SUVTKGRldl9wcml2LT5jaGlwc2V0KSkgew0KPiAtCQlpZiAoc2tpcCAhPSAwKSB7DQo+IC0J CQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHggZm9yIERNQVxuIiwgc2tp cCk7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCX0gZWxzZSB7DQo+IC0J CXVuc2lnbmVkIGludCBzaXplID0gMTAgLSAoc2tpcCAmIDEpIC0gKHNraXAgPj4gMSAmIDEp IC0NCj4gLQkJICAgIChza2lwID4+IDIgJiAxKSAtIChza2lwID4+IDMgJiAxKSAtIChza2lw ID4+IDQgJiAxKSAtDQo+IC0JCSAgICAoc2tpcCA+PiA1ICYgMSkgLSAoc2tpcCA+PiA2ICYg MSkgLSAoc2tpcCA+PiA3ICYgMSk7DQo+IC0JCWlmIChza2lwID4gU0FWQUdFX1NLSVBfQUxM X1M0IHx8IHNpemUgIT0gOCkgew0KPiAtCQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNraXAgZmxh Z3MgMHglMDR4IGZvciBETUFcbiIsIHNraXApOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JCX0NCj4gLQkJaWYgKHJlb3JkZXIpIHsNCj4gLQkJCURSTV9FUlJPUigiVFJJTElTVF8y MDEgdXNlZCBvbiBTYXZhZ2U0IGhhcmR3YXJlXG4iKTsNCj4gLQkJCXJldHVybiAtRUlOVkFM Ow0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKHN0YXJ0ICsgbiA+IGRtYWJ1Zi0+dG90 YWwgLyAzMikgew0KPiAtCQlEUk1fRVJST1IoInZlcnRleCBpbmRpY2VzICgldS0ldSkgb3V0 IG9mIHJhbmdlICgwLSV1KVxuIiwNCj4gLQkJCSAgc3RhcnQsIHN0YXJ0ICsgbiAtIDEsIGRt YWJ1Zi0+dG90YWwgLyAzMik7DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0K PiAtCS8qIFZlcnRleCBETUEgZG9lc24ndCB3b3JrIHdpdGggY29tbWFuZCBETUEgYXQgdGhl IHNhbWUgdGltZSwNCj4gLQkgKiBzbyB3ZSB1c2UgQkNJXy4uLiB0byBzdWJtaXQgY29tbWFu ZHMgaGVyZS4gRmx1c2ggYnVmZmVyZWQNCj4gLQkgKiBmYWtlZCBETUEgZmlyc3QuICovDQo+ IC0JRE1BX0ZMVVNIKCk7DQo+IC0NCj4gLQlpZiAoZG1hYnVmLT5idXNfYWRkcmVzcyAhPSBk ZXZfcHJpdi0+c3RhdGUuY29tbW9uLnZiYWRkcikgew0KPiAtCQlCRUdJTl9CQ0koMik7DQo+ IC0JCUJDSV9TRVRfUkVHSVNURVJTKFNBVkFHRV9WRVJUQlVGQUREUiwgMSk7DQo+IC0JCUJD SV9XUklURShkbWFidWYtPmJ1c19hZGRyZXNzIHwgZGV2X3ByaXYtPmRtYV90eXBlKTsNCj4g LQkJZGV2X3ByaXYtPnN0YXRlLmNvbW1vbi52YmFkZHIgPSBkbWFidWYtPmJ1c19hZGRyZXNz Ow0KPiAtCX0NCj4gLQlpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0 KSAmJiBkZXZfcHJpdi0+d2FpdGluZykgew0KPiAtCQkvKiBXb3JrYXJvdW5kIGZvciB3aGF0 IGxvb2tzIGxpa2UgYSBoYXJkd2FyZSBidWcuIElmIGENCj4gLQkJICogV0FJVF8zRF9JRExF IHdhcyBlbWl0dGVkIHNvbWUgdGltZSBiZWZvcmUgdGhlDQo+IC0JCSAqIGluZGV4ZWQgZHJh d2luZyBjb21tYW5kIHRoZW4gdGhlIGVuZ2luZSB3aWxsIGxvY2sNCj4gLQkJICogdXAuIFRo ZXJlIGFyZSB0d28ga25vd24gd29ya2Fyb3VuZHM6DQo+IC0JCSAqIFdBSVRfSURMRV9FTVBU WSBvciBlbWl0IGF0IGxlYXN0IDYzIE5PUHMuICovDQo+IC0JCUJFR0lOX0JDSSg2Myk7DQo+ IC0JCWZvciAoaSA9IDA7IGkgPCA2MzsgKytpKQ0KPiAtCQkJQkNJX1dSSVRFKEJDSV9DTURf V0FJVCk7DQo+IC0JCWRldl9wcml2LT53YWl0aW5nID0gMDsNCj4gLQl9DQo+IC0NCj4gLQlw cmltIDw8PSAyNTsNCj4gLQl3aGlsZSAobiAhPSAwKSB7DQo+IC0JCS8qIENhbiBlbWl0IHVw IHRvIDI1NSBpbmRpY2VzICg4NSB0cmlhbmdsZXMpIGF0IG9uY2UuICovDQo+IC0JCXVuc2ln bmVkIGludCBjb3VudCA9IG4gPiAyNTUgPyAyNTUgOiBuOw0KPiAtCQlpZiAocmVvcmRlcikg ew0KPiAtCQkJLyogTmVlZCB0byByZW9yZGVyIGluZGljZXMgZm9yIGNvcnJlY3QgZmxhdA0K PiAtCQkJICogc2hhZGluZyB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBjbG9jayBzZW5zZQ0KPiAt CQkJICogZm9yIGNvcnJlY3QgY3VsbGluZy4gT25seSBvbiBTYXZhZ2UzRC4gKi8NCj4gLQkJ CWludCByZW9yZGVyWzNdID0geyAtMSwgLTEsIC0xIH07DQo+IC0JCQlyZW9yZGVyW3N0YXJ0 ICUgM10gPSAyOw0KPiAtDQo+IC0JCQlCRUdJTl9CQ0koKGNvdW50ICsgMSArIDEpIC8gMik7 DQo+IC0JCQlCQ0lfRFJBV19JTkRJQ0VTX1MzRChjb3VudCwgcHJpbSwgc3RhcnQgKyAyKTsN Cj4gLQ0KPiAtCQkJZm9yIChpID0gc3RhcnQgKyAxOyBpICsgMSA8IHN0YXJ0ICsgY291bnQ7 IGkgKz0gMikNCj4gLQkJCQlCQ0lfV1JJVEUoKGkgKyByZW9yZGVyW2kgJSAzXSkgfA0KPiAt CQkJCQkgICgoaSArIDEgKw0KPiAtCQkJCQkgICAgcmVvcmRlclsoaSArIDEpICUgM10pIDw8 IDE2KSk7DQo+IC0JCQlpZiAoaSA8IHN0YXJ0ICsgY291bnQpDQo+IC0JCQkJQkNJX1dSSVRF KGkgKyByZW9yZGVyW2kgJSAzXSk7DQo+IC0JCX0gZWxzZSBpZiAoUzNfU0FWQUdFM0RfU0VS SUVTKGRldl9wcml2LT5jaGlwc2V0KSkgew0KPiAtCQkJQkVHSU5fQkNJKChjb3VudCArIDEg KyAxKSAvIDIpOw0KPiAtCQkJQkNJX0RSQVdfSU5ESUNFU19TM0QoY291bnQsIHByaW0sIHN0 YXJ0KTsNCj4gLQ0KPiAtCQkJZm9yIChpID0gc3RhcnQgKyAxOyBpICsgMSA8IHN0YXJ0ICsg Y291bnQ7IGkgKz0gMikNCj4gLQkJCQlCQ0lfV1JJVEUoaSB8ICgoaSArIDEpIDw8IDE2KSk7 DQo+IC0JCQlpZiAoaSA8IHN0YXJ0ICsgY291bnQpDQo+IC0JCQkJQkNJX1dSSVRFKGkpOw0K PiAtCQl9IGVsc2Ugew0KPiAtCQkJQkVHSU5fQkNJKChjb3VudCArIDIgKyAxKSAvIDIpOw0K PiAtCQkJQkNJX0RSQVdfSU5ESUNFU19TNChjb3VudCwgcHJpbSwgc2tpcCk7DQo+IC0NCj4g LQkJCWZvciAoaSA9IHN0YXJ0OyBpICsgMSA8IHN0YXJ0ICsgY291bnQ7IGkgKz0gMikNCj4g LQkJCQlCQ0lfV1JJVEUoaSB8ICgoaSArIDEpIDw8IDE2KSk7DQo+IC0JCQlpZiAoaSA8IHN0 YXJ0ICsgY291bnQpDQo+IC0JCQkJQkNJX1dSSVRFKGkpOw0KPiAtCQl9DQo+IC0NCj4gLQkJ c3RhcnQgKz0gY291bnQ7DQo+IC0JCW4gLT0gY291bnQ7DQo+IC0NCj4gLQkJcHJpbSB8PSBC Q0lfQ01EX0RSQVdfQ09OVDsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0Y2hfdmJfcHJpbShkcm1fc2F2YWdlX3By aXZhdGVfdCAqIGRldl9wcml2LA0KPiAtCQkJCSAgIGNvbnN0IGRybV9zYXZhZ2VfY21kX2hl YWRlcl90ICogY21kX2hlYWRlciwNCj4gLQkJCQkgICBjb25zdCB1aW50MzJfdCAqdnR4YnVm LCB1bnNpZ25lZCBpbnQgdmJfc2l6ZSwNCj4gLQkJCQkgICB1bnNpZ25lZCBpbnQgdmJfc3Ry aWRlKQ0KPiAtew0KPiAtCXVuc2lnbmVkIGNoYXIgcmVvcmRlciA9IDA7DQo+IC0JdW5zaWdu ZWQgaW50IHByaW0gPSBjbWRfaGVhZGVyLT5wcmltLnByaW07DQo+IC0JdW5zaWduZWQgaW50 IHNraXAgPSBjbWRfaGVhZGVyLT5wcmltLnNraXA7DQo+IC0JdW5zaWduZWQgaW50IG4gPSBj bWRfaGVhZGVyLT5wcmltLmNvdW50Ow0KPiAtCXVuc2lnbmVkIGludCBzdGFydCA9IGNtZF9o ZWFkZXItPnByaW0uc3RhcnQ7DQo+IC0JdW5zaWduZWQgaW50IHZ0eF9zaXplOw0KPiAtCXVu c2lnbmVkIGludCBpOw0KPiAtCURNQV9MT0NBTFM7DQo+IC0NCj4gLQlpZiAoIW4pDQo+IC0J CXJldHVybiAwOw0KPiAtDQo+IC0Jc3dpdGNoIChwcmltKSB7DQo+IC0JY2FzZSBTQVZBR0Vf UFJJTV9UUklMSVNUXzIwMToNCj4gLQkJcmVvcmRlciA9IDE7DQo+IC0JCXByaW0gPSBTQVZB R0VfUFJJTV9UUklMSVNUOw0KPiAtCQlmYWxsdGhyb3VnaDsNCj4gLQljYXNlIFNBVkFHRV9Q UklNX1RSSUxJU1Q6DQo+IC0JCWlmIChuICUgMyAhPSAwKSB7DQo+IC0JCQlEUk1fRVJST1Io Indyb25nIG51bWJlciBvZiB2ZXJ0aWNlcyAldSBpbiBUUklMSVNUXG4iLA0KPiAtCQkJCSAg bik7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlicmVhazsNCj4gLQlj YXNlIFNBVkFHRV9QUklNX1RSSVNUUklQOg0KPiAtCWNhc2UgU0FWQUdFX1BSSU1fVFJJRkFO Og0KPiAtCQlpZiAobiA8IDMpIHsNCj4gLQkJCURSTV9FUlJPUg0KPiAtCQkJICAgICgid3Jv bmcgbnVtYmVyIG9mIHZlcnRpY2VzICV1IGluIFRSSUZBTi9TVFJJUFxuIiwNCj4gLQkJCSAg ICAgbik7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlicmVhazsNCj4g LQlkZWZhdWx0Og0KPiAtCQlEUk1fRVJST1IoImludmFsaWQgcHJpbWl0aXZlIHR5cGUgJXVc biIsIHByaW0pOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAo UzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgew0KPiAtCQlpZiAoc2tp cCA+IFNBVkFHRV9TS0lQX0FMTF9TM0QpIHsNCj4gLQkJCURSTV9FUlJPUigiaW52YWxpZCBz a2lwIGZsYWdzIDB4JTA0eFxuIiwgc2tpcCk7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4g LQkJfQ0KPiAtCQl2dHhfc2l6ZSA9IDg7CS8qIGZ1bGwgdmVydGV4ICovDQo+IC0JfSBlbHNl IHsNCj4gLQkJaWYgKHNraXAgPiBTQVZBR0VfU0tJUF9BTExfUzQpIHsNCj4gLQkJCURSTV9F UlJPUigiaW52YWxpZCBza2lwIGZsYWdzIDB4JTA0eFxuIiwgc2tpcCk7DQo+IC0JCQlyZXR1 cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQl2dHhfc2l6ZSA9IDEwOwkvKiBmdWxsIHZlcnRl eCAqLw0KPiAtCX0NCj4gLQ0KPiAtCXZ0eF9zaXplIC09IChza2lwICYgMSkgKyAoc2tpcCA+ PiAxICYgMSkgKw0KPiAtCSAgICAoc2tpcCA+PiAyICYgMSkgKyAoc2tpcCA+PiAzICYgMSkg KyAoc2tpcCA+PiA0ICYgMSkgKw0KPiAtCSAgICAoc2tpcCA+PiA1ICYgMSkgKyAoc2tpcCA+ PiA2ICYgMSkgKyAoc2tpcCA+PiA3ICYgMSk7DQo+IC0NCj4gLQlpZiAodnR4X3NpemUgPiB2 Yl9zdHJpZGUpIHsNCj4gLQkJRFJNX0VSUk9SKCJ2ZXJ0ZXggc2l6ZSBncmVhdGVyIHRoYW4g dmIgc3RyaWRlICgldSA+ICV1KVxuIiwNCj4gLQkJCSAgdnR4X3NpemUsIHZiX3N0cmlkZSk7 DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChzdGFydCArIG4g PiB2Yl9zaXplIC8gKHZiX3N0cmlkZSAqIDQpKSB7DQo+IC0JCURSTV9FUlJPUigidmVydGV4 IGluZGljZXMgKCV1LSV1KSBvdXQgb2YgcmFuZ2UgKDAtJXUpXG4iLA0KPiAtCQkJICBzdGFy dCwgc3RhcnQgKyBuIC0gMSwgdmJfc2l6ZSAvICh2Yl9zdHJpZGUgKiA0KSk7DQo+IC0JCXJl dHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQ0KPiAtCXByaW0gPDw9IDI1Ow0KPiAtCXdoaWxl IChuICE9IDApIHsNCj4gLQkJLyogQ2FuIGVtaXQgdXAgdG8gMjU1IHZlcnRpY2VzICg4NSB0 cmlhbmdsZXMpIGF0IG9uY2UuICovDQo+IC0JCXVuc2lnbmVkIGludCBjb3VudCA9IG4gPiAy NTUgPyAyNTUgOiBuOw0KPiAtCQlpZiAocmVvcmRlcikgew0KPiAtCQkJLyogTmVlZCB0byBy ZW9yZGVyIHZlcnRpY2VzIGZvciBjb3JyZWN0IGZsYXQNCj4gLQkJCSAqIHNoYWRpbmcgd2hp bGUgcHJlc2VydmluZyB0aGUgY2xvY2sgc2Vuc2UNCj4gLQkJCSAqIGZvciBjb3JyZWN0IGN1 bGxpbmcuIE9ubHkgb24gU2F2YWdlM0QuICovDQo+IC0JCQlpbnQgcmVvcmRlclszXSA9IHsg LTEsIC0xLCAtMSB9Ow0KPiAtCQkJcmVvcmRlcltzdGFydCAlIDNdID0gMjsNCj4gLQ0KPiAt CQkJQkVHSU5fRE1BKGNvdW50ICogdnR4X3NpemUgKyAxKTsNCj4gLQkJCURNQV9EUkFXX1BS SU1JVElWRShjb3VudCwgcHJpbSwgc2tpcCk7DQo+IC0NCj4gLQkJCWZvciAoaSA9IHN0YXJ0 OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKSB7DQo+IC0JCQkJdW5zaWduZWQgaW50IGogPSBp ICsgcmVvcmRlcltpICUgM107DQo+IC0JCQkJRE1BX0NPUFkoJnZ0eGJ1Zlt2Yl9zdHJpZGUg KiBqXSwgdnR4X3NpemUpOw0KPiAtCQkJfQ0KPiAtDQo+IC0JCQlETUFfQ09NTUlUKCk7DQo+ IC0JCX0gZWxzZSB7DQo+IC0JCQlCRUdJTl9ETUEoY291bnQgKiB2dHhfc2l6ZSArIDEpOw0K PiAtCQkJRE1BX0RSQVdfUFJJTUlUSVZFKGNvdW50LCBwcmltLCBza2lwKTsNCj4gLQ0KPiAt CQkJaWYgKHZiX3N0cmlkZSA9PSB2dHhfc2l6ZSkgew0KPiAtCQkJCURNQV9DT1BZKCZ2dHhi dWZbdmJfc3RyaWRlICogc3RhcnRdLA0KPiAtCQkJCQkgdnR4X3NpemUgKiBjb3VudCk7DQo+ IC0JCQl9IGVsc2Ugew0KPiAtCQkJCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3Vu dDsgKytpKSB7DQo+IC0JCQkJCURNQV9DT1BZKCZ2dHhidWYgW3ZiX3N0cmlkZSAqIGldLA0K PiAtCQkJCQkJIHZ0eF9zaXplKTsNCj4gLQkJCQl9DQo+IC0JCQl9DQo+IC0NCj4gLQkJCURN QV9DT01NSVQoKTsNCj4gLQkJfQ0KPiAtDQo+IC0JCXN0YXJ0ICs9IGNvdW50Ow0KPiAtCQlu IC09IGNvdW50Ow0KPiAtDQo+IC0JCXByaW0gfD0gQkNJX0NNRF9EUkFXX0NPTlQ7DQo+IC0J fQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgc2F2YWdl X2Rpc3BhdGNoX2RtYV9pZHgoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwNCj4g LQkJCQkgICBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqIGNtZF9oZWFkZXIsDQo+ IC0JCQkJICAgY29uc3QgdWludDE2X3QgKmlkeCwNCj4gLQkJCQkgICBjb25zdCBzdHJ1Y3Qg ZHJtX2J1ZiAqIGRtYWJ1ZikNCj4gLXsNCj4gLQl1bnNpZ25lZCBjaGFyIHJlb3JkZXIgPSAw Ow0KPiAtCXVuc2lnbmVkIGludCBwcmltID0gY21kX2hlYWRlci0+aWR4LnByaW07DQo+IC0J dW5zaWduZWQgaW50IHNraXAgPSBjbWRfaGVhZGVyLT5pZHguc2tpcDsNCj4gLQl1bnNpZ25l ZCBpbnQgbiA9IGNtZF9oZWFkZXItPmlkeC5jb3VudDsNCj4gLQl1bnNpZ25lZCBpbnQgaTsN Cj4gLQlCQ0lfTE9DQUxTOw0KPiAtDQo+IC0JaWYgKCFkbWFidWYpIHsNCj4gLQkJRFJNX0VS Uk9SKCJjYWxsZWQgd2l0aG91dCBkbWEgYnVmZmVycyFcbiIpOw0KPiAtCQlyZXR1cm4gLUVJ TlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoIW4pDQo+IC0JCXJldHVybiAwOw0KPiAtDQo+ IC0Jc3dpdGNoIChwcmltKSB7DQo+IC0JY2FzZSBTQVZBR0VfUFJJTV9UUklMSVNUXzIwMToN Cj4gLQkJcmVvcmRlciA9IDE7DQo+IC0JCXByaW0gPSBTQVZBR0VfUFJJTV9UUklMSVNUOw0K PiAtCQlmYWxsdGhyb3VnaDsNCj4gLQljYXNlIFNBVkFHRV9QUklNX1RSSUxJU1Q6DQo+IC0J CWlmIChuICUgMyAhPSAwKSB7DQo+IC0JCQlEUk1fRVJST1IoIndyb25nIG51bWJlciBvZiBp bmRpY2VzICV1IGluIFRSSUxJU1RcbiIsIG4pOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JCX0NCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBTQVZBR0VfUFJJTV9UUklTVFJJUDoNCj4g LQljYXNlIFNBVkFHRV9QUklNX1RSSUZBTjoNCj4gLQkJaWYgKG4gPCAzKSB7DQo+IC0JCQlE Uk1fRVJST1INCj4gLQkJCSAgICAoIndyb25nIG51bWJlciBvZiBpbmRpY2VzICV1IGluIFRS SUZBTi9TVFJJUFxuIiwgbik7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAt CQlicmVhazsNCj4gLQlkZWZhdWx0Og0KPiAtCQlEUk1fRVJST1IoImludmFsaWQgcHJpbWl0 aXZlIHR5cGUgJXVcbiIsIHByaW0pOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+ IC0NCj4gLQlpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgew0K PiAtCQlpZiAoc2tpcCAhPSAwKSB7DQo+IC0JCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBm bGFncyAweCUwNHggZm9yIERNQVxuIiwgc2tpcCk7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsN Cj4gLQkJfQ0KPiAtCX0gZWxzZSB7DQo+IC0JCXVuc2lnbmVkIGludCBzaXplID0gMTAgLSAo c2tpcCAmIDEpIC0gKHNraXAgPj4gMSAmIDEpIC0NCj4gLQkJICAgIChza2lwID4+IDIgJiAx KSAtIChza2lwID4+IDMgJiAxKSAtIChza2lwID4+IDQgJiAxKSAtDQo+IC0JCSAgICAoc2tp cCA+PiA1ICYgMSkgLSAoc2tpcCA+PiA2ICYgMSkgLSAoc2tpcCA+PiA3ICYgMSk7DQo+IC0J CWlmIChza2lwID4gU0FWQUdFX1NLSVBfQUxMX1M0IHx8IHNpemUgIT0gOCkgew0KPiAtCQkJ RFJNX0VSUk9SKCJpbnZhbGlkIHNraXAgZmxhZ3MgMHglMDR4IGZvciBETUFcbiIsIHNraXAp Ow0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCX0NCj4gLQkJaWYgKHJlb3JkZXIpIHsN Cj4gLQkJCURSTV9FUlJPUigiVFJJTElTVF8yMDEgdXNlZCBvbiBTYXZhZ2U0IGhhcmR3YXJl XG4iKTsNCj4gLQkJCXJldHVybiAtRUlOVkFMOw0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+IC0J LyogVmVydGV4IERNQSBkb2Vzbid0IHdvcmsgd2l0aCBjb21tYW5kIERNQSBhdCB0aGUgc2Ft ZSB0aW1lLA0KPiAtCSAqIHNvIHdlIHVzZSBCQ0lfLi4uIHRvIHN1Ym1pdCBjb21tYW5kcyBo ZXJlLiBGbHVzaCBidWZmZXJlZA0KPiAtCSAqIGZha2VkIERNQSBmaXJzdC4gKi8NCj4gLQlE TUFfRkxVU0goKTsNCj4gLQ0KPiAtCWlmIChkbWFidWYtPmJ1c19hZGRyZXNzICE9IGRldl9w cml2LT5zdGF0ZS5jb21tb24udmJhZGRyKSB7DQo+IC0JCUJFR0lOX0JDSSgyKTsNCj4gLQkJ QkNJX1NFVF9SRUdJU1RFUlMoU0FWQUdFX1ZFUlRCVUZBRERSLCAxKTsNCj4gLQkJQkNJX1dS SVRFKGRtYWJ1Zi0+YnVzX2FkZHJlc3MgfCBkZXZfcHJpdi0+ZG1hX3R5cGUpOw0KPiAtCQlk ZXZfcHJpdi0+c3RhdGUuY29tbW9uLnZiYWRkciA9IGRtYWJ1Zi0+YnVzX2FkZHJlc3M7DQo+ IC0JfQ0KPiAtCWlmIChTM19TQVZBR0UzRF9TRVJJRVMoZGV2X3ByaXYtPmNoaXBzZXQpICYm IGRldl9wcml2LT53YWl0aW5nKSB7DQo+IC0JCS8qIFdvcmthcm91bmQgZm9yIHdoYXQgbG9v a3MgbGlrZSBhIGhhcmR3YXJlIGJ1Zy4gSWYgYQ0KPiAtCQkgKiBXQUlUXzNEX0lETEUgd2Fz IGVtaXR0ZWQgc29tZSB0aW1lIGJlZm9yZSB0aGUNCj4gLQkJICogaW5kZXhlZCBkcmF3aW5n IGNvbW1hbmQgdGhlbiB0aGUgZW5naW5lIHdpbGwgbG9jaw0KPiAtCQkgKiB1cC4gVGhlcmUg YXJlIHR3byBrbm93biB3b3JrYXJvdW5kczoNCj4gLQkJICogV0FJVF9JRExFX0VNUFRZIG9y IGVtaXQgYXQgbGVhc3QgNjMgTk9Qcy4gKi8NCj4gLQkJQkVHSU5fQkNJKDYzKTsNCj4gLQkJ Zm9yIChpID0gMDsgaSA8IDYzOyArK2kpDQo+IC0JCQlCQ0lfV1JJVEUoQkNJX0NNRF9XQUlU KTsNCj4gLQkJZGV2X3ByaXYtPndhaXRpbmcgPSAwOw0KPiAtCX0NCj4gLQ0KPiAtCXByaW0g PDw9IDI1Ow0KPiAtCXdoaWxlIChuICE9IDApIHsNCj4gLQkJLyogQ2FuIGVtaXQgdXAgdG8g MjU1IGluZGljZXMgKDg1IHRyaWFuZ2xlcykgYXQgb25jZS4gKi8NCj4gLQkJdW5zaWduZWQg aW50IGNvdW50ID0gbiA+IDI1NSA/IDI1NSA6IG47DQo+IC0NCj4gLQkJLyogY2hlY2sgaW5k aWNlcyAqLw0KPiAtCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgew0KPiAtCQkJaWYg KGlkeFtpXSA+IGRtYWJ1Zi0+dG90YWwgLyAzMikgew0KPiAtCQkJCURSTV9FUlJPUigiaWR4 WyV1XT0ldSBvdXQgb2YgcmFuZ2UgKDAtJXUpXG4iLA0KPiAtCQkJCQkgIGksIGlkeFtpXSwg ZG1hYnVmLT50b3RhbCAvIDMyKTsNCj4gLQkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJCX0N Cj4gLQkJfQ0KPiAtDQo+IC0JCWlmIChyZW9yZGVyKSB7DQo+IC0JCQkvKiBOZWVkIHRvIHJl b3JkZXIgaW5kaWNlcyBmb3IgY29ycmVjdCBmbGF0DQo+IC0JCQkgKiBzaGFkaW5nIHdoaWxl IHByZXNlcnZpbmcgdGhlIGNsb2NrIHNlbnNlDQo+IC0JCQkgKiBmb3IgY29ycmVjdCBjdWxs aW5nLiBPbmx5IG9uIFNhdmFnZTNELiAqLw0KPiAtCQkJaW50IHJlb3JkZXJbM10gPSB7IDIs IC0xLCAtMSB9Ow0KPiAtDQo+IC0JCQlCRUdJTl9CQ0koKGNvdW50ICsgMSArIDEpIC8gMik7 DQo+IC0JCQlCQ0lfRFJBV19JTkRJQ0VTX1MzRChjb3VudCwgcHJpbSwgaWR4WzJdKTsNCj4g LQ0KPiAtCQkJZm9yIChpID0gMTsgaSArIDEgPCBjb3VudDsgaSArPSAyKQ0KPiAtCQkJCUJD SV9XUklURShpZHhbaSArIHJlb3JkZXJbaSAlIDNdXSB8DQo+IC0JCQkJCSAgKGlkeFtpICsg MSArDQo+IC0JCQkJCSAgIHJlb3JkZXJbKGkgKyAxKSAlIDNdXSA8PCAxNikpOw0KPiAtCQkJ aWYgKGkgPCBjb3VudCkNCj4gLQkJCQlCQ0lfV1JJVEUoaWR4W2kgKyByZW9yZGVyW2kgJSAz XV0pOw0KPiAtCQl9IGVsc2UgaWYgKFMzX1NBVkFHRTNEX1NFUklFUyhkZXZfcHJpdi0+Y2hp cHNldCkpIHsNCj4gLQkJCUJFR0lOX0JDSSgoY291bnQgKyAxICsgMSkgLyAyKTsNCj4gLQkJ CUJDSV9EUkFXX0lORElDRVNfUzNEKGNvdW50LCBwcmltLCBpZHhbMF0pOw0KPiAtDQo+IC0J CQlmb3IgKGkgPSAxOyBpICsgMSA8IGNvdW50OyBpICs9IDIpDQo+IC0JCQkJQkNJX1dSSVRF KGlkeFtpXSB8IChpZHhbaSArIDFdIDw8IDE2KSk7DQo+IC0JCQlpZiAoaSA8IGNvdW50KQ0K PiAtCQkJCUJDSV9XUklURShpZHhbaV0pOw0KPiAtCQl9IGVsc2Ugew0KPiAtCQkJQkVHSU5f QkNJKChjb3VudCArIDIgKyAxKSAvIDIpOw0KPiAtCQkJQkNJX0RSQVdfSU5ESUNFU19TNChj b3VudCwgcHJpbSwgc2tpcCk7DQo+IC0NCj4gLQkJCWZvciAoaSA9IDA7IGkgKyAxIDwgY291 bnQ7IGkgKz0gMikNCj4gLQkJCQlCQ0lfV1JJVEUoaWR4W2ldIHwgKGlkeFtpICsgMV0gPDwg MTYpKTsNCj4gLQkJCWlmIChpIDwgY291bnQpDQo+IC0JCQkJQkNJX1dSSVRFKGlkeFtpXSk7 DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZHggKz0gY291bnQ7DQo+IC0JCW4gLT0gY291bnQ7DQo+ IC0NCj4gLQkJcHJpbSB8PSBCQ0lfQ01EX0RSQVdfQ09OVDsNCj4gLQl9DQo+IC0NCj4gLQly ZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0Y2hfdmJf aWR4KGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsDQo+IC0JCQkJICBjb25zdCBk cm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqIGNtZF9oZWFkZXIsDQo+IC0JCQkJICBjb25zdCB1 aW50MTZfdCAqaWR4LA0KPiAtCQkJCSAgY29uc3QgdWludDMyX3QgKnZ0eGJ1ZiwNCj4gLQkJ CQkgIHVuc2lnbmVkIGludCB2Yl9zaXplLCB1bnNpZ25lZCBpbnQgdmJfc3RyaWRlKQ0KPiAt ew0KPiAtCXVuc2lnbmVkIGNoYXIgcmVvcmRlciA9IDA7DQo+IC0JdW5zaWduZWQgaW50IHBy aW0gPSBjbWRfaGVhZGVyLT5pZHgucHJpbTsNCj4gLQl1bnNpZ25lZCBpbnQgc2tpcCA9IGNt ZF9oZWFkZXItPmlkeC5za2lwOw0KPiAtCXVuc2lnbmVkIGludCBuID0gY21kX2hlYWRlci0+ aWR4LmNvdW50Ow0KPiAtCXVuc2lnbmVkIGludCB2dHhfc2l6ZTsNCj4gLQl1bnNpZ25lZCBp bnQgaTsNCj4gLQlETUFfTE9DQUxTOw0KPiAtDQo+IC0JaWYgKCFuKQ0KPiAtCQlyZXR1cm4g MDsNCj4gLQ0KPiAtCXN3aXRjaCAocHJpbSkgew0KPiAtCWNhc2UgU0FWQUdFX1BSSU1fVFJJ TElTVF8yMDE6DQo+IC0JCXJlb3JkZXIgPSAxOw0KPiAtCQlwcmltID0gU0FWQUdFX1BSSU1f VFJJTElTVDsNCj4gLQkJZmFsbHRocm91Z2g7DQo+IC0JY2FzZSBTQVZBR0VfUFJJTV9UUklM SVNUOg0KPiAtCQlpZiAobiAlIDMgIT0gMCkgew0KPiAtCQkJRFJNX0VSUk9SKCJ3cm9uZyBu dW1iZXIgb2YgaW5kaWNlcyAldSBpbiBUUklMSVNUXG4iLCBuKTsNCj4gLQkJCXJldHVybiAt RUlOVkFMOw0KPiAtCQl9DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgU0FWQUdFX1BSSU1fVFJJ U1RSSVA6DQo+IC0JY2FzZSBTQVZBR0VfUFJJTV9UUklGQU46DQo+IC0JCWlmIChuIDwgMykg ew0KPiAtCQkJRFJNX0VSUk9SDQo+IC0JCQkgICAgKCJ3cm9uZyBudW1iZXIgb2YgaW5kaWNl cyAldSBpbiBUUklGQU4vU1RSSVBcbiIsIG4pOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JCX0NCj4gLQkJYnJlYWs7DQo+IC0JZGVmYXVsdDoNCj4gLQkJRFJNX0VSUk9SKCJpbnZh bGlkIHByaW1pdGl2ZSB0eXBlICV1XG4iLCBwcmltKTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7 DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKFMzX1NBVkFHRTNEX1NFUklFUyhkZXZfcHJpdi0+Y2hp cHNldCkpIHsNCj4gLQkJaWYgKHNraXAgPiBTQVZBR0VfU0tJUF9BTExfUzNEKSB7DQo+IC0J CQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHhcbiIsIHNraXApOw0KPiAt CQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCX0NCj4gLQkJdnR4X3NpemUgPSA4OwkvKiBmdWxs IHZlcnRleCAqLw0KPiAtCX0gZWxzZSB7DQo+IC0JCWlmIChza2lwID4gU0FWQUdFX1NLSVBf QUxMX1M0KSB7DQo+IC0JCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHhc biIsIHNraXApOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCX0NCj4gLQkJdnR4X3Np emUgPSAxMDsJLyogZnVsbCB2ZXJ0ZXggKi8NCj4gLQl9DQo+IC0NCj4gLQl2dHhfc2l6ZSAt PSAoc2tpcCAmIDEpICsgKHNraXAgPj4gMSAmIDEpICsNCj4gLQkgICAgKHNraXAgPj4gMiAm IDEpICsgKHNraXAgPj4gMyAmIDEpICsgKHNraXAgPj4gNCAmIDEpICsNCj4gLQkgICAgKHNr aXAgPj4gNSAmIDEpICsgKHNraXAgPj4gNiAmIDEpICsgKHNraXAgPj4gNyAmIDEpOw0KPiAt DQo+IC0JaWYgKHZ0eF9zaXplID4gdmJfc3RyaWRlKSB7DQo+IC0JCURSTV9FUlJPUigidmVy dGV4IHNpemUgZ3JlYXRlciB0aGFuIHZiIHN0cmlkZSAoJXUgPiAldSlcbiIsDQo+IC0JCQkg IHZ0eF9zaXplLCB2Yl9zdHJpZGUpOw0KPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+ IC0NCj4gLQlwcmltIDw8PSAyNTsNCj4gLQl3aGlsZSAobiAhPSAwKSB7DQo+IC0JCS8qIENh biBlbWl0IHVwIHRvIDI1NSB2ZXJ0aWNlcyAoODUgdHJpYW5nbGVzKSBhdCBvbmNlLiAqLw0K PiAtCQl1bnNpZ25lZCBpbnQgY291bnQgPSBuID4gMjU1ID8gMjU1IDogbjsNCj4gLQ0KPiAt CQkvKiBDaGVjayBpbmRpY2VzICovDQo+IC0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytp KSB7DQo+IC0JCQlpZiAoaWR4W2ldID4gdmJfc2l6ZSAvICh2Yl9zdHJpZGUgKiA0KSkgew0K PiAtCQkJCURSTV9FUlJPUigiaWR4WyV1XT0ldSBvdXQgb2YgcmFuZ2UgKDAtJXUpXG4iLA0K PiAtCQkJCQkgIGksIGlkeFtpXSwgdmJfc2l6ZSAvICh2Yl9zdHJpZGUgKiA0KSk7DQo+IC0J CQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JCQl9DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAocmVv cmRlcikgew0KPiAtCQkJLyogTmVlZCB0byByZW9yZGVyIHZlcnRpY2VzIGZvciBjb3JyZWN0 IGZsYXQNCj4gLQkJCSAqIHNoYWRpbmcgd2hpbGUgcHJlc2VydmluZyB0aGUgY2xvY2sgc2Vu c2UNCj4gLQkJCSAqIGZvciBjb3JyZWN0IGN1bGxpbmcuIE9ubHkgb24gU2F2YWdlM0QuICov DQo+IC0JCQlpbnQgcmVvcmRlclszXSA9IHsgMiwgLTEsIC0xIH07DQo+IC0NCj4gLQkJCUJF R0lOX0RNQShjb3VudCAqIHZ0eF9zaXplICsgMSk7DQo+IC0JCQlETUFfRFJBV19QUklNSVRJ VkUoY291bnQsIHByaW0sIHNraXApOw0KPiAtDQo+IC0JCQlmb3IgKGkgPSAwOyBpIDwgY291 bnQ7ICsraSkgew0KPiAtCQkJCXVuc2lnbmVkIGludCBqID0gaWR4W2kgKyByZW9yZGVyW2kg JSAzXV07DQo+IC0JCQkJRE1BX0NPUFkoJnZ0eGJ1Zlt2Yl9zdHJpZGUgKiBqXSwgdnR4X3Np emUpOw0KPiAtCQkJfQ0KPiAtDQo+IC0JCQlETUFfQ09NTUlUKCk7DQo+IC0JCX0gZWxzZSB7 DQo+IC0JCQlCRUdJTl9ETUEoY291bnQgKiB2dHhfc2l6ZSArIDEpOw0KPiAtCQkJRE1BX0RS QVdfUFJJTUlUSVZFKGNvdW50LCBwcmltLCBza2lwKTsNCj4gLQ0KPiAtCQkJZm9yIChpID0g MDsgaSA8IGNvdW50OyArK2kpIHsNCj4gLQkJCQl1bnNpZ25lZCBpbnQgaiA9IGlkeFtpXTsN Cj4gLQkJCQlETUFfQ09QWSgmdnR4YnVmW3ZiX3N0cmlkZSAqIGpdLCB2dHhfc2l6ZSk7DQo+ IC0JCQl9DQo+IC0NCj4gLQkJCURNQV9DT01NSVQoKTsNCj4gLQkJfQ0KPiAtDQo+IC0JCWlk eCArPSBjb3VudDsNCj4gLQkJbiAtPSBjb3VudDsNCj4gLQ0KPiAtCQlwcmltIHw9IEJDSV9D TURfRFJBV19DT05UOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+ IC1zdGF0aWMgaW50IHNhdmFnZV9kaXNwYXRjaF9jbGVhcihkcm1fc2F2YWdlX3ByaXZhdGVf dCAqIGRldl9wcml2LA0KPiAtCQkJCSBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAq IGNtZF9oZWFkZXIsDQo+IC0JCQkJIGNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90ICpk YXRhLA0KPiAtCQkJCSB1bnNpZ25lZCBpbnQgbmJveCwNCj4gLQkJCQkgY29uc3Qgc3RydWN0 IGRybV9jbGlwX3JlY3QgKmJveGVzKQ0KPiAtew0KPiAtCXVuc2lnbmVkIGludCBmbGFncyA9 IGNtZF9oZWFkZXItPmNsZWFyMC5mbGFnczsNCj4gLQl1bnNpZ25lZCBpbnQgY2xlYXJfY21k Ow0KPiAtCXVuc2lnbmVkIGludCBpLCBuYnVmczsNCj4gLQlETUFfTE9DQUxTOw0KPiAtDQo+ IC0JaWYgKG5ib3ggPT0gMCkNCj4gLQkJcmV0dXJuIDA7DQo+IC0NCj4gLQljbGVhcl9jbWQg PSBCQ0lfQ01EX1JFQ1QgfCBCQ0lfQ01EX1JFQ1RfWFAgfCBCQ0lfQ01EX1JFQ1RfWVAgfA0K PiAtCSAgICBCQ0lfQ01EX1NFTkRfQ09MT1IgfCBCQ0lfQ01EX0RFU1RfUEJEX05FVzsNCj4g LQlCQ0lfQ01EX1NFVF9ST1AoY2xlYXJfY21kLCAweENDKTsNCj4gLQ0KPiAtCW5idWZzID0g KChmbGFncyAmIFNBVkFHRV9GUk9OVCkgPyAxIDogMCkgKw0KPiAtCSAgICAoKGZsYWdzICYg U0FWQUdFX0JBQ0spID8gMSA6IDApICsgKChmbGFncyAmIFNBVkFHRV9ERVBUSCkgPyAxIDog MCk7DQo+IC0JaWYgKG5idWZzID09IDApDQo+IC0JCXJldHVybiAwOw0KPiAtDQo+IC0JaWYg KGRhdGEtPmNsZWFyMS5tYXNrICE9IDB4ZmZmZmZmZmYpIHsNCj4gLQkJLyogc2V0IG1hc2sg Ki8NCj4gLQkJQkVHSU5fRE1BKDIpOw0KPiAtCQlETUFfU0VUX1JFR0lTVEVSUyhTQVZBR0Vf QklUUExBTkVXVE1BU0ssIDEpOw0KPiAtCQlETUFfV1JJVEUoZGF0YS0+Y2xlYXIxLm1hc2sp Ow0KPiAtCQlETUFfQ09NTUlUKCk7DQo+IC0JfQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBuYm94 OyArK2kpIHsNCj4gLQkJdW5zaWduZWQgaW50IHgsIHksIHcsIGg7DQo+IC0JCXVuc2lnbmVk IGludCBidWY7DQo+IC0JCXggPSBib3hlc1tpXS54MSwgeSA9IGJveGVzW2ldLnkxOw0KPiAt CQl3ID0gYm94ZXNbaV0ueDIgLSBib3hlc1tpXS54MTsNCj4gLQkJaCA9IGJveGVzW2ldLnky IC0gYm94ZXNbaV0ueTE7DQo+IC0JCUJFR0lOX0RNQShuYnVmcyAqIDYpOw0KPiAtCQlmb3Ig KGJ1ZiA9IFNBVkFHRV9GUk9OVDsgYnVmIDw9IFNBVkFHRV9ERVBUSDsgYnVmIDw8PSAxKSB7 DQo+IC0JCQlpZiAoIShmbGFncyAmIGJ1ZikpDQo+IC0JCQkJY29udGludWU7DQo+IC0JCQlE TUFfV1JJVEUoY2xlYXJfY21kKTsNCj4gLQkJCXN3aXRjaCAoYnVmKSB7DQo+IC0JCQljYXNl IFNBVkFHRV9GUk9OVDoNCj4gLQkJCQlETUFfV1JJVEUoZGV2X3ByaXYtPmZyb250X29mZnNl dCk7DQo+IC0JCQkJRE1BX1dSSVRFKGRldl9wcml2LT5mcm9udF9iZCk7DQo+IC0JCQkJYnJl YWs7DQo+IC0JCQljYXNlIFNBVkFHRV9CQUNLOg0KPiAtCQkJCURNQV9XUklURShkZXZfcHJp di0+YmFja19vZmZzZXQpOw0KPiAtCQkJCURNQV9XUklURShkZXZfcHJpdi0+YmFja19iZCk7 DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQljYXNlIFNBVkFHRV9ERVBUSDoNCj4gLQkJCQlETUFf V1JJVEUoZGV2X3ByaXYtPmRlcHRoX29mZnNldCk7DQo+IC0JCQkJRE1BX1dSSVRFKGRldl9w cml2LT5kZXB0aF9iZCk7DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQl9DQo+IC0JCQlETUFfV1JJ VEUoZGF0YS0+Y2xlYXIxLnZhbHVlKTsNCj4gLQkJCURNQV9XUklURShCQ0lfWF9ZKHgsIHkp KTsNCj4gLQkJCURNQV9XUklURShCQ0lfV19IKHcsIGgpKTsNCj4gLQkJfQ0KPiAtCQlETUFf Q09NTUlUKCk7DQo+IC0JfQ0KPiAtCWlmIChkYXRhLT5jbGVhcjEubWFzayAhPSAweGZmZmZm ZmZmKSB7DQo+IC0JCS8qIHJlc2V0IG1hc2sgKi8NCj4gLQkJQkVHSU5fRE1BKDIpOw0KPiAt CQlETUFfU0VUX1JFR0lTVEVSUyhTQVZBR0VfQklUUExBTkVXVE1BU0ssIDEpOw0KPiAtCQlE TUFfV1JJVEUoMHhmZmZmZmZmZik7DQo+IC0JCURNQV9DT01NSVQoKTsNCj4gLQl9DQo+IC0N Cj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0 Y2hfc3dhcChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LA0KPiAtCQkJCXVuc2ln bmVkIGludCBuYm94LCBjb25zdCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqYm94ZXMpDQo+IC17 DQo+IC0JdW5zaWduZWQgaW50IHN3YXBfY21kOw0KPiAtCXVuc2lnbmVkIGludCBpOw0KPiAt CURNQV9MT0NBTFM7DQo+IC0NCj4gLQlpZiAobmJveCA9PSAwKQ0KPiAtCQlyZXR1cm4gMDsN Cj4gLQ0KPiAtCXN3YXBfY21kID0gQkNJX0NNRF9SRUNUIHwgQkNJX0NNRF9SRUNUX1hQIHwg QkNJX0NNRF9SRUNUX1lQIHwNCj4gLQkgICAgQkNJX0NNRF9TUkNfUEJEX0NPTE9SX05FVyB8 IEJDSV9DTURfREVTVF9HQkQ7DQo+IC0JQkNJX0NNRF9TRVRfUk9QKHN3YXBfY21kLCAweEND KTsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBuYm94OyArK2kpIHsNCj4gLQkJQkVHSU5f RE1BKDYpOw0KPiAtCQlETUFfV1JJVEUoc3dhcF9jbWQpOw0KPiAtCQlETUFfV1JJVEUoZGV2 X3ByaXYtPmJhY2tfb2Zmc2V0KTsNCj4gLQkJRE1BX1dSSVRFKGRldl9wcml2LT5iYWNrX2Jk KTsNCj4gLQkJRE1BX1dSSVRFKEJDSV9YX1koYm94ZXNbaV0ueDEsIGJveGVzW2ldLnkxKSk7 DQo+IC0JCURNQV9XUklURShCQ0lfWF9ZKGJveGVzW2ldLngxLCBib3hlc1tpXS55MSkpOw0K PiAtCQlETUFfV1JJVEUoQkNJX1dfSChib3hlc1tpXS54MiAtIGJveGVzW2ldLngxLA0KPiAt CQkJCSAgYm94ZXNbaV0ueTIgLSBib3hlc1tpXS55MSkpOw0KPiAtCQlETUFfQ09NTUlUKCk7 DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQg c2F2YWdlX2Rpc3BhdGNoX2RyYXcoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwN Cj4gLQkJCQljb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqc3RhcnQsDQo+IC0JCQkJ Y29uc3QgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgKmVuZCwNCj4gLQkJCQljb25zdCBzdHJ1 Y3QgZHJtX2J1ZiAqIGRtYWJ1ZiwNCj4gLQkJCQljb25zdCB1bnNpZ25lZCBpbnQgKnZ0eGJ1 ZiwNCj4gLQkJCQl1bnNpZ25lZCBpbnQgdmJfc2l6ZSwgdW5zaWduZWQgaW50IHZiX3N0cmlk ZSwNCj4gLQkJCQl1bnNpZ25lZCBpbnQgbmJveCwNCj4gLQkJCQljb25zdCBzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqYm94ZXMpDQo+IC17DQo+IC0JdW5zaWduZWQgaW50IGksIGo7DQo+IC0J aW50IHJldDsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBuYm94OyArK2kpIHsNCj4gLQkJ Y29uc3QgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgKmNtZGJ1ZjsNCj4gLQkJZGV2X3ByaXYt PmVtaXRfY2xpcF9yZWN0KGRldl9wcml2LCAmYm94ZXNbaV0pOw0KPiAtDQo+IC0JCWNtZGJ1 ZiA9IHN0YXJ0Ow0KPiAtCQl3aGlsZSAoY21kYnVmIDwgZW5kKSB7DQo+IC0JCQlkcm1fc2F2 YWdlX2NtZF9oZWFkZXJfdCBjbWRfaGVhZGVyOw0KPiAtCQkJY21kX2hlYWRlciA9ICpjbWRi dWY7DQo+IC0JCQljbWRidWYrKzsNCj4gLQkJCXN3aXRjaCAoY21kX2hlYWRlci5jbWQuY21k KSB7DQo+IC0JCQljYXNlIFNBVkFHRV9DTURfRE1BX1BSSU06DQo+IC0JCQkJcmV0ID0gc2F2 YWdlX2Rpc3BhdGNoX2RtYV9wcmltKA0KPiAtCQkJCQlkZXZfcHJpdiwgJmNtZF9oZWFkZXIs IGRtYWJ1Zik7DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQljYXNlIFNBVkFHRV9DTURfVkJfUFJJ TToNCj4gLQkJCQlyZXQgPSBzYXZhZ2VfZGlzcGF0Y2hfdmJfcHJpbSgNCj4gLQkJCQkJZGV2 X3ByaXYsICZjbWRfaGVhZGVyLA0KPiAtCQkJCQl2dHhidWYsIHZiX3NpemUsIHZiX3N0cmlk ZSk7DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQljYXNlIFNBVkFHRV9DTURfRE1BX0lEWDoNCj4g LQkJCQlqID0gKGNtZF9oZWFkZXIuaWR4LmNvdW50ICsgMykgLyA0Ow0KPiAtCQkJCS8qIGog d2FzIGNoZWNrIGluIHNhdmFnZV9iY2lfY21kYnVmICovDQo+IC0JCQkJcmV0ID0gc2F2YWdl X2Rpc3BhdGNoX2RtYV9pZHgoZGV2X3ByaXYsDQo+IC0JCQkJCSZjbWRfaGVhZGVyLCAoY29u c3QgdWludDE2X3QgKiljbWRidWYsDQo+IC0JCQkJCWRtYWJ1Zik7DQo+IC0JCQkJY21kYnVm ICs9IGo7DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQljYXNlIFNBVkFHRV9DTURfVkJfSURYOg0K PiAtCQkJCWogPSAoY21kX2hlYWRlci5pZHguY291bnQgKyAzKSAvIDQ7DQo+IC0JCQkJLyog aiB3YXMgY2hlY2sgaW4gc2F2YWdlX2JjaV9jbWRidWYgKi8NCj4gLQkJCQlyZXQgPSBzYXZh Z2VfZGlzcGF0Y2hfdmJfaWR4KGRldl9wcml2LA0KPiAtCQkJCQkmY21kX2hlYWRlciwgKGNv bnN0IHVpbnQxNl90ICopY21kYnVmLA0KPiAtCQkJCQkoY29uc3QgdWludDMyX3QgKil2dHhi dWYsIHZiX3NpemUsDQo+IC0JCQkJCXZiX3N0cmlkZSk7DQo+IC0JCQkJY21kYnVmICs9IGo7 DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQlkZWZhdWx0Og0KPiAtCQkJCS8qIFdoYXQncyB0aGUg YmVzdCByZXR1cm4gY29kZT8gRUZBVUxUPyAqLw0KPiAtCQkJCURSTV9FUlJPUigiSU1QTEVN RU5UQVRJT04gRVJST1I6ICINCj4gLQkJCQkJICAibm9uLWRyYXdpbmctY29tbWFuZCAlZFxu IiwNCj4gLQkJCQkJICBjbWRfaGVhZGVyLmNtZC5jbWQpOw0KPiAtCQkJCXJldHVybiAtRUlO VkFMOw0KPiAtCQkJfQ0KPiAtDQo+IC0JCQlpZiAocmV0ICE9IDApDQo+IC0JCQkJcmV0dXJu IHJldDsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+ IC1pbnQgc2F2YWdlX2JjaV9jbWRidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3NhdmFn ZV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlzdHJ1Y3Qg ZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOw0KPiAtCXN0cnVjdCBkcm1fYnVmICpk bWFidWY7DQo+IC0JZHJtX3NhdmFnZV9jbWRidWZfdCAqY21kYnVmID0gZGF0YTsNCj4gLQlk cm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqa2NtZF9hZGRyID0gTlVMTDsNCj4gLQlkcm1fc2F2 YWdlX2NtZF9oZWFkZXJfdCAqZmlyc3RfZHJhd19jbWQ7DQo+IC0JdW5zaWduZWQgaW50ICpr dmJfYWRkciA9IE5VTEw7DQo+IC0Jc3RydWN0IGRybV9jbGlwX3JlY3QgKmtib3hfYWRkciA9 IE5VTEw7DQo+IC0JdW5zaWduZWQgaW50IGksIGo7DQo+IC0JaW50IHJldCA9IDA7DQo+IC0N Cj4gLQlEUk1fREVCVUcoIlxuIik7DQo+IC0NCj4gLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4o ZGV2LCBmaWxlX3ByaXYpOw0KPiAtDQo+IC0JaWYgKGRtYSAmJiBkbWEtPmJ1Zmxpc3QpIHsN Cj4gLQkJaWYgKGNtZGJ1Zi0+ZG1hX2lkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgew0KPiAtCQkJ RFJNX0VSUk9SDQo+IC0JCQkgICAgKCJ2ZXJ0ZXggYnVmZmVyIGluZGV4ICV1IG91dCBvZiBy YW5nZSAoMC0ldSlcbiIsDQo+IC0JCQkgICAgIGNtZGJ1Zi0+ZG1hX2lkeCwgZG1hLT5idWZf Y291bnQgLSAxKTsNCj4gLQkJCXJldHVybiAtRUlOVkFMOw0KPiAtCQl9DQo+IC0JCWRtYWJ1 ZiA9IGRtYS0+YnVmbGlzdFtjbWRidWYtPmRtYV9pZHhdOw0KPiAtCX0gZWxzZSB7DQo+IC0J CWRtYWJ1ZiA9IE5VTEw7DQo+IC0JfQ0KPiAtDQo+IC0JLyogQ29weSB0aGUgdXNlciBidWZm ZXJzIGludG8ga2VybmVsIHRlbXBvcmFyeSBhcmVhcy4gIFRoaXMgaGFzbid0IGJlZW4NCj4g LQkgKiBhIHBlcmZvcm1hbmNlIGxvc3MgY29tcGFyZWQgdG8gVkVSSUZZQVJFQV9SRUFELw0K PiAtCSAqIENPUFlfRlJPTV9VU0VSX1VOQ0hFQ0tFRCB3aGVuIGRvbmUgaW4gb3RoZXIgZHJp dmVycywgYW5kIGlzIGNvcnJlY3QNCj4gLQkgKiBmb3IgbG9ja2luZyBvbiBGcmVlQlNELg0K PiAtCSAqLw0KPiAtCWlmIChjbWRidWYtPnNpemUpIHsNCj4gLQkJa2NtZF9hZGRyID0ga21h bGxvY19hcnJheShjbWRidWYtPnNpemUsIDgsIEdGUF9LRVJORUwpOw0KPiAtCQlpZiAoa2Nt ZF9hZGRyID09IE5VTEwpDQo+IC0JCQlyZXR1cm4gLUVOT01FTTsNCj4gLQ0KPiAtCQlpZiAo Y29weV9mcm9tX3VzZXIoa2NtZF9hZGRyLCBjbWRidWYtPmNtZF9hZGRyLA0KPiAtCQkJCSAg ICAgICBjbWRidWYtPnNpemUgKiA4KSkNCj4gLQkJew0KPiAtCQkJa2ZyZWUoa2NtZF9hZGRy KTsNCj4gLQkJCXJldHVybiAtRUZBVUxUOw0KPiAtCQl9DQo+IC0JCWNtZGJ1Zi0+Y21kX2Fk ZHIgPSBrY21kX2FkZHI7DQo+IC0JfQ0KPiAtCWlmIChjbWRidWYtPnZiX3NpemUpIHsNCj4g LQkJa3ZiX2FkZHIgPSBtZW1kdXBfdXNlcihjbWRidWYtPnZiX2FkZHIsIGNtZGJ1Zi0+dmJf c2l6ZSk7DQo+IC0JCWlmIChJU19FUlIoa3ZiX2FkZHIpKSB7DQo+IC0JCQlyZXQgPSBQVFJf RVJSKGt2Yl9hZGRyKTsNCj4gLQkJCWt2Yl9hZGRyID0gTlVMTDsNCj4gLQkJCWdvdG8gZG9u ZTsNCj4gLQkJfQ0KPiAtCQljbWRidWYtPnZiX2FkZHIgPSBrdmJfYWRkcjsNCj4gLQl9DQo+ IC0JaWYgKGNtZGJ1Zi0+bmJveCkgew0KPiAtCQlrYm94X2FkZHIgPSBrbWFsbG9jX2FycmF5 KGNtZGJ1Zi0+bmJveCwgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSwNCj4gLQkJCQkJ ICBHRlBfS0VSTkVMKTsNCj4gLQkJaWYgKGtib3hfYWRkciA9PSBOVUxMKSB7DQo+IC0JCQly ZXQgPSAtRU5PTUVNOw0KPiAtCQkJZ290byBkb25lOw0KPiAtCQl9DQo+IC0NCj4gLQkJaWYg KGNvcHlfZnJvbV91c2VyKGtib3hfYWRkciwgY21kYnVmLT5ib3hfYWRkciwNCj4gLQkJCQkg ICAgICAgY21kYnVmLT5uYm94ICogc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpIHsN Cj4gLQkJCXJldCA9IC1FRkFVTFQ7DQo+IC0JCQlnb3RvIGRvbmU7DQo+IC0JCX0NCj4gLQlj bWRidWYtPmJveF9hZGRyID0ga2JveF9hZGRyOw0KPiAtCX0NCj4gLQ0KPiAtCS8qIE1ha2Ug c3VyZSB3cml0ZXMgdG8gRE1BIGJ1ZmZlcnMgYXJlIGZpbmlzaGVkIGJlZm9yZSBzZW5kaW5n DQo+IC0JICogRE1BIGNvbW1hbmRzIHRvIHRoZSBncmFwaGljcyBoYXJkd2FyZS4gKi8NCj4g LQltYigpOw0KPiAtDQo+IC0JLyogQ29taW5nIGZyb20gdXNlciBzcGFjZS4gRG9uJ3Qga25v dyBpZiB0aGUgWHNlcnZlciBoYXMNCj4gLQkgKiBlbWl0dGVkIHdhaXQgY29tbWFuZHMuIEFz c3VtaW5nIHRoZSB3b3JzdC4gKi8NCj4gLQlkZXZfcHJpdi0+d2FpdGluZyA9IDE7DQo+IC0N Cj4gLQlpID0gMDsNCj4gLQlmaXJzdF9kcmF3X2NtZCA9IE5VTEw7DQo+IC0Jd2hpbGUgKGkg PCBjbWRidWYtPnNpemUpIHsNCj4gLQkJZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgY21kX2hl YWRlcjsNCj4gLQkJY21kX2hlYWRlciA9ICooZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgKilj bWRidWYtPmNtZF9hZGRyOw0KPiAtCQljbWRidWYtPmNtZF9hZGRyKys7DQo+IC0JCWkrKzsN Cj4gLQ0KPiAtCQkvKiBHcm91cCBkcmF3aW5nIGNvbW1hbmRzIHdpdGggc2FtZSBzdGF0ZSB0 byBtaW5pbWl6ZQ0KPiAtCQkgKiBpdGVyYXRpb25zIG92ZXIgY2xpcCByZWN0cy4gKi8NCj4g LQkJaiA9IDA7DQo+IC0JCXN3aXRjaCAoY21kX2hlYWRlci5jbWQuY21kKSB7DQo+IC0JCWNh c2UgU0FWQUdFX0NNRF9ETUFfSURYOg0KPiAtCQljYXNlIFNBVkFHRV9DTURfVkJfSURYOg0K PiAtCQkJaiA9IChjbWRfaGVhZGVyLmlkeC5jb3VudCArIDMpIC8gNDsNCj4gLQkJCWlmIChp ICsgaiA+IGNtZGJ1Zi0+c2l6ZSkgew0KPiAtCQkJCURSTV9FUlJPUigiaW5kZXhlZCBkcmF3 aW5nIGNvbW1hbmQgZXh0ZW5kcyAiDQo+IC0JCQkJCSAgImJleW9uZCBlbmQgb2YgY29tbWFu ZCBidWZmZXJcbiIpOw0KPiAtCQkJCURNQV9GTFVTSCgpOw0KPiAtCQkJCXJldCA9IC1FSU5W QUw7DQo+IC0JCQkJZ290byBkb25lOw0KPiAtCQkJfQ0KPiAtCQkJZmFsbHRocm91Z2g7DQo+ IC0JCWNhc2UgU0FWQUdFX0NNRF9ETUFfUFJJTToNCj4gLQkJY2FzZSBTQVZBR0VfQ01EX1ZC X1BSSU06DQo+IC0JCQlpZiAoIWZpcnN0X2RyYXdfY21kKQ0KPiAtCQkJCWZpcnN0X2RyYXdf Y21kID0gY21kYnVmLT5jbWRfYWRkciAtIDE7DQo+IC0JCQljbWRidWYtPmNtZF9hZGRyICs9 IGo7DQo+IC0JCQlpICs9IGo7DQo+IC0JCQlicmVhazsNCj4gLQkJZGVmYXVsdDoNCj4gLQkJ CWlmIChmaXJzdF9kcmF3X2NtZCkgew0KPiAtCQkJCXJldCA9IHNhdmFnZV9kaXNwYXRjaF9k cmF3KA0KPiAtCQkJCSAgICAgIGRldl9wcml2LCBmaXJzdF9kcmF3X2NtZCwNCj4gLQkJCQkg ICAgICBjbWRidWYtPmNtZF9hZGRyIC0gMSwNCj4gLQkJCQkgICAgICBkbWFidWYsIGNtZGJ1 Zi0+dmJfYWRkciwgY21kYnVmLT52Yl9zaXplLA0KPiAtCQkJCSAgICAgIGNtZGJ1Zi0+dmJf c3RyaWRlLA0KPiAtCQkJCSAgICAgIGNtZGJ1Zi0+bmJveCwgY21kYnVmLT5ib3hfYWRkcik7 DQo+IC0JCQkJaWYgKHJldCAhPSAwKQ0KPiAtCQkJCQlnb3RvIGRvbmU7DQo+IC0JCQkJZmly c3RfZHJhd19jbWQgPSBOVUxMOw0KPiAtCQkJfQ0KPiAtCQl9DQo+IC0JCWlmIChmaXJzdF9k cmF3X2NtZCkNCj4gLQkJCWNvbnRpbnVlOw0KPiAtDQo+IC0JCXN3aXRjaCAoY21kX2hlYWRl ci5jbWQuY21kKSB7DQo+IC0JCWNhc2UgU0FWQUdFX0NNRF9TVEFURToNCj4gLQkJCWogPSAo Y21kX2hlYWRlci5zdGF0ZS5jb3VudCArIDEpIC8gMjsNCj4gLQkJCWlmIChpICsgaiA+IGNt ZGJ1Zi0+c2l6ZSkgew0KPiAtCQkJCURSTV9FUlJPUigiY29tbWFuZCBTQVZBR0VfQ01EX1NU QVRFIGV4dGVuZHMgIg0KPiAtCQkJCQkgICJiZXlvbmQgZW5kIG9mIGNvbW1hbmQgYnVmZmVy XG4iKTsNCj4gLQkJCQlETUFfRkxVU0goKTsNCj4gLQkJCQlyZXQgPSAtRUlOVkFMOw0KPiAt CQkJCWdvdG8gZG9uZTsNCj4gLQkJCX0NCj4gLQkJCXJldCA9IHNhdmFnZV9kaXNwYXRjaF9z dGF0ZShkZXZfcHJpdiwgJmNtZF9oZWFkZXIsDQo+IC0JCQkJKGNvbnN0IHVpbnQzMl90ICop Y21kYnVmLT5jbWRfYWRkcik7DQo+IC0JCQljbWRidWYtPmNtZF9hZGRyICs9IGo7DQo+IC0J CQlpICs9IGo7DQo+IC0JCQlicmVhazsNCj4gLQkJY2FzZSBTQVZBR0VfQ01EX0NMRUFSOg0K PiAtCQkJaWYgKGkgKyAxID4gY21kYnVmLT5zaXplKSB7DQo+IC0JCQkJRFJNX0VSUk9SKCJj b21tYW5kIFNBVkFHRV9DTURfQ0xFQVIgZXh0ZW5kcyAiDQo+IC0JCQkJCSAgImJleW9uZCBl bmQgb2YgY29tbWFuZCBidWZmZXJcbiIpOw0KPiAtCQkJCURNQV9GTFVTSCgpOw0KPiAtCQkJ CXJldCA9IC1FSU5WQUw7DQo+IC0JCQkJZ290byBkb25lOw0KPiAtCQkJfQ0KPiAtCQkJcmV0 ID0gc2F2YWdlX2Rpc3BhdGNoX2NsZWFyKGRldl9wcml2LCAmY21kX2hlYWRlciwNCj4gLQkJ CQkJCSAgICBjbWRidWYtPmNtZF9hZGRyLA0KPiAtCQkJCQkJICAgIGNtZGJ1Zi0+bmJveCwN Cj4gLQkJCQkJCSAgICBjbWRidWYtPmJveF9hZGRyKTsNCj4gLQkJCWNtZGJ1Zi0+Y21kX2Fk ZHIrKzsNCj4gLQkJCWkrKzsNCj4gLQkJCWJyZWFrOw0KPiAtCQljYXNlIFNBVkFHRV9DTURf U1dBUDoNCj4gLQkJCXJldCA9IHNhdmFnZV9kaXNwYXRjaF9zd2FwKGRldl9wcml2LCBjbWRi dWYtPm5ib3gsDQo+IC0JCQkJCQkgICBjbWRidWYtPmJveF9hZGRyKTsNCj4gLQkJCWJyZWFr Ow0KPiAtCQlkZWZhdWx0Og0KPiAtCQkJRFJNX0VSUk9SKCJpbnZhbGlkIGNvbW1hbmQgMHgl eFxuIiwNCj4gLQkJCQkgIGNtZF9oZWFkZXIuY21kLmNtZCk7DQo+IC0JCQlETUFfRkxVU0go KTsNCj4gLQkJCXJldCA9IC1FSU5WQUw7DQo+IC0JCQlnb3RvIGRvbmU7DQo+IC0JCX0NCj4g LQ0KPiAtCQlpZiAocmV0ICE9IDApIHsNCj4gLQkJCURNQV9GTFVTSCgpOw0KPiAtCQkJZ290 byBkb25lOw0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGZpcnN0X2RyYXdfY21kKSB7 DQo+IC0JCXJldCA9IHNhdmFnZV9kaXNwYXRjaF9kcmF3ICgNCj4gLQkJCWRldl9wcml2LCBm aXJzdF9kcmF3X2NtZCwgY21kYnVmLT5jbWRfYWRkciwgZG1hYnVmLA0KPiAtCQkJY21kYnVm LT52Yl9hZGRyLCBjbWRidWYtPnZiX3NpemUsIGNtZGJ1Zi0+dmJfc3RyaWRlLA0KPiAtCQkJ Y21kYnVmLT5uYm94LCBjbWRidWYtPmJveF9hZGRyKTsNCj4gLQkJaWYgKHJldCAhPSAwKSB7 DQo+IC0JCQlETUFfRkxVU0goKTsNCj4gLQkJCWdvdG8gZG9uZTsNCj4gLQkJfQ0KPiAtCX0N Cj4gLQ0KPiAtCURNQV9GTFVTSCgpOw0KPiAtDQo+IC0JaWYgKGRtYWJ1ZiAmJiBjbWRidWYt PmRpc2NhcmQpIHsNCj4gLQkJZHJtX3NhdmFnZV9idWZfcHJpdl90ICpidWZfcHJpdiA9IGRt YWJ1Zi0+ZGV2X3ByaXZhdGU7DQo+IC0JCXVpbnQxNl90IGV2ZW50Ow0KPiAtCQlldmVudCA9 IHNhdmFnZV9iY2lfZW1pdF9ldmVudChkZXZfcHJpdiwgU0FWQUdFX1dBSVRfM0QpOw0KPiAt CQlTRVRfQUdFKCZidWZfcHJpdi0+YWdlLCBldmVudCwgZGV2X3ByaXYtPmV2ZW50X3dyYXAp Ow0KPiAtCQlzYXZhZ2VfZnJlZWxpc3RfcHV0KGRldiwgZG1hYnVmKTsNCj4gLQl9DQo+IC0N Cj4gLWRvbmU6DQo+IC0JLyogSWYgd2UgZGlkbid0IG5lZWQgdG8gYWxsb2NhdGUgdGhlbSwg dGhlc2UnbGwgYmUgTlVMTCAqLw0KPiAtCWtmcmVlKGtjbWRfYWRkcik7DQo+IC0Ja2ZyZWUo a3ZiX2FkZHIpOw0KPiAtCWtmcmVlKGtib3hfYWRkcik7DQo+IC0NCj4gLQlyZXR1cm4gcmV0 Ow0KPiAtfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9zaXMvTWFrZWZpbGUNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAyYjAyNTNmZGE5My4uMDAwMDAwMDAwMDAwDQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9zaXMvTWFrZWZpbGUNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSwxMCAr MCwwIEBADQo+IC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4g LSMNCj4gLSMgTWFrZWZpbGUgZm9yIHRoZSBkcm0gZGV2aWNlIGRyaXZlci4gIFRoaXMgZHJp dmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZQ0KPiAtIyBEaXJlY3QgUmVuZGVyaW5nIElu ZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlci4NCj4gLQ0K PiAtc2lzLXkgOj0gc2lzX2Rydi5vIHNpc19tbS5vDQo+IC0NCj4gLW9iai0kKENPTkZJR19E Uk1fU0lTKSAgICs9IHNpcy5vDQo+IC0NCj4gLQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3Npcy9zaXNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYw0K PiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggNjE3MzAyMGE5YmY1Li4wMDAw MDAwMDAwMDANCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfZHJ2LmMNCj4gKysr IC9kZXYvbnVsbA0KPiBAQCAtMSwxNDMgKzAsMCBAQA0KPiAtLyogc2lzLmMgLS0gc2lzIGRy aXZlciAtKi0gbGludXgtYyAtKi0NCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgMTk5OSBQcmVj aXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuDQo+IC0gKiBDb3B5cmln aHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEu DQo+IC0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4gLSAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAtICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0gKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUNCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dA0KPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICogU29mdHdhcmUuDQo+IC0g Kg0KPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LA0KPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBQUkVDSVNJT04gSU5TSUdIVCBB TkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP Ug0KPiAtICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+IC0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIN Cj4gLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gLSAqDQo+IC0gKi8NCj4gLQ0K PiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3BjaS5o Pg0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4NCj4gLSNpbmNsdWRlIDxkcm0v ZHJtX2ZpbGUuaD4NCj4gLSNpbmNsdWRlIDxkcm0vZHJtX3BjaWlkcy5oPg0KPiAtI2luY2x1 ZGUgPGRybS9zaXNfZHJtLmg+DQo+IC0NCj4gLSNpbmNsdWRlICJzaXNfZHJ2LmgiDQo+IC0N Cj4gLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsNCj4gLQlz aXNkcnZfUENJX0lEUw0KPiAtfTsNCj4gLQ0KPiAtc3RhdGljIGludCBzaXNfZHJpdmVyX2xv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBjaGlwc2V0KQ0KPiAt ew0KPiAtCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYtPmRldik7DQo+ IC0JZHJtX3Npc19wcml2YXRlX3QgKmRldl9wcml2Ow0KPiAtDQo+IC0JcGNpX3NldF9tYXN0 ZXIocGRldik7DQo+IC0NCj4gLQlkZXZfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKGRybV9zaXNf cHJpdmF0ZV90KSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKGRldl9wcml2ID09IE5VTEwpDQo+ IC0JCXJldHVybiAtRU5PTUVNOw0KPiAtDQo+IC0JaWRyX2luaXRfYmFzZSgmZGV2X3ByaXYt Pm9iamVjdF9pZHIsIDEpOw0KPiAtCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9w cml2Ow0KPiAtCWRldl9wcml2LT5jaGlwc2V0ID0gY2hpcHNldDsNCj4gLQ0KPiAtCXJldHVy biAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBzaXNfZHJpdmVyX3VubG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0NCj4gLQlpZHJfZGVzdHJveSgmZGV2X3By aXYtPm9iamVjdF9pZHIpOw0KPiAtDQo+IC0Ja2ZyZWUoZGV2X3ByaXYpOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaXNfZHJpdmVyX2Zv cHMgPSB7DQo+IC0JLm93bmVyID0gVEhJU19NT0RVTEUsDQo+IC0JLm9wZW4gPSBkcm1fb3Bl biwNCj4gLQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLA0KPiAtCS51bmxvY2tlZF9pb2N0bCA9 IGRybV9pb2N0bCwNCj4gLQkubW1hcCA9IGRybV9sZWdhY3lfbW1hcCwNCj4gLQkucG9sbCA9 IGRybV9wb2xsLA0KPiAtCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLA0KPiAt CS5sbHNlZWsgPSBub29wX2xsc2VlaywNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBpbnQgc2lz X2RyaXZlcl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2lzX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2Ow0K PiAtDQo+IC0JRFJNX0RFQlVHX0RSSVZFUigiXG4iKTsNCj4gLQlmaWxlX3ByaXYgPSBrbWFs bG9jKHNpemVvZigqZmlsZV9wcml2KSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFmaWxlX3By aXYpDQo+IC0JCXJldHVybiAtRU5PTUVNOw0KPiAtDQo+IC0JZmlsZS0+ZHJpdmVyX3ByaXYg PSBmaWxlX3ByaXY7DQo+IC0NCj4gLQlJTklUX0xJU1RfSEVBRCgmZmlsZV9wcml2LT5vYmpf bGlzdCk7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQg c2lzX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9maWxlICpmaWxlKQ0KPiAtew0KPiAtCXN0cnVjdCBzaXNfZmlsZV9wcml2YXRlICpmaWxl X3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsNCj4gLQ0KPiAtCWtmcmVlKGZpbGVfcHJpdik7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7DQo+ IC0JLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX0xFR0FDWSwN Cj4gLQkubG9hZCA9IHNpc19kcml2ZXJfbG9hZCwNCj4gLQkudW5sb2FkID0gc2lzX2RyaXZl cl91bmxvYWQsDQo+IC0JLm9wZW4gPSBzaXNfZHJpdmVyX29wZW4sDQo+IC0JLnByZWNsb3Nl ID0gc2lzX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQsDQo+IC0JLnBvc3RjbG9zZSA9IHNpc19k cml2ZXJfcG9zdGNsb3NlLA0KPiAtCS5kbWFfcXVpZXNjZW50ID0gc2lzX2lkbGUsDQo+IC0J Lmxhc3RjbG9zZSA9IHNpc19sYXN0Y2xvc2UsDQo+IC0JLmlvY3RscyA9IHNpc19pb2N0bHMs DQo+IC0JLmZvcHMgPSAmc2lzX2RyaXZlcl9mb3BzLA0KPiAtCS5uYW1lID0gRFJJVkVSX05B TUUsDQo+IC0JLmRlc2MgPSBEUklWRVJfREVTQywNCj4gLQkuZGF0ZSA9IERSSVZFUl9EQVRF LA0KPiAtCS5tYWpvciA9IERSSVZFUl9NQUpPUiwNCj4gLQkubWlub3IgPSBEUklWRVJfTUlO T1IsDQo+IC0JLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTCwNCj4gLX07DQo+IC0N Cj4gLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzaXNfcGNpX2RyaXZlciA9IHsNCj4gLQku bmFtZSA9IERSSVZFUl9OQU1FLA0KPiAtCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwNCj4gLX07 DQo+IC0NCj4gLXN0YXRpYyBpbnQgX19pbml0IHNpc19pbml0KHZvaWQpDQo+IC17DQo+IC0J ZHJpdmVyLm51bV9pb2N0bHMgPSBzaXNfbWF4X2lvY3RsOw0KPiAtCXJldHVybiBkcm1fbGVn YWN5X3BjaV9pbml0KCZkcml2ZXIsICZzaXNfcGNpX2RyaXZlcik7DQo+IC19DQo+IC0NCj4g LXN0YXRpYyB2b2lkIF9fZXhpdCBzaXNfZXhpdCh2b2lkKQ0KPiAtew0KPiAtCWRybV9sZWdh Y3lfcGNpX2V4aXQoJmRyaXZlciwgJnNpc19wY2lfZHJpdmVyKTsNCj4gLX0NCj4gLQ0KPiAt bW9kdWxlX2luaXQoc2lzX2luaXQpOw0KPiAtbW9kdWxlX2V4aXQoc2lzX2V4aXQpOw0KPiAt DQo+IC1NT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOw0KPiAtTU9EVUxFX0RFU0NSSVBU SU9OKERSSVZFUl9ERVNDKTsNCj4gLU1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9u YWwgcmlnaHRzIik7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX2Rydi5oDQo+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCA4MTMzOTQ0M2IzYjEuLjAwMDAwMDAwMDAwMA0KPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuaA0KPiArKysgL2Rldi9udWxsDQo+IEBA IC0xLDgwICswLDAgQEANCj4gLS8qIHNpc19kcnYuaCAtLSBQcml2YXRlIGhlYWRlciBmb3Ig c2lzIGRyaXZlciAtKi0gbGludXgtYyAtKi0gKi8NCj4gLS8qDQo+IC0gKiBDb3B5cmlnaHQg MTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuDQo+IC0g KiBDb3B5cmlnaHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENh bGlmb3JuaWEuDQo+IC0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiAtICoNCj4gLSAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAtICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0gKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUNCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dA0KPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICogU29mdHdh cmUuDQo+IC0gKg0KPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLA0KPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBQUkVDSVNJT04g SU5TSUdIVCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUg0KPiAtICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+IC0gKiBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVINCj4gLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gLSAqDQo+IC0g Ki8NCj4gLQ0KPiAtI2lmbmRlZiBfU0lTX0RSVl9IXw0KPiAtI2RlZmluZSBfU0lTX0RSVl9I Xw0KPiAtDQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5oPg0KPiAtI2luY2x1ZGUgPGRy bS9kcm1fbGVnYWN5Lmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9tbS5oPg0KPiAtDQo+IC0v KiBHZW5lcmFsIGN1c3RvbWl6YXRpb246DQo+IC0gKi8NCj4gLQ0KPiAtI2RlZmluZSBEUklW RVJfQVVUSE9SCQkiU0lTLCBUdW5nc3RlbiBHcmFwaGljcyINCj4gLSNkZWZpbmUgRFJJVkVS X05BTUUJCSJzaXMiDQo+IC0jZGVmaW5lIERSSVZFUl9ERVNDCQkiU0lTIDMwMC82MzAvNTQw IGFuZCBYR0kgVjNYRS9WNS9WOCINCj4gLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA3MDYy NiINCj4gLSNkZWZpbmUgRFJJVkVSX01BSk9SCQkxDQo+IC0jZGVmaW5lIERSSVZFUl9NSU5P UgkJMw0KPiAtI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkwDQo+IC0NCj4gLWVudW0gc2lz X2ZhbWlseSB7DQo+IC0JU0lTX09USEVSID0gMCwNCj4gLQlTSVNfQ0hJUF8zMTUgPSAxLA0K PiAtfTsNCj4gLQ0KPiAtI2RlZmluZSBTSVNfUkVBRChyZWcpICAgICAgICAgcmVhZGwoKCh2 b2lkIF9faW9tZW0gKilkZXZfcHJpdi0+bW1pby0+aGFuZGxlKSArIChyZWcpKQ0KPiAtI2Rl ZmluZSBTSVNfV1JJVEUocmVnLCB2YWwpICAgd3JpdGVsKHZhbCwgKCh2b2lkIF9faW9tZW0g KilkZXZfcHJpdi0+bW1pby0+aGFuZGxlKSArIChyZWcpKQ0KPiAtDQo+IC10eXBlZGVmIHN0 cnVjdCBkcm1fc2lzX3ByaXZhdGUgew0KPiAtCWRybV9sb2NhbF9tYXBfdCAqbW1pbzsNCj4g LQl1bnNpZ25lZCBpbnQgaWRsZV9mYXVsdDsNCj4gLQl1bnNpZ25lZCBpbnQgY2hpcHNldDsN Cj4gLQlpbnQgdnJhbV9pbml0aWFsaXplZDsNCj4gLQlpbnQgYWdwX2luaXRpYWxpemVkOw0K PiAtCXVuc2lnbmVkIGxvbmcgdnJhbV9vZmZzZXQ7DQo+IC0JdW5zaWduZWQgbG9uZyBhZ3Bf b2Zmc2V0Ow0KPiAtCXN0cnVjdCBkcm1fbW0gdnJhbV9tbTsNCj4gLQlzdHJ1Y3QgZHJtX21t IGFncF9tbTsNCj4gLQkvKiogTWFwcGluZyBvZiB1c2Vyc3BhY2Uga2V5cyB0byBtbSBvYmpl Y3RzICovDQo+IC0Jc3RydWN0IGlkciBvYmplY3RfaWRyOw0KPiAtfSBkcm1fc2lzX3ByaXZh dGVfdDsNCj4gLQ0KPiAtc3RydWN0IHNpc19maWxlX3ByaXZhdGUgew0KPiAtCXN0cnVjdCBs aXN0X2hlYWQgb2JqX2xpc3Q7DQo+IC19Ow0KPiAtDQo+IC1leHRlcm4gaW50IHNpc19pZGxl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOw0KPiAtZXh0ZXJuIHZvaWQgc2lzX3JlY2xhaW1f YnVmZmVyc19sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCQkgICAgICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOw0KPiAtZXh0ZXJuIHZvaWQgc2lzX2xhc3Rj bG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsNCj4gLQ0KPiAtZXh0ZXJuIGNvbnN0IHN0 cnVjdCBkcm1faW9jdGxfZGVzYyBzaXNfaW9jdGxzW107DQo+IC1leHRlcm4gaW50IHNpc19t YXhfaW9jdGw7DQo+IC0NCj4gLSNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3Npcy9zaXNfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMNCj4gZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IGU1MWQ0Mjg5YTNkMC4uMDAwMDAwMDAw MDAwDQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMNCj4gKysrIC9kZXYv bnVsbA0KPiBAQCAtMSwzNjMgKzAsMCBAQA0KPiAtLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ IC0gKg0KPiAtICogQ29weXJpZ2h0IDIwMDYgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIEJp c21hcmNrLCBORC4sIFVTQS4NCj4gLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+IC0gKg0K PiAtICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUNCj4gLSAqICJTb2Z0d2Fy ZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcNCj4gLSAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwNCj4gLSAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNl bnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8NCj4gLSAq IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0bw0KPiAtICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiAt ICoNCj4gLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlDQo+IC0gKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucw0KPiAt ICogb2YgdGhlIFNvZnR3YXJlLg0KPiAtICoNCj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S DQo+IC0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCj4gLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTA0K PiAtICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJ RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLA0KPiAtICogREFNQUdFUyBPUiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SDQo+ IC0gKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFDQo+IC0gKiBVU0UgT1IgT1RIRVIgREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLg0KPiAtICoNCj4gLSAqDQo+IC0gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovDQo+IC0NCj4gLS8qDQo+IC0gKiBBdXRob3JzOg0KPiAtICogICAgVGhvbWFzIEhlbGxz dHLDtm0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+DQo+IC0gKi8NCj4g LQ0KPiAtI2luY2x1ZGUgPHZpZGVvL3Npc2ZiLmg+DQo+IC0NCj4gLSNpbmNsdWRlIDxkcm0v ZHJtX2RldmljZS5oPg0KPiAtI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5oPg0KPiAtI2luY2x1 ZGUgPGRybS9zaXNfZHJtLmg+DQo+IC0NCj4gLSNpbmNsdWRlICJzaXNfZHJ2LmgiDQo+IC0N Cj4gLQ0KPiAtI2RlZmluZSBWSURFT19UWVBFIDANCj4gLSNkZWZpbmUgQUdQX1RZUEUgMQ0K PiAtDQo+IC0NCj4gLXN0cnVjdCBzaXNfbWVtYmxvY2sgew0KPiAtCXN0cnVjdCBkcm1fbW1f bm9kZSBtbV9ub2RlOw0KPiAtCXN0cnVjdCBzaXNfbWVtcmVxIHJlcTsNCj4gLQlzdHJ1Y3Qg bGlzdF9oZWFkIG93bmVyX2xpc3Q7DQo+IC19Ow0KPiAtDQo+IC0jaWYgZGVmaW5lZChDT05G SUdfRkJfU0lTKSB8fCBkZWZpbmVkKENPTkZJR19GQl9TSVNfTU9EVUxFKQ0KPiAtLyogZmIg bWFuYWdlbWVudCB2aWEgZmIgZGV2aWNlICovDQo+IC0NCj4gLSNkZWZpbmUgU0lTX01NX0FM SUdOX1NISUZUIDANCj4gLSNkZWZpbmUgU0lTX01NX0FMSUdOX01BU0sgMA0KPiAtDQo+IC0j ZWxzZSAvKiBDT05GSUdfRkJfU0lTW19NT0RVTEVdICovDQo+IC0NCj4gLSNkZWZpbmUgU0lT X01NX0FMSUdOX1NISUZUIDQNCj4gLSNkZWZpbmUgU0lTX01NX0FMSUdOX01BU0sgKCgxIDw8 IFNJU19NTV9BTElHTl9TSElGVCkgLSAxKQ0KPiAtDQo+IC0jZW5kaWYgLyogQ09ORklHX0ZC X1NJU1tfTU9EVUxFXSAqLw0KPiAtDQo+IC1zdGF0aWMgaW50IHNpc19mYl9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQ0KPiAtew0KPiAtCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7DQo+IC0JZHJtX3Npc19mYl90ICpmYiA9IGRhdGE7DQo+IC0NCj4gLQltdXRl eF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7DQo+IC0JLyogVW5jb25kaXRpb25hbGx5IGlu aXQgdGhlIGRybV9tbSwgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdXNlIGl0IHdoZW4gdGhlDQo+ IC0JICogZmIgc2lzIGRyaXZlciBpcyBhdmFpbGFibGUgLSBtYWtlIGNsZWFudXAgZWFzaWVy LiAqLw0KPiAtCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+dnJhbV9tbSwgMCwgZmItPnNpemUg Pj4gU0lTX01NX0FMSUdOX1NISUZUKTsNCj4gLQ0KPiAtCWRldl9wcml2LT52cmFtX2luaXRp YWxpemVkID0gMTsNCj4gLQlkZXZfcHJpdi0+dnJhbV9vZmZzZXQgPSBmYi0+b2Zmc2V0Ow0K PiAtDQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7DQo+IC0JRFJNX0RF QlVHKCJvZmZzZXQgPSAlbHUsIHNpemUgPSAlbHVcbiIsIGZiLT5vZmZzZXQsIGZiLT5zaXpl KTsNCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IHNpc19k cm1fYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxl LA0KPiAtCQkJIHZvaWQgKmRhdGEsIGludCBwb29sKQ0KPiAtew0KPiAtCWRybV9zaXNfcHJp dmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3Npc19tZW1f dCAqbWVtID0gZGF0YTsNCj4gLQlpbnQgcmV0dmFsID0gMCwgdXNlcl9rZXk7DQo+IC0Jc3Ry dWN0IHNpc19tZW1ibG9jayAqaXRlbTsNCj4gLQlzdHJ1Y3Qgc2lzX2ZpbGVfcHJpdmF0ZSAq ZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7DQo+IC0JdW5zaWduZWQgbG9uZyBvZmZz ZXQ7DQo+IC0NCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7DQo+IC0NCj4g LQlpZiAoMCA9PSAoKHBvb2wgPT0gMCkgPyBkZXZfcHJpdi0+dnJhbV9pbml0aWFsaXplZCA6 DQo+IC0JCSAgICAgIGRldl9wcml2LT5hZ3BfaW5pdGlhbGl6ZWQpKSB7DQo+IC0JCURSTV9F UlJPUg0KPiAtCQkgICAgKCJBdHRlbXB0IHRvIGFsbG9jYXRlIGZyb20gdW5pbml0aWFsaXpl ZCBtZW1vcnkgbWFuYWdlci5cbiIpOw0KPiAtCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0 X211dGV4KTsNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtDQo+IC0JaXRlbSA9 IGt6YWxsb2Moc2l6ZW9mKCppdGVtKSwgR0ZQX0tFUk5FTCk7DQo+IC0JaWYgKCFpdGVtKSB7 DQo+IC0JCXJldHZhbCA9IC1FTk9NRU07DQo+IC0JCWdvdG8gZmFpbF9hbGxvYzsNCj4gLQl9 DQo+IC0NCj4gLQltZW0tPnNpemUgPSAobWVtLT5zaXplICsgU0lTX01NX0FMSUdOX01BU0sp ID4+IFNJU19NTV9BTElHTl9TSElGVDsNCj4gLQlpZiAocG9vbCA9PSBBR1BfVFlQRSkgew0K PiAtCQlyZXR2YWwgPSBkcm1fbW1faW5zZXJ0X25vZGUoJmRldl9wcml2LT5hZ3BfbW0sDQo+ IC0JCQkJCSAgICAmaXRlbS0+bW1fbm9kZSwNCj4gLQkJCQkJICAgIG1lbS0+c2l6ZSk7DQo+ IC0JCW9mZnNldCA9IGl0ZW0tPm1tX25vZGUuc3RhcnQ7DQo+IC0JfSBlbHNlIHsNCj4gLSNp ZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1NJU19NT0RV TEUpDQo+IC0JCWl0ZW0tPnJlcS5zaXplID0gbWVtLT5zaXplOw0KPiAtCQlzaXNfbWFsbG9j KCZpdGVtLT5yZXEpOw0KPiAtCQlpZiAoaXRlbS0+cmVxLnNpemUgPT0gMCkNCj4gLQkJCXJl dHZhbCA9IC1FTk9NRU07DQo+IC0JCW9mZnNldCA9IGl0ZW0tPnJlcS5vZmZzZXQ7DQo+IC0j ZWxzZQ0KPiAtCQlyZXR2YWwgPSBkcm1fbW1faW5zZXJ0X25vZGUoJmRldl9wcml2LT52cmFt X21tLA0KPiAtCQkJCQkgICAgJml0ZW0tPm1tX25vZGUsDQo+IC0JCQkJCSAgICBtZW0tPnNp emUpOw0KPiAtCQlvZmZzZXQgPSBpdGVtLT5tbV9ub2RlLnN0YXJ0Ow0KPiAtI2VuZGlmDQo+ IC0JfQ0KPiAtCWlmIChyZXR2YWwpDQo+IC0JCWdvdG8gZmFpbF9hbGxvYzsNCj4gLQ0KPiAt CXJldHZhbCA9IGlkcl9hbGxvYygmZGV2X3ByaXYtPm9iamVjdF9pZHIsIGl0ZW0sIDEsIDAs IEdGUF9LRVJORUwpOw0KPiAtCWlmIChyZXR2YWwgPCAwKQ0KPiAtCQlnb3RvIGZhaWxfaWRy Ow0KPiAtCXVzZXJfa2V5ID0gcmV0dmFsOw0KPiAtDQo+IC0JbGlzdF9hZGQoJml0ZW0tPm93 bmVyX2xpc3QsICZmaWxlX3ByaXYtPm9ial9saXN0KTsNCj4gLQltdXRleF91bmxvY2soJmRl di0+c3RydWN0X211dGV4KTsNCj4gLQ0KPiAtCW1lbS0+b2Zmc2V0ID0gKChwb29sID09IDAp ID8NCj4gLQkJICAgICAgZGV2X3ByaXYtPnZyYW1fb2Zmc2V0IDogZGV2X3ByaXYtPmFncF9v ZmZzZXQpICsNCj4gLQkgICAgKG9mZnNldCA8PCBTSVNfTU1fQUxJR05fU0hJRlQpOw0KPiAt CW1lbS0+ZnJlZSA9IHVzZXJfa2V5Ow0KPiAtCW1lbS0+c2l6ZSA9IG1lbS0+c2l6ZSA8PCBT SVNfTU1fQUxJR05fU0hJRlQ7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLQ0KPiAtZmFpbF9p ZHI6DQo+IC0JZHJtX21tX3JlbW92ZV9ub2RlKCZpdGVtLT5tbV9ub2RlKTsNCj4gLWZhaWxf YWxsb2M6DQo+IC0Ja2ZyZWUoaXRlbSk7DQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7DQo+IC0NCj4gLQltZW0tPm9mZnNldCA9IDA7DQo+IC0JbWVtLT5zaXplID0g MDsNCj4gLQltZW0tPmZyZWUgPSAwOw0KPiAtDQo+IC0JRFJNX0RFQlVHKCJhbGxvYyAlZCwg c2l6ZSA9ICVsZCwgb2Zmc2V0ID0gJWxkXG4iLCBwb29sLCBtZW0tPnNpemUsDQo+IC0JCSAg bWVtLT5vZmZzZXQpOw0KPiAtDQo+IC0JcmV0dXJuIHJldHZhbDsNCj4gLX0NCj4gLQ0KPiAt c3RhdGljIGludCBzaXNfZHJtX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0JZHJtX3Npc19w cml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsNCj4gLQlkcm1fc2lzX21l bV90ICptZW0gPSBkYXRhOw0KPiAtCXN0cnVjdCBzaXNfbWVtYmxvY2sgKm9iajsNCj4gLQ0K PiAtCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsNCj4gLQlvYmogPSBpZHJfZmlu ZCgmZGV2X3ByaXYtPm9iamVjdF9pZHIsIG1lbS0+ZnJlZSk7DQo+IC0JaWYgKG9iaiA9PSBO VUxMKSB7DQo+IC0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOw0KPiAtCQly ZXR1cm4gLUVJTlZBTDsNCj4gLQl9DQo+IC0NCj4gLQlpZHJfcmVtb3ZlKCZkZXZfcHJpdi0+ b2JqZWN0X2lkciwgbWVtLT5mcmVlKTsNCj4gLQlsaXN0X2RlbCgmb2JqLT5vd25lcl9saXN0 KTsNCj4gLQlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZvYmotPm1tX25vZGUpKQ0KPiAt CQlkcm1fbW1fcmVtb3ZlX25vZGUoJm9iai0+bW1fbm9kZSk7DQo+IC0jaWYgZGVmaW5lZChD T05GSUdfRkJfU0lTKSB8fCBkZWZpbmVkKENPTkZJR19GQl9TSVNfTU9EVUxFKQ0KPiAtCWVs c2UNCj4gLQkJc2lzX2ZyZWUob2JqLT5yZXEub2Zmc2V0KTsNCj4gLSNlbmRpZg0KPiAtCWtm cmVlKG9iaik7DQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7DQo+IC0J RFJNX0RFQlVHKCJmcmVlID0gMHglbHhcbiIsIG1lbS0+ZnJlZSk7DQo+IC0NCj4gLQlyZXR1 cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzaXNfZmJfYWxsb2Moc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJCXN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2KQ0KPiAtew0KPiAtCXJldHVybiBzaXNfZHJtX2FsbG9jKGRldiwgZmlsZV9wcml2 LCBkYXRhLCBWSURFT19UWVBFKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzaXNfaW9j dGxfYWdwX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gLQkJ CSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQ0KPiAtew0KPiAtCWRybV9zaXNf cHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JZHJtX3Npc19h Z3BfdCAqYWdwID0gZGF0YTsNCj4gLQlkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+ IC0NCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7DQo+IC0JZHJtX21tX2lu aXQoJmRldl9wcml2LT5hZ3BfbW0sIDAsIGFncC0+c2l6ZSA+PiBTSVNfTU1fQUxJR05fU0hJ RlQpOw0KPiAtDQo+IC0JZGV2X3ByaXYtPmFncF9pbml0aWFsaXplZCA9IDE7DQo+IC0JZGV2 X3ByaXYtPmFncF9vZmZzZXQgPSBhZ3AtPm9mZnNldDsNCj4gLQltdXRleF91bmxvY2soJmRl di0+c3RydWN0X211dGV4KTsNCj4gLQ0KPiAtCURSTV9ERUJVRygib2Zmc2V0ID0gJWx1LCBz aXplID0gJWx1XG4iLCBhZ3AtPm9mZnNldCwgYWdwLT5zaXplKTsNCj4gLQlyZXR1cm4gMDsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzaXNfaW9jdGxfYWdwX2FsbG9jKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsDQo+IC0JCQkgICAgICAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpDQo+IC17DQo+IC0NCj4gLQlyZXR1cm4gc2lzX2RybV9hbGxvYyhk ZXYsIGZpbGVfcHJpdiwgZGF0YSwgQUdQX1RZUEUpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg ZHJtX2xvY2FsX21hcF90ICpzaXNfcmVnX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikN Cj4gLXsNCj4gLQlzdHJ1Y3QgZHJtX21hcF9saXN0ICplbnRyeTsNCj4gLQlkcm1fbG9jYWxf bWFwX3QgKm1hcDsNCj4gLQ0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYt Pm1hcGxpc3QsIGhlYWQpIHsNCj4gLQkJbWFwID0gZW50cnktPm1hcDsNCj4gLQkJaWYgKCFt YXApDQo+IC0JCQljb250aW51ZTsNCj4gLQkJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX1JFR0lT VEVSUykNCj4gLQkJCXJldHVybiBtYXA7DQo+IC0JfQ0KPiAtCXJldHVybiBOVUxMOw0KPiAt fQ0KPiAtDQo+IC1pbnQgc2lzX2lkbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gLXsN Cj4gLQlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOw0K PiAtCXVpbnQzMl90IGlkbGVfcmVnOw0KPiAtCXVuc2lnbmVkIGxvbmcgZW5kOw0KPiAtCWlu dCBpOw0KPiAtDQo+IC0JaWYgKGRldl9wcml2LT5pZGxlX2ZhdWx0KQ0KPiAtCQlyZXR1cm4g MDsNCj4gLQ0KPiAtCWlmIChkZXZfcHJpdi0+bW1pbyA9PSBOVUxMKSB7DQo+IC0JCWRldl9w cml2LT5tbWlvID0gc2lzX3JlZ19pbml0KGRldik7DQo+IC0JCWlmIChkZXZfcHJpdi0+bW1p byA9PSBOVUxMKSB7DQo+IC0JCQlEUk1fRVJST1IoIkNvdWxkIG5vdCBmaW5kIHJlZ2lzdGVy IG1hcC5cbiIpOw0KPiAtCQkJcmV0dXJuIDA7DQo+IC0JCX0NCj4gLQl9DQo+IC0NCj4gLQkv Kg0KPiAtCSAqIEltcGxlbWVudCBhIGRldmljZSBzd2l0Y2ggaGVyZSBpZiBuZWVkZWQNCj4g LQkgKi8NCj4gLQ0KPiAtCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSBTSVNfQ0hJUF8zMTUp DQo+IC0JCXJldHVybiAwOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBUaW1lb3V0IGFmdGVyIDMg c2Vjb25kcy4gV2UgY2Fubm90IHVzZSBEUk1fV0FJVF9PTiBoZXJlDQo+IC0JICogYmVjYXVz ZSBpdHMgcG9sbGluZyBmcmVxdWVuY3kgaXMgdG9vIGxvdy4NCj4gLQkgKi8NCj4gLQ0KPiAt CWVuZCA9IGppZmZpZXMgKyAoSFogKiAzKTsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCA0 OyArK2kpIHsNCj4gLQkJZG8gew0KPiAtCQkJaWRsZV9yZWcgPSBTSVNfUkVBRCgweDg1Y2Mp Ow0KPiAtCQl9IHdoaWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCBlbmQpICYmDQo+IC0J CQkgICgoaWRsZV9yZWcgJiAweDgwMDAwMDAwKSAhPSAweDgwMDAwMDAwKSk7DQo+IC0JfQ0K PiAtDQo+IC0JaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSkgew0KPiAtCQlEUk1f RVJST1IoIkdyYXBoaWNzIGVuZ2luZSBpZGxlIHRpbWVvdXQuICINCj4gLQkJCSAgIkRpc2Fi bGluZyBpZGxlIGNoZWNrXG4iKTsNCj4gLQkJZGV2X3ByaXYtPmlkbGVfZmF1bHQgPSAxOw0K PiAtCX0NCj4gLQ0KPiAtCS8qDQo+IC0JICogVGhlIGNhbGxlciBuZXZlciBzZWVzIGFuIGVy cm9yIGNvZGUuIEl0IGdldHMgdHJhcHBlZA0KPiAtCSAqIGluIGxpYmRybS4NCj4gLQkgKi8N Cj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC0NCj4gLXZvaWQgc2lzX2xhc3Rj bG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCWRybV9zaXNfcHJpdmF0 ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0NCj4gLQlpZiAoIWRldl9w cml2KQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7DQo+IC0JaWYgKGRldl9wcml2LT52cmFtX2luaXRpYWxpemVkKSB7DQo+IC0JCWRy bV9tbV90YWtlZG93bigmZGV2X3ByaXYtPnZyYW1fbW0pOw0KPiAtCQlkZXZfcHJpdi0+dnJh bV9pbml0aWFsaXplZCA9IDA7DQo+IC0JfQ0KPiAtCWlmIChkZXZfcHJpdi0+YWdwX2luaXRp YWxpemVkKSB7DQo+IC0JCWRybV9tbV90YWtlZG93bigmZGV2X3ByaXYtPmFncF9tbSk7DQo+ IC0JCWRldl9wcml2LT5hZ3BfaW5pdGlhbGl6ZWQgPSAwOw0KPiAtCX0NCj4gLQlkZXZfcHJp di0+bW1pbyA9IE5VTEw7DQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 DQo+IC19DQo+IC0NCj4gLXZvaWQgc2lzX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwNCj4gLQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpDQo+IC17 DQo+IC0Jc3RydWN0IHNpc19maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IGZpbGUtPmRyaXZl cl9wcml2Ow0KPiAtCXN0cnVjdCBzaXNfbWVtYmxvY2sgKmVudHJ5LCAqbmV4dDsNCj4gLQ0K PiAtCWlmICghKGRldi0+bWFzdGVyICYmIGZpbGUtPm1hc3Rlci0+bG9jay5od19sb2NrKSkN Cj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JZHJtX2xlZ2FjeV9pZGxlbG9ja190YWtlKCZmaWxl LT5tYXN0ZXItPmxvY2spOw0KPiAtDQo+IC0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0 ZXgpOw0KPiAtCWlmIChsaXN0X2VtcHR5KCZmaWxlX3ByaXYtPm9ial9saXN0KSkgew0KPiAt CQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsNCj4gLQkJZHJtX2xlZ2FjeV9p ZGxlbG9ja19yZWxlYXNlKCZmaWxlLT5tYXN0ZXItPmxvY2spOw0KPiAtDQo+IC0JCXJldHVy bjsNCj4gLQl9DQo+IC0NCj4gLQlzaXNfaWRsZShkZXYpOw0KPiAtDQo+IC0NCj4gLQlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZmaWxlX3ByaXYtPm9ial9saXN0 LA0KPiAtCQkJCSBvd25lcl9saXN0KSB7DQo+IC0JCWxpc3RfZGVsKCZlbnRyeS0+b3duZXJf bGlzdCk7DQo+IC0JCWlmIChkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJmVudHJ5LT5tbV9ub2Rl KSkNCj4gLQkJCWRybV9tbV9yZW1vdmVfbm9kZSgmZW50cnktPm1tX25vZGUpOw0KPiAtI2lm IGRlZmluZWQoQ09ORklHX0ZCX1NJUykgfHwgZGVmaW5lZChDT05GSUdfRkJfU0lTX01PRFVM RSkNCj4gLQkJZWxzZQ0KPiAtCQkJc2lzX2ZyZWUoZW50cnktPnJlcS5vZmZzZXQpOw0KPiAt I2VuZGlmDQo+IC0JCWtmcmVlKGVudHJ5KTsNCj4gLQl9DQo+IC0JbXV0ZXhfdW5sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7DQo+IC0NCj4gLQlkcm1fbGVnYWN5X2lkbGVsb2NrX3JlbGVh c2UoJmZpbGUtPm1hc3Rlci0+bG9jayk7DQo+IC0NCj4gLQlyZXR1cm47DQo+IC19DQo+IC0N Cj4gLWNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBzaXNfaW9jdGxzW10gPSB7DQo+IC0J RFJNX0lPQ1RMX0RFRl9EUlYoU0lTX0ZCX0FMTE9DLCBzaXNfZmJfYWxsb2MsIERSTV9BVVRI KSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihTSVNfRkJfRlJFRSwgc2lzX2RybV9mcmVlLCBE Uk1fQVVUSCksDQo+IC0JRFJNX0lPQ1RMX0RFRl9EUlYoU0lTX0FHUF9JTklULCBzaXNfaW9j dGxfYWdwX2luaXQsIERSTV9BVVRIIHwgRFJNX01BU1RFUiB8IERSTV9ST09UX09OTFkpLA0K PiAtCURSTV9JT0NUTF9ERUZfRFJWKFNJU19BR1BfQUxMT0MsIHNpc19pb2N0bF9hZ3BfYWxs b2MsIERSTV9BVVRIKSwNCj4gLQlEUk1fSU9DVExfREVGX0RSVihTSVNfQUdQX0ZSRUUsIHNp c19kcm1fZnJlZSwgRFJNX0FVVEgpLA0KPiAtCURSTV9JT0NUTF9ERUZfRFJWKFNJU19GQl9J TklULCBzaXNfZmJfaW5pdCwgRFJNX0FVVEggfCBEUk1fTUFTVEVSIHwgRFJNX1JPT1RfT05M WSksDQo+IC19Ow0KPiAtDQo+IC1pbnQgc2lzX21heF9pb2N0bCA9IEFSUkFZX1NJWkUoc2lz X2lvY3Rscyk7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGRmeC9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L01ha2VmaWxlDQo+IGRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwM2I3ZDBmMDg3YjAuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vdGRmeC9NYWtlZmlsZQ0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0x LDggKzAsMCBAQA0KPiAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 DQo+IC0jDQo+IC0jIE1ha2VmaWxlIGZvciB0aGUgZHJtIGRldmljZSBkcml2ZXIuICBUaGlz IGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUNCj4gLSMgRGlyZWN0IFJlbmRlcmlu ZyBJbmZyYXN0cnVjdHVyZSAoRFJJKSBpbiBYRnJlZTg2IDQuMS4wIGFuZCBoaWdoZXIuDQo+ IC0NCj4gLXRkZngteSA6PSB0ZGZ4X2Rydi5vDQo+IC0NCj4gLW9iai0kKENPTkZJR19EUk1f VERGWCkJKz0gdGRmeC5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGRmeC90 ZGZ4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuYw0KPiBkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggNThjMTg1YzI5OWY0Li4wMDAwMDAwMDAwMDAN Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuYw0KPiArKysgL2Rldi9u dWxsDQo+IEBAIC0xLDkwICswLDAgQEANCj4gLS8qIHRkZnhfZHJ2LmMgLS0gdGRmeCBkcml2 ZXIgLSotIGxpbnV4LWMgLSotDQo+IC0gKiBDcmVhdGVkOiBUaHUgT2N0ICA3IDEwOjM4OjMy IDE5OTkgYnkgZmFpdGhAcHJlY2lzaW9uaW5zaWdodC5jb20NCj4gLSAqDQo+IC0gKiBDb3B5 cmlnaHQgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMu DQo+IC0gKiBDb3B5cmlnaHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZh bGUsIENhbGlmb3JuaWEuDQo+IC0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiAtICoNCj4g LSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhDQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAt ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KPiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+IC0g KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUNCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+IC0gKg0KPiAtICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dA0KPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiAtICog U29mdHdhcmUuDQo+IC0gKg0KPiAtICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gLSAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLA0KPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+IC0gKiBQUkVD SVNJT04gSU5TSUdIVCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUg0KPiAtICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+IC0gKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVINCj4gLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gLSAq DQo+IC0gKiBBdXRob3JzOg0KPiAtICogICAgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFp dGhAdmFsaW51eC5jb20+DQo+IC0gKiAgICBEYXJ5bGwgU3RyYXVzcyA8ZGFyeWxsQHZhbGlu dXguY29tPg0KPiAtICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPg0K PiAtICovDQo+IC0NCj4gLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gLSNpbmNsdWRl IDxsaW51eC9wY2kuaD4NCj4gLQ0KPiAtI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+DQo+IC0j aW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5o Pg0KPiAtI2luY2x1ZGUgPGRybS9kcm1fbGVnYWN5Lmg+DQo+IC0jaW5jbHVkZSA8ZHJtL2Ry bV9wY2lpZHMuaD4NCj4gLQ0KPiAtI2luY2x1ZGUgInRkZnhfZHJ2LmgiDQo+IC0NCj4gLXN0 YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsNCj4gLQl0ZGZ4X1BD SV9JRFMNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHRkZnhfZHJpdmVyX2ZvcHMgPSB7DQo+IC0JLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ IC0JLm9wZW4gPSBkcm1fb3BlbiwNCj4gLQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLA0KPiAt CS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwNCj4gLQkubW1hcCA9IGRybV9sZWdhY3lf bW1hcCwNCj4gLQkucG9sbCA9IGRybV9wb2xsLA0KPiAtCS5jb21wYXRfaW9jdGwgPSBkcm1f Y29tcGF0X2lvY3RsLA0KPiAtCS5sbHNlZWsgPSBub29wX2xsc2VlaywNCj4gLX07DQo+IC0N Cj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7DQo+IC0JLmRy aXZlcl9mZWF0dXJlcyA9IERSSVZFUl9MRUdBQ1ksDQo+IC0JLmZvcHMgPSAmdGRmeF9kcml2 ZXJfZm9wcywNCj4gLQkubmFtZSA9IERSSVZFUl9OQU1FLA0KPiAtCS5kZXNjID0gRFJJVkVS X0RFU0MsDQo+IC0JLmRhdGUgPSBEUklWRVJfREFURSwNCj4gLQkubWFqb3IgPSBEUklWRVJf TUFKT1IsDQo+IC0JLm1pbm9yID0gRFJJVkVSX01JTk9SLA0KPiAtCS5wYXRjaGxldmVsID0g RFJJVkVSX1BBVENITEVWRUwsDQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgc3RydWN0IHBjaV9k cml2ZXIgdGRmeF9wY2lfZHJpdmVyID0gew0KPiAtCS5uYW1lID0gRFJJVkVSX05BTUUsDQo+ IC0JLmlkX3RhYmxlID0gcGNpaWRsaXN0LA0KPiAtfTsNCj4gLQ0KPiAtc3RhdGljIGludCBf X2luaXQgdGRmeF9pbml0KHZvaWQpDQo+IC17DQo+IC0JcmV0dXJuIGRybV9sZWdhY3lfcGNp X2luaXQoJmRyaXZlciwgJnRkZnhfcGNpX2RyaXZlcik7DQo+IC19DQo+IC0NCj4gLXN0YXRp YyB2b2lkIF9fZXhpdCB0ZGZ4X2V4aXQodm9pZCkNCj4gLXsNCj4gLQlkcm1fbGVnYWN5X3Bj aV9leGl0KCZkcml2ZXIsICZ0ZGZ4X3BjaV9kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1tb2R1 bGVfaW5pdCh0ZGZ4X2luaXQpOw0KPiAtbW9kdWxlX2V4aXQodGRmeF9leGl0KTsNCj4gLQ0K PiAtTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsNCj4gLU1PRFVMRV9ERVNDUklQVElP TihEUklWRVJfREVTQyk7DQo+IC1NT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFs IHJpZ2h0cyIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmgNCj4gZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDg0MjA0ZWMxYjA0Ni4uMDAwMDAwMDAwMDAwDQo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmgNCj4gKysrIC9kZXYvbnVsbA0K PiBAQCAtMSw0NyArMCwwIEBADQo+IC0vKiB0ZGZ4LmggLS0gM2RmeCBEUk0gdGVtcGxhdGUg Y3VzdG9taXphdGlvbiAtKi0gbGludXgtYyAtKi0NCj4gLSAqIENyZWF0ZWQ6IFdlZCBGZWIg MTQgMTI6MzI6MzIgMjAwMSBieSBnYXJldGhAdmFsaW51eC5jb20NCj4gLSAqLw0KPiAtLyoN Cj4gLSAqIENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFs ZSwgQ2FsaWZvcm5pYS4NCj4gLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+IC0gKg0KPiAt ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGENCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+IC0g KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gLSAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQ0KPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gLSAqDQo+IC0gKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0DQo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+IC0gKiBT b2Z0d2FyZS4NCj4gLSAqDQo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiAtICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksDQo+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4gLSAqIFZBIExJ TlVYIFNZU1RFTVMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1INCj4gLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLA0KPiAtICogQVJJU0lORyBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SDQo+IC0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQo+IC0gKg0K PiAtICogQXV0aG9yczoNCj4gLSAqICAgIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4 LmNvbT4NCj4gLSAqLw0KPiAtDQo+IC0jaWZuZGVmIF9fVERGWF9IX18NCj4gLSNkZWZpbmUg X19UREZYX0hfXw0KPiAtDQo+IC0vKiBHZW5lcmFsIGN1c3RvbWl6YXRpb246DQo+IC0gKi8N Cj4gLQ0KPiAtI2RlZmluZSBEUklWRVJfQVVUSE9SCQkiVkEgTGludXggU3lzdGVtcyBJbmMu Ig0KPiAtDQo+IC0jZGVmaW5lIERSSVZFUl9OQU1FCQkidGRmeCINCj4gLSNkZWZpbmUgRFJJ VkVSX0RFU0MJCSIzZGZ4IEJhbnNoZWUvVm9vZG9vMysiDQo+IC0jZGVmaW5lIERSSVZFUl9E QVRFCQkiMjAwMTAyMTYiDQo+IC0NCj4gLSNkZWZpbmUgRFJJVkVSX01BSk9SCQkxDQo+IC0j ZGVmaW5lIERSSVZFUl9NSU5PUgkJMA0KPiAtI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkw DQo+IC0NCj4gLSNlbmRpZg0KDQotLSANClRob21hcyBaaW1tZXJtYW5uDQpHcmFwaGljcyBE cml2ZXIgRGV2ZWxvcGVyDQpTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgN Ck1heGZlbGRzdHIuIDUsIDkwNDA5IE7DvHJuYmVyZywgR2VybWFueQ0KKEhSQiAzNjgwOSwg QUcgTsO8cm5iZXJnKQ0KR2VzY2jDpGZ0c2bDvGhyZXI6IEl2byBUb3Rldg0K --------------XWGE6nYnMHBNCA1TWcWsBai5-- --------------l0RAmvvdRQNw460QO75xoDu9 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+AFAmOJ9v0FAwAAAAAACgkQlh/E3EQov+AQ +g//SAdteYJVv1kWAjt4aL55nj7ABLt6muVC28dIWjLGkHDqf/t1fEdvw+Jgwd3yS3LervFv+z45 2eEHkmIUNxw3+rQ8Fin+v5ntSSmVBSSKwyr6HNL0Q+S5Sy3IKb3EQVwz5Y2sAHsdU1cGGeBo4Uh3 nK7HsrcmXqyvM1ImtKPiCZBQ7gR/0Bt+XQK5hVwB3n6jL2WsFNwwyjgk0Sj5FzetuI42u8e/wSso /okPYdV7ChkyYKA9HOotXzBslT6A3VsGHhfuoxeBySb5+O5nqAzRcEoZDmV93PdueeOFt7trmd9H 7RH6KLCa7oc6rIVzfytOpMRpIealeLSUr6j/Kv0sgreq22WKRhBuMwKuJrt0Ucq/tEA0Gl9n5DW2 2EZlgeE2DsYqo1TRMuRtvR2lgUn5XNbHbxa6+xTUyFTSDvOIkRhnhioG0/dEp2fZNH3LEVXw3gBQ 11r4s5fQM8va/95EPDel1Qc55uDitKGIFo7+ERMn9dbb1Hy/Y7KmJK0lwvIm8F8JK4UyYb3AwJ9x lLcJ/houlehcq/gP5SHJ+AqVsz1Ll2XKopqCDrpbsRgIOEZ8sfDSOTEKBzMMmCwyUPD6bSfxkOuf tI6hfZ59EaLSJ/w6jZ49uWc3oNX5fyQ6yXcU5FjjvEjnn1lLS9AlzLCt3YfCgIvM6L7gSGXyYCzA 0h8= =jzl9 -----END PGP SIGNATURE----- --------------l0RAmvvdRQNw460QO75xoDu9--