Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp447765pxb; Thu, 21 Apr 2022 03:19:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxgWVy8BjQXT94m9F8rmpMr/R9ghulC8gDwuLz18ykA42Z2d1raxmf/YKvpUuOA+K6zp5LI X-Received: by 2002:a05:6a00:1a56:b0:50a:436f:6956 with SMTP id h22-20020a056a001a5600b0050a436f6956mr28062186pfv.20.1650536365438; Thu, 21 Apr 2022 03:19:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650536365; cv=none; d=google.com; s=arc-20160816; b=U7fuhnDQDbYpJfZGUM3zEhLt7zz91FdY91Yb+Q27fETZPMknVksFBapE71YvnalpCf zNJAP/Bp+t2qX0TveMV1XOhfoU5c95Wdzk+5MBWjhT1LPDbUzsm1bRzxHSzKl3KCiLx9 izr0Pi8QDrjs/+DiaHJ8Tr2evStIab97mHZXXc42AxpFtoDZGHyw+edgeu36E1FqPg2j Gzc3v6yvQoekjRMYFZbUiy3zhQe0BKVGH/mTGjKf7nDwAgvhARhS27//kf4uosLlmlWc wwqMyr7AaniLAVz2WF4LmbJ/gTb7mrHKOQ+a6HnRvZFDdniMbQ0fLNnyU+LhURorKaP1 mtDQ== 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=eqJOXJHDE4nf7bu+D1ggZ+A0XNXAmv48amlK01fNxR0=; b=S27AtSg6WIolBttU+6jouZ5+aKqeYkMp1ohUaM23o4n4Ul70y6Nr0uhigrHNBXEYKl Gz46M5VHo3iGkM4NvrFsVTf2anoYTHGJX6ij2JuNNkIHyKkKr1DN5su6o/DqF97ruMKf PO5yivPoStJWodWXBsVWntIHH4o/vf+jD6CuNOLRJFOhzRcA9Kz7IH8miK0pgrpIFu/R IbtENc6YXEr/RDVKF/S+eBZ8kUBmDuYZJwNI5kZ+7QI/NHZEXi/8I+KjiwWZw852SVE6 ZC7s4Khv4fukjaqyDYYqDKTSHg7rNZ6B12/tnToG2JjfMg7M73k8ovCgWm758YUIkO0D UVzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=yPxE+RbY; dkim=neutral (no key) header.i=@suse.de header.b=RDew8kTa; 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 d17-20020aa78e51000000b0050ad23a8d0esi2374731pfr.113.2022.04.21.03.19.10; Thu, 21 Apr 2022 03:19:25 -0700 (PDT) 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=yPxE+RbY; dkim=neutral (no key) header.i=@suse.de header.b=RDew8kTa; 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 S1349311AbiDSHZQ (ORCPT + 99 others); Tue, 19 Apr 2022 03:25:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349299AbiDSHZN (ORCPT ); Tue, 19 Apr 2022 03:25:13 -0400 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 517AF326ED for ; Tue, 19 Apr 2022 00:22:29 -0700 (PDT) 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-out1.suse.de (Postfix) with ESMTPS id DE6FB2129B; Tue, 19 Apr 2022 07:22:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1650352947; 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=eqJOXJHDE4nf7bu+D1ggZ+A0XNXAmv48amlK01fNxR0=; b=yPxE+RbYG9hKVcNpNJiGUUhb/CvbPIYkoCXN0nM7dO9qoEhAgb44l4XN/rmmRs7Ywkymuc bHU60dCZFGpwmOh0cbUTa5nAZfoferemIpwfcu/xupukiCRUvtg1OeyaqDK49iVZ67iAGP FpJHNCuyq/MgfIU/pIIG+BatZEK7boc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1650352947; 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=eqJOXJHDE4nf7bu+D1ggZ+A0XNXAmv48amlK01fNxR0=; b=RDew8kTaHLx8OnnD4m9X9A28g9V6SpvItsBiSk4jD9v4HUrArSbT6cy4BXlwdhpAXEbdgn WA1k6WREzt3Xe8Cg== 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 6841E132E7; Tue, 19 Apr 2022 07:22:27 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id nhWBGDNjXmL2SQAAMHmgww (envelope-from ); Tue, 19 Apr 2022 07:22:27 +0000 Message-ID: Date: Tue, 19 Apr 2022 09:22:26 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH v4 11/15] drm/shmem-helper: Add generic memory shrinker Content-Language: en-US To: Dmitry Osipenko , David Airlie , Gerd Hoffmann , Gurchetan Singh , Chia-I Wu , Daniel Vetter , Daniel Almeida , Gert Wollny , Gustavo Padovan , Daniel Stone , Tomeu Vizoso , Maarten Lankhorst , Maxime Ripard , Rob Herring , Steven Price , Alyssa Rosenzweig , Rob Clark , Emil Velikov , Robin Murphy Cc: Dmitry Osipenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org References: <20220417223707.157113-1-dmitry.osipenko@collabora.com> <20220417223707.157113-12-dmitry.osipenko@collabora.com> From: Thomas Zimmermann In-Reply-To: <20220417223707.157113-12-dmitry.osipenko@collabora.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------A0v0rMvrEh8xOQfDU6AmMSXv" X-Spam-Status: No, score=-7.6 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,T_FILL_THIS_FORM_SHORT,T_SCC_BODY_TEXT_LINE 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) --------------A0v0rMvrEh8xOQfDU6AmMSXv Content-Type: multipart/mixed; boundary="------------5H7750Mtd6UGTjHr18gikQFQ"; protected-headers="v1" From: Thomas Zimmermann To: Dmitry Osipenko , David Airlie , Gerd Hoffmann , Gurchetan Singh , Chia-I Wu , Daniel Vetter , Daniel Almeida , Gert Wollny , Gustavo Padovan , Daniel Stone , Tomeu Vizoso , Maarten Lankhorst , Maxime Ripard , Rob Herring , Steven Price , Alyssa Rosenzweig , Rob Clark , Emil Velikov , Robin Murphy Cc: Dmitry Osipenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org Message-ID: Subject: Re: [PATCH v4 11/15] drm/shmem-helper: Add generic memory shrinker References: <20220417223707.157113-1-dmitry.osipenko@collabora.com> <20220417223707.157113-12-dmitry.osipenko@collabora.com> In-Reply-To: <20220417223707.157113-12-dmitry.osipenko@collabora.com> --------------5H7750Mtd6UGTjHr18gikQFQ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMTguMDQuMjIgdW0gMDA6Mzcgc2NocmllYiBEbWl0cnkgT3NpcGVua286DQo+ IEludHJvZHVjZSBhIGNvbW1vbiBEUk0gU0hNRU0gc2hyaW5rZXIuIEl0IGFsbG93cyB0byBy ZWR1Y2UgY29kZQ0KPiBkdXBsaWNhdGlvbiBhbW9uZyBEUk0gZHJpdmVycyB0aGF0IGltcGxl bWVudCB0aGVpcnMgb3duIHNocmlua2Vycy4NCj4gVGhpcyBpcyBpbml0aWFsIHZlcnNpb24g b2YgdGhlIHNocmlua2VyIHRoYXQgY292ZXJzIGJhc2ljIG5lZWRzIG9mDQo+IEdQVSBkcml2 ZXJzLCBib3RoIHB1cmdpbmcgYW5kIGV2aWN0aW9uIG9mIHNobWVtIG9iamVjdHMgYXJlIHN1 cHBvcnRlZC4NCj4gDQo+IFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gYSBjb3VwbGUgaWRlYXMg Ym9ycm93ZWQgZnJvbSBSb2IncyBDbGFyayBNU00NCj4gc2hyaW5rZXIgYW5kIFRob21hcycg WmltbWVybWFubiB2YXJpYW50IG9mIFNITUVNIHNocmlua2VyLg0KPiANCj4gSW4gb3JkZXIg dG8gc3RhcnQgdXNpbmcgRFJNIFNITUVNIHNocmlua2VyIGRyaXZlcnMgc2hvdWxkOg0KPiAN Cj4gMS4gSW1wbGVtZW50IG5ldyBwdXJnZSgpLCBldmljdCgpICsgc3dhcF9pbigpIEdFTSBj YWxsYmFja3MuDQo+IDIuIFJlZ2lzdGVyIHNocmlua2VyIHVzaW5nIGRybV9nZW1fc2htZW1f c2hyaW5rZXJfcmVnaXN0ZXIoZHJtX2RldmljZSkuDQo+IDMuIFVzZSBkcm1fZ2VtX3NobWVt X3NldF9wdXJnZWFibGVfYW5kX2V2aWN0YWJsZShzaG1lbSkgYW5kIGFsaWtlIEFQSQ0KPiAg ICAgZnVuY3Rpb25zIHRvIGFjdGl2YXRlIHNocmlua2luZyBvZiBHRU1zLg0KPiANCj4gU2ln bmVkLW9mZi1ieTogRGFuaWVsIEFsbWVpZGEgPGRhbmllbC5hbG1laWRhQGNvbGxhYm9yYS5j b20+DQo+IFNpZ25lZC1vZmYtYnk6IERtaXRyeSBPc2lwZW5rbyA8ZG1pdHJ5Lm9zaXBlbmtv QGNvbGxhYm9yYS5jb20+DQo+IC0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3No bWVtX2hlbHBlci5jIHwgNzY1ICsrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gICBpbmNs dWRlL2RybS9kcm1fZGV2aWNlLmggICAgICAgICAgICAgICB8ICAgNCArDQo+ICAgaW5jbHVk ZS9kcm0vZHJtX2dlbS5oICAgICAgICAgICAgICAgICAgfCAgMzUgKysNCj4gICBpbmNsdWRl L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICB8IDEwNSArKystDQo+ICAgNCBmaWxl cyBjaGFuZ2VkLCA4NzcgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pDQo+IA0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYw0KPiBpbmRleCAzZWNlZjU3 MWVmZjMuLjM4MzhmYjhkNmYzYSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fc2htZW1faGVscGVyLmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f c2htZW1faGVscGVyLmMNCj4gQEAgLTg4LDYgKzg4LDEzIEBAIF9fZHJtX2dlbV9zaG1lbV9j cmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGJvb2wgcHJpdmF0 ZSkNCj4gICANCj4gICAJSU5JVF9MSVNUX0hFQUQoJnNobWVtLT5tYWR2X2xpc3QpOw0KPiAg IA0KPiArCS8qDQo+ICsJICogRXZpY3Rpb24gYW5kIHB1cmdpbmcgYXJlIGRpc2FibGVkIGJ5 IGRlZmF1bHQsIHNobWVtIHVzZXIgbXVzdCBlbmFibGUNCj4gKwkgKiB0aGVtIGV4cGxpY2l0 bHkgdXNpbmcgZHJtX2dlbV9zaG1lbV9zZXRfZXZpY3RhYmxlL3B1cmdlYWJsZSgpLg0KPiAr CSAqLw0KPiArCXNobWVtLT5ldmljdGlvbl9kaXNhYmxlX2NvdW50ID0gMTsNCj4gKwlzaG1l bS0+cHVyZ2luZ19kaXNhYmxlX2NvdW50ID0gMTsNCj4gKw0KPiAgIAlpZiAoIXByaXZhdGUp IHsNCj4gICAJCS8qDQo+ICAgCQkgKiBPdXIgYnVmZmVycyBhcmUga2VwdCBwaW5uZWQsIHNv IGFsbG9jYXRpbmcgdGhlbQ0KPiBAQCAtMTI2LDYgKzEzMywxMDcgQEAgc3RydWN0IGRybV9n ZW1fc2htZW1fb2JqZWN0ICpkcm1fZ2VtX3NobWVtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzaXplX3QNCj4gICB9DQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9z aG1lbV9jcmVhdGUpOw0KPiAgIA0KPiArc3RhdGljIHZvaWQNCj4gK2RybV9nZW1fc2htZW1f YWRkX3BhZ2VzX3RvX3Nocmlua2VyKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJh c2U7DQo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIgKmdlbV9zaHJpbmtlciA9 IG9iai0+ZGV2LT5zaG1lbV9zaHJpbmtlcjsNCj4gKwlzaXplX3QgcGFnZV9jb3VudCA9IG9i ai0+c2l6ZSA+PiBQQUdFX1NISUZUOw0KPiArDQo+ICsJaWYgKCFzaG1lbS0+cGFnZXNfc2hy aW5rYWJsZSkgew0KPiArCQlXQVJOX09OKGdlbV9zaHJpbmtlci0+c2hyaW5rYWJsZV9jb3Vu dCArIHBhZ2VfY291bnQgPCBwYWdlX2NvdW50KTsNCj4gKwkJZ2VtX3Nocmlua2VyLT5zaHJp bmthYmxlX2NvdW50ICs9IHBhZ2VfY291bnQ7DQo+ICsJCXNobWVtLT5wYWdlc19zaHJpbmth YmxlID0gdHJ1ZTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtkcm1f Z2VtX3NobWVtX3JlbW92ZV9wYWdlc19mcm9tX3Nocmlua2VyKHN0cnVjdCBkcm1fZ2VtX3No bWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmogPSAmc2htZW0tPmJhc2U7DQo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIg KmdlbV9zaHJpbmtlciA9IG9iai0+ZGV2LT5zaG1lbV9zaHJpbmtlcjsNCj4gKwlzaXplX3Qg cGFnZV9jb3VudCA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOw0KPiArDQo+ICsJaWYgKHNo bWVtLT5wYWdlc19zaHJpbmthYmxlKSB7DQo+ICsJCVdBUk5fT04oZ2VtX3Nocmlua2VyLT5z aHJpbmthYmxlX2NvdW50IDwgcGFnZV9jb3VudCk7DQo+ICsJCWdlbV9zaHJpbmtlci0+c2hy aW5rYWJsZV9jb3VudCAtPSBwYWdlX2NvdW50Ow0KPiArCQlzaG1lbS0+cGFnZXNfc2hyaW5r YWJsZSA9IGZhbHNlOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2Ry bV9nZW1fc2htZW1fc2V0X3BhZ2VzX3N0YXRlX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1l bV9vYmplY3QgKnNobWVtLA0KPiArCQkJCSAgICAgZW51bSBkcm1fZ2VtX3NobWVtX3BhZ2Vz X3N0YXRlIG5ld19zdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiA9ICZzaG1lbS0+YmFzZTsNCj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9zaHJpbmtlciAq Z2VtX3Nocmlua2VyID0gb2JqLT5kZXYtPnNobWVtX3Nocmlua2VyOw0KPiArDQo+ICsJbG9j a2RlcF9hc3NlcnRfaGVsZCgmZ2VtX3Nocmlua2VyLT5sb2NrKTsNCj4gKwlsb2NrZGVwX2Fz c2VydF9oZWxkKCZvYmotPnJlc3YtPmxvY2suYmFzZSk7DQo+ICsNCj4gKwlpZiAobmV3X3N0 YXRlID49IERSTV9HRU1fU0hNRU1fUEFHRVNfU1RBVEVfUElOTkVEKSB7DQo+ICsJCWlmIChk cm1fZ2VtX3NobWVtX2lzX2V2aWN0YWJsZShzaG1lbSkpDQo+ICsJCQluZXdfc3RhdGUgPSBE Uk1fR0VNX1NITUVNX1BBR0VTX1NUQVRFX0VWSUNUQUJMRTsNCj4gKw0KPiArCQlpZiAoZHJt X2dlbV9zaG1lbV9pc19wdXJnZWFibGUoc2htZW0pKQ0KPiArCQkJbmV3X3N0YXRlID0gRFJN X0dFTV9TSE1FTV9QQUdFU19TVEFURV9QVVJHRUFCTEU7DQo+ICsNCj4gKwkJaWYgKCFzaG1l bS0+cGFnZXMpDQo+ICsJCQluZXdfc3RhdGUgPSBEUk1fR0VNX1NITUVNX1BBR0VTX1NUQVRF X1VOUElOTkVEOw0KPiArDQo+ICsJCWlmIChzaG1lbS0+ZXZpY3RlZCkNCj4gKwkJCW5ld19z dGF0ZSA9IERSTV9HRU1fU0hNRU1fUEFHRVNfU1RBVEVfRVZJQ1RFRDsNCj4gKwl9DQo+ICsN Cj4gKwlpZiAoc2htZW0tPnBhZ2VzX3N0YXRlID09IG5ld19zdGF0ZSkNCj4gKwkJcmV0dXJu Ow0KPiArDQo+ICsJc3dpdGNoIChuZXdfc3RhdGUpIHsNCj4gKwljYXNlIERSTV9HRU1fU0hN RU1fUEFHRVNfU1RBVEVfVU5QSU5ORUQ6DQo+ICsJY2FzZSBEUk1fR0VNX1NITUVNX1BBR0VT X1NUQVRFX1BVUkdFRDoNCj4gKwkJZHJtX2dlbV9zaG1lbV9yZW1vdmVfcGFnZXNfZnJvbV9z aHJpbmtlcihzaG1lbSk7DQo+ICsJCWxpc3RfZGVsX2luaXQoJnNobWVtLT5tYWR2X2xpc3Qp Ow0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgRFJNX0dFTV9TSE1FTV9QQUdFU19TVEFU RV9QSU5ORUQ6DQo+ICsJCWRybV9nZW1fc2htZW1fcmVtb3ZlX3BhZ2VzX2Zyb21fc2hyaW5r ZXIoc2htZW0pOw0KPiArCQlsaXN0X21vdmVfdGFpbCgmc2htZW0tPm1hZHZfbGlzdCwgJmdl bV9zaHJpbmtlci0+bHJ1X2FjdGl2ZSk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBE Uk1fR0VNX1NITUVNX1BBR0VTX1NUQVRFX1BVUkdFQUJMRToNCj4gKwkJZHJtX2dlbV9zaG1l bV9hZGRfcGFnZXNfdG9fc2hyaW5rZXIoc2htZW0pOw0KPiArCQlsaXN0X21vdmVfdGFpbCgm c2htZW0tPm1hZHZfbGlzdCwgJmdlbV9zaHJpbmtlci0+bHJ1X3B1cmdlYWJsZSk7DQo+ICsJ CWJyZWFrOw0KPiArDQo+ICsJY2FzZSBEUk1fR0VNX1NITUVNX1BBR0VTX1NUQVRFX0VWSUNU QUJMRToNCj4gKwkJZHJtX2dlbV9zaG1lbV9hZGRfcGFnZXNfdG9fc2hyaW5rZXIoc2htZW0p Ow0KPiArCQlsaXN0X21vdmVfdGFpbCgmc2htZW0tPm1hZHZfbGlzdCwgJmdlbV9zaHJpbmtl ci0+bHJ1X2V2aWN0YWJsZSk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBEUk1fR0VN X1NITUVNX1BBR0VTX1NUQVRFX0VWSUNURUQ6DQo+ICsJCWRybV9nZW1fc2htZW1fcmVtb3Zl X3BhZ2VzX2Zyb21fc2hyaW5rZXIoc2htZW0pOw0KPiArCQlsaXN0X21vdmVfdGFpbCgmc2ht ZW0tPm1hZHZfbGlzdCwgJmdlbV9zaHJpbmtlci0+bHJ1X2V2aWN0ZWQpOw0KPiArCQlicmVh azsNCj4gKwl9DQo+ICsNCj4gKwlzaG1lbS0+cGFnZXNfc3RhdGUgPSBuZXdfc3RhdGU7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtkcm1fZ2VtX3NobWVtX3NldF9wYWdlc19z dGF0ZShzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLA0KPiArCQkJICAgICAg ZW51bSBkcm1fZ2VtX3NobWVtX3BhZ2VzX3N0YXRlIG5ld19zdGF0ZSkNCj4gK3sNCj4gKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsNCj4gKwlzdHJ1Y3Qg ZHJtX2dlbV9zaG1lbV9zaHJpbmtlciAqZ2VtX3Nocmlua2VyID0gb2JqLT5kZXYtPnNobWVt X3Nocmlua2VyOw0KPiArDQo+ICsJaWYgKCFnZW1fc2hyaW5rZXIpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCW11dGV4X2xvY2soJmdlbV9zaHJpbmtlci0+bG9jayk7DQo+ICsJZHJtX2dl bV9zaG1lbV9zZXRfcGFnZXNfc3RhdGVfbG9ja2VkKHNobWVtLCBuZXdfc3RhdGUpOw0KPiAr CW11dGV4X3VubG9jaygmZ2VtX3Nocmlua2VyLT5sb2NrKTsNCj4gK30NCj4gKw0KPiAgIC8q Kg0KPiAgICAqIGRybV9nZW1fc2htZW1fZnJlZSAtIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0 ZWQgd2l0aCBhIHNobWVtIEdFTSBvYmplY3QNCj4gICAgKiBAc2htZW06IHNobWVtIEdFTSBv YmplY3QgdG8gZnJlZQ0KPiBAQCAtMTM3LDYgKzI0NSw5IEBAIHZvaWQgZHJtX2dlbV9zaG1l bV9mcmVlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgew0KPiAg IAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsNCj4gICANCj4g KwkvKiB0YWtlIG91dCBzaG1lbSBHRU0gb2JqZWN0IGZyb20gdGhlIG1lbW9yeSBzaHJpbmtl ciAqLw0KPiArCWRybV9nZW1fc2htZW1fbWFkdmlzZShzaG1lbSwgLTEpOw0KPiArDQo+ICAg CVdBUk5fT04oc2htZW0tPnZtYXBfdXNlX2NvdW50KTsNCj4gICANCj4gICAJaWYgKG9iai0+ aW1wb3J0X2F0dGFjaCkgew0KPiBAQCAtMTQ4LDcgKzI1OSw3IEBAIHZvaWQgZHJtX2dlbV9z aG1lbV9mcmVlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgCQkJ c2dfZnJlZV90YWJsZShzaG1lbS0+c2d0KTsNCj4gICAJCQlrZnJlZShzaG1lbS0+c2d0KTsN Cj4gICAJCX0NCj4gLQkJaWYgKHNobWVtLT5wYWdlcykNCj4gKwkJaWYgKHNobWVtLT5wYWdl c191c2VfY291bnQpDQo+ICAgCQkJZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOw0K PiAgIAl9DQo+ICAgDQo+IEBAIC0xNTksMTggKzI3MCwyMjYgQEAgdm9pZCBkcm1fZ2VtX3No bWVtX2ZyZWUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4gICB9DQo+ ICAgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9mcmVlKTsNCj4gICANCj4gLXN0 YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0pDQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Vw ZGF0ZV9wYWdlc19zdGF0ZV9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+ YmFzZTsNCj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9zaHJpbmtlciAqZ2VtX3Nocmlua2Vy ID0gb2JqLT5kZXYtPnNobWVtX3Nocmlua2VyOw0KPiArCWVudW0gZHJtX2dlbV9zaG1lbV9w YWdlc19zdGF0ZSBuZXdfc3RhdGU7DQo+ICsNCj4gKwlpZiAoIWdlbV9zaHJpbmtlciB8fCBv YmotPmltcG9ydF9hdHRhY2gpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2so JmdlbV9zaHJpbmtlci0+bG9jayk7DQo+ICsNCj4gKwlpZiAoIXNobWVtLT5tYWR2KQ0KPiAr CQluZXdfc3RhdGUgPSBEUk1fR0VNX1NITUVNX1BBR0VTX1NUQVRFX1BJTk5FRDsNCj4gKwll bHNlIGlmIChzaG1lbS0+bWFkdiA+IDApDQo+ICsJCW5ld19zdGF0ZSA9IERSTV9HRU1fU0hN RU1fUEFHRVNfU1RBVEVfUFVSR0VBQkxFOw0KPiArCWVsc2UNCj4gKwkJbmV3X3N0YXRlID0g RFJNX0dFTV9TSE1FTV9QQUdFU19TVEFURV9QVVJHRUQ7DQo+ICsNCj4gKwlkcm1fZ2VtX3No bWVtX3NldF9wYWdlc19zdGF0ZV9sb2NrZWQoc2htZW0sIG5ld19zdGF0ZSk7DQo+ICsNCj4g KwltdXRleF91bmxvY2soJmdlbV9zaHJpbmtlci0+bG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlKHN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJZG1hX3Jlc3ZfbG9jayhzaG1l bS0+YmFzZS5yZXN2LCBOVUxMKTsNCj4gKwlkcm1fZ2VtX3NobWVtX3VwZGF0ZV9wYWdlc19z dGF0ZV9sb2NrZWQoc2htZW0pOw0KPiArCWRtYV9yZXN2X3VubG9jayhzaG1lbS0+YmFzZS5y ZXN2KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArZHJtX2dlbV9zaG1lbV9zZXRf ZXZpY3RhYmxlX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0K PiArew0KPiArCWludCByZXQgPSAwOw0KPiArDQo+ICsJV0FSTl9PTl9PTkNFKCFzaG1lbS0+ ZXZpY3Rpb25fZGlzYWJsZV9jb3VudC0tKTsNCj4gKw0KPiArCWlmIChzaG1lbS0+bWFkdiA8 IDApDQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ICsNCj4gKwlkcm1fZ2VtX3NobWVtX3VwZGF0 ZV9wYWdlc19zdGF0ZV9sb2NrZWQoc2htZW0pOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludA0KPiArZHJtX2dlbV9zaG1lbV9zZXRfdW5ldmljdGFi bGVfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7DQo+ICsJaW50 IGVycjsNCj4gKw0KPiArCWlmIChzaG1lbS0+bWFkdiA8IDApDQo+ICsJCXJldHVybiAtRU5P TUVNOw0KPiArDQo+ICsJaWYgKHNobWVtLT5ldmljdGVkKSB7DQo+ICsJCWVyciA9IG9iai0+ ZnVuY3MtPnN3YXBfaW4ob2JqKTsNCj4gKwkJaWYgKGVycikNCj4gKwkJCXJldHVybiBlcnI7 DQo+ICsJfQ0KPiArDQo+ICsJc2htZW0tPmV2aWN0aW9uX2Rpc2FibGVfY291bnQrKzsNCj4g Kw0KPiArCWRybV9nZW1fc2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlX2xvY2tlZChzaG1lbSk7 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArZHJt X2dlbV9zaG1lbV9zZXRfcHVyZ2VhYmxlX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9v YmplY3QgKnNobWVtKQ0KPiArew0KPiArCWludCByZXQgPSAwOw0KPiArDQo+ICsJV0FSTl9P Tl9PTkNFKCFzaG1lbS0+cHVyZ2luZ19kaXNhYmxlX2NvdW50LS0pOw0KPiArDQo+ICsJaWYg KHNobWVtLT5tYWR2IDwgMCkNCj4gKwkJcmV0ID0gLUVOT01FTTsNCj4gKw0KPiArCWRybV9n ZW1fc2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlX2xvY2tlZChzaG1lbSk7DQo+ICsNCj4gKwly ZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9nZW1fc2htZW1fc2V0 X3B1cmdlYWJsZSgpIC0gTWFrZSBHRU0gcHVyZ2VhYmxlIGJ5IG1lbW9yeSBzaHJpbmtlcg0K PiArICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0DQo+ICsgKg0KPiArICogVGVsbCBtZW1v cnkgc2hyaW5rZXIgdGhhdCB0aGlzIEdFTSBjYW4gYmUgcHVyZ2VkLiBJbml0aWFsbHkgcHVy Z2luZyBpcw0KPiArICogZGlzYWJsZWQgZm9yIGFsbCBHRU1zLiBFYWNoIHNldF9wdXJlYWJs ZSgpIGNhbGwgbXVzdCBoYXZlIGNvcnJlc3BvbmRpbmcNCj4gKyAqIHNldF91bnB1cmVhYmxl KCkgY2FsbC4gSWYgR0VNIHdhcyBwdXJnZWQsIHRoZW4gLUVOT01FTSBpcyByZXR1cm5lZC4N Cj4gKyAqDQo+ICsgKiBSZXR1cm5zOg0KPiArICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRp dmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLg0KPiArICovDQo+ICtpbnQgZHJtX2dlbV9zaG1l bV9zZXRfcHVyZ2VhYmxlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWRtYV9yZXN2X2xvY2soc2htZW0tPmJhc2Uu cmVzdiwgTlVMTCk7DQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV9zZXRfcHVyZ2VhYmxlX2xv Y2tlZChzaG1lbSk7DQo+ICsJZG1hX3Jlc3ZfdW5sb2NrKHNobWVtLT5iYXNlLnJlc3YpOw0K PiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9n ZW1fc2htZW1fc2V0X3B1cmdlYWJsZSk7DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2RybV9n ZW1fc2htZW1fc2V0X3VucHVyZ2VhYmxlX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9v YmplY3QgKnNobWVtKQ0KPiArew0KPiArCWlmIChzaG1lbS0+bWFkdiA8IDApDQo+ICsJCXJl dHVybiAtRU5PTUVNOw0KPiArDQo+ICsJc2htZW0tPnB1cmdpbmdfZGlzYWJsZV9jb3VudCsr Ow0KPiArDQo+ICsJZHJtX2dlbV9zaG1lbV91cGRhdGVfcGFnZXNfc3RhdGVfbG9ja2VkKHNo bWVtKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ ICtkcm1fZ2VtX3NobWVtX3NldF9wdXJnZWFibGVfYW5kX2V2aWN0YWJsZV9sb2NrZWQoc3Ry dWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4gK3sNCj4gKwlpbnQgcmV0Ow0K PiArDQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV9zZXRfZXZpY3RhYmxlX2xvY2tlZChzaG1l bSk7DQo+ICsJaWYgKCFyZXQpIHsNCj4gKwkJcmV0ID0gZHJtX2dlbV9zaG1lbV9zZXRfcHVy Z2VhYmxlX2xvY2tlZChzaG1lbSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlkcm1fZ2VtX3No bWVtX3NldF91bmV2aWN0YWJsZV9sb2NrZWQoc2htZW0pOw0KPiArCX0NCj4gKw0KPiArCXJl dHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2RybV9nZW1fc2htZW1f c2V0X3VucHVyZ2VhYmxlX2FuZF91bmV2aWN0YWJsZV9sb2NrZWQoc3RydWN0IGRybV9nZW1f c2htZW1fb2JqZWN0ICpzaG1lbSkNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0 ID0gZHJtX2dlbV9zaG1lbV9zZXRfdW5wdXJnZWFibGVfbG9ja2VkKHNobWVtKTsNCj4gKwlp ZiAoIXJldCkgew0KPiArCQlyZXQgPSBkcm1fZ2VtX3NobWVtX3NldF91bmV2aWN0YWJsZV9s b2NrZWQoc2htZW0pOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJZHJtX2dlbV9zaG1lbV9zZXRf cHVyZ2VhYmxlX2xvY2tlZChzaG1lbSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHJldDsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZ2VtX3NobWVtX3NldF9wdXJnZWFibGVf YW5kX2V2aWN0YWJsZSgpIC0gTWFrZSBHRU0gdW5wdXJnZWFibGUgYW5kDQo+ICsgKiAJCQkJ CQkgdW5ldmljdGFibGUgYnkgbWVtb3J5IHNocmlua2VyDQo+ICsgKiBAc2htZW06IHNobWVt IEdFTSBvYmplY3QNCj4gKyAqDQo+ICsgKiBUZWxsIG1lbW9yeSBzaHJpbmtlciB0aGF0IHRo aXMgR0VNIGNhbid0IGJlIHB1cmdlZCBhbmQgZXZpY3RlZC4gRWFjaA0KPiArICogc2V0X3B1 cmdlYWJsZV9hbmRfZXZpY3RhYmxlKCkgY2FsbCBtdXN0IGhhdmUgY29ycmVzcG9uZGluZw0K PiArICogdW5wdXJnZWFibGVfYW5kX3VuZXZpY3RhYmxlKCkgY2FsbC4gSWYgR0VNIHdhcyBw dXJnZWQsIHRoZW4gLUVOT01FTQ0KPiArICogaXMgcmV0dXJuZWQuDQo+ICsgKg0KPiArICog UmV0dXJuczoNCj4gKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg b24gZmFpbHVyZS4NCj4gKyAqLw0KPiAraW50IGRybV9nZW1fc2htZW1fc2V0X3B1cmdlYWJs ZV9hbmRfZXZpY3RhYmxlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWRtYV9yZXN2X2xvY2soc2htZW0tPmJhc2Uu cmVzdiwgTlVMTCk7DQo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV9zZXRfcHVyZ2VhYmxlX2Fu ZF9ldmljdGFibGVfbG9ja2VkKHNobWVtKTsNCj4gKwlkbWFfcmVzdl91bmxvY2soc2htZW0t PmJhc2UucmVzdik7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZ TUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9zZXRfcHVyZ2VhYmxlX2FuZF9ldmljdGFibGUpOw0K PiArDQo+ICsvKioNCj4gKyAqIGRybV9nZW1fc2htZW1fc2V0X3VucHVyZ2VhYmxlX2FuZF91 bmV2aWN0YWJsZSgpIC0gTWFrZSBHRU0gcHVyZ2VhYmxlIGFuZA0KPiArICogCQkJCQkJICAg ICBldmljdGFibGUgYnkgbWVtb3J5IHNocmlua2VyDQo+ICsgKiBAc2htZW06IHNobWVtIEdF TSBvYmplY3QNCj4gKyAqDQo+ICsgKiBUZWxsIG1lbW9yeSBzaHJpbmtlciB0aGF0IHRoaXMg R0VNIGNhbiBiZSBwdXJnZWQgYW5kIGV2aWN0ZWQuIEVhY2gNCj4gKyAqIHVucHVyZ2VhYmxl X2FuZF91bmV2aWN0YWJsZSgpIGNhbGwgbXVzdCBoYXZlIGNvcnJlc3BvbmRpbmcNCj4gKyAq IHNldF9wdXJnZWFibGVfYW5kX2V2aWN0YWJsZSgpIGNhbGwuIElmIEdFTSB3YXMgcHVyZ2Vk LCB0aGVuIC1FTk9NRU0NCj4gKyAqIGlzIHJldHVybmVkLg0KPiArICoNCj4gKyAqIFJldHVy bnM6DQo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUuDQo+ICsgKi8NCj4gK2ludCBkcm1fZ2VtX3NobWVtX3NldF91bnB1cmdlYWJsZV9h bmRfdW5ldmljdGFibGUoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4g K3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1 cHRpYmxlKHNobWVtLT5iYXNlLnJlc3YsIE5VTEwpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJl dHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBkcm1fZ2VtX3NobWVtX3NldF91bnB1cmdlYWJs ZV9hbmRfdW5ldmljdGFibGVfbG9ja2VkKHNobWVtKTsNCj4gKwlkbWFfcmVzdl91bmxvY2so c2htZW0tPmJhc2UucmVzdik7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQ T1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9zZXRfdW5wdXJnZWFibGVfYW5kX3VuZXZp Y3RhYmxlKTsNCj4gKw0KPiArc3RhdGljIGludA0KPiArZHJtX2dlbV9zaG1lbV9hY3F1aXJl X3BhZ2VzX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiAg IHsNCj4gICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7DQo+ ICAgCXN0cnVjdCBwYWdlICoqcGFnZXM7DQo+ICAgDQo+IC0JaWYgKHNobWVtLT5wYWdlc191 c2VfY291bnQrKyA+IDApDQo+ICsJaWYgKHNobWVtLT5tYWR2IDwgMCkgew0KPiArCQlXQVJO X09OKHNobWVtLT5wYWdlcyk7DQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArCX0NCj4gKw0K PiArCWlmIChzaG1lbS0+cGFnZXMpIHsNCj4gKwkJV0FSTl9PTighc2htZW0tPmV2aWN0ZWQp Ow0KPiAgIAkJcmV0dXJuIDA7DQo+ICsJfQ0KPiAgIA0KPiAgIAlwYWdlcyA9IGRybV9nZW1f Z2V0X3BhZ2VzKG9iaik7DQo+ICAgCWlmIChJU19FUlIocGFnZXMpKSB7DQo+ICAgCQlEUk1f REVCVUdfS01TKCJGYWlsZWQgdG8gZ2V0IHBhZ2VzICglbGQpXG4iLCBQVFJfRVJSKHBhZ2Vz KSk7DQo+IC0JCXNobWVtLT5wYWdlc191c2VfY291bnQgPSAwOw0KPiAgIAkJcmV0dXJuIFBU Ul9FUlIocGFnZXMpOw0KPiAgIAl9DQo+ICAgDQo+IEBAIC0xODksNiArNTA4LDI1IEBAIHN0 YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgCXJldHVybiAwOw0KPiAgIH0NCj4gICANCj4g K3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJaW50IGVycjsNCj4gKw0KPiAr CWlmIChzaG1lbS0+bWFkdiA8IDApDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJ aWYgKHNobWVtLT5wYWdlc191c2VfY291bnQrKyA+IDApDQo+ICsJCXJldHVybiAwOw0KPiAr DQo+ICsJZXJyID0gZHJtX2dlbV9zaG1lbV9hY3F1aXJlX3BhZ2VzX2xvY2tlZChzaG1lbSk7 DQo+ICsJaWYgKGVycikgew0KPiArCQlzaG1lbS0+cGFnZXNfdXNlX2NvdW50ID0gMDsNCj4g KwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiAgIC8qDQo+ICAgICogZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMgLSBBbGxvY2F0ZSBiYWNr aW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QNCj4gICAgKiBAc2htZW06IHNobWVt IEdFTSBvYmplY3QNCj4gQEAgLTIwOSwyMSArNTQ3LDM4IEBAIGludCBkcm1fZ2VtX3NobWVt X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiAgIAlp ZiAocmV0KQ0KPiAgIAkJcmV0dXJuIHJldDsNCj4gICAJcmV0ID0gZHJtX2dlbV9zaG1lbV9n ZXRfcGFnZXNfbG9ja2VkKHNobWVtKTsNCj4gKw0KPiArCWRybV9nZW1fc2htZW1fdXBkYXRl X3BhZ2VzX3N0YXRlX2xvY2tlZChzaG1lbSk7DQo+ICsNCj4gICAJZG1hX3Jlc3ZfdW5sb2Nr KHNobWVtLT5iYXNlLnJlc3YpOw0KPiAgIA0KPiAgIAlyZXR1cm4gcmV0Ow0KPiAgIH0NCj4g ICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKTsNCj4gICANCj4gLXN0 YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzX2xvY2tlZChzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiArc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV9n ZXRfcGFnZXNfbm9fZmFpbChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0K PiAgIHsNCj4gLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsN Cj4gKwlXQVJOX09OKHNobWVtLT5iYXNlLmltcG9ydF9hdHRhY2gpOw0KPiAgIA0KPiAtCWlm IChXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlc191c2VfY291bnQpKQ0KPiAtCQlyZXR1cm47 DQo+ICsJZG1hX3Jlc3ZfbG9jayhzaG1lbS0+YmFzZS5yZXN2LCBOVUxMKTsNCj4gICANCj4g LQlpZiAoLS1zaG1lbS0+cGFnZXNfdXNlX2NvdW50ID4gMCkNCj4gKwlpZiAoZHJtX2dlbV9z aG1lbV9nZXRfcGFnZXNfbG9ja2VkKHNobWVtKSkNCj4gKwkJc2htZW0tPnBhZ2VzX3VzZV9j b3VudCsrOw0KPiArDQo+ICsJZHJtX2dlbV9zaG1lbV91cGRhdGVfcGFnZXNfc3RhdGVfbG9j a2VkKHNobWVtKTsNCj4gKw0KPiArCWRtYV9yZXN2X3VubG9jayhzaG1lbS0+YmFzZS5yZXN2 KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2RybV9nZW1fc2htZW1fcmVsZWFz ZV9wYWdlc19sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsNCj4g Kw0KPiArCWlmICghc2htZW0tPnBhZ2VzKSB7DQo+ICsJCVdBUk5fT04oIXNobWVtLT5ldmlj dGVkICYmIHNobWVtLT5tYWR2ID49IDApOw0KPiAgIAkJcmV0dXJuOw0KPiArCX0NCj4gICAN Cj4gICAjaWZkZWYgQ09ORklHX1g4Ng0KPiAgIAlpZiAoc2htZW0tPm1hcF93YykNCj4gQEAg LTIzNiw2ICs1OTEsMjEgQEAgc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXNf bG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgCXNobWVt LT5wYWdlcyA9IE5VTEw7DQo+ICAgfQ0KPiAgIA0KPiArc3RhdGljIHZvaWQgZHJtX2dlbV9z aG1lbV9wdXRfcGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0pDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJh c2U7DQo+ICsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPnJlc3YtPmxvY2suYmFz ZSk7DQo+ICsNCj4gKwlpZiAoV0FSTl9PTighc2htZW0tPnBhZ2VzX3VzZV9jb3VudCkpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCWlmICgtLXNobWVtLT5wYWdlc191c2VfY291bnQgPiAw KQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlkcm1fZ2VtX3NobWVtX3JlbGVhc2VfcGFnZXNf bG9ja2VkKHNobWVtKTsNCj4gK30NCj4gKw0KPiAgIC8qDQo+ICAgICogZHJtX2dlbV9zaG1l bV9wdXRfcGFnZXMgLSBEZWNyZWFzZSB1c2UgY291bnQgb24gdGhlIGJhY2tpbmcgcGFnZXMg Zm9yIGEgc2htZW0gR0VNIG9iamVjdA0KPiAgICAqIEBzaG1lbTogc2htZW0gR0VNIG9iamVj dA0KPiBAQCAtMjQ2LDYgKzYxNiw3IEBAIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4gICB7DQo+ICAgCWRtYV9y ZXN2X2xvY2soc2htZW0tPmJhc2UucmVzdiwgTlVMTCk7DQo+ICAgCWRybV9nZW1fc2htZW1f cHV0X3BhZ2VzX2xvY2tlZChzaG1lbSk7DQo+ICsJZHJtX2dlbV9zaG1lbV91cGRhdGVfcGFn ZXNfc3RhdGVfbG9ja2VkKHNobWVtKTsNCj4gICAJZG1hX3Jlc3ZfdW5sb2NrKHNobWVtLT5i YXNlLnJlc3YpOw0KPiAgIH0NCj4gICBFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fcHV0 X3BhZ2VzKTsNCj4gQEAgLTI2Miw5ICs2MzMsMjEgQEAgRVhQT1JUX1NZTUJPTChkcm1fZ2Vt X3NobWVtX3B1dF9wYWdlcyk7DQo+ICAgICovDQo+ICAgaW50IGRybV9nZW1fc2htZW1fcGlu KHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICAgew0KPiArCWludCBl cnI7DQo+ICsNCj4gICAJV0FSTl9PTihzaG1lbS0+YmFzZS5pbXBvcnRfYXR0YWNoKTsNCj4g ICANCj4gLQlyZXR1cm4gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOw0KPiArCWVy ciA9IGRybV9nZW1fc2htZW1fc2V0X3VucHVyZ2VhYmxlX2FuZF91bmV2aWN0YWJsZShzaG1l bSk7DQo+ICsJaWYgKGVycikNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCWVyciA9IGRy bV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVtKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCWRy bV9nZW1fc2htZW1fc2V0X3B1cmdlYWJsZV9hbmRfZXZpY3RhYmxlKHNobWVtKTsNCj4gKwkJ cmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gICB9DQo+ICAgRVhQ T1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3Bpbik7DQo+ICAgDQo+IEBAIC0yODAsNiArNjYz LDcgQEAgdm9pZCBkcm1fZ2VtX3NobWVtX3VucGluKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pDQo+ICAgCVdBUk5fT04oc2htZW0tPmJhc2UuaW1wb3J0X2F0dGFjaCk7 DQo+ICAgDQo+ICAgCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsNCj4gKwlkcm1f Z2VtX3NobWVtX3NldF9wdXJnZWFibGVfYW5kX2V2aWN0YWJsZShzaG1lbSk7DQo+ICAgfQ0K PiAgIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV91bnBpbik7DQo+ICAgDQo+IEBAIC0z NTksNyArNzQzLDE4IEBAIGludCBkcm1fZ2VtX3NobWVtX3ZtYXAoc3RydWN0IGRybV9nZW1f c2htZW1fb2JqZWN0ICpzaG1lbSwNCj4gICAJcmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1 cHRpYmxlKHNobWVtLT5iYXNlLnJlc3YsIE5VTEwpOw0KPiAgIAlpZiAocmV0KQ0KPiAgIAkJ cmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IGRybV9nZW1fc2htZW1fc2V0X3VucHVyZ2Vh YmxlX2FuZF91bmV2aWN0YWJsZV9sb2NrZWQoc2htZW0pOw0KPiArCWlmIChyZXQpDQo+ICsJ CWdvdG8gdW5sb2NrOw0KPiArDQo+ICAgCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcF9sb2Nr ZWQoc2htZW0sIG1hcCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZHJtX2dlbV9zaG1lbV9zZXRf cHVyZ2VhYmxlX2FuZF9ldmljdGFibGVfbG9ja2VkKHNobWVtKTsNCj4gKwllbHNlDQo+ICsJ CWRybV9nZW1fc2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlX2xvY2tlZChzaG1lbSk7DQo+ICsN Cj4gK3VubG9jazoNCj4gICAJZG1hX3Jlc3ZfdW5sb2NrKHNobWVtLT5iYXNlLnJlc3YpOw0K PiAgIA0KPiAgIAlyZXR1cm4gcmV0Ow0KPiBAQCAtNDA0LDkgKzc5OSw5IEBAIHZvaWQgZHJt X2dlbV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSwN Cj4gICB7DQo+ICAgCWRtYV9yZXN2X2xvY2soc2htZW0tPmJhc2UucmVzdiwgTlVMTCk7DQo+ ICAgCWRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzaG1lbSwgbWFwKTsNCj4gKwlkcm1f Z2VtX3NobWVtX3VwZGF0ZV9wYWdlc19zdGF0ZV9sb2NrZWQoc2htZW0pOw0KPiArCWRybV9n ZW1fc2htZW1fc2V0X3B1cmdlYWJsZV9hbmRfZXZpY3RhYmxlX2xvY2tlZChzaG1lbSk7DQo+ ICAgCWRtYV9yZXN2X3VubG9jayhzaG1lbS0+YmFzZS5yZXN2KTsNCj4gLQ0KPiAtCWRybV9n ZW1fc2htZW1fdXBkYXRlX3B1cmdlYWJsZV9zdGF0dXMoc2htZW0pOw0KPiAgIH0NCj4gICBF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdnVubWFwKTsNCj4gICANCj4gQEAgLTQ0Nywy OSArODQyLDE0MCBAQCBpbnQgZHJtX2dlbV9zaG1lbV9tYWR2aXNlKHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0sIGludCBtYWR2KQ0KPiAgIA0KPiAgIAltYWR2ID0gc2ht ZW0tPm1hZHY7DQo+ICAgDQo+ICsJZHJtX2dlbV9zaG1lbV91cGRhdGVfcGFnZXNfc3RhdGVf bG9ja2VkKHNobWVtKTsNCj4gKw0KPiAgIAlkbWFfcmVzdl91bmxvY2soc2htZW0tPmJhc2Uu cmVzdik7DQo+ICAgDQo+ICAgCXJldHVybiAobWFkdiA+PSAwKTsNCj4gICB9DQo+ICAgRVhQ T1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX21hZHZpc2UpOw0KPiAgIA0KPiAtdm9pZCBkcm1f Z2VtX3NobWVtX3B1cmdlX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNo bWVtKQ0KPiArLyoqDQo+ICsgKiBkcm1fZ2VtX3NobWVtX3N3YXBfaW5fcGFnZXNfbG9ja2Vk KCkgLSBNb3ZlcyBzaG1lbSBwYWdlcyBiYWNrIHRvIG1lbW9yeQ0KPiArICogQHNobWVtOiBz aG1lbSBHRU0gb2JqZWN0DQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBtb3ZlcyBwYWdl cyBiYWNrIHRvIG1lbW9yeSBpZiB0aGV5IHdlcmUgcHJldmlvdXNseSBldmljdGVkDQo+ICsg KiBieSB0aGUgbWVtb3J5IHNocmlua2VyLg0KPiArICoNCj4gKyAqIFJldHVybnM6DQo+ICsg KiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ ICsgKi8NCj4gK2ludCBkcm1fZ2VtX3NobWVtX3N3YXBfaW5fcGFnZXNfbG9ja2VkKHN0cnVj dCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7DQo+ICsJc3RydWN0IHNnX3RhYmxlICpz Z3Q7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9iai0+ cmVzdi0+bG9jay5iYXNlKTsNCj4gKw0KPiArCWlmIChzaG1lbS0+ZXZpY3RlZCkgew0KPiAr CQlyZXQgPSBkcm1fZ2VtX3NobWVtX2FjcXVpcmVfcGFnZXNfbG9ja2VkKHNobWVtKTsNCj4g KwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJc2d0ID0gZHJtX2dl bV9zaG1lbV9nZXRfc2dfdGFibGUoc2htZW0pOw0KPiArCQlpZiAoSVNfRVJSKHNndCkpDQo+ ICsJCQlyZXR1cm4gUFRSX0VSUihzZ3QpOw0KPiArDQo+ICsJCXJldCA9IGRtYV9tYXBfc2d0 YWJsZShvYmotPmRldi0+ZGV2LCBzZ3QsDQo+ICsJCQkJICAgICAgRE1BX0JJRElSRUNUSU9O QUwsIDApOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJCQlzZ19mcmVlX3RhYmxlKHNndCk7DQo+ ICsJCQlrZnJlZShzZ3QpOw0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwkJfQ0KPiArDQo+ICsJ CXNobWVtLT5zZ3QgPSBzZ3Q7DQo+ICsJCXNobWVtLT5ldmljdGVkID0gZmFsc2U7DQo+ICsJ CXNobWVtLT5wYWdlc19zdGF0ZSA9IERSTV9HRU1fU0hNRU1fUEFHRVNfU1RBVEVfUElOTkVE Ow0KPiArDQo+ICsJCWRybV9nZW1fc2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlX2xvY2tlZChz aG1lbSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHNobWVtLT5wYWdlcyA/IDAgOiAtRU5P TUVNOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9zd2FwX2lu X3BhZ2VzX2xvY2tlZCk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2dlbV9zaG1lbV9zd2Fw X2luX2xvY2tlZCgpIC0gTW92ZXMgc2htZW0gR0VNIGJhY2sgdG8gbWVtb3J5DQo+ICsgKiBA c2htZW06IHNobWVtIEdFTSBvYmplY3QNCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIG1v dmVzIHNobWVtIEdFTSBiYWNrIHRvIG1lbW9yeSBpZiBpdCB3YXMgcHJldmlvdXNseSBldmlj dGVkDQo+ICsgKiBieSB0aGUgbWVtb3J5IHNocmlua2VyLiBUaGUgR0VNIGlzIHJlYWR5IHRv IHVzZSBvbiBzdWNjZXNzLg0KPiArICoNCj4gKyAqIFJldHVybnM6DQo+ICsgKiAwIG9uIHN1 Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ICsgKi8NCj4g K2ludCBkcm1fZ2VtX3NobWVtX3N3YXBfaW5fbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVt X29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmog PSAmc2htZW0tPmJhc2U7DQo+ICsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPnJl c3YtPmxvY2suYmFzZSk7DQo+ICsNCj4gKwlpZiAoc2htZW0tPmV2aWN0ZWQpDQo+ICsJCXJl dHVybiBvYmotPmZ1bmNzLT5zd2FwX2luKG9iaik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fc3dhcF9pbl9sb2NrZWQp Ow0KPiArDQo+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3VucGluX3BhZ2VzX2xvY2tl ZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiAgIHsNCj4gICAJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7DQo+ICAgCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsNCj4gICANCj4gLQlXQVJOX09OKCFkcm1fZ2Vt X3NobWVtX2lzX3B1cmdlYWJsZShzaG1lbSkpOw0KPiArCWlmIChzaG1lbS0+ZXZpY3RlZCkN Cj4gKwkJcmV0dXJuOw0KPiAgIA0KPiAgIAlkbWFfdW5tYXBfc2d0YWJsZShkZXYtPmRldiwg c2htZW0tPnNndCwgRE1BX0JJRElSRUNUSU9OQUwsIDApOw0KPiArCWRybV9nZW1fc2htZW1f cmVsZWFzZV9wYWdlc19sb2NrZWQoc2htZW0pOw0KPiArCWRybV92bWFfbm9kZV91bm1hcCgm b2JqLT52bWFfbm9kZSwgZGV2LT5hbm9uX2lub2RlLT5pX21hcHBpbmcpOw0KPiArDQo+ICAg CXNnX2ZyZWVfdGFibGUoc2htZW0tPnNndCk7DQo+ICAgCWtmcmVlKHNobWVtLT5zZ3QpOw0K PiAgIAlzaG1lbS0+c2d0ID0gTlVMTDsNCj4gK30NCj4gICANCj4gLQlkcm1fZ2VtX3NobWVt X3B1dF9wYWdlc19sb2NrZWQoc2htZW0pOw0KPiArLyoqDQo+ICsgKiBkcm1fZ2VtX3NobWVt X2V2aWN0X2xvY2tlZCAtIEV2aWN0IHNobWVtIHBhZ2VzDQo+ICsgKiBAc2htZW06IHNobWVt IEdFTSBvYmplY3QNCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIHVucGlucyBzaG1lbSBw YWdlcywgYWxsb3dpbmcgdGhlbSB0byBiZSBzd2FwcGVkIG91dCBmcm9tDQo+ICsgKiBtZW1v cnkuDQo+ICsgKi8NCj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV9ldmljdF9sb2NrZWQoc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsNCj4gICANCj4gLQlzaG1lbS0+bWFkdiA9 IC0xOw0KPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9iai0+cmVzdi0+bG9jay5iYXNlKTsN Cj4gICANCj4gLQlkcm1fdm1hX25vZGVfdW5tYXAoJm9iai0+dm1hX25vZGUsIGRldi0+YW5v bl9pbm9kZS0+aV9tYXBwaW5nKTsNCj4gKwlXQVJOX09OKCFkcm1fZ2VtX3NobWVtX2lzX2V2 aWN0YWJsZShzaG1lbSkpOw0KPiArCVdBUk5fT04oc2htZW0tPm1hZHYgPCAwKTsNCj4gKwlX QVJOX09OKHNobWVtLT5ldmljdGVkKTsNCj4gKw0KPiArCWRybV9nZW1fc2htZW1fdW5waW5f cGFnZXNfbG9ja2VkKHNobWVtKTsNCj4gKw0KPiArCXNobWVtLT5ldmljdGVkID0gdHJ1ZTsN Cj4gKwlkcm1fZ2VtX3NobWVtX3NldF9wYWdlc19zdGF0ZShzaG1lbSwgRFJNX0dFTV9TSE1F TV9QQUdFU19TVEFURV9FVklDVEVEKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRy bV9nZW1fc2htZW1fZXZpY3RfbG9ja2VkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZ2Vt X3NobWVtX3B1cmdlX2xvY2tlZCAtIFB1cmdlIHNobWVtIHBhZ2VzDQo+ICsgKiBAc2htZW06 IHNobWVtIEdFTSBvYmplY3QNCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIHBlcm1hbmVu dGx5IHJlbGVhc2VzIHNobWVtIHBhZ2VzLg0KPiArICovDQo+ICt2b2lkIGRybV9nZW1fc2ht ZW1fcHVyZ2VfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pDQo+ ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7DQo+ ICsNCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPnJlc3YtPmxvY2suYmFzZSk7DQo+ ICsNCj4gKwlXQVJOX09OKCFkcm1fZ2VtX3NobWVtX2lzX3B1cmdlYWJsZShzaG1lbSkpOw0K PiArCVdBUk5fT04oc2htZW0tPm1hZHYgPCAwKTsNCj4gKw0KPiArCWRybV9nZW1fc2htZW1f dW5waW5fcGFnZXNfbG9ja2VkKHNobWVtKTsNCj4gICAJZHJtX2dlbV9mcmVlX21tYXBfb2Zm c2V0KG9iaik7DQo+ICAgDQo+ICAgCS8qIE91ciBnb2FsIGhlcmUgaXMgdG8gcmV0dXJuIGFz IG11Y2ggb2YgdGhlIG1lbW9yeSBhcw0KPiBAQCAtNDgwLDYgKzk4Niw5IEBAIHZvaWQgZHJt X2dlbV9zaG1lbV9wdXJnZV9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkNCj4gICAJc2htZW1fdHJ1bmNhdGVfcmFuZ2UoZmlsZV9pbm9kZShvYmotPmZpbHAp LCAwLCAobG9mZl90KS0xKTsNCj4gICANCj4gICAJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2Vz KGZpbGVfaW5vZGUob2JqLT5maWxwKS0+aV9tYXBwaW5nLCAwLCAobG9mZl90KS0xKTsNCj4g Kw0KPiArCXNobWVtLT5tYWR2ID0gLTE7DQo+ICsJZHJtX2dlbV9zaG1lbV9zZXRfcGFnZXNf c3RhdGUoc2htZW0sIERSTV9HRU1fU0hNRU1fUEFHRVNfU1RBVEVfUFVSR0VEKTsNCj4gICB9 DQo+ICAgRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3B1cmdlX2xvY2tlZCk7DQo+ICAg DQo+IEBAIC01NDMsMjIgKzEwNTIsMzEgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZHJtX2dlbV9z aG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikNCj4gICAJdm1fZmF1bHRfdCByZXQ7 DQo+ICAgCXN0cnVjdCBwYWdlICpwYWdlOw0KPiAgIAlwZ29mZl90IHBhZ2Vfb2Zmc2V0Ow0K PiArCWJvb2wgcGFnZXNfaW5hY3RpdmU7DQo+ICsJaW50IGVycjsNCj4gICANCj4gICAJLyog V2UgZG9uJ3QgdXNlIHZtZi0+cGdvZmYgc2luY2UgdGhhdCBoYXMgdGhlIGZha2Ugb2Zmc2V0 ICovDQo+ICAgCXBhZ2Vfb2Zmc2V0ID0gKHZtZi0+YWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQp ID4+IFBBR0VfU0hJRlQ7DQo+ICAgDQo+ICAgCWRtYV9yZXN2X2xvY2soc2htZW0tPmJhc2Uu cmVzdiwgTlVMTCk7DQo+ICAgDQo+IC0JaWYgKHBhZ2Vfb2Zmc2V0ID49IG51bV9wYWdlcyB8 fA0KPiAtCSAgICBXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlcykgfHwNCj4gLQkgICAgc2ht ZW0tPm1hZHYgPCAwKSB7DQo+ICsJcGFnZXNfaW5hY3RpdmUgPSBzaG1lbS0+cGFnZXNfc3Rh dGUgPCBEUk1fR0VNX1NITUVNX1BBR0VTX1NUQVRFX1BJTk5FRDsNCj4gKwlXQVJOX09OX09O Q0UoIXNobWVtLT5wYWdlcyBeIHBhZ2VzX2luYWN0aXZlKTsNCj4gKw0KPiArCWlmIChwYWdl X29mZnNldCA+PSBudW1fcGFnZXMgfHwgKCFzaG1lbS0+cGFnZXMgJiYgIXNobWVtLT5ldmlj dGVkKSkgew0KPiAgIAkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOw0KPiAgIAl9IGVsc2Ugew0K PiArCQllcnIgPSBkcm1fZ2VtX3NobWVtX3N3YXBfaW5fbG9ja2VkKHNobWVtKTsNCj4gKwkJ aWYgKGVycikgew0KPiArCQkJcmV0ID0gVk1fRkFVTFRfT09NOw0KPiArCQkJZ290byB1bmxv Y2s7DQo+ICsJCX0NCj4gKw0KPiAgIAkJcGFnZSA9IHNobWVtLT5wYWdlc1twYWdlX29mZnNl dF07DQo+ICAgDQo+ICAgCQlyZXQgPSB2bWZfaW5zZXJ0X3Bmbih2bWEsIHZtZi0+YWRkcmVz cywgcGFnZV90b19wZm4ocGFnZSkpOw0KPiAgIAl9DQo+IC0NCj4gK3VubG9jazoNCj4gICAJ ZG1hX3Jlc3ZfdW5sb2NrKHNobWVtLT5iYXNlLnJlc3YpOw0KPiAgIA0KPiAgIAlyZXR1cm4g cmV0Ow0KPiBAQCAtNTY4LDEzICsxMDg2LDggQEAgc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1l bV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQ0KPiAgIHsNCj4gICAJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsNCj4gICAJ c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1f b2JqKG9iaik7DQo+IC0JaW50IHJldDsNCj4gLQ0KPiAtCVdBUk5fT04oc2htZW0tPmJhc2Uu aW1wb3J0X2F0dGFjaCk7DQo+IC0NCj4gLQlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9wYWdl cyhzaG1lbSk7DQo+IC0JV0FSTl9PTl9PTkNFKHJldCAhPSAwKTsNCj4gICANCj4gKwlkcm1f Z2VtX3NobWVtX2dldF9wYWdlc19ub19mYWlsKHNobWVtKTsNCj4gICAJZHJtX2dlbV92bV9v cGVuKHZtYSk7DQo+ICAgfQ0KPiAgIA0KPiBAQCAtNzE2LDYgKzEyMjksOCBAQCBzdHJ1Y3Qg c2dfdGFibGUgKmRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzX3NndChzdHJ1Y3QgZHJtX2dlbV9z aG1lbV9vYmplY3QgKnNobWVtKQ0KPiAgIA0KPiAgIAlzaG1lbS0+c2d0ID0gc2d0Ow0KPiAg IA0KPiArCWRybV9nZW1fc2htZW1fdXBkYXRlX3BhZ2VzX3N0YXRlKHNobWVtKTsNCj4gKw0K PiAgIAlyZXR1cm4gc2d0Ow0KPiAgIA0KPiAgIGVycl9mcmVlX3NndDoNCj4gQEAgLTc2Miw2 ICsxMjc3LDIwMiBAQCBkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LA0KPiAgIH0NCj4gICBFWFBPUlRfU1lNQk9MX0dQTChkcm1f Z2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSk7DQo+ICAgDQo+ICtzdGF0aWMgc3Ry dWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIgKg0KPiArdG9fZHJtX3Nocmlua2VyKHN0cnVj dCBzaHJpbmtlciAqc2hyaW5rZXIpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihz aHJpbmtlciwgc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIsIGJhc2UpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZw0KPiArZHJtX2dlbV9zaG1lbV9zaHJpbmtl cl9jb3VudF9vYmplY3RzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsDQo+ICsJCQkJICAg ICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fZ2Vt X3NobWVtX3Nocmlua2VyICpnZW1fc2hyaW5rZXIgPSB0b19kcm1fc2hyaW5rZXIoc2hyaW5r ZXIpOw0KPiArCXU2NCBjb3VudCA9IFJFQURfT05DRShnZW1fc2hyaW5rZXItPnNocmlua2Fi bGVfY291bnQpOw0KPiArDQo+ICsJaWYgKGNvdW50ID49IFNIUklOS19FTVBUWSkNCj4gKwkJ cmV0dXJuIFNIUklOS19FTVBUWSAtIDE7DQo+ICsNCj4gKwlyZXR1cm4gY291bnQgPzogU0hS SU5LX0VNUFRZOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZw0KPiArZHJt X2dlbV9zaG1lbV9zaHJpbmtlcl9ydW5fb2JqZWN0c19zY2FuKHN0cnVjdCBzaHJpbmtlciAq c2hyaW5rZXIsDQo+ICsJCQkJCXVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwNCj4gKwkJCQkJ Ym9vbCAqbG9ja19jb250ZW50aW9uLA0KPiArCQkJCQlib29sIGV2aWN0KQ0KPiArew0KPiAr CXN0cnVjdCBkcm1fZ2VtX3NobWVtX3Nocmlua2VyICpnZW1fc2hyaW5rZXIgPSB0b19kcm1f c2hyaW5rZXIoc2hyaW5rZXIpOw0KPiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAq c2htZW07DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBzdGlsbF9pbl9saXN0Ow0KPiArCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqOw0KPiArCXVuc2lnbmVkIGxvbmcgZnJlZWQgPSAwOw0K PiArCXN0cnVjdCBsaXN0X2hlYWQgKmxydTsNCj4gKwlzaXplX3QgcGFnZV9jb3VudDsNCj4g Kw0KPiArCUlOSVRfTElTVF9IRUFEKCZzdGlsbF9pbl9saXN0KTsNCj4gKw0KPiArCW11dGV4 X2xvY2soJmdlbV9zaHJpbmtlci0+bG9jayk7DQo+ICsNCj4gKwlpZiAoZXZpY3QpDQo+ICsJ CWxydSA9ICZnZW1fc2hyaW5rZXItPmxydV9ldmljdGFibGU7DQo+ICsJZWxzZQ0KPiArCQls cnUgPSAmZ2VtX3Nocmlua2VyLT5scnVfcHVyZ2VhYmxlOw0KPiArDQo+ICsJd2hpbGUgKGZy ZWVkIDwgbnJfdG9fc2Nhbikgew0KPiArCQlzaG1lbSA9IGxpc3RfZmlyc3RfZW50cnlfb3Jf bnVsbChscnUsIHR5cGVvZigqc2htZW0pLCBtYWR2X2xpc3QpOw0KPiArCQlpZiAoIXNobWVt KQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJb2JqID0gJnNobWVtLT5iYXNlOw0KPiArCQlw YWdlX2NvdW50ID0gb2JqLT5zaXplID4+IFBBR0VfU0hJRlQ7DQo+ICsJCWxpc3RfbW92ZV90 YWlsKCZzaG1lbS0+bWFkdl9saXN0LCAmc3RpbGxfaW5fbGlzdCk7DQo+ICsNCj4gKwkJaWYg KGV2aWN0ICYmIGdldF9ucl9zd2FwX3BhZ2VzKCkgPCBwYWdlX2NvdW50KQ0KPiArCQkJY29u dGludWU7DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogSWYgaXQncyBpbiB0aGUgcHJvY2VzcyBv ZiBiZWluZyBmcmVlZCwgZ2VtX29iamVjdC0+ZnJlZSgpDQo+ICsJCSAqIG1heSBiZSBibG9j a2VkIG9uIGxvY2sgd2FpdGluZyB0byByZW1vdmUgaXQuICBTbyBqdXN0DQo+ICsJCSAqIHNr aXAgaXQuDQo+ICsJCSAqLw0KPiArCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZvYmot PnJlZmNvdW50KSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCW11dGV4X3VubG9jaygm Z2VtX3Nocmlua2VyLT5sb2NrKTsNCj4gKw0KPiArCQkvKiBwcmV2ZW50IHJhY2luZyB3aXRo IGpvYi1zdWJtaXNzaW9uIGNvZGUgcGF0aHMgKi8NCj4gKwkJaWYgKCFkbWFfcmVzdl90cnls b2NrKG9iai0+cmVzdikpIHsNCj4gKwkJCSpsb2NrX2NvbnRlbnRpb24gfD0gdHJ1ZTsNCj4g KwkJCWdvdG8gc2hyaW5rZXJfbG9jazsNCj4gKwkJfQ0KPiArDQo+ICsJCS8qIHByZXZlbnQg cmFjaW5nIHdpdGggdGhlIGRtYS1idWYgZXhwb3J0aW5nICovDQo+ICsJCWlmICghbXV0ZXhf dHJ5bG9jaygmZ2VtX3Nocmlua2VyLT5kZXYtPm9iamVjdF9uYW1lX2xvY2spKSB7DQo+ICsJ CQkqbG9ja19jb250ZW50aW9uIHw9IHRydWU7DQo+ICsJCQlnb3RvIHJlc3ZfdW5sb2NrOw0K PiArCQl9DQo+ICsNCj4gKwkJLyogY2hlY2sgd2hldGhlciBoL3cgdXNlcyB0aGlzIG9iamVj dCAqLw0KPiArCQlpZiAoIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWQob2JqLT5yZXN2LCBETUFf UkVTVl9VU0FHRV9XUklURSkpDQo+ICsJCQlnb3RvIG9iamVjdF9uYW1lX3VubG9jazsNCj4g Kw0KPiArCQkvKiBHRU0gbWF5J3ZlIGJlY29tZSB1bnB1cmdlYWJsZSB3aGlsZSBzaHJpbmtl ciB3YXMgdW5sb2NrZWQgKi8NCj4gKwkJaWYgKGV2aWN0KSB7DQo+ICsJCQlpZiAoIWRybV9n ZW1fc2htZW1faXNfZXZpY3RhYmxlKHNobWVtKSkNCj4gKwkJCQlnb3RvIG9iamVjdF9uYW1l X3VubG9jazsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCWlmICghZHJtX2dlbV9zaG1lbV9pc19w dXJnZWFibGUoc2htZW0pKQ0KPiArCQkJCWdvdG8gb2JqZWN0X25hbWVfdW5sb2NrOw0KPiAr CQl9DQo+ICsNCj4gKwkJaWYgKGV2aWN0KQ0KPiArCQkJZnJlZWQgKz0gb2JqLT5mdW5jcy0+ ZXZpY3Qob2JqKTsNCj4gKwkJZWxzZQ0KPiArCQkJZnJlZWQgKz0gb2JqLT5mdW5jcy0+cHVy Z2Uob2JqKTsNCj4gK29iamVjdF9uYW1lX3VubG9jazoNCj4gKwkJbXV0ZXhfdW5sb2NrKCZn ZW1fc2hyaW5rZXItPmRldi0+b2JqZWN0X25hbWVfbG9jayk7DQo+ICtyZXN2X3VubG9jazoN Cj4gKwkJZG1hX3Jlc3ZfdW5sb2NrKG9iai0+cmVzdik7DQo+ICtzaHJpbmtlcl9sb2NrOg0K PiArCQlkcm1fZ2VtX29iamVjdF9wdXQoJnNobWVtLT5iYXNlKTsNCj4gKwkJbXV0ZXhfbG9j aygmZ2VtX3Nocmlua2VyLT5sb2NrKTsNCj4gKwl9DQo+ICsNCj4gKwlsaXN0X3NwbGljZV90 YWlsKCZzdGlsbF9pbl9saXN0LCBscnUpOw0KPiArDQo+ICsJbXV0ZXhfdW5sb2NrKCZnZW1f c2hyaW5rZXItPmxvY2spOw0KPiArDQo+ICsJcmV0dXJuIGZyZWVkOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdW5zaWduZWQgbG9uZw0KPiArZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl9zY2Fu X29iamVjdHMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwNCj4gKwkJCQkgICAgc3RydWN0 IHNocmlua19jb250cm9sICpzYykNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIG5yX3RvX3Nj YW4gPSBzYy0+bnJfdG9fc2NhbjsNCj4gKwlib29sIGxvY2tfY29udGVudGlvbiA9IGZhbHNl Ow0KPiArCXVuc2lnbmVkIGxvbmcgZnJlZWQ7DQo+ICsNCj4gKwkvKiBwdXJnZSBhcyBtYW55 IG9iamVjdHMgYXMgd2UgY2FuICovDQo+ICsJZnJlZWQgPSBkcm1fZ2VtX3NobWVtX3Nocmlu a2VyX3J1bl9vYmplY3RzX3NjYW4oc2hyaW5rZXIsIG5yX3RvX3NjYW4sDQo+ICsJCQkJCQkJ JmxvY2tfY29udGVudGlvbiwgZmFsc2UpOw0KPiArCW5yX3RvX3NjYW4gLT0gZnJlZWQ7DQo+ ICsNCj4gKwkvKiBldmljdCBhcyBtYW55IG9iamVjdHMgYXMgd2UgY2FuICovDQo+ICsJaWYg KGZyZWVkIDwgbnJfdG9fc2NhbikNCj4gKwkJZnJlZWQgKz0gZHJtX2dlbV9zaG1lbV9zaHJp bmtlcl9ydW5fb2JqZWN0c19zY2FuKHNocmlua2VyLA0KPiArCQkJCQkJCQkgbnJfdG9fc2Nh biwNCj4gKwkJCQkJCQkJICZsb2NrX2NvbnRlbnRpb24sDQo+ICsJCQkJCQkJCSB0cnVlKTsN Cj4gKw0KPiArCXJldHVybiAoIWZyZWVkICYmICFsb2NrX2NvbnRlbnRpb24pID8gU0hSSU5L X1NUT1AgOiBmcmVlZDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZ2VtX3NobWVt X3Nocmlua2VyX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBzaG1lbSBzaHJpbmtlcg0KPiArICog QGRldjogRFJNIGRldmljZQ0KPiArICoNCj4gKyAqIFJldHVybnM6DQo+ICsgKiAwIG9uIHN1 Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuDQo+ICsgKi8NCj4g K2ludCBkcm1fZ2VtX3NobWVtX3Nocmlua2VyX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIgKmdlbV9z aHJpbmtlcjsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJaWYgKFdBUk5fT04oZGV2LT5zaG1l bV9zaHJpbmtlcikpDQo+ICsJCXJldHVybiAtRUJVU1k7DQo+ICsNCj4gKwlnZW1fc2hyaW5r ZXIgPSBremFsbG9jKHNpemVvZigqZ2VtX3Nocmlua2VyKSwgR0ZQX0tFUk5FTCk7DQo+ICsJ aWYgKCFnZW1fc2hyaW5rZXIpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJZ2Vt X3Nocmlua2VyLT5iYXNlLmNvdW50X29iamVjdHMgPSBkcm1fZ2VtX3NobWVtX3Nocmlua2Vy X2NvdW50X29iamVjdHM7DQo+ICsJZ2VtX3Nocmlua2VyLT5iYXNlLnNjYW5fb2JqZWN0cyA9 IGRybV9nZW1fc2htZW1fc2hyaW5rZXJfc2Nhbl9vYmplY3RzOw0KPiArCWdlbV9zaHJpbmtl ci0+YmFzZS5zZWVrcyA9IERFRkFVTFRfU0VFS1M7DQo+ICsJZ2VtX3Nocmlua2VyLT5kZXYg PSBkZXY7DQo+ICsNCj4gKwlJTklUX0xJU1RfSEVBRCgmZ2VtX3Nocmlua2VyLT5scnVfcHVy Z2VhYmxlKTsNCj4gKwlJTklUX0xJU1RfSEVBRCgmZ2VtX3Nocmlua2VyLT5scnVfZXZpY3Rh YmxlKTsNCj4gKwlJTklUX0xJU1RfSEVBRCgmZ2VtX3Nocmlua2VyLT5scnVfZXZpY3RlZCk7 DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmdlbV9zaHJpbmtlci0+bHJ1X2FjdGl2ZSk7DQo+ICsJ bXV0ZXhfaW5pdCgmZ2VtX3Nocmlua2VyLT5sb2NrKTsNCj4gKw0KPiArCWRldi0+c2htZW1f c2hyaW5rZXIgPSBnZW1fc2hyaW5rZXI7DQo+ICsNCj4gKwllcnIgPSByZWdpc3Rlcl9zaHJp bmtlcigmZ2VtX3Nocmlua2VyLT5iYXNlKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCWRldi0+ c2htZW1fc2hyaW5rZXIgPSBOVUxMOw0KPiArCQlrZnJlZShnZW1fc2hyaW5rZXIpOw0KPiAr CQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArRVhQ T1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl9yZWdpc3Rlcik7DQo+ICsN Cj4gKy8qKg0KPiArICogZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl91bnJlZ2lzdGVyKCkgLSBV bnJlZ2lzdGVyIHNobWVtIHNocmlua2VyDQo+ICsgKiBAZGV2OiBEUk0gZGV2aWNlDQo+ICsg Ki8NCj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5r ZXIgKmdlbV9zaHJpbmtlciA9IGRldi0+c2htZW1fc2hyaW5rZXI7DQo+ICsNCj4gKwlpZiAo Z2VtX3Nocmlua2VyKSB7DQo+ICsJCXVucmVnaXN0ZXJfc2hyaW5rZXIoJmdlbV9zaHJpbmtl ci0+YmFzZSk7DQo+ICsJCVdBUk5fT04oIWxpc3RfZW1wdHkoJmdlbV9zaHJpbmtlci0+bHJ1 X3B1cmdlYWJsZSkpOw0KPiArCQlXQVJOX09OKCFsaXN0X2VtcHR5KCZnZW1fc2hyaW5rZXIt PmxydV9ldmljdGFibGUpKTsNCj4gKwkJV0FSTl9PTighbGlzdF9lbXB0eSgmZ2VtX3Nocmlu a2VyLT5scnVfZXZpY3RlZCkpOw0KPiArCQlXQVJOX09OKCFsaXN0X2VtcHR5KCZnZW1fc2hy aW5rZXItPmxydV9hY3RpdmUpKTsNCj4gKwkJbXV0ZXhfZGVzdHJveSgmZ2VtX3Nocmlua2Vy LT5sb2NrKTsNCj4gKwkJZGV2LT5zaG1lbV9zaHJpbmtlciA9IE5VTEw7DQo+ICsJCWtmcmVl KGdlbV9zaHJpbmtlcik7DQo+ICsJfQ0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJt X2dlbV9zaG1lbV9zaHJpbmtlcl91bnJlZ2lzdGVyKTsNCj4gKw0KPiAgIE1PRFVMRV9ERVND UklQVElPTigiRFJNIFNITUVNIG1lbW9yeS1tYW5hZ2VtZW50IGhlbHBlcnMiKTsNCj4gICBN T0RVTEVfSU1QT1JUX05TKERNQV9CVUYpOw0KPiAgIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaCBiL2luY2x1ZGUv ZHJtL2RybV9kZXZpY2UuaA0KPiBpbmRleCA5OTIzYzdhNjg4NWUuLjkyOTU0NmNhZDg5NCAx MDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RldmljZS5oDQo+ICsrKyBiL2luY2x1 ZGUvZHJtL2RybV9kZXZpY2UuaA0KPiBAQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgZHJtX3Zi bGFua19jcnRjOw0KPiAgIHN0cnVjdCBkcm1fdm1hX29mZnNldF9tYW5hZ2VyOw0KPiAgIHN0 cnVjdCBkcm1fdnJhbV9tbTsNCj4gICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsNCj4gK3N0cnVj dCBkcm1fZ2VtX3NobWVtX3Nocmlua2VyOw0KPiAgIA0KPiAgIHN0cnVjdCBpbm9kZTsNCj4g ICANCj4gQEAgLTI3Nyw2ICsyNzgsOSBAQCBzdHJ1Y3QgZHJtX2RldmljZSB7DQo+ICAgCS8q KiBAdnJhbV9tbTogVlJBTSBNTSBtZW1vcnkgbWFuYWdlciAqLw0KPiAgIAlzdHJ1Y3QgZHJt X3ZyYW1fbW0gKnZyYW1fbW07DQo+ICAgDQo+ICsJLyoqIEBzaG1lbV9zaHJpbmtlcjogU0hN RU0gR0VNIG1lbW9yeSBzaHJpbmtlciAqLw0KPiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX3No cmlua2VyICpzaG1lbV9zaHJpbmtlcjsNCj4gKw0KPiAgIAkvKioNCj4gICAJICogQHN3aXRj aF9wb3dlcl9zdGF0ZToNCj4gICAJICoNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9nZW0uaCBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaA0KPiBpbmRleCA5ZDdjNjFhMTIyZGMu LjM5MGQxY2UwOGVkMyAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbS5oDQo+ ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaA0KPiBAQCAtMTcyLDYgKzE3Miw0MSBAQCBz dHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3Mgew0KPiAgIAkgKiBUaGlzIGlzIG9wdGlvbmFs IGJ1dCBuZWNlc3NhcnkgZm9yIG1tYXAgc3VwcG9ydC4NCj4gICAJICovDQo+ICAgCWNvbnN0 IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOw0KPiArDQo+ICsJLyoqDQo+ ICsJICogQHB1cmdlOg0KPiArCSAqDQo+ICsJICogUmVsZWFzZXMgdGhlIEdFTSBvYmplY3Qn cyBhbGxvY2F0ZWQgYmFja2luZyBzdG9yYWdlIHRvIHRoZSBzeXN0ZW0uDQo+ICsJICoNCj4g KwkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCBoYXZlIGJlZW4gZnJlZWQg YnkgcHVyZ2luZyB0aGUgR0VNIG9iamVjdC4NCj4gKwkgKg0KPiArCSAqIFRoaXMgY2FsbGJh Y2sgaXMgdXNlZCBieSB0aGUgR0VNIHNocmlua2VyLg0KPiArCSAqLw0KPiArCXVuc2lnbmVk IGxvbmcgKCpwdXJnZSkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOw0KPiArDQo+ICsJ LyoqDQo+ICsJICogQGV2aWN0Og0KPiArCSAqDQo+ICsJICogVW5waW5zIHRoZSBHRU0gb2Jq ZWN0J3MgYWxsb2NhdGVkIGJhY2tpbmcgc3RvcmFnZSwgYWxsb3dpbmcgc2htZW0gcGFnZXMN Cj4gKwkgKiB0byBiZSBzd2FwcGVkIG91dC4NCg0KV2hhdCdzIHRoZSBkaWZmZXJlbmNlIHRv IHRoZSBleGlzdGluZyB1bnBpbigpIGNhbGxiYWNrPw0KDQo+ICsJICoNCj4gKwkgKiBSZXR1 cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCBoYXZlIGJlZW4gdW5waW5uZWQuDQo+ICsJ ICoNCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgdGhlIEdFTSBzaHJpbmtlci4N Cj4gKwkgKi8NCj4gKwl1bnNpZ25lZCBsb25nICgqZXZpY3QpKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsNCj4gKw0KPiArCS8qKg0KPiArCSAqIEBzd2FwX2luOg0KPiArCSAqDQo+ ICsJICogUGlucyBHRU0gb2JqZWN0J3MgYWxsb2NhdGVkIGJhY2tpbmcgc3RvcmFnZSBpZiBp dCB3YXMgcHJldmlvdXNseSBldmljdGVkLA0KPiArCSAqIG1vdmluZyBzd2FwcGVkIG91dCBw YWdlcyBiYWNrIHRvIG1lbW9yeS4NCj4gKwkgKg0KPiArCSAqIFJldHVybnMgMCBvbiBzdWNj ZXNzLCBvciAtZXJybm8gb24gZXJyb3IuDQo+ICsJICoNCj4gKwkgKiBUaGlzIGNhbGxiYWNr IGlzIHVzZWQgYnkgdGhlIEdFTSBzaHJpbmtlci4NCj4gKwkgKi8NCj4gKwlpbnQgKCpzd2Fw X2luKShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7DQoNCldoeSBkbyB5b3UgbmVlZCBz d2FwX2luKCk/IFRoaXMgY2FuIGJlIGRvbmUgb24tZGVtYW5kIGFzIHBhcnQgb2YgYSBwaW4g DQpvciB2bWFwIG9wZXJhdGlvbi4NCg0KPiAgIH07DQo+ICAgDQo+ICAgLyoqDQo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oIGIvaW5jbHVkZS9k cm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaA0KPiBpbmRleCA3MDg4OTUzMzk2MmEuLmE2NTU1 N2I0NDZlNiAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxw ZXIuaA0KPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oDQo+IEBA IC02LDYgKzYsNyBAQA0KPiAgICNpbmNsdWRlIDxsaW51eC9mcy5oPg0KPiAgICNpbmNsdWRl IDxsaW51eC9tbS5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3Nocmlua2VyLmg+DQo+ICAgDQo+ICAgI2luY2x1ZGUgPGRybS9kcm1fZmls ZS5oPg0KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPg0KPiBAQCAtMTUsOCArMTYsMTgg QEANCj4gICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Ow0KPiAgIHN0cnVjdCBkcm1fbW9k ZV9jcmVhdGVfZHVtYjsNCj4gICBzdHJ1Y3QgZHJtX3ByaW50ZXI7DQo+ICtzdHJ1Y3QgZHJt X2RldmljZTsNCj4gICBzdHJ1Y3Qgc2dfdGFibGU7DQo+ICAgDQo+ICtlbnVtIGRybV9nZW1f c2htZW1fcGFnZXNfc3RhdGUgew0KPiArCURSTV9HRU1fU0hNRU1fUEFHRVNfU1RBVEVfUFVS R0VEID0gLTIsDQo+ICsJRFJNX0dFTV9TSE1FTV9QQUdFU19TVEFURV9FVklDVEVEID0gLTEs DQo+ICsJRFJNX0dFTV9TSE1FTV9QQUdFU19TVEFURV9VTlBJTk5FRCA9IDAsDQo+ICsJRFJN X0dFTV9TSE1FTV9QQUdFU19TVEFURV9QSU5ORUQgPSAxLA0KPiArCURSTV9HRU1fU0hNRU1f UEFHRVNfU1RBVEVfRVZJQ1RBQkxFID0gMiwNCj4gKwlEUk1fR0VNX1NITUVNX1BBR0VTX1NU QVRFX1BVUkdFQUJMRSA9IDMsDQo+ICt9Ow0KDQpUaGVzZSBzdGF0ZXMgY2FuIGJlIGRldGVj dGVkIGJ5IGxvb2tpbmcgYXQgdGhlIHZtYXAgYW5kIHBpbiByZWZjb3VudHMuIA0KTm8gbmVl ZCB0byBzdG9yZSB0aGVtIGV4cGxpY2l0bHkuIEluIHlvdXIgcGF0Y2gsIHRoZXkgYWxzbyBj b21lIHdpdGggYSANCmJpZyB6b28gb2YgdHJpdmlhbCBoZWxwZXJzLiBOb25lIG9mIHRoYXQg c2VlbXMgbmVjZXNzYXJ5IEFGQUlDVC4NCg0KV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gcHVyZ2UgYW5kIGV2aWN0IEJUVz8NCg0KPiArDQo+ICAgLyoqDQo+ICAgICogc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgc2htZW0NCj4g ICAgKi8NCj4gQEAgLTQzLDggKzU0LDggQEAgc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0 IHsNCj4gICAJICogQG1hZHY6IFN0YXRlIGZvciBtYWR2aXNlDQo+ICAgCSAqDQo+ICAgCSAq IDAgaXMgYWN0aXZlL2ludXNlLg0KPiArCSAqIDEgaXMgbm90LW5lZWRlZC9jYW4tYmUtcHVy Z2VkDQo+ICAgCSAqIEEgbmVnYXRpdmUgdmFsdWUgaXMgdGhlIG9iamVjdCBpcyBwdXJnZWQu DQo+IC0JICogUG9zaXRpdmUgdmFsdWVzIGFyZSBkcml2ZXIgc3BlY2lmaWMgYW5kIG5vdCB1 c2VkIGJ5IHRoZSBoZWxwZXJzLg0KPiAgIAkgKi8NCj4gICAJaW50IG1hZHY7DQo+ICAgDQo+ IEBAIC05MSw2ICsxMDIsNDAgQEAgc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0IHsNCj4g ICAJICogQG1hcF93YzogbWFwIG9iamVjdCB3cml0ZS1jb21iaW5lZCAoaW5zdGVhZCBvZiB1 c2luZyBzaG1lbSBkZWZhdWx0cykuDQo+ICAgCSAqLw0KPiAgIAlib29sIG1hcF93YzsNCj4g Kw0KPiArCS8qKg0KPiArCSAqIEBldmljdGlvbl9kaXNhYmxlX2NvdW50Og0KPiArCSAqDQo+ ICsJICogVGhlIHNobWVtIHBhZ2VzIGFyZSBkaXNhbGxvd2VkIHRvIGJlIGV2aWN0ZWQgYnkg dGhlIG1lbW9yeSBzaHJpbmtlcg0KPiArCSAqIHdoaWxlIGNvdW50IGlzIG5vbi16ZXJvLiBV c2VkIGludGVybmFsbHkgYnkgbWVtb3J5IHNocmlua2VyLg0KPiArCSAqLw0KPiArCXVuc2ln bmVkIGludCBldmljdGlvbl9kaXNhYmxlX2NvdW50Ow0KPiArDQo+ICsJLyoqDQo+ICsJICog QHB1cmdpbmdfZGlzYWJsZV9jb3VudDoNCj4gKwkgKg0KPiArCSAqIFRoZSBzaG1lbSBwYWdl cyBhcmUgZGlzYWxsb3dlZCB0byBiZSBwdXJnZWQgYnkgdGhlIG1lbW9yeSBzaHJpbmtlcg0K PiArCSAqIHdoaWxlIGNvdW50IGlzIG5vbi16ZXJvLiBVc2VkIGludGVybmFsbHkgYnkgbWVt b3J5IHNocmlua2VyLg0KPiArCSAqLw0KPiArCXVuc2lnbmVkIGludCBwdXJnaW5nX2Rpc2Fi bGVfY291bnQ7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAcGFnZXNfc3RhdGU6IEN1cnJlbnQg c3RhdGUgb2Ygc2htZW0gcGFnZXMuIFVzZWQgaW50ZXJuYWxseSBieQ0KPiArCSAqIG1lbW9y eSBzaHJpbmtlci4NCj4gKwkgKi8NCj4gKwllbnVtIGRybV9nZW1fc2htZW1fcGFnZXNfc3Rh dGUgcGFnZXNfc3RhdGU7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAZXZpY3RlZDogVHJ1ZSBp ZiBzaG1lbSBwYWdlcyB3ZXJlIGV2aWN0ZWQgYnkgdGhlIG1lbW9yeSBzaHJpbmtlci4NCj4g KwkgKiBVc2VkIGludGVybmFsbHkgYnkgbWVtb3J5IHNocmlua2VyLg0KPiArCSAqLw0KPiAr CWJvb2wgZXZpY3RlZDsNCj4gKw0KPiArCS8qKg0KPiArCSAqIEBwYWdlc19zaHJpbmthYmxl OiBUcnVlIGlmIHNobWVtIHBhZ2VzIGNhbiBiZSBldmljdGVkIG9yIHB1cmdlZA0KPiArCSAq IGJ5IHRoZSBtZW1vcnkgc2hyaW5rZXIuIFVzZWQgaW50ZXJuYWxseSBieSBtZW1vcnkgc2hy aW5rZXIuDQo+ICsJICovDQo+ICsJYm9vbCBwYWdlc19zaHJpbmthYmxlOw0KDQpBcyBjb21t ZW50ZWQgYmVmb3JlLCB0aGlzIHN0YXRlIGNhbiBiZSBmb3VuZGJ5IGxvb2tpbmcgYXQgZXhp c3RpbmcgDQpmaWVsZHMuIE5vIG5lZWQgdG8gc3RvcmUgaXQgc2VwYXJhdGVseS4NCg0KQmVz dCByZWdhcmRzDQpUaG9tYXMNCg0KPiAgIH07DQo+ICAgDQo+ICAgI2RlZmluZSB0b19kcm1f Z2VtX3NobWVtX29iaihvYmopIFwNCj4gQEAgLTExMSwxNSArMTU2LDMzIEBAIGludCBkcm1f Z2VtX3NobWVtX21tYXAoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0DQo+ICAgDQo+ICAgaW50IGRybV9nZW1fc2htZW1fbWFkdmlz ZShzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtLCBpbnQgbWFkdik7DQo+ICAg DQo+ICtpbnQgZHJtX2dlbV9zaG1lbV9zZXRfcHVyZ2VhYmxlKHN0cnVjdCBkcm1fZ2VtX3No bWVtX29iamVjdCAqc2htZW0pOw0KPiAraW50IGRybV9nZW1fc2htZW1fc2V0X3B1cmdlYWJs ZV9hbmRfZXZpY3RhYmxlKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOw0K PiAraW50IGRybV9nZW1fc2htZW1fc2V0X3VucHVyZ2VhYmxlX2FuZF91bmV2aWN0YWJsZShz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsNCj4gKw0KPiArc3RhdGljIGlu bGluZSBib29sIGRybV9nZW1fc2htZW1faXNfZXZpY3RhYmxlKHN0cnVjdCBkcm1fZ2VtX3No bWVtX29iamVjdCAqc2htZW0pDQo+ICt7DQo+ICsJcmV0dXJuIChzaG1lbS0+bWFkdiA+PSAw KSAmJiAhc2htZW0tPmV2aWN0aW9uX2Rpc2FibGVfY291bnQgJiYNCj4gKwkJc2htZW0tPmJh c2UuZnVuY3MtPmV2aWN0ICYmIHNobWVtLT5iYXNlLmZ1bmNzLT5zd2FwX2luICYmDQo+ICsJ CSFzaG1lbS0+dm1hcF91c2VfY291bnQgJiYgIXNobWVtLT5iYXNlLmRtYV9idWYgJiYNCj4g KwkJIXNobWVtLT5iYXNlLmltcG9ydF9hdHRhY2ggJiYgc2htZW0tPnNndDsNCj4gK30NCj4g Kw0KPiAgIHN0YXRpYyBpbmxpbmUgYm9vbCBkcm1fZ2VtX3NobWVtX2lzX3B1cmdlYWJsZShz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQ0KPiAgIHsNCj4gLQlyZXR1cm4g KHNobWVtLT5tYWR2ID4gMCkgJiYNCj4gLQkJIXNobWVtLT52bWFwX3VzZV9jb3VudCAmJiBz aG1lbS0+c2d0ICYmDQo+IC0JCSFzaG1lbS0+YmFzZS5kbWFfYnVmICYmICFzaG1lbS0+YmFz ZS5pbXBvcnRfYXR0YWNoOw0KPiArCXJldHVybiAoc2htZW0tPm1hZHYgPiAwKSAmJiAhc2ht ZW0tPnB1cmdpbmdfZGlzYWJsZV9jb3VudCAmJg0KPiArCQkhc2htZW0tPnZtYXBfdXNlX2Nv dW50ICYmIHNobWVtLT5iYXNlLmZ1bmNzLT5wdXJnZSAmJg0KPiArCQkhc2htZW0tPmJhc2Uu ZG1hX2J1ZiAmJiAhc2htZW0tPmJhc2UuaW1wb3J0X2F0dGFjaCAmJg0KPiArCQlzaG1lbS0+ c2d0Ow0KPiAgIH0NCj4gICANCj4gLXZvaWQgZHJtX2dlbV9zaG1lbV9wdXJnZV9sb2NrZWQo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7DQo+ICtpbnQgZHJtX2dlbV9z aG1lbV9zd2FwX2luX3BhZ2VzX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3Qg KnNobWVtKTsNCj4gK2ludCBkcm1fZ2VtX3NobWVtX3N3YXBfaW5fbG9ja2VkKHN0cnVjdCBk cm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOw0KPiArDQo+ICt2b2lkIGRybV9nZW1fc2ht ZW1fZXZpY3RfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOw0K PiArDQo+ICAgYm9vbCBkcm1fZ2VtX3NobWVtX3B1cmdlKHN0cnVjdCBkcm1fZ2VtX3NobWVt X29iamVjdCAqc2htZW0pOw0KPiArdm9pZCBkcm1fZ2VtX3NobWVtX3B1cmdlX2xvY2tlZChz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsNCj4gICANCj4gICBzdHJ1Y3Qg c2dfdGFibGUgKmRybV9nZW1fc2htZW1fZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX3No bWVtX29iamVjdCAqc2htZW0pOw0KPiAgIHN0cnVjdCBzZ190YWJsZSAqZHJtX2dlbV9zaG1l bV9nZXRfcGFnZXNfc2d0KHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOw0K PiBAQCAtMjYyLDYgKzMyNSwzOCBAQCBzdGF0aWMgaW5saW5lIGludCBkcm1fZ2VtX3NobWVt X29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdg0KPiAg IAlyZXR1cm4gZHJtX2dlbV9zaG1lbV9tbWFwKHNobWVtLCB2bWEpOw0KPiAgIH0NCj4gICAN Cj4gKy8qKg0KPiArICogc3RydWN0IGRybV9nZW1fc2htZW1fc2hyaW5rZXIgLSBHZW5lcmlj IG1lbW9yeSBzaHJpbmtlciBmb3Igc2htZW0gR0VNcw0KPiArICovDQo+ICtzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9zaHJpbmtlciB7DQo+ICsJLyoqIEBiYXNlOiBTaHJpbmtlciBmb3IgcHVy Z2luZyBzaG1lbSBHRU0gb2JqZWN0cyAqLw0KPiArCXN0cnVjdCBzaHJpbmtlciBiYXNlOw0K PiArDQo+ICsJLyoqIEBsb2NrOiBQcm90ZWN0cyBAbHJ1XyogKi8NCj4gKwlzdHJ1Y3QgbXV0 ZXggbG9jazsNCj4gKw0KPiArCS8qKiBAbHJ1X3B1cmdlYWJsZTogTGlzdCBvZiBzaG1lbSBH RU0gb2JqZWN0cyBhdmFpbGFibGUgZm9yIHB1cmdpbmcgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIGxydV9wdXJnZWFibGU7DQo+ICsNCj4gKwkvKiogQGxydV9hY3RpdmU6IExpc3Qgb2Yg YWN0aXZlIHNobWVtIEdFTSBvYmplY3RzICovDQo+ICsJc3RydWN0IGxpc3RfaGVhZCBscnVf YWN0aXZlOw0KPiArDQo+ICsJLyoqIEBscnVfZXZpY3RhYmxlOiBMaXN0IG9mIHNobWVtIEdF TSBvYmplY3RzIHRoYXQgY2FuIGJlIGV2aWN0ZWQgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IGxydV9ldmljdGFibGU7DQo+ICsNCj4gKwkvKiogQGxydV9ldmljdGVkOiBMaXN0IG9mIGV2 aWN0ZWQgc2htZW0gR0VNIG9iamVjdHMgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydV9l dmljdGVkOw0KPiArDQo+ICsJLyoqIEBkZXY6IERSTSBkZXZpY2UgdGhhdCB1c2VzIHRoaXMg c2hyaW5rZXIgKi8NCj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Ow0KPiArDQo+ICsJLyoq IEBzaHJpbmthYmxlX2NvdW50OiBDb3VudCBvZiBzaG1lbSBHRU0gcGFnZXMgdG8gYmUgcHVy Z2VkIGFuZCBldmljdGVkICovDQo+ICsJdTY0IHNocmlua2FibGVfY291bnQ7DQo+ICt9Ow0K PiArDQo+ICtpbnQgZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl9yZWdpc3RlcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsNCj4gK3ZvaWQgZHJtX2dlbV9zaG1lbV9zaHJpbmtlcl91bnJlZ2lz dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOw0KPiArDQo+ICAgLyoNCj4gICAgKiBEcml2 ZXIgb3BzDQo+ICAgICovDQoNCi0tIA0KVGhvbWFzIFppbW1lcm1hbm4NCkdyYXBoaWNzIERy aXZlciBEZXZlbG9wZXINClNVU0UgU29mdHdhcmUgU29sdXRpb25zIEdlcm1hbnkgR21iSA0K TWF4ZmVsZHN0ci4gNSwgOTA0MDkgTsO8cm5iZXJnLCBHZXJtYW55DQooSFJCIDM2ODA5LCBB RyBOw7xybmJlcmcpDQpHZXNjaMOkZnRzZsO8aHJlcjogSXZvIFRvdGV2DQo= --------------5H7750Mtd6UGTjHr18gikQFQ-- --------------A0v0rMvrEh8xOQfDU6AmMSXv 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+AFAmJeYzIFAwAAAAAACgkQlh/E3EQov+Au 6A//R41LiQX48pGuHM1tOrqZjoUMyAuuqCph2yk8PMnfhHWVlaim8d0GunKgSKWzn7xBplwQRTgf L26CROt5lO4fDwCNFrC19c+D5QYR1aDTVH3veLiCiOFfF5vSZ6YzQNNuYTg6C+TC7x4d5TmFWoyP Y2Gho22sm688M7mwxpSHy91C2qjneOzYmXS84s2kxcWKxmXQVtpW+bRPHiP4thEWkHSLRgIDUj4u 32OfLCjXscpRMqPGmogIko+IK51eXrV1QbJgoVtmLpC5gWvYdtrJERv7y5D6KZUnOHii1KivkEYK QODVVHovcNCKm798cVDSkD7XSRpiRQfmYwFJWLwNxP/aYSPBoYKKai2gbv6KJGbtLBXfaX1WzqAq G0E6qI4jLQ4Vd/BWcBUMVt8bssRV5D3pw5SmbuTrEqvXMjQs4VINKW2Afo6mwhotL37eQoWTL9hg bCBrisrn4EkBkH+UUFtGNIr2si0lJ2R7LFWvdZKJ2kd2TBLKa93PrpCp4W30PIaweZIHwPMm7ile 8CbJMFiwEMN2jCsddN1Te3e9HVuFg6NbxMImlQOOoIefsHcm/guv7i7bCpiIl61Uqm6S1a81vGYx HLcn0NfU2vgJhcGYA4blvlZOVBUKpv2zmBsCZ7Q/wCdd+U8yeiB8jKkycFt+aT4vjYIhIqQiEKu7 acc= =N6nw -----END PGP SIGNATURE----- --------------A0v0rMvrEh8xOQfDU6AmMSXv--