From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 015D73750AC for ; Wed, 29 Apr 2026 07:56:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777449413; cv=none; b=u4zCMr1J9ej286Qvnk7Hch7edR/+7jtvsjeKQtqCB8OD36PJirHwwMVMios9XPXBYm5qT1XJgEovqbkOvTca54z6jYSzQDH+zceNtwhGlC/FOQ+ZicwusITvCamopO5khz0ZmZy6sWqBAdbJgMIHFheVkP+yam24L/Ogp/6vufA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777449413; c=relaxed/simple; bh=v6M9d6gsgw+XKTvOacVdHBjeNoN9Fzjlmo4ldTexFAw=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Content-Type: MIME-Version:Message-ID; b=hfzPXvr1z3I5w9ZLvXcSMKTzqLY3Yt6AjuG0bHOWP+dH54R+37RwlaDKbtCRljUF6RR6To3ePcdESNvmylhq2hjEfxBGdVdxuEcay6GoeaYjT4v0gWtRtuvMGY1ADVEeM85eCzWlCfkPDecpd9+brpvaME8UJGab7W8/DYY+6kM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [223.64.68.8]) by gateway (Coremail) with SMTP id _____8BxT+rAufFpwA8FAA--.16533S3; Wed, 29 Apr 2026 15:56:48 +0800 (CST) Received: from chenhuacai$loongson.cn ( [223.64.68.8] ) by ajax-webmail-front1 (Coremail) ; Wed, 29 Apr 2026 15:56:45 +0800 (GMT+08:00) Date: Wed, 29 Apr 2026 15:56:45 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?6ZmI5Y2O5omN?= To: "Ard Biesheuvel" Cc: linux-efi@vger.kernel.org, "Ard Biesheuvel" , "WANG Rui" Subject: Re: [PATCH] efi/libstub: Move efi_relocate_kernel() into its only remaining user X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2024.3-cmXT6 build 20250609(354f7833) Copyright (c) 2002-2026 www.mailtech.cn loongson In-Reply-To: <20260428170608.3561937-2-ardb+git@google.com> References: <20260428170608.3561937-2-ardb+git@google.com> Content-Transfer-Encoding: base64 X-CM-CTRLDATA: uhoqqmZvb3Rlcl90eHQ9MTQ3OTQ6NjE4 Content-Type: text/plain; charset=UTF-8 Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-ID: X-Coremail-Locale: zh_CN X-CM-TRANSID:qMiowJAx_OC9ufFpqyt3AA--.21608W X-CM-SenderInfo: hfkh0x5xdftxo6or00hjvr0hdfq/1tbiAQEMBmnxndECGQABsE X-Coremail-Antispam: 1Uk129KBj9fXoW3tw45JFyDXryUtFWrKr4xKrX_yoW8Xr13Jo Zayr1xuw1rXryrAr15K34DGFW3XFWvqw1fA39xA3ZrWa9rZry2yay5XrZ8tryfJF15K3s7 W34av3WIyFn2q3Z8l-sFpf9Il3svdjkaLaAFLSUrUUUU1b8apTn2vfkv8UJUUUU8wcxFpf 9Il3svdxBIdaVrn0xqx4xG64xvF2IEw4CE5I8CrVC2j2Jv73VFW2AGmfu7bjvjm3AaLaJ3 UjIYCTnIWjp_UUUOx7kC6x804xWl14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI 8IcIk0rVWrJVCq3wAFIxvE14AKwVWUXVWUAwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xG Y2AK021l84ACjcxK6xIIjxv20xvE14v26r1I6r4UM28EF7xvwVC0I7IYx2IY6xkF7I0E14 v26r1j6r4UM28EF7xvwVC2z280aVAFwI0_Cr0_Gr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2kKe7AKxVWUXVWUAwAS0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07 AIYIkI8VC2zVCFFI0UMc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWU XVWUAwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7V AKI48JM4xvF2IEb7IF0Fy264kE64k0F24lFcxC0VAYjxAxZF0Ex2IqxwCF04k20xvY0x0E wIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwCFI7km07C267AKxVWUXVWUAwC20s026c02F4 0E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1l IxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxV AFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j 6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_Gr1l6VACY4xI67k04243AbIYCTnIWIevJa 73UjIFyTuYvjxUc3C7UUUUU SGksIEFyZCwKCgo+IC0tLS0t5Y6f5aeL6YKu5Lu2LS0tLS0KPiDlj5Hku7bkuro6ICJBcmQgQmll c2hldXZlbCIgPGFyZGIrZ2l0QGdvb2dsZS5jb20+Cj4g5Y+R6YCB5pe26Ze0OjIwMjYtMDQtMjkg MDE6MDY6MDkgKOaYn+acn+S4iSkKPiDmlLbku7bkuro6IGxpbnV4LWVmaUB2Z2VyLmtlcm5lbC5v cmcKPiDmioTpgIE6ICJBcmQgQmllc2hldXZlbCIgPGFyZGJAa2VybmVsLm9yZz4sICJXQU5HIFJ1 aSIgPHJAaGV2LmNjPiwgIkh1YWNhaSBDaGVuIiA8Y2hlbmh1YWNhaUBsb29uZ3Nvbi5jbj4KPiDk uLvpopg6IFtQQVRDSF0gZWZpL2xpYnN0dWI6IE1vdmUgZWZpX3JlbG9jYXRlX2tlcm5lbCgpIGlu dG8gaXRzIG9ubHkgcmVtYWluaW5nIHVzZXIKPiAKPiBGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJk YkBrZXJuZWwub3JnPgo+IAo+IExvb25nQXJjaCBpcyB0aGUgb25seSBhcmNoIHRoYXQgc3RpbGwg dXNlcyBlZmlfcmVsb2NhdGVfa2VybmVsKCksIHNvCj4gYmVmb3JlIG1ha2luZyBjaGFuZ2VzIHRv IGl0IHRoYXQgTG9vbmdBcmNoIG5lZWRzLCB0dXJuIGl0IGludG8gYSBwcml2YXRlCj4gZnVuY3Rp b24uIE1vdmUgZWZpX2xvd19hbGxvY19hYm92ZSgpIGludG8gbWVtLmMgd2hpbGUgYXQgaXQsIGFu ZCBkcm9wCj4gdGhlIHJlbG9jYXRlLmMgc291cmNlIGZpbGUgYWx0b2dldGhlci4KPiAKPiBDYzog V0FORyBSdWkgPHJAaGV2LmNjPgo+IENjOiBIdWFjYWkgQ2hlbiA8Y2hlbmh1YWNhaUBsb29uZ3Nv bi5jbj4KPiBTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgo+ IC0tLQo+IFVubGVzcyB0aGVyZSBhcmUgYW55IG9iamVjdGlvbnMsIEkgd2lsbCBxdWV1ZSB0aGlz IHVwIGFuZCByZWJhc2UgdGhlCj4gTG9vbmdBcmNoIGNoYW5nZXMgYWRkaW5nIGVmaV9jYWNoZV9z eW5jX2ltYWdlKCkgb24gdG9wIG9mIGl0Lgo+IAo+ICBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJz dHViL01ha2VmaWxlICAgICAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9maXJtd2FyZS9lZmkvbGli c3R1Yi9lZmlzdHViLmggICAgICAgIHwgICA3IC0KPiAgZHJpdmVycy9maXJtd2FyZS9lZmkvbGli c3R1Yi9sb29uZ2FyY2gtc3R1Yi5jIHwgIDc5ICsrKysrKysrKysKPiAgZHJpdmVycy9maXJtd2Fy ZS9lZmkvbGlic3R1Yi9tZW0uYyAgICAgICAgICAgIHwgIDgyICsrKysrKysrKysKPiAgZHJpdmVy cy9maXJtd2FyZS9lZmkvbGlic3R1Yi9yZWxvY2F0ZS5jICAgICAgIHwgMTY2IC0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gIDUgZmlsZXMgY2hhbmdlZCwgMTYyIGluc2VydGlvbnMoKyksIDE3NCBkZWxl dGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9N YWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvTWFrZWZpbGUKPiBpbmRleCA5 ODNhNDM4ZTM1ZjMuLmNmZWRiMzAyNWMyNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2Zpcm13YXJl L2VmaS9saWJzdHViL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1 Yi9NYWtlZmlsZQo+IEBAIC02Niw3ICs2Niw3IEBAIEtCVUlMRF9BRkxBR1MJCQk6PSAkKEtCVUlM RF9DRkxBR1MpIC1EX19BU1NFTUJMWV9fCj4gIGxpYi15CQkJCTo9IGVmaS1zdHViLWhlbHBlci5v IGdvcC5vIHNlY3VyZWJvb3QubyB0cG0ubyBcCj4gIAkJCQkgICBmaWxlLm8gbWVtLm8gcmFuZG9t Lm8gcmFuZG9tYWxsb2MubyBwY2kubyBcCj4gIAkJCQkgICBza2lwX3NwYWNlcy5vIGxpYi1jbWRs aW5lLm8gbGliLWN0eXBlLm8gXAo+IC0JCQkJICAgYWxpZ25lZG1lbS5vIHJlbG9jYXRlLm8gcHJp bnRrLm8gdnNwcmludGYubwo+ICsJCQkJICAgYWxpZ25lZG1lbS5vIHByaW50ay5vIHZzcHJpbnRm Lm8KPiAgCj4gICMgaW5jbHVkZSB0aGUgc3R1YidzIGxpYmZkdCBkZXBlbmRlbmNpZXMgZnJvbSBs aWIvIHdoZW4gbmVlZGVkCj4gIGxpYmZkdC1kZXBzCQkJOj0gZmR0X3J3LmMgZmR0X3JvLmMgZmR0 X3dpcC5jIGZkdC5jIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1 Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaAo+IGlu ZGV4IDk3OWEyMTgxOGNjMS4uZmQ5MWZjMTVlYzgxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZmly bXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oCj4gKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkv bGlic3R1Yi9lZmlzdHViLmgKPiBAQCAtMTEwNCwxMyArMTEwNCw2IEBAIGVmaV9zdGF0dXNfdCBl ZmlfYWxsb2NhdGVfcGFnZXNfYWxpZ25lZCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxv bmcgKmFkZHIsCj4gIGVmaV9zdGF0dXNfdCBlZmlfbG93X2FsbG9jX2Fib3ZlKHVuc2lnbmVkIGxv bmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKPiAgCQkJCSB1bnNpZ25lZCBsb25nICphZGRy LCB1bnNpZ25lZCBsb25nIG1pbik7Cj4gIAo+IC1lZmlfc3RhdHVzX3QgZWZpX3JlbG9jYXRlX2tl cm5lbCh1bnNpZ25lZCBsb25nICppbWFnZV9hZGRyLAo+IC0JCQkJIHVuc2lnbmVkIGxvbmcgaW1h Z2Vfc2l6ZSwKPiAtCQkJCSB1bnNpZ25lZCBsb25nIGFsbG9jX3NpemUsCj4gLQkJCQkgdW5zaWdu ZWQgbG9uZyBwcmVmZXJyZWRfYWRkciwKPiAtCQkJCSB1bnNpZ25lZCBsb25nIGFsaWdubWVudCwK PiAtCQkJCSB1bnNpZ25lZCBsb25nIG1pbl9hZGRyKTsKPiAtCj4gIGVmaV9zdGF0dXNfdCBlZmlf cGFyc2Vfb3B0aW9ucyhjaGFyIGNvbnN0ICpjbWRsaW5lKTsKPiAgCj4gIHZvaWQgZWZpX3BhcnNl X29wdGlvbl9ncmFwaGljcyhjaGFyICpvcHRpb24pOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Zp cm13YXJlL2VmaS9saWJzdHViL2xvb25nYXJjaC1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2Vm aS9saWJzdHViL2xvb25nYXJjaC1zdHViLmMKPiBpbmRleCA3MzZiNmFhZTMyM2QuLjhjNTM4YTUy NDNkOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2xvb25nYXJj aC1zdHViLmMKPiArKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2xvb25nYXJjaC1z dHViLmMKPiBAQCAtMTQsNiArMTQsODUgQEAgZXh0ZXJuIGludCBrZXJuZWxfYXNpemU7Cj4gIGV4 dGVybiBpbnQga2VybmVsX2ZzaXplOwo+ICBleHRlcm4gaW50IGtlcm5lbF9lbnRyeTsKPiAgCj4g Ky8qKgo+ICsgKiBlZmlfcmVsb2NhdGVfa2VybmVsKCkgLSBjb3B5IG1lbW9yeSBhcmVhCj4gKyAq IEBpbWFnZV9hZGRyOgkJcG9pbnRlciB0byBhZGRyZXNzIG9mIG1lbW9yeSBhcmVhIHRvIGNvcHkK PiArICogQGltYWdlX3NpemU6CQlzaXplIG9mIG1lbW9yeSBhcmVhIHRvIGNvcHkKPiArICogQGFs bG9jX3NpemU6CQltaW5pbXVtIHNpemUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLCBtdXN0IGJlIGdy ZWF0ZXIgb3IKPiArICoJCQllcXVhbCB0byBpbWFnZV9zaXplCj4gKyAqIEBwcmVmZXJyZWRfYWRk cjoJcHJlZmVycmVkIHRhcmdldCBhZGRyZXNzCj4gKyAqIEBhbGlnbm1lbnQ6CQltaW5pbXVtIGFs aWdubWVudCBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhcmVhLiBJdAo+ICsgKgkJCXNob3VsZCBi ZSBhIHBvd2VyIG9mIHR3by4KPiArICogQG1pbl9hZGRyOgkJbWluaW11bSB0YXJnZXQgYWRkcmVz cwo+ICsgKgo+ICsgKiBDb3B5IGEgbWVtb3J5IGFyZWEgdG8gYSBuZXdseSBhbGxvY2F0ZWQgbWVt b3J5IGFyZWEgYWxpZ25lZCBhY2NvcmRpbmcKPiArICogdG8gQGFsaWdubWVudCBidXQgYXQgbGVh c3QgRUZJX0FMTE9DX0FMSUdOLiBJZiB0aGUgcHJlZmVycmVkIGFkZHJlc3MKPiArICogaXMgbm90 IGF2YWlsYWJsZSwgdGhlIGFsbG9jYXRlZCBhZGRyZXNzIHdpbGwgbm90IGJlIGJlbG93IEBtaW5f YWRkci4KPiArICogT24gZXhpdCwgQGltYWdlX2FkZHIgaXMgdXBkYXRlZCB0byB0aGUgdGFyZ2V0 IGNvcHkgYWRkcmVzcyB0aGF0IHdhcyB1c2VkLgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlz IHVzZWQgdG8gY29weSB0aGUgTGludXgga2VybmVsIHZlcmJhdGltLiBJdCBkb2VzIG5vdCBhcHBs eQo+ICsgKiBhbnkgcmVsb2NhdGlvbiBjaGFuZ2VzLgo+ICsgKgo+ICsgKiBSZXR1cm46CQlzdGF0 dXMgY29kZQo+ICsgKi8KPiArc3RhdGljCj4gK2VmaV9zdGF0dXNfdCBlZmlfcmVsb2NhdGVfa2Vy bmVsKHVuc2lnbmVkIGxvbmcgKmltYWdlX2FkZHIsCj4gKwkJCQkgdW5zaWduZWQgbG9uZyBpbWFn ZV9zaXplLAo+ICsJCQkJIHVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZSwKPiArCQkJCSB1bnNpZ25l ZCBsb25nIHByZWZlcnJlZF9hZGRyLAo+ICsJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50LAo+ ICsJCQkJIHVuc2lnbmVkIGxvbmcgbWluX2FkZHIpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgY3Vy X2ltYWdlX2FkZHI7Cj4gKwl1bnNpZ25lZCBsb25nIG5ld19hZGRyID0gMDsKPiArCWVmaV9zdGF0 dXNfdCBzdGF0dXM7Cj4gKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwo+ICsJZWZpX3BoeXNpY2Fs X2FkZHJfdCBlZmlfYWRkciA9IHByZWZlcnJlZF9hZGRyOwo+ICsKPiArCWlmICghaW1hZ2VfYWRk ciB8fCAhaW1hZ2Vfc2l6ZSB8fCAhYWxsb2Nfc2l6ZSkKPiArCQlyZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOwo+ICsJaWYgKGFsbG9jX3NpemUgPCBpbWFnZV9zaXplKQo+ICsJCXJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7Cj4gKwo+ICsJY3VyX2ltYWdlX2FkZHIgPSAqaW1hZ2VfYWRk cjsKPiArCj4gKwkvKgo+ICsJICogVGhlIEVGSSBmaXJtd2FyZSBsb2FkZXIgY291bGQgaGF2ZSBw bGFjZWQgdGhlIGtlcm5lbCBpbWFnZQo+ICsJICogYW55d2hlcmUgaW4gbWVtb3J5LCBidXQgdGhl IGtlcm5lbCBoYXMgcmVzdHJpY3Rpb25zIG9uIHRoZQo+ICsJICogbWF4IHBoeXNpY2FsIGFkZHJl c3MgaXQgY2FuIHJ1biBhdC4gIFNvbWUgYXJjaGl0ZWN0dXJlcwo+ICsJICogYWxzbyBoYXZlIGEg cHJlZmVycmVkIGFkZHJlc3MsIHNvIGZpcnN0IHRyeSB0byByZWxvY2F0ZQo+ICsJICogdG8gdGhl IHByZWZlcnJlZCBhZGRyZXNzLiAgSWYgdGhhdCBmYWlscywgYWxsb2NhdGUgYXMgbG93Cj4gKwkg KiBhcyBwb3NzaWJsZSB3aGlsZSByZXNwZWN0aW5nIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQuCj4g KwkgKi8KPiArCW5yX3BhZ2VzID0gcm91bmRfdXAoYWxsb2Nfc2l6ZSwgRUZJX0FMTE9DX0FMSUdO KSAvIEVGSV9QQUdFX1NJWkU7Cj4gKwlzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wYWdl cywgRUZJX0FMTE9DQVRFX0FERFJFU1MsCj4gKwkJCSAgICAgRUZJX0xPQURFUl9EQVRBLCBucl9w YWdlcywgJmVmaV9hZGRyKTsKPiArCW5ld19hZGRyID0gZWZpX2FkZHI7Cj4gKwkvKgo+ICsJICog SWYgcHJlZmVycmVkIGFkZHJlc3MgYWxsb2NhdGlvbiBmYWlsZWQgYWxsb2NhdGUgYXMgbG93IGFz Cj4gKwkgKiBwb3NzaWJsZS4KPiArCSAqLwo+ICsJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykg ewo+ICsJCXN0YXR1cyA9IGVmaV9sb3dfYWxsb2NfYWJvdmUoYWxsb2Nfc2l6ZSwgYWxpZ25tZW50 LCAmbmV3X2FkZHIsCj4gKwkJCQkJICAgICBtaW5fYWRkcik7Cj4gKwl9Cj4gKwlpZiAoc3RhdHVz ICE9IEVGSV9TVUNDRVNTKSB7Cj4gKwkJZWZpX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIHVzYWJs ZSBtZW1vcnkgZm9yIGtlcm5lbC5cbiIpOwo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwl9Cj4gKwo+ ICsJLyoKPiArCSAqIFdlIGtub3cgc291cmNlL2Rlc3Qgd29uJ3Qgb3ZlcmxhcCBzaW5jZSBib3Ro IG1lbW9yeSByYW5nZXMKPiArCSAqIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgVUVGSSwgc28gd2Ug Y2FuIHNhZmVseSB1c2UgbWVtY3B5Lgo+ICsJICovCj4gKwltZW1jcHkoKHZvaWQgKiluZXdfYWRk ciwgKHZvaWQgKiljdXJfaW1hZ2VfYWRkciwgaW1hZ2Vfc2l6ZSk7Cj4gKwo+ICsJLyogUmV0dXJu IHRoZSBuZXcgYWRkcmVzcyBvZiB0aGUgcmVsb2NhdGVkIGltYWdlLiAqLwo+ICsJKmltYWdlX2Fk ZHIgPSBuZXdfYWRkcjsKPiArCj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gKwo+ICBlZmlfc3Rh dHVzX3QgaGFuZGxlX2tlcm5lbF9pbWFnZSh1bnNpZ25lZCBsb25nICppbWFnZV9hZGRyLAo+ICAJ CQkJIHVuc2lnbmVkIGxvbmcgKmltYWdlX3NpemUsCj4gIAkJCQkgdW5zaWduZWQgbG9uZyAqcmVz ZXJ2ZV9hZGRyLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21l bS5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9tZW0uYwo+IGluZGV4IDljODIyNTll ZWE4MS4uNTlmM2Y4M2RlNTBjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xp YnN0dWIvbWVtLmMKPiArKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL21lbS5jCj4g QEAgLTEyNCwzICsxMjQsODUgQEAgdm9pZCBlZmlfZnJlZSh1bnNpZ25lZCBsb25nIHNpemUsIHVu c2lnbmVkIGxvbmcgYWRkcikKPiAgCW5yX3BhZ2VzID0gcm91bmRfdXAoc2l6ZSwgRUZJX0FMTE9D X0FMSUdOKSAvIEVGSV9QQUdFX1NJWkU7Cj4gIAllZmlfYnNfY2FsbChmcmVlX3BhZ2VzLCBhZGRy LCBucl9wYWdlcyk7Cj4gIH0KPiArCj4gKy8qKgo+ICsgKiBlZmlfbG93X2FsbG9jX2Fib3ZlKCkg LSBhbGxvY2F0ZSBwYWdlcyBhdCBvciBhYm92ZSBnaXZlbiBhZGRyZXNzCj4gKyAqIEBzaXplOglz aXplIG9mIHRoZSBtZW1vcnkgYXJlYSB0byBhbGxvY2F0ZQo+ICsgKiBAYWxpZ246CW1pbmltdW0g YWxpZ25tZW50IG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGFyZWEuIEl0IHNob3VsZAo+ICsgKgkJ YSBwb3dlciBvZiB0d28uCj4gKyAqIEBhZGRyOglvbiBleGl0IHRoZSBhZGRyZXNzIG9mIHRoZSBh bGxvY2F0ZWQgbWVtb3J5Cj4gKyAqIEBtaW46CW1pbmltdW0gYWRkcmVzcyB0byB1c2VkIGZvciB0 aGUgbWVtb3J5IGFsbG9jYXRpb24KPiArICoKPiArICogQWxsb2NhdGUgYXQgdGhlIGxvd2VzdCBw b3NzaWJsZSBhZGRyZXNzIHRoYXQgaXMgbm90IGJlbG93IEBtaW4gYXMKPiArICogRUZJX0xPQURF Ul9EQVRBLiBUaGUgYWxsb2NhdGVkIHBhZ2VzIGFyZSBhbGlnbmVkIGFjY29yZGluZyB0byBAYWxp Z24gYnV0IGF0Cj4gKyAqIGxlYXN0IEVGSV9BTExPQ19BTElHTi4gVGhlIGZpcnN0IGFsbG9jYXRl ZCBwYWdlIHdpbGwgbm90IGJlbG93IHRoZSBhZGRyZXNzCj4gKyAqIGdpdmVuIGJ5IEBtaW4uCj4g KyAqCj4gKyAqIFJldHVybjoJc3RhdHVzIGNvZGUKPiArICovCj4gK2VmaV9zdGF0dXNfdCBlZmlf bG93X2FsbG9jX2Fib3ZlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwK PiArCQkJCSB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1pbikKSnVzdCBhIGJp a2Utc2hlZWRpbmcsIG1vdmUgdGhpcyBmdW5jdGlvbiB0byBhYm92ZSBlZmlfZnJlZSgpIGlzIGEg bGl0dGxlIGJldHRlcgpiZWNhdXNlIGFsbG9jYXRpb24gZnVuY3Rpb25zIHdpbGwgYmUgdG9nZXRo ZXIuCgpBY2tlZC1ieTogSHVhY2FpIENoZW4gPGNoZW5odWFjYWk+Cj4gK3sKPiArCXN0cnVjdCBl ZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDsKPiArCWVmaV9zdGF0 dXNfdCBzdGF0dXM7Cj4gKwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwo+ICsJaW50IGk7Cj4gKwo+ ICsJc3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKCZtYXAsIGZhbHNlKTsKPiArCWlmIChzdGF0 dXMgIT0gRUZJX1NVQ0NFU1MpCj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCj4gKwkvKgo+ICsJICog RW5mb3JjZSBtaW5pbXVtIGFsaWdubWVudCB0aGF0IEVGSSBvciBMaW51eCByZXF1aXJlcyB3aGVu Cj4gKwkgKiByZXF1ZXN0aW5nIGEgc3BlY2lmaWMgYWRkcmVzcy4gIFdlIGFyZSBkb2luZyBwYWdl LWJhc2VkIChvcgo+ICsJICogbGFyZ2VyKSBhbGxvY2F0aW9ucywgYW5kIGJvdGggdGhlIGFkZHJl c3MgYW5kIHNpemUgbXVzdCBtZWV0Cj4gKwkgKiBhbGlnbm1lbnQgY29uc3RyYWludHMuCj4gKwkg Ki8KPiArCWlmIChhbGlnbiA8IEVGSV9BTExPQ19BTElHTikKPiArCQlhbGlnbiA9IEVGSV9BTExP Q19BTElHTjsKPiArCj4gKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgRUZJX0FMTE9DX0FMSUdOKTsK PiArCW5yX3BhZ2VzID0gc2l6ZSAvIEVGSV9QQUdFX1NJWkU7Cj4gKwlmb3IgKGkgPSAwOyBpIDwg bWFwLT5tYXBfc2l6ZSAvIG1hcC0+ZGVzY19zaXplOyBpKyspIHsKPiArCQllZmlfbWVtb3J5X2Rl c2NfdCAqZGVzYzsKPiArCQl1bnNpZ25lZCBsb25nIG0gPSAodW5zaWduZWQgbG9uZyltYXAtPm1h cDsKPiArCQl1NjQgc3RhcnQsIGVuZDsKPiArCj4gKwkJZGVzYyA9IGVmaV9tZW1kZXNjX3B0ciht LCBtYXAtPmRlc2Nfc2l6ZSwgaSk7Cj4gKwo+ICsJCWlmIChkZXNjLT50eXBlICE9IEVGSV9DT05W RU5USU9OQUxfTUVNT1JZKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKGRlc2MtPmF0dHJp YnV0ZSAmIEVGSV9NRU1PUllfSE9UX1BMVUdHQUJMRSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CWlmIChlZmlfc29mdF9yZXNlcnZlX2VuYWJsZWQoKSAmJgo+ICsJCSAgICAoZGVzYy0+YXR0cmli dXRlICYgRUZJX01FTU9SWV9TUCkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoZGVzYy0+ bnVtX3BhZ2VzIDwgbnJfcGFnZXMpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzdGFydCA9IGRl c2MtPnBoeXNfYWRkcjsKPiArCQllbmQgPSBzdGFydCArIGRlc2MtPm51bV9wYWdlcyAqIEVGSV9Q QUdFX1NJWkU7Cj4gKwo+ICsJCWlmIChzdGFydCA8IG1pbikKPiArCQkJc3RhcnQgPSBtaW47Cj4g Kwo+ICsJCXN0YXJ0ID0gcm91bmRfdXAoc3RhcnQsIGFsaWduKTsKPiArCQlpZiAoKHN0YXJ0ICsg c2l6ZSkgPiBlbmQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzdGF0dXMgPSBlZmlfYnNfY2Fs bChhbGxvY2F0ZV9wYWdlcywgRUZJX0FMTE9DQVRFX0FERFJFU1MsCj4gKwkJCQkgICAgIEVGSV9M T0FERVJfREFUQSwgbnJfcGFnZXMsICZzdGFydCk7Cj4gKwkJaWYgKHN0YXR1cyA9PSBFRklfU1VD Q0VTUykgewo+ICsJCQkqYWRkciA9IHN0YXJ0Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJaWYgKGkgPT0gbWFwLT5tYXBfc2l6ZSAvIG1hcC0+ZGVzY19zaXplKQo+ICsJCXJldHVy biBFRklfTk9UX0ZPVU5EOwo+ICsKPiArCXJldHVybiBFRklfU1VDQ0VTUzsKPiArfQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3JlbG9jYXRlLmMgYi9kcml2ZXJz L2Zpcm13YXJlL2VmaS9saWJzdHViL3JlbG9jYXRlLmMKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCBkNDI2NGJmYjZkYzEuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZmly bXdhcmUvZWZpL2xpYnN0dWIvcmVsb2NhdGUuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwxNjYg KzAsMCBAQAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+IC0KPiAtI2lu Y2x1ZGUgPGxpbnV4L2VmaS5oPgo+IC0jaW5jbHVkZSA8YXNtL2VmaS5oPgo+IC0KPiAtI2luY2x1 ZGUgImVmaXN0dWIuaCIKPiAtCj4gLS8qKgo+IC0gKiBlZmlfbG93X2FsbG9jX2Fib3ZlKCkgLSBh bGxvY2F0ZSBwYWdlcyBhdCBvciBhYm92ZSBnaXZlbiBhZGRyZXNzCj4gLSAqIEBzaXplOglzaXpl IG9mIHRoZSBtZW1vcnkgYXJlYSB0byBhbGxvY2F0ZQo+IC0gKiBAYWxpZ246CW1pbmltdW0gYWxp Z25tZW50IG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGFyZWEuIEl0IHNob3VsZAo+IC0gKgkJYSBw b3dlciBvZiB0d28uCj4gLSAqIEBhZGRyOglvbiBleGl0IHRoZSBhZGRyZXNzIG9mIHRoZSBhbGxv Y2F0ZWQgbWVtb3J5Cj4gLSAqIEBtaW46CW1pbmltdW0gYWRkcmVzcyB0byB1c2VkIGZvciB0aGUg bWVtb3J5IGFsbG9jYXRpb24KPiAtICoKPiAtICogQWxsb2NhdGUgYXQgdGhlIGxvd2VzdCBwb3Nz aWJsZSBhZGRyZXNzIHRoYXQgaXMgbm90IGJlbG93IEBtaW4gYXMKPiAtICogRUZJX0xPQURFUl9E QVRBLiBUaGUgYWxsb2NhdGVkIHBhZ2VzIGFyZSBhbGlnbmVkIGFjY29yZGluZyB0byBAYWxpZ24g YnV0IGF0Cj4gLSAqIGxlYXN0IEVGSV9BTExPQ19BTElHTi4gVGhlIGZpcnN0IGFsbG9jYXRlZCBw YWdlIHdpbGwgbm90IGJlbG93IHRoZSBhZGRyZXNzCj4gLSAqIGdpdmVuIGJ5IEBtaW4uCj4gLSAq Cj4gLSAqIFJldHVybjoJc3RhdHVzIGNvZGUKPiAtICovCj4gLWVmaV9zdGF0dXNfdCBlZmlfbG93 X2FsbG9jX2Fib3ZlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKPiAt CQkJCSB1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1pbikKPiAtewo+IC0Jc3Ry dWN0IGVmaV9ib290X21lbW1hcCAqbWFwIF9fZnJlZShlZmlfcG9vbCkgPSBOVUxMOwo+IC0JZWZp X3N0YXR1c190IHN0YXR1czsKPiAtCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7Cj4gLQlpbnQgaTsK PiAtCj4gLQlzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoJm1hcCwgZmFsc2UpOwo+IC0JaWYg KHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKPiAtCQlyZXR1cm4gc3RhdHVzOwo+IC0KPiAtCS8qCj4g LQkgKiBFbmZvcmNlIG1pbmltdW0gYWxpZ25tZW50IHRoYXQgRUZJIG9yIExpbnV4IHJlcXVpcmVz IHdoZW4KPiAtCSAqIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzLiAgV2UgYXJlIGRvaW5n IHBhZ2UtYmFzZWQgKG9yCj4gLQkgKiBsYXJnZXIpIGFsbG9jYXRpb25zLCBhbmQgYm90aCB0aGUg YWRkcmVzcyBhbmQgc2l6ZSBtdXN0IG1lZXQKPiAtCSAqIGFsaWdubWVudCBjb25zdHJhaW50cy4K PiAtCSAqLwo+IC0JaWYgKGFsaWduIDwgRUZJX0FMTE9DX0FMSUdOKQo+IC0JCWFsaWduID0gRUZJ X0FMTE9DX0FMSUdOOwo+IC0KPiAtCXNpemUgPSByb3VuZF91cChzaXplLCBFRklfQUxMT0NfQUxJ R04pOwo+IC0JbnJfcGFnZXMgPSBzaXplIC8gRUZJX1BBR0VfU0laRTsKPiAtCWZvciAoaSA9IDA7 IGkgPCBtYXAtPm1hcF9zaXplIC8gbWFwLT5kZXNjX3NpemU7IGkrKykgewo+IC0JCWVmaV9tZW1v cnlfZGVzY190ICpkZXNjOwo+IC0JCXVuc2lnbmVkIGxvbmcgbSA9ICh1bnNpZ25lZCBsb25nKW1h cC0+bWFwOwo+IC0JCXU2NCBzdGFydCwgZW5kOwo+IC0KPiAtCQlkZXNjID0gZWZpX21lbWRlc2Nf cHRyKG0sIG1hcC0+ZGVzY19zaXplLCBpKTsKPiAtCj4gLQkJaWYgKGRlc2MtPnR5cGUgIT0gRUZJ X0NPTlZFTlRJT05BTF9NRU1PUlkpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlpZiAoZGVzYy0+ YXR0cmlidXRlICYgRUZJX01FTU9SWV9IT1RfUExVR0dBQkxFKQo+IC0JCQljb250aW51ZTsKPiAt Cj4gLQkJaWYgKGVmaV9zb2Z0X3Jlc2VydmVfZW5hYmxlZCgpICYmCj4gLQkJICAgIChkZXNjLT5h dHRyaWJ1dGUgJiBFRklfTUVNT1JZX1NQKSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWlmIChk ZXNjLT5udW1fcGFnZXMgPCBucl9wYWdlcykKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCXN0YXJ0 ID0gZGVzYy0+cGh5c19hZGRyOwo+IC0JCWVuZCA9IHN0YXJ0ICsgZGVzYy0+bnVtX3BhZ2VzICog RUZJX1BBR0VfU0laRTsKPiAtCj4gLQkJaWYgKHN0YXJ0IDwgbWluKQo+IC0JCQlzdGFydCA9IG1p bjsKPiAtCj4gLQkJc3RhcnQgPSByb3VuZF91cChzdGFydCwgYWxpZ24pOwo+IC0JCWlmICgoc3Rh cnQgKyBzaXplKSA+IGVuZCkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCXN0YXR1cyA9IGVmaV9i c19jYWxsKGFsbG9jYXRlX3BhZ2VzLCBFRklfQUxMT0NBVEVfQUREUkVTUywKPiAtCQkJCSAgICAg RUZJX0xPQURFUl9EQVRBLCBucl9wYWdlcywgJnN0YXJ0KTsKPiAtCQlpZiAoc3RhdHVzID09IEVG SV9TVUNDRVNTKSB7Cj4gLQkJCSphZGRyID0gc3RhcnQ7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAt CX0KPiAtCj4gLQlpZiAoaSA9PSBtYXAtPm1hcF9zaXplIC8gbWFwLT5kZXNjX3NpemUpCj4gLQkJ cmV0dXJuIEVGSV9OT1RfRk9VTkQ7Cj4gLQo+IC0JcmV0dXJuIEVGSV9TVUNDRVNTOwo+IC19Cj4g LQo+IC0vKioKPiAtICogZWZpX3JlbG9jYXRlX2tlcm5lbCgpIC0gY29weSBtZW1vcnkgYXJlYQo+ IC0gKiBAaW1hZ2VfYWRkcjoJCXBvaW50ZXIgdG8gYWRkcmVzcyBvZiBtZW1vcnkgYXJlYSB0byBj b3B5Cj4gLSAqIEBpbWFnZV9zaXplOgkJc2l6ZSBvZiBtZW1vcnkgYXJlYSB0byBjb3B5Cj4gLSAq IEBhbGxvY19zaXplOgkJbWluaW11bSBzaXplIG9mIG1lbW9yeSB0byBhbGxvY2F0ZSwgbXVzdCBi ZSBncmVhdGVyIG9yCj4gLSAqCQkJZXF1YWwgdG8gaW1hZ2Vfc2l6ZQo+IC0gKiBAcHJlZmVycmVk X2FkZHI6CXByZWZlcnJlZCB0YXJnZXQgYWRkcmVzcwo+IC0gKiBAYWxpZ25tZW50OgkJbWluaW11 bSBhbGlnbm1lbnQgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYXJlYS4gSXQKPiAtICoJCQlzaG91 bGQgYmUgYSBwb3dlciBvZiB0d28uCj4gLSAqIEBtaW5fYWRkcjoJCW1pbmltdW0gdGFyZ2V0IGFk ZHJlc3MKPiAtICoKPiAtICogQ29weSBhIG1lbW9yeSBhcmVhIHRvIGEgbmV3bHkgYWxsb2NhdGVk IG1lbW9yeSBhcmVhIGFsaWduZWQgYWNjb3JkaW5nCj4gLSAqIHRvIEBhbGlnbm1lbnQgYnV0IGF0 IGxlYXN0IEVGSV9BTExPQ19BTElHTi4gSWYgdGhlIHByZWZlcnJlZCBhZGRyZXNzCj4gLSAqIGlz IG5vdCBhdmFpbGFibGUsIHRoZSBhbGxvY2F0ZWQgYWRkcmVzcyB3aWxsIG5vdCBiZSBiZWxvdyBA bWluX2FkZHIuCj4gLSAqIE9uIGV4aXQsIEBpbWFnZV9hZGRyIGlzIHVwZGF0ZWQgdG8gdGhlIHRh cmdldCBjb3B5IGFkZHJlc3MgdGhhdCB3YXMgdXNlZC4KPiAtICoKPiAtICogVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIGNvcHkgdGhlIExpbnV4IGtlcm5lbCB2ZXJiYXRpbS4gSXQgZG9lcyBub3Qg YXBwbHkKPiAtICogYW55IHJlbG9jYXRpb24gY2hhbmdlcy4KPiAtICoKPiAtICogUmV0dXJuOgkJ c3RhdHVzIGNvZGUKPiAtICovCj4gLWVmaV9zdGF0dXNfdCBlZmlfcmVsb2NhdGVfa2VybmVsKHVu c2lnbmVkIGxvbmcgKmltYWdlX2FkZHIsCj4gLQkJCQkgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXpl LAo+IC0JCQkJIHVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZSwKPiAtCQkJCSB1bnNpZ25lZCBsb25n IHByZWZlcnJlZF9hZGRyLAo+IC0JCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50LAo+IC0JCQkJ IHVuc2lnbmVkIGxvbmcgbWluX2FkZHIpCj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgY3VyX2ltYWdl X2FkZHI7Cj4gLQl1bnNpZ25lZCBsb25nIG5ld19hZGRyID0gMDsKPiAtCWVmaV9zdGF0dXNfdCBz dGF0dXM7Cj4gLQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwo+IC0JZWZpX3BoeXNpY2FsX2FkZHJf dCBlZmlfYWRkciA9IHByZWZlcnJlZF9hZGRyOwo+IC0KPiAtCWlmICghaW1hZ2VfYWRkciB8fCAh aW1hZ2Vfc2l6ZSB8fCAhYWxsb2Nfc2l6ZSkKPiAtCQlyZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOwo+IC0JaWYgKGFsbG9jX3NpemUgPCBpbWFnZV9zaXplKQo+IC0JCXJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7Cj4gLQo+IC0JY3VyX2ltYWdlX2FkZHIgPSAqaW1hZ2VfYWRkcjsKPiAt Cj4gLQkvKgo+IC0JICogVGhlIEVGSSBmaXJtd2FyZSBsb2FkZXIgY291bGQgaGF2ZSBwbGFjZWQg dGhlIGtlcm5lbCBpbWFnZQo+IC0JICogYW55d2hlcmUgaW4gbWVtb3J5LCBidXQgdGhlIGtlcm5l bCBoYXMgcmVzdHJpY3Rpb25zIG9uIHRoZQo+IC0JICogbWF4IHBoeXNpY2FsIGFkZHJlc3MgaXQg Y2FuIHJ1biBhdC4gIFNvbWUgYXJjaGl0ZWN0dXJlcwo+IC0JICogYWxzbyBoYXZlIGEgcHJlZmVy cmVkIGFkZHJlc3MsIHNvIGZpcnN0IHRyeSB0byByZWxvY2F0ZQo+IC0JICogdG8gdGhlIHByZWZl cnJlZCBhZGRyZXNzLiAgSWYgdGhhdCBmYWlscywgYWxsb2NhdGUgYXMgbG93Cj4gLQkgKiBhcyBw b3NzaWJsZSB3aGlsZSByZXNwZWN0aW5nIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQuCj4gLQkgKi8K PiAtCW5yX3BhZ2VzID0gcm91bmRfdXAoYWxsb2Nfc2l6ZSwgRUZJX0FMTE9DX0FMSUdOKSAvIEVG SV9QQUdFX1NJWkU7Cj4gLQlzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wYWdlcywgRUZJ X0FMTE9DQVRFX0FERFJFU1MsCj4gLQkJCSAgICAgRUZJX0xPQURFUl9EQVRBLCBucl9wYWdlcywg JmVmaV9hZGRyKTsKPiAtCW5ld19hZGRyID0gZWZpX2FkZHI7Cj4gLQkvKgo+IC0JICogSWYgcHJl ZmVycmVkIGFkZHJlc3MgYWxsb2NhdGlvbiBmYWlsZWQgYWxsb2NhdGUgYXMgbG93IGFzCj4gLQkg KiBwb3NzaWJsZS4KPiAtCSAqLwo+IC0JaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewo+IC0J CXN0YXR1cyA9IGVmaV9sb3dfYWxsb2NfYWJvdmUoYWxsb2Nfc2l6ZSwgYWxpZ25tZW50LCAmbmV3 X2FkZHIsCj4gLQkJCQkJICAgICBtaW5fYWRkcik7Cj4gLQl9Cj4gLQlpZiAoc3RhdHVzICE9IEVG SV9TVUNDRVNTKSB7Cj4gLQkJZWZpX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIHVzYWJsZSBtZW1v cnkgZm9yIGtlcm5lbC5cbiIpOwo+IC0JCXJldHVybiBzdGF0dXM7Cj4gLQl9Cj4gLQo+IC0JLyoK PiAtCSAqIFdlIGtub3cgc291cmNlL2Rlc3Qgd29uJ3Qgb3ZlcmxhcCBzaW5jZSBib3RoIG1lbW9y eSByYW5nZXMKPiAtCSAqIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgVUVGSSwgc28gd2UgY2FuIHNh ZmVseSB1c2UgbWVtY3B5Lgo+IC0JICovCj4gLQltZW1jcHkoKHZvaWQgKiluZXdfYWRkciwgKHZv aWQgKiljdXJfaW1hZ2VfYWRkciwgaW1hZ2Vfc2l6ZSk7Cj4gLQo+IC0JLyogUmV0dXJuIHRoZSBu ZXcgYWRkcmVzcyBvZiB0aGUgcmVsb2NhdGVkIGltYWdlLiAqLwo+IC0JKmltYWdlX2FkZHIgPSBu ZXdfYWRkcjsKPiAtCj4gLQlyZXR1cm4gc3RhdHVzOwo+IC19Cj4gLS0gCj4gMi41NC4wLjU0NS5n NjUzOTUyNGNhMi1nb29nCg0KDQrmnKzpgq7ku7blj4rlhbbpmYTku7blkKvmnInpvpnoiq/kuK3n p5HnmoTllYbkuJrnp5jlr4bkv6Hmga/vvIzku4XpmZDkuo7lj5HpgIHnu5nkuIrpnaLlnLDlnYDk uK3liJflh7rnmoTkuKrkurrmiJbnvqTnu4TjgILnpoHmraLku7vkvZXlhbbku5bkurrku6Xku7vk vZXlvaLlvI/kvb/nlKjvvIjljIXmi6zkvYbkuI3pmZDkuo7lhajpg6jmiJbpg6jliIblnLDms4Tp nLLjgIHlpI3liLbmiJbmlaPlj5HvvInmnKzpgq7ku7blj4rlhbbpmYTku7bkuK3nmoTkv6Hmga/j gILlpoLmnpzmgqjplJnmlLbmnKzpgq7ku7bvvIzor7fmgqjnq4vljbPnlLXor53miJbpgq7ku7bp gJrnn6Xlj5Hku7bkurrlubbliKDpmaTmnKzpgq7ku7bjgIIgDQpUaGlzIGVtYWlsIGFuZCBpdHMg YXR0YWNobWVudHMgY29udGFpbiBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gZnJvbSBMb29uZ3Nv biBUZWNobm9sb2d5ICwgd2hpY2ggaXMgaW50ZW5kZWQgb25seSBmb3IgdGhlIHBlcnNvbiBvciBl bnRpdHkgd2hvc2UgYWRkcmVzcyBpcyBsaXN0ZWQgYWJvdmUuIEFueSB1c2Ugb2YgdGhlIGluZm9y bWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaW4gYW55IHdheSAoaW5jbHVkaW5nLCBidXQgbm90IGxp bWl0ZWQgdG8sIHRvdGFsIG9yIHBhcnRpYWwgZGlzY2xvc3VyZSwgcmVwcm9kdWN0aW9uIG9yIGRp c3NlbWluYXRpb24pIGJ5IHBlcnNvbnMgb3RoZXIgdGhhbiB0aGUgaW50ZW5kZWQgcmVjaXBpZW50 KHMpIGlzIHByb2hpYml0ZWQuIElmIHlvdSByZWNlaXZlIHRoaXMgZW1haWwgaW4gZXJyb3IsIHBs ZWFzZSBub3RpZnkgdGhlIHNlbmRlciBieSBwaG9uZSBvciBlbWFpbCBpbW1lZGlhdGVseSBhbmQg ZGVsZXRlIGl0LiANCg0KDQo=