Received: by 2002:a05:7412:f589:b0:e2:908c:2ebd with SMTP id eh9csp1150025rdb; Wed, 1 Nov 2023 12:46:05 -0700 (PDT) X-Google-Smtp-Source: AGHT+IELDTClMdK2As9t+YJ3kQ5qAyG6YOBynenWb/SZE3DHaiJ0IeWddMhwPlMDZFs2LIzDN4x6 X-Received: by 2002:a17:90b:180d:b0:280:963d:9cb with SMTP id lw13-20020a17090b180d00b00280963d09cbmr5202396pjb.23.1698867965514; Wed, 01 Nov 2023 12:46:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698867965; cv=none; d=google.com; s=arc-20160816; b=ehhQWE89J7bUeh5qGd5rkB+/V3U45V4utycBlVIJIT0XbNJQChiNP9L4qVV2+wre0O Ye5RscvjPMhZhOmtMAGzWErytRBwrsZ8pgoxfVj1B8JSgPTDV1lP2aHPNeTHGNwf4/eW UzajN36LoJGOe+CMKPkjNtWWQsCUw0kzWQnh8JFlGw6ASaXoK+8Sc44HkweU3zITqJqp nBJv1sZiN+xtYIrbx4U/fwhRPOcQ05H5lcJXzCXUPoQLiWUSEmNnFT4NGsUAsGl274Ho 07Ci5s6QvWtAzInYJSB9Jd5jv+uOtzWdbY9DzUNR/Hv1iXoSPWUCK/vLR5Hb3h/k7WDw RN2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:organization:references:in-reply-to:date :cc:to:from:subject:message-id:dkim-signature; bh=GXhWQ3uJFwAx+xAXOYkdtMwRRX83E4wAlsWhO2McaJQ=; fh=6GQe0huvF66Jx8EQbhLsKzwJagHH6JvpLP6riXw8fjM=; b=JcGMeqWX7Bd/4pLi2Ocvx7nzyWDq+ZRLHZYH0bz8UHmXIR857JPGZIvw01eQNuLID8 34n6gtK3A/efaySFpgJyn5EfHwZQSiVdIb+NlOWsQ6TI/n91pPX++LQSrvJcGig3MGat y2XTfZdt7olob2L5AI6PjHeRVWUMNEhp39Gf2tmFR7okcGU8IGcYrUq5fbWCL5bjSue/ y53kD0d/MD4nBvYo8mU1DV8i5NQH/g6K6CXOnA3IOFrmViszs1NSinujX4at0BMXIEnC GQX9ucij0XXnn37Vrp801t1FYGxWsCipEH58wJVEVwrIlMQHDd+o2vHBreE/zQHLrMc0 Xqhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=V0K2X3nv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id ez12-20020a17090ae14c00b00275cffed966si1389188pjb.57.2023.11.01.12.46.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 12:46:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=V0K2X3nv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 88A328087FF1; Wed, 1 Nov 2023 12:45:57 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346851AbjKATpa (ORCPT + 99 others); Wed, 1 Nov 2023 15:45:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45406 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346829AbjKATp3 (ORCPT ); Wed, 1 Nov 2023 15:45:29 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 020E08E for ; Wed, 1 Nov 2023 12:45:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698867923; x=1730403923; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=GXhWQ3uJFwAx+xAXOYkdtMwRRX83E4wAlsWhO2McaJQ=; b=V0K2X3nvwJmSWAwR+HH0jeSfs81psFbB+ed8KO5IngkurnrQ7NF7OoOu iiFVsJZqb5TWroJ5ueUzbpJshFAmiuoM3liFORTs7YPx3ghAOEjL6Nr+q ChZJCCMo0xgrV7TXN4RvoFh1v5rh46VASY92CZAbwzprDQ9pHYHJokMn0 vxqOqA5ndXeAw8y/qB/H7RDWDkml8uV949BL9pOr9/H0WVZ3xuneEBi12 d5DaYSRJ6Rp/FKF+pPKnobLvmjgsW43+QzOlfC7O7cHdhHnoB4o8QZ7ws cuy4RiZ9nUaF5Dq1S47IHB/icA2+T77gCVe/nOua3Ekuzs4r7XDnwhdF+ Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="392442617" X-IronPort-AV: E=Sophos;i="6.03,269,1694761200"; d="scan'208";a="392442617" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2023 12:45:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10881"; a="737505743" X-IronPort-AV: E=Sophos;i="6.03,269,1694761200"; d="scan'208";a="737505743" Received: from sbint17x-mobl.gar.corp.intel.com (HELO [10.249.254.166]) ([10.249.254.166]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2023 12:45:18 -0700 Message-ID: Subject: Re: [PATCH drm-misc-next v7 4/7] drm/gpuvm: add an abstraction for a VM / BO combination From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Danilo Krummrich , airlied@gmail.com, daniel@ffwll.ch, matthew.brost@intel.com, sarah.walker@imgtec.com, donald.robson@imgtec.com, boris.brezillon@collabora.com, christian.koenig@amd.com, faith@gfxstrand.net Cc: nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Date: Wed, 01 Nov 2023 20:45:15 +0100 In-Reply-To: <8eca7c96-1401-44c0-a150-34221405e3c3@redhat.com> References: <20231023201659.25332-1-dakr@redhat.com> <20231023201659.25332-5-dakr@redhat.com> <6fa058a4-20d3-44b9-af58-755cfb375d75@redhat.com> <25ac1a025060f7aeb5af363124c6919d7742e8cf.camel@linux.intel.com> <8eca7c96-1401-44c0-a150-34221405e3c3@redhat.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 01 Nov 2023 12:45:57 -0700 (PDT) T24gV2VkLCAyMDIzLTExLTAxIGF0IDE4OjIxICswMTAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3Rl Ogo+IE9uIDExLzEvMjMgMTc6MzgsIFRob21hcyBIZWxsc3Ryw7ZtIHdyb3RlOgo+ID4gT24gVHVl LCAyMDIzLTEwLTMxIGF0IDE4OjM4ICswMTAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3RlOgo+ID4g PiBPbiAxMC8zMS8yMyAxMTozMiwgVGhvbWFzIEhlbGxzdHLDtm0gd3JvdGU6Cj4gPiA+ID4gT24g TW9uLCAyMDIzLTEwLTIzIGF0IDIyOjE2ICswMjAwLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3RlOgo+ ID4gPiA+ID4gQWRkIGFuIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW4gdGhlIGRybV9ncHV2YSBt YXBwaW5ncyBvZiBhCj4gPiA+ID4gPiBwYXJ0aWN1bGFyCj4gPiA+ID4gPiBkcm1fZ2VtX29iamVj dCBhbmQgdGhpcyBHRU0gb2JqZWN0IGl0c2VsZi4gVGhlIGFic3RyYWN0aW9uCj4gPiA+ID4gPiBy ZXByZXNlbnRzCj4gPiA+ID4gPiBhCj4gPiA+ID4gPiBjb21iaW5hdGlvbiBvZiBhIGRybV9nZW1f b2JqZWN0IGFuZCBkcm1fZ3B1dm0uIFRoZQo+ID4gPiA+ID4gZHJtX2dlbV9vYmplY3QKPiA+ID4g PiA+IGhvbGRzCj4gPiA+ID4gPiBhIGxpc3Qgb2YgZHJtX2dwdXZtX2JvIHN0cnVjdHVyZXMgKHRo ZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nCj4gPiA+ID4gPiB0aGlzCj4gPiA+ID4gPiBhYnN0cmFj dGlvbiksIHdoaWxlIGVhY2ggZHJtX2dwdXZtX2JvIGNvbnRhaW5zIGxpc3Qgb2YKPiA+ID4gPiA+ IG1hcHBpbmdzCj4gPiA+ID4gPiBvZgo+ID4gPiA+ID4gdGhpcwo+ID4gPiA+ID4gR0VNIG9iamVj dC4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gVGhpcyBoYXMgbXVsdGlwbGUgYWR2YW50YWdlczoKPiA+ ID4gPiA+IAo+ID4gPiA+ID4gMSkgV2UgY2FuIHVzZSB0aGUgZHJtX2dwdXZtX2JvIHN0cnVjdHVy ZSB0byBhdHRhY2ggaXQgdG8KPiA+ID4gPiA+IHZhcmlvdXMKPiA+ID4gPiA+IGxpc3RzCj4gPiA+ ID4gPiDCoMKgwqDCoCBvZiB0aGUgZHJtX2dwdXZtLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdHJhY2tp bmcgZXh0ZXJuYWwKPiA+ID4gPiA+IGFuZAo+ID4gPiA+ID4gZXZpY3RlZAo+ID4gPiA+ID4gwqDC oMKgwqAgb2JqZWN0cyBwZXIgVk0sIHdoaWNoIGlzIGludHJvZHVjZWQgaW4gc3Vic2VxdWVudAo+ ID4gPiA+ID4gcGF0Y2hlcy4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gMikgRmluZGluZyBtYXBwaW5n cyBvZiBhIGNlcnRhaW4gZHJtX2dlbV9vYmplY3QgbWFwcGVkIGluIGEKPiA+ID4gPiA+IGNlcnRh aW4KPiA+ID4gPiA+IMKgwqDCoMKgIGRybV9ncHV2bSBiZWNvbWVzIG11Y2ggY2hlYXBlci4KPiA+ ID4gPiA+IAo+ID4gPiA+ID4gMykgRHJpdmVycyBjYW4gZGVyaXZlIGFuZCBleHRlbmQgdGhlIHN0 cnVjdHVyZSB0byBlYXNpbHkKPiA+ID4gPiA+IHJlcHJlc2VudAo+ID4gPiA+ID4gwqDCoMKgwqAg ZHJpdmVyIHNwZWNpZmljIHN0YXRlcyBvZiBhIEJPIGZvciBhIGNlcnRhaW4gR1BVVk0uCj4gPiA+ ID4gPiAKPiA+ID4gPiA+IFRoZSBpZGVhIG9mIHRoaXMgYWJzdHJhY3Rpb24gd2FzIHRha2VuIGZy b20gYW1kZ3B1LCBoZW5jZSB0aGUKPiA+ID4gPiA+IGNyZWRpdAo+ID4gPiA+ID4gZm9yCj4gPiA+ ID4gPiB0aGlzIGlkZWEgZ29lcyB0byB0aGUgZGV2ZWxvcGVycyBvZiBhbWRncHUuCj4gPiA+ID4g PiAKPiA+ID4gPiA+IENjOiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5j b20+Cj4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBEYW5pbG8gS3J1bW1yaWNoIDxkYWtyQHJlZGhh dC5jb20+Cj4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+IMKgwqDCoGRyaXZlcnMvZ3B1L2RybS9kcm1f Z3B1dm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAzMzUKPiA+ID4gPiA+ICsrKysrKysrKysr KysrKysrKysrKy0tCj4gPiA+ID4gPiAtLQo+ID4gPiA+ID4gwqDCoMKgZHJpdmVycy9ncHUvZHJt L25vdXZlYXUvbm91dmVhdV91dm1tLmMgfMKgIDY0ICsrKy0tCj4gPiA+ID4gPiDCoMKgwqBpbmNs dWRlL2RybS9kcm1fZ2VtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAz MiArLS0KPiA+ID4gPiA+IMKgwqDCoGluY2x1ZGUvZHJtL2RybV9ncHV2bS5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHwgMTg4Cj4gPiA+ID4gPiArKysrKysrKysrKysrLQo+ID4gPiA+ ID4gwqDCoMKgNCBmaWxlcyBjaGFuZ2VkLCA1MzMgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25z KC0pCj4gPiA+ID4gPiAKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2dwdXZtLmMKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jCj4gPiA+ID4g PiBpbmRleCBjMDMzMzI4ODM0MzIuLjdmNGY1OTE5Zjg0YyAxMDA2NDQKPiA+ID4gPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9ncHV2bS5jCj4gPiA+ID4gPiBAQCAtNzAsNiArNzAsMTggQEAKPiA+ID4gPiA+IMKg wqDCoCAqICZkcm1fZ2VtX29iamVjdCwgc3VjaCBhcyB0aGUgJmRybV9nZW1fb2JqZWN0IGNvbnRh aW5pbmcKPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gcm9vdAo+ID4gPiA+ID4gcGFnZSB0YWJsZSwK PiA+ID4gPiA+IMKgwqDCoCAqIGJ1dCBpdCBjYW4gYWxzbyBiZSBhICdkdW1teScgb2JqZWN0LCB3 aGljaCBjYW4gYmUKPiA+ID4gPiA+IGFsbG9jYXRlZAo+ID4gPiA+ID4gd2l0aAo+ID4gPiA+ID4g wqDCoMKgICogZHJtX2dwdXZtX3Jlc3Zfb2JqZWN0X2FsbG9jKCkuCj4gPiA+ID4gPiArICoKPiA+ ID4gPiA+ICsgKiBJbiBvcmRlciB0byBjb25uZWN0IGEgc3RydWN0IGRybV9ncHV2YSBpdHMgYmFj a2luZwo+ID4gPiA+ID4gJmRybV9nZW1fb2JqZWN0IGVhY2gKPiA+ID4gPiA+ICsgKiAmZHJtX2dl bV9vYmplY3QgbWFpbnRhaW5zIGEgbGlzdCBvZiAmZHJtX2dwdXZtX2JvCj4gPiA+ID4gPiBzdHJ1 Y3R1cmVzLAo+ID4gPiA+ID4gYW5kCj4gPiA+ID4gPiBlYWNoCj4gPiA+ID4gPiArICogJmRybV9n cHV2bV9ibyBjb250YWlucyBhIGxpc3Qgb2YgJmRybV9ncHV2YSBzdHJ1Y3R1cmVzLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogQSAmZHJtX2dwdXZtX2JvIGlzIGFuIGFic3RyYWN0aW9uIHRo YXQgcmVwcmVzZW50cyBhCj4gPiA+ID4gPiBjb21iaW5hdGlvbgo+ID4gPiA+ID4gb2YgYQo+ID4g PiA+ID4gKyAqICZkcm1fZ3B1dm0gYW5kIGEgJmRybV9nZW1fb2JqZWN0LiBFdmVyeSBzdWNoIGNv bWJpbmF0aW9uCj4gPiA+ID4gPiBzaG91bGQKPiA+ID4gPiA+IGJlIHVuaXF1ZS4KPiA+ID4gPiA+ ICsgKiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIEFQSSB0aHJvdWdoIGRybV9ncHV2bV9ib19vYnRh aW4oKQo+ID4gPiA+ID4gYW5kCj4gPiA+ID4gPiArICogZHJtX2dwdXZtX2JvX29idGFpbl9wcmVh bGxvYygpIHdoaWNoIGZpcnN0IGxvb2sgaW50byB0aGUKPiA+ID4gPiA+IGNvcnJlc3BvbmRpbmcK PiA+ID4gPiA+ICsgKiAmZHJtX2dlbV9vYmplY3QgbGlzdCBvZiAmZHJtX2dwdXZtX2JvcyBmb3Ig YW4gZXhpc3RpbmcKPiA+ID4gPiA+IGluc3RhbmNlCj4gPiA+ID4gPiBvZiB0aGlzCj4gPiA+ID4g PiArICogcGFydGljdWxhciBjb21iaW5hdGlvbi4gSWYgbm90IGV4aXN0ZW50IGEgbmV3IGluc3Rh bmNlIGlzCj4gPiA+ID4gPiBjcmVhdGVkCj4gPiA+ID4gPiBhbmQgbGlua2VkCj4gPiA+ID4gPiAr ICogdG8gdGhlICZkcm1fZ2VtX29iamVjdC4KPiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4g wqDCoCAKPiA+ID4gPiA+IMKgwqDCoC8qKgo+ID4gPiA+ID4gQEAgLTM5NSwyMSArNDA3LDI4IEBA Cj4gPiA+ID4gPiDCoMKgwqAvKioKPiA+ID4gPiA+IMKgwqDCoCAqIERPQzogTG9ja2luZwo+ID4g PiA+ID4gwqDCoMKgICoKPiA+ID4gPiA+IC0gKiBHZW5lcmFsbHksIHRoZSBHUFUgVkEgbWFuYWdl ciBkb2VzIG5vdCB0YWtlIGNhcmUgb2YKPiA+ID4gPiA+IGxvY2tpbmcKPiA+ID4gPiA+IGl0c2Vs ZiwgaXQgaXMKPiA+ID4gPiA+IC0gKiB0aGUgZHJpdmVycyByZXNwb25zaWJpbGl0eSB0byB0YWtl IGNhcmUgYWJvdXQgbG9ja2luZy4KPiA+ID4gPiA+IERyaXZlcnMKPiA+ID4gPiA+IG1pZ2h0IHdh bnQgdG8KPiA+ID4gPiA+IC0gKiBwcm90ZWN0IHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczogaW5z ZXJ0aW5nLCByZW1vdmluZyBhbmQKPiA+ID4gPiA+IGl0ZXJhdGluZwo+ID4gPiA+ID4gLSAqICZk cm1fZ3B1dmEgb2JqZWN0cyBhcyB3ZWxsIGFzIGdlbmVyYXRpbmcgYWxsIGtpbmRzIG9mCj4gPiA+ ID4gPiBvcGVyYXRpb25zLAo+ID4gPiA+ID4gc3VjaCBhcwo+ID4gPiA+ID4gLSAqIHNwbGl0IC8g bWVyZ2Ugb3IgcHJlZmV0Y2guCj4gPiA+ID4gPiAtICoKPiA+ID4gPiA+IC0gKiBUaGUgR1BVIFZB IG1hbmFnZXIgYWxzbyBkb2VzIG5vdCB0YWtlIGNhcmUgb2YgdGhlIGxvY2tpbmcKPiA+ID4gPiA+ IG9mCj4gPiA+ID4gPiB0aGUKPiA+ID4gPiA+IGJhY2tpbmcKPiA+ID4gPiA+IC0gKiAmZHJtX2dl bV9vYmplY3QgYnVmZmVycyBHUFUgVkEgbGlzdHMgYnkgaXRzZWxmOyBkcml2ZXJzCj4gPiA+ID4g PiBhcmUKPiA+ID4gPiA+IHJlc3BvbnNpYmxlIHRvCj4gPiA+ID4gPiAtICogZW5mb3JjZSBtdXR1 YWwgZXhjbHVzaW9uIHVzaW5nIGVpdGhlciB0aGUgR0VNcyBkbWFfcmVzdgo+ID4gPiA+ID4gbG9j awo+ID4gPiA+ID4gb3IKPiA+ID4gPiA+IGFsdGVybmF0aXZlbHkKPiA+ID4gPiA+IC0gKiBhIGRy aXZlciBzcGVjaWZpYyBleHRlcm5hbCBsb2NrLiBGb3IgdGhlIGxhdHRlciBzZWUgYWxzbwo+ID4g PiA+ID4gLSAqIGRybV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4KPiA+ID4gPiA+IC0gKgo+ID4gPiA+ ID4gLSAqIEhvd2V2ZXIsIHRoZSBHUFUgVkEgbWFuYWdlciBjb250YWlucyBsb2NrZGVwIGNoZWNr cyB0bwo+ID4gPiA+ID4gZW5zdXJlCj4gPiA+ID4gPiBjYWxsZXJzIG9mIGl0cwo+ID4gPiA+ID4g LSAqIEFQSSBob2xkIHRoZSBjb3JyZXNwb25kaW5nIGxvY2sgd2hlbmV2ZXIgdGhlCj4gPiA+ID4g PiAmZHJtX2dlbV9vYmplY3RzCj4gPiA+ID4gPiBHUFUKPiA+ID4gPiA+IFZBIGxpc3QgaXMKPiA+ ID4gPiA+IC0gKiBhY2Nlc3NlZCBieSBmdW5jdGlvbnMgc3VjaCBhcyBkcm1fZ3B1dmFfbGluaygp IG9yCj4gPiA+ID4gPiBkcm1fZ3B1dmFfdW5saW5rKCkuCj4gPiA+ID4gPiArICogSW4gdGVybXMg b2YgbWFuYWdpbmcgJmRybV9ncHV2YSBlbnRyaWVzIERSTSBHUFVWTSBkb2VzCj4gPiA+ID4gPiBu b3QKPiA+ID4gPiA+IHRha2UKPiA+ID4gPiA+IGNhcmUgb2YKPiA+ID4gPiA+ICsgKiBsb2NraW5n IGl0c2VsZiwgaXQgaXMgdGhlIGRyaXZlcnMgcmVzcG9uc2liaWxpdHkgdG8gdGFrZQo+ID4gPiA+ ID4gY2FyZQo+ID4gPiA+ID4gYWJvdXQgbG9ja2luZy4KPiA+ID4gPiA+ICsgKiBEcml2ZXJzIG1p Z2h0IHdhbnQgdG8gcHJvdGVjdCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6Cj4gPiA+ID4gPiBp bnNlcnRpbmcsIHJlbW92aW5nCj4gPiA+ID4gPiArICogYW5kIGl0ZXJhdGluZyAmZHJtX2dwdXZh IG9iamVjdHMgYXMgd2VsbCBhcyBnZW5lcmF0aW5nCj4gPiA+ID4gPiBhbGwKPiA+ID4gPiA+IGtp bmRzCj4gPiA+ID4gPiBvZgo+ID4gPiA+ID4gKyAqIG9wZXJhdGlvbnMsIHN1Y2ggYXMgc3BsaXQg LyBtZXJnZSBvciBwcmVmZXRjaC4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIERSTSBHUFVW TSBhbHNvIGRvZXMgbm90IHRha2UgY2FyZSBvZiB0aGUgbG9ja2luZyBvZiB0aGUKPiA+ID4gPiA+ IGJhY2tpbmcKPiA+ID4gPiA+ICsgKiAmZHJtX2dlbV9vYmplY3QgYnVmZmVycyBHUFUgVkEgbGlz dHMgYW5kICZkcm1fZ3B1dm1fYm8KPiA+ID4gPiA+IGFic3RyYWN0aW9ucyBieQo+ID4gPiA+ID4g KyAqIGl0c2VsZjsgZHJpdmVycyBhcmUgcmVzcG9uc2libGUgdG8gZW5mb3JjZSBtdXR1YWwKPiA+ ID4gPiA+IGV4Y2x1c2lvbgo+ID4gPiA+ID4gdXNpbmcKPiA+ID4gPiA+IGVpdGhlciB0aGUKPiA+ ID4gPiA+ICsgKiBHRU1zIGRtYV9yZXN2IGxvY2sgb3IgYWx0ZXJuYXRpdmVseSBhIGRyaXZlciBz cGVjaWZpYwo+ID4gPiA+ID4gZXh0ZXJuYWwKPiA+ID4gPiA+IGxvY2suIEZvciB0aGUKPiA+ID4g PiA+ICsgKiBsYXR0ZXIgc2VlIGFsc28gZHJtX2dlbV9ncHV2YV9zZXRfbG9jaygpLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogSG93ZXZlciwgRFJNIEdQVVZNIGNvbnRhaW5zIGxvY2tkZXAg Y2hlY2tzIHRvIGVuc3VyZQo+ID4gPiA+ID4gY2FsbGVycwo+ID4gPiA+ID4gb2YKPiA+ID4gPiA+ IGl0cyBBUEkgaG9sZAo+ID4gPiA+ID4gKyAqIHRoZSBjb3JyZXNwb25kaW5nIGxvY2sgd2hlbmV2 ZXIgdGhlICZkcm1fZ2VtX29iamVjdHMgR1BVCj4gPiA+ID4gPiBWQQo+ID4gPiA+ID4gbGlzdAo+ ID4gPiA+ID4gaXMgYWNjZXNzZWQKPiA+ID4gPiA+ICsgKiBieSBmdW5jdGlvbnMgc3VjaCBhcyBk cm1fZ3B1dmFfbGluaygpIG9yCj4gPiA+ID4gPiBkcm1fZ3B1dmFfdW5saW5rKCksCj4gPiA+ID4g PiBidXQKPiA+ID4gPiA+IGFsc28KPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1fYm9fb2J0YWluKCkg YW5kIGRybV9ncHV2bV9ib19wdXQoKS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFRoZSBs YXR0ZXIgaXMgcmVxdWlyZWQgc2luY2Ugb24gY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uCj4gPiA+ ID4gPiBvZiBhCj4gPiA+ID4gPiAmZHJtX2dwdXZtX2JvCj4gPiA+ID4gPiArICogdGhlICZkcm1f Z3B1dm1fYm8gaXMgYXR0YWNoZWQgLyByZW1vdmVkIGZyb20gdGhlCj4gPiA+ID4gPiAmZHJtX2dl bV9vYmplY3RzCj4gPiA+ID4gPiBncHV2YSBsaXN0Lgo+ID4gPiA+ID4gKyAqIFN1YnNlcXVlbnQg Y2FsbHMgdG8gZHJtX2dwdXZtX2JvX29idGFpbigpIGZvciB0aGUgc2FtZQo+ID4gPiA+ID4gJmRy bV9ncHV2bQo+ID4gPiA+ID4gYW5kCj4gPiA+ID4gPiArICogJmRybV9nZW1fb2JqZWN0IG11c3Qg YmUgYWJsZSB0byBvYnNlcnZlIHByZXZpb3VzCj4gPiA+ID4gPiBjcmVhdGlvbnMKPiA+ID4gPiA+ IGFuZAo+ID4gPiA+ID4gZGVzdHJ1Y3Rpb25zCj4gPiA+ID4gPiArICogb2YgJmRybV9ncHV2bV9i b3MgaW4gb3JkZXIgdG8ga2VlcCBpbnN0YW5jZXMgdW5pcXVlLgo+ID4gPiA+ID4gwqDCoMKgICov Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gwqDCoMKgLyoqCj4gPiA+ID4gPiBAQCAtNDM5LDYg KzQ1OCw3IEBACj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqB7Cj4gPiA+ID4gPiDCoMKgwqAg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wczsKPiA+ ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZh X29wICpvcAo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ID4gPiDCoMKgwqAgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX2xvY2tfdmFfc3BhY2UoKTsKPiA+ID4gPiA+ IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcHMgPSBkcm1fZ3B1dm1fc21fbWFw X29wc19jcmVhdGUoZ3B1dm0sCj4gPiA+ID4gPiBhZGRyLAo+ID4gPiA+ID4gcmFuZ2UsCj4gPiA+ ID4gPiBAQCAtNDQ2LDYgKzQ2NiwxMCBAQAo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChJU19FUlIob3BzKSkKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIob3BzKTsKPiA+ ID4gPiA+IMKgwqDCoCAqCj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZt X2JvID0gZHJtX2dwdXZtX2JvX29idGFpbihncHV2bSwgb2JqKTsKPiA+ID4gPiA+ICsgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VSUih2bV9ibykpCj4gPiA+ID4gPiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUih2bV9i byk7Cj4gPiA+ID4gPiArICoKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZ3B1dmFfZm9yX2VhY2hfb3Aob3AsIG9wcykgewo+ID4gPiA+ID4gwqDCoMKgICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZh ICp2YTsKPiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ID4gPiBAQCAtNDU4LDcgKzQ4Miw3IEBACj4g PiA+ID4gPiDCoMKgwqAgKgo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyX3ZtX21hcCgpOwo+ID4g PiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX21hcChncHV2bSwgdmEsCj4gPiA+ID4gPiAmb3AtCj4g PiA+ID4gPiA+IG1hcCk7Cj4gPiA+ID4gPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsodmEpOwo+ID4gPiA+ ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9ncHV2YV9saW5rKHZhLCB2bV9ibyk7Cj4gPiA+ID4gPiDCoMKgwqAgKgo+ID4g PiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZBX09QX1JFTUFQOiB7Cj4gPiA+ ID4gPiBAQCAtNDg1LDExICs1MDksMTEgQEAKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZlcl92bV9y ZW1hcCgpOwo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3JlbWFwKHByZXYsIG5leHQsCj4g PiA+ID4gPiAmb3AtCj4gPiA+ID4gPiA+IHJlbWFwKTsKPiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ ID4gPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayh2YSk7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocHJl dikKPiA+ID4gPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsocHJldik7Cj4g PiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKHByZXYsCj4gPiA+ID4g PiB2YS0KPiA+ID4gPiA+ID4gdm1fYm8pOwo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG5leHQpCj4g PiA+ID4gPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKG5leHQpOwo+ID4gPiA+ ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhuZXh0LAo+ID4gPiA+ID4gdmEt Cj4gPiA+ID4gPiA+IHZtX2JvKTsKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKHZhKTsK PiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ID4gPiA+IMKg wqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ ID4gQEAgLTUwNSw2ICs1MjksNyBAQAo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+ID4g PiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiArICrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9ib19wdXQodm1fYm8pOwo+ID4gPiA+ ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZlcl91bmxvY2tfdmFfc3Bh Y2UoKTsKPiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gPiBAQCAtNTE0LDYgKzUzOSw3IEBACj4gPiA+ ID4gPiDCoMKgwqAgKgo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgc3RydWN0IGRyaXZlcl9j b250ZXh0IHsKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX2dwdXZtICpncHV2bTsKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqbmV3X3ZhOwo+ID4gPiA+ID4gwqDC oMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnByZXZfdmE7 Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9n cHV2YSAqbmV4dF92YTsKPiA+ID4gPiA+IEBAIC01MzQsNiArNTYwLDcgQEAKPiA+ID4gPiA+IMKg wqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdAo+ID4gPiA+ID4gKm9iaiwKPiA+ID4gPiA+ IHU2NAo+ID4gPiA+ID4gb2Zmc2V0KQo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgewo+ID4g PiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcml2ZXJfY29u dGV4dCBjdHg7Cj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cm1fZ3B1dm1fYm8gKnZtX2JvOwo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BzICpvcHM7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcCAqb3A7Cj4gPiA+ID4gPiDC oMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IHJldCA9IDA7Cj4gPiA+ID4gPiBA QCAtNTQzLDE2ICs1NzAsMjMgQEAKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjdHgubmV3X3ZhID0ga3phbGxvYyhzaXplb2YoKmN0eC5uZXdfdmEpLAo+ID4gPiA+ ID4gR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY3R4LnByZXZfdmEgPSBremFsbG9jKHNpemVvZigqY3R4LnByZXZfdmEpLAo+ID4gPiA+ID4g R0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Y3R4Lm5leHRfdmEgPSBremFsbG9jKHNpemVvZigqY3R4Lm5leHRfdmEpLAo+ID4gPiA+ID4gR0ZQ X0tFUk5FTCk7Cj4gPiA+ID4gPiAtICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghY3R4 Lm5ld192YSB8fCAhY3R4LnByZXZfdmEgfHwKPiA+ID4gPiA+ICFjdHgubmV4dF92YSkKPiA+ID4g PiA+IHsKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3R4LnZtX2JvID0g ZHJtX2dwdXZtX2JvX2NyZWF0ZShncHV2bSwgb2JqKTsKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKCFjdHgubmV3X3ZhIHx8ICFjdHgucHJldl92YSB8fAo+ID4gPiA+ ID4gIWN0eC5uZXh0X3ZhCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiAhdm1fYm8pIHsKPiA+ID4g PiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gLUVOT01FTTsKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gwqDCoMKgICoKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLy8gVHlwaWNhbGx5IHByb3RlY3RlZCB3aXRoIGEgZHJpdmVyIHNwZWNp ZmljCj4gPiA+ID4gPiBHRU0KPiA+ID4gPiA+IGdwdXZhIGxvY2sKPiA+ID4gPiA+ICsgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLy8gdXNlZCBpbiB0aGUgZmVuY2Ugc2lnbmFsaW5nIHBhdGgg Zm9yCj4gPiA+ID4gPiBkcm1fZ3B1dmFfbGluaygpIGFuZAo+ID4gPiA+ID4gKyAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAvLyBkcm1fZ3B1dmFfdW5saW5rKCksIGhlbmNlIHByZS1hbGxvY2F0 ZS4KPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3R4LnZtX2JvID0KPiA+ ID4gPiA+IGRybV9ncHV2bV9ib19vYnRhaW5fcHJlYWxsb2MoY3R4LnZtX2JvKTsKPiA+ID4gPiA+ ICsgKgo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRyaXZlcl9s b2NrX3ZhX3NwYWNlKCk7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gZHJtX2dwdXZtX3NtX21hcChncHV2bSwgJmN0eCwgYWRkciwKPiA+ID4gPiA+IHJh bmdlLAo+ID4gPiA+ID4gb2JqLAo+ID4gPiA+ID4gb2Zmc2V0KTsKPiA+ID4gPiA+IMKgwqDCoCAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcml2ZXJfdW5sb2NrX3ZhX3NwYWNlKCk7Cj4gPiA+ ID4gPiDCoMKgwqAgKgo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgb3V0Ogo+ID4gPiA+ID4g KyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KGN0eC52bV9ibyk7 Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2ZyZWUoY3R4Lm5l d192YSk7Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2ZyZWUo Y3R4LnByZXZfdmEpOwo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGtmcmVlKGN0eC5uZXh0X3ZhKTsKPiA+ID4gPiA+IEBAIC01NjUsNyArNTk5LDcgQEAKPiA+ID4g PiA+IMKgwqDCoCAqCj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZHJtX2dwdXZhX21hcChjdHgtPnZtLCBjdHgtPm5ld192YSwgJm9wLQo+ID4gPiA+ID4gPm1hcCk7 Cj4gPiA+ID4gPiDCoMKgwqAgKgo+ID4gPiA+ID4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkcm1fZ3B1dmFfbGluayhjdHgtPm5ld192YSk7Cj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0eC0+bmV3X3ZhLCBjdHgtPnZtX2JvKTsKPiA+ ID4gPiA+IMKgwqDCoCAqCj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLy8gcHJldmVudCB0aGUgbmV3IEdQVVZBIGZyb20gYmVpbmcgZnJlZWQKPiA+ID4gPiA+IGlu Cj4gPiA+ID4gPiDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLy8gZHJpdmVyX21h cHBpbmdfY3JlYXRlKCkKPiA+ID4gPiA+IEBAIC01NzcsMjIgKzYxMSwyMyBAQAo+ID4gPiA+ID4g wqDCoMKgICrCoMKgwqDCoMKgaW50IGRyaXZlcl9ncHV2YV9yZW1hcChzdHJ1Y3QgZHJtX2dwdXZh X29wICpvcCwKPiA+ID4gPiA+IHZvaWQKPiA+ID4gPiA+ICpfX2N0eCkKPiA+ID4gPiA+IMKgwqDC oCAqwqDCoMKgwqDCoHsKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmN0eCA9IF9fY3R4Owo+ID4gPiA+ID4gKyAqwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhICp2YSA9IG9wLT5yZW1hcC51bm1h cC0+dmE7Cj4gPiA+ID4gPiDCoMKgwqAgKgo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRybV9ncHV2YV9yZW1hcChjdHgtPnByZXZfdmEsIGN0eC0+bmV4dF92YSwK PiA+ID4gPiA+ICZvcC0KPiA+ID4gPiA+ID4gcmVtYXApOwo+ID4gPiA+ID4gwqDCoMKgICoKPiA+ ID4gPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX3VubGluayhvcC0+ cmVtYXAudW5tYXAtPnZhKTsKPiA+ID4gPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg a2ZyZWUob3AtPnJlbWFwLnVubWFwLT52YSk7Cj4gPiA+ID4gPiAtICoKPiA+ID4gPiA+IMKgwqDC oCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAob3AtPnJlbWFwLnByZXYpIHsKPiA+ID4g PiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 YV9saW5rKGN0eC0+cHJldl92YSk7Cj4gPiA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluayhjdHgtPnByZXZfdmEsIHZhLQo+ID4g PiA+ID4gPnZtX2JvKTsKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY3R4LT5wcmV2X3ZhID0gTlVMTDsKPiA+ID4gPiA+IMKgwqDCoCAq wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiDCoMKgwqAgKgo+ID4gPiA+ID4g wqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVtYXAubmV4dCkgewo+ ID4gPiA+ID4gLSAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJt X2dwdXZhX2xpbmsoY3R4LT5uZXh0X3ZhKTsKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9saW5rKGN0eC0+bmV4dF92YSwgdmEt Cj4gPiA+ID4gPiA+dm1fYm8pOwo+ID4gPiA+ID4gwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgtPm5leHRfdmEgPSBOVUxMOwo+ID4gPiA+ID4gwqDC oMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV91bmxpbmsodmEpOwo+ ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZSh2YSk7Cj4gPiA+ID4g PiArICoKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g MDsKPiA+ID4gPiA+IMKgwqDCoCAqwqDCoMKgwqDCoH0KPiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ ID4gPiBAQCAtNzc0LDYgKzgwOSwxOTQgQEAgZHJtX2dwdXZtX2Rlc3Ryb3koc3RydWN0IGRybV9n cHV2bQo+ID4gPiA+ID4gKmdwdXZtKQo+ID4gPiA+ID4gwqDCoMKgfQo+ID4gPiA+ID4gwqDCoMKg RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2Rlc3Ryb3kpOwo+ID4gPiA+ID4gwqDCoCAKPiA+ ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1fYm9fY3JlYXRlKCkgLSBjcmVhdGUg YSBuZXcgaW5zdGFuY2Ugb2Ygc3RydWN0Cj4gPiA+ID4gPiBkcm1fZ3B1dm1fYm8KPiA+ID4gPiA+ ICsgKiBAZ3B1dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2JqIGlzIG1hcHBlZCBpbi4KPiA+ID4g PiA+ICsgKiBAb2JqOiBUaGUgJmRybV9nZW1fb2JqZWN0IGJlaW5nIG1hcHBlZCBpbiB0aGUgQGdw dXZtLgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogSWYgcHJvdmlkZWQgYnkgdGhlIGRyaXZl ciwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZQo+ID4gPiA+ID4gJmRybV9ncHV2bV9vcHMKPiA+ID4g PiA+ICsgKiB2bV9ib19hbGxvYygpIGNhbGxiYWNrIHRvIGFsbG9jYXRlLgo+ID4gPiA+ID4gKyAq Cj4gPiA+ID4gPiArICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSAmZHJtX2dwdXZtX2JvIG9u IHN1Y2Nlc3MsIE5VTEwKPiA+ID4gPiA+IG9uCj4gPiA+ID4gCj4gPiA+ID4gU3RpbGwgbmVlZHMg cy9SZXR1cm5zOi9SZXR1cm46L2cKPiA+ID4gPiAKPiA+ID4gPiA+IGZhaWx1cmUKPiA+ID4gPiA+ ICsgKi8KPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiA+ID4gPiA+ICtkcm1fZ3B1 dm1fYm9fY3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikK PiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2dw dXZtX29wcyAqb3BzID0gZ3B1dm0tPm9wczsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKG9wcyAmJiBvcHMtPnZtX2JvX2FsbG9jKQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZtX2JvID0gb3BzLT52bV9ib19hbGxvYygpOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgZWxzZQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHZtX2JvID0ga3phbGxvYyhzaXplb2YoKnZtX2JvKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkoIXZtX2JvKSkKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHZtX2JvLT52bSA9IGdwdXZtOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgdm1fYm8tPm9iaiA9IG9iajsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRy bV9nZW1fb2JqZWN0X2dldChvYmopOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKga3JlZl9pbml0KCZ2bV9iby0+a3JlZik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBJTklU X0xJU1RfSEVBRCgmdm1fYm8tPmxpc3QuZ3B1dmEpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg SU5JVF9MSVNUX0hFQUQoJnZtX2JvLT5saXN0LmVudHJ5LmdlbSk7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1fYm87Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4g K0VYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2bV9ib19jcmVhdGUpOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gK3N0YXRpYyB2b2lkCj4gPiA+ID4gPiArZHJtX2dwdXZtX2JvX2Rlc3Ryb3koc3RydWN0 IGtyZWYgKmtyZWYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGRybV9ncHV2bV9ibyAqdm1fYm8gPSBjb250YWluZXJfb2Yoa3JlZiwKPiA+ID4gPiA+IHN0cnVj dAo+ID4gPiA+ID4gZHJtX2dwdXZtX2JvLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBrcmVmKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dm0gKmdwdXZtID0gdm1fYm8tPnZtOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg Y29uc3Qgc3RydWN0IGRybV9ncHV2bV9vcHMgKm9wcyA9IGdwdXZtLT5vcHM7Cj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZtX2JvLT5vYmo7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBib29sIGxvY2sgPSAhZHJtX2dwdXZtX3Jlc3ZfcHJvdGVj dGVkKGdwdXZtKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghbG9j aykKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fcmVz dl9hc3NlcnRfaGVsZChncHV2bSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoGxpc3RfZGVsKCZ2bV9iby0+bGlzdC5lbnRyeS5nZW0pOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG9wcyAmJiBvcHMtPnZtX2JvX2ZyZWUpCj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3BzLT52bV9ib19mcmVlKHZtX2JvKTsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBrZnJlZSh2bV9ibyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBkcm1fZ2VtX29iamVjdF9wdXQob2JqKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogZHJtX2dwdXZtX2JvX3B1dCgpIC0gZHJvcCBh IHN0cnVjdCBkcm1fZ3B1dm1fYm8gcmVmZXJlbmNlCj4gPiA+ID4gPiArICogQHZtX2JvOiB0aGUg JmRybV9ncHV2bV9ibyB0byByZWxlYXNlIHRoZSByZWZlcmVuY2Ugb2YKPiA+ID4gPiA+ICsgKgo+ ID4gPiA+ID4gKyAqIFRoaXMgcmVsZWFzZXMgYSByZWZlcmVuY2UgdG8gQHZtX2JvLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJv LCB0aGUgJmdwdXZtX2JvIGlzCj4gPiA+ID4gPiBkZXN0cm95ZWQsCj4gPiA+ID4gPiB3aGljaAo+ ID4gPiA+ID4gKyAqIGluY2x1ZGVzIHJlbW92aW5nIGl0IGZyb20gdGhlIEdFTXMgZ3B1dmEgbGlz dC4gSGVuY2UsIGlmCj4gPiA+ID4gPiBhCj4gPiA+ID4gPiBjYWxsCj4gPiA+ID4gPiB0byB0aGlz Cj4gPiA+ID4gPiArICogZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGxldCB0aGUgcmVmZXJlbmNl IGNvdW50IHRvIHplcm8KPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gY2FsbGVyIG11c3QKPiA+ID4g PiA+ICsgKiBob2xkIHRoZSBkbWEtcmVzdiBvciBkcml2ZXIgc3BlY2lmaWMgR0VNIGdwdXZhIGxv Y2suCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArdm9pZAo+ID4gPiA+ID4gK2RybV9ncHV2bV9i b19wdXQoc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8pCj4gPiA+ID4gPiArewo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHZtX2JvKQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGtyZWZfcHV0KCZ2bV9iby0+a3JlZiwgZHJtX2dwdXZtX2JvX2Rlc3Ryb3kpOwo+ ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fcHV0 KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgc3RydWN0IGRybV9ncHV2bV9ibyAqCj4g PiA+ID4gPiArX19kcm1fZ3B1dm1fYm9fZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQob2JqKTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm8odm1fYm8sIG9iaikKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodm1fYm8tPnZtID09IGdwdXZtKQo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gdm1fYm87Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g TlVMTDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiAr ICogZHJtX2dwdXZtX2JvX2ZpbmQoKSAtIGZpbmQgdGhlICZkcm1fZ3B1dm1fYm8gZm9yIHRoZQo+ ID4gPiA+ID4gZ2l2ZW4KPiA+ID4gPiA+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmpl Y3QKPiA+ID4gPiA+ICsgKiBAZ3B1dm06IFRoZSAmZHJtX2dwdXZtIHRoZSBAb2JqIGlzIG1hcHBl ZCBpbi4KPiA+ID4gPiA+ICsgKiBAb2JqOiBUaGUgJmRybV9nZW1fb2JqZWN0IGJlaW5nIG1hcHBl ZCBpbiB0aGUgQGdwdXZtLgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogRmluZCB0aGUgJmRy bV9ncHV2bV9ibyByZXByZXNlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mCj4gPiA+ID4gPiB0aGUK PiA+ID4gPiA+IGdpdmVuCj4gPiA+ID4gPiArICogJmRybV9ncHV2bSBhbmQgJmRybV9nZW1fb2Jq ZWN0LiBJZiBmb3VuZCwgaW5jcmVhc2VzIHRoZQo+ID4gPiA+ID4gcmVmZXJlbmNlCj4gPiA+ID4g PiArICogY291bnQgb2YgdGhlICZkcm1fZ3B1dm1fYm8gYWNjb3JkaW5nbHkuCj4gPiA+ID4gPiAr ICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlICZkcm1fZ3B1dm1fYm8g b24gc3VjY2VzcywgTlVMTAo+ID4gPiA+ID4gb24KPiA+ID4gPiA+IGZhaWx1cmUKPiA+ID4gPiA+ ICsgKi8KPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiA+ID4gPiA+ICtkcm1fZ3B1 dm1fYm9fZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiA+ID4g PiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9i byA9Cj4gPiA+ID4gPiBfX2RybV9ncHV2bV9ib19maW5kKGdwdXZtLAo+ID4gPiA+ID4gb2JqKTsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB2bV9ibyA/IGRybV9n cHV2bV9ib19nZXQodm1fYm8pIDogTlVMTDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JU X1NZTUJPTF9HUEwoZHJtX2dwdXZtX2JvX2ZpbmQpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8q Kgo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9ib19vYnRhaW4oKSAtIG9idGFpbnMgYW5kIGluc3Rh bmNlIG9mIHRoZQo+ID4gPiA+ID4gJmRybV9ncHV2bV9ibwo+ID4gPiA+ID4gZm9yIHRoZQo+ID4g PiA+ID4gKyAqIGdpdmVuICZkcm1fZ3B1dm0gYW5kICZkcm1fZ2VtX29iamVjdAo+ID4gPiA+ID4g KyAqIEBncHV2bTogVGhlICZkcm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVkIGluLgo+ID4gPiA+ ID4gKyAqIEBvYmo6IFRoZSAmZHJtX2dlbV9vYmplY3QgYmVpbmcgbWFwcGVkIGluIHRoZSBAZ3B1 dm0uCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBGaW5kIHRoZSAmZHJtX2dwdXZtX2JvIHJl cHJlc2VudGluZyB0aGUgY29tYmluYXRpb24gb2YKPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gZ2l2 ZW4KPiA+ID4gPiA+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dlbV9vYmplY3QuIElmIGZvdW5k LCBpbmNyZWFzZXMgdGhlCj4gPiA+ID4gPiByZWZlcmVuY2UKPiA+ID4gPiA+ICsgKiBjb3VudCBv ZiB0aGUgJmRybV9ncHV2bV9ibyBhY2NvcmRpbmdseS4gSWYgbm90IGZvdW5kLAo+ID4gPiA+ID4g YWxsb2NhdGVzIGEKPiA+ID4gPiA+IG5ldwo+ID4gPiA+ID4gKyAqICZkcm1fZ3B1dm1fYm8uCj4g PiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBBIG5ldyAmZHJtX2dwdXZtX2JvIGlzIGFkZGVkIHRv IHRoZSBHRU1zIGdwdXZhIGxpc3QuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5z OiBhIHBvaW50ZXIgdG8gdGhlICZkcm1fZ3B1dm1fYm8gb24gc3VjY2VzcywgYW4KPiA+ID4gPiA+ IEVSUl9QVFIgb24KPiA+ID4gPiA+IGZhaWx1cmUKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtz dHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fYm9fb2J0YWluKHN0cnVj dCBkcm1fZ3B1dm0gKmdwdXZtLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKPiA+ID4gPiA+ICt7Cj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHZtX2JvID0gZHJtX2dwdXZtX2JvX2ZpbmQoZ3B1 dm0sIG9iaik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAodm1fYm8pCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdm1fYm8gPSBkcm1fZ3B1dm1fYm9fY3JlYXRlKGdwdXZt LCBvYmopOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCF2bV9ibykKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZ3B1dmFfYXNzZXJ0X2xv Y2tfaGVsZChvYmopOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9hZGRfdGFpbCgmdm1f Ym8tPmxpc3QuZW50cnkuZ2VtLCAmb2JqLQo+ID4gPiA+ID4gPmdwdXZhLmxpc3QpOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHZtX2JvOwo+ID4gPiA+ID4gK30K PiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fb2J0YWluKTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1fYm9fb2J0YWluX3By ZWFsbG9jKCkgLSBvYnRhaW5zIGFuZCBpbnN0YW5jZSBvZgo+ID4gPiA+ID4gdGhlCj4gPiA+ID4g PiAmZHJtX2dwdXZtX2JvCj4gPiA+ID4gPiArICogZm9yIHRoZSBnaXZlbiAmZHJtX2dwdXZtIGFu ZCAmZHJtX2dlbV9vYmplY3QKPiA+ID4gPiA+ICsgKiBAX192bV9ibzogQSBwcmUtYWxsb2NhdGVk IHN0cnVjdCBkcm1fZ3B1dm1fYm8uCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBGaW5kIHRo ZSAmZHJtX2dwdXZtX2JvIHJlcHJlc2VudGluZyB0aGUgY29tYmluYXRpb24gb2YKPiA+ID4gPiA+ IHRoZQo+ID4gPiA+ID4gZ2l2ZW4KPiA+ID4gPiA+ICsgKiAmZHJtX2dwdXZtIGFuZCAmZHJtX2dl bV9vYmplY3QuIElmIGZvdW5kLCBpbmNyZWFzZXMgdGhlCj4gPiA+ID4gPiByZWZlcmVuY2UKPiA+ ID4gPiA+ICsgKiBjb3VudCBvZiB0aGUgZm91bmQgJmRybV9ncHV2bV9ibyBhY2NvcmRpbmdseSwg d2hpbGUgdGhlCj4gPiA+ID4gPiBAX192bV9ibwo+ID4gPiA+ID4gcmVmZXJlbmNlCj4gPiA+ID4g PiArICogY291bnQgaXMgZGVjcmVhc2VkLiBJZiBub3QgZm91bmQgQF9fdm1fYm8gaXMgcmV0dXJu ZWQKPiA+ID4gPiA+IHdpdGhvdXQKPiA+ID4gPiA+IGZ1cnRoZXIKPiA+ID4gPiA+ICsgKiBpbmNy ZWFzZSBvZiB0aGUgcmVmZXJlbmNlIGNvdW50Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICog QSBuZXcgJmRybV9ncHV2bV9ibyBpcyBhZGRlZCB0byB0aGUgR0VNcyBncHV2YSBsaXN0Lgo+ID4g PiA+ID4gKyAqCj4gPiA+ID4gPiArICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBmb3VuZCAm ZHJtX2dwdXZtX2JvIG9yIEBfX3ZtX2JvCj4gPiA+ID4gPiBpZgo+ID4gPiA+ID4gbm8KPiA+ID4g PiA+IGV4aXN0aW5nCj4gPiA+ID4gPiArICogJmRybV9ncHV2bV9ibyB3YXMgZm91bmQKPiA+ID4g PiA+ICsgKi8KPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2dwdXZtX2JvICoKPiA+ID4gPiA+ICtkcm1f Z3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKHN0cnVjdCBkcm1fZ3B1dm1fYm8gKl9fdm1fYm8pCj4g PiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bSAqZ3B1 dm0gPSBfX3ZtX2JvLT52bTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqID0gX192bV9iby0+b2JqOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqB2bV9ibyA9IGRybV9ncHV2bV9ib19maW5kKGdwdXZtLCBvYmopOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKHZtX2JvKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHJtX2dwdXZtX2JvX3B1dChfX3ZtX2JvKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1fYm87Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqB9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fz c2VydF9sb2NrX2hlbGQob2JqKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3Rh aWwoJl9fdm1fYm8tPmxpc3QuZW50cnkuZ2VtLCAmb2JqLQo+ID4gPiA+ID4gPiBncHV2YS5saXN0 KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBfX3ZtX2JvOwo+ ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fb2J0 YWluX3ByZWFsbG9jKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+IMKgwqDCoHN0YXRpYyBpbnQKPiA+ ID4gPiA+IMKgwqDCoF9fZHJtX2dwdXZhX2luc2VydChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwK PiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRybV9ncHV2YSAqdmEpCj4gPiA+ID4gPiBAQCAtODY0LDI0ICsxMDg3LDMzIEBAIEVYUE9SVF9T WU1CT0xfR1BMKGRybV9ncHV2YV9yZW1vdmUpOwo+ID4gPiA+ID4gwqDCoMKgLyoqCj4gPiA+ID4g PiDCoMKgwqAgKiBkcm1fZ3B1dmFfbGluaygpIC0gbGluayBhICZkcm1fZ3B1dmEKPiA+ID4gPiA+ IMKgwqDCoCAqIEB2YTogdGhlICZkcm1fZ3B1dmEgdG8gbGluawo+ID4gPiA+ID4gKyAqIEB2bV9i bzogdGhlICZkcm1fZ3B1dm1fYm8gdG8gYWRkIHRoZSAmZHJtX2dwdXZhIHRvCj4gPiA+ID4gPiDC oMKgwqAgKgo+ID4gPiA+ID4gLSAqIFRoaXMgYWRkcyB0aGUgZ2l2ZW4gJnZhIHRvIHRoZSBHUFUg VkEgbGlzdCBvZiB0aGUKPiA+ID4gPiA+ICZkcm1fZ2VtX29iamVjdAo+ID4gPiA+ID4gaXQgaXMK PiA+ID4gPiA+IC0gKiBhc3NvY2lhdGVkIHdpdGguCj4gPiA+ID4gPiArICogVGhpcyBhZGRzIHRo ZSBnaXZlbiAmdmEgdG8gdGhlIEdQVSBWQSBsaXN0IG9mIHRoZQo+ID4gPiA+ID4gJmRybV9ncHV2 bV9ibwo+ID4gPiA+ID4gYW5kIHRoZQo+ID4gPiA+ID4gKyAqICZkcm1fZ3B1dm1fYm8gdG8gdGhl ICZkcm1fZ2VtX29iamVjdCBpdCBpcyBhc3NvY2lhdGVkCj4gPiA+ID4gPiB3aXRoLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogRm9yIGV2ZXJ5ICZkcm1fZ3B1dmEgZW50cnkgYWRkZWQgdG8g dGhlICZkcm1fZ3B1dm1fYm8gYW4KPiA+ID4gPiA+IGFkZGl0aW9uYWwKPiA+ID4gPiA+ICsgKiBy ZWZlcmVuY2Ugb2YgdGhlIGxhdHRlciBpcyB0YWtlbi4KPiA+ID4gPiA+IMKgwqDCoCAqCj4gPiA+ ID4gPiDCoMKgwqAgKiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIGNhbGxlciB0byBwcm90ZWN0 IHRoZSBHRU0ncwo+ID4gPiA+ID4gR1BVVkEKPiA+ID4gPiA+IGxpc3QKPiA+ID4gPiA+IGFnYWlu c3QKPiA+ID4gPiA+IC0gKiBjb25jdXJyZW50IGFjY2VzcyB1c2luZyB0aGUgR0VNcyBkbWFfcmVz diBsb2NrLgo+ID4gPiA+ID4gKyAqIGNvbmN1cnJlbnQgYWNjZXNzIHVzaW5nIGVpdGhlciB0aGUg R0VNcyBkbWFfcmVzdiBsb2NrIG9yCj4gPiA+ID4gPiBhCj4gPiA+ID4gPiBkcml2ZXIKPiA+ID4g PiA+IHNwZWNpZmljCj4gPiA+ID4gPiArICogbG9jayBzZXQgdGhyb3VnaCBkcm1fZ2VtX2dwdXZh X3NldF9sb2NrKCkuCj4gPiA+ID4gPiDCoMKgwqAgKi8KPiA+ID4gPiA+IMKgwqDCoHZvaWQKPiA+ ID4gPiA+IC1kcm1fZ3B1dmFfbGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSkKPiA+ID4gPiA+ICtk cm1fZ3B1dmFfbGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSwgc3RydWN0IGRybV9ncHV2bV9ibwo+ ID4gPiA+ID4gKnZtX2JvKQo+ID4gPiA+ID4gwqDCoMKgewo+ID4gPiA+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZhLT5nZW0ub2JqOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0gPSB2YS0+dm07Cj4gPiA+ ID4gPiDCoMKgIAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkoIW9i aikpCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47 Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9h c3NlcnRfbG9ja19oZWxkKG9iaik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9P TihncHV2bS0+ZHJtLCBvYmogIT0gdm1fYm8tPm9iaik7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ ID4gLcKgwqDCoMKgwqDCoMKgbGlzdF9hZGRfdGFpbCgmdmEtPmdlbS5lbnRyeSwgJm9iai0+Z3B1 dmEubGlzdCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB2YS0+dm1fYm8gPSBkcm1fZ3B1dm1f Ym9fZ2V0KHZtX2JvKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9n ZW1fZ3B1dmFfYXNzZXJ0X2xvY2tfaGVsZChvYmopOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg bGlzdF9hZGRfdGFpbCgmdmEtPmdlbS5lbnRyeSwgJnZtX2JvLT5saXN0LmdwdXZhKTsKPiA+ID4g PiA+IMKgwqDCoH0KPiA+ID4gPiA+IMKgwqDCoEVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2YV9s aW5rKTsKPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiBAQCAtODkyLDIwICsxMTI0LDMxIEBAIEVY UE9SVF9TWU1CT0xfR1BMKGRybV9ncHV2YV9saW5rKTsKPiA+ID4gPiA+IMKgwqDCoCAqIFRoaXMg cmVtb3ZlcyB0aGUgZ2l2ZW4gJnZhIGZyb20gdGhlIEdQVSBWQSBsaXN0IG9mIHRoZQo+ID4gPiA+ ID4gJmRybV9nZW1fb2JqZWN0IGl0IGlzCj4gPiA+ID4gPiDCoMKgwqAgKiBhc3NvY2lhdGVkIHdp dGguCj4gPiA+ID4gPiDCoMKgwqAgKgo+ID4gPiA+ID4gKyAqIFRoaXMgcmVtb3ZlcyB0aGUgZ2l2 ZW4gJnZhIGZyb20gdGhlIEdQVSBWQSBsaXN0IG9mIHRoZQo+ID4gPiA+ID4gJmRybV9ncHV2bV9i byBhbmQKPiA+ID4gPiA+ICsgKiB0aGUgJmRybV9ncHV2bV9ibyBmcm9tIHRoZSAmZHJtX2dlbV9v YmplY3QgaXQgaXMKPiA+ID4gPiA+IGFzc29jaWF0ZWQKPiA+ID4gPiA+IHdpdGgKPiA+ID4gPiA+ IGluIGNhc2UKPiA+ID4gPiA+ICsgKiB0aGlzIGNhbGwgdW5saW5rcyB0aGUgbGFzdCAmZHJtX2dw dXZhIGZyb20gdGhlCj4gPiA+ID4gPiAmZHJtX2dwdXZtX2JvLgo+ID4gPiA+ID4gKyAqCj4gPiA+ ID4gPiArICogRm9yIGV2ZXJ5ICZkcm1fZ3B1dmEgZW50cnkgcmVtb3ZlZCBmcm9tIHRoZSAmZHJt X2dwdXZtX2JvCj4gPiA+ID4gPiBhCj4gPiA+ID4gPiByZWZlcmVuY2Ugb2YKPiA+ID4gPiA+ICsg KiB0aGUgbGF0dGVyIGlzIGRyb3BwZWQuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+IMKgwqDCoCAq IFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgY2FsbGVyIHRvIHByb3RlY3QgdGhlIEdFTSdzCj4g PiA+ID4gPiBHUFVWQQo+ID4gPiA+ID4gbGlzdAo+ID4gPiA+ID4gYWdhaW5zdAo+ID4gPiA+ID4g LSAqIGNvbmN1cnJlbnQgYWNjZXNzIHVzaW5nIHRoZSBHRU1zIGRtYV9yZXN2IGxvY2suCj4gPiA+ ID4gPiArICogY29uY3VycmVudCBhY2Nlc3MgdXNpbmcgZWl0aGVyIHRoZSBHRU1zIGRtYV9yZXN2 IGxvY2sgb3IKPiA+ID4gPiA+IGEKPiA+ID4gPiA+IGRyaXZlcgo+ID4gPiA+ID4gc3BlY2lmaWMK PiA+ID4gPiA+ICsgKiBsb2NrIHNldCB0aHJvdWdoIGRybV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4K PiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4gwqDCoMKgdm9pZAo+ID4gPiA+ID4gwqDCoMKg ZHJtX2dwdXZhX3VubGluayhzdHJ1Y3QgZHJtX2dwdXZhICp2YSkKPiA+ID4gPiA+IMKgwqDCoHsK PiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmog PSB2YS0+Z2VtLm9iajsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1f Ym8gKnZtX2JvID0gdmEtPnZtX2JvOwo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KCFvYmopKQo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9iaik7Cj4g PiA+ID4gPiAtCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfZGVsX2luaXQoJnZh LT5nZW0uZW50cnkpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdmEtPnZt X2JvID0gTlVMTDsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9ib19wdXQodm1f Ym8pOwo+ID4gPiA+ID4gwqDCoMKgfQo+ID4gPiA+ID4gwqDCoMKgRVhQT1JUX1NZTUJPTF9HUEwo ZHJtX2dwdXZhX3VubGluayk7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gQEAgLTEwNTAsMTAg KzEyOTMsMTAgQEAgZHJtX2dwdXZhX3JlbWFwKHN0cnVjdCBkcm1fZ3B1dmEKPiA+ID4gPiA+ICpw cmV2LAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IGRybV9ncHV2YSAqbmV4dCwKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1fZ3B1dmFfb3BfcmVtYXAgKm9wKQo+ID4gPiA+ID4gwqDCoMKgewo+ ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqY3VyciA9IG9wLT51bm1h cC0+dmE7Cj4gPiA+ID4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSA9 IGN1cnItPnZtOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmEg PSBvcC0+dW5tYXAtPnZhOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2 bSAqZ3B1dm0gPSB2YS0+dm07Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gLcKgwqDCoMKgwqDC oMKgZHJtX2dwdXZhX3JlbW92ZShjdXJyKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9n cHV2YV9yZW1vdmUodmEpOwo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKG9wLT5wcmV2KSB7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dmFfaW5pdF9mcm9tX29wKHByZXYsIG9wLT5wcmV2KTsKPiA+ID4g PiA+IEBAIC0xNjk1LDkgKzE5MzgsOCBAQCBkcm1fZ3B1dm1fcHJlZmV0Y2hfb3BzX2NyZWF0ZShz dHJ1Y3QKPiA+ID4gPiA+IGRybV9ncHV2bQo+ID4gPiA+ID4gKmdwdXZtLAo+ID4gPiA+ID4gwqDC oMKgRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX3ByZWZldGNoX29wc19jcmVhdGUpOwo+ID4g PiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoC8qKgo+ID4gPiA+ID4gLSAqIGRybV9ncHV2bV9n ZW1fdW5tYXBfb3BzX2NyZWF0ZSgpIC0gY3JlYXRlcyB0aGUKPiA+ID4gPiA+ICZkcm1fZ3B1dmFf b3BzCj4gPiA+ID4gPiB0bwo+ID4gPiA+ID4gdW5tYXAgYSBHRU0KPiA+ID4gPiA+IC0gKiBAZ3B1 dm06IHRoZSAmZHJtX2dwdXZtIHJlcHJlc2VudGluZyB0aGUgR1BVIFZBIHNwYWNlCj4gPiA+ID4g PiAtICogQG9iajogdGhlICZkcm1fZ2VtX29iamVjdCB0byB1bm1hcAo+ID4gPiA+ID4gKyAqIGRy bV9ncHV2bV9ib191bm1hcF9vcHNfY3JlYXRlKCkgLSBjcmVhdGVzIHRoZQo+ID4gPiA+ID4gJmRy bV9ncHV2YV9vcHMKPiA+ID4gPiA+IHRvCj4gPiA+ID4gPiB1bm1hcCBhIEdFTQo+ID4gPiA+ID4g KyAqIEB2bV9ibzogdGhlICZkcm1fZ3B1dm1fYm8gYWJzdHJhY3Rpb24KPiA+ID4gPiA+IMKgwqDC oCAqCj4gPiA+ID4gPiDCoMKgwqAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBsaXN0IG9mIG9w ZXJhdGlvbnMgdG8gcGVyZm9ybQo+ID4gPiA+ID4gdW5tYXBwaW5nCj4gPiA+ID4gPiBmb3IgZXZl cnkKPiA+ID4gPiA+IMKgwqDCoCAqIEdQVVZBIGF0dGFjaGVkIHRvIGEgR0VNLgo+ID4gPiA+ID4g QEAgLTE3MTQsMTUgKzE5NTYsMTQgQEAKPiA+ID4gPiA+IEVYUE9SVF9TWU1CT0xfR1BMKGRybV9n cHV2bV9wcmVmZXRjaF9vcHNfY3JlYXRlKTsKPiA+ID4gPiA+IMKgwqDCoCAqIFJldHVybnM6IGEg cG9pbnRlciB0byB0aGUgJmRybV9ncHV2YV9vcHMgb24gc3VjY2VzcywgYW4KPiA+ID4gPiA+IEVS Ul9QVFIKPiA+ID4gPiA+IG9uIGZhaWx1cmUKPiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4g wqDCoMKgc3RydWN0IGRybV9ncHV2YV9vcHMgKgo+ID4gPiA+ID4gLWRybV9ncHV2bV9nZW1fdW5t YXBfb3BzX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ID4gPiA+ID4gK2RybV9ncHV2bV9ib191bm1hcF9vcHNf Y3JlYXRlKHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvKQo+ID4gPiA+ID4gwqDCoMKgewo+ID4g PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wcyAqb3BzOwo+ID4g PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcDsKPiA+ID4g PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7Cj4gPiA+ID4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gLcKg wqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKG9iaik7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX2dwdXZhX2Fzc2VydF9sb2NrX2hlbGQodm1fYm8tPm9i aik7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqBvcHMgPSBr emFsbG9jKHNpemVvZigqb3BzKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICghb3BzKQo+ID4gPiA+ID4gQEAgLTE3MzAsOCArMTk3MSw4IEBAIGRybV9ncHV2 bV9nZW1fdW5tYXBfb3BzX2NyZWF0ZShzdHJ1Y3QKPiA+ID4gPiA+IGRybV9ncHV2bQo+ID4gPiA+ ID4gKmdwdXZtLAo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg SU5JVF9MSVNUX0hFQUQoJm9wcy0+bGlzdCk7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gLcKg wqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2YSh2YSwgb2JqKSB7Cj4gPiA+ID4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AgPSBncHV2YV9vcF9hbGxvYyhncHV2bSk7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fZm9yX2VhY2hfdmEodmEsIHZt X2JvKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3AgPSBncHV2 YV9vcF9hbGxvYyh2bV9iby0+dm0pOwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKCFvcCkgewo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1FTk9NRU07Cj4gPiA+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJf ZnJlZV9vcHM7Cj4gPiA+ID4gPiBAQCAtMTc0NSwxMCArMTk4NiwxMCBAQCBkcm1fZ3B1dm1fZ2Vt X3VubWFwX29wc19jcmVhdGUoc3RydWN0Cj4gPiA+ID4gPiBkcm1fZ3B1dm0gKmdwdXZtLAo+ID4g PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gb3BzOwo+ID4gPiA+ID4gwqDCoCAKPiA+ ID4gPiA+IMKgwqDCoGVycl9mcmVlX29wczoKPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoGRybV9n cHV2YV9vcHNfZnJlZShncHV2bSwgb3BzKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9n cHV2YV9vcHNfZnJlZSh2bV9iby0+dm0sIG9wcyk7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiA+ID4gPiDCoMKgwqB9Cj4gPiA+ID4gPiAtRVhQ T1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2dlbV91bm1hcF9vcHNfY3JlYXRlKTsKPiA+ID4gPiA+ ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fYm9fdW5tYXBfb3BzX2NyZWF0ZSk7Cj4gPiA+ ID4gPiDCoMKgIAo+ID4gPiA+ID4gwqDCoMKgLyoqCj4gPiA+ID4gPiDCoMKgwqAgKiBkcm1fZ3B1 dmFfb3BzX2ZyZWUoKSAtIGZyZWUgdGhlIGdpdmVuICZkcm1fZ3B1dmFfb3BzCj4gPiA+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMKPiA+ID4g PiA+IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMKPiA+ID4gPiA+IGlu ZGV4IGVkNDM5YmY0MDMyZi4uMWU5NWIwYTFiMDQ3IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMKPiA+ID4gPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZtbS5jCj4gPiA+ID4gPiBAQCAtNjIsNiArNjIs OCBAQCBzdHJ1Y3QgYmluZF9qb2Jfb3Agewo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqBl bnVtIHZtX2JpbmRfb3Agb3A7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBmbGFn czsKPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dw dXZtX2JvICp2bV9ibzsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IHsKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2 NCBhZGRyOwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTY0 IHJhbmdlOwo+ID4gPiA+ID4gQEAgLTExMTMsMjIgKzExMTUsMjggQEAgYmluZF92YWxpZGF0ZV9y ZWdpb24oc3RydWN0Cj4gPiA+ID4gPiBub3V2ZWF1X2pvYgo+ID4gPiA+ID4gKmpvYikKPiA+ID4g PiA+IMKgwqDCoH0KPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiDCoMKgwqBzdGF0aWMgdm9pZAo+ ID4gPiA+ID4gLWJpbmRfbGlua19ncHV2YXMoc3RydWN0IGRybV9ncHV2YV9vcHMgKm9wcywgc3Ry dWN0Cj4gPiA+ID4gPiBub3V2ZWF1X3V2bWFfcHJlYWxsb2MgKm5ldykKPiA+ID4gPiA+ICtiaW5k X2xpbmtfZ3B1dmFzKHN0cnVjdCBiaW5kX2pvYl9vcCAqYm9wKQo+ID4gPiA+ID4gwqDCoMKgewo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYV9wcmVhbGxvYyAqbmV3 ID0gJmJvcC0+bmV3Owo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bV9i byAqdm1fYm8gPSBib3AtPnZtX2JvOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9ncHV2YV9vcHMgKm9wcyA9IGJvcC0+b3BzOwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcDsKPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9mb3JfZWFjaF9vcChvcCwgb3BzKSB7Cj4gPiA+ID4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKG9wLT5vcCkgewo+ ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBEUk1fR1BV VkFfT1BfTUFQOgo+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkcm1fZ3B1dmFfbGluaygmbmV3LT5tYXAtPnZhKTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2xpbmso Jm5ldy0+bWFwLT52YSwgdm1fYm8pOwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gPiA+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZBX09QX1JFTUFQOgo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgRFJNX0dQVVZBX09QX1JFTUFQOiB7Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCBkcm1fZ3B1dmEgKnZhID0gb3AtCj4gPiA+ID4gPiA+cmVtYXAudW5tYXAtCj4gPiA+ID4g PiA+IHZhOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvcC0+cmVtYXAucHJldikKPiA+ID4gPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2YV9saW5rKCZuZXctPnByZXYtCj4gPiA+ID4gPiA+dmEpOwo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZHJtX2dwdXZhX2xpbmsoJm5ldy0+cHJldi0KPiA+ID4gPiA+ID52YSwKPiA+ID4gPiA+ IHZhLQo+ID4gPiA+ID4gPiB2bV9ibyk7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG9wLT5yZW1hcC5uZXh0KQo+ID4gPiA+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHJtX2dwdXZhX2xpbmsoJm5ldy0+bmV4dC0KPiA+ID4gPiA+ID52YSk7Cj4gPiA+ ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9n cHV2YV91bmxpbmsob3AtPnJlbWFwLnVubWFwLQo+ID4gPiA+ID4gPnZhKTsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2YV9saW5rKCZuZXctPm5leHQtCj4gPiA+ID4gPiA+dmEsCj4gPiA+ID4gPiB2 YS0KPiA+ID4gPiA+ID4gdm1fYm8pOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFfdW5saW5rKHZhKTsKPiA+ID4gPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIERSTV9HUFVWQV9PUF9VTk1BUDoK PiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZ3B1dmFfdW5saW5rKG9wLT51bm1hcC52YSk7Cj4gPiA+ID4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiA+ID4g PiBAQCAtMTE1MCwxMCArMTE1OCwxOCBAQCBub3V2ZWF1X3V2bW1fYmluZF9qb2Jfc3VibWl0KHN0 cnVjdAo+ID4gPiA+ID4gbm91dmVhdV9qb2IgKmpvYikKPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfb3Aob3AsICZiaW5kX2pvYi0+b3Bz KSB7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAob3At Pm9wID09IE9QX01BUCkgewo+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBvcC0+Z2VtLm9iaiA9Cj4gPiA+ID4gPiBkcm1fZ2VtX29iamVjdF9s b29rdXAoam9iLQo+ID4gPiA+ID4gPiBmaWxlX3ByaXYsCj4gPiA+ID4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ID4gPiA+ IG9wLQo+ID4gPiA+ID4gPiBnZW0uaGFuZGxlKTsKPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFvcC0+Z2VtLm9iaikKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmo7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1 cChqb2ItCj4gPiA+ID4gPiA+IGZpbGVfcHJpdiwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLQo+ID4gPiA+ID4gPiBnZW0uaGFuZGxlKTsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCEob3AtPmdlbS5vYmogPSBvYmopKQo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVO T0VOVDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfbG9jayhvYmotPnJlc3YsIE5VTEwpOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvcC0+dm1f Ym8gPQo+ID4gPiA+ID4gZHJtX2dwdXZtX2JvX29idGFpbigmdXZtbS0KPiA+ID4gPiA+ID4gYmFz ZSwKPiA+ID4gPiA+IG9iaik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9yZXN2X3VubG9jayhvYmotPnJlc3YpOwo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJS KG9wLT52bV9ibykpCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUihvcC0+dm1fYm8pOwo+ ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4g wqDCoCAKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9 IGJpbmRfdmFsaWRhdGVfb3Aoam9iLCBvcCk7Cj4gPiA+ID4gPiBAQCAtMTM2NCw3ICsxMzgwLDcg QEAgbm91dmVhdV91dm1tX2JpbmRfam9iX3N1Ym1pdChzdHJ1Y3QKPiA+ID4gPiA+IG5vdXZlYXVf am9iCj4gPiA+ID4gPiAqam9iKQo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY2FzZSBPUF9VTk1BUF9TUEFSU0U6Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE9QX01BUDoKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgT1BfVU5NQVA6Cj4gPiA+ID4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJpbmRfbGlua19ncHV2YXMob3At Pm9wcywgJm9wLT5uZXcpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBiaW5kX2xpbmtfZ3B1dmFzKG9wKTsKPiA+ID4gPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ID4g PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gPiA+ID4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJl YWs7Cj4gPiA+ID4gPiBAQCAtMTUxMSw2ICsxNTI3LDEyIEBACj4gPiA+ID4gPiBub3V2ZWF1X3V2 bW1fYmluZF9qb2JfZnJlZV93b3JrX2ZuKHN0cnVjdAo+ID4gPiA+ID4gd29ya19zdHJ1Y3QgKndv cmspCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIUlT X0VSUl9PUl9OVUxMKG9wLT5vcHMpKQo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9vcHNfZnJlZSgmdXZtbS0+YmFz ZSwgb3AtCj4gPiA+ID4gPiA+IG9wcyk7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghSVNfRVJSX09SX05VTEwob3AtPnZtX2JvKSkg ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkbWFfcmVzdl9sb2NrKG9iai0+cmVzdiwgTlVMTCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2bV9ib19wdXQob3AtPnZt X2JvKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZG1hX3Jlc3ZfdW5sb2NrKG9iai0+cmVzdik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG9iaikKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX29iamVjdF9wdXQob2Jq KTsKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gQEAgLTE3NzYsMTUg KzE3OTgsMTggQEAgdm9pZAo+ID4gPiA+ID4gwqDCoMKgbm91dmVhdV91dm1tX2JvX21hcF9hbGwo c3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIHN0cnVjdAo+ID4gPiA+ID4gbm91dmVhdV9tZW0KPiA+ ID4gPiA+ICptZW0pCj4gPiA+ID4gPiDCoMKgwqB7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJm52Ym8tPmJvLmJhc2U7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gPiA+IMKg wqDCoMKgwqDCoMKg77+977+9wqDCoHN0cnVjdCBkcm1fZ3B1dmEgKnZhOwo+ID4gPiA+ID4gwqDC oCAKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQob2Jq LT5yZXN2KTsKPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiAtwqDCoMKgwqDCoMKgwqBkcm1fZ2Vt X2Zvcl9lYWNoX2dwdXZhKHZhLCBvYmopIHsKPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3Qgbm91dmVhdV91dm1hICp1dm1hID0gdXZtYV9mcm9tX3ZhKHZhKTsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm8odm1fYm8s IG9iaikgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 bV9ib19mb3JfZWFjaF92YSh2YSwgdm1fYm8pIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5vdXZlYXVfdXZtYSAqdXZtYSA9 Cj4gPiA+ID4gPiB1dm1hX2Zyb21fdmEodmEpOwo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBub3V2ZWF1X3V2bWFfbWFwKHV2bWEsIG1lbSk7 Cj4gPiA+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2ludmFs aWRhdGUodmEsIGZhbHNlKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbm91dmVhdV91dm1hX21hcCh1dm1hLCBtZW0pOwo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dmFf aW52YWxpZGF0ZSh2YSwgZmFsc2UpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gwqDCoMKg fQo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IEBAIC0xNzkyLDE1ICsxODE3LDE4IEBAIHZvaWQK PiA+ID4gPiA+IMKgwqDCoG5vdXZlYXVfdXZtbV9ib191bm1hcF9hbGwoc3RydWN0IG5vdXZlYXVf Ym8gKm52Ym8pCj4gPiA+ID4gPiDCoMKgwqB7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJm52Ym8tPmJvLmJhc2U7Cj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2YSAqdmE7Cj4gPiA+ID4gPiDCoMKgIAo+ID4g PiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9hc3NlcnRfaGVsZChvYmotPnJlc3Yp Owo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoGRybV9nZW1fZm9yX2Vh Y2hfZ3B1dmEodmEsIG9iaikgewo+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBub3V2ZWF1X3V2bWEgKnV2bWEgPSB1dm1hX2Zyb21fdmEodmEpOwo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ibyh2bV9ibywgb2JqKSB7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZtX2JvX2Zv cl9lYWNoX3ZhKHZhLCB2bV9ibykgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgbm91dmVhdV91dm1hICp1dm1hID0KPiA+ID4g PiA+IHV2bWFfZnJvbV92YSh2YSk7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoO+/ve+/vcKgwqDCoMKgwqBub3V2ZWF1X3V2bWFfdW5tYXAodXZtYSk7Cj4gPiA+ ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2ludmFsaWRhdGUo dmEsIHRydWUpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBub3V2ZWF1X3V2bWFfdW5tYXAodXZtYSk7Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2YV9pbnZhbGlkYXRl KHZhLCB0cnVlKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4g PiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+IMKgwqDCoH0KPiA+ID4gPiA+ IMKgwqAgCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2dlbS5oIGIvaW5j bHVkZS9kcm0vZHJtX2dlbS5oCj4gPiA+ID4gPiBpbmRleCAxNjM2NDQ4N2ZkZTkuLjM2OTUwNTQ0 N2FjZCAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9nZW0uaAo+ID4gPiA+ ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbS5oCj4gPiA+ID4gPiBAQCAtNTgwLDcgKzU4MCw3 IEBAIGludCBkcm1fZ2VtX2V2aWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdAo+ID4gPiA+ID4gKm9i aik7Cj4gPiA+ID4gPiDCoMKgwqAgKiBkcm1fZ2VtX2dwdXZhX2luaXQoKSAtIGluaXRpYWxpemUg dGhlIGdwdXZhIGxpc3Qgb2YgYQo+ID4gPiA+ID4gR0VNCj4gPiA+ID4gPiBvYmplY3QKPiA+ID4g PiA+IMKgwqDCoCAqIEBvYmo6IHRoZSAmZHJtX2dlbV9vYmplY3QKPiA+ID4gPiA+IMKgwqDCoCAq Cj4gPiA+ID4gPiAtICogVGhpcyBpbml0aWFsaXplcyB0aGUgJmRybV9nZW1fb2JqZWN0J3MgJmRy bV9ncHV2YSBsaXN0Lgo+ID4gPiA+ID4gKyAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlICZkcm1fZ2Vt X29iamVjdCdzICZkcm1fZ3B1dm1fYm8KPiA+ID4gPiA+IGxpc3QuCj4gPiA+ID4gPiDCoMKgwqAg Kgo+ID4gPiA+ID4gwqDCoMKgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVjZXNz YXJ5IGZvciBkcml2ZXJzCj4gPiA+ID4gPiBpbnRlbmRpbmcgdG8KPiA+ID4gPiA+IHN1cHBvcnQg dGhlCj4gPiA+ID4gPiDCoMKgwqAgKiAmZHJtX2RyaXZlcl9mZWF0dXJlIERSSVZFUl9HRU1fR1BV VkEuCj4gPiA+ID4gPiBAQCAtNTkzLDI4ICs1OTMsMjggQEAgc3RhdGljIGlubGluZSB2b2lkCj4g PiA+ID4gPiBkcm1fZ2VtX2dwdXZhX2luaXQoc3RydWN0Cj4gPiA+ID4gPiBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ID4gPiA+ID4gwqDCoMKgfQo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDC oC8qKgo+ID4gPiA+ID4gLSAqIGRybV9nZW1fZm9yX2VhY2hfZ3B1dmEoKSAtIGl0ZXJuYXRvciB0 byB3YWxrIG92ZXIgYSBsaXN0Cj4gPiA+ID4gPiBvZgo+ID4gPiA+ID4gZ3B1dmFzCj4gPiA+ID4g PiAtICogQGVudHJ5X186ICZkcm1fZ3B1dmEgc3RydWN0dXJlIHRvIGFzc2lnbiB0byBpbiBlYWNo Cj4gPiA+ID4gPiBpdGVyYXRpb24KPiA+ID4gPiA+IHN0ZXAKPiA+ID4gPiA+IC0gKiBAb2JqX186 IHRoZSAmZHJtX2dlbV9vYmplY3QgdGhlICZkcm1fZ3B1dmFzIHRvIHdhbGsgYXJlCj4gPiA+ID4g PiBhc3NvY2lhdGVkIHdpdGgKPiA+ID4gPiA+ICsgKiBkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2Jv KCkgLSBpdGVyYXRvciB0byB3YWxrIG92ZXIgYQo+ID4gPiA+ID4gbGlzdCBvZgo+ID4gPiA+ID4g JmRybV9ncHV2bV9ibwo+ID4gPiA+ID4gKyAqIEBlbnRyeV9fOiAmZHJtX2dwdXZtX2JvIHN0cnVj dHVyZSB0byBhc3NpZ24gdG8gaW4gZWFjaAo+ID4gPiA+ID4gaXRlcmF0aW9uCj4gPiA+ID4gPiBz dGVwCj4gPiA+ID4gPiArICogQG9ial9fOiB0aGUgJmRybV9nZW1fb2JqZWN0IHRoZSAmZHJtX2dw dXZtX2JvIHRvIHdhbGsgYXJlCj4gPiA+ID4gPiBhc3NvY2lhdGVkIHdpdGgKPiA+ID4gPiA+IMKg wqDCoCAqCj4gPiA+ID4gPiAtICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJtX2dw dXZhIHN0cnVjdHVyZXMKPiA+ID4gPiA+IGFzc29jaWF0ZWQKPiA+ID4gPiA+IHdpdGggdGhlCj4g PiA+ID4gPiAtICogJmRybV9ncHV2YV9tYW5hZ2VyLgo+ID4gPiA+ID4gKyAqIFRoaXMgaXRlcmF0 b3Igd2Fsa3Mgb3ZlciBhbGwgJmRybV9ncHV2bV9ibyBzdHJ1Y3R1cmVzCj4gPiA+ID4gPiBhc3Nv Y2lhdGVkCj4gPiA+ID4gPiB3aXRoIHRoZQo+ID4gPiA+ID4gKyAqICZkcm1fZ2VtX29iamVjdC4K PiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4gLSNkZWZpbmUgZHJtX2dlbV9mb3JfZWFjaF9n cHV2YShlbnRyeV9fLCBvYmpfXykgXAo+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgbGlzdF9mb3Jf ZWFjaF9lbnRyeShlbnRyeV9fLCAmKG9ial9fKS0+Z3B1dmEubGlzdCwKPiA+ID4gPiA+IGdlbS5l bnRyeSkKPiA+ID4gPiA+ICsjZGVmaW5lIGRybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm8oZW50cnlf Xywgb2JqX18pIFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnko ZW50cnlfXywgJihvYmpfXyktPmdwdXZhLmxpc3QsCj4gPiA+ID4gPiBsaXN0LmVudHJ5LmdlbSkK PiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiDCoMKgwqAvKioKPiA+ID4gPiA+IC0gKiBkcm1fZ2Vt X2Zvcl9lYWNoX2dwdXZhX3NhZmUoKSAtIGl0ZXJuYXRvciB0byBzYWZlbHkgd2Fsawo+ID4gPiA+ ID4gb3Zlcgo+ID4gPiA+ID4gYQo+ID4gPiA+ID4gbGlzdCBvZgo+ID4gPiA+ID4gLSAqIGdwdXZh cwo+ID4gPiA+ID4gLSAqIEBlbnRyeV9fOiAmZHJtX2dwdXZhIHN0cnVjdHVyZSB0byBhc3NpZ24g dG8gaW4gZWFjaAo+ID4gPiA+ID4gaXRlcmF0aW9uCj4gPiA+ID4gPiBzdGVwCj4gPiA+ID4gPiAt ICogQG5leHRfXzogJm5leHQgJmRybV9ncHV2YSB0byBzdG9yZSB0aGUgbmV4dCBzdGVwCj4gPiA+ ID4gPiAtICogQG9ial9fOiB0aGUgJmRybV9nZW1fb2JqZWN0IHRoZSAmZHJtX2dwdXZhcyB0byB3 YWxrIGFyZQo+ID4gPiA+ID4gYXNzb2NpYXRlZCB3aXRoCj4gPiA+ID4gPiArICogZHJtX2dlbV9m b3JfZWFjaF9ncHV2bV9ib19zYWZlKCkgLSBpdGVyYXRvciB0byBzYWZlbHkKPiA+ID4gPiA+IHdh bGsKPiA+ID4gPiA+IG92ZXIgYQo+ID4gPiA+ID4gbGlzdCBvZgo+ID4gPiA+ID4gKyAqICZkcm1f Z3B1dm1fYm8KPiA+ID4gPiA+ICsgKiBAZW50cnlfXzogJmRybV9ncHV2bV9ib3N0cnVjdHVyZSB0 byBhc3NpZ24gdG8gaW4gZWFjaAo+ID4gPiA+ID4gaXRlcmF0aW9uCj4gPiA+ID4gPiBzdGVwCj4g PiA+ID4gPiArICogQG5leHRfXzogJm5leHQgJmRybV9ncHV2bV9ibyB0byBzdG9yZSB0aGUgbmV4 dCBzdGVwCj4gPiA+ID4gPiArICogQG9ial9fOiB0aGUgJmRybV9nZW1fb2JqZWN0IHRoZSAmZHJt X2dwdXZtX2JvIHRvIHdhbGsgYXJlCj4gPiA+ID4gPiBhc3NvY2lhdGVkIHdpdGgKPiA+ID4gPiA+ IMKgwqDCoCAqCj4gPiA+ID4gPiAtICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJt X2dwdXZhIHN0cnVjdHVyZXMKPiA+ID4gPiA+IGFzc29jaWF0ZWQKPiA+ID4gPiA+IHdpdGggdGhl Cj4gPiA+ID4gPiArICogVGhpcyBpdGVyYXRvciB3YWxrcyBvdmVyIGFsbCAmZHJtX2dwdXZtX2Jv IHN0cnVjdHVyZXMKPiA+ID4gPiA+IGFzc29jaWF0ZWQKPiA+ID4gPiA+IHdpdGggdGhlCj4gPiA+ ID4gPiDCoMKgwqAgKiAmZHJtX2dlbV9vYmplY3QuIEl0IGlzIGltcGxlbWVudGVkIHdpdGgKPiA+ ID4gPiA+IGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSgpLCBoZW5jZQo+ID4gPiA+ID4gwqDCoMKg ICogaXQgaXMgc2F2ZSBhZ2FpbnN0IHJlbW92YWwgb2YgZWxlbWVudHMuCj4gPiA+ID4gPiDCoMKg wqAgKi8KPiA+ID4gPiA+IC0jZGVmaW5lIGRybV9nZW1fZm9yX2VhY2hfZ3B1dmFfc2FmZShlbnRy eV9fLCBuZXh0X18sIG9ial9fKQo+ID4gPiA+ID4gXAo+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKg bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5X18sIG5leHRfXywgJihvYmpfXyktCj4gPiA+ ID4gPiA+IGdwdXZhLmxpc3QsIGdlbS5lbnRyeSkKPiA+ID4gPiA+ICsjZGVmaW5lIGRybV9nZW1f Zm9yX2VhY2hfZ3B1dm1fYm9fc2FmZShlbnRyeV9fLCBuZXh0X18sCj4gPiA+ID4gPiBvYmpfXykg XAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5 X18sIG5leHRfXywgJihvYmpfXyktCj4gPiA+ID4gPiA+IGdwdXZhLmxpc3QsIGxpc3QuZW50cnku Z2VtKQo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoCNlbmRpZiAvKiBfX0RSTV9HRU1f SF9fICovCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmgKPiA+ ID4gPiA+IGIvaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmgKPiA+ID4gPiA+IGluZGV4IDQ3Y2JhY2Iy NDRiOS4uNDY2ZmRkNzZjNzFhIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJt X2dwdXZtLmgKPiA+ID4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9ncHV2bS5oCj4gPiA+ID4g PiBAQCAtMjUsNiArMjUsNyBAQAo+ID4gPiA+ID4gwqDCoMKgICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgo+ID4gPiA+ID4gwqDCoMKgICovCj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtcmVzdi5oPgo+ID4gPiA+ID4gwqDCoMKgI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4KPiA+ID4gPiA+IMKgwqDCoCNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4K PiA+ID4gPiA+IMKgwqDCoCNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gPiA+ID4gQEAgLTMz LDYgKzM0LDcgQEAKPiA+ID4gPiA+IMKgwqDCoCNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ID4g PiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm07Cj4gPiA+ID4gPiAr c3RydWN0IGRybV9ncHV2bV9ibzsKPiA+ID4gPiA+IMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fb3Bz Owo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoC8qKgo+ID4gPiA+ID4gQEAgLTczLDYg Kzc1LDEyIEBAIHN0cnVjdCBkcm1fZ3B1dmEgewo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqAgKi8KPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9ncHV2bSAqdm07 Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqAgKiBAdm1fYm86IHRoZSAmZHJtX2dwdXZtX2JvIGFic3RyYWN0aW9uIGZv ciB0aGUKPiA+ID4gPiA+IG1hcHBlZAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogJmRybV9n ZW1fb2JqZWN0Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8gKnZtX2JvOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICog QGZsYWdzOiB0aGUgJmRybV9ncHV2YV9mbGFncyBmb3IgdGhpcyBtYXBwaW5nCj4gPiA+ID4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gPiA+ID4gQEAgLTEwOCw3ICsxMTYsNyBAQCBzdHJ1 Y3QgZHJtX2dwdXZhIHsKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwo+ID4gPiA+ID4gwqDCoCAKPiA+ID4gPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKgo+ID4gPiA+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBlbnRyeTogdGhlICZsaXN0X2hlYWQgdG8gYXR0 YWNoIHRoaXMKPiA+ID4gPiA+IG9iamVjdAo+ID4gPiA+ID4gdG8gYQo+ID4gPiA+ID4gJmRybV9n ZW1fb2JqZWN0Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGVu dHJ5OiB0aGUgJmxpc3RfaGVhZCB0byBhdHRhY2ggdGhpcwo+ID4gPiA+ID4gb2JqZWN0Cj4gPiA+ ID4gPiB0byBhCj4gPiA+ID4gPiAmZHJtX2dwdXZtX2JvCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Cj4gPiA+ID4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoH0gZ2VtOwo+ID4gPiA+ID4gQEAgLTE0MSw3ICsxNDksNyBAQCBzdHJ1Y3Qg ZHJtX2dwdXZhIHsKPiA+ID4gPiA+IMKgwqDCoGludCBkcm1fZ3B1dmFfaW5zZXJ0KHN0cnVjdCBk cm1fZ3B1dm0gKmdwdXZtLCBzdHJ1Y3QKPiA+ID4gPiA+IGRybV9ncHV2YQo+ID4gPiA+ID4gKnZh KTsKPiA+ID4gPiA+IMKgwqDCoHZvaWQgZHJtX2dwdXZhX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXZh ICp2YSk7Cj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4gLXZvaWQgZHJtX2dwdXZhX2xpbmsoc3Ry dWN0IGRybV9ncHV2YSAqdmEpOwo+ID4gPiA+ID4gK3ZvaWQgZHJtX2dwdXZhX2xpbmsoc3RydWN0 IGRybV9ncHV2YSAqdmEsIHN0cnVjdAo+ID4gPiA+ID4gZHJtX2dwdXZtX2JvCj4gPiA+ID4gPiAq dm1fYm8pOwo+ID4gPiA+ID4gwqDCoMKgdm9pZCBkcm1fZ3B1dmFfdW5saW5rKHN0cnVjdCBkcm1f Z3B1dmEgKnZhKTsKPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiDCoMKgwqBzdHJ1Y3QgZHJtX2dw dXZhICpkcm1fZ3B1dmFfZmluZChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gPiA+IEBA IC0xODgsMTAgKzE5NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wKPiA+ID4gPiA+IGRybV9ncHV2 YV9pbnZhbGlkYXRlZChzdHJ1Y3QKPiA+ID4gPiA+IGRybV9ncHV2YSAqdmEpCj4gPiA+ID4gPiDC oMKgwqAgKiBlbnVtIGRybV9ncHV2bV9mbGFncyAtIGZsYWdzIGZvciBzdHJ1Y3QgZHJtX2dwdXZt Cj4gPiA+ID4gPiDCoMKgwqAgKi8KPiA+ID4gPiA+IMKgwqDCoGVudW0gZHJtX2dwdXZtX2ZsYWdz IHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg ICogQERSTV9HUFVWTV9SRVNWX1BST1RFQ1RFRDogR1BVVk0gaXMgcHJvdGVjdGVkCj4gPiA+ID4g PiBleHRlcm5hbGx5Cj4gPiA+ID4gPiBieSB0aGUKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAq IEdQVVZNJ3MgJmRtYV9yZXN2IGxvY2sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0dQVVZNX1JFU1ZfUFJPVEVDVEVEID0gQklUKDApLAo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgICogQERSTV9HUFVWTV9VU0VSQklUUzogdXNlciBkZWZpbmVkIGJp dHMKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiAtwqDCoMKgwqDC oMKgwqBEUk1fR1BVVk1fVVNFUkJJVFMgPSBCSVQoMCksCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBEUk1fR1BVVk1fVVNFUkJJVFMgPSBCSVQoMSksCj4gPiA+ID4gPiDCoMKgwqB9Owo+ID4gPiA+ ID4gwqDCoCAKPiA+ID4gPiA+IMKgwqDCoC8qKgo+ID4gPiA+ID4gQEAgLTI4MCw2ICsyOTQsMTkg QEAgYm9vbCBkcm1fZ3B1dm1faW50ZXJ2YWxfZW1wdHkoc3RydWN0Cj4gPiA+ID4gPiBkcm1fZ3B1 dm0KPiA+ID4gPiA+ICpncHV2bSwgdTY0IGFkZHIsIHU2NCByYW5nZSk7Cj4gPiA+ID4gPiDCoMKg wqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgo+ID4gPiA+ID4gwqDCoMKgZHJtX2dwdXZtX3Jlc3Zf b2JqZWN0X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gPiA+ID4gwqDCoCAKPiA+ ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1fcmVzdl9wcm90ZWN0ZWQoKSAtIGlu ZGljYXRlcyB3aGV0aGVyCj4gPiA+ID4gPiAmRFJNX0dQVVZNX1JFU1ZfUFJPVEVDVEVEIGlzCj4g PiA+ID4gPiArICogc2V0Cj4gPiA+ID4gPiArICogQGdwdXZtOiB0aGUgJmRybV9ncHV2bQo+ID4g PiA+ID4gKyAqCj4gPiA+ID4gPiArICogUmV0dXJuczogdHJ1ZSBpZiAmRFJNX0dQVVZNX1JFU1Zf UFJPVEVDVEVEIGlzIHNldCwgZmFsc2UKPiA+ID4gPiA+IG90aGVyd2lzZS4KPiA+ID4gPiA+ICsg Ki8KPiA+ID4gPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fcmVz dl9wcm90ZWN0ZWQoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0pCj4gPiA+ID4gPiArewo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGdwdXZtLT5mbGFncyAmIERSTV9HUFVWTV9SRVNWX1BS T1RFQ1RFRDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiDCoMKgwqAvKioKPiA+ ID4gPiA+IMKgwqDCoCAqIGRybV9ncHV2bV9yZXN2KCkgLSByZXR1cm5zIHRoZSAmZHJtX2dwdXZt J3MgJmRtYV9yZXN2Cj4gPiA+ID4gPiDCoMKgwqAgKiBAZ3B1dm1fXzogdGhlICZkcm1fZ3B1dm0K PiA+ID4gPiA+IEBAIC0yOTgsNiArMzI1LDEyIEBAIGRybV9ncHV2bV9yZXN2X29iamVjdF9hbGxv YyhzdHJ1Y3QKPiA+ID4gPiA+IGRybV9kZXZpY2UKPiA+ID4gPiA+ICpkcm0pOwo+ID4gPiA+ID4g wqDCoMKgICovCj4gPiA+ID4gPiDCoMKgwqAjZGVmaW5lIGRybV9ncHV2bV9yZXN2X29iaihncHV2 bV9fKSAoKGdwdXZtX18pLT5yX29iaikKPiA+ID4gPiA+IMKgwqAgCj4gPiA+ID4gPiArI2RlZmlu ZSBkcm1fZ3B1dm1fcmVzdl9oZWxkKGdwdXZtX18pIFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oGRtYV9yZXN2X2hlbGQoZHJtX2dwdXZtX3Jlc3YoZ3B1dm1fXykpCj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArI2RlZmluZSBkcm1fZ3B1dm1fcmVzdl9hc3NlcnRfaGVsZChncHV2bV9fKSBcCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9hc3NlcnRfaGVsZChkcm1fZ3B1dm1fcmVzdihn cHV2bV9fKSkKPiA+ID4gPiA+ICsKPiA+ID4gPiA+IMKgwqDCoCNkZWZpbmUgZHJtX2dwdXZtX3Jl c3ZfaGVsZChncHV2bV9fKSBcCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9yZXN2 X2hlbGQoZHJtX2dwdXZtX3Jlc3YoZ3B1dm1fXykpCj4gPiA+ID4gPiDCoMKgIAo+ID4gPiA+ID4g QEAgLTM4Miw2ICs0MTUsMTI4IEBAIF9fZHJtX2dwdXZhX25leHQoc3RydWN0IGRybV9ncHV2YSAq dmEpCj4gPiA+ID4gPiDCoMKgwqAjZGVmaW5lIGRybV9ncHV2bV9mb3JfZWFjaF92YV9zYWZlKHZh X18sIG5leHRfXywgZ3B1dm1fXykKPiA+ID4gPiA+IFwKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZhX18sIG5leHRfXywgJihncHV2bV9fKS0K PiA+ID4gPiA+ID4gcmIubGlzdCwKPiA+ID4gPiA+IHJiLmVudHJ5KQo+ID4gPiA+ID4gwqDCoCAK PiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBzdHJ1Y3QgZHJtX2dwdXZtX2JvIC0gc3RydWN0 dXJlIHJlcHJlc2VudGluZyBhICZkcm1fZ3B1dm0KPiA+ID4gPiA+IGFuZAo+ID4gPiA+ID4gKyAq ICZkcm1fZ2VtX29iamVjdCBjb21iaW5hdGlvbgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICog VGhpcyBzdHJ1Y3R1cmUgaXMgYW4gYWJzdHJhY3Rpb24gcmVwcmVzZW50aW5nIGEKPiA+ID4gPiA+ ICZkcm1fZ3B1dm0KPiA+ID4gPiA+IGFuZAo+ID4gPiA+ID4gKyAqICZkcm1fZ2VtX29iamVjdCBj b21iaW5hdGlvbi4gSXQgc2VydmVzIGFzIGFuIGluZGlyZWN0aW9uCj4gPiA+ID4gPiB0bwo+ID4g PiA+ID4gYWNjZWxlcmF0ZQo+ID4gPiA+ID4gKyAqIGl0ZXJhdGluZyBhbGwgJmRybV9ncHV2YXMg d2l0aGluIGEgJmRybV9ncHV2bSBiYWNrZWQgYnkKPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gc2Ft ZQo+ID4gPiA+ID4gKyAqICZkcm1fZ2VtX29iamVjdC4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4g KyAqIEZ1cnRoZXJtb3JlIGl0IGlzIHVzZWQgY2FjaGUgZXZpY3RlZCBHRU0gb2JqZWN0cyBmb3Ig YQo+ID4gPiA+ID4gY2VydGFpbgo+ID4gPiA+ID4gR1BVLVZNIHRvCj4gPiA+ID4gPiArICogYWNj ZWxlcmF0ZSB2YWxpZGF0aW9uLgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogVHlwaWNhbGx5 LCBkcml2ZXJzIHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgc3RydWN0Cj4gPiA+ID4g PiBkcm1fZ3B1dm1fYm8gb25jZQo+ID4gPiA+ID4gKyAqIGEgR0VNIG9iamVjdCBpcyBtYXBwZWQg Zmlyc3QgaW4gYSBHUFUtVk0gYW5kIHJlbGVhc2UgdGhlCj4gPiA+ID4gPiBpbnN0YW5jZQo+ID4g PiA+ID4gb25jZSB0aGUKPiA+ID4gPiA+ICsgKiBsYXN0IG1hcHBpbmcgb2YgdGhlIEdFTSBvYmpl Y3QgaW4gdGhpcyBHUFUtVk0gaXMKPiA+ID4gPiA+IHVubWFwcGVkLgo+ID4gPiA+ID4gKyAqLwo+ ID4gPiA+ID4gK3N0cnVjdCBkcm1fZ3B1dm1fYm8gewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg LyoqCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBAdm06IFRoZSAmZHJtX2dwdXZtIHRoZSBA b2JqIGlzIG1hcHBlZCBpbi4gVGhpcwo+ID4gPiA+ID4gcG9pbnRlciBpcwo+ID4gPiA+ID4gbm90 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiByZWZlcmVuY2UgY291bnRlZC4KPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoCAqCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBBIHN0cnVjdCBk cm1fZ3B1dm1fYm8gaXMgbm90IGFsbG93ZWQgdG8gb3V0LWxpdmUKPiA+ID4gPiA+IGl0cwo+ID4g PiA+ID4gJmRybV9ncHV2bQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogY29udGV4dC4gSW1w bGljaXRseSwgdGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBmYWN0Cj4gPiA+ID4gPiB0aGF0Cj4gPiA+ ID4gPiB0aGUKPiA+ID4gPiA+IGRyaXZlciBpcwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICog cmVzcG9uc2libGUgdG8gZW5zdXJlIHRoZSBWTSBkb2Vzbid0IGNvbnRhaW4KPiA+ID4gPiA+IG1h cHBpbmdzCj4gPiA+ID4gPiBvbmNlCj4gPiA+ID4gPiBpdCdzCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqAgKiBmcmVlZCwgc2luY2UgYSBzdHJ1Y3QgZHJtX2dwdXZtX2JvIHNob3VsZCBiZSBmcmVl ZAo+ID4gPiA+ID4gb25jZQo+ID4gPiA+ID4gdGhlIGxhc3QKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoCAqIG1hcHBpbmcgYmVpbmcgYmFja2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGJ1ZmZlcgo+ ID4gPiA+ID4gb2JqZWN0IGlzCj4gPiA+ID4gPiB1bm1hcHBlZC4KPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoCAqLwo+ID4gPiA+IAo+ID4gPiA+IAo+ID4gPiA+IEkgZG9uJ3QgdGhpbmsgdGhlIGFi b3ZlIGlzIGNvbXBsZXRlbHkgdHJ1ZS4gTGV0J3MgYXNzdW1lIGluIHRoZQo+ID4gPiA+ICFSRVNW X1BST1RFQ1RFRCBjYXNlIHRoYXQgYSByZWZlcmVuY2UgaXMgZ3JhYmJlZCBvbiB0aGUKPiA+ID4g PiBkcm1fZ3B1dm1fYm8KPiA+ID4gPiBkdXJpbmcgYW4gaXRlcmF0aW9uIG92ZXIgYSBsaXN0LiBU aGVuIHVzZXItc3BhY2UgY2xvc2VzIHRoZSB2bQo+ID4gPiA+IGFuZAo+ID4gPiA+IGFsbAo+ID4g PiA+IHZtYXMgYXJlIHVubGlua2VkLCBidXQgdGhpcyByZWZlcmVuY2UgcmVtYWlucyBidXQgdGhl IHZtCj4gPiA+ID4gcG9pbnRlcgo+ID4gPiA+IGJlY29tZXMgc3RhbGUuIEluIHRoZSBSRVNWX1BS T1RFQ1RFRCBjYXNlIHRoaXMgaXMgZW5zdXJlZCBub3QKPiA+ID4gPiB0bwo+ID4gPiA+IGhhcHBl bgo+ID4gPiA+IGlmIGJ5IHRoZSB2bS0+cmVzdiBiZWluZyBncmFiYmVkIGR1cmluZyB1bmxpbmss IGJ1dCBpbiB0aGUKPiA+ID4gPiAhUkVTVl9QUk9URUNURUQgY2FzZSwgdGhlIGFib3ZlIHdvcmRp bmcgaXNuJ3Qgc3VmZmljaWVudC4gVGhlCj4gPiA+ID4gY2FsbGVyCj4gPiA+ID4gbmVlZHMgdG8g ZW5zdXJlIHRoZSB2bSBzdGF5cyBhbGl2ZSB1c2luZyBzb21lIHNvcnQgb2Ygc2ltaWxhcgo+ID4g PiA+IHJ1bGUKPiA+ID4gPiBvcgo+ID4gPiA+IHVzZSBrcmVmX2dldF91bmxlc3NfemVybygpIG9u IHRoZSB2bSB1bmRlciB0aGUgc3BpbmxvY2sgaWYKPiA+ID4gPiBkZXJlZmVyZW5jZWQuCj4gPiA+ IAo+ID4gPiBUaGUgbGlzdCBpcyBwYXJ0IG9mIHRoZSBHUFVWTS4gSGVuY2UsIHRoZSBjYWxsZXIg Km11c3QqIGVpdGhlcgo+ID4gPiBhbHJlYWR5IGhvbGQKPiA+ID4gYSByZWZlcmVuY2UgdG8gdGhl IEdQVVZNIG9yIG90aGVyd2lzZSBlbnN1cmUgaXQncyBub3QgZnJlZWQgd2hpbGUKPiA+ID4gaXRl cmF0aW5nCj4gPiA+IHRoaXMgbGlzdC4gQWxsIHRoZSBkcm1fZ3B1dm1fYm8gc3RydWN0dXJlcyB3 aXRoaW4gdGhpcyBsaXN0IGNhbid0Cj4gPiA+IGhhdmUgYQo+ID4gPiBwb2ludGVyIHRvIGFub3Ro ZXIgVk0gdGhhbiB0aGlzIG9uZSBieSBkZWZpbml0aW9uLgo+ID4gPiAKPiA+ID4gQW55d2F5LCBJ IHJlY29nbml6ZSB0aGF0IHRoaXMgaXNuJ3QgdmVyeSBvYnZpb3VzLiBIZW5jZSwgSSB0aGluawo+ ID4gPiB3ZQo+ID4gPiBzaG91bGQKPiA+ID4gcHJvYmFibHkgcmVmZXJlbmNlIGNvdW50IEdQVVZN cyBhcyB3ZWxsLiBJJ2QgdGhpbmsgb2YgdGhlIHNhbWUKPiA+ID4gd2F5IHdlCj4gPiA+IGRvIGl0 Cj4gPiA+IHdpdGggZHJtX2dlbV9vYmplY3RzLiBIb3dldmVyLCBJJ2QgcHJlZmVyIHRvIGludHJv ZHVjZSB0aGlzIHdpdGgKPiA+ID4gYQo+ID4gPiBzdWJzZXF1ZW50Cj4gPiA+IHBhdGNoLgo+ID4g Cj4gPiBXZWxsLCBJIHRoaW5rIHdlIHNob3VsZCBhY3R1YWxseSBiZSBPSyBpbiBtb3N0IGNhc2Vz LCBhbmQKPiA+IHJlZmNvdW50aW5nCj4gPiBoZXJlIHdvdWxkIHByb2JhYmx5IHJlc3VsdCBpbiBj aXJjdWxhciBkZXBlbmRlbmNpZXMuCj4gCj4gV2hlcmUgd291bGQgeW91IHNlZSBhIGNpcmN1bGFy IGRlcGVuZGVuY3kgd2l0aCByZWZlcmVuY2UgY291bnRlZAo+IEdQVVZNcz8KCkl0J2QgYmUgaWYg eW91IGNhbGwgYW55IHZhX3VubGluaygpIGZyb20gdGhlIHZtIGRlc3RydWN0b3IuIFRoZW4gdGhl CmRlc3RydWN0b3Igd2lsbCBuZXZlciBnZXQgY2FsbGVkIGJlY2F1c2Ugb2YgdGhlIGNvcnJlc3Bv bmRpbmcgZ3B1dm1fYm8Kdm0gcmVmZXJlbmNlLiAoSUlSQyB0aGUgc2FtZSBhcmd1bWVudCB3YXMg bWFkZSB3aXRoIHRoZSB2bSdzIHJlc3ZfYm8gYnkKQ2hyaXN0aWFuPykKCkhvd2V2ZXIgaWYgdGhl cmUgaXMgYSB2bV9jbG9zZSgpLCB0aGF0IGRvZXMgYWxsIHRoZSB2YV91bmxpbmsoKSwgdGhhdAp3 aWxsIHJlc29sdmUgdGhhdCBjaXJjdWxhciBkZXBlbmNlbmN5LiBXZSBkbyBoYXZlIGl0IGluIFhl LCBub3Qgc3VyZQphYm91dCBvdGhlciBkcml2ZXJzLgoKL1Rob21hcwoK