From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web10.66722.1673253351668276295 for ; Mon, 09 Jan 2023 00:35:52 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Av2Z0gJ/; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: min.m.xu@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673253351; x=1704789351; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=ucRB1jeYVrDjUNoEkyXylMqCaOWQmz4NEFiax9mmjVI=; b=Av2Z0gJ/+vHFM+A9Nu08iBMvmDhQD/85iXSQqd98J7LNF2x3qtCL2jQN ASxdAfc1M4qQ7gtRZ4hMMX1iDZi7JtNzYxHJ+ejuf2b8wW2RtpoiF4fOh He5jdgkd1j8Sav1svzjnLGEeFlBEtXoXzu/KDoZsAZJOGxRdast5VLHp4 0uRUAyQi5DY8iLJp9jYGy8B0vNn7rglxs3bcnUrSSeO9ZGrmqmq7h/Xcr O91oiS6jW3q34VuZWvkiS8ERcOLILb9yB92EjvOQQmYTyC1lRBXEepkH6 BV2em5+uDvK5buRvOP6VO6NUgaGbJzTueg17A+sNpJ0SSMsARk+N6FgHo g==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="350035086" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="350035086" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jan 2023 00:35:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="606532605" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="606532605" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga003.jf.intel.com with ESMTP; 09 Jan 2023 00:35:02 -0800 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Mon, 9 Jan 2023 00:35:02 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Mon, 9 Jan 2023 00:35:01 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Mon, 9 Jan 2023 00:35:01 -0800 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (104.47.74.42) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Mon, 9 Jan 2023 00:35:00 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cxpVNEtKCmhrOwqtPnjEFQJsrvjdkX//nwo8FeQMYCLSDoiMJPyaXXXwhkcnuGRbldoHx5epJeDFMStKZDO4NcWwRSEqUUMz+PRXpItPUdRwdlhMCKuPjscEK1nUoXPK25S5bsEXpukdZeRCeAqn0CbOgYOlxeUyzcU8BOfRUpm9FNxmkW6Ryam1TGgdNSoLWnHHNUWqW78LTv9rHh37Lht6EVv2vmQqsDHMuW0VCbLhIkkslztecDSutusg2H7qKMfJxvEXqno1bKFY+2w7JanWkxWu23Y1ARWGP7ub+cNBRvgVjA6qsTVKe96Hf0+YVDiiWIZb5m55iKdNRZ5KEA== 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=ucRB1jeYVrDjUNoEkyXylMqCaOWQmz4NEFiax9mmjVI=; b=DaKoZomnBZHh7lCEXNmApjnY6JcNMH9p8MFXknoC8FjXNfqnjF7o7Q9+yq1g/634AisaeBs9a+xGyqzbFSTTuTYYhop1VbEFoRcwFgfKF7DhqFcNr9enxMRWRMco9THcUVVMztt9lC8H9U5uGR21Kr2xbCihfJrmLPg9mQng1Vevw4yyF6/7E5Aq8AOdx5W3/Eq15yajSvUItn0QZsXpqeg2W7acKccwvKD3oFSQqOr4aYF4jPeiY/eQvVKz5Dxn+nF9o14aCQGJHu2xYemH7wlQ4D8kZ1YbSJaTCeMrV2eyTb6KBz3abW1z9zDsghXgi8uhPfvrnUwIH0hLKQd62g== 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 Received: from CO1PR11MB5058.namprd11.prod.outlook.com (2603:10b6:303:99::17) by MN2PR11MB4694.namprd11.prod.outlook.com (2603:10b6:208:266::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.18; Mon, 9 Jan 2023 08:34:57 +0000 Received: from CO1PR11MB5058.namprd11.prod.outlook.com ([fe80::6768:ff92:56c4:9ed6]) by CO1PR11MB5058.namprd11.prod.outlook.com ([fe80::6768:ff92:56c4:9ed6%3]) with mapi id 15.20.5986.018; Mon, 9 Jan 2023 08:34:57 +0000 From: "Min Xu" To: Laszlo Ersek , "devel@edk2.groups.io" CC: "Aktas, Erdem" , James Bottomley , "Yao, Jiewen" , Gerd Hoffmann , Tom Lendacky , "Boeuf, Sebastien" , Michael Brown , =?utf-8?B?TWFydmluIEjDpHVzZXI=?= Subject: Re: [edk2-devel] [PATCH V1 1/1] OvmfPkg/AcpiPlatformDxe: Add back log and fix code cohesion Thread-Topic: [edk2-devel] [PATCH V1 1/1] OvmfPkg/AcpiPlatformDxe: Add back log and fix code cohesion Thread-Index: AQHZIEbPjnK5AT8K6EScYBXG6H5pVq6PikEAgAY+5jA= Date: Mon, 9 Jan 2023 08:34:57 +0000 Message-ID: References: <20230104141309.1426-1-min.m.xu@intel.com> <9b3040df-fd2e-4b2d-fda6-62760425fdce@redhat.com> In-Reply-To: <9b3040df-fd2e-4b2d-fda6-62760425fdce@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB5058:EE_|MN2PR11MB4694:EE_ x-ms-office365-filtering-correlation-id: e4005bea-7ae8-4b36-8ba8-08daf21c63e5 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: t54bB1dHMo0xZURrd8KGB9pFltmp9Yx4+Thaie1Tz4GEYIKtqrbJ+KSfK+m9Z/RF8w5vhAbZcyPTGfplvrCW324H7q7SrG37Ydf0iGFW61diKTMX0ajf2SGgVywogp8i7TF4AW3q4Iv6NP9exOKimiD/IrKvPVOCnGjEFhMjZYjNu5D2fv6nq1CGVCSm5gSl771XM5lmY54R0lItweUkwtLLyxIv/6dlmm1PLFt6T6fZhXtirUx657NVNwu+ks4eY1wj5vmTGwjPVCGCCHrhKlqnCW0LgNGhEQhN+HiNqnJDvYbUzrt7geiJlqURZ/Kbnk7F4hr+6h2P9tWWRqiujEymX+C1kI7GSzvjAQCr/a+fMZOnoSdG2+OibVtbmJQUx2I6DwNIvGd+G4Tty67fryzSkTlmsF110ND90uAa6h0Z/mjd7BOg+fKakGlpyp3M+bhYVne7QtfIVy418ZXZF4tyspC5pX8Hcs8ZN+BOiEeJfm2A8izAas5RhUeKTzxsRAcy/y5j3iIm6QUQpQQvchKT0GnDzqQ24VjD6+WVU+sP/suHQ5tFhIEOEhUXjnBLswagKbzSd/XjCEirreGeVxWWS6WSf4UW2ecuXVVMjCK8u9CFEfWgRWIDerQMeqISlVQUH78phRgplYJfYU5izCbStFB2AEvcTERty34zp7lnR03QOrTG7uwigKwfONWTJZgnDjxF5v4H8tgyfmTlMN6J6F1KauEa5gdWFQ4HcuY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB5058.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(346002)(136003)(396003)(376002)(39860400002)(451199015)(52536014)(41300700001)(66899015)(8936002)(30864003)(5660300002)(2906002)(8676002)(66574015)(64756008)(66446008)(66556008)(66476007)(76116006)(66946007)(19627235002)(316002)(7696005)(71200400001)(110136005)(54906003)(33656002)(966005)(478600001)(6506007)(53546011)(26005)(9686003)(4326008)(186003)(55016003)(86362001)(83380400001)(38100700002)(82960400001)(38070700005)(122000001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Rk5HMzN4R1IyU0NJYzZqMnBWQkFBZS90UW1pcHZFZnA0eEVDaHV4UmhIMzVn?= =?utf-8?B?MEpTeWVPU3FLSFFkSE5reDNscjJGYTdYeGFJc1lqRi9CT2k2aHF0dWY5M3F1?= =?utf-8?B?S2VibEEzU0lHbmR0Mzgva0Q1bHh6OGJVM0NnY1M4WUFGYU0vTVdRR2hkWWt5?= =?utf-8?B?Q1pwQkFpOEFNeTB5QUI1YW9YK0U2dFhtZG9tTzNtdjFrN2V2djRsczViTFY1?= =?utf-8?B?YjMwSGtuWiszZXRaQ2NReEQvOXp1TGxyRnhPQm5tQlV5dUoyQzJqQkhaMmY5?= =?utf-8?B?NkdWVTNKdGxkZ1RSejZQcWxnbTR0bTlQL2pxQ0o5M1VhYkxhcU5NOG42T0c2?= =?utf-8?B?aWR5UnE1Z3JEMDRncXk1TEtHYVF2cXZnank4Mjg5L2VneGJrOFZYVm9rdGkr?= =?utf-8?B?MWNWbE9MU29WdWUwaDRlREU5K3NRRkRvdnBnci9PR1hOWWNsaGk3ekJ5TUo1?= =?utf-8?B?ZXJmcWJseEQzSWFDWDROSUZBUnpxcVJiMWovYXFtZE1qWXRyQzM3akZhQmZ6?= =?utf-8?B?TlZUL1hkUnZkc2xIRE10RHhoQ1dUbFJtcU9oTVdFcEZGMkVNeFlrclBvUUhG?= =?utf-8?B?eThDY1VZN3JJTEs0U2M5d3BUTXI3WlR4NEV3M1RpVlZTZ1RVTndJbXVVRUxG?= =?utf-8?B?dGpUZGpsRW5kK3FEZUJHTmVrbGxWOWNNeXZiZU9Cby8xV1NTb1RqUHl6U3Ra?= =?utf-8?B?K2Zna3N5Z2JxN1BBQXU5clpiQytTZC9rL0w4eWF2VVoxc2I1WStFc3gyVnMz?= =?utf-8?B?eE52ODJwREI2Zm12ZmhaVDBUZGwwYXBPVklhUXdmS3B3RmNNSnJsQklYb1k5?= =?utf-8?B?cEZoS3JiTGZwczdVVStKK2RxdkE3ZEk5VXRIdDhhbExYSElMUDM3SWJLeEh3?= =?utf-8?B?UEdoUkUrZmo0MDdsYmRZVzQ3dHVqN0xzZ1lRRkNpRUYxMnU3TTk4MW05eG1h?= =?utf-8?B?b1NBZHZvLzBxd0cwLzIwN0o5US9tS0wrYURzakN5REt3OEIwSWU0eXU4aU05?= =?utf-8?B?ZEVPMmc2elJudTlEMTNBd3kzN2RaQU4yN0hkcmlBQjhQUW00WmdhYi9XK01K?= =?utf-8?B?MktseTVRM2k1TWdZOS8xUkhUUnd0WTA3ZWFjTWZyanZDbWdmRWZ3SnRVUC90?= =?utf-8?B?Ujd0L2UvZXVPYTdneGxTSk12ZnVNSHd6SWh0aEhRVlFSU0ZJaHAzRkFZdFJK?= =?utf-8?B?WUdLT042bnoydU1yZVNpS1laOWorZFRSbzVZSDAyQm9ma3lmYUZXYnNaamxB?= =?utf-8?B?YTJLK0N6ZGdCT1U0N05mSEZBQWtlNVdkejdYc2U5Uk16dzVvN0ZydW1rTW9C?= =?utf-8?B?aHVLSTN1Qi9VVEd3WmRCODg0aUgyM0xweERaWVVnN0oxYlNEdnNoNXIrYXhi?= =?utf-8?B?WHpKRWgwamNYZEE4cDcyZ0xxdkxXOSttaHNobGYySGkzVzFSNXAvTzBYeTRH?= =?utf-8?B?TjVFN2pncDY5VVpnUndMRDczSXZkLzA0VVI2VngvdTVPOURBY21vcFJFdGNY?= =?utf-8?B?aFZmamF0MnRVcFpTQk1iNERaQlFDZTVCMFY1b0tpTlRRZ0s0Vm1rSEo5aFVl?= =?utf-8?B?NlliNG02Y1FTcFgwcE9xWUJXd2hqQVlXc202bjkrWHcyNkV6L3Y3OHI4dFFz?= =?utf-8?B?YW4reHd5YUhqYUhjYUI0bEVIRFZqbEdyRmQvWVczRHowTkhmMFdzNXp3dm9p?= =?utf-8?B?Szd3VW1wOUVVTjB3WG5JMkVnT0U3MWYxWWthTG5TUkFKdmtTZ0hhQWJXYlM1?= =?utf-8?B?Y1JBT2I3VFVnSkR2ZlY1Y2s2STdtTno1dVZOZjBsR3hWL2E5cDZCTUlVOGtR?= =?utf-8?B?NHpiMGsxcG9Wb0Y0Z3d4emxtVzUxR1pTNTZKNjdtYytxbCtma1VSYkVtVDZI?= =?utf-8?B?aWJxbkNhd0ZBYjdpdFAwazQzN2dEdXNSUUNxQTI5S3pJcTcxeFdaNWJpaTU4?= =?utf-8?B?dmEyNlBBbSs0RzlsTXNxcDY1cmE2V1ZMTGR6YXBPN1ZKWklxVVN6VUI0cS9Y?= =?utf-8?B?NzM2SXpLNW9xS2JaaVlaTDZzN1FPY1hDaUFma3JMTEo4MXZFdFN6QTBLam9p?= =?utf-8?B?SFNFUUdTSk1wL1UzcHVrMjZJbmRBaG1oREZWcjhnYUJzZHBjYzdZMndZaThi?= =?utf-8?Q?oLvZyiptGw7IzdZ3B31PZhBeS?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB5058.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4005bea-7ae8-4b36-8ba8-08daf21c63e5 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Jan 2023 08:34:57.5028 (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: wKVDEW0tDYgqvdNygTC2uwQdaoL1UCp7Lh78hA+e/FxSyXHTA6reGwD08RYT5w+SN1P6Uad3JfEbp/9FFv0g3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4694 Return-Path: min.m.xu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksIExhc3psbw0KSSBkbyBhcHByZWNpYXRlIHRoZSBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgZXhw bGFuYXRpb24gb2YgaG93IEFjcGlQbGF0Zm9ybUR4ZSBkb3dubG9hZHMgQUNQSSB0YWJsZXMgZnJv bSBRRU1VIGFuZCB0aGVuIGluc3RhbGwgdGhlbS4gSSB3aWxsIHN1Ym1pdCBhIG5ldyBwYXRjaC1z ZXQgc29vbi4NCg0KVGhhbmtzDQpNaW4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiBGcm9tOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiBTZW50OiBUaHVyc2Rh eSwgSmFudWFyeSA1LCAyMDIzIDU6MDkgUE0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBY dSwgTWluIE0gPG1pbi5tLnh1QGludGVsLmNvbT4NCj4gQ2M6IEFrdGFzLCBFcmRlbSA8ZXJkZW1h a3Rhc0Bnb29nbGUuY29tPjsgSmFtZXMgQm90dG9tbGV5DQo+IDxqZWpiQGxpbnV4LmlibS5jb20+ OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBHZXJkDQo+IEhvZmZtYW5uIDxr cmF4ZWxAcmVkaGF0LmNvbT47IFRvbSBMZW5kYWNreQ0KPiA8dGhvbWFzLmxlbmRhY2t5QGFtZC5j b20+OyBCb2V1ZiwgU2ViYXN0aWVuDQo+IDxzZWJhc3RpZW4uYm9ldWZAaW50ZWwuY29tPjsgTWlj aGFlbCBCcm93biA8bWNiMzBAaXB4ZS5vcmc+OyBNYXJ2aW4NCj4gSMOkdXNlciA8bWhhZXVzZXJA cG9zdGVvLmRlPg0KPiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCBWMSAxLzFdIE92 bWZQa2cvQWNwaVBsYXRmb3JtRHhlOiBBZGQNCj4gYmFjayBsb2cgYW5kIGZpeCBjb2RlIGNvaGVz aW9uDQo+IA0KPiBPbiAxLzQvMjMgMTU6MTMsIE1pbiBYdSB3cm90ZToNCj4gPiBGcm9tOiBNaW4g TSBYdSA8bWluLm0ueHVAaW50ZWwuY29tPg0KPiA+DQo+ID4gQlo6IGh0dHBzOi8vYnVnemlsbGEu dGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzNw0KPiA+DQo+ID4gQ29tbWl0IDlmZGM3 MGFmNmJhOCBicmVha3MgbG9nIGFuYWx5c2lzIGFuZCBjb2RlIGNvaGVzaW9uIGluDQo+ID4gQWNw aVBsYXRmb3JtRHhlLiBTZWUgdGhlIGRldGFpbGVkIGluZm9ybWF0aW9uIGluIEJaIzQyMzcuDQo+ ID4NCj4gPiBUaGVyZSBhcmUgYmVsb3cgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOg0KPiA+IDEpIEFk ZCBiYWNrIGRlYnVnIGxvZw0KPiA+IDIpIEFkZCBlcnJvciBjaGVja2luZyBhbmQgaGFuZGxpbmcg aWYgSW5zdGFsbFByb3RvY29sSW50ZXJmYWNlIGZhaWxlZC4NCj4gPiAzKSBEZWxldGUgdGhlIFFl bXVBY3BpVGFibGVOb3RpZnkuaCBiZWNhdXNlIGl0IGlzIHN1cGVyZmx1b3VzLg0KPiA+IDQpIERl bGV0ZSB0aGUgZ2xvYmFsIHZhcmlhYmxlICJtUWVtdUFjcGlIYW5kbGUiIGluc3RlYWQgb2YgYSBs b2NhbA0KPiA+ICAgIHZhcmlhYmxlLg0KPiA+IDUpIEluc3RhbGwgdGhlIFFFTVVfQUNQSV9UQUJM RV9OT1RJRllfUFJPVE9DT0wgd2l0aCBhIE5VTEwNCj4gYXNzb2NpYXRlZA0KPiA+ICAgIGludGVy ZmFjZS4NCj4gPg0KPiA+IEFib3ZlIGNoYW5nZXMgMi80LzUgYXJlIGFwcGxpZWQgaW4gYm90aCBD bG91ZEh2QWNwaS5jIGFuZA0KPiBRZW11RndDZmdBY3BpLmMuDQo+ID4NCj4gPiBDYzogTGFzemxv IEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPiBDYzogRXJkZW0gQWt0YXMgPGVyZGVtYWt0 YXNAZ29vZ2xlLmNvbT4NCj4gPiBDYzogSmFtZXMgQm90dG9tbGV5IDxqZWpiQGxpbnV4LmlibS5j b20+DQo+ID4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+IENjOiBH ZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4NCj4gPiBDYzogVG9tIExlbmRhY2t5IDx0 aG9tYXMubGVuZGFja3lAYW1kLmNvbT4NCj4gPiBDYzogU2ViYXN0aWVuIEJvZXVmIDxzZWJhc3Rp ZW4uYm9ldWZAaW50ZWwuY29tPg0KPiA+IFJlcG9ydGVkLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNl a0ByZWRoYXQuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IE1pbiBYdSA8bWluLm0ueHVAaW50ZWwu Y29tPg0KPiA+IC0tLQ0KPiA+ICBPdm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9DbG91ZEh2QWNwaS5j ICAgICAgICAgfCAyNSArKysrKy0tLS0tLQ0KPiA+ICBPdm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9R ZW11RndDZmdBY3BpLmMgICAgICAgfCA0MiArKysrKysrKysrKysrLS0tLS0NCj4gLQ0KPiA+ICAu Li4vSW5jbHVkZS9Qcm90b2NvbC9RZW11QWNwaVRhYmxlTm90aWZ5LmggICAgfCAyNyAtLS0tLS0t LS0tLS0NCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCA1MiBkZWxldGlv bnMoLSkgIGRlbGV0ZSBtb2RlDQo+ID4gMTAwNjQ0IE92bWZQa2cvSW5jbHVkZS9Qcm90b2NvbC9R ZW11QWNwaVRhYmxlTm90aWZ5LmgNCj4gDQo+IEZpcnN0IG9mIGFsbCwgSSB3b3VsZG4ndCBsaWtl IHRvIG1ha2UgYW55IGNvbW1lbnRzIG9uIHRoZSAiQ2xvdWRIdkFjcGkuYyINCj4gc291cmNlIGZp bGUuIEkgd291bGRuJ3QgbGlrZSBteSBSZXZpZXdlZC1ieSB0byBjb3ZlciBhbnkgbm9uLXRyaXZp YWwgY2hhbmdlDQo+IG1hZGUgdG8gIkNsb3VkSHZBY3BpLmMiLg0KPiANCj4gVGhlcmVmb3JlLCBJ IHN1Z2dlc3QgdGhhdCB0aGlzIHBhdGNoIGJlIHNwbGl0IHVwIHRvIGEgc2VyaWVzIG9mIHNtYWxs IHBhdGNoZXMuDQo+IA0KPiBUaGUgZmlyc3QgcGF0Y2ggc2hvdWxkLCBpbiBteSBvcGluaW9uLCBq dXN0IHJlbW92ZSB0aGUNCj4gUUVNVV9BQ1BJX1RBQkxFX05PVElGWV9QUk9UT0NPTCBzdHJ1Y3R1 cmUgLS0gdGhhdCBpcywgInN0ZXAgNSIuIFRoaXMNCj4gc2hvdWxkIGJlIGEgdHJpdmlhbCBjaGFu Z2UgdG8gYm90aCBRZW11RndDZmdBY3BpLmMgYW5kIENsb3VkSHZBY3BpLmMsIGFuZA0KPiBJJ20g Y29tZm9ydGFibGUgcmV2aWV3aW5nIHRoYXQgZm9yIGJvdGggb2YgdGhlc2Ugc291cmNlIGZpbGVz LiBUaGlzIHBhdGNoIGNhbg0KPiBhbHNvIGNvdmVyICJzdGVwIDMiLCB0aGUgcmVtb3ZhbCBvZiAi UWVtdUFjcGlUYWJsZU5vdGlmeS5oIi4NCj4gDQo+IFBhdGNoZXMgIzIgYW5kICMzIHNob3VsZCBj b3ZlciAic3RlcCA0IiwgKnNwbGl0KiB0byBzZXBhcmF0ZSBwYXRjaGVzIGJldHdlZW4NCj4gQ2xv dWRIdkFjcGkuYyBhbmQgUWVtdUZ3Q2ZnQWNwaS5jLiBJIHdvdWxkIG9ubHkgbGlrZSB0byByZXZp ZXcgdGhlDQo+IFFlbXVGd0NmZ0FjcGkuYyBjaGFuZ2UsIGZyb20gdGhlc2UuDQo+IA0KPiBTbyB0 aGVuIHdlIGFyZSBsZWZ0IHdpdGggc3RlcHMgMSBhbmQgMi4NCj4gDQo+IFBhdGNoICM0IHNob3Vs ZCBqdXN0IGNvdmVyIHN0ZXAgMSwgYWRkIGJhY2sgdGhlIGRlYnVnIGxvZy4gVGhpcyBvbmx5IGFm ZmVjdHMNCj4gUWVtdUZ3Q2ZnQWNwaS5jLCB3aGljaCBJJ2QgbGlrZSB0byByZXZpZXcuDQo+IA0K PiBGb3Igc3RlcCAyLCBwYXRjaGVzICM1IGFuZCAjNiBzaG91bGQgYWRkIHRoZSBtaXNzaW5nIGVy cm9yIGhhbmRsaW5nLCBhbmQNCj4gbW92ZSB0aGUgcHJvdG9jb2wgaW5zdGFsbGF0aW9uIHRvIHRo ZSByaWdodCBzcG90LCBhbmQgZXh0ZW5kIHRoZSBlcnJvciBwYXRoDQo+IGFjY29yZGluZ2x5LiBU aGlzIG11c3QgKmRlZmluaXRlbHkqIGJlIHNlcHJhdGUgZm9yIFFlbXVGd0NmZ0FjcGkuYyBhbmQN Cj4gQ2xvdWRIdkFjcGkuYywgaGVuY2UgbXkgcmVxdWVzdCBmb3Igc3BsaXR0aW5nIHN0ZXAgMiB0 byB0d28gcGF0Y2hlcyAoIzUsICM2KS4gSQ0KPiB3b24ndCBsb29rIGF0IHRoZSBDbG91ZEh2QWNw aS5jLCBidXQgd2lsbCBzY3J1dGluaXplIHRoZSBoZWNrIG91dCBvZg0KPiBRZW11RndDZmdBY3Bp LmMuDQo+IA0KPiAtLSotLQ0KPiANCj4gSSBjYW4gYWxyZWFkeSBzYXkgdGhhdCB5b3VyIGN1cnJl bnQgY2hhbmdlIGZvciBzdGVwIDIgaW4gIlFlbXVGd0NmZ0FjcGkuYyIgaXMNCj4gd3JvbmcsIG9y IGF0IGxlYXN0IGluY29tcGxldGUuDQo+IA0KPiBQbGVhc2UgY29uc2lkZXIgdGhlIGZvbGxvd2lu ZyBwYXR0ZXJuOg0KPiANCj4gSXQgaXMgZnJlcXVlbnRseSB0aGUgY2FzZSB0aGF0IChhKSBhIGZ1 bmN0aW9uIG5lZWRzIHRvIGNyZWF0ZSBhIHNldCBvZg0KPiAqcGVybWFuZW50KiByZXNvdXJjZXMg KG9iamVjdHMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgdGhlIGZ1bmN0aW9uJ3MgIm91dHB1dCIpLA0K PiB3aGljaCBhcmUgc3VwcG9zZWQgdG8gYmUgcHVibGlzaGVkIGlmIHRoZSBmdW5jdG9uIGVudGly ZWx5IHN1Y2NlZWRzLCB3aGlsZSBhdA0KPiB0aGUgc2FtZSB0aW1lIChiKSB0aGUgZnVuY3Rpb24g bmVlZHMgc29tZSAqdGVtcG9yYXJ5KiByZXNvdXJjZXMgZm9yIHRoZQ0KPiBjcmVhdGlvbiBvZiB0 aGUgcGVybWFuZW50IHJlc291cmNlIHNldC4gVGhlICJwZXJtYW5lbnQiIHJlc291cmNlcyBtdXN0 IGJlDQo+IHByZXNlcnZlZCAoPSBvdXRwdXQgdG8gdGhlIGNhbGxlciwgb3IgImNvbW1pdHRlZCIg dG8gdGhlIHN5c3RlbSBhcyBhIHNpZGUNCj4gZWZmZWN0KSBpZiBhbmQgb25seSBpZiBhbGwgc3Rl cHMgc3VjY2VlZCwgd2hlcmVhcyB0aGUgInRlbXBvcmFyeSIgcmVzb3VyY2VzDQo+IG11c3QgYmUg dG9ybiBkb3duIChvciByb2xsZWQNCj4gYmFjaykgKnVuY29uZGl0aW9uYWxseSouDQo+IA0KPiBJ biBJbnN0YWxsUWVtdUZ3Q2ZnVGFibGVzKCksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyAqdGVtcG9y YXJ5Kg0KPiByZXNvdXJjZXM6DQo+IA0KPiAoMS4xKSBMb2FkZXJTdGFydCAtLSB0aGUgUUVNVSBs aW5rZXIvbG9hZGVyIHNjcmlwdCBkb3dubG9hZGVkIGZyb20NCj4gICAgICAgZndfY2ZnDQo+IA0K PiAoMS4yKSBBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRUbzMyQml0IC0tIGEgZGljdGlvbmFyeSBvZiBm d19jZmcgYmxvYnMgdGhhdA0KPiAgICAgICBtdXN0IG5vdCBiZSBhbGxvY2F0ZWQgZnJvbSA2NC1i aXQgYWRkcmVzcyBzcGFjZQ0KPiANCj4gKDEuMykgVHJhY2tlciAtLSBhIGRpY3Rpb25hcnkgY29s bGVjdGluZyB0aGUgZndfY2ZnIGJsb2JzIHRoYXQgd2UgaGF2ZQ0KPiAgICAgICB0aHVzIGZhciBk b3dubG9hZGVkIGZyb20gUUVNVSwgYXMgaW5zdHJ1Y3RlZCBieSB0aGUgbGlua2VyL2xvYWRlcg0K PiAgICAgICBzY3JpcHQNCj4gDQo+ICgxLjQpIEluc3RhbGxlZEtleSAtLSBhbiBhcnJheSBjb2xs ZWN0aW5nIHRoZSBrZXlzIG9mIHRoZSBBQ1BJIHRhYmxlcw0KPiAgICAgICB3ZSd2ZSB0aHVzIGZh ciBpbnN0YWxsZWQgd2l0aCB0aGUgQUNQSSBUYWJsZSBQcm90b2NvbC4NCj4gDQo+ICgxLjUpIFNl ZW5Qb2ludGVycyAtLSBhIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiB0aGUgY29tbWFuZCB0eXBlcyBp biB0aGUNCj4gICAgICAgbGlua2VyL2xvYWRlciBzY3JpcHQsIGVuc3VyaW5nIHRoYXQgd2UgZG9u J3QgYXR0ZW1wdCB0byBpbnN0YWxsDQo+ICAgICAgIHJlZmVyZW5jZWQgdGFibGVzIG1vcmUgdGhh biBvbmNlDQo+IA0KPiBBbmQgd2UgaGF2ZSB0aGUgZm9sbG93aW5nICpwZXJtYW5lbnQqIHJlc291 cmNlcyAoY29tbWl0dGVkIHRvIHRoZSBzeXN0ZW0NCj4gYXMgYSBzaWRlLWVmZmVjdCkNCj4gDQo+ ICgyLjEpIFMzQ29udGV4dCAtLSBlZmZlY3RpdmVseSBhbiBTMyBCb290IFNjcmlwdCByZXByZXNl bnRhdGlvbi4gU29tZQ0KPiAgICAgICBvcGVyYXRpb25zIGluIHRoZSBBQ1BJIGxpbmtlci9sb2Fk ZXIgc2NyaXB0IG9mIFFFTVUgLS0gbmFtZWx5LCB0aGUNCj4gICAgICAgIndyaXRlIHBvaW50ZXIi IGNvbW1hbmRzIC0tIGNvbnZleSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBndWVzdA0KPiAgICAgICAq YmFjayogdG8gUUVNVSwgb3ZlciBmd19jZmcsIGFuZCB0aGVzZSBtdXN0IGJlIHJlcGxheWVkIGR1 cmluZyBTMw0KPiAgICAgICByZXN1bWUuIFRoZSBzeXN0ZW0gcmVzZXQgdGhhdCBvY2N1cnMgYmV0 d2VlbiBzdXNwZW5kIGFuZCByZXN1bWUNCj4gICAgICAgY2xlYXJzIG91dCBhIGJ1bmNoIG9mIGlu Zm9ybWF0aW9uIGZyb20gUUVNVSwgYW5kIHRoZXNlIG9wZXJhdGlvbnMNCj4gICAgICAgcmUtdGVh Y2ggYSBzZXQgb2YgaW5mb3JtYXRpb24gdG8gUUVNVS4NCj4gDQo+ICgyLjIpIHRoZSAqY3VycmVu dCBydW50aW1lIGVmZmVjdCogb2YgdGhlIHNhbWUgIndyaXRlIHBvaW50ZXIiIGNvbW1hbmRzDQo+ ICAgICAgIGFzIGRpc2N1c3NlZCBhYm92ZS4gUzNDb250ZXh0IGlzIGZvciBTMyByZXN1bWUsIGJ1 dCB0aGUgc2FtZQ0KPiAgICAgICBjb21tYW5kcyBtdXN0IHRha2UgcHJpbWFyaWx5ICpyaWdodCBu b3cqLg0KPiANCj4gKDIuMykgdGhlIHNldCBvZiBBQ1BJIHRhYmxlcyB3ZSd2ZSBpbnN0YWxsZWQN Cj4gDQo+IE5vdywgaWYgeW91IGxvb2sgYXQgSW5zdGFsbFFlbXVGd0NmZ1RhYmxlcygpICpiZWZv cmUqIHlvdXIgb3JpZ2luYWwgY2hhbmdlDQo+ICg5ZmRjNzBhZjZiYTgpLCB5b3Ugd2lsbCBzZWUg dGhhdDoNCj4gDQo+IChhKSB0aGUgcHVibGljYXRpb24gb2YgUzNDb250ZXh0IChwZXJtYW5lbnQg cmVzb3VyY2UgMi4xKSBhcyBhbiBTMyBCb290DQo+ICAgICBTY3JpcHQgaXMgdGhlICpmaW5hbCog c3RlcCBpbiB0aGUgZnVuY3Rpb24uIER1ZSB0byB2YXJpb3VzIHJlYXNvbnMsDQo+ICAgICByb2xs aW5nIGJhY2sgdGhpcyBzdGVwIGlzIG5vdCBwb3NzaWJsZS4gVGhlcmVmb3JlIG5vIGFjdGlvbiB0 aGF0DQo+ICAgICBjb3VsZCBmYWlsIG11c3QgZXZlciBiZSBwZXJmb3JtZWQgaW4gdGhlIGZ1bmN0 aW9uIGFmdGVyIHRoaXMgYWN0aW9uLg0KPiANCj4gKGIpIFRoZSBlcnJvciBwYXRoIGlzIGNvbnN0 cnVjdGVkIHdpdGggKm11bHRpcGxlIGxhYmVscyogaW4gc3VjaCBhIHdheQ0KPiAgICAgdGhhdCB0 aGUgb3JkZXIgb2Ygcm9sbGJhY2sgb3BlcmF0aW9ucyBpcyB0aGUgKnJldmVyc2Ugb3JkZXIqIG9m DQo+ICAgICBjb25zdHJ1Y3Rpb25zLCBpbnRlcm1peGluZyBib3RoIHRlbXBvcmFyeSBhbmQgcGVy bWFuZW50IHJlc291cmNlcy4NCj4gICAgIFdoZW4gYSBjb25zdHJ1Y3RpdmUgb3BlcmF0aW9uIGZh aWxzLCBhIGp1bXAgaXMgdGFrZW4gc3VjaCB0aGF0IHRoZQ0KPiAgICAgcm9sbGJhY2sgc3RlcHMg Zm9yIGFsbCBjb25zdHJ1Y3RpdmUgb3BlcmF0aW9ucyAqbm90IHlldCByZWFjaGVkKiBhcmUNCj4g ICAgIHNraXBwZWQsIGFuZCB0aGUgcm9sbGJhY2tzIGZvciB0aGUgY29uc3RydWN0aW9ucyB0aGF0 ICpoYXZlKg0KPiAgICAgc3VjY2VlZGVkIGFyZSBhbGwgcGVyZm9ybWVkLiBXZSBjYW4gY2FsbCB0 aGlzIGEgImNhc2NhZGUiIG9mIGVycm9yDQo+ICAgICBoYW5kbGluZyBsYWJlbHMuDQo+IA0KPiAo YykgTm90ZSB0aGF0IGluIHNvbWUgKGluZnJlcXVlbnQhKSBjYXNlcywgKm11bHRpcGxlKiByZXNv dXJjZXMgY2FuIGJlDQo+ICAgICByZWxlYXNlZCB1bmRlciB0aGUgc2FtZSBlcnJvciBoYW5kbGlu ZyBsYWJlbCwgYnV0IHRoYXQgaXMgZ2VuZXJhbGx5DQo+ICAgICB0aGUgZXhjZXB0aW9uLiBJdCBp cyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBuYXR1cmUgb2Ygc29tZQ0KPiAgICAgY29uc3RydWN0aW9u IG9wZXJhdGlvbnMgaXMgc3VjaCB0aGF0IHRoZXkgY2Fubm90IGZhaWwgc2VwYXJhdGVseQ0KPiAg ICAgKGJ1dCBzdGlsbCBuZWVkIHRlYXItZG93biksIG9yIHNvbWUgb2YgdGhlIHJlc291cmNlcyBh cmUgZGF0YSBzZXRzDQo+ICAgICB3aGljaCBjYW4gYmUgZ2VudWluZWx5IGVtcHR5LCBhbmQgd2hv c2UgdGVhci1kb3duIG5lZWRzIG5vDQo+ICAgICBzZXBhcmF0aW9uIGJldHdlZW4gZW1wdHkgdnMu IG5vbi1lbXB0eS4NCj4gDQo+ICAgICBZb3UgY2FuIHNlZSB0aGlzIHdpdGggdGhlIHVuaW5zdGFs bGF0aW9uIG9mIHRoZSBBQ1BJIHRhYmxlcyB3ZSd2ZQ0KPiAgICAgaW5zdGFsbGVkIChwZXJtYW5l bnQgcmVzb3VyY2UgMi4zKSwgd2hpY2ggaXMgZ3JvdXBlZCB0b2dldGhlciB1bmRlcg0KPiAgICAg dGhlIHNhbWUgIlVuaW5zdGFsbEFjcGlUYWJsZXMiIGxhYmVsIHdpdGggdGhlIHJlbGVhc2luZyBv ZiB0aGUNCj4gICAgICJTZWVuUG9pbnRlcnMiIGRpY3Rpb25hcnkgKHRlbXBvcmFyeSByZXNvdXJj ZSAxLjUpLg0KPiANCj4gICAgIFRoZXJlIGlzIG5vIGdyYW5kIHRoZW9yeSBiZWhpbmQgdGhpczsg aXQgc2ltcGx5IG1pcnJvcnMgdGhlDQo+ICAgICBjb25zdHJ1Y3Rpb24gcGF0aDoNCj4gDQo+ID4g ICBTZWVuUG9pbnRlcnMgPSBPcmRlcmVkQ29sbGVjdGlvbkluaXQgKFBvaW50ZXJDb21wYXJlLCBQ b2ludGVyQ29tcGFyZSk7DQo+ID4gICBpZiAoU2VlblBvaW50ZXJzID09IE5VTEwpIHsNCj4gPiAg ICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgIGdvdG8gRnJlZUtleXM7 DQo+ID4gICB9DQo+ID4NCj4gPiAgIC8vDQo+ID4gICAvLyBzZWNvbmQgcGFzczogaWRlbnRpZnkg YW5kIGluc3RhbGwgQUNQSSB0YWJsZXMNCj4gPiAgIC8vDQo+ID4gICBJbnN0YWxsZWQgPSAwOw0K PiA+ICAgZm9yIChMb2FkZXJFbnRyeSA9IExvYWRlclN0YXJ0OyBMb2FkZXJFbnRyeSA8IExvYWRl ckVuZDsgKytMb2FkZXJFbnRyeSkNCj4gew0KPiA+ICAgICBpZiAoTG9hZGVyRW50cnktPlR5cGUg PT0gUWVtdUxvYWRlckNtZEFkZFBvaW50ZXIpIHsNCj4gPiAgICAgICBTdGF0dXMgPSBQcm9jZXNz Mm5kUGFzc0NtZEFkZFBvaW50ZXIgKA0KPiA+ICAgICAgICAgICAgICAgICAgJkxvYWRlckVudHJ5 LT5Db21tYW5kLkFkZFBvaW50ZXIsDQo+ID4gICAgICAgICAgICAgICAgICBUcmFja2VyLA0KPiA+ ICAgICAgICAgICAgICAgICAgQWNwaVByb3RvY29sLA0KPiA+ICAgICAgICAgICAgICAgICAgSW5z dGFsbGVkS2V5LA0KPiA+ICAgICAgICAgICAgICAgICAgJkluc3RhbGxlZCwNCj4gPiAgICAgICAg ICAgICAgICAgIFNlZW5Qb2ludGVycw0KPiA+ICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgICAgICBnb3RvIFVuaW5zdGFsbEFj cGlUYWJsZXM7DQo+ID4gICAgICAgfQ0KPiA+ICAgICB9DQo+ID4gICB9DQo+IA0KPiAgICAgSWYg IlNlZW5Qb2ludGVycyIgKGEgZGljdGlvbmFyeSkgaXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5 LCBidXQNCj4gICAgICphbnkqIEFDUEkgdGFibGUgaW5zdGFsbGF0aW9uIGZhaWxzIGluIHRoZSBs b29wIGxhdGVyLCB0aGVuIHdlIG11c3QNCj4gICAgIHRlYXIgZG93biAiU2VlblBvaW50ZXJzIiAo cmVnYXJkbGVzcyBvZiBob3cgbWFueSBlbnRyaWVzIGl0DQo+ICAgICBjb250YWlucykgKmFuZCog dW5pbnN0YWxsIGFsbCBwcmV2aW91c2x5IGluc3RhbGxlZCBBQ1BJIHRhYmxlcyBhcw0KPiAgICAg d2VsbCAodXNpbmcgdGhlIGtleXMgd2UndmUgcHV0IGludG8gSW5zdGFsbGVkS2V5IC0tIHRoZWly IG51bWJlciBpcw0KPiAgICAgZ2l2ZW4gYnkgSW5zdGFsbGVkKS4NCj4gDQo+IChkKSBWZXJ5IGlt cG9ydGFudGx5LCBiZWNhdXNlIHdlIGhhdmUgYm90aCBwZXJtYW5lbnQgYW5kIHRlbXBvcmFyeQ0K PiAgICAgcmVzb3VyY2VzLCB3ZSBtdXN0IGZhbGwgdGhyb3VnaCB0aGUgZXJyb3IgcGF0aCBhdCB0 aGUgZW5kIG9mIHRoZQ0KPiAgICAgZnVuY3Rpb24gZXZlbiBpZiB0aGUgZnVuY3Rpb24gYXMgYSB3 aG9sZSBzdWNjZWVkcy4gVGhlcmVmb3JlIHRoZQ0KPiAgICAgdGVhci1kb3duIHN0ZXBzIG9uIHRo ZSBlcnJvciBwYXRoIGZvciB0aGUgKnBlcm1hbmVudCogcmVzb3VyY2VzIGFyZQ0KPiAgICAgYWxs ICpyZXN0cmljdGVkKiB0byAiU3RhdHVzIiBkaWZmZXJpbmcgZnJvbSBFRklfU1VDQ0VTUy4gSW4g b3RoZXINCj4gICAgIHdvcmRzLCB3ZSBnbyB0aHJvdWdoIHRoZSBlbnRpcmUgY2FzY2FkZSBpbiB0 aGlzICgiZ3JhbmQgc3VjY2VzcyIpDQo+ICAgICBjYXNlLCBidXQgb21pdCB0aG9zZSByb2xsYmFj ayBzdGVwcyB0aGF0IHdvdWxkIGFmZmVjdCBvdXIgcGVybWFuZW50DQo+ICAgICByZXNvdXJjZXMs IHdoaWNoIGFyZSBub3cgYWxsIGRvbmUuIE9ubHkgdGhlIHRlbXBvcmFyaWVzIGFyZSB0b3JuDQo+ ICAgICBkb3duLg0KPiANCj4gICAgIEF0IHRoZSB2ZXJ5IGVuZCwgd2UgaGF2ZSAicmV0dXJuIFN0 YXR1cyIsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aA0KPiAgICAgdGhlIGZvbGxvd2luZyB0d28g cmVxdWlyZW1lbnRzICh3aGljaCB0aGUgZnVuY3Rpb24gZG9lcyBzYXRpc2Z5KToNCj4gDQo+ICAg ICAtIGFueSB0aW1lIHdlIHBlcmZvcm0gYSAiZ290byIgdG8gYW4gZXJyb3IgaGFuZGxpbmcgbGFi ZWwsIFN0YXR1cw0KPiAgICAgICBtdXN0IGJlIHNldCB0byBhbiBlcnJvciB2YWx1ZSwgZWl0aGVy IG1hbnVhbGx5LCBvciBieSB0aGUNCj4gICAgICAgb3BlcmF0aW9uIHRoYXQganVzdCBmYWlsZWQg KGFuZCBiZWNhdXNlIG9mIHdoaWNoIHdlJ3JlIHRha2luZyB0aGUNCj4gICAgICAgZ290bykNCj4g DQo+ICAgICAtIGJ5IHRoZSB0aW1lIHdlIHJlYWNoIHRoZSBmaXJzdCBlcnJvciBoYW5kbGluZyBs YWJlbCB2aWEgKm5vcm1hbA0KPiAgICAgICBwcm9ncmVzc2lvbiogKG5vIGdvdG8pLCAiU3RhdHVz IiBtdXN0IGJlIHNldCB0byBFRklfU1VDQ0VTUy4gVGhpcw0KPiAgICAgICBpcyBhY2hpZXZhYmxl IGluIHR3byB3YXlzOiBvbmUsIHNldCBTdGF0dXMgdG8gRUZJX1NVQ0NFU1MNCj4gICAgICAgZXhw bGljaXRseSwgcmlnaHQgdGhlcmU7IG9yIHR3bzogcHJvdmUgdGhhdCwgYnkgdGhhdCBwb2ludCwg U3RhdHVzDQo+ICAgICAgIHdpbGwgaGF2ZSBiZWVuIHNldCB0byBFRklfU1VDQ0VTUy4gSW4gdGhp cyBmdW5jdGlvbiwgdGhlIGxhdHRlciBpcw0KPiAgICAgICB0aGUgY2FzZS4NCj4gDQo+IC0tKi0t DQo+IA0KPiBPa2F5LiBBZnRlciB0aGlzIGJyaWVmIGludHJvZHVjdGlvbiwgY29uc2lkZXIgd2hh dCB5b3UncmUgZG9pbmcgd2l0aCB0aGUNCj4gcHJvdG9jb2wgaW5zdGFsbGF0aW9uOg0KPiANCj4g LSB0aGUgcHJvdG9jb2wgaW4gdGhlIHByb3RvY29sIGRhdGFiYXNlIGlzIGEgbmV3IHBlcm1hbmVu dCByZXNvdXJjZSAoYQ0KPiAgIHN5c3RlbS13aWRlIHNpZGUtZWZmZWN0KQ0KPiANCj4gLSBpbnN0 YWxsaW5nIHRoZSBwcm90b2NvbCBpcyBhbiBvcGVyYXRpb24gdGhhdCBjYW4gZmFpbA0KPiANCj4g LSBwcm90b2NvbCBpbnN0YWxsYXRpb24gKmNhbiogYmUgcm9sbGVkIGJhY2sgKEkgZGlzY3Vzc2Vk IHRoZSBUUEwNCj4gICBjb25jZXJucyBhcm91bmQgdGhpcyBpbiB0aGUgQnVnemlsbGEsIGJ1dCBJ J20gbm90IGdvaW5nIHRvIHJlcGVhdCB0aGVtDQo+ICAgaGVyZSkuIFRoaXMgZmFjdCAtLSBpLmUu IHRoYXQgdGhlIHByb3RvY29sIGluc3RhbGxhdGlvbiAqY2FuKiBiZQ0KPiAgIHJvbGxlZCBiYWNr IC0tIGlzIHJlYWxseSBuaWNlIEJUVywgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgb25lDQo+ICAg b3BlcmF0aW9uIGluIHRoZSBmdW5jdGlvbiB0aGF0ICpjYW5ub3QqLiBXZSBjYW4ndCBoYXZlICp0 d28qIGZpbmFsDQo+ICAgc3RlcHMgaW4gdGhlIGZ1bmN0aW9uLCBzbyBpdCdzIGp1c3QgYXMgd2Vs bCB0aGF0IHRoZSBwcm90b2NvbA0KPiAgIGluc3RhbGxhdGlvbiAqbmVlZCBub3QqIGJlIHRoZSBs YXN0IG9uZS4NCj4gDQo+IFNvIHdoYXQgeW91IG5lZWQgdG8gZG8gaW4gcGF0Y2gjNSBvciBwYXRj aCM2IGlzIHRoaXMgKGRpZmYgc2hvd24gd2l0aCA2IGxpbmVzDQo+IG9mIGNvbnRleHQpOg0KPiAN Cj4gPiBkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvUWVtdUZ3Q2ZnQWNwaS5j DQo+ID4gYi9Pdm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9RZW11RndDZmdBY3BpLmMNCj4gPiBpbmRl eCAzODU4NGZkNjA4ZGYuLjBjMmIyMjE1ZjMxNiAxMDA2NDQNCj4gPiAtLS0gYS9Pdm1mUGtnL0Fj cGlQbGF0Zm9ybUR4ZS9RZW11RndDZmdBY3BpLmMNCj4gPiArKysgYi9Pdm1mUGtnL0FjcGlQbGF0 Zm9ybUR4ZS9RZW11RndDZmdBY3BpLmMNCj4gPiBAQCAtMTI0Niw1MCArMTI0Niw2MyBAQCBJbnN0 YWxsUWVtdUZ3Q2ZnVGFibGVzICgNCj4gPiAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICAgICAgICAgIGdvdG8gVW5pbnN0YWxsQWNwaVRhYmxlczsNCj4gPiAgICAgICAgfQ0K PiA+ICAgICAgfQ0KPiA+ICAgIH0NCj4gPg0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gSW5zdGFsbCBh IHByb3RvY29sIHRvIG5vdGlmeSB0aGF0IHRoZSBBQ1BJIHRhYmxlIHByb3ZpZGVkIGJ5DQo+ID4g KyBRZW11IGlzICAvLyByZWFkeS4NCj4gPiArICAvLw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+SW5z dGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gPiArICAgICAgICAgICAgICAgICAgJlFlbXVBY3Bp SGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAmZ1FlbXVBY3BpVGFibGVOb3RpZnlQcm90 b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0K PiA+ICsgICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgZ290byBVbmluc3RhbGxB Y3BpVGFibGVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gICAgLy8NCj4gPiAgICAvLyBUcmFuc2xh dGluZyB0aGUgY29uZGVuc2VkIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVINCj4gY29tbWFuZHMg dG8gQUNQSSBTMw0KPiA+ICAgIC8vIEJvb3QgU2NyaXB0IG9wY29kZXMgaGFzIHRvIGJlIHRoZSBs YXN0IG9wZXJhdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLA0KPiBiZWNhdXNlDQo+ID4gICAgLy8gaWYg aXQgc3VjY2VlZHMsIGl0IGNhbm5vdCBiZSB1bmRvbmUuDQo+ID4gICAgLy8NCj4gPiAgICBpZiAo UzNDb250ZXh0ICE9IE5VTEwpIHsNCj4gPiAgICAgIFN0YXR1cyA9IFRyYW5zZmVyUzNDb250ZXh0 VG9Cb290U2NyaXB0IChTM0NvbnRleHQpOw0KPiA+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+IC0gICAgICBnb3RvIFVuaW5zdGFsbEFjcGlUYWJsZXM7DQo+ID4gKyAgICAgIGdv dG8gVW5pbnN0YWxsUWVtdUFjcGlUYWJsZU5vdGlmeVByb3RvY29sOw0KPiA+ICAgICAgfQ0KPiA+ DQo+ID4gICAgICAvLw0KPiA+ICAgICAgLy8gT3duZXJzaGlwIG9mIFMzQ29udGV4dCBoYXMgYmVl biB0cmFuc2ZlcnJlZC4NCj4gPiAgICAgIC8vDQo+ID4gICAgICBTM0NvbnRleHQgPSBOVUxMOw0K PiA+ICAgIH0NCj4gPg0KPiA+ICtVbmluc3RhbGxRZW11QWNwaVRhYmxlTm90aWZ5UHJvdG9jb2w6 DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgZ0JTLT5Vbmluc3Rh bGxQcm90b2NvbEludGVyZmFjZSAoDQo+ID4gKyAgICAgICAgICAgUWVtdUFjcGlIYW5kbGUsDQo+ ID4gKyAgICAgICAgICAgJmdRZW11QWNwaVRhYmxlTm90aWZ5UHJvdG9jb2xHdWlkLA0KPiA+ICsg ICAgICAgICAgIE5VTEwNCj4gPiArICAgICAgICAgICApOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g IFVuaW5zdGFsbEFjcGlUYWJsZXM6DQo+ID4gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ICAgICAgLy8NCj4gPiAgICAgIC8vIHJvbGwgYmFjayBwYXJ0aWFsIGluc3RhbGxhdGlvbg0K PiA+ICAgICAgLy8NCj4gPiAgICAgIHdoaWxlIChJbnN0YWxsZWQgPiAwKSB7DQo+ID4gICAgICAg IC0tSW5zdGFsbGVkOw0KPiA+ICAgICAgICBBY3BpUHJvdG9jb2wtPlVuaW5zdGFsbEFjcGlUYWJs ZSAoQWNwaVByb3RvY29sLCBJbnN0YWxsZWRLZXlbSW5zdGFsbGVkXSk7DQo+ID4gICAgICB9DQo+ ID4gICAgfSBlbHNlIHsNCj4gPiAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBpbnN0YWxs ZWQgJWQgdGFibGVzXG4iLCBfX0ZVTkNUSU9OX18sDQo+IEluc3RhbGxlZCkpOw0KPiA+IC0gICAg Ly8NCj4gPiAtICAgIC8vIEluc3RhbGwgYSBwcm90b2NvbCB0byBub3RpZnkgdGhhdCB0aGUgQUNQ SSB0YWJsZSBwcm92aWRlZCBieSBRZW11IGlzDQo+ID4gLSAgICAvLyByZWFkeS4NCj4gPiAtICAg IC8vDQo+ID4gLSAgICBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ID4gLSAgICAg ICAgICAgJm1RZW11QWNwaUhhbmRsZSwNCj4gPiAtICAgICAgICAgICAmZ1FlbXVBY3BpVGFibGVO b3RpZnlQcm90b2NvbEd1aWQsDQo+ID4gLSAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0Us DQo+ID4gLSAgICAgICAgICAgJm1BY3BpTm90aWZ5UHJvdG9jb2wNCj4gPiAtICAgICAgICAgICAp Ow0KPiA+ICAgIH0NCj4gPg0KPiA+ICAgIGZvciAoU2VlblBvaW50ZXJFbnRyeSA9IE9yZGVyZWRD b2xsZWN0aW9uTWluIChTZWVuUG9pbnRlcnMpOw0KPiA+ICAgICAgICAgU2VlblBvaW50ZXJFbnRy eSAhPSBOVUxMOw0KPiA+ICAgICAgICAgU2VlblBvaW50ZXJFbnRyeSA9IFNlZW5Qb2ludGVyRW50 cnkyKQ0KPiA+ICAgIHsNCj4gDQo+IFlvdXIgcHJvcG9zZWQgc29sdXRpb24gb24gdGhlIGVycm9y IHBhdGggLS0gcGxhY2luZyB0aGUgdW5pbnN0YWxsYXRpb24gdW5kZXINCj4gdGhlIGV4aXN0ZW50 ICJVbmluc3RhbGxBY3BpVGFibGVzIiBsYWJlbCwgYW5kIGdhdGluZyBpdCB3aXRoDQo+IChRZW11 QWNwaUhhbmRsZSAhPSBOVUxMKSAtLSBtYXkgbm90IGJlIHdyb25nLCBmdW5jdGlvbmFsbHkgc3Bl YWtpbmcsIGJ1dCBpdA0KPiBzdGlsbCBicmVha3MgdGhlIGNvaGVzaW9uIG9mIHRoZSBmdW5jdGlv bi4NCj4gDQo+IFNwZWNpZmljYWxseSwgdGhlIGNvaGVzaW9uLWJyZWFrIGlzIHRoYXQgeW91ciBw cm9wb3NhbCBjcmVhdGVzIGEgcGF0aCB0aHJvdWdoDQo+IHRoZSBjb2RlIHdoZXJlIHRoZSAoUWVt dUFjcGlIYW5kbGUgIT0gTlVMTCkgY29uZGl0aW9uIGlzIGV2YWx1YXRlZCwgb24NCj4gdGhlIGVy cm9yIHBhdGgsICp3aXRob3V0IGNvbnRyb2wgZXZlciBoYXZpbmcgcmVhY2hlZCoNCj4gSW5zdGFs bFByb3RvY29sSW50ZXJmYWNlKCkgcHJldmlvdXNseS4gTmFtZWx5LCBpZiBvbmUgb2YgdGhlDQo+ IFByb2Nlc3MybmRQYXNzQ21kQWRkUG9pbnRlcigpIGNhbGxzIGZhaWxzLCBpbiB0aGUgbG9vcCBh Ym92ZQ0KPiBJbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UoKS4gU2F2aW5nIHRoYXQgY29kZSBwYXRo IGlzIHdoeSB5b3UgbmVlZCB0byBzZXQNCj4gIlFlbXVBY3BpSGFuZGxlIiB0byBOVUxMIGF0IHRo ZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLg0KPiANCj4gSW4gZmFjdCwgSSByZXF1ZXN0IHRoYXQgeW91 ICpub3QqIHNldCBRZW11QWNwaUhhbmRsZSB0byBOVUxMIGF0IHRoZSB0b3Agb2YNCj4gdGhlIGZ1 bmN0aW9uLiBMZXR0aW5nICpvbmx5KiBJbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UoKSBzZXQgaXQs IHVwb24gc3VjY2VzcywgaXMNCj4gc2FmZSwgYXMgbG9uZyBhcyB5b3UgdXNlIHRoZSBwYXR0ZXJu IHNob3duIGFib3ZlLg0KPiANCj4gLS0qLS0NCj4gDQo+IE9rYXksIHlldCBhbm90aGVyIHRvcGlj LiBCZWZvcmUgeW91IGFzaywgbGV0IG1lIGNvbW1lbnQgb24gdGhpcyAoZnJvbQ0KPiBwcmVleGlz dGVudCBjb2RlKToNCj4gDQo+ID4gRnJlZVMzQ29udGV4dDoNCj4gPiAgIGlmIChTM0NvbnRleHQg IT0gTlVMTCkgew0KPiA+ICAgICBSZWxlYXNlUzNDb250ZXh0IChTM0NvbnRleHQpOw0KPiA+ICAg fQ0KPiANCj4gVGhpcyBpcyBiZWluZyBnYXRlZCBzbyBiZWNhdXNlIFMzQ29udGV4dCB1bmRlcmdv ZXMgYW4gb3duZXJzaGlwIHRyYW5zZmVyDQo+IC0tIGluIHRoYXQgbGFzdCwgaW1wb3NzaWJsZS10 by1yb2xsYmFjayBzdGVwIG9uIHRoZSBjb25zdHJ1Y3Rpb24gcGF0aCAtLSwgYW5kDQo+IGJlY2F1 c2UgUzNDb250ZXh0IGlzICpvcHRpb25hbCogYXMgd2VsbC4gU28gYXQgdGhpcyBwb2ludCBTM0Nv bnRleHQgaXMgbm9uLQ0KPiBOVUxMIHByZWNpc2VseSBpZiB3ZSd2ZSBoYWQgYSBmYWlsdXJlICpB TkQqIFMzQ29udGV4dCB3YXMgKm5lZWRlZCogaW4gdGhlDQo+IGZpcnN0IHBsYWNlLiBKdXN0IGNo ZWNraW5nIEVGSV9FUlJPUiAoU3RhdHVzKSBpcyBpbnN1ZmZpY2llbnQsIGJlY2F1c2UgZXZlbiBv bg0KPiBlcnJvciwgUzNDb250ZXh0IGNvdWxkIHN0aWxsIGJlIE5VTEwgKGl0J3Mgb3B0aW9uYWwp LCBhbmQgb25jZSB3ZSBjaGVjayBmb3INCj4gbnVsbGl0eSwgY2hlY2tpbmcgU3RhdHVzIGJlY29t ZXMgc3VwZXJmbHVvdXMuIChTM0NvbnRleHQhPU5VTEwgYXQgdGhpcyBwb2ludA0KPiBpbXBsaWVz IEVGSV9FUlJPUihTdGF0dXMpLCBwZXIgYWJvdmUuKQ0KPiANCj4gLS0qLS0NCj4gDQo+IEZpbmFs bHksIEkgKndpbGwqIGFkbWl0IHRoYXQgdGhlIG9yaWdpbmFsIHBsYWNlbWVudCBvZiB0aGUgREVC VUcgbWVzc2FnZSBpcyBub3QNCj4gaWRlYWwuIEl0IHNob3VsZCBub3QgYmUgb24gYW4gImVsc2Ui IGJyYW5jaCB1bmRlciB0aGUgIlVuaW5zdGFsbEFjcGlUYWJsZXMiDQo+IGxhYmVsLiBJbnN0ZWFk LCBpdCBzaG91bGQgYmUsIGFuZCAqc3RheSosIGp1c3QgYWJvdmUgdGhlIHZlcnkgZmlyc3QgZXJy b3INCj4gaGFuZGxpbmcgbGFiZWwsIHdoZXJlIHdlIGVmZmVjdGl2ZWx5IGRlY2xhcmUgdGhlIGZ1 bmN0aW9uICJjb21wbGV0ZWQiLiBTbyB0aGUNCj4gb3JpZ2luYWwgaW5jb3JyZWN0IHBsYWNlbWVu dCBvZiB0aGUgREVCVUcgaXMgbXkgbWlzdGFrZSwgZnJvbSBlYXJsaWVyIC0tIEknbQ0KPiBzb3Jy eS4NCj4gDQo+IFRodXMsIGluIHBhdGNoIzQsIHBsZWFzZSBkbyByZWluc3RhdGUgdGhlIERFQlVH IGp1c3QgYWJvdmUgdGhlDQo+ICJVbmluc3RhbGxBY3BpVGFibGVzIiBsYWJlbC4gQW5kIGluIHBh dGNoICM1IG9yICM2LCBrZWVwIGl0IGFib3ZlIHRoZSBuZXcNCj4gbGFiZWwgIlVuaW5zdGFsbFFl bXVBY3BpVGFibGVOb3RpZnlQcm90b2NvbCIuDQo+IA0KPiBUaGFua3MNCj4gTGFzemxvDQo+IA0K PiA+DQo+ID4gZGlmZiAtLWdpdCBhL092bWZQa2cvQWNwaVBsYXRmb3JtRHhlL0Nsb3VkSHZBY3Bp LmMNCj4gPiBiL092bWZQa2cvQWNwaVBsYXRmb3JtRHhlL0Nsb3VkSHZBY3BpLmMNCj4gPiBpbmRl eCBjYmU4YmI5YjBjNzUuLjgxZjM4NzQzOGE2NCAxMDA2NDQNCj4gPiAtLS0gYS9Pdm1mUGtnL0Fj cGlQbGF0Zm9ybUR4ZS9DbG91ZEh2QWNwaS5jDQo+ID4gKysrIGIvT3ZtZlBrZy9BY3BpUGxhdGZv cm1EeGUvQ2xvdWRIdkFjcGkuYw0KPiA+IEBAIC0xOCwxMyArMTgsOSBAQA0KPiA+DQo+ID4gICNp bmNsdWRlIDxQcm90b2NvbC9BY3BpU3lzdGVtRGVzY3JpcHRpb25UYWJsZS5oPg0KPiA+ICAjaW5j bHVkZSA8UHJvdG9jb2wvQWNwaVRhYmxlLmg+DQo+ID4gLSNpbmNsdWRlIDxQcm90b2NvbC9RZW11 QWNwaVRhYmxlTm90aWZ5Lmg+ICAgICAgICAgICAgICAgICAvLw0KPiBRRU1VX0FDUElfVEFCTEVf Tk9USUZZX1BST1RPQ09MDQo+ID4NCj4gPiAgI2luY2x1ZGUgIkFjcGlQbGF0Zm9ybS5oIg0KPiA+ DQo+ID4gLUVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIG1DaEFjcGlIYW5kbGUgPSBO VUxMOw0KPiA+IC1RRU1VX0FDUElfVEFCTEVfTk9USUZZX1BST1RPQ09MICBtQ2hBY3BpTm90aWZ5 UHJvdG9jb2w7DQo+ID4gLQ0KPiA+ICBFRklfU1RBVFVTDQo+ID4gIEVGSUFQSQ0KPiA+ICBJbnN0 YWxsQ2xvdWRIdlRhYmxlc1RkeCAoDQo+ID4gQEAgLTMzLDEzICsyOSwxNSBAQCBJbnN0YWxsQ2xv dWRIdlRhYmxlc1RkeCAoICB7DQo+ID4gICAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAgIFVJ TlROICAgICAgIFRhYmxlSGFuZGxlOw0KPiA+ICsgIEVGSV9IQU5ETEUgIENoQWNwaUhhbmRsZTsN Cj4gPg0KPiA+ICAgIEVGSV9QRUlfSE9CX1BPSU5URVJTICAgICAgICAgSG9iOw0KPiA+ICAgIEVG SV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAgKkN1cnJlbnRUYWJsZTsNCj4gPiAgICBFRklfQUNQ SV9ERVNDUklQVElPTl9IRUFERVIgICpEc2R0VGFibGU7DQo+ID4NCj4gPiAtICBEc2R0VGFibGUg ICA9IE5VTEw7DQo+ID4gLSAgVGFibGVIYW5kbGUgPSAwOw0KPiA+ICsgIERzZHRUYWJsZSAgICA9 IE5VTEw7DQo+ID4gKyAgVGFibGVIYW5kbGUgID0gMDsNCj4gPiArICBDaEFjcGlIYW5kbGUgPSBO VUxMOw0KPiA+DQo+ID4gICAgSG9iLkd1aWQgPSAoRUZJX0hPQl9HVUlEX1RZUEUgKilHZXRGaXJz dEd1aWRIb2INCj4gKCZnVWVmaU92bWZQa2dUZHhBY3BpSG9iR3VpZCk7DQo+ID4NCj4gPiBAQCAt OTIsMTIgKzkwLDE1IEBAIEluc3RhbGxDbG91ZEh2VGFibGVzVGR4ICgNCj4gPiAgICAvLyBJbnN0 YWxsIGEgcHJvdG9jb2wgdG8gbm90aWZ5IHRoYXQgdGhlIEFDUEkgdGFibGUgcHJvdmlkZWQgYnkg Q0ggaXMNCj4gPiAgICAvLyByZWFkeS4NCj4gPiAgICAvLw0KPiA+IC0gIGdCUy0+SW5zdGFsbFBy b3RvY29sSW50ZXJmYWNlICgNCj4gPiAtICAgICAgICAgJm1DaEFjcGlIYW5kbGUsDQo+ID4gLSAg ICAgICAgICZnUWVtdUFjcGlUYWJsZU5vdGlmeVByb3RvY29sR3VpZCwNCj4gPiAtICAgICAgICAg RUZJX05BVElWRV9JTlRFUkZBQ0UsDQo+ID4gLSAgICAgICAgICZtQ2hBY3BpTm90aWZ5UHJvdG9j b2wNCj4gPiAtICAgICAgICAgKTsNCj4gPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2Nv bEludGVyZmFjZSAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICZDaEFjcGlIYW5kbGUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICZnUWVtdUFjcGlUYWJsZU5vdGlmeVByb3RvY29sR3VpZCwNCj4g PiArICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQo+ID4gKyAgICAgICAg ICAgICAgICAgIE5VTEwNCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4g Pg0KPiA+ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgfQ0KPiA+IGRpZmYgLS1naXQgYS9P dm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9RZW11RndDZmdBY3BpLmMNCj4gYi9Pdm1mUGtnL0FjcGlQ bGF0Zm9ybUR4ZS9RZW11RndDZmdBY3BpLmMNCj4gPiBpbmRleCBjOGRlZTE3YzEzZTYuLjIyMzQw YjEzZTNlZSAxMDA2NDQNCj4gPiAtLS0gYS9Pdm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9RZW11RndD ZmdBY3BpLmMNCj4gPiArKysgYi9Pdm1mUGtnL0FjcGlQbGF0Zm9ybUR4ZS9RZW11RndDZmdBY3Bp LmMNCj4gPiBAQCAtMTksMTAgKzE5LDcgQEANCj4gPiAgI2luY2x1ZGUgPExpYnJhcnkvUWVtdUZ3 Q2ZnUzNMaWIuaD4gICAgICAgICAgIC8vIFFlbXVGd0NmZ1MzRW5hYmxlZCgpDQo+ID4gICNpbmNs dWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPiAvLyBnQlMNCj4gPg0KPiA+ IC0jaW5jbHVkZSA8UHJvdG9jb2wvUWVtdUFjcGlUYWJsZU5vdGlmeS5oPg0KPiA+ICAjaW5jbHVk ZSAiQWNwaVBsYXRmb3JtLmgiDQo+ID4gLUVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAg IG1RZW11QWNwaUhhbmRsZSA9IE5VTEw7DQo+ID4gLVFFTVVfQUNQSV9UQUJMRV9OT1RJRllfUFJP VE9DT0wgIG1BY3BpTm90aWZ5UHJvdG9jb2w7DQo+ID4NCj4gPiAgLy8NCj4gPiAgLy8gVGhlIHVz ZXIgc3RydWN0dXJlIGZvciB0aGUgb3JkZXJlZCBjb2xsZWN0aW9uIHRoYXQgd2lsbCB0cmFjayB0 aGUgZndfY2ZnDQo+ID4gQEAgLTExMDMsNiArMTEwMCw5IEBAIEluc3RhbGxRZW11RndDZmdUYWJs ZXMgKA0KPiA+ICAgIE9SREVSRURfQ09MTEVDVElPTl9FTlRSWSAgKlRyYWNrZXJFbnRyeSwgKlRy YWNrZXJFbnRyeTI7DQo+ID4gICAgT1JERVJFRF9DT0xMRUNUSU9OICAgICAgICAqU2VlblBvaW50 ZXJzOw0KPiA+ICAgIE9SREVSRURfQ09MTEVDVElPTl9FTlRSWSAgKlNlZW5Qb2ludGVyRW50cnks ICpTZWVuUG9pbnRlckVudHJ5MjsNCj4gPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgIFFl bXVBY3BpSGFuZGxlOw0KPiA+ICsNCj4gPiArICBRZW11QWNwaUhhbmRsZSA9IE5VTEw7DQo+ID4N Cj4gPiAgICBTdGF0dXMgPSBRZW11RndDZmdGaW5kRmlsZSAoImV0Yy90YWJsZS1sb2FkZXIiLCAm RndDZmdJdGVtLA0KPiAmRndDZmdTaXplKTsNCj4gPiAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gQEAgLTEyNDksNiArMTI0OSwyMCBAQCBJbnN0YWxsUWVtdUZ3Q2ZnVGFibGVzICgN Cj4gPiAgICAgIH0NCj4gPiAgICB9DQo+ID4NCj4gPiArICAvLw0KPiA+ICsgIC8vIEluc3RhbGwg YSBwcm90b2NvbCB0byBub3RpZnkgdGhhdCB0aGUgQUNQSSB0YWJsZSBwcm92aWRlZCBieSBRZW11 IGlzDQo+ID4gKyAgLy8gcmVhZHkuDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBnQlMtPklu c3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICZRZW11QWNw aUhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgJmdRZW11QWNwaVRhYmxlTm90aWZ5UHJv dG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwN Cj4gPiArICAgICAgICAgICAgICAgICAgTlVMTA0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0K PiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIGdvdG8gVW5pbnN0YWxs QWNwaVRhYmxlczsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICAgIC8vDQo+ID4gICAgLy8gVHJhbnNs YXRpbmcgdGhlIGNvbmRlbnNlZCBRRU1VX0xPQURFUl9XUklURV9QT0lOVEVSDQo+IGNvbW1hbmRz IHRvIEFDUEkgUzMNCj4gPiAgICAvLyBCb290IFNjcmlwdCBvcGNvZGVzIGhhcyB0byBiZSB0aGUg bGFzdCBvcGVyYXRpb24gaW4gdGhpcyBmdW5jdGlvbiwNCj4gYmVjYXVzZQ0KPiA+IEBAIC0xMjc1 LDE3ICsxMjg5LDE5IEBAIFVuaW5zdGFsbEFjcGlUYWJsZXM6DQo+ID4gICAgICAgIC0tSW5zdGFs bGVkOw0KPiA+ICAgICAgICBBY3BpUHJvdG9jb2wtPlVuaW5zdGFsbEFjcGlUYWJsZSAoQWNwaVBy b3RvY29sLCBJbnN0YWxsZWRLZXlbSW5zdGFsbGVkXSk7DQo+ID4gICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgLy8NCj4gPiArICAgIC8vIFVuaW5zdGFsbCB0aGUgbm90aWZpY2F0aW9uIGlmIGl0IGhh cyBiZWVuIGluc3RhbGxlZC4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBpZiAoUWVtdUFjcGlIYW5k bGUgIT0gTlVMTCkgew0KPiA+ICsgICAgICBnQlMtPlVuaW5zdGFsbFByb3RvY29sSW50ZXJmYWNl ICgNCj4gPiArICAgICAgICAgICAgIFFlbXVBY3BpSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAg JmdRZW11QWNwaVRhYmxlTm90aWZ5UHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgTlVM TA0KPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiArICAgIH0NCj4gPiAgICB9IGVsc2Ugew0KPiA+ IC0gICAgLy8NCj4gPiAtICAgIC8vIEluc3RhbGwgYSBwcm90b2NvbCB0byBub3RpZnkgdGhhdCB0 aGUgQUNQSSB0YWJsZSBwcm92aWRlZCBieSBRZW11IGlzDQo+ID4gLSAgICAvLyByZWFkeS4NCj4g PiAtICAgIC8vDQo+ID4gLSAgICBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ID4g LSAgICAgICAgICAgJm1RZW11QWNwaUhhbmRsZSwNCj4gPiAtICAgICAgICAgICAmZ1FlbXVBY3Bp VGFibGVOb3RpZnlQcm90b2NvbEd1aWQsDQo+ID4gLSAgICAgICAgICAgRUZJX05BVElWRV9JTlRF UkZBQ0UsDQo+ID4gLSAgICAgICAgICAgJm1BY3BpTm90aWZ5UHJvdG9jb2wNCj4gPiAtICAgICAg ICAgICApOw0KPiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiJWE6IGluc3RhbGxlZCAlZCB0 YWJsZXNcbiIsIF9fRlVOQ1RJT05fXywNCj4gSW5zdGFsbGVkKSk7DQo+ID4gICAgfQ0KPiA+DQo+ ID4gICAgZm9yIChTZWVuUG9pbnRlckVudHJ5ID0gT3JkZXJlZENvbGxlY3Rpb25NaW4gKFNlZW5Q b2ludGVycyk7DQo+ID4gZGlmZiAtLWdpdCBhL092bWZQa2cvSW5jbHVkZS9Qcm90b2NvbC9RZW11 QWNwaVRhYmxlTm90aWZ5LmgNCj4gYi9Pdm1mUGtnL0luY2x1ZGUvUHJvdG9jb2wvUWVtdUFjcGlU YWJsZU5vdGlmeS5oDQo+ID4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggYTNk ZDJmYzFkYzkxLi4wMDAwMDAwMDAwMDANCj4gPiAtLS0gYS9Pdm1mUGtnL0luY2x1ZGUvUHJvdG9j b2wvUWVtdUFjcGlUYWJsZU5vdGlmeS5oDQo+ID4gKysrIC9kZXYvbnVsbA0KPiA+IEBAIC0xLDI3 ICswLDAgQEANCj4gPiAtLyoqIEBmaWxlDQo+ID4gLQ0KPiA+IC0gIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gLQ0KPiA+IC0qKi8NCj4gPiAtDQo+ID4g LSNpZm5kZWYgUUVNVV9BQ1BJX1RBQkxFX05PVElGWV9IXw0KPiA+IC0jZGVmaW5lIFFFTVVfQUNQ SV9UQUJMRV9OT1RJRllfSF8NCj4gPiAtDQo+ID4gLSNkZWZpbmUgUUVNVV9BQ1BJX1RBQkxFX05P VElGWV9HVUlEIFwNCj4gPiAtICB7IDB4OTI4OTM5YjIsIDB4NDIzNSwgMHg0NjJmLCB7IDB4OTUs IDB4ODAsIDB4ZjYsIDB4YTIsIDB4YjIsIDB4YzIsIDB4MWEsDQo+IDB4NGYgfSB9Ow0KPiA+IC0N Cj4gPiAtLy8vDQo+ID4gLS8vLyBGb3J3YXJkIGRlY2xhcmF0aW9uDQo+ID4gLS8vLw0KPiA+IC10 eXBlZGVmIHN0cnVjdCBfUUVNVV9BQ1BJX1RBQkxFX05PVElGWV9QUk9UT0NPTA0KPiBRRU1VX0FD UElfVEFCTEVfTk9USUZZX1BST1RPQ09MOw0KPiA+IC0NCj4gPiAtLy8vDQo+ID4gLS8vLyBQcm90 b2NvbCBzdHJ1Y3R1cmUNCj4gPiAtLy8vDQo+ID4gLXN0cnVjdCBfUUVNVV9BQ1BJX1RBQkxFX05P VElGWV9QUk9UT0NPTCB7DQo+ID4gLSAgVUlOVDggICAgTm90aWZ5Ow0KPiA+IC19Ow0KPiA+IC0N Cj4gPiAtZXh0ZXJuIEVGSV9HVUlEICBnUWVtdUFjcGlUYWJsZU5vdGlmeVByb3RvY29sR3VpZDsN Cj4gPiAtDQo+ID4gLSNlbmRpZg0KDQo=