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 BB6BAA2EFC for ; Sun, 13 Oct 2019 05:03:11 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7AD7F1D127; Sun, 13 Oct 2019 05:03:10 +0200 (CEST) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10071.outbound.protection.outlook.com [40.107.1.71]) by dpdk.org (Postfix) with ESMTP id F175C1C23F for ; Sun, 13 Oct 2019 05:03:08 +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=Ir3VhAipsQ/bK6AQenCI0DjOGjSxRk6kRHN24PfjU80=; b=x75LwStVK56O984+dHDZ1GHX2lPLoZmxNXOu1Xv5rgKhzP5Mhanr/S64OQ7cAYC3RNoKeS5O89qpaVc1IMnXhvpU0o2gp7obDCX/F08i+3NsXTBm3XWlwgP7fP4v4baS2eiJ3Ab0jb9fQUa0upY9znJVPKUWbi+nf7chf6HPGD8= Received: from HE1PR0802CA0017.eurprd08.prod.outlook.com (2603:10a6:3:bd::27) by AM5PR0801MB1858.eurprd08.prod.outlook.com (2603:10a6:203:47::19) 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 03:03:04 +0000 Received: from AM5EUR03FT007.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e08::204) by HE1PR0802CA0017.outlook.office365.com (2603:10a6:3:bd::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2347.17 via Frontend Transport; Sun, 13 Oct 2019 03:03:04 +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 AM5EUR03FT007.mail.protection.outlook.com (10.152.16.145) 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 03:03:03 +0000 Received: ("Tessian outbound 851a1162fca7:v33"); Sun, 13 Oct 2019 03:03:02 +0000 X-CR-MTA-TID: 64aa7808 Received: from 96d6060de19d.2 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.6.50]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id DC65AF36-19FE-4BAC-9D82-A85E35BB4CBC.1; Sun, 13 Oct 2019 03:02:57 +0000 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02lp2050.outbound.protection.outlook.com [104.47.6.50]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 96d6060de19d.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Sun, 13 Oct 2019 03:02:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eZI/AG0Oh1lWV8xBm1yqC+0VDX6RTERCPbhTjw78cV0wbgL7HQGcr4uBZMmey0e7BAp9miqB0UJhSCoR1psIvN/sGuvdUXTTkNurWUdeS6aA9o5xQs1f0LFlvU5FFx9ykIucO/sYrqM2zHYLMwF5YrFcxVDy3jvZYkdyD/4VDhwsb4jir0yOd5TLo+BgujFDMSz2he9CK7BR++lMPCEUMeLNtbux79v2z3Evv8lLLvaPzYAIo2+HayYBLAj5MwakTW638fBx/PYEgOiStyjnX8SydLyu3nbDkP6MuRSY7PO5v1D9Kd0JoRN9t2AxxByUK/Voyv2xHKbga8lSacUJ7w== 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=Ir3VhAipsQ/bK6AQenCI0DjOGjSxRk6kRHN24PfjU80=; b=i+VQKUJFqKfmJOLCL9D87tQJui6G7fJesxEScjCGLUm7lqkTdbda57JTbrkuDlVli5FmQ/WtL2FnEXndkoBenO3WQfYyQmTtCg6Iz6LkjqhgYEW74zQsTGiTorvJMXtTQuAET1GIyIJo52U7TUWSnppxn5tBTiqOS3uzNg9uaaHpybK6nbC6Zft2D/YLaEvdrBEt1S1oUMjgTz2WhnCVapgrlZlzZzdK0Hws/B6bBCpgJRpooArq7tKkCQ645liT3z4cNh7nNZnvE0owBIQNjAGGxuGk5WJxpWzFWYl0dyTkC8H4kxVxg0mMjcVnqK9iDIPPY+P5UfQgWcxy82DZrA== 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=Ir3VhAipsQ/bK6AQenCI0DjOGjSxRk6kRHN24PfjU80=; b=x75LwStVK56O984+dHDZ1GHX2lPLoZmxNXOu1Xv5rgKhzP5Mhanr/S64OQ7cAYC3RNoKeS5O89qpaVc1IMnXhvpU0o2gp7obDCX/F08i+3NsXTBm3XWlwgP7fP4v4baS2eiJ3Ab0jb9fQUa0upY9znJVPKUWbi+nf7chf6HPGD8= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.27) by VE1PR08MB5151.eurprd08.prod.outlook.com (20.179.31.76) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.18; Sun, 13 Oct 2019 03:02:55 +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 03:02:55 +0000 From: Honnappa Nagarahalli To: "Medvedkin, Vladimir" , "konstantin.ananyev@intel.com" , "stephen@networkplumber.org" , "paulmck@linux.ibm.com" CC: "yipeng1.wang@intel.com" , "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: AQHVfRDLTYoyC+jQPke5IV6aKytntadRvqIw Date: Sun, 13 Oct 2019 03:02:55 +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> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: e6240797-5e45-4651-9ee5-a26c362c5137.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: ed63c39f-4c59-419b-41a6-08d74f89dcec X-MS-Office365-Filtering-HT: Tenant X-MS-TrafficTypeDiagnostic: VE1PR08MB5151:|VE1PR08MB5151:|AM5PR0801MB1858: X-MS-Exchange-PUrlCount: 1 x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:4303;OLM:4303; x-forefront-prvs: 01894AD3B8 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(136003)(376002)(366004)(396003)(346002)(39860400002)(199004)(189003)(51234002)(99286004)(4326008)(966005)(2906002)(256004)(14444005)(14454004)(66066001)(2501003)(30864003)(5660300002)(25786009)(52536014)(8936002)(8676002)(81156014)(6436002)(33656002)(2201001)(478600001)(71200400001)(71190400001)(81166006)(6246003)(55016002)(486006)(476003)(316002)(54906003)(66556008)(229853002)(6306002)(110136005)(6506007)(9686003)(446003)(305945005)(53546011)(7736002)(76176011)(74316002)(7696005)(11346002)(3846002)(102836004)(26005)(186003)(66946007)(6116002)(76116006)(66446008)(64756008)(86362001)(66476007)(21314003)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB5151; 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: T1AgGPuurOnU6Tax0XsfM1SseaSs3aWDyl4G65NRfzYoer9tgIIl12bEKvYqpzWmcZPZH60U5SmJDzlQ5qS4IyRr5ZLguG3Cb0r7TSqgL45tJBRylmi2Vu7zn6gxAweB/9uNsE7OprZdCgrA5JkHDjqhU9/hMjNTa+OwByi0FWOy6Q3YAuQKbCgDAN2FZYKxu2Ru4zouymFVEB8JHu6E8YYOMamjF+tH5S2rkgcUXeCdKclAaF/OdvAqcbiKd5ubOnSYxdOzqVKn/2fqrsSD7sEcn75Nx9q5JL5wsy493ujd21/nGFn+COnSdWmjnDsnYsH1XOMnB3RyEZ9ZqGoM4BPn41BKzUJwO05tNvpajDtbkrboz8/XHpPSzgBoHXg11Jx0+ppWnLjOS6tmtc44RXoz5swaEMThFLzOTGBVvk/c7qV4eJKhh/Oo/Xt9hz6RLnIw5fgswwwq1hazkFgvkw== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5151 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT007.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)(396003)(39860400002)(376002)(346002)(136003)(51234002)(189003)(199004)(336012)(47776003)(11346002)(66066001)(36906005)(81156014)(22756006)(81166006)(316002)(110136005)(54906003)(8676002)(436003)(446003)(486006)(76130400001)(26826003)(63350400001)(126002)(14454004)(478600001)(70586007)(6246003)(8936002)(4326008)(966005)(5660300002)(476003)(70206006)(52536014)(30864003)(25786009)(2906002)(6116002)(3846002)(55016002)(9686003)(6306002)(7696005)(99286004)(50466002)(102836004)(186003)(33656002)(76176011)(2486003)(23676004)(356004)(6506007)(53546011)(2501003)(86362001)(14444005)(229853002)(2201001)(305945005)(74316002)(7736002)(26005)(21314003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0801MB1858; 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: 168d7aa3-69ad-4373-dd98-08d74f89d86e NoDisclaimer: True X-Forefront-PRVS: 01894AD3B8 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /fs7dMeE7AbLsFOnoFyxzvH52+o/Xd3+b7AqN+Pi6iHzqj2HYI+bVVmlxkFT5oVshP8hU1R5q8glV1j38TH0I0A7E1uA+Vul6cwkDAoIxyRw2FyaqraLp9/yquC/9ErtmQcSjOPzsFktY4CwRXRf15LL+dCId6zY+HNfJkVkO+IHu0owscdAFw+xF5VT6HxIp8zE9AAG2seVRFBxiHEp722Jjo54R/CC5GZZDdvzDGzrIXz6gi0cnRI57l8w6I3XeJPozwevqPKDG7/x6ZrFFzxcuEoRTqqFBizsYe+WdbR5jIDWvTimUfoX1ZY1f4mu7rcFool48co5bBWknMfWRhuiMItn31K42FjdxwSRvKtd3Yiu5VF8ntBdQl4xCJwN1+CTtEJaB7B8DCfMnV4fm/BNrfcM9sW0szYqymn2GLfw5WgvBWyDlpJsZjp2KTQDqjgORhkMUEdoAU+qVhqh/w== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2019 03:03:03.0858 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ed63c39f-4c59-419b-41a6-08d74f89dcec 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: AM5PR0801MB1858 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" SGkgVmxhZGltaXIsDQoJQXBvbG9naWVzIGZvciB0aGUgZGVsYXllZCByZXNwb25zZSwgSSBoYWQg dG8gcnVuIGZldyBleHBlcmltZW50cy4NCg0KPHNuaXA+DQoNCj4gDQo+IEhpIEhvbm5hcHBhLA0K PiANCj4gT24gMDEvMTAvMjAxOSAwNzoyOSwgSG9ubmFwcGEgTmFnYXJhaGFsbGkgd3JvdGU6DQo+ ID4gQWRkIHJlc291cmNlIHJlY2xhbWF0aW9uIEFQSXMgdG8gbWFrZSBpdCBzaW1wbGUgZm9yIGFw cGxpY2F0aW9ucyBhbmQNCj4gPiBsaWJyYXJpZXMgdG8gaW50ZWdyYXRlIHJ0ZV9yY3UgbGlicmFy eS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxob25uYXBw YS5uYWdhcmFoYWxsaUBhcm0uY29tPg0KPiA+IFJldmlld2VkLWJ5OiBPbGEgTGlsamVkaGFsIDxv bGEubGlsamVkaGFsQGFybS5jb20+DQo+ID4gUmV2aWV3ZWQtYnk6IFJ1aWZlbmcgV2FuZyA8cnVp ZmVuZy53YW5nQGFybS5jb20+DQo+ID4gLS0tDQo+ID4gICBhcHAvdGVzdC90ZXN0X3JjdV9xc2Jy LmMgICAgICAgICAgIHwgMjkxICsrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+ID4gICBs aWIvbGlicnRlX3JjdS9tZXNvbi5idWlsZCAgICAgICAgIHwgICAyICsNCj4gPiAgIGxpYi9saWJy dGVfcmN1L3J0ZV9yY3VfcXNici5jICAgICAgfCAxODUgKysrKysrKysrKysrKysrKysrDQo+ID4g ICBsaWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaCAgICAgIHwgMTY5ICsrKysrKysrKysrKysr KysrDQo+ID4gICBsaWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnJfcHZ0LmggIHwgIDQ2ICsrKysr DQo+ID4gICBsaWIvbGlicnRlX3JjdS9ydGVfcmN1X3ZlcnNpb24ubWFwIHwgICA0ICsNCj4gPiAg IGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0NCj4gPiAgIDcgZmls ZXMgY2hhbmdlZCwgNzAwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQo+ID4gICBjcmVh dGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4NCj4g PiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3QvdGVzdF9yY3VfcXNici5jIGIvYXBwL3Rlc3QvdGVzdF9y Y3VfcXNici5jIGluZGV4DQo+ID4gZDFiOWU0NmEyLi4zYTY4MTUyNDMgMTAwNjQ0DQo+ID4gLS0t IGEvYXBwL3Rlc3QvdGVzdF9yY3VfcXNici5jDQo+ID4gKysrIGIvYXBwL3Rlc3QvdGVzdF9yY3Vf cXNici5jDQo+ID4gQEAgLTEsOCArMSw5IEBADQo+ID4gICAvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gLSAqIENvcHlyaWdodCAoYykgMjAxOCBBcm0gTGltaXRl ZA0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQXJtIExpbWl0ZWQNCj4gPiAgICAqLw0KPiA+ DQo+ID4gICAjaW5jbHVkZSA8c3RkaW8uaD4NCj4gPiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+ ICAgI2luY2x1ZGUgPHJ0ZV9wYXVzZS5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9yY3VfcXNici5o Pg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9oYXNoLmg+DQo+ID4gQEAgLTMzLDYgKzM0LDcgQEAgc3Rh dGljIHVpbnQzMl90ICprZXlzOw0KPiA+ICAgI2RlZmluZSBDT1VOVEVSX1ZBTFVFIDQwOTYNCj4g PiAgIHN0YXRpYyB1aW50MzJfdCAqaGFzaF9kYXRhW1JURV9NQVhfTENPUkVdW1RPVEFMX0VOVFJZ XTsNCj4gPiAgIHN0YXRpYyB1aW50OF90IHdyaXRlcl9kb25lOw0KPiA+ICtzdGF0aWMgdWludDhf dCBjYl9mYWlsZWQ7DQo+ID4NCj4gPiAgIHN0YXRpYyBzdHJ1Y3QgcnRlX3JjdV9xc2JyICp0W1JU RV9NQVhfTENPUkVdOw0KPiA+ICAgc3RydWN0IHJ0ZV9oYXNoICpoW1JURV9NQVhfTENPUkVdOw0K PiA+IEBAIC01ODIsNiArNTg0LDI2OSBAQCB0ZXN0X3JjdV9xc2JyX3RocmVhZF9vZmZsaW5lKHZv aWQpDQo+ID4gICAJcmV0dXJuIDA7DQo+ID4gICB9DQo+ID4NCj4gPiArc3RhdGljIHZvaWQNCj4g PiArcnRlX3JjdV9xc2JyX3Rlc3RfZnJlZV9yZXNvdXJjZSh2b2lkICpwLCB2b2lkICplKSB7DQo+ ID4gKwlpZiAocCAhPSBOVUxMICYmIGUgIT0gTlVMTCkgew0KPiA+ICsJCXByaW50ZigiJXM6IFRl c3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJY2JfZmFpbGVkID0gMTsNCj4gPiArCX0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZTog Y3JlYXRlIGEgcXVldWUgdXNlZCB0byBzdG9yZSB0aGUgZGF0YQ0KPiA+ICtzdHJ1Y3R1cmUNCj4g PiArICogZWxlbWVudHMgdGhhdCBjYW4gYmUgZnJlZWQgbGF0ZXIuIFRoaXMgcXVldWUgaXMgcmVm ZXJyZWQgdG8gYXMgJ2RlZmVyDQo+IHF1ZXVlJy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQN Cj4gPiArdGVzdF9yY3VfcXNicl9kcV9jcmVhdGUodm9pZCkNCj4gPiArew0KPiA+ICsJY2hhciBy Y3VfZHFfbmFtZVtSVEVfUklOR19OQU1FU0laRV07DQo+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2Jy X2RxX3BhcmFtZXRlcnMgcGFyYW1zOw0KPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqZHE7 DQo+ID4gKw0KPiA+ICsJcHJpbnRmKCJcblRlc3QgcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZSgpXG4i KTsNCj4gPiArDQo+ID4gKwkvKiBQYXNzIGludmFsaWQgcGFyYW1ldGVycyAqLw0KPiA+ICsJZHEg PSBydGVfcmN1X3FzYnJfZHFfY3JlYXRlKE5VTEwpOw0KPiA+ICsJVEVTVF9SQ1VfUVNCUl9SRVRV Uk5fSUZfRVJST1IoKGRxICE9IE5VTEwpLCAiZHEgY3JlYXRlIGludmFsaWQNCj4gPiArcGFyYW1z Iik7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3QgcnRlX3Jj dV9xc2JyX2RxX3BhcmFtZXRlcnMpKTsNCj4gPiArCWRxID0gcnRlX3JjdV9xc2JyX2RxX2NyZWF0 ZSgmcGFyYW1zKTsNCj4gPiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChkcSAhPSBO VUxMKSwgImRxIGNyZWF0ZSBpbnZhbGlkDQo+ID4gK3BhcmFtcyIpOw0KPiA+ICsNCj4gPiArCXNu cHJpbnRmKHJjdV9kcV9uYW1lLCBzaXplb2YocmN1X2RxX25hbWUpLCAiVEVTVF9SQ1UiKTsNCj4g PiArCXBhcmFtcy5uYW1lID0gcmN1X2RxX25hbWU7DQo+ID4gKwlkcSA9IHJ0ZV9yY3VfcXNicl9k cV9jcmVhdGUoJnBhcmFtcyk7DQo+ID4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigo ZHEgIT0gTlVMTCksICJkcSBjcmVhdGUgaW52YWxpZA0KPiA+ICtwYXJhbXMiKTsNCj4gPiArDQo+ ID4gKwlwYXJhbXMuZiA9IHJ0ZV9yY3VfcXNicl90ZXN0X2ZyZWVfcmVzb3VyY2U7DQo+ID4gKwlk cSA9IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoJnBhcmFtcyk7DQo+ID4gKwlURVNUX1JDVV9RU0JS X1JFVFVSTl9JRl9FUlJPUigoZHEgIT0gTlVMTCksICJkcSBjcmVhdGUgaW52YWxpZA0KPiA+ICtw YXJhbXMiKTsNCj4gPiArDQo+ID4gKwlydGVfcmN1X3FzYnJfaW5pdCh0WzBdLCBSVEVfTUFYX0xD T1JFKTsNCj4gPiArCXBhcmFtcy52ID0gdFswXTsNCj4gPiArCWRxID0gcnRlX3JjdV9xc2JyX2Rx X2NyZWF0ZSgmcGFyYW1zKTsNCj4gPiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChk cSAhPSBOVUxMKSwgImRxIGNyZWF0ZSBpbnZhbGlkDQo+ID4gK3BhcmFtcyIpOw0KPiA+ICsNCj4g PiArCXBhcmFtcy5zaXplID0gMTsNCj4gPiArCWRxID0gcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZSgm cGFyYW1zKTsNCj4gPiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChkcSAhPSBOVUxM KSwgImRxIGNyZWF0ZSBpbnZhbGlkDQo+ID4gK3BhcmFtcyIpOw0KPiA+ICsNCj4gPiArCXBhcmFt cy5lc2l6ZSA9IDM7DQo+ID4gKwlkcSA9IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoJnBhcmFtcyk7 DQo+ID4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigoZHEgIT0gTlVMTCksICJkcSBj cmVhdGUgaW52YWxpZA0KPiA+ICtwYXJhbXMiKTsNCj4gPiArDQo+ID4gKwkvKiBQYXNzIGFsbCB2 YWxpZCBwYXJhbWV0ZXJzICovDQo+ID4gKwlwYXJhbXMuZXNpemUgPSAxNjsNCj4gPiArCWRxID0g cnRlX3JjdV9xc2JyX2RxX2NyZWF0ZSgmcGFyYW1zKTsNCj4gPiArCVRFU1RfUkNVX1FTQlJfUkVU VVJOX0lGX0VSUk9SKChkcSA9PSBOVUxMKSwgImRxIGNyZWF0ZSB2YWxpZA0KPiBwYXJhbXMiKTsN Cj4gPiArCXJ0ZV9yY3VfcXNicl9kcV9kZWxldGUoZHEpOw0KPiA+ICsNCj4gPiArCXJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBydGVfcmN1X3FzYnJfZHFfZW5xdWV1 ZTogZW5xdWV1ZSBvbmUgcmVzb3VyY2UgdG8gdGhlIGRlZmVyIHF1ZXVlLA0KPiA+ICsgKiB0byBi ZSBmcmVlZCBsYXRlciBhZnRlciBhdGxlYXN0IG9uZSBncmFjZSBwZXJpb2QgaXMgb3Zlci4NCj4g PiArICovDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiArdGVzdF9yY3VfcXNicl9kcV9lbnF1ZXVlKHZv aWQpDQo+ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1aW50NjRfdCByOw0KPiA+ICsJY2hh ciByY3VfZHFfbmFtZVtSVEVfUklOR19OQU1FU0laRV07DQo+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxX3BhcmFtZXRlcnMgcGFyYW1zOw0KPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAq ZHE7DQo+ID4gKw0KPiA+ICsJcHJpbnRmKCJcblRlc3QgcnRlX3JjdV9xc2JyX2RxX2VucXVldWUo KVxuIik7DQo+ID4gKw0KPiA+ICsJLyogQ3JlYXRlIGEgcXVldWUgd2l0aCBzaW1wbGUgcGFyYW1l dGVycyAqLw0KPiA+ICsJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxX3BhcmFtZXRlcnMpKTsNCj4gPiArCXNucHJpbnRmKHJjdV9kcV9uYW1lLCBzaXplb2Yo cmN1X2RxX25hbWUpLCAiVEVTVF9SQ1UiKTsNCj4gPiArCXBhcmFtcy5uYW1lID0gcmN1X2RxX25h bWU7DQo+ID4gKwlwYXJhbXMuZiA9IHJ0ZV9yY3VfcXNicl90ZXN0X2ZyZWVfcmVzb3VyY2U7DQo+ ID4gKwlydGVfcmN1X3FzYnJfaW5pdCh0WzBdLCBSVEVfTUFYX0xDT1JFKTsNCj4gPiArCXBhcmFt cy52ID0gdFswXTsNCj4gPiArCXBhcmFtcy5zaXplID0gMTsNCj4gPiArCXBhcmFtcy5lc2l6ZSA9 IDE2Ow0KPiA+ICsJZHEgPSBydGVfcmN1X3FzYnJfZHFfY3JlYXRlKCZwYXJhbXMpOw0KPiA+ICsJ VEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKGRxID09IE5VTEwpLCAiZHEgY3JlYXRlIHZh bGlkDQo+ID4gK3BhcmFtcyIpOw0KPiA+ICsNCj4gPiArCS8qIFBhc3MgaW52YWxpZCBwYXJhbWV0 ZXJzICovDQo+ID4gKwlyZXQgPSBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShOVUxMLCBOVUxMKTsN Cj4gPiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChyZXQgPT0gMCksICJkcSBlbnF1 ZXVlIGludmFsaWQNCj4gPiArcGFyYW1zIik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gcnRlX3JjdV9x c2JyX2RxX2VucXVldWUoZHEsIE5VTEwpOw0KPiA+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZf RVJST1IoKHJldCA9PSAwKSwgImRxIGVucXVldWUgaW52YWxpZA0KPiA+ICtwYXJhbXMiKTsNCj4g PiArDQo+ID4gKwlyZXQgPSBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShOVUxMLCAmcik7DQo+ID4g KwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigocmV0ID09IDApLCAiZHEgZW5xdWV1ZSBp bnZhbGlkDQo+ID4gK3BhcmFtcyIpOw0KPiA+ICsNCj4gPiArCXJldCA9IHJ0ZV9yY3VfcXNicl9k cV9kZWxldGUoZHEpOw0KPiA+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKHJldCA9 PSAxKSwgImRxIGRlbGV0ZSB2YWxpZA0KPiBwYXJhbXMiKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogcnRlX3JjdV9xc2JyX2RxX3JlY2xh aW06IFJlY2xhaW0gcmVzb3VyY2VzIGZyb20gdGhlIGRlZmVyIHF1ZXVlLg0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludA0KPiA+ICt0ZXN0X3JjdV9xc2JyX2RxX3JlY2xhaW0odm9pZCkNCj4gPiAr ew0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlwcmludGYoIlxuVGVzdCBydGVfcmN1X3Fz YnJfZHFfcmVjbGFpbSgpXG4iKTsNCj4gPiArDQo+ID4gKwkvKiBQYXNzIGludmFsaWQgcGFyYW1l dGVycyAqLw0KPiA+ICsJcmV0ID0gcnRlX3JjdV9xc2JyX2RxX3JlY2xhaW0oTlVMTCk7DQo+ID4g KwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigocmV0ICE9IDEpLCAiZHEgcmVjbGFpbSBp bnZhbGlkDQo+ID4gK3BhcmFtcyIpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBydGVfcmN1X3FzYnJfZHFfZGVsZXRlOiBEZWxldGUgYSBk ZWZlciBxdWV1ZS4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiArdGVzdF9yY3VfcXNi cl9kcV9kZWxldGUodm9pZCkNCj4gPiArew0KPiA+ICsJaW50IHJldDsNCj4gPiArCWNoYXIgcmN1 X2RxX25hbWVbUlRFX1JJTkdfTkFNRVNJWkVdOw0KPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNicl9k cV9wYXJhbWV0ZXJzIHBhcmFtczsNCj4gPiArCXN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxOw0K PiA+ICsNCj4gPiArCXByaW50ZigiXG5UZXN0IHJ0ZV9yY3VfcXNicl9kcV9kZWxldGUoKVxuIik7 DQo+ID4gKw0KPiA+ICsJLyogUGFzcyBpbnZhbGlkIHBhcmFtZXRlcnMgKi8NCj4gPiArCXJldCA9 IHJ0ZV9yY3VfcXNicl9kcV9kZWxldGUoTlVMTCk7DQo+ID4gKwlURVNUX1JDVV9RU0JSX1JFVFVS Tl9JRl9FUlJPUigocmV0ICE9IDEpLCAiZHEgZGVsZXRlIGludmFsaWQNCj4gPiArcGFyYW1zIik7 DQo+ID4gKw0KPiA+ICsJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxX3BhcmFtZXRlcnMpKTsNCj4gPiArCXNucHJpbnRmKHJjdV9kcV9uYW1lLCBzaXplb2Yo cmN1X2RxX25hbWUpLCAiVEVTVF9SQ1UiKTsNCj4gPiArCXBhcmFtcy5uYW1lID0gcmN1X2RxX25h bWU7DQo+ID4gKwlwYXJhbXMuZiA9IHJ0ZV9yY3VfcXNicl90ZXN0X2ZyZWVfcmVzb3VyY2U7DQo+ ID4gKwlydGVfcmN1X3FzYnJfaW5pdCh0WzBdLCBSVEVfTUFYX0xDT1JFKTsNCj4gPiArCXBhcmFt cy52ID0gdFswXTsNCj4gPiArCXBhcmFtcy5zaXplID0gMTsNCj4gPiArCXBhcmFtcy5lc2l6ZSA9 IDE2Ow0KPiA+ICsJZHEgPSBydGVfcmN1X3FzYnJfZHFfY3JlYXRlKCZwYXJhbXMpOw0KPiA+ICsJ VEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKGRxID09IE5VTEwpLCAiZHEgY3JlYXRlIHZh bGlkDQo+IHBhcmFtcyIpOw0KPiA+ICsJcmV0ID0gcnRlX3JjdV9xc2JyX2RxX2RlbGV0ZShkcSk7 DQo+ID4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigocmV0ICE9IDApLCAiZHEgZGVs ZXRlIHZhbGlkDQo+IHBhcmFtcyIpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZTogZW5xdWV1ZSBv bmUgcmVzb3VyY2UgdG8gdGhlIGRlZmVyIHF1ZXVlLA0KPiA+ICsgKiB0byBiZSBmcmVlZCBsYXRl ciBhZnRlciBhdGxlYXN0IG9uZSBncmFjZSBwZXJpb2QgaXMgb3Zlci4NCj4gPiArICovDQo+ID4g K3N0YXRpYyBpbnQNCj4gPiArdGVzdF9yY3VfcXNicl9kcV9mdW5jdGlvbmFsKGludDMyX3Qgc2l6 ZSwgaW50MzJfdCBlc2l6ZSkgew0KPiA+ICsJaW50IGksIGosIHJldDsNCj4gPiArCWNoYXIgcmN1 X2RxX25hbWVbUlRFX1JJTkdfTkFNRVNJWkVdOw0KPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNicl9k cV9wYXJhbWV0ZXJzIHBhcmFtczsNCj4gPiArCXN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxOw0K PiA+ICsJdWludDY0X3QgKmU7DQo+ID4gKwl1aW50NjRfdCBzYyA9IDIwMDsNCj4gPiArCWludCBt YXhfZW50cmllczsNCj4gPiArDQo+ID4gKwlwcmludGYoIlxuVGVzdCBydGVfcmN1X3FzYnJfZHFf eHh4IGZ1bmN0aW9uYWwgdGVzdHMoKVxuIik7DQo+ID4gKwlwcmludGYoIlNpemUgPSAlZCwgZXNp emUgPSAlZFxuIiwgc2l6ZSwgZXNpemUpOw0KPiA+ICsNCj4gPiArCWUgPSAodWludDY0X3QgKily dGVfem1hbGxvYyhOVUxMLCBlc2l6ZSwgUlRFX0NBQ0hFX0xJTkVfU0laRSk7DQo+ID4gKwlpZiAo ZSA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJY2JfZmFpbGVkID0gMDsNCj4gPiAr DQo+ID4gKwkvKiBJbml0aWFsaXplIHRoZSBSQ1UgdmFyaWFibGUuIE5vIHRocmVhZHMgYXJlIHJl Z2lzdGVyZWQgKi8NCj4gPiArCXJ0ZV9yY3VfcXNicl9pbml0KHRbMF0sIFJURV9NQVhfTENPUkUp Ow0KPiA+ICsNCj4gPiArCS8qIENyZWF0ZSBhIHF1ZXVlIHdpdGggc2ltcGxlIHBhcmFtZXRlcnMg Ki8NCj4gPiArCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9k cV9wYXJhbWV0ZXJzKSk7DQo+ID4gKwlzbnByaW50ZihyY3VfZHFfbmFtZSwgc2l6ZW9mKHJjdV9k cV9uYW1lKSwgIlRFU1RfUkNVIik7DQo+ID4gKwlwYXJhbXMubmFtZSA9IHJjdV9kcV9uYW1lOw0K PiA+ICsJcGFyYW1zLmYgPSBydGVfcmN1X3FzYnJfdGVzdF9mcmVlX3Jlc291cmNlOw0KPiA+ICsJ cGFyYW1zLnYgPSB0WzBdOw0KPiA+ICsJcGFyYW1zLnNpemUgPSBzaXplOw0KPiA+ICsJcGFyYW1z LmVzaXplID0gZXNpemU7DQo+ID4gKwlkcSA9IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoJnBhcmFt cyk7DQo+ID4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigoZHEgPT0gTlVMTCksICJk cSBjcmVhdGUgdmFsaWQNCj4gPiArcGFyYW1zIik7DQo+ID4gKw0KPiA+ICsJLyogR2l2ZW4gdGhl IHNpemUgYW5kIGVzaXplLCBjYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMN Cj4gPiArCSAqIHRoYXQgY2FuIGJlIHN0b3JlZCBvbiB0aGUgZGVmZXIgcXVldWUgKGxvb2sgYXQg dGhlIGxvZ2ljIHVzZWQNCj4gPiArCSAqIGluIGNhcGFjaXR5IGNhbGN1bGF0aW9uIG9mIHJ0ZV9y aW5nKS4NCj4gPiArCSAqLw0KPiA+ICsJbWF4X2VudHJpZXMgPSBydGVfYWxpZ24zMnBvdzIoKChl c2l6ZS84ICsgMSkgKiBzaXplKSArIDEpOw0KPiA+ICsJbWF4X2VudHJpZXMgPSAobWF4X2VudHJp ZXMgLSAxKS8oZXNpemUvOCArIDEpOw0KPiA+ICsNCj4gPiArCS8qIEVucXVldWUgZmV3IGNvdW50 ZXJzIHN0YXJ0aW5nIHdpdGggdGhlIHZhbHVlICdzYycgKi8NCj4gPiArCS8qIFRoZSBxdWV1ZSBz aXplIHdpbGwgYmUgcm91bmRlZCB1cCB0byAyLiBUaGUgZW5xdWV1ZSBBUEkgYWxzbw0KPiA+ICsJ ICogcmVjbGFpbXMgaWYgdGhlIHF1ZXVlIHNpemUgaXMgYWJvdmUgY2VydGFpbiBsaW1pdC4gU2lu Y2UsIHRoZXJlDQo+ID4gKwkgKiBhcmUgbm8gdGhyZWFkcyByZWdpc3RlcmVkLCByZWNsYW1hdGlv biBzdWNjZWRlcy4gSGVuY2UsIGl0IHNob3VsZA0KPiA+ICsJICogYmUgcG9zc2libGUgdG8gZW5x dWV1ZSBtb3JlIHRoYW4gdGhlIHByb3ZpZGVkIHF1ZXVlIHNpemUuDQo+ID4gKwkgKi8NCj4gPiAr CWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7DQo+ID4gKwkJcmV0ID0gcnRlX3JjdV9xc2JyX2Rx X2VucXVldWUoZHEsIGUpOw0KPiA+ICsJCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChy ZXQgIT0gMCksDQo+ID4gKwkJCSJkcSBlbnF1ZXVlIGZ1bmN0aW9uYWwiKTsNCj4gPiArCQlmb3Ig KGogPSAwOyBqIDwgZXNpemUvODsgaisrKQ0KPiA+ICsJCQllW2pdID0gc2MrKzsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwkvKiBSZWdpc3RlciBhIHRocmVhZCBvbiB0aGUgUkNVIFFTQlIgdmFyaWFi bGUuIFJlY2xhbWF0aW9uIHdpbGwgbm90DQo+ID4gKwkgKiBzdWNjZWVkLiBJdCBzaG91bGQgbm90 IGJlIHBvc3NpYmxlIHRvIGVucXVldWUgbW9yZSB0aGFuIHRoZSBzaXplDQo+ID4gKwkgKiBudW1i ZXIgb2YgcmVzb3VyY2VzLg0KPiA+ICsJICovDQo+ID4gKwlydGVfcmN1X3FzYnJfdGhyZWFkX3Jl Z2lzdGVyKHRbMF0sIDEpOw0KPiA+ICsJcnRlX3JjdV9xc2JyX3RocmVhZF9vbmxpbmUodFswXSwg MSk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG1heF9lbnRyaWVzOyBpKyspIHsNCj4g PiArCQlyZXQgPSBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShkcSwgZSk7DQo+ID4gKwkJVEVTVF9S Q1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKHJldCAhPSAwKSwNCj4gPiArCQkJImRxIGVucXVldWUg ZnVuY3Rpb25hbCIpOw0KPiA+ICsJCWZvciAoaiA9IDA7IGogPCBlc2l6ZS84OyBqKyspDQo+ID4g KwkJCWVbal0gPSBzYysrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEVucXVldWUgZmFpbHMg YXMgcXVldWUgaXMgZnVsbCAqLw0KPiA+ICsJcmV0ID0gcnRlX3JjdV9xc2JyX2RxX2VucXVldWUo ZHEsIGUpOw0KPiA+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKHJldCA9PSAwKSwg ImRxIGVucXVldWUNCj4gZnVuY3Rpb25hbCIpOw0KPiA+ICsNCj4gPiArCS8qIERlbGV0ZSBzaG91 bGQgZmFpbCBhcyB0aGVyZSBhcmUgZWxlbWVudHMgaW4gZGVmZXIgcXVldWUgd2hpY2gNCj4gPiAr CSAqIGNhbm5vdCBiZSByZWNsYWltZWQuDQo+ID4gKwkgKi8NCj4gPiArCXJldCA9IHJ0ZV9yY3Vf cXNicl9kcV9kZWxldGUoZHEpOw0KPiA+ICsJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1Io KHJldCA9PSAwKSwgImRxIGRlbGV0ZSB2YWxpZA0KPiBwYXJhbXMiKTsNCj4gPiArDQo+ID4gKwkv KiBSZXBvcnQgcXVpZXNjZW50IHN0YXRlLCBlbnF1ZXVlIHNob3VsZCBzdWNjZWVkICovDQo+ID4g KwlydGVfcmN1X3FzYnJfcXVpZXNjZW50KHRbMF0sIDEpOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8 IG1heF9lbnRyaWVzOyBpKyspIHsNCj4gPiArCQlyZXQgPSBydGVfcmN1X3FzYnJfZHFfZW5xdWV1 ZShkcSwgZSk7DQo+ID4gKwkJVEVTVF9SQ1VfUVNCUl9SRVRVUk5fSUZfRVJST1IoKHJldCAhPSAw KSwNCj4gPiArCQkJImRxIGVucXVldWUgZnVuY3Rpb25hbCIpOw0KPiA+ICsJCWZvciAoaiA9IDA7 IGogPCBlc2l6ZS84OyBqKyspDQo+ID4gKwkJCWVbal0gPSBzYysrOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCS8qIFF1ZXVlIGlzIGZ1bGwgKi8NCj4gPiArCXJldCA9IHJ0ZV9yY3VfcXNicl9kcV9l bnF1ZXVlKGRxLCBlKTsNCj4gPiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChyZXQg PT0gMCksICJkcSBlbnF1ZXVlDQo+IGZ1bmN0aW9uYWwiKTsNCj4gPiArDQo+ID4gKwkvKiBSZXBv cnQgcXVpZXNjZW50IHN0YXRlLCBkZWxldGUgc2hvdWxkIHN1Y2NlZWQgKi8NCj4gPiArCXJ0ZV9y Y3VfcXNicl9xdWllc2NlbnQodFswXSwgMSk7DQo+ID4gKwlyZXQgPSBydGVfcmN1X3FzYnJfZHFf ZGVsZXRlKGRxKTsNCj4gPiArCVRFU1RfUkNVX1FTQlJfUkVUVVJOX0lGX0VSUk9SKChyZXQgIT0g MCksICJkcSBkZWxldGUgdmFsaWQNCj4gcGFyYW1zIik7DQo+ID4gKw0KPiA+ICsJLyogVmFsaWRh dGUgdGhhdCBjYWxsIGJhY2sgZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gYW55IGVycm9yICovDQo+ ID4gKwlURVNUX1JDVV9RU0JSX1JFVFVSTl9JRl9FUlJPUigoY2JfZmFpbGVkID09IDEpLCAiQ0Ig ZmFpbGVkIik7DQo+ID4gKw0KPiA+ICsJcnRlX2ZyZWUoZSk7DQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiAgIC8qDQo+ID4gICAgKiBydGVfcmN1X3FzYnJfZHVtcDogRHVtcCBz dGF0dXMgb2YgYSBzaW5nbGUgUVMgdmFyaWFibGUgdG8gYSBmaWxlDQo+ID4gICAgKi8NCj4gPiBA QCAtMTAyNSw2ICsxMjkwLDE4IEBAIHRlc3RfcmN1X3FzYnJfbWFpbih2b2lkKQ0KPiA+ICAgCWlm ICh0ZXN0X3JjdV9xc2JyX3RocmVhZF9vZmZsaW5lKCkgPCAwKQ0KPiA+ICAgCQlnb3RvIHRlc3Rf ZmFpbDsNCj4gPg0KPiA+ICsJaWYgKHRlc3RfcmN1X3FzYnJfZHFfY3JlYXRlKCkgPCAwKQ0KPiA+ ICsJCWdvdG8gdGVzdF9mYWlsOw0KPiA+ICsNCj4gPiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX3Jl Y2xhaW0oKSA8IDApDQo+ID4gKwkJZ290byB0ZXN0X2ZhaWw7DQo+ID4gKw0KPiA+ICsJaWYgKHRl c3RfcmN1X3FzYnJfZHFfZGVsZXRlKCkgPCAwKQ0KPiA+ICsJCWdvdG8gdGVzdF9mYWlsOw0KPiA+ ICsNCj4gPiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX2VucXVldWUoKSA8IDApDQo+ID4gKwkJZ290 byB0ZXN0X2ZhaWw7DQo+ID4gKw0KPiA+ICAgCXByaW50ZigiXG5GdW5jdGlvbmFsIHRlc3RzXG4i KTsNCj4gPg0KPiA+ICAgCWlmICh0ZXN0X3JjdV9xc2JyX3N3X3N2XzNxcygpIDwgMCkNCj4gPiBA QCAtMTAzMyw2ICsxMzEwLDE4IEBAIHRlc3RfcmN1X3FzYnJfbWFpbih2b2lkKQ0KPiA+ICAgCWlm ICh0ZXN0X3JjdV9xc2JyX213X212X21xcygpIDwgMCkNCj4gPiAgIAkJZ290byB0ZXN0X2ZhaWw7 DQo+ID4NCj4gPiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX2Z1bmN0aW9uYWwoMSwgOCkgPCAwKQ0K PiA+ICsJCWdvdG8gdGVzdF9mYWlsOw0KPiA+ICsNCj4gPiArCWlmICh0ZXN0X3JjdV9xc2JyX2Rx X2Z1bmN0aW9uYWwoMiwgOCkgPCAwKQ0KPiA+ICsJCWdvdG8gdGVzdF9mYWlsOw0KPiA+ICsNCj4g PiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX2Z1bmN0aW9uYWwoMzAzLCAxNikgPCAwKQ0KPiA+ICsJ CWdvdG8gdGVzdF9mYWlsOw0KPiA+ICsNCj4gPiArCWlmICh0ZXN0X3JjdV9xc2JyX2RxX2Z1bmN0 aW9uYWwoNywgMTI4KSA8IDApDQo+ID4gKwkJZ290byB0ZXN0X2ZhaWw7DQo+ID4gKw0KPiA+ICAg CWZyZWVfcmN1KCk7DQo+ID4NCj4gPiAgIAlwcmludGYoIlxuIik7DQo+ID4gZGlmZiAtLWdpdCBh L2xpYi9saWJydGVfcmN1L21lc29uLmJ1aWxkIGIvbGliL2xpYnJ0ZV9yY3UvbWVzb24uYnVpbGQN Cj4gPiBpbmRleCA2MjkyMGJhMDIuLmUyODBiMjljMSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGli cnRlX3JjdS9tZXNvbi5idWlsZA0KPiA+ICsrKyBiL2xpYi9saWJydGVfcmN1L21lc29uLmJ1aWxk DQo+ID4gQEAgLTEwLDMgKzEwLDUgQEAgaGVhZGVycyA9IGZpbGVzKCdydGVfcmN1X3FzYnIuaCcp DQo+ID4gICBpZiBjYy5nZXRfaWQoKSA9PSAnY2xhbmcnIGFuZCBkcGRrX2NvbmYuZ2V0KCdSVEVf QVJDSF82NCcpID09IGZhbHNlDQo+ID4gICAJZXh0X2RlcHMgKz0gY2MuZmluZF9saWJyYXJ5KCdh dG9taWMnKQ0KPiA+ICAgZW5kaWYNCj4gPiArDQo+ID4gK2RlcHMgKz0gWydyaW5nJ10NCj4gPiBk aWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmMNCj4gPiBiL2xpYi9saWJy dGVfcmN1L3J0ZV9yY3VfcXNici5jIGluZGV4IGNlN2Y5M2RkMy4uNzY4MTRmNTBiIDEwMDY0NA0K PiA+IC0tLSBhL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5jDQo+ID4gKysrIGIvbGliL2xp YnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmMNCj4gPiBAQCAtMjEsNiArMjEsNyBAQA0KPiA+ICAgI2lu Y2x1ZGUgPHJ0ZV9lcnJuby5oPg0KPiA+DQo+ID4gICAjaW5jbHVkZSAicnRlX3JjdV9xc2JyLmgi DQo+ID4gKyNpbmNsdWRlICJydGVfcmN1X3FzYnJfcHZ0LmgiDQo+ID4NCj4gPiAgIC8qIEdldCB0 aGUgbWVtb3J5IHNpemUgb2YgUVNCUiB2YXJpYWJsZSAqLw0KPiA+ICAgc2l6ZV90DQo+ID4gQEAg LTI2Nyw2ICsyNjgsMTkwIEBAIHJ0ZV9yY3VfcXNicl9kdW1wKEZJTEUgKmYsIHN0cnVjdCBydGVf cmN1X3FzYnINCj4gKnYpDQo+ID4gICAJcmV0dXJuIDA7DQo+ID4gICB9DQo+ID4NCj4gPiArLyog Q3JlYXRlIGEgcXVldWUgdXNlZCB0byBzdG9yZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgZWxlbWVudHMg dGhhdCBjYW4NCj4gPiArICogYmUgZnJlZWQgbGF0ZXIuIFRoaXMgcXVldWUgaXMgcmVmZXJyZWQg dG8gYXMgJ2RlZmVyIHF1ZXVlJy4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnJf ZHEgKg0KPiA+ICtydGVfcmN1X3FzYnJfZHFfY3JlYXRlKGNvbnN0IHN0cnVjdCBydGVfcmN1X3Fz YnJfZHFfcGFyYW1ldGVycw0KPiA+ICsqcGFyYW1zKSB7DQo+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxICpkcTsNCj4gPiArCXVpbnQzMl90IHFzX2ZpZm9fc2l6ZTsNCj4gPiArDQo+ID4gKwlp ZiAocGFyYW1zID09IE5VTEwgfHwgcGFyYW1zLT5mID09IE5VTEwgfHwNCj4gPiArCQlwYXJhbXMt PnYgPT0gTlVMTCB8fCBwYXJhbXMtPm5hbWUgPT0gTlVMTCB8fA0KPiA+ICsJCXBhcmFtcy0+c2l6 ZSA9PSAwIHx8IHBhcmFtcy0+ZXNpemUgPT0gMCB8fA0KPiA+ICsJCShwYXJhbXMtPmVzaXplICUg OCAhPSAwKSkgew0KPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9nX3R5cGUs DQo+ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0K PiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiArDQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJZHEgPSBydGVfem1hbGxvYyhOVUxMLA0KPiA+ICsJCShzaXpl b2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSkgKyBwYXJhbXMtPmVzaXplKSwNCj4gPiArCQlSVEVf Q0FDSEVfTElORV9TSVpFKTsNCj4gPiArCWlmIChkcSA9PSBOVUxMKSB7DQo+ID4gKwkJcnRlX2Vy cm5vID0gRU5PTUVNOw0KPiA+ICsNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwkvKiByb3VuZCB1cCBxc19maWZvX3NpemUgdG8gbmV4dCBwb3dlciBvZiB0d28gdGhh dCBpcyBub3QgbGVzcyB0aGFuDQo+ID4gKwkgKiBtYXhfc2l6ZS4NCj4gPiArCSAqLw0KPiA+ICsJ cXNfZmlmb19zaXplID0gcnRlX2FsaWduMzJwb3cyKCgoKHBhcmFtcy0+ZXNpemUvOCkgKyAxKQ0K PiA+ICsJCQkJCSogcGFyYW1zLT5zaXplKSArIDEpOw0KPiA+ICsJZHEtPnIgPSBydGVfcmluZ19j cmVhdGUocGFyYW1zLT5uYW1lLCBxc19maWZvX3NpemUsDQo+ID4gKwkJCQkJU09DS0VUX0lEX0FO WSwgMCk7DQo+ID4gKwlpZiAoZHEtPnIgPT0gTlVMTCkgew0KPiA+ICsJCXJ0ZV9sb2coUlRFX0xP R19FUlIsIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ID4gKwkJCSIlcygpOiBkZWZlciBxdWV1ZSBjcmVh dGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcnRlX2ZyZWUoZHEpOw0KPiA+ICsJCXJl dHVybiBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRxLT52ID0gcGFyYW1zLT52Ow0KPiA+ ICsJZHEtPnNpemUgPSBwYXJhbXMtPnNpemU7DQo+ID4gKwlkcS0+ZXNpemUgPSBwYXJhbXMtPmVz aXplOw0KPiA+ICsJZHEtPmYgPSBwYXJhbXMtPmY7DQo+ID4gKwlkcS0+cCA9IHBhcmFtcy0+cDsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gZHE7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEVucXVldWUg b25lIHJlc291cmNlIHRvIHRoZSBkZWZlciBxdWV1ZSB0byBmcmVlIGFmdGVyIHRoZSBncmFjZQ0K PiA+ICsgKiBwZXJpb2QgaXMgb3Zlci4NCj4gPiArICovDQo+ID4gK2ludCBydGVfcmN1X3FzYnJf ZHFfZW5xdWV1ZShzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxICpkcSwgdm9pZCAqZSkgew0KPiA+ICsJ dWludDY0X3QgdG9rZW47DQo+ID4gKwl1aW50NjRfdCAqdG1wOw0KPiA+ICsJdWludDMyX3QgaTsN Cj4gPiArCXVpbnQzMl90IGN1cl9zaXplLCBmcmVlX3NpemU7DQo+ID4gKw0KPiA+ICsJaWYgKGRx ID09IE5VTEwgfHwgZSA9PSBOVUxMKSB7DQo+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0VSUiwgcnRl X3JjdV9sb2dfdHlwZSwNCj4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4i LCBfX2Z1bmNfXyk7DQo+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ICsNCj4gPiArCQly ZXR1cm4gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBTdGFydCB0aGUgZ3JhY2UgcGVyaW9k ICovDQo+ID4gKwl0b2tlbiA9IHJ0ZV9yY3VfcXNicl9zdGFydChkcS0+dik7DQo+ID4gKw0KPiA+ ICsJLyogUmVjbGFpbSByZXNvdXJjZXMgaWYgdGhlIHF1ZXVlIGlzIDEvOHRoIGZ1bGwuIFRoaXMg aGVscHMNCj4gPiArCSAqIHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgdG9vIGxhcmdlIGFuZCBhbGxv d3MgdGltZSBmb3IgcmVhZGVyDQo+ID4gKwkgKiB0aHJlYWRzIHRvIHJlcG9ydCB0aGVpciBxdWll c2NlbnQgc3RhdGUuDQo+ID4gKwkgKi8NCj4gPiArCWN1cl9zaXplID0gcnRlX3JpbmdfY291bnQo ZHEtPnIpIC8gKGRxLT5lc2l6ZS84ICsgMSk7DQo+ID4gKwlpZiAoY3VyX3NpemUgPiAoZHEtPnNp emUgPj4gUlRFX1JDVV9RU0JSX0FVVE9fUkVDTEFJTV9MSU1JVCkpIHsNCj4gPiArCQlydGVfbG9n KFJURV9MT0dfSU5GTywgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiArCQkJIiVzKCk6IFRyaWdnZXJp bmcgcmVjbGFtYXRpb25cbiIsIF9fZnVuY19fKTsNCj4gPiArCQlydGVfcmN1X3FzYnJfZHFfcmVj bGFpbShkcSk7DQo+ID4gKwl9DQo+IA0KPiBUaGVyZSBhcmUgdHdvIHByb2JsZW1zIEkgc2VlOg0K PiANCj4gMS4gcnRlX3JjdV9xc2JyX2RxX3JlY2xhaW0oKSByZWNsYWltcyBvbmx5IDEvMTYgb2Yg dGhlIGRlZmVyIHF1ZXVlIHdoaWxlIGl0DQo+IHRyaWdnZXJzIG9uIDEvOC4gVGhpcyBtZWFucyB0 aGF0IHRoZXJlIHdpbGwgYWx3YXlzIGJlIDEvMTYgb2Ygbm9uIHJlY2xhaW1lZA0KPiBlbnRyaWVz IGluIHRoZSBxdWV1ZS4NClRoZXJlIHdpbGwgYmUgJ2F0IGxlYXN0JyAxLzE2IG5vbi1yZWNsYWlt ZWQgZW50cmllcy4gSXQgY291bGQgYmUgbW9yZSBkZXBlbmRpbmcgb24gdGhlIGxlbmd0aCBvZiB0 aGUgZ3JhY2UgcGVyaW9kIGFuZCB0aGUgcmF0ZSBvZiBkZWxldGlvbi4NClRoZSB0cmlnZ2VyIG9m IDEvOCBpcyB1c2VkIHRvIGdpdmUgc3VmZmljaWVudCB0aW1lIGZvciB0aGUgcmVhZGVycyB0byBy ZXBvcnQgdGhlaXIgcXVpZXNjZW50IHN0YXRlLiAxLzE2IGlzIHVzZWQgdG8gc3ByZWFkIHRoZSBs b2FkIG9mIHJlY2xhbWF0aW9uIGFjcm9zcyBtdWx0aXBsZSBjYWxscyBhbmQgcHJvdmlkZSBhIHVw cGVyIGJvdW5kIG9uIHRoZSBjeWNsZXMgY29uc3VtZWQuDQoNCj4gDQo+IDIuIE51bWJlciBvZiBl bnRyaWVzIHRvIHJlY2xhaW0gZGVwZW5kIG9uIGRxLT5zaXplLiBTbywNCj4gcnRlX3JjdV9xc2Jy X2RxX3JlY2xhaW0oKSBjb3VsZCB0YWtlIGEgbG90IG9mIGN5Y2xlcy4gRm9yIExQTSBsaWJyYXJ5 IHRoaXMNClRoYXQgaXMgdHJ1ZS4gSXQgZGVwZW5kcyBvbiBkcS0+c2l6ZSAobnVtYmVyIG9mIHRi bDggZ3JvdXBzKS4gSG93ZXZlciwgbm90ZSB0aGF0IHRoZXJlIGlzIHBhdGNoIFsxXSB3aGljaCBw cm92aWRlcyBiYXRjaCByZWNsYW1hdGlvbiBraW5kIG9mIGJlaGF2aW9yIHdoaWNoIHJlZHVjZXMg dGhlIGN5Y2xlcyBjb25zdW1lZCBieSByZWNsYW1hdGlvbiBzaWduaWZpY2FudGx5Lg0KDQpbMV0g aHR0cHM6Ly9wYXRjaGVzLmRwZGsub3JnL3BhdGNoLzU4OTYwLw0KDQo+IG1lYW5zIHRoYXQgcnRl X2xwbV9kZWxldGUoKSBzb21ldGltZXMgdGFrZXMgYSBsb25nIHRpbWUuDQpBZ3JlZSwgc29tZXRp bWVzIHRha2VzIGFkZGl0aW9uYWwgdGltZS4gSXQgaXMgZ29vZCB0byBzcHJlYWQgaXQgb3ZlciBt dWx0aXBsZSBjYWxscy4NCg0KPiANCj4gU28sIG15IHN1Z2dlc3Rpb25zIGhlcmUgd291bGQgYmUN Cj4gDQo+IC0gdHJpZ2dlciBydGVfcmN1X3FzYnJfZHFfcmVjbGFpbSgpIHdpdGggZXZlcnkgZW5x dWV1ZQ0KR2l2ZW4gdGhhdCB0aGUgTFBNIEFQSXMgYXJlIG1haW5seSBmb3IgY29udHJvbCBwbGFu ZSwgSSB3b3VsZCB0aGluayB0aGF0LCB0aGUgbmV4dCB0aW1lIExQTSBBUEkgaXMgY2FsbGVkLCB0 aGUgcmVhZGVycyBoYXZlIGNvbXBsZXRlZCB0aGUgZ3JhY2UgcGVyaW9kLiBCdXQgaWYgdGhlcmUg YXJlIGZyZXF1ZW50IHVwZGF0ZXMsIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGVtcHR5IHJlY2xhaW1z IHdoaWNoIHdpbGwgd2FzdGUgY3ljbGVzLiBJTU8sIHRoaXMgdHJpZ2dlciBzaG91bGQgaGFwcGVu IGFmdGVyIGF0IGxlYXN0IGZldyBlbnRyaWVzIGFyZSBpbiB0aGUgcXVldWUuIA0KDQo+IA0KPiAt IHJlY2xhaW0gc21hbGwgYW1vdW50IG9mIGVudHJpZXMgKGNvdWxkIGJlIGNvbmZpZ3VyYWJsZSBv ZiBjcmVhdGlvbiB0aW1lKQ0KQWdyZWUuIEkgd291bGQga2VlcCBpdCBhIHNtYWxsZXIgdGhhbiB0 aGUgdHJpZ2dlciBhbW91bnQga25vd2luZyB0aGF0IHRoZSBlbGVtZW50cyBhZGRlZCByaWdodCBi ZWZvcmUgdGhlIHRyaWdnZXIgbWlnaHQgbm90IGhhdmUgY29tcGxldGVkIHRoZSBncmFjZSBwZXJp b2QuDQoNCj4gDQo+IC0gcHJvdmlkZSBBUEkgdG8gdHJpZ2dlciByZWNsYWltIGZyb20gdGhlIGFw cGxpY2F0aW9uIG1hbnVhbGx5Lg0KSU1PLCB0aGlzIHdpbGwgYWRkIGFkZGl0aW9uYWwgY29tcGxl eGl0eSB0byB0aGUgYXBwbGljYXRpb24uIEkgYWdyZWUgdGhhdCB0aGVyZSB3aWxsIGJlIHNwZWNp YWwgbmVlZHMgZm9yIHNvbWUgYXBwbGljYXRpb25zLiBJIHRoaW5rIHRob3NlIGFwcGxpY2F0aW9u cyBtaWdodCBoYXZlIHRvIGltcGxlbWVudCB0aGVpciBvd24gbWV0aG9kcyB1c2luZyB0aGUgYmFz ZSBSQ1UgQVBJcy4NCkluc3RlYWQsIGFzIGFncmVlZCBpbiBvdGhlciB0aHJlYWRzLCBJIHN1Z2dl c3Qgd2UgZXhwb3NlIHRoZSBwYXJhbWV0ZXJzICh3aGVuIHRvIHRyaWdnZXIgYW5kIGhvdyBtdWNo IHRvIHJlY2xhaW0pIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyBvcHRpb25hbCBjb25maWd1cmFibGUg cGFyYW1ldGVycy4gaS5lLiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgcHJvdmlkZSB3ZSBj YW4gdXNlIGRlZmF1bHQgdmFsdWVzLiBJIHRoaW5rIHRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdo IGZsZXhpYmlsaXR5IHRvIHRoZSBhcHBsaWNhdGlvbi4NCg0KPiANCj4gPiArDQo+ID4gKwkvKiBD aGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3IgYXRsZWFzdCBmb3IgMSByZXNvdXJjZSAqLw0KPiA+ ICsJZnJlZV9zaXplID0gcnRlX3JpbmdfZnJlZV9jb3VudChkcS0+cikgLyAoZHEtPmVzaXplLzgg KyAxKTsNCj4gPiArCWlmICghZnJlZV9zaXplKSB7DQo+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0VS UiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiArCQkJIiVzKCk6IERlZmVyIHF1ZXVlIGlzIGZ1bGxc biIsIF9fZnVuY19fKTsNCj4gPiArCQlydGVfZXJybm8gPSBFTk9TUEM7DQo+ID4gKwkJcmV0dXJu IDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRW5xdWV1ZSB0aGUgcmVzb3VyY2UgKi8NCj4g PiArCXJ0ZV9yaW5nX3NwX2VucXVldWUoZHEtPnIsICh2b2lkICopKHVpbnRwdHJfdCl0b2tlbik7 DQo+ID4gKw0KPiA+ICsJLyogVGhlIHJlc291cmNlIHRvIGVucXVldWUgbmVlZHMgdG8gYmUgYSBt dWx0aXBsZSBvZiA2NGINCj4gPiArCSAqIGR1ZSB0byB0aGUgbGltaXRhdGlvbiBvZiB0aGUgcnRl X3JpbmcgaW1wbGVtZW50YXRpb24uDQo+ID4gKwkgKi8NCj4gPiArCWZvciAoaSA9IDAsIHRtcCA9 ICh1aW50NjRfdCAqKWU7IGkgPCBkcS0+ZXNpemUvODsgaSsrLCB0bXArKykNCj4gPiArCQlydGVf cmluZ19zcF9lbnF1ZXVlKGRxLT5yLCAodm9pZCAqKSh1aW50cHRyX3QpKnRtcCk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIFJlY2xhaW0gcmVzb3VyY2Vz IGZyb20gdGhlIGRlZmVyIHF1ZXVlLiAqLyBpbnQNCj4gPiArcnRlX3JjdV9xc2JyX2RxX3JlY2xh aW0oc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqZHEpIHsNCj4gPiArCXVpbnQzMl90IG1heF9jbnQ7 DQo+ID4gKwl1aW50MzJfdCBjbnQ7DQo+ID4gKwl2b2lkICp0b2tlbjsNCj4gPiArCXVpbnQ2NF90 ICp0bXA7DQo+ID4gKwl1aW50MzJfdCBpOw0KPiA+ICsNCj4gPiArCWlmIChkcSA9PSBOVUxMKSB7 DQo+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0VSUiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiArCQkJ IiVzKCk6IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcnRl X2Vycm5vID0gRUlOVkFMOw0KPiA+ICsNCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwkvKiBBbnl0aGluZyB0byByZWNsYWltPyAqLw0KPiA+ICsJaWYgKHJ0ZV9yaW5nX2Nv dW50KGRxLT5yKSA9PSAwKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCS8qIFJlY2xh aW0gYXQgdGhlIG1heCAxLzE2dGggdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzLiAqLw0KPiA+ ICsJbWF4X2NudCA9IGRxLT5zaXplID4+IFJURV9SQ1VfUVNCUl9NQVhfUkVDTEFJTV9MSU1JVDsN Cj4gPiArCW1heF9jbnQgPSAobWF4X2NudCA9PSAwKSA/IGRxLT5zaXplIDogbWF4X2NudDsNCj4g PiArCWNudCA9IDA7DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgcmVhZGVyIHRocmVhZHMgcXVpZXNj ZW50IHN0YXRlIGFuZCByZWNsYWltIHJlc291cmNlcyAqLw0KPiA+ICsJd2hpbGUgKChjbnQgPCBt YXhfY250KSAmJiAocnRlX3JpbmdfcGVlayhkcS0+ciwgJnRva2VuKSA9PSAwKSAmJg0KPiA+ICsJ CShydGVfcmN1X3FzYnJfY2hlY2soZHEtPnYsICh1aW50NjRfdCkoKHVpbnRwdHJfdCl0b2tlbiks IGZhbHNlKQ0KPiA+ICsJCQk9PSAxKSkgew0KPiA+ICsJCSh2b2lkKXJ0ZV9yaW5nX3NjX2RlcXVl dWUoZHEtPnIsICZ0b2tlbik7DQo+ID4gKwkJLyogVGhlIHJlc291cmNlIHRvIGRlcXVldWUgbmVl ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA2NGINCj4gPiArCQkgKiBkdWUgdG8gdGhlIGxpbWl0YXRp b24gb2YgdGhlIHJ0ZV9yaW5nIGltcGxlbWVudGF0aW9uLg0KPiA+ICsJCSAqLw0KPiA+ICsJCWZv ciAoaSA9IDAsIHRtcCA9ICh1aW50NjRfdCAqKWRxLT5lOyBpIDwgZHEtPmVzaXplLzg7DQo+ID4g KwkJCWkrKywgdG1wKyspDQo+ID4gKwkJCSh2b2lkKXJ0ZV9yaW5nX3NjX2RlcXVldWUoZHEtPnIs DQo+ID4gKwkJCQkJKHZvaWQgKikodWludHB0cl90KXRtcCk7DQo+ID4gKwkJZHEtPmYoZHEtPnAs IGRxLT5lKTsNCj4gPiArDQo+ID4gKwkJY250Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcnRl X2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ID4gKwkJIiVzKCk6IFJlY2xh aW1lZCAldSByZXNvdXJjZXNcbiIsIF9fZnVuY19fLCBjbnQpOw0KPiA+ICsNCj4gPiArCWlmIChj bnQgPT0gMCkgew0KPiA+ICsJCS8qIE5vIHJlc291cmNlcyB3ZXJlIHJlY2xhaW1lZCAqLw0KPiA+ ICsJCXJ0ZV9lcnJubyA9IEVBR0FJTjsNCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogRGVsZXRlIGEgZGVmZXIg cXVldWUuICovDQo+ID4gK2ludA0KPiA+ICtydGVfcmN1X3FzYnJfZHFfZGVsZXRlKHN0cnVjdCBy dGVfcmN1X3FzYnJfZHEgKmRxKSB7DQo+ID4gKwlpZiAoZHEgPT0gTlVMTCkgew0KPiA+ICsJCXJ0 ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ID4gKwkJCSIlcygpOiBJbnZh bGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ICsJCXJ0ZV9lcnJubyA9IEVJ TlZBTDsNCj4gPiArDQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyog UmVjbGFpbSBhbGwgdGhlIHJlc291cmNlcyAqLw0KPiA+ICsJaWYgKHJ0ZV9yY3VfcXNicl9kcV9y ZWNsYWltKGRxKSAhPSAwKQ0KPiA+ICsJCS8qIEVycm9yIG51bWJlciBpcyBhbHJlYWR5IHNldCBi eSB0aGUgcmVjbGFpbSBBUEkgKi8NCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArDQo+ID4gKwlydGVf cmluZ19mcmVlKGRxLT5yKTsNCj4gPiArCXJ0ZV9mcmVlKGRxKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIGludCBydGVfcmN1X2xvZ190eXBlOw0KPiA+DQo+ ID4gICBSVEVfSU5JVChydGVfcmN1X3JlZ2lzdGVyKQ0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2Jy LmggaW5kZXggYzgwZjE1YzAwLi4xODVkNGI1MGEgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0 ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3Fz YnIuaA0KPiA+IEBAIC0zNCw2ICszNCw3IEBAIGV4dGVybiAiQyIgew0KPiA+ICAgI2luY2x1ZGUg PHJ0ZV9sY29yZS5oPg0KPiA+ICAgI2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPg0KPiA+ICAgI2luY2x1 ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9yaW5nLmg+DQo+ID4NCj4gPiAg IGV4dGVybiBpbnQgcnRlX3JjdV9sb2dfdHlwZTsNCj4gPg0KPiA+IEBAIC0xMDksNiArMTEwLDY3 IEBAIHN0cnVjdCBydGVfcmN1X3FzYnIgew0KPiA+ICAgCSAqLw0KPiA+ICAgfSBfX3J0ZV9jYWNo ZV9hbGlnbmVkOw0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgKiBDYWxsIGJhY2sgZnVuY3Rpb24gY2Fs bGVkIHRvIGZyZWUgdGhlIHJlc291cmNlcy4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHANCj4g PiArICogICBQb2ludGVyIHByb3ZpZGVkIHdoaWxlIGNyZWF0aW5nIHRoZSBkZWZlciBxdWV1ZQ0K PiA+ICsgKiBAcGFyYW0gZQ0KPiA+ICsgKiAgIFBvaW50ZXIgdG8gdGhlIHJlc291cmNlIGRhdGEg c3RvcmVkIG9uIHRoZSBkZWZlciBxdWV1ZQ0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4g KyAqICAgTm9uZQ0KPiA+ICsgKi8NCj4gPiArdHlwZWRlZiB2b2lkICgqcnRlX3JjdV9xc2JyX2Zy ZWVfcmVzb3VyY2UpKHZvaWQgKnAsIHZvaWQgKmUpOw0KPiA+ICsNCj4gPiArI2RlZmluZSBSVEVf UkNVX1FTQlJfRFFfTkFNRVNJWkUgUlRFX1JJTkdfTkFNRVNJWkUNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiAgVHJpZ2dlciBhdXRvbWF0aWMgcmVjbGFtYXRpb24gYWZ0ZXIgMS84dGggdGhlIGRl ZmVyIHF1ZXVlIGlzIGZ1bGwuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFJURV9SQ1VfUVNCUl9B VVRPX1JFQ0xBSU1fTElNSVQgMw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqICBSZWNsYWltIGF0 IHRoZSBtYXggMS8xNnRoIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVzb3VyY2VzLg0KPiA+ICsgKi8N Cj4gPiArI2RlZmluZSBSVEVfUkNVX1FTQlJfTUFYX1JFQ0xBSU1fTElNSVQgNA0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIFBhcmFtZXRlcnMgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBkZWZlciBx dWV1ZS4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnJfZHFfcGFyYW1ldGVycyB7 DQo+ID4gKwljb25zdCBjaGFyICpuYW1lOw0KPiA+ICsJLyoqPCBOYW1lIG9mIHRoZSBxdWV1ZS4g Ki8NCj4gPiArCXVpbnQzMl90IHNpemU7DQo+ID4gKwkvKio8IE51bWJlciBvZiBlbnRyaWVzIGlu IHF1ZXVlLiBUeXBpY2FsbHksIHRoaXMgd2lsbCBiZQ0KPiA+ICsJICogICB0aGUgc2FtZSBhcyB0 aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBzdXBwb3J0ZWQgaW4gdGhlDQo+ID4gKwkgKiAg IGxvY2sgZnJlZSBkYXRhIHN0cnVjdHVyZS4NCj4gPiArCSAqICAgRGF0YSBzdHJ1Y3R1cmVzIHdp dGggdW5ib3VuZGVkIG51bWJlciBvZiBlbnRyaWVzIGlzIG5vdA0KPiA+ICsJICogICBzdXBwb3J0 ZWQgY3VycmVudGx5Lg0KPiA+ICsJICovDQo+ID4gKwl1aW50MzJfdCBlc2l6ZTsNCj4gPiArCS8q KjwgU2l6ZSAoaW4gYnl0ZXMpIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgZGVmZXIgcXVldWUuDQo+ ID4gKwkgKiAgIFRoaXMgaGFzIHRvIGJlIG11bHRpcGxlIG9mIDhCIGFzIHRoZSBydGVfcmluZyBB UElzDQo+ID4gKwkgKiAgIHN1cHBvcnQgOEIgZWxlbWVudCBzaXplcyBvbmx5Lg0KPiA+ICsJICov DQo+ID4gKwlydGVfcmN1X3FzYnJfZnJlZV9yZXNvdXJjZSBmOw0KPiA+ICsJLyoqPCBGdW5jdGlv biB0byBjYWxsIHRvIGZyZWUgdGhlIHJlc291cmNlLiAqLw0KPiA+ICsJdm9pZCAqcDsNCj4gPiAr CS8qKjwgUG9pbnRlciBwYXNzZWQgdG8gdGhlIGZyZWUgZnVuY3Rpb24uIFR5cGljYWxseSwgdGhp cyBpcyB0aGUNCj4gPiArCSAqICAgcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gd2hp Y2ggdGhlIHJlc291cmNlIHRvIGZyZWUNCj4gPiArCSAqICAgYmVsb25ncy4gVGhpcyBjYW4gYmUg TlVMTC4NCj4gPiArCSAqLw0KPiA+ICsJc3RydWN0IHJ0ZV9yY3VfcXNiciAqdjsNCj4gPiArCS8q KjwgUkNVIFFTQlIgdmFyaWFibGUgdG8gdXNlIGZvciB0aGlzIGRlZmVyIHF1ZXVlICovIH07DQo+ ID4gKw0KPiA+ICsvKiBSVEUgZGVmZXIgcXVldWUgc3RydWN0dXJlLg0KPiA+ICsgKiBUaGlzIHN0 cnVjdHVyZSBob2xkcyB0aGUgZGVmZXIgcXVldWUuIFRoZSBkZWZlciBxdWV1ZSBpcyB1c2VkIHRv DQo+ID4gKyAqIGhvbGQgdGhlIGRlbGV0ZWQgZW50cmllcyBmcm9tIHRoZSBkYXRhIHN0cnVjdHVy ZSB0aGF0IGFyZSBub3QNCj4gPiArICogeWV0IGZyZWVkLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0 IHJ0ZV9yY3VfcXNicl9kcTsNCj4gPiArDQo+ID4gICAvKioNCj4gPiAgICAqIEB3YXJuaW5nDQo+ ID4gICAgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlv ciBub3RpY2UgQEANCj4gPiAtNjQ4LDYgKzcxMCwxMTMgQEAgX19ydGVfZXhwZXJpbWVudGFsDQo+ ID4gICBpbnQNCj4gPiAgIHJ0ZV9yY3VfcXNicl9kdW1wKEZJTEUgKmYsIHN0cnVjdCBydGVfcmN1 X3FzYnIgKnYpOw0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBF WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4g PiArICoNCj4gPiArICogQ3JlYXRlIGEgcXVldWUgdXNlZCB0byBzdG9yZSB0aGUgZGF0YSBzdHJ1 Y3R1cmUgZWxlbWVudHMgdGhhdCBjYW4NCj4gPiArICogYmUgZnJlZWQgbGF0ZXIuIFRoaXMgcXVl dWUgaXMgcmVmZXJyZWQgdG8gYXMgJ2RlZmVyIHF1ZXVlJy4NCj4gPiArICoNCj4gPiArICogQHBh cmFtIHBhcmFtcw0KPiA+ICsgKiAgIFBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgZGVmZXIgcXVldWUu DQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBPbiBzdWNjZXNzIC0gVmFsaWQgcG9pbnRlciB0 byBkZWZlciBxdWV1ZQ0KPiA+ICsgKiAgIE9uIGVycm9yIC0gTlVMTA0KPiA+ICsgKiAgIFBvc3Np YmxlIHJ0ZV9lcnJubyBjb2RlcyBhcmU6DQo+ID4gKyAqICAgLSBFSU5WQUwgLSBOVUxMIHBhcmFt ZXRlcnMgYXJlIHBhc3NlZA0KPiA+ICsgKiAgIC0gRU5PTUVNIC0gTm90IGVub3VnaCBtZW1vcnkN Cj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ICtzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxICoNCj4gPiArcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcnRlX3Jj dV9xc2JyX2RxX3BhcmFtZXRlcnMNCj4gPiArKnBhcmFtcyk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hh bmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEVucXVldWUgb25lIHJl c291cmNlIHRvIHRoZSBkZWZlciBxdWV1ZSBhbmQgc3RhcnQgdGhlIGdyYWNlIHBlcmlvZC4NCj4g PiArICogVGhlIHJlc291cmNlIHdpbGwgYmUgZnJlZWQgbGF0ZXIgYWZ0ZXIgYXQgbGVhc3Qgb25l IGdyYWNlIHBlcmlvZA0KPiA+ICsgKiBpcyBvdmVyLg0KPiA+ICsgKg0KPiA+ICsgKiBJZiB0aGUg ZGVmZXIgcXVldWUgaXMgZnVsbCwgaXQgd2lsbCBhdHRlbXB0IHRvIHJlY2xhaW0gcmVzb3VyY2Vz Lg0KPiA+ICsgKiBJdCB3aWxsIGFsc28gcmVjbGFpbSByZXNvdXJjZXMgYXQgcmVndWxhciBpbnRl cnZhbHMgdG8gYXZvaWQNCj4gPiArICogdGhlIGRlZmVyIHF1ZXVlIGZyb20gZ3Jvd2luZyB0b28g YmlnLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIEFQSSBpcyBub3QgbXVsdGktdGhyZWFkIHNhZmUu IEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGNhbGxlcg0KPiA+ICsgKiBwcm92aWRlcyBtdWx0aS10 aHJlYWQgc2FmZXR5IGJ5IGxvY2tpbmcgYSBtdXRleCBvciBzb21lIG90aGVyIG1lYW5zLg0KPiA+ ICsgKg0KPiA+ICsgKiBBIGxvY2sgZnJlZSBtdWx0aS10aHJlYWQgd3JpdGVyIGFsZ29yaXRobSBj b3VsZCBhY2hpZXZlDQo+ID4gK211bHRpLXRocmVhZA0KPiA+ICsgKiBzYWZldHkgYnkgY3JlYXRp bmcgYW5kIHVzaW5nIG9uZSBkZWZlciBxdWV1ZSBwZXIgdGhyZWFkLg0KPiA+ICsgKg0KPiA+ICsg KiBAcGFyYW0gZHENCj4gPiArICogICBEZWZlciBxdWV1ZSB0byBhbGxvY2F0ZSBhbiBlbnRyeSBm cm9tLg0KPiA+ICsgKiBAcGFyYW0gZQ0KPiA+ICsgKiAgIFBvaW50ZXIgdG8gcmVzb3VyY2UgZGF0 YSB0byBjb3B5IHRvIHRoZSBkZWZlciBxdWV1ZS4gVGhlIHNpemUgb2YNCj4gPiArICogICB0aGUg ZGF0YSB0byBjb3B5IGlzIGVxdWFsIHRvIHRoZSBlbGVtZW50IHNpemUgcHJvdmlkZWQgd2hlbiB0 aGUNCj4gPiArICogICBkZWZlciBxdWV1ZSB3YXMgY3JlYXRlZC4NCj4gPiArICogQHJldHVybg0K PiA+ICsgKiAgIE9uIHN1Y2Nlc3MgLSAwDQo+ID4gKyAqICAgT24gZXJyb3IgLSAxIHdpdGggcnRl X2Vycm5vIHNldCB0bw0KPiA+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBw YXNzZWQNCj4gPiArICogICAtIEVOT1NQQyAtIERlZmVyIHF1ZXVlIGlzIGZ1bGwuIFRoaXMgY29u ZGl0aW9uIGNhbiBub3QgaGFwcGVuDQo+ID4gKyAqCQlpZiB0aGUgZGVmZXIgcXVldWUgc2l6ZSBp cyBlcXVhbCAob3IgbGFyZ2VyKSB0aGFuIHRoZQ0KPiA+ICsgKgkJbnVtYmVyIG9mIGVsZW1lbnRz IGluIHRoZSBkYXRhIHN0cnVjdHVyZS4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRh bA0KPiA+ICtpbnQNCj4gPiArcnRlX3JjdV9xc2JyX2RxX2VucXVldWUoc3RydWN0IHJ0ZV9yY3Vf cXNicl9kcSAqZHEsIHZvaWQgKmUpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5n DQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHBy aW9yIG5vdGljZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZWNsYWltIHJlc291cmNlcyBmcm9tIHRoZSBk ZWZlciBxdWV1ZS4NCj4gPiArICoNCj4gPiArICogVGhpcyBBUEkgaXMgbm90IG11bHRpLXRocmVh ZCBzYWZlLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBjYWxsZXINCj4gPiArICogcHJvdmlkZXMg bXVsdGktdGhyZWFkIHNhZmV0eSBieSBsb2NraW5nIGEgbXV0ZXggb3Igc29tZSBvdGhlciBtZWFu cy4NCj4gPiArICoNCj4gPiArICogQSBsb2NrIGZyZWUgbXVsdGktdGhyZWFkIHdyaXRlciBhbGdv cml0aG0gY291bGQgYWNoaWV2ZQ0KPiA+ICttdWx0aS10aHJlYWQNCj4gPiArICogc2FmZXR5IGJ5 IGNyZWF0aW5nIGFuZCB1c2luZyBvbmUgZGVmZXIgcXVldWUgcGVyIHRocmVhZC4NCj4gPiArICoN Cj4gPiArICogQHBhcmFtIGRxDQo+ID4gKyAqICAgRGVmZXIgcXVldWUgdG8gcmVjbGFpbSBhbiBl bnRyeSBmcm9tLg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgT24gc3VjY2Vzc2Z1bCByZWNs YW1hdGlvbiBvZiBhdCBsZWFzdCAxIHJlc291cmNlIC0gMA0KPiA+ICsgKiAgIE9uIGVycm9yIC0g MSB3aXRoIHJ0ZV9lcnJubyBzZXQgdG8NCj4gPiArICogICAtIEVJTlZBTCAtIE5VTEwgcGFyYW1l dGVycyBhcmUgcGFzc2VkDQo+ID4gKyAqICAgLSBFQUdBSU4gLSBOb25lIG9mIHRoZSByZXNvdXJj ZXMgaGF2ZSBjb21wbGV0ZWQgYXQgbGVhc3QgMSBncmFjZQ0KPiBwZXJpb2QsDQo+ID4gKyAqCQl0 cnkgYWdhaW4uDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAraW50DQo+ ID4gK3J0ZV9yY3VfcXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5U QUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiArICoNCj4g PiArICogRGVsZXRlIGEgZGVmZXIgcXVldWUuDQo+ID4gKyAqDQo+ID4gKyAqIEl0IHRyaWVzIHRv IHJlY2xhaW0gYWxsIHRoZSByZXNvdXJjZXMgb24gdGhlIGRlZmVyIHF1ZXVlLg0KPiA+ICsgKiBJ ZiBhbnkgb2YgdGhlIHJlc291cmNlcyBoYXZlIG5vdCBjb21wbGV0ZWQgdGhlIGdyYWNlIHBlcmlv ZA0KPiA+ICsgKiB0aGUgcmVjbGFtYXRpb24gc3RvcHMgYW5kIHJldHVybnMgaW1tZWRpYXRlbHku IFRoZSByZXN0IG9mDQo+ID4gKyAqIHRoZSByZXNvdXJjZXMgYXJlIG5vdCByZWNsYWltZWQgYW5k IHRoZSBkZWZlciBxdWV1ZSBpcyBub3QNCj4gPiArICogZnJlZWQuDQo+ID4gKyAqDQo+ID4gKyAq IEBwYXJhbSBkcQ0KPiA+ICsgKiAgIERlZmVyIHF1ZXVlIHRvIGRlbGV0ZS4NCj4gPiArICogQHJl dHVybg0KPiA+ICsgKiAgIE9uIHN1Y2Nlc3MgLSAwDQo+ID4gKyAqICAgT24gZXJyb3IgLSAxDQo+ ID4gKyAqICAgUG9zc2libGUgcnRlX2Vycm5vIGNvZGVzIGFyZToNCj4gPiArICogICAtIEVJTlZB TCAtIE5VTEwgcGFyYW1ldGVycyBhcmUgcGFzc2VkDQo+ID4gKyAqICAgLSBFQUdBSU4gLSBTb21l IG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBub3QgY29tcGxldGVkIGF0IGxlYXN0IDEgZ3JhY2UNCj4g PiArICoJCXBlcmlvZCwgdHJ5IGFnYWluLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVu dGFsDQo+ID4gK2ludA0KPiA+ICtydGVfcmN1X3FzYnJfZHFfZGVsZXRlKHN0cnVjdCBydGVfcmN1 X3FzYnJfZHEgKmRxKTsNCj4gPiArDQo+ID4gICAjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiAgIH0N Cj4gPiAgICNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3Fz YnJfcHZ0LmgNCj4gPiBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNicl9wdnQuaA0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwLi4yMTIyYmMzNmENCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5o DQo+ID4gQEAgLTAsMCArMSw0NiBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTMtQ2xhdXNlDQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBBcm0gTGltaXRlZA0KPiA+ ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX1JURV9SQ1VfUVNCUl9QVlRfSF8NCj4gPiArI2Rl ZmluZSBfUlRFX1JDVV9RU0JSX1BWVF9IXw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIFRoaXMg ZmlsZSBpcyBwcml2YXRlIHRvIHRoZSBSQ1UgbGlicmFyeS4gSXQgc2hvdWxkIG5vdCBiZSBpbmNs dWRlZA0KPiA+ICsgKiBieSB0aGUgdXNlciBvZiB0aGlzIGxpYnJhcnkuDQo+ID4gKyAqLw0KPiA+ ICsNCj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gK2V4dGVybiAiQyIgew0KPiA+ICsjZW5k aWYNCj4gPiArDQo+ID4gKyNpbmNsdWRlICJydGVfcmN1X3FzYnIuaCINCj4gPiArDQo+ID4gKy8q IFJURSBkZWZlciBxdWV1ZSBzdHJ1Y3R1cmUuDQo+ID4gKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRz IHRoZSBkZWZlciBxdWV1ZS4gVGhlIGRlZmVyIHF1ZXVlIGlzIHVzZWQgdG8NCj4gPiArICogaG9s ZCB0aGUgZGVsZXRlZCBlbnRyaWVzIGZyb20gdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgYXJlIG5v dA0KPiA+ICsgKiB5ZXQgZnJlZWQuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2Jy X2RxIHsNCj4gPiArCXN0cnVjdCBydGVfcmN1X3FzYnIgKnY7IC8qKjwgUkNVIFFTQlIgdmFyaWFi bGUgdXNlZCBieSB0aGlzIHF1ZXVlLiovDQo+ID4gKwlzdHJ1Y3QgcnRlX3JpbmcgKnI7ICAgICAv Kio8IFJDVSBRU0JSIGRlZmVyIHF1ZXVlLiAqLw0KPiA+ICsJdWludDMyX3Qgc2l6ZTsNCj4gPiAr CS8qKjwgTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBkZWZlciBxdWV1ZSAqLw0KPiA+ICsJdWlu dDMyX3QgZXNpemU7DQo+ID4gKwkvKio8IFNpemUgKGluIGJ5dGVzKSBvZiBkYXRhIHN0b3JlZCBv biB0aGUgZGVmZXIgcXVldWUgKi8NCj4gPiArCXJ0ZV9yY3VfcXNicl9mcmVlX3Jlc291cmNlIGY7 DQo+ID4gKwkvKio8IEZ1bmN0aW9uIHRvIGNhbGwgdG8gZnJlZSB0aGUgcmVzb3VyY2UuICovDQo+ ID4gKwl2b2lkICpwOw0KPiA+ICsJLyoqPCBQb2ludGVyIHBhc3NlZCB0byB0aGUgZnJlZSBmdW5j dGlvbi4gVHlwaWNhbGx5LCB0aGlzIGlzIHRoZQ0KPiA+ICsJICogICBwb2ludGVyIHRvIHRoZSBk YXRhIHN0cnVjdHVyZSB0byB3aGljaCB0aGUgcmVzb3VyY2UgdG8gZnJlZQ0KPiA+ICsJICogICBi ZWxvbmdzLg0KPiA+ICsJICovDQo+ID4gKwljaGFyIGVbMF07DQo+ID4gKwkvKio8IFRlbXBvcmFy eSBzdG9yYWdlIHRvIGNvcHkgdGhlIGRlZmVyIHF1ZXVlIGVsZW1lbnQuICovIH07DQo+ID4gKw0K PiA+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiArfQ0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4g KyNlbmRpZiAvKiBfUlRFX1JDVV9RU0JSX1BWVF9IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX3JjdS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4gYi9saWIvbGlicnRlX3JjdS9ydGVf cmN1X3ZlcnNpb24ubWFwDQo+ID4gaW5kZXggZjhiOWVmMmFiLi5kZmFjODhhMzcgMTAwNjQ0DQo+ ID4gLS0tIGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ICsrKyBiL2xp Yi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXANCj4gPiBAQCAtOCw2ICs4LDEwIEBAIEVY UEVSSU1FTlRBTCB7DQo+ID4gICAJcnRlX3JjdV9xc2JyX3N5bmNocm9uaXplOw0KPiA+ICAgCXJ0 ZV9yY3VfcXNicl90aHJlYWRfcmVnaXN0ZXI7DQo+ID4gICAJcnRlX3JjdV9xc2JyX3RocmVhZF91 bnJlZ2lzdGVyOw0KPiA+ICsJcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZTsNCj4gPiArCXJ0ZV9yY3Vf cXNicl9kcV9lbnF1ZXVlOw0KPiA+ICsJcnRlX3JjdV9xc2JyX2RxX3JlY2xhaW07DQo+ID4gKwly dGVfcmN1X3FzYnJfZHFfZGVsZXRlOw0KPiA+DQo+ID4gICAJbG9jYWw6ICo7DQo+ID4gICB9Ow0K PiA+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5kZXgN Cj4gPiBlNWZmODM4OTMuLjBlMWJlODQwNyAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbWVzb24uYnVp bGQNCj4gPiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4gPiBAQCAtMTEsNyArMTEsOSBAQA0KPiA+ ICAgbGlicmFyaWVzID0gWw0KPiA+ICAgCSdrdmFyZ3MnLCAjIGVhbCBkZXBlbmRzIG9uIGt2YXJn cw0KPiA+ICAgCSdlYWwnLCAjIGV2ZXJ5dGhpbmcgZGVwZW5kcyBvbiBlYWwNCj4gPiAtCSdyaW5n JywgJ21lbXBvb2wnLCAnbWJ1ZicsICduZXQnLCAnbWV0ZXInLCAnZXRoZGV2JywgJ3BjaScsICMg Y29yZQ0KPiA+ICsJJ3JpbmcnLA0KPiA+ICsJJ3JjdScsICMgcmN1IGRlcGVuZHMgb24gcmluZw0K PiA+ICsJJ21lbXBvb2wnLCAnbWJ1ZicsICduZXQnLCAnbWV0ZXInLCAnZXRoZGV2JywgJ3BjaScs ICMgY29yZQ0KPiA+ICAgCSdjbWRsaW5lJywNCj4gPiAgIAknbWV0cmljcycsICMgYml0cmF0ZS9s YXRlbmN5IHN0YXRzIGRlcGVuZHMgb24gdGhpcw0KPiA+ICAgCSdoYXNoJywgICAgIyBlZmQgZGVw ZW5kcyBvbiB0aGlzDQo+ID4gQEAgLTIyLDcgKzI0LDcgQEAgbGlicmFyaWVzID0gWw0KPiA+ICAg CSdncm8nLCAnZ3NvJywgJ2lwX2ZyYWcnLCAnam9ic3RhdHMnLA0KPiA+ICAgCSdrbmknLCAnbGF0 ZW5jeXN0YXRzJywgJ2xwbScsICdtZW1iZXInLA0KPiA+ICAgCSdwb3dlcicsICdwZHVtcCcsICdy YXdkZXYnLA0KPiA+IC0JJ3JjdScsICdyZW9yZGVyJywgJ3NjaGVkJywgJ3NlY3VyaXR5JywgJ3N0 YWNrJywgJ3Zob3N0JywNCj4gPiArCSdyZW9yZGVyJywgJ3NjaGVkJywgJ3NlY3VyaXR5JywgJ3N0 YWNrJywgJ3Zob3N0JywNCj4gPiAgIAkjIGlwc2VjIGxpYiBkZXBlbmRzIG9uIG5ldCwgY3J5cHRv IGFuZCBzZWN1cml0eQ0KPiA+ICAgCSdpcHNlYycsDQo+ID4gICAJIyBhZGQgcGt0IGZyYW1ld29y ayBsaWJzIHdoaWNoIHVzZSBvdGhlciBsaWJzIGZyb20gYWJvdmUNCj4gDQo+IC0tDQo+IFJlZ2Fy ZHMsDQo+IFZsYWRpbWlyDQoNCg==