From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3FB52A2EFC for ; Sun, 13 Oct 2019 06:36:03 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E545F1C2A1; Sun, 13 Oct 2019 06:36:01 +0200 (CEST) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30061.outbound.protection.outlook.com [40.107.3.61]) by dpdk.org (Postfix) with ESMTP id 853131C23F for ; Sun, 13 Oct 2019 06:36:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4ywOZWRoGJgt52hTDksbxDbKO/OcjNhMM7AodQd3L4I=; b=TpoTaf8A0/JTsS1cIrbcJQ5Qkw+apiofQfbXKPj3KyINGYBUbOiVm1GFJeeaee6y8jTNf3/DbNDsGuzDeqiW4zEdfv2C6NN1dnN1a5VbIpjusvO/jzUSlsC/kyOU00jZVw9LepfnpbeAXRsiVCd4cSHiAd8C3fI52nlEaCPAVPM= Received: from DB6PR0802CA0032.eurprd08.prod.outlook.com (2603:10a6:4:a3::18) by HE1PR08MB2650.eurprd08.prod.outlook.com (2603:10a6:7:2d::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Sun, 13 Oct 2019 04:35:56 +0000 Received: from DB5EUR03FT058.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e0a::204) by DB6PR0802CA0032.outlook.office365.com (2603:10a6:4:a3::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2347.16 via Frontend Transport; Sun, 13 Oct 2019 04:35:56 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dpdk.org; dmarc=none action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT058.mail.protection.outlook.com (10.152.20.255) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.15 via Frontend Transport; Sun, 13 Oct 2019 04:35:54 +0000 Received: ("Tessian outbound 0939a6bab6b1:v33"); Sun, 13 Oct 2019 04:35:53 +0000 X-CR-MTA-TID: 64aa7808 Received: from c669588c2662.1 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.12.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id E9BBEABD-FE8C-4008-B978-57EE949447D4.1; Sun, 13 Oct 2019 04:35:48 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04lp2054.outbound.protection.outlook.com [104.47.12.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c669588c2662.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Sun, 13 Oct 2019 04:35:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d7KKqZPmFai9ufJsP5yfoa2iTjcqqaj9p9BUzJPXEXRluoVXVP1R6D+lggr/EP2vJbdojP00MUTzUrIUEnjkJdju5PyalrFeprncjOGJeP4P+fvtIOiOM2q+9kN3CezsGU1Hl/wgb/dFBx6/rQH9LR5ADjoa/IgovfAmcpe2UPcj7jpZx//Vw2zjj+TJJdY0F503h1oJlTxL/t+ZJvoPiQAua7SSor+7JjFOFWnlCCNMpejqUjQ9Fca8/MfPq8hbF7P2Zaebf71RdBzCoTSb7a0vHSCFgXRLGv4RyoFHa6oNw+rNNtL8VFAj1K+2636N0pLJojms3fhKzFyJFwgycQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4ywOZWRoGJgt52hTDksbxDbKO/OcjNhMM7AodQd3L4I=; b=Ql2LrlpwwM3OeLDquJKL3Kan/3D7lR9uF0p8T5bEgHkih+4S9jKhwGT1RPX6Wu1qZLIC7a1O3Dq/XYeKKWQpuG4j0DK0TfidINuWItmzCO1UFRpaR7qRUQz67NRmSGbW5sQIInjRAuQUGXQP/GUDw5xjL9Mv7NrnkcfiIom0kBuzZ6TQgEg441glPUvusemydVh5L5+AXglGQ6ye8sCPYJQ75f16ZeLc3OLSOdoDXLT79TxhiAy4LqbriywEcm3VCfbKqZylvSBBBcKUMjUZXe04z1y+LeKDwvCjpab/DDYeYcbU5CkpfM9WNhbR+l70jYURRxiRZ78k1BrOItV17A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4ywOZWRoGJgt52hTDksbxDbKO/OcjNhMM7AodQd3L4I=; b=TpoTaf8A0/JTsS1cIrbcJQ5Qkw+apiofQfbXKPj3KyINGYBUbOiVm1GFJeeaee6y8jTNf3/DbNDsGuzDeqiW4zEdfv2C6NN1dnN1a5VbIpjusvO/jzUSlsC/kyOU00jZVw9LepfnpbeAXRsiVCd4cSHiAd8C3fI52nlEaCPAVPM= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.27) by VE1PR08MB4910.eurprd08.prod.outlook.com (10.255.114.207) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Sun, 13 Oct 2019 04:35:46 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::8c82:8d9c:c78d:22a6]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::8c82:8d9c:c78d:22a6%7]) with mapi id 15.20.2347.021; Sun, 13 Oct 2019 04:35:46 +0000 From: Honnappa Nagarahalli To: "Ananyev, Konstantin" , "stephen@networkplumber.org" , "paulmck@linux.ibm.com" CC: "Wang, Yipeng1" , "Medvedkin, Vladimir" , "Ruifeng Wang (Arm Technology China)" , Dharmik Thakkar , "dev@dpdk.org" , Honnappa Nagarahalli , nd , nd Thread-Topic: [PATCH v3 2/3] lib/rcu: add resource reclamation APIs Thread-Index: AQHVeUhlHoJ4LCRP6EyrG0pYBVGBKKdIZEYQgAB0zICAAHvAMIAFsbIAgAK7SCA= Date: Sun, 13 Oct 2019 04:35:46 +0000 Message-ID: References: <20190906094534.36060-1-ruifeng.wang@arm.com> <20191001062917.35578-1-honnappa.nagarahalli@arm.com> <20191001062917.35578-3-honnappa.nagarahalli@arm.com> <2601191342CEEE43887BDE71AB977258019196FF8E@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258019197083A@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB9772580191971FAC@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB9772580191971FAC@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: f9b0fddf-c518-41bf-aec0-8ff36347f6b7.0 x-checkrecipientchecked: true Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 0cabed1a-0e5d-4db1-3e69-08d74f96d58b X-MS-Office365-Filtering-HT: Tenant X-MS-TrafficTypeDiagnostic: VE1PR08MB4910:|VE1PR08MB4910:|HE1PR08MB2650: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:2958;OLM:2958; x-forefront-prvs: 01894AD3B8 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(136003)(396003)(376002)(346002)(366004)(52314003)(199004)(189003)(486006)(4326008)(26005)(74316002)(99286004)(305945005)(316002)(52536014)(7696005)(76176011)(7736002)(30864003)(110136005)(5660300002)(25786009)(54906003)(33656002)(2906002)(476003)(11346002)(446003)(6506007)(76116006)(186003)(6116002)(3846002)(86362001)(102836004)(2201001)(478600001)(81156014)(66946007)(8676002)(81166006)(71200400001)(6436002)(14454004)(9686003)(71190400001)(14444005)(256004)(2501003)(66556008)(66476007)(64756008)(66446008)(55016002)(229853002)(8936002)(66066001)(6246003)(69594002)(579004)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4910; 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-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: zEa69eJCPa57S1JI9Byu7VbAz0JbOEWkkJ4vgZnc5L2+3Wg+dATAjsPoHWCj9abLi0o1d45n/V6vWuaA4PINPKHDOx+03zDDwKabS6Qh+NPN01SyHzber+IOd0wm6vrhw01iy72tMBRbzIDIxMgtU7e6vMlK+6QLz9YHeFq/Yh5L3V99iLZ8lOiKcS1K5/nuC+j83ACs/deWadCqFJIDwyXZAxAwnUrl794YZk0EbCMh1uGbm0tJD/oSp1h46TZmRkevNVcvZrpqpwj/52ePmFyICU1YTlzZRlfC+redMJg5wnkvP1khVnLgPSnimaZxal+Y+LSwp+Sy+SJsUc+QjOfJhuuO1lr51Kir4zEZu2IPC+HDqnsBZFYL2EdV5IoF2xgCYYJXZ/VCu4835tgorgALbl6Xg//WLDOheiFnStA= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4910 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT058.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(136003)(376002)(396003)(39860400002)(346002)(52314003)(189003)(199004)(52536014)(70206006)(486006)(436003)(476003)(446003)(4326008)(336012)(8676002)(81156014)(81166006)(6116002)(3846002)(86362001)(14444005)(47776003)(110136005)(126002)(70586007)(50466002)(305945005)(11346002)(356004)(76130400001)(186003)(63350400001)(74316002)(66066001)(6246003)(2201001)(26826003)(26005)(478600001)(14454004)(22756006)(5660300002)(102836004)(9686003)(2906002)(7736002)(316002)(229853002)(6506007)(76176011)(2501003)(25786009)(8936002)(99286004)(33656002)(2486003)(23676004)(54906003)(7696005)(30864003)(55016002)(69594002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR08MB2650; H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 42893e6e-36b8-4820-d951-08d74f96d0bd NoDisclaimer: True X-Forefront-PRVS: 01894AD3B8 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: H4LaSnFo8v30ydT5Tv65KE/jtsnsF7wyXjkq5X6Kn81G+5VmVGMw7KGuXoT0Qu3RZLDk9BH+88R30QV3Sh42RO+wSSKL1HlKNqH0ISA9wqn3o5Pd6x67CZcQMiGmzBoMuLVmaZaet75RiBTwDigr1GCQRhx+AgpVW7AqE7P5kUzMOpLVZ9scSo6DhvF6fqofUTjbpEnZYItY15QJpzw13XOUGAdep5Ho8q4mrRXh8JWbVDbPSszd8hXXz6u9GmFRfRTGNDKdmMr6+F+5ecEVO9c2UmcRfu0VrPPOcgx97/0cEuRGAasbH7ktESwjGsj3qtloqa56bnIx5x9rl6QlEi8xiqp17RPZxzBVHq1kG4beoVog9F54vYx1BYpHl11UhPwybGbjQlKgckNrqrTZtyukz8l1qI7N/sim2+bEadM= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2019 04:35:54.1735 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0cabed1a-0e5d-4db1-3e69-08d74f96d58b X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2650 Subject: Re: [dpdk-dev] [PATCH v3 2/3] lib/rcu: add resource reclamation APIs 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" PHNuaXA+DQoNCj4gPiA+ID4gPiA+IEFkZCByZXNvdXJjZSByZWNsYW1hdGlvbiBBUElzIHRvIG1h a2UgaXQgc2ltcGxlIGZvcg0KPiA+ID4gPiA+ID4gYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMg dG8gaW50ZWdyYXRlIHJ0ZV9yY3UgbGlicmFyeS4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBT aWduZWQtb2ZmLWJ5OiBIb25uYXBwYSBOYWdhcmFoYWxsaQ0KPiA+ID4gPiA+ID4gPGhvbm5hcHBh Lm5hZ2FyYWhhbGxpQGFybS5jb20+DQo+ID4gPiA+ID4gPiBSZXZpZXdlZC1ieTogT2xhIExpbGpl ZGhhbCA8b2xhLmxpbGplZGhhbEBhcm0uY29tPg0KPiA+ID4gPiA+ID4gUmV2aWV3ZWQtYnk6IFJ1 aWZlbmcgV2FuZyA8cnVpZmVuZy53YW5nQGFybS5jb20+DQo+ID4gPiA+ID4gPiAtLS0NCj4gPiA+ ID4gPiA+ICBhcHAvdGVzdC90ZXN0X3JjdV9xc2JyLmMgICAgICAgICAgIHwgMjkxDQo+ICsrKysr KysrKysrKysrKysrKysrKysrKysrKystDQo+ID4gPiA+ID4gPiAgbGliL2xpYnJ0ZV9yY3UvbWVz b24uYnVpbGQgICAgICAgICB8ICAgMiArDQo+ID4gPiA+ID4gPiAgbGliL2xpYnJ0ZV9yY3UvcnRl X3JjdV9xc2JyLmMgICAgICB8IDE4NSArKysrKysrKysrKysrKysrKysNCj4gPiA+ID4gPiA+ICBs aWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaCAgICAgIHwgMTY5ICsrKysrKysrKysrKysrKysr DQo+ID4gPiA+ID4gPiAgbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5oICB8ICA0NiAr KysrKw0KPiA+ID4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXAgfCAg IDQgKw0KPiA+ID4gPiA+ID4gIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgfCAg IDYgKy0NCj4gPiA+ID4gPiA+ICA3IGZpbGVzIGNoYW5nZWQsIDcwMCBpbnNlcnRpb25zKCspLCAz IGRlbGV0aW9ucygtKSAgY3JlYXRlDQo+ID4gPiA+ID4gPiBtb2RlDQo+ID4gPiA+ID4gPiAxMDA2 NDQgbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5jDQo+ID4gPiA+ ID4gPiBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5jIGluZGV4IGNlN2Y5M2RkMy4uNzY4 MTRmNTBiDQo+ID4gPiA+ID4gPiAxMDA2NDQNCj4gPiA+ID4gPiA+IC0tLSBhL2xpYi9saWJydGVf cmN1L3J0ZV9yY3VfcXNici5jDQo+ID4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVf cmN1X3FzYnIuYw0KPiA+ID4gPiA+ID4gQEAgLTIxLDYgKzIxLDcgQEANCj4gPiA+ID4gPiA+ICAj aW5jbHVkZSA8cnRlX2Vycm5vLmg+DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gICNpbmNsdWRl ICJydGVfcmN1X3FzYnIuaCINCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyX3B2 dC5oIg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAvKiBHZXQgdGhlIG1lbW9yeSBzaXplIG9m IFFTQlIgdmFyaWFibGUgKi8gIHNpemVfdCBAQCAtMjY3LDYNCj4gPiA+ID4gPiA+ICsyNjgsMTkw IEBAIHJ0ZV9yY3VfcXNicl9kdW1wKEZJTEUgKmYsIHN0cnVjdCBydGVfcmN1X3FzYnIgKnYpDQo+ ID4gPiA+ID4gPiAgCXJldHVybiAwOw0KPiA+ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiArLyogQ3JlYXRlIGEgcXVldWUgdXNlZCB0byBzdG9yZSB0aGUgZGF0YSBzdHJ1Y3R1 cmUgZWxlbWVudHMNCj4gPiA+ID4gPiA+ICt0aGF0IGNhbg0KPiA+ID4gPiA+ID4gKyAqIGJlIGZy ZWVkIGxhdGVyLiBUaGlzIHF1ZXVlIGlzIHJlZmVycmVkIHRvIGFzICdkZWZlciBxdWV1ZScuDQo+ ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqDQo+ ID4gPiA+ID4gPiArcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZShjb25zdCBzdHJ1Y3QNCj4gPiA+ID4g PiA+ICtydGVfcmN1X3FzYnJfZHFfcGFyYW1ldGVycw0KPiA+ID4gPiA+ID4gKypwYXJhbXMpIHsN Cj4gPiA+ID4gPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqZHE7DQo+ID4gPiA+ID4gPiAr CXVpbnQzMl90IHFzX2ZpZm9fc2l6ZTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJaWYg KHBhcmFtcyA9PSBOVUxMIHx8IHBhcmFtcy0+ZiA9PSBOVUxMIHx8DQo+ID4gPiA+ID4gPiArCQlw YXJhbXMtPnYgPT0gTlVMTCB8fCBwYXJhbXMtPm5hbWUgPT0gTlVMTCB8fA0KPiA+ID4gPiA+ID4g KwkJcGFyYW1zLT5zaXplID09IDAgfHwgcGFyYW1zLT5lc2l6ZSA9PSAwIHx8DQo+ID4gPiA+ID4g PiArCQkocGFyYW1zLT5lc2l6ZSAlIDggIT0gMCkpIHsNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9sb2co UlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ID4gPiA+ID4gPiArCQkJIiVzKCk6IElu dmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ID4gPiArCQlydGVf ZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gTlVM TDsNCj4gPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlkcSA9IHJ0 ZV96bWFsbG9jKE5VTEwsDQo+ID4gPiA+ID4gPiArCQkoc2l6ZW9mKHN0cnVjdCBydGVfcmN1X3Fz YnJfZHEpICsgcGFyYW1zLT5lc2l6ZSksDQo+ID4gPiA+ID4gPiArCQlSVEVfQ0FDSEVfTElORV9T SVpFKTsNCj4gPiA+ID4gPiA+ICsJaWYgKGRxID09IE5VTEwpIHsNCj4gPiA+ID4gPiA+ICsJCXJ0 ZV9lcnJubyA9IEVOT01FTTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJCXJldHVybiBO VUxMOw0KPiA+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCS8qIHJv dW5kIHVwIHFzX2ZpZm9fc2l6ZSB0byBuZXh0IHBvd2VyIG9mIHR3byB0aGF0IGlzIG5vdCBsZXNz DQo+IHRoYW4NCj4gPiA+ID4gPiA+ICsJICogbWF4X3NpemUuDQo+ID4gPiA+ID4gPiArCSAqLw0K PiA+ID4gPiA+ID4gKwlxc19maWZvX3NpemUgPSBydGVfYWxpZ24zMnBvdzIoKCgocGFyYW1zLT5l c2l6ZS84KSArIDEpDQo+ID4gPiA+ID4gPiArCQkJCQkqIHBhcmFtcy0+c2l6ZSkgKyAxKTsNCj4g PiA+ID4gPiA+ICsJZHEtPnIgPSBydGVfcmluZ19jcmVhdGUocGFyYW1zLT5uYW1lLCBxc19maWZv X3NpemUsDQo+ID4gPiA+ID4gPiArCQkJCQlTT0NLRVRfSURfQU5ZLCAwKTsNCj4gPiA+ID4gPg0K PiA+ID4gPiA+IElmIGl0IGlzIGdvaW5nIHRvIGJlIG5vdCBNVCBzYWZlLCB0aGVuIHdoeSBub3Qg dG8gY3JlYXRlIHRoZQ0KPiA+ID4gPiA+IHJpbmcgd2l0aCAoUklOR19GX1NQX0VOUSB8IFJJTkdf Rl9TQ19ERVEpIGZsYWdzIHNldD8NCj4gPiA+ID4gQWdyZWUuDQo+ID4gPiA+DQo+ID4gPiA+ID4g VGhvdWdoIEkgdGhpbmsgaXQgY291bGQgYmUgY2hhbmdlZCB0byBhbGxvdyBNVCBzYWZlIG11bHRp cGxlDQo+ID4gPiA+ID4gZW5xZXVlL3NpbmdsZSBkZXF1ZXVlLCBzZWUgYmVsb3cuDQo+ID4gPiA+ IFRoZSBNVCBzYWZlIGlzc3VlIGlzIGR1ZSB0byByZWNsYWltIGNvZGUuIFRoZSByZWNsYWltIGNv ZGUgaGFzIHRoZQ0KPiA+ID4gPiBmb2xsb3dpbmcNCj4gPiA+IHNlcXVlbmNlOg0KPiA+ID4gPg0K PiA+ID4gPiBydGVfcmluZ19wZWVrDQo+ID4gPiA+IHJ0ZV9yY3VfcXNicl9jaGVjaw0KPiA+ID4g PiBydGVfcmluZ19kZXF1ZXVlDQo+ID4gPiA+DQo+ID4gPiA+IFRoaXMgZW50aXJlIHNlcXVlbmNl IG5lZWRzIHRvIGJlIGF0b21pYyBhcyB0aGUgZW50cnkgY2Fubm90IGJlDQo+ID4gPiA+IGRlcXVl dWVkDQo+ID4gPiB3aXRob3V0IGtub3dpbmcgdGhhdCB0aGUgZ3JhY2UgcGVyaW9kIGZvciB0aGF0 IGVudHJ5IGlzIG92ZXIuDQo+ID4gPg0KPiA+ID4gSSB1bmRlcnN0YW5kIHRoYXQsIHRob3VnaCBJ IGJlbGlldmUgYXQgbGVhc3QgaXQgc2hvdWxkIGJlIHBvc3NpYmxlDQo+ID4gPiB0byBzdXBwb3J0 IG11bHRpcGxlLWVucXVldWUvc2luZ2xlIGRlcXVldWVyIGFuZCByZWNsYWltIG1vZGUuDQo+ID4g PiBXaXRoIHNlcmlhbGl6ZWQgZGVxdWV1ZSgpIGV2ZW4gbXVsdGlwbGUgZGVxdWV1ZSBzaG91bGQg YmUgcG9zc2libGUuDQo+ID4gQWdyZWVkLiBQbGVhc2Ugc2VlIHRoZSByZXNwb25zZSBvbiB0aGUg b3RoZXIgdGhyZWFkLg0KPiA+DQo+ID4gPg0KPiA+ID4gPiBOb3RlIHRoYXQgZHVlIHRvIG9wdGlt aXphdGlvbnMgaW4gcnRlX3JjdV9xc2JyX2NoZWNrIEFQSSwgdGhpcw0KPiA+ID4gPiBzZXF1ZW5j ZSBzaG91bGQgbm90IGJlIGxhcmdlIGluIG1vc3QgY2FzZXMuIEkgZG8gbm90IGhhdmUgaWRlYXMg b24NCj4gPiA+ID4gaG93IHRvDQo+ID4gPiBtYWtlIHRoaXMgc2VxdWVuY2UgbG9jay1mcmVlLg0K PiA+ID4gPg0KPiA+ID4gPiBJZiB0aGUgd3JpdGVyIGlzIG9uIHRoZSBjb250cm9sIHBsYW5lLCBt b3N0IHVzZSBjYXNlcyB3aWxsIHVzZQ0KPiA+ID4gPiBtdXRleCBsb2NrcyBmb3Igc3luY2hyb25p emF0aW9uIGlmIHRoZXkgYXJlIG11bHRpLXRocmVhZGVkLiBUaGF0DQo+ID4gPiA+IGxvY2sgc2hv dWxkIGJlDQo+ID4gPiBlbm91Z2ggdG8gcHJvdmlkZSB0aGUgdGhyZWFkIHNhZmV0eSBmb3IgdGhl c2UgQVBJcy4NCj4gPiA+DQo+ID4gPiBJbiB0aGF0IGlzIGNhc2UsIHdoeSBkbyB3ZSBuZWVkIHJp bmcgYXQgYWxsPw0KPiA+ID4gRm9yIHN1cmUgcGVvcGxlIGNhbiBjcmVhdGUgdGhlaXIgb3duIHF1 ZXVlIHF1aXRlIGVhc2lseSB3aXRoIG11dGV4IGFuZA0KPiBUQUlMUS4NCj4gPiA+IElmIHBlcmZv cm1hbmNlIGlzIG5vdCBhbiBpc3N1ZSwgdGhleSBjYW4gZXZlbiBhZGQgcHRocmVhZF9jb25kIHRv DQo+ID4gPiBpdCwgYW5kIGhhdmUgYW4gYWJpbGl0eSBmb3IgdGhlIGNvbnN1bWVyIHRvIHNsZWVw L3dha2V1cCBvbiBlbXB0eS9mdWxsDQo+IHF1ZXVlLg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4g SWYgdGhlIHdyaXRlciBpcyBtdWx0aS10aHJlYWRlZCBhbmQgbG9jay1mcmVlLCB0aGVuIG9uZSBz aG91bGQgdXNlDQo+ID4gPiA+IHBlciB0aHJlYWQNCj4gPiA+IGRlZmVyIHF1ZXVlLg0KPiA+ID4N Cj4gPiA+IElmIHRoYXQncyB0aGUgb25seSB3b3JraW5nIG1vZGVsLCB0aGVuIHRoZSBxdWVzdGlv biBpcyB3aHkgZG8gd2UNCj4gPiA+IG5lZWQgdGhhdCBBUEkgYXQgYWxsPw0KPiA+ID4gSnVzdCBz aW1wbGUgYXJyYXkgd2l0aCBjb3VudGVyIG9yIGxpbmtlZC1saXN0IHNob3VsZCBkbyBmb3IgbWFq b3JpdHkgb2YNCj4gY2FzZXMuDQo+ID4gUGxlYXNlIHNlZSB0aGUgb3RoZXIgdGhyZWFkLg0KPiA+ DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiArCWlmIChkcS0+ciA9PSBO VUxMKSB7DQo+ID4gPiA+ID4gPiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xvZ190 eXBlLA0KPiA+ID4gPiA+ID4gKwkJCSIlcygpOiBkZWZlciBxdWV1ZSBjcmVhdGUgZmFpbGVkXG4i LA0KPiBfX2Z1bmNfXyk7DQo+ID4gPiA+ID4gPiArCQlydGVfZnJlZShkcSk7DQo+ID4gPiA+ID4g PiArCQlyZXR1cm4gTlVMTDsNCj4gPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ID4gKwlkcS0+diA9IHBhcmFtcy0+djsNCj4gPiA+ID4gPiA+ICsJZHEtPnNpemUgPSBwYXJh bXMtPnNpemU7DQo+ID4gPiA+ID4gPiArCWRxLT5lc2l6ZSA9IHBhcmFtcy0+ZXNpemU7DQo+ID4g PiA+ID4gPiArCWRxLT5mID0gcGFyYW1zLT5mOw0KPiA+ID4gPiA+ID4gKwlkcS0+cCA9IHBhcmFt cy0+cDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJcmV0dXJuIGRxOw0KPiA+ID4gPiA+ ID4gK30NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBFbnF1ZXVlIG9uZSByZXNvdXJj ZSB0byB0aGUgZGVmZXIgcXVldWUgdG8gZnJlZSBhZnRlciB0aGUNCj4gPiA+ID4gPiA+ICtncmFj ZQ0KPiA+ID4gPiA+ID4gKyAqIHBlcmlvZCBpcyBvdmVyLg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ ID4gPiA+ID4gK2ludCBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShzdHJ1Y3QgcnRlX3JjdV9xc2Jy X2RxICpkcSwgdm9pZCAqZSkNCj4gew0KPiA+ID4gPiA+ID4gKwl1aW50NjRfdCB0b2tlbjsNCj4g PiA+ID4gPiA+ICsJdWludDY0X3QgKnRtcDsNCj4gPiA+ID4gPiA+ICsJdWludDMyX3QgaTsNCj4g PiA+ID4gPiA+ICsJdWludDMyX3QgY3VyX3NpemUsIGZyZWVfc2l6ZTsNCj4gPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiA+ICsJaWYgKGRxID09IE5VTEwgfHwgZSA9PSBOVUxMKSB7DQo+ID4gPiA+ID4g PiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+ID4gPiA+ID4g KwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ID4g PiA+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g KwkJcmV0dXJuIDE7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBXaHkganVzdCBub3QgdG8gcmV0dXJu IC1FSU5WQUwgc3RyYWlnaHR3YXk/DQo+ID4gPiA+ID4gSSB0aGluayB0aGVyZSBpcyBubyBtdWNo IHBvaW50IHRvIHNldCBydGVfZXJybm8gaW4gdGhhdCBmdW5jdGlvbg0KPiA+ID4gPiA+IGF0IGFs bCwganVzdCByZXR1cm4gdmFsdWUgc2hvdWxkIGRvLg0KPiA+ID4gPiBJIGFtIHRyeWluZyB0byBr ZWVwIHRoZXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgQVBJcy4gVGhleQ0KPiA+ID4g PiByZXR1cm4gMCBvciAxDQo+ID4gPiBhbmQgc2V0IHRoZSBydGVfZXJybm8uDQo+ID4gPg0KPiA+ ID4gQSBsb3Qgb2YgcHVibGljIERQREsgQVBJIGZ1bmN0aW9ucyBkbyB1c2UgcmV0dXJuIHZhbHVl IHRvIHJldHVybg0KPiA+ID4gc3RhdHVzIGNvZGUgKDAsIG9yIHNvbWUgcG9zaXRpdmUgbnVtYmVy cyBvZiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubw0KPiA+ID4gdmFsdWVzIG9uIGZhaWx1cmUpLCBJ IGFtIG5vdCBpbnZlbnRpbmcgYW55dGhpbmcgbmV3IGhlcmUuDQo+ID4gQWdyZWUsIHlvdSBhcmUg bm90IHByb3Bvc2luZyBhIG5ldyB0aGluZyBoZXJlLiBNYXkgYmUgSSB3YXMgbm90IGNsZWFyLg0K PiA+IEkgcmVhbGx5IGRvIG5vdCBoYXZlIGFuIG9waW5pb24gb24gaG93IHRoaXMgc2hvdWxkIGJl IGRvbmUuIEJ1dCwgSSBkbyBoYXZlDQo+IGFuIG9waW5pb24gb24gY29uc2lzdGVuY3kuIFRoZXNl IG5ldyBBUElzIGZvbGxvdyB3aGF0IGhhcyBiZWVuIGRvbmUgaW4gdGhlDQo+IGV4aXN0aW5nIFJD VSBBUElzLiBJIHRoaW5rIHdlIGhhdmUgMiBvcHRpb25zIGhlcmUuDQo+ID4gMSkgRWl0aGVyIHdl IGNoYW5nZSBleGlzdGluZyBSQ1UgQVBJcyB0byBnZXQgcmlkIG9mIHJ0ZV9lcnJubyAoaXMgaXQN Cj4gPiBhbiBBQkkgY2hhbmdlPykgb3INCj4gPiAyKSBUaGUgbmV3IEFQSXMgZm9sbG93IHdoYXQg aGFzIGJlZW4gZG9uZSBpbiB0aGUgZXhpc3RpbmcgUkNVIEFQSXMuDQo+ID4gSSB3YW50IHRvIG1h a2Ugc3VyZSB3ZSBhcmUgY29uc2lzdGVudCBhdCBsZWFzdCB3aXRoaW4gUkNVIEFQSXMuDQo+IA0K PiBCdXQgYXMgSSBjYW4gc2VlIHJpZ2h0IG5vdyByY3UgQVBJIHNldHMgcnRlX2Vycm5vIG9ubHkg Zm9yIGNvbnRyb2wtcGF0aA0KPiBmdW5jdGlvbnMgKGdldF9tZW1zaXplLCBpbml0LCByZWdpc3Rl ciwgdW5yZWdpc3RlciwgZHVtcCkuDQo+IEFsbCBmYXN0LXBhdGggKGlubGluZSkgZnVuY3Rpb24g ZG9uJ3Qgc2V0L3VzZSBpdC4NCj4gU28gZnJvbSBwZXJzcGVjdGl2ZSB0aGF0IGlzIGNvbnNpc3Rl bnQgYmVoYXZpb3IsIG5vPw0KQWdyZWUuIEkgYW0gdHJlYXRpbmcgdGhpcyBhcyBhIGNvbnRyb2wg cGxhbmUgZnVuY3Rpb24gbWFpbmx5IChoZW5jZSBpdCBpcyBhIG5vbi1pbmxpbmUgZnVuY3Rpb24g YXMgd2VsbCkuDQoNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ICsJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkvKiBTdGFydCB0aGUgZ3JhY2Ug cGVyaW9kICovDQo+ID4gPiA+ID4gPiArCXRva2VuID0gcnRlX3JjdV9xc2JyX3N0YXJ0KGRxLT52 KTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJLyogUmVjbGFpbSByZXNvdXJjZXMgaWYg dGhlIHF1ZXVlIGlzIDEvOHRoIGZ1bGwuIFRoaXMgaGVscHMNCj4gPiA+ID4gPiA+ICsJICogdGhl IHF1ZXVlIGZyb20gZ3Jvd2luZyB0b28gbGFyZ2UgYW5kIGFsbG93cyB0aW1lIGZvcg0KPiByZWFk ZXINCj4gPiA+ID4gPiA+ICsJICogdGhyZWFkcyB0byByZXBvcnQgdGhlaXIgcXVpZXNjZW50IHN0 YXRlLg0KPiA+ID4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gPiA+ICsJY3VyX3NpemUgPSBydGVfcmlu Z19jb3VudChkcS0+cikgLyAoZHEtPmVzaXplLzggKyAxKTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ IFByb2JhYmx5IHdvdWxkIGJlIGEgYml0IGVhc2llciBpZiB5b3UganVzdCBzdG9yZSBpbiBkcS0+ ZXNpemUNCj4gPiA+ID4gPiAoZWx0IHNpemUgKyB0b2tlbg0KPiA+ID4gPiA+IHNpemUpIC8gOC4N Cj4gPiA+ID4gQWdyZWUNCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwlpZiAoY3Vy X3NpemUgPiAoZHEtPnNpemUgPj4NCj4gPiA+ID4gPiA+ICtSVEVfUkNVX1FTQlJfQVVUT19SRUNM QUlNX0xJTUlUKSkgew0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gV2h5IHRvIG1ha2UgdGhpcyB0aHJl c2hvbGQgdmFsdWUgaGFyZC1jb2RlZD8NCj4gPiA+ID4gPiBXaHkgZWl0aGVyIG5vdCB0byBwdXQg aXQgaW50byBjcmVhdGUgcGFyYW1ldGVyLCBvciBqdXN0IHJldHVybiBhDQo+ID4gPiA+ID4gc3Bl Y2lhbCByZXR1cm4gdmFsdWUsIHRvIGluZGljYXRlIHRoYXQgdGhyZXNob2xkIGlzIHJlYWNoZWQ/ DQo+ID4gPiA+IE15IHRoaW5raW5nIHdhcyB0byBrZWVwIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZh Y2UgZWFzeSB0byB1c2UuIFRoZQ0KPiA+ID4gPiBtb3JlIHRoZSBwYXJhbWV0ZXJzLCB0aGUgbW9y ZSBwYWluZnVsIGl0IGlzIGZvciB0aGUgdXNlci4gSU1PLCB0aGUNCj4gPiA+ID4gY29uc3RhbnRz IGNob3NlbiBzaG91bGQgYmUgZ29vZCBlbm91Z2ggZm9yIG1vc3QgY2FzZXMuIE1vcmUNCj4gPiA+ ID4gYWR2YW5jZWQNCj4gPiA+IHVzZXJzIGNvdWxkIG1vZGlmeSB0aGUgY29uc3RhbnRzLiBIb3dl dmVyLCB3ZSBjb3VsZCBtYWtlIHRoZXNlIGFzDQo+ID4gPiBwYXJ0IG9mIHRoZSBwYXJhbWV0ZXJz LCBidXQgbWFrZSB0aGVtIG9wdGlvbmFsIGZvciB0aGUgdXNlci4gRm9yIGV4Og0KPiA+ID4gaWYg dGhleSBzZXQgdGhlbSB0byAwLCBkZWZhdWx0IHZhbHVlcyBjYW4gYmUgdXNlZC4NCj4gPiA+ID4N Cj4gPiA+ID4gPiBPciBldmVuIHJldHVybiBudW1iZXIgb2YgZmlsbGVkL2ZyZWUgZW50cm9lcyBv biBzdWNjZXNzLCBzbw0KPiA+ID4gPiA+IGNhbGxlciBjYW4gZGVjaWRlIHRvIHJlY2xhaW0gb3Ig bm90IGJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24gb24gaGlzDQo+IG93bj8NCj4gPiA+ID4gVGhp cyBtZWFucyBtb3JlIGNvZGUgb24gdGhlIHVzZXIgc2lkZS4NCj4gPiA+DQo+ID4gPiBJIHBlcnNv bmFsbHkgdGhpbmsgaXQgaXQgcmVhbGx5IHdvdWxkbid0IGJlIHRoYXQgYmlnIHByb2JsZW0gdG8g dGhlDQo+ID4gPiB1c2VyIHRvIHBhc3MgZXh0cmEgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4N Cj4gPiBJIHdpbGwgY29udmVydCB0aGUgMiBjb25zdGFudHMgaW50byBvcHRpb25hbCBwYXJhbWV0 ZXJzICh1c2VyIGNhbiBzZXQNCj4gPiB0aGVtIHRvIDAgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHVz ZSBkZWZhdWx0IHZhbHVlcykNCj4gPg0KPiA+ID4gQWdhaW4gd2hhdCBpZiB1c2VyIGRvZXNuJ3Qg d2FudCB0byByZWNsYWltKCkgaW4gZW5xdWV1ZSgpIHRocmVhZCBhdCBhbGw/DQo+ID4gJ2VucXVl dWUnIGhhcyB0byBkbyByZWNsYW1hdGlvbiBpZiB0aGUgZGVmZXIgcXVldWUgaXMgZnVsbC4gSSBk byBub3QgdGhpbmsgdGhpcw0KPiBpcyB0cml2aWFsLg0KPiA+DQo+ID4gSW4gdGhlIGN1cnJlbnQg ZGVzaWduLCByZWNsYW1hdGlvbiBpbiBlbnF1ZXVlIGlzIGFsc28gZG9uZSBvbiByZWd1bGFyDQo+ ID4gYmFzaXMgKGF1dG9tYXRpYyB0cmlnZ2VyaW5nIG9mIHJlY2xhbWF0aW9uIHdoZW4gdGhlIHF1 ZXVlIHJlYWNoZXMNCj4gPiBjZXJ0YWluIGxpbWl0KSB0byBrZWVwIHRoZSBxdWV1ZSBmcm9tIGdy b3dpbmcgdG9vIGxhcmdlLiBUaGlzIGlzDQo+ID4gcmVxdWlyZWQgd2hlbiB3ZSBpbXBsZW1lbnQg YSBkeW5hbWljYWxseSBhZGp1c3RpbmcgZGVmZXIgcXVldWUuIFRoZQ0KPiBjdXJyZW50IGFsZ29y aXRobSBrZWVwcyB0aGUgY29zdCBvZiByZWNsYW1hdGlvbiBzcHJlYWQgYWNyb3NzIG11bHRpcGxl IGNhbGxzDQo+IGFuZCBwdXRzIGFuIHVwcGVyIGJvdW5kIG9uIGN5Y2xlcyBmb3IgZGVsZXRlIEFQ SSBieSByZWNsYWltaW5nIGEgZml4ZWQNCj4gbnVtYmVyIG9mIGVudHJpZXMuDQo+ID4NCj4gPiBU aGlzIGFsZ29yaXRobSBpcyBwcm92ZW4gdG8gd29yayBpbiB0aGUgTFBNIGludGVncmF0aW9uIHBl cmZvcm1hbmNlDQo+ID4gdGVzdHMgYXQgYSB2ZXJ5IGxvdyBwZXJmb3JtYW5jZSBvdmVyIGhlYWQg KH4xJSkuIFNvLCBJIGRvIG5vdCBrbm93IHdoeSBhDQo+IHVzZXIgd291bGQgbm90IHdhbnQgdG8g dXNlIHRoaXMuDQo+IA0KPiBZZWgsIEkgbG9va2VkIGF0IExQTSBpbXBsZW1lbnRhdGlvbiBhbmQg b25lIHRoaW5nIEkgZm91bmQgc3RyYW5nZSAtDQo+IGRlZmVyX3F1ZXVlIGlzIGhpZGRlbiBpbnNp ZGUgTFBNIHN0cnVjdCBhbmQgYWxsIHJlY2xhbWF0aW9ucyBhcmUgZG9uZQ0KPiBpbnRlcm5hbGx5 Lg0KPiBZZXMgZm9yIHN1cmUgaXQgYWxsb3dzIHRvIGRlZmVyIGFuZCBncm91cCBhY3R1YWwgcmVj bGFpbSgpLCB3aGljaCBob3BlZnVsbHkgd2lsbA0KPiBsZWFkIHRvIGJldHRlciBwZXJmb3JtYW5j ZS4NCj4gQnV0IHdoeSBub3QgdG8gYWxsb3cgdXNlciB0byBjYWxsIHJlY2xhaW0oKSBmb3IgaXQg ZGlyZWN0bHkgdG9vPw0KPiBJbiB0aGF0IHdheSB1c2VyIG1pZ2h0IGF2b2lkLyhtaW5pbWl6ZSkg ZG9pbmcgcmVjbGFpbSgpIGluIExQTSB3cml0ZSgpIGF0IGFsbC4NCj4gQW5kIGxldCBzYXkgZG8g aXQgc29tZXdoZXJlIGxhdGVyIGluIHRoZSBzYW1lIHRocmVhZCAod2hlbiBubyBvdGhlciB0YXNr cyB0bw0KPiBkbyksIG9yIGV2ZW4gbGVhdmUgaXQgdG8gc29tZSBvdGhlciBob3VzZS1rZWVwaW5n IHRocmVhZCB0byBkbyAoc29ydCBvZg0KPiBnYXJiYWdlIGNvbGxlY3RvcikuDQo+IE9yIHN1Y2gg bW9kZSBpcyBub3Qgc3VwcG9ydGVkL3BsYW5uZWQ/DQpUaGUgZ29hbCBvZiBpbnRlZ3JhdGluZyB0 aGUgUkNVIGRlZmVyIEFQSXMgd2l0aCBsaWJyYXJpZXMgaXMgdG8gdGFrZSBhd2F5IHRoZSBjb21w bGV4aXR5IG9uIHRoZSB3cml0ZXIgdG8gYWRvcHQgdGhlIGxvY2stZnJlZSBhbGdvcml0aG1zLiBJ IGFtIGxvb2tpbmcgdG8gYWRkcmVzcyBtb3N0IHVzZWQgdXNlIGNhc2VzLiBUaGVyZSB3aWxsIGJl IHVzZSBjYXNlcyB3aGljaCBhcmUgbm90IHZlcnkgY29tbW9uIGFuZCBJIHRoaW5rIHRob3NlIHNo b3VsZCBiZSBhZGRyZXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJ5IHVzaW5nIHRoZSBiYXNlIFJD VSBBUElzLiBMZXQgdXMgZGlzY3VzcyB0aGlzIG1vcmUgaW4gdGhlIG90aGVyIHRocmVhZCwgd2hl cmUgeW91IGhhdmUgc2ltaWxhciBxdWVzdGlvbnMuDQoNCj4gDQo+ID4gVGhlIDIgYWRkaXRpb25h bCBwYXJhbWV0ZXJzIHNob3VsZCBnaXZlIHRoZSB1c2VyIG1vcmUgZmxleGliaWxpdHkuDQo+IA0K PiBPaywgbGV0J3Mga2VlcCBpdCBhcyBjb25maWcgcGFyYW1zLg0KPiBBZnRlciBhbm90aGVyIHRo b3VnaCAtIEkgdGhpbmsgeW91IHJpZ2h0LCBpdCBzaG91bGQgYmUgZ29vZCBlbm91Z2guDQo+IA0K PiA+DQo+ID4gSG93ZXZlciwgaWYgdGhlIHVzZXIgd2FudHMgaGlzIG93biBhbGdvcml0aG0sIGhl IGNhbiBjcmVhdGUgb25lIHdpdGggdGhlDQo+IGJhc2UgQVBJcyBwcm92aWRlZC4NCj4gPg0KPiA+ ID4NCj4gPiA+ID4gSSB0aGluayBhZGRpbmcgdGhlc2UgdG8gcGFyYW1ldGVycyBzZWVtcyBsaWtl IGEgYmV0dGVyIG9wdGlvbi4NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwkJcnRl X2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ID4gPiA+ID4gPiArCQkJIiVz KCk6IFRyaWdnZXJpbmcgcmVjbGFtYXRpb25cbiIsIF9fZnVuY19fKTsNCj4gPiA+ID4gPiA+ICsJ CXJ0ZV9yY3VfcXNicl9kcV9yZWNsYWltKGRxKTsNCj4gPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3IgYXRsZWFz dCBmb3IgMSByZXNvdXJjZSAqLw0KPiA+ID4gPiA+ID4gKwlmcmVlX3NpemUgPSBydGVfcmluZ19m cmVlX2NvdW50KGRxLT5yKSAvIChkcS0+ZXNpemUvOCArIDEpOw0KPiA+ID4gPiA+ID4gKwlpZiAo IWZyZWVfc2l6ZSkgew0KPiA+ID4gPiA+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0VSUiwgcnRlX3Jj dV9sb2dfdHlwZSwNCj4gPiA+ID4gPiA+ICsJCQkiJXMoKTogRGVmZXIgcXVldWUgaXMgZnVsbFxu IiwgX19mdW5jX18pOw0KPiA+ID4gPiA+ID4gKwkJcnRlX2Vycm5vID0gRU5PU1BDOw0KPiA+ID4g PiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiA+ICsJLyogRW5xdWV1ZSB0aGUgcmVzb3VyY2UgKi8NCj4gPiA+ID4gPiA+ICsJcnRlX3Jp bmdfc3BfZW5xdWV1ZShkcS0+ciwgKHZvaWQgKikodWludHB0cl90KXRva2VuKTsNCj4gPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiA+ICsJLyogVGhlIHJlc291cmNlIHRvIGVucXVldWUgbmVlZHMgdG8g YmUgYSBtdWx0aXBsZSBvZiA2NGINCj4gPiA+ID4gPiA+ICsJICogZHVlIHRvIHRoZSBsaW1pdGF0 aW9uIG9mIHRoZSBydGVfcmluZyBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4gPiA+ICsJICovDQo+ ID4gPiA+ID4gPiArCWZvciAoaSA9IDAsIHRtcCA9ICh1aW50NjRfdCAqKWU7IGkgPCBkcS0+ZXNp emUvODsgaSsrLCB0bXArKykNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9yaW5nX3NwX2VucXVldWUoZHEt PnIsICh2b2lkICopKHVpbnRwdHJfdCkqdG1wKTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gVGhhdCB3aG9sZSBjb25zdHJ1Y3Rpb24gYWJvdmUgbG9va3MgYSBiaXQgY2x1bXN5IGFu ZCBlcnJvciBwcm9uZS4uLg0KPiA+ID4gPiA+IEkgc3VwcG9zZSBqdXN0Og0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gY29uc3QgdWludDMyX3QgbmJfZWx0ID0gIGRxLT5lbHRfc2l6ZS84ICsgMTsgdWlu dDMyX3QgZnJlZSwgbjsgLi4uDQo+ID4gPiA+ID4gbiA9IHJ0ZV9yaW5nX2VucXVldWVfYnVsayhk cS0+ciwgZSwgbmJfZWx0LCAmZnJlZSk7IGlmIChuID09IDApDQo+ID4gPiA+IFllcywgYnVsayBl bnF1ZXVlIGNhbiBiZSB1c2VkLiBCdXQgbm90ZSB0aGF0IG9uY2UgdGhlIGZsZXhpYmxlDQo+ID4g PiA+IGVsZW1lbnQgc2l6ZQ0KPiA+ID4gcmluZyBwYXRjaCBpcyBkb25lLCB0aGlzIGNvZGUgd2ls bCB1c2UgdGhhdC4NCj4gPiA+DQo+ID4gPiBXZWxsLCB3aGVuIGl0IHdpbGwgYmUgaW4gdGhlIG1h aW5saW5lLCBhbmQgaXQgd291bGQgcHJvdmlkZSBhIGJldHRlcg0KPiA+ID4gd2F5LCBmb3Igc3Vy ZSB0aGlzIGNvZGUgY2FuIGJlIHVwZGF0ZWQgdG8gdXNlIG5ldyBBUEkgKGlmIGl0IGlzIHByb3Zp ZGUNCj4gc29tZSBpbXByb3ZlbWVudHMpLg0KPiA+ID4gQnV0IGFzIEkgdWRlbnJzdGFuZCwgcmln aHQgbm93IGl0IGlzIG5vdCB0aGVyZSwgd2hpbGUgYnVsaw0KPiBlbnF1ZXVlL2RlcXVldWUgYXJl Lg0KPiA+IEFwb2xvZ2llcywgSSB3YXMgbm90IGNsZWFyLiBJIGFncmVlIHdlIGNhbiBnbyB3aXRo IGJ1bGsgQVBJcyBmb3Igbm93Lg0KPiA+DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+ICAgcmV0 dXJuIC1FTk9TUEM7DQo+ID4gPiA+ID4gcmV0dXJuIGZyZWU7DQo+ID4gPiA+ID4NCj4gPiA+ID4g PiBUaGF0IHdheSBJIHRoaW5rIHlvdSBjYW4gaGF2ZSBNVC1zYWZlIHZlcnNpb24gb2YgdGhhdCBm dW5jdGlvbi4NCj4gPiA+ID4gUGxlYXNlIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgTVQgc2FmZSBp c3N1ZSBhYm92ZS4NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4g PiArLyogUmVjbGFpbSByZXNvdXJjZXMgZnJvbSB0aGUgZGVmZXIgcXVldWUuICovIGludA0KPiA+ ID4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEg KmRxKSB7DQo+ID4gPiA+ID4gPiArCXVpbnQzMl90IG1heF9jbnQ7DQo+ID4gPiA+ID4gPiArCXVp bnQzMl90IGNudDsNCj4gPiA+ID4gPiA+ICsJdm9pZCAqdG9rZW47DQo+ID4gPiA+ID4gPiArCXVp bnQ2NF90ICp0bXA7DQo+ID4gPiA+ID4gPiArCXVpbnQzMl90IGk7DQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiArCWlmIChkcSA9PSBOVUxMKSB7DQo+ID4gPiA+ID4gPiArCQlydGVfbG9nKFJU RV9MT0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+ID4gPiA+ID4gKwkJCSIlcygpOiBJbnZh bGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ID4gPiA+ID4gKwkJcnRlX2Vy cm5vID0gRUlOVkFMOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiBTYW1lIHN0b3J5IGFzIGFib3ZlIC0gSSB0aGluayBydGVfZXJy bm8gaXMgZXhjZXNzaXZlIGluIHRoaXMgZnVuY3Rpb24uDQo+ID4gPiA+ID4gSnVzdCByZXR1cm4g dmFsdWUgc2hvdWxkIGJlIGVub3VnaC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g PiArCX0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJLyogQW55dGhpbmcgdG8gcmVjbGFp bT8gKi8NCj4gPiA+ID4gPiA+ICsJaWYgKHJ0ZV9yaW5nX2NvdW50KGRxLT5yKSA9PSAwKQ0KPiA+ ID4gPiA+ID4gKwkJcmV0dXJuIDA7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBOb3Qgc3VyZSB5b3Ug bmVlZCB0aGF0LCBzZWUgYmVsb3cuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiA+ICsJLyogUmVjbGFpbSBhdCB0aGUgbWF4IDEvMTZ0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGVu dHJpZXMuICovDQo+ID4gPiA+ID4gPiArCW1heF9jbnQgPSBkcS0+c2l6ZSA+PiBSVEVfUkNVX1FT QlJfTUFYX1JFQ0xBSU1fTElNSVQ7DQo+ID4gPiA+ID4gPiArCW1heF9jbnQgPSAobWF4X2NudCA9 PSAwKSA/IGRxLT5zaXplIDogbWF4X2NudDsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEFnYWluIHdo eSBub3QgdG8gbWFrZSBtYXhfY250IGEgY29uZmlndXJhYmxlIGF0IGNyZWF0ZSgpIHBhcmFtZXRl cj8NCj4gPiA+ID4gSSB0aGluayBtYWtpbmcgdGhpcyBhcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIg Zm9yIGNyZWF0aW5nIGRlZmVyDQo+ID4gPiA+IHF1ZXVlIGlzIGENCj4gPiA+IGJldHRlciBvcHRp b24uDQo+ID4gPiA+DQo+ID4gPiA+ID4gT3IgZXZlbiBhIHBhcmFtZXRlciBmb3IgdGhhdCBmdW5j dGlvbj8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwljbnQgPSAwOw0KPiA+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ID4gKwkvKiBDaGVjayByZWFkZXIgdGhyZWFkcyBxdWllc2NlbnQgc3RhdGUgYW5k IHJlY2xhaW0NCj4gcmVzb3VyY2VzICovDQo+ID4gPiA+ID4gPiArCXdoaWxlICgoY250IDwgbWF4 X2NudCkgJiYgKHJ0ZV9yaW5nX3BlZWsoZHEtPnIsICZ0b2tlbikgPT0NCj4gMCkgJiYNCj4gPiA+ ID4gPiA+ICsJCShydGVfcmN1X3FzYnJfY2hlY2soZHEtPnYsDQo+ICh1aW50NjRfdCkoKHVpbnRw dHJfdCl0b2tlbiksIGZhbHNlKQ0KPiA+ID4gPiA+ID4gKwkJCT09IDEpKSB7DQo+ID4gPiA+ID4N Cj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwkJKHZvaWQpcnRlX3Jpbmdfc2NfZGVxdWV1ZShkcS0+ ciwgJnRva2VuKTsNCj4gPiA+ID4gPiA+ICsJCS8qIFRoZSByZXNvdXJjZSB0byBkZXF1ZXVlIG5l ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YNCj4gNjRiDQo+ID4gPiA+ID4gPiArCQkgKiBkdWUgdG8g dGhlIGxpbWl0YXRpb24gb2YgdGhlIHJ0ZV9yaW5nDQo+IGltcGxlbWVudGF0aW9uLg0KPiA+ID4g PiA+ID4gKwkJICovDQo+ID4gPiA+ID4gPiArCQlmb3IgKGkgPSAwLCB0bXAgPSAodWludDY0X3Qg KilkcS0+ZTsgaSA8IGRxLT5lc2l6ZS84Ow0KPiA+ID4gPiA+ID4gKwkJCWkrKywgdG1wKyspDQo+ ID4gPiA+ID4gPiArCQkJKHZvaWQpcnRlX3Jpbmdfc2NfZGVxdWV1ZShkcS0+ciwNCj4gPiA+ID4g PiA+ICsJCQkJCSh2b2lkICopKHVpbnRwdHJfdCl0bXApOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g QWdhaW4sIG5vIG5lZWQgZm9yIHN1Y2ggY29uc3RydWN0cyB3aXRoIG11bHRpcGxlIGRlcXVldWVy IEkgYmVsaWV2ZS4NCj4gPiA+ID4gPiBKdXN0Og0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gY29uc3Qg dWludDMyX3QgbmJfZWx0ID0gIGRxLT5lbHRfc2l6ZS84ICsgMTsgdWludDMyX3QgbjsNCj4gPiA+ ID4gPiB1aW50cHRyX3QgZWx0W25iX2VsdF07IC4uLg0KPiA+ID4gPiA+IG4gPSBydGVfcmluZ19k ZXF1ZXVlX2J1bGsoZHEtPnIsIGVsdCwgbmJfZWx0LCBOVUxMKTsgaWYgKG4gIT0gMCkNCj4gPiA+ ID4gPiB7ZHEtPmYoZHEtPnAsIGVsdCk7fQ0KPiA+ID4gPiBBZ3JlZSBvbiBidWxrIEFQSSB1c2Uu DQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBTZWVtcyBlbm91Z2guDQo+ID4gPiA+ID4g QWdhaW4gaW4gdGhhdCBjYXNlIHlvdSBjYW4gaGF2ZSBlbnF1ZXVlL3JlY2xhaW0gcnVubmluZyBp bg0KPiA+ID4gPiA+IGRpZmZlcmVudCB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LCBwbHVzIHlvdSBk b24ndCBuZWVkIGRxLT5lIGF0IGFsbC4NCj4gPiA+ID4gV2lsbCBjaGVjayBvbiBkcS0+ZQ0KPiA+ ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiArCQlkcS0+ZihkcS0+cCwgZHEtPmUpOw0KPiA+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJY250Kys7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJcnRlX2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9n X3R5cGUsDQo+ID4gPiA+ID4gPiArCQkiJXMoKTogUmVjbGFpbWVkICV1IHJlc291cmNlc1xuIiwg X19mdW5jX18sIGNudCk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCWlmIChjbnQgPT0g MCkgew0KPiA+ID4gPiA+ID4gKwkJLyogTm8gcmVzb3VyY2VzIHdlcmUgcmVjbGFpbWVkICovDQo+ ID4gPiA+ID4gPiArCQlydGVfZXJybm8gPSBFQUdBSU47DQo+ID4gPiA+ID4gPiArCQlyZXR1cm4g MTsNCj4gPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlyZXR1cm4g MDsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEknZCBzdWdnZXN0IHRvIHJldHVybiBjbnQgb24gc3Vj Y2Vzcy4NCj4gPiA+ID4gSSBhbSB0cnlpbmcgdG8ga2VlcCB0aGUgQVBJcyBzaW1wbGUuIEkgZG8g bm90IHNlZSBtdWNoIHVzZSBmb3IgJ2NudCcNCj4gPiA+ID4gYXMgcmV0dXJuIHZhbHVlIHRvIHRo ZSB1c2VyLiBJdCBleHBvc2VzIG1vcmUgZGV0YWlscyB3aGljaCBJIHRoaW5rDQo+ID4gPiA+IGFy ZSBpbnRlcm5hbA0KPiA+ID4gdG8gdGhlIGxpYnJhcnkuDQo+ID4gPg0KPiA+ID4gTm90IHN1cmUg d2hhdCBpcyB0aGUgaGFzc2xlIHRvIHJldHVybiBudW1iZXIgb2YgY29tcGxldGVkIHJlY2xhbWFp dGlvbnM/DQo+ID4gPiBJZiB1c2VyIGRvZXNuJ3QgbmVlZCB0aGF0IGluZm9ybWF0aW9uLCBoZSBz aW1wbHkgd291bGRuJ3QgdXNlIGl0Lg0KPiA+ID4gQnV0IG1pZ2h0IGJlIGl0IHdvdWxkIGJlIHVz ZWZ1bGwgLSBoZSBjYW4gZGVjaWRlIHNob3VsZCBoZSB0cnkNCj4gPiA+IGFub3RoZXIgYXR0ZW1w dCBvZiByZWNsYWltKCkgaW1tZWRpYXRlbHkgb3IgaXMgaXQgb2sgdG8gZG8gc29tZXRoaW5nIGVs c2UuDQo+ID4gVGhlcmUgaXMgbm8gaGFzc2xlIHRvIHJldHVybiB0aGF0IGluZm9ybWF0aW9uLg0K PiA+DQo+ID4gQXMgcGVyIHRoZSBjdXJyZW50IGRlc2lnbiwgdXNlciBjYWxscyAncmVjbGFpbScg d2hlbiBpdCBpcyBvdXQgb2YNCj4gPiByZXNvdXJjZXMgd2hpbGUgYWRkaW5nIGFuIGVudHJ5IHRv IHRoZSBkYXRhIHN0cnVjdHVyZS4gQXQgdGhhdCBwb2ludA0KPiA+IHRoZSB1c2VyIHdhbnRzIHRv IGtub3cgaWYgYXQgbGVhc3QgMSByZXNvdXJjZSB3YXMgcmVjbGFpbWVkIGJlY2F1c2UgdGhlDQo+ IHVzZXIgaGFzIHRvIGFsbG9jYXRlIDEgcmVzb3VyY2UuIEhlIGRvZXMgbm90IGhhdmUgYSB1c2Ug Zm9yIHRoZSBudW1iZXIgb2YNCj4gcmVzb3VyY2VzIHJlY2xhaW1lZC4NCj4gDQo+IE9rLCBidXQg d2h5IHVzZXIgY2FuJ3QgZGVjaWRlIHRvIGRvIHJlY2xhaW0gaW4gYWR2YW5jZSwgbGV0IHNheSB3 aGVuIGhlDQo+IGZvcmVzZWUgdGhhdCBoZSB3b3VsZCBuZWVkIGEgbG90IG9mIGFsbG9jYXRpb25z IGluIG5lYXJlc3QgZnV0dXJlPw0KPiBPciB3aGVuIHRoZXJlIGlzIHNvbWUgaWRsZSB0aW1lPyBP ciBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRoaW5ncz8NCj4gQXQgaGUgd291bGQgbGlrZSB0 byBmcmVlIHNvbWUgZXh0cmEgcmVzb3VyY2VzIGluIHRoYXQgY2FzZSB0byBtaW5pbWl6ZQ0KPiBu dW1iZXIgb2YgcmVjbGFpbXMgaW4gZnV0dXJlIHBlYWsgaW50ZXJ2YWw/DQpJZiB0aGUgdXNlciBo YXMgZnJlZSB0aW1lIGhlIGNhbiBjYWxsIHRoZSByZWNsYWltIEFQSS4gQnkgbWFraW5nIHRoZSBw YXJhbWV0ZXJzIGNvbmZpZ3VyYWJsZSwgaGUgc2hvdWxkIGJlIGFibGUgdG8gY29udHJvbCBob3cg bXVjaCBoZSBjYW4gcmVjbGFpbS4NCklmIHRoZSB1c2VyIHdhbnRzIHRvIG1ha2Ugc3VyZSB0aGF0 IGhlIGhhcyBlbm91Z2ggZnJlZSByZXNvdXJjZXMgZm9yIHRoZSBmdXR1cmUuIEhlIHNob3VsZCBi ZSBhYmxlIHRvIGRvIGl0IGJ5IGtub3dpbmcgaG93IG1hbnkgZnJlZSByZXNvdXJjZXMgYXJlIGF2 YWlsYWJsZSBpbiBoaXMgZGF0YSBzdHJ1Y3R1cmUgY3VycmVudGx5Lg0KQnV0LCBJIGRvIG5vdCBz ZWUgaXQgYXMgYSBwcm9ibGVtIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyByZWNs YWltZWQuIEkgd2lsbCBhZGQgdGhhdC4NCg0KPiANCj4gPg0KPiA+IElmIHRoaXMgQVBJIHJldHVy bnMgMCwgdGhlbiB0aGUgdXNlciBjYW4gZGVjaWRlIHRvIHJlcGVhdCB0aGUgY2FsbCBvcg0KPiA+ IHJldHVybiBmYWlsdXJlLiBCdXQgdGhhdCBkZWNpc2lvbiBkZXBlbmRzIG9uIHRoZSBsZW5ndGgg b2YgdGhlIGdyYWNlIHBlcmlvZA0KPiB3aGljaCBpcyB1bmRlciB1c2VyJ3MgY29udHJvbC4NCj4g Pg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsvKiBEZWxldGUgYSBkZWZlciBxdWV1ZS4gKi8NCj4gPiA+ID4gPiA+ ICtpbnQNCj4gPiA+ID4gPiA+ICtydGVfcmN1X3FzYnJfZHFfZGVsZXRlKHN0cnVjdCBydGVfcmN1 X3FzYnJfZHEgKmRxKSB7DQo+ID4gPiA+ID4gPiArCWlmIChkcSA9PSBOVUxMKSB7DQo+ID4gPiA+ ID4gPiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+ID4gPiA+ ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ ID4gPiA+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiA+ICsJLyogUmVjbGFpbSBhbGwgdGhlIHJlc291cmNlcyAqLw0KPiA+ID4gPiA+ID4gKwlpZiAo cnRlX3JjdV9xc2JyX2RxX3JlY2xhaW0oZHEpICE9IDApDQo+ID4gPiA+ID4gPiArCQkvKiBFcnJv ciBudW1iZXIgaXMgYWxyZWFkeSBzZXQgYnkgdGhlIHJlY2xhaW0gQVBJICovDQo+ID4gPiA+ID4g PiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEhvdyBkbyB5b3Uga25vdyB0aGF0 IHlvdSBoYXZlIHJlY2xhaW1lZCBldmVyeXRoaW5nPw0KPiA+ID4gPiBHb29kIHBvaW50LCB3aWxs IGNvbWUgYmFjayB3aXRoIGEgZGlmZmVyZW50IHNvbHV0aW9uLg0KPiA+ID4gPg0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCXJ0ZV9yaW5nX2ZyZWUoZHEtPnIpOw0KPiA+ ID4gPiA+ID4gKwlydGVfZnJlZShkcSk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCXJl dHVybiAwOw0KPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICBpbnQg cnRlX3JjdV9sb2dfdHlwZTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgUlRFX0lOSVQocnRl X3JjdV9yZWdpc3RlcikNCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JjdS9y dGVfcmN1X3FzYnIuaA0KPiA+ID4gPiA+ID4gYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIu aCBpbmRleCBjODBmMTVjMDAuLjE4NWQ0YjUwYQ0KPiA+ID4gPiA+ID4gMTAwNjQ0DQo+ID4gPiA+ ID4gPiAtLS0gYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+ID4gPiA+ID4gKysr IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gPiA+IEBAIC0zNCw2ICsz NCw3IEBAIGV4dGVybiAiQyIgeyAgI2luY2x1ZGUgPHJ0ZV9sY29yZS5oPg0KPiA+ID4gPiA+ID4g I2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPiAgI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gPiA+ID4g PiA+ICsjaW5jbHVkZSA8cnRlX3JpbmcuaD4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgZXh0 ZXJuIGludCBydGVfcmN1X2xvZ190eXBlOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEBAIC0x MDksNiArMTEwLDY3IEBAIHN0cnVjdCBydGVfcmN1X3FzYnIgew0KPiA+ID4gPiA+ID4gIAkgKi8N Cj4gPiA+ID4gPiA+ICB9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gKy8qKg0KPiA+ID4gPiA+ID4gKyAqIENhbGwgYmFjayBmdW5jdGlvbiBjYWxsZWQgdG8g ZnJlZSB0aGUgcmVzb3VyY2VzLg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogQHBh cmFtIHANCj4gPiA+ID4gPiA+ICsgKiAgIFBvaW50ZXIgcHJvdmlkZWQgd2hpbGUgY3JlYXRpbmcg dGhlIGRlZmVyIHF1ZXVlDQo+ID4gPiA+ID4gPiArICogQHBhcmFtIGUNCj4gPiA+ID4gPiA+ICsg KiAgIFBvaW50ZXIgdG8gdGhlIHJlc291cmNlIGRhdGEgc3RvcmVkIG9uIHRoZSBkZWZlciBxdWV1 ZQ0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ID4g KyAqICAgTm9uZQ0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gK3R5cGVkZWYgdm9pZCAo KnJ0ZV9yY3VfcXNicl9mcmVlX3Jlc291cmNlKSh2b2lkICpwLCB2b2lkICplKTsNCj4gPiA+ID4g Pg0KPiA+ID4gPiA+IFN0eWxpc2ggdGhpbmcgLSB1c3VhbGx5IGluIERQREsgd2UgaGF2ZSB0eXBl ZGYgbmV3dHlwZV90IC4uLg0KPiA+ID4gPiA+IFRob3VnaCBJIGFtIG5vdCBzdXJlIHlvdSBuZWVk IGEgbmV3IHR5cGVkZWYgYXQgYWxsIC0ganVzdCBhDQo+ID4gPiA+ID4gZnVuY3Rpb24gcG9pbnRl ciBpbnNpZGUgdGhlIHN0cnVjdCBzZWVtcyBlbm91Z2guDQo+ID4gPiA+IE90aGVyIGxpYnJhcmll cyAoZm9yIGV4OiBydGVfaGFzaCkgdXNlIHRoaXMgYXBwcm9hY2guIEkgdGhpbmsgaXQNCj4gPiA+ ID4gaXMgYmV0dGVyIHRvIGtlZXANCj4gPiA+IGl0IG91dCBvZiB0aGUgc3RydWN0dXJlIHRvIGFs bG93IGZvciBiZXR0ZXIgY29tbWVudGluZy4NCj4gPiA+DQo+ID4gPiBJIGFtIHNheWluZyBtYWpv cml0eSBvZiBEUERLIGNvZGUgdXNlIF90IHN1ZmZpeCBmb3IgdHlwZWRlZjoNCj4gPiA+IHR5cGVk ZWYgdm9pZCAoKnJ0ZV9yY3VfcXNicl9mcmVlX3Jlc291cmNlX3QpKHZvaWQgKnAsIHZvaWQgKmUp Ow0KPiA+IEFwb2xvZ2llcywgZ290IGl0LCB3aWxsIGNoYW5nZS4NCj4gPg0KPiA+ID4NCj4gPiA+ ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgUlRFX1JD VV9RU0JSX0RRX05BTUVTSVpFIFJURV9SSU5HX05BTUVTSVpFDQo+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gPiArICogIFRyaWdnZXIgYXV0b21hdGljIHJlY2xhbWF0 aW9uIGFmdGVyIDEvOHRoIHRoZSBkZWZlciBxdWV1ZSBpcyBmdWxsLg0KPiA+ID4gPiA+ID4gKyAq Lw0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX0FVVE9fUkVDTEFJTV9MSU1JVCAz DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gPiArICogIFJlY2xh aW0gYXQgdGhlIG1heCAxLzE2dGggdGhlIHRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMuDQo+ID4g PiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArI2RlZmluZSBSVEVfUkNVX1FTQlJfTUFYX1JFQ0xB SU1fTElNSVQgNA0KPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBBcyBJIHNhaWQgYWJv dmUsIEkgZG9uJ3QgdGhpbmsgdGhlc2UgdGhyZXNob2xkcyBuZWVkIHRvIGJlIGhhcmRjb2RlZC4N Cj4gPiA+ID4gPiBJbiBhbnkgY2FzZSwgdGhlcmUgc2VlbXMgbm90IG11Y2ggcG9pbnQgdG8gcHV0 IHRoZW0gaW4gdGhlDQo+ID4gPiA+ID4gcHVibGljIGhlYWRlcg0KPiA+ID4gZmlsZS4NCj4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ID4gKyAqIFBh cmFtZXRlcnMgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBkZWZlciBxdWV1ZS4NCj4gPiA+ID4gPiA+ ICsgKi8NCj4gPiA+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMgew0K PiA+ID4gPiA+ID4gKwljb25zdCBjaGFyICpuYW1lOw0KPiA+ID4gPiA+ID4gKwkvKio8IE5hbWUg b2YgdGhlIHF1ZXVlLiAqLw0KPiA+ID4gPiA+ID4gKwl1aW50MzJfdCBzaXplOw0KPiA+ID4gPiA+ ID4gKwkvKio8IE51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXVlLiBUeXBpY2FsbHksIHRoaXMgd2ls bCBiZQ0KPiA+ID4gPiA+ID4gKwkgKiAgIHRoZSBzYW1lIGFzIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBlbnRyaWVzIHN1cHBvcnRlZCBpbg0KPiB0aGUNCj4gPiA+ID4gPiA+ICsJICogICBsb2NrIGZy ZWUgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4gPiArCSAqICAgRGF0YSBzdHJ1Y3R1cmVzIHdp dGggdW5ib3VuZGVkIG51bWJlciBvZiBlbnRyaWVzIGlzIG5vdA0KPiA+ID4gPiA+ID4gKwkgKiAg IHN1cHBvcnRlZCBjdXJyZW50bHkuDQo+ID4gPiA+ID4gPiArCSAqLw0KPiA+ID4gPiA+ID4gKwl1 aW50MzJfdCBlc2l6ZTsNCj4gPiA+ID4gPiA+ICsJLyoqPCBTaXplIChpbiBieXRlcykgb2YgZWFj aCBlbGVtZW50IGluIHRoZSBkZWZlciBxdWV1ZS4NCj4gPiA+ID4gPiA+ICsJICogICBUaGlzIGhh cyB0byBiZSBtdWx0aXBsZSBvZiA4QiBhcyB0aGUgcnRlX3JpbmcgQVBJcw0KPiA+ID4gPiA+ID4g KwkgKiAgIHN1cHBvcnQgOEIgZWxlbWVudCBzaXplcyBvbmx5Lg0KPiA+ID4gPiA+ID4gKwkgKi8N Cj4gPiA+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2ZyZWVfcmVzb3VyY2UgZjsNCj4gPiA+ID4gPiA+ ICsJLyoqPCBGdW5jdGlvbiB0byBjYWxsIHRvIGZyZWUgdGhlIHJlc291cmNlLiAqLw0KPiA+ID4g PiA+ID4gKwl2b2lkICpwOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gU3R5bGUgbml0IGFnYWluIC0g SSBsaWtlIHNob3J0IG5hbWVzIG15c2VsZiwgYnV0IHRoYXQgc2VlbXMgYQ0KPiA+ID4gPiA+IGJp dCBleHRyZW1lLi4uIDopIE1pZ2h0IGJlIGF0IGxlYXN0Og0KPiA+ID4gPiA+IHZvaWQgKCpyZWNs YWltKSh2b2lkICosIHZvaWQgKik7DQo+ID4gPiA+IE1heSBiZSAnZnJlZV9mbic/DQo+ID4gPiA+ DQo+ID4gPiA+ID4gdm9pZCAqIHJlY2xhaW1fZGF0YTsNCj4gPiA+ID4gPiA/DQo+ID4gPiA+IFRo aXMgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIGZyZWUgdGhlIHJlc291 cmNlDQo+ID4gPiA+IGludG8uIEZvciBleDogSW4NCj4gPiA+IExQTSBkYXRhIHN0cnVjdHVyZSwg aXQgd2lsbCBiZSBwb2ludGVyIHRvIExQTS4gJ3JlY2xhaW1fZGF0YScNCj4gPiA+ID4gZG9lcyBu b3QgY29udmV5IHRoZSBtZWFuaW5nIGNvcnJlY3RseS4NCj4gPiA+DQo+ID4gPiBPaywgcGxlYXNl IGZyZWUgdG8gY29tZXVwIHdpdGggeW91ciBvd24gbmFtZXMuDQo+ID4gPiBJIGp1c3Qgd2FudGVk IHRvIHNheSB0aGF0ICdmJyBhbmQgJ3AnIGFyZSBhIGJpdCBhbiBleHRyZW1lIGZvciBwdWJsaWMg QVBJLg0KPiA+IG9rLCB0aGlzIGlzIHRoZSBoYXJkZXN0IHRoaW5nIHRvIGRvIPCfmIoNCj4gPg0K PiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwkvKio8IFBvaW50ZXIgcGFz c2VkIHRvIHRoZSBmcmVlIGZ1bmN0aW9uLiBUeXBpY2FsbHksIHRoaXMgaXMgdGhlDQo+ID4gPiA+ ID4gPiArCSAqICAgcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gd2hpY2ggdGhlIHJl c291cmNlIHRvDQo+IGZyZWUNCj4gPiA+ID4gPiA+ICsJICogICBiZWxvbmdzLiBUaGlzIGNhbiBi ZSBOVUxMLg0KPiA+ID4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gPiA+ICsJc3RydWN0IHJ0ZV9yY3Vf cXNiciAqdjsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IERvZXMgaXQgbmVlZCB0byBiZSBpbnNpZGUg dGhhdCBzdHJ1Y3Q/DQo+ID4gPiA+ID4gTWlnaHQgYmUgYmV0dGVyOg0KPiA+ID4gPiA+IHJ0ZV9y Y3VfcXNicl9kcV9jcmVhdGUoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgY29uc3Qgc3RydWN0DQo+ ID4gPiA+ID4gcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMgKnBhcmFtcyk7DQo+ID4gPiA+IFRo ZSBBUEkgdGFrZXMgYSBwYXJhbWV0ZXIgc3RydWN0dXJlIGFzIGlucHV0IGFueXdheSwgd2h5IHRv IGFkZA0KPiA+ID4gPiBhbm90aGVyIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbj8gUVNCUiB2YXJp YWJsZSBpcyBhbHNvIGFub3RoZXINCj4gcGFyYW1ldGVyLg0KPiA+ID4gPg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gQW5vdGhlciBhbHRlcm5hdGl2ZTogbWFrZSBib3RoIHJlY2xhaW0oKSBhbmQgZW5x dWV1ZSgpIHRvIHRha2Ugdg0KPiA+ID4gPiA+IGFzIGEgcGFyYW1ldGVyLg0KPiA+ID4gPiBCdXQg Ym90aCBvZiB0aGVtIG5lZWQgYWNjZXNzIHRvIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnMgcHJvdmlk ZWQgaW4NCj4gPiA+ID4gcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZSBBUEkuIFdlIHdvdWxkIGVuZCB1 cCBwYXNzaW5nIDIgYXJndW1lbnRzIHRvDQo+ID4gPiA+IHRoZQ0KPiA+ID4gZnVuY3Rpb25zLg0K PiA+ID4NCj4gPiA+IFB1cmUgc3R5bGlzaCB0aGluZy4NCj4gPiA+IEZyb20gbXkgcGVyc3BlY3Rp dmUgaXQganVzdCBwcm92aWRlcyBiZXR0ZXIgdmlzaWJpbGl0eSB3aGF0IGlzIGdvaW5nIGluIHRo ZQ0KPiBjb2RlOg0KPiA+ID4gRm9yIFFTQlIgdmFyICd2JyBjcmVhdGUgYSBuZXcgZGVmZXJyZWQg cXVldWUuDQo+ID4gPiBCdXQgbm8gc3Ryb25nIG9waW5pb24gaGVyZS4NCj4gPiA+DQo+ID4gPiA+ DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsJLyoqPCBSQ1UgUVNCUiB2YXJpYWJsZSB0byB1c2Ug Zm9yIHRoaXMgZGVmZXIgcXVldWUgKi8gfTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsv KiBSVEUgZGVmZXIgcXVldWUgc3RydWN0dXJlLg0KPiA+ID4gPiA+ID4gKyAqIFRoaXMgc3RydWN0 dXJlIGhvbGRzIHRoZSBkZWZlciBxdWV1ZS4gVGhlIGRlZmVyIHF1ZXVlIGlzDQo+ID4gPiA+ID4g PiArdXNlZCB0bw0KPiA+ID4gPiA+ID4gKyAqIGhvbGQgdGhlIGRlbGV0ZWQgZW50cmllcyBmcm9t IHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGFyZQ0KPiA+ID4gPiA+ID4gK25vdA0KPiA+ID4gPiA+ ID4gKyAqIHlldCBmcmVlZC4NCj4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ICtzdHJ1Y3Qg cnRlX3JjdV9xc2JyX2RxOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gIC8qKg0KPiA+ID4g PiA+ID4gICAqIEB3YXJuaW5nDQo+ID4gPiA+ID4gPiAgICogQGIgRVhQRVJJTUVOVEFMOiB0aGlz IEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gPiA+ID4gPiBAQA0KPiA+ ID4gPiA+ID4gLTY0OCw2ICs3MTAsMTEzIEBAIF9fcnRlX2V4cGVyaW1lbnRhbCAgaW50DQo+ID4g PiA+ID4gPiBydGVfcmN1X3FzYnJfZHVtcChGSUxFICpmLCBzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2 KTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gPiArICogQHdhcm5p bmcNCj4gPiA+ID4gPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ug d2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ID4gKyAqIENy ZWF0ZSBhIHF1ZXVlIHVzZWQgdG8gc3RvcmUgdGhlIGRhdGEgc3RydWN0dXJlIGVsZW1lbnRzDQo+ ID4gPiA+ID4gPiArdGhhdCBjYW4NCj4gPiA+ID4gPiA+ICsgKiBiZSBmcmVlZCBsYXRlci4gVGhp cyBxdWV1ZSBpcyByZWZlcnJlZCB0byBhcyAnZGVmZXIgcXVldWUnLg0KPiA+ID4gPiA+ID4gKyAq DQo+ID4gPiA+ID4gPiArICogQHBhcmFtIHBhcmFtcw0KPiA+ID4gPiA+ID4gKyAqICAgUGFyYW1l dGVycyB0byBjcmVhdGUgYSBkZWZlciBxdWV1ZS4NCj4gPiA+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ ID4gPiA+ID4gPiArICogICBPbiBzdWNjZXNzIC0gVmFsaWQgcG9pbnRlciB0byBkZWZlciBxdWV1 ZQ0KPiA+ID4gPiA+ID4gKyAqICAgT24gZXJyb3IgLSBOVUxMDQo+ID4gPiA+ID4gPiArICogICBQ b3NzaWJsZSBydGVfZXJybm8gY29kZXMgYXJlOg0KPiA+ID4gPiA+ID4gKyAqICAgLSBFSU5WQUwg LSBOVUxMIHBhcmFtZXRlcnMgYXJlIHBhc3NlZA0KPiA+ID4gPiA+ID4gKyAqICAgLSBFTk9NRU0g LSBOb3QgZW5vdWdoIG1lbW9yeQ0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gK19fcnRl X2V4cGVyaW1lbnRhbA0KPiA+ID4gPiA+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnJfZHEgKg0KPiA+ ID4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9jcmVhdGUoY29uc3Qgc3RydWN0DQo+ID4gPiA+ID4g PiArcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMgKnBhcmFtcyk7DQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gPiA+ICsg KiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3Rp Y2UNCj4gPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ID4gKyAqIEVucXVldWUgb25lIHJlc291cmNl IHRvIHRoZSBkZWZlciBxdWV1ZSBhbmQgc3RhcnQgdGhlIGdyYWNlDQo+IHBlcmlvZC4NCj4gPiA+ ID4gPiA+ICsgKiBUaGUgcmVzb3VyY2Ugd2lsbCBiZSBmcmVlZCBsYXRlciBhZnRlciBhdCBsZWFz dCBvbmUgZ3JhY2UNCj4gPiA+ID4gPiA+ICtwZXJpb2QNCj4gPiA+ID4gPiA+ICsgKiBpcyBvdmVy Lg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogSWYgdGhlIGRlZmVyIHF1ZXVlIGlz IGZ1bGwsIGl0IHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIHJlc291cmNlcy4NCj4gPiA+ID4gPiA+ ICsgKiBJdCB3aWxsIGFsc28gcmVjbGFpbSByZXNvdXJjZXMgYXQgcmVndWxhciBpbnRlcnZhbHMg dG8NCj4gPiA+ID4gPiA+ICthdm9pZA0KPiA+ID4gPiA+ID4gKyAqIHRoZSBkZWZlciBxdWV1ZSBm cm9tIGdyb3dpbmcgdG9vIGJpZy4NCj4gPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ID4gKyAqIFRo aXMgQVBJIGlzIG5vdCBtdWx0aS10aHJlYWQgc2FmZS4gSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUN Cj4gPiA+ID4gPiA+ICtjYWxsZXINCj4gPiA+ID4gPiA+ICsgKiBwcm92aWRlcyBtdWx0aS10aHJl YWQgc2FmZXR5IGJ5IGxvY2tpbmcgYSBtdXRleCBvciBzb21lIG90aGVyDQo+IG1lYW5zLg0KPiA+ ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogQSBsb2NrIGZyZWUgbXVsdGktdGhyZWFkIHdy aXRlciBhbGdvcml0aG0gY291bGQgYWNoaWV2ZQ0KPiA+ID4gPiA+ID4gK211bHRpLXRocmVhZA0K PiA+ID4gPiA+ID4gKyAqIHNhZmV0eSBieSBjcmVhdGluZyBhbmQgdXNpbmcgb25lIGRlZmVyIHF1 ZXVlIHBlciB0aHJlYWQuDQo+ID4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiA+ICsgKiBAcGFyYW0g ZHENCj4gPiA+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVlIHRvIGFsbG9jYXRlIGFuIGVudHJ5IGZy b20uDQo+ID4gPiA+ID4gPiArICogQHBhcmFtIGUNCj4gPiA+ID4gPiA+ICsgKiAgIFBvaW50ZXIg dG8gcmVzb3VyY2UgZGF0YSB0byBjb3B5IHRvIHRoZSBkZWZlciBxdWV1ZS4gVGhlIHNpemUgb2YN Cj4gPiA+ID4gPiA+ICsgKiAgIHRoZSBkYXRhIHRvIGNvcHkgaXMgZXF1YWwgdG8gdGhlIGVsZW1l bnQgc2l6ZSBwcm92aWRlZCB3aGVuIHRoZQ0KPiA+ID4gPiA+ID4gKyAqICAgZGVmZXIgcXVldWUg d2FzIGNyZWF0ZWQuDQo+ID4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ID4gKyAqICAg T24gc3VjY2VzcyAtIDANCj4gPiA+ID4gPiA+ICsgKiAgIE9uIGVycm9yIC0gMSB3aXRoIHJ0ZV9l cnJubyBzZXQgdG8NCj4gPiA+ID4gPiA+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJz IGFyZSBwYXNzZWQNCj4gPiA+ID4gPiA+ICsgKiAgIC0gRU5PU1BDIC0gRGVmZXIgcXVldWUgaXMg ZnVsbC4gVGhpcyBjb25kaXRpb24gY2FuIG5vdCBoYXBwZW4NCj4gPiA+ID4gPiA+ICsgKgkJaWYg dGhlIGRlZmVyIHF1ZXVlIHNpemUgaXMgZXF1YWwgKG9yIGxhcmdlcikgdGhhbiB0aGUNCj4gPiA+ ID4gPiA+ICsgKgkJbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4NCj4g PiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ID4g PiA+ICtpbnQNCj4gPiA+ID4gPiA+ICtydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShzdHJ1Y3QgcnRl X3JjdV9xc2JyX2RxICpkcSwgdm9pZCAqZSk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAr LyoqDQo+ID4gPiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gPiA+ICsgKiBAYiBFWFBFUklN RU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiA+ID4g PiA+ICsgKg0KPiA+ID4gPiA+ID4gKyAqIFJlY2xhaW0gcmVzb3VyY2VzIGZyb20gdGhlIGRlZmVy IHF1ZXVlLg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogVGhpcyBBUEkgaXMgbm90 IG11bHRpLXRocmVhZCBzYWZlLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZQ0KPiA+ID4gPiA+ID4g K2NhbGxlcg0KPiA+ID4gPiA+ID4gKyAqIHByb3ZpZGVzIG11bHRpLXRocmVhZCBzYWZldHkgYnkg bG9ja2luZyBhIG11dGV4IG9yIHNvbWUgb3RoZXINCj4gbWVhbnMuDQo+ID4gPiA+ID4gPiArICoN Cj4gPiA+ID4gPiA+ICsgKiBBIGxvY2sgZnJlZSBtdWx0aS10aHJlYWQgd3JpdGVyIGFsZ29yaXRo bSBjb3VsZCBhY2hpZXZlDQo+ID4gPiA+ID4gPiArbXVsdGktdGhyZWFkDQo+ID4gPiA+ID4gPiAr ICogc2FmZXR5IGJ5IGNyZWF0aW5nIGFuZCB1c2luZyBvbmUgZGVmZXIgcXVldWUgcGVyIHRocmVh ZC4NCj4gPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ID4gKyAqIEBwYXJhbSBkcQ0KPiA+ID4gPiA+ ID4gKyAqICAgRGVmZXIgcXVldWUgdG8gcmVjbGFpbSBhbiBlbnRyeSBmcm9tLg0KPiA+ID4gPiA+ ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiA+ICsgKiAgIE9uIHN1Y2Nlc3NmdWwgcmVjbGFtYXRp b24gb2YgYXQgbGVhc3QgMSByZXNvdXJjZSAtIDANCj4gPiA+ID4gPiA+ICsgKiAgIE9uIGVycm9y IC0gMSB3aXRoIHJ0ZV9lcnJubyBzZXQgdG8NCj4gPiA+ID4gPiA+ICsgKiAgIC0gRUlOVkFMIC0g TlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQNCj4gPiA+ID4gPiA+ICsgKiAgIC0gRUFHQUlOIC0g Tm9uZSBvZiB0aGUgcmVzb3VyY2VzIGhhdmUgY29tcGxldGVkIGF0IGxlYXN0IDENCj4gZ3JhY2UN Cj4gPiA+ID4gPiBwZXJpb2QsDQo+ID4gPiA+ID4gPiArICoJCXRyeSBhZ2Fpbi4NCj4gPiA+ID4g PiA+ICsgKi8NCj4gPiA+ID4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ID4gPiA+ICtp bnQNCj4gPiA+ID4gPiA+ICtydGVfcmN1X3FzYnJfZHFfcmVjbGFpbShzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxICpkcSk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4g PiArICogQHdhcm5pbmcNCj4gPiA+ID4gPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJ IG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiA+ID4gPiA+ICsgKg0KPiA+ID4g PiA+ID4gKyAqIERlbGV0ZSBhIGRlZmVyIHF1ZXVlLg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ ID4gPiArICogSXQgdHJpZXMgdG8gcmVjbGFpbSBhbGwgdGhlIHJlc291cmNlcyBvbiB0aGUgZGVm ZXIgcXVldWUuDQo+ID4gPiA+ID4gPiArICogSWYgYW55IG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBu b3QgY29tcGxldGVkIHRoZSBncmFjZQ0KPiA+ID4gPiA+ID4gK3BlcmlvZA0KPiA+ID4gPiA+ID4g KyAqIHRoZSByZWNsYW1hdGlvbiBzdG9wcyBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gVGhlIHJl c3Qgb2YNCj4gPiA+ID4gPiA+ICsgKiB0aGUgcmVzb3VyY2VzIGFyZSBub3QgcmVjbGFpbWVkIGFu ZCB0aGUgZGVmZXIgcXVldWUgaXMgbm90DQo+ID4gPiA+ID4gPiArICogZnJlZWQuDQo+ID4gPiA+ ID4gPiArICoNCj4gPiA+ID4gPiA+ICsgKiBAcGFyYW0gZHENCj4gPiA+ID4gPiA+ICsgKiAgIERl ZmVyIHF1ZXVlIHRvIGRlbGV0ZS4NCj4gPiA+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ID4g PiArICogICBPbiBzdWNjZXNzIC0gMA0KPiA+ID4gPiA+ID4gKyAqICAgT24gZXJyb3IgLSAxDQo+ ID4gPiA+ID4gPiArICogICBQb3NzaWJsZSBydGVfZXJybm8gY29kZXMgYXJlOg0KPiA+ID4gPiA+ ID4gKyAqICAgLSBFSU5WQUwgLSBOVUxMIHBhcmFtZXRlcnMgYXJlIHBhc3NlZA0KPiA+ID4gPiA+ ID4gKyAqICAgLSBFQUdBSU4gLSBTb21lIG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBub3QgY29tcGxl dGVkIGF0IGxlYXN0IDENCj4gPiA+IGdyYWNlDQo+ID4gPiA+ID4gPiArICoJCXBlcmlvZCwgdHJ5 IGFnYWluLg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gK19fcnRlX2V4cGVyaW1lbnRh bA0KPiA+ID4gPiA+ID4gK2ludA0KPiA+ID4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9kZWxldGUo c3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqZHEpOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g ICNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+ICAjZW5kaWYN Cj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnJfcHZ0 LmgNCj4gPiA+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4g PiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiA+ID4gaW5kZXggMDAwMDAwMDAw Li4yMTIyYmMzNmENCj4gPiA+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gPiA+ICsrKyBi L2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNicl9wdnQuaA0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g QWdhaW4gc3R5bGUgc3VnZ2VzdGlvbjogYXMgaXQgaXMgbm90IHB1YmxpYyBoZWFkZXIgLSBkb24n dCB1c2UNCj4gPiA+ID4gPiBydGVfIHByZWZpeCBmb3IgbmFtaW5nLg0KPiA+ID4gPiA+IEZyb20g bXkgcGVyc3BlY3RpdmUgLSBlYXNpZXIgdG8gcmVsYWxpemUgZm9yIHJlYWRlciB3aGF0IGlzDQo+ ID4gPiA+ID4gcHVibGljIGhlYWRlciwgd2hhdCBpcyBub3QuDQo+ID4gPiA+IExvb2tzIGxpa2Ug dGhlIGd1aWRlbGluZXMgYXJlIG5vdCBkZWZpbmVkIHZlcnkgd2VsbC4gSSBzZWUgb25lDQo+ID4g PiA+IHByaXZhdGUgZmlsZSB3aXRoIHJ0ZV8gcHJlZml4LiBJIHNlZSBTdGVwaGVuIG5vdCB1c2lu ZyBydGVfDQo+ID4gPiA+IHByZWZpeC4gSSBkbyBub3QgaGF2ZSBhbnkNCj4gPiA+IHByZWZlcmVu Y2UuIEJ1dCwgYSBjb25zaXN0ZW50IGFwcHJvYWNoIGlzIHJlcXVpcmVkLg0KPiA+ID4NCj4gPiA+ IFRoYXQncyBqdXN0IGEgc3VnZ2VzdGlvbi4NCj4gPiA+IEZvciBtZSAoYW5kIEkgaG9wZSBmb3Ig b3RoZXJzKSBpdCB3b3VsZCBiZSBhIGJpdCBlYXNpZXIuDQo+ID4gPiBXaGVuIGxvb2tpbmcgYXQg dGhlIGNvZGUgZm9yIGZpcnN0IHRpbWUgSSBoYWQgdG8gbG9vayBhIHQNCj4gPiA+IG1lc29uLmJ1 aWxkIHRvIGNoZWNrIGlzIGl0IGEgcHVibGljIGhlYWRlciBvciBub3QuDQo+ID4gPiBJZiB0aGUg ZmlsZSBkb2Vzbid0IGhhdmUgJ3J0ZV8nIHByZWZpeCwgSSBhc3N1bWUgdGhhdCBpdCBpcyBhbg0K PiA+ID4gaW50ZXJuYWwgb25lIHN0cmFpZ2h0d2F5Lg0KPiA+ID4gQnV0ICwgYXMgeW91IHNhaWQs IHRoZXJlIGlzIG5vIGV4YWN0IGd1aWRlbGluZXMgaGVyZSwgc28gdXAgdG8geW91IHRvIGRlY2lk ZS4NCj4gPiBJIHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIHJlbW92ZSAncnRlXycgcHJlZml4LiBJ IHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGZpbGUNCj4gbmFtZSB0byBoYXZlICdfcHJpdmF0ZScgc3Vm Zml4Lg0KPiA+IFRoZXJlIGFyZSBzb21lIGluY29uc2lzdGVuY2llcyBpbiB0aGUgZXhpc3Rpbmcg Y29kZSwgd2lsbCBzZW5kIGEgcGF0Y2ggdG8NCj4gY29ycmVjdCB0aGVtIHRvIGZvbGxvdyB0aGlz IGFwcHJvYWNoLg0KPiA+DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBA QCAtMCwwICsxLDQ2IEBADQo+ID4gPiA+ID4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0zLUNsYXVzZQ0KPiA+ID4gPiA+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBBcm0gTGlt aXRlZCAgKi8NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsjaWZuZGVmIF9SVEVfUkNVX1FT QlJfUFZUX0hfDQo+ID4gPiA+ID4gPiArI2RlZmluZSBfUlRFX1JDVV9RU0JSX1BWVF9IXw0KPiA+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ID4gKyAqIFRoaXMgZmlsZSBp cyBwcml2YXRlIHRvIHRoZSBSQ1UgbGlicmFyeS4gSXQgc2hvdWxkIG5vdCBiZQ0KPiA+ID4gPiA+ ID4gK2luY2x1ZGVkDQo+ID4gPiA+ID4gPiArICogYnkgdGhlIHVzZXIgb2YgdGhpcyBsaWJyYXJ5 Lg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyNpZmRlZiBf X2NwbHVzcGx1cw0KPiA+ID4gPiA+ID4gK2V4dGVybiAiQyIgew0KPiA+ID4gPiA+ID4gKyNlbmRp Zg0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlICJydGVfcmN1X3FzYnIuaCIN Cj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBSVEUgZGVmZXIgcXVldWUgc3RydWN0dXJl Lg0KPiA+ID4gPiA+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBkZWZlciBxdWV1ZS4g VGhlIGRlZmVyIHF1ZXVlIGlzDQo+ID4gPiA+ID4gPiArdXNlZCB0bw0KPiA+ID4gPiA+ID4gKyAq IGhvbGQgdGhlIGRlbGV0ZWQgZW50cmllcyBmcm9tIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGFy ZQ0KPiA+ID4gPiA+ID4gK25vdA0KPiA+ID4gPiA+ID4gKyAqIHlldCBmcmVlZC4NCj4gPiA+ID4g PiA+ICsgKi8NCj4gPiA+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxIHsNCj4gPiA+ID4g PiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNiciAqdjsgLyoqPCBSQ1UgUVNCUiB2YXJpYWJsZSB1c2Vk IGJ5IHRoaXMNCj4gcXVldWUuKi8NCj4gPiA+ID4gPiA+ICsJc3RydWN0IHJ0ZV9yaW5nICpyOyAg ICAgLyoqPCBSQ1UgUVNCUiBkZWZlciBxdWV1ZS4gKi8NCj4gPiA+ID4gPiA+ICsJdWludDMyX3Qg c2l6ZTsNCj4gPiA+ID4gPiA+ICsJLyoqPCBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGRlZmVy IHF1ZXVlICovDQo+ID4gPiA+ID4gPiArCXVpbnQzMl90IGVzaXplOw0KPiA+ID4gPiA+ID4gKwkv Kio8IFNpemUgKGluIGJ5dGVzKSBvZiBkYXRhIHN0b3JlZCBvbiB0aGUgZGVmZXIgcXVldWUgKi8N Cj4gPiA+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2ZyZWVfcmVzb3VyY2UgZjsNCj4gPiA+ID4gPiA+ ICsJLyoqPCBGdW5jdGlvbiB0byBjYWxsIHRvIGZyZWUgdGhlIHJlc291cmNlLiAqLw0KPiA+ID4g PiA+ID4gKwl2b2lkICpwOw0KPiA+ID4gPiA+ID4gKwkvKio8IFBvaW50ZXIgcGFzc2VkIHRvIHRo ZSBmcmVlIGZ1bmN0aW9uLiBUeXBpY2FsbHksIHRoaXMgaXMgdGhlDQo+ID4gPiA+ID4gPiArCSAq ICAgcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gd2hpY2ggdGhlIHJlc291cmNlIHRv DQo+IGZyZWUNCj4gPiA+ID4gPiA+ICsJICogICBiZWxvbmdzLg0KPiA+ID4gPiA+ID4gKwkgKi8N Cj4gPiA+ID4gPiA+ICsJY2hhciBlWzBdOw0KPiA+ID4gPiA+ID4gKwkvKio8IFRlbXBvcmFyeSBz dG9yYWdlIHRvIGNvcHkgdGhlIGRlZmVyIHF1ZXVlIGVsZW1lbnQuICovDQo+ID4gPiA+ID4NCj4g PiA+ID4gPiBEbyB5b3UgcmVhbGx5IG5lZWQgJ2UnIGF0IGFsbD8NCj4gPiA+ID4gPiBDYW4ndCBp dCBiZSBqdXN0IHRlbXBvcmFyeSBzdGFjayB2YXJpYWJsZT8NCj4gPiA+ID4gT2ssIHdpbGwgY2hl Y2suDQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICt9Ow0KPiA+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ID4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ID4gPiA+ID4gK30NCj4gPiA+ID4g PiA+ICsjZW5kaWYNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsjZW5kaWYgLyogX1JURV9S Q1VfUVNCUl9QVlRfSF8gKi8NCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Jj dS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4gPiA+ID4gPiBiL2xpYi9saWJydGVfcmN1L3J0ZV9y Y3VfdmVyc2lvbi5tYXANCj4gPiA+ID4gPiA+IGluZGV4IGY4YjllZjJhYi4uZGZhYzg4YTM3IDEw MDY0NA0KPiA+ID4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1h cA0KPiA+ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0K PiA+ID4gPiA+ID4gQEAgLTgsNiArOCwxMCBAQCBFWFBFUklNRU5UQUwgew0KPiA+ID4gPiA+ID4g IAlydGVfcmN1X3FzYnJfc3luY2hyb25pemU7DQo+ID4gPiA+ID4gPiAgCXJ0ZV9yY3VfcXNicl90 aHJlYWRfcmVnaXN0ZXI7DQo+ID4gPiA+ID4gPiAgCXJ0ZV9yY3VfcXNicl90aHJlYWRfdW5yZWdp c3RlcjsNCj4gPiA+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZTsNCj4gPiA+ID4gPiA+ ICsJcnRlX3JjdV9xc2JyX2RxX2VucXVldWU7DQo+ID4gPiA+ID4gPiArCXJ0ZV9yY3VfcXNicl9k cV9yZWNsYWltOw0KPiA+ID4gPiA+ID4gKwlydGVfcmN1X3FzYnJfZHFfZGVsZXRlOw0KPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+ICAJbG9jYWw6ICo7DQo+ID4gPiA+ID4gPiAgfTsNCj4gPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5kZXgN Cj4gPiA+ID4gPiA+IGU1ZmY4Mzg5My4uMGUxYmU4NDA3IDEwMDY0NA0KPiA+ID4gPiA+ID4gLS0t IGEvbGliL21lc29uLmJ1aWxkDQo+ID4gPiA+ID4gPiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4g PiA+ID4gPiA+IEBAIC0xMSw3ICsxMSw5IEBADQo+ID4gPiA+ID4gPiAgbGlicmFyaWVzID0gWw0K PiA+ID4gPiA+ID4gIAkna3ZhcmdzJywgIyBlYWwgZGVwZW5kcyBvbiBrdmFyZ3MNCj4gPiA+ID4g PiA+ICAJJ2VhbCcsICMgZXZlcnl0aGluZyBkZXBlbmRzIG9uIGVhbA0KPiA+ID4gPiA+ID4gLQkn cmluZycsICdtZW1wb29sJywgJ21idWYnLCAnbmV0JywgJ21ldGVyJywgJ2V0aGRldicsICdwY2kn LCAjIGNvcmUNCj4gPiA+ID4gPiA+ICsJJ3JpbmcnLA0KPiA+ID4gPiA+ID4gKwkncmN1JywgIyBy Y3UgZGVwZW5kcyBvbiByaW5nDQo+ID4gPiA+ID4gPiArCSdtZW1wb29sJywgJ21idWYnLCAnbmV0 JywgJ21ldGVyJywgJ2V0aGRldicsICdwY2knLCAjIGNvcmUNCj4gPiA+ID4gPiA+ICAJJ2NtZGxp bmUnLA0KPiA+ID4gPiA+ID4gIAknbWV0cmljcycsICMgYml0cmF0ZS9sYXRlbmN5IHN0YXRzIGRl cGVuZHMgb24gdGhpcw0KPiA+ID4gPiA+ID4gIAknaGFzaCcsICAgICMgZWZkIGRlcGVuZHMgb24g dGhpcw0KPiA+ID4gPiA+ID4gQEAgLTIyLDcgKzI0LDcgQEAgbGlicmFyaWVzID0gWw0KPiA+ID4g PiA+ID4gIAknZ3JvJywgJ2dzbycsICdpcF9mcmFnJywgJ2pvYnN0YXRzJywNCj4gPiA+ID4gPiA+ ICAJJ2tuaScsICdsYXRlbmN5c3RhdHMnLCAnbHBtJywgJ21lbWJlcicsDQo+ID4gPiA+ID4gPiAg CSdwb3dlcicsICdwZHVtcCcsICdyYXdkZXYnLA0KPiA+ID4gPiA+ID4gLQkncmN1JywgJ3Jlb3Jk ZXInLCAnc2NoZWQnLCAnc2VjdXJpdHknLCAnc3RhY2snLCAndmhvc3QnLA0KPiA+ID4gPiA+ID4g KwkncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScsICdzdGFjaycsICd2aG9zdCcsDQo+ID4g PiA+ID4gPiAgCSMgaXBzZWMgbGliIGRlcGVuZHMgb24gbmV0LCBjcnlwdG8gYW5kIHNlY3VyaXR5 DQo+ID4gPiA+ID4gPiAgCSdpcHNlYycsDQo+ID4gPiA+ID4gPiAgCSMgYWRkIHBrdCBmcmFtZXdv cmsgbGlicyB3aGljaCB1c2Ugb3RoZXIgbGlicyBmcm9tIGFib3ZlDQo+ID4gPiA+ID4gPiAtLQ0K PiA+ID4gPiA+ID4gMi4xNy4xDQoNCg==