From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mail.toke.dk (Postfix) with ESMTPS id 5DA3A8E827A for ; Thu, 18 Nov 2021 15:57:33 +0100 (CET) Authentication-Results: mail.toke.dk; dkim=pass (1024-bit key) header.d=intel.onmicrosoft.com header.i=@intel.onmicrosoft.com header.b=C+hclKVe X-IronPort-AV: E=McAfee;i="6200,9189,10171"; a="297615746" X-IronPort-AV: E=Sophos;i="5.87,245,1631602800"; d="scan'208";a="297615746" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Nov 2021 06:57:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,245,1631602800"; d="scan'208";a="495409580" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga007.jf.intel.com with ESMTP; 18 Nov 2021 06:57:30 -0800 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 18 Nov 2021 06:57:30 -0800 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 18 Nov 2021 06:57:29 -0800 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Thu, 18 Nov 2021 06:57:29 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.175) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Thu, 18 Nov 2021 06:57:28 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fqG6s2sawtcQFzUxpknikEmZgFz0WfMYZSMQgUtdzdjcQgg61GGpNLf9B+TJfTnPdGdkgv78TJydcd9wPJE0DYssv+nZsnnZCuDDUu4UFbPKxOtAjvS3oceFqgzk4vva2aghydJYZSxQjGJR0ceA2rXKoGflRgR/GxnwWNBTd0UpEfMY7BiPE4KOUq6CNecCaPZVH+p8ms0z2Xx3IcGbqyH8zZJ/w0RuiXGw3PsDmXsBbS/miDReXs1jV5tGIZkL0Zh2tBoHlfsFMxo+DQ7/h+5mQTGv/X3r7mlkW0fyEs2MDv2N4CUt32nylndpVaTQDjB7eHw7J0rmIPZR1z4JPw== 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=4SoGZLbzGxQeTUsL7Za3IoW77PLxpyHyK61zMtzdoPY=; b=dIFtKcTUkSWIwXbjuqUW3vVWFKRC3bwse2gaZfSUlIvxABURWApqmcZGiAHCuDsWCmBO2PYW7xIavIh6P3fdk7UM7p1Zs5A/yP1mB+hcwf+93VG0PhkDA1j9sQ2AV03tQYTS3+KlGXimOXa0QOT1lP2jSqPQXxEil2Azdkmbn+VOvsycAga99lwjoj916FwA9Vs3/0AW7CYpR0qj92yMpADcinGRfT490gPBIQnpjej/6gstnA899q/N3lfET30JeIq2voE+CHdG63pw1r3XSM2xS/UeCjMIIoiFVBr6gf/0gGYQ6/xJ+Ie4zyUF12s+csFlwFMFoL3M7eaBBlJX9g== 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=4SoGZLbzGxQeTUsL7Za3IoW77PLxpyHyK61zMtzdoPY=; b=C+hclKVePm+KHZiwHbLgkAsILODQhANb/e6vzmFaeeYNDOA5WzBul/nrEyo0RsBWao96pC9IIg2DJoMCs0LBgCqlVST4BfDzPUUQAsElLmBdJgorGxRSKlQFhvjMBGHvPRYet5mzt1OIZgTed8YsW9JIfxPwn2P1bvXuhAPzt54= Received: from MW3PR11MB4602.namprd11.prod.outlook.com (2603:10b6:303:52::19) by MWHPR11MB1742.namprd11.prod.outlook.com (2603:10b6:300:113::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.27; Thu, 18 Nov 2021 14:57:03 +0000 Received: from MW3PR11MB4602.namprd11.prod.outlook.com ([fe80::4f9:ec4:ba79:1cfa]) by MW3PR11MB4602.namprd11.prod.outlook.com ([fe80::4f9:ec4:ba79:1cfa%6]) with mapi id 15.20.4690.027; Thu, 18 Nov 2021 14:57:02 +0000 From: "Karlsson, Magnus" To: Jesper Dangaard Brouer , =?utf-8?B?VG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2Vu?= , "Desouza, Ederson" Thread-Topic: [xdp-hints] Re: XDP-hints via local BTF info Thread-Index: AQHX3AVBvX+d1rp2wUWfQ5M3iSKXbawI4TqwgAB4XYCAAAMpoA== Date: Thu, 18 Nov 2021 14:57:02 +0000 Message-ID: References: <875ysqflg1.fsf@toke.dk> In-Reply-To: Accept-Language: sv-SE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiN2JhMjAxYzMtYWVhMy00ZGY5LWFmOTQtNjM0NzhmMTc1N2Q4IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiYlNsek4xeG5oNlhJaW80NHBpUzBjNUUwdm1JclwvOU1DckFXaGFzWXVNTHlyMjNJVXpVTXU4ZmIrbm10ZkpkNTQifQ== dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 x-ctpclassification: CTP_NT authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 115ca4cc-2ab3-4a2f-d484-08d9aaa3ae41 x-ms-traffictypediagnostic: MWHPR11MB1742: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: tte84hzR5qRsUMDtzP7PgCZFFiw+sGgplnJDeZ/Wp+Uiyugg5uAifZmk7Dms1ci39yzf/X+/3zzREkJu8dkSfCQUvNYAZ2nrByQ7gIc4EZe8TBPVvDgUA1ITiX/b5Iq2Q2B08KJ6fFMrPVBC56nK9ZjyhIkweXcyXIirdkMa1Y2sMec2cDka0EySrIIAdR/cJxUOGtC7Ji0M2N8JSAfZmlyLsaonSLAv3sIjpOJGU6tGAUcCN2sNgIw67BcIeovKUc9gCVg+whS9j6HcU5Vb2AAO0/pgKf7V18Db9Ab1XKfdHkNfFORniYMLGp0E+ulh3d1n00b0vo0z0+6592EDRA4KRRvXoVaFTFFlRPiX3jIgQBGyzLUIrLZCIfwZIkPqseDVATZJ4ttLMBu4w9k6MEbuDnw5dXAXwN/klIJfmtRfMeZLthLVTBguUFHTSLC16rNrQW2j5kfNv6qXt+iObkelIDL0Qb21F5n5p2WIsY2EGeL4hfHaxLB4pnXs/Riqo8qoewKrA7McFWVX2iKC4K9+nwOnmB+AOtRI4ZIckp5gYgBaERl+USvMTNCu6raMfnR1ehDaktZ3OTZbbD3/A78WYr9p/LB9Ej1nmsypWIC7aKkGsQ8xahIDoVAzvOA14kl4OKS5d61+8zsHAA1fq6U/KxIaz/eM6pJRV5dySDh9TuQrARBUMXNYVLAvZjCLLZAvbDsm82SC8tIfGdWfMdafhR0Y5JWfYTcHjbIVPM8IU2j6bnWHsA6Omcb2hU5SIzurcnIn6FGOF5LnkBbd9X12H7ZO5CJeLI1Oyu7cBcOJ4obgy2d0Q2LS9EHTpHlyQjvcJDnVUgLlJzaxGawpKQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR11MB4602.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8936002)(82960400001)(30864003)(6636002)(107886003)(38070700005)(71200400001)(76116006)(26005)(66556008)(64756008)(53546011)(66446008)(33656002)(6506007)(186003)(66476007)(66946007)(4326008)(66574015)(122000001)(55016002)(86362001)(2906002)(9686003)(5660300002)(52536014)(83380400001)(7696005)(38100700002)(8676002)(54906003)(316002)(110136005)(966005)(508600001)(7744002)(21314003)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OC91VWc1ZUNxNy93M3E0T0ZjTTRBNFBsSXB4YmlKeGY3YUJ6SlRLdUF1QUd5?= =?utf-8?B?ZlVHL29HbyswcmtDd1VRa1dBNXlFNmxyREtXeUQrdWJ4RWRHQXN6aUZKQm9i?= =?utf-8?B?WURuZWF6Vm9UcjZPTWZ1YU9qVGtURG5JRTVLeE5odWxRc0RVeGEyTlgxMlRk?= =?utf-8?B?RGVJWE5LQWR5eEV5SEl1VlFCN1VLRDNsRHdBUTdWNVdDSEZMdEV6TkNIc0FG?= =?utf-8?B?TitqdXg2SmtFQXl4bjBBQTRDTmRHZWtOWTN5UWVOd0xnYW5WZmdSaXR4OGd3?= =?utf-8?B?T0R3WEw5cmhUa0tURXJpK3Q4OEYrYWdWQjJleXlMZzZCYzk4dXpwSWUxZnFL?= =?utf-8?B?Q0hWNHZPSVNCaUZZOGNBdjVxY0FhdDJDcWlGWXd5YkxNWEQ3d0ZTa1JpYnhI?= =?utf-8?B?dUtUUDZzOHgzckgrT2w3MDJ6S0pSTmppTjVtSG1zZnl1UXNZcTZqK1o0dWdQ?= =?utf-8?B?SWluWmtzeDRYZlE2Q0cvTWNnSlBtNk5EMDRpRUlyd3EwVDBiajN6ajd6VGcw?= =?utf-8?B?aWlDN0VCRHZEQ3l2L1hWRjRVYmc0ZnY4UE5reG1oMWZVYWxOc0txc01ZSzg5?= =?utf-8?B?VkJOaW95UnB6MnJYZE5yaFRsemhNNlBLUjdLdUZ1YmdXMGIxSUE0dGlsdTJq?= =?utf-8?B?WDZtbEZtZGt3OVRmR3dPZ3VXUUQzYWxhdXZseHFuVlEyakRpVm1VN0ZjTUF1?= =?utf-8?B?WUs4RjJkY1h2alZXdGJoamZDS2pmVDM3dm5tbXNtR3AxR1JkbDRtbm5vTytR?= =?utf-8?B?d0tPOWNhM0xKUlFMdXQ2NzNUSnVRS0paOWZXa2hDd1RLTDJTVnJORnY2MzMy?= =?utf-8?B?cmpEZWc3Qk1RRlIwT3FNcFE0T3NaTURPcnU3YnJEQUdQZGZMZm45OStYMTZD?= =?utf-8?B?S2xZSW53NXY2cjE1bmxMK1dxQWtCNm8rYVAzTHBQdVdULzdud0xDa3QrTkJJ?= =?utf-8?B?Tk5lR21nN3FKcGlVZ1NiekpHVVF0V0VwSXdyaHBFYjBlekxuWCt2d2hBaVJY?= =?utf-8?B?a1JKUEQwaCs4ekVXczBiS2ZxLzZ3Z001UjdEYytNTCtFQ250dUhyaVdsU3ls?= =?utf-8?B?ZGVpU245OW9yOUFITmJ3MnJtU1ErYzg4OThJcXE5YmUrSjhqWDA4NUxNTm52?= =?utf-8?B?WXdQMzZydlltelpYSXg5eVNGNllVbU1WY2poL295WU9acHJqdS9XeDA1OWpo?= =?utf-8?B?T1B3bEhZNEFScktrWGExK3hVc2d3a2YwNmxNZlM3RDlyUVFGZlBxSDJRejZr?= =?utf-8?B?RXBQMml5emRkTlNINUFRL3R1TWNxRzVjMytaWEdNWXdQN1dvdEhKT0RJWE1D?= =?utf-8?B?NlF2QVVvMnVKWVRyMStSY3RXdlNpbEkwdnJHSGhucDJQREJvUXlrTEo0MS9W?= =?utf-8?B?YzJTL3VINVZuOFFwdEM2RDJYREtkbkRZMGcyZDZFcmpaeFR5aXVwNTk5MUpO?= =?utf-8?B?K2FOQnAwWEJBM2IyQy82RGVocFl2QytNVGJ3WnVxT2pQK2c5Z09FRnZlTnB2?= =?utf-8?B?VjA3cFdEMmh0N2pnMGVOOVFMZkxSRk1pb3ZUMDh4Vkc2U1k1YUtpWFdDQytw?= =?utf-8?B?QVlpLzJVT3E4OUN2TW8vQVNXVUpITklYekdwNGNwL3Q3OU5KeFJwYitQQ3dQ?= =?utf-8?B?NUJKSGVuV052b2pIbWd0QkltV1l2eG1ORTVuUWdTUDZXR0VIUXhFNXJSRzNO?= =?utf-8?B?bnVkUnhUREhkZHEyQnBrTFczeDdIVDNWRG9EZXB0UndjZDh5WkdzNGxtdmNn?= =?utf-8?B?S2daNGg2YU9JZnM5Q3VJTStSblNEenNFdkV1K1p3OVp3cUpndmNWUTJ2dWsw?= =?utf-8?B?alZodkVRbEJZKzdqbllKLzkvSEdDNWYvdUY4Z0w3a1hyR1pkUTlaY3RWSFkw?= =?utf-8?B?VEVjMnozZFpvdmxvWHp1RkV6cE9kcklJV3lUdlBsYmo3QzZUWS92ZllZSWNE?= =?utf-8?B?MUI5RXBSK1UzbWRKRjA3M0VqNUVhUDJOTFVHL3FtZUJBeGtyZ3dpbTVXcEhs?= =?utf-8?B?dlYvenkyd09qWTNWREN5OHVURXRDb3NmeFlENXVWd0pIR2hGYnNaemJpUG0z?= =?utf-8?B?MC9RaVJ5UzNzbGVUVUxpZ0ZXVnhCUXhSQlNJa2RhQStxZys1T2kxa0FRUVJS?= =?utf-8?B?b1ZOT1Z5NmdTcUhhRFBwNUJ2WG15Y3NnYmV2OGt4VlFUVkpvTkVvRXYwSG0v?= =?utf-8?B?eTRXSmJTNEdsMnIrU1JKcDN4NjdjL3R3RE9ITDYxWDlhK21yZVhTTUVnYWtN?= =?utf-8?B?OHg5TGdQTjY0QlZRVFVTVFhHZktnPT0=?= 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: MW3PR11MB4602.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 115ca4cc-2ab3-4a2f-d484-08d9aaa3ae41 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Nov 2021 14:57:02.8332 (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: 7BdGwp7H90TUTRjb3MB9FSJSl77MHer1WwdXS9fIs1sNA7fuBLNObrVP2Jx3sKeQwzaAg4EzzbuJ4m95DdQtlJgB0m3ekB95FNvXQUef61g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1742 X-OriginatorOrg: intel.com X-MailFrom: magnus.karlsson@intel.com X-Mailman-Rule-Hits: max-size X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; news-moderation; no-subject; digests; suspicious-header Message-ID-Hash: Q3DXYWRUNTYCVY7OROLVTHBZ3XKNYUW7 X-Message-ID-Hash: Q3DXYWRUNTYCVY7OROLVTHBZ3XKNYUW7 X-Mailman-Approved-At: Thu, 18 Nov 2021 16:16:40 +0100 CC: "brouer@redhat.com" , "xdp-hints@xdp-project.net" , Eelco Chaudron , Andrii Nakryiko , "Fijalkowski, Maciej" , "Burakov, Anatoly" X-Mailman-Version: 3.3.4 Precedence: list Subject: [xdp-hints] Re: XDP-hints via local BTF info List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSmVzcGVyIERhbmdhYXJk IEJyb3VlciA8amJyb3VlckByZWRoYXQuY29tPg0KPiBTZW50OiBUaHVyc2RheSwgTm92ZW1iZXIg MTgsIDIwMjEgMzozMCBQTQ0KPiBUbzogS2FybHNzb24sIE1hZ251cyA8bWFnbnVzLmthcmxzc29u QGludGVsLmNvbT47IFRva2UgSMO4aWxhbmQtDQo+IErDuHJnZW5zZW4gPHRva2VAcmVkaGF0LmNv bT47IERlc291emEsIEVkZXJzb24NCj4gPGVkZXJzb24uZGVzb3V6YUBpbnRlbC5jb20+DQo+IENj OiBicm91ZXJAcmVkaGF0LmNvbTsgeGRwLWhpbnRzQHhkcC1wcm9qZWN0Lm5ldDsgRWVsY28gQ2hh dWRyb24NCj4gPGVjaGF1ZHJvQHJlZGhhdC5jb20+OyBBbmRyaWkgTmFrcnlpa28gPGFuZHJpaUBr ZXJuZWwub3JnPjsgRmlqYWxrb3dza2ksDQo+IE1hY2llaiA8bWFjaWVqLmZpamFsa293c2tpQGlu dGVsLmNvbT47IEJ1cmFrb3YsIEFuYXRvbHkNCj4gPGFuYXRvbHkuYnVyYWtvdkBpbnRlbC5jb20+ DQo+IFN1YmplY3Q6IFJlOiBbeGRwLWhpbnRzXSBSZTogWERQLWhpbnRzIHZpYSBsb2NhbCBCVEYg aW5mbw0KPiANCj4gDQo+IA0KPiBPbiAxOC8xMS8yMDIxIDA5LjA1LCBLYXJsc3NvbiwgTWFnbnVz IHdyb3RlOg0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206 IFRva2UgSMO4aWxhbmQtSsO4cmdlbnNlbiA8dG9rZUByZWRoYXQuY29tPg0KPiA+PiBTZW50OiBX ZWRuZXNkYXksIE5vdmVtYmVyIDE3LCAyMDIxIDExOjQ4IFBNDQo+ID4+IFRvOiBLYXJsc3Nvbiwg TWFnbnVzIDxtYWdudXMua2FybHNzb25AaW50ZWwuY29tPjsgSmVzcGVyIERhbmdhYXJkDQo+ID4+ IEJyb3VlciA8amJyb3VlckByZWRoYXQuY29tPjsgRGVzb3V6YSwgRWRlcnNvbg0KPiA+PiA8ZWRl cnNvbi5kZXNvdXphQGludGVsLmNvbT4NCj4gPj4gQ2M6IGJyb3VlckByZWRoYXQuY29tOyB4ZHAt aGludHNAeGRwLXByb2plY3QubmV0OyBFZWxjbyBDaGF1ZHJvbg0KPiA+PiA8ZWNoYXVkcm9AcmVk aGF0LmNvbT47IEFuZHJpaSBOYWtyeWlrbyA8YW5kcmlpQGtlcm5lbC5vcmc+Ow0KPiA+PiBGaWph bGtvd3NraSwgTWFjaWVqIDxtYWNpZWouZmlqYWxrb3dza2lAaW50ZWwuY29tPjsgQnVyYWtvdiwg QW5hdG9seQ0KPiA+PiA8YW5hdG9seS5idXJha292QGludGVsLmNvbT4NCj4gPj4gU3ViamVjdDog UmU6IFt4ZHAtaGludHNdIFJlOiBYRFAtaGludHMgdmlhIGxvY2FsIEJURiBpbmZvDQo+ID4+DQo+ ID4+ICJLYXJsc3NvbiwgTWFnbnVzIiA8bWFnbnVzLmthcmxzc29uQGludGVsLmNvbT4gd3JpdGVz Og0KPiA+Pg0KPiA+Pj4gVG9nZXRoZXIgd2l0aCBNYWNpZWogYW5kIEFuYXRvbHksIEkgaGF2ZSBi ZWVuIHRveWluZyB3aXRoIGhvdyB0bw0KPiA+Pj4gYWNjb21wbGlzaCB0aGlzLCBidXQgaXQgaXMg ZWFybHkgZGF5cyBzbyB3YXJuaW5nIGZvciBzb21lIHNlcmlvdXMNCj4gPj4+IGhhbmR3YXZpbmcu IFdpbGwgcHJvZHVjZSBzb21lIGNvZGUgdG8gc2VlIGlmIGl0IGlzIHBvc3NpYmxlIGF0IGFsbC4N Cj4gPj4+IE9uZSBkcmF3YmFjayB3aXRoIGhhdmluZyBpdCBjb21wbGV0ZWx5IGZsZXhpYmxlIGFu ZCBsZXR0aW5nDQo+ID4+PiB1c2VyLXNwYWNlIGRlY2lkZSBpcyB0aGUgY29tcGxleGl0eSBpbXBs ZW1lbnRpbmcgdGhpcyBpbiB0aGUNCj4gPj4+IGRyaXZlci9rZXJuZWwuIEJ1dCBpcyB0aGlzIG5v dCB3aHkgd2UgaGF2ZSBlQlBGIGZvciBpbiB0aGUgZmlyc3QNCj4gPj4+IHBsYWNlPyBNYXliZSBp dCBjYW4gY29tZSB0byB0aGUgcmVzY3VlIGhlcmUuDQo+ID4+DQo+ID4+IEkgdGhpbmsgdGhlcmUg YXJlIGEgY291cGxlIG9mIGRpc3RpbmN0aW9ucyB3ZSBuZWVkIHRvIG1ha2UsIHdoaWNoDQo+ID4+ IHlvdXIgImhhbmR3YXZpbmciIGdsb3NzZXMgb3ZlciBhIGxpdHRsZSBiaXQgOikNCj4gPj4NCj4g Pj4gRmlyc3QsIHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0d28gY2FzZXMgaGVyZTog aG93IHRvIHdvcmsNCj4gPj4gd2l0aCBleGlzdGluZyBoYXJkd2FyZSBhbmQgZHJpdmVycyBhbmQg dGhlaXIgbWV0YWRhdGENCj4gPj4gaW1wbGVtZW50YXRpb25zLCBhbmQgaG93IHRvIHdvcmsgd2l0 aCBmdXR1cmUgZGV2aWNlcyB0aGF0IHdpbGwNCj4gPj4gKHByZXN1bWFibHkpIGJlIGNvbXBsZXRl bHkgZmxleGlibGUgYW5kL29yIHByb2dyYW1tYWJsZSB0byBwcm92aWRlDQo+ID4+IGFueSBtZXRh ZGF0YSBjb25maWd1cmF0aW9uIGRpcmVjdGx5IGZyb20gdGhlIGhhcmR3YXJlLiBUaGUgWERQIGhp bnRzDQo+IHNjaGVtZSBvYnZpb3VzbHkgbmVlZHMgdG8gd29yayB3aXRoIGJvdGguDQo+ID4NCj4g PiBUaGFua3MgVG9rZSBmb3IgcHJvdmlkaW5nIGZlZWRiYWNrIG9uIHRoaXMuIEp1c3QgaGFkIHRv IGdldCB0aGlzIHN0dWZmICJvZmYNCj4gbXkgY2hlc3QiIPCfmIkuIEkgd2FzIHN0dWNrIGluIHRo ZSB6ZXJvLWNvcHkgd29ybGQgd2hlcmUgeW91IGNhbiBtb2RpZnkNCj4gZHJpdmVycywgYnV0IG9m IGNvdXJzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyICJvbGRlciIgZHJpdmVycyB3aXRoIFhEUCBzdXBw b3J0Lg0KPiBXaXRoIHRoYXQgaW4gbWluZCwgSSBkbyBhZ3JlZSB3aXRoIG1vc3Qgb2YgeW91ciBj b21tZW50cy4gVGhlcmUgYXJlIHNvbWUNCj4gcXVlc3Rpb25zIGFuZCB0aG91Z2h0cyBpbnRlcnNw ZXJzZWQgYmVsb3cgYW5kIGEgc3VnZ2VzdGlvbiBmb3IgaG93IHRvIGdvDQo+IGZvcndhcmQgYXQg dGhlIGVuZC4NCj4gPg0KPiANCj4gSSBkbyBhcHByaWNpYXRlIHRoYXQgeW91IHdhbnQgdG8gZGlz Y3VzcyBkcml2ZXIgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGlzIGVtYWlsDQo+IGFuZCBleGFtcGxl IHByb2dyYW1bMV0gd2FzIHRhcmdldHRlZCBhdCBhIG11Y2ggc21hbGxlciBzdGVwLg0KPiANCj4g VGhlIG1haW4gcHVycG9zZSB3YXMgdG8gc2hvdy13aXRoLWNvZGUgdGhhdCBkZWNvZGluZyBCVEYg YW5kIHVzaW5nIGl0DQo+IGZyb20gdXNlcnNwYWNlIGlzIG5vdCBkaWZmaWN1bHQuICBBbmQgaXRl cmF0ZSBvbiB0aGUgQVBJIGEgYml0Lg0KPiANCj4gICBbMV0NCj4gaHR0cHM6Ly9naXRodWIuY29t L3hkcC1wcm9qZWN0L2JwZi1leGFtcGxlcy90cmVlL21hc3Rlci9BRl9YRFAtDQo+IGludGVyYWN0 aW9uDQo+IA0KPiBBcyBUb2tlIG1lbnRpb25lZCwgSSBhbHNvIGJlbGlldmUgaXQgaXMgb3J0aG9n b25hbC4NCj4gSSB0aGluayB3ZSBhbGwgYWdyZWUgdGhhdCBCVEYgd2lsbCBiZSB0aGUgd2F5IHRo ZSBYRFAtaGludHMgd2lsbCBiZSAiZGVzY3JpYmVkIiwNCj4gYW5kIHdlIG5lZWQgdG8gcHJvcG9z ZSBBUElzL2NvZGUgdGhhdCBkb2VzIHRoaXMgZGVjb2RpbmcgZS5nLiBpbiB1c2Vyc3BhY2UuDQo+ IChCdXQgSSBhbHNvIHdhbnQgdGhpbmdzIGxpa2UgY3B1bWFwIGtlcm5lbCBzaWRlIFhEUC1wcm9n IHRvIHVuZGVyc3RhbmQgdGhpcykuDQo+IA0KPiBCdXQgSSdtIHRha2luZyB0aGUgYmFpdCwgYW5k IHdpbGwgZGlzY3VzcyB3aXRoIHlvdSBiZWxvdy4uLg0KDQpHb29kIPCfmIoNCg0KPiANCj4gPj4g U2Vjb25kbHksIHdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9u IGludGVyZmFjZQ0KPiA+PiBhbmQgdGhlIG1ldGFkYXRhIGNvbnN1bXB0aW9uIGZyb20gd2l0aGlu IHRoZSBkYXRhIHBhdGguIEkgdGhpbmsgdGhvc2UNCj4gPj4gc2hvdWxkIGJlIHNlcGFyYXRlIGlu dGVyZmFjZXM7IGluIHBhcnRpY3VsYXIsIEkgZG9uJ3QgdGhpbmsgbG9hZGluZw0KPiA+PiBhbiBY RFAgcHJvZ3JhbSBpbiBpdHNlbGYgc2hvdWxkIGhhdmUgdGhlIHNpZGUgZWZmZWN0IG9mIHJlY29u ZmlndXJpbmcNCj4gPj4gdGhlIGhhcmR3YXJlIG1ldGFkYXRhIGZvcm1hdC4gUmF0aGVyLCB0aGUg cmVjb25maWd1cmF0aW9uIHNob3VsZCBiZSBhDQo+ID4+IHNlcGFyYXRlLCBleHBsaWNpdCBzdGVw IHVzaW5nIHdoYXRldmVyIEFQSSB3ZSBjYW4gZW5kIHVwIGFncmVlaW5nIG9uDQo+ID4+IChldGh0 b29sIG9yIHJ0bmV0bGluayBjb21lIHRvIG1pbmQgYXMgb2J2aW91cyBjb250ZW5kZXJzKS4NCj4g DQo+IEkgYWdyZWUgd2l0aCBUb2tlLCB0aGF0IHdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVu IHRoZSBjb25maWd1cmF0aW9uDQo+IGludGVyZmFjZSBhbmQgbWV0YWRhdGEgY29uc3VtcHRpb24u DQo+IA0KPiBEbyBub3RpY2UgdGhhdCB3ZSBBTFJFQURZIGhhdmUgZXhpc3RpbmcgY29uZmlnIGlu dGVyZmFjZXMgdGhhdCBlbmFibGVzIGFuZA0KPiBkaXNhYmxlZCBIVyBoaW50cyBwcm92aWRlZCBi eSB0aGUgaGFyZHdhcmUuIEhvdyB0byBoYW5kbGUgdGhpcz8NCj4gDQo+IEUuZy4gVGhlIEhXIFJY LXRpbWVzdGFtcCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCB3aGVuIGNhbGxpbmcgdGNwZHVtcCwN Cj4gYW5kIHdpbGwgYmUgZGlzYWJsZWQgYWdhaW4gd2hlbiB0Y3BkdW1wIHN0b3AgYWdhaW4uDQo+ IFRodXMsIHRoaXMgYWN0aW9uIChlbmFibGUgSFctdGltZXN0YW1wKSB3aWxsIGxpa2VseSBjaGFu Z2Ugd2hhdCBYRFAtaGludHMNCj4gc3RydWN0dXJlIHRoYXQgZHJpdmVyIHVzZXMuDQo+IFdoYXQg ZG8geW91IHRoaW5rIHRoZSBhY3Rpb24gc2hvdWxkIGJlPw0KDQpEbyBub3Qga25vdy4gSG93IGRv IHlvdSB0aGluayB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBw cm9ncmFtcyBydW5uaW5nIG9uIHRoaXMgbmV0ZGV2IHdoZW4gdGhpcyBoYXBwZW5zPw0KDQo+IE15 IG9waW5pb24gaXMgdG8gc2ltcGx5IHVzZSB0aGUgZXhpc3Rpbmcga2VybmVsIEFQSSB0byBlbmFi bGUgdGhlc2UgSFctDQo+IHRpbWVzdGFtcHMuICBUb2RheSB0aGUgU0tCIGlzIHVwZGF0ZWQgd2l0 aCB0aGUgSFctdGltZXN0YW1wLCBhbmQgaW4gdGhlDQo+IGZ1dHVyZSBJIHdvdWxkIGxpa2UgdGhl IFNLQiB0byBiZSBjcmVhdGVkIGxhdGVyIChpbiBuZXQtY29yZSkgYW5kIGdldCB0aGlzIEhXLQ0K PiB0aW1lc3RhbXAgdmlhIGFuIEJQRi1wcm9nIHRoYXQgZXh0cmFjdCB0aGlzIGZyb20gdGhlIG1l dGFkYXRhIGFyZWEuIChIaW50DQo+IHRvZGF5IG1ldGFkYXRhIGFyZWEgYWN0dWFsbHkgc3Vydml2 ZXMgd2l0aCB0aGUgU0tCLCBhbmQgY2FuIGJlIGFjY2Vzc2VkIGJ5DQo+IGUuZy4gVEMtQlBGKS4N Cj4gVGh1cywgSSBkbyB3YW50IHRoaXMgdG8gd29yayB3aXRoIG91ciBleGlzdGluZyBuZXRzdGFj ayBjb25maWcgaW50ZXJmYWNlcy4NCj4gDQo+IA0KPiA+PiBIb3dldmVyLCB0aGUNCj4gPj4gKmZv cm1hdCogZm9yIHRoaXMgY29uZmlndXJhdGlvbiBjb3VsZCB2ZXJ5IHdlbGwgYmUgQlRGLWJhc2Vk LCBzbw0KPiA+PiB1c2Vyc3BhY2UgY2FuIGdldCB3aGF0ZXZlciBmb3JtYXQgaXQgd2FudHMsIGFz c3VtaW5nIHRoZSBoYXJkd2FyZQ0KPiBzdXBwb3J0cyBpdC4NCj4gPj4NCj4gPj4gU28sIHNheSB3 ZSBoYXZlIHRoaXMgZmFuY3kgcHJvZ3JhbW1hYmxlIGhhcmR3YXJlLCBhbmQgd2Ugd3JpdGUgYQ0K PiA+PiBwcm9ncmFtIHdpdGggYSBzdHJ1Y3QgZGVmaW5pdGlvbiBsaWtlOg0KPiA+Pg0KPiA+PiBz dHJ1Y3QgbXlfbWV0YV9mb3JtYXQgew0KPiA+PiAgICAgICAgIF9fdTY0IHJ4X3RpbWVzdGFtcDsN Cj4gPj4gICAgICAgICBfX3U2NCBtYWdpY19jb2xvdXJfb2ZfcGFja2V0Ow0KPiA+PiAgICAgICAg IF9fdTMyIGJ0Zl9pZDsNCj4gPj4gfTsNCj4gPj4NCj4gPj4gYW5kIGZyb20gdXNlcnNwYWNlIHdl IGNhbiB0aGVuIGRvOg0KPiA+Pg0KPiA+PiBkZXZfbWV0YWRhdGFfY29uZmlndXJlKGlmaW5kZXgs IEJURl9PRl9TVFJVQ1QobXlfbWV0YV9mb3JtYXQpKTsNCj4gPj4NCj4gPj4gd2hpY2ggd2lsbCBw YXNzIHRoZSBCVEYtZm9ybWF0IHN0cnVjdCB0byB0aGUga2VybmVsIGFuZCBjb25maWd1cmUgdGhl DQo+ID4+IGhhcmR3YXJlIHRvIHdyaXRlIHRob3NlIGZpZWxkcy4gQWZ0ZXIgdGhpcywgdGhlIFhE UCBwcm9ncmFtIGNhbiBqdXN0IGRvOg0KPiA+Pg0KPiA+PiBpbnQgbXlfeGRwX3Byb2coc3RydWN0 IHhkcF9idWZmICpjdHgpIHsNCj4gPj4gICAgc3RydWN0IG15X21ldGFfZm9ybWF0ICptZXRhID0g Y3R4LT5kYXRhX21ldGE7DQo+ID4+DQo+ID4+ICAgIGRvX3NvbWV0aGluZ193aXRoKG1ldGEtPm1h Z2ljX2NvbG91cl9vZl9wYWNrZXQpOw0KPiA+PiAgICByZXR1cm4gWERQX1hYWDsNCj4gPj4gfQ0K PiA+Pg0KPiA+PiBhbmQgaXQgd2lsbCBqdXN0IHdvcmsuIFNhbWUgdGhpbmcgZnJvbSB1c2Vyc3Bh Y2UuDQo+ID4+DQo+ID4+IE9yIGl0IGNhbiBkZWZpbmUgYSBDTy1SRSBlbmFibGVkIHN0cnVjdCBs aWtlOg0KPiA+Pg0KPiA+PiBzdHJ1Y3QgbXlfbWV0YV9zdWJzZXQgew0KPiA+PiAgICAgICAgIF9f dTY0IG1hZ2ljX2NvbG91cl9vZl9wYWNrZXQ7IC8qIHdlIG9ubHkgY2FyZSBhYm91dCB0aGlzIGF0 dHINCj4gPj4gKi8gfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTsNCj4g Pj4NCj4gPj4gaW50IG15X3hkcF9wcm9nKHN0cnVjdCB4ZHBfYnVmZiAqY3R4KSB7DQo+ID4+ICAg IHN0cnVjdCBteV9tZXRhX3N1YnNldCAqbWV0YSA9IGN0eC0+ZGF0YV9tZXRhOw0KPiA+Pg0KPiA+ PiAgICBkb19zb21ldGhpbmdfd2l0aChtZXRhLT5tYWdpY19jb2xvdXJfb2ZfcGFja2V0KTsNCj4g Pj4gICAgcmV0dXJuIFhEUF9YWFg7DQo+ID4+IH0NCj4gPj4NCj4gPj4gYW5kIGxpYmJwZiB3aWxs IHJld3JpdGUgdGhlIGZpZWxkIGFjY2Vzc2VzIHVzaW5nIHRoZSBCVEYgaW5mb3JtYXRpb24sDQo+ ID4+IHJlLSBleHBvcnRlZCBmcm9tIHRoZSBrZXJuZWwgZnJvbSB3aGF0IHVzZXJzcGFjZSBwYXNz ZWQgaW4gd2hlbg0KPiBjb25maWd1cmluZy4NCj4gPj4NCj4gDQo+IEkndmUgYWxzbyBiZWVuIGRv d24gdGhlIHNhbWUgcmFiYml0IGhvbGUsIHdhbnRpbmcgdXNlcnNwYWNlIHRvIGRlZmluZSBCVEYN Cj4gbGF5b3V0IGFzIHRoZSBjb25maWcgaW50ZXJmYWNlIHRoYXQgSFcgd2lsbCBnZXQgcmVjb25m aWd1cmVkIHZpYS4NCj4gSSBuby1sb25nZXIgYmVsaWV2ZSBpbiB0aGlzIG1vZGUuICBPbmUgcmVh c29uIGlzIHRoZSBleGlzdGluZyBjb25maWcgaW50ZXJmYWNlcw0KPiB0aGF0IGVuYWJsZS9kaXNh YmxlIE5JQyBIVyBmZWF0dXJlcy4NCj4gDQo+IE9uZSB3YXkgd2UgY2FuIGFsbG93IHVzZXJzcGFj ZSB0byBkZWZpbmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBYRFAtaGludHMNCj4gc3RydWN0LCBub3Qg dGhlIEhXIGNvbmZpZywgaXMgdG8gYWRkIHRoaXMgbmV3IEJQRiAnaGludHMtaG9vaycuDQo+IFVz ZXJzcGFjZSBjYW4gcXVlcnkgdGhlIEJQRi1wcm9nIGxvYWRlZCBpbiB0aGUgJ2hpbnRzLWhvb2sn IGFuZCBzZWUgdGhhdA0KPiBCVEYgc3RydWN0cyBpdCBwcm92aWRlLg0KPiBUaGlzIGlzIHNpbWls YXIgdG8gdGhhdCBJIGRvIGZvciBBRl9YRFAgaW4gWzFdLCBhcyB0aGUgWERQIEJQRi1wcm9nIGRl ZmluZXMgdGhlDQo+IGxheW91dCBhbmQgQUZfWERQIHVzZXJzcGFjZSBxdWVyaWVzIHRoZSBCVEYg YXZhaWwuDQoNCkkgbGlrZSB0aGUgaGludHMtaG9vayBhcHByb2FjaC4gSG9wZWZ1bGx5IGl0IHdp bGwgZ2l2ZSB1cyBzb21lIG1vcmUgZnJlZWRvbSB0aGFuIGFjdHVhbGx5IGRvaW5nIHRoaXMgaW4g dGhlIFhEUCBwcm9ncmFtIGl0c2VsZi4NCg0KPiANCj4gPj4gV2l0aCB0aGUgYWJvdmUgaW4gbWlu ZCwgYSBmZXcgY29tbWVudHMgb24gc29tZSBvZiB5b3VyIG90aGVyIHBvaW50czoNCj4gPj4NCj4g Pj4+IFRoZSBrZXkgZmVhdHVyZSBoZXJlIGlzIHRoYXQgYnBmX3hkcF9nZXRfbWV0YWRhdGEoKSB3 aWxsIGFjdHVhbGx5IGdvDQo+ID4+PiBhbmQgZmV0Y2ggdGhpcyBmcm9tIHRoZSBIVywgYnkgY2Fs bGluZyBhIHNtYWxsIGNhbGxiYWNrIGZ1bmN0aW9uIGluDQo+ID4+PiB0aGUgZHJpdmVyIHRoYXQg cmVhZHMgZm9yIGV4YW1wbGUgcnhfdGltZXN0YW1wIGZyb20gdGhlIEhXIGFuZA0KPiA+Pj4gcmV0 dXJucyBpdCB0byB0aGUgWERQIHByb2dyYW0uIFRoaXMgaXMgY2xlYXJseSBub3QgcG9zc2libGUg dG9kYXkNCj4gPj4+IGFuZCB3b3VsZCByZXF1aXJlIG5ldyBwbHVtYmluZywgaWYgaXQgaXMgZXZl biBwb3NzaWJsZSB0byBpbXBsZW1lbnQNCj4gPj4+IHRoaXMuIEJ1dCBsZXQgdXMgbGVhdmUgYXNp ZGUgdGhlIGltcGxlbWVudGF0aW9uIGZvciBub3cgYW5kIGp1c3QNCj4gPj4+IGZvY3VzIG9uIHRo ZSBiZW5lZml0IHRoaXMgKG9yIHNvbWV0aGluZyBsaWtlIGl0KSBjb3VsZCBwcm92aWRlDQo+ID4+ PiBjb21wYXJlZCB0byBhIGtlcm5lbC1jZW50cmljIGFwcHJvYWNoLg0KPiA+Pg0KPiA+PiBUb29r IG1lIGEgd2hpbGUgdG8gdW5kZXJzdGFuZCB3aGF0IHlvdSBtZWFudCB3aXRoIHRoaXMsIGJ1dCBJ IHRoaW5rDQo+ID4+IGl0IGZpbmFsbHkgY2xpY2tlZCB3aXRoIHlvdXIgZXhhbXBsZSBiZWxvdywg c28gSSdsbCBsZWF2ZSB0aGUgY29tbWVudCB0bw0KPiB0aGVyZS4uLg0KPiA+Pg0KPiA+Pj4gKiBV c2VyLXNwYWNlIGNhbiBjb21wbGV0ZWx5IGNvbnRyb2wgd2hlcmUgdG8gcHV0IGRhdGEgYW5kIHdo YXQgaXQNCj4gPj4+IHB1dHMgdGhlcmUuIFRoaW5rIG9mIHByb2R1Y2luZyB0aGUgc3RydWN0dXJl IHlvdSB3YW50IGluIHVzZXIgc3BhY2UNCj4gPj4+IGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRv IGNvcHkgdGhpbmdzIGFyb3VuZC4gWW91IGNvdWxkIGZvciBleGFtcGxlDQo+ID4+PiBwcm9kdWNl IGEgRFBESyBtYnVmLCBvciB0aGUgVlBQLCBTdXJpa2F0YSBlcXVpdmFsZW50IGRpcmVjdGx5LiBX b3VsZA0KPiA+Pj4gc2F2ZSBhIGxvdCBvZiBjeWNsZXMuDQo+ID4+DQo+ID4+IEkgdGhpbmsgdGhh dCB1c2Vyc3BhY2UgYmVpbmcgaW4gY29udHJvbCBvZiB0aGUgbWV0YWRhdGEgZm9ybWF0IGlzIGEN Cj4gPj4gZ3JlYXQgZ29hbCB3ZSBzaG91bGQga2VlcCBpbiBtaW5kLCBhbmQgYXMgbWVudGlvbmVk IGFib3ZlIHdlIGNhbiBkbw0KPiA+PiB0aGF0IHdpdGggYSBCVEYtIGJhc2VkIGludGVyZmFjZS4N Cj4gPj4NCj4gPj4+ICogTm8gbmVlZCBmb3IgYSBtZXRhZGF0YSBlbmFibGVtZW50IGludGVyZmFj ZS4gZUJQRiBjb3VsZCBmaW5kIHRoaXMNCj4gPj4+IG91dCBieSBqdXN0IHBhcnNpbmcgdGhlIFhE UCBwcm9ncmFtIGFuZCBlbmFibGUgdGhlIHVzZWQgbWV0YWRhdGENCj4gPj4+IGZlYXR1cmVzIGlu IHRoZSBIVyBieSBjYWxsaW5nIGVuYWJsZS9kaXNhYmxlIG1ldGFkYXRhIGZ1bmN0aW9ucyBpbg0K PiA+Pj4gdGhlIGRyaXZlci4NCj4gPj4NCj4gPj4gQXMgbWVudGlvbmVkIGFib3ZlIEkgdGhpbmsg dGhpcyBpcyBhIG1pcy1mZWF0dXJlOiBjb25maWd1cmF0aW9uDQo+ID4+IHNob3VsZCBiZSBleHBs aWNpdCBhbmQgb3V0IG9mIGJhbmQsIG5vdCB0aWVkIHRvIHRoZSBkYXRhIHBhdGgNCj4gaW1wbGVt ZW50YXRpb24uDQo+ID4+DQo+IA0KPiBJIGFncmVlLiBBbHNvIGNvbnNpZGVyIHRoZSBleGlzdGlu ZyBjb25maWcgaW50ZXJmYWNlcyB0aGF0IHdlIGNhbm5vdCBpZ25vcmUNCj4gYW5kIGhhdmUgdG8g Y29sbGFib3JhdGUgd2l0aC4NCj4gDQo+ID4+PiAqIE5vIHJlYXNvbiB0byBleHBvc2UgQlRGcyB0 byB1c2VyLXNwYWNlLiBNYWtlcyBpdCBhIGxvdCBzaW1wbGVyLg0KPiA+Pj4gQWN0dWFsbHksIG5v IG5lZWQgdG8gdXNlIHRoZW0gaW4gdGhlIGRyaXZlciBlaXRoZXIuDQo+ID4+DQo+ID4+IEJURiBp cyBqdXN0IGEgaGFuZHkgZm9ybWF0IGZvciBkZXNjcmliaW5nIHRoZSBkYXRhIGxheW91dC4gVGhl cmUgaGFzDQo+ID4+IHRvIGJlDQo+ID4+ICpzb21lKiBmb3JtYXQgdG8gY29tbXVuaWNhdGUgdGhp cywgYW5kIGV4cG9zaW5nIHRoZSBCVEYgZm9ybWF0IHRvDQo+ID4+IHVzZXJzcGFjZSBpcyBqdXN0 IGEgd2F5IGZvciB0aGUga2VybmVsIHRvIHNheSAidGhpcyBpcyBob3cgdGhlDQo+ID4+IGhhcmR3 YXJlIGlzIGN1cnJlbnRseSBjb25maWd1cmVkIi4gSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB5b3Ug dGhpbmsNCj4gPj4gbm90IGhhdmluZyB0aGF0IG1ha2VzIHRoaW5ncyBzaW1wbGVyPw0KPiA+DQo+ ID4gSSBqdXN0IHRoaW5rIHRoYXQgYSBvbmUtbGluZXIgaW4gYSBwcm9ncmFtIGlzIHNpbXBsZXIg dGhhbiBhbiBlbnRyeSBpbiB0aGUgQlRGDQo+IGZvcm1hdC4gQnV0IHRoaXMgaXMgbW9vdCBhbnl3 YXkuIFlvdSBjYW5ub3QgdXNlIGEgcHJvZ3JhbSB0byBjb21tdW5pY2F0ZQ0KPiBmcm9tIHRoZSBr ZXJuZWwsIHNvIEJURiBpdCBpcy4NCj4gPg0KPiANCj4gQXMgSSBkZW1vbnN0cmF0ZWQgd2l0aCBj b2RlLCBpdCBpcyBub3QgdGhhdCBkaWZmaWN1bHQgdG8gZGVjb2RlIGFuZCByZWFkIEJURg0KPiBm cm9tIHVzZXJzcGFjZS4NCj4gKE1heWJlIGluIHRoZSBmdXR1cmUgR0NDIHdpbGwgZ2V0IGJldHRl ciBzdXBwb3J0IGFuZCBoaWRlIHBhcnQgb2YgdGhpcyBmb3IgdXMpDQoNCkl0IGlzIGRvYWJsZSBm b3Igc3VyZSwgYnV0IEkgc3RpbGwgdGhpbmsgaXQgaXMgbW9yZSBjb21wbGljYXRlZC4gQnV0IGRv ZXMgbm90IHJlYWxseSBtYXR0ZXIgYXMgd2UgaGF2ZSBhZ3JlZWQgb24gQlRGIGFzIHRoZSBpbnRl cmZhY2UuIFRob3VnaCB3aGVuIHdlIGltcGxlbWVudCB0aGlzIGluIGxpYnhkcCwgSSBkbyBub3Qg dGhpbmsgd2Ugc2hvdWxkIGV4cG9zZSBCVEZzIGF0IHRoYXQgbGV2ZWwgc2luY2UgdGhpcyBpcyBh biBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdCBpcyBhIGRvbuKAmXQgY2FyZSBmb3IgbW9zdCB1 c2Vycy4gVGhleSBhcmUgb25seSBpbnRlcmVzdGVkIGluIG1ldGFkYXRhL2hpbnRzLCBub3QgQlRG IGl0c2VsZi4gVGhlcmUgd2lsbCBiZSBwb3dlciB1c2VycyB0aG91Z2ggdGhhdCBpcyBnb2luZyB0 byBiZSBpbnRlcmVzdGVkIGluIEJURiBtYW5pcHVsYXRpb24sIHNvIHdlIG5lZWQgaW50ZXJmYWNl cyBsaWtlIHRoZSBvbmVzIHlvdSBoYXZlIHByb3Bvc2VkIHRvby4NCg0KPiA+Pj4gKiBXZSBkbyBu b3QgaGF2ZSB0byB1c2UgdGhlIG1ldGFkYXRhIGFyZWEgdW5sZXNzIGl0IGlzIGFjdHVhbGx5DQo+ ID4+PiBuZWVkZWQuIEluIHRoZSBjYXNlIG9mIEFGX1hEUCwgd2UgaGF2ZSB0byB3cml0ZSBpdCB0 aGVyZSwgYnV0IGxvY2FsDQo+ID4+PiB1c2UgaW4gWERQIGRvZXMgbm90LiBZb3Ugd291bGQgc2F2 ZSBvbmUgY2FjaGUgbWlzcyBwZXIgcGFja2V0IHJpZ2h0DQo+ID4+PiB0aGVyZS4NCj4gPj4NCj4g Pj4gUmVnYXJkbGVzcyBvZiBob3cgdGhlIGZvcm1hdCBpcyBjb25maWd1cmVkLCB3aHkgd291bGQg YW4gWERQIHByb2dyYW0NCj4gPj4gcmVhZCBpdCBpZiBpdCBkb2Vzbid0IG5lZWQgaXQ/DQo+ID4N Cj4gPiBUaGUgZHJpdmVyIHJlYWRzIHNvbWUgbWV0YWRhdGEgZW50cnkgZnJvbSBIVyBhbmQgcHV0 cyBpdCBpbiB0aGUgbWV0YWRhdGENCj4gc2VjdGlvbiBiZWZvcmUgdGhlIHBhY2tldC4gWERQIGlz IGludm9rZWQgYW5kIHJlYWRzIHRoaXMgZW50cnkgZnJvbSB0aGUNCj4gbWV0YWRhdGEgYXJlYSBh bmQgdXNlcyBpdCBpbiBzb21lIHdheS4gVGhpcyBnZW5lcmF0ZXMgYSBjYWNoZSBtaXNzIGZvciB0 aGUNCj4gd3JpdGUvcmVhZCB0byB0aGUgbWV0YWRhdGEgZW50cnkuIENvbXBhcmUgdGhpcyB0byB0 aGUgWERQIHByb2dyYW0gY2FsbHMgYQ0KPiBoZWxwZXIgdGhhdCByZWFkcyB0aGUgbWV0YWRhdGEg ZnJvbSBIVyBhbmQgcHV0cyBpdCBkaXJlY3RseSBpbnRvIGEgbG9jYWwNCj4gdmFyaWFibGUgaW4g dGhlIFhEUCBwcm9ncmFtLiBNZXRhZGF0YSBhcmVhIGlzIG5vdCB1c2VkLCBhbmQgd2Ugc2F2ZSBv bmUNCj4gY2FjaGUgbWlzcy4NCj4gPg0KPiANCj4gSG1tLi4uIEkgYmVsaWV2ZSB3ZSBjYW4gaGlk ZSB0aGlzIGNhY2hlIG1pc3MgdmlhIHByZWZldGNoaW5nLg0KDQpCZXR0ZXIgbm90IHRvIGhhdmUg dG8gdXNlIHByZWZldGNoZXMgYXQgYWxsIHNpbmNlIHRoZXkgYXJlIGhpZ2hseSB2YXJpYWJsZSBi ZXR3ZWVuIGRpZmZlcmVudCBDUFVzLg0KDQo+IEFuZCB0aGVyZSBhcmUgYWN0dWFsbHkgdHdvIHNp dHVhdGlvbnMgd2UgbmVlZCB0byBjb25zaWRlci4NCj4gDQo+ICAgMS4gU29mdHdhcmUgcGF0aDog bWV0YWRhdGEgaXMgd3JpdHRlbiB0byBieSBkcml2ZXIuDQo+IA0KPiAgIDIuIEhhcmR3YXJlIHBh dGg6IG1ldGFkYXRhIGlzIHdyaXR0ZW4gYnkgbmV3IE5JQyBoYXJkd2FyZS4NCj4gDQo+IENhc2Ug MSwgcGFja2V0IGRhdGEgc3RhcnRzIG9uIGEgY2FjaGUtbGluZSwgdGh1cyBtaW51cyBvZmZzZXQg d2lsbCBiZSBvbiBhDQo+IHNlcGFyYXRlIGNhY2hlLWxpbmUsIHRoYXQgaXMgbm90IGNvdmVyZWQg YnkgRE1BLW9wZXJhdGlvbi4gIFRodXMgdGhpcyBjYWNoZS0NCj4gbGluZSBjYW4gYmUgcHJlZmV0 Y2hlZCBhbmQgaXMgbGlrZWx5IGFscmVhZHkgaW4gY2FjaGUuDQo+IA0KPiBDYXNlIDIsIG1ldGFk YXRhIGFyZWEgd2lsbCBiZSBjb3ZlcmVkIGJ5IERNQSBhcmVhLCBhbmQgY2FjaGUtbGluZSB3aWxs IG5vdw0KPiBiZSBtb3JlIGNvbGQuICBJdCB3aWxsIGJlIGNvdmVyZWQgYnkgRERJTyBmZWF0dXJl LCBtZWFuaW5nIGl0IHdpbGwgYmUgZGVsaXZlcmVkDQo+IGluIEwzLWNhY2hlLiAgVGh1cywgbm90 IGEgZnVsbCBjYWNoZS1taXNzIGFuZCBwcmVmZXRjaCBmcm9tDQo+IEwzIGNvdWxkIGJlIGRvYWJs ZSwgd2hpbGUgcmVhZGluZyBSWC1kZXNjIGRhdGEuDQo+IA0KPiANCj4gPj4+ICogV2UgZ2V0IGF3 YXkgZnJvbSBub24tc2NhbGFibGUgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBzdWNoIGFzOg0KPiA+ Pj4NCj4gPj4+IElmIChtZXRhZGF0YV9hX2VuYWJsZWQpDQo+ID4+PiAgICAgIG1ldGEtPmEgPSBS ZWFkX21ldGFkYXRhX2EoKTsNCj4gPj4+IElmIChtZXRhZGF0YV9iX2VuYWJsZWQpDQo+ID4+PiAg ICAgIG1ldGEtPmIgPSBSZWFkX21ldGFkYXRhX2IoKTsNCj4gPj4+IElmIChtZXRhZGF0YV9jX2Vu YWJsZWQpDQo+ID4+PiAgICAgIG1ldGEtPmMgPSBSZWFkX21ldGFkYXRhX2MoKTsNCj4gPj4+ICAg YW5kIHNvIG9uIGZvciBtYW55IGVudHJpZXMuLi4uLg0KPiA+Pg0KPiA+PiBJbXBsZW1lbnRhdGlv bnMgc3VjaCBhcyB0aGlzIGV4aXN0LCB0aG91Z2gsIGFuZCB3ZSBoYXZlIHRvIHN1cHBvcnQNCj4g Pj4gdGhlbTsgYXMgbWVudGlvbmVkIGFib3ZlLCBJIHRoaW5rIGl0J3MgYWJzb2x1dGVseSBhIHdv cnRoeSBnb2FsIHRvDQo+ID4+IG1ha2UgdGhlIG1ldGFkYXRhIGZvcm1hdCBjb21wbGV0ZWx5IGZ1 bmdpYmxlIGZyb20gdXNlcnNwYWNlLCBidXQgdGhlDQo+ID4+IFhEUCBoaW50cyBpbnRlcmZhY2Ug bmVlZHMgdG8gYWxzbyBzdXBwb3J0IG9sZCBkcml2ZXJzIHRoYXQgZG8gdGhpbmdzDQo+ID4+IGlu IHRoZSB0cmFkaXRpb25hbCB3YXksIGV2ZW4gaWYgaXQncyBpbmVmZmljaWVudC4NCj4gPj4+DQo+ ID4+PiBPciBldmVuIHdvcnNlOg0KPiA+Pj4gICAgICBtZXRhLT5hID0gUmVhZF9tZXRhZGF0YV9i KCk7DQo+ID4+PiAgICAgIG1ldGEtPmIgPSBSZWFkX21ldGFkYXRhX2EoKTsNCj4gPj4+ICAgICAg bWV0YS0+YyA9IFJlYWRfbWV0YWRhdGFfYygpOw0KPiA+Pj4gICAgICBhbmQgc28gb24uLi4uDQo+ ID4+Pg0KPiA+Pj4gVGhlIGxhc3Qgb25lIHdvdWxkIGtpbGwgcGVyZm9ybWFuY2UgYW55IGRheS4g RXZlbiB0aGUgZmlyc3Qgb25lIGlzDQo+ID4+PiBzaHVubmVkIGluIERQREsgZm9yIHBlcmZvcm1h bmNlIHJlYXNvbnMuDQo+ID4+Pg0KPiA+Pj4gTm90ZSB0aGF0IGluIG15IHByb3Bvc2FsIGFib3Zl LCByZWFkX21ldGFkYXRhX2EoKSBpcyBhIGZ1bmN0aW9uIHRoYXQNCj4gPj4+IHdpbGwgYmUgY2Fs bGVkIGZyb20gdGhlIFhEUCBwcm9ncmFtIHdoZW4gbmVlZGVkIGFuZCBvbmx5IHRoZW4sIG5vdA0K PiA+Pj4gZnJvbSB0aGUgZHJpdmVyLCBzbyBkcml2ZXIgY29kZSBiZWNvbWVzIHVuY2x1dHRlcmVk IGJ5IHRoZXNlIGxhcmdlDQo+ID4+PiBpZiBzdGF0ZW1lbnRzLg0KPiA+Pg0KPiA+PiBBaCwgd2l0 aCB0aGlzIGJpdCBJIHVuZGVyc3Rvb2QgeW91ciBwb2ludCBhYm92ZSBhYm91dCAiYSBoZWxwZXIN Cj4gPj4gcmVhZGluZyB0aGUgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSIuIExldCBtZSBzZWUgaWYg SSBjYW4gcmVwaHJhc2UNCj4gPj4geW91ciBwcm9wb3NhbCwgYW5kIGxldCBtZSBrbm93IGlmIEkg Z290IGl0IHdyb25nOg0KPiA+Pg0KPiA+PiBUaGUgcHJvYmxlbSB5b3UncmUgc3BlYWtpbmcgb2Yg aGVyZSwgaXMgdGhhdCBvZiB0cmFuc2Zvcm1pbmcgdGhlIGJpdHMNCj4gPj4gdGhhdCBjb21lIGlu IGZyb20gdGhlIGhhcmR3YXJlIChpbiBhbiBSWC1kZXNjLCBzYXkpLCBpbnRvIHRoZQ0KPiA+PiBt ZXRhZGF0YSBmb3JtYXQgY29uc3VtZWQgYnkgWERQLiBTYXksIGZvciBpbnN0YW5jZSB0aGF0IHRo ZSBkcml2ZXINCj4gPj4gaGFzIGEgZnVuY3Rpb24NCj4gPj4gbGlrZToNCj4gPj4NCj4gPj4gdTY0 IG15X2RyaXZlcl9yZWFkX3J4X3RpbWVzdGFtcCh2b2lkICpwa3RfZHNjKTsNCj4gPj4NCj4gPj4g d2hpY2ggZG9lcyB3aGF0ZXZlciBiaXQgb2YgZGV2aWNlLXNwZWNpZmljIG1hZ2ljIGl0IG5lZWRl ZCB0byBnZXQgYQ0KPiA+PiB3ZWxsLSBmb3JtZWQgdTY0IHRpbWVzdGFtcCBvdXQgb2YgdGhlIHBh Y2tldCBkZXNjcmlwdG9yLCBtYXliZQ0KPiA+PiBpbnZvbHZpbmcgaGFuZGxpbmcgSFctc3BlY2lm aWMgcXVpcmtzIGV0Yy4gQW5kIHlvdSB3YW50IHRvIGV4cG9zZQ0KPiA+PiB0aGlzIGZ1bmN0aW9u IGRpcmVjdGx5IHRvIEJQRiBpbnN0ZWFkIG9mIGhhdmluZyBhIGJpZyBjb25kaXRpb25hbCBpbg0K PiA+PiB0aGUgZHJpdmVyIEMgY29kZSwgc28gd2UgY2FuIHVzZSBCUEYgY29kZSBlbGltaW5hdGlv biB0byBvbmx5IGdldCB0aGUgYml0cw0KPiB3ZSB3YW50LCByaWdodD8NCj4gPg0KPiA+IFlvdSBn b3QgaXQhDQo+IA0KPiBOb3RpY2UgdGhlIGhhbmRsaW5nIEhXLXNwZWNpZmljIHF1aXJrcywgd2hp Y2ggaXMgd2h5IHdlIGNhbm5vdCBzaW1wbHkgZ2l2ZQ0KPiBYRFAgQlBGLXByb2cgYWNjZXNzIHRv IHRoZSBSWC1kZXNjLg0KPiANCj4gDQo+ID4+IFRoaXMgaXMgYWN0dWFsbHkgc29tZXRoaW5nIEpl c3BlciBhbmQgSSBoYXZlIGJlZW4gZGlzY3Vzc2luZyBhcyBhIHBvc3NpYmxlDQo+ID4+IGZ1dHVy ZSBzb2x1dGlvbiEgSG93ZXZlciwgd2hhdCB3ZSBkaXNjdXNzZWQgd2FzIG5vdCBleHBvc2luZyB0 aGlzICp0bw0KPiA+PiBYRFAqLCBidXQgcmF0aGVyIHRvIGhhdmUgYSBzZXBhcmF0ZSBCUEYgcHJv Z3JhbSAqd2hpY2ggaXMgcGFydCBvZiB0aGUNCj4gPj4gZHJpdmVyKiB0aGF0IGRvZXMgdGhpcy4g QW5kIHRoaXMgQlBGIHByb2dyYW0gY2FuIHRoZW4gYmUgcGFpcmVkIHdpdGggdGhlDQo+IEJURg0K PiA+PiBmb3JtYXQgY29taW5nIGluIGZyb20gdXNlcnNwYWNlLCBzbyB0aGF0IGl0IHdpbGwgb25s eSBsb2FkIHRoZSBmaWVsZHMNCj4gPj4gcmVxdWVzdGVkLiBTbywgZ29pbmcgYmFjayB0byBteSBp bWFnaW5hcnkgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgYWJvdmUsDQo+ID4+IHdoZW4gdXNlcnNw YWNlIGNhbGxzOg0KPiA+Pg0KPiANCj4gWWVzLCBleGFjdGx5Lg0KPiANCj4gSWYgd2UgaW50cm9k dWNlIGEgQlBGIGhpbnRzLWhvb2ssIHdlIGNvdWxkIGdpdmUgdGhpcyBuZXcgQlBGIGhvb2sgYWNj ZXNzDQo+IHRvIHRoZSBSWC1kZXNjIChhbmQgWERQLT5jdHggLyB4ZHBfYnVmZikgcGx1cyBzb21l IGRyaXZlciBzcGVjaWZpYw0KPiBzdGF0dXMgcXVpcmtzLWJpdHMuICBUaGUgZHJpdmVyIGRldmVs b3BlcnMsIHRoYXQga25vdyB0aGUgcXVpcmtzLCBjb3VsZA0KPiBzaGlwIGEgQlBGLXByb2cgdG9n ZXRoZXIgd2l0aCBkcml2ZXIgY29kZSB0aGF0IGNyZWF0ZXMvd3JpdGVzIHRoZQ0KPiBtZXRhZGF0 YSBhcmVhIEFORCB0aGlzIEJQRi1wcm9nIGNvdWxkIERFRklORSB0aGUgc3RydWN0IG5hbWUgYW5k IGxheW91dA0KPiBhcyBCVEYgKHdoaWNoIHVzZXJzcGFjZSBjYW4gcXVlcnkgYW5kIGV4dHJhY3Qp Lg0KPiANCj4gDQo+ID4+IGRldl9tZXRhZGF0YV9jb25maWd1cmUoaWZpbmRleCwgQlRGX09GX1NU UlVDVChteV9tZXRhX2Zvcm1hdCkpOw0KPiA+Pg0KPiA+PiB0aGUgZHJpdmVyIHR1cm5zIHRoaXMg b3ZlciB0byB0aGUgQlBGIHN1YnN5c3RlbSB3aXRoIGEgQlBGIHByb2dyYW0gbGlrZToNCj4gPj4N Cj4gPj4gaW50IG15X2RyaXZlcl9jb252ZXJ0X21ldGEodm9pZCAqY3R4LCB2b2lkICptZXRhX2Rz dCkgew0KPiA+PiAgICAgICAgICBzdHJ1Y3QgbXlfbWV0YV9mb3JtYXQgKm1ldGFfZHN0X2ZtdCA9 IG1ldGFfZHN0Ow0KPiA+Pg0KPiA+PiAgICAgICAgICBpZiAoYnBmX2NvcmVfZmllbGRfZXhpc3Rz KG1ldGFfZHN0LT5yeF90aW1lc3RhbXApKQ0KPiA+PiAgICAgICAgICAgICBtZXRhX2RzdC0+cnhf dGltZXN0YW1wID0gbXlfZHJpdmVyX3JlYWRfcnhfdGltZXN0YW1wKGN0eCk7DQo+ID4+ICAgICAg ICAgIGlmIChicGZfY29yZV9maWVsZF9leGlzdHMobWV0YV9kc3QtPm1hZ2ljX2NvbG91cl9vZl9w YWNrZXQpKQ0KPiA+PiAgICAgICAgICAgICBtZXRhX2RzdC0+bWFnaWNfY29sb3VyX29mX3BhY2tl dCA9DQo+ID4+IG15X2RyaXZlcl9yZWFkX21hZ2ljX2NvbG91cl9vZl9wYWNrZXQoY3R4KTsNCj4g Pj4gICAgICAgICAgLi4uZXRjDQo+ID4+IH0NCj4gPj4NCj4gPj4NCj4gPj4gQW5kIHRoZW4gdGhl IGRyaXZlciBjb2RlIHdoZXJlIGJlZm9yZSB5b3UgaGFkLCBhcyB5b3Ugc2FpZDoNCj4gPj4NCj4g Pj4+IElmIChtZXRhZGF0YV9hX2VuYWJsZWQpDQo+ID4+PiAgICAgIG1ldGEtPmEgPSBSZWFkX21l dGFkYXRhX2EoKTsNCj4gPj4+IElmIChtZXRhZGF0YV9iX2VuYWJsZWQpDQo+ID4+PiAgICAgIG1l dGEtPmIgPSBSZWFkX21ldGFkYXRhX2IoKTsNCj4gPj4NCj4gPj4gd2lsbCBqdXN0IGJlDQo+ID4+ DQo+ID4+IEJQRl9QUk9HX1JVTihkcnYtPm1ldGFfd3JpdGVyX3Byb2csIG1ldGEpOw0KPiA+Pg0K PiA+PiBhbmQgdGhhdCB3aWxsIHJ1biB0aGUgQlBGIHByb2dyYW0gdGhhdCB3YXMgbG9hZGVkICh2 aWEgYSB1c2VybW9kZSBoZWxwZXIsDQo+ID4+IHByb2JhYmx5KSB3aGVuIHVzZXJzcGFjZSBjb25m aWd1cmVkIHRoZSBtZXRhZGF0YSBmb3JtYXQgYW5kIHdlJ2xsIGdldA0KPiB0aGUNCj4gPj4gY29u ZGl0aW9uYWwgY29kZSBnb29kbmVzcyBhbmQgYmV0dGVyIHBlcmZvcm1hbmNlLg0KPiA+DQo+ID4g UGVyZmVjdCEgVGhpcyB3YXMgYWN0dWFsbHkgbXkgZmlyc3QgdGhvdWdodCB0b28sIHRvIGhhdmUg YSBuZXcgaG9vayBwb2ludA0KPiBmb3IgbWV0YWRhdGEgcG9wdWxhdGlvbi4gQnV0IEkgdHVybmVk IHRvIHRoZSBjdXJyZW50IGFwcHJvYWNoIGJlY2F1c2UgSQ0KPiB0aG91Z2h0IGl0IHdvdWxkIGJl IHRvbyBoYXJkIHRvIGdldCBhIG5ldyBob29rIHBvaW50IGluLiBUaG91Z2gsIHRoZXJlIGFyZQ0K PiBwb3RlbnRpYWxseSBhIG51bWJlciBvZiBhZHZhbnRhZ2VzIHdpdGggaGF2aW5nIGEgbmV3IGhv b2sgcG9pbnQgZm9yIHRoaXMuDQo+IE9uZSBmcm9tIGFuIEFGX1hEUCBwb2ludCBvZiB2aWV3IHdv dWxkIGJlIHRoYXQgd2UgY291bGQgb3B0aW9uYWxseQ0KPiBwZXJmb3JtIHRoZSBhdHRhY2ggb24g YSBwZXIgbmV0ZGV2L3F1ZXVlIGJhc2lzIGFuZCBnZXQgYSBtdWNoIGVhc2llcg0KPiBoYW5kbGlu ZyBvZiBwZXIgQUZfWERQIGFwcGxpY2F0aW9uL3NvY2tldCBtZXRhZGF0YSB1c2FnZS4gQnV0IGdy ZWF0IHRoYXQNCj4gd2UgYXJlIHRoaW5raW5nIGFib3V0IHJvdWdobHkgdGhlIHNhbWUgdGhpbmdz LiBFbmNvdXJhZ2luZy4NCj4gPg0KPiANCj4gSSB3b3VsZCBzdXBwb3J0IGEgbmV3IGhvb2sgcG9p bnQgZm9yIG1ldGFkYXRhIHBvcHVsYXRpb24uDQo+IA0KPiBCdXQgYmVmb3JlIHdlIGdldCB0aGlz IGZhciwgSSB0aGluayB0aGF0IGRyaXZlcnMgc2hvdWxkIGJlIGV4dGVuZGVkIHdpdGgNCj4gbWV0 YWRhdGEgcG9wdWxhdGlvbiB1c2luZyBub3JtYWwgQy1jb2RlLiAgQW5kIHRoZW4gd2UgY2FuIGFk ZCB0aGlzIG5ldw0KPiBob29rLCB0aGF0IGdpdmVzIGZsZXhpYmlsaXR5IGJhY2sgdG8gZW5kLXVz ZXJzIChhbGxvd2luZyBCUEYtcHJvZ3JhbW1lcnMNCj4gdG8gcmVwbGFjZSB0aGUgZHJpdmVyIHBy b3ZpZGVkIHByb2dyYW0pLg0KDQpBZ3JlZS4NCg0KPiANCj4gPj4gSG93ZXZlciwgaGF2aW5nIHN1 Y2ggYSBmYWNpbGl0eSBmb3IgZHJpdmVycyB0byBkeW5hbWljYWxseSAqd3JpdGUqDQo+IG1ldGFk YXRhDQo+ID4+IGlzLCBJIGJlbGlldmUsIGNvbXBsZXRlbHkgb3J0aG9nb25hbCB0byBob3cgd2Ug aW1wbGVtZW50IHRoZSBkZXNjcmlwdGlvbg0KPiA+PiBmb3JtYXQgZm9yIGNvbnN1bWluZyB0aGlz IG1ldGFkYXRhIGZyb20gWERQIGFuZCB1c2Vyc3BhY2UuDQo+ID4+IEZvciBvbmUgdGhpbmcsIG5v dCBhbGwgZHJpdmVycyB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBkeW5hbWljDQo+IG1l dGhvZCwNCj4gPj4gc28gd2Ugc2hvdWxkIG5vdCB0aWUgdXAgdGhlIGNvbnN1bXB0aW9uIG9mIG1l dGFkYXRhIHRvIHRoaXMuIEZvciBhbm90aGVyLA0KPiA+PiBpdCdzIHdheSB0b28gY29tcGxleCB0 byBpbXBsZW1lbnQgZXZlcnl0aGluZyBhdCBvbmNlLCBzbyBkZWZpbmluZyB0aGUNCj4gPj4gY29u c3VtcHRpb24gZm9ybWF0IGZpcnN0LCB0aGVuIHdvcmtpbmcgb24gZWZmaWNpZW50bHkgd3JpdGlu ZyBpdCBhZnRlcndhcmRzDQo+IChvcg0KPiA+PiBpbiBwYXJhbGxlbCwgbWF5YmUpIG1ha2VzIGl0 IHBvc3NpYmxlIHRvIGhhdmUgaW5jcmVtZW50YWwgcHJvZ3Jlc3MuDQo+ID4NCj4gPiBBZ3JlZWQu DQo+IA0KPiBZZXMsIHdlIG5lZWQgcGFydGl0aW9uIHRoaXMgd29yayBlZmZvcnQgaW50byBzbWFs bGVyIGJpdHMsIHNvIHdlIGNhbg0KPiBtYWtlIHByb2dyZXNzLiAgSSB0aGluayBwZW9wbGUgaGF2 ZSB0YWxrZWQgYWJvdXQgWERQLWhpbnRzIGZvciBtb3JlIHRoYW4NCj4gMy15ZWFycyBub3cuLi4g d2UgbmVlZCB0byBtYWtlIHNvbWUgcmVhbCBjb2RlIHByb2dyZXNzLg0KPiANCj4gPg0KPiA+PiBU aGF0IGJlaW5nIHNhaWQsIGhhdmluZyBib3RoIHRoaW5ncyBpbiBtaW5kIHdoZW4gZGVmaW5pbmcg dGhpbmdzIGlzIGEgZ29vZA0KPiA+PiBpZGVhLiBCdXQgYXMgSSBoYXZlIGhvcGVmdWxseSBvdXRs aW5lZCBhYm92ZSwgdXNpbmcgQlRGIGFzIHRoZSBkZXNjcmlwdGlvbg0KPiA+PiBmb3JtYXQgYWxs b3dzIGJvdGggd3JpdGluZyBhbmQgcmVhZGluZyBvZiBtZXRhZGF0YSB0byBiZSBmbGV4aWJsZSBh bmQNCj4gPj4gZXh0ZW5zaWJsZS4NCj4gPj4NCj4gPj4+ICogV2UgYWxzbyBnZXQgYXdheSBmcm9t IHRoZSBwcm9ibGVtIHRoYXQgdGhlIEJURiBpZCBjYW4gY2hhbmdlIGZyb20NCj4gPj4+IHVuZGVy bmVhdGggdGhlIEFGX1hEUCBhcHBsaWNhdGlvbi4gVGhpcyBiZWNvbWVzIGVzcGVjaWFsbHkNCj4g cHJvYmxlbWF0aWMNCj4gPj4+IHdoZW4gd2Ugd291bGQgbGlrZSB0byBhcHBseSB0aGlzIHRvIHRo ZSBUeCBwYXRoIGFuZCBkbyBvZmZsb2Fkcy4NCj4gPj4NCj4gPj4gRm9yIHRoaXMgcG9pbnQsIEkg dGhpbmsgbWF5YmUgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYnRmX2lkIGZpZWxkIGluIHRoZQ0KPiBt ZXRhZGF0YQ0KPiA+PiBzdHJ1Y3QgaGFzIGdpdmVuIHlvdSB0aGUgaW1wcmVzc2lvbiB0aGF0IHRo ZSBmb3JtYXQgY2FuIGdvIGFuZCBjaGFuZ2UgYXQNCj4gYW55DQo+ID4+IHRpbWU/IEkgZG9uJ3Qg dGhpbmsgdGhhdCBoYXMgdG8gYmUgdGhlIGNhc2U6IGlmIGEgdXNlciBrbm93cyB0aGF0IHRoZXkg d2lsbA0KPiA+PiBhbHdheXMgdXNlIHRoZSBzYW1lIG1ldGFkYXRhIGZvcm1hdCwgYW5kIHRoZXkg a25vdyB3aGF0IHRoYXQgZm9ybWF0DQo+IGlzLA0KPiA+PiBpdCdzIHBlcmZlY3RseSB2YWxpZCB0 byBqdXN0IGlnbm9yZSB0aGUgYnRmX2lkIGZpZWxkIGFuZCBqdXN0IGNhc3QgdGhlIG1ldGFkYXRh DQo+ID4+IGZpZWxkIHRvIGEgc3RydWN0LiBIb3dldmVyLCB0aGUgZmllbGQgaGFzIHRvIGJlIHRo ZXJlIHNvIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yDQo+ID4+IHRoZSBjb25zdW1lciB0byBkZXRl Y3Qgd2hlbiBpdCBjaGFuZ2VzLCBpbiBvcmRlciB0byBzdXBwb3J0IHBvcnRhYmxlDQo+ID4+IGFw cGxpY2F0aW9ucy4gVGhlcmUgYXJlIHR3byB1c2UgY2FzZXMgZm9yIHRoaXM6DQo+ID4NCj4gPiBJ dCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBrbm93IGl0IGlzIGZpeGVkLCBidXQgSSBkbyBu b3QgdW5kZXJzdGFuZCBob3cNCj4gdGhlIHVzZXIgY2FuIGtub3cgdGhpcywgZXNwZWNpYWxseSBz aW5jZSB0aGUgY29udHJvbCBvZiB0aGlzIGlzIG91dC1vZi1iYW5kLg0KPiBIb3cgd291bGQgd2Ug ZGVhbCB3aXRoIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW8/DQo+ID4NCj4gPiBBcHAgMSBjb21lcyB1 cCwgb3BlbnMgdXAgYW4gQUZfWERQIHNvY2tldCBhbmQgcmVxdWVzdHMgbWV0YWRhdGFfMQ0KPiA+ IEFwcCAyIGNvbWVzIHVwLCBvcGVucyB1cCBhbm90aGVyIEFGX1hEUCBzb2NrZXQgb24gdGhlIHNh bWUgbmV0ZGV2DQo+IGFuZCByZXF1ZXN0cyBtZXRhZGF0YV8yDQo+ID4NCj4gPiBXZSBjYW4gcHJv dmlkZSB0aGUgYXBwcyB3aXRoIHR3byBkaWZmZXJlbnQgYnRmX2lkcywgYnV0IGlzIHRoaXMgc29t ZXRoaW5nDQo+IHRoYXQgYW4gZXhpc3RpbmcgZHJpdmVyIGNhbiBzdXBwb3J0IGFuZCBob3cgZG9l cyB0aGlzIHNjYWxlIGFzIHdlIGFkZCBzb2NrZXRzDQo+IGFuZCBkaWZmZXJlbnQgdXNhZ2VzIG9m IG1ldGFkYXRhPyBOb3RlIHRoYXQgd2UgaGF2ZSBubyBpZGVhIHdoYXQgdGhlDQo+IGRlc3RpbmF0 aW9uIGlzIHVudGlsIGFmdGVyIHdlIGhhdmUgZXhlY3V0ZWQgb3VyIFhEUCBwcm9ncmFtIGFuZCBw b3RlbnRpYWxseQ0KPiB1c2VkIHRoZSBtZXRhZGF0YSBhcmVhIHRoZXJlLiBCdXQgb3VyIHBvcHVs YXRpb24gb2YgdGhlIG1ldGFkYXRhIGZpZWxkIGlzDQo+IGJlZm9yZSB0aGUgWERQIHByb2dyYW0u IEtpbmQgb2YgY2hpY2tlbiBhbmQgZWdnLg0KPiA+DQo+ID4gVGhlIGlkZWEgb2YgYSBzZXBhcmF0 ZSBtZXRhZGF0YSBwb3B1bGF0aW9uIGhvb2sgcG9pbnQgb24gdGhlDQo+IG5ldGRldi9xdWV1ZV9p ZCBsZXZlbCBjb3VsZCBwb3RlbnRpYWxseSBzb2x2ZSB0aGlzLiBXZWxsLCBhcyBsb25nIGFzIHlv dSBhcmUNCj4gbm90IGF0dGFjaGluZyBzZXZlcmFsIHNvY2tldHMgdG8gdGhlIHNhbWUgbmV0ZGV2 IGFuZCBxdWV1ZV9pZCwgYnV0IHRoYXQgaXMNCj4gcmFyZS4NCj4gPg0KPiA+PiAtIFdyaXRpbmcg YW4gYXBwbGljYXRpb24gdGhhdCBjYW4gc3VwcG9ydCBkaWZmZXJlbnQgbWV0YWRhdGEgZm9ybWF0 cyBzbw0KPiA+PiAgICBpdCBjYW4gcnVuIHdpdGhvdXQgcmUtY29tcGlsYXRpb24gb24gZGlmZmVy ZW50IGhhcmR3YXJlLiBGb3IgdGhpcywgaXQNCj4gPj4gICAgaXMgcG9zc2libGUgdG8gbG9hZCB0 aGUgcHJvZ3JhbSB3aXRoIGEgdGFyZ2V0IGRldmljZSwgc28gdGhhdCB0aGUgbG9uZw0KPiA+PiAg ICBzZXF1ZW5jZSBvZiBjaGVja3Mgb2YgdGhlIGJ0Zl9pZCBjYW4gYmUgZWxpbWluYXRlZCBieSBD Ty1SRSBhdCBsb2FkDQo+ID4+ICAgIHRpbWUsIGFuZCB0dXJuZWQgaW50byBqdXN0IGEgc2luZ2xl IHNhbml0eSBjaGVjayBzbyB0aGF0IHRoZSBtZXRhZGF0YQ0KPiA+PiAgICBpcyBub3QgbG9hZGVk IGlmIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuDQo+ID4NCj4gPiBXb3VsZCBiZSBncmVhdCBp ZiB3ZSBoYWQgQ08tUkUgZm9yIHVzZXItc3BhY2UsIGJ1dCBhcyBpdCBpcyBub3QgdGhlcmUgaW4g bGx2bQ0KPiBvciBnY2MgZm9yIHg4Niwgd2UgcHJvYmFibHkgaGF2ZSB0byBnbyB0aHJvdWdoIGFs bCB0aGUgdGVzdHMgaW4gQUZfWERQLg0KPiA+DQo+ID4+IC0gV3JpdGluZyBhbiBhcHBsaWNhdGlv biB0aGF0IGRlYWxzIHdpdGggcGFja2V0cyBmcm9tIG11bHRpcGxlIGRldmljZXMNCj4gPj4gICAg aW4gdGhlIHNhbWUgcHJvZ3JhbSAoc2F5LCBhIGRldm1hcCBwcm9ncmFtIHRoYXQgZ2V0cyByZWRp cmVjdHMgZnJvbQ0KPiA+PiAgICBkaWZmZXJlbnQgaGFyZHdhcmUgaW50byB0aGUgc2FtZSBlZ3Jl c3MgZGV2aWNlKS4NCj4gPg0KPiA+IFllcy4gVGhlIHNhbWUgZ29lcyBmb3IgQUZfWERQIGFuZCBh IHNoYXJlZCB1bWVtIGJldHdlZW4gZGlmZmVyZW50DQo+IE5JQ3MuDQo+ID4NCj4gPj4gLSBEZWFs aW5nIHdpdGggbWV0YWRhdGEgY29uZmlndXJhdGlvbiB3aGVyZSBhIHN1YnNldCBvZiB0aGUgdHJh ZmZpYyBoYXMNCj4gPj4gICAgZGlmZmVyZW50IG1ldGFkYXRhIChlLmcuLCB0aW1lc3RhbXBzIG1h eSBvbmx5IGFwcGVhciBvbiBQVFAgcGFja2V0cywNCj4gPj4gICAgc2F5KS4gSGVyZSB0aGUgY2hl Y2sgb2YgdGhlIEJURiBJRCBjYW4gYmUgdXNlZCB0byBkZW11eCB0aGUgcGFja2V0DQo+ID4+ICAg IHR5cGUuDQo+ID4NCj4gPiBXb3VsZCB0aGlzIG5vdCBsZWFkIHRvIGEgY29tYmluYXRvcmlhbCBl eHBsb3Npb24gb2YgQlRGIElEcyBhcyB3ZSBhZGQgZmllbGRzDQo+IHRoYXQgbWlnaHQgb3IgbWln aHQgbm90IGhhdmUgYSB2YWxpZCBlbnRyeT8gV291bGQgaXQgbm90IGJlIGJldHRlciB3aXRoIGEg ZmxhZ3MNCj4gZmllbGQgaW4gdGhlIE1EIHNlY3Rpb24/DQo+ID4NCj4gDQo+IEkndmUgZGViYXRl ZCB0aGlzIHdpdGggSm9obiBiZWZvcmUsIGFuZCBJIHRob3VnaCB3ZSByZXNvbHZlZCB0aGUNCj4g Y29uY2VybnMgaW4gdGhhdCBkaXNjdXNzaW9uLg0KPiBJbiBzdW1tYXJ5Og0KPiANCj4gMS4gVGhl IGRyaXZlciBpcyAxMDAlIGZyZWUgdG8gY3JlYXRlIGEgZmxhZ3MgZmllbGQgaW4gdGhlIFhEUC1o aW50cw0KPiBzdHJ1Y3QsIHRoYXQgZGVmaW5lIHdoYXQgZmllbGRzIGFyZSB2YWxpZC4gIElmIHlv dSBsaWtlIHRvIGJlIG9sZA0KPiBmYXNoaW9uLCBhbmQgd2UgY2FuIGV2ZW4gZGVmaW5lIHRoZSBi aXRzIGFzIFVBUEkgZm9yIGNvbW1vbiBmaWVsZHMgdGhhdA0KPiBtb3JlIGRyaXZlcnMgcHJvdmlk ZS4gVGhpcyBqdXN0IHJlcXVpcmVzIG1vcmUgd29yayBpbiB1c2Vyc3BhY2UvQlBGLXByb2cNCj4g dG8gY2hlY2sgZmxhZ3MtdmFsaWQgYmVmb3JlIGFjY2Vzc2luZyBhIG1lbWJlci4NCj4gDQo+IDIu IFVudGlsIHdlIGdldCB0aGUgWERQLWhpbnRzLWhvb2ssIGRyaXZlcnMgd2lsbCBiZSBvbGQgZmFz aGlvbiBhbmQNCj4gZGVmaW5lIGEgcmF0aGVyIGxpbWl0ZWQgbnVtYmVyIG9mIFhEUC1oaW50cyBz dHJ1Y3RzLiAgVGh1cywgSSB3b3VsZCBub3QNCj4gd29ycnkgYWJvdXQgZHJpdmVycyBjcmVhdGlu ZyB0b28gbWFueSBzdHJ1Y3RzIGFuZCBCVEYtSURzLg0KPiANCj4gVG9kYXkgZHJpdmVycyBhcmUg bm90IHZlcnkgZmxleGlibGUsIGFuZCB0aGlzIHdvcmsgaXMgYWJvdXQgY3JlYXRpbmcgYQ0KPiBz dXBlciBmbGV4aWJsZSBpbnRlcmZhY2UuICBJdCBkb2Vzbid0IG1lYW4gdGhhdCBkcml2ZXJzIGFu ZCBoYXJkd2FyZQ0KPiB3aWxsIGFsbCBvZiBhIHN1ZGRlbiBnZXQgc3VwZXIgZmxleGlibGUuICBE cml2ZXIgYW5kIGhhcmR3YXJlIHN0YXJ0DQo+IHVzaW5nIHRoaXMgbmV3IGZsZXhpYmxlIEJURiBp biB2ZXJ5IHNpbXBsZSB3YXlzLg0KDQpJIGJ1eSB0aGlzLCB0aGF0IHRoaXMgaXMgbm90IGEgcHJv YmxlbSB3ZSBhcmUgZ29pbmcgdG8gc2VlIGZvciBxdWl0ZSBhIHdoaWxlIGZvciBzdXJlLg0KDQo+ IA0KPiA+IFRoYW5rIHlvdSBzbyBtdWNoIGZvciB5b3VyIGZlZWRiYWNrLiBJdCByZWFsbHkgaGVs cGVkISBJbiBzdW1tYXJ5LCBCVEYgaXQgaXMNCj4gYXMgYW4gaW50ZXJmYWNlIGFuZCBJIGFncmVl IHRoYXQgd2Ugc2hvdWxkIHN0YXJ0IHNpbXBsZSBhbmQganVzdCBnZXQgdGhpcyB0bw0KPiB3b3Jr IHdpdGggdGhlIGlmLXN0YXRlbWVudCBtZXRob2QuIEJ1dCBpdCBzZWVtcyB0aGF0IEkgY2FuIGFs c28gY29udGludWUgdG8NCj4gcHJvdG90eXBlIHRoZSBtYWluIGlkZWEgb2YgcmVhZGluZyBtZXRh ZGF0YSBmcm9tIFhEUC4gRG8geW91IHRoaW5rIGl0DQo+IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGdl dCBhIG5ldyBob29rIHBvaW50IGZvciBYRFAgbWV0YWRhdGEgcG9wdWxhdGlvbj8gSWYNCj4gc28s IEkgdGhpbmsgd2Ugc2hvdWxkIHB1cnN1ZSB0aGF0LCBlc3BlY2lhbGx5IGlmIHdlIGNvdWxkIHRp ZSBpdCB0byBhDQo+IG5ldGRldi9xdWV1ZV9pZCBwYWlyLiBUaGF0IHdvdWxkIHNpbXBsaWZ5IGEg bG90IGZvciBBRl9YRFAuDQo+ID4NCj4gDQo+IEkndmUgYWxsIGZvciBwcm90b3R5cGVpbmcgc29t ZXRoaW5nIHNvIHdlIGNhbiBtYWtlIHByb2dyZXNzLg0KDQpUaGFua3MgZm9yIGFsbCB0aGUgZmVl ZGJhY2sgSmVzcGVyLiBBcHByZWNpYXRlZC4NCg0KL01hZ251cw0KDQo+IC0tSmVzcGVyDQoNCg==