From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AB72FC4332F for ; Mon, 17 Oct 2022 01:01:35 +0000 (UTC) Received: from localhost ([::1]:34552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1okEVa-00006X-H2 for qemu-devel@archiver.kernel.org; Sun, 16 Oct 2022 21:01:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okERK-0002T9-Md; Sun, 16 Oct 2022 20:57:10 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:35371) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1okERG-0004wd-BQ; Sun, 16 Oct 2022 20:57:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1665968226; x=1697504226; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=yvIAx/WFOZAvbHfjPJ1Ads3igMtANVMnRYzcj6tVH4k=; b=H4sWvqRcPVN41KA99I4yWRmGMcI6ZLAsHf+DhS0RkrBenIbX4oJyuUUa F1q0VU+ZzXUqyVVG9djnzT7aVTErUzJaVCs3JOxRhUGppHIXeHmhi5Rht TvDwDky9WLz/8XYZXBzNrAy4mvtFO30sYA25XYeHRw+k6Ywyq/q3FS3gC kXu9TEJDu6R1j7Vy2c3Jqi4rGP2Inb1Nmyj2wIDS+KDop4ohDpA5CBrpq Ev+tdAJel3Xd7os5fGauo1Pk2g5BqOTcyC/fOm3TRnZepcuKmcVRpH18g frqd6LNEtgW92xvAYazMTZJVyQ5z2w+Zgar7lxOEnIARj8YKTb8Iy6YFg g==; X-IronPort-AV: E=Sophos;i="5.95,190,1661788800"; d="scan'208";a="212291279" Received: from mail-mw2nam10lp2104.outbound.protection.outlook.com (HELO NAM10-MW2-obe.outbound.protection.outlook.com) ([104.47.55.104]) by ob1.hgst.iphmx.com with ESMTP; 17 Oct 2022 08:57:03 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cb+wfKgZrykZCBeJdFaatfqU06lSEFsoNXcCMVhzlDrUTUPYwbPVT3gf/Ih9h2bB2PiPzH9vjr/cKWnO/x4vVIoqYLo35/m3WUPNRE5wdwpiKET2tYiEJubqOFDZ1qk2ivKuVpwjdzu/55NfJP8eFNQ6ecJiNLvT+fO0uCHUzSzQoLPJiBwL8AQpGHtFuIsZGDC4APqR+dyI+wy9lILmCzgD2qqS/K/9Pg5Ritlntiu14F0hLQAsugcuIwmM6kURhWLA2tazrzdIgqI7sQxtr7pkHx9bx+BCGmnBAS+jlIbEe3Ia/AmZLIyPy5HBle9GQgBZVwP51JR1idL9NV9fDA== 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=yvIAx/WFOZAvbHfjPJ1Ads3igMtANVMnRYzcj6tVH4k=; b=bvNB4I9Su++b7t5fU5E4vUguW+N9ozHlHeXzr52BQSkzbB9lpZtBU21k+h86rWI/mAVB3/S/e8iWc8Sij92gmk/ISZ5ztsIjuDiPIZ8SN8WlLDVU0hMkfTX5Xv+l18B6ERLx1i2Bb30ODBOvLR2JjtzrWElXyR0GVU4h/F6FEfI5kI2x50JxTL7DQI0LSzg0mRF9kjhasBWFAWhHRulH4yWt4dH0Ul+DyKkFPGFWyCWiqr6gzvdfe86CvwQwVjje1ZeaUpNBW6o30svVdJ0PxvvfZZkKt0NP2fBZ/i0KnGHG3yzlS7e62s2srdNrR58mnsoqtbhAWCMvaqiXc5Jl1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yvIAx/WFOZAvbHfjPJ1Ads3igMtANVMnRYzcj6tVH4k=; b=QIqlxLSJkjT/h/nXd+oQlegsqYO6z5UsIuZGOOLVDUtoJo5QsBnf4rMknGkDsJxNotbd7wogkM6gW9r0Q29WQ/cW0taE14EDVgUoxXPZrAA6a8T+foCdDVTTqnvYlAGMhAny4o3dpcJkrQa+PI7iGHmuMwrEnJKlD2+DsPQymmc= Received: from MN2PR04MB5951.namprd04.prod.outlook.com (2603:10b6:208:3f::13) by MWHPR04MB0512.namprd04.prod.outlook.com (2603:10b6:300:70::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.29; Mon, 17 Oct 2022 00:56:54 +0000 Received: from MN2PR04MB5951.namprd04.prod.outlook.com ([fe80::51df:fdd7:7c49:12ee]) by MN2PR04MB5951.namprd04.prod.outlook.com ([fe80::51df:fdd7:7c49:12ee%5]) with mapi id 15.20.5723.032; Mon, 17 Oct 2022 00:56:52 +0000 From: Dmitry Fomichev To: "faithilikerun@gmail.com" , "qemu-devel@nongnu.org" CC: "hreitz@redhat.com" , "hare@suse.de" , "armbru@redhat.com" , "stefanha@redhat.com" , "fam@euphon.net" , "qemu-block@nongnu.org" , "eblake@redhat.com" , "kwolf@redhat.com" , "damien.lemoal@opensource.wdc.com" Subject: Re: [PATCH v12 3/7] block: add block layer APIs resembling Linux ZonedBlockDevice ioctls Thread-Topic: [PATCH v12 3/7] block: add block layer APIs resembling Linux ZonedBlockDevice ioctls Thread-Index: AQHY4W7Q4KIgJfKGvEaaM6qFkcW+qK4Rw9GA Date: Mon, 17 Oct 2022 00:56:52 +0000 Message-ID: References: <20221016145110.171262-1-faithilikerun@gmail.com> <20221016145110.171262-4-faithilikerun@gmail.com> In-Reply-To: <20221016145110.171262-4-faithilikerun@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.1-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=wdc.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR04MB5951:EE_|MWHPR04MB0512:EE_ x-ms-office365-filtering-correlation-id: 5419a49f-cc0d-4e97-fbcb-08daafda7af0 wdcipoutbound: EOP-TRUE x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: MPiErlV+l8q3M3KOe05cwU5KMJ5kaivBdvpl0ZXFOkEp06p0MS1YNu+2DJyYMNQ8FM4ywzHnXIzjI1zORQOYNwDT61vWa5hZmZlB362ExZ1CcYsAt5WPi1exs3GKukaXp6JBqMUcCuayX7a3BSi/z3nzSRGQTeEFagEK0OjefxDIdP1bn4EI6HxMvYpknxXiSRPqWgrhn9GrtokX/nwRSjp0cbjs6H9lN9l9dsP+cUHiZVG9iCZvmOL6k8IG/e/9wHyYhTGdbl/WS+4AvecQr9EZ6FkM7i0nrIs6c+NbsCm/6wzdZHgRlS4JC2vxs+U5SaOHUcvxYsfk+Q5ZP28JGFjQkGDji8DKa2uI6AJO5sr8noZ3p+bteo2MyDBV/4rNplKDZwtNPy4mxwPSN0KIptEWfrD6OTv2H18RfTT4Hn9XkIHqvtSAKFFe2SclVnEo/T7XzwQuGGRYDbKEb0+OVPgMXuvqtPZT9M2V5rNF9Qced8nHbNj3/fsJeJ5iz0W6G5HHjfTXe8kjia5Jh5r14R4C71OVLcOQgfo15badZq1YSPclm7p2UM1nywcCPxvU4QwDWcp3zyIeOEEGjn9LOMnCYLjnbYQqm8AUK7RvFrKG7MPSUuiFlQhXARFK8+9KcXzaJmX5Kbx4ZHueoIs9eurAisV/SBtGXDkhrdvHZ/wiV+Wmow/HKvGqldSxboPg1d507j58pFHuciBQnZSi745tXJwFBYpx5FA+TRJFxYiBl4LU/AcWjWtO1DQ0QMyHAqUhe8pCYntBptbAZ6fIOg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR04MB5951.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(396003)(376002)(346002)(136003)(366004)(39860400002)(451199015)(6506007)(71200400001)(478600001)(110136005)(54906003)(6486002)(66446008)(30864003)(26005)(64756008)(8676002)(4326008)(91956017)(76116006)(66556008)(66946007)(41300700001)(6512007)(8936002)(5660300002)(7416002)(66476007)(2616005)(316002)(83380400001)(82960400001)(38070700005)(186003)(2906002)(4001150100001)(122000001)(38100700002)(86362001)(36756003)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Y1NyNlRpWG9oZjF4ZmRic3cwU3hGc0VEdUJTa3Y3U29sTEsrUmk4WGYyRWxJ?= =?utf-8?B?WXBhYkpRVm5HWHM5KzhDTnRxd21QTnFCMU56VURRaXJSV00wbGY4emo2WHp4?= =?utf-8?B?a3hKOUhycE9xTllxZENUbjdBcG9keHlwcFFMSjJQSFJKQVlIbytXTmFuUWxO?= =?utf-8?B?eWdnSkRtUCt4dEZ5S1haaytYZzA0Yzc3K3ErK0ZySjViT0tBRkV2QVVhK3hD?= =?utf-8?B?dXVFQ2Y1WS8rSkI5SHVUSHhvZHhtaHBLRy9aZUlXaXEyTXR4NUw1WUg3aHl1?= =?utf-8?B?NzdGY0RjbWpVZUJodCtMaUZoVENuYWlKU2djK0FsMGh2KzloaG41cmQ3VC8z?= =?utf-8?B?azNnNTBOMkhZWDNTVWhNcTUyMWt5bW9pMXVlcENRSXBiVUZ3MW5SQWVoSUNG?= =?utf-8?B?Z01LWlptTWdTckRGV25YNE5jL1Q4N2t0UEp3L3d5TlE4QWF2L2Y1aTNkbVlt?= =?utf-8?B?VkI3NjZMUklhUkhYOElNSjhYMlpBVWFNaGt3Tno5aUxOa2hVVGsxdTlXV1VD?= =?utf-8?B?YWY4K09nTGpBS2xSS20yWHhDckUrNVJKL2hZUElWVzZCR0ErbWRjMmN5MWVI?= =?utf-8?B?dlFmZWxGUHpyZVR4a0p1QzJ3M2dBMG1pMjBYbzJVWENONTRzMFZFOTJkd0p4?= =?utf-8?B?RENucmo5NGVSa3dFU1pMY3pKYUtDalduME1tcjd5YTBDWm9oKy9xa3ptcnV2?= =?utf-8?B?dTNRRk9KbXpHdlJtbEpsckNCTUtrV2FKNDZ3RUpxZGxhdWtQNVdFTXZNSlNl?= =?utf-8?B?bkMzRHNJTFA1U1hvZ0tJRDBTcVB2S2hxT3YrTnFYSGNZT0lySHgyUFRCZGhP?= =?utf-8?B?MDFTSDYwM1B1S3pTcXpOWkxYdUtLVU5uRzFUc1EvcVppWVJ5d2psYWNYSi8v?= =?utf-8?B?OU1Ld3g2NnNBcUYrWHd3T2hYTGRRY2VaTFA2RXM0WjNZWlZrdzFFd0xENVUr?= =?utf-8?B?ZVBUUWUzTks1NmpFTjNmRi9uSkNxWXBtOWJrY0JEV1NUZHp0WWszVWg5K01L?= =?utf-8?B?ZG1YSU5uaGtJVFk0ZGRncVdhNWlZb1J5UnhtZGwzOHZtaUkrU29SNXUrdXpJ?= =?utf-8?B?dWcxWStJVld2OWZyMlg5MEVBcEJrMVBQVzFKb0dwN3NZS2JoZXAxM3pQZC94?= =?utf-8?B?eTNGNTMycmQ3SFl2a25YV2I5SS9wM2dCRUl5VTd3dDhaOVQ4TE5yVnM1cDVF?= =?utf-8?B?NTN1ZHlDTVFvSlQ0SXM2Tk84VGZLSGpKYVZvUE1JK21ySmIzaTYyNllBcGQw?= =?utf-8?B?OHpPVEFkWG9oSWNYdjUySlRXdEUvWmtiRHpHRjM0elp1TmNyNFlTdTVNL1o4?= =?utf-8?B?VVBiTVBXNk4wTzVaSWxMcEtVdjdQYzJVc1RHcmxPdWd6R1RUdlFOblFpT1Jy?= =?utf-8?B?bGt5SWFtRU84ODdGYVV6TmRzZTVRaXRzTmpRa2lqK0xkY0pJMXFXbkt1V3Zh?= =?utf-8?B?anhuZDdqbno2VmNDTDdoY0paSE5nUVdFdzZOL0pqd2xrckllYlJQZm5uSnVZ?= =?utf-8?B?REo3dWt4Vm8vd1dCeUtidVFBM0NRd2g1YUhEUTdJakpSWHhBU29zam1CNVFO?= =?utf-8?B?Z0NkeFlld2VKVk44ZmtsbHl6dEtBSVQ5VzdJZ2x4RDNFRHhLQ3lBQVlNM1l3?= =?utf-8?B?Rmt6T0tGcTJBb3hmcHRSejFiK2V1U0VzbElaaUdEK3BzbExaMlVQMHBuaFN1?= =?utf-8?B?U2ZIRGNBZGR4NDAyQ254bXVITjVOdGg5dk05QnVKQ2FSbDI5WjRFMTd4WXFr?= =?utf-8?B?UHhMTUhpZUlIQ2pkMENPOHlLRlVuN05NU3A2ZnNidGxZTWI1WVVpYlNmeDl4?= =?utf-8?B?WUJ6UUFVSzc3bnVwUW0rVGhCbmZ1QWNvbVRmZzB4OEgyeDJIMWpTYUF2K2ly?= =?utf-8?B?b2hCbmhFcGV1OENwNDFEUUJmVmMwNFdyRjhSOGtBTnR0YisyUnpORC9MVElO?= =?utf-8?B?SkVXYVJsN2FsdW0reWV4SkU4M25leUJPekFxbGlTUHVhZmVSUWlodnhIWFpR?= =?utf-8?B?VmREWDBZdC92ZHB1RFZJWEZDL09xN0trN1RGNWc4UWVKZlhsc2tnVEJzUkhq?= =?utf-8?B?RW1WSFQxNjE0UEcwSitXK0Ewa0NzQVVkSmlvTU1aVkI5ZTQyQW4xNmVIa3pR?= =?utf-8?B?WEg2U3d2VHRzWC82QzBwZ3pFUDcwbnJQUUh4dkJFNXJxb3hDekcrRGVCZ2xB?= =?utf-8?B?NGc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <7F957DC684896140967EEACD393237B3@namprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR04MB5951.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5419a49f-cc0d-4e97-fbcb-08daafda7af0 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Oct 2022 00:56:52.6066 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: y41KPR7dt5a44MY5ob7jvK4qx9f9KDNO7atA+Uu/qQuJ/fncXpFW+OjfgxrH8MvwQbwQrgb4vbIu+D9T31b3Mg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR04MB0512 Received-SPF: pass client-ip=216.71.154.42; envelope-from=prvs=282f36034=Dmitry.Fomichev@wdc.com; helo=esa4.hgst.iphmx.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" T24gU3VuLCAyMDIyLTEwLTE2IGF0IDIyOjUxICswODAwLCBTYW0gTGkgd3JvdGU6Cj4gQWRkIGEg bmV3IHpvbmVkX2hvc3RfZGV2aWNlIEJsb2NrRHJpdmVyLiBUaGUgem9uZWRfaG9zdF9kZXZpY2Ug b3B0aW9uCj4gYWNjZXB0cyBvbmx5IHpvbmVkIGhvc3QgYmxvY2sgZGV2aWNlcy4gQnkgYWRkaW5n IHpvbmUgbWFuYWdlbWVudAo+IG9wZXJhdGlvbnMgaW4gdGhpcyBuZXcgQmxvY2tEcml2ZXIsIHVz ZXJzIGNhbiB1c2UgdGhlIG5ldyBibG9jawo+IGxheWVyIEFQSXMgaW5jbHVkaW5nIFJlcG9ydCBa b25lIGFuZCBmb3VyIHpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zCj4gKG9wZW4sIGNsb3NlLCBm aW5pc2gsIHJlc2V0LCByZXNldF9hbGwpLgo+IAo+IFFlbXUtaW8gdXNlcyB0aGUgbmV3IEFQSXMg dG8gcGVyZm9ybSB6b25lZCBzdG9yYWdlIGNvbW1hbmRzIG9mIHRoZSBkZXZpY2U6Cj4gem9uZV9y ZXBvcnQoenJwKSwgem9uZV9vcGVuKHpvKSwgem9uZV9jbG9zZSh6YyksIHpvbmVfcmVzZXQoenJz KSwKPiB6b25lX2ZpbmlzaCh6ZikuCj4gCj4gRm9yIGV4YW1wbGUsIHRvIHRlc3Qgem9uZV9yZXBv cnQsIHVzZSBmb2xsb3dpbmcgY29tbWFuZDoKPiAkIC4vYnVpbGQvcWVtdS1pbyAtLWltYWdlLW9w dHMgLW4gZHJpdmVyPXpvbmVkX2hvc3RfZGV2aWNlLAo+IGZpbGVuYW1lPS9kZXYvbnVsbGIwCj4g LWMgInpycCBvZmZzZXQgbnJfem9uZXMiCj4gCj4gU2lnbmVkLW9mZi1ieTogU2FtIExpIDxmYWl0 aGlsaWtlcnVuQGdtYWlsLmNvbT4KPiBSZXZpZXdlZC1ieTogSGFubmVzIFJlaW5lY2tlIDxoYXJl QHN1c2UuZGU+Cj4gLS0tCj4gwqBibG9jay9ibG9jay1iYWNrZW5kLmPCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfCAxNDggKysrKysrKysrKysrKwo+IMKgYmxvY2svZmlsZS1wb3NpeC5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMzM1ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+IMKgYmxvY2svaW8uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgIDQxICsrKysKPiDCoGluY2x1ZGUvYmxvY2svYmxvY2staW8uaMKgwqDCoMKg wqDCoMKgwqDCoCB8wqDCoCA3ICsKPiDCoGluY2x1ZGUvYmxvY2svYmxvY2tfaW50LWNvbW1vbi5o wqAgfMKgIDI0ICsrKwo+IMKgaW5jbHVkZS9ibG9jay9yYXctYWlvLmjCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqDCoCA2ICstCj4gwqBpbmNsdWRlL3N5c2VtdS9ibG9jay1iYWNrZW5kLWlvLmggfMKg IDE4ICsrCj4gwqBtZXNvbi5idWlsZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHzCoMKgIDQgKwo+IMKgcWFwaS9ibG9jay1jb3JlLmpzb27CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCA4ICstCj4gwqBxZW11LWlvLWNtZHMuY8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTQ5ICsrKysrKysrKysrKysKPiDCoDEwIGZpbGVz IGNoYW5nZWQsIDczNyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9ibG9jay9ibG9jay1iYWNrZW5kLmMgYi9ibG9jay9ibG9jay1iYWNrZW5kLmMKPiBpbmRl eCBhYTRhZGYwNmFlLi4xYzYxOGU5YzY4IDEwMDY0NAo+IC0tLSBhL2Jsb2NrL2Jsb2NrLWJhY2tl bmQuYwo+ICsrKyBiL2Jsb2NrL2Jsb2NrLWJhY2tlbmQuYwo+IEBAIC0xNDMxLDYgKzE0MzEsMTUg QEAgdHlwZWRlZiBzdHJ1Y3QgQmxrUndDbyB7Cj4gwqDCoMKgwqAgdm9pZCAqaW9idWY7Cj4gwqDC oMKgwqAgaW50IHJldDsKPiDCoMKgwqDCoCBCZHJ2UmVxdWVzdEZsYWdzIGZsYWdzOwo+ICvCoMKg wqAgdW5pb24gewo+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHVuc2lnbmVkIGludCAqbnJfem9uZXM7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg QmxvY2tab25lRGVzY3JpcHRvciAqem9uZXM7Cj4gK8KgwqDCoMKgwqDCoMKgIH0gem9uZV9yZXBv cnQ7Cj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dW5zaWduZWQgbG9uZyBvcDsKPiArwqDCoMKgwqDCoMKgwqAgfSB6b25lX21nbXQ7Cj4gK8KgwqDC oCB9Owo+IMKgfSBCbGtSd0NvOwo+IMKgCj4gwqBpbnQgYmxrX21ha2VfemVybyhCbG9ja0JhY2tl bmQgKmJsaywgQmRydlJlcXVlc3RGbGFncyBmbGFncykKPiBAQCAtMTc3NSw2ICsxNzg0LDE0NSBA QCBpbnQgY29yb3V0aW5lX2ZuIGJsa19jb19mbHVzaChCbG9ja0JhY2tlbmQgKmJsaykKPiDCoMKg wqDCoCByZXR1cm4gcmV0Owo+IMKgfQo+IMKgCj4gK3N0YXRpYyB2b2lkIGNvcm91dGluZV9mbiBi bGtfYWlvX3pvbmVfcmVwb3J0X2VudHJ5KHZvaWQgKm9wYXF1ZSkKPiArewo+ICvCoMKgwqAgQmxr QWlvRW1BSU9DQiAqYWNiID0gb3BhcXVlOwo+ICvCoMKgwqAgQmxrUndDbyAqcndjbyA9ICZhY2It PnJ3Y287Cj4gKwo+ICvCoMKgwqAgcndjby0+cmV0ID0gYmxrX2NvX3pvbmVfcmVwb3J0KHJ3Y28t PmJsaywgcndjby0+b2Zmc2V0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByd2NvLT56b25lX3JlcG9ydC5ucl96 b25lcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcndjby0+em9uZV9yZXBvcnQuem9uZXMpOwo+ICvCoMKgwqAg YmxrX2Fpb19jb21wbGV0ZShhY2IpOwo+ICt9Cj4gKwo+ICtCbG9ja0FJT0NCICpibGtfYWlvX3pv bmVfcmVwb3J0KEJsb2NrQmFja2VuZCAqYmxrLCBpbnQ2NF90IG9mZnNldCwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgaW50ICpucl96b25lcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQmxvY2tab25lRGVzY3JpcHRvcsKgICp6b25l cywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgQmxvY2tDb21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSkKPiArewo+ ICvCoMKgwqAgQmxrQWlvRW1BSU9DQiAqYWNiOwo+ICvCoMKgwqAgQ29yb3V0aW5lICpjbzsKPiAr wqDCoMKgIElPX0NPREUoKTsKPiArCj4gK8KgwqDCoCBibGtfaW5jX2luX2ZsaWdodChibGspOwo+ ICvCoMKgwqAgYWNiID0gYmxrX2Fpb19nZXQoJmJsa19haW9fZW1fYWlvY2JfaW5mbywgYmxrLCBj Yiwgb3BhcXVlKTsKPiArwqDCoMKgIGFjYi0+cndjbyA9IChCbGtSd0NvKSB7Cj4gK8KgwqDCoMKg wqDCoMKgIC5ibGvCoMKgwqAgPSBibGssCj4gK8KgwqDCoMKgwqDCoMKgIC5vZmZzZXQgPSBvZmZz ZXQsCj4gK8KgwqDCoMKgwqDCoMKgIC5yZXTCoMKgwqAgPSBOT1RfRE9ORSwKPiArwqDCoMKgwqDC oMKgwqAgLnpvbmVfcmVwb3J0ID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC56b25lcyA9 IHpvbmVzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5ucl96b25lcyA9IG5yX3pvbmVzLAo+ ICvCoMKgwqDCoMKgwqDCoCB9LAo+ICvCoMKgwqAgfTsKPiArwqDCoMKgIGFjYi0+aGFzX3JldHVy bmVkID0gZmFsc2U7Cj4gKwo+ICvCoMKgwqAgY28gPSBxZW11X2Nvcm91dGluZV9jcmVhdGUoYmxr X2Fpb196b25lX3JlcG9ydF9lbnRyeSwgYWNiKTsKPiArwqDCoMKgIGJkcnZfY29yb3V0aW5lX2Vu dGVyKGJsa19icyhibGspLCBjbyk7Cj4gKwo+ICvCoMKgwqAgYWNiLT5oYXNfcmV0dXJuZWQgPSB0 cnVlOwo+ICvCoMKgwqAgaWYgKGFjYi0+cndjby5yZXQgIT0gTk9UX0RPTkUpIHsKPiArwqDCoMKg wqDCoMKgwqAgcmVwbGF5X2JoX3NjaGVkdWxlX29uZXNob3RfZXZlbnQoYmxrX2dldF9haW9fY29u dGV4dChibGspLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBibGtfYWlvX2NvbXBsZXRlX2Jo LCBhY2IpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAmYWNiLT5jb21tb247Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcm91dGluZV9mbiBibGtfYWlvX3pvbmVfbWdtdF9lbnRy eSh2b2lkICpvcGFxdWUpCj4gK3sKPiArwqDCoMKgIEJsa0Fpb0VtQUlPQ0IgKmFjYiA9IG9wYXF1 ZTsKPiArwqDCoMKgIEJsa1J3Q28gKnJ3Y28gPSAmYWNiLT5yd2NvOwo+ICsKPiArwqDCoMKgIHJ3 Y28tPnJldCA9IGJsa19jb196b25lX21nbXQocndjby0+YmxrLCByd2NvLT56b25lX21nbXQub3As Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcndjby0+b2Zmc2V0LCBhY2ItPmJ5dGVzKTsKPiArwqDCoMKgIGJsa19haW9f Y29tcGxldGUoYWNiKTsKPiArfQo+ICsKPiArQmxvY2tBSU9DQiAqYmxrX2Fpb196b25lX21nbXQo QmxvY2tCYWNrZW5kICpibGssIEJsb2NrWm9uZU9wIG9wLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludDY0X3Qgb2Zmc2V0LCBp bnQ2NF90IGxlbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBCbG9ja0NvbXBsZXRpb25GdW5jICpjYiwgdm9pZCAqb3BhcXVlKSB7 Cj4gK8KgwqDCoCBCbGtBaW9FbUFJT0NCICphY2I7Cj4gK8KgwqDCoCBDb3JvdXRpbmUgKmNvOwo+ ICvCoMKgwqAgSU9fQ09ERSgpOwo+ICsKPiArwqDCoMKgIGJsa19pbmNfaW5fZmxpZ2h0KGJsayk7 Cj4gK8KgwqDCoCBhY2IgPSBibGtfYWlvX2dldCgmYmxrX2Fpb19lbV9haW9jYl9pbmZvLCBibGss IGNiLCBvcGFxdWUpOwo+ICvCoMKgwqAgYWNiLT5yd2NvID0gKEJsa1J3Q28pIHsKPiArwqDCoMKg wqDCoMKgwqAgLmJsa8KgwqDCoCA9IGJsaywKPiArwqDCoMKgwqDCoMKgwqAgLm9mZnNldCA9IG9m ZnNldCwKPiArwqDCoMKgwqDCoMKgwqAgLnJldMKgwqDCoCA9IE5PVF9ET05FLAo+ICvCoMKgwqDC oMKgwqDCoCAuem9uZV9tZ210ID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5vcCA9IG9w LAo+ICvCoMKgwqDCoMKgwqDCoCB9LAo+ICvCoMKgwqAgfTsKPiArwqDCoMKgIGFjYi0+Ynl0ZXMg PSBsZW47Cj4gK8KgwqDCoCBhY2ItPmhhc19yZXR1cm5lZCA9IGZhbHNlOwo+ICsKPiArwqDCoMKg IGNvID0gcWVtdV9jb3JvdXRpbmVfY3JlYXRlKGJsa19haW9fem9uZV9tZ210X2VudHJ5LCBhY2Ip Owo+ICvCoMKgwqAgYmRydl9jb3JvdXRpbmVfZW50ZXIoYmxrX2JzKGJsayksIGNvKTsKPiArCj4g K8KgwqDCoCBhY2ItPmhhc19yZXR1cm5lZCA9IHRydWU7Cj4gK8KgwqDCoCBpZiAoYWNiLT5yd2Nv LnJldCAhPSBOT1RfRE9ORSkgewo+ICvCoMKgwqDCoMKgwqDCoCByZXBsYXlfYmhfc2NoZWR1bGVf b25lc2hvdF9ldmVudChibGtfZ2V0X2Fpb19jb250ZXh0KGJsayksCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJsa19haW9fY29tcGxldGVfYmgsIGFjYik7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvC oMKgwqAgcmV0dXJuICZhY2ItPmNvbW1vbjsKPiArfQo+ICsKPiArLyoKPiArICogU2VuZCBhIHpv bmVfcmVwb3J0IGNvbW1hbmQuCj4gKyAqIG9mZnNldCBpcyBhIGJ5dGUgb2Zmc2V0IGZyb20gdGhl IHN0YXJ0IG9mIHRoZSBkZXZpY2UuIE5vIGFsaWdubWVudAo+ICsgKiByZXF1aXJlZCBmb3Igb2Zm c2V0Lgo+ICsgKiBucl96b25lcyByZXByZXNlbnRzIElOIG1heGltdW0gYW5kIE9VVCBhY3R1YWwu Cj4gKyAqLwo+ICtpbnQgY29yb3V0aW5lX2ZuIGJsa19jb196b25lX3JlcG9ydChCbG9ja0JhY2tl bmQgKmJsaywgaW50NjRfdCBvZmZzZXQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50ICpu cl96b25lcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCbG9ja1pvbmVEZXNjcmlwdG9yICp6b25lcykKPiAr ewo+ICvCoMKgwqAgaW50IHJldDsKPiArwqDCoMKgIElPX0NPREUoKTsKPiArCj4gK8KgwqDCoCBi bGtfaW5jX2luX2ZsaWdodChibGspOyAvKiBpbmNyZWFzZSBiZWZvcmUgd2FpdGluZyAqLwo+ICvC oMKgwqAgYmxrX3dhaXRfd2hpbGVfZHJhaW5lZChibGspOwo+ICvCoMKgwqAgaWYgKCFibGtfaXNf YXZhaWxhYmxlKGJsaykpIHsKPiArwqDCoMKgwqDCoMKgwqAgYmxrX2RlY19pbl9mbGlnaHQoYmxr KTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRURJVU07Cj4gK8KgwqDCoCB9Cj4gK8Kg wqDCoCByZXQgPSBiZHJ2X2NvX3pvbmVfcmVwb3J0KGJsa19icyhibGspLCBvZmZzZXQsIG5yX3pv bmVzLCB6b25lcyk7Cj4gK8KgwqDCoCBibGtfZGVjX2luX2ZsaWdodChibGspOwo+ICvCoMKgwqAg cmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICogU2VuZCBhIHpvbmVfbWFuYWdlbWVudCBj b21tYW5kLgo+ICsgKiBvcCBpcyB0aGUgem9uZSBvcGVyYXRpb247Cj4gKyAqIG9mZnNldCBpcyB0 aGUgYnl0ZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHpvbmVkIGRldmljZTsKPiArICog bGVuIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgY29tbWFuZCBzaG91bGQgb3Bl cmF0ZSBvbi4gSXQKPiArICogc2hvdWxkIGJlIGFsaWduZWQgd2l0aCB0aGUgZGV2aWNlIHpvbmUg c2l6ZS4KPiArICovCj4gK2ludCBjb3JvdXRpbmVfZm4gYmxrX2NvX3pvbmVfbWdtdChCbG9ja0Jh Y2tlbmQgKmJsaywgQmxvY2tab25lT3Agb3AsCj4gK8KgwqDCoMKgwqDCoMKgIGludDY0X3Qgb2Zm c2V0LCBpbnQ2NF90IGxlbikKPiArewo+ICvCoMKgwqAgaW50IHJldDsKPiArwqDCoMKgIElPX0NP REUoKTsKPiArCj4gKwo+ICvCoMKgwqAgYmxrX2luY19pbl9mbGlnaHQoYmxrKTsKPiArwqDCoMKg IGJsa193YWl0X3doaWxlX2RyYWluZWQoYmxrKTsKPiArCj4gK8KgwqDCoCByZXQgPSBibGtfY2hl Y2tfYnl0ZV9yZXF1ZXN0KGJsaywgb2Zmc2V0LCBsZW4pOwo+ICvCoMKgwqAgaWYgKHJldCA8IDAp IHsKPiArwqDCoMKgwqDCoMKgwqAgYmxrX2RlY19pbl9mbGlnaHQoYmxrKTsKPiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHJldDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXQgPSBiZHJ2X2Nv X3pvbmVfbWdtdChibGtfYnMoYmxrKSwgb3AsIG9mZnNldCwgbGVuKTsKPiArwqDCoMKgIGJsa19k ZWNfaW5fZmxpZ2h0KGJsayk7Cj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+IMKgdm9p ZCBibGtfZHJhaW4oQmxvY2tCYWNrZW5kICpibGspCj4gwqB7Cj4gwqDCoMKgwqAgQmxvY2tEcml2 ZXJTdGF0ZSAqYnMgPSBibGtfYnMoYmxrKTsKPiBkaWZmIC0tZ2l0IGEvYmxvY2svZmlsZS1wb3Np eC5jIGIvYmxvY2svZmlsZS1wb3NpeC5jCj4gaW5kZXggOGNiMDdmZGI4YS4uYmQyOGUzZWFlYSAx MDA2NDQKPiAtLS0gYS9ibG9jay9maWxlLXBvc2l4LmMKPiArKysgYi9ibG9jay9maWxlLXBvc2l4 LmMKPiBAQCAtNjcsNiArNjcsOSBAQAo+IMKgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgo+IMKgI2lu Y2x1ZGUgPHN5cy9zeXNjYWxsLmg+Cj4gwqAjaW5jbHVkZSA8c3lzL3Zmcy5oPgo+ICsjaWYgZGVm aW5lZChDT05GSUdfQkxLWk9ORUQpCj4gKyNpbmNsdWRlIDxsaW51eC9ibGt6b25lZC5oPgo+ICsj ZW5kaWYKPiDCoCNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L2Zk Lmg+Cj4gwqAjaW5jbHVkZSA8bGludXgvZnMuaD4KPiBAQCAtMjE1LDYgKzIxOCwxNCBAQCB0eXBl ZGVmIHN0cnVjdCBSYXdQb3NpeEFJT0RhdGEgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQ cmVhbGxvY01vZGUgcHJlYWxsb2M7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVycm9yICoq ZXJycDsKPiDCoMKgwqDCoMKgwqDCoMKgIH0gdHJ1bmNhdGU7Cj4gK8KgwqDCoMKgwqDCoMKgIHN0 cnVjdCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50ICpucl96b25lczsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCbG9ja1pvbmVEZXNjcmlwdG9yICp6b25lczsKPiAr wqDCoMKgwqDCoMKgwqAgfSB6b25lX3JlcG9ydDsKPiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHpvbmVfb3A7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqem9uZV9vcF9uYW1lOwo+ICvCoMKgwqDCoMKg wqDCoCB9IHpvbmVfbWdtdDsKPiDCoMKgwqDCoCB9Owo+IMKgfSBSYXdQb3NpeEFJT0RhdGE7Cj4g wqAKPiBAQCAtMTM1MCw2ICsxMzYxLDQ4IEBAIHN0YXRpYyB2b2lkIHJhd19yZWZyZXNoX2xpbWl0 cyhCbG9ja0RyaXZlclN0YXRlICpicywKPiBFcnJvciAqKmVycnApCj4gwqDCoMKgwqDCoMKgwqDC oCB6b25lZCA9IEJMS19aX05PTkU7Cj4gwqDCoMKgwqAgfQo+IMKgwqDCoMKgIGJzLT5ibC56b25l ZCA9IHpvbmVkOwo+ICvCoMKgwqAgaWYgKHpvbmVkICE9IEJMS19aX05PTkUpIHsKPiArwqDCoMKg wqDCoMKgwqAgLyoKPiArwqDCoMKgwqDCoMKgwqDCoCAqIFRoZSB6b25lZCBkZXZpY2UgbXVzdCBh dCBsZWFzdCBoYXZlIHpvbmUgc2l6ZSBhbmQgbnJfem9uZXMgZmllbGRzLgo+ICvCoMKgwqDCoMKg wqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGdldF9zeXNmc19sb25nX3ZhbCgmc3Qs ICJjaHVua19zZWN0b3JzIik7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPD0gMCkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVycm9yX3JlcG9ydCgiSW52YWxpZCB6b25lIHNpemUgJSIg UFJJZDMyICIgc2VjdG9ycyAiLCByZXQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJzLT5i bC56b25lZCA9IEJMS19aX05PTkU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgIGJzLT5ibC56b25lX3NpemUgPSBy ZXQgPDwgQkRSVl9TRUNUT1JfQklUUzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGdldF9z eXNmc19sb25nX3ZhbCgmc3QsICJucl96b25lcyIpOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0 IDw9IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvcl9yZXBvcnQoIkludmFsaWQg bnVtYmVyIG9mIHpvbmVzICUiIFBSSWQzMiAiIiwgcmV0KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBicy0+Ymwuem9uZWQgPSBCTEtfWl9OT05FOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybjsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCBicy0+YmwubnJf em9uZXMgPSByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBpb2N0bChzLT5mZCwgQkxL R0VUU0laRTY0LCAmYnMtPmJsLmNhcGFjaXR5KTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCAh PSAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyb3JfcmVwb3J0KCJGYWlsZWQgdG8g Z2V0IGRldmljZSBjYXBhY2l0eSAlIiBQUklkNjQgIiBieXRlcyAiLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnMtPmJsLmNhcGFjaXR5KTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgIHJldCA9IGdldF9zeXNmc19sb25nX3ZhbCgmc3QsICJ6b25lX2FwcGVu ZF9tYXhfYnl0ZXMiKTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA+IDApIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBicy0+YmwubWF4X2FwcGVuZF9zZWN0b3JzID0gcmV0ID4+IEJEUlZf U0VDVE9SX0JJVFM7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgIHJl dCA9IGdldF9zeXNmc19sb25nX3ZhbCgmc3QsICJtYXhfb3Blbl96b25lcyIpOwo+ICvCoMKgwqDC oMKgwqDCoCBpZiAocmV0ID49IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicy0+Ymwu bWF4X29wZW5fem9uZXMgPSByZXQ7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IGdldF9zeXNmc19sb25nX3ZhbCgmc3QsICJtYXhfYWN0aXZlX3pvbmVzIik7 Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPj0gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJzLT5ibC5tYXhfYWN0aXZlX3pvbmVzID0gcmV0Owo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4g K8KgwqDCoCB9Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQgY2hlY2tfZm9yX2Rhc2QoaW50IGZk KQo+IEBAIC0xODQ0LDYgKzE4OTcsMTQ0IEBAIHN0YXRpYyBvZmZfdCBjb3B5X2ZpbGVfcmFuZ2Uo aW50IGluX2ZkLCBvZmZfdCAqaW5fb2ZmLAo+IGludCBvdXRfZmQsCj4gwqB9Cj4gwqAjZW5kaWYK PiDCoAo+ICsvKgo+ICsgKiBwYXJzZV96b25lIC0gRmlsbCBhIHpvbmUgZGVzY3JpcHRvcgo+ICsg Ki8KPiArI2lmIGRlZmluZWQoQ09ORklHX0JMS1pPTkVEKQo+ICtzdGF0aWMgaW5saW5lIHZvaWQg cGFyc2Vfem9uZShzdHJ1Y3QgQmxvY2tab25lRGVzY3JpcHRvciAqem9uZSwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBz dHJ1Y3QgYmxrX3pvbmUgKmJsa3opIHsKPiArwqDCoMKgIHpvbmUtPnN0YXJ0ID0gYmxrei0+c3Rh cnQgPDwgQkRSVl9TRUNUT1JfQklUUzsKPiArwqDCoMKgIHpvbmUtPmxlbmd0aCA9IGJsa3otPmxl biA8PCBCRFJWX1NFQ1RPUl9CSVRTOwo+ICvCoMKgwqAgem9uZS0+d3AgPSBibGt6LT53cCA8PCBC RFJWX1NFQ1RPUl9CSVRTOwo+ICsKPiArI2lmZGVmIEhBVkVfQkxLX1pPTkVfUkVQX0NBUEFDSVRZ Cj4gK8KgwqDCoCB6b25lLT5jYXAgPSBibGt6LT5jYXBhY2l0eSA8PCBCRFJWX1NFQ1RPUl9CSVRT Owo+ICsjZWxzZQo+ICvCoMKgwqAgem9uZS0+Y2FwID0gYmxrei0+bGVuIDw8IEJEUlZfU0VDVE9S X0JJVFM7Cj4gKyNlbmRpZgo+ICsKPiArwqDCoMKgIHN3aXRjaCAoYmxrei0+dHlwZSkgewo+ICvC oMKgwqAgY2FzZSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUToKPiArwqDCoMKgwqDCoMKgwqAg em9uZS0+dHlwZSA9IEJMS19aVF9TV1I7Cj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKg wqAgY2FzZSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1BSRUY6Cj4gK8KgwqDCoMKgwqDCoMKgIHpv bmUtPnR5cGUgPSBCTEtfWlRfU1dQOwo+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKg IGNhc2UgQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw6Cj4gK8KgwqDCoMKgwqDCoMKgIHpvbmUt PnR5cGUgPSBCTEtfWlRfQ09OVjsKPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBk ZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoCBlcnJvcl9yZXBvcnQoIkludmFsaWQgem9uZSB0eXBl OiAweCV4IiwgYmxrei0+dHlwZSk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgc3dpdGNoIChi bGt6LT5jb25kKSB7Cj4gK8KgwqDCoCBjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOgo+ICvCoMKg wqDCoMKgwqDCoCB6b25lLT5jb25kID0gQkxLX1pTX05PVF9XUDsKPiArwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4gK8KgwqDCoCBjYXNlIEJMS19aT05FX0NPTkRfRU1QVFk6Cj4gK8KgwqDCoMKgwqDC oMKgIHpvbmUtPmNvbmQgPSBCTEtfWlNfRU1QVFk7Cj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ ICvCoMKgwqAgY2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOgo+ICvCoMKgwqDCoMKgwqDCoCB6 b25lLT5jb25kID0gQkxLX1pTX0lPUEVOOwo+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDC oMKgIGNhc2UgQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjoKPiArwqDCoMKgwqDCoMKgwqAgem9uZS0+ Y29uZCA9IEJMS19aU19FT1BFTjsKPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBj YXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOgo+ICvCoMKgwqDCoMKgwqDCoCB6b25lLT5jb25kID0g QkxLX1pTX0NMT1NFRDsKPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBjYXNlIEJM S19aT05FX0NPTkRfUkVBRE9OTFk6Cj4gK8KgwqDCoMKgwqDCoMKgIHpvbmUtPmNvbmQgPSBCTEtf WlNfUkRPTkxZOwo+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgIGNhc2UgQkxLX1pP TkVfQ09ORF9GVUxMOgo+ICvCoMKgwqDCoMKgwqDCoCB6b25lLT5jb25kID0gQkxLX1pTX0ZVTEw7 Cj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqAgY2FzZSBCTEtfWk9ORV9DT05EX09G RkxJTkU6Cj4gK8KgwqDCoMKgwqDCoMKgIHpvbmUtPmNvbmQgPSBCTEtfWlNfT0ZGTElORTsKPiAr wqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDC oCBlcnJvcl9yZXBvcnQoIkludmFsaWQgem9uZSBzdGF0ZTogMHgleCIsIGJsa3otPmNvbmQpOwo+ ICvCoMKgwqAgfQo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArI2lmIGRlZmluZWQoQ09ORklHX0JMS1pP TkVEKQo+ICtzdGF0aWMgaW50IGhhbmRsZV9haW9jYl96b25lX3JlcG9ydCh2b2lkICpvcGFxdWUp Cj4gK3sKPiArwqDCoMKgIFJhd1Bvc2l4QUlPRGF0YSAqYWlvY2IgPSBvcGFxdWU7Cj4gK8KgwqDC oCBpbnQgZmQgPSBhaW9jYi0+YWlvX2ZpbGRlczsKPiArwqDCoMKgIHVuc2lnbmVkIGludCAqbnJf em9uZXMgPSBhaW9jYi0+em9uZV9yZXBvcnQubnJfem9uZXM7Cj4gK8KgwqDCoCBCbG9ja1pvbmVE ZXNjcmlwdG9yICp6b25lcyA9IGFpb2NiLT56b25lX3JlcG9ydC56b25lczsKPiArwqDCoMKgIC8q IHpvbmVkIGJsb2NrIGRldmljZXMgdXNlIDUxMi1ieXRlIHNlY3RvcnMgKi8KPiArwqDCoMKgIGlu dDY0X3Qgc2VjdG9yID0gYWlvY2ItPmFpb19vZmZzZXQgLyA1MTI7CgpTaG91bGRuJ3QgdGhpcyBi ZSB1aW50NjRfdCA/Cgo+ICsKPiArwqDCoMKgIHN0cnVjdCBibGtfem9uZSAqYmxrejsKPiArwqDC oMKgIGludDY0X3QgcmVwX3NpemU7CgpzaXplX3QgdHlwZSBpcyBtb3JlIGFwcHJvcHJpYXRlIGZv ciB0aGUgdmFyaWFibGUgYWJvdmUKCj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbnJ6Owo+ICvCoMKg wqAgaW50IHJldCwgbiA9IDAsIGkgPSAwOwo+ICsKPiArwqDCoMKgIG5yeiA9ICpucl96b25lczsK PiArwqDCoMKgIHJlcF9zaXplID0gc2l6ZW9mKHN0cnVjdCBibGtfem9uZV9yZXBvcnQpICsgbnJ6 ICogc2l6ZW9mKHN0cnVjdCBibGtfem9uZSk7Cj4gK8KgwqDCoCBnX2F1dG9mcmVlIHN0cnVjdCBi bGtfem9uZV9yZXBvcnQgKnJlcCA9IE5VTEw7Cj4gK8KgwqDCoCByZXAgPSBnX21hbGxvYyhyZXBf c2l6ZSk7Cj4gKwo+ICvCoMKgwqAgYmxreiA9IChzdHJ1Y3QgYmxrX3pvbmUgKikocmVwICsgMSk7 Cj4gK8KgwqDCoCB3aGlsZSAobiA8IG5yeikgewo+ICvCoMKgwqDCoMKgwqDCoCBtZW1zZXQocmVw LCAwLCByZXBfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIHJlcC0+c2VjdG9yID0gc2VjdG9yOwo+ ICvCoMKgwqDCoMKgwqDCoCByZXAtPm5yX3pvbmVzID0gbnJ6IC0gbjsKPiArCj4gK8KgwqDCoMKg wqDCoMKgIGRvIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBpb2N0bChmZCwgQkxL UkVQT1JUWk9ORSwgcmVwKTsKPiArwqDCoMKgwqDCoMKgwqAgfSB3aGlsZSAocmV0ICE9IDAgJiYg ZXJybm8gPT0gRUlOVFIpOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0ICE9IDApIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJvcl9yZXBvcnQoIiVkOiBpb2N0bCBCTEtSRVBPUlRaT05F IGF0ICUiIFBSSWQ2NCAiIGZhaWxlZCAlZCIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZCwgc2VjdG9yLCBlcnJubyk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1lcnJubzsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICsKPiArwqDC oMKgwqDCoMKgwqAgaWYgKCFyZXAtPm5yX3pvbmVzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgIGZvciAo aSA9IDA7IGkgPCByZXAtPm5yX3pvbmVzOyBpKyssIG4rKykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBhcnNlX3pvbmUoJnpvbmVzW25dLCAmYmxreltpXSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLyogVGhlIG5leHQgcmVwb3J0IHNob3VsZCBzdGFydCBhZnRlciB0aGUgbGFzdCB6 b25lIHJlcG9ydGVkICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VjdG9yID0gYmxreltp XS5zdGFydCArIGJsa3pbaV0ubGVuOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4g Kwo+ICvCoMKgwqAgKm5yX3pvbmVzID0gbjsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKyNl bmRpZgo+ICsKPiArI2lmIGRlZmluZWQoQ09ORklHX0JMS1pPTkVEKQo+ICtzdGF0aWMgaW50IGhh bmRsZV9haW9jYl96b25lX21nbXQodm9pZCAqb3BhcXVlKQo+ICt7Cj4gK8KgwqDCoCBSYXdQb3Np eEFJT0RhdGEgKmFpb2NiID0gb3BhcXVlOwo+ICvCoMKgwqAgaW50IGZkID0gYWlvY2ItPmFpb19m aWxkZXM7Cj4gK8KgwqDCoCBpbnQ2NF90IHNlY3RvciA9IGFpb2NiLT5haW9fb2Zmc2V0IC8gNTEy OwoKdWludDY0X3Q/Cgo+ICvCoMKgwqAgaW50NjRfdCBucl9zZWN0b3JzID0gYWlvY2ItPmFpb19u Ynl0ZXMgLyA1MTI7Cj4gK8KgwqDCoCBzdHJ1Y3QgYmxrX3pvbmVfcmFuZ2UgcmFuZ2U7Cj4gK8Kg wqDCoCBpbnQgcmV0Owo+ICsKPiArwqDCoMKgIC8qIEV4ZWN1dGUgdGhlIG9wZXJhdGlvbiAqLwo+ ICvCoMKgwqAgcmFuZ2Uuc2VjdG9yID0gc2VjdG9yOwo+ICvCoMKgwqAgcmFuZ2UubnJfc2VjdG9y cyA9IG5yX3NlY3RvcnM7Cj4gK8KgwqDCoCBkbyB7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGlv Y3RsKGZkLCBhaW9jYi0+em9uZV9tZ210LnpvbmVfb3AsICZyYW5nZSk7Cj4gK8KgwqDCoCB9IHdo aWxlIChyZXQgIT0gMCAmJiBlcnJubyA9PSBFSU5UUik7Cj4gK8KgwqDCoCBpZiAocmV0ICE9IDAp IHsKPiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLWVycm5vOwo+ICvCoMKgwqDCoMKgwqDCoCBlcnJv cl9yZXBvcnQoImlvY3RsICVzIGZhaWxlZCAlZCIsIGFpb2NiLT56b25lX21nbXQuem9uZV9vcF9u YW1lLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCk7Cj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCByZXR1cm4g MDsKPiArfQo+ICsjZW5kaWYKPiArCj4gwqBzdGF0aWMgaW50IGhhbmRsZV9haW9jYl9jb3B5X3Jh bmdlKHZvaWQgKm9wYXF1ZSkKPiDCoHsKPiDCoMKgwqDCoCBSYXdQb3NpeEFJT0RhdGEgKmFpb2Ni ID0gb3BhcXVlOwo+IEBAIC0zMDM4LDYgKzMyMjksOTkgQEAgc3RhdGljIHZvaWQgcmF3X2FjY291 bnRfZGlzY2FyZChCRFJWUmF3U3RhdGUgKnMsCj4gdWludDY0X3QgbmJ5dGVzLCBpbnQgcmV0KQo+ IMKgwqDCoMKgIH0KPiDCoH0KPiDCoAo+ICsvKgo+ICsgKiB6b25lIHJlcG9ydCAtIEdldCBhIHpv bmUgYmxvY2sgZGV2aWNlJ3MgaW5mb3JtYXRpb24gaW4gdGhlIGZvcm0KPiArICogb2YgYW4gYXJy YXkgb2Ygem9uZSBkZXNjcmlwdG9ycy4KPiArICogem9uZXMgaXMgYW4gYXJyYXkgb2Ygem9uZSBk ZXNjcmlwdG9ycyB0byBob2xkIHpvbmUgaW5mb3JtYXRpb24gb24gcmVwbHk7Cj4gKyAqIG9mZnNl dCBjYW4gYmUgYW55IGJ5dGUgd2l0aGluIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgZGV2aWNlOwo+ ICsgKiBucl96b25lcyBpcyB0aGUgbWF4aXVtIG51bWJlciBvZiBzZWN0b3JzIHRoZSBjb21tYW5k IHNob3VsZCBvcGVyYXRlIG9uLgo+ICsgKi8KPiArI2lmIGRlZmluZWQoQ09ORklHX0JMS1pPTkVE KQo+ICtzdGF0aWMgaW50IGNvcm91dGluZV9mbiByYXdfY29fem9uZV9yZXBvcnQoQmxvY2tEcml2 ZXJTdGF0ZSAqYnMsIGludDY0X3QKPiBvZmZzZXQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1bnNpZ25lZCBpbnQgKm5yX3pvbmVzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgQmxvY2tab25lRGVzY3JpcHRvciAqem9uZXMpIHsKPiArwqDCoMKgIEJEUlZSYXdTdGF0ZSAq cyA9IGJzLT5vcGFxdWU7Cj4gK8KgwqDCoCBSYXdQb3NpeEFJT0RhdGEgYWNiOwo+ICsKPiArwqDC oMKgIGFjYiA9IChSYXdQb3NpeEFJT0RhdGEpIHsKPiArwqDCoMKgwqDCoMKgwqAgLmJzwqDCoMKg wqDCoMKgwqDCoCA9IGJzLAo+ICvCoMKgwqDCoMKgwqDCoCAuYWlvX2ZpbGRlcyA9IHMtPmZkLAo+ ICvCoMKgwqDCoMKgwqDCoCAuYWlvX3R5cGXCoMKgID0gUUVNVV9BSU9fWk9ORV9SRVBPUlQsCj4g K8KgwqDCoMKgwqDCoMKgIC5haW9fb2Zmc2V0ID0gb2Zmc2V0LAo+ICvCoMKgwqDCoMKgwqDCoCAu em9uZV9yZXBvcnTCoMKgwqAgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLm5yX3pvbmVz wqDCoMKgwqDCoMKgID0gbnJfem9uZXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnpvbmVz wqDCoMKgwqDCoMKgwqDCoMKgID0gem9uZXMsCj4gK8KgwqDCoMKgwqDCoMKgIH0sCj4gK8KgwqDC oCB9Owo+ICsKPiArwqDCoMKgIHJldHVybiByYXdfdGhyZWFkX3Bvb2xfc3VibWl0KGJzLCBoYW5k bGVfYWlvY2Jfem9uZV9yZXBvcnQsICZhY2IpOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArLyoKPiAr ICogem9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgLSBFeGVjdXRlIGFuIG9wZXJhdGlvbiBvbiBh IHpvbmUKPiArICovCj4gKyNpZiBkZWZpbmVkKENPTkZJR19CTEtaT05FRCkKPiArc3RhdGljIGlu dCBjb3JvdXRpbmVfZm4gcmF3X2NvX3pvbmVfbWdtdChCbG9ja0RyaXZlclN0YXRlICpicywgQmxv Y2tab25lT3Agb3AsCj4gK8KgwqDCoMKgwqDCoMKgIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGxl bikgewo+ICvCoMKgwqAgQkRSVlJhd1N0YXRlICpzID0gYnMtPm9wYXF1ZTsKPiArwqDCoMKgIFJh d1Bvc2l4QUlPRGF0YSBhY2I7Cj4gK8KgwqDCoCBpbnQ2NF90IHpvbmVfc2l6ZSwgem9uZV9zaXpl X21hc2s7Cj4gK8KgwqDCoCBjb25zdCBjaGFyICp6b25lX29wX25hbWU7Cj4gK8KgwqDCoCB1bnNp Z25lZCBsb25nIHpvbmVfb3A7Cj4gKwo+ICvCoMKgwqAgem9uZV9zaXplID0gYnMtPmJsLnpvbmVf c2l6ZTsKPiArwqDCoMKgIHpvbmVfc2l6ZV9tYXNrID0gem9uZV9zaXplIC0gMTsKPiArwqDCoMKg IGlmIChvZmZzZXQgJiB6b25lX3NpemVfbWFzaykgewo+ICvCoMKgwqDCoMKgwqDCoCBlcnJvcl9y ZXBvcnQoInNlY3RvciBvZmZzZXQgJSIgUFJJZDY0ICIgaXMgbm90IGFsaWduZWQgdG8gem9uZSBz aXplICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiJSIgUFJJ ZDY0ICIiLCBvZmZzZXQgLyA1MTIsIHpvbmVfc2l6ZSAvIDUxMik7Cj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAtRUlOVkFMOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGlmICgoKG9mZnNldCAr IGxlbikgPCBicy0+YmwuY2FwYWNpdHkgJiYgbGVuICYgem9uZV9zaXplX21hc2spIHx8Cj4gK8Kg wqDCoMKgwqDCoMKgIG9mZnNldCArIGxlbiA+IGJzLT5ibC5jYXBhY2l0eSkgewo+ICvCoMKgwqDC oMKgwqDCoCBlcnJvcl9yZXBvcnQoIm51bWJlciBvZiBzZWN0b3JzICUiIFBSSWQ2NCAiIGlzIG5v dCBhbGlnbmVkIHRvIHpvbmUKPiBzaXplIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgIiAlIiBQUklkNjQgIiIsIGxlbiAvIDUxMiwgem9uZV9zaXplIC8gNTEy KTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvC oMKgwqAgc3dpdGNoIChvcCkgewo+ICvCoMKgwqAgY2FzZSBCTEtfWk9fT1BFTjoKPiArwqDCoMKg wqDCoMKgwqAgem9uZV9vcF9uYW1lID0gIkJMS09QRU5aT05FIjsKPiArwqDCoMKgwqDCoMKgwqAg em9uZV9vcCA9IEJMS09QRU5aT05FOwo+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKg IGNhc2UgQkxLX1pPX0NMT1NFOgo+ICvCoMKgwqDCoMKgwqDCoCB6b25lX29wX25hbWUgPSAiQkxL Q0xPU0VaT05FIjsKPiArwqDCoMKgwqDCoMKgwqAgem9uZV9vcCA9IEJMS0NMT1NFWk9ORTsKPiAr wqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCBjYXNlIEJMS19aT19GSU5JU0g6Cj4gK8Kg wqDCoMKgwqDCoMKgIHpvbmVfb3BfbmFtZSA9ICJCTEtGSU5JU0haT05FIjsKPiArwqDCoMKgwqDC oMKgwqAgem9uZV9vcCA9IEJMS0ZJTklTSFpPTkU7Cj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ ICvCoMKgwqAgY2FzZSBCTEtfWk9fUkVTRVQ6Cj4gK8KgwqDCoMKgwqDCoMKgIHpvbmVfb3BfbmFt ZSA9ICJCTEtSRVNFVFpPTkUiOwo+ICvCoMKgwqDCoMKgwqDCoCB6b25lX29wID0gQkxLUkVTRVRa T05FOwo+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgIGRlZmF1bHQ6Cj4gK8KgwqDC oMKgwqDCoMKgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKg wqAgYWNiID0gKFJhd1Bvc2l4QUlPRGF0YSkgewo+ICvCoMKgwqDCoMKgwqDCoCAuYnPCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgPSBicywKPiArwqDCoMKgwqDCoMKgwqAgLmFpb19maWxkZXPCoMKg wqDCoCA9IHMtPmZkLAo+ICvCoMKgwqDCoMKgwqDCoCAuYWlvX3R5cGXCoMKgwqDCoMKgwqAgPSBR RU1VX0FJT19aT05FX01HTVQsCj4gK8KgwqDCoMKgwqDCoMKgIC5haW9fb2Zmc2V0wqDCoMKgwqAg PSBvZmZzZXQsCj4gK8KgwqDCoMKgwqDCoMKgIC5haW9fbmJ5dGVzwqDCoMKgwqAgPSBsZW4sCj4g K8KgwqDCoMKgwqDCoMKgIC56b25lX21nbXTCoCA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAuem9uZV9vcCA9IHpvbmVfb3AsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnpvbmVfb3Bf bmFtZSA9IHpvbmVfb3BfbmFtZSwKPiArwqDCoMKgwqDCoMKgwqAgfSwKPiArwqDCoMKgIH07Cj4g Kwo+ICvCoMKgwqAgcmV0dXJuIHJhd190aHJlYWRfcG9vbF9zdWJtaXQoYnMsIGhhbmRsZV9haW9j Yl96b25lX21nbXQsICZhY2IpOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiDCoHN0YXRpYyBjb3JvdXRp bmVfZm4gaW50Cj4gwqByYXdfZG9fcGRpc2NhcmQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludDY0 X3Qgb2Zmc2V0LCBpbnQ2NF90IGJ5dGVzLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJvb2wgYmxrZGV2KQo+IEBAIC0zNzY4LDYgKzQwNTIsNTQgQEAgc3RhdGljIEJsb2NrRHJp dmVyIGJkcnZfaG9zdF9kZXZpY2UgPSB7Cj4gwqAjZW5kaWYKPiDCoH07Cj4gwqAKPiArI2lmIGRl ZmluZWQoQ09ORklHX0JMS1pPTkVEKQo+ICtzdGF0aWMgQmxvY2tEcml2ZXIgYmRydl96b25lZF9o b3N0X2RldmljZSA9IHsKPiArwqDCoMKgIC5mb3JtYXRfbmFtZSA9ICJ6b25lZF9ob3N0X2Rldmlj ZSIsCj4gK8KgwqDCoCAucHJvdG9jb2xfbmFtZSA9ICJ6b25lZF9ob3N0X2RldmljZSIsCj4gK8Kg wqDCoCAuaW5zdGFuY2Vfc2l6ZSA9IHNpemVvZihCRFJWUmF3U3RhdGUpLAo+ICvCoMKgwqAgLmJk cnZfbmVlZHNfZmlsZW5hbWUgPSB0cnVlLAo+ICvCoMKgwqAgLmJkcnZfcHJvYmVfZGV2aWNlwqAg PSBoZGV2X3Byb2JlX2RldmljZSwKPiArwqDCoMKgIC5iZHJ2X2ZpbGVfb3BlbsKgwqDCoMKgID0g aGRldl9vcGVuLAo+ICvCoMKgwqAgLmJkcnZfY2xvc2XCoMKgwqDCoMKgwqDCoMKgID0gcmF3X2Ns b3NlLAo+ICvCoMKgwqAgLmJkcnZfcmVvcGVuX3ByZXBhcmUgPSByYXdfcmVvcGVuX3ByZXBhcmUs Cj4gK8KgwqDCoCAuYmRydl9yZW9wZW5fY29tbWl0wqAgPSByYXdfcmVvcGVuX2NvbW1pdCwKPiAr wqDCoMKgIC5iZHJ2X3Jlb3Blbl9hYm9ydMKgwqAgPSByYXdfcmVvcGVuX2Fib3J0LAo+ICvCoMKg wqAgLmJkcnZfY29fY3JlYXRlX29wdHMgPSBiZHJ2X2NvX2NyZWF0ZV9vcHRzX3NpbXBsZSwKPiAr wqDCoMKgIC5jcmVhdGVfb3B0c8KgwqDCoMKgwqDCoMKgwqAgPSAmYmRydl9jcmVhdGVfb3B0c19z aW1wbGUsCj4gK8KgwqDCoCAubXV0YWJsZV9vcHRzwqDCoMKgwqDCoMKgwqAgPSBtdXRhYmxlX29w dHMsCj4gK8KgwqDCoCAuYmRydl9jb19pbnZhbGlkYXRlX2NhY2hlID0gcmF3X2NvX2ludmFsaWRh dGVfY2FjaGUsCj4gK8KgwqDCoCAuYmRydl9jb19wd3JpdGVfemVyb2VzID0gaGRldl9jb19wd3Jp dGVfemVyb2VzLAo+ICsKPiArwqDCoMKgIC5iZHJ2X2NvX3ByZWFkdsKgwqDCoMKgwqDCoMKgwqAg PSByYXdfY29fcHJlYWR2LAo+ICvCoMKgwqAgLmJkcnZfY29fcHdyaXRldsKgwqDCoMKgwqDCoMKg ID0gcmF3X2NvX3B3cml0ZXYsCj4gK8KgwqDCoCAuYmRydl9jb19mbHVzaF90b19kaXNrwqAgPSBy YXdfY29fZmx1c2hfdG9fZGlzaywKPiArwqDCoMKgIC5iZHJ2X2NvX3BkaXNjYXJkwqDCoMKgwqDC oMKgID0gaGRldl9jb19wZGlzY2FyZCwKPiArwqDCoMKgIC5iZHJ2X2NvX2NvcHlfcmFuZ2VfZnJv bSA9IHJhd19jb19jb3B5X3JhbmdlX2Zyb20sCj4gK8KgwqDCoCAuYmRydl9jb19jb3B5X3Jhbmdl X3RvwqAgPSByYXdfY29fY29weV9yYW5nZV90bywKPiArwqDCoMKgIC5iZHJ2X3JlZnJlc2hfbGlt aXRzID0gcmF3X3JlZnJlc2hfbGltaXRzLAo+ICvCoMKgwqAgLmJkcnZfaW9fcGx1ZyA9IHJhd19h aW9fcGx1ZywKPiArwqDCoMKgIC5iZHJ2X2lvX3VucGx1ZyA9IHJhd19haW9fdW5wbHVnLAo+ICvC oMKgwqAgLmJkcnZfYXR0YWNoX2Fpb19jb250ZXh0ID0gcmF3X2Fpb19hdHRhY2hfYWlvX2NvbnRl eHQsCj4gKwo+ICvCoMKgwqAgLmJkcnZfY29fdHJ1bmNhdGXCoMKgwqDCoMKgwqAgPSByYXdfY29f dHJ1bmNhdGUsCj4gK8KgwqDCoCAuYmRydl9nZXRsZW5ndGggPSByYXdfZ2V0bGVuZ3RoLAo+ICvC oMKgwqAgLmJkcnZfZ2V0X2luZm8gPSByYXdfZ2V0X2luZm8sCj4gK8KgwqDCoCAuYmRydl9nZXRf YWxsb2NhdGVkX2ZpbGVfc2l6ZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gcmF3X2dldF9hbGxvY2F0ZWRfZmlsZV9zaXplLAo+ICvCoMKgwqAgLmJk cnZfZ2V0X3NwZWNpZmljX3N0YXRzID0gaGRldl9nZXRfc3BlY2lmaWNfc3RhdHMsCj4gK8KgwqDC oCAuYmRydl9jaGVja19wZXJtID0gcmF3X2NoZWNrX3Blcm0sCj4gK8KgwqDCoCAuYmRydl9zZXRf cGVybcKgwqAgPSByYXdfc2V0X3Blcm0sCj4gK8KgwqDCoCAuYmRydl9hYm9ydF9wZXJtX3VwZGF0 ZSA9IHJhd19hYm9ydF9wZXJtX3VwZGF0ZSwKPiArwqDCoMKgIC5iZHJ2X3Byb2JlX2Jsb2Nrc2l6 ZXMgPSBoZGV2X3Byb2JlX2Jsb2Nrc2l6ZXMsCgpoZGV2X3Byb2JlX2Jsb2Nrc2l6ZXMoKSBvbmx5 IHNlZW1zIHRvIHByb2JlIGJsb2Nrc2l6ZXMgaWYgdGhlCmhhcmR3YXJlIGRldmljZSBpcyBEQVNE LiBOb3Qgc3VyZSB3aHkgaXMgbGlrZSB0aGF0LCBidXQgaXMgdmVyeQppbXBvcnRhbnQgZm9yIFpC RHMgdG8gYmUgdmlydHVhbGl6ZWQgd2l0aCB0aGUgY29ycmVjdCBwaHlzaWNhbCBhbmQKbG9naWNh bCBibG9jayBzaXplcy4gVG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBjYW4gY2hh bmdlCnRoZSBsaW5lIGFib3ZlIHRvIAoKKyAgICAuYmRydl9wcm9iZV9ibG9ja3NpemVzID0gaGRl dl96b25lZF9wcm9iZV9ibG9ja3NpemVzLAoKYW5kIGRlZmluZSB0aGUgZm9sbG93aW5nIGZ1bmN0 aW9uIGVsc2V3aGVyZSBpbiB0aGlzIGZpbGUgXwoKKy8qKgorICogVHJ5IHRvIGdldCBAYnMncyBs b2dpY2FsIGFuZCBwaHlzaWNhbCBibG9jayBzaXplIG9mIGEgem9uZWQgZGV2aWNlLgorICogT24g c3VjY2Vzcywgc3RvcmUgdGhlbSBpbiBAYnN6IGFuZCByZXR1cm4gemVyby4KKyAqIE9uIGZhaWx1 cmUsIHJldHVybiBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBoZGV2X3pvbmVkX3By b2JlX2Jsb2Nrc2l6ZXMoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIEJsb2NrU2l6ZXMgKmJzeikKK3sK KyAgICBCRFJWUmF3U3RhdGUgKnMgPSBicy0+b3BhcXVlOworICAgIGludCByZXQ7KyAgICByZXR1 cm4gcmV0OworCisgICAgcmV0ID0gcHJvYmVfbG9naWNhbF9ibG9ja3NpemUocy0+ZmQsICZic3ot PmxvZyk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Cisg ICAgcmV0dXJuIHByb2JlX3BoeXNpY2FsX2Jsb2Nrc2l6ZShzLT5mZCwgJmJzei0+cGh5cyk7Cit9 CisKCkkgdGVzdGVkIHRoaXMgY2hhbmdlIHdpdGggaGFyZHdhcmUgWkJEcyBhbmQgaXQgd29ya3Mg ZmluZSwgbm8gZ3Vlc3N3b3JrCmFib3V0IHdoYXQgTEJBL1BCQSBzaXplIHRvIHNwZWNpZnkgaW4g dGhlIGNvbW1hbmQgbGluZSBpcyByZXF1aXJlZC4KCj4gK8KgwqDCoCAuYmRydl9wcm9iZV9nZW9t ZXRyeSA9IGhkZXZfcHJvYmVfZ2VvbWV0cnksCj4gK8KgwqDCoCAuYmRydl9jb19pb2N0bCA9IGhk ZXZfY29faW9jdGwsCj4gKwo+ICvCoMKgwqAgLyogem9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMg Ki8KPiArwqDCoMKgIC5iZHJ2X2NvX3pvbmVfcmVwb3J0ID0gcmF3X2NvX3pvbmVfcmVwb3J0LAo+ ICvCoMKgwqAgLmJkcnZfY29fem9uZV9tZ210ID0gcmF3X2NvX3pvbmVfbWdtdCwKPiArfTsKPiAr I2VuZGlmCj4gKwo+IMKgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJT RF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKPiDCoHN0YXRpYyB2b2lkIGNkcm9t X3BhcnNlX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBRRGljdCAqb3B0aW9ucywKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgRXJyb3IgKiplcnJwKQo+IEBAIC00MDI4LDYgKzQzNjAsOSBAQCBzdGF0aWMgdm9p ZCBiZHJ2X2ZpbGVfaW5pdCh2b2lkKQo+IMKgwqDCoMKgIGJkcnZfcmVnaXN0ZXIoJmJkcnZfZmls ZSk7Cj4gwqAjaWYgZGVmaW5lZChIQVZFX0hPU1RfQkxPQ0tfREVWSUNFKQo+IMKgwqDCoMKgIGJk cnZfcmVnaXN0ZXIoJmJkcnZfaG9zdF9kZXZpY2UpOwo+ICsjaWYgZGVmaW5lZChDT05GSUdfQkxL Wk9ORUQpCj4gK8KgwqDCoCBiZHJ2X3JlZ2lzdGVyKCZiZHJ2X3pvbmVkX2hvc3RfZGV2aWNlKTsK PiArI2VuZGlmCj4gwqAjaWZkZWYgX19saW51eF9fCj4gwqDCoMKgwqAgYmRydl9yZWdpc3Rlcigm YmRydl9ob3N0X2Nkcm9tKTsKPiDCoCNlbmRpZgo+IGRpZmYgLS1naXQgYS9ibG9jay9pby5jIGIv YmxvY2svaW8uYwo+IGluZGV4IGQzMDA3MzAzNmUuLjg4ZjcwN2VhNGQgMTAwNjQ0Cj4gLS0tIGEv YmxvY2svaW8uYwo+ICsrKyBiL2Jsb2NrL2lvLmMKPiBAQCAtMzE4OSw2ICszMTg5LDQ3IEBAIG91 dDoKPiDCoMKgwqDCoCByZXR1cm4gY28ucmV0Owo+IMKgfQo+IMKgCj4gK2ludCBjb3JvdXRpbmVf Zm4gYmRydl9jb196b25lX3JlcG9ydChCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBvZmZz ZXQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgaW50ICpucl96b25lcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBCbG9ja1pvbmVEZXNjcmlwdG9yICp6b25lcykKPiArewo+ICvCoMKgwqAg QmxvY2tEcml2ZXIgKmRydiA9IGJzLT5kcnY7Cj4gK8KgwqDCoCBDb3JvdXRpbmVJT0NvbXBsZXRp b24gY28gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmNvcm91dGluZSA9IHFlbXVfY29y b3V0aW5lX3NlbGYoKSwKPiArwqDCoMKgIH07Cj4gK8KgwqDCoCBJT19DT0RFKCk7Cj4gKwo+ICvC oMKgwqAgYmRydl9pbmNfaW5fZmxpZ2h0KGJzKTsKPiArwqDCoMKgIGlmICghZHJ2IHx8ICFkcnYt PmJkcnZfY29fem9uZV9yZXBvcnQpIHsKPiArwqDCoMKgwqDCoMKgwqAgY28ucmV0ID0gLUVOT1RT VVA7Cj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgY28u cmV0ID0gZHJ2LT5iZHJ2X2NvX3pvbmVfcmVwb3J0KGJzLCBvZmZzZXQsIG5yX3pvbmVzLCB6b25l cyk7Cj4gK291dDoKPiArwqDCoMKgIGJkcnZfZGVjX2luX2ZsaWdodChicyk7Cj4gK8KgwqDCoCBy ZXR1cm4gY28ucmV0Owo+ICt9Cj4gKwo+ICtpbnQgY29yb3V0aW5lX2ZuIGJkcnZfY29fem9uZV9t Z210KEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBCbG9ja1pvbmVPcCBvcCwKPiArwqDCoMKgwqDCoMKg wqAgaW50NjRfdCBvZmZzZXQsIGludDY0X3QgbGVuKQo+ICt7Cj4gK8KgwqDCoCBCbG9ja0RyaXZl ciAqZHJ2ID0gYnMtPmRydjsKPiArwqDCoMKgIENvcm91dGluZUlPQ29tcGxldGlvbiBjbyA9IHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuY29yb3V0aW5lID0gcWVtdV9jb3JvdXRpbmVfc2Vs ZigpLAo+ICvCoMKgwqAgfTsKPiArwqDCoMKgIElPX0NPREUoKTsKPiArCj4gK8KgwqDCoCBiZHJ2 X2luY19pbl9mbGlnaHQoYnMpOwo+ICvCoMKgwqAgaWYgKCFkcnYgfHwgIWRydi0+YmRydl9jb196 b25lX21nbXQpIHsKPiArwqDCoMKgwqDCoMKgwqAgY28ucmV0ID0gLUVOT1RTVVA7Cj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gb3V0Owo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgY28ucmV0ID0gZHJ2LT5i ZHJ2X2NvX3pvbmVfbWdtdChicywgb3AsIG9mZnNldCwgbGVuKTsKPiArb3V0Ogo+ICvCoMKgwqAg YmRydl9kZWNfaW5fZmxpZ2h0KGJzKTsKPiArwqDCoMKgIHJldHVybiBjby5yZXQ7Cj4gK30KPiAr Cj4gwqB2b2lkICpxZW11X2Jsb2NrYWxpZ24oQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIHNpemVfdCBz aXplKQo+IMKgewo+IMKgwqDCoMKgIElPX0NPREUoKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9i bG9jay9ibG9jay1pby5oIGIvaW5jbHVkZS9ibG9jay9ibG9jay1pby5oCj4gaW5kZXggNDkyZjk1 ZmMwNS4uZjBjZGY2N2QzMyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2Jsb2NrL2Jsb2NrLWlvLmgK PiArKysgYi9pbmNsdWRlL2Jsb2NrL2Jsb2NrLWlvLmgKPiBAQCAtODgsNiArODgsMTMgQEAgaW50 IGJkcnZfY29faW9jdGwoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGludCByZXEsIHZvaWQgKmJ1Zik7 Cj4gwqAvKiBFbnN1cmUgY29udGVudHMgYXJlIGZsdXNoZWQgdG8gZGlzay7CoCAqLwo+IMKgaW50 IGNvcm91dGluZV9mbiBiZHJ2X2NvX2ZsdXNoKEJsb2NrRHJpdmVyU3RhdGUgKmJzKTsKPiDCoAo+ ICsvKiBSZXBvcnQgem9uZSBpbmZvcm1hdGlvbiBvZiB6b25lIGJsb2NrIGRldmljZS4gKi8KPiAr aW50IGNvcm91dGluZV9mbiBiZHJ2X2NvX3pvbmVfcmVwb3J0KEJsb2NrRHJpdmVyU3RhdGUgKmJz LCBpbnQ2NF90IG9mZnNldCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCAqbnJfem9u ZXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCbG9ja1pvbmVEZXNjcmlwdG9yICp6b25lcyk7Cj4gK2lu dCBjb3JvdXRpbmVfZm4gYmRydl9jb196b25lX21nbXQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIEJs b2NrWm9uZU9wIG9wLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQ2NF90IG9mZnNldCwgaW50NjRfdCBsZW4p Owo+ICsKPiDCoGludCBiZHJ2X2NvX3BkaXNjYXJkKEJkcnZDaGlsZCAqY2hpbGQsIGludDY0X3Qg b2Zmc2V0LCBpbnQ2NF90IGJ5dGVzKTsKPiDCoGJvb2wgYmRydl9jYW5fd3JpdGVfemVyb2VzX3dp dGhfdW5tYXAoQmxvY2tEcml2ZXJTdGF0ZSAqYnMpOwo+IMKgaW50IGJkcnZfYmxvY2tfc3RhdHVz KEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBpbnQ2NF90IG9mZnNldCwKPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9ibG9jay9ibG9ja19pbnQtY29tbW9uLmggYi9pbmNsdWRlL2Jsb2NrL2Jsb2NrX2ludC0K PiBjb21tb24uaAo+IGluZGV4IDdmNzg2M2NjOWUuLmNkYzA2ZTc3YTYgMTAwNjQ0Cj4gLS0tIGEv aW5jbHVkZS9ibG9jay9ibG9ja19pbnQtY29tbW9uLmgKPiArKysgYi9pbmNsdWRlL2Jsb2NrL2Js b2NrX2ludC1jb21tb24uaAo+IEBAIC02OTEsNiArNjkxLDEyIEBAIHN0cnVjdCBCbG9ja0RyaXZl ciB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFFFTVVJT1ZlY3RvciAqcWlvdiwKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50NjRfdCBwb3MpOwo+IMKgCj4gK8KgwqDCoCBp bnQgY29yb3V0aW5lX2ZuICgqYmRydl9jb196b25lX3JlcG9ydCkoQmxvY2tEcml2ZXJTdGF0ZSAq YnMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGlu dCAqbnJfem9uZXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQmxvY2tab25lRGVzY3JpcHRv ciAqem9uZXMpOwo+ICvCoMKgwqAgaW50IGNvcm91dGluZV9mbiAoKmJkcnZfY29fem9uZV9tZ210 KShCbG9ja0RyaXZlclN0YXRlICpicywgQmxvY2tab25lT3AKPiBvcCwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpbnQ2NF90IG9mZnNldCwgaW50NjRfdCBsZW4pOwo+ICsKPiDCoMKgwqDCoCAv KiByZW1vdmFibGUgZGV2aWNlIHNwZWNpZmljICovCj4gwqDCoMKgwqAgYm9vbCAoKmJkcnZfaXNf aW5zZXJ0ZWQpKEJsb2NrRHJpdmVyU3RhdGUgKmJzKTsKPiDCoMKgwqDCoCB2b2lkICgqYmRydl9l amVjdCkoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsIGJvb2wgZWplY3RfZmxhZyk7Cj4gQEAgLTgyOCw2 ICs4MzQsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgQmxvY2tMaW1pdHMgewo+IMKgCj4gwqDCoMKgwqAg LyogZGV2aWNlIHpvbmUgbW9kZWwgKi8KPiDCoMKgwqDCoCBCbG9ja1pvbmVNb2RlbCB6b25lZDsK PiArCj4gK8KgwqDCoCAvKiB6b25lIHNpemUgZXhwcmVzc2VkIGluIGJ5dGVzICovCj4gK8KgwqDC oCB1aW50MzJfdCB6b25lX3NpemU7Cj4gKwo+ICvCoMKgwqAgLyogdG90YWwgbnVtYmVyIG9mIHpv bmVzICovCj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbnJfem9uZXM7CgpVc2UgdGhlIF90IG5vdGF0 aW9uIHNpbmNlIGl0IGlzIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBkZWZpbml0aW9uCm9mIHRoaXMg c3RydWN0IC0KCisgICAgdWludDMyX3QgbnJfem9uZXM7Cgo+ICsKPiArwqDCoMKgIC8qIG1heGlt dW0gc2VjdG9ycyBvZiBhIHpvbmUgYXBwZW5kIHdyaXRlIG9wZXJhdGlvbiAqLwo+ICvCoMKgwqAg aW50NjRfdCBtYXhfYXBwZW5kX3NlY3RvcnM7Cj4gKwo+ICvCoMKgwqAgLyogbWF4aW11bSBudW1i ZXIgb2Ygb3BlbiB6b25lcyAqLwo+ICvCoMKgwqAgaW50NjRfdCBtYXhfb3Blbl96b25lczsKPiAr Cj4gK8KgwqDCoCAvKiBtYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgem9uZXMgKi8KPiArwqDCoMKg IGludDY0X3QgbWF4X2FjdGl2ZV96b25lczsKPiArCj4gK8KgwqDCoCAvKiBkZXZpY2UgY2FwYWNp dHkgZXhwcmVzc2VkIGluIGJ5dGVzICovCj4gK8KgwqDCoCBpbnQ2NF90IGNhcGFjaXR5OwoKQ2Fu IGNhcGFjaXR5IGJlY29tZSBuZWdhdGl2ZT8gSWYgbm90LCBkZWZpbmUgYXMgdWludDY0X3Q/Cgo+ IMKgfSBCbG9ja0xpbWl0czsKPiDCoAo+IMKgdHlwZWRlZiBzdHJ1Y3QgQmRydk9wQmxvY2tlciBC ZHJ2T3BCbG9ja2VyOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Jsb2NrL3Jhdy1haW8uaCBiL2lu Y2x1ZGUvYmxvY2svcmF3LWFpby5oCj4gaW5kZXggMjFmYzEwYzRjOS4uODc3YjIyNDBiMyAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL2Jsb2NrL3Jhdy1haW8uaAo+ICsrKyBiL2luY2x1ZGUvYmxvY2sv cmF3LWFpby5oCj4gQEAgLTI5LDYgKzI5LDggQEAKPiDCoCNkZWZpbmUgUUVNVV9BSU9fV1JJVEVf WkVST0VTIDB4MDAyMAo+IMKgI2RlZmluZSBRRU1VX0FJT19DT1BZX1JBTkdFwqDCoCAweDAwNDAK PiDCoCNkZWZpbmUgUUVNVV9BSU9fVFJVTkNBVEXCoMKgwqDCoCAweDAwODAKPiArI2RlZmluZSBR RU1VX0FJT19aT05FX1JFUE9SVMKgIDB4MDEwMAo+ICsjZGVmaW5lIFFFTVVfQUlPX1pPTkVfTUdN VMKgwqDCoCAweDAyMDAKPiDCoCNkZWZpbmUgUUVNVV9BSU9fVFlQRV9NQVNLIFwKPiDCoMKgwqDC oMKgwqDCoMKgIChRRU1VX0FJT19SRUFEIHwgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoCBRRU1VX0FJ T19XUklURSB8IFwKPiBAQCAtMzcsNyArMzksOSBAQAo+IMKgwqDCoMKgwqDCoMKgwqDCoCBRRU1V X0FJT19ESVNDQVJEIHwgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoCBRRU1VX0FJT19XUklURV9aRVJP RVMgfCBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgIFFFTVVfQUlPX0NPUFlfUkFOR0UgfCBcCj4gLcKg wqDCoMKgwqDCoMKgwqAgUUVNVV9BSU9fVFJVTkNBVEUpCj4gK8KgwqDCoMKgwqDCoMKgwqAgUUVN VV9BSU9fVFJVTkNBVEUgfCBcCj4gK8KgwqDCoMKgwqDCoMKgwqAgUUVNVV9BSU9fWk9ORV9SRVBP UlQgfCBcCj4gK8KgwqDCoMKgwqDCoMKgwqAgUUVNVV9BSU9fWk9ORV9NR01UKQo+IMKgCj4gwqAv KiBBSU8gZmxhZ3MgKi8KPiDCoCNkZWZpbmUgUUVNVV9BSU9fTUlTQUxJR05FRMKgwqAgMHgxMDAw Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3lzZW11L2Jsb2NrLWJhY2tlbmQtaW8uaCBiL2luY2x1 ZGUvc3lzZW11L2Jsb2NrLWJhY2tlbmQtCj4gaW8uaAo+IGluZGV4IDUwZjVhYTJlMDcuLjFiNWZj N2RiNmIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9zeXNlbXUvYmxvY2stYmFja2VuZC1pby5oCj4g KysrIGIvaW5jbHVkZS9zeXNlbXUvYmxvY2stYmFja2VuZC1pby5oCj4gQEAgLTQ1LDYgKzQ1LDEz IEBAIEJsb2NrQUlPQ0IgKmJsa19haW9fcHdyaXRldihCbG9ja0JhY2tlbmQgKmJsaywgaW50NjRf dAo+IG9mZnNldCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBCbG9ja0NvbXBsZXRpb25GdW5jICpjYiwgdm9pZCAqb3BhcXVlKTsKPiDC oEJsb2NrQUlPQ0IgKmJsa19haW9fZmx1c2goQmxvY2tCYWNrZW5kICpibGssCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCbG9ja0NvbXBsZXRp b25GdW5jICpjYiwgdm9pZCAqb3BhcXVlKTsKPiArQmxvY2tBSU9DQiAqYmxrX2Fpb196b25lX3Jl cG9ydChCbG9ja0JhY2tlbmQgKmJsaywgaW50NjRfdCBvZmZzZXQsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVk IGludCAqbnJfem9uZXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJsb2NrWm9uZURlc2NyaXB0b3IgKnpvbmVzLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBCbG9ja0NvbXBsZXRpb25GdW5jICpjYiwgdm9pZCAqb3BhcXVlKTsKPiArQmxvY2tBSU9D QiAqYmxrX2Fpb196b25lX21nbXQoQmxvY2tCYWNrZW5kICpibGssIEJsb2NrWm9uZU9wIG9wLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGxlbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCbG9ja0NvbXBsZXRpb25GdW5j ICpjYiwgdm9pZCAqb3BhcXVlKTsKPiDCoEJsb2NrQUlPQ0IgKmJsa19haW9fcGRpc2NhcmQoQmxv Y2tCYWNrZW5kICpibGssIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGJ5dGVzLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQmxvY2tD b21wbGV0aW9uRnVuYyAqY2IsIHZvaWQgKm9wYXF1ZSk7Cj4gwqB2b2lkIGJsa19haW9fY2FuY2Vs X2FzeW5jKEJsb2NrQUlPQ0IgKmFjYik7Cj4gQEAgLTE1Niw2ICsxNjMsMTcgQEAgaW50IGdlbmVy YXRlZF9jb193cmFwcGVyIGJsa19wd3JpdGVfemVyb2VzKEJsb2NrQmFja2VuZAo+ICpibGssIGlu dDY0X3Qgb2Zmc2V0LAo+IMKgaW50IGNvcm91dGluZV9mbiBibGtfY29fcHdyaXRlX3plcm9lcyhC bG9ja0JhY2tlbmQgKmJsaywgaW50NjRfdCBvZmZzZXQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQ2NF90IGJ5dGVzLCBCZHJ2UmVxdWVzdEZsYWdzIGZsYWdzKTsKPiDCoAo+ICtpbnQgY29yb3V0 aW5lX2ZuIGJsa19jb196b25lX3JlcG9ydChCbG9ja0JhY2tlbmQgKmJsaywgaW50NjRfdCBvZmZz ZXQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50ICpucl96b25lcywKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBCbG9ja1pvbmVEZXNjcmlwdG9yICp6b25lcyk7Cj4gK2ludCBnZW5lcmF0ZWRfY29fd3Jh cHBlciBibGtfem9uZV9yZXBvcnQoQmxvY2tCYWNrZW5kICpibGssIGludDY0X3Qgb2Zmc2V0LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgKm5yX3pvbmVzLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBCbG9ja1pvbmVEZXNjcmlwdG9yICp6b25lcyk7Cj4gK2ludCBj b3JvdXRpbmVfZm4gYmxrX2NvX3pvbmVfbWdtdChCbG9ja0JhY2tlbmQgKmJsaywgQmxvY2tab25l T3Agb3AsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQ2NF90IG9mZnNldCwgaW50NjRfdCBsZW4pOwo+ICtpbnQg Z2VuZXJhdGVkX2NvX3dyYXBwZXIgYmxrX3pvbmVfbWdtdChCbG9ja0JhY2tlbmQgKmJsaywgQmxv Y2tab25lT3Agb3AsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50NjRfdCBvZmZzZXQsIGludDY0 X3QgbGVuKTsKPiArCj4gwqBpbnQgZ2VuZXJhdGVkX2NvX3dyYXBwZXIgYmxrX3BkaXNjYXJkKEJs b2NrQmFja2VuZCAqYmxrLCBpbnQ2NF90IG9mZnNldCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlu dDY0X3QgYnl0ZXMpOwo+IMKgaW50IGNvcm91dGluZV9mbiBibGtfY29fcGRpc2NhcmQoQmxvY2tC YWNrZW5kICpibGssIGludDY0X3Qgb2Zmc2V0LAo+IGRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBi L21lc29uLmJ1aWxkCj4gaW5kZXggNDRjMWY5MjY5Ny4uMGFhOTliNjRhMCAxMDA2NDQKPiAtLS0g YS9tZXNvbi5idWlsZAo+ICsrKyBiL21lc29uLmJ1aWxkCj4gQEAgLTE5MjgsNiArMTkyOCw3IEBA IGNvbmZpZ19ob3N0X2RhdGEuc2V0KCdDT05GSUdfUkVQTElDQVRJT04nLAo+IGdldF9vcHRpb24o J3JlcGxpY2F0aW9uJykuYWxsb3dlZCgpKQo+IMKgIyBoYXNfaGVhZGVyCj4gwqBjb25maWdfaG9z dF9kYXRhLnNldCgnQ09ORklHX0VQT0xMJywgY2MuaGFzX2hlYWRlcignc3lzL2Vwb2xsLmgnKSkK PiDCoGNvbmZpZ19ob3N0X2RhdGEuc2V0KCdDT05GSUdfTElOVVhfTUFHSUNfSCcsIGNjLmhhc19o ZWFkZXIoJ2xpbnV4L21hZ2ljLmgnKSkKPiArY29uZmlnX2hvc3RfZGF0YS5zZXQoJ0NPTkZJR19C TEtaT05FRCcsIGNjLmhhc19oZWFkZXIoJ2xpbnV4L2Jsa3pvbmVkLmgnKSkKPiDCoGNvbmZpZ19o b3N0X2RhdGEuc2V0KCdDT05GSUdfVkFMR1JJTkRfSCcsCj4gY2MuaGFzX2hlYWRlcigndmFsZ3Jp bmQvdmFsZ3JpbmQuaCcpKQo+IMKgY29uZmlnX2hvc3RfZGF0YS5zZXQoJ0hBVkVfQlRSRlNfSCcs IGNjLmhhc19oZWFkZXIoJ2xpbnV4L2J0cmZzLmgnKSkKPiDCoGNvbmZpZ19ob3N0X2RhdGEuc2V0 KCdIQVZFX0RSTV9IJywgY2MuaGFzX2hlYWRlcignbGliZHJtL2RybS5oJykpCj4gQEAgLTIwMjEs NiArMjAyMiw5IEBAIGNvbmZpZ19ob3N0X2RhdGEuc2V0KCdIQVZFX1NJR0VWX05PVElGWV9USFJF QURfSUQnLAo+IMKgY29uZmlnX2hvc3RfZGF0YS5zZXQoJ0hBVkVfU1RSVUNUX1NUQVRfU1RfQVRJ TScsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNjLmhhc19t ZW1iZXIoJ3N0cnVjdCBzdGF0JywgJ3N0X2F0aW0nLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJlZml4OiAn I2luY2x1ZGUgPHN5cy9zdGF0Lmg+JykpCj4gK2NvbmZpZ19ob3N0X2RhdGEuc2V0KCdIQVZFX0JM S19aT05FX1JFUF9DQVBBQ0lUWScsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY2MuaGFzX21lbWJlcignc3RydWN0IGJsa196b25lJywgJ2NhcGFjaXR5JywKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcHJlZml4OiAnI2luY2x1ZGUgPGxpbnV4L2Jsa3pvbmVkLmg+JykpCj4gwqAK PiDCoCMgaGFzX3R5cGUKPiDCoGNvbmZpZ19ob3N0X2RhdGEuc2V0KCdDT05GSUdfSU9WRUMnLAo+ IGRpZmYgLS1naXQgYS9xYXBpL2Jsb2NrLWNvcmUuanNvbiBiL3FhcGkvYmxvY2stY29yZS5qc29u Cj4gaW5kZXggODgyYjI2NjUzMi4uMDVhM2I0NDczMSAxMDA2NDQKPiAtLS0gYS9xYXBpL2Jsb2Nr LWNvcmUuanNvbgo+ICsrKyBiL3FhcGkvYmxvY2stY29yZS5qc29uCj4gQEAgLTI5NDIsNiArMjk0 Miw3IEBACj4gwqAjIEBjb21wcmVzczogU2luY2UgNS4wCj4gwqAjIEBjb3B5LWJlZm9yZS13cml0 ZTogU2luY2UgNi4yCj4gwqAjIEBzbmFwc2hvdC1hY2Nlc3M6IFNpbmNlIDcuMAo+ICsjIEB6b25l ZF9ob3N0X2RldmljZTogU2luY2UgNy4yCj4gwqAjCj4gwqAjIFNpbmNlOiAyLjkKPiDCoCMjCj4g QEAgLTI5NTUsNyArMjk1Niw4IEBACj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICdsdWtzJywg J25iZCcsICduZnMnLCAnbnVsbC1haW8nLCAnbnVsbC1jbycsICdudm1lJywgJ3BhcmFsbGVscycs Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICdwcmVhbGxvY2F0ZScsICdxY293JywgJ3Fjb3cy JywgJ3FlZCcsICdxdW9ydW0nLCAncmF3JywgJ3JiZCcsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHsgJ25hbWUnOiAncmVwbGljYXRpb24nLCAnaWYnOiAnQ09ORklHX1JFUExJQ0FUSU9OJyB9 LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICdzc2gnLCAndGhyb3R0bGUnLCAndmRpJywgJ3Zo ZHgnLCAndm1kaycsICd2cGMnLCAndnZmYXQnIF0gfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICdzc2gnLCAndGhyb3R0bGUnLCAndmRpJywgJ3ZoZHgnLCAndm1kaycsICd2cGMnLCAndnZmYXQn LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgJ25hbWUnOiAnem9uZWRfaG9zdF9kZXZpY2Un LCAnaWYnOiAnQ09ORklHX0JMS1pPTkVEJyB9IF0gfQo+IMKgCj4gwqAjIwo+IMKgIyBAQmxvY2tk ZXZPcHRpb25zRmlsZToKPiBAQCAtNDMyOSw3ICs0MzMxLDkgQEAKPiDCoMKgwqDCoMKgwqAgJ3Zo ZHgnOsKgwqDCoMKgwqDCoCAnQmxvY2tkZXZPcHRpb25zR2VuZXJpY0Zvcm1hdCcsCj4gwqDCoMKg wqDCoMKgICd2bWRrJzrCoMKgwqDCoMKgwqAgJ0Jsb2NrZGV2T3B0aW9uc0dlbmVyaWNDT1dGb3Jt YXQnLAo+IMKgwqDCoMKgwqDCoCAndnBjJzrCoMKgwqDCoMKgwqDCoCAnQmxvY2tkZXZPcHRpb25z R2VuZXJpY0Zvcm1hdCcsCj4gLcKgwqDCoMKgwqAgJ3Z2ZmF0JzrCoMKgwqDCoMKgICdCbG9ja2Rl dk9wdGlvbnNWVkZBVCcKPiArwqDCoMKgwqDCoCAndnZmYXQnOsKgwqDCoMKgwqAgJ0Jsb2NrZGV2 T3B0aW9uc1ZWRkFUJywKPiArwqDCoMKgwqDCoCAnem9uZWRfaG9zdF9kZXZpY2UnOiB7ICd0eXBl JzogJ0Jsb2NrZGV2T3B0aW9uc0ZpbGUnLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAnaWYnOiAnQ09ORklHX0JMS1pPTkVEJyB9Cj4g wqDCoCB9IH0KPiDCoAo+IMKgIyMKPiBkaWZmIC0tZ2l0IGEvcWVtdS1pby1jbWRzLmMgYi9xZW11 LWlvLWNtZHMuYwo+IGluZGV4IDk1MmRjOTQwZjEuLmMxYjI4ZWExMDggMTAwNjQ0Cj4gLS0tIGEv cWVtdS1pby1jbWRzLmMKPiArKysgYi9xZW11LWlvLWNtZHMuYwo+IEBAIC0xNzEyLDYgKzE3MTIs MTUwIEBAIHN0YXRpYyBjb25zdCBjbWRpbmZvX3QgZmx1c2hfY21kID0gewo+IMKgwqDCoMKgIC5v bmVsaW5lwqDCoMKgID0gImZsdXNoIGFsbCBpbi1jb3JlIGZpbGUgc3RhdGUgdG8gZGlzayIsCj4g wqB9Owo+IMKgCj4gK3N0YXRpYyBpbmxpbmUgaW50NjRfdCB0b3NlY3RvcihpbnQ2NF90IGJ5dGVz KQo+ICt7Cj4gK8KgwqDCoCByZXR1cm4gYnl0ZXMgPj4gQkRSVl9TRUNUT1JfQklUUzsKPiArfQo+ ICsKPiArc3RhdGljIGludCB6b25lX3JlcG9ydF9mKEJsb2NrQmFja2VuZCAqYmxrLCBpbnQgYXJn YywgY2hhciAqKmFyZ3YpCj4gK3sKPiArwqDCoMKgIGludCByZXQ7Cj4gK8KgwqDCoCBpbnQ2NF90 IG9mZnNldDsKPiArwqDCoMKgIHVuc2lnbmVkIGludCBucl96b25lczsKPiArCj4gK8KgwqDCoCAr K29wdGluZDsKPiArwqDCoMKgIG9mZnNldCA9IGN2dG51bShhcmd2W29wdGluZF0pOwo+ICvCoMKg wqAgKytvcHRpbmQ7Cj4gK8KgwqDCoCBucl96b25lcyA9IGN2dG51bShhcmd2W29wdGluZF0pOwo+ ICsKPiArwqDCoMKgIGdfYXV0b2ZyZWUgQmxvY2tab25lRGVzY3JpcHRvciAqem9uZXMgPSBOVUxM Owo+ICvCoMKgwqAgem9uZXMgPSBnX25ldyhCbG9ja1pvbmVEZXNjcmlwdG9yLCBucl96b25lcyk7 Cj4gK8KgwqDCoCByZXQgPSBibGtfem9uZV9yZXBvcnQoYmxrLCBvZmZzZXQsICZucl96b25lcywg em9uZXMpOwo+ICvCoMKgwqAgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqAgcHJpbnRm KCJ6b25lIHJlcG9ydCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcigtcmV0KSk7Cj4gK8KgwqDCoCB9 IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBpID0gMDsgaSA8IG5yX3pvbmVzOyAr K2kpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmludGYoInN0YXJ0OiAweCUiIFBSSXg2 NCAiLCBsZW4gMHglIiBQUkl4NjQgIiwgIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgImNhcCIiIDB4JSIgUFJJeDY0ICIsIHdwdHIgMHglIiBQUkl4NjQgIiwgIgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInpjb25kOiV1LCBbdHlwZTogJXVd XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0b3NlY3Rvcih6 b25lc1tpXS5zdGFydCksIHRvc2VjdG9yKHpvbmVzW2ldLmxlbmd0aCksCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRvc2VjdG9yKHpvbmVzW2ldLmNhcCksIHRvc2Vj dG9yKHpvbmVzW2ldLndwKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgem9uZXNbaV0uY29uZCwgem9uZXNbaV0udHlwZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiAr wqDCoMKgIH0KPiArwqDCoMKgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBj bWRpbmZvX3Qgem9uZV9yZXBvcnRfY21kID0gewo+ICvCoMKgwqAgLm5hbWUgPSAiem9uZV9yZXBv cnQiLAo+ICvCoMKgwqAgLmFsdG5hbWUgPSAienJwIiwKPiArwqDCoMKgIC5jZnVuYyA9IHpvbmVf cmVwb3J0X2YsCj4gK8KgwqDCoCAuYXJnbWluID0gMiwKPiArwqDCoMKgIC5hcmdtYXggPSAyLAo+ ICvCoMKgwqAgLmFyZ3MgPSAib2Zmc2V0IG51bWJlciIsCj4gK8KgwqDCoCAub25lbGluZSA9ICJy ZXBvcnQgem9uZSBpbmZvcm1hdGlvbiIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHpvbmVfb3Bl bl9mKEJsb2NrQmFja2VuZCAqYmxrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gK3sKPiArwqDC oMKgIGludCByZXQ7Cj4gK8KgwqDCoCBpbnQ2NF90IG9mZnNldCwgbGVuOwo+ICvCoMKgwqAgKytv cHRpbmQ7Cj4gK8KgwqDCoCBvZmZzZXQgPSBjdnRudW0oYXJndltvcHRpbmRdKTsKPiArwqDCoMKg ICsrb3B0aW5kOwo+ICvCoMKgwqAgbGVuID0gY3Z0bnVtKGFyZ3Zbb3B0aW5kXSk7Cj4gK8KgwqDC oCByZXQgPSBibGtfem9uZV9tZ210KGJsaywgQkxLX1pPX09QRU4sIG9mZnNldCwgbGVuKTsKPiAr wqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHByaW50Zigiem9uZSBvcGVu IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKC1yZXQpKTsKPiArwqDCoMKgIH0KPiArwqDCoMKgIHJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjbWRpbmZvX3Qgem9uZV9vcGVuX2Nt ZCA9IHsKPiArwqDCoMKgIC5uYW1lID0gInpvbmVfb3BlbiIsCj4gK8KgwqDCoCAuYWx0bmFtZSA9 ICJ6byIsCj4gK8KgwqDCoCAuY2Z1bmMgPSB6b25lX29wZW5fZiwKPiArwqDCoMKgIC5hcmdtaW4g PSAyLAo+ICvCoMKgwqAgLmFyZ21heCA9IDIsCj4gK8KgwqDCoCAuYXJncyA9ICJvZmZzZXQgbGVu IiwKPiArwqDCoMKgIC5vbmVsaW5lID0gImV4cGxpY2l0IG9wZW4gYSByYW5nZSBvZiB6b25lcyBp biB6b25lIGJsb2NrIGRldmljZSIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHpvbmVfY2xvc2Vf ZihCbG9ja0JhY2tlbmQgKmJsaywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4gK8KgwqDC oCBpbnQgcmV0Owo+ICvCoMKgwqAgaW50NjRfdCBvZmZzZXQsIGxlbjsKPiArwqDCoMKgICsrb3B0 aW5kOwo+ICvCoMKgwqAgb2Zmc2V0ID0gY3Z0bnVtKGFyZ3Zbb3B0aW5kXSk7Cj4gK8KgwqDCoCAr K29wdGluZDsKPiArwqDCoMKgIGxlbiA9IGN2dG51bShhcmd2W29wdGluZF0pOwo+ICvCoMKgwqAg cmV0ID0gYmxrX3pvbmVfbWdtdChibGssIEJMS19aT19DTE9TRSwgb2Zmc2V0LCBsZW4pOwo+ICvC oMKgwqAgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqAgcHJpbnRmKCJ6b25lIGNsb3Nl IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKC1yZXQpKTsKPiArwqDCoMKgIH0KPiArwqDCoMKgIHJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjbWRpbmZvX3Qgem9uZV9jbG9zZV9j bWQgPSB7Cj4gK8KgwqDCoCAubmFtZSA9ICJ6b25lX2Nsb3NlIiwKPiArwqDCoMKgIC5hbHRuYW1l ID0gInpjIiwKPiArwqDCoMKgIC5jZnVuYyA9IHpvbmVfY2xvc2VfZiwKPiArwqDCoMKgIC5hcmdt aW4gPSAyLAo+ICvCoMKgwqAgLmFyZ21heCA9IDIsCj4gK8KgwqDCoCAuYXJncyA9ICJvZmZzZXQg bGVuIiwKPiArwqDCoMKgIC5vbmVsaW5lID0gImNsb3NlIGEgcmFuZ2Ugb2Ygem9uZXMgaW4gem9u ZSBibG9jayBkZXZpY2UiLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB6b25lX2ZpbmlzaF9mKEJs b2NrQmFja2VuZCAqYmxrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gK3sKPiArwqDCoMKgIGlu dCByZXQ7Cj4gK8KgwqDCoCBpbnQ2NF90IG9mZnNldCwgbGVuOwo+ICvCoMKgwqAgKytvcHRpbmQ7 Cj4gK8KgwqDCoCBvZmZzZXQgPSBjdnRudW0oYXJndltvcHRpbmRdKTsKPiArwqDCoMKgICsrb3B0 aW5kOwo+ICvCoMKgwqAgbGVuID0gY3Z0bnVtKGFyZ3Zbb3B0aW5kXSk7Cj4gK8KgwqDCoCByZXQg PSBibGtfem9uZV9tZ210KGJsaywgQkxLX1pPX0ZJTklTSCwgb2Zmc2V0LCBsZW4pOwo+ICvCoMKg wqAgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqAgcHJpbnRmKCJ6b25lIGZpbmlzaCBm YWlsZWQ6ICVzXG4iLCBzdHJlcnJvcigtcmV0KSk7Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCByZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY21kaW5mb190IHpvbmVfZmluaXNoX2Nt ZCA9IHsKPiArwqDCoMKgIC5uYW1lID0gInpvbmVfZmluaXNoIiwKPiArwqDCoMKgIC5hbHRuYW1l ID0gInpmIiwKPiArwqDCoMKgIC5jZnVuYyA9IHpvbmVfZmluaXNoX2YsCj4gK8KgwqDCoCAuYXJn bWluID0gMiwKPiArwqDCoMKgIC5hcmdtYXggPSAyLAo+ICvCoMKgwqAgLmFyZ3MgPSAib2Zmc2V0 IGxlbiIsCj4gK8KgwqDCoCAub25lbGluZSA9ICJmaW5pc2ggYSByYW5nZSBvZiB6b25lcyBpbiB6 b25lIGJsb2NrIGRldmljZSIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHpvbmVfcmVzZXRfZihC bG9ja0JhY2tlbmQgKmJsaywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4gK8KgwqDCoCBp bnQgcmV0Owo+ICvCoMKgwqAgaW50NjRfdCBvZmZzZXQsIGxlbjsKPiArwqDCoMKgICsrb3B0aW5k Owo+ICvCoMKgwqAgb2Zmc2V0ID0gY3Z0bnVtKGFyZ3Zbb3B0aW5kXSk7Cj4gK8KgwqDCoCArK29w dGluZDsKPiArwqDCoMKgIGxlbiA9IGN2dG51bShhcmd2W29wdGluZF0pOwo+ICvCoMKgwqAgcmV0 ID0gYmxrX3pvbmVfbWdtdChibGssIEJMS19aT19SRVNFVCwgb2Zmc2V0LCBsZW4pOwo+ICvCoMKg wqAgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqAgcHJpbnRmKCJ6b25lIHJlc2V0IGZh aWxlZDogJXNcbiIsIHN0cmVycm9yKC1yZXQpKTsKPiArwqDCoMKgIH0KPiArwqDCoMKgIHJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBjbWRpbmZvX3Qgem9uZV9yZXNldF9jbWQg PSB7Cj4gK8KgwqDCoCAubmFtZSA9ICJ6b25lX3Jlc2V0IiwKPiArwqDCoMKgIC5hbHRuYW1lID0g InpycyIsCj4gK8KgwqDCoCAuY2Z1bmMgPSB6b25lX3Jlc2V0X2YsCj4gK8KgwqDCoCAuYXJnbWlu ID0gMiwKPiArwqDCoMKgIC5hcmdtYXggPSAyLAo+ICvCoMKgwqAgLmFyZ3MgPSAib2Zmc2V0IGxl biIsCj4gK8KgwqDCoCAub25lbGluZSA9ICJyZXNldCBhIHpvbmUgd3JpdGUgcG9pbnRlciBpbiB6 b25lIGJsb2NrIGRldmljZSIsCj4gK307Cj4gKwo+IMKgc3RhdGljIGludCB0cnVuY2F0ZV9mKEJs b2NrQmFja2VuZCAqYmxrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwo+IMKgc3RhdGljIGNvbnN0 IGNtZGluZm9fdCB0cnVuY2F0ZV9jbWQgPSB7Cj4gwqDCoMKgwqAgLm5hbWXCoMKgwqDCoMKgwqAg PSAidHJ1bmNhdGUiLAo+IEBAIC0yNTA0LDYgKzI2NDgsMTEgQEAgc3RhdGljIHZvaWQgX19hdHRy aWJ1dGUoKGNvbnN0cnVjdG9yKSkKPiBpbml0X3FlbXVpb19jb21tYW5kcyh2b2lkKQo+IMKgwqDC oMKgIHFlbXVpb19hZGRfY29tbWFuZCgmYWlvX3dyaXRlX2NtZCk7Cj4gwqDCoMKgwqAgcWVtdWlv X2FkZF9jb21tYW5kKCZhaW9fZmx1c2hfY21kKTsKPiDCoMKgwqDCoCBxZW11aW9fYWRkX2NvbW1h bmQoJmZsdXNoX2NtZCk7Cj4gK8KgwqDCoCBxZW11aW9fYWRkX2NvbW1hbmQoJnpvbmVfcmVwb3J0 X2NtZCk7Cj4gK8KgwqDCoCBxZW11aW9fYWRkX2NvbW1hbmQoJnpvbmVfb3Blbl9jbWQpOwo+ICvC oMKgwqAgcWVtdWlvX2FkZF9jb21tYW5kKCZ6b25lX2Nsb3NlX2NtZCk7Cj4gK8KgwqDCoCBxZW11 aW9fYWRkX2NvbW1hbmQoJnpvbmVfZmluaXNoX2NtZCk7Cj4gK8KgwqDCoCBxZW11aW9fYWRkX2Nv bW1hbmQoJnpvbmVfcmVzZXRfY21kKTsKPiDCoMKgwqDCoCBxZW11aW9fYWRkX2NvbW1hbmQoJnRy dW5jYXRlX2NtZCk7Cj4gwqDCoMKgwqAgcWVtdWlvX2FkZF9jb21tYW5kKCZsZW5ndGhfY21kKTsK PiDCoMKgwqDCoCBxZW11aW9fYWRkX2NvbW1hbmQoJmluZm9fY21kKTsKCg==