Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp500142ybg; Sun, 26 Jul 2020 11:16:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwXq6OMXVxEyP/76w1miirtX4THUbZfAccpjHrq7u1PpOsYgFTv+BgCPWJLYWvcFFyrImSN X-Received: by 2002:a17:907:42a0:: with SMTP id ny24mr11007007ejb.328.1595787363691; Sun, 26 Jul 2020 11:16:03 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1595787363; cv=pass; d=google.com; s=arc-20160816; b=Zvr8DxzxyqOu9DYYAjcw2bA3aKRPp4PJU2Z4wckyNQ7tVKBUQL51QZGpJgMqKUxonU 2n1TE8Z4kXHDUvz7Mjzk18Wo1xYkN5m5dUQ09HPKVNZbJgjQeQK97qeqOq/feZziAtoG 3qT8oJ66hPX6wUiIxn9a34S3eiWyC1abBexHIpX1ujWFKpKOlPqDsZrbjdCUBqeVm9B6 jpqzIFtHaAlngj65cX9cfoacTFJ5PVqX3qXxiQGqtlK2MSnARBTJl+EEjOcZwAcHnUd3 KlUFYi4wmEA1e4Cno6hGhoqvRGKWHvJzoU5gZ/c85xASCapXA1YMT8326jJxEGdccoj3 eF2Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:to :from:dkim-signature:ironport-sdr:ironport-sdr; bh=3a555j+BAAYOhpek7/DFe2JPJu3qdoB9Kmq/LKTgqxs=; b=fx8YN9c+XB5rXdk+zDCMC7IbR/5uFOjqKRa+oTsqKNtU38baAmhoCgsJVvTRGqK7Wz VOOGndZdrOrCqPK90H9wNguTyFkYyi+etOiKJulqAQ3ItifR8DhzmD1SiaPuAT2IBa1o r5cORAMaE10zy7BRjYoGpK0C8lmoveNhJYFAhPRVc/N7syalz+p4dd04G3+BABPBa0e3 rJg2sF9QYSKfolnQs6wiVsJTMS0VOCuxZaRnpAH1PPm82BV3cZHSVWq8e9yVU4bKTNL3 SN+cgE5URRLL+HOrYoDcETQbn+jj1eVIppg9i88K2JhsRuNYjW8+o94j+VfHsOZVzvRq 5D+g== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=t4dCZ1QM; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g7si4073128edj.525.2020.07.26.11.15.21; Sun, 26 Jul 2020 11:16:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=t4dCZ1QM; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725972AbgGZSPM (ORCPT + 99 others); Sun, 26 Jul 2020 14:15:12 -0400 Received: from mga11.intel.com ([192.55.52.93]:1932 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726427AbgGZSPL (ORCPT ); Sun, 26 Jul 2020 14:15:11 -0400 IronPort-SDR: akxNx2+wLokEIUvcLuZMO0ZFUJYCNwcUYn4kPBdRNgmES+fnrHZxmnAjdmmMmx1TMpWTIAkJZY QfKILSp67jzQ== X-IronPort-AV: E=McAfee;i="6000,8403,9694"; a="148802152" X-IronPort-AV: E=Sophos;i="5.75,399,1589266800"; d="scan'208";a="148802152" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jul 2020 10:31:29 -0700 IronPort-SDR: 6rBbUXjeDjYaR/fcnj9Sdag5lXyo3vfEYmKkJcO3at+1ccWkkv9hz9GRFvD2E8Anc21LnEuXju vC7YAo/vSnlg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,399,1589266800"; d="scan'208";a="319811647" Received: from orsmsx103.amr.corp.intel.com ([10.22.225.130]) by orsmga008.jf.intel.com with ESMTP; 26 Jul 2020 10:31:28 -0700 Received: from orsmsx158.amr.corp.intel.com (10.22.240.20) by ORSMSX103.amr.corp.intel.com (10.22.225.130) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 26 Jul 2020 10:31:28 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX158.amr.corp.intel.com (10.22.240.20) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 26 Jul 2020 10:31:28 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.172) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 26 Jul 2020 10:31:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hPd0DPDVAYDZaRoxZZsef9437uObrCP16bGWwW5uE9/kuQdm11yDlDa8t2Q7D7HwKlz7RAuz5g/jiDaExYx5CU5VbyEh1ECTLj1ySayPEZ+D6KJrn9WaHCGzFnl4WulpCB36ObP9ROHia0KmhB2uYCTeRZtVi3Bcc4l/MQTQyCDaIP03sA5Ap7jXE+BJKuRxiXsS7ubSYwlJ3DYFHXyHxelTxOrcgAjpDVSR69siU8B+dWMBqytn4w5uuzSkiP4sYHm7FbO9ZIkwMNnjIik/OQetHWPaxzQ8ppKVZYiO3v637k4OeWPxxoMMl2TMqkin4ibqfKf/69LRojFN59lXtg== 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=3a555j+BAAYOhpek7/DFe2JPJu3qdoB9Kmq/LKTgqxs=; b=C0xHMiCfyfqVy7i5tS9EaXpZoIEgxf40BbQG0iHqFQj6Bbp41Lq5lWciVttiVQz/5oBPhfcg/rVuCaCc3AqhT+1DfFKNHjxpHFpe2cwDgInE00Y5HUzCTWl/oxib6wkrFocxIaMhauAAs7hGDGKw8fCWPUb6Kr+GUZOw17oa/GGleDaE/iZjiN7aDYt+micppMA687sdNuLB6BvBCHmAxv/FhKSyYLjh49cJ33ayl5XHTWFfuMhaWcugFqkThtKkN77qn45CPfOA11HWiBqMPUIY523pd9+aWdDnb+MJuIt3HcXxpNqbEn9yVimd1/lGg1US7j6helgJsDT58WkbZQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3a555j+BAAYOhpek7/DFe2JPJu3qdoB9Kmq/LKTgqxs=; b=t4dCZ1QMdIw8K4xtml+BAusSKJQZwhRA2tjtbBCYL/bY9kZWYXSKwyHsD9uOWfFXygwh8+goq5pr2B/RF7tvoJxqBA0IKO3saKEQI/BbruuWzAIewbX6FusyP3rPjJXxNNBiEJv5nEgZ4YUN95gywiwJ0oBLsJ3W0wVQcL6mILg= Received: from MW3PR11MB4539.namprd11.prod.outlook.com (2603:10b6:303:2f::13) by MW3PR11MB4540.namprd11.prod.outlook.com (2603:10b6:303:56::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.20; Sun, 26 Jul 2020 17:31:26 +0000 Received: from MW3PR11MB4539.namprd11.prod.outlook.com ([fe80::6832:48b9:8cd2:7225]) by MW3PR11MB4539.namprd11.prod.outlook.com ([fe80::6832:48b9:8cd2:7225%6]) with mapi id 15.20.3216.031; Sun, 26 Jul 2020 17:31:26 +0000 From: "Gix, Brian" To: "linux-bluetooth@vger.kernel.org" , "Stotland, Inga" Subject: Re: [PATCH BlueZ v4] mesh: Move model functionality out of node.c to model.c Thread-Topic: [PATCH BlueZ v4] mesh: Move model functionality out of node.c to model.c Thread-Index: AQHWYTzEIRlpY0mKG0i8Xx4mNVDAnqkaIrKA Date: Sun, 26 Jul 2020 17:31:25 +0000 Message-ID: <25fe2ef248b9f458dde1c5c4645ce1d2a1b97731.camel@intel.com> References: <20200723220021.370600-1-inga.stotland@intel.com> In-Reply-To: <20200723220021.370600-1-inga.stotland@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.34.4 (3.34.4-1.fc31) authentication-results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.55.55.39] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2d6d28c8-e475-433a-a3be-08d83189b94a x-ms-traffictypediagnostic: MW3PR11MB4540: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mfBTFRLK3vR9W7QdcrY2oNXBwRMU7vmL0Xbif1B0tIJUWpPMKhX5RZD8Sxrkj2iQeV9dTcHyaIUhO0mW4V7PVd4Q6IPRQ7c9lOIYRVaCBjkVj2O45ekSKW/lCOxgJEgHlEFSq2KS77cKwd0sBdcwFfigW2zPNnrHLRbtbp3QivhL7Ix64M4VcwfSO0UjrHSm76eq6MS72WtHX9PIChswwumms0hyrSqYUiqghhPfLGHdjkaDhZTgm2g8txsmUE7dx2bnQnecb+KLnK0XoPeStnyQBlV1RJhgcOK+EeNZ9FrtniLolGcsMWseI9uZRRrvlKf3MjPQTYkADvS2GQjkKQr38UVwQjCqqCHEaaTPTXE2VmFjJslzws3Z7jyc70FX x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR11MB4539.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(376002)(39860400002)(366004)(136003)(346002)(396003)(64756008)(86362001)(71200400001)(36756003)(76116006)(2616005)(66476007)(66556008)(66446008)(478600001)(91956017)(5660300002)(8936002)(6486002)(30864003)(66946007)(8676002)(2906002)(316002)(83380400001)(6636002)(6506007)(6512007)(26005)(186003)(110136005)(2004002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: Gp6ysl8RgFO5hwaLsadcuK5HTlbET42DTjcvlZDwpsJrimn4k5gX5+CWkO+ZZW78mlj4LE60GwOYbb5CFGM/OCTYoH4+154fUgcacYm/Sh1mVsvRca0dgnee0RtWD85xHqU5FcyMcNaIXmO7d5dReEnSrFcI07LWkGGri+gzq+5QpAo5A3xH0G14HaPANaprbmkFuXady+d8Jg9DOsdOvu7dcshOwMT6JyGAFGZdNx6FTn6swI+Dn3SqzLdMzWxXYuNs2IYq8+U3hLm4VRamqkfgxgmHYdmms44IjIEDnPwZIdU56TUwUEtAcNDLmbxBSd0XyyH4VK2FzPwqgtkd3/+mUpMfvB2QZnABrFZ28Fnsu7F4ONtWEsiEap8I7PRUSN2PoA9UyzHBFLhdTBLEnBpxqkxIN49Zk9Rybaa2WdJbNjj9yp99Cd5CzsN9GWHht7pb70boS1wl4RP+OFSckb2RG215ziVpfuQnYm0GD5o= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW3PR11MB4539.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d6d28c8-e475-433a-a3be-08d83189b94a X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jul 2020 17:31:25.9841 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xicDlFvMOFe6W9eKUzxc7aaKZzKSbD/7lH1nK8VLPRDvcLsJdkH+hG9zKKpnb75YLzV6uxmXqOaWf58UJWS7MQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4540 X-OriginatorOrg: intel.com Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org QXBwbGllZA0KT24gVGh1LCAyMDIwLTA3LTIzIGF0IDE1OjAwIC0wNzAwLCBJbmdhIFN0b3RsYW5k IHdyb3RlOg0KPiBUaGlzIG1vdmVzIHRoZSBtb2RlbCByZWxhdGVkIGNvZGUgb3V0IG9mIG5vZGUu YyB0byBtb2RlbC5jIHByb3ZpZGluZw0KPiBmb3IgYmV0dGVyIGZ1bmN0aW9uYWwgc2VwYXJhdGlv biBvZiBtb2R1bGVzLg0KPiANCj4gQWxzbywgdXNlIHRoZSB2YWx1ZSBvZiAweEZGRkYgZm9yIGlu dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHZlbmRvciBJRA0KPiBmb3IgQlQgU0lHIGRlZmluZWQg bW9kZWxzLiBUaGlzIGFsbG93cyB0byBtYWludGFpbiBhIHNpbmdsZSBpbnRlcm5hbA0KPiB2ZW5k b3IgSUQgLyBtb2RlbCBJRCBzcGFjZS4NCj4gLS0tDQo+ICBtZXNoL2NmZ21vZC1zZXJ2ZXIuYyAg ICB8IDE3MiArKysrKystLS0tLS0tDQo+ICBtZXNoL2NmZ21vZC5oICAgICAgICAgICB8ICAgNCAr LQ0KPiAgbWVzaC9tZXNoLWNvbmZpZy1qc29uLmMgfCAgIDUgKy0NCj4gIG1lc2gvbW9kZWwuYyAg ICAgICAgICAgIHwgNTQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0N Cj4gIG1lc2gvbW9kZWwuaCAgICAgICAgICAgIHwgIDc0ICsrKy0tLQ0KPiAgbWVzaC9ub2RlLmMg ICAgICAgICAgICAgfCAzMTkgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gIG1lc2gvbm9kZS5o ICAgICAgICAgICAgIHwgICA0ICstDQo+ICA3IGZpbGVzIGNoYW5nZWQsIDU0NCBpbnNlcnRpb25z KCspLCA1NzggZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbWVzaC9jZmdtb2Qtc2Vy dmVyLmMgYi9tZXNoL2NmZ21vZC1zZXJ2ZXIuYw0KPiBpbmRleCA5MDQ2YTFhZDkuLjc2NzJhZDNi NiAxMDA2NDQNCj4gLS0tIGEvbWVzaC9jZmdtb2Qtc2VydmVyLmMNCj4gKysrIGIvbWVzaC9jZmdt b2Qtc2VydmVyLmMNCj4gQEAgLTIsNyArMiw3IEBADQo+ICAgKg0KPiAgICogIEJsdWVaIC0gQmx1 ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eA0KPiAgICoNCj4gLSAqICBDb3B5cmlnaHQg KEMpIDIwMTgtMjAxOSAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLg0KPiAgICoNCj4gICAqDQo+ICAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiBAQCAtNDIsNyArNDIs NyBAQCBzdGF0aWMgdWludDhfdCBtc2dbTUFYX01TR19MRU5dOw0KPiAgDQo+ICBzdGF0aWMgdm9p ZCBzZW5kX3B1Yl9zdGF0dXMoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgbmV0X2lk eCwNCj4gIAkJCXVpbnQxNl90IHNyYywgdWludDE2X3QgZHN0LA0KPiAtCQkJdWludDhfdCBzdGF0 dXMsIHVpbnQxNl90IGVsZV9hZGRyLCB1aW50MzJfdCBtb2RfaWQsDQo+ICsJCQl1aW50OF90IHN0 YXR1cywgdWludDE2X3QgZWxlX2FkZHIsIHVpbnQzMl90IGlkLA0KPiAgCQkJdWludDE2X3QgcHVi X2FkZHIsIHVpbnQxNl90IGlkeCwgYm9vbCBjcmVkX2ZsYWcsDQo+ICAJCQl1aW50OF90IHR0bCwg dWludDhfdCBwZXJpb2QsIHVpbnQ4X3QgcmV0cmFuc21pdCkNCj4gIHsNCj4gQEAgLTU5LDEyICs1 OSwxMiBAQCBzdGF0aWMgdm9pZCBzZW5kX3B1Yl9zdGF0dXMoc3RydWN0IG1lc2hfbm9kZSAqbm9k ZSwgdWludDE2X3QgbmV0X2lkeCwNCj4gIAltc2dbbisrXSA9IHBlcmlvZDsNCj4gIAltc2dbbisr XSA9IHJldHJhbnNtaXQ7DQo+ICANCj4gLQlpZiAobW9kX2lkID49IFZFTkRPUl9JRF9NQVNLKSB7 DQo+IC0JCWxfcHV0X2xlMTYobW9kX2lkLCBtc2cgKyBuKTsNCj4gKwlpZiAoIUlTX1ZFTkRPUihp ZCkpIHsNCj4gKwkJbF9wdXRfbGUxNihNT0RFTF9JRChpZCksIG1zZyArIG4pOw0KPiAgCQluICs9 IDI7DQo+ICAJfSBlbHNlIHsNCj4gLQkJbF9wdXRfbGUxNihtb2RfaWQgPj4gMTYsIG1zZyArIG4p Ow0KPiAtCQlsX3B1dF9sZTE2KG1vZF9pZCwgbXNnICsgbiArIDIpOw0KPiArCQlsX3B1dF9sZTE2 KFZFTkRPUl9JRChpZCksIG1zZyArIG4pOw0KPiArCQlsX3B1dF9sZTE2KE1PREVMX0lEKGlkKSwg bXNnICsgbiArIDIpOw0KPiAgCQluICs9IDQ7DQo+ICAJfQ0KPiAgDQo+IEBAIC03NiwzNyArNzYs MzUgQEAgc3RhdGljIHZvaWQgY29uZmlnX3B1Yl9nZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwg dWludDE2X3QgbmV0X2lkeCwNCj4gIAkJCQkJdWludDE2X3Qgc3JjLCB1aW50MTZfdCBkc3QsDQo+ ICAJCQkJCWNvbnN0IHVpbnQ4X3QgKnBrdCwgdWludDE2X3Qgc2l6ZSkNCj4gIHsNCj4gLQl1aW50 MzJfdCBtb2RfaWQ7DQo+ICsJdWludDMyX3QgaWQ7DQo+ICAJdWludDE2X3QgZWxlX2FkZHI7DQo+ ICAJc3RydWN0IG1lc2hfbW9kZWxfcHViICpwdWI7DQo+ICAJaW50IHN0YXR1czsNCj4gIA0KPiAg CWlmIChzaXplID09IDQpIHsNCj4gLQkJbW9kX2lkID0gbF9nZXRfbGUxNihwa3QgKyAyKTsNCj4g LQkJbW9kX2lkIHw9IFZFTkRPUl9JRF9NQVNLOw0KPiArCQlpZCA9IFNFVF9JRChTSUdfVkVORE9S LCBsX2dldF9sZTE2KHBrdCArIDIpKTsNCj4gIAl9IGVsc2UgaWYgKHNpemUgPT0gNikgew0KPiAt CQltb2RfaWQgPSBsX2dldF9sZTE2KHBrdCArIDIpIDw8IDE2Ow0KPiAtCQltb2RfaWQgfD0gbF9n ZXRfbGUxNihwa3QgKyA0KTsNCj4gKwkJaWQgPSBTRVRfSUQobF9nZXRfbGUxNihwa3QgKyAyKSwg bF9nZXRfbGUxNihwa3QgKyA0KSk7DQo+ICAJfSBlbHNlDQo+ICAJCXJldHVybjsNCj4gIA0KPiAg CWVsZV9hZGRyID0gbF9nZXRfbGUxNihwa3QpOw0KPiAtCXB1YiA9IG1lc2hfbW9kZWxfcHViX2dl dChub2RlLCBlbGVfYWRkciwgbW9kX2lkLCAmc3RhdHVzKTsNCj4gKwlwdWIgPSBtZXNoX21vZGVs X3B1Yl9nZXQobm9kZSwgZWxlX2FkZHIsIGlkLCAmc3RhdHVzKTsNCj4gIA0KPiAgCWlmIChwdWIg JiYgc3RhdHVzID09IE1FU0hfU1RBVFVTX1NVQ0NFU1MpDQo+ICAJCXNlbmRfcHViX3N0YXR1cyhu b2RlLCBuZXRfaWR4LCBzcmMsIGRzdCwgc3RhdHVzLCBlbGVfYWRkciwNCj4gLQkJCQltb2RfaWQs IHB1Yi0+YWRkciwgcHViLT5pZHgsIHB1Yi0+Y3JlZGVudGlhbCwNCj4gKwkJCQlpZCwgcHViLT5h ZGRyLCBwdWItPmlkeCwgcHViLT5jcmVkZW50aWFsLA0KPiAgCQkJCXB1Yi0+dHRsLCBwdWItPnBl cmlvZCwgcHViLT5yZXRyYW5zbWl0KTsNCj4gIAllbHNlDQo+ICAJCXNlbmRfcHViX3N0YXR1cyhu b2RlLCBuZXRfaWR4LCBzcmMsIGRzdCwgc3RhdHVzLCBlbGVfYWRkciwNCj4gLQkJCQltb2RfaWQs IDAsIDAsIDAsIDAsIDAsIDApOw0KPiArCQkJCWlkLCAwLCAwLCAwLCAwLCAwLCAwKTsNCj4gIH0N Cj4gIA0KPiAgc3RhdGljIHZvaWQgY29uZmlnX3B1Yl9zZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9k ZSwgdWludDE2X3QgbmV0X2lkeCwNCj4gIAkJCQl1aW50MTZfdCBzcmMsIHVpbnQxNl90IGRzdCwN Cj4gIAkJCQljb25zdCB1aW50OF90ICpwa3QsIGJvb2wgdmlydCwgYm9vbCB2ZW5kb3IpDQo+ICB7 DQo+IC0JdWludDMyX3QgbW9kX2lkOw0KPiArCXVpbnQzMl90IGlkOw0KPiAgCXVpbnQxNl90IGVs ZV9hZGRyLCBpZHgsIG90YSA9IFVOQVNTSUdORURfQUREUkVTUzsNCj4gIAljb25zdCB1aW50OF90 ICpwdWJfYWRkcjsNCj4gIAl1aW50MTZfdCB0ZXN0X2FkZHI7DQo+IEBAIC0xMjQsMTIgKzEyMiwx MiBAQCBzdGF0aWMgdm9pZCBjb25maWdfcHViX3NldChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1 aW50MTZfdCBuZXRfaWR4LA0KPiAgCXR0bCA9IHBrdFs2XTsNCj4gIAlwZXJpb2QgPSBwa3RbN107 DQo+ICAJcmV0cmFuc21pdCA9IHBrdFs4XTsNCj4gLQltb2RfaWQgPSBsX2dldF9sZTE2KHBrdCAr IDkpOw0KPiArCWlkID0gbF9nZXRfbGUxNihwa3QgKyA5KTsNCj4gIA0KPiAgCWlmICghdmVuZG9y KQ0KPiAtCQltb2RfaWQgfD0gVkVORE9SX0lEX01BU0s7DQo+ICsJCWlkID0gU0VUX0lEKFNJR19W RU5ET1IsIGlkKTsNCj4gIAllbHNlDQo+IC0JCW1vZF9pZCA9IChtb2RfaWQgPDwgMTYpIHwgbF9n ZXRfbGUxNihwa3QgKyAxMSk7DQo+ICsJCWlkID0gU0VUX0lEKGlkLCBsX2dldF9sZTE2KHBrdCAr IDExKSk7DQo+ICANCj4gIAkvKiBEb24ndCBhY2NlcHQgdmlydHVhbCBzZWVtaW5nIGFkZHJlc3Nl cyAqLw0KPiAgCXRlc3RfYWRkciA9IGxfZ2V0X2xlMTYocHViX2FkZHIpOw0KPiBAQCAtMTM5LDE2 ICsxMzcsMTYgQEAgc3RhdGljIHZvaWQgY29uZmlnX3B1Yl9zZXQoc3RydWN0IG1lc2hfbm9kZSAq bm9kZSwgdWludDE2X3QgbmV0X2lkeCwNCj4gIAljcmVkX2ZsYWcgPSAhIShDUkVERkxBR19NQVNL ICYgaWR4KTsNCj4gIAlpZHggJj0gQVBQX0lEWF9NQVNLOw0KPiAgDQo+IC0Jc3RhdHVzID0gbWVz aF9tb2RlbF9wdWJfc2V0KG5vZGUsIGVsZV9hZGRyLCBtb2RfaWQsIHB1Yl9hZGRyLCBpZHgsDQo+ ICsJc3RhdHVzID0gbWVzaF9tb2RlbF9wdWJfc2V0KG5vZGUsIGVsZV9hZGRyLCBpZCwgcHViX2Fk ZHIsIGlkeCwNCj4gIAkJCQkJY3JlZF9mbGFnLCB0dGwsIHBlcmlvZCwgcmV0cmFuc21pdCwNCj4g IAkJCQkJdmlydCwgJm90YSk7DQo+ICANCj4gIAlsX2RlYnVnKCJwdWJfc2V0OiBzdGF0dXMgJWQs IGVhICU0LjR4LCBvdGE6ICU0LjR4LCBtb2Q6ICV4LCBpZHg6ICUzLjN4IiwNCj4gLQkJCQkJc3Rh dHVzLCBlbGVfYWRkciwgb3RhLCBtb2RfaWQsIGlkeCk7DQo+ICsJCQkJCXN0YXR1cywgZWxlX2Fk ZHIsIG90YSwgaWQsIGlkeCk7DQo+ICANCj4gIAlpZiAoc3RhdHVzICE9IE1FU0hfU1RBVFVTX1NV Q0NFU1MpIHsNCj4gIAkJc2VuZF9wdWJfc3RhdHVzKG5vZGUsIG5ldF9pZHgsIHNyYywgZHN0LCBz dGF0dXMsIGVsZV9hZGRyLA0KPiAtCQkJCQkJbW9kX2lkLCAwLCAwLCAwLCAwLCAwLCAwKTsNCj4g KwkJCQkJCWlkLCAwLCAwLCAwLCAwLCAwLCAwKTsNCj4gIA0KPiAgCQlyZXR1cm47DQo+ICAJfQ0K PiBAQCAtMTU4LDcgKzE1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbmZpZ19wdWJfc2V0KHN0cnVjdCBt ZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IG5ldF9pZHgsDQo+ICANCj4gIAkJLyogUmVtb3ZlIG1v ZGVsIHB1YmxpY2F0aW9uIGZyb20gY29uZmlnIGZpbGUgKi8NCj4gIAkJaWYgKCFtZXNoX2NvbmZp Z19tb2RlbF9wdWJfZGVsKG5vZGVfY29uZmlnX2dldChub2RlKSwgZWxlX2FkZHIsDQo+IC0JCQkJ dmVuZG9yID8gbW9kX2lkIDogbW9kX2lkICYgflZFTkRPUl9JRF9NQVNLLA0KPiArCQkJCQkJdmVu ZG9yID8gaWQgOiBNT0RFTF9JRChpZCksDQo+ICAJCQkJCQkJCQl2ZW5kb3IpKQ0KPiAgCQkJc3Rh dHVzID0gTUVTSF9TVEFUVVNfU1RPUkFHRV9GQUlMOw0KPiAgCX0gZWxzZSB7DQo+IEBAIC0xNzgs MTkgKzE3NiwxOSBAQCBzdGF0aWMgdm9pZCBjb25maWdfcHViX3NldChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCB1aW50MTZfdCBuZXRfaWR4LA0KPiAgDQo+ICAJCS8qIFNhdmUgbW9kZWwgcHVibGlj YXRpb24gdG8gY29uZmlnIGZpbGUgKi8NCj4gIAkJaWYgKCFtZXNoX2NvbmZpZ19tb2RlbF9wdWJf YWRkKG5vZGVfY29uZmlnX2dldChub2RlKSwgZWxlX2FkZHIsDQo+IC0JCQkJdmVuZG9yID8gbW9k X2lkIDogbW9kX2lkICYgflZFTkRPUl9JRF9NQVNLLA0KPiAtCQkJCQl2ZW5kb3IsICZkYl9wdWIp KQ0KPiArCQkJCQkJdmVuZG9yID8gaWQgOiBNT0RFTF9JRChpZCksDQo+ICsJCQkJCQkJdmVuZG9y LCAmZGJfcHViKSkNCj4gIAkJCXN0YXR1cyA9IE1FU0hfU1RBVFVTX1NUT1JBR0VfRkFJTDsNCj4g IAl9DQo+ICANCj4gLQlzZW5kX3B1Yl9zdGF0dXMobm9kZSwgbmV0X2lkeCwgc3JjLCBkc3QsIHN0 YXR1cywgZWxlX2FkZHIsIG1vZF9pZCwgb3RhLA0KPiArCXNlbmRfcHViX3N0YXR1cyhub2RlLCBu ZXRfaWR4LCBzcmMsIGRzdCwgc3RhdHVzLCBlbGVfYWRkciwgaWQsIG90YSwNCj4gIAkJCQlpZHgs IGNyZWRfZmxhZywgdHRsLCBwZXJpb2QsIHJldHJhbnNtaXQpOw0KPiAgfQ0KPiAgDQo+ICBzdGF0 aWMgdm9pZCBzZW5kX3N1Yl9zdGF0dXMoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3Qg bmV0X2lkeCwNCj4gIAkJCQkJdWludDE2X3Qgc3JjLCB1aW50MTZfdCBkc3QsDQo+ICAJCQkJCXVp bnQ4X3Qgc3RhdHVzLCB1aW50MTZfdCBlbGVfYWRkciwNCj4gLQkJCQkJdWludDE2X3QgYWRkciwg dWludDMyX3QgbW9kKQ0KPiArCQkJCQl1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCkNCj4gIHsN Cj4gIAlpbnQgbiA9IG1lc2hfbW9kZWxfb3Bjb2RlX3NldChPUF9DT05GSUdfTU9ERUxfU1VCX1NU QVRVUywgbXNnKTsNCj4gIA0KPiBAQCAtMTk5LDEyICsxOTcsMTMgQEAgc3RhdGljIHZvaWQgc2Vu ZF9zdWJfc3RhdHVzKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IG5ldF9pZHgsDQo+ ICAJbiArPSAyOw0KPiAgCWxfcHV0X2xlMTYoYWRkciwgbXNnICsgbik7DQo+ICAJbiArPSAyOw0K PiAtCWlmIChtb2QgPj0gMHgxMDAwMCAmJiBtb2QgPCBWRU5ET1JfSURfTUFTSykgew0KPiAtCQls X3B1dF9sZTE2KG1vZCA+PiAxNiwgbXNnICsgbik7DQo+IC0JCWxfcHV0X2xlMTYobW9kLCBtc2cg KyBuICsgMik7DQo+ICsNCj4gKwlpZiAoSVNfVkVORE9SKGlkKSkgew0KPiArCQlsX3B1dF9sZTE2 KFZFTkRPUl9JRChpZCksIG1zZyArIG4pOw0KPiArCQlsX3B1dF9sZTE2KE1PREVMX0lEKGlkKSwg bXNnICsgbiArIDIpOw0KPiAgCQluICs9IDQ7DQo+ICAJfSBlbHNlIHsNCj4gLQkJbF9wdXRfbGUx Nihtb2QsIG1zZyArIG4pOw0KPiArCQlsX3B1dF9sZTE2KE1PREVMX0lEKGlkKSwgbXNnICsgbik7 DQo+ICAJCW4gKz0gMjsNCj4gIAl9DQo+ICANCj4gQEAgLTIxNyw3ICsyMTYsNyBAQCBzdGF0aWMg Ym9vbCBjb25maWdfc3ViX2dldChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBuZXRf aWR4LA0KPiAgCQkJCQljb25zdCB1aW50OF90ICpwa3QsIHVpbnQxNl90IHNpemUpDQo+ICB7DQo+ ICAJdWludDE2X3QgZWxlX2FkZHI7DQo+IC0JdWludDMyX3QgbW9kX2lkOw0KPiArCXVpbnQzMl90 IGlkOw0KPiAgCXVpbnQxNl90IG4gPSAwOw0KPiAgCWludCBzdGF0dXM7DQo+ICAJdWludDhfdCAq bXNnX3N0YXR1czsNCj4gQEAgLTIzMiwzNCArMjMxLDMzIEBAIHN0YXRpYyBib29sIGNvbmZpZ19z dWJfZ2V0KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IG5ldF9pZHgsDQo+ICAJCXJl dHVybiBmYWxzZTsNCj4gIA0KPiAgCWNhc2UgNDoNCj4gLQkJbW9kX2lkID0gbF9nZXRfbGUxNihw a3QgKyAyKTsNCj4gKwkJaWQgPSBsX2dldF9sZTE2KHBrdCArIDIpOw0KPiAgCQluID0gbWVzaF9t b2RlbF9vcGNvZGVfc2V0KE9QX0NPTkZJR19NT0RFTF9TVUJfTElTVCwgbXNnKTsNCj4gIAkJbXNn X3N0YXR1cyA9IG1zZyArIG47DQo+ICAJCW1zZ1tuKytdID0gMDsNCj4gIAkJbF9wdXRfbGUxNihl bGVfYWRkciwgbXNnICsgbik7DQo+ICAJCW4gKz0gMjsNCj4gLQkJbF9wdXRfbGUxNihtb2RfaWQs IG1zZyArIG4pOw0KPiArCQlsX3B1dF9sZTE2KGlkLCBtc2cgKyBuKTsNCj4gIAkJbiArPSAyOw0K PiAtCQltb2RfaWQgfD0gVkVORE9SX0lEX01BU0s7DQo+ICsJCWlkID0gU0VUX0lEKFNJR19WRU5E T1IsIGlkKTsNCj4gIAkJYnJlYWs7DQo+ICANCj4gIAljYXNlIDY6DQo+IC0JCW1vZF9pZCA9IGxf Z2V0X2xlMTYocGt0ICsgMikgPDwgMTY7DQo+IC0JCW1vZF9pZCB8PSBsX2dldF9sZTE2KHBrdCAr IDQpOw0KPiArCQlpZCA9IFNFVF9JRChsX2dldF9sZTE2KHBrdCArIDIpLCBsX2dldF9sZTE2KHBr dCArIDQpKTsNCj4gIAkJbiA9IG1lc2hfbW9kZWxfb3Bjb2RlX3NldChPUF9DT05GSUdfVkVORF9N T0RFTF9TVUJfTElTVCwgbXNnKTsNCj4gIAkJbXNnX3N0YXR1cyA9IG1zZyArIG47DQo+ICAJCW1z Z1tuKytdID0gMDsNCj4gIAkJbF9wdXRfbGUxNihlbGVfYWRkciwgbXNnICsgbik7DQo+ICAJCW4g Kz0gMjsNCj4gLQkJbF9wdXRfbGUxNihtb2RfaWQgPj4gMTYsIG1zZyArIG4pOw0KPiArCQlsX3B1 dF9sZTE2KFZFTkRPUl9JRChpZCksIG1zZyArIG4pOw0KPiAgCQluICs9IDI7DQo+IC0JCWxfcHV0 X2xlMTYobW9kX2lkLCBtc2cgKyBuKTsNCj4gKwkJbF9wdXRfbGUxNihNT0RFTF9JRChpZCksIG1z ZyArIG4pOw0KPiAgCQluICs9IDI7DQo+ICAJCWJyZWFrOw0KPiAgCX0NCj4gIA0KPiAgCWJ1Zl9z aXplID0gc2l6ZW9mKHVpbnQxNl90KSAqIE1BWF9HUlBfUEVSX01PRDsNCj4gLQlzdGF0dXMgPSBt ZXNoX21vZGVsX3N1Yl9nZXQobm9kZSwgZWxlX2FkZHIsIG1vZF9pZCwgbXNnICsgbiwgYnVmX3Np emUsDQo+ICsJc3RhdHVzID0gbWVzaF9tb2RlbF9zdWJfZ2V0KG5vZGUsIGVsZV9hZGRyLCBpZCwg bXNnICsgbiwgYnVmX3NpemUsDQo+ICAJCQkJCQkJCQkmc2l6ZSk7DQo+ICANCj4gIAlpZiAoc3Rh dHVzID09IE1FU0hfU1RBVFVTX1NVQ0NFU1MpDQo+IEBAIC0yNzMsNyArMjcxLDcgQEAgc3RhdGlj IGJvb2wgY29uZmlnX3N1Yl9nZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgbmV0 X2lkeCwNCj4gIH0NCj4gIA0KPiAgc3RhdGljIGJvb2wgc2F2ZV9jb25maWdfc3ViKHN0cnVjdCBt ZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IGVsZV9hZGRyLA0KPiAtCQkJCQl1aW50MzJfdCBtb2Rf aWQsIGJvb2wgdmVuZG9yLA0KPiArCQkJCQl1aW50MzJfdCBpZCwgYm9vbCB2ZW5kb3IsDQo+ICAJ CQkJCWNvbnN0IHVpbnQ4X3QgKmFkZHIsIGJvb2wgdmlydCwNCj4gIAkJCQkJdWludDE2X3QgZ3Jw LCB1aW50MzJfdCBvcGNvZGUpDQo+ICB7DQo+IEBAIC0yODcsMjAgKzI4NSwxOCBAQCBzdGF0aWMg Ym9vbCBzYXZlX2NvbmZpZ19zdWIoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgZWxl X2FkZHIsDQo+ICANCj4gIAlpZiAob3Bjb2RlID09IE9QX0NPTkZJR19NT0RFTF9TVUJfVklSVF9P VkVSV1JJVEUgfHwNCj4gIAkJCQkJb3Bjb2RlID09IE9QX0NPTkZJR19NT0RFTF9TVUJfT1ZFUldS SVRFKQ0KPiAtCQltZXNoX2NvbmZpZ19tb2RlbF9zdWJfZGVsX2FsbChub2RlX2NvbmZpZ19nZXQo bm9kZSksDQo+IC0JCQkJZWxlX2FkZHIsIHZlbmRvciA/IG1vZF9pZCA6IG1vZF9pZCAmIDB4MDAw MGZmZmYsDQo+ICsJCW1lc2hfY29uZmlnX21vZGVsX3N1Yl9kZWxfYWxsKG5vZGVfY29uZmlnX2dl dChub2RlKSwgZWxlX2FkZHIsDQo+ICsJCQkJCQl2ZW5kb3IgPyBpZCA6IE1PREVMX0lEKGlkKSwN Cj4gIAkJCQkJCQkJCXZlbmRvcik7DQo+ICANCj4gIAlpZiAob3Bjb2RlICE9IE9QX0NPTkZJR19N T0RFTF9TVUJfVklSVF9ERUxFVEUgJiYNCj4gIAkJCW9wY29kZSAhPSBPUF9DT05GSUdfTU9ERUxf U1VCX0RFTEVURSkNCj4gIAkJcmV0dXJuIG1lc2hfY29uZmlnX21vZGVsX3N1Yl9hZGQobm9kZV9j b25maWdfZ2V0KG5vZGUpLA0KPiAtCQkJCQllbGVfYWRkciwNCj4gLQkJCQkJdmVuZG9yID8gbW9k X2lkIDogbW9kX2lkICYgMHgwMDAwZmZmZiwNCj4gKwkJCQkJZWxlX2FkZHIsIHZlbmRvciA/IGlk IDogTU9ERUxfSUQoaWQpLA0KPiAgCQkJCQl2ZW5kb3IsICZkYl9zdWIpOw0KPiAgCWVsc2UNCj4g IAkJcmV0dXJuIG1lc2hfY29uZmlnX21vZGVsX3N1Yl9kZWwobm9kZV9jb25maWdfZ2V0KG5vZGUp LA0KPiAtCQkJCQllbGVfYWRkciwNCj4gLQkJCQkJdmVuZG9yID8gbW9kX2lkIDogbW9kX2lkICYg MHgwMDAwZmZmZiwNCj4gKwkJCQkJZWxlX2FkZHIsIHZlbmRvciA/IGlkIDogTU9ERUxfSUQoaWQp LA0KPiAgCQkJCQl2ZW5kb3IsICZkYl9zdWIpOw0KPiAgfQ0KPiAgDQo+IEBAIC0zMTAsNyArMzA2 LDcgQEAgc3RhdGljIHZvaWQgY29uZmlnX3N1Yl9zZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwg dWludDE2X3QgbmV0X2lkeCwNCj4gIAkJCQkJYm9vbCB2aXJ0LCB1aW50MzJfdCBvcGNvZGUpDQo+ ICB7DQo+ICAJdWludDE2X3QgZ3JwLCBlbGVfYWRkcjsNCj4gLQl1aW50MzJfdCBtb2RfaWQ7DQo+ ICsJdWludDMyX3QgaWQ7DQo+ICAJY29uc3QgdWludDhfdCAqYWRkciA9IE5VTEw7DQo+ICAJaW50 IHN0YXR1cyA9IE1FU0hfU1RBVFVTX1NVQ0NFU1M7DQo+ICAJYm9vbCB2ZW5kb3IgPSBmYWxzZTsN Cj4gQEAgLTMyMiw0MCArMzE4LDQwIEBAIHN0YXRpYyB2b2lkIGNvbmZpZ19zdWJfc2V0KHN0cnVj dCBtZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IG5ldF9pZHgsDQo+ICAJY2FzZSA0Og0KPiAgCQlp ZiAob3Bjb2RlICE9IE9QX0NPTkZJR19NT0RFTF9TVUJfREVMRVRFX0FMTCkNCj4gIAkJCXJldHVy bjsNCj4gLQkJbW9kX2lkID0gbF9nZXRfbGUxNihwa3QgKyAyKTsNCj4gLQkJbW9kX2lkIHw9IFZF TkRPUl9JRF9NQVNLOw0KPiArDQo+ICsJCWlkID0gU0VUX0lEKFNJR19WRU5ET1IsIGxfZ2V0X2xl MTYocGt0ICsgMikpOw0KPiAgCQlicmVhazsNCj4gIAljYXNlIDY6DQo+ICAJCWlmICh2aXJ0KQ0K PiAgCQkJcmV0dXJuOw0KPiArDQo+ICAJCWlmIChvcGNvZGUgIT0gT1BfQ09ORklHX01PREVMX1NV Ql9ERUxFVEVfQUxMKSB7DQo+IC0JCQltb2RfaWQgPSBsX2dldF9sZTE2KHBrdCArIDQpOw0KPiAt CQkJbW9kX2lkIHw9IFZFTkRPUl9JRF9NQVNLOw0KPiArCQkJaWQgPSBTRVRfSUQoU0lHX1ZFTkRP UiwgbF9nZXRfbGUxNihwa3QgKyA0KSk7DQo+ICAJCX0gZWxzZSB7DQo+IC0JCQltb2RfaWQgPSBs X2dldF9sZTE2KHBrdCArIDIpIDw8IDE2Ow0KPiAtCQkJbW9kX2lkIHw9IGxfZ2V0X2xlMTYocGt0 ICsgNCk7DQo+ICsJCQlpZCA9IFNFVF9JRChsX2dldF9sZTE2KHBrdCArIDIpLCBsX2dldF9sZTE2 KHBrdCArIDQpKTsNCj4gIAkJCXZlbmRvciA9IHRydWU7DQo+ICAJCX0NCj4gKw0KPiAgCQlicmVh azsNCj4gIAljYXNlIDg6DQo+ICAJCWlmICh2aXJ0KQ0KPiAgCQkJcmV0dXJuOw0KPiAtCQltb2Rf aWQgPSBsX2dldF9sZTE2KHBrdCArIDQpIDw8IDE2Ow0KPiAtCQltb2RfaWQgfD0gbF9nZXRfbGUx Nihwa3QgKyA2KTsNCj4gKw0KPiArCQlpZCA9IFNFVF9JRChsX2dldF9sZTE2KHBrdCArIDQpLCBs X2dldF9sZTE2KHBrdCArIDYpKTsNCj4gIAkJdmVuZG9yID0gdHJ1ZTsNCj4gIAkJYnJlYWs7DQo+ ICAJY2FzZSAyMDoNCj4gIAkJaWYgKCF2aXJ0KQ0KPiAgCQkJcmV0dXJuOw0KPiAtCQltb2RfaWQg PSBsX2dldF9sZTE2KHBrdCArIDE4KTsNCj4gLQkJbW9kX2lkIHw9IFZFTkRPUl9JRF9NQVNLOw0K PiArDQo+ICsJCWlkID0gU0VUX0lEKFNJR19WRU5ET1IsIGxfZ2V0X2xlMTYocGt0ICsgMTgpKTsN Cj4gIAkJYnJlYWs7DQo+ICAJY2FzZSAyMjoNCj4gIAkJaWYgKCF2aXJ0KQ0KPiAgCQkJcmV0dXJu Ow0KPiArDQo+ICAJCXZlbmRvciA9IHRydWU7DQo+IC0JCW1vZF9pZCA9IGxfZ2V0X2xlMTYocGt0 ICsgMTgpIDw8IDE2Ow0KPiAtCQltb2RfaWQgfD0gbF9nZXRfbGUxNihwa3QgKyAyMCk7DQo+ICsJ CWlkID0gU0VUX0lEKGxfZ2V0X2xlMTYocGt0ICsgMTgpLCBsX2dldF9sZTE2KHBrdCArIDIwKSk7 DQo+ICAJCWJyZWFrOw0KPiAgCX0NCj4gIA0KPiBAQCAtMzczLDExICszNjksMTEgQEAgc3RhdGlj IHZvaWQgY29uZmlnX3N1Yl9zZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgbmV0 X2lkeCwNCj4gIAkJcmV0dXJuOw0KPiAgDQo+ICAJY2FzZSBPUF9DT05GSUdfTU9ERUxfU1VCX0RF TEVURV9BTEw6DQo+IC0JCXN0YXR1cyA9IG1lc2hfbW9kZWxfc3ViX2RlbF9hbGwobm9kZSwgZWxl X2FkZHIsIG1vZF9pZCk7DQo+ICsJCXN0YXR1cyA9IG1lc2hfbW9kZWxfc3ViX2RlbF9hbGwobm9k ZSwgZWxlX2FkZHIsIGlkKTsNCj4gIA0KPiAgCQlpZiAoc3RhdHVzID09IE1FU0hfU1RBVFVTX1NV Q0NFU1MpDQo+ICAJCQltZXNoX2NvbmZpZ19tb2RlbF9zdWJfZGVsX2FsbChub2RlX2NvbmZpZ19n ZXQobm9kZSksDQo+IC0JCQkJZWxlX2FkZHIsIHZlbmRvciA/IG1vZF9pZCA6IG1vZF9pZCAmIDB4 MDAwMGZmZmYsDQo+ICsJCQkJCWVsZV9hZGRyLCB2ZW5kb3IgPyBpZCA6IE1PREVMX0lEKGlkKSwN Cj4gIAkJCQkJCQkJCXZlbmRvcik7DQo+ICAJCWJyZWFrOw0KPiAgDQo+IEBAIC0zODUsMjIgKzM4 MSwyMiBAQCBzdGF0aWMgdm9pZCBjb25maWdfc3ViX3NldChzdHJ1Y3QgbWVzaF9ub2RlICpub2Rl LCB1aW50MTZfdCBuZXRfaWR4LA0KPiAgCQlncnAgPSBVTkFTU0lHTkVEX0FERFJFU1M7DQo+ICAJ CS8qIEZhbGwgVGhyb3VnaCAqLw0KPiAgCWNhc2UgT1BfQ09ORklHX01PREVMX1NVQl9PVkVSV1JJ VEU6DQo+IC0JCXN0YXR1cyA9IG1lc2hfbW9kZWxfc3ViX292cihub2RlLCBlbGVfYWRkciwgbW9k X2lkLA0KPiArCQlzdGF0dXMgPSBtZXNoX21vZGVsX3N1Yl9vdnIobm9kZSwgZWxlX2FkZHIsIGlk LA0KPiAgCQkJCQkJCWFkZHIsIHZpcnQsICZncnApOw0KPiAgDQo+ICAJCWlmIChzdGF0dXMgPT0g TUVTSF9TVEFUVVNfU1VDQ0VTUykNCj4gLQkJCXNhdmVfY29uZmlnX3N1Yihub2RlLCBlbGVfYWRk ciwgbW9kX2lkLCB2ZW5kb3IsIGFkZHIsDQo+ICsJCQlzYXZlX2NvbmZpZ19zdWIobm9kZSwgZWxl X2FkZHIsIGlkLCB2ZW5kb3IsIGFkZHIsDQo+ICAJCQkJCQkJdmlydCwgZ3JwLCBvcGNvZGUpOw0K PiAgCQlicmVhazsNCj4gIAljYXNlIE9QX0NPTkZJR19NT0RFTF9TVUJfVklSVF9BREQ6DQo+ICAJ CWdycCA9IFVOQVNTSUdORURfQUREUkVTUzsNCj4gIAkJLyogRmFsbCBUaHJvdWdoICovDQo+ICAJ Y2FzZSBPUF9DT05GSUdfTU9ERUxfU1VCX0FERDoNCj4gLQkJc3RhdHVzID0gbWVzaF9tb2RlbF9z dWJfYWRkKG5vZGUsIGVsZV9hZGRyLCBtb2RfaWQsDQo+ICsJCXN0YXR1cyA9IG1lc2hfbW9kZWxf c3ViX2FkZChub2RlLCBlbGVfYWRkciwgaWQsDQo+ICAJCQkJCQkJYWRkciwgdmlydCwgJmdycCk7 DQo+ICANCj4gIAkJaWYgKHN0YXR1cyA9PSBNRVNIX1NUQVRVU19TVUNDRVNTICYmDQo+IC0JCQkJ IXNhdmVfY29uZmlnX3N1Yihub2RlLCBlbGVfYWRkciwgbW9kX2lkLCB2ZW5kb3IsDQo+ICsJCQkJ IXNhdmVfY29uZmlnX3N1Yihub2RlLCBlbGVfYWRkciwgaWQsIHZlbmRvciwNCj4gIAkJCQkJCWFk ZHIsIHZpcnQsIGdycCwgb3Bjb2RlKSkNCj4gIAkJCXN0YXR1cyA9IE1FU0hfU1RBVFVTX1NUT1JB R0VfRkFJTDsNCj4gIA0KPiBAQCAtNDA5LDE3ICs0MDUsMTcgQEAgc3RhdGljIHZvaWQgY29uZmln X3N1Yl9zZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgbmV0X2lkeCwNCj4gIAkJ Z3JwID0gVU5BU1NJR05FRF9BRERSRVNTOw0KPiAgCQkvKiBGYWxsIFRocm91Z2ggKi8NCj4gIAlj YXNlIE9QX0NPTkZJR19NT0RFTF9TVUJfREVMRVRFOg0KPiAtCQlzdGF0dXMgPSBtZXNoX21vZGVs X3N1Yl9kZWwobm9kZSwgZWxlX2FkZHIsIG1vZF9pZCwgYWRkciwgdmlydCwNCj4gKwkJc3RhdHVz ID0gbWVzaF9tb2RlbF9zdWJfZGVsKG5vZGUsIGVsZV9hZGRyLCBpZCwgYWRkciwgdmlydCwNCj4g IAkJCQkJCQkJCSZncnApOw0KPiAgDQo+ICAJCWlmIChzdGF0dXMgPT0gTUVTSF9TVEFUVVNfU1VD Q0VTUykNCj4gLQkJCXNhdmVfY29uZmlnX3N1Yihub2RlLCBlbGVfYWRkciwgbW9kX2lkLCB2ZW5k b3IsIGFkZHIsDQo+ICsJCQlzYXZlX2NvbmZpZ19zdWIobm9kZSwgZWxlX2FkZHIsIGlkLCB2ZW5k b3IsIGFkZHIsDQo+ICAJCQkJCQkJdmlydCwgZ3JwLCBvcGNvZGUpOw0KPiAgDQo+ICAJCWJyZWFr Ow0KPiAgCX0NCj4gIA0KPiAtCXNlbmRfc3ViX3N0YXR1cyhub2RlLCBuZXRfaWR4LCBzcmMsIGRz dCwgc3RhdHVzLCBlbGVfYWRkciwgZ3JwLCBtb2RfaWQpOw0KPiArCXNlbmRfc3ViX3N0YXR1cyhu b2RlLCBuZXRfaWR4LCBzcmMsIGRzdCwgc3RhdHVzLCBlbGVfYWRkciwgZ3JwLCBpZCk7DQo+ICB9 DQo+ICANCj4gIHN0YXRpYyB2b2lkIHNlbmRfbW9kZWxfYXBwX3N0YXR1cyhzdHJ1Y3QgbWVzaF9u b2RlICpub2RlLCB1aW50MTZfdCBuZXRfaWR4LA0KPiBAQCAtNDM0LDExICs0MzAsMTMgQEAgc3Rh dGljIHZvaWQgc2VuZF9tb2RlbF9hcHBfc3RhdHVzKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVp bnQxNl90IG5ldF9pZHgsDQo+ICAJbiArPSAyOw0KPiAgCWxfcHV0X2xlMTYoaWR4LCBtc2cgKyBu KTsNCj4gIAluICs9IDI7DQo+IC0JaWYgKGlkID49IDB4MTAwMDAgJiYgaWQgPCBWRU5ET1JfSURf TUFTSykgew0KPiAtCQlsX3B1dF9sZTE2KGlkID4+IDE2LCBtc2cgKyBuKTsNCj4gKw0KPiArCWlm IChJU19WRU5ET1IoaWQpKSB7DQo+ICsJCWxfcHV0X2xlMTYoVkVORE9SX0lEKGlkKSwgbXNnICsg bik7DQo+ICAJCW4gKz0gMjsNCj4gIAl9DQo+IC0JbF9wdXRfbGUxNihpZCwgbXNnICsgbik7DQo+ ICsNCj4gKwlsX3B1dF9sZTE2KE1PREVMX0lEKGlkKSwgbXNnICsgbik7DQo+ICAJbiArPSAyOw0K PiAgDQo+ICAJbWVzaF9tb2RlbF9zZW5kKG5vZGUsIGRzdCwgc3JjLCBBUFBfSURYX0RFVl9MT0NB TCwgbmV0X2lkeCwgREVGQVVMVF9UVEwsDQo+IEBAIC00NTAsNyArNDQ4LDcgQEAgc3RhdGljIHZv aWQgbW9kZWxfYXBwX2xpc3Qoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgbmV0X2lk eCwNCj4gIAkJCQkJY29uc3QgdWludDhfdCAqcGt0LCB1aW50MTZfdCBzaXplKQ0KPiAgew0KPiAg CXVpbnQxNl90IGVsZV9hZGRyOw0KPiAtCXVpbnQzMl90IG1vZF9pZCA9IDB4ZmZmZjsNCj4gKwl1 aW50MzJfdCBpZDsNCj4gIAl1aW50OF90ICpzdGF0dXM7DQo+ICAJdWludDE2X3QgbjsNCj4gIAlp bnQgcmVzdWx0Ow0KPiBAQCAtNDYzLDI3ICs0NjEsMjUgQEAgc3RhdGljIHZvaWQgbW9kZWxfYXBw X2xpc3Qoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgbmV0X2lkeCwNCj4gIAljYXNl IDQ6DQo+ICAJCW4gPSBtZXNoX21vZGVsX29wY29kZV9zZXQoT1BfTU9ERUxfQVBQX0xJU1QsIG1z Zyk7DQo+ICAJCXN0YXR1cyA9IG1zZyArIG47DQo+IC0JCW1vZF9pZCA9IGxfZ2V0X2xlMTYocGt0 ICsgMik7DQo+ICsJCWlkID0gbF9nZXRfbGUxNihwa3QgKyAyKTsNCj4gIAkJbF9wdXRfbGUxNihl bGVfYWRkciwgbXNnICsgMSArIG4pOw0KPiAtCQlsX3B1dF9sZTE2KG1vZF9pZCwgbXNnICsgMyAr IG4pOw0KPiAtCQltb2RfaWQgfD0gVkVORE9SX0lEX01BU0s7DQo+ICsJCWxfcHV0X2xlMTYoKHVp bnQxNl90KSBpZCwgbXNnICsgMyArIG4pOw0KPiArCQlpZCA9IFNFVF9JRChTSUdfVkVORE9SLCBp ZCk7DQo+ICAJCW4gKz0gNTsNCj4gIAkJYnJlYWs7DQo+ICAJY2FzZSA2Og0KPiAgCQluID0gbWVz aF9tb2RlbF9vcGNvZGVfc2V0KE9QX1ZFTkRfTU9ERUxfQVBQX0xJU1QsIG1zZyk7DQo+ICAJCXN0 YXR1cyA9IG1zZyArIG47DQo+IC0JCW1vZF9pZCA9IGxfZ2V0X2xlMTYocGt0ICsgMikgPDwgMTY7 DQo+IC0JCW1vZF9pZCB8PSBsX2dldF9sZTE2KHBrdCArIDQpOw0KPiArCQlpZCA9IFNFVF9JRChs X2dldF9sZTE2KHBrdCArIDIpLCBsX2dldF9sZTE2KHBrdCArIDQpKTsNCj4gIA0KPiAgCQlsX3B1 dF9sZTE2KGVsZV9hZGRyLCBtc2cgKyAxICsgbik7DQo+IC0JCWxfcHV0X2xlMTYobW9kX2lkID4+ IDE2LCBtc2cgKyAzICsgbik7DQo+IC0JCWxfcHV0X2xlMTYobW9kX2lkLCBtc2cgKyA1ICsgbik7 DQo+ICsJCWxfcHV0X2xlMTYoKHVpbnQxNl90KSBWRU5ET1JfSUQoaWQpLCBtc2cgKyAzICsgbik7 DQo+ICsJCWxfcHV0X2xlMTYoKHVpbnQxNl90KSBNT0RFTF9JRChpZCksIG1zZyArIDUgKyBuKTsN Cj4gIAkJbiArPSA3Ow0KPiAgCQlicmVhazsNCj4gIAl9DQo+ICANCj4gLQ0KPiAtCXJlc3VsdCA9 IG1lc2hfbW9kZWxfZ2V0X2JpbmRpbmdzKG5vZGUsIGVsZV9hZGRyLCBtb2RfaWQsIG1zZyArIG4s DQo+ICsJcmVzdWx0ID0gbWVzaF9tb2RlbF9nZXRfYmluZGluZ3Mobm9kZSwgZWxlX2FkZHIsIGlk LCBtc2cgKyBuLA0KPiAgCQkJCQkJTUFYX01TR19MRU4gLSBuLCAmc2l6ZSk7DQo+ICAJbiArPSBz aXplOw0KPiAgDQo+IEBAIC01MDAsNyArNDk2LDcgQEAgc3RhdGljIGJvb2wgbW9kZWxfYXBwX2Jp bmQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgbmV0X2lkeCwNCj4gIAkJCQkJYm9v bCB1bmJpbmQpDQo+ICB7DQo+ICAJdWludDE2X3QgZWxlX2FkZHI7DQo+IC0JdWludDMyX3QgbW9k X2lkOw0KPiArCXVpbnQzMl90IGlkOw0KPiAgCXVpbnQxNl90IGlkeDsNCj4gIAlpbnQgcmVzdWx0 Ow0KPiAgDQo+IEBAIC01MDksMTIgKzUwNSwxMCBAQCBzdGF0aWMgYm9vbCBtb2RlbF9hcHBfYmlu ZChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBuZXRfaWR4LA0KPiAgCQlyZXR1cm4g ZmFsc2U7DQo+ICANCj4gIAljYXNlIDY6DQo+IC0JCW1vZF9pZCA9IGxfZ2V0X2xlMTYocGt0ICsg NCk7DQo+IC0JCW1vZF9pZCB8PSBWRU5ET1JfSURfTUFTSzsNCj4gKwkJaWQgPSBTRVRfSUQoU0lH X1ZFTkRPUiwgbF9nZXRfbGUxNihwa3QgKyA0KSk7DQo+ICAJCWJyZWFrOw0KPiAgCWNhc2UgODoN Cj4gLQkJbW9kX2lkID0gbF9nZXRfbGUxNihwa3QgKyA0KSA8PCAxNjsNCj4gLQkJbW9kX2lkIHw9 IGxfZ2V0X2xlMTYocGt0ICsgNik7DQo+ICsJCWlkID0gU0VUX0lEKGxfZ2V0X2xlMTYocGt0ICsg NCksIGxfZ2V0X2xlMTYocGt0ICsgNikpOw0KPiAgCQlicmVhazsNCj4gIAl9DQo+ICANCj4gQEAg LTUyNSwxMiArNTE5LDEyIEBAIHN0YXRpYyBib29sIG1vZGVsX2FwcF9iaW5kKHN0cnVjdCBtZXNo X25vZGUgKm5vZGUsIHVpbnQxNl90IG5ldF9pZHgsDQo+ICAJCXJldHVybiBmYWxzZTsNCj4gIA0K PiAgCWlmICh1bmJpbmQpDQo+IC0JCXJlc3VsdCA9IG1lc2hfbW9kZWxfYmluZGluZ19kZWwobm9k ZSwgZWxlX2FkZHIsIG1vZF9pZCwgaWR4KTsNCj4gKwkJcmVzdWx0ID0gbWVzaF9tb2RlbF9iaW5k aW5nX2RlbChub2RlLCBlbGVfYWRkciwgaWQsIGlkeCk7DQo+ICAJZWxzZQ0KPiAtCQlyZXN1bHQg PSBtZXNoX21vZGVsX2JpbmRpbmdfYWRkKG5vZGUsIGVsZV9hZGRyLCBtb2RfaWQsIGlkeCk7DQo+ ICsJCXJlc3VsdCA9IG1lc2hfbW9kZWxfYmluZGluZ19hZGQobm9kZSwgZWxlX2FkZHIsIGlkLCBp ZHgpOw0KPiAgDQo+ICAJc2VuZF9tb2RlbF9hcHBfc3RhdHVzKG5vZGUsIG5ldF9pZHgsIHNyYywg ZHN0LCByZXN1bHQsIGVsZV9hZGRyLA0KPiAtCQkJCQkJCQltb2RfaWQsIGlkeCk7DQo+ICsJCQkJ CQkJCWlkLCBpZHgpOw0KPiAgDQo+ICAJcmV0dXJuIHRydWU7DQo+ICB9DQo+IGRpZmYgLS1naXQg YS9tZXNoL2NmZ21vZC5oIGIvbWVzaC9jZmdtb2QuaA0KPiBpbmRleCAzODNmZGJmNmIuLjdiNmE5 NTgwNyAxMDA2NDQNCj4gLS0tIGEvbWVzaC9jZmdtb2QuaA0KPiArKysgYi9tZXNoL2NmZ21vZC5o DQo+IEBAIC0xNyw4ICsxNyw4IEBADQo+ICAgKg0KPiAgICovDQo+ICANCj4gLSNkZWZpbmUgQ09O RklHX1NSVl9NT0RFTAkoVkVORE9SX0lEX01BU0sgfCAweDAwMDApDQo+IC0jZGVmaW5lIENPTkZJ R19DTElfTU9ERUwJKFZFTkRPUl9JRF9NQVNLIHwgMHgwMDAxKQ0KPiArI2RlZmluZSBDT05GSUdf U1JWX01PREVMCVNFVF9JRChTSUdfVkVORE9SLCAweDAwMDApDQo+ICsjZGVmaW5lIENPTkZJR19D TElfTU9ERUwJU0VUX0lEKFNJR19WRU5ET1IsIDB4MDAwMSkNCj4gIA0KPiAgLyogTmV3IExpc3Qg Ki8NCj4gICNkZWZpbmUgT1BfQVBQS0VZX0FERAkJCQkweDAwDQo+IGRpZmYgLS1naXQgYS9tZXNo L21lc2gtY29uZmlnLWpzb24uYyBiL21lc2gvbWVzaC1jb25maWctanNvbi5jDQo+IGluZGV4IDg4 ZjcxNWZjMS4uZGViMDAxOWY5IDEwMDY0NA0KPiAtLS0gYS9tZXNoL21lc2gtY29uZmlnLWpzb24u Yw0KPiArKysgYi9tZXNoL21lc2gtY29uZmlnLWpzb24uYw0KPiBAQCAtMTEyNiwxOCArMTEyNiwx NSBAQCBzdGF0aWMgYm9vbCBwYXJzZV9tb2RlbHMoanNvbl9vYmplY3QgKmptb2RlbHMsIHN0cnVj dCBtZXNoX2NvbmZpZ19lbGVtZW50ICplbGUpDQo+ICAJCQlpZiAoc3NjYW5mKHN0ciwgIiUwNHgi LCAmaWQpICE9IDEpDQo+ICAJCQkJZ290byBmYWlsOw0KPiAgDQo+IC0JCQlpZCB8PSBWRU5ET1Jf SURfTUFTSzsNCj4gIAkJfSBlbHNlIGlmIChsZW4gPT0gOCkgew0KPiAgCQkJaWYgKHNzY2FuZihz dHIsICIlMDh4IiwgJmlkKSAhPSAxKQ0KPiAgCQkJCWdvdG8gZmFpbDsNCj4gKwkJCW1vZC0+dmVu ZG9yID0gdHJ1ZTsNCj4gIAkJfSBlbHNlDQo+ICAJCQlnb3RvIGZhaWw7DQo+ICANCj4gIAkJbW9k LT5pZCA9IGlkOw0KPiAgDQo+IC0JCWlmIChsZW4gPT0gOCkNCj4gLQkJCW1vZC0+dmVuZG9yID0g dHJ1ZTsNCj4gLQ0KPiAgCQlpZiAoanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbW9kZWwsICJi aW5kIiwgJmphcnJheSkpIHsNCj4gIAkJCWlmIChqc29uX29iamVjdF9nZXRfdHlwZShqYXJyYXkp ICE9IGpzb25fdHlwZV9hcnJheSB8fA0KPiAgCQkJCQkhcGFyc2VfYmluZGluZ3MoamFycmF5LCBt b2QpKQ0KPiBkaWZmIC0tZ2l0IGEvbWVzaC9tb2RlbC5jIGIvbWVzaC9tb2RlbC5jDQo+IGluZGV4 IGFmYWM2ZWM2OS4uMzExOTdiMzYzIDEwMDY0NA0KPiAtLS0gYS9tZXNoL21vZGVsLmMNCj4gKysr IGIvbWVzaC9tb2RlbC5jDQo+IEBAIC0yLDcgKzIsNyBAQA0KPiAgICoNCj4gICAqICBCbHVlWiAt IEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgNCj4gICAqDQo+IC0gKiAgQ29weXJp Z2h0IChDKSAyMDE4LTIwMTkgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk Lg0KPiArICogIENvcHlyaWdodCAoQykgMjAxOC0yMDIwICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCj4gICAqDQo+ICAgKg0KPiAgICogIFRoaXMgbGlicmFyeSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gQEAgLTU0LDcg KzU0LDYgQEAgc3RydWN0IG1lc2hfbW9kZWwgew0KPiAgCWJvb2wgc3ViX2VuYWJsZWQ7DQo+ICAJ Ym9vbCBwdWJfZW5hYmxlZDsNCj4gIAl1aW50MzJfdCBpZDsNCj4gLQl1aW50OF90IGVsZV9pZHg7 DQo+ICB9Ow0KPiAgDQo+ICBzdHJ1Y3QgbWVzaF92aXJ0dWFsIHsNCj4gQEAgLTEzMSw0NCArMTMw LDQyIEBAIHN0YXRpYyBib29sIGZpbmRfdmlydF9ieV9sYWJlbChjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiKQ0KPiAgDQo+ICBzdGF0aWMgYm9vbCBtYXRjaF9tb2RlbF9pZChjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiKQ0KPiAgew0KPiAtCWNvbnN0IHN0cnVjdCBtZXNoX21vZGVsICpt b2RlbCA9IGE7DQo+ICsJY29uc3Qgc3RydWN0IG1lc2hfbW9kZWwgKm1vZCA9IGE7DQo+ICAJdWlu dDMyX3QgaWQgPSBMX1BUUl9UT19VSU5UKGIpOw0KPiAgDQo+IC0JcmV0dXJuIChtZXNoX21vZGVs X2dldF9tb2RlbF9pZChtb2RlbCkgPT0gaWQpOw0KPiArCXJldHVybiAobW9kLT5pZCA9PSBpZCk7 DQo+ICB9DQo+ICANCj4gLXN0YXRpYyBzdHJ1Y3QgbWVzaF9tb2RlbCAqZ2V0X21vZGVsKHN0cnVj dCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgZWxlX2lkeCwNCj4gLQkJCQkJCXVpbnQzMl90IGlk LCBpbnQgKnN0YXR1cykNCj4gK3N0YXRpYyBpbnQgY29tcGFyZV9tb2RlbF9pZChjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiLCB2b2lkICp1c2VyX2RhdGEpDQo+ICB7DQo+IC0Jc3RydWN0IGxf cXVldWUgKm1vZGVsczsNCj4gLQlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kZWw7DQo+ICsJY29uc3Qg c3RydWN0IG1lc2hfbW9kZWwgKm1vZF9hID0gYTsNCj4gKwljb25zdCBzdHJ1Y3QgbWVzaF9tb2Rl bCAqbW9kX2IgPSBiOw0KPiAgDQo+IC0JbW9kZWxzID0gbm9kZV9nZXRfZWxlbWVudF9tb2RlbHMo bm9kZSwgZWxlX2lkeCwgc3RhdHVzKTsNCj4gLQlpZiAoIW1vZGVscykgew0KPiAtCQkqc3RhdHVz ID0gTUVTSF9TVEFUVVNfSU5WQUxJRF9NT0RFTDsNCj4gLQkJcmV0dXJuIE5VTEw7DQo+IC0JfQ0K PiAtDQo+IC0JbW9kZWwgPSBsX3F1ZXVlX2ZpbmQobW9kZWxzLCBtYXRjaF9tb2RlbF9pZCwgTF9V SU5UX1RPX1BUUihpZCkpOw0KPiArCWlmIChtb2RfYS0+aWQgPCBtb2RfYi0+aWQpDQo+ICsJCXJl dHVybiAtMTsNCj4gIA0KPiAtCSpzdGF0dXMgPSAobW9kZWwpID8gTUVTSF9TVEFUVVNfU1VDQ0VT UyA6IE1FU0hfU1RBVFVTX0lOVkFMSURfTU9ERUw7DQo+ICsJaWYgKG1vZF9hLT5pZCA+IG1vZF9i LT5pZCkNCj4gKwkJcmV0dXJuIDE7DQo+ICANCj4gLQlyZXR1cm4gbW9kZWw7DQo+ICsJcmV0dXJu IDA7DQo+ICB9DQo+ICANCj4gLXN0YXRpYyBzdHJ1Y3QgbWVzaF9tb2RlbCAqZmluZF9tb2RlbChz dHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBhZGRyLA0KPiAtCQkJCQkJdWludDMyX3Qg bW9kX2lkLCBpbnQgKnN0YXR1cykNCj4gK3N0YXRpYyBzdHJ1Y3QgbWVzaF9tb2RlbCAqZ2V0X21v ZGVsKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgZWxlX2lkeCwNCj4gKwkJCQkJCQkJ dWludDMyX3QgaWQpDQo+ICB7DQo+IC0JaW50IGVsZV9pZHg7DQo+IC0NCj4gLQllbGVfaWR4ID0g bm9kZV9nZXRfZWxlbWVudF9pZHgobm9kZSwgYWRkcik7DQo+ICsJc3RydWN0IGxfcXVldWUgKm1v ZHM7DQo+ICsJc3RydWN0IG1lc2hfbW9kZWwgKm1vZDsNCj4gIA0KPiAtCWlmIChlbGVfaWR4IDwg MCkgew0KPiAtCQkqc3RhdHVzID0gTUVTSF9TVEFUVVNfSU5WQUxJRF9BRERSRVNTOw0KPiArCW1v ZHMgPSBub2RlX2dldF9lbGVtZW50X21vZGVscyhub2RlLCBlbGVfaWR4KTsNCj4gKwlpZiAoIW1v ZHMpDQo+ICAJCXJldHVybiBOVUxMOw0KPiAtCX0NCj4gIA0KPiAtCXJldHVybiBnZXRfbW9kZWwo bm9kZSwgKHVpbnQ4X3QpIGVsZV9pZHgsIG1vZF9pZCwgc3RhdHVzKTsNCj4gKwltb2QgPSBsX3F1 ZXVlX2ZpbmQobW9kcywgbWF0Y2hfbW9kZWxfaWQsIExfVUlOVF9UT19QVFIoaWQpKTsNCj4gKw0K PiArCWlmICghbW9kKQ0KPiArCQlsX2RlYnVnKCJNb2RlbCBub3QgZm91bmQiKTsNCj4gKw0KPiAr CXJldHVybiBtb2Q7DQo+ICB9DQo+ICANCj4gIHN0YXRpYyB1aW50MzJfdCBwdWJfcGVyaW9kX3Rv X21zKHVpbnQ4X3QgcHViX3BlcmlvZCkNCj4gQEAgLTIxMiwxNSArMjA5LDE3IEBAIHN0YXRpYyBz dHJ1Y3QgbF9kYnVzX21lc3NhZ2UgKmNyZWF0ZV9jb25maWdfdXBkYXRlX21zZyhzdHJ1Y3QgbWVz aF9ub2RlICpub2RlLA0KPiAgDQo+ICAJKmJ1aWxkZXIgPSBsX2RidXNfbWVzc2FnZV9idWlsZGVy X25ldyhtc2cpOw0KPiAgDQo+IC0JbW9kZWxfaWQgPSAodWludDE2X3QpIGlkOw0KPiArCW1vZGVs X2lkID0gKHVpbnQxNl90KSBNT0RFTF9JRChpZCk7DQo+ICANCj4gIAlsX2RidXNfbWVzc2FnZV9i dWlsZGVyX2FwcGVuZF9iYXNpYygqYnVpbGRlciwgJ3EnLCAmbW9kZWxfaWQpOw0KPiAgDQo+ICAJ bF9kYnVzX21lc3NhZ2VfYnVpbGRlcl9lbnRlcl9hcnJheSgqYnVpbGRlciwgIntzdn0iKTsNCj4g IA0KPiAtCWlmICgoaWQgJiBWRU5ET1JfSURfTUFTSykgIT0gVkVORE9SX0lEX01BU0spIHsNCj4g LQkJdWludDE2X3QgdmVuZG9yID0gaWQgPj4gMTY7DQo+IC0JCWRidXNfYXBwZW5kX2RpY3RfZW50 cnlfYmFzaWMoKmJ1aWxkZXIsICJWZW5kb3IiLCAicSIsICZ2ZW5kb3IpOw0KPiArCWlmIChJU19W RU5ET1IoaWQpKSB7DQo+ICsJCXVpbnQxNl90IHZlbmRvcl9pZCA9ICh1aW50MTZfdCkgVkVORE9S X0lEKGlkKTsNCj4gKw0KPiArCQlkYnVzX2FwcGVuZF9kaWN0X2VudHJ5X2Jhc2ljKCpidWlsZGVy LCAiVmVuZG9yIiwgInEiLA0KPiArCQkJCQkJCQkmdmVuZG9yX2lkKTsNCj4gIAl9DQo+ICANCj4g IAlyZXR1cm4gbXNnOw0KPiBAQCAtMjY4LDE1ICsyNjcsMTQgQEAgc3RhdGljIHZvaWQgYXBwZW5k X2RpY3RfdWludDE2X2FycmF5KHN0cnVjdCBsX2RidXNfbWVzc2FnZV9idWlsZGVyICpidWlsZGVy LA0KPiAgCWxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfbGVhdmVfZGljdChidWlsZGVyKTsNCj4gIH0N Cj4gIA0KPiAtc3RhdGljIHZvaWQgY29uZmlnX3VwZGF0ZV9tb2RlbF9iaW5kaW5ncyhzdHJ1Y3Qg bWVzaF9ub2RlICpub2RlLA0KPiArc3RhdGljIHZvaWQgY2ZnX3VwZGF0ZV9tb2RfYmluZGluZ3Mo c3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgZWxlX2lkeCwNCj4gIAkJCQkJCQlzdHJ1 Y3QgbWVzaF9tb2RlbCAqbW9kKQ0KPiAgew0KPiAgCXN0cnVjdCBsX2RidXMgKmRidXMgPSBkYnVz X2dldF9idXMoKTsNCj4gIAlzdHJ1Y3QgbF9kYnVzX21lc3NhZ2UgKm1zZzsNCj4gIAlzdHJ1Y3Qg bF9kYnVzX21lc3NhZ2VfYnVpbGRlciAqYnVpbGRlcjsNCj4gIA0KPiAtCW1zZyA9IGNyZWF0ZV9j b25maWdfdXBkYXRlX21zZyhub2RlLCBtb2QtPmVsZV9pZHgsIG1vZC0+aWQsDQo+IC0JCQkJCQkJ CSZidWlsZGVyKTsNCj4gKwltc2cgPSBjcmVhdGVfY29uZmlnX3VwZGF0ZV9tc2cobm9kZSwgZWxl X2lkeCwgbW9kLT5pZCwgJmJ1aWxkZXIpOw0KPiAgCWlmICghbXNnKQ0KPiAgCQlyZXR1cm47DQo+ ICANCj4gQEAgLTMzMSwxNSArMzI5LDE0IEBAIGRvbmU6DQo+ICAJbF9kYnVzX21lc3NhZ2VfYnVp bGRlcl9sZWF2ZV9kaWN0KGJ1aWxkZXIpOw0KPiAgfQ0KPiAgDQo+IC1zdGF0aWMgdm9pZCBjb25m aWdfdXBkYXRlX21vZGVsX3N1YnNjcmlwdGlvbnMoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwNCj4g K3N0YXRpYyB2b2lkIGNmZ191cGRhdGVfbW9kZWxfc3VicyhzdHJ1Y3QgbWVzaF9ub2RlICpub2Rl LCB1aW50MTZfdCBlbGVfaWR4LA0KPiAgCQkJCQkJCXN0cnVjdCBtZXNoX21vZGVsICptb2QpDQo+ ICB7DQo+ICAJc3RydWN0IGxfZGJ1cyAqZGJ1cyA9IGRidXNfZ2V0X2J1cygpOw0KPiAgCXN0cnVj dCBsX2RidXNfbWVzc2FnZSAqbXNnOw0KPiAgCXN0cnVjdCBsX2RidXNfbWVzc2FnZV9idWlsZGVy ICpidWlsZGVyOw0KPiAgDQo+IC0JbXNnID0gY3JlYXRlX2NvbmZpZ191cGRhdGVfbXNnKG5vZGUs IG1vZC0+ZWxlX2lkeCwgbW9kLT5pZCwNCj4gLQkJCQkJCQkJJmJ1aWxkZXIpOw0KPiArCW1zZyA9 IGNyZWF0ZV9jb25maWdfdXBkYXRlX21zZyhub2RlLCBlbGVfaWR4LCBtb2QtPmlkLCAmYnVpbGRl cik7DQo+ICAJaWYgKCFtc2cpDQo+ICAJCXJldHVybjsNCj4gIA0KPiBAQCAtNTcyLDcgKzU2OSw4 IEBAIGRvbmU6DQo+ICAJcmV0dXJuIHJldDsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHZvaWQgcmVt b3ZlX3B1YihzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCBzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kKQ0K PiArc3RhdGljIHZvaWQgcmVtb3ZlX3B1YihzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZf dCBlbGVfaWR4LA0KPiArCQkJCQkJCXN0cnVjdCBtZXNoX21vZGVsICptb2QpDQo+ICB7DQo+ICAJ aWYgKG1vZC0+cHViKSB7DQo+ICAJCWlmIChtb2QtPnB1Yi0+dmlydCkNCj4gQEAgLTU4NCwzMSAr NTgyLDMxIEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9wdWIoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwg c3RydWN0IG1lc2hfbW9kZWwgKm1vZCkNCj4gIA0KPiAgCWlmICghbW9kLT5jYnMpDQo+ICAJCS8q IEV4dGVybmFsIG1vZGVscyAqLw0KPiAtCQljb25maWdfdXBkYXRlX21vZGVsX3B1Yl9wZXJpb2Qo bm9kZSwgbW9kLT5lbGVfaWR4LCBtb2QtPmlkLCAwKTsNCj4gKwkJY29uZmlnX3VwZGF0ZV9tb2Rl bF9wdWJfcGVyaW9kKG5vZGUsIGVsZV9pZHgsIG1vZC0+aWQsIDApOw0KPiAgCWVsc2UgaWYgKG1v ZC0+Y2JzICYmIG1vZC0+Y2JzLT5wdWIpDQo+ICAJCS8qIEludGVybmFsIG1vZGVscyAqLw0KPiAg CQltb2QtPmNicy0+cHViKE5VTEwpOw0KPiAgfQ0KPiAgDQo+IC1zdGF0aWMgdm9pZCBtb2RlbF91 bmJpbmRfaWR4KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHN0cnVjdCBtZXNoX21vZGVsICptb2Qs DQo+IC0JCQkJCQkJCXVpbnQxNl90IGlkeCkNCj4gK3N0YXRpYyB2b2lkIG1vZGVsX3VuYmluZF9p ZHgoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgZWxlX2lkeCwNCj4gKwkJCQkJc3Ry dWN0IG1lc2hfbW9kZWwgKm1vZCwgdWludDE2X3QgaWR4KQ0KPiAgew0KPiAgCWxfcXVldWVfcmVt b3ZlKG1vZC0+YmluZGluZ3MsIExfVUlOVF9UT19QVFIoaWR4KSk7DQo+ICANCj4gIAlpZiAoIW1v ZC0+Y2JzKQ0KPiAgCQkvKiBFeHRlcm5hbCBtb2RlbCAqLw0KPiAtCQljb25maWdfdXBkYXRlX21v ZGVsX2JpbmRpbmdzKG5vZGUsIG1vZCk7DQo+ICsJCWNmZ191cGRhdGVfbW9kX2JpbmRpbmdzKG5v ZGUsIGVsZV9pZHgsIG1vZCk7DQo+ICAJZWxzZSBpZiAobW9kLT5jYnMtPmJpbmQpDQo+ICAJCS8q IEludGVybmFsIG1vZGVsICovDQo+ICAJCW1vZC0+Y2JzLT5iaW5kKGlkeCwgQUNUSU9OX0RFTEVU RSk7DQo+ICANCj4gIAkvKiBSZW1vdmUgbW9kZWwgcHVibGljYXRpb24gaWYgdGhlIHB1YmxpY2F0 aW9uIGtleSBpcyB1bmJvdW5kICovDQo+ICAJaWYgKG1vZC0+cHViICYmIGlkeCA9PSBtb2QtPnB1 Yi0+aWR4KQ0KPiAtCQlyZW1vdmVfcHViKG5vZGUsIG1vZCk7DQo+ICsJCXJlbW92ZV9wdWIobm9k ZSwgZWxlX2lkeCwgbW9kKTsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHZvaWQgbW9kZWxfYmluZF9p ZHgoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgc3RydWN0IG1lc2hfbW9kZWwgKm1vZCwNCj4gLQkJ CQkJCQkJdWludDE2X3QgaWR4KQ0KPiArc3RhdGljIHZvaWQgbW9kZWxfYmluZF9pZHgoc3RydWN0 IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgZWxlX2lkeCwNCj4gKwkJCQkJc3RydWN0IG1lc2hf bW9kZWwgKm1vZCwgdWludDE2X3QgaWR4KQ0KPiAgew0KPiAgCWlmICghbW9kLT5iaW5kaW5ncykN Cj4gIAkJbW9kLT5iaW5kaW5ncyA9IGxfcXVldWVfbmV3KCk7DQo+IEBAIC02MTksNyArNjE3LDcg QEAgc3RhdGljIHZvaWQgbW9kZWxfYmluZF9pZHgoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgc3Ry dWN0IG1lc2hfbW9kZWwgKm1vZCwNCj4gIA0KPiAgCWlmICghbW9kLT5jYnMpDQo+ICAJCS8qIEV4 dGVybmFsIG1vZGVsICovDQo+IC0JCWNvbmZpZ191cGRhdGVfbW9kZWxfYmluZGluZ3Mobm9kZSwg bW9kKTsNCj4gKwkJY2ZnX3VwZGF0ZV9tb2RfYmluZGluZ3Mobm9kZSwgZWxlX2lkeCwgbW9kKTsN Cj4gIAllbHNlIGlmIChtb2QtPmNicy0+YmluZCkNCj4gIAkJLyogSW50ZXJuYWwgbW9kZWwgKi8N Cj4gIAkJbW9kLT5jYnMtPmJpbmQoaWR4LCBBQ1RJT05fQUREKTsNCj4gQEAgLTYyOCwxOSArNjI2 LDE4IEBAIHN0YXRpYyB2b2lkIG1vZGVsX2JpbmRfaWR4KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUs IHN0cnVjdCBtZXNoX21vZGVsICptb2QsDQo+ICBzdGF0aWMgaW50IHVwZGF0ZV9iaW5kaW5nKHN0 cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IGFkZHIsIHVpbnQzMl90IGlkLA0KPiAgCQkJ CQkJdWludDE2X3QgYXBwX2lkeCwgYm9vbCB1bmJpbmQpDQo+ICB7DQo+IC0JaW50IHN0YXR1czsN Cj4gIAlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kOw0KPiAtCWJvb2wgaXNfcHJlc2VudCwgaXNfdmVu ZG9yOw0KPiArCWJvb2wgaXNfcHJlc2VudDsNCj4gKwlpbnQgZWxlX2lkeCA9IG5vZGVfZ2V0X2Vs ZW1lbnRfaWR4KG5vZGUsIGFkZHIpOw0KPiAgDQo+IC0JbW9kID0gZmluZF9tb2RlbChub2RlLCBh ZGRyLCBpZCwgJnN0YXR1cyk7DQo+ICsJaWYgKGVsZV9pZHggPCAwKQ0KPiArCQlyZXR1cm4gTUVT SF9TVEFUVVNfSU5WQUxJRF9BRERSRVNTOw0KPiArDQo+ICsJbW9kID0gZ2V0X21vZGVsKG5vZGUs ICh1aW50OF90KSBlbGVfaWR4LCBpZCk7DQo+ICAJaWYgKCFtb2QpIHsNCj4gLQkJbF9kZWJ1Zygi TW9kZWwgbm90IGZvdW5kIik7DQo+IC0JCXJldHVybiBzdGF0dXM7DQo+ICsJCXJldHVybiBNRVNI X1NUQVRVU19JTlZBTElEX01PREVMOw0KPiAgCX0NCj4gIA0KPiAtCWlzX3ZlbmRvciA9IGlkIDwg VkVORE9SX0lEX01BU0sgJiYgaWQgPiAweGZmZmY7DQo+IC0JaWQgPSAhaXNfdmVuZG9yID8gKGlk ICYgMHhmZmZmKSA6IGlkOw0KPiAtDQo+ICAJaWYgKGlkID09IENPTkZJR19TUlZfTU9ERUwgfHwg aWQgPT0gQ09ORklHX0NMSV9NT0RFTCkNCj4gIAkJcmV0dXJuIE1FU0hfU1RBVFVTX0lOVkFMSURf TU9ERUw7DQo+ICANCj4gQEAgLTY1Niw5ICs2NTMsMTAgQEAgc3RhdGljIGludCB1cGRhdGVfYmlu ZGluZyhzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwN Cj4gIAkJcmV0dXJuIE1FU0hfU1RBVFVTX1NVQ0NFU1M7DQo+ICANCj4gIAlpZiAodW5iaW5kKSB7 DQo+IC0JCW1vZGVsX3VuYmluZF9pZHgobm9kZSwgbW9kLCBhcHBfaWR4KTsNCj4gKwkJbW9kZWxf dW5iaW5kX2lkeChub2RlLCBlbGVfaWR4LCBtb2QsIGFwcF9pZHgpOw0KPiAgCQlpZiAoIW1lc2hf Y29uZmlnX21vZGVsX2JpbmRpbmdfZGVsKG5vZGVfY29uZmlnX2dldChub2RlKSwNCj4gLQkJCQkJ YWRkciwgaXNfdmVuZG9yLCBpZCwgYXBwX2lkeCkpDQo+ICsJCQkJCQkJYWRkciwgSVNfVkVORE9S KGlkKSwNCj4gKwkJCQkJCQlpZCwgYXBwX2lkeCkpDQo+ICAJCQlyZXR1cm4gTUVTSF9TVEFUVVNf U1RPUkFHRV9GQUlMOw0KPiAgDQo+ICAJCWxfZGVidWcoIlVuYmluZCBrZXkgJTQuNHggdG8gbW9k ZWwgJTguOHgiLCBhcHBfaWR4LCBtb2QtPmlkKTsNCj4gQEAgLTY2OCwxMSArNjY2LDExIEBAIHN0 YXRpYyBpbnQgdXBkYXRlX2JpbmRpbmcoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3Qg YWRkciwgdWludDMyX3QgaWQsDQo+ICAJaWYgKGxfcXVldWVfbGVuZ3RoKG1vZC0+YmluZGluZ3Mp ID49IE1BWF9CSU5ESU5HUykNCj4gIAkJcmV0dXJuIE1FU0hfU1RBVFVTX0lOU1VGRl9SRVNPVVJD RVM7DQo+ICANCj4gLQlpZiAoIW1lc2hfY29uZmlnX21vZGVsX2JpbmRpbmdfYWRkKG5vZGVfY29u ZmlnX2dldChub2RlKSwNCj4gLQkJCQkJYWRkciwgaXNfdmVuZG9yLCBpZCwgYXBwX2lkeCkpDQo+ ICsJaWYgKCFtZXNoX2NvbmZpZ19tb2RlbF9iaW5kaW5nX2FkZChub2RlX2NvbmZpZ19nZXQobm9k ZSksIGFkZHIsDQo+ICsJCQkJCQlJU19WRU5ET1IoaWQpLCBpZCwgYXBwX2lkeCkpDQo+ICAJCXJl dHVybiBNRVNIX1NUQVRVU19TVE9SQUdFX0ZBSUw7DQo+ICANCj4gLQltb2RlbF9iaW5kX2lkeChu b2RlLCBtb2QsIGFwcF9pZHgpOw0KPiArCW1vZGVsX2JpbmRfaWR4KG5vZGUsIGVsZV9pZHgsIG1v ZCwgYXBwX2lkeCk7DQo+ICANCj4gIAlyZXR1cm4gTUVTSF9TVEFUVVNfU1VDQ0VTUzsNCj4gIA0K PiBAQCAtOTY0LDcgKzk2Miw2IEBAIGJvb2wgbWVzaF9tb2RlbF9yeChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCBib29sIHN6bWljdCwgdWludDMyX3Qgc2VxMCwNCj4gIA0KPiAgCWlzX3N1YnNjcmlw dGlvbiA9ICEoSVNfVU5JQ0FTVChkc3QpKTsNCj4gIA0KPiAtDQo+ICAJZm9yIChpID0gMDsgaSA8 IG51bV9lbGU7IGkrKykgew0KPiAgCQlzdHJ1Y3QgbF9xdWV1ZSAqbW9kZWxzOw0KPiAgDQo+IEBA IC05NzQsNyArOTcxLDcgQEAgYm9vbCBtZXNoX21vZGVsX3J4KHN0cnVjdCBtZXNoX25vZGUgKm5v ZGUsIGJvb2wgc3ptaWN0LCB1aW50MzJfdCBzZXEwLA0KPiAgCQlmb3J3YXJkLnVuaWNhc3QgPSBh ZGRyICsgaTsNCj4gIAkJZm9yd2FyZC5oYXNfZHN0ID0gZmFsc2U7DQo+ICANCj4gLQkJbW9kZWxz ID0gbm9kZV9nZXRfZWxlbWVudF9tb2RlbHMobm9kZSwgaSwgTlVMTCk7DQo+ICsJCW1vZGVscyA9 IG5vZGVfZ2V0X2VsZW1lbnRfbW9kZWxzKG5vZGUsIGkpOw0KPiAgDQo+ICAJCS8qIEludGVybmFs IG1vZGVscyAqLw0KPiAgCQlsX3F1ZXVlX2ZvcmVhY2gobW9kZWxzLCBmb3J3YXJkX21vZGVsLCAm Zm9yd2FyZCk7DQo+IEBAIC0xMDIzLDE2ICsxMDIwLDE1IEBAIGRvbmU6DQo+ICAJcmV0dXJuIHJl c3VsdDsNCj4gIH0NCj4gIA0KPiAtaW50IG1lc2hfbW9kZWxfcHVibGlzaChzdHJ1Y3QgbWVzaF9u b2RlICpub2RlLCB1aW50MzJfdCBtb2RfaWQsDQo+IC0JCQkJdWludDE2X3Qgc3JjLCB1aW50OF90 IHR0bCwNCj4gLQkJCQljb25zdCB2b2lkICptc2csIHVpbnQxNl90IG1zZ19sZW4pDQo+ICtpbnQg bWVzaF9tb2RlbF9wdWJsaXNoKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQzMl90IGlkLCB1 aW50MTZfdCBzcmMsDQo+ICsJCQkJdWludDhfdCB0dGwsIGNvbnN0IHZvaWQgKm1zZywgdWludDE2 X3QgbXNnX2xlbikNCj4gIHsNCj4gIAlzdHJ1Y3QgbWVzaF9uZXQgKm5ldCA9IG5vZGVfZ2V0X25l dChub2RlKTsNCj4gIAlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kOw0KPiAgCXVpbnQ4X3QgKmxhYmVs ID0gTlVMTDsNCj4gIAl1aW50MTZfdCBuZXRfaWR4Ow0KPiAgCWJvb2wgcmVzdWx0Ow0KPiAtCWlu dCBzdGF0dXM7DQo+ICsJaW50IGVsZV9pZHg7DQo+ICANCj4gIAlpZiAoIW5ldCB8fCBtc2dfbGVu ID4gMzgwKQ0KPiAgCQlyZXR1cm4gTUVTSF9FUlJPUl9JTlZBTElEX0FSR1M7DQo+IEBAIC0xMDQx LDE0ICsxMDM3LDE2IEBAIGludCBtZXNoX21vZGVsX3B1Ymxpc2goc3RydWN0IG1lc2hfbm9kZSAq bm9kZSwgdWludDMyX3QgbW9kX2lkLA0KPiAgCWlmIChzcmMgPT0gMCkNCj4gIAkJc3JjID0gbWVz aF9uZXRfZ2V0X2FkZHJlc3MobmV0KTsNCj4gIA0KPiAtCW1vZCA9IGZpbmRfbW9kZWwobm9kZSwg c3JjLCBtb2RfaWQsICZzdGF0dXMpOw0KPiAtCWlmICghbW9kKSB7DQo+IC0JCWxfZGVidWcoIm1v ZGVsICV4IG5vdCBmb3VuZCIsIG1vZF9pZCk7DQo+ICsJZWxlX2lkeCA9IG5vZGVfZ2V0X2VsZW1l bnRfaWR4KG5vZGUsIHNyYyk7DQo+ICsJaWYgKGVsZV9pZHggPCAwKQ0KPiArCQlyZXR1cm4gTUVT SF9FUlJPUl9OT1RfRk9VTkQ7DQo+ICsNCj4gKwltb2QgPSBnZXRfbW9kZWwobm9kZSwgKHVpbnQ4 X3QpIGVsZV9pZHgsIGlkKTsNCj4gKwlpZiAoIW1vZCkNCj4gIAkJcmV0dXJuIE1FU0hfRVJST1Jf Tk9UX0ZPVU5EOw0KPiAtCX0NCj4gIA0KPiAgCWlmICghbW9kLT5wdWIpIHsNCj4gLQkJbF9kZWJ1 ZygicHVibGljYXRpb24gZG9lc24ndCBleGlzdCAobW9kZWwgJXgpIiwgbW9kX2lkKTsNCj4gKwkJ bF9kZWJ1ZygicHVibGljYXRpb24gZG9lc24ndCBleGlzdCAobW9kZWwgJXgpIiwgaWQpOw0KPiAg CQlyZXR1cm4gTUVTSF9FUlJPUl9ET0VTX05PVF9FWElTVDsNCj4gIAl9DQo+ICANCj4gQEAgLTEw OTMsMTEgKzEwOTEsMTQgQEAgaW50IG1lc2hfbW9kZWxfcHViX3NldChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwNCj4gIAkJCWJvb2wgaXNfdmlydCwg dWludDE2X3QgKmRzdCkNCj4gIHsNCj4gIAlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kOw0KPiAtCWlu dCBzdGF0dXM7DQo+ICsJaW50IHN0YXR1cywgZWxlX2lkeCA9IG5vZGVfZ2V0X2VsZW1lbnRfaWR4 KG5vZGUsIGFkZHIpOw0KPiAgDQo+IC0JbW9kID0gZmluZF9tb2RlbChub2RlLCBhZGRyLCBpZCwg JnN0YXR1cyk7DQo+ICsJaWYgKGVsZV9pZHggPCAwKQ0KPiArCQlyZXR1cm4gTUVTSF9TVEFUVVNf SU5WQUxJRF9BRERSRVNTOw0KPiArDQo+ICsJbW9kID0gZ2V0X21vZGVsKG5vZGUsICh1aW50OF90 KSBlbGVfaWR4LCBpZCk7DQo+ICAJaWYgKCFtb2QpDQo+IC0JCXJldHVybiBzdGF0dXM7DQo+ICsJ CXJldHVybiBNRVNIX1NUQVRVU19JTlZBTElEX01PREVMOw0KPiAgDQo+ICAJaWYgKCFtb2QtPnB1 Yl9lbmFibGVkIHx8IChtb2QtPmNicyAmJiAhKG1vZC0+Y2JzLT5wdWIpKSkNCj4gIAkJcmV0dXJu IE1FU0hfU1RBVFVTX0lOVkFMSURfUFVCX1BBUkFNOw0KPiBAQCAtMTExMCw3ICsxMTExLDcgQEAg aW50IG1lc2hfbW9kZWxfcHViX3NldChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBh ZGRyLCB1aW50MzJfdCBpZCwNCj4gIAkgKiByZW1vdmUgdGhlIHB1YmxpY2F0aW9uDQo+ICAJICov DQo+ICAJaWYgKCFpc192aXJ0ICYmIElTX1VOQVNTSUdORUQobF9nZXRfbGUxNihwdWJfYWRkcikp KSB7DQo+IC0JCXJlbW92ZV9wdWIobm9kZSwgbW9kKTsNCj4gKwkJcmVtb3ZlX3B1Yihub2RlLCBl bGVfaWR4LCBtb2QpOw0KPiAgCQlyZXR1cm4gTUVTSF9TVEFUVVNfU1VDQ0VTUzsNCj4gIAl9DQo+ ICANCj4gQEAgLTExMzQsNyArMTEzNSw3IEBAIGludCBtZXNoX21vZGVsX3B1Yl9zZXQoc3RydWN0 IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwgdWludDMyX3QgaWQsDQo+ICANCj4gIAlp ZiAoIW1vZC0+Y2JzKQ0KPiAgCQkvKiBFeHRlcm5hbCBtb2RlbCAqLw0KPiAtCQljb25maWdfdXBk YXRlX21vZGVsX3B1Yl9wZXJpb2Qobm9kZSwgbW9kLT5lbGVfaWR4LCBpZCwNCj4gKwkJY29uZmln X3VwZGF0ZV9tb2RlbF9wdWJfcGVyaW9kKG5vZGUsIGVsZV9pZHgsIGlkLA0KPiAgCQkJCQkJcHVi X3BlcmlvZF90b19tcyhwZXJpb2QpKTsNCj4gIAllbHNlIHsNCj4gIAkJLyogSW50ZXJuYWwgbW9k ZWwsIGNhbGwgcmVnaXN0ZXJlZCBjYWxsYmFja3MgKi8NCj4gQEAgLTExNDksMTAgKzExNTAsMTgg QEAgc3RydWN0IG1lc2hfbW9kZWxfcHViICptZXNoX21vZGVsX3B1Yl9nZXQoc3RydWN0IG1lc2hf bm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwNCj4gIAkJCQkJCXVpbnQzMl90IG1vZF9pZCwgaW50 ICpzdGF0dXMpDQo+ICB7DQo+ICAJc3RydWN0IG1lc2hfbW9kZWwgKm1vZDsNCj4gKwlpbnQgZWxl X2lkeCA9IG5vZGVfZ2V0X2VsZW1lbnRfaWR4KG5vZGUsIGFkZHIpOw0KPiAgDQo+IC0JbW9kID0g ZmluZF9tb2RlbChub2RlLCBhZGRyLCBtb2RfaWQsIHN0YXR1cyk7DQo+IC0JaWYgKCFtb2QpDQo+ ICsJaWYgKGVsZV9pZHggPCAwKSB7DQo+ICsJCSpzdGF0dXMgPSBNRVNIX1NUQVRVU19JTlZBTElE X0FERFJFU1M7DQo+ICsJCXJldHVybiBOVUxMOw0KPiArCX0NCj4gKw0KPiArCW1vZCA9IGdldF9t b2RlbChub2RlLCAodWludDhfdCkgZWxlX2lkeCwgbW9kX2lkKTsNCj4gKwlpZiAoIW1vZCkgew0K PiArCQkqc3RhdHVzID0gTUVTSF9TVEFUVVNfSU5WQUxJRF9NT0RFTDsNCj4gIAkJcmV0dXJuIE5V TEw7DQo+ICsJfQ0KPiAgDQo+ICAJaWYgKCFtb2QtPnB1Yl9lbmFibGVkIHx8IChtb2QtPmNicyAm JiAhKG1vZC0+Y2JzLT5wdWIpKSkNCj4gIAkJKnN0YXR1cyA9IE1FU0hfU1RBVFVTX0lOVkFMSURf UFVCX1BBUkFNOw0KPiBAQCAtMTE3MywxMiArMTE4MiwyNSBAQCB2b2lkIG1lc2hfbW9kZWxfZnJl ZSh2b2lkICpkYXRhKQ0KPiAgCWxfZnJlZShtb2QpOw0KPiAgfQ0KPiAgDQo+IC1zdHJ1Y3QgbWVz aF9tb2RlbCAqbWVzaF9tb2RlbF9uZXcodWludDhfdCBlbGVfaWR4LCB1aW50MzJfdCBpZCkNCj4g K3N0YXRpYyB2b2lkIHJlbW92ZV9zdWJzKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHN0cnVjdCBt ZXNoX21vZGVsICptb2QpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IGxfcXVldWVfZW50cnkgKmVu dHJ5Ow0KPiArCXN0cnVjdCBtZXNoX25ldCAqbmV0ID0gbm9kZV9nZXRfbmV0KG5vZGUpOw0KPiAr DQo+ICsJZW50cnkgPSBsX3F1ZXVlX2dldF9lbnRyaWVzKG1vZC0+c3Vicyk7DQo+ICsNCj4gKwlm b3IgKDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpDQo+ICsJCW1lc2hfbmV0X2RzdF91bnJl ZyhuZXQsICh1aW50MTZfdCkgTF9QVFJfVE9fVUlOVChlbnRyeS0+ZGF0YSkpOw0KPiArDQo+ICsJ bF9xdWV1ZV9jbGVhcihtb2QtPnN1YnMsIE5VTEwpOw0KPiArCWxfcXVldWVfY2xlYXIobW9kLT52 aXJ0dWFscywgdW5yZWZfdmlydCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgbWVzaF9t b2RlbCAqbW9kZWxfbmV3KHVpbnQzMl90IGlkKQ0KPiAgew0KPiAgCXN0cnVjdCBtZXNoX21vZGVs ICptb2QgPSBsX25ldyhzdHJ1Y3QgbWVzaF9tb2RlbCwgMSk7DQo+ICANCj4gIAltb2QtPmlkID0g aWQ7DQo+IC0JbW9kLT5lbGVfaWR4ID0gZWxlX2lkeDsNCj4gIAltb2QtPnZpcnR1YWxzID0gbF9x dWV1ZV9uZXcoKTsNCj4gIA0KPiAgCS8qDQo+IEBAIC0xMTkwLDYgKzEyMTIsNzUgQEAgc3RydWN0 IG1lc2hfbW9kZWwgKm1lc2hfbW9kZWxfbmV3KHVpbnQ4X3QgZWxlX2lkeCwgdWludDMyX3QgaWQp DQo+ICAJcmV0dXJuIG1vZDsNCj4gIH0NCj4gIA0KPiArc3RhdGljIHZvaWQgbW9kZWxfZW5hYmxl X3B1YihzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kLCBib29sIGVuYWJsZSkNCj4gK3sNCj4gKwltb2Qt PnB1Yl9lbmFibGVkID0gZW5hYmxlOw0KPiArDQo+ICsJaWYgKCFtb2QtPnB1Yl9lbmFibGVkICYm IG1vZC0+cHViKSB7DQo+ICsJCWlmIChtb2QtPnB1Yi0+dmlydCkNCj4gKwkJCXVucmVmX3ZpcnQo bW9kLT5wdWItPnZpcnQpOw0KPiArDQo+ICsJCWxfZnJlZShtb2QtPnB1Yik7DQo+ICsJCW1vZC0+ cHViID0gTlVMTDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG1vZGVsX2VuYWJs ZV9zdWIoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgc3RydWN0IG1lc2hfbW9kZWwgKm1vZCwNCj4g KwkJCQkJCQkJYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsJbW9kLT5zdWJfZW5hYmxlZCA9IGVuYWJs ZTsNCj4gKw0KPiArCWlmICghbW9kLT5zdWJfZW5hYmxlZCkNCj4gKwkJcmVtb3ZlX3N1YnMobm9k ZSwgbW9kKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgZ2V0X21vZGVsX29wdGlvbnMoc3Ry dWN0IG1lc2hfbW9kZWwgKm1vZCwNCj4gKwkJCQkJc3RydWN0IGxfZGJ1c19tZXNzYWdlX2l0ZXIg Km9wdHMpDQo+ICt7DQo+ICsJY29uc3QgY2hhciAqa2V5Ow0KPiArCXN0cnVjdCBsX2RidXNfbWVz c2FnZV9pdGVyIHZhcjsNCj4gKwlib29sIG9wdDsNCj4gKw0KPiArCXdoaWxlIChsX2RidXNfbWVz c2FnZV9pdGVyX25leHRfZW50cnkob3B0cywgJmtleSwgJnZhcikpIHsNCj4gKw0KPiArCQlpZiAo IXN0cmNtcChrZXksICJQdWJsaXNoIikpIHsNCj4gKwkJCWlmICghbF9kYnVzX21lc3NhZ2VfaXRl cl9nZXRfdmFyaWFudCgmdmFyLCAiYiIsICZvcHQpKQ0KPiArCQkJCXJldHVybiBmYWxzZTsNCj4g Kw0KPiArCQkJbW9kLT5wdWJfZW5hYmxlZCA9IG9wdDsNCj4gKwkJfSBlbHNlIGlmICghc3RyY21w KGtleSwgIlN1YnNjcmliZSIpKSB7DQo+ICsJCQlpZiAoIWxfZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0 X3ZhcmlhbnQoJnZhciwgImIiLCAmb3B0KSkNCj4gKwkJCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4g KwkJCW1vZC0+c3ViX2VuYWJsZWQgPSBvcHQ7DQo+ICsJCX0gZWxzZQ0KPiArCQkJcmV0dXJuIGZh bHNlOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICtib29sIG1l c2hfbW9kZWxfYWRkKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHN0cnVjdCBsX3F1ZXVlICptb2Rz LA0KPiArCQkJdWludDMyX3QgaWQsIHN0cnVjdCBsX2RidXNfbWVzc2FnZV9pdGVyICpvcHRzKQ0K PiArew0KPiArCXN0cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+ICsNCj4gKwkvKiBEaXNhbGxvdyBk dXBsaWNhdGVzICovDQo+ICsJbW9kID0gbF9xdWV1ZV9maW5kKG1vZHMsIG1hdGNoX21vZGVsX2lk LCBMX1VJTlRfVE9fUFRSKGlkKSk7DQo+ICsJaWYgKG1vZCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0K PiArDQo+ICsJbW9kID0gbW9kZWxfbmV3KGlkKTsNCj4gKw0KPiArCWlmIChvcHRzICYmICFnZXRf bW9kZWxfb3B0aW9ucyhtb2QsIG9wdHMpKSB7DQo+ICsJCW1lc2hfbW9kZWxfZnJlZShtb2QpOw0K PiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJbF9xdWV1ZV9pbnNlcnQobW9kcywg bW9kLCBjb21wYXJlX21vZGVsX2lkLCBOVUxMKTsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4g Kw0KPiAgLyogSW50ZXJuYWwgbW9kZWxzIG9ubHkgKi8NCj4gIHN0YXRpYyB2b2lkIHJlc3RvcmVf bW9kZWxfc3RhdGUoc3RydWN0IG1lc2hfbW9kZWwgKm1vZCkNCj4gIHsNCj4gQEAgLTEyMTMsMjYg KzEzMDQsMTYgQEAgc3RhdGljIHZvaWQgcmVzdG9yZV9tb2RlbF9zdGF0ZShzdHJ1Y3QgbWVzaF9t b2RlbCAqbW9kKQ0KPiAgDQo+ICB9DQo+ICANCj4gLXVpbnQzMl90IG1lc2hfbW9kZWxfZ2V0X21v ZGVsX2lkKGNvbnN0IHN0cnVjdCBtZXNoX21vZGVsICptb2RlbCkNCj4gLXsNCj4gLQlyZXR1cm4g bW9kZWwtPmlkOw0KPiAtfQ0KPiAtDQo+ICAvKiBUaGlzIHJlZ2lzdGVycyBhbiBpbnRlcm5hbCBt b2RlbCwgaS5lLiBpbXBsZW1lbnRlZCB3aXRoaW4gbWVzaGQgKi8NCj4gLWJvb2wgbWVzaF9tb2Rl bF9yZWdpc3RlcihzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IGVsZV9pZHgsDQo+IC0J CQkJCXVpbnQzMl90IG1vZF9pZCwNCj4gK2Jvb2wgbWVzaF9tb2RlbF9yZWdpc3RlcihzdHJ1Y3Qg bWVzaF9ub2RlICpub2RlLCB1aW50OF90IGVsZV9pZHgsIHVpbnQzMl90IGlkLA0KPiAgCQkJCQlj b25zdCBzdHJ1Y3QgbWVzaF9tb2RlbF9vcHMgKmNicywNCj4gIAkJCQkJdm9pZCAqdXNlcl9kYXRh KQ0KPiAgew0KPiAgCXN0cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+IC0JaW50IHN0YXR1czsNCj4g LQ0KPiAtCS8qIEludGVybmFsIG1vZGVscyBhcmUgYWx3YXlzIFNJRyBtb2RlbHMgKi8NCj4gLQlt b2RfaWQgPSBWRU5ET1JfSURfTUFTSyB8IG1vZF9pZDsNCj4gIA0KPiAtCW1vZCA9IGdldF9tb2Rl bChub2RlLCBlbGVfaWR4LCBtb2RfaWQsICZzdGF0dXMpOw0KPiArCW1vZCA9IGdldF9tb2RlbChu b2RlLCBlbGVfaWR4LCBpZCk7DQo+ICAJaWYgKCFtb2QpDQo+IC0JCXJldHVybiBmYWxzZTsNCj4g KwkJcmV0dXJuIE1FU0hfU1RBVFVTX0lOVkFMSURfTU9ERUw7DQo+ICANCj4gIAltb2QtPmNicyA9 IGNiczsNCj4gIAltb2QtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsNCj4gQEAgLTEyNDIsMTUgKzEz MjMsMTUgQEAgYm9vbCBtZXNoX21vZGVsX3JlZ2lzdGVyKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUs IHVpbnQ4X3QgZWxlX2lkeCwNCj4gIAlyZXR1cm4gdHJ1ZTsNCj4gIH0NCj4gIA0KPiAtdm9pZCBt ZXNoX21vZGVsX2FwcF9rZXlfZGVsZXRlKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHN0cnVjdCBs X3F1ZXVlICptb2RlbHMsDQo+IC0JCQkJCQkJdWludDE2X3QgYXBwX2lkeCkNCj4gK3ZvaWQgbWVz aF9tb2RlbF9hcHBfa2V5X2RlbGV0ZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBl bGVfaWR4LA0KPiArCQkJCXN0cnVjdCBsX3F1ZXVlICptb2RlbHMsIHVpbnQxNl90IGFwcF9pZHgp DQo+ICB7DQo+ICAJY29uc3Qgc3RydWN0IGxfcXVldWVfZW50cnkgKmVudHJ5ID0gbF9xdWV1ZV9n ZXRfZW50cmllcyhtb2RlbHMpOw0KPiAgDQo+ICAJZm9yICg7IGVudHJ5OyBlbnRyeSA9IGVudHJ5 LT5uZXh0KSB7DQo+IC0JCXN0cnVjdCBtZXNoX21vZGVsICptb2RlbCA9IGVudHJ5LT5kYXRhOw0K PiArCQlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kID0gZW50cnktPmRhdGE7DQo+ICANCj4gLQkJbW9k ZWxfdW5iaW5kX2lkeChub2RlLCBtb2RlbCwgYXBwX2lkeCk7DQo+ICsJCW1vZGVsX3VuYmluZF9p ZHgobm9kZSwgZWxlX2lkeCwgbW9kLCBhcHBfaWR4KTsNCj4gIAl9DQo+ICB9DQo+ICANCj4gQEAg LTEyNjksMTggKzEzNTAsMjAgQEAgaW50IG1lc2hfbW9kZWxfYmluZGluZ19hZGQoc3RydWN0IG1l c2hfbm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwgdWludDMyX3QgaWQsDQo+ICBpbnQgbWVzaF9t b2RlbF9nZXRfYmluZGluZ3Moc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwg dWludDMyX3QgaWQsDQo+ICAJCQkJdWludDhfdCAqYnVmLCB1aW50MTZfdCBidWZfc2l6ZSwgdWlu dDE2X3QgKnNpemUpDQo+ICB7DQo+IC0JaW50IHN0YXR1czsNCj4gIAlzdHJ1Y3QgbWVzaF9tb2Rl bCAqbW9kOw0KPiAgCWNvbnN0IHN0cnVjdCBsX3F1ZXVlX2VudHJ5ICplbnRyeTsNCj4gIAl1aW50 MTZfdCBuOw0KPiAgCXVpbnQzMl90IGlkeF9wYWlyOw0KPiAtCWludCBpOw0KPiArCWludCBpLCBl bGVfaWR4ID0gbm9kZV9nZXRfZWxlbWVudF9pZHgobm9kZSwgYWRkcik7DQo+ICsNCj4gKwlpZiAo ZWxlX2lkeCA8IDApDQo+ICsJCXJldHVybiBNRVNIX1NUQVRVU19JTlZBTElEX0FERFJFU1M7DQo+ ICANCj4gLQltb2QgPSBmaW5kX21vZGVsKG5vZGUsIGFkZHIsIGlkLCAmc3RhdHVzKTsNCj4gKwlt b2QgPSBnZXRfbW9kZWwobm9kZSwgKHVpbnQ4X3QpIGVsZV9pZHgsIGlkKTsNCj4gIA0KPiAgCWlm ICghbW9kKSB7DQo+ICAJCSpzaXplID0gMDsNCj4gLQkJcmV0dXJuIHN0YXR1czsNCj4gKwkJcmV0 dXJuIE1FU0hfU1RBVFVTX0lOVkFMSURfTU9ERUw7DQo+ICAJfQ0KPiAgDQo+ICAJZW50cnkgPSBs X3F1ZXVlX2dldF9lbnRyaWVzKG1vZC0+YmluZGluZ3MpOw0KPiBAQCAtMTMyNSwxNCArMTQwOCwx NyBAQCBkb25lOg0KPiAgaW50IG1lc2hfbW9kZWxfc3ViX2dldChzdHJ1Y3QgbWVzaF9ub2RlICpu b2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwNCj4gIAkJCXVpbnQ4X3QgKmJ1ZiwgdWlu dDE2X3QgYnVmX3NpemUsIHVpbnQxNl90ICpzaXplKQ0KPiAgew0KPiAtCWludCBzdGF0dXM7DQo+ ICAJaW50MTZfdCBuOw0KPiAgCXN0cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+ICAJY29uc3Qgc3Ry dWN0IGxfcXVldWVfZW50cnkgKmVudHJ5Ow0KPiArCWludCBlbGVfaWR4ID0gbm9kZV9nZXRfZWxl bWVudF9pZHgobm9kZSwgYWRkcik7DQo+ICANCj4gLQltb2QgPSBmaW5kX21vZGVsKG5vZGUsIGFk ZHIsIGlkLCAmc3RhdHVzKTsNCj4gKwlpZiAoZWxlX2lkeCA8IDApDQo+ICsJCXJldHVybiBNRVNI X1NUQVRVU19JTlZBTElEX0FERFJFU1M7DQo+ICsNCj4gKwltb2QgPSBnZXRfbW9kZWwobm9kZSwg KHVpbnQ4X3QpIGVsZV9pZHgsIGlkKTsNCj4gIAlpZiAoIW1vZCkNCj4gLQkJcmV0dXJuIHN0YXR1 czsNCj4gKwkJcmV0dXJuIE1FU0hfU1RBVFVTX0lOVkFMSURfTU9ERUw7DQo+ICANCj4gIAlpZiAo IW1vZC0+c3ViX2VuYWJsZWQgfHwgKG1vZC0+Y2JzICYmICEobW9kLT5jYnMtPnN1YikpKQ0KPiAg CQlyZXR1cm4gTUVTSF9TVEFUVVNfTk9UX1NVQl9NT0Q7DQo+IEBAIC0xMzcwLDEyICsxNDU2LDE1 IEBAIGludCBtZXNoX21vZGVsX3N1Yl9nZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2 X3QgYWRkciwgdWludDMyX3QgaWQsDQo+ICBpbnQgbWVzaF9tb2RlbF9zdWJfYWRkKHN0cnVjdCBt ZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IGFkZHIsIHVpbnQzMl90IGlkLA0KPiAgCQkJY29uc3Qg dWludDhfdCAqZ3JvdXAsIGJvb2wgaXNfdmlydCwgdWludDE2X3QgKmRzdCkNCj4gIHsNCj4gLQlp bnQgc3RhdHVzOw0KPiAgCXN0cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+ICsJaW50IHN0YXR1cywg ZWxlX2lkeCA9IG5vZGVfZ2V0X2VsZW1lbnRfaWR4KG5vZGUsIGFkZHIpOw0KPiArDQo+ICsJaWYg KGVsZV9pZHggPCAwKQ0KPiArCQlyZXR1cm4gTUVTSF9TVEFUVVNfSU5WQUxJRF9BRERSRVNTOw0K PiAgDQo+IC0JbW9kID0gZmluZF9tb2RlbChub2RlLCBhZGRyLCBpZCwgJnN0YXR1cyk7DQo+ICsJ bW9kID0gZ2V0X21vZGVsKG5vZGUsICh1aW50OF90KSBlbGVfaWR4LCBpZCk7DQo+ICAJaWYgKCFt b2QpDQo+IC0JCXJldHVybiBzdGF0dXM7DQo+ICsJCXJldHVybiBNRVNIX1NUQVRVU19JTlZBTElE X01PREVMOw0KPiAgDQo+ICAJaWYgKCFtb2QtPnN1Yl9lbmFibGVkIHx8IChtb2QtPmNicyAmJiAh KG1vZC0+Y2JzLT5zdWIpKSkNCj4gIAkJcmV0dXJuIE1FU0hfU1RBVFVTX05PVF9TVUJfTU9EOw0K PiBAQCAtMTM4Nyw3ICsxNDc2LDcgQEAgaW50IG1lc2hfbW9kZWxfc3ViX2FkZChzdHJ1Y3QgbWVz aF9ub2RlICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwNCj4gIA0KPiAgCWlmICgh bW9kLT5jYnMpDQo+ICAJCS8qIEV4dGVybmFsIG1vZGVscyAqLw0KPiAtCQljb25maWdfdXBkYXRl X21vZGVsX3N1YnNjcmlwdGlvbnMobm9kZSwgbW9kKTsNCj4gKwkJY2ZnX3VwZGF0ZV9tb2RlbF9z dWJzKG5vZGUsIGVsZV9pZHgsIG1vZCk7DQo+ICANCj4gIAlyZXR1cm4gTUVTSF9TVEFUVVNfU1VD Q0VTUzsNCj4gIH0NCj4gQEAgLTEzOTUsMTMgKzE0ODQsMTYgQEAgaW50IG1lc2hfbW9kZWxfc3Vi X2FkZChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwN Cj4gIGludCBtZXNoX21vZGVsX3N1Yl9vdnIoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2 X3QgYWRkciwgdWludDMyX3QgaWQsDQo+ICAJCQljb25zdCB1aW50OF90ICpncm91cCwgYm9vbCBp c192aXJ0LCB1aW50MTZfdCAqZHN0KQ0KPiAgew0KPiAtCWludCBzdGF0dXM7DQo+ICAJc3RydWN0 IGxfcXVldWUgKnZpcnR1YWxzLCAqc3ViczsNCj4gIAlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kOw0K PiArCWludCBzdGF0dXMsIGVsZV9pZHggPSBub2RlX2dldF9lbGVtZW50X2lkeChub2RlLCBhZGRy KTsNCj4gKw0KPiArCWlmIChlbGVfaWR4IDwgMCkNCj4gKwkJcmV0dXJuIE1FU0hfU1RBVFVTX0lO VkFMSURfQUREUkVTUzsNCj4gIA0KPiAtCW1vZCA9IGZpbmRfbW9kZWwobm9kZSwgYWRkciwgaWQs ICZzdGF0dXMpOw0KPiArCW1vZCA9IGdldF9tb2RlbChub2RlLCAodWludDhfdCkgZWxlX2lkeCwg aWQpOw0KPiAgCWlmICghbW9kKQ0KPiAtCQlyZXR1cm4gc3RhdHVzOw0KPiArCQlyZXR1cm4gTUVT SF9TVEFUVVNfSU5WQUxJRF9NT0RFTDsNCj4gIA0KPiAgCWlmICghbW9kLT5zdWJfZW5hYmxlZCB8 fCAobW9kLT5jYnMgJiYgIShtb2QtPmNicy0+c3ViKSkpDQo+ICAJCXJldHVybiBNRVNIX1NUQVRV U19OT1RfU1VCX01PRDsNCj4gQEAgLTE0MzksNyArMTUzMSw3IEBAIGludCBtZXNoX21vZGVsX3N1 Yl9vdnIoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwgdWludDMyX3QgaWQs DQo+ICANCj4gIAlpZiAoIW1vZC0+Y2JzKQ0KPiAgCQkvKiBFeHRlcm5hbCBtb2RlbHMgKi8NCj4g LQkJY29uZmlnX3VwZGF0ZV9tb2RlbF9zdWJzY3JpcHRpb25zKG5vZGUsIG1vZCk7DQo+ICsJCWNm Z191cGRhdGVfbW9kZWxfc3Vicyhub2RlLCBlbGVfaWR4LCBtb2QpOw0KPiAgDQo+ICAJcmV0dXJu IHN0YXR1czsNCj4gIH0NCj4gQEAgLTE0NDcsMTMgKzE1MzksMTYgQEAgaW50IG1lc2hfbW9kZWxf c3ViX292cihzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBp ZCwNCj4gIGludCBtZXNoX21vZGVsX3N1Yl9kZWwoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWlu dDE2X3QgYWRkciwgdWludDMyX3QgaWQsDQo+ICAJCQljb25zdCB1aW50OF90ICpncm91cCwgYm9v bCBpc192aXJ0LCB1aW50MTZfdCAqZHN0KQ0KPiAgew0KPiAtCWludCBzdGF0dXM7DQo+ICAJdWlu dDE2X3QgZ3JwOw0KPiAgCXN0cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+ICsJaW50IGVsZV9pZHgg PSBub2RlX2dldF9lbGVtZW50X2lkeChub2RlLCBhZGRyKTsNCj4gIA0KPiAtCW1vZCA9IGZpbmRf bW9kZWwobm9kZSwgYWRkciwgaWQsICZzdGF0dXMpOw0KPiArCWlmIChlbGVfaWR4IDwgMCkNCj4g KwkJcmV0dXJuIE1FU0hfU1RBVFVTX0lOVkFMSURfQUREUkVTUzsNCj4gKw0KPiArCW1vZCA9IGdl dF9tb2RlbChub2RlLCAodWludDhfdCkgZWxlX2lkeCwgaWQpOw0KPiAgCWlmICghbW9kKQ0KPiAt CQlyZXR1cm4gc3RhdHVzOw0KPiArCQlyZXR1cm4gTUVTSF9TVEFUVVNfSU5WQUxJRF9NT0RFTDsN Cj4gIA0KPiAgCWlmICghbW9kLT5zdWJfZW5hYmxlZCB8fCAobW9kLT5jYnMgJiYgIShtb2QtPmNi cy0+c3ViKSkpDQo+ICAJCXJldHVybiBNRVNIX1NUQVRVU19OT1RfU1VCX01PRDsNCj4gQEAgLTE0 ODEsMzQgKzE1NzYsMjMgQEAgaW50IG1lc2hfbW9kZWxfc3ViX2RlbChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwNCj4gIA0KPiAgCQlpZiAoIW1vZC0+ Y2JzKQ0KPiAgCQkJLyogRXh0ZXJuYWwgbW9kZWxzICovDQo+IC0JCQljb25maWdfdXBkYXRlX21v ZGVsX3N1YnNjcmlwdGlvbnMobm9kZSwgbW9kKTsNCj4gKwkJCWNmZ191cGRhdGVfbW9kZWxfc3Vi cyhub2RlLCBlbGVfaWR4LCBtb2QpOw0KPiAgCX0NCj4gIA0KPiAgCXJldHVybiBNRVNIX1NUQVRV U19TVUNDRVNTOw0KPiAgfQ0KPiAgDQo+IC1zdGF0aWMgdm9pZCByZW1vdmVfc3VicyhzdHJ1Y3Qg bWVzaF9ub2RlICpub2RlLCBzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kKQ0KPiAtew0KPiAtCWNvbnN0 IHN0cnVjdCBsX3F1ZXVlX2VudHJ5ICplbnRyeTsNCj4gLQlzdHJ1Y3QgbWVzaF9uZXQgKm5ldCA9 IG5vZGVfZ2V0X25ldChub2RlKTsNCj4gLQ0KPiAtCWVudHJ5ID0gbF9xdWV1ZV9nZXRfZW50cmll cyhtb2QtPnN1YnMpOw0KPiAtDQo+IC0JZm9yICg7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0 KQ0KPiAtCQltZXNoX25ldF9kc3RfdW5yZWcobmV0LCAodWludDE2X3QpIExfUFRSX1RPX1VJTlQo ZW50cnktPmRhdGEpKTsNCj4gLQ0KPiAtCWxfcXVldWVfY2xlYXIobW9kLT5zdWJzLCBOVUxMKTsN Cj4gLQlsX3F1ZXVlX2NsZWFyKG1vZC0+dmlydHVhbHMsIHVucmVmX3ZpcnQpOw0KPiAtfQ0KPiAt DQo+ICBpbnQgbWVzaF9tb2RlbF9zdWJfZGVsX2FsbChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1 aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCkNCj4gIHsNCj4gLQlpbnQgc3RhdHVzOw0KPiAgCXN0 cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+ICsJaW50IGVsZV9pZHggPSBub2RlX2dldF9lbGVtZW50 X2lkeChub2RlLCBhZGRyKTsNCj4gIA0KPiAtCW1vZCA9IGZpbmRfbW9kZWwobm9kZSwgYWRkciwg aWQsICZzdGF0dXMpOw0KPiArCWlmIChlbGVfaWR4IDwgMCkNCj4gKwkJcmV0dXJuIE1FU0hfU1RB VFVTX0lOVkFMSURfQUREUkVTUzsNCj4gKw0KPiArCW1vZCA9IGdldF9tb2RlbChub2RlLCAodWlu dDhfdCkgZWxlX2lkeCwgaWQpOw0KPiAgCWlmICghbW9kKQ0KPiAtCQlyZXR1cm4gc3RhdHVzOw0K PiArCQlyZXR1cm4gTUVTSF9TVEFUVVNfSU5WQUxJRF9NT0RFTDsNCj4gIA0KPiAgCWlmICghbW9k LT5zdWJfZW5hYmxlZCB8fCAobW9kLT5jYnMgJiYgIShtb2QtPmNicy0+c3ViKSkpDQo+ICAJCXJl dHVybiBNRVNIX1NUQVRVU19OT1RfU1VCX01PRDsNCj4gQEAgLTE1MTcsMTcgKzE2MDEsMTUgQEAg aW50IG1lc2hfbW9kZWxfc3ViX2RlbF9hbGwoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2 X3QgYWRkciwgdWludDMyX3QgaWQpDQo+ICANCj4gIAlpZiAoIW1vZC0+Y2JzKQ0KPiAgCQkvKiBF eHRlcm5hbCBtb2RlbHMgKi8NCj4gLQkJY29uZmlnX3VwZGF0ZV9tb2RlbF9zdWJzY3JpcHRpb25z KG5vZGUsIG1vZCk7DQo+ICsJCWNmZ191cGRhdGVfbW9kZWxfc3Vicyhub2RlLCBlbGVfaWR4LCBt b2QpOw0KPiAgDQo+ICAJcmV0dXJuIE1FU0hfU1RBVFVTX1NVQ0NFU1M7DQo+ICB9DQo+ICANCj4g LXN0cnVjdCBtZXNoX21vZGVsICptZXNoX21vZGVsX3NldHVwKHN0cnVjdCBtZXNoX25vZGUgKm5v ZGUsIHVpbnQ4X3QgZWxlX2lkeCwNCj4gLQkJCQkJCQkJdm9pZCAqZGF0YSkNCj4gK3N0YXRpYyBz dHJ1Y3QgbWVzaF9tb2RlbCAqbW9kZWxfc2V0dXAoc3RydWN0IG1lc2hfbmV0ICpuZXQsIHVpbnQ4 X3QgZWxlX2lkeCwNCj4gKwkJCQkJc3RydWN0IG1lc2hfY29uZmlnX21vZGVsICpkYl9tb2QpDQo+ ICB7DQo+IC0Jc3RydWN0IG1lc2hfY29uZmlnX21vZGVsICpkYl9tb2QgPSBkYXRhOw0KPiAgCXN0 cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+IC0Jc3RydWN0IG1lc2hfbmV0ICpuZXQ7DQo+ICAJc3Ry dWN0IG1lc2hfY29uZmlnX3B1YiAqcHViID0gZGJfbW9kLT5wdWI7DQo+ICAJdWludDMyX3QgaTsN Cj4gIA0KPiBAQCAtMTUzNyw4ICsxNjE5LDggQEAgc3RydWN0IG1lc2hfbW9kZWwgKm1lc2hfbW9k ZWxfc2V0dXAoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDhfdCBlbGVfaWR4LA0KPiAgCQly ZXR1cm4gTlVMTDsNCj4gIAl9DQo+ICANCj4gLQltb2QgPSBtZXNoX21vZGVsX25ldyhlbGVfaWR4 LCBkYl9tb2QtPnZlbmRvciA/IGRiX21vZC0+aWQgOg0KPiAtCQkJCQkJZGJfbW9kLT5pZCB8IFZF TkRPUl9JRF9NQVNLKTsNCj4gKwltb2QgPSBtb2RlbF9uZXcoZGJfbW9kLT52ZW5kb3IgPyBkYl9t b2QtPmlkIDoNCj4gKwkJCQkJCVNFVF9JRChTSUdfVkVORE9SLCBkYl9tb2QtPmlkKSk7DQo+ICAN Cj4gIAkvKiBJbXBsaWNpdGx5IGJpbmQgY29uZmlnIHNlcnZlciBtb2RlbCB0byBkZXZpY2Uga2V5 ICovDQo+ICAJaWYgKGRiX21vZC0+aWQgPT0gQ09ORklHX1NSVl9NT0RFTCkgew0KPiBAQCAtMTU1 NywxNyArMTYzOSwxOCBAQCBzdHJ1Y3QgbWVzaF9tb2RlbCAqbWVzaF9tb2RlbF9zZXR1cChzdHJ1 Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IGVsZV9pZHgsDQo+ICAJCXJldHVybiBtb2Q7DQo+ ICAJfQ0KPiAgDQo+IC0JbmV0ID0gbm9kZV9nZXRfbmV0KG5vZGUpOw0KPiAtDQo+ICAJLyogQWRk IGFwcGxpY2F0aW9uIGtleSBiaW5kaW5ncyBpZiBwcmVzZW50ICovDQo+ICAJaWYgKGRiX21vZC0+ YmluZGluZ3MpIHsNCj4gIAkJbW9kLT5iaW5kaW5ncyA9IGxfcXVldWVfbmV3KCk7DQo+ICAJCWZv ciAoaSA9IDA7IGkgPCBkYl9tb2QtPm51bV9iaW5kaW5nczsgaSsrKQ0KPiAtCQkJbW9kZWxfYmlu ZF9pZHgobm9kZSwgbW9kLCBkYl9tb2QtPmJpbmRpbmdzW2ldKTsNCj4gKwkJCWxfcXVldWVfcHVz aF90YWlsKG1vZC0+YmluZGluZ3MsDQo+ICsJCQkJCUxfVUlOVF9UT19QVFIoZGJfbW9kLT5iaW5k aW5nc1tpXSkpOw0KPiAgCX0NCj4gIA0KPiAtCS8qIEFkZCBwdWJsaWNhdGlvbiBpZiBwcmVzZW50 ICovDQo+IC0JaWYgKHB1Yikgew0KPiArCW1vZC0+cHViX2VuYWJsZWQgPSBkYl9tb2QtPnB1Yl9l bmFibGVkOw0KPiArDQo+ICsJLyogQWRkIHB1YmxpY2F0aW9uIGlmIGVuYWJsZWQgYW5kIHByZXNl bnQgKi8NCj4gKwlpZiAobW9kLT5wdWJfZW5hYmxlZCAmJiBwdWIpIHsNCj4gIAkJdWludDhfdCBy ZXRyYW5zbWl0ID0gcHViLT5jb3VudCArDQo+ICAJCQkJCSgocHViLT5pbnRlcnZhbCAvIDUwIC0g MSkgPDwgMyk7DQo+ICAJCWlmIChwdWItPnZpcnQpDQo+IEBAIC0xNTc5LDggKzE2NjIsMTAgQEAg c3RydWN0IG1lc2hfbW9kZWwgKm1lc2hfbW9kZWxfc2V0dXAoc3RydWN0IG1lc2hfbm9kZSAqbm9k ZSwgdWludDhfdCBlbGVfaWR4LA0KPiAgCQkJCXB1Yi0+dHRsLCBwdWItPnBlcmlvZCwgcmV0cmFu c21pdCk7DQo+ICAJfQ0KPiAgDQo+IC0JLyogQWRkIHN1YnNjcmlwdGlvbnMgaWYgcHJlc2VudCAq Lw0KPiAtCWlmICghZGJfbW9kLT5zdWJzKQ0KPiArCW1vZC0+c3ViX2VuYWJsZWQgPSBkYl9tb2Qt PnN1Yl9lbmFibGVkOw0KPiArDQo+ICsJLyogQWRkIHN1YnNjcmlwdGlvbnMgaWYgZW5hYmxlZCBh bmQgcHJlc2VudCAqLw0KPiArCWlmICghZGJfbW9kLT5zdWJzIHx8ICFtb2QtPnN1Yl9lbmFibGVk KQ0KPiAgCQlyZXR1cm4gbW9kOw0KPiAgDQo+ICAJZm9yIChpID0gMDsgaSA8IGRiX21vZC0+bnVt X3N1YnM7IGkrKykgew0KPiBAQCAtMTYwNSw2ICsxNjkwLDYwIEBAIHN0cnVjdCBtZXNoX21vZGVs ICptZXNoX21vZGVsX3NldHVwKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgZWxlX2lk eCwNCj4gIAlyZXR1cm4gbW9kOw0KPiAgfQ0KPiAgDQo+ICtib29sIG1lc2hfbW9kZWxfYWRkX2Zy b21fc3RvcmFnZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IGVsZV9pZHgsDQo+ICsJ CQkJc3RydWN0IGxfcXVldWUgKm1vZHMsIHN0cnVjdCBsX3F1ZXVlICpkYl9tb2RzKQ0KPiArew0K PiArCXN0cnVjdCBtZXNoX25ldCAqbmV0ID0gbm9kZV9nZXRfbmV0KG5vZGUpOw0KPiArCWNvbnN0 IHN0cnVjdCBsX3F1ZXVlX2VudHJ5ICplbnRyeTsNCj4gKw0KPiArCS8qIEFsbG93IGVtcHR5IGVs ZW1lbnRzICovDQo+ICsJaWYgKCFkYl9tb2RzKQ0KPiArCQlyZXR1cm4gdHJ1ZTsNCj4gKw0KPiAr CWVudHJ5ID0gbF9xdWV1ZV9nZXRfZW50cmllcyhkYl9tb2RzKTsNCj4gKw0KPiArCWZvciAoOyBl bnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkgew0KPiArCQlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9k Ow0KPiArCQlzdHJ1Y3QgbWVzaF9jb25maWdfbW9kZWwgKmRiX21vZDsNCj4gKwkJdWludDMyX3Qg aWQ7DQo+ICsNCj4gKwkJZGJfbW9kID0gZW50cnktPmRhdGE7DQo+ICsNCj4gKwkJaWQgPSBkYl9t b2QtPnZlbmRvciA/IGRiX21vZC0+aWQgOg0KPiArCQkJCQkJU0VUX0lEKFNJR19WRU5ET1IsIGRi X21vZC0+aWQpOw0KPiArDQo+ICsJCWlmIChsX3F1ZXVlX2ZpbmQobW9kcywgbWF0Y2hfbW9kZWxf aWQsIExfVUlOVF9UT19QVFIoaWQpKSkNCj4gKwkJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCQlt b2QgPSBtb2RlbF9zZXR1cChuZXQsIGVsZV9pZHgsIGRiX21vZCk7DQo+ICsJCWlmICghbW9kKQ0K PiArCQkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJCWxfcXVldWVfaW5zZXJ0KG1vZHMsIG1vZCwg Y29tcGFyZV9tb2RlbF9pZCwgTlVMTCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ ICt9DQo+ICsNCj4gK3ZvaWQgbWVzaF9tb2RlbF9jb252ZXJ0X3RvX3N0b3JhZ2Uoc3RydWN0IGxf cXVldWUgKmRiX21vZHMsDQo+ICsJCQkJCQkJc3RydWN0IGxfcXVldWUgKm1vZHMpDQo+ICt7DQo+ ICsNCj4gKwljb25zdCBzdHJ1Y3QgbF9xdWV1ZV9lbnRyeSAqZW50cnkgPSBsX3F1ZXVlX2dldF9l bnRyaWVzKG1vZHMpOw0KPiArDQo+ICsJZm9yICg7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0 KSB7DQo+ICsJCXN0cnVjdCBtZXNoX21vZGVsICptb2QgPSBlbnRyeS0+ZGF0YTsNCj4gKwkJc3Ry dWN0IG1lc2hfY29uZmlnX21vZGVsICpkYl9tb2Q7DQo+ICsNCj4gKwkJZGJfbW9kID0gbF9uZXco c3RydWN0IG1lc2hfY29uZmlnX21vZGVsLCAxKTsNCj4gKwkJZGJfbW9kLT5pZCA9IG1vZC0+aWQ7 DQo+ICsJCWRiX21vZC0+dmVuZG9yID0gSVNfVkVORE9SKG1vZC0+aWQpOw0KPiArCQlkYl9tb2Qt PnB1Yl9lbmFibGVkID0gbW9kLT5wdWJfZW5hYmxlZDsNCj4gKwkJZGJfbW9kLT5zdWJfZW5hYmxl ZCA9IG1vZC0+c3ViX2VuYWJsZWQ7DQo+ICsJCWxfcXVldWVfcHVzaF90YWlsKGRiX21vZHMsIGRi X21vZCk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICB1aW50MTZfdCBtZXNoX21vZGVsX29wY29kZV9z ZXQodWludDMyX3Qgb3Bjb2RlLCB1aW50OF90ICpidWYpDQo+ICB7DQo+ICAJaWYgKG9wY29kZSA8 PSAweDdlKSB7DQo+IEBAIC0xNjY5LDcgKzE4MDgsNyBAQCBib29sIG1lc2hfbW9kZWxfb3Bjb2Rl X2dldChjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUsDQo+ICAJcmV0dXJuIHRydWU7 DQo+ICB9DQo+ICANCj4gLXZvaWQgbW9kZWxfYnVpbGRfY29uZmlnKHZvaWQgKm1vZGVsLCB2b2lk ICptc2dfYnVpbGRlcikNCj4gK3ZvaWQgbWVzaF9tb2RlbF9idWlsZF9jb25maWcodm9pZCAqbW9k ZWwsIHZvaWQgKm1zZ19idWlsZGVyKQ0KPiAgew0KPiAgCXN0cnVjdCBsX2RidXNfbWVzc2FnZV9i dWlsZGVyICpidWlsZGVyID0gbXNnX2J1aWxkZXI7DQo+ICAJc3RydWN0IG1lc2hfbW9kZWwgKm1v ZCA9IG1vZGVsOw0KPiBAQCAtMTY4NSwxNCArMTgyNCwxNCBAQCB2b2lkIG1vZGVsX2J1aWxkX2Nv bmZpZyh2b2lkICptb2RlbCwgdm9pZCAqbXNnX2J1aWxkZXIpDQo+ICAJbF9kYnVzX21lc3NhZ2Vf YnVpbGRlcl9lbnRlcl9zdHJ1Y3QoYnVpbGRlciwgInFhe3N2fSIpOw0KPiAgDQo+ICAJLyogTW9k ZWwgaWQgKi8NCj4gLQlpZCA9IG1vZC0+aWQgJiAweGZmZmY7DQo+ICsJaWQgPSBNT0RFTF9JRCht b2QtPmlkKTsNCj4gIAlsX2RidXNfbWVzc2FnZV9idWlsZGVyX2FwcGVuZF9iYXNpYyhidWlsZGVy LCAncScsICZpZCk7DQo+ICANCj4gIAlsX2RidXNfbWVzc2FnZV9idWlsZGVyX2VudGVyX2FycmF5 KGJ1aWxkZXIsICJ7c3Z9Iik7DQo+ICANCj4gIAkvKiBGb3IgdmVuZG9yIG1vZGVscywgYWRkIHZl bmRvciBpZCAqLw0KPiAtCWlmICgobW9kLT5pZCAmIFZFTkRPUl9JRF9NQVNLKSAhPSBWRU5ET1Jf SURfTUFTSykgew0KPiAtCQl1aW50MTZfdCB2ZW5kb3IgPSBtb2QtPmlkID4+IDE2Ow0KPiArCWlm IChJU19WRU5ET1IobW9kLT5pZCkpIHsNCj4gKwkJdWludDE2X3QgdmVuZG9yID0gVkVORE9SX0lE KG1vZC0+aWQpOw0KPiAgCQlkYnVzX2FwcGVuZF9kaWN0X2VudHJ5X2Jhc2ljKGJ1aWxkZXIsICJW ZW5kb3IiLCAicSIsICZ2ZW5kb3IpOw0KPiAgCX0NCj4gIA0KPiBAQCAtMTcxNSwzNiArMTg1NCwx MDEgQEAgdm9pZCBtb2RlbF9idWlsZF9jb25maWcodm9pZCAqbW9kZWwsIHZvaWQgKm1zZ19idWls ZGVyKQ0KPiAgCWxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfbGVhdmVfc3RydWN0KGJ1aWxkZXIpOw0K PiAgfQ0KPiAgDQo+IC12b2lkIG1lc2hfbW9kZWxfZW5hYmxlX3B1YihzdHJ1Y3QgbWVzaF9tb2Rl bCAqbW9kLCBib29sIGVuYWJsZSkNCj4gK3ZvaWQgbWVzaF9tb2RlbF91cGRhdGVfb3B0cyhzdHJ1 Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IGVsZV9pZHgsDQo+ICsJCQkJc3RydWN0IGxfcXVl dWUgKmN1cnIsIHN0cnVjdCBsX3F1ZXVlICp1cGRhdGVkKQ0KPiAgew0KPiAtCW1vZC0+cHViX2Vu YWJsZWQgPSBlbmFibGU7DQo+ICsJdWludDE2X3QgcHJpbWFyeTsNCj4gKwljb25zdCBzdHJ1Y3Qg bF9xdWV1ZV9lbnRyeSAqZW50cnk7DQo+ICANCj4gLQlpZiAoIW1vZC0+cHViX2VuYWJsZWQgJiYg bW9kLT5wdWIpIHsNCj4gLQkJaWYgKG1vZC0+cHViLT52aXJ0KQ0KPiAtCQkJdW5yZWZfdmlydCht b2QtPnB1Yi0+dmlydCk7DQo+ICsJcHJpbWFyeSA9IG5vZGVfZ2V0X3ByaW1hcnkobm9kZSk7DQo+ ICsJZW50cnkgPSBsX3F1ZXVlX2dldF9lbnRyaWVzKGN1cnIpOw0KPiAgDQo+IC0JCWxfZnJlZSht b2QtPnB1Yik7DQo+IC0JCW1vZC0+cHViID0gTlVMTDsNCj4gLQl9DQo+IC19DQo+ICsJZm9yICg7 IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7DQo+ICsJCXN0cnVjdCBtZXNoX21vZGVsICpt b2QsICp1cGRhdGVkX21vZCA9IGVudHJ5LT5kYXRhOw0KPiArCQl1aW50MzJfdCBpZCA9IHVwZGF0 ZWRfbW9kLT5pZDsNCj4gKwkJYm9vbCB1cGRhdGVkX29wdCwgdmVuZG9yID0gSVNfVkVORE9SKGlk KTsNCj4gIA0KPiAtYm9vbCBtZXNoX21vZGVsX2lzX3B1Yl9lbmFibGVkKHN0cnVjdCBtZXNoX21v ZGVsICptb2QpDQo+IC17DQo+IC0JcmV0dXJuIG1vZC0+cHViX2VuYWJsZWQ7DQo+IC19DQo+ICsJ CW1vZCA9IGxfcXVldWVfZmluZChjdXJyLCBtYXRjaF9tb2RlbF9pZCwgTF9VSU5UX1RPX1BUUihp ZCkpOw0KPiArCQlpZiAoIW1vZCkNCj4gKwkJCWNvbnRpbnVlOw0KPiAgDQo+IC12b2lkIG1lc2hf bW9kZWxfZW5hYmxlX3N1YihzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCBzdHJ1Y3QgbWVzaF9tb2Rl bCAqbW9kLA0KPiAtCQkJCQkJCQlib29sIGVuYWJsZSkNCj4gLXsNCj4gLQltb2QtPnN1Yl9lbmFi bGVkID0gZW5hYmxlOw0KPiArCQlpZiAoIXZlbmRvcikNCj4gKwkJCWlkID0gTU9ERUxfSUQoaWQp Ow0KPiAgDQo+IC0JaWYgKCFtb2QtPnN1Yl9lbmFibGVkKQ0KPiAtCQlyZW1vdmVfc3Vicyhub2Rl LCBtb2QpOw0KPiArCQl1cGRhdGVkX29wdCA9IHVwZGF0ZWRfbW9kLT5wdWJfZW5hYmxlZDsNCj4g KwkJaWYgKG1vZC0+cHViX2VuYWJsZWQgIT0gdXBkYXRlZF9vcHQpIHsNCj4gKwkJCW1vZGVsX2Vu YWJsZV9wdWIobW9kLCB1cGRhdGVkX29wdCk7DQo+ICsJCQltZXNoX2NvbmZpZ19tb2RlbF9wdWJf ZW5hYmxlKG5vZGVfY29uZmlnX2dldChub2RlKSwNCj4gKwkJCQkJCQlwcmltYXJ5ICsgZWxlX2lk eCwgaWQsDQo+ICsJCQkJCQkJdmVuZG9yLCB1cGRhdGVkX29wdCk7DQo+ICsJCX0NCj4gKw0KPiAr CQl1cGRhdGVkX29wdCA9IHVwZGF0ZWRfbW9kLT5zdWJfZW5hYmxlZDsNCj4gKw0KPiArCQlpZiAo bW9kLT5wdWJfZW5hYmxlZCAhPSB1cGRhdGVkX29wdCkgew0KPiArCQkJbW9kZWxfZW5hYmxlX3N1 Yihub2RlLCBtb2QsIHVwZGF0ZWRfb3B0KTsNCj4gKwkJCW1lc2hfY29uZmlnX21vZGVsX3N1Yl9l bmFibGUobm9kZV9jb25maWdfZ2V0KG5vZGUpLA0KPiArCQkJCQkJCXByaW1hcnkgKyBlbGVfaWR4 LCBpZCwNCj4gKwkJCQkJCQl2ZW5kb3IsIHVwZGF0ZWRfb3B0KTsNCj4gKwkJCX0NCj4gKwkJfQ0K PiAgfQ0KPiAgDQo+IC1ib29sIG1lc2hfbW9kZWxfaXNfc3ViX2VuYWJsZWQoc3RydWN0IG1lc2hf bW9kZWwgKm1vZCkNCj4gKy8qIFBvcHVsYXRlIGNvbXBvc2l0aW9uIGJ1ZmZlciB3aXRoIG1vZGVs IElEcyAqLw0KPiArdWludDE2X3QgbWVzaF9tb2RlbF9nZW5lcmF0ZV9jb21wb3NpdGlvbihzdHJ1 Y3QgbF9xdWV1ZSAqbW9kcywgdWludDE2X3QgYnVmX3N6LA0KPiArCQkJCQkJCQl1aW50OF90ICpi dWYpDQo+ICB7DQo+IC0JcmV0dXJuIG1vZC0+c3ViX2VuYWJsZWQ7DQo+ICsJY29uc3Qgc3RydWN0 IGxfcXVldWVfZW50cnkgKmVudHJ5Ow0KPiArCXVpbnQ4X3QgbnVtX3MgPSAwLCBudW1fdiA9IDA7 DQo+ICsJdWludDhfdCAqbW9kX2J1ZjsNCj4gKwl1aW50MTZfdCBuOw0KPiArDQo+ICsJLyogU3Rv cmUgbW9kZWxzIElEcywgc3RvcmUgbnVtX3MgYW5kIG51bV92IGxhdGVyICovDQo+ICsJbW9kX2J1 ZiA9IGJ1ZjsNCj4gKwluID0gMjsNCj4gKw0KPiArCWVudHJ5ID0gbF9xdWV1ZV9nZXRfZW50cmll cyhtb2RzKTsNCj4gKw0KPiArCS8qIEdldCBTSUcgbW9kZWxzICovDQo+ICsJZm9yICg7IGVudHJ5 OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7DQo+ICsJCXN0cnVjdCBtZXNoX21vZGVsICptb2QgPSBl bnRyeS0+ZGF0YTsNCj4gKw0KPiArCQlpZiAobiArIDIgPiBidWZfc3opDQo+ICsJCQlnb3RvIGRv bmU7DQo+ICsNCj4gKwkJaWYgKElTX1ZFTkRPUihtb2QtPmlkKSkNCj4gKwkJCWNvbnRpbnVlOw0K PiArDQo+ICsJCWxfcHV0X2xlMTYoKHVpbnQxNl90KSAoTU9ERUxfSUQobW9kLT5pZCkpLCBidWYg KyBuKTsNCj4gKwkJbiArPSAyOw0KPiArCQludW1fcysrOw0KPiArCX0NCj4gKw0KPiArCS8qIEdl dCB2ZW5kb3IgbW9kZWxzICovDQo+ICsJZW50cnkgPSBsX3F1ZXVlX2dldF9lbnRyaWVzKG1vZHMp Ow0KPiArDQo+ICsJZm9yICg7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7DQo+ICsJCXN0 cnVjdCBtZXNoX21vZGVsICptb2QgPSBlbnRyeS0+ZGF0YTsNCj4gKwkJdWludDE2X3QgdmVuZG9y X2lkOw0KPiArDQo+ICsJCWlmIChuICsgNCA+IGJ1Zl9zeikNCj4gKwkJCWdvdG8gZG9uZTsNCj4g Kw0KPiArCQlpZiAoIUlTX1ZFTkRPUihtb2QtPmlkKSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ ICsJCXZlbmRvcl9pZCA9ICh1aW50MTZfdCkgKFZFTkRPUl9JRChtb2QtPmlkKSk7DQo+ICsJCWxf cHV0X2xlMTYodmVuZG9yX2lkLCBidWYgKyBuKTsNCj4gKwkJbiArPSAyOw0KPiArCQlsX3B1dF9s ZTE2KCh1aW50MTZfdCkgKE1PREVMX0lEKG1vZC0+aWQpKSwgYnVmICsgbik7DQo+ICsJCW4gKz0g MjsNCj4gKwkJbnVtX3YrKzsNCj4gKwl9DQo+ICsNCj4gK2RvbmU6DQo+ICsJbW9kX2J1ZlswXSA9 IG51bV9zOw0KPiArCW1vZF9idWZbMV0gPSBudW1fdjsNCj4gKwlyZXR1cm4gbjsNCj4gIH0NCj4g IA0KPiAgdm9pZCBtZXNoX21vZGVsX2luaXQodm9pZCkNCj4gZGlmZiAtLWdpdCBhL21lc2gvbW9k ZWwuaCBiL21lc2gvbW9kZWwuaA0KPiBpbmRleCAwMzc3ZDNmZGQuLjBkOGRkZGY5MiAxMDA2NDQN Cj4gLS0tIGEvbWVzaC9tb2RlbC5oDQo+ICsrKyBiL21lc2gvbW9kZWwuaA0KPiBAQCAtMiw3ICsy LDcgQEANCj4gICAqDQo+ICAgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9y IExpbnV4DQo+ICAgKg0KPiAtICogIENvcHlyaWdodCAoQykgMjAxOCAgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAg IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiAgICoNCj4gICAqDQo+ ICAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcg0KPiBAQCAtMjIsMTQgKzIyLDE3IEBAIHN0cnVjdCBtZXNoX21vZGVsOw0KPiAg I2RlZmluZSBNQVhfQklORElOR1MJMTANCj4gICNkZWZpbmUgTUFYX0dSUF9QRVJfTU9ECTEwDQo+ ICANCj4gLSNkZWZpbmUgT1BfTU9ERUxfVEVTVAkJCTB4ODAwMGZmZmUNCj4gLSNkZWZpbmUgT1Bf TU9ERUxfSU5WQUxJRAkJMHg4MDAwZmZmZg0KPiArI2RlZmluZSBBQ1RJT05fQURECTENCj4gKyNk ZWZpbmUgQUNUSU9OX1VQREFURQkyDQo+ICsjZGVmaW5lIEFDVElPTl9ERUxFVEUJMw0KPiAgDQo+ IC0jZGVmaW5lIFVTRV9QVUJfVkFMVUUJCQkweDAwDQo+ICsvKiBGb3IgaW50ZXJuYWwgcmVwcmVz ZW50YXRpb24gb2YgU0lHIGRlZmluZWQgbW9kZWxzICovDQo+ICsjZGVmaW5lIFNJR19WRU5ET1IJ MHhGRkZGDQo+ICANCj4gLSNkZWZpbmUgQUNUSU9OX0FERAkJMQ0KPiAtI2RlZmluZSBBQ1RJT05f VVBEQVRFCQkyDQo+IC0jZGVmaW5lIEFDVElPTl9ERUxFVEUJCTMNCj4gKyNkZWZpbmUgSVNfVkVO RE9SKHgpCSgoeCkgPCAoKHVpbnQzMl90KShTSUdfVkVORE9SKSA8PCAxNikpDQo+ICsjZGVmaW5l IFNFVF9JRCh2LCBtKQkoKCgodWludDMyX3QpICh2KSkgPDwgMTYpIHwgKG0pKQ0KPiArI2RlZmlu ZSBNT0RFTF9JRCh4KQkoKHgpICYgflZFTkRPUl9JRF9NQVNLKQ0KPiArI2RlZmluZSBWRU5ET1Jf SUQoeCkJKCh4KSA+PiAxNikNCj4gIA0KPiAgc3RydWN0IG1lc2hfdmlydHVhbDsNCj4gIA0KPiBA QCAtNjAsNjEgKzYzLDYyIEBAIHN0cnVjdCBtZXNoX21vZGVsX29wcyB7DQo+ICAJbWVzaF9tb2Rl bF9zdWJfY2Igc3ViOw0KPiAgfTsNCj4gIA0KPiAtc3RydWN0IG1lc2hfbW9kZWwgKm1lc2hfbW9k ZWxfbmV3KHVpbnQ4X3QgZWxlX2lkeCwgdWludDMyX3QgbW9kX2lkKTsNCj4gK2Jvb2wgbWVzaF9t b2RlbF9hZGQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgc3RydWN0IGxfcXVldWUgKm1vZHMsDQo+ ICsJCQl1aW50MzJfdCBpZCwgc3RydWN0IGxfZGJ1c19tZXNzYWdlX2l0ZXIgKm9wdHMpOw0KPiAg dm9pZCBtZXNoX21vZGVsX2ZyZWUodm9pZCAqZGF0YSk7DQo+IC11aW50MzJfdCBtZXNoX21vZGVs X2dldF9tb2RlbF9pZChjb25zdCBzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kZWwpOw0KPiAgYm9vbCBt ZXNoX21vZGVsX3JlZ2lzdGVyKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgZWxlX2lk eCwNCj4gLQkJCXVpbnQzMl90IG1vZF9pZCwgY29uc3Qgc3RydWN0IG1lc2hfbW9kZWxfb3BzICpj YnMsDQo+ICsJCQl1aW50MzJfdCBpZCwgY29uc3Qgc3RydWN0IG1lc2hfbW9kZWxfb3BzICpjYnMs DQo+ICAJCQkJCQkJdm9pZCAqdXNlcl9kYXRhKTsNCj4gLXN0cnVjdCBtZXNoX21vZGVsICptZXNo X21vZGVsX3NldHVwKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgZWxlX2lkeCwNCj4g LQkJCQkJCQkJdm9pZCAqZGF0YSk7DQo+ICtib29sIG1lc2hfbW9kZWxfYWRkX2Zyb21fc3RvcmFn ZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IGVsZV9pZHgsDQo+ICsJCQkJc3RydWN0 IGxfcXVldWUgKm1vZHMsIHN0cnVjdCBsX3F1ZXVlICpkYl9tb2RzKTsNCj4gK3ZvaWQgbWVzaF9t b2RlbF9jb252ZXJ0X3RvX3N0b3JhZ2Uoc3RydWN0IGxfcXVldWUgKmRiX21vZHMsDQo+ICsJCQkJ CQkJc3RydWN0IGxfcXVldWUgKm1vZHMpOw0KPiAgc3RydWN0IG1lc2hfbW9kZWxfcHViICptZXNo X21vZGVsX3B1Yl9nZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwNCj4gLQkJCQl1aW50MTZfdCBh ZGRyLCB1aW50MzJfdCBtb2RfaWQsIGludCAqc3RhdHVzKTsNCj4gLWludCBtZXNoX21vZGVsX3B1 Yl9zZXQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwgdWludDMyX3QgaWQs DQo+IC0JCQljb25zdCB1aW50OF90ICpwdWJfYWRkciwgdWludDE2X3QgaWR4LCBib29sIGNyZWRf ZmxhZywNCj4gKwkJCQkJCXVpbnQxNl90IGVsZV9hZGRyLA0KPiArCQkJCQkJdWludDMyX3QgaWQs IGludCAqc3RhdHVzKTsNCj4gK2ludCBtZXNoX21vZGVsX3B1Yl9zZXQoc3RydWN0IG1lc2hfbm9k ZSAqbm9kZSwgdWludDE2X3QgZWxlX2FkZHIsIHVpbnQzMl90IGlkLA0KPiArCQkJY29uc3QgdWlu dDhfdCAqYWRkciwgdWludDE2X3QgaWR4LCBib29sIGNyZWRfZmxhZywNCj4gIAkJCXVpbnQ4X3Qg dHRsLCB1aW50OF90IHBlcmlvZCwgdWludDhfdCByZXRyYW5zbWl0LA0KPiAgCQkJYm9vbCBpc192 aXJ0LCB1aW50MTZfdCAqZHN0KTsNCj4gIA0KPiAtaW50IG1lc2hfbW9kZWxfYmluZGluZ19hZGQo c3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwgdWludDMyX3QgaWQsDQo+IC0J CQkJCQkJCXVpbnQxNl90IGlkeCk7DQo+IC1pbnQgbWVzaF9tb2RlbF9iaW5kaW5nX2RlbChzdHJ1 Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwNCj4gLQkJCQkJ CQkJdWludDE2X3QgaWR4KTsNCj4gLWludCBtZXNoX21vZGVsX2dldF9iaW5kaW5ncyhzdHJ1Y3Qg bWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCwNCj4gLQkJCQl1aW50 OF90ICpidWYsIHVpbnQxNl90IGJ1Zl9sZW4sIHVpbnQxNl90ICpzaXplKTsNCj4gLWludCBtZXNo X21vZGVsX3N1Yl9hZGQoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgYWRkciwgdWlu dDMyX3QgaWQsDQo+ICtpbnQgbWVzaF9tb2RlbF9iaW5kaW5nX2FkZChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCB1aW50MTZfdCBlbGVfYWRkciwNCj4gKwkJCQkJCXVpbnQzMl90IGlkLCB1aW50MTZf dCBpZHgpOw0KPiAraW50IG1lc2hfbW9kZWxfYmluZGluZ19kZWwoc3RydWN0IG1lc2hfbm9kZSAq bm9kZSwgdWludDE2X3QgZWxlX2FkZHIsDQo+ICsJCQkJCQl1aW50MzJfdCBpZCwgdWludDE2X3Qg aWR4KTsNCj4gK2ludCBtZXNoX21vZGVsX2dldF9iaW5kaW5ncyhzdHJ1Y3QgbWVzaF9ub2RlICpu b2RlLCB1aW50MTZfdCBlbGVfYWRkciwNCj4gKwkJCQl1aW50MzJfdCBpZCwgdWludDhfdCAqYnVm LCB1aW50MTZfdCBidWZfc3osDQo+ICsJCQkJCQkJCXVpbnQxNl90ICpsZW4pOw0KPiAraW50IG1l c2hfbW9kZWxfc3ViX2FkZChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBlbGVfYWRk ciwgdWludDMyX3QgaWQsDQo+ICAJCQkJY29uc3QgdWludDhfdCAqZ3JwLCBib29sIGJfdmlydCwg dWludDE2X3QgKmRzdCk7DQo+IC1pbnQgbWVzaF9tb2RlbF9zdWJfZGVsKHN0cnVjdCBtZXNoX25v ZGUgKm5vZGUsIHVpbnQxNl90IGFkZHIsIHVpbnQzMl90IGlkLA0KPiAraW50IG1lc2hfbW9kZWxf c3ViX2RlbChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBlbGVfYWRkciwgdWludDMy X3QgaWQsDQo+ICAJCQkJY29uc3QgdWludDhfdCAqZ3JwLCBib29sIGJfdmlydCwgdWludDE2X3Qg KmRzdCk7DQo+ICBpbnQgbWVzaF9tb2RlbF9zdWJfZGVsX2FsbChzdHJ1Y3QgbWVzaF9ub2RlICpu b2RlLCB1aW50MTZfdCBhZGRyLCB1aW50MzJfdCBpZCk7DQo+ICBpbnQgbWVzaF9tb2RlbF9zdWJf b3ZyKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IGFkZHIsIHVpbnQzMl90IGlkLA0K PiAgCQkJCWNvbnN0IHVpbnQ4X3QgKmdycCwgYm9vbCBiX3ZpcnQsIHVpbnQxNl90ICpkc3QpOw0K PiAtaW50IG1lc2hfbW9kZWxfc3ViX2dldChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZf dCBhZGRyLCB1aW50MzJfdCBpZCwNCj4gK2ludCBtZXNoX21vZGVsX3N1Yl9nZXQoc3RydWN0IG1l c2hfbm9kZSAqbm9kZSwgdWludDE2X3QgZWxlX2FkZHIsIHVpbnQzMl90IGlkLA0KPiAgCQkJdWlu dDhfdCAqYnVmLCB1aW50MTZfdCBidWZfc2l6ZSwgdWludDE2X3QgKnNpemUpOw0KPiAgdWludDE2 X3QgbWVzaF9tb2RlbF9jZmdfYmxrKHVpbnQ4X3QgKnBrdCk7DQo+ICBib29sIG1lc2hfbW9kZWxf c2VuZChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBzcmMsIHVpbnQxNl90IGRzdCwN Cj4gIAkJCQkJdWludDE2X3QgYXBwX2lkeCwgdWludDE2X3QgbmV0X2lkeCwNCj4gIAkJCQkJdWlu dDhfdCB0dGwsIGJvb2wgc2VnbWVudGVkLA0KPiAgCQkJCQljb25zdCB2b2lkICptc2csIHVpbnQx Nl90IG1zZ19sZW4pOw0KPiAtaW50IG1lc2hfbW9kZWxfcHVibGlzaChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCB1aW50MzJfdCBtb2RfaWQsIHVpbnQxNl90IHNyYywNCj4gK2ludCBtZXNoX21vZGVs X3B1Ymxpc2goc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDMyX3QgaWQsIHVpbnQxNl90IHNy YywNCj4gIAkJCQl1aW50OF90IHR0bCwgY29uc3Qgdm9pZCAqbXNnLCB1aW50MTZfdCBtc2dfbGVu KTsNCj4gIGJvb2wgbWVzaF9tb2RlbF9yeChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCBib29sIHN6 bWljdCwgdWludDMyX3Qgc2VxMCwNCj4gIAkJCXVpbnQzMl90IHNlcSwgdWludDMyX3QgaXZfaW5k ZXgsIHVpbnQxNl90IG5ldF9pZHgsDQo+ICAJCQl1aW50MTZfdCBzcmMsIHVpbnQxNl90IGRzdCwg dWludDhfdCBrZXlfYWlkLA0KPiAgCQkJY29uc3QgdWludDhfdCAqZGF0YSwgdWludDE2X3Qgc2l6 ZSk7DQo+ICB2b2lkIG1lc2hfbW9kZWxfYXBwX2tleV9nZW5lcmF0ZV9uZXcoc3RydWN0IG1lc2hf bm9kZSAqbm9kZSwgdWludDE2X3QgbmV0X2lkeCk7DQo+IC12b2lkIG1lc2hfbW9kZWxfYXBwX2tl eV9kZWxldGUoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgc3RydWN0IGxfcXVldWUgKm1vZGVscywN Cj4gLQkJCQkJCQkJdWludDE2X3QgaWR4KTsNCj4gK3ZvaWQgbWVzaF9tb2RlbF9hcHBfa2V5X2Rl bGV0ZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50MTZfdCBlbGVfaWR4LA0KPiArCQkJCXN0 cnVjdCBsX3F1ZXVlICptb2RlbHMsIHVpbnQxNl90IGFwcF9pZHgpOw0KPiAgc3RydWN0IGxfcXVl dWUgKm1lc2hfbW9kZWxfZ2V0X2FwcGtleXMoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSk7DQo+ICB1 aW50MTZfdCBtZXNoX21vZGVsX29wY29kZV9zZXQodWludDMyX3Qgb3Bjb2RlLCB1aW50OF90ICpi dWYpOw0KPiAgYm9vbCBtZXNoX21vZGVsX29wY29kZV9nZXQoY29uc3QgdWludDhfdCAqYnVmLCB1 aW50MTZfdCBzaXplLCB1aW50MzJfdCAqb3Bjb2RlLA0KPiAgCQkJCQkJCQl1aW50MTZfdCAqbik7 DQo+IC12b2lkIG1vZGVsX2J1aWxkX2NvbmZpZyh2b2lkICptb2RlbCwgdm9pZCAqbXNnX2J1aWxk ZXIpOw0KPiAtDQo+IC12b2lkIG1lc2hfbW9kZWxfZW5hYmxlX3B1YihzdHJ1Y3QgbWVzaF9tb2Rl bCAqbW9kLCBib29sIGVuYWJsZSk7DQo+IC1ib29sIG1lc2hfbW9kZWxfaXNfcHViX2VuYWJsZWQo c3RydWN0IG1lc2hfbW9kZWwgKm1vZCk7DQo+IC12b2lkIG1lc2hfbW9kZWxfZW5hYmxlX3N1Yihz dHJ1Y3QgbWVzaF9ub2RlICpub2RlLCBzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kLA0KPiAtCQkJCQkJ CQlib29sIGVuYWJsZSk7DQo+IC1ib29sIG1lc2hfbW9kZWxfaXNfc3ViX2VuYWJsZWQoc3RydWN0 IG1lc2hfbW9kZWwgKm1vZCk7DQo+IC0NCj4gK3ZvaWQgbWVzaF9tb2RlbF9idWlsZF9jb25maWco dm9pZCAqbW9kZWwsIHZvaWQgKm1zZ19idWlsZGVyKTsNCj4gK3ZvaWQgbWVzaF9tb2RlbF91cGRh dGVfb3B0cyhzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IGVsZV9pZHgsDQo+ICsJCQkJ c3RydWN0IGxfcXVldWUgKmN1cnIsIHN0cnVjdCBsX3F1ZXVlICp1cGRhdGVkKTsNCj4gK3VpbnQx Nl90IG1lc2hfbW9kZWxfZ2VuZXJhdGVfY29tcG9zaXRpb24oc3RydWN0IGxfcXVldWUgKm1vZHMs IHVpbnQxNl90IGJ1Zl9zeiwNCj4gKwkJCQkJCQkJdWludDhfdCAqYnVmKTsNCj4gIHZvaWQgbWVz aF9tb2RlbF9pbml0KHZvaWQpOw0KPiAgdm9pZCBtZXNoX21vZGVsX2NsZWFudXAodm9pZCk7DQo+ IGRpZmYgLS1naXQgYS9tZXNoL25vZGUuYyBiL21lc2gvbm9kZS5jDQo+IGluZGV4IDliOTdhYTky Ny4uM2RjYTczY2VmIDEwMDY0NA0KPiAtLS0gYS9tZXNoL25vZGUuYw0KPiArKysgYi9tZXNoL25v ZGUuYw0KPiBAQCAtMiw3ICsyLDcgQEANCj4gICAqDQo+ICAgKiAgQmx1ZVogLSBCbHVldG9vdGgg cHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4DQo+ICAgKg0KPiAtICogIENvcHlyaWdodCAoQykgMjAx Ny0yMDE5ICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqICBD b3B5cmlnaHQgKEMpIDIwMTctMjAyMCAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuDQo+ICAgKg0KPiAgICoNCj4gICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+IEBAIC0xODYsMjggKzE4Niw2IEBA IHN0YXRpYyBib29sIG1hdGNoX2VsZW1lbnRfcGF0aChjb25zdCB2b2lkICphLCBjb25zdCB2b2lk ICpiKQ0KPiAgCXJldHVybiAoIXN0cmNtcChlbGVtZW50LT5wYXRoLCBwYXRoKSk7DQo+ICB9DQo+ ICANCj4gLXN0YXRpYyBib29sIG1hdGNoX21vZGVsX2lkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZv aWQgKmIpDQo+IC17DQo+IC0JY29uc3Qgc3RydWN0IG1lc2hfbW9kZWwgKm1vZCA9IGE7DQo+IC0J dWludDMyX3QgbW9kX2lkID0gTF9QVFJfVE9fVUlOVChiKTsNCj4gLQ0KPiAtCXJldHVybiBtZXNo X21vZGVsX2dldF9tb2RlbF9pZChtb2QpID09IG1vZF9pZDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGlj IGludCBjb21wYXJlX21vZGVsX2lkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQg KnVzZXJfZGF0YSkNCj4gLXsNCj4gLQl1aW50MzJfdCBhX2lkID0gbWVzaF9tb2RlbF9nZXRfbW9k ZWxfaWQoYSk7DQo+IC0JdWludDMyX3QgYl9pZCA9IG1lc2hfbW9kZWxfZ2V0X21vZGVsX2lkKGIp Ow0KPiAtDQo+IC0JaWYgKGFfaWQgPCBiX2lkKQ0KPiAtCQlyZXR1cm4gLTE7DQo+IC0NCj4gLQlp ZiAoYV9pZCA+IGJfaWQpDQo+IC0JCXJldHVybiAxOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19 DQo+IC0NCj4gIHN0cnVjdCBtZXNoX25vZGUgKm5vZGVfZmluZF9ieV91dWlkKHVpbnQ4X3QgdXVp ZFsxNl0pDQo+ICB7DQo+ICAJcmV0dXJuIGxfcXVldWVfZmluZChub2RlcywgbWF0Y2hfZGV2aWNl X3V1aWQsIHV1aWQpOw0KPiBAQCAtMjI1LDI1ICsyMDMsNiBAQCB1aW50OF90ICpub2RlX3V1aWRf Z2V0KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUpDQo+ICAJcmV0dXJuIG5vZGUtPnV1aWQ7DQo+ICB9 DQo+ICANCj4gLXN0YXRpYyB2b2lkIGFkZF9pbnRlcm5hbF9tb2RlbChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCB1aW50MzJfdCBtb2RfaWQsDQo+IC0JCQkJCQkJCXVpbnQ4X3QgZWxlX2lkeCkNCj4g LXsNCj4gLQlzdHJ1Y3Qgbm9kZV9lbGVtZW50ICplbGU7DQo+IC0Jc3RydWN0IG1lc2hfbW9kZWwg Km1vZDsNCj4gLQ0KPiAtCWVsZSA9IGxfcXVldWVfZmluZChub2RlLT5lbGVtZW50cywgbWF0Y2hf ZWxlbWVudF9pZHgsDQo+IC0JCQkJCQkJTF9VSU5UX1RPX1BUUihlbGVfaWR4KSk7DQo+IC0JaWYg KCFlbGUpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCWlmIChsX3F1ZXVlX2ZpbmQoZWxlLT5tb2Rl bHMsIG1hdGNoX21vZGVsX2lkLCBMX1VJTlRfVE9fUFRSKG1vZF9pZCkpKQ0KPiAtCQlyZXR1cm47 DQo+IC0NCj4gLQltb2QgPSBtZXNoX21vZGVsX25ldyhlbGVfaWR4LCBtb2RfaWQpOw0KPiAtDQo+ IC0JbF9xdWV1ZV9pbnNlcnQoZWxlLT5tb2RlbHMsIG1vZCwgY29tcGFyZV9tb2RlbF9pZCwgTlVM TCk7DQo+IC19DQo+IC0NCj4gIHN0YXRpYyB2b2lkIHNldF9kZWZhdWx0cyhzdHJ1Y3QgbWVzaF9u b2RlICpub2RlKQ0KPiAgew0KPiAgCW5vZGUtPmxwbiA9IE1FU0hfTU9ERV9VTlNVUFBPUlRFRDsN Cj4gQEAgLTM1OSw0NiArMzE4LDYgQEAgdm9pZCBub2RlX3JlbW92ZShzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlKQ0KPiAgCWZyZWVfbm9kZV9yZXNvdXJjZXMobm9kZSk7DQo+ICB9DQo+ICANCj4gLXN0 YXRpYyBib29sIGFkZF9tb2RlbHNfZnJvbV9zdG9yYWdlKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUs DQo+IC0JCQkJCXN0cnVjdCBub2RlX2VsZW1lbnQgKmVsZSwNCj4gLQkJCQkJc3RydWN0IG1lc2hf Y29uZmlnX2VsZW1lbnQgKmRiX2VsZSkNCj4gLXsNCj4gLQljb25zdCBzdHJ1Y3QgbF9xdWV1ZV9l bnRyeSAqZW50cnk7DQo+IC0NCj4gLQlpZiAoIWVsZS0+bW9kZWxzKQ0KPiAtCQllbGUtPm1vZGVs cyA9IGxfcXVldWVfbmV3KCk7DQo+IC0NCj4gLQllbnRyeSA9IGxfcXVldWVfZ2V0X2VudHJpZXMo ZGJfZWxlLT5tb2RlbHMpOw0KPiAtDQo+IC0JZm9yICg7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5u ZXh0KSB7DQo+IC0JCXN0cnVjdCBtZXNoX21vZGVsICptb2Q7DQo+IC0JCXN0cnVjdCBtZXNoX2Nv bmZpZ19tb2RlbCAqZGJfbW9kOw0KPiAtCQl1aW50MzJfdCBpZDsNCj4gLQ0KPiAtCQlkYl9tb2Qg PSBlbnRyeS0+ZGF0YTsNCj4gLQ0KPiAtCQlpZCA9IGRiX21vZC0+dmVuZG9yID8gZGJfbW9kLT5p ZCA6IGRiX21vZC0+aWQgfCBWRU5ET1JfSURfTUFTSzsNCj4gLQ0KPiAtCQlpZiAobF9xdWV1ZV9m aW5kKGVsZS0+bW9kZWxzLCBtYXRjaF9tb2RlbF9pZCwNCj4gLQkJCQkJCQlMX1VJTlRfVE9fUFRS KGlkKSkpDQo+IC0JCQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQkJbW9kID0gbWVzaF9tb2RlbF9z ZXR1cChub2RlLCBlbGUtPmlkeCwgZGJfbW9kKTsNCj4gLQkJaWYgKCFtb2QpDQo+IC0JCQlyZXR1 cm4gZmFsc2U7DQo+IC0NCj4gLQkJaWYgKCFkYl9tb2QtPnB1Yl9lbmFibGVkKQ0KPiAtCQkJbWVz aF9tb2RlbF9lbmFibGVfcHViKG1vZCwgZmFsc2UpOw0KPiAtDQo+IC0JCWlmICghZGJfbW9kLT5z dWJfZW5hYmxlZCkNCj4gLQkJCW1lc2hfbW9kZWxfZW5hYmxlX3N1Yihub2RlLCBtb2QsIGZhbHNl KTsNCj4gLQ0KPiAtCQlsX3F1ZXVlX2luc2VydChlbGUtPm1vZGVscywgbW9kLCBjb21wYXJlX21v ZGVsX2lkLCBOVUxMKTsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4gdHJ1ZTsNCj4gLX0NCj4gLQ0K PiAgc3RhdGljIGJvb2wgYWRkX2VsZW1lbnRfZnJvbV9zdG9yYWdlKHN0cnVjdCBtZXNoX25vZGUg Km5vZGUsDQo+ICAJCQkJCXN0cnVjdCBtZXNoX2NvbmZpZ19lbGVtZW50ICpkYl9lbGUpDQo+ICB7 DQo+IEBAIC00MTEsNyArMzMwLDEyIEBAIHN0YXRpYyBib29sIGFkZF9lbGVtZW50X2Zyb21fc3Rv cmFnZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLA0KPiAgCWVsZS0+aWR4ID0gZGJfZWxlLT5pbmRl eDsNCj4gIAllbGUtPmxvY2F0aW9uID0gZGJfZWxlLT5sb2NhdGlvbjsNCj4gIA0KPiAtCWlmICgh ZGJfZWxlLT5tb2RlbHMgfHwgIWFkZF9tb2RlbHNfZnJvbV9zdG9yYWdlKG5vZGUsIGVsZSwgZGJf ZWxlKSkNCj4gKw0KPiArCWlmICghZWxlLT5tb2RlbHMpDQo+ICsJCWVsZS0+bW9kZWxzID0gbF9x dWV1ZV9uZXcoKTsNCj4gKw0KPiArCWlmICghbWVzaF9tb2RlbF9hZGRfZnJvbV9zdG9yYWdlKG5v ZGUsIGVsZS0+aWR4LCBlbGUtPm1vZGVscywNCj4gKwkJCQkJCQlkYl9lbGUtPm1vZGVscykpDQo+ ICAJCXJldHVybiBmYWxzZTsNCj4gIA0KPiAgCWxfcXVldWVfcHVzaF90YWlsKG5vZGUtPmVsZW1l bnRzLCBlbGUpOw0KPiBAQCAtNDI0LDEyICszNDgsMTMgQEAgc3RhdGljIGJvb2wgYWRkX2VsZW1l bnRzX2Zyb21fc3RvcmFnZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLA0KPiAgCWNvbnN0IHN0cnVj dCBsX3F1ZXVlX2VudHJ5ICplbnRyeTsNCj4gIA0KPiAgCWVudHJ5ID0gbF9xdWV1ZV9nZXRfZW50 cmllcyhkYl9ub2RlLT5lbGVtZW50cyk7DQo+ICsNCj4gIAlmb3IgKDsgZW50cnk7IGVudHJ5ID0g ZW50cnktPm5leHQpDQo+ICAJCWlmICghYWRkX2VsZW1lbnRfZnJvbV9zdG9yYWdlKG5vZGUsIGVu dHJ5LT5kYXRhKSkNCj4gIAkJCXJldHVybiBmYWxzZTsNCj4gIA0KPiAgCS8qIEFkZCBjb25maWd1 cmF0aW9uIHNlcnZlciBtb2RlbCBvbiB0aGUgcHJpbWFyeSBlbGVtZW50ICovDQo+IC0JYWRkX2lu dGVybmFsX21vZGVsKG5vZGUsIENPTkZJR19TUlZfTU9ERUwsIFBSSU1BUllfRUxFX0lEWCk7DQo+ ICsJbWVzaF9tb2RlbF9hZGQobm9kZSwgUFJJTUFSWV9FTEVfSURYLCBDT05GSUdfU1JWX01PREVM LCBOVUxMKTsNCj4gIA0KPiAgCXJldHVybiB0cnVlOw0KPiAgfQ0KPiBAQCAtNjI4LDcgKzU1Myw3 IEBAIHZvaWQgbm9kZV9hcHBfa2V5X2RlbGV0ZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50 MTZfdCBuZXRfaWR4LA0KPiAgCWZvciAoOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkgew0K PiAgCQlzdHJ1Y3Qgbm9kZV9lbGVtZW50ICplbGUgPSBlbnRyeS0+ZGF0YTsNCj4gIA0KPiAtCQlt ZXNoX21vZGVsX2FwcF9rZXlfZGVsZXRlKG5vZGUsIGVsZS0+bW9kZWxzLCBhcHBfaWR4KTsNCj4g KwkJbWVzaF9tb2RlbF9hcHBfa2V5X2RlbGV0ZShub2RlLCBlbGUtPmlkeCwgZWxlLT5tb2RlbHMs IGFwcF9pZHgpOw0KPiAgCX0NCj4gIH0NCj4gIA0KPiBAQCAtNjY2LDI3ICs1OTEsMTcgQEAgdWlu dDhfdCBub2RlX2dldF9udW1fZWxlbWVudHMoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSkNCj4gIAly ZXR1cm4gbm9kZS0+bnVtX2VsZTsNCj4gIH0NCj4gIA0KPiAtc3RydWN0IGxfcXVldWUgKm5vZGVf Z2V0X2VsZW1lbnRfbW9kZWxzKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsDQo+IC0JCQkJCQl1aW50 OF90IGVsZV9pZHgsIGludCAqc3RhdHVzKQ0KPiArc3RydWN0IGxfcXVldWUgKm5vZGVfZ2V0X2Vs ZW1lbnRfbW9kZWxzKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgZWxlX2lkeCkNCj4g IHsNCj4gIAlzdHJ1Y3Qgbm9kZV9lbGVtZW50ICplbGU7DQo+ICANCj4gLQlpZiAoIW5vZGUpIHsN Cj4gLQkJaWYgKHN0YXR1cykNCj4gLQkJCSpzdGF0dXMgPSBNRVNIX1NUQVRVU19JTlZBTElEX0FE RFJFU1M7DQo+ICsJaWYgKCFub2RlKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gLQl9DQo+ICANCj4g IAllbGUgPSBsX3F1ZXVlX2ZpbmQobm9kZS0+ZWxlbWVudHMsIG1hdGNoX2VsZW1lbnRfaWR4LA0K PiAgCQkJCQkJCUxfVUlOVF9UT19QVFIoZWxlX2lkeCkpOw0KPiAtCWlmICghZWxlKSB7DQo+IC0J CWlmIChzdGF0dXMpDQo+IC0JCQkqc3RhdHVzID0gTUVTSF9TVEFUVVNfSU5WQUxJRF9BRERSRVNT Ow0KPiArCWlmICghZWxlKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gLQl9DQo+IC0NCj4gLQlpZiAo c3RhdHVzKQ0KPiAtCQkqc3RhdHVzID0gTUVTSF9TVEFUVVNfU1VDQ0VTUzsNCj4gIA0KPiAgCXJl dHVybiBlbGUtPm1vZGVsczsNCj4gIH0NCj4gQEAgLTg4OCw5ICs4MDMsOCBAQCB1aW50OF90IG5v ZGVfZnJpZW5kX21vZGVfZ2V0KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUpDQo+ICBzdGF0aWMgdWlu dDE2X3Qgbm9kZV9nZW5lcmF0ZV9jb21wKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3Qg KmJ1ZiwNCj4gIAkJCQkJCQkJdWludDE2X3Qgc3opDQo+ICB7DQo+IC0JdWludDE2X3QgbiwgZmVh dHVyZXM7DQo+IC0JdWludDE2X3QgbnVtX2VsZSA9IDA7DQo+IC0JY29uc3Qgc3RydWN0IGxfcXVl dWVfZW50cnkgKmVsZV9lbnRyeTsNCj4gKwl1aW50MTZfdCBuLCBmZWF0dXJlcywgbnVtX2VsZSA9 IDA7DQo+ICsJY29uc3Qgc3RydWN0IGxfcXVldWVfZW50cnkgKmVudHJ5Ow0KPiAgDQo+ICAJaWYg KCFub2RlIHx8IHN6IDwgTUlOX0NPTVBfU0laRSkNCj4gIAkJcmV0dXJuIDA7DQo+IEBAIC05MjAs MTIgKzgzNCwxMCBAQCBzdGF0aWMgdWludDE2X3Qgbm9kZV9nZW5lcmF0ZV9jb21wKHN0cnVjdCBt ZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgKmJ1ZiwNCj4gIAlsX3B1dF9sZTE2KGZlYXR1cmVzLCBi dWYgKyBuKTsNCj4gIAluICs9IDI7DQo+ICANCj4gLQllbGVfZW50cnkgPSBsX3F1ZXVlX2dldF9l bnRyaWVzKG5vZGUtPmVsZW1lbnRzKTsNCj4gLQlmb3IgKDsgZWxlX2VudHJ5OyBlbGVfZW50cnkg PSBlbGVfZW50cnktPm5leHQpIHsNCj4gLQkJc3RydWN0IG5vZGVfZWxlbWVudCAqZWxlID0gZWxl X2VudHJ5LT5kYXRhOw0KPiAtCQljb25zdCBzdHJ1Y3QgbF9xdWV1ZV9lbnRyeSAqbW9kX2VudHJ5 Ow0KPiAtCQl1aW50OF90IG51bV9zID0gMCwgbnVtX3YgPSAwOw0KPiAtCQl1aW50OF90ICptb2Rf YnVmOw0KPiArCWVudHJ5ID0gbF9xdWV1ZV9nZXRfZW50cmllcyhub2RlLT5lbGVtZW50cyk7DQo+ ICsNCj4gKwlmb3IgKDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpIHsNCj4gKwkJc3RydWN0 IG5vZGVfZWxlbWVudCAqZWxlID0gZW50cnktPmRhdGE7DQo+ICANCj4gIAkJaWYgKGVsZS0+aWR4 ICE9IG51bV9lbGUpDQo+ICAJCQlyZXR1cm4gMDsNCj4gQEAgLTkzOSw1OSArODUxLDggQEAgc3Rh dGljIHVpbnQxNl90IG5vZGVfZ2VuZXJhdGVfY29tcChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1 aW50OF90ICpidWYsDQo+ICAJCWxfcHV0X2xlMTYoZWxlLT5sb2NhdGlvbiwgYnVmICsgbik7DQo+ ICAJCW4gKz0gMjsNCj4gIA0KPiAtCQkvKiBTdG9yZSBtb2RlbHMgSURzLCBzdG9yZSBudW1fcyBh bmQgbnVtX3YgbGF0ZXIgKi8NCj4gLQkJbW9kX2J1ZiA9IGJ1ZiArIG47DQo+IC0JCW4gKz0gMjsN Cj4gLQ0KPiAtCQkvKiBHZXQgU0lHIG1vZGVscyAqLw0KPiAtCQltb2RfZW50cnkgPSBsX3F1ZXVl X2dldF9lbnRyaWVzKGVsZS0+bW9kZWxzKTsNCj4gLQkJZm9yICg7IG1vZF9lbnRyeTsgbW9kX2Vu dHJ5ID0gbW9kX2VudHJ5LT5uZXh0KSB7DQo+IC0JCQlzdHJ1Y3QgbWVzaF9tb2RlbCAqbW9kID0g bW9kX2VudHJ5LT5kYXRhOw0KPiAtCQkJdWludDMyX3QgbW9kX2lkOw0KPiAtDQo+IC0JCQltb2Rf aWQgPSBtZXNoX21vZGVsX2dldF9tb2RlbF9pZCgNCj4gLQkJCQkJKGNvbnN0IHN0cnVjdCBtZXNo X21vZGVsICopIG1vZCk7DQo+IC0NCj4gLQkJCWlmICgobW9kX2lkICYgVkVORE9SX0lEX01BU0sp ID09IFZFTkRPUl9JRF9NQVNLKSB7DQo+IC0JCQkJaWYgKG4gKyAyID4gc3opDQo+IC0JCQkJCWdv dG8gZWxlbWVudF9kb25lOw0KPiAtDQo+IC0JCQkJbF9wdXRfbGUxNigodWludDE2X3QpIChtb2Rf aWQgJiAweGZmZmYpLA0KPiAtCQkJCQkJCQlidWYgKyBuKTsNCj4gLQkJCQluICs9IDI7DQo+IC0J CQkJbnVtX3MrKzsNCj4gLQkJCX0NCj4gLQkJfQ0KPiAtDQo+IC0JCS8qIEdldCB2ZW5kb3IgbW9k ZWxzICovDQo+IC0JCW1vZF9lbnRyeSA9IGxfcXVldWVfZ2V0X2VudHJpZXMoZWxlLT5tb2RlbHMp Ow0KPiAtCQlmb3IgKDsgbW9kX2VudHJ5OyBtb2RfZW50cnkgPSBtb2RfZW50cnktPm5leHQpIHsN Cj4gLQkJCXN0cnVjdCBtZXNoX21vZGVsICptb2QgPSBtb2RfZW50cnktPmRhdGE7DQo+IC0JCQl1 aW50MzJfdCBtb2RfaWQ7DQo+IC0JCQl1aW50MTZfdCB2ZW5kb3I7DQo+IC0NCj4gLQkJCW1vZF9p ZCA9IG1lc2hfbW9kZWxfZ2V0X21vZGVsX2lkKA0KPiAtCQkJCQkoY29uc3Qgc3RydWN0IG1lc2hf bW9kZWwgKikgbW9kKTsNCj4gLQ0KPiAtCQkJdmVuZG9yID0gKHVpbnQxNl90KSAobW9kX2lkID4+ IDE2KTsNCj4gLQkJCWlmICh2ZW5kb3IgIT0gMHhmZmZmKSB7DQo+IC0JCQkJaWYgKG4gKyA0ID4g c3opDQo+IC0JCQkJCWdvdG8gZWxlbWVudF9kb25lOw0KPiAtDQo+IC0JCQkJbF9wdXRfbGUxNih2 ZW5kb3IsIGJ1ZiArIG4pOw0KPiAtCQkJCW4gKz0gMjsNCj4gLQkJCQlsX3B1dF9sZTE2KCh1aW50 MTZfdCkgKG1vZF9pZCAmIDB4ZmZmZiksDQo+ICsJCW4gKz0gbWVzaF9tb2RlbF9nZW5lcmF0ZV9j b21wb3NpdGlvbihlbGUtPm1vZGVscywgc3ogLSBuLA0KPiAgCQkJCQkJCQlidWYgKyBuKTsNCj4g LQkJCQluICs9IDI7DQo+IC0JCQkJbnVtX3YrKzsNCj4gLQkJCX0NCj4gLQ0KPiAtCQl9DQo+IC0N Cj4gLWVsZW1lbnRfZG9uZToNCj4gLQkJbW9kX2J1ZlswXSA9IG51bV9zOw0KPiAtCQltb2RfYnVm WzFdID0gbnVtX3Y7DQo+IC0NCj4gIAl9DQo+ICANCj4gIAlpZiAoIW51bV9lbGUpDQo+IEBAIC0x MTI4LDUyICs5ODksNiBAQCBzdGF0aWMgdm9pZCBhcHBfZGlzY19jYihzdHJ1Y3QgbF9kYnVzICpi dXMsIHZvaWQgKnVzZXJfZGF0YSkNCj4gIAlmcmVlX25vZGVfZGJ1c19yZXNvdXJjZXMobm9kZSk7 DQo+ICB9DQo+ICANCj4gLXN0YXRpYyBib29sIGdldF9tb2RlbF9vcHRpb25zKHN0cnVjdCBtZXNo X25vZGUgKm5vZGUsIHN0cnVjdCBtZXNoX21vZGVsICptb2QsDQo+IC0JCQkJCXN0cnVjdCBsX2Ri dXNfbWVzc2FnZV9pdGVyICpvcHRzKQ0KPiAtew0KPiAtCWNvbnN0IGNoYXIgKmtleTsNCj4gLQlz dHJ1Y3QgbF9kYnVzX21lc3NhZ2VfaXRlciB2YXI7DQo+IC0JYm9vbCBvcHQ7DQo+IC0NCj4gLQl3 aGlsZSAobF9kYnVzX21lc3NhZ2VfaXRlcl9uZXh0X2VudHJ5KG9wdHMsICZrZXksICZ2YXIpKSB7 DQo+IC0NCj4gLQkJaWYgKCFzdHJjbXAoa2V5LCAiUHVibGlzaCIpKSB7DQo+IC0JCQlpZiAoIWxf ZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X3ZhcmlhbnQoJnZhciwgImIiLCAmb3B0KSkNCj4gLQkJCQly ZXR1cm4gZmFsc2U7DQo+IC0JCQltZXNoX21vZGVsX2VuYWJsZV9wdWIobW9kLCBvcHQpOw0KPiAt CQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAiU3Vic2NyaWJlIikpIHsNCj4gLQkJCWlmICghbF9k YnVzX21lc3NhZ2VfaXRlcl9nZXRfdmFyaWFudCgmdmFyLCAiYiIsICZvcHQpKQ0KPiAtCQkJCXJl dHVybiBmYWxzZTsNCj4gLQkJCW1lc2hfbW9kZWxfZW5hYmxlX3N1Yihub2RlLCBtb2QsIG9wdCk7 DQo+IC0JCX0gZWxzZQ0KPiAtCQkJcmV0dXJuIGZhbHNlOw0KPiAtCX0NCj4gLQ0KPiAtCXJldHVy biB0cnVlOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgYm9vbCBnZW5lcmF0ZV9tb2RlbChzdHJ1Y3Qg bWVzaF9ub2RlICpub2RlLCBzdHJ1Y3Qgbm9kZV9lbGVtZW50ICplbGUsDQo+IC0JCQkJdWludDMy X3QgaWQsIHN0cnVjdCBsX2RidXNfbWVzc2FnZV9pdGVyICpvcHRzKQ0KPiAtew0KPiAtCXN0cnVj dCBtZXNoX21vZGVsICptb2Q7DQo+IC0NCj4gLQkvKiBEaXNhbGxvdyBkdXBsaWNhdGVzICovDQo+ IC0JaWYgKGxfcXVldWVfZmluZChlbGUtPm1vZGVscywgbWF0Y2hfbW9kZWxfaWQsDQo+IC0JCQkg TF9VSU5UX1RPX1BUUihpZCkpKQ0KPiAtCQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQltb2QgPSBt ZXNoX21vZGVsX25ldyhlbGUtPmlkeCwgaWQpOw0KPiAtDQo+IC0JaWYgKCFnZXRfbW9kZWxfb3B0 aW9ucyhub2RlLCBtb2QsIG9wdHMpKSB7DQo+IC0JCWxfZnJlZShtb2QpOw0KPiAtCQlyZXR1cm4g ZmFsc2U7DQo+IC0JfQ0KPiAtDQo+IC0JbF9xdWV1ZV9pbnNlcnQoZWxlLT5tb2RlbHMsIG1vZCwg Y29tcGFyZV9tb2RlbF9pZCwgTlVMTCk7DQo+IC0NCj4gLQlyZXR1cm4gdHJ1ZTsNCj4gLX0NCj4g LQ0KPiAgc3RhdGljIGJvb2wgZ2V0X3NpZ19tb2RlbHNfZnJvbV9wcm9wZXJ0aWVzKHN0cnVjdCBt ZXNoX25vZGUgKm5vZGUsDQo+ICAJCQkJCXN0cnVjdCBub2RlX2VsZW1lbnQgKmVsZSwNCj4gIAkJ CQkJc3RydWN0IGxfZGJ1c19tZXNzYWdlX2l0ZXIgKnByb3BlcnR5KQ0KPiBAQCAtMTE4OSwxMyAr MTAwNCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRfc2lnX21vZGVsc19mcm9tX3Byb3BlcnRpZXMoc3Ry dWN0IG1lc2hfbm9kZSAqbm9kZSwNCj4gIA0KPiAgCS8qIEJsdWV0b290aCBTSUcgZGVmaW5lZCBt b2RlbHMgKi8NCj4gIAl3aGlsZSAobF9kYnVzX21lc3NhZ2VfaXRlcl9uZXh0X2VudHJ5KCZtb2Rz LCAmbV9pZCwgJnZhcikpIHsNCj4gLQkJdWludDMyX3QgaWQgPSBtX2lkIHwgVkVORE9SX0lEX01B U0s7DQo+ICsJCXVpbnQzMl90IGlkID0gU0VUX0lEKFNJR19WRU5ET1IsIG1faWQpOw0KPiAgDQo+ ICAJCS8qIEFsbG93IENvbmZpZyBTZXJ2ZXIgTW9kZWwgb25seSBvbiB0aGUgcHJpbWFyeSBlbGVt ZW50ICovDQo+ICAJCWlmIChlbGUtPmlkeCAhPSBQUklNQVJZX0VMRV9JRFggJiYgaWQgPT0gQ09O RklHX1NSVl9NT0RFTCkNCj4gIAkJCXJldHVybiBmYWxzZTsNCj4gIA0KPiAtCQlpZiAoIWdlbmVy YXRlX21vZGVsKG5vZGUsIGVsZSwgaWQsICZ2YXIpKQ0KPiArCQlpZiAoIW1lc2hfbW9kZWxfYWRk KG5vZGUsIGVsZS0+bW9kZWxzLCBpZCwgJnZhcikpDQo+ICAJCQlyZXR1cm4gZmFsc2U7DQo+ICAJ fQ0KPiAgDQo+IEBAIC0xMjE3LDkgKzEwMzIsOSBAQCBzdGF0aWMgYm9vbCBnZXRfdmVuZG9yX21v ZGVsc19mcm9tX3Byb3BlcnRpZXMoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwNCj4gIA0KPiAgCS8q IFZlbmRvciBkZWZpbmVkIG1vZGVscyAqLw0KPiAgCXdoaWxlIChsX2RidXNfbWVzc2FnZV9pdGVy X25leHRfZW50cnkoJm1vZHMsICZ2X2lkLCAmbV9pZCwgJnZhcikpIHsNCj4gLQkJdWludDMyX3Qg aWQgPSBtX2lkIHwgKHZfaWQgPDwgMTYpOw0KPiArCQl1aW50MzJfdCBpZCA9IFNFVF9JRCh2X2lk LCBtX2lkKTsNCj4gIA0KPiAtCQlpZiAoIWdlbmVyYXRlX21vZGVsKG5vZGUsIGVsZSwgaWQsICZ2 YXIpKQ0KPiArCQlpZiAoIW1lc2hfbW9kZWxfYWRkKG5vZGUsIGVsZS0+bW9kZWxzLCBpZCwgJnZh cikpDQo+ICAJCQlyZXR1cm4gZmFsc2U7DQo+ICAJfQ0KPiAgDQo+IEBAIC0xMjk1LDcgKzExMTAs NyBAQCBzdGF0aWMgYm9vbCBnZXRfZWxlbWVudF9wcm9wZXJ0aWVzKHN0cnVjdCBtZXNoX25vZGUg Km5vZGUsIGNvbnN0IGNoYXIgKnBhdGgsDQo+ICAJICogdGhlIG9wZXJhdGlvbiBiZWxvdyB3aWxs IGJlIGEgIm5vLW9wIi4NCj4gIAkgKi8NCj4gIAlpZiAoZWxlLT5pZHggPT0gUFJJTUFSWV9FTEVf SURYKQ0KPiAtCQlhZGRfaW50ZXJuYWxfbW9kZWwobm9kZSwgQ09ORklHX1NSVl9NT0RFTCwgUFJJ TUFSWV9FTEVfSURYKTsNCj4gKwkJbWVzaF9tb2RlbF9hZGQobm9kZSwgZWxlLT5tb2RlbHMsIENP TkZJR19TUlZfTU9ERUwsIE5VTEwpOw0KPiAgDQo+ICAJcmV0dXJuIHRydWU7DQo+ICBmYWlsOg0K PiBAQCAtMTMzMiw3ICsxMTQ3LDYgQEAgc3RhdGljIHZvaWQgY29udmVydF9ub2RlX3RvX3N0b3Jh Z2Uoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwNCj4gIAlmb3IgKDsgZW50cnk7IGVudHJ5ID0gZW50 cnktPm5leHQpIHsNCj4gIAkJc3RydWN0IG5vZGVfZWxlbWVudCAqZWxlID0gZW50cnktPmRhdGE7 DQo+ICAJCXN0cnVjdCBtZXNoX2NvbmZpZ19lbGVtZW50ICpkYl9lbGU7DQo+IC0JCWNvbnN0IHN0 cnVjdCBsX3F1ZXVlX2VudHJ5ICptb2RfZW50cnk7DQo+ICANCj4gIAkJZGJfZWxlID0gbF9uZXco c3RydWN0IG1lc2hfY29uZmlnX2VsZW1lbnQsIDEpOw0KPiAgDQo+IEBAIC0xMzQwLDIxICsxMTU0 LDggQEAgc3RhdGljIHZvaWQgY29udmVydF9ub2RlX3RvX3N0b3JhZ2Uoc3RydWN0IG1lc2hfbm9k ZSAqbm9kZSwNCj4gIAkJZGJfZWxlLT5sb2NhdGlvbiA9IGVsZS0+bG9jYXRpb247DQo+ICAJCWRi X2VsZS0+bW9kZWxzID0gbF9xdWV1ZV9uZXcoKTsNCj4gIA0KPiAtCQltb2RfZW50cnkgPSBsX3F1 ZXVlX2dldF9lbnRyaWVzKGVsZS0+bW9kZWxzKTsNCj4gLQ0KPiAtCQlmb3IgKDsgbW9kX2VudHJ5 OyBtb2RfZW50cnkgPSBtb2RfZW50cnktPm5leHQpIHsNCj4gLQkJCXN0cnVjdCBtZXNoX21vZGVs ICptb2QgPSBtb2RfZW50cnktPmRhdGE7DQo+IC0JCQlzdHJ1Y3QgbWVzaF9jb25maWdfbW9kZWwg KmRiX21vZDsNCj4gLQkJCXVpbnQzMl90IG1vZF9pZCA9IG1lc2hfbW9kZWxfZ2V0X21vZGVsX2lk KG1vZCk7DQo+ICsJCW1lc2hfbW9kZWxfY29udmVydF90b19zdG9yYWdlKGRiX2VsZS0+bW9kZWxz LCBlbGUtPm1vZGVscyk7DQo+ICANCj4gLQkJCWRiX21vZCA9IGxfbmV3KHN0cnVjdCBtZXNoX2Nv bmZpZ19tb2RlbCwgMSk7DQo+IC0JCQlkYl9tb2QtPmlkID0gbW9kX2lkOw0KPiAtCQkJZGJfbW9k LT52ZW5kb3IgPSAoKG1vZF9pZCAmIFZFTkRPUl9JRF9NQVNLKQ0KPiAtCQkJCQkJCSE9IFZFTkRP Ul9JRF9NQVNLKTsNCj4gLQkJCWRiX21vZC0+cHViX2VuYWJsZWQgPSBtZXNoX21vZGVsX2lzX3B1 Yl9lbmFibGVkKG1vZCk7DQo+IC0JCQlkYl9tb2QtPnN1Yl9lbmFibGVkID0gbWVzaF9tb2RlbF9p c19zdWJfZW5hYmxlZChtb2QpOw0KPiAtCQkJbF9xdWV1ZV9wdXNoX3RhaWwoZGJfZWxlLT5tb2Rl bHMsIGRiX21vZCk7DQo+IC0JCX0NCj4gIAkJbF9xdWV1ZV9wdXNoX3RhaWwoZGJfbm9kZS0+ZWxl bWVudHMsIGRiX2VsZSk7DQo+ICAJfQ0KPiAgDQo+IEBAIC0xMzc1LDYgKzExNzYsNyBAQCBzdGF0 aWMgYm9vbCBjcmVhdGVfbm9kZV9jb25maWcoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgY29uc3Qg dWludDhfdCB1dWlkWzE2XSkNCj4gIA0KPiAgCS8qIEZyZWUgdGVtcG9yYXJpbHkgYWxsb2NhdGVk IHJlc291cmNlcyAqLw0KPiAgCWVudHJ5ID0gbF9xdWV1ZV9nZXRfZW50cmllcyhkYl9ub2RlLmVs ZW1lbnRzKTsNCj4gKw0KPiAgCWZvciAoOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkgew0K PiAgCQlzdHJ1Y3QgbWVzaF9jb25maWdfZWxlbWVudCAqZGJfZWxlID0gZW50cnktPmRhdGE7DQo+ ICANCj4gQEAgLTE1MTcsNyArMTMxOSw2IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9tb2RlbF9vcHRp b25zKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsDQo+ICAJbGVuID0gbF9xdWV1ZV9sZW5ndGgobm9k ZS0+ZWxlbWVudHMpOw0KPiAgDQo+ICAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQo+IC0J CWNvbnN0IHN0cnVjdCBsX3F1ZXVlX2VudHJ5ICplbnRyeTsNCj4gIA0KPiAgCQllbGUgPSBsX3F1 ZXVlX2ZpbmQobm9kZS0+ZWxlbWVudHMsIG1hdGNoX2VsZW1lbnRfaWR4LA0KPiAgCQkJCQkJCUxf VUlOVF9UT19QVFIoaSkpOw0KPiBAQCAtMTUyNiw0MiArMTMyNyw4IEBAIHN0YXRpYyB2b2lkIHVw ZGF0ZV9tb2RlbF9vcHRpb25zKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsDQo+ICAJCWlmICghZWxl IHx8ICFlbGVfYXR0YWNoKQ0KPiAgCQkJY29udGludWU7DQo+ICANCj4gLQkJZW50cnkgPSBsX3F1 ZXVlX2dldF9lbnRyaWVzKGVsZS0+bW9kZWxzKTsNCj4gLQ0KPiAtCQlmb3IgKDsgZW50cnk7IGVu dHJ5ID0gZW50cnktPm5leHQpIHsNCj4gLQkJCXN0cnVjdCBtZXNoX21vZGVsICptb2QsICp1cGRh dGVkX21vZCA9IGVudHJ5LT5kYXRhOw0KPiAtCQkJdWludDMyX3QgaWQgPSBtZXNoX21vZGVsX2dl dF9tb2RlbF9pZCh1cGRhdGVkX21vZCk7DQo+IC0JCQlib29sIG9wdCwgdXBkYXRlZF9vcHQ7DQo+ IC0JCQlib29sIHZlbmRvciA9IGlkIDwgVkVORE9SX0lEX01BU0s7DQo+IC0NCj4gLQkJCW1vZCA9 IGxfcXVldWVfZmluZChlbGVfYXR0YWNoLT5tb2RlbHMsIG1hdGNoX21vZGVsX2lkLA0KPiAtCQkJ CQkJCUxfVUlOVF9UT19QVFIoaWQpKTsNCj4gLQkJCWlmICghbW9kKQ0KPiAtCQkJCWNvbnRpbnVl Ow0KPiAtDQo+IC0JCQlpZiAoIXZlbmRvcikNCj4gLQkJCQlpZCAmPSB+VkVORE9SX0lEX01BU0s7 DQo+IC0NCj4gLQkJCW9wdCA9IG1lc2hfbW9kZWxfaXNfcHViX2VuYWJsZWQobW9kKTsNCj4gLQkJ CXVwZGF0ZWRfb3B0ID0gbWVzaF9tb2RlbF9pc19wdWJfZW5hYmxlZCh1cGRhdGVkX21vZCk7DQo+ IC0NCj4gLQkJCWlmICh1cGRhdGVkX29wdCAhPSBvcHQpIHsNCj4gLQkJCQltZXNoX21vZGVsX2Vu YWJsZV9wdWIobW9kLCB1cGRhdGVkX29wdCk7DQo+IC0JCQkJbWVzaF9jb25maWdfbW9kZWxfcHVi X2VuYWJsZShhdHRhY2gtPmNmZywNCj4gLQkJCQkJCQlhdHRhY2gtPnByaW1hcnkgKyBpLCBpZCwN Cj4gLQkJCQkJCQl2ZW5kb3IsIHVwZGF0ZWRfb3B0KTsNCj4gLQkJCX0NCj4gLQ0KPiAtCQkJb3B0 ID0gbWVzaF9tb2RlbF9pc19zdWJfZW5hYmxlZChtb2QpOw0KPiAtCQkJdXBkYXRlZF9vcHQgPSBt ZXNoX21vZGVsX2lzX3N1Yl9lbmFibGVkKHVwZGF0ZWRfbW9kKTsNCj4gLQ0KPiAtCQkJaWYgKHVw ZGF0ZWRfb3B0ICE9IG9wdCkgew0KPiAtCQkJCW1lc2hfbW9kZWxfZW5hYmxlX3N1Yihub2RlLCBt b2QsIHVwZGF0ZWRfb3B0KTsNCj4gLQkJCQltZXNoX2NvbmZpZ19tb2RlbF9zdWJfZW5hYmxlKGF0 dGFjaC0+Y2ZnLA0KPiAtCQkJCQkJCWF0dGFjaC0+cHJpbWFyeSArIGksIGlkLA0KPiAtCQkJCQkJ CXZlbmRvciwgdXBkYXRlZF9vcHQpOw0KPiAtCQkJfQ0KPiAtCQl9DQo+ICsJCW1lc2hfbW9kZWxf dXBkYXRlX29wdHMobm9kZSwgZWxlLT5pZHgsIGVsZV9hdHRhY2gtPm1vZGVscywNCj4gKwkJCQkJ CQkJZWxlLT5tb2RlbHMpOw0KPiAgCX0NCj4gIH0NCj4gIA0KPiBAQCAtMTk2NCw3ICsxNzMxLDcg QEAgc3RhdGljIHZvaWQgYnVpbGRfZWxlbWVudF9jb25maWcodm9pZCAqYSwgdm9pZCAqYikNCj4g IAlsX2RidXNfbWVzc2FnZV9idWlsZGVyX2VudGVyX2FycmF5KGJ1aWxkZXIsICIocWF7c3Z9KSIp Ow0KPiAgDQo+ICAJLyogSXRlcmF0ZSBvdmVyIG1vZGVscyAqLw0KPiAtCWxfcXVldWVfZm9yZWFj aChlbGUtPm1vZGVscywgbW9kZWxfYnVpbGRfY29uZmlnLCBidWlsZGVyKTsNCj4gKwlsX3F1ZXVl X2ZvcmVhY2goZWxlLT5tb2RlbHMsIG1lc2hfbW9kZWxfYnVpbGRfY29uZmlnLCBidWlsZGVyKTsN Cj4gIA0KPiAgCWxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfbGVhdmVfYXJyYXkoYnVpbGRlcik7DQo+ ICANCj4gQEAgLTIyMTYsOCArMTk4Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgbF9kYnVzX21lc3NhZ2Ug KnB1Ymxpc2hfY2FsbChzdHJ1Y3QgbF9kYnVzICpkYnVzLA0KPiAgCXN0cnVjdCBsX2RidXNfbWVz c2FnZV9pdGVyIGl0ZXJfZGF0YTsNCj4gIAl1aW50MTZfdCBtb2RfaWQsIHNyYzsNCj4gIAlzdHJ1 Y3Qgbm9kZV9lbGVtZW50ICplbGU7DQo+IC0JdWludDhfdCAqZGF0YTsNCj4gLQl1aW50MzJfdCBs ZW47DQo+ICsJdWludDhfdCAqZGF0YSwgdHRsOw0KPiArCXVpbnQzMl90IGxlbiwgaWQ7DQo+ICAJ aW50IHJlc3VsdDsNCj4gIA0KPiAgCWxfZGVidWcoIlB1Ymxpc2giKTsNCj4gQEAgLTIyNDMsOCAr MjAxMCwxMCBAQCBzdGF0aWMgc3RydWN0IGxfZGJ1c19tZXNzYWdlICpwdWJsaXNoX2NhbGwoc3Ry dWN0IGxfZGJ1cyAqZGJ1cywNCj4gIAkJcmV0dXJuIGRidXNfZXJyb3IobXNnLCBNRVNIX0VSUk9S X0lOVkFMSURfQVJHUywNCj4gIAkJCQkJCQkiSW5jb3JyZWN0IGRhdGEiKTsNCj4gIA0KPiAtCXJl c3VsdCA9IG1lc2hfbW9kZWxfcHVibGlzaChub2RlLCBWRU5ET1JfSURfTUFTSyB8IG1vZF9pZCwg c3JjLA0KPiAtCQkJCW1lc2hfbmV0X2dldF9kZWZhdWx0X3R0bChub2RlLT5uZXQpLCBkYXRhLCBs ZW4pOw0KPiArCXR0bCA9IG1lc2hfbmV0X2dldF9kZWZhdWx0X3R0bChub2RlLT5uZXQpOw0KPiAr DQo+ICsJaWQgPSBTRVRfSUQoU0lHX1ZFTkRPUiwgbW9kX2lkKTsNCj4gKwlyZXN1bHQgPSBtZXNo X21vZGVsX3B1Ymxpc2gobm9kZSwgaWQsIHNyYywgdHRsLCBkYXRhLCBsZW4pOw0KPiAgDQo+ICAJ aWYgKHJlc3VsdCAhPSBNRVNIX0VSUk9SX05PTkUpDQo+ICAJCXJldHVybiBkYnVzX2Vycm9yKG1z ZywgcmVzdWx0LCBOVUxMKTsNCj4gQEAgLTIyNTksMTEgKzIwMjgsOSBAQCBzdGF0aWMgc3RydWN0 IGxfZGJ1c19tZXNzYWdlICp2ZW5kb3JfcHVibGlzaF9jYWxsKHN0cnVjdCBsX2RidXMgKmRidXMs DQo+ICAJc3RydWN0IG1lc2hfbm9kZSAqbm9kZSA9IHVzZXJfZGF0YTsNCj4gIAljb25zdCBjaGFy ICpzZW5kZXIsICplbGVfcGF0aDsNCj4gIAlzdHJ1Y3QgbF9kYnVzX21lc3NhZ2VfaXRlciBpdGVy X2RhdGE7DQo+IC0JdWludDE2X3Qgc3JjOw0KPiAtCXVpbnQxNl90IG1vZGVsX2lkLCB2ZW5kb3I7 DQo+IC0JdWludDMyX3QgdmVuZG9yX21vZF9pZDsNCj4gKwl1aW50MTZfdCBzcmMsIG1vZF9pZCwg dmVuZG9yX2lkOw0KPiAgCXN0cnVjdCBub2RlX2VsZW1lbnQgKmVsZTsNCj4gLQl1aW50OF90ICpk YXRhID0gTlVMTDsNCj4gKwl1aW50OF90IHR0bCwgKmRhdGEgPSBOVUxMOw0KPiAgCXVpbnQzMl90 IGxlbjsNCj4gIAlpbnQgcmVzdWx0Ow0KPiAgDQo+IEBAIC0yMjc0LDggKzIwNDEsOCBAQCBzdGF0 aWMgc3RydWN0IGxfZGJ1c19tZXNzYWdlICp2ZW5kb3JfcHVibGlzaF9jYWxsKHN0cnVjdCBsX2Ri dXMgKmRidXMsDQo+ICAJaWYgKHN0cmNtcChzZW5kZXIsIG5vZGUtPm93bmVyKSkNCj4gIAkJcmV0 dXJuIGRidXNfZXJyb3IobXNnLCBNRVNIX0VSUk9SX05PVF9BVVRIT1JJWkVELCBOVUxMKTsNCj4g IA0KPiAtCWlmICghbF9kYnVzX21lc3NhZ2VfZ2V0X2FyZ3VtZW50cyhtc2csICJvcXFheSIsICZl bGVfcGF0aCwgJnZlbmRvciwNCj4gLQkJCQkJCQkmbW9kZWxfaWQsICZpdGVyX2RhdGEpKQ0KPiAr CWlmICghbF9kYnVzX21lc3NhZ2VfZ2V0X2FyZ3VtZW50cyhtc2csICJvcXFheSIsICZlbGVfcGF0 aCwgJnZlbmRvcl9pZCwNCj4gKwkJCQkJCQkmbW9kX2lkLCAmaXRlcl9kYXRhKSkNCj4gIAkJcmV0 dXJuIGRidXNfZXJyb3IobXNnLCBNRVNIX0VSUk9SX0lOVkFMSURfQVJHUywgTlVMTCk7DQo+ICAN Cj4gIAllbGUgPSBsX3F1ZXVlX2ZpbmQobm9kZS0+ZWxlbWVudHMsIG1hdGNoX2VsZW1lbnRfcGF0 aCwgZWxlX3BhdGgpOw0KPiBAQCAtMjI5MCw5ICsyMDU3LDkgQEAgc3RhdGljIHN0cnVjdCBsX2Ri dXNfbWVzc2FnZSAqdmVuZG9yX3B1Ymxpc2hfY2FsbChzdHJ1Y3QgbF9kYnVzICpkYnVzLA0KPiAg CQlyZXR1cm4gZGJ1c19lcnJvcihtc2csIE1FU0hfRVJST1JfSU5WQUxJRF9BUkdTLA0KPiAgCQkJ CQkJCSJJbmNvcnJlY3QgZGF0YSIpOw0KPiAgDQo+IC0JdmVuZG9yX21vZF9pZCA9ICh2ZW5kb3Ig PDwgMTYpIHwgbW9kZWxfaWQ7DQo+IC0JcmVzdWx0ID0gbWVzaF9tb2RlbF9wdWJsaXNoKG5vZGUs IHZlbmRvcl9tb2RfaWQsIHNyYywNCj4gLQkJCQltZXNoX25ldF9nZXRfZGVmYXVsdF90dGwobm9k ZS0+bmV0KSwgZGF0YSwgbGVuKTsNCj4gKwl0dGwgPSBtZXNoX25ldF9nZXRfZGVmYXVsdF90dGwo bm9kZS0+bmV0KTsNCj4gKwlyZXN1bHQgPSBtZXNoX21vZGVsX3B1Ymxpc2gobm9kZSwgU0VUX0lE KHZlbmRvcl9pZCwgbW9kX2lkKSwgc3JjLCB0dGwsDQo+ICsJCQkJCQkJCWRhdGEsIGxlbik7DQo+ ICANCj4gIAlpZiAocmVzdWx0ICE9IE1FU0hfRVJST1JfTk9ORSkNCj4gIAkJcmV0dXJuIGRidXNf ZXJyb3IobXNnLCByZXN1bHQsIE5VTEwpOw0KPiBkaWZmIC0tZ2l0IGEvbWVzaC9ub2RlLmggYi9t ZXNoL25vZGUuaA0KPiBpbmRleCBkZjA1ODQ1OGEuLjQ3Yzk5ODUzMCAxMDA2NDQNCj4gLS0tIGEv bWVzaC9ub2RlLmgNCj4gKysrIGIvbWVzaC9ub2RlLmgNCj4gQEAgLTU4LDggKzU4LDggQEAgYm9v bCBub2RlX2RlZmF1bHRfdHRsX3NldChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IHR0 bCk7DQo+ICBib29sIG5vZGVfc2V0X3NlcXVlbmNlX251bWJlcihzdHJ1Y3QgbWVzaF9ub2RlICpu b2RlLCB1aW50MzJfdCBzZXEpOw0KPiAgdWludDMyX3Qgbm9kZV9nZXRfc2VxdWVuY2VfbnVtYmVy KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUpOw0KPiAgaW50IG5vZGVfZ2V0X2VsZW1lbnRfaWR4KHN0 cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQxNl90IGVsZV9hZGRyKTsNCj4gLXN0cnVjdCBsX3F1 ZXVlICpub2RlX2dldF9lbGVtZW50X21vZGVscyhzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50 OF90IGVsZV9pZHgsDQo+IC0JCQkJCQkJCWludCAqc3RhdHVzKTsNCj4gK3N0cnVjdCBsX3F1ZXVl ICpub2RlX2dldF9lbGVtZW50X21vZGVscyhzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLA0KPiArCQkJ CQkJCXVpbnQ4X3QgZWxlX2lkeCk7DQo+ICB1aW50MTZfdCBub2RlX2dldF9jcnBsKHN0cnVjdCBt ZXNoX25vZGUgKm5vZGUpOw0KPiAgYm9vbCBub2RlX2luaXRfZnJvbV9zdG9yYWdlKHN0cnVjdCBt ZXNoX25vZGUgKm5vZGUsIGNvbnN0IHVpbnQ4X3QgdXVpZFsxNl0sDQo+ICAJCQkJCXN0cnVjdCBt ZXNoX2NvbmZpZ19ub2RlICpkYl9ub2RlKTsNCg==