Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp3214630ybn; Fri, 27 Sep 2019 02:59:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqwbuBrCZmOty3qOJNWJio4Az4TQcThhfYw3m1Tk2p6YQLsjr/YMl8Z4voSNPVUdxkaKsvtN X-Received: by 2002:a17:906:b259:: with SMTP id ce25mr6637987ejb.229.1569578365432; Fri, 27 Sep 2019 02:59:25 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1569578365; cv=pass; d=google.com; s=arc-20160816; b=JvKe6YqzfQ8L49I0Igb2EL0l1nc6+JbEhypFJGD5ed+8fcW983CngUrwWICXsoX7we v794+d9fPDR4u4Wnu/dZFq2anstkTJe90lb63DPgxDJrZvOkhPEKy9lvrCEDdGpSI+Up XAR+9NAUaj/a/IPGckSq+7gz3N6+Qzdhzmnt8CRK3W/4hqRCMQSdwp++N36KPX+VgrxR RwH6IaoP/gtgf9jvUJvhVP3RsWfVUpYOc3gMAFik8Hm1J2vgji56ZyOnVLpz0jbFukak u/euosMXW60cc7MW9IxZBdHyrn9VTmJnQzRUVUXxxjwpN1Rmm6Ff8mTtwirdIMUxBxPp ha5g== 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-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=CMDIvb9NeIlMDZuU2PsznMOTy19tJFw7Pd/egTBFSVs=; b=ePPWD5yqZ67yCCYJ6dJ8K6GNRnhLKDTqbLLY/07pehfIU7xRZ5quiimwcmBnT1TjqO 9TlXEWe2US0SKtv+cDArO0pxPSd2yCbYPBDiyjd9DNqg2f78umorlLw3weRY2nTbonIJ EdQVMD/uorIV4li3ggLkMZcnwkou8NgAru3YBI4nsQqNeOI4gqZj6K7WUzQ2aDczzKp0 D4xOiEDoAkOqKfWUprSWLLdgLAqbe5yb5F8a446QPaQ87bh20SL+XEiZeV2kwbu4xt0J 3dT1QPyhmW6xyZgv+o31MkaoYhY6trIa1ef7/GzYfPjJv+9k486FL6NYVMA7n/qCkXMv jv+Q== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@verimatrix.com header.s=selector2 header.b=Gscg+GAO; arc=pass (i=1 spf=pass spfdomain=verimatrix.com dkim=pass dkdomain=verimatrix.com dmarc=pass fromdomain=verimatrix.com); spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=verimatrix.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x19si2422432eju.15.2019.09.27.02.58.52; Fri, 27 Sep 2019 02:59:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-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=@verimatrix.com header.s=selector2 header.b=Gscg+GAO; arc=pass (i=1 spf=pass spfdomain=verimatrix.com dkim=pass dkdomain=verimatrix.com dmarc=pass fromdomain=verimatrix.com); spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=verimatrix.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726080AbfI0J6V (ORCPT + 99 others); Fri, 27 Sep 2019 05:58:21 -0400 Received: from mail-eopbgr820072.outbound.protection.outlook.com ([40.107.82.72]:16672 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725946AbfI0J6V (ORCPT ); Fri, 27 Sep 2019 05:58:21 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kpFNo5GDi7K+WzKsjgbHJHiPzkCaJZ+r+o6uOph2hGxjdv1QfTnh1Xj4uPdJFjl8AWl9CKL/QUuyghQQk4JJi1T3KLO/KA/Z+gz8TrMMmXMFuGhOz2z82K485E8/ldrC2qacRc96hDQguLSyw/0x+T/8eg6+skFIkf3DG5LtCyB8AX56W2B3k0keTCMOHF4wrnfOQc/LwZhSRdqo64DsAfFFrdvkMj1LmNucwuWEDkmwbBLpyYbc9/i8wZM6F2iqVh5O2d/MHvkRUKmDVhguRCftKRJhJlsEM4c8Zmj6KgBWyJpb8uzTH9cXAF19Kf97E7Mub83M86pM/zdvZNI2RA== 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=CMDIvb9NeIlMDZuU2PsznMOTy19tJFw7Pd/egTBFSVs=; b=kMjdANn/qXVy0wWxzkgCiEszU51do7yCxImfFmlC9+H/svQmObfZ8WAXq+rdGs37Czf+h9ytlhLqwcPZADBI+jxiN6bIVEj5YtxVAHS4bh0SJwEgtKY+CAowGBsIvgiMccMNytLJT6OhGz/eMmfgXEYn0SIZGqf5SefuTzJdaxHWEnv9KlAz0IOgbcH0jTY4iHwB78EZyDNoooYuwnvhxqaL+PQNp8uUHoJAAq2zsnuYaOMw+3ADAHBk6G+31rmV0nV0McZRy8ZB6jpfd+MYju7KzHmaLqBYM2GmHEdYMkPhRH1AqzeN61rhfknh7OHIAL25qOzsFKW3zf1WD9fHDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=verimatrix.com; dmarc=pass action=none header.from=verimatrix.com; dkim=pass header.d=verimatrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=verimatrix.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CMDIvb9NeIlMDZuU2PsznMOTy19tJFw7Pd/egTBFSVs=; b=Gscg+GAOsXBJxGj87YE4DY26Qi2zmKm6njFekdG2z//JWOF+HzWa1eRboyVlVWmAJtNUXglg+h2e2+DjuAbrZMT17M7NGlOUEco5r21hBVfeWHvkqyAy8EXUhLX/H7KWctrYyQVx5qQocKl5CqKmNScrTZRKs6jiqCsXr8qzwe8= Received: from MN2PR20MB2973.namprd20.prod.outlook.com (52.132.172.146) by MN2PR20MB2255.namprd20.prod.outlook.com (20.179.148.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.21; Fri, 27 Sep 2019 09:58:15 +0000 Received: from MN2PR20MB2973.namprd20.prod.outlook.com ([fe80::6d07:5f09:97bf:c717]) by MN2PR20MB2973.namprd20.prod.outlook.com ([fe80::6d07:5f09:97bf:c717%7]) with mapi id 15.20.2305.017; Fri, 27 Sep 2019 09:58:14 +0000 From: Pascal Van Leeuwen To: Linus Torvalds CC: Ard Biesheuvel , Linux Crypto Mailing List , Linux ARM , Herbert Xu , David Miller , Greg KH , "Jason A . Donenfeld" , Samuel Neves , Dan Carpenter , Arnd Bergmann , Eric Biggers , Andy Lutomirski , Will Deacon , Marc Zyngier , Catalin Marinas Subject: RE: [RFC PATCH 18/18] net: wireguard - switch to crypto API for packet encryption Thread-Topic: [RFC PATCH 18/18] net: wireguard - switch to crypto API for packet encryption Thread-Index: AQHVc7xLFDyOijy/PkCX/N7Gn7qoy6c89gcAgACj7jCAAI9SgIAAOyfwgABabYCAAFofIA== Date: Fri, 27 Sep 2019 09:58:14 +0000 Message-ID: References: <20190925161255.1871-1-ard.biesheuvel@linaro.org> <20190925161255.1871-19-ard.biesheuvel@linaro.org> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=pvanleeuwen@verimatrix.com; x-originating-ip: [188.204.2.113] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 53947770-cfec-41d9-5cf6-08d74331368f x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:MN2PR20MB2255; x-ms-traffictypediagnostic: MN2PR20MB2255: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2582; x-forefront-prvs: 0173C6D4D5 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(346002)(376002)(366004)(136003)(396003)(39850400004)(189003)(199004)(52314003)(33656002)(7736002)(305945005)(102836004)(478600001)(6506007)(52536014)(71190400001)(71200400001)(7416002)(66946007)(30864003)(186003)(2906002)(66476007)(66556008)(66574012)(86362001)(99286004)(66446008)(64756008)(76116006)(14444005)(5024004)(256004)(8676002)(26005)(6916009)(6116002)(6246003)(54906003)(8936002)(5660300002)(3846002)(476003)(486006)(229853002)(7696005)(81166006)(9686003)(81156014)(55016002)(74316002)(446003)(11346002)(15974865002)(4326008)(14454004)(25786009)(76176011)(316002)(6436002)(66066001)(18886075002);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR20MB2255;H:MN2PR20MB2973.namprd20.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: verimatrix.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: azPvzuulGwaiqIkw1NcWT9vG6HVHpV2g485aXI7lpCeN1q5gPZYYpXL2mc7nep+uCswuYfGX0X34zFOMy2s+TdFt1/9bjufaGTec8taLuDU3R3L/nCmcXRUP6s+Yd/q2zM9bccaX4Uioof7TALUwQzIr3uGQBhX0GIckunxf3jam2dc2P3ELYutxI6rIdxbDk7IDmmhQRACKWJmYWZHDSrLOXThNMea/mTsMo1wn3sVoBZ2LUogZkkGw3RBPlo/QRVzmzNIMPv+BRSVQNaEhNWXke22BGY8PMXm30X5QmMEjVHMHWU8eqtXReEHhUKuVAkcE4Du114hZZukiBx4o0gsp0rq6It33kM98ydDiLEsj7TqT3keLllF2L+3Rpz8CJv3tiGGpMUaEPxLsdKRW5cRnUyshPRAbOn58Ppy4MkA= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: verimatrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53947770-cfec-41d9-5cf6-08d74331368f X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Sep 2019 09:58:14.1749 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: dcb260f9-022d-4495-8602-eae51035a0d0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: G4ukyIluZf8bOJ3SwhGLSy+NgkRCg5XXuO0CehcrehhVSCn24IuPN30QqMkx2l/KeolgJJO2h3g7lpIB1wsVU639ypFxsDLZm0ph2fJuBBQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR20MB2255 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org PiA+IFRoYXQgcmVtYXJrIGlzIGp1c3QgdmVyeSBzdHVwaWQuIFRoZSBoYXJkd2FyZSBBTFJFQURZ IGV4aXN0cywgYW5kDQo+ID4gbW9yZSBoYXJkd2FyZSBpcyBpbiB0aGUgcGlwZWxpbmUuIE9uY2Ug dGhpcyBzdHVmZiBpcyBkZXNpZ25lZCBpbiwgaXQNCj4gPiB1c3VhbGx5IHN0YXlzIGluIGZvciBt YW55IHllYXJzIHRvIGNvbWUuIEFuZCB0aGVzZSBhcmUgY2hpcHMgc29sZCBpbg0KPiA+IF9zZXJp b3VzXyBxdWFudGl0aWVzLCB0byBiZSB1c2VkIGluIHRoaW5ncyBsaWtlIHdpcmVsZXNzIHJvdXRl cnMgYW5kDQo+ID4gRFNMLCBjYWJsZSBhbmQgRlRUSCBtb2RlbXMsIDVHIGJhc2Ugc3RhdGlvbnMs IGV0Yy4gZXRjLg0KPiANCj4gWWVzLCBJIHZlcnkgbXVjaCBtZW50aW9uZWQgcm91dGVycy4gSSBi ZWxpZXZlIHRob3NlIGNhbiBoYXBwZW4gbXVjaA0KPiBtb3JlIHF1aWNrbHkuDQo+IA0KPiBCdXQg SSB3b3VsZCB2ZXJ5IG11Y2ggaG9wZSB0aGF0IHRoYXQgaXMgbm90IHRoZSBvbmx5IHNpdHVhdGlv biB3aGVyZQ0KPiB5b3UnZCBzZWUgd2lyZWd1YXJkIHVzZWQuDQo+IA0KU2FtZSBoZXJlDQoNCj4g SSdkIHdhbnQgdG8gc2VlIHdpcmVndWFyZCBpbiBhbiBlbmQtdG8tZW5kIHNpdHVhdGlvbiBmcm9t IHRoZSB2ZXJ5DQo+IGNsaWVudCBoYXJkd2FyZS4gU28gbGFwdG9wcywgcGhvbmVzLCBkZXNrdG9w cy4gTm90IHRoZSB1bnRydXN0ZWQgKHRvDQo+IG1lKSBodyBpbiBiZXR3ZWVuLg0KPiANCkkgZG9u J3Qgc2VlIHdoeSB0aGUgY3J5cHRvIEhXIHdvdWxkIGRlc2VydmUgYW55IGxlc3MgdHJ1c3QgdGhh biwgc2F5LA0KdGhlIENQVSBpdHNlbGYuIEkgd291bGQgc2F5IENQVSdzIGRvbid0IGRlc2VydmUg dGhhdCB0cnVzdCBhdCB0aGUgbW9tZW50Lg0KDQo+ID4gTm8sIHRoZXNlIGFyZSBqdXN0IHRoZSBy b3V0ZXJzIGdvaW5nIGludG8gKmV2ZXJ5b25lJ3MqIGhvbWUuIEFuZCA1Rw0KPiA+IGJhc2VzdGF0 aW9ucyBhcnJpdmluZyBhdCBldmVyeSBvdGhlciBzdHJlZXQgY29ybmVyLiBJIHdvdWxkbid0IGNh bGwNCj4gPiB0aGF0IHJhcmUsIGV4YWN0bHkuDQo+IA0KPiBUaGF0J3MgZmluZSBmb3IgYSBjb3Jw b3JhdGUgdHVubmVsIGJldHdlZW4gZGV2aWNlcy4gV2hpY2ggaXMgY2VydGFpbmx5DQo+IG9uZSB1 c2UgY2FzZSBmb3Igd2lyZWd1YXJkLg0KPiANCj4gQnV0IGlmIHlvdSB3YW50IFZQTiBmb3IgeW91 ciBvd24gbmVlZHMgZm9yIHNlY3VyaXR5LCB5b3Ugd2FudCBpdCBhdA0KPiB0aGUgX2NsaWVudF8u IE5vdCBhdCB0aGUgcm91dGVyIGJveC4gU28gdGhhdCBjYXNlIHJlYWxseSBkb2VzIG1hdHRlci4N Cj4gDQpQZXJzb25hbGx5LCBJIHdvdWxkIHJlYWxseSBsaWtlIGl0IGluIG15IHJvdXRlciBib3gg c28gbXkgQ1BVIGlzIGZyZWUNCnRvIGRvIHVzZWZ1bCB3b3JrIGluc3RlYWQgb2YgYm9yaW5nIGNy eXB0by4gQW5kIEkga25vdyB0aGVyZSdzIG5vdGhpbmcNCnVudHJ1c3RlZCBpbiBiZXR3ZWVuIG15 IGNsaWVudCBhbmQgdGhlIHJvdXRlciBib3gsIHNvIEkgZG9uJ3QgbmVlZCB0bw0Kd29ycnkgYWJv dXQgc2VjdXJpdHkgdGhlcmUuIEJ1dCBoZXksIHRoYXQncyBqdXN0IG1lLg0KDQo+IEFuZCBJIHJl YWxseSBkb24ndCBzZWUgdGhlIGhhcmR3YXJlIGhhcHBlbmluZyBpbiB0aGF0IHNwYWNlLiBTbyB0 aGUNCj4gYmFkIGNyeXB0byBpbnRlcmZhY2VzIG9ubHkgbWFrZSB0aGUgY2xpZW50IF93b3JzZV8u DQo+IA0KRnVsbHkgYWdyZWUuIFdlIGRvbid0IGZvY3VzIG9uIHRoZSBjbGllbnQgc2lkZSB3aXRo IG91ciBIVyBhbnl3YXkuDQooYnV0IHRoYW4gdGhlcmUgbWF5IGJlIHRoYXQgcm91dGVyIGJveCBp biBiZXR3ZWVuIHRoYXQgY2FuIGhlbHAgb3V0KQ0KDQo+IFNlZT8NCj4gDQo+IEJ1dCBvbiB0byB0 aGUgYXJndW1lbnRzIHRoYXQgd2UgYWN0dWFsbHkgYWdyZWUgb246DQo+IA0KPiA+IEhleSwgbm8g YXJndW1lbnQgdGhlcmUuIEkgZG9uJ3Qgc2VlIGFueSBnb29kIHJlYXNvbiB3aHkgdGhlIGtleSBj YW4ndA0KPiA+IGJlIG9uIHRoZSBzdGFjay4gSSBkb3VidCBhbnkgaGFyZHdhcmUgd291bGQgYmUg YWJsZSB0byBETUEgdGhhdCBhcy1pcw0KPiA+IGRpcmVjdGx5LCBhbmQgaW4gYW55IGNhc2UsIGtl eSBjaGFuZ2VzIHNob3VsZCBiZSBpbmZyZXF1ZW50LCBzbyBjb3B5aW5nDQo+ID4gaXQgdG8gc29t ZSBETUEgYnVmZmVyIHNob3VsZCBub3QgYmUgYSBwZXJmb3JtYW5jZSBwcm9ibGVtLg0KPiA+IFNv IG1heWJlIHRoYXQncyBhbiBhcmVhIGZvciBpbXByb3ZlbWVudDogYWxsb3cgdGhhdCB0byBiZSBv biB0aGUgc3RhY2suDQo+IA0KPiBJdCdzIG5vdCBldmVuIGp1c3QgdGhlIHN0YWNrLiBJdCdzIHJl YWxseSB0aGF0IHRoZSBjcnlwdG8gaW50ZXJmYWNlcw0KPiBhcmUgKmRlc2lnbmVkKiBzbyB0aGF0 IHlvdSBoYXZlIHRvIGFsbG9jYXRlIHRoaW5ncyBzZXBhcmF0ZWx5LCBhbmQNCj4gY2FuJ3QgZW1i ZWQgdGhlc2UgdGhpbmdzIGluIHlvdXIgb3duIGRhdGEgc3RydWN0dXJlcy4NCj4gDQo+IEFuZCB0 aGV5IGFyZSB0aGF0IHdheSwgYmVjYXVzZSB0aGUgY3J5cHRvIGludGVyZmFjZXMgYXJlbid0IGFj dHVhbGx5DQo+IGFib3V0IChqdXN0KSBoaWRpbmcgdGhlIGhhcmR3YXJlIGludGVyZmFjZTogdGhl eSBhcmUgYWJvdXQgaGlkaW5nDQo+IF9hbGxfIHRoZSBlbmNyeXB0aW9uIGRldGFpbHMuDQo+IA0K V2VsbCwgdGhhdCdzIHRoZSBnZW5lcmFsIGlkZWEgb2YgYWJzdHJhY3Rpb24uIEl0IGFsc28gYWxs b3dzIGZvciANCnN3YXBwaW5nIGluIGFueSBvdGhlciBjaXBoZXIgd2l0aCBtaW5pbWFsIGVmZm9y dCBqdXN0IF9iZWNhdXNlXyB0aGUgDQpkZXRhaWxzIHdlcmUgaGlkZGVuIGZyb20gdGhlIGFwcGxp Y2F0aW9uLiBTbyBpdCBtYXkgY29zdCB5b3Ugc29tZSANCmVmZm9ydCBpbml0aWFsbHksIGJ1dCBp dCBtYXkgc2F2ZSB5b3UgZWZmb3J0IGxhdGVyLg0KDQo+IFRoZXJlJ3Mgbm8gd2F5IHRvIHNheSAi aGV5LCBJIGtub3cgdGhlIGNyeXB0byBJIHVzZSwgSSBrbm93IHRoZSBrZXkNCj4gc2l6ZSBJIGhh dmUsIEkga25vdyB0aGUgc3RhdGUgc2l6ZSBpdCBuZWVkcywgSSBjYW4gcHJlYWxsb2NhdGUgdGhv c2UNCj4gQVMgUEFSVCBvZiBteSBvd24gZGF0YSBzdHJ1Y3R1cmVzIi4NCj4gDQo+IEJlY2F1c2Ug dGhlIGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBiZSBzbyAiZ2VuZXJpYyIgdGhhdCB5b3Ugc2lt cGx5DQo+IGNhbid0IGRvIHRob3NlIHRoaW5ncywgdGhleSBhcmUgYWxsIGV4dGVybmFsIGFsbG9j YXRpb25zLCB3aGljaCBpcw0KPiBpbmV2aXRhYmx5IHNsb3dlciB3aGVuIHlvdSBkb24ndCBoYXZl IGhhcmR3YXJlLg0KPiANCkhtbSwgT2ssIEkgc2VlIHlvdXIgcG9pbnQgaGVyZS4gQnV0IG1vc3Qg b2YgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIA0KKGxpa2UgdGhlIGtleSkgc2hvdWxkIGJlIGFsbG9j YXRlZCBpbmZyZXF1ZW50bHkgYW55d2F5LCBzbyB5b3UgY2FuDQphbW9ydGl6ZSB0aGF0IGNvc3Qg b3ZlciBfbWFueV8gY3J5cHRvIG9wZXJhdGlvbnMuDQoNCllvdSBfZG9fIHJlYWxpemUgdGhhdCBw ZXJmb3JtaW5nIHRoZSBrZXkgc2NoZWR1bGUgZm9yIGUuZy4gQUVTIHdpdGgNCkFFUy1OSSBhbHNv IHRha2VzIHF1aXRlIGEgbG90IG9mIHRpbWU/IFNvIHlvdSBzaG91bGQga2VlcCB5b3VyIGtleXMN CmFsaXZlIGFuZCBub3QgcmVsb2FkIHRoZW0gYWxsIHRoZSB0aW1lIGFueXdheS4NCg0KQnV0IEkg YWxyZWFkeSBhZ3JlZWQgd2l0aCB5b3UgdGhhdCB0aGVyZSBtYXkgYmUgY2FzZXMgd2hlcmUgeW91 IGp1c3QNCndhbnQgdG8gY2FsbCB0aGUgbGlicmFyeSBmdW5jdGlvbiBkaXJlY3RseS4gV2lyZWd1 YXJkIGp1c3QgaXNuJ3Qgb25lDQpvZiB0aG9zZSBjYXNlcywgSU1ITy4NCg0KPiBBbmQgeW91J3Zl IHNob3duIHRoYXQgeW91IGRvbid0IGNhcmUgYWJvdXQgdGhhdCAiZG9uJ3QgaGF2ZSBoYXJkd2Fy ZSINCj4gc2l0dWF0aW9uLCBhbmQgc2VlbSB0byB0aGluayBpdCdzIHRoZSBvbmx5IGNhc2UgdGhh dCBtYXR0ZXJzLiBUaGF0J3MNCj4geW91ciBqb2IsIGFmdGVyIGFsbC4NCj4gDQpJIGRvbid0IHJl Y2FsbCBwdXR0aW5nIGl0IHRoYXQgc3Ryb25nbHkgLi4uIGFuZCBJIGNlcnRhaW5seSBuZXZlciBz YWlkDQp0aGUgSFcgYWNjZWxlcmF0aW9uIHRoaW5nIGlzIHRoZSBfb25seV8gY2FzZSB0aGF0IG1h dHRlcnMuIEJ1dCBpdCBkb2VzDQptYXR0ZXIgX3NpZ25pZmljYW50bHlfIHRvIG1lLCBmb3IgYmxh dGFudGx5IG9idmlvdXMgcmVhc29ucy4NCg0KPiBCdXQgaG93ZXZlciBtdWNoIHlvdSB0cnkgdG8g Y2xhaW0gb3RoZXJ3aXNlLCB0aGVyZSdzIGFsbCB0aGVzZQ0KPiBzaXR1YXRpb25zIHdoZXJlIHRo ZSBoYXJkd2FyZSBqdXN0IGlzbid0IHRoZXJlLCBhbmQgdGhlIGNyeXB0bw0KPiBpbnRlcmZhY2Ug anVzdCBmb3JjZXMgbmFzdHkgb3ZlcmhlYWQgZm9yIGFic29sdXRlbHkgbm8gZ29vZCByZWFzb24u DQo+IA0KPiA+IEkgYWxyZWFkeSBleHBsYWluZWQgdGhlIHJlYXNvbnMgZm9yIF9ub3RfIGRvaW5n IGRpcmVjdCBjYWxscyBhYm92ZS4NCj4gDQo+IEFuZCBJJ3ZlIHRyaWVkIHRvIGV4cGxhaW4gaG93 IGRpcmVjdCBjYWxscyB0aGF0IGRvIHRoZSBzeW5jaHJvbm91cw0KPiB0aGluZyBlZmZpY2llbnRs eSB3b3VsZCBiZSBwb3NzaWJsZSwgYnV0IHRoZW4gX2lmXyB0aGVyZSBpcyBoYXJkd2FyZSwNCj4g dGhleSBjYW4gdGhlbiBmYWxsIGJhY2sgdG8gYW4gYXN5bmMgaW50ZXJmYWNlLg0KPiANCk9LLCBJ IGRpZCBub3QgZnVsbHkgZ2V0IHRoYXQgbGF0dGVyIHBhcnQuIEkgd291bGQgYmUgZmluZSB3aXRo IHN1Y2ggYW4NCmFwcHJvYWNoIGZvciB1c2UgY2FzZXMgKGkuZS4gZml4ZWQsIGtub3duIGNyeXB0 bykgd2hlcmUgdGhhdCBtYWtlcyBzZW5zZS4NCkl0IHdvdWxkIGFjdHVhbGx5IGJlIGJldHRlciB0 aGFuIGNhbGxpbmcgdGhlIFNXLW9ubHkgbGlicmFyeSBkaXJlY3RseQ0KKHdoaWNoIHdhcyBteSBz dWdnZXN0aW9uKSBhcyBpdCB3b3VsZCBzdGlsbCBhbGxvdyBIVyBhY2NlbGVyYXRpb24gYXMNCmFu IG9wdGlvbiAuLi4gDQoNCj4gPiA+IFNvIHRoZXJlIGlzIGFic29sdXRlbHkgTk8gRE9XTlNJREUg Zm9yIGh3IGFjY2VsZXJhdGVkIGNyeXB0byB0byBqdXN0DQo+ID4gPiBkbyBpdCByaWdodCwgYW5k IHVzZSBhbiBpbnRlcmZhY2UgbGlrZSB0aGlzOg0KPiA+ID4NCj4gPiA+ICAgICAgICBpZiAoIWNo YWNoYTIwcG9seTEzMDVfZGVjcnlwdF9zZyhzZywgc2csIHNrYi0+bGVuLCBOVUxMLCAwLA0KPiA+ ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tFVF9DQihza2Ip LT5ub25jZSwga2V5LT5rZXksDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2ltZF9jb250ZXh0KSkNCj4gPiA+ICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsNCj4gPiA+DQo+ID4gV2VsbCwgZm9yIG9uZSB0aGluZywgYSBIVyBBUEkgc2hvdWxkIG5vdCBl eHBlY3QgdGhlIHJlc3VsdCB0byBiZQ0KPiA+IGF2YWlsYWJsZSB3aGVuIHRoZSBmdW5jdGlvbiBj YWxsIHJldHVybnMuIChpZiB0aGF0J3Mgd2hhdCB5b3UNCj4gPiBtZWFuIGhlcmUpLiBUaGF0IHdv dWxkIGp1c3QgYmUgV1JPTkcuDQo+IA0KPiBSaWdodC4gQnV0IHRoYXQgYWxzbyBzaG91bGRuJ3Qg bWVhbiB0aGF0IHdoZW4geW91IGhhdmUgc3luY2hyb25vdXMNCj4gaGFyZHdhcmUgKGllIENQVSkg eW91IGhhdmUgdG8gc2V0IGV2ZXJ5dGhpbmcgdXAgZXZlbiB0aG91Z2ggaXQgd2lsbA0KPiBuZXZl ciBiZSB1c2VkLg0KPiANCj4gUHV0IGFub3RoZXIgd2F5OiBldmVuIHdpdGggaGFyZHdhcmUgYWNj ZWxlcmF0aW9uLCB0aGUgcXVldWluZw0KPiBpbnRlcmZhY2Ugc2hvdWxkIGJlIGEgc2ltcGxlICJk byB0aGlzIiBpbnRlcmZhY2UuDQo+IA0KT0ssIEkgZG9uJ3QgdGhpbmsgd2UgZGlzYWdyZWUgdGhl cmUuIEkgX2xpa2VfIHNpbXBsZS4gQXMgbG9uZyBhcyBpdA0KZG9lc24ndCBzYWNyaWZpY2UgZnVu Y3Rpb25hbGl0eSBJIGNhcmUgYWJvdXQuDQoNCj4gVGhlIGN1cnJlbnQgY3J5cHRvIGludGVyZmFj ZSBpcyBiYXNpY2FsbHkgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgYWxsDQo+IHRoZSBzZXR1cCB1 cC1mcm9udCwgd2hldGhlciBpdCdzIG5lZWRlZCBvciBub3QuIEFuZCBpdCBmb3JjZXMgdGhvc2UN Cj4gdmVyeSBpbmNvbnZlbmllbnQgYW5kIHNsb3cgZXh0ZXJuYWwgYWxsb2NhdGlvbnMuDQo+IA0K QnV0IHlvdSBzaG91bGQgZG8gdGhlIHNldHVwIHdvcmsgKGlmIGJ5ICJzZXR1cCIgeW91IG1lYW4g dGhpbmdzIGxpa2UNCmNpcGhlciBhbGxvY2F0aW9uLCBrZXkgc2V0dXAgYW5kIHJlcXVlc3QgYWxs b2NhdGlvbikgb25seSBfb25jZV8gaW4gYSANCl9sb25nXyB3aGlsZS4gWW91IGNhbiBqdXN0IGtl ZXAgdXNpbmcgaXQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgDQphcHBsaWNhdGlvbiAob3Iga2V5 LCBmb3IgdGhlIGtleSBzZXR1cCBwYXJ0KS4NCg0KSWYgSSBsb29rIGF0IG15IGNpcGhlciBmYWxs YmFjayAgcGF0aHMgaW4gdGhlIGRyaXZlciAodGhlIG9ubHkgcGxhY2VzDQp3aGVyZSBJIGFjdHVh bGx5IGdldCB0byBfdXNlXyB0aGUgQVBJIGZyb20gdGhlICJvdGhlciIgc2lkZSksIHBlciANCmFj dHVhbCBpbmRpdnVhbCByZXF1ZXN0IHRoZXkgX29ubHlfIGRvIC0gdGhlIHJlc3QgaXMgYWxsIHBy ZWFsbG9jYXRlZA0KZWFybGllcjoNCg0KX3NldF9jYWxsYmFjaygpDQpfc2V0X2NyeXB0KCkNCl9z ZXRfYWQoKQ0KX2VuY3J5cHQoKSBvciBfZGVjcnlwdCgpDQoNCkFuZCBub3cgdGhhdCBJIGxvb2sg YXQgdGhhdCwgSSB0aGluayB0aGUgX3NldF9jYWxsYmFjaygpICBjb3VsZA0KbW92ZSB0byB0aGUg c2V0dXAgcGhhc2UgYXMgaXQncyBhbHdheXMgdGhlIHNhbWUgY2FsbGJhY2sgZnVuY3Rpb24uDQpQ cm9iYWJseSwgaW4gY2FzZSBvZiBXaXJlZ3VhcmQsIHlvdSBjb3VsZCBldmVuIG1vdmUgdGhlIF9z ZXRfYWQoKQ0KdGhlcmUgYXMgaXQncyBhbHdheXMgemVybyBhbmQgIHRoZSBjcnlwdG8gZHJpdmVy IGlzIG5vdCBhbGxvd2VkIA0KdG8gb3ZlcndyaXRlIGl0IGluIHRoZSByZXF1ZXN0IHN0cnVjdCBh bnl3YXkuDQoNCkFsc28sIEkgYWxyZWFkeSBhZ3JlZWQgd2l0aCB5b3UgdGhhdCBfc2V0X2NyeXB0 KCksIF9zZXRfYWQoKQ0KYW5kIF9lbmNyeXB0KCkvX2RlY3J5cHQoKSBfY291bGRfIGJlIGNvbnZl bmllbnRseSB3cmFwcGVkIGludG8NCm9uZSBBUEkgY2FsbCBpbnN0ZWFkIG9mIDMgc2VwYXJhdGUg b25lcyBpZiB3ZSB0aGluayB0aGF0J3Mgd29ydGggaXQuDQoNCkJVVCAuLi4gYWN0dWFsbHkgLi4u IEkganVzdCBsb29rZWQgYXQgdGhlIGFjdHVhbCBfaW1wbGVtZW50YXRpb25fDQphbmQgaXQgdHVy bnMgb3V0IHRoZXNlIGFyZSBfaW5saW5lYWJsZV8gZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlDQpo ZWFkZXIgZmlsZSB0aGF0IF9qdXN0XyB3cml0ZSB0byBzb21lIHN0cnVjdCBmaWVsZHMuIFNvIHRo ZXkgDQpzaG91bGQgbm90IGVuZCB1cCBiZWluZyBmdW5jdGlvbiBjYWxscyBhdCBhbGwoISEpLg0K X09ubHlfIHRoZSBfZW5jcnlwdCgpL19kZWNyeXB0KCkgaW52b2NhdGlvbiB3aWxsIGVuZCB1cCB3 aXRoIGENCnRydWUgKGluZGlyZWN0KSBmdW5jdGlvbiBjYWxsLg0KDQpTbyB3aGVyZSBhcmUgYWxs IHRob3NlIGFsbG9jYXRpb25zIHlvdSBtZW50aW9uPyBIYXZlIHlvdSBldmVyDQphY3R1YWxseSBf dXNlZF8gdGhlIENyeXB0byBBUEkgZm9yIGFueXRoaW5nPw0KDQpZZXMsIGlmIHlvdSBhY3R1YWxs eSB3YW50IHRvIF9xdWV1ZV8gcmVxdWVzdHMgeW91IG5lZWQgdG8gdXNlIG9uZQ0KcmVxdWVzdCBz dHJ1Y3QgZm9yIGV2ZXJ5IHF1ZXVlZCBvcGVyYXRpb24sIGJ1dCB5b3UgY291bGQganVzdA0KcHJl YWxsb2NhdGUgYW4gYXJyYXkgb2YgdGhlbSB0aGF0IHlvdSBjeWNsZSB0aHJvdWdoLiBObyBuZWVk IHRvIGRvDQp0aG9zZSBhbGxvY2F0aW9ucyBpbiB0aGUgaG90IHBhdGguDQoNClNvIGlzIHlvdXIg cHJvYmxlbSByZWFsbHkgd2l0aCB0aGUgQVBJIF9pdHNlbGZfIG9yIHdpdGggaW5jb3JyZWN0Lw0K aW5lZmZpY2llbnQgX3VzZV8gb2YgdGhlIEFQSSBpbiBzb21lIHBsYWNlcz8NCg0KPiBBbmQgSSdt IHNheWluZyB0aGF0IGNhdXNlcyBwcm9ibGVtcywgYmVjYXVzZSBpdCBmdW5kYW1lbnRhbGx5IG1l YW5zDQo+IHRoYXQgeW91IGNhbid0IGRvIGEgZ29vZCBqb2IgZm9yIHRoZSBjb21tb24gQ1BVICBj YXNlLCBiZWNhdXNlIHlvdSdyZQ0KPiBwYXlpbmcgYWxsIHRob3NlIGNvc3RzIGV2ZW4gd2hlbiB5 b3UgbmVlZCBhYnNvbHV0ZWx5IG5vbmUgb2YgdGhlbS4NCj4gQm90aCBhdCBzZXR1cCB0aW1lLCBi dXQgYWxzbyBhdCBydW4tdGltZSBkdWUgdG8gdGhlIGV4dHJhIGluZGlyZWN0aW9uDQo+IGFuZCBj YWNoZSBtaXNzZXMgZXRjLg0KPiANClRoZXJlIGlzIHNvbWUgY29zdCBzdXJlLCBidXQgaXMgaXQg X3NpZ25pZmljYW50XyBmb3IgYW55IHVzZSBjYXNlIHRoYXQNCl9tYXR0ZXJzXz8gWW91IHN0YXJ0 ZWQgYnJpbmdpbmcgdXAgb3B0aW1pemF0aW9uIHJ1bGVzLCBzbyBob3cgYWJvdXQNCkFtZGFobHMg bGF3Pw0KDQo+ID4gQWdhaW4sIEhXIGFjY2VsZXJhdGlvbiBkb2VzIG5vdCBkZXBlbmQgb24gdGhl IGluZGlyZWN0aW9uIF9hdCBhbGxfLA0KPiA+IHRoYXQncyB0aGVyZSBmb3IgZW50aXJlbHkgZGlm ZmVyZW50IHB1cnBvc2VzIEkgZXhwbGFpbmVkIGFib3ZlLg0KPiA+IEhXIGFjY2VsZXJhdGlvbiBf ZG9lc18gZGVwZW5kIGdyZWF0bHkgb24gYSB0cnVseSBhc3luYyBpZmMgdGhvdWdoLg0KPiANCj4g Q2FuIHlvdSByZWFsaXplIHRoYXQgdGhlIHdvcmxkIGlzbid0IGp1c3QgYWxsIGh3IGFjY2VsZXJh dGlvbj8NCj4gDQpTdXJlLiBCdXQgdGhlcmUncyBhbHNvIGEgbG90IG9mIEhXIGFjY2VsZXJhdGlv biBfYWxyZWFkeSBvdXQgdGhlcmVfDQp0aGF0IF9jb3VsZF8gaGF2ZSBiZWVuIHVzZWQgaWYgb25s eSB0aGUgcHJvcGVyIFNXIEFQSSdzIGhhZCBleGlzdGVkLg0KV2VsY29tZSB0byBfbXlfIHdvcmxk Lg0KDQo+IENhbiB5b3UgYWRtaXQgdGhhdCB0aGUgY3VycmVudCBjcnlwdG8gaW50ZXJmYWNlIGlz IGp1c3QgaG9ycmlkIGZvciB0aGUNCj4gbm9uLWFjY2VsZXJhdGVkIGNhc2U/DQo+IA0KSXMgYWdy ZWVpbmcgdGhhdCBpdCBpcyBub3QgcGVyZmVjdCBzdWZmaWNpZW50IGZvciB5b3U/IDotKQ0KDQo+ IENhbiB5b3UgcGVyaGFwcyB0aGVuIGFsc28gdGhpbmsgdGhhdCAibWF5YmUgdGhlcmUgYXJlIGJl dHRlciBtb2RlbHMiLg0KPiANClN1cmUuIFRoZXJlJ3MgYWx3YXlzIGJldHRlci4gVGhlcmUncyBh bHNvIGdvb2QgZW5vdWdoIHRob3VnaCAuLi4NCg0KPiA+IFNvIHF1ZXVlIHJlcXVlc3RzIG9uIG9u ZSBzaWRlLCBoYW5kbGUgcmVzdWx0cyBmcm9tIHRoZSBvdGhlciBzaWRlDQo+ID4gaW4gc29tZSBj YWxsYmFjayBmdW5jIG9mZiBvZiBhbiBpbnRlcnJ1cHQgaGFuZGxlci4NCj4gDQo+IEFjdHVhbGx5 LCB3aGF0IHlvdSBjYW4gZG8gLSBhbmQgd2hhdCBwZW9wbGUgKmhhdmUqIGRvbmUgLSBpcyB0byBh ZG1pdA0KPiB0aGF0IHRoZSBzeW5jaHJvbm91cyBjYXNlIGlzIHJlYWwgYW5kIGltcG9ydGFudCwg YW5kIHRoZW4gZGVzaWduDQo+IGludGVyZmFjZXMgdGhhdCB3b3JrIGZvciB0aGF0IG9uZSB0b28u DQo+IA0KQnV0IHRoZXkgX2RvXyB3b3JrIGZvciB0aGF0IGNhc2UgYXMgd2VsbC4gSSBzdGlsbCBo YXZlbid0IHNlZW4gYW55DQpzb2xpZCBldmlkZW5jZSB0aGF0IHRoZXkgYXJlIGFzIGhvcnJpYmx5 IGluZWZmaWNpZW50IGFzIHlvdSBhcmUgDQppbXBseWluZyBmb3IgX3JlYWwgbGlmZV8gdXNlIGNh c2VzLiBBbmQgZXZlbiBpZiB0aGV5IGFyZSwgdGhlbiB0aGVyZSdzDQp0aGUgcXVlc3Rpb24gd2hl dGhlciB0aGF0IGlzIHRoZSBmYXVsdCBvZiB0aGUgQVBJIG9yIGluY29ycmVjdCB1c2UgDQp0aGVy ZW9mLg0KDQo+IFlvdSBkb24ndCBuZWVkIHRvIGFsbG9jYXRlIHJlc291cmNlcyBhaGVhZCBvZiB0 aW1lLCBhbmQgeW91IGRvbid0IGhhdmUNCj4gdG8gZGlzYWxsb3cganVzdCBoYXZpbmcgdGhlIHN0 YXRlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlci4NCj4gDQo+IFNvIGhlcmUncyB0aGUg Kndyb25nKiB3YXkgdG8gZG8gaXQgKGFuZCB0aGUgd2F5IHRoYXQgY3J5cHRvIGRvZXMgaXQpOg0K PiANCj4gIC0gZHluYW1pY2FsbHkgYWxsb2NhdGUgYnVmZmVycyBhdCAiaW5pdCB0aW1lIg0KPiAN CldoeSBpcyB0aGF0IHNvICJ3cm9uZyI/IEl0IHN1cmUgYmVhdHMgZG9pbmcgYWxsb2NhdGlvbnMg b24gdGhlIGhvdCBwYXRoLg0KQnV0IHllcywgc29tZSBzdHVmZiBzaG91bGQgYmUgYWxsb3dlZCB0 byBsaXZlIG9uIHRoZSBzdGFjay4gU29tZSBvdGhlcg0Kc3R1ZiBjYW4ndCBiZSBvbiB0aGUgc3Rh Y2sgdGhvdWdoLCBhcyB0aGF0J3MgZ29uZSB3aGVuIHRoZSBjYWxsaW5nIA0KZnVuY3Rpb24gZXhp dHMgd2hpbGUgdGhlIGJhY2tncm91bmQgY3J5cHRvIHByb2Nlc3Npbmcgc3RpbGwgbmVlZHMgaXQu DQoNCkFuZCB5b3UgZG9uJ3Qgd2FudCB0byBoYXZlIGl0IG9uIHRoZSBzdGFjayBpbml0aWFsbHkg YW5kIHRoZW4gaGF2ZQ0KdG8gX2NvcHlfIGl0IHRvIHNvbWUgRE1BLWFibGUgbG9jYXRpb24gdGhh dCB5b3UgYWxsb2NhdGUgb24gdGhlIGZseQ0Kb24gdGhlIGhvdCBwYXRoIGlmIHlvdSBfZG9fIHdh bnQgSFcgYWNjZWxlcmF0aW9uLg0KDQo+ICAtIGZpbGwgaW4gImNhbGxiYWNrIGZpZWxkcyIgZXRj IGJlZm9yZSBzdGFydGluZyB0aGUgY3J5cHRvLCB3aGV0aGVyDQo+IHRoZXkgYXJlIG5lZWRlZCBv ciBub3QNCj4gDQpJIHRoaW5rIHRoaXMgY2FuIGJlIGRvbmUgX29uY2VfIGF0IHJlcXVlc3QgYWxs b2NhdGlvbiB0aW1lLg0KQnV0IGl0J3MganVzdCBvbmUgZnVuY3Rpb24gcG9pbnRlciB3cml0ZSBh bnl3YXkuIElzIHRoYXQgc2lnbmlmaWNhbnQ/IA0KT3I6IF9pZl8gdGhhdCBpcyBzaWduaWZpY2Fu dCwgeW91ICBzaG91bGRuJ3QgYmUgdXNpbmcgdGhlIENyeXB0byBBUEkgZm9yIA0KdGhhdCB1c2Ug Y2FzZSBpbiB0aGUgZmlyc3QgcGxhY2UuDQoNCj4gIC0gY2FsbCBhICJkZWNyeXB0IiBmdW5jdGlv biB0aGF0IHRoZW4gdXNlcyB0aGUgaW5kaXJlY3QgZnVuY3Rpb25zIHlvdQ0KPiBzZXQgdXAgYXQg aW5pdCB0aW1lLCBhbmQgcG9zc2libHkgd2FpdHMgZm9yIGl0IChvciBjYWxscyB0aGUgY2FsbGJh Y2tzDQo+IHlvdSBzZXQgdXApDQo+IA0KPiBub3RlIGhvdyBpdCdzIGFsbCB0aGlzICJzdGF0ZSBt YWNoaW5lIiBtb2RlbCB3aGVyZSB5b3UgYWRkIGRhdGEgdG8gdGhlDQo+IHN0YXRlIG1hY2hpbmUs IGFuZCBhdCBzb21lIHBvaW50IHlvdSBzYXkgImV4ZWN1dGUiIGFuZCB0aGVuIGVpdGhlciB5b3UN Cj4gd2FpdCBmb3IgdGhpbmdzIG9yIHlvdSBnZXQgY2FsbGJhY2tzLg0KPiANCk5vdCBzdXJlIGhv dyBzcGxpdHRpbmcgZGF0YSBzZXR1cCBvdmVyIGEgZmV3IHNlcGVyYXRlICJmdW5jdGlvbiIgY2Fs bHMNCnN1ZGRlbmx5IG1ha2VzIGl0IGEgInN0YXRlIG1hY2hpbmUgbW9kZWwiIC4uLg0KDQpCdXQg eWVzLCBJIGNhbiB1bmRlcnN0YW5kIHdoeSB0aGUgY29tcGxldGlvbiBoYW5kbGluZyB0aHJvdWdo IHRoaXMNCmNhbGxiYWNrIGZ1bmN0aW9uIHNlZW1zIGxpa2UgdW5uZWNlc3NhcnkgY29tcGxpY2F0 aW9uIGZvciB0aGUgU1cgY2FzZS4NCg0KPiBUaGF0IG1ha2VzIHNlbnNlIGZvciBhIGh3IGNyeXB0 byBlbmdpbmUuIEl0J3MgaG93IGEgbG90IG9mIHRoZW0gd29yaywgYWZ0ZXIgYWxsLg0KPiANCk9o IHJlYWxseT8NCg0KQ2FuJ3Qgc3BlYWsgZm9yIG90aGVyIHBlb3BsZSBzdHVmZiwgYnV0IGZvciBv dXIgaGFyZHdhcmUgeW91IHBvc3QgYQ0KcmVxdWVzdCB0byBpdCBhbmQgdGhlbiBnbyBvZmYgZG8g b3RoZXIgc3R1ZmYgd2hpbGUgdGhlIEhXIGRvZXMgaXRzIHRoaW5nDQphZnRlciB3aGljaCBpdCB3 aWxsIGluZm9ybSB5b3UgaXQncyBkb25lIGJ5IG1lYW5zIG9mIGFuIGludGVycnVwdC4NCkkgZG9u J3Qgc2VlIGhvdyB0aGlzIHJlbGF0ZXMgdG8gdGhlICJzdGF0ZW1hY2hpbmUgbW9kZWwiIGFib3Zl LCB0aGVyZQ0KaXMgbm8gcGVyc2lzdGVudCBzdGF0ZSBpbnZvbHZlZCwgaXQncyBhbGwgaW5jbHVk ZWQgaW4gdGhlIHJlcXVlc3QuDQpUaGUgX29ubHlfIHRoaW5nIHRoYXQgbWF0dGVycyBpcyB0aGF0 IHlvdSByZWFsaXplIGl0J3MgYSBwaXBlbGluZSB0aGF0DQpuZWVkcyB0byBiZSBrZXB0IGZpbGxl ZCBhbmQgaGFzIGxhdGVuY3kgPj4gdGhyb3VnaHB1dCwganVzdCBsaWtlIHlvdXIgDQpDUFUgcGlw ZWxpbmUuDQoNCj4gQnV0IGl0IG1ha2VzIF96ZXJvXyBzZW5zZSBmb3IgdGhlIHN5bmNocm9ub3Vz IGNhc2UuIFlvdSBkaWQgYSBsb3Qgb2YNCj4gZXh0cmEgd29yayBmb3IgdGhhdCBjYXNlLCBhbmQg YmVjYXVzZSBpdCB3YXMgYWxsIGEgc3R5YXRlIG1hY2hpbmUsIHlvdQ0KPiBkaWQgaXQgcGFydGlj dWxhcmx5IGluZWZmaWNpZW50bHk6IG5vdCBvbmx5IGRvIHlvdSBoYXZlIHRob3NlIHNlcGFyYXRl DQo+IGFsbG9jYXRpb25zIHdpdGggcG9pbnRlciBmb2xsb3dpbmcsIHRoZSAiZGVjcnlwdCgpIiBj YWxsIGVuZHMgdXAgZG9pbmcNCj4gYW4gaW5kaXJlY3QgY2FsbCB0byB0aGUgQ1BVIGltcGxlbWVu dGF0aW9uLCB3aGljaCBpcyBqdXN0IHF1aXRlIHNsb3cNCj4gdG8gYmVnaW4gd2l0aCwgcGFydGlj dWxhcmx5IGluIHRoaXMgZGF5IGFuZCBhZ2Ugd2l0aCByZXRwb2xpbmUgZXRjLg0KPiANCj4gU28g d2hhdCdzIHRoZSBhbHRlcm5hdGl2ZT8NCj4gDQo+IEkgY2xhaW0gdGhhdCBhIGdvb2QgaW50ZXJm YWNlIHdvdWxkIGFjY2VwdCB0aGF0ICJPaCwgYSBsb3Qgb2YgY2FzZXMNCj4gd2lsbCBiZSBzeW5j aHJvbm91cywgYW5kIGEgbG90IG9mIGNhc2VzIHVzZSBvbmUgZml4ZWQNCj4gZW5jcnlwdGlvbi9k ZWNyeXB0aW9uIG1vZGVsIi4NCj4gDQo+IEFuZCBpdCdzIHF1aXRlIGRvYWJsZS4gSW5zdGVhZCBv ZiBoYXZpbmcgdGhvc2UgY2FsbGJhY2sgZmllbGRzIGFuZA0KPiBpbmRpcmVjdGlvbiBldGMsIHlv dSBjb3VsZCBoYXZlIHNvbWV0aGluZyBtb3JlIGFraW4gdG8gdGhpczoNCj4gDQo+ICAtIGxldCB0 aGUgY2FsbGVyIGtub3cgd2hhdCB0aGUgc3RhdGUgc2l6ZSBpcyBhbmQgYWxsb2NhdGUgdGhlDQo+ IHN5bmNocm9ub3VzIHN0YXRlIGluIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmVzDQo+IA0KPiAgLSBs ZXQgdGhlIGNhbGxlciBqdXN0IGNhbGwgYSBzdGF0aWMgImRlY3J5cHRfeHl6KCkiIGZ1bmN0aW9u IGZvciB4eXoNCj4gZGVjcnlwdHJpb24uDQo+IA0KRmluZSBmb3IgdGhvc2UgZmV3IGNhc2VzIHdo ZXJlIHRoZSBhbGdvcml0aG0gaXMga25vd24gYW5kIGZpeGVkLg0KKFlvdSBkbyByZWFsaXplIHRo YXQgdGhlIHByaW1hcnkgdXNlIGNhc2VzIGFyZSBJUHNlYywgZG1jcnlwdCBhbmQNCmZzY3J5cHQg d2hlcmUgdGhhdCBpcyBtb3N0IGRlZmluaXRlbHkgX25vdF8gdGhlIGNhc2U/KQ0KDQpBbHNvLCB5 b3UncmUgc3RpbGwgaWdub3JpbmcgdGhlIGZhY3QgdGhhdCB0aGVyZSBpcyBub3Qgb25lLCBzaW5n bGUsDQpvcHRpbWFsLCBDUFUgaW1wbGVtZW50YXRpb24gZWl0aGVyLiBZb3UgaGF2ZSB0byBzZWxl Y3QgdGhhdCBhcyB3ZWxsLA0KYmFzZWQgb24gQ1BVIGZlYXR1cmVzLiBTbyBpdCdzIGVpdGhlciBh biBpbmRpcmVjdCBmdW5jdGlvbiBjYWxsIHRoYXQNCndvdWxkIGJlIHdlbGwgcHJlZGljdGFibGUg LSBhcyBpdCdzIGFsd2F5cyB0aGUgc2FtZSBhdCB0aGF0IHBvaW50IGluDQp0aGUgcHJvZ3JhbSAt IG9yIGl0J3MgYSBkZWVwIGlmLWVsc2UgdHJlZSAod2hpY2ggbWlnaHQgYWN0dWFsbHkgYmUNCmlt cGxlbWVudGVkIGJ5IHRoZSBjb21waWxlciBhcyBhbiBpbmRpcmVjdCAodGFibGUpIGp1bXAgLi4u KSANCnNlbGVjdGluZyB0aGUgZmFzdGVzdCBpbXBsZW1lbnRhdGlvbiwgZWl0aGVyIFNXIF9vcl8g SFcuDQoNCj4gIC0gaWYgeW91IGVuZCB1cCBkb2luZyBpdCBzeW5jaHJvbm91c2x5LCB0aGF0IGZ1 bmN0aW9uIGp1c3QgcmV0dXJucw0KPiAiZG9uZSIuIE5vIG92ZXJoZWFkLiBObyBleHRyYSBhbGxv Y2F0aW9ucy4gTm8gdW5uZWNlc3Nhcnkgc3R1ZmYuIEp1c3QNCj4gZG8gaXQsIHVzaW5nIHRoZSBi dWZmZXJzIHByb3ZpZGVkLiBFbmQgb2Ygc3RvcnkuIEVmZmljaWVudCBhbmQgc2ltcGxlLg0KPiAN CkkgZG9uJ3Qgc2VlIHdoaWNoICJleHRyYSBhbGxvY2F0aW9ucyIgeW91IHdvdWxkIGJlIHNhdmlu ZyBoZXJlLg0KVGhvc2Ugc2hvdWxkbid0IGhhcHBlbiBpbiB0aGUgaG90IHBhdGggZWl0aGVyIHdh eS4NCg0KPiAgLSBCVVQuDQo+IA0KPiAgLSBhbnkgaGFyZHdhcmUgY291bGQgaGF2ZSByZWdpc3Rl cmVkIGl0c2VsZiBmb3IgIkkgY2FuIGRvIHh5eiIsIGFuZA0KPiB0aGUgZGVjcnlwdF94eXooKSBm dW5jdGlvbiB3b3VsZCBrbm93IGFib3V0IHRob3NlLCBhbmQgKmlmKiBpdCBoYXMgYQ0KPiBsaXN0 IG9mIGFjY2VsZXJhdG9ycyAoaG9wZWZ1bGx5IHNvcnRlZCBieSBwcmVmZXJlbmNlIGV0YyksIGl0 IHdvdWxkDQo+IHRyeSB0byB1c2UgdGhlbS4gQW5kIGlmIHRoZXkgdGFrZSB0aGUgam9iICh0aGV5 IG1pZ2h0IG5vdCAtIG1heWJlDQo+IHRoZWlyIHF1ZXVlcyBhcmUgZnVsbCwgbWF5YmUgdGhleSBk b24ndCBoYXZlIHJvb20gZm9yIG5ldyBrZXlzIGF0IHRoZQ0KPiBtb21lbnQsIHdoaWNoIG1pZ2h0 IGJlIGEgc2VwYXJhdGUgc2V0dXAgZnJvbSB0aGUgcXVldWVzKSwgdGhlDQo+ICJkZWNyeXB0X3h5 eigpIiBmdW5jdGlvbiByZXR1cm5zIGEgX2Nvb2tpZV8gZm9yIHRoYXQgam9iLiBJdCdzDQo+IHBy b2JhYmx5IGEgcHJlLWFsbG9jYXRlZCBvbmUgKHRoZSBodyBhY2NlbGVyYXRvciBtaWdodCBwcmVh bGxvY2F0ZSBhDQo+IGZpeGVkIG51bWJlciBvZiBpbi1wcm9ncmVzcyBkYXRhIHN0cnVjdHVyZXMp Lg0KPiANCj4gQW5kIG9uY2UgeW91IGhhdmUgdGhhdCBjb29raWUsIGFuZCB5b3Ugc2VlICJvaywg SSBkaWRuJ3QgZ2V0IHRoZQ0KPiBhbnN3ZXIgaW1tZWRpYXRlbHkiIG9ubHkgVEhFTiBkbyB5b3Ug c3RhcnQgZmlsbGluZyBpbiB0aGluZ3MgbGlrZQ0KPiBjYWxsYmFjayBzdHVmZiwgb3IgbWF5YmUg eW91IHNldCB1cCBhIHdhaXQtcXVldWUgYW5kIHN0YXJ0IHdhaXRpbmcgZm9yDQo+IGl0LCBvciB3 aGF0ZXZlciIuDQo+IA0KSSBkb24ndCBzZWUgdGhlIHBvaW50IG9mIHNhdmluZyB0aGF0IHNpbmds ZSBjYWxsYmFjayBwb2ludGVyIHdyaXRlLg0KSSBtZWFuLCBpdCdzIGp1c3QgX29uZV8gQ1BVIHdv cmQgbWVtb3J5IHdyaXRlLiBMaWtlbHkgdG8gdGhlIEwxIGNhY2hlLg0KDQpCdXQgSSBjYW4gc2Vl IHRoZSBhcHBlYWwgb2YgZ2V0dGluZyBhICJkb25lIiByZXNwb25zZSBvbiB0aGUgX2VuY3J5cHQo KS8NCl9kZWNyeXB0KCkgY2FsbCBhbmQgdGhlbiBiZWluZyBhYmxlIHRvIGltbWVkaWF0ZWx5IGNv bnRpbnVlIHByb2Nlc3NpbmcNCnRoZSByZXN1bHQgZGF0YSBhbmQgaGF2aW5nIHRoZSBhc3luYyBy ZXNwb25zZSBoYW5kbGluZyBzZXBhcmF0ZWQgb2ZmLiANCg0KSSB0aGluayBpdCBzaG91bGQgYWN0 dWFsbHkgYmUgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBBUEkgdG8gd29yayBsaWtlDQp0aGF0IHdp dGhvdXQgYnJlYWtpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgaS5lLiBkZWZpbmUgc29tZSBm bGFnDQpzcGVjaWZ5aW5nIHlvdSBhY3R1YWxseSBfd2FudF8gdGhpcyBiZWhhdmlvciBhbmQgdGhl biBkZWZpbmUgc29tZQ0KcmV0dXJuIGNvZGUgdGhhdCBzYXlzICJJJ20gZG9uZSBwcm9jZXNzaW5n LCBjYXJyeSBvbiBwbGVhc2UiLg0KDQo+IFNlZSB0aGUgZGlmZmVyZW5jZSBpbiBtb2RlbHM/IE9u ZSBmb3JjZXMgdGhhdCBhc3luY2hyb25vdXMgbW9kZWwsIGFuZA0KPiBhY3RpdmVseSBwZW5hbGl6 ZXMgdGhlIHN5bmNocm9ub3VzIG9uZS4NCj4gDQo+IFRoZSBvdGhlciBfYWxsb3dzXyBhbiBhc3lu Y2hyb25vdXMgbW9kZWwsIGJ1dCBpcyBmaW5lIHdpdGggYSBzeW5jaHJvbm91cyBvbmUuDQo+IA0K PiA+ID4gICAgICAgIGFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCAwLCBOVUxMLCBOVUxM KTsNCj4gPiA+DQo+ID4gVGhpcyBpcyBqdXN0IGluZXZpdGFibGUgZm9yIEhXIGFjY2VyYXRpb24g Li4uDQo+IA0KPiBTZWUgYWJvdmUuIEl0IHJlYWxseSBpc24ndC4gWW91IGNvdWxkIGRvIGl0ICph ZnRlciogdGhlIGZhY3QsDQo+DQpCZWZvcmUgLi4uIGFmdGVyIC4uLiB0aGUgcG9pbnQgd2FzIHlv dSBuZWVkIGl0LiBBbmQgaXQncyBhIHRvdGFsbHkNCmluc2lnbmlmaWNhbnQgc2F2aW5nIGFueXdh eS4NCg0KPiB3aGVuDQo+IHlvdSd2ZSBnb3R0ZW4gdGhhdCB0aWNrZXQgZnJvbSB0aGUgaGFyZHdh cmUuIFRoZW4geW91IHNheSAib2ssIGlmIHRoZQ0KPiB0aWNrZXQgaXMgZG9uZSwgdXNlIHRoZXNl IGNhbGxiYWNrcyIuIE9yICJJJ2xsIG5vdyB3YWl0IGZvciB0aGlzDQo+IHRpY2tldCB0byBiZSBk b25lIiAod2hpY2ggaXMgd2hhdCB0aGUgYWJvdmUgZG9lcyBieSBzZXR0aW5nIHRoZQ0KPiBjYWxs YmFja3MgdG8gemVybykuDQo+IA0KPiBXb3VsZG4ndCB0aGF0IGJlIGxvdmVseSBmb3IgYSB1c2Vy Pw0KPiANClllcyBhbmQgbm8uDQpCZWNhdXNlIHRoZSB1c2VyIHdvdWxkIF9zdGlsbF8gbmVlZCB0 byBoYW5kbGUgdGhlIGNhc2Ugb2YgY2FsbGJhY2tzLg0KSW4gY2FzZSB0aGUgcmVxdWVzdCBfZG9l c18gZ28gdG8gdGhlIEhXIGFjY2VsZXJhdG9yLg0KDQpTbyB5b3Uga2VlcCB0aGUgbWFpbiBwcm9j ZXNzaW5nIHBhdGggY2xlYW4gSSBzdXBwb3NlLCBzYXZpbmcgc29tZSANCmN5Y2xlcyB0aGVyZSwg YnV0IHlvdSBzdGlsbCBoYXZlIHRoaXMgY2FzZSBvZiBjYWxsYmFja3MgYW5kIGhhdmluZw0KbXVs dGlwbGUgcmVxdWVzdHMgcXVldWVkIHlvdSBuZWVkIHRvIGhhbmRsZSBhcyB3ZWxsLiBXaGljaCBu b3cgDQpiZWNvbWVzIGEgc2VwYXJhdGUgX2V4Y2VwdGlvbl8gY2FzZS4gIFlvdSBub3cgaGF2ZSAg dHdvIGRpc3RpbmN0IA0KcHJvY2Vzc2luZyBwYXRocyB5b3UgaGF2ZSB0byBtYW5hZ2UgZnJvbSB5 b3VyIGFwcGxpY2F0aW9uLg0KSG93IGlzIHRoYXQgYW4gX2ltcHJvdmVtZW50XyBmb3IgdGhlIHVz ZXI/IChub3Qgd2l0aHN0YW5kaW5nIHRoYXQNCml0IG1heSBiZSBhbiBpbXByb3ZlbWVudCB0byBT VyBvbmx5IHBlcmZvcm1hbmNlKQ0KDQo+IEkgc3VzcGVjdCBpdCB3b3VsZCBiZSBhIG5pY2UgbW9k ZWwgZm9yIGEgaHcgYWNjZWxlcmF0b3IgdG9vLiBJZiB5b3UNCj4gaGF2ZSBmdWxsIHF1ZXVlcyBv ciBoYXZlIHByb2JsZW1zIGFsbG9jYXRpbmcgbmV3IG1lbW9yeSBvciB3aGF0ZXZlciwNCj4geW91 IGp1c3QgbGV0IHRoZSBjb2RlIGZhbGwgYmFjayB0byB0aGUgc3luY2hyb25vdXMgaW50ZXJmYWNl Lg0KPiANCkhXIGRyaXZlcnMgdHlwaWNhbGx5IF9kb18gdXNlIFNXIGZhbGxiYWNrIGZvciBjYXNl cyB0aGV5IGNhbm5vdA0KaGFuZGxlLiBBY3R1YWxseSwgdGhhdCB3b3JrcyB2ZXJ5IG5pY2VseSB3 aXRoIHRoZSBjdXJyZW50IEFQSSwNCndpdGggdGhlIGZhbGxiYWNrIGNpcGhlciBqdXN0IGJlaW5n IGF0dGFjaGVkIHRvIHRoZSBvcmlnaW5hbA0KcmVxdWVzdHMnIGNhbGxiYWNrIGZ1bmN0aW9uIC4u LiBpLmUuIGp1c3QgZG8gYSB0YWlsIGNhbGwgdG8gDQp0aGUgZmFsbGJhY2sgY2lwaGVyIHJlcXVl c3QuDQoNCj4gPiBUcnVzdCBtZSwgSSBoYXZlIHdob2xlIGxpc3Qgb2YgdGhpbmdzIEkgZG9uJ3Qg bGlrZSBhYm91dCB0aGUNCj4gPiBBUEkgbXlzZWxmLCBpdCdzIG5vdCBleGFjdHkgaWRlYWwgZm9y IEhXIGFjY2VsZXJhdGlvbiAgZWl0aGVyLg0KPiANCj4gVGhhdCc7cyB0aGUgdGhpbmcuIEl0J3Mg YWN0aXZlbHkgZGV0cmltZW50YWwgZm9yICJJIGhhdmUgbm8gSFcgYWNjZWxlcmF0aW9uIi4NCj4g DQpZb3Uga2VlcCBhc3NlcnRpbmcgdGhhdCB3aXRoIG5vIGV2aWRlbmNlIHdoYXRzb2VldmVyLg0K DQo+IEFuZCBhcHBhcmVudGx5IGl0J3Mgbm90IG9wdGltYWwgZm9yIHlvdSBndXlzIGVpdGhlci4N Cj4gDQpUcnVlLCBidXQgSSBhY2NlcHQgdGhlIGZhY3QgdGhhdCBpdCBuZWVkcyB0byBiZSB0aGF0 IHdheSBiZWNhdXNlIHNvbWUNCl9vdGhlcl8gSFcgbWF5IGRyaXZlIHRoYXQgcmVxdWlyZW1lbnQu IEkgYWNjZXB0IHRoZSBmYWN0IHRoYXQgSSdtIG5vdA0KYWxvbmUgaW4gdGhlIHdvcmxkLg0KDQo+ ID4gQnV0IHRoZSBwb2ludCBpcyAtIHRoZXJlIGFyZSB0aG9zZSBjYXNlIHdoZXJlIHlvdSBfZG9u J3RfIGtub3cgYW5kDQo+ID4gX3RoYXRfIGlzIHdoYXQgdGhlIENyeXB0byBBUEkgaXMgZm9yLiBB bmQganVzdCBnZW5lcmFsbHksIGNyeXB0bw0KPiA+IHJlYWxseSBfc2hvdWxkXyBiZSBzd2l0Y2hh YmxlLg0KPiANCj4gSXQncyB2ZXJ5IG11Y2ggbm90IHdoYXQgd2lyZWd1YXJkIGRvZXMuDQo+IA0K QW5kIHRoYXQncyB2ZXJ5IG11Y2ggYSBwYXJ0IG9mIFdpcmVndWFyZCB0aGF0IGlzIF9icm9rZW5f LiBJIGxpa2UNCldpcmVndWFyZCBmb3IgYSBsb3Qgb2YgdGhpbmdzLCBidXQgaXQncyBzaW5nbGUg Y2lwaGVyIGZvY3VzIGlzIG5vdA0Kb25lIG9mIHRoZW0uIEVzcGVjaWFsbHkgc2luY2UgYWxsIGNy eXB0byBpdCB1c2VzIGNvbWVzIGZyb20gYSBzaW5nbGUNCnNvdXJjZSAoREpCKSwgd2hpY2ggaXMg ZnJvd25lZCB1cG9uIGluIHRoZSBpbmR1c3RyeS4NCg0KQ3J5cHRvIGFnaWxpdHkgaXMgYSB2ZXJ5 IGltcG9ydGFudCBfc2VjdXJpdHlfIGZlYXR1cmUgYW5kIHRoZSB3aG9sZQ0KYXJndW1lbnQgSmFz b24gbWFrZXMgdGhhdCBpdCBpcyBhY3R1YWxseSBhIHdlYWtuZXNzIGlzIF9idWxsc2hpdF8uDQoo SnVzdCBiZWNhdXNlIFNTTCBfaW1wbGVtZW50ZWRfIHRoaXMgaG9ycmlibHkgd3JvbmcgZG9lc24n dCBtZWFuIA0KaXQncyBhIGJhZCB0aGluZyB0byBkbyAtIGl0J3Mgbm90LCBpdCdzIGFjdHVhbGx5 IF9uZWNlc3NhcnlfLiBBcyANCnRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBlaXRoZXIgY29u dGludWUgdXNpbmcgYnJva2VuIGNyeXB0bw0Kb3Igd2FpdCBfbW9udGhzXyBmb3IgYSBuZXcgaW1w bGVtZW50YXRpb24gdG8gcmVhY2ggeW91ciBkZXZpY2VzDQp3aGVuIHRoZSBjcnlwdG8gZ2V0cyBi cm9rZW4gc29tZWhvdy4gTm90IGdvb2QuKQ0KDQo+IEFuZCBob25lc3RseSwgbW9zdCBvZiB0aGUg c3dpdGNoYWJsZSBvbmVzIGhhdmUgY2F1c2VkIHdheSBtb3JlDQo+IHNlY3VyaXR5IHByb2JsZW1z IHRoYW4gdGhleSBoYXZlICJmaXhlZCIgYnkgYmVpbmcgc3dpdGNoYWJsZS4NCj4gDQoibW9zdCBv ZiB0aGUgc3dpdGNoYWJsZSBvbmVzIg0KWW91IG1lYW4gX2p1c3RfIFNTTC9UTFMuIFNTTC9UTFMg YmVmb3JlIDEuMyBqdXN0IHN1Y2tlZCBzZWN1cml0eQ0Kd2lzZSwgb24gc28gbWFueSBsZXZlbHMu IFRoYXQgaGFzIF9ub3RoaW5nXyB0byBkbyB3aXRoIHRoZSB2ZXJ5DQpkZXNpcmFibGUgZmVhdHVy ZSBvZiBjcnlwdG8gYWdpbGl0eS4gSXQgX2Nhbl8gYmUgZG9uZSBwcm9wZXJseSBhbmQgDQpzZWN1 cmVseS4gKGZvciBvbmUgdGhpbmcsIGl0IGRvZXMgbm90IF9uZWVkXyB0byBiZSBuZWdvdGlhYmxl KQ0KDQo+ICAgICAgICAgICAgICAgICAgTGludXMNCg0KUmVnYXJkcywNClBhc2NhbCB2YW4gTGVl dXdlbg0KU2lsaWNvbiBJUCBBcmNoaXRlY3QsIE11bHRpLVByb3RvY29sIEVuZ2luZXMgQCBWZXJp bWF0cml4DQp3d3cuaW5zaWRlc2VjdXJlLmNvbQ0K