Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp328651rwb; Wed, 9 Nov 2022 03:07:56 -0800 (PST) X-Google-Smtp-Source: AMsMyM6GRSuXgh8leBbDGqYV5zDUrwLNs3MID7Em/B6q97vAdbbhTcy5KOF0ts9+A7TLIrh0raOv X-Received: by 2002:a17:902:e891:b0:186:c544:8b1e with SMTP id w17-20020a170902e89100b00186c5448b1emr59387106plg.163.1667992076279; Wed, 09 Nov 2022 03:07:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1667992076; cv=none; d=google.com; s=arc-20160816; b=gW4tuWVztec+nwuo5r0NRTO3aZuMCU5lNf8GrcHvA3290X2/+r4w7b7ly7GHTTfpDI bnODzSXWVHPv+xyRA/Siboey2l+K8JK1mOpK3ih22YE0XSQykLoCNBDhCaMGQU/Au/+d NlC3kzbiIgyqdIk8VHNl/wSz4/MlkznyQQ2RpEOqoEiNBiV123fvV0h6CvkJFZD5ORts grBoa4KUPUBXWJbvbMo0/madI1U4XFNA17VmcCTWUyahL4guziouogkRaM39891swvMh 4xSD5JEVgO33M1ETry4dSrHVu7MSMetKOtNb0BmNSg7NbjlfW5giPRL89eR5n1BBB8nO UG5w== 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:content-language:references:cc :to:subject:user-agent:mime-version:date:message-id:dkim-signature :dkim-signature; bh=WSnagpK+wPrtDZ9eCsQu1iG67aaayABI/hgBgK5cCQI=; b=EvjPzaX95B/4kAD/dxEKQaN+C1k7EEsx3XuCN8kOJJ1WSZ//iWgvYsLniJogiBZVuk Spw4zO2l8ZIOBDOLqT/xwsQ2fj2VJ+IpDJXyczO8l7z/orNjei0kBlfAm+eBv+kxSi+n qIfvqOixo5cMIVFDin4bl29FT1RTIdmnWzjNrs5L8IlhSos9AcEE8pj16etdB9RHBmYD 59XxlPqmPSkjvhr7wl+OEOAw0QFUbZqBfgC7WVSqqxIGUv+GFmkEMQkaQosgcWMTU7tO 3JLXTzznWOJ5qkt5wGcXTU8S9yoaCsA6PrpZ8+/eQsNCxggv6e2QUbI6tLCpl2NC8FzT ZrQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=XnNIV4m8; 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 n2-20020a170902d2c200b0017a0e8713cesi20078792plc.452.2022.11.09.03.07.44; Wed, 09 Nov 2022 03:07:56 -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=XnNIV4m8; 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 S230493AbiKIK2n (ORCPT + 93 others); Wed, 9 Nov 2022 05:28:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49542 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230490AbiKIK2j (ORCPT ); Wed, 9 Nov 2022 05:28:39 -0500 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19A9A13D09 for ; Wed, 9 Nov 2022 02:28:37 -0800 (PST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id B06521F6E6; Wed, 9 Nov 2022 10:28:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1667989715; 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=WSnagpK+wPrtDZ9eCsQu1iG67aaayABI/hgBgK5cCQI=; b=XnNIV4m8RUSZp6KesV2kCT5YbANDGVDBnGUEmZ8ce9UngfVpP2Wt49Gnp7cWwHBBuHIX1O 0b3klkVeh7bIhu3mu8y2UrxZ2ZX+J+16j2JCCPDAr6k7OmH6CnI5dG1U5UJtXD6rhC2vv0 0IRALiaj9u6d+KcitWJmKOo1n+4bvSI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1667989715; 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=WSnagpK+wPrtDZ9eCsQu1iG67aaayABI/hgBgK5cCQI=; b=Mq6gUNlL9RFRucDRLvVYM/FpqJpu/A2SSrrRh1QqFKc5DltSSqQdROfh58h64gmSAFsBxN FKppdNyouOfd7WBA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 24338139F1; Wed, 9 Nov 2022 10:28:35 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id F7cCCNOAa2PaFwAAMHmgww (envelope-from ); Wed, 09 Nov 2022 10:28:35 +0000 Message-ID: <077ad468-335e-c3cd-2f18-557d3ecc3bf4@suse.de> Date: Wed, 9 Nov 2022 11:28:34 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Subject: Re: [PATCH v8 4/7] drm/shmem-helper: Add memory shrinker To: Dmitry Osipenko , David Airlie , Gerd Hoffmann , Gurchetan Singh , Chia-I Wu , Daniel Vetter , Daniel Almeida , Gustavo Padovan , Daniel Stone , Tomeu Vizoso , Maarten Lankhorst , Maxime Ripard , Rob Clark , Sumit Semwal , =?UTF-8?Q?Christian_K=c3=b6nig?= , Qiang Yu , Steven Price , Alyssa Rosenzweig , Rob Herring , Sean Paul , Dmitry Baryshkov , Abhinav Kumar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dmitry Osipenko , kernel@collabora.com, virtualization@lists.linux-foundation.org References: <20221105232719.302619-1-dmitry.osipenko@collabora.com> <20221105232719.302619-5-dmitry.osipenko@collabora.com> Content-Language: en-US From: Thomas Zimmermann In-Reply-To: <20221105232719.302619-5-dmitry.osipenko@collabora.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------hPhc0auro2uvJTka9m73IWMt" X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------hPhc0auro2uvJTka9m73IWMt Content-Type: multipart/mixed; boundary="------------EVg990PtOsCqudNIka0fyyzi"; protected-headers="v1" From: Thomas Zimmermann To: Dmitry Osipenko , David Airlie , Gerd Hoffmann , Gurchetan Singh , Chia-I Wu , Daniel Vetter , Daniel Almeida , Gustavo Padovan , Daniel Stone , Tomeu Vizoso , Maarten Lankhorst , Maxime Ripard , Rob Clark , Sumit Semwal , =?UTF-8?Q?Christian_K=c3=b6nig?= , Qiang Yu , Steven Price , Alyssa Rosenzweig , Rob Herring , Sean Paul , Dmitry Baryshkov , Abhinav Kumar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Dmitry Osipenko , kernel@collabora.com, virtualization@lists.linux-foundation.org Message-ID: <077ad468-335e-c3cd-2f18-557d3ecc3bf4@suse.de> Subject: Re: [PATCH v8 4/7] drm/shmem-helper: Add memory shrinker References: <20221105232719.302619-1-dmitry.osipenko@collabora.com> <20221105232719.302619-5-dmitry.osipenko@collabora.com> In-Reply-To: <20221105232719.302619-5-dmitry.osipenko@collabora.com> --------------EVg990PtOsCqudNIka0fyyzi Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMDYuMTEuMjIgdW0gMDA6Mjcgc2NocmllYiBEbWl0cnkgT3NpcGVua286DQo+ IEludHJvZHVjZSBjb21tb24gZHJtLXNobWVtIHNocmlua2VyIGZvciBEUk0gZHJpdmVycy4N Cj4gDQo+IFRvIHN0YXJ0IHVzaW5nIGRybS1zaG1lbSBzaHJpbmtlciBkcml2ZXJzIHNob3Vs ZCBkbyB0aGUgZm9sbG93aW5nOg0KPiANCj4gMS4gSW1wbGVtZW50IGV2aWN0KCkgY2FsbGJh Y2sgb2Ygc2htZW0gb2JqZWN0IHdoZXJlIGRyaXZlciBzaG91bGQgY2hlY2sNCj4gICAgIHdo ZXRoZXIgb2JqZWN0IGlzIHB1cmdlYWJsZSBvciBldmljdGFibGUgYW5kIHBlcmZvcm0gc2hy aW5raW5nIGFjdGlvbg0KPiAyLiBSZWdpc3RlciBzaHJpbmtlciB1c2luZyBkcm1fZ2VtX3No bWVtX3Nocmlua2VyX3JlZ2lzdGVyKGRybV9kZXZpY2UpDQoNCkkndmUgbG9uZyB3YW50ZWQg dG8gYWRkIGFuIGluaXQgY2FsbCBmb3IgR0VNIFNITUVNIGhlbHBlcnM7IG1vc3RseSBmb3Ig DQpzaHJpbmtpbmcuIFNvIHRoaXMgY291bGQgYmUgY2FsbGVkIGRybW1fZ2VtX3NobWVtX2lu aXQoKSBhbmQgZG8gYWxsIA0Ka2luZHMgb2YgaW5pdGlhbGl6YXRpb24uIENsZWFudXAgc2hv dWxkIGJlIG1hbmFnZWQuIEl0IGNhbiBzdGlsbCBiZSANCm9wdGlvbmFsLCBzbyB5b3UgZG9u J3QgaGF2ZSB0byBnbyB0aHJvdWdoIGFsbCB0aGUgU0hNRU0gZHJpdmVycy4NCg0KSXQgc2hv dWxkIGFsc28gdGFrZSB0aGUgc29tZXRoaW5nIGxpa2UNCg0Kc3RydWN0IGRybV9nZW1fc2ht ZW1fZnVuY3Mgew0KICAgZXZpY3QoKQ0KfTsNCg0KdGhhdCBjb250YWlucyB0aGUgZXZpY3Qg Y2FsbGJhY2ssIGFzIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gaGF2aW5nIGEgDQpwZXItb2JqZWN0 IGV2aWN0IGNhbGxiYWNrLiBUaGUgc3RydWN0IGNhbiB0aGVuIGJlIGRlY2xhcmVkIHN0YXRp YyBjb25zdCANCndpdGhpbiB0aGUgZHJpdmVyLg0KDQpBbHRlcm5hdGl2ZWx5LCBhbmQgdGhh dCBtaWdodCBiZSBwcmVmZXJhYmxlIGluIHRoZSBsb25nIHRlcm0sIHRoZSBldmljdCANCmhv b2sgY291bGQgZ28gaW50byBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MgYW5kIHdlIGNv dWxkIGNvbnZlcmdlIHRoZSANCnZhcmlvdXMgbWVtb3J5IG1hbmFnZXJzIG9udG8gdGhlIGlu dGVyZmFjZS4NCg0KPiAzLiBVc2UgZHJtX2dlbV9zaG1lbV9zZXRfcHVyZ2VhYmxlKHNobWVt KSBhbmQgYWxpa2UgQVBJIGZ1bmN0aW9ucyB0bw0KPiAgICAgYWN0aXZhdGUgc2hyaW5raW5n IG9mIHNobWVtIEdFTXMNCg0KVGhlIHNocmlua2luZyBjb2RlIHdpbGwgYWxsb3cgdXMgdG8g YXZpb2QgY2hhbmdlcyB0byB0aGUgcGFnZSB0YWJsZXMgDQpkdXJpbmcgdnVubWFwLiBUaGF0 IGlzIGltcG9ydGFudCBmb3IgbWFueSBkcml2ZXIncyBwZXJmb3JtYW5jZS4gU28gdGhlIA0K bG9uZy10ZXJtIGdvYWwgc2hvdWxkIGJlIHRvIGFjdGl2ZSBhbGwgdGhpcyBhdXRvbWF0aWNh bGx5IGFuZCBmaWx0ZXIgb3V0IA0KdGhlIGNhc2VzIHdoZXJlIGV2aWN0aW9uL3B1cmdpbmcg aXMgbm90IHdhbnRlZC4NCg0KPiANCj4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIEFsbWVpZGEg PGRhbmllbC5hbG1laWRhQGNvbGxhYm9yYS5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IERtaXRy eSBPc2lwZW5rbyA8ZG1pdHJ5Lm9zaXBlbmtvQGNvbGxhYm9yYS5jb20+DQo+IC0tLQ0KPiAg IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jICAgICAgICB8IDQ5MyAr KysrKysrKysrKysrKysrLS0NCj4gICAuLi4vZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9n ZW1fc2hyaW5rZXIuYyAgfCAgIDkgKy0NCj4gICBpbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgg ICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKw0KPiAgIGluY2x1ZGUvZHJtL2RybV9nZW1f c2htZW1faGVscGVyLmggICAgICAgICAgICB8ICA4NyArKystDQo+ICAgNCBmaWxlcyBjaGFu Z2VkLCA1MzkgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYw0KPiBpbmRleCBkNmU2MmYyMjg5ODku LmIwOWQ2MjBkMTRmZCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f c2htZW1faGVscGVyLmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1f aGVscGVyLmMNCj4gQEAgLTEyNiw2ICsxMjYsNTQgQEAgc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpkcm1fZ2VtX3NobWVtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz aXplX3QNCj4gICB9DQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9jcmVh dGUpOw0KPiAgIA0KPiArc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV9yZXN2X2Fzc2VydF9o ZWxkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJLyoN Cj4gKwkgKiBEZXN0cm95aW5nIHRoZSBvYmplY3QgaXMgYSBzcGVjaWFsIGNhc2UuLiBkcm1f Z2VtX3NobWVtX2ZyZWUoKQ0KPiArCSAqIGNhbGxzIG1hbnkgdGhpbmdzIHRoYXQgV0FSTl9P TiBpZiB0aGUgb2JqIGxvY2sgaXMgbm90IGhlbGQuICBCdXQNCj4gKwkgKiBhY3F1aXJpbmcg dGhlIG9iaiBsb2NrIGluIGRybV9nZW1fc2htZW1fZnJlZSgpIGNhbiBjYXVzZSBhIGxvY2tp bmcNCj4gKwkgKiBvcmRlciBpbnZlcnNpb24gYmV0d2VlbiByZXNlcnZhdGlvbl93d19jbGFz c19tdXRleCBhbmQgZnNfcmVjbGFpbS4NCj4gKwkgKg0KPiArCSAqIFRoaXMgZGVhZGxvY2sg aXMgbm90IGFjdHVhbGx5IHBvc3NpYmxlLCBiZWNhdXNlIG5vIG9uZSBzaG91bGQNCj4gKwkg KiBiZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGxvY2sgd2hlbiBtc21fZ2VtX2ZyZWVfb2JqZWN0 KCkgaXMgY2FsbGVkLg0KPiArCSAqIFVuZm9ydHVuYXRlbHkgbG9ja2RlcCBpcyBub3QgYXdh cmUgb2YgdGhpcyBkZXRhaWwuICBTbyB3aGVuIHRoZQ0KPiArCSAqIHJlZmNvdW50IGRyb3Bz IHRvIHplcm8sIHdlIHByZXRlbmQgaXQgaXMgYWxyZWFkeSBsb2NrZWQuDQo+ICsJICovDQo+ ICsJaWYgKGtyZWZfcmVhZCgmc2htZW0tPmJhc2UucmVmY291bnQpKQ0KPiArCQlkbWFfcmVz dl9hc3NlcnRfaGVsZChzaG1lbS0+YmFzZS5yZXN2KTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGJvb2wgZHJtX2dlbV9zaG1lbV9pc19ldmljdGFibGUoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkNCj4gK3sNCj4gKwlyZXR1cm4gKHNobWVtLT5tYWR2ID49IDApICYm IHNobWVtLT5ldmljdCAmJg0KPiArCQlzaG1lbS0+ZXZpY3Rpb25fZW5hYmxlZCAmJiBzaG1l bS0+cGFnZXNfdXNlX2NvdW50ICYmDQo+ICsJCSFzaG1lbS0+cGFnZXNfcGluX2NvdW50ICYm ICFzaG1lbS0+YmFzZS5kbWFfYnVmICYmDQo+ICsJCSFzaG1lbS0+YmFzZS5pbXBvcnRfYXR0 YWNoICYmIHNobWVtLT5zZ3QgJiYgIXNobWVtLT5ldmljdGVkOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZA0KPiArZHJtX2dlbV9zaG1lbV91cGRhdGVfcGFnZXNfc3RhdGUoc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsNCj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1l bV9zaHJpbmtlciAqZ2VtX3Nocmlua2VyID0gb2JqLT5kZXYtPnNobWVtX3Nocmlua2VyOw0K PiArDQo+ICsJZHJtX2dlbV9zaG1lbV9yZXN2X2Fzc2VydF9oZWxkKHNobWVtKTsNCj4gKw0K PiArCWlmICghZ2VtX3Nocmlua2VyIHx8IG9iai0+aW1wb3J0X2F0dGFjaCkNCj4gKwkJcmV0 dXJuOw0KPiArDQo+ICsJaWYgKGRybV9nZW1fc2htZW1faXNfZXZpY3RhYmxlKHNobWVtKSB8 fCBkcm1fZ2VtX3NobWVtX2lzX3B1cmdlYWJsZShzaG1lbSkpDQo+ICsJCWRybV9nZW1fbHJ1 X21vdmVfdGFpbCgmZ2VtX3Nocmlua2VyLT5scnVfZXZpY3RhYmxlLCAmc2htZW0tPmJhc2Up Ow0KPiArCWVsc2UgaWYgKHNobWVtLT5tYWR2IDwgMCkNCj4gKwkJZHJtX2dlbV9scnVfcmVt b3ZlKCZzaG1lbS0+YmFzZSk7DQo+ICsJZWxzZSBpZiAoc2htZW0tPmV2aWN0ZWQpDQo+ICsJ CWRybV9nZW1fbHJ1X21vdmVfdGFpbCgmZ2VtX3Nocmlua2VyLT5scnVfZXZpY3RlZCwgJnNo bWVtLT5iYXNlKTsNCj4gKwllbHNlIGlmICghc2htZW0tPnBhZ2VzKQ0KPiArCQlkcm1fZ2Vt X2xydV9yZW1vdmUoJnNobWVtLT5iYXNlKTsNCj4gKwllbHNlDQo+ICsJCWRybV9nZW1fbHJ1 X21vdmVfdGFpbCgmZ2VtX3Nocmlua2VyLT5scnVfcGlubmVkLCAmc2htZW0tPmJhc2UpOw0K PiArfQ0KPiArDQo+ICAgLyoqDQo+ICAgICogZHJtX2dlbV9zaG1lbV9mcmVlIC0gRnJlZSBy ZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgc2htZW0gR0VNIG9iamVjdA0KPiAgICAqIEBz aG1lbTogc2htZW0gR0VNIG9iamVjdCB0byBmcmVlDQo+IEBAIC0xNDAsNyArMTg4LDggQEAg dm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkNCj4gICAJaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgew0KPiAgIAkJZHJtX3ByaW1l X2dlbV9kZXN0cm95KG9iaiwgc2htZW0tPnNndCk7DQo+ICAgCX0gZWxzZSB7DQo+IC0JCWRt YV9yZXN2X2xvY2soc2htZW0tPmJhc2UucmVzdiwgTlVMTCk7DQo+ICsJCS8qIHRha2Ugb3V0 IHNobWVtIEdFTSBvYmplY3QgZnJvbSB0aGUgbWVtb3J5IHNocmlua2VyICovDQo+ICsJCWRy bV9nZW1fc2htZW1fbWFkdmlzZShzaG1lbSwgLTEpOw0KPiAgIA0KPiAgIAkJV0FSTl9PTihz aG1lbS0+dm1hcF91c2VfY291bnQpOw0KPiAgIA0KPiBAQCAtMTUwLDEyICsxOTksMTAgQEAg dm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkNCj4gICAJCQlzZ19mcmVlX3RhYmxlKHNobWVtLT5zZ3QpOw0KPiAgIAkJCWtmcmVl KHNobWVtLT5zZ3QpOw0KPiAgIAkJfQ0KPiAtCQlpZiAoc2htZW0tPnBhZ2VzKQ0KPiArCQlp ZiAoc2htZW0tPnBhZ2VzX3VzZV9jb3VudCkNCj4gICAJCQlkcm1fZ2VtX3NobWVtX3B1dF9w YWdlcyhzaG1lbSk7DQo+ICAgDQo+ICAgCQlXQVJOX09OKHNobWVtLT5wYWdlc191c2VfY291 bnQpOw0KPiAtDQo+IC0JCWRtYV9yZXN2X3VubG9jayhzaG1lbS0+YmFzZS5yZXN2KTsNCj4g ICAJfQ0KPiAgIA0KPiAgIAlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7DQo+IEBAIC0x NjMsMTggKzIxMCw4NiBAQCB2b2lkIGRybV9nZW1fc2htZW1fZnJlZShzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiAgIH0NCj4gICBFWFBPUlRfU1lNQk9MX0dQTChk cm1fZ2VtX3NobWVtX2ZyZWUpOw0KPiAgIA0KPiAtc3RhdGljIGludCBkcm1fZ2VtX3NobWVt X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiArLyoq DQo+ICsgKiBkcm1fZ2VtX3NobWVtX3NldF9ldmljdGFibGUoKSAtIE1ha2UgR0VNIGV2aWN0 YWJsZSBieSBtZW1vcnkgc2hyaW5rZXINCj4gKyAqIEBzaG1lbTogc2htZW0gR0VNIG9iamVj dA0KPiArICoNCj4gKyAqIFRlbGwgbWVtb3J5IHNocmlua2VyIHRoYXQgdGhpcyBHRU0gY2Fu IGJlIGV2aWN0ZWQuIEluaXRpYWxseSBldmljdGlvbiBpcw0KPiArICogZGlzYWJsZWQgZm9y IGFsbCBHRU1zLiBJZiBHRU0gd2FzIHB1cmdlZCwgdGhlbiAtRU5PTUVNIGlzIHJldHVybmVk Lg0KPiArICoNCj4gKyAqIFJldHVybnM6DQo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ICsgKi8NCj4gK2ludCBkcm1fZ2VtX3No bWVtX3NldF9ldmljdGFibGUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkN Cj4gK3sNCj4gKwlkbWFfcmVzdl9sb2NrKHNobWVtLT5iYXNlLnJlc3YsIE5VTEwpOw0KPiAr DQo+ICsJaWYgKHNobWVtLT5tYWR2IDwgMCkgew0KPiArCQlkbWFfcmVzdl91bmxvY2soc2ht ZW0tPmJhc2UucmVzdik7DQo+ICsJCXJldHVybiAtRU5PTUVNOw0KDQpFTk9NRU0gaXMgbm90 IHJpZ2h0IGhlcmUuIEl0J3MgZm9yIGZhaWxlZCBtZW1vcnkgYWxsb2NhdGlvbi4gRU5PREVW IA0Kc2VlbXMgbW9yZSBhcHByb3ByaWF0ZS4NCg0KQnV0IHdoeSBkbyB3ZSBuZWVkIGFuIGVy cm9yIGhlcmUgYW55d2F5PyBXaHkgbm90IGp1c3QgZmFpbCB0cmFuc3BhcmVudGx5Pw0KDQo+ ICsJfQ0KPiArDQo+ICsJc2htZW0tPmV2aWN0aW9uX2VuYWJsZWQgPSB0cnVlOw0KPiArDQo+ ICsJZG1hX3Jlc3ZfdW5sb2NrKHNobWVtLT5iYXNlLnJlc3YpOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3NldF9ldmlj dGFibGUpOw0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9nZW1fc2htZW1fc2V0X3B1cmdlYWJs ZSgpIC0gTWFrZSBHRU0gcHVyZ2VhYmxlIGJ5IG1lbW9yeSBzaHJpbmtlcg0KPiArICogQHNo bWVtOiBzaG1lbSBHRU0gb2JqZWN0DQo+ICsgKg0KPiArICogVGVsbCBtZW1vcnkgc2hyaW5r ZXIgdGhhdCB0aGlzIEdFTSBjYW4gYmUgcHVyZ2VkLiBJbml0aWFsbHkgcHVyZ2luZyBpcw0K PiArICogZGlzYWJsZWQgZm9yIGFsbCBHRU1zLiBJZiBHRU0gd2FzIHB1cmdlZCwgdGhlbiAt RU5PTUVNIGlzIHJldHVybmVkLg0KPiArICoNCj4gKyAqIFJldHVybnM6DQo+ICsgKiAwIG9u IHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ICsgKi8N Cj4gK2ludCBkcm1fZ2VtX3NobWVtX3NldF9wdXJnZWFibGUoc3RydWN0IGRybV9nZW1fc2ht ZW1fb2JqZWN0ICpzaG1lbSkNCj4gK3sNCj4gKwlkbWFfcmVzdl9sb2NrKHNobWVtLT5iYXNl LnJlc3YsIE5VTEwpOw0KPiArDQo+ICsJaWYgKHNobWVtLT5tYWR2IDwgMCkgew0KPiArCQlk bWFfcmVzdl91bmxvY2soc2htZW0tPmJhc2UucmVzdik7DQo+ICsJCXJldHVybiAtRU5PTUVN Ow0KDQpTYW1lIGFzIGFib3ZlLg0KDQo+ICsJfQ0KPiArDQo+ICsJc2htZW0tPnB1cmdlX2Vu YWJsZWQgPSB0cnVlOw0KPiArDQo+ICsJZHJtX2dlbV9zaG1lbV91cGRhdGVfcGFnZXNfc3Rh dGUoc2htZW0pOw0KPiArDQo+ICsJZG1hX3Jlc3ZfdW5sb2NrKHNobWVtLT5iYXNlLnJlc3Yp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1f Z2VtX3NobWVtX3NldF9wdXJnZWFibGUpOw0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtkcm1f Z2VtX3NobWVtX2FjcXVpcmVfcGFnZXMoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkNCj4gICB7DQo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVt LT5iYXNlOw0KPiAgIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOw0KPiAgIA0KPiAtCWlmIChzaG1l bS0+cGFnZXNfdXNlX2NvdW50KysgPiAwKQ0KPiArCWRtYV9yZXN2X2Fzc2VydF9oZWxkKHNo bWVtLT5iYXNlLnJlc3YpOw0KPiArDQo+ICsJaWYgKHNobWVtLT5tYWR2IDwgMCkgew0KPiAr CQlXQVJOX09OKHNobWVtLT5wYWdlcyk7DQoNCmRybV9XQVJOX09OKCksIGhlcmUgYW5kIGV2 ZXJ5d2hlcmUgZWxzZS4gVGhlIGZpbGUgaXMgZG9lc24ndCB1c2UgdGhlIG5ldyANCmRybSBs b2dnaW5nIG11Y2gsIGJ1dCBpdCdzIHRpbWUgdG8gc3dpdGNoLg0KDQo+ICsJCXJldHVybiAt RU5PTUVNOw0KPiArCX0NCj4gKw0KPiArCWlmIChzaG1lbS0+cGFnZXMpIHsNCj4gKwkJV0FS Tl9PTighc2htZW0tPmV2aWN0ZWQpOw0KPiAgIAkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ ICsJaWYgKFdBUk5fT04oIXNobWVtLT5wYWdlc191c2VfY291bnQpKQ0KPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gICANCj4gICAJcGFnZXMgPSBkcm1fZ2VtX2dldF9wYWdlcyhvYmopOw0K PiAgIAlpZiAoSVNfRVJSKHBhZ2VzKSkgew0KPiAgIAkJRFJNX0RFQlVHX0tNUygiRmFpbGVk IHRvIGdldCBwYWdlcyAoJWxkKVxuIiwgUFRSX0VSUihwYWdlcykpOw0KDQpkcm1fZGJnX2tt cygpIGhlcmUgYW5kIGV2ZXJ5d2hlcmUgZWxzZS4NCg0KPiAtCQlzaG1lbS0+cGFnZXNfdXNl X2NvdW50ID0gMDsNCj4gICAJCXJldHVybiBQVFJfRVJSKHBhZ2VzKTsNCj4gICAJfQ0KPiAg IA0KPiBAQCAtMTkzLDIzICszMDgsNDYgQEAgc3RhdGljIGludCBkcm1fZ2VtX3NobWVtX2dl dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiAgIAlyZXR1 cm4gMDsNCj4gICB9DQo+ICAgDQo+IC0vKg0KPiAtICogZHJtX2dlbV9zaG1lbV9wdXRfcGFn ZXMgLSBEZWNyZWFzZSB1c2UgY291bnQgb24gdGhlIGJhY2tpbmcgcGFnZXMgZm9yIGEgc2ht ZW0gR0VNIG9iamVjdA0KPiAtICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0DQo+IC0gKg0K PiAtICogVGhpcyBmdW5jdGlvbiBkZWNyZWFzZXMgdGhlIHVzZSBjb3VudCBhbmQgcHV0cyB0 aGUgYmFja2luZyBwYWdlcyB3aGVuIHVzZSBkcm9wcyB0byB6ZXJvLg0KPiAtICovDQo+IC12 b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVj dCAqc2htZW0pDQo+ICtzdGF0aWMgaW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHN0cnVj dCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgew0KPiAtCXN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOw0KPiArCWludCBlcnI7DQo+ICAgDQo+ ICAgCWRtYV9yZXN2X2Fzc2VydF9oZWxkKHNobWVtLT5iYXNlLnJlc3YpOw0KPiAgIA0KPiAt CWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlc191c2VfY291bnQpKQ0KPiAtCQlyZXR1 cm47DQo+ICsJaWYgKHNobWVtLT5tYWR2IDwgMCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ ICAgDQo+IC0JaWYgKC0tc2htZW0tPnBhZ2VzX3VzZV9jb3VudCA+IDApDQo+ICsJaWYgKHNo bWVtLT5wYWdlc191c2VfY291bnQrKyA+IDApIHsNCj4gKwkJZXJyID0gZHJtX2dlbV9zaG1l bV9zd2FwX2luKHNobWVtKTsNCj4gKwkJaWYgKGVycikNCj4gKwkJCWdvdG8gZXJyX3plcm9f dXNlOw0KPiArDQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCWVyciA9IGRybV9n ZW1fc2htZW1fYWNxdWlyZV9wYWdlcyhzaG1lbSk7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290 byBlcnJfemVyb191c2U7DQo+ICsNCj4gKwlkcm1fZ2VtX3NobWVtX3VwZGF0ZV9wYWdlc19z dGF0ZShzaG1lbSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArZXJyX3plcm9fdXNl Og0KPiArCXNobWVtLT5wYWdlc191c2VfY291bnQgPSAwOw0KPiArDQo+ICsJcmV0dXJuIGVy cjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2RybV9nZW1fc2htZW1fcmVsZWFz ZV9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiArew0KPiAr CXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOw0KPiArDQo+ICsJ aWYgKCFzaG1lbS0+cGFnZXMpIHsNCj4gKwkJV0FSTl9PTighc2htZW0tPmV2aWN0ZWQgJiYg c2htZW0tPm1hZHYgPj0gMCk7DQo+ICAgCQlyZXR1cm47DQo+ICsJfQ0KPiAgIA0KPiAgICNp ZmRlZiBDT05GSUdfWDg2DQo+ICAgCWlmIChzaG1lbS0+bWFwX3djKQ0KPiBAQCAtMjIxLDYg KzM1OSwyNyBAQCB2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgCQkJICBzaG1lbS0+cGFnZXNfbWFya19hY2Nl c3NlZF9vbl9wdXQpOw0KPiAgIAlzaG1lbS0+cGFnZXMgPSBOVUxMOw0KPiAgIH0NCj4gKw0K PiArLyoNCj4gKyAqIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzIC0gRGVjcmVhc2UgdXNlIGNv dW50IG9uIHRoZSBiYWNraW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QNCj4gKyAq IEBzaG1lbTogc2htZW0gR0VNIG9iamVjdA0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24g ZGVjcmVhc2VzIHRoZSB1c2UgY291bnQgYW5kIHB1dHMgdGhlIGJhY2tpbmcgcGFnZXMgd2hl biB1c2UgZHJvcHMgdG8gemVyby4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZ2VtX3NobWVtX3B1 dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiArew0KPiAr CWRybV9nZW1fc2htZW1fcmVzdl9hc3NlcnRfaGVsZChzaG1lbSk7DQo+ICsNCj4gKwlpZiAo V0FSTl9PTl9PTkNFKCFzaG1lbS0+cGFnZXNfdXNlX2NvdW50KSkNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJaWYgKC0tc2htZW0tPnBhZ2VzX3VzZV9jb3VudCA+IDApDQo+ICsJCXJldHVy bjsNCj4gKw0KPiArCWRybV9nZW1fc2htZW1fcmVsZWFzZV9wYWdlcyhzaG1lbSk7DQo+ICsN Cj4gKwlkcm1fZ2VtX3NobWVtX3VwZGF0ZV9wYWdlc19zdGF0ZShzaG1lbSk7DQo+ICt9DQo+ ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyk7DQo+ICAgDQo+ICAg LyoqDQo+IEBAIC0yMzUsMTEgKzM5NCwxNyBAQCBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2ht ZW1fcHV0X3BhZ2VzKTsNCj4gICAgKi8NCj4gICBpbnQgZHJtX2dlbV9zaG1lbV9waW4oc3Ry dWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4gICB7DQo+ICsJaW50IHJldDsN Cj4gKw0KPiAgIAlkbWFfcmVzdl9hc3NlcnRfaGVsZChzaG1lbS0+YmFzZS5yZXN2KTsNCj4g ICANCj4gICAJV0FSTl9PTihzaG1lbS0+YmFzZS5pbXBvcnRfYXR0YWNoKTsNCj4gICANCj4g LQlyZXR1cm4gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOw0KPiArCXJldCA9IGRy bV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVtKTsNCj4gKwlpZiAoIXJldCkNCj4gKwkJc2ht ZW0tPnBhZ2VzX3Bpbl9jb3VudCsrOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gICB9DQo+ ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3Bpbik7DQo+ICAgDQo+IEBAIC0yNTcs NiArNDIyLDggQEAgdm9pZCBkcm1fZ2VtX3NobWVtX3VucGluKHN0cnVjdCBkcm1fZ2VtX3No bWVtX29iamVjdCAqc2htZW0pDQo+ICAgCVdBUk5fT04oc2htZW0tPmJhc2UuaW1wb3J0X2F0 dGFjaCk7DQo+ICAgDQo+ICAgCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsNCj4g Kw0KPiArCXNobWVtLT5wYWdlc19waW5fY291bnQtLTsNCj4gICB9DQo+ICAgRVhQT1JUX1NZ TUJPTChkcm1fZ2VtX3NobWVtX3VucGluKTsNCj4gICANCj4gQEAgLTI5OSw3ICs0NjYsNyBA QCBpbnQgZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAq c2htZW0sDQo+ICAgCQkJcmV0dXJuIDA7DQo+ICAgCQl9DQo+ICAgDQo+IC0JCXJldCA9IGRy bV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVtKTsNCj4gKwkJcmV0ID0gZHJtX2dlbV9zaG1l bV9waW4oc2htZW0pOw0KPiAgIAkJaWYgKHJldCkNCj4gICAJCQlnb3RvIGVycl96ZXJvX3Vz ZTsNCj4gICANCj4gQEAgLTMyMiw3ICs0ODksNyBAQCBpbnQgZHJtX2dlbV9zaG1lbV92bWFw KHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0sDQo+ICAgDQo+ICAgZXJyX3B1 dF9wYWdlczoNCj4gICAJaWYgKCFvYmotPmltcG9ydF9hdHRhY2gpDQo+IC0JCWRybV9nZW1f c2htZW1fcHV0X3BhZ2VzKHNobWVtKTsNCj4gKwkJZHJtX2dlbV9zaG1lbV91bnBpbihzaG1l bSk7DQo+ICAgZXJyX3plcm9fdXNlOg0KPiAgIAlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAw Ow0KPiAgIA0KPiBAQCAtMzU5LDcgKzUyNiw3IEBAIHZvaWQgZHJtX2dlbV9zaG1lbV92dW5t YXAoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSwNCj4gICAJCQlyZXR1cm47 DQo+ICAgDQo+ICAgCQl2dW5tYXAoc2htZW0tPnZhZGRyKTsNCj4gLQkJZHJtX2dlbV9zaG1l bV9wdXRfcGFnZXMoc2htZW0pOw0KPiArCQlkcm1fZ2VtX3NobWVtX3VucGluKHNobWVtKTsN Cj4gICAJfQ0KPiAgIA0KPiAgIAlzaG1lbS0+dmFkZHIgPSBOVUxMOw0KPiBAQCAtMzk2LDQ4 ICs1NjMsODQgQEAgZHJtX2dlbV9zaG1lbV9jcmVhdGVfd2l0aF9oYW5kbGUoc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsDQo+ICAgICovDQo+ICAgaW50IGRybV9nZW1fc2htZW1fbWFk dmlzZShzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBpbnQgbWFkdikNCj4g ICB7DQo+IC0JZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoc2htZW0tPmJhc2UucmVzdik7DQo+ICsJ ZHJtX2dlbV9zaG1lbV9yZXN2X2Fzc2VydF9oZWxkKHNobWVtKTsNCj4gICANCj4gICAJaWYg KHNobWVtLT5tYWR2ID49IDApDQo+ICAgCQlzaG1lbS0+bWFkdiA9IG1hZHY7DQo+ICAgDQo+ ICAgCW1hZHYgPSBzaG1lbS0+bWFkdjsNCj4gICANCj4gKwlkcm1fZ2VtX3NobWVtX3VwZGF0 ZV9wYWdlc19zdGF0ZShzaG1lbSk7DQo+ICsNCj4gICAJcmV0dXJuIChtYWR2ID49IDApOw0K PiAgIH0NCj4gICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fbWFkdmlzZSk7DQo+ICAg DQo+IC12b2lkIGRybV9nZW1fc2htZW1fcHVyZ2Uoc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0ICpzaG1lbSkNCj4gKy8qKg0KPiArICogZHJtX2dlbV9zaG1lbV9zd2FwX2luKCkgLSBN b3ZlcyBzaG1lbSBHRU0gYmFjayB0byBtZW1vcnkgYW5kIGVuYWJsZXMNCj4gKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgYWNjZXNzIHRvIHRoZSBtZW1vcnkuDQo+ ICsgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QNCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0 aW9uIG1vdmVzIHNobWVtIEdFTSBiYWNrIHRvIG1lbW9yeSBpZiBpdCB3YXMgcHJldmlvdXNs eSBldmljdGVkDQo+ICsgKiBieSB0aGUgbWVtb3J5IHNocmlua2VyLiBUaGUgR0VNIGlzIHJl YWR5IHRvIHVzZSBvbiBzdWNjZXNzLg0KPiArICoNCj4gKyAqIFJldHVybnM6DQo+ICsgKiAw IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ICsg Ki8NCj4gK2ludCBkcm1fZ2VtX3NobWVtX3N3YXBfaW4oc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkNCj4gICB7DQo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq ID0gJnNobWVtLT5iYXNlOw0KPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRl djsNCj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsNCj4gKwlpbnQgZXJyOw0KPiAgIA0KPiAg IAlkbWFfcmVzdl9hc3NlcnRfaGVsZChzaG1lbS0+YmFzZS5yZXN2KTsNCj4gICANCj4gLQlX QVJOX09OKCFkcm1fZ2VtX3NobWVtX2lzX3B1cmdlYWJsZShzaG1lbSkpOw0KPiArCWlmIChz aG1lbS0+ZXZpY3RlZCkgew0KPiArCQllcnIgPSBkcm1fZ2VtX3NobWVtX2FjcXVpcmVfcGFn ZXMoc2htZW0pOw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKw0KPiAr CQlzZ3QgPSBkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZShzaG1lbSk7DQo+ICsJCWlmIChJ U19FUlIoc2d0KSkNCj4gKwkJCXJldHVybiBQVFJfRVJSKHNndCk7DQo+ICsNCj4gKwkJZXJy ID0gZG1hX21hcF9zZ3RhYmxlKG9iai0+ZGV2LT5kZXYsIHNndCwNCj4gKwkJCQkgICAgICBE TUFfQklESVJFQ1RJT05BTCwgMCk7DQo+ICsJCWlmIChlcnIpIHsNCj4gKwkJCXNnX2ZyZWVf dGFibGUoc2d0KTsNCj4gKwkJCWtmcmVlKHNndCk7DQo+ICsJCQlyZXR1cm4gZXJyOw0KPiAr CQl9DQo+ICAgDQo+IC0JZG1hX3VubWFwX3NndGFibGUoZGV2LT5kZXYsIHNobWVtLT5zZ3Qs IERNQV9CSURJUkVDVElPTkFMLCAwKTsNCj4gLQlzZ19mcmVlX3RhYmxlKHNobWVtLT5zZ3Qp Ow0KPiAtCWtmcmVlKHNobWVtLT5zZ3QpOw0KPiAtCXNobWVtLT5zZ3QgPSBOVUxMOw0KPiAr CQlzaG1lbS0+c2d0ID0gc2d0Ow0KPiArCQlzaG1lbS0+ZXZpY3RlZCA9IGZhbHNlOw0KPiAg IA0KPiAtCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsNCj4gKwkJZHJtX2dlbV9z aG1lbV91cGRhdGVfcGFnZXNfc3RhdGUoc2htZW0pOw0KPiArCX0NCj4gICANCj4gLQlzaG1l bS0+bWFkdiA9IC0xOw0KPiArCWlmICghc2htZW0tPnBhZ2VzKQ0KPiArCQlyZXR1cm4gLUVO T01FTTsNCj4gICANCj4gLQlkcm1fdm1hX25vZGVfdW5tYXAoJm9iai0+dm1hX25vZGUsIGRl di0+YW5vbl9pbm9kZS0+aV9tYXBwaW5nKTsNCj4gLQlkcm1fZ2VtX2ZyZWVfbW1hcF9vZmZz ZXQob2JqKTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRy bV9nZW1fc2htZW1fc3dhcF9pbik7DQo+ICAgDQo+IC0JLyogT3VyIGdvYWwgaGVyZSBpcyB0 byByZXR1cm4gYXMgbXVjaCBvZiB0aGUgbWVtb3J5IGFzDQo+IC0JICogaXMgcG9zc2libGUg YmFjayB0byB0aGUgc3lzdGVtIGFzIHdlIGFyZSBjYWxsZWQgZnJvbSBPT00uDQo+IC0JICog VG8gZG8gdGhpcyB3ZSBtdXN0IGluc3RydWN0IHRoZSBzaG1mcyB0byBkcm9wIGFsbCBvZiBp dHMNCj4gLQkgKiBiYWNraW5nIHBhZ2VzLCAqbm93Ki4NCj4gLQkgKi8NCj4gLQlzaG1lbV90 cnVuY2F0ZV9yYW5nZShmaWxlX2lub2RlKG9iai0+ZmlscCksIDAsIChsb2ZmX3QpLTEpOw0K PiArc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV91bnBpbl9wYWdlcyhzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqID0gJnNobWVtLT5iYXNlOw0KPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBv YmotPmRldjsNCj4gICANCj4gLQlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoZmlsZV9pbm9k ZShvYmotPmZpbHApLT5pX21hcHBpbmcsIDAsIChsb2ZmX3QpLTEpOw0KPiArCWlmIChzaG1l bS0+ZXZpY3RlZCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJZG1hX3VubWFwX3NndGFibGUo ZGV2LT5kZXYsIHNobWVtLT5zZ3QsIERNQV9CSURJUkVDVElPTkFMLCAwKTsNCj4gKwlkcm1f Z2VtX3NobWVtX3JlbGVhc2VfcGFnZXMoc2htZW0pOw0KPiArCWRybV92bWFfbm9kZV91bm1h cCgmb2JqLT52bWFfbm9kZSwgZGV2LT5hbm9uX2lub2RlLT5pX21hcHBpbmcpOw0KPiArDQo+ ICsJc2dfZnJlZV90YWJsZShzaG1lbS0+c2d0KTsNCj4gKwlrZnJlZShzaG1lbS0+c2d0KTsN Cj4gKwlzaG1lbS0+c2d0ID0gTlVMTDsNCj4gICB9DQo+IC1FWFBPUlRfU1lNQk9MKGRybV9n ZW1fc2htZW1fcHVyZ2UpOw0KPiAgIA0KPiAgIC8qKg0KPiAgICAqIGRybV9nZW1fc2htZW1f ZHVtYl9jcmVhdGUgLSBDcmVhdGUgYSBkdW1iIHNobWVtIGJ1ZmZlciBvYmplY3QNCj4gQEAg LTQ4OCwyMiArNjkxLDMzIEBAIHN0YXRpYyB2bV9mYXVsdF90IGRybV9nZW1fc2htZW1fZmF1 bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpDQo+ICAgCXZtX2ZhdWx0X3QgcmV0Ow0KPiAgIAlz dHJ1Y3QgcGFnZSAqcGFnZTsNCj4gICAJcGdvZmZfdCBwYWdlX29mZnNldDsNCj4gKwlib29s IHBhZ2VzX3VucGlubmVkOw0KPiArCWludCBlcnI7DQo+ICAgDQo+ICAgCS8qIFdlIGRvbid0 IHVzZSB2bWYtPnBnb2ZmIHNpbmNlIHRoYXQgaGFzIHRoZSBmYWtlIG9mZnNldCAqLw0KPiAg IAlwYWdlX29mZnNldCA9ICh2bWYtPmFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdF X1NISUZUOw0KPiAgIA0KPiAgIAlkbWFfcmVzdl9sb2NrKHNobWVtLT5iYXNlLnJlc3YsIE5V TEwpOw0KPiAgIA0KPiAtCWlmIChwYWdlX29mZnNldCA+PSBudW1fcGFnZXMgfHwNCj4gLQkg ICAgV0FSTl9PTl9PTkNFKCFzaG1lbS0+cGFnZXMpIHx8DQo+IC0JICAgIHNobWVtLT5tYWR2 IDwgMCkgew0KPiArCS8qIFNhbml0eS1jaGVjayB0aGF0IHdlIGhhdmUgdGhlIHBhZ2VzIHBv aW50ZXIgd2hlbiBpdCBzaG91bGQgcHJlc2VudCAqLw0KPiArCXBhZ2VzX3VucGlubmVkID0g KHNobWVtLT5ldmljdGVkIHx8IHNobWVtLT5tYWR2IDwgMCB8fCAhc2htZW0tPnBhZ2VzX3Vz ZV9jb3VudCk7DQo+ICsJV0FSTl9PTl9PTkNFKCFzaG1lbS0+cGFnZXMgXiBwYWdlc191bnBp bm5lZCk7DQo+ICsNCj4gKwlpZiAocGFnZV9vZmZzZXQgPj0gbnVtX3BhZ2VzIHx8ICghc2ht ZW0tPnBhZ2VzICYmICFzaG1lbS0+ZXZpY3RlZCkpIHsNCj4gICAJCXJldCA9IFZNX0ZBVUxU X1NJR0JVUzsNCj4gICAJfSBlbHNlIHsNCj4gKwkJZXJyID0gZHJtX2dlbV9zaG1lbV9zd2Fw X2luKHNobWVtKTsNCj4gKwkJaWYgKGVycikgew0KPiArCQkJcmV0ID0gVk1fRkFVTFRfT09N Ow0KPiArCQkJZ290byB1bmxvY2s7DQo+ICsJCX0NCj4gKw0KPiAgIAkJcGFnZSA9IHNobWVt LT5wYWdlc1twYWdlX29mZnNldF07DQo+ICAgDQo+ICAgCQlyZXQgPSB2bWZfaW5zZXJ0X3Bm bih2bWEsIHZtZi0+YWRkcmVzcywgcGFnZV90b19wZm4ocGFnZSkpOw0KPiAgIAl9DQo+ICAg DQo+ICt1bmxvY2s6DQo+ICAgCWRtYV9yZXN2X3VubG9jayhzaG1lbS0+YmFzZS5yZXN2KTsN Cj4gICANCj4gICAJcmV0dXJuIHJldDsNCj4gQEAgLTUxMywxMyArNzI3LDE1IEBAIHN0YXRp YyB2b2lkIGRybV9nZW1fc2htZW1fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkNCj4gICB7DQo+ICAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9w cml2YXRlX2RhdGE7DQo+ICAgCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0g PSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOw0KPiAtCWludCByZXQ7DQo+ICAgDQo+ICAg CVdBUk5fT04oc2htZW0tPmJhc2UuaW1wb3J0X2F0dGFjaCk7DQo+ICAgDQo+ICAgCWRtYV9y ZXN2X2xvY2soc2htZW0tPmJhc2UucmVzdiwgTlVMTCk7DQo+IC0JcmV0ID0gZHJtX2dlbV9z aG1lbV9nZXRfcGFnZXMoc2htZW0pOw0KPiAtCVdBUk5fT05fT05DRShyZXQgIT0gMCk7DQo+ ICsNCj4gKwlpZiAoZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pKQ0KPiArCQlzaG1l bS0+cGFnZXNfdXNlX2NvdW50Kys7DQo+ICsNCj4gKwlkcm1fZ2VtX3NobWVtX3VwZGF0ZV9w YWdlc19zdGF0ZShzaG1lbSk7DQo+ICAgCWRtYV9yZXN2X3VubG9jayhzaG1lbS0+YmFzZS5y ZXN2KTsNCj4gICANCj4gICAJZHJtX2dlbV92bV9vcGVuKHZtYSk7DQo+IEBAIC01OTUsNiAr ODExLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9tbWFwKTsNCj4gICB2 b2lkIGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbyhjb25zdCBzdHJ1Y3QgZHJtX2dlbV9zaG1l bV9vYmplY3QgKnNobWVtLA0KPiAgIAkJCSAgICAgIHN0cnVjdCBkcm1fcHJpbnRlciAqcCwg dW5zaWduZWQgaW50IGluZGVudCkNCj4gICB7DQo+ICsJZHJtX3ByaW50Zl9pbmRlbnQocCwg aW5kZW50LCAiZXZpY3Rpb25fZW5hYmxlZD0lZFxuIiwgc2htZW0tPmV2aWN0aW9uX2VuYWJs ZWQpOw0KPiArCWRybV9wcmludGZfaW5kZW50KHAsIGluZGVudCwgInB1cmdlX2VuYWJsZWQ9 JWRcbiIsIHNobWVtLT5wdXJnZV9lbmFibGVkKTsNCj4gICAJZHJtX3ByaW50Zl9pbmRlbnQo cCwgaW5kZW50LCAicGFnZXNfdXNlX2NvdW50PSV1XG4iLCBzaG1lbS0+cGFnZXNfdXNlX2Nv dW50KTsNCj4gICANCj4gICAJaWYgKHNobWVtLT5iYXNlLmltcG9ydF9hdHRhY2gpDQo+IEBA IC02MDQsNyArODIyLDkgQEAgdm9pZCBkcm1fZ2VtX3NobWVtX3ByaW50X2luZm8oY29uc3Qg c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSwNCj4gICAJCWRybV9wcmludGZf aW5kZW50KHAsIGluZGVudCwgInZtYXBfdXNlX2NvdW50PSV1XG4iLA0KPiAgIAkJCQkgIHNo bWVtLT52bWFwX3VzZV9jb3VudCk7DQo+ICAgDQo+ICsJZHJtX3ByaW50Zl9pbmRlbnQocCwg aW5kZW50LCAiZXZpY3RlZD0lZFxuIiwgc2htZW0tPmV2aWN0ZWQpOw0KPiAgIAlkcm1fcHJp bnRmX2luZGVudChwLCBpbmRlbnQsICJ2YWRkcj0lcFxuIiwgc2htZW0tPnZhZGRyKTsNCj4g Kwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJtYWR2PSVkXG4iLCBzaG1lbS0+bWFk dik7DQo+ICAgfQ0KPiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV9wcmludF9pbmZv KTsNCj4gICANCj4gQEAgLTY3Nyw2ICs4OTcsOCBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRybV9n ZW1fc2htZW1fZ2V0X3BhZ2VzX3NndChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNo bWVtKQ0KPiAgIA0KPiAgIAlzaG1lbS0+c2d0ID0gc2d0Ow0KPiAgIA0KPiArCWRybV9nZW1f c2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlKHNobWVtKTsNCj4gKw0KPiAgIAlkbWFfcmVzdl91 bmxvY2soc2htZW0tPmJhc2UucmVzdik7DQo+ICAgDQo+ICAgCXJldHVybiBzZ3Q7DQo+IEBA IC03MjcsNiArOTQ5LDE4MSBAQCBkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJs ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAgIH0NCj4gICBFWFBPUlRfU1lNQk9MX0dQ TChkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSk7DQo+ICAgDQo+ICtzdGF0 aWMgc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIgKg0KPiArdG9fZHJtX3Nocmlua2Vy KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5l cl9vZihzaHJpbmtlciwgc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIsIGJhc2UpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZw0KPiArZHJtX2dlbV9zaG1lbV9z aHJpbmtlcl9jb3VudF9vYmplY3RzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsDQo+ICsJ CQkJICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQ0KPiArew0KPiArCXN0cnVjdCBk cm1fZ2VtX3NobWVtX3Nocmlua2VyICpnZW1fc2hyaW5rZXIgPSB0b19kcm1fc2hyaW5rZXIo c2hyaW5rZXIpOw0KPiArCXVuc2lnbmVkIGxvbmcgY291bnQgPSBnZW1fc2hyaW5rZXItPmxy dV9ldmljdGFibGUuY291bnQ7DQo+ICsNCj4gKwlpZiAoY291bnQgPj0gU0hSSU5LX0VNUFRZ KQ0KPiArCQlyZXR1cm4gU0hSSU5LX0VNUFRZIC0gMTsNCj4gKw0KPiArCXJldHVybiBjb3Vu dCA/OiBTSFJJTktfRU1QVFk7DQo+ICt9DQo+ICsNCj4gK2ludCBkcm1fZ2VtX3NobWVtX2V2 aWN0KHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJV0FS Tl9PTighZHJtX2dlbV9zaG1lbV9pc19ldmljdGFibGUoc2htZW0pKTsNCj4gKwlXQVJOX09O KHNobWVtLT5ldmljdGVkKTsNCj4gKw0KPiArCWRybV9nZW1fc2htZW1fdW5waW5fcGFnZXMo c2htZW0pOw0KPiArDQo+ICsJc2htZW0tPmV2aWN0ZWQgPSB0cnVlOw0KPiArCWRybV9nZW1f c2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlKHNobWVtKTsNCj4gKw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9ldmljdCk7DQo+ICsN Cj4gK2ludCBkcm1fZ2VtX3NobWVtX3B1cmdlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVj dCAqc2htZW0pDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2ht ZW0tPmJhc2U7DQo+ICsNCj4gKwlXQVJOX09OKCFkcm1fZ2VtX3NobWVtX2lzX3B1cmdlYWJs ZShzaG1lbSkpOw0KPiArDQo+ICsJZHJtX2dlbV9zaG1lbV91bnBpbl9wYWdlcyhzaG1lbSk7 DQo+ICsJZHJtX2dlbV9mcmVlX21tYXBfb2Zmc2V0KG9iaik7DQo+ICsNCj4gKwkvKiBPdXIg Z29hbCBoZXJlIGlzIHRvIHJldHVybiBhcyBtdWNoIG9mIHRoZSBtZW1vcnkgYXMNCj4gKwkg KiBpcyBwb3NzaWJsZSBiYWNrIHRvIHRoZSBzeXN0ZW0gYXMgd2UgYXJlIGNhbGxlZCBmcm9t IE9PTS4NCj4gKwkgKiBUbyBkbyB0aGlzIHdlIG11c3QgaW5zdHJ1Y3QgdGhlIHNobWZzIHRv IGRyb3AgYWxsIG9mIGl0cw0KPiArCSAqIGJhY2tpbmcgcGFnZXMsICpub3cqLg0KPiArCSAq Lw0KPiArCXNobWVtX3RydW5jYXRlX3JhbmdlKGZpbGVfaW5vZGUob2JqLT5maWxwKSwgMCwg KGxvZmZfdCktMSk7DQo+ICsNCj4gKwlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoZmlsZV9p bm9kZShvYmotPmZpbHApLT5pX21hcHBpbmcsIDAsIChsb2ZmX3QpLTEpOw0KPiArDQo+ICsJ c2htZW0tPm1hZHYgPSAtMTsNCj4gKwlzaG1lbS0+ZXZpY3RlZCA9IGZhbHNlOw0KPiArCWRy bV9nZW1fc2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlKHNobWVtKTsNCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9wdXJnZSk7 DQo+ICsNCj4gK3N0YXRpYyBib29sIGRybV9nZW1fc2htZW1fc2hyaW5rZXJfZXZpY3Qoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fc2ht ZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7DQo+ICsJaW50 IGVycjsNCj4gKw0KPiArCWlmICghZHJtX2dlbV9zaG1lbV9pc19ldmljdGFibGUoc2htZW0p IHx8DQo+ICsJICAgIGdldF9ucl9zd2FwX3BhZ2VzKCkgPCBvYmotPnNpemUgPj4gUEFHRV9T SElGVCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJZXJyID0gc2htZW0tPmV2aWN0 KHNobWVtKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwly ZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgZHJtX2dlbV9zaG1lbV9z aHJpbmtlcl9wdXJnZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikNCj4gK3sNCj4gKwlz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9v Ymoob2JqKTsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJaWYgKCFkcm1fZ2VtX3NobWVtX2lz X3B1cmdlYWJsZShzaG1lbSkpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCWVyciA9 IHNobWVtLT5ldmljdChzaG1lbSk7DQo+ICsJaWYgKGVycikNCj4gKwkJcmV0dXJuIGZhbHNl Ow0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25l ZCBsb25nDQo+ICtkcm1fZ2VtX3NobWVtX3Nocmlua2VyX3NjYW5fb2JqZWN0cyhzdHJ1Y3Qg c2hyaW5rZXIgKnNocmlua2VyLA0KPiArCQkJCSAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wg KnNjKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX3Nocmlua2VyICpnZW1fc2hy aW5rZXIgPSB0b19kcm1fc2hyaW5rZXIoc2hyaW5rZXIpOw0KPiArCXVuc2lnbmVkIGxvbmcg bnJfdG9fc2NhbiA9IHNjLT5ucl90b19zY2FuOw0KPiArCXVuc2lnbmVkIGxvbmcgcmVtYWlu aW5nID0gMDsNCj4gKwl1bnNpZ25lZCBsb25nIGZyZWVkID0gMDsNCj4gKw0KPiArCS8qIHB1 cmdlIGFzIG1hbnkgb2JqZWN0cyBhcyB3ZSBjYW4gKi8NCj4gKwlmcmVlZCArPSBkcm1fZ2Vt X2xydV9zY2FuKCZnZW1fc2hyaW5rZXItPmxydV9ldmljdGFibGUsDQo+ICsJCQkJICBucl90 b19zY2FuLCAmcmVtYWluaW5nLA0KPiArCQkJCSAgZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl9w dXJnZSk7DQo+ICsNCj4gKwkvKiBldmljdCBhcyBtYW55IG9iamVjdHMgYXMgd2UgY2FuICov DQo+ICsJaWYgKGZyZWVkIDwgbnJfdG9fc2NhbikNCj4gKwkJZnJlZWQgKz0gZHJtX2dlbV9s cnVfc2NhbigmZ2VtX3Nocmlua2VyLT5scnVfZXZpY3RhYmxlLA0KPiArCQkJCQkgIG5yX3Rv X3NjYW4gLSBmcmVlZCwgJnJlbWFpbmluZywNCj4gKwkJCQkJICBkcm1fZ2VtX3NobWVtX3No cmlua2VyX2V2aWN0KTsNCj4gKw0KPiArCXJldHVybiAoZnJlZWQgPiAwICYmIHJlbWFpbmlu ZyA+IDApID8gZnJlZWQgOiBTSFJJTktfU1RPUDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBkcm1fZ2VtX3NobWVtX3Nocmlua2VyX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBzaG1lbSBz aHJpbmtlcg0KPiArICogQGRldjogRFJNIGRldmljZQ0KPiArICoNCj4gKyAqIFJldHVybnM6 DQo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUuDQo+ICsgKi8NCj4gK2ludCBkcm1fZ2VtX3NobWVtX3Nocmlua2VyX3JlZ2lzdGVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpDQo+ICt7DQo+ICsJc3Ry dWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIgKmdlbV9zaHJpbmtlcjsNCj4gKwlpbnQgZXJy Ow0KPiArDQo+ICsJaWYgKFdBUk5fT04oZGV2LT5zaG1lbV9zaHJpbmtlcikpDQo+ICsJCXJl dHVybiAtRUJVU1k7DQo+ICsNCj4gKwlnZW1fc2hyaW5rZXIgPSBremFsbG9jKHNpemVvZigq Z2VtX3Nocmlua2VyKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFnZW1fc2hyaW5rZXIpDQo+ ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJZ2VtX3Nocmlua2VyLT5iYXNlLmNvdW50 X29iamVjdHMgPSBkcm1fZ2VtX3NobWVtX3Nocmlua2VyX2NvdW50X29iamVjdHM7DQo+ICsJ Z2VtX3Nocmlua2VyLT5iYXNlLnNjYW5fb2JqZWN0cyA9IGRybV9nZW1fc2htZW1fc2hyaW5r ZXJfc2Nhbl9vYmplY3RzOw0KPiArCWdlbV9zaHJpbmtlci0+YmFzZS5zZWVrcyA9IERFRkFV TFRfU0VFS1M7DQo+ICsJZ2VtX3Nocmlua2VyLT5kZXYgPSBkZXY7DQo+ICsNCj4gKwltdXRl eF9pbml0KCZnZW1fc2hyaW5rZXItPmxvY2spOw0KPiArCWRybV9nZW1fbHJ1X2luaXQoJmdl bV9zaHJpbmtlci0+bHJ1X2V2aWN0YWJsZSwgJmdlbV9zaHJpbmtlci0+bG9jayk7DQo+ICsJ ZHJtX2dlbV9scnVfaW5pdCgmZ2VtX3Nocmlua2VyLT5scnVfZXZpY3RlZCwgJmdlbV9zaHJp bmtlci0+bG9jayk7DQo+ICsJZHJtX2dlbV9scnVfaW5pdCgmZ2VtX3Nocmlua2VyLT5scnVf cGlubmVkLCAmZ2VtX3Nocmlua2VyLT5sb2NrKTsNCj4gKw0KPiArCWRldi0+c2htZW1fc2hy aW5rZXIgPSBnZW1fc2hyaW5rZXI7DQo+ICsNCj4gKwllcnIgPSByZWdpc3Rlcl9zaHJpbmtl cigmZ2VtX3Nocmlua2VyLT5iYXNlLCBuYW1lKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCWRl di0+c2htZW1fc2hyaW5rZXIgPSBOVUxMOw0KPiArCQlrZnJlZShnZW1fc2hyaW5rZXIpOw0K PiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl9yZWdpc3Rlcik7DQo+ ICsNCj4gKy8qKg0KPiArICogZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl91bnJlZ2lzdGVyKCkg LSBVbnJlZ2lzdGVyIHNobWVtIHNocmlua2VyDQo+ICsgKiBAZGV2OiBEUk0gZGV2aWNlDQo+ ICsgKi8NCj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl91bnJlZ2lzdGVyKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fc2hy aW5rZXIgKmdlbV9zaHJpbmtlciA9IGRldi0+c2htZW1fc2hyaW5rZXI7DQo+ICsNCj4gKwlp ZiAoZ2VtX3Nocmlua2VyKSB7DQo+ICsJCXVucmVnaXN0ZXJfc2hyaW5rZXIoJmdlbV9zaHJp bmtlci0+YmFzZSk7DQo+ICsJCVdBUk5fT04oIWxpc3RfZW1wdHkoJmdlbV9zaHJpbmtlci0+ bHJ1X2V2aWN0YWJsZS5saXN0KSk7DQo+ICsJCVdBUk5fT04oIWxpc3RfZW1wdHkoJmdlbV9z aHJpbmtlci0+bHJ1X2V2aWN0ZWQubGlzdCkpOw0KPiArCQlXQVJOX09OKCFsaXN0X2VtcHR5 KCZnZW1fc2hyaW5rZXItPmxydV9waW5uZWQubGlzdCkpOw0KPiArCQltdXRleF9kZXN0cm95 KCZnZW1fc2hyaW5rZXItPmxvY2spOw0KPiArCQlkZXYtPnNobWVtX3Nocmlua2VyID0gTlVM TDsNCj4gKwkJa2ZyZWUoZ2VtX3Nocmlua2VyKTsNCj4gKwl9DQo+ICt9DQo+ICtFWFBPUlRf U1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3Nocmlua2VyX3VucmVnaXN0ZXIpOw0KPiArDQo+ ICAgTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gU0hNRU0gbWVtb3J5LW1hbmFnZW1lbnQgaGVs cGVycyIpOw0KPiAgIE1PRFVMRV9JTVBPUlRfTlMoRE1BX0JVRik7DQo+ICAgTU9EVUxFX0xJ Q0VOU0UoIkdQTCB2MiIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZy b3N0L3BhbmZyb3N0X2dlbV9zaHJpbmtlci5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0 L3BhbmZyb3N0X2dlbV9zaHJpbmtlci5jDQo+IGluZGV4IDZhNzFhMjU1NWY4NS4uODY1YTk4 OWQ2N2M4IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJv c3RfZ2VtX3Nocmlua2VyLmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2dlbV9zaHJpbmtlci5jDQo+IEBAIC0xNSw2ICsxNSwxMyBAQA0KPiAgICNpbmNs dWRlICJwYW5mcm9zdF9nZW0uaCINCj4gICAjaW5jbHVkZSAicGFuZnJvc3RfbW11LmgiDQo+ ICAgDQo+ICtzdGF0aWMgYm9vbCBwYW5mcm9zdF9nZW1fc2htZW1faXNfcHVyZ2VhYmxlKHN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJcmV0dXJuIChz aG1lbS0+bWFkdiA+IDApICYmDQo+ICsJCSFzaG1lbS0+cGFnZXNfcGluX2NvdW50ICYmIHNo bWVtLT5zZ3QgJiYNCj4gKwkJIXNobWVtLT5iYXNlLmRtYV9idWYgJiYgIXNobWVtLT5iYXNl LmltcG9ydF9hdHRhY2g7DQo+ICt9DQo+ICsNCj4gICBzdGF0aWMgdW5zaWduZWQgbG9uZw0K PiAgIHBhbmZyb3N0X2dlbV9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlu a2VyLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQ0KPiAgIHsNCj4gQEAgLTI3LDcgKzM0 LDcgQEAgcGFuZnJvc3RfZ2VtX3Nocmlua2VyX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hy aW5rZXIsIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MNCj4gICAJCXJldHVybiAwOw0KPiAg IA0KPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNobWVtLCAmcGZkZXYtPnNocmlua2VyX2xp c3QsIG1hZHZfbGlzdCkgew0KPiAtCQlpZiAoZHJtX2dlbV9zaG1lbV9pc19wdXJnZWFibGUo c2htZW0pKQ0KPiArCQlpZiAocGFuZnJvc3RfZ2VtX3NobWVtX2lzX3B1cmdlYWJsZShzaG1l bSkpDQo+ICAgCQkJY291bnQgKz0gc2htZW0tPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOw0K PiAgIAl9DQo+ICAgDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgg Yi9pbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgNCj4gaW5kZXggOTkyM2M3YTY4ODVlLi45Mjk1 NDZjYWQ4OTQgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaA0KPiAr KysgYi9pbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgNCj4gQEAgLTE2LDYgKzE2LDcgQEAgc3Ry dWN0IGRybV92YmxhbmtfY3J0YzsNCj4gICBzdHJ1Y3QgZHJtX3ZtYV9vZmZzZXRfbWFuYWdl cjsNCj4gICBzdHJ1Y3QgZHJtX3ZyYW1fbW07DQo+ICAgc3RydWN0IGRybV9mYl9oZWxwZXI7 DQo+ICtzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9zaHJpbmtlcjsNCj4gICANCj4gICBzdHJ1Y3Qg aW5vZGU7DQo+ICAgDQo+IEBAIC0yNzcsNiArMjc4LDkgQEAgc3RydWN0IGRybV9kZXZpY2Ug ew0KPiAgIAkvKiogQHZyYW1fbW06IFZSQU0gTU0gbWVtb3J5IG1hbmFnZXIgKi8NCj4gICAJ c3RydWN0IGRybV92cmFtX21tICp2cmFtX21tOw0KPiAgIA0KPiArCS8qKiBAc2htZW1fc2hy aW5rZXI6IFNITUVNIEdFTSBtZW1vcnkgc2hyaW5rZXIgKi8NCj4gKwlzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9zaHJpbmtlciAqc2htZW1fc2hyaW5rZXI7DQo+ICsNCg0KQXMgbWVudGlvbmVk IGFib3ZlLCB0aGF0IGNvdWxkIGJlIEdFTSBTSE1FTSBzdGF0ZSBpbnN0ZWFkIG9mIGp1c3Qg YSANCnNocmlua2VyLiAgWW91IGNhbiBwdXQgdGhpcyBpbnRvIGEgdW5pb24gd2l0aCB2cmFt X21tLiBObyBkcml2ZXIgd2lsbCANCnVzZSBib3RoIG1lbW9yeSBtYW5hZ2VycyBhdCB0aGUg c2FtZSB0aW1lLg0KDQo+ICAgCS8qKg0KPiAgIAkgKiBAc3dpdGNoX3Bvd2VyX3N0YXRlOg0K PiAgIAkgKg0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxw ZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgNCj4gaW5kZXggM2Iw NTVkMjM4NTg0Li5jMmVkNzQ3NjY4NGMgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZHJtL2Ry bV9nZW1fc2htZW1faGVscGVyLmgNCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1l bV9oZWxwZXIuaA0KPiBAQCAtNiw2ICs2LDcgQEANCj4gICAjaW5jbHVkZSA8bGludXgvZnMu aD4NCj4gICAjaW5jbHVkZSA8bGludXgvbW0uaD4NCj4gICAjaW5jbHVkZSA8bGludXgvbXV0 ZXguaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zaHJpbmtlci5oPg0KPiAgIA0KPiAgICNpbmNs dWRlIDxkcm0vZHJtX2ZpbGUuaD4NCj4gICAjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4NCj4g QEAgLTE1LDYgKzE2LDcgQEANCj4gICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Ow0KPiAg IHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYjsNCj4gICBzdHJ1Y3QgZHJtX3ByaW50ZXI7 DQo+ICtzdHJ1Y3QgZHJtX2RldmljZTsNCj4gICBzdHJ1Y3Qgc2dfdGFibGU7DQo+ICAgDQo+ ICAgLyoqDQo+IEBAIC0zOSwxMiArNDEsMjEgQEAgc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0IHsNCj4gICAJICovDQo+ICAgCXVuc2lnbmVkIGludCBwYWdlc191c2VfY291bnQ7DQo+ ICAgDQo+ICsJLyoqDQo+ICsJICogQHBhZ2VzX3Bpbl9jb3VudDoNCj4gKwkgKg0KPiArCSAq IFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgcGlubmVkIHBhZ2VzIHRhYmxlLg0KPiArCSAqIFRo ZSBwYWdlcyBhbGxvd2VkIHRvIGJlIGV2aWN0ZWQgYnkgbWVtb3J5IHNocmlua2VyDQo+ICsJ ICogb25seSB3aGVuIHRoZSBjb3VudCBpcyB6ZXJvLg0KPiArCSAqLw0KPiArCXVuc2lnbmVk IGludCBwYWdlc19waW5fY291bnQ7DQo+ICsNCj4gICAJLyoqDQo+ICAgCSAqIEBtYWR2OiBT dGF0ZSBmb3IgbWFkdmlzZQ0KPiAgIAkgKg0KPiAgIAkgKiAwIGlzIGFjdGl2ZS9pbnVzZS4N Cj4gKwkgKiAxIGlzIG5vdC1uZWVkZWQvY2FuLWJlLXB1cmdlZA0KPiAgIAkgKiBBIG5lZ2F0 aXZlIHZhbHVlIGlzIHRoZSBvYmplY3QgaXMgcHVyZ2VkLg0KPiAtCSAqIFBvc2l0aXZlIHZh bHVlcyBhcmUgZHJpdmVyIHNwZWNpZmljIGFuZCBub3QgdXNlZCBieSB0aGUgaGVscGVycy4N Cj4gICAJICovDQo+ICAgCWludCBtYWR2Ow0KPiAgIA0KPiBAQCAtOTEsNiArMTAyLDM5IEBA IHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCB7DQo+ICAgCSAqIEBtYXBfd2M6IG1hcCBv YmplY3Qgd3JpdGUtY29tYmluZWQgKGluc3RlYWQgb2YgdXNpbmcgc2htZW0gZGVmYXVsdHMp Lg0KPiAgIAkgKi8NCj4gICAJYm9vbCBtYXBfd2M7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBA ZXZpY3Rpb25fZW5hYmxlZDoNCj4gKwkgKg0KPiArCSAqIFRoZSBzaG1lbSBwYWdlcyBjYW4g YmUgZXZpY3RlZCBvbmx5IGlmIEBldmljdGlvbl9lbmFibGVkIGlzIHNldCB0byB0cnVlLg0K PiArCSAqIFVzZWQgaW50ZXJuYWxseSBieSBtZW1vcnkgc2hyaW5rZXIuDQo+ICsJICovDQo+ ICsJYm9vbCBldmljdGlvbl9lbmFibGVkOw0KPiArDQo+ICsJLyoqDQo+ICsJICogQHB1cmdl X2VuYWJsZWQ6DQo+ICsJICoNCj4gKwkgKiBUaGUgc2htZW0gcGFnZXMgY2FuIGJlIHB1cmdl ZCBvbmx5IGlmIEBwdXJnZV9lbmFibGVkIGlzIHNldCB0byB0cnVlLg0KPiArCSAqIFVzZWQg aW50ZXJuYWxseSBieSBtZW1vcnkgc2hyaW5rZXIuDQo+ICsJICovDQo+ICsJYm9vbCBwdXJn ZV9lbmFibGVkOw0KPiArDQo+ICsJLyoqDQo+ICsJICogQGV2aWN0ZWQ6IFRydWUgaWYgc2ht ZW0gcGFnZXMgYXJlIGV2aWN0ZWQgYnkgdGhlIG1lbW9yeSBzaHJpbmtlci4NCj4gKwkgKiBV c2VkIGludGVybmFsbHkgYnkgbWVtb3J5IHNocmlua2VyLg0KPiArCSAqLw0KPiArCWJvb2wg ZXZpY3RlZDsNCg0KTWF5YmUgdHVybiB0aG9zZSBib29sZWFucywgaW5jbHVkaW5nIG1hcF93 YywgaW50byAxLWJpdCBiaXQgZmllbGRzLg0KDQpCZXN0IHJlZ2FyZHMNClRob21hcw0KDQo+ ICsNCj4gKwkvKioNCj4gKwkgKiBAZXZpY3Q6DQo+ICsJICoNCj4gKwkgKiBJbnZva2VkIGJ5 IHNobWVtIHNocmlua2VyIGJlZm9yZSBldmljdGluZyBzaG1lbSBHRU0gZnJvbSBtZW1vcnku DQo+ICsJICogR0VNJ3MgRE1BIHJlc2VydmF0aW9uIGlzIGtlcHQgbG9ja2VkIGJ5IHRoZSBz aHJpbmtlci4gRHJpdmVycyB1c2luZw0KPiArCSAqIGRybS1zaG1lbSBzaHJpbmtlciBtdXN0 IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLg0KPiArCSAqDQo+ICsJICogUmV0dXJucyAwIG9u IHN1Y2Nlc3MsIG9yIC1lcnJubyBvbiBlcnJvci4NCj4gKwkgKi8NCj4gKwlpbnQgKCpldmlj dCkoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7DQo+ICAgfTsNCj4gICAN Cj4gICAjZGVmaW5lIHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaikgXA0KPiBAQCAtMTEwLDE0 ICsxNTQsMjEgQEAgaW50IGRybV9nZW1fc2htZW1fbW1hcChzdHJ1Y3QgZHJtX2dlbV9zaG1l bV9vYmplY3QgKnNobWVtLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QNCj4gICANCj4gICBpbnQg ZHJtX2dlbV9zaG1lbV9tYWR2aXNlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0sIGludCBtYWR2KTsNCj4gICANCj4gK2ludCBkcm1fZ2VtX3NobWVtX3NldF9wdXJnZWFi bGUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7DQo+ICtpbnQgZHJtX2dl bV9zaG1lbV9zZXRfZXZpY3RhYmxlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pOw0KPiArDQo+ICAgc3RhdGljIGlubGluZSBib29sIGRybV9nZW1fc2htZW1faXNfcHVy Z2VhYmxlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgew0KPiAt CXJldHVybiAoc2htZW0tPm1hZHYgPiAwKSAmJg0KPiAtCQkhc2htZW0tPnZtYXBfdXNlX2Nv dW50ICYmIHNobWVtLT5zZ3QgJiYNCj4gLQkJIXNobWVtLT5iYXNlLmRtYV9idWYgJiYgIXNo bWVtLT5iYXNlLmltcG9ydF9hdHRhY2g7DQo+ICsJcmV0dXJuIChzaG1lbS0+bWFkdiA+IDAp ICYmIHNobWVtLT5ldmljdCAmJg0KPiArCQlzaG1lbS0+cHVyZ2VfZW5hYmxlZCAmJiBzaG1l bS0+cGFnZXNfdXNlX2NvdW50ICYmDQo+ICsJCSFzaG1lbS0+cGFnZXNfcGluX2NvdW50ICYm ICFzaG1lbS0+YmFzZS5kbWFfYnVmICYmDQo+ICsJCSFzaG1lbS0+YmFzZS5pbXBvcnRfYXR0 YWNoICYmIChzaG1lbS0+c2d0IHx8IHNobWVtLT5ldmljdGVkKTsNCj4gICB9DQo+ICAgDQo+ IC12b2lkIGRybV9nZW1fc2htZW1fcHVyZ2Uoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0 ICpzaG1lbSk7DQo+ICtpbnQgZHJtX2dlbV9zaG1lbV9zd2FwX2luKHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0pOw0KPiArDQo+ICtpbnQgZHJtX2dlbV9zaG1lbV9ldmlj dChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsNCj4gK2ludCBkcm1fZ2Vt X3NobWVtX3B1cmdlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOw0KPiAg IA0KPiAgIHN0cnVjdCBzZ190YWJsZSAqZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUoc3Ry dWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7DQo+ICAgc3RydWN0IHNnX3RhYmxl ICpkcm1fZ2VtX3NobWVtX2dldF9wYWdlc19zZ3Qoc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0ICpzaG1lbSk7DQo+IEBAIC0yNjAsNiArMzExLDMyIEBAIHN0YXRpYyBpbmxpbmUgaW50 IGRybV9nZW1fc2htZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos IHN0cnVjdCB2DQo+ICAgCXJldHVybiBkcm1fZ2VtX3NobWVtX21tYXAoc2htZW0sIHZtYSk7 DQo+ICAgfQ0KPiAgIA0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9zaHJp bmtlciAtIEdlbmVyaWMgbWVtb3J5IHNocmlua2VyIGZvciBzaG1lbSBHRU1zDQo+ICsgKi8N Cj4gK3N0cnVjdCBkcm1fZ2VtX3NobWVtX3Nocmlua2VyIHsNCj4gKwkvKiogQGJhc2U6IFNo cmlua2VyIGZvciBwdXJnaW5nIHNobWVtIEdFTSBvYmplY3RzICovDQo+ICsJc3RydWN0IHNo cmlua2VyIGJhc2U7DQo+ICsNCj4gKwkvKiogQGxvY2s6IFByb3RlY3RzIEBscnVfKiAqLw0K PiArCXN0cnVjdCBtdXRleCBsb2NrOw0KPiArDQo+ICsJLyoqIEBscnVfcGlubmVkOiBMaXN0 IG9mIHBpbm5lZCBzaG1lbSBHRU0gb2JqZWN0cyAqLw0KPiArCXN0cnVjdCBkcm1fZ2VtX2xy dSBscnVfcGlubmVkOw0KPiArDQo+ICsJLyoqIEBscnVfZXZpY3RhYmxlOiBMaXN0IG9mIHNo bWVtIEdFTSBvYmplY3RzIHRvIGJlIGV2aWN0ZWQgKi8NCj4gKwlzdHJ1Y3QgZHJtX2dlbV9s cnUgbHJ1X2V2aWN0YWJsZTsNCj4gKw0KPiArCS8qKiBAbHJ1X2V2aWN0ZWQ6IExpc3Qgb2Yg ZXZpY3RlZCBzaG1lbSBHRU0gb2JqZWN0cyAqLw0KPiArCXN0cnVjdCBkcm1fZ2VtX2xydSBs cnVfZXZpY3RlZDsNCj4gKw0KPiArCS8qKiBAZGV2OiBEUk0gZGV2aWNlIHRoYXQgdXNlcyB0 aGlzIHNocmlua2VyICovDQo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldjsNCj4gK307DQo+ ICsNCj4gK2ludCBkcm1fZ2VtX3NobWVtX3Nocmlua2VyX3JlZ2lzdGVyKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOw0KPiArdm9pZCBkcm1fZ2VtX3NobWVt X3Nocmlua2VyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7DQo+ICsNCj4g ICAvKg0KPiAgICAqIERyaXZlciBvcHMNCj4gICAgKi8NCg0KLS0gDQpUaG9tYXMgWmltbWVy bWFubg0KR3JhcGhpY3MgRHJpdmVyIERldmVsb3Blcg0KU1VTRSBTb2Z0d2FyZSBTb2x1dGlv bnMgR2VybWFueSBHbWJIDQpNYXhmZWxkc3RyLiA1LCA5MDQwOSBOw7xybmJlcmcsIEdlcm1h bnkNCihIUkIgMzY4MDksIEFHIE7DvHJuYmVyZykNCkdlc2Now6RmdHNmw7xocmVyOiBJdm8g VG90ZXYNCg== --------------EVg990PtOsCqudNIka0fyyzi-- --------------hPhc0auro2uvJTka9m73IWMt 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+AFAmNrgNIFAwAAAAAACgkQlh/E3EQov+Ae IQ/9FpJygZ9oiu7YZDieu3prOvykqz+MceqsPt0BUKsdL3XTxPxRgR5Gibwo3LN3g9R11HsF9tRz 3JPIZ/4KERftcLTnD8q/gYoZv2dV7XUhNL7pH9VuKpbjthTw45VgdoVmeI47FOato/tYji7Da8NH qCdRqw89n3qCsg2TOaiLvZSfcar2Mjj77Bb1j8O2bCMyK8/YiOW84tCzd9pm+eYnjaDuzWKM7G6Z KskogV1eJ0AadEdZ/9nyDUNZj+MwToxWe3ke+qpOl9BZP3eCT7ZTHRpewjji0JFxSEVlU9zP915i B65I4kdKBu4EviIyBtKYT3+hwBj+lyKzDlFv7efWx9xlUl2u5Iy91rawFfjoxjZD7XTyJocFKEOR ymAgTkX9URl/90OD5wEm4KHzrCdjeZyxgw70OdGgYvwY3dEjh/ERid0LwwrImuqL00WMlKGNijlc NBATq/7TCabTid1DzG1WU4j9weMeyAABhyu275Uez/0wM4Z+r8SxF4yW53zzWHRLaBU3iproeFZT oE8+EVlYDTLpjHvNzSJB4zjpS2m+xBdGsev7CyW/f0LMS37vPkKM8VSm8eEaP4RMcmycWqqNbpHB YGgJAu48HHYhki0oZ9hXupG/CBXQ3Q6a/nB+LZWbrxaZdiCKBxw9/IyUV5NZVnHjPt9cmDUgUU+L VNs= =SvK4 -----END PGP SIGNATURE----- --------------hPhc0auro2uvJTka9m73IWMt--