Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp2730162pxy; Sun, 25 Apr 2021 02:25:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyXaSmkZLavVSj8BzW46D6jitX6Vsn2YhAPWZXcejbo3UJShokJhCH8VOMRQ4WRdcWtr1hB X-Received: by 2002:a62:8804:0:b029:253:6745:908c with SMTP id l4-20020a6288040000b02902536745908cmr12068430pfd.16.1619342753263; Sun, 25 Apr 2021 02:25:53 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1619342753; cv=pass; d=google.com; s=arc-20160816; b=wfMku1YTguW6WFLFkvXFUvW2doYCOptNcIFxNvHo0zgQToaw0I/owRsNPMQdt3d2FD K7cNx/d0UGzqqt5Jz6/kQJwnKxGQiPBA2tBYgxnXkmTeiBg7jtYb5P4PoNo0HcJCFQx8 0I9o5iKPg2YlOPiWCBBufUKD7wxsi40EXF+vBfIi6NMrWiD9dxk3gMVooOPICkmggkSI +QbpZn9WgABe30PD0ZD1XqpEwsEHJdVqUvuEm4TJKfW3Vm7kMAbOKJQ4KqhaFDJwN1To 614GgId0y75xyNdGjjZ9jQMS4Ikhz9/f5tJHHp/5gOWmJsrqXlaLu+deFt+QBV8N+waq z9lQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :dlp-reaction:dlp-product:dlp-version:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature:ironport-sdr :ironport-sdr; bh=7S2aNgrgKNLMkhgSYo6qKwJZ/g++ejqB8V4h7YtyLGU=; b=V4ANPbL5cj0cWdtjp9FCmjGAZ/mXqTg2YvYAf6ptKakrc71KItmIbWMApaHHdhE+9d wW1J5gvNr8x/wLFTu/P7f/4h3vjxXxut/Dc6ex5gI0r88exxE09deRHXDTk+SHTT7gG4 xPyUbxn5yfXYbKn7J9B53Kgn5tmxS+R9gvV3hDW8T7umivDHtJait6UNntoARvpb4a4Z FYLQ9qczrsnPL5+MKlDV3CszHkm8uH4tWy0tNs1ozWUUqnoZruzma/61RuBUzleCaItp 6Ooh9yfizVcuDR2U4kNqizH5PHAWClxZOSMayh0WfU2aedX0FpMis3L1708rWaNQTrUu eR7g== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=TJjz3pcG; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a15si15499496pgw.171.2021.04.25.02.25.41; Sun, 25 Apr 2021 02:25:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=TJjz3pcG; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229707AbhDYJZc (ORCPT + 99 others); Sun, 25 Apr 2021 05:25:32 -0400 Received: from mga07.intel.com ([134.134.136.100]:15226 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229551AbhDYJZb (ORCPT ); Sun, 25 Apr 2021 05:25:31 -0400 IronPort-SDR: D+A3MHWGAfehgBwwgxgpsZOpgoVdf1/gAOCZgzr3oYR2K0/fVmdaB9iCHu2rCq+GIWekZwqJCZ jxU7MJUjs+fw== X-IronPort-AV: E=McAfee;i="6200,9189,9964"; a="260177002" X-IronPort-AV: E=Sophos;i="5.82,250,1613462400"; d="scan'208";a="260177002" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Apr 2021 02:24:51 -0700 IronPort-SDR: FeK/WCiTW1B/dooAUAKQLabyLQYJGXgZsd+4XxzVzzR9Pp15xMsU3UjZUT6nXxH1aIC1M4LOer MO4c0lmE0lJQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,250,1613462400"; d="scan'208";a="422266679" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga008.fm.intel.com with ESMTP; 25 Apr 2021 02:24:50 -0700 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Sun, 25 Apr 2021 02:24:50 -0700 Received: from orsmsx609.amr.corp.intel.com (10.22.229.22) by ORSMSX608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Sun, 25 Apr 2021 02:24:49 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx609.amr.corp.intel.com (10.22.229.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Sun, 25 Apr 2021 02:24:49 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.106) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Sun, 25 Apr 2021 02:24:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YarZ5Ag2uR+pTnF3fTPi5Gwoe/UmjAqTaWRGf3L+khNZlaISXZDLf2EYiEpAO6Voz98iKrhbHV6h6xSMZcNNp9m8+NSzcfegBYyYuInxr+4BQQSsB0xvA94tReCu/reUtBYoYam5bpjuiyCKAyRmV5efLAYXTS/WzWzXY3Gcm48uIvn8XO8S+BIDHDlFr5llpaS0U+IgBcnMoqweWuYwOj+gQD/fvBpxkz7r0fiZfaWLs9OpnhNhgmuy8DcFCAI1UIUqtEIkONMy9JqlSJHALE6jdODRl2RbdkN+EPmAs0mHT/RkKvKJmkSThD3V+5190HWnOir6JwOH3sY50wIHmg== 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=7S2aNgrgKNLMkhgSYo6qKwJZ/g++ejqB8V4h7YtyLGU=; b=lc2tH7lSWs9VhIo/ClhCGHqUBOU5RrfwD2+b8+ntKn69osLeh70KekuTTvRz6Kan/f9hfPT0sjfW+SeEU0iXmk7vkvBby6NzJ/CrA3eMBiE71JP1b2DGADmfeee30Ku+uPyIBfMmnsVsJWl1L+ymOyl/anXyic11Wy9J8jgp8kw6/Kr7BDVTf7zW/1osfCPzPBYS3np91JWgMtxE5qRky8K96UJghBrQjY+Gs29xZR6CaqHEmKD5w58EYFrbC7AGQn85LmmJiiqYEEXBo9nf696lXAZsex5BQHxV+GigixTuKaJwP5in9WnL8zx18lX3oGIW0IeST4SGDxi6K4Z82g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7S2aNgrgKNLMkhgSYo6qKwJZ/g++ejqB8V4h7YtyLGU=; b=TJjz3pcG/L8mHWR8TyjJ68fC/rw+L/joeKe2YStCHwCc4u8ZwjrJ5K+vyf9OoridFrqNgAh7nsh6rPE93OgiC/IX316UebzWqIQcbitgcB7UsCthJrk1tlk+URGwj0GLkj1zCqtQGJM2Y14nODSX7RbDLZ5N4OaRSdeNS+/EeCU= Received: from MWHPR11MB1886.namprd11.prod.outlook.com (2603:10b6:300:110::9) by MW3PR11MB4634.namprd11.prod.outlook.com (2603:10b6:303:54::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4065.26; Sun, 25 Apr 2021 09:24:47 +0000 Received: from MWHPR11MB1886.namprd11.prod.outlook.com ([fe80::75b0:a8e9:60cb:7a29]) by MWHPR11MB1886.namprd11.prod.outlook.com ([fe80::75b0:a8e9:60cb:7a29%9]) with mapi id 15.20.4065.026; Sun, 25 Apr 2021 09:24:47 +0000 From: "Tian, Kevin" To: Jason Gunthorpe CC: Alex Williamson , "Liu, Yi L" , Jacob Pan , Auger Eric , Jean-Philippe Brucker , LKML , Joerg Roedel , Lu Baolu , David Woodhouse , "iommu@lists.linux-foundation.org" , "cgroups@vger.kernel.org" , Tejun Heo , Li Zefan , Johannes Weiner , Jean-Philippe Brucker , Jonathan Corbet , "Raj, Ashok" , "Wu, Hao" , "Jiang, Dave" Subject: RE: [PATCH V4 05/18] iommu/ioasid: Redefine IOASID set and allocation APIs Thread-Topic: [PATCH V4 05/18] iommu/ioasid: Redefine IOASID set and allocation APIs Thread-Index: AQHXDZub0CDG82VGXUmLEYgvMuPs4KqKkLIAgACg94CAAC72gIAAD04AgAADogCAAErUgIAETQEAgAOaswCAB7C3gIAAhxQwgADYDACAATCSAIAAVGMAgAELsQCAACiXgIAAVBgAgAAaMwCAAAESAIAABy2AgAAgOYCAFdCAgIAAppUAgADsNgCAACqygIAHsmaAgAAzsYCAAAjdgIAAD/yAgAAcQgCAADqggIAAk6nQgABIUACAASsnkIAAYWwAgALs9qA= Date: Sun, 25 Apr 2021 09:24:46 +0000 Message-ID: References: <20210416094547.1774e1a3@redhat.com> <20210421162307.GM1370958@nvidia.com> <20210421105451.56d3670a@redhat.com> <20210421175203.GN1370958@nvidia.com> <20210421133312.15307c44@redhat.com> <20210421230301.GP1370958@nvidia.com> <20210422121020.GT1370958@nvidia.com> <20210423114944.GF1370958@nvidia.com> In-Reply-To: <20210423114944.GF1370958@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: nvidia.com; dkim=none (message not signed) header.d=none;nvidia.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [101.88.226.48] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 45246688-d8a8-4d82-7780-08d907cbf7ff x-ms-traffictypediagnostic: MW3PR11MB4634: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JlOlPwDkTPsrIh6CYdrM8KpkHIAH+v7/Qvh5ZPhZDe/b3p6gtdiDWCkwR9wFlFeX2aFrnMDNsCbiF3mJsqWTe1u870MVmEY2e7oLohX8Syrs4BrcXhPKvah2vGOe7nrvR4Q5fgYbY2BfikOZnWBN221HI2k0DcDSMrJHu+pwOatyBmT0E+afh/0Bet1V/Ye6dDSJS/AoT/R11TRKV2DcI1Mm8UoJsaybLOV9ujEsWDKXGj+Ue6EHQX/CGkxUrKG4ZkB3mnCkqhHsQarMXxSy/f1i+rYabl4E39d0uvuQrZkR2Fhc/RO09PN82nYolsnuLT+dIOnMFzUKXJrs2AVrr5w6p4kBv0oRu1izwGg140HBBQ4iErdDTpxKPL1KwBngdkHmdQFH2HIH02WrcTxtbOAuUQgqgQhpvEhzVFCZUMmGy57B4HczZby7dDDpFOtHuyQPZOmX/zmKJJYMB/pqh9B5VhrUl7EUiTp7f0y8Gbk9pBrQhn8rHb5Ce3Ui8KdNe8R/V+LxCnlW1tww4mcyhzbMVTm5uuUC62CsEUuM6lr+INEXaPJ752uStb+9NgAkaOkhysIdxTMgWfRtMSBaFOVO9Qpdx/wztqGonTo978Q= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1886.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(346002)(136003)(39860400002)(366004)(376002)(2906002)(86362001)(83380400001)(71200400001)(8936002)(8676002)(7696005)(6506007)(26005)(316002)(6916009)(33656002)(55016002)(9686003)(38100700002)(52536014)(5660300002)(186003)(7416002)(54906003)(122000001)(4326008)(66446008)(66946007)(64756008)(76116006)(66556008)(66476007)(478600001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?WWxuUldWZTBHQTVERW9GZEVpREk1WEpvUmxCZTBSNGE1bEN5d1BmaWYyajAw?= =?utf-8?B?dzFaSWg3TDZuamVOaXV1KytvbmlGcjV1QUlZMDdjUTBiWWdXZjNFMnREVnRt?= =?utf-8?B?N1pCZlprQjNIYk42cHVjUkxhREF1dnovcGw1Vk1EOXNkRUlMMDJrREV2TnpQ?= =?utf-8?B?b25RZGNDRkV5emlyZjNxeWx0QVYrU29SN2tvdlhOMVNGWnJFOFNtdG56dHpG?= =?utf-8?B?OFZGWDlMdGZBeEJYZWg5aW55R2t6U3RueTBEMVBEd0VDNWhJc1FFSjlJRGht?= =?utf-8?B?dm5SZWw3STlHV29mUmFkNy8xTnRaUldRUXo4bkRNeXJ6MEZGVlNQcTF3SkFP?= =?utf-8?B?VnNxZjV1TUkwdkJlSjZkSnBxKzhKSERnMkt3b2R0MmtZNnJrNFVXcllIOEJK?= =?utf-8?B?bVRzWjB5cTlRMG5iTnZBNzFYVDVqT3VpQmpGQTBVRzdETGhrb1g1clo1TGM1?= =?utf-8?B?cHY2NmQyeHhnVWtFQkdGdlBzb01FM1BQWHpqclB3S1paZElld1o5OENPVU1D?= =?utf-8?B?c1FaK3VMUnA1RG5NaTR2aTVJdEx3ZFZ2RG9sd1BDMmt5VC81U2gxOCs1REh2?= =?utf-8?B?c25oalJwN2NEanJ0Q28zZVJtWk0xUUhRU21hdVVKMlBGYWxaTHdZNVJ5OUFC?= =?utf-8?B?aXB6b2pXclpWS29iUnVaeHBhZ0F6L0VqNUMxcmE4S2dPNmUvUWxRR3RrNXd2?= =?utf-8?B?eVVSYnduNHRld2lxa0dMeXBLMlo2NHRqamVqNzlkK3RZM3BCRDRzZHRKY2Rn?= =?utf-8?B?ZjNjNk11bGNaMUNCSjNKRzlnbzRvYVc5Ry8wcFhDV2VDVVpMK3BKMHpFN2cw?= =?utf-8?B?WXJ4Y1Z3MVdueW5meUZ1eWR1bUdQaW9rSnhPQW0rQmYzbmVJSlBGbnU1YjRq?= =?utf-8?B?SlNKYlFIMmx3S3pNSHlPWTgwUUlyNjV1aSs0ZUwxUHd2K29XVXM4b0k5enZ4?= =?utf-8?B?anozSWxjWjBNUFprN3dkY25UQ1FobW1XTHNqTy9BWTZ1bG1SdVh5VU9PRXpQ?= =?utf-8?B?bWkyYTN3L2JvL0duTHJEclNiS2ZDcFFJZjBvU0M0aW5tWXpVMEM3bFVKa21S?= =?utf-8?B?TnRxUXB3bmlNQzdjZDk4eHY4aHkzMUdPUUh1YUlhSzJESHczbEExNXhSTkp3?= =?utf-8?B?cnJ6dzBSaUlreHZXb2lFZHNlYk5pdFhhY1FLS2tzbVA5SVJEWG9pT203VVQ3?= =?utf-8?B?N1JxNU9GODQ2QXB5SGhyVW1Kd2Q5dHlQam90N041MDRTTktpQ2xSZ3dNSnZK?= =?utf-8?B?TENidzBuYzk5S3VYL21NMW5MOUlEY1dLZ3J2NWM2ZVV3RkJzUHdBdDE4QkR5?= =?utf-8?B?T21HUWtwZ3pMMVVjMVFaNEFQUUQ4RFRUZG15TnIvcGdrTG5KeXJpOVBxUGJ4?= =?utf-8?B?Z3hSQWl1TmY3ald1aEhGa2MvS1FLQXIweksxZ0FxUWJteTFNZUZMNkd2SUZw?= =?utf-8?B?OGdVWDIyRnFpU3ZXbk9yTDUwOGZFMzBmNVpnS3V6M0cxa3g4OWh4N21Lc2d1?= =?utf-8?B?L2V6eHczVVNFYmw5aDJFR1JxeFVRNjRxSGtWb1JEMC9SK254Zkd1ZFNvb2Fi?= =?utf-8?B?K3JDSzNRMWQ5U296SlJMalNYMkdwRzhCbUdQZTI2aGRIbHRSYUtWTDJrSW8z?= =?utf-8?B?VXVHZlMyenliY3IrNFlpN0YrcEV2dU9yNTQvSmRrdjVNbDd3NFhPeU5HVjh3?= =?utf-8?B?RW5BYTVwc3U4MUhxNy9KRzFQamxYNklhSGpHUkloTTBxTjRMenhjdnJyRm0v?= =?utf-8?Q?wrEcIb7tA4BYODob5abZtGf01NJpKdJiUauWgQh?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1886.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45246688-d8a8-4d82-7780-08d907cbf7ff X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2021 09:24:46.8146 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: qSonuacXb+5XupkPQatBqFbiQEy472x+Nyvv+aVgH/rVHnjUGHwdI3/oeyg0T0A1PQlhsGCq4EksWyngFtUgVQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4634 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBGcm9tOiBKYXNvbiBHdW50aG9ycGUgPGpnZ0BudmlkaWEuY29tPg0KPiBTZW50OiBGcmlkYXks IEFwcmlsIDIzLCAyMDIxIDc6NTAgUE0NCj4gDQo+IE9uIEZyaSwgQXByIDIzLCAyMDIxIGF0IDA5 OjA2OjQ0QU0gKzAwMDAsIFRpYW4sIEtldmluIHdyb3RlOg0KPiANCj4gPiBPciBjb3VsZCB3ZSBz dGlsbCBoYXZlIGp1c3Qgb25lIC9kZXYvaW9hc2lkIGJ1dCBhbGxvdyB1c2Vyc3BhY2UgdG8gY3Jl YXRlDQo+ID4gbXVsdGlwbGUgZ3BhX2lvYXNpZF9pZCdzIGVhY2ggYXNzb2NpYXRlZCB0byBhIGRp ZmZlcmVudCBpb21tdSBkb21haW4/DQo+ID4gVGhlbiB0aGUgY29tcGF0aWJpbGl0eSBjaGVjayB3 aWxsIGJlIGRvbmUgYXQgQVRUQUNIX0lPQVNJRCBpbnN0ZWFkIG9mDQo+ID4gSk9JTl9JT0FTSURf RkQuDQo+IA0KPiBUbyBteSBtaW5kIHdoYXQgbWFrZXMgc2Vuc2UgdGhhdCB0aGF0IC9kZXYvaW9h c2lkIHByZXNlbnRzIGEgc2luZ2xlDQo+IElPTU1VIGJlaGF2aW9yIHRoYXQgaXMgYmFzaWNhbGx5 IHRoZSBzYW1lLiBUaGlzIG1heSB1bHRpbWF0ZWx5IG5vdCBiZQ0KPiB3aGF0IHdlIGNhbGwgYSBk b21haW4gdG9kYXkuDQo+IA0KPiBXZSBtYXkgZW5kIHVwIHdpdGggYSBtaWRkbGUgb2JqZWN0IHdo aWNoIGlzIGEgZ3JvdXAgb2YgZG9tYWlucyB0aGF0DQo+IGFsbCBoYXZlIHRoZSBzYW1lIGNhcGFi aWxpdGllcywgYW5kIHdlIGRlZmluZSBjYXBhYmlsaXRpZXMgaW4gYSB3YXkNCj4gdGhhdCBtb3N0 IHBsYXRmb3JtcyBoYXZlIGEgc2luZ2xlIGdyb3VwIG9mIGRvbWFpbnMuDQo+IA0KPiBUaGUga2V5 IGNhcGFiaWxpdHkgb2YgYSBncm91cCBvZiBkb21haW5zIGlzIHRoZXkgY2FuIGFsbCBzaGFyZSB0 aGUgSFcNCj4gcGFnZSB0YWJsZSByZXByZXNlbnRhdGlvbiwgc28gaWYgYW4gSU9BU0lEIGluc3Rh bnRpYXRlcyBhIHBhZ2UgdGFibGUNCj4gaXQgY2FuIGJlIGFzc2lnbmVkIHRvIGFueSBkZXZpY2Ug b24gYW55IGRvbWFpbiBpbiB0aGUgZ3J1b3Agb2YgZG9tYWlucy4NCg0KU29ycnkgdGhhdCBJIGRp ZG4ndCBxdWl0ZSBnZXQgaXQuIElmIGEgZ3JvdXAgb2YgZG9tYWlucyBjYW4gc2hhcmUgdGhlIA0K c2FtZSBwYWdlIHRhYmxlIHRoZW4gd2h5IG5vdCBqdXN0IGF0dGFjaGluZyBhbGwgZGV2aWNlcyB1 bmRlciB0aG9zZQ0KZG9tYWlucyBpbnRvIGEgc2luZ2xlIGRvbWFpbj8gSU1PIHRoZSBpb21tdSBk b21haW4gaXMgaW50cm9kdWNlZA0KdG8gZGVzY3JpYmUgdGhlIEhXIHBhZ2UgdGFibGUuIElkZWFs bHkgYSBuZXcgaW9tbXUgZG9tYWluIHNob3VsZA0KYmUgY3JlYXRlZCBvbmx5IHdoZW4gaXQncyBp bXBvc3NpYmxlIHRvIHNoYXJlIGFuIGV4aXN0aW5nIHBhZ2UgdGFibGUuIA0KT3RoZXJ3aXNlIHlv dSdsbCBnZXQgYmFkIGlvdGxiIGVmZmljaWVuY3kgYmVjYXVzZSBlYWNoIGRvbWFpbiBoYXMgaXRz DQp1bmlxdWUgZG9tYWluIGlkICh0YWdnZWQgaW4gaW90bGIpIHRoZW4gZHVwbGljYXRlZCBpb3Rs YiBlbnRyaWVzIG1heQ0KZXhpc3QgZXZlbiB3aGVuIGEgc2luZ2xlIHBhZ2UgdGFibGUgaXMgc2hh cmVkIGJ5IHRob3NlIGRvbWFpbnMuDQoNClRoZW4gZG9lcyBpdCBpbXBseSB0aGF0IHlvdSBhcmUg YWN0dWFsbHkgc3VnZ2VzdGluZyAvZGV2L2lvYXNpZCBhc3NvY2lhdGVkIA0Kd2l0aCBhIHNpbmds ZSAybmQtbGV2ZWwgcGFnZSB0YWJsZSAod2hpY2ggY2FuIGJlIG5lc3RlZCBieSBtdWx0aXBsZSAN CjFzdC1sZXZlbCBwYWdlIHRhYmxlcyByZXByZXNlbnRlZCBieSBvdGhlciBpb2FzaWRzKSB0aHVz IGEgc2luZ2xlIGlvbW11IA0KZG9tYWluIGZvciBhbGwgZGV2aWNlcyBsaW5rZWQgdG8gY29tcGF0 aWJsZSBJT01NVXM/DQoNCk9yLCBjYW4geW91IGVsYWJvcmF0ZSB3aGF0IGlzIHRoZSB0YXJnZXRl ZCB1c2FnZSBieSBoYXZpbmcgYSBncm91cCBvZg0KZG9tYWlucyB3aGljaCBhbGwgc2hhcmUgdGhl IHNhbWUgcGFnZSB0YWJsZT8NCg0KPiANCj4gSWYgeW91IHRyeSB0byBzYXkgdGhhdCAvZGV2L2lv YXNpZCBoYXMgbWFueSBkb21haW5zIGFuZCB0aGV5IGNhbid0DQo+IGhhdmUgdGhlaXIgSFcgcGFn ZSB0YWJsZXMgc2hhcmVkIHRoZW4gSSB0aGluayB0aGUgaW1wbGVtZW50YXRpb24NCj4gY29tcGxl eGl0eSB3aWxsIGV4cGxvZGUuDQoNCldhbnQgdG8gaGVhciB5b3VyIG9waW5pb24gZm9yIG9uZSBv cGVuIGhlcmUuIFRoZXJlIGlzIG5vIGRvdWJ0IHRoYXQNCmFuIGlvYXNpZCByZXByZXNlbnRzIGEg SFcgcGFnZSB0YWJsZSB3aGVuIHRoZSB0YWJsZSBpcyBjb25zdHJ1Y3RlZCBieSANCnVzZXJzcGFj ZSBhbmQgdGhlbiBsaW5rZWQgdG8gdGhlIElPTU1VIHRocm91Z2ggdGhlIGJpbmQvdW5iaW5kDQpB UEkuIEJ1dCBJJ20gbm90IHZlcnkgc3VyZSBhYm91dCB3aGV0aGVyIGFuIGlvYXNpZCBzaG91bGQg cmVwcmVzZW50IA0KdGhlIGV4YWN0IHBndGFibGUgb3IgdGhlIG1hcHBpbmcgbWV0YWRhdGEgd2hl biB0aGUgdW5kZXJseWluZyANCnBndGFibGUgaXMgaW5kaXJlY3RseSBjb25zdHJ1Y3RlZCB0aHJv dWdoIG1hcC91bm1hcCBBUEkuIFZGSU8gZG9lcw0KdGhlIGxhdHRlciB3YXksIHdoaWNoIGlzIHdo eSBpdCBhbGxvd3MgbXVsdGlwbGUgaW5jb21wYXRpYmxlIGRvbWFpbnMNCmluIGEgc2luZ2xlIGNv bnRhaW5lciB3aGljaCBhbGwgc2hhcmUgdGhlIHNhbWUgbWFwcGluZyBtZXRhZGF0YS4NCg0KPiAN Cj4gPiBUaGlzIGRvZXMgaW1wb3NlIG9uZSBidXJkZW4gdG8gdXNlcnNwYWNlIHRob3VnaCwgdG8g dW5kZXJzdGFuZCB0aGUNCj4gPiBJT01NVSBjb21wYXRpYmlsaXRpZXMgYW5kIGZpZ3VyZSBvdXQg d2hpY2ggaW5jb21wYXRpYmxlIGZlYXR1cmVzIG1heQ0KPiA+IGFmZmVjdCB0aGUgcGFnZSB0YWJs ZSBtYW5hZ2VtZW50ICh3aGlsZSBzdWNoIGtub3dsZWRnZSBpcyBJT01NVQ0KPiA+IHZlbmRvciBz cGVjaWZpYykgYW5kIHRoZW4gZXhwbGljaXRseSBtYW5hZ2UgbXVsdGlwbGUgL2Rldi9pb2FzaWQn cyBvcg0KPiA+IG11bHRpcGxlIGdwYV9pb2FzaWRfaWQncy4NCj4gDQo+IFJpZ2h0LCB0aGlzIHNl ZW1zIHZlcnkgaGFyZCBpbiB0aGUgZ2VuZXJhbCBjYXNlLi4NCj4gDQo+ID4gQWx0ZXJuYXRpdmVs eSBpcyBpdCBhIGdvb2QgZGVzaWduIGJ5IGhhdmluZyB0aGUga2VybmVsIHJldHVybiBlcnJvciBh dA0KPiA+IGF0dGFjaC9qb2luIHRpbWUgdG8gaW5kaWNhdGUgdGhhdCBpbmNvbXBhdGliaWxpdHkg aXMgZGV0ZWN0ZWQgdGhlbiB0aGUNCj4gPiB1c2Vyc3BhY2Ugc2hvdWxkIG9wZW4gYSBuZXcgL2Rl di9pb2FzaWQgb3IgY3JlYXRlcyBhIG5ldyBncGFfaW9hc2lkX2lkDQo+ID4gZm9yIHRoZSBmYWls aW5nIGRldmljZSB1cG9uIHN1Y2ggZmFpbHVyZSwgdy9vIGNvbnN0cnVjdGluZyBpdHMgb3duDQo+ ID4gY29tcGF0aWJpbGl0eSBrbm93bGVkZ2U/DQo+IA0KPiBZZXMsIHRoaXMgZmVlbHMgd29ya2Fi bGUgdG9vDQo+IA0KPiA+ID4gVGhpcyBtZWFucyBxZW11ZSBtaWdodCBoYXZlIG11bHRpcGxlIC9k ZXYvaW9hc2lkJ3MgaWYgdGhlIHN5c3RlbSBoYXMNCj4gPiA+IG11bHRpcGxlIGluY29tcGF0aWJs ZSBJT01NVXMgKGlzIHRoaXMgYWN0dWFsbHkgYSB0aGluZz8pIFRoZSBwbGF0Zm9ybQ0KPiA+DQo+ ID4gT25lIGV4YW1wbGUgaXMgSW50ZWwgcGxhdGZvcm0gd2l0aCBpZ2QuIFR5cGljYWxseSB0aGVy ZSBpcyBvbmUgSU9NTVUNCj4gPiBkZWRpY2F0ZWQgZm9yIGlnZCBhbmQgdGhlIG90aGVyIElPTU1V IHNlcnZpbmcgYWxsIHRoZSByZW1haW5pbmcgZGV2aWNlcy4NCj4gPiBUaGUgaWdkIElPTU1VIG1h eSBub3Qgc3VwcG9ydCBJT01NVV9DQUNIRSB3aGlsZSB0aGUgb3RoZXIgb25lDQo+ID4gZG9lcy4N Cj4gDQo+IElmIHdlIGNhbiBkbyBhcyBhYm92ZSB0aGUgdHdvIGRvbWFpbnMgbWF5IGJlIGluIHRo ZSBzYW1lIGdyb3VwIG9mDQo+IGRvbWFpbnMgYW5kIHRoZSBJT01NVV9DQUNIRSBpcyBub3QgZXhw b3NlZCBhdCB0aGUgL2Rldi9pb2FzaWQgbGV2ZWwuDQo+IA0KPiBGb3IgaW5zdGFuY2UgdGhlIEFQ SSBjb3VsZCBzcGVjaWZpeSBJT01NVV9DQUNIRSBkdXJpbmcgYXR0YWNoLCBub3QNCj4gZHVyaW5n IElPQVNJRCBjcmVhdGlvbi4NCj4gDQo+IEdldHRpbmcgYWxsIHRoZSBkYXRhIG1vZGVsIHJpZ2h0 IGluIHRoZSBBUEkgaXMgZ29pbmcgdG8gYmUgdHJpY2tpZXN0DQo+IHBhcnQgb2YgdGhpcy4NCj4g DQo+ID4geWVzLCBlLmcuIGluIHZTVkEgYm90aCBkZXZpY2VzIChiZWhpbmQgZGl2ZXJnZW5jZSBJ T01NVXMpIGFyZSBib3VuZA0KPiA+IHRvIGEgc2luZ2xlIGd1ZXN0IHByb2Nlc3Mgd2hpY2ggaGFz IGFuIHVuaXF1ZSBQQVNJRCBhbmQgMXN0LWxldmVsIHBhZ2UNCj4gPiB0YWJsZS4gRWFybGllciBp bmNvbXBhdGliaWxpdHkgZXhhbXBsZSBpcyBvbmx5IGZvciAybmQtbGV2ZWwuDQo+IA0KPiBCZWNh dXNlIHdoZW4gd2UgZ2V0IHRvIGhlcmUsIHRoaW5ncyBiZWNvbWUgaW5zY3J1dGFibGUgYXMgYW4g QVBJIGlmDQo+IHlvdSBhcmUgdHJ5aW5nIHRvIHNheSB0d28gZGlmZmVyZW50IElPTU1VIHByZXNl bnRhdGlvbnMgY2FuIGFjdHVhbGx5DQo+IGJlIG5lc3RlZC4NCj4gDQo+ID4gPiBTdXJlLi4gVGhl IHRyaWNreSBiaXQgd2lsbCBiZSB0byBkZWZpbmUgYm90aCBvZiB0aGUgY29tbW9uIG5lc3RlZA0K PiA+ID4gb3BlcmF0aW5nIG1vZGVzLg0KPiA+ID4NCj4gPiA+ICAgbmVzdGVkX2lvYXNpZCA9IGlv Y3RsKGlvYXNpZF9mZCwgQ1JFQVRFX05FU1RFRF9JT0FTSUQsDQo+IGdwYV9pb2FzaWRfaWQpOw0K PiA+ID4gICBpb2N0bChpb2FzaWRfZmQsIFNFVF9ORVNURURfSU9BU0lEX1BBR0VfVEFCTEVTLCBu ZXN0ZWRfaW9hc2lkLCAuLikNCj4gPiA+DQo+ID4gPiAgICAvLyBJT01NVSB3aWxsIG1hdGNoIG9u IHRoZSBkZXZpY2UgUklELCBubyBQQVNJRDoNCj4gPiA+ICAgaW9jdGwodmZpb19kZXZpY2UsIEFU VEFDSF9JT0FTSUQsIG5lc3RlZF9pb2FzaWQpOw0KPiA+ID4NCj4gPiA+ICAgIC8vIElPTU1VIHdp bGwgbWF0Y2ggb24gdGhlIGRldmljZSBSSUQgYW5kIFBBU0lEOg0KPiA+ID4gICBpb2N0bCh2Zmlv X2RldmljZSwgQVRUQUNIX0lPQVNJRF9QQVNJRCwgcGFzaWQsIG5lc3RlZF9pb2FzaWQpOw0KPiA+ DQo+ID4gSSdtIGEgYml0IGNvbmZ1c2VkIGhlcmUgd2h5IHdlIGhhdmUgYm90aCBwYXNpZCBhbmQg aW9hc2lkIG5vdGF0aW9ucw0KPiB0b2dldGhlci4NCj4gPiBXaHkgbm90IHVzZSBuZXN0ZWRfaW9h c2lkIGFzIHBhc2lkIGRpcmVjdGx5IChpLmUuIGV2ZXJ5IHBhc2lkIGluIG5lc3RlZA0KPiBtb2Rl DQo+ID4gaXMgY3JlYXRlZCBieSBDUkVBVEVfTkVTVEVEX0lPQVNJRCk/DQo+IA0KPiBUaGUgSU9B U0lEIGlzIG5vdCBhIFBBU0lELCBpdCBpcyBqdXN0IGEgcGFnZSB0YWJsZS4NCj4gDQo+IEEgZ2Vu ZXJpYyBJT01NVSBtYXRjaGVzIG9uIGVpdGhlciBSSUQgb3IgKFJJRCxQQVNJRCksIHNvIHlvdSBz aG91bGQNCj4gc3BlY2lmeSB0aGUgUEFTSUQgd2hlbiBlc3RhYmxpc2hpbmcgdGhlIG1hdGNoLg0K PiANCj4gSU9BU0lEIG9ubHkgc3BlY2lmaWVzIHRoZSBwYWdlIHRhYmxlLg0KPiANCj4gU28geW91 IHJlYWQgdGhlIGFib3ZlIGFzIGNvbmZpZ3VyaW5nIHRoZSBwYXRoDQo+IA0KPiAgIFBDSV9ERVZJ Q0UgLT4gKFJJRCxQQVNJRCkgLT4gbmVzdGVkX2lvYXNpZCAtPiBncGFfaW9hc2lkX2lkIC0+IHBo eXNpY2FsDQo+IA0KPiBXaGVyZSAoUklELFBBU0lEKSBpbmRpY2F0ZSB2YWx1ZXMgdGFrZW4gZnJv bSB0aGUgUENJIHBhY2tldC4NCj4gDQo+IEluIHByaW5jaXBsZSB0aGUgSU9NTVUgY291bGQgYWxz byBiZSBjb21tYW5kZWQgdG8gcmV1c2UgdGhlIHNhbWUNCj4gaW9hc2lkIHBhZ2UgdGFibGUgd2l0 aCBhIGRpZmZlcmVudCBQQVNJRDoNCj4gDQo+ICAgUENJX0RFVklDRV9CIC0+IChSSURfQixQQVNJ RF9CKSAtPiBuZXN0ZWRfaW9hc2lkIC0+IGdwYV9pb2FzaWRfaWQgLT4NCj4gcGh5c2ljYWwNCj4g DQo+IFRoaXMgaXMgaW1wb3NzaWJsZSBpZiB0aGUgaW9hc2lkID09IFBBU0lEIGluIHRoZSBBUEku DQoNCk9LLCBub3cgSSBzZWUgd2hlcmUgdGhlIGRpc2Nvbm5lY3Rpb24gY29tZXMgZnJvbS4gSW4g bXkgY29udGV4dCBpb2FzaWQNCmlzIHRoZSBpZGVudGlmaWVyIHRoYXQgaXMgYWN0dWFsbHkgdXNl ZCBpbiB0aGUgd2lyZSwgYnV0IHNlZW1zIHlvdSB0cmVhdCBpdCBhcyANCmEgc3ctZGVmaW5lZCBu YW1lc3BhY2UgcHVyZWx5IGZvciByZXByZXNlbnRpbmcgcGFnZSB0YWJsZXMuIFdlIHNob3VsZCAN CmNsZWFyIHRoaXMgY29uY2VwdCBmaXJzdCBiZWZvcmUgZnVydGhlciBkaXNjdXNzaW5nIG90aGVy IGRldGFpbHMuIPCfmIoNCg0KQmVsb3cgaXMgdGhlIGRlc2NyaXB0aW9uIHdoZW4gdGhlIGtlcm5l bCBpb2FzaWQgYWxsb2NhdG9yIHdhcyBpbnRyb2R1Y2VkOg0KDQotLQ0KY29tbWl0IGZhODM0MzNj OTJlMzQwODIyYTA1NmE2MTBhNGZhMjA2M2EzZGIzMDQNCkF1dGhvcjogSmVhbi1QaGlsaXBwZSBC cnVja2VyIDxqZWFuLXBoaWxpcHBlLmJydWNrZXJAYXJtLmNvbT4NCkRhdGU6ICAgV2VkIE9jdCAy IDEyOjQyOjQxIDIwMTkgLTA3MDANCg0KICAgIGlvbW11OiBBZGQgSS9PIEFTSUQgYWxsb2NhdG9y DQoNCiAgICBTb21lIGRldmljZXMgbWlnaHQgc3VwcG9ydCBtdWx0aXBsZSBETUEgYWRkcmVzcyBz cGFjZXMsIGluIHBhcnRpY3VsYXINCiAgICB0aG9zZSB0aGF0IGhhdmUgdGhlIFBDSSBQQVNJRCBm ZWF0dXJlLiBQQVNJRCAoUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEKQ0KICAgIGFsbG93cyB0byBz aGFyZSBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzIHdpdGggZGV2aWNlcyAoU1ZBKSwgcGFydGl0aW9u IGENCiAgICBkZXZpY2UgaW50byBWTS1hc3NpZ25hYmxlIGVudGl0aWVzIChWRklPIG1kZXYpIG9y IHNpbXBseSBwcm92aWRlDQogICAgbXVsdGlwbGUgRE1BIGFkZHJlc3Mgc3BhY2UgdG8ga2VybmVs IGRyaXZlcnMuIEFkZCBhIGdsb2JhbCBQQVNJRA0KICAgIGFsbG9jYXRvciB1c2FibGUgYnkgZGlm ZmVyZW50IGRyaXZlcnMgYXQgdGhlIHNhbWUgdGltZS4gTmFtZSBpdCBJL08gQVNJRA0KICAgIHRv IGF2b2lkIGNvbmZ1c2lvbiB3aXRoIEFTSURzIGFsbG9jYXRlZCBieSBhcmNoIGNvZGUsIHdoaWNo IGFyZSB1c3VhbGx5DQogICAgYSBzZXBhcmF0ZSBJRCBzcGFjZS4NCg0KICAgIFRoZSBJT0FTSUQg c3BhY2UgaXMgZ2xvYmFsLiBFYWNoIGRldmljZSBjYW4gaGF2ZSBpdHMgb3duIFBBU0lEIHNwYWNl LA0KICAgIGJ1dCBieSBjb252ZW50aW9uIHRoZSBJT01NVSBlbmRlZCB1cCBoYXZpbmcgYSBnbG9i YWwgUEFTSUQgc3BhY2UsIHNvDQogICAgdGhhdCB3aXRoIFNWQSwgZWFjaCBtbV9zdHJ1Y3QgaXMg YXNzb2NpYXRlZCB0byBhIHNpbmdsZSBQQVNJRC4NCg0KICAgIFRoZSBhbGxvY2F0b3IgaXMgcHJp bWFyaWx5IHVzZWQgYnkgSU9NTVUgc3Vic3lzdGVtIGJ1dCBpbiByYXJlIG9jY2FzaW9ucw0KICAg IGRyaXZlcnMgd291bGQgbGlrZSB0byBhbGxvY2F0ZSBQQVNJRHMgZm9yIGRldmljZXMgdGhhdCBh cmVuJ3QgbWFuYWdlZCBieQ0KICAgIGFuIElPTU1VLCB1c2luZyB0aGUgc2FtZSBJRCBzcGFjZSBh cyBJT01NVS4NCi0tDQoNCmlvYXNpZCBhbmQgcGFzaWQgYXJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5 IHdpdGhpbiB0aGUga2VybmVsLCBhbmQgdGhlIGlvYXNpZA0KdmFsdWUgcmV0dXJuZWQgYnkgdGhl IGlvYXNpZCBhbGxvY2F0b3IgaXMgZGlyZWN0bHkgdXNlZCBhcyBQQVNJRCB3aGVuIHRoZQ0KZHJp dmVyIHByb2dyYW1zIElPTU1VIGFuZCBkZXZpY2UsIHJlc3BlY3RpdmVseS4gTXkgY29udGV4dCBp cyBiYXNlZCBvbiANCnRoaXMgdW5kZXJzdGFuZGluZywgd2hpY2ggaXMgd2h5IEkgdGhvdWdodCBu ZXN0ZWRfaW9hc2lkIGNhbiBiZSBkaXJlY3RseSANCnVzZWQgYXMgUEFTSUQgaW4gZWFybGllciBy ZXBseS4gRG8geW91IHNlZSBhIHByb2JsZW0gd2l0aCB0aGlzIGFwcHJvYWNoPw0KDQpUaGVuIGZv bGxvd2luZyB5b3VyIHByb3Bvc2FsLCBkb2VzIGl0IG1lYW4gdGhhdCB3ZSBuZWVkIGFub3RoZXIg aW50ZXJmYWNlDQpmb3IgYWxsb2NhdGluZyBQQVNJRD8gYW5kIHNpbmNlIGlvYXNpZCBtZWFucyBk aWZmZXJlbnQgdGhpbmcgaW4gdUFQSSBhbmQNCmluLWtlcm5lbCBBUEksIHBvc3NpYmx5IGEgbmV3 IG5hbWUgaXMgcmVxdWlyZWQgdG8gYXZvaWQgY29uZnVzaW9uPw0KDQo+IA0KPiA+IEJlbG93IEkg bGlzdCBkaWZmZXJlbnQgc2NlbmFyaW9zIGZvciBBVFRBQ0hfSU9BU0lEIGluIG15IHZpZXcuIEhl cmUNCj4gPiB2ZmlvX2RldmljZSBjb3VsZCBiZSBhIHJlYWwgUENJIGZ1bmN0aW9uIChSSUQpLCBv ciBhIHN1YmZ1bmN0aW9uIGRldmljZQ0KPiA+IChSSUQrZGVmX2lvYXNpZCkuDQo+IA0KPiBXaGF0 IGlzIFJJRCtkZWZfaW9hc2lkPyBUaGUgSU9NTVUgZG9lcyBub3QgbWF0Y2ggb24gSU9BU0lEJ3Mu DQo+IA0KPiBBIHN1YmZ1bmN0aW9uIGRldmljZSBhbHdheXMgbmVlZCB0byB1c2UgUEFTSUQsIG9y IGFuIGludGVybmFsIElPTU1VLA0KPiBjb25mdXNlZCB3aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGV4 cGxhaW4/DQoNCkhlcmUgdGhlIGRlZl9pb2FzaWQgaXMgdGhlIFBBU0lEIHRoYXQgaXMgYXNzb2Np YXRlZCB3aXRoIHRoZSBzdWJmdW5jdGlvbg0KaW4gbXkgY29udGV4dCB3aXRoIGFib3ZlIGV4cGxh bmF0aW9uLg0KDQo+IA0KPiA+IElmIHRoZSB3aG9sZSBQQVNJRCB0YWJsZSBpcyBkZWxlZ2F0ZWQg dG8gdGhlIGd1ZXN0IGluIEFSTSBjYXNlLCB0aGUgZ3Vlc3QNCj4gPiBjYW4gc2VsZWN0IGl0cyBv d24gUEFTSURzIHcvbyB0ZWxsaW5nIHRoZSBoeXBlcnZpc29yLg0KPiANCj4gVGhlIGh5cGVydmlz b3IgaGFzIHRvIHJvdXRlIHRoZSBQQVNJRCdzIHRvIHRoZSBndWVzdCBhdCBzb21lIHBvaW50IC0g YQ0KPiBndWVzdCBjYW4ndCBqdXN0IGNsYWltIGEgUEFTSUQgdW5pbGF0ZXJhbGx5LCB0aGF0IHdv dWxkIG5vdCBiZSBzZWN1cmUuDQo+IA0KPiBJZiBpdCBpcyBub3QgZG9uZSB3aXRoIHBlci1QQVNJ RCBoeXBlcmNhbGxzIHRoZW4gdGhlIGh5cGVydmlzb3IgaGFzIHRvDQo+IHJvdXRlIGFsbCBQQVNJ RCdzIGZvciBhIFJJRCB0byB0aGUgZ3Vlc3QgYW5kIC9kZXYvaW9hc2lkIG5lZWRzIHRvIGhhdmUN Cj4gYSBuZXN0ZWQgSU9BU0lEIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhpcyBjb25uZWN0aW9u IC0gaWUgaXQgcG9pbnRzDQo+IHRvIHRoZSBQQVNJRCB0YWJsZSBvZiB0aGUgZ3Vlc3QgdklPTU1V IG9yIHNvbWV0aGluZy4NCg0KeWVzLCB0aGlzIG1pZ2h0IGJlIHRoZSBtb2RlbCB0aGF0IHdpbGwg d29yayBmb3IgQVJNIGNhc2UuIEluIHRoZWlyDQphcmNoaXRlY3R1cmUgdGhlIFBBU0lEIHRhYmxl IGxvY2F0ZXMgaW4gdGhlIEdQQSBzcGFjZSB0aHVzIG5hdHVyYWxseQ0KdG8gYmUgbWFuYWdlZCBi eSB0aGUgZ3Vlc3QgKHRob3VnaCBKZWFuIGV2ZXIgbWVudGlvbmVkIHNvbWUNCnRyaWNreSBtZXRo b2QgdG8gYWxsb3cgdGhlIGhvc3QgbWFuYWdpbmcgaXQgYnkgc3RlYWxpbmcgYSBHUEEgd2luZG93 KS4NCg0KPiANCj4gUmVtZW1iZXIgdGhpcyBhbGwgaGFzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBt ZGV2J3MgdG9vIGFuZCB3aXRob3V0DQo+IGh5cGVyY2FsbHMgdG8gY3JlYXRlIFBBU0lEcyB0aGF0 IHdpbGwgYmUgaGFyZDogbWRldiBzaGFyaW5nIGEgUklEIGFuZA0KPiBzbGljaW5nIHRoZSBwaHlz aWNhbCBQQVNJRHMgY2FuJ3Qgc3VwcG9ydCBhICdzZW5kIGFsbCBQQVNJRHMgdG8gdGhlDQo+IGd1 ZXN0JyBtb2RlbCwgb3IgZXZlbiBhICd0aGUgZ3Vlc3QgZ2V0cyB0byBwaWNrIHRoZSBQQVNJRCcg b3B0aW9uLg0KPiANCg0KeWVzLCB3aXRoIG1kZXYgYWJvdmUgaXMgaW5ldml0YWJsZS4gSSBndWVz cyBBUk0gbWF5IG5lZWQgc29tZQ0Kc2ltaWxhciBleHRlbnNpb24gaW4gdGhlaXIgU01NVSBhcyB3 aGF0IFZULWQgcHJvdmlkZSBmb3IgbWRldg0KdXNhZ2UsIGUuZy4gYXQgbGVhc3Qgbm90IG1hbmRh dGluZyBQQVNJRCB0YWJsZSBpbiBHUEEgc3BhY2UuIEJ1dA0KYmVmb3JlIHRoYXQgdGhleSBtYXkg c3RpbGwgZXhwZWN0IGEgd2F5IHRvIGRlbGVnYXRlIHRoZSB3aG9sZQ0KUEFTSUQgc3BhY2UgcGVy IFJJRCB0byB0aGUgZ3Vlc3QuDQoNClJlYWxseSBsb3RzIG9mIHN1YnRsZSBkaWZmZXJlbmNlcyB0 byBiZSBnZW5lcmFsaXplZC4uLg0KDQpUaGFua3MNCktldmluDQo=