Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp2647009ybe; Thu, 12 Sep 2019 12:35:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqxVF2Si3rwAsHG5/zk3+vmpGGLde9jMvY+foj8wbGvlLohZhF2kn2stdQw3yqpN7lf8ujCb X-Received: by 2002:a50:d718:: with SMTP id t24mr41071981edi.168.1568316956802; Thu, 12 Sep 2019 12:35:56 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1568316956; cv=pass; d=google.com; s=arc-20160816; b=tOh/iEm9kLHDFGy9EJD+ziVSU8DYLec2EKLNpjcpNGmSFNJdObDjFLLaz258wnYhqQ LxFTFUsXW/X7bMRXu4FdxrqCAeWL5tU2Sg5RT+94zZmQZ+pKCQM/hWGlPzDoBcUB1Y6x xS1Iv2SU1pAVeAi6y9sx3EMBoRYxQqU0K6YL4vBna2PqYA2o6bNd7HRquXrybdOwF0eR s/05mMPgauE2mpx/tdiP6yVaOUl6U/LtfmA5IrcEAfzyfJCOcyjlb4Vo0QWMPyru9Qsj yv11MQlmWxOLhcc9BArhGwtDZrDbahtq9lwQ5k+90gVq1Jr6sFukdtGbUORcuQLvGbxW bZ6A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=aZHt3tswEd6bhtK9OiHmchZA+E1ciGIGhyKAaYNHG4Q=; b=V/1Ej4WSxJ2XglSkO0RNqCM+jbM7QOmaDjYrswKIK0Jmq9bZLNvaYg8ypVf0o7WgQr Cak6mzLK/+2aTvAhMOaU0GAzm95UfxnoE/GaXjwexjlDx0lz9jSdDhcs8UA9RmijT3SS mXA84jxXhzfOYj4JghpDfLzwPqEKKBS4SYKv1fgwU48pDZKJuAr6VX6daV4fKjkpuoRY fhQ65L2VjmUMoWTJ0Hi1oKMkwUNF60cYs5jTBIVcbGv+6e2D0SqHd1gZMqtAxJc19qQy Vsta6nhd64YO4gQUQPNa9Q4JVfUBJumzSPKWCvD0D4TsiKIv8p038q4TY2D/sHo10JI7 LbFg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=UXumtGVj; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=hammerspace.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o46si16595269edc.124.2019.09.12.12.35.31; Thu, 12 Sep 2019 12:35:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@hammerspace.com header.s=selector2 header.b=UXumtGVj; arc=pass (i=1 spf=pass spfdomain=hammerspace.com dkim=pass dkdomain=hammerspace.com dmarc=pass fromdomain=hammerspace.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=hammerspace.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726836AbfILRoe (ORCPT + 99 others); Thu, 12 Sep 2019 13:44:34 -0400 Received: from mail-eopbgr680128.outbound.protection.outlook.com ([40.107.68.128]:13804 "EHLO NAM04-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726475AbfILRoe (ORCPT ); Thu, 12 Sep 2019 13:44:34 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nFynk3JumUNZY9TaFgAonCe32FcU1gfmxydPyOZiCgFAJHVK2lIo2n9M7Zy6j2VoJwbtIsyHlOmu9+1uD1dCyFabeYHIt5PZ3JET2lkMIoMBsF4Tgxo1ls1jznnNpd/CnChivLOLD6Owd4q7yBN+ipl16aLXYEsv1Dl2bOyN+KwX66wYCR+ZZ4EsGJ13P3q01+ArZSxTWmR+qtNlqSNcVdpLak03Tr/XB8EPPS3iYkEx08tyH9FLcTy1oyxNh/oYE8365jLgT2MPij8G5eOBs9zwd+TKkaZn2A7I2AGfWRkDOz1PfOYCtISbN8qTBuRKOPdQR98ZgB2XU4XgH4wTOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aZHt3tswEd6bhtK9OiHmchZA+E1ciGIGhyKAaYNHG4Q=; b=V8rYQU55WucALZ+s6oS/fUtb46hPULX7V75sxN8Wt+xw4AlMsHKkPEaiSNJkK+7OXPkTug9ZX3c+6KqISCGtuEekvdBanhJUZRxLAB5N0wvOgKC02KlChCFrOenG4XLqEu4SqNqcZp6zfCudB0EPGDGdHcLf/UjExgRYRWjgS+PtJwbmR7f4DjeNmHShUjEHj7zLDqxlsqLYjj2AKjNzr9sLHbAe21H1mKnN1QlOiJdLGD8Wk8lJ0EiLacePui8k/JXPBZW9Q1cI4BP7npTxoUMj/60H7ig6JtRw7zRD4aec/HOn6fLwAFB9kz0WvM+CNRkDm4C70jiywNHd+EB2oA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aZHt3tswEd6bhtK9OiHmchZA+E1ciGIGhyKAaYNHG4Q=; b=UXumtGVjJU4kJvg3fRU2GYfzOcJOumtiexEWo+Ds8oVqpMhCw9zg7NpeIVDjvfZ8Xwoy7eeDBLLpMAwkNajmrzrK6zoxktOlpKFFpvrIjKfsEeHpoqs6IlHFjrJbMXH/rNDWgCNErZXy/9+wd5faNKVcj6vaGBxSbHlVemAIP6M= Received: from DM5PR13MB1851.namprd13.prod.outlook.com (10.171.159.143) by DM5PR13MB1851.namprd13.prod.outlook.com (10.171.159.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.10; Thu, 12 Sep 2019 17:42:19 +0000 Received: from DM5PR13MB1851.namprd13.prod.outlook.com ([fe80::70fd:85c2:8ea9:a0b6]) by DM5PR13MB1851.namprd13.prod.outlook.com ([fe80::70fd:85c2:8ea9:a0b6%9]) with mapi id 15.20.2263.016; Thu, 12 Sep 2019 17:42:19 +0000 From: Trond Myklebust To: "smayhew@redhat.com" CC: "chucklever@gmail.com" , "linux-nfs@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , "anna.schumaker@netapp.com" , "viro@zeniv.linux.org.uk" , "dhowells@redhat.com" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v3 16/26] NFS: Move mount parameterisation bits into their own file Thread-Topic: [PATCH v3 16/26] NFS: Move mount parameterisation bits into their own file Thread-Index: AQHVaLxD0WQZmlB55EWdF273sREgE6cmytQAgAAJ+4CAAXr5gIAAAZIA Date: Thu, 12 Sep 2019 17:42:19 +0000 Message-ID: <687147fb0fcc45b3ea462e166d0491c12bb208bd.camel@hammerspace.com> References: <20190911161621.19832-1-smayhew@redhat.com> <20190911161621.19832-17-smayhew@redhat.com> <014d1a8425545b633b982f63d78665b73bcf0075.camel@hammerspace.com> <20190912173637.GK11980@coeurl.usersys.redhat.com> In-Reply-To: <20190912173637.GK11980@coeurl.usersys.redhat.com> Accept-Language: en-US, en-GB Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=trondmy@hammerspace.com; x-originating-ip: [50.36.167.63] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a646c5d3-9eeb-45b8-f128-08d737a88f50 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:DM5PR13MB1851; x-ms-traffictypediagnostic: DM5PR13MB1851: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2150; x-forefront-prvs: 01583E185C x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(376002)(39830400003)(366004)(136003)(396003)(346002)(189003)(199004)(6436002)(26005)(14454004)(86362001)(316002)(14444005)(256004)(2501003)(66066001)(6916009)(25786009)(2351001)(66476007)(64756008)(66446008)(66946007)(5660300002)(30864003)(478600001)(5640700003)(6486002)(6512007)(4326008)(91956017)(76116006)(53936002)(186003)(99286004)(229853002)(6246003)(118296001)(76176011)(66556008)(53946003)(7736002)(71200400001)(71190400001)(6116002)(446003)(53546011)(54906003)(81166006)(81156014)(36756003)(1730700003)(8936002)(476003)(486006)(11346002)(2906002)(2616005)(3846002)(305945005)(102836004)(8676002)(6506007)(2004002)(559001)(569006);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR13MB1851;H:DM5PR13MB1851.namprd13.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: hammerspace.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: IIocyM/5NvmkzgLEjdErioMzr/Gbrn+Swwny0qfgVzCwZR23m/Sb4nUjBHjNqg/chH1xPlf9/WBRhp2rLsGR+z1O+sn+7S7yk2Tbi6P63fxr3nIGyMcN7T6V+PLrm6rHg3jJwLhoCMEHacrK9UtRBOCpW3qFkWdteubNx9GGyttSgKmjs6zdn1a74docKeW+NGaoTQC4MGpQbYkWk+e7k9ZZ0TABXSB1PG7FVClAfQSH/cVld7Nth1p9O63xl2ZEZUmkIdVV4XMxqoGgHYEkG2b8OcO7ccKK0fKsyX2wnxhmvgw9SYLDZ/LMscWXi1wqvSD1Ztsqi1POVtSMrlzKSyjfToQ8sYAIpev8oZdBxz5duOW6CbAjlpYsgKTgWCXvtS+mV3QqWhkTs57oRTtbVWDgqKZUC8jGSc0g3P8AZts= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <4E819439CB955A419F86D5626E5C04F2@namprd13.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-Network-Message-Id: a646c5d3-9eeb-45b8-f128-08d737a88f50 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Sep 2019 17:42:19.0906 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ifv7yTzfazexVpljKBnW0c9DuWgLnl6NmATYXx84oXjhAS/tWauobe57FO52WO4/d4w3aIV7V18HhKwFYerxJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR13MB1851 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVGh1LCAyMDE5LTA5LTEyIGF0IDEzOjM2IC0wNDAwLCBTY290dCBNYXloZXcgd3JvdGU6DQo+ IE9uIFdlZCwgMTEgU2VwIDIwMTksIFRyb25kIE15a2xlYnVzdCB3cm90ZToNCj4gDQo+ID4gT24g V2VkLCAyMDE5LTA5LTExIGF0IDE0OjI0IC0wNDAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4gPiA+ ID4gT24gU2VwIDExLCAyMDE5LCBhdCAxMjoxNiBQTSwgU2NvdHQgTWF5aGV3IDxzbWF5aGV3QHJl ZGhhdC5jb20+DQo+ID4gPiA+IHdyb3RlOg0KPiA+ID4gPiANCj4gPiA+ID4gRnJvbTogRGF2aWQg SG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4NCj4gPiA+ID4gDQo+ID4gPiA+IFNwbGl0IHZh cmlvdXMgYml0cyByZWxhdGluZyB0byBtb3VudCBwYXJhbWV0ZXJpc2F0aW9uIG91dCBmcm9tDQo+ ID4gPiA+IGZzL25mcy9zdXBlci5jIGludG8gdGhlaXIgb3duIGZpbGUgdG8gZm9ybSB0aGUgYmFz aXMgb2YNCj4gPiA+ID4gZmlsZXN5c3RlbQ0KPiA+ID4gPiBjb250ZXh0DQo+ID4gPiA+IGhhbmRs aW5nIGZvciBORlMuDQo+ID4gPiA+IA0KPiA+ID4gPiBObyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRl IHRvIHRoZSBjb2RlIGJleW9uZCByZW1vdmluZyAnc3RhdGljJw0KPiA+ID4gPiBxdWFsaWZpZXJz Lg0KPiA+ID4gPiANCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogRGF2aWQgSG93ZWxscyA8ZGhvd2Vs bHNAcmVkaGF0LmNvbT4NCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQWwgVmlybyA8dmlyb0B6ZW5p di5saW51eC5vcmcudWs+DQo+ID4gPiA+IC0tLQ0KPiA+ID4gPiBmcy9uZnMvTWFrZWZpbGUgICAg IHwgICAgMiArLQ0KPiA+ID4gPiBmcy9uZnMvZnNfY29udGV4dC5jIHwgMTQxOA0KPiA+ID4gPiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+IGZzL25m cy9pbnRlcm5hbC5oICAgfCAgIDI5ICsNCj4gPiA+ID4gZnMvbmZzL3N1cGVyLmMgICAgICB8IDE0 MTEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiA+IC0tLS0NCj4g PiA+ID4gLS0NCj4gPiA+ID4gNCBmaWxlcyBjaGFuZ2VkLCAxNDQ4IGluc2VydGlvbnMoKyksIDE0 MTIgZGVsZXRpb25zKC0pDQo+ID4gPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBmcy9uZnMvZnNfY29u dGV4dC5jDQo+ID4gPiA+IA0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL01ha2VmaWxlIGIv ZnMvbmZzL01ha2VmaWxlDQo+ID4gPiA+IGluZGV4IDM0Y2RlYWVjY2NmNi4uMjQzM2MzZTAzY2Zh IDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9mcy9uZnMvTWFrZWZpbGUNCj4gPiA+ID4gKysrIGIvZnMv bmZzL01ha2VmaWxlDQo+ID4gPiA+IEBAIC05LDcgKzksNyBAQCBDRkxBR1NfbmZzdHJhY2UubyAr PSAtSSQoc3JjKQ0KPiA+ID4gPiBuZnMteSAJCQk6PSBjbGllbnQubyBkaXIubyBmaWxlLm8gZ2V0 cm9vdC5vDQo+ID4gPiA+IGlub2RlLm8gc3VwZXIubyBcDQo+ID4gPiA+IAkJCSAgIGlvLm8gZGly ZWN0Lm8gcGFnZWxpc3QubyByZWFkLm8NCj4gPiA+ID4gc3ltbGluay5vDQo+ID4gPiA+IHVubGlu ay5vIFwNCj4gPiA+ID4gCQkJICAgd3JpdGUubyBuYW1lc3BhY2UubyBtb3VudF9jbG50Lm8NCj4g PiA+ID4gbmZzdHJhY2Uubw0KPiA+ID4gPiBcDQo+ID4gPiA+IC0JCQkgICBleHBvcnQubyBzeXNm cy5vDQo+ID4gPiA+ICsJCQkgICBleHBvcnQubyBzeXNmcy5vIGZzX2NvbnRleHQubw0KPiA+ID4g PiBuZnMtJChDT05GSUdfUk9PVF9ORlMpCSs9IG5mc3Jvb3Qubw0KPiA+ID4gPiBuZnMtJChDT05G SUdfU1lTQ1RMKQkrPSBzeXNjdGwubw0KPiA+ID4gPiBuZnMtJChDT05GSUdfTkZTX0ZTQ0FDSEUp ICs9IGZzY2FjaGUubyBmc2NhY2hlLWluZGV4Lm8NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2ZzL25m cy9mc19jb250ZXh0LmMgYi9mcy9uZnMvZnNfY29udGV4dC5jDQo+ID4gPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uODJiMzEyYTVjZGRlDQo+ID4g PiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIvZnMvbmZzL2ZzX2NvbnRleHQuYw0KPiA+ ID4gPiBAQCAtMCwwICsxLDE0MTggQEANCj4gPiA+ID4gKy8qIE5GUyBtb3VudCBoYW5kbGluZy4N Cj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggUmVkIEhhdCwgSW5j LiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiA+ID4gPiArICogV3JpdHRlbiBieSBEYXZpZCBIb3dl bGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFNwbGl0 IGZyb20gZnMvbmZzL3N1cGVyLmM6DQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogIENvcHlyaWdo dCAoQykgMTk5MiAgUmljayBTbGFka2V5DQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0DQo+ID4gPiA+ IGFuZC9vcg0KPiA+ID4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2VuY2UNCj4gPiA+ID4gKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCj4gPiA+ID4gdmVyc2lvbg0KPiA+ID4g PiArICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gDQo+ID4gPiBOZXcgc291cmNlIGZpbGVzIHNob3Vs ZCBoYXZlIGFuIFNQRFggdGFnIGluc3RlYWQgb2YgYm9pbGVycGxhdGUuDQo+ID4gPiBJIHN1Z2dl c3Q6DQo+ID4gPiANCj4gPiA+IC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkNCj4gPiA+IA0KPiA+IA0KPiA+IEFncmVlZC4gSXQgaXMgYWxzbyBxdWl0ZSBhIGxvbmcgc3Ry ZXRjaCB0byBjbGFpbSBhdXRob3JzaGlwIG9mIHRoZQ0KPiA+IGVudGlyZSBmaWxlIGFzIGltcGxp ZWQgYWJvdmUuIEdpdmVuIHRoYXQgdGhpcyBpcyBtb3N0bHkgYSBjb3B5LQ0KPiA+IHBhc3RlDQo+ ID4gZWZmb3J0LCB0aGVuIG1vc3Qgb2YgdGhlIGFjdHVhbCBjb3B5cmlnaHRzIGJlbG9uZyB0byB0 aGUgcGVvcGxlDQo+ID4gd2hvJ3ZlDQo+ID4gY29udHJpYnV0ZWQgdG8gc3VwZXIuYyAoYW5kIHRv IGlub2RlLmMgYmVmb3JlIGl0KS4gRGF2aWQgaXMgb25lIG9mDQo+ID4gdGhvc2UgYXV0aG9ycywg YnV0IGhlIGlzIG9uZSBvZiBtYW55Lg0KPiANCj4gT2theSwgaG93IGFib3V0Og0KPiANCj4gLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiAvKg0KPiAgKiBsaW51eC9m cy9uZnMvZnNfY29udGV4dC5jDQo+ICAqDQo+ICAqIENvcHlyaWdodCAoQykgMTk5MiBSaWNrIFNs YWRrZXkNCj4gICoNCj4gICogTkZTIG1vdW50IGhhbmRsaW5nLg0KPiAgKg0KPiAgKiBTcGxpdCBm cm9tIGZzL25mcy9zdXBlci5jIGJ5IERhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+ DQo+ICAqLw0KPiANCj4gYW5kIGhhdmUgcGF0Y2ggMjUvMjYgYWRkIGEgbGluZQ0KPiANCj4gICog Q29udmVyc2lvbiB0byBuZXcgbW91bnQgYXBpIENvcHlyaWdodCAoQykgRGF2aWQgSG93ZWxscw0K DQpUaGF0IGxvb2tzIG1vcmUgcmVhc29uYWJsZSB0byBtZS4NCg0KPiANCj4gLVNjb3R0DQo+ID4g DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8 bGludXgvbmZzX2ZzLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbmZzX21vdW50Lmg+DQo+ ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbmZzNF9tb3VudC5oPg0KPiA+ID4gPiArI2luY2x1ZGUg Im5mcy5oIg0KPiA+ID4gPiArI2luY2x1ZGUgImludGVybmFsLmgiDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfTU9VTlQNCj4gPiA+ID4gKw0KPiA+ ID4gPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX05GU19WMykNCj4gPiA+ID4gKyNkZWZpbmUgTkZT X0RFRkFVTFRfVkVSU0lPTiAzDQo+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiArI2RlZmluZSBORlNf REVGQVVMVF9WRVJTSU9OIDINCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiArDQo+ID4gPiA+ICsj ZGVmaW5lIE5GU19NQVhfQ09OTkVDVElPTlMgMTYNCj4gPiA+ID4gKw0KPiA+ID4gPiArZW51bSB7 DQo+ID4gPiA+ICsJLyogTW91bnQgb3B0aW9ucyB0aGF0IHRha2Ugbm8gYXJndW1lbnRzICovDQo+ ID4gPiA+ICsJT3B0X3NvZnQsIE9wdF9zb2Z0ZXJyLCBPcHRfaGFyZCwNCj4gPiA+ID4gKwlPcHRf cG9zaXgsIE9wdF9ub3Bvc2l4LA0KPiA+ID4gPiArCU9wdF9jdG8sIE9wdF9ub2N0bywNCj4gPiA+ ID4gKwlPcHRfYWMsIE9wdF9ub2FjLA0KPiA+ID4gPiArCU9wdF9sb2NrLCBPcHRfbm9sb2NrLA0K PiA+ID4gPiArCU9wdF91ZHAsIE9wdF90Y3AsIE9wdF9yZG1hLA0KPiA+ID4gPiArCU9wdF9hY2ws IE9wdF9ub2FjbCwNCj4gPiA+ID4gKwlPcHRfcmRpcnBsdXMsIE9wdF9ub3JkaXJwbHVzLA0KPiA+ ID4gPiArCU9wdF9zaGFyZWNhY2hlLCBPcHRfbm9zaGFyZWNhY2hlLA0KPiA+ID4gPiArCU9wdF9y ZXN2cG9ydCwgT3B0X25vcmVzdnBvcnQsDQo+ID4gPiA+ICsJT3B0X2ZzY2FjaGUsIE9wdF9ub2Zz Y2FjaGUsDQo+ID4gPiA+ICsJT3B0X21pZ3JhdGlvbiwgT3B0X25vbWlncmF0aW9uLA0KPiA+ID4g PiArDQo+ID4gPiA+ICsJLyogTW91bnQgb3B0aW9ucyB0aGF0IHRha2UgaW50ZWdlciBhcmd1bWVu dHMgKi8NCj4gPiA+ID4gKwlPcHRfcG9ydCwNCj4gPiA+ID4gKwlPcHRfcnNpemUsIE9wdF93c2l6 ZSwgT3B0X2JzaXplLA0KPiA+ID4gPiArCU9wdF90aW1lbywgT3B0X3JldHJhbnMsDQo+ID4gPiA+ ICsJT3B0X2FjcmVnbWluLCBPcHRfYWNyZWdtYXgsDQo+ID4gPiA+ICsJT3B0X2FjZGlybWluLCBP cHRfYWNkaXJtYXgsDQo+ID4gPiA+ICsJT3B0X2FjdGltZW8sDQo+ID4gPiA+ICsJT3B0X25hbWVs ZW4sDQo+ID4gPiA+ICsJT3B0X21vdW50cG9ydCwNCj4gPiA+ID4gKwlPcHRfbW91bnR2ZXJzLA0K PiA+ID4gPiArCU9wdF9taW5vcnZlcnNpb24sDQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBNb3Vu dCBvcHRpb25zIHRoYXQgdGFrZSBzdHJpbmcgYXJndW1lbnRzICovDQo+ID4gPiA+ICsJT3B0X25m c3ZlcnMsDQo+ID4gPiA+ICsJT3B0X3NlYywgT3B0X3Byb3RvLCBPcHRfbW91bnRwcm90bywgT3B0 X21vdW50aG9zdCwNCj4gPiA+ID4gKwlPcHRfYWRkciwgT3B0X21vdW50YWRkciwgT3B0X2NsaWVu dGFkZHIsDQo+ID4gPiA+ICsJT3B0X25jb25uZWN0LA0KPiA+ID4gPiArCU9wdF9sb29rdXBjYWNo ZSwNCj4gPiA+ID4gKwlPcHRfZnNjYWNoZV91bmlxLA0KPiA+ID4gPiArCU9wdF9sb2NhbF9sb2Nr LA0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogU3BlY2lhbCBtb3VudCBvcHRpb25zICovDQo+ID4g PiA+ICsJT3B0X3VzZXJzcGFjZSwgT3B0X2RlcHJlY2F0ZWQsIE9wdF9zbG9wcHksDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwlPcHRfZXJyDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtz dGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBuZnNfbW91bnRfb3B0aW9uX3Rva2VucyA9IHsNCj4g PiA+ID4gKwl7IE9wdF91c2Vyc3BhY2UsICJiZyIgfSwNCj4gPiA+ID4gKwl7IE9wdF91c2Vyc3Bh Y2UsICJmZyIgfSwNCj4gPiA+ID4gKwl7IE9wdF91c2Vyc3BhY2UsICJyZXRyeT0lcyIgfSwNCj4g PiA+ID4gKw0KPiA+ID4gPiArCXsgT3B0X3Nsb3BweSwgInNsb3BweSIgfSwNCj4gPiA+ID4gKw0K PiA+ID4gPiArCXsgT3B0X3NvZnQsICJzb2Z0IiB9LA0KPiA+ID4gPiArCXsgT3B0X3NvZnRlcnIs ICJzb2Z0ZXJyIiB9LA0KPiA+ID4gPiArCXsgT3B0X2hhcmQsICJoYXJkIiB9LA0KPiA+ID4gPiAr CXsgT3B0X2RlcHJlY2F0ZWQsICJpbnRyIiB9LA0KPiA+ID4gPiArCXsgT3B0X2RlcHJlY2F0ZWQs ICJub2ludHIiIH0sDQo+ID4gPiA+ICsJeyBPcHRfcG9zaXgsICJwb3NpeCIgfSwNCj4gPiA+ID4g Kwl7IE9wdF9ub3Bvc2l4LCAibm9wb3NpeCIgfSwNCj4gPiA+ID4gKwl7IE9wdF9jdG8sICJjdG8i IH0sDQo+ID4gPiA+ICsJeyBPcHRfbm9jdG8sICJub2N0byIgfSwNCj4gPiA+ID4gKwl7IE9wdF9h YywgImFjIiB9LA0KPiA+ID4gPiArCXsgT3B0X25vYWMsICJub2FjIiB9LA0KPiA+ID4gPiArCXsg T3B0X2xvY2ssICJsb2NrIiB9LA0KPiA+ID4gPiArCXsgT3B0X25vbG9jaywgIm5vbG9jayIgfSwN Cj4gPiA+ID4gKwl7IE9wdF91ZHAsICJ1ZHAiIH0sDQo+ID4gPiA+ICsJeyBPcHRfdGNwLCAidGNw IiB9LA0KPiA+ID4gPiArCXsgT3B0X3JkbWEsICJyZG1hIiB9LA0KPiA+ID4gPiArCXsgT3B0X2Fj bCwgImFjbCIgfSwNCj4gPiA+ID4gKwl7IE9wdF9ub2FjbCwgIm5vYWNsIiB9LA0KPiA+ID4gPiAr CXsgT3B0X3JkaXJwbHVzLCAicmRpcnBsdXMiIH0sDQo+ID4gPiA+ICsJeyBPcHRfbm9yZGlycGx1 cywgIm5vcmRpcnBsdXMiIH0sDQo+ID4gPiA+ICsJeyBPcHRfc2hhcmVjYWNoZSwgInNoYXJlY2Fj aGUiIH0sDQo+ID4gPiA+ICsJeyBPcHRfbm9zaGFyZWNhY2hlLCAibm9zaGFyZWNhY2hlIiB9LA0K PiA+ID4gPiArCXsgT3B0X3Jlc3Zwb3J0LCAicmVzdnBvcnQiIH0sDQo+ID4gPiA+ICsJeyBPcHRf bm9yZXN2cG9ydCwgIm5vcmVzdnBvcnQiIH0sDQo+ID4gPiA+ICsJeyBPcHRfZnNjYWNoZSwgImZz YyIgfSwNCj4gPiA+ID4gKwl7IE9wdF9ub2ZzY2FjaGUsICJub2ZzYyIgfSwNCj4gPiA+ID4gKwl7 IE9wdF9taWdyYXRpb24sICJtaWdyYXRpb24iIH0sDQo+ID4gPiA+ICsJeyBPcHRfbm9taWdyYXRp b24sICJub21pZ3JhdGlvbiIgfSwNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXsgT3B0X3BvcnQsICJw b3J0PSVzIiB9LA0KPiA+ID4gPiArCXsgT3B0X3JzaXplLCAicnNpemU9JXMiIH0sDQo+ID4gPiA+ ICsJeyBPcHRfd3NpemUsICJ3c2l6ZT0lcyIgfSwNCj4gPiA+ID4gKwl7IE9wdF9ic2l6ZSwgImJz aXplPSVzIiB9LA0KPiA+ID4gPiArCXsgT3B0X3RpbWVvLCAidGltZW89JXMiIH0sDQo+ID4gPiA+ ICsJeyBPcHRfcmV0cmFucywgInJldHJhbnM9JXMiIH0sDQo+ID4gPiA+ICsJeyBPcHRfYWNyZWdt aW4sICJhY3JlZ21pbj0lcyIgfSwNCj4gPiA+ID4gKwl7IE9wdF9hY3JlZ21heCwgImFjcmVnbWF4 PSVzIiB9LA0KPiA+ID4gPiArCXsgT3B0X2FjZGlybWluLCAiYWNkaXJtaW49JXMiIH0sDQo+ID4g PiA+ICsJeyBPcHRfYWNkaXJtYXgsICJhY2Rpcm1heD0lcyIgfSwNCj4gPiA+ID4gKwl7IE9wdF9h Y3RpbWVvLCAiYWN0aW1lbz0lcyIgfSwNCj4gPiA+ID4gKwl7IE9wdF9uYW1lbGVuLCAibmFtbGVu PSVzIiB9LA0KPiA+ID4gPiArCXsgT3B0X21vdW50cG9ydCwgIm1vdW50cG9ydD0lcyIgfSwNCj4g PiA+ID4gKwl7IE9wdF9tb3VudHZlcnMsICJtb3VudHZlcnM9JXMiIH0sDQo+ID4gPiA+ICsJeyBP cHRfbWlub3J2ZXJzaW9uLCAibWlub3J2ZXJzaW9uPSVzIiB9LA0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJeyBPcHRfbmZzdmVycywgIm5mc3ZlcnM9JXMiIH0sDQo+ID4gPiA+ICsJeyBPcHRfbmZzdmVy cywgInZlcnM9JXMiIH0sDQo+ID4gPiA+ICsNCj4gPiA+ID4gKwl7IE9wdF9zZWMsICJzZWM9JXMi IH0sDQo+ID4gPiA+ICsJeyBPcHRfcHJvdG8sICJwcm90bz0lcyIgfSwNCj4gPiA+ID4gKwl7IE9w dF9tb3VudHByb3RvLCAibW91bnRwcm90bz0lcyIgfSwNCj4gPiA+ID4gKwl7IE9wdF9hZGRyLCAi YWRkcj0lcyIgfSwNCj4gPiA+ID4gKwl7IE9wdF9jbGllbnRhZGRyLCAiY2xpZW50YWRkcj0lcyIg fSwNCj4gPiA+ID4gKwl7IE9wdF9tb3VudGhvc3QsICJtb3VudGhvc3Q9JXMiIH0sDQo+ID4gPiA+ ICsJeyBPcHRfbW91bnRhZGRyLCAibW91bnRhZGRyPSVzIiB9LA0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJeyBPcHRfbmNvbm5lY3QsICJuY29ubmVjdD0lcyIgfSwNCj4gPiA+ID4gKw0KPiA+ID4gPiAr CXsgT3B0X2xvb2t1cGNhY2hlLCAibG9va3VwY2FjaGU9JXMiIH0sDQo+ID4gPiA+ICsJeyBPcHRf ZnNjYWNoZV91bmlxLCAiZnNjPSVzIiB9LA0KPiA+ID4gPiArCXsgT3B0X2xvY2FsX2xvY2ssICJs b2NhbF9sb2NrPSVzIiB9LA0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogVGhlIGZvbGxvd2luZyBu ZWVkcyB0byBiZSBsaXN0ZWQgYWZ0ZXIgYWxsIG90aGVyDQo+ID4gPiA+IG9wdGlvbnMgKi8NCj4g PiA+ID4gKwl7IE9wdF9uZnN2ZXJzLCAidiVzIiB9LA0KPiA+ID4gPiArDQo+ID4gPiA+ICsJeyBP cHRfZXJyLCBOVUxMIH0NCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2VudW0gew0K PiA+ID4gPiArCU9wdF94cHJ0X3VkcCwgT3B0X3hwcnRfdWRwNiwgT3B0X3hwcnRfdGNwLA0KPiA+ ID4gPiBPcHRfeHBydF90Y3A2LA0KPiA+ID4gPiBPcHRfeHBydF9yZG1hLA0KPiA+ID4gPiArCU9w dF94cHJ0X3JkbWE2LA0KPiA+ID4gPiArDQo+ID4gPiA+ICsJT3B0X3hwcnRfZXJyDQo+ID4gPiA+ ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBuZnNf eHBydF9wcm90b2NvbF90b2tlbnMgPSB7DQo+ID4gPiA+ICsJeyBPcHRfeHBydF91ZHAsICJ1ZHAi IH0sDQo+ID4gPiA+ICsJeyBPcHRfeHBydF91ZHA2LCAidWRwNiIgfSwNCj4gPiA+ID4gKwl7IE9w dF94cHJ0X3RjcCwgInRjcCIgfSwNCj4gPiA+ID4gKwl7IE9wdF94cHJ0X3RjcDYsICJ0Y3A2IiB9 LA0KPiA+ID4gPiArCXsgT3B0X3hwcnRfcmRtYSwgInJkbWEiIH0sDQo+ID4gPiA+ICsJeyBPcHRf eHBydF9yZG1hNiwgInJkbWE2IiB9LA0KPiA+ID4gPiArDQo+ID4gPiA+ICsJeyBPcHRfeHBydF9l cnIsIE5VTEwgfQ0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArZW51bSB7DQo+ID4g PiA+ICsJT3B0X3NlY19ub25lLCBPcHRfc2VjX3N5cywNCj4gPiA+ID4gKwlPcHRfc2VjX2tyYjUs IE9wdF9zZWNfa3JiNWksIE9wdF9zZWNfa3JiNXAsDQo+ID4gPiA+ICsJT3B0X3NlY19sa2V5LCBP cHRfc2VjX2xrZXlpLCBPcHRfc2VjX2xrZXlwLA0KPiA+ID4gPiArCU9wdF9zZWNfc3BrbSwgT3B0 X3NlY19zcGttaSwgT3B0X3NlY19zcGttcCwNCj4gPiA+ID4gKw0KPiA+ID4gPiArCU9wdF9zZWNf ZXJyDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgY29uc3QgbWF0Y2hf dGFibGVfdCBuZnNfc2VjZmxhdm9yX3Rva2VucyA9IHsNCj4gPiA+ID4gKwl7IE9wdF9zZWNfbm9u ZSwgIm5vbmUiIH0sDQo+ID4gPiA+ICsJeyBPcHRfc2VjX25vbmUsICJudWxsIiB9LA0KPiA+ID4g PiArCXsgT3B0X3NlY19zeXMsICJzeXMiIH0sDQo+ID4gPiA+ICsNCj4gPiA+ID4gKwl7IE9wdF9z ZWNfa3JiNSwgImtyYjUiIH0sDQo+ID4gPiA+ICsJeyBPcHRfc2VjX2tyYjVpLCAia3JiNWkiIH0s DQo+ID4gPiA+ICsJeyBPcHRfc2VjX2tyYjVwLCAia3JiNXAiIH0sDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwl7IE9wdF9zZWNfbGtleSwgImxrZXkiIH0sDQo+ID4gPiA+ICsJeyBPcHRfc2VjX2xrZXlp LCAibGtleWkiIH0sDQo+ID4gPiA+ICsJeyBPcHRfc2VjX2xrZXlwLCAibGtleXAiIH0sDQo+ID4g PiA+ICsNCj4gPiA+ID4gKwl7IE9wdF9zZWNfc3BrbSwgInNwa20zIiB9LA0KPiA+ID4gPiArCXsg T3B0X3NlY19zcGttaSwgInNwa20zaSIgfSwNCj4gPiA+ID4gKwl7IE9wdF9zZWNfc3BrbXAsICJz cGttM3AiIH0sDQo+ID4gPiA+ICsNCj4gPiA+ID4gKwl7IE9wdF9zZWNfZXJyLCBOVUxMIH0NCj4g PiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2VudW0gew0KPiA+ID4gPiArCU9wdF9sb29r dXBjYWNoZV9hbGwsIE9wdF9sb29rdXBjYWNoZV9wb3NpdGl2ZSwNCj4gPiA+ID4gKwlPcHRfbG9v a3VwY2FjaGVfbm9uZSwNCj4gPiA+ID4gKw0KPiA+ID4gPiArCU9wdF9sb29rdXBjYWNoZV9lcnIN Cj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBtYXRjaF90YWJsZV90IG5m c19sb29rdXBjYWNoZV90b2tlbnMgPSB7DQo+ID4gPiA+ICsJeyBPcHRfbG9va3VwY2FjaGVfYWxs LCAiYWxsIiB9LA0KPiA+ID4gPiArCXsgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLCAicG9zIiB9 LA0KPiA+ID4gPiArCXsgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLCAicG9zaXRpdmUiIH0sDQo+ ID4gPiA+ICsJeyBPcHRfbG9va3VwY2FjaGVfbm9uZSwgIm5vbmUiIH0sDQo+ID4gPiA+ICsNCj4g PiA+ID4gKwl7IE9wdF9sb29rdXBjYWNoZV9lcnIsIE5VTEwgfQ0KPiA+ID4gPiArfTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArZW51bSB7DQo+ID4gPiA+ICsJT3B0X2xvY2FsX2xvY2tfYWxsLCBPcHRf bG9jYWxfbG9ja19mbG9jaywNCj4gPiA+ID4gT3B0X2xvY2FsX2xvY2tfcG9zaXgsDQo+ID4gPiA+ ICsJT3B0X2xvY2FsX2xvY2tfbm9uZSwNCj4gPiA+ID4gKw0KPiA+ID4gPiArCU9wdF9sb2NhbF9s b2NrX2Vycg0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIG1hdGNoX3Rh YmxlX3QgbmZzX2xvY2FsX2xvY2tfdG9rZW5zID0gew0KPiA+ID4gPiArCXsgT3B0X2xvY2FsX2xv Y2tfYWxsLCAiYWxsIiB9LA0KPiA+ID4gPiArCXsgT3B0X2xvY2FsX2xvY2tfZmxvY2ssICJmbG9j ayIgfSwNCj4gPiA+ID4gKwl7IE9wdF9sb2NhbF9sb2NrX3Bvc2l4LCAicG9zaXgiIH0sDQo+ID4g PiA+ICsJeyBPcHRfbG9jYWxfbG9ja19ub25lLCAibm9uZSIgfSwNCj4gPiA+ID4gKw0KPiA+ID4g PiArCXsgT3B0X2xvY2FsX2xvY2tfZXJyLCBOVUxMIH0NCj4gPiA+ID4gK307DQo+ID4gPiA+ICsN Cj4gPiA+ID4gK2VudW0gew0KPiA+ID4gPiArCU9wdF92ZXJzXzIsIE9wdF92ZXJzXzMsIE9wdF92 ZXJzXzQsIE9wdF92ZXJzXzRfMCwNCj4gPiA+ID4gKwlPcHRfdmVyc180XzEsIE9wdF92ZXJzXzRf MiwNCj4gPiA+ID4gKw0KPiA+ID4gPiArCU9wdF92ZXJzX2Vycg0KPiA+ID4gPiArfTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArc3RhdGljIG1hdGNoX3RhYmxlX3QgbmZzX3ZlcnNfdG9rZW5zID0gew0K PiA+ID4gPiArCXsgT3B0X3ZlcnNfMiwgIjIiIH0sDQo+ID4gPiA+ICsJeyBPcHRfdmVyc18zLCAi MyIgfSwNCj4gPiA+ID4gKwl7IE9wdF92ZXJzXzQsICI0IiB9LA0KPiA+ID4gPiArCXsgT3B0X3Zl cnNfNF8wLCAiNC4wIiB9LA0KPiA+ID4gPiArCXsgT3B0X3ZlcnNfNF8xLCAiNC4xIiB9LA0KPiA+ ID4gPiArCXsgT3B0X3ZlcnNfNF8yLCAiNC4yIiB9LA0KPiA+ID4gPiArDQo+ID4gPiA+ICsJeyBP cHRfdmVyc19lcnIsIE5VTEwgfQ0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3Ry dWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YQ0KPiA+ID4gPiAqbmZzX2FsbG9jX3BhcnNlZF9tb3Vu dF9kYXRhKHZvaWQpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc3RydWN0IG5mc19wYXJzZWRfbW91 bnRfZGF0YSAqZGF0YTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWRhdGEgPSBremFsbG9jKHNpemVv ZigqZGF0YSksIEdGUF9LRVJORUwpOw0KPiA+ID4gPiArCWlmIChkYXRhKSB7DQo+ID4gPiA+ICsJ CWRhdGEtPnRpbWVvCQk9IE5GU19VTlNQRUNfVElNRU87DQo+ID4gPiA+ICsJCWRhdGEtPnJldHJh bnMJCT0gTkZTX1VOU1BFQ19SRVRSQU5TOw0KPiA+ID4gPiArCQlkYXRhLT5hY3JlZ21pbgkJPSBO RlNfREVGX0FDUkVHTUlOOw0KPiA+ID4gPiArCQlkYXRhLT5hY3JlZ21heAkJPSBORlNfREVGX0FD UkVHTUFYOw0KPiA+ID4gPiArCQlkYXRhLT5hY2Rpcm1pbgkJPSBORlNfREVGX0FDRElSTUlOOw0K PiA+ID4gPiArCQlkYXRhLT5hY2Rpcm1heAkJPSBORlNfREVGX0FDRElSTUFYOw0KPiA+ID4gPiAr CQlkYXRhLT5tb3VudF9zZXJ2ZXIucG9ydAk9IE5GU19VTlNQRUNfUE9SVDsNCj4gPiA+ID4gKwkJ ZGF0YS0+bmZzX3NlcnZlci5wb3J0CT0gTkZTX1VOU1BFQ19QT1JUOw0KPiA+ID4gPiArCQlkYXRh LT5uZnNfc2VydmVyLnByb3RvY29sID0gWFBSVF9UUkFOU1BPUlRfVENQOw0KPiA+ID4gPiArCQlk YXRhLT5zZWxlY3RlZF9mbGF2b3IJPSBSUENfQVVUSF9NQVhGTEFWT1I7DQo+ID4gPiA+ICsJCWRh dGEtPm1pbm9ydmVyc2lvbgk9IDA7DQo+ID4gPiA+ICsJCWRhdGEtPm5lZWRfbW91bnQJPSB0cnVl Ow0KPiA+ID4gPiArCQlkYXRhLT5uZXQJCT0gY3VycmVudC0+bnNwcm94eS0NCj4gPiA+ID4gPm5l dF9uczsNCj4gPiA+ID4gKwkJZGF0YS0+bHNtX29wdHMJCT0gTlVMTDsNCj4gPiA+ID4gKwl9DQo+ ID4gPiA+ICsJcmV0dXJuIGRhdGE7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3Zv aWQgbmZzX2ZyZWVfcGFyc2VkX21vdW50X2RhdGEoc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0 YQ0KPiA+ID4gPiAqZGF0YSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlpZiAoZGF0YSkgew0KPiA+ ID4gPiArCQlrZnJlZShkYXRhLT5jbGllbnRfYWRkcmVzcyk7DQo+ID4gPiA+ICsJCWtmcmVlKGRh dGEtPm1vdW50X3NlcnZlci5ob3N0bmFtZSk7DQo+ID4gPiA+ICsJCWtmcmVlKGRhdGEtPm5mc19z ZXJ2ZXIuZXhwb3J0X3BhdGgpOw0KPiA+ID4gPiArCQlrZnJlZShkYXRhLT5uZnNfc2VydmVyLmhv c3RuYW1lKTsNCj4gPiA+ID4gKwkJa2ZyZWUoZGF0YS0+ZnNjYWNoZV91bmlxKTsNCj4gPiA+ID4g KwkJc2VjdXJpdHlfZnJlZV9tbnRfb3B0cygmZGF0YS0+bHNtX29wdHMpOw0KPiA+ID4gPiArCQlr ZnJlZShkYXRhKTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4g Ky8qDQo+ID4gPiA+ICsgKiBTYW5pdHktY2hlY2sgYSBzZXJ2ZXIgYWRkcmVzcyBwcm92aWRlZCBi eSB0aGUgbW91bnQNCj4gPiA+ID4gY29tbWFuZC4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBB ZGRyZXNzIGZhbWlseSBtdXN0IGJlIGluaXRpYWxpemVkLCBhbmQgYWRkcmVzcyBtdXN0IG5vdCBi ZQ0KPiA+ID4gPiArICogdGhlIEFOWSBhZGRyZXNzIGZvciB0aGF0IGZhbWlseS4NCj4gPiA+ID4g KyAqLw0KPiA+ID4gPiArc3RhdGljIGludCBuZnNfdmVyaWZ5X3NlcnZlcl9hZGRyZXNzKHN0cnVj dCBzb2NrYWRkciAqYWRkcikNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzd2l0Y2ggKGFkZHItPnNh X2ZhbWlseSkgew0KPiA+ID4gPiArCWNhc2UgQUZfSU5FVDogew0KPiA+ID4gPiArCQlzdHJ1Y3Qg c29ja2FkZHJfaW4gKnNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbg0KPiA+ID4gPiAqKWFkZHI7DQo+ ID4gPiA+ICsJCXJldHVybiBzYS0+c2luX2FkZHIuc19hZGRyICE9DQo+ID4gPiA+IGh0b25sKElO QUREUl9BTlkpOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKwljYXNlIEFGX0lORVQ2OiB7DQo+ID4g PiA+ICsJCXN0cnVjdCBpbjZfYWRkciAqc2EgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42DQo+ID4g PiA+ICopYWRkciktDQo+ID4gPiA+ID4gc2luNl9hZGRyOw0KPiA+ID4gPiArCQlyZXR1cm4gIWlw djZfYWRkcl9hbnkoc2EpOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwlkZnByaW50ayhNT1VOVCwgIk5GUzogSW52YWxpZCBJUCBhZGRyZXNzIHNwZWNpZmll ZFxuIik7DQo+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKy8qDQo+ID4gPiA+ICsgKiBTYW5pdHkgY2hlY2sgdGhlIE5GUyB0cmFuc3BvcnQgcHJvdG9j b2wuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgdm9pZCBuZnNf dmFsaWRhdGVfdHJhbnNwb3J0X3Byb3RvY29sKHN0cnVjdA0KPiA+ID4gPiBuZnNfcGFyc2VkX21v dW50X2RhdGEgKm1udCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzd2l0Y2ggKG1udC0+bmZzX3Nl cnZlci5wcm90b2NvbCkgew0KPiA+ID4gPiArCWNhc2UgWFBSVF9UUkFOU1BPUlRfVURQOg0KPiA+ ID4gPiArCWNhc2UgWFBSVF9UUkFOU1BPUlRfVENQOg0KPiA+ID4gPiArCWNhc2UgWFBSVF9UUkFO U1BPUlRfUkRNQToNCj4gPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ ID4gKwkJbW50LT5uZnNfc2VydmVyLnByb3RvY29sID0gWFBSVF9UUkFOU1BPUlRfVENQOw0KPiA+ ID4gPiArCX0NCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAq IEZvciB0ZXh0IGJhc2VkIE5GU3YyL3YzIG1vdW50cywgdGhlIG1vdW50IHByb3RvY29sDQo+ID4g PiA+IHRyYW5zcG9ydA0KPiA+ID4gPiBkZWZhdWx0DQo+ID4gPiA+ICsgKiBzZXR0aW5ncyBzaG91 bGQgZGVwZW5kIHVwb24gdGhlIHNwZWNpZmllZCBORlMgdHJhbnNwb3J0Lg0KPiA+ID4gPiArICov DQo+ID4gPiA+ICtzdGF0aWMgdm9pZCBuZnNfc2V0X21vdW50X3RyYW5zcG9ydF9wcm90b2NvbChz dHJ1Y3QNCj4gPiA+ID4gbmZzX3BhcnNlZF9tb3VudF9kYXRhICptbnQpDQo+ID4gPiA+ICt7DQo+ ID4gPiA+ICsJbmZzX3ZhbGlkYXRlX3RyYW5zcG9ydF9wcm90b2NvbChtbnQpOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsJaWYgKG1udC0+bW91bnRfc2VydmVyLnByb3RvY29sID09IFhQUlRfVFJBTlNQ T1JUX1VEUCB8fA0KPiA+ID4gPiArCSAgICBtbnQtPm1vdW50X3NlcnZlci5wcm90b2NvbCA9PSBY UFJUX1RSQU5TUE9SVF9UQ1ApDQo+ID4gPiA+ICsJCQlyZXR1cm47DQo+ID4gPiA+ICsJc3dpdGNo IChtbnQtPm5mc19zZXJ2ZXIucHJvdG9jb2wpIHsNCj4gPiA+ID4gKwljYXNlIFhQUlRfVFJBTlNQ T1JUX1VEUDoNCj4gPiA+ID4gKwkJbW50LT5tb3VudF9zZXJ2ZXIucHJvdG9jb2wgPQ0KPiA+ID4g PiBYUFJUX1RSQU5TUE9SVF9VRFA7DQo+ID4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gPiArCWNhc2Ug WFBSVF9UUkFOU1BPUlRfVENQOg0KPiA+ID4gPiArCWNhc2UgWFBSVF9UUkFOU1BPUlRfUkRNQToN Cj4gPiA+ID4gKwkJbW50LT5tb3VudF9zZXJ2ZXIucHJvdG9jb2wgPQ0KPiA+ID4gPiBYUFJUX1RS QU5TUE9SVF9UQ1A7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsvKg0KPiA+ID4gPiArICogQWRkICdmbGF2b3InIHRvICdhdXRoX2luZm8nIGlmIG5vdCBhbHJl YWR5IHByZXNlbnQuDQo+ID4gPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgJ2ZsYXZvcicgZW5kcyB1 cCBpbiB0aGUgbGlzdCwgZmFsc2UNCj4gPiA+ID4gb3RoZXJ3aXNlDQo+ID4gPiA+ICsgKi8NCj4g PiA+ID4gK3N0YXRpYyBib29sIG5mc19hdXRoX2luZm9fYWRkKHN0cnVjdCBuZnNfYXV0aF9pbmZv ICphdXRoX2luZm8sDQo+ID4gPiA+ICsJCQkgICAgICBycGNfYXV0aGZsYXZvcl90IGZsYXZvcikN Cj4gPiA+ID4gK3sNCj4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gKwl1bnNpZ25l ZCBpbnQgbWF4X2ZsYXZvcl9sZW4gPSBBUlJBWV9TSVpFKGF1dGhfaW5mby0NCj4gPiA+ID4gPmZs YXZvcnMpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogbWFrZSBzdXJlIHRoaXMgZmxhdm9yIGlz bid0IGFscmVhZHkgaW4gdGhlIGxpc3QgKi8NCj4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgYXV0 aF9pbmZvLT5mbGF2b3JfbGVuOyBpKyspIHsNCj4gPiA+ID4gKwkJaWYgKGZsYXZvciA9PSBhdXRo X2luZm8tPmZsYXZvcnNbaV0pDQo+ID4gPiA+ICsJCQlyZXR1cm4gdHJ1ZTsNCj4gPiA+ID4gKwl9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoYXV0aF9pbmZvLT5mbGF2b3JfbGVuICsgMSA+PSBt YXhfZmxhdm9yX2xlbikgew0KPiA+ID4gPiArCQlkZnByaW50ayhNT1VOVCwgIk5GUzogdG9vIG1h bnkgc2VjPQ0KPiA+ID4gPiBmbGF2b3JzXG4iKTsNCj4gPiA+ID4gKwkJcmV0dXJuIGZhbHNlOw0K PiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCWF1dGhfaW5mby0+Zmxhdm9yc1thdXRo X2luZm8tPmZsYXZvcl9sZW4rK10gPSBmbGF2b3I7DQo+ID4gPiA+ICsJcmV0dXJuIHRydWU7DQo+ ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qDQo+ID4gPiA+ICsgKiBQYXJzZSB0aGUg dmFsdWUgb2YgdGhlICdzZWM9JyBvcHRpb24uDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRp YyBpbnQgbmZzX3BhcnNlX3NlY3VyaXR5X2ZsYXZvcnMoY2hhciAqdmFsdWUsDQo+ID4gPiA+ICsJ CQkJICAgICAgc3RydWN0DQo+ID4gPiA+IG5mc19wYXJzZWRfbW91bnRfZGF0YQ0KPiA+ID4gPiAq bW50KQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdT XTsNCj4gPiA+ID4gKwlycGNfYXV0aGZsYXZvcl90IHBzZXVkb2ZsYXZvcjsNCj4gPiA+ID4gKwlj aGFyICpwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJZGZwcmludGsoTU9VTlQsICJORlM6IHBhcnNp bmcgc2VjPSVzIG9wdGlvblxuIiwgdmFsdWUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJd2hpbGUg KChwID0gc3Ryc2VwKCZ2YWx1ZSwgIjoiKSkgIT0gTlVMTCkgew0KPiA+ID4gPiArCQlzd2l0Y2gg KG1hdGNoX3Rva2VuKHAsIG5mc19zZWNmbGF2b3JfdG9rZW5zLA0KPiA+ID4gPiBhcmdzKSkgew0K PiA+ID4gPiArCQljYXNlIE9wdF9zZWNfbm9uZToNCj4gPiA+ID4gKwkJCXBzZXVkb2ZsYXZvciA9 IFJQQ19BVVRIX05VTEw7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRf c2VjX3N5czoNCj4gPiA+ID4gKwkJCXBzZXVkb2ZsYXZvciA9IFJQQ19BVVRIX1VOSVg7DQo+ID4g PiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfc2VjX2tyYjU6DQo+ID4gPiA+ICsJ CQlwc2V1ZG9mbGF2b3IgPSBSUENfQVVUSF9HU1NfS1JCNTsNCj4gPiA+ID4gKwkJCWJyZWFrOw0K PiA+ID4gPiArCQljYXNlIE9wdF9zZWNfa3JiNWk6DQo+ID4gPiA+ICsJCQlwc2V1ZG9mbGF2b3Ig PSBSUENfQVVUSF9HU1NfS1JCNUk7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2Fz ZSBPcHRfc2VjX2tyYjVwOg0KPiA+ID4gPiArCQkJcHNldWRvZmxhdm9yID0gUlBDX0FVVEhfR1NT X0tSQjVQOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X3NlY19sa2V5 Og0KPiA+ID4gPiArCQkJcHNldWRvZmxhdm9yID0gUlBDX0FVVEhfR1NTX0xLRVk7DQo+ID4gPiA+ ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfc2VjX2xrZXlpOg0KPiA+ID4gPiArCQkJ cHNldWRvZmxhdm9yID0gUlBDX0FVVEhfR1NTX0xLRVlJOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ ID4gPiA+ICsJCWNhc2UgT3B0X3NlY19sa2V5cDoNCj4gPiA+ID4gKwkJCXBzZXVkb2ZsYXZvciA9 IFJQQ19BVVRIX0dTU19MS0VZUDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNl IE9wdF9zZWNfc3BrbToNCj4gPiA+ID4gKwkJCXBzZXVkb2ZsYXZvciA9IFJQQ19BVVRIX0dTU19T UEtNOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X3NlY19zcGttaToN Cj4gPiA+ID4gKwkJCXBzZXVkb2ZsYXZvciA9IFJQQ19BVVRIX0dTU19TUEtNSTsNCj4gPiA+ID4g KwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIE9wdF9zZWNfc3BrbXA6DQo+ID4gPiA+ICsJCQlw c2V1ZG9mbGF2b3IgPSBSUENfQVVUSF9HU1NfU1BLTVA7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4g PiA+ID4gKwkJZGVmYXVsdDoNCj4gPiA+ID4gKwkJCWRmcHJpbnRrKE1PVU5ULA0KPiA+ID4gPiAr CQkJCSAiTkZTOiBzZWM9IG9wdGlvbiAnJXMnIG5vdA0KPiA+ID4gPiByZWNvZ25pemVkXG4iLCBw KTsNCj4gPiA+ID4gKwkJCXJldHVybiAwOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwkJaWYgKCFuZnNfYXV0aF9pbmZvX2FkZCgmbW50LT5hdXRoX2luZm8sDQo+ID4gPiA+IHBz ZXVkb2ZsYXZvcikpDQo+ID4gPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwlyZXR1cm4gMTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAr c3RhdGljIGludCBuZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmcoY2hhciAqc3RyaW5nLA0KPiA+ID4g PiArCQlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICptbnQsDQo+ID4gPiA+ICsJCXN1YnN0 cmluZ190ICphcmdzKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCW1udC0+ZmxhZ3MgJj0gfk5GU19N T1VOVF9WRVIzOw0KPiA+ID4gPiArCXN3aXRjaCAobWF0Y2hfdG9rZW4oc3RyaW5nLCBuZnNfdmVy c190b2tlbnMsIGFyZ3MpKSB7DQo+ID4gPiA+ICsJY2FzZSBPcHRfdmVyc18yOg0KPiA+ID4gPiAr CQltbnQtPnZlcnNpb24gPSAyOw0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIE9w dF92ZXJzXzM6DQo+ID4gPiA+ICsJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX1ZFUjM7DQo+ID4g PiA+ICsJCW1udC0+dmVyc2lvbiA9IDM7DQo+ID4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gPiArCWNh c2UgT3B0X3ZlcnNfNDoNCj4gPiA+ID4gKwkJLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBvcHRp b24uIEluIGZ1dHVyZSwNCj4gPiA+ID4gKwkJICogdGhlIG1vdW50IHByb2dyYW0gc2hvdWxkIGFs d2F5cyBzdXBwbHkNCj4gPiA+ID4gKwkJICogYSBORlN2NCBtaW5vciB2ZXJzaW9uIG51bWJlci4N Cj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsJCW1udC0+dmVyc2lvbiA9IDQ7DQo+ID4gPiA+ICsJ CWJyZWFrOw0KPiA+ID4gPiArCWNhc2UgT3B0X3ZlcnNfNF8wOg0KPiA+ID4gPiArCQltbnQtPnZl cnNpb24gPSA0Ow0KPiA+ID4gPiArCQltbnQtPm1pbm9ydmVyc2lvbiA9IDA7DQo+ID4gPiA+ICsJ CWJyZWFrOw0KPiA+ID4gPiArCWNhc2UgT3B0X3ZlcnNfNF8xOg0KPiA+ID4gPiArCQltbnQtPnZl cnNpb24gPSA0Ow0KPiA+ID4gPiArCQltbnQtPm1pbm9ydmVyc2lvbiA9IDE7DQo+ID4gPiA+ICsJ CWJyZWFrOw0KPiA+ID4gPiArCWNhc2UgT3B0X3ZlcnNfNF8yOg0KPiA+ID4gPiArCQltbnQtPnZl cnNpb24gPSA0Ow0KPiA+ID4gPiArCQltbnQtPm1pbm9ydmVyc2lvbiA9IDI7DQo+ID4gPiA+ICsJ CWJyZWFrOw0KPiA+ID4gPiArCWRlZmF1bHQ6DQo+ID4gPiA+ICsJCXJldHVybiAwOw0KPiA+ID4g PiArCX0NCj4gPiA+ID4gKwlyZXR1cm4gMTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4g PiArc3RhdGljIGludCBuZnNfZ2V0X29wdGlvbl9zdHIoc3Vic3RyaW5nX3QgYXJnc1tdLCBjaGFy DQo+ID4gPiA+ICoqb3B0aW9uKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCWtmcmVlKCpvcHRpb24p Ow0KPiA+ID4gPiArCSpvcHRpb24gPSBtYXRjaF9zdHJkdXAoYXJncyk7DQo+ID4gPiA+ICsJcmV0 dXJuICEqb3B0aW9uOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgaW50 IG5mc19nZXRfb3B0aW9uX3VsKHN1YnN0cmluZ190IGFyZ3NbXSwgdW5zaWduZWQgbG9uZw0KPiA+ ID4gPiAqb3B0aW9uKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCWludCByYzsNCj4gPiA+ID4gKwlj aGFyICpzdHJpbmc7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlzdHJpbmcgPSBtYXRjaF9zdHJkdXAo YXJncyk7DQo+ID4gPiA+ICsJaWYgKHN0cmluZyA9PSBOVUxMKQ0KPiA+ID4gPiArCQlyZXR1cm4g LUVOT01FTTsNCj4gPiA+ID4gKwlyYyA9IGtzdHJ0b3VsKHN0cmluZywgMTAsIG9wdGlvbik7DQo+ ID4gPiA+ICsJa2ZyZWUoc3RyaW5nKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldHVybiByYzsN Cj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCBuZnNfZ2V0X29wdGlv bl91bF9ib3VuZChzdWJzdHJpbmdfdCBhcmdzW10sDQo+ID4gPiA+IHVuc2lnbmVkDQo+ID4gPiA+ IGxvbmcgKm9wdGlvbiwNCj4gPiA+ID4gKwkJdW5zaWduZWQgbG9uZyBsX2JvdW5kLCB1bnNpZ25l ZCBsb25nIHVfYm91bmQpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJaW50IHJldDsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArCXJldCA9IG5mc19nZXRfb3B0aW9uX3VsKGFyZ3MsIG9wdGlvbik7DQo+ID4g PiA+ICsJaWYgKHJldCAhPSAwKQ0KPiA+ID4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ID4gPiArCWlm ICgqb3B0aW9uIDwgbF9ib3VuZCB8fCAqb3B0aW9uID4gdV9ib3VuZCkNCj4gPiA+ID4gKwkJcmV0 dXJuIC1FUkFOR0U7DQo+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKy8qDQo+ID4gPiA+ICsgKiBFcnJvci1jaGVjayBhbmQgY29udmVydCBhIHN0cmlu ZyBvZiBtb3VudCBvcHRpb25zIGZyb20gdXNlcg0KPiA+ID4gPiBzcGFjZSBpbnRvDQo+ID4gPiA+ ICsgKiBhIGRhdGEgc3RydWN0dXJlLiAgVGhlIHdob2xlIG1vdW50IHN0cmluZyBpcyBwcm9jZXNz ZWQ7IGJhZA0KPiA+ID4gPiBvcHRpb25zIGFyZQ0KPiA+ID4gPiArICogc2tpcHBlZCBhcyB0aGV5 IGFyZSBlbmNvdW50ZXJlZC4gIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzLA0KPiA+ID4gPiByZXR1 cm4gMTsNCj4gPiA+ID4gKyAqIG90aGVyd2lzZSByZXR1cm4gMCAoemVybykuDQo+ID4gPiA+ICsg Ki8NCj4gPiA+ID4gK2ludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpyYXcsIHN0cnVj dA0KPiA+ID4gPiBuZnNfcGFyc2VkX21vdW50X2RhdGEgKm1udCkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKwljaGFyICpwLCAqc3RyaW5nOw0KPiA+ID4gPiArCWludCByYywgc2xvcHB5ID0gMCwgaW52 YWxpZF9vcHRpb24gPSAwOw0KPiA+ID4gPiArCXVuc2lnbmVkIHNob3J0IHByb3RvZmFtaWx5ID0g QUZfVU5TUEVDOw0KPiA+ID4gPiArCXVuc2lnbmVkIHNob3J0IG1vdW50ZmFtaWx5ID0gQUZfVU5T UEVDOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKCFyYXcpIHsNCj4gPiA+ID4gKwkJZGZwcmlu dGsoTU9VTlQsICJORlM6IG1vdW50IG9wdGlvbnMgc3RyaW5nIHdhcw0KPiA+ID4gPiBOVUxMLlxu Iik7DQo+ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKwlkZnByaW50 ayhNT1VOVCwgIk5GUzogbmZzIG1vdW50IG9wdHM9JyVzJ1xuIiwgcmF3KTsNCj4gPiA+ID4gKw0K PiA+ID4gPiArCXJjID0gc2VjdXJpdHlfc2JfZWF0X2xzbV9vcHRzKHJhdywgJm1udC0+bHNtX29w dHMpOw0KPiA+ID4gPiArCWlmIChyYykNCj4gPiA+ID4gKwkJZ290byBvdXRfc2VjdXJpdHlfZmFp bHVyZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXdoaWxlICgocCA9IHN0cnNlcCgmcmF3LCAiLCIp KSAhPSBOVUxMKSB7DQo+ID4gPiA+ICsJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsN Cj4gPiA+ID4gKwkJdW5zaWduZWQgbG9uZyBvcHRpb247DQo+ID4gPiA+ICsJCWludCB0b2tlbjsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCQlpZiAoISpwKQ0KPiA+ID4gPiArCQkJY29udGludWU7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwkJZGZwcmludGsoTU9VTlQsICJORlM6ICAgcGFyc2luZyBuZnMg bW91bnQNCj4gPiA+ID4gb3B0aW9uDQo+ID4gPiA+ICclcydcbiIsIHApOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsJCXRva2VuID0gbWF0Y2hfdG9rZW4ocCwgbmZzX21vdW50X29wdGlvbl90b2tlbnMs DQo+ID4gPiA+IGFyZ3MpOw0KPiA+ID4gPiArCQlzd2l0Y2ggKHRva2VuKSB7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwkJLyoNCj4gPiA+ID4gKwkJICogYm9vbGVhbiBvcHRpb25zOiAgZm9vL25vZm9v DQo+ID4gPiA+ICsJCSAqLw0KPiA+ID4gPiArCQljYXNlIE9wdF9zb2Z0Og0KPiA+ID4gPiArCQkJ bW50LT5mbGFncyB8PSBORlNfTU9VTlRfU09GVDsNCj4gPiA+ID4gKwkJCW1udC0+ZmxhZ3MgJj0g fk5GU19NT1VOVF9TT0ZURVJSOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2Ug T3B0X3NvZnRlcnI6DQo+ID4gPiA+ICsJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9TT0ZURVJS Ow0KPiA+ID4gPiArCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX1NPRlQ7DQo+ID4gPiA+ICsJ CQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfaGFyZDoNCj4gPiA+ID4gKwkJCW1udC0+Zmxh Z3MgJj0NCj4gPiA+ID4gfihORlNfTU9VTlRfU09GVHxORlNfTU9VTlRfU09GVEVSUik7DQo+ID4g PiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfcG9zaXg6DQo+ID4gPiA+ICsJCQlt bnQtPmZsYWdzIHw9IE5GU19NT1VOVF9QT1NJWDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4g PiArCQljYXNlIE9wdF9ub3Bvc2l4Og0KPiA+ID4gPiArCQkJbW50LT5mbGFncyAmPSB+TkZTX01P VU5UX1BPU0lYOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X2N0bzoN Cj4gPiA+ID4gKwkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9OT0NUTzsNCj4gPiA+ID4gKwkJ CWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIE9wdF9ub2N0bzoNCj4gPiA+ID4gKwkJCW1udC0+Zmxh Z3MgfD0gTkZTX01PVU5UX05PQ1RPOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNh c2UgT3B0X2FjOg0KPiA+ID4gPiArCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX05PQUM7DQo+ ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfbm9hYzoNCj4gPiA+ID4gKwkJ CW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PQUM7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ ID4gKwkJY2FzZSBPcHRfbG9jazoNCj4gPiA+ID4gKwkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VO VF9OT05MTTsNCj4gPiA+ID4gKwkJCW1udC0+ZmxhZ3MgJj0gfihORlNfTU9VTlRfTE9DQUxfRkxP Q0sgfA0KPiA+ID4gPiArCQkJCQlORlNfTU9VTlRfTE9DQUxfRkNOVEwpOw0KPiA+ID4gPiArCQkJ YnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X25vbG9jazoNCj4gPiA+ID4gKwkJCW1udC0+Zmxh Z3MgfD0gTkZTX01PVU5UX05PTkxNOw0KPiA+ID4gPiArCQkJbW50LT5mbGFncyB8PSAoTkZTX01P VU5UX0xPQ0FMX0ZMT0NLIHwNCj4gPiA+ID4gKwkJCQkgICAgICAgTkZTX01PVU5UX0xPQ0FMX0ZD TlRMKTsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIE9wdF91ZHA6DQo+ID4g PiA+ICsJCQltbnQtPmZsYWdzICY9IH5ORlNfTU9VTlRfVENQOw0KPiA+ID4gPiArCQkJbW50LT5u ZnNfc2VydmVyLnByb3RvY29sID0NCj4gPiA+ID4gWFBSVF9UUkFOU1BPUlRfVURQOw0KPiA+ID4g PiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X3RjcDoNCj4gPiA+ID4gKwkJCW1udC0+ ZmxhZ3MgfD0gTkZTX01PVU5UX1RDUDsNCj4gPiA+ID4gKwkJCW1udC0+bmZzX3NlcnZlci5wcm90 b2NvbCA9DQo+ID4gPiA+IFhQUlRfVFJBTlNQT1JUX1RDUDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0K PiA+ID4gPiArCQljYXNlIE9wdF9yZG1hOg0KPiA+ID4gPiArCQkJbW50LT5mbGFncyB8PSBORlNf TU9VTlRfVENQOyAvKiBmb3INCj4gPiA+ID4gc2lkZQ0KPiA+ID4gPiBwcm90b2NvbHMgKi8NCj4g PiA+ID4gKwkJCW1udC0+bmZzX3NlcnZlci5wcm90b2NvbCA9DQo+ID4gPiA+IFhQUlRfVFJBTlNQ T1JUX1JETUE7DQo+ID4gPiA+ICsJCQl4cHJ0X2xvYWRfdHJhbnNwb3J0KHApOw0KPiA+ID4gPiAr CQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X2FjbDoNCj4gPiA+ID4gKwkJCW1udC0+Zmxh Z3MgJj0gfk5GU19NT1VOVF9OT0FDTDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQlj YXNlIE9wdF9ub2FjbDoNCj4gPiA+ID4gKwkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PQUNM Ow0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X3JkaXJwbHVzOg0KPiA+ ID4gPiArCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX05PUkRJUlBMVVM7DQo+ID4gPiA+ICsJ CQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfbm9yZGlycGx1czoNCj4gPiA+ID4gKwkJCW1u dC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PUkRJUlBMVVM7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4g PiA+ID4gKwkJY2FzZSBPcHRfc2hhcmVjYWNoZToNCj4gPiA+ID4gKwkJCW1udC0+ZmxhZ3MgJj0g fk5GU19NT1VOVF9VTlNIQVJFRDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNl IE9wdF9ub3NoYXJlY2FjaGU6DQo+ID4gPiA+ICsJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9V TlNIQVJFRDsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIE9wdF9yZXN2cG9y dDoNCj4gPiA+ID4gKwkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9OT1JFU1ZQT1JUOw0KPiA+ ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X25vcmVzdnBvcnQ6DQo+ID4gPiA+ ICsJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9OT1JFU1ZQT1JUOw0KPiA+ID4gPiArCQkJYnJl YWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X2ZzY2FjaGU6DQo+ID4gPiA+ICsJCQltbnQtPm9wdGlv bnMgfD0gTkZTX09QVElPTl9GU0NBQ0hFOw0KPiA+ID4gPiArCQkJa2ZyZWUobW50LT5mc2NhY2hl X3VuaXEpOw0KPiA+ID4gPiArCQkJbW50LT5mc2NhY2hlX3VuaXEgPSBOVUxMOw0KPiA+ID4gPiAr CQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X25vZnNjYWNoZToNCj4gPiA+ID4gKwkJCW1u dC0+b3B0aW9ucyAmPSB+TkZTX09QVElPTl9GU0NBQ0hFOw0KPiA+ID4gPiArCQkJa2ZyZWUobW50 LT5mc2NhY2hlX3VuaXEpOw0KPiA+ID4gPiArCQkJbW50LT5mc2NhY2hlX3VuaXEgPSBOVUxMOw0K PiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X21pZ3JhdGlvbjoNCj4gPiA+ ID4gKwkJCW1udC0+b3B0aW9ucyB8PSBORlNfT1BUSU9OX01JR1JBVElPTjsNCj4gPiA+ID4gKwkJ CWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIE9wdF9ub21pZ3JhdGlvbjoNCj4gPiA+ID4gKwkJCW1u dC0+b3B0aW9ucyAmPSB+TkZTX09QVElPTl9NSUdSQVRJT047DQo+ID4gPiA+ICsJCQlicmVhazsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCQkvKg0KPiA+ID4gPiArCQkgKiBvcHRpb25zIHRoYXQgdGFr ZSBudW1lcmljIHZhbHVlcw0KPiA+ID4gPiArCQkgKi8NCj4gPiA+ID4gKwkJY2FzZSBPcHRfcG9y dDoNCj4gPiA+ID4gKwkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSB8fA0K PiA+ID4gPiArCQkJICAgIG9wdGlvbiA+IFVTSFJUX01BWCkNCj4gPiA+ID4gKwkJCQlnb3RvIG91 dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiArCQkJbW50LT5uZnNfc2VydmVyLnBvcnQgPSBvcHRp b247DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfcnNpemU6DQo+ID4g PiA+ICsJCQlpZiAobmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+ICsJ CQkJZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gKwkJCW1udC0+cnNpemUgPSBvcHRp b247DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfd3NpemU6DQo+ID4g PiA+ICsJCQlpZiAobmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+ICsJ CQkJZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gKwkJCW1udC0+d3NpemUgPSBvcHRp b247DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfYnNpemU6DQo+ID4g PiA+ICsJCQlpZiAobmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+ICsJ CQkJZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gKwkJCW1udC0+YnNpemUgPSBvcHRp b247DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfdGltZW86DQo+ID4g PiA+ICsJCQlpZiAobmZzX2dldF9vcHRpb25fdWxfYm91bmQoYXJncywNCj4gPiA+ID4gJm9wdGlv biwgMSwNCj4gPiA+ID4gSU5UX01BWCkpDQo+ID4gPiA+ICsJCQkJZ290byBvdXRfaW52YWxpZF92 YWx1ZTsNCj4gPiA+ID4gKwkJCW1udC0+dGltZW8gPSBvcHRpb247DQo+ID4gPiA+ICsJCQlicmVh azsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfcmV0cmFuczoNCj4gPiA+ID4gKwkJCWlmIChuZnNfZ2V0 X29wdGlvbl91bF9ib3VuZChhcmdzLA0KPiA+ID4gPiAmb3B0aW9uLCAwLA0KPiA+ID4gPiBJTlRf TUFYKSkNCj4gPiA+ID4gKwkJCQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiArCQkJ bW50LT5yZXRyYW5zID0gb3B0aW9uOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNh c2UgT3B0X2FjcmVnbWluOg0KPiA+ID4gPiArCQkJaWYgKG5mc19nZXRfb3B0aW9uX3VsKGFyZ3Ms ICZvcHRpb24pKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ID4gPiA+ ICsJCQltbnQtPmFjcmVnbWluID0gb3B0aW9uOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ ICsJCWNhc2UgT3B0X2FjcmVnbWF4Og0KPiA+ID4gPiArCQkJaWYgKG5mc19nZXRfb3B0aW9uX3Vs KGFyZ3MsICZvcHRpb24pKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ ID4gPiA+ICsJCQltbnQtPmFjcmVnbWF4ID0gb3B0aW9uOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ ID4gPiA+ICsJCWNhc2UgT3B0X2FjZGlybWluOg0KPiA+ID4gPiArCQkJaWYgKG5mc19nZXRfb3B0 aW9uX3VsKGFyZ3MsICZvcHRpb24pKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X2ludmFsaWRfdmFs dWU7DQo+ID4gPiA+ICsJCQltbnQtPmFjZGlybWluID0gb3B0aW9uOw0KPiA+ID4gPiArCQkJYnJl YWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X2FjZGlybWF4Og0KPiA+ID4gPiArCQkJaWYgKG5mc19n ZXRfb3B0aW9uX3VsKGFyZ3MsICZvcHRpb24pKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X2ludmFs aWRfdmFsdWU7DQo+ID4gPiA+ICsJCQltbnQtPmFjZGlybWF4ID0gb3B0aW9uOw0KPiA+ID4gPiAr CQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X2FjdGltZW86DQo+ID4gPiA+ICsJCQlpZiAo bmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+ICsJCQkJZ290byBvdXRf aW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gKwkJCW1udC0+YWNyZWdtaW4gPSBtbnQtPmFjcmVnbWF4 ID0NCj4gPiA+ID4gKwkJCW1udC0+YWNkaXJtaW4gPSBtbnQtPmFjZGlybWF4ID0gb3B0aW9uOw0K PiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X25hbWVsZW46DQo+ID4gPiA+ ICsJCQlpZiAobmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+ICsJCQkJ Z290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gKwkJCW1udC0+bmFtbGVuID0gb3B0aW9u Ow0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X21vdW50cG9ydDoNCj4g PiA+ID4gKwkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSB8fA0KPiA+ID4g PiArCQkJICAgIG9wdGlvbiA+IFVTSFJUX01BWCkNCj4gPiA+ID4gKwkJCQlnb3RvIG91dF9pbnZh bGlkX3ZhbHVlOw0KPiA+ID4gPiArCQkJbW50LT5tb3VudF9zZXJ2ZXIucG9ydCA9IG9wdGlvbjsN Cj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIE9wdF9tb3VudHZlcnM6DQo+ID4g PiA+ICsJCQlpZiAobmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikgfHwNCj4gPiA+ID4g KwkJCSAgICBvcHRpb24gPCBORlNfTU5UX1ZFUlNJT04gfHwNCj4gPiA+ID4gKwkJCSAgICBvcHRp b24gPiBORlNfTU5UM19WRVJTSU9OKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X2ludmFsaWRfdmFs dWU7DQo+ID4gPiA+ICsJCQltbnQtPm1vdW50X3NlcnZlci52ZXJzaW9uID0gb3B0aW9uOw0KPiA+ ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X21pbm9ydmVyc2lvbjoNCj4gPiA+ ID4gKwkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSkNCj4gPiA+ID4gKwkJ CQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiArCQkJaWYgKG9wdGlvbiA+IE5GUzRf TUFYX01JTk9SX1ZFUlNJT04pDQo+ID4gPiA+ICsJCQkJZ290byBvdXRfaW52YWxpZF92YWx1ZTsN Cj4gPiA+ID4gKwkJCW1udC0+bWlub3J2ZXJzaW9uID0gb3B0aW9uOw0KPiA+ID4gPiArCQkJYnJl YWs7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJLyoNCj4gPiA+ID4gKwkJICogb3B0aW9ucyB0aGF0 IHRha2UgdGV4dCB2YWx1ZXMNCj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsJCWNhc2UgT3B0X25m c3ZlcnM6DQo+ID4gPiA+ICsJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7DQo+ID4gPiA+ ICsJCQlpZiAoc3RyaW5nID09IE5VTEwpDQo+ID4gPiA+ICsJCQkJZ290byBvdXRfbm9tZW07DQo+ ID4gPiA+ICsJCQlyYyA9IG5mc19wYXJzZV92ZXJzaW9uX3N0cmluZyhzdHJpbmcsDQo+ID4gPiA+ IG1udCwNCj4gPiA+ID4gYXJncyk7DQo+ID4gPiA+ICsJCQlrZnJlZShzdHJpbmcpOw0KPiA+ID4g PiArCQkJaWYgKCFyYykNCj4gPiA+ID4gKwkJCQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X3NlYzoNCj4gPiA+ID4gKwkJCXN0 cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsNCj4gPiA+ID4gKwkJCWlmIChzdHJpbmcgPT0gTlVM TCkNCj4gPiA+ID4gKwkJCQlnb3RvIG91dF9ub21lbTsNCj4gPiA+ID4gKwkJCXJjID0gbmZzX3Bh cnNlX3NlY3VyaXR5X2ZsYXZvcnMoc3RyaW5nLA0KPiA+ID4gPiBtbnQpOw0KPiA+ID4gPiArCQkJ a2ZyZWUoc3RyaW5nKTsNCj4gPiA+ID4gKwkJCWlmICghcmMpIHsNCj4gPiA+ID4gKwkJCQlkZnBy aW50ayhNT1VOVCwNCj4gPiA+ID4gIk5GUzogICB1bnJlY29nbml6ZWQgIg0KPiA+ID4gPiArCQkJ CQkJInNlY3VyaXR5DQo+ID4gPiA+IGZsYXZvclxuIik7DQo+ID4gPiA+ICsJCQkJcmV0dXJuIDA7 DQo+ID4gPiA+ICsJCQl9DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRf cHJvdG86DQo+ID4gPiA+ICsJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7DQo+ID4gPiA+ ICsJCQlpZiAoc3RyaW5nID09IE5VTEwpDQo+ID4gPiA+ICsJCQkJZ290byBvdXRfbm9tZW07DQo+ ID4gPiA+ICsJCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywNCj4gPiA+ID4gKwkJCQkJICAg IG5mc194cHJ0X3Byb3RvY29sX3QNCj4gPiA+ID4gb2tlbnMsDQo+ID4gPiA+IGFyZ3MpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJCQlwcm90b2ZhbWlseSA9IEFGX0lORVQ7DQo+ID4gPiA+ICsJCQlz d2l0Y2ggKHRva2VuKSB7DQo+ID4gPiA+ICsJCQljYXNlIE9wdF94cHJ0X3VkcDY6DQo+ID4gPiA+ ICsJCQkJcHJvdG9mYW1pbHkgPSBBRl9JTkVUNjsNCj4gPiA+ID4gKwkJCQkvKiBmYWxsIHRocm91 Z2ggKi8NCj4gPiA+ID4gKwkJCWNhc2UgT3B0X3hwcnRfdWRwOg0KPiA+ID4gPiArCQkJCW1udC0+ ZmxhZ3MgJj0gfk5GU19NT1VOVF9UQ1A7DQo+ID4gPiA+ICsJCQkJbW50LT5uZnNfc2VydmVyLnBy b3RvY29sID0NCj4gPiA+ID4gWFBSVF9UUkFOU1BPUlRfVURQOw0KPiA+ID4gPiArCQkJCWJyZWFr Ow0KPiA+ID4gPiArCQkJY2FzZSBPcHRfeHBydF90Y3A2Og0KPiA+ID4gPiArCQkJCXByb3RvZmFt aWx5ID0gQUZfSU5FVDY7DQo+ID4gPiA+ICsJCQkJLyogZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+ ICsJCQljYXNlIE9wdF94cHJ0X3RjcDoNCj4gPiA+ID4gKwkJCQltbnQtPmZsYWdzIHw9IE5GU19N T1VOVF9UQ1A7DQo+ID4gPiA+ICsJCQkJbW50LT5uZnNfc2VydmVyLnByb3RvY29sID0NCj4gPiA+ ID4gWFBSVF9UUkFOU1BPUlRfVENQOw0KPiA+ID4gPiArCQkJCWJyZWFrOw0KPiA+ID4gPiArCQkJ Y2FzZSBPcHRfeHBydF9yZG1hNjoNCj4gPiA+ID4gKwkJCQlwcm90b2ZhbWlseSA9IEFGX0lORVQ2 Ow0KPiA+ID4gPiArCQkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KPiA+ID4gPiArCQkJY2FzZSBPcHRf eHBydF9yZG1hOg0KPiA+ID4gPiArCQkJCS8qIHZlY3RvciBzaWRlIHByb3RvY29scyB0byBUQ1AN Cj4gPiA+ID4gKi8NCj4gPiA+ID4gKwkJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9UQ1A7DQo+ ID4gPiA+ICsJCQkJbW50LT5uZnNfc2VydmVyLnByb3RvY29sID0NCj4gPiA+ID4gWFBSVF9UUkFO U1BPUlRfUkRNQTsNCj4gPiA+ID4gKwkJCQl4cHJ0X2xvYWRfdHJhbnNwb3J0KHN0cmluZyk7DQo+ ID4gPiA+ICsJCQkJYnJlYWs7DQo+ID4gPiA+ICsJCQlkZWZhdWx0Og0KPiA+ID4gPiArCQkJCWRm cHJpbnRrKE1PVU5ULA0KPiA+ID4gPiAiTkZTOiAgIHVucmVjb2duaXplZCAiDQo+ID4gPiA+ICsJ CQkJCQkidHJhbnNwb3J0DQo+ID4gPiA+IHByb3RvY29sXG4iKTsNCj4gPiA+ID4gKwkJCQlrZnJl ZShzdHJpbmcpOw0KPiA+ID4gPiArCQkJCXJldHVybiAwOw0KPiA+ID4gPiArCQkJfQ0KPiA+ID4g PiArCQkJa2ZyZWUoc3RyaW5nKTsNCj4gPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNl IE9wdF9tb3VudHByb3RvOg0KPiA+ID4gPiArCQkJc3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3Mp Ow0KPiA+ID4gPiArCQkJaWYgKHN0cmluZyA9PSBOVUxMKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0 X25vbWVtOw0KPiA+ID4gPiArCQkJdG9rZW4gPSBtYXRjaF90b2tlbihzdHJpbmcsDQo+ID4gPiA+ ICsJCQkJCSAgICBuZnNfeHBydF9wcm90b2NvbF90DQo+ID4gPiA+IG9rZW5zLA0KPiA+ID4gPiBh cmdzKTsNCj4gPiA+ID4gKwkJCWtmcmVlKHN0cmluZyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJ CW1vdW50ZmFtaWx5ID0gQUZfSU5FVDsNCj4gPiA+ID4gKwkJCXN3aXRjaCAodG9rZW4pIHsNCj4g PiA+ID4gKwkJCWNhc2UgT3B0X3hwcnRfdWRwNjoNCj4gPiA+ID4gKwkJCQltb3VudGZhbWlseSA9 IEFGX0lORVQ2Ow0KPiA+ID4gPiArCQkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KPiA+ID4gPiArCQkJ Y2FzZSBPcHRfeHBydF91ZHA6DQo+ID4gPiA+ICsJCQkJbW50LT5tb3VudF9zZXJ2ZXIucHJvdG9j b2wgPQ0KPiA+ID4gPiBYUFJUX1RSQU5TUE9SVF9VRFA7DQo+ID4gPiA+ICsJCQkJYnJlYWs7DQo+ ID4gPiA+ICsJCQljYXNlIE9wdF94cHJ0X3RjcDY6DQo+ID4gPiA+ICsJCQkJbW91bnRmYW1pbHkg PSBBRl9JTkVUNjsNCj4gPiA+ID4gKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJ CWNhc2UgT3B0X3hwcnRfdGNwOg0KPiA+ID4gPiArCQkJCW1udC0+bW91bnRfc2VydmVyLnByb3Rv Y29sID0NCj4gPiA+ID4gWFBSVF9UUkFOU1BPUlRfVENQOw0KPiA+ID4gPiArCQkJCWJyZWFrOw0K PiA+ID4gPiArCQkJY2FzZSBPcHRfeHBydF9yZG1hOiAvKiBub3QgdXNlZCBmb3INCj4gPiA+ID4g c2lkZQ0KPiA+ID4gPiBwcm90b2NvbHMgKi8NCj4gPiA+ID4gKwkJCWRlZmF1bHQ6DQo+ID4gPiA+ ICsJCQkJZGZwcmludGsoTU9VTlQsDQo+ID4gPiA+ICJORlM6ICAgdW5yZWNvZ25pemVkICINCj4g PiA+ID4gKwkJCQkJCSJ0cmFuc3BvcnQNCj4gPiA+ID4gcHJvdG9jb2xcbiIpOw0KPiA+ID4gPiAr CQkJCXJldHVybiAwOw0KPiA+ID4gPiArCQkJfQ0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ ICsJCWNhc2UgT3B0X2FkZHI6DQo+ID4gPiA+ICsJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJn cyk7DQo+ID4gPiA+ICsJCQlpZiAoc3RyaW5nID09IE5VTEwpDQo+ID4gPiA+ICsJCQkJZ290byBv dXRfbm9tZW07DQo+ID4gPiA+ICsJCQltbnQtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9DQo+ID4gPiA+ ICsJCQkJcnBjX3B0b24obW50LT5uZXQsIHN0cmluZywNCj4gPiA+ID4gc3RybGVuKHN0cmluZyks DQo+ID4gPiA+ICsJCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikNCj4gPiA+ID4gKwkJCQkJJm1udC0N Cj4gPiA+ID4gPm5mc19zZXJ2ZXIuYWRkcmVzcywNCj4gPiA+ID4gKwkJCQkJc2l6ZW9mKG1udC0N Cj4gPiA+ID4gPiBuZnNfc2VydmVyLmFkZHJlc3MpKTsNCj4gPiA+ID4gKwkJCWtmcmVlKHN0cmlu Zyk7DQo+ID4gPiA+ICsJCQlpZiAobW50LT5uZnNfc2VydmVyLmFkZHJsZW4gPT0gMCkNCj4gPiA+ ID4gKwkJCQlnb3RvIG91dF9pbnZhbGlkX2FkZHJlc3M7DQo+ID4gPiA+ICsJCQlicmVhazsNCj4g PiA+ID4gKwkJY2FzZSBPcHRfY2xpZW50YWRkcjoNCj4gPiA+ID4gKwkJCWlmIChuZnNfZ2V0X29w dGlvbl9zdHIoYXJncywgJm1udC0NCj4gPiA+ID4gPiBjbGllbnRfYWRkcmVzcykpDQo+ID4gPiA+ ICsJCQkJZ290byBvdXRfbm9tZW07DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2Fz ZSBPcHRfbW91bnRob3N0Og0KPiA+ID4gPiArCQkJaWYgKG5mc19nZXRfb3B0aW9uX3N0cihhcmdz LA0KPiA+ID4gPiArCQkJCQkgICAgICAgJm1udC0NCj4gPiA+ID4gPiBtb3VudF9zZXJ2ZXIuaG9z dG5hbWUpKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X25vbWVtOw0KPiA+ID4gPiArCQkJYnJlYWs7 DQo+ID4gPiA+ICsJCWNhc2UgT3B0X21vdW50YWRkcjoNCj4gPiA+ID4gKwkJCXN0cmluZyA9IG1h dGNoX3N0cmR1cChhcmdzKTsNCj4gPiA+ID4gKwkJCWlmIChzdHJpbmcgPT0gTlVMTCkNCj4gPiA+ ID4gKwkJCQlnb3RvIG91dF9ub21lbTsNCj4gPiA+ID4gKwkJCW1udC0+bW91bnRfc2VydmVyLmFk ZHJsZW4gPQ0KPiA+ID4gPiArCQkJCXJwY19wdG9uKG1udC0+bmV0LCBzdHJpbmcsDQo+ID4gPiA+ IHN0cmxlbihzdHJpbmcpLA0KPiA+ID4gPiArCQkJCQkoc3RydWN0IHNvY2thZGRyICopDQo+ID4g PiA+ICsJCQkJCSZtbnQtDQo+ID4gPiA+ID5tb3VudF9zZXJ2ZXIuYWRkcmVzcywNCj4gPiA+ID4g KwkJCQkJc2l6ZW9mKG1udC0NCj4gPiA+ID4gPiBtb3VudF9zZXJ2ZXIuYWRkcmVzcykpOw0KPiA+ ID4gPiArCQkJa2ZyZWUoc3RyaW5nKTsNCj4gPiA+ID4gKwkJCWlmIChtbnQtPm1vdW50X3NlcnZl ci5hZGRybGVuID09IDApDQo+ID4gPiA+ICsJCQkJZ290byBvdXRfaW52YWxpZF9hZGRyZXNzOw0K PiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X25jb25uZWN0Og0KPiA+ID4g PiArCQkJaWYgKG5mc19nZXRfb3B0aW9uX3VsX2JvdW5kKGFyZ3MsDQo+ID4gPiA+ICZvcHRpb24s IDEsDQo+ID4gPiA+IE5GU19NQVhfQ09OTkVDVElPTlMpKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0 X2ludmFsaWRfdmFsdWU7DQo+ID4gPiA+ICsJCQltbnQtPm5mc19zZXJ2ZXIubmNvbm5lY3QgPSBv cHRpb247DQo+ID4gPiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKwkJY2FzZSBPcHRfbG9va3VwY2Fj aGU6DQo+ID4gPiA+ICsJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7DQo+ID4gPiA+ICsJ CQlpZiAoc3RyaW5nID09IE5VTEwpDQo+ID4gPiA+ICsJCQkJZ290byBvdXRfbm9tZW07DQo+ID4g PiA+ICsJCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywNCj4gPiA+ID4gKwkJCQkJbmZzX2xv b2t1cGNhY2hlX3Rva2VucywNCj4gPiA+ID4gYXJncyk7DQo+ID4gPiA+ICsJCQlrZnJlZShzdHJp bmcpOw0KPiA+ID4gPiArCQkJc3dpdGNoICh0b2tlbikgew0KPiA+ID4gPiArCQkJCWNhc2UgT3B0 X2xvb2t1cGNhY2hlX2FsbDoNCj4gPiA+ID4gKwkJCQkJbW50LT5mbGFncyAmPQ0KPiA+ID4gPiB+ KE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUd8TkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05F KTsNCj4gPiA+ID4gKwkJCQkJYnJlYWs7DQo+ID4gPiA+ICsJCQkJY2FzZSBPcHRfbG9va3VwY2Fj aGVfcG9zaXRpdmU6DQo+ID4gPiA+ICsJCQkJCW1udC0+ZmxhZ3MgJj0NCj4gPiA+ID4gfk5GU19N T1VOVF9MT09LVVBfQ0FDSEVfTk9ORTsNCj4gPiA+ID4gKwkJCQkJbW50LT5mbGFncyB8PQ0KPiA+ ID4gPiBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHOw0KPiA+ID4gPiArCQkJCQlicmVhazsN Cj4gPiA+ID4gKwkJCQljYXNlIE9wdF9sb29rdXBjYWNoZV9ub25lOg0KPiA+ID4gPiArCQkJCQlt bnQtPmZsYWdzIHw9DQo+ID4gPiA+IE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUd8TkZTX01P VU5UX0xPT0tVUF9DQUNIRV9OT05FOw0KPiA+ID4gPiArCQkJCQlicmVhazsNCj4gPiA+ID4gKwkJ CQlkZWZhdWx0Og0KPiA+ID4gPiArCQkJCQlkZnByaW50ayhNT1VOVCwNCj4gPiA+ID4gIk5GUzog ICBpbnZhbGlkDQo+ID4gPiA+ICINCj4gPiA+ID4gKwkJCQkJCQkibG9va3VwDQo+ID4gPiA+IGNh Y2hlDQo+ID4gPiA+IGFyZ3VtZW50XG4iKTsNCj4gPiA+ID4gKwkJCQkJcmV0dXJuIDA7DQo+ID4g PiA+ICsJCQl9Ow0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiA+ICsJCWNhc2UgT3B0X2ZzY2Fj aGVfdW5pcToNCj4gPiA+ID4gKwkJCWlmIChuZnNfZ2V0X29wdGlvbl9zdHIoYXJncywgJm1udC0N Cj4gPiA+ID4gPiBmc2NhY2hlX3VuaXEpKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X25vbWVtOw0K PiA+ID4gPiArCQkJbW50LT5vcHRpb25zIHw9IE5GU19PUFRJT05fRlNDQUNIRTsNCj4gPiA+ID4g KwkJCWJyZWFrOw0KPiA+ID4gPiArCQljYXNlIE9wdF9sb2NhbF9sb2NrOg0KPiA+ID4gPiArCQkJ c3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOw0KPiA+ID4gPiArCQkJaWYgKHN0cmluZyA9PSBO VUxMKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X25vbWVtOw0KPiA+ID4gPiArCQkJdG9rZW4gPSBt YXRjaF90b2tlbihzdHJpbmcsDQo+ID4gPiA+IG5mc19sb2NhbF9sb2NrX3Rva2VucywNCj4gPiA+ ID4gKwkJCQkJYXJncyk7DQo+ID4gPiA+ICsJCQlrZnJlZShzdHJpbmcpOw0KPiA+ID4gPiArCQkJ c3dpdGNoICh0b2tlbikgew0KPiA+ID4gPiArCQkJY2FzZSBPcHRfbG9jYWxfbG9ja19hbGw6DQo+ ID4gPiA+ICsJCQkJbW50LT5mbGFncyB8PQ0KPiA+ID4gPiAoTkZTX01PVU5UX0xPQ0FMX0ZMT0NL IHwNCj4gPiA+ID4gKwkJCQkJICAgICAgIE5GU19NT1VOVF9MT0NBTF8NCj4gPiA+ID4gRkNOVEwp Ow0KPiA+ID4gPiArCQkJCWJyZWFrOw0KPiA+ID4gPiArCQkJY2FzZSBPcHRfbG9jYWxfbG9ja19m bG9jazoNCj4gPiA+ID4gKwkJCQltbnQtPmZsYWdzIHw9DQo+ID4gPiA+IE5GU19NT1VOVF9MT0NB TF9GTE9DSzsNCj4gPiA+ID4gKwkJCQlicmVhazsNCj4gPiA+ID4gKwkJCWNhc2UgT3B0X2xvY2Fs X2xvY2tfcG9zaXg6DQo+ID4gPiA+ICsJCQkJbW50LT5mbGFncyB8PQ0KPiA+ID4gPiBORlNfTU9V TlRfTE9DQUxfRkNOVEw7DQo+ID4gPiA+ICsJCQkJYnJlYWs7DQo+ID4gPiA+ICsJCQljYXNlIE9w dF9sb2NhbF9sb2NrX25vbmU6DQo+ID4gPiA+ICsJCQkJbW50LT5mbGFncyAmPQ0KPiA+ID4gPiB+ KE5GU19NT1VOVF9MT0NBTF9GTE9DSyB8DQo+ID4gPiA+ICsJCQkJCQlORlNfTU9VTlRfTE9DQUwN Cj4gPiA+ID4gX0ZDTlRMKTsNCj4gPiA+ID4gKwkJCQlicmVhazsNCj4gPiA+ID4gKwkJCWRlZmF1 bHQ6DQo+ID4gPiA+ICsJCQkJZGZwcmludGsoTU9VTlQsICJORlM6CWludmFsaWQNCj4gPiA+ID4g CSINCj4gPiA+ID4gKwkJCQkJCSJsb2NhbF9sb2NrDQo+ID4gPiA+IGFyZ3VtZW50XG4iKTsNCj4g PiA+ID4gKwkJCQlyZXR1cm4gMDsNCj4gPiA+ID4gKwkJCX07DQo+ID4gPiA+ICsJCQlicmVhazsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCQkvKg0KPiA+ID4gPiArCQkgKiBTcGVjaWFsIG9wdGlvbnMN Cj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsJCWNhc2UgT3B0X3Nsb3BweToNCj4gPiA+ID4gKwkJ CXNsb3BweSA9IDE7DQo+ID4gPiA+ICsJCQlkZnByaW50ayhNT1VOVCwgIk5GUzogICByZWxheGlu Zw0KPiA+ID4gPiBwYXJzaW5nDQo+ID4gPiA+IHJ1bGVzXG4iKTsNCj4gPiA+ID4gKwkJCWJyZWFr Ow0KPiA+ID4gPiArCQljYXNlIE9wdF91c2Vyc3BhY2U6DQo+ID4gPiA+ICsJCWNhc2UgT3B0X2Rl cHJlY2F0ZWQ6DQo+ID4gPiA+ICsJCQlkZnByaW50ayhNT1VOVCwgIk5GUzogICBpZ25vcmluZyBt b3VudA0KPiA+ID4gPiBvcHRpb24gIg0KPiA+ID4gPiArCQkJCQkiJyVzJ1xuIiwgcCk7DQo+ID4g PiA+ICsJCQlicmVhazsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlkZWZhdWx0Og0KPiA+ID4gPiAr CQkJaW52YWxpZF9vcHRpb24gPSAxOw0KPiA+ID4gPiArCQkJZGZwcmludGsoTU9VTlQsICJORlM6 ICAgdW5yZWNvZ25pemVkDQo+ID4gPiA+IG1vdW50DQo+ID4gPiA+IG9wdGlvbiAiDQo+ID4gPiA+ ICsJCQkJCSInJXMnXG4iLCBwKTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCX0NCj4gPiA+ID4g Kw0KPiA+ID4gPiArCWlmICghc2xvcHB5ICYmIGludmFsaWRfb3B0aW9uKQ0KPiA+ID4gPiArCQly ZXR1cm4gMDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChtbnQtPm1pbm9ydmVyc2lvbiAmJiBt bnQtPnZlcnNpb24gIT0gNCkNCj4gPiA+ID4gKwkJZ290byBvdXRfbWlub3J2ZXJzaW9uX21pc21h dGNoOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKG1udC0+b3B0aW9ucyAmIE5GU19PUFRJT05f TUlHUkFUSU9OICYmDQo+ID4gPiA+ICsJICAgIChtbnQtPnZlcnNpb24gIT0gNCB8fCBtbnQtPm1p bm9ydmVyc2lvbiAhPSAwKSkNCj4gPiA+ID4gKwkJZ290byBvdXRfbWlncmF0aW9uX21pc3VzZTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qDQo+ID4gPiA+ICsJICogdmVyaWZ5IHRoYXQgYW55IHBy b3RvPS9tb3VudHByb3RvPSBvcHRpb25zIG1hdGNoIHRoZQ0KPiA+ID4gPiBhZGRyZXNzDQo+ID4g PiA+ICsJICogZmFtaWxpZXMgaW4gdGhlIGFkZHI9L21vdW50YWRkcj0gb3B0aW9ucy4NCj4gPiA+ ID4gKwkgKi8NCj4gPiA+ID4gKwlpZiAocHJvdG9mYW1pbHkgIT0gQUZfVU5TUEVDICYmDQo+ID4g PiA+ICsJICAgIHByb3RvZmFtaWx5ICE9IG1udC0+bmZzX3NlcnZlci5hZGRyZXNzLnNzX2ZhbWls eSkNCj4gPiA+ID4gKwkJZ290byBvdXRfcHJvdG9fbWlzbWF0Y2g7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwlpZiAobW91bnRmYW1pbHkgIT0gQUZfVU5TUEVDKSB7DQo+ID4gPiA+ICsJCWlmIChtbnQt Pm1vdW50X3NlcnZlci5hZGRybGVuKSB7DQo+ID4gPiA+ICsJCQlpZiAobW91bnRmYW1pbHkgIT0g bW50LQ0KPiA+ID4gPiA+IG1vdW50X3NlcnZlci5hZGRyZXNzLnNzX2ZhbWlseSkNCj4gPiA+ID4g KwkJCQlnb3RvIG91dF9tb3VudHByb3RvX21pc21hdGNoOw0KPiA+ID4gPiArCQl9IGVsc2Ugew0K PiA+ID4gPiArCQkJaWYgKG1vdW50ZmFtaWx5ICE9IG1udC0NCj4gPiA+ID4gPiBuZnNfc2VydmVy LmFkZHJlc3Muc3NfZmFtaWx5KQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X21vdW50cHJvdG9fbWlz bWF0Y2g7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwly ZXR1cm4gMTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArb3V0X21vdW50cHJvdG9fbWlzbWF0Y2g6DQo+ ID4gPiA+ICsJcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBtb3VudCBzZXJ2ZXIgYWRkcmVzcyBkb2Vz IG5vdA0KPiA+ID4gPiBtYXRjaA0KPiA+ID4gPiBtb3VudHByb3RvPSAiDQo+ID4gPiA+ICsJCQkg Im9wdGlvblxuIik7DQo+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICtvdXRfcHJvdG9fbWlz bWF0Y2g6DQo+ID4gPiA+ICsJcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBzZXJ2ZXIgYWRkcmVzcyBk b2VzIG5vdCBtYXRjaA0KPiA+ID4gPiBwcm90bz0NCj4gPiA+ID4gb3B0aW9uXG4iKTsNCj4gPiA+ ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gK291dF9pbnZhbGlkX2FkZHJlc3M6DQo+ID4gPiA+ICsJ cHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBiYWQgSVAgYWRkcmVzcyBzcGVjaWZpZWQ6ICVzXG4iLA0K PiA+ID4gPiBwKTsNCj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gK291dF9pbnZhbGlkX3Zh bHVlOg0KPiA+ID4gPiArCXByaW50ayhLRVJOX0lORk8gIk5GUzogYmFkIG1vdW50IG9wdGlvbiB2 YWx1ZQ0KPiA+ID4gPiBzcGVjaWZpZWQ6ICVzXG4iLA0KPiA+ID4gPiBwKTsNCj4gPiA+ID4gKwly ZXR1cm4gMDsNCj4gPiA+ID4gK291dF9taW5vcnZlcnNpb25fbWlzbWF0Y2g6DQo+ID4gPiA+ICsJ cHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBtb3VudCBvcHRpb24gdmVycz0ldSBkb2VzIG5vdA0KPiA+ ID4gPiBzdXBwb3J0ICINCj4gPiA+ID4gKwkJCSAibWlub3J2ZXJzaW9uPSV1XG4iLCBtbnQtPnZl cnNpb24sDQo+ID4gPiA+IG1udC0NCj4gPiA+ID4gPiBtaW5vcnZlcnNpb24pOw0KPiA+ID4gPiAr CXJldHVybiAwOw0KPiA+ID4gPiArb3V0X21pZ3JhdGlvbl9taXN1c2U6DQo+ID4gPiA+ICsJcHJp bnRrKEtFUk5fSU5GTw0KPiA+ID4gPiArCQkiTkZTOiAnbWlncmF0aW9uJyBub3Qgc3VwcG9ydGVk IGZvciB0aGlzIE5GUw0KPiA+ID4gPiB2ZXJzaW9uXG4iKTsNCj4gPiA+ID4gKwlyZXR1cm4gMDsN Cj4gPiA+ID4gK291dF9ub21lbToNCj4gPiA+ID4gKwlwcmludGsoS0VSTl9JTkZPICJORlM6IG5v dCBlbm91Z2ggbWVtb3J5IHRvIHBhcnNlDQo+ID4gPiA+IG9wdGlvblxuIik7DQo+ID4gPiA+ICsJ cmV0dXJuIDA7DQo+ID4gPiA+ICtvdXRfc2VjdXJpdHlfZmFpbHVyZToNCj4gPiA+ID4gKwlwcmlu dGsoS0VSTl9JTkZPICJORlM6IHNlY3VyaXR5IG9wdGlvbnMgaW52YWxpZDogJWRcbiIsDQo+ID4g PiA+IHJjKTsNCj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ ID4gPiArLyoNCj4gPiA+ID4gKyAqIFNwbGl0ICJkZXZfbmFtZSIgaW50byAiaG9zdG5hbWU6ZXhw b3J0X3BhdGgiLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFRoZSBsZWZ0bW9zdCBjb2xvbiBk ZW1hcmtzIHRoZSBzcGxpdCBiZXR3ZWVuIHRoZSBzZXJ2ZXIncw0KPiA+ID4gPiBob3N0bmFtZQ0K PiA+ID4gPiArICogYW5kIHRoZSBleHBvcnQgcGF0aC4gIElmIHRoZSBob3N0bmFtZSBzdGFydHMg d2l0aCBhIGxlZnQNCj4gPiA+ID4gc3F1YXJlDQo+ID4gPiA+ICsgKiBicmFja2V0LCB0aGVuIGl0 IG1heSBjb250YWluIGNvbG9ucy4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBOb3RlOiBjYWxs ZXIgZnJlZXMgaG9zdG5hbWUgYW5kIGV4cG9ydCBwYXRoLCBldmVuIG9uIGVycm9yLg0KPiA+ID4g PiArICovDQo+ID4gPiA+ICtzdGF0aWMgaW50IG5mc19wYXJzZV9kZXZuYW1lKGNvbnN0IGNoYXIg KmRldl9uYW1lLA0KPiA+ID4gPiArCQkJICAgICBjaGFyICoqaG9zdG5hbWUsIHNpemVfdCBtYXhu YW1sZW4sDQo+ID4gPiA+ICsJCQkgICAgIGNoYXIgKipleHBvcnRfcGF0aCwgc2l6ZV90DQo+ID4g PiA+IG1heHBhdGhsZW4pDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJc2l6ZV90IGxlbjsNCj4gPiA+ ID4gKwljaGFyICplbmQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAodW5saWtlbHkoIWRldl9u YW1lIHx8ICEqZGV2X25hbWUpKSB7DQo+ID4gPiA+ICsJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBk ZXZpY2UgbmFtZSBub3QNCj4gPiA+ID4gc3BlY2lmaWVkXG4iKTsNCj4gPiA+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogSXMgdGhlIGhv c3QgbmFtZSBwcm90ZWN0ZWQgd2l0aCBzcXVhcmUgYnJha2NldHM/ICovDQo+ID4gPiA+ICsJaWYg KCpkZXZfbmFtZSA9PSAnWycpIHsNCj4gPiA+ID4gKwkJZW5kID0gc3RyY2hyKCsrZGV2X25hbWUs ICddJyk7DQo+ID4gPiA+ICsJCWlmIChlbmQgPT0gTlVMTCB8fCBlbmRbMV0gIT0gJzonKQ0KPiA+ ID4gPiArCQkJZ290byBvdXRfYmFkX2Rldm5hbWU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJbGVu ID0gZW5kIC0gZGV2X25hbWU7DQo+ID4gPiA+ICsJCWVuZCsrOw0KPiA+ID4gPiArCX0gZWxzZSB7 DQo+ID4gPiA+ICsJCWNoYXIgKmNvbW1hOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWVuZCA9IHN0 cmNocihkZXZfbmFtZSwgJzonKTsNCj4gPiA+ID4gKwkJaWYgKGVuZCA9PSBOVUxMKQ0KPiA+ID4g PiArCQkJZ290byBvdXRfYmFkX2Rldm5hbWU7DQo+ID4gPiA+ICsJCWxlbiA9IGVuZCAtIGRldl9u YW1lOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCS8qIGtpbGwgcG9zc2libGUgaG9zdG5hbWUgbGlz dDogbm90IHN1cHBvcnRlZA0KPiA+ID4gPiAqLw0KPiA+ID4gPiArCQljb21tYSA9IHN0cmNocihk ZXZfbmFtZSwgJywnKTsNCj4gPiA+ID4gKwkJaWYgKGNvbW1hICE9IE5VTEwgJiYgY29tbWEgPCBl bmQpDQo+ID4gPiA+ICsJCQlsZW4gPSBjb21tYSAtIGRldl9uYW1lOw0KPiA+ID4gPiArCX0NCj4g PiA+ID4gKw0KPiA+ID4gPiArCWlmIChsZW4gPiBtYXhuYW1sZW4pDQo+ID4gPiA+ICsJCWdvdG8g b3V0X2hvc3RuYW1lOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogTi5CLiBjYWxsZXIgd2lsbCBm cmVlIG5mc19zZXJ2ZXIuaG9zdG5hbWUgaW4gYWxsDQo+ID4gPiA+IGNhc2VzICovDQo+ID4gPiA+ ICsJKmhvc3RuYW1lID0ga3N0cm5kdXAoZGV2X25hbWUsIGxlbiwgR0ZQX0tFUk5FTCk7DQo+ID4g PiA+ICsJaWYgKCpob3N0bmFtZSA9PSBOVUxMKQ0KPiA+ID4gPiArCQlnb3RvIG91dF9ub21lbTsN Cj4gPiA+ID4gKwlsZW4gPSBzdHJsZW4oKytlbmQpOw0KPiA+ID4gPiArCWlmIChsZW4gPiBtYXhw YXRobGVuKQ0KPiA+ID4gPiArCQlnb3RvIG91dF9wYXRoOw0KPiA+ID4gPiArCSpleHBvcnRfcGF0 aCA9IGtzdHJuZHVwKGVuZCwgbGVuLCBHRlBfS0VSTkVMKTsNCj4gPiA+ID4gKwlpZiAoISpleHBv cnRfcGF0aCkNCj4gPiA+ID4gKwkJZ290byBvdXRfbm9tZW07DQo+ID4gPiA+ICsNCj4gPiA+ID4g KwlkZnByaW50ayhNT1VOVCwgIk5GUzogTU5UUEFUSDogJyVzJ1xuIiwgKmV4cG9ydF9wYXRoKTsN Cj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArb3V0X2JhZF9kZXZuYW1l Og0KPiA+ID4gPiArCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBkZXZpY2UgbmFtZSBub3QgaW4gaG9z dDpwYXRoDQo+ID4gPiA+IGZvcm1hdFxuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gK291dF9ub21lbToNCj4gPiA+ID4gKwlkZnByaW50ayhNT1VOVCwg Ik5GUzogbm90IGVub3VnaCBtZW1vcnkgdG8gcGFyc2UgZGV2aWNlDQo+ID4gPiA+IG5hbWVcbiIp Ow0KPiA+ID4gPiArCXJldHVybiAtRU5PTUVNOw0KPiA+ID4gPiArDQo+ID4gPiA+ICtvdXRfaG9z dG5hbWU6DQo+ID4gPiA+ICsJZGZwcmludGsoTU9VTlQsICJORlM6IHNlcnZlciBob3N0bmFtZSB0 b28gbG9uZ1xuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FTkFNRVRPT0xPTkc7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gK291dF9wYXRoOg0KPiA+ID4gPiArCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBleHBv cnQgcGF0aG5hbWUgdG9vIGxvbmdcbiIpOw0KPiA+ID4gPiArCXJldHVybiAtRU5BTUVUT09MT05H Ow0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICogVmFsaWRh dGUgdGhlIE5GUzIvTkZTMyBtb3VudCBkYXRhDQo+ID4gPiA+ICsgKiAtIGZpbGxzIGluIHRoZSBt b3VudCByb290IGZpbGVoYW5kbGUNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBGb3Igb3B0aW9u IHN0cmluZ3MsIHVzZXIgc3BhY2UgaGFuZGxlcyB0aGUgZm9sbG93aW5nDQo+ID4gPiA+IGJlaGF2 aW9yczoNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiArIEROUzogbWFwcGluZyBzZXJ2ZXIgaG9z dCBuYW1lIHRvIElQIGFkZHJlc3MgKCJhZGRyPSINCj4gPiA+ID4gb3B0aW9uKQ0KPiA+ID4gPiAr ICoNCj4gPiA+ID4gKyAqICsgZmFpbHVyZSBtb2RlOiBob3cgdG8gYmVoYXZlIGlmIGEgbW91bnQg cmVxdWVzdCBjYW4ndCBiZQ0KPiA+ID4gPiBoYW5kbGVkDQo+ID4gPiA+ICsgKiAgIGltbWVkaWF0 ZWx5ICgiZmcvYmciIG9wdGlvbikNCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiArIHJldHJ5OiBo b3cgb2Z0ZW4gdG8gcmV0cnkgYSBtb3VudCByZXF1ZXN0ICgicmV0cnk9Ig0KPiA+ID4gPiBvcHRp b24pDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogKyBicmVha2luZyBiYWNrOiB0cnlpbmcgcHJv dG89dWRwIGFmdGVyIHByb3RvPXRjcCwgdjIgYWZ0ZXINCj4gPiA+ID4gdjMsDQo+ID4gPiA+ICsg KiAgIG1vdW50cHJvdG89dGNwIGFmdGVyIG1vdW50cHJvdG89dWRwLCBhbmQgc28gb24NCj4gPiA+ ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIGludCBuZnMyM192YWxpZGF0ZV9tb3VudF9kYXRhKHZv aWQgKm9wdGlvbnMsDQo+ID4gPiA+ICsJCQkJICAgICBzdHJ1Y3QNCj4gPiA+ID4gbmZzX3BhcnNl ZF9tb3VudF9kYXRhDQo+ID4gPiA+ICphcmdzLA0KPiA+ID4gPiArCQkJCSAgICAgc3RydWN0IG5m c19maCAqbW50ZmgsDQo+ID4gPiA+ICsJCQkJICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4g PiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3QgbmZzX21vdW50X2RhdGEgKmRhdGEgPSAoc3RydWN0 IG5mc19tb3VudF9kYXRhDQo+ID4gPiA+ICopb3B0aW9uczsNCj4gPiA+ID4gKwlzdHJ1Y3Qgc29j a2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYXJncy0NCj4gPiA+ID4gPiBuZnNfc2Vy dmVyLmFkZHJlc3M7DQo+ID4gPiA+ICsJaW50IGV4dHJhX2ZsYWdzID0gTkZTX01PVU5UX0xFR0FD WV9JTlRFUkZBQ0U7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoZGF0YSA9PSBOVUxMKQ0KPiA+ ID4gPiArCQlnb3RvIG91dF9ub19kYXRhOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJYXJncy0+dmVy c2lvbiA9IE5GU19ERUZBVUxUX1ZFUlNJT047DQo+ID4gPiA+ICsJc3dpdGNoIChkYXRhLT52ZXJz aW9uKSB7DQo+ID4gPiA+ICsJY2FzZSAxOg0KPiA+ID4gPiArCQlkYXRhLT5uYW1sZW4gPSAwOyAv KiBmYWxsIHRocm91Z2ggKi8NCj4gPiA+ID4gKwljYXNlIDI6DQo+ID4gPiA+ICsJCWRhdGEtPmJz aXplID0gMDsgLyogZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+ICsJY2FzZSAzOg0KPiA+ID4gPiAr CQlpZiAoZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfVkVSMykNCj4gPiA+ID4gKwkJCWdvdG8gb3V0 X25vX3YzOw0KPiA+ID4gPiArCQlkYXRhLT5yb290LnNpemUgPSBORlMyX0ZIU0laRTsNCj4gPiA+ ID4gKwkJbWVtY3B5KGRhdGEtPnJvb3QuZGF0YSwgZGF0YS0+b2xkX3Jvb3QuZGF0YSwNCj4gPiA+ ID4gTkZTMl9GSFNJWkUpOw0KPiA+ID4gPiArCQkvKiBUdXJuIG9mZiBzZWN1cml0eSBuZWdvdGlh dGlvbiAqLw0KPiA+ID4gPiArCQlleHRyYV9mbGFncyB8PSBORlNfTU9VTlRfU0VDRkxBVk9VUjsN Cj4gPiA+ID4gKwkJLyogZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+ICsJY2FzZSA0Og0KPiA+ID4g PiArCQlpZiAoZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfU0VDRkxBVk9VUikNCj4gPiA+ID4gKwkJ CWdvdG8gb3V0X25vX3NlYzsNCj4gPiA+ID4gKwkJLyogZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+ ICsJY2FzZSA1Og0KPiA+ID4gPiArCQltZW1zZXQoZGF0YS0+Y29udGV4dCwgMCwgc2l6ZW9mKGRh dGEtDQo+ID4gPiA+ID5jb250ZXh0KSk7DQo+ID4gPiA+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLw0K PiA+ID4gPiArCWNhc2UgNjoNCj4gPiA+ID4gKwkJaWYgKGRhdGEtPmZsYWdzICYgTkZTX01PVU5U X1ZFUjMpIHsNCj4gPiA+ID4gKwkJCWlmIChkYXRhLT5yb290LnNpemUgPiBORlMzX0ZIU0laRSB8 fA0KPiA+ID4gPiBkYXRhLQ0KPiA+ID4gPiA+IHJvb3Quc2l6ZSA9PSAwKQ0KPiA+ID4gPiArCQkJ CWdvdG8gb3V0X2ludmFsaWRfZmg7DQo+ID4gPiA+ICsJCQltbnRmaC0+c2l6ZSA9IGRhdGEtPnJv b3Quc2l6ZTsNCj4gPiA+ID4gKwkJCWFyZ3MtPnZlcnNpb24gPSAzOw0KPiA+ID4gPiArCQl9IGVs c2Ugew0KPiA+ID4gPiArCQkJbW50ZmgtPnNpemUgPSBORlMyX0ZIU0laRTsNCj4gPiA+ID4gKwkJ CWFyZ3MtPnZlcnNpb24gPSAyOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKw0K PiA+ID4gPiArCQltZW1jcHkobW50ZmgtPmRhdGEsIGRhdGEtPnJvb3QuZGF0YSwgbW50ZmgtDQo+ ID4gPiA+ID5zaXplKTsNCj4gPiA+ID4gKwkJaWYgKG1udGZoLT5zaXplIDwgc2l6ZW9mKG1udGZo LT5kYXRhKSkNCj4gPiA+ID4gKwkJCW1lbXNldChtbnRmaC0+ZGF0YSArIG1udGZoLT5zaXplLCAw LA0KPiA+ID4gPiArCQkJICAgICAgIHNpemVvZihtbnRmaC0+ZGF0YSkgLSBtbnRmaC0NCj4gPiA+ ID4gPnNpemUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCS8qDQo+ID4gPiA+ICsJCSAqIFRyYW5z bGF0ZSB0byBuZnNfcGFyc2VkX21vdW50X2RhdGEsIHdoaWNoDQo+ID4gPiA+IG5mc19maWxsX3N1 cGVyDQo+ID4gPiA+ICsJCSAqIGNhbiBkZWFsIHdpdGguDQo+ID4gPiA+ICsJCSAqLw0KPiA+ID4g PiArCQlhcmdzLT5mbGFncwkJPSBkYXRhLT5mbGFncyAmDQo+ID4gPiA+IE5GU19NT1VOVF9GTEFH TUFTSzsNCj4gPiA+ID4gKwkJYXJncy0+ZmxhZ3MJCXw9IGV4dHJhX2ZsYWdzOw0KPiA+ID4gPiAr CQlhcmdzLT5yc2l6ZQkJPSBkYXRhLT5yc2l6ZTsNCj4gPiA+ID4gKwkJYXJncy0+d3NpemUJCT0g ZGF0YS0+d3NpemU7DQo+ID4gPiA+ICsJCWFyZ3MtPnRpbWVvCQk9IGRhdGEtPnRpbWVvOw0KPiA+ ID4gPiArCQlhcmdzLT5yZXRyYW5zCQk9IGRhdGEtPnJldHJhbnM7DQo+ID4gPiA+ICsJCWFyZ3Mt PmFjcmVnbWluCQk9IGRhdGEtPmFjcmVnbWluOw0KPiA+ID4gPiArCQlhcmdzLT5hY3JlZ21heAkJ PSBkYXRhLT5hY3JlZ21heDsNCj4gPiA+ID4gKwkJYXJncy0+YWNkaXJtaW4JCT0gZGF0YS0+YWNk aXJtaW47DQo+ID4gPiA+ICsJCWFyZ3MtPmFjZGlybWF4CQk9IGRhdGEtPmFjZGlybWF4Ow0KPiA+ ID4gPiArCQlhcmdzLT5uZWVkX21vdW50CT0gZmFsc2U7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJ bWVtY3B5KHNhcCwgJmRhdGEtPmFkZHIsIHNpemVvZihkYXRhLT5hZGRyKSk7DQo+ID4gPiA+ICsJ CWFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9IHNpemVvZihkYXRhLT5hZGRyKTsNCj4gPiA+ID4g KwkJYXJncy0+bmZzX3NlcnZlci5wb3J0ID0gbnRvaHMoZGF0YS0NCj4gPiA+ID4gPmFkZHIuc2lu X3BvcnQpOw0KPiA+ID4gPiArCQlpZiAoc2FwLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCB8fA0KPiA+ ID4gPiArCQkgICAgIW5mc192ZXJpZnlfc2VydmVyX2FkZHJlc3Moc2FwKSkNCj4gPiA+ID4gKwkJ CWdvdG8gb3V0X25vX2FkZHJlc3M7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJaWYgKCEoZGF0YS0+ ZmxhZ3MgJiBORlNfTU9VTlRfVENQKSkNCj4gPiA+ID4gKwkJCWFyZ3MtPm5mc19zZXJ2ZXIucHJv dG9jb2wgPQ0KPiA+ID4gPiBYUFJUX1RSQU5TUE9SVF9VRFA7DQo+ID4gPiA+ICsJCS8qIE4uQi4g Y2FsbGVyIHdpbGwgZnJlZSBuZnNfc2VydmVyLmhvc3RuYW1lIGluDQo+ID4gPiA+IGFsbA0KPiA+ ID4gPiBjYXNlcyAqLw0KPiA+ID4gPiArCQlhcmdzLT5uZnNfc2VydmVyLmhvc3RuYW1lID0ga3N0 cmR1cChkYXRhLQ0KPiA+ID4gPiA+aG9zdG5hbWUsDQo+ID4gPiA+IEdGUF9LRVJORUwpOw0KPiA+ ID4gPiArCQlhcmdzLT5uYW1sZW4JCT0gZGF0YS0+bmFtbGVuOw0KPiA+ID4gPiArCQlhcmdzLT5i c2l6ZQkJPSBkYXRhLT5ic2l6ZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlpZiAoZGF0YS0+Zmxh Z3MgJiBORlNfTU9VTlRfU0VDRkxBVk9VUikNCj4gPiA+ID4gKwkJCWFyZ3MtPnNlbGVjdGVkX2Zs YXZvciA9IGRhdGEtDQo+ID4gPiA+ID5wc2V1ZG9mbGF2b3I7DQo+ID4gPiA+ICsJCWVsc2UNCj4g PiA+ID4gKwkJCWFyZ3MtPnNlbGVjdGVkX2ZsYXZvciA9IFJQQ19BVVRIX1VOSVg7DQo+ID4gPiA+ ICsJCWlmICghYXJncy0+bmZzX3NlcnZlci5ob3N0bmFtZSkNCj4gPiA+ID4gKwkJCWdvdG8gb3V0 X25vbWVtOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWlmICghKGRhdGEtPmZsYWdzICYgTkZTX01P VU5UX05PTkxNKSkNCj4gPiA+ID4gKwkJCWFyZ3MtPmZsYWdzICY9IH4oTkZTX01PVU5UX0xPQ0FM X0ZMT0NLfA0KPiA+ID4gPiArCQkJCQkgTkZTX01PVU5UX0xPQ0FMX0ZDTlRMKQ0KPiA+ID4gPiA7 DQo+ID4gPiA+ICsJCWVsc2UNCj4gPiA+ID4gKwkJCWFyZ3MtPmZsYWdzIHw9IChORlNfTU9VTlRf TE9DQUxfRkxPQ0t8DQo+ID4gPiA+ICsJCQkJCU5GU19NT1VOVF9MT0NBTF9GQ05UTCk7DQo+ID4g PiA+ICsJCS8qDQo+ID4gPiA+ICsJCSAqIFRoZSBsZWdhY3kgdmVyc2lvbiA2IGJpbmFyeSBtb3Vu dCBkYXRhIGZyb20NCj4gPiA+ID4gdXNlcnNwYWNlIGhhcyBhDQo+ID4gPiA+ICsJCSAqIGZpZWxk IHVzZWQgb25seSB0byB0cmFuc3BvcnQgc2VsaW51eA0KPiA+ID4gPiBpbmZvcm1hdGlvbg0KPiA+ ID4gPiBpbnRvIHRoZQ0KPiA+ID4gPiArCQkgKiB0aGUga2VybmVsLiAgVG8gY29udGludWUgdG8g c3VwcG9ydCB0aGF0DQo+ID4gPiA+IGZ1bmN0aW9uYWxpdHkgd2UNCj4gPiA+ID4gKwkJICogaGF2 ZSBhIHRvdWNoIG9mIHNlbGludXgga25vd2xlZGdlIGhlcmUgaW4NCj4gPiA+ID4gdGhlIE5GUw0K PiA+ID4gPiBjb2RlLiBUaGUNCj4gPiA+ID4gKwkJICogdXNlcnNwYWNlIGNvZGUgY29udmVydGVk IGNvbnRleHQ9YmxhaCB0bw0KPiA+ID4gPiBqdXN0IGJsYWgNCj4gPiA+ID4gc28gd2UgYXJlDQo+ ID4gPiA+ICsJCSAqIGNvbnZlcnRpbmcgYmFjayB0byB0aGUgZnVsbCBzdHJpbmcgc2VsaW51eA0K PiA+ID4gPiB1bmRlcnN0YW5kcy4NCj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsJCWlmIChkYXRh LT5jb250ZXh0WzBdKXsNCj4gPiA+ID4gKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWA0K PiA+ID4gPiArCQkJaW50IHJjOw0KPiA+ID4gPiArCQkJZGF0YS0+Y29udGV4dFtORlNfTUFYX0NP TlRFWFRfTEVOXSA9DQo+ID4gPiA+ICdcMCc7DQo+ID4gPiA+ICsJCQlyYyA9IHNlY3VyaXR5X2Fk ZF9tbnRfb3B0KCJjb250ZXh0IiwNCj4gPiA+ID4gZGF0YS0NCj4gPiA+ID4gPiBjb250ZXh0LA0K PiA+ID4gPiArCQkJCQlzdHJsZW4oZGF0YS0+Y29udGV4dCksDQo+ID4gPiA+ICZhcmdzLQ0KPiA+ ID4gPiA+IGxzbV9vcHRzKTsNCj4gPiA+ID4gKwkJCWlmIChyYykNCj4gPiA+ID4gKwkJCQlyZXR1 cm4gcmM7DQo+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g PiA+ICsjZW5kaWYNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWJyZWFrOw0K PiA+ID4gPiArCWRlZmF1bHQ6DQo+ID4gPiA+ICsJCXJldHVybiBORlNfVEVYVF9EQVRBOw0KPiA+ ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldHVybiAwOw0KPiA+ID4gPiArDQo+ID4g PiA+ICtvdXRfbm9fZGF0YToNCj4gPiA+ID4gKwlkZnByaW50ayhNT1VOVCwgIk5GUzogbW91bnQg cHJvZ3JhbSBkaWRuJ3QgcGFzcyBhbnkNCj4gPiA+ID4gbW91bnQNCj4gPiA+ID4gZGF0YVxuIik7 DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gK291dF9ub192 MzoNCj4gPiA+ID4gKwlkZnByaW50ayhNT1VOVCwgIk5GUzogbmZzX21vdW50X2RhdGEgdmVyc2lv biAlZCBkb2VzDQo+ID4gPiA+IG5vdA0KPiA+ID4gPiBzdXBwb3J0IHYzXG4iLA0KPiA+ID4gPiAr CQkgZGF0YS0+dmVyc2lvbik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gK291dF9ub19zZWM6DQo+ID4gPiA+ICsJZGZwcmludGsoTU9VTlQsICJORlM6IG5m c19tb3VudF9kYXRhIHZlcnNpb24gc3VwcG9ydHMNCj4gPiA+ID4gb25seQ0KPiA+ID4gPiBBVVRI X1NZU1xuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4g K291dF9ub21lbToNCj4gPiA+ID4gKwlkZnByaW50ayhNT1VOVCwgIk5GUzogbm90IGVub3VnaCBt ZW1vcnkgdG8gaGFuZGxlIG1vdW50DQo+ID4gPiA+IG9wdGlvbnNcbiIpOw0KPiA+ID4gPiArCXJl dHVybiAtRU5PTUVNOw0KPiA+ID4gPiArDQo+ID4gPiA+ICtvdXRfbm9fYWRkcmVzczoNCj4gPiA+ ID4gKwlkZnByaW50ayhNT1VOVCwgIk5GUzogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyByZW1v dGUNCj4gPiA+ID4gYWRkcmVzc1xuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4g PiA+ICsNCj4gPiA+ID4gK291dF9pbnZhbGlkX2ZoOg0KPiA+ID4gPiArCWRmcHJpbnRrKE1PVU5U LCAiTkZTOiBpbnZhbGlkIHJvb3QgZmlsZWhhbmRsZVxuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1F SU5WQUw7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZiBJU19FTkFCTEVEKENP TkZJR19ORlNfVjQpDQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2b2lkIG5mczRfdmFsaWRh dGVfbW91bnRfZmxhZ3Moc3RydWN0DQo+ID4gPiA+IG5mc19wYXJzZWRfbW91bnRfZGF0YQ0KPiA+ ID4gPiAqYXJncykNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlhcmdzLT5mbGFncyAmPQ0KPiA+ID4g PiB+KE5GU19NT1VOVF9OT05MTXxORlNfTU9VTlRfTk9BQ0x8TkZTX01PVU5UX1ZFUjN8DQo+ID4g PiA+ICsJCQkgTkZTX01PVU5UX0xPQ0FMX0ZMT0NLfE5GU19NT1VOVF9MT0NBTF8NCj4gPiA+ID4g RkNOVEwpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICog VmFsaWRhdGUgTkZTdjQgbW91bnQgb3B0aW9ucw0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0 aWMgaW50IG5mczRfdmFsaWRhdGVfbW91bnRfZGF0YSh2b2lkICpvcHRpb25zLA0KPiA+ID4gPiAr CQkJCSAgICBzdHJ1Y3QNCj4gPiA+ID4gbmZzX3BhcnNlZF9tb3VudF9kYXRhICphcmdzLA0KPiA+ ID4gPiArCQkJCSAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4g KwlzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYXJncy0NCj4gPiA+ ID4gPiBuZnNfc2VydmVyLmFkZHJlc3M7DQo+ID4gPiA+ICsJc3RydWN0IG5mczRfbW91bnRfZGF0 YSAqZGF0YSA9IChzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhDQo+ID4gPiA+ICopb3B0aW9uczsNCj4g PiA+ID4gKwljaGFyICpjOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKGRhdGEgPT0gTlVMTCkN Cj4gPiA+ID4gKwkJZ290byBvdXRfbm9fZGF0YTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWFyZ3Mt PnZlcnNpb24gPSA0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc3dpdGNoIChkYXRhLT52ZXJzaW9u KSB7DQo+ID4gPiA+ICsJY2FzZSAxOg0KPiA+ID4gPiArCQlpZiAoZGF0YS0+aG9zdF9hZGRybGVu ID4gc2l6ZW9mKGFyZ3MtDQo+ID4gPiA+ID4gbmZzX3NlcnZlci5hZGRyZXNzKSkNCj4gPiA+ID4g KwkJCWdvdG8gb3V0X25vX2FkZHJlc3M7DQo+ID4gPiA+ICsJCWlmIChkYXRhLT5ob3N0X2FkZHJs ZW4gPT0gMCkNCj4gPiA+ID4gKwkJCWdvdG8gb3V0X25vX2FkZHJlc3M7DQo+ID4gPiA+ICsJCWFy Z3MtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9IGRhdGEtPmhvc3RfYWRkcmxlbjsNCj4gPiA+ID4gKwkJ aWYgKGNvcHlfZnJvbV91c2VyKHNhcCwgZGF0YS0+aG9zdF9hZGRyLCBkYXRhLQ0KPiA+ID4gPiA+ IGhvc3RfYWRkcmxlbikpDQo+ID4gPiA+ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiA+ID4gKwkJ aWYgKCFuZnNfdmVyaWZ5X3NlcnZlcl9hZGRyZXNzKHNhcCkpDQo+ID4gPiA+ICsJCQlnb3RvIG91 dF9ub19hZGRyZXNzOw0KPiA+ID4gPiArCQlhcmdzLT5uZnNfc2VydmVyLnBvcnQgPSBudG9ocygo KHN0cnVjdA0KPiA+ID4gPiBzb2NrYWRkcl9pbg0KPiA+ID4gPiAqKXNhcCktPnNpbl9wb3J0KTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArCQlpZiAoZGF0YS0+YXV0aF9mbGF2b3VybGVuKSB7DQo+ID4g PiA+ICsJCQlycGNfYXV0aGZsYXZvcl90IHBzZXVkb2ZsYXZvcjsNCj4gPiA+ID4gKwkJCWlmIChk YXRhLT5hdXRoX2ZsYXZvdXJsZW4gPiAxKQ0KPiA+ID4gPiArCQkJCWdvdG8gb3V0X2ludmFsX2F1 dGg7DQo+ID4gPiA+ICsJCQlpZiAoY29weV9mcm9tX3VzZXIoJnBzZXVkb2ZsYXZvciwNCj4gPiA+ ID4gKwkJCQkJICAgZGF0YS0+YXV0aF9mbGF2b3VycywNCj4gPiA+ID4gKwkJCQkJICAgc2l6ZW9m KHBzZXVkb2ZsYXZvcikNCj4gPiA+ID4gKSkNCj4gPiA+ID4gKwkJCQlyZXR1cm4gLUVGQVVMVDsN Cj4gPiA+ID4gKwkJCWFyZ3MtPnNlbGVjdGVkX2ZsYXZvciA9IHBzZXVkb2ZsYXZvcjsNCj4gPiA+ ID4gKwkJfSBlbHNlDQo+ID4gPiA+ICsJCQlhcmdzLT5zZWxlY3RlZF9mbGF2b3IgPSBSUENfQVVU SF9VTklYOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWMgPSBzdHJuZHVwX3VzZXIoZGF0YS0+aG9z dG5hbWUuZGF0YSwNCj4gPiA+ID4gTkZTNF9NQVhOQU1MRU4pOw0KPiA+ID4gPiArCQlpZiAoSVNf RVJSKGMpKQ0KPiA+ID4gPiArCQkJcmV0dXJuIFBUUl9FUlIoYyk7DQo+ID4gPiA+ICsJCWFyZ3Mt Pm5mc19zZXJ2ZXIuaG9zdG5hbWUgPSBjOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCWMgPSBzdHJu ZHVwX3VzZXIoZGF0YS0+bW50X3BhdGguZGF0YSwNCj4gPiA+ID4gTkZTNF9NQVhQQVRITEVOKTsN Cj4gPiA+ID4gKwkJaWYgKElTX0VSUihjKSkNCj4gPiA+ID4gKwkJCXJldHVybiBQVFJfRVJSKGMp Ow0KPiA+ID4gPiArCQlhcmdzLT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoID0gYzsNCj4gPiA+ID4g KwkJZGZwcmludGsoTU9VTlQsICJORlM6IE1OVFBBVEg6ICclcydcbiIsIGMpOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsJCWMgPSBzdHJuZHVwX3VzZXIoZGF0YS0+Y2xpZW50X2FkZHIuZGF0YSwgMTYp Ow0KPiA+ID4gPiArCQlpZiAoSVNfRVJSKGMpKQ0KPiA+ID4gPiArCQkJcmV0dXJuIFBUUl9FUlIo Yyk7DQo+ID4gPiA+ICsJCWFyZ3MtPmNsaWVudF9hZGRyZXNzID0gYzsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArCQkvKg0KPiA+ID4gPiArCQkgKiBUcmFuc2xhdGUgdG8gbmZzX3BhcnNlZF9tb3VudF9k YXRhLCB3aGljaA0KPiA+ID4gPiBuZnM0X2ZpbGxfc3VwZXINCj4gPiA+ID4gKwkJICogY2FuIGRl YWwgd2l0aC4NCj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJYXJncy0+Zmxh Z3MJPSBkYXRhLT5mbGFncyAmDQo+ID4gPiA+IE5GUzRfTU9VTlRfRkxBR01BU0s7DQo+ID4gPiA+ ICsJCWFyZ3MtPnJzaXplCT0gZGF0YS0+cnNpemU7DQo+ID4gPiA+ICsJCWFyZ3MtPndzaXplCT0g ZGF0YS0+d3NpemU7DQo+ID4gPiA+ICsJCWFyZ3MtPnRpbWVvCT0gZGF0YS0+dGltZW87DQo+ID4g PiA+ICsJCWFyZ3MtPnJldHJhbnMJPSBkYXRhLT5yZXRyYW5zOw0KPiA+ID4gPiArCQlhcmdzLT5h Y3JlZ21pbgk9IGRhdGEtPmFjcmVnbWluOw0KPiA+ID4gPiArCQlhcmdzLT5hY3JlZ21heAk9IGRh dGEtPmFjcmVnbWF4Ow0KPiA+ID4gPiArCQlhcmdzLT5hY2Rpcm1pbgk9IGRhdGEtPmFjZGlybWlu Ow0KPiA+ID4gPiArCQlhcmdzLT5hY2Rpcm1heAk9IGRhdGEtPmFjZGlybWF4Ow0KPiA+ID4gPiAr CQlhcmdzLT5uZnNfc2VydmVyLnByb3RvY29sID0gZGF0YS0+cHJvdG87DQo+ID4gPiA+ICsJCW5m c192YWxpZGF0ZV90cmFuc3BvcnRfcHJvdG9jb2woYXJncyk7DQo+ID4gPiA+ICsJCWlmIChhcmdz LT5uZnNfc2VydmVyLnByb3RvY29sID09DQo+ID4gPiA+IFhQUlRfVFJBTlNQT1JUX1VEUCkNCj4g PiA+ID4gKwkJCWdvdG8gb3V0X2ludmFsaWRfdHJhbnNwb3J0X3VkcDsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwlkZWZhdWx0Og0KPiA+ID4gPiArCQlyZXR1cm4gTkZT X1RFWFRfREFUQTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gMDsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArb3V0X25vX2RhdGE6DQo+ID4gPiA+ICsJZGZwcmludGsoTU9V TlQsICJORlM0OiBtb3VudCBwcm9ncmFtIGRpZG4ndCBwYXNzIGFueQ0KPiA+ID4gPiBtb3VudA0K PiA+ID4gPiBkYXRhXG4iKTsNCj4gPiA+ID4gKwlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gKw0K PiA+ID4gPiArb3V0X2ludmFsX2F1dGg6DQo+ID4gPiA+ICsJZGZwcmludGsoTU9VTlQsICJORlM0 OiBJbnZhbGlkIG51bWJlciBvZiBSUEMgYXV0aA0KPiA+ID4gPiBmbGF2b3Vycw0KPiA+ID4gPiAl ZFxuIiwNCj4gPiA+ID4gKwkJIGRhdGEtPmF1dGhfZmxhdm91cmxlbik7DQo+ID4gPiA+ICsJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gK291dF9ub19hZGRyZXNzOg0KPiA+ID4g PiArCWRmcHJpbnRrKE1PVU5ULCAiTkZTNDogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyByZW1v dGUNCj4gPiA+ID4gYWRkcmVzc1xuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4g PiA+ICsNCj4gPiA+ID4gK291dF9pbnZhbGlkX3RyYW5zcG9ydF91ZHA6DQo+ID4gPiA+ICsJZGZw cmludGsoTU9VTlQsICJORlN2NDogVW5zdXBwb3J0ZWQgdHJhbnNwb3J0IHByb3RvY29sDQo+ID4g PiA+IHVkcFxuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ICt9DQo+ID4g PiA+ICsNCj4gPiA+ID4gK2ludCBuZnNfdmFsaWRhdGVfbW91bnRfZGF0YShzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZSAqZnNfdHlwZSwNCj4gPiA+ID4gKwkJCSAgICB2b2lkICpvcHRpb25zLA0KPiA+ ID4gPiArCQkJICAgIHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKmFyZ3MsDQo+ID4gPiA+ ICsJCQkgICAgc3RydWN0IG5mc19maCAqbW50ZmgsDQo+ID4gPiA+ICsJCQkgICAgY29uc3QgY2hh ciAqZGV2X25hbWUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJaWYgKGZzX3R5cGUgPT0gJm5mc19m c190eXBlKQ0KPiA+ID4gPiArCQlyZXR1cm4gbmZzMjNfdmFsaWRhdGVfbW91bnRfZGF0YShvcHRp b25zLCBhcmdzLA0KPiA+ID4gPiBtbnRmaCwNCj4gPiA+ID4gZGV2X25hbWUpOw0KPiA+ID4gPiAr CXJldHVybiBuZnM0X3ZhbGlkYXRlX21vdW50X2RhdGEob3B0aW9ucywgYXJncywNCj4gPiA+ID4g ZGV2X25hbWUpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArI2Vsc2UNCj4gPiA+ID4gK2ludCBuZnNf dmFsaWRhdGVfbW91bnRfZGF0YShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwNCj4g PiA+ID4gKwkJCSAgICB2b2lkICpvcHRpb25zLA0KPiA+ID4gPiArCQkJICAgIHN0cnVjdCBuZnNf cGFyc2VkX21vdW50X2RhdGEgKmFyZ3MsDQo+ID4gPiA+ICsJCQkgICAgc3RydWN0IG5mc19maCAq bW50ZmgsDQo+ID4gPiA+ICsJCQkgICAgY29uc3QgY2hhciAqZGV2X25hbWUpDQo+ID4gPiA+ICt7 DQo+ID4gPiA+ICsJcmV0dXJuIG5mczIzX3ZhbGlkYXRlX21vdW50X2RhdGEob3B0aW9ucywgYXJn cywgbW50ZmgsDQo+ID4gPiA+IGRldl9uYW1lKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKyNlbmRp Zg0KPiA+ID4gPiArDQo+ID4gPiA+ICtpbnQgbmZzX3ZhbGlkYXRlX3RleHRfbW91bnRfZGF0YSh2 b2lkICpvcHRpb25zLA0KPiA+ID4gPiArCQkJCSBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRh DQo+ID4gPiA+ICphcmdzLA0KPiA+ID4gPiArCQkJCSBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4g PiA+ID4gK3sNCj4gPiA+ID4gKwlpbnQgcG9ydCA9IDA7DQo+ID4gPiA+ICsJaW50IG1heF9uYW1l bGVuID0gUEFHRV9TSVpFOw0KPiA+ID4gPiArCWludCBtYXhfcGF0aGxlbiA9IE5GU19NQVhQQVRI TEVOOw0KPiA+ID4gPiArCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAq KSZhcmdzLQ0KPiA+ID4gPiA+IG5mc19zZXJ2ZXIuYWRkcmVzczsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCWlmIChuZnNfcGFyc2VfbW91bnRfb3B0aW9ucygoY2hhciAqKW9wdGlvbnMsIGFyZ3MpID09 DQo+ID4gPiA+IDApDQo+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJaWYgKCFuZnNfdmVyaWZ5X3NlcnZlcl9hZGRyZXNzKHNhcCkpDQo+ID4gPiA+ICsJCWdv dG8gb3V0X25vX2FkZHJlc3M7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoYXJncy0+dmVyc2lv biA9PSA0KSB7DQo+ID4gPiA+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQ0KPiA+ID4g PiArCQlpZiAoYXJncy0+bmZzX3NlcnZlci5wcm90b2NvbCA9PQ0KPiA+ID4gPiBYUFJUX1RSQU5T UE9SVF9SRE1BKQ0KPiA+ID4gPiArCQkJcG9ydCA9IE5GU19SRE1BX1BPUlQ7DQo+ID4gPiA+ICsJ CWVsc2UNCj4gPiA+ID4gKwkJCXBvcnQgPSBORlNfUE9SVDsNCj4gPiA+ID4gKwkJbWF4X25hbWVs ZW4gPSBORlM0X01BWE5BTUxFTjsNCj4gPiA+ID4gKwkJbWF4X3BhdGhsZW4gPSBORlM0X01BWFBB VEhMRU47DQo+ID4gPiA+ICsJCW5mc192YWxpZGF0ZV90cmFuc3BvcnRfcHJvdG9jb2woYXJncyk7 DQo+ID4gPiA+ICsJCWlmIChhcmdzLT5uZnNfc2VydmVyLnByb3RvY29sID09DQo+ID4gPiA+IFhQ UlRfVFJBTlNQT1JUX1VEUCkNCj4gPiA+ID4gKwkJCWdvdG8gb3V0X2ludmFsaWRfdHJhbnNwb3J0 X3VkcDsNCj4gPiA+ID4gKwkJbmZzNF92YWxpZGF0ZV9tb3VudF9mbGFncyhhcmdzKTsNCj4gPiA+ ID4gKyNlbHNlDQo+ID4gPiA+ICsJCWdvdG8gb3V0X3Y0X25vdF9jb21waWxlZDsNCj4gPiA+ID4g KyNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0ICovDQo+ID4gPiA+ICsJfSBlbHNlIHsNCj4gPiA+ID4g KwkJbmZzX3NldF9tb3VudF90cmFuc3BvcnRfcHJvdG9jb2woYXJncyk7DQo+ID4gPiA+ICsJCWlm IChhcmdzLT5uZnNfc2VydmVyLnByb3RvY29sID09DQo+ID4gPiA+IFhQUlRfVFJBTlNQT1JUX1JE TUEpDQo+ID4gPiA+ICsJCQlwb3J0ID0gTkZTX1JETUFfUE9SVDsNCj4gPiA+ID4gKwl9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwluZnNfc2V0X3BvcnQoc2FwLCAmYXJncy0+bmZzX3NlcnZlci5wb3J0 LCBwb3J0KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldHVybiBuZnNfcGFyc2VfZGV2bmFtZShk ZXZfbmFtZSwNCj4gPiA+ID4gKwkJCQkgICAmYXJncy0+bmZzX3NlcnZlci5ob3N0bmFtZSwNCj4g PiA+ID4gKwkJCQkgICBtYXhfbmFtZWxlbiwNCj4gPiA+ID4gKwkJCQkgICAmYXJncy0NCj4gPiA+ ID4gPm5mc19zZXJ2ZXIuZXhwb3J0X3BhdGgsDQo+ID4gPiA+ICsJCQkJICAgbWF4X3BhdGhsZW4p Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaWYgIUlTX0VOQUJMRUQoQ09ORklHX05GU19WNCkNCj4g PiA+ID4gK291dF92NF9ub3RfY29tcGlsZWQ6DQo+ID4gPiA+ICsJZGZwcmludGsoTU9VTlQsICJO RlM6IE5GU3Y0IGlzIG5vdCBjb21waWxlZCBpbnRvDQo+ID4gPiA+IGtlcm5lbFxuIik7DQo+ID4g PiA+ICsJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7DQo+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiAr b3V0X2ludmFsaWRfdHJhbnNwb3J0X3VkcDoNCj4gPiA+ID4gKwlkZnByaW50ayhNT1VOVCwgIk5G U3Y0OiBVbnN1cHBvcnRlZCB0cmFuc3BvcnQgcHJvdG9jb2wNCj4gPiA+ID4gdWRwXG4iKTsNCj4g PiA+ID4gKwlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gKyNlbmRpZiAvKiAhQ09ORklHX05GU19W NCAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICtvdXRfbm9fYWRkcmVzczoNCj4gPiA+ID4gKwlkZnBy aW50ayhNT1VOVCwgIk5GUzogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyByZW1vdGUNCj4gPiA+ ID4gYWRkcmVzc1xuIik7DQo+ID4gPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+ICt9DQo+ ID4gPiA+IGRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5o DQo+ID4gPiA+IGluZGV4IGQ1MTJlYzM5NDU1OS4uYjY2ZmQzNTk5M2IzIDEwMDY0NA0KPiA+ID4g PiAtLS0gYS9mcy9uZnMvaW50ZXJuYWwuaA0KPiA+ID4gPiArKysgYi9mcy9uZnMvaW50ZXJuYWwu aA0KPiA+ID4gPiBAQCAtNyw2ICs3LDcgQEANCj4gPiA+ID4gI2luY2x1ZGUgPGxpbnV4L21vdW50 Lmg+DQo+ID4gPiA+ICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPg0KPiA+ID4gPiAjaW5jbHVk ZSA8bGludXgvY3JjMzIuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYWRkci5o Pg0KPiA+ID4gPiAjaW5jbHVkZSA8bGludXgvbmZzX3BhZ2UuaD4NCj4gPiA+ID4gI2luY2x1ZGUg PGxpbnV4L3dhaXRfYml0Lmg+DQo+ID4gPiA+IA0KPiA+ID4gPiBAQCAtMjMyLDYgKzIzMywyMiBA QCBleHRlcm4gY29uc3Qgc3RydWN0IHN2Y192ZXJzaW9uDQo+ID4gPiA+IG5mczRfY2FsbGJhY2tf dmVyc2lvbjE7DQo+ID4gPiA+IGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3ZjX3ZlcnNpb24gbmZzNF9j YWxsYmFja192ZXJzaW9uNDsNCj4gPiA+ID4gDQo+ID4gPiA+IHN0cnVjdCBuZnNfcGFnZWlvX2Rl c2NyaXB0b3I7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIG1vdW50LmMgKi8NCj4gPiA+ID4gKyNk ZWZpbmUgTkZTX1RFWFRfREFUQQkJMQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtleHRlcm4gc3RydWN0 IG5mc19wYXJzZWRfbW91bnRfZGF0YQ0KPiA+ID4gPiAqbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9k YXRhKHZvaWQpOw0KPiA+ID4gPiArZXh0ZXJuIHZvaWQgbmZzX2ZyZWVfcGFyc2VkX21vdW50X2Rh dGEoc3RydWN0DQo+ID4gPiA+IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YSk7DQo+ID4gPiA+ ICtleHRlcm4gaW50IG5mc19wYXJzZV9tb3VudF9vcHRpb25zKGNoYXIgKnJhdywgc3RydWN0DQo+ ID4gPiA+IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbW50KTsNCj4gPiA+ID4gK2V4dGVybiBpbnQg bmZzX3ZhbGlkYXRlX21vdW50X2RhdGEoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUNCj4gPiA+ID4g KmZzX3R5cGUsDQo+ID4gPiA+ICsJCQkJICAgdm9pZCAqb3B0aW9ucywNCj4gPiA+ID4gKwkJCQkg ICBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhDQo+ID4gPiA+ICphcmdzLA0KPiA+ID4gPiAr CQkJCSAgIHN0cnVjdCBuZnNfZmggKm1udGZoLA0KPiA+ID4gPiArCQkJCSAgIGNvbnN0IGNoYXIg KmRldl9uYW1lKTsNCj4gPiA+ID4gK2V4dGVybiBpbnQgbmZzX3ZhbGlkYXRlX3RleHRfbW91bnRf ZGF0YSh2b2lkICpvcHRpb25zLA0KPiA+ID4gPiArCQkJCQlzdHJ1Y3QNCj4gPiA+ID4gbmZzX3Bh cnNlZF9tb3VudF9kYXRhDQo+ID4gPiA+ICphcmdzLA0KPiA+ID4gPiArCQkJCQljb25zdCBjaGFy ICpkZXZfbmFtZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gLyogcGFnZWxpc3QuYyAqLw0KPiA+ID4g PiBleHRlcm4gaW50IF9faW5pdCBuZnNfaW5pdF9uZnNwYWdlY2FjaGUodm9pZCk7DQo+ID4gPiA+ IGV4dGVybiB2b2lkIG5mc19kZXN0cm95X25mc3BhZ2VjYWNoZSh2b2lkKTsNCj4gPiA+ID4gQEAg LTc2MywzICs3ODAsMTUgQEAgc3RhdGljIGlubGluZSBib29sIG5mc19lcnJvcl9pc19mYXRhbChp bnQNCj4gPiA+ID4gZXJyKQ0KPiA+ID4gPiAJfQ0KPiA+ID4gPiB9DQo+ID4gPiA+IA0KPiA+ID4g PiArLyoNCj4gPiA+ID4gKyAqIFNlbGVjdCBiZXR3ZWVuIGEgZGVmYXVsdCBwb3J0IHZhbHVlIGFu ZCBhIHVzZXItc3BlY2lmaWVkDQo+ID4gPiA+IHBvcnQNCj4gPiA+ID4gdmFsdWUuDQo+ID4gPiA+ ICsgKiBJZiBhIHplcm8gdmFsdWUgaXMgc2V0LCB0aGVuIGF1dG9iaW5kIHdpbGwgYmUgdXNlZC4N Cj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIGlubGluZSB2b2lkIG5mc19zZXRfcG9ydChz dHJ1Y3Qgc29ja2FkZHIgKnNhcCwgaW50DQo+ID4gPiA+ICpwb3J0LA0KPiA+ID4gPiArCQkJCWNv bnN0IHVuc2lnbmVkIHNob3J0DQo+ID4gPiA+IGRlZmF1bHRfcG9ydCkNCj4gPiA+ID4gK3sNCj4g PiA+ID4gKwlpZiAoKnBvcnQgPT0gTkZTX1VOU1BFQ19QT1JUKQ0KPiA+ID4gPiArCQkqcG9ydCA9 IGRlZmF1bHRfcG9ydDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJwY19zZXRfcG9ydChzYXAsICpw b3J0KTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIv ZnMvbmZzL3N1cGVyLmMNCj4gPiA+ID4gaW5kZXggZDg3MDJlNTdmN2ZjLi44ODYyMjBkMmRhNGUg MTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2ZzL25mcy9zdXBlci5jDQo+ID4gPiA+ICsrKyBiL2ZzL25m cy9zdXBlci5jDQo+ID4gPiA+IEBAIC02OSwyMjkgKzY5LDYgQEANCj4gPiA+ID4gI2luY2x1ZGUg Im5mcy5oIg0KPiA+ID4gPiANCj4gPiA+ID4gI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RC R19WRlMNCj4gPiA+ID4gLSNkZWZpbmUgTkZTX1RFWFRfREFUQQkJMQ0KPiA+ID4gPiAtDQo+ID4g PiA+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1YzKQ0KPiA+ID4gPiAtI2RlZmluZSBORlNf REVGQVVMVF9WRVJTSU9OIDMNCj4gPiA+ID4gLSNlbHNlDQo+ID4gPiA+IC0jZGVmaW5lIE5GU19E RUZBVUxUX1ZFUlNJT04gMg0KPiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNk ZWZpbmUgTkZTX01BWF9DT05ORUNUSU9OUyAxNg0KPiA+ID4gPiAtDQo+ID4gPiA+IC1lbnVtIHsN Cj4gPiA+ID4gLQkvKiBNb3VudCBvcHRpb25zIHRoYXQgdGFrZSBubyBhcmd1bWVudHMgKi8NCj4g PiA+ID4gLQlPcHRfc29mdCwgT3B0X3NvZnRlcnIsIE9wdF9oYXJkLA0KPiA+ID4gPiAtCU9wdF9w b3NpeCwgT3B0X25vcG9zaXgsDQo+ID4gPiA+IC0JT3B0X2N0bywgT3B0X25vY3RvLA0KPiA+ID4g PiAtCU9wdF9hYywgT3B0X25vYWMsDQo+ID4gPiA+IC0JT3B0X2xvY2ssIE9wdF9ub2xvY2ssDQo+ ID4gPiA+IC0JT3B0X3VkcCwgT3B0X3RjcCwgT3B0X3JkbWEsDQo+ID4gPiA+IC0JT3B0X2FjbCwg T3B0X25vYWNsLA0KPiA+ID4gPiAtCU9wdF9yZGlycGx1cywgT3B0X25vcmRpcnBsdXMsDQo+ID4g PiA+IC0JT3B0X3NoYXJlY2FjaGUsIE9wdF9ub3NoYXJlY2FjaGUsDQo+ID4gPiA+IC0JT3B0X3Jl c3Zwb3J0LCBPcHRfbm9yZXN2cG9ydCwNCj4gPiA+ID4gLQlPcHRfZnNjYWNoZSwgT3B0X25vZnNj YWNoZSwNCj4gPiA+ID4gLQlPcHRfbWlncmF0aW9uLCBPcHRfbm9taWdyYXRpb24sDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLQkvKiBNb3VudCBvcHRpb25zIHRoYXQgdGFrZSBpbnRlZ2VyIGFyZ3VtZW50 cyAqLw0KPiA+ID4gPiAtCU9wdF9wb3J0LA0KPiA+ID4gPiAtCU9wdF9yc2l6ZSwgT3B0X3dzaXpl LCBPcHRfYnNpemUsDQo+ID4gPiA+IC0JT3B0X3RpbWVvLCBPcHRfcmV0cmFucywNCj4gPiA+ID4g LQlPcHRfYWNyZWdtaW4sIE9wdF9hY3JlZ21heCwNCj4gPiA+ID4gLQlPcHRfYWNkaXJtaW4sIE9w dF9hY2Rpcm1heCwNCj4gPiA+ID4gLQlPcHRfYWN0aW1lbywNCj4gPiA+ID4gLQlPcHRfbmFtZWxl biwNCj4gPiA+ID4gLQlPcHRfbW91bnRwb3J0LA0KPiA+ID4gPiAtCU9wdF9tb3VudHZlcnMsDQo+ ID4gPiA+IC0JT3B0X21pbm9ydmVyc2lvbiwNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCS8qIE1vdW50 IG9wdGlvbnMgdGhhdCB0YWtlIHN0cmluZyBhcmd1bWVudHMgKi8NCj4gPiA+ID4gLQlPcHRfbmZz dmVycywNCj4gPiA+ID4gLQlPcHRfc2VjLCBPcHRfcHJvdG8sIE9wdF9tb3VudHByb3RvLCBPcHRf bW91bnRob3N0LA0KPiA+ID4gPiAtCU9wdF9hZGRyLCBPcHRfbW91bnRhZGRyLCBPcHRfY2xpZW50 YWRkciwNCj4gPiA+ID4gLQlPcHRfbmNvbm5lY3QsDQo+ID4gPiA+IC0JT3B0X2xvb2t1cGNhY2hl LA0KPiA+ID4gPiAtCU9wdF9mc2NhY2hlX3VuaXEsDQo+ID4gPiA+IC0JT3B0X2xvY2FsX2xvY2ss DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkvKiBTcGVjaWFsIG1vdW50IG9wdGlvbnMgKi8NCj4gPiA+ ID4gLQlPcHRfdXNlcnNwYWNlLCBPcHRfZGVwcmVjYXRlZCwgT3B0X3Nsb3BweSwNCj4gPiA+ID4g LQ0KPiA+ID4gPiAtCU9wdF9lcnINCj4gPiA+ID4gLX07DQo+ID4gPiA+IC0NCj4gPiA+ID4gLXN0 YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc19tb3VudF9vcHRpb25fdG9rZW5zID0gew0KPiA+ ID4gPiAtCXsgT3B0X3VzZXJzcGFjZSwgImJnIiB9LA0KPiA+ID4gPiAtCXsgT3B0X3VzZXJzcGFj ZSwgImZnIiB9LA0KPiA+ID4gPiAtCXsgT3B0X3VzZXJzcGFjZSwgInJldHJ5PSVzIiB9LA0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0JeyBPcHRfc2xvcHB5LCAic2xvcHB5IiB9LA0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0JeyBPcHRfc29mdCwgInNvZnQiIH0sDQo+ID4gPiA+IC0JeyBPcHRfc29mdGVyciwg InNvZnRlcnIiIH0sDQo+ID4gPiA+IC0JeyBPcHRfaGFyZCwgImhhcmQiIH0sDQo+ID4gPiA+IC0J eyBPcHRfZGVwcmVjYXRlZCwgImludHIiIH0sDQo+ID4gPiA+IC0JeyBPcHRfZGVwcmVjYXRlZCwg Im5vaW50ciIgfSwNCj4gPiA+ID4gLQl7IE9wdF9wb3NpeCwgInBvc2l4IiB9LA0KPiA+ID4gPiAt CXsgT3B0X25vcG9zaXgsICJub3Bvc2l4IiB9LA0KPiA+ID4gPiAtCXsgT3B0X2N0bywgImN0byIg fSwNCj4gPiA+ID4gLQl7IE9wdF9ub2N0bywgIm5vY3RvIiB9LA0KPiA+ID4gPiAtCXsgT3B0X2Fj LCAiYWMiIH0sDQo+ID4gPiA+IC0JeyBPcHRfbm9hYywgIm5vYWMiIH0sDQo+ID4gPiA+IC0JeyBP cHRfbG9jaywgImxvY2siIH0sDQo+ID4gPiA+IC0JeyBPcHRfbm9sb2NrLCAibm9sb2NrIiB9LA0K PiA+ID4gPiAtCXsgT3B0X3VkcCwgInVkcCIgfSwNCj4gPiA+ID4gLQl7IE9wdF90Y3AsICJ0Y3Ai IH0sDQo+ID4gPiA+IC0JeyBPcHRfcmRtYSwgInJkbWEiIH0sDQo+ID4gPiA+IC0JeyBPcHRfYWNs LCAiYWNsIiB9LA0KPiA+ID4gPiAtCXsgT3B0X25vYWNsLCAibm9hY2wiIH0sDQo+ID4gPiA+IC0J eyBPcHRfcmRpcnBsdXMsICJyZGlycGx1cyIgfSwNCj4gPiA+ID4gLQl7IE9wdF9ub3JkaXJwbHVz LCAibm9yZGlycGx1cyIgfSwNCj4gPiA+ID4gLQl7IE9wdF9zaGFyZWNhY2hlLCAic2hhcmVjYWNo ZSIgfSwNCj4gPiA+ID4gLQl7IE9wdF9ub3NoYXJlY2FjaGUsICJub3NoYXJlY2FjaGUiIH0sDQo+ ID4gPiA+IC0JeyBPcHRfcmVzdnBvcnQsICJyZXN2cG9ydCIgfSwNCj4gPiA+ID4gLQl7IE9wdF9u b3Jlc3Zwb3J0LCAibm9yZXN2cG9ydCIgfSwNCj4gPiA+ID4gLQl7IE9wdF9mc2NhY2hlLCAiZnNj IiB9LA0KPiA+ID4gPiAtCXsgT3B0X25vZnNjYWNoZSwgIm5vZnNjIiB9LA0KPiA+ID4gPiAtCXsg T3B0X21pZ3JhdGlvbiwgIm1pZ3JhdGlvbiIgfSwNCj4gPiA+ID4gLQl7IE9wdF9ub21pZ3JhdGlv biwgIm5vbWlncmF0aW9uIiB9LA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JeyBPcHRfcG9ydCwgInBv cnQ9JXMiIH0sDQo+ID4gPiA+IC0JeyBPcHRfcnNpemUsICJyc2l6ZT0lcyIgfSwNCj4gPiA+ID4g LQl7IE9wdF93c2l6ZSwgIndzaXplPSVzIiB9LA0KPiA+ID4gPiAtCXsgT3B0X2JzaXplLCAiYnNp emU9JXMiIH0sDQo+ID4gPiA+IC0JeyBPcHRfdGltZW8sICJ0aW1lbz0lcyIgfSwNCj4gPiA+ID4g LQl7IE9wdF9yZXRyYW5zLCAicmV0cmFucz0lcyIgfSwNCj4gPiA+ID4gLQl7IE9wdF9hY3JlZ21p biwgImFjcmVnbWluPSVzIiB9LA0KPiA+ID4gPiAtCXsgT3B0X2FjcmVnbWF4LCAiYWNyZWdtYXg9 JXMiIH0sDQo+ID4gPiA+IC0JeyBPcHRfYWNkaXJtaW4sICJhY2Rpcm1pbj0lcyIgfSwNCj4gPiA+ ID4gLQl7IE9wdF9hY2Rpcm1heCwgImFjZGlybWF4PSVzIiB9LA0KPiA+ID4gPiAtCXsgT3B0X2Fj dGltZW8sICJhY3RpbWVvPSVzIiB9LA0KPiA+ID4gPiAtCXsgT3B0X25hbWVsZW4sICJuYW1sZW49 JXMiIH0sDQo+ID4gPiA+IC0JeyBPcHRfbW91bnRwb3J0LCAibW91bnRwb3J0PSVzIiB9LA0KPiA+ ID4gPiAtCXsgT3B0X21vdW50dmVycywgIm1vdW50dmVycz0lcyIgfSwNCj4gPiA+ID4gLQl7IE9w dF9taW5vcnZlcnNpb24sICJtaW5vcnZlcnNpb249JXMiIH0sDQo+ID4gPiA+IC0NCj4gPiA+ID4g LQl7IE9wdF9uZnN2ZXJzLCAibmZzdmVycz0lcyIgfSwNCj4gPiA+ID4gLQl7IE9wdF9uZnN2ZXJz LCAidmVycz0lcyIgfSwNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCXsgT3B0X3NlYywgInNlYz0lcyIg fSwNCj4gPiA+ID4gLQl7IE9wdF9wcm90bywgInByb3RvPSVzIiB9LA0KPiA+ID4gPiAtCXsgT3B0 X21vdW50cHJvdG8sICJtb3VudHByb3RvPSVzIiB9LA0KPiA+ID4gPiAtCXsgT3B0X2FkZHIsICJh ZGRyPSVzIiB9LA0KPiA+ID4gPiAtCXsgT3B0X2NsaWVudGFkZHIsICJjbGllbnRhZGRyPSVzIiB9 LA0KPiA+ID4gPiAtCXsgT3B0X21vdW50aG9zdCwgIm1vdW50aG9zdD0lcyIgfSwNCj4gPiA+ID4g LQl7IE9wdF9tb3VudGFkZHIsICJtb3VudGFkZHI9JXMiIH0sDQo+ID4gPiA+IC0NCj4gPiA+ID4g LQl7IE9wdF9uY29ubmVjdCwgIm5jb25uZWN0PSVzIiB9LA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0J eyBPcHRfbG9va3VwY2FjaGUsICJsb29rdXBjYWNoZT0lcyIgfSwNCj4gPiA+ID4gLQl7IE9wdF9m c2NhY2hlX3VuaXEsICJmc2M9JXMiIH0sDQo+ID4gPiA+IC0JeyBPcHRfbG9jYWxfbG9jaywgImxv Y2FsX2xvY2s9JXMiIH0sDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkvKiBUaGUgZm9sbG93aW5nIG5l ZWRzIHRvIGJlIGxpc3RlZCBhZnRlciBhbGwgb3RoZXINCj4gPiA+ID4gb3B0aW9ucyAqLw0KPiA+ ID4gPiAtCXsgT3B0X25mc3ZlcnMsICJ2JXMiIH0sDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQl7IE9w dF9lcnIsIE5VTEwgfQ0KPiA+ID4gPiAtfTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtZW51bSB7DQo+ ID4gPiA+IC0JT3B0X3hwcnRfdWRwLCBPcHRfeHBydF91ZHA2LCBPcHRfeHBydF90Y3AsDQo+ID4g PiA+IE9wdF94cHJ0X3RjcDYsDQo+ID4gPiA+IE9wdF94cHJ0X3JkbWEsDQo+ID4gPiA+IC0JT3B0 X3hwcnRfcmRtYTYsDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlPcHRfeHBydF9lcnINCj4gPiA+ID4g LX07DQo+ID4gPiA+IC0NCj4gPiA+ID4gLXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc194 cHJ0X3Byb3RvY29sX3Rva2VucyA9IHsNCj4gPiA+ID4gLQl7IE9wdF94cHJ0X3VkcCwgInVkcCIg fSwNCj4gPiA+ID4gLQl7IE9wdF94cHJ0X3VkcDYsICJ1ZHA2IiB9LA0KPiA+ID4gPiAtCXsgT3B0 X3hwcnRfdGNwLCAidGNwIiB9LA0KPiA+ID4gPiAtCXsgT3B0X3hwcnRfdGNwNiwgInRjcDYiIH0s DQo+ID4gPiA+IC0JeyBPcHRfeHBydF9yZG1hLCAicmRtYSIgfSwNCj4gPiA+ID4gLQl7IE9wdF94 cHJ0X3JkbWE2LCAicmRtYTYiIH0sDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQl7IE9wdF94cHJ0X2Vy ciwgTlVMTCB9DQo+ID4gPiA+IC19Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC1lbnVtIHsNCj4gPiA+ ID4gLQlPcHRfc2VjX25vbmUsIE9wdF9zZWNfc3lzLA0KPiA+ID4gPiAtCU9wdF9zZWNfa3JiNSwg T3B0X3NlY19rcmI1aSwgT3B0X3NlY19rcmI1cCwNCj4gPiA+ID4gLQlPcHRfc2VjX2xrZXksIE9w dF9zZWNfbGtleWksIE9wdF9zZWNfbGtleXAsDQo+ID4gPiA+IC0JT3B0X3NlY19zcGttLCBPcHRf c2VjX3Nwa21pLCBPcHRfc2VjX3Nwa21wLA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JT3B0X3NlY19l cnINCj4gPiA+ID4gLX07DQo+ID4gPiA+IC0NCj4gPiA+ID4gLXN0YXRpYyBjb25zdCBtYXRjaF90 YWJsZV90IG5mc19zZWNmbGF2b3JfdG9rZW5zID0gew0KPiA+ID4gPiAtCXsgT3B0X3NlY19ub25l LCAibm9uZSIgfSwNCj4gPiA+ID4gLQl7IE9wdF9zZWNfbm9uZSwgIm51bGwiIH0sDQo+ID4gPiA+ IC0JeyBPcHRfc2VjX3N5cywgInN5cyIgfSwNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCXsgT3B0X3Nl Y19rcmI1LCAia3JiNSIgfSwNCj4gPiA+ID4gLQl7IE9wdF9zZWNfa3JiNWksICJrcmI1aSIgfSwN Cj4gPiA+ID4gLQl7IE9wdF9zZWNfa3JiNXAsICJrcmI1cCIgfSwNCj4gPiA+ID4gLQ0KPiA+ID4g PiAtCXsgT3B0X3NlY19sa2V5LCAibGtleSIgfSwNCj4gPiA+ID4gLQl7IE9wdF9zZWNfbGtleWks ICJsa2V5aSIgfSwNCj4gPiA+ID4gLQl7IE9wdF9zZWNfbGtleXAsICJsa2V5cCIgfSwNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtCXsgT3B0X3NlY19zcGttLCAic3BrbTMiIH0sDQo+ID4gPiA+IC0JeyBP cHRfc2VjX3Nwa21pLCAic3BrbTNpIiB9LA0KPiA+ID4gPiAtCXsgT3B0X3NlY19zcGttcCwgInNw a20zcCIgfSwNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCXsgT3B0X3NlY19lcnIsIE5VTEwgfQ0KPiA+ ID4gPiAtfTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtZW51bSB7DQo+ID4gPiA+IC0JT3B0X2xvb2t1 cGNhY2hlX2FsbCwgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLA0KPiA+ID4gPiAtCU9wdF9sb29r dXBjYWNoZV9ub25lLA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JT3B0X2xvb2t1cGNhY2hlX2Vycg0K PiA+ID4gPiAtfTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtc3RhdGljIG1hdGNoX3RhYmxlX3QgbmZz X2xvb2t1cGNhY2hlX3Rva2VucyA9IHsNCj4gPiA+ID4gLQl7IE9wdF9sb29rdXBjYWNoZV9hbGws ICJhbGwiIH0sDQo+ID4gPiA+IC0JeyBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmUsICJwb3MiIH0s DQo+ID4gPiA+IC0JeyBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmUsICJwb3NpdGl2ZSIgfSwNCj4g PiA+ID4gLQl7IE9wdF9sb29rdXBjYWNoZV9ub25lLCAibm9uZSIgfSwNCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtCXsgT3B0X2xvb2t1cGNhY2hlX2VyciwgTlVMTCB9DQo+ID4gPiA+IC19Ow0KPiA+ID4g PiAtDQo+ID4gPiA+IC1lbnVtIHsNCj4gPiA+ID4gLQlPcHRfbG9jYWxfbG9ja19hbGwsIE9wdF9s b2NhbF9sb2NrX2Zsb2NrLA0KPiA+ID4gPiBPcHRfbG9jYWxfbG9ja19wb3NpeCwNCj4gPiA+ID4g LQlPcHRfbG9jYWxfbG9ja19ub25lLA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JT3B0X2xvY2FsX2xv Y2tfZXJyDQo+ID4gPiA+IC19Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgbWF0Y2hfdGFi bGVfdCBuZnNfbG9jYWxfbG9ja190b2tlbnMgPSB7DQo+ID4gPiA+IC0JeyBPcHRfbG9jYWxfbG9j a19hbGwsICJhbGwiIH0sDQo+ID4gPiA+IC0JeyBPcHRfbG9jYWxfbG9ja19mbG9jaywgImZsb2Nr IiB9LA0KPiA+ID4gPiAtCXsgT3B0X2xvY2FsX2xvY2tfcG9zaXgsICJwb3NpeCIgfSwNCj4gPiA+ ID4gLQl7IE9wdF9sb2NhbF9sb2NrX25vbmUsICJub25lIiB9LA0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0JeyBPcHRfbG9jYWxfbG9ja19lcnIsIE5VTEwgfQ0KPiA+ID4gPiAtfTsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtZW51bSB7DQo+ID4gPiA+IC0JT3B0X3ZlcnNfMiwgT3B0X3ZlcnNfMywgT3B0X3Zl cnNfNCwgT3B0X3ZlcnNfNF8wLA0KPiA+ID4gPiAtCU9wdF92ZXJzXzRfMSwgT3B0X3ZlcnNfNF8y LA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JT3B0X3ZlcnNfZXJyDQo+ID4gPiA+IC19Ow0KPiA+ID4g PiAtDQo+ID4gPiA+IC1zdGF0aWMgbWF0Y2hfdGFibGVfdCBuZnNfdmVyc190b2tlbnMgPSB7DQo+ ID4gPiA+IC0JeyBPcHRfdmVyc18yLCAiMiIgfSwNCj4gPiA+ID4gLQl7IE9wdF92ZXJzXzMsICIz IiB9LA0KPiA+ID4gPiAtCXsgT3B0X3ZlcnNfNCwgIjQiIH0sDQo+ID4gPiA+IC0JeyBPcHRfdmVy c180XzAsICI0LjAiIH0sDQo+ID4gPiA+IC0JeyBPcHRfdmVyc180XzEsICI0LjEiIH0sDQo+ID4g PiA+IC0JeyBPcHRfdmVyc180XzIsICI0LjIiIH0sDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQl7IE9w dF92ZXJzX2VyciwgTlVMTCB9DQo+ID4gPiA+IC19Ow0KPiA+ID4gPiANCj4gPiA+ID4gc3RhdGlj IHN0cnVjdCBkZW50cnkgKm5mc19wcmVwYXJlZF9tb3VudChzdHJ1Y3QNCj4gPiA+ID4gZmlsZV9z eXN0ZW1fdHlwZQ0KPiA+ID4gPiAqZnNfdHlwZSwNCj4gPiA+ID4gCQlpbnQgZmxhZ3MsIGNvbnN0 IGNoYXIgKmRldl9uYW1lLCB2b2lkDQo+ID4gPiA+ICpyYXdfZGF0YSk7DQo+ID4gPiA+IEBAIC0z MzIsMTAgKzEwOSw2IEBAIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG5mc19zb3BzID0g ew0KPiA+ID4gPiBFWFBPUlRfU1lNQk9MX0dQTChuZnNfc29wcyk7DQo+ID4gPiA+IA0KPiA+ID4g PiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQ0KPiA+ID4gPiAtc3RhdGljIHZvaWQgbmZz NF92YWxpZGF0ZV9tb3VudF9mbGFncyhzdHJ1Y3QNCj4gPiA+ID4gbmZzX3BhcnNlZF9tb3VudF9k YXRhDQo+ID4gPiA+ICopOw0KPiA+ID4gPiAtc3RhdGljIGludCBuZnM0X3ZhbGlkYXRlX21vdW50 X2RhdGEodm9pZCAqb3B0aW9ucywNCj4gPiA+ID4gLQlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9k YXRhICphcmdzLCBjb25zdCBjaGFyDQo+ID4gPiA+ICpkZXZfbmFtZSk7DQo+ID4gPiA+IC0NCj4g PiA+ID4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzNF9mc190eXBlID0gew0KPiA+ID4gPiAJ Lm93bmVyCQk9IFRISVNfTU9EVUxFLA0KPiA+ID4gPiAJLm5hbWUJCT0gIm5mczQiLA0KPiA+ID4g PiBAQCAtOTMyLDE0MSArNzA1LDYgQEAgdm9pZCBuZnNfdW1vdW50X2JlZ2luKHN0cnVjdCBzdXBl cl9ibG9jaw0KPiA+ID4gPiAqc2IpDQo+ID4gPiA+IH0NCj4gPiA+ID4gRVhQT1JUX1NZTUJPTF9H UEwobmZzX3Vtb3VudF9iZWdpbik7DQo+ID4gPiA+IA0KPiA+ID4gPiAtc3RhdGljIHN0cnVjdCBu ZnNfcGFyc2VkX21vdW50X2RhdGENCj4gPiA+ID4gKm5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0 YSh2b2lkKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtCXN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2Rh dGEgKmRhdGE7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRh dGEpLCBHRlBfS0VSTkVMKTsNCj4gPiA+ID4gLQlpZiAoZGF0YSkgew0KPiA+ID4gPiAtCQlkYXRh LT50aW1lbwkJPSBORlNfVU5TUEVDX1RJTUVPOw0KPiA+ID4gPiAtCQlkYXRhLT5yZXRyYW5zCQk9 IE5GU19VTlNQRUNfUkVUUkFOUzsNCj4gPiA+ID4gLQkJZGF0YS0+YWNyZWdtaW4JCT0gTkZTX0RF Rl9BQ1JFR01JTjsNCj4gPiA+ID4gLQkJZGF0YS0+YWNyZWdtYXgJCT0gTkZTX0RFRl9BQ1JFR01B WDsNCj4gPiA+ID4gLQkJZGF0YS0+YWNkaXJtaW4JCT0gTkZTX0RFRl9BQ0RJUk1JTjsNCj4gPiA+ ID4gLQkJZGF0YS0+YWNkaXJtYXgJCT0gTkZTX0RFRl9BQ0RJUk1BWDsNCj4gPiA+ID4gLQkJZGF0 YS0+bW91bnRfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7DQo+ID4gPiA+IC0JCWRhdGEt Pm5mc19zZXJ2ZXIucG9ydAk9IE5GU19VTlNQRUNfUE9SVDsNCj4gPiA+ID4gLQkJZGF0YS0+bmZz X3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1RDUDsNCj4gPiA+ID4gLQkJZGF0YS0+ c2VsZWN0ZWRfZmxhdm9yCT0gUlBDX0FVVEhfTUFYRkxBVk9SOw0KPiA+ID4gPiAtCQlkYXRhLT5t aW5vcnZlcnNpb24JPSAwOw0KPiA+ID4gPiAtCQlkYXRhLT5uZWVkX21vdW50CT0gdHJ1ZTsNCj4g PiA+ID4gLQkJZGF0YS0+bmV0CQk9IGN1cnJlbnQtPm5zcHJveHktDQo+ID4gPiA+ID5uZXRfbnM7 DQo+ID4gPiA+IC0JCWRhdGEtPmxzbV9vcHRzCQk9IE5VTEw7DQo+ID4gPiA+IC0JfQ0KPiA+ID4g PiAtCXJldHVybiBkYXRhOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMg dm9pZCBuZnNfZnJlZV9wYXJzZWRfbW91bnRfZGF0YShzdHJ1Y3QNCj4gPiA+ID4gbmZzX3BhcnNl ZF9tb3VudF9kYXRhICpkYXRhKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtCWlmIChkYXRhKSB7DQo+ ID4gPiA+IC0JCWtmcmVlKGRhdGEtPmNsaWVudF9hZGRyZXNzKTsNCj4gPiA+ID4gLQkJa2ZyZWUo ZGF0YS0+bW91bnRfc2VydmVyLmhvc3RuYW1lKTsNCj4gPiA+ID4gLQkJa2ZyZWUoZGF0YS0+bmZz X3NlcnZlci5leHBvcnRfcGF0aCk7DQo+ID4gPiA+IC0JCWtmcmVlKGRhdGEtPm5mc19zZXJ2ZXIu aG9zdG5hbWUpOw0KPiA+ID4gPiAtCQlrZnJlZShkYXRhLT5mc2NhY2hlX3VuaXEpOw0KPiA+ID4g PiAtCQlzZWN1cml0eV9mcmVlX21udF9vcHRzKCZkYXRhLT5sc21fb3B0cyk7DQo+ID4gPiA+IC0J CWtmcmVlKGRhdGEpOw0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtLyoNCj4gPiA+ID4gLSAqIFNhbml0eS1jaGVjayBhIHNlcnZlciBhZGRyZXNzIHByb3ZpZGVk IGJ5IHRoZSBtb3VudA0KPiA+ID4gPiBjb21tYW5kLg0KPiA+ID4gPiAtICoNCj4gPiA+ID4gLSAq IEFkZHJlc3MgZmFtaWx5IG11c3QgYmUgaW5pdGlhbGl6ZWQsIGFuZCBhZGRyZXNzIG11c3Qgbm90 IGJlDQo+ID4gPiA+IC0gKiB0aGUgQU5ZIGFkZHJlc3MgZm9yIHRoYXQgZmFtaWx5Lg0KPiA+ID4g PiAtICovDQo+ID4gPiA+IC1zdGF0aWMgaW50IG5mc192ZXJpZnlfc2VydmVyX2FkZHJlc3Moc3Ry dWN0IHNvY2thZGRyICphZGRyKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtCXN3aXRjaCAoYWRkci0+ c2FfZmFtaWx5KSB7DQo+ID4gPiA+IC0JY2FzZSBBRl9JTkVUOiB7DQo+ID4gPiA+IC0JCXN0cnVj dCBzb2NrYWRkcl9pbiAqc2EgPSAoc3RydWN0IHNvY2thZGRyX2luDQo+ID4gPiA+ICopYWRkcjsN Cj4gPiA+ID4gLQkJcmV0dXJuIHNhLT5zaW5fYWRkci5zX2FkZHIgIT0NCj4gPiA+ID4gaHRvbmwo SU5BRERSX0FOWSk7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtCWNhc2UgQUZfSU5FVDY6IHsNCj4g PiA+ID4gLQkJc3RydWN0IGluNl9hZGRyICpzYSA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYNCj4g PiA+ID4gKilhZGRyKS0NCj4gPiA+ID4gPiBzaW42X2FkZHI7DQo+ID4gPiA+IC0JCXJldHVybiAh aXB2Nl9hZGRyX2FueShzYSk7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLQ0K PiA+ID4gPiAtCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBJbnZhbGlkIElQIGFkZHJlc3Mgc3BlY2lm aWVkXG4iKTsNCj4gPiA+ID4gLQlyZXR1cm4gMDsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtLyoNCj4gPiA+ID4gLSAqIFNlbGVjdCBiZXR3ZWVuIGEgZGVmYXVsdCBwb3J0IHZhbHVl IGFuZCBhIHVzZXItc3BlY2lmaWVkDQo+ID4gPiA+IHBvcnQNCj4gPiA+ID4gdmFsdWUuDQo+ID4g PiA+IC0gKiBJZiBhIHplcm8gdmFsdWUgaXMgc2V0LCB0aGVuIGF1dG9iaW5kIHdpbGwgYmUgdXNl ZC4NCj4gPiA+ID4gLSAqLw0KPiA+ID4gPiAtc3RhdGljIHZvaWQgbmZzX3NldF9wb3J0KHN0cnVj dCBzb2NrYWRkciAqc2FwLCBpbnQgKnBvcnQsDQo+ID4gPiA+IC0JCQkJIGNvbnN0IHVuc2lnbmVk IHNob3J0DQo+ID4gPiA+IGRlZmF1bHRfcG9ydCkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLQlpZiAo KnBvcnQgPT0gTkZTX1VOU1BFQ19QT1JUKQ0KPiA+ID4gPiAtCQkqcG9ydCA9IGRlZmF1bHRfcG9y dDsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCXJwY19zZXRfcG9ydChzYXAsICpwb3J0KTsNCj4gPiA+ ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoNCj4gPiA+ID4gLSAqIFNhbml0eSBjaGVjayB0 aGUgTkZTIHRyYW5zcG9ydCBwcm90b2NvbC4NCj4gPiA+ID4gLSAqDQo+ID4gPiA+IC0gKi8NCj4g PiA+ID4gLXN0YXRpYyB2b2lkIG5mc192YWxpZGF0ZV90cmFuc3BvcnRfcHJvdG9jb2woc3RydWN0 DQo+ID4gPiA+IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbW50KQ0KPiA+ID4gPiAtew0KPiA+ID4g PiAtCXN3aXRjaCAobW50LT5uZnNfc2VydmVyLnByb3RvY29sKSB7DQo+ID4gPiA+IC0JY2FzZSBY UFJUX1RSQU5TUE9SVF9VRFA6DQo+ID4gPiA+IC0JY2FzZSBYUFJUX1RSQU5TUE9SVF9UQ1A6DQo+ ID4gPiA+IC0JY2FzZSBYUFJUX1RSQU5TUE9SVF9SRE1BOg0KPiA+ID4gPiAtCQlicmVhazsNCj4g PiA+ID4gLQlkZWZhdWx0Og0KPiA+ID4gPiAtCQltbnQtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBY UFJUX1RSQU5TUE9SVF9UQ1A7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0vKg0KPiA+ID4gPiAtICogRm9yIHRleHQgYmFzZWQgTkZTdjIvdjMgbW91bnRzLCB0 aGUgbW91bnQgcHJvdG9jb2wNCj4gPiA+ID4gdHJhbnNwb3J0DQo+ID4gPiA+IGRlZmF1bHQNCj4g PiA+ID4gLSAqIHNldHRpbmdzIHNob3VsZCBkZXBlbmQgdXBvbiB0aGUgc3BlY2lmaWVkIE5GUyB0 cmFuc3BvcnQuDQo+ID4gPiA+IC0gKi8NCj4gPiA+ID4gLXN0YXRpYyB2b2lkIG5mc19zZXRfbW91 bnRfdHJhbnNwb3J0X3Byb3RvY29sKHN0cnVjdA0KPiA+ID4gPiBuZnNfcGFyc2VkX21vdW50X2Rh dGEgKm1udCkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLQluZnNfdmFsaWRhdGVfdHJhbnNwb3J0X3By b3RvY29sKG1udCk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlpZiAobW50LT5tb3VudF9zZXJ2ZXIu cHJvdG9jb2wgPT0gWFBSVF9UUkFOU1BPUlRfVURQIHx8DQo+ID4gPiA+IC0JICAgIG1udC0+bW91 bnRfc2VydmVyLnByb3RvY29sID09IFhQUlRfVFJBTlNQT1JUX1RDUCkNCj4gPiA+ID4gLQkJCXJl dHVybjsNCj4gPiA+ID4gLQlzd2l0Y2ggKG1udC0+bmZzX3NlcnZlci5wcm90b2NvbCkgew0KPiA+ ID4gPiAtCWNhc2UgWFBSVF9UUkFOU1BPUlRfVURQOg0KPiA+ID4gPiAtCQltbnQtPm1vdW50X3Nl cnZlci5wcm90b2NvbCA9DQo+ID4gPiA+IFhQUlRfVFJBTlNQT1JUX1VEUDsNCj4gPiA+ID4gLQkJ YnJlYWs7DQo+ID4gPiA+IC0JY2FzZSBYUFJUX1RSQU5TUE9SVF9UQ1A6DQo+ID4gPiA+IC0JY2Fz ZSBYUFJUX1RSQU5TUE9SVF9SRE1BOg0KPiA+ID4gPiAtCQltbnQtPm1vdW50X3NlcnZlci5wcm90 b2NvbCA9DQo+ID4gPiA+IFhQUlRfVFJBTlNQT1JUX1RDUDsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+ IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qDQo+ID4gPiA+IC0gKiBBZGQgJ2ZsYXZvcicgdG8g J2F1dGhfaW5mbycgaWYgbm90IGFscmVhZHkgcHJlc2VudC4NCj4gPiA+ID4gLSAqIFJldHVybnMg dHJ1ZSBpZiAnZmxhdm9yJyBlbmRzIHVwIGluIHRoZSBsaXN0LCBmYWxzZQ0KPiA+ID4gPiBvdGhl cndpc2UNCj4gPiA+ID4gLSAqLw0KPiA+ID4gPiAtc3RhdGljIGJvb2wgbmZzX2F1dGhfaW5mb19h ZGQoc3RydWN0IG5mc19hdXRoX2luZm8gKmF1dGhfaW5mbywNCj4gPiA+ID4gLQkJCSAgICAgIHJw Y19hdXRoZmxhdm9yX3QgZmxhdm9yKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtCXVuc2lnbmVkIGlu dCBpOw0KPiA+ID4gPiAtCXVuc2lnbmVkIGludCBtYXhfZmxhdm9yX2xlbiA9IEFSUkFZX1NJWkUo YXV0aF9pbmZvLQ0KPiA+ID4gPiA+Zmxhdm9ycyk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkvKiBt YWtlIHN1cmUgdGhpcyBmbGF2b3IgaXNuJ3QgYWxyZWFkeSBpbiB0aGUgbGlzdCAqLw0KPiA+ID4g PiAtCWZvciAoaSA9IDA7IGkgPCBhdXRoX2luZm8tPmZsYXZvcl9sZW47IGkrKykgew0KPiA+ID4g PiAtCQlpZiAoZmxhdm9yID09IGF1dGhfaW5mby0+Zmxhdm9yc1tpXSkNCj4gPiA+ID4gLQkJCXJl dHVybiB0cnVlOw0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCWlmIChhdXRoX2lu Zm8tPmZsYXZvcl9sZW4gKyAxID49IG1heF9mbGF2b3JfbGVuKSB7DQo+ID4gPiA+IC0JCWRmcHJp bnRrKE1PVU5ULCAiTkZTOiB0b28gbWFueSBzZWM9DQo+ID4gPiA+IGZsYXZvcnNcbiIpOw0KPiA+ ID4gPiAtCQlyZXR1cm4gZmFsc2U7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0J YXV0aF9pbmZvLT5mbGF2b3JzW2F1dGhfaW5mby0+Zmxhdm9yX2xlbisrXSA9IGZsYXZvcjsNCj4g PiA+ID4gLQlyZXR1cm4gdHJ1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAvKg0K PiA+ID4gPiAgKiBSZXR1cm4gdHJ1ZSBpZiAnbWF0Y2gnIGlzIGluIGF1dGhfaW5mbyBvciBhdXRo X2luZm8gaXMNCj4gPiA+ID4gZW1wdHkuDQo+ID4gPiA+ICAqIFJldHVybiBmYWxzZSBvdGhlcndp c2UuDQo+ID4gPiA+IEBAIC0xMDg3LDYyNyArNzI1LDYgQEAgYm9vbCBuZnNfYXV0aF9pbmZvX21h dGNoKGNvbnN0IHN0cnVjdA0KPiA+ID4gPiBuZnNfYXV0aF9pbmZvICphdXRoX2luZm8sDQo+ID4g PiA+IH0NCj4gPiA+ID4gRVhQT1JUX1NZTUJPTF9HUEwobmZzX2F1dGhfaW5mb19tYXRjaCk7DQo+ ID4gPiA+IA0KPiA+ID4gPiAtLyoNCj4gPiA+ID4gLSAqIFBhcnNlIHRoZSB2YWx1ZSBvZiB0aGUg J3NlYz0nIG9wdGlvbi4NCj4gPiA+ID4gLSAqLw0KPiA+ID4gPiAtc3RhdGljIGludCBuZnNfcGFy c2Vfc2VjdXJpdHlfZmxhdm9ycyhjaGFyICp2YWx1ZSwNCj4gPiA+ID4gLQkJCQkgICAgICBzdHJ1 Y3QNCj4gPiA+ID4gbmZzX3BhcnNlZF9tb3VudF9kYXRhDQo+ID4gPiA+ICptbnQpDQo+ID4gPiA+ IC17DQo+ID4gPiA+IC0Jc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOw0KPiA+ID4gPiAt CXJwY19hdXRoZmxhdm9yX3QgcHNldWRvZmxhdm9yOw0KPiA+ID4gPiAtCWNoYXIgKnA7DQo+ID4g PiA+IC0NCj4gPiA+ID4gLQlkZnByaW50ayhNT1VOVCwgIk5GUzogcGFyc2luZyBzZWM9JXMgb3B0 aW9uXG4iLCB2YWx1ZSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQl3aGlsZSAoKHAgPSBzdHJzZXAo JnZhbHVlLCAiOiIpKSAhPSBOVUxMKSB7DQo+ID4gPiA+IC0JCXN3aXRjaCAobWF0Y2hfdG9rZW4o cCwgbmZzX3NlY2ZsYXZvcl90b2tlbnMsDQo+ID4gPiA+IGFyZ3MpKSB7DQo+ID4gPiA+IC0JCWNh c2UgT3B0X3NlY19ub25lOg0KPiA+ID4gPiAtCQkJcHNldWRvZmxhdm9yID0gUlBDX0FVVEhfTlVM TDsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9zZWNfc3lzOg0KPiA+ ID4gPiAtCQkJcHNldWRvZmxhdm9yID0gUlBDX0FVVEhfVU5JWDsNCj4gPiA+ID4gLQkJCWJyZWFr Ow0KPiA+ID4gPiAtCQljYXNlIE9wdF9zZWNfa3JiNToNCj4gPiA+ID4gLQkJCXBzZXVkb2ZsYXZv ciA9IFJQQ19BVVRIX0dTU19LUkI1Ow0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNh c2UgT3B0X3NlY19rcmI1aToNCj4gPiA+ID4gLQkJCXBzZXVkb2ZsYXZvciA9IFJQQ19BVVRIX0dT U19LUkI1STsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9zZWNfa3Ji NXA6DQo+ID4gPiA+IC0JCQlwc2V1ZG9mbGF2b3IgPSBSUENfQVVUSF9HU1NfS1JCNVA7DQo+ID4g PiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfc2VjX2xrZXk6DQo+ID4gPiA+IC0J CQlwc2V1ZG9mbGF2b3IgPSBSUENfQVVUSF9HU1NfTEtFWTsNCj4gPiA+ID4gLQkJCWJyZWFrOw0K PiA+ID4gPiAtCQljYXNlIE9wdF9zZWNfbGtleWk6DQo+ID4gPiA+IC0JCQlwc2V1ZG9mbGF2b3Ig PSBSUENfQVVUSF9HU1NfTEtFWUk7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2Fz ZSBPcHRfc2VjX2xrZXlwOg0KPiA+ID4gPiAtCQkJcHNldWRvZmxhdm9yID0gUlBDX0FVVEhfR1NT X0xLRVlQOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X3NlY19zcGtt Og0KPiA+ID4gPiAtCQkJcHNldWRvZmxhdm9yID0gUlBDX0FVVEhfR1NTX1NQS007DQo+ID4gPiA+ IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfc2VjX3Nwa21pOg0KPiA+ID4gPiAtCQkJ cHNldWRvZmxhdm9yID0gUlBDX0FVVEhfR1NTX1NQS01JOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ ID4gPiA+IC0JCWNhc2UgT3B0X3NlY19zcGttcDoNCj4gPiA+ID4gLQkJCXBzZXVkb2ZsYXZvciA9 IFJQQ19BVVRIX0dTU19TUEtNUDsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQlkZWZh dWx0Og0KPiA+ID4gPiAtCQkJZGZwcmludGsoTU9VTlQsDQo+ID4gPiA+IC0JCQkJICJORlM6IHNl Yz0gb3B0aW9uICclcycgbm90DQo+ID4gPiA+IHJlY29nbml6ZWRcbiIsIHApOw0KPiA+ID4gPiAt CQkJcmV0dXJuIDA7DQo+ID4gPiA+IC0JCX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQlpZiAoIW5m c19hdXRoX2luZm9fYWRkKCZtbnQtPmF1dGhfaW5mbywNCj4gPiA+ID4gcHNldWRvZmxhdm9yKSkN Cj4gPiA+ID4gLQkJCXJldHVybiAwOw0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt CXJldHVybiAxOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgaW50IG5m c19wYXJzZV92ZXJzaW9uX3N0cmluZyhjaGFyICpzdHJpbmcsDQo+ID4gPiA+IC0JCXN0cnVjdCBu ZnNfcGFyc2VkX21vdW50X2RhdGEgKm1udCwNCj4gPiA+ID4gLQkJc3Vic3RyaW5nX3QgKmFyZ3Mp DQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX1ZFUjM7DQo+ ID4gPiA+IC0Jc3dpdGNoIChtYXRjaF90b2tlbihzdHJpbmcsIG5mc192ZXJzX3Rva2VucywgYXJn cykpIHsNCj4gPiA+ID4gLQljYXNlIE9wdF92ZXJzXzI6DQo+ID4gPiA+IC0JCW1udC0+dmVyc2lv biA9IDI7DQo+ID4gPiA+IC0JCWJyZWFrOw0KPiA+ID4gPiAtCWNhc2UgT3B0X3ZlcnNfMzoNCj4g PiA+ID4gLQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfVkVSMzsNCj4gPiA+ID4gLQkJbW50LT52 ZXJzaW9uID0gMzsNCj4gPiA+ID4gLQkJYnJlYWs7DQo+ID4gPiA+IC0JY2FzZSBPcHRfdmVyc180 Og0KPiA+ID4gPiAtCQkvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9wdGlvbi4gSW4gZnV0dXJl LA0KPiA+ID4gPiAtCQkgKiB0aGUgbW91bnQgcHJvZ3JhbSBzaG91bGQgYWx3YXlzIHN1cHBseQ0K PiA+ID4gPiAtCQkgKiBhIE5GU3Y0IG1pbm9yIHZlcnNpb24gbnVtYmVyLg0KPiA+ID4gPiAtCQkg Ki8NCj4gPiA+ID4gLQkJbW50LT52ZXJzaW9uID0gNDsNCj4gPiA+ID4gLQkJYnJlYWs7DQo+ID4g PiA+IC0JY2FzZSBPcHRfdmVyc180XzA6DQo+ID4gPiA+IC0JCW1udC0+dmVyc2lvbiA9IDQ7DQo+ ID4gPiA+IC0JCW1udC0+bWlub3J2ZXJzaW9uID0gMDsNCj4gPiA+ID4gLQkJYnJlYWs7DQo+ID4g PiA+IC0JY2FzZSBPcHRfdmVyc180XzE6DQo+ID4gPiA+IC0JCW1udC0+dmVyc2lvbiA9IDQ7DQo+ ID4gPiA+IC0JCW1udC0+bWlub3J2ZXJzaW9uID0gMTsNCj4gPiA+ID4gLQkJYnJlYWs7DQo+ID4g PiA+IC0JY2FzZSBPcHRfdmVyc180XzI6DQo+ID4gPiA+IC0JCW1udC0+dmVyc2lvbiA9IDQ7DQo+ ID4gPiA+IC0JCW1udC0+bWlub3J2ZXJzaW9uID0gMjsNCj4gPiA+ID4gLQkJYnJlYWs7DQo+ID4g PiA+IC0JZGVmYXVsdDoNCj4gPiA+ID4gLQkJcmV0dXJuIDA7DQo+ID4gPiA+IC0JfQ0KPiA+ID4g PiAtCXJldHVybiAxOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgaW50 IG5mc19nZXRfb3B0aW9uX3N0cihzdWJzdHJpbmdfdCBhcmdzW10sIGNoYXINCj4gPiA+ID4gKipv cHRpb24pDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0Ja2ZyZWUoKm9wdGlvbik7DQo+ID4gPiA+IC0J Km9wdGlvbiA9IG1hdGNoX3N0cmR1cChhcmdzKTsNCj4gPiA+ID4gLQlyZXR1cm4gISpvcHRpb247 DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLXN0YXRpYyBpbnQgbmZzX2dldF9vcHRp b25fdWwoc3Vic3RyaW5nX3QgYXJnc1tdLCB1bnNpZ25lZCBsb25nDQo+ID4gPiA+ICpvcHRpb24p DQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JaW50IHJjOw0KPiA+ID4gPiAtCWNoYXIgKnN0cmluZzsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsNCj4gPiA+ ID4gLQlpZiAoc3RyaW5nID09IE5VTEwpDQo+ID4gPiA+IC0JCXJldHVybiAtRU5PTUVNOw0KPiA+ ID4gPiAtCXJjID0ga3N0cnRvdWwoc3RyaW5nLCAxMCwgb3B0aW9uKTsNCj4gPiA+ID4gLQlrZnJl ZShzdHJpbmcpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JcmV0dXJuIHJjOw0KPiA+ID4gPiAtfQ0K PiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgaW50IG5mc19nZXRfb3B0aW9uX3VsX2JvdW5kKHN1 YnN0cmluZ190IGFyZ3NbXSwNCj4gPiA+ID4gdW5zaWduZWQNCj4gPiA+ID4gbG9uZyAqb3B0aW9u LA0KPiA+ID4gPiAtCQl1bnNpZ25lZCBsb25nIGxfYm91bmQsIHVuc2lnbmVkIGxvbmcgdV9ib3Vu ZCkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLQlpbnQgcmV0Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0J cmV0ID0gbmZzX2dldF9vcHRpb25fdWwoYXJncywgb3B0aW9uKTsNCj4gPiA+ID4gLQlpZiAocmV0 ICE9IDApDQo+ID4gPiA+IC0JCXJldHVybiByZXQ7DQo+ID4gPiA+IC0JaWYgKCpvcHRpb24gPCBs X2JvdW5kIHx8ICpvcHRpb24gPiB1X2JvdW5kKQ0KPiA+ID4gPiAtCQlyZXR1cm4gLUVSQU5HRTsN Cj4gPiA+ID4gLQlyZXR1cm4gMDsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoN Cj4gPiA+ID4gLSAqIEVycm9yLWNoZWNrIGFuZCBjb252ZXJ0IGEgc3RyaW5nIG9mIG1vdW50IG9w dGlvbnMgZnJvbSB1c2VyDQo+ID4gPiA+IHNwYWNlIGludG8NCj4gPiA+ID4gLSAqIGEgZGF0YSBz dHJ1Y3R1cmUuICBUaGUgd2hvbGUgbW91bnQgc3RyaW5nIGlzIHByb2Nlc3NlZDsgYmFkDQo+ID4g PiA+IG9wdGlvbnMgYXJlDQo+ID4gPiA+IC0gKiBza2lwcGVkIGFzIHRoZXkgYXJlIGVuY291bnRl cmVkLiAgSWYgdGhlcmUgd2VyZSBubyBlcnJvcnMsDQo+ID4gPiA+IHJldHVybiAxOw0KPiA+ID4g PiAtICogb3RoZXJ3aXNlIHJldHVybiAwICh6ZXJvKS4NCj4gPiA+ID4gLSAqLw0KPiA+ID4gPiAt c3RhdGljIGludCBuZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpyYXcsDQo+ID4gPiA+IC0J CQkJICAgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YQ0KPiA+ID4gPiAqbW50KQ0KPiA+ID4g PiAtew0KPiA+ID4gPiAtCWNoYXIgKnAsICpzdHJpbmc7DQo+ID4gPiA+IC0JaW50IHJjLCBzbG9w cHkgPSAwLCBpbnZhbGlkX29wdGlvbiA9IDA7DQo+ID4gPiA+IC0JdW5zaWduZWQgc2hvcnQgcHJv dG9mYW1pbHkgPSBBRl9VTlNQRUM7DQo+ID4gPiA+IC0JdW5zaWduZWQgc2hvcnQgbW91bnRmYW1p bHkgPSBBRl9VTlNQRUM7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlpZiAoIXJhdykgew0KPiA+ID4g PiAtCQlkZnByaW50ayhNT1VOVCwgIk5GUzogbW91bnQgb3B0aW9ucyBzdHJpbmcgd2FzDQo+ID4g PiA+IE5VTEwuXG4iKTsNCj4gPiA+ID4gLQkJcmV0dXJuIDE7DQo+ID4gPiA+IC0JfQ0KPiA+ID4g PiAtCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBuZnMgbW91bnQgb3B0cz0nJXMnXG4iLCByYXcpOw0K PiA+ID4gPiAtDQo+ID4gPiA+IC0JcmMgPSBzZWN1cml0eV9zYl9lYXRfbHNtX29wdHMocmF3LCAm bW50LT5sc21fb3B0cyk7DQo+ID4gPiA+IC0JaWYgKHJjKQ0KPiA+ID4gPiAtCQlnb3RvIG91dF9z ZWN1cml0eV9mYWlsdXJlOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0Jd2hpbGUgKChwID0gc3Ryc2Vw KCZyYXcsICIsIikpICE9IE5VTEwpIHsNCj4gPiA+ID4gLQkJc3Vic3RyaW5nX3QgYXJnc1tNQVhf T1BUX0FSR1NdOw0KPiA+ID4gPiAtCQl1bnNpZ25lZCBsb25nIG9wdGlvbjsNCj4gPiA+ID4gLQkJ aW50IHRva2VuOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCWlmICghKnApDQo+ID4gPiA+IC0JCQlj b250aW51ZTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQlkZnByaW50ayhNT1VOVCwgIk5GUzogICBw YXJzaW5nIG5mcyBtb3VudA0KPiA+ID4gPiBvcHRpb24NCj4gPiA+ID4gJyVzJ1xuIiwgcCk7DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLQkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCBuZnNfbW91bnRfb3B0 aW9uX3Rva2VucywNCj4gPiA+ID4gYXJncyk7DQo+ID4gPiA+IC0JCXN3aXRjaCAodG9rZW4pIHsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQkvKg0KPiA+ID4gPiAtCQkgKiBib29sZWFuIG9wdGlvbnM6 ICBmb28vbm9mb28NCj4gPiA+ID4gLQkJICovDQo+ID4gPiA+IC0JCWNhc2UgT3B0X3NvZnQ6DQo+ ID4gPiA+IC0JCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9TT0ZUOw0KPiA+ID4gPiAtCQkJbW50 LT5mbGFncyAmPSB+TkZTX01PVU5UX1NPRlRFUlI7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ ID4gLQkJY2FzZSBPcHRfc29mdGVycjoNCj4gPiA+ID4gLQkJCW1udC0+ZmxhZ3MgfD0gTkZTX01P VU5UX1NPRlRFUlI7DQo+ID4gPiA+IC0JCQltbnQtPmZsYWdzICY9IH5ORlNfTU9VTlRfU09GVDsN Cj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9oYXJkOg0KPiA+ID4gPiAt CQkJbW50LT5mbGFncyAmPQ0KPiA+ID4gPiB+KE5GU19NT1VOVF9TT0ZUfE5GU19NT1VOVF9TT0ZU RVJSKTsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9wb3NpeDoNCj4g PiA+ID4gLQkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX1BPU0lYOw0KPiA+ID4gPiAtCQkJYnJl YWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X25vcG9zaXg6DQo+ID4gPiA+IC0JCQltbnQtPmZsYWdz ICY9IH5ORlNfTU9VTlRfUE9TSVg7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2Fz ZSBPcHRfY3RvOg0KPiA+ID4gPiAtCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX05PQ1RPOw0K PiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X25vY3RvOg0KPiA+ID4gPiAt CQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTk9DVE87DQo+ID4gPiA+IC0JCQlicmVhazsNCj4g PiA+ID4gLQkJY2FzZSBPcHRfYWM6DQo+ID4gPiA+IC0JCQltbnQtPmZsYWdzICY9IH5ORlNfTU9V TlRfTk9BQzsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9ub2FjOg0K PiA+ID4gPiAtCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTk9BQzsNCj4gPiA+ID4gLQkJCWJy ZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9sb2NrOg0KPiA+ID4gPiAtCQkJbW50LT5mbGFncyAm PSB+TkZTX01PVU5UX05PTkxNOw0KPiA+ID4gPiAtCQkJbW50LT5mbGFncyAmPSB+KE5GU19NT1VO VF9MT0NBTF9GTE9DSyB8DQo+ID4gPiA+IC0JCQkJCU5GU19NT1VOVF9MT0NBTF9GQ05UTCk7DQo+ ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbm9sb2NrOg0KPiA+ID4gPiAt CQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTk9OTE07DQo+ID4gPiA+IC0JCQltbnQtPmZsYWdz IHw9IChORlNfTU9VTlRfTE9DQUxfRkxPQ0sgfA0KPiA+ID4gPiAtCQkJCSAgICAgICBORlNfTU9V TlRfTE9DQUxfRkNOVEwpOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0 X3VkcDoNCj4gPiA+ID4gLQkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9UQ1A7DQo+ID4gPiA+ IC0JCQltbnQtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPQ0KPiA+ID4gPiBYUFJUX1RSQU5TUE9SVF9V RFA7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfdGNwOg0KPiA+ID4g PiAtCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfVENQOw0KPiA+ID4gPiAtCQkJbW50LT5uZnNf c2VydmVyLnByb3RvY29sID0NCj4gPiA+ID4gWFBSVF9UUkFOU1BPUlRfVENQOw0KPiA+ID4gPiAt CQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X3JkbWE6DQo+ID4gPiA+IC0JCQltbnQtPmZs YWdzIHw9IE5GU19NT1VOVF9UQ1A7IC8qIGZvcg0KPiA+ID4gPiBzaWRlDQo+ID4gPiA+IHByb3Rv Y29scyAqLw0KPiA+ID4gPiAtCQkJbW50LT5uZnNfc2VydmVyLnByb3RvY29sID0NCj4gPiA+ID4g WFBSVF9UUkFOU1BPUlRfUkRNQTsNCj4gPiA+ID4gLQkJCXhwcnRfbG9hZF90cmFuc3BvcnQocCk7 DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfYWNsOg0KPiA+ID4gPiAt CQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX05PQUNMOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ ID4gPiA+IC0JCWNhc2UgT3B0X25vYWNsOg0KPiA+ID4gPiAtCQkJbW50LT5mbGFncyB8PSBORlNf TU9VTlRfTk9BQ0w7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfcmRp cnBsdXM6DQo+ID4gPiA+IC0JCQltbnQtPmZsYWdzICY9IH5ORlNfTU9VTlRfTk9SRElSUExVUzsN Cj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9ub3JkaXJwbHVzOg0KPiA+ ID4gPiAtCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTk9SRElSUExVUzsNCj4gPiA+ID4gLQkJ CWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9zaGFyZWNhY2hlOg0KPiA+ID4gPiAtCQkJbW50 LT5mbGFncyAmPSB+TkZTX01PVU5UX1VOU0hBUkVEOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4g PiA+IC0JCWNhc2UgT3B0X25vc2hhcmVjYWNoZToNCj4gPiA+ID4gLQkJCW1udC0+ZmxhZ3MgfD0g TkZTX01PVU5UX1VOU0hBUkVEOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2Ug T3B0X3Jlc3Zwb3J0Og0KPiA+ID4gPiAtCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX05PUkVT VlBPUlQ7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbm9yZXN2cG9y dDoNCj4gPiA+ID4gLQkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PUkVTVlBPUlQ7DQo+ID4g PiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfZnNjYWNoZToNCj4gPiA+ID4gLQkJ CW1udC0+b3B0aW9ucyB8PSBORlNfT1BUSU9OX0ZTQ0FDSEU7DQo+ID4gPiA+IC0JCQlrZnJlZSht bnQtPmZzY2FjaGVfdW5pcSk7DQo+ID4gPiA+IC0JCQltbnQtPmZzY2FjaGVfdW5pcSA9IE5VTEw7 DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbm9mc2NhY2hlOg0KPiA+ ID4gPiAtCQkJbW50LT5vcHRpb25zICY9IH5ORlNfT1BUSU9OX0ZTQ0FDSEU7DQo+ID4gPiA+IC0J CQlrZnJlZShtbnQtPmZzY2FjaGVfdW5pcSk7DQo+ID4gPiA+IC0JCQltbnQtPmZzY2FjaGVfdW5p cSA9IE5VTEw7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbWlncmF0 aW9uOg0KPiA+ID4gPiAtCQkJbW50LT5vcHRpb25zIHw9IE5GU19PUFRJT05fTUlHUkFUSU9OOw0K PiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X25vbWlncmF0aW9uOg0KPiA+ ID4gPiAtCQkJbW50LT5vcHRpb25zICY9IH5ORlNfT1BUSU9OX01JR1JBVElPTjsNCj4gPiA+ID4g LQkJCWJyZWFrOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCS8qDQo+ID4gPiA+IC0JCSAqIG9wdGlv bnMgdGhhdCB0YWtlIG51bWVyaWMgdmFsdWVzDQo+ID4gPiA+IC0JCSAqLw0KPiA+ID4gPiAtCQlj YXNlIE9wdF9wb3J0Og0KPiA+ID4gPiAtCQkJaWYgKG5mc19nZXRfb3B0aW9uX3VsKGFyZ3MsICZv cHRpb24pIHx8DQo+ID4gPiA+IC0JCQkgICAgb3B0aW9uID4gVVNIUlRfTUFYKQ0KPiA+ID4gPiAt CQkJCWdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ID4gPiA+IC0JCQltbnQtPm5mc19zZXJ2ZXIu cG9ydCA9IG9wdGlvbjsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9y c2l6ZToNCj4gPiA+ID4gLQkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSkN Cj4gPiA+ID4gLQkJCQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiAtCQkJbW50LT5y c2l6ZSA9IG9wdGlvbjsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF93 c2l6ZToNCj4gPiA+ID4gLQkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSkN Cj4gPiA+ID4gLQkJCQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiAtCQkJbW50LT53 c2l6ZSA9IG9wdGlvbjsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9i c2l6ZToNCj4gPiA+ID4gLQkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSkN Cj4gPiA+ID4gLQkJCQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiAtCQkJbW50LT5i c2l6ZSA9IG9wdGlvbjsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF90 aW1lbzoNCj4gPiA+ID4gLQkJCWlmIChuZnNfZ2V0X29wdGlvbl91bF9ib3VuZChhcmdzLA0KPiA+ ID4gPiAmb3B0aW9uLCAxLA0KPiA+ID4gPiBJTlRfTUFYKSkNCj4gPiA+ID4gLQkJCQlnb3RvIG91 dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiAtCQkJbW50LT50aW1lbyA9IG9wdGlvbjsNCj4gPiA+ ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9yZXRyYW5zOg0KPiA+ID4gPiAtCQkJ aWYgKG5mc19nZXRfb3B0aW9uX3VsX2JvdW5kKGFyZ3MsDQo+ID4gPiA+ICZvcHRpb24sIDAsDQo+ ID4gPiA+IElOVF9NQVgpKQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ ID4gPiA+IC0JCQltbnQtPnJldHJhbnMgPSBvcHRpb247DQo+ID4gPiA+IC0JCQlicmVhazsNCj4g PiA+ID4gLQkJY2FzZSBPcHRfYWNyZWdtaW46DQo+ID4gPiA+IC0JCQlpZiAobmZzX2dldF9vcHRp b25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+IC0JCQkJZ290byBvdXRfaW52YWxpZF92YWx1 ZTsNCj4gPiA+ID4gLQkJCW1udC0+YWNyZWdtaW4gPSBvcHRpb247DQo+ID4gPiA+IC0JCQlicmVh azsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfYWNyZWdtYXg6DQo+ID4gPiA+IC0JCQlpZiAobmZzX2dl dF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+IC0JCQkJZ290byBvdXRfaW52YWxp ZF92YWx1ZTsNCj4gPiA+ID4gLQkJCW1udC0+YWNyZWdtYXggPSBvcHRpb247DQo+ID4gPiA+IC0J CQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfYWNkaXJtaW46DQo+ID4gPiA+IC0JCQlpZiAo bmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+IC0JCQkJZ290byBvdXRf aW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gLQkJCW1udC0+YWNkaXJtaW4gPSBvcHRpb247DQo+ID4g PiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfYWNkaXJtYXg6DQo+ID4gPiA+IC0J CQlpZiAobmZzX2dldF9vcHRpb25fdWwoYXJncywgJm9wdGlvbikpDQo+ID4gPiA+IC0JCQkJZ290 byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gLQkJCW1udC0+YWNkaXJtYXggPSBvcHRpb247 DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfYWN0aW1lbzoNCj4gPiA+ ID4gLQkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSkNCj4gPiA+ID4gLQkJ CQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiAtCQkJbW50LT5hY3JlZ21pbiA9IG1u dC0+YWNyZWdtYXggPQ0KPiA+ID4gPiAtCQkJbW50LT5hY2Rpcm1pbiA9IG1udC0+YWNkaXJtYXgg PSBvcHRpb247DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbmFtZWxl bjoNCj4gPiA+ID4gLQkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSkNCj4g PiA+ID4gLQkJCQlnb3RvIG91dF9pbnZhbGlkX3ZhbHVlOw0KPiA+ID4gPiAtCQkJbW50LT5uYW1s ZW4gPSBvcHRpb247DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbW91 bnRwb3J0Og0KPiA+ID4gPiAtCQkJaWYgKG5mc19nZXRfb3B0aW9uX3VsKGFyZ3MsICZvcHRpb24p IHx8DQo+ID4gPiA+IC0JCQkgICAgb3B0aW9uID4gVVNIUlRfTUFYKQ0KPiA+ID4gPiAtCQkJCWdv dG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ID4gPiA+IC0JCQltbnQtPm1vdW50X3NlcnZlci5wb3J0 ID0gb3B0aW9uOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X21vdW50 dmVyczoNCj4gPiA+ID4gLQkJCWlmIChuZnNfZ2V0X29wdGlvbl91bChhcmdzLCAmb3B0aW9uKSB8 fA0KPiA+ID4gPiAtCQkJICAgIG9wdGlvbiA8IE5GU19NTlRfVkVSU0lPTiB8fA0KPiA+ID4gPiAt CQkJICAgIG9wdGlvbiA+IE5GU19NTlQzX1ZFUlNJT04pDQo+ID4gPiA+IC0JCQkJZ290byBvdXRf aW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gLQkJCW1udC0+bW91bnRfc2VydmVyLnZlcnNpb24gPSBv cHRpb247DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbWlub3J2ZXJz aW9uOg0KPiA+ID4gPiAtCQkJaWYgKG5mc19nZXRfb3B0aW9uX3VsKGFyZ3MsICZvcHRpb24pKQ0K PiA+ID4gPiAtCQkJCWdvdG8gb3V0X2ludmFsaWRfdmFsdWU7DQo+ID4gPiA+IC0JCQlpZiAob3B0 aW9uID4gTkZTNF9NQVhfTUlOT1JfVkVSU0lPTikNCj4gPiA+ID4gLQkJCQlnb3RvIG91dF9pbnZh bGlkX3ZhbHVlOw0KPiA+ID4gPiAtCQkJbW50LT5taW5vcnZlcnNpb24gPSBvcHRpb247DQo+ID4g PiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQkvKg0KPiA+ID4gPiAtCQkgKiBv cHRpb25zIHRoYXQgdGFrZSB0ZXh0IHZhbHVlcw0KPiA+ID4gPiAtCQkgKi8NCj4gPiA+ID4gLQkJ Y2FzZSBPcHRfbmZzdmVyczoNCj4gPiA+ID4gLQkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdz KTsNCj4gPiA+ID4gLQkJCWlmIChzdHJpbmcgPT0gTlVMTCkNCj4gPiA+ID4gLQkJCQlnb3RvIG91 dF9ub21lbTsNCj4gPiA+ID4gLQkJCXJjID0gbmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKHN0cmlu ZywNCj4gPiA+ID4gbW50LA0KPiA+ID4gPiBhcmdzKTsNCj4gPiA+ID4gLQkJCWtmcmVlKHN0cmlu Zyk7DQo+ID4gPiA+IC0JCQlpZiAoIXJjKQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X2ludmFsaWRf dmFsdWU7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfc2VjOg0KPiA+ ID4gPiAtCQkJc3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOw0KPiA+ID4gPiAtCQkJaWYgKHN0 cmluZyA9PSBOVUxMKQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X25vbWVtOw0KPiA+ID4gPiAtCQkJ cmMgPSBuZnNfcGFyc2Vfc2VjdXJpdHlfZmxhdm9ycyhzdHJpbmcsDQo+ID4gPiA+IG1udCk7DQo+ ID4gPiA+IC0JCQlrZnJlZShzdHJpbmcpOw0KPiA+ID4gPiAtCQkJaWYgKCFyYykgew0KPiA+ID4g PiAtCQkJCWRmcHJpbnRrKE1PVU5ULA0KPiA+ID4gPiAiTkZTOiAgIHVucmVjb2duaXplZCAiDQo+ ID4gPiA+IC0JCQkJCQkic2VjdXJpdHkNCj4gPiA+ID4gZmxhdm9yXG4iKTsNCj4gPiA+ID4gLQkJ CQlyZXR1cm4gMDsNCj4gPiA+ID4gLQkJCX0NCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAt CQljYXNlIE9wdF9wcm90bzoNCj4gPiA+ID4gLQkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdz KTsNCj4gPiA+ID4gLQkJCWlmIChzdHJpbmcgPT0gTlVMTCkNCj4gPiA+ID4gLQkJCQlnb3RvIG91 dF9ub21lbTsNCj4gPiA+ID4gLQkJCXRva2VuID0gbWF0Y2hfdG9rZW4oc3RyaW5nLA0KPiA+ID4g PiAtCQkJCQkgICAgbmZzX3hwcnRfcHJvdG9jb2xfdA0KPiA+ID4gPiBva2VucywNCj4gPiA+ID4g YXJncyk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkJCXByb3RvZmFtaWx5ID0gQUZfSU5FVDsNCj4g PiA+ID4gLQkJCXN3aXRjaCAodG9rZW4pIHsNCj4gPiA+ID4gLQkJCWNhc2UgT3B0X3hwcnRfdWRw NjoNCj4gPiA+ID4gLQkJCQlwcm90b2ZhbWlseSA9IEFGX0lORVQ2Ow0KPiA+ID4gPiAtCQkJCS8q IGZhbGwgdGhyb3VnaCAqLw0KPiA+ID4gPiAtCQkJY2FzZSBPcHRfeHBydF91ZHA6DQo+ID4gPiA+ IC0JCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX1RDUDsNCj4gPiA+ID4gLQkJCQltbnQtPm5m c19zZXJ2ZXIucHJvdG9jb2wgPQ0KPiA+ID4gPiBYUFJUX1RSQU5TUE9SVF9VRFA7DQo+ID4gPiA+ IC0JCQkJYnJlYWs7DQo+ID4gPiA+IC0JCQljYXNlIE9wdF94cHJ0X3RjcDY6DQo+ID4gPiA+IC0J CQkJcHJvdG9mYW1pbHkgPSBBRl9JTkVUNjsNCj4gPiA+ID4gLQkJCQkvKiBmYWxsIHRocm91Z2gg Ki8NCj4gPiA+ID4gLQkJCWNhc2UgT3B0X3hwcnRfdGNwOg0KPiA+ID4gPiAtCQkJCW1udC0+Zmxh Z3MgfD0gTkZTX01PVU5UX1RDUDsNCj4gPiA+ID4gLQkJCQltbnQtPm5mc19zZXJ2ZXIucHJvdG9j b2wgPQ0KPiA+ID4gPiBYUFJUX1RSQU5TUE9SVF9UQ1A7DQo+ID4gPiA+IC0JCQkJYnJlYWs7DQo+ ID4gPiA+IC0JCQljYXNlIE9wdF94cHJ0X3JkbWE2Og0KPiA+ID4gPiAtCQkJCXByb3RvZmFtaWx5 ID0gQUZfSU5FVDY7DQo+ID4gPiA+IC0JCQkJLyogZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+IC0J CQljYXNlIE9wdF94cHJ0X3JkbWE6DQo+ID4gPiA+IC0JCQkJLyogdmVjdG9yIHNpZGUgcHJvdG9j b2xzIHRvIFRDUA0KPiA+ID4gPiAqLw0KPiA+ID4gPiAtCQkJCW1udC0+ZmxhZ3MgfD0gTkZTX01P VU5UX1RDUDsNCj4gPiA+ID4gLQkJCQltbnQtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPQ0KPiA+ID4g PiBYUFJUX1RSQU5TUE9SVF9SRE1BOw0KPiA+ID4gPiAtCQkJCXhwcnRfbG9hZF90cmFuc3BvcnQo c3RyaW5nKTsNCj4gPiA+ID4gLQkJCQlicmVhazsNCj4gPiA+ID4gLQkJCWRlZmF1bHQ6DQo+ID4g PiA+IC0JCQkJZGZwcmludGsoTU9VTlQsDQo+ID4gPiA+ICJORlM6ICAgdW5yZWNvZ25pemVkICIN Cj4gPiA+ID4gLQkJCQkJCSJ0cmFuc3BvcnQNCj4gPiA+ID4gcHJvdG9jb2xcbiIpOw0KPiA+ID4g PiAtCQkJCWtmcmVlKHN0cmluZyk7DQo+ID4gPiA+IC0JCQkJcmV0dXJuIDA7DQo+ID4gPiA+IC0J CQl9DQo+ID4gPiA+IC0JCQlrZnJlZShzdHJpbmcpOw0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4g PiA+IC0JCWNhc2UgT3B0X21vdW50cHJvdG86DQo+ID4gPiA+IC0JCQlzdHJpbmcgPSBtYXRjaF9z dHJkdXAoYXJncyk7DQo+ID4gPiA+IC0JCQlpZiAoc3RyaW5nID09IE5VTEwpDQo+ID4gPiA+IC0J CQkJZ290byBvdXRfbm9tZW07DQo+ID4gPiA+IC0JCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmlu ZywNCj4gPiA+ID4gLQkJCQkJICAgIG5mc194cHJ0X3Byb3RvY29sX3QNCj4gPiA+ID4gb2tlbnMs DQo+ID4gPiA+IGFyZ3MpOw0KPiA+ID4gPiAtCQkJa2ZyZWUoc3RyaW5nKTsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtCQkJbW91bnRmYW1pbHkgPSBBRl9JTkVUOw0KPiA+ID4gPiAtCQkJc3dpdGNoICh0 b2tlbikgew0KPiA+ID4gPiAtCQkJY2FzZSBPcHRfeHBydF91ZHA2Og0KPiA+ID4gPiAtCQkJCW1v dW50ZmFtaWx5ID0gQUZfSU5FVDY7DQo+ID4gPiA+IC0JCQkJLyogZmFsbCB0aHJvdWdoICovDQo+ ID4gPiA+IC0JCQljYXNlIE9wdF94cHJ0X3VkcDoNCj4gPiA+ID4gLQkJCQltbnQtPm1vdW50X3Nl cnZlci5wcm90b2NvbCA9DQo+ID4gPiA+IFhQUlRfVFJBTlNQT1JUX1VEUDsNCj4gPiA+ID4gLQkJ CQlicmVhazsNCj4gPiA+ID4gLQkJCWNhc2UgT3B0X3hwcnRfdGNwNjoNCj4gPiA+ID4gLQkJCQlt b3VudGZhbWlseSA9IEFGX0lORVQ2Ow0KPiA+ID4gPiAtCQkJCS8qIGZhbGwgdGhyb3VnaCAqLw0K PiA+ID4gPiAtCQkJY2FzZSBPcHRfeHBydF90Y3A6DQo+ID4gPiA+IC0JCQkJbW50LT5tb3VudF9z ZXJ2ZXIucHJvdG9jb2wgPQ0KPiA+ID4gPiBYUFJUX1RSQU5TUE9SVF9UQ1A7DQo+ID4gPiA+IC0J CQkJYnJlYWs7DQo+ID4gPiA+IC0JCQljYXNlIE9wdF94cHJ0X3JkbWE6IC8qIG5vdCB1c2VkIGZv cg0KPiA+ID4gPiBzaWRlDQo+ID4gPiA+IHByb3RvY29scyAqLw0KPiA+ID4gPiAtCQkJZGVmYXVs dDoNCj4gPiA+ID4gLQkJCQlkZnByaW50ayhNT1VOVCwNCj4gPiA+ID4gIk5GUzogICB1bnJlY29n bml6ZWQgIg0KPiA+ID4gPiAtCQkJCQkJInRyYW5zcG9ydA0KPiA+ID4gPiBwcm90b2NvbFxuIik7 DQo+ID4gPiA+IC0JCQkJcmV0dXJuIDA7DQo+ID4gPiA+IC0JCQl9DQo+ID4gPiA+IC0JCQlicmVh azsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfYWRkcjoNCj4gPiA+ID4gLQkJCXN0cmluZyA9IG1hdGNo X3N0cmR1cChhcmdzKTsNCj4gPiA+ID4gLQkJCWlmIChzdHJpbmcgPT0gTlVMTCkNCj4gPiA+ID4g LQkJCQlnb3RvIG91dF9ub21lbTsNCj4gPiA+ID4gLQkJCW1udC0+bmZzX3NlcnZlci5hZGRybGVu ID0NCj4gPiA+ID4gLQkJCQlycGNfcHRvbihtbnQtPm5ldCwgc3RyaW5nLA0KPiA+ID4gPiBzdHJs ZW4oc3RyaW5nKSwNCj4gPiA+ID4gLQkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKQ0KPiA+ID4gPiAt CQkJCQkmbW50LQ0KPiA+ID4gPiA+bmZzX3NlcnZlci5hZGRyZXNzLA0KPiA+ID4gPiAtCQkJCQlz aXplb2YobW50LQ0KPiA+ID4gPiA+IG5mc19zZXJ2ZXIuYWRkcmVzcykpOw0KPiA+ID4gPiAtCQkJ a2ZyZWUoc3RyaW5nKTsNCj4gPiA+ID4gLQkJCWlmIChtbnQtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9 PSAwKQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X2ludmFsaWRfYWRkcmVzczsNCj4gPiA+ID4gLQkJ CWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9wdF9jbGllbnRhZGRyOg0KPiA+ID4gPiAtCQkJaWYg KG5mc19nZXRfb3B0aW9uX3N0cihhcmdzLCAmbW50LQ0KPiA+ID4gPiA+IGNsaWVudF9hZGRyZXNz KSkNCj4gPiA+ID4gLQkJCQlnb3RvIG91dF9ub21lbTsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ ID4gPiAtCQljYXNlIE9wdF9tb3VudGhvc3Q6DQo+ID4gPiA+IC0JCQlpZiAobmZzX2dldF9vcHRp b25fc3RyKGFyZ3MsDQo+ID4gPiA+IC0JCQkJCSAgICAgICAmbW50LQ0KPiA+ID4gPiA+IG1vdW50 X3NlcnZlci5ob3N0bmFtZSkpDQo+ID4gPiA+IC0JCQkJZ290byBvdXRfbm9tZW07DQo+ID4gPiA+ IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbW91bnRhZGRyOg0KPiA+ID4gPiAtCQkJ c3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOw0KPiA+ID4gPiAtCQkJaWYgKHN0cmluZyA9PSBO VUxMKQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X25vbWVtOw0KPiA+ID4gPiAtCQkJbW50LT5tb3Vu dF9zZXJ2ZXIuYWRkcmxlbiA9DQo+ID4gPiA+IC0JCQkJcnBjX3B0b24obW50LT5uZXQsIHN0cmlu ZywNCj4gPiA+ID4gc3RybGVuKHN0cmluZyksDQo+ID4gPiA+IC0JCQkJCShzdHJ1Y3Qgc29ja2Fk ZHIgKikNCj4gPiA+ID4gLQkJCQkJJm1udC0NCj4gPiA+ID4gPm1vdW50X3NlcnZlci5hZGRyZXNz LA0KPiA+ID4gPiAtCQkJCQlzaXplb2YobW50LQ0KPiA+ID4gPiA+IG1vdW50X3NlcnZlci5hZGRy ZXNzKSk7DQo+ID4gPiA+IC0JCQlrZnJlZShzdHJpbmcpOw0KPiA+ID4gPiAtCQkJaWYgKG1udC0+ bW91bnRfc2VydmVyLmFkZHJsZW4gPT0gMCkNCj4gPiA+ID4gLQkJCQlnb3RvIG91dF9pbnZhbGlk X2FkZHJlc3M7DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2FzZSBPcHRfbmNvbm5l Y3Q6DQo+ID4gPiA+IC0JCQlpZiAobmZzX2dldF9vcHRpb25fdWxfYm91bmQoYXJncywNCj4gPiA+ ID4gJm9wdGlvbiwgMSwNCj4gPiA+ID4gTkZTX01BWF9DT05ORUNUSU9OUykpDQo+ID4gPiA+IC0J CQkJZ290byBvdXRfaW52YWxpZF92YWx1ZTsNCj4gPiA+ID4gLQkJCW1udC0+bmZzX3NlcnZlci5u Y29ubmVjdCA9IG9wdGlvbjsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtCQljYXNlIE9w dF9sb29rdXBjYWNoZToNCj4gPiA+ID4gLQkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsN Cj4gPiA+ID4gLQkJCWlmIChzdHJpbmcgPT0gTlVMTCkNCj4gPiA+ID4gLQkJCQlnb3RvIG91dF9u b21lbTsNCj4gPiA+ID4gLQkJCXRva2VuID0gbWF0Y2hfdG9rZW4oc3RyaW5nLA0KPiA+ID4gPiAt CQkJCQluZnNfbG9va3VwY2FjaGVfdG9rZW5zLA0KPiA+ID4gPiBhcmdzKTsNCj4gPiA+ID4gLQkJ CWtmcmVlKHN0cmluZyk7DQo+ID4gPiA+IC0JCQlzd2l0Y2ggKHRva2VuKSB7DQo+ID4gPiA+IC0J CQkJY2FzZSBPcHRfbG9va3VwY2FjaGVfYWxsOg0KPiA+ID4gPiAtCQkJCQltbnQtPmZsYWdzICY9 DQo+ID4gPiA+IH4oTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FR3xORlNfTU9VTlRfTE9PS1VQ X0NBQ0hFX05PTkUpOw0KPiA+ID4gPiAtCQkJCQlicmVhazsNCj4gPiA+ID4gLQkJCQljYXNlIE9w dF9sb29rdXBjYWNoZV9wb3NpdGl2ZToNCj4gPiA+ID4gLQkJCQkJbW50LT5mbGFncyAmPQ0KPiA+ ID4gPiB+TkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FOw0KPiA+ID4gPiAtCQkJCQltbnQtPmZs YWdzIHw9DQo+ID4gPiA+IE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUc7DQo+ID4gPiA+IC0J CQkJCWJyZWFrOw0KPiA+ID4gPiAtCQkJCWNhc2UgT3B0X2xvb2t1cGNhY2hlX25vbmU6DQo+ID4g PiA+IC0JCQkJCW1udC0+ZmxhZ3MgfD0NCj4gPiA+ID4gTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9O T05FR3xORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkU7DQo+ID4gPiA+IC0JCQkJCWJyZWFrOw0K PiA+ID4gPiAtCQkJCWRlZmF1bHQ6DQo+ID4gPiA+IC0JCQkJCWRmcHJpbnRrKE1PVU5ULA0KPiA+ ID4gPiAiTkZTOiAgIGludmFsaWQNCj4gPiA+ID4gIg0KPiA+ID4gPiAtCQkJCQkJCSJsb29rdXAN Cj4gPiA+ID4gY2FjaGUNCj4gPiA+ID4gYXJndW1lbnRcbiIpOw0KPiA+ID4gPiAtCQkJCQlyZXR1 cm4gMDsNCj4gPiA+ID4gLQkJCX07DQo+ID4gPiA+IC0JCQlicmVhazsNCj4gPiA+ID4gLQkJY2Fz ZSBPcHRfZnNjYWNoZV91bmlxOg0KPiA+ID4gPiAtCQkJaWYgKG5mc19nZXRfb3B0aW9uX3N0cihh cmdzLCAmbW50LQ0KPiA+ID4gPiA+IGZzY2FjaGVfdW5pcSkpDQo+ID4gPiA+IC0JCQkJZ290byBv dXRfbm9tZW07DQo+ID4gPiA+IC0JCQltbnQtPm9wdGlvbnMgfD0gTkZTX09QVElPTl9GU0NBQ0hF Ow0KPiA+ID4gPiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X2xvY2FsX2xvY2s6DQo+ ID4gPiA+IC0JCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7DQo+ID4gPiA+IC0JCQlpZiAo c3RyaW5nID09IE5VTEwpDQo+ID4gPiA+IC0JCQkJZ290byBvdXRfbm9tZW07DQo+ID4gPiA+IC0J CQl0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywNCj4gPiA+ID4gbmZzX2xvY2FsX2xvY2tfdG9r ZW5zLA0KPiA+ID4gPiAtCQkJCQlhcmdzKTsNCj4gPiA+ID4gLQkJCWtmcmVlKHN0cmluZyk7DQo+ ID4gPiA+IC0JCQlzd2l0Y2ggKHRva2VuKSB7DQo+ID4gPiA+IC0JCQljYXNlIE9wdF9sb2NhbF9s b2NrX2FsbDoNCj4gPiA+ID4gLQkJCQltbnQtPmZsYWdzIHw9DQo+ID4gPiA+IChORlNfTU9VTlRf TE9DQUxfRkxPQ0sgfA0KPiA+ID4gPiAtCQkJCQkgICAgICAgTkZTX01PVU5UX0xPQ0FMXw0KPiA+ ID4gPiBGQ05UTCk7DQo+ID4gPiA+IC0JCQkJYnJlYWs7DQo+ID4gPiA+IC0JCQljYXNlIE9wdF9s b2NhbF9sb2NrX2Zsb2NrOg0KPiA+ID4gPiAtCQkJCW1udC0+ZmxhZ3MgfD0NCj4gPiA+ID4gTkZT X01PVU5UX0xPQ0FMX0ZMT0NLOw0KPiA+ID4gPiAtCQkJCWJyZWFrOw0KPiA+ID4gPiAtCQkJY2Fz ZSBPcHRfbG9jYWxfbG9ja19wb3NpeDoNCj4gPiA+ID4gLQkJCQltbnQtPmZsYWdzIHw9DQo+ID4g PiA+IE5GU19NT1VOVF9MT0NBTF9GQ05UTDsNCj4gPiA+ID4gLQkJCQlicmVhazsNCj4gPiA+ID4g LQkJCWNhc2UgT3B0X2xvY2FsX2xvY2tfbm9uZToNCj4gPiA+ID4gLQkJCQltbnQtPmZsYWdzICY9 DQo+ID4gPiA+IH4oTkZTX01PVU5UX0xPQ0FMX0ZMT0NLIHwNCj4gPiA+ID4gLQkJCQkJCU5GU19N T1VOVF9MT0NBTA0KPiA+ID4gPiBfRkNOVEwpOw0KPiA+ID4gPiAtCQkJCWJyZWFrOw0KPiA+ID4g PiAtCQkJZGVmYXVsdDoNCj4gPiA+ID4gLQkJCQlkZnByaW50ayhNT1VOVCwgIk5GUzoJaW52YWxp ZA0KPiA+ID4gPiAJIg0KPiA+ID4gPiAtCQkJCQkJImxvY2FsX2xvY2sNCj4gPiA+ID4gYXJndW1l bnRcbiIpOw0KPiA+ID4gPiAtCQkJCXJldHVybiAwOw0KPiA+ID4gPiAtCQkJfTsNCj4gPiA+ID4g LQkJCWJyZWFrOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCS8qDQo+ID4gPiA+IC0JCSAqIFNwZWNp YWwgb3B0aW9ucw0KPiA+ID4gPiAtCQkgKi8NCj4gPiA+ID4gLQkJY2FzZSBPcHRfc2xvcHB5Og0K PiA+ID4gPiAtCQkJc2xvcHB5ID0gMTsNCj4gPiA+ID4gLQkJCWRmcHJpbnRrKE1PVU5ULCAiTkZT OiAgIHJlbGF4aW5nDQo+ID4gPiA+IHBhcnNpbmcNCj4gPiA+ID4gcnVsZXNcbiIpOw0KPiA+ID4g PiAtCQkJYnJlYWs7DQo+ID4gPiA+IC0JCWNhc2UgT3B0X3VzZXJzcGFjZToNCj4gPiA+ID4gLQkJ Y2FzZSBPcHRfZGVwcmVjYXRlZDoNCj4gPiA+ID4gLQkJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiAg IGlnbm9yaW5nIG1vdW50DQo+ID4gPiA+IG9wdGlvbiAiDQo+ID4gPiA+IC0JCQkJCSInJXMnXG4i LCBwKTsNCj4gPiA+ID4gLQkJCWJyZWFrOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCWRlZmF1bHQ6 DQo+ID4gPiA+IC0JCQlpbnZhbGlkX29wdGlvbiA9IDE7DQo+ID4gPiA+IC0JCQlkZnByaW50ayhN T1VOVCwgIk5GUzogICB1bnJlY29nbml6ZWQNCj4gPiA+ID4gbW91bnQNCj4gPiA+ID4gb3B0aW9u ICINCj4gPiA+ID4gLQkJCQkJIiclcydcbiIsIHApOw0KPiA+ID4gPiAtCQl9DQo+ID4gPiA+IC0J fQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JaWYgKCFzbG9wcHkgJiYgaW52YWxpZF9vcHRpb24pDQo+ ID4gPiA+IC0JCXJldHVybiAwOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JaWYgKG1udC0+bWlub3J2 ZXJzaW9uICYmIG1udC0+dmVyc2lvbiAhPSA0KQ0KPiA+ID4gPiAtCQlnb3RvIG91dF9taW5vcnZl cnNpb25fbWlzbWF0Y2g7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlpZiAobW50LT5vcHRpb25zICYg TkZTX09QVElPTl9NSUdSQVRJT04gJiYNCj4gPiA+ID4gLQkgICAgKG1udC0+dmVyc2lvbiAhPSA0 IHx8IG1udC0+bWlub3J2ZXJzaW9uICE9IDApKQ0KPiA+ID4gPiAtCQlnb3RvIG91dF9taWdyYXRp b25fbWlzdXNlOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JLyoNCj4gPiA+ID4gLQkgKiB2ZXJpZnkg dGhhdCBhbnkgcHJvdG89L21vdW50cHJvdG89IG9wdGlvbnMgbWF0Y2ggdGhlDQo+ID4gPiA+IGFk ZHJlc3MNCj4gPiA+ID4gLQkgKiBmYW1pbGllcyBpbiB0aGUgYWRkcj0vbW91bnRhZGRyPSBvcHRp b25zLg0KPiA+ID4gPiAtCSAqLw0KPiA+ID4gPiAtCWlmIChwcm90b2ZhbWlseSAhPSBBRl9VTlNQ RUMgJiYNCj4gPiA+ID4gLQkgICAgcHJvdG9mYW1pbHkgIT0gbW50LT5uZnNfc2VydmVyLmFkZHJl c3Muc3NfZmFtaWx5KQ0KPiA+ID4gPiAtCQlnb3RvIG91dF9wcm90b19taXNtYXRjaDsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtCWlmIChtb3VudGZhbWlseSAhPSBBRl9VTlNQRUMpIHsNCj4gPiA+ID4g LQkJaWYgKG1udC0+bW91bnRfc2VydmVyLmFkZHJsZW4pIHsNCj4gPiA+ID4gLQkJCWlmIChtb3Vu dGZhbWlseSAhPSBtbnQtDQo+ID4gPiA+ID4gbW91bnRfc2VydmVyLmFkZHJlc3Muc3NfZmFtaWx5 KQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X21vdW50cHJvdG9fbWlzbWF0Y2g7DQo+ID4gPiA+IC0J CX0gZWxzZSB7DQo+ID4gPiA+IC0JCQlpZiAobW91bnRmYW1pbHkgIT0gbW50LQ0KPiA+ID4gPiA+ IG5mc19zZXJ2ZXIuYWRkcmVzcy5zc19mYW1pbHkpDQo+ID4gPiA+IC0JCQkJZ290byBvdXRfbW91 bnRwcm90b19taXNtYXRjaDsNCj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLQ0K PiA+ID4gPiAtCXJldHVybiAxOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC1vdXRfbW91bnRwcm90b19t aXNtYXRjaDoNCj4gPiA+ID4gLQlwcmludGsoS0VSTl9JTkZPICJORlM6IG1vdW50IHNlcnZlciBh ZGRyZXNzIGRvZXMgbm90DQo+ID4gPiA+IG1hdGNoDQo+ID4gPiA+IG1vdW50cHJvdG89ICINCj4g PiA+ID4gLQkJCSAib3B0aW9uXG4iKTsNCj4gPiA+ID4gLQlyZXR1cm4gMDsNCj4gPiA+ID4gLW91 dF9wcm90b19taXNtYXRjaDoNCj4gPiA+ID4gLQlwcmludGsoS0VSTl9JTkZPICJORlM6IHNlcnZl ciBhZGRyZXNzIGRvZXMgbm90IG1hdGNoDQo+ID4gPiA+IHByb3RvPQ0KPiA+ID4gPiBvcHRpb25c biIpOw0KPiA+ID4gPiAtCXJldHVybiAwOw0KPiA+ID4gPiAtb3V0X2ludmFsaWRfYWRkcmVzczoN Cj4gPiA+ID4gLQlwcmludGsoS0VSTl9JTkZPICJORlM6IGJhZCBJUCBhZGRyZXNzIHNwZWNpZmll ZDogJXNcbiIsDQo+ID4gPiA+IHApOw0KPiA+ID4gPiAtCXJldHVybiAwOw0KPiA+ID4gPiAtb3V0 X2ludmFsaWRfdmFsdWU6DQo+ID4gPiA+IC0JcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBiYWQgbW91 bnQgb3B0aW9uIHZhbHVlDQo+ID4gPiA+IHNwZWNpZmllZDogJXNcbiIsDQo+ID4gPiA+IHApOw0K PiA+ID4gPiAtCXJldHVybiAwOw0KPiA+ID4gPiAtb3V0X21pbm9ydmVyc2lvbl9taXNtYXRjaDoN Cj4gPiA+ID4gLQlwcmludGsoS0VSTl9JTkZPICJORlM6IG1vdW50IG9wdGlvbiB2ZXJzPSV1IGRv ZXMgbm90DQo+ID4gPiA+IHN1cHBvcnQgIg0KPiA+ID4gPiAtCQkJICJtaW5vcnZlcnNpb249JXVc biIsIG1udC0+dmVyc2lvbiwNCj4gPiA+ID4gbW50LQ0KPiA+ID4gPiA+IG1pbm9ydmVyc2lvbik7 DQo+ID4gPiA+IC0JcmV0dXJuIDA7DQo+ID4gPiA+IC1vdXRfbWlncmF0aW9uX21pc3VzZToNCj4g PiA+ID4gLQlwcmludGsoS0VSTl9JTkZPDQo+ID4gPiA+IC0JCSJORlM6ICdtaWdyYXRpb24nIG5v dCBzdXBwb3J0ZWQgZm9yIHRoaXMgTkZTDQo+ID4gPiA+IHZlcnNpb25cbiIpOw0KPiA+ID4gPiAt CXJldHVybiAwOw0KPiA+ID4gPiAtb3V0X25vbWVtOg0KPiA+ID4gPiAtCXByaW50ayhLRVJOX0lO Rk8gIk5GUzogbm90IGVub3VnaCBtZW1vcnkgdG8gcGFyc2UNCj4gPiA+ID4gb3B0aW9uXG4iKTsN Cj4gPiA+ID4gLQlyZXR1cm4gMDsNCj4gPiA+ID4gLW91dF9zZWN1cml0eV9mYWlsdXJlOg0KPiA+ ID4gPiAtCXByaW50ayhLRVJOX0lORk8gIk5GUzogc2VjdXJpdHkgb3B0aW9ucyBpbnZhbGlkOiAl ZFxuIiwNCj4gPiA+ID4gcmMpOw0KPiA+ID4gPiAtCXJldHVybiAwOw0KPiA+ID4gPiAtfQ0KPiA+ ID4gPiAtDQo+ID4gPiA+IC8qDQo+ID4gPiA+ICAqIEVuc3VyZSB0aGF0IGEgc3BlY2lmaWVkIGF1 dGh0eXBlIGluIGFyZ3MtPmF1dGhfaW5mbyBpcw0KPiA+ID4gPiBzdXBwb3J0ZWQNCj4gPiA+ID4g YnkNCj4gPiA+ID4gICogdGhlIHNlcnZlci4gUmV0dXJucyAwIGFuZCBzZXRzIGFyZ3MtPnNlbGVj dGVkX2ZsYXZvciBpZiBpdCdzDQo+ID4gPiA+IG9rLA0KPiA+ID4gPiBhbmQNCj4gPiA+ID4gQEAg LTE5MDgsMzI3ICs5MjUsNiBAQCBzdHJ1Y3QgZGVudHJ5ICpuZnNfdHJ5X21vdW50KGludCBmbGFn cywNCj4gPiA+ID4gY29uc3QgY2hhciAqZGV2X25hbWUsDQo+ID4gPiA+IH0NCj4gPiA+ID4gRVhQ T1JUX1NZTUJPTF9HUEwobmZzX3RyeV9tb3VudCk7DQo+ID4gPiA+IA0KPiA+ID4gPiAtLyoNCj4g PiA+ID4gLSAqIFNwbGl0ICJkZXZfbmFtZSIgaW50byAiaG9zdG5hbWU6ZXhwb3J0X3BhdGgiLg0K PiA+ID4gPiAtICoNCj4gPiA+ID4gLSAqIFRoZSBsZWZ0bW9zdCBjb2xvbiBkZW1hcmtzIHRoZSBz cGxpdCBiZXR3ZWVuIHRoZSBzZXJ2ZXIncw0KPiA+ID4gPiBob3N0bmFtZQ0KPiA+ID4gPiAtICog YW5kIHRoZSBleHBvcnQgcGF0aC4gIElmIHRoZSBob3N0bmFtZSBzdGFydHMgd2l0aCBhIGxlZnQN Cj4gPiA+ID4gc3F1YXJlDQo+ID4gPiA+IC0gKiBicmFja2V0LCB0aGVuIGl0IG1heSBjb250YWlu IGNvbG9ucy4NCj4gPiA+ID4gLSAqDQo+ID4gPiA+IC0gKiBOb3RlOiBjYWxsZXIgZnJlZXMgaG9z dG5hbWUgYW5kIGV4cG9ydCBwYXRoLCBldmVuIG9uIGVycm9yLg0KPiA+ID4gPiAtICovDQo+ID4g PiA+IC1zdGF0aWMgaW50IG5mc19wYXJzZV9kZXZuYW1lKGNvbnN0IGNoYXIgKmRldl9uYW1lLA0K PiA+ID4gPiAtCQkJICAgICBjaGFyICoqaG9zdG5hbWUsIHNpemVfdCBtYXhuYW1sZW4sDQo+ID4g PiA+IC0JCQkgICAgIGNoYXIgKipleHBvcnRfcGF0aCwgc2l6ZV90DQo+ID4gPiA+IG1heHBhdGhs ZW4pDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0Jc2l6ZV90IGxlbjsNCj4gPiA+ID4gLQljaGFyICpl bmQ7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlpZiAodW5saWtlbHkoIWRldl9uYW1lIHx8ICEqZGV2 X25hbWUpKSB7DQo+ID4gPiA+IC0JCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBkZXZpY2UgbmFtZSBu b3QNCj4gPiA+ID4gc3BlY2lmaWVkXG4iKTsNCj4gPiA+ID4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gPiA+IC0JfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JLyogSXMgdGhlIGhvc3QgbmFtZSBwcm90 ZWN0ZWQgd2l0aCBzcXVhcmUgYnJha2NldHM/ICovDQo+ID4gPiA+IC0JaWYgKCpkZXZfbmFtZSA9 PSAnWycpIHsNCj4gPiA+ID4gLQkJZW5kID0gc3RyY2hyKCsrZGV2X25hbWUsICddJyk7DQo+ID4g PiA+IC0JCWlmIChlbmQgPT0gTlVMTCB8fCBlbmRbMV0gIT0gJzonKQ0KPiA+ID4gPiAtCQkJZ290 byBvdXRfYmFkX2Rldm5hbWU7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkJbGVuID0gZW5kIC0gZGV2 X25hbWU7DQo+ID4gPiA+IC0JCWVuZCsrOw0KPiA+ID4gPiAtCX0gZWxzZSB7DQo+ID4gPiA+IC0J CWNoYXIgKmNvbW1hOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCWVuZCA9IHN0cmNocihkZXZfbmFt ZSwgJzonKTsNCj4gPiA+ID4gLQkJaWYgKGVuZCA9PSBOVUxMKQ0KPiA+ID4gPiAtCQkJZ290byBv dXRfYmFkX2Rldm5hbWU7DQo+ID4gPiA+IC0JCWxlbiA9IGVuZCAtIGRldl9uYW1lOw0KPiA+ID4g PiAtDQo+ID4gPiA+IC0JCS8qIGtpbGwgcG9zc2libGUgaG9zdG5hbWUgbGlzdDogbm90IHN1cHBv cnRlZA0KPiA+ID4gPiAqLw0KPiA+ID4gPiAtCQljb21tYSA9IHN0cmNocihkZXZfbmFtZSwgJywn KTsNCj4gPiA+ID4gLQkJaWYgKGNvbW1hICE9IE5VTEwgJiYgY29tbWEgPCBlbmQpDQo+ID4gPiA+ IC0JCQlsZW4gPSBjb21tYSAtIGRldl9uYW1lOw0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtCWlmIChsZW4gPiBtYXhuYW1sZW4pDQo+ID4gPiA+IC0JCWdvdG8gb3V0X2hvc3RuYW1l Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JLyogTi5CLiBjYWxsZXIgd2lsbCBmcmVlIG5mc19zZXJ2 ZXIuaG9zdG5hbWUgaW4gYWxsDQo+ID4gPiA+IGNhc2VzICovDQo+ID4gPiA+IC0JKmhvc3RuYW1l ID0ga3N0cm5kdXAoZGV2X25hbWUsIGxlbiwgR0ZQX0tFUk5FTCk7DQo+ID4gPiA+IC0JaWYgKCpo b3N0bmFtZSA9PSBOVUxMKQ0KPiA+ID4gPiAtCQlnb3RvIG91dF9ub21lbTsNCj4gPiA+ID4gLQls ZW4gPSBzdHJsZW4oKytlbmQpOw0KPiA+ID4gPiAtCWlmIChsZW4gPiBtYXhwYXRobGVuKQ0KPiA+ ID4gPiAtCQlnb3RvIG91dF9wYXRoOw0KPiA+ID4gPiAtCSpleHBvcnRfcGF0aCA9IGtzdHJuZHVw KGVuZCwgbGVuLCBHRlBfS0VSTkVMKTsNCj4gPiA+ID4gLQlpZiAoISpleHBvcnRfcGF0aCkNCj4g PiA+ID4gLQkJZ290byBvdXRfbm9tZW07DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlkZnByaW50ayhN T1VOVCwgIk5GUzogTU5UUEFUSDogJyVzJ1xuIiwgKmV4cG9ydF9wYXRoKTsNCj4gPiA+ID4gLQly ZXR1cm4gMDsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtb3V0X2JhZF9kZXZuYW1lOg0KPiA+ID4gPiAt CWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBkZXZpY2UgbmFtZSBub3QgaW4gaG9zdDpwYXRoDQo+ID4g PiA+IGZvcm1hdFxuIik7DQo+ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0NCj4g PiA+ID4gLW91dF9ub21lbToNCj4gPiA+ID4gLQlkZnByaW50ayhNT1VOVCwgIk5GUzogbm90IGVu b3VnaCBtZW1vcnkgdG8gcGFyc2UgZGV2aWNlDQo+ID4gPiA+IG5hbWVcbiIpOw0KPiA+ID4gPiAt CXJldHVybiAtRU5PTUVNOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC1vdXRfaG9zdG5hbWU6DQo+ID4g PiA+IC0JZGZwcmludGsoTU9VTlQsICJORlM6IHNlcnZlciBob3N0bmFtZSB0b28gbG9uZ1xuIik7 DQo+ID4gPiA+IC0JcmV0dXJuIC1FTkFNRVRPT0xPTkc7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLW91 dF9wYXRoOg0KPiA+ID4gPiAtCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBleHBvcnQgcGF0aG5hbWUg dG9vIGxvbmdcbiIpOw0KPiA+ID4gPiAtCXJldHVybiAtRU5BTUVUT09MT05HOw0KPiA+ID4gPiAt fQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKg0KPiA+ID4gPiAtICogVmFsaWRhdGUgdGhlIE5GUzIv TkZTMyBtb3VudCBkYXRhDQo+ID4gPiA+IC0gKiAtIGZpbGxzIGluIHRoZSBtb3VudCByb290IGZp bGVoYW5kbGUNCj4gPiA+ID4gLSAqDQo+ID4gPiA+IC0gKiBGb3Igb3B0aW9uIHN0cmluZ3MsIHVz ZXIgc3BhY2UgaGFuZGxlcyB0aGUgZm9sbG93aW5nDQo+ID4gPiA+IGJlaGF2aW9yczoNCj4gPiA+ ID4gLSAqDQo+ID4gPiA+IC0gKiArIEROUzogbWFwcGluZyBzZXJ2ZXIgaG9zdCBuYW1lIHRvIElQ IGFkZHJlc3MgKCJhZGRyPSINCj4gPiA+ID4gb3B0aW9uKQ0KPiA+ID4gPiAtICoNCj4gPiA+ID4g LSAqICsgZmFpbHVyZSBtb2RlOiBob3cgdG8gYmVoYXZlIGlmIGEgbW91bnQgcmVxdWVzdCBjYW4n dCBiZQ0KPiA+ID4gPiBoYW5kbGVkDQo+ID4gPiA+IC0gKiAgIGltbWVkaWF0ZWx5ICgiZmcvYmci IG9wdGlvbikNCj4gPiA+ID4gLSAqDQo+ID4gPiA+IC0gKiArIHJldHJ5OiBob3cgb2Z0ZW4gdG8g cmV0cnkgYSBtb3VudCByZXF1ZXN0ICgicmV0cnk9Ig0KPiA+ID4gPiBvcHRpb24pDQo+ID4gPiA+ IC0gKg0KPiA+ID4gPiAtICogKyBicmVha2luZyBiYWNrOiB0cnlpbmcgcHJvdG89dWRwIGFmdGVy IHByb3RvPXRjcCwgdjIgYWZ0ZXINCj4gPiA+ID4gdjMsDQo+ID4gPiA+IC0gKiAgIG1vdW50cHJv dG89dGNwIGFmdGVyIG1vdW50cHJvdG89dWRwLCBhbmQgc28gb24NCj4gPiA+ID4gLSAqLw0KPiA+ ID4gPiAtc3RhdGljIGludCBuZnMyM192YWxpZGF0ZV9tb3VudF9kYXRhKHZvaWQgKm9wdGlvbnMs DQo+ID4gPiA+IC0JCQkJICAgICBzdHJ1Y3QNCj4gPiA+ID4gbmZzX3BhcnNlZF9tb3VudF9kYXRh DQo+ID4gPiA+ICphcmdzLA0KPiA+ID4gPiAtCQkJCSAgICAgc3RydWN0IG5mc19maCAqbW50Zmgs DQo+ID4gPiA+IC0JCQkJICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gPiA+ID4gLXsNCj4g PiA+ID4gLQlzdHJ1Y3QgbmZzX21vdW50X2RhdGEgKmRhdGEgPSAoc3RydWN0IG5mc19tb3VudF9k YXRhDQo+ID4gPiA+ICopb3B0aW9uczsNCj4gPiA+ID4gLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9 IChzdHJ1Y3Qgc29ja2FkZHIgKikmYXJncy0NCj4gPiA+ID4gPiBuZnNfc2VydmVyLmFkZHJlc3M7 DQo+ID4gPiA+IC0JaW50IGV4dHJhX2ZsYWdzID0gTkZTX01PVU5UX0xFR0FDWV9JTlRFUkZBQ0U7 DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlpZiAoZGF0YSA9PSBOVUxMKQ0KPiA+ID4gPiAtCQlnb3Rv IG91dF9ub19kYXRhOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JYXJncy0+dmVyc2lvbiA9IE5GU19E RUZBVUxUX1ZFUlNJT047DQo+ID4gPiA+IC0Jc3dpdGNoIChkYXRhLT52ZXJzaW9uKSB7DQo+ID4g PiA+IC0JY2FzZSAxOg0KPiA+ID4gPiAtCQlkYXRhLT5uYW1sZW4gPSAwOyAvKiBmYWxsIHRocm91 Z2ggKi8NCj4gPiA+ID4gLQljYXNlIDI6DQo+ID4gPiA+IC0JCWRhdGEtPmJzaXplID0gMDsgLyog ZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+IC0JY2FzZSAzOg0KPiA+ID4gPiAtCQlpZiAoZGF0YS0+ ZmxhZ3MgJiBORlNfTU9VTlRfVkVSMykNCj4gPiA+ID4gLQkJCWdvdG8gb3V0X25vX3YzOw0KPiA+ ID4gPiAtCQlkYXRhLT5yb290LnNpemUgPSBORlMyX0ZIU0laRTsNCj4gPiA+ID4gLQkJbWVtY3B5 KGRhdGEtPnJvb3QuZGF0YSwgZGF0YS0+b2xkX3Jvb3QuZGF0YSwNCj4gPiA+ID4gTkZTMl9GSFNJ WkUpOw0KPiA+ID4gPiAtCQkvKiBUdXJuIG9mZiBzZWN1cml0eSBuZWdvdGlhdGlvbiAqLw0KPiA+ ID4gPiAtCQlleHRyYV9mbGFncyB8PSBORlNfTU9VTlRfU0VDRkxBVk9VUjsNCj4gPiA+ID4gLQkJ LyogZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+IC0JY2FzZSA0Og0KPiA+ID4gPiAtCQlpZiAoZGF0 YS0+ZmxhZ3MgJiBORlNfTU9VTlRfU0VDRkxBVk9VUikNCj4gPiA+ID4gLQkJCWdvdG8gb3V0X25v X3NlYzsNCj4gPiA+ID4gLQkJLyogZmFsbCB0aHJvdWdoICovDQo+ID4gPiA+IC0JY2FzZSA1Og0K PiA+ID4gPiAtCQltZW1zZXQoZGF0YS0+Y29udGV4dCwgMCwgc2l6ZW9mKGRhdGEtDQo+ID4gPiA+ ID5jb250ZXh0KSk7DQo+ID4gPiA+IC0JCS8qIGZhbGwgdGhyb3VnaCAqLw0KPiA+ID4gPiAtCWNh c2UgNjoNCj4gPiA+ID4gLQkJaWYgKGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX1ZFUjMpIHsNCj4g PiA+ID4gLQkJCWlmIChkYXRhLT5yb290LnNpemUgPiBORlMzX0ZIU0laRSB8fA0KPiA+ID4gPiBk YXRhLQ0KPiA+ID4gPiA+IHJvb3Quc2l6ZSA9PSAwKQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X2lu dmFsaWRfZmg7DQo+ID4gPiA+IC0JCQltbnRmaC0+c2l6ZSA9IGRhdGEtPnJvb3Quc2l6ZTsNCj4g PiA+ID4gLQkJCWFyZ3MtPnZlcnNpb24gPSAzOw0KPiA+ID4gPiAtCQl9IGVsc2Ugew0KPiA+ID4g PiAtCQkJbW50ZmgtPnNpemUgPSBORlMyX0ZIU0laRTsNCj4gPiA+ID4gLQkJCWFyZ3MtPnZlcnNp b24gPSAyOw0KPiA+ID4gPiAtCQl9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQlt ZW1jcHkobW50ZmgtPmRhdGEsIGRhdGEtPnJvb3QuZGF0YSwgbW50ZmgtDQo+ID4gPiA+ID5zaXpl KTsNCj4gPiA+ID4gLQkJaWYgKG1udGZoLT5zaXplIDwgc2l6ZW9mKG1udGZoLT5kYXRhKSkNCj4g PiA+ID4gLQkJCW1lbXNldChtbnRmaC0+ZGF0YSArIG1udGZoLT5zaXplLCAwLA0KPiA+ID4gPiAt CQkJICAgICAgIHNpemVvZihtbnRmaC0+ZGF0YSkgLSBtbnRmaC0NCj4gPiA+ID4gPnNpemUpOw0K PiA+ID4gPiAtDQo+ID4gPiA+IC0JCS8qDQo+ID4gPiA+IC0JCSAqIFRyYW5zbGF0ZSB0byBuZnNf cGFyc2VkX21vdW50X2RhdGEsIHdoaWNoDQo+ID4gPiA+IG5mc19maWxsX3N1cGVyDQo+ID4gPiA+ IC0JCSAqIGNhbiBkZWFsIHdpdGguDQo+ID4gPiA+IC0JCSAqLw0KPiA+ID4gPiAtCQlhcmdzLT5m bGFncwkJPSBkYXRhLT5mbGFncyAmDQo+ID4gPiA+IE5GU19NT1VOVF9GTEFHTUFTSzsNCj4gPiA+ ID4gLQkJYXJncy0+ZmxhZ3MJCXw9IGV4dHJhX2ZsYWdzOw0KPiA+ID4gPiAtCQlhcmdzLT5yc2l6 ZQkJPSBkYXRhLT5yc2l6ZTsNCj4gPiA+ID4gLQkJYXJncy0+d3NpemUJCT0gZGF0YS0+d3NpemU7 DQo+ID4gPiA+IC0JCWFyZ3MtPnRpbWVvCQk9IGRhdGEtPnRpbWVvOw0KPiA+ID4gPiAtCQlhcmdz LT5yZXRyYW5zCQk9IGRhdGEtPnJldHJhbnM7DQo+ID4gPiA+IC0JCWFyZ3MtPmFjcmVnbWluCQk9 IGRhdGEtPmFjcmVnbWluOw0KPiA+ID4gPiAtCQlhcmdzLT5hY3JlZ21heAkJPSBkYXRhLT5hY3Jl Z21heDsNCj4gPiA+ID4gLQkJYXJncy0+YWNkaXJtaW4JCT0gZGF0YS0+YWNkaXJtaW47DQo+ID4g PiA+IC0JCWFyZ3MtPmFjZGlybWF4CQk9IGRhdGEtPmFjZGlybWF4Ow0KPiA+ID4gPiAtCQlhcmdz LT5uZWVkX21vdW50CT0gZmFsc2U7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkJbWVtY3B5KHNhcCwg JmRhdGEtPmFkZHIsIHNpemVvZihkYXRhLT5hZGRyKSk7DQo+ID4gPiA+IC0JCWFyZ3MtPm5mc19z ZXJ2ZXIuYWRkcmxlbiA9IHNpemVvZihkYXRhLT5hZGRyKTsNCj4gPiA+ID4gLQkJYXJncy0+bmZz X3NlcnZlci5wb3J0ID0gbnRvaHMoZGF0YS0NCj4gPiA+ID4gPmFkZHIuc2luX3BvcnQpOw0KPiA+ ID4gPiAtCQlpZiAoc2FwLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCB8fA0KPiA+ID4gPiAtCQkgICAg IW5mc192ZXJpZnlfc2VydmVyX2FkZHJlc3Moc2FwKSkNCj4gPiA+ID4gLQkJCWdvdG8gb3V0X25v X2FkZHJlc3M7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBORlNf TU9VTlRfVENQKSkNCj4gPiA+ID4gLQkJCWFyZ3MtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPQ0KPiA+ ID4gPiBYUFJUX1RSQU5TUE9SVF9VRFA7DQo+ID4gPiA+IC0JCS8qIE4uQi4gY2FsbGVyIHdpbGwg ZnJlZSBuZnNfc2VydmVyLmhvc3RuYW1lIGluDQo+ID4gPiA+IGFsbA0KPiA+ID4gPiBjYXNlcyAq Lw0KPiA+ID4gPiAtCQlhcmdzLT5uZnNfc2VydmVyLmhvc3RuYW1lID0ga3N0cmR1cChkYXRhLQ0K PiA+ID4gPiA+aG9zdG5hbWUsDQo+ID4gPiA+IEdGUF9LRVJORUwpOw0KPiA+ID4gPiAtCQlhcmdz LT5uYW1sZW4JCT0gZGF0YS0+bmFtbGVuOw0KPiA+ID4gPiAtCQlhcmdzLT5ic2l6ZQkJPSBkYXRh LT5ic2l6ZTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQlpZiAoZGF0YS0+ZmxhZ3MgJiBORlNfTU9V TlRfU0VDRkxBVk9VUikNCj4gPiA+ID4gLQkJCWFyZ3MtPnNlbGVjdGVkX2ZsYXZvciA9IGRhdGEt DQo+ID4gPiA+ID5wc2V1ZG9mbGF2b3I7DQo+ID4gPiA+IC0JCWVsc2UNCj4gPiA+ID4gLQkJCWFy Z3MtPnNlbGVjdGVkX2ZsYXZvciA9IFJQQ19BVVRIX1VOSVg7DQo+ID4gPiA+IC0JCWlmICghYXJn cy0+bmZzX3NlcnZlci5ob3N0bmFtZSkNCj4gPiA+ID4gLQkJCWdvdG8gb3V0X25vbWVtOw0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0JCWlmICghKGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX05PTkxNKSkN Cj4gPiA+ID4gLQkJCWFyZ3MtPmZsYWdzICY9IH4oTkZTX01PVU5UX0xPQ0FMX0ZMT0NLfA0KPiA+ ID4gPiAtCQkJCQkgTkZTX01PVU5UX0xPQ0FMX0ZDTlRMKQ0KPiA+ID4gPiA7DQo+ID4gPiA+IC0J CWVsc2UNCj4gPiA+ID4gLQkJCWFyZ3MtPmZsYWdzIHw9IChORlNfTU9VTlRfTE9DQUxfRkxPQ0t8 DQo+ID4gPiA+IC0JCQkJCU5GU19NT1VOVF9MT0NBTF9GQ05UTCk7DQo+ID4gPiA+IC0JCS8qDQo+ ID4gPiA+IC0JCSAqIFRoZSBsZWdhY3kgdmVyc2lvbiA2IGJpbmFyeSBtb3VudCBkYXRhIGZyb20N Cj4gPiA+ID4gdXNlcnNwYWNlIGhhcyBhDQo+ID4gPiA+IC0JCSAqIGZpZWxkIHVzZWQgb25seSB0 byB0cmFuc3BvcnQgc2VsaW51eA0KPiA+ID4gPiBpbmZvcm1hdGlvbg0KPiA+ID4gPiBpbnRvIHRo ZQ0KPiA+ID4gPiAtCQkgKiB0aGUga2VybmVsLiAgVG8gY29udGludWUgdG8gc3VwcG9ydCB0aGF0 DQo+ID4gPiA+IGZ1bmN0aW9uYWxpdHkgd2UNCj4gPiA+ID4gLQkJICogaGF2ZSBhIHRvdWNoIG9m IHNlbGludXgga25vd2xlZGdlIGhlcmUgaW4NCj4gPiA+ID4gdGhlIE5GUw0KPiA+ID4gPiBjb2Rl LiBUaGUNCj4gPiA+ID4gLQkJICogdXNlcnNwYWNlIGNvZGUgY29udmVydGVkIGNvbnRleHQ9Ymxh aCB0bw0KPiA+ID4gPiBqdXN0IGJsYWgNCj4gPiA+ID4gc28gd2UgYXJlDQo+ID4gPiA+IC0JCSAq IGNvbnZlcnRpbmcgYmFjayB0byB0aGUgZnVsbCBzdHJpbmcgc2VsaW51eA0KPiA+ID4gPiB1bmRl cnN0YW5kcy4NCj4gPiA+ID4gLQkJICovDQo+ID4gPiA+IC0JCWlmIChkYXRhLT5jb250ZXh0WzBd KXsNCj4gPiA+ID4gLSNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWA0KPiA+ID4gPiAtCQkJ aW50IHJjOw0KPiA+ID4gPiAtCQkJZGF0YS0+Y29udGV4dFtORlNfTUFYX0NPTlRFWFRfTEVOXSA9 DQo+ID4gPiA+ICdcMCc7DQo+ID4gPiA+IC0JCQlyYyA9IHNlY3VyaXR5X2FkZF9tbnRfb3B0KCJj b250ZXh0IiwNCj4gPiA+ID4gZGF0YS0NCj4gPiA+ID4gPiBjb250ZXh0LA0KPiA+ID4gPiAtCQkJ CQlzdHJsZW4oZGF0YS0+Y29udGV4dCksDQo+ID4gPiA+ICZhcmdzLQ0KPiA+ID4gPiA+IGxzbV9v cHRzKTsNCj4gPiA+ID4gLQkJCWlmIChyYykNCj4gPiA+ID4gLQkJCQlyZXR1cm4gcmM7DQo+ID4g PiA+IC0jZWxzZQ0KPiA+ID4gPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0jZW5kaWYN Cj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCWJyZWFrOw0KPiA+ID4gPiAtCWRl ZmF1bHQ6DQo+ID4gPiA+IC0JCXJldHVybiBORlNfVEVYVF9EQVRBOw0KPiA+ID4gPiAtCX0NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtCXJldHVybiAwOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC1vdXRfbm9f ZGF0YToNCj4gPiA+ID4gLQlkZnByaW50ayhNT1VOVCwgIk5GUzogbW91bnQgcHJvZ3JhbSBkaWRu J3QgcGFzcyBhbnkNCj4gPiA+ID4gbW91bnQNCj4gPiA+ID4gZGF0YVxuIik7DQo+ID4gPiA+IC0J cmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLW91dF9ub192MzoNCj4gPiA+ID4g LQlkZnByaW50ayhNT1VOVCwgIk5GUzogbmZzX21vdW50X2RhdGEgdmVyc2lvbiAlZCBkb2VzDQo+ ID4gPiA+IG5vdA0KPiA+ID4gPiBzdXBwb3J0IHYzXG4iLA0KPiA+ID4gPiAtCQkgZGF0YS0+dmVy c2lvbik7DQo+ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLW91 dF9ub19zZWM6DQo+ID4gPiA+IC0JZGZwcmludGsoTU9VTlQsICJORlM6IG5mc19tb3VudF9kYXRh IHZlcnNpb24gc3VwcG9ydHMNCj4gPiA+ID4gb25seQ0KPiA+ID4gPiBBVVRIX1NZU1xuIik7DQo+ ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLW91dF9ub21lbToN Cj4gPiA+ID4gLQlkZnByaW50ayhNT1VOVCwgIk5GUzogbm90IGVub3VnaCBtZW1vcnkgdG8gaGFu ZGxlIG1vdW50DQo+ID4gPiA+IG9wdGlvbnNcbiIpOw0KPiA+ID4gPiAtCXJldHVybiAtRU5PTUVN Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC1vdXRfbm9fYWRkcmVzczoNCj4gPiA+ID4gLQlkZnByaW50 ayhNT1VOVCwgIk5GUzogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyByZW1vdGUNCj4gPiA+ID4g YWRkcmVzc1xuIik7DQo+ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0NCj4gPiA+ ID4gLW91dF9pbnZhbGlkX2ZoOg0KPiA+ID4gPiAtCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBpbnZh bGlkIHJvb3QgZmlsZWhhbmRsZVxuIik7DQo+ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4g PiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORlNfVjQp DQo+ID4gPiA+IC1zdGF0aWMgaW50IG5mc192YWxpZGF0ZV9tb3VudF9kYXRhKHN0cnVjdCBmaWxl X3N5c3RlbV90eXBlDQo+ID4gPiA+ICpmc190eXBlLA0KPiA+ID4gPiAtCQkJCSAgIHZvaWQgKm9w dGlvbnMsDQo+ID4gPiA+IC0JCQkJICAgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YQ0KPiA+ ID4gPiAqYXJncywNCj4gPiA+ID4gLQkJCQkgICBzdHJ1Y3QgbmZzX2ZoICptbnRmaCwNCj4gPiA+ ID4gLQkJCQkgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLQlp ZiAoZnNfdHlwZSA9PSAmbmZzX2ZzX3R5cGUpDQo+ID4gPiA+IC0JCXJldHVybiBuZnMyM192YWxp ZGF0ZV9tb3VudF9kYXRhKG9wdGlvbnMsIGFyZ3MsDQo+ID4gPiA+IG1udGZoLA0KPiA+ID4gPiBk ZXZfbmFtZSk7DQo+ID4gPiA+IC0JcmV0dXJuIG5mczRfdmFsaWRhdGVfbW91bnRfZGF0YShvcHRp b25zLCBhcmdzLA0KPiA+ID4gPiBkZXZfbmFtZSk7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0jZWxz ZQ0KPiA+ID4gPiAtc3RhdGljIGludCBuZnNfdmFsaWRhdGVfbW91bnRfZGF0YShzdHJ1Y3QgZmls ZV9zeXN0ZW1fdHlwZQ0KPiA+ID4gPiAqZnNfdHlwZSwNCj4gPiA+ID4gLQkJCQkgICB2b2lkICpv cHRpb25zLA0KPiA+ID4gPiAtCQkJCSAgIHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGENCj4g PiA+ID4gKmFyZ3MsDQo+ID4gPiA+IC0JCQkJICAgc3RydWN0IG5mc19maCAqbW50ZmgsDQo+ID4g PiA+IC0JCQkJICAgY29uc3QgY2hhciAqZGV2X25hbWUpDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0J cmV0dXJuIG5mczIzX3ZhbGlkYXRlX21vdW50X2RhdGEob3B0aW9ucywgYXJncywgbW50ZmgsDQo+ ID4gPiA+IGRldl9uYW1lKTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPiAt DQo+ID4gPiA+IC1zdGF0aWMgaW50IG5mc192YWxpZGF0ZV90ZXh0X21vdW50X2RhdGEodm9pZCAq b3B0aW9ucywNCj4gPiA+ID4gLQkJCQkJc3RydWN0DQo+ID4gPiA+IG5mc19wYXJzZWRfbW91bnRf ZGF0YQ0KPiA+ID4gPiAqYXJncywNCj4gPiA+ID4gLQkJCQkJY29uc3QgY2hhciAqZGV2X25hbWUp DQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JaW50IHBvcnQgPSAwOw0KPiA+ID4gPiAtCWludCBtYXhf bmFtZWxlbiA9IFBBR0VfU0laRTsNCj4gPiA+ID4gLQlpbnQgbWF4X3BhdGhsZW4gPSBORlNfTUFY UEFUSExFTjsNCj4gPiA+ID4gLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2Fk ZHIgKikmYXJncy0NCj4gPiA+ID4gPiBuZnNfc2VydmVyLmFkZHJlc3M7DQo+ID4gPiA+IC0NCj4g PiA+ID4gLQlpZiAobmZzX3BhcnNlX21vdW50X29wdGlvbnMoKGNoYXIgKilvcHRpb25zLCBhcmdz KSA9PQ0KPiA+ID4gPiAwKQ0KPiA+ID4gPiAtCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtCWlmICghbmZzX3ZlcmlmeV9zZXJ2ZXJfYWRkcmVzcyhzYXApKQ0KPiA+ID4gPiAt CQlnb3RvIG91dF9ub19hZGRyZXNzOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JaWYgKGFyZ3MtPnZl cnNpb24gPT0gNCkgew0KPiA+ID4gPiAtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GU19WNCkNCj4g PiA+ID4gLQkJaWYgKGFyZ3MtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPT0NCj4gPiA+ID4gWFBSVF9U UkFOU1BPUlRfUkRNQSkNCj4gPiA+ID4gLQkJCXBvcnQgPSBORlNfUkRNQV9QT1JUOw0KPiA+ID4g PiAtCQllbHNlDQo+ID4gPiA+IC0JCQlwb3J0ID0gTkZTX1BPUlQ7DQo+ID4gPiA+IC0JCW1heF9u YW1lbGVuID0gTkZTNF9NQVhOQU1MRU47DQo+ID4gPiA+IC0JCW1heF9wYXRobGVuID0gTkZTNF9N QVhQQVRITEVOOw0KPiA+ID4gPiAtCQluZnNfdmFsaWRhdGVfdHJhbnNwb3J0X3Byb3RvY29sKGFy Z3MpOw0KPiA+ID4gPiAtCQlpZiAoYXJncy0+bmZzX3NlcnZlci5wcm90b2NvbCA9PQ0KPiA+ID4g PiBYUFJUX1RSQU5TUE9SVF9VRFApDQo+ID4gPiA+IC0JCQlnb3RvIG91dF9pbnZhbGlkX3RyYW5z cG9ydF91ZHA7DQo+ID4gPiA+IC0JCW5mczRfdmFsaWRhdGVfbW91bnRfZmxhZ3MoYXJncyk7DQo+ ID4gPiA+IC0jZWxzZQ0KPiA+ID4gPiAtCQlnb3RvIG91dF92NF9ub3RfY29tcGlsZWQ7DQo+ID4g PiA+IC0jZW5kaWYgLyogQ09ORklHX05GU19WNCAqLw0KPiA+ID4gPiAtCX0gZWxzZSB7DQo+ID4g PiA+IC0JCW5mc19zZXRfbW91bnRfdHJhbnNwb3J0X3Byb3RvY29sKGFyZ3MpOw0KPiA+ID4gPiAt CQlpZiAoYXJncy0+bmZzX3NlcnZlci5wcm90b2NvbCA9PQ0KPiA+ID4gPiBYUFJUX1RSQU5TUE9S VF9SRE1BKQ0KPiA+ID4gPiAtCQkJcG9ydCA9IE5GU19SRE1BX1BPUlQ7DQo+ID4gPiA+IC0JfQ0K PiA+ID4gPiAtDQo+ID4gPiA+IC0JbmZzX3NldF9wb3J0KHNhcCwgJmFyZ3MtPm5mc19zZXJ2ZXIu cG9ydCwgcG9ydCk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlyZXR1cm4gbmZzX3BhcnNlX2Rldm5h bWUoZGV2X25hbWUsDQo+ID4gPiA+IC0JCQkJICAgJmFyZ3MtPm5mc19zZXJ2ZXIuaG9zdG5hbWUs DQo+ID4gPiA+IC0JCQkJICAgbWF4X25hbWVsZW4sDQo+ID4gPiA+IC0JCQkJICAgJmFyZ3MtDQo+ ID4gPiA+ID5uZnNfc2VydmVyLmV4cG9ydF9wYXRoLA0KPiA+ID4gPiAtCQkJCSAgIG1heF9wYXRo bGVuKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtI2lmICFJU19FTkFCTEVEKENPTkZJR19ORlNfVjQp DQo+ID4gPiA+IC1vdXRfdjRfbm90X2NvbXBpbGVkOg0KPiA+ID4gPiAtCWRmcHJpbnRrKE1PVU5U LCAiTkZTOiBORlN2NCBpcyBub3QgY29tcGlsZWQgaW50bw0KPiA+ID4gPiBrZXJuZWxcbiIpOw0K PiA+ID4gPiAtCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOw0KPiA+ID4gPiAtI2Vsc2UNCj4gPiA+ ID4gLW91dF9pbnZhbGlkX3RyYW5zcG9ydF91ZHA6DQo+ID4gPiA+IC0JZGZwcmludGsoTU9VTlQs ICJORlN2NDogVW5zdXBwb3J0ZWQgdHJhbnNwb3J0IHByb3RvY29sDQo+ID4gPiA+IHVkcFxuIik7 DQo+ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0jZW5kaWYgLyogIUNPTkZJR19O RlNfVjQgKi8NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtb3V0X25vX2FkZHJlc3M6DQo+ID4gPiA+IC0J ZGZwcmludGsoTU9VTlQsICJORlM6IG1vdW50IHByb2dyYW0gZGlkbid0IHBhc3MgcmVtb3RlDQo+ ID4gPiA+IGFkZHJlc3NcbiIpOw0KPiA+ID4gPiAtCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiAt fQ0KPiA+ID4gPiAtDQo+ID4gPiA+ICNkZWZpbmUgTkZTX1JFTU9VTlRfQ01QX0ZMQUdNQVNLIH4o TkZTX01PVU5UX0lOVFIgXA0KPiA+ID4gPiAJCXwgTkZTX01PVU5UX1NFQ1VSRSBcDQo+ID4gPiA+ IAkJfCBORlNfTU9VTlRfVENQIFwNCj4gPiA+ID4gQEAgLTI3MTksMTEzICsxNDE1LDYgQEAgbmZz X3ByZXBhcmVkX21vdW50KHN0cnVjdA0KPiA+ID4gPiBmaWxlX3N5c3RlbV90eXBlDQo+ID4gPiA+ ICpmc190eXBlLCBpbnQgZmxhZ3MsDQo+ID4gPiA+IA0KPiA+ID4gPiAjaWYgSVNfRU5BQkxFRChD T05GSUdfTkZTX1Y0KQ0KPiA+ID4gPiANCj4gPiA+ID4gLXN0YXRpYyB2b2lkIG5mczRfdmFsaWRh dGVfbW91bnRfZmxhZ3Moc3RydWN0DQo+ID4gPiA+IG5mc19wYXJzZWRfbW91bnRfZGF0YQ0KPiA+ ID4gPiAqYXJncykNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLQlhcmdzLT5mbGFncyAmPQ0KPiA+ID4g PiB+KE5GU19NT1VOVF9OT05MTXxORlNfTU9VTlRfTk9BQ0x8TkZTX01PVU5UX1ZFUjN8DQo+ID4g PiA+IC0JCQkgTkZTX01PVU5UX0xPQ0FMX0ZMT0NLfE5GU19NT1VOVF9MT0NBTF8NCj4gPiA+ID4g RkNOVEwpOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKg0KPiA+ID4gPiAtICog VmFsaWRhdGUgTkZTdjQgbW91bnQgb3B0aW9ucw0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC1zdGF0 aWMgaW50IG5mczRfdmFsaWRhdGVfbW91bnRfZGF0YSh2b2lkICpvcHRpb25zLA0KPiA+ID4gPiAt CQkJCSAgICBzdHJ1Y3QNCj4gPiA+ID4gbmZzX3BhcnNlZF9tb3VudF9kYXRhICphcmdzLA0KPiA+ ID4gPiAtCQkJCSAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkNCj4gPiA+ID4gLXsNCj4gPiA+ID4g LQlzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYXJncy0NCj4gPiA+ ID4gPiBuZnNfc2VydmVyLmFkZHJlc3M7DQo+ID4gPiA+IC0Jc3RydWN0IG5mczRfbW91bnRfZGF0 YSAqZGF0YSA9IChzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhDQo+ID4gPiA+ICopb3B0aW9uczsNCj4g PiA+ID4gLQljaGFyICpjOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JaWYgKGRhdGEgPT0gTlVMTCkN Cj4gPiA+ID4gLQkJZ290byBvdXRfbm9fZGF0YTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCWFyZ3Mt PnZlcnNpb24gPSA0Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0Jc3dpdGNoIChkYXRhLT52ZXJzaW9u KSB7DQo+ID4gPiA+IC0JY2FzZSAxOg0KPiA+ID4gPiAtCQlpZiAoZGF0YS0+aG9zdF9hZGRybGVu ID4gc2l6ZW9mKGFyZ3MtDQo+ID4gPiA+ID4gbmZzX3NlcnZlci5hZGRyZXNzKSkNCj4gPiA+ID4g LQkJCWdvdG8gb3V0X25vX2FkZHJlc3M7DQo+ID4gPiA+IC0JCWlmIChkYXRhLT5ob3N0X2FkZHJs ZW4gPT0gMCkNCj4gPiA+ID4gLQkJCWdvdG8gb3V0X25vX2FkZHJlc3M7DQo+ID4gPiA+IC0JCWFy Z3MtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9IGRhdGEtPmhvc3RfYWRkcmxlbjsNCj4gPiA+ID4gLQkJ aWYgKGNvcHlfZnJvbV91c2VyKHNhcCwgZGF0YS0+aG9zdF9hZGRyLCBkYXRhLQ0KPiA+ID4gPiA+ IGhvc3RfYWRkcmxlbikpDQo+ID4gPiA+IC0JCQlyZXR1cm4gLUVGQVVMVDsNCj4gPiA+ID4gLQkJ aWYgKCFuZnNfdmVyaWZ5X3NlcnZlcl9hZGRyZXNzKHNhcCkpDQo+ID4gPiA+IC0JCQlnb3RvIG91 dF9ub19hZGRyZXNzOw0KPiA+ID4gPiAtCQlhcmdzLT5uZnNfc2VydmVyLnBvcnQgPSBudG9ocygo KHN0cnVjdA0KPiA+ID4gPiBzb2NrYWRkcl9pbg0KPiA+ID4gPiAqKXNhcCktPnNpbl9wb3J0KTsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQlpZiAoZGF0YS0+YXV0aF9mbGF2b3VybGVuKSB7DQo+ID4g PiA+IC0JCQlycGNfYXV0aGZsYXZvcl90IHBzZXVkb2ZsYXZvcjsNCj4gPiA+ID4gLQkJCWlmIChk YXRhLT5hdXRoX2ZsYXZvdXJsZW4gPiAxKQ0KPiA+ID4gPiAtCQkJCWdvdG8gb3V0X2ludmFsX2F1 dGg7DQo+ID4gPiA+IC0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnBzZXVkb2ZsYXZvciwNCj4gPiA+ ID4gLQkJCQkJICAgZGF0YS0+YXV0aF9mbGF2b3VycywNCj4gPiA+ID4gLQkJCQkJICAgc2l6ZW9m KHBzZXVkb2ZsYXZvcikNCj4gPiA+ID4gKSkNCj4gPiA+ID4gLQkJCQlyZXR1cm4gLUVGQVVMVDsN Cj4gPiA+ID4gLQkJCWFyZ3MtPnNlbGVjdGVkX2ZsYXZvciA9IHBzZXVkb2ZsYXZvcjsNCj4gPiA+ ID4gLQkJfSBlbHNlDQo+ID4gPiA+IC0JCQlhcmdzLT5zZWxlY3RlZF9mbGF2b3IgPSBSUENfQVVU SF9VTklYOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCWMgPSBzdHJuZHVwX3VzZXIoZGF0YS0+aG9z dG5hbWUuZGF0YSwNCj4gPiA+ID4gTkZTNF9NQVhOQU1MRU4pOw0KPiA+ID4gPiAtCQlpZiAoSVNf RVJSKGMpKQ0KPiA+ID4gPiAtCQkJcmV0dXJuIFBUUl9FUlIoYyk7DQo+ID4gPiA+IC0JCWFyZ3Mt Pm5mc19zZXJ2ZXIuaG9zdG5hbWUgPSBjOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCWMgPSBzdHJu ZHVwX3VzZXIoZGF0YS0+bW50X3BhdGguZGF0YSwNCj4gPiA+ID4gTkZTNF9NQVhQQVRITEVOKTsN Cj4gPiA+ID4gLQkJaWYgKElTX0VSUihjKSkNCj4gPiA+ID4gLQkJCXJldHVybiBQVFJfRVJSKGMp Ow0KPiA+ID4gPiAtCQlhcmdzLT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoID0gYzsNCj4gPiA+ID4g LQkJZGZwcmludGsoTU9VTlQsICJORlM6IE1OVFBBVEg6ICclcydcbiIsIGMpOw0KPiA+ID4gPiAt DQo+ID4gPiA+IC0JCWMgPSBzdHJuZHVwX3VzZXIoZGF0YS0+Y2xpZW50X2FkZHIuZGF0YSwgMTYp Ow0KPiA+ID4gPiAtCQlpZiAoSVNfRVJSKGMpKQ0KPiA+ID4gPiAtCQkJcmV0dXJuIFBUUl9FUlIo Yyk7DQo+ID4gPiA+IC0JCWFyZ3MtPmNsaWVudF9hZGRyZXNzID0gYzsNCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtCQkvKg0KPiA+ID4gPiAtCQkgKiBUcmFuc2xhdGUgdG8gbmZzX3BhcnNlZF9tb3VudF9k YXRhLCB3aGljaA0KPiA+ID4gPiBuZnM0X2ZpbGxfc3VwZXINCj4gPiA+ID4gLQkJICogY2FuIGRl YWwgd2l0aC4NCj4gPiA+ID4gLQkJICovDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQkJYXJncy0+Zmxh Z3MJPSBkYXRhLT5mbGFncyAmDQo+ID4gPiA+IE5GUzRfTU9VTlRfRkxBR01BU0s7DQo+ID4gPiA+ IC0JCWFyZ3MtPnJzaXplCT0gZGF0YS0+cnNpemU7DQo+ID4gPiA+IC0JCWFyZ3MtPndzaXplCT0g ZGF0YS0+d3NpemU7DQo+ID4gPiA+IC0JCWFyZ3MtPnRpbWVvCT0gZGF0YS0+dGltZW87DQo+ID4g PiA+IC0JCWFyZ3MtPnJldHJhbnMJPSBkYXRhLT5yZXRyYW5zOw0KPiA+ID4gPiAtCQlhcmdzLT5h Y3JlZ21pbgk9IGRhdGEtPmFjcmVnbWluOw0KPiA+ID4gPiAtCQlhcmdzLT5hY3JlZ21heAk9IGRh dGEtPmFjcmVnbWF4Ow0KPiA+ID4gPiAtCQlhcmdzLT5hY2Rpcm1pbgk9IGRhdGEtPmFjZGlybWlu Ow0KPiA+ID4gPiAtCQlhcmdzLT5hY2Rpcm1heAk9IGRhdGEtPmFjZGlybWF4Ow0KPiA+ID4gPiAt CQlhcmdzLT5uZnNfc2VydmVyLnByb3RvY29sID0gZGF0YS0+cHJvdG87DQo+ID4gPiA+IC0JCW5m c192YWxpZGF0ZV90cmFuc3BvcnRfcHJvdG9jb2woYXJncyk7DQo+ID4gPiA+IC0JCWlmIChhcmdz LT5uZnNfc2VydmVyLnByb3RvY29sID09DQo+ID4gPiA+IFhQUlRfVFJBTlNQT1JUX1VEUCkNCj4g PiA+ID4gLQkJCWdvdG8gb3V0X2ludmFsaWRfdHJhbnNwb3J0X3VkcDsNCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtCQlicmVhazsNCj4gPiA+ID4gLQlkZWZhdWx0Og0KPiA+ID4gPiAtCQlyZXR1cm4gTkZT X1RFWFRfREFUQTsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlyZXR1cm4gMDsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtb3V0X25vX2RhdGE6DQo+ID4gPiA+IC0JZGZwcmludGsoTU9V TlQsICJORlM0OiBtb3VudCBwcm9ncmFtIGRpZG4ndCBwYXNzIGFueQ0KPiA+ID4gPiBtb3VudA0K PiA+ID4gPiBkYXRhXG4iKTsNCj4gPiA+ID4gLQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtb3V0X2ludmFsX2F1dGg6DQo+ID4gPiA+IC0JZGZwcmludGsoTU9VTlQsICJORlM0 OiBJbnZhbGlkIG51bWJlciBvZiBSUEMgYXV0aA0KPiA+ID4gPiBmbGF2b3Vycw0KPiA+ID4gPiAl ZFxuIiwNCj4gPiA+ID4gLQkJIGRhdGEtPmF1dGhfZmxhdm91cmxlbik7DQo+ID4gPiA+IC0JcmV0 dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLW91dF9ub19hZGRyZXNzOg0KPiA+ID4g PiAtCWRmcHJpbnRrKE1PVU5ULCAiTkZTNDogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyByZW1v dGUNCj4gPiA+ID4gYWRkcmVzc1xuIik7DQo+ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4g PiA+IC0NCj4gPiA+ID4gLW91dF9pbnZhbGlkX3RyYW5zcG9ydF91ZHA6DQo+ID4gPiA+IC0JZGZw cmludGsoTU9VTlQsICJORlN2NDogVW5zdXBwb3J0ZWQgdHJhbnNwb3J0IHByb3RvY29sDQo+ID4g PiA+IHVkcFxuIik7DQo+ID4gPiA+IC0JcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiA+IC19DQo+ID4g PiA+IC0NCj4gPiA+ID4gLyoNCj4gPiA+ID4gICogTkZTIHY0IG1vZHVsZSBwYXJhbWV0ZXJzIG5l ZWQgdG8gc3RheSBpbiB0aGUNCj4gPiA+ID4gICogTkZTIGNsaWVudCBmb3IgYmFja3dhcmRzIGNv bXBhdGliaWxpdHkNCj4gPiA+ID4gLS0gDQo+ID4gPiA+IDIuMTcuMg0KPiA+ID4gPiANCj4gPiA+ IA0KPiA+ID4gLS0NCj4gPiA+IENodWNrIExldmVyDQo+ID4gPiBjaHVja2xldmVyQGdtYWlsLmNv bQ0KPiA+ID4gDQo+ID4gPiANCj4gPiA+IA0KPiA+IC0tIA0KPiA+IFRyb25kIE15a2xlYnVzdA0K PiA+IExpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgSGFtbWVyc3BhY2UNCj4gPiB0cm9uZC5t eWtsZWJ1c3RAaGFtbWVyc3BhY2UuY29tDQo+ID4gDQo+ID4gDQotLSANClRyb25kIE15a2xlYnVz dA0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyLCBIYW1tZXJzcGFjZQ0KdHJvbmQubXlrbGVi dXN0QGhhbW1lcnNwYWNlLmNvbQ0KDQoNCg==