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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6BB26C07EBA for ; Tue, 5 Oct 2021 13:56:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 570A661502 for ; Tue, 5 Oct 2021 13:56:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236388AbhJEN6U (ORCPT ); Tue, 5 Oct 2021 09:58:20 -0400 Received: from mail-bn8nam11on2074.outbound.protection.outlook.com ([40.107.236.74]:47152 "EHLO NAM11-BN8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235888AbhJEN5B (ORCPT ); Tue, 5 Oct 2021 09:57:01 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OR4MdQ7iI2ZkksIj7WGdAg5iynDeTEb1eVGovy+pq+Qt2EDHCOKmF4f15b1NMyWd3kGRFEYLGlYlVjy87w751oqc3hmQknU7bSH/2QqyDwqWGCQUV0VEZBbd5vU6dJFqwe3hSlaRDB3RBmCerFeGoAYhpzzNiGqHD4cDexHdj1dyl7l2ohFYyMe9PM4X1hQnw7BYUul9qAbUAVIFFfT+bW9qHuRTT0SqdLKpUvGhjONdIzKd0EKuT8NMw+Pa1ifOhmR8mVYYNKR0dd4rWDBDbU7ZQZVNifM3V6HCVg9pROlhSJkrV+GXuqa8XUT8tKwRnv1n92Dk1fsnoYnerpWM8w== 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=gsQIP6+Yx2+JFJUZgYmmadZN1sDsQk3ghocjv7zWQZg=; b=OM1gXXNQOtM3UN/GpnEJX9r1jVDLaSfETC7Hrz333I39H7A7VEtp/z4v7mpS2utYQfGkoVGH4qw9XyXtsnKOBQZ6Ycwg46BGa63++sCTNRZlh+H9+hWpPpj3P4bsMOYpZN8CkR8WuU1NLJn5jt8ic6NdtIFkMDwEhS2YLbGnfy9UkpHQuq3elVNraWbTgJiOQk+xXGg7yJFL8kRa8z7fAX/6zLVTqQd4HDMUYB3rWfHIWJX9vM4JsVqywHooaoEwASVIspyWVhGCOUWncVWHxy6WVp58lZXuhKOzbkDKJslT8adZe0nTcR1wnGfD1hLPYkLOTaa5J57tdqah0ly3/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gsQIP6+Yx2+JFJUZgYmmadZN1sDsQk3ghocjv7zWQZg=; b=ERXMI2ZIwcTNNaRRlA9VEIx9qdH1bfI8PDS2L7ChXoTqAhg923UTbrDPKsa0Vlf+zLPuqlVZSuEea+OsS0qw6VRD7lmg2+xfhux0xxhl+f9gZzZys0jT+eo2M+wa/b/a7fFfOBDoKZV0pr9Tj1eCUmHv8taCcDylrwPJPXShPAM= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) by PH0PR11MB5644.namprd11.prod.outlook.com (2603:10b6:510:ef::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14; Tue, 5 Oct 2021 13:54:52 +0000 Received: from PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4]) by PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4%9]) with mapi id 15.20.4566.022; Tue, 5 Oct 2021 13:54:52 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, Kalle Valo Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v8 11/24] wfx: add bh.c/bh.h Date: Tue, 5 Oct 2021 15:53:47 +0200 Message-Id: <20211005135400.788058-12-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> References: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) To PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) MIME-Version: 1.0 Received: from pc-42.silabs.com (37.71.187.125) by PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14 via Frontend Transport; Tue, 5 Oct 2021 13:54:49 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: df666f70-8d20-4766-69ab-08d98807b43f X-MS-TrafficTypeDiagnostic: PH0PR11MB5644: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0+OGQL3mow2UtgumE4GnB9Z+uza0JrFFeYWwWmCYop/wD7xM6OVi7pMo3wSoru3+yH5bKThhk9jtl1MhPU4/4om5htlVaQy9Hpn9QeeVZ4FcOwREXRKBIzwY92FfoHzAb8BonlGm4VWYrDebxg9ep6kqIOBf1rlSjY9znZrmFeF+QTKFD8WMdpobdBLOCVd4GcnufRMri/r5R7CyB5295unp5PDzuiyxZKFfb+olXC9CI4xnwOuqNzG8mW1ocHwojNt+1XtEQevdKhmsjLrBfptKgw2TfAIH6nad7DySweXew9qjnHRqg0LSv7+Qj271ymhrZ7rilLy81tcGuEOawLUeMAdsSR863QOebRTIu/wDEvyK6aDxsowh1CdmCi8OTBd6Dmll4L83r7r3yuAGp25Yo2gkrmsJwjot7XiIIB5o5eC5gUCH6/qC2Pa9xmzRrkEJJSksZJemslqhOmK3+I1PmdGxPGUuyn7y35MlkuuxbRT4XoNXw63rTPAsyQlG023KuchRnWhw7B4wK/zmK0Euug0x0RwoJroUIfH71bvQ+bfr2R6AzsT5J1McyQhH5IqsyAwb1L5FpnyqRH+KnUsG0bxVDbHRc0S9mCx4lxOieYBt5iT1RxmbSbSGhQGr/8C0v/kaVlqwwszvLO/YJ6axF5LuY1yzUuJ2a9FggmJVOdaBcCAymx4EMk1b27xdmSutvMI4JU+j4KEoQZ44jQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB5657.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(66946007)(66556008)(8936002)(6916009)(83380400001)(956004)(508600001)(2616005)(66476007)(26005)(186003)(7416002)(2906002)(36756003)(4326008)(30864003)(8676002)(107886003)(66574015)(7696005)(52116002)(38100700002)(316002)(1076003)(5660300002)(86362001)(54906003)(38350700002)(6486002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SHB3Q0ZoT21jM1EyQ0oyemttKy80Q1JnR2lhcnM4Mi9leEpOMDA1SHhFNlJR?= =?utf-8?B?MGdLbDdaTFp5MkNjZEpMWjMzUUw5V2hkelVaUkxKWENaOWlHQXlPN013Vllq?= =?utf-8?B?WEt4VVIzSUpjcGlMa0ZJRWNkdE0xdkROQ1pMaEhQT1JZaVl6THlMSEczdDBU?= =?utf-8?B?YTNuVERwam8xSng4SnppejNwcFBHZU40WEJIRHVUR3hLYUlaZzU1Vi9IU1M4?= =?utf-8?B?ekt2cWdGWUJBVlJhTjRlRmZMZ1A0amZSRjVOK1MwTnhaTk03YVF5VEduUURW?= =?utf-8?B?ZFY4YXZvQk51UTFELzBMOWt2ajBucVlycEozYzJkeHhCb29OQ2YzRzFRQS8y?= =?utf-8?B?UTk3RHFlVXFwSTQ5MHlONDI4VVZ3bVNpL2pYTU4wWG1MT0dHWGl6dUFvelZO?= =?utf-8?B?SjZJbzk3Y21uVWo5Q2xGVS9qcm5Ddmdad3pZRmdOdUh5K2JyMzl4cm83VUgx?= =?utf-8?B?d2l6NlR2TXRSS1BKdG5iR1NuOGNsSUd1NEtSNFlwcnVWTVJvbFNSbjV6QUJo?= =?utf-8?B?VStYd0NWVWZVbzFtekFQRW9RVDlrQXB1RUIvUFgzN0xuRVdwdllyYzI3djY3?= =?utf-8?B?YWFxRUxZK0x2TEFNTW1CRjVuVEh6bStTamN0cWJrMS9TU0trU1VxVHpPdzVv?= =?utf-8?B?V256aVdFSVdUdVI1VVJMTTMzc2dPMW53emlkSkJlb2huakl6UTkxT2c0aTJ1?= =?utf-8?B?ZFZUWGNQdnBKZlQvaXc2dVAwMjN4NUdOS1ZwWmZqSUdWN0c0ZzlqNWFJMlhW?= =?utf-8?B?bFVjMnJiOHkzRlp5d2d3YStNMmdWN1U5K2Z1eXpZaVhDaFgxM1NHRnE3cjJ2?= =?utf-8?B?b0hWZUxnSFlkQlpjMG01OFlKNVBSNC91d0J5OWpqR1ZXTktJMVRHQUQ0VGlz?= =?utf-8?B?WWRhMUdFQjZaaktud3hOV0dzaTdvSE5FclB0L1JSVmErUFY1akpyWjJZT20v?= =?utf-8?B?aGgvTmlySENDaDQ3Q3Z1WFdXRzFBdkNSUXhwTUJZcTk4WjVhbUM0U3ZrRFFj?= =?utf-8?B?SUoyNG9rVXpaWUdPeTBHeCtTVjJDQ2UyVGpOQXFYWUR5dlM5MFNjckpNY040?= =?utf-8?B?eFJNUy9ERS9PdmJZVWViSU9yM0IyNUhCQlIySjA1cDZPZ0FacGpzSUJ6eVdB?= =?utf-8?B?VHAxVmRFZmFENmNpbGV6QkZpUjlhZVZwSW9UY1A5c0JSMFJpSmppVWhpdGVX?= =?utf-8?B?R05scHQwM1cvZkt0NTBYeWNZcDV5VEpYellWVHhETVF5Z3FxN3luQUNsd3Vy?= =?utf-8?B?eHVJQ2JvMytQM3JkU2R3WDZHN0tyY0dJT0FIVlkvaWZUTUxSNk0xVUZaTXVz?= =?utf-8?B?bEJ1KzgrOUw1bCs5dytSVWhLYXBoTkxIOVpWMzlIZE1XYkhRSzF3VXE1NlBm?= =?utf-8?B?Tmtsak5TdGFuOHJaSER6QXVBRW1yMXlvOFpaYnVZZ2dhUWRQZ0pQTU5VSmRx?= =?utf-8?B?VkFMb3VCN1RUUEhUU2dVMzg5OHRHZkNCekVpTCtHbU9zMVIwUW03L29YNXox?= =?utf-8?B?TUExMkZoSXhvRlBCRnhGOWRIWjdUa3RjamR5ZlpmM2RnTEx4NFVBVkx5RUZz?= =?utf-8?B?ZU01eS9ZUjNQc3JsYUNMc0h5S0RKaXBYMjZINHczb2d6dUs2Nlh5OEtUV0dr?= =?utf-8?B?N2RWN3ZnTDkrK1BJWllMT2pPTTNUMDFMRnNTNTA2MzFSWlpUaG5vSXAzMlp6?= =?utf-8?B?cy85RFZLei9TRjlzMmdpalUvS0V0S0ZWaGsyNVNXeVpuV0JqQ2tMQWt2ekxT?= =?utf-8?Q?VU0U7dfuTahQFt9R11CpcnCmTXxP+83QN49n7pZ?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: df666f70-8d20-4766-69ab-08d98807b43f X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5657.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Oct 2021 13:54:52.2397 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FIxgqWIn0LBEV3hckzpf6Oa/m+nvNzp9BpJbbwgQ700nICxrefTgRRVpPmxC1VpFmh/qRmIN1T9npZC7Wui5+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5644 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguYyB8IDMyOSArKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmgu aCB8ICAzNCArKysKIDIgZmlsZXMgY2hhbmdlZCwgMzYzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmgKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMgYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9zaWxhYnMvd2Z4L2JoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5jOGMxNDI4ZTk0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJl bGVzcy9zaWxhYnMvd2Z4L2JoLmMKQEAgLTAsMCArMSwzMjkgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbnRlcnJ1cHQgYm90dG9tIGhhbGYgKEJI KS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMs IEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KKyAqLworI2luY2x1ZGUg PGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2lu Y2x1ZGUgImJoLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiaHdpby5oIgorI2luY2x1 ZGUgInRyYWNlcy5oIgorI2luY2x1ZGUgImhpZl9yeC5oIgorI2luY2x1ZGUgImhpZl9hcGlfY21k LmgiCisKK3N0YXRpYyB2b2lkIGRldmljZV93YWtldXAoc3RydWN0IHdmeF9kZXYgKndkZXYpCit7 CisJaW50IG1heF9yZXRyeSA9IDM7CisKKwlpZiAoIXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwKQor CQlyZXR1cm47CisJaWYgKGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlv X3dha2V1cCkgPiAwKQorCQlyZXR1cm47CisKKwlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYs IDEsIDQpKSB7CisJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlvX3dh a2V1cCwgMSk7CisJCWlmICghY29tcGxldGlvbl9kb25lKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSkp CisJCQl1c2xlZXBfcmFuZ2UoMjAwMCwgMjUwMCk7CisJCXJldHVybjsKKwl9CisJZm9yICg7Oykg eworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRhdGEuZ3Bpb193YWtldXAsIDEp OworCQkvKiBjb21wbGV0aW9uLmggZG9lcyBub3QgcHJvdmlkZSBhbnkgZnVuY3Rpb24gdG8gd2Fp dAorCQkgKiBjb21wbGV0aW9uIHdpdGhvdXQgY29uc3VtZSBpdCAoYSBraW5kIG9mCisJCSAqIHdh aXRfZm9yX2NvbXBsZXRpb25fZG9uZV90aW1lb3V0KCkpLiBTbyB3ZSBoYXZlIHRvIGVtdWxhdGUK KwkJICogaXQuCisJCSAqLworCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ZGV2 LT5oaWYuY3RybF9yZWFkeSwKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMikpKSB7CisJCQljb21w bGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKG1h eF9yZXRyeS0tID4gMCkgeworCQkJLyogT2xkZXIgZmlybXdhcmVzIGhhdmUgYSByYWNlIGluIHNs ZWVwL3dha2UtdXAgcHJvY2Vzcy4KKwkJCSAqIFJlZG8gdGhlIHByb2Nlc3MgaXMgc3VmZmljaWVu dCB0byB1bmZyZWV6ZSB0aGUKKwkJCSAqIGNoaXAuCisJCQkgKi8KKwkJCWRldl9lcnIod2Rldi0+ ZGV2LCAidGltZW91dCB3aGlsZSB3YWtlIHVwIGNoaXBcbiIpOworCQkJZ3Bpb2Rfc2V0X3ZhbHVl X2NhbnNsZWVwKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAwKTsKKwkJCXVzbGVlcF9yYW5nZSgy MDAwLCAyNTAwKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIod2Rldi0+ZGV2LCAibWF4IHdha2Ut dXAgcmV0cmllcyByZWFjaGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGlj IHZvaWQgZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpCit7CisJaWYgKCF3ZGV2 LT5wZGF0YS5ncGlvX3dha2V1cCkKKwkJcmV0dXJuOworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNs ZWVwKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAwKTsKK30KKworc3RhdGljIGludCByeF9oZWxw ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYsIHNpemVfdCByZWFkX2xlbiwgaW50ICppc19jbmYpCit7 CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgd2Z4X2hpZl9tc2cgKmhpZjsKKwlzaXpl X3QgYWxsb2NfbGVuOworCXNpemVfdCBjb21wdXRlZF9sZW47CisJaW50IHJlbGVhc2VfY291bnQ7 CisJaW50IHBpZ2d5YmFjayA9IDA7CisKKwlXQVJOKHJlYWRfbGVuID4gcm91bmRfZG93bigweEZG RiwgMikgKiBzaXplb2YodTE2KSwgInJlcXVlc3QgZXhjZWVkIHRoZSBjaGlwIGNhcGFiaWxpdHki KTsKKworCS8qIEFkZCAyIHRvIHRha2UgaW50byBhY2NvdW50IHBpZ2d5YmFjayBzaXplICovCisJ YWxsb2NfbGVuID0gd2Rldi0+aHdidXNfb3BzLT5hbGlnbl9zaXplKHdkZXYtPmh3YnVzX3ByaXYs IHJlYWRfbGVuICsgMik7CisJc2tiID0gZGV2X2FsbG9jX3NrYihhbGxvY19sZW4pOworCWlmICgh c2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh3ZnhfZGF0YV9yZWFkKHdkZXYsIHNrYi0+ ZGF0YSwgYWxsb2NfbGVuKSkKKwkJZ290byBlcnI7CisKKwlwaWdneWJhY2sgPSBsZTE2X3RvX2Nw dXAoKF9fbGUxNiAqKShza2ItPmRhdGEgKyBhbGxvY19sZW4gLSAyKSk7CisJX3RyYWNlX3BpZ2d5 YmFjayhwaWdneWJhY2ssIGZhbHNlKTsKKworCWhpZiA9IChzdHJ1Y3Qgd2Z4X2hpZl9tc2cgKilz a2ItPmRhdGE7CisJV0FSTihoaWYtPmVuY3J5cHRlZCAmIDB4MywgImVuY3J5cHRpb24gaXMgdW5z dXBwb3J0ZWQiKTsKKwlpZiAoV0FSTihyZWFkX2xlbiA8IHNpemVvZihzdHJ1Y3Qgd2Z4X2hpZl9t c2cpLCAiY29ycnVwdGVkIHJlYWQiKSkKKwkJZ290byBlcnI7CisJY29tcHV0ZWRfbGVuID0gbGUx Nl90b19jcHUoaGlmLT5sZW4pOworCWNvbXB1dGVkX2xlbiA9IHJvdW5kX3VwKGNvbXB1dGVkX2xl biwgMik7CisJaWYgKGNvbXB1dGVkX2xlbiAhPSByZWFkX2xlbikgeworCQlkZXZfZXJyKHdkZXYt PmRldiwgImluY29uc2lzdGVudCBtZXNzYWdlIGxlbmd0aDogJXp1ICE9ICV6dVxuIiwKKwkJCWNv bXB1dGVkX2xlbiwgcmVhZF9sZW4pOworCQlwcmludF9oZXhfZHVtcChLRVJOX0lORk8sICJoaWY6 ICIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCisJCQkgICAgICAgaGlmLCByZWFkX2xlbiwg dHJ1ZSk7CisJCWdvdG8gZXJyOworCX0KKworCWlmICghKGhpZi0+aWQgJiBISUZfSURfSVNfSU5E SUNBVElPTikpIHsKKwkJKCppc19jbmYpKys7CisJCWlmIChoaWYtPmlkID09IEhJRl9DTkZfSURf TVVMVElfVFJBTlNNSVQpCisJCQlyZWxlYXNlX2NvdW50ID0gKChzdHJ1Y3Qgd2Z4X2hpZl9jbmZf bXVsdGlfdHJhbnNtaXQgKiloaWYtPmJvZHkpLT5udW1fdHhfY29uZnM7CisJCWVsc2UKKwkJCXJl bGVhc2VfY291bnQgPSAxOworCQlXQVJOKHdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQgPCByZWxl YXNlX2NvdW50LCAiY29ycnVwdGVkIGJ1ZmZlciBjb3VudGVyIik7CisJCXdkZXYtPmhpZi50eF9i dWZmZXJzX3VzZWQgLT0gcmVsZWFzZV9jb3VudDsKKwl9CisJX3RyYWNlX2hpZl9yZWN2KGhpZiwg d2Rldi0+aGlmLnR4X2J1ZmZlcnNfdXNlZCk7CisKKwlpZiAoaGlmLT5pZCAhPSBISUZfSU5EX0lE X0VYQ0VQVElPTiAmJiBoaWYtPmlkICE9IEhJRl9JTkRfSURfRVJST1IpIHsKKwkJaWYgKGhpZi0+ c2VxbnVtICE9IHdkZXYtPmhpZi5yeF9zZXFudW0pCisJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ3 cm9uZyBtZXNzYWdlIHNlcXVlbmNlOiAlZCAhPSAlZFxuIiwKKwkJCQkgaGlmLT5zZXFudW0sIHdk ZXYtPmhpZi5yeF9zZXFudW0pOworCQl3ZGV2LT5oaWYucnhfc2VxbnVtID0gKGhpZi0+c2VxbnVt ICsgMSkgJSAoSElGX0NPVU5URVJfTUFYICsgMSk7CisJfQorCisJc2tiX3B1dChza2IsIGxlMTZf dG9fY3B1KGhpZi0+bGVuKSk7CisJLyogd2Z4X2hhbmRsZV9yeCB0YWtlcyBjYXJlIG9uIFNLQiBs aXZldGltZSAqLworCXdmeF9oYW5kbGVfcngod2Rldiwgc2tiKTsKKwlpZiAoIXdkZXYtPmhpZi50 eF9idWZmZXJzX3VzZWQpCisJCXdha2VfdXAoJndkZXYtPmhpZi50eF9idWZmZXJzX2VtcHR5KTsK KworCXJldHVybiBwaWdneWJhY2s7CisKK2VycjoKKwlpZiAoc2tiKQorCQlkZXZfa2ZyZWVfc2ti KHNrYik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmhfd29ya19yeChzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgaW50IG1heF9tc2csIGludCAqbnVtX2NuZikKK3sKKwlzaXplX3QgbGVu OworCWludCBpOworCWludCBjdHJsX3JlZywgcGlnZ3liYWNrOworCisJcGlnZ3liYWNrID0gMDsK Kwlmb3IgKGkgPSAwOyBpIDwgbWF4X21zZzsgaSsrKSB7CisJCWlmIChwaWdneWJhY2sgJiBDVFJM X05FWFRfTEVOX01BU0spCisJCQljdHJsX3JlZyA9IHBpZ2d5YmFjazsKKwkJZWxzZSBpZiAodHJ5 X3dhaXRfZm9yX2NvbXBsZXRpb24oJndkZXYtPmhpZi5jdHJsX3JlYWR5KSkKKwkJCWN0cmxfcmVn ID0gYXRvbWljX3hjaGcoJndkZXYtPmhpZi5jdHJsX3JlZywgMCk7CisJCWVsc2UKKwkJCWN0cmxf cmVnID0gMDsKKwkJaWYgKCEoY3RybF9yZWcgJiBDVFJMX05FWFRfTEVOX01BU0spKQorCQkJcmV0 dXJuIGk7CisJCS8qIGN0cmxfcmVnIHVuaXRzIGFyZSAxNmJpdHMgd29yZHMgKi8KKwkJbGVuID0g KGN0cmxfcmVnICYgQ1RSTF9ORVhUX0xFTl9NQVNLKSAqIDI7CisJCXBpZ2d5YmFjayA9IHJ4X2hl bHBlcih3ZGV2LCBsZW4sIG51bV9jbmYpOworCQlpZiAocGlnZ3liYWNrIDwgMCkKKwkJCXJldHVy biBpOworCQlpZiAoIShwaWdneWJhY2sgJiBDVFJMX1dMQU5fUkVBRFkpKQorCQkJZGV2X2Vycih3 ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIHBpZ2d5YmFjayB2YWx1ZTogcmVhZHkgYml0IG5vdCBzZXQ6 ICUwNHhcbiIsCisJCQkJcGlnZ3liYWNrKTsKKwl9CisJaWYgKHBpZ2d5YmFjayAmIENUUkxfTkVY VF9MRU5fTUFTSykgeworCQljdHJsX3JlZyA9IGF0b21pY194Y2hnKCZ3ZGV2LT5oaWYuY3RybF9y ZWcsIHBpZ2d5YmFjayk7CisJCWNvbXBsZXRlKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSk7CisJCWlm IChjdHJsX3JlZykKKwkJCWRldl9lcnIod2Rldi0+ZGV2LCAidW5leHBlY3RlZCBJUlEgaGFwcGVu ZWQ6ICUwNHgvJTA0eFxuIiwKKwkJCQljdHJsX3JlZywgcGlnZ3liYWNrKTsKKwl9CisJcmV0dXJu IGk7Cit9CisKK3N0YXRpYyB2b2lkIHR4X2hlbHBlcihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3Ry dWN0IHdmeF9oaWZfbXNnICpoaWYpCit7CisJaW50IHJldDsKKwl2b2lkICpkYXRhOworCWJvb2wg aXNfZW5jcnlwdGVkID0gZmFsc2U7CisJc2l6ZV90IGxlbiA9IGxlMTZfdG9fY3B1KGhpZi0+bGVu KTsKKworCVdBUk4obGVuIDwgc2l6ZW9mKCpoaWYpLCAidHJ5IHRvIHNlbmQgY29ycnVwdGVkIGRh dGEiKTsKKworCWhpZi0+c2VxbnVtID0gd2Rldi0+aGlmLnR4X3NlcW51bTsKKwl3ZGV2LT5oaWYu dHhfc2VxbnVtID0gKHdkZXYtPmhpZi50eF9zZXFudW0gKyAxKSAlIChISUZfQ09VTlRFUl9NQVgg KyAxKTsKKworCWRhdGEgPSBoaWY7CisJV0FSTihsZW4gPiBsZTE2X3RvX2NwdSh3ZGV2LT5od19j YXBzLnNpemVfaW5wX2NoX2J1ZiksCisJICAgICAicmVxdWVzdCBleGNlZWQgdGhlIGNoaXAgY2Fw YWJpbGl0eTogJXp1ID4gJWRcbiIsCisJICAgICBsZW4sIGxlMTZfdG9fY3B1KHdkZXYtPmh3X2Nh cHMuc2l6ZV9pbnBfY2hfYnVmKSk7CisJbGVuID0gd2Rldi0+aHdidXNfb3BzLT5hbGlnbl9zaXpl KHdkZXYtPmh3YnVzX3ByaXYsIGxlbik7CisJcmV0ID0gd2Z4X2RhdGFfd3JpdGUod2RldiwgZGF0 YSwgbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIGVuZDsKKworCXdkZXYtPmhpZi50eF9idWZmZXJz X3VzZWQrKzsKKwlfdHJhY2VfaGlmX3NlbmQoaGlmLCB3ZGV2LT5oaWYudHhfYnVmZmVyc191c2Vk KTsKK2VuZDoKKwlpZiAoaXNfZW5jcnlwdGVkKQorCQlrZnJlZShkYXRhKTsKK30KKworc3RhdGlj IGludCBiaF93b3JrX3R4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgbWF4X21zZykKK3sKKwlz dHJ1Y3Qgd2Z4X2hpZl9tc2cgKmhpZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhf bXNnOyBpKyspIHsKKwkJaGlmID0gTlVMTDsKKwkJaWYgKHdkZXYtPmhpZi50eF9idWZmZXJzX3Vz ZWQgPCBsZTE2X3RvX2NwdSh3ZGV2LT5od19jYXBzLm51bV9pbnBfY2hfYnVmcykpIHsKKwkJCWlm ICh0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmd2Rldi0+aGlmX2NtZC5yZWFkeSkpIHsKKwkJCQlX QVJOKCFtdXRleF9pc19sb2NrZWQoJndkZXYtPmhpZl9jbWQubG9jayksICJkYXRhIGxvY2tpbmcg ZXJyb3IiKTsKKwkJCQloaWYgPSB3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kOworCQkJfSBlbHNlIHsK KwkJCQloaWYgPSB3ZnhfdHhfcXVldWVzX2dldCh3ZGV2KTsKKwkJCX0KKwkJfQorCQlpZiAoIWhp ZikKKwkJCXJldHVybiBpOworCQl0eF9oZWxwZXIod2RldiwgaGlmKTsKKwl9CisJcmV0dXJuIGk7 Cit9CisKKy8qIEluIFNESU8gbW9kZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYW4gYWNjZXNz IHRvIGEgcmVnaXN0ZXIgdG8gYWNrbm93bGVkZ2UKKyAqIGxhc3QgcmVjZWl2ZWQgbWVzc2FnZS4g SXQgY291bGQgYmUgcG9zc2libGUgdG8gcmVzdHJpY3QgdGhpcyBhY2tub3dsZWRnZSB0bworICog U0RJTyBtb2RlIGFuZCBvbmx5IGlmIGxhc3Qgb3BlcmF0aW9uIHdhcyByeC4KKyAqLworc3RhdGlj IHZvaWQgYWNrX3NkaW9fZGF0YShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKK3sKKwl1MzIgY2ZnX3Jl ZzsKKworCXdmeF9jb25maWdfcmVnX3JlYWQod2RldiwgJmNmZ19yZWcpOworCWlmIChjZmdfcmVn ICYgMHhGRikgeworCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJjaGlwIHJlcG9ydHMgZXJyb3JzOiAl MDJ4XG4iLAorCQkJIGNmZ19yZWcgJiAweEZGKTsKKwkJd2Z4X2NvbmZpZ19yZWdfd3JpdGVfYml0 cyh3ZGV2LCAweEZGLCAweDAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJoX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gY29udGFpbmVy X29mKHdvcmssIHN0cnVjdCB3ZnhfZGV2LCBoaWYuYmgpOworCWludCBzdGF0c19yZXEgPSAwLCBz dGF0c19jbmYgPSAwLCBzdGF0c19pbmQgPSAwOworCWJvb2wgcmVsZWFzZV9jaGlwID0gZmFsc2Us IGxhc3Rfb3BfaXNfcnggPSBmYWxzZTsKKwlpbnQgbnVtX3R4LCBudW1fcng7CisKKwlkZXZpY2Vf d2FrZXVwKHdkZXYpOworCWRvIHsKKwkJbnVtX3R4ID0gYmhfd29ya190eCh3ZGV2LCAzMik7CisJ CXN0YXRzX3JlcSArPSBudW1fdHg7CisJCWlmIChudW1fdHgpCisJCQlsYXN0X29wX2lzX3J4ID0g ZmFsc2U7CisJCW51bV9yeCA9IGJoX3dvcmtfcngod2RldiwgMzIsICZzdGF0c19jbmYpOworCQlz dGF0c19pbmQgKz0gbnVtX3J4OworCQlpZiAobnVtX3J4KQorCQkJbGFzdF9vcF9pc19yeCA9IHRy dWU7CisJfSB3aGlsZSAobnVtX3J4IHx8IG51bV90eCk7CisJc3RhdHNfaW5kIC09IHN0YXRzX2Nu ZjsKKworCWlmIChsYXN0X29wX2lzX3J4KQorCQlhY2tfc2Rpb19kYXRhKHdkZXYpOworCWlmICgh d2Rldi0+aGlmLnR4X2J1ZmZlcnNfdXNlZCAmJiAhd29ya19wZW5kaW5nKHdvcmspKSB7CisJCWRl dmljZV9yZWxlYXNlKHdkZXYpOworCQlyZWxlYXNlX2NoaXAgPSB0cnVlOworCX0KKwlfdHJhY2Vf Ymhfc3RhdHMoc3RhdHNfaW5kLCBzdGF0c19yZXEsIHN0YXRzX2NuZiwKKwkJCXdkZXYtPmhpZi50 eF9idWZmZXJzX3VzZWQsIHJlbGVhc2VfY2hpcCk7Cit9CisKKy8qIEFuIElSUSBmcm9tIGNoaXAg ZGlkIG9jY3VyICovCit2b2lkIHdmeF9iaF9yZXF1ZXN0X3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 KQoreworCXUzMiBjdXIsIHByZXY7CisKKwl3ZnhfY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAmY3Vy KTsKKwlwcmV2ID0gYXRvbWljX3hjaGcoJndkZXYtPmhpZi5jdHJsX3JlZywgY3VyKTsKKwljb21w bGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOworCXF1ZXVlX3dvcmsoc3lzdGVtX2hpZ2hwcmlf d3EsICZ3ZGV2LT5oaWYuYmgpOworCisJaWYgKCEoY3VyICYgQ1RSTF9ORVhUX0xFTl9NQVNLKSkK KwkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWU6 IGxlbmd0aCBmaWVsZCBpcyAwOiAlMDR4XG4iLAorCQkJY3VyKTsKKwlpZiAocHJldiAhPSAwKQor CQlkZXZfZXJyKHdkZXYtPmRldiwgInJlY2VpdmVkIElSUSBidXQgcHJldmlvdXMgZGF0YSB3YXMg bm90ICh5ZXQpIHJlYWQ6ICUwNHgvJTA0eFxuIiwKKwkJCXByZXYsIGN1cik7Cit9CisKKy8qIERy aXZlciB3YW50IHRvIHNlbmQgZGF0YSAqLwordm9pZCB3ZnhfYmhfcmVxdWVzdF90eChzdHJ1Y3Qg d2Z4X2RldiAqd2RldikKK3sKKwlxdWV1ZV93b3JrKHN5c3RlbV9oaWdocHJpX3dxLCAmd2Rldi0+ aGlmLmJoKTsKK30KKworLyogSWYgSVJRIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgZnVuY3Rpb24g YWxsb3cgdG8gbWFudWFsbHkgcG9sbCB0aGUgY29udHJvbAorICogcmVnaXN0ZXIgYW5kIHNpbXVs YXRlIGFuIElSUSBhaGVuIGFuIGV2ZW50IGhhcHBlbmVkLgorICoKKyAqIE5vdGUgdGhhdCB0aGUg ZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVhZCBjb250cm9s CisgKiByZWdpc3RlciwgdGhlIElSUSBpcyBsb3N0LiBTbywgdXNlIHRoaXMgZnVuY3Rpb24gY2Fy ZWZ1bGx5IChvbmx5IGR1aW5nCisgKiBkZXZpY2UgaW5pdGlhbGlzYXRpb24pLgorICovCit2b2lk IHdmeF9iaF9wb2xsX2lycShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKK3sKKwlrdGltZV90IG5vdywg c3RhcnQ7CisJdTMyIHJlZzsKKworCVdBUk4oIXdkZXYtPnBvbGxfaXJxLCAidW5leHBlY3RlZCBJ UlEgcG9sbGluZyBjYW4gbWFzayBJUlEiKTsKKwlzdGFydCA9IGt0aW1lX2dldCgpOworCWZvciAo OzspIHsKKwkJd2Z4X2NvbnRyb2xfcmVnX3JlYWQod2RldiwgJnJlZyk7CisJCW5vdyA9IGt0aW1l X2dldCgpOworCQlpZiAocmVnICYgMHhGRkYpCisJCQlicmVhazsKKwkJaWYgKGt0aW1lX2FmdGVy KG5vdywga3RpbWVfYWRkX21zKHN0YXJ0LCAxMDAwKSkpIHsKKwkJCWRldl9lcnIod2Rldi0+ZGV2 LCAidGltZSBvdXQgd2hpbGUgcG9sbGluZyBjb250cm9sIHJlZ2lzdGVyXG4iKTsKKwkJCXJldHVy bjsKKwkJfQorCQl1ZGVsYXkoMjAwKTsKKwl9CisJd2Z4X2JoX3JlcXVlc3Rfcngod2Rldik7Cit9 CisKK3ZvaWQgd2Z4X2JoX3JlZ2lzdGVyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQoreworCUlOSVRf V09SSygmd2Rldi0+aGlmLmJoLCBiaF93b3JrKTsKKwlpbml0X2NvbXBsZXRpb24oJndkZXYtPmhp Zi5jdHJsX3JlYWR5KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3ZGV2LT5oaWYudHhfYnVmZmVy c19lbXB0eSk7Cit9CisKK3ZvaWQgd2Z4X2JoX3VucmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndk ZXYpCit7CisJZmx1c2hfd29yaygmd2Rldi0+aGlmLmJoKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvYmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3Np bGFicy93ZngvYmguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE0 NGM4YjQyMWI3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFi cy93ZngvYmguaApAQCAtMCwwICsxLDM0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5ICovCisvKgorICogSW50ZXJydXB0IGJvdHRvbSBoYWxmIChCSCkuCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCisg KiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8KKyNpZm5kZWYgV0ZYX0JIX0gK KyNkZWZpbmUgV0ZYX0JIX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUg PGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8 bGludXgvd29ya3F1ZXVlLmg+CisKK3N0cnVjdCB3ZnhfZGV2OworCitzdHJ1Y3Qgd2Z4X2hpZiB7 CisJc3RydWN0IHdvcmtfc3RydWN0IGJoOworCXN0cnVjdCBjb21wbGV0aW9uIGN0cmxfcmVhZHk7 CisJd2FpdF9xdWV1ZV9oZWFkX3QgdHhfYnVmZmVyc19lbXB0eTsKKwlhdG9taWNfdCBjdHJsX3Jl ZzsKKwlpbnQgcnhfc2VxbnVtOworCWludCB0eF9zZXFudW07CisJaW50IHR4X2J1ZmZlcnNfdXNl ZDsKK307CisKK3ZvaWQgd2Z4X2JoX3JlZ2lzdGVyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKK3Zv aWQgd2Z4X2JoX3VucmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYpOwordm9pZCB3ZnhfYmhf cmVxdWVzdF9yeChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Cit2b2lkIHdmeF9iaF9yZXF1ZXN0X3R4 KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKK3ZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KTsKKworI2VuZGlmCi0tIAoyLjMzLjAKCg==