From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 13EC8C197A0 for ; Thu, 16 Nov 2023 14:16:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:From:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=rnmWMe1CY6h+o/Ym+USRcJJcPqNZhnTb9aw02x/HjAE=; b=V/nWy24DnZqoSg quii3aqvH8+XrTQr33Uzd0WRsmch0dsIlI6j1LDhlPW5X8pa6TyQfE40bUuAPm1aEaZNHsK+H8C6o kadl5Zd8J50AIxLD0KGUpEAGkCAB9PH7aFS6N5PeIEbpUGRxOcDiQjRsqy4jGzKt4aVPk4Xp0Clu7 Mba4biWUqxB55/CqQ3/m6QpbbazbHnpBXCh3XMcxdk+8Su51kG6PeiyPFehaLjPWOSc/HUdoQgTV+ LaCohhCIMYlDG8oOejCChBLeNm10MztSAKr5XuQr6on0EP3f2LWfhIjGXf5KfJcBk8o7QzIenErzE 0ZG8Q56y5KXJGCd24okQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r3dA2-003fQU-0L; Thu, 16 Nov 2023 14:16:02 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r3d9y-003fP3-0s for linux-arm-kernel@lists.infradead.org; Thu, 16 Nov 2023 14:16:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1700144157; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=1Lk6j0r/0akS8fsmcFzL8BwndIPL6eNJbCF3tgd0Zgw=; b=KWc/Mdhi45jevsJIjbodwGFsmopfwLqadoXBUfcHYL4eOBDySKVGXoWyR1QatVPdnhOoQH shT+j7mhPj9SRAFrQarPudWvD8DPonZeTR6W0bqHDmu0GkLhBImD1YZkn7/GFmXnwYlq/C nZTpopH7a2qhbl+FLMEKyX0JYQ5MwnY= Received: from mail-lj1-f197.google.com (mail-lj1-f197.google.com [209.85.208.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-79-4L7YcTVNN5aw2AeSt7xExg-1; Thu, 16 Nov 2023 09:15:53 -0500 X-MC-Unique: 4L7YcTVNN5aw2AeSt7xExg-1 Received: by mail-lj1-f197.google.com with SMTP id 38308e7fff4ca-2c6ed6f7146so7847761fa.0 for ; Thu, 16 Nov 2023 06:15:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700144151; x=1700748951; h=content-transfer-encoding:in-reply-to:organization:autocrypt :references:cc:to:from:content-language:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=1Lk6j0r/0akS8fsmcFzL8BwndIPL6eNJbCF3tgd0Zgw=; b=ihlR0rCesPLXbiAD+zdz2yWxaMPm2uP1eB0jWprZEWpEteIg+RnnJ3OqdHAGH1UXot nZz4s54JGG8491jo55R/cwb7YFdPO8PtkmLsU0J+VdPHz+RqNTJ/ApiXts8BWFN385kl SNsy59ojhDuHzgrEcLZj2NhPChGuW81xRtkOQvCIAODrl0PnE906n0ebEOJxFiOKZbme +WcxBIP2zByhPHW7ueWSnmrN7n2IJENQlK7UEOc6YaP6kgbovW84E2hWe/onCMqzzU3T /EOL06x6vy2kQKdfCXSoW5InPZM9p0Lkk4ii1f6QTMQ3x+7jX+wtanowbzVn4/Jc++D/ uoiQ== X-Gm-Message-State: AOJu0YxLzOWTG20kyEFBhpJzuFRRpi+rW0tbx0s6OXb1PsdRMC9dpSDN 9D+dHP3jMBIoDoYcPs+lDDQSH+csPioLCeTbRN044+bZ3yy1f2ApcfLEEl4IGJsvpp5AHPq6SNp gHw8KrqqxwH251bAni2Wxn2f8QF3D/aGfKh8= X-Received: by 2002:a2e:a98b:0:b0:2c8:39fc:acf5 with SMTP id x11-20020a2ea98b000000b002c839fcacf5mr7889318ljq.2.1700144151304; Thu, 16 Nov 2023 06:15:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IGrVtq+o9aft9Cq1p61zHkYRXLve3VB2JIrxtNdCtZWUBjfMFgn13jgFyL5PlMon25oiwIUYA== X-Received: by 2002:a2e:a98b:0:b0:2c8:39fc:acf5 with SMTP id x11-20020a2ea98b000000b002c839fcacf5mr7889293ljq.2.1700144150746; Thu, 16 Nov 2023 06:15:50 -0800 (PST) Received: from ?IPV6:2a09:80c0:192:0:5dac:bf3d:c41:c3e7? ([2a09:80c0:192:0:5dac:bf3d:c41:c3e7]) by smtp.gmail.com with ESMTPSA id d15-20020a05600c34cf00b0040a4cc876e0sm3832909wmq.40.2023.11.16.06.15.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 16 Nov 2023 06:15:50 -0800 (PST) Message-ID: Date: Thu, 16 Nov 2023 15:15:48 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 01/14] mm: Batch-copy PTE ranges during fork() From: David Hildenbrand To: Ryan Roberts , Catalin Marinas , Will Deacon , Ard Biesheuvel , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Andrew Morton , Anshuman Khandual , Matthew Wilcox , Yu Zhao , Mark Rutland , Kefeng Wang , John Hubbard , Zi Yan Cc: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20231115163018.1303287-1-ryan.roberts@arm.com> <20231115163018.1303287-2-ryan.roberts@arm.com> <89a9fe07-a5c5-4a99-b588-e6145053c58f@redhat.com> <1459f78b-e80c-4f21-bc65-f0ab259d348a@arm.com> <08ef2c36-2b9c-4b96-9d1d-68cca0f68ba5@redhat.com> <2d027a8d-adfb-481d-89ea-c99139e669aa@arm.com> <2618b024-6a95-4bfc-a08d-59d86e9931e5@redhat.com> Autocrypt: addr=david@redhat.com; keydata= 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 WNyWQQ== Organization: Red Hat In-Reply-To: <2618b024-6a95-4bfc-a08d-59d86e9931e5@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231116_061558_453285_3C97E27E X-CRM114-Status: GOOD ( 24.42 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMTYuMTEuMjMgMTU6MTMsIERhdmlkIEhpbGRlbmJyYW5kIHdyb3RlOgo+IE9uIDE2LjExLjIz IDE0OjQ5LCBSeWFuIFJvYmVydHMgd3JvdGU6Cj4+IE9uIDE2LzExLzIwMjMgMTM6MjAsIERhdmlk IEhpbGRlbmJyYW5kIHdyb3RlOgo+Pj4gT24gMTYuMTEuMjMgMTI6MjAsIFJ5YW4gUm9iZXJ0cyB3 cm90ZToKPj4+PiBPbiAxNi8xMS8yMDIzIDExOjAzLCBEYXZpZCBIaWxkZW5icmFuZCB3cm90ZToK Pj4+Pj4gT24gMTUuMTEuMjMgMTc6MzAsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPj4+Pj4+IENvbnZl cnQgY29weV9wdGVfcmFuZ2UoKSB0byBjb3B5IGEgc2V0IG9mIHB0ZXMgaW4gYSBiYXRjaC4gQSBn aXZlbiBiYXRjaAo+Pj4+Pj4gbWFwcyBhIHBoeXNpY2FsbHkgY29udGlndW91cyBibG9jayBvZiBt ZW1vcnksIGFsbCBiZWxvbmdpbmcgdG8gdGhlIHNhbWUKPj4+Pj4+IGZvbGlvLCB3aXRoIHRoZSBz YW1lIHBlcm1pc3Npb25zLCBhbmQgZm9yIHNoYXJlZCBtYXBwaW5ncywgdGhlIHNhbWUKPj4+Pj4+ IGRpcnR5IHN0YXRlLiBUaGlzIHdpbGwgbGlrZWx5IGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgYSB0 aW55IGFtb3VudCBkdWUKPj4+Pj4+IHRvIGJhdGNoaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgY291 bnQgbWFuYWdlbWVudCBhbmQgY2FsbGluZyBzZXRfcHRlcygpCj4+Pj4+PiByYXRoZXIgdGhhbiBt YWtpbmcgaW5kaXZpZHVhbCBjYWxscyB0byBzZXRfcHRlX2F0KCkuCj4+Pj4+Pgo+Pj4+Pj4gSG93 ZXZlciwgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgdGhpcyBjaGFuZ2UgaXMgdG8gcmVkdWNl IHRoZSBudW1iZXIKPj4+Pj4+IG9mIHRsYiBtYWludGVuYW5jZSBvcGVyYXRpb25zIHRoYXQgdGhl IGFybTY0IGJhY2tlbmQgaGFzIHRvIHBlcmZvcm0KPj4+Pj4+IGR1cmluZyBmb3JrLCBhcyBpdCBp cyBhYm91dCB0byBhZGQgdHJhbnNwYXJlbnQgc3VwcG9ydCBmb3IgdGhlCj4+Pj4+PiAiY29udGln dW91cyBiaXQiIGluIGl0cyBwdGVzLiBCeSB3cml0ZS1wcm90ZWN0aW5nIHRoZSBwYXJlbnQgdXNp bmcgdGhlCj4+Pj4+PiBuZXcgcHRlcF9zZXRfd3Jwcm90ZWN0cygpIChub3RlIHRoZSAncycgYXQg dGhlIGVuZCkgZnVuY3Rpb24sIHRoZQo+Pj4+Pj4gYmFja2VuZCBjYW4gYXZvaWQgaGF2aW5nIHRv IHVuZm9sZCBjb250aWcgcmFuZ2VzIG9mIFBURXMsIHdoaWNoIGlzCj4+Pj4+PiBleHBlbnNpdmUs IHdoZW4gYWxsIHB0ZXMgaW4gdGhlIHJhbmdlIGFyZSBiZWluZyB3cml0ZS1wcm90ZWN0ZWQuCj4+ Pj4+PiBTaW1pbGFybHksIGJ5IHVzaW5nIHNldF9wdGVzKCkgcmF0aGVyIHRoYW4gc2V0X3B0ZV9h dCgpIHRvIHNldCB1cCBwdGVzCj4+Pj4+PiBpbiB0aGUgY2hpbGQsIHRoZSBiYWNrZW5kIGRvZXMg bm90IG5lZWQgdG8gZm9sZCBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb25jZQo+Pj4+Pj4gdGhleSBhcmUg YWxsIHBvcHVsYXRlZCAtIHRoZXkgY2FuIGJlIGluaXRpYWxseSBwb3B1bGF0ZWQgYXMgYSBjb250 aWd1b3VzCj4+Pj4+PiByYW5nZSBpbiB0aGUgZmlyc3QgcGxhY2UuCj4+Pj4+Pgo+Pj4+Pj4gVGhp cyBjaGFuZ2UgYWRkcmVzc2VzIHRoZSBjb3JlLW1tIHJlZmFjdG9yaW5nIG9ubHksIGFuZCBpbnRy b2R1Y2VzCj4+Pj4+PiBwdGVwX3NldF93cnByb3RlY3RzKCkgd2l0aCBhIGRlZmF1bHQgaW1wbGVt ZW50YXRpb24gdGhhdCBjYWxscwo+Pj4+Pj4gcHRlcF9zZXRfd3Jwcm90ZWN0KCkgZm9yIGVhY2gg cHRlIGluIHRoZSByYW5nZS4gQSBzZXBhcmF0ZSBjaGFuZ2Ugd2lsbAo+Pj4+Pj4gaW1wbGVtZW50 IHB0ZXBfc2V0X3dycHJvdGVjdHMoKSBpbiB0aGUgYXJtNjQgYmFja2VuZCB0byByZWFsaXplIHRo ZQo+Pj4+Pj4gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYXMgcGFydCBvZiB0aGUgd29yayB0byBl bmFibGUgY29udHB0ZSBtYXBwaW5ncy4KPj4+Pj4+Cj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBSeWFu IFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPgo+Pj4+Pj4gLS0tCj4+Pj4+PiAgIMKgwqAg aW5jbHVkZS9saW51eC9wZ3RhYmxlLmggfMKgIDEzICsrKwo+Pj4+Pj4gICDCoMKgIG1tL21lbW9y eS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTc1ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0KPj4+Pj4+ICAgwqDCoCAyIGZpbGVzIGNoYW5nZWQsIDE1MCBpbnNl cnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKPj4+Pj4+Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+Pj4+Pj4gaW5k ZXggYWY3NjM5YzNiMGEzLi4xYzUwZjhhMGZkZGUgMTAwNjQ0Cj4+Pj4+PiAtLS0gYS9pbmNsdWRl L2xpbnV4L3BndGFibGUuaAo+Pj4+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKPj4+ Pj4+IEBAIC02MjIsNiArNjIyLDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnBy b3RlY3Qoc3RydWN0IG1tX3N0cnVjdAo+Pj4+Pj4gKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlcwo+ Pj4+Pj4gICDCoMKgIH0KPj4+Pj4+ICAgwqDCoCAjZW5kaWYKPj4+Pj4+ICAgwqDCoCArI2lmbmRl ZiBwdGVwX3NldF93cnByb3RlY3RzCj4+Pj4+PiArc3RydWN0IG1tX3N0cnVjdDsKPj4+Pj4+ICtz dGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0cyhzdHJ1Y3QgbW1fc3RydWN0ICpt bSwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBh ZGRyZXNzLCBwdGVfdCAqcHRlcCwKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgaW50IG5yKQo+Pj4+Pj4gK3sKPj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgaW50 IGk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrLCBhZGRy ZXNzICs9IFBBR0VfU0laRSwgcHRlcCsrKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHB0ZXBfc2V0 X3dycHJvdGVjdChtbSwgYWRkcmVzcywgcHRlcCk7Cj4+Pj4+PiArfQo+Pj4+Pj4gKyNlbmRpZgo+ Pj4+Pj4gKwo+Pj4+Pj4gICDCoMKgIC8qCj4+Pj4+PiAgIMKgwqDCoCAqIE9uIHNvbWUgYXJjaGl0 ZWN0dXJlcyBoYXJkd2FyZSBkb2VzIG5vdCBzZXQgcGFnZSBhY2Nlc3MgYml0IHdoZW4KPj4+Pj4+ IGFjY2Vzc2luZwo+Pj4+Pj4gICDCoMKgwqAgKiBtZW1vcnkgcGFnZSwgaXQgaXMgcmVzcG9uc2li aWxpdHkgb2Ygc29mdHdhcmUgc2V0dGluZyB0aGlzIGJpdC4gSXQgYnJpbmdzCj4+Pj4+PiBkaWZm IC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwo+Pj4+Pj4gaW5kZXggMWYxOGVkNGE1 NDk3Li5iN2M4MjI4ODgzY2YgMTAwNjQ0Cj4+Pj4+PiAtLS0gYS9tbS9tZW1vcnkuYwo+Pj4+Pj4g KysrIGIvbW0vbWVtb3J5LmMKPj4+Pj4+IEBAIC05MjEsNDYgKzkyMSwxMjkgQEAgY29weV9wcmVz ZW50X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLAo+Pj4+Pj4gc3RydWN0IHZt X2FyZWFfc3RydWN0ICpzcmNfdm1hCj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFVm ZmQtd3AgbmVlZHMgdG8gYmUgZGVsaXZlcmVkIHRvIGRlc3QgcHRlIGFzIHdlbGwgKi8KPj4+Pj4+ ICAgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRlID0gcHRlX21rdWZmZF93cChwdGUpOwo+Pj4+Pj4g ICDCoMKgwqDCoMKgwqAgc2V0X3B0ZV9hdChkc3Rfdm1hLT52bV9tbSwgYWRkciwgZHN0X3B0ZSwg cHRlKTsKPj4+Pj4+IC3CoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+PiArwqDCoMKgIHJldHVybiAxOwo+ Pj4+Pj4gK30KPj4+Pj4+ICsKPj4+Pj4+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFn ZV9jb250X21hcHBlZF92YWRkcihzdHJ1Y3QgcGFnZSAqcGFnZSwKPj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBhZ2UgKmFuY2hvciwgdW5zaWduZWQgbG9uZyBh bmNob3JfdmFkZHIpCj4+Pj4+PiArewo+Pj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIG9mZnNl dDsKPj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyB2YWRkcjsKPj4+Pj4+ICsKPj4+Pj4+ICvC oMKgwqAgb2Zmc2V0ID0gKHBhZ2VfdG9fcGZuKHBhZ2UpIC0gcGFnZV90b19wZm4oYW5jaG9yKSkg PDwgUEFHRV9TSElGVDsKPj4+Pj4+ICvCoMKgwqAgdmFkZHIgPSBhbmNob3JfdmFkZHIgKyBvZmZz ZXQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmIChhbmNob3IgPiBwYWdlKSB7Cj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHZhZGRyID4gYW5jaG9yX3ZhZGRyKQo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+PiArwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHZhZGRyIDwgYW5jaG9yX3ZhZGRyKQo+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIFVMT05HX01BWDsKPj4+Pj4+ICvCoMKgwqAgfQo+Pj4+Pj4g Kwo+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gdmFkZHI7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4g K3N0YXRpYyBpbnQgZm9saW9fbnJfcGFnZXNfY29udF9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xp bywKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHBhZ2UgKnBhZ2UsIHB0ZV90ICpwdGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBl bmQsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0 ZV90IHB0ZW50LCBib29sICphbnlfZGlydHkpCj4+Pj4+PiArewo+Pj4+Pj4gK8KgwqDCoCBpbnQg Zmxvb3BzOwo+Pj4+Pj4gK8KgwqDCoCBpbnQgaTsKPj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9u ZyBwZm47Cj4+Pj4+PiArwqDCoMKgIHBncHJvdF90IHByb3Q7Cj4+Pj4+PiArwqDCoMKgIHN0cnVj dCBwYWdlICpmb2xpb19lbmQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICghZm9saW9fdGVz dF9sYXJnZShmb2xpbykpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDE7Cj4+Pj4+PiAr Cj4+Pj4+PiArwqDCoMKgIGZvbGlvX2VuZCA9ICZmb2xpby0+cGFnZSArIGZvbGlvX25yX3BhZ2Vz KGZvbGlvKTsKPj4+Pj4+ICvCoMKgwqAgZW5kID0gbWluKHBhZ2VfY29udF9tYXBwZWRfdmFkZHIo Zm9saW9fZW5kLCBwYWdlLCBhZGRyKSwgZW5kKTsKPj4+Pj4+ICvCoMKgwqAgZmxvb3BzID0gKGVu ZCAtIGFkZHIpID4+IFBBR0VfU0hJRlQ7Cj4+Pj4+PiArwqDCoMKgIHBmbiA9IHBhZ2VfdG9fcGZu KHBhZ2UpOwo+Pj4+Pj4gK8KgwqDCoCBwcm90ID0gcHRlX3BncHJvdChwdGVfbWtvbGQocHRlX21r Y2xlYW4ocHRlbnQpKSk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgICphbnlfZGlydHkgPSBwdGVf ZGlydHkocHRlbnQpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBwZm4rKzsKPj4+Pj4+ICvCoMKg wqAgcHRlKys7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGZvciAoaSA9IDE7IGkgPCBmbG9vcHM7 IGkrKykgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHB0ZW50ID0gcHRlcF9nZXQocHRlKTsKPj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBwdGVudCA9IHB0ZV9ta29sZChwdGVfbWtjbGVhbihwdGVudCkp Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcHRlX3ByZXNlbnQocHRlbnQp IHx8IHB0ZV9wZm4ocHRlbnQpICE9IHBmbiB8fAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcGdwcm90X3ZhbChwdGVfcGdwcm90KHB0ZW50KSkgIT0gcGdwcm90X3ZhbChwcm90KSkKPj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGlmIChwdGVfZGlydHkocHRlbnQpKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKmFueV9kaXJ0eSA9IHRydWU7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg cGZuKys7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcHRlKys7Cj4+Pj4+PiArwqDCoMKgIH0KPj4+ Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIGk7Cj4+Pj4+PiAgIMKgwqAgfQo+Pj4+Pj4gICDC oMKgIMKgIC8qCj4+Pj4+PiAtICogQ29weSBvbmUgcHRlLsKgIFJldHVybnMgMCBpZiBzdWNjZWVk ZWQsIG9yIC1FQUdBSU4gaWYgb25lIHByZWFsbG9jYXRlZCBwYWdlCj4+Pj4+PiAtICogaXMgcmVx dWlyZWQgdG8gY29weSB0aGlzIHB0ZS4KPj4+Pj4+ICsgKiBDb3B5IHNldCBvZiBjb250aWd1b3Vz IHB0ZXMuwqAgUmV0dXJucyBudW1iZXIgb2YgcHRlcyBjb3BpZWQgaWYgc3VjY2VlZGVkCj4+Pj4+ PiArICogKGFsd2F5cyBndGUgMSksIG9yIC1FQUdBSU4gaWYgb25lIHByZWFsbG9jYXRlZCBwYWdl IGlzIHJlcXVpcmVkIHRvIGNvcHkgdGhlCj4+Pj4+PiArICogZmlyc3QgcHRlLgo+Pj4+Pj4gICDC oMKgwqAgKi8KPj4+Pj4+ICAgwqDCoCBzdGF0aWMgaW5saW5lIGludAo+Pj4+Pj4gLWNvcHlfcHJl c2VudF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QKPj4+Pj4+ICpzcmNfdm1hLAo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgcHRlX3QgKmRz dF9wdGUsIHB0ZV90ICpzcmNfcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqcnNzLAo+Pj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGZvbGlvICoqcHJlYWxsb2MpCj4+Pj4+PiArY29w eV9wcmVzZW50X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QKPj4+Pj4+ICpzcmNfdm1hLAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBw dGVfdCAqZHN0X3B0ZSwgcHRlX3QgKnNyY19wdGUsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgIGludCAqcnNzLCBzdHJ1Y3QgZm9saW8gKipwcmVhbGxvYykKPj4+Pj4+ICAgwqDC oCB7Cj4+Pj4+PiAgIMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0gPSBzcmNf dm1hLT52bV9tbTsKPj4+Pj4+ICAgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3Mg PSBzcmNfdm1hLT52bV9mbGFnczsKPj4+Pj4+ICAgwqDCoMKgwqDCoMKgIHB0ZV90IHB0ZSA9IHB0 ZXBfZ2V0KHNyY19wdGUpOwo+Pj4+Pj4gICDCoMKgwqDCoMKgwqAgc3RydWN0IHBhZ2UgKnBhZ2U7 Cj4+Pj4+PiAgIMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZm9saW8gKmZvbGlvOwo+Pj4+Pj4gK8KgwqDC oCBpbnQgbnIgPSAxOwo+Pj4+Pj4gK8KgwqDCoCBib29sIGFub247Cj4+Pj4+PiArwqDCoMKgIGJv b2wgYW55X2RpcnR5ID0gcHRlX2RpcnR5KHB0ZSk7Cj4+Pj4+PiArwqDCoMKgIGludCBpOwo+Pj4+ Pj4gICDCoMKgIMKgwqDCoMKgwqAgcGFnZSA9IHZtX25vcm1hbF9wYWdlKHNyY192bWEsIGFkZHIs IHB0ZSk7Cj4+Pj4+PiAtwqDCoMKgIGlmIChwYWdlKQo+Pj4+Pj4gK8KgwqDCoCBpZiAocGFnZSkg ewo+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7 Cj4+Pj4+PiAtwqDCoMKgIGlmIChwYWdlICYmIGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHsKPj4+ Pj4+IC3CoMKgwqDCoMKgwqDCoCAvKgo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKiBJZiB0aGlz IHBhZ2UgbWF5IGhhdmUgYmVlbiBwaW5uZWQgYnkgdGhlIHBhcmVudCBwcm9jZXNzLAo+Pj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqAgKiBjb3B5IHRoZSBwYWdlIGltbWVkaWF0ZWx5IGZvciB0aGUgY2hp bGQgc28gdGhhdCB3ZSdsbCBhbHdheXMKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgICogZ3VhcmFu dGVlIHRoZSBwaW5uZWQgcGFnZSB3b24ndCBiZSByYW5kb21seSByZXBsYWNlZCBpbiB0aGUKPj4+ Pj4+IC3CoMKgwqDCoMKgwqDCoMKgICogZnV0dXJlLgo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAg Ki8KPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBmb2xpb19nZXQoZm9saW8pOwo+Pj4+Pj4gLcKgwqDC oMKgwqDCoMKgIGlmICh1bmxpa2VseShwYWdlX3RyeV9kdXBfYW5vbl9ybWFwKHBhZ2UsIGZhbHNl LCBzcmNfdm1hKSkpIHsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFBhZ2UgbWF5 IGJlIHBpbm5lZCwgd2UgaGF2ZSB0byBjb3B5LiAqLwo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZm9saW9fcHV0KGZvbGlvKTsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiBjb3B5X3ByZXNlbnRfcGFnZShkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfcHRlLCBzcmNfcHRl LAo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhZGRyLCByc3MsIHByZWFsbG9jLCBwYWdlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBhbm9u ID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBuciA9IGZv bGlvX25yX3BhZ2VzX2NvbnRfbWFwcGVkKGZvbGlvLCBwYWdlLCBzcmNfcHRlLCBhZGRyLAo+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5kLCBw dGUsICZhbnlfZGlydHkpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9 IDA7IGkgPCBucjsgaSsrLCBwYWdlKyspIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChhbm9uKSB7Cj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJZiB0aGlzIHBhZ2UgbWF5 IGhhdmUgYmVlbiBwaW5uZWQgYnkgdGhlCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBwYXJlbnQgcHJvY2VzcywgY29weSB0aGUgcGFnZSBpbW1lZGlhdGVseSBmb3IK Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHRoZSBjaGlsZCBzbyB0 aGF0IHdlJ2xsIGFsd2F5cyBndWFyYW50ZWUgdGhlCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBwaW5uZWQgcGFnZSB3b24ndCBiZSByYW5kb21seSByZXBsYWNlZCBp biB0aGUKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGZ1dHVyZS4K Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkocGFnZV90cnlfZHVwX2Fub25f cm1hcCgKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHBhZ2UsIGZhbHNlLCBzcmNfdm1hKSkpIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaSAhPSAwKQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogUGFnZSBtYXkgYmUgcGlubmVkLCB3ZSBoYXZl IHRvIGNvcHkuICovCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIGNvcHlfcHJlc2VudF9wYWdlKAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X3B0ZSwKPj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNyY19w dGUsIGFkZHIsIHJzcywgcHJlYWxsb2MsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWdlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByc3Nb TU1fQU5PTlBBR0VTXSsrOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBW TV9CVUdfT04oUGFnZUFub25FeGNsdXNpdmUocGFnZSkpOwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfSBlbHNlIHsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGFnZV9kdXBfZmlsZV9ybWFwKHBhZ2UsIGZhbHNlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcnNzW21tX2NvdW50ZXJfZmlsZShwYWdlKV0rKzsKPj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+ Pj4gLcKgwqDCoMKgwqDCoMKgIHJzc1tNTV9BTk9OUEFHRVNdKys7Cj4+Pj4+PiAtwqDCoMKgIH0g ZWxzZSBpZiAocGFnZSkgewo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGZvbGlvX2dldChmb2xpbyk7 Cj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcGFnZV9kdXBfZmlsZV9ybWFwKHBhZ2UsIGZhbHNlKTsK Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByc3NbbW1fY291bnRlcl9maWxlKHBhZ2UpXSsrOwo+Pj4+ Pj4gKwo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG5yID0gaTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBmb2xpb19yZWZfYWRkKGZvbGlvLCBucik7Cj4+Pj4+PiAgIMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ PiAgIMKgwqAgwqDCoMKgwqDCoCAvKgo+Pj4+Pj4gQEAgLTk2OCwyNCArMTA1MSwyOCBAQCBjb3B5 X3ByZXNlbnRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0Cj4+Pj4+ PiB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwKPj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqAgKiBpbiB0 aGUgcGFyZW50IGFuZCB0aGUgY2hpbGQKPj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqAgKi8KPj4+Pj4+ ICAgwqDCoMKgwqDCoMKgIGlmIChpc19jb3dfbWFwcGluZyh2bV9mbGFncykgJiYgcHRlX3dyaXRl KHB0ZSkpIHsKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBwdGVwX3NldF93cnByb3RlY3Qoc3JjX21t LCBhZGRyLCBzcmNfcHRlKTsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBwdGVwX3NldF93cnByb3Rl Y3RzKHNyY19tbSwgYWRkciwgc3JjX3B0ZSwgbnIpOwo+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7Cj4+Pj4+Cj4+Pj4+IFlvdSBsaWtlbHkgd2Fu dCBhbiAiYW55X3B0ZV93cml0YWJsZSIgY2hlY2sgaGVyZSBpbnN0ZWFkLCBubz8KPj4+Pj4KPj4+ Pj4gQW55IG9wZXJhdGlvbnMgdGhhdCB0YXJnZXQgYSBzaW5nbGUgaW5kaWl2aWR1YWwgUFRFIHdo aWxlIG11bHRpcGxlIFBURXMgYXJlCj4+Pj4+IGFkanVzdGVkIGFyZSBzdXNwaWNpb3VzIDopCj4+ Pj4KPj4+PiBUaGUgaWRlYSBpcyB0aGF0IEkndmUgYWxyZWFkeSBjb25zdHJhaW5lZCB0aGUgYmF0 Y2ggb2YgcGFnZXMgc3VjaCB0aGF0IHRoZQo+Pj4+IHBlcm1pc3Npb25zIGFyZSBhbGwgdGhlIHNh bWUgKHNlZSBmb2xpb19ucl9wYWdlc19jb250X21hcHBlZCgpKS4gU28gaWYgdGhlIGZpcnN0Cj4+ Pj4gcHRlIGlzIHdyaXRhYmxlLCB0aGVuIHRoZXkgYWxsIGFyZSAtIHNvbWV0aGluZyBoYXMgZ29u ZSBiYWRseSB3cm9uZyBpZiBzb21lIGFyZQo+Pj4+IHdyaXRhYmxlIGFuZCBvdGhlcnMgYXJlIG5v dC4KPj4+Cj4+PiBJIHdvbmRlciBpZiBpdCB3b3VsZCBiZSBjbGVhbmVyIGFuZCBlYXNpZXIgdG8g bm90IGRvIHRoYXQsIHRob3VnaC4KPj4+Cj4+PiBTaW1wbHkgcmVjb3JkIGlmIGFueSBwdGUgaXMg d3JpdGFibGUuIEFmdGVyd2FyZHMgdGhleSB3aWxsICphbGwqIGJlIFIvTyBhbmQgeW91Cj4+PiBj YW4gc2V0IHRoZSBjb250IGJpdCwgY29ycmVjdD8KPj4KPj4gT2ggSSBzZWUgd2hhdCB5b3UgbWVh biAtIHRoYXQgb25seSB3b3JrcyBmb3IgY293IG1hcHBpbmdzIHRob3VnaC4gSWYgeW91IGhhdmUg YQo+PiBzaGFyZWQgbWFwcGluZywgeW91IHdvbid0IGJlIG1ha2luZyBpdCByZWFkLW9ubHkgYXQg Zm9yay4gU28gaWYgd2UgaWdub3JlCj4+IHB0ZV93cml0ZSgpIHN0YXRlIHdoZW4gZGVtYXJraW5n IHRoZSBiYXRjaGVzLCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgYmF0Y2ggb2YKPj4gcGFnZXMgd2l0 aCBhIG1peCBvZiBSTyBhbmQgUlcgaW4gdGhlIHBhcmVudCwgYnV0IHRoZW4gd2Ugc2V0X3B0ZXMo KSBmb3IgdGhlCj4+IGNoaWxkIGFuZCB0aG9zZSBwYWdlcyB3aWxsIGFsbCBoYXZlIHRoZSBwZXJt aXNzaW9ucyBvZiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYmF0Y2guCj4gCj4gSSBzZWUgd2hhdCB5 b3UgbWVhbi4KPiAKPiBBZnRlciBmb3JrKCksIGFsbCBhbm9uIHBhZ2VzIHdpbGwgYmUgUi9PIGlu IHRoZSBwYXJlbnQgYW5kIHRoZSBjaGlsZC4KPiBFYXN5LiBJZiBhbnkgUFRFIGlzIHdyaXRhYmxl LCB3cnByb3RlY3QgYWxsIGluIHRoZSBwYXJlbnQgYW5kIHRoZSBjaGlsZC4KPiAKPiBBZnRlciBm b3JrKCksIGFsbCBzaGFyZWQgcGFnZXMgY2FuIGJlIFIvTyBvciBSL1cgaW4gdGhlIHBhcmVudC4g Rm9yCj4gc2ltcGxpY2l0eSwgSSB0aGluayB5b3UgY2FuIHNpbXBseSBzZXQgdGhlbSBhbGwgUi9P IGluIHRoZSBjaGlsZC4gU28gaWYKPiBhbnkgUFRFIGlzIHdyaXRhYmxlLCB3cnByb3RlY3QgYWxs IGluIHRoZSBjaGlsZC4KCk9yIGJldHRlcjogaWYgYW55IGlzIFIvTywgc2V0IHRoZW0gYWxsIFIv Ty4gT3RoZXJ3aXNlIGp1c3QgbGVhdmUgdGhlbSBhcyBpcy4KCkJ1dCBkZXZpbCBpcyBpbiB0aGUg ZGV0YWlsLgoKLS0gCkNoZWVycywKCkRhdmlkIC8gZGhpbGRlbmIKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==