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 AEB53A04A2; Tue, 12 May 2020 12:34:28 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 083BE1BFDB; Tue, 12 May 2020 12:34:28 +0200 (CEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2071.outbound.protection.outlook.com [40.107.20.71]) by dpdk.org (Postfix) with ESMTP id E5D5F1BFD7 for ; Tue, 12 May 2020 12:34:25 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xh2OVdWI9v1sLfqickk5tvRht98KenX63GD+w7AxZwBclSRFb2PGWEXf39ytFIxYkbpvrBnwt3Mv2Zg1jWHBIEo7+H+vBZKKUOYuqvIQQrIWONLjj+F5FLjF5IHZ953qeEfgd7jQdQ6zQN+zUZ/fQAEcPPxBiMcmin8nidCD1HlyUSPP78SaMqcoaYE8HYD25kVVB5elBlXFZ4Wab8pmx+1OZC7owonRzJ1IHPde/2kdst/BqARzMWrpvJnK2G53fohQORmWoXbgCB/OcuDBI+Kbo5iAFTF0/Px0uatfItJ8tZu1YSbVs5LniHTL6nZ3F8quf52WOz5NS2o54eprdQ== 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=72ssrkWgMupBWZvEctEIQW/e6Kv9Tts8AlvmIBVHo/A=; b=UfjDhSqoJfBTwCMNTERzigpMmooZJg9kpXk/KuZ7R2WyCpxRfaemGuEphKPJz1DDfNZx2qdIbhLHDR+0+p3NSXaEUEjH//5OVejEp0BsQQgFyFoWjhjbs/RnxD00c6hmKtCLvaVaRHp9qtUH/I9GBj2XUVMF81fcIKu9wiGO4WBK4H456v1nrqom05oyzKyIv6jf45L0xLzjXCsqAZirMnnWWxYPw8b77q6Prmqt/GLqW6gdPgZSLIe1z3cQcYPo6IuW5CHZ2WqJ9U71yCE//8ujFtlVkZHuvzGG9A9nbB3S69eCMIfWoaSHhupo1s35oGR3PtHQxCACiQUrVVVR0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=72ssrkWgMupBWZvEctEIQW/e6Kv9Tts8AlvmIBVHo/A=; b=hFqfsdpHLIeTsraXQn5Cuar27CH6RlnQ+4irvpzDBtW63G1/+TI6sKJP8cOECALk4F7uRJVAWCWpuHZo4EqRBJk9zfzcUu4bEeoKid2lM/QXydQuuX4fXjt33v+LdzAb21F6h6OhExVDnCB+3kFMprSl60fIm7hi/jXQ8EMNmkY= Received: from AM0PR05MB6610.eurprd05.prod.outlook.com (2603:10a6:208:12f::18) by AM0PR05MB6066.eurprd05.prod.outlook.com (2603:10a6:208:12d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2979.34; Tue, 12 May 2020 10:34:24 +0000 Received: from AM0PR05MB6610.eurprd05.prod.outlook.com ([fe80::900:c0ac:78bd:18fc]) by AM0PR05MB6610.eurprd05.prod.outlook.com ([fe80::900:c0ac:78bd:18fc%6]) with mapi id 15.20.2958.035; Tue, 12 May 2020 10:34:23 +0000 From: Wisam Monther To: Andrew Rybchenko , "dev@dpdk.org" , Jack Min , Thomas Monjalon , "jerinjacobk@gmail.com" , "ajit.khaparde@broadcom.com" Thread-Topic: [PATCH v6 2/5] app/flow-perf: add insertion rate calculation Thread-Index: AQHWJ4SlE9Hwz4dCH0ChukRKdZWx9aiiyc8AgAAGtXA= Date: Tue, 12 May 2020 10:34:23 +0000 Message-ID: References: <20200506123627.22340-2-wisamm@mellanox.com> <20200511110912.11535-1-wisamm@mellanox.com> <20200511110912.11535-3-wisamm@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: solarflare.com; dkim=none (message not signed) header.d=none;solarflare.com; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [188.161.228.59] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: cd8fd42a-e758-4225-d2b1-08d7f66009db x-ms-traffictypediagnostic: AM0PR05MB6066:|AM0PR05MB6066: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 0401647B7F x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jdW3YLz5pGj+47DSAkJ3uOJTINpC8Umeyltn8ac7LsA0EJb7NMvXgl1WpjGhTm0DOxvcakSsCmC4dPJyDq60nrJSjPtfYylE5z6toIh1iyVieH3i0diPNuYLCftvMswzAO0G8Ewbq71uavfMFIlUvuPjZQQKuMoXWzKXAPo8Vxg1AHNyfL5ZZ5e3gws3w28CF0Ty+cS9nOsvK4GleL6uh4E7n19umqMh9z/QF+AfRLlYEUxDjub4WlPPElPCpMPCwnA3j1S4XGFzCk8k5/gk+5JJbEHcrbavA7Vp4ID16Fyp8jK/wb+fUCh+4eUzoK6J7dmys2ZRpUDb9sHJduHg/uB9AZ0LWcs0T2J7d0aRevhIpXHwbxjPu0JLMOLKuWdwtOQ7ZO9VH3tNsWh55ES/lnfjLffbyI8IuqwrDrzxOnILEEH47PGg3RIofPv6TogdeQtNqOB8RSqZPQN4tNyCLAqb6wk9yvCBMIGnYFfmHT89jxPXDbVWC96Z4FaBdZz66kRSMI3RjEvesUxODQiajw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR05MB6610.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(346002)(136003)(376002)(39860400002)(366004)(396003)(33430700001)(478600001)(71200400001)(316002)(6506007)(2906002)(7696005)(26005)(8936002)(33440700001)(186003)(52536014)(9686003)(5660300002)(66946007)(66476007)(55016002)(64756008)(66556008)(66446008)(76116006)(86362001)(30864003)(33656002)(8676002)(110136005); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: c4d30fm1ge1RWq2jVmUiOoi+NkMKOi2OPd55363FzD3shDXsX/fV2tu2MAjcBHyqdf9ggAZnow3IbT9B05S51ldUUK+FOvfSlzlJF+6hPul3XTxKNMXFcQvLqq1PVoL3sUevwXyPw2DGgpPtGNXtJfRgTuaTLRlSyBK5bNYq3iKeaXQ7P2209csog8ctvdUfbLCveEU2+c9/z/zdrcx4PREM022KWJbFzkFaC4ndBGRQG/qWa/4vKRjvMoQh7ST0FPZjHbjPle55Y1pUa0YFihQcVTxUERrQzmJq6+i7SHE9LuKSWtZyPmff3Zl1yi6+/LChBn9Aqof+EN0BrRs5M8S2t0vdpfXHZn8TzxUW5uh3qSdnxKhYNe6n3KhkW8WMmJWcMk7/qulLA7i5+K9B/Z47hEZBHjyoxJAZISJWzcC/JeN4ob02UMgmQRYsLsow7OoApycbHDlVHpyBul+5zJhdrWswLqFhS25PL4Mj1bJalaHH+8/geQFKy17stxKY Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: cd8fd42a-e758-4225-d2b1-08d7f66009db X-MS-Exchange-CrossTenant-originalarrivaltime: 12 May 2020 10:34:23.7739 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: tvqIul/5d1wS3IzTvbVj3sgbvq+q7TXhXKSKLxgaQ/JlzzCHL41hfTTr2wpbwLaI+GGlDWb9towJ5ojOdMGoAg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB6066 Subject: Re: [dpdk-dev] [PATCH v6 2/5] app/flow-perf: add insertion rate calculation 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" Pi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogQW5kcmV3IFJ5YmNoZW5rbyA8YXJ5 YmNoZW5rb0Bzb2xhcmZsYXJlLmNvbT4NCj5TZW50OiBNb25kYXksIE1heSAxMSwgMjAyMCAzOjA1 IFBNDQo+VG86IFdpc2FtIE1vbnRoZXIgPHdpc2FtbUBtZWxsYW5veC5jb20+OyBkZXZAZHBkay5v cmc7IEphY2sgTWluDQo+PGphY2ttaW5AbWVsbGFub3guY29tPjsgVGhvbWFzIE1vbmphbG9uIDx0 aG9tYXNAbW9uamFsb24ubmV0PjsNCj5qZXJpbmphY29ia0BnbWFpbC5jb207IGFqaXQua2hhcGFy ZGVAYnJvYWRjb20uY29tDQo+U3ViamVjdDogUmU6IFtQQVRDSCB2NiAyLzVdIGFwcC9mbG93LXBl cmY6IGFkZCBpbnNlcnRpb24gcmF0ZSBjYWxjdWxhdGlvbg0KPg0KPk9uIDUvMTEvMjAgMjowOSBQ TSwgV2lzYW0gSmFkZG8gd3JvdGU6DQo+PiBBZGQgaW5zZXJ0aW9uIHJhdGUgY2FsY3VsYXRpb24g ZmVhdHVyZSBpbnRvIGZsb3cNCj4+IHBlcmZvcm1hbmNlIGFwcGxpY2F0aW9uLg0KPj4NCj4+IFRo ZSBhcHBsaWNhdGlvbiBub3cgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byB0ZXN0DQo+PiBpbnNlcnRp b24gcmF0ZSBvZiBzcGVjaWZpYyBydGVfZmxvdyBydWxlLCBieQ0KPj4gc3RyZXNzaW5nIGl0IHRv IHRoZSBOSUMsIGFuZCBjYWxjdWxhdGUgdGhlDQo+PiBpbnNlcnRpb24gcmF0ZS4NCj4+DQo+PiBU aGUgYXBwbGljYXRpb24gb2ZmZXJzIHNvbWUgb3B0aW9ucyBpbiB0aGUgY29tbWFuZA0KPj4gbGlu ZSwgdG8gY29uZmlndXJlIHdoaWNoIHJ1bGUgdG8gYXBwbHkuDQo+Pg0KPj4gQWZ0ZXIgdGhhdCB0 aGUgYXBwbGljYXRpb24gd2lsbCBzdGFydCBwcm9kdWNpbmcNCj4+IHJ1bGVzIHdpdGggc2FtZSBw YXR0ZXJuIGJ1dCBpbmNyZWFzaW5nIHRoZSBvdXRlciBJUA0KPj4gc291cmNlIGFkZHJlc3MgYnkg MSBlYWNoIHRpbWUsIHRodXMgaXQgd2lsbCBnaXZlDQo+PiBkaWZmZXJlbnQgZmxvdyBlYWNoIHRp bWUsIGFuZCBhbGwgb3RoZXIgaXRlbXMgd2lsbA0KPj4gaGF2ZSBvcGVuIG1hc2tzLg0KPj4NCj4+ IFRoZSBjdXJyZW50IGRlc2lnbiBoYXZlIHNpbmdsZSBjb3JlIGluc2VydGlvbiByYXRlLg0KPj4g SW4gdGhlIGZ1dHVyZSB3ZSBtYXkgaGF2ZSBhIG11bHRpIGNvcmUgaW5zZXJ0aW9uDQo+PiByYXRl IG1lYXN1cmVtZW50IHN1cHBvcnQgaW4gdGhlIGFwcC4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBX aXNhbSBKYWRkbyA8d2lzYW1tQG1lbGxhbm94LmNvbT4NCj4+IC0tLQ0KPj4gIGFwcC90ZXN0LWZs b3ctcGVyZi9NYWtlZmlsZSAgICAgICAgICAgIHwgICAzICsNCj4+ICBhcHAvdGVzdC1mbG93LXBl cmYvYWN0aW9uc19nZW4uYyAgICAgICB8IDE2NCArKysrKysrKysNCj4+ICBhcHAvdGVzdC1mbG93 LXBlcmYvYWN0aW9uc19nZW4uaCAgICAgICB8ICAyOSArKw0KPj4gIGFwcC90ZXN0LWZsb3ctcGVy Zi9jb25maWcuaCAgICAgICAgICAgIHwgIDE2ICsNCj4+ICBhcHAvdGVzdC1mbG93LXBlcmYvZmxv d19nZW4uYyAgICAgICAgICB8IDE0NSArKysrKysrKw0KPj4gIGFwcC90ZXN0LWZsb3ctcGVyZi9m bG93X2dlbi5oICAgICAgICAgIHwgIDM3ICsrDQo+PiAgYXBwL3Rlc3QtZmxvdy1wZXJmL2l0ZW1z X2dlbi5jICAgICAgICAgfCAyNzcgKysrKysrKysrKysrKysrDQo+PiAgYXBwL3Rlc3QtZmxvdy1w ZXJmL2l0ZW1zX2dlbi5oICAgICAgICAgfCAgMzEgKysNCj4+ICBhcHAvdGVzdC1mbG93LXBlcmYv bWFpbi5jICAgICAgICAgICAgICB8IDQ3MiArKysrKysrKysrKysrKysrKysrKysrKystDQo+PiAg YXBwL3Rlc3QtZmxvdy1wZXJmL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDMgKw0KPj4gIGRvYy9n dWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjBfMDUucnN0IHwgICAzICsNCj4+ICBkb2MvZ3VpZGVz L3Rvb2xzL2Zsb3ctcGVyZi5yc3QgICAgICAgICB8IDE5NSArKysrKysrKystDQo+PiAgMTIgZmls ZXMgY2hhbmdlZCwgMTM2OCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQ0KPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBhcHAvdGVzdC1mbG93LXBlcmYvYWN0aW9uc19nZW4uYw0KPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBhcHAvdGVzdC1mbG93LXBlcmYvYWN0aW9uc19nZW4uaA0KPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBhcHAvdGVzdC1mbG93LXBlcmYvZmxvd19nZW4uYw0KPj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBhcHAvdGVzdC1mbG93LXBlcmYvZmxvd19nZW4uaA0KPj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBhcHAvdGVzdC1mbG93LXBlcmYvaXRlbXNfZ2VuLmMNCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgYXBwL3Rlc3QtZmxvdy1wZXJmL2l0ZW1zX2dlbi5oDQo+Pg0KPj4gZGlmZiAtLWdpdCBh L2FwcC90ZXN0LWZsb3ctcGVyZi9NYWtlZmlsZSBiL2FwcC90ZXN0LWZsb3ctcGVyZi9NYWtlZmls ZQ0KPj4gaW5kZXggZGIwNDNjMTdhLi40ZjJkYjc1OTEgMTAwNjQ0DQo+PiAtLS0gYS9hcHAvdGVz dC1mbG93LXBlcmYvTWFrZWZpbGUNCj4+ICsrKyBiL2FwcC90ZXN0LWZsb3ctcGVyZi9NYWtlZmls ZQ0KPj4gQEAgLTE2LDYgKzE2LDkgQEAgQ0ZMQUdTICs9ICQoV0VSUk9SX0ZMQUdTKQ0KPj4gICMN Cj4+ICAjIGFsbCBzb3VyY2UgYXJlIHN0b3JlZCBpbiBTUkNTLXkNCj4+ICAjDQo+PiArU1JDUy15 ICs9IGFjdGlvbnNfZ2VuLmMNCj4+ICtTUkNTLXkgKz0gZmxvd19nZW4uYw0KPj4gK1NSQ1MteSAr PSBpdGVtc19nZW4uYw0KPj4gIFNSQ1MteSArPSBtYWluLmMNCj4+DQo+PiAgaW5jbHVkZSAkKFJU RV9TREspL21rL3J0ZS5hcHAubWsNCj4+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1mbG93LXBlcmYv YWN0aW9uc19nZW4uYyBiL2FwcC90ZXN0LWZsb3ctDQo+cGVyZi9hY3Rpb25zX2dlbi5jDQo+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwLi4xNmJiM2NmMjANCj4+IC0t LSAvZGV2L251bGwNCj4+ICsrKyBiL2FwcC90ZXN0LWZsb3ctcGVyZi9hY3Rpb25zX2dlbi5jDQo+ PiBAQCAtMCwwICsxLDE2NCBAQA0KPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt My1DbGF1c2UNCj4+ICsgKiBDb3B5cmlnaHQgMjAyMCBNZWxsYW5veCBUZWNobm9sb2dpZXMsIEx0 ZA0KPj4gKyAqDQo+PiArICogVGhlIGZpbGUgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9ucyBv ZiBhY3Rpb25zIGdlbmVyYXRvcnMuDQo+PiArICogRWFjaCBnZW5lcmF0b3IgaXMgcmVzcG9uc2li bGUgZm9yIHByZXBhcmluZyBpdCdzIGFjdGlvbiBpbnN0YW5jZQ0KPj4gKyAqIGFuZCBpbml0aWFs aXppbmcgaXQgd2l0aCBuZWVkZWQgZGF0YS4NCj4+ICsgKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9tYWxsb2MuaD4NCj4+ICsjaW5jbHVkZSA8 cnRlX2Zsb3cuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2V0aGRldi5oPg0KPj4gKw0KPj4gKyNpbmNs dWRlICJhY3Rpb25zX2dlbi5oIg0KPj4gKyNpbmNsdWRlICJjb25maWcuaCINCj4+ICsNCj4+ICsv KiBTdG9yYWdlIGZvciBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyBpbmNsdWRpbmcgZXh0ZXJu YWwgZGF0YS4gKi8NCj4+ICtzdHJ1Y3QgYWN0aW9uX3Jzc19kYXRhIHsNCj4+ICsJc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbl9yc3MgY29uZjsNCj4+ICsJdWludDhfdCBrZXlbNDBdOw0KPj4gKwl1aW50 MTZfdCBxdWV1ZVsxMjhdOw0KPj4gK307DQo+PiArDQo+PiArdm9pZA0KPj4gK2FkZF9tYXJrKHN0 cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbnMsDQo+PiArCXVpbnQ4X3QgYWN0aW9uc19jb3Vu dGVyKQ0KPj4gK3sNCj4+ICsJc3RhdGljIHN0cnVjdCBydGVfZmxvd19hY3Rpb25fbWFyayBtYXJr X2FjdGlvbjsNCj4NCj5GdW5jdGlvbi1sb2NhbCBzdGF0aWMgdmFyaWFibGVzIGEgYml0IGJldHRl ciB0aGFuIGZpbGUtbG9jYWwNCj5vciBnbG9iYWwgdmFyaWFibGUsIGJ1dCBqdXN0IGEgYml0LiBT ZWUgYmVsb3cuDQo+QXQgYmFyZSBtaW5pbXVtIGl0IHJlcXVpcmVzIGEgY2hlY2sgdGhhdCB0aGUg YWN0aW9uIGlzIG5vdA0KPmluIHVzZSBhbHJlYWR5LiBTYW1lIGluIG1hbnkgY2FzZXMgYmVsb3cu DQoNClllcyBpdCdzIGJldHRlciwNCldoYXQgeW91IG1lYW4gYnkgIiBBdCBiYXJlIG1pbmltdW0g aXQgcmVxdWlyZXMgYSBjaGVjayB0aGF0IHRoZSBhY3Rpb24gaXMgbm90IGluIHVzZSBhbHJlYWR5 Ig0KQ2FuIHlvdSBwbGVhc2UgZWxhYm9yYXRlPw0KDQo+DQo+PiArDQo+PiArCWRvIHsNCj4+ICsJ CW1hcmtfYWN0aW9uLmlkID0gTUFSS19JRDsNCj4+ICsJfSB3aGlsZSAoMCk7DQo+DQo+V2h5IGRv IHlvdSB1c2UgZHVtbXkgZG8td2hpbGUgbG9vcCBoZXJlPyBNYW55IHNpbWlsYXIgY2FzZXMNCj5i ZWxvdy4NCg0KU29tZXRpbWVzLCBpdCBjcmVhdGUgdGhlIGZsb3cgYmVmb3JlIHNldHRpbmcgdGhl IGNvcnJlY3QgaWQsIEkgdGhpbmsgaXQncyBjb21waWxlciBzdHVmZg0KU28gdGhlIGR1bW15IGxv b3AgdG8gbWFrZSBzdXJlIHRoZSBjb21waWxlciBmaW5pc2ggaXQncyBleGVjdXRpb24gYW5kIG1h a2Ugc3VyZQ0KV2hlbiB0aGUgZmxvdyBpcyBjcmVhdGVkIHRoZSBhY3Rpb24gaGF2ZSBjb3JyZWN0 IHZhbHVlLg0KDQo+DQo+PiArDQo+PiArCWFjdGlvbnNbYWN0aW9uc19jb3VudGVyXS50eXBlID0g UlRFX0ZMT1dfQUNUSU9OX1RZUEVfTUFSSzsNCj4+ICsJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXJd LmNvbmYgPSAmbWFya19hY3Rpb247DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthZGRfcXVl dWUoc3RydWN0IHJ0ZV9mbG93X2FjdGlvbiAqYWN0aW9ucywNCj4+ICsJdWludDhfdCBhY3Rpb25z X2NvdW50ZXIsIHVpbnQxNl90IHF1ZXVlKQ0KPj4gK3sNCj4+ICsJc3RhdGljIHN0cnVjdCBydGVf Zmxvd19hY3Rpb25fcXVldWUgcXVldWVfYWN0aW9uOw0KPg0KPkl0IGRvZXMgbm90IGFsbG93IHRv IHVzZSB0aGUgYWN0aW9uIHR3aWNlIHRvIGRlbGl2ZXIgdG8NCj50byBxdWV1ZXMuDQoNClllcywg aXQncyBuZWVkZWQgb25seSBvbmNlDQoNCj4NCj4+ICsNCj4+ICsJZG8gew0KPj4gKwkJcXVldWVf YWN0aW9uLmluZGV4ID0gcXVldWU7DQo+PiArCX0gd2hpbGUgKDApOw0KPj4gKw0KPj4gKwlhY3Rp b25zW2FjdGlvbnNfY291bnRlcl0udHlwZSA9IFJURV9GTE9XX0FDVElPTl9UWVBFX1FVRVVFOw0K Pj4gKwlhY3Rpb25zW2FjdGlvbnNfY291bnRlcl0uY29uZiA9ICZxdWV1ZV9hY3Rpb247DQo+PiAr fQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthZGRfanVtcChzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICph Y3Rpb25zLA0KPj4gKwl1aW50OF90IGFjdGlvbnNfY291bnRlciwgdWludDE2X3QgbmV4dF90YWJs ZSkNCj4+ICt7DQo+PiArCXN0YXRpYyBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX2p1bXAganVtcF9h Y3Rpb247DQo+PiArDQo+PiArCWRvIHsNCj4+ICsJCWp1bXBfYWN0aW9uLmdyb3VwID0gbmV4dF90 YWJsZTsNCj4+ICsJfSB3aGlsZSAoMCk7DQo+PiArDQo+PiArCWFjdGlvbnNbYWN0aW9uc19jb3Vu dGVyXS50eXBlID0gUlRFX0ZMT1dfQUNUSU9OX1RZUEVfSlVNUDsNCj4+ICsJYWN0aW9uc1thY3Rp b25zX2NvdW50ZXJdLmNvbmYgPSAmanVtcF9hY3Rpb247DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQN Cj4+ICthZGRfcnNzKHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbnMsDQo+PiArCXVpbnQ4 X3QgYWN0aW9uc19jb3VudGVyLCB1aW50MTZfdCAqcXVldWVzLA0KPj4gKwl1aW50MTZfdCBxdWV1 ZXNfbnVtYmVyKQ0KPj4gK3sNCj4+ICsJc3RhdGljIHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNz ICpyc3NfYWN0aW9uOw0KPj4gKwlzdGF0aWMgc3RydWN0IGFjdGlvbl9yc3NfZGF0YSAqcnNzX2Rh dGE7DQo+DQo+SXQgaXMgYmV0dGVyIHRvIGFkZCBhbiBlbXB0eSBsaW5lIGhlcmUgdG8gc3BsaXQg c3RhdGljIGFuZA0KPm5vbi1zdGF0aWMgdmFyaWFibGUgYW5kIG1ha2UgaXQgZWFzeSB0byBjYXRj aCB0aGUgZGlmZmVyZW5jZS4NCj4NCj4+ICsJdWludDE2X3QgcXVldWU7DQo+PiArDQo+PiArCXJz c19kYXRhID0gcnRlX21hbGxvYygicnNzX2RhdGEiLA0KPj4gKwkJc2l6ZW9mKHN0cnVjdCBhY3Rp b25fcnNzX2RhdGEpLCAwKTsNCj4NCj5Eb2VzIGl0IG1lYW4gdGhhdCB0aGUgc2Vjb25kIGludm9j YXRpb24gd2lsbCBtYWtlDQo+YSBtZW1vcnkgbGVhaz8NCg0KTm90IGV4YWN0bHksIGJlY2F1c2Ug dGhlIHNlY29uZCBpbnZvY2F0aW9uIG1heSBoYXZlIGRpZmZlcmVudCBxdWV1ZXMgYW5kIG5lZWQN ClRvIGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgZmxvdywgc28gSSB0aGluayBpdCdzIG9rIHRvIHJl IG1hbGxvYyBpdC4NCg0KPg0KPj4gKw0KPj4gKwlpZiAocnNzX2RhdGEgPT0gTlVMTCkNCj4+ICsJ CXJ0ZV9leGl0KEVYSVRfRkFJTFVSRSwgIk5vIE1lbW9yeSBhdmFpbGFibGUhIik7DQo+PiArDQo+ PiArCSpyc3NfZGF0YSA9IChzdHJ1Y3QgYWN0aW9uX3Jzc19kYXRhKXsNCj4+ICsJCS5jb25mID0g KHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzKXsNCj4+ICsJCQkuZnVuYyA9IFJURV9FVEhfSEFT SF9GVU5DVElPTl9ERUZBVUxULA0KPj4gKwkJCS5sZXZlbCA9IDAsDQo+PiArCQkJLnR5cGVzID0g R0VUX1JTU19IRigpLA0KPj4gKwkJCS5rZXlfbGVuID0gc2l6ZW9mKHJzc19kYXRhLT5rZXkpLA0K Pj4gKwkJCS5xdWV1ZV9udW0gPSBxdWV1ZXNfbnVtYmVyLA0KPj4gKwkJCS5rZXkgPSByc3NfZGF0 YS0+a2V5LA0KPj4gKwkJCS5xdWV1ZSA9IHJzc19kYXRhLT5xdWV1ZSwNCj4+ICsJCX0sDQo+PiAr CQkua2V5ID0geyAxIH0sDQo+PiArCQkucXVldWUgPSB7IDAgfSwNCj4+ICsJfTsNCj4+ICsNCj4+ ICsJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlIDwgcXVldWVzX251bWJlcjsgcXVldWUrKykNCj4+ICsJ CXJzc19kYXRhLT5xdWV1ZVtxdWV1ZV0gPSBxdWV1ZXNbcXVldWVdOw0KPj4gKw0KPj4gKwlyc3Nf YWN0aW9uID0gJnJzc19kYXRhLT5jb25mOw0KPj4gKw0KPj4gKwlhY3Rpb25zW2FjdGlvbnNfY291 bnRlcl0udHlwZSA9IFJURV9GTE9XX0FDVElPTl9UWVBFX1JTUzsNCj4+ICsJYWN0aW9uc1thY3Rp b25zX2NvdW50ZXIrK10uY29uZiA9IHJzc19hY3Rpb247DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQN Cj4+ICthZGRfY291bnQoc3RydWN0IHJ0ZV9mbG93X2FjdGlvbiAqYWN0aW9ucywNCj4+ICsJdWlu dDhfdCBhY3Rpb25zX2NvdW50ZXIpDQo+PiArew0KPj4gKwlzdGF0aWMgc3RydWN0IHJ0ZV9mbG93 X2FjdGlvbl9jb3VudCBjb3VudF9hY3Rpb247DQo+DQo+QWdhaW4gaXQgbWVhbnMgaXQgaXMgaW1w b3NzaWJsZSB0byB1c2UgdGhlIGFjdGlvbiB0d2ljZSBpbiBvbmUNCj5ydWxlLg0KDQpZZXMsDQpJ ZiBJIHJlbW92ZWQgdGhlIHN0YXRpYyBmcm9tIHRoZSBpbm5lciBzY29wZSBoZXJlLA0KVGhlIGFj dGlvbiB3aWxsIGJlIGZyZWVkIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgZmlsZSwNCkFu ZCBzaW5jZSB0aGUgZGVzaWduIGhlcmUgdG8gYWRkIHRoZSBhY3Rpb24gaW50byBhY3Rpb25zIGFy cmF5IHRvIGJlIHVzZWQgbGF0ZXIgaW4gdGhlIGNyZWF0aW9uLA0KSXQgd2lsbCBub3QgaGF2ZSBj b3JyZWN0IGFjdGlvbiBpbiBjYXNlIG9mIG5vbmUtc3RhdGljIGluIHRoZSBpbm5lciBzY29wZS4N Cg0KSWYgYW55IGFjdGlvbiBuZWVkcyB0byBoYXZlIHByaXZpbGVnZSB0byBiZSBjYWxsZWQgdHdp Y2UgaW4gc2luZ2xlIHJ1bGUNCk5ldyBzdXBwb3J0IG5lZWRzIHRvIGJlIGRvbmUuDQoNClRoaXMg aXMgdGhlIGRlc2lnbiBmb3IgaXQsIEknbGwgYWRkIGludG8gdGhlIGtub3duIGxpbWl0YXRpb24u DQoNCj4+ICtzdGF0aWMgdm9pZA0KPj4gK2ZpbGxfaXRlbXMoc3RydWN0IHJ0ZV9mbG93X2l0ZW0g Kml0ZW1zLA0KPj4gKwl1aW50MzJfdCBmbG93X2l0ZW1zLCB1aW50MzJfdCBvdXRlcl9pcF9zcmMp DQo+DQo+SXQgbG9va3MgbGlrZSBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSB0aGUgZnVuY3Rpb24gaW5z aWRlDQo+aXRlbXNfZ2VuLmMuIEl0IHdvdWxkIGFsbG93IHRvIG1ha2UgYWxsIGFkZF88aXRlbT4g ZnVuY3Rpb25zDQo+bG9jYWwgdG8gaXRlbXNfZ2VuLmMuDQo+DQo+PiArew0KPj4gKwl1aW50OF90 IGl0ZW1zX2NvdW50ZXIgPSAwOw0KPj4gKw0KPj4gKwkvKiBTdXBwb3J0IG91dGVyIGl0ZW1zIHVw IHRvIHR1bm5lbCBsYXllciBvbmx5LiAqLw0KPj4gKw0KPj4gKwlpZiAoZmxvd19pdGVtcyAmIEZM T1dfSVRFTV9NQVNLKFJURV9GTE9XX0lURU1fVFlQRV9NRVRBKSkNCj4+ICsJCWFkZF9tZXRhX2Rh dGEoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19J VEVNX01BU0soUlRFX0ZMT1dfSVRFTV9UWVBFX1RBRykpDQo+PiArCQlhZGRfbWV0YV90YWcoaXRl bXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01B U0soUlRFX0ZMT1dfSVRFTV9UWVBFX0VUSCkpDQo+PiArCQlhZGRfZXRoZXIoaXRlbXMsIGl0ZW1z X2NvdW50ZXIrKyk7DQo+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01BU0soUlRFX0ZM T1dfSVRFTV9UWVBFX1ZMQU4pKQ0KPj4gKwkJYWRkX3ZsYW4oaXRlbXMsIGl0ZW1zX2NvdW50ZXIr Kyk7DQo+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfSVRFTV9U WVBFX0lQVjQpKQ0KPj4gKwkJYWRkX2lwdjQoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKywgb3V0ZXJf aXBfc3JjKTsNCj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBGTE9XX0lURU1fTUFTSyhSVEVfRkxPV19J VEVNX1RZUEVfSVBWNikpDQo+PiArCQlhZGRfaXB2NihpdGVtcywgaXRlbXNfY291bnRlcisrLCBv dXRlcl9pcF9zcmMpOw0KPj4gKwlpZiAoZmxvd19pdGVtcyAmIEZMT1dfSVRFTV9NQVNLKFJURV9G TE9XX0lURU1fVFlQRV9UQ1ApKQ0KPj4gKwkJYWRkX3RjcChpdGVtcywgaXRlbXNfY291bnRlcisr KTsNCj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBGTE9XX0lURU1fTUFTSyhSVEVfRkxPV19JVEVNX1RZ UEVfVURQKSkNCj4+ICsJCWFkZF91ZHAoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+PiArCWlm IChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfSVRFTV9UWVBFX1ZYTEFOKSkN Cj4+ICsJCWFkZF92eGxhbihpdGVtcywgaXRlbXNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZsb3df aXRlbXMgJg0KPkZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0lURU1fVFlQRV9WWExBTl9HUEUpKQ0K Pj4gKwkJYWRkX3Z4bGFuX2dwZShpdGVtcywgaXRlbXNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZs b3dfaXRlbXMgJiBGTE9XX0lURU1fTUFTSyhSVEVfRkxPV19JVEVNX1RZUEVfR1JFKSkNCj4+ICsJ CWFkZF9ncmUoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+PiArCWlmIChmbG93X2l0ZW1zICYN Cj5GTE9XX0lURU1fTUFTSyhSVEVfRkxPV19JVEVNX1RZUEVfR0VORVZFKSkNCj4+ICsJCWFkZF9n ZW5ldmUoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+PiArCWlmIChmbG93X2l0ZW1zICYgRkxP V19JVEVNX01BU0soUlRFX0ZMT1dfSVRFTV9UWVBFX0dUUCkpDQo+PiArCQlhZGRfZ3RwKGl0ZW1z LCBpdGVtc19jb3VudGVyKyspOw0KPg0KPkl0IGNvdWxkIGJlIGRvbmUgaW4gYSBsb29wOiBkZWZp bmUgYW4gYXJyYXkgb2Ygc3RydWN0dXJlcw0KPkZMT1dfSVRFTV9NQVNLKHByb3RvKSB2YWx1ZXMg YW5kIGFkZCBmdW5jdGlvbiB3aGljaCBzaG91bGQgYmUNCj5jYWxsZWQuIFRoZSBvbmx5IGV4Y2Vw dGlvbiBpcyBJUHY0L0lQdjYgd2hpY2ggcmVxdWlyZXMgZXh0cmEgYXJndW1lbnQgLQ0KPnNvIGFs bCBhZGQgY2FsbGJhY2tzIHNob3VsZCBoYXZlIGFkZF9kYXRhIGFyZ3VtZW50DQo+d2hpY2ggaXMg YSBzdHJ1Y3R1cmUgd2l0aCBwb3NzaWJsZSB0dW5pbmdzLg0KDQpPaywgbGV0IG1lIHJlLXBocmFz ZSB0byBtYWtlIHN1cmUgSSBnb3QgaXQ6DQoxLSBNb3ZlIGl0IHRvIGl0ZW1zX2dlbi5jDQoyLSBD cmVhdGUgYXJyYXkgb2Ygc3RydWN0dXJlcyB3aXRoIGFsbCBpdGVtcy4NClRoZSBzdHJ1Y3R1cmUg c2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlIHRoaXM6DQogc3RhdGljIGNvbnN0IHN0cnVjdCBpdGVt c19kaWN0IHsNCiAgICAgICAgY29uc3QgdWludDY0X3QgbWFzazsNCiAgICAgICAgdm9pZCAoKmZ1 bmN0KShzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSAqaXRlbXMsDQogICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90IGl0ZW1zX2NvdW50ZXIsIHJ0ZV9iZTMyX3Qgc3JjX2lwKTsNCiAgICAgICAgYm9v bCBhZGRfYXJnczsNCiAgICB9DQozLSBJIG5lZWQgdG8gY2hhbmdlIHRoZSBzaWduYXR1cmUgInBh cmFtZXRlcnMiIHRvIGFsbCBvdGhlciB0aGFuIGlwdjQsaXB2NiB0byBoYXZlIGFub3RoZXIgcGFy YW1ldGVyIHRvDQpIYXZlIG1hdGNoZWQgc2luZ3R1cmUuDQo0LSBpbiBub25lLWlwdjQtaXB2NiBp dGVtIEkgbmVlZCB0byBjYWxsIHRoZSBSVEVfU0VUX1VTRUQoc3JjX2lwKTsgDQo1LSBsb29wIG92 ZXIgdGhlIGFycmF5IHRvIGFkZCBpdGVtcw0KDQpJcyB0aGlzIHJpZ2h0Pw0KDQo+DQo+PiArDQo+ PiArCWl0ZW1zW2l0ZW1zX2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxPV19JVEVNX1RZUEVfRU5EOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZA0KPj4gK2ZpbGxfYWN0aW9ucyhzdHJ1Y3QgcnRl X2Zsb3dfYWN0aW9uICphY3Rpb25zLA0KPj4gKwl1aW50MzJfdCBmbG93X2FjdGlvbnMsIHVpbnQz Ml90IGNvdW50ZXIsIHVpbnQxNl90IG5leHRfdGFibGUsDQo+PiArCXVpbnQxNl90IGhhaXJwaW5x KQ0KPg0KPg0KPkl0IGxvb2tzIGxpa2UgaXQgaXMgYmV0dGVyIHRvIGhhdmUgdGhlIGZ1bmN0aW9u IGluc2lkZQ0KPmFjdGlvbnNfZ2VuLmMuIEl0IHdvdWxkIGFsbG93IHRvIG1ha2UgYWxsIGFkZF88 YWN0aW9uPg0KPmZ1bmN0aW9ucyBsb2NhbCB0byBhY3Rpb25zX2dlbi5jLg0KDQpTdXJlLCBidXQg IHRoaXMgb25lIHdpbGwgcmVtYWluIGFzIGlzLCBzaW5jZSB0aGUgYWN0aW9ucyBoYXZlIGRpZmZl cmVudCBzaWduYXR1cmUgYW5kIG90aGVyIGFjdGlvbnMgd2hlbiBiZSBhZGRlZA0KV2lsbCBoYXZl IG1vcmUgZGlmZmVyZW50IHBhcmFtZXRlcnMuDQoNCj4NCj4+ICt7DQo+PiArCXVpbnQ4X3QgYWN0 aW9uc19jb3VudGVyID0gMDsNCj4+ICsJdWludDE2X3QgaGFpcnBpbl9xdWV1ZXNbaGFpcnBpbnFd Ow0KPj4gKwl1aW50MTZfdCBxdWV1ZXNbUlhRX05VTV07DQo+PiArCXVpbnQxNl90IGk7DQo+PiAr DQo+PiArCS8qIE5vbmUtZmF0ZSBhY3Rpb25zICovDQo+PiArCWlmIChmbG93X2FjdGlvbnMgJg0K PkZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0FDVElPTl9UWVBFX01BUkspKQ0KPj4gKwkJYWRkX21h cmsoYWN0aW9ucywgYWN0aW9uc19jb3VudGVyKyspOw0KPj4gKwlpZiAoZmxvd19hY3Rpb25zICYN Cj5GTE9XX0lURU1fTUFTSyhSVEVfRkxPV19BQ1RJT05fVFlQRV9DT1VOVCkpDQo+PiArCQlhZGRf Y291bnQoYWN0aW9ucywgYWN0aW9uc19jb3VudGVyKyspOw0KPj4gKwlpZiAoZmxvd19hY3Rpb25z ICYNCj5GTE9XX0lURU1fTUFTSyhSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfTUVUQSkpDQo+PiAr CQlhZGRfc2V0X21ldGEoYWN0aW9ucywgYWN0aW9uc19jb3VudGVyKyspOw0KPj4gKwlpZiAoZmxv d19hY3Rpb25zICYNCj5GTE9XX0lURU1fTUFTSyhSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfVEFH KSkNCj4+ICsJCWFkZF9zZXRfdGFnKGFjdGlvbnMsIGFjdGlvbnNfY291bnRlcisrKTsNCj4+ICsN Cj4+ICsJLyogRmF0ZSBhY3Rpb25zICovDQo+PiArCWlmIChmbG93X2FjdGlvbnMgJg0KPkZMT1df SVRFTV9NQVNLKFJURV9GTE9XX0FDVElPTl9UWVBFX1FVRVVFKSkNCj4+ICsJCWFkZF9xdWV1ZShh Y3Rpb25zLCBhY3Rpb25zX2NvdW50ZXIrKywgY291bnRlciAlDQo+UlhRX05VTSk7DQo+PiArCWlm IChmbG93X2FjdGlvbnMgJg0KPkZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0FDVElPTl9UWVBFX1JT UykpIHsNCj4+ICsJCWZvciAoaSA9IDA7IGkgPCBSWFFfTlVNOyBpKyspDQo+PiArCQkJcXVldWVz W2ldID0gaTsNCj4+ICsJCWFkZF9yc3MoYWN0aW9ucywgYWN0aW9uc19jb3VudGVyKyssIHF1ZXVl cywgUlhRX05VTSk7DQo+PiArCX0NCj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmDQo+RkxPV19JVEVN X01BU0soUlRFX0ZMT1dfQUNUSU9OX1RZUEVfSlVNUCkpDQo+PiArCQlhZGRfanVtcChhY3Rpb25z LCBhY3Rpb25zX2NvdW50ZXIrKywgbmV4dF90YWJsZSk7DQo+PiArCWlmIChmbG93X2FjdGlvbnMg Jg0KPkZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0FDVElPTl9UWVBFX1BPUlRfSUQpKQ0KPj4gKwkJ YWRkX3BvcnRfaWQoYWN0aW9ucywgYWN0aW9uc19jb3VudGVyKyspOw0KPj4gKwlpZiAoZmxvd19h Y3Rpb25zICYNCj5GTE9XX0lURU1fTUFTSyhSVEVfRkxPV19BQ1RJT05fVFlQRV9EUk9QKSkNCj4+ ICsJCWFkZF9kcm9wKGFjdGlvbnMsIGFjdGlvbnNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZsb3df YWN0aW9ucyAmIEhBSVJQSU5fUVVFVUVfQUNUSU9OKQ0KPj4gKwkJYWRkX3F1ZXVlKGFjdGlvbnMs IGFjdGlvbnNfY291bnRlcisrLA0KPj4gKwkJCShjb3VudGVyICUgaGFpcnBpbnEpICsgUlhRX05V TSk7DQo+PiArCWlmIChmbG93X2FjdGlvbnMgJiBIQUlSUElOX1JTU19BQ1RJT04pIHsNCj4+ICsJ CWZvciAoaSA9IDA7IGkgPCBoYWlycGlucTsgaSsrKQ0KPj4gKwkJCWhhaXJwaW5fcXVldWVzW2ld ID0gaSArIFJYUV9OVU07DQo+PiArCQlhZGRfcnNzKGFjdGlvbnMsIGFjdGlvbnNfY291bnRlcisr LCBoYWlycGluX3F1ZXVlcywNCj5oYWlycGlucSk7DQo+PiArCX0NCj4+ICsNCj4+ICsJYWN0aW9u c1thY3Rpb25zX2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxPV19BQ1RJT05fVFlQRV9FTkQ7DQo+PiAr fQ0KPj4gKw0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthZGRfZXRoZXIoc3RydWN0IHJ0ZV9mbG93X2l0 ZW0gKml0ZW1zLCB1aW50OF90IGl0ZW1zX2NvdW50ZXIpDQo+PiArew0KPj4gKwlzdGF0aWMgc3Ry dWN0IHJ0ZV9mbG93X2l0ZW1fZXRoIGV0aF9zcGVjOw0KPj4gKwlzdGF0aWMgc3RydWN0IHJ0ZV9m bG93X2l0ZW1fZXRoIGV0aF9tYXNrOw0KPg0KPlNhbWUgYXMgYWN0aW9ucywgaXQgZG9lcyBub3Qg YWxsb3cgdG8gaGF2ZSB0d28gRXRoIGl0ZW1zDQo+aW4gb25lIHJ1bGUuIEhvd2V2ZXIsIGl0IGxv b2tzIGxpa2UgY3VycmVudCBkZXNpZ24gZG9lcyBub3QNCj5jb3ZlciBpdCBhbHJlYWR5IG9uIG1h c2sgbGV2ZWwuDQoNClllcywgaW5kZWVkLg0KQWxyZWFkeSBhZGQgdGhpcyBpbiBmbG93X3BlcmYu cnN0IGFzIGtub3duIGxpbWl0YXRpb24uDQoNCj4NCj4+ICAJCS8qIENvbnRyb2wgKi8NCj4+ICAJ CXsgImhlbHAiLCAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAiZmxv d3MtY291bnQiLCAgICAgICAgICAgICAgICAxLCAwLCAwIH0sDQo+PiArCQl7ICJkdW1wLWl0ZXJh dGlvbnMiLCAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4NCj5JdCBsb29rcyBsaWtlIGFib3ZlIGl0 IHRoZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBkZWZpbmVkDQo+aGVyZS4NCg0KSSdtIG5vdCBmb2xs b3dpbmcsIHdoYXQgZG8geW91IG1lYW4/DQoNCj4NCj4+ICsJCS8qIEF0dHJpYnV0ZXMgKi8NCj4+ ICsJCXsgImluZ3Jlc3MiLCAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAi ZWdyZXNzIiwgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJ0cmFuc2Zl ciIsICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImdyb3VwIiwgICAgICAg ICAgICAgICAgICAgICAgMSwgMCwgMCB9LA0KPj4gKwkJLyogSXRlbXMgKi8NCj4+ICsJCXsgImV0 aGVyIiwgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAidmxhbiIsICAg ICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJpcHY0IiwgICAgICAgICAg ICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImlwdjYiLCAgICAgICAgICAgICAgICAg ICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAidGNwIiwgICAgICAgICAgICAgICAgICAgICAgICAw LCAwLCAwIH0sDQo+PiArCQl7ICJ1ZHAiLCAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAg fSwNCj4+ICsJCXsgInZ4bGFuIiwgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4g KwkJeyAidnhsYW4tZ3BlIiwgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJn cmUiLCAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImdlbmV2ZSIs ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAiZ3RwIiwgICAgICAgICAg ICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJtZXRhIiwgICAgICAgICAgICAgICAg ICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgInRhZyIsICAgICAgICAgICAgICAgICAgICAgICAg MCwgMCwgMCB9LA0KPj4gKwkJLyogQWN0aW9ucyAqLw0KPj4gKwkJeyAicG9ydC1pZCIsICAgICAg ICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJyc3MiLCAgICAgICAgICAgICAgICAg ICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgInF1ZXVlIiwgICAgICAgICAgICAgICAgICAgICAg MCwgMCwgMCB9LA0KPj4gKwkJeyAianVtcCIsICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAw IH0sDQo+PiArCQl7ICJtYXJrIiwgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ ICsJCXsgImNvdW50IiwgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAi c2V0LW1ldGEiLCAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJzZXQtdGFn IiwgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImRyb3AiLCAgICAgICAg ICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAiaGFpcnBpbi1xdWV1ZSIsICAgICAg ICAgICAgICAxLCAwLCAwIH0sDQo+PiArCQl7ICJoYWlycGluLXJzcyIsICAgICAgICAgICAgICAg IDEsIDAsIDAgfSwNCj4NCj5UaGlzIHBhcnQgc2hvdWxkIGJlIGFkZGVkIGJ5IGNvZGUgd2hpY2gg aXRlcmF0ZXMgYnkNCj5mbG93X29wdGlvbnMuIEkuZS4gYWxsb2NhdGUgbGdvcHRzIGR5bmFtaWNh bGx5LCBjb3B5DQo+c3RhdGljIG9wdGlvbnMgdGhlcmUgYnkgbWVtY3B5KCkgYW5kIGFkZCBkeW5h bWljIGFzDQo+ZGVzY3JpYmVkIGFib3ZlLiBNYXkgYmUgZmxvd19vcHRpb25zIHJlcXVpcmUgZXh0 cmENCj5maWVsZCAgJ2hhc19hcmcnLg0KDQpSZWdhcmQgdGhpcyBvbmUsDQpTb21lIG9wdGlvbiBo YXZlIHNwZWNpYWwgY29kZSwgbGlrZSBoYWlycGluLCBncm91cCBhbmQgY29udHJvbCwgc28gZXZl biB3aXRoIGhhc19hcmcNCkl0IGNhbm5vdCBiZSBsb29wZWQgaW4gcHJldHR5IHdheSwgSSB0cmll ZCBpdCBhbmQgaXQgYmVjYW1lIHVnbHksIEkgcHJlZmVyIHRvIGxlYXZlIHRoaXMgYXMgaXQuDQpJ IGRvbid0IHRoaW5rIGl0J3MgY3JpdGljYWwgdG8gZ2V0IHJpZCBvZiBpdD8gV2hhdCBkbyB5b3Ug dGhpbms/DQoNCg==