From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20079.outbound.protection.outlook.com [40.107.2.79]) by dpdk.org (Postfix) with ESMTP id 4B5585B20 for ; Thu, 11 Apr 2019 06:35:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WJ02Cs8LYZL5/u36bLUOe2rxgvBZA9bRpxPB1Q2yuTM=; b=Phz07rBtIRs4aeYfb+kBi4CjSBFTI+XnsPXNQUjAKyX13snqtvMs+fH71NdHYO8xVNXO9CBlkrxyFzNSx0ik8kuKP30nkg4byMZPHAt30BbGKs/oLNFTn980Xl+98NTHKXo4LYXq8kKC8wctr7HWiN+uCNYwHa889b16t18FB9M= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.152) by VE1PR08MB4894.eurprd08.prod.outlook.com (10.255.113.211) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1771.21; Thu, 11 Apr 2019 04:35:04 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177%2]) with mapi id 15.20.1771.016; Thu, 11 Apr 2019 04:35:04 +0000 From: Honnappa Nagarahalli To: "paulmck@linux.ibm.com" CC: "konstantin.ananyev@intel.com" , "stephen@networkplumber.org" , "marko.kovacevic@intel.com" , "dev@dpdk.org" , "Gavin Hu (Arm Technology China)" , Dharmik Thakkar , Malvika Gupta , Honnappa Nagarahalli , nd , nd Thread-Topic: [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism Thread-Index: AQHU78lDsy4W0sThdUi8p6MItiPVFqY2RtWA Date: Thu, 11 Apr 2019 04:35:04 +0000 Message-ID: References: <20181122033055.3431-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-2-honnappa.nagarahalli@arm.com> <20190410181432.GO14111@linux.ibm.com> In-Reply-To: <20190410181432.GO14111@linux.ibm.com> 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=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.103.75] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a71faa6a-a966-4bde-7316-08d6be3711b2 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600139)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:VE1PR08MB4894; x-ms-traffictypediagnostic: VE1PR08MB4894: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 00046D390F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(366004)(346002)(39860400002)(396003)(376002)(25584004)(199004)(189003)(13464003)(2351001)(68736007)(81166006)(71200400001)(5660300002)(305945005)(8936002)(52536014)(8676002)(4326008)(14444005)(256004)(7736002)(14454004)(229853002)(53946003)(478600001)(72206003)(86362001)(5640700003)(71190400001)(1730700003)(53936002)(81156014)(9686003)(55016002)(6246003)(6436002)(26005)(30864003)(53546011)(476003)(186003)(6506007)(33656002)(7696005)(74316002)(2906002)(3846002)(11346002)(486006)(6116002)(6916009)(93886005)(54906003)(99286004)(66066001)(446003)(2501003)(97736004)(76176011)(25786009)(316002)(106356001)(105586002)(102836004)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4894; H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: zCJew1ekJ01YQWnoheNJSbFlTK05f3tWA32nxbhZ79heW8a4B/d/eO4W3wUQKYBUXXkT61Uf+GGzEAwGt1RSe8gVxoP4NEoLWrnSx0wqcEEkrEqfKLnB5yENw+B98G6p7y5Hk2yhlOHoDSF6ubeXDdtXAXqvSBaxN1u60lOvLTSoahuTwl6SG9n3vTnJa3eN8QqYZLOhpwZcU8+Z8ADo4Vva5sHXibsmcacZczY7QbE5p/sZhDXaK8HF6IgtJnmApYRv1KjiPHmxzZnRCYqejDCKGS7oMJEbIiD1BEfzzl3ym8DDm7kSvSq+ynhyKa/9HWBdEzvLoRmediHUQFLWGbzWlC0V0SmySqdgMPOPfDZz8s1NHgTy+HJFlkmr7g6XjmL9v2B+WhBmYK0ycvmzJRt6v1bZwSOphtytdcOX4wE= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: a71faa6a-a966-4bde-7316-08d6be3711b2 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Apr 2019 04:35:04.7108 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4894 Subject: Re: [dpdk-dev] [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Apr 2019 04:35:10 -0000 SGkgUGF1bCwNCglUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGF1bCBFLiBNY0tlbm5leSA8cGF1bG1ja0BsaW51eC5p Ym0uY29tPg0KPiBTZW50OiBXZWRuZXNkYXksIEFwcmlsIDEwLCAyMDE5IDE6MTUgUE0NCj4gVG86 IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tPg0KPiBD Yzoga29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1bWJlci5v cmc7DQo+IG1hcmtvLmtvdmFjZXZpY0BpbnRlbC5jb207IGRldkBkcGRrLm9yZzsgR2F2aW4gSHUg KEFybSBUZWNobm9sb2d5DQo+IENoaW5hKSA8R2F2aW4uSHVAYXJtLmNvbT47IERoYXJtaWsgVGhh a2thcg0KPiA8RGhhcm1pay5UaGFra2FyQGFybS5jb20+OyBNYWx2aWthIEd1cHRhIDxNYWx2aWth Lkd1cHRhQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjQgMS8zXSByY3U6IGFkZCBS Q1UgbGlicmFyeSBzdXBwb3J0aW5nIFFTQlINCj4gbWVjaGFuaXNtDQo+IA0KPiBPbiBXZWQsIEFw ciAxMCwgMjAxOSBhdCAwNjoyMDowNEFNIC0wNTAwLCBIb25uYXBwYSBOYWdhcmFoYWxsaSB3cm90 ZToNCj4gPiBBZGQgUkNVIGxpYnJhcnkgc3VwcG9ydGluZyBxdWllc2NlbnQgc3RhdGUgYmFzZWQg bWVtb3J5IHJlY2xhbWF0aW9uDQo+IG1ldGhvZC4NCj4gPiBUaGlzIGxpYnJhcnkgaGVscHMgaWRl bnRpZnkgdGhlIHF1aWVzY2VudCBzdGF0ZSBvZiB0aGUgcmVhZGVyIHRocmVhZHMNCj4gPiBzbyB0 aGF0IHRoZSB3cml0ZXJzIGNhbiBmcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBs b2NrIGxlc3MNCj4gPiBkYXRhIHN0cnVjdHVyZXMuDQo+IA0KPiBJIGRvbid0IHNlZSBhbnkgc2ln biBvZiByZWFkLXNpZGUgbWFya2VycyAocmN1X3JlYWRfbG9jaygpIGFuZA0KPiByY3VfcmVhZF91 bmxvY2soKSBpbiB0aGUgTGludXgga2VybmVsLCB1c2Vyc3BhY2UgUkNVLCBldGMuKS4NCj4gDQo+ IFllcywgc3RyaWN0bHkgc3BlYWtpbmcsIHRoZXNlIGFyZSBub3QgbmVlZGVkIGZvciBRU0JSIHRv IG9wZXJhdGUsIGJ1dCB0aGV5DQpUaGVzZSBBUElzIHdvdWxkIGJlIGVtcHR5IGZvciBRU0JSLg0K DQo+IG1ha2UgaXQgd2F5IGVhc2llciB0byBtYWludGFpbiBhbmQgZGVidWcgY29kZSB1c2luZyBS Q1UuICBGb3IgZXhhbXBsZSwNCj4gZ2l2ZW4gdGhlIHJlYWQtc2lkZSBtYXJrZXJzLCB5b3UgY2Fu IGNoZWNrIGZvciBlcnJvcnMgbGlrZSBoYXZpbmcgYSBjYWxsIHRvDQo+IHJ0ZV9yY3VfcXNicl9x dWllc2NlbnQoKSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVhZGVyIHF1aXRlIGVhc2lseS4NCj4gV2l0 aG91dCB0aG9zZSByZWFkLXNpZGUgbWFya2VycywgbGlmZSBjYW4gYmUgcXVpdGUgaGFyZCBhbmQg eW91IHdpbGwgcmVhbGx5DQo+IGhhdGUgeW91cnNlbGYgZm9yIGZhaWxpbmcgdG8gaGF2ZSBwcm92 aWRlZCB0aGVtLg0KV2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0b29kIHRoaXMsIGRvIHlvdSBt ZWFuIHRoZSBhcHBsaWNhdGlvbiB3b3VsZCBtYXJrIGJlZm9yZSBhbmQgYWZ0ZXIgYWNjZXNzaW5n IHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgb24gdGhlIHJlYWRlciBzaWRlPw0KDQpydGVfcmN1 X3FzYnJfbG9jaygpDQo8YmVnaW4gYWNjZXNzIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT4NCi4uLg0K Li4uDQo8ZW5kIGFjY2VzcyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmU+DQpydGVfcmN1X3FzYnJfdW5s b2NrKCkNCg0KSWYgc29tZW9uZSBpcyBkZWJ1Z2dpbmcgdGhpcyBjb2RlLCB0aGV5IGhhdmUgdG8g bWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gdW5sb2NrIGZvciBldmVyeSBsb2NrIGFuZCB0aGVy ZSBpcyBubyBjYWxsIHRvIHJ0ZV9yY3VfcXNicl9xdWllc2NlbnQgaW4gYmV0d2Vlbi4NCkl0IHNv dW5kcyBnb29kIHRvIG1lLiBPYnZpb3VzbHksIHRoZXkgd2lsbCBub3QgYWRkIGFueSBhZGRpdGlv bmFsIGN5Y2xlcyBhcyB3ZWxsLg0KUGxlYXNlIGxldCBtZSBrbm93IGlmIG15IHVuZGVyc3RhbmRp bmcgaXMgY29ycmVjdC4NCg0KPiANCj4gU29tZSBhZGRpdGlvbmFsIHF1ZXN0aW9ucyBhbmQgY29t bWVudHMgaW50ZXJzcGVyc2VkLg0KPiANCj4gCQkJCQkJCVRoYW54LCBQYXVsDQo+IA0KPiA+IFNp Z25lZC1vZmYtYnk6IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxob25uYXBwYS5uYWdhcmFoYWxsaUBh cm0uY29tPg0KPiA+IFJldmlld2VkLWJ5OiBTdGV2ZSBDYXBwZXIgPHN0ZXZlLmNhcHBlckBhcm0u Y29tPg0KPiA+IFJldmlld2VkLWJ5OiBHYXZpbiBIdSA8Z2F2aW4uaHVAYXJtLmNvbT4NCj4gPiBS ZXZpZXdlZC1ieTogT2xhIExpbGplZGFobCA8b2xhLmxpbGplZGFobEBhcm0uY29tPg0KPiA+IEFj a2VkLWJ5OiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+ DQo+ID4gLS0tDQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUg Kw0KPiA+ICBjb25maWcvY29tbW9uX2Jhc2UgICAgICAgICAgICAgICAgIHwgICA2ICsNCj4gPiAg bGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArDQo+ID4gIGxpYi9saWJy dGVfcmN1L01ha2VmaWxlICAgICAgICAgICAgfCAgMjMgKysNCj4gPiAgbGliL2xpYnJ0ZV9yY3Uv bWVzb24uYnVpbGQgICAgICAgICB8ICAgNSArDQo+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3Vf cXNici5jICAgICAgfCAyMzcgKysrKysrKysrKysrDQo+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9y Y3VfcXNici5oICAgICAgfCA1NTQNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4g PiAgbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcCB8ICAxMSArDQo+ID4gIGxpYi9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiAgbWsvcnRlLmFwcC5t ayAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIDEwIGZpbGVzIGNoYW5nZWQsIDg0 NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pICBjcmVhdGUgbW9kZQ0KPiA+IDEwMDY0NCBs aWIvbGlicnRlX3JjdS9NYWtlZmlsZSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gbGliL2xpYnJ0 ZV9yY3UvbWVzb24uYnVpbGQgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IGxpYi9saWJydGVfcmN1 L3J0ZV9yY3VfcXNici5jICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBsaWIvbGlicnRlX3JjdS9y dGVfcmN1X3FzYnIuaCAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gbGliL2xpYnJ0ZV9yY3UvcnRl X3JjdV92ZXJzaW9uLm1hcA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJ TlRBSU5FUlMgaW5kZXggOTc3NDM0NGRkLi42ZTk3NjZlZWQNCj4gPiAxMDA2NDQNCj4gPiAtLS0g YS9NQUlOVEFJTkVSUw0KPiA+ICsrKyBiL01BSU5UQUlORVJTDQo+ID4gQEAgLTEyNjcsNiArMTI2 NywxMSBAQCBGOiBleGFtcGxlcy9icGYvDQo+ID4gIEY6IGFwcC90ZXN0L3Rlc3RfYnBmLmMNCj4g PiAgRjogZG9jL2d1aWRlcy9wcm9nX2d1aWRlL2JwZl9saWIucnN0DQo+ID4NCj4gPiArUkNVIC0g RVhQRVJJTUVOVEFMDQo+ID4gK006IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxob25uYXBwYS5uYWdh cmFoYWxsaUBhcm0uY29tPg0KPiA+ICtGOiBsaWIvbGlicnRlX3JjdS8NCj4gPiArRjogZG9jL2d1 aWRlcy9wcm9nX2d1aWRlL3JjdV9saWIucnN0DQo+ID4gKw0KPiA+DQo+ID4gIFRlc3QgQXBwbGlj YXRpb25zDQo+ID4gIC0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gZGlmZiAtLWdpdCBhL2NvbmZpZy9j b21tb25fYmFzZSBiL2NvbmZpZy9jb21tb25fYmFzZSBpbmRleA0KPiA+IDhkYTA4MTA1Yi4uYWQ3 MGM3OWUxIDEwMDY0NA0KPiA+IC0tLSBhL2NvbmZpZy9jb21tb25fYmFzZQ0KPiA+ICsrKyBiL2Nv bmZpZy9jb21tb25fYmFzZQ0KPiA+IEBAIC04MjksNiArODI5LDEyIEBAIENPTkZJR19SVEVfTElC UlRFX0xBVEVOQ1lfU1RBVFM9eSAgIw0KPiA+IENPTkZJR19SVEVfTElCUlRFX1RFTEVNRVRSWT1u DQo+ID4NCj4gPiArIw0KPiA+ICsjIENvbXBpbGUgbGlicnRlX3JjdQ0KPiA+ICsjDQo+ID4gK0NP TkZJR19SVEVfTElCUlRFX1JDVT15DQo+ID4gK0NPTkZJR19SVEVfTElCUlRFX1JDVV9ERUJVRz1u DQo+ID4gKw0KPiA+ICAjDQo+ID4gICMgQ29tcGlsZSBsaWJydGVfbHBtDQo+ID4gICMNCj4gPiBk aWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlIGluZGV4IDI2MDIxZDBjMC4u NzkxZTBkOTkxDQo+ID4gMTAwNjQ0DQo+ID4gLS0tIGEvbGliL01ha2VmaWxlDQo+ID4gKysrIGIv bGliL01ha2VmaWxlDQo+ID4gQEAgLTExMSw2ICsxMTEsOCBAQCBESVJTLSQoQ09ORklHX1JURV9M SUJSVEVfSVBTRUMpICs9DQo+IGxpYnJ0ZV9pcHNlYw0KPiA+IERFUERJUlMtbGlicnRlX2lwc2Vj IDo9IGxpYnJ0ZV9lYWwgbGlicnRlX21idWYgbGlicnRlX2NyeXB0b2Rldg0KPiA+IGxpYnJ0ZV9z ZWN1cml0eQ0KPiA+ICBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfVEVMRU1FVFJZKSArPSBsaWJy dGVfdGVsZW1ldHJ5DQo+ID4gREVQRElSUy1saWJydGVfdGVsZW1ldHJ5IDo9IGxpYnJ0ZV9lYWwg bGlicnRlX21ldHJpY3MgbGlicnRlX2V0aGRldg0KPiA+ICtESVJTLSQoQ09ORklHX1JURV9MSUJS VEVfUkNVKSArPSBsaWJydGVfcmN1IERFUERJUlMtbGlicnRlX3JjdSA6PQ0KPiA+ICtsaWJydGVf ZWFsDQo+ID4NCj4gPiAgaWZlcSAoJChDT05GSUdfUlRFX0VYRUNfRU5WX0xJTlVYKSx5KQ0KPiA+ ICBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfS05JKSArPSBsaWJydGVfa25pIGRpZmYgLS1naXQN Cj4gPiBhL2xpYi9saWJydGVfcmN1L01ha2VmaWxlIGIvbGliL2xpYnJ0ZV9yY3UvTWFrZWZpbGUg bmV3IGZpbGUgbW9kZQ0KPiA+IDEwMDY0NCBpbmRleCAwMDAwMDAwMDAuLjZhYTY3N2JkMQ0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3JjdS9NYWtlZmlsZQ0KPiA+IEBA IC0wLDAgKzEsMjMgQEANCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh dXNlICMgQ29weXJpZ2h0KGMpIDIwMTggQXJtDQo+ID4gK0xpbWl0ZWQNCj4gPiArDQo+ID4gK2lu Y2x1ZGUgJChSVEVfU0RLKS9tay9ydGUudmFycy5taw0KPiA+ICsNCj4gPiArIyBsaWJyYXJ5IG5h bWUNCj4gPiArTElCID0gbGlicnRlX3JjdS5hDQo+ID4gKw0KPiA+ICtDRkxBR1MgKz0gLURBTExP V19FWFBFUklNRU5UQUxfQVBJDQo+ID4gK0NGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykgLUkkKFNS Q0RJUikgLU8zIExETElCUyArPSAtbHJ0ZV9lYWwNCj4gPiArDQo+ID4gK0VYUE9SVF9NQVAgOj0g cnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ICsNCj4gPiArTElCQUJJVkVSIDo9IDENCj4gPiArDQo+ ID4gKyMgYWxsIHNvdXJjZSBhcmUgc3RvcmVkIGluIFNSQ1MteQ0KPiA+ICtTUkNTLSQoQ09ORklH X1JURV9MSUJSVEVfUkNVKSA6PSBydGVfcmN1X3FzYnIuYw0KPiA+ICsNCj4gPiArIyBpbnN0YWxs IGluY2x1ZGVzDQo+ID4gK1NZTUxJTkstJChDT05GSUdfUlRFX0xJQlJURV9SQ1UpLWluY2x1ZGUg Oj0gcnRlX3JjdV9xc2JyLmgNCj4gPiArDQo+ID4gK2luY2x1ZGUgJChSVEVfU0RLKS9tay9ydGUu bGliLm1rDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmN1L21lc29uLmJ1aWxkIGIvbGli L2xpYnJ0ZV9yY3UvbWVzb24uYnVpbGQNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAw MDAwMDAwMDAuLmMwMDlhZTRiNw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGli cnRlX3JjdS9tZXNvbi5idWlsZA0KPiA+IEBAIC0wLDAgKzEsNSBAQA0KPiA+ICsjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgIyBDb3B5cmlnaHQoYykgMjAxOCBBcm0NCj4g PiArTGltaXRlZA0KPiA+ICsNCj4gPiArc291cmNlcyA9IGZpbGVzKCdydGVfcmN1X3FzYnIuYycp DQo+ID4gK2hlYWRlcnMgPSBmaWxlcygncnRlX3JjdV9xc2JyLmgnKQ0KPiA+IGRpZmYgLS1naXQg YS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuYw0KPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRl X3JjdV9xc2JyLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPiAwMDAwMDAwMDAuLjUz ZDA4NDQ2YQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVf cmN1X3FzYnIuYw0KPiA+IEBAIC0wLDAgKzEsMjM3IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChjKSAy MDE4IEFybSBMaW1pdGVkDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHN0ZGlvLmg+ DQo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxydGVfY29tbW9uLmg+ DQo+ID4gKyNpbmNsdWRlIDxydGVfbG9nLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+ DQo+ID4gKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZWFsLmg+ DQo+ID4gKyNpbmNsdWRlIDxydGVfZWFsX21lbWNvbmZpZy5oPg0KPiA+ICsjaW5jbHVkZSA8cnRl X2F0b21pYy5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX3Blcl9sY29yZS5oPg0KPiA+ICsjaW5jbHVk ZSA8cnRlX2xjb3JlLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZXJybm8uaD4NCj4gPiArDQo+ID4g KyNpbmNsdWRlICJydGVfcmN1X3FzYnIuaCINCj4gPiArDQo+ID4gKy8qIEdldCB0aGUgbWVtb3J5 IHNpemUgb2YgUVNCUiB2YXJpYWJsZSAqLyBzaXplX3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4g K3J0ZV9yY3VfcXNicl9nZXRfbWVtc2l6ZSh1aW50MzJfdCBtYXhfdGhyZWFkcykgew0KPiA+ICsJ c2l6ZV90IHN6Ow0KPiA+ICsNCj4gPiArCWlmIChtYXhfdGhyZWFkcyA9PSAwKSB7DQo+ID4gKwkJ cnRlX2xvZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ICsJCQkiJXMoKTogSW52YWxp ZCBtYXhfdGhyZWFkcyAldVxuIiwNCj4gPiArCQkJX19mdW5jX18sIG1heF90aHJlYWRzKTsNCj4g PiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gKw0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXN6ID0gc2l6ZW9mKHN0cnVjdCBydGVfcmN1X3FzYnIpOw0KPiA+ICsN Cj4gPiArCS8qIEFkZCB0aGUgc2l6ZSBvZiBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheSAq Lw0KPiA+ICsJc3ogKz0gc2l6ZW9mKHN0cnVjdCBydGVfcmN1X3FzYnJfY250KSAqIG1heF90aHJl YWRzOw0KPiA+ICsNCj4gPiArCS8qIEFkZCB0aGUgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJlZCB0aHJl YWQgSUQgYml0bWFwIGFycmF5ICovDQo+ID4gKwlzeiArPSBSVEVfUVNCUl9USFJJRF9BUlJBWV9T SVpFKG1heF90aHJlYWRzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gUlRFX0FMSUdOKHN6LCBSVEVf Q0FDSEVfTElORV9TSVpFKTsNCj4gDQo+IEdpdmVuIHRoYXQgeW91IGFsaWduIGhlcmUsIHNob3Vs ZCB5b3UgYWxzbyBhbGlnbiBpbiB0aGUgZWFybGllciBzdGVwcyBpbiB0aGUNCj4gY29tcHV0YXRp b24gb2Ygc3o/DQpBZ3JlZS4gSSB3aWxsIHJlbW92ZSB0aGUgYWxpZ24gaGVyZSBhbmQga2VlcCB0 aGUgZWFybGllciBvbmUgYXMgdGhlIGludGVudCBpcyB0byBhbGlnbiB0aGUgdGhyZWFkIElEIGFy cmF5Lg0KDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBJbml0aWFsaXplIGEgcXVpZXNjZW50 IHN0YXRlIHZhcmlhYmxlICovIGludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9x c2JyX2luaXQoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDMyX3QgbWF4X3RocmVhZHMpIHsN Cj4gPiArCXNpemVfdCBzejsNCj4gPiArDQo+ID4gKwlpZiAodiA9PSBOVUxMKSB7DQo+ID4gKwkJ cnRlX2xvZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ICsJCQkiJXMoKTogSW52YWxp ZCBpbnB1dCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsNCj4gPiArCQlydGVfZXJybm8gPSBFSU5W QUw7DQo+ID4gKw0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXN6ID0g cnRlX3JjdV9xc2JyX2dldF9tZW1zaXplKG1heF90aHJlYWRzKTsNCj4gPiArCWlmIChzeiA9PSAx KQ0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsNCj4gPiArCS8qIFNldCBhbGwgdGhlIHRocmVhZHMg dG8gb2ZmbGluZSAqLw0KPiA+ICsJbWVtc2V0KHYsIDAsIHN6KTsNCj4gDQo+IFdlIGNhbGN1bGF0 ZSBzeiBoZXJlLCBidXQgaXQgbG9va3MgbGlrZSB0aGUgY2FsbGVyIG11c3QgYWxzbyBjYWxjdWxh dGUgaXQgaW4NCj4gb3JkZXIgdG8gY29ycmVjdGx5IGFsbG9jYXRlIHRoZSBtZW1vcnkgcmVmZXJl bmNlZCBieSB0aGUgInYiIGFyZ3VtZW50IHRvDQo+IHRoaXMgZnVuY3Rpb24sIHdpdGggYmFkIHRo aW5ncyBoYXBwZW5pbmcgaWYgdGhlIHR3byBjYWxjdWxhdGlvbnMgZ2V0DQo+IGRpZmZlcmVudCBy ZXN1bHRzLiAgU2hvdWxkICJ2IiBpbnN0ZWFkIGJlIGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5j dGlvbiB0bw0KPiBhdm9pZCB0aGlzIHNvcnQgb2YgcHJvYmxlbT8NCkVhcmxpZXIgdmVyc2lvbiBh bGxvY2F0ZWQgdGhlIG1lbW9yeSB3aXRoLWluIHRoaXMgbGlicmFyeS4gSG93ZXZlciwgaXQgd2Fz IGRlY2lkZWQgdG8gZ28gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhcyBpdCBwcm92 aWRlcyBmbGV4aWJpbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIG1hbmFnZSB0aGUgbWVtb3J5 IGFzIGl0IHNlZXMgZml0LiBGb3IgZXg6IGl0IGNvdWxkIGFsbG9jYXRlIHRoaXMgYXMgcGFydCBv ZiBhbm90aGVyIHN0cnVjdHVyZSBpbiBhIHNpbmdsZSBhbGxvY2F0aW9uLiBUaGlzIGFsc28gZmFs bHMgaW5saW5lIHdpdGggc2ltaWxhciBhcHByb2FjaCB0YWtlbiBpbiBvdGhlciBsaWJyYXJpZXMu IA0KDQo+IA0KPiA+ICsJdi0+bWF4X3RocmVhZHMgPSBtYXhfdGhyZWFkczsNCj4gPiArCXYtPm51 bV9lbGVtcyA9IFJURV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFkcywNCj4gPiArCQkJUlRFX1FT QlJfVEhSSURfQVJSQVlfRUxNX1NJWkUpIC8NCj4gPiArCQkJUlRFX1FTQlJfVEhSSURfQVJSQVlf RUxNX1NJWkU7DQo+ID4gKwl2LT50b2tlbiA9IFJURV9RU0JSX0NOVF9JTklUOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBSZWdpc3RlciBhIHJlYWRlciB0 aHJlYWQgdG8gcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUNCj4gPiArICogb24gYSBRUyB2YXJp YWJsZS4NCj4gPiArICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3Jj dV9xc2JyX3RocmVhZF9yZWdpc3RlcihzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1bnNpZ25lZCBp bnQNCj4gPiArdGhyZWFkX2lkKSB7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaWQsIHN1Y2Nlc3M7 DQo+ID4gKwl1aW50NjRfdCBvbGRfYm1hcCwgbmV3X2JtYXA7DQo+ID4gKw0KPiA+ICsJaWYgKHYg PT0gTlVMTCB8fCB0aHJlYWRfaWQgPj0gdi0+bWF4X3RocmVhZHMpIHsNCj4gPiArCQlydGVfbG9n KFJURV9MT0dfRVJSLCByY3VfbG9nX3R5cGUsDQo+ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0 IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4g PiArDQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWQgPSB0aHJlYWRf aWQgJiBSVEVfUVNCUl9USFJJRF9NQVNLOw0KPiA+ICsJaSA9IHRocmVhZF9pZCA+PiBSVEVfUVNC Ul9USFJJRF9JTkRFWF9TSElGVDsNCj4gPiArDQo+ID4gKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUg Y291bnRlciBmb3IgcmVnaXN0ZXJlZCB0aHJlYWRzIGRvZXMgbm90DQo+ID4gKwkgKiBnbyBvdXQg b2Ygc3luYy4gSGVuY2UsIGFkZGl0aW9uYWwgY2hlY2tzIGFyZSByZXF1aXJlZC4NCj4gPiArCSAq Lw0KPiA+ICsJLyogQ2hlY2sgaWYgdGhlIHRocmVhZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8N Cj4gPiArCW9sZF9ibWFwID0gX19hdG9taWNfbG9hZF9uKFJURV9RU0JSX1RIUklEX0FSUkFZX0VM TSh2LCBpKSwNCj4gPiArCQkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCWlmIChvbGRfYm1h cCAmIDFVTCA8PCBpZCkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlkbyB7DQo+ID4g KwkJbmV3X2JtYXAgPSBvbGRfYm1hcCB8ICgxVUwgPDwgaWQpOw0KPiA+ICsJCXN1Y2Nlc3MgPSBf X2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKA0KPiA+ICsJCQkJCVJURV9RU0JSX1RIUklEX0FSUkFZ X0VMTSh2LCBpKSwNCj4gPiArCQkJCQkmb2xkX2JtYXAsICZuZXdfYm1hcCwgMCwNCj4gPiArCQkJ CQlfX0FUT01JQ19SRUxFQVNFLA0KPiBfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArDQo+ID4gKwkJ aWYgKHN1Y2Nlc3MpDQo+ID4gKwkJCV9fYXRvbWljX2ZldGNoX2FkZCgmdi0+bnVtX3RocmVhZHMs DQo+ID4gKwkJCQkJCTEsIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ICsJCWVsc2UgaWYgKG9sZF9i bWFwICYgKDFVTCA8PCBpZCkpDQo+ID4gKwkJCS8qIFNvbWVvbmUgZWxzZSByZWdpc3RlcmVkIHRo aXMgdGhyZWFkLg0KPiA+ICsJCQkgKiBDb3VudGVyIHNob3VsZCBub3QgYmUgaW5jcmVtZW50ZWQu DQo+ID4gKwkJCSAqLw0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiArCX0gd2hpbGUgKHN1Y2Nlc3Mg PT0gMCk7DQo+IA0KPiBUaGlzIHdvdWxkIGJlIHNpbXBsZXIgaWYgdGhyZWFkcyB3ZXJlIHJlcXVp cmVkIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMuDQo+IE1heWJlIHlvdSBoYXZlIHVzZSBjYXNlcyBy ZXF1aXJpbmcgcmVnaXN0cmF0aW9uIG9mIG90aGVyIHRocmVhZHMsIGJ1dCB0aGlzDQo+IGNhcGFi aWxpdHkgaXMgYWRkaW5nIHNpZ25pZmljYW50IGNvbXBsZXhpdHksIHNvIGl0IG1pZ2h0IGJlIHdv cnRoIHNvbWUNCj4gdGhvdWdodC4NCj4gDQpJdCB3YXMgc2ltcGxlIGVhcmxpZXIgKF9fYXRvbWlj X2ZldGNoX29yKS4gVGhlIGNvbXBsZXhpdHkgaXMgYWRkZWQgYXMgJ251bV90aHJlYWRzJyBzaG91 bGQgbm90IGdvIG91dCBvZiBzeW5jLg0KDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyogUmVtb3ZlIGEgcmVhZGVyIHRocmVhZCwgZnJvbSB0aGUgbGlzdCBvZiB0aHJlYWRz IHJlcG9ydGluZyB0aGVpcg0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUgb24gYSBRUyB2YXJpYWJs ZS4NCj4gPiArICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9x c2JyX3RocmVhZF91bnJlZ2lzdGVyKHN0cnVjdCBydGVfcmN1X3FzYnIgKnYsIHVuc2lnbmVkIGlu dA0KPiA+ICt0aHJlYWRfaWQpIHsNCj4gPiArCXVuc2lnbmVkIGludCBpLCBpZCwgc3VjY2VzczsN Cj4gPiArCXVpbnQ2NF90IG9sZF9ibWFwLCBuZXdfYm1hcDsNCj4gPiArDQo+ID4gKwlpZiAodiA9 PSBOVUxMIHx8IHRocmVhZF9pZCA+PSB2LT5tYXhfdGhyZWFkcykgew0KPiA+ICsJCXJ0ZV9sb2co UlRFX0xPR19FUlIsIHJjdV9sb2dfdHlwZSwNCj4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQg cGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ ICsNCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZCA9IHRocmVhZF9p ZCAmIFJURV9RU0JSX1RIUklEX01BU0s7DQo+ID4gKwlpID0gdGhyZWFkX2lkID4+IFJURV9RU0JS X1RIUklEX0lOREVYX1NISUZUOw0KPiA+ICsNCj4gPiArCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBj b3VudGVyIGZvciByZWdpc3RlcmVkIHRocmVhZHMgZG9lcyBub3QNCj4gPiArCSAqIGdvIG91dCBv ZiBzeW5jLiBIZW5jZSwgYWRkaXRpb25hbCBjaGVja3MgYXJlIHJlcXVpcmVkLg0KPiA+ICsJICov DQo+ID4gKwkvKiBDaGVjayBpZiB0aGUgdGhyZWFkIGlzIGFscmVhZHkgdW5yZWdpc3RlcmVkICov DQo+ID4gKwlvbGRfYm1hcCA9IF9fYXRvbWljX2xvYWRfbihSVEVfUVNCUl9USFJJRF9BUlJBWV9F TE0odiwgaSksDQo+ID4gKwkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKwlpZiAob2xkX2Jt YXAgJiB+KDFVTCA8PCBpZCkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJZG8gew0K PiA+ICsJCW5ld19ibWFwID0gb2xkX2JtYXAgJiB+KDFVTCA8PCBpZCk7DQo+ID4gKwkJLyogTWFr ZSBzdXJlIGFueSBsb2FkcyBvZiB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlIGFyZQ0KPiA+ICsJ CSAqIGNvbXBsZXRlZCBiZWZvcmUgcmVtb3ZhbCBvZiB0aGUgdGhyZWFkIGZyb20gdGhlIGxpc3Qg b2YNCj4gPiArCQkgKiByZXBvcnRpbmcgdGhyZWFkcy4NCj4gPiArCQkgKi8NCj4gPiArCQlzdWNj ZXNzID0gX19hdG9taWNfY29tcGFyZV9leGNoYW5nZSgNCj4gPiArCQkJCQlSVEVfUVNCUl9USFJJ RF9BUlJBWV9FTE0odiwgaSksDQo+ID4gKwkJCQkJJm9sZF9ibWFwLCAmbmV3X2JtYXAsIDAsDQo+ ID4gKwkJCQkJX19BVE9NSUNfUkVMRUFTRSwNCj4gX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKw0K PiA+ICsJCWlmIChzdWNjZXNzKQ0KPiA+ICsJCQlfX2F0b21pY19mZXRjaF9zdWIoJnYtPm51bV90 aHJlYWRzLA0KPiA+ICsJCQkJCQkxLCBfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCQllbHNlIGlm IChvbGRfYm1hcCAmIH4oMVVMIDw8IGlkKSkNCj4gPiArCQkJLyogU29tZW9uZSBlbHNlIHVucmVn aXN0ZXJlZCB0aGlzIHRocmVhZC4NCj4gPiArCQkJICogQ291bnRlciBzaG91bGQgbm90IGJlIGlu Y3JlbWVudGVkLg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJcmV0dXJuIDA7DQo+ID4gKwl9IHdoaWxl IChzdWNjZXNzID09IDApOw0KPiANCj4gRGl0dG8hDQo+IA0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qIER1bXAgdGhlIGRldGFpbHMgb2YgYSBzaW5nbGUgcXVpZXNjZW50 IHN0YXRlIHZhcmlhYmxlIHRvIGEgZmlsZS4NCj4gPiArKi8gaW50IF9fcnRlX2V4cGVyaW1lbnRh bCBydGVfcmN1X3FzYnJfZHVtcChGSUxFICpmLCBzdHJ1Y3QNCj4gPiArcnRlX3JjdV9xc2JyICp2 KSB7DQo+ID4gKwl1aW50NjRfdCBibWFwOw0KPiA+ICsJdWludDMyX3QgaSwgdDsNCj4gPiArDQo+ ID4gKwlpZiAodiA9PSBOVUxMIHx8IGYgPT0gTlVMTCkgew0KPiA+ICsJCXJ0ZV9sb2coUlRFX0xP R19FUlIsIHJjdV9sb2dfdHlwZSwNCj4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQgcGFyYW1l dGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ICsNCj4g PiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmcHJpbnRmKGYsICJcblF1aWVz Y2VudCBTdGF0ZSBWYXJpYWJsZSBAJXBcbiIsIHYpOw0KPiA+ICsNCj4gPiArCWZwcmludGYoZiwg IiAgUVMgdmFyaWFibGUgbWVtb3J5IHNpemUgPSAlbHVcbiIsDQo+ID4gKwkJCQlydGVfcmN1X3Fz YnJfZ2V0X21lbXNpemUodi0NCj4gPm1heF90aHJlYWRzKSk7DQo+ID4gKwlmcHJpbnRmKGYsICIg IEdpdmVuICMgbWF4IHRocmVhZHMgPSAldVxuIiwgdi0+bWF4X3RocmVhZHMpOw0KPiA+ICsJZnBy aW50ZihmLCAiICBDdXJyZW50ICMgdGhyZWFkcyA9ICV1XG4iLCB2LT5udW1fdGhyZWFkcyk7DQo+ ID4gKw0KPiA+ICsJZnByaW50ZihmLCAiICBSZWdpc3RlcmVkIHRocmVhZCBJRCBtYXNrID0gMHgi KTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCB2LT5udW1fZWxlbXM7IGkrKykNCj4gPiArCQlmcHJp bnRmKGYsICIlbHgiLCBfX2F0b21pY19sb2FkX24oDQo+ID4gKwkJCQkJUlRFX1FTQlJfVEhSSURf QVJSQVlfRUxNKHYsIGkpLA0KPiA+ICsJCQkJCV9fQVRPTUlDX0FDUVVJUkUpKTsNCj4gPiArCWZw cmludGYoZiwgIlxuIik7DQo+ID4gKw0KPiA+ICsJZnByaW50ZihmLCAiICBUb2tlbiA9ICVsdVxu IiwNCj4gPiArCQkJX19hdG9taWNfbG9hZF9uKCZ2LT50b2tlbiwgX19BVE9NSUNfQUNRVUlSRSkp Ow0KPiA+ICsNCj4gPiArCWZwcmludGYoZiwgIlF1aWVzY2VudCBTdGF0ZSBDb3VudHMgZm9yIHJl YWRlcnM6XG4iKTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCB2LT5udW1fZWxlbXM7IGkrKykgew0K PiA+ICsJCWJtYXAgPSBfX2F0b21pY19sb2FkX24oUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNKHYs DQo+IGkpLA0KPiA+ICsJCQkJCV9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ICsJCXdoaWxlIChibWFw KSB7DQo+ID4gKwkJCXQgPSBfX2J1aWx0aW5fY3R6bChibWFwKTsNCj4gPiArCQkJZnByaW50Zihm LCAidGhyZWFkIElEID0gJWQsIGNvdW50ID0gJWx1XG4iLCB0LA0KPiA+ICsJCQkJX19hdG9taWNf bG9hZF9uKA0KPiA+ICsJCQkJCSZ2LT5xc2JyX2NudFtpXS5jbnQsDQo+ID4gKwkJCQkJX19BVE9N SUNfUkVMQVhFRCkpOw0KPiA+ICsJCQlibWFwICY9IH4oMVVMIDw8IHQpOw0KPiA+ICsJCX0NCj4g PiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHJj dV9sb2dfdHlwZTsNCj4gPiArDQo+ID4gK1JURV9JTklUKHJ0ZV9yY3VfcmVnaXN0ZXIpDQo+ID4g K3sNCj4gPiArCXJjdV9sb2dfdHlwZSA9IHJ0ZV9sb2dfcmVnaXN0ZXIoImxpYi5yY3UiKTsNCj4g PiArCWlmIChyY3VfbG9nX3R5cGUgPj0gMCkNCj4gPiArCQlydGVfbG9nX3NldF9sZXZlbChyY3Vf bG9nX3R5cGUsIFJURV9MT0dfRVJSKTsgfQ0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Jj dS9ydGVfcmN1X3FzYnIuaA0KPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmggbmV3 IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPiAwMDAwMDAwMDAuLmZmNjk2YWVhYg0KPiA+IC0t LSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+ IEBAIC0wLDAgKzEsNTU0IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt My1DbGF1c2UNCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE4IEFybSBMaW1pdGVkDQo+ID4gKyAq Lw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfUlRFX1JDVV9RU0JSX0hfDQo+ID4gKyNkZWZpbmUgX1JU RV9SQ1VfUVNCUl9IXw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEBmaWxlDQo+ID4gKyAqIFJU RSBRdWllc2NlbnQgU3RhdGUgQmFzZWQgUmVjbGFtYXRpb24gKFFTQlIpDQo+ID4gKyAqDQo+ID4g KyAqIFF1aWVzY2VudCBTdGF0ZSAoUVMpIGlzIGFueSBwb2ludCBpbiB0aGUgdGhyZWFkIGV4ZWN1 dGlvbg0KPiA+ICsgKiB3aGVyZSB0aGUgdGhyZWFkIGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2Ug dG8gYSBkYXRhIHN0cnVjdHVyZQ0KPiA+ICsgKiBpbiBzaGFyZWQgbWVtb3J5LiBXaGlsZSB1c2lu ZyBsb2NrLWxlc3MgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUNCj4gPiArd3JpdGVyDQo+ID4gKyAqIGNh biBzYWZlbHkgZnJlZSBtZW1vcnkgb25jZSBhbGwgdGhlIHJlYWRlciB0aHJlYWRzIGhhdmUgZW50 ZXJlZA0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgbGli cmFyeSBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgdGhlIHJlYWRlcnMgdG8gcmVwb3J0DQo+ID4g K3F1aWVzY2VudA0KPiA+ICsgKiBzdGF0ZSBhbmQgZm9yIHRoZSB3cml0ZXJzIHRvIGlkZW50aWZ5 IHdoZW4gYWxsIHRoZSByZWFkZXJzIGhhdmUNCj4gPiArICogZW50ZXJlZCBxdWllc2NlbnQgc3Rh dGUuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gK2V4dGVy biAiQyIgew0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPiA+ICsjaW5j bHVkZSA8cnRlX2NvbW1vbi5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX21lbW9yeS5oPg0KPiA+ICsj aW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZGVidWcuaD4NCj4gPiAr I2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gPiArDQo+ID4gK2V4dGVybiBpbnQgcmN1X2xvZ190 eXBlOw0KPiA+ICsNCj4gPiArI2lmIFJURV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRyAj ZGVmaW5lIFJDVV9EUF9MT0cobGV2ZWwsDQo+IGZtdCwNCj4gPiArYXJncy4uLikgXA0KPiA+ICsJ cnRlX2xvZyhSVEVfTE9HXyAjIyBsZXZlbCwgcmN1X2xvZ190eXBlLCBcDQo+ID4gKwkJIiVzKCk6 ICIgZm10ICJcbiIsIF9fZnVuY19fLCAjIyBhcmdzKSAjZWxzZSAjZGVmaW5lDQo+ID4gK1JDVV9E UF9MT0cobGV2ZWwsIGZtdCwgYXJncy4uLikgI2VuZGlmDQo+ID4gKw0KPiA+ICsvKiBSZWdpc3Rl cmVkIHRocmVhZCBJRHMgYXJlIHN0b3JlZCBhcyBhIGJpdG1hcCBvZiA2NGIgZWxlbWVudCBhcnJh eS4NCj4gPiArICogR2l2ZW4gdGhyZWFkIGlkIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBpbmRl eCBpbnRvIHRoZSBhcnJheSBhbmQNCj4gPiArICogdGhlIGlkIHdpdGhpbiB0aGUgYXJyYXkgZWxl bWVudC4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNX1NJ WkUgKHNpemVvZih1aW50NjRfdCkgKiA4KQ0KPiAjZGVmaW5lDQo+ID4gK1JURV9RU0JSX1RIUklE X0FSUkFZX1NJWkUobWF4X3RocmVhZHMpIFwNCj4gPiArCVJURV9BTElHTihSVEVfQUxJR05fTVVM X0NFSUwobWF4X3RocmVhZHMsIFwNCj4gPiArCQlSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE1fU0la RSkgPj4gMywNCj4gUlRFX0NBQ0hFX0xJTkVfU0laRSkgI2RlZmluZQ0KPiA+ICtSVEVfUVNCUl9U SFJJRF9BUlJBWV9FTE0odiwgaSkgKCh1aW50NjRfdCAqKSBcDQo+ID4gKwkoKHN0cnVjdCBydGVf cmN1X3FzYnJfY250ICopKHYgKyAxKSArIHYtPm1heF90aHJlYWRzKSArIGkpICNkZWZpbmUNCj4g PiArUlRFX1FTQlJfVEhSSURfSU5ERVhfU0hJRlQgNiAjZGVmaW5lIFJURV9RU0JSX1RIUklEX01B U0sgMHgzZg0KPiAjZGVmaW5lDQo+ID4gK1JURV9RU0JSX1RIUklEX0lOVkFMSUQgMHhmZmZmZmZm Zg0KPiA+ICsNCj4gPiArLyogV29ya2VyIHRocmVhZCBjb3VudGVyICovDQo+ID4gK3N0cnVjdCBy dGVfcmN1X3FzYnJfY250IHsNCj4gPiArCXVpbnQ2NF90IGNudDsNCj4gPiArCS8qKjwgUXVpZXNj ZW50IHN0YXRlIGNvdW50ZXIuIFZhbHVlIDAgaW5kaWNhdGVzIHRoZSB0aHJlYWQgaXMNCj4gPiAr b2ZmbGluZSAqLyB9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJU RV9RU0JSX0NOVF9USFJfT0ZGTElORSAwDQo+ID4gKyNkZWZpbmUgUlRFX1FTQlJfQ05UX0lOSVQg MQ0KPiA+ICsNCj4gPiArLyogUlRFIFF1aWVzY2VudCBTdGF0ZSB2YXJpYWJsZSBzdHJ1Y3R1cmUu DQo+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGhhcyB0d28gZWxlbWVudHMgdGhhdCB2YXJ5IGluIHNp emUgYmFzZWQgb24gdGhlDQo+ID4gKyAqICdtYXhfdGhyZWFkcycgcGFyYW1ldGVyLg0KPiA+ICsg KiAxKSBRdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheQ0KPiA+ICsgKiAyKSBSZWdpc3RlciB0 aHJlYWQgSUQgYXJyYXkNCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnIgew0KPiA+ ICsJdWludDY0X3QgdG9rZW4gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiArCS8qKjwgQ291bnRl ciB0byBhbGxvdyBmb3IgbXVsdGlwbGUgY29uY3VycmVudCBxdWllc2NlbnQgc3RhdGUNCj4gPiAr cXVlcmllcyAqLw0KPiA+ICsNCj4gPiArCXVpbnQzMl90IG51bV9lbGVtcyBfX3J0ZV9jYWNoZV9h bGlnbmVkOw0KPiA+ICsJLyoqPCBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRocmVhZCBJRCBh cnJheSAqLw0KPiA+ICsJdWludDMyX3QgbnVtX3RocmVhZHM7DQo+ID4gKwkvKio8IE51bWJlciBv ZiB0aHJlYWRzIGN1cnJlbnRseSB1c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ID4gKwl1aW50 MzJfdCBtYXhfdGhyZWFkczsNCj4gPiArCS8qKjwgTWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyB1 c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ID4gKw0KPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNi cl9jbnQgcXNicl9jbnRbMF0gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiArCS8qKjwgUXVpZXNj ZW50IHN0YXRlIGNvdW50ZXIgYXJyYXkgb2YgJ21heF90aHJlYWRzJyBlbGVtZW50cyAqLw0KPiA+ ICsNCj4gPiArCS8qKjwgUmVnaXN0ZXJlZCB0aHJlYWQgSURzIGFyZSBzdG9yZWQgaW4gYSBiaXRt YXAgYXJyYXksDQo+ID4gKwkgKiAgIGFmdGVyIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlciBh cnJheS4NCj4gPiArCSAqLw0KPiA+ICt9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQ SSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVy biB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IGEgUXVpZXNjZW50IFN0YXRlDQo+ IHZhcmlhYmxlLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gbWF4X3RocmVhZHMNCj4gPiArICog ICBNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHJlcG9ydGluZyBxdWllc2NlbnQgc3RhdGUgb24g dGhpcw0KPiB2YXJpYWJsZS4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIE9uIHN1Y2Nlc3Mg LSBzaXplIG9mIG1lbW9yeSBpbiBieXRlcyByZXF1aXJlZCBmb3IgdGhpcyBRUyB2YXJpYWJsZS4N Cj4gPiArICogICBPbiBlcnJvciAtIDEgd2l0aCBlcnJvciBjb2RlIHNldCBpbiBydGVfZXJybm8u DQo+ID4gKyAqICAgUG9zc2libGUgcnRlX2Vycm5vIGNvZGVzIGFyZToNCj4gPiArICogICAtIEVJ TlZBTCAtIG1heF90aHJlYWRzIGlzIDANCj4gPiArICovDQo+ID4gK3NpemVfdCBfX3J0ZV9leHBl cmltZW50YWwNCj4gPiArcnRlX3JjdV9xc2JyX2dldF9tZW1zaXplKHVpbnQzMl90IG1heF90aHJl YWRzKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBF UklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiAr ICoNCj4gPiArICogSW5pdGlhbGl6ZSBhIFF1aWVzY2VudCBTdGF0ZSAoUVMpIHZhcmlhYmxlLg0K PiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdg0KPiA+ICsgKiAgIFFTIHZhcmlhYmxlDQo+ID4gKyAq IEBwYXJhbSBtYXhfdGhyZWFkcw0KPiA+ICsgKiAgIE1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMg cmVwb3J0aW5nIHF1aWVzY2VudCBzdGF0ZSBvbiB0aGlzDQo+IHZhcmlhYmxlLg0KPiA+ICsgKiAg IFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIHZhbHVlIGFzIHBhc3NlZCB0bw0KPiBydGVfcmN1X3Fz YnJfZ2V0X21lbXNpemUuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBPbiBzdWNjZXNzIC0g MA0KPiA+ICsgKiAgIE9uIGVycm9yIC0gMSB3aXRoIGVycm9yIGNvZGUgc2V0IGluIHJ0ZV9lcnJu by4NCj4gPiArICogICBQb3NzaWJsZSBydGVfZXJybm8gY29kZXMgYXJlOg0KPiA+ICsgKiAgIC0g RUlOVkFMIC0gbWF4X3RocmVhZHMgaXMgMCBvciAndicgaXMgTlVMTC4NCj4gPiArICoNCj4gPiAr ICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9xc2JyX2luaXQo c3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDMyX3QgbWF4X3RocmVhZHMpOw0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZWdp c3RlciBhIHJlYWRlciB0aHJlYWQgdG8gcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUNCj4gPiAr ICogb24gYSBRUyB2YXJpYWJsZS4NCj4gPiArICoNCj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRl ZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4gSXQgaXMgbXVsdGktdGhyZWFkDQo+ID4gKyAqIHNh ZmUuDQo+ID4gKyAqIEFueSByZWFkZXIgdGhyZWFkIHRoYXQgd2FudHMgdG8gcmVwb3J0IGl0cyBx dWllc2NlbnQgc3RhdGUgbXVzdA0KPiA+ICsgKiBjYWxsIHRoaXMgQVBJLiBUaGlzIGNhbiBiZSBj YWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGFzIHBhcnQNCj4gPiArICogb2YgdGhlIHBh Y2tldCBwcm9jZXNzaW5nIGxvb3AuDQo+ID4gKyAqDQo+ID4gKyAqIE5vdGUgdGhhdCBydGVfcmN1 X3FzYnJfdGhyZWFkX29ubGluZSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlDQo+ID4gKyAqIHRo cmVhZCB1cGRhdGVzIGl0cyBxdWllc2NlbnQgc3RhdGUgdXNpbmcgcnRlX3JjdV9xc2JyX3F1aWVz Y2VudC4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHYNCj4gPiArICogICBRUyB2YXJpYWJsZQ0K PiA+ICsgKiBAcGFyYW0gdGhyZWFkX2lkDQo+ID4gKyAqICAgUmVhZGVyIHRocmVhZCB3aXRoIHRo aXMgdGhyZWFkIElEIHdpbGwgcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUgb24NCj4gPiArICog ICB0aGUgUVMgdmFyaWFibGUuIHRocmVhZF9pZCBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgKG1h eF90aHJlYWRzIC0NCj4gMSkuDQo+ID4gKyAqICAgJ21heF90aHJlYWRzJyBpcyB0aGUgcGFyYW1l dGVyIHBhc3NlZCBpbiAncnRlX3JjdV9xc2JyX2luaXQnIEFQSS4NCj4gPiArICovDQo+ID4gK2lu dCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9xc2JyX3RocmVhZF9yZWdpc3Rlcihz dHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1bnNpZ25lZCBpbnQNCj4gPiArdGhyZWFkX2lkKTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6 IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiArICoNCj4gPiAr ICogUmVtb3ZlIGEgcmVhZGVyIHRocmVhZCwgZnJvbSB0aGUgbGlzdCBvZiB0aHJlYWRzIHJlcG9y dGluZyB0aGVpcg0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUgb24gYSBRUyB2YXJpYWJsZS4NCj4g PiArICoNCj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlv bi4gSXQgaXMgbXVsdGktdGhyZWFkIHNhZmUuDQo+ID4gKyAqIFRoaXMgQVBJIGNhbiBiZSBjYWxs ZWQgZnJvbSB0aGUgcmVhZGVyIHRocmVhZHMgZHVyaW5nIHNodXRkb3duLg0KPiA+ICsgKiBPbmdv aW5nIHF1aWVzY2VudCBzdGF0ZSBxdWVyaWVzIHdpbGwgc3RvcCB3YWl0aW5nIGZvciB0aGUgc3Rh dHVzDQo+ID4gK2Zyb20gdGhpcw0KPiA+ICsgKiB1bnJlZ2lzdGVyZWQgcmVhZGVyIHRocmVhZC4N Cj4gPiArICoNCj4gPiArICogQHBhcmFtIHYNCj4gPiArICogICBRUyB2YXJpYWJsZQ0KPiA+ICsg KiBAcGFyYW0gdGhyZWFkX2lkDQo+ID4gKyAqICAgUmVhZGVyIHRocmVhZCB3aXRoIHRoaXMgdGhy ZWFkIElEIHdpbGwgc3RvcCByZXBvcnRpbmcgaXRzIHF1aWVzY2VudA0KPiA+ICsgKiAgIHN0YXRl IG9uIHRoZSBRUyB2YXJpYWJsZS4NCj4gPiArICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50 YWwNCj4gPiArcnRlX3JjdV9xc2JyX3RocmVhZF91bnJlZ2lzdGVyKHN0cnVjdCBydGVfcmN1X3Fz YnIgKnYsIHVuc2lnbmVkIGludA0KPiA+ICt0aHJlYWRfaWQpOw0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBBZGQgYSByZWdpc3Rl cmVkIHJlYWRlciB0aHJlYWQsIHRvIHRoZSBsaXN0IG9mIHRocmVhZHMgcmVwb3J0aW5nDQo+ID4g K3RoZWlyDQo+ID4gKyAqIHF1aWVzY2VudCBzdGF0ZSBvbiBhIFFTIHZhcmlhYmxlLg0KPiA+ICsg Kg0KPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVlIGZ1bmN0aW9uLiBJ dCBpcyBtdWx0aS10aHJlYWQNCj4gPiArICogc2FmZS4NCj4gPiArICoNCj4gPiArICogQW55IHJl Z2lzdGVyZWQgcmVhZGVyIHRocmVhZCB0aGF0IHdhbnRzIHRvIHJlcG9ydCBpdHMgcXVpZXNjZW50 DQo+ID4gK3N0YXRlIG11c3QNCj4gPiArICogY2FsbCB0aGlzIEFQSSBiZWZvcmUgY2FsbGluZyBy dGVfcmN1X3FzYnJfcXVpZXNjZW50LiBUaGlzIGNhbiBiZQ0KPiA+ICtjYWxsZWQNCj4gPiArICog ZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGFzIHBhcnQgb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5n IGxvb3AuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSByZWFkZXIgdGhyZWFkIG11c3QgY2FsbCBydGVf cmN1X3RocmVhZF9vZmZsaW5lIEFQSSwgYmVmb3JlDQo+ID4gKyAqIGNhbGxpbmcgYW55IGZ1bmN0 aW9ucyB0aGF0IGJsb2NrLCB0byBlbnN1cmUgdGhhdA0KPiA+ICtydGVfcmN1X3FzYnJfY2hlY2sN Cj4gPiArICogQVBJIGRvZXMgbm90IHdhaXQgaW5kZWZpbml0ZWx5IGZvciB0aGUgcmVhZGVyIHRo cmVhZCB0byB1cGRhdGUgaXRzIFFTLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgcmVhZGVyIHRocmVh ZCBtdXN0IGNhbGwgcnRlX3JjdV90aHJlYWRfb25saW5lIEFQSSwgYWZ0ZXIgdGhlDQo+ID4gK2Js b2NraW5nDQo+ID4gKyAqIGZ1bmN0aW9uIGNhbGwgcmV0dXJucywgdG8gZW5zdXJlIHRoYXQgcnRl X3JjdV9xc2JyX2NoZWNrIEFQSQ0KPiA+ICsgKiB3YWl0cyBmb3IgdGhlIHJlYWRlciB0aHJlYWQg dG8gdXBkYXRlIGl0cyBxdWllc2NlbnQgc3RhdGUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSB2 DQo+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiArICogQHBhcmFtIHRocmVhZF9pZA0KPiA+ICsg KiAgIFJlYWRlciB0aHJlYWQgd2l0aCB0aGlzIHRocmVhZCBJRCB3aWxsIHJlcG9ydCBpdHMgcXVp ZXNjZW50IHN0YXRlIG9uDQo+ID4gKyAqICAgdGhlIFFTIHZhcmlhYmxlLg0KPiA+ICsgKi8NCj4g PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3J0ZV9leHBlcmltZW50YWwNCj4g PiArcnRlX3JjdV9xc2JyX3RocmVhZF9vbmxpbmUoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdW5z aWduZWQgaW50DQo+ID4gK3RocmVhZF9pZCkNCj4gDQo+IEkgYW0gbm90IGNsZWFyIG9uIHdoeSB0 aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbmxpbmUuICBPciBkbyB5b3UgaGF2ZSB1c2UNCj4gY2Fz ZXMgd2hlcmUgdGhyZWFkcyBnbyBvZmZsaW5lIGFuZCBjb21lIGJhY2sgb25saW5lIGV4dHJlbWVs eSBmcmVxdWVudGx5Pw0KWWVzLCB0aGVyZSBhcmUgdXNlIGNhc2VzIHdoZXJlIHRoZSBmdW5jdGlv biBjYWxsIHRvIHJlY2VpdmUgdGhlIHBhY2tldHMgY2FuIGJsb2NrLg0KDQo+IA0KPiA+ICt7DQo+ ID4gKwl1aW50NjRfdCB0Ow0KPiA+ICsNCj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMICYmIHRo cmVhZF9pZCA8IHYtPm1heF90aHJlYWRzKTsNCj4gPiArDQo+ID4gKwkvKiBDb3B5IHRoZSBjdXJy ZW50IHZhbHVlIG9mIHRva2VuLg0KPiA+ICsJICogVGhlIGZlbmNlIGF0IHRoZSBlbmQgb2YgdGhl IGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQNCj4gPiArCSAqIHRoZSBmb2xsb3dpbmcgd2lsbCBu b3QgbW92ZSBkb3duIGFmdGVyIHRoZSBsb2FkIG9mIGFueSBzaGFyZWQNCj4gPiArCSAqIGRhdGEg c3RydWN0dXJlLg0KPiA+ICsJICovDQo+ID4gKwl0ID0gX19hdG9taWNfbG9hZF9uKCZ2LT50b2tl biwgX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKw0KPiA+ICsJLyogX19hdG9taWNfc3RvcmVfbihj bnQsIF9fQVRPTUlDX1JFTEFYRUQpIGlzIHVzZWQgdG8gZW5zdXJlDQo+ID4gKwkgKiAnY250JyAo NjRiKSBpcyBhY2Nlc3NlZCBhdG9taWNhbGx5Lg0KPiA+ICsJICovDQo+ID4gKwlfX2F0b21pY19z dG9yZV9uKCZ2LT5xc2JyX2NudFt0aHJlYWRfaWRdLmNudCwNCj4gPiArCQl0LCBfX0FUT01JQ19S RUxBWEVEKTsNCj4gPiArDQo+ID4gKwkvKiBUaGUgc3Vic2VxdWVudCBsb2FkIG9mIHRoZSBkYXRh IHN0cnVjdHVyZSBzaG91bGQgbm90DQo+ID4gKwkgKiBtb3ZlIGFib3ZlIHRoZSBzdG9yZS4gSGVu Y2UgYSBzdG9yZS1sb2FkIGJhcnJpZXINCj4gPiArCSAqIGlzIHJlcXVpcmVkLg0KPiA+ICsJICog SWYgdGhlIGxvYWQgb2YgdGhlIGRhdGEgc3RydWN0dXJlIG1vdmVzIGFib3ZlIHRoZSBzdG9yZSwN Cj4gPiArCSAqIHdyaXRlciBtaWdodCBub3Qgc2VlIHRoYXQgdGhlIHJlYWRlciBpcyBvbmxpbmUs IGV2ZW4gdGhvdWdoDQo+ID4gKwkgKiB0aGUgcmVhZGVyIGlzIHJlZmVyZW5jaW5nIHRoZSBzaGFy ZWQgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4gKwkgKi8NCj4gPiArI2lmZGVmIFJURV9BUkNIX1g4Nl82 NA0KPiA+ICsJLyogcnRlX3NtcF9tYigpIGZvciB4ODYgaXMgbGlnaHRlciAqLw0KPiA+ICsJcnRl X3NtcF9tYigpOw0KPiA+ICsjZWxzZQ0KPiA+ICsJX19hdG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRP TUlDX1NFUV9DU1QpOw0KPiA+ICsjZW5kaWYNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZW1vdmUgYSByZWdpc3Rl cmVkIHJlYWRlciB0aHJlYWQgZnJvbSB0aGUgbGlzdCBvZiB0aHJlYWRzDQo+ID4gK3JlcG9ydGlu ZyB0aGVpcg0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUgb24gYSBRUyB2YXJpYWJsZS4NCj4gPiAr ICoNCj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4g SXQgaXMgbXVsdGktdGhyZWFkDQo+ID4gKyAqIHNhZmUuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMg Y2FuIGJlIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3IgYXMgcGFydCBvZiB0aGUgcGFj a2V0DQo+ID4gKyAqIHByb2Nlc3NpbmcgbG9vcC4NCj4gPiArICoNCj4gPiArICogVGhlIHJlYWRl ciB0aHJlYWQgbXVzdCBjYWxsIHJ0ZV9yY3VfdGhyZWFkX29mZmxpbmUgQVBJLCBiZWZvcmUNCj4g PiArICogY2FsbGluZyBhbnkgZnVuY3Rpb25zIHRoYXQgYmxvY2ssIHRvIGVuc3VyZSB0aGF0DQo+ ID4gK3J0ZV9yY3VfcXNicl9jaGVjaw0KPiA+ICsgKiBBUEkgZG9lcyBub3Qgd2FpdCBpbmRlZmlu aXRlbHkgZm9yIHRoZSByZWFkZXIgdGhyZWFkIHRvIHVwZGF0ZSBpdHMgUVMuDQo+ID4gKyAqDQo+ ID4gKyAqIEBwYXJhbSB2DQo+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiArICogQHBhcmFtIHRo cmVhZF9pZA0KPiA+ICsgKiAgIHJ0ZV9yY3VfcXNicl9jaGVjayBBUEkgd2lsbCBub3Qgd2FpdCBm b3IgdGhlIHJlYWRlciB0aHJlYWQgd2l0aA0KPiA+ICsgKiAgIHRoaXMgdGhyZWFkIElEIHRvIHJl cG9ydCBpdHMgcXVpZXNjZW50IHN0YXRlIG9uIHRoZSBRUyB2YXJpYWJsZS4NCj4gPiArICovDQo+ ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gK3J0ZV9yY3VfcXNicl90aHJlYWRfb2ZmbGluZShzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1 bnNpZ25lZCBpbnQNCj4gPiArdGhyZWFkX2lkKQ0KPiANCj4gU2FtZSBoZXJlIG9uIGlubGluaW5n Lg0KPiANCj4gPiArew0KPiA+ICsJUlRFX0FTU0VSVCh2ICE9IE5VTEwgJiYgdGhyZWFkX2lkIDwg di0+bWF4X3RocmVhZHMpOw0KPiA+ICsNCj4gPiArCS8qIFRoZSByZWFkZXIgY2FuIGdvIG9mZmxp bmUgb25seSBhZnRlciB0aGUgbG9hZCBvZiB0aGUNCj4gPiArCSAqIGRhdGEgc3RydWN0dXJlIGlz IGNvbXBsZXRlZC4gaS5lLiBhbnkgbG9hZCBvZiB0aGUNCj4gPiArCSAqIGRhdGEgc3RyY3R1cmUg Y2FuIG5vdCBtb3ZlIGFmdGVyIHRoaXMgc3RvcmUuDQo+ID4gKwkgKi8NCj4gPiArDQo+ID4gKwlf X2F0b21pY19zdG9yZV9uKCZ2LT5xc2JyX2NudFt0aHJlYWRfaWRdLmNudCwNCj4gPiArCQlSVEVf UVNCUl9DTlRfVEhSX09GRkxJTkUsIF9fQVRPTUlDX1JFTEVBU0UpOyB9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEFzayB0aGUg cmVhZGVyIHRocmVhZHMgdG8gcmVwb3J0IHRoZSBxdWllc2NlbnQgc3RhdGUNCj4gPiArICogc3Rh dHVzLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVl IGZ1bmN0aW9uLiBJdCBpcyBtdWx0aS10aHJlYWQNCj4gPiArICogc2FmZSBhbmQgY2FuIGJlIGNh bGxlZCBmcm9tIHdvcmtlciB0aHJlYWRzLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdg0KPiA+ ICsgKiAgIFFTIHZhcmlhYmxlDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIFRoaXMgaXMg dGhlIHRva2VuIGZvciB0aGlzIGNhbGwgb2YgdGhlIEFQSS4gVGhpcyBzaG91bGQgYmUNCj4gPiAr ICogICAgIHBhc3NlZCB0byBydGVfcmN1X3FzYnJfY2hlY2sgQVBJLg0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gK3J0ZV9yY3VfcXNicl9zdGFydChzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2KSB7DQo+ID4gKwl1 aW50NjRfdCB0Ow0KPiA+ICsNCj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMKTsNCj4gPiArDQo+ ID4gKwkvKiBSZWxlYXNlIHRoZSBjaGFuZ2VzIHRvIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUu DQo+ID4gKwkgKiBUaGlzIHN0b3JlIHJlbGVhc2Ugd2lsbCBlbnN1cmUgdGhhdCBjaGFuZ2VzIHRv IGFueSBkYXRhDQo+ID4gKwkgKiBzdHJ1Y3R1cmUgYXJlIHZpc2libGUgdG8gdGhlIHdvcmtlcnMg YmVmb3JlIHRoZSB0b2tlbg0KPiA+ICsJICogdXBkYXRlIGlzIHZpc2libGUuDQo+ID4gKwkgKi8N Cj4gPiArCXQgPSBfX2F0b21pY19hZGRfZmV0Y2goJnYtPnRva2VuLCAxLCBfX0FUT01JQ19SRUxF QVNFKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBVcGRhdGUgcXVpZXNj ZW50IHN0YXRlIGZvciBhIHJlYWRlciB0aHJlYWQuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgaXMg aW1wbGVtZW50ZWQgYXMgYSBsb2NrLWZyZWUgZnVuY3Rpb24uIEl0IGlzIG11bHRpLXRocmVhZCBz YWZlLg0KPiA+ICsgKiBBbGwgdGhlIHJlYWRlciB0aHJlYWRzIHJlZ2lzdGVyZWQgdG8gcmVwb3J0 IHRoZWlyIHF1aWVzY2VudCBzdGF0ZQ0KPiA+ICsgKiBvbiB0aGUgUVMgdmFyaWFibGUgbXVzdCBj YWxsIHRoaXMgQVBJLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdg0KPiA+ICsgKiAgIFFTIHZh cmlhYmxlDQo+ID4gKyAqIEBwYXJhbSB0aHJlYWRfaWQNCj4gPiArICogICBVcGRhdGUgdGhlIHF1 aWVzY2VudCBzdGF0ZSBmb3IgdGhlIHJlYWRlciB3aXRoIHRoaXMgdGhyZWFkIElELg0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3J0ZV9leHBlcmltZW50 YWwNCj4gPiArcnRlX3JjdV9xc2JyX3F1aWVzY2VudChzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1 bnNpZ25lZCBpbnQNCj4gPiArdGhyZWFkX2lkKSB7DQo+ID4gKwl1aW50NjRfdCB0Ow0KPiA+ICsN Cj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMICYmIHRocmVhZF9pZCA8IHYtPm1heF90aHJlYWRz KTsNCj4gPiArDQo+ID4gKwkvKiBBY3F1aXJlIHRoZSBjaGFuZ2VzIHRvIHRoZSBzaGFyZWQgZGF0 YSBzdHJ1Y3R1cmUgcmVsZWFzZWQNCj4gPiArCSAqIGJ5IHJ0ZV9yY3VfcXNicl9zdGFydC4NCj4g PiArCSAqIExhdGVyIGxvYWRzIG9mIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgc2hvdWxkIG5v dCBtb3ZlDQo+ID4gKwkgKiBhYm92ZSB0aGlzIGxvYWQuIEhlbmNlLCB1c2UgbG9hZC1hY3F1aXJl Lg0KPiA+ICsJICovDQo+ID4gKwl0ID0gX19hdG9taWNfbG9hZF9uKCZ2LT50b2tlbiwgX19BVE9N SUNfQUNRVUlSRSk7DQo+ID4gKw0KPiA+ICsJLyogSW5mb3JtIHRoZSB3cml0ZXIgdGhhdCB1cGRh dGVzIGFyZSB2aXNpYmxlIHRvIHRoaXMgcmVhZGVyLg0KPiA+ICsJICogUHJpb3IgbG9hZHMgb2Yg dGhlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBzaG91bGQgbm90IG1vdmUNCj4gPiArCSAqIGJleW9u ZCB0aGlzIHN0b3JlLiBIZW5jZSB1c2Ugc3RvcmUtcmVsZWFzZS4NCj4gPiArCSAqLw0KPiA+ICsJ X19hdG9taWNfc3RvcmVfbigmdi0+cXNicl9jbnRbdGhyZWFkX2lkXS5jbnQsDQo+ID4gKwkJCSB0 LCBfX0FUT01JQ19SRUxFQVNFKTsNCj4gPiArDQo+ID4gKwlSQ1VfRFBfTE9HKERFQlVHLCAiJXM6 IHVwZGF0ZTogdG9rZW4gPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiArCQlfX2Z1bmNfXywg dCwgdGhyZWFkX2lkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogQ2hlY2sgdGhlIHF1aWVzY2Vu dCBzdGF0ZSBjb3VudGVyIGZvciByZWdpc3RlcmVkIHRocmVhZHMgb25seSwNCj4gPiArYXNzdW1p bmcNCj4gPiArICogdGhhdCBub3QgYWxsIHRocmVhZHMgaGF2ZSByZWdpc3RlcmVkLg0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50DQo+ID4gK19fcmN1X3FzYnJf Y2hlY2tfc2VsZWN0aXZlKHN0cnVjdCBydGVfcmN1X3FzYnIgKnYsIHVpbnQ2NF90IHQsIGJvb2wN Cj4gPiArd2FpdCkgew0KPiA+ICsJdWludDMyX3QgaSwgaiwgaWQ7DQo+ID4gKwl1aW50NjRfdCBi bWFwOw0KPiA+ICsJdWludDY0X3QgYzsNCj4gPiArCXVpbnQ2NF90ICpyZWdfdGhyZWFkX2lkOw0K PiA+ICsNCj4gPiArCWZvciAoaSA9IDAsIHJlZ190aHJlYWRfaWQgPSBSVEVfUVNCUl9USFJJRF9B UlJBWV9FTE0odiwgMCk7DQo+ID4gKwkJaSA8IHYtPm51bV9lbGVtczsNCj4gPiArCQlpKyssIHJl Z190aHJlYWRfaWQrKykgew0KPiA+ICsJCS8qIExvYWQgdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCB0 aHJlYWQgYml0IG1hcCBiZWZvcmUNCj4gPiArCQkgKiBsb2FkaW5nIHRoZSByZWFkZXIgdGhyZWFk IHF1aWVzY2VudCBzdGF0ZSBjb3VudGVycy4NCj4gPiArCQkgKi8NCj4gPiArCQlibWFwID0gX19h dG9taWNfbG9hZF9uKHJlZ190aHJlYWRfaWQsDQo+IF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ICsJ CWlkID0gaSA8PCBSVEVfUVNCUl9USFJJRF9JTkRFWF9TSElGVDsNCj4gPiArDQo+ID4gKwkJd2hp bGUgKGJtYXApIHsNCj4gPiArCQkJaiA9IF9fYnVpbHRpbl9jdHpsKGJtYXApOw0KPiA+ICsJCQlS Q1VfRFBfTE9HKERFQlVHLA0KPiA+ICsJCQkJIiVzOiBjaGVjazogdG9rZW4gPSAlbHUsIHdhaXQg PSAlZCwgQml0IE1hcA0KPiA9IDB4JWx4LCBUaHJlYWQgSUQgPSAlZCIsDQo+ID4gKwkJCQlfX2Z1 bmNfXywgdCwgd2FpdCwgYm1hcCwgaWQgKyBqKTsNCj4gPiArCQkJYyA9IF9fYXRvbWljX2xvYWRf bigNCj4gPiArCQkJCQkmdi0+cXNicl9jbnRbaWQgKyBqXS5jbnQsDQo+ID4gKwkJCQkJX19BVE9N SUNfQUNRVUlSRSk7DQo+ID4gKwkJCVJDVV9EUF9MT0coREVCVUcsDQo+ID4gKwkJCQkiJXM6IHN0 YXR1czogdG9rZW4gPSAlbHUsIHdhaXQgPSAlZCwgVGhyZWFkDQo+IFFTIGNudCA9ICVsdSwgVGhy ZWFkIElEID0gJWQiLA0KPiA+ICsJCQkJX19mdW5jX18sIHQsIHdhaXQsIGMsIGlkK2opOw0KPiA+ ICsJCQkvKiBDb3VudGVyIGlzIG5vdCBjaGVja2VkIGZvciB3cmFwLWFyb3VuZA0KPiBjb25kaXRp b24NCj4gPiArCQkJICogYXMgaXQgaXMgYSA2NGIgY291bnRlci4NCj4gPiArCQkJICovDQo+ID4g KwkJCWlmICh1bmxpa2VseShjICE9IFJURV9RU0JSX0NOVF9USFJfT0ZGTElORSAmJiBjDQo+IDwg dCkpIHsNCj4gDQo+IFRoaXMgYXNzdW1lcyB0aGF0IGEgNjQtYml0IGNvdW50ZXIgd29uJ3Qgb3Zl cmZsb3csIHdoaWNoIGlzIGNsb3NlIGVub3VnaA0KPiB0byB0cnVlIGdpdmVuIGN1cnJlbnQgQ1BV IGNsb2NrIGZyZXF1ZW5jaWVzLiAgOy0pDQo+IA0KPiA+ICsJCQkJLyogVGhpcyB0aHJlYWQgaXMg bm90IGluIHF1aWVzY2VudCBzdGF0ZSAqLw0KPiA+ICsJCQkJaWYgKCF3YWl0KQ0KPiA+ICsJCQkJ CXJldHVybiAwOw0KPiA+ICsNCj4gPiArCQkJCXJ0ZV9wYXVzZSgpOw0KPiA+ICsJCQkJLyogVGhp cyB0aHJlYWQgbWlnaHQgaGF2ZSB1bnJlZ2lzdGVyZWQuDQo+ID4gKwkJCQkgKiBSZS1yZWFkIHRo ZSBiaXRtYXAuDQo+ID4gKwkJCQkgKi8NCj4gPiArCQkJCWJtYXAgPSBfX2F0b21pY19sb2FkX24o cmVnX3RocmVhZF9pZCwNCj4gPiArCQkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4gKw0KPiA+ ICsJCQkJY29udGludWU7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCWJtYXAgJj0gfigxVUwg PDwgaik7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAxOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKiBDaGVjayB0aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgZm9yIGFs bCB0aHJlYWRzLCBhc3N1bWluZyB0aGF0DQo+ID4gKyAqIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJl Z2lzdGVyZWQuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQN Cj4gPiArX19yY3VfcXNicl9jaGVja19hbGwoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDY0 X3QgdCwgYm9vbCB3YWl0KQ0KPiANCj4gRG9lcyBjaGVja2luZyB0aGUgYml0bWFwIHJlYWxseSB0 YWtlIGxvbmcgZW5vdWdoIHRvIG1ha2UgdGhpcyB3b3J0aHdoaWxlDQo+IGFzIGEgc2VwYXJhdGUg ZnVuY3Rpb24/ICBJIHdvdWxkIHRoaW5rIHRoYXQgdGhlIGJpdG1hcC1jaGVja2luZyB0aW1lDQo+ IHdvdWxkIGJlIGxvc3QgaW4gdGhlIG5vaXNlIG9mIGNhY2hlIG1pc3NlcyBmcm9tIHRoZSAtPmNu dCBsb2Fkcy4NCkl0IGF2b2lkcyBhY2Nlc3Npbmcgb25lIGNhY2hlIGxpbmUuIEkgdGhpbmsgdGhp cyBpcyB3aGVyZSB0aGUgc2F2aW5ncyBhcmUgKG1heSBiZSBpbiB0aGVvcnkpLiBUaGlzIGlzIHRo ZSBtb3N0IHByb2JhYmxlIHVzZSBjYXNlLg0KT24gdGhlIG90aGVyIGhhbmQsIF9fcmN1X3FzYnJf Y2hlY2tfc2VsZWN0aXZlKCkgd2lsbCByZXN1bHQgaW4gc2F2aW5ncyAoZGVwZW5kaW5nIG9uIGhv dyBtYW55IHRocmVhZHMgYXJlIGN1cnJlbnRseSByZWdpc3RlcmVkKSBieSBhdm9pZGluZyBhY2Nl c3NpbmcgdW53YW50ZWQgY291bnRlcnMuDQoNCj4gDQo+IFN1cmUsIGlmIHlvdSBpbnZva2UgX19y Y3VfcXNicl9jaGVja19zZWxlY3RpdmUoKSBpbiBhIHRpZ2h0IGxvb3AgaW4gdGhlDQo+IGFic2Vu Y2Ugb2YgcmVhZGVycywgeW91IG1pZ2h0IHNlZSBfX3JjdV9xc2JyX2NoZWNrX2FsbCgpIGJlaW5n IGEgYml0DQo+IGZhc3Rlci4gIEJ1dCBpcyB0aGF0IHJlYWxseSB3aGF0IERQREsgZG9lcz8NCkkg c2VlIGltcHJvdmVtZW50cyBpbiB0aGUgc3ludGhldGljIHRlc3QgY2FzZSAoc2ltaWxhciB0byB0 aGUgb25lIHlvdSBoYXZlIGRlc2NyaWJlZCwgYXJvdW5kIDI3JSkuIEhvd2V2ZXIsIGluIHRoZSBt b3JlIHByYWN0aWNhbCB0ZXN0IGNhc2VzIEkgZG8gbm90IHNlZSBhbnkgZGlmZmVyZW5jZS4NCiAN Cj4gDQo+ID4gK3sNCj4gPiArCXVpbnQzMl90IGk7DQo+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2Jy X2NudCAqY250Ow0KPiA+ICsJdWludDY0X3QgYzsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwLCBj bnQgPSB2LT5xc2JyX2NudDsgaSA8IHYtPm1heF90aHJlYWRzOyBpKyssIGNudCsrKSB7DQo+ID4g KwkJUkNVX0RQX0xPRyhERUJVRywNCj4gPiArCQkJIiVzOiBjaGVjazogdG9rZW4gPSAlbHUsIHdh aXQgPSAlZCwgVGhyZWFkIElEID0gJWQiLA0KPiA+ICsJCQlfX2Z1bmNfXywgdCwgd2FpdCwgaSk7 DQo+ID4gKwkJd2hpbGUgKDEpIHsNCj4gPiArCQkJYyA9IF9fYXRvbWljX2xvYWRfbigmY250LT5j bnQsDQo+IF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ICsJCQlSQ1VfRFBfTE9HKERFQlVHLA0KPiA+ ICsJCQkJIiVzOiBzdGF0dXM6IHRva2VuID0gJWx1LCB3YWl0ID0gJWQsIFRocmVhZA0KPiBRUyBj bnQgPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiArCQkJCV9fZnVuY19fLCB0LCB3YWl0LCBj LCBpKTsNCj4gPiArCQkJLyogQ291bnRlciBpcyBub3QgY2hlY2tlZCBmb3Igd3JhcC1hcm91bmQN Cj4gY29uZGl0aW9uDQo+ID4gKwkJCSAqIGFzIGl0IGlzIGEgNjRiIGNvdW50ZXIuDQo+ID4gKwkJ CSAqLw0KPiA+ICsJCQlpZiAobGlrZWx5KGMgPT0gUlRFX1FTQlJfQ05UX1RIUl9PRkZMSU5FIHx8 IGMgPj0NCj4gdCkpDQo+ID4gKwkJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJCS8qIFRoaXMgdGhy ZWFkIGlzIG5vdCBpbiBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiArCQkJaWYgKCF3YWl0KQ0KPiA+ ICsJCQkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJCQlydGVfcGF1c2UoKTsNCj4gPiArCQl9DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDE7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiArICoNCj4gPiArICogQ2hlY2tzIGlmIGFs bCB0aGUgcmVhZGVyIHRocmVhZHMgaGF2ZSBlbnRlcmVkIHRoZSBxdWllc2NlbnQgc3RhdGUNCj4g PiArICogcmVmZXJlbmNlZCBieSB0b2tlbi4NCj4gPiArICoNCj4gPiArICogVGhpcyBpcyBpbXBs ZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4gSXQgaXMgbXVsdGktdGhyZWFkDQo+ID4g KyAqIHNhZmUgYW5kIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZHMgYXMgd2Vs bC4NCj4gPiArICoNCj4gPiArICogSWYgdGhpcyBBUEkgaXMgY2FsbGVkIHdpdGggJ3dhaXQnIHNl dCB0byB0cnVlLCB0aGUgZm9sbG93aW5nDQo+ID4gKyAqIGZhY3RvcnMgbXVzdCBiZSBjb25zaWRl cmVkOg0KPiA+ICsgKg0KPiA+ICsgKiAxKSBJZiB0aGUgY2FsbGluZyB0aHJlYWQgaXMgYWxzbyBy ZXBvcnRpbmcgdGhlIHN0YXR1cyBvbiB0aGUNCj4gPiArICogc2FtZSBRUyB2YXJpYWJsZSwgaXQg bXVzdCB1cGRhdGUgdGhlIHF1aWVzY2VudCBzdGF0ZSBzdGF0dXMsDQo+ID4gK2JlZm9yZQ0KPiA+ ICsgKiBjYWxsaW5nIHRoaXMgQVBJLg0KPiA+ICsgKg0KPiA+ICsgKiAyKSBJbiBhZGRpdGlvbiwg d2hpbGUgY2FsbGluZyBmcm9tIG11bHRpcGxlIHRocmVhZHMsIG9ubHkNCj4gPiArICogb25lIG9m IHRob3NlIHRocmVhZHMgY2FuIGJlIHJlcG9ydGluZyB0aGUgcXVpZXNjZW50IHN0YXRlIHN0YXR1 cw0KPiA+ICsgKiBvbiBhIGdpdmVuIFFTIHZhcmlhYmxlLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFy YW0gdg0KPiA+ICsgKiAgIFFTIHZhcmlhYmxlDQo+ID4gKyAqIEBwYXJhbSB0DQo+ID4gKyAqICAg VG9rZW4gcmV0dXJuZWQgYnkgcnRlX3JjdV9xc2JyX3N0YXJ0IEFQSQ0KPiA+ICsgKiBAcGFyYW0g d2FpdA0KPiA+ICsgKiAgIElmIHRydWUsIGJsb2NrIHRpbGwgYWxsIHRoZSByZWFkZXIgdGhyZWFk cyBoYXZlIGNvbXBsZXRlZCBlbnRlcmluZw0KPiA+ICsgKiAgIHRoZSBxdWllc2NlbnQgc3RhdGUg cmVmZXJlbmNlZCBieSB0b2tlbiAndCcuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIDAg aWYgYWxsIHJlYWRlciB0aHJlYWRzIGhhdmUgTk9UIHBhc3NlZCB0aHJvdWdoIHNwZWNpZmllZCBu dW1iZXINCj4gPiArICogICAgIG9mIHF1aWVzY2VudCBzdGF0ZXMuDQo+ID4gKyAqICAgLSAxIGlm IGFsbCByZWFkZXIgdGhyZWFkcyBoYXZlIHBhc3NlZCB0aHJvdWdoIHNwZWNpZmllZCBudW1iZXIN Cj4gPiArICogICAgIG9mIHF1aWVzY2VudCBzdGF0ZXMuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg X19ydGVfYWx3YXlzX2lubGluZSBpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3J0ZV9yY3Vf cXNicl9jaGVjayhzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1aW50NjRfdCB0LCBib29sIHdhaXQp IHsNCj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMKTsNCj4gPiArDQo+ID4gKwlpZiAobGlrZWx5 KHYtPm51bV90aHJlYWRzID09IHYtPm1heF90aHJlYWRzKSkNCj4gPiArCQlyZXR1cm4gX19yY3Vf cXNicl9jaGVja19hbGwodiwgdCwgd2FpdCk7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmV0dXJuIF9f cmN1X3FzYnJfY2hlY2tfc2VsZWN0aXZlKHYsIHQsIHdhaXQpOyB9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIFdhaXQgdGlsbCB0 aGUgcmVhZGVyIHRocmVhZHMgaGF2ZSBlbnRlcmVkIHF1aWVzY2VudCBzdGF0ZS4NCj4gPiArICoN Cj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4gSXQg aXMgbXVsdGktdGhyZWFkIHNhZmUuDQo+ID4gKyAqIFRoaXMgQVBJIGNhbiBiZSB0aG91Z2h0IG9m IGFzIGEgd3JhcHBlciBhcm91bmQgcnRlX3JjdV9xc2JyX3N0YXJ0DQo+ID4gK2FuZA0KPiA+ICsg KiBydGVfcmN1X3FzYnJfY2hlY2sgQVBJcy4NCj4gPiArICoNCj4gPiArICogSWYgdGhpcyBBUEkg aXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgb25seSBvbmUgb2YNCj4gPiArICogdGhv c2UgdGhyZWFkcyBjYW4gYmUgcmVwb3J0aW5nIHRoZSBxdWllc2NlbnQgc3RhdGUgc3RhdHVzIG9u IGENCj4gPiArICogZ2l2ZW4gUVMgdmFyaWFibGUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSB2 DQo+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiArICogQHBhcmFtIHRocmVhZF9pZA0KPiA+ICsg KiAgIFRocmVhZCBJRCBvZiB0aGUgY2FsbGVyIGlmIGl0IGlzIHJlZ2lzdGVyZWQgdG8gcmVwb3J0 IHF1aWVzY2VudCBzdGF0ZQ0KPiA+ICsgKiAgIG9uIHRoaXMgUVMgdmFyaWFibGUgKGkuZS4gdGhl IGNhbGxpbmcgdGhyZWFkIGlzIGFsc28gcGFydCBvZiB0aGUNCj4gPiArICogICByZWFkc2lkZSBj cml0aWNhbCBzZWN0aW9uKS4gSWYgbm90LCBwYXNzIFJURV9RU0JSX1RIUklEX0lOVkFMSUQuDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkIF9fcnRlX2V4cGVy aW1lbnRhbA0KPiA+ICtydGVfcmN1X3FzYnJfc3luY2hyb25pemUoc3RydWN0IHJ0ZV9yY3VfcXNi ciAqdiwgdW5zaWduZWQgaW50DQo+ID4gK3RocmVhZF9pZCkgew0KPiA+ICsJdWludDY0X3QgdDsN Cj4gPiArDQo+ID4gKwlSVEVfQVNTRVJUKHYgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsJdCA9IHJ0 ZV9yY3VfcXNicl9zdGFydCh2KTsNCj4gPiArDQo+ID4gKwkvKiBJZiB0aGUgY3VycmVudCB0aHJl YWQgaGFzIHJlYWRzaWRlIGNyaXRpY2FsIHNlY3Rpb24sDQo+ID4gKwkgKiB1cGRhdGUgaXRzIHF1 aWVzY2VudCBzdGF0ZSBzdGF0dXMuDQo+ID4gKwkgKi8NCj4gPiArCWlmICh0aHJlYWRfaWQgIT0g UlRFX1FTQlJfVEhSSURfSU5WQUxJRCkNCj4gPiArCQlydGVfcmN1X3FzYnJfcXVpZXNjZW50KHYs IHRocmVhZF9pZCk7DQo+ID4gKw0KPiA+ICsJLyogV2FpdCBmb3Igb3RoZXIgcmVhZGVycyB0byBl bnRlciBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiArCXJ0ZV9yY3VfcXNicl9jaGVjayh2LCB0LCB0 cnVlKTsNCj4gDQo+IEFuZCB5b3UgYXJlIHByZXN1bWFibHkgcmVseWluZyBvbiA2NC1iaXQgY291 bnRlcnMgdG8gYXZvaWQgdGhlIG5lZWQgdG8NCj4gZXhlY3V0ZSB0aGUgYWJvdmUgY29kZSB0d2lj ZSBpbiBzdWNjZXNzaW9uLiAgV2hpY2ggYWdhaW4gd29ya3MgZ2l2ZW4NCj4gY3VycmVudCBDUFUg Y2xvY2sgcmF0ZXMgY29tYmluZWQgd2l0aCBzeXN0ZW0gYW5kIGh1bWFuIGxpZmVzcGFucy4NCj4g T3RoZXJ3aXNlLCB0aGVyZSBhcmUgaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zIHRoYXQgY2Fu IGhhcHBlbiwgc28gZG9uJ3QNCj4gdHJ5IHRoaXMgd2l0aCBhIDMyLWJpdCBjb3VudGVyISEhDQpZ ZXMuIEkgYW0gcmVseWluZyBvbiA2NC1iaXQgY291bnRlcnMgdG8gYXZvaWQgaGF2aW5nIHRvIHNw ZW5kIGN5Y2xlcyAoYW5kIHRpbWUpLg0KDQo+IA0KPiAoQnV0IHRoaW5rIG9mIHRoZSBncmVhdF5O IGdyYW5kY2hpbGRyZW4hISEpDQooSXQgaXMgYW4gaW50ZXJlc3RpbmcgdGhvdWdodC4gSSB3b25k ZXIgd2hhdCB3b3VsZCBoYXBwZW4gdG8gYWxsIHRoZSBjb2RlIHdlIGFyZSB3cml0aW5nIHRvZGF5 IPCfmIopDQoNCj4gDQo+IE1vcmUgc2VyaW91c2x5LCBhIGNvbW1lbnQgd2FybmluZyBwZW9wbGUg bm90IHRvIG1ha2UgdGhlIGNvdW50ZXIgYmUgMzINCj4gYml0cyBpcyBpbiBvcmRlci4NCkFncmVl LCBJIHdpbGwgYWRkIGl0IGluIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4NCg0KPiANCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1F TlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0K PiA+ICsgKiBEdW1wIHRoZSBkZXRhaWxzIG9mIGEgc2luZ2xlIFFTIHZhcmlhYmxlcyB0byBhIGZp bGUuDQo+ID4gKyAqDQo+ID4gKyAqIEl0IGlzIE5PVCBtdWx0aS10aHJlYWQgc2FmZS4NCj4gPiAr ICoNCj4gPiArICogQHBhcmFtIGYNCj4gPiArICogICBBIHBvaW50ZXIgdG8gYSBmaWxlIGZvciBv dXRwdXQNCj4gPiArICogQHBhcmFtIHYNCj4gPiArICogICBRUyB2YXJpYWJsZQ0KPiA+ICsgKiBA cmV0dXJuDQo+ID4gKyAqICAgT24gc3VjY2VzcyAtIDANCj4gPiArICogICBPbiBlcnJvciAtIDEg d2l0aCBlcnJvciBjb2RlIHNldCBpbiBydGVfZXJybm8uDQo+ID4gKyAqICAgUG9zc2libGUgcnRl X2Vycm5vIGNvZGVzIGFyZToNCj4gPiArICogICAtIEVJTlZBTCAtIE5VTEwgcGFyYW1ldGVycyBh cmUgcGFzc2VkDQo+ID4gKyAqLw0KPiA+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3J0 ZV9yY3VfcXNicl9kdW1wKEZJTEUgKmYsIHN0cnVjdCBydGVfcmN1X3FzYnIgKnYpOw0KPiA+ICsN Cj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gK30NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ ICsjZW5kaWYgLyogX1JURV9SQ1VfUVNCUl9IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3JjdS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4gYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1 X3ZlcnNpb24ubWFwDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAuLmFkOGNiNTE3Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3Jj dS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICtFWFBFUklN RU5UQUwgew0KPiA+ICsJZ2xvYmFsOg0KPiA+ICsNCj4gPiArCXJ0ZV9yY3VfcXNicl9nZXRfbWVt c2l6ZTsNCj4gPiArCXJ0ZV9yY3VfcXNicl9pbml0Ow0KPiA+ICsJcnRlX3JjdV9xc2JyX3RocmVh ZF9yZWdpc3RlcjsNCj4gPiArCXJ0ZV9yY3VfcXNicl90aHJlYWRfdW5yZWdpc3RlcjsNCj4gPiAr CXJ0ZV9yY3VfcXNicl9kdW1wOw0KPiA+ICsNCj4gPiArCWxvY2FsOiAqOw0KPiA+ICt9Ow0KPiA+ IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5kZXgNCj4g PiA1OTUzMTRkN2QuLjY3YmUxMDY1OSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbWVzb24uYnVpbGQN Cj4gPiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4gPiBAQCAtMjIsNyArMjIsNyBAQCBsaWJyYXJp ZXMgPSBbDQo+ID4gIAknZ3JvJywgJ2dzbycsICdpcF9mcmFnJywgJ2pvYnN0YXRzJywNCj4gPiAg CSdrbmknLCAnbGF0ZW5jeXN0YXRzJywgJ2xwbScsICdtZW1iZXInLA0KPiA+ICAJJ3Bvd2VyJywg J3BkdW1wJywgJ3Jhd2RldicsDQo+ID4gLQkncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScs ICdzdGFjaycsICd2aG9zdCcsDQo+ID4gKwkncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScs ICdzdGFjaycsICd2aG9zdCcsICdyY3UnLA0KPiA+ICAJI2lwc2VjIGxpYiBkZXBlbmRzIG9uIGNy eXB0byBhbmQgc2VjdXJpdHkNCj4gPiAgCSdpcHNlYycsDQo+ID4gIAkjIGFkZCBwa3QgZnJhbWV3 b3JrIGxpYnMgd2hpY2ggdXNlIG90aGVyIGxpYnMgZnJvbSBhYm92ZSBkaWZmIC0tZ2l0DQo+ID4g YS9tay9ydGUuYXBwLm1rIGIvbWsvcnRlLmFwcC5tayBpbmRleCA3ZDk5NGJlY2UuLmU5M2NjMzY2 ZCAxMDA2NDQNCj4gPiAtLS0gYS9tay9ydGUuYXBwLm1rDQo+ID4gKysrIGIvbWsvcnRlLmFwcC5t aw0KPiA+IEBAIC05Nyw2ICs5Nyw3IEBAIF9MRExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9FQUwp ICAgICAgICAgICAgKz0gLQ0KPiBscnRlX2VhbA0KPiA+ICBfTERMSUJTLSQoQ09ORklHX1JURV9M SUJSVEVfQ01ETElORSkgICAgICAgICs9IC1scnRlX2NtZGxpbmUNCj4gPiAgX0xETElCUy0kKENP TkZJR19SVEVfTElCUlRFX1JFT1JERVIpICAgICAgICArPSAtbHJ0ZV9yZW9yZGVyDQo+ID4gIF9M RExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9TQ0hFRCkgICAgICAgICAgKz0gLWxydGVfc2NoZWQN Cj4gPiArX0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1JDVSkgICAgICAgICAgICArPSAtbHJ0 ZV9yY3UNCj4gPg0KPiA+ICBpZmVxICgkKENPTkZJR19SVEVfRVhFQ19FTlZfTElOVVgpLHkpDQo+ ID4gIF9MRExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9LTkkpICAgICAgICAgICAgKz0gLWxydGVf a25pDQo+ID4gLS0NCj4gPiAyLjE3LjENCj4gPg0KDQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 14BADA0096 for ; Thu, 11 Apr 2019 06:35:13 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 731005B26; Thu, 11 Apr 2019 06:35:11 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20079.outbound.protection.outlook.com [40.107.2.79]) by dpdk.org (Postfix) with ESMTP id 4B5585B20 for ; Thu, 11 Apr 2019 06:35:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WJ02Cs8LYZL5/u36bLUOe2rxgvBZA9bRpxPB1Q2yuTM=; b=Phz07rBtIRs4aeYfb+kBi4CjSBFTI+XnsPXNQUjAKyX13snqtvMs+fH71NdHYO8xVNXO9CBlkrxyFzNSx0ik8kuKP30nkg4byMZPHAt30BbGKs/oLNFTn980Xl+98NTHKXo4LYXq8kKC8wctr7HWiN+uCNYwHa889b16t18FB9M= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.152) by VE1PR08MB4894.eurprd08.prod.outlook.com (10.255.113.211) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1771.21; Thu, 11 Apr 2019 04:35:04 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177%2]) with mapi id 15.20.1771.016; Thu, 11 Apr 2019 04:35:04 +0000 From: Honnappa Nagarahalli To: "paulmck@linux.ibm.com" CC: "konstantin.ananyev@intel.com" , "stephen@networkplumber.org" , "marko.kovacevic@intel.com" , "dev@dpdk.org" , "Gavin Hu (Arm Technology China)" , Dharmik Thakkar , Malvika Gupta , Honnappa Nagarahalli , nd , nd Thread-Topic: [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism Thread-Index: AQHU78lDsy4W0sThdUi8p6MItiPVFqY2RtWA Date: Thu, 11 Apr 2019 04:35:04 +0000 Message-ID: References: <20181122033055.3431-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-2-honnappa.nagarahalli@arm.com> <20190410181432.GO14111@linux.ibm.com> In-Reply-To: <20190410181432.GO14111@linux.ibm.com> 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=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.103.75] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a71faa6a-a966-4bde-7316-08d6be3711b2 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600139)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:VE1PR08MB4894; x-ms-traffictypediagnostic: VE1PR08MB4894: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 00046D390F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(366004)(346002)(39860400002)(396003)(376002)(25584004)(199004)(189003)(13464003)(2351001)(68736007)(81166006)(71200400001)(5660300002)(305945005)(8936002)(52536014)(8676002)(4326008)(14444005)(256004)(7736002)(14454004)(229853002)(53946003)(478600001)(72206003)(86362001)(5640700003)(71190400001)(1730700003)(53936002)(81156014)(9686003)(55016002)(6246003)(6436002)(26005)(30864003)(53546011)(476003)(186003)(6506007)(33656002)(7696005)(74316002)(2906002)(3846002)(11346002)(486006)(6116002)(6916009)(93886005)(54906003)(99286004)(66066001)(446003)(2501003)(97736004)(76176011)(25786009)(316002)(106356001)(105586002)(102836004)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4894; H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: zCJew1ekJ01YQWnoheNJSbFlTK05f3tWA32nxbhZ79heW8a4B/d/eO4W3wUQKYBUXXkT61Uf+GGzEAwGt1RSe8gVxoP4NEoLWrnSx0wqcEEkrEqfKLnB5yENw+B98G6p7y5Hk2yhlOHoDSF6ubeXDdtXAXqvSBaxN1u60lOvLTSoahuTwl6SG9n3vTnJa3eN8QqYZLOhpwZcU8+Z8ADo4Vva5sHXibsmcacZczY7QbE5p/sZhDXaK8HF6IgtJnmApYRv1KjiPHmxzZnRCYqejDCKGS7oMJEbIiD1BEfzzl3ym8DDm7kSvSq+ynhyKa/9HWBdEzvLoRmediHUQFLWGbzWlC0V0SmySqdgMPOPfDZz8s1NHgTy+HJFlkmr7g6XjmL9v2B+WhBmYK0ycvmzJRt6v1bZwSOphtytdcOX4wE= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: a71faa6a-a966-4bde-7316-08d6be3711b2 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Apr 2019 04:35:04.7108 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4894 Subject: Re: [dpdk-dev] [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Message-ID: <20190411043504.QG8WYadD5w0ssk0G5b96vZph8YiRlCCS30S6y7aVKSw@z> SGkgUGF1bCwNCglUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGF1bCBFLiBNY0tlbm5leSA8cGF1bG1ja0BsaW51eC5p Ym0uY29tPg0KPiBTZW50OiBXZWRuZXNkYXksIEFwcmlsIDEwLCAyMDE5IDE6MTUgUE0NCj4gVG86 IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tPg0KPiBD Yzoga29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1bWJlci5v cmc7DQo+IG1hcmtvLmtvdmFjZXZpY0BpbnRlbC5jb207IGRldkBkcGRrLm9yZzsgR2F2aW4gSHUg KEFybSBUZWNobm9sb2d5DQo+IENoaW5hKSA8R2F2aW4uSHVAYXJtLmNvbT47IERoYXJtaWsgVGhh a2thcg0KPiA8RGhhcm1pay5UaGFra2FyQGFybS5jb20+OyBNYWx2aWthIEd1cHRhIDxNYWx2aWth Lkd1cHRhQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjQgMS8zXSByY3U6IGFkZCBS Q1UgbGlicmFyeSBzdXBwb3J0aW5nIFFTQlINCj4gbWVjaGFuaXNtDQo+IA0KPiBPbiBXZWQsIEFw ciAxMCwgMjAxOSBhdCAwNjoyMDowNEFNIC0wNTAwLCBIb25uYXBwYSBOYWdhcmFoYWxsaSB3cm90 ZToNCj4gPiBBZGQgUkNVIGxpYnJhcnkgc3VwcG9ydGluZyBxdWllc2NlbnQgc3RhdGUgYmFzZWQg bWVtb3J5IHJlY2xhbWF0aW9uDQo+IG1ldGhvZC4NCj4gPiBUaGlzIGxpYnJhcnkgaGVscHMgaWRl bnRpZnkgdGhlIHF1aWVzY2VudCBzdGF0ZSBvZiB0aGUgcmVhZGVyIHRocmVhZHMNCj4gPiBzbyB0 aGF0IHRoZSB3cml0ZXJzIGNhbiBmcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBs b2NrIGxlc3MNCj4gPiBkYXRhIHN0cnVjdHVyZXMuDQo+IA0KPiBJIGRvbid0IHNlZSBhbnkgc2ln biBvZiByZWFkLXNpZGUgbWFya2VycyAocmN1X3JlYWRfbG9jaygpIGFuZA0KPiByY3VfcmVhZF91 bmxvY2soKSBpbiB0aGUgTGludXgga2VybmVsLCB1c2Vyc3BhY2UgUkNVLCBldGMuKS4NCj4gDQo+ IFllcywgc3RyaWN0bHkgc3BlYWtpbmcsIHRoZXNlIGFyZSBub3QgbmVlZGVkIGZvciBRU0JSIHRv IG9wZXJhdGUsIGJ1dCB0aGV5DQpUaGVzZSBBUElzIHdvdWxkIGJlIGVtcHR5IGZvciBRU0JSLg0K DQo+IG1ha2UgaXQgd2F5IGVhc2llciB0byBtYWludGFpbiBhbmQgZGVidWcgY29kZSB1c2luZyBS Q1UuICBGb3IgZXhhbXBsZSwNCj4gZ2l2ZW4gdGhlIHJlYWQtc2lkZSBtYXJrZXJzLCB5b3UgY2Fu IGNoZWNrIGZvciBlcnJvcnMgbGlrZSBoYXZpbmcgYSBjYWxsIHRvDQo+IHJ0ZV9yY3VfcXNicl9x dWllc2NlbnQoKSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVhZGVyIHF1aXRlIGVhc2lseS4NCj4gV2l0 aG91dCB0aG9zZSByZWFkLXNpZGUgbWFya2VycywgbGlmZSBjYW4gYmUgcXVpdGUgaGFyZCBhbmQg eW91IHdpbGwgcmVhbGx5DQo+IGhhdGUgeW91cnNlbGYgZm9yIGZhaWxpbmcgdG8gaGF2ZSBwcm92 aWRlZCB0aGVtLg0KV2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0b29kIHRoaXMsIGRvIHlvdSBt ZWFuIHRoZSBhcHBsaWNhdGlvbiB3b3VsZCBtYXJrIGJlZm9yZSBhbmQgYWZ0ZXIgYWNjZXNzaW5n IHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgb24gdGhlIHJlYWRlciBzaWRlPw0KDQpydGVfcmN1 X3FzYnJfbG9jaygpDQo8YmVnaW4gYWNjZXNzIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT4NCi4uLg0K Li4uDQo8ZW5kIGFjY2VzcyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmU+DQpydGVfcmN1X3FzYnJfdW5s b2NrKCkNCg0KSWYgc29tZW9uZSBpcyBkZWJ1Z2dpbmcgdGhpcyBjb2RlLCB0aGV5IGhhdmUgdG8g bWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gdW5sb2NrIGZvciBldmVyeSBsb2NrIGFuZCB0aGVy ZSBpcyBubyBjYWxsIHRvIHJ0ZV9yY3VfcXNicl9xdWllc2NlbnQgaW4gYmV0d2Vlbi4NCkl0IHNv dW5kcyBnb29kIHRvIG1lLiBPYnZpb3VzbHksIHRoZXkgd2lsbCBub3QgYWRkIGFueSBhZGRpdGlv bmFsIGN5Y2xlcyBhcyB3ZWxsLg0KUGxlYXNlIGxldCBtZSBrbm93IGlmIG15IHVuZGVyc3RhbmRp bmcgaXMgY29ycmVjdC4NCg0KPiANCj4gU29tZSBhZGRpdGlvbmFsIHF1ZXN0aW9ucyBhbmQgY29t bWVudHMgaW50ZXJzcGVyc2VkLg0KPiANCj4gCQkJCQkJCVRoYW54LCBQYXVsDQo+IA0KPiA+IFNp Z25lZC1vZmYtYnk6IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxob25uYXBwYS5uYWdhcmFoYWxsaUBh cm0uY29tPg0KPiA+IFJldmlld2VkLWJ5OiBTdGV2ZSBDYXBwZXIgPHN0ZXZlLmNhcHBlckBhcm0u Y29tPg0KPiA+IFJldmlld2VkLWJ5OiBHYXZpbiBIdSA8Z2F2aW4uaHVAYXJtLmNvbT4NCj4gPiBS ZXZpZXdlZC1ieTogT2xhIExpbGplZGFobCA8b2xhLmxpbGplZGFobEBhcm0uY29tPg0KPiA+IEFj a2VkLWJ5OiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+ DQo+ID4gLS0tDQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUg Kw0KPiA+ICBjb25maWcvY29tbW9uX2Jhc2UgICAgICAgICAgICAgICAgIHwgICA2ICsNCj4gPiAg bGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArDQo+ID4gIGxpYi9saWJy dGVfcmN1L01ha2VmaWxlICAgICAgICAgICAgfCAgMjMgKysNCj4gPiAgbGliL2xpYnJ0ZV9yY3Uv bWVzb24uYnVpbGQgICAgICAgICB8ICAgNSArDQo+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3Vf cXNici5jICAgICAgfCAyMzcgKysrKysrKysrKysrDQo+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9y Y3VfcXNici5oICAgICAgfCA1NTQNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4g PiAgbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcCB8ICAxMSArDQo+ID4gIGxpYi9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiAgbWsvcnRlLmFwcC5t ayAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIDEwIGZpbGVzIGNoYW5nZWQsIDg0 NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pICBjcmVhdGUgbW9kZQ0KPiA+IDEwMDY0NCBs aWIvbGlicnRlX3JjdS9NYWtlZmlsZSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gbGliL2xpYnJ0 ZV9yY3UvbWVzb24uYnVpbGQgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IGxpYi9saWJydGVfcmN1 L3J0ZV9yY3VfcXNici5jICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBsaWIvbGlicnRlX3JjdS9y dGVfcmN1X3FzYnIuaCAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gbGliL2xpYnJ0ZV9yY3UvcnRl X3JjdV92ZXJzaW9uLm1hcA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJ TlRBSU5FUlMgaW5kZXggOTc3NDM0NGRkLi42ZTk3NjZlZWQNCj4gPiAxMDA2NDQNCj4gPiAtLS0g YS9NQUlOVEFJTkVSUw0KPiA+ICsrKyBiL01BSU5UQUlORVJTDQo+ID4gQEAgLTEyNjcsNiArMTI2 NywxMSBAQCBGOiBleGFtcGxlcy9icGYvDQo+ID4gIEY6IGFwcC90ZXN0L3Rlc3RfYnBmLmMNCj4g PiAgRjogZG9jL2d1aWRlcy9wcm9nX2d1aWRlL2JwZl9saWIucnN0DQo+ID4NCj4gPiArUkNVIC0g RVhQRVJJTUVOVEFMDQo+ID4gK006IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxob25uYXBwYS5uYWdh cmFoYWxsaUBhcm0uY29tPg0KPiA+ICtGOiBsaWIvbGlicnRlX3JjdS8NCj4gPiArRjogZG9jL2d1 aWRlcy9wcm9nX2d1aWRlL3JjdV9saWIucnN0DQo+ID4gKw0KPiA+DQo+ID4gIFRlc3QgQXBwbGlj YXRpb25zDQo+ID4gIC0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gZGlmZiAtLWdpdCBhL2NvbmZpZy9j b21tb25fYmFzZSBiL2NvbmZpZy9jb21tb25fYmFzZSBpbmRleA0KPiA+IDhkYTA4MTA1Yi4uYWQ3 MGM3OWUxIDEwMDY0NA0KPiA+IC0tLSBhL2NvbmZpZy9jb21tb25fYmFzZQ0KPiA+ICsrKyBiL2Nv bmZpZy9jb21tb25fYmFzZQ0KPiA+IEBAIC04MjksNiArODI5LDEyIEBAIENPTkZJR19SVEVfTElC UlRFX0xBVEVOQ1lfU1RBVFM9eSAgIw0KPiA+IENPTkZJR19SVEVfTElCUlRFX1RFTEVNRVRSWT1u DQo+ID4NCj4gPiArIw0KPiA+ICsjIENvbXBpbGUgbGlicnRlX3JjdQ0KPiA+ICsjDQo+ID4gK0NP TkZJR19SVEVfTElCUlRFX1JDVT15DQo+ID4gK0NPTkZJR19SVEVfTElCUlRFX1JDVV9ERUJVRz1u DQo+ID4gKw0KPiA+ICAjDQo+ID4gICMgQ29tcGlsZSBsaWJydGVfbHBtDQo+ID4gICMNCj4gPiBk aWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlIGluZGV4IDI2MDIxZDBjMC4u NzkxZTBkOTkxDQo+ID4gMTAwNjQ0DQo+ID4gLS0tIGEvbGliL01ha2VmaWxlDQo+ID4gKysrIGIv bGliL01ha2VmaWxlDQo+ID4gQEAgLTExMSw2ICsxMTEsOCBAQCBESVJTLSQoQ09ORklHX1JURV9M SUJSVEVfSVBTRUMpICs9DQo+IGxpYnJ0ZV9pcHNlYw0KPiA+IERFUERJUlMtbGlicnRlX2lwc2Vj IDo9IGxpYnJ0ZV9lYWwgbGlicnRlX21idWYgbGlicnRlX2NyeXB0b2Rldg0KPiA+IGxpYnJ0ZV9z ZWN1cml0eQ0KPiA+ICBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfVEVMRU1FVFJZKSArPSBsaWJy dGVfdGVsZW1ldHJ5DQo+ID4gREVQRElSUy1saWJydGVfdGVsZW1ldHJ5IDo9IGxpYnJ0ZV9lYWwg bGlicnRlX21ldHJpY3MgbGlicnRlX2V0aGRldg0KPiA+ICtESVJTLSQoQ09ORklHX1JURV9MSUJS VEVfUkNVKSArPSBsaWJydGVfcmN1IERFUERJUlMtbGlicnRlX3JjdSA6PQ0KPiA+ICtsaWJydGVf ZWFsDQo+ID4NCj4gPiAgaWZlcSAoJChDT05GSUdfUlRFX0VYRUNfRU5WX0xJTlVYKSx5KQ0KPiA+ ICBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfS05JKSArPSBsaWJydGVfa25pIGRpZmYgLS1naXQN Cj4gPiBhL2xpYi9saWJydGVfcmN1L01ha2VmaWxlIGIvbGliL2xpYnJ0ZV9yY3UvTWFrZWZpbGUg bmV3IGZpbGUgbW9kZQ0KPiA+IDEwMDY0NCBpbmRleCAwMDAwMDAwMDAuLjZhYTY3N2JkMQ0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3JjdS9NYWtlZmlsZQ0KPiA+IEBA IC0wLDAgKzEsMjMgQEANCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh dXNlICMgQ29weXJpZ2h0KGMpIDIwMTggQXJtDQo+ID4gK0xpbWl0ZWQNCj4gPiArDQo+ID4gK2lu Y2x1ZGUgJChSVEVfU0RLKS9tay9ydGUudmFycy5taw0KPiA+ICsNCj4gPiArIyBsaWJyYXJ5IG5h bWUNCj4gPiArTElCID0gbGlicnRlX3JjdS5hDQo+ID4gKw0KPiA+ICtDRkxBR1MgKz0gLURBTExP V19FWFBFUklNRU5UQUxfQVBJDQo+ID4gK0NGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykgLUkkKFNS Q0RJUikgLU8zIExETElCUyArPSAtbHJ0ZV9lYWwNCj4gPiArDQo+ID4gK0VYUE9SVF9NQVAgOj0g cnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ICsNCj4gPiArTElCQUJJVkVSIDo9IDENCj4gPiArDQo+ ID4gKyMgYWxsIHNvdXJjZSBhcmUgc3RvcmVkIGluIFNSQ1MteQ0KPiA+ICtTUkNTLSQoQ09ORklH X1JURV9MSUJSVEVfUkNVKSA6PSBydGVfcmN1X3FzYnIuYw0KPiA+ICsNCj4gPiArIyBpbnN0YWxs IGluY2x1ZGVzDQo+ID4gK1NZTUxJTkstJChDT05GSUdfUlRFX0xJQlJURV9SQ1UpLWluY2x1ZGUg Oj0gcnRlX3JjdV9xc2JyLmgNCj4gPiArDQo+ID4gK2luY2x1ZGUgJChSVEVfU0RLKS9tay9ydGUu bGliLm1rDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmN1L21lc29uLmJ1aWxkIGIvbGli L2xpYnJ0ZV9yY3UvbWVzb24uYnVpbGQNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAw MDAwMDAwMDAuLmMwMDlhZTRiNw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGli cnRlX3JjdS9tZXNvbi5idWlsZA0KPiA+IEBAIC0wLDAgKzEsNSBAQA0KPiA+ICsjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgIyBDb3B5cmlnaHQoYykgMjAxOCBBcm0NCj4g PiArTGltaXRlZA0KPiA+ICsNCj4gPiArc291cmNlcyA9IGZpbGVzKCdydGVfcmN1X3FzYnIuYycp DQo+ID4gK2hlYWRlcnMgPSBmaWxlcygncnRlX3JjdV9xc2JyLmgnKQ0KPiA+IGRpZmYgLS1naXQg YS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuYw0KPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRl X3JjdV9xc2JyLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPiAwMDAwMDAwMDAuLjUz ZDA4NDQ2YQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVf cmN1X3FzYnIuYw0KPiA+IEBAIC0wLDAgKzEsMjM3IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChjKSAy MDE4IEFybSBMaW1pdGVkDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHN0ZGlvLmg+ DQo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxydGVfY29tbW9uLmg+ DQo+ID4gKyNpbmNsdWRlIDxydGVfbG9nLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+ DQo+ID4gKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZWFsLmg+ DQo+ID4gKyNpbmNsdWRlIDxydGVfZWFsX21lbWNvbmZpZy5oPg0KPiA+ICsjaW5jbHVkZSA8cnRl X2F0b21pYy5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX3Blcl9sY29yZS5oPg0KPiA+ICsjaW5jbHVk ZSA8cnRlX2xjb3JlLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZXJybm8uaD4NCj4gPiArDQo+ID4g KyNpbmNsdWRlICJydGVfcmN1X3FzYnIuaCINCj4gPiArDQo+ID4gKy8qIEdldCB0aGUgbWVtb3J5 IHNpemUgb2YgUVNCUiB2YXJpYWJsZSAqLyBzaXplX3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4g K3J0ZV9yY3VfcXNicl9nZXRfbWVtc2l6ZSh1aW50MzJfdCBtYXhfdGhyZWFkcykgew0KPiA+ICsJ c2l6ZV90IHN6Ow0KPiA+ICsNCj4gPiArCWlmIChtYXhfdGhyZWFkcyA9PSAwKSB7DQo+ID4gKwkJ cnRlX2xvZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ICsJCQkiJXMoKTogSW52YWxp ZCBtYXhfdGhyZWFkcyAldVxuIiwNCj4gPiArCQkJX19mdW5jX18sIG1heF90aHJlYWRzKTsNCj4g PiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gKw0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXN6ID0gc2l6ZW9mKHN0cnVjdCBydGVfcmN1X3FzYnIpOw0KPiA+ICsN Cj4gPiArCS8qIEFkZCB0aGUgc2l6ZSBvZiBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheSAq Lw0KPiA+ICsJc3ogKz0gc2l6ZW9mKHN0cnVjdCBydGVfcmN1X3FzYnJfY250KSAqIG1heF90aHJl YWRzOw0KPiA+ICsNCj4gPiArCS8qIEFkZCB0aGUgc2l6ZSBvZiB0aGUgcmVnaXN0ZXJlZCB0aHJl YWQgSUQgYml0bWFwIGFycmF5ICovDQo+ID4gKwlzeiArPSBSVEVfUVNCUl9USFJJRF9BUlJBWV9T SVpFKG1heF90aHJlYWRzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gUlRFX0FMSUdOKHN6LCBSVEVf Q0FDSEVfTElORV9TSVpFKTsNCj4gDQo+IEdpdmVuIHRoYXQgeW91IGFsaWduIGhlcmUsIHNob3Vs ZCB5b3UgYWxzbyBhbGlnbiBpbiB0aGUgZWFybGllciBzdGVwcyBpbiB0aGUNCj4gY29tcHV0YXRp b24gb2Ygc3o/DQpBZ3JlZS4gSSB3aWxsIHJlbW92ZSB0aGUgYWxpZ24gaGVyZSBhbmQga2VlcCB0 aGUgZWFybGllciBvbmUgYXMgdGhlIGludGVudCBpcyB0byBhbGlnbiB0aGUgdGhyZWFkIElEIGFy cmF5Lg0KDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBJbml0aWFsaXplIGEgcXVpZXNjZW50 IHN0YXRlIHZhcmlhYmxlICovIGludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9x c2JyX2luaXQoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDMyX3QgbWF4X3RocmVhZHMpIHsN Cj4gPiArCXNpemVfdCBzejsNCj4gPiArDQo+ID4gKwlpZiAodiA9PSBOVUxMKSB7DQo+ID4gKwkJ cnRlX2xvZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ICsJCQkiJXMoKTogSW52YWxp ZCBpbnB1dCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsNCj4gPiArCQlydGVfZXJybm8gPSBFSU5W QUw7DQo+ID4gKw0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXN6ID0g cnRlX3JjdV9xc2JyX2dldF9tZW1zaXplKG1heF90aHJlYWRzKTsNCj4gPiArCWlmIChzeiA9PSAx KQ0KPiA+ICsJCXJldHVybiAxOw0KPiA+ICsNCj4gPiArCS8qIFNldCBhbGwgdGhlIHRocmVhZHMg dG8gb2ZmbGluZSAqLw0KPiA+ICsJbWVtc2V0KHYsIDAsIHN6KTsNCj4gDQo+IFdlIGNhbGN1bGF0 ZSBzeiBoZXJlLCBidXQgaXQgbG9va3MgbGlrZSB0aGUgY2FsbGVyIG11c3QgYWxzbyBjYWxjdWxh dGUgaXQgaW4NCj4gb3JkZXIgdG8gY29ycmVjdGx5IGFsbG9jYXRlIHRoZSBtZW1vcnkgcmVmZXJl bmNlZCBieSB0aGUgInYiIGFyZ3VtZW50IHRvDQo+IHRoaXMgZnVuY3Rpb24sIHdpdGggYmFkIHRo aW5ncyBoYXBwZW5pbmcgaWYgdGhlIHR3byBjYWxjdWxhdGlvbnMgZ2V0DQo+IGRpZmZlcmVudCBy ZXN1bHRzLiAgU2hvdWxkICJ2IiBpbnN0ZWFkIGJlIGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5j dGlvbiB0bw0KPiBhdm9pZCB0aGlzIHNvcnQgb2YgcHJvYmxlbT8NCkVhcmxpZXIgdmVyc2lvbiBh bGxvY2F0ZWQgdGhlIG1lbW9yeSB3aXRoLWluIHRoaXMgbGlicmFyeS4gSG93ZXZlciwgaXQgd2Fz IGRlY2lkZWQgdG8gZ28gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhcyBpdCBwcm92 aWRlcyBmbGV4aWJpbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIG1hbmFnZSB0aGUgbWVtb3J5 IGFzIGl0IHNlZXMgZml0LiBGb3IgZXg6IGl0IGNvdWxkIGFsbG9jYXRlIHRoaXMgYXMgcGFydCBv ZiBhbm90aGVyIHN0cnVjdHVyZSBpbiBhIHNpbmdsZSBhbGxvY2F0aW9uLiBUaGlzIGFsc28gZmFs bHMgaW5saW5lIHdpdGggc2ltaWxhciBhcHByb2FjaCB0YWtlbiBpbiBvdGhlciBsaWJyYXJpZXMu IA0KDQo+IA0KPiA+ICsJdi0+bWF4X3RocmVhZHMgPSBtYXhfdGhyZWFkczsNCj4gPiArCXYtPm51 bV9lbGVtcyA9IFJURV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFkcywNCj4gPiArCQkJUlRFX1FT QlJfVEhSSURfQVJSQVlfRUxNX1NJWkUpIC8NCj4gPiArCQkJUlRFX1FTQlJfVEhSSURfQVJSQVlf RUxNX1NJWkU7DQo+ID4gKwl2LT50b2tlbiA9IFJURV9RU0JSX0NOVF9JTklUOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBSZWdpc3RlciBhIHJlYWRlciB0 aHJlYWQgdG8gcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUNCj4gPiArICogb24gYSBRUyB2YXJp YWJsZS4NCj4gPiArICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3Jj dV9xc2JyX3RocmVhZF9yZWdpc3RlcihzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1bnNpZ25lZCBp bnQNCj4gPiArdGhyZWFkX2lkKSB7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaWQsIHN1Y2Nlc3M7 DQo+ID4gKwl1aW50NjRfdCBvbGRfYm1hcCwgbmV3X2JtYXA7DQo+ID4gKw0KPiA+ICsJaWYgKHYg PT0gTlVMTCB8fCB0aHJlYWRfaWQgPj0gdi0+bWF4X3RocmVhZHMpIHsNCj4gPiArCQlydGVfbG9n KFJURV9MT0dfRVJSLCByY3VfbG9nX3R5cGUsDQo+ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0 IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4g PiArDQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWQgPSB0aHJlYWRf aWQgJiBSVEVfUVNCUl9USFJJRF9NQVNLOw0KPiA+ICsJaSA9IHRocmVhZF9pZCA+PiBSVEVfUVNC Ul9USFJJRF9JTkRFWF9TSElGVDsNCj4gPiArDQo+ID4gKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUg Y291bnRlciBmb3IgcmVnaXN0ZXJlZCB0aHJlYWRzIGRvZXMgbm90DQo+ID4gKwkgKiBnbyBvdXQg b2Ygc3luYy4gSGVuY2UsIGFkZGl0aW9uYWwgY2hlY2tzIGFyZSByZXF1aXJlZC4NCj4gPiArCSAq Lw0KPiA+ICsJLyogQ2hlY2sgaWYgdGhlIHRocmVhZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8N Cj4gPiArCW9sZF9ibWFwID0gX19hdG9taWNfbG9hZF9uKFJURV9RU0JSX1RIUklEX0FSUkFZX0VM TSh2LCBpKSwNCj4gPiArCQkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCWlmIChvbGRfYm1h cCAmIDFVTCA8PCBpZCkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlkbyB7DQo+ID4g KwkJbmV3X2JtYXAgPSBvbGRfYm1hcCB8ICgxVUwgPDwgaWQpOw0KPiA+ICsJCXN1Y2Nlc3MgPSBf X2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKA0KPiA+ICsJCQkJCVJURV9RU0JSX1RIUklEX0FSUkFZ X0VMTSh2LCBpKSwNCj4gPiArCQkJCQkmb2xkX2JtYXAsICZuZXdfYm1hcCwgMCwNCj4gPiArCQkJ CQlfX0FUT01JQ19SRUxFQVNFLA0KPiBfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArDQo+ID4gKwkJ aWYgKHN1Y2Nlc3MpDQo+ID4gKwkJCV9fYXRvbWljX2ZldGNoX2FkZCgmdi0+bnVtX3RocmVhZHMs DQo+ID4gKwkJCQkJCTEsIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ICsJCWVsc2UgaWYgKG9sZF9i bWFwICYgKDFVTCA8PCBpZCkpDQo+ID4gKwkJCS8qIFNvbWVvbmUgZWxzZSByZWdpc3RlcmVkIHRo aXMgdGhyZWFkLg0KPiA+ICsJCQkgKiBDb3VudGVyIHNob3VsZCBub3QgYmUgaW5jcmVtZW50ZWQu DQo+ID4gKwkJCSAqLw0KPiA+ICsJCQlyZXR1cm4gMDsNCj4gPiArCX0gd2hpbGUgKHN1Y2Nlc3Mg PT0gMCk7DQo+IA0KPiBUaGlzIHdvdWxkIGJlIHNpbXBsZXIgaWYgdGhyZWFkcyB3ZXJlIHJlcXVp cmVkIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMuDQo+IE1heWJlIHlvdSBoYXZlIHVzZSBjYXNlcyBy ZXF1aXJpbmcgcmVnaXN0cmF0aW9uIG9mIG90aGVyIHRocmVhZHMsIGJ1dCB0aGlzDQo+IGNhcGFi aWxpdHkgaXMgYWRkaW5nIHNpZ25pZmljYW50IGNvbXBsZXhpdHksIHNvIGl0IG1pZ2h0IGJlIHdv cnRoIHNvbWUNCj4gdGhvdWdodC4NCj4gDQpJdCB3YXMgc2ltcGxlIGVhcmxpZXIgKF9fYXRvbWlj X2ZldGNoX29yKS4gVGhlIGNvbXBsZXhpdHkgaXMgYWRkZWQgYXMgJ251bV90aHJlYWRzJyBzaG91 bGQgbm90IGdvIG91dCBvZiBzeW5jLg0KDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyogUmVtb3ZlIGEgcmVhZGVyIHRocmVhZCwgZnJvbSB0aGUgbGlzdCBvZiB0aHJlYWRz IHJlcG9ydGluZyB0aGVpcg0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUgb24gYSBRUyB2YXJpYWJs ZS4NCj4gPiArICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9x c2JyX3RocmVhZF91bnJlZ2lzdGVyKHN0cnVjdCBydGVfcmN1X3FzYnIgKnYsIHVuc2lnbmVkIGlu dA0KPiA+ICt0aHJlYWRfaWQpIHsNCj4gPiArCXVuc2lnbmVkIGludCBpLCBpZCwgc3VjY2VzczsN Cj4gPiArCXVpbnQ2NF90IG9sZF9ibWFwLCBuZXdfYm1hcDsNCj4gPiArDQo+ID4gKwlpZiAodiA9 PSBOVUxMIHx8IHRocmVhZF9pZCA+PSB2LT5tYXhfdGhyZWFkcykgew0KPiA+ICsJCXJ0ZV9sb2co UlRFX0xPR19FUlIsIHJjdV9sb2dfdHlwZSwNCj4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQg cGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ ICsNCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZCA9IHRocmVhZF9p ZCAmIFJURV9RU0JSX1RIUklEX01BU0s7DQo+ID4gKwlpID0gdGhyZWFkX2lkID4+IFJURV9RU0JS X1RIUklEX0lOREVYX1NISUZUOw0KPiA+ICsNCj4gPiArCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBj b3VudGVyIGZvciByZWdpc3RlcmVkIHRocmVhZHMgZG9lcyBub3QNCj4gPiArCSAqIGdvIG91dCBv ZiBzeW5jLiBIZW5jZSwgYWRkaXRpb25hbCBjaGVja3MgYXJlIHJlcXVpcmVkLg0KPiA+ICsJICov DQo+ID4gKwkvKiBDaGVjayBpZiB0aGUgdGhyZWFkIGlzIGFscmVhZHkgdW5yZWdpc3RlcmVkICov DQo+ID4gKwlvbGRfYm1hcCA9IF9fYXRvbWljX2xvYWRfbihSVEVfUVNCUl9USFJJRF9BUlJBWV9F TE0odiwgaSksDQo+ID4gKwkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKwlpZiAob2xkX2Jt YXAgJiB+KDFVTCA8PCBpZCkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJZG8gew0K PiA+ICsJCW5ld19ibWFwID0gb2xkX2JtYXAgJiB+KDFVTCA8PCBpZCk7DQo+ID4gKwkJLyogTWFr ZSBzdXJlIGFueSBsb2FkcyBvZiB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlIGFyZQ0KPiA+ICsJ CSAqIGNvbXBsZXRlZCBiZWZvcmUgcmVtb3ZhbCBvZiB0aGUgdGhyZWFkIGZyb20gdGhlIGxpc3Qg b2YNCj4gPiArCQkgKiByZXBvcnRpbmcgdGhyZWFkcy4NCj4gPiArCQkgKi8NCj4gPiArCQlzdWNj ZXNzID0gX19hdG9taWNfY29tcGFyZV9leGNoYW5nZSgNCj4gPiArCQkJCQlSVEVfUVNCUl9USFJJ RF9BUlJBWV9FTE0odiwgaSksDQo+ID4gKwkJCQkJJm9sZF9ibWFwLCAmbmV3X2JtYXAsIDAsDQo+ ID4gKwkJCQkJX19BVE9NSUNfUkVMRUFTRSwNCj4gX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKw0K PiA+ICsJCWlmIChzdWNjZXNzKQ0KPiA+ICsJCQlfX2F0b21pY19mZXRjaF9zdWIoJnYtPm51bV90 aHJlYWRzLA0KPiA+ICsJCQkJCQkxLCBfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiArCQllbHNlIGlm IChvbGRfYm1hcCAmIH4oMVVMIDw8IGlkKSkNCj4gPiArCQkJLyogU29tZW9uZSBlbHNlIHVucmVn aXN0ZXJlZCB0aGlzIHRocmVhZC4NCj4gPiArCQkJICogQ291bnRlciBzaG91bGQgbm90IGJlIGlu Y3JlbWVudGVkLg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJcmV0dXJuIDA7DQo+ID4gKwl9IHdoaWxl IChzdWNjZXNzID09IDApOw0KPiANCj4gRGl0dG8hDQo+IA0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qIER1bXAgdGhlIGRldGFpbHMgb2YgYSBzaW5nbGUgcXVpZXNjZW50 IHN0YXRlIHZhcmlhYmxlIHRvIGEgZmlsZS4NCj4gPiArKi8gaW50IF9fcnRlX2V4cGVyaW1lbnRh bCBydGVfcmN1X3FzYnJfZHVtcChGSUxFICpmLCBzdHJ1Y3QNCj4gPiArcnRlX3JjdV9xc2JyICp2 KSB7DQo+ID4gKwl1aW50NjRfdCBibWFwOw0KPiA+ICsJdWludDMyX3QgaSwgdDsNCj4gPiArDQo+ ID4gKwlpZiAodiA9PSBOVUxMIHx8IGYgPT0gTlVMTCkgew0KPiA+ICsJCXJ0ZV9sb2coUlRFX0xP R19FUlIsIHJjdV9sb2dfdHlwZSwNCj4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQgcGFyYW1l dGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ICsNCj4g PiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmcHJpbnRmKGYsICJcblF1aWVz Y2VudCBTdGF0ZSBWYXJpYWJsZSBAJXBcbiIsIHYpOw0KPiA+ICsNCj4gPiArCWZwcmludGYoZiwg IiAgUVMgdmFyaWFibGUgbWVtb3J5IHNpemUgPSAlbHVcbiIsDQo+ID4gKwkJCQlydGVfcmN1X3Fz YnJfZ2V0X21lbXNpemUodi0NCj4gPm1heF90aHJlYWRzKSk7DQo+ID4gKwlmcHJpbnRmKGYsICIg IEdpdmVuICMgbWF4IHRocmVhZHMgPSAldVxuIiwgdi0+bWF4X3RocmVhZHMpOw0KPiA+ICsJZnBy aW50ZihmLCAiICBDdXJyZW50ICMgdGhyZWFkcyA9ICV1XG4iLCB2LT5udW1fdGhyZWFkcyk7DQo+ ID4gKw0KPiA+ICsJZnByaW50ZihmLCAiICBSZWdpc3RlcmVkIHRocmVhZCBJRCBtYXNrID0gMHgi KTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCB2LT5udW1fZWxlbXM7IGkrKykNCj4gPiArCQlmcHJp bnRmKGYsICIlbHgiLCBfX2F0b21pY19sb2FkX24oDQo+ID4gKwkJCQkJUlRFX1FTQlJfVEhSSURf QVJSQVlfRUxNKHYsIGkpLA0KPiA+ICsJCQkJCV9fQVRPTUlDX0FDUVVJUkUpKTsNCj4gPiArCWZw cmludGYoZiwgIlxuIik7DQo+ID4gKw0KPiA+ICsJZnByaW50ZihmLCAiICBUb2tlbiA9ICVsdVxu IiwNCj4gPiArCQkJX19hdG9taWNfbG9hZF9uKCZ2LT50b2tlbiwgX19BVE9NSUNfQUNRVUlSRSkp Ow0KPiA+ICsNCj4gPiArCWZwcmludGYoZiwgIlF1aWVzY2VudCBTdGF0ZSBDb3VudHMgZm9yIHJl YWRlcnM6XG4iKTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCB2LT5udW1fZWxlbXM7IGkrKykgew0K PiA+ICsJCWJtYXAgPSBfX2F0b21pY19sb2FkX24oUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNKHYs DQo+IGkpLA0KPiA+ICsJCQkJCV9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ICsJCXdoaWxlIChibWFw KSB7DQo+ID4gKwkJCXQgPSBfX2J1aWx0aW5fY3R6bChibWFwKTsNCj4gPiArCQkJZnByaW50Zihm LCAidGhyZWFkIElEID0gJWQsIGNvdW50ID0gJWx1XG4iLCB0LA0KPiA+ICsJCQkJX19hdG9taWNf bG9hZF9uKA0KPiA+ICsJCQkJCSZ2LT5xc2JyX2NudFtpXS5jbnQsDQo+ID4gKwkJCQkJX19BVE9N SUNfUkVMQVhFRCkpOw0KPiA+ICsJCQlibWFwICY9IH4oMVVMIDw8IHQpOw0KPiA+ICsJCX0NCj4g PiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHJj dV9sb2dfdHlwZTsNCj4gPiArDQo+ID4gK1JURV9JTklUKHJ0ZV9yY3VfcmVnaXN0ZXIpDQo+ID4g K3sNCj4gPiArCXJjdV9sb2dfdHlwZSA9IHJ0ZV9sb2dfcmVnaXN0ZXIoImxpYi5yY3UiKTsNCj4g PiArCWlmIChyY3VfbG9nX3R5cGUgPj0gMCkNCj4gPiArCQlydGVfbG9nX3NldF9sZXZlbChyY3Vf bG9nX3R5cGUsIFJURV9MT0dfRVJSKTsgfQ0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Jj dS9ydGVfcmN1X3FzYnIuaA0KPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmggbmV3 IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPiAwMDAwMDAwMDAuLmZmNjk2YWVhYg0KPiA+IC0t LSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+ IEBAIC0wLDAgKzEsNTU0IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt My1DbGF1c2UNCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE4IEFybSBMaW1pdGVkDQo+ID4gKyAq Lw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfUlRFX1JDVV9RU0JSX0hfDQo+ID4gKyNkZWZpbmUgX1JU RV9SQ1VfUVNCUl9IXw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEBmaWxlDQo+ID4gKyAqIFJU RSBRdWllc2NlbnQgU3RhdGUgQmFzZWQgUmVjbGFtYXRpb24gKFFTQlIpDQo+ID4gKyAqDQo+ID4g KyAqIFF1aWVzY2VudCBTdGF0ZSAoUVMpIGlzIGFueSBwb2ludCBpbiB0aGUgdGhyZWFkIGV4ZWN1 dGlvbg0KPiA+ICsgKiB3aGVyZSB0aGUgdGhyZWFkIGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2Ug dG8gYSBkYXRhIHN0cnVjdHVyZQ0KPiA+ICsgKiBpbiBzaGFyZWQgbWVtb3J5LiBXaGlsZSB1c2lu ZyBsb2NrLWxlc3MgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUNCj4gPiArd3JpdGVyDQo+ID4gKyAqIGNh biBzYWZlbHkgZnJlZSBtZW1vcnkgb25jZSBhbGwgdGhlIHJlYWRlciB0aHJlYWRzIGhhdmUgZW50 ZXJlZA0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgbGli cmFyeSBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgdGhlIHJlYWRlcnMgdG8gcmVwb3J0DQo+ID4g K3F1aWVzY2VudA0KPiA+ICsgKiBzdGF0ZSBhbmQgZm9yIHRoZSB3cml0ZXJzIHRvIGlkZW50aWZ5 IHdoZW4gYWxsIHRoZSByZWFkZXJzIGhhdmUNCj4gPiArICogZW50ZXJlZCBxdWllc2NlbnQgc3Rh dGUuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gK2V4dGVy biAiQyIgew0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPiA+ICsjaW5j bHVkZSA8cnRlX2NvbW1vbi5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX21lbW9yeS5oPg0KPiA+ICsj aW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZGVidWcuaD4NCj4gPiAr I2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gPiArDQo+ID4gK2V4dGVybiBpbnQgcmN1X2xvZ190 eXBlOw0KPiA+ICsNCj4gPiArI2lmIFJURV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRyAj ZGVmaW5lIFJDVV9EUF9MT0cobGV2ZWwsDQo+IGZtdCwNCj4gPiArYXJncy4uLikgXA0KPiA+ICsJ cnRlX2xvZyhSVEVfTE9HXyAjIyBsZXZlbCwgcmN1X2xvZ190eXBlLCBcDQo+ID4gKwkJIiVzKCk6 ICIgZm10ICJcbiIsIF9fZnVuY19fLCAjIyBhcmdzKSAjZWxzZSAjZGVmaW5lDQo+ID4gK1JDVV9E UF9MT0cobGV2ZWwsIGZtdCwgYXJncy4uLikgI2VuZGlmDQo+ID4gKw0KPiA+ICsvKiBSZWdpc3Rl cmVkIHRocmVhZCBJRHMgYXJlIHN0b3JlZCBhcyBhIGJpdG1hcCBvZiA2NGIgZWxlbWVudCBhcnJh eS4NCj4gPiArICogR2l2ZW4gdGhyZWFkIGlkIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBpbmRl eCBpbnRvIHRoZSBhcnJheSBhbmQNCj4gPiArICogdGhlIGlkIHdpdGhpbiB0aGUgYXJyYXkgZWxl bWVudC4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNX1NJ WkUgKHNpemVvZih1aW50NjRfdCkgKiA4KQ0KPiAjZGVmaW5lDQo+ID4gK1JURV9RU0JSX1RIUklE X0FSUkFZX1NJWkUobWF4X3RocmVhZHMpIFwNCj4gPiArCVJURV9BTElHTihSVEVfQUxJR05fTVVM X0NFSUwobWF4X3RocmVhZHMsIFwNCj4gPiArCQlSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE1fU0la RSkgPj4gMywNCj4gUlRFX0NBQ0hFX0xJTkVfU0laRSkgI2RlZmluZQ0KPiA+ICtSVEVfUVNCUl9U SFJJRF9BUlJBWV9FTE0odiwgaSkgKCh1aW50NjRfdCAqKSBcDQo+ID4gKwkoKHN0cnVjdCBydGVf cmN1X3FzYnJfY250ICopKHYgKyAxKSArIHYtPm1heF90aHJlYWRzKSArIGkpICNkZWZpbmUNCj4g PiArUlRFX1FTQlJfVEhSSURfSU5ERVhfU0hJRlQgNiAjZGVmaW5lIFJURV9RU0JSX1RIUklEX01B U0sgMHgzZg0KPiAjZGVmaW5lDQo+ID4gK1JURV9RU0JSX1RIUklEX0lOVkFMSUQgMHhmZmZmZmZm Zg0KPiA+ICsNCj4gPiArLyogV29ya2VyIHRocmVhZCBjb3VudGVyICovDQo+ID4gK3N0cnVjdCBy dGVfcmN1X3FzYnJfY250IHsNCj4gPiArCXVpbnQ2NF90IGNudDsNCj4gPiArCS8qKjwgUXVpZXNj ZW50IHN0YXRlIGNvdW50ZXIuIFZhbHVlIDAgaW5kaWNhdGVzIHRoZSB0aHJlYWQgaXMNCj4gPiAr b2ZmbGluZSAqLyB9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJU RV9RU0JSX0NOVF9USFJfT0ZGTElORSAwDQo+ID4gKyNkZWZpbmUgUlRFX1FTQlJfQ05UX0lOSVQg MQ0KPiA+ICsNCj4gPiArLyogUlRFIFF1aWVzY2VudCBTdGF0ZSB2YXJpYWJsZSBzdHJ1Y3R1cmUu DQo+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGhhcyB0d28gZWxlbWVudHMgdGhhdCB2YXJ5IGluIHNp emUgYmFzZWQgb24gdGhlDQo+ID4gKyAqICdtYXhfdGhyZWFkcycgcGFyYW1ldGVyLg0KPiA+ICsg KiAxKSBRdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheQ0KPiA+ICsgKiAyKSBSZWdpc3RlciB0 aHJlYWQgSUQgYXJyYXkNCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnIgew0KPiA+ ICsJdWludDY0X3QgdG9rZW4gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiArCS8qKjwgQ291bnRl ciB0byBhbGxvdyBmb3IgbXVsdGlwbGUgY29uY3VycmVudCBxdWllc2NlbnQgc3RhdGUNCj4gPiAr cXVlcmllcyAqLw0KPiA+ICsNCj4gPiArCXVpbnQzMl90IG51bV9lbGVtcyBfX3J0ZV9jYWNoZV9h bGlnbmVkOw0KPiA+ICsJLyoqPCBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRocmVhZCBJRCBh cnJheSAqLw0KPiA+ICsJdWludDMyX3QgbnVtX3RocmVhZHM7DQo+ID4gKwkvKio8IE51bWJlciBv ZiB0aHJlYWRzIGN1cnJlbnRseSB1c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ID4gKwl1aW50 MzJfdCBtYXhfdGhyZWFkczsNCj4gPiArCS8qKjwgTWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyB1 c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ID4gKw0KPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNi cl9jbnQgcXNicl9jbnRbMF0gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiArCS8qKjwgUXVpZXNj ZW50IHN0YXRlIGNvdW50ZXIgYXJyYXkgb2YgJ21heF90aHJlYWRzJyBlbGVtZW50cyAqLw0KPiA+ ICsNCj4gPiArCS8qKjwgUmVnaXN0ZXJlZCB0aHJlYWQgSURzIGFyZSBzdG9yZWQgaW4gYSBiaXRt YXAgYXJyYXksDQo+ID4gKwkgKiAgIGFmdGVyIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlciBh cnJheS4NCj4gPiArCSAqLw0KPiA+ICt9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQ SSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVy biB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IGEgUXVpZXNjZW50IFN0YXRlDQo+ IHZhcmlhYmxlLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gbWF4X3RocmVhZHMNCj4gPiArICog ICBNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHJlcG9ydGluZyBxdWllc2NlbnQgc3RhdGUgb24g dGhpcw0KPiB2YXJpYWJsZS4NCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIE9uIHN1Y2Nlc3Mg LSBzaXplIG9mIG1lbW9yeSBpbiBieXRlcyByZXF1aXJlZCBmb3IgdGhpcyBRUyB2YXJpYWJsZS4N Cj4gPiArICogICBPbiBlcnJvciAtIDEgd2l0aCBlcnJvciBjb2RlIHNldCBpbiBydGVfZXJybm8u DQo+ID4gKyAqICAgUG9zc2libGUgcnRlX2Vycm5vIGNvZGVzIGFyZToNCj4gPiArICogICAtIEVJ TlZBTCAtIG1heF90aHJlYWRzIGlzIDANCj4gPiArICovDQo+ID4gK3NpemVfdCBfX3J0ZV9leHBl cmltZW50YWwNCj4gPiArcnRlX3JjdV9xc2JyX2dldF9tZW1zaXplKHVpbnQzMl90IG1heF90aHJl YWRzKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBF UklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiAr ICoNCj4gPiArICogSW5pdGlhbGl6ZSBhIFF1aWVzY2VudCBTdGF0ZSAoUVMpIHZhcmlhYmxlLg0K PiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdg0KPiA+ICsgKiAgIFFTIHZhcmlhYmxlDQo+ID4gKyAq IEBwYXJhbSBtYXhfdGhyZWFkcw0KPiA+ICsgKiAgIE1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMg cmVwb3J0aW5nIHF1aWVzY2VudCBzdGF0ZSBvbiB0aGlzDQo+IHZhcmlhYmxlLg0KPiA+ICsgKiAg IFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIHZhbHVlIGFzIHBhc3NlZCB0bw0KPiBydGVfcmN1X3Fz YnJfZ2V0X21lbXNpemUuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBPbiBzdWNjZXNzIC0g MA0KPiA+ICsgKiAgIE9uIGVycm9yIC0gMSB3aXRoIGVycm9yIGNvZGUgc2V0IGluIHJ0ZV9lcnJu by4NCj4gPiArICogICBQb3NzaWJsZSBydGVfZXJybm8gY29kZXMgYXJlOg0KPiA+ICsgKiAgIC0g RUlOVkFMIC0gbWF4X3RocmVhZHMgaXMgMCBvciAndicgaXMgTlVMTC4NCj4gPiArICoNCj4gPiAr ICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9xc2JyX2luaXQo c3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDMyX3QgbWF4X3RocmVhZHMpOw0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZWdp c3RlciBhIHJlYWRlciB0aHJlYWQgdG8gcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUNCj4gPiAr ICogb24gYSBRUyB2YXJpYWJsZS4NCj4gPiArICoNCj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRl ZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4gSXQgaXMgbXVsdGktdGhyZWFkDQo+ID4gKyAqIHNh ZmUuDQo+ID4gKyAqIEFueSByZWFkZXIgdGhyZWFkIHRoYXQgd2FudHMgdG8gcmVwb3J0IGl0cyBx dWllc2NlbnQgc3RhdGUgbXVzdA0KPiA+ICsgKiBjYWxsIHRoaXMgQVBJLiBUaGlzIGNhbiBiZSBj YWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGFzIHBhcnQNCj4gPiArICogb2YgdGhlIHBh Y2tldCBwcm9jZXNzaW5nIGxvb3AuDQo+ID4gKyAqDQo+ID4gKyAqIE5vdGUgdGhhdCBydGVfcmN1 X3FzYnJfdGhyZWFkX29ubGluZSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlDQo+ID4gKyAqIHRo cmVhZCB1cGRhdGVzIGl0cyBxdWllc2NlbnQgc3RhdGUgdXNpbmcgcnRlX3JjdV9xc2JyX3F1aWVz Y2VudC4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHYNCj4gPiArICogICBRUyB2YXJpYWJsZQ0K PiA+ICsgKiBAcGFyYW0gdGhyZWFkX2lkDQo+ID4gKyAqICAgUmVhZGVyIHRocmVhZCB3aXRoIHRo aXMgdGhyZWFkIElEIHdpbGwgcmVwb3J0IGl0cyBxdWllc2NlbnQgc3RhdGUgb24NCj4gPiArICog ICB0aGUgUVMgdmFyaWFibGUuIHRocmVhZF9pZCBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgKG1h eF90aHJlYWRzIC0NCj4gMSkuDQo+ID4gKyAqICAgJ21heF90aHJlYWRzJyBpcyB0aGUgcGFyYW1l dGVyIHBhc3NlZCBpbiAncnRlX3JjdV9xc2JyX2luaXQnIEFQSS4NCj4gPiArICovDQo+ID4gK2lu dCBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArcnRlX3JjdV9xc2JyX3RocmVhZF9yZWdpc3Rlcihz dHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1bnNpZ25lZCBpbnQNCj4gPiArdGhyZWFkX2lkKTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6 IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiArICoNCj4gPiAr ICogUmVtb3ZlIGEgcmVhZGVyIHRocmVhZCwgZnJvbSB0aGUgbGlzdCBvZiB0aHJlYWRzIHJlcG9y dGluZyB0aGVpcg0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUgb24gYSBRUyB2YXJpYWJsZS4NCj4g PiArICoNCj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlv bi4gSXQgaXMgbXVsdGktdGhyZWFkIHNhZmUuDQo+ID4gKyAqIFRoaXMgQVBJIGNhbiBiZSBjYWxs ZWQgZnJvbSB0aGUgcmVhZGVyIHRocmVhZHMgZHVyaW5nIHNodXRkb3duLg0KPiA+ICsgKiBPbmdv aW5nIHF1aWVzY2VudCBzdGF0ZSBxdWVyaWVzIHdpbGwgc3RvcCB3YWl0aW5nIGZvciB0aGUgc3Rh dHVzDQo+ID4gK2Zyb20gdGhpcw0KPiA+ICsgKiB1bnJlZ2lzdGVyZWQgcmVhZGVyIHRocmVhZC4N Cj4gPiArICoNCj4gPiArICogQHBhcmFtIHYNCj4gPiArICogICBRUyB2YXJpYWJsZQ0KPiA+ICsg KiBAcGFyYW0gdGhyZWFkX2lkDQo+ID4gKyAqICAgUmVhZGVyIHRocmVhZCB3aXRoIHRoaXMgdGhy ZWFkIElEIHdpbGwgc3RvcCByZXBvcnRpbmcgaXRzIHF1aWVzY2VudA0KPiA+ICsgKiAgIHN0YXRl IG9uIHRoZSBRUyB2YXJpYWJsZS4NCj4gPiArICovDQo+ID4gK2ludCBfX3J0ZV9leHBlcmltZW50 YWwNCj4gPiArcnRlX3JjdV9xc2JyX3RocmVhZF91bnJlZ2lzdGVyKHN0cnVjdCBydGVfcmN1X3Fz YnIgKnYsIHVuc2lnbmVkIGludA0KPiA+ICt0aHJlYWRfaWQpOw0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBBZGQgYSByZWdpc3Rl cmVkIHJlYWRlciB0aHJlYWQsIHRvIHRoZSBsaXN0IG9mIHRocmVhZHMgcmVwb3J0aW5nDQo+ID4g K3RoZWlyDQo+ID4gKyAqIHF1aWVzY2VudCBzdGF0ZSBvbiBhIFFTIHZhcmlhYmxlLg0KPiA+ICsg Kg0KPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVlIGZ1bmN0aW9uLiBJ dCBpcyBtdWx0aS10aHJlYWQNCj4gPiArICogc2FmZS4NCj4gPiArICoNCj4gPiArICogQW55IHJl Z2lzdGVyZWQgcmVhZGVyIHRocmVhZCB0aGF0IHdhbnRzIHRvIHJlcG9ydCBpdHMgcXVpZXNjZW50 DQo+ID4gK3N0YXRlIG11c3QNCj4gPiArICogY2FsbCB0aGlzIEFQSSBiZWZvcmUgY2FsbGluZyBy dGVfcmN1X3FzYnJfcXVpZXNjZW50LiBUaGlzIGNhbiBiZQ0KPiA+ICtjYWxsZWQNCj4gPiArICog ZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIGFzIHBhcnQgb2YgdGhlIHBhY2tldCBwcm9jZXNzaW5n IGxvb3AuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSByZWFkZXIgdGhyZWFkIG11c3QgY2FsbCBydGVf cmN1X3RocmVhZF9vZmZsaW5lIEFQSSwgYmVmb3JlDQo+ID4gKyAqIGNhbGxpbmcgYW55IGZ1bmN0 aW9ucyB0aGF0IGJsb2NrLCB0byBlbnN1cmUgdGhhdA0KPiA+ICtydGVfcmN1X3FzYnJfY2hlY2sN Cj4gPiArICogQVBJIGRvZXMgbm90IHdhaXQgaW5kZWZpbml0ZWx5IGZvciB0aGUgcmVhZGVyIHRo cmVhZCB0byB1cGRhdGUgaXRzIFFTLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgcmVhZGVyIHRocmVh ZCBtdXN0IGNhbGwgcnRlX3JjdV90aHJlYWRfb25saW5lIEFQSSwgYWZ0ZXIgdGhlDQo+ID4gK2Js b2NraW5nDQo+ID4gKyAqIGZ1bmN0aW9uIGNhbGwgcmV0dXJucywgdG8gZW5zdXJlIHRoYXQgcnRl X3JjdV9xc2JyX2NoZWNrIEFQSQ0KPiA+ICsgKiB3YWl0cyBmb3IgdGhlIHJlYWRlciB0aHJlYWQg dG8gdXBkYXRlIGl0cyBxdWllc2NlbnQgc3RhdGUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSB2 DQo+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiArICogQHBhcmFtIHRocmVhZF9pZA0KPiA+ICsg KiAgIFJlYWRlciB0aHJlYWQgd2l0aCB0aGlzIHRocmVhZCBJRCB3aWxsIHJlcG9ydCBpdHMgcXVp ZXNjZW50IHN0YXRlIG9uDQo+ID4gKyAqICAgdGhlIFFTIHZhcmlhYmxlLg0KPiA+ICsgKi8NCj4g PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3J0ZV9leHBlcmltZW50YWwNCj4g PiArcnRlX3JjdV9xc2JyX3RocmVhZF9vbmxpbmUoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdW5z aWduZWQgaW50DQo+ID4gK3RocmVhZF9pZCkNCj4gDQo+IEkgYW0gbm90IGNsZWFyIG9uIHdoeSB0 aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbmxpbmUuICBPciBkbyB5b3UgaGF2ZSB1c2UNCj4gY2Fz ZXMgd2hlcmUgdGhyZWFkcyBnbyBvZmZsaW5lIGFuZCBjb21lIGJhY2sgb25saW5lIGV4dHJlbWVs eSBmcmVxdWVudGx5Pw0KWWVzLCB0aGVyZSBhcmUgdXNlIGNhc2VzIHdoZXJlIHRoZSBmdW5jdGlv biBjYWxsIHRvIHJlY2VpdmUgdGhlIHBhY2tldHMgY2FuIGJsb2NrLg0KDQo+IA0KPiA+ICt7DQo+ ID4gKwl1aW50NjRfdCB0Ow0KPiA+ICsNCj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMICYmIHRo cmVhZF9pZCA8IHYtPm1heF90aHJlYWRzKTsNCj4gPiArDQo+ID4gKwkvKiBDb3B5IHRoZSBjdXJy ZW50IHZhbHVlIG9mIHRva2VuLg0KPiA+ICsJICogVGhlIGZlbmNlIGF0IHRoZSBlbmQgb2YgdGhl IGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQNCj4gPiArCSAqIHRoZSBmb2xsb3dpbmcgd2lsbCBu b3QgbW92ZSBkb3duIGFmdGVyIHRoZSBsb2FkIG9mIGFueSBzaGFyZWQNCj4gPiArCSAqIGRhdGEg c3RydWN0dXJlLg0KPiA+ICsJICovDQo+ID4gKwl0ID0gX19hdG9taWNfbG9hZF9uKCZ2LT50b2tl biwgX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gKw0KPiA+ICsJLyogX19hdG9taWNfc3RvcmVfbihj bnQsIF9fQVRPTUlDX1JFTEFYRUQpIGlzIHVzZWQgdG8gZW5zdXJlDQo+ID4gKwkgKiAnY250JyAo NjRiKSBpcyBhY2Nlc3NlZCBhdG9taWNhbGx5Lg0KPiA+ICsJICovDQo+ID4gKwlfX2F0b21pY19z dG9yZV9uKCZ2LT5xc2JyX2NudFt0aHJlYWRfaWRdLmNudCwNCj4gPiArCQl0LCBfX0FUT01JQ19S RUxBWEVEKTsNCj4gPiArDQo+ID4gKwkvKiBUaGUgc3Vic2VxdWVudCBsb2FkIG9mIHRoZSBkYXRh IHN0cnVjdHVyZSBzaG91bGQgbm90DQo+ID4gKwkgKiBtb3ZlIGFib3ZlIHRoZSBzdG9yZS4gSGVu Y2UgYSBzdG9yZS1sb2FkIGJhcnJpZXINCj4gPiArCSAqIGlzIHJlcXVpcmVkLg0KPiA+ICsJICog SWYgdGhlIGxvYWQgb2YgdGhlIGRhdGEgc3RydWN0dXJlIG1vdmVzIGFib3ZlIHRoZSBzdG9yZSwN Cj4gPiArCSAqIHdyaXRlciBtaWdodCBub3Qgc2VlIHRoYXQgdGhlIHJlYWRlciBpcyBvbmxpbmUs IGV2ZW4gdGhvdWdoDQo+ID4gKwkgKiB0aGUgcmVhZGVyIGlzIHJlZmVyZW5jaW5nIHRoZSBzaGFy ZWQgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4gKwkgKi8NCj4gPiArI2lmZGVmIFJURV9BUkNIX1g4Nl82 NA0KPiA+ICsJLyogcnRlX3NtcF9tYigpIGZvciB4ODYgaXMgbGlnaHRlciAqLw0KPiA+ICsJcnRl X3NtcF9tYigpOw0KPiA+ICsjZWxzZQ0KPiA+ICsJX19hdG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRP TUlDX1NFUV9DU1QpOw0KPiA+ICsjZW5kaWYNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZW1vdmUgYSByZWdpc3Rl cmVkIHJlYWRlciB0aHJlYWQgZnJvbSB0aGUgbGlzdCBvZiB0aHJlYWRzDQo+ID4gK3JlcG9ydGlu ZyB0aGVpcg0KPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUgb24gYSBRUyB2YXJpYWJsZS4NCj4gPiAr ICoNCj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4g SXQgaXMgbXVsdGktdGhyZWFkDQo+ID4gKyAqIHNhZmUuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMg Y2FuIGJlIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3IgYXMgcGFydCBvZiB0aGUgcGFj a2V0DQo+ID4gKyAqIHByb2Nlc3NpbmcgbG9vcC4NCj4gPiArICoNCj4gPiArICogVGhlIHJlYWRl ciB0aHJlYWQgbXVzdCBjYWxsIHJ0ZV9yY3VfdGhyZWFkX29mZmxpbmUgQVBJLCBiZWZvcmUNCj4g PiArICogY2FsbGluZyBhbnkgZnVuY3Rpb25zIHRoYXQgYmxvY2ssIHRvIGVuc3VyZSB0aGF0DQo+ ID4gK3J0ZV9yY3VfcXNicl9jaGVjaw0KPiA+ICsgKiBBUEkgZG9lcyBub3Qgd2FpdCBpbmRlZmlu aXRlbHkgZm9yIHRoZSByZWFkZXIgdGhyZWFkIHRvIHVwZGF0ZSBpdHMgUVMuDQo+ID4gKyAqDQo+ ID4gKyAqIEBwYXJhbSB2DQo+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiArICogQHBhcmFtIHRo cmVhZF9pZA0KPiA+ICsgKiAgIHJ0ZV9yY3VfcXNicl9jaGVjayBBUEkgd2lsbCBub3Qgd2FpdCBm b3IgdGhlIHJlYWRlciB0aHJlYWQgd2l0aA0KPiA+ICsgKiAgIHRoaXMgdGhyZWFkIElEIHRvIHJl cG9ydCBpdHMgcXVpZXNjZW50IHN0YXRlIG9uIHRoZSBRUyB2YXJpYWJsZS4NCj4gPiArICovDQo+ ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQgX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gK3J0ZV9yY3VfcXNicl90aHJlYWRfb2ZmbGluZShzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1 bnNpZ25lZCBpbnQNCj4gPiArdGhyZWFkX2lkKQ0KPiANCj4gU2FtZSBoZXJlIG9uIGlubGluaW5n Lg0KPiANCj4gPiArew0KPiA+ICsJUlRFX0FTU0VSVCh2ICE9IE5VTEwgJiYgdGhyZWFkX2lkIDwg di0+bWF4X3RocmVhZHMpOw0KPiA+ICsNCj4gPiArCS8qIFRoZSByZWFkZXIgY2FuIGdvIG9mZmxp bmUgb25seSBhZnRlciB0aGUgbG9hZCBvZiB0aGUNCj4gPiArCSAqIGRhdGEgc3RydWN0dXJlIGlz IGNvbXBsZXRlZC4gaS5lLiBhbnkgbG9hZCBvZiB0aGUNCj4gPiArCSAqIGRhdGEgc3RyY3R1cmUg Y2FuIG5vdCBtb3ZlIGFmdGVyIHRoaXMgc3RvcmUuDQo+ID4gKwkgKi8NCj4gPiArDQo+ID4gKwlf X2F0b21pY19zdG9yZV9uKCZ2LT5xc2JyX2NudFt0aHJlYWRfaWRdLmNudCwNCj4gPiArCQlSVEVf UVNCUl9DTlRfVEhSX09GRkxJTkUsIF9fQVRPTUlDX1JFTEVBU0UpOyB9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEFzayB0aGUg cmVhZGVyIHRocmVhZHMgdG8gcmVwb3J0IHRoZSBxdWllc2NlbnQgc3RhdGUNCj4gPiArICogc3Rh dHVzLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbG9jay1mcmVl IGZ1bmN0aW9uLiBJdCBpcyBtdWx0aS10aHJlYWQNCj4gPiArICogc2FmZSBhbmQgY2FuIGJlIGNh bGxlZCBmcm9tIHdvcmtlciB0aHJlYWRzLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdg0KPiA+ ICsgKiAgIFFTIHZhcmlhYmxlDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIFRoaXMgaXMg dGhlIHRva2VuIGZvciB0aGlzIGNhbGwgb2YgdGhlIEFQSS4gVGhpcyBzaG91bGQgYmUNCj4gPiAr ICogICAgIHBhc3NlZCB0byBydGVfcmN1X3FzYnJfY2hlY2sgQVBJLg0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QgX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gK3J0ZV9yY3VfcXNicl9zdGFydChzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2KSB7DQo+ID4gKwl1 aW50NjRfdCB0Ow0KPiA+ICsNCj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMKTsNCj4gPiArDQo+ ID4gKwkvKiBSZWxlYXNlIHRoZSBjaGFuZ2VzIHRvIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUu DQo+ID4gKwkgKiBUaGlzIHN0b3JlIHJlbGVhc2Ugd2lsbCBlbnN1cmUgdGhhdCBjaGFuZ2VzIHRv IGFueSBkYXRhDQo+ID4gKwkgKiBzdHJ1Y3R1cmUgYXJlIHZpc2libGUgdG8gdGhlIHdvcmtlcnMg YmVmb3JlIHRoZSB0b2tlbg0KPiA+ICsJICogdXBkYXRlIGlzIHZpc2libGUuDQo+ID4gKwkgKi8N Cj4gPiArCXQgPSBfX2F0b21pY19hZGRfZmV0Y2goJnYtPnRva2VuLCAxLCBfX0FUT01JQ19SRUxF QVNFKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBVcGRhdGUgcXVpZXNj ZW50IHN0YXRlIGZvciBhIHJlYWRlciB0aHJlYWQuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgaXMg aW1wbGVtZW50ZWQgYXMgYSBsb2NrLWZyZWUgZnVuY3Rpb24uIEl0IGlzIG11bHRpLXRocmVhZCBz YWZlLg0KPiA+ICsgKiBBbGwgdGhlIHJlYWRlciB0aHJlYWRzIHJlZ2lzdGVyZWQgdG8gcmVwb3J0 IHRoZWlyIHF1aWVzY2VudCBzdGF0ZQ0KPiA+ICsgKiBvbiB0aGUgUVMgdmFyaWFibGUgbXVzdCBj YWxsIHRoaXMgQVBJLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gdg0KPiA+ICsgKiAgIFFTIHZh cmlhYmxlDQo+ID4gKyAqIEBwYXJhbSB0aHJlYWRfaWQNCj4gPiArICogICBVcGRhdGUgdGhlIHF1 aWVzY2VudCBzdGF0ZSBmb3IgdGhlIHJlYWRlciB3aXRoIHRoaXMgdGhyZWFkIElELg0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3J0ZV9leHBlcmltZW50 YWwNCj4gPiArcnRlX3JjdV9xc2JyX3F1aWVzY2VudChzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1 bnNpZ25lZCBpbnQNCj4gPiArdGhyZWFkX2lkKSB7DQo+ID4gKwl1aW50NjRfdCB0Ow0KPiA+ICsN Cj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMICYmIHRocmVhZF9pZCA8IHYtPm1heF90aHJlYWRz KTsNCj4gPiArDQo+ID4gKwkvKiBBY3F1aXJlIHRoZSBjaGFuZ2VzIHRvIHRoZSBzaGFyZWQgZGF0 YSBzdHJ1Y3R1cmUgcmVsZWFzZWQNCj4gPiArCSAqIGJ5IHJ0ZV9yY3VfcXNicl9zdGFydC4NCj4g PiArCSAqIExhdGVyIGxvYWRzIG9mIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgc2hvdWxkIG5v dCBtb3ZlDQo+ID4gKwkgKiBhYm92ZSB0aGlzIGxvYWQuIEhlbmNlLCB1c2UgbG9hZC1hY3F1aXJl Lg0KPiA+ICsJICovDQo+ID4gKwl0ID0gX19hdG9taWNfbG9hZF9uKCZ2LT50b2tlbiwgX19BVE9N SUNfQUNRVUlSRSk7DQo+ID4gKw0KPiA+ICsJLyogSW5mb3JtIHRoZSB3cml0ZXIgdGhhdCB1cGRh dGVzIGFyZSB2aXNpYmxlIHRvIHRoaXMgcmVhZGVyLg0KPiA+ICsJICogUHJpb3IgbG9hZHMgb2Yg dGhlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBzaG91bGQgbm90IG1vdmUNCj4gPiArCSAqIGJleW9u ZCB0aGlzIHN0b3JlLiBIZW5jZSB1c2Ugc3RvcmUtcmVsZWFzZS4NCj4gPiArCSAqLw0KPiA+ICsJ X19hdG9taWNfc3RvcmVfbigmdi0+cXNicl9jbnRbdGhyZWFkX2lkXS5jbnQsDQo+ID4gKwkJCSB0 LCBfX0FUT01JQ19SRUxFQVNFKTsNCj4gPiArDQo+ID4gKwlSQ1VfRFBfTE9HKERFQlVHLCAiJXM6 IHVwZGF0ZTogdG9rZW4gPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiArCQlfX2Z1bmNfXywg dCwgdGhyZWFkX2lkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogQ2hlY2sgdGhlIHF1aWVzY2Vu dCBzdGF0ZSBjb3VudGVyIGZvciByZWdpc3RlcmVkIHRocmVhZHMgb25seSwNCj4gPiArYXNzdW1p bmcNCj4gPiArICogdGhhdCBub3QgYWxsIHRocmVhZHMgaGF2ZSByZWdpc3RlcmVkLg0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50DQo+ID4gK19fcmN1X3FzYnJf Y2hlY2tfc2VsZWN0aXZlKHN0cnVjdCBydGVfcmN1X3FzYnIgKnYsIHVpbnQ2NF90IHQsIGJvb2wN Cj4gPiArd2FpdCkgew0KPiA+ICsJdWludDMyX3QgaSwgaiwgaWQ7DQo+ID4gKwl1aW50NjRfdCBi bWFwOw0KPiA+ICsJdWludDY0X3QgYzsNCj4gPiArCXVpbnQ2NF90ICpyZWdfdGhyZWFkX2lkOw0K PiA+ICsNCj4gPiArCWZvciAoaSA9IDAsIHJlZ190aHJlYWRfaWQgPSBSVEVfUVNCUl9USFJJRF9B UlJBWV9FTE0odiwgMCk7DQo+ID4gKwkJaSA8IHYtPm51bV9lbGVtczsNCj4gPiArCQlpKyssIHJl Z190aHJlYWRfaWQrKykgew0KPiA+ICsJCS8qIExvYWQgdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCB0 aHJlYWQgYml0IG1hcCBiZWZvcmUNCj4gPiArCQkgKiBsb2FkaW5nIHRoZSByZWFkZXIgdGhyZWFk IHF1aWVzY2VudCBzdGF0ZSBjb3VudGVycy4NCj4gPiArCQkgKi8NCj4gPiArCQlibWFwID0gX19h dG9taWNfbG9hZF9uKHJlZ190aHJlYWRfaWQsDQo+IF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ICsJ CWlkID0gaSA8PCBSVEVfUVNCUl9USFJJRF9JTkRFWF9TSElGVDsNCj4gPiArDQo+ID4gKwkJd2hp bGUgKGJtYXApIHsNCj4gPiArCQkJaiA9IF9fYnVpbHRpbl9jdHpsKGJtYXApOw0KPiA+ICsJCQlS Q1VfRFBfTE9HKERFQlVHLA0KPiA+ICsJCQkJIiVzOiBjaGVjazogdG9rZW4gPSAlbHUsIHdhaXQg PSAlZCwgQml0IE1hcA0KPiA9IDB4JWx4LCBUaHJlYWQgSUQgPSAlZCIsDQo+ID4gKwkJCQlfX2Z1 bmNfXywgdCwgd2FpdCwgYm1hcCwgaWQgKyBqKTsNCj4gPiArCQkJYyA9IF9fYXRvbWljX2xvYWRf bigNCj4gPiArCQkJCQkmdi0+cXNicl9jbnRbaWQgKyBqXS5jbnQsDQo+ID4gKwkJCQkJX19BVE9N SUNfQUNRVUlSRSk7DQo+ID4gKwkJCVJDVV9EUF9MT0coREVCVUcsDQo+ID4gKwkJCQkiJXM6IHN0 YXR1czogdG9rZW4gPSAlbHUsIHdhaXQgPSAlZCwgVGhyZWFkDQo+IFFTIGNudCA9ICVsdSwgVGhy ZWFkIElEID0gJWQiLA0KPiA+ICsJCQkJX19mdW5jX18sIHQsIHdhaXQsIGMsIGlkK2opOw0KPiA+ ICsJCQkvKiBDb3VudGVyIGlzIG5vdCBjaGVja2VkIGZvciB3cmFwLWFyb3VuZA0KPiBjb25kaXRp b24NCj4gPiArCQkJICogYXMgaXQgaXMgYSA2NGIgY291bnRlci4NCj4gPiArCQkJICovDQo+ID4g KwkJCWlmICh1bmxpa2VseShjICE9IFJURV9RU0JSX0NOVF9USFJfT0ZGTElORSAmJiBjDQo+IDwg dCkpIHsNCj4gDQo+IFRoaXMgYXNzdW1lcyB0aGF0IGEgNjQtYml0IGNvdW50ZXIgd29uJ3Qgb3Zl cmZsb3csIHdoaWNoIGlzIGNsb3NlIGVub3VnaA0KPiB0byB0cnVlIGdpdmVuIGN1cnJlbnQgQ1BV IGNsb2NrIGZyZXF1ZW5jaWVzLiAgOy0pDQo+IA0KPiA+ICsJCQkJLyogVGhpcyB0aHJlYWQgaXMg bm90IGluIHF1aWVzY2VudCBzdGF0ZSAqLw0KPiA+ICsJCQkJaWYgKCF3YWl0KQ0KPiA+ICsJCQkJ CXJldHVybiAwOw0KPiA+ICsNCj4gPiArCQkJCXJ0ZV9wYXVzZSgpOw0KPiA+ICsJCQkJLyogVGhp cyB0aHJlYWQgbWlnaHQgaGF2ZSB1bnJlZ2lzdGVyZWQuDQo+ID4gKwkJCQkgKiBSZS1yZWFkIHRo ZSBiaXRtYXAuDQo+ID4gKwkJCQkgKi8NCj4gPiArCQkJCWJtYXAgPSBfX2F0b21pY19sb2FkX24o cmVnX3RocmVhZF9pZCwNCj4gPiArCQkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4gKw0KPiA+ ICsJCQkJY29udGludWU7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCWJtYXAgJj0gfigxVUwg PDwgaik7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAxOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKiBDaGVjayB0aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgZm9yIGFs bCB0aHJlYWRzLCBhc3N1bWluZyB0aGF0DQo+ID4gKyAqIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJl Z2lzdGVyZWQuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQN Cj4gPiArX19yY3VfcXNicl9jaGVja19hbGwoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDY0 X3QgdCwgYm9vbCB3YWl0KQ0KPiANCj4gRG9lcyBjaGVja2luZyB0aGUgYml0bWFwIHJlYWxseSB0 YWtlIGxvbmcgZW5vdWdoIHRvIG1ha2UgdGhpcyB3b3J0aHdoaWxlDQo+IGFzIGEgc2VwYXJhdGUg ZnVuY3Rpb24/ICBJIHdvdWxkIHRoaW5rIHRoYXQgdGhlIGJpdG1hcC1jaGVja2luZyB0aW1lDQo+ IHdvdWxkIGJlIGxvc3QgaW4gdGhlIG5vaXNlIG9mIGNhY2hlIG1pc3NlcyBmcm9tIHRoZSAtPmNu dCBsb2Fkcy4NCkl0IGF2b2lkcyBhY2Nlc3Npbmcgb25lIGNhY2hlIGxpbmUuIEkgdGhpbmsgdGhp cyBpcyB3aGVyZSB0aGUgc2F2aW5ncyBhcmUgKG1heSBiZSBpbiB0aGVvcnkpLiBUaGlzIGlzIHRo ZSBtb3N0IHByb2JhYmxlIHVzZSBjYXNlLg0KT24gdGhlIG90aGVyIGhhbmQsIF9fcmN1X3FzYnJf Y2hlY2tfc2VsZWN0aXZlKCkgd2lsbCByZXN1bHQgaW4gc2F2aW5ncyAoZGVwZW5kaW5nIG9uIGhv dyBtYW55IHRocmVhZHMgYXJlIGN1cnJlbnRseSByZWdpc3RlcmVkKSBieSBhdm9pZGluZyBhY2Nl c3NpbmcgdW53YW50ZWQgY291bnRlcnMuDQoNCj4gDQo+IFN1cmUsIGlmIHlvdSBpbnZva2UgX19y Y3VfcXNicl9jaGVja19zZWxlY3RpdmUoKSBpbiBhIHRpZ2h0IGxvb3AgaW4gdGhlDQo+IGFic2Vu Y2Ugb2YgcmVhZGVycywgeW91IG1pZ2h0IHNlZSBfX3JjdV9xc2JyX2NoZWNrX2FsbCgpIGJlaW5n IGEgYml0DQo+IGZhc3Rlci4gIEJ1dCBpcyB0aGF0IHJlYWxseSB3aGF0IERQREsgZG9lcz8NCkkg c2VlIGltcHJvdmVtZW50cyBpbiB0aGUgc3ludGhldGljIHRlc3QgY2FzZSAoc2ltaWxhciB0byB0 aGUgb25lIHlvdSBoYXZlIGRlc2NyaWJlZCwgYXJvdW5kIDI3JSkuIEhvd2V2ZXIsIGluIHRoZSBt b3JlIHByYWN0aWNhbCB0ZXN0IGNhc2VzIEkgZG8gbm90IHNlZSBhbnkgZGlmZmVyZW5jZS4NCiAN Cj4gDQo+ID4gK3sNCj4gPiArCXVpbnQzMl90IGk7DQo+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2Jy X2NudCAqY250Ow0KPiA+ICsJdWludDY0X3QgYzsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwLCBj bnQgPSB2LT5xc2JyX2NudDsgaSA8IHYtPm1heF90aHJlYWRzOyBpKyssIGNudCsrKSB7DQo+ID4g KwkJUkNVX0RQX0xPRyhERUJVRywNCj4gPiArCQkJIiVzOiBjaGVjazogdG9rZW4gPSAlbHUsIHdh aXQgPSAlZCwgVGhyZWFkIElEID0gJWQiLA0KPiA+ICsJCQlfX2Z1bmNfXywgdCwgd2FpdCwgaSk7 DQo+ID4gKwkJd2hpbGUgKDEpIHsNCj4gPiArCQkJYyA9IF9fYXRvbWljX2xvYWRfbigmY250LT5j bnQsDQo+IF9fQVRPTUlDX0FDUVVJUkUpOw0KPiA+ICsJCQlSQ1VfRFBfTE9HKERFQlVHLA0KPiA+ ICsJCQkJIiVzOiBzdGF0dXM6IHRva2VuID0gJWx1LCB3YWl0ID0gJWQsIFRocmVhZA0KPiBRUyBj bnQgPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiArCQkJCV9fZnVuY19fLCB0LCB3YWl0LCBj LCBpKTsNCj4gPiArCQkJLyogQ291bnRlciBpcyBub3QgY2hlY2tlZCBmb3Igd3JhcC1hcm91bmQN Cj4gY29uZGl0aW9uDQo+ID4gKwkJCSAqIGFzIGl0IGlzIGEgNjRiIGNvdW50ZXIuDQo+ID4gKwkJ CSAqLw0KPiA+ICsJCQlpZiAobGlrZWx5KGMgPT0gUlRFX1FTQlJfQ05UX1RIUl9PRkZMSU5FIHx8 IGMgPj0NCj4gdCkpDQo+ID4gKwkJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJCS8qIFRoaXMgdGhy ZWFkIGlzIG5vdCBpbiBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiArCQkJaWYgKCF3YWl0KQ0KPiA+ ICsJCQkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJCQlydGVfcGF1c2UoKTsNCj4gPiArCQl9DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDE7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiArICoNCj4gPiArICogQ2hlY2tzIGlmIGFs bCB0aGUgcmVhZGVyIHRocmVhZHMgaGF2ZSBlbnRlcmVkIHRoZSBxdWllc2NlbnQgc3RhdGUNCj4g PiArICogcmVmZXJlbmNlZCBieSB0b2tlbi4NCj4gPiArICoNCj4gPiArICogVGhpcyBpcyBpbXBs ZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4gSXQgaXMgbXVsdGktdGhyZWFkDQo+ID4g KyAqIHNhZmUgYW5kIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZHMgYXMgd2Vs bC4NCj4gPiArICoNCj4gPiArICogSWYgdGhpcyBBUEkgaXMgY2FsbGVkIHdpdGggJ3dhaXQnIHNl dCB0byB0cnVlLCB0aGUgZm9sbG93aW5nDQo+ID4gKyAqIGZhY3RvcnMgbXVzdCBiZSBjb25zaWRl cmVkOg0KPiA+ICsgKg0KPiA+ICsgKiAxKSBJZiB0aGUgY2FsbGluZyB0aHJlYWQgaXMgYWxzbyBy ZXBvcnRpbmcgdGhlIHN0YXR1cyBvbiB0aGUNCj4gPiArICogc2FtZSBRUyB2YXJpYWJsZSwgaXQg bXVzdCB1cGRhdGUgdGhlIHF1aWVzY2VudCBzdGF0ZSBzdGF0dXMsDQo+ID4gK2JlZm9yZQ0KPiA+ ICsgKiBjYWxsaW5nIHRoaXMgQVBJLg0KPiA+ICsgKg0KPiA+ICsgKiAyKSBJbiBhZGRpdGlvbiwg d2hpbGUgY2FsbGluZyBmcm9tIG11bHRpcGxlIHRocmVhZHMsIG9ubHkNCj4gPiArICogb25lIG9m IHRob3NlIHRocmVhZHMgY2FuIGJlIHJlcG9ydGluZyB0aGUgcXVpZXNjZW50IHN0YXRlIHN0YXR1 cw0KPiA+ICsgKiBvbiBhIGdpdmVuIFFTIHZhcmlhYmxlLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFy YW0gdg0KPiA+ICsgKiAgIFFTIHZhcmlhYmxlDQo+ID4gKyAqIEBwYXJhbSB0DQo+ID4gKyAqICAg VG9rZW4gcmV0dXJuZWQgYnkgcnRlX3JjdV9xc2JyX3N0YXJ0IEFQSQ0KPiA+ICsgKiBAcGFyYW0g d2FpdA0KPiA+ICsgKiAgIElmIHRydWUsIGJsb2NrIHRpbGwgYWxsIHRoZSByZWFkZXIgdGhyZWFk cyBoYXZlIGNvbXBsZXRlZCBlbnRlcmluZw0KPiA+ICsgKiAgIHRoZSBxdWllc2NlbnQgc3RhdGUg cmVmZXJlbmNlZCBieSB0b2tlbiAndCcuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAtIDAg aWYgYWxsIHJlYWRlciB0aHJlYWRzIGhhdmUgTk9UIHBhc3NlZCB0aHJvdWdoIHNwZWNpZmllZCBu dW1iZXINCj4gPiArICogICAgIG9mIHF1aWVzY2VudCBzdGF0ZXMuDQo+ID4gKyAqICAgLSAxIGlm IGFsbCByZWFkZXIgdGhyZWFkcyBoYXZlIHBhc3NlZCB0aHJvdWdoIHNwZWNpZmllZCBudW1iZXIN Cj4gPiArICogICAgIG9mIHF1aWVzY2VudCBzdGF0ZXMuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg X19ydGVfYWx3YXlzX2lubGluZSBpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3J0ZV9yY3Vf cXNicl9jaGVjayhzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LCB1aW50NjRfdCB0LCBib29sIHdhaXQp IHsNCj4gPiArCVJURV9BU1NFUlQodiAhPSBOVUxMKTsNCj4gPiArDQo+ID4gKwlpZiAobGlrZWx5 KHYtPm51bV90aHJlYWRzID09IHYtPm1heF90aHJlYWRzKSkNCj4gPiArCQlyZXR1cm4gX19yY3Vf cXNicl9jaGVja19hbGwodiwgdCwgd2FpdCk7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmV0dXJuIF9f cmN1X3FzYnJfY2hlY2tfc2VsZWN0aXZlKHYsIHQsIHdhaXQpOyB9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIFdhaXQgdGlsbCB0 aGUgcmVhZGVyIHRocmVhZHMgaGF2ZSBlbnRlcmVkIHF1aWVzY2VudCBzdGF0ZS4NCj4gPiArICoN Cj4gPiArICogVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGxvY2stZnJlZSBmdW5jdGlvbi4gSXQg aXMgbXVsdGktdGhyZWFkIHNhZmUuDQo+ID4gKyAqIFRoaXMgQVBJIGNhbiBiZSB0aG91Z2h0IG9m IGFzIGEgd3JhcHBlciBhcm91bmQgcnRlX3JjdV9xc2JyX3N0YXJ0DQo+ID4gK2FuZA0KPiA+ICsg KiBydGVfcmN1X3FzYnJfY2hlY2sgQVBJcy4NCj4gPiArICoNCj4gPiArICogSWYgdGhpcyBBUEkg aXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgb25seSBvbmUgb2YNCj4gPiArICogdGhv c2UgdGhyZWFkcyBjYW4gYmUgcmVwb3J0aW5nIHRoZSBxdWllc2NlbnQgc3RhdGUgc3RhdHVzIG9u IGENCj4gPiArICogZ2l2ZW4gUVMgdmFyaWFibGUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSB2 DQo+ID4gKyAqICAgUVMgdmFyaWFibGUNCj4gPiArICogQHBhcmFtIHRocmVhZF9pZA0KPiA+ICsg KiAgIFRocmVhZCBJRCBvZiB0aGUgY2FsbGVyIGlmIGl0IGlzIHJlZ2lzdGVyZWQgdG8gcmVwb3J0 IHF1aWVzY2VudCBzdGF0ZQ0KPiA+ICsgKiAgIG9uIHRoaXMgUVMgdmFyaWFibGUgKGkuZS4gdGhl IGNhbGxpbmcgdGhyZWFkIGlzIGFsc28gcGFydCBvZiB0aGUNCj4gPiArICogICByZWFkc2lkZSBj cml0aWNhbCBzZWN0aW9uKS4gSWYgbm90LCBwYXNzIFJURV9RU0JSX1RIUklEX0lOVkFMSUQuDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkIF9fcnRlX2V4cGVy aW1lbnRhbA0KPiA+ICtydGVfcmN1X3FzYnJfc3luY2hyb25pemUoc3RydWN0IHJ0ZV9yY3VfcXNi ciAqdiwgdW5zaWduZWQgaW50DQo+ID4gK3RocmVhZF9pZCkgew0KPiA+ICsJdWludDY0X3QgdDsN Cj4gPiArDQo+ID4gKwlSVEVfQVNTRVJUKHYgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsJdCA9IHJ0 ZV9yY3VfcXNicl9zdGFydCh2KTsNCj4gPiArDQo+ID4gKwkvKiBJZiB0aGUgY3VycmVudCB0aHJl YWQgaGFzIHJlYWRzaWRlIGNyaXRpY2FsIHNlY3Rpb24sDQo+ID4gKwkgKiB1cGRhdGUgaXRzIHF1 aWVzY2VudCBzdGF0ZSBzdGF0dXMuDQo+ID4gKwkgKi8NCj4gPiArCWlmICh0aHJlYWRfaWQgIT0g UlRFX1FTQlJfVEhSSURfSU5WQUxJRCkNCj4gPiArCQlydGVfcmN1X3FzYnJfcXVpZXNjZW50KHYs IHRocmVhZF9pZCk7DQo+ID4gKw0KPiA+ICsJLyogV2FpdCBmb3Igb3RoZXIgcmVhZGVycyB0byBl bnRlciBxdWllc2NlbnQgc3RhdGUgKi8NCj4gPiArCXJ0ZV9yY3VfcXNicl9jaGVjayh2LCB0LCB0 cnVlKTsNCj4gDQo+IEFuZCB5b3UgYXJlIHByZXN1bWFibHkgcmVseWluZyBvbiA2NC1iaXQgY291 bnRlcnMgdG8gYXZvaWQgdGhlIG5lZWQgdG8NCj4gZXhlY3V0ZSB0aGUgYWJvdmUgY29kZSB0d2lj ZSBpbiBzdWNjZXNzaW9uLiAgV2hpY2ggYWdhaW4gd29ya3MgZ2l2ZW4NCj4gY3VycmVudCBDUFUg Y2xvY2sgcmF0ZXMgY29tYmluZWQgd2l0aCBzeXN0ZW0gYW5kIGh1bWFuIGxpZmVzcGFucy4NCj4g T3RoZXJ3aXNlLCB0aGVyZSBhcmUgaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zIHRoYXQgY2Fu IGhhcHBlbiwgc28gZG9uJ3QNCj4gdHJ5IHRoaXMgd2l0aCBhIDMyLWJpdCBjb3VudGVyISEhDQpZ ZXMuIEkgYW0gcmVseWluZyBvbiA2NC1iaXQgY291bnRlcnMgdG8gYXZvaWQgaGF2aW5nIHRvIHNw ZW5kIGN5Y2xlcyAoYW5kIHRpbWUpLg0KDQo+IA0KPiAoQnV0IHRoaW5rIG9mIHRoZSBncmVhdF5O IGdyYW5kY2hpbGRyZW4hISEpDQooSXQgaXMgYW4gaW50ZXJlc3RpbmcgdGhvdWdodC4gSSB3b25k ZXIgd2hhdCB3b3VsZCBoYXBwZW4gdG8gYWxsIHRoZSBjb2RlIHdlIGFyZSB3cml0aW5nIHRvZGF5 IPCfmIopDQoNCj4gDQo+IE1vcmUgc2VyaW91c2x5LCBhIGNvbW1lbnQgd2FybmluZyBwZW9wbGUg bm90IHRvIG1ha2UgdGhlIGNvdW50ZXIgYmUgMzINCj4gYml0cyBpcyBpbiBvcmRlci4NCkFncmVl LCBJIHdpbGwgYWRkIGl0IGluIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4NCg0KPiANCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1F TlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ICsgKg0K PiA+ICsgKiBEdW1wIHRoZSBkZXRhaWxzIG9mIGEgc2luZ2xlIFFTIHZhcmlhYmxlcyB0byBhIGZp bGUuDQo+ID4gKyAqDQo+ID4gKyAqIEl0IGlzIE5PVCBtdWx0aS10aHJlYWQgc2FmZS4NCj4gPiAr ICoNCj4gPiArICogQHBhcmFtIGYNCj4gPiArICogICBBIHBvaW50ZXIgdG8gYSBmaWxlIGZvciBv dXRwdXQNCj4gPiArICogQHBhcmFtIHYNCj4gPiArICogICBRUyB2YXJpYWJsZQ0KPiA+ICsgKiBA cmV0dXJuDQo+ID4gKyAqICAgT24gc3VjY2VzcyAtIDANCj4gPiArICogICBPbiBlcnJvciAtIDEg d2l0aCBlcnJvciBjb2RlIHNldCBpbiBydGVfZXJybm8uDQo+ID4gKyAqICAgUG9zc2libGUgcnRl X2Vycm5vIGNvZGVzIGFyZToNCj4gPiArICogICAtIEVJTlZBTCAtIE5VTEwgcGFyYW1ldGVycyBh cmUgcGFzc2VkDQo+ID4gKyAqLw0KPiA+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3J0 ZV9yY3VfcXNicl9kdW1wKEZJTEUgKmYsIHN0cnVjdCBydGVfcmN1X3FzYnIgKnYpOw0KPiA+ICsN Cj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gK30NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ ICsjZW5kaWYgLyogX1JURV9SQ1VfUVNCUl9IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3JjdS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4gYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1 X3ZlcnNpb24ubWFwDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAuLmFkOGNiNTE3Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3Jj dS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICtFWFBFUklN RU5UQUwgew0KPiA+ICsJZ2xvYmFsOg0KPiA+ICsNCj4gPiArCXJ0ZV9yY3VfcXNicl9nZXRfbWVt c2l6ZTsNCj4gPiArCXJ0ZV9yY3VfcXNicl9pbml0Ow0KPiA+ICsJcnRlX3JjdV9xc2JyX3RocmVh ZF9yZWdpc3RlcjsNCj4gPiArCXJ0ZV9yY3VfcXNicl90aHJlYWRfdW5yZWdpc3RlcjsNCj4gPiAr CXJ0ZV9yY3VfcXNicl9kdW1wOw0KPiA+ICsNCj4gPiArCWxvY2FsOiAqOw0KPiA+ICt9Ow0KPiA+ IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5kZXgNCj4g PiA1OTUzMTRkN2QuLjY3YmUxMDY1OSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbWVzb24uYnVpbGQN Cj4gPiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4gPiBAQCAtMjIsNyArMjIsNyBAQCBsaWJyYXJp ZXMgPSBbDQo+ID4gIAknZ3JvJywgJ2dzbycsICdpcF9mcmFnJywgJ2pvYnN0YXRzJywNCj4gPiAg CSdrbmknLCAnbGF0ZW5jeXN0YXRzJywgJ2xwbScsICdtZW1iZXInLA0KPiA+ICAJJ3Bvd2VyJywg J3BkdW1wJywgJ3Jhd2RldicsDQo+ID4gLQkncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScs ICdzdGFjaycsICd2aG9zdCcsDQo+ID4gKwkncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScs ICdzdGFjaycsICd2aG9zdCcsICdyY3UnLA0KPiA+ICAJI2lwc2VjIGxpYiBkZXBlbmRzIG9uIGNy eXB0byBhbmQgc2VjdXJpdHkNCj4gPiAgCSdpcHNlYycsDQo+ID4gIAkjIGFkZCBwa3QgZnJhbWV3 b3JrIGxpYnMgd2hpY2ggdXNlIG90aGVyIGxpYnMgZnJvbSBhYm92ZSBkaWZmIC0tZ2l0DQo+ID4g YS9tay9ydGUuYXBwLm1rIGIvbWsvcnRlLmFwcC5tayBpbmRleCA3ZDk5NGJlY2UuLmU5M2NjMzY2 ZCAxMDA2NDQNCj4gPiAtLS0gYS9tay9ydGUuYXBwLm1rDQo+ID4gKysrIGIvbWsvcnRlLmFwcC5t aw0KPiA+IEBAIC05Nyw2ICs5Nyw3IEBAIF9MRExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9FQUwp ICAgICAgICAgICAgKz0gLQ0KPiBscnRlX2VhbA0KPiA+ICBfTERMSUJTLSQoQ09ORklHX1JURV9M SUJSVEVfQ01ETElORSkgICAgICAgICs9IC1scnRlX2NtZGxpbmUNCj4gPiAgX0xETElCUy0kKENP TkZJR19SVEVfTElCUlRFX1JFT1JERVIpICAgICAgICArPSAtbHJ0ZV9yZW9yZGVyDQo+ID4gIF9M RExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9TQ0hFRCkgICAgICAgICAgKz0gLWxydGVfc2NoZWQN Cj4gPiArX0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1JDVSkgICAgICAgICAgICArPSAtbHJ0 ZV9yY3UNCj4gPg0KPiA+ICBpZmVxICgkKENPTkZJR19SVEVfRVhFQ19FTlZfTElOVVgpLHkpDQo+ ID4gIF9MRExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9LTkkpICAgICAgICAgICAgKz0gLWxydGVf a25pDQo+ID4gLS0NCj4gPiAyLjE3LjENCj4gPg0KDQo=