From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web08.7276.1623411476564748288 for ; Fri, 11 Jun 2021 04:37:57 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=Ws9rIJQg; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: ray.ni@intel.com) IronPort-SDR: 9GKyX4ZXU8KG1eYPSpbxNXxM2MNsMQ5ivcqWflYUnh3xksUBsdYrOk543de/Xs7b+tBM5QjmpU 0t7OBHq2r5JA== X-IronPort-AV: E=McAfee;i="6200,9189,10011"; a="203675945" X-IronPort-AV: E=Sophos;i="5.83,265,1616482800"; d="scan'208";a="203675945" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2021 04:37:55 -0700 IronPort-SDR: JU94fSPZ5Ix3E1OqmLbZ8spMVd151JFHewE2kKMx+CvPMGm7dGzELaFOWxKEjuB5xOgdiuzOdC GYYCzKez0exw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,265,1616482800"; d="scan'208";a="636100530" Received: from orsmsx605.amr.corp.intel.com ([10.22.229.18]) by fmsmga006.fm.intel.com with ESMTP; 11 Jun 2021 04:37:53 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Fri, 11 Jun 2021 04:37:53 -0700 Received: from orsmsx604.amr.corp.intel.com (10.22.229.17) by ORSMSX607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Fri, 11 Jun 2021 04:37:52 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Fri, 11 Jun 2021 04:37:52 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Fri, 11 Jun 2021 04:37:52 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SFtQ80BpDzZq9QxlXijr6FerzaaEgyfmc1Vj3vK92sw2S59l0gr1zWE7UZhMTsSReDWgv+7UxhLtYhSKAaI8YoqorTpwpXTxpWUQJJ9v1yzkc/qbOMJcKVhEqeMmWM6jvwaCc1ftAZf+Fbp1hB8CKgyX5w4EfrNPzZYNw3uK08G4c6ayh7w5KCERKF4UXCqaEFocbhhGPO+CjiaxaB7fqHMAegILlJ1MYabfIyEpNv9kbedU94g1Iuj4buEv7MO9EAgakMIJQW9U0My/ZItRiyj6YtN9yfolhe8z/ew9PsxpLmDqUxN4prGrJNUiSTRUUlODTB8dPKE8OawqHZ6YWw== 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=LUbY8PfQW2lu6O02Emf5bpK6CTDBxeuN785GuUH7HmE=; b=cMEHZkpUC15EsfdjqoNW7fv7dNbUn2rMvIM78PhTWzLQftvMWeTUnURcdG45jIID7gLvWIgNXtsNx6Uv+7alfuSpIp1k7r5J4rUxPkl6rejJARWT3y8js2eaW1QwoP9mN8ImZGvLTAnj6Q2tA+cEkAmSxSS4MpsIaLjZ/Yxa4rAiih6dSiz5mDmPe+n55H1xZC8lzn7lUd1FaHKgfhYqNgZI0+B3Z8E5K1xDKWE/thsHz9lV0eel9RYuU2oHyMF2CnJk13RLln7LPOAxODZiXIDHiWXl++r19zmF2rzBKzgt1NNJhbeLVMsafGp9LL5yMQx2+nhXYrHnIyzN0lEp5w== 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=LUbY8PfQW2lu6O02Emf5bpK6CTDBxeuN785GuUH7HmE=; b=Ws9rIJQg1uom+KOCWBEblEuXp6dQwj7MSaYs5n9WdCgwciweHFBF7aJXdRYsh8Z3A4Jjc8sL3H1y6gXw7z8MMtArGrF8erCCsllLV375UECcF+BiREOH+u/FErUiidNEdK9gw/zUUHbJN0f5mrJ3wKy49Du36nolhfW7LZtEFgE= Received: from PH0PR11MB4936.namprd11.prod.outlook.com (2603:10b6:510:42::20) by PH0PR11MB4808.namprd11.prod.outlook.com (2603:10b6:510:39::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20; Fri, 11 Jun 2021 11:37:50 +0000 Received: from PH0PR11MB4936.namprd11.prod.outlook.com ([fe80::d19b:9189:d5f9:94d]) by PH0PR11MB4936.namprd11.prod.outlook.com ([fe80::d19b:9189:d5f9:94d%6]) with mapi id 15.20.4219.024; Fri, 11 Jun 2021 11:37:50 +0000 From: "Ni, Ray" To: "devel@edk2.groups.io" , "lersek@redhat.com" CC: "Wu, Jiaxin" , Maciej Rabeda , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= , "Fu, Siyuan" Subject: Re: [edk2-devel] [PUBLIC edk2 PATCH v2 01/10] NetworkPkg/IScsiDxe: wrap IScsiCHAP source files to 80 characters Thread-Topic: [edk2-devel] [PUBLIC edk2 PATCH v2 01/10] NetworkPkg/IScsiDxe: wrap IScsiCHAP source files to 80 characters Thread-Index: AQHXXF+tjGvKnNbE+UuwZ0OsjHPTl6sOs4BQ Date: Fri, 11 Jun 2021 11:37:50 +0000 Message-ID: References: <20210608121259.32451-1-lersek@redhat.com> <20210608121259.32451-2-lersek@redhat.com> In-Reply-To: <20210608121259.32451-2-lersek@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [124.77.195.36] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8eeae3d9-3b8a-4ff0-bcd9-08d92ccd5813 x-ms-traffictypediagnostic: PH0PR11MB4808: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:221; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: D1Ek81R8sGkVJoYCYzQS8CpFZfiO96Gh+nSPOZ9jNEf2PhUNi9W2OgCh6NVTcIN5GIBZDibAioSNj7HCj45Ig5mW5Dj9yO3RoC5JmFK9FR+hSHDQRSA+tX/sLj3P816n6Ffe/jiphyfzpEC26M9cnv70Dbpfklh/tCjXn4O24anjELEb6AwAxsCChMKjf1xZD46RoM2lX0APLEjyTHEEW14Hj4q35ws14Sfgcmzlx3um+YyJ9CO4bVladd0Pr/Z7QnfCVd/sboZtjTWI7dOk5K/UclsfOhcoLAlzEKLdN8XIHoDQBoGE6QBEf2HmZxjhwPKieLNQOOTT5Zi61Kf24J8PsYAw1fXyJ3BpKSCJoP8ubR1+zfdDC6lCCn0Pab3wgrG7IiWjqY3CMTJsRlvb+yAREyaiWVox3Rm5QRCWf/iqPQpLxWPTy3WE4y5nqUixTDl1VPUHINWTYKtms/kEtPYTyI4PdTb24E+kEwFDW+M6Lv4vVWVVW+qZOxmGLo4oS9Td05BVNquVHYD8bkuZCarDcqr0ZsktY2OXJrSbdWcaY/pt9aBRpzZY2ESyn6V9FNlxYzAYTfndfmmvF+K1MI/GRt76u8jdt6kpm6o6HINMTJLw14+cuHVNO7tmfqxp4Jhb6e32nBPAXD7I+WfRMdIDcogE4tZWg+GwBb0imwE7s8QnD/UalSfh6Wx2y7DFuDerPFv0TqlyKySnrh24TOJGyzZyuBILhGB1xIM1aBAJVpfPuHoncqfad3khOyAtr9SCLTPuFRczlvOMF1ApKg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB4936.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(39860400002)(376002)(366004)(396003)(346002)(8936002)(7696005)(9686003)(83380400001)(55016002)(478600001)(26005)(30864003)(2906002)(38100700002)(966005)(66556008)(66476007)(33656002)(4326008)(76116006)(52536014)(66946007)(66446008)(110136005)(5660300002)(54906003)(316002)(53546011)(86362001)(122000001)(64756008)(186003)(71200400001)(6506007)(8676002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?R1piNjBDZmNkMWVBZGx5S3FJZ2lsRzY3cmU0NVlxQW52ZlhOcDI2T3ZZZXpo?= =?utf-8?B?NlV6Z1lVU2JCWVlSZllJN2xzbFcvTGVFYjhxWnJSbi9FcCtVTk9ZSVdpMVB4?= =?utf-8?B?NElGMjRpTzFjY1hpWDRQRTVXRmJUSFloWGdQSUppZmxMUlR1d0JsdkJPU1JN?= =?utf-8?B?ZmZDZHh6MVdUZWxBNDdnZThZblYxdlFidzFhSXVnaHlhUHI0MEx6elNBcGg0?= =?utf-8?B?QzlJcFo2d0pMQnI5T2RVSUltYXU1VE1SZTJPaGNzOWhaUmtQUlVmYUlKbXNw?= =?utf-8?B?aFVuSW5aVU9vbCtEaWUyT1hpay9Wb2hOcFVtakhMYlVFVUNUSWlNWDlIRHBO?= =?utf-8?B?RjBLcVZvbGZPUjRYbEpLcHJrWFVUaUkzZGhoeXpId0NsWUN6bS9QeFJWa3Zs?= =?utf-8?B?U3Z1ckoyQlAzTmxXUUZWeXJNR1BtWmJwcTF4SmdVWVFXMXNqSGRpb0M0WGk0?= =?utf-8?B?Y0Ztczg4TzFwOEsxTGNBNUlLUmZNaGx0TUJJNlMzY3dQb1BQeGZUNXRDckxJ?= =?utf-8?B?NEJLV2FkRVgxT2g0SkJvR3pCSXdyWnpoL0U1b2NmOXRwN25ISk44R3F1MmVi?= =?utf-8?B?aWZEaEJpRm14ZGNjWUtYVkhZVXVGSC81akF5d1JWTGF2OUx2OGRGUS8zNG44?= =?utf-8?B?SEJveldpd3dLUzBPM1JIMmdQR01ZU0ZxNjUwNG1mWTlSU0J4NkZJeUgwUVBB?= =?utf-8?B?OGR1dFl2TlFwWmg1ZjF5R1E4MWE1SmE3NXA5S0h3RWlKeHJVOWZwUDRickRN?= =?utf-8?B?S1hoRk5hVXM3Y1U4UXRnOHFsWjRydXd3OWxjTUxPSzVBR3V0NWxBeVVQYWZB?= =?utf-8?B?RllNR3VsczN3T0pBbW1FVE9iano0d09mWGkvQll1VVZmU1FEMCtweEJDZTcz?= =?utf-8?B?R004cFdVY25PZHV2bGk4YzNTYlpOSGU3MWM0TkZabGQvMUpCWUZBMHltQVdR?= =?utf-8?B?bFdEMzk3bGRpZlZtT0w5TWo5bFFsM0NyZEZpcTZKRFFhK3h3dDYzWE5HMzJR?= =?utf-8?B?QVh2TWVSODhMdFNMbXIxaitEOHY5bjRlVTU2TnlKZ3dCVlBndUlGaGNoM1VF?= =?utf-8?B?akcwdlV0bFJWRzRvbGRRNTVEUCtuMC9uRVpVOTlZcWlxMTBhQVNBcUFGMyto?= =?utf-8?B?anlJR08vU2VJVUVYVnNyYmVNWTFCOVVDYUE3WkVPWU0xQWlpZ1ZIdDQ3Lzd5?= =?utf-8?B?aWFrdlZyU0lQcUVNd0pxQzRGdTFBWUNxdFRQNHR5STFodXRFamp6aHY1b0hq?= =?utf-8?B?bGh2a0NVSzdFQjkrc2lZZUNmMlAwVlNOOWxHaUFyUHM5b21PTUZjUEZuZElS?= =?utf-8?B?dUdkREl2WWw0eFNBYjBEM2d6aU9iaHZjMTRaLzJwSFEwVE0wRmdzNjZzb0ZG?= =?utf-8?B?KzdTaERVNnhheGtZREVnK0E0R2lnUnFpaFpNOGUvQU92WHE0bEE3TC8wdCtN?= =?utf-8?B?aGlVS3ZYSE9MbDNaSXFselNDc2lEVENybSt1cU9hczRTODROR052b04xbDhq?= =?utf-8?B?MmVDZ3BjcE1USnpFNmJlSVM0MUhlVWEyYXc0SHJPZExQaGU5MzV5VWRvQUZx?= =?utf-8?B?NHpIMzRnSm5MMDE4ekhHcEwwVjNxU3NSNkVwdHEwK2FLdlV0a2NPOHVjcnlK?= =?utf-8?B?djBWcXFCYmlkM0pscS9ZVUVVZThIdVdQaEJyNVhCdzFpaEF2b3gvaTFDNUo2?= =?utf-8?B?eWFDVVVXTFF0bmNyYm1iMVdrb3BWL2FVZmhkZ1l3bUpna0xWVFhJUDNTbTdE?= =?utf-8?Q?aoy2TTVfEpeJ3YaUDQgvyRVo6wJVtonffscnpQK?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB4936.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8eeae3d9-3b8a-4ff0-bcd9-08d92ccd5813 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jun 2021 11:37:50.6037 (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: Qc/QFlOZVbi6uzfdDkgHUUzMbWYUBocB609aMroulIpFWCHFfZJal9XEy8bZrGcfOtIAlXjVY/Ahk6vKxzGCtg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB4808 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Tm8gb2JqZWN0aW9uIG9uIHRoZSBwYXRjaC4gSnVzdCBjdXJpb3VzIHdoYXQgZWRpdG9yIHlvdSBh cmUgdXNpbmfwn5iKDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2 ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YgTGFz emxvIEVyc2VrDQo+IFNlbnQ6IFR1ZXNkYXksIEp1bmUgOCwgMjAyMSA4OjEzIFBNDQo+IFRvOiBl ZGsyLWRldmVsLWdyb3Vwcy1pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+DQo+IENjOiBXdSwgSmlh eGluIDxqaWF4aW4ud3VAaW50ZWwuY29tPjsgTWFjaWVqIFJhYmVkYSA8bWFjaWVqLnJhYmVkYUBs aW51eC5pbnRlbC5jb20+OyBQaGlsaXBwZSBNYXRoaWV1LURhdWTDqQ0KPiA8cGhpbG1kQHJlZGhh dC5jb20+OyBGdSwgU2l5dWFuIDxzaXl1YW4uZnVAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbZWRr Mi1kZXZlbF0gW1BVQkxJQyBlZGsyIFBBVENIIHYyIDAxLzEwXSBOZXR3b3JrUGtnL0lTY3NpRHhl OiB3cmFwIElTY3NpQ0hBUCBzb3VyY2UgZmlsZXMgdG8gODAgY2hhcmFjdGVycw0KPiANCj4gV29y a2luZyB3aXRoIG92ZXJsb25nIGxpbmVzIGlzIGRpZmZpY3VsdCBmb3IgbWU7IHJld3JhcCB0aGUg Q0hBUC1yZWxhdGVkDQo+IHNvdXJjZSBmaWxlcyBpbiBJU2NzaUR4ZSB0byA4MCBjaGFyYWN0ZXJz IHdpZHRoLiBObyBmdW5jdGlvbmFsIGNoYW5nZXMuDQo+IA0KPiBDYzogSmlheGluIFd1IDxqaWF4 aW4ud3VAaW50ZWwuY29tPg0KPiBDYzogTWFjaWVqIFJhYmVkYSA8bWFjaWVqLnJhYmVkYUBsaW51 eC5pbnRlbC5jb20+DQo+IENjOiBQaGlsaXBwZSBNYXRoaWV1LURhdWTDqSA8cGhpbG1kQHJlZGhh dC5jb20+DQo+IENjOiBTaXl1YW4gRnUgPHNpeXVhbi5mdUBpbnRlbC5jb20+DQo+IFJlZjogaHR0 cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzU2DQo+IFNpZ25l ZC1vZmYtYnk6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+IFJldmlld2VkLWJ5 OiBNYWNpZWogUmFiZWRhIDxtYWNpZWoucmFiZWRhQGxpbnV4LmludGVsLmNvbT4NCj4gUmV2aWV3 ZWQtYnk6IFBoaWxpcHBlIE1hdGhpZXUtRGF1ZMOpIDxwaGlsbWRAcmVkaGF0LmNvbT4NCj4gLS0t DQo+ICBOZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hBUC5oIHwgIDMgKy0NCj4gIE5ldHdvcmtQ a2cvSVNjc2lEeGUvSVNjc2lDSEFQLmMgfCA5MCArKysrKysrKysrKysrKystLS0tLQ0KPiAgMiBm aWxlcyBjaGFuZ2VkLCA3MSBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkNCj4gDQo+IGRp ZmYgLS1naXQgYS9OZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hBUC5oIGIvTmV0d29ya1BrZy9J U2NzaUR4ZS9JU2NzaUNIQVAuaA0KPiBpbmRleCAxNDBiYmEwZGNkNzYuLjVlNTlmYjY3OGJkNyAx MDA2NDQNCj4gLS0tIGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuaA0KPiArKysgYi9O ZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hBUC5oDQo+IEBAIC03MiwzMSArNzIsMzIgQEAgdHlw ZWRlZiBzdHJ1Y3QgX0lTQ1NJX0NIQVBfQVVUSF9EQVRBIHsNCj4gDQo+ICAgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgVGhlIExvZ2luIFJlc3BvbnNlIHBhc3NlZCB0aGUgQ0hBUCB2YWxp ZGF0aW9uLg0KPiAgICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEZhaWxlZCB0byBhbGxv Y2F0ZSBtZW1vcnkuDQo+ICAgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgU29tZSBraW5k IG9mIHByb3RvY29sIGVycm9yIG9jY3VycmVkLg0KPiAgICBAcmV0dmFsIE90aGVycyAgICAgICAg ICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+IA0KPiAgKiovDQo+ICBFRklfU1RB VFVTDQo+ICBJU2NzaUNIQVBPblJzcFJlY2VpdmVkICgNCj4gICAgSU4gSVNDU0lfQ09OTkVDVElP TiAgKkNvbm4NCj4gICAgKTsNCj4gIC8qKg0KPiAgICBUaGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSBD SEFQIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIGludG8gdGhlIGxvZ2luIFBEVQ0KPiAgICBk dXJpbmcgdGhlIHNlY3VyaXR5IG5lZ290aWF0aW9uIHN0YWdlIGluIHRoZSBpU0NTSSBjb25uZWN0 aW9uIGxvZ2luLg0KPiANCj4gICAgQHBhcmFtW2luXSAgICAgICBDb25uICAgICAgICBUaGUgaVND U0kgY29ubmVjdGlvbi4NCj4gICAgQHBhcmFtW2luLCBvdXRdICBQZHUgICAgICAgICBUaGUgUERV IHRvIHNlbmQgb3V0Lg0KPiANCj4gICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgQWxs IGNoZWNrIHBhc3NlZCBhbmQgdGhlIHBoYXNlLXJlbGF0ZWQgQ0hBUA0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBpbmZvIGlzIGZpbGxlZCBpbnRvIHRo ZSBpU0NTSSBQRFUuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRp Y2F0aW9uIGluZm8gaXMgZmlsbGVkIGludG8gdGhlIGlTQ1NJDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBEVS4NCj4gICAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg RmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gICAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJS T1IgICAgU29tZSBraW5kIG9mIHByb3RvY29sIGVycm9yIG9jY3VycmVkLg0KPiANCj4gICoqLw0K PiAgRUZJX1NUQVRVUw0KPiAgSVNjc2lDSEFQVG9TZW5kUmVxICgNCj4gICAgSU4gICAgICBJU0NT SV9DT05ORUNUSU9OICAqQ29ubiwNCj4gICAgSU4gT1VUICBORVRfQlVGICAgICAgICAgICAqUGR1 DQo+ICAgICk7DQo+IA0KPiAgI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0lTY3Np RHhlL0lTY3NpQ0hBUC5jIGIvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuYw0KPiBpbmRl eCAzNTVjNmYxMjlmNjguLmNiYmM1NmFlNWI0MyAxMDA2NDQNCj4gLS0tIGEvTmV0d29ya1BrZy9J U2NzaUR4ZS9JU2NzaUNIQVAuYw0KPiArKysgYi9OZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hB UC5jDQo+IEBAIC0xLDQyICsxLDQ1IEBADQo+ICAvKiogQGZpbGUNCj4gLSAgVGhpcyBmaWxlIGlz IGZvciBDaGFsbGVuZ2UtSGFuZHNoYWtlIEF1dGhlbnRpY2F0aW9uIFByb3RvY29sIChDSEFQKSBD b25maWd1cmF0aW9uLg0KPiArICBUaGlzIGZpbGUgaXMgZm9yIENoYWxsZW5nZS1IYW5kc2hha2Ug QXV0aGVudGljYXRpb24gUHJvdG9jb2wgKENIQVApDQo+ICsgIENvbmZpZ3VyYXRpb24uDQo+IA0K PiAgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gDQo+ICAqKi8NCj4gDQo+ICAjaW5jbHVkZSAiSVNjc2lJbXBsLmgiDQo+IA0K PiAgLyoqDQo+ICAgIEluaXRpYXRvciBjYWxjdWxhdGVzIGl0cyBvd24gZXhwZWN0ZWQgaGFzaCB2 YWx1ZS4NCj4gDQo+ICAgIEBwYXJhbVtpbl0gICBDaGFwSWRlbnRpZmllciAgICAgaVNDU0kgQ0hB UCBpZGVudGlmaWVyIHNlbnQgYnkgYXV0aGVudGljYXRvci4NCj4gICAgQHBhcmFtW2luXSAgIENo YXBTZWNyZXQgICAgICAgICBpU0NTSSBDSEFQIHNlY3JldCBvZiB0aGUgYXV0aGVudGljYXRvci4N Cj4gICAgQHBhcmFtW2luXSAgIFNlY3JldExlbmd0aCAgICAgICBUaGUgbGVuZ3RoIG9mIGlTQ1NJ IENIQVAgc2VjcmV0Lg0KPiAgICBAcGFyYW1baW5dICAgQ2hhcENoYWxsZW5nZSAgICAgIFRoZSBj aGFsbGVuZ2UgbWVzc2FnZSBzZW50IGJ5IGF1dGhlbnRpY2F0b3IuDQo+ICAgIEBwYXJhbVtpbl0g ICBDaGFsbGVuZ2VMZW5ndGggICAgVGhlIGxlbmd0aCBvZiBpU0NTSSBDSEFQIGNoYWxsZW5nZSBt ZXNzYWdlLg0KPiAgICBAcGFyYW1bb3V0XSAgQ2hhcFJlc3BvbnNlICAgICAgIFRoZSBjYWxjdWxh dGlvbiBvZiB0aGUgZXhwZWN0ZWQgaGFzaCB2YWx1ZS4NCj4gDQo+IC0gIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgVGhlIGV4cGVjdGVkIGhhc2ggdmFsdWUgd2FzIGNhbGN1bGF0ZWRs eSBzdWNjZXNzZnVsbHkuDQo+IC0gIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgICAgVGhl IGxlbmd0aCBvZiB0aGUgc2VjcmV0IHNob3VsZCBiZSBhdCBsZWFzdCB0aGUNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggb2YgdGhlIGhhc2ggdmFsdWUgZm9yIHRo ZSBoYXNoaW5nIGFsZ29yaXRobSBjaG9zZW4uDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICAgVGhlIGV4cGVjdGVkIGhhc2ggdmFsdWUgd2FzIGNhbGN1bGF0ZWRseQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBFRklfUFJPVE9DT0xfRVJST1IgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQgc2hvdWxk IGJlIGF0IGxlYXN0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxl bmd0aCBvZiB0aGUgaGFzaCB2YWx1ZSBmb3IgdGhlIGhhc2hpbmcNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG0gY2hvc2VuLg0KPiAgICBAcmV0dmFsIEVGSV9Q Uk9UT0NPTF9FUlJPUiAgICAgIE1ENSBoYXNoIG9wZXJhdGlvbiBmYWlsLg0KPiAgICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIEZhaWwgdG8gYWxsb2NhdGUgcmVzb3VyY2UgdG8gY29t cGxldGUgTUQ1Lg0KPiANCj4gICoqLw0KPiAgRUZJX1NUQVRVUw0KPiAgSVNjc2lDSEFQQ2FsY3Vs YXRlUmVzcG9uc2UgKA0KPiAgICBJTiAgVUlOVDMyICBDaGFwSWRlbnRpZmllciwNCj4gICAgSU4g IENIQVI4ICAgKkNoYXBTZWNyZXQsDQo+ICAgIElOICBVSU5UMzIgIFNlY3JldExlbmd0aCwNCj4g ICAgSU4gIFVJTlQ4ICAgKkNoYXBDaGFsbGVuZ2UsDQo+ICAgIElOICBVSU5UMzIgIENoYWxsZW5n ZUxlbmd0aCwNCj4gICAgT1VUIFVJTlQ4ICAgKkNoYXBSZXNwb25zZQ0KPiAgICApDQo+ICB7DQo+ ICAgIFVJTlROICAgICAgIE1kNUNvbnRleHRTaXplOw0KPiAgICBWT0lEICAgICAgICAqTWQ1Q3R4 Ow0KPiAgICBDSEFSOCAgICAgICBJZEJ5dGVbMV07DQo+ICAgIEVGSV9TVEFUVVMgIFN0YXR1czsN Cj4gDQo+IEBAIC03OCw0MCArODEsNDIgQEAgSVNjc2lDSEFQQ2FsY3VsYXRlUmVzcG9uc2UgKA0K PiAgICAgIGdvdG8gRXhpdDsNCj4gICAgfQ0KPiANCj4gICAgaWYgKE1kNUZpbmFsIChNZDVDdHgs IENoYXBSZXNwb25zZSkpIHsNCj4gICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gICAgfQ0K PiANCj4gIEV4aXQ6DQo+ICAgIEZyZWVQb29sIChNZDVDdHgpOw0KPiAgICByZXR1cm4gU3RhdHVz Ow0KPiAgfQ0KPiANCj4gIC8qKg0KPiAgICBUaGUgaW5pdGlhdG9yIGNoZWNrcyB0aGUgQ0hBUCBy ZXNwb25zZSByZXBsaWVkIGJ5IHRhcmdldCBhZ2FpbnN0IGl0cyBvd24NCj4gICAgY2FsY3VsYXRp b24gb2YgdGhlIGV4cGVjdGVkIGhhc2ggdmFsdWUuDQo+IA0KPiAgICBAcGFyYW1baW5dICAgQXV0 aERhdGEgICAgICAgICAgICAgaVNDU0kgQ0hBUCBhdXRoZW50aWNhdGlvbiBkYXRhLg0KPiAgICBA cGFyYW1baW5dICAgVGFyZ2V0UmVzcG9uc2UgICAgICAgVGhlIHJlc3BvbnNlIGZyb20gdGFyZ2V0 Lg0KPiANCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoZSByZXNwb25z ZSBmcm9tIHRhcmdldCBwYXNzZWQgYXV0aGVudGljYXRpb24uDQo+IC0gIEByZXR2YWwgRUZJX1NF Q1VSSVRZX1ZJT0xBVElPTiAgICBUaGUgcmVzcG9uc2UgZnJvbSB0YXJnZXQgd2FzIG5vdCBleHBl Y3RlZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoZSBy ZXNwb25zZSBmcm9tIHRhcmdldCBwYXNzZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLg0KPiArICBAcmV0dmFsIEVGSV9TRUNVUklUWV9WSU9M QVRJT04gICAgVGhlIHJlc3BvbnNlIGZyb20gdGFyZ2V0IHdhcyBub3QgZXhwZWN0ZWQNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLg0KPiAgICBAcmV0dmFsIE90 aGVycyAgICAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4gDQo+ ICAqKi8NCj4gIEVGSV9TVEFUVVMNCj4gIElTY3NpQ0hBUEF1dGhUYXJnZXQgKA0KPiAgICBJTiAg SVNDU0lfQ0hBUF9BVVRIX0RBVEEgICpBdXRoRGF0YSwNCj4gICAgSU4gIFVJTlQ4ICAgICAgICAg ICAgICAgICAqVGFyZ2V0UmVzcG9uc2UNCj4gICAgKQ0KPiAgew0KPiAgICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ICAgIFVJTlQzMiAgICAgIFNlY3JldFNpemU7DQo+ICAgIFVJTlQ4ICAgICAgIFZl cmlmeVJzcFtJU0NTSV9DSEFQX1JTUF9MRU5dOw0KPiANCj4gICAgU3RhdHVzICAgICAgPSBFRklf U1VDQ0VTUzsNCj4gDQo+ICAgIFNlY3JldFNpemUgID0gKFVJTlQzMikgQXNjaWlTdHJMZW4gKEF1 dGhEYXRhLT5BdXRoQ29uZmlnLT5SZXZlcnNlQ0hBUFNlY3JldCk7DQo+ICAgIFN0YXR1cyA9IElT Y3NpQ0hBUENhbGN1bGF0ZVJlc3BvbnNlICgNCj4gICAgICAgICAgICAgICBBdXRoRGF0YS0+T3V0 SWRlbnRpZmllciwNCj4gICAgICAgICAgICAgICBBdXRoRGF0YS0+QXV0aENvbmZpZy0+UmV2ZXJz ZUNIQVBTZWNyZXQsDQo+IEBAIC0xNzcsMTg3ICsxODIsMjExIEBAIElTY3NpQ0hBUE9uUnNwUmVj ZWl2ZWQgKA0KPiAgICAvLw0KPiAgICBOZXRidWZRdWVDb3B5ICgmQ29ubi0+UnNwUXVlLCAwLCBM ZW4sIERhdGEpOw0KPiANCj4gICAgLy8NCj4gICAgLy8gQnVpbGQgdGhlIGtleS12YWx1ZSBsaXN0 IGZyb20gdGhlIGRhdGEgc2VnbWVudCBvZiB0aGUgTG9naW4gUmVzcG9uc2UuDQo+ICAgIC8vDQo+ ICAgIEtleVZhbHVlTGlzdCA9IElTY3NpQnVpbGRLZXlWYWx1ZUxpc3QgKChDSEFSOCAqKSBEYXRh LCBMZW4pOw0KPiAgICBpZiAoS2V5VmFsdWVMaXN0ID09IE5VTEwpIHsNCj4gICAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gICAgICBnb3RvIE9OX0VYSVQ7DQo+ICAgIH0NCj4g DQo+ICAgIFN0YXR1cyA9IEVGSV9QUk9UT0NPTF9FUlJPUjsNCj4gDQo+ICAgIHN3aXRjaCAoQ29u bi0+QXV0aFN0ZXApIHsNCj4gICAgY2FzZSBJU0NTSV9BVVRIX0lOSVRJQUw6DQo+ICAgICAgLy8N Cj4gICAgICAvLyBUaGUgZmlyc3QgTG9naW4gUmVzcG9uc2UuDQo+ICAgICAgLy8NCj4gLSAgICBW YWx1ZSA9IElTY3NpR2V0VmFsdWVCeUtleUZyb21MaXN0IChLZXlWYWx1ZUxpc3QsIElTQ1NJX0tF WV9UQVJHRVRfUE9SVEFMX0dST1VQX1RBRyk7DQo+ICsgICAgVmFsdWUgPSBJU2NzaUdldFZhbHVl QnlLZXlGcm9tTGlzdCAoDQo+ICsgICAgICAgICAgICAgIEtleVZhbHVlTGlzdCwNCj4gKyAgICAg ICAgICAgICAgSVNDU0lfS0VZX1RBUkdFVF9QT1JUQUxfR1JPVVBfVEFHDQo+ICsgICAgICAgICAg ICAgICk7DQo+ICAgICAgaWYgKFZhbHVlID09IE5VTEwpIHsNCj4gICAgICAgIGdvdG8gT05fRVhJ VDsNCj4gICAgICB9DQo+IA0KPiAgICAgIFJlc3VsdCA9IElTY3NpTmV0TnRvaSAoVmFsdWUpOw0K PiAgICAgIGlmIChSZXN1bHQgPiAweEZGRkYpIHsNCj4gICAgICAgIGdvdG8gT05fRVhJVDsNCj4g ICAgICB9DQo+IA0KPiAgICAgIFNlc3Npb24tPlRhcmdldFBvcnRhbEdyb3VwVGFnID0gKFVJTlQx NikgUmVzdWx0Ow0KPiANCj4gLSAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICA9IElT Y3NpR2V0VmFsdWVCeUtleUZyb21MaXN0IChLZXlWYWx1ZUxpc3QsIElTQ1NJX0tFWV9BVVRIX01F VEhPRCk7DQo+ICsgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgPSBJU2NzaUdldFZh bHVlQnlLZXlGcm9tTGlzdCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEtleVZhbHVlTGlzdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSVNDU0lfS0VZX0FVVEhfTUVUSE9EDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICAgICAgaWYgKFZhbHVlID09IE5VTEwpIHsNCj4gICAgICAgIGdvdG8g T05fRVhJVDsNCj4gICAgICB9DQo+ICAgICAgLy8NCj4gLSAgICAvLyBJbml0aWF0b3IgbWFuZGF0 ZXMgQ0hBUCBhdXRoZW50aWNhdGlvbiBidXQgdGFyZ2V0IHJlcGxpZXMgd2l0aG91dCAiQ0hBUCIs IG9yDQo+IC0gICAgLy8gaW5pdGlhdG9yIHN1Z2dldHMgIk5vbmUiIGJ1dCB0YXJnZXQgcmVwbGll cyB3aXRoIHNvbWUga2luZCBvZiBhdXRoIG1ldGhvZC4NCj4gKyAgICAvLyBJbml0aWF0b3IgbWFu ZGF0ZXMgQ0hBUCBhdXRoZW50aWNhdGlvbiBidXQgdGFyZ2V0IHJlcGxpZXMgd2l0aG91dA0KPiAr ICAgIC8vICJDSEFQIiwgb3IgaW5pdGlhdG9yIHN1Z2dldHMgIk5vbmUiIGJ1dCB0YXJnZXQgcmVw bGllcyB3aXRoIHNvbWUga2luZCBvZg0KPiArICAgIC8vIGF1dGggbWV0aG9kLg0KPiAgICAgIC8v DQo+ICAgICAgaWYgKFNlc3Npb24tPkF1dGhUeXBlID09IElTQ1NJX0FVVEhfVFlQRV9OT05FKSB7 DQo+ICAgICAgICBpZiAoQXNjaWlTdHJDbXAgKFZhbHVlLCBJU0NTSV9LRVlfVkFMVUVfTk9ORSkg IT0gMCkgew0KPiAgICAgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICAgICAgICB9DQo+ICAgICAgfSBl bHNlIGlmIChTZXNzaW9uLT5BdXRoVHlwZSA9PSBJU0NTSV9BVVRIX1RZUEVfQ0hBUCkgew0KPiAg ICAgICAgaWYgKEFzY2lpU3RyQ21wIChWYWx1ZSwgSVNDU0lfQVVUSF9NRVRIT0RfQ0hBUCkgIT0g MCkgew0KPiAgICAgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICAgICAgICB9DQo+ICAgICAgfSBlbHNl IHsNCj4gICAgICAgIGdvdG8gT05fRVhJVDsNCj4gICAgICB9DQo+IA0KPiAgICAgIC8vDQo+ICAg ICAgLy8gVHJhbnNpdCB0byBDSEFQIHN0ZXAgb25lLg0KPiAgICAgIC8vDQo+ICAgICAgQ29ubi0+ QXV0aFN0ZXAgID0gSVNDU0lfQ0hBUF9TVEVQX09ORTsNCj4gICAgICBTdGF0dXMgICAgICAgICAg PSBFRklfU1VDQ0VTUzsNCj4gICAgICBicmVhazsNCj4gDQo+ICAgIGNhc2UgSVNDU0lfQ0hBUF9T VEVQX1RXTzoNCj4gICAgICAvLw0KPiAgICAgIC8vIFRoZSBUYXJnZXQgcmVwbGllcyB3aXRoIENI QVBfQT08QT4gQ0hBUF9JPTxJPiBDSEFQX0M9PEM+DQo+ICAgICAgLy8NCj4gLSAgICBWYWx1ZSA9 IElTY3NpR2V0VmFsdWVCeUtleUZyb21MaXN0IChLZXlWYWx1ZUxpc3QsIElTQ1NJX0tFWV9DSEFQ X0FMR09SSVRITSk7DQo+ICsgICAgVmFsdWUgPSBJU2NzaUdldFZhbHVlQnlLZXlGcm9tTGlzdCAo DQo+ICsgICAgICAgICAgICAgIEtleVZhbHVlTGlzdCwNCj4gKyAgICAgICAgICAgICAgSVNDU0lf S0VZX0NIQVBfQUxHT1JJVEhNDQo+ICsgICAgICAgICAgICAgICk7DQo+ICAgICAgaWYgKFZhbHVl ID09IE5VTEwpIHsNCj4gICAgICAgIGdvdG8gT05fRVhJVDsNCj4gICAgICB9DQo+IA0KPiAgICAg IEFsZ29yaXRobSA9IElTY3NpTmV0TnRvaSAoVmFsdWUpOw0KPiAgICAgIGlmIChBbGdvcml0aG0g IT0gSVNDU0lfQ0hBUF9BTEdPUklUSE1fTUQ1KSB7DQo+ICAgICAgICAvLw0KPiAgICAgICAgLy8g VW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGlzIGNob3NlbiBieSB0YXJnZXQuDQo+ICAgICAgICAvLw0K PiAgICAgICAgZ290byBPTl9FWElUOw0KPiAgICAgIH0NCj4gDQo+IC0gICAgSWRlbnRpZmllciA9 IElTY3NpR2V0VmFsdWVCeUtleUZyb21MaXN0IChLZXlWYWx1ZUxpc3QsIElTQ1NJX0tFWV9DSEFQ X0lERU5USUZJRVIpOw0KPiArICAgIElkZW50aWZpZXIgPSBJU2NzaUdldFZhbHVlQnlLZXlGcm9t TGlzdCAoDQo+ICsgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LA0KPiArICAgICAgICAg ICAgICAgICAgIElTQ1NJX0tFWV9DSEFQX0lERU5USUZJRVINCj4gKyAgICAgICAgICAgICAgICAg ICApOw0KPiAgICAgIGlmIChJZGVudGlmaWVyID09IE5VTEwpIHsNCj4gICAgICAgIGdvdG8gT05f RVhJVDsNCj4gICAgICB9DQo+IA0KPiAtICAgIENoYWxsZW5nZSA9IElTY3NpR2V0VmFsdWVCeUtl eUZyb21MaXN0IChLZXlWYWx1ZUxpc3QsIElTQ1NJX0tFWV9DSEFQX0NIQUxMRU5HRSk7DQo+ICsg ICAgQ2hhbGxlbmdlID0gSVNjc2lHZXRWYWx1ZUJ5S2V5RnJvbUxpc3QgKA0KPiArICAgICAgICAg ICAgICAgICAgS2V5VmFsdWVMaXN0LA0KPiArICAgICAgICAgICAgICAgICAgSVNDU0lfS0VZX0NI QVBfQ0hBTExFTkdFDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiAgICAgIGlmIChDaGFsbGVu Z2UgPT0gTlVMTCkgew0KPiAgICAgICAgZ290byBPTl9FWElUOw0KPiAgICAgIH0NCj4gICAgICAv Lw0KPiAgICAgIC8vIFByb2Nlc3MgdGhlIENIQVAgaWRlbnRpZmllciBhbmQgQ0hBUCBDaGFsbGVu Z2UgZnJvbSBUYXJnZXQuDQo+ICAgICAgLy8gQ2FsY3VsYXRlIFJlc3BvbnNlIHZhbHVlLg0KPiAg ICAgIC8vDQo+ICAgICAgUmVzdWx0ID0gSVNjc2lOZXROdG9pIChJZGVudGlmaWVyKTsNCj4gICAg ICBpZiAoUmVzdWx0ID4gMHhGRikgew0KPiAgICAgICAgZ290byBPTl9FWElUOw0KPiAgICAgIH0N Cj4gDQo+ICAgICAgQXV0aERhdGEtPkluSWRlbnRpZmllciAgICAgID0gKFVJTlQzMikgUmVzdWx0 Ow0KPiAgICAgIEF1dGhEYXRhLT5JbkNoYWxsZW5nZUxlbmd0aCA9IElTQ1NJX0NIQVBfQVVUSF9N QVhfTEVOOw0KPiAtICAgIElTY3NpSGV4VG9CaW4gKChVSU5UOCAqKSBBdXRoRGF0YS0+SW5DaGFs bGVuZ2UsICZBdXRoRGF0YS0+SW5DaGFsbGVuZ2VMZW5ndGgsIENoYWxsZW5nZSk7DQo+ICsgICAg SVNjc2lIZXhUb0JpbiAoDQo+ICsgICAgICAoVUlOVDggKikgQXV0aERhdGEtPkluQ2hhbGxlbmdl LA0KPiArICAgICAgJkF1dGhEYXRhLT5JbkNoYWxsZW5nZUxlbmd0aCwNCj4gKyAgICAgIENoYWxs ZW5nZQ0KPiArICAgICAgKTsNCj4gICAgICBTdGF0dXMgPSBJU2NzaUNIQVBDYWxjdWxhdGVSZXNw b25zZSAoDQo+ICAgICAgICAgICAgICAgICBBdXRoRGF0YS0+SW5JZGVudGlmaWVyLA0KPiAgICAg ICAgICAgICAgICAgQXV0aERhdGEtPkF1dGhDb25maWctPkNIQVBTZWNyZXQsDQo+ICAgICAgICAg ICAgICAgICAoVUlOVDMyKSBBc2NpaVN0ckxlbiAoQXV0aERhdGEtPkF1dGhDb25maWctPkNIQVBT ZWNyZXQpLA0KPiAgICAgICAgICAgICAgICAgQXV0aERhdGEtPkluQ2hhbGxlbmdlLA0KPiAgICAg ICAgICAgICAgICAgQXV0aERhdGEtPkluQ2hhbGxlbmdlTGVuZ3RoLA0KPiAgICAgICAgICAgICAg ICAgQXV0aERhdGEtPkNIQVBSZXNwb25zZQ0KPiAgICAgICAgICAgICAgICAgKTsNCj4gDQo+ICAg ICAgLy8NCj4gICAgICAvLyBUcmFuc2l0IHRvIG5leHQgc3RlcC4NCj4gICAgICAvLw0KPiAgICAg IENvbm4tPkF1dGhTdGVwID0gSVNDU0lfQ0hBUF9TVEVQX1RIUkVFOw0KPiAgICAgIGJyZWFrOw0K PiANCj4gICAgY2FzZSBJU0NTSV9DSEFQX1NURVBfVEhSRUU6DQo+ICAgICAgLy8NCj4gICAgICAv LyBPbmUgd2F5IENIQVAgYXV0aGVudGljYXRpb24gYW5kIHRoZSB0YXJnZXQgd291bGQgbGlrZSB0 bw0KPiAgICAgIC8vIGF1dGhlbnRpY2F0ZSB1cy4NCj4gICAgICAvLw0KPiAgICAgIFN0YXR1cyA9 IEVGSV9TVUNDRVNTOw0KPiAgICAgIGJyZWFrOw0KPiANCj4gICAgY2FzZSBJU0NTSV9DSEFQX1NU RVBfRk9VUjoNCj4gICAgICBBU1NFUlQgKEF1dGhEYXRhLT5BdXRoQ29uZmlnLT5DSEFQVHlwZSA9 PSBJU0NTSV9DSEFQX01VVFVBTCk7DQo+ICAgICAgLy8NCj4gICAgICAvLyBUaGUgZm9ydGggc3Rl cCwgQ0hBUF9OPTxOPiBDSEFQX1I9PFI+IGlzIHJlY2VpdmVkIGZyb20gVGFyZ2V0Lg0KPiAgICAg IC8vDQo+ICAgICAgTmFtZSA9IElTY3NpR2V0VmFsdWVCeUtleUZyb21MaXN0IChLZXlWYWx1ZUxp c3QsIElTQ1NJX0tFWV9DSEFQX05BTUUpOw0KPiAgICAgIGlmIChOYW1lID09IE5VTEwpIHsNCj4g ICAgICAgIGdvdG8gT05fRVhJVDsNCj4gICAgICB9DQo+IA0KPiAtICAgIFJlc3BvbnNlID0gSVNj c2lHZXRWYWx1ZUJ5S2V5RnJvbUxpc3QgKEtleVZhbHVlTGlzdCwgSVNDU0lfS0VZX0NIQVBfUkVT UE9OU0UpOw0KPiArICAgIFJlc3BvbnNlID0gSVNjc2lHZXRWYWx1ZUJ5S2V5RnJvbUxpc3QgKA0K PiArICAgICAgICAgICAgICAgICBLZXlWYWx1ZUxpc3QsDQo+ICsgICAgICAgICAgICAgICAgIElT Q1NJX0tFWV9DSEFQX1JFU1BPTlNFDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ICAgICAgaWYg KFJlc3BvbnNlID09IE5VTEwpIHsNCj4gICAgICAgIGdvdG8gT05fRVhJVDsNCj4gICAgICB9DQo+ IA0KPiAgICAgIFJzcExlbiA9IElTQ1NJX0NIQVBfUlNQX0xFTjsNCj4gICAgICBJU2NzaUhleFRv QmluIChUYXJnZXRSc3AsICZSc3BMZW4sIFJlc3BvbnNlKTsNCj4gDQo+ICAgICAgLy8NCj4gICAg ICAvLyBDaGVjayB0aGUgQ0hBUCBOYW1lIGFuZCBSZXNwb25zZSByZXBsaWVkIGJ5IFRhcmdldC4N Cj4gICAgICAvLw0KPiAgICAgIFN0YXR1cyA9IElTY3NpQ0hBUEF1dGhUYXJnZXQgKEF1dGhEYXRh LCBUYXJnZXRSc3ApOw0KPiAgICAgIGJyZWFrOw0KPiANCj4gICAgZGVmYXVsdDoNCj4gICAgICBi cmVhazsNCj4gICAgfQ0KPiANCj4gIE9OX0VYSVQ6DQo+IA0KPiAgICBpZiAoS2V5VmFsdWVMaXN0 ICE9IE5VTEwpIHsNCj4gICAgICBJU2NzaUZyZWVLZXlWYWx1ZUxpc3QgKEtleVZhbHVlTGlzdCk7 DQo+ICAgIH0NCj4gDQo+ICAgIEZyZWVQb29sIChEYXRhKTsNCj4gDQo+ICAgIHJldHVybiBTdGF0 dXM7DQo+ICB9DQo+IA0KPiANCj4gIC8qKg0KPiAgICBUaGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSBD SEFQIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIGludG8gdGhlIGxvZ2luIFBEVQ0KPiAgICBk dXJpbmcgdGhlIHNlY3VyaXR5IG5lZ290aWF0aW9uIHN0YWdlIGluIHRoZSBpU0NTSSBjb25uZWN0 aW9uIGxvZ2luLg0KPiANCj4gICAgQHBhcmFtW2luXSAgICAgICBDb25uICAgICAgICBUaGUgaVND U0kgY29ubmVjdGlvbi4NCj4gICAgQHBhcmFtW2luLCBvdXRdICBQZHUgICAgICAgICBUaGUgUERV IHRvIHNlbmQgb3V0Lg0KPiANCj4gICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgQWxs IGNoZWNrIHBhc3NlZCBhbmQgdGhlIHBoYXNlLXJlbGF0ZWQgQ0hBUA0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBpbmZvIGlzIGZpbGxlZCBpbnRvIHRo ZSBpU0NTSSBQRFUuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRp Y2F0aW9uIGluZm8gaXMgZmlsbGVkIGludG8gdGhlIGlTQ1NJDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBEVS4NCj4gICAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg RmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gICAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJS T1IgICAgU29tZSBraW5kIG9mIHByb3RvY29sIGVycm9yIG9jY3VycmVkLg0KPiANCj4gICoqLw0K PiAgRUZJX1NUQVRVUw0KPiAgSVNjc2lDSEFQVG9TZW5kUmVxICgNCj4gICAgSU4gICAgICBJU0NT SV9DT05ORUNUSU9OICAqQ29ubiwNCj4gICAgSU4gT1VUICBORVRfQlVGICAgICAgICAgICAqUGR1 DQo+ICAgICkNCj4gIHsNCj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gICAgSVNDU0lfU0VTU0lPTiAgICAgICAgICAgICAgICpTZXNzaW9uOw0KPiAgICBJU0NTSV9M T0dJTl9SRVFVRVNUICAgICAgICAgKkxvZ2luUmVxOw0KPiAgICBJU0NTSV9DSEFQX0FVVEhfREFU QSAgICAgICAgKkF1dGhEYXRhOw0KPiAgICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgKlZh bHVlOw0KPiAgICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVTdHJbMjU2XTsNCj4g ICAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpSZXNwb25zZTsNCj4gICAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgIFJzcExlbjsNCj4gICAgQ0hBUjggICAgICAgICAgICAgICAgICAg ICAgICpDaGFsbGVuZ2U7DQo+IEBAIC0zNzYsOTUgKzQwNSwxMTQgQEAgSVNjc2lDSEFQVG9TZW5k UmVxICgNCj4gICAgUnNwTGVuICAgICAgPSAyICogSVNDU0lfQ0hBUF9SU1BfTEVOICsgMzsNCj4g ICAgUmVzcG9uc2UgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChSc3BMZW4pOw0KPiAgICBpZiAoUmVz cG9uc2UgPT0gTlVMTCkgew0KPiAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g ICAgfQ0KPiANCj4gICAgQ2hhbGxlbmdlTGVuICA9IDIgKiBJU0NTSV9DSEFQX1JTUF9MRU4gKyAz Ow0KPiAgICBDaGFsbGVuZ2UgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoQ2hhbGxlbmdlTGVuKTsN Cj4gICAgaWYgKENoYWxsZW5nZSA9PSBOVUxMKSB7DQo+ICAgICAgRnJlZVBvb2wgKFJlc3BvbnNl KTsNCj4gICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICAgIH0NCj4gDQo+ICAg IHN3aXRjaCAoQ29ubi0+QXV0aFN0ZXApIHsNCj4gICAgY2FzZSBJU0NTSV9BVVRIX0lOSVRJQUw6 DQo+ICAgICAgLy8NCj4gICAgICAvLyBJdCdzIHRoZSBpbml0aWFsIExvZ2luIFJlcXVlc3QuIEZp bGwgaW4gdGhlIGtleT12YWx1ZSBwYWlycyBtYW5kYXRvcnkNCj4gICAgICAvLyBmb3IgdGhlIGlu aXRpYWwgTG9naW4gUmVxdWVzdC4NCj4gICAgICAvLw0KPiAtICAgIElTY3NpQWRkS2V5VmFsdWVQ YWlyIChQZHUsIElTQ1NJX0tFWV9JTklUSUFUT1JfTkFNRSwgbVByaXZhdGUtPkluaXRpYXRvck5h bWUpOw0KPiArICAgIElTY3NpQWRkS2V5VmFsdWVQYWlyICgNCj4gKyAgICAgIFBkdSwNCj4gKyAg ICAgIElTQ1NJX0tFWV9JTklUSUFUT1JfTkFNRSwNCj4gKyAgICAgIG1Qcml2YXRlLT5Jbml0aWF0 b3JOYW1lDQo+ICsgICAgICApOw0KPiAgICAgIElTY3NpQWRkS2V5VmFsdWVQYWlyIChQZHUsIElT Q1NJX0tFWV9TRVNTSU9OX1RZUEUsICJOb3JtYWwiKTsNCj4gICAgICBJU2NzaUFkZEtleVZhbHVl UGFpciAoDQo+ICAgICAgICBQZHUsDQo+ICAgICAgICBJU0NTSV9LRVlfVEFSR0VUX05BTUUsDQo+ ICAgICAgICBTZXNzaW9uLT5Db25maWdEYXRhLT5TZXNzaW9uQ29uZmlnRGF0YS5UYXJnZXROYW1l DQo+ICAgICAgICApOw0KPiANCj4gICAgICBpZiAoU2Vzc2lvbi0+QXV0aFR5cGUgPT0gSVNDU0lf QVVUSF9UWVBFX05PTkUpIHsNCj4gICAgICAgIFZhbHVlID0gSVNDU0lfS0VZX1ZBTFVFX05PTkU7 DQo+ICAgICAgICBJU0NTSV9TRVRfRkxBRyAoTG9naW5SZXEsIElTQ1NJX0xPR0lOX1JFUV9QRFVf RkxBR19UUkFOU0lUKTsNCj4gICAgICB9IGVsc2Ugew0KPiAgICAgICAgVmFsdWUgPSBJU0NTSV9B VVRIX01FVEhPRF9DSEFQOw0KPiAgICAgIH0NCj4gDQo+ICAgICAgSVNjc2lBZGRLZXlWYWx1ZVBh aXIgKFBkdSwgSVNDU0lfS0VZX0FVVEhfTUVUSE9ELCBWYWx1ZSk7DQo+IA0KPiAgICAgIGJyZWFr Ow0KPiANCj4gICAgY2FzZSBJU0NTSV9DSEFQX1NURVBfT05FOg0KPiAgICAgIC8vDQo+IC0gICAg Ly8gRmlyc3Qgc3RlcCwgc2VuZCB0aGUgTG9naW4gUmVxdWVzdCB3aXRoIENIQVBfQT08QTEsQTIu Li4+IGtleS12YWx1ZSBwYWlyLg0KPiArICAgIC8vIEZpcnN0IHN0ZXAsIHNlbmQgdGhlIExvZ2lu IFJlcXVlc3Qgd2l0aCBDSEFQX0E9PEExLEEyLi4uPiBrZXktdmFsdWUNCj4gKyAgICAvLyBwYWly Lg0KPiAgICAgIC8vDQo+ICAgICAgQXNjaWlTUHJpbnQgKFZhbHVlU3RyLCBzaXplb2YgKFZhbHVl U3RyKSwgIiVkIiwgSVNDU0lfQ0hBUF9BTEdPUklUSE1fTUQ1KTsNCj4gICAgICBJU2NzaUFkZEtl eVZhbHVlUGFpciAoUGR1LCBJU0NTSV9LRVlfQ0hBUF9BTEdPUklUSE0sIFZhbHVlU3RyKTsNCj4g DQo+ICAgICAgQ29ubi0+QXV0aFN0ZXAgPSBJU0NTSV9DSEFQX1NURVBfVFdPOw0KPiAgICAgIGJy ZWFrOw0KPiANCj4gICAgY2FzZSBJU0NTSV9DSEFQX1NURVBfVEhSRUU6DQo+ICAgICAgLy8NCj4g ICAgICAvLyBUaGlyZCBzdGVwLCBzZW5kIHRoZSBMb2dpbiBSZXF1ZXN0IHdpdGggQ0hBUF9OPTxO PiBDSEFQX1I9PFI+IG9yDQo+ICAgICAgLy8gQ0hBUF9OPTxOPiBDSEFQX1I9PFI+IENIQVBfST08 ST4gQ0hBUF9DPTxDPiBpZiB0YXJnZXQgYXV0aGVudGljYXRpb24gaXMNCj4gICAgICAvLyByZXF1 aXJlZCB0b28uDQo+ICAgICAgLy8NCj4gICAgICAvLyBDSEFQX049PE4+DQo+ICAgICAgLy8NCj4g LSAgICBJU2NzaUFkZEtleVZhbHVlUGFpciAoUGR1LCBJU0NTSV9LRVlfQ0hBUF9OQU1FLCAoQ0hB UjggKikgJkF1dGhEYXRhLT5BdXRoQ29uZmlnLT5DSEFQTmFtZSk7DQo+ICsgICAgSVNjc2lBZGRL ZXlWYWx1ZVBhaXIgKA0KPiArICAgICAgUGR1LA0KPiArICAgICAgSVNDU0lfS0VZX0NIQVBfTkFN RSwNCj4gKyAgICAgIChDSEFSOCAqKSAmQXV0aERhdGEtPkF1dGhDb25maWctPkNIQVBOYW1lDQo+ ICsgICAgICApOw0KPiAgICAgIC8vDQo+ICAgICAgLy8gQ0hBUF9SPTxSPg0KPiAgICAgIC8vDQo+ IC0gICAgSVNjc2lCaW5Ub0hleCAoKFVJTlQ4ICopIEF1dGhEYXRhLT5DSEFQUmVzcG9uc2UsIElT Q1NJX0NIQVBfUlNQX0xFTiwgUmVzcG9uc2UsICZSc3BMZW4pOw0KPiArICAgIElTY3NpQmluVG9I ZXggKA0KPiArICAgICAgKFVJTlQ4ICopIEF1dGhEYXRhLT5DSEFQUmVzcG9uc2UsDQo+ICsgICAg ICBJU0NTSV9DSEFQX1JTUF9MRU4sDQo+ICsgICAgICBSZXNwb25zZSwNCj4gKyAgICAgICZSc3BM ZW4NCj4gKyAgICAgICk7DQo+ICAgICAgSVNjc2lBZGRLZXlWYWx1ZVBhaXIgKFBkdSwgSVNDU0lf S0VZX0NIQVBfUkVTUE9OU0UsIFJlc3BvbnNlKTsNCj4gDQo+ICAgICAgaWYgKEF1dGhEYXRhLT5B dXRoQ29uZmlnLT5DSEFQVHlwZSA9PSBJU0NTSV9DSEFQX01VVFVBTCkgew0KPiAgICAgICAgLy8N Cj4gICAgICAgIC8vIENIQVBfST08ST4NCj4gICAgICAgIC8vDQo+ICAgICAgICBJU2NzaUdlblJh bmRvbSAoKFVJTlQ4ICopICZBdXRoRGF0YS0+T3V0SWRlbnRpZmllciwgMSk7DQo+ICAgICAgICBB c2NpaVNQcmludCAoVmFsdWVTdHIsIHNpemVvZiAoVmFsdWVTdHIpLCAiJWQiLCBBdXRoRGF0YS0+ T3V0SWRlbnRpZmllcik7DQo+ICAgICAgICBJU2NzaUFkZEtleVZhbHVlUGFpciAoUGR1LCBJU0NT SV9LRVlfQ0hBUF9JREVOVElGSUVSLCBWYWx1ZVN0cik7DQo+ICAgICAgICAvLw0KPiAgICAgICAg Ly8gQ0hBUF9DPTxDPg0KPiAgICAgICAgLy8NCj4gICAgICAgIElTY3NpR2VuUmFuZG9tICgoVUlO VDggKikgQXV0aERhdGEtPk91dENoYWxsZW5nZSwgSVNDU0lfQ0hBUF9SU1BfTEVOKTsNCj4gICAg ICAgIEF1dGhEYXRhLT5PdXRDaGFsbGVuZ2VMZW5ndGggPSBJU0NTSV9DSEFQX1JTUF9MRU47DQo+ IC0gICAgICBJU2NzaUJpblRvSGV4ICgoVUlOVDggKikgQXV0aERhdGEtPk91dENoYWxsZW5nZSwg SVNDU0lfQ0hBUF9SU1BfTEVOLCBDaGFsbGVuZ2UsICZDaGFsbGVuZ2VMZW4pOw0KPiArICAgICAg SVNjc2lCaW5Ub0hleCAoDQo+ICsgICAgICAgIChVSU5UOCAqKSBBdXRoRGF0YS0+T3V0Q2hhbGxl bmdlLA0KPiArICAgICAgICBJU0NTSV9DSEFQX1JTUF9MRU4sDQo+ICsgICAgICAgIENoYWxsZW5n ZSwNCj4gKyAgICAgICAgJkNoYWxsZW5nZUxlbg0KPiArICAgICAgICApOw0KPiAgICAgICAgSVNj c2lBZGRLZXlWYWx1ZVBhaXIgKFBkdSwgSVNDU0lfS0VZX0NIQVBfQ0hBTExFTkdFLCBDaGFsbGVu Z2UpOw0KPiANCj4gICAgICAgIENvbm4tPkF1dGhTdGVwID0gSVNDU0lfQ0hBUF9TVEVQX0ZPVVI7 DQo+ICAgICAgfQ0KPiAgICAgIC8vDQo+ICAgICAgLy8gU2V0IHRoZSBzdGFnZSB0cmFuc2l0aW9u IGZsYWcuDQo+ICAgICAgLy8NCj4gICAgICBJU0NTSV9TRVRfRkxBRyAoTG9naW5SZXEsIElTQ1NJ X0xPR0lOX1JFUV9QRFVfRkxBR19UUkFOU0lUKTsNCj4gICAgICBicmVhazsNCj4gDQo+ICAgIGRl ZmF1bHQ6DQo+ICAgICAgU3RhdHVzID0gRUZJX1BST1RPQ09MX0VSUk9SOw0KPiAgICAgIGJyZWFr Ow0KPiAgICB9DQo+IA0KPiAgICBGcmVlUG9vbCAoUmVzcG9uc2UpOw0KPiAgICBGcmVlUG9vbCAo Q2hhbGxlbmdlKTsNCj4gDQo+ICAgIHJldHVybiBTdGF0dXM7DQo+IC0tDQo+IDIuMTkuMS4zLmcz MDI0N2FhNWQyMDENCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCg0K