Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp1541488rwi; Thu, 20 Oct 2022 13:56:20 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5kLELlCwsCbNwl9e9iksyAlaB3Dw0CnEqESomvaoF5jPxnZg8MKw/qr2inpPRTkewtWaZW X-Received: by 2002:a17:907:3e95:b0:792:e5b3:5a19 with SMTP id hs21-20020a1709073e9500b00792e5b35a19mr7697758ejc.766.1666299380350; Thu, 20 Oct 2022 13:56:20 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666299380; cv=pass; d=google.com; s=arc-20160816; b=jj2t88fi68PSw49yq2Hq7mhPAuu6ExHtqeqNTG0hm2f3DeSwYdLtw9M1JsJxWs3bRE UqA5/+AdJuN30rrqS1bkWh51qqd/Btg9YxQr65zdH6KyL4ih0roWwWMnhmBSP1FI4XCo XHm77LW0Uf5H4bojwLLpeufTZOWAHAirXwDhfm7bibVrtGgcch+/CM7SikVl/3VQBkj5 LJSwaZifGr+Ba3H+WNR8tqXPeWejoeVTgKhXpDkgVQ/5PyTe+h4EC+PKJbHy2JJL8HPN UOOl/2vpgSoagF2RH9Q3SnklrdFyc7lEQpdm9LpUol7LJObw+8WA4fzDqcxnmejyGDAs 39YQ== 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 :msip_labels:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=ttsda4dYM345zJMXc4rIh6RlvZGN3lYRu+jJydimp8o=; b=NVRaEP6zEcKtW9ZsMP7V6lYTutinHk6XE6MwGctaGQzyjD27Uq4cimxSH5KW2z6xn/ DVnYIo3sjcMy4N6VDLti3ZBx/1zWsd0+MRsoeJzi5snyXOhnBvLzEgVWVoOHsztVRtDs NzwwBFHZ3bf5/g9elCGxg4pcHAHZoXKfm4qetDA9Wz9+QEQxCuoHtxp5lwSv6Tzwhsdl xuGs+upIWmAF98tlGWXVnKSQNAQM14lhZmkqyFNFExFNg185layd8R0ZtVb506YgiuL6 NRNVnI4t/0v6YDTmOwnvhnQCSLgexZKKRpSEpMD7REsuq5ngO1sXeGqMM2MLDe+cASyt 5DOw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=cf89cbAJ; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bu3-20020a170906a14300b00782539a0286si15215234ejb.142.2022.10.20.13.55.54; Thu, 20 Oct 2022 13:56:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=cf89cbAJ; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229661AbiJTUm3 (ORCPT + 99 others); Thu, 20 Oct 2022 16:42:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33466 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229494AbiJTUm1 (ORCPT ); Thu, 20 Oct 2022 16:42:27 -0400 Received: from na01-obe.outbound.protection.outlook.com (mail-centralusazon11023025.outbound.protection.outlook.com [52.101.64.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EDEA1F1836; Thu, 20 Oct 2022 13:42:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WUcZTstAizrArIatHRwm0YFy6Jf3F36Ntk0Kd6MuF/cyzY2y7Kb/PXhRlu14lDB/0jKshn23oAQwXx/CB+u+ubfmlwy7/yDCdgxlj/gLGpHg+jHV3Bo4aM8IsgX44Ngml2nj9weL09jZauII7RrHFSEIX2laD5g0VXLHu4QP67lcxlaSAEYAZwjXQ6iOcUau2bF/cfvV6vzpMZqnomwk9NP9zB2HrNiFATNOBW4KdPLI7p0KZ2UJ0zVZf+a9j09p3APvh+ZCJTTzrdkkwJ8EjJ9nZ6HauHhcvkE0IrIxGTOoRC/8XZS7qlIxRyC6j0ZAuq8sDziajg57d3zw4ngZcw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ttsda4dYM345zJMXc4rIh6RlvZGN3lYRu+jJydimp8o=; b=QatLJtMwFZadh/OMF8GVDEoGQBlaUBv07l3KV3rjMGyL6pM1SKrpBnfu74ij81QD/DDOvlrkCGls9UFF39ftZHb7XYAVdHUHSmC0URQMHjsmZDgTofv3qxIC4kz2uyB/knGIfFmzc1ILGzFeA6fbEp2hfNwKL/XAPiKDeuPecoUCPFWTj6/P7+Da60Zedu8REyag8CFtdkrhO/DWlcaYAd3FyYzZD5xwJgLxCk+BTJ2cc5F722FzeFev7crfEHykA2FxtAj+IXOfuwSl6kLv1uTN6wdkNYRJbMRaibuVFwNGRO1op6Cime8PM1Y9fwcV3+sozxJt8bbtUDmsuECYcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ttsda4dYM345zJMXc4rIh6RlvZGN3lYRu+jJydimp8o=; b=cf89cbAJgvCl1idwUijwrgHWuoii2yIj8+jqbOgPGiCDxGInxOe1pXVGG032HJc/LcqBbjecDdd1o5fUGfpp/FW50vRVM6GZ9xlr1NExEORwK5GoJ+jVG+NVSfnYWILrtryVZqP5j9VJmdSHO9LUwz6nxZnr//B5STO3BwepzsI= Received: from PH7PR21MB3263.namprd21.prod.outlook.com (2603:10b6:510:1db::16) by CY5PR21MB3733.namprd21.prod.outlook.com (2603:10b6:930:d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.7; Thu, 20 Oct 2022 20:42:18 +0000 Received: from PH7PR21MB3263.namprd21.prod.outlook.com ([fe80::c376:127c:aa44:f3c8]) by PH7PR21MB3263.namprd21.prod.outlook.com ([fe80::c376:127c:aa44:f3c8%7]) with mapi id 15.20.5769.006; Thu, 20 Oct 2022 20:42:18 +0000 From: Long Li To: Bernard Metzler , KY Srinivasan , Haiyang Zhang , Stephen Hemminger , Wei Liu , Dexuan Cui , "David S. Miller" , Jakub Kicinski , Paolo Abeni , Jason Gunthorpe , Leon Romanovsky , "edumazet@google.com" , "shiraz.saleem@intel.com" , Ajay Sharma CC: "linux-hyperv@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-rdma@vger.kernel.org" Subject: RE: [Patch v8 12/12] RDMA/mana_ib: Add a driver for Microsoft Azure Network Adapter Thread-Topic: [Patch v8 12/12] RDMA/mana_ib: Add a driver for Microsoft Azure Network Adapter Thread-Index: AQHY5AmQQ427gtVraEOIJ5+rCERFPa4XHQ2AgACeAYA= Date: Thu, 20 Oct 2022 20:42:18 +0000 Message-ID: References: <1666218252-32191-1-git-send-email-longli@linuxonhyperv.com> <1666218252-32191-13-git-send-email-longli@linuxonhyperv.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ActionId=a6ec0a47-7bbb-450e-ab60-f48358a86509;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=true;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=Internal;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2022-10-20T20:21:41Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH7PR21MB3263:EE_|CY5PR21MB3733:EE_ x-ms-office365-filtering-correlation-id: 36ca5eca-185b-4f20-f5b8-08dab2db949c x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: kJF0StYsbtL5Join5LpBWfiCMvu9RJkOc33zyLFF9sCrJVMjsnu5FkX0ChfHKKgrezzwpWe3J5O9hVlQGmoln21Jlm3Vc1t9DaZpF0pwM6ciTL6YFBKlWKOr/4ZJ9c2vmJ5Wc3CcGeBbnK6HG0DlXK5NeY3W3J6GnZCOJ9Hdjz7UYmDnJ11XPOzqKPuMz0M5EZF1vvp/eyDLyzfPDZeWq9nG3+6bB7bmq0UgE6kpu+drJpWUaaTUmH09xTyrl3Bj1BqSro075nnwB+Vs4f//KM8HD1RkRek0UjegyDtseIQC9f+Mln/7G6qPZps6BGh3SWjtCvRwMYxM5F30svo2ypPC6adinKc/l9/z69qKGVEpOW55AAyP8f3kok3YwdkvY6SiOIOGGnnWERwLySSJPIxF1gd2HM4KfewTquwDCj08TJc4BZWE/zveFArR9oHH2Q4+AIB3nWiVSdau7JcA6Eo0J1qNi79DYE1A0SlHX+2O0FkziQoJSVt4XmzkioHoyHZRM1GWVKWwC+Jy0DBElSQ4dHbx5OKZtVVDTZggDW9vCbPMz6SUPIDy7UXLOWu9rkaxKjBBQe5sxSpVfgvy7M+CNJ6ZDaYXvj+PIak2LY4sDJQ3FRNssnNnO1OAV07HRg4z/qea1esaKf9/m4f6g/0Dw4pi9eS+572zrWdg2nacz2jcudIMb5n3DCI1vyiq9x62A6TztP0mDL676oVgMjLrfmBOx2dVvHHRwVtM3wP7QvJzVvqC9pI0XNfBPTMofq0AS0UzoQn6uMtTus2zQEiV/da58XqWkfzq55xWKCwV7frIkzmQ7o4zUzQRTCXncQapOpUmxZXV/X0qzdMepjjSYVhDliZj5peLM/J9qoE3Xt+X5Rf2O+QSnhDr7P4c x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR21MB3263.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(39860400002)(366004)(136003)(346002)(376002)(47530400004)(451199015)(316002)(54906003)(6636002)(110136005)(55016003)(52536014)(8936002)(8990500004)(26005)(186003)(2906002)(33656002)(66476007)(5660300002)(30864003)(7416002)(4326008)(9686003)(8676002)(64756008)(66446008)(66946007)(76116006)(66556008)(86362001)(41300700001)(83380400001)(6506007)(7696005)(53546011)(478600001)(66899015)(71200400001)(966005)(82950400001)(82960400001)(38070700005)(122000001)(921005)(38100700002)(10290500003)(21314003)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YThHVGRlaWxoN1d2dVlvT2pHY3NyNm4rYTVNNXBNQ0JtL0dzcktFcVNRZGRz?= =?utf-8?B?eldRVDVDNSt5eWdLUFhDek5BLzhhZ21EaG8ybm55UmRQcThoTXBKamF6QkJa?= =?utf-8?B?MkVpWld1ak8xdW9tZ2JSRkdlRFVBOGNsWVdrY0hOSlpEZmUzbytjYnBCcE9j?= =?utf-8?B?bUtOSHFITHY0ajVYZ1V6QW5YODZZU2FaMzU5b2dVb09OMG1IRHF3ZVRBQ2VO?= =?utf-8?B?Z0s2WHB0Mm5uVVBBTXdxaFpiTU14ekdiMGtEaGNUbkV6cXlyNTdlSXZINitk?= =?utf-8?B?NEQrSno2NzAwMWV2dWNLVE1Cak1iWDBnR0hVVTFwckM3S010Z3pUeldEYWdl?= =?utf-8?B?WUtYWU01TzlHNEVXM0ErVkRadmpPUFRqWFRQOEtqMFZwTFFIQmVBTmVHNUk1?= =?utf-8?B?NTU0TEM3aDdVRVc5SFgwblI1TlpCVGRDQ1RhclF0ckJWVytjdFI5SWR6VFk2?= =?utf-8?B?V0h0M0NqTWY3dm5rTWgyMnYxbTE0OVk1ZEVsTm1uOHhvTGdFZUFrYm1sc2Mw?= =?utf-8?B?WEkrOG5mbTBCMUg5dWxHY2kvRUc5MTdDdVZZNTh0dFdwZGYrQ1JWakM0V0Ew?= =?utf-8?B?WGlUMGtDMythcjZzRmk5MzVoS0RRdVVJWEtoQ09adWVuT04ydGFhVEVZSWNC?= =?utf-8?B?aWFZUWFjSUd2eGVCZENwUDBHY3RtRzRuTFloOWtOdnBsNmd5amdMby9NSi9F?= =?utf-8?B?NXh4MFlQQm4xdVEyZG9tSEVCNUVZT0pVRHJXbWY2SnNtQ2NEZTl2WVVEZlFI?= =?utf-8?B?OFBNQmNLUHBWOUFGcWwwZHVyVTMxSHRuazBmLzJsU3lSR21FR3RBL01zWUpj?= =?utf-8?B?bmNqY0d0SEVUUmozZDNlNnN3WFZDdkZ3TzlSd2xNUER0WjRkVUw0SEVoNnFq?= =?utf-8?B?V1Y1RGM0SHNjRlVhUjRmMGtkb1RDWFZZU3EvaXVLQ0NaQU9heTZ4UXM4Rkpq?= =?utf-8?B?R3JFaHlQd1FRNzJ3aWFPYkIyOGk2S3RHaDJJSkFoODhUTGNiMWJsdllod2NW?= =?utf-8?B?ZGp0SEpTY0dkQW9xL3RnaktYMXlhMng5a3pKNzdpcGdqZjR5N2JZZUQ3cHc0?= =?utf-8?B?RUErOXlWdXplSkZ2TnVadnBvMVVRUVhUbG9vYVRoazZnS1VaTEZxN2xPNXo5?= =?utf-8?B?UUpPdnBlVGNrOTlOTXRNbm5PbitHYkJiY21NaVpkTUVvVGhKNXpDY21tZlZw?= =?utf-8?B?dkxNSHQ3cHlMcTUzRy9xOGJubDFKQnBBcVloaXZvSlVmMUVjUERYOGY5dFRi?= =?utf-8?B?UUtJRjZOVUgwckxvaXJXQTFDbmJ1NzhuTHJEL2tDSFBJc3NPYnpRdlJOQi81?= =?utf-8?B?VnlJb2hQK05lZDJhRXpjanJGNEdXcjhqdE9zcVA0U2FFZXlvNFpMVnBnOEcy?= =?utf-8?B?c3hXUHhKdlRVS2puaHZjbGN4d005YTZkMTZERmFMejEzOXNza3NBOFpsaERI?= =?utf-8?B?RDdjc2czSjJOSmtPbU5XSEZhSjNlVS9qSFlWdWpGbndaUWp4NlZaMGV6eCtE?= =?utf-8?B?S296eW9LRUFVL0cvYjNzUlBmQ2h2bmlaUEVkL0U4NlBMNmN4Ly9VWVhkZ3Bo?= =?utf-8?B?NitMTEFsekpSdWltQllxVU1JOGo4aGRwS1BITzA0TVp2anVyN1F1dytLQXVK?= =?utf-8?B?VWZ5K29XQnVlSTY3a2pjSytPbGJZU1MzaVZxazc5WmtwSnlCU1NhQk8rYjlr?= =?utf-8?B?SVg2cGYzaGxQZ2JYS2dIQ0VMZkFMRG8vcWtDRDl6YkxiWG1MN2lwbmR3NjZt?= =?utf-8?B?ODFPWThFOUhTYnVPMlRzUkMyZEdodXVIOXhIRGlSYTByNWNPQUhzeGFHakVD?= =?utf-8?B?dnVsbFlZSmp2UDNkRUI4RlpzakJhR0xja0ZNb04xY3o4QWM5eTdHd1lhWnZQ?= =?utf-8?B?Wi9xblY1YWJYcS9oT1BReXpWV0tsTklQbmRHK0M3dUR5OHB3Q2Rxb1NwaG8v?= =?utf-8?B?OW9hSjFQUFd0ZG5ST0RoZEtRNWZpLzNMYlUwYU9WbHNYd2QzeUVJaW9pVjVF?= =?utf-8?B?RzJBdWdEK0NZRE5HTWRDd2N2TmpxMlJXT2JvejRVQ0xXaXhDNjB4akhQVUM2?= =?utf-8?B?Ykd6UTROUEdFNU1zWkNybXAzVjNtNjh6NXcyNXdoVEdvT0RDVE9hM1NCVk15?= =?utf-8?Q?49tJ3kkMH9NbhnkugtQtP1gyH?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR21MB3263.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36ca5eca-185b-4f20-f5b8-08dab2db949c X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Oct 2022 20:42:18.6773 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Jj7CkyJydZUEPsR4D0imEciIO0sTXutU9hpBe4FWeWJWsmePNFTUR0y4+g1vmMLkAACX4nab/jFkrH8lRKUd0A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR21MB3733 X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBTdWJqZWN0OiBSRTogW1BhdGNoIHY4IDEyLzEyXSBSRE1BL21hbmFfaWI6IEFkZCBhIGRyaXZl ciBmb3IgTWljcm9zb2Z0DQo+IEF6dXJlIE5ldHdvcmsgQWRhcHRlcg0KPiANCj4gDQo+IA0KPiA+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogbG9uZ2xpQGxpbnV4b25oeXBl cnYuY29tIDxsb25nbGlAbGludXhvbmh5cGVydi5jb20+DQo+ID4gU2VudDogVGh1cnNkYXksIDIw IE9jdG9iZXIgMjAyMiAwMDoyNA0KPiA+IFRvOiBLLiBZLiBTcmluaXZhc2FuIDxreXNAbWljcm9z b2Z0LmNvbT47IEhhaXlhbmcgWmhhbmcNCj4gPiA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT47IFN0 ZXBoZW4gSGVtbWluZ2VyDQo+IDxzdGhlbW1pbkBtaWNyb3NvZnQuY29tPjsgV2VpDQo+ID4gTGl1 IDx3ZWkubGl1QGtlcm5lbC5vcmc+OyBEZXh1YW4gQ3VpIDxkZWN1aUBtaWNyb3NvZnQuY29tPjsg RGF2aWQgUy4NCj4gTWlsbGVyDQo+ID4gPGRhdmVtQGRhdmVtbG9mdC5uZXQ+OyBKYWt1YiBLaWNp bnNraSA8a3ViYUBrZXJuZWwub3JnPjsgUGFvbG8gQWJlbmkNCj4gPiA8cGFiZW5pQHJlZGhhdC5j b20+OyBKYXNvbiBHdW50aG9ycGUgPGpnZ0B6aWVwZS5jYT47IExlb24NCj4gUm9tYW5vdnNreQ0K PiA+IDxsZW9uQGtlcm5lbC5vcmc+OyBlZHVtYXpldEBnb29nbGUuY29tOyBzaGlyYXouc2FsZWVt QGludGVsLmNvbTsNCj4gQWpheQ0KPiA+IFNoYXJtYSA8c2hhcm1hYWpheUBtaWNyb3NvZnQuY29t Pg0KPiA+IENjOiBsaW51eC1oeXBlcnZAdmdlci5rZXJuZWwub3JnOyBuZXRkZXZAdmdlci5rZXJu ZWwub3JnOyBsaW51eC0NCj4gPiBrZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC1yZG1hQHZn ZXIua2VybmVsLm9yZzsgTG9uZyBMaQ0KPiA+IDxsb25nbGlAbWljcm9zb2Z0LmNvbT4NCj4gPiBT dWJqZWN0OiBbRVhURVJOQUxdIFtQYXRjaCB2OCAxMi8xMl0gUkRNQS9tYW5hX2liOiBBZGQgYSBk cml2ZXIgZm9yDQo+ID4gTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlcg0KPiA+DQo+ID4g RnJvbTogTG9uZyBMaSA8bG9uZ2xpQG1pY3Jvc29mdC5jb20+DQo+ID4NCj4gPiBBZGQgYSBSRE1B IFZGIGRyaXZlciBmb3IgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkuDQo+ ID4NCj4gPiBDby1kZXZlbG9wZWQtYnk6IEFqYXkgU2hhcm1hIDxzaGFybWFhamF5QG1pY3Jvc29m dC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogQWpheSBTaGFybWEgPHNoYXJtYWFqYXlAbWljcm9z b2Z0LmNvbT4NCj4gPiBSZXZpZXdlZC1ieTogRGV4dWFuIEN1aSA8ZGVjdWlAbWljcm9zb2Z0LmNv bT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBMb25nIExpIDxsb25nbGlAbWljcm9zb2Z0LmNvbT4NCj4g PiAtLS0NCj4gPiBDaGFuZ2UgbG9nOg0KPiA+IHYyOg0KPiA+IENoYW5nZWQgY29kaW5nIHN5dGxl cy9mb3JtYXRzDQo+ID4gQ2hlY2tlZCB1bmRlcnNpemUgZm9yIHVkYXRhIGxlbmd0aA0KPiA+IENo YW5nZWQgYWxsIGxvZ2dpbmcgdG8gdXNlIGliZGV2X3h4eCgpDQo+ID4gQXZvaWRlZCBwYWdlIGFy cmF5IGNvcHkgd2hlbiBkb2luZyBNUg0KPiA+IFNvcnRlZCBkcml2ZXIgb3BzDQo+ID4gRml4ZWQg d2FybmluZ3MgcmVwb3J0ZWQgYnkga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+DQo+ ID4NCj4gPiB2MzoNCj4gPiBNb3JlIGNvZGluZyBzeXRsZS9mb3JtYXQgY2hhbmdlcw0KPiA+DQo+ ID4gdjQ6DQo+ID4gUHJvY2VzcyBlcnJvciBvbiBoYXJkd2FyZSB2cG9ydCBjb25maWd1cmF0aW9u DQo+ID4NCj4gPiB2NToNCj4gPiBDaGFuZ2UgbGljZW5zZXMgdG8gR1BMLTIuMC1vbmx5DQo+ID4g Rml4IGVycm9yIGhhbmRsaW5nIGluIG1hbmFfaWJfZ2RfY3JlYXRlX2RtYV9yZWdpb24oKQ0KPiA+ DQo+ID4gdjY6DQo+ID4gcmViYXNlZCB0byByZG1hLW5leHQNCj4gPiByZW1vdmVkIHJlZHVuZGFu dCBpbml0aWFsaXphdGlvbiB0byByZXR1cm4gdmFsdWUgaW4gbWFuYV9pYl9wcm9iZSgpDQo+ID4g YWRkZWQgbWlzc2luZyB0YWJzIGF0IHRoZSBlbmQgb2YgbWFuYV9pYl9nZF9jcmVhdGVfZG1hX3Jl Z2lvbigpDQo+ID4NCj4gPiB2NzoNCj4gPiBtb3ZlIG1hbmFfZ2RfZGVzdHJveV9kb29yYmVsbF9w YWdlKCkgYW5kDQo+IG1hbmFfZ2RfYWxsb2NhdGVfZG9vcmJlbGxfcGFnZSgpDQo+ID4gZnJvbSBH RE1BIHRvIHRoaXMgZHJpdmVyDQo+ID4gdXNlIGliX3VtZW1fZmluZF9iZXN0X3Bnc3ooKSBmb3Ig ZmluZGluZyBwYWdlIHNpemUgZm9yIHJlZ2lzdGVyaW5nIGRtYQ0KPiA+IHJlZ2lvbnMgd2l0aCBo YXJkd2FyZQ0KPiA+IGZpeCBhIGJ1ZyB0aGF0IG1heSBkb3VibGUgZnJlZSBtYW5hX2luZF90YWJs ZSBpbiBtYW5hX2liX2NyZWF0ZV9xcF9yc3MoKQ0KPiA+IGFkZCBBamF5IFNoYXJtYSA8c2hhcm1h YWpheUBtaWNyb3NvZnQuY29tPiB0byBtYWludGFpbmVyIGxpc3QNCj4gPiBhZGQgZGV0YWlscyB0 byBkZXNjcmlwdGlvbiBpbiBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnDQo+ID4g Y2hhbmdlIG11bHRpcGxlIGxpbmVzIGNvbW1lbnRzIHRvIHVzZSBSRE1BIHN0eWxlIGZyb20gTkVU REVWIHN0eWxlDQo+ID4gY2hhbmdlIG1hbmFfaWJfZGV2X29wcyB0byBzdGF0aWMNCj4gPiB1c2Ug bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIoKSBpbiBwbGFjZSBvZiBtb2R1bGVfaW5pdCBhbmQgbW9k dWxlX2V4aXQNCj4gPiBtb3ZlIGFsbCB1c2VyLXRyaWdnZXJhYmxlIGVycm9yIG1lc3NhZ2VzIHRv IGRlYnVnIG1lc3NhZ2VzDQo+ID4gY2hlY2sgZm9yIGluZF90Ymxfc2l6ZSBvdmVyZmxvdyBpbiBt YW5hX2liX2NyZWF0ZV9xcF9yc3MoKQ0KPiA+DQo+ID4gdjg6DQo+ID4gaW5zdGVhZCBvZiBFRkFV TFQsIHVzZSByZXR1cm4gY29kZSBmcm9tIGliX2NvcHlfZnJvbV91ZGF0YSgpDQo+ID4gZml4IHRo ZSByYWNlIGNvbmRpdGlvbiBvbiBtYW5hX2NmZ192cG9ydCgpDQo+ID4gdXNlIHJldHVybiBjb2Rl IGZyb20gbWFuYV9nZF9hbGxvY2F0ZV9kb29yYmVsbF9wYWdlKCkNCj4gPiBzaW1wbGlmeSBlcnJv ciBoYW5kbGluZyBjb2RlIGluIG1hbmFfaWJfZ2RfY3JlYXRlX2RtYV9yZWdpb24oKQ0KPiA+IHVz ZSBVNjRfTUFYIGluIHBsYWNlIG9mICgodTY0KSh+KDBVTEwpKSkNCj4gPiByZW1vdmUgY29uZnVz aW5nIGRlYnVnIG91dHB1dCBvbiB2cG9ydCBzdGVlcmluZyBmYWlsdXJlDQo+ID4gZml4IHVuaW5p dGlhbGl6ZWQgY2xlYW51cCBpbmRleCBpIGluIG1hbmFfaWJfY3JlYXRlX3FwX3JzcygpDQo+ID4N Cj4gPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsNCj4g PiAgZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcgICAgICAgICAgICAgIHwgICAxICsNCj4gPiAg ZHJpdmVycy9pbmZpbmliYW5kL2h3L01ha2VmaWxlICAgICAgICAgIHwgICAxICsNCj4gPiAgZHJp dmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZyAgICAgIHwgIDEwICsNCj4gPiAgZHJpdmVy cy9pbmZpbmliYW5kL2h3L21hbmEvTWFrZWZpbGUgICAgIHwgICA0ICsNCj4gPiAgZHJpdmVycy9p bmZpbmliYW5kL2h3L21hbmEvY3EuYyAgICAgICAgIHwgIDc5ICsrKysNCj4gPiAgZHJpdmVycy9p bmZpbmliYW5kL2h3L21hbmEvZGV2aWNlLmMgICAgIHwgMTE3ICsrKysrKw0KPiA+ICBkcml2ZXJz L2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMgICAgICAgfCA1MDcNCj4gKysrKysrKysrKysrKysr KysrKysrKysrDQo+ID4gIGRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21hbmFfaWIuaCAgICB8 IDE1NiArKysrKysrKw0KPiA+ICBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jICAgICAg ICAgfCAxOTcgKysrKysrKysrDQo+ID4gIGRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL3FwLmMg ICAgICAgICB8IDUwNiArKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBkcml2ZXJzL2luZmlu aWJhbmQvaHcvbWFuYS93cS5jICAgICAgICAgfCAxMTUgKysrKysrDQo+ID4gIGluY2x1ZGUvbmV0 L21hbmEvbWFuYS5oICAgICAgICAgICAgICAgICB8ICAgMyArDQo+ID4gIGluY2x1ZGUvdWFwaS9y ZG1hL2liX3VzZXJfaW9jdGxfdmVyYnMuaCB8ICAgMSArDQo+ID4gIGluY2x1ZGUvdWFwaS9yZG1h L21hbmEtYWJpLmggICAgICAgICAgICB8ICA2NiArKysNCj4gPiAgMTUgZmlsZXMgY2hhbmdlZCwg MTc3MiBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2luZmlu aWJhbmQvaHcvbWFuYS9LY29uZmlnDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lu ZmluaWJhbmQvaHcvbWFuYS9NYWtlZmlsZQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9pbmZpbmliYW5kL2h3L21hbmEvY3EuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9pbmZpbmliYW5kL2h3L21hbmEvZGV2aWNlLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFuYV9pYi5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tci5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9xcC5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS93cS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBpbmNsdWRlL3VhcGkvcmRtYS9tYW5hLWFiaS5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEv TUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KPiA+IGluZGV4IDhiOWE1MDc1NmM3ZS4uODFlZTU4 ZjQ0OTU2IDEwMDY0NA0KPiA+IC0tLSBhL01BSU5UQUlORVJTDQo+ID4gKysrIGIvTUFJTlRBSU5F UlMNCj4gPiBAQCAtMTM1MDYsNiArMTM1MDYsMTUgQEAgRjoJZHJpdmVycy9zY3NpL3NtYXJ0cHFp L3NtYXJ0cHFpKi5bY2hdDQo+ID4gIEY6CWluY2x1ZGUvbGludXgvY2Npc3MqLmgNCj4gPiAgRjoJ aW5jbHVkZS91YXBpL2xpbnV4L2NjaXNzKi5oDQo+ID4NCj4gPiArTUlDUk9TT0ZUIE1BTkEgUkRN QSBEUklWRVINCj4gPiArTToJTG9uZyBMaSA8bG9uZ2xpQG1pY3Jvc29mdC5jb20+DQo+ID4gK006 CUFqYXkgU2hhcm1hIDxzaGFybWFhamF5QG1pY3Jvc29mdC5jb20+DQo+ID4gK0w6CWxpbnV4LXJk bWFAdmdlci5rZXJuZWwub3JnDQo+ID4gK1M6CVN1cHBvcnRlZA0KPiA+ICtGOglkcml2ZXJzL2lu ZmluaWJhbmQvaHcvbWFuYS8NCj4gPiArRjoJaW5jbHVkZS9uZXQvbWFuYQ0KPiA+ICtGOglpbmNs dWRlL3VhcGkvcmRtYS9tYW5hLWFiaS5oDQo+ID4gKw0KPiA+ICBNSUNST1NPRlQgU1VSRkFDRSBB R0dSRUdBVE9SIFRBQkxFVC1NT0RFIFNXSVRDSA0KPiA+ICBNOglNYXhpbWlsaWFuIEx1eiA8bHV6 bWF4aW1pbGlhbkBnbWFpbC5jb20+DQo+ID4gIEw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5r ZXJuZWwub3JnDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnIGIv ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcNCj4gPiBpbmRleCBhYTM2YWM2MThlNzIuLmNjYzg3 NDQ3OGYwYiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZw0KPiA+ ICsrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnDQo+ID4gQEAgLTg1LDYgKzg1LDcgQEAg c291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZyINCj4gPiAgc291cmNl ICJkcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnIg0KPiA+ICBzb3VyY2UgImRyaXZl cnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZyINCj4gPiAgc291cmNlICJkcml2ZXJzL2luZmlu aWJhbmQvaHcvaXJkbWEvS2NvbmZpZyINCj4gPiArc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQv aHcvbWFuYS9LY29uZmlnIg0KPiA+ICBzb3VyY2UgImRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0 L0tjb25maWciDQo+ID4gIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvS2NvbmZp ZyINCj4gPiAgc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZyINCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L01ha2VmaWxlDQo+ID4gYi9kcml2 ZXJzL2luZmluaWJhbmQvaHcvTWFrZWZpbGUNCj4gPiBpbmRleCA2YjNhODgwNDYxMjUuLjEyMTFm NDMxN2E5ZiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvTWFrZWZpbGUN Cj4gPiArKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvTWFrZWZpbGUNCj4gPiBAQCAtNCw2ICs0 LDcgQEAgb2JqLSQoQ09ORklHX0lORklOSUJBTkRfUUlCKQkJKz0gcWliLw0KPiA+ICBvYmotJChD T05GSUdfSU5GSU5JQkFORF9DWEdCNCkJCSs9IGN4Z2I0Lw0KPiA+ICBvYmotJChDT05GSUdfSU5G SU5JQkFORF9FRkEpCQkrPSBlZmEvDQo+ID4gIG9iai0kKENPTkZJR19JTkZJTklCQU5EX0lSRE1B KQkJKz0gaXJkbWEvDQo+ID4gK29iai0kKENPTkZJR19NQU5BX0lORklOSUJBTkQpCQkrPSBtYW5h Lw0KPiA+ICBvYmotJChDT05GSUdfTUxYNF9JTkZJTklCQU5EKQkJKz0gbWx4NC8NCj4gPiAgb2Jq LSQoQ09ORklHX01MWDVfSU5GSU5JQkFORCkJCSs9IG1seDUvDQo+ID4gIG9iai0kKENPTkZJR19J TkZJTklCQU5EX09DUkRNQSkJCSs9IG9jcmRtYS8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9p bmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZw0KPiA+IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21h bmEvS2NvbmZpZw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi41NDY2NDA2NTdiYWMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9p bmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZw0KPiA+IEBAIC0wLDAgKzEsMTAgQEANCj4gPiArIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ID4gK2NvbmZpZyBNQU5BX0lO RklOSUJBTkQNCj4gPiArCXRyaXN0YXRlICJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVy IHN1cHBvcnQiDQo+ID4gKwlkZXBlbmRzIG9uIE5FVERFVklDRVMgJiYgRVRIRVJORVQgJiYgUENJ ICYmDQo+IE1JQ1JPU09GVF9NQU5BDQo+ID4gKwloZWxwDQo+ID4gKwkgIFRoaXMgZHJpdmVyIHBy b3ZpZGVzIGxvdy1sZXZlbCBSRE1BIHN1cHBvcnQgZm9yIE1pY3Jvc29mdCBBenVyZQ0KPiA+ICsJ ICBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpLiBNQU5BIHN1cHBvcnRzIFJETUEgZmVhdHVyZXMgdGhh dCBjYW4NCj4gYmUNCj4gPiB1c2VkDQo+ID4gKwkgIGZvciB3b3JrbG9hZHMgKGUuZy4gRFBESywg TVBJIGV0YykgdGhhdCB1c2VzIFJETUEgdmVyYnMgdG8gZGlyZWN0bHkNCj4gPiArCSAgYWNjZXNz IGhhcmR3YXJlIGZyb20gdXNlci1tb2RlIHByb2Nlc3NlcyBpbiBNaWNyb3NvZnQgQXp1cmUNCj4g Y2xvdWQNCj4gPiArCSAgZW52aXJvbm1lbnQuDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5m aW5pYmFuZC9ody9tYW5hL01ha2VmaWxlDQo+ID4gYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFu YS9NYWtlZmlsZQ0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi44ODY1NWZlNWUzOTgNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9p bmZpbmliYW5kL2h3L21hbmEvTWFrZWZpbGUNCj4gPiBAQCAtMCwwICsxLDQgQEANCj4gPiArIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ID4gK29iai0kKENPTkZJR19N QU5BX0lORklOSUJBTkQpICs9IG1hbmFfaWIubw0KPiA+ICsNCj4gPiArbWFuYV9pYi15IDo9IGRl dmljZS5vIG1haW4ubyB3cS5vIHFwLm8gY3EubyBtci5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmMNCj4gPiBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9t YW5hL2NxLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uZDE0MWNhYjhhMWU2DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvaW5m aW5pYmFuZC9ody9tYW5hL2NxLmMNCj4gPiBAQCAtMCwwICsxLDc5IEBADQo+ID4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gPiArLyoNCj4gPiArICogQ29weXJp Z2h0IChjKSAyMDIyLCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1hbmFfaWIuaCINCj4gPiArDQo+ID4g K2ludCBtYW5hX2liX2NyZWF0ZV9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGNvbnN0IHN0cnVjdCBp Yl9jcV9pbml0X2F0dHINCj4gPiAqYXR0ciwNCj4gPiArCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEg KnVkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9jcSAqY3EgPSBjb250YWluZXJf b2YoaWJjcSwgc3RydWN0IG1hbmFfaWJfY3EsIGliY3EpOw0KPiA+ICsJc3RydWN0IGliX2Rldmlj ZSAqaWJkZXYgPSBpYmNxLT5kZXZpY2U7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9jcmVhdGVfY3Eg dWNtZCA9IHt9Ow0KPiA+ICsJc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2Ow0KPiA+ICsJaW50IGVy cjsNCj4gPiArDQo+ID4gKwltZGV2ID0gY29udGFpbmVyX29mKGliZGV2LCBzdHJ1Y3QgbWFuYV9p Yl9kZXYsIGliX2Rldik7DQo+ID4gKw0KPiA+ICsJaWYgKHVkYXRhLT5pbmxlbiA8IHNpemVvZih1 Y21kKSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwllcnIgPSBpYl9jb3B5 X2Zyb21fdWRhdGEoJnVjbWQsIHVkYXRhLCBtaW4oc2l6ZW9mKHVjbWQpLCB1ZGF0YS0NCj4gPiA+ aW5sZW4pKTsNCj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQlpYmRldl9kYmcoaWJkZXYsDQo+ID4g KwkJCSAgIkZhaWxlZCB0byBjb3B5IGZyb20gdWRhdGEgZm9yIGNyZWF0ZSBjcSwgJWRcbiIsIGVy cik7DQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoYXR0ci0+ Y3FlID4gTUFYX1NFTkRfQlVGRkVSU19QRVJfUVVFVUUpIHsNCj4gPiArCQlpYmRldl9kYmcoaWJk ZXYsICJDUUUgJWQgZXhjZWVkaW5nIGxpbWl0XG4iLCBhdHRyLT5jcWUpOw0KPiA+ICsJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNxLT5jcWUgPSBhdHRyLT5jcWU7DQo+ ID4gKwljcS0+dW1lbSA9IGliX3VtZW1fZ2V0KGliZGV2LCB1Y21kLmJ1Zl9hZGRyLCBjcS0+Y3Fl ICoNCj4gPiBDT01QX0VOVFJZX1NJWkUsDQo+ID4gKwkJCSAgICAgICBJQl9BQ0NFU1NfTE9DQUxf V1JJVEUpOw0KPiA+ICsJaWYgKElTX0VSUihjcS0+dW1lbSkpIHsNCj4gPiArCQllcnIgPSBQVFJf RVJSKGNxLT51bWVtKTsNCj4gPiArCQlpYmRldl9kYmcoaWJkZXYsICJGYWlsZWQgdG8gZ2V0IHVt ZW0gZm9yIGNyZWF0ZSBjcSwNCj4gZXJyICVkXG4iLA0KPiA+ICsJCQkgIGVycik7DQo+ID4gKwkJ cmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwllcnIgPSBtYW5hX2liX2dkX2NyZWF0 ZV9kbWFfcmVnaW9uKG1kZXYsIGNxLT51bWVtLCAmY3EtDQo+ID5nZG1hX3JlZ2lvbik7DQo+ID4g KwlpZiAoZXJyKSB7DQo+ID4gKwkJaWJkZXZfZGJnKGliZGV2LA0KPiA+ICsJCQkgICJGYWlsZWQg dG8gY3JlYXRlIGRtYSByZWdpb24gZm9yIGNyZWF0ZSBjcSwgJWRcbiIsDQo+ID4gKwkJCSAgZXJy KTsNCj4gPiArCQlnb3RvIGVycl9yZWxlYXNlX3VtZW07DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ aWJkZXZfZGJnKGliZGV2LA0KPiA+ICsJCSAgIm1hbmFfaWJfZ2RfY3JlYXRlX2RtYV9yZWdpb24g cmV0ICVkIGdkbWFfcmVnaW9uDQo+IDB4JWxseFxuIiwNCj4gPiArCQkgIGVyciwgY3EtPmdkbWFf cmVnaW9uKTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVGhlIENRIElEIGlzIG5vdCBrbm93 biBhdCB0aGlzIHRpbWUuIFRoZSBJRCBpcyBnZW5lcmF0ZWQgYXQNCj4gPiBjcmVhdGVfcXANCj4g PiArCSAqLw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX3JlbGVhc2Vf dW1lbToNCj4gPiArCWliX3VtZW1fcmVsZWFzZShjcS0+dW1lbSk7DQo+ID4gKwlyZXR1cm4gZXJy Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9kZXN0cm95X2NxKHN0cnVjdCBpYl9j cSAqaWJjcSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG1h bmFfaWJfY3EgKmNxID0gY29udGFpbmVyX29mKGliY3EsIHN0cnVjdCBtYW5hX2liX2NxLCBpYmNx KTsNCj4gPiArCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gaWJjcS0+ZGV2aWNlOw0KPiA+ICsJ c3RydWN0IG1hbmFfaWJfZGV2ICptZGV2Ow0KPiA+ICsNCj4gPiArCW1kZXYgPSBjb250YWluZXJf b2YoaWJkZXYsIHN0cnVjdCBtYW5hX2liX2RldiwgaWJfZGV2KTsNCj4gPiArDQo+ID4gKwltYW5h X2liX2dkX2Rlc3Ryb3lfZG1hX3JlZ2lvbihtZGV2LCBjcS0+Z2RtYV9yZWdpb24pOw0KPiA+ICsJ aWJfdW1lbV9yZWxlYXNlKGNxLT51bWVtKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9kZXZpY2UuYw0K PiA+IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvZGV2aWNlLmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDQ1NDFiODcwN2U0DQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2RldmljZS5j DQo+ID4gQEAgLTAsMCArMSwxMTcgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQ0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIE1pY3Jv c29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICovDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSAibWFuYV9pYi5oIg0KPiA+ICsjaW5jbHVkZSA8bmV0L21hbmEvbWFuYV9h dXhpbGlhcnkuaD4NCj4gPiArDQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTWljcm9zb2Z0IEF6 dXJlIE5ldHdvcmsgQWRhcHRlciBJQiBkcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOw0KPiA+ICtNT0RVTEVfSU1QT1JUX05TKE5FVF9NQU5BKTsNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyBtYW5hX2liX2Rldl9vcHMgPSB7DQo+ID4gKwku b3duZXIgPSBUSElTX01PRFVMRSwNCj4gPiArCS5kcml2ZXJfaWQgPSBSRE1BX0RSSVZFUl9NQU5B LA0KPiA+ICsJLnV2ZXJic19hYmlfdmVyID0gTUFOQV9JQl9VVkVSQlNfQUJJX1ZFUlNJT04sDQo+ ID4gKw0KPiA+ICsJLmFsbG9jX3BkID0gbWFuYV9pYl9hbGxvY19wZCwNCj4gPiArCS5hbGxvY191 Y29udGV4dCA9IG1hbmFfaWJfYWxsb2NfdWNvbnRleHQsDQo+ID4gKwkuY3JlYXRlX2NxID0gbWFu YV9pYl9jcmVhdGVfY3EsDQo+ID4gKwkuY3JlYXRlX3FwID0gbWFuYV9pYl9jcmVhdGVfcXAsDQo+ ID4gKwkuY3JlYXRlX3J3cV9pbmRfdGFibGUgPSBtYW5hX2liX2NyZWF0ZV9yd3FfaW5kX3RhYmxl LA0KPiA+ICsJLmNyZWF0ZV93cSA9IG1hbmFfaWJfY3JlYXRlX3dxLA0KPiA+ICsJLmRlYWxsb2Nf cGQgPSBtYW5hX2liX2RlYWxsb2NfcGQsDQo+ID4gKwkuZGVhbGxvY191Y29udGV4dCA9IG1hbmFf aWJfZGVhbGxvY191Y29udGV4dCwNCj4gPiArCS5kZXJlZ19tciA9IG1hbmFfaWJfZGVyZWdfbXIs DQo+ID4gKwkuZGVzdHJveV9jcSA9IG1hbmFfaWJfZGVzdHJveV9jcSwNCj4gPiArCS5kZXN0cm95 X3FwID0gbWFuYV9pYl9kZXN0cm95X3FwLA0KPiA+ICsJLmRlc3Ryb3lfcndxX2luZF90YWJsZSA9 IG1hbmFfaWJfZGVzdHJveV9yd3FfaW5kX3RhYmxlLA0KPiA+ICsJLmRlc3Ryb3lfd3EgPSBtYW5h X2liX2Rlc3Ryb3lfd3EsDQo+ID4gKwkuZGlzYXNzb2NpYXRlX3Vjb250ZXh0ID0gbWFuYV9pYl9k aXNhc3NvY2lhdGVfdWNvbnRleHQsDQo+ID4gKwkuZ2V0X3BvcnRfaW1tdXRhYmxlID0gbWFuYV9p Yl9nZXRfcG9ydF9pbW11dGFibGUsDQo+ID4gKwkubW1hcCA9IG1hbmFfaWJfbW1hcCwNCj4gPiAr CS5tb2RpZnlfcXAgPSBtYW5hX2liX21vZGlmeV9xcCwNCj4gPiArCS5tb2RpZnlfd3EgPSBtYW5h X2liX21vZGlmeV93cSwNCj4gPiArCS5xdWVyeV9kZXZpY2UgPSBtYW5hX2liX3F1ZXJ5X2Rldmlj ZSwNCj4gPiArCS5xdWVyeV9naWQgPSBtYW5hX2liX3F1ZXJ5X2dpZCwNCj4gPiArCS5xdWVyeV9w b3J0ID0gbWFuYV9pYl9xdWVyeV9wb3J0LA0KPiA+ICsJLnJlZ191c2VyX21yID0gbWFuYV9pYl9y ZWdfdXNlcl9tciwNCj4gPiArDQo+ID4gKwlJTklUX1JETUFfT0JKX1NJWkUoaWJfY3EsIG1hbmFf aWJfY3EsIGliY3EpLA0KPiA+ICsJSU5JVF9SRE1BX09CSl9TSVpFKGliX3BkLCBtYW5hX2liX3Bk LCBpYnBkKSwNCj4gPiArCUlOSVRfUkRNQV9PQkpfU0laRShpYl9xcCwgbWFuYV9pYl9xcCwgaWJx cCksDQo+ID4gKwlJTklUX1JETUFfT0JKX1NJWkUoaWJfdWNvbnRleHQsIG1hbmFfaWJfdWNvbnRl eHQsIGlidWNvbnRleHQpLA0KPiA+ICsJSU5JVF9SRE1BX09CSl9TSVpFKGliX3J3cV9pbmRfdGFi bGUsIG1hbmFfaWJfcndxX2luZF90YWJsZSwNCj4gPiArCQkJICAgaWJfaW5kX3RhYmxlKSwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbWFuYV9pYl9wcm9iZShzdHJ1Y3QgYXV4aWxp YXJ5X2RldmljZSAqYWRldiwNCj4gPiArCQkJIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNl X2lkICppZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IG1hbmFfYWRldiAqbWFkZXYgPSBjb250YWlu ZXJfb2YoYWRldiwgc3RydWN0IG1hbmFfYWRldiwNCj4gYWRldik7DQo+ID4gKwlzdHJ1Y3QgZ2Rt YV9kZXYgKm1kZXYgPSBtYWRldi0+bWRldjsNCj4gPiArCXN0cnVjdCBtYW5hX2NvbnRleHQgKm1j Ow0KPiA+ICsJc3RydWN0IG1hbmFfaWJfZGV2ICpkZXY7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsN Cj4gPiArCW1jID0gbWRldi0+ZHJpdmVyX2RhdGE7DQo+ID4gKw0KPiA+ICsJZGV2ID0gaWJfYWxs b2NfZGV2aWNlKG1hbmFfaWJfZGV2LCBpYl9kZXYpOw0KPiA+ICsJaWYgKCFkZXYpDQo+ID4gKwkJ cmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJaWJfc2V0X2RldmljZV9vcHMoJmRldi0+aWJf ZGV2LCAmbWFuYV9pYl9kZXZfb3BzKTsNCj4gPiArDQo+ID4gKwlkZXYtPmliX2Rldi5waHlzX3Bv cnRfY250ID0gbWMtPm51bV9wb3J0czsNCj4gPiArDQo+ID4gKwlpYmRldl9kYmcoJmRldi0+aWJf ZGV2LCAibWRldj0lcCBpZD0lZCBudW1fcG9ydHM9JWRcbiIsDQo+IG1kZXYsDQo+ID4gKwkJICBt ZGV2LT5kZXZfaWQuYXNfdWludDMyLCBkZXYtPmliX2Rldi5waHlzX3BvcnRfY250KTsNCj4gPiAr DQo+ID4gKwlkZXYtPmdkbWFfZGV2ID0gbWRldjsNCj4gPiArCWRldi0+aWJfZGV2Lm5vZGVfdHlw ZSA9IFJETUFfTk9ERV9JQl9DQTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogbnVtX2NvbXBf dmVjdG9ycyBuZWVkcyB0byBzZXQgdG8gdGhlIG1heCBNU0lYIGluZGV4DQo+ID4gKwkgKiB3aGVu IGludGVycnVwdHMgYW5kIGV2ZW50IHF1ZXVlcyBhcmUgaW1wbGVtZW50ZWQNCj4gPiArCSAqLw0K PiA+ICsJZGV2LT5pYl9kZXYubnVtX2NvbXBfdmVjdG9ycyA9IDE7DQo+ID4gKwlkZXYtPmliX2Rl di5kZXYucGFyZW50ID0gbWRldi0+Z2RtYV9jb250ZXh0LT5kZXY7DQo+ID4gKw0KPiA+ICsJcmV0 ID0gaWJfcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmliX2RldiwgIm1hbmFfJWQiLA0KPiA+ICsJCQkJ IG1kZXYtPmdkbWFfY29udGV4dC0+ZGV2KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlpYl9k ZWFsbG9jX2RldmljZSgmZGV2LT5pYl9kZXYpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJZGV2X3NldF9kcnZkYXRhKCZhZGV2LT5kZXYsIGRldik7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG1hbmFfaWJf cmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgbWFuYV9pYl9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWRldi0+ZGV2KTsNCj4gPiAr DQo+ID4gKwlpYl91bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5pYl9kZXYpOw0KPiA+ICsJaWJfZGVh bGxvY19kZXZpY2UoJmRldi0+aWJfZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHsNCj4gPiAr CXsNCj4gPiArCQkubmFtZSA9ICJtYW5hLnJkbWEiLA0KPiA+ICsJfSwNCj4gPiArCXt9LA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIG1hbmFfaWRf dGFibGUpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIG1hbmFf ZHJpdmVyID0gew0KPiA+ICsJLm5hbWUgPSAicmRtYSIsDQo+ID4gKwkucHJvYmUgPSBtYW5hX2li X3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9IG1hbmFfaWJfcmVtb3ZlLA0KPiA+ICsJLmlkX3RhYmxl ID0gbWFuYV9pZF90YWJsZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK21vZHVsZV9hdXhpbGlhcnlf ZHJpdmVyKG1hbmFfZHJpdmVyKTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5k L2h3L21hbmEvbWFpbi5jDQo+ID4gYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmMN Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzZkOTZi MmI1YjQ2DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9o dy9tYW5hL21haW4uYw0KPiA+IEBAIC0wLDAgKzEsNTA3IEBADQo+ID4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IChj KSAyMDIyLCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4g KyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1hbmFfaWIuaCINCj4gPiArDQo+ID4gK3ZvaWQg bWFuYV9pYl91bmNmZ192cG9ydChzdHJ1Y3QgbWFuYV9pYl9kZXYgKmRldiwgc3RydWN0IG1hbmFf aWJfcGQNCj4gKnBkLA0KPiA+ICsJCQkgdTMyIHBvcnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBn ZG1hX2RldiAqZ2QgPSBkZXYtPmdkbWFfZGV2Ow0KPiA+ICsJc3RydWN0IG1hbmFfcG9ydF9jb250 ZXh0ICptcGM7DQo+ID4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsNCj4gPiArCXN0cnVjdCBt YW5hX2NvbnRleHQgKm1jOw0KPiA+ICsNCj4gPiArCW1jID0gZ2QtPmRyaXZlcl9kYXRhOw0KPiA+ ICsJbmRldiA9IG1jLT5wb3J0c1twb3J0XTsNCj4gPiArCW1wYyA9IG5ldGRldl9wcml2KG5kZXYp Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnBkLT52cG9ydF9tdXRleCk7DQo+ID4gKw0KPiA+ ICsJcGQtPnZwb3J0X3VzZV9jb3VudC0tOw0KPiA+ICsJV0FSTl9PTihwZC0+dnBvcnRfdXNlX2Nv dW50IDwgMCk7DQo+ID4gKw0KPiA+ICsJaWYgKCFwZC0+dnBvcnRfdXNlX2NvdW50KQ0KPiA+ICsJ CW1hbmFfdW5jZmdfdnBvcnQobXBjKTsNCj4gPiArDQo+ID4gKwltdXRleF91bmxvY2soJnBkLT52 cG9ydF9tdXRleCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBtYW5hX2liX2NmZ192cG9ydChz dHJ1Y3QgbWFuYV9pYl9kZXYgKmRldiwgdTMyIHBvcnQsIHN0cnVjdA0KPiBtYW5hX2liX3BkDQo+ ID4gKnBkLA0KPiA+ICsJCSAgICAgIHUzMiBkb29yYmVsbF9pZCkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGdkbWFfZGV2ICptZGV2ID0gZGV2LT5nZG1hX2RldjsNCj4gPiArCXN0cnVjdCBtYW5hX3Bv cnRfY29udGV4dCAqbXBjOw0KPiA+ICsJc3RydWN0IG1hbmFfY29udGV4dCAqbWM7DQo+ID4gKwlz dHJ1Y3QgbmV0X2RldmljZSAqbmRldjsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJbWMg PSBtZGV2LT5kcml2ZXJfZGF0YTsNCj4gPiArCW5kZXYgPSBtYy0+cG9ydHNbcG9ydF07DQo+ID4g KwltcGMgPSBuZXRkZXZfcHJpdihuZGV2KTsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZwZC0+ dnBvcnRfbXV0ZXgpOw0KPiA+ICsNCj4gPiArCXBkLT52cG9ydF91c2VfY291bnQrKzsNCj4gPiAr CWlmIChwZC0+dnBvcnRfdXNlX2NvdW50ID4gMSkgew0KPiA+ICsJCWliZGV2X2RiZygmZGV2LT5p Yl9kZXYsDQo+ID4gKwkJCSAgIlNraXAgYXMgdGhpcyBQRCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQg dnBvcnRcbiIpOw0KPiA+ICsJCW11dGV4X3VubG9jaygmcGQtPnZwb3J0X211dGV4KTsNCj4gPiAr CQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwllcnIgPSBtYW5hX2NmZ192cG9ydCht cGMsIHBkLT5wZG4sIGRvb3JiZWxsX2lkKTsNCj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQlwZC0+ dnBvcnRfdXNlX2NvdW50LS07DQo+ID4gKwkJbXV0ZXhfdW5sb2NrKCZwZC0+dnBvcnRfbXV0ZXgp Ow0KPiA+ICsNCj4gPiArCQlpYmRldl9kYmcoJmRldi0+aWJfZGV2LCAiRmFpbGVkIHRvIGNvbmZp Z3VyZSB2UG9ydCAlZFxuIiwNCj4gZXJyKTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmcGQtPnZwb3J0X211dGV4KTsNCj4gPiArDQo+ID4g KwlwZC0+dHhfc2hvcnRmb3JtX2FsbG93ZWQgPSBtcGMtPnR4X3Nob3J0Zm9ybV9hbGxvd2VkOw0K PiA+ICsJcGQtPnR4X3ZwX29mZnNldCA9IG1wYy0+dHhfdnBfb2Zmc2V0Ow0KPiA+ICsNCj4gPiAr CWliZGV2X2RiZygmZGV2LT5pYl9kZXYsICJ2cG9ydCBoYW5kbGUgJWxseCBwZGlkICV4DQo+IGRv b3JiZWxsX2lkICV4XG4iLA0KPiA+ICsJCSAgbXBjLT5wb3J0X2hhbmRsZSwgcGQtPnBkbiwgZG9v cmJlbGxfaWQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtp bnQgbWFuYV9pYl9hbGxvY19wZChzdHJ1Y3QgaWJfcGQgKmlicGQsIHN0cnVjdCBpYl91ZGF0YSAq dWRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtYW5hX2liX3BkICpwZCA9IGNvbnRhaW5lcl9v ZihpYnBkLCBzdHJ1Y3QgbWFuYV9pYl9wZCwNCj4gaWJwZCk7DQo+ID4gKwlzdHJ1Y3QgaWJfZGV2 aWNlICppYmRldiA9IGlicGQtPmRldmljZTsNCj4gPiArCXN0cnVjdCBnZG1hX2NyZWF0ZV9wZF9y ZXNwIHJlc3AgPSB7fTsNCj4gPiArCXN0cnVjdCBnZG1hX2NyZWF0ZV9wZF9yZXEgcmVxID0ge307 DQo+ID4gKwllbnVtIGdkbWFfcGRfZmxhZ3MgZmxhZ3MgPSAwOw0KPiA+ICsJc3RydWN0IG1hbmFf aWJfZGV2ICpkZXY7DQo+ID4gKwlzdHJ1Y3QgZ2RtYV9kZXYgKm1kZXY7DQo+ID4gKwlpbnQgZXJy Ow0KPiA+ICsNCj4gPiArCWRldiA9IGNvbnRhaW5lcl9vZihpYmRldiwgc3RydWN0IG1hbmFfaWJf ZGV2LCBpYl9kZXYpOw0KPiA+ICsJbWRldiA9IGRldi0+Z2RtYV9kZXY7DQo+ID4gKw0KPiA+ICsJ bWFuYV9nZF9pbml0X3JlcV9oZHIoJnJlcS5oZHIsIEdETUFfQ1JFQVRFX1BELCBzaXplb2YocmVx KSwNCj4gPiArCQkJICAgICBzaXplb2YocmVzcCkpOw0KPiA+ICsNCj4gPiArCXJlcS5mbGFncyA9 IGZsYWdzOw0KPiA+ICsJZXJyID0gbWFuYV9nZF9zZW5kX3JlcXVlc3QobWRldi0+Z2RtYV9jb250 ZXh0LCBzaXplb2YocmVxKSwNCj4gJnJlcSwNCj4gPiArCQkJCSAgIHNpemVvZihyZXNwKSwgJnJl c3ApOw0KPiA+ICsNCj4gPiArCWlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKSB7DQo+ID4gKwkJ aWJkZXZfZGJnKCZkZXYtPmliX2RldiwNCj4gPiArCQkJICAiRmFpbGVkIHRvIGdldCBwZF9pZCBl cnIgJWQgc3RhdHVzICV1XG4iLCBlcnIsDQo+ID4gKwkJCSAgcmVzcC5oZHIuc3RhdHVzKTsNCj4g PiArCQlpZiAoIWVycikNCj4gPiArCQkJZXJyID0gLUVQUk9UTzsNCj4gPiArDQo+ID4gKwkJcmV0 dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwZC0+cGRfaGFuZGxlID0gcmVzcC5wZF9o YW5kbGU7DQo+ID4gKwlwZC0+cGRuID0gcmVzcC5wZF9pZDsNCj4gPiArCWliZGV2X2RiZygmZGV2 LT5pYl9kZXYsICJwZF9oYW5kbGUgMHglbGx4IHBkX2lkICVkXG4iLA0KPiA+ICsJCSAgcGQtPnBk X2hhbmRsZSwgcGQtPnBkbik7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfaW5pdCgmcGQtPnZwb3J0X211 dGV4KTsNCj4gPiArCXBkLT52cG9ydF91c2VfY291bnQgPSAwOw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK2ludCBtYW5hX2liX2RlYWxsb2NfcGQoc3RydWN0IGliX3BkICpp YnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9p Yl9wZCAqcGQgPSBjb250YWluZXJfb2YoaWJwZCwgc3RydWN0IG1hbmFfaWJfcGQsDQo+IGlicGQp Ow0KPiA+ICsJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBpYnBkLT5kZXZpY2U7DQo+ID4gKwlz dHJ1Y3QgZ2RtYV9kZXN0b3J5X3BkX3Jlc3AgcmVzcCA9IHt9Ow0KPiA+ICsJc3RydWN0IGdkbWFf ZGVzdHJveV9wZF9yZXEgcmVxID0ge307DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9kZXYgKmRldjsN Cj4gPiArCXN0cnVjdCBnZG1hX2RldiAqbWRldjsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ ICsJZGV2ID0gY29udGFpbmVyX29mKGliZGV2LCBzdHJ1Y3QgbWFuYV9pYl9kZXYsIGliX2Rldik7 DQo+ID4gKwltZGV2ID0gZGV2LT5nZG1hX2RldjsNCj4gPiArDQo+ID4gKwltYW5hX2dkX2luaXRf cmVxX2hkcigmcmVxLmhkciwgR0RNQV9ERVNUUk9ZX1BELCBzaXplb2YocmVxKSwNCj4gPiArCQkJ ICAgICBzaXplb2YocmVzcCkpOw0KPiA+ICsNCj4gPiArCXJlcS5wZF9oYW5kbGUgPSBwZC0+cGRf aGFuZGxlOw0KPiA+ICsJZXJyID0gbWFuYV9nZF9zZW5kX3JlcXVlc3QobWRldi0+Z2RtYV9jb250 ZXh0LCBzaXplb2YocmVxKSwNCj4gJnJlcSwNCj4gPiArCQkJCSAgIHNpemVvZihyZXNwKSwgJnJl c3ApOw0KPiA+ICsNCj4gPiArCWlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKSB7DQo+ID4gKwkJ aWJkZXZfZGJnKCZkZXYtPmliX2RldiwNCj4gPiArCQkJICAiRmFpbGVkIHRvIGRlc3Ryb3kgcGRf aGFuZGxlIDB4JWxseCBlcnIgJWQNCj4gc3RhdHVzICV1IiwNCj4gPiArCQkJICBwZC0+cGRfaGFu ZGxlLCBlcnIsIHJlc3AuaGRyLnN0YXR1cyk7DQo+ID4gKwkJaWYgKCFlcnIpDQo+ID4gKwkJCWVy ciA9IC1FUFJPVE87DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGVycjsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBtYW5hX2dkX2Rlc3Ryb3lfZG9vcmJlbGxfcGFnZShzdHJ1 Y3QgZ2RtYV9jb250ZXh0ICpnYywNCj4gPiArCQkJCQkgaW50IGRvb3JiZWxsX3BhZ2UpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBnZG1hX2Rlc3Ryb3lfcmVzb3VyY2VfcmFuZ2VfcmVxIHJlcSA9IHt9 Ow0KPiA+ICsJc3RydWN0IGdkbWFfcmVzcF9oZHIgcmVzcCA9IHt9Ow0KPiA+ICsJaW50IGVycjsN Cj4gPiArDQo+ID4gKwltYW5hX2dkX2luaXRfcmVxX2hkcigmcmVxLmhkciwNCj4gR0RNQV9ERVNU Uk9ZX1JFU09VUkNFX1JBTkdFLA0KPiA+ICsJCQkgICAgIHNpemVvZihyZXEpLCBzaXplb2YocmVz cCkpOw0KPiA+ICsNCj4gPiArCXJlcS5yZXNvdXJjZV90eXBlID0gR0RNQV9SRVNPVVJDRV9ET09S QkVMTF9QQUdFOw0KPiA+ICsJcmVxLm51bV9yZXNvdXJjZXMgPSAxOw0KPiA+ICsJcmVxLmFsbG9j YXRlZF9yZXNvdXJjZXMgPSBkb29yYmVsbF9wYWdlOw0KPiA+ICsNCj4gPiArCWVyciA9IG1hbmFf Z2Rfc2VuZF9yZXF1ZXN0KGdjLCBzaXplb2YocmVxKSwgJnJlcSwgc2l6ZW9mKHJlc3ApLA0KPiA+ ICZyZXNwKTsNCj4gPiArCWlmIChlcnIgfHwgcmVzcC5zdGF0dXMpIHsNCj4gPiArCQlkZXZfZXJy KGdjLT5kZXYsDQo+ID4gKwkJCSJGYWlsZWQgdG8gZGVzdHJveSBkb29yYmVsbCBwYWdlOiByZXQg JWQsIDB4JXhcbiIsDQo+ID4gKwkJCWVyciwgcmVzcC5zdGF0dXMpOw0KPiA+ICsJCXJldHVybiBl cnIgPzogLUVQUk9UTzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBtYW5hX2dkX2FsbG9jYXRlX2Rvb3JiZWxsX3BhZ2Uoc3Ry dWN0IGdkbWFfY29udGV4dCAqZ2MsDQo+ID4gKwkJCQkJICBpbnQgKmRvb3JiZWxsX3BhZ2UpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBnZG1hX2FsbG9jYXRlX3Jlc291cmNlX3JhbmdlX3JlcSByZXEg PSB7fTsNCj4gPiArCXN0cnVjdCBnZG1hX2FsbG9jYXRlX3Jlc291cmNlX3JhbmdlX3Jlc3AgcmVz cCA9IHt9Ow0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwltYW5hX2dkX2luaXRfcmVxX2hk cigmcmVxLmhkciwNCj4gR0RNQV9BTExPQ0FURV9SRVNPVVJDRV9SQU5HRSwNCj4gPiArCQkJICAg ICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTsNCj4gPiArDQo+ID4gKwlyZXEucmVzb3VyY2Vf dHlwZSA9IEdETUFfUkVTT1VSQ0VfRE9PUkJFTExfUEFHRTsNCj4gPiArCXJlcS5udW1fcmVzb3Vy Y2VzID0gMTsNCj4gPiArCXJlcS5hbGlnbm1lbnQgPSAxOw0KPiA+ICsNCj4gPiArCS8qIEhhdmUg R0RNQSBzdGFydCBzZWFyY2hpbmcgZnJvbSAwICovDQo+ID4gKwlyZXEuYWxsb2NhdGVkX3Jlc291 cmNlcyA9IDA7DQo+ID4gKw0KPiA+ICsJZXJyID0gbWFuYV9nZF9zZW5kX3JlcXVlc3QoZ2MsIHNp emVvZihyZXEpLCAmcmVxLCBzaXplb2YocmVzcCksDQo+ID4gJnJlc3ApOw0KPiA+ICsJaWYgKGVy ciB8fCByZXNwLmhkci5zdGF0dXMpIHsNCj4gPiArCQlkZXZfZXJyKGdjLT5kZXYsDQo+ID4gKwkJ CSJGYWlsZWQgdG8gYWxsb2NhdGUgZG9vcmJlbGwgcGFnZTogcmV0ICVkLCAweCV4XG4iLA0KPiA+ ICsJCQllcnIsIHJlc3AuaGRyLnN0YXR1cyk7DQo+ID4gKwkJcmV0dXJuIGVyciA/OiAtRVBST1RP Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCSpkb29yYmVsbF9wYWdlID0gcmVzcC5hbGxvY2F0ZWRf cmVzb3VyY2VzOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtp bnQgbWFuYV9pYl9hbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmliY29udGV4dCwN Cj4gPiArCQkJICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0 IG1hbmFfaWJfdWNvbnRleHQgKnVjb250ZXh0ID0NCj4gPiArCQljb250YWluZXJfb2YoaWJjb250 ZXh0LCBzdHJ1Y3QgbWFuYV9pYl91Y29udGV4dCwNCj4gaWJ1Y29udGV4dCk7DQo+ID4gKwlzdHJ1 Y3QgaWJfZGV2aWNlICppYmRldiA9IGliY29udGV4dC0+ZGV2aWNlOw0KPiA+ICsJc3RydWN0IG1h bmFfaWJfZGV2ICptZGV2Ow0KPiA+ICsJc3RydWN0IGdkbWFfY29udGV4dCAqZ2M7DQo+ID4gKwlz dHJ1Y3QgZ2RtYV9kZXYgKmRldjsNCj4gPiArCWludCBkb29yYmVsbF9wYWdlOw0KPiA+ICsJaW50 IHJldDsNCj4gPiArDQo+ID4gKwltZGV2ID0gY29udGFpbmVyX29mKGliZGV2LCBzdHJ1Y3QgbWFu YV9pYl9kZXYsIGliX2Rldik7DQo+ID4gKwlkZXYgPSBtZGV2LT5nZG1hX2RldjsNCj4gPiArCWdj ID0gZGV2LT5nZG1hX2NvbnRleHQ7DQo+ID4gKw0KPiA+ICsJLyogQWxsb2NhdGUgYSBkb29yYmVs bCBwYWdlIGluZGV4ICovDQo+ID4gKwlyZXQgPSBtYW5hX2dkX2FsbG9jYXRlX2Rvb3JiZWxsX3Bh Z2UoZ2MsICZkb29yYmVsbF9wYWdlKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlpYmRldl9k YmcoaWJkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZG9vcmJlbGwgcGFnZSAlZFxuIiwNCj4gcmV0 KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWliZGV2X2RiZyhp YmRldiwgIkRvb3JiZWxsIHBhZ2UgYWxsb2NhdGVkICVkXG4iLCBkb29yYmVsbF9wYWdlKTsNCj4g PiArDQo+ID4gKwl1Y29udGV4dC0+ZG9vcmJlbGwgPSBkb29yYmVsbF9wYWdlOw0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG1hbmFfaWJfZGVhbGxvY191 Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmliY29udGV4dCkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IG1hbmFfaWJfdWNvbnRleHQgKm1hbmFfdWNvbnRleHQgPQ0KPiA+ICsJCWNvbnRhaW5lcl9v ZihpYmNvbnRleHQsIHN0cnVjdCBtYW5hX2liX3Vjb250ZXh0LA0KPiBpYnVjb250ZXh0KTsNCj4g PiArCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gaWJjb250ZXh0LT5kZXZpY2U7DQo+ID4gKwlz dHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXY7DQo+ID4gKwlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYzsN Cj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJbWRldiA9IGNvbnRhaW5lcl9vZihpYmRldiwg c3RydWN0IG1hbmFfaWJfZGV2LCBpYl9kZXYpOw0KPiA+ICsJZ2MgPSBtZGV2LT5nZG1hX2Rldi0+ Z2RtYV9jb250ZXh0Ow0KPiA+ICsNCj4gPiArCXJldCA9IG1hbmFfZ2RfZGVzdHJveV9kb29yYmVs bF9wYWdlKGdjLCBtYW5hX3Vjb250ZXh0LQ0KPiA+ZG9vcmJlbGwpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlpYmRldl9kYmcoaWJkZXYsICJGYWlsZWQgdG8gZGVzdHJveSBkb29yYmVsbCBwYWdl ICVkXG4iLA0KPiByZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9nZF9jcmVh dGVfZG1hX3JlZ2lvbihzdHJ1Y3QgbWFuYV9pYl9kZXYgKmRldiwgc3RydWN0DQo+IGliX3VtZW0N Cj4gPiAqdW1lbSwNCj4gPiArCQkJCSBtYW5hX2hhbmRsZV90ICpnZG1hX3JlZ2lvbikNCj4gPiAr ew0KPiA+ICsJc3RydWN0IGdkbWFfZG1hX3JlZ2lvbl9hZGRfcGFnZXNfcmVxICphZGRfcmVxID0g TlVMTDsNCj4gPiArCXN0cnVjdCBnZG1hX2NyZWF0ZV9kbWFfcmVnaW9uX3Jlc3AgY3JlYXRlX3Jl c3AgPSB7fTsNCj4gPiArCXN0cnVjdCBnZG1hX2NyZWF0ZV9kbWFfcmVnaW9uX3JlcSAqY3JlYXRl X3JlcTsNCj4gPiArCXNpemVfdCBudW1fcGFnZXNfY3VyLCBudW1fcGFnZXNfdG9faGFuZGxlOw0K PiA+ICsJdW5zaWduZWQgaW50IGNyZWF0ZV9yZXFfbXNnX3NpemU7DQo+ID4gKwlzdHJ1Y3QgaHdf Y2hhbm5lbF9jb250ZXh0ICpod2M7DQo+ID4gKwlzdHJ1Y3QgaWJfYmxvY2tfaXRlciBiaXRlcjsN Cj4gPiArCXNpemVfdCBtYXhfcGdzX2NyZWF0ZV9jbWQ7DQo+ID4gKwlzdHJ1Y3QgZ2RtYV9jb250 ZXh0ICpnYzsNCj4gPiArCXNpemVfdCBudW1fcGFnZXNfdG90YWw7DQo+ID4gKwlzdHJ1Y3QgZ2Rt YV9kZXYgKm1kZXY7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHBhZ2Vfc3o7DQo+ID4gKwl2b2lkICpy ZXF1ZXN0X2J1ZjsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsJaW50IGVycjsNCj4gPiAr DQo+ID4gKwltZGV2ID0gZGV2LT5nZG1hX2RldjsNCj4gPiArCWdjID0gbWRldi0+Z2RtYV9jb250 ZXh0Ow0KPiA+ICsJaHdjID0gZ2MtPmh3Yy5kcml2ZXJfZGF0YTsNCj4gPiArDQo+ID4gKwkvKiBI YXJkd2FyZSByZXF1aXJlcyBkbWEgcmVnaW9uIHRvIGFsaWduIHRvIGNob3NlbiBwYWdlIHNpemUg Ki8NCj4gPiArCXBhZ2Vfc3ogPSBpYl91bWVtX2ZpbmRfYmVzdF9wZ3N6KHVtZW0sIFBBR0VfU1pf Qk0sIDApOw0KPiA+ICsJaWYgKCFwYWdlX3N6KSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZkZXYtPmli X2RldiwgImZhaWxlZCB0byBmaW5kIHBhZ2Ugc2l6ZS5cbiIpOw0KPiA+ICsJCXJldHVybiAtRU5P TUVNOw0KPiA+ICsJfQ0KPiA+ICsJbnVtX3BhZ2VzX3RvdGFsID0gaWJfdW1lbV9udW1fZG1hX2Js b2Nrcyh1bWVtLCBwYWdlX3N6KTsNCj4gPiArDQo+ID4gKwltYXhfcGdzX2NyZWF0ZV9jbWQgPQ0K PiA+ICsJCShod2MtPm1heF9yZXFfbXNnX3NpemUgLSBzaXplb2YoKmNyZWF0ZV9yZXEpKSAvDQo+ IHNpemVvZih1NjQpOw0KPiA+ICsJbnVtX3BhZ2VzX3RvX2hhbmRsZSA9DQo+ID4gKwkJbWluX3Qo c2l6ZV90LCBudW1fcGFnZXNfdG90YWwsIG1heF9wZ3NfY3JlYXRlX2NtZCk7DQo+ID4gKwljcmVh dGVfcmVxX21zZ19zaXplID0NCj4gPiArCQlzdHJ1Y3Rfc2l6ZShjcmVhdGVfcmVxLCBwYWdlX2Fk ZHJfbGlzdCwNCj4gbnVtX3BhZ2VzX3RvX2hhbmRsZSk7DQo+ID4gKw0KPiA+ICsJcmVxdWVzdF9i dWYgPSBremFsbG9jKGh3Yy0+bWF4X3JlcV9tc2dfc2l6ZSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlp ZiAoIXJlcXVlc3RfYnVmKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWNy ZWF0ZV9yZXEgPSByZXF1ZXN0X2J1ZjsNCj4gPiArCW1hbmFfZ2RfaW5pdF9yZXFfaGRyKCZjcmVh dGVfcmVxLT5oZHIsDQo+IEdETUFfQ1JFQVRFX0RNQV9SRUdJT04sDQo+ID4gKwkJCSAgICAgY3Jl YXRlX3JlcV9tc2dfc2l6ZSwgc2l6ZW9mKGNyZWF0ZV9yZXNwKSk7DQo+ID4gKw0KPiA+ICsJY3Jl YXRlX3JlcS0+bGVuZ3RoID0gdW1lbS0+bGVuZ3RoOw0KPiA+ICsJY3JlYXRlX3JlcS0+b2Zmc2V0 X2luX3BhZ2UgPSB1bWVtLT5hZGRyZXNzICYgKHBhZ2Vfc3ogLSAxKTsNCj4gPiArCWNyZWF0ZV9y ZXEtPmdkbWFfcGFnZV90eXBlID0gb3JkZXJfYmFzZV8yKHBhZ2Vfc3opIC0NCj4gUEFHRV9TSElG VDsNCj4gPiArCWNyZWF0ZV9yZXEtPnBhZ2VfY291bnQgPSBudW1fcGFnZXNfdG90YWw7DQo+ID4g KwljcmVhdGVfcmVxLT5wYWdlX2FkZHJfbGlzdF9sZW4gPSBudW1fcGFnZXNfdG9faGFuZGxlOw0K PiA+ICsNCj4gPiArCWliZGV2X2RiZygmZGV2LT5pYl9kZXYsICJzaXplX2RtYV9yZWdpb24gJWx1 DQo+IG51bV9wYWdlc190b3RhbCAlbHVcbiIsDQo+ID4gKwkJICB1bWVtLT5sZW5ndGgsIG51bV9w YWdlc190b3RhbCk7DQo+ID4gKw0KPiA+ICsJaWJkZXZfZGJnKCZkZXYtPmliX2RldiwgInBhZ2Vf c3ogJWx1IG9mZnNldF9pbl9wYWdlICV1XG4iLA0KPiA+ICsJCSAgcGFnZV9zeiwgY3JlYXRlX3Jl cS0+b2Zmc2V0X2luX3BhZ2UpOw0KPiA+ICsNCj4gPiArCWliZGV2X2RiZygmZGV2LT5pYl9kZXYs ICJudW1fcGFnZXNfdG9faGFuZGxlICVsdSwNCj4gZ2RtYV9wYWdlX3R5cGUgJXUiLA0KPiA+ICsJ CSAgbnVtX3BhZ2VzX3RvX2hhbmRsZSwgY3JlYXRlX3JlcS0+Z2RtYV9wYWdlX3R5cGUpOw0KPiA+ ICsNCj4gPiArCV9fcmRtYV91bWVtX2Jsb2NrX2l0ZXJfc3RhcnQoJmJpdGVyLCB1bWVtLCBwYWdl X3N6KTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzX3RvX2hhbmRsZTsg KytpKSB7DQo+ID4gKwkJZG1hX2FkZHJfdCBjdXJfYWRkcjsNCj4gPiArDQo+ID4gKwkJX19yZG1h X2Jsb2NrX2l0ZXJfbmV4dCgmYml0ZXIpOw0KPiA+ICsJCWN1cl9hZGRyID0gcmRtYV9ibG9ja19p dGVyX2RtYV9hZGRyZXNzKCZiaXRlcik7DQo+ID4gKw0KPiA+ICsJCWNyZWF0ZV9yZXEtPnBhZ2Vf YWRkcl9saXN0W2ldID0gY3VyX2FkZHI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXJyID0gbWFu YV9nZF9zZW5kX3JlcXVlc3QoZ2MsIGNyZWF0ZV9yZXFfbXNnX3NpemUsIGNyZWF0ZV9yZXEsDQo+ ID4gKwkJCQkgICBzaXplb2YoY3JlYXRlX3Jlc3ApLCAmY3JlYXRlX3Jlc3ApOw0KPiA+ICsJaWYg KGVyciB8fCBjcmVhdGVfcmVzcC5oZHIuc3RhdHVzKSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZkZXYt PmliX2RldiwNCj4gPiArCQkJICAiRmFpbGVkIHRvIGNyZWF0ZSBETUEgcmVnaW9uOiAlZCwgMHgl eFxuIiwgZXJyLA0KPiA+ICsJCQkgIGNyZWF0ZV9yZXNwLmhkci5zdGF0dXMpOw0KPiA+ICsJCWlm ICghZXJyKQ0KPiA+ICsJCQllcnIgPSAtRVBST1RPOw0KPiA+ICsNCj4gPiArCQlnb3RvIG91dDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwkqZ2RtYV9yZWdpb24gPSBjcmVhdGVfcmVzcC5kbWFfcmVn aW9uX2hhbmRsZTsNCj4gPiArCWliZGV2X2RiZygmZGV2LT5pYl9kZXYsICJDcmVhdGVkIERNQSBy ZWdpb24gd2l0aCBoYW5kbGUNCj4gMHglbGx4XG4iLA0KPiA+ICsJCSAgKmdkbWFfcmVnaW9uKTsN Cj4gPiArDQo+ID4gKwludW1fcGFnZXNfY3VyID0gbnVtX3BhZ2VzX3RvX2hhbmRsZTsNCj4gPiAr DQo+ID4gKwlpZiAobnVtX3BhZ2VzX2N1ciA8IG51bV9wYWdlc190b3RhbCkgew0KPiA+ICsJCXVu c2lnbmVkIGludCBhZGRfcmVxX21zZ19zaXplOw0KPiA+ICsJCXNpemVfdCBtYXhfcGdzX2FkZF9j bWQgPQ0KPiA+ICsJCQkoaHdjLT5tYXhfcmVxX21zZ19zaXplIC0gc2l6ZW9mKCphZGRfcmVxKSkg Lw0KPiA+ICsJCQlzaXplb2YodTY0KTsNCj4gPiArDQo+ID4gKwkJbnVtX3BhZ2VzX3RvX2hhbmRs ZSA9DQo+ID4gKwkJCW1pbl90KHNpemVfdCwgbnVtX3BhZ2VzX3RvdGFsIC0gbnVtX3BhZ2VzX2N1 ciwNCj4gPiArCQkJICAgICAgbWF4X3Bnc19hZGRfY21kKTsNCj4gPiArDQo+ID4gKwkJLyogQ2Fs Y3VsYXRlIHRoZSBtYXggbnVtIG9mIHBhZ2VzIHRoYXQgd2lsbCBiZSBoYW5kbGVkICovDQo+ID4g KwkJYWRkX3JlcV9tc2dfc2l6ZSA9IHN0cnVjdF9zaXplKGFkZF9yZXEsIHBhZ2VfYWRkcl9saXN0 LA0KPiA+ICsJCQkJCSAgICAgICBudW1fcGFnZXNfdG9faGFuZGxlKTsNCj4gPiArCQlhZGRfcmVx ID0gcmVxdWVzdF9idWY7DQo+ID4gKw0KPiA+ICsJCXdoaWxlIChudW1fcGFnZXNfY3VyIDwgbnVt X3BhZ2VzX3RvdGFsKSB7DQo+ID4gKwkJCXN0cnVjdCBnZG1hX2dlbmVyYWxfcmVzcCBhZGRfcmVz cCA9IHt9Ow0KPiA+ICsJCQl1MzIgZXhwZWN0ZWRfc3RhdHVzID0gMDsNCj4gPiArDQo+ID4gKwkJ CWlmIChudW1fcGFnZXNfY3VyICsgbnVtX3BhZ2VzX3RvX2hhbmRsZSA8DQo+ID4gKwkJCSAgICBu dW1fcGFnZXNfdG90YWwpIHsNCj4gPiArCQkJCS8qIFN0YXR1cyBpbmRpY2F0aW5nIG1vcmUgcGFn ZXMgYXJlIG5lZWRlZA0KPiAqLw0KPiA+ICsJCQkJZXhwZWN0ZWRfc3RhdHVzID0NCj4gR0RNQV9T VEFUVVNfTU9SRV9FTlRSSUVTOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQltZW1zZXQoYWRk X3JlcSwgMCwgYWRkX3JlcV9tc2dfc2l6ZSk7DQo+ID4gKw0KPiA+ICsJCQltYW5hX2dkX2luaXRf cmVxX2hkcigmYWRkX3JlcS0+aGRyLA0KPiA+ICsNCj4gR0RNQV9ETUFfUkVHSU9OX0FERF9QQUdF UywNCj4gPiArCQkJCQkgICAgIGFkZF9yZXFfbXNnX3NpemUsDQo+ID4gKwkJCQkJICAgICBzaXpl b2YoYWRkX3Jlc3ApKTsNCj4gPiArCQkJYWRkX3JlcS0+ZG1hX3JlZ2lvbl9oYW5kbGUgPSAqZ2Rt YV9yZWdpb247DQo+ID4gKwkJCWFkZF9yZXEtPnBhZ2VfYWRkcl9saXN0X2xlbiA9DQo+IG51bV9w YWdlc190b19oYW5kbGU7DQo+ID4gKw0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2Vz X3RvX2hhbmRsZTsgKytpKSB7DQo+ID4gKwkJCQlkbWFfYWRkcl90IGN1cl9hZGRyID0NCj4gPiAr DQo+IAlyZG1hX2Jsb2NrX2l0ZXJfZG1hX2FkZHJlc3MoJmJpdGVyKTsNCj4gPiArCQkJCWFkZF9y ZXEtPnBhZ2VfYWRkcl9saXN0W2ldID0gY3VyX2FkZHI7DQo+ID4gKwkJCQlfX3JkbWFfYmxvY2tf aXRlcl9uZXh0KCZiaXRlcik7DQo+ID4gKw0KPiA+ICsJCQkJaWJkZXZfZGJnKCZkZXYtPmliX2Rl diwNCj4gPiArCQkJCQkgICJwYWdlX2FkZHJfbGlzdCAlbHUgYWRkciAweCVsbHhcbiIsDQo+ID4g KwkJCQkJICBudW1fcGFnZXNfY3VyICsgaSwgY3VyX2FkZHIpOw0KPiA+ICsJCQl9DQo+ID4gKw0K PiA+ICsJCQllcnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgYWRkX3JlcV9tc2dfc2l6ZSwN Cj4gPiArCQkJCQkJICAgYWRkX3JlcSwgc2l6ZW9mKGFkZF9yZXNwKSwNCj4gPiArCQkJCQkJICAg JmFkZF9yZXNwKTsNCj4gPiArCQkJaWYgKGVyciB8fCBhZGRfcmVzcC5oZHIuc3RhdHVzICE9IGV4 cGVjdGVkX3N0YXR1cykgew0KPiA+ICsJCQkJaWJkZXZfZGJnKCZkZXYtPmliX2RldiwNCj4gPiAr CQkJCQkgICJGYWlsZWQgcHV0IERNQQ0KPiBwYWdlcyAldTogJWQsMHgleFxuIiwNCj4gPiArCQkJ CQkgIGksIGVyciwgYWRkX3Jlc3AuaGRyLnN0YXR1cyk7DQo+ID4gKwkJCQllcnIgPSAtRVBST1RP Ow0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCW51bV9wYWdlc19j dXIgKz0gbnVtX3BhZ2VzX3RvX2hhbmRsZTsNCj4gPiArCQkJbnVtX3BhZ2VzX3RvX2hhbmRsZSA9 DQo+ID4gKwkJCQltaW5fdChzaXplX3QsIG51bV9wYWdlc190b3RhbCAtDQo+IG51bV9wYWdlc19j dXIsDQo+ID4gKwkJCQkgICAgICBtYXhfcGdzX2FkZF9jbWQpOw0KPiA+ICsJCQlhZGRfcmVxX21z Z19zaXplID0gc2l6ZW9mKCphZGRfcmVxKSArDQo+ID4gKwkJCQkJICAgbnVtX3BhZ2VzX3RvX2hh bmRsZSAqDQo+IHNpemVvZih1NjQpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlp ZiAoZXJyKQ0KPiA+ICsJCW1hbmFfaWJfZ2RfZGVzdHJveV9kbWFfcmVnaW9uKGRldiwNCj4gPiBj cmVhdGVfcmVzcC5kbWFfcmVnaW9uX2hhbmRsZSk7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKwlr ZnJlZShyZXF1ZXN0X2J1Zik7DQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtpbnQgbWFuYV9pYl9nZF9kZXN0cm95X2RtYV9yZWdpb24oc3RydWN0IG1hbmFfaWJfZGV2ICpk ZXYsIHU2NA0KPiA+IGdkbWFfcmVnaW9uKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZ2RtYV9kZXYg Km1kZXYgPSBkZXYtPmdkbWFfZGV2Ow0KPiA+ICsJc3RydWN0IGdkbWFfY29udGV4dCAqZ2M7DQo+ ID4gKw0KPiA+ICsJZ2MgPSBtZGV2LT5nZG1hX2NvbnRleHQ7DQo+ID4gKwlpYmRldl9kYmcoJmRl di0+aWJfZGV2LCAiZGVzdHJveSBkbWEgcmVnaW9uIDB4JWxseFxuIiwNCj4gZ2RtYV9yZWdpb24p Ow0KPiA+ICsNCj4gPiArCXJldHVybiBtYW5hX2dkX2Rlc3Ryb3lfZG1hX3JlZ2lvbihnYywgZ2Rt YV9yZWdpb24pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9tbWFwKHN0cnVjdCBp Yl91Y29udGV4dCAqaWJjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QNCj4gPiAqdm1hKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl91Y29udGV4dCAqbWFuYV91Y29udGV4dCA9DQo+ ID4gKwkJY29udGFpbmVyX29mKGliY29udGV4dCwgc3RydWN0IG1hbmFfaWJfdWNvbnRleHQsDQo+ IGlidWNvbnRleHQpOw0KPiA+ICsJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBpYmNvbnRleHQt PmRldmljZTsNCj4gPiArCXN0cnVjdCBtYW5hX2liX2RldiAqbWRldjsNCj4gPiArCXN0cnVjdCBn ZG1hX2NvbnRleHQgKmdjOw0KPiA+ICsJcGh5c19hZGRyX3QgcGZuOw0KPiA+ICsJcGdwcm90X3Qg cHJvdDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJbWRldiA9IGNvbnRhaW5lcl9vZihp YmRldiwgc3RydWN0IG1hbmFfaWJfZGV2LCBpYl9kZXYpOw0KPiA+ICsJZ2MgPSBtZGV2LT5nZG1h X2Rldi0+Z2RtYV9jb250ZXh0Ow0KPiA+ICsNCj4gPiArCWlmICh2bWEtPnZtX3Bnb2ZmICE9IDAp IHsNCj4gPiArCQlpYmRldl9kYmcoaWJkZXYsICJVbmV4cGVjdGVkIHZtX3Bnb2ZmICVsdVxuIiwg dm1hLQ0KPiA+dm1fcGdvZmYpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCS8qIE1hcCB0byB0aGUgcGFnZSBpbmRleGVkIGJ5IHVjb250ZXh0LT5kb29yYmVs bCAqLw0KPiA+ICsJcGZuID0gKGdjLT5waHlzX2RiX3BhZ2VfYmFzZSArDQo+ID4gKwkgICAgICAg Z2MtPmRiX3BhZ2Vfc2l6ZSAqIG1hbmFfdWNvbnRleHQtPmRvb3JiZWxsKSA+Pg0KPiA+ICsJICAg ICAgUEFHRV9TSElGVDsNCj4gPiArCXByb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1f cGFnZV9wcm90KTsNCj4gPiArDQo+ID4gKwlyZXQgPSByZG1hX3VzZXJfbW1hcF9pbyhpYmNvbnRl eHQsIHZtYSwgcGZuLCBnYy0+ZGJfcGFnZV9zaXplLA0KPiBwcm90LA0KPiA+ICsJCQkJTlVMTCk7 DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWliZGV2X2RiZyhpYmRldiwgImNhbid0IHJkbWFfdXNl cl9tbWFwX2lvIHJldCAlZFxuIiwNCj4gcmV0KTsNCj4gPiArCWVsc2UNCj4gPiArCQlpYmRldl9k YmcoaWJkZXYsICJtYXBwZWQgSS9PIHBmbiAweCVsbHggcGFnZV9zaXplICV1LA0KPiByZXQgJWRc biIsDQo+ID4gKwkJCSAgcGZuLCBnYy0+ZGJfcGFnZV9zaXplLCByZXQpOw0KPiA+ICsNCj4gPiAr CXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBtYW5hX2liX2dldF9wb3J0X2lt bXV0YWJsZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnRfbnVtLA0KPiA+ICsJCQkg ICAgICAgc3RydWN0IGliX3BvcnRfaW1tdXRhYmxlICppbW11dGFibGUpDQo+ID4gK3sNCj4gPiAr CS8qDQo+ID4gKwkgKiBUaGlzIHZlcnNpb24gb25seSBzdXBwb3J0IFJBV19QQUNLRVQNCj4gPiAr CSAqIG90aGVyIHZhbHVlcyBuZWVkIHRvIGJlIGZpbGxlZCBmb3Igb3RoZXIgdHlwZXMNCj4gPiAr CSAqLw0KPiA+ICsJaW1tdXRhYmxlLT5jb3JlX2NhcF9mbGFncyA9IFJETUFfQ09SRV9QT1JUX1JB V19QQUNLRVQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2lu dCBtYW5hX2liX3F1ZXJ5X2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IGli X2RldmljZV9hdHRyDQo+ID4gKnByb3BzLA0KPiA+ICsJCQkgc3RydWN0IGliX3VkYXRhICp1aHcp DQo+ID4gK3sNCj4gPiArCXByb3BzLT5tYXhfcXAgPSBNQU5BX01BWF9OVU1fUVVFVUVTOw0KPiAN Cj4gVGhpcyByZXNvdXJjZSBsaW1pdCBpcyBkZWZpbmVkLCBidXQgbm90IGVuZm9yY2VkIGR1cmlu ZyBRUCBjcmVhdGlvbiwNCj4gc28gdGhlcmUgaXMgbm8gbGltaXQgb24gbnVtYmVyIG9mIFFQcz8N Cg0KVGhlIGxpbWl0IGlzIGVuZm9yY2VkIGJ5IHRoZSBQRiB3aGVuIGNhbGxpbmcgbWFuYV9jcmVh dGVfd3Ffb2JqKCkuIA0KDQo+IA0KPiBJbiBnZW5lcmFsLCB0aGUgZHJpdmVyIHNlZW0gdG8gYmUg cmF0aGVyIGxhenkgcmVnYXJkaW5nDQo+IGRldmljZSByZXNvdXJjZSBsaW1pdHMgcmVwb3J0aW5n LiBPbmx5IGEgdmVyeSBsaW1pdGVkIG51bWJlcg0KPiBvZiBpYl9kZXZpY2VfYXR0ciBnZXRzIHNl dC4gSSdkIGV4cGVjdCB0byBzZWUgYWxsIG90aGVyIHZhbHVlcw0KPiB0byBiZSB6ZXJvZWQgb3V0 Lg0KDQpUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBzdXBwb3J0cyBSQVdfUVAuIEFsbCB0aGUg bmVjZXNzYXJ5DQpyZXNvdXJjZSBsaW1pdHMgYXJlIGV4cG9zZWQgZm9yIHRoZSB1c2VyLW1vZGUg dG8gY3JlYXRlIHRoaXMgUVAgdHlwZS4NCkFzIHdlIGFyZSBhZGRpbmcgUkNfUVAgc3VwcG9ydCwg b3RoZXIgcmVxdWlyZWQgcmVzb3VyY2UgbGltaXRzIHdpbGwgYmUgcmVwb3J0ZWQuDQoNCj4gDQo+ IA0KPiA+ICsJcHJvcHMtPm1heF9xcF93ciA9IE1BWF9TRU5EX0JVRkZFUlNfUEVSX1FVRVVFOw0K PiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBtYXhfY3FlIGNvdWxkIGJlIHBvdGVudGlhbGx5IG11 Y2ggYmlnZ2VyLg0KPiA+ICsJICogQXMgdGhpcyB2ZXJzaW9uIG9mIGRyaXZlciBvbmx5IHN1cHBv cnQgUkFXIFFQLCBzZXQgaXQgdG8gdGhlIHNhbWUNCj4gPiArCSAqIHZhbHVlIGFzIG1heF9xcF93 cg0KPiA+ICsJICovDQo+ID4gKwlwcm9wcy0+bWF4X2NxZSA9IE1BWF9TRU5EX0JVRkZFUlNfUEVS X1FVRVVFOw0KPiA+ICsNCj4gPiArCXByb3BzLT5tYXhfbXJfc2l6ZSA9IE1BTkFfSUJfTUFYX01S X1NJWkU7DQo+ID4gKwlwcm9wcy0+bWF4X21yID0gSU5UX01BWDsNCj4gDQo+IEhvdyB0aGUgMjQg Yml0IHdpZGUgTVIga2V5cyBjYW4gaGFuZGxlIElOVF9NQVggdW5pcXVlDQo+IE1SJ3M/DQoNCk5v dCBzdXJlIGlmIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgbGtleSBhbmQgcmtleSBhcmUg dTMyIGluIGliX21yLg0KDQo+IA0KPiA+ICsJcHJvcHMtPm1heF9zZW5kX3NnZSA9IE1BWF9UWF9X UUVfU0dMX0VOVFJJRVM7DQo+ID4gKwlwcm9wcy0+bWF4X3JlY3Zfc2dlID0gTUFYX1JYX1dRRV9T R0xfRU5UUklFUzsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr aW50IG1hbmFfaWJfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQs DQo+ID4gKwkJICAgICAgIHN0cnVjdCBpYl9wb3J0X2F0dHIgKnByb3BzKQ0KPiA+ICt7DQo+ID4g KwkvKiBUaGlzIHZlcnNpb24gZG9lc24ndCByZXR1cm4gcG9ydCBwcm9wZXJ0aWVzICovDQo+ID4g KwlyZXR1cm4gMDsNCj4gDQo+IFdoaWxlIEkgdW5kZXJzdGFuZCB0aGUgZHJpdmVyIGlzIGN1cnJl bnRseSB1c2VkIGluIGEgcHJvcHJpZXRhcnkNCj4gZW52aXJvbm1lbnQgb25seSwgd2hlcmUgZXZl biB0aGUgcG9ydCBzdGF0ZSBzZWVtIG5vdCB0byBtYXR0ZXIsDQo+IEkgYW0gbm90IHN1cmUgdGhp cyBsb29rcyBnb29kLiBTaG91bGRuJ3QgdGhlIGRyaXZlciBiZXR0ZXIgYWRoZXJlDQo+IHRvIGJh c2ljIGFzc3VtcHRpb25zIG9mIGl0cyBSRE1BIGNvcmUgZW52aXJvbm1lbnQ/DQo+IA0KDQpUaGUg dXNlciBzcGFjZSBjb2RlIGlzIGZvciBEUERLLiBUaGV5IGFyZSBhdDoNCmh0dHBzOi8vZ2l0aHVi LmNvbS9EUERLL2RwZGsvdHJlZS9tYWluL2RyaXZlcnMvbmV0L21hbmENCg0KVGhlIFJBV19RUCBp bXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhbGwgbmVjZXNzYXJ5IHZhbHVlcyBmb3INCml0cyB0YXJn ZXRlZCB1c2FnZS4gSSdtIG5vdCBhd2FyZSBvZiBtYW5kYXRvcnkgdmFsdWVzIHRoYXQgDQpzaG91 bGQgYmUgcmVwb3J0ZWQgYWNjb3JkaW5nIHRvIFJETUEgdmVyYnMgaW50ZXJmYWNlIHNwZWMuDQpJ ZiB0aGVyZSBhcmUgbWFuZGF0b3J5IHJlcXVpcmVkIHZhbHVlcywgcGxlYXNlIHBvaW50IG1lIHRv IHRoZSBzcGVjLA0KSSB3aWxsIGFkZCB0aG9zZSB0byB0aGUgZHJpdmVyLg0KDQpUaGFua3MsDQpM b25nDQoNCg0KPiANCj4gVGhhbmtzLA0KPiBCZXJuYXJkLg0KPiA+ICt9DQo+ID4gKw0KPiA+ICtp bnQgbWFuYV9pYl9xdWVyeV9naWQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LCBp bnQgaW5kZXgsDQo+ID4gKwkJICAgICAgdW5pb24gaWJfZ2lkICpnaWQpDQo+ID4gK3sNCj4gPiAr CS8qIFRoaXMgdmVyc2lvbiBkb2Vzbid0IHJldHVybiBHSUQgcHJvcGVydGllcyAqLw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgbWFuYV9pYl9kaXNhc3NvY2lhdGVf dWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYmNvbnRleHQpDQo+ID4gK3sNCj4gPiArfQ0K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYW5hX2liLmgNCj4g PiBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21hbmFfaWIuaA0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4zMDI1ZTk5ODViNDUNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFuYV9pYi5o DQo+ID4gQEAgLTAsMCArMSwxNTYgQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seSAqLw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgTWlj cm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKi8NCj4gPiAr DQo+ID4gKyNpZm5kZWYgX01BTkFfSUJfSF8NCj4gPiArI2RlZmluZSBfTUFOQV9JQl9IXw0KPiA+ ICsNCj4gPiArI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4NCj4gPiArI2luY2x1ZGUgPHJkbWEv aWJfbWFkLmg+DQo+ID4gKyNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4NCj4gPiArI2luY2x1ZGUg PHJkbWEvbWFuYS1hYmkuaD4NCj4gPiArI2luY2x1ZGUgPHJkbWEvdXZlcmJzX2lvY3RsLmg+DQo+ ID4gKw0KPiA+ICsjaW5jbHVkZSA8bmV0L21hbmEvbWFuYS5oPg0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQUdFX1NaX0JNDQo+ID4gXA0KPiA+ICsJKFNaXzRLIHwgU1pfOEsgfCBTWl8xNksgfCBTWl8z MksgfCBTWl82NEsgfCBTWl8xMjhLIHwgU1pfMjU2SyB8DQo+ID4gXA0KPiA+ICsJIFNaXzUxMksg fCBTWl8xTSB8IFNaXzJNKQ0KPiA+ICsNCj4gPiArLyogTUFOQSBkb2Vzbid0IGhhdmUgYW55IGxp bWl0IGZvciBNUiBzaXplICovDQo+ID4gKyNkZWZpbmUgTUFOQV9JQl9NQVhfTVJfU0laRQlVNjRf TUFYDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbWFuYV9pYl9kZXYgew0KPiA+ICsJc3RydWN0IGliX2Rl dmljZSBpYl9kZXY7DQo+ID4gKwlzdHJ1Y3QgZ2RtYV9kZXYgKmdkbWFfZGV2Ow0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RydWN0IG1hbmFfaWJfd3Egew0KPiA+ICsJc3RydWN0IGliX3dxIGlid3E7 DQo+ID4gKwlzdHJ1Y3QgaWJfdW1lbSAqdW1lbTsNCj4gPiArCWludCB3cWU7DQo+ID4gKwl1MzIg d3FfYnVmX3NpemU7DQo+ID4gKwl1NjQgZ2RtYV9yZWdpb247DQo+ID4gKwl1NjQgaWQ7DQo+ID4g KwltYW5hX2hhbmRsZV90IHJ4X29iamVjdDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBt YW5hX2liX3BkIHsNCj4gPiArCXN0cnVjdCBpYl9wZCBpYnBkOw0KPiA+ICsJdTMyIHBkbjsNCj4g PiArCW1hbmFfaGFuZGxlX3QgcGRfaGFuZGxlOw0KPiA+ICsNCj4gPiArCS8qIE11dGV4IGZvciBz aGFyaW5nIGFjY2VzcyB0byB2cG9ydF91c2VfY291bnQgKi8NCj4gPiArCXN0cnVjdCBtdXRleCB2 cG9ydF9tdXRleDsNCj4gPiArCWludCB2cG9ydF91c2VfY291bnQ7DQo+ID4gKw0KPiA+ICsJYm9v bCB0eF9zaG9ydGZvcm1fYWxsb3dlZDsNCj4gPiArCXUzMiB0eF92cF9vZmZzZXQ7DQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbWFuYV9pYl9tciB7DQo+ID4gKwlzdHJ1Y3QgaWJfbXIgaWJt cjsNCj4gPiArCXN0cnVjdCBpYl91bWVtICp1bWVtOw0KPiA+ICsJbWFuYV9oYW5kbGVfdCBtcl9o YW5kbGU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbWFuYV9pYl9jcSB7DQo+ID4gKwlz dHJ1Y3QgaWJfY3EgaWJjcTsNCj4gPiArCXN0cnVjdCBpYl91bWVtICp1bWVtOw0KPiA+ICsJaW50 IGNxZTsNCj4gPiArCXU2NCBnZG1hX3JlZ2lvbjsNCj4gPiArCXU2NCBpZDsNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0cnVjdCBtYW5hX2liX3FwIHsNCj4gPiArCXN0cnVjdCBpYl9xcCBpYnFwOw0K PiA+ICsNCj4gPiArCS8qIFdvcmsgcXVldWUgaW5mbyAqLw0KPiA+ICsJc3RydWN0IGliX3VtZW0g KnNxX3VtZW07DQo+ID4gKwlpbnQgc3FlOw0KPiA+ICsJdTY0IHNxX2dkbWFfcmVnaW9uOw0KPiA+ ICsJdTY0IHNxX2lkOw0KPiA+ICsJbWFuYV9oYW5kbGVfdCB0eF9vYmplY3Q7DQo+ID4gKw0KPiA+ ICsJLyogVGhlIHBvcnQgb24gdGhlIElCIGRldmljZSwgc3RhcnRpbmcgd2l0aCAxICovDQo+ID4g Kwl1MzIgcG9ydDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBtYW5hX2liX3Vjb250ZXh0 IHsNCj4gPiArCXN0cnVjdCBpYl91Y29udGV4dCBpYnVjb250ZXh0Ow0KPiA+ICsJdTMyIGRvb3Ji ZWxsOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IG1hbmFfaWJfcndxX2luZF90YWJsZSB7 DQo+ID4gKwlzdHJ1Y3QgaWJfcndxX2luZF90YWJsZSBpYl9pbmRfdGFibGU7DQo+ID4gK307DQo+ ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgbWFuYV9p Yl9kZXYgKmRldiwgc3RydWN0DQo+IGliX3VtZW0NCj4gPiAqdW1lbSwNCj4gPiArCQkJCSBtYW5h X2hhbmRsZV90ICpnZG1hX3JlZ2lvbik7DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9nZF9kZXN0 cm95X2RtYV9yZWdpb24oc3RydWN0IG1hbmFfaWJfZGV2ICpkZXYsDQo+ID4gKwkJCQkgIG1hbmFf aGFuZGxlX3QgZ2RtYV9yZWdpb24pOw0KPiA+ICsNCj4gPiArc3RydWN0IGliX3dxICptYW5hX2li X2NyZWF0ZV93cShzdHJ1Y3QgaWJfcGQgKnBkLA0KPiA+ICsJCQkJc3RydWN0IGliX3dxX2luaXRf YXR0ciAqaW5pdF9hdHRyLA0KPiA+ICsJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7DQo+ID4g Kw0KPiA+ICtpbnQgbWFuYV9pYl9tb2RpZnlfd3Eoc3RydWN0IGliX3dxICp3cSwgc3RydWN0IGli X3dxX2F0dHIgKndxX2F0dHIsDQo+ID4gKwkJICAgICAgdTMyIHdxX2F0dHJfbWFzaywgc3RydWN0 IGliX3VkYXRhICp1ZGF0YSk7DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9kZXN0cm95X3dxKHN0 cnVjdCBpYl93cSAqaWJ3cSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7DQo+ID4gKw0KPiA+ICtp bnQgbWFuYV9pYl9jcmVhdGVfcndxX2luZF90YWJsZShzdHJ1Y3QgaWJfcndxX2luZF90YWJsZQ0K PiA+ICppYl9yd3FfaW5kX3RhYmxlLA0KPiA+ICsJCQkJIHN0cnVjdCBpYl9yd3FfaW5kX3RhYmxl X2luaXRfYXR0ciAqaW5pdF9hdHRyLA0KPiA+ICsJCQkJIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEp Ow0KPiA+ICsNCj4gPiAraW50IG1hbmFfaWJfZGVzdHJveV9yd3FfaW5kX3RhYmxlKHN0cnVjdCBp Yl9yd3FfaW5kX3RhYmxlDQo+ID4gKmliX3J3cV9pbmRfdGJsKTsNCj4gPiArDQo+ID4gK3N0cnVj dCBpYl9tciAqbWFuYV9pYl9nZXRfZG1hX21yKHN0cnVjdCBpYl9wZCAqaWJwZCwgaW50IGFjY2Vz c19mbGFncyk7DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaWJfbXIgKm1hbmFfaWJfcmVnX3VzZXJfbXIo c3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LCB1NjQNCj4gbGVuZ3RoLA0KPiA+ICsJCQkJICB1 NjQgaW92YSwgaW50IGFjY2Vzc19mbGFncywNCj4gPiArCQkJCSAgc3RydWN0IGliX3VkYXRhICp1 ZGF0YSk7DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmli bXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOw0KPiA+ICsNCj4gPiAraW50IG1hbmFfaWJfY3Jl YXRlX3FwKHN0cnVjdCBpYl9xcCAqcXAsIHN0cnVjdCBpYl9xcF9pbml0X2F0dHINCj4gPiAqcXBf aW5pdF9hdHRyLA0KPiA+ICsJCSAgICAgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOw0KPiA+ICsN Cj4gPiAraW50IG1hbmFfaWJfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGli X3FwX2F0dHIgKmF0dHIsDQo+ID4gKwkJICAgICAgaW50IGF0dHJfbWFzaywgc3RydWN0IGliX3Vk YXRhICp1ZGF0YSk7DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9kZXN0cm95X3FwKHN0cnVjdCBp Yl9xcCAqaWJxcCwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7DQo+ID4gKw0KPiA+ICtpbnQgbWFu YV9pYl9jZmdfdnBvcnQoc3RydWN0IG1hbmFfaWJfZGV2ICpkZXYsIHUzMiBwb3J0X2lkLA0KPiA+ ICsJCSAgICAgIHN0cnVjdCBtYW5hX2liX3BkICpwZCwgdTMyIGRvb3JiZWxsX2lkKTsNCj4gPiAr dm9pZCBtYW5hX2liX3VuY2ZnX3Zwb3J0KHN0cnVjdCBtYW5hX2liX2RldiAqZGV2LCBzdHJ1Y3Qg bWFuYV9pYl9wZA0KPiAqcGQsDQo+ID4gKwkJCSB1MzIgcG9ydCk7DQo+ID4gKw0KPiA+ICtpbnQg bWFuYV9pYl9jcmVhdGVfY3Eoc3RydWN0IGliX2NxICppYmNxLCBjb25zdCBzdHJ1Y3QgaWJfY3Ff aW5pdF9hdHRyDQo+ID4gKmF0dHIsDQo+ID4gKwkJICAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0 YSk7DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqaWJj cSwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9hbGxv Y19wZChzdHJ1Y3QgaWJfcGQgKmlicGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOw0KPiA+ICtp bnQgbWFuYV9pYl9kZWFsbG9jX3BkKHN0cnVjdCBpYl9wZCAqaWJwZCwgc3RydWN0IGliX3VkYXRh ICp1ZGF0YSk7DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9hbGxvY191Y29udGV4dChzdHJ1Y3Qg aWJfdWNvbnRleHQgKmliY29udGV4dCwNCj4gPiArCQkJICAgc3RydWN0IGliX3VkYXRhICp1ZGF0 YSk7DQo+ID4gK3ZvaWQgbWFuYV9pYl9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4 dCAqaWJjb250ZXh0KTsNCj4gPiArDQo+ID4gK2ludCBtYW5hX2liX21tYXAoc3RydWN0IGliX3Vj b250ZXh0ICppYmNvbnRleHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdA0KPiA+ICp2bWEpOw0KPiA+ ICsNCj4gPiAraW50IG1hbmFfaWJfZ2V0X3BvcnRfaW1tdXRhYmxlKHN0cnVjdCBpYl9kZXZpY2Ug KmliZGV2LCB1MzIgcG9ydF9udW0sDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgaWJfcG9ydF9pbW11 dGFibGUgKmltbXV0YWJsZSk7DQo+ID4gK2ludCBtYW5hX2liX3F1ZXJ5X2RldmljZShzdHJ1Y3Qg aWJfZGV2aWNlICppYmRldiwgc3RydWN0IGliX2RldmljZV9hdHRyDQo+ID4gKnByb3BzLA0KPiA+ ICsJCQkgc3RydWN0IGliX3VkYXRhICp1aHcpOw0KPiA+ICtpbnQgbWFuYV9pYl9xdWVyeV9wb3J0 KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCwNCj4gPiArCQkgICAgICAgc3RydWN0 IGliX3BvcnRfYXR0ciAqcHJvcHMpOw0KPiA+ICtpbnQgbWFuYV9pYl9xdWVyeV9naWQoc3RydWN0 IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LCBpbnQgaW5kZXgsDQo+ID4gKwkJICAgICAgdW5p b24gaWJfZ2lkICpnaWQpOw0KPiA+ICsNCj4gPiArdm9pZCBtYW5hX2liX2Rpc2Fzc29jaWF0ZV91 Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmliY29udGV4dCk7DQo+ID4gKw0KPiA+ICsjZW5k aWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYw0KPiA+ IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5mNzEyYTBiYTQ3YmUNCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbXIuYw0KPiA+IEBAIC0w LDAgKzEsMTk3IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkNCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDIyLCBNaWNyb3NvZnQgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgIm1hbmFfaWIuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgVkFMSURfTVJfRkxBR1MNCj4gPiBc DQo+ID4gKwkoSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwgSUJfQUNDRVNTX1JFTU9URV9XUklURSB8 DQo+ID4gSUJfQUNDRVNTX1JFTU9URV9SRUFEKQ0KPiA+ICsNCj4gPiArc3RhdGljIGVudW0gZ2Rt YV9tcl9hY2Nlc3NfZmxhZ3MNCj4gPiArbWFuYV9pYl92ZXJic190b19nZG1hX2FjY2Vzc19mbGFn cyhpbnQgYWNjZXNzX2ZsYWdzKQ0KPiA+ICt7DQo+ID4gKwllbnVtIGdkbWFfbXJfYWNjZXNzX2Zs YWdzIGZsYWdzID0NCj4gR0RNQV9BQ0NFU1NfRkxBR19MT0NBTF9SRUFEOw0KPiA+ICsNCj4gPiAr CWlmIChhY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpDQo+ID4gKwkJZmxhZ3Mg fD0gR0RNQV9BQ0NFU1NfRkxBR19MT0NBTF9XUklURTsNCj4gPiArDQo+ID4gKwlpZiAoYWNjZXNz X2ZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9XUklURSkNCj4gPiArCQlmbGFncyB8PSBHRE1BX0FD Q0VTU19GTEFHX1JFTU9URV9XUklURTsNCj4gPiArDQo+ID4gKwlpZiAoYWNjZXNzX2ZsYWdzICYg SUJfQUNDRVNTX1JFTU9URV9SRUFEKQ0KPiA+ICsJCWZsYWdzIHw9IEdETUFfQUNDRVNTX0ZMQUdf UkVNT1RFX1JFQUQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGZsYWdzOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IG1hbmFfaWJfZ2RfY3JlYXRlX21yKHN0cnVjdCBtYW5hX2liX2RldiAq ZGV2LCBzdHJ1Y3QNCj4gbWFuYV9pYl9tcg0KPiA+ICptciwNCj4gPiArCQkJCXN0cnVjdCBnZG1h X2NyZWF0ZV9tcl9wYXJhbXMgKm1yX3BhcmFtcykNCj4gPiArew0KPiA+ICsJc3RydWN0IGdkbWFf Y3JlYXRlX21yX3Jlc3BvbnNlIHJlc3AgPSB7fTsNCj4gPiArCXN0cnVjdCBnZG1hX2NyZWF0ZV9t cl9yZXF1ZXN0IHJlcSA9IHt9Ow0KPiA+ICsJc3RydWN0IGdkbWFfZGV2ICptZGV2ID0gZGV2LT5n ZG1hX2RldjsNCj4gPiArCXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjOw0KPiA+ICsJaW50IGVycjsN Cj4gPiArDQo+ID4gKwlnYyA9IG1kZXYtPmdkbWFfY29udGV4dDsNCj4gPiArDQo+ID4gKwltYW5h X2dkX2luaXRfcmVxX2hkcigmcmVxLmhkciwgR0RNQV9DUkVBVEVfTVIsIHNpemVvZihyZXEpLA0K PiA+ICsJCQkgICAgIHNpemVvZihyZXNwKSk7DQo+ID4gKwlyZXEucGRfaGFuZGxlID0gbXJfcGFy YW1zLT5wZF9oYW5kbGU7DQo+ID4gKwlyZXEubXJfdHlwZSA9IG1yX3BhcmFtcy0+bXJfdHlwZTsN Cj4gPiArDQo+ID4gKwlzd2l0Y2ggKG1yX3BhcmFtcy0+bXJfdHlwZSkgew0KPiA+ICsJY2FzZSBH RE1BX01SX1RZUEVfR1ZBOg0KPiA+ICsJCXJlcS5ndmEuZG1hX3JlZ2lvbl9oYW5kbGUgPSBtcl9w YXJhbXMtDQo+ID5ndmEuZG1hX3JlZ2lvbl9oYW5kbGU7DQo+ID4gKwkJcmVxLmd2YS52aXJ0dWFs X2FkZHJlc3MgPSBtcl9wYXJhbXMtPmd2YS52aXJ0dWFsX2FkZHJlc3M7DQo+ID4gKwkJcmVxLmd2 YS5hY2Nlc3NfZmxhZ3MgPSBtcl9wYXJhbXMtPmd2YS5hY2Nlc3NfZmxhZ3M7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlpYmRldl9kYmcoJmRldi0+aWJfZGV2 LA0KPiA+ICsJCQkgICJpbnZhbGlkIHBhcmFtIChHRE1BX01SX1RZUEUpIHBhc3NlZCwNCj4gdHlw ZSAlZFxuIiwNCj4gPiArCQkJICByZXEubXJfdHlwZSk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXJyID0gbWFuYV9nZF9zZW5kX3JlcXVlc3QoZ2MsIHNp emVvZihyZXEpLCAmcmVxLCBzaXplb2YocmVzcCksDQo+ID4gJnJlc3ApOw0KPiA+ICsNCj4gPiAr CWlmIChlcnIgfHwgcmVzcC5oZHIuc3RhdHVzKSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZkZXYtPmli X2RldiwgIkZhaWxlZCB0byBjcmVhdGUgbXIgJWQsICV1IiwgZXJyLA0KPiA+ICsJCQkgIHJlc3Au aGRyLnN0YXR1cyk7DQo+ID4gKwkJaWYgKCFlcnIpDQo+ID4gKwkJCWVyciA9IC1FUFJPVE87DQo+ ID4gKw0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXItPmlibXIu bGtleSA9IHJlc3AubGtleTsNCj4gPiArCW1yLT5pYm1yLnJrZXkgPSByZXNwLnJrZXk7DQo+ID4g Kwltci0+bXJfaGFuZGxlID0gcmVzcC5tcl9oYW5kbGU7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbWFuYV9pYl9nZF9kZXN0cm95X21yKHN0 cnVjdCBtYW5hX2liX2RldiAqZGV2LA0KPiA+IGdkbWFfb2JqX2hhbmRsZV90IG1yX2hhbmRsZSkN Cj4gPiArew0KPiA+ICsJc3RydWN0IGdkbWFfZGVzdHJveV9tcl9yZXNwb25zZSByZXNwID0ge307 DQo+ID4gKwlzdHJ1Y3QgZ2RtYV9kZXN0cm95X21yX3JlcXVlc3QgcmVxID0ge307DQo+ID4gKwlz dHJ1Y3QgZ2RtYV9kZXYgKm1kZXYgPSBkZXYtPmdkbWFfZGV2Ow0KPiA+ICsJc3RydWN0IGdkbWFf Y29udGV4dCAqZ2M7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWdjID0gbWRldi0+Z2Rt YV9jb250ZXh0Ow0KPiA+ICsNCj4gPiArCW1hbmFfZ2RfaW5pdF9yZXFfaGRyKCZyZXEuaGRyLCBH RE1BX0RFU1RST1lfTVIsIHNpemVvZihyZXEpLA0KPiA+ICsJCQkgICAgIHNpemVvZihyZXNwKSk7 DQo+ID4gKw0KPiA+ICsJcmVxLm1yX2hhbmRsZSA9IG1yX2hhbmRsZTsNCj4gPiArDQo+ID4gKwll cnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgc2l6ZW9mKHJlcSksICZyZXEsIHNpemVvZihy ZXNwKSwNCj4gPiAmcmVzcCk7DQo+ID4gKwlpZiAoZXJyIHx8IHJlc3AuaGRyLnN0YXR1cykgew0K PiA+ICsJCWRldl9lcnIoZ2MtPmRldiwgIkZhaWxlZCB0byBkZXN0cm95IE1SOiAlZCwgMHgleFxu IiwgZXJyLA0KPiA+ICsJCQlyZXNwLmhkci5zdGF0dXMpOw0KPiA+ICsJCWlmICghZXJyKQ0KPiA+ ICsJCQllcnIgPSAtRVBST1RPOw0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0cnVjdCBpYl9tciAqbWFuYV9p Yl9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKmlicGQsIHU2NCBzdGFydCwgdTY0DQo+ID4gbGVu Z3RoLA0KPiA+ICsJCQkJICB1NjQgaW92YSwgaW50IGFjY2Vzc19mbGFncywNCj4gPiArCQkJCSAg c3RydWN0IGliX3VkYXRhICp1ZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG1hbmFfaWJfcGQg KnBkID0gY29udGFpbmVyX29mKGlicGQsIHN0cnVjdCBtYW5hX2liX3BkLA0KPiBpYnBkKTsNCj4g PiArCXN0cnVjdCBnZG1hX2NyZWF0ZV9tcl9wYXJhbXMgbXJfcGFyYW1zID0ge307DQo+ID4gKwlz dHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IGlicGQtPmRldmljZTsNCj4gPiArCWdkbWFfb2JqX2hh bmRsZV90IGRtYV9yZWdpb25faGFuZGxlOw0KPiA+ICsJc3RydWN0IG1hbmFfaWJfZGV2ICpkZXY7 DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9tciAqbXI7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4g PiArCWRldiA9IGNvbnRhaW5lcl9vZihpYmRldiwgc3RydWN0IG1hbmFfaWJfZGV2LCBpYl9kZXYp Ow0KPiA+ICsNCj4gPiArCWliZGV2X2RiZyhpYmRldiwNCj4gPiArCQkgICJzdGFydCAweCVsbHgs IGlvdmEgMHglbGx4IGxlbmd0aCAweCVsbHggYWNjZXNzX2ZsYWdzIDB4JXgiLA0KPiA+ICsJCSAg c3RhcnQsIGlvdmEsIGxlbmd0aCwgYWNjZXNzX2ZsYWdzKTsNCj4gPiArDQo+ID4gKwlpZiAoYWNj ZXNzX2ZsYWdzICYgflZBTElEX01SX0ZMQUdTKQ0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOw0KPiA+ICsNCj4gPiArCW1yID0ga3phbGxvYyhzaXplb2YoKm1yKSwgR0ZQX0tFUk5FTCk7 DQo+ID4gKwlpZiAoIW1yKQ0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ICsN Cj4gPiArCW1yLT51bWVtID0gaWJfdW1lbV9nZXQoaWJkZXYsIHN0YXJ0LCBsZW5ndGgsIGFjY2Vz c19mbGFncyk7DQo+ID4gKwlpZiAoSVNfRVJSKG1yLT51bWVtKSkgew0KPiA+ICsJCWVyciA9IFBU Ul9FUlIobXItPnVtZW0pOw0KPiA+ICsJCWliZGV2X2RiZyhpYmRldiwNCj4gPiArCQkJICAiRmFp bGVkIHRvIGdldCB1bWVtIGZvciByZWdpc3RlciB1c2VyLW1yLCAlZFxuIiwNCj4gZXJyKTsNCj4g PiArCQlnb3RvIGVycl9mcmVlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWVyciA9IG1hbmFfaWJf Z2RfY3JlYXRlX2RtYV9yZWdpb24oZGV2LCBtci0+dW1lbSwNCj4gPiAmZG1hX3JlZ2lvbl9oYW5k bGUpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWliZGV2X2RiZyhpYmRldiwgIkZhaWxlZCBj cmVhdGUgZG1hIHJlZ2lvbiBmb3IgdXNlci0NCj4gbXIsICVkXG4iLA0KPiA+ICsJCQkgIGVycik7 DQo+ID4gKwkJZ290byBlcnJfdW1lbTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpYmRldl9kYmco aWJkZXYsDQo+ID4gKwkJICAibWFuYV9pYl9nZF9jcmVhdGVfZG1hX3JlZ2lvbiByZXQgJWQNCj4g Z2RtYV9yZWdpb24gJWxseFxuIiwgZXJyLA0KPiA+ICsJCSAgZG1hX3JlZ2lvbl9oYW5kbGUpOw0K PiA+ICsNCj4gPiArCW1yX3BhcmFtcy5wZF9oYW5kbGUgPSBwZC0+cGRfaGFuZGxlOw0KPiA+ICsJ bXJfcGFyYW1zLm1yX3R5cGUgPSBHRE1BX01SX1RZUEVfR1ZBOw0KPiA+ICsJbXJfcGFyYW1zLmd2 YS5kbWFfcmVnaW9uX2hhbmRsZSA9IGRtYV9yZWdpb25faGFuZGxlOw0KPiA+ICsJbXJfcGFyYW1z Lmd2YS52aXJ0dWFsX2FkZHJlc3MgPSBpb3ZhOw0KPiA+ICsJbXJfcGFyYW1zLmd2YS5hY2Nlc3Nf ZmxhZ3MgPQ0KPiA+ICsJCW1hbmFfaWJfdmVyYnNfdG9fZ2RtYV9hY2Nlc3NfZmxhZ3MoYWNjZXNz X2ZsYWdzKTsNCj4gPiArDQo+ID4gKwllcnIgPSBtYW5hX2liX2dkX2NyZWF0ZV9tcihkZXYsIG1y LCAmbXJfcGFyYW1zKTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJZ290byBlcnJfZG1hX3JlZ2lv bjsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVGhlcmUgaXMgbm8gbmVlZCB0byBrZWVwIHRy YWNrIG9mIGRtYV9yZWdpb25faGFuZGxlIGFmdGVyIE1SIGlzDQo+ID4gKwkgKiBzdWNjZXNzZnVs bHkgY3JlYXRlZC4gVGhlIGRtYV9yZWdpb25faGFuZGxlIGlzIHRyYWNrZWQgaW4gdGhlIFBGDQo+ ID4gKwkgKiBhcyBwYXJ0IG9mIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBNUi4NCj4gPiArCSAqLw0K PiA+ICsNCj4gPiArCXJldHVybiAmbXItPmlibXI7DQo+ID4gKw0KPiA+ICtlcnJfZG1hX3JlZ2lv bjoNCj4gPiArCW1hbmFfZ2RfZGVzdHJveV9kbWFfcmVnaW9uKGRldi0+Z2RtYV9kZXYtPmdkbWFf Y29udGV4dCwNCj4gPiArCQkJCSAgIGRtYV9yZWdpb25faGFuZGxlKTsNCj4gPiArDQo+ID4gK2Vy cl91bWVtOg0KPiA+ICsJaWJfdW1lbV9yZWxlYXNlKG1yLT51bWVtKTsNCj4gPiArDQo+ID4gK2Vy cl9mcmVlOg0KPiA+ICsJa2ZyZWUobXIpOw0KPiA+ICsJcmV0dXJuIEVSUl9QVFIoZXJyKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiAraW50IG1hbmFfaWJfZGVyZWdfbXIoc3RydWN0IGliX21yICppYm1y LCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9t ciAqbXIgPSBjb250YWluZXJfb2YoaWJtciwgc3RydWN0IG1hbmFfaWJfbXIsDQo+IGlibXIpOw0K PiA+ICsJc3RydWN0IGliX2RldmljZSAqaWJkZXYgPSBpYm1yLT5kZXZpY2U7DQo+ID4gKwlzdHJ1 Y3QgbWFuYV9pYl9kZXYgKmRldjsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJZGV2ID0g Y29udGFpbmVyX29mKGliZGV2LCBzdHJ1Y3QgbWFuYV9pYl9kZXYsIGliX2Rldik7DQo+ID4gKw0K PiA+ICsJZXJyID0gbWFuYV9pYl9nZF9kZXN0cm95X21yKGRldiwgbXItPm1yX2hhbmRsZSk7DQo+ ID4gKwlpZiAoZXJyKQ0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKw0KPiA+ICsJaWYgKG1yLT51 bWVtKQ0KPiA+ICsJCWliX3VtZW1fcmVsZWFzZShtci0+dW1lbSk7DQo+ID4gKw0KPiA+ICsJa2Zy ZWUobXIpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL3FwLmMNCj4gPiBiL2RyaXZlcnMvaW5maW5pYmFu ZC9ody9tYW5hL3FwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw MDAwMDAwMC4uZWExNWVjNzdlMzIxDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZl cnMvaW5maW5pYmFuZC9ody9tYW5hL3FwLmMNCj4gPiBAQCAtMCwwICsxLDUwNiBAQA0KPiA+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ID4gKy8qDQo+ID4gKyAq IENvcHlyaWdodCAoYykgMjAyMiwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJtYW5hX2liLmgiDQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IG1hbmFfaWJfY2ZnX3Zwb3J0X3N0ZWVyaW5nKHN0cnVjdCBtYW5h X2liX2RldiAqZGV2LA0KPiA+ICsJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsDQo+ ID4gKwkJCQkgICAgICBtYW5hX2hhbmRsZV90IGRlZmF1bHRfcnhvYmosDQo+ID4gKwkJCQkgICAg ICBtYW5hX2hhbmRsZV90IGluZF90YWJsZVtdLA0KPiA+ICsJCQkJICAgICAgdTMyIGxvZ19pbmRf dGJsX3NpemUsIHUzMg0KPiByeF9oYXNoX2tleV9sZW4sDQo+ID4gKwkJCQkgICAgICB1OCAqcnhf aGFzaF9rZXkpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbXBjID0g bmV0ZGV2X3ByaXYobmRldik7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9jZmdfcnhfc3RlZXJfcmVxICpy ZXEgPSBOVUxMOw0KPiA+ICsJc3RydWN0IG1hbmFfY2ZnX3J4X3N0ZWVyX3Jlc3AgcmVzcCA9IHt9 Ow0KPiA+ICsJbWFuYV9oYW5kbGVfdCAqcmVxX2luZGlyX3RhYjsNCj4gPiArCXN0cnVjdCBnZG1h X2NvbnRleHQgKmdjOw0KPiA+ICsJc3RydWN0IGdkbWFfZGV2ICptZGV2Ow0KPiA+ICsJdTMyIHJl cV9idWZfc2l6ZTsNCj4gPiArCWludCBpLCBlcnI7DQo+ID4gKw0KPiA+ICsJbWRldiA9IGRldi0+ Z2RtYV9kZXY7DQo+ID4gKwlnYyA9IG1kZXYtPmdkbWFfY29udGV4dDsNCj4gPiArDQo+ID4gKwly ZXFfYnVmX3NpemUgPQ0KPiA+ICsJCXNpemVvZigqcmVxKSArIHNpemVvZihtYW5hX2hhbmRsZV90 KSAqDQo+IE1BTkFfSU5ESVJFQ1RfVEFCTEVfU0laRTsNCj4gPiArCXJlcSA9IGt6YWxsb2MocmVx X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghcmVxKQ0KPiA+ICsJCXJldHVybiAt RU5PTUVNOw0KPiA+ICsNCj4gPiArCW1hbmFfZ2RfaW5pdF9yZXFfaGRyKCZyZXEtPmhkciwgTUFO QV9DT05GSUdfVlBPUlRfUlgsDQo+IHJlcV9idWZfc2l6ZSwNCj4gPiArCQkJICAgICBzaXplb2Yo cmVzcCkpOw0KPiA+ICsNCj4gPiArCXJlcS0+dnBvcnQgPSBtcGMtPnBvcnRfaGFuZGxlOw0KPiA+ ICsJcmVxLT5yeF9lbmFibGUgPSAxOw0KPiA+ICsJcmVxLT51cGRhdGVfZGVmYXVsdF9yeG9iaiA9 IDE7DQo+ID4gKwlyZXEtPmRlZmF1bHRfcnhvYmogPSBkZWZhdWx0X3J4b2JqOw0KPiA+ICsJcmVx LT5oZHIuZGV2X2lkID0gbWRldi0+ZGV2X2lkOw0KPiA+ICsNCj4gPiArCS8qIElmIHRoZXJlIGFy ZSBtb3JlIHRoYW4gMSBlbnRyaWVzIGluIGluZGlyZWN0aW9uIHRhYmxlLCBlbmFibGUgUlNTDQo+ ID4gKi8NCj4gPiArCWlmIChsb2dfaW5kX3RibF9zaXplKQ0KPiA+ICsJCXJlcS0+cnNzX2VuYWJs ZSA9IHRydWU7DQo+ID4gKw0KPiA+ICsJcmVxLT5udW1faW5kaXJfZW50cmllcyA9IE1BTkFfSU5E SVJFQ1RfVEFCTEVfU0laRTsNCj4gPiArCXJlcS0+aW5kaXJfdGFiX29mZnNldCA9IHNpemVvZigq cmVxKTsNCj4gPiArCXJlcS0+dXBkYXRlX2luZGlyX3RhYiA9IHRydWU7DQo+ID4gKw0KPiA+ICsJ cmVxX2luZGlyX3RhYiA9IChtYW5hX2hhbmRsZV90ICopKHJlcSArIDEpOw0KPiA+ICsJLyogVGhl IGluZCB0YWJsZSBwYXNzZWQgdG8gdGhlIGhhcmR3YXJlIG11c3QgaGF2ZQ0KPiA+ICsJICogTUFO QV9JTkRJUkVDVF9UQUJMRV9TSVpFIGVudHJpZXMuIEFkanVzdCB0aGUgdmVyYg0KPiA+ICsJICog aW5kX3RhYmxlIHRvIE1BTkFfSU5ESVJFQ1RfVEFCTEVfU0laRSBpZiByZXF1aXJlZA0KPiA+ICsJ ICovDQo+ID4gKwlpYmRldl9kYmcoJmRldi0+aWJfZGV2LCAiaW5kIHRhYmxlIHNpemUgJXVcbiIs IDEgPDwNCj4gPiBsb2dfaW5kX3RibF9zaXplKTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBNQU5B X0lORElSRUNUX1RBQkxFX1NJWkU7IGkrKykgew0KPiA+ICsJCXJlcV9pbmRpcl90YWJbaV0gPSBp bmRfdGFibGVbaSAlICgxIDw8IGxvZ19pbmRfdGJsX3NpemUpXTsNCj4gPiArCQlpYmRldl9kYmco JmRldi0+aWJfZGV2LCAiaW5kZXggJXUgaGFuZGxlIDB4JWxseFxuIiwgaSwNCj4gPiArCQkJICBy ZXFfaW5kaXJfdGFiW2ldKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXEtPnVwZGF0ZV9oYXNo a2V5ID0gdHJ1ZTsNCj4gPiArCWlmIChyeF9oYXNoX2tleV9sZW4pDQo+ID4gKwkJbWVtY3B5KHJl cS0+aGFzaGtleSwgcnhfaGFzaF9rZXksIHJ4X2hhc2hfa2V5X2xlbik7DQo+ID4gKwllbHNlDQo+ ID4gKwkJbmV0ZGV2X3Jzc19rZXlfZmlsbChyZXEtPmhhc2hrZXksIE1BTkFfSEFTSF9LRVlfU0la RSk7DQo+ID4gKw0KPiA+ICsJaWJkZXZfZGJnKCZkZXYtPmliX2RldiwgInZwb3J0IGhhbmRsZSAl bGx1IGRlZmF1bHRfcnhvYmoNCj4gMHglbGx4XG4iLA0KPiA+ICsJCSAgcmVxLT52cG9ydCwgZGVm YXVsdF9yeG9iaik7DQo+ID4gKw0KPiA+ICsJZXJyID0gbWFuYV9nZF9zZW5kX3JlcXVlc3QoZ2Ms IHJlcV9idWZfc2l6ZSwgcmVxLCBzaXplb2YocmVzcCksDQo+ID4gJnJlc3ApOw0KPiA+ICsJaWYg KGVycikgew0KPiA+ICsJCW5ldGRldl9lcnIobmRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgdlBv cnQgUlg6ICVkXG4iLCBlcnIpOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmIChyZXNwLmhkci5zdGF0dXMpIHsNCj4gPiArCQluZXRkZXZfZXJyKG5kZXYsICJ2UG9y dCBSWCBjb25maWd1cmF0aW9uIGZhaWxlZDogMHgleFxuIiwNCj4gPiArCQkJICAgcmVzcC5oZHIu c3RhdHVzKTsNCj4gPiArCQllcnIgPSAtRVBST1RPOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCW5ldGRldl9pbmZvKG5kZXYsICJDb25maWd1cmVkIHN0ZWVyaW5nIHZQ b3J0ICVsbHUNCj4gbG9nX2VudHJpZXMgJXVcbiIsDQo+ID4gKwkJICAgIG1wYy0+cG9ydF9oYW5k bGUsIGxvZ19pbmRfdGJsX3NpemUpOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsJa2ZyZWUocmVx KTsNCj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbWFu YV9pYl9jcmVhdGVfcXBfcnNzKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3BkICpwZCwN Cj4gPiArCQkJCSBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICphdHRyLA0KPiA+ICsJCQkJIHN0cnVj dCBpYl91ZGF0YSAqdWRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtYW5hX2liX3FwICpxcCA9 IGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgbWFuYV9pYl9xcCwNCj4gaWJxcCk7DQo+ID4gKwlz dHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihwZC0+ZGV2aWNl LCBzdHJ1Y3QgbWFuYV9pYl9kZXYsIGliX2Rldik7DQo+ID4gKwlzdHJ1Y3QgaWJfcndxX2luZF90 YWJsZSAqaW5kX3RibCA9IGF0dHItPnJ3cV9pbmRfdGJsOw0KPiA+ICsJc3RydWN0IG1hbmFfaWJf Y3JlYXRlX3FwX3Jzc19yZXNwIHJlc3AgPSB7fTsNCj4gPiArCXN0cnVjdCBtYW5hX2liX2NyZWF0 ZV9xcF9yc3MgdWNtZCA9IHt9Ow0KPiA+ICsJc3RydWN0IGdkbWFfZGV2ICpnZCA9IG1kZXYtPmdk bWFfZGV2Ow0KPiA+ICsJbWFuYV9oYW5kbGVfdCAqbWFuYV9pbmRfdGFibGU7DQo+ID4gKwlzdHJ1 Y3QgbWFuYV9wb3J0X2NvbnRleHQgKm1wYzsNCj4gPiArCXN0cnVjdCBtYW5hX2NvbnRleHQgKm1j Ow0KPiA+ICsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9j cSAqY3E7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl93cSAqd3E7DQo+ID4gKwl1bnNpZ25lZCBpbnQg aW5kX3RibF9zaXplOw0KPiA+ICsJc3RydWN0IGliX2NxICppYmNxOw0KPiA+ICsJc3RydWN0IGli X3dxICppYndxOw0KPiA+ICsJaW50IGkgPSAwOw0KPiA+ICsJdTMyIHBvcnQ7DQo+ID4gKwlpbnQg cmV0Ow0KPiA+ICsNCj4gPiArCW1jID0gZ2QtPmRyaXZlcl9kYXRhOw0KPiA+ICsNCj4gPiArCWlm ICghdWRhdGEgfHwgdWRhdGEtPmlubGVuIDwgc2l6ZW9mKHVjbWQpKQ0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsNCj4gPiArCXJldCA9IGliX2NvcHlfZnJvbV91ZGF0YSgmdWNtZCwgdWRh dGEsIG1pbihzaXplb2YodWNtZCksIHVkYXRhLQ0KPiA+ID5pbmxlbikpOw0KPiA+ICsJaWYgKHJl dCkgew0KPiA+ICsJCWliZGV2X2RiZygmbWRldi0+aWJfZGV2LA0KPiA+ICsJCQkgICJGYWlsZWQg Y29weSBmcm9tIHVkYXRhIGZvciBjcmVhdGUgcnNzLXFwLCBlcnIgJWRcbiIsDQo+ID4gKwkJCSAg cmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChhdHRy LT5jYXAubWF4X3JlY3Zfd3IgPiBNQVhfU0VORF9CVUZGRVJTX1BFUl9RVUVVRSkgew0KPiA+ICsJ CWliZGV2X2RiZygmbWRldi0+aWJfZGV2LA0KPiA+ICsJCQkgICJSZXF1ZXN0ZWQgbWF4X3JlY3Zf d3IgJWQgZXhjZWVkaW5nIGxpbWl0XG4iLA0KPiA+ICsJCQkgIGF0dHItPmNhcC5tYXhfcmVjdl93 cik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGF0 dHItPmNhcC5tYXhfcmVjdl9zZ2UgPiBNQVhfUlhfV1FFX1NHTF9FTlRSSUVTKSB7DQo+ID4gKwkJ aWJkZXZfZGJnKCZtZGV2LT5pYl9kZXYsDQo+ID4gKwkJCSAgIlJlcXVlc3RlZCBtYXhfcmVjdl9z Z2UgJWQgZXhjZWVkaW5nIGxpbWl0XG4iLA0KPiA+ICsJCQkgIGF0dHItPmNhcC5tYXhfcmVjdl9z Z2UpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWluZF90 Ymxfc2l6ZSA9IDEgPDwgaW5kX3RibC0+bG9nX2luZF90Ymxfc2l6ZTsNCj4gPiArCWlmIChpbmRf dGJsX3NpemUgPiBNQU5BX0lORElSRUNUX1RBQkxFX1NJWkUpIHsNCj4gPiArCQlpYmRldl9kYmco Jm1kZXYtPmliX2RldiwNCj4gPiArCQkJICAiSW5kaXJlY3QgdGFibGUgc2l6ZSAlZCBleGNlZWRp bmcgbGltaXRcbiIsDQo+ID4gKwkJCSAgaW5kX3RibF9zaXplKTsNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAodWNtZC5yeF9oYXNoX2Z1bmN0aW9uICE9 IE1BTkFfSUJfUlhfSEFTSF9GVU5DX1RPRVBMSVRaKQ0KPiB7DQo+ID4gKwkJaWJkZXZfZGJnKCZt ZGV2LT5pYl9kZXYsDQo+ID4gKwkJCSAgIlJYIEhhc2ggZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRl ZCwgJWRcbiIsDQo+ID4gKwkJCSAgdWNtZC5yeF9oYXNoX2Z1bmN0aW9uKTsNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBJQiBwb3J0cyBzdGFydCB3aXRo IDEsIE1BTkEgc3RhcnQgd2l0aCAwICovDQo+ID4gKwlwb3J0ID0gdWNtZC5wb3J0Ow0KPiA+ICsJ aWYgKHBvcnQgPCAxIHx8IHBvcnQgPiBtYy0+bnVtX3BvcnRzKSB7DQo+ID4gKwkJaWJkZXZfZGJn KCZtZGV2LT5pYl9kZXYsICJJbnZhbGlkIHBvcnQgJXUgaW4gY3JlYXRpbmcNCj4gcXBcbiIsDQo+ ID4gKwkJCSAgcG9ydCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlu ZGV2ID0gbWMtPnBvcnRzW3BvcnQgLSAxXTsNCj4gPiArCW1wYyA9IG5ldGRldl9wcml2KG5kZXYp Ow0KPiA+ICsNCj4gPiArCWliZGV2X2RiZygmbWRldi0+aWJfZGV2LCAicnhfaGFzaF9mdW5jdGlv biAlZCBwb3J0ICVkXG4iLA0KPiA+ICsJCSAgdWNtZC5yeF9oYXNoX2Z1bmN0aW9uLCBwb3J0KTsN Cj4gPiArDQo+ID4gKwltYW5hX2luZF90YWJsZSA9IGtjYWxsb2MoaW5kX3RibF9zaXplLCBzaXpl b2YobWFuYV9oYW5kbGVfdCksDQo+ID4gKwkJCQkgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIW1h bmFfaW5kX3RhYmxlKSB7DQo+ID4gKwkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQlnb3RvIGZhaWw7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcXAtPnBvcnQgPSBwb3J0Ow0KPiA+ICsNCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBpbmRfdGJsX3NpemU7IGkrKykgew0KPiA+ICsJCXN0cnVjdCBtYW5hX29i al9zcGVjIHdxX3NwZWMgPSB7fTsNCj4gPiArCQlzdHJ1Y3QgbWFuYV9vYmpfc3BlYyBjcV9zcGVj ID0ge307DQo+ID4gKw0KPiA+ICsJCWlid3EgPSBpbmRfdGJsLT5pbmRfdGJsW2ldOw0KPiA+ICsJ CXdxID0gY29udGFpbmVyX29mKGlid3EsIHN0cnVjdCBtYW5hX2liX3dxLCBpYndxKTsNCj4gPiAr DQo+ID4gKwkJaWJjcSA9IGlid3EtPmNxOw0KPiA+ICsJCWNxID0gY29udGFpbmVyX29mKGliY3Es IHN0cnVjdCBtYW5hX2liX2NxLCBpYmNxKTsNCj4gPiArDQo+ID4gKwkJd3Ffc3BlYy5nZG1hX3Jl Z2lvbiA9IHdxLT5nZG1hX3JlZ2lvbjsNCj4gPiArCQl3cV9zcGVjLnF1ZXVlX3NpemUgPSB3cS0+ d3FfYnVmX3NpemU7DQo+ID4gKw0KPiA+ICsJCWNxX3NwZWMuZ2RtYV9yZWdpb24gPSBjcS0+Z2Rt YV9yZWdpb247DQo+ID4gKwkJY3Ffc3BlYy5xdWV1ZV9zaXplID0gY3EtPmNxZSAqIENPTVBfRU5U UllfU0laRTsNCj4gPiArCQljcV9zcGVjLm1vZHJfY3R4X2lkID0gMDsNCj4gPiArCQljcV9zcGVj LmF0dGFjaGVkX2VxID0gR0RNQV9DUV9OT19FUTsNCj4gPiArDQo+ID4gKwkJcmV0ID0gbWFuYV9j cmVhdGVfd3Ffb2JqKG1wYywgbXBjLT5wb3J0X2hhbmRsZSwNCj4gR0RNQV9SUSwNCj4gPiArCQkJ CQkgJndxX3NwZWMsICZjcV9zcGVjLCAmd3EtDQo+ID5yeF9vYmplY3QpOw0KPiA+ICsJCWlmIChy ZXQpDQo+ID4gKwkJCWdvdG8gZmFpbDsNCj4gPiArDQo+ID4gKwkJLyogVGhlIEdETUEgcmVnaW9u cyBhcmUgbm93IG93bmVkIGJ5IHRoZSBXUSBvYmplY3QgKi8NCj4gPiArCQl3cS0+Z2RtYV9yZWdp b24gPSBHRE1BX0lOVkFMSURfRE1BX1JFR0lPTjsNCj4gPiArCQljcS0+Z2RtYV9yZWdpb24gPSBH RE1BX0lOVkFMSURfRE1BX1JFR0lPTjsNCj4gPiArDQo+ID4gKwkJd3EtPmlkID0gd3Ffc3BlYy5x dWV1ZV9pbmRleDsNCj4gPiArCQljcS0+aWQgPSBjcV9zcGVjLnF1ZXVlX2luZGV4Ow0KPiA+ICsN Cj4gPiArCQlpYmRldl9kYmcoJm1kZXYtPmliX2RldiwNCj4gPiArCQkJICAicmV0ICVkIHJ4X29i amVjdCAweCVsbHggd3EgaWQgJWxsdSBjcSBpZCAlbGx1XG4iLA0KPiA+ICsJCQkgIHJldCwgd3Et PnJ4X29iamVjdCwgd3EtPmlkLCBjcS0+aWQpOw0KPiA+ICsNCj4gPiArCQlyZXNwLmVudHJpZXNb aV0uY3FpZCA9IGNxLT5pZDsNCj4gPiArCQlyZXNwLmVudHJpZXNbaV0ud3FpZCA9IHdxLT5pZDsN Cj4gPiArDQo+ID4gKwkJbWFuYV9pbmRfdGFibGVbaV0gPSB3cS0+cnhfb2JqZWN0Ow0KPiA+ICsJ fQ0KPiA+ICsJcmVzcC5udW1fZW50cmllcyA9IGk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWFuYV9p Yl9jZmdfdnBvcnRfc3RlZXJpbmcobWRldiwgbmRldiwgd3EtPnJ4X29iamVjdCwNCj4gPiArCQkJ CQkgbWFuYV9pbmRfdGFibGUsDQo+ID4gKwkJCQkJIGluZF90YmwtPmxvZ19pbmRfdGJsX3NpemUs DQo+ID4gKwkJCQkJIHVjbWQucnhfaGFzaF9rZXlfbGVuLA0KPiA+ICsJCQkJCSB1Y21kLnJ4X2hh c2hfa2V5KTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJZ290byBmYWlsOw0KPiA+ICsNCj4gPiAr CXJldCA9IGliX2NvcHlfdG9fdWRhdGEodWRhdGEsICZyZXNwLCBzaXplb2YocmVzcCkpOw0KPiA+ ICsJaWYgKHJldCkgew0KPiA+ICsJCWliZGV2X2RiZygmbWRldi0+aWJfZGV2LA0KPiA+ICsJCQkg ICJGYWlsZWQgdG8gY29weSB0byB1ZGF0YSBjcmVhdGUgcnNzLXFwLCAlZFxuIiwNCj4gPiArCQkJ ICByZXQpOw0KPiA+ICsJCWdvdG8gZmFpbDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlrZnJlZSht YW5hX2luZF90YWJsZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtmYWls Og0KPiA+ICsJd2hpbGUgKGktLSA+IDApIHsNCj4gPiArCQlpYndxID0gaW5kX3RibC0+aW5kX3Ri bFtpXTsNCj4gPiArCQl3cSA9IGNvbnRhaW5lcl9vZihpYndxLCBzdHJ1Y3QgbWFuYV9pYl93cSwg aWJ3cSk7DQo+ID4gKwkJbWFuYV9kZXN0cm95X3dxX29iaihtcGMsIEdETUFfUlEsIHdxLT5yeF9v YmplY3QpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWtmcmVlKG1hbmFfaW5kX3RhYmxlKTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG1h bmFfaWJfY3JlYXRlX3FwX3JhdyhzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9wZCAqaWJw ZCwNCj4gPiArCQkJCSBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICphdHRyLA0KPiA+ICsJCQkJIHN0 cnVjdCBpYl91ZGF0YSAqdWRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtYW5hX2liX3BkICpw ZCA9IGNvbnRhaW5lcl9vZihpYnBkLCBzdHJ1Y3QgbWFuYV9pYl9wZCwNCj4gaWJwZCk7DQo+ID4g KwlzdHJ1Y3QgbWFuYV9pYl9xcCAqcXAgPSBjb250YWluZXJfb2YoaWJxcCwgc3RydWN0IG1hbmFf aWJfcXAsDQo+IGlicXApOw0KPiA+ICsJc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2ID0NCj4gPiAr CQljb250YWluZXJfb2YoaWJwZC0+ZGV2aWNlLCBzdHJ1Y3QgbWFuYV9pYl9kZXYsIGliX2Rldik7 DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9jcSAqc2VuZF9jcSA9DQo+ID4gKwkJY29udGFpbmVyX29m KGF0dHItPnNlbmRfY3EsIHN0cnVjdCBtYW5hX2liX2NxLCBpYmNxKTsNCj4gPiArCXN0cnVjdCBt YW5hX2liX3Vjb250ZXh0ICptYW5hX3Vjb250ZXh0ID0NCj4gPiArCQlyZG1hX3VkYXRhX3RvX2Ry dl9jb250ZXh0KHVkYXRhLCBzdHJ1Y3QNCj4gbWFuYV9pYl91Y29udGV4dCwNCj4gPiArCQkJCQkg IGlidWNvbnRleHQpOw0KPiA+ICsJc3RydWN0IG1hbmFfaWJfY3JlYXRlX3FwX3Jlc3AgcmVzcCA9 IHt9Ow0KPiA+ICsJc3RydWN0IGdkbWFfZGV2ICpnZCA9IG1kZXYtPmdkbWFfZGV2Ow0KPiA+ICsJ c3RydWN0IG1hbmFfaWJfY3JlYXRlX3FwIHVjbWQgPSB7fTsNCj4gPiArCXN0cnVjdCBtYW5hX29i al9zcGVjIHdxX3NwZWMgPSB7fTsNCj4gPiArCXN0cnVjdCBtYW5hX29ial9zcGVjIGNxX3NwZWMg PSB7fTsNCj4gPiArCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbXBjOw0KPiA+ICsJc3RydWN0 IG1hbmFfY29udGV4dCAqbWM7DQo+ID4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsNCj4gPiAr CXN0cnVjdCBpYl91bWVtICp1bWVtOw0KPiA+ICsJaW50IGVycjsNCj4gPiArCXUzMiBwb3J0Ow0K PiA+ICsNCj4gPiArCW1jID0gZ2QtPmRyaXZlcl9kYXRhOw0KPiA+ICsNCj4gPiArCWlmICghbWFu YV91Y29udGV4dCB8fCB1ZGF0YS0+aW5sZW4gPCBzaXplb2YodWNtZCkpDQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJZXJyID0gaWJfY29weV9mcm9tX3VkYXRhKCZ1Y21kLCB1 ZGF0YSwgbWluKHNpemVvZih1Y21kKSwgdWRhdGEtDQo+ID4gPmlubGVuKSk7DQo+ID4gKwlpZiAo ZXJyKSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZtZGV2LT5pYl9kZXYsDQo+ID4gKwkJCSAgIkZhaWxl ZCB0byBjb3B5IGZyb20gdWRhdGEgY3JlYXRlIHFwLXJhdywgJWRcbiIsDQo+IGVycik7DQo+ID4g KwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBJQiBwb3J0cyBzdGFydCB3 aXRoIDEsIE1BTkEgRXRoZXJuZXQgcG9ydHMgc3RhcnQgd2l0aCAwICovDQo+ID4gKwlwb3J0ID0g dWNtZC5wb3J0Ow0KPiA+ICsJaWYgKHVjbWQucG9ydCA+IG1jLT5udW1fcG9ydHMpDQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKGF0dHItPmNhcC5tYXhfc2VuZF93ciA+ IE1BWF9TRU5EX0JVRkZFUlNfUEVSX1FVRVVFKSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZtZGV2LT5p Yl9kZXYsDQo+ID4gKwkJCSAgIlJlcXVlc3RlZCBtYXhfc2VuZF93ciAlZCBleGNlZWRpbmcgbGlt aXRcbiIsDQo+ID4gKwkJCSAgYXR0ci0+Y2FwLm1heF9zZW5kX3dyKTsNCj4gPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoYXR0ci0+Y2FwLm1heF9zZW5kX3Nn ZSA+IE1BWF9UWF9XUUVfU0dMX0VOVFJJRVMpIHsNCj4gPiArCQlpYmRldl9kYmcoJm1kZXYtPmli X2RldiwNCj4gPiArCQkJICAiUmVxdWVzdGVkIG1heF9zZW5kX3NnZSAlZCBleGNlZWRpbmcgbGlt aXRcbiIsDQo+ID4gKwkJCSAgYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSk7DQo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbmRldiA9IG1jLT5wb3J0c1twb3J0IC0g MV07DQo+ID4gKwltcGMgPSBuZXRkZXZfcHJpdihuZGV2KTsNCj4gPiArCWliZGV2X2RiZygmbWRl di0+aWJfZGV2LCAicG9ydCAldSBuZGV2ICVwIG1wYyAlcFxuIiwgcG9ydCwNCj4gbmRldiwNCj4g PiBtcGMpOw0KPiA+ICsNCj4gPiArCWVyciA9IG1hbmFfaWJfY2ZnX3Zwb3J0KG1kZXYsIHBvcnQg LSAxLCBwZCwgbWFuYV91Y29udGV4dC0NCj4gPmRvb3JiZWxsKTsNCj4gPiArCWlmIChlcnIpDQo+ ID4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKw0KPiA+ICsJcXAtPnBvcnQgPSBwb3J0Ow0KPiA+ ICsNCj4gPiArCWliZGV2X2RiZygmbWRldi0+aWJfZGV2LCAidWNtZCBzcV9idWZfYWRkciAweCVs bHggcG9ydCAldVxuIiwNCj4gPiArCQkgIHVjbWQuc3FfYnVmX2FkZHIsIHVjbWQucG9ydCk7DQo+ ID4gKw0KPiA+ICsJdW1lbSA9IGliX3VtZW1fZ2V0KGlicGQtPmRldmljZSwgdWNtZC5zcV9idWZf YWRkciwNCj4gdWNtZC5zcV9idWZfc2l6ZSwNCj4gPiArCQkJICAgSUJfQUNDRVNTX0xPQ0FMX1dS SVRFKTsNCj4gPiArCWlmIChJU19FUlIodW1lbSkpIHsNCj4gPiArCQllcnIgPSBQVFJfRVJSKHVt ZW0pOw0KPiA+ICsJCWliZGV2X2RiZygmbWRldi0+aWJfZGV2LA0KPiA+ICsJCQkgICJGYWlsZWQg dG8gZ2V0IHVtZW0gZm9yIGNyZWF0ZSBxcC1yYXcsIGVyciAlZFxuIiwNCj4gPiArCQkJICBlcnIp Ow0KPiA+ICsJCWdvdG8gZXJyX2ZyZWVfdnBvcnQ7DQo+ID4gKwl9DQo+ID4gKwlxcC0+c3FfdW1l bSA9IHVtZW07DQo+ID4gKw0KPiA+ICsJZXJyID0gbWFuYV9pYl9nZF9jcmVhdGVfZG1hX3JlZ2lv bihtZGV2LCBxcC0+c3FfdW1lbSwNCj4gPiArCQkJCQkgICAmcXAtPnNxX2dkbWFfcmVnaW9uKTsN Cj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQlpYmRldl9kYmcoJm1kZXYtPmliX2RldiwNCj4gPiAr CQkJICAiRmFpbGVkIHRvIGNyZWF0ZSBkbWEgcmVnaW9uIGZvciBjcmVhdGUgcXAtDQo+IHJhdywg JWRcbiIsDQo+ID4gKwkJCSAgZXJyKTsNCj4gPiArCQlnb3RvIGVycl9yZWxlYXNlX3VtZW07DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWJkZXZfZGJnKCZtZGV2LT5pYl9kZXYsDQo+ID4gKwkJICAi bWFuYV9pYl9nZF9jcmVhdGVfZG1hX3JlZ2lvbiByZXQgJWQgZ2RtYV9yZWdpb24NCj4gMHglbGx4 XG4iLA0KPiA+ICsJCSAgZXJyLCBxcC0+c3FfZ2RtYV9yZWdpb24pOw0KPiA+ICsNCj4gPiArCS8q IENyZWF0ZSBhIFdRIG9uIHRoZSBzYW1lIHBvcnQgaGFuZGxlIHVzZWQgYnkgdGhlIEV0aGVybmV0 ICovDQo+ID4gKwl3cV9zcGVjLmdkbWFfcmVnaW9uID0gcXAtPnNxX2dkbWFfcmVnaW9uOw0KPiA+ ICsJd3Ffc3BlYy5xdWV1ZV9zaXplID0gdWNtZC5zcV9idWZfc2l6ZTsNCj4gPiArDQo+ID4gKwlj cV9zcGVjLmdkbWFfcmVnaW9uID0gc2VuZF9jcS0+Z2RtYV9yZWdpb247DQo+ID4gKwljcV9zcGVj LnF1ZXVlX3NpemUgPSBzZW5kX2NxLT5jcWUgKiBDT01QX0VOVFJZX1NJWkU7DQo+ID4gKwljcV9z cGVjLm1vZHJfY3R4X2lkID0gMDsNCj4gPiArCWNxX3NwZWMuYXR0YWNoZWRfZXEgPSBHRE1BX0NR X05PX0VROw0KPiA+ICsNCj4gPiArCWVyciA9IG1hbmFfY3JlYXRlX3dxX29iaihtcGMsIG1wYy0+ cG9ydF9oYW5kbGUsIEdETUFfU1EsDQo+ICZ3cV9zcGVjLA0KPiA+ICsJCQkJICZjcV9zcGVjLCAm cXAtPnR4X29iamVjdCk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZtZGV2 LT5pYl9kZXYsDQo+ID4gKwkJCSAgIkZhaWxlZCB0byBjcmVhdGUgd3EgZm9yIGNyZWF0ZSByYXct cXAsIGVyciAlZFxuIiwNCj4gPiArCQkJICBlcnIpOw0KPiA+ICsJCWdvdG8gZXJyX2Rlc3Ryb3lf ZG1hX3JlZ2lvbjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBUaGUgR0RNQSByZWdpb25zIGFy ZSBub3cgb3duZWQgYnkgdGhlIFdRIG9iamVjdCAqLw0KPiA+ICsJcXAtPnNxX2dkbWFfcmVnaW9u ID0gR0RNQV9JTlZBTElEX0RNQV9SRUdJT047DQo+ID4gKwlzZW5kX2NxLT5nZG1hX3JlZ2lvbiA9 IEdETUFfSU5WQUxJRF9ETUFfUkVHSU9OOw0KPiA+ICsNCj4gPiArCXFwLT5zcV9pZCA9IHdxX3Nw ZWMucXVldWVfaW5kZXg7DQo+ID4gKwlzZW5kX2NxLT5pZCA9IGNxX3NwZWMucXVldWVfaW5kZXg7 DQo+ID4gKw0KPiA+ICsJaWJkZXZfZGJnKCZtZGV2LT5pYl9kZXYsDQo+ID4gKwkJICAicmV0ICVk IHFwLT50eF9vYmplY3QgMHglbGx4IHNxIGlkICVsbHUgY3EgaWQgJWxsdVxuIiwgZXJyLA0KPiA+ ICsJCSAgcXAtPnR4X29iamVjdCwgcXAtPnNxX2lkLCBzZW5kX2NxLT5pZCk7DQo+ID4gKw0KPiA+ ICsJcmVzcC5zcWlkID0gcXAtPnNxX2lkOw0KPiA+ICsJcmVzcC5jcWlkID0gc2VuZF9jcS0+aWQ7 DQo+ID4gKwlyZXNwLnR4X3ZwX29mZnNldCA9IHBkLT50eF92cF9vZmZzZXQ7DQo+ID4gKw0KPiA+ ICsJZXJyID0gaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJnJlc3AsIHNpemVvZihyZXNwKSk7DQo+ ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZtZGV2LT5pYl9kZXYsDQo+ID4gKwkJ CSAgIkZhaWxlZCBjb3B5IHVkYXRhIGZvciBjcmVhdGUgcXAtcmF3LCAlZFxuIiwNCj4gPiArCQkJ ICBlcnIpOw0KPiA+ICsJCWdvdG8gZXJyX2Rlc3Ryb3lfd3Ffb2JqOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2Rlc3Ryb3lfd3Ffb2JqOg0KPiA+ICsJ bWFuYV9kZXN0cm95X3dxX29iaihtcGMsIEdETUFfU1EsIHFwLT50eF9vYmplY3QpOw0KPiA+ICsN Cj4gPiArZXJyX2Rlc3Ryb3lfZG1hX3JlZ2lvbjoNCj4gPiArCW1hbmFfaWJfZ2RfZGVzdHJveV9k bWFfcmVnaW9uKG1kZXYsIHFwLT5zcV9nZG1hX3JlZ2lvbik7DQo+ID4gKw0KPiA+ICtlcnJfcmVs ZWFzZV91bWVtOg0KPiA+ICsJaWJfdW1lbV9yZWxlYXNlKHVtZW0pOw0KPiA+ICsNCj4gPiArZXJy X2ZyZWVfdnBvcnQ6DQo+ID4gKwltYW5hX2liX3VuY2ZnX3Zwb3J0KG1kZXYsIHBkLCBwb3J0IC0g MSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGVycjsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IG1h bmFfaWJfY3JlYXRlX3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2luaXRfYXR0 ciAqYXR0ciwNCj4gPiArCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQ0KPiA+ICt7DQo+ ID4gKwlzd2l0Y2ggKGF0dHItPnFwX3R5cGUpIHsNCj4gPiArCWNhc2UgSUJfUVBUX1JBV19QQUNL RVQ6DQo+ID4gKwkJLyogV2hlbiByd3FfaW5kX3RibCBpcyB1c2VkLCBpdCdzIGZvciBjcmVhdGlu ZyBXUXMgZm9yIFJTUyAqLw0KPiA+ICsJCWlmIChhdHRyLT5yd3FfaW5kX3RibCkNCj4gPiArCQkJ cmV0dXJuIG1hbmFfaWJfY3JlYXRlX3FwX3JzcyhpYnFwLCBpYnFwLT5wZCwgYXR0ciwNCj4gPiAr CQkJCQkJICAgICB1ZGF0YSk7DQo+ID4gKw0KPiA+ICsJCXJldHVybiBtYW5hX2liX2NyZWF0ZV9x cF9yYXcoaWJxcCwgaWJxcC0+cGQsIGF0dHIsIHVkYXRhKTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4g KwkJLyogQ3JlYXRpbmcgUVAgb3RoZXIgdGhhbiBJQl9RUFRfUkFXX1BBQ0tFVCBpcyBub3QNCj4g c3VwcG9ydGVkICovDQo+ID4gKwkJaWJkZXZfZGJnKGlicXAtPmRldmljZSwgIkNyZWF0aW5nIFFQ IHR5cGUgJXUgbm90DQo+IHN1cHBvcnRlZFxuIiwNCj4gPiArCQkJICBhdHRyLT5xcF90eXBlKTsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gLUVJTlZBTDsNCj4gPiArfQ0KPiA+ICsNCj4g PiAraW50IG1hbmFfaWJfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3Fw X2F0dHIgKmF0dHIsDQo+ID4gKwkJICAgICAgaW50IGF0dHJfbWFzaywgc3RydWN0IGliX3VkYXRh ICp1ZGF0YSkNCj4gPiArew0KPiA+ICsJLyogbW9kaWZ5X3FwIGlzIG5vdCBzdXBwb3J0ZWQgYnkg dGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgKi8NCj4gPiArCXJldHVybiAtRU9QTk9UU1VQUDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtYW5hX2liX2Rlc3Ryb3lfcXBfcnNzKHN0 cnVjdCBtYW5hX2liX3FwICpxcCwNCj4gPiArCQkJCSAgc3RydWN0IGliX3J3cV9pbmRfdGFibGUg KmluZF90YmwsDQo+ID4gKwkJCQkgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBtYW5hX2liX2RldiAqbWRldiA9DQo+ID4gKwkJY29udGFpbmVyX29mKHFwLT5p YnFwLmRldmljZSwgc3RydWN0IG1hbmFfaWJfZGV2LCBpYl9kZXYpOw0KPiA+ICsJc3RydWN0IGdk bWFfZGV2ICpnZCA9IG1kZXYtPmdkbWFfZGV2Ow0KPiA+ICsJc3RydWN0IG1hbmFfcG9ydF9jb250 ZXh0ICptcGM7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9jb250ZXh0ICptYzsNCj4gPiArCXN0cnVjdCBu ZXRfZGV2aWNlICpuZGV2Ow0KPiA+ICsJc3RydWN0IG1hbmFfaWJfd3EgKndxOw0KPiA+ICsJc3Ry dWN0IGliX3dxICppYndxOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJbWMgPSBnZC0+ZHJp dmVyX2RhdGE7DQo+ID4gKwluZGV2ID0gbWMtPnBvcnRzW3FwLT5wb3J0IC0gMV07DQo+ID4gKwlt cGMgPSBuZXRkZXZfcHJpdihuZGV2KTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgKDEg PDwgaW5kX3RibC0+bG9nX2luZF90Ymxfc2l6ZSk7IGkrKykgew0KPiA+ICsJCWlid3EgPSBpbmRf dGJsLT5pbmRfdGJsW2ldOw0KPiA+ICsJCXdxID0gY29udGFpbmVyX29mKGlid3EsIHN0cnVjdCBt YW5hX2liX3dxLCBpYndxKTsNCj4gPiArCQlpYmRldl9kYmcoJm1kZXYtPmliX2RldiwgImRlc3Ry b3lpbmcgd3EtDQo+ID5yeF9vYmplY3QgJWxsdVxuIiwNCj4gPiArCQkJICB3cS0+cnhfb2JqZWN0 KTsNCj4gPiArCQltYW5hX2Rlc3Ryb3lfd3Ffb2JqKG1wYywgR0RNQV9SUSwgd3EtPnJ4X29iamVj dCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgbWFuYV9pYl9kZXN0cm95X3FwX3JhdyhzdHJ1Y3QgbWFuYV9pYl9xcCAqcXAs IHN0cnVjdA0KPiBpYl91ZGF0YQ0KPiA+ICp1ZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG1h bmFfaWJfZGV2ICptZGV2ID0NCj4gPiArCQljb250YWluZXJfb2YocXAtPmlicXAuZGV2aWNlLCBz dHJ1Y3QgbWFuYV9pYl9kZXYsIGliX2Rldik7DQo+ID4gKwlzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0g bWRldi0+Z2RtYV9kZXY7DQo+ID4gKwlzdHJ1Y3QgaWJfcGQgKmlicGQgPSBxcC0+aWJxcC5wZDsN Cj4gPiArCXN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqbXBjOw0KPiA+ICsJc3RydWN0IG1hbmFf Y29udGV4dCAqbWM7DQo+ID4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsNCj4gPiArCXN0cnVj dCBtYW5hX2liX3BkICpwZDsNCj4gPiArDQo+ID4gKwltYyA9IGdkLT5kcml2ZXJfZGF0YTsNCj4g PiArCW5kZXYgPSBtYy0+cG9ydHNbcXAtPnBvcnQgLSAxXTsNCj4gPiArCW1wYyA9IG5ldGRldl9w cml2KG5kZXYpOw0KPiA+ICsJcGQgPSBjb250YWluZXJfb2YoaWJwZCwgc3RydWN0IG1hbmFfaWJf cGQsIGlicGQpOw0KPiA+ICsNCj4gPiArCW1hbmFfZGVzdHJveV93cV9vYmoobXBjLCBHRE1BX1NR LCBxcC0+dHhfb2JqZWN0KTsNCj4gPiArDQo+ID4gKwlpZiAocXAtPnNxX3VtZW0pIHsNCj4gPiAr CQltYW5hX2liX2dkX2Rlc3Ryb3lfZG1hX3JlZ2lvbihtZGV2LCBxcC0NCj4gPnNxX2dkbWFfcmVn aW9uKTsNCj4gPiArCQlpYl91bWVtX3JlbGVhc2UocXAtPnNxX3VtZW0pOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCW1hbmFfaWJfdW5jZmdfdnBvcnQobWRldiwgcGQsIHFwLT5wb3J0IC0gMSk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBtYW5hX2liX2Rl c3Ryb3lfcXAoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9xcCAqcXAgPSBjb250YWluZXJfb2YoaWJxcCwgc3Ry dWN0IG1hbmFfaWJfcXAsDQo+IGlicXApOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoaWJxcC0+cXBf dHlwZSkgew0KPiA+ICsJY2FzZSBJQl9RUFRfUkFXX1BBQ0tFVDoNCj4gPiArCQlpZiAoaWJxcC0+ cndxX2luZF90YmwpDQo+ID4gKwkJCXJldHVybiBtYW5hX2liX2Rlc3Ryb3lfcXBfcnNzKHFwLCBp YnFwLQ0KPiA+cndxX2luZF90YmwsDQo+ID4gKwkJCQkJCSAgICAgIHVkYXRhKTsNCj4gPiArDQo+ ID4gKwkJcmV0dXJuIG1hbmFfaWJfZGVzdHJveV9xcF9yYXcocXAsIHVkYXRhKTsNCj4gPiArDQo+ ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWliZGV2X2RiZyhpYnFwLT5kZXZpY2UsICJVbmV4cGVjdGVk IFFQIHR5cGUgJXVcbiIsDQo+ID4gKwkJCSAgaWJxcC0+cXBfdHlwZSk7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIC1FTk9FTlQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pbmZpbmliYW5kL2h3L21hbmEvd3EuYw0KPiA+IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21h bmEvd3EuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAw Li4zNzJkMzYxNTEwZTANCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9pbmZp bmliYW5kL2h3L21hbmEvd3EuYw0KPiA+IEBAIC0wLDAgKzEsMTE1IEBADQo+ID4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gPiArLyoNCj4gPiArICogQ29weXJp Z2h0IChjKSAyMDIyLCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1hbmFfaWIuaCINCj4gPiArDQo+ID4g K3N0cnVjdCBpYl93cSAqbWFuYV9pYl9jcmVhdGVfd3Eoc3RydWN0IGliX3BkICpwZCwNCj4gPiAr CQkJCXN0cnVjdCBpYl93cV9pbml0X2F0dHIgKmluaXRfYXR0ciwNCj4gPiArCQkJCXN0cnVjdCBp Yl91ZGF0YSAqdWRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtYW5hX2liX2RldiAqbWRldiA9 DQo+ID4gKwkJY29udGFpbmVyX29mKHBkLT5kZXZpY2UsIHN0cnVjdCBtYW5hX2liX2RldiwgaWJf ZGV2KTsNCj4gPiArCXN0cnVjdCBtYW5hX2liX2NyZWF0ZV93cSB1Y21kID0ge307DQo+ID4gKwlz dHJ1Y3QgbWFuYV9pYl93cSAqd3E7DQo+ID4gKwlzdHJ1Y3QgaWJfdW1lbSAqdW1lbTsNCj4gPiAr CWludCBlcnI7DQo+ID4gKw0KPiA+ICsJaWYgKHVkYXRhLT5pbmxlbiA8IHNpemVvZih1Y21kKSkN Cj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4gPiArDQo+ID4gKwllcnIgPSBpYl9j b3B5X2Zyb21fdWRhdGEoJnVjbWQsIHVkYXRhLCBtaW4oc2l6ZW9mKHVjbWQpLCB1ZGF0YS0NCj4g PiA+aW5sZW4pKTsNCj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQlpYmRldl9kYmcoJm1kZXYtPmli X2RldiwNCj4gPiArCQkJICAiRmFpbGVkIHRvIGNvcHkgZnJvbSB1ZGF0YSBmb3IgY3JlYXRlIHdx LCAlZFxuIiwNCj4gZXJyKTsNCj4gPiArCQlyZXR1cm4gRVJSX1BUUihlcnIpOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXdxID0ga3phbGxvYyhzaXplb2YoKndxKSwgR0ZQX0tFUk5FTCk7DQo+ID4g KwlpZiAoIXdxKQ0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ICsNCj4gPiAr CWliZGV2X2RiZygmbWRldi0+aWJfZGV2LCAidWNtZCB3cV9idWZfYWRkciAweCVsbHhcbiIsDQo+ ID4gdWNtZC53cV9idWZfYWRkcik7DQo+ID4gKw0KPiA+ICsJdW1lbSA9IGliX3VtZW1fZ2V0KHBk LT5kZXZpY2UsIHVjbWQud3FfYnVmX2FkZHIsDQo+IHVjbWQud3FfYnVmX3NpemUsDQo+ID4gKwkJ CSAgIElCX0FDQ0VTU19MT0NBTF9XUklURSk7DQo+ID4gKwlpZiAoSVNfRVJSKHVtZW0pKSB7DQo+ ID4gKwkJZXJyID0gUFRSX0VSUih1bWVtKTsNCj4gPiArCQlpYmRldl9kYmcoJm1kZXYtPmliX2Rl diwNCj4gPiArCQkJICAiRmFpbGVkIHRvIGdldCB1bWVtIGZvciBjcmVhdGUgd3EsIGVyciAlZFxu IiwgZXJyKTsNCj4gPiArCQlnb3RvIGVycl9mcmVlX3dxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXdxLT51bWVtID0gdW1lbTsNCj4gPiArCXdxLT53cWUgPSBpbml0X2F0dHItPm1heF93cjsNCj4g PiArCXdxLT53cV9idWZfc2l6ZSA9IHVjbWQud3FfYnVmX3NpemU7DQo+ID4gKwl3cS0+cnhfb2Jq ZWN0ID0gSU5WQUxJRF9NQU5BX0hBTkRMRTsNCj4gPiArDQo+ID4gKwllcnIgPSBtYW5hX2liX2dk X2NyZWF0ZV9kbWFfcmVnaW9uKG1kZXYsIHdxLT51bWVtLCAmd3EtDQo+ID5nZG1hX3JlZ2lvbik7 DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJaWJkZXZfZGJnKCZtZGV2LT5pYl9kZXYsDQo+ID4g KwkJCSAgIkZhaWxlZCB0byBjcmVhdGUgZG1hIHJlZ2lvbiBmb3IgY3JlYXRlIHdxLCAlZFxuIiwN Cj4gPiArCQkJICBlcnIpOw0KPiA+ICsJCWdvdG8gZXJyX3JlbGVhc2VfdW1lbTsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpYmRldl9kYmcoJm1kZXYtPmliX2RldiwNCj4gPiArCQkgICJtYW5hX2li X2dkX2NyZWF0ZV9kbWFfcmVnaW9uIHJldCAlZCBnZG1hX3JlZ2lvbg0KPiAweCVsbHhcbiIsDQo+ ID4gKwkJICBlcnIsIHdxLT5nZG1hX3JlZ2lvbik7DQo+ID4gKw0KPiA+ICsJLyogV1EgSUQgaXMg cmV0dXJuZWQgYXQgd3FfY3JlYXRlIHRpbWUsIGRvZXNuJ3Qga25vdyB0aGUgdmFsdWUgeWV0DQo+ ICovDQo+ID4gKw0KPiA+ICsJcmV0dXJuICZ3cS0+aWJ3cTsNCj4gPiArDQo+ID4gK2Vycl9yZWxl YXNlX3VtZW06DQo+ID4gKwlpYl91bWVtX3JlbGVhc2UodW1lbSk7DQo+ID4gKw0KPiA+ICtlcnJf ZnJlZV93cToNCj4gPiArCWtmcmVlKHdxKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gRVJSX1BUUihl cnIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbWFuYV9pYl9tb2RpZnlfd3Eoc3RydWN0IGli X3dxICp3cSwgc3RydWN0IGliX3dxX2F0dHIgKndxX2F0dHIsDQo+ID4gKwkJICAgICAgdTMyIHdx X2F0dHJfbWFzaywgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkNCj4gPiArew0KPiA+ICsJLyogbW9k aWZ5X3dxIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgKi8N Cj4gPiArCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IG1hbmFf aWJfZGVzdHJveV93cShzdHJ1Y3QgaWJfd3EgKmlid3EsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtYW5hX2liX3dxICp3cSA9IGNvbnRhaW5lcl9vZihpYndx LCBzdHJ1Y3QgbWFuYV9pYl93cSwNCj4gaWJ3cSk7DQo+ID4gKwlzdHJ1Y3QgaWJfZGV2aWNlICpp Yl9kZXYgPSBpYndxLT5kZXZpY2U7DQo+ID4gKwlzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXY7DQo+ ID4gKw0KPiA+ICsJbWRldiA9IGNvbnRhaW5lcl9vZihpYl9kZXYsIHN0cnVjdCBtYW5hX2liX2Rl diwgaWJfZGV2KTsNCj4gPiArDQo+ID4gKwltYW5hX2liX2dkX2Rlc3Ryb3lfZG1hX3JlZ2lvbiht ZGV2LCB3cS0+Z2RtYV9yZWdpb24pOw0KPiA+ICsJaWJfdW1lbV9yZWxlYXNlKHdxLT51bWVtKTsN Cj4gPiArDQo+ID4gKwlrZnJlZSh3cSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK2ludCBtYW5hX2liX2NyZWF0ZV9yd3FfaW5kX3RhYmxlKHN0cnVjdCBpYl9y d3FfaW5kX3RhYmxlDQo+ID4gKmliX3J3cV9pbmRfdGFibGUsDQo+ID4gKwkJCQkgc3RydWN0IGli X3J3cV9pbmRfdGFibGVfaW5pdF9hdHRyICppbml0X2F0dHIsDQo+ID4gKwkJCQkgc3RydWN0IGli X3VkYXRhICp1ZGF0YSkNCj4gPiArew0KPiA+ICsJLyoNCj4gPiArCSAqIFRoZXJlIGlzIG5vIGFk ZGl0aW9uYWwgZGF0YSBpbiBpbmRfdGFibGUgdG8gYmUgbWFpbnRhaW5lZCBieSB0aGlzDQo+ID4g KwkgKiBkcml2ZXIsIGRvIG5vdGhpbmcNCj4gPiArCSAqLw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK2ludCBtYW5hX2liX2Rlc3Ryb3lfcndxX2luZF90YWJsZShzdHJ1Y3Qg aWJfcndxX2luZF90YWJsZQ0KPiAqaWJfcndxX2luZF90YmwpDQo+ID4gK3sNCj4gPiArCS8qDQo+ ID4gKwkgKiBUaGVyZSBpcyBubyBhZGRpdGlvbmFsIGRhdGEgaW4gaW5kX3RhYmxlIHRvIGJlIG1h aW50YWluZWQgYnkgdGhpcw0KPiA+ICsJICogZHJpdmVyLCBkbyBub3RoaW5nDQo+ID4gKwkgKi8N Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21h bmEvbWFuYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9tYW5hLmgNCj4gPiBpbmRleCA3MTNhOGY4Y2Nh OWEuLjIwMjEyZmZlZWZiOSAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL25ldC9tYW5hL21hbmEu aA0KPiA+ICsrKyBiL2luY2x1ZGUvbmV0L21hbmEvbWFuYS5oDQo+ID4gQEAgLTQxMiw2ICs0MTIs OSBAQCBpbnQgbWFuYV9icGYoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdA0KPiBuZXRk ZXZfYnBmDQo+ID4gKmJwZik7DQo+ID4NCj4gPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29s X29wcyBtYW5hX2V0aHRvb2xfb3BzOw0KPiA+DQo+ID4gKy8qIEEgQ1EgY2FuIGJlIGNyZWF0ZWQg bm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgRVEgKi8NCj4gPiArI2RlZmluZSBHRE1BX0NRX05PX0VR ICAweGZmZmYNCj4gPiArDQo+ID4gIHN0cnVjdCBtYW5hX29ial9zcGVjIHsNCj4gPiAgCXUzMiBx dWV1ZV9pbmRleDsNCj4gPiAgCXU2NCBnZG1hX3JlZ2lvbjsNCj4gPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS91YXBpL3JkbWEvaWJfdXNlcl9pb2N0bF92ZXJicy5oDQo+ID4gYi9pbmNsdWRlL3VhcGkv cmRtYS9pYl91c2VyX2lvY3RsX3ZlcmJzLmgNCj4gPiBpbmRleCA3ZGQ1NjIxMDIyNmYuLmUwYzI1 NTM3ZmQyZSAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9pYl91c2VyX2lvY3Rs X3ZlcmJzLmgNCj4gPiArKysgYi9pbmNsdWRlL3VhcGkvcmRtYS9pYl91c2VyX2lvY3RsX3ZlcmJz LmgNCj4gPiBAQCAtMjUxLDYgKzI1MSw3IEBAIGVudW0gcmRtYV9kcml2ZXJfaWQgew0KPiA+ICAJ UkRNQV9EUklWRVJfRUZBLA0KPiA+ICAJUkRNQV9EUklWRVJfU0lXLA0KPiA+ICAJUkRNQV9EUklW RVJfRVJETUEsDQo+ID4gKwlSRE1BX0RSSVZFUl9NQU5BLA0KPiA+ICB9Ow0KPiA+DQo+ID4gIGVu dW0gaWJfdXZlcmJzX2dpZF90eXBlIHsNCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3Jk bWEvbWFuYS1hYmkuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL21hbmEtDQo+IGFiaS5oDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjVmY2IzMWIzN2ZiOQ0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9pbmNsdWRlL3VhcGkvcmRtYS9tYW5hLWFiaS5o DQo+ID4gQEAgLTAsMCArMSw2NiBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog KEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUpICovDQo+ID4gKy8qDQo+ID4gKyAqIENv cHlyaWdodCAoYykgMjAyMiwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgTUFOQV9BQklfVVNFUl9IDQo+ID4g KyNkZWZpbmUgTUFOQV9BQklfVVNFUl9IDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4NCj4gPiArI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl9pb2N0bF92ZXJicy5oPg0KPiA+ICsN Cj4gPiArLyoNCj4gPiArICogSW5jcmVtZW50IHRoaXMgdmFsdWUgaWYgYW55IGNoYW5nZXMgdGhh dCBicmVhayB1c2Vyc3BhY2UgQUJJDQo+ID4gKyAqIGNvbXBhdGliaWxpdHkgYXJlIG1hZGUuDQo+ ID4gKyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBNQU5BX0lCX1VWRVJCU19BQklfVkVSU0lPTiAx DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbWFuYV9pYl9jcmVhdGVfY3Egew0KPiA+ICsJX19hbGlnbmVk X3U2NCBidWZfYWRkcjsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBtYW5hX2liX2NyZWF0 ZV9xcCB7DQo+ID4gKwlfX2FsaWduZWRfdTY0IHNxX2J1Zl9hZGRyOw0KPiA+ICsJX191MzIgc3Ff YnVmX3NpemU7DQo+ID4gKwlfX3UzMiBwb3J0Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0 IG1hbmFfaWJfY3JlYXRlX3FwX3Jlc3Agew0KPiA+ICsJX191MzIgc3FpZDsNCj4gPiArCV9fdTMy IGNxaWQ7DQo+ID4gKwlfX3UzMiB0eF92cF9vZmZzZXQ7DQo+ID4gKwlfX3UzMiByZXNlcnZlZDsN Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBtYW5hX2liX2NyZWF0ZV93cSB7DQo+ID4gKwlf X2FsaWduZWRfdTY0IHdxX2J1Zl9hZGRyOw0KPiA+ICsJX191MzIgd3FfYnVmX3NpemU7DQo+ID4g KwlfX3UzMiByZXNlcnZlZDsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIFJYIEhhc2ggZnVuY3Rp b24gZmxhZ3MgKi8NCj4gPiArZW51bSBtYW5hX2liX3J4X2hhc2hfZnVuY3Rpb25fZmxhZ3Mgew0K PiA+ICsJTUFOQV9JQl9SWF9IQVNIX0ZVTkNfVE9FUExJVFogPSAxIDw8IDAsDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgbWFuYV9pYl9jcmVhdGVfcXBfcnNzIHsNCj4gPiArCV9fYWxpZ25l ZF91NjQgcnhfaGFzaF9maWVsZHNfbWFzazsNCj4gPiArCV9fdTggcnhfaGFzaF9mdW5jdGlvbjsN Cj4gPiArCV9fdTggcmVzZXJ2ZWRbN107DQo+ID4gKwlfX3UzMiByeF9oYXNoX2tleV9sZW47DQo+ ID4gKwlfX3U4IHJ4X2hhc2hfa2V5WzQwXTsNCj4gPiArCV9fdTMyIHBvcnQ7DQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgcnNzX3Jlc3BfZW50cnkgew0KPiA+ICsJX191MzIgY3FpZDsNCj4g PiArCV9fdTMyIHdxaWQ7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbWFuYV9pYl9jcmVh dGVfcXBfcnNzX3Jlc3Agew0KPiA+ICsJX19hbGlnbmVkX3U2NCBudW1fZW50cmllczsNCj4gPiAr CXN0cnVjdCByc3NfcmVzcF9lbnRyeSBlbnRyaWVzWzY0XTsNCj4gPiArfTsNCj4gPiArDQo+ID4g KyNlbmRpZg0KPiA+IC0tDQo+ID4gMi4xNy4xDQoNCg==