Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3566203pxf; Mon, 22 Mar 2021 09:20:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwSQomhNhuMOV0O5hptzgaZ4umgkUczH/XVkv+sdonOqbUqVQDfMRksfukROUghnscqiC1w X-Received: by 2002:a05:6402:105a:: with SMTP id e26mr395111edu.164.1616430044387; Mon, 22 Mar 2021 09:20:44 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1616430044; cv=pass; d=google.com; s=arc-20160816; b=jpuy7s9SvPQdjyP+NIWSAgUAU0ERPNGm/t8EyR7rbSY6ZDuw5KaHCdHm3hbnjytV82 ISe8s4drmIucJx9igWTSh24FOEY1acX2lHFyI1EAJteExVDMORPyDVDsikAHB5wojGjB fPQbQbncTIRQHAfle10D7yTYtaN86DXDq6eGO+pash1aMj1qixQ6AeWEM0/Dpt8TmQou IW8DWmIkJsVGd0Oiz+/4Kns+PwaXsQpix6tu0g7U6lQ8WKaFE5dQH/PBYBOMJn0rHi3L QT9soYUp/xgtIMmTOin+9mkIqM/Rlsyya48dfaWxDSMdWbOVIUWKe4wzsVqev7XbksD8 DIyg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :dlp-version:dlp-reaction:dlp-product:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature:ironport-sdr :ironport-sdr; bh=V6fesgn2BClADu5fkTrmG8R75oFVvxE78HrPHAH1r9g=; b=omt4vJeAYFI/4T0ZiamZFjspgp1hM9c7iQTqhpJjtd+2p5tI5FaEKCwI55+RXW2P18 C70pzx7daPO2Sujs+wHpdkzEavJaFTkdMrRx4CVjlRVbeXcDFzrz92avY5peLr18jL9n E47+e/Ev1tB3XW+nHUdyLr/R7JOS86ccnO8SDHJe0ghP7xCXziSZeLoen0mnllPFBYjb +IfsTL8oHoUPDMzDfmOUV50DTrxOHkjZb9bWpSeaS1ZO5E6Q2F/KWPx7QKQOd7L6S1yX ao8bKZM9qKwx1u2pzi6C5FemueYGu2xPpz7HcM2mS9MT+xQ/ijWZ3VKmj8LspG4xPi5/ +wWg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=crkbwiz1; 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-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-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 jl2si12281731ejc.488.2021.03.22.09.20.21; Mon, 22 Mar 2021 09:20:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-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=crkbwiz1; 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-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-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 S230119AbhCVQRL (ORCPT + 99 others); Mon, 22 Mar 2021 12:17:11 -0400 Received: from mga04.intel.com ([192.55.52.120]:24236 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231593AbhCVQRH (ORCPT ); Mon, 22 Mar 2021 12:17:07 -0400 IronPort-SDR: N9XmBQrVyVUcezOibIL4ilmOLhGz1Wz/9roUwvOYgr6ybIu5f/1R1AUWR9antG2i4EQOCEOy33 An1iZJr1Uu3Q== X-IronPort-AV: E=McAfee;i="6000,8403,9931"; a="187980690" X-IronPort-AV: E=Sophos;i="5.81,269,1610438400"; d="scan'208";a="187980690" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Mar 2021 09:17:04 -0700 IronPort-SDR: lr0GTJ5FnoNpK5h+EzOaf4YiO9xQ45iExIAD4EsafXJkxMqLmIKArMTSfGLUBD6yE7QHRVjqfL HftNQwKj9gXQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,269,1610438400"; d="scan'208";a="373897995" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga003.jf.intel.com with ESMTP; 22 Mar 2021 09:17:02 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 22 Mar 2021 09:17:01 -0700 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 22 Mar 2021 09:17:00 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Mon, 22 Mar 2021 09:17:00 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Mon, 22 Mar 2021 09:16:58 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Kq1netCwn7a29vO6VApERzR30kW68kWR93W/jyJ/oAq+XlASkgM/qXt4nbgAaP9mVHAj8UExP6nkMJSp3a+x/ukIt2Ho+jBJVEy7Q7M7x5+z8Y9sp1Tq72cS3LZLdzGD7HLelw5eBuEBIkO+ryG+L3a6BxL3CfskZkqLbW/aQfNf0AWJBWh+sQ3gX33zlpxLF7M06TQTJbk6T8zdC0qfOxvsvZGHxcKjECD3XFQiFqH0kOwYjp2xqAMHgyDViPSogrLj4yaGJDw3c1cRoWRx9LcqbJ0AENMgzyW5b5LgDtxm/4rOfciuww95ChwAi5gnm5fCVXAFvmIIRrW+5CFx7A== 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=V6fesgn2BClADu5fkTrmG8R75oFVvxE78HrPHAH1r9g=; b=idVWdmMgdoIrMm/63WKHsIic88SXsqSapNpu4PxSTsjkKXo6oRXANZMl1kAFapQIj0Ccn/jKlk3uyOJbvNw4m9lsd3d6wgCkvTAMgsGiV+myeXuKHbuEXRv9UlxKbRQMSo61VjzPMde6XlO3iP/SkQBSBJD8XYj+x0gifbRmYXhV0S/ojw7dURwfi4baGSY7WMqmCo2WsQ61blFngmhTEsqBOoWhQ7wFqPgGC2YzxafXBVkJ8CcgAk01lsWq2dB65cVhP0Hp4PYsItKqee9CFBeDdQoDY67h2AAAG0Ns3kZdMZ1gmQc4baL7g/SmAVoCwojxoLTJcwrMDJiy37llIA== 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=V6fesgn2BClADu5fkTrmG8R75oFVvxE78HrPHAH1r9g=; b=crkbwiz14u7ZzxD8udxWgb+h3HtfD3V/6Eyg3mIBELUig+Qg5YpN6s0wV35tU3s/0s+36wIe3ViB29aBU4R7DWt5SI/8ltobfn41B7p3aUQBfTtAldlBVZK/Vh1xyXgkDHV+QKcYQN8dUyE28tFoaoa1pMECZPUOf8VyF8JHAu4= Received: from CY4PR1101MB2200.namprd11.prod.outlook.com (2603:10b6:910:19::8) by CY4PR1101MB2232.namprd11.prod.outlook.com (2603:10b6:910:21::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3955.23; Mon, 22 Mar 2021 16:16:55 +0000 Received: from CY4PR1101MB2200.namprd11.prod.outlook.com ([fe80::50d:93ff:43d:4c9]) by CY4PR1101MB2200.namprd11.prod.outlook.com ([fe80::50d:93ff:43d:4c9%9]) with mapi id 15.20.3955.027; Mon, 22 Mar 2021 16:16:54 +0000 From: "Schaufler, Casey" To: Namjae Jeon , "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-cifs@vger.kernel.org" CC: "linux-cifsd-devel@lists.sourceforge.net" , "smfrench@gmail.com" , "senozhatsky@chromium.org" , "hyc.lee@gmail.com" , "viro@zeniv.linux.org.uk" , "hch@lst.de" , "hch@infradead.org" , "ronniesahlberg@gmail.com" , "aurelien.aptel@gmail.com" , "aaptel@suse.com" , "sandeen@sandeen.net" , "dan.carpenter@oracle.com" , "colin.king@canonical.com" , "rdunlap@infradead.org" , Sergey Senozhatsky , Steve French , "casey@schaufler-ca.com" Subject: RE: [PATCH 3/5] cifsd: add file operations Thread-Topic: [PATCH 3/5] cifsd: add file operations Thread-Index: AQHXHtuVXsO2x3kfy0ewqOCbCOXB96qQLVzQ Date: Mon, 22 Mar 2021 16:16:54 +0000 Message-ID: References: <20210322051344.1706-1-namjae.jeon@samsung.com> <20210322051344.1706-4-namjae.jeon@samsung.com> In-Reply-To: <20210322051344.1706-4-namjae.jeon@samsung.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: samsung.com; dkim=none (message not signed) header.d=none;samsung.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [97.113.188.113] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5621289c-0398-4267-7cd3-08d8ed4de8d8 x-ms-traffictypediagnostic: CY4PR1101MB2232: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:229; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: tV06MpuzYoTwr5PvIYca8EcAuM7cyXSwERCJPmf1kz9ByWhl/w9jFXKGUxAtfbS3b1PFMxD+g+HOf3/oi68LBtNwfBGaYLxL0s9cW0ABIeJ1rMX5faQJ5Foqmuyd/q03xZHKvlkOuM5DUKiCexxbyfk6NmWP8V88N4VoJWPFSNvKU+BXEX74YBWgoxOnYUaI348sEQ7JAyNz+WXW5vtznC5nod8N/wpqfQF5LGZuTmmUb+zvWeD5NRKtl2MXFWco4tvFEPSKWN6zG8hC4FSRjeRf88UhnqxtzH+JwGw0A9N+BHUt2jsAIlfkvWORysGqMoRbEMnrDchoiCV2VMxBiBJNWA+gcjkuWq4s+XaqDIkhci/3tGPcGWVN1NOn2OE0rCQWWmPrbOjHr1w+r2F0YfvRJ2bILcWPWgPyMGOOeqLTj7iDQg2O56DIIfx8MmKaWsG83brYqdS2FZ8uoPNdGBPAZPSFTtAltEzkMOu26H9crL3xvXEelc5htQDCtKyTmhjxG5SkFgqjN6Mvf4PhZbEyaCLA7NcKvAj3GhC2hOYE8iJOaWigw9lR5M3r9xGtaPchIB/decnv2/Hyfq2Eb83WcN5pnxVmjvVkzYa+jsGDFn9G3IAr9xoos15SqE+1SJrLBXmK9iqs7SFTH2ED54jBJZxN15FoEAP6AtqFK7E= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR1101MB2200.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(376002)(39860400002)(396003)(346002)(7696005)(8676002)(66476007)(2906002)(186003)(8936002)(55016002)(4326008)(5660300002)(66556008)(64756008)(66446008)(66946007)(26005)(9686003)(316002)(53546011)(6506007)(38100700001)(76116006)(30864003)(54906003)(110136005)(83380400001)(478600001)(7416002)(86362001)(33656002)(52536014)(71200400001)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?YnZTSWtSS1grUjFvTm5uSC9ib25HNmI4M0pUdWV3SDJuYWRtTFVSUVc3eVhx?= =?utf-8?B?NHZIZTBqTkUrVE15czUxZW1OZFFTNkVDN0pIU2owQ204NkpveEhuQUhJS3RD?= =?utf-8?B?RHBqa2tabUVpUWIrT0ExMGFaemlWZERMb0ptdGQ4V053T3FGcWhIWElIeTI5?= =?utf-8?B?cUN3UFFobGhzUHEyVUZBRUhBZHFmTnQzcVc2cGVZSEc4a3phblZLV1oyMnVU?= =?utf-8?B?U0NkZ2hNOHU3MUV0RmoyVjVUK3ZnbUtJSW1PcWRVQld5RHl6RVBwUnp2d0NQ?= =?utf-8?B?TWwvVGdnOTc3ZnFXdlB0M2JVV29rL0lXUWF3UDFacjB0RzZrcnlHT0ZCMm9T?= =?utf-8?B?SnJva2hUWndwVGg1MkRWSHVUc2NUcEEvdVRQd3ZJU3oxTHVIaDZQS2VacVFU?= =?utf-8?B?TmpmV2tSbEZBVUJRZ3NRYjlmMXdTSDRlT1RQaEJWR3RoSHFYejNWWFhzY0Zy?= =?utf-8?B?Q3BYT0crclh6NkljVFgwemhFUXdpSURwRDJ4RGtOZVhkSmlOa21mNGYzVnFN?= =?utf-8?B?b2phNy9Xanp5ekYrWGhSQXpmRlFVNkRRTEc2b2lqdkFqWTVJYjdMWjhLNjBn?= =?utf-8?B?bGRHNWRmWWk3dExBT0w0QVZkM1lwZGFVejJKU1VoZDh2RDNTbmVIZ3E0c1p3?= =?utf-8?B?Y3BPK04rRUxlUG5VaitrbzQ3Yk1mMjJJMnU0RFdZRFk5a3hEVVRJY1ZHOGND?= =?utf-8?B?M0lwYlNTbUxBbDRZaU5tMU9ucE9DOE5mMXFRSUlYSGRESHdWZkd2NjhOMGp4?= =?utf-8?B?cmE3RjdyKy9iMDE3MHJ6QVNaWERsU2gycFE3dnZTSDlFTmpkQTdTaGRpSUlt?= =?utf-8?B?bUgweGhScTgrYjFkeXY5WUVLQjZSTXdKRE1STEFFSzNIanNXdmZrQTIxWHc5?= =?utf-8?B?RVBDWGxHR1hwTlVhV0pnci9HNVdicmMrWFAzeDM4Qm9SUlNQNkdvL0NHOWRv?= =?utf-8?B?QnRrdlEwMzJNSy80bVhsQW0xMjgwMEx1QndyOUdFUzJPOGF3SzE0ajdPVkxs?= =?utf-8?B?U2hpNEhQZUt1U0NoZFl5cHk3VFpHQ2IxaDlwSm8vZnpuNzZJbmFKZklxNFRY?= =?utf-8?B?ZFBXcDJHUE1qQlJTU2F6OHpZKzFTU2h4emljZ0Z0U056bzJCamN3ZnhNSmI3?= =?utf-8?B?Slg4alhSVVB1RW01YXpValRvQ2NHdGVVTXNXUVBjNWNXUzZVWVB4MXBkdWhX?= =?utf-8?B?T29IdUU2Y3hYS2RxMmRiZ0RhY2F5YUdQMTFyd3UvWm5jMWdMY0pwVVplQTZS?= =?utf-8?B?VEVLVnBrQ2dMSzgybjhkdHltenlldHZENHBNdmduVEVUcnBrbzd1OEFKS1Ny?= =?utf-8?B?MmhWZE01N2lxckNQdWhvUWdORlJNOHpCU2g5U1JGVytaUHVIUFpKYXJQTy9F?= =?utf-8?B?eDdwSUptMEFDY0JqcjUvUlpXZXE0NmY2aDV2YjBRb245RllCQmZtVEcwczFm?= =?utf-8?B?am1oMzNqdnlyeDVXR3Q5eFNsQUV2OWxDM3l0UTBYRWZ3Z2JGL3pJNWN3cGlU?= =?utf-8?B?SjJ0cCtPd1pWYytvUGZ6U0RJdjJHZmprcy8wM241SnVXd0NlaGZucGtJNmFy?= =?utf-8?B?eFRQTW5iMCtEN3oyMGdwcENycWRBdzBYYUswRnYwT1R2REhWZy9XUDV5Q3Qv?= =?utf-8?B?dDZRaHVjNUs0Ty9xY0U0d1VQL1AxKzh6Uzk1UHZ0YkZQcVkwOGRTVlhsNVVX?= =?utf-8?B?NUliREdKRUxWTUF5dE1ZdFlYWHVXS3NScjdaU2lPblhIcWlUc3Q2TnVKK0FK?= =?utf-8?Q?lTwXs+eA4usYKX9pG1xgx8Mxb2jXdyN1xgrJZHm?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR1101MB2200.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5621289c-0398-4267-7cd3-08d8ed4de8d8 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Mar 2021 16:16:54.4912 (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: cg03SEKS7iHs4iIy3rXQo4SyJHKqg0XTMBYNsyu0Eqa18OvenBtnqqQEAmRKZrTkPlEIJ2I7edtTpJuixDsqZTkN6jN1eQM69YYOjswkyb0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1101MB2232 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBOYW1qYWUgSmVvbiA8bmFtamFl Lmplb25Ac2Ftc3VuZy5jb20+DQo+IFNlbnQ6IFN1bmRheSwgTWFyY2ggMjEsIDIwMjEgMTA6MTQg UE0NCj4gVG86IGxpbnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdl ci5rZXJuZWwub3JnOyBsaW51eC0NCj4gY2lmc0B2Z2VyLmtlcm5lbC5vcmcNCj4gQ2M6IGxpbnV4 LWNpZnNkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldDsgc21mcmVuY2hAZ21haWwuY29tOw0K PiBzZW5vemhhdHNreUBjaHJvbWl1bS5vcmc7IGh5Yy5sZWVAZ21haWwuY29tOyB2aXJvQHplbml2 LmxpbnV4Lm9yZy51azsNCj4gaGNoQGxzdC5kZTsgaGNoQGluZnJhZGVhZC5vcmc7IHJvbm5pZXNh aGxiZXJnQGdtYWlsLmNvbTsNCj4gYXVyZWxpZW4uYXB0ZWxAZ21haWwuY29tOyBhYXB0ZWxAc3Vz ZS5jb207IHNhbmRlZW5Ac2FuZGVlbi5uZXQ7DQo+IGRhbi5jYXJwZW50ZXJAb3JhY2xlLmNvbTsg Y29saW4ua2luZ0BjYW5vbmljYWwuY29tOw0KPiByZHVubGFwQGluZnJhZGVhZC5vcmc7IE5hbWph ZSBKZW9uIDxuYW1qYWUuamVvbkBzYW1zdW5nLmNvbT47DQo+IFNlcmdleSBTZW5vemhhdHNreSA8 c2VyZ2V5LnNlbm96aGF0c2t5QGdtYWlsLmNvbT47IFN0ZXZlIEZyZW5jaA0KPiA8c3RmcmVuY2hA bWljcm9zb2Z0LmNvbT4NCj4gU3ViamVjdDogW1BBVENIIDMvNV0gY2lmc2Q6IGFkZCBmaWxlIG9w ZXJhdGlvbnMNCj4gDQo+IFRoaXMgYWRkcyBmaWxlIG9wZXJhdGlvbnMgYW5kIGJ1ZmZlciBwb29s IGZvciBjaWZzZC4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IE5hbWphZSBKZW9uIDxuYW1qYWUuamVv bkBzYW1zdW5nLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogU2VyZ2V5IFNlbm96aGF0c2t5IDxzZXJn ZXkuc2Vub3poYXRza3lAZ21haWwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBIeXVuY2h1bCBMZWUg PGh5Yy5sZWVAZ21haWwuY29tPg0KPiBBY2tlZC1ieTogUm9ubmllIFNhaGxiZXJnIDxsc2FobGJl ckByZWRoYXQuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBTdGV2ZSBGcmVuY2ggPHN0ZnJlbmNoQG1p Y3Jvc29mdC5jb20+DQo+IC0tLQ0KPiAgZnMvY2lmc2QvYnVmZmVyX3Bvb2wuYyB8ICAyOTIgKysr KysrDQo+ICBmcy9jaWZzZC9idWZmZXJfcG9vbC5oIHwgICAyOCArDQo+ICBmcy9jaWZzZC92ZnMu YyAgICAgICAgIHwgMTk4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr DQo+ICBmcy9jaWZzZC92ZnMuaCAgICAgICAgIHwgIDMxNCArKysrKysrDQo+ICBmcy9jaWZzZC92 ZnNfY2FjaGUuYyAgIHwgIDg1MSArKysrKysrKysrKysrKysrKw0KPiAgZnMvY2lmc2QvdmZzX2Nh Y2hlLmggICB8ICAyMTMgKysrKysNCj4gIDYgZmlsZXMgY2hhbmdlZCwgMzY4NyBpbnNlcnRpb25z KCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZnMvY2lmc2QvYnVmZmVyX3Bvb2wuYw0KPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGZzL2NpZnNkL2J1ZmZlcl9wb29sLmgNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBmcy9jaWZzZC92ZnMuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGZzL2NpZnNkL3Zmcy5o DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZnMvY2lmc2QvdmZzX2NhY2hlLmMNCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBmcy9jaWZzZC92ZnNfY2FjaGUuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2ZzL2Np ZnNkL2J1ZmZlcl9wb29sLmMgYi9mcy9jaWZzZC9idWZmZXJfcG9vbC5jDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODY0ZmVhNTQ3YzY4DQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvZnMvY2lmc2QvYnVmZmVyX3Bvb2wuYw0KPiBAQCAtMCwwICsxLDI5MiBA QA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXINCj4gKy8q DQo+ICsgKiAgIENvcHlyaWdodCAoQykgMjAxOCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRk Lg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC93YWl0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9tbS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC92bWFsbG9jLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcndsb2NrLmg+DQo+ICsNCj4gKyNp bmNsdWRlICJnbG9iLmgiDQo+ICsjaW5jbHVkZSAiYnVmZmVyX3Bvb2wuaCINCj4gKyNpbmNsdWRl ICJjb25uZWN0aW9uLmgiDQo+ICsjaW5jbHVkZSAibWdtdC9rc21iZF9pZGEuaCINCj4gKw0KPiAr c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmaWxwX2NhY2hlOw0KPiArDQo+ICtzdHJ1Y3Qgd20g ew0KPiArCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsNCj4gKwl1bnNpZ25lZCBpbnQJCXN6Ow0KPiAr CWNoYXIJCQlidWZmZXJbMF07DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qgd21fbGlzdCB7DQo+ICsJ c3RydWN0IGxpc3RfaGVhZAlsaXN0Ow0KPiArCXVuc2lnbmVkIGludAkJc3o7DQo+ICsNCj4gKwlz cGlubG9ja190CQl3bV9sb2NrOw0KPiArCWludAkJCWF2YWlsX3dtOw0KPiArCXN0cnVjdCBsaXN0 X2hlYWQJaWRsZV93bTsNCj4gKwl3YWl0X3F1ZXVlX2hlYWRfdAl3bV93YWl0Ow0KPiArfTsNCj4g Kw0KPiArc3RhdGljIExJU1RfSEVBRCh3bV9saXN0cyk7DQo+ICtzdGF0aWMgREVGSU5FX1JXTE9D Syh3bV9saXN0c19sb2NrKTsNCj4gKw0KPiArdm9pZCAqa3NtYmRfYWxsb2Moc2l6ZV90IHNpemUp DQo+ICt7DQo+ICsJcmV0dXJuIGt2bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJP KTsNCj4gK30NCj4gKw0KPiArdm9pZCBrc21iZF9mcmVlKHZvaWQgKnB0cikNCj4gK3sNCj4gKwlr dmZyZWUocHRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCB3bSAqd21fYWxsb2Moc2l6 ZV90IHN6LCBnZnBfdCBmbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3Qgd20gKndtOw0KPiArCXNpemVf dCBhbGxvY19zeiA9IHN6ICsgc2l6ZW9mKHN0cnVjdCB3bSk7DQo+ICsNCj4gKwl3bSA9IGt2bWFs bG9jKGFsbG9jX3N6LCBmbGFncyk7DQo+ICsJaWYgKCF3bSkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ ICsJd20tPnN6ID0gc3o7DQo+ICsJcmV0dXJuIHdtOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IHJlZ2lzdGVyX3dtX3NpemVfY2xhc3Moc2l6ZV90IHN6KQ0KPiArew0KPiArCXN0cnVjdCB3bV9s aXN0ICpsLCAqbmw7DQo+ICsNCj4gKwlubCA9IGt2bWFsbG9jKHNpemVvZihzdHJ1Y3Qgd21fbGlz dCksIEdGUF9LRVJORUwpOw0KPiArCWlmICghbmwpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiAr DQo+ICsJbmwtPnN6ID0gc3o7DQo+ICsJc3Bpbl9sb2NrX2luaXQoJm5sLT53bV9sb2NrKTsNCj4g KwlJTklUX0xJU1RfSEVBRCgmbmwtPmlkbGVfd20pOw0KPiArCUlOSVRfTElTVF9IRUFEKCZubC0+ bGlzdCk7DQo+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmbmwtPndtX3dhaXQpOw0KPiArCW5sLT5h dmFpbF93bSA9IDA7DQo+ICsNCj4gKwl3cml0ZV9sb2NrKCZ3bV9saXN0c19sb2NrKTsNCj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KGwsICZ3bV9saXN0cywgbGlzdCkgew0KPiArCQlpZiAobC0+c3og PT0gc3opIHsNCj4gKwkJCXdyaXRlX3VubG9jaygmd21fbGlzdHNfbG9jayk7DQo+ICsJCQlrdmZy ZWUobmwpOw0KPiArCQkJcmV0dXJuIDA7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlsaXN0X2Fk ZCgmbmwtPmxpc3QsICZ3bV9saXN0cyk7DQo+ICsJd3JpdGVfdW5sb2NrKCZ3bV9saXN0c19sb2Nr KTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCB3bV9saXN0ICpt YXRjaF93bV9saXN0KHNpemVfdCBzaXplKQ0KPiArew0KPiArCXN0cnVjdCB3bV9saXN0ICpsLCAq cmwgPSBOVUxMOw0KPiArDQo+ICsJcmVhZF9sb2NrKCZ3bV9saXN0c19sb2NrKTsNCj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGwsICZ3bV9saXN0cywgbGlzdCkgew0KPiArCQlpZiAobC0+c3ogPT0g c2l6ZSkgew0KPiArCQkJcmwgPSBsOw0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKwl9DQo+ICsJ cmVhZF91bmxvY2soJndtX2xpc3RzX2xvY2spOw0KPiArCXJldHVybiBybDsNCj4gK30NCj4gKw0K PiArc3RhdGljIHN0cnVjdCB3bSAqZmluZF93bShzaXplX3Qgc2l6ZSkNCj4gK3sNCj4gKwlzdHJ1 Y3Qgd21fbGlzdCAqd21fbGlzdDsNCj4gKwlzdHJ1Y3Qgd20gKndtOw0KPiArDQo+ICsJd21fbGlz dCA9IG1hdGNoX3dtX2xpc3Qoc2l6ZSk7DQo+ICsJaWYgKCF3bV9saXN0KSB7DQo+ICsJCWlmIChy ZWdpc3Rlcl93bV9zaXplX2NsYXNzKHNpemUpKQ0KPiArCQkJcmV0dXJuIE5VTEw7DQo+ICsJCXdt X2xpc3QgPSBtYXRjaF93bV9saXN0KHNpemUpOw0KPiArCX0NCj4gKw0KPiArCWlmICghd21fbGlz dCkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwl3aGlsZSAoMSkgew0KPiArCQlzcGluX2xv Y2soJndtX2xpc3QtPndtX2xvY2spOw0KPiArCQlpZiAoIWxpc3RfZW1wdHkoJndtX2xpc3QtPmlk bGVfd20pKSB7DQo+ICsJCQl3bSA9IGxpc3RfZW50cnkod21fbGlzdC0+aWRsZV93bS5uZXh0LA0K PiArCQkJCQlzdHJ1Y3Qgd20sDQo+ICsJCQkJCWxpc3QpOw0KPiArCQkJbGlzdF9kZWwoJndtLT5s aXN0KTsNCj4gKwkJCXNwaW5fdW5sb2NrKCZ3bV9saXN0LT53bV9sb2NrKTsNCj4gKwkJCXJldHVy biB3bTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmICh3bV9saXN0LT5hdmFpbF93bSA+IG51bV9vbmxp bmVfY3B1cygpKSB7DQo+ICsJCQlzcGluX3VubG9jaygmd21fbGlzdC0+d21fbG9jayk7DQo+ICsJ CQl3YWl0X2V2ZW50KHdtX2xpc3QtPndtX3dhaXQsDQo+ICsJCQkJICAgIWxpc3RfZW1wdHkoJndt X2xpc3QtPmlkbGVfd20pKTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJd21f bGlzdC0+YXZhaWxfd20rKzsNCj4gKwkJc3Bpbl91bmxvY2soJndtX2xpc3QtPndtX2xvY2spOw0K PiArDQo+ICsJCXdtID0gd21fYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7DQo+ICsJCWlmICghd20p IHsNCj4gKwkJCXNwaW5fbG9jaygmd21fbGlzdC0+d21fbG9jayk7DQo+ICsJCQl3bV9saXN0LT5h dmFpbF93bS0tOw0KPiArCQkJc3Bpbl91bmxvY2soJndtX2xpc3QtPndtX2xvY2spOw0KPiArCQkJ d2FpdF9ldmVudCh3bV9saXN0LT53bV93YWl0LA0KPiArCQkJCSAgICFsaXN0X2VtcHR5KCZ3bV9s aXN0LT5pZGxlX3dtKSk7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArCQlicmVhazsNCj4g Kwl9DQo+ICsNCj4gKwlyZXR1cm4gd207DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHJlbGVh c2Vfd20oc3RydWN0IHdtICp3bSwgc3RydWN0IHdtX2xpc3QgKndtX2xpc3QpDQo+ICt7DQo+ICsJ aWYgKCF3bSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJc3Bpbl9sb2NrKCZ3bV9saXN0LT53bV9s b2NrKTsNCj4gKwlpZiAod21fbGlzdC0+YXZhaWxfd20gPD0gbnVtX29ubGluZV9jcHVzKCkpIHsN Cj4gKwkJbGlzdF9hZGQoJndtLT5saXN0LCAmd21fbGlzdC0+aWRsZV93bSk7DQo+ICsJCXNwaW5f dW5sb2NrKCZ3bV9saXN0LT53bV9sb2NrKTsNCj4gKwkJd2FrZV91cCgmd21fbGlzdC0+d21fd2Fp dCk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwl3bV9saXN0LT5hdmFpbF93bS0tOw0K PiArCXNwaW5fdW5sb2NrKCZ3bV9saXN0LT53bV9sb2NrKTsNCj4gKwlrc21iZF9mcmVlKHdtKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgd21fbGlzdF9mcmVlKHN0cnVjdCB3bV9saXN0ICps KQ0KPiArew0KPiArCXN0cnVjdCB3bSAqd207DQo+ICsNCj4gKwl3aGlsZSAoIWxpc3RfZW1wdHko JmwtPmlkbGVfd20pKSB7DQo+ICsJCXdtID0gbGlzdF9lbnRyeShsLT5pZGxlX3dtLm5leHQsIHN0 cnVjdCB3bSwgbGlzdCk7DQo+ICsJCWxpc3RfZGVsKCZ3bS0+bGlzdCk7DQo+ICsJCWt2ZnJlZSh3 bSk7DQo+ICsJfQ0KPiArCWt2ZnJlZShsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgd21f bGlzdHNfZGVzdHJveSh2b2lkKQ0KPiArew0KPiArCXN0cnVjdCB3bV9saXN0ICpsOw0KPiArDQo+ ICsJd2hpbGUgKCFsaXN0X2VtcHR5KCZ3bV9saXN0cykpIHsNCj4gKwkJbCA9IGxpc3RfZW50cnko d21fbGlzdHMubmV4dCwgc3RydWN0IHdtX2xpc3QsIGxpc3QpOw0KPiArCQlsaXN0X2RlbCgmbC0+ bGlzdCk7DQo+ICsJCXdtX2xpc3RfZnJlZShsKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3ZvaWQg a3NtYmRfZnJlZV9yZXF1ZXN0KHZvaWQgKmFkZHIpDQo+ICt7DQo+ICsJa3ZmcmVlKGFkZHIpOw0K PiArfQ0KPiArDQo+ICt2b2lkICprc21iZF9hbGxvY19yZXF1ZXN0KHNpemVfdCBzaXplKQ0KPiAr ew0KPiArCXJldHVybiBrdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsNCj4gK30NCj4gKw0KPiAr dm9pZCBrc21iZF9mcmVlX3Jlc3BvbnNlKHZvaWQgKmJ1ZmZlcikNCj4gK3sNCj4gKwlrdmZyZWUo YnVmZmVyKTsNCj4gK30NCj4gKw0KPiArdm9pZCAqa3NtYmRfYWxsb2NfcmVzcG9uc2Uoc2l6ZV90 IHNpemUpDQo+ICt7DQo+ICsJcmV0dXJuIGt2bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dG UF9aRVJPKTsNCj4gK30NCj4gKw0KPiArdm9pZCAqa3NtYmRfZmluZF9idWZmZXIoc2l6ZV90IHNp emUpDQo+ICt7DQo+ICsJc3RydWN0IHdtICp3bTsNCj4gKw0KPiArCXdtID0gZmluZF93bShzaXpl KTsNCj4gKw0KPiArCVdBUk5fT04oIXdtKTsNCj4gKwlpZiAod20pDQo+ICsJCXJldHVybiB3bS0+ YnVmZmVyOw0KPiArCXJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICt2b2lkIGtzbWJkX3JlbGVh c2VfYnVmZmVyKHZvaWQgKmJ1ZmZlcikNCj4gK3sNCj4gKwlzdHJ1Y3Qgd21fbGlzdCAqd21fbGlz dDsNCj4gKwlzdHJ1Y3Qgd20gKndtOw0KPiArDQo+ICsJaWYgKCFidWZmZXIpDQo+ICsJCXJldHVy bjsNCj4gKw0KPiArCXdtID0gY29udGFpbmVyX29mKGJ1ZmZlciwgc3RydWN0IHdtLCBidWZmZXIp Ow0KPiArCXdtX2xpc3QgPSBtYXRjaF93bV9saXN0KHdtLT5zeik7DQo+ICsJV0FSTl9PTighd21f bGlzdCk7DQo+ICsJaWYgKHdtX2xpc3QpDQo+ICsJCXJlbGVhc2Vfd20od20sIHdtX2xpc3QpOw0K PiArfQ0KPiArDQo+ICt2b2lkICprc21iZF9yZWFsbG9jX3Jlc3BvbnNlKHZvaWQgKnB0ciwgc2l6 ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zeikNCj4gK3sNCj4gKwlzaXplX3Qgc3ogPSBtaW4ob2xk X3N6LCBuZXdfc3opOw0KPiArCXZvaWQgKm5wdHI7DQo+ICsNCj4gKwlucHRyID0ga3NtYmRfYWxs b2NfcmVzcG9uc2UobmV3X3N6KTsNCj4gKwlpZiAoIW5wdHIpDQo+ICsJCXJldHVybiBwdHI7DQo+ ICsJbWVtY3B5KG5wdHIsIHB0ciwgc3opOw0KPiArCWtzbWJkX2ZyZWVfcmVzcG9uc2UocHRyKTsN Cj4gKwlyZXR1cm4gbnB0cjsNCj4gK30NCj4gKw0KPiArdm9pZCBrc21iZF9mcmVlX2ZpbGVfc3Ry dWN0KHZvaWQgKmZpbHApDQo+ICt7DQo+ICsJa21lbV9jYWNoZV9mcmVlKGZpbHBfY2FjaGUsIGZp bHApOw0KPiArfQ0KPiArDQo+ICt2b2lkICprc21iZF9hbGxvY19maWxlX3N0cnVjdCh2b2lkKQ0K PiArew0KPiArCXJldHVybiBrbWVtX2NhY2hlX3phbGxvYyhmaWxwX2NhY2hlLCBHRlBfS0VSTkVM KTsNCj4gK30NCj4gKw0KPiArdm9pZCBrc21iZF9kZXN0cm95X2J1ZmZlcl9wb29scyh2b2lkKQ0K PiArew0KPiArCXdtX2xpc3RzX2Rlc3Ryb3koKTsNCj4gKwlrc21iZF93b3JrX3Bvb2xfZGVzdHJv eSgpOw0KPiArCWttZW1fY2FjaGVfZGVzdHJveShmaWxwX2NhY2hlKTsNCj4gK30NCj4gKw0KPiAr aW50IGtzbWJkX2luaXRfYnVmZmVyX3Bvb2xzKHZvaWQpDQo+ICt7DQo+ICsJaWYgKGtzbWJkX3dv cmtfcG9vbF9pbml0KCkpDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJZmlscF9jYWNoZSA9IGtt ZW1fY2FjaGVfY3JlYXRlKCJrc21iZF9maWxlX2NhY2hlIiwNCj4gKwkJCQkJc2l6ZW9mKHN0cnVj dCBrc21iZF9maWxlKSwgMCwNCj4gKwkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsNCj4g KwlpZiAoIWZpbHBfY2FjaGUpDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICsNCj4gK291dDoNCj4gKwlrc21iZF9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIp Ow0KPiArCWtzbWJkX2Rlc3Ryb3lfYnVmZmVyX3Bvb2xzKCk7DQo+ICsJcmV0dXJuIC1FTk9NRU07 DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9mcy9jaWZzZC9idWZmZXJfcG9vbC5oIGIvZnMvY2lmc2Qv YnVmZmVyX3Bvb2wuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAw MDAuLjJiM2QwM2FmY2YyNw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2ZzL2NpZnNkL2J1ZmZl cl9wb29sLmgNCj4gQEAgLTAsMCArMSwyOCBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8NCj4gKy8qDQo+ICsgKiAgIENvcHlyaWdodCAoQykgMjAx OCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYg X19LU01CRF9CVUZGRVJfUE9PTF9IX18NCj4gKyNkZWZpbmUgX19LU01CRF9CVUZGRVJfUE9PTF9I X18NCj4gKw0KPiArdm9pZCAqa3NtYmRfZmluZF9idWZmZXIoc2l6ZV90IHNpemUpOw0KPiArdm9p ZCBrc21iZF9yZWxlYXNlX2J1ZmZlcih2b2lkICpidWZmZXIpOw0KPiArDQo+ICt2b2lkICprc21i ZF9hbGxvYyhzaXplX3Qgc2l6ZSk7DQo+ICt2b2lkIGtzbWJkX2ZyZWUodm9pZCAqcHRyKTsNCj4g Kw0KPiArdm9pZCBrc21iZF9mcmVlX3JlcXVlc3Qodm9pZCAqYWRkcik7DQo+ICt2b2lkICprc21i ZF9hbGxvY19yZXF1ZXN0KHNpemVfdCBzaXplKTsNCj4gK3ZvaWQga3NtYmRfZnJlZV9yZXNwb25z ZSh2b2lkICpidWZmZXIpOw0KPiArdm9pZCAqa3NtYmRfYWxsb2NfcmVzcG9uc2Uoc2l6ZV90IHNp emUpOw0KPiArDQo+ICt2b2lkICprc21iZF9yZWFsbG9jX3Jlc3BvbnNlKHZvaWQgKnB0ciwgc2l6 ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zeik7DQo+ICsNCj4gK3ZvaWQga3NtYmRfZnJlZV9maWxl X3N0cnVjdCh2b2lkICpmaWxwKTsNCj4gK3ZvaWQgKmtzbWJkX2FsbG9jX2ZpbGVfc3RydWN0KHZv aWQpOw0KPiArDQo+ICt2b2lkIGtzbWJkX2Rlc3Ryb3lfYnVmZmVyX3Bvb2xzKHZvaWQpOw0KPiAr aW50IGtzbWJkX2luaXRfYnVmZmVyX3Bvb2xzKHZvaWQpOw0KPiArDQo+ICsjZW5kaWYgLyogX19L U01CRF9CVUZGRVJfUE9PTF9IX18gKi8NCj4gZGlmZiAtLWdpdCBhL2ZzL2NpZnNkL3Zmcy5jIGIv ZnMvY2lmc2QvdmZzLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAw MDAwLi4wMGY4MGNhNDU2OTANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9mcy9jaWZzZC92ZnMu Yw0KPiBAQCAtMCwwICsxLDE5ODkgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9yLWxhdGVyDQo+ICsvKg0KPiArICogICBDb3B5cmlnaHQgKEMpIDIwMTYgTmFtamFl IEplb24gPGxpbmtpbmplb25Aa2VybmVsLm9yZz4NCj4gKyAqICAgQ29weXJpZ2h0IChDKSAyMDE4 IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvdWFjY2Vzcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+DQo+ICsj aW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZmFsbG9j Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9ibGtk ZXYuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2RjYWNoZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC92bWFsbG9jLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQveGFjY3QuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9jcmMzMmMuaD4NCj4gKw0KPiArI2luY2x1ZGUgImdsb2IuaCINCj4gKyNpbmNs dWRlICJvcGxvY2suaCINCj4gKyNpbmNsdWRlICJjb25uZWN0aW9uLmgiDQo+ICsjaW5jbHVkZSAi YnVmZmVyX3Bvb2wuaCINCj4gKyNpbmNsdWRlICJ2ZnMuaCINCj4gKyNpbmNsdWRlICJ2ZnNfY2Fj aGUuaCINCj4gKyNpbmNsdWRlICJzbWJhY2wuaCINCj4gKyNpbmNsdWRlICJuZHIuaCINCj4gKyNp bmNsdWRlICJhdXRoLmgiDQo+ICsNCj4gKyNpbmNsdWRlICJ0aW1lX3dyYXBwZXJzLmgiDQo+ICsj aW5jbHVkZSAic21iX2NvbW1vbi5oIg0KPiArI2luY2x1ZGUgIm1nbXQvc2hhcmVfY29uZmlnLmgi DQo+ICsjaW5jbHVkZSAibWdtdC90cmVlX2Nvbm5lY3QuaCINCj4gKyNpbmNsdWRlICJtZ210L3Vz ZXJfc2Vzc2lvbi5oIg0KPiArI2luY2x1ZGUgIm1nbXQvdXNlcl9jb25maWcuaCINCj4gKw0KPiAr c3RhdGljIGNoYXIgKmV4dHJhY3RfbGFzdF9jb21wb25lbnQoY2hhciAqcGF0aCkNCj4gK3sNCj4g KwljaGFyICpwID0gc3RycmNocihwYXRoLCAnLycpOw0KPiArDQo+ICsJaWYgKHAgJiYgcFsxXSAh PSAnXDAnKSB7DQo+ICsJCSpwID0gJ1wwJzsNCj4gKwkJcCsrOw0KPiArCX0gZWxzZSB7DQo+ICsJ CXAgPSBOVUxMOw0KPiArCQlrc21iZF9lcnIoIkludmFsaWQgcGF0aCAlc1xuIiwgcGF0aCk7DQo+ ICsJfQ0KPiArCXJldHVybiBwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCByb2xsYmFja19w YXRoX21vZGlmaWNhdGlvbihjaGFyICpmaWxlbmFtZSkNCj4gK3sNCj4gKwlpZiAoZmlsZW5hbWUp IHsNCj4gKwkJZmlsZW5hbWUtLTsNCj4gKwkJKmZpbGVuYW1lID0gJy8nOw0KPiArCX0NCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQga3NtYmRfdmZzX2luaGVyaXRfb3duZXIoc3RydWN0IGtzbWJk X3dvcmsgKndvcmssDQo+ICsJCQkJICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50X2lub2RlLA0KPiAr CQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiArew0KPiArCWlmICghdGVzdF9zaGFyZV9j b25maWdfZmxhZyh3b3JrLT50Y29uLT5zaGFyZV9jb25mLA0KPiArCQkJCSAgIEtTTUJEX1NIQVJF X0ZMQUdfSU5IRVJJVF9PV05FUikpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlfdWlkX3dyaXRl KGlub2RlLCBpX3VpZF9yZWFkKHBhcmVudF9pbm9kZSkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBrc21iZF92ZnNfaW5oZXJpdF9zbWFjayhzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywNCj4g KwkJCQkgICAgc3RydWN0IGRlbnRyeSAqZGlyX2RlbnRyeSwNCj4gKwkJCQkgICAgc3RydWN0IGRl bnRyeSAqZGVudHJ5KQ0KPiArew0KPiArCWNoYXIgKm5hbWUsICp4YXR0cl9saXN0ID0gTlVMTCwg KnNtYWNrX2J1ZjsNCj4gKwlpbnQgdmFsdWVfbGVuLCB4YXR0cl9saXN0X2xlbjsNCj4gKw0KPiAr CWlmICghdGVzdF9zaGFyZV9jb25maWdfZmxhZyh3b3JrLT50Y29uLT5zaGFyZV9jb25mLA0KPiAr CQkJCSAgICBLU01CRF9TSEFSRV9GTEFHX0lOSEVSSVRfU01BQ0spKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwl4YXR0cl9saXN0X2xlbiA9IGtzbWJkX3Zmc19saXN0eGF0dHIoZGlyX2RlbnRyeSwg JnhhdHRyX2xpc3QpOw0KPiArCWlmICh4YXR0cl9saXN0X2xlbiA8IDApIHsNCj4gKwkJZ290byBv dXQ7DQo+ICsJfSBlbHNlIGlmICgheGF0dHJfbGlzdF9sZW4pIHsNCj4gKwkJa3NtYmRfZXJyKCJu byBlYSBkYXRhIGluIHRoZSBmaWxlXG4iKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiAr CWZvciAobmFtZSA9IHhhdHRyX2xpc3Q7IG5hbWUgLSB4YXR0cl9saXN0IDwgeGF0dHJfbGlzdF9s ZW47DQo+ICsJCQluYW1lICs9IHN0cmxlbihuYW1lKSArIDEpIHsNCj4gKwkJaW50IHJjOw0KPiAr DQo+ICsJCWtzbWJkX2RlYnVnKFZGUywgIiVzLCBsZW4gJXpkXG4iLCBuYW1lLCBzdHJsZW4obmFt ZSkpOw0KPiArCQlpZiAoc3RyY21wKG5hbWUsIFhBVFRSX05BTUVfU01BQ0spKQ0KDQpTbWFjayB1 c2VzIG11bHRpcGxlIHhhdHRycy4gSW4gYWRkaXRpb24gdG8gWEFUVFJfTkFNRV9TTUFDSyB5b3Ug bmVlZA0KWEFUVFJfTkFNRV9TTUFDS0VYRUMsIFhBVFRSX05BTUVfU01BQ0tUUkFOU01VVEUgYW5k DQpYQVRUUl9OQU1FX1NNQUNLTU1BUC4gDQoNCldoeSBpcyBTbWFjayB0cmVhdGVkIHNwZWNpYWxs eT8NCg0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJdmFsdWVfbGVuID0ga3NtYmRfdmZzX2dl dHhhdHRyKGRpcl9kZW50cnksIG5hbWUsDQo+ICZzbWFja19idWYpOw0KPiArCQlpZiAodmFsdWVf bGVuIDw9IDApDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlyYyA9IGtzbWJkX3Zmc19zZXR4 YXR0cihkZW50cnksIFhBVFRSX05BTUVfU01BQ0ssDQo+IHNtYWNrX2J1ZiwNCj4gKwkJCQkJdmFs dWVfbGVuLCAwKTsNCj4gKwkJa3NtYmRfZnJlZShzbWFja19idWYpOw0KPiArCQlpZiAocmMgPCAw KQ0KPiArCQkJa3NtYmRfZXJyKCJrc21iZF92ZnNfc2V0eGF0dHIoKSBmYWlsZWQ6ICVkXG4iLCBy Yyk7DQo+ICsJfQ0KPiArb3V0Og0KPiArCWtzbWJkX3Zmc194YXR0cl9mcmVlKHhhdHRyX2xpc3Qp Ow0KPiArfQ0KPiArDQo+ICtpbnQga3NtYmRfdmZzX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGRl bnRyeSAqZGVudHJ5LCBpbnQgYWNjX21vZGUsDQo+IGJvb2wgZGVsZXRlKQ0KPiArew0KPiArCWlu dCBtYXNrOw0KPiArDQo+ICsJbWFzayA9IDA7DQo+ICsJYWNjX21vZGUgJj0gT19BQ0NNT0RFOw0K PiArDQo+ICsJaWYgKGFjY19tb2RlID09IE9fUkRPTkxZKQ0KPiArCQltYXNrID0gTUFZX1JFQUQ7 DQo+ICsJZWxzZSBpZiAoYWNjX21vZGUgPT0gT19XUk9OTFkpDQo+ICsJCW1hc2sgPSBNQVlfV1JJ VEU7DQo+ICsJZWxzZSBpZiAoYWNjX21vZGUgPT0gT19SRFdSKQ0KPiArCQltYXNrID0gTUFZX1JF QUQgfCBNQVlfV1JJVEU7DQo+ICsNCj4gKwlpZiAoaW5vZGVfcGVybWlzc2lvbigmaW5pdF91c2Vy X25zLCBkX2lub2RlKGRlbnRyeSksIG1hc2sgfA0KPiBNQVlfT1BFTikpDQo+ICsJCXJldHVybiAt RUFDQ0VTOw0KPiArDQo+ICsJaWYgKGRlbGV0ZSkgew0KPiArCQlzdHJ1Y3QgZGVudHJ5ICpwYXJl bnQ7DQo+ICsNCj4gKwkJcGFyZW50ID0gZGdldF9wYXJlbnQoZGVudHJ5KTsNCj4gKwkJaWYgKCFw YXJlbnQpDQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCQlpZiAoaW5vZGVfcGVybWlz c2lvbigmaW5pdF91c2VyX25zLCBkX2lub2RlKHBhcmVudCksDQo+IE1BWV9FWEVDIHwgTUFZX1dS SVRFKSkgew0KPiArCQkJZHB1dChwYXJlbnQpOw0KPiArCQkJcmV0dXJuIC1FQUNDRVM7DQo+ICsJ CX0NCj4gKwkJZHB1dChwYXJlbnQpOw0KPiArCX0NCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiAraW50IGtzbWJkX3Zmc19xdWVyeV9tYXhpbWFsX2FjY2VzcyhzdHJ1Y3QgZGVudHJ5ICpkZW50 cnksIF9fbGUzMg0KPiAqZGFjY2VzcykNCj4gK3sNCj4gKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7 DQo+ICsNCj4gKwkqZGFjY2VzcyA9IGNwdV90b19sZTMyKEZJTEVfUkVBRF9BVFRSSUJVVEVTIHwg UkVBRF9DT05UUk9MKTsNCj4gKw0KPiArCWlmICghaW5vZGVfcGVybWlzc2lvbigmaW5pdF91c2Vy X25zLCBkX2lub2RlKGRlbnRyeSksIE1BWV9PUEVOIHwNCj4gTUFZX1dSSVRFKSkNCj4gKwkJKmRh Y2Nlc3MgfD0gY3B1X3RvX2xlMzIoV1JJVEVfREFDIHwgV1JJVEVfT1dORVIgfA0KPiBTWU5DSFJP TklaRSB8DQo+ICsJCQkJRklMRV9XUklURV9EQVRBIHwgRklMRV9BUFBFTkRfREFUQSB8DQo+ICsJ CQkJRklMRV9XUklURV9FQSB8IEZJTEVfV1JJVEVfQVRUUklCVVRFUyB8DQo+ICsJCQkJRklMRV9E RUxFVEVfQ0hJTEQpOw0KPiArDQo+ICsJaWYgKCFpbm9kZV9wZXJtaXNzaW9uKCZpbml0X3VzZXJf bnMsIGRfaW5vZGUoZGVudHJ5KSwgTUFZX09QRU4gfA0KPiBNQVlfUkVBRCkpDQo+ICsJCSpkYWNj ZXNzIHw9IEZJTEVfUkVBRF9EQVRBX0xFIHwgRklMRV9SRUFEX0VBX0xFOw0KPiArDQo+ICsJaWYg KCFpbm9kZV9wZXJtaXNzaW9uKCZpbml0X3VzZXJfbnMsIGRfaW5vZGUoZGVudHJ5KSwgTUFZX09Q RU4gfA0KPiBNQVlfRVhFQykpDQo+ICsJCSpkYWNjZXNzIHw9IEZJTEVfRVhFQ1VURV9MRTsNCj4g Kw0KPiArCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7DQo+ICsJaWYgKCFwYXJlbnQpDQo+ ICsJCXJldHVybiAwOw0KPiArDQo+ICsJaWYgKCFpbm9kZV9wZXJtaXNzaW9uKCZpbml0X3VzZXJf bnMsIGRfaW5vZGUocGFyZW50KSwgTUFZX0VYRUMgfA0KPiBNQVlfV1JJVEUpKQ0KPiArCQkqZGFj Y2VzcyB8PSBGSUxFX0RFTEVURV9MRTsNCj4gKwlkcHV0KHBhcmVudCk7DQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgKiBrc21iZF92ZnNfY3JlYXRlKCkgLSB2ZnMg aGVscGVyIGZvciBzbWIgY3JlYXRlIGZpbGUNCj4gKyAqIEB3b3JrOgl3b3JrDQo+ICsgKiBAbmFt ZToJZmlsZSBuYW1lDQo+ICsgKiBAbW9kZToJZmlsZSBjcmVhdGUgbW9kZQ0KPiArICoNCj4gKyAq IFJldHVybjoJMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3INCj4gKyAqLw0KPiAraW50IGtz bWJkX3Zmc19jcmVhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCSAgICAgY29uc3Qg Y2hhciAqbmFtZSwNCj4gKwkJICAgICB1bW9kZV90IG1vZGUpDQo+ICt7DQo+ICsJc3RydWN0IHBh dGggcGF0aDsNCj4gKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7DQo+ICsJaW50IGVycjsNCj4gKw0K PiArCWRlbnRyeSA9IGtlcm5fcGF0aF9jcmVhdGUoQVRfRkRDV0QsIG5hbWUsICZwYXRoLCAwKTsN Cj4gKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsNCj4gKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOw0K PiArCQlpZiAoZXJyICE9IC1FTk9FTlQpDQo+ICsJCQlrc21iZF9lcnIoInBhdGggY3JlYXRlIGZh aWxlZCBmb3IgJXMsIGVyciAlZFxuIiwNCj4gKwkJCQluYW1lLCBlcnIpOw0KPiArCQlyZXR1cm4g ZXJyOw0KPiArCX0NCj4gKw0KPiArCW1vZGUgfD0gU19JRlJFRzsNCj4gKwllcnIgPSB2ZnNfY3Jl YXRlKCZpbml0X3VzZXJfbnMsIGRfaW5vZGUocGF0aC5kZW50cnkpLCBkZW50cnksDQo+IG1vZGUs IHRydWUpOw0KPiArCWlmICghZXJyKSB7DQo+ICsJCWtzbWJkX3Zmc19pbmhlcml0X293bmVyKHdv cmssIGRfaW5vZGUocGF0aC5kZW50cnkpLA0KPiArCQkJZF9pbm9kZShkZW50cnkpKTsNCj4gKwkJ a3NtYmRfdmZzX2luaGVyaXRfc21hY2sod29yaywgcGF0aC5kZW50cnksIGRlbnRyeSk7DQo+ICsJ fSBlbHNlIHsNCj4gKwkJa3NtYmRfZXJyKCJGaWxlKCVzKTogY3JlYXRpb24gZmFpbGVkIChlcnI6 JWQpXG4iLCBuYW1lLCBlcnIpOw0KPiArCX0NCj4gKwlkb25lX3BhdGhfY3JlYXRlKCZwYXRoLCBk ZW50cnkpOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICoga3NtYmRf dmZzX21rZGlyKCkgLSB2ZnMgaGVscGVyIGZvciBzbWIgY3JlYXRlIGRpcmVjdG9yeQ0KPiArICog QHdvcms6CXdvcmsNCj4gKyAqIEBuYW1lOglkaXJlY3RvcnkgbmFtZQ0KPiArICogQG1vZGU6CWRp cmVjdG9yeSBjcmVhdGUgbW9kZQ0KPiArICoNCj4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzLCBv dGhlcndpc2UgZXJyb3INCj4gKyAqLw0KPiAraW50IGtzbWJkX3Zmc19ta2RpcihzdHJ1Y3Qga3Nt YmRfd29yayAqd29yaywNCj4gKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsDQo+ICsJCSAgICB1bW9k ZV90IG1vZGUpDQo+ICt7DQo+ICsJc3RydWN0IHBhdGggcGF0aDsNCj4gKwlzdHJ1Y3QgZGVudHJ5 ICpkZW50cnk7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCWRlbnRyeSA9IGtlcm5fcGF0aF9jcmVh dGUoQVRfRkRDV0QsIG5hbWUsICZwYXRoLA0KPiBMT09LVVBfRElSRUNUT1JZKTsNCj4gKwlpZiAo SVNfRVJSKGRlbnRyeSkpIHsNCj4gKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOw0KPiArCQlpZiAo ZXJyICE9IC1FRVhJU1QpDQo+ICsJCQlrc21iZF9kZWJ1ZyhWRlMsICJwYXRoIGNyZWF0ZSBmYWls ZWQgZm9yICVzLCBlcnINCj4gJWRcbiIsDQo+ICsJCQkJCW5hbWUsIGVycik7DQo+ICsJCXJldHVy biBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJbW9kZSB8PSBTX0lGRElSOw0KPiArCWVyciA9IHZmc19t a2RpcigmaW5pdF91c2VyX25zLCBkX2lub2RlKHBhdGguZGVudHJ5KSwgZGVudHJ5LA0KPiBtb2Rl KTsNCj4gKwlpZiAoIWVycikgew0KPiArCQlrc21iZF92ZnNfaW5oZXJpdF9vd25lcih3b3JrLCBk X2lub2RlKHBhdGguZGVudHJ5KSwNCj4gKwkJCWRfaW5vZGUoZGVudHJ5KSk7DQo+ICsJCWtzbWJk X3Zmc19pbmhlcml0X3NtYWNrKHdvcmssIHBhdGguZGVudHJ5LCBkZW50cnkpOw0KPiArCX0gZWxz ZQ0KPiArCQlrc21iZF9lcnIoIm1rZGlyKCVzKTogY3JlYXRpb24gZmFpbGVkIChlcnI6JWQpXG4i LCBuYW1lLA0KPiBlcnIpOw0KPiArDQo+ICsJZG9uZV9wYXRoX2NyZWF0ZSgmcGF0aCwgZGVudHJ5 KTsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3NpemVfdCBrc21iZF92 ZnNfZ2V0Y2FzZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwNCj4gKwkJCQkgICAgICBjaGFy ICphdHRyX25hbWUsDQo+ICsJCQkJICAgICAgaW50IGF0dHJfbmFtZV9sZW4sDQo+ICsJCQkJICAg ICAgY2hhciAqKmF0dHJfdmFsdWUpDQo+ICt7DQo+ICsJY2hhciAqbmFtZSwgKnhhdHRyX2xpc3Qg PSBOVUxMOw0KPiArCXNzaXplX3QgdmFsdWVfbGVuID0gLUVOT0VOVCwgeGF0dHJfbGlzdF9sZW47 DQo+ICsNCj4gKwl4YXR0cl9saXN0X2xlbiA9IGtzbWJkX3Zmc19saXN0eGF0dHIoZGVudHJ5LCAm eGF0dHJfbGlzdCk7DQo+ICsJaWYgKHhhdHRyX2xpc3RfbGVuIDw9IDApDQo+ICsJCWdvdG8gb3V0 Ow0KPiArDQo+ICsJZm9yIChuYW1lID0geGF0dHJfbGlzdDsgbmFtZSAtIHhhdHRyX2xpc3QgPCB4 YXR0cl9saXN0X2xlbjsNCj4gKwkJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMSkgew0KPiArCQlr c21iZF9kZWJ1ZyhWRlMsICIlcywgbGVuICV6ZFxuIiwgbmFtZSwgc3RybGVuKG5hbWUpKTsNCj4g KwkJaWYgKHN0cm5jYXNlY21wKGF0dHJfbmFtZSwgbmFtZSwgYXR0cl9uYW1lX2xlbikpDQo+ICsJ CQljb250aW51ZTsNCj4gKw0KPiArCQl2YWx1ZV9sZW4gPSBrc21iZF92ZnNfZ2V0eGF0dHIoZGVu dHJ5LA0KPiArCQkJCQkgICAgICAgbmFtZSwNCj4gKwkJCQkJICAgICAgIGF0dHJfdmFsdWUpOw0K PiArCQlpZiAodmFsdWVfbGVuIDwgMCkNCj4gKwkJCWtzbWJkX2VycigiZmFpbGVkIHRvIGdldCB4 YXR0ciBpbiBmaWxlXG4iKTsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICtvdXQ6DQo+ICsJ a3NtYmRfdmZzX3hhdHRyX2ZyZWUoeGF0dHJfbGlzdCk7DQo+ICsJcmV0dXJuIHZhbHVlX2xlbjsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBrc21iZF92ZnNfc3RyZWFtX3JlYWQoc3RydWN0IGtz bWJkX2ZpbGUgKmZwLCBjaGFyICpidWYsIGxvZmZfdA0KPiAqcG9zLA0KPiArCXNpemVfdCBjb3Vu dCkNCj4gK3sNCj4gKwlzc2l6ZV90IHZfbGVuOw0KPiArCWNoYXIgKnN0cmVhbV9idWYgPSBOVUxM Ow0KPiArCWludCBlcnI7DQo+ICsNCj4gKwlrc21iZF9kZWJ1ZyhWRlMsICJyZWFkIHN0cmVhbSBk YXRhIHBvcyA6ICVsbHUsIGNvdW50IDogJXpkXG4iLA0KPiArCQkJKnBvcywgY291bnQpOw0KPiAr DQo+ICsJdl9sZW4gPSBrc21iZF92ZnNfZ2V0Y2FzZXhhdHRyKGZwLT5maWxwLT5mX3BhdGguZGVu dHJ5LA0KPiArCQkJCSAgICAgICBmcC0+c3RyZWFtLm5hbWUsDQo+ICsJCQkJICAgICAgIGZwLT5z dHJlYW0uc2l6ZSwNCj4gKwkJCQkgICAgICAgJnN0cmVhbV9idWYpOw0KPiArCWlmICh2X2xlbiA9 PSAtRU5PRU5UKSB7DQo+ICsJCWtzbWJkX2Vycigibm90IGZvdW5kIHN0cmVhbSBpbiB4YXR0ciA6 ICV6ZFxuIiwgdl9sZW4pOw0KPiArCQllcnIgPSAtRU5PRU5UOw0KPiArCQlyZXR1cm4gZXJyOw0K PiArCX0NCj4gKw0KPiArCW1lbWNweShidWYsICZzdHJlYW1fYnVmWypwb3NdLCBjb3VudCk7DQo+ ICsJcmV0dXJuIHZfbGVuID4gY291bnQgPyBjb3VudCA6IHZfbGVuOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIGNoZWNrX2xvY2tfcmFuZ2UoKSAtIHZmcyBoZWxwZXIgZm9yIHNtYiBieXRlIHJh bmdlIGZpbGUgbG9ja2luZw0KPiArICogQGZpbHA6CXRoZSBmaWxlIHRvIGFwcGx5IHRoZSBsb2Nr IHRvDQo+ICsgKiBAc3RhcnQ6CWxvY2sgc3RhcnQgYnl0ZSBvZmZzZXQNCj4gKyAqIEBlbmQ6CWxv Y2sgZW5kIGJ5dGUgb2Zmc2V0DQo+ICsgKiBAdHlwZToJYnl0ZSByYW5nZSB0eXBlIHJlYWQvd3Jp dGUNCj4gKyAqDQo+ICsgKiBSZXR1cm46CTAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yDQo+ ICsgKi8NCj4gK3N0YXRpYyBpbnQgY2hlY2tfbG9ja19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlscCwN Cj4gKwkJCSAgICBsb2ZmX3Qgc3RhcnQsDQo+ICsJCQkgICAgbG9mZl90IGVuZCwNCj4gKwkJCSAg ICB1bnNpZ25lZCBjaGFyIHR5cGUpDQo+ICt7DQo+ICsJc3RydWN0IGZpbGVfbG9jayAqZmxvY2s7 DQo+ICsJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpjdHggPSBmaWxlX2lub2RlKGZpbHApLT5p X2ZsY3R4Ow0KPiArCWludCBlcnJvciA9IDA7DQo+ICsNCj4gKwlpZiAoIWN0eCB8fCBsaXN0X2Vt cHR5X2NhcmVmdWwoJmN0eC0+ZmxjX3Bvc2l4KSkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlz cGluX2xvY2soJmN0eC0+ZmxjX2xvY2spOw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoZmxvY2ss ICZjdHgtPmZsY19wb3NpeCwgZmxfbGlzdCkgew0KPiArCQkvKiBjaGVjayBjb25mbGljdCBsb2Nr cyAqLw0KPiArCQlpZiAoZmxvY2stPmZsX2VuZCA+PSBzdGFydCAmJiBlbmQgPj0gZmxvY2stPmZs X3N0YXJ0KSB7DQo+ICsJCQlpZiAoZmxvY2stPmZsX3R5cGUgPT0gRl9SRExDSykgew0KPiArCQkJ CWlmICh0eXBlID09IFdSSVRFKSB7DQo+ICsJCQkJCWtzbWJkX2Vycigibm90IGFsbG93IHdyaXRl IGJ5DQo+IHNoYXJlZCBsb2NrXG4iKTsNCj4gKwkJCQkJZXJyb3IgPSAxOw0KPiArCQkJCQlnb3Rv IG91dDsNCj4gKwkJCQl9DQo+ICsJCQl9IGVsc2UgaWYgKGZsb2NrLT5mbF90eXBlID09IEZfV1JM Q0spIHsNCj4gKwkJCQkvKiBjaGVjayBvd25lciBpbiBsb2NrICovDQo+ICsJCQkJaWYgKGZsb2Nr LT5mbF9maWxlICE9IGZpbHApIHsNCj4gKwkJCQkJZXJyb3IgPSAxOw0KPiArCQkJCQlrc21iZF9l cnIoIm5vdCBhbGxvdyBydyBhY2Nlc3MgYnkNCj4gZXhjbHVzaXZlIGxvY2sgZnJvbSBvdGhlciBv cGVuc1xuIik7DQo+ICsJCQkJCWdvdG8gb3V0Ow0KPiArCQkJCX0NCj4gKwkJCX0NCj4gKwkJfQ0K PiArCX0NCj4gK291dDoNCj4gKwlzcGluX3VubG9jaygmY3R4LT5mbGNfbG9jayk7DQo+ICsJcmV0 dXJuIGVycm9yOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGtzbWJkX3Zmc19yZWFkKCkgLSB2 ZnMgaGVscGVyIGZvciBzbWIgZmlsZSByZWFkDQo+ICsgKiBAd29yazoJc21iIHdvcmsNCj4gKyAq IEBmaWQ6CWZpbGUgaWQgb2Ygb3BlbiBmaWxlDQo+ICsgKiBAY291bnQ6CXJlYWQgYnl0ZSBjb3Vu dA0KPiArICogQHBvczoJZmlsZSBwb3MNCj4gKyAqDQo+ICsgKiBSZXR1cm46CW51bWJlciBvZiBy ZWFkIGJ5dGVzIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJvcg0KPiArICovDQo+ICtpbnQga3Nt YmRfdmZzX3JlYWQoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCSBzdHJ1Y3Qga3NtYmRf ZmlsZSAqZnAsDQo+ICsJCSBzaXplX3QgY291bnQsDQo+ICsJCSBsb2ZmX3QgKnBvcykNCj4gK3sN Cj4gKwlzdHJ1Y3QgZmlsZSAqZmlscDsNCj4gKwlzc2l6ZV90IG5ieXRlcyA9IDA7DQo+ICsJY2hh ciAqcmJ1ZiwgKm5hbWU7DQo+ICsJc3RydWN0IGlub2RlICppbm9kZTsNCj4gKwljaGFyIG5hbWVi dWZbTkFNRV9NQVhdOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyYnVmID0gQVVYX1BBWUxPQUQo d29yayk7DQo+ICsJZmlscCA9IGZwLT5maWxwOw0KPiArCWlub2RlID0gZF9pbm9kZShmaWxwLT5m X3BhdGguZGVudHJ5KTsNCj4gKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkNCj4gKwkJcmV0 dXJuIC1FSVNESVI7DQo+ICsNCj4gKwlpZiAodW5saWtlbHkoY291bnQgPT0gMCkpDQo+ICsJCXJl dHVybiAwOw0KPiArDQo+ICsJaWYgKHdvcmstPmNvbm4tPmNvbm5lY3Rpb25fdHlwZSkgew0KPiAr CQlpZiAoIShmcC0+ZGFjY2VzcyAmIChGSUxFX1JFQURfREFUQV9MRSB8DQo+IEZJTEVfRVhFQ1VU RV9MRSkpKSB7DQo+ICsJCQlrc21iZF9lcnIoIm5vIHJpZ2h0IHRvIHJlYWQoJXMpXG4iLA0KPiBG UF9GSUxFTkFNRShmcCkpOw0KPiArCQkJcmV0dXJuIC1FQUNDRVM7DQo+ICsJCX0NCj4gKwl9DQo+ ICsNCj4gKwlpZiAoa3NtYmRfc3RyZWFtX2ZkKGZwKSkNCj4gKwkJcmV0dXJuIGtzbWJkX3Zmc19z dHJlYW1fcmVhZChmcCwgcmJ1ZiwgcG9zLCBjb3VudCk7DQo+ICsNCj4gKwlyZXQgPSBjaGVja19s b2NrX3JhbmdlKGZpbHAsICpwb3MsICpwb3MgKyBjb3VudCAtIDEsDQo+ICsJCQlSRUFEKTsNCj4g KwlpZiAocmV0KSB7DQo+ICsJCWtzbWJkX2VycigidW5hYmxlIHRvIHJlYWQgZHVlIHRvIGxvY2tc biIpOw0KPiArCQlyZXR1cm4gLUVBR0FJTjsNCj4gKwl9DQo+ICsNCj4gKwluYnl0ZXMgPSBrZXJu ZWxfcmVhZChmaWxwLCByYnVmLCBjb3VudCwgcG9zKTsNCj4gKwlpZiAobmJ5dGVzIDwgMCkgew0K PiArCQluYW1lID0gZF9wYXRoKCZmaWxwLT5mX3BhdGgsIG5hbWVidWYsIHNpemVvZihuYW1lYnVm KSk7DQo+ICsJCWlmIChJU19FUlIobmFtZSkpDQo+ICsJCQluYW1lID0gIihlcnJvcikiOw0KPiAr CQlrc21iZF9lcnIoInNtYiByZWFkIGZhaWxlZCBmb3IgKCVzKSwgZXJyID0gJXpkXG4iLA0KPiAr CQkJCW5hbWUsIG5ieXRlcyk7DQo+ICsJCXJldHVybiBuYnl0ZXM7DQo+ICsJfQ0KPiArDQo+ICsJ ZmlscC0+Zl9wb3MgPSAqcG9zOw0KPiArCXJldHVybiBuYnl0ZXM7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQga3NtYmRfdmZzX3N0cmVhbV93cml0ZShzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAsIGNo YXIgKmJ1ZiwgbG9mZl90DQo+ICpwb3MsDQo+ICsJc2l6ZV90IGNvdW50KQ0KPiArew0KPiArCWNo YXIgKnN0cmVhbV9idWYgPSBOVUxMLCAqd2J1ZjsNCj4gKwlzaXplX3Qgc2l6ZSwgdl9sZW47DQo+ ICsJaW50IGVyciA9IDA7DQo+ICsNCj4gKwlrc21iZF9kZWJ1ZyhWRlMsICJ3cml0ZSBzdHJlYW0g ZGF0YSBwb3MgOiAlbGx1LCBjb3VudCA6ICV6ZFxuIiwNCj4gKwkJCSpwb3MsIGNvdW50KTsNCj4g Kw0KPiArCXNpemUgPSAqcG9zICsgY291bnQ7DQo+ICsJaWYgKHNpemUgPiBYQVRUUl9TSVpFX01B WCkgew0KPiArCQlzaXplID0gWEFUVFJfU0laRV9NQVg7DQo+ICsJCWNvdW50ID0gKCpwb3MgKyBj b3VudCkgLSBYQVRUUl9TSVpFX01BWDsNCj4gKwl9DQo+ICsNCj4gKwl2X2xlbiA9IGtzbWJkX3Zm c19nZXRjYXNleGF0dHIoZnAtPmZpbHAtPmZfcGF0aC5kZW50cnksDQo+ICsJCQkJICAgICAgIGZw LT5zdHJlYW0ubmFtZSwNCj4gKwkJCQkgICAgICAgZnAtPnN0cmVhbS5zaXplLA0KPiArCQkJCSAg ICAgICAmc3RyZWFtX2J1Zik7DQo+ICsJaWYgKHZfbGVuID09IC1FTk9FTlQpIHsNCj4gKwkJa3Nt YmRfZXJyKCJub3QgZm91bmQgc3RyZWFtIGluIHhhdHRyIDogJXpkXG4iLCB2X2xlbik7DQo+ICsJ CWVyciA9IC1FTk9FTlQ7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCWlmICh2X2xl biA8IHNpemUpIHsNCj4gKwkJd2J1ZiA9IGtzbWJkX2FsbG9jKHNpemUpOw0KPiArCQlpZiAoIXdi dWYpIHsNCj4gKwkJCWVyciA9IC1FTk9NRU07DQo+ICsJCQlnb3RvIG91dDsNCj4gKwkJfQ0KPiAr DQo+ICsJCWlmICh2X2xlbiA+IDApDQo+ICsJCQltZW1jcHkod2J1Ziwgc3RyZWFtX2J1Ziwgdl9s ZW4pOw0KPiArCQlzdHJlYW1fYnVmID0gd2J1ZjsNCj4gKwl9DQo+ICsNCj4gKwltZW1jcHkoJnN0 cmVhbV9idWZbKnBvc10sIGJ1ZiwgY291bnQpOw0KPiArDQo+ICsJZXJyID0ga3NtYmRfdmZzX3Nl dHhhdHRyKGZwLT5maWxwLT5mX3BhdGguZGVudHJ5LA0KPiArCQkJCSBmcC0+c3RyZWFtLm5hbWUs DQo+ICsJCQkJICh2b2lkICopc3RyZWFtX2J1ZiwNCj4gKwkJCQkgc2l6ZSwNCj4gKwkJCQkgMCk7 DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJZnAtPmZpbHAtPmZf cG9zID0gKnBvczsNCj4gKwllcnIgPSAwOw0KPiArb3V0Og0KPiArCWtzbWJkX2ZyZWUoc3RyZWFt X2J1Zik7DQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBrc21iZF92 ZnNfd3JpdGUoKSAtIHZmcyBoZWxwZXIgZm9yIHNtYiBmaWxlIHdyaXRlDQo+ICsgKiBAd29yazoJ d29yaw0KPiArICogQGZpZDoJZmlsZSBpZCBvZiBvcGVuIGZpbGUNCj4gKyAqIEBidWY6CWJ1ZiBj b250YWluaW5nIGRhdGEgZm9yIHdyaXRpbmcNCj4gKyAqIEBjb3VudDoJcmVhZCBieXRlIGNvdW50 DQo+ICsgKiBAcG9zOglmaWxlIHBvcw0KPiArICogQHN5bmM6CWZzeW5jIGFmdGVyIHdyaXRlDQo+ ICsgKiBAd3JpdHRlbjoJbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4NCj4gKyAqDQo+ICsgKiBSZXR1 cm46CTAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yDQo+ICsgKi8NCj4gK2ludCBrc21iZF92 ZnNfd3JpdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIHN0cnVjdCBrc21iZF9maWxlICpmcCwN Cj4gKwljaGFyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MsIGJvb2wgc3luYywgc3Np emVfdCAqd3JpdHRlbikNCj4gK3sNCj4gKwlzdHJ1Y3Qga3NtYmRfc2Vzc2lvbiAqc2VzcyA9IHdv cmstPnNlc3M7DQo+ICsJc3RydWN0IGZpbGUgKmZpbHA7DQo+ICsJbG9mZl90CW9mZnNldCA9ICpw b3M7DQo+ICsJaW50IGVyciA9IDA7DQo+ICsNCj4gKwlpZiAoc2Vzcy0+Y29ubi0+Y29ubmVjdGlv bl90eXBlKSB7DQo+ICsJCWlmICghKGZwLT5kYWNjZXNzICYgRklMRV9XUklURV9EQVRBX0xFKSkg ew0KPiArCQkJa3NtYmRfZXJyKCJubyByaWdodCB0byB3cml0ZSglcylcbiIsDQo+IEZQX0ZJTEVO QU1FKGZwKSk7DQo+ICsJCQllcnIgPSAtRUFDQ0VTOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0N Cj4gKwl9DQo+ICsNCj4gKwlmaWxwID0gZnAtPmZpbHA7DQo+ICsNCj4gKwlpZiAoa3NtYmRfc3Ry ZWFtX2ZkKGZwKSkgew0KPiArCQllcnIgPSBrc21iZF92ZnNfc3RyZWFtX3dyaXRlKGZwLCBidWYs IHBvcywgY291bnQpOw0KPiArCQlpZiAoIWVycikNCj4gKwkJCSp3cml0dGVuID0gY291bnQ7DQo+ ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCWVyciA9IGNoZWNrX2xvY2tfcmFuZ2UoZmls cCwgKnBvcywgKnBvcyArIGNvdW50IC0gMSwgV1JJVEUpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJ a3NtYmRfZXJyKCJ1bmFibGUgdG8gd3JpdGUgZHVlIHRvIGxvY2tcbiIpOw0KPiArCQllcnIgPSAt RUFHQUlOOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBEbyB3ZSBuZWVkIHRv IGJyZWFrIGFueSBvZiBhIGxldmVsSUkgb3Bsb2NrPyAqLw0KPiArCXNtYl9icmVha19hbGxfbGV2 SUlfb3Bsb2NrKHdvcmssIGZwLCAxKTsNCj4gKw0KPiArCWVyciA9IGtlcm5lbF93cml0ZShmaWxw LCBidWYsIGNvdW50LCBwb3MpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCWtzbWJkX2RlYnVn KFZGUywgInNtYiB3cml0ZSBmYWlsZWQsIGVyciA9ICVkXG4iLCBlcnIpOw0KPiArCQlnb3RvIG91 dDsNCj4gKwl9DQo+ICsNCj4gKwlmaWxwLT5mX3BvcyA9ICpwb3M7DQo+ICsJKndyaXR0ZW4gPSBl cnI7DQo+ICsJZXJyID0gMDsNCj4gKwlpZiAoc3luYykgew0KPiArCQllcnIgPSB2ZnNfZnN5bmNf cmFuZ2UoZmlscCwgb2Zmc2V0LCBvZmZzZXQgKyAqd3JpdHRlbiwgMCk7DQo+ICsJCWlmIChlcnIg PCAwKQ0KPiArCQkJa3NtYmRfZXJyKCJmc3luYyBmYWlsZWQgZm9yIGZpbGVuYW1lID0gJXMsIGVy ciA9DQo+ICVkXG4iLA0KPiArCQkJCQlGUF9GSUxFTkFNRShmcCksIGVycik7DQo+ICsJfQ0KPiAr DQo+ICtvdXQ6DQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBrc21i ZF92ZnNfZ2V0YXR0cigpIC0gdmZzIGhlbHBlciBmb3Igc21iIGdldGF0dHINCj4gKyAqIEB3b3Jr Ogl3b3JrDQo+ICsgKiBAZmlkOglmaWxlIGlkIG9mIG9wZW4gZmlsZQ0KPiArICogQGF0dHJzOglp bm9kZSBhdHRyaWJ1dGVzDQo+ICsgKg0KPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3MsIG90aGVy d2lzZSBlcnJvcg0KPiArICovDQo+ICtpbnQga3NtYmRfdmZzX2dldGF0dHIoc3RydWN0IHBhdGgg KnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCkNCj4gK3sNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJ ZXJyID0gdmZzX2dldGF0dHIocGF0aCwgc3RhdCwgU1RBVFhfQlRJTUUsDQo+IEFUX1NUQVRYX1NZ TkNfQVNfU1RBVCk7DQo+ICsJaWYgKGVycikNCj4gKwkJa3NtYmRfZXJyKCJnZXRhdHRyIGZhaWxl ZCwgZXJyICVkXG4iLCBlcnIpOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICoga3NtYmRfdmZzX2ZzeW5jKCkgLSB2ZnMgaGVscGVyIGZvciBzbWIgZnN5bmMNCj4gKyAq IEB3b3JrOgl3b3JrDQo+ICsgKiBAZmlkOglmaWxlIGlkIG9mIG9wZW4gZmlsZQ0KPiArICoNCj4g KyAqIFJldHVybjoJMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3INCj4gKyAqLw0KPiAraW50 IGtzbWJkX3Zmc19mc3luYyhzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgdWludDY0X3QgZmlkLCB1 aW50NjRfdCBwX2lkKQ0KPiArew0KPiArCXN0cnVjdCBrc21iZF9maWxlICpmcDsNCj4gKwlpbnQg ZXJyOw0KPiArDQo+ICsJZnAgPSBrc21iZF9sb29rdXBfZmRfc2xvdyh3b3JrLCBmaWQsIHBfaWQp Ow0KPiArCWlmICghZnApIHsNCj4gKwkJa3NtYmRfZXJyKCJmYWlsZWQgdG8gZ2V0IGZpbHAgZm9y IGZpZCAlbGx1XG4iLCBmaWQpOw0KPiArCQlyZXR1cm4gLUVOT0VOVDsNCj4gKwl9DQo+ICsJZXJy ID0gdmZzX2ZzeW5jKGZwLT5maWxwLCAwKTsNCj4gKwlpZiAoZXJyIDwgMCkNCj4gKwkJa3NtYmRf ZXJyKCJzbWIgZnN5bmMgZmFpbGVkLCBlcnIgPSAlZFxuIiwgZXJyKTsNCj4gKwlrc21iZF9mZF9w dXQod29yaywgZnApOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog a3NtYmRfdmZzX3JlbW92ZV9maWxlKCkgLSB2ZnMgaGVscGVyIGZvciBzbWIgcm1kaXIgb3IgdW5s aW5rDQo+ICsgKiBAbmFtZToJYWJzb2x1dGUgZGlyZWN0b3J5IG9yIGZpbGUgbmFtZQ0KPiArICoN Cj4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3INCj4gKyAqLw0KPiAr aW50IGtzbWJkX3Zmc19yZW1vdmVfZmlsZShzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgY2hhciAq bmFtZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcGF0aCBwYXJlbnQ7DQo+ICsJc3RydWN0IGRlbnRyeSAq ZGlyLCAqZGVudHJ5Ow0KPiArCWNoYXIgKmxhc3Q7DQo+ICsJaW50IGVyciA9IC1FTk9FTlQ7DQo+ ICsNCj4gKwlsYXN0ID0gZXh0cmFjdF9sYXN0X2NvbXBvbmVudChuYW1lKTsNCj4gKwlpZiAoIWxh c3QpDQo+ICsJCXJldHVybiAtRU5PRU5UOw0KPiArDQo+ICsJaWYgKGtzbWJkX292ZXJyaWRlX2Zz aWRzKHdvcmspKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWVyciA9IGtlcm5fcGF0 aChuYW1lLCBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWSwNCj4gJnBhcmVudCk7DQo+ ICsJaWYgKGVycikgew0KPiArCQlrc21iZF9kZWJ1ZyhWRlMsICJjYW4ndCBnZXQgJXMsIGVyciAl ZFxuIiwgbmFtZSwgZXJyKTsNCj4gKwkJa3NtYmRfcmV2ZXJ0X2ZzaWRzKHdvcmspOw0KPiArCQly b2xsYmFja19wYXRoX21vZGlmaWNhdGlvbihsYXN0KTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9 DQo+ICsNCj4gKwlkaXIgPSBwYXJlbnQuZGVudHJ5Ow0KPiArCWlmICghZF9pbm9kZShkaXIpKQ0K PiArCQlnb3RvIG91dDsNCj4gKw0KPiArCWlub2RlX2xvY2tfbmVzdGVkKGRfaW5vZGUoZGlyKSwg SV9NVVRFWF9QQVJFTlQpOw0KPiArCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKGxhc3QsIGRpciwg c3RybGVuKGxhc3QpKTsNCj4gKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsNCj4gKwkJZXJyID0gUFRS X0VSUihkZW50cnkpOw0KPiArCQlrc21iZF9kZWJ1ZyhWRlMsICIlczogbG9va3VwIGZhaWxlZCwg ZXJyICVkXG4iLCBsYXN0LCBlcnIpOw0KPiArCQlnb3RvIG91dF9lcnI7DQo+ICsJfQ0KPiArDQo+ ICsJaWYgKCFkX2lub2RlKGRlbnRyeSkgfHwgIWRfaW5vZGUoZGVudHJ5KS0+aV9ubGluaykgew0K PiArCQlkcHV0KGRlbnRyeSk7DQo+ICsJCWVyciA9IC1FTk9FTlQ7DQo+ICsJCWdvdG8gb3V0X2Vy cjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoU19JU0RJUihkX2lub2RlKGRlbnRyeSktPmlfbW9kZSkp IHsNCj4gKwkJZXJyID0gdmZzX3JtZGlyKCZpbml0X3VzZXJfbnMsIGRfaW5vZGUoZGlyKSwgZGVu dHJ5KTsNCj4gKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVOT1RFTVBUWSkNCj4gKwkJCWtzbWJkX2Rl YnVnKFZGUywgIiVzOiBybWRpciBmYWlsZWQsIGVyciAlZFxuIiwNCj4gbmFtZSwNCj4gKwkJCQll cnIpOw0KPiArCX0gZWxzZSB7DQo+ICsJCWVyciA9IHZmc191bmxpbmsoJmluaXRfdXNlcl9ucywg ZF9pbm9kZShkaXIpLCBkZW50cnksIE5VTEwpOw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJa3NtYmRf ZGVidWcoVkZTLCAiJXM6IHVubGluayBmYWlsZWQsIGVyciAlZFxuIiwNCj4gbmFtZSwNCj4gKwkJ CQllcnIpOw0KPiArCX0NCj4gKw0KPiArCWRwdXQoZGVudHJ5KTsNCj4gK291dF9lcnI6DQo+ICsJ aW5vZGVfdW5sb2NrKGRfaW5vZGUoZGlyKSk7DQo+ICtvdXQ6DQo+ICsJcm9sbGJhY2tfcGF0aF9t b2RpZmljYXRpb24obGFzdCk7DQo+ICsJcGF0aF9wdXQoJnBhcmVudCk7DQo+ICsJa3NtYmRfcmV2 ZXJ0X2ZzaWRzKHdvcmspOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICoga3NtYmRfdmZzX2xpbmsoKSAtIHZmcyBoZWxwZXIgZm9yIGNyZWF0aW5nIHNtYiBoYXJkbGlu aw0KPiArICogQG9sZG5hbWU6CXNvdXJjZSBmaWxlIG5hbWUNCj4gKyAqIEBuZXduYW1lOgloYXJk bGluayBuYW1lDQo+ICsgKg0KPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBl cnJvcg0KPiArICovDQo+ICtpbnQga3NtYmRfdmZzX2xpbmsoc3RydWN0IGtzbWJkX3dvcmsgKndv cmssDQo+ICsJCWNvbnN0IGNoYXIgKm9sZG5hbWUsIGNvbnN0IGNoYXIgKm5ld25hbWUpDQo+ICt7 DQo+ICsJc3RydWN0IHBhdGggb2xkcGF0aCwgbmV3cGF0aDsNCj4gKwlzdHJ1Y3QgZGVudHJ5ICpk ZW50cnk7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCWlmIChrc21iZF9vdmVycmlkZV9mc2lkcyh3 b3JrKSkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwllcnIgPSBrZXJuX3BhdGgob2xk bmFtZSwgTE9PS1VQX0ZPTExPVywgJm9sZHBhdGgpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJa3Nt YmRfZXJyKCJjYW5ub3QgZ2V0IGxpbnV4IHBhdGggZm9yICVzLCBlcnIgPSAlZFxuIiwNCj4gKwkJ CQlvbGRuYW1lLCBlcnIpOw0KPiArCQlnb3RvIG91dDE7DQo+ICsJfQ0KPiArDQo+ICsJZGVudHJ5 ID0ga2Vybl9wYXRoX2NyZWF0ZShBVF9GRENXRCwgbmV3bmFtZSwgJm5ld3BhdGgsDQo+ICsJCQlM T09LVVBfRk9MTE9XIHwgTE9PS1VQX1JFVkFMKTsNCj4gKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsN Cj4gKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOw0KPiArCQlrc21iZF9lcnIoInBhdGggY3JlYXRl IGVyciBmb3IgJXMsIGVyciAlZFxuIiwgbmV3bmFtZSwNCj4gZXJyKTsNCj4gKwkJZ290byBvdXQy Ow0KPiArCX0NCj4gKw0KPiArCWVyciA9IC1FWERFVjsNCj4gKwlpZiAob2xkcGF0aC5tbnQgIT0g bmV3cGF0aC5tbnQpIHsNCj4gKwkJa3NtYmRfZXJyKCJ2ZnNfbGluayBmYWlsZWQgZXJyICVkXG4i LCBlcnIpOw0KPiArCQlnb3RvIG91dDM7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gdmZzX2xpbmso b2xkcGF0aC5kZW50cnksICZpbml0X3VzZXJfbnMsDQo+IGRfaW5vZGUobmV3cGF0aC5kZW50cnkp LA0KPiArCQkJZGVudHJ5LCBOVUxMKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlrc21iZF9kZWJ1ZyhW RlMsICJ2ZnNfbGluayBmYWlsZWQgZXJyICVkXG4iLCBlcnIpOw0KPiArDQo+ICtvdXQzOg0KPiAr CWRvbmVfcGF0aF9jcmVhdGUoJm5ld3BhdGgsIGRlbnRyeSk7DQo+ICtvdXQyOg0KPiArCXBhdGhf cHV0KCZvbGRwYXRoKTsNCj4gK291dDE6DQo+ICsJa3NtYmRfcmV2ZXJ0X2ZzaWRzKHdvcmspOw0K PiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgX19rc21iZF92ZnNfcmVu YW1lKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLA0KPiArCQkJICAgICAgc3RydWN0IGRlbnRyeSAq c3JjX2RlbnRfcGFyZW50LA0KPiArCQkJICAgICAgc3RydWN0IGRlbnRyeSAqc3JjX2RlbnQsDQo+ ICsJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkc3RfZGVudF9wYXJlbnQsDQo+ICsJCQkgICAgICBz dHJ1Y3QgZGVudHJ5ICp0cmFwX2RlbnQsDQo+ICsJCQkgICAgICBjaGFyICpkc3RfbmFtZSkNCj4g K3sNCj4gKwlzdHJ1Y3QgZGVudHJ5ICpkc3RfZGVudDsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJ c3Bpbl9sb2NrKCZzcmNfZGVudC0+ZF9sb2NrKTsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRz dF9kZW50LCAmc3JjX2RlbnQtPmRfc3ViZGlycywgZF9jaGlsZCkgew0KPiArCQlzdHJ1Y3Qga3Nt YmRfZmlsZSAqY2hpbGRfZnA7DQo+ICsNCj4gKwkJaWYgKGRfcmVhbGx5X2lzX25lZ2F0aXZlKGRz dF9kZW50KSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCWNoaWxkX2ZwID0ga3NtYmRfbG9v a3VwX2ZkX2lub2RlKGRfaW5vZGUoZHN0X2RlbnQpKTsNCj4gKwkJaWYgKGNoaWxkX2ZwKSB7DQo+ ICsJCQlzcGluX3VubG9jaygmc3JjX2RlbnQtPmRfbG9jayk7DQo+ICsJCQlrc21iZF9kZWJ1ZyhW RlMsICJGb3JiaWQgcmVuYW1lLCBzdWIgZmlsZS9kaXIgaXMgaW4NCj4gdXNlXG4iKTsNCj4gKwkJ CXJldHVybiAtRUFDQ0VTOw0KPiArCQl9DQo+ICsJfQ0KPiArCXNwaW5fdW5sb2NrKCZzcmNfZGVu dC0+ZF9sb2NrKTsNCj4gKw0KPiArCWlmIChkX3JlYWxseV9pc19uZWdhdGl2ZShzcmNfZGVudF9w YXJlbnQpKQ0KPiArCQlyZXR1cm4gLUVOT0VOVDsNCj4gKwlpZiAoZF9yZWFsbHlfaXNfbmVnYXRp dmUoZHN0X2RlbnRfcGFyZW50KSkNCj4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ICsJaWYgKGRfcmVh bGx5X2lzX25lZ2F0aXZlKHNyY19kZW50KSkNCj4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ICsJaWYg KHNyY19kZW50ID09IHRyYXBfZGVudCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlp ZiAoa3NtYmRfb3ZlcnJpZGVfZnNpZHMod29yaykpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiAr DQo+ICsJZHN0X2RlbnQgPSBsb29rdXBfb25lX2xlbihkc3RfbmFtZSwgZHN0X2RlbnRfcGFyZW50 LA0KPiBzdHJsZW4oZHN0X25hbWUpKTsNCj4gKwllcnIgPSBQVFJfRVJSKGRzdF9kZW50KTsNCj4g KwlpZiAoSVNfRVJSKGRzdF9kZW50KSkgew0KPiArCQlrc21iZF9lcnIoImxvb2t1cCBmYWlsZWQg JXMgWyVkXVxuIiwgZHN0X25hbWUsIGVycik7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0K PiArCWVyciA9IC1FTk9URU1QVFk7DQo+ICsJaWYgKGRzdF9kZW50ICE9IHRyYXBfZGVudCAmJiAh ZF9yZWFsbHlfaXNfcG9zaXRpdmUoZHN0X2RlbnQpKSB7DQo+ICsJCXN0cnVjdCByZW5hbWVkYXRh IHJkID0gew0KPiArCQkJLm9sZF9tbnRfdXNlcm5zCT0gJmluaXRfdXNlcl9ucywNCj4gKwkJCS5v bGRfZGlyCT0gZF9pbm9kZShzcmNfZGVudF9wYXJlbnQpLA0KPiArCQkJLm9sZF9kZW50cnkJPSBz cmNfZGVudCwNCj4gKwkJCS5uZXdfbW50X3VzZXJucwk9ICZpbml0X3VzZXJfbnMsDQo+ICsJCQku bmV3X2Rpcgk9IGRfaW5vZGUoZHN0X2RlbnRfcGFyZW50KSwNCj4gKwkJCS5uZXdfZGVudHJ5CT0g ZHN0X2RlbnQsDQo+ICsJCX07DQo+ICsJCWVyciA9IHZmc19yZW5hbWUoJnJkKTsNCj4gKwl9DQo+ ICsJaWYgKGVycikNCj4gKwkJa3NtYmRfZXJyKCJ2ZnNfcmVuYW1lIGZhaWxlZCBlcnIgJWRcbiIs IGVycik7DQo+ICsJaWYgKGRzdF9kZW50KQ0KPiArCQlkcHV0KGRzdF9kZW50KTsNCj4gK291dDoN Cj4gKwlrc21iZF9yZXZlcnRfZnNpZHMod29yayk7DQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4g Kw0KPiAraW50IGtzbWJkX3Zmc19mcF9yZW5hbWUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIHN0 cnVjdCBrc21iZF9maWxlDQo+ICpmcCwNCj4gKwkJY2hhciAqbmV3bmFtZSkNCj4gK3sNCj4gKwlz dHJ1Y3QgcGF0aCBkc3RfcGF0aDsNCj4gKwlzdHJ1Y3QgZGVudHJ5ICpzcmNfZGVudF9wYXJlbnQs ICpkc3RfZGVudF9wYXJlbnQ7DQo+ICsJc3RydWN0IGRlbnRyeSAqc3JjX2RlbnQsICp0cmFwX2Rl bnQ7DQo+ICsJY2hhciAqZHN0X25hbWU7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCWRzdF9uYW1l ID0gZXh0cmFjdF9sYXN0X2NvbXBvbmVudChuZXduYW1lKTsNCj4gKwlpZiAoIWRzdF9uYW1lKQ0K PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCXNyY19kZW50X3BhcmVudCA9IGRnZXRfcGFy ZW50KGZwLT5maWxwLT5mX3BhdGguZGVudHJ5KTsNCj4gKwlpZiAoIXNyY19kZW50X3BhcmVudCkN Cj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlzcmNfZGVudCA9IGZwLT5maWxwLT5mX3Bh dGguZGVudHJ5Ow0KPiArCWRnZXQoc3JjX2RlbnQpOw0KPiArDQo+ICsJZXJyID0ga2Vybl9wYXRo KG5ld25hbWUsIExPT0tVUF9GT0xMT1cgfA0KPiBMT09LVVBfRElSRUNUT1JZLCAmZHN0X3BhdGgp Ow0KPiArCWlmIChlcnIpIHsNCj4gKwkJa3NtYmRfZGVidWcoVkZTLCAiQ2Fubm90IGdldCBwYXRo IGZvciAlcyBbJWRdXG4iLA0KPiBuZXduYW1lLCBlcnIpOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9 DQo+ICsJZHN0X2RlbnRfcGFyZW50ID0gZHN0X3BhdGguZGVudHJ5Ow0KPiArCWRnZXQoZHN0X2Rl bnRfcGFyZW50KTsNCj4gKw0KPiArCXRyYXBfZGVudCA9IGxvY2tfcmVuYW1lKHNyY19kZW50X3Bh cmVudCwgZHN0X2RlbnRfcGFyZW50KTsNCj4gKwllcnIgPSBfX2tzbWJkX3Zmc19yZW5hbWUod29y aywNCj4gKwkJCQkgc3JjX2RlbnRfcGFyZW50LA0KPiArCQkJCSBzcmNfZGVudCwNCj4gKwkJCQkg ZHN0X2RlbnRfcGFyZW50LA0KPiArCQkJCSB0cmFwX2RlbnQsDQo+ICsJCQkJIGRzdF9uYW1lKTsN Cj4gKwl1bmxvY2tfcmVuYW1lKHNyY19kZW50X3BhcmVudCwgZHN0X2RlbnRfcGFyZW50KTsNCj4g KwlkcHV0KGRzdF9kZW50X3BhcmVudCk7DQo+ICsJcGF0aF9wdXQoJmRzdF9wYXRoKTsNCj4gK291 dDoNCj4gKwlkcHV0KHNyY19kZW50KTsNCj4gKwlkcHV0KHNyY19kZW50X3BhcmVudCk7DQo+ICsJ cmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBrc21iZF92ZnNfdHJ1bmNhdGUo KSAtIHZmcyBoZWxwZXIgZm9yIHNtYiBmaWxlIHRydW5jYXRlDQo+ICsgKiBAd29yazoJd29yaw0K PiArICogQG5hbWU6CW9sZCBmaWxlbmFtZQ0KPiArICogQGZpZDoJZmlsZSBpZCBvZiBvbGQgZmls ZQ0KPiArICogQHNpemU6CXRydW5jYXRlIHRvIGdpdmVuIHNpemUNCj4gKyAqDQo+ICsgKiBSZXR1 cm46CTAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yDQo+ICsgKi8NCj4gK2ludCBrc21iZF92 ZnNfdHJ1bmNhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsDQo+ ICsJc3RydWN0IGtzbWJkX2ZpbGUgKmZwLCBsb2ZmX3Qgc2l6ZSkNCj4gK3sNCj4gKwlzdHJ1Y3Qg cGF0aCBwYXRoOw0KPiArCWludCBlcnIgPSAwOw0KPiArCXN0cnVjdCBpbm9kZSAqaW5vZGU7DQo+ ICsNCj4gKwlpZiAobmFtZSkgew0KPiArCQllcnIgPSBrZXJuX3BhdGgobmFtZSwgMCwgJnBhdGgp Ow0KPiArCQlpZiAoZXJyKSB7DQo+ICsJCQlrc21iZF9lcnIoImNhbm5vdCBnZXQgbGludXggcGF0 aCBmb3IgJXMsIGVyciAlZFxuIiwNCj4gKwkJCQkJbmFtZSwgZXJyKTsNCj4gKwkJCXJldHVybiBl cnI7DQo+ICsJCX0NCj4gKwkJZXJyID0gdmZzX3RydW5jYXRlKCZwYXRoLCBzaXplKTsNCj4gKwkJ aWYgKGVycikNCj4gKwkJCWtzbWJkX2VycigidHJ1bmNhdGUgZmFpbGVkIGZvciAlcyBlcnIgJWRc biIsDQo+ICsJCQkJCW5hbWUsIGVycik7DQo+ICsJCXBhdGhfcHV0KCZwYXRoKTsNCj4gKwl9IGVs c2Ugew0KPiArCQlzdHJ1Y3QgZmlsZSAqZmlscDsNCj4gKw0KPiArCQlmaWxwID0gZnAtPmZpbHA7 DQo+ICsNCj4gKwkJLyogRG8gd2UgbmVlZCB0byBicmVhayBhbnkgb2YgYSBsZXZlbElJIG9wbG9j az8gKi8NCj4gKwkJc21iX2JyZWFrX2FsbF9sZXZJSV9vcGxvY2sod29yaywgZnAsIDEpOw0KPiAr DQo+ICsJCWlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsNCj4gKwkJaWYgKHNpemUgPCBpbm9kZS0+ aV9zaXplKSB7DQo+ICsJCQllcnIgPSBjaGVja19sb2NrX3JhbmdlKGZpbHAsIHNpemUsDQo+ICsJ CQkJCWlub2RlLT5pX3NpemUgLSAxLCBXUklURSk7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQllcnIg PSBjaGVja19sb2NrX3JhbmdlKGZpbHAsIGlub2RlLT5pX3NpemUsDQo+ICsJCQkJCXNpemUgLSAx LCBXUklURSk7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAoZXJyKSB7DQo+ICsJCQlrc21iZF9lcnIo ImZhaWxlZCBkdWUgdG8gbG9ja1xuIik7DQo+ICsJCQlyZXR1cm4gLUVBR0FJTjsNCj4gKwkJfQ0K PiArDQo+ICsJCWVyciA9IHZmc190cnVuY2F0ZSgmZmlscC0+Zl9wYXRoLCBzaXplKTsNCj4gKwkJ aWYgKGVycikNCj4gKwkJCWtzbWJkX2VycigidHJ1bmNhdGUgZmFpbGVkIGZvciBmaWxlbmFtZSA6 ICVzIGVycg0KPiAlZFxuIiwNCj4gKwkJCQkJZnAtPmZpbGVuYW1lLCBlcnIpOw0KPiArCX0NCj4g Kw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICoga3NtYmRfdmZzX2xp c3R4YXR0cigpIC0gdmZzIGhlbHBlciBmb3Igc21iIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlcw0K PiArICogQGRlbnRyeToJZGVudHJ5IG9mIGZpbGUgZm9yIGxpc3RpbmcgeGF0dHJzDQo+ICsgKiBA bGlzdDoJZGVzdGluYXRpb24gYnVmZmVyDQo+ICsgKiBAc2l6ZToJZGVzdGluYXRpb24gYnVmZmVy IGxlbmd0aA0KPiArICoNCj4gKyAqIFJldHVybjoJeGF0dHIgbGlzdCBsZW5ndGggb24gc3VjY2Vz cywgb3RoZXJ3aXNlIGVycm9yDQo+ICsgKi8NCj4gK3NzaXplX3Qga3NtYmRfdmZzX2xpc3R4YXR0 cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKipsaXN0KQ0KPiArew0KPiArCXNzaXplX3Qg c2l6ZTsNCj4gKwljaGFyICp2bGlzdCA9IE5VTEw7DQo+ICsNCj4gKwlzaXplID0gdmZzX2xpc3R4 YXR0cihkZW50cnksIE5VTEwsIDApOw0KPiArCWlmIChzaXplIDw9IDApDQo+ICsJCXJldHVybiBz aXplOw0KPiArDQo+ICsJdmxpc3QgPSBrc21iZF9hbGxvYyhzaXplKTsNCj4gKwlpZiAoIXZsaXN0 KQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCSpsaXN0ID0gdmxpc3Q7DQo+ICsJc2l6 ZSA9IHZmc19saXN0eGF0dHIoZGVudHJ5LCB2bGlzdCwgc2l6ZSk7DQo+ICsJaWYgKHNpemUgPCAw KSB7DQo+ICsJCWtzbWJkX2RlYnVnKFZGUywgImxpc3R4YXR0ciBmYWlsZWRcbiIpOw0KPiArCQlr c21iZF92ZnNfeGF0dHJfZnJlZSh2bGlzdCk7DQo+ICsJCSpsaXN0ID0gTlVMTDsNCj4gKwl9DQo+ ICsNCj4gKwlyZXR1cm4gc2l6ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHNzaXplX3Qga3NtYmRf dmZzX3hhdHRyX2xlbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksDQo+ICsJCQkgICBjaGFyICp4YXR0 cl9uYW1lKQ0KPiArew0KPiArCXJldHVybiB2ZnNfZ2V0eGF0dHIoJmluaXRfdXNlcl9ucywgZGVu dHJ5LCB4YXR0cl9uYW1lLCBOVUxMLCAwKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBrc21i ZF92ZnNfZ2V0eGF0dHIoKSAtIHZmcyBoZWxwZXIgZm9yIHNtYiBnZXQgZXh0ZW5kZWQgYXR0cmli dXRlcyB2YWx1ZQ0KPiArICogQGRlbnRyeToJZGVudHJ5IG9mIGZpbGUgZm9yIGdldHRpbmcgeGF0 dHJzDQo+ICsgKiBAeGF0dHJfbmFtZToJbmFtZSBvZiB4YXR0ciBuYW1lIHRvIHF1ZXJ5DQo+ICsg KiBAeGF0dHJfYnVmOglkZXN0aW5hdGlvbiBidWZmZXIgeGF0dHIgdmFsdWUNCj4gKyAqDQo+ICsg KiBSZXR1cm46CXJlYWQgeGF0dHIgdmFsdWUgbGVuZ3RoIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBl cnJvcg0KPiArICovDQo+ICtzc2l6ZV90IGtzbWJkX3Zmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksDQo+ICsJCQkgICBjaGFyICp4YXR0cl9uYW1lLA0KPiArCQkJICAgY2hhciAqKnhh dHRyX2J1ZikNCj4gK3sNCj4gKwlzc2l6ZV90IHhhdHRyX2xlbjsNCj4gKwljaGFyICpidWY7DQo+ ICsNCj4gKwkqeGF0dHJfYnVmID0gTlVMTDsNCj4gKwl4YXR0cl9sZW4gPSBrc21iZF92ZnNfeGF0 dHJfbGVuKGRlbnRyeSwgeGF0dHJfbmFtZSk7DQo+ICsJaWYgKHhhdHRyX2xlbiA8IDApDQo+ICsJ CXJldHVybiB4YXR0cl9sZW47DQo+ICsNCj4gKwlidWYgPSBrbWFsbG9jKHhhdHRyX2xlbiArIDEs IEdGUF9LRVJORUwpOw0KPiArCWlmICghYnVmKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0K PiArCXhhdHRyX2xlbiA9IHZmc19nZXR4YXR0cigmaW5pdF91c2VyX25zLCBkZW50cnksIHhhdHRy X25hbWUsICh2b2lkDQo+ICopYnVmLA0KPiArCQkJeGF0dHJfbGVuKTsNCj4gKwlpZiAoeGF0dHJf bGVuID4gMCkNCj4gKwkJKnhhdHRyX2J1ZiA9IGJ1ZjsNCj4gKwllbHNlDQo+ICsJCWtmcmVlKGJ1 Zik7DQo+ICsJcmV0dXJuIHhhdHRyX2xlbjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBrc21i ZF92ZnNfc2V0eGF0dHIoKSAtIHZmcyBoZWxwZXIgZm9yIHNtYiBzZXQgZXh0ZW5kZWQgYXR0cmli dXRlcyB2YWx1ZQ0KPiArICogQGRlbnRyeToJZGVudHJ5IHRvIHNldCBYQVRUUiBhdA0KPiArICog QG5hbWU6CXhhdHRyIG5hbWUgZm9yIHNldHhhdHRyDQo+ICsgKiBAdmFsdWU6CXhhdHRyIHZhbHVl IHRvIHNldA0KPiArICogQHNpemU6CXNpemUgb2YgeGF0dHIgdmFsdWUNCj4gKyAqIEBmbGFnczoJ ZGVzdGluYXRpb24gYnVmZmVyIGxlbmd0aA0KPiArICoNCj4gKyAqIFJldHVybjoJMCBvbiBzdWNj ZXNzLCBvdGhlcndpc2UgZXJyb3INCj4gKyAqLw0KPiAraW50IGtzbWJkX3Zmc19zZXR4YXR0cihz dHJ1Y3QgZGVudHJ5ICpkZW50cnksDQo+ICsJCSAgICAgICBjb25zdCBjaGFyICphdHRyX25hbWUs DQo+ICsJCSAgICAgICBjb25zdCB2b2lkICphdHRyX3ZhbHVlLA0KPiArCQkgICAgICAgc2l6ZV90 IGF0dHJfc2l6ZSwNCj4gKwkJICAgICAgIGludCBmbGFncykNCj4gK3sNCj4gKwlpbnQgZXJyOw0K PiArDQo+ICsJZXJyID0gdmZzX3NldHhhdHRyKCZpbml0X3VzZXJfbnMsIGRlbnRyeSwNCj4gKwkJ CSAgIGF0dHJfbmFtZSwNCj4gKwkJCSAgIGF0dHJfdmFsdWUsDQo+ICsJCQkgICBhdHRyX3NpemUs DQo+ICsJCQkgICBmbGFncyk7DQo+ICsJaWYgKGVycikNCj4gKwkJa3NtYmRfZGVidWcoVkZTLCAi c2V0eGF0dHIgZmFpbGVkLCBlcnIgJWRcbiIsIGVycik7DQo+ICsJcmV0dXJuIGVycjsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgKiBrc21iZF92ZnNfc2V0X2ZhZHZpc2UoKSAtIGNvbnZlcnQgc21i IElPIGNhY2hpbmcgb3B0aW9ucyB0byBsaW51eA0KPiBvcHRpb25zDQo+ICsgKiBAZmlscDoJZmls ZSBwb2ludGVyIGZvciBJTw0KPiArICogQG9wdGlvbnM6CXNtYiBJTyBvcHRpb25zDQo+ICsgKi8N Cj4gK3ZvaWQga3NtYmRfdmZzX3NldF9mYWR2aXNlKHN0cnVjdCBmaWxlICpmaWxwLCBfX2xlMzIg b3B0aW9uKQ0KPiArew0KPiArCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOw0KPiArDQo+ ICsJbWFwcGluZyA9IGZpbHAtPmZfbWFwcGluZzsNCj4gKw0KPiArCWlmICghb3B0aW9uIHx8ICFt YXBwaW5nKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAob3B0aW9uICYgRklMRV9XUklURV9U SFJPVUdIX0xFKQ0KPiArCQlmaWxwLT5mX2ZsYWdzIHw9IE9fU1lOQzsNCj4gKwllbHNlIGlmIChv cHRpb24gJiBGSUxFX1NFUVVFTlRJQUxfT05MWV9MRSkgew0KPiArCQlmaWxwLT5mX3JhLnJhX3Bh Z2VzID0gaW5vZGVfdG9fYmRpKG1hcHBpbmctPmhvc3QpLQ0KPiA+cmFfcGFnZXMgKiAyOw0KPiAr CQlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7DQo+ICsJCWZpbHAtPmZfbW9kZSAmPSB+Rk1PREVf UkFORE9NOw0KPiArCQlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsNCj4gKwl9IGVsc2UgaWYg KG9wdGlvbiAmIEZJTEVfUkFORE9NX0FDQ0VTU19MRSkgew0KPiArCQlzcGluX2xvY2soJmZpbHAt PmZfbG9jayk7DQo+ICsJCWZpbHAtPmZfbW9kZSB8PSBGTU9ERV9SQU5ET007DQo+ICsJCXNwaW5f dW5sb2NrKCZmaWxwLT5mX2xvY2spOw0KPiArCX0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBr c21iZF92ZnNfbG9jaygpIC0gdmZzIGhlbHBlciBmb3Igc21iIGZpbGUgbG9ja2luZw0KPiArICog QGZpbHA6CXRoZSBmaWxlIHRvIGFwcGx5IHRoZSBsb2NrIHRvDQo+ICsgKiBAY21kOgl0eXBlIG9m IGxvY2tpbmcgb3BlcmF0aW9uIChGX1NFVExLLCBGX0dFVExLLCBldGMuKQ0KPiArICogQGZsb2Nr OglUaGUgbG9jayB0byBiZSBhcHBsaWVkDQo+ICsgKg0KPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nl c3MsIG90aGVyd2lzZSBlcnJvcg0KPiArICovDQo+ICtpbnQga3NtYmRfdmZzX2xvY2soc3RydWN0 IGZpbGUgKmZpbHAsIGludCBjbWQsDQo+ICsJCQlzdHJ1Y3QgZmlsZV9sb2NrICpmbG9jaykNCj4g K3sNCj4gKwlrc21iZF9kZWJ1ZyhWRlMsICJjYWxsaW5nIHZmc19sb2NrX2ZpbGVcbiIpOw0KPiAr CXJldHVybiB2ZnNfbG9ja19maWxlKGZpbHAsIGNtZCwgZmxvY2ssIE5VTEwpOw0KPiArfQ0KPiAr DQo+ICtpbnQga3NtYmRfdmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrc21i ZF9yZWFkZGlyX2RhdGEgKnJkYXRhKQ0KPiArew0KPiArCXJldHVybiBpdGVyYXRlX2RpcihmaWxl LCAmcmRhdGEtPmN0eCk7DQo+ICt9DQo+ICsNCj4gK2ludCBrc21iZF92ZnNfYWxsb2Nfc2l6ZShz dHJ1Y3Qga3NtYmRfd29yayAqd29yaywNCj4gKwkJCSBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAsDQo+ ICsJCQkgbG9mZl90IGxlbikNCj4gK3sNCj4gKwlzbWJfYnJlYWtfYWxsX2xldklJX29wbG9jayh3 b3JrLCBmcCwgMSk7DQo+ICsJcmV0dXJuIHZmc19mYWxsb2NhdGUoZnAtPmZpbHAsIEZBTExPQ19G TF9LRUVQX1NJWkUsIDAsIGxlbik7DQo+ICt9DQo+ICsNCj4gK2ludCBrc21iZF92ZnNfemVyb19k YXRhKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLA0KPiArCQkJIHN0cnVjdCBrc21iZF9maWxlICpm cCwNCj4gKwkJCSBsb2ZmX3Qgb2ZmLA0KPiArCQkJIGxvZmZfdCBsZW4pDQo+ICt7DQo+ICsJc21i X2JyZWFrX2FsbF9sZXZJSV9vcGxvY2sod29yaywgZnAsIDEpOw0KPiArCWlmIChmcC0+Zl9jaS0+ bV9mYXR0ciAmIEFUVFJfU1BBUlNFX0ZJTEVfTEUpDQo+ICsJCXJldHVybiB2ZnNfZmFsbG9jYXRl KGZwLT5maWxwLA0KPiArCQkJRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9T SVpFLA0KPiBvZmYsIGxlbik7DQo+ICsNCj4gKwlyZXR1cm4gdmZzX2ZhbGxvY2F0ZShmcC0+Zmls cCwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsIG9mZiwgbGVuKTsNCj4gK30NCj4gKw0KPiAraW50IGtz bWJkX3Zmc19mcWFyX2xzZWVrKHN0cnVjdCBrc21iZF9maWxlICpmcCwgbG9mZl90IHN0YXJ0LCBs b2ZmX3QgbGVuZ3RoLA0KPiArCXN0cnVjdCBmaWxlX2FsbG9jYXRlZF9yYW5nZV9idWZmZXIgKnJh bmdlcywNCj4gKwlpbnQgaW5fY291bnQsIGludCAqb3V0X2NvdW50KQ0KPiArew0KPiArCXN0cnVj dCBmaWxlICpmID0gZnAtPmZpbHA7DQo+ICsJc3RydWN0IGlub2RlICppbm9kZSA9IEZQX0lOT0RF KGZwKTsNCj4gKwlsb2ZmX3QgbWF4Ynl0ZXMgPSAodTY0KWlub2RlLT5pX3NiLT5zX21heGJ5dGVz LCBlbmQ7DQo+ICsJbG9mZl90IGV4dGVudF9zdGFydCwgZXh0ZW50X2VuZDsNCj4gKwlpbnQgcmV0 ID0gMDsNCj4gKw0KPiArCWlmIChzdGFydCA+IG1heGJ5dGVzKQ0KPiArCQlyZXR1cm4gLUVGQklH Ow0KPiArDQo+ICsJaWYgKCFpbl9jb3VudCkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwkvKg0K PiArCSAqIFNocmluayByZXF1ZXN0IHNjb3BlIHRvIHdoYXQgdGhlIGZzIGNhbiBhY3R1YWxseSBo YW5kbGUuDQo+ICsJICovDQo+ICsJaWYgKGxlbmd0aCA+IG1heGJ5dGVzIHx8IChtYXhieXRlcyAt IGxlbmd0aCkgPCBzdGFydCkNCj4gKwkJbGVuZ3RoID0gbWF4Ynl0ZXMgLSBzdGFydDsNCj4gKw0K PiArCWlmIChzdGFydCArIGxlbmd0aCA+IGlub2RlLT5pX3NpemUpDQo+ICsJCWxlbmd0aCA9IGlu b2RlLT5pX3NpemUgLSBzdGFydDsNCj4gKw0KPiArCSpvdXRfY291bnQgPSAwOw0KPiArCWVuZCA9 IHN0YXJ0ICsgbGVuZ3RoOw0KPiArCXdoaWxlIChzdGFydCA8IGVuZCAmJiAqb3V0X2NvdW50IDwg aW5fY291bnQpIHsNCj4gKwkJZXh0ZW50X3N0YXJ0ID0gZi0+Zl9vcC0+bGxzZWVrKGYsIHN0YXJ0 LCBTRUVLX0RBVEEpOw0KPiArCQlpZiAoZXh0ZW50X3N0YXJ0IDwgMCkgew0KPiArCQkJaWYgKGV4 dGVudF9zdGFydCAhPSAtRU5YSU8pDQo+ICsJCQkJcmV0ID0gKGludClleHRlbnRfc3RhcnQ7DQo+ ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmIChleHRlbnRfc3RhcnQgPj0gZW5kKQ0K PiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJZXh0ZW50X2VuZCA9IGYtPmZfb3AtPmxsc2VlayhmLCBl eHRlbnRfc3RhcnQsIFNFRUtfSE9MRSk7DQo+ICsJCWlmIChleHRlbnRfZW5kIDwgMCkgew0KPiAr CQkJaWYgKGV4dGVudF9lbmQgIT0gLUVOWElPKQ0KPiArCQkJCXJldCA9IChpbnQpZXh0ZW50X2Vu ZDsNCj4gKwkJCWJyZWFrOw0KPiArCQl9IGVsc2UgaWYgKGV4dGVudF9zdGFydCA+PSBleHRlbnRf ZW5kKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJcmFuZ2VzWypvdXRfY291bnRdLmZpbGVfb2Zm c2V0ID0gY3B1X3RvX2xlNjQoZXh0ZW50X3N0YXJ0KTsNCj4gKwkJcmFuZ2VzWygqb3V0X2NvdW50 KSsrXS5sZW5ndGggPQ0KPiArCQkJY3B1X3RvX2xlNjQobWluKGV4dGVudF9lbmQsIGVuZCkgLSBl eHRlbnRfc3RhcnQpOw0KPiArDQo+ICsJCXN0YXJ0ID0gZXh0ZW50X2VuZDsNCj4gKwl9DQo+ICsN Cj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtpbnQga3NtYmRfdmZzX3JlbW92ZV94YXR0 cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmF0dHJfbmFtZSkNCj4gK3sNCj4gKwlyZXR1 cm4gdmZzX3JlbW92ZXhhdHRyKCZpbml0X3VzZXJfbnMsIGRlbnRyeSwgYXR0cl9uYW1lKTsNCj4g K30NCj4gKw0KPiArdm9pZCBrc21iZF92ZnNfeGF0dHJfZnJlZShjaGFyICp4YXR0cikNCj4gK3sN Cj4gKwlrc21iZF9mcmVlKHhhdHRyKTsNCj4gK30NCj4gKw0KPiAraW50IGtzbWJkX3Zmc191bmxp bmsoc3RydWN0IGRlbnRyeSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpDQo+ICt7DQo+ICsJ aW50IGVyciA9IDA7DQo+ICsNCj4gKwlkZ2V0KGRlbnRyeSk7DQo+ICsJaW5vZGVfbG9ja19uZXN0 ZWQoZF9pbm9kZShkaXIpLCBJX01VVEVYX1BBUkVOVCk7DQo+ICsJaWYgKCFkX2lub2RlKGRlbnRy eSkgfHwgIWRfaW5vZGUoZGVudHJ5KS0+aV9ubGluaykgew0KPiArCQllcnIgPSAtRU5PRU5UOw0K PiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoU19JU0RJUihkX2lub2RlKGRlbnRy eSktPmlfbW9kZSkpDQo+ICsJCWVyciA9IHZmc19ybWRpcigmaW5pdF91c2VyX25zLCBkX2lub2Rl KGRpciksIGRlbnRyeSk7DQo+ICsJZWxzZQ0KPiArCQllcnIgPSB2ZnNfdW5saW5rKCZpbml0X3Vz ZXJfbnMsIGRfaW5vZGUoZGlyKSwgZGVudHJ5LCBOVUxMKTsNCj4gKw0KPiArb3V0Og0KPiArCWlu b2RlX3VubG9jayhkX2lub2RlKGRpcikpOw0KPiArCWRwdXQoZGVudHJ5KTsNCj4gKwlpZiAoZXJy KQ0KPiArCQlrc21iZF9kZWJ1ZyhWRlMsICJmYWlsZWQgdG8gZGVsZXRlLCBlcnIgJWRcbiIsIGVy cik7DQo+ICsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICoga3NtYmRf dmZzX2dldF9sb2dpY2FsX3NlY3Rvcl9zaXplKCkgLSBnZXQgbG9naWNhbCBzZWN0b3Igc2l6ZSBm cm9tIGlub2RlDQo+ICsgKiBAaW5vZGU6IGlub2RlDQo+ICsgKg0KPiArICogUmV0dXJuOiBsb2dp Y2FsIHNlY3RvciBzaXplDQo+ICsgKi8NCj4gK3Vuc2lnbmVkIHNob3J0IGtzbWJkX3Zmc19sb2dp Y2FsX3NlY3Rvcl9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpDQo+ICt7DQo+ICsJc3RydWN0IHJl cXVlc3RfcXVldWUgKnE7DQo+ICsJdW5zaWduZWQgc2hvcnQgcmV0X3ZhbCA9IDUxMjsNCj4gKw0K PiArCWlmICghaW5vZGUtPmlfc2ItPnNfYmRldikNCj4gKwkJcmV0dXJuIHJldF92YWw7DQo+ICsN Cj4gKwlxID0gaW5vZGUtPmlfc2ItPnNfYmRldi0+YmRfZGlzay0+cXVldWU7DQo+ICsNCj4gKwlp ZiAocSAmJiBxLT5saW1pdHMubG9naWNhbF9ibG9ja19zaXplKQ0KPiArCQlyZXRfdmFsID0gcS0+ bGltaXRzLmxvZ2ljYWxfYmxvY2tfc2l6ZTsNCj4gKw0KPiArCXJldHVybiByZXRfdmFsOw0KPiAr fQ0KPiArDQo+ICsvKg0KPiArICoga3NtYmRfdmZzX2dldF9zbWIyX3NlY3Rvcl9zaXplKCkgLSBn ZXQgZnMgc2VjdG9yIHNpemVzDQo+ICsgKiBAaW5vZGU6IGlub2RlDQo+ICsgKiBAZnNfc3M6IGZz IHNlY3RvciBzaXplIHN0cnVjdA0KPiArICovDQo+ICt2b2lkIGtzbWJkX3Zmc19zbWIyX3NlY3Rv cl9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsDQo+ICsJc3RydWN0IGtzbWJkX2ZzX3NlY3Rvcl9z aXplICpmc19zcykNCj4gK3sNCj4gKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsNCj4gKw0KPiAr CWZzX3NzLT5sb2dpY2FsX3NlY3Rvcl9zaXplID0gNTEyOw0KPiArCWZzX3NzLT5waHlzaWNhbF9z ZWN0b3Jfc2l6ZSA9IDUxMjsNCj4gKwlmc19zcy0+b3B0aW1hbF9pb19zaXplID0gNTEyOw0KPiAr DQo+ICsJaWYgKCFpbm9kZS0+aV9zYi0+c19iZGV2KQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlx ID0gaW5vZGUtPmlfc2ItPnNfYmRldi0+YmRfZGlzay0+cXVldWU7DQo+ICsNCj4gKwlpZiAocSkg ew0KPiArCQlpZiAocS0+bGltaXRzLmxvZ2ljYWxfYmxvY2tfc2l6ZSkNCj4gKwkJCWZzX3NzLT5s b2dpY2FsX3NlY3Rvcl9zaXplID0NCj4gKwkJCQlxLT5saW1pdHMubG9naWNhbF9ibG9ja19zaXpl Ow0KPiArCQlpZiAocS0+bGltaXRzLnBoeXNpY2FsX2Jsb2NrX3NpemUpDQo+ICsJCQlmc19zcy0+ cGh5c2ljYWxfc2VjdG9yX3NpemUgPQ0KPiArCQkJCXEtPmxpbWl0cy5waHlzaWNhbF9ibG9ja19z aXplOw0KPiArCQlpZiAocS0+bGltaXRzLmlvX29wdCkNCj4gKwkJCWZzX3NzLT5vcHRpbWFsX2lv X3NpemUgPSBxLT5saW1pdHMuaW9fb3B0Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBfX2Rpcl9lbXB0eShzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwNCj4gKwkJCQkgICBjb25zdCBj aGFyICpuYW1lLA0KPiArCQkJCSAgIGludCBuYW1sZW4sDQo+ICsJCQkJICAgbG9mZl90IG9mZnNl dCwNCj4gKwkJCQkgICB1NjQgaW5vLA0KPiArCQkJCSAgIHVuc2lnbmVkIGludCBkX3R5cGUpDQo+ ICt7DQo+ICsJc3RydWN0IGtzbWJkX3JlYWRkaXJfZGF0YSAqYnVmOw0KPiArDQo+ICsJYnVmID0g Y29udGFpbmVyX29mKGN0eCwgc3RydWN0IGtzbWJkX3JlYWRkaXJfZGF0YSwgY3R4KTsNCj4gKwli dWYtPmRpcmVudF9jb3VudCsrOw0KPiArDQo+ICsJaWYgKGJ1Zi0+ZGlyZW50X2NvdW50ID4gMikN Cj4gKwkJcmV0dXJuIC1FTk9URU1QVFk7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICoga3NtYmRfdmZzX2VtcHR5X2RpcigpIC0gY2hlY2sgZm9yIGVtcHR5IGRpcmVjdG9y eQ0KPiArICogQGZwOglrc21iZCBmaWxlIHBvaW50ZXINCj4gKyAqDQo+ICsgKiBSZXR1cm46CXRy dWUgaWYgZGlyZWN0b3J5IGVtcHR5LCBvdGhlcndpc2UgZmFsc2UNCj4gKyAqLw0KPiAraW50IGtz bWJkX3Zmc19lbXB0eV9kaXIoc3RydWN0IGtzbWJkX2ZpbGUgKmZwKQ0KPiArew0KPiArCWludCBl cnI7DQo+ICsJc3RydWN0IGtzbWJkX3JlYWRkaXJfZGF0YSByZWFkZGlyX2RhdGE7DQo+ICsNCj4g KwltZW1zZXQoJnJlYWRkaXJfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBrc21iZF9yZWFkZGlyX2Rh dGEpKTsNCj4gKw0KPiArCXNldF9jdHhfYWN0b3IoJnJlYWRkaXJfZGF0YS5jdHgsIF9fZGlyX2Vt cHR5KTsNCj4gKwlyZWFkZGlyX2RhdGEuZGlyZW50X2NvdW50ID0gMDsNCj4gKw0KPiArCWVyciA9 IGtzbWJkX3Zmc19yZWFkZGlyKGZwLT5maWxwLCAmcmVhZGRpcl9kYXRhKTsNCj4gKwlpZiAocmVh ZGRpcl9kYXRhLmRpcmVudF9jb3VudCA+IDIpDQo+ICsJCWVyciA9IC1FTk9URU1QVFk7DQo+ICsJ ZWxzZQ0KPiArCQllcnIgPSAwOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgX19jYXNlbGVzc19sb29rdXAoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsDQo+ICsJCQkg ICAgIGNvbnN0IGNoYXIgKm5hbWUsDQo+ICsJCQkgICAgIGludCBuYW1sZW4sDQo+ICsJCQkgICAg IGxvZmZfdCBvZmZzZXQsDQo+ICsJCQkgICAgIHU2NCBpbm8sDQo+ICsJCQkgICAgIHVuc2lnbmVk IGludCBkX3R5cGUpDQo+ICt7DQo+ICsJc3RydWN0IGtzbWJkX3JlYWRkaXJfZGF0YSAqYnVmOw0K PiArDQo+ICsJYnVmID0gY29udGFpbmVyX29mKGN0eCwgc3RydWN0IGtzbWJkX3JlYWRkaXJfZGF0 YSwgY3R4KTsNCj4gKw0KPiArCWlmIChidWYtPnVzZWQgIT0gbmFtbGVuKQ0KPiArCQlyZXR1cm4g MDsNCj4gKwlpZiAoIXN0cm5jYXNlY21wKChjaGFyICopYnVmLT5wcml2YXRlLCBuYW1lLCBuYW1s ZW4pKSB7DQo+ICsJCW1lbWNweSgoY2hhciAqKWJ1Zi0+cHJpdmF0ZSwgbmFtZSwgbmFtbGVuKTsN Cj4gKwkJYnVmLT5kaXJlbnRfY291bnQgPSAxOw0KPiArCQlyZXR1cm4gLUVFWElTVDsNCj4gKwl9 DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICoga3NtYmRfdmZzX2xvb2t1 cF9pbl9kaXIoKSAtIGxvb2t1cCBhIGZpbGUgaW4gYSBkaXJlY3RvcnkNCj4gKyAqIEBkaXJuYW1l OglkaXJlY3RvcnkgbmFtZQ0KPiArICogQGZpbGVuYW1lOglmaWxlbmFtZSB0byBsb29rdXANCj4g KyAqDQo+ICsgKiBSZXR1cm46CTAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yDQo+ICsgKi8N Cj4gK3N0YXRpYyBpbnQga3NtYmRfdmZzX2xvb2t1cF9pbl9kaXIoY2hhciAqZGlybmFtZSwgY2hh ciAqZmlsZW5hbWUpDQo+ICt7DQo+ICsJc3RydWN0IHBhdGggZGlyX3BhdGg7DQo+ICsJaW50IHJl dDsNCj4gKwlzdHJ1Y3QgZmlsZSAqZGZpbHA7DQo+ICsJaW50IGZsYWdzID0gT19SRE9OTFl8T19M QVJHRUZJTEU7DQo+ICsJaW50IGRpcm5hbWVsZW4gPSBzdHJsZW4oZGlybmFtZSk7DQo+ICsJc3Ry dWN0IGtzbWJkX3JlYWRkaXJfZGF0YSByZWFkZGlyX2RhdGEgPSB7DQo+ICsJCS5jdHguYWN0b3IJ PSBfX2Nhc2VsZXNzX2xvb2t1cCwNCj4gKwkJLnByaXZhdGUJPSBmaWxlbmFtZSwNCj4gKwkJLnVz ZWQJCT0gc3RybGVuKGZpbGVuYW1lKSwNCj4gKwl9Ow0KPiArDQo+ICsJcmV0ID0ga3NtYmRfdmZz X2tlcm5fcGF0aChkaXJuYW1lLCAwLCAmZGlyX3BhdGgsIHRydWUpOw0KPiArCWlmIChyZXQpDQo+ ICsJCWdvdG8gZXJyb3I7DQo+ICsNCj4gKwlkZmlscCA9IGRlbnRyeV9vcGVuKCZkaXJfcGF0aCwg ZmxhZ3MsIGN1cnJlbnRfY3JlZCgpKTsNCj4gKwlpZiAoSVNfRVJSKGRmaWxwKSkgew0KPiArCQlw YXRoX3B1dCgmZGlyX3BhdGgpOw0KPiArCQlrc21iZF9lcnIoImNhbm5vdCBvcGVuIGRpcmVjdG9y eSAlc1xuIiwgZGlybmFtZSk7DQo+ICsJCXJldCA9IC1FSU5WQUw7DQo+ICsJCWdvdG8gZXJyb3I7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0ga3NtYmRfdmZzX3JlYWRkaXIoZGZpbHAsICZyZWFkZGly X2RhdGEpOw0KPiArCWlmIChyZWFkZGlyX2RhdGEuZGlyZW50X2NvdW50ID4gMCkNCj4gKwkJcmV0 ID0gMDsNCj4gKw0KPiArCWZwdXQoZGZpbHApOw0KPiArCXBhdGhfcHV0KCZkaXJfcGF0aCk7DQo+ ICtlcnJvcjoNCj4gKwlkaXJuYW1lW2Rpcm5hbWVsZW5dID0gJy8nOw0KPiArCXJldHVybiByZXQ7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICoga3NtYmRfdmZzX2tlcm5fcGF0aCgpIC0gbG9va3Vw IGEgZmlsZSBhbmQgZ2V0IHBhdGggaW5mbw0KPiArICogQG5hbWU6CW5hbWUgb2YgZmlsZSBmb3Ig bG9va3VwDQo+ICsgKiBAZmxhZ3M6CWxvb2t1cCBmbGFncw0KPiArICogQHBhdGg6CWlmIGxvb2t1 cCBzdWNjZWVkLCByZXR1cm4gcGF0aCBpbmZvDQo+ICsgKiBAY2FzZWxlc3M6CWNhc2VsZXNzIGZp bGVuYW1lIGxvb2t1cA0KPiArICoNCj4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzLCBvdGhlcndp c2UgZXJyb3INCj4gKyAqLw0KPiAraW50IGtzbWJkX3Zmc19rZXJuX3BhdGgoY2hhciAqbmFtZSwg dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgcGF0aA0KPiAqcGF0aCwNCj4gKwkJYm9vbCBjYXNl bGVzcykNCj4gK3sNCj4gKwljaGFyICpmaWxlbmFtZSA9IE5VTEw7DQo+ICsJaW50IGVycjsNCj4g Kw0KPiArCWVyciA9IGtlcm5fcGF0aChuYW1lLCBmbGFncywgcGF0aCk7DQo+ICsJaWYgKCFlcnIp DQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlpZiAoY2FzZWxlc3MpIHsNCj4gKwkJZmlsZW5h bWUgPSBleHRyYWN0X2xhc3RfY29tcG9uZW50KG5hbWUpOw0KPiArCQlpZiAoIWZpbGVuYW1lKQ0K PiArCQkJZ290byBvdXQ7DQo+ICsNCj4gKwkJLyogcm9vdCByZWFjaGVkICovDQo+ICsJCWlmIChz dHJsZW4obmFtZSkgPT0gMCkNCj4gKwkJCWdvdG8gb3V0Ow0KPiArDQo+ICsJCWVyciA9IGtzbWJk X3Zmc19sb29rdXBfaW5fZGlyKG5hbWUsIGZpbGVuYW1lKTsNCj4gKwkJaWYgKGVycikNCj4gKwkJ CWdvdG8gb3V0Ow0KPiArCQllcnIgPSBrZXJuX3BhdGgobmFtZSwgZmxhZ3MsIHBhdGgpOw0KPiAr CX0NCj4gKw0KPiArb3V0Og0KPiArCXJvbGxiYWNrX3BhdGhfbW9kaWZpY2F0aW9uKGZpbGVuYW1l KTsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtpbnQga3NtYmRfdmZzX3JlbW92ZV9h Y2xfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkNCj4gK3sNCj4gKwljaGFyICpuYW1lLCAq eGF0dHJfbGlzdCA9IE5VTEw7DQo+ICsJc3NpemVfdCB4YXR0cl9saXN0X2xlbjsNCj4gKwlpbnQg ZXJyID0gMDsNCj4gKw0KPiArCXhhdHRyX2xpc3RfbGVuID0ga3NtYmRfdmZzX2xpc3R4YXR0cihk ZW50cnksICZ4YXR0cl9saXN0KTsNCj4gKwlpZiAoeGF0dHJfbGlzdF9sZW4gPCAwKSB7DQo+ICsJ CWdvdG8gb3V0Ow0KPiArCX0gZWxzZSBpZiAoIXhhdHRyX2xpc3RfbGVuKSB7DQo+ICsJCWtzbWJk X2RlYnVnKFNNQiwgImVtcHR5IHhhdHRyIGluIHRoZSBmaWxlXG4iKTsNCj4gKwkJZ290byBvdXQ7 DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChuYW1lID0geGF0dHJfbGlzdDsgbmFtZSAtIHhhdHRyX2xp c3QgPCB4YXR0cl9saXN0X2xlbjsNCj4gKwkJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMSkgew0K PiArCQlrc21iZF9kZWJ1ZyhTTUIsICIlcywgbGVuICV6ZFxuIiwgbmFtZSwgc3RybGVuKG5hbWUp KTsNCj4gKw0KPiArCQlpZiAoIXN0cm5jbXAobmFtZSwgWEFUVFJfTkFNRV9QT1NJWF9BQ0xfQUND RVNTLA0KPiArCQkJICAgICBzaXplb2YoWEFUVFJfTkFNRV9QT1NJWF9BQ0xfQUNDRVNTKS0xKSB8 fA0KPiArCQkgICAgIXN0cm5jbXAobmFtZSwgWEFUVFJfTkFNRV9QT1NJWF9BQ0xfREVGQVVMVCwN Cj4gKwkJCSAgICAgc2l6ZW9mKFhBVFRSX05BTUVfUE9TSVhfQUNMX0RFRkFVTFQpLTEpKSB7DQo+ ICsJCQllcnIgPSBrc21iZF92ZnNfcmVtb3ZlX3hhdHRyKGRlbnRyeSwgbmFtZSk7DQo+ICsJCQlp ZiAoZXJyKQ0KPiArCQkJCWtzbWJkX2RlYnVnKFNNQiwNCj4gKwkJCQkJInJlbW92ZSBhY2wgeGF0 dHIgZmFpbGVkIDogJXNcbiIsDQo+IG5hbWUpOw0KPiArCQl9DQo+ICsJfQ0KPiArb3V0Og0KPiAr CWtzbWJkX3Zmc194YXR0cl9mcmVlKHhhdHRyX2xpc3QpOw0KPiArCXJldHVybiBlcnI7DQo+ICt9 DQo+ICsNCj4gK2ludCBrc21iZF92ZnNfcmVtb3ZlX3NkX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpk ZW50cnkpDQo+ICt7DQo+ICsJY2hhciAqbmFtZSwgKnhhdHRyX2xpc3QgPSBOVUxMOw0KPiArCXNz aXplX3QgeGF0dHJfbGlzdF9sZW47DQo+ICsJaW50IGVyciA9IDA7DQo+ICsNCj4gKwl4YXR0cl9s aXN0X2xlbiA9IGtzbWJkX3Zmc19saXN0eGF0dHIoZGVudHJ5LCAmeGF0dHJfbGlzdCk7DQo+ICsJ aWYgKHhhdHRyX2xpc3RfbGVuIDwgMCkgew0KPiArCQlnb3RvIG91dDsNCj4gKwl9IGVsc2UgaWYg KCF4YXR0cl9saXN0X2xlbikgew0KPiArCQlrc21iZF9kZWJ1ZyhTTUIsICJlbXB0eSB4YXR0ciBp biB0aGUgZmlsZVxuIik7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCWZvciAobmFt ZSA9IHhhdHRyX2xpc3Q7IG5hbWUgLSB4YXR0cl9saXN0IDwgeGF0dHJfbGlzdF9sZW47DQo+ICsJ CQluYW1lICs9IHN0cmxlbihuYW1lKSArIDEpIHsNCj4gKwkJa3NtYmRfZGVidWcoU01CLCAiJXMs IGxlbiAlemRcbiIsIG5hbWUsIHN0cmxlbihuYW1lKSk7DQo+ICsNCj4gKwkJaWYgKCFzdHJuY21w KG5hbWUsIFhBVFRSX05BTUVfU0QsDQo+IFhBVFRSX05BTUVfU0RfTEVOKSkgew0KPiArCQkJZXJy ID0ga3NtYmRfdmZzX3JlbW92ZV94YXR0cihkZW50cnksIG5hbWUpOw0KPiArCQkJaWYgKGVycikN Cj4gKwkJCQlrc21iZF9kZWJ1ZyhTTUIsICJyZW1vdmUgeGF0dHIgZmFpbGVkIDoNCj4gJXNcbiIs IG5hbWUpOw0KPiArCQl9DQo+ICsJfQ0KPiArb3V0Og0KPiArCWtzbWJkX3Zmc194YXR0cl9mcmVl KHhhdHRyX2xpc3QpOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1 Y3QgeGF0dHJfc21iX2FjbCAqa3NtYmRfdmZzX21ha2VfeGF0dHJfcG9zaXhfYWNsKHN0cnVjdCBp bm9kZQ0KPiAqaW5vZGUsDQo+ICsJCWludCBhY2xfdHlwZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgeGF0 dHJfc21iX2FjbCAqc21iX2FjbCA9IE5VTEw7DQo+ICsJc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhf YWNsczsNCj4gKwlzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5ICpwYV9lbnRyeTsNCj4gKwlzdHJ1Y3Qg eGF0dHJfYWNsX2VudHJ5ICp4YV9lbnRyeTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCXBvc2l4X2Fj bHMgPSBrc21iZF92ZnNfZ2V0X2FjbChpbm9kZSwgYWNsX3R5cGUpOw0KPiArCWlmICghcG9zaXhf YWNscykNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlzbWJfYWNsID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IHhhdHRyX3NtYl9hY2wpICsNCj4gKwkJCSAgc2l6ZW9mKHN0cnVjdCB4YXR0cl9h Y2xfZW50cnkpICogcG9zaXhfYWNscy0NCj4gPmFfY291bnQsDQo+ICsJCQkgIEdGUF9LRVJORUwp Ow0KPiArCWlmICghc21iX2FjbCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwlzbWJfYWNsLT5j b3VudCA9IHBvc2l4X2FjbHMtPmFfY291bnQ7DQo+ICsJcGFfZW50cnkgPSBwb3NpeF9hY2xzLT5h X2VudHJpZXM7DQo+ICsJeGFfZW50cnkgPSBzbWJfYWNsLT5lbnRyaWVzOw0KPiArCWZvciAoaSA9 IDA7IGkgPCBwb3NpeF9hY2xzLT5hX2NvdW50OyBpKyssIHBhX2VudHJ5KyssIHhhX2VudHJ5Kysp IHsNCj4gKwkJc3dpdGNoIChwYV9lbnRyeS0+ZV90YWcpIHsNCj4gKwkJY2FzZSBBQ0xfVVNFUjoN Cj4gKwkJCXhhX2VudHJ5LT50eXBlID0gU01CX0FDTF9VU0VSOw0KPiArCQkJeGFfZW50cnktPnVp ZCA9IGZyb21fa3VpZCgmaW5pdF91c2VyX25zLCBwYV9lbnRyeS0NCj4gPmVfdWlkKTsNCj4gKwkJ CWJyZWFrOw0KPiArCQljYXNlIEFDTF9VU0VSX09CSjoNCj4gKwkJCXhhX2VudHJ5LT50eXBlID0g U01CX0FDTF9VU0VSX09CSjsNCj4gKwkJCWJyZWFrOw0KPiArCQljYXNlIEFDTF9HUk9VUDoNCj4g KwkJCXhhX2VudHJ5LT50eXBlID0gU01CX0FDTF9HUk9VUDsNCj4gKwkJCXhhX2VudHJ5LT5naWQg PSBmcm9tX2tnaWQoJmluaXRfdXNlcl9ucywgcGFfZW50cnktDQo+ID5lX2dpZCk7DQo+ICsJCQli cmVhazsNCj4gKwkJY2FzZSBBQ0xfR1JPVVBfT0JKOg0KPiArCQkJeGFfZW50cnktPnR5cGUgPSBT TUJfQUNMX0dST1VQX09CSjsNCj4gKwkJCWJyZWFrOw0KPiArCQljYXNlIEFDTF9PVEhFUjoNCj4g KwkJCXhhX2VudHJ5LT50eXBlID0gU01CX0FDTF9PVEhFUjsNCj4gKwkJCWJyZWFrOw0KPiArCQlj YXNlIEFDTF9NQVNLOg0KPiArCQkJeGFfZW50cnktPnR5cGUgPSBTTUJfQUNMX01BU0s7DQo+ICsJ CQlicmVhazsNCj4gKwkJZGVmYXVsdDoNCj4gKwkJCWtzbWJkX2VycigidW5rbm93biB0eXBlIDog MHgleFxuIiwgcGFfZW50cnktDQo+ID5lX3RhZyk7DQo+ICsJCQlnb3RvIG91dDsNCj4gKwkJfQ0K PiArDQo+ICsJCWlmIChwYV9lbnRyeS0+ZV9wZXJtICYgQUNMX1JFQUQpDQo+ICsJCQl4YV9lbnRy eS0+cGVybSB8PSBTTUJfQUNMX1JFQUQ7DQo+ICsJCWlmIChwYV9lbnRyeS0+ZV9wZXJtICYgQUNM X1dSSVRFKQ0KPiArCQkJeGFfZW50cnktPnBlcm0gfD0gU01CX0FDTF9XUklURTsNCj4gKwkJaWYg KHBhX2VudHJ5LT5lX3Blcm0gJiBBQ0xfRVhFQ1VURSkNCj4gKwkJCXhhX2VudHJ5LT5wZXJtIHw9 IFNNQl9BQ0xfRVhFQ1VURTsNCj4gKwl9DQo+ICtvdXQ6DQo+ICsJcG9zaXhfYWNsX3JlbGVhc2Uo cG9zaXhfYWNscyk7DQo+ICsJcmV0dXJuIHNtYl9hY2w7DQo+ICt9DQo+ICsNCj4gK2ludCBrc21i ZF92ZnNfc2V0X3NkX3hhdHRyKHN0cnVjdCBrc21iZF9jb25uICpjb25uLCBzdHJ1Y3QgZGVudHJ5 DQo+ICpkZW50cnksDQo+ICsJCXN0cnVjdCBzbWJfbnRzZCAqcG50c2QsIGludCBsZW4pDQo+ICt7 DQo+ICsJaW50IHJjOw0KPiArCXN0cnVjdCBuZHIgc2RfbmRyID0gezB9LCBhY2xfbmRyID0gezB9 Ow0KPiArCXN0cnVjdCB4YXR0cl9udGFjbCBhY2wgPSB7MH07DQo+ICsJc3RydWN0IHhhdHRyX3Nt Yl9hY2wgKnNtYl9hY2wsICpkZWZfc21iX2FjbCA9IE5VTEw7DQo+ICsJc3RydWN0IGlub2RlICpp bm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCj4gKw0KPiArCWFjbC52ZXJzaW9uID0gNDsNCj4gKwlh Y2wuaGFzaF90eXBlID0gWEFUVFJfU0RfSEFTSF9UWVBFX1NIQTI1NjsNCj4gKwlhY2wuY3VycmVu dF90aW1lID0ga3NtYmRfVW5peFRpbWVUb05UKGN1cnJlbnRfdGltZShkZW50cnktDQo+ID5kX2lu b2RlKSk7DQo+ICsNCj4gKwltZW1jcHkoYWNsLmRlc2MsICJwb3NpeF9hY2wiLCA5KTsNCj4gKwlh Y2wuZGVzY19sZW4gPSAxMDsNCj4gKw0KPiArCXBudHNkLT5vc2lkb2Zmc2V0ID0NCj4gKwkJY3B1 X3RvX2xlMzIobGUzMl90b19jcHUocG50c2QtPm9zaWRvZmZzZXQpICsNCj4gTkRSX05UU0RfT0ZG U0VUT0YpOw0KPiArCXBudHNkLT5nc2lkb2Zmc2V0ID0NCj4gKwkJY3B1X3RvX2xlMzIobGUzMl90 b19jcHUocG50c2QtPmdzaWRvZmZzZXQpICsNCj4gTkRSX05UU0RfT0ZGU0VUT0YpOw0KPiArCXBu dHNkLT5kYWNsb2Zmc2V0ID0NCj4gKwkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUocG50c2QtPmRh Y2xvZmZzZXQpICsNCj4gTkRSX05UU0RfT0ZGU0VUT0YpOw0KPiArDQo+ICsJYWNsLnNkX2J1ZiA9 IChjaGFyICopcG50c2Q7DQo+ICsJYWNsLnNkX3NpemUgPSBsZW47DQo+ICsNCj4gKwlyYyA9IGtz bWJkX2dlbl9zZF9oYXNoKGNvbm4sIGFjbC5zZF9idWYsIGFjbC5zZF9zaXplLCBhY2wuaGFzaCk7 DQo+ICsJaWYgKHJjKSB7DQo+ICsJCWtzbWJkX2VycigiZmFpbGVkIHRvIGdlbmVyYXRlIGhhc2gg Zm9yIG5kciBhY2xcbiIpOw0KPiArCQlyZXR1cm4gcmM7DQo+ICsJfQ0KPiArDQo+ICsJc21iX2Fj bCA9IGtzbWJkX3Zmc19tYWtlX3hhdHRyX3Bvc2l4X2FjbChkZW50cnktPmRfaW5vZGUsDQo+IEFD TF9UWVBFX0FDQ0VTUyk7DQo+ICsJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpDQo+ICsJCWRl Zl9zbWJfYWNsID0ga3NtYmRfdmZzX21ha2VfeGF0dHJfcG9zaXhfYWNsKGRlbnRyeS0NCj4gPmRf aW5vZGUsDQo+ICsJCQkJQUNMX1RZUEVfREVGQVVMVCk7DQo+ICsNCj4gKwlyYyA9IG5kcl9lbmNv ZGVfcG9zaXhfYWNsKCZhY2xfbmRyLCBpbm9kZSwgc21iX2FjbCwgZGVmX3NtYl9hY2wpOw0KPiAr CWlmIChyYykgew0KPiArCQlrc21iZF9lcnIoImZhaWxlZCB0byBlbmNvZGUgbmRyIHRvIHBvc2l4 IGFjbFxuIik7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCXJjID0ga3NtYmRfZ2Vu X3NkX2hhc2goY29ubiwgYWNsX25kci5kYXRhLCBhY2xfbmRyLm9mZnNldCwNCj4gKwkJCWFjbC5w b3NpeF9hY2xfaGFzaCk7DQo+ICsJaWYgKHJjKSB7DQo+ICsJCWtzbWJkX2VycigiZmFpbGVkIHRv IGdlbmVyYXRlIGhhc2ggZm9yIG5kciBhY2xcbiIpOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ ICsNCj4gKwlyYyA9IG5kcl9lbmNvZGVfdjRfbnRhY2woJnNkX25kciwgJmFjbCk7DQo+ICsJaWYg KHJjKSB7DQo+ICsJCWtzbWJkX2VycigiZmFpbGVkIHRvIGVuY29kZSBuZHIgdG8gcG9zaXggYWNs XG4iKTsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmMgPSBrc21iZF92ZnNfc2V0 eGF0dHIoZGVudHJ5LCBYQVRUUl9OQU1FX1NELCBzZF9uZHIuZGF0YSwNCj4gKwkJCXNkX25kci5v ZmZzZXQsIDApOw0KPiArCWlmIChyYyA8IDApDQo+ICsJCWtzbWJkX2VycigiRmFpbGVkIHRvIHN0 b3JlIFhBVFRSIG50YWNsIDolZFxuIiwgcmMpOw0KPiArDQo+ICsJa2ZyZWUoc2RfbmRyLmRhdGEp Ow0KPiArb3V0Og0KPiArCWtmcmVlKGFjbF9uZHIuZGF0YSk7DQo+ICsJa2ZyZWUoc21iX2FjbCk7 DQo+ICsJa2ZyZWUoZGVmX3NtYl9hY2wpOw0KPiArCXJldHVybiByYzsNCj4gK30NCj4gKw0KPiAr aW50IGtzbWJkX3Zmc19nZXRfc2RfeGF0dHIoc3RydWN0IGtzbWJkX2Nvbm4gKmNvbm4sIHN0cnVj dCBkZW50cnkNCj4gKmRlbnRyeSwNCj4gKwkJc3RydWN0IHNtYl9udHNkICoqcG50c2QpDQo+ICt7 DQo+ICsJaW50IHJjOw0KPiArCXN0cnVjdCBuZHIgbjsNCj4gKw0KPiArCXJjID0ga3NtYmRfdmZz X2dldHhhdHRyKGRlbnRyeSwgWEFUVFJfTkFNRV9TRCwgJm4uZGF0YSk7DQo+ICsJaWYgKHJjID4g MCkgew0KPiArCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOw0KPiArCQlz dHJ1Y3QgbmRyIGFjbF9uZHIgPSB7MH07DQo+ICsJCXN0cnVjdCB4YXR0cl9udGFjbCBhY2w7DQo+ ICsJCXN0cnVjdCB4YXR0cl9zbWJfYWNsICpzbWJfYWNsID0gTlVMTCwgKmRlZl9zbWJfYWNsID0N Cj4gTlVMTDsNCj4gKwkJX191OCBjbXBfaGFzaFtYQVRUUl9TRF9IQVNIX1NJWkVdID0gezB9Ow0K PiArDQo+ICsJCW4ubGVuZ3RoID0gcmM7DQo+ICsJCXJjID0gbmRyX2RlY29kZV92NF9udGFjbCgm biwgJmFjbCk7DQo+ICsJCWlmIChyYykNCj4gKwkJCXJldHVybiByYzsNCj4gKw0KPiArCQlzbWJf YWNsID0ga3NtYmRfdmZzX21ha2VfeGF0dHJfcG9zaXhfYWNsKGlub2RlLA0KPiArCQkJCUFDTF9U WVBFX0FDQ0VTUyk7DQo+ICsJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQ0KPiArCQkJZGVm X3NtYl9hY2wgPQ0KPiBrc21iZF92ZnNfbWFrZV94YXR0cl9wb3NpeF9hY2woaW5vZGUsDQo+ICsJ CQkJCUFDTF9UWVBFX0RFRkFVTFQpOw0KPiArDQo+ICsJCXJjID0gbmRyX2VuY29kZV9wb3NpeF9h Y2woJmFjbF9uZHIsIGlub2RlLCBzbWJfYWNsLA0KPiBkZWZfc21iX2FjbCk7DQo+ICsJCWlmIChy Yykgew0KPiArCQkJa3NtYmRfZXJyKCJmYWlsZWQgdG8gZW5jb2RlIG5kciB0byBwb3NpeCBhY2xc biIpOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKw0KPiArCQlyYyA9IGtzbWJkX2dlbl9z ZF9oYXNoKGNvbm4sIGFjbF9uZHIuZGF0YSwgYWNsX25kci5vZmZzZXQsDQo+ICsJCQkJY21wX2hh c2gpOw0KPiArCQlpZiAocmMpIHsNCj4gKwkJCWtzbWJkX2VycigiZmFpbGVkIHRvIGdlbmVyYXRl IGhhc2ggZm9yIG5kciBhY2xcbiIpOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKw0KPiAr CQlpZiAobWVtY21wKGNtcF9oYXNoLCBhY2wucG9zaXhfYWNsX2hhc2gsDQo+IFhBVFRSX1NEX0hB U0hfU0laRSkpIHsNCj4gKwkJCWtzbWJkX2VycigiaGFzaCB2YWx1ZSBkaWZmXG4iKTsNCj4gKwkJ CXJjID0gLUVJTlZBTDsNCj4gKwkJCWdvdG8gb3V0Ow0KPiArCQl9DQo+ICsNCj4gKwkJKnBudHNk ID0gYWNsLnNkX2J1ZjsNCj4gKwkJKCpwbnRzZCktPm9zaWRvZmZzZXQgPQ0KPiArCQkJY3B1X3Rv X2xlMzIobGUzMl90b19jcHUoKCpwbnRzZCktPm9zaWRvZmZzZXQpIC0NCj4gTkRSX05UU0RfT0ZG U0VUT0YpOw0KPiArCQkoKnBudHNkKS0+Z3NpZG9mZnNldCA9DQo+ICsJCQljcHVfdG9fbGUzMihs ZTMyX3RvX2NwdSgoKnBudHNkKS0+Z3NpZG9mZnNldCkgLQ0KPiBORFJfTlRTRF9PRkZTRVRPRik7 DQo+ICsJCSgqcG50c2QpLT5kYWNsb2Zmc2V0ID0NCj4gKwkJCWNwdV90b19sZTMyKGxlMzJfdG9f Y3B1KCgqcG50c2QpLT5kYWNsb2Zmc2V0KSAtDQo+IE5EUl9OVFNEX09GRlNFVE9GKTsNCj4gKw0K PiArCQlyYyA9IGFjbC5zZF9zaXplOw0KPiArb3V0Og0KPiArCQlrZnJlZShuLmRhdGEpOw0KPiAr CQlrZnJlZShhY2xfbmRyLmRhdGEpOw0KPiArCQlrZnJlZShzbWJfYWNsKTsNCj4gKwkJa2ZyZWUo ZGVmX3NtYl9hY2wpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiByYzsNCj4gK30NCj4gKw0KPiAr aW50IGtzbWJkX3Zmc19zZXRfZG9zX2F0dHJpYl94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnks DQo+ICsJCXN0cnVjdCB4YXR0cl9kb3NfYXR0cmliICpkYSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmRy IG47DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCWVyciA9IG5kcl9lbmNvZGVfZG9zX2F0dHIoJm4s IGRhKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJZXJyID0ga3Nt YmRfdmZzX3NldHhhdHRyKGRlbnRyeSwNCj4gKwkJCVhBVFRSX05BTUVfRE9TX0FUVFJJQlVURSwN Cj4gKwkJCSh2b2lkICopbi5kYXRhLA0KPiArCQkJbi5vZmZzZXQsDQo+ICsJCQkwKTsNCj4gKwlp ZiAoZXJyKQ0KPiArCQlrc21iZF9kZWJ1ZyhTTUIsICJmYWlsZWQgdG8gc3RvcmUgZG9zIGF0dHJp YnV0ZSBpbg0KPiB4YXR0clxuIik7DQo+ICsJa2ZyZWUobi5kYXRhKTsNCj4gKw0KPiArCXJldHVy biBlcnI7DQo+ICt9DQo+ICsNCj4gK2ludCBrc21iZF92ZnNfZ2V0X2Rvc19hdHRyaWJfeGF0dHIo c3RydWN0IGRlbnRyeSAqZGVudHJ5LA0KPiArCQlzdHJ1Y3QgeGF0dHJfZG9zX2F0dHJpYiAqZGEp DQo+ICt7DQo+ICsJc3RydWN0IG5kciBuOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwllcnIgPSBr c21iZF92ZnNfZ2V0eGF0dHIoZGVudHJ5LA0KPiArCQkJWEFUVFJfTkFNRV9ET1NfQVRUUklCVVRF LA0KPiArCQkJKGNoYXIgKiopJm4uZGF0YSk7DQo+ICsJaWYgKGVyciA+IDApIHsNCj4gKwkJbi5s ZW5ndGggPSBlcnI7DQo+ICsJCWlmIChuZHJfZGVjb2RlX2Rvc19hdHRyKCZuLCBkYSkpDQo+ICsJ CQllcnIgPSAtRUlOVkFMOw0KPiArCQlrc21iZF9mcmVlKG4uZGF0YSk7DQo+ICsJfSBlbHNlDQo+ ICsJCWtzbWJkX2RlYnVnKFNNQiwgImZhaWxlZCB0byBsb2FkIGRvcyBhdHRyaWJ1dGUgaW4geGF0 dHJcbiIpOw0KPiArDQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArc3RydWN0IHBvc2l4 X2FjbCAqa3NtYmRfdmZzX3Bvc2l4X2FjbF9hbGxvYyhpbnQgY291bnQsIGdmcF90IGZsYWdzKQ0K PiArew0KPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX1BPU0lYX0FDTCkNCj4gKwlyZXR1cm4g cG9zaXhfYWNsX2FsbG9jKGNvdW50LCBmbGFncyk7DQo+ICsjZWxzZQ0KPiArCXJldHVybiBOVUxM Ow0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4gK3N0cnVjdCBwb3NpeF9hY2wgKmtzbWJkX3Zmc19n ZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQ0KPiArew0KPiArI2lmIElTX0VO QUJMRUQoQ09ORklHX0ZTX1BPU0lYX0FDTCkNCj4gKwlyZXR1cm4gZ2V0X2FjbChpbm9kZSwgdHlw ZSk7DQo+ICsjZWxzZQ0KPiArCXJldHVybiBOVUxMOw0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4g K2ludCBrc21iZF92ZnNfc2V0X3Bvc2l4X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlw ZSwNCj4gKwkJc3RydWN0IHBvc2l4X2FjbCAqYWNsKQ0KPiArew0KPiArI2lmIElTX0VOQUJMRUQo Q09ORklHX0ZTX1BPU0lYX0FDTCkNCj4gKwlyZXR1cm4gc2V0X3Bvc2l4X2FjbCgmaW5pdF91c2Vy X25zLCBpbm9kZSwgdHlwZSwgYWNsKTsNCj4gKyNlbHNlDQo+ICsJcmV0dXJuIC1FT1BOT1RTVVBQ Ow0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICoga3NtYmRfdmZzX2luaXRfa3N0 YXQoKSAtIGNvbnZlcnQgdW5peCBzdGF0IGluZm9ybWF0aW9uIHRvIHNtYiBzdGF0IGZvcm1hdA0K PiArICogQHA6ICAgICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlcg0KPiArICogQGtzbWJkX2tzdGF0 OiAgICAgIGtzbWJkIGtzdGF0IHdyYXBwZXINCj4gKyAqLw0KPiArdm9pZCAqa3NtYmRfdmZzX2lu aXRfa3N0YXQoY2hhciAqKnAsIHN0cnVjdCBrc21iZF9rc3RhdCAqa3NtYmRfa3N0YXQpDQo+ICt7 DQo+ICsJc3RydWN0IGZpbGVfZGlyZWN0b3J5X2luZm8gKmluZm8gPSAoc3RydWN0IGZpbGVfZGly ZWN0b3J5X2luZm8gKikoKnApOw0KPiArCXN0cnVjdCBrc3RhdCAqa3N0YXQgPSBrc21iZF9rc3Rh dC0+a3N0YXQ7DQo+ICsJdTY0IHRpbWU7DQo+ICsNCj4gKwlpbmZvLT5GaWxlSW5kZXggPSAwOw0K PiArCWluZm8tPkNyZWF0aW9uVGltZSA9IGNwdV90b19sZTY0KGtzbWJkX2tzdGF0LT5jcmVhdGVf dGltZSk7DQo+ICsJdGltZSA9IGtzbWJkX1VuaXhUaW1lVG9OVChrc3RhdC0+YXRpbWUpOw0KPiAr CWluZm8tPkxhc3RBY2Nlc3NUaW1lID0gY3B1X3RvX2xlNjQodGltZSk7DQo+ICsJdGltZSA9IGtz bWJkX1VuaXhUaW1lVG9OVChrc3RhdC0+bXRpbWUpOw0KPiArCWluZm8tPkxhc3RXcml0ZVRpbWUg PSBjcHVfdG9fbGU2NCh0aW1lKTsNCj4gKwl0aW1lID0ga3NtYmRfVW5peFRpbWVUb05UKGtzdGF0 LT5jdGltZSk7DQo+ICsJaW5mby0+Q2hhbmdlVGltZSA9IGNwdV90b19sZTY0KHRpbWUpOw0KPiAr DQo+ICsJaWYgKGtzbWJkX2tzdGF0LT5maWxlX2F0dHJpYnV0ZXMgJiBBVFRSX0RJUkVDVE9SWV9M RSkgew0KPiArCQlpbmZvLT5FbmRPZkZpbGUgPSAwOw0KPiArCQlpbmZvLT5BbGxvY2F0aW9uU2l6 ZSA9IDA7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaW5mby0+RW5kT2ZGaWxlID0gY3B1X3RvX2xlNjQo a3N0YXQtPnNpemUpOw0KPiArCQlpbmZvLT5BbGxvY2F0aW9uU2l6ZSA9IGNwdV90b19sZTY0KGtz dGF0LT5ibG9ja3MgPDwgOSk7DQo+ICsJfQ0KPiArCWluZm8tPkV4dEZpbGVBdHRyaWJ1dGVzID0g a3NtYmRfa3N0YXQtPmZpbGVfYXR0cmlidXRlczsNCj4gKw0KPiArCXJldHVybiBpbmZvOw0KPiAr fQ0KPiArDQo+ICtpbnQga3NtYmRfdmZzX2ZpbGxfZGVudHJ5X2F0dHJzKHN0cnVjdCBrc21iZF93 b3JrICp3b3JrLA0KPiArCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwNCj4gKwkJCQlzdHJ1Y3Qg a3NtYmRfa3N0YXQgKmtzbWJkX2tzdGF0KQ0KPiArew0KPiArCXU2NCB0aW1lOw0KPiArCWludCBy YzsNCj4gKw0KPiArCWdlbmVyaWNfZmlsbGF0dHIoJmluaXRfdXNlcl9ucywgZF9pbm9kZShkZW50 cnkpLCBrc21iZF9rc3RhdC0NCj4gPmtzdGF0KTsNCj4gKw0KPiArCXRpbWUgPSBrc21iZF9Vbml4 VGltZVRvTlQoa3NtYmRfa3N0YXQtPmtzdGF0LT5jdGltZSk7DQo+ICsJa3NtYmRfa3N0YXQtPmNy ZWF0ZV90aW1lID0gdGltZTsNCj4gKw0KPiArCS8qDQo+ICsJICogc2V0IGRlZmF1bHQgdmFsdWUg Zm9yIHRoZSBjYXNlIHRoYXQgc3RvcmUgZG9zIGF0dHJpYnV0ZXMgaXMgbm90IHllcw0KPiArCSAq IG9yIHRoYXQgYWNsIGlzIGRpc2FibGUgaW4gc2VydmVyJ3MgZmlsZXN5c3RlbSBhbmQgdGhlIGNv bmZpZyBpcyB5ZXMuDQo+ICsJICovDQo+ICsJaWYgKFNfSVNESVIoa3NtYmRfa3N0YXQtPmtzdGF0 LT5tb2RlKSkNCj4gKwkJa3NtYmRfa3N0YXQtPmZpbGVfYXR0cmlidXRlcyA9IEFUVFJfRElSRUNU T1JZX0xFOw0KPiArCWVsc2UNCj4gKwkJa3NtYmRfa3N0YXQtPmZpbGVfYXR0cmlidXRlcyA9IEFU VFJfQVJDSElWRV9MRTsNCj4gKw0KPiArCWlmICh0ZXN0X3NoYXJlX2NvbmZpZ19mbGFnKHdvcmst PnRjb24tPnNoYXJlX2NvbmYsDQo+ICsJICAgIEtTTUJEX1NIQVJFX0ZMQUdfU1RPUkVfRE9TX0FU VFJTKSkgew0KPiArCQlzdHJ1Y3QgeGF0dHJfZG9zX2F0dHJpYiBkYTsNCj4gKw0KPiArCQlyYyA9 IGtzbWJkX3Zmc19nZXRfZG9zX2F0dHJpYl94YXR0cihkZW50cnksICZkYSk7DQo+ICsJCWlmIChy YyA+IDApIHsNCj4gKwkJCWtzbWJkX2tzdGF0LT5maWxlX2F0dHJpYnV0ZXMgPSBjcHVfdG9fbGUz MihkYS5hdHRyKTsNCj4gKwkJCWtzbWJkX2tzdGF0LT5jcmVhdGVfdGltZSA9IGRhLmNyZWF0ZV90 aW1lOw0KPiArCQl9IGVsc2UNCj4gKwkJCWtzbWJkX2RlYnVnKFZGUywgImZhaWwgdG8gbG9hZCBk b3MgYXR0cmlidXRlLlxuIik7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3NzaXplX3Qga3NtYmRfdmZzX2Nhc2V4YXR0cl9sZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5 LA0KPiArCQkJCWNoYXIgKmF0dHJfbmFtZSwNCj4gKwkJCQlpbnQgYXR0cl9uYW1lX2xlbikNCj4g K3sNCj4gKwljaGFyICpuYW1lLCAqeGF0dHJfbGlzdCA9IE5VTEw7DQo+ICsJc3NpemVfdCB2YWx1 ZV9sZW4gPSAtRU5PRU5ULCB4YXR0cl9saXN0X2xlbjsNCj4gKw0KPiArCXhhdHRyX2xpc3RfbGVu ID0ga3NtYmRfdmZzX2xpc3R4YXR0cihkZW50cnksICZ4YXR0cl9saXN0KTsNCj4gKwlpZiAoeGF0 dHJfbGlzdF9sZW4gPD0gMCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwlmb3IgKG5hbWUgPSB4 YXR0cl9saXN0OyBuYW1lIC0geGF0dHJfbGlzdCA8IHhhdHRyX2xpc3RfbGVuOw0KPiArCQkJbmFt ZSArPSBzdHJsZW4obmFtZSkgKyAxKSB7DQo+ICsJCWtzbWJkX2RlYnVnKFZGUywgIiVzLCBsZW4g JXpkXG4iLCBuYW1lLCBzdHJsZW4obmFtZSkpOw0KPiArCQlpZiAoc3RybmNhc2VjbXAoYXR0cl9u YW1lLCBuYW1lLCBhdHRyX25hbWVfbGVuKSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXZh bHVlX2xlbiA9IGtzbWJkX3Zmc194YXR0cl9sZW4oZGVudHJ5LCBuYW1lKTsNCj4gKwkJYnJlYWs7 DQo+ICsJfQ0KPiArDQo+ICtvdXQ6DQo+ICsJa3NtYmRfdmZzX3hhdHRyX2ZyZWUoeGF0dHJfbGlz dCk7DQo+ICsJcmV0dXJuIHZhbHVlX2xlbjsNCj4gK30NCj4gKw0KPiAraW50IGtzbWJkX3Zmc194 YXR0cl9zdHJlYW1fbmFtZShjaGFyICpzdHJlYW1fbmFtZSwNCj4gKwkJCQljaGFyICoqeGF0dHJf c3RyZWFtX25hbWUsDQo+ICsJCQkJc2l6ZV90ICp4YXR0cl9zdHJlYW1fbmFtZV9zaXplLA0KPiAr CQkJCWludCBzX3R5cGUpDQo+ICt7DQo+ICsJaW50IHN0cmVhbV9uYW1lX3NpemU7DQo+ICsJY2hh ciAqeGF0dHJfc3RyZWFtX25hbWVfYnVmOw0KPiArCWNoYXIgKnR5cGU7DQo+ICsJaW50IHR5cGVf bGVuOw0KPiArDQo+ICsJaWYgKHNfdHlwZSA9PSBESVJfU1RSRUFNKQ0KPiArCQl0eXBlID0gIjok SU5ERVhfQUxMT0NBVElPTiI7DQo+ICsJZWxzZQ0KPiArCQl0eXBlID0gIjokREFUQSI7DQo+ICsN Cj4gKwl0eXBlX2xlbiA9IHN0cmxlbih0eXBlKTsNCj4gKwlzdHJlYW1fbmFtZV9zaXplID0gc3Ry bGVuKHN0cmVhbV9uYW1lKTsNCj4gKwkqeGF0dHJfc3RyZWFtX25hbWVfc2l6ZSA9IHN0cmVhbV9u YW1lX3NpemUgKw0KPiBYQVRUUl9OQU1FX1NUUkVBTV9MRU4gKyAxOw0KPiArCXhhdHRyX3N0cmVh bV9uYW1lX2J1ZiA9IGttYWxsb2MoKnhhdHRyX3N0cmVhbV9uYW1lX3NpemUgKw0KPiB0eXBlX2xl biwNCj4gKwkJCUdGUF9LRVJORUwpOw0KPiArCWlmICgheGF0dHJfc3RyZWFtX25hbWVfYnVmKQ0K PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCW1lbWNweSh4YXR0cl9zdHJlYW1fbmFtZV9i dWYsDQo+ICsJCVhBVFRSX05BTUVfU1RSRUFNLA0KPiArCQlYQVRUUl9OQU1FX1NUUkVBTV9MRU4p Ow0KPiArDQo+ICsJaWYgKHN0cmVhbV9uYW1lX3NpemUpIHsNCj4gKw0KPiAJbWVtY3B5KCZ4YXR0 cl9zdHJlYW1fbmFtZV9idWZbWEFUVFJfTkFNRV9TVFJFQU1fTEVOXSwNCj4gKwkJCXN0cmVhbV9u YW1lLA0KPiArCQkJc3RyZWFtX25hbWVfc2l6ZSk7DQo+ICsJfQ0KPiArCW1lbWNweSgmeGF0dHJf c3RyZWFtX25hbWVfYnVmWyp4YXR0cl9zdHJlYW1fbmFtZV9zaXplIC0gMV0sDQo+IHR5cGUsIHR5 cGVfbGVuKTsNCj4gKwkJKnhhdHRyX3N0cmVhbV9uYW1lX3NpemUgKz0gdHlwZV9sZW47DQo+ICsN Cj4gKwl4YXR0cl9zdHJlYW1fbmFtZV9idWZbKnhhdHRyX3N0cmVhbV9uYW1lX3NpemUgLSAxXSA9 ICdcMCc7DQo+ICsJKnhhdHRyX3N0cmVhbV9uYW1lID0geGF0dHJfc3RyZWFtX25hbWVfYnVmOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQga3NtYmRfdmZzX2Nv cHlfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90IHBvc19pbiwNCj4gKwkJ CQlzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQsIGxvZmZfdCBwb3Nfb3V0LA0KPiArCQkJCXNpemVfdCBs ZW4pDQo+ICt7DQo+ICsJc3RydWN0IGlub2RlICppbm9kZV9pbiA9IGZpbGVfaW5vZGUoZmlsZV9p bik7DQo+ICsJc3RydWN0IGlub2RlICppbm9kZV9vdXQgPSBmaWxlX2lub2RlKGZpbGVfb3V0KTsN Cj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gdmZzX2NvcHlfZmlsZV9yYW5nZShmaWxlX2lu LCBwb3NfaW4sIGZpbGVfb3V0LCBwb3Nfb3V0LCBsZW4sIDApOw0KPiArCS8qIGRvIHNwbGljZSBm b3IgdGhlIGNvcHkgYmV0d2VlbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zICovDQo+ICsJaWYgKHJl dCAhPSAtRVhERVYpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlpZiAoU19JU0RJUihpbm9k ZV9pbi0+aV9tb2RlKSB8fCBTX0lTRElSKGlub2RlX291dC0+aV9tb2RlKSkNCj4gKwkJcmV0dXJu IC1FSVNESVI7DQo+ICsJaWYgKCFTX0lTUkVHKGlub2RlX2luLT5pX21vZGUpIHx8ICFTX0lTUkVH KGlub2RlX291dC0+aV9tb2RlKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAo IShmaWxlX2luLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB8fA0KPiArCSAgICAhKGZpbGVfb3V0LT5m X21vZGUgJiBGTU9ERV9XUklURSkpDQo+ICsJCXJldHVybiAtRUJBREY7DQo+ICsNCj4gKwlpZiAo bGVuID09IDApDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJZmlsZV9zdGFydF93cml0ZShmaWxl X291dCk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIHNraXAgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUg cmFuZ2Ugb2YgZGF0YS4gaXQgd2lsbCBiZSBkb25lDQo+ICsJICogaW4gZG9fc3BsaWNlX2RpcmVj dA0KPiArCSAqLw0KPiArCXJldCA9IGRvX3NwbGljZV9kaXJlY3QoZmlsZV9pbiwgJnBvc19pbiwg ZmlsZV9vdXQsICZwb3Nfb3V0LA0KPiArCQkJbGVuID4gTUFYX1JXX0NPVU5UID8gTUFYX1JXX0NP VU5UIDogbGVuLCAwKTsNCj4gKwlpZiAocmV0ID4gMCkgew0KPiArCQlmc25vdGlmeV9hY2Nlc3Mo ZmlsZV9pbik7DQo+ICsJCWFkZF9yY2hhcihjdXJyZW50LCByZXQpOw0KPiArCQlmc25vdGlmeV9t b2RpZnkoZmlsZV9vdXQpOw0KPiArCQlhZGRfd2NoYXIoY3VycmVudCwgcmV0KTsNCj4gKwl9DQo+ ICsNCj4gKwlpbmNfc3lzY3IoY3VycmVudCk7DQo+ICsJaW5jX3N5c2N3KGN1cnJlbnQpOw0KPiAr DQo+ICsJZmlsZV9lbmRfd3JpdGUoZmlsZV9vdXQpOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ ICsNCj4gK2ludCBrc21iZF92ZnNfY29weV9maWxlX3JhbmdlcyhzdHJ1Y3Qga3NtYmRfd29yayAq d29yaywNCj4gKwkJCQlzdHJ1Y3Qga3NtYmRfZmlsZSAqc3JjX2ZwLA0KPiArCQkJCXN0cnVjdCBr c21iZF9maWxlICpkc3RfZnAsDQo+ICsJCQkJc3RydWN0IHNydl9jb3B5Y2h1bmsgKmNodW5rcywN Cj4gKwkJCQl1bnNpZ25lZCBpbnQgY2h1bmtfY291bnQsDQo+ICsJCQkJdW5zaWduZWQgaW50ICpj aHVua19jb3VudF93cml0dGVuLA0KPiArCQkJCXVuc2lnbmVkIGludCAqY2h1bmtfc2l6ZV93cml0 dGVuLA0KPiArCQkJCWxvZmZfdCAqdG90YWxfc2l6ZV93cml0dGVuKQ0KPiArew0KPiArCXVuc2ln bmVkIGludCBpOw0KPiArCWxvZmZfdCBzcmNfb2ZmLCBkc3Rfb2ZmLCBzcmNfZmlsZV9zaXplOw0K PiArCXNpemVfdCBsZW47DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCSpjaHVua19jb3VudF93cml0 dGVuID0gMDsNCj4gKwkqY2h1bmtfc2l6ZV93cml0dGVuID0gMDsNCj4gKwkqdG90YWxfc2l6ZV93 cml0dGVuID0gMDsNCj4gKw0KPiArCWlmICghKHNyY19mcC0+ZGFjY2VzcyAmIChGSUxFX1JFQURf REFUQV9MRSB8IEZJTEVfRVhFQ1VURV9MRSkpKSB7DQo+ICsJCWtzbWJkX2Vycigibm8gcmlnaHQg dG8gcmVhZCglcylcbiIsIEZQX0ZJTEVOQU1FKHNyY19mcCkpOw0KPiArCQlyZXR1cm4gLUVBQ0NF UzsNCj4gKwl9DQo+ICsJaWYgKCEoZHN0X2ZwLT5kYWNjZXNzICYgKEZJTEVfV1JJVEVfREFUQV9M RSB8DQo+IEZJTEVfQVBQRU5EX0RBVEFfTEUpKSkgew0KPiArCQlrc21iZF9lcnIoIm5vIHJpZ2h0 IHRvIHdyaXRlKCVzKVxuIiwNCj4gRlBfRklMRU5BTUUoZHN0X2ZwKSk7DQo+ICsJCXJldHVybiAt RUFDQ0VTOw0KPiArCX0NCj4gKw0KPiArCWlmIChrc21iZF9zdHJlYW1fZmQoc3JjX2ZwKSB8fCBr c21iZF9zdHJlYW1fZmQoZHN0X2ZwKSkNCj4gKwkJcmV0dXJuIC1FQkFERjsNCj4gKw0KPiArCXNt Yl9icmVha19hbGxfbGV2SUlfb3Bsb2NrKHdvcmssIGRzdF9mcCwgMSk7DQo+ICsNCj4gKwlmb3Ig KGkgPSAwOyBpIDwgY2h1bmtfY291bnQ7IGkrKykgew0KPiArCQlzcmNfb2ZmID0gbGU2NF90b19j cHUoY2h1bmtzW2ldLlNvdXJjZU9mZnNldCk7DQo+ICsJCWRzdF9vZmYgPSBsZTY0X3RvX2NwdShj aHVua3NbaV0uVGFyZ2V0T2Zmc2V0KTsNCj4gKwkJbGVuID0gbGUzMl90b19jcHUoY2h1bmtzW2ld Lkxlbmd0aCk7DQo+ICsNCj4gKwkJaWYgKGNoZWNrX2xvY2tfcmFuZ2Uoc3JjX2ZwLT5maWxwLCBz cmNfb2ZmLA0KPiArCQkJCXNyY19vZmYgKyBsZW4gLSAxLCBSRUFEKSkNCj4gKwkJCXJldHVybiAt RUFHQUlOOw0KPiArCQlpZiAoY2hlY2tfbG9ja19yYW5nZShkc3RfZnAtPmZpbHAsIGRzdF9vZmYs DQo+ICsJCQkJZHN0X29mZiArIGxlbiAtIDEsIFdSSVRFKSkNCj4gKwkJCXJldHVybiAtRUFHQUlO Ow0KPiArCX0NCj4gKw0KPiArCXNyY19maWxlX3NpemUgPSBpX3NpemVfcmVhZChmaWxlX2lub2Rl KHNyY19mcC0+ZmlscCkpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGNodW5rX2NvdW50OyBp KyspIHsNCj4gKwkJc3JjX29mZiA9IGxlNjRfdG9fY3B1KGNodW5rc1tpXS5Tb3VyY2VPZmZzZXQp Ow0KPiArCQlkc3Rfb2ZmID0gbGU2NF90b19jcHUoY2h1bmtzW2ldLlRhcmdldE9mZnNldCk7DQo+ ICsJCWxlbiA9IGxlMzJfdG9fY3B1KGNodW5rc1tpXS5MZW5ndGgpOw0KPiArDQo+ICsJCWlmIChz cmNfb2ZmICsgbGVuID4gc3JjX2ZpbGVfc2l6ZSkNCj4gKwkJCXJldHVybiAtRTJCSUc7DQo+ICsN Cj4gKwkJcmV0ID0ga3NtYmRfdmZzX2NvcHlfZmlsZV9yYW5nZShzcmNfZnAtPmZpbHAsIHNyY19v ZmYsDQo+ICsJCQkJZHN0X2ZwLT5maWxwLCBkc3Rfb2ZmLCBsZW4pOw0KPiArCQlpZiAocmV0IDwg MCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJKmNodW5rX2NvdW50X3dyaXR0ZW4gKz0g MTsNCj4gKwkJKnRvdGFsX3NpemVfd3JpdHRlbiArPSByZXQ7DQo+ICsJfQ0KPiArCXJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICtpbnQga3NtYmRfdmZzX3Bvc2l4X2xvY2tfd2FpdChzdHJ1Y3QgZmls ZV9sb2NrICpmbG9jaykNCj4gK3sNCj4gKwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxl KGZsb2NrLT5mbF93YWl0LCAhZmxvY2stPmZsX2Jsb2NrZXIpOw0KPiArfQ0KPiArDQo+ICtpbnQg a3NtYmRfdmZzX3Bvc2l4X2xvY2tfd2FpdF90aW1lb3V0KHN0cnVjdCBmaWxlX2xvY2sgKmZsb2Nr LCBsb25nDQo+IHRpbWVvdXQpDQo+ICt7DQo+ICsJcmV0dXJuIHdhaXRfZXZlbnRfaW50ZXJydXB0 aWJsZV90aW1lb3V0KGZsb2NrLT5mbF93YWl0LA0KPiArCQkJCQkJIWZsb2NrLT5mbF9ibG9ja2Vy LA0KPiArCQkJCQkJdGltZW91dCk7DQo+ICt9DQo+ICsNCj4gK3ZvaWQga3NtYmRfdmZzX3Bvc2l4 X2xvY2tfdW5ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbG9jaykNCj4gK3sNCj4gKwlsb2Nrc19k ZWxldGVfYmxvY2soZmxvY2spOw0KPiArfQ0KPiArDQo+ICtpbnQga3NtYmRfdmZzX3NldF9pbml0 X3Bvc2l4X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiArew0KPiArCXN0cnVjdCBwb3NpeF9h Y2xfc3RhdGUgYWNsX3N0YXRlOw0KPiArCXN0cnVjdCBwb3NpeF9hY2wgKmFjbHM7DQo+ICsJaW50 IHJjOw0KPiArDQo+ICsJa3NtYmRfZGVidWcoU01CLCAiU2V0IHBvc2l4IGFjbHNcbiIpOw0KPiAr CXJjID0gaW5pdF9hY2xfc3RhdGUoJmFjbF9zdGF0ZSwgMSk7DQo+ICsJaWYgKHJjKQ0KPiArCQly ZXR1cm4gcmM7DQo+ICsNCj4gKwkvKiBTZXQgZGVmYXVsdCBvd25lciBncm91cCAqLw0KPiArCWFj bF9zdGF0ZS5vd25lci5hbGxvdyA9IChpbm9kZS0+aV9tb2RlICYgMDcwMCkgPj4gNjsNCj4gKwlh Y2xfc3RhdGUuZ3JvdXAuYWxsb3cgPSAoaW5vZGUtPmlfbW9kZSAmIDAwNzApID4+IDM7DQo+ICsJ YWNsX3N0YXRlLm90aGVyLmFsbG93ID0gaW5vZGUtPmlfbW9kZSAmIDAwMDc7DQo+ICsJYWNsX3N0 YXRlLnVzZXJzLT5hY2VzW2FjbF9zdGF0ZS51c2Vycy0+bl0udWlkID0gaW5vZGUtPmlfdWlkOw0K PiArCWFjbF9zdGF0ZS51c2Vycy0+YWNlc1thY2xfc3RhdGUudXNlcnMtPm4rK10ucGVybXMuYWxs b3cgPQ0KPiArCQlhY2xfc3RhdGUub3duZXIuYWxsb3c7DQo+ICsJYWNsX3N0YXRlLmdyb3Vwcy0+ YWNlc1thY2xfc3RhdGUuZ3JvdXBzLT5uXS5naWQgPSBpbm9kZS0+aV9naWQ7DQo+ICsJYWNsX3N0 YXRlLmdyb3Vwcy0+YWNlc1thY2xfc3RhdGUuZ3JvdXBzLT5uKytdLnBlcm1zLmFsbG93ID0NCj4g KwkJYWNsX3N0YXRlLmdyb3VwLmFsbG93Ow0KPiArCWFjbF9zdGF0ZS5tYXNrLmFsbG93ID0gMHgw NzsNCj4gKw0KPiArCWFjbHMgPSBrc21iZF92ZnNfcG9zaXhfYWNsX2FsbG9jKDYsIEdGUF9LRVJO RUwpOw0KPiArCWlmICghYWNscykgew0KPiArCQlmcmVlX2FjbF9zdGF0ZSgmYWNsX3N0YXRlKTsN Cj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsJfQ0KPiArCXBvc2l4X3N0YXRlX3RvX2FjbCgmYWNs X3N0YXRlLCBhY2xzLT5hX2VudHJpZXMpOw0KPiArCXJjID0ga3NtYmRfdmZzX3NldF9wb3NpeF9h Y2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYWNscyk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJ a3NtYmRfZGVidWcoU01CLCAiU2V0IHBvc2l4IGFjbChBQ0xfVFlQRV9BQ0NFU1MpIGZhaWxlZCwN Cj4gcmMgOiAlZFxuIiwNCj4gKwkJCQlyYyk7DQo+ICsJZWxzZSBpZiAoU19JU0RJUihpbm9kZS0+ aV9tb2RlKSkgew0KPiArCQlwb3NpeF9zdGF0ZV90b19hY2woJmFjbF9zdGF0ZSwgYWNscy0+YV9l bnRyaWVzKTsNCj4gKwkJcmMgPSBrc21iZF92ZnNfc2V0X3Bvc2l4X2FjbChpbm9kZSwgQUNMX1RZ UEVfREVGQVVMVCwNCj4gYWNscyk7DQo+ICsJCWlmIChyYyA8IDApDQo+ICsJCQlrc21iZF9kZWJ1 ZyhTTUIsICJTZXQgcG9zaXgNCj4gYWNsKEFDTF9UWVBFX0RFRkFVTFQpIGZhaWxlZCwgcmMgOiAl ZFxuIiwNCj4gKwkJCQkJcmMpOw0KPiArCX0NCj4gKwlmcmVlX2FjbF9zdGF0ZSgmYWNsX3N0YXRl KTsNCj4gKwlwb3NpeF9hY2xfcmVsZWFzZShhY2xzKTsNCj4gKwlyZXR1cm4gcmM7DQo+ICt9DQo+ ICsNCj4gK2ludCBrc21iZF92ZnNfaW5oZXJpdF9wb3NpeF9hY2woc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGlub2RlDQo+ICpwYXJlbnRfaW5vZGUpDQo+ICt7DQo+ICsJc3RydWN0IHBvc2l4 X2FjbCAqYWNsczsNCj4gKwlzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5ICpwYWNlOw0KPiArCWludCBy YywgaTsNCj4gKw0KPiArCWFjbHMgPSBrc21iZF92ZnNfZ2V0X2FjbChwYXJlbnRfaW5vZGUsIEFD TF9UWVBFX0RFRkFVTFQpOw0KPiArCWlmICghYWNscykNCj4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ ICsJcGFjZSA9IGFjbHMtPmFfZW50cmllczsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBhY2xz LT5hX2NvdW50OyBpKyssIHBhY2UrKykgew0KPiArCQlpZiAocGFjZS0+ZV90YWcgPT0gQUNMX01B U0spIHsNCj4gKwkJCXBhY2UtPmVfcGVybSA9IDB4MDc7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0K PiArCX0NCj4gKw0KPiArCXJjID0ga3NtYmRfdmZzX3NldF9wb3NpeF9hY2woaW5vZGUsIEFDTF9U WVBFX0FDQ0VTUywgYWNscyk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJa3NtYmRfZGVidWcoU01C LCAiU2V0IHBvc2l4IGFjbChBQ0xfVFlQRV9BQ0NFU1MpIGZhaWxlZCwNCj4gcmMgOiAlZFxuIiwN Cj4gKwkJCQlyYyk7DQo+ICsJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsNCj4gKwkJcmMg PSBrc21iZF92ZnNfc2V0X3Bvc2l4X2FjbChpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwNCj4gYWNs cyk7DQo+ICsJCWlmIChyYyA8IDApDQo+ICsJCQlrc21iZF9kZWJ1ZyhTTUIsICJTZXQgcG9zaXgN Cj4gYWNsKEFDTF9UWVBFX0RFRkFVTFQpIGZhaWxlZCwgcmMgOiAlZFxuIiwNCj4gKwkJCQkJcmMp Ow0KPiArCX0NCj4gKwlwb3NpeF9hY2xfcmVsZWFzZShhY2xzKTsNCj4gKwlyZXR1cm4gcmM7DQo+ ICt9DQo+IGRpZmYgLS1naXQgYS9mcy9jaWZzZC92ZnMuaCBiL2ZzL2NpZnNkL3Zmcy5oDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmJlZjVjMjBjMTQ2DQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZnMvY2lmc2QvdmZzLmgNCj4gQEAgLTAsMCArMSwzMTQg QEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovDQo+ ICsvKg0KPiArICogICBDb3B5cmlnaHQgKEMpIDIwMTYgTmFtamFlIEplb24gPGxpbmtpbmplb25A a2VybmVsLm9yZz4NCj4gKyAqICAgQ29weXJpZ2h0IChDKSAyMDE4IFNhbXN1bmcgRWxlY3Ryb25p Y3MgQ28uLCBMdGQuDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfX0tTTUJEX1ZGU19IX18NCj4g KyNkZWZpbmUgX19LU01CRF9WRlNfSF9fDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvZnMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPg0K PiArI2luY2x1ZGUgPHVhcGkvbGludXgveGF0dHIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wb3Np eF9hY2wuaD4NCj4gKw0KPiArI2luY2x1ZGUgInNtYmFjbC5oIg0KPiArDQo+ICsvKiBTVFJFQU0g WEFUVFIgUFJFRklYICovDQo+ICsjZGVmaW5lIFNUUkVBTV9QUkVGSVgJCQkiRG9zU3RyZWFtLiIN Cj4gKyNkZWZpbmUgU1RSRUFNX1BSRUZJWF9MRU4JCShzaXplb2YoU1RSRUFNX1BSRUZJWCkgLSAx KQ0KPiArI2RlZmluZSBYQVRUUl9OQU1FX1NUUkVBTQkJKFhBVFRSX1VTRVJfUFJFRklYDQo+IFNU UkVBTV9QUkVGSVgpDQo+ICsjZGVmaW5lIFhBVFRSX05BTUVfU1RSRUFNX0xFTg0KPiAJKHNpemVv ZihYQVRUUl9OQU1FX1NUUkVBTSkgLSAxKQ0KPiArDQo+ICtlbnVtIHsNCj4gKwlYQVRUUl9ET1NJ TkZPX0FUVFJJQgkJPSAweDAwMDAwMDAxLA0KPiArCVhBVFRSX0RPU0lORk9fRUFfU0laRQkJPSAw eDAwMDAwMDAyLA0KPiArCVhBVFRSX0RPU0lORk9fU0laRQkJPSAweDAwMDAwMDA0LA0KPiArCVhB VFRSX0RPU0lORk9fQUxMT0NfU0laRQk9IDB4MDAwMDAwMDgsDQo+ICsJWEFUVFJfRE9TSU5GT19D UkVBVEVfVElNRQk9IDB4MDAwMDAwMTAsDQo+ICsJWEFUVFJfRE9TSU5GT19DSEFOR0VfVElNRQk9 IDB4MDAwMDAwMjAsDQo+ICsJWEFUVFJfRE9TSU5GT19JVElNRQkJPSAweDAwMDAwMDQwDQo+ICt9 Ow0KPiArDQo+ICtzdHJ1Y3QgeGF0dHJfZG9zX2F0dHJpYiB7DQo+ICsJX191MTYJdmVyc2lvbjsN Cj4gKwlfX3UzMglmbGFnczsNCj4gKwlfX3UzMglhdHRyOw0KPiArCV9fdTMyCWVhX3NpemU7DQo+ ICsJX191NjQJc2l6ZTsNCj4gKwlfX3U2NAlhbGxvY19zaXplOw0KPiArCV9fdTY0CWNyZWF0ZV90 aW1lOw0KPiArCV9fdTY0CWNoYW5nZV90aW1lOw0KPiArCV9fdTY0CWl0aW1lOw0KPiArfTsNCj4g Kw0KPiArLyogRE9TIEFUVFJJQlVJVEUgWEFUVFIgUFJFRklYICovDQo+ICsjZGVmaW5lIERPU19B VFRSSUJVVEVfUFJFRklYCQkiRE9TQVRUUklCIg0KPiArI2RlZmluZSBET1NfQVRUUklCVVRFX1BS RUZJWF9MRU4NCj4gCShzaXplb2YoRE9TX0FUVFJJQlVURV9QUkVGSVgpIC0gMSkNCj4gKyNkZWZp bmUgWEFUVFJfTkFNRV9ET1NfQVRUUklCVVRFCVwNCj4gKwkJKFhBVFRSX1VTRVJfUFJFRklYIERP U19BVFRSSUJVVEVfUFJFRklYKQ0KPiArI2RlZmluZSBYQVRUUl9OQU1FX0RPU19BVFRSSUJVVEVf TEVOCVwNCj4gKwkJKHNpemVvZihYQVRUUl9VU0VSX1BSRUZJWCBET1NfQVRUUklCVVRFX1BSRUZJ WCkgLSAxKQ0KPiArDQo+ICsjZGVmaW5lIFhBVFRSX1NEX0hBU0hfVFlQRV9TSEEyNTYJMHgxDQo+ ICsjZGVmaW5lIFhBVFRSX1NEX0hBU0hfU0laRQkJNjQNCj4gKw0KPiArI2RlZmluZSBTTUJfQUNM X1JFQUQJCQk0DQo+ICsjZGVmaW5lIFNNQl9BQ0xfV1JJVEUJCQkyDQo+ICsjZGVmaW5lIFNNQl9B Q0xfRVhFQ1VURQkJCTENCj4gKw0KPiArZW51bSB7DQo+ICsJU01CX0FDTF9UQUdfSU5WQUxJRCA9 IDAsDQo+ICsJU01CX0FDTF9VU0VSLA0KPiArCVNNQl9BQ0xfVVNFUl9PQkosDQo+ICsJU01CX0FD TF9HUk9VUCwNCj4gKwlTTUJfQUNMX0dST1VQX09CSiwNCj4gKwlTTUJfQUNMX09USEVSLA0KPiAr CVNNQl9BQ0xfTUFTSw0KPiArfTsNCj4gKw0KPiArc3RydWN0IHhhdHRyX2FjbF9lbnRyeSB7DQo+ ICsJaW50IHR5cGU7DQo+ICsJdWlkX3QgdWlkOw0KPiArCWdpZF90IGdpZDsNCj4gKwltb2RlX3Qg cGVybTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCB4YXR0cl9zbWJfYWNsIHsNCj4gKwlpbnQgY291 bnQ7DQo+ICsJaW50IG5leHQ7DQo+ICsJc3RydWN0IHhhdHRyX2FjbF9lbnRyeSBlbnRyaWVzWzBd Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IHhhdHRyX250YWNsIHsNCj4gKwlfX3UxNgl2ZXJzaW9u Ow0KPiArCXZvaWQJKnNkX2J1ZjsNCj4gKwlfX3UzMglzZF9zaXplOw0KPiArCV9fdTE2CWhhc2hf dHlwZTsNCj4gKwlfX3U4CWRlc2NbMTBdOw0KPiArCV9fdTE2CWRlc2NfbGVuOw0KPiArCV9fdTY0 CWN1cnJlbnRfdGltZTsNCj4gKwlfX3U4CWhhc2hbWEFUVFJfU0RfSEFTSF9TSVpFXTsNCj4gKwlf X3U4CXBvc2l4X2FjbF9oYXNoW1hBVFRSX1NEX0hBU0hfU0laRV07DQo+ICt9Ow0KPiArDQo+ICsv KiBTRUNVUklUWSBERVNDUklQVE9SIFhBVFRSIFBSRUZJWCAqLw0KPiArI2RlZmluZSBTRF9QUkVG SVgJCQkiTlRBQ0wiDQo+ICsjZGVmaW5lIFNEX1BSRUZJWF9MRU4JKHNpemVvZihTRF9QUkVGSVgp IC0gMSkNCj4gKyNkZWZpbmUgWEFUVFJfTkFNRV9TRAlcDQo+ICsJCShYQVRUUl9TRUNVUklUWV9Q UkVGSVggU0RfUFJFRklYKQ0KPiArI2RlZmluZSBYQVRUUl9OQU1FX1NEX0xFTglcDQo+ICsJCShz aXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYIFNEX1BSRUZJWCkgLSAxKQ0KPiArDQo+ICsNCj4g Ky8qIENyZWF0ZU9wdGlvbnMgKi8NCj4gKy8qIEZsYWcgaXMgc2V0LCBpdCBtdXN0IG5vdCBiZSBh IGZpbGUgLCB2YWxpZCBmb3IgZGlyZWN0b3J5IG9ubHkgKi8NCj4gKyNkZWZpbmUgRklMRV9ESVJF Q1RPUllfRklMRV9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkNCj4gKyNkZWZpbmUgRklM RV9XUklURV9USFJPVUdIX0xFDQo+IAljcHVfdG9fbGUzMigweDAwMDAwMDAyKQ0KPiArI2RlZmlu ZSBGSUxFX1NFUVVFTlRJQUxfT05MWV9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkNCj4g Kw0KPiArLyogU2hvdWxkIG5vdCBidWZmZXIgb24gc2VydmVyKi8NCj4gKyNkZWZpbmUgRklMRV9O T19JTlRFUk1FRElBVEVfQlVGRkVSSU5HX0xFDQo+IAljcHVfdG9fbGUzMigweDAwMDAwMDA4KQ0K PiArLyogTUJaICovDQo+ICsjZGVmaW5lIEZJTEVfU1lOQ0hST05PVVNfSU9fQUxFUlRfTEUNCj4g CWNwdV90b19sZTMyKDB4MDAwMDAwMTApDQo+ICsvKiBNQlogKi8NCj4gKyNkZWZpbmUgRklMRV9T WU5DSFJPTk9VU19JT19OT05BTEVSVF9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkNCj4g Kw0KPiArLyogRmxhZiBtdXN0IG5vdCBiZSBzZXQgZm9yIGRpcmVjdG9yeSAqLw0KPiArI2RlZmlu ZSBGSUxFX05PTl9ESVJFQ1RPUllfRklMRV9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkN Cj4gKw0KPiArLyogU2hvdWxkIGJlIHplcm8gKi8NCj4gKyNkZWZpbmUgQ1JFQVRFX1RSRUVfQ09O TkVDVElPTg0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkNCj4gKyNkZWZpbmUgRklMRV9DT01Q TEVURV9JRl9PUExPQ0tFRF9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkNCj4gKyNkZWZp bmUgRklMRV9OT19FQV9LTk9XTEVER0VfTEUNCj4gCWNwdV90b19sZTMyKDB4MDAwMDAyMDApDQo+ ICsjZGVmaW5lIEZJTEVfT1BFTl9SRU1PVEVfSU5TVEFOQ0UNCj4gCWNwdV90b19sZTMyKDB4MDAw MDA0MDApDQo+ICsNCj4gKy8qKg0KPiArICogRG9jIHNheXMgdGhpcyBpcyBvYnNvbGV0ZSAib3Bl biBmb3IgcmVjb3ZlcnkiIGZsYWcgc2hvdWxkIGJlIHplcm8NCj4gKyAqIGluIGFueSBjYXNlLg0K PiArICovDQo+ICsjZGVmaW5lIENSRUFURV9PUEVOX0ZPUl9SRUNPVkVSWQ0KPiAJY3B1X3RvX2xl MzIoMHgwMDAwMDQwMCkNCj4gKyNkZWZpbmUgRklMRV9SQU5ET01fQUNDRVNTX0xFDQo+IAljcHVf dG9fbGUzMigweDAwMDAwODAwKQ0KPiArI2RlZmluZSBGSUxFX0RFTEVURV9PTl9DTE9TRV9MRQ0K PiAJY3B1X3RvX2xlMzIoMHgwMDAwMTAwMCkNCj4gKyNkZWZpbmUgRklMRV9PUEVOX0JZX0ZJTEVf SURfTEUNCj4gCWNwdV90b19sZTMyKDB4MDAwMDIwMDApDQo+ICsjZGVmaW5lIEZJTEVfT1BFTl9G T1JfQkFDS1VQX0lOVEVOVF9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwNDAwMCkNCj4gKyNkZWZp bmUgRklMRV9OT19DT01QUkVTU0lPTl9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDAwODAwMCkNCj4g Kw0KPiArLyogU2hvdWxkIGJlIHplcm8qLw0KPiArI2RlZmluZSBGSUxFX09QRU5fUkVRVUlSSU5H X09QTE9DSw0KPiAJY3B1X3RvX2xlMzIoMHgwMDAxMDAwMCkNCj4gKyNkZWZpbmUgRklMRV9ESVNB TExPV19FWENMVVNJVkUNCj4gCWNwdV90b19sZTMyKDB4MDAwMjAwMDApDQo+ICsjZGVmaW5lIEZJ TEVfUkVTRVJWRV9PUEZJTFRFUl9MRQkJY3B1X3RvX2xlMzIoMHgwMDEwMDAwMCkNCj4gKyNkZWZp bmUgRklMRV9PUEVOX1JFUEFSU0VfUE9JTlRfTEUNCj4gCWNwdV90b19sZTMyKDB4MDAyMDAwMDAp DQo+ICsjZGVmaW5lIEZJTEVfT1BFTl9OT19SRUNBTExfTEUNCj4gCWNwdV90b19sZTMyKDB4MDA0 MDAwMDApDQo+ICsNCj4gKy8qIFNob3VsZCBiZSB6ZXJvICovDQo+ICsjZGVmaW5lIEZJTEVfT1BF Tl9GT1JfRlJFRV9TUEFDRV9RVUVSWV9MRQ0KPiAJY3B1X3RvX2xlMzIoMHgwMDgwMDAwMCkNCj4g KyNkZWZpbmUgQ1JFQVRFX09QVElPTlNfTUFTSw0KPiAJY3B1X3RvX2xlMzIoMHgwMEZGRkZGRikN Cj4gKyNkZWZpbmUgQ1JFQVRFX09QVElPTl9SRUFET05MWQkJCTB4MTAwMDAwMDANCj4gKy8qIHN5 c3RlbS4gTkIgbm90IHNlbnQgb3ZlciB3aXJlICovDQo+ICsjZGVmaW5lIENSRUFURV9PUFRJT05f U1BFQ0lBTAkJCTB4MjAwMDAwMDANCj4gKw0KPiArc3RydWN0IGtzbWJkX3dvcms7DQo+ICtzdHJ1 Y3Qga3NtYmRfZmlsZTsNCj4gK3N0cnVjdCBrc21iZF9jb25uOw0KPiArDQo+ICtzdHJ1Y3Qga3Nt YmRfZGlyX2luZm8gew0KPiArCWNvbnN0IGNoYXIJKm5hbWU7DQo+ICsJY2hhcgkJKndwdHI7DQo+ ICsJY2hhcgkJKnJwdHI7DQo+ICsJaW50CQluYW1lX2xlbjsNCj4gKwlpbnQJCW91dF9idWZfbGVu Ow0KPiArCWludAkJbnVtX2VudHJ5Ow0KPiArCWludAkJZGF0YV9jb3VudDsNCj4gKwlpbnQJCWxh c3RfZW50cnlfb2Zmc2V0Ow0KPiArCWJvb2wJCWhpZGVfZG90X2ZpbGU7DQo+ICsJaW50CQlmbGFn czsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBrc21iZF9yZWFkZGlyX2RhdGEgew0KPiArCXN0cnVj dCBkaXJfY29udGV4dAljdHg7DQo+ICsJdW5pb24gew0KPiArCQl2b2lkCQkqcHJpdmF0ZTsNCj4g KwkJY2hhcgkJKmRpcmVudDsNCj4gKwl9Ow0KPiArDQo+ICsJdW5zaWduZWQgaW50CQl1c2VkOw0K PiArCXVuc2lnbmVkIGludAkJZGlyZW50X2NvdW50Ow0KPiArCXVuc2lnbmVkIGludAkJZmlsZV9h dHRyOw0KPiArfTsNCj4gKw0KPiArLyoga3NtYmQga3N0YXQgd3JhcHBlciB0byBnZXQgdmFsaWQg Y3JlYXRlIHRpbWUgd2hlbiByZWFkaW5nIGRpciBlbnRyeSAqLw0KPiArc3RydWN0IGtzbWJkX2tz dGF0IHsNCj4gKwlzdHJ1Y3Qga3N0YXQJCSprc3RhdDsNCj4gKwl1bnNpZ25lZCBsb25nIGxvbmcJ Y3JlYXRlX3RpbWU7DQo+ICsJX19sZTMyCQkJZmlsZV9hdHRyaWJ1dGVzOw0KPiArfTsNCj4gKw0K PiArc3RydWN0IGtzbWJkX2ZzX3NlY3Rvcl9zaXplIHsNCj4gKwl1bnNpZ25lZCBzaG9ydAlsb2dp Y2FsX3NlY3Rvcl9zaXplOw0KPiArCXVuc2lnbmVkIGludAlwaHlzaWNhbF9zZWN0b3Jfc2l6ZTsN Cj4gKwl1bnNpZ25lZCBpbnQJb3B0aW1hbF9pb19zaXplOw0KPiArfTsNCj4gKw0KPiAraW50IGtz bWJkX3Zmc19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGFjY19t b2RlLA0KPiArCQlib29sIGRlbGV0ZSk7DQo+ICtpbnQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxf YWNjZXNzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgX19sZTMyDQo+ICpkYWNjZXNzKTsNCj4gK2lu dCBrc21iZF92ZnNfY3JlYXRlKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLCBjb25zdCBjaGFyICpu YW1lLA0KPiB1bW9kZV90IG1vZGUpOw0KPiAraW50IGtzbWJkX3Zmc19ta2RpcihzdHJ1Y3Qga3Nt YmRfd29yayAqd29yaywgY29uc3QgY2hhciAqbmFtZSwNCj4gdW1vZGVfdCBtb2RlKTsNCj4gK2lu dCBrc21iZF92ZnNfcmVhZChzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgc3RydWN0IGtzbWJkX2Zp bGUgKmZwLA0KPiArCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcyk7DQo+ICtpbnQga3NtYmRf dmZzX3dyaXRlKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLCBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAs DQo+ICsJY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zLCBib29sIHN5bmMsIHNz aXplX3QgKndyaXR0ZW4pOw0KPiAraW50IGtzbWJkX3Zmc19mc3luYyhzdHJ1Y3Qga3NtYmRfd29y ayAqd29yaywgdWludDY0X3QgZmlkLCB1aW50NjRfdA0KPiBwX2lkKTsNCj4gK2ludCBrc21iZF92 ZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNoYXIgKm5hbWUpOw0KPiAr aW50IGtzbWJkX3Zmc19saW5rKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLA0KPiArCQljb25zdCBj aGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lKTsNCj4gK2ludCBrc21iZF92ZnNfZ2V0 YXR0cihzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0KTsNCj4gK2ludCBrc21i ZF92ZnNfc3ltbGluayhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzeW1uYW1lKTsNCj4g K2ludCBrc21iZF92ZnNfcmVhZGxpbmsoc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKmJ1ZiwgaW50 IGxlbnApOw0KPiArDQo+ICtpbnQga3NtYmRfdmZzX2ZwX3JlbmFtZShzdHJ1Y3Qga3NtYmRfd29y ayAqd29yaywgc3RydWN0IGtzbWJkX2ZpbGUNCj4gKmZwLA0KPiArCQljaGFyICpuZXduYW1lKTsN Cj4gK2ludCBrc21iZF92ZnNfcmVuYW1lX3Nsb3dwYXRoKHN0cnVjdCBrc21iZF93b3JrICp3b3Jr LA0KPiArCQljaGFyICpvbGRuYW1lLCBjaGFyICpuZXduYW1lKTsNCj4gKw0KPiAraW50IGtzbWJk X3Zmc190cnVuY2F0ZShzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgY29uc3QgY2hhciAqbmFtZSwN Cj4gKwlzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAsIGxvZmZfdCBzaXplKTsNCj4gKw0KPiArc3RydWN0 IHNydl9jb3B5Y2h1bms7DQo+ICtpbnQga3NtYmRfdmZzX2NvcHlfZmlsZV9yYW5nZXMoc3RydWN0 IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCQkJc3RydWN0IGtzbWJkX2ZpbGUgKnNyY19mcCwNCj4g KwkJCQlzdHJ1Y3Qga3NtYmRfZmlsZSAqZHN0X2ZwLA0KPiArCQkJCXN0cnVjdCBzcnZfY29weWNo dW5rICpjaHVua3MsDQo+ICsJCQkJdW5zaWduZWQgaW50IGNodW5rX2NvdW50LA0KPiArCQkJCXVu c2lnbmVkIGludCAqY2h1bmtfY291bnRfd3JpdHRlbiwNCj4gKwkJCQl1bnNpZ25lZCBpbnQgKmNo dW5rX3NpemVfd3JpdHRlbiwNCj4gKwkJCQlsb2ZmX3QgICp0b3RhbF9zaXplX3dyaXR0ZW4pOw0K PiArDQo+ICtzdHJ1Y3Qga3NtYmRfZmlsZSAqa3NtYmRfdmZzX2RlbnRyeV9vcGVuKHN0cnVjdCBr c21iZF93b3JrICp3b3JrLA0KPiArCQkJCQkgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsDQo+ICsJ CQkJCSBpbnQgZmxhZ3MsDQo+ICsJCQkJCSBfX2xlMzIgb3B0aW9uLA0KPiArCQkJCQkgaW50IGZl eGlzdCk7DQo+ICsNCj4gK3NzaXplX3Qga3NtYmRfdmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIGNoYXIgKipsaXN0KTsNCj4gK3NzaXplX3Qga3NtYmRfdmZzX2dldHhhdHRyKHN0 cnVjdCBkZW50cnkgKmRlbnRyeSwNCj4gKwkJCSAgIGNoYXIgKnhhdHRyX25hbWUsDQo+ICsJCQkg ICBjaGFyICoqeGF0dHJfYnVmKTsNCj4gKw0KPiArc3NpemVfdCBrc21iZF92ZnNfY2FzZXhhdHRy X2xlbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksDQo+ICsJCQkJY2hhciAqYXR0cl9uYW1lLA0KPiAr CQkJCWludCBhdHRyX25hbWVfbGVuKTsNCj4gKw0KPiAraW50IGtzbWJkX3Zmc19zZXR4YXR0cihz dHJ1Y3QgZGVudHJ5ICpkZW50cnksDQo+ICsJCSAgICAgICBjb25zdCBjaGFyICphdHRyX25hbWUs DQo+ICsJCSAgICAgICBjb25zdCB2b2lkICphdHRyX3ZhbHVlLA0KPiArCQkgICAgICAgc2l6ZV90 IGF0dHJfc2l6ZSwNCj4gKwkJICAgICAgIGludCBmbGFncyk7DQo+ICsNCj4gK2ludCBrc21iZF92 ZnNfZnNldHhhdHRyKGNvbnN0IGNoYXIgKmZpbGVuYW1lLA0KPiArCQkJY29uc3QgY2hhciAqYXR0 cl9uYW1lLA0KPiArCQkJY29uc3Qgdm9pZCAqYXR0cl92YWx1ZSwNCj4gKwkJCXNpemVfdCBhdHRy X3NpemUsDQo+ICsJCQlpbnQgZmxhZ3MpOw0KPiArDQo+ICtpbnQga3NtYmRfdmZzX3hhdHRyX3N0 cmVhbV9uYW1lKGNoYXIgKnN0cmVhbV9uYW1lLA0KPiArCQkJCWNoYXIgKip4YXR0cl9zdHJlYW1f bmFtZSwNCj4gKwkJCQlzaXplX3QgKnhhdHRyX3N0cmVhbV9uYW1lX3NpemUsDQo+ICsJCQkJaW50 IHNfdHlwZSk7DQo+ICsNCj4gK2ludCBrc21iZF92ZnNfdHJ1bmNhdGVfeGF0dHIoc3RydWN0IGRl bnRyeSAqZGVudHJ5LCBpbnQgd29fc3RyZWFtcyk7DQo+ICtpbnQga3NtYmRfdmZzX3JlbW92ZV94 YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmF0dHJfbmFtZSk7DQo+ICt2b2lkIGtz bWJkX3Zmc194YXR0cl9mcmVlKGNoYXIgKnhhdHRyKTsNCj4gKw0KPiAraW50IGtzbWJkX3Zmc19r ZXJuX3BhdGgoY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgcGF0aA0KPiAq cGF0aCwNCj4gKwkJYm9vbCBjYXNlbGVzcyk7DQo+ICtpbnQga3NtYmRfdmZzX2VtcHR5X2Rpcihz dHJ1Y3Qga3NtYmRfZmlsZSAqZnApOw0KPiArdm9pZCBrc21iZF92ZnNfc2V0X2ZhZHZpc2Uoc3Ry dWN0IGZpbGUgKmZpbHAsIF9fbGUzMiBvcHRpb24pOw0KPiAraW50IGtzbWJkX3Zmc19sb2NrKHN0 cnVjdCBmaWxlICpmaWxwLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbG9jayk7DQo+ICtp bnQga3NtYmRfdmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrc21iZF9yZWFk ZGlyX2RhdGEgKnJkYXRhKTsNCj4gK2ludCBrc21iZF92ZnNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga3Nt YmRfd29yayAqd29yaywNCj4gKwkJCSBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAsDQo+ICsJCQkgbG9m Zl90IGxlbik7DQo+ICtpbnQga3NtYmRfdmZzX3plcm9fZGF0YShzdHJ1Y3Qga3NtYmRfd29yayAq d29yaywNCj4gKwkJCSBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAsDQo+ICsJCQkgbG9mZl90IG9mZiwN Cj4gKwkJCSBsb2ZmX3QgbGVuKTsNCj4gKw0KPiArc3RydWN0IGZpbGVfYWxsb2NhdGVkX3Jhbmdl X2J1ZmZlcjsNCj4gK2ludCBrc21iZF92ZnNfZnFhcl9sc2VlayhzdHJ1Y3Qga3NtYmRfZmlsZSAq ZnAsIGxvZmZfdCBzdGFydCwgbG9mZl90IGxlbmd0aCwNCj4gKwkJCXN0cnVjdCBmaWxlX2FsbG9j YXRlZF9yYW5nZV9idWZmZXIgKnJhbmdlcywNCj4gKwkJCWludCBpbl9jb3VudCwgaW50ICpvdXRf Y291bnQpOw0KPiAraW50IGtzbWJkX3Zmc191bmxpbmsoc3RydWN0IGRlbnRyeSAqZGlyLCBzdHJ1 Y3QgZGVudHJ5ICpkZW50cnkpOw0KPiArdW5zaWduZWQgc2hvcnQga3NtYmRfdmZzX2xvZ2ljYWxf c2VjdG9yX3NpemUoc3RydWN0IGlub2RlICppbm9kZSk7DQo+ICt2b2lkIGtzbWJkX3Zmc19zbWIy X3NlY3Rvcl9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsDQo+ICsJCQkJc3RydWN0IGtzbWJkX2Zz X3NlY3Rvcl9zaXplICpmc19zcyk7DQo+ICt2b2lkICprc21iZF92ZnNfaW5pdF9rc3RhdChjaGFy ICoqcCwgc3RydWN0IGtzbWJkX2tzdGF0ICprc21iZF9rc3RhdCk7DQo+ICsNCj4gK2ludCBrc21i ZF92ZnNfZmlsbF9kZW50cnlfYXR0cnMoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCQkJ c3RydWN0IGRlbnRyeSAqZGVudHJ5LA0KPiArCQkJCXN0cnVjdCBrc21iZF9rc3RhdCAqa3NtYmRf a3N0YXQpOw0KPiArDQo+ICtpbnQga3NtYmRfdmZzX3Bvc2l4X2xvY2tfd2FpdChzdHJ1Y3QgZmls ZV9sb2NrICpmbG9jayk7DQo+ICtpbnQga3NtYmRfdmZzX3Bvc2l4X2xvY2tfd2FpdF90aW1lb3V0 KHN0cnVjdCBmaWxlX2xvY2sgKmZsb2NrLCBsb25nDQo+IHRpbWVvdXQpOw0KPiArdm9pZCBrc21i ZF92ZnNfcG9zaXhfbG9ja191bmJsb2NrKHN0cnVjdCBmaWxlX2xvY2sgKmZsb2NrKTsNCj4gKw0K PiAraW50IGtzbWJkX3Zmc19yZW1vdmVfYWNsX3hhdHRycyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkp Ow0KPiAraW50IGtzbWJkX3Zmc19yZW1vdmVfc2RfeGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRy eSk7DQo+ICtpbnQga3NtYmRfdmZzX3NldF9zZF94YXR0cihzdHJ1Y3Qga3NtYmRfY29ubiAqY29u biwgc3RydWN0IGRlbnRyeQ0KPiAqZGVudHJ5LA0KPiArCQlzdHJ1Y3Qgc21iX250c2QgKnBudHNk LCBpbnQgbGVuKTsNCj4gK2ludCBrc21iZF92ZnNfZ2V0X3NkX3hhdHRyKHN0cnVjdCBrc21iZF9j b25uICpjb25uLCBzdHJ1Y3QgZGVudHJ5DQo+ICpkZW50cnksDQo+ICsJCXN0cnVjdCBzbWJfbnRz ZCAqKnBudHNkKTsNCj4gK2ludCBrc21iZF92ZnNfc2V0X2Rvc19hdHRyaWJfeGF0dHIoc3RydWN0 IGRlbnRyeSAqZGVudHJ5LA0KPiArCQlzdHJ1Y3QgeGF0dHJfZG9zX2F0dHJpYiAqZGEpOw0KPiAr aW50IGtzbWJkX3Zmc19nZXRfZG9zX2F0dHJpYl94YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnks DQo+ICsJCXN0cnVjdCB4YXR0cl9kb3NfYXR0cmliICpkYSk7DQo+ICtzdHJ1Y3QgcG9zaXhfYWNs ICprc21iZF92ZnNfcG9zaXhfYWNsX2FsbG9jKGludCBjb3VudCwgZ2ZwX3QgZmxhZ3MpOw0KPiAr c3RydWN0IHBvc2l4X2FjbCAqa3NtYmRfdmZzX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwg aW50IHR5cGUpOw0KPiAraW50IGtzbWJkX3Zmc19zZXRfcG9zaXhfYWNsKHN0cnVjdCBpbm9kZSAq aW5vZGUsIGludCB0eXBlLA0KPiArCQlzdHJ1Y3QgcG9zaXhfYWNsICphY2wpOw0KPiAraW50IGtz bWJkX3Zmc19zZXRfaW5pdF9wb3NpeF9hY2woc3RydWN0IGlub2RlICppbm9kZSk7DQo+ICtpbnQg a3NtYmRfdmZzX2luaGVyaXRfcG9zaXhfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsDQo+ICsJCXN0 cnVjdCBpbm9kZSAqcGFyZW50X2lub2RlKTsNCj4gKyNlbmRpZiAvKiBfX0tTTUJEX1ZGU19IX18g Ki8NCj4gZGlmZiAtLWdpdCBhL2ZzL2NpZnNkL3Zmc19jYWNoZS5jIGIvZnMvY2lmc2QvdmZzX2Nh Y2hlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hZjky ZmFiNWI3YWUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9mcy9jaWZzZC92ZnNfY2FjaGUuYw0K PiBAQCAtMCwwICsxLDg1MSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb3ItbGF0ZXINCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTmFtamFlIEplb24g PGxpbmtpbmplb25Aa2VybmVsLm9yZz4NCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBTYW1zdW5n IEVsZWN0cm9uaWNzIENvLiwgTHRkLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9m cy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC92bWFs bG9jLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJnbG9iLmgiDQo+ICsjaW5jbHVkZSAidmZzX2NhY2hl LmgiDQo+ICsjaW5jbHVkZSAiYnVmZmVyX3Bvb2wuaCINCj4gKyNpbmNsdWRlICJvcGxvY2suaCIN Cj4gKyNpbmNsdWRlICJ2ZnMuaCINCj4gKyNpbmNsdWRlICJjb25uZWN0aW9uLmgiDQo+ICsjaW5j bHVkZSAibWdtdC90cmVlX2Nvbm5lY3QuaCINCj4gKyNpbmNsdWRlICJtZ210L3VzZXJfc2Vzc2lv bi5oIg0KPiArI2luY2x1ZGUgInNtYl9jb21tb24uaCINCj4gKw0KPiArI2RlZmluZSBTX0RFTF9Q RU5ESU5HCQkJMQ0KPiArI2RlZmluZSBTX0RFTF9PTl9DTFMJCQkyDQo+ICsjZGVmaW5lIFNfREVM X09OX0NMU19TVFJFQU0JCTgNCj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGludCBpbm9kZV9oYXNo X21hc2sgX19yZWFkX21vc3RseTsNCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5vZGVfaGFzaF9z aGlmdCBfX3JlYWRfbW9zdGx5Ow0KPiArc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICppbm9kZV9o YXNodGFibGUgX19yZWFkX21vc3RseTsNCj4gK3N0YXRpYyBERUZJTkVfUldMT0NLKGlub2RlX2hh c2hfbG9jayk7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qga3NtYmRfZmlsZV90YWJsZSBnbG9iYWxf ZnQ7DQo+ICtzdGF0aWMgYXRvbWljX2xvbmdfdCBmZF9saW1pdDsNCj4gKw0KPiArdm9pZCBrc21i ZF9zZXRfZmRfbGltaXQodW5zaWduZWQgbG9uZyBsaW1pdCkNCj4gK3sNCj4gKwlsaW1pdCA9IG1p bihsaW1pdCwgZ2V0X21heF9maWxlcygpKTsNCj4gKwlhdG9taWNfbG9uZ19zZXQoJmZkX2xpbWl0 LCBsaW1pdCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGZkX2xpbWl0X2RlcGxldGVkKHZv aWQpDQo+ICt7DQo+ICsJbG9uZyB2ID0gYXRvbWljX2xvbmdfZGVjX3JldHVybigmZmRfbGltaXQp Ow0KPiArDQo+ICsJaWYgKHYgPj0gMCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCWF0b21pY19s b25nX2luYygmZmRfbGltaXQpOw0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBmZF9saW1pdF9jbG9zZSh2b2lkKQ0KPiArew0KPiArCWF0b21pY19sb25nX2luYygm ZmRfbGltaXQpOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogSU5PREUgaGFzaA0KPiArICovDQo+ ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlub2RlX2hhc2goc3RydWN0IHN1cGVyX2Jsb2Nr ICpzYiwgdW5zaWduZWQgbG9uZw0KPiBoYXNodmFsKQ0KPiArew0KPiArCXVuc2lnbmVkIGxvbmcg dG1wOw0KPiArDQo+ICsJdG1wID0gKGhhc2h2YWwgKiAodW5zaWduZWQgbG9uZylzYikgXiAoR09M REVOX1JBVElPX1BSSU1FICsNCj4gaGFzaHZhbCkgLw0KPiArCQlMMV9DQUNIRV9CWVRFUzsNCj4g Kwl0bXAgPSB0bXAgXiAoKHRtcCBeIEdPTERFTl9SQVRJT19QUklNRSkgPj4gaW5vZGVfaGFzaF9z aGlmdCk7DQo+ICsJcmV0dXJuIHRtcCAmIGlub2RlX2hhc2hfbWFzazsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHN0cnVjdCBrc21iZF9pbm9kZSAqX19rc21iZF9pbm9kZV9sb29rdXAoc3RydWN0IGlu b2RlICppbm9kZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IGlub2RlX2hh c2h0YWJsZSArDQo+ICsJCWlub2RlX2hhc2goaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubyk7DQo+ ICsJc3RydWN0IGtzbWJkX2lub2RlICpjaSA9IE5VTEwsICpyZXRfY2kgPSBOVUxMOw0KPiArDQo+ ICsJaGxpc3RfZm9yX2VhY2hfZW50cnkoY2ksIGhlYWQsIG1faGFzaCkgew0KPiArCQlpZiAoY2kt Pm1faW5vZGUgPT0gaW5vZGUpIHsNCj4gKwkJCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZjaS0+ bV9jb3VudCkpDQo+ICsJCQkJcmV0X2NpID0gY2k7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiAr CX0NCj4gKwlyZXR1cm4gcmV0X2NpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGtzbWJk X2lub2RlICprc21iZF9pbm9kZV9sb29rdXAoc3RydWN0IGtzbWJkX2ZpbGUgKmZwKQ0KPiArew0K PiArCXJldHVybiBfX2tzbWJkX2lub2RlX2xvb2t1cChGUF9JTk9ERShmcCkpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgc3RydWN0IGtzbWJkX2lub2RlICprc21iZF9pbm9kZV9sb29rdXBfYnlfdmZz aW5vZGUoc3RydWN0DQo+IGlub2RlICppbm9kZSkNCj4gK3sNCj4gKwlzdHJ1Y3Qga3NtYmRfaW5v ZGUgKmNpOw0KPiArDQo+ICsJcmVhZF9sb2NrKCZpbm9kZV9oYXNoX2xvY2spOw0KPiArCWNpID0g X19rc21iZF9pbm9kZV9sb29rdXAoaW5vZGUpOw0KPiArCXJlYWRfdW5sb2NrKCZpbm9kZV9oYXNo X2xvY2spOw0KPiArCXJldHVybiBjaTsNCj4gK30NCj4gKw0KPiAraW50IGtzbWJkX3F1ZXJ5X2lu b2RlX3N0YXR1cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiArew0KPiArCXN0cnVjdCBrc21iZF9p bm9kZSAqY2k7DQo+ICsJaW50IHJldCA9IEtTTUJEX0lOT0RFX1NUQVRVU19VTktOT1dOOw0KPiAr DQo+ICsJcmVhZF9sb2NrKCZpbm9kZV9oYXNoX2xvY2spOw0KPiArCWNpID0gX19rc21iZF9pbm9k ZV9sb29rdXAoaW5vZGUpOw0KPiArCWlmIChjaSkgew0KPiArCQlyZXQgPSBLU01CRF9JTk9ERV9T VEFUVVNfT0s7DQo+ICsJCWlmIChjaS0+bV9mbGFncyAmIFNfREVMX1BFTkRJTkcpDQo+ICsJCQly ZXQgPSBLU01CRF9JTk9ERV9TVEFUVVNfUEVORElOR19ERUxFVEU7DQo+ICsJCWF0b21pY19kZWMo JmNpLT5tX2NvdW50KTsNCj4gKwl9DQo+ICsJcmVhZF91bmxvY2soJmlub2RlX2hhc2hfbG9jayk7 DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArYm9vbCBrc21iZF9pbm9kZV9wZW5kaW5n X2RlbGV0ZShzdHJ1Y3Qga3NtYmRfZmlsZSAqZnApDQo+ICt7DQo+ICsJcmV0dXJuIChmcC0+Zl9j aS0+bV9mbGFncyAmIFNfREVMX1BFTkRJTkcpOw0KPiArfQ0KPiArDQo+ICt2b2lkIGtzbWJkX3Nl dF9pbm9kZV9wZW5kaW5nX2RlbGV0ZShzdHJ1Y3Qga3NtYmRfZmlsZSAqZnApDQo+ICt7DQo+ICsJ ZnAtPmZfY2ktPm1fZmxhZ3MgfD0gU19ERUxfUEVORElORzsNCj4gK30NCj4gKw0KPiArdm9pZCBr c21iZF9jbGVhcl9pbm9kZV9wZW5kaW5nX2RlbGV0ZShzdHJ1Y3Qga3NtYmRfZmlsZSAqZnApDQo+ ICt7DQo+ICsJZnAtPmZfY2ktPm1fZmxhZ3MgJj0gflNfREVMX1BFTkRJTkc7DQo+ICt9DQo+ICsN Cj4gK3ZvaWQga3NtYmRfZmRfc2V0X2RlbGV0ZV9vbl9jbG9zZShzdHJ1Y3Qga3NtYmRfZmlsZSAq ZnAsDQo+ICsJCQkJICBpbnQgZmlsZV9pbmZvKQ0KPiArew0KPiArCWlmIChrc21iZF9zdHJlYW1f ZmQoZnApKSB7DQo+ICsJCWZwLT5mX2NpLT5tX2ZsYWdzIHw9IFNfREVMX09OX0NMU19TVFJFQU07 DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlmcC0+Zl9jaS0+bV9mbGFncyB8PSBTX0RF TF9PTl9DTFM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGtzbWJkX2lub2RlX2hhc2goc3Ry dWN0IGtzbWJkX2lub2RlICpjaSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYiA9IGlu b2RlX2hhc2h0YWJsZSArDQo+ICsJCWlub2RlX2hhc2goY2ktPm1faW5vZGUtPmlfc2IsIGNpLT5t X2lub2RlLT5pX2lubyk7DQo+ICsNCj4gKwlobGlzdF9hZGRfaGVhZCgmY2ktPm1faGFzaCwgYik7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGtzbWJkX2lub2RlX3VuaGFzaChzdHJ1Y3Qga3Nt YmRfaW5vZGUgKmNpKQ0KPiArew0KPiArCXdyaXRlX2xvY2soJmlub2RlX2hhc2hfbG9jayk7DQo+ ICsJaGxpc3RfZGVsX2luaXQoJmNpLT5tX2hhc2gpOw0KPiArCXdyaXRlX3VubG9jaygmaW5vZGVf aGFzaF9sb2NrKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBrc21iZF9pbm9kZV9pbml0KHN0 cnVjdCBrc21iZF9pbm9kZSAqY2ksIHN0cnVjdCBrc21iZF9maWxlICpmcCkNCj4gK3sNCj4gKwlj aS0+bV9pbm9kZSA9IEZQX0lOT0RFKGZwKTsNCj4gKwlhdG9taWNfc2V0KCZjaS0+bV9jb3VudCwg MSk7DQo+ICsJYXRvbWljX3NldCgmY2ktPm9wX2NvdW50LCAwKTsNCj4gKwlhdG9taWNfc2V0KCZj aS0+c29wX2NvdW50LCAwKTsNCj4gKwljaS0+bV9mbGFncyA9IDA7DQo+ICsJY2ktPm1fZmF0dHIg PSAwOw0KPiArCUlOSVRfTElTVF9IRUFEKCZjaS0+bV9mcF9saXN0KTsNCj4gKwlJTklUX0xJU1Rf SEVBRCgmY2ktPm1fb3BfbGlzdCk7DQo+ICsJcndsb2NrX2luaXQoJmNpLT5tX2xvY2spOw0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGtzbWJkX2lub2RlICprc21i ZF9pbm9kZV9nZXQoc3RydWN0IGtzbWJkX2ZpbGUgKmZwKQ0KPiArew0KPiArCXN0cnVjdCBrc21i ZF9pbm9kZSAqY2ksICp0bXBjaTsNCj4gKwlpbnQgcmM7DQo+ICsNCj4gKwlyZWFkX2xvY2soJmlu b2RlX2hhc2hfbG9jayk7DQo+ICsJY2kgPSBrc21iZF9pbm9kZV9sb29rdXAoZnApOw0KPiArCXJl YWRfdW5sb2NrKCZpbm9kZV9oYXNoX2xvY2spOw0KPiArCWlmIChjaSkNCj4gKwkJcmV0dXJuIGNp Ow0KPiArDQo+ICsJY2kgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3NtYmRfaW5vZGUpLCBHRlBf S0VSTkVMKTsNCj4gKwlpZiAoIWNpKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCXJjID0g a3NtYmRfaW5vZGVfaW5pdChjaSwgZnApOw0KPiArCWlmIChyYykgew0KPiArCQlrc21iZF9lcnIo Imlub2RlIGluaXRpYWxpemVkIGZhaWxlZFxuIik7DQo+ICsJCWtmcmVlKGNpKTsNCj4gKwkJcmV0 dXJuIE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJd3JpdGVfbG9jaygmaW5vZGVfaGFzaF9sb2NrKTsN Cj4gKwl0bXBjaSA9IGtzbWJkX2lub2RlX2xvb2t1cChmcCk7DQo+ICsJaWYgKCF0bXBjaSkgew0K PiArCQlrc21iZF9pbm9kZV9oYXNoKGNpKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlrZnJlZShjaSk7 DQo+ICsJCWNpID0gdG1wY2k7DQo+ICsJfQ0KPiArCXdyaXRlX3VubG9jaygmaW5vZGVfaGFzaF9s b2NrKTsNCj4gKwlyZXR1cm4gY2k7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGtzbWJkX2lu b2RlX2ZyZWUoc3RydWN0IGtzbWJkX2lub2RlICpjaSkNCj4gK3sNCj4gKwlrc21iZF9pbm9kZV91 bmhhc2goY2kpOw0KPiArCWtmcmVlKGNpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQga3Nt YmRfaW5vZGVfcHV0KHN0cnVjdCBrc21iZF9pbm9kZSAqY2kpDQo+ICt7DQo+ICsJaWYgKGF0b21p Y19kZWNfYW5kX3Rlc3QoJmNpLT5tX2NvdW50KSkNCj4gKwkJa3NtYmRfaW5vZGVfZnJlZShjaSk7 DQo+ICt9DQo+ICsNCj4gK2ludCBfX2luaXQga3NtYmRfaW5vZGVfaGFzaF9pbml0KHZvaWQpDQo+ ICt7DQo+ICsJdW5zaWduZWQgaW50IGxvb3A7DQo+ICsJdW5zaWduZWQgbG9uZyBudW1lbnRyaWVz ID0gMTYzODQ7DQo+ICsJdW5zaWduZWQgbG9uZyBidWNrZXRzaXplID0gc2l6ZW9mKHN0cnVjdCBo bGlzdF9oZWFkKTsNCj4gKwl1bnNpZ25lZCBsb25nIHNpemU7DQo+ICsNCj4gKwlpbm9kZV9oYXNo X3NoaWZ0ID0gaWxvZzIobnVtZW50cmllcyk7DQo+ICsJaW5vZGVfaGFzaF9tYXNrID0gKDEgPDwg aW5vZGVfaGFzaF9zaGlmdCkgLSAxOw0KPiArDQo+ICsJc2l6ZSA9IGJ1Y2tldHNpemUgPDwgaW5v ZGVfaGFzaF9zaGlmdDsNCj4gKw0KPiArCS8qIGluaXQgbWFzdGVyIGZwIGhhc2ggdGFibGUgKi8N Cj4gKwlpbm9kZV9oYXNodGFibGUgPSB2bWFsbG9jKHNpemUpOw0KPiArCWlmICghaW5vZGVfaGFz aHRhYmxlKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWZvciAobG9vcCA9IDA7IGxv b3AgPCAoMVUgPDwgaW5vZGVfaGFzaF9zaGlmdCk7IGxvb3ArKykNCj4gKwkJSU5JVF9ITElTVF9I RUFEKCZpbm9kZV9oYXNodGFibGVbbG9vcF0pOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICt2b2lkIF9fZXhpdCBrc21iZF9yZWxlYXNlX2lub2RlX2hhc2godm9pZCkNCj4gK3sNCj4gKwl2 ZnJlZShpbm9kZV9oYXNodGFibGUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX2tzbWJk X2lub2RlX2Nsb3NlKHN0cnVjdCBrc21iZF9maWxlICpmcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGVu dHJ5ICpkaXIsICpkZW50cnk7DQo+ICsJc3RydWN0IGtzbWJkX2lub2RlICpjaSA9IGZwLT5mX2Np Ow0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGZpbGUgKmZpbHA7DQo+ICsNCj4gKwlmaWxwID0g ZnAtPmZpbHA7DQo+ICsJaWYgKGtzbWJkX3N0cmVhbV9mZChmcCkgJiYgKGNpLT5tX2ZsYWdzICYN Cj4gU19ERUxfT05fQ0xTX1NUUkVBTSkpIHsNCj4gKwkJY2ktPm1fZmxhZ3MgJj0gflNfREVMX09O X0NMU19TVFJFQU07DQo+ICsJCWVyciA9IGtzbWJkX3Zmc19yZW1vdmVfeGF0dHIoZmlscC0+Zl9w YXRoLmRlbnRyeSwNCj4gKwkJCQkJICAgICBmcC0+c3RyZWFtLm5hbWUpOw0KPiArCQlpZiAoZXJy KQ0KPiArCQkJa3NtYmRfZXJyKCJyZW1vdmUgeGF0dHIgZmFpbGVkIDogJXNcbiIsDQo+ICsJCQkJ ZnAtPnN0cmVhbS5uYW1lKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoYXRvbWljX2RlY19hbmRfdGVz dCgmY2ktPm1fY291bnQpKSB7DQo+ICsJCXdyaXRlX2xvY2soJmNpLT5tX2xvY2spOw0KPiArCQlp ZiAoY2ktPm1fZmxhZ3MgJiAoU19ERUxfT05fQ0xTIHwgU19ERUxfUEVORElORykpIHsNCj4gKwkJ CWRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7DQo+ICsJCQlkaXIgPSBkZW50cnktPmRfcGFy ZW50Ow0KPiArCQkJY2ktPm1fZmxhZ3MgJj0gfihTX0RFTF9PTl9DTFMgfCBTX0RFTF9QRU5ESU5H KTsNCj4gKwkJCXdyaXRlX3VubG9jaygmY2ktPm1fbG9jayk7DQo+ICsJCQlrc21iZF92ZnNfdW5s aW5rKGRpciwgZGVudHJ5KTsNCj4gKwkJCXdyaXRlX2xvY2soJmNpLT5tX2xvY2spOw0KPiArCQl9 DQo+ICsJCXdyaXRlX3VubG9jaygmY2ktPm1fbG9jayk7DQo+ICsNCj4gKwkJa3NtYmRfaW5vZGVf ZnJlZShjaSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX2tzbWJkX3JlbW92 ZV9kdXJhYmxlX2ZkKHN0cnVjdCBrc21iZF9maWxlICpmcCkNCj4gK3sNCj4gKwlpZiAoIUhBU19G SUxFX0lEKGZwLT5wZXJzaXN0ZW50X2lkKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJd3JpdGVf bG9jaygmZ2xvYmFsX2Z0LmxvY2spOw0KPiArCWlkcl9yZW1vdmUoZ2xvYmFsX2Z0LmlkciwgZnAt PnBlcnNpc3RlbnRfaWQpOw0KPiArCXdyaXRlX3VubG9jaygmZ2xvYmFsX2Z0LmxvY2spOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX2tzbWJkX3JlbW92ZV9mZChzdHJ1Y3Qga3NtYmRfZmls ZV90YWJsZSAqZnQsDQo+ICsJCQkgICAgICBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnApDQo+ICt7DQo+ ICsJaWYgKCFIQVNfRklMRV9JRChmcC0+dm9sYXRpbGVfaWQpKQ0KPiArCQlyZXR1cm47DQo+ICsN Cj4gKwl3cml0ZV9sb2NrKCZmcC0+Zl9jaS0+bV9sb2NrKTsNCj4gKwlsaXN0X2RlbF9pbml0KCZm cC0+bm9kZSk7DQo+ICsJd3JpdGVfdW5sb2NrKCZmcC0+Zl9jaS0+bV9sb2NrKTsNCj4gKw0KPiAr CXdyaXRlX2xvY2soJmZ0LT5sb2NrKTsNCj4gKwlpZHJfcmVtb3ZlKGZ0LT5pZHIsIGZwLT52b2xh dGlsZV9pZCk7DQo+ICsJd3JpdGVfdW5sb2NrKCZmdC0+bG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIF9fa3NtYmRfY2xvc2VfZmQoc3RydWN0IGtzbWJkX2ZpbGVfdGFibGUgKmZ0LA0K PiArCQkJICAgICBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnApDQo+ICt7DQo+ICsJc3RydWN0IGZpbGUg KmZpbHA7DQo+ICsNCj4gKwlmZF9saW1pdF9jbG9zZSgpOw0KPiArCV9fa3NtYmRfcmVtb3ZlX2R1 cmFibGVfZmQoZnApOw0KPiArCV9fa3NtYmRfcmVtb3ZlX2ZkKGZ0LCBmcCk7DQo+ICsNCj4gKwlj bG9zZV9pZF9kZWxfb3Bsb2NrKGZwKTsNCj4gKwlmaWxwID0gZnAtPmZpbHA7DQo+ICsNCj4gKwlf X2tzbWJkX2lub2RlX2Nsb3NlKGZwKTsNCj4gKwlpZiAoIUlTX0VSUl9PUl9OVUxMKGZpbHApKQ0K PiArCQlmcHV0KGZpbHApOw0KPiArCWtmcmVlKGZwLT5maWxlbmFtZSk7DQo+ICsJaWYgKGtzbWJk X3N0cmVhbV9mZChmcCkpDQo+ICsJCWtmcmVlKGZwLT5zdHJlYW0ubmFtZSk7DQo+ICsJa3NtYmRf ZnJlZV9maWxlX3N0cnVjdChmcCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qga3NtYmRf ZmlsZSAqa3NtYmRfZnBfZ2V0KHN0cnVjdCBrc21iZF9maWxlICpmcCkNCj4gK3sNCj4gKwlpZiAo IWF0b21pY19pbmNfbm90X3plcm8oJmZwLT5yZWZjb3VudCkpDQo+ICsJCXJldHVybiBOVUxMOw0K PiArCXJldHVybiBmcDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBrc21iZF9maWxlICpf X2tzbWJkX2xvb2t1cF9mZChzdHJ1Y3Qga3NtYmRfZmlsZV90YWJsZSAqZnQsDQo+ICsJCQkJCSAg ICB1bnNpZ25lZCBpbnQgaWQpDQo+ICt7DQo+ICsJYm9vbCB1bmNsYWltZWQgPSB0cnVlOw0KPiAr CXN0cnVjdCBrc21iZF9maWxlICpmcDsNCj4gKw0KPiArCXJlYWRfbG9jaygmZnQtPmxvY2spOw0K PiArCWZwID0gaWRyX2ZpbmQoZnQtPmlkciwgaWQpOw0KPiArCWlmIChmcCkNCj4gKwkJZnAgPSBr c21iZF9mcF9nZXQoZnApOw0KPiArDQo+ICsJaWYgKGZwICYmIGZwLT5mX2NpKSB7DQo+ICsJCXJl YWRfbG9jaygmZnAtPmZfY2ktPm1fbG9jayk7DQo+ICsJCXVuY2xhaW1lZCA9IGxpc3RfZW1wdHko JmZwLT5ub2RlKTsNCj4gKwkJcmVhZF91bmxvY2soJmZwLT5mX2NpLT5tX2xvY2spOw0KPiArCX0N Cj4gKwlyZWFkX3VubG9jaygmZnQtPmxvY2spOw0KPiArDQo+ICsJaWYgKGZwICYmIHVuY2xhaW1l ZCkgew0KPiArCQlhdG9taWNfZGVjKCZmcC0+cmVmY291bnQpOw0KPiArCQlyZXR1cm4gTlVMTDsN Cj4gKwl9DQo+ICsJcmV0dXJuIGZwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBfX3B1dF9m ZF9maW5hbChzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywNCj4gKwkJCSAgIHN0cnVjdCBrc21iZF9m aWxlICpmcCkNCj4gK3sNCj4gKwlfX2tzbWJkX2Nsb3NlX2ZkKCZ3b3JrLT5zZXNzLT5maWxlX3Rh YmxlLCBmcCk7DQo+ICsJYXRvbWljX2RlYygmd29yay0+Y29ubi0+c3RhdHMub3Blbl9maWxlc19j b3VudCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHNldF9jbG9zZV9zdGF0ZV9ibG9ja2Vk X3dvcmtzKHN0cnVjdCBrc21iZF9maWxlICpmcCkNCj4gK3sNCj4gKwlzdHJ1Y3Qga3NtYmRfd29y ayAqY2FuY2VsX3dvcmssICpjdG1wOw0KPiArDQo+ICsJc3Bpbl9sb2NrKCZmcC0+Zl9sb2NrKTsN Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2FuY2VsX3dvcmssIGN0bXAsICZmcC0+Ymxv Y2tlZF93b3JrcywNCj4gKwkJCWZwX2VudHJ5KSB7DQo+ICsJCWxpc3RfZGVsKCZjYW5jZWxfd29y ay0+ZnBfZW50cnkpOw0KPiArCQljYW5jZWxfd29yay0+c3RhdGUgPSBLU01CRF9XT1JLX0NMT1NF RDsNCj4gKwkJY2FuY2VsX3dvcmstPmNhbmNlbF9mbihjYW5jZWxfd29yay0+Y2FuY2VsX2FyZ3Yp Ow0KPiArCX0NCj4gKwlzcGluX3VubG9jaygmZnAtPmZfbG9jayk7DQo+ICt9DQo+ICsNCj4gK2lu dCBrc21iZF9jbG9zZV9mZChzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywgdW5zaWduZWQgaW50IGlk KQ0KPiArew0KPiArCXN0cnVjdCBrc21iZF9maWxlCSpmcDsNCj4gKwlzdHJ1Y3Qga3NtYmRfZmls ZV90YWJsZQkqZnQ7DQo+ICsNCj4gKwlpZiAoIUhBU19GSUxFX0lEKGlkKSkNCj4gKwkJcmV0dXJu IDA7DQo+ICsNCj4gKwlmdCA9ICZ3b3JrLT5zZXNzLT5maWxlX3RhYmxlOw0KPiArCXJlYWRfbG9j aygmZnQtPmxvY2spOw0KPiArCWZwID0gaWRyX2ZpbmQoZnQtPmlkciwgaWQpOw0KPiArCWlmIChm cCkgew0KPiArCQlzZXRfY2xvc2Vfc3RhdGVfYmxvY2tlZF93b3JrcyhmcCk7DQo+ICsNCj4gKwkJ aWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZmcC0+cmVmY291bnQpKQ0KPiArCQkJZnAgPSBOVUxM Ow0KPiArCX0NCj4gKwlyZWFkX3VubG9jaygmZnQtPmxvY2spOw0KPiArDQo+ICsJaWYgKCFmcCkN Cj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlfX3B1dF9mZF9maW5hbCh3b3JrLCBmcCk7 DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQga3NtYmRfZmRfcHV0KHN0cnVjdCBr c21iZF93b3JrICp3b3JrLA0KPiArCQkgIHN0cnVjdCBrc21iZF9maWxlICpmcCkNCj4gK3sNCj4g KwlpZiAoIWZwKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rl c3QoJmZwLT5yZWZjb3VudCkpDQo+ICsJCXJldHVybjsNCj4gKwlfX3B1dF9mZF9maW5hbCh3b3Jr LCBmcCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIF9fc2FuaXR5X2NoZWNrKHN0cnVjdCBr c21iZF90cmVlX2Nvbm5lY3QgKnRjb24sDQo+ICsJCQkgICBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAp DQo+ICt7DQo+ICsJaWYgKCFmcCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCWlmIChmcC0+dGNv biAhPSB0Y29uKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ ICsNCj4gK3N0cnVjdCBrc21iZF9maWxlICprc21iZF9sb29rdXBfZm9yZWlnbl9mZChzdHJ1Y3Qg a3NtYmRfd29yayAqd29yaywNCj4gKwkJCQkJICAgdW5zaWduZWQgaW50IGlkKQ0KPiArew0KPiAr CXJldHVybiBfX2tzbWJkX2xvb2t1cF9mZCgmd29yay0+c2Vzcy0+ZmlsZV90YWJsZSwgaWQpOw0K PiArfQ0KPiArDQo+ICtzdHJ1Y3Qga3NtYmRfZmlsZSAqa3NtYmRfbG9va3VwX2ZkX2Zhc3Qoc3Ry dWN0IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCQkJCXVuc2lnbmVkIGludCBpZCkNCj4gK3sNCj4g KwlzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAgPSBfX2tzbWJkX2xvb2t1cF9mZCgmd29yay0+c2Vzcy0N Cj4gPmZpbGVfdGFibGUsIGlkKTsNCj4gKw0KPiArCWlmIChfX3Nhbml0eV9jaGVjayh3b3JrLT50 Y29uLCBmcCkpDQo+ICsJCXJldHVybiBmcDsNCj4gKw0KPiArCWtzbWJkX2ZkX3B1dCh3b3JrLCBm cCk7DQo+ICsJcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gK3N0cnVjdCBrc21iZF9maWxlICpr c21iZF9sb29rdXBfZmRfc2xvdyhzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywNCj4gKwkJCQkJdW5z aWduZWQgaW50IGlkLA0KPiArCQkJCQl1bnNpZ25lZCBpbnQgcGlkKQ0KPiArew0KPiArCXN0cnVj dCBrc21iZF9maWxlICpmcDsNCj4gKw0KPiArCWlmICghSEFTX0ZJTEVfSUQoaWQpKSB7DQo+ICsJ CWlkID0gd29yay0+Y29tcG91bmRfZmlkOw0KPiArCQlwaWQgPSB3b3JrLT5jb21wb3VuZF9wZmlk Ow0KPiArCX0NCj4gKw0KPiArCWlmICghSEFTX0ZJTEVfSUQoaWQpKQ0KPiArCQlyZXR1cm4gTlVM TDsNCj4gKw0KPiArCWZwID0gX19rc21iZF9sb29rdXBfZmQoJndvcmstPnNlc3MtPmZpbGVfdGFi bGUsIGlkKTsNCj4gKwlpZiAoIV9fc2FuaXR5X2NoZWNrKHdvcmstPnRjb24sIGZwKSkgew0KPiAr CQlrc21iZF9mZF9wdXQod29yaywgZnApOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsJ aWYgKGZwLT5wZXJzaXN0ZW50X2lkICE9IHBpZCkgew0KPiArCQlrc21iZF9mZF9wdXQod29yaywg ZnApOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsJcmV0dXJuIGZwOw0KPiArfQ0KPiAr DQo+ICtzdHJ1Y3Qga3NtYmRfZmlsZSAqa3NtYmRfbG9va3VwX2R1cmFibGVfZmQodW5zaWduZWQg bG9uZyBsb25nIGlkKQ0KPiArew0KPiArCXJldHVybiBfX2tzbWJkX2xvb2t1cF9mZCgmZ2xvYmFs X2Z0LCBpZCk7DQo+ICt9DQo+ICsNCj4gK2ludCBrc21iZF9jbG9zZV9mZF9hcHBfaWQoc3RydWN0 IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCQkgIGNoYXIgKmFwcF9pZCkNCj4gK3sNCj4gKwlzdHJ1 Y3Qga3NtYmRfZmlsZQkqZnAgPSBOVUxMOw0KPiArCXVuc2lnbmVkIGludAkJaWQ7DQo+ICsNCj4g KwlyZWFkX2xvY2soJmdsb2JhbF9mdC5sb2NrKTsNCj4gKwlpZHJfZm9yX2VhY2hfZW50cnkoZ2xv YmFsX2Z0LmlkciwgZnAsIGlkKSB7DQo+ICsJCWlmICghbWVtY21wKGZwLT5hcHBfaW5zdGFuY2Vf aWQsDQo+ICsJCQkgICAgYXBwX2lkLA0KPiArCQkJICAgIFNNQjJfQ1JFQVRFX0dVSURfU0laRSkp IHsNCj4gKwkJCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZnAtPnJlZmNvdW50KSkNCj4gKwkJ CQlmcCA9IE5VTEw7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArCX0NCj4gKwlyZWFkX3VubG9j aygmZ2xvYmFsX2Z0LmxvY2spOw0KPiArDQo+ICsJaWYgKCFmcCkNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsNCj4gKwlfX3B1dF9mZF9maW5hbCh3b3JrLCBmcCk7DQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+ICsNCj4gK3N0cnVjdCBrc21iZF9maWxlICprc21iZF9sb29rdXBfZmRfY2d1aWQoY2hh ciAqY2d1aWQpDQo+ICt7DQo+ICsJc3RydWN0IGtzbWJkX2ZpbGUJKmZwID0gTlVMTDsNCj4gKwl1 bnNpZ25lZCBpbnQJCWlkOw0KPiArDQo+ICsJcmVhZF9sb2NrKCZnbG9iYWxfZnQubG9jayk7DQo+ ICsJaWRyX2Zvcl9lYWNoX2VudHJ5KGdsb2JhbF9mdC5pZHIsIGZwLCBpZCkgew0KPiArCQlpZiAo IW1lbWNtcChmcC0+Y3JlYXRlX2d1aWQsDQo+ICsJCQkgICAgY2d1aWQsDQo+ICsJCQkgICAgU01C Ml9DUkVBVEVfR1VJRF9TSVpFKSkgew0KPiArCQkJZnAgPSBrc21iZF9mcF9nZXQoZnApOw0KPiAr CQkJYnJlYWs7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmVhZF91bmxvY2soJmdsb2JhbF9mdC5sb2Nr KTsNCj4gKw0KPiArCXJldHVybiBmcDsNCj4gK30NCj4gKw0KPiArc3RydWN0IGtzbWJkX2ZpbGUg KmtzbWJkX2xvb2t1cF9mZF9maWxlbmFtZShzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywNCj4gKwkJ CQkJICAgIGNoYXIgKmZpbGVuYW1lKQ0KPiArew0KPiArCXN0cnVjdCBrc21iZF9maWxlCSpmcCA9 IE5VTEw7DQo+ICsJdW5zaWduZWQgaW50CQlpZDsNCj4gKw0KPiArCXJlYWRfbG9jaygmd29yay0+ c2Vzcy0+ZmlsZV90YWJsZS5sb2NrKTsNCj4gKwlpZHJfZm9yX2VhY2hfZW50cnkod29yay0+c2Vz cy0+ZmlsZV90YWJsZS5pZHIsIGZwLCBpZCkgew0KPiArCQlpZiAoIXN0cmNtcChmcC0+ZmlsZW5h bWUsIGZpbGVuYW1lKSkgew0KPiArCQkJZnAgPSBrc21iZF9mcF9nZXQoZnApOw0KPiArCQkJYnJl YWs7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmVhZF91bmxvY2soJndvcmstPnNlc3MtPmZpbGVfdGFi bGUubG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gZnA7DQo+ICt9DQo+ICsNCj4gK3N0cnVjdCBrc21i ZF9maWxlICprc21iZF9sb29rdXBfZmRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkNCj4gK3sN Cj4gKwlzdHJ1Y3Qga3NtYmRfZmlsZQkqbGZwOw0KPiArCXN0cnVjdCBrc21iZF9pbm9kZQkqY2k7 DQo+ICsJc3RydWN0IGxpc3RfaGVhZAkqY3VyOw0KPiArDQo+ICsJY2kgPSBrc21iZF9pbm9kZV9s b29rdXBfYnlfdmZzaW5vZGUoaW5vZGUpOw0KPiArCWlmICghY2kpDQo+ICsJCXJldHVybiBOVUxM Ow0KPiArDQo+ICsJcmVhZF9sb2NrKCZjaS0+bV9sb2NrKTsNCj4gKwlsaXN0X2Zvcl9lYWNoKGN1 ciwgJmNpLT5tX2ZwX2xpc3QpIHsNCj4gKwkJbGZwID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBr c21iZF9maWxlLCBub2RlKTsNCj4gKwkJaWYgKGlub2RlID09IEZQX0lOT0RFKGxmcCkpIHsNCj4g KwkJCWF0b21pY19kZWMoJmNpLT5tX2NvdW50KTsNCj4gKwkJCXJlYWRfdW5sb2NrKCZjaS0+bV9s b2NrKTsNCj4gKwkJCXJldHVybiBsZnA7DQo+ICsJCX0NCj4gKwl9DQo+ICsJYXRvbWljX2RlYygm Y2ktPm1fY291bnQpOw0KPiArCXJlYWRfdW5sb2NrKCZjaS0+bV9sb2NrKTsNCj4gKwlyZXR1cm4g TlVMTDsNCj4gK30NCj4gKw0KPiArI2RlZmluZSBPUEVOX0lEX1RZUEVfVk9MQVRJTEVfSUQJKDAp DQo+ICsjZGVmaW5lIE9QRU5fSURfVFlQRV9QRVJTSVNURU5UX0lECSgxKQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBfX29wZW5faWRfc2V0KHN0cnVjdCBrc21iZF9maWxlICpmcCwgdW5zaWduZWQgaW50 IGlkLCBpbnQgdHlwZSkNCj4gK3sNCj4gKwlpZiAodHlwZSA9PSBPUEVOX0lEX1RZUEVfVk9MQVRJ TEVfSUQpDQo+ICsJCWZwLT52b2xhdGlsZV9pZCA9IGlkOw0KPiArCWlmICh0eXBlID09IE9QRU5f SURfVFlQRV9QRVJTSVNURU5UX0lEKQ0KPiArCQlmcC0+cGVyc2lzdGVudF9pZCA9IGlkOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IF9fb3Blbl9pZChzdHJ1Y3Qga3NtYmRfZmlsZV90YWJsZSAq ZnQsDQo+ICsJCSAgICAgc3RydWN0IGtzbWJkX2ZpbGUgKmZwLA0KPiArCQkgICAgIGludCB0eXBl KQ0KPiArew0KPiArCXVuc2lnbmVkIGludAkJaWQgPSAwOw0KPiArCWludAkJCXJldDsNCj4gKw0K PiArCWlmICh0eXBlID09IE9QRU5fSURfVFlQRV9WT0xBVElMRV9JRCAmJiBmZF9saW1pdF9kZXBs ZXRlZCgpKSB7DQo+ICsJCV9fb3Blbl9pZF9zZXQoZnAsIEtTTUJEX05PX0ZJRCwgdHlwZSk7DQo+ ICsJCXJldHVybiAtRU1GSUxFOw0KPiArCX0NCj4gKw0KPiArCWlkcl9wcmVsb2FkKEdGUF9LRVJO RUwpOw0KPiArCXdyaXRlX2xvY2soJmZ0LT5sb2NrKTsNCj4gKwlyZXQgPSBpZHJfYWxsb2NfY3lj bGljKGZ0LT5pZHIsIGZwLCAwLCBJTlRfTUFYLCBHRlBfTk9XQUlUKTsNCj4gKwlpZiAocmV0ID49 IDApIHsNCj4gKwkJaWQgPSByZXQ7DQo+ICsJCXJldCA9IDA7DQo+ICsJfSBlbHNlIHsNCj4gKwkJ aWQgPSBLU01CRF9OT19GSUQ7DQo+ICsJCWZkX2xpbWl0X2Nsb3NlKCk7DQo+ICsJfQ0KPiArDQo+ ICsJX19vcGVuX2lkX3NldChmcCwgaWQsIHR5cGUpOw0KPiArCXdyaXRlX3VubG9jaygmZnQtPmxv Y2spOw0KPiArCWlkcl9wcmVsb2FkX2VuZCgpOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsN Cj4gK3Vuc2lnbmVkIGludCBrc21iZF9vcGVuX2R1cmFibGVfZmQoc3RydWN0IGtzbWJkX2ZpbGUg KmZwKQ0KPiArew0KPiArCV9fb3Blbl9pZCgmZ2xvYmFsX2Z0LCBmcCwgT1BFTl9JRF9UWVBFX1BF UlNJU1RFTlRfSUQpOw0KPiArCXJldHVybiBmcC0+cGVyc2lzdGVudF9pZDsNCj4gK30NCj4gKw0K PiArc3RydWN0IGtzbWJkX2ZpbGUgKmtzbWJkX29wZW5fZmQoc3RydWN0IGtzbWJkX3dvcmsgKndv cmssDQo+ICsJCQkJIHN0cnVjdCBmaWxlICpmaWxwKQ0KPiArew0KPiArCXN0cnVjdCBrc21iZF9m aWxlCSpmcDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJZnAgPSBrc21iZF9hbGxvY19maWxlX3N0 cnVjdCgpOw0KPiArCWlmICghZnApIHsNCj4gKwkJa3NtYmRfZXJyKCJGYWlsZWQgdG8gYWxsb2Nh dGUgbWVtb3J5XG4iKTsNCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsJfQ0KPiAr DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmZwLT5ibG9ja2VkX3dvcmtzKTsNCj4gKwlJTklUX0xJU1Rf SEVBRCgmZnAtPm5vZGUpOw0KPiArCXNwaW5fbG9ja19pbml0KCZmcC0+Zl9sb2NrKTsNCj4gKwlh dG9taWNfc2V0KCZmcC0+cmVmY291bnQsIDEpOw0KPiArDQo+ICsJZnAtPmZpbHAJCT0gZmlscDsN Cj4gKwlmcC0+Y29ubgkJPSB3b3JrLT5zZXNzLT5jb25uOw0KPiArCWZwLT50Y29uCQk9IHdvcmst PnRjb247DQo+ICsJZnAtPnZvbGF0aWxlX2lkCQk9IEtTTUJEX05PX0ZJRDsNCj4gKwlmcC0+cGVy c2lzdGVudF9pZAk9IEtTTUJEX05PX0ZJRDsNCj4gKwlmcC0+Zl9jaQkJPSBrc21iZF9pbm9kZV9n ZXQoZnApOw0KPiArDQo+ICsJaWYgKCFmcC0+Zl9jaSkgew0KPiArCQlrc21iZF9mcmVlX2ZpbGVf c3RydWN0KGZwKTsNCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ICsJfQ0KPiArDQo+ ICsJcmV0ID0gX19vcGVuX2lkKCZ3b3JrLT5zZXNzLT5maWxlX3RhYmxlLCBmcCwNCj4gT1BFTl9J RF9UWVBFX1ZPTEFUSUxFX0lEKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWtzbWJkX2lub2RlX3B1 dChmcC0+Zl9jaSk7DQo+ICsJCWtzbWJkX2ZyZWVfZmlsZV9zdHJ1Y3QoZnApOw0KPiArCQlyZXR1 cm4gRVJSX1BUUihyZXQpOw0KPiArCX0NCj4gKw0KPiArCWF0b21pY19pbmMoJndvcmstPmNvbm4t PnN0YXRzLm9wZW5fZmlsZXNfY291bnQpOw0KPiArCXJldHVybiBmcDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGlubGluZSBib29sIGlzX3JlY29ubmVjdGFibGUoc3RydWN0IGtzbWJkX2ZpbGUgKmZw KQ0KPiArew0KPiArCXN0cnVjdCBvcGxvY2tfaW5mbyAqb3BpbmZvID0gb3BpbmZvX2dldChmcCk7 DQo+ICsJYm9vbCByZWNvbm4gPSBmYWxzZTsNCj4gKw0KPiArCWlmICghb3BpbmZvKQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlpZiAob3BpbmZvLT5vcF9zdGF0ZSAhPSBPUExPQ0tfU1RB VEVfTk9ORSkgew0KPiArCQlvcGluZm9fcHV0KG9waW5mbyk7DQo+ICsJCXJldHVybiBmYWxzZTsN Cj4gKwl9DQo+ICsNCj4gKwlpZiAoZnAtPmlzX3Jlc2lsaWVudCB8fCBmcC0+aXNfcGVyc2lzdGVu dCkNCj4gKwkJcmVjb25uID0gdHJ1ZTsNCj4gKwllbHNlIGlmIChmcC0+aXNfZHVyYWJsZSAmJiBv cGluZm8tPmlzX2xlYXNlICYmDQo+ICsJCQlvcGluZm8tPm9fbGVhc2UtPnN0YXRlICYNCj4gU01C Ml9MRUFTRV9IQU5ETEVfQ0FDSElOR19MRSkNCj4gKwkJcmVjb25uID0gdHJ1ZTsNCj4gKw0KPiAr CWVsc2UgaWYgKGZwLT5pc19kdXJhYmxlICYmIG9waW5mby0+bGV2ZWwgPT0NCj4gU01CMl9PUExP Q0tfTEVWRUxfQkFUQ0gpDQo+ICsJCXJlY29ubiA9IHRydWU7DQo+ICsNCj4gKwlvcGluZm9fcHV0 KG9waW5mbyk7DQo+ICsJcmV0dXJuIHJlY29ubjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0K PiArX19jbG9zZV9maWxlX3RhYmxlX2lkcyhzdHJ1Y3Qga3NtYmRfZmlsZV90YWJsZSAqZnQsDQo+ ICsJCSAgICAgICBzdHJ1Y3Qga3NtYmRfdHJlZV9jb25uZWN0ICp0Y29uLA0KPiArCQkgICAgICAg Ym9vbCAoKnNraXApKHN0cnVjdCBrc21iZF90cmVlX2Nvbm5lY3QgKnRjb24sDQo+ICsJCQkJICAg IHN0cnVjdCBrc21iZF9maWxlICpmcCkpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50CQkJaWQ7DQo+ ICsJc3RydWN0IGtzbWJkX2ZpbGUJCSpmcDsNCj4gKwlpbnQJCQkJbnVtID0gMDsNCj4gKw0KPiAr CWlkcl9mb3JfZWFjaF9lbnRyeShmdC0+aWRyLCBmcCwgaWQpIHsNCj4gKwkJaWYgKHNraXAodGNv biwgZnApKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJc2V0X2Nsb3NlX3N0YXRlX2Jsb2Nr ZWRfd29ya3MoZnApOw0KPiArDQo+ICsJCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZnAtPnJl ZmNvdW50KSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQlfX2tzbWJkX2Nsb3NlX2ZkKGZ0LCBmcCk7 DQo+ICsJCW51bSsrOw0KPiArCX0NCj4gKwlyZXR1cm4gbnVtOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgYm9vbCB0cmVlX2Nvbm5fZmRfY2hlY2soc3RydWN0IGtzbWJkX3RyZWVfY29ubmVjdCAqdGNv biwNCj4gKwkJCSAgICAgICBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnApDQo+ICt7DQo+ICsJcmV0dXJu IGZwLT50Y29uICE9IHRjb247DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIHNlc3Npb25fZmRf Y2hlY2soc3RydWN0IGtzbWJkX3RyZWVfY29ubmVjdCAqdGNvbiwNCj4gKwkJCSAgICAgc3RydWN0 IGtzbWJkX2ZpbGUgKmZwKQ0KPiArew0KPiArCWlmICghaXNfcmVjb25uZWN0YWJsZShmcCkpDQo+ ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCWZwLT5jb25uID0gTlVMTDsNCj4gKwlmcC0+dGNv biA9IE5VTEw7DQo+ICsJZnAtPnZvbGF0aWxlX2lkID0gS1NNQkRfTk9fRklEOw0KPiArCXJldHVy biB0cnVlOw0KPiArfQ0KPiArDQo+ICt2b2lkIGtzbWJkX2Nsb3NlX3RyZWVfY29ubl9mZHMoc3Ry dWN0IGtzbWJkX3dvcmsgKndvcmspDQo+ICt7DQo+ICsJaW50IG51bSA9IF9fY2xvc2VfZmlsZV90 YWJsZV9pZHMoJndvcmstPnNlc3MtPmZpbGVfdGFibGUsDQo+ICsJCQkJCSB3b3JrLT50Y29uLA0K PiArCQkJCQkgdHJlZV9jb25uX2ZkX2NoZWNrKTsNCj4gKw0KPiArCWF0b21pY19zdWIobnVtLCAm d29yay0+Y29ubi0+c3RhdHMub3Blbl9maWxlc19jb3VudCk7DQo+ICt9DQo+ICsNCj4gK3ZvaWQg a3NtYmRfY2xvc2Vfc2Vzc2lvbl9mZHMoc3RydWN0IGtzbWJkX3dvcmsgKndvcmspDQo+ICt7DQo+ ICsJaW50IG51bSA9IF9fY2xvc2VfZmlsZV90YWJsZV9pZHMoJndvcmstPnNlc3MtPmZpbGVfdGFi bGUsDQo+ICsJCQkJCSB3b3JrLT50Y29uLA0KPiArCQkJCQkgc2Vzc2lvbl9mZF9jaGVjayk7DQo+ ICsNCj4gKwlhdG9taWNfc3ViKG51bSwgJndvcmstPmNvbm4tPnN0YXRzLm9wZW5fZmlsZXNfY291 bnQpOw0KPiArfQ0KPiArDQo+ICtpbnQga3NtYmRfaW5pdF9nbG9iYWxfZmlsZV90YWJsZSh2b2lk KQ0KPiArew0KPiArCXJldHVybiBrc21iZF9pbml0X2ZpbGVfdGFibGUoJmdsb2JhbF9mdCk7DQo+ ICt9DQo+ICsNCj4gK3ZvaWQga3NtYmRfZnJlZV9nbG9iYWxfZmlsZV90YWJsZSh2b2lkKQ0KPiAr ew0KPiArCXN0cnVjdCBrc21iZF9maWxlCSpmcCA9IE5VTEw7DQo+ICsJdW5zaWduZWQgaW50CQlp ZDsNCj4gKw0KPiArCWlkcl9mb3JfZWFjaF9lbnRyeShnbG9iYWxfZnQuaWRyLCBmcCwgaWQpIHsN Cj4gKwkJX19rc21iZF9yZW1vdmVfZHVyYWJsZV9mZChmcCk7DQo+ICsJCWtzbWJkX2ZyZWVfZmls ZV9zdHJ1Y3QoZnApOw0KPiArCX0NCj4gKw0KPiArCWtzbWJkX2Rlc3Ryb3lfZmlsZV90YWJsZSgm Z2xvYmFsX2Z0KTsNCj4gK30NCj4gKw0KPiAraW50IGtzbWJkX3Jlb3Blbl9kdXJhYmxlX2ZkKHN0 cnVjdCBrc21iZF93b3JrICp3b3JrLA0KPiArCQkJICAgIHN0cnVjdCBrc21iZF9maWxlICpmcCkN Cj4gK3sNCj4gKwlpZiAoIWZwLT5pc19kdXJhYmxlIHx8IGZwLT5jb25uIHx8IGZwLT50Y29uKSB7 DQo+ICsJCWtzbWJkX2VycigiSW52YWxpZCBkdXJhYmxlIGZkIFslcDolcF1cbiIsDQo+ICsJCQkJ ZnAtPmNvbm4sIGZwLT50Y29uKTsNCj4gKwkJcmV0dXJuIC1FQkFERjsNCj4gKwl9DQo+ICsNCj4g KwlpZiAoSEFTX0ZJTEVfSUQoZnAtPnZvbGF0aWxlX2lkKSkgew0KPiArCQlrc21iZF9lcnIoIlN0 aWxsIGluIHVzZSBkdXJhYmxlIGZkOiAldVxuIiwgZnAtPnZvbGF0aWxlX2lkKTsNCj4gKwkJcmV0 dXJuIC1FQkFERjsNCj4gKwl9DQo+ICsNCj4gKwlmcC0+Y29ubiA9IHdvcmstPnNlc3MtPmNvbm47 DQo+ICsJZnAtPnRjb24gPSB3b3JrLT50Y29uOw0KPiArDQo+ICsJX19vcGVuX2lkKCZ3b3JrLT5z ZXNzLT5maWxlX3RhYmxlLCBmcCwNCj4gT1BFTl9JRF9UWVBFX1ZPTEFUSUxFX0lEKTsNCj4gKwlp ZiAoIUhBU19GSUxFX0lEKGZwLT52b2xhdGlsZV9pZCkpIHsNCj4gKwkJZnAtPmNvbm4gPSBOVUxM Ow0KPiArCQlmcC0+dGNvbiA9IE5VTEw7DQo+ICsJCXJldHVybiAtRUJBREY7DQo+ICsJfQ0KPiAr CXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBjbG9zZV9mZF9saXN0KHN0cnVj dCBrc21iZF93b3JrICp3b3JrLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQ0KPiArew0KPiArCXdo aWxlICghbGlzdF9lbXB0eShoZWFkKSkgew0KPiArCQlzdHJ1Y3Qga3NtYmRfZmlsZSAqZnA7DQo+ ICsNCj4gKwkJZnAgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBrc21iZF9maWxlLCBu b2RlKTsNCj4gKwkJbGlzdF9kZWxfaW5pdCgmZnAtPm5vZGUpOw0KPiArDQo+ICsJCV9fa3NtYmRf Y2xvc2VfZmQoJndvcmstPnNlc3MtPmZpbGVfdGFibGUsIGZwKTsNCj4gKwl9DQo+ICt9DQo+ICsN Cj4gK2ludCBrc21iZF9jbG9zZV9pbm9kZV9mZHMoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIHN0 cnVjdCBpbm9kZQ0KPiAqaW5vZGUpDQo+ICt7DQo+ICsJc3RydWN0IGtzbWJkX2lub2RlICpjaTsN Cj4gKwlib29sIHVubGlua2VkID0gdHJ1ZTsNCj4gKwlzdHJ1Y3Qga3NtYmRfZmlsZSAqZnAsICpm cHRtcDsNCj4gKwlMSVNUX0hFQUQoZGlzcG9zZSk7DQo+ICsNCj4gKwljaSA9IGtzbWJkX2lub2Rl X2xvb2t1cF9ieV92ZnNpbm9kZShpbm9kZSk7DQo+ICsJaWYgKCFjaSkNCj4gKwkJcmV0dXJuIHRy dWU7DQo+ICsNCj4gKwlpZiAoY2ktPm1fZmxhZ3MgJiAoU19ERUxfT05fQ0xTIHwgU19ERUxfUEVO RElORykpDQo+ICsJCXVubGlua2VkID0gZmFsc2U7DQo+ICsNCj4gKwl3cml0ZV9sb2NrKCZjaS0+ bV9sb2NrKTsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnAsIGZwdG1wLCAmY2ktPm1f ZnBfbGlzdCwgbm9kZSkgew0KPiArCQlpZiAoZnAtPmNvbm4pDQo+ICsJCQljb250aW51ZTsNCj4g Kw0KPiArCQlsaXN0X2RlbCgmZnAtPm5vZGUpOw0KPiArCQlsaXN0X2FkZCgmZnAtPm5vZGUsICZk aXNwb3NlKTsNCj4gKwl9DQo+ICsJYXRvbWljX2RlYygmY2ktPm1fY291bnQpOw0KPiArCXdyaXRl X3VubG9jaygmY2ktPm1fbG9jayk7DQo+ICsNCj4gKwljbG9zZV9mZF9saXN0KHdvcmssICZkaXNw b3NlKTsNCj4gKwlyZXR1cm4gdW5saW5rZWQ7DQo+ICt9DQo+ICsNCj4gK2ludCBrc21iZF9maWxl X3RhYmxlX2ZsdXNoKHN0cnVjdCBrc21iZF93b3JrICp3b3JrKQ0KPiArew0KPiArCXN0cnVjdCBr c21iZF9maWxlCSpmcCA9IE5VTEw7DQo+ICsJdW5zaWduZWQgaW50CQlpZDsNCj4gKwlpbnQJCQly ZXQ7DQo+ICsNCj4gKwlyZWFkX2xvY2soJndvcmstPnNlc3MtPmZpbGVfdGFibGUubG9jayk7DQo+ ICsJaWRyX2Zvcl9lYWNoX2VudHJ5KHdvcmstPnNlc3MtPmZpbGVfdGFibGUuaWRyLCBmcCwgaWQp IHsNCj4gKwkJcmV0ID0ga3NtYmRfdmZzX2ZzeW5jKHdvcmssIGZwLT52b2xhdGlsZV9pZCwNCj4g S1NNQkRfTk9fRklEKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKwly ZWFkX3VubG9jaygmd29yay0+c2Vzcy0+ZmlsZV90YWJsZS5sb2NrKTsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtpbnQga3NtYmRfaW5pdF9maWxlX3RhYmxlKHN0cnVjdCBrc21iZF9m aWxlX3RhYmxlICpmdCkNCj4gK3sNCj4gKwlmdC0+aWRyID0ga3NtYmRfYWxsb2Moc2l6ZW9mKHN0 cnVjdCBpZHIpKTsNCj4gKwlpZiAoIWZ0LT5pZHIpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiAr DQo+ICsJaWRyX2luaXQoZnQtPmlkcik7DQo+ICsJcndsb2NrX2luaXQoJmZ0LT5sb2NrKTsNCj4g KwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArdm9pZCBrc21iZF9kZXN0cm95X2ZpbGVfdGFibGUo c3RydWN0IGtzbWJkX2ZpbGVfdGFibGUgKmZ0KQ0KPiArew0KPiArCWlmICghZnQtPmlkcikNCj4g KwkJcmV0dXJuOw0KPiArDQo+ICsJX19jbG9zZV9maWxlX3RhYmxlX2lkcyhmdCwgTlVMTCwgc2Vz c2lvbl9mZF9jaGVjayk7DQo+ICsJaWRyX2Rlc3Ryb3koZnQtPmlkcik7DQo+ICsJa3NtYmRfZnJl ZShmdC0+aWRyKTsNCj4gKwlmdC0+aWRyID0gTlVMTDsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL2Zz L2NpZnNkL3Zmc19jYWNoZS5oIGIvZnMvY2lmc2QvdmZzX2NhY2hlLmgNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi43ZDIzNjU3Yzg2YzYNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9mcy9jaWZzZC92ZnNfY2FjaGUuaA0KPiBAQCAtMCwwICsxLDIxMyBAQA0K PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8NCj4gKy8q DQo+ICsgKiAgIENvcHlyaWdodCAoQykgMjAxOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRk Lg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX19WRlNfQ0FDSEVfSF9fDQo+ICsjZGVmaW5lIF9f VkZTX0NBQ0hFX0hfXw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L2ZpbGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3J3c2VtLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9pZHIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCj4g Kw0KPiArI2luY2x1ZGUgInZmcy5oIg0KPiArDQo+ICsvKiBXaW5kb3dzIHN0eWxlIGZpbGUgcGVy bWlzc2lvbnMgZm9yIGV4dGVuZGVkIHJlc3BvbnNlICovDQo+ICsjZGVmaW5lCUZJTEVfR0VORVJJ Q19BTEwJMHgxRjAxRkYNCj4gKyNkZWZpbmUJRklMRV9HRU5FUklDX1JFQUQJMHgxMjAwODkNCj4g KyNkZWZpbmUJRklMRV9HRU5FUklDX1dSSVRFCTB4MTIwMTE2DQo+ICsjZGVmaW5lCUZJTEVfR0VO RVJJQ19FWEVDVVRFCTBYMTIwMGEwDQo+ICsNCj4gKyNkZWZpbmUgS1NNQkRfU1RBUlRfRklECQkw DQo+ICsjZGVmaW5lIEtTTUJEX05PX0ZJRAkJKFVJTlRfTUFYKQ0KPiArI2RlZmluZSBTTUIyX05P X0ZJRAkJKDB4RkZGRkZGRkZGRkZGRkZGRlVMTCkNCj4gKw0KPiArI2RlZmluZSBGUF9GSUxFTkFN RShmcCkJCWZwLT5maWxwLT5mX3BhdGguZGVudHJ5LQ0KPiA+ZF9uYW1lLm5hbWUNCj4gKyNkZWZp bmUgRlBfSU5PREUoZnApCQlmcC0+ZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZQ0KPiArI2Rl ZmluZSBQQVJFTlRfSU5PREUoZnApCWZwLT5maWxwLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudC0+ ZF9pbm9kZQ0KPiArDQo+ICsjZGVmaW5lIEFUVFJfRlAoZnApIChmcC0+YXR0cmliX29ubHkgJiYg XA0KPiArCQkoZnAtPmNkb3B0aW9uICE9IEZJTEVfT1ZFUldSSVRFX0lGX0xFICYmIFwNCj4gKwkJ ZnAtPmNkb3B0aW9uICE9IEZJTEVfT1ZFUldSSVRFX0xFICYmIFwNCj4gKwkJZnAtPmNkb3B0aW9u ICE9IEZJTEVfU1VQRVJTRURFX0xFKSkNCj4gKw0KPiArc3RydWN0IGtzbWJkX2Nvbm47DQo+ICtz dHJ1Y3Qga3NtYmRfc2Vzc2lvbjsNCj4gKw0KPiArc3RydWN0IGtzbWJkX2xvY2sgew0KPiArCXN0 cnVjdCBmaWxlX2xvY2sgKmZsOw0KPiArCXN0cnVjdCBsaXN0X2hlYWQgZ2xpc3Q7DQo+ICsJc3Ry dWN0IGxpc3RfaGVhZCBsbGlzdDsNCj4gKwl1bnNpZ25lZCBpbnQgZmxhZ3M7DQo+ICsJaW50IGNt ZDsNCj4gKwlpbnQgemVyb19sZW47DQo+ICsJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0Ow0KPiAr CXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qgc3RyZWFtIHsN Cj4gKwljaGFyICpuYW1lOw0KPiArCXNzaXplX3Qgc2l6ZTsNCj4gK307DQo+ICsNCj4gK3N0cnVj dCBrc21iZF9pbm9kZSB7DQo+ICsJcndsb2NrX3QJCQltX2xvY2s7DQo+ICsJYXRvbWljX3QJCQlt X2NvdW50Ow0KPiArCWF0b21pY190CQkJb3BfY291bnQ7DQo+ICsJLyogb3BpbmZvIGNvdW50IGZv ciBzdHJlYW1zICovDQo+ICsJYXRvbWljX3QJCQlzb3BfY291bnQ7DQo+ICsJc3RydWN0IGlub2Rl CQkJKm1faW5vZGU7DQo+ICsJdW5zaWduZWQgaW50CQkJbV9mbGFnczsNCj4gKwlzdHJ1Y3QgaGxp c3Rfbm9kZQkJbV9oYXNoOw0KPiArCXN0cnVjdCBsaXN0X2hlYWQJCW1fZnBfbGlzdDsNCj4gKwlz dHJ1Y3QgbGlzdF9oZWFkCQltX29wX2xpc3Q7DQo+ICsJc3RydWN0IG9wbG9ja19pbmZvCQkqbV9v cGluZm87DQo+ICsJX19sZTMyCQkJCW1fZmF0dHI7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qga3Nt YmRfZmlsZSB7DQo+ICsJc3RydWN0IGZpbGUJCQkqZmlscDsNCj4gKwljaGFyCQkJCSpmaWxlbmFt ZTsNCj4gKwl1bnNpZ25lZCBpbnQJCQlwZXJzaXN0ZW50X2lkOw0KPiArCXVuc2lnbmVkIGludAkJ CXZvbGF0aWxlX2lkOw0KPiArDQo+ICsJc3BpbmxvY2tfdAkJCWZfbG9jazsNCj4gKw0KPiArCXN0 cnVjdCBrc21iZF9pbm9kZQkJKmZfY2k7DQo+ICsJc3RydWN0IGtzbWJkX2lub2RlCQkqZl9wYXJl bnRfY2k7DQo+ICsJc3RydWN0IG9wbG9ja19pbmZvIF9fcmN1CSpmX29waW5mbzsNCj4gKwlzdHJ1 Y3Qga3NtYmRfY29ubgkJKmNvbm47DQo+ICsJc3RydWN0IGtzbWJkX3RyZWVfY29ubmVjdAkqdGNv bjsNCj4gKw0KPiArCWF0b21pY190CQkJcmVmY291bnQ7DQo+ICsJX19sZTMyCQkJCWRhY2Nlc3M7 DQo+ICsJX19sZTMyCQkJCXNhY2Nlc3M7DQo+ICsJX19sZTMyCQkJCWNvcHRpb247DQo+ICsJX19s ZTMyCQkJCWNkb3B0aW9uOw0KPiArCV9fdTY0CQkJCWNyZWF0ZV90aW1lOw0KPiArCV9fdTY0CQkJ CWl0aW1lOw0KPiArDQo+ICsJYm9vbAkJCQlpc19kdXJhYmxlOw0KPiArCWJvb2wJCQkJaXNfcmVz aWxpZW50Ow0KPiArCWJvb2wJCQkJaXNfcGVyc2lzdGVudDsNCj4gKwlib29sCQkJCWlzX250X29w ZW47DQo+ICsJYm9vbAkJCQlhdHRyaWJfb25seTsNCj4gKw0KPiArCWNoYXIJCQkJY2xpZW50X2d1 aWRbMTZdOw0KPiArCWNoYXIJCQkJY3JlYXRlX2d1aWRbMTZdOw0KPiArCWNoYXIJCQkJYXBwX2lu c3RhbmNlX2lkWzE2XTsNCj4gKw0KPiArCXN0cnVjdCBzdHJlYW0JCQlzdHJlYW07DQo+ICsJc3Ry dWN0IGxpc3RfaGVhZAkJbm9kZTsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCQlibG9ja2VkX3dvcmtz Ow0KPiArDQo+ICsJaW50CQkJCWR1cmFibGVfdGltZW91dDsNCj4gKw0KPiArCS8qIGZvciBTTUIx ICovDQo+ICsJaW50CQkJCXBpZDsNCj4gKw0KPiArCS8qIGNvbmZsaWN0IGxvY2sgZmFpbCBjb3Vu dCBmb3IgU01CMSAqLw0KPiArCXVuc2lnbmVkIGludAkJCWNmbG9ja19jbnQ7DQo+ICsJLyogbGFz dCBsb2NrIGZhaWx1cmUgc3RhcnQgb2Zmc2V0IGZvciBTTUIxICovDQo+ICsJdW5zaWduZWQgbG9u ZyBsb25nCQlsbG9ja19mc3RhcnQ7DQo+ICsNCj4gKwlpbnQJCQkJZGlyZW50X29mZnNldDsNCj4g Kw0KPiArCS8qIGlmIGxzIGlzIGhhcHBlbmluZyBvbiBkaXJlY3RvcnksIGJlbG93IGlzIHZhbGlk Ki8NCj4gKwlzdHJ1Y3Qga3NtYmRfcmVhZGRpcl9kYXRhCXJlYWRkaXJfZGF0YTsNCj4gKwlpbnQJ CQkJZG90X2RvdGRvdFsyXTsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRf Y3R4X2FjdG9yKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LA0KPiArCQkJCSBmaWxsZGlyX3QgYWN0 b3IpDQo+ICt7DQo+ICsJY3R4LT5hY3RvciA9IGFjdG9yOw0KPiArfQ0KPiArDQo+ICsjZGVmaW5l IEtTTUJEX05SX09QRU5fREVGQVVMVCBCSVRTX1BFUl9MT05HDQo+ICsNCj4gK3N0cnVjdCBrc21i ZF9maWxlX3RhYmxlIHsNCj4gKwlyd2xvY2tfdAkJbG9jazsNCj4gKwlzdHJ1Y3QgaWRyCQkqaWRy Ow0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlubGluZSBib29sIEhBU19GSUxFX0lEKHVuc2lnbmVk IGxvbmcgbG9uZyByZXEpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGlkID0gKHVuc2lnbmVkIGlu dClyZXE7DQo+ICsNCj4gKwlyZXR1cm4gaWQgPCBLU01CRF9OT19GSUQ7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbmxpbmUgYm9vbCBrc21iZF9zdHJlYW1fZmQoc3RydWN0IGtzbWJkX2ZpbGUgKmZw KQ0KPiArew0KPiArCXJldHVybiBmcC0+c3RyZWFtLm5hbWUgIT0gTlVMTDsNCj4gK30NCj4gKw0K PiAraW50IGtzbWJkX2luaXRfZmlsZV90YWJsZShzdHJ1Y3Qga3NtYmRfZmlsZV90YWJsZSAqZnQp Ow0KPiArdm9pZCBrc21iZF9kZXN0cm95X2ZpbGVfdGFibGUoc3RydWN0IGtzbWJkX2ZpbGVfdGFi bGUgKmZ0KTsNCj4gKw0KPiAraW50IGtzbWJkX2Nsb3NlX2ZkKHN0cnVjdCBrc21iZF93b3JrICp3 b3JrLCB1bnNpZ25lZCBpbnQgaWQpOw0KPiArDQo+ICtzdHJ1Y3Qga3NtYmRfZmlsZSAqa3NtYmRf bG9va3VwX2ZkX2Zhc3Qoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCQkJCXVuc2lnbmVk IGludCBpZCk7DQo+ICtzdHJ1Y3Qga3NtYmRfZmlsZSAqa3NtYmRfbG9va3VwX2ZvcmVpZ25fZmQo c3RydWN0IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCQkJCSAgIHVuc2lnbmVkIGludCBpZCk7DQo+ ICtzdHJ1Y3Qga3NtYmRfZmlsZSAqa3NtYmRfbG9va3VwX2ZkX3Nsb3coc3RydWN0IGtzbWJkX3dv cmsgKndvcmssDQo+ICsJCQkJCXVuc2lnbmVkIGludCBpZCwNCj4gKwkJCQkJdW5zaWduZWQgaW50 IHBpZCk7DQo+ICsNCj4gK3ZvaWQga3NtYmRfZmRfcHV0KHN0cnVjdCBrc21iZF93b3JrICp3b3Jr LCBzdHJ1Y3Qga3NtYmRfZmlsZSAqZnApOw0KPiArDQo+ICtpbnQga3NtYmRfY2xvc2VfZmRfYXBw X2lkKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLCBjaGFyICphcHBfaWQpOw0KPiArc3RydWN0IGtz bWJkX2ZpbGUgKmtzbWJkX2xvb2t1cF9kdXJhYmxlX2ZkKHVuc2lnbmVkIGxvbmcgbG9uZyBpZCk7 DQo+ICtzdHJ1Y3Qga3NtYmRfZmlsZSAqa3NtYmRfbG9va3VwX2ZkX2NndWlkKGNoYXIgKmNndWlk KTsNCj4gK3N0cnVjdCBrc21iZF9maWxlICprc21iZF9sb29rdXBfZmRfZmlsZW5hbWUoc3RydWN0 IGtzbWJkX3dvcmsgKndvcmssDQo+ICsJCQkJCSAgICBjaGFyICpmaWxlbmFtZSk7DQo+ICtzdHJ1 Y3Qga3NtYmRfZmlsZSAqa3NtYmRfbG9va3VwX2ZkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUp Ow0KPiArDQo+ICt1bnNpZ25lZCBpbnQga3NtYmRfb3Blbl9kdXJhYmxlX2ZkKHN0cnVjdCBrc21i ZF9maWxlICpmcCk7DQo+ICsNCj4gK3N0cnVjdCBrc21iZF9maWxlICprc21iZF9vcGVuX2ZkKHN0 cnVjdCBrc21iZF93b3JrICp3b3JrLA0KPiArCQkJCSBzdHJ1Y3QgZmlsZSAqZmlscCk7DQo+ICsN Cj4gK3ZvaWQga3NtYmRfY2xvc2VfdHJlZV9jb25uX2ZkcyhzdHJ1Y3Qga3NtYmRfd29yayAqd29y ayk7DQo+ICt2b2lkIGtzbWJkX2Nsb3NlX3Nlc3Npb25fZmRzKHN0cnVjdCBrc21iZF93b3JrICp3 b3JrKTsNCj4gKw0KPiAraW50IGtzbWJkX2Nsb3NlX2lub2RlX2ZkcyhzdHJ1Y3Qga3NtYmRfd29y ayAqd29yaywgc3RydWN0IGlub2RlDQo+ICppbm9kZSk7DQo+ICsNCj4gK2ludCBrc21iZF9yZW9w ZW5fZHVyYWJsZV9mZChzdHJ1Y3Qga3NtYmRfd29yayAqd29yaywNCj4gKwkJCSAgICBzdHJ1Y3Qg a3NtYmRfZmlsZSAqZnApOw0KPiArDQo+ICtpbnQga3NtYmRfaW5pdF9nbG9iYWxfZmlsZV90YWJs ZSh2b2lkKTsNCj4gK3ZvaWQga3NtYmRfZnJlZV9nbG9iYWxfZmlsZV90YWJsZSh2b2lkKTsNCj4g Kw0KPiAraW50IGtzbWJkX2ZpbGVfdGFibGVfZmx1c2goc3RydWN0IGtzbWJkX3dvcmsgKndvcmsp Ow0KPiArDQo+ICt2b2lkIGtzbWJkX3NldF9mZF9saW1pdCh1bnNpZ25lZCBsb25nIGxpbWl0KTsN Cj4gKw0KPiArLyoNCj4gKyAqIElOT0RFIGhhc2gNCj4gKyAqLw0KPiArDQo+ICtpbnQgX19pbml0 IGtzbWJkX2lub2RlX2hhc2hfaW5pdCh2b2lkKTsNCj4gK3ZvaWQgX19leGl0IGtzbWJkX3JlbGVh c2VfaW5vZGVfaGFzaCh2b2lkKTsNCj4gKw0KPiArZW51bSBLU01CRF9JTk9ERV9TVEFUVVMgew0K PiArCUtTTUJEX0lOT0RFX1NUQVRVU19PSywNCj4gKwlLU01CRF9JTk9ERV9TVEFUVVNfVU5LTk9X TiwNCj4gKwlLU01CRF9JTk9ERV9TVEFUVVNfUEVORElOR19ERUxFVEUsDQo+ICt9Ow0KPiArDQo+ ICtpbnQga3NtYmRfcXVlcnlfaW5vZGVfc3RhdHVzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOw0KPiAr DQo+ICtib29sIGtzbWJkX2lub2RlX3BlbmRpbmdfZGVsZXRlKHN0cnVjdCBrc21iZF9maWxlICpm cCk7DQo+ICt2b2lkIGtzbWJkX3NldF9pbm9kZV9wZW5kaW5nX2RlbGV0ZShzdHJ1Y3Qga3NtYmRf ZmlsZSAqZnApOw0KPiArdm9pZCBrc21iZF9jbGVhcl9pbm9kZV9wZW5kaW5nX2RlbGV0ZShzdHJ1 Y3Qga3NtYmRfZmlsZSAqZnApOw0KPiArDQo+ICt2b2lkIGtzbWJkX2ZkX3NldF9kZWxldGVfb25f Y2xvc2Uoc3RydWN0IGtzbWJkX2ZpbGUgKmZwLA0KPiArCQkJCSAgaW50IGZpbGVfaW5mbyk7DQo+ ICsjZW5kaWYgLyogX19WRlNfQ0FDSEVfSF9fICovDQo+IC0tDQo+IDIuMTcuMQ0KDQo=