From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (EUR01-HE1-obe.outbound.protection.outlook.com [40.107.13.49]) by mx.groups.io with SMTP id smtpd.web11.1418.1593106397661448888 for ; Thu, 25 Jun 2020 10:33:19 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=I/iUNlaT; spf=pass (domain: arm.com, ip: 40.107.13.49, mailfrom: sami.mujawar@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C8j1cu/ljdEiPevvr9TM4I4RCFnpDQt/3OX4bFo6F4o=; b=I/iUNlaTPbCn0Uc8tjZLPlzJXjJfy0G04SChgc/HOnTYiE89/+WQ9jVFrG2PcW8WeYkf9BzvYefGSJOBjk4eDFd1Bubau+0KL3OunXxv9gqHMyIfA+D1rRAONLm2onLJxyjANT5AabCbywBroyJRAJsVjtftC9VV5o2tQXDNTDk= Received: from MR2P264CA0158.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:1::21) by DB7PR08MB3001.eurprd08.prod.outlook.com (2603:10a6:5:23::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.20; Thu, 25 Jun 2020 17:33:13 +0000 Received: from VE1EUR03FT014.eop-EUR03.prod.protection.outlook.com (2603:10a6:501:1:cafe::55) by MR2P264CA0158.outlook.office365.com (2603:10a6:501:1::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.21 via Frontend Transport; Thu, 25 Jun 2020 17:33:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT014.mail.protection.outlook.com (10.152.19.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.20 via Frontend Transport; Thu, 25 Jun 2020 17:33:13 +0000 Received: ("Tessian outbound 8fb20e43acb7:v59"); Thu, 25 Jun 2020 17:33:12 +0000 X-CR-MTA-TID: 64aa7808 Received: from f3a3e8829623.3 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 1D60281C-7956-4252-A29F-53C8037C0025.1; Thu, 25 Jun 2020 17:33:07 +0000 Received: from EUR02-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f3a3e8829623.3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 25 Jun 2020 17:33:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T37cZR4uOYZ9OoZWQk82Y2SHLiuffWhK6/EAVEBKxo2VeRukR0JfY2zPejzo7mLIZ7PwASRWHfR42oLPSWCZv0qHgfCYbUuR7Pgaf3VKnA+azocdCp8Bhiaf6b0bQczgd9OAywKJEGKFlmPFlC1sCeBIWmNgUQ2Onzyv5fOOXBXwtvRrNKOkhwG9WFLEQuwXCFDEZjwfB6bauaz+o3ZLogjnuw8RNAMIVgGy+lVbRWjTvAv1SimTSGhx4KkFKa2MVVVHT3D34a5UQbg1fU8XanBRtXCvl3OY4Gt0TtNkKQMM0qMhoNaMjPXnEWWgxoI8Mk/eNUwR5L4cbGmNBT1kbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C8j1cu/ljdEiPevvr9TM4I4RCFnpDQt/3OX4bFo6F4o=; b=JVIo0ADMewnWCAULMVUCzyNyvHRpMQkF5fDn5A7CxK63BapU9pqMgitAXzUk6g13kJK1GiDOzqMYXXhPQO5UblyxH2XRMcNn5JGzu8Icm/1+3VMC9nW2u/QcFLohp8RppGolaN0JPtLl7KThf8kgRJS2ttTjA3PhYKvA1x/4Co9MeCeS5/O9SbBb06xBvtuWYmvsS/cB4hR65YnJUgUcnxcUNjCxObkdWlsvC8tdONZRO+bKBnx6z75PPuVyPucbGIrlM4MwaMLRVtwJuQ/phoFMgfg5uuv5nx76u55WQFbplRrxBo8hQbOuVeNH1bBA3jz3N1AutaHM45HQj0C0Sw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C8j1cu/ljdEiPevvr9TM4I4RCFnpDQt/3OX4bFo6F4o=; b=I/iUNlaTPbCn0Uc8tjZLPlzJXjJfy0G04SChgc/HOnTYiE89/+WQ9jVFrG2PcW8WeYkf9BzvYefGSJOBjk4eDFd1Bubau+0KL3OunXxv9gqHMyIfA+D1rRAONLm2onLJxyjANT5AabCbywBroyJRAJsVjtftC9VV5o2tQXDNTDk= Received: from DB7PR08MB3097.eurprd08.prod.outlook.com (2603:10a6:5:1d::27) by DB6PR0802MB2134.eurprd08.prod.outlook.com (2603:10a6:4:83::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.21; Thu, 25 Jun 2020 17:33:04 +0000 Received: from DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::9832:4116:bba6:2b97]) by DB7PR08MB3097.eurprd08.prod.outlook.com ([fe80::9832:4116:bba6:2b97%4]) with mapi id 15.20.3131.020; Thu, 25 Jun 2020 17:33:04 +0000 From: "Sami Mujawar" To: Ard Biesheuvel , "devel@edk2.groups.io" CC: "leif@nuviainc.com" , "philmd@redhat.com" , "lersek@redhat.com" , Alexandru Elisei , Andre Przywara , Matteo Carlini , Laura Moretta , nd Subject: Re: [PATCH v3 06/15] ArmVirtPkg: Add Kvmtool NOR flash lib Thread-Topic: [PATCH v3 06/15] ArmVirtPkg: Add Kvmtool NOR flash lib Thread-Index: AQHWSixRjBwtz4hngE+6cdjtScvmGajpNhOAgABY8xA= Date: Thu, 25 Jun 2020 17:33:04 +0000 Message-ID: References: <20200624133458.61920-1-sami.mujawar@arm.com> <20200624133458.61920-7-sami.mujawar@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 7a7e2dc3-f209-4fda-a0d3-ce8b37e580be.1 x-checkrecipientchecked: true Authentication-Results-Original: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [217.140.99.251] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 43ff9f84-f1a9-4105-43d0-08d8192dd647 x-ms-traffictypediagnostic: DB6PR0802MB2134:|DB7PR08MB3001: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; x-forefront-prvs: 0445A82F82 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: jbnb8ZiSrod3q9WafVzNoYq0ULOrqq6XV2yLj4XqBctLd+dnNz84qXD+ymodxkJHaFLKkeq+0KN9ssHMQdYdXIUCv0GsJ6xG35b4OB0huJKrbNL/YhTYOyXFdtjm4EYoqwwW56QP2HqBwkwJHsxjJtWya8TWA19JHQPPk4/d5uGIgB+54oHWYaDMIxXD4GBTNOWowE5/AuJqyZXiaruiID22wLhCfrt4mzM+39o8ol5FUmpEonBrOhU0IYnPxU2kv4UOtxXSHPvM46i38cnU1VQg3r085CmEzqUxCG2fC5ZDj+n1a14SUy26eLcSXhfbENAYo2ocC5JovUjVD/l2kEnP9Hu3SXvC8G6XUakhOSbbCY7gSqoImadEl7Wrv6FXm2Mwabmn3y+s28xnLjCa5Q== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR08MB3097.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(396003)(366004)(136003)(39860400002)(346002)(376002)(7696005)(33656002)(66556008)(64756008)(26005)(66446008)(478600001)(66476007)(186003)(66946007)(76116006)(86362001)(5660300002)(8676002)(83380400001)(9686003)(6506007)(2906002)(71200400001)(110136005)(52536014)(316002)(8936002)(30864003)(55016002)(54906003)(4326008)(53546011)(966005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: J6b4YXtdBoFIszKjygj/fSyHfNU+tDpKby4Tan71b8/sZp6eGvSufovQhJT5GkVzX8VTH6Pz2G0kl2Fto08472LM50GY7rlEVRmUmKfh6RjCoDbkxlw3k77BucW3qptWIA4rVMJOXg1wl0a3vfM0RuuEKJNCNPofLQtyKIvV16JzdeuddIY+5RM+ght3q1StNWr6mkaMUh3+5cFHsDFLIrcElWPEG/4sjPkcTf/X4HTiEdfscYUabJxHqKAFz+SFigJTORSRBV5tZXyt/5gr6i/pLqFTYR/mwLCsxQgGBGSYpY/fp+T8i3ED9BCbjMVMF0iqJpsPWzXoKRtMCTHlv93Mt3fQw2OQwN4VFHKAqWjpQZOULezu9wCj+pCCly19TvfaLYiCkC+WJv3NYN74igSvPskpfBCnaH4+McjG6Kz1HeVUwIwbTY3MTREBc+OE/gWeAC8wc2LoIjXwhUItq+O/WzW8wawzH+TkN9D1IUGAKv+PeUsRVS7zG2hTTGdn MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2134 Original-Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT014.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFTY:;SFS:(4636009)(396003)(136003)(39860400002)(346002)(376002)(46966005)(110136005)(86362001)(53546011)(47076004)(82310400002)(81166007)(356005)(9686003)(82740400003)(52536014)(186003)(8936002)(4326008)(30864003)(83380400001)(2906002)(26005)(33656002)(336012)(54906003)(36906005)(316002)(6506007)(478600001)(70586007)(5660300002)(8676002)(7696005)(70206006)(966005)(55016002);DIR:OUT;SFP:1101; X-MS-Office365-Filtering-Correlation-Id-Prvs: 43d6fb21-6f31-4403-f923-08d8192dd103 X-Forefront-PRVS: 0445A82F82 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UckqCU69gr4yJiG8Z/v5TgjCrNV6gT4wsIrLG99YxGtygrxGN/uwcgm22LfBlc9d0meP9WPT6cGjlHkfBp21KVVC08MgwreM/LPwASoDiXgJQJYUeynRlUoa9+Ww+lfMIM9aYjITARtrnKtC5ftSW45Kk6ok1Rd6yVOhKYW2mMTfhIgDdPMdhQh8UHE0YR8dPNfySaeTT3MhOaSja5X88J0rxGRi8I1lxoWGhgBJLNQ6isTN4YMLIX8xIWzNnwYv+Cw30Jtine1d00SmtOo+xr0P2UxiQicXN//HA4FkfxM7aV4gJgkm57GlGZxAgnMiie8ztmqlvMGgVBMsEuigFs5aeV0TdCzZUFZ/VeuU2LeRR/QUCnusV2EzeW/g9XbI3JKqBqD450fIRESWAogG+me4Z+n6fiQpDkIGxtd7DT9saHujrQynoi/GoKsYuuxxgBiavvwT0mBmr7ms+RKBeXFUTQAfpLpy4Ybtn2qsnv0= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2020 17:33:13.0593 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 43ff9f84-f1a9-4105-43d0-08d8192dd647 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT014.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3001 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQXJkLA0KDQpQbGVhc2UgZmluZCBteSByZXNwb25zZSBtYXJrZWQgaW5saW5lIGFzIFtTQU1J XS4NCg0KUmVnYXJkcywNCg0KU2FtaSBNdWphd2FyDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQpGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAYXJtLmNvbT4gDQpTZW50 OiAyNSBKdW5lIDIwMjAgMTI6MzkgUE0NClRvOiBTYW1pIE11amF3YXIgPFNhbWkuTXVqYXdhckBh cm0uY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCkNjOiBsZWlmQG51dmlhaW5jLmNvbTsgcGhp bG1kQHJlZGhhdC5jb207IGxlcnNla0ByZWRoYXQuY29tOyBBbGV4YW5kcnUgRWxpc2VpIDxBbGV4 YW5kcnUuRWxpc2VpQGFybS5jb20+OyBBbmRyZSBQcnp5d2FyYSA8QW5kcmUuUHJ6eXdhcmFAYXJt LmNvbT47IE1hdHRlbyBDYXJsaW5pIDxNYXR0ZW8uQ2FybGluaUBhcm0uY29tPjsgTGF1cmEgTW9y ZXR0YSA8TGF1cmEuTW9yZXR0YUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+DQpTdWJqZWN0OiBS ZTogW1BBVENIIHYzIDA2LzE1XSBBcm1WaXJ0UGtnOiBBZGQgS3ZtdG9vbCBOT1IgZmxhc2ggbGli DQoNCk9uIDYvMjQvMjAgMzozNCBQTSwgU2FtaSBNdWphd2FyIHdyb3RlOg0KPiBLdm10b29sIHBs YWNlcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBDRkkgZmxhc2ggaW4gdGhlIGRldmljZSB0cmVl IGl0IA0KPiBwYXNzZXMgdG8gVUVGSS4gVGhpcyBsaWJyYXJ5IHBhcnNlcyB0aGUga3ZtdG9vbCBk ZXZpY2UgdHJlZSB0byByZWFkIA0KPiB0aGUgQ0ZJIGJhc2UgYWRkcmVzcyBhbmQgaW5pdGlhbGlz ZSB0aGUgUENEcyB1c2UgYnkgdGhlIE5PUiBmbGFzaCANCj4gZHJpdmVyIGFuZCB0aGUgdmFyaWFi bGUgc3RvcmFnZS4NCj4gDQo+IFVFRkkgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBDRkkgZmxhc2gg aGFyZHdhcmUsIGFuZCBleHBvc2VzIGl0cyANCj4gZnVuY3Rpb25hbGl0eSB0aHJvdWdoIHRoZSBV RUZJIFJ1bnRpbWUgVmFyaWFibGUgU2VydmljZS4gVGhlcmVmb3JlLCANCj4gZGlzYWJsZSB0aGUg ZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhlIENGSSBmbGFzaCB1c2VkIGZvciBzdG9yaW5nIHRoZSAN Cj4gVUVGSSB2YXJpYWJsZXMsIHRvIHByZXZlbnQgdGhlIE9TIGZyb20gYXR0YWNoaW5nIGl0cyBk ZXZpY2UgZHJpdmVyIGFzIA0KPiB3ZWxsLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogU2FtaSBNdWph d2FyIDxzYW1pLm11amF3YXJAYXJtLmNvbT4NCj4gQWNrZWQtYnk6IExhc3psbyBFcnNlayA8bGVy c2VrQHJlZGhhdC5jb20+DQo+IC0tLQ0KPiANCj4gTm90ZXM6DQo+ICAgICAgdjM6DQo+ICAgICAg ICAtIEFTU0VSVCBpcyBzdWZmaWNpZW50IHRvIHRlc3QgTG9jYXRpbmcgICAgICAgICAgICAgICAg ICAgICBbQXJkXQ0KPiAgICAgICAgICBnRmR0Q2xpZW50UHJvdG9jb2xHdWlkIGFzIERFUEVYIGVu c3VyZXMgdGhhdCB0aGlzIGlzDQo+ICAgICAgICAgIGd1YXJhbnRlZWQgdG8gc3VjY2VlZC4NCj4g ICAgICAgIC0gUmVtb3ZlZCBhZGRpdGlvbmFsIGVycm9yIGhhbmRsaW5nIGJhc2VkIG9uIHJldmll dyAgICAgICAgIFtTYW1pXQ0KPiAgICAgICAgICBmZWVkYmFjay4NCj4gICAgICAgIC0gRml4IGNv bmZ1c2lvbiBjYXVzZWQgYnkgdXNlIG9mIG1hY3JvIE1BWF9GTEFTSF9CQU5LUy4gICAgIFtQaGls aXBwZV0NCj4gICAgICAgIC0gUmVuYW1lZCBNQVhfRkxBU0hfQkFOS1MgdG8gTUFYX0ZMQVNIX0RF VklDRVMuICAgICAgICAgICAgIFtTYW1pXQ0KPiAgICAgICAgLSBVc2UgbWFjcm8gdG8gZGVmaW5l IGJsb2NrIHNpemUgZm9yIGZsYXNoLiAgICAgICAgICAgICAgICAgW1BoaWxpcHBlXQ0KPiAgICAg ICAgLSBEZWZpbmVkIG1hY3JvIEtWTVRPT0xfTk9SX0JMT0NLX1NJWkUgYW5kIGFsc28gY29uZmln dXJlZCAgW1NhbWldDQo+ICAgICAgICAgIHRvIHJlZmxlY3QgdGhlIGNvcnJlY3QgYmxvY2sgc2l6 ZSA2NEtCLg0KPiAgICAgICAgLSBEaXNhYmxlIHRoZSBEVCBmbGFzaCBub2RlIHVzZWQgZm9yIFVF RkkgdmFyaWFibGUgc3RvcmFnZSAgW1NhbWldDQo+ICAgICAgICAgIGFzIFVFRkkgdGFrZXMgb3du ZXJzaGlwIG9mIHRoZSBmbGFzaCBkZXZpY2UuDQo+ICAgICAgICAgIFJlZjogaHR0cHM6Ly9lZGsy Lmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzc0MjAwOTE0IzYwMzQxDQo+ICAgICAgDQo+ICAgICAg djI6DQo+ICAgICAgICAtIExpYnJhcnkgdG8gcmVhZCBDRkkgZmxhc2ggYmFzZSBhZGRyZXNzIGZy b20gRFQgYW5kIGluaXRpYWxpc2UgW1NhbWldDQo+ICAgICAgICAgIFBDRHMgdXNlZCBmb3IgTk9S IGZsYXNoIHZhcmlhYmxlcy4NCj4gDQo+ICAgQXJtVmlydFBrZy9MaWJyYXJ5L05vckZsYXNoS3Zt dG9vbExpYi9Ob3JGbGFzaEt2bXRvb2wuYyAgICAgIHwgMzMwICsrKysrKysrKysrKysrKysrKysr DQo+ICAgQXJtVmlydFBrZy9MaWJyYXJ5L05vckZsYXNoS3ZtdG9vbExpYi9Ob3JGbGFzaEt2bXRv b2xMaWIuaW5mIHwgIDQ5ICsrKw0KPiAgIDIgZmlsZXMgY2hhbmdlZCwgMzc5IGluc2VydGlvbnMo KykNCj4gDQo+IGRpZmYgLS1naXQgYS9Bcm1WaXJ0UGtnL0xpYnJhcnkvTm9yRmxhc2hLdm10b29s TGliL05vckZsYXNoS3ZtdG9vbC5jIA0KPiBiL0FybVZpcnRQa2cvTGlicmFyeS9Ob3JGbGFzaEt2 bXRvb2xMaWIvTm9yRmxhc2hLdm10b29sLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggDQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlOWRjZjMx NjkxYjRiMTJiOWM3YmFjMWFkNGINCj4gYThkM2E1MzRhMWQ4DQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvQXJtVmlydFBrZy9MaWJyYXJ5L05vckZsYXNoS3ZtdG9vbExpYi9Ob3JGbGFzaEt2bXRv b2wuYw0KPiBAQCAtMCwwICsxLDMzMCBAQA0KPiArLyoqIEBmaWxlDQo+ICsgICBBbiBpbnN0YW5j ZSBvZiB0aGUgTm9yRmxhc2hQbGF0Zm9ybUxpYiBmb3IgS3ZtdG9vbCBwbGF0Zm9ybS4NCj4gKw0K PiArIENvcHlyaWdodCAoYykgMjAyMCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ICsNCj4gKyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiArDQo+ICsgKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Ob3JGbGFz aFBsYXRmb3JtTGliLmg+ICNpbmNsdWRlIA0KPiArPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1Rh YmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRmR0Q2xpZW50Lmg+DQo+ICsNCj4gKy8q KiBNYWNybyBkZWZpbmluZyB0aGUgTk9SIGJsb2NrIHNpemUgY29uZmlndXJlZCBpbiBLdm10b29s Lg0KPiArKi8NCj4gKyNkZWZpbmUgS1ZNVE9PTF9OT1JfQkxPQ0tfU0laRSAgU0laRV82NEtCDQo+ ICsNCj4gKy8qKiBNYWNybyBkZWZpbmluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgRmxhc2ggZGV2 aWNlcy4NCj4gKyovDQo+ICsjZGVmaW5lIE1BWF9GTEFTSF9ERVZJQ0VTICAgICAgIDQNCj4gKw0K PiArLyoqIE1hY3JvIGRlZmluaW5nIHRoZSBjZmktZmxhc2ggbGFiZWwgZGVzY3JpYmluZyB0aGUg VUVGSSB2YXJpYWJsZSBzdG9yZS4NCj4gKyovDQo+ICsjZGVmaW5lIExBQkVMX1VFRklfVkFSX1NU T1JFICAgICJTeXN0ZW0tZmlybXdhcmUiDQo+ICsNCj4gK1NUQVRJQyBOT1JfRkxBU0hfREVTQ1JJ UFRJT04gIG1Ob3JGbGFzaERldmljZXNbTUFYX0ZMQVNIX0RFVklDRVNdOw0KPiArU1RBVElDIFVJ TlROICAgICAgICAgICAgICAgICAgbU5vckZsYXNoRGV2aWNlQ291bnQgPSAwOw0KPiArU1RBVElD IElOVDMyICAgICAgICAgICAgICAgICAgbVVlZmlWYXJTdG9yZU5vZGUgPSBNQVhfSU5UMzI7DQo+ ICtTVEFUSUMgRkRUX0NMSUVOVF9QUk9UT0NPTCAgICAqbUZkdENsaWVudDsNCj4gKw0KPiArLyoq IFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgcGxhdGZvcm0gc3BlY2lmaWMgYWN0aW9ucyB0byBpbml0 aWFsaXNlDQo+ICsgICAgdGhlIE5PUiBmbGFzaCwgaWYgcmVxdWlyZWQuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgU3VjY2Vzcy4NCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArTm9yRmxhc2hQbGF0Zm9ybUluaXRpYWxpemF0aW9uICgNCj4gKyAgVk9JRA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4g KyAgREVCVUcgKChERUJVR19JTkZPLCAiTm9yRmxhc2hQbGF0Zm9ybUluaXRpYWxpemF0aW9uXG4i KSk7DQo+ICsNCj4gKyAgaWYgKChtTm9yRmxhc2hEZXZpY2VDb3VudCA+IDApICYmIChtVWVmaVZh clN0b3JlTm9kZSAhPSBNQVhfSU5UMzIpKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBVRUZJIHRh a2VzIG93bmVyc2hpcCBvZiB0aGUgY2ZpLWZsYXNoIGhhcmR3YXJlLCBhbmQgZXhwb3NlcyBpdHMN Cj4gKyAgICAvLyBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGhlIFVFRkkgUnVudGltZSBWYXJpYWJs ZSBTZXJ2aWNlLiBUaGlzIG1lYW5zIHdlDQo+ICsgICAgLy8gbmVlZCB0byBkaXNhYmxlIGl0IGlu IHRoZSBkZXZpY2UgdHJlZSB0byBwcmV2ZW50IHRoZSBPUyBmcm9tIGF0dGFjaGluZw0KPiArICAg IC8vIGl0cyBkZXZpY2UgZHJpdmVyIGFzIHdlbGwuDQo+ICsgICAgLy8gTm90ZTogVGhpcyBsaWJy YXJ5IGlzIGxvYWRlZCBieSB0aGUgRmF1bHRUb2xlcmFudFdyaXRlRHhlIHRvIHNldHVwIHRoZQ0K PiArICAgIC8vIEZ0dyBQQ0RzIGFuZCBsYXRlciBieSB0aGUgTm9yRmxhc2hEeGUgdG8gcHJvdmlk ZSB0aGUgTm9yRmxhc2hQbGF0Zm9ybUxpYg0KPiArICAgIC8vIGludGVyZmFjZXMuIFRoZXJlZm9y ZSB0aGUgRkRUIG5vZGUgdXNlZCBmb3IgVUVGSSBzdG9yYWdlIHZhcmlhYmxlIGlzDQo+ICsgICAg Ly8gZGlzYWJsZWQgaGVyZS4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IG1GZHRDbGllbnQt PlNldE5vZGVQcm9wZXJ0eSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmR0Q2xp ZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVlZmlWYXJTdG9yZU5vZGUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIiwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJkaXNhYmxlZCIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YgKCJkaXNhYmxlZCIpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KDQpD YW4geW91IGV4cGxhaW4gd2h5IHRoaXMgYWN0aW9uIGlzIGRlZmVycmVkIHRvIE5vckZsYXNoUGxh dGZvcm1Jbml0aWFsaXphdGlvbigpPw0KDQpbU0FNSV0gVGhpcyBsaWJyYXJ5IGlzIGxvYWRlZCB0 d2ljZS4gRmlyc3QgYnkgRmF1bHRUb2xlcmFudFdyaXRlRHhlIChmb3IgcmVhZGluZyBQY2RGbGFz aE52U3RvcmFnZUZ0dyopIGFuZCBsYXRlciBieSBOb3JGbGFzaER4ZS4gSWYgdGhlIG5vZGUgaXMg ZGlzYWJsZWQgd2hlbiB0aGUgbGlicmFyeSBpcyBmaXJzdCBsb2FkZWQsIHRoZW4gZHVyaW5nIHRo ZSBzdWJzZXF1ZW50IGxvYWQgRmluZE5leHRDb21wYXRpYmxlTm9kZSgpIHNraXBzIHRoZSAnY2Zp LWZsYXNoJyBub2RlLiBEdWUgdG8gdGhpcyB3ZSBjYW5ub3Qgc2V0dXAgdGhlIG1Ob3JGbGFzaERl dmljZXNbXS4gDQpTaW5jZSBOb3JGbGFzaFBsYXRmb3JtSW5pdGlhbGl6YXRpb24oKSBpcyBjYWxs ZWQgb25seSBieSBOb3JGbGFzaER4ZSwgd2Uga25vdyBpdCBpcyBzYWZlIHRvIGRpc2FibGUgdGhl IG5vZGUgaGVyZS4NClsvU0FNSV0NCg0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIkZhaWxlZCB0byBzZXQgY2ZpLWZsYXNoIHN0 YXR1cyB0byAnZGlzYWJsZWQnXG4iKSk7DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAg IFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZs YXNoIGRldmljZSBmb3IgVUVGSSB2YXJpYWJsZSBzdG9yYWdlIG5vdCBmb3VuZFxuIikpOw0KPiAr ICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqIEluaXRpYWxp c2UgTm9uIHZvbGF0aWxlIEZsYXNoIHN0b3JhZ2UgdmFyaWFibGVzLg0KPiArDQo+ICsgIEBwYXJh bSBbaW5dICBGbGFzaERldmljZSBQb2ludGVyIHRvIHRoZSBOT1IgRmxhc2ggZGV2aWNlLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFN1Y2Nlc3MuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEEgcGFyYW1ldGVyIGlzIGludmFsaWQuDQo+ICsgIEBy ZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEluc3VmZmljaWVudCBmbGFzaCBzdG9yYWdlIHNw YWNlLg0KPiArKiovDQoNClNUQVRJQw0KDQpbU0FNSV0gSSB3aWxsIGZpeCB0aGlzLiBbL1NBTUld DQoNCj4gK0VGSV9TVEFUVVMNCj4gK1NldHVwVmFyaWFibGVTdG9yZSAoDQo+ICsgIElOIE5PUl9G TEFTSF9ERVNDUklQVElPTiAqIEZsYXNoRGV2aWNlDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4g ICBGbGFzaFJlZ2lvbjsNCj4gKyAgVUlOVE4gICBGbGFzaE52U3RvcmFnZVZhcmlhYmxlQmFzZTsN Cj4gKyAgVUlOVE4gICBGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdCYXNlOw0KPiArICBVSU5UTiAg IEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVCYXNlOw0KPiArICBVSU5UTiAgIEZsYXNoTnZTdG9yYWdl VmFyaWFibGVTaXplOw0KPiArICBVSU5UTiAgIEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ1NpemU7 DQo+ICsgIFVJTlROICAgRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemU7DQo+ICsNCj4gKyAgRmxh c2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUgPSBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VWYXJp YWJsZVNpemUpOw0KPiArICBGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplID0gUGNkR2V0MzIg KFBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ1NpemUpOw0KPiArICBGbGFzaE52U3RvcmFnZUZ0 d1NwYXJlU2l6ZSA9ICBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUpOw0K PiArDQo+ICsgIGlmICgoRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZVNpemUgPT0gMCkgICB8fA0KPiAr ICAgICAgKEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ1NpemUgPT0gMCkgfHwNCj4gKyAgICAgIChG bGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSA9PSAwKSkgew0KPiArICAgIERFQlVHICgoREVCVUdf RVJST1IsICJGbGFzaE52U3RvcmFnZSBzaXplIG5vdCBkZWZpbmVkXG4iKSk7DQo+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIFNldHVwIHRo ZSB2YXJpYWJsZSBzdG9yZQ0KPiArICBGbGFzaFJlZ2lvbiA9IEZsYXNoRGV2aWNlLT5EZXZpY2VC YXNlQWRkcmVzczsNCj4gKw0KPiArICBGbGFzaE52U3RvcmFnZVZhcmlhYmxlQmFzZSA9IEZsYXNo UmVnaW9uOw0KPiArICBGbGFzaFJlZ2lvbiArPSBQY2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VW YXJpYWJsZVNpemUpOw0KPiArDQo+ICsgIEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UgPSBG bGFzaFJlZ2lvbjsNCj4gKyAgRmxhc2hSZWdpb24gKz0gUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9y YWdlRnR3V29ya2luZ1NpemUpOw0KPiArDQo+ICsgIEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVCYXNl ID0gRmxhc2hSZWdpb247DQo+ICsgIEZsYXNoUmVnaW9uICs9IFBjZEdldDMyIChQY2RGbGFzaE52 U3RvcmFnZUZ0d1NwYXJlU2l6ZSk7DQo+ICsNCj4gKyAgaWYgKEZsYXNoUmVnaW9uID4gKEZsYXNo RGV2aWNlLT5EZXZpY2VCYXNlQWRkcmVzcyArIEZsYXNoRGV2aWNlLT5TaXplKSkgew0KPiArICAg IERFQlVHICgoREVCVUdfRVJST1IsICJJbnN1ZmZpY2llbnQgZmxhc2ggc3RvcmFnZSBzaXplXG4i KSk7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4g KyAgUGNkU2V0MzJTICgNCj4gKyAgICBQY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlQmFzZSwNCj4g KyAgICBGbGFzaE52U3RvcmFnZVZhcmlhYmxlQmFzZQ0KPiArICAgICk7DQo+ICsNCj4gKyAgUGNk U2V0MzJTICgNCj4gKyAgICBQY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdCYXNlLA0KPiArICAg IEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ0Jhc2UNCj4gKyAgICApOw0KPiArDQo+ICsgIFBjZFNl dDMyUyAoDQo+ICsgICAgUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZUJhc2UsDQo+ICsgICAgRmxh c2hOdlN0b3JhZ2VGdHdTcGFyZUJhc2UNCj4gKyAgICApOw0KPiArDQo+ICsgIERFQlVHICgoDQo+ ICsgICAgREVCVUdfSU5GTywNCj4gKyAgICAiUGNkRmxhc2hOdlN0b3JhZ2VWYXJpYWJsZUJhc2Ug PSAweCV4XG4iLA0KPiArICAgIEZsYXNoTnZTdG9yYWdlVmFyaWFibGVCYXNlDQo+ICsgICAgKSk7 DQo+ICsgIERFQlVHICgoDQo+ICsgICAgREVCVUdfSU5GTywNCj4gKyAgICAiUGNkRmxhc2hOdlN0 b3JhZ2VWYXJpYWJsZVNpemUgPSAweCV4XG4iLA0KPiArICAgIEZsYXNoTnZTdG9yYWdlVmFyaWFi bGVTaXplDQo+ICsgICAgKSk7DQo+ICsgIERFQlVHICgoDQo+ICsgICAgREVCVUdfSU5GTywNCj4g KyAgICAiUGNkRmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZSA9IDB4JXhcbiIsDQo+ICsgICAg Rmxhc2hOdlN0b3JhZ2VGdHdXb3JraW5nQmFzZQ0KPiArICAgICkpOw0KPiArICBERUJVRyAoKA0K PiArICAgIERFQlVHX0lORk8sDQo+ICsgICAgIlBjZEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ1Np emUgPSAweCV4XG4iLA0KPiArICAgIEZsYXNoTnZTdG9yYWdlRnR3V29ya2luZ1NpemUNCj4gKyAg ICApKTsNCj4gKyAgREVCVUcgKCgNCj4gKyAgICBERUJVR19JTkZPLA0KPiArICAgICJQY2RGbGFz aE52U3RvcmFnZUZ0d1NwYXJlQmFzZSA9IDB4JXhcbiIsDQo+ICsgICAgRmxhc2hOdlN0b3JhZ2VG dHdTcGFyZUJhc2UNCj4gKyAgICApKTsNCj4gKyAgREVCVUcgKCgNCj4gKyAgICBERUJVR19JTkZP LA0KPiArICAgICJQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSA9IDB4JXhcbiIsDQo+ICsg ICAgRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUNCj4gKyAgICApKTsNCj4gKw0KPiArICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKiBSZXR1cm4gdGhlIEZsYXNoIGRldmlj ZXMgb24gdGhlIHBsYXRmb3JtLg0KPiArDQo+ICsgIEBwYXJhbSBbb3V0XSAgTm9yRmxhc2hEZXNj cmlwdGlvbnMgICAgUG9pbnRlciB0byB0aGUgRmxhc2ggZGV2aWNlIGRlc2NyaXB0aW9uLg0KPiAr ICBAcGFyYW0gW291dF0gIENvdW50ICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBGbGFzaCBk ZXZpY2VzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFN1Y2Nlc3Mu DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIEZsYXNoIGRldmljZSBub3QgZm91 bmQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK05vckZsYXNoUGxhdGZvcm1HZXREZXZpY2Vz ICgNCj4gKyAgT1VUIE5PUl9GTEFTSF9ERVNDUklQVElPTiAgICoqTm9yRmxhc2hEZXNjcmlwdGlv bnMsDQo+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAgICAqQ291bnQNCj4gKyAgKQ0KPiAr ew0KPiArICBpZiAobU5vckZsYXNoRGV2aWNlQ291bnQgPiAwKSB7DQo+ICsgICAgKk5vckZsYXNo RGVzY3JpcHRpb25zID0gbU5vckZsYXNoRGV2aWNlczsNCj4gKyAgICAqQ291bnQgPSBtTm9yRmxh c2hEZXZpY2VDb3VudDsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKyAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKiBFbnRyeXBvaW50IGZvciBO b3JGbGFzaFBsYXRmb3JtTGliLg0KPiArDQo+ICsgIEBwYXJhbSBbaW5dICBJbWFnZUhhbmRsZSAg VGhlIGhhbmRsZSB0byB0aGUgaW1hZ2UuDQo+ICsgIEBwYXJhbSBbaW5dICBTeXN0ZW1UYWJsZSAg UG9pbnRlciB0byB0aGUgU3lzdGVtIFRhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgU3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgICBBIHBhcmFtZXRlciBpcyBpbnZhbGlkLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQg ICAgICAgICAgIEZsYXNoIGRldmljZSBub3QgZm91bmQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArTm9yRmxhc2hQbGF0Zm9ybUxpYkNvbnN0cnVjdG9yICgNCj4gKyAgSU4g IEVGSV9IQU5ETEUgICAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgIElOICBFRklfU1lTVEVNX1RB QkxFICAqIFN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sNCj4gKyAgSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgIE5vZGU7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBGaW5kTm9kZVN0YXR1czsNCj4gKyAg Q09OU1QgVUlOVDMyICAgICAgICAgICAgICAgICpSZWc7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICBQcm9wU2l6ZTsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIEJh c2U7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgVWVmaVZhclN0b3JlSW5kZXg7DQo+ICsgIENPTlNUIENIQVI4 ICAgICAgICAgICAgICAgICAqTGFiZWw7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICBMYWJlbExlbjsNCj4gKw0KPiArICBpZiAobU5vckZsYXNoRGV2aWNlQ291bnQgIT0gMCkgew0K PiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdC Uy0+TG9jYXRlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgJmdGZHRDbGllbnRQcm90 b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopJm1GZHRDbGllbnQNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ICsNCj4gKyAgVWVmaVZhclN0b3JlSW5kZXggPSBN QVhfVUlOVE47DQo+ICsgIGZvciAoRmluZE5vZGVTdGF0dXMgPSBtRmR0Q2xpZW50LT5GaW5kQ29t cGF0aWJsZU5vZGUgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt RmR0Q2xpZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Zp LWZsYXNoIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5vZGUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAh RUZJX0VSUk9SIChGaW5kTm9kZVN0YXR1cykgJiYNCj4gKyAgICAgICAgIChtTm9yRmxhc2hEZXZp Y2VDb3VudCA8IE1BWF9GTEFTSF9ERVZJQ0VTKTsNCj4gKyAgICAgICBGaW5kTm9kZVN0YXR1cyA9 IG1GZHRDbGllbnQtPkZpbmROZXh0Q29tcGF0aWJsZU5vZGUgKA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtRmR0Q2xpZW50LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY2ZpLWZsYXNoIiwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTm9kZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJk5vZGUNCj4gKyAgICApKSB7DQo+ICsgICAgU3RhdHVzID0gbUZkdENsaWVudC0+ R2V0Tm9kZVByb3BlcnR5ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GZHRDbGll bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgImxhYmVsIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChD T05TVCBWT0lEICoqKSZMYWJlbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZMYWJl bExlbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBERUJVRyAoKA0KPiArICAgICAgICBERUJVR19FUlJP UiwNCj4gKyAgICAgICAgIiVhOiBHZXROb2RlUHJvcGVydHkgKCdsYWJlbCcpIGZhaWxlZCAoU3Rh dHVzID09ICVyKVxuIiwNCj4gKyAgICAgICAgX19GVU5DVElPTl9fLA0KPiArICAgICAgICBTdGF0 dXMNCj4gKyAgICAgICAgKSk7DQo+ICsgICAgfSBlbHNlIGlmIChBc2NpaVN0ckNtcCAoTGFiZWws IExBQkVMX1VFRklfVkFSX1NUT1JFKSA9PSAwKSB7DQo+ICsgICAgICBVZWZpVmFyU3RvcmVJbmRl eCA9IG1Ob3JGbGFzaERldmljZUNvdW50Ow0KPiArICAgICAgbVVlZmlWYXJTdG9yZU5vZGUgPSBO b2RlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IG1GZHRDbGllbnQtPkdldE5vZGVQ cm9wZXJ0eSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmR0Q2xpZW50LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJyZWciLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKENPTlNUIFZPSUQg KiopJlJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm9wU2l6ZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEdldE5vZGVQcm9wZXJ0eSAo KSBmYWlsZWQgKFN0YXR1cyA9PSAlcilcbiIsDQo+ICsgICAgICAgIF9fRlVOQ1RJT05fXywgU3Rh dHVzKSk7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBBU1NFUlQg KChQcm9wU2l6ZSAlICg0ICogc2l6ZW9mIChVSU5UMzIpKSkgPT0gMCk7DQo+ICsNCj4gKyAgICB3 aGlsZSAoKFByb3BTaXplID49ICg0ICogc2l6ZW9mIChVSU5UMzIpKSkgJiYNCj4gKyAgICAgICAg ICAgKG1Ob3JGbGFzaERldmljZUNvdW50IDwgTUFYX0ZMQVNIX0RFVklDRVMpKSB7DQo+ICsgICAg ICBCYXNlID0gU3dhcEJ5dGVzNjQgKFJlYWRVbmFsaWduZWQ2NCAoKFZPSUQgKikmUmVnWzBdKSk7 DQo+ICsgICAgICBTaXplID0gU3dhcEJ5dGVzNjQgKFJlYWRVbmFsaWduZWQ2NCAoKFZPSUQgKikm UmVnWzJdKSk7DQo+ICsgICAgICBSZWcgKz0gNDsNCj4gKw0KPiArICAgICAgUHJvcFNpemUgLT0g NCAqIHNpemVvZiAoVUlOVDMyKTsNCj4gKw0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIERpc3Jl Z2FyZCBhbnkgZmxhc2ggZGV2aWNlcyB0aGF0IG92ZXJsYXAgd2l0aCB0aGUgcHJpbWFyeSBGVi4N Cj4gKyAgICAgIC8vIFRoZSBmaXJtd2FyZSBpcyBub3QgdXBkYXRhYmxlIGZyb20gaW5zaWRlIHRo ZSBndWVzdCBhbnl3YXkuDQo+ICsgICAgICAvLw0KPiArICAgICAgaWYgKChQY2RHZXQ2NCAoUGNk RnZCYXNlQWRkcmVzcykgKyBQY2RHZXQzMiAoUGNkRnZTaXplKSA+IEJhc2UpICYmDQo+ICsgICAg ICAgICAgKEJhc2UgKyBTaXplKSA+IFBjZEdldDY0IChQY2RGdkJhc2VBZGRyZXNzKSkgew0KPiAr ICAgICAgICBjb250aW51ZTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgREVCVUcgKCgNCj4g KyAgICAgICAgREVCVUdfSU5GTywNCj4gKyAgICAgICAgIk5PUiVkIDogQmFzZSA9IDB4JWx4LCBT aXplID0gMHglbHhcbiIsDQo+ICsgICAgICAgIG1Ob3JGbGFzaERldmljZUNvdW50LA0KPiArICAg ICAgICBCYXNlLA0KPiArICAgICAgICBTaXplDQo+ICsgICAgICAgICkpOw0KPiArDQo+ICsgICAg ICBtTm9yRmxhc2hEZXZpY2VzW21Ob3JGbGFzaERldmljZUNvdW50XS5EZXZpY2VCYXNlQWRkcmVz cyA9IChVSU5UTilCYXNlOw0KPiArICAgICAgbU5vckZsYXNoRGV2aWNlc1ttTm9yRmxhc2hEZXZp Y2VDb3VudF0uUmVnaW9uQmFzZUFkZHJlc3MgPSAoVUlOVE4pQmFzZTsNCj4gKyAgICAgIG1Ob3JG bGFzaERldmljZXNbbU5vckZsYXNoRGV2aWNlQ291bnRdLlNpemUgPSAoVUlOVE4pU2l6ZTsNCj4g KyAgICAgIG1Ob3JGbGFzaERldmljZXNbbU5vckZsYXNoRGV2aWNlQ291bnRdLkJsb2NrU2l6ZSA9 IEtWTVRPT0xfTk9SX0JMT0NLX1NJWkU7DQo+ICsgICAgICBtTm9yRmxhc2hEZXZpY2VDb3VudCsr Ow0KPiArICAgIH0NCj4gKyAgfSAvLyBmb3INCj4gKw0KPiArICAvLyBTZXR1cCB0aGUgdmFyaWFi bGUgc3RvcmUgaW4gdGhlIGxhc3QgZGV2aWNlDQo+ICsgIGlmIChtTm9yRmxhc2hEZXZpY2VDb3Vu dCA+IDApIHsNCj4gKyAgICBpZiAoVWVmaVZhclN0b3JlSW5kZXggPT0gTUFYX1VJTlROKSB7DQo+ ICsgICAgICAvLyBXZSBkaWQgbm90IGZpbmQgYSBsYWJlbCBtYXRjaGluZyB0aGUgVUVGSSBWYXJp YWJsZSBzdG9yZS4gRGVmYXVsdCB0bw0KPiArICAgICAgLy8gdXNpbmcgdGhlIGxhc3QgY2ZpLWZs YXNoIGRldmljZSBhcyB0aGUgdmFyaWFibGUgc3RvcmUuDQo+ICsgICAgICBVZWZpVmFyU3RvcmVJ bmRleCA9IG1Ob3JGbGFzaERldmljZUNvdW50IC0gMTsNCj4gKyAgICAgIG1VZWZpVmFyU3RvcmVO b2RlID0gTm9kZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKG1Ob3JGbGFzaERldmljZXNbVWVmaVZh clN0b3JlSW5kZXhdLkRldmljZUJhc2VBZGRyZXNzICE9IDApIHsNCj4gKyAgICAgIHJldHVybiBT ZXR1cFZhcmlhYmxlU3RvcmUgKCZtTm9yRmxhc2hEZXZpY2VzW1VlZmlWYXJTdG9yZUluZGV4XSk7 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9 DQo+ICsNCj4gZGlmZiAtLWdpdCBhL0FybVZpcnRQa2cvTGlicmFyeS9Ob3JGbGFzaEt2bXRvb2xM aWIvTm9yRmxhc2hLdm10b29sTGliLmluZiBiL0FybVZpcnRQa2cvTGlicmFyeS9Ob3JGbGFzaEt2 bXRvb2xMaWIvTm9yRmxhc2hLdm10b29sTGliLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzIzMGU0 YjJiZTY2ODkwNDMyMjEwMzgyNWI5M2U4Njc1MDM5ODRlDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvQXJtVmlydFBrZy9MaWJyYXJ5L05vckZsYXNoS3ZtdG9vbExpYi9Ob3JGbGFzaEt2bXRvb2xM aWIuaW5mDQo+IEBAIC0wLDAgKzEsNDkgQEANCj4gKyMvKiogQGZpbGUNCj4gKyMNCj4gKyMgIENv cHlyaWdodCAoYykgMjAyMCwgQVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsj ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIw0KPiAr IyoqLw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAg ICAgID0gMHgwMDAxMDAxQg0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBO b3JGbGFzaEt2bXRvb2xMaWINCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0g RTc1RjA3QTEtQjE2MC00ODkzLUJERDQtMDlFMzJGRjg0N0RDDQo+ICsgIE1PRFVMRV9UWVBFICAg ICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVINCj4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAg ICAgICAgICAgID0gMS4wDQo+ICsgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IE5v ckZsYXNoUGxhdGZvcm1MaWINCj4gKyAgQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAgICAgID0g Tm9yRmxhc2hQbGF0Zm9ybUxpYkNvbnN0cnVjdG9yDQo+ICsNCj4gK1tTb3VyY2VzLmNvbW1vbl0N Cj4gKyAgTm9yRmxhc2hLdm10b29sLmMNCj4gKw0KPiArW1BhY2thZ2VzXQ0KPiArICBBcm1Qa2cv QXJtUGtnLmRlYw0KPiArICBBcm1QbGF0Zm9ybVBrZy9Bcm1QbGF0Zm9ybVBrZy5kZWMNCj4gKyAg QXJtVmlydFBrZy9Bcm1WaXJ0UGtnLmRlYw0KPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiArICBN ZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ ICsgIEJhc2VMaWINCj4gKyAgRGVidWdMaWINCj4gKyAgUGNkTGliDQo+ICsgIFVlZmlCb290U2Vy dmljZXNUYWJsZUxpYg0KPiArDQo+ICtbUHJvdG9jb2xzXQ0KPiArICBnRmR0Q2xpZW50UHJvdG9j b2xHdWlkICAgICAgICAgICMjIENPTlNVTUVTDQo+ICsNCj4gK1tQY2RdDQo+ICsgIGdBcm1Ub2tl blNwYWNlR3VpZC5QY2RGdkJhc2VBZGRyZXNzDQo+ICsgIGdBcm1Ub2tlblNwYWNlR3VpZC5QY2RG dlNpemUNCj4gKw0KPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hO dlN0b3JhZ2VWYXJpYWJsZUJhc2UNCj4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVTaXplDQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdCYXNlDQo+ICsgIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1dvcmtpbmdTaXplDQo+ ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1Nw YXJlQmFzZQ0KPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0 b3JhZ2VGdHdTcGFyZVNpemUNCj4gKw0KPiArW0RlcGV4XQ0KPiArICBnRmR0Q2xpZW50UHJvdG9j b2xHdWlkDQo+ICsNCj4gDQoNCg==