Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp1672994rwr; Thu, 27 Apr 2023 23:29:49 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4SmQV8JLS97rMAiDJf2tDAN5v3YSgSVJIXUblR5JOkyqefpf48LrAgYWbVw6xVoKp8pDvN X-Received: by 2002:a17:902:f790:b0:1a5:a1b:bbd8 with SMTP id q16-20020a170902f79000b001a50a1bbbd8mr3891371pln.45.1682663388720; Thu, 27 Apr 2023 23:29:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682663388; cv=none; d=google.com; s=arc-20160816; b=dWEPuC/jnkAmaOwkD71E7ba3Lhzc5nPlZ3itSmuTA2UxnAi5+EoPFd1VR0i2amfZeZ 10VWFj/TNOhtb9Z80okBO6dHsooLDwQPOJIL574rYgdtjVbYbTzdUDNVeEiiw7As2oFG yk1XSqEJyilm5ggRyGSlIptqE9ysmgELZMI2CpvPS/dySb3XxRiC3H2ZdbP68i2UFitp YNQrgKQ2eKbSo9L4ZLhOmaEBci2Qr5PQoYbQOa+5nxLtORxV5YalPppcX01Y+stsiEWI qLZj/68HkZimyLG4DwBSw0TmjfQRhkOW958zeAXDp7AZ1gji2yfNMKWpCfn5USTSZzni Cpnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:authenticated-by; bh=anttK5A/8SR3PGAba2k/gqg02DEWXl60Lz7K0kwayrY=; b=UFDwFOhJ0IpmvNCJgSMALVTWkuAZrkabQlipJICMNnQBrEy+ScvUZtPbWfsqBaBYVX ESmXxFK3gJOZ2iRVRsxqef2v+bJp19mckXo6O5o7SeeqCbxFHLyGyDaheXk3I1x0RJfK ElRMW/FaFEo8hRrGpRQfKO3LlWP1tr/Ag20b6aedihflCOy2wDzm3YRzkX/5OMziCAtG TfkRmNg47fTzFaqdZHh52OU450XfF9BHutgDs2LhmWrZikkf6Aqi3S9KAqImLDICHEOW I/R5CZfIzv+vku4OuZ5Gyfz+7PD+qf1TCDRlDNqJ7YwbpvZF4xRgkjvCbcEelEKUPStK 6z9Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r18-20020a170902c61200b001a6825fe670si19181062plr.6.2023.04.27.23.29.34; Thu, 27 Apr 2023 23:29:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230150AbjD1GV4 (ORCPT + 63 others); Fri, 28 Apr 2023 02:21:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230087AbjD1GVz (ORCPT ); Fri, 28 Apr 2023 02:21:55 -0400 Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 023CF19B0 for ; Thu, 27 Apr 2023 23:21:48 -0700 (PDT) Authenticated-By: X-SpamFilter-By: ArmorX SpamTrap 5.77 with qID 33S6LgQoA000470, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36506.realtek.com.tw[172.21.6.27]) by rtits2.realtek.com.tw (8.15.2/2.81/5.90) with ESMTPS id 33S6LgQoA000470 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=OK); Fri, 28 Apr 2023 14:21:42 +0800 Received: from RTEXMBS06.realtek.com.tw (172.21.6.99) by RTEXH36506.realtek.com.tw (172.21.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.17; Fri, 28 Apr 2023 14:21:44 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXMBS06.realtek.com.tw (172.21.6.99) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Fri, 28 Apr 2023 14:21:43 +0800 Received: from RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d]) by RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d%5]) with mapi id 15.01.2375.007; Fri, 28 Apr 2023 14:21:43 +0800 From: Ping-Ke Shih To: Bitterblue Smith , "linux-wireless@vger.kernel.org" CC: Jes Sorensen Subject: RE: [PATCH] wifi: rtl8xxxu: Support new chip RTL8192FU Thread-Topic: [PATCH] wifi: rtl8xxxu: Support new chip RTL8192FU Thread-Index: AQHZd5tasrPlKIiNeUKI8XDI8zOKla9ACi8A Date: Fri, 28 Apr 2023 06:21:43 +0000 Message-ID: <867b2c35f606434bb82ecc17d0fd9336@realtek.com> References: <90102fa5-5065-9598-d21f-3624629a0cb5@gmail.com> In-Reply-To: <90102fa5-5065-9598-d21f-3624629a0cb5@gmail.com> Accept-Language: en-US, zh-TW Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.21.69.188] x-kse-serverinfo: RTEXMBS06.realtek.com.tw, 9 x-kse-antispam-interceptor-info: fallback x-kse-antivirus-interceptor-info: fallback Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSE-AntiSpam-Interceptor-Info: fallback X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQml0dGVyYmx1ZSBTbWl0 aCA8cnRsODgyMWNlcmZlMkBnbWFpbC5jb20+DQo+IFNlbnQ6IFdlZG5lc2RheSwgQXByaWwgMjYs IDIwMjMgMToyOCBBTQ0KPiBUbzogbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnDQo+IENj OiBKZXMgU29yZW5zZW4gPEplcy5Tb3JlbnNlbkBnbWFpbC5jb20+OyBQaW5nLUtlIFNoaWggPHBr c2hpaEByZWFsdGVrLmNvbT4NCj4gU3ViamVjdDogW1BBVENIXSB3aWZpOiBydGw4eHh4dTogU3Vw cG9ydCBuZXcgY2hpcCBSVEw4MTkyRlUNCj4gDQo+IFRoaXMgaXMgYSBuZXdlciBjaGlwLCBzaW1p bGFyIHRvIHRoZSBSVEw4NzEwQlUgaW4gdGhhdCBpdCB1c2VzIHRoZSBzYW1lDQo+IFBIWSBzdGF0 dXMgc3RydWN0cy4NCj4gDQo+IEZlYXR1cmVzOiAyLjQgR0h6LCBiL2cvbiBtb2RlLCAyVDJSLCAz MDAgTWJwcy4NCj4gDQo+IEl0IGNhbiBhbGxlZ2VkbHkgaGF2ZSBCbHVldG9vdGgsIGJ1dCB0aGF0 J3Mgbm90IGltcGxlbWVudGVkIGhlcmUuDQo+IA0KPiBUaGlzIGNoaXAgY2FuIGhhdmUgbWFueSBS RkUgKFJGIGZyb250IGVuZCkgdHlwZXMsIG9mIHdoaWNoIHR5cGUgNSBpcw0KPiB0aGUgb25seSBv bmUgdGVzdGVkLiBNYW55IG9mIHRoZSBvdGhlciB0eXBlcyBuZWVkIGRpZmZlcmVudA0KPiBpbml0 aWFsaXNhdGlvbiB0YWJsZXMuIFRoZXkgY2FuIGJlIGFkZGVkIGlmIHNvbWVvbmUgd2FudHMgdGhl bS4NCj4gDQo+IFRoZSB2ZW5kb3IgZHJpdmVyIHY1LjguNi4yXzM1NTM4LjIwMTkxMDI4X0NPRVgy MDE5MDkxMC0wZDAyIGZyb20NCj4gaHR0cHM6Ly9naXRodWIuY29tL0JyaWdodFgvcnRsODE5MmZ1 IHdhcyB1c2VkIGFzIHJlZmVyZW5jZS4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEJpdHRlcmJsdWUg U21pdGggPHJ0bDg4MjFjZXJmZTJAZ21haWwuY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvbmV0L3dp cmVsZXNzL3JlYWx0ZWsvcnRsOHh4eHUvS2NvbmZpZyB8ICAgIDMgKy0NCj4gIC4uLi9uZXQvd2ly ZWxlc3MvcmVhbHRlay9ydGw4eHh4dS9ydGw4eHh4dS5oICB8ICAgNDcgKw0KPiAgLi4uL3JlYWx0 ZWsvcnRsOHh4eHUvcnRsOHh4eHVfODE4OGYuYyAgICAgICAgIHwgICAgMyArLQ0KPiAgLi4uL3Jl YWx0ZWsvcnRsOHh4eHUvcnRsOHh4eHVfODE5MmYuYyAgICAgICAgIHwgMjA4MSArKysrKysrKysr KysrKysrKw0KPiAgLi4uL3JlYWx0ZWsvcnRsOHh4eHUvcnRsOHh4eHVfODcxMGIuYyAgICAgICAg IHwgICAgMSArDQo+ICAuLi4vcmVhbHRlay9ydGw4eHh4dS9ydGw4eHh4dV84NzIzYi5jICAgICAg ICAgfCAgICAxICsNCj4gIC4uLi93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L3J0bDh4eHh1X2Nv cmUuYyB8ICAxMDQgKy0NCj4gIC4uLi93aXJlbGVzcy9yZWFsdGVrL3J0bDh4eHh1L3J0bDh4eHh1 X3JlZ3MuaCB8ICAgMTUgKw0KPiAgOCBmaWxlcyBjaGFuZ2VkLCAyMjI1IGluc2VydGlvbnMoKyks IDMwIGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVs ZXNzL3JlYWx0ZWsvcnRsOHh4eHUvcnRsOHh4eHVfODE5MmYuYw0KPiANCg0KWy4uLl0NCg0KPiAr c3RhdGljIHZvaWQgcnRsODE5MmZ1X2NvbmZpZ19rZnJlZShzdHJ1Y3QgcnRsOHh4eHVfcHJpdiAq cHJpdiwgdTggY2hhbm5lbCkNCj4gK3sNCj4gKyAgICAgICB1OCBiYl9nYWluWzNdID0geyBFRlVT RV9VTkRFRklORUQsIEVGVVNFX1VOREVGSU5FRCwgRUZVU0VfVU5ERUZJTkVEIH07DQo+ICsgICAg ICAgdTggYmJfZ2Fpbl9wYXRoX21hc2tbMl0gPSB7IDB4MGYsIDB4ZjAgfTsNCj4gKyAgICAgICBl bnVtIHJ0bDh4eHh1X3JmcGF0aCByZnBhdGg7DQo+ICsgICAgICAgdTggYmJfZ2Fpbl9mb3JfcGF0 aDsNCj4gKyAgICAgICB1OCBjaGFubmVsX2lkeDsNCj4gKw0KPiArICAgICAgIGlmIChjaGFubmVs ID49IDEgJiYgY2hhbm5lbCA8PSAzKQ0KPiArICAgICAgICAgICAgICAgY2hhbm5lbF9pZHggPSAw Ow0KPiArICAgICAgIGlmIChjaGFubmVsID49IDQgJiYgY2hhbm5lbCA8PSA5KQ0KPiArICAgICAg ICAgICAgICAgY2hhbm5lbF9pZHggPSAxOw0KPiArICAgICAgIGlmIChjaGFubmVsID49IDEwICYm IGNoYW5uZWwgPD0gMTQpDQo+ICsgICAgICAgICAgICAgICBjaGFubmVsX2lkeCA9IDI7DQo+ICsN Cj4gKyAgICAgICBydGw4eHh4dV9yZWFkX2VmdXNlOChwcml2LCAweDFlZSwgJmJiX2dhaW5bMV0p Ow0KPiArICAgICAgIHJ0bDh4eHh1X3JlYWRfZWZ1c2U4KHByaXYsIDB4MWVjLCAmYmJfZ2Fpblsw XSk7DQo+ICsgICAgICAgcnRsOHh4eHVfcmVhZF9lZnVzZTgocHJpdiwgMHgxZWEsICZiYl9nYWlu WzJdKTsNCg0KQ2FuIHlvdSBkZWZpbmUgdGhlc2UgZmllbGRzIGluIHN0cnVjdCBydGw4MTkyZnVf ZWZ1c2UsIGFuZCBhY2Nlc3MgdmlhDQp0aGUgc3RydWN0PyANCg0KDQo+ICsNCj4gKyAgICAgICBp ZiAoYmJfZ2FpblsxXSA9PSBFRlVTRV9VTkRFRklORUQpDQo+ICsgICAgICAgICAgICAgICByZXR1 cm47DQo+ICsNCj4gKyAgICAgICBpZiAoYmJfZ2FpblswXSA9PSBFRlVTRV9VTkRFRklORUQpDQo+ ICsgICAgICAgICAgICAgICBiYl9nYWluWzBdID0gYmJfZ2FpblsxXTsNCj4gKw0KPiArICAgICAg IGlmIChiYl9nYWluWzJdID09IEVGVVNFX1VOREVGSU5FRCkNCj4gKyAgICAgICAgICAgICAgIGJi X2dhaW5bMl0gPSBiYl9nYWluWzFdOw0KPiArDQo+ICsgICAgICAgZm9yIChyZnBhdGggPSBSRl9B OyByZnBhdGggPCBwcml2LT5yZl9wYXRoczsgcmZwYXRoKyspIHsNCj4gKyAgICAgICAgICAgICAg IC8qIHBvd2VyX3RyaW0gYmFzZWQgb24gNTVbMTk6MTRdICovDQo+ICsgICAgICAgICAgICAgICBy dGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIHJmcGF0aCwgUkY2MDUyX1JFR19VTktOT1dO XzU1LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoNSks IDEpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAvKiBlbmFibGUgNTVbMTRdIGZvciAwLjVkYiBz dGVwICovDQo+ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYs IHJmcGF0aCwgMHhmNSwgQklUKDE4KSwgMSk7DQoNCiNkZWZpbmUgUkY2MDUyX1JFR19HQUlOX0NU UkwgMHg1NQ0KDQo+ICsNCj4gKyAgICAgICAgICAgICAgIC8qIGVudGVyIHBvd2VyX3RyaW0gZGVi dWcgbW9kZSAqLw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhw cml2LCByZnBhdGgsIFJGNjA1Ml9SRUdfVU5LTk9XTl9ERiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQklUKDcpLCAxKTsNCj4gKw0KPiArICAgICAgICAgICAg ICAgLyogd3JpdGUgZW5hYmxlICovDQo+ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZV9y ZnJlZ19tYXNrKHByaXYsIHJmcGF0aCwgUkY2MDUyX1JFR19XRV9MVVQsIEJJVCg3KSwgMSk7DQo+ ICsNCj4gKyAgICAgICAgICAgICAgIGJiX2dhaW5fZm9yX3BhdGggPSAoYmJfZ2FpbltjaGFubmVs X2lkeF0gJiBiYl9nYWluX3BhdGhfbWFza1tyZnBhdGhdKQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA+PiBfX2ZmcyhiYl9nYWluX3BhdGhfbWFza1tyZnBhdGhdKTsNCg0KTm9y bWFsbHksIHB1dHRpbmcgb3BlcmF0b3IgPj4gaW4gdGFpbCwgYnV0IHRoaXMgc3RhdGVtZW50IGlz IHNvIGxvbmcuDQpIb3cgYWJvdXQgdGhpcz8NCg0KCQliYl9nYWluX2Zvcl9wYXRoID0gKGJiX2dh aW5bY2hhbm5lbF9pZHhdICYgYmJfZ2Fpbl9wYXRoX21hc2tbcmZwYXRoXSk7DQoJCWJiX2dhaW5f Zm9yX3BhdGggPj49IF9fZmZzKGJiX2dhaW5fcGF0aF9tYXNrW3JmcGF0aF0pOw0KDQo+ICsNCj4g KyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgcmZwYXRoLCBS RjYwNTJfUkVHX1RYUEFfRzMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4NzAwMDAsIGNoYW5uZWxfaWR4ICogMik7DQo+ICsgICAgICAgICAgICAgICBydGw4 eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIHJmcGF0aCwgUkY2MDUyX1JFR19UWFBBX0czLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmLCBiYl9nYWlu X2Zvcl9wYXRoKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdf bWFzayhwcml2LCByZnBhdGgsIFJGNjA1Ml9SRUdfVFhQQV9HMywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDAwMCwgY2hhbm5lbF9pZHggKiAyICsgMSk7 DQo+ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIHJmcGF0 aCwgUkY2MDUyX1JFR19UWFBBX0czLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDNmLCBiYl9nYWluX2Zvcl9wYXRoKTsNCj4gKw0KPiArICAgICAgICAgICAg ICAgLyogbGVhdmUgcG93ZXJfdHJpbSBkZWJ1ZyBtb2RlICovDQo+ICsgICAgICAgICAgICAgICBy dGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIHJmcGF0aCwgUkY2MDUyX1JFR19VTktOT1dO X0RGLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoNyks IDApOw0KPiArDQo+ICsgICAgICAgICAgICAgICAvKiB3cml0ZSBkaXNhYmxlICovDQo+ICsgICAg ICAgICAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIHJmcGF0aCwgUkY2MDUy X1JFR19XRV9MVVQsIEJJVCg3KSwgMCk7DQo+ICsgICAgICAgfQ0KPiArfQ0KPiArDQoNClsuLi5d DQoNCj4gK3N0YXRpYyB2b2lkIHJ0bDgxOTJmdV9pbml0X3BoeV9iYihzdHJ1Y3QgcnRsOHh4eHVf cHJpdiAqcHJpdikNCj4gK3sNCj4gKyAgICAgICAvKiBFbmFibGUgQkIgYW5kIFJGICovDQo+ICsg ICAgICAgcnRsOHh4eHVfd3JpdGUxNl9zZXQocHJpdiwgUkVHX1NZU19GVU5DLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNZU19GVU5DX0JCUlNUQiB8IFNZU19GVU5DX0JCX0dMQl9S U1ROKTsNCj4gKw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlOChwcml2LCBSRUdfUkZfQ1RSTCwg UkZfRU5BQkxFIHwgUkZfUlNUQiB8IFJGX1NETVJTVEIpOw0KPiArDQo+ICsgICAgICAgLyogVG8g Rml4IE1BQyBsb29wYmFjayBtb2RlIGZhaWwuICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGU4 KHByaXYsIFJFR19MRE9IQ0kxMl9DVFJMLCAweGYpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRl OChwcml2LCAweDE1LCAweGU5KTsNCg0KI2RlZmluZSBSRUdfU1lTX1NXUl9DVFJMMiAweDE0DQoN CllvdSBjYW4gdXNlIFJFR19TWVNfU1dSX0NUUkwyICsgMSBoZXJlLg0KDQo+ICsNCj4gKyAgICAg ICBydGw4eHh4dV9pbml0X3BoeV9yZWdzKHByaXYsIHJ0bDgxOTJmdV9waHlfaW5pdF90YWJsZSk7 DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV9pbml0X3BoeV9yZWdzKHByaXYsIHJ0bDgxOTJmX2Fn Y190YWJsZSk7DQo+ICt9DQo+ICsNCg0KWy4uLl0NCg0KPiArc3RhdGljIGludCBydGw4MTkyZnVf aXFrX3BhdGhfYShzdHJ1Y3QgcnRsOHh4eHVfcHJpdiAqcHJpdikNCj4gK3sNCj4gKyAgICAgICB1 MzIgcmVnX2VhYywgcmVnX2U5NCwgcmVnX2U5YywgdmFsMzI7DQo+ICsgICAgICAgdTMyIHJmXzB4 NThfaSwgcmZfMHg1OF9xOw0KPiArICAgICAgIHU4IHJmZSA9IHByaXYtPnJmZV90eXBlOw0KPiAr ICAgICAgIGludCByZXN1bHQgPSAwOw0KPiArICAgICAgIGludCBrdGltZSwgaTsNCj4gKw0KPiAr ICAgICAgIC8qIExlYXZlIElRSyBtb2RlICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9t YXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAsIDApOw0KPiArDQo+ICsgICAgICAg cnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfRlBHQTBfQU5BTE9HNCwgMHhjY2YwMDBjMCk7DQo+ ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCAweGQ5NCwgMHg0NGZmYmI0NCk7DQoNCiNk ZWZpbmUgUkVHX0FOQVBXUjEgMHhkOTQNCg0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJp diwgUkVHX1JYX1dBSVRfQ0NBLCAweDAwNDAwMDQwKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0 ZTMyKHByaXYsIFJFR19PRkRNMF9UUlhfUEFUSF9FTkFCTEUsIDB4NmYwMDU0MDMpOw0KPiArICAg ICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX09GRE0wX1RSX01VWF9QQVIsIDB4MDAwODA0 ZTQpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0ZQR0EwX1hDRF9SRl9T V19DVFJMLCAweDA0MjAzNDAwKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJF R19GUEdBMF9YQV9IU1NJX1BBUk0xLCAweDAxMDAwMTAwKTsNCj4gKw0KPiArICAgICAgIHJ0bDh4 eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQSwgUkY2MDUyX1JFR19VTktOT1dOX0RGLCBC SVQoNCksIDEpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZf QSwgUkY2MDUyX1JFR19VTktOT1dOX0RGLCBCSVQoMTEpLCAxKTsNCj4gKyAgICAgICBpZiAocmZl ID09IDcgfHwgcmZlID09IDggfHwgcmZlID09IDkgfHwgcmZlID09IDEyKQ0KPiArICAgICAgICAg ICAgICAgdmFsMzIgPSAweDMwOw0KPiArICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgIHZh bDMyID0gMHhlOTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJG X0EsIFJGNjA1Ml9SRUdfVU5LTk9XTl81NiwgMHgwMDNmZiwgdmFsMzIpOw0KPiArDQo+ICsgICAg ICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAs IDB4ODA4MDAwKTsNCj4gKw0KPiArICAgICAgIC8qIHBhdGgtQSBJUUsgc2V0dGluZyAqLw0KPiAr ICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1RYX0lRS19UT05FX0EsIDB4MTgwMDhj MWMpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1JYX0lRS19UT05FX0Es IDB4MzgwMDhjMWMpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1RYX0lR S19UT05FX0IsIDB4MzgwMDhjMWMpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwg UkVHX1JYX0lRS19UT05FX0IsIDB4MzgwMDhjMWMpOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVf d3JpdGUzMihwcml2LCBSRUdfVFhfSVFLX1BJX0EsIDB4ODIxNDAwMGYpOw0KPiArICAgICAgIHJ0 bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1JYX0lRS19QSV9BLCAweDI4MTQwMDAwKTsNCj4gKw0K PiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1RYX0lRSywgMHgwMTAwN2MwMCk7 DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfSVFLLCAweDAxMDA0ODAw KTsNCj4gKw0KPiArICAgICAgIC8qIExPIGNhbGlicmF0aW9uIHNldHRpbmcgKi8NCj4gKyAgICAg ICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19JUUtfQUdDX1JTUCwgMHgwMGU2MjkxMSk7DQo+ ICsNCj4gKyAgICAgICAvKiBPbmUgc2hvdCwgcGF0aCBBIExPSyAmIElRSyAqLw0KPiArICAgICAg IHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0lRS19BR0NfUFRTLCAweGZhMDA1ODAwKTsNCj4g KyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19JUUtfQUdDX1BUUywgMHhmODAwNTgw MCk7DQo+ICsNCj4gKyAgICAgICBtZGVsYXkoMTUpOw0KPiArDQo+ICsgICAgICAga3RpbWUgPSAw Ow0KPiArICAgICAgIHdoaWxlIChydGw4eHh4dV9yZWFkMzIocHJpdiwgMHhlOTgpID09IDAgJiYg a3RpbWUgPCAyMSkgew0KDQojZGVmaW5lIFJFR19JUUtfUlRQX1RYQSAweGU5OA0KDQo+ICsgICAg ICAgICAgICAgICBtZGVsYXkoNSk7DQo+ICsgICAgICAgICAgICAgICBrdGltZSArPSA1Ow0KPiAr ICAgICAgIH0NCj4gKw0KPiArICAgICAgIC8qIENoZWNrIGZhaWxlZCAqLw0KPiArICAgICAgIHJl Z19lYWMgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwgUkVHX1JYX1BPV0VSX0FGVEVSX0lRS19BXzIp Ow0KPiArICAgICAgIHJlZ19lOTQgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwgUkVHX1RYX1BPV0VS X0JFRk9SRV9JUUtfQSk7DQo+ICsgICAgICAgcmVnX2U5YyA9IHJ0bDh4eHh1X3JlYWQzMihwcml2 LCBSRUdfVFhfUE9XRVJfQUZURVJfSVFLX0EpOw0KPiArDQo+ICsgICAgICAgLyogcmVsb2FkIDB4 ZGYgYW5kIENDS19JTkQgb2ZmICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHBy aXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAsIDApOw0KPiArDQo+ICsgICAgICAgcnRsOHh4 eHVfd3JpdGVfcmZyZWdfbWFzayhwcml2LCBSRl9BLCBSRjYwNTJfUkVHX1dFX0xVVCwgQklUKDQp LCAxKTsNCj4gKw0KPiArICAgICAgIHZhbDMyID0gcnRsOHh4eHVfcmVhZF9yZnJlZyhwcml2LCBS Rl9BLCAweDU4KTsNCg0KI2RlZmluZSBSRjYwNTJfUkVHX1RYTU9EIDB4NTgNCg0KPiArICAgICAg IHJmXzB4NThfaSA9IHUzMl9nZXRfYml0cyh2YWwzMiwgMHhmYzAwMCk7DQo+ICsgICAgICAgcmZf MHg1OF9xID0gdTMyX2dldF9iaXRzKHZhbDMyLCAweDAwM2YwKTsNCj4gKw0KPiArICAgICAgIGZv ciAoaSA9IDA7IGkgPCA4OyBpKyspIHsNCj4gKyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRl X3JmcmVnX21hc2socHJpdiwgUkZfQSwgUkY2MDUyX1JFR19UWFBBX0czLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwLCBpKTsNCj4gKyAgICAgICAg ICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQSwgUkY2MDUyX1JFR19U WFBBX0czLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw ZmMwLCByZl8weDU4X2kpOw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdf bWFzayhwcml2LCBSRl9BLCBSRjYwNTJfUkVHX1RYUEFfRzMsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2YsIHJmXzB4NThfcSk7DQo+ICsgICAgICAg fQ0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhwcml2LCBSRl9BLCBS RjYwNTJfUkVHX0FDLCBCSVQoMTQpLCAwKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJl Z19tYXNrKHByaXYsIFJGX0EsIFJGNjA1Ml9SRUdfV0VfTFVULCBCSVQoNCksIDApOw0KPiArICAg ICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQSwgUkY2MDUyX1JFR19VTktO T1dOX0RGLCAweDAwODEwLCAwKTsNCj4gKw0KPiArICAgICAgIGlmICghKHJlZ19lYWMgJiBCSVQo MjgpKSAmJg0KPiArICAgICAgICAgICAoKHJlZ19lOTQgJiAweDAzZmYwMDAwKSAhPSAweDAxNDIw MDAwKSAmJg0KPiArICAgICAgICAgICAoKHJlZ19lOWMgJiAweDAzZmYwMDAwKSAhPSAweDAwNDIw MDAwKSkNCj4gKyAgICAgICAgICAgICAgIHJlc3VsdCB8PSAweDAxOw0KPiArDQo+ICsgICAgICAg cmV0dXJuIHJlc3VsdDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBydGw4MTkyZnVfcnhfaXFr X3BhdGhfYShzdHJ1Y3QgcnRsOHh4eHVfcHJpdiAqcHJpdikNCj4gK3sNCj4gKyAgICAgICB1MzIg cmVnX2VhNCwgcmVnX2VhYywgcmVnX2U5NCwgcmVnX2U5YywgdmFsMzI7DQo+ICsgICAgICAgaW50 IHJlc3VsdCA9IDA7DQo+ICsgICAgICAgaW50IGt0aW1lOw0KPiArDQo+ICsgICAgICAgLyogTGVh dmUgSVFLIG1vZGUgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVH X0ZQR0EwX0lRSywgMHhmZmZmZmYwMCwgMCk7DQo+ICsNCj4gKyAgICAgICAvKiBQQS9QQUQgY29u dHJvbCBieSAweDU2LCBhbmQgc2V0ID0gMHgwICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVf cmZyZWdfbWFzayhwcml2LCBSRl9BLCBSRjYwNTJfUkVHX1VOS05PV05fREYsIEJJVCgxKSwgMSk7 DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWcocHJpdiwgUkZfQSwgMHgzNSwgMCk7DQoN CiNkZWZpbmUgUkY2MDUyX1JFR19HQUlOX1AxICAweDM1DQojZGVmaW5lIFJGNjA1Ml9SRUdfUEFE X1RYRyAweDU2DQojZGVmaW5lIFJGNjA1Ml9SRUdfR0FJTl9DQ0EgMHhkZg0KDQo+ICsgICAgICAg cnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhwcml2LCBSRl9BLCBSRjYwNTJfUkVHX1VOS05PV05f REYsIEJJVCgxMSksIDEpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJp diwgUkZfQSwgUkY2MDUyX1JFR19VTktOT1dOXzU2LCAweDAwM2ZmLCAweDI3KTsNCj4gKw0KPiAr ICAgICAgIC8qIEVudGVyIElRSyBtb2RlICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9t YXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAsIDB4ODA4MDAwKTsNCj4gKw0KPiAr ICAgICAgIC8qIHBhdGgtQSBJUUsgc2V0dGluZyAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRl MzIocHJpdiwgUkVHX1RYX0lRS19UT05FX0EsIDB4MTgwMDhjMWMpOw0KPiArICAgICAgIHJ0bDh4 eHh1X3dyaXRlMzIocHJpdiwgUkVHX1JYX0lRS19UT05FX0EsIDB4MzgwMDhjMWMpOw0KPiArICAg ICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1RYX0lRS19UT05FX0IsIDB4MzgwMDhjMWMp Ow0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1JYX0lRS19UT05FX0IsIDB4 MzgwMDhjMWMpOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhf SVFLX1BJX0EsIDB4ODIxNjAwMjcpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwg UkVHX1JYX0lRS19QSV9BLCAweDI4MTYwMDAwKTsNCj4gKw0KPiArICAgICAgIC8qIFR4IElRSyBz ZXR0aW5nICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhfSVFLLCAw eDAxMDA3YzAwKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19SWF9JUUss IDB4MDEwMDQ4MDApOw0KPiArDQo+ICsgICAgICAgLyogTE8gY2FsaWJyYXRpb24gc2V0dGluZyAq Lw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0lRS19BR0NfUlNQLCAweDAw ODZhOTExKTsNCj4gKw0KPiArICAgICAgIC8qIE9uZSBzaG90LCBwYXRoIEEgTE9LICYgSVFLICov DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfSVFLX0FHQ19QVFMsIDB4ZmEw MDU4MDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0lRS19BR0NfUFRT LCAweGY4MDA1ODAwKTsNCj4gKw0KPiArICAgICAgIG1kZWxheSgxNSk7DQo+ICsNCj4gKyAgICAg ICBrdGltZSA9IDA7DQo+ICsgICAgICAgd2hpbGUgKHJ0bDh4eHh1X3JlYWQzMihwcml2LCAweGU5 OCkgPT0gMCAmJiBrdGltZSA8IDIxKSB7DQoNCiNkZWZpbmUgUkVHX0lRS19SVFBfVFhBIDB4ZTk4 DQoNCj4gKyAgICAgICAgICAgICAgIG1kZWxheSg1KTsNCj4gKyAgICAgICAgICAgICAgIGt0aW1l ICs9IDU7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgLyogQ2hlY2sgZmFpbGVkICovDQo+ ICsgICAgICAgcmVnX2VhYyA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBSRUdfUlhfUE9XRVJfQUZU RVJfSVFLX0FfMik7DQo+ICsgICAgICAgcmVnX2U5NCA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBS RUdfVFhfUE9XRVJfQkVGT1JFX0lRS19BKTsNCj4gKyAgICAgICByZWdfZTljID0gcnRsOHh4eHVf cmVhZDMyKHByaXYsIFJFR19UWF9QT1dFUl9BRlRFUl9JUUtfQSk7DQo+ICsNCj4gKyAgICAgICBp ZiAoIShyZWdfZWFjICYgQklUKDI4KSkgJiYNCj4gKyAgICAgICAgICAgKChyZWdfZTk0ICYgMHgw M2ZmMDAwMCkgIT0gMHgwMTQyMDAwMCkgJiYNCj4gKyAgICAgICAgICAgKChyZWdfZTljICYgMHgw M2ZmMDAwMCkgIT0gMHgwMDQyMDAwMCkpIHsNCj4gKyAgICAgICAgICAgICAgIHJlc3VsdCB8PSAw eDAxOw0KPiArICAgICAgIH0gZWxzZSB7IC8qIElmIFRYIG5vdCBPSywgaWdub3JlIFJYICovDQo+ ICsgICAgICAgICAgICAgICAvKiBQQS9QQUQgY29udHJvbGxlZCBieSAweDAgKi8NCj4gKyAgICAg ICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlMzJfbWFzayhwcml2LCBSRUdfRlBHQTBfSVFLLCAweGZm ZmZmZjAwLCAwKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdf bWFzayhwcml2LCBSRl9BLCBSRjYwNTJfUkVHX1VOS05PV05fREYsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxMSksIDApOw0KPiArDQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gcmVzdWx0Ow0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIHZhbDMy ID0gMHg4MDAwN2MwMCB8IChyZWdfZTk0ICYgMHgzZmYwMDAwKSB8ICgocmVnX2U5YyAmIDB4M2Zm MDAwMCkgPj4gMTYpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1RYX0lR SywgdmFsMzIpOw0KPiArDQo+ICsgICAgICAgLyogTW9kaWZ5IFJYIElRSyBtb2RlIHRhYmxlICov DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4 ZmZmZmZmMDAsIDApOw0KPiArDQo+ICsgICAgICAgLyogUEEvUEFEIGNvbnRyb2wgYnkgMHg1Niwg YW5kIHNldCA9IDB4MCAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJp diwgUkZfQSwgUkY2MDUyX1JFR19VTktOT1dOX0RGLCBCSVQoMSksIDEpOw0KPiArICAgICAgIHJ0 bDh4eHh1X3dyaXRlX3JmcmVnKHByaXYsIFJGX0EsIDB4MzUsIDApOw0KPiArICAgICAgIHJ0bDh4 eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQSwgUkY2MDUyX1JFR19VTktOT1dOX0RGLCBC SVQoMTEpLCAxKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJG X0EsIFJGNjA1Ml9SRUdfVU5LTk9XTl81NiwgMHgwMDNmZiwgMHgxZTApOw0KPiArDQo+ICsgICAg ICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfRlBHQTBfQU5BTE9HNCwgMHhjY2YwMDBjMCk7 DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCAweGQ5NCwgMHg0NGZmYmI0NCk7DQo+ ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfV0FJVF9DQ0EsIDB4MDA0MDAw NDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX09GRE0wX1RSWF9QQVRI X0VOQUJMRSwgMHg2ZjAwNTQwMyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBS RUdfT0ZETTBfVFJfTVVYX1BBUiwgMHgwMDA4MDRlNCk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3Jp dGUzMihwcml2LCBSRUdfRlBHQTBfWENEX1JGX1NXX0NUUkwsIDB4MDQyMDM0MDApOw0KPiArICAg ICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0ZQR0EwX1hBX0hTU0lfUEFSTTEsIDB4MDEw MDAxMDApOw0KPiArDQo+ICsgICAgICAgLyogRW50ZXIgSVFLIG1vZGUgKi8NCj4gKyAgICAgICBy dGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0ZQR0EwX0lRSywgMHhmZmZmZmYwMCwgMHg4 MDgwMDApOw0KPiArDQo+ICsgICAgICAgLyogcGF0aC1BIElRSyBzZXR0aW5nICovDQo+ICsgICAg ICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhfSVFLX1RPTkVfQSwgMHgzODAwOGMxYyk7 DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfSVFLX1RPTkVfQSwgMHgx ODAwOGMxYyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhfSVFLX1RP TkVfQiwgMHgzODAwOGMxYyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdf UlhfSVFLX1RPTkVfQiwgMHgzODAwOGMxYyk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0 ZTMyKHByaXYsIFJFR19UWF9JUUtfUElfQSwgMHg4MjE3MDAwMCk7DQo+ICsgICAgICAgcnRsOHh4 eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfSVFLX1BJX0EsIDB4MjgxNzAwMDApOw0KPiArDQo+ICsg ICAgICAgLyogUlggSVFLIHNldHRpbmcgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHBy aXYsIFJFR19SWF9JUUssIDB4MDEwMDQ4MDApOw0KPiArDQo+ICsgICAgICAgLyogTE8gY2FsaWJy YXRpb24gc2V0dGluZyAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0lR S19BR0NfUlNQLCAweDAwNDZhOGQxKTsNCj4gKw0KPiArICAgICAgIC8qIE9uZSBzaG90LCBwYXRo IEEgTE9LICYgSVFLICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfSVFL X0FHQ19QVFMsIDB4ZmEwMDU4MDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwg UkVHX0lRS19BR0NfUFRTLCAweGY4MDA1ODAwKTsNCj4gKw0KPiArICAgICAgIG1kZWxheSgxNSk7 DQo+ICsNCj4gKyAgICAgICBrdGltZSA9IDA7DQo+ICsgICAgICAgd2hpbGUgKHJ0bDh4eHh1X3Jl YWQzMihwcml2LCAweGVhOCkgPT0gMCAmJiBrdGltZSA8IDIxKSB7DQoNCiNkZWZpbmUgUkVHX0lR S19SVFBfUlhBIDB4ZWE4DQoNCj4gKyAgICAgICAgICAgICAgIG1kZWxheSg1KTsNCj4gKyAgICAg ICAgICAgICAgIGt0aW1lICs9IDU7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgLyogQ2hl Y2sgZmFpbGVkICovDQo+ICsgICAgICAgcmVnX2VhYyA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBS RUdfUlhfUE9XRVJfQUZURVJfSVFLX0FfMik7DQo+ICsgICAgICAgcmVnX2VhNCA9IHJ0bDh4eHh1 X3JlYWQzMihwcml2LCBSRUdfUlhfUE9XRVJfQkVGT1JFX0lRS19BXzIpOw0KPiArDQo+ICsgICAg ICAgLyogTGVhdmUgSVFLIG1vZGUgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2so cHJpdiwgUkVHX0ZQR0EwX0lRSywgMHhmZmZmZmYwMCwgMCk7DQo+ICsNCj4gKyAgICAgICBydGw4 eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJGX0EsIFJGNjA1Ml9SRUdfVU5LTk9XTl9ERiwg QklUKDExKSwgMCk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWcocHJpdiwgUkZfQSwg MHgzNSwgMHgwMjAwMCk7DQo+ICsNCj4gKyAgICAgICBpZiAoIShyZWdfZWFjICYgQklUKDI3KSkg JiYNCj4gKyAgICAgICAgICAgKChyZWdfZWE0ICYgMHgwM2ZmMDAwMCkgIT0gMHgwMTMyMDAwMCkg JiYNCj4gKyAgICAgICAgICAgKChyZWdfZWFjICYgMHgwM2ZmMDAwMCkgIT0gMHgwMDM2MDAwMCkp DQo+ICsgICAgICAgICAgICAgICByZXN1bHQgfD0gMHgwMjsNCj4gKw0KPiArICAgICAgIHJldHVy biByZXN1bHQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcnRsODE5MmZ1X2lxa19wYXRoX2Io c3RydWN0IHJ0bDh4eHh1X3ByaXYgKnByaXYpDQo+ICt7DQo+ICsgICAgICAgdTMyIHJlZ19lYWMs IHJlZ19lYjQsIHJlZ19lYmMsIHZhbDMyOw0KPiArICAgICAgIHUzMiByZl8weDU4X2ksIHJmXzB4 NThfcTsNCj4gKyAgICAgICB1OCByZmUgPSBwcml2LT5yZmVfdHlwZTsNCj4gKyAgICAgICBpbnQg cmVzdWx0ID0gMDsNCj4gKyAgICAgICBpbnQga3RpbWUsIGk7DQo+ICsNCj4gKyAgICAgICAvKiBQ QS9QQUQgY29udHJvbGxlZCBieSAweDAgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyX21h c2socHJpdiwgUkVHX0ZQR0EwX0lRSywgMHhmZmZmZmYwMCwgMCk7DQo+ICsNCj4gKyAgICAgICBy dGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19GUEdBMF9BTkFMT0c0LCAweGNjZjAwMGMwKTsNCj4g KyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIDB4ZDk0LCAweDQ0ZmZiYjQ0KTsNCj4gKyAg ICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19SWF9XQUlUX0NDQSwgMHgwMDQwMDA0MCk7 DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfT0ZETTBfVFJYX1BBVEhfRU5B QkxFLCAweDZmMDA1NDAzKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19P RkRNMF9UUl9NVVhfUEFSLCAweDAwMDgwNGU0KTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMy KHByaXYsIFJFR19GUEdBMF9YQ0RfUkZfU1dfQ1RSTCwgMHgwNDIwMzQwMCk7DQo+ICsgICAgICAg cnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfRlBHQTBfWEFfSFNTSV9QQVJNMSwgMHgwMTAwMDAw MCk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJGX0Is IFJGNjA1Ml9SRUdfVU5LTk9XTl9ERiwgQklUKDQpLCAxKTsNCj4gKyAgICAgICBydGw4eHh4dV93 cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJGX0IsIFJGNjA1Ml9SRUdfVU5LTk9XTl9ERiwgQklUKDEx KSwgMSk7DQo+ICsgICAgICAgaWYgKHJmZSA9PSA3IHx8IHJmZSA9PSA4IHx8IHJmZSA9PSA5IHx8 IHJmZSA9PSAxMikNCj4gKyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2so cHJpdiwgUkZfQiwgUkY2MDUyX1JFR19VTktOT1dOXzU2LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAwM2ZmLCAweDMwKTsNCj4gKyAgICAgICBlbHNlDQo+ ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJGX0IsIFJG NjA1Ml9SRUdfVU5LTk9XTl81NiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMGZmZiwgMHhlOSk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMy X21hc2socHJpdiwgUkVHX0ZQR0EwX0lRSywgMHhmZmZmZmYwMCwgMHg4MDgwMDApOw0KPiArDQo+ ICsgICAgICAgLyogUGF0aCBCIElRSyBzZXR0aW5nICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3Jp dGUzMihwcml2LCBSRUdfVFhfSVFLX1RPTkVfQSwgMHgzODAwOGMxYyk7DQo+ICsgICAgICAgcnRs OHh4eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfSVFLX1RPTkVfQSwgMHgzODAwOGMxYyk7DQo+ICsg ICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhfSVFLX1RPTkVfQiwgMHgxODAwOGMx Yyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfSVFLX1RPTkVfQiwg MHgzODAwOGMxYyk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19U WF9JUUtfUElfQiwgMHg4MjE0MDAwRik7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2 LCBSRUdfUlhfSVFLX1BJX0IsIDB4MjgxNDAwMDApOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVf d3JpdGUzMihwcml2LCBSRUdfVFhfSVFLLCAweDAxMDA3YzAwKTsNCj4gKyAgICAgICBydGw4eHh4 dV93cml0ZTMyKHByaXYsIFJFR19SWF9JUUssIDB4MDEwMDQ4MDApOw0KPiArDQo+ICsgICAgICAg LyogTE8gY2FsaWJyYXRpb24gc2V0dGluZyAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIo cHJpdiwgUkVHX0lRS19BR0NfUlNQLCAweDAwZTYyOTExKTsNCj4gKw0KPiArICAgICAgIC8qIE9u ZSBzaG90LCBwYXRoIEIgTE9LICYgSVFLICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihw cml2LCBSRUdfSVFLX0FHQ19QVFMsIDB4ZmEwMDU4MDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dy aXRlMzIocHJpdiwgUkVHX0lRS19BR0NfUFRTLCAweGY4MDA1ODAwKTsNCj4gKw0KPiArICAgICAg IG1kZWxheSgxNSk7DQo+ICsNCj4gKyAgICAgICBrdGltZSA9IDA7DQo+ICsgICAgICAgd2hpbGUg KHJ0bDh4eHh1X3JlYWQzMihwcml2LCAweGViOCkgPT0gMCAmJiBrdGltZSA8IDIxKSB7DQoNCiNk ZWZpbmUgUkVHX0lRS19SVFBfVFhCIDB4ZWI4DQoNCj4gKyAgICAgICAgICAgICAgIG1kZWxheSg1 KTsNCj4gKyAgICAgICAgICAgICAgIGt0aW1lICs9IDU7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsg ICAgICAgLyogQ2hlY2sgZmFpbGVkICovDQo+ICsgICAgICAgcmVnX2VhYyA9IHJ0bDh4eHh1X3Jl YWQzMihwcml2LCBSRUdfUlhfUE9XRVJfQUZURVJfSVFLX0FfMik7DQo+ICsgICAgICAgcmVnX2Vi NCA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBSRUdfVFhfUE9XRVJfQkVGT1JFX0lRS19CKTsNCj4g KyAgICAgICByZWdfZWJjID0gcnRsOHh4eHVfcmVhZDMyKHByaXYsIFJFR19UWF9QT1dFUl9BRlRF Ul9JUUtfQik7DQo+ICsNCj4gKyAgICAgICAvKiByZWxvYWQgMHhkZiBhbmQgQ0NLX0lORCBvZmYg Ki8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0ZQR0EwX0lRSywg MHhmZmZmZmYwMCwgMCk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNr KHByaXYsIFJGX0IsIFJGNjA1Ml9SRUdfV0VfTFVULCBCSVQoNCksIDEpOw0KPiArDQo+ICsgICAg ICAgdmFsMzIgPSBydGw4eHh4dV9yZWFkX3JmcmVnKHByaXYsIFJGX0IsIDB4NTgpOw0KPiArICAg ICAgIHJmXzB4NThfaSA9IHUzMl9nZXRfYml0cyh2YWwzMiwgMHhmYzAwMCk7DQo+ICsgICAgICAg cmZfMHg1OF9xID0gdTMyX2dldF9iaXRzKHZhbDMyLCAweDAwM2YwKTsNCj4gKw0KPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsNCj4gKyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dy aXRlX3JmcmVnX21hc2socHJpdiwgUkZfQiwgUkY2MDUyX1JFR19UWFBBX0czLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwLCBpKTsNCj4gKyAgICAg ICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQiwgUkY2MDUyX1JF R19UWFBBX0czLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwZmMwLCByZl8weDU4X2kpOw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZy ZWdfbWFzayhwcml2LCBSRl9CLCBSRjYwNTJfUkVHX1RYUEFfRzMsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2YsIHJmXzB4NThfcSk7DQo+ICsgICAg ICAgfQ0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhwcml2LCBSRl9C LCBSRjYwNTJfUkVHX0FDLCBCSVQoMTQpLCAwKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9y ZnJlZ19tYXNrKHByaXYsIFJGX0IsIFJGNjA1Ml9SRUdfV0VfTFVULCBCSVQoNCksIDApOw0KPiAr ICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQiwgUkY2MDUyX1JFR19V TktOT1dOX0RGLCAweDAwODEwLCAwKTsNCj4gKw0KPiArICAgICAgIGlmICghKHJlZ19lYWMgJiBC SVQoMzEpKSAmJg0KPiArICAgICAgICAgICAoKHJlZ19lYjQgJiAweDAzZmYwMDAwKSAhPSAweDAx NDIwMDAwKSAmJg0KPiArICAgICAgICAgICAoKHJlZ19lYmMgJiAweDAzZmYwMDAwKSAhPSAweDAw NDIwMDAwKSkNCj4gKyAgICAgICAgICAgICAgIHJlc3VsdCB8PSAweDAxOw0KPiArICAgICAgIGVs c2UNCj4gKyAgICAgICAgICAgICAgIGRldl93YXJuKCZwcml2LT51ZGV2LT5kZXYsICIlczogUGF0 aCBCIElRSyBmYWlsZWQhXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18p Ow0KPiArDQo+ICsgICAgICAgcmV0dXJuIHJlc3VsdDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBydGw4MTkyZnVfcnhfaXFrX3BhdGhfYihzdHJ1Y3QgcnRsOHh4eHVfcHJpdiAqcHJpdikNCj4g K3sNCj4gKyAgICAgICB1MzIgcmVnX2VhYywgcmVnX2ViNCwgcmVnX2ViYywgcmVnX2VjNCwgcmVn X2VjYywgdmFsMzI7DQo+ICsgICAgICAgaW50IHJlc3VsdCA9IDA7DQo+ICsgICAgICAgaW50IGt0 aW1lOw0KPiArDQo+ICsgICAgICAgLyogTGVhdmUgSVFLIG1vZGUgKi8NCj4gKyAgICAgICBydGw4 eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0ZQR0EwX0lRSywgMHhmZmZmZmYwMCwgMCk7DQo+ ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJGX0IsIFJGNjA1 Ml9SRUdfVU5LTk9XTl9ERiwgQklUKDEpLCAxKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9y ZnJlZyhwcml2LCBSRl9CLCAweDM1LCAwKTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJl Z19tYXNrKHByaXYsIFJGX0IsIFJGNjA1Ml9SRUdfVU5LTk9XTl9ERiwgQklUKDExKSwgMSk7DQo+ ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhwcml2LCBSRl9CLCBSRjYwNTJfUkVH X1VOS05PV05fNTYsIDB4MDAzZmYsIDB4NjcpOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3Jp dGUzMihwcml2LCBSRUdfRlBHQTBfQU5BTE9HNCwgMHhjY2YwMDBjMCk7DQo+ICsgICAgICAgcnRs OHh4eHVfd3JpdGUzMihwcml2LCAweGQ5NCwgMHg0NGZmYmI0NCk7DQo+ICsgICAgICAgcnRsOHh4 eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfV0FJVF9DQ0EsIDB4MDA0MDAwNDApOw0KPiArICAgICAg IHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX09GRE0wX1RSWF9QQVRIX0VOQUJMRSwgMHg2ZjAw NTQwMyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfT0ZETTBfVFJfTVVY X1BBUiwgMHgwMDA4MDRlNCk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdf RlBHQTBfWENEX1JGX1NXX0NUUkwsIDB4MDQyMDM0MDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dy aXRlMzIocHJpdiwgUkVHX0ZQR0EwX1hBX0hTU0lfUEFSTTEsIDB4MDEwMDAwMDApOw0KPiArDQo+ ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4ZmZm ZmZmMDAsIDB4ODA4MDAwKTsNCj4gKw0KPiArICAgICAgIC8qIHBhdGgtQiBJUUsgc2V0dGluZyAq Lw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1RYX0lRS19UT05FX0EsIDB4 MzgwMDhjMWMpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1JYX0lRS19U T05FX0EsIDB4MzgwMDhjMWMpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVH X1RYX0lRS19UT05FX0IsIDB4MTgwMDhjMWMpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIo cHJpdiwgUkVHX1JYX0lRS19UT05FX0IsIDB4MzgwMDhjMWMpOw0KPiArDQo+ICsgICAgICAgcnRs OHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhfSVFLX1BJX0IsIDB4ODIxNjAwMjcpOw0KPiArICAg ICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1JYX0lRS19QSV9CLCAweDI4MTYwMDAwKTsN Cj4gKw0KPiArICAgICAgIC8qIExPIGNhbGlicmF0aW9uIHNldHRpbmcgKi8NCj4gKyAgICAgICBy dGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19JUUtfQUdDX1JTUCwgMHgwMDg2YTkxMSk7DQo+ICsN Cj4gKyAgICAgICAvKiBPbmUgc2hvdCwgcGF0aCBBIExPSyAmIElRSyAqLw0KPiArICAgICAgIHJ0 bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0lRS19BR0NfUFRTLCAweGZhMDA1ODAwKTsNCj4gKyAg ICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19JUUtfQUdDX1BUUywgMHhmODAwNTgwMCk7 DQo+ICsNCj4gKyAgICAgICBtZGVsYXkoMTUpOw0KPiArDQo+ICsgICAgICAga3RpbWUgPSAwOw0K PiArICAgICAgIHdoaWxlIChydGw4eHh4dV9yZWFkMzIocHJpdiwgMHhlYjgpID09IDAgJiYga3Rp bWUgPCAyMSkgew0KPiArICAgICAgICAgICAgICAgbWRlbGF5KDUpOw0KPiArICAgICAgICAgICAg ICAga3RpbWUgKz0gNTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICAvKiBDaGVjayBmYWls ZWQgKi8NCj4gKyAgICAgICByZWdfZWFjID0gcnRsOHh4eHVfcmVhZDMyKHByaXYsIFJFR19SWF9Q T1dFUl9BRlRFUl9JUUtfQV8yKTsNCj4gKyAgICAgICByZWdfZWI0ID0gcnRsOHh4eHVfcmVhZDMy KHByaXYsIFJFR19UWF9QT1dFUl9CRUZPUkVfSVFLX0IpOw0KPiArICAgICAgIHJlZ19lYmMgPSBy dGw4eHh4dV9yZWFkMzIocHJpdiwgUkVHX1RYX1BPV0VSX0FGVEVSX0lRS19CKTsNCj4gKw0KPiAr ICAgICAgIGlmICghKHJlZ19lYWMgJiBCSVQoMzEpKSAmJg0KPiArICAgICAgICAgICAoKHJlZ19l YjQgJiAweDAzZmYwMDAwKSAhPSAweDAxNDIwMDAwKSAmJg0KPiArICAgICAgICAgICAoKHJlZ19l YmMgJiAweDAzZmYwMDAwKSAhPSAweDAwNDIwMDAwKSkgew0KPiArICAgICAgICAgICAgICAgcmVz dWx0IHw9IDB4MDE7DQo+ICsgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgIC8qIFBB L1BBRCBjb250cm9sbGVkIGJ5IDB4MCAqLw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3Jp dGUzMl9tYXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAsIDApOw0KPiArDQo+ICsg ICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZ19tYXNrKHByaXYsIFJGX0IsIFJGNjA1 Ml9SRUdfVU5LTk9XTl9ERiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQklUKDExKSwgMCk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7 DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgdmFsMzIgPSAweDgwMDA3YzAwIHwgKHJlZ19l YjQgJiAweDAzZmYwMDAwKSB8ICgocmVnX2ViYyA+PiAxNikgJiAweDAzZmYpOw0KPiArICAgICAg IHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX1RYX0lRSywgdmFsMzIpOw0KPiArDQo+ICsgICAg ICAgLyogTW9kaWZ5IFJYIElRSyBtb2RlIHRhYmxlICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3Jp dGUzMl9tYXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAsIDApOw0KPiArDQo+ICsg ICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhwcml2LCBSRl9CLCBSRjYwNTJfUkVHX1VO S05PV05fREYsIEJJVCgxKSwgMSk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWcocHJp diwgUkZfQiwgMHgzNSwgMCk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhw cml2LCBSRl9CLCBSRjYwNTJfUkVHX1VOS05PV05fREYsIEJJVCgxMSksIDEpOw0KPiArICAgICAg IHJ0bDh4eHh1X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQiwgUkY2MDUyX1JFR19VTktOT1dO XzU2LCAweDAwM2ZmLCAweDFlMCk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHBy aXYsIFJFR19GUEdBMF9BTkFMT0c0LCAweGNjZjAwMGMwKTsNCj4gKyAgICAgICBydGw4eHh4dV93 cml0ZTMyKHByaXYsIDB4ZDk0LCAweDQ0ZmZiYjQ0KTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0 ZTMyKHByaXYsIFJFR19SWF9XQUlUX0NDQSwgMHgwMDQwMDA0MCk7DQo+ICsgICAgICAgcnRsOHh4 eHVfd3JpdGUzMihwcml2LCBSRUdfT0ZETTBfVFJYX1BBVEhfRU5BQkxFLCAweDZmMDA1NDAzKTsN Cj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19PRkRNMF9UUl9NVVhfUEFSLCAw eDAwMDgwNGU0KTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHByaXYsIFJFR19GUEdBMF9Y Q0RfUkZfU1dfQ1RSTCwgMHgwNDIwMzQwMCk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihw cml2LCBSRUdfRlBHQTBfWEFfSFNTSV9QQVJNMSwgMHgwMTAwMDAwMCk7DQo+ICsNCj4gKyAgICAg ICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0ZQR0EwX0lRSywgMHhmZmZmZmYwMCwg MHg4MDgwMDApOw0KPiArDQo+ICsgICAgICAgLyogUGF0aCBCIElRSyBzZXR0aW5nICovDQo+ICsg ICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhfSVFLX1RPTkVfQSwgMHgzODAwOGMx Yyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfSVFLX1RPTkVfQSwg MHgzODAwOGMxYyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfVFhfSVFL X1RPTkVfQiwgMHgzODAwOGMxYyk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBS RUdfUlhfSVFLX1RPTkVfQiwgMHgxODAwOGMxYyk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93 cml0ZTMyKHByaXYsIFJFR19UWF9JUUtfUElfQiwgMHg4MjE3MDAwMCk7DQo+ICsgICAgICAgcnRs OHh4eHVfd3JpdGUzMihwcml2LCBSRUdfUlhfSVFLX1BJX0IsIDB4MjgxNzAwMDApOw0KPiArDQo+ ICsgICAgICAgLyogSVFLIHNldHRpbmcgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyKHBy aXYsIFJFR19SWF9JUUssIDB4MDEwMDQ4MDApOw0KPiArDQo+ICsgICAgICAgLyogTE8gY2FsaWJy YXRpb24gc2V0dGluZyAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0lR S19BR0NfUlNQLCAweDAwNDZhOTExKTsNCj4gKw0KPiArICAgICAgIC8qIE9uZSBzaG90LCBwYXRo IEEgTE9LICYgSVFLICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfSVFL X0FHQ19QVFMsIDB4ZmEwMDU4MDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwg UkVHX0lRS19BR0NfUFRTLCAweGY4MDA1ODAwKTsNCj4gKw0KPiArICAgICAgIG1kZWxheSgxNSk7 DQo+ICsNCj4gKyAgICAgICBrdGltZSA9IDA7DQo+ICsgICAgICAgd2hpbGUgKHJ0bDh4eHh1X3Jl YWQzMihwcml2LCAweGVjOCkgPT0gMCAmJiBrdGltZSA8IDIxKSB7DQoNCiNkZWZpbmUgUkVHX0lR S19SVFBfUlhCIDB4ZWM4DQoNCj4gKyAgICAgICAgICAgICAgIG1kZWxheSg1KTsNCj4gKyAgICAg ICAgICAgICAgIGt0aW1lICs9IDU7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgcmVnX2Vh YyA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBSRUdfUlhfUE9XRVJfQUZURVJfSVFLX0FfMik7DQo+ ICsgICAgICAgcmVnX2VjNCA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBSRUdfUlhfUE9XRVJfQkVG T1JFX0lRS19CXzIpOw0KPiArICAgICAgIHJlZ19lY2MgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwg UkVHX1JYX1BPV0VSX0FGVEVSX0lRS19CXzIpOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3Jp dGUzMl9tYXNrKHByaXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAsIDApOw0KPiArICAgICAg IHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0ZQR0EwX1hBX0hTU0lfUEFSTTEsIDB4MDEwMDAx MDApOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGVfcmZyZWdfbWFzayhwcml2LCBSRl9C LCBSRjYwNTJfUkVHX1VOS05PV05fREYsIEJJVCgxMSksIDApOw0KPiArICAgICAgIHJ0bDh4eHh1 X3dyaXRlX3JmcmVnX21hc2socHJpdiwgUkZfQiwgUkY2MDUyX1JFR19VTktOT1dOX0RGLCBCSVQo MSksIDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnKHByaXYsIFJGX0IsIDB4MzUs IDB4MDIwMDApOw0KPiArDQo+ICsgICAgICAgaWYgKCEocmVnX2VhYyAmIEJJVCgzMCkpICYmDQo+ ICsgICAgICAgICAgICgocmVnX2VjNCAmIDB4MDNmZjAwMDApICE9IDB4MDEzMjAwMDApICYmDQo+ ICsgICAgICAgICAgICgocmVnX2VjYyAmIDB4MDNmZjAwMDApICE9IDB4MDAzNjAwMDApKQ0KPiAr ICAgICAgICAgICAgICAgcmVzdWx0IHw9IDB4MDI7DQo+ICsgICAgICAgZWxzZQ0KPiArICAgICAg ICAgICAgICAgZGV2X3dhcm4oJnByaXYtPnVkZXYtPmRldiwgIiVzOiBQYXRoIEIgUlggSVFLIGZh aWxlZCFcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7DQo+ICsNCj4g KyAgICAgICByZXR1cm4gcmVzdWx0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBydGw4MTky ZnVfcGh5X2lxY2FsaWJyYXRlKHN0cnVjdCBydGw4eHh4dV9wcml2ICpwcml2LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRbXVs4XSwgaW50IHQpDQo+ ICt7DQo+ICsgICAgICAgc3RhdGljIGNvbnN0IHUzMiBhZGRhX3JlZ3NbMl0gPSB7DQo+ICsgICAg ICAgICAgICAgICAweGQ5NCwgUkVHX1JYX1dBSVRfQ0NBDQo+ICsgICAgICAgfTsNCj4gKyAgICAg ICBzdGF0aWMgY29uc3QgdTMyIGlxa19tYWNfcmVnc1tSVEw4WFhYVV9NQUNfUkVHU10gPSB7DQo+ ICsgICAgICAgICAgICAgICBSRUdfVFhQQVVTRSwgUkVHX0JFQUNPTl9DVFJMLA0KPiArICAgICAg ICAgICAgICAgUkVHX0JFQUNPTl9DVFJMXzEsIFJFR19HUElPX01VWENGRw0KPiArICAgICAgIH07 DQo+ICsgICAgICAgc3RhdGljIGNvbnN0IHUzMiBpcWtfYmJfcmVnc1tSVEw4WFhYVV9CQl9SRUdT XSA9IHsNCj4gKyAgICAgICAgICAgICAgIFJFR19PRkRNMF9UUlhfUEFUSF9FTkFCTEUsIFJFR19P RkRNMF9UUl9NVVhfUEFSLA0KPiArICAgICAgICAgICAgICAgUkVHX0ZQR0EwX1hDRF9SRl9TV19D VFJMLCBSRUdfQ09ORklHX0FOVF9BLCBSRUdfQ09ORklHX0FOVF9CLA0KPiArICAgICAgICAgICAg ICAgUkVHX0RQRFRfQ1RSTCwgUkVHX1JGRV9DVFJMX0FOVEFfU1JDLA0KPiArICAgICAgICAgICAg ICAgMHg5MzgsIFJFR19DQ0swX0FGRV9TRVRUSU5HDQo+ICsgICAgICAgfTsNCg0KI2RlZmluZSBS RUdfUkZFX0NUUkxfQU5UX1NSQzIgMHg5MzgNCg0KPiArICAgICAgIHUzMiByeF9pbml0aWFsX2dh aW5fYSwgcnhfaW5pdGlhbF9nYWluX2I7DQo+ICsgICAgICAgc3RydWN0IGRldmljZSAqZGV2ID0g JnByaXYtPnVkZXYtPmRldjsNCj4gKyAgICAgICBpbnQgcGF0aF9hX29rLCBwYXRoX2Jfb2s7DQo+ ICsgICAgICAgdTggcmZlID0gcHJpdi0+cmZlX3R5cGU7DQo+ICsgICAgICAgaW50IHJldHJ5ID0g MjsNCj4gKyAgICAgICB1MzIgaSwgdmFsMzI7DQo+ICsNCj4gKyAgICAgICAvKg0KPiArICAgICAg ICAqIE5vdGU6IElRIGNhbGlicmF0aW9uIG11c3QgYmUgcGVyZm9ybWVkIGFmdGVyIGxvYWRpbmcN Cj4gKyAgICAgICAgKiAgICAgICBQSFlfUkVHLnR4dCAsIGFuZCByYWRpb19hLCByYWRpb19iLnR4 dA0KPiArICAgICAgICAqLw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHBy aXYsIFJFR19GUEdBMF9JUUssIDB4ZmZmZmZmMDAsIDApOw0KPiArDQo+ICsgICAgICAgcnhfaW5p dGlhbF9nYWluX2EgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwgUkVHX09GRE0wX1hBX0FHQ19DT1JF MSk7DQo+ICsgICAgICAgcnhfaW5pdGlhbF9nYWluX2IgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwg UkVHX09GRE0wX1hCX0FHQ19DT1JFMSk7DQo+ICsNCj4gKyAgICAgICBpZiAodCA9PSAwKSB7DQo+ ICsgICAgICAgICAgICAgICAvKiBTYXZlIEFEREEgcGFyYW1ldGVycywgdHVybiBQYXRoIEEgQURE QSBvbiAqLw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfc2F2ZV9yZWdzKHByaXYsIGFkZGFf cmVncywgcHJpdi0+YWRkYV9iYWNrdXAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQVJSQVlfU0laRShhZGRhX3JlZ3MpKTsNCj4gKyAgICAgICAgICAgICAgIHJ0bDh4eHh1 X3NhdmVfbWFjX3JlZ3MocHJpdiwgaXFrX21hY19yZWdzLCBwcml2LT5tYWNfYmFja3VwKTsNCj4g KyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3NhdmVfcmVncyhwcml2LCBpcWtfYmJfcmVncywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5iYl9iYWNrdXAsIFJUTDhY WFhVX0JCX1JFR1MpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIC8qIEluc3RlYWQgb2Yg cnRsOHh4eHVfcGF0aF9hZGRhX29uICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9zZXQo cHJpdiwgUkVHX0ZQR0EwX1hDRF9SRl9QQVJNLCBCSVQoMzEpKTsNCj4gKw0KPiArICAgICAgIC8q IE1BQyBzZXR0aW5ncyAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlOChwcml2LCBSRUdfVFhQ QVVTRSwgMHhmZik7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGU4X2NsZWFyKHByaXYsIFJFR19H UElPX01VWENGRywgR1BJT19NVVhDRkdfSU9fU0VMX0VOQlQpOw0KPiArDQo+ICsgICAgICAgaWYg KHJmZSA9PSA3IHx8IHJmZSA9PSA4IHx8IHJmZSA9PSA5IHx8IHJmZSA9PSAxMikgew0KPiArICAg ICAgICAgICAgICAgLyogaW4gZVBBIElRSywgcmZlX2Z1bmNfY29uZmlnICYgU1cgYm90aCBwdWxs IGRvd24gKi8NCj4gKyAgICAgICAgICAgICAgIC8qIHBhdGggQSAqLw0KPiArICAgICAgICAgICAg ICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJFR19SRkVfQ1RSTF9BTlRBX1NSQywgMHhG LCAweDcpOw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJF R19EUERUX0NUUkwsIDB4MSwgMHgwKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVf d3JpdGUzMl9tYXNrKHByaXYsIFJFR19SRkVfQ1RSTF9BTlRBX1NSQywgMHhGMDAsIDB4Nyk7DQo+ ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0RQRFRfQ1RS TCwgMHg0LCAweDApOw0KPiArDQo+ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZTMyX21h c2socHJpdiwgUkVHX1JGRV9DVFJMX0FOVEFfU1JDLCAweEYwMDAsIDB4Nyk7DQo+ICsgICAgICAg ICAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0RQRFRfQ1RSTCwgMHg4LCAw eDApOw0KPiArDQo+ICsgICAgICAgICAgICAgICAvKiBwYXRoIEIgKi8NCj4gKyAgICAgICAgICAg ICAgIHJ0bDh4eHh1X3dyaXRlMzJfbWFzayhwcml2LCAweDkzOCwgMHhGMCwgMHg3KTsNCj4gKyAg ICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlMzJfbWFzayhwcml2LCBSRUdfRFBEVF9DVFJMLCAw eDIwMDAwLCAweDApOw0KPiArDQo+ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZTMyX21h c2socHJpdiwgMHg5MzgsIDB4RjAwMDAsIDB4Nyk7DQo+ICsgICAgICAgICAgICAgICBydGw4eHh4 dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0RQRFRfQ1RSTCwgMHgxMDAwMDAsIDB4MCk7DQo+ICsN Cj4gKyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlMzJfbWFzayhwcml2LCAweDkzYywgMHhG MDAwLCAweDcpOw0KDQojZGVmaW5lIFJFR19SRkVfQ1RSTF9BTlRfU1JDMyAweDkzYw0KDQo+ICsg ICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0RQRFRfQ1RSTCwg MHg4MDAwMDAwLCAweDApOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGlmIChwcml2LT5y Zl9wYXRocyA+IDEpIHsNCj4gKyAgICAgICAgICAgICAgIC8qIHBhdGggQiBzdGFuZGJ5ICovDQo+ ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0ZQR0EwX0lR SywgMHhmZmZmZmYwMCwgMHgwMDAwMDApOw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3Jp dGVfcmZyZWcocHJpdiwgUkZfQiwgUkY2MDUyX1JFR19BQywgMHgxMDAwMCk7DQo+ICsgICAgICAg ICAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgUkVHX0ZQR0EwX0lRSywgMHhmZmZm ZmYwMCwgMHg4MDgwMDApOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGZvciAoaSA9IDA7 IGkgPCByZXRyeTsgaSsrKSB7DQo+ICsgICAgICAgICAgICAgICBwYXRoX2Ffb2sgPSBydGw4MTky ZnVfaXFrX3BhdGhfYShwcml2KTsNCj4gKw0KPiArICAgICAgICAgICAgICAgaWYgKHBhdGhfYV9v ayA9PSAweDAxKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbDMyID0gcnRsOHh4eHVf cmVhZDMyKHByaXYsIFJFR19UWF9QT1dFUl9CRUZPUkVfSVFLX0EpOw0KPiArICAgICAgICAgICAg ICAgICAgICAgICByZXN1bHRbdF1bMF0gPSAodmFsMzIgPj4gMTYpICYgMHgzZmY7DQo+ICsNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgdmFsMzIgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwgUkVH X1RYX1BPV0VSX0FGVEVSX0lRS19BKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0 W3RdWzFdID0gKHZhbDMyID4+IDE2KSAmIDB4M2ZmOw0KPiArICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHJlc3VsdFt0XVswXSA9IDB4MTAwOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXN1bHRbdF1bMV0gPSAweDA7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgfQ0KPiAr DQo+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHJldHJ5OyBpKyspIHsNCj4gKyAgICAgICAgICAg ICAgIHBhdGhfYV9vayA9IHJ0bDgxOTJmdV9yeF9pcWtfcGF0aF9hKHByaXYpOw0KPiArDQo+ICsg ICAgICAgICAgICAgICBpZiAocGF0aF9hX29rID09IDB4MDMpIHsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgdmFsMzIgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwgUkVHX1JYX1BPV0VSX0JFRk9S RV9JUUtfQV8yKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3RdWzJdID0gKHZh bDMyID4+IDE2KSAmIDB4M2ZmOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbDMy ID0gcnRsOHh4eHVfcmVhZDMyKHByaXYsIFJFR19SWF9QT1dFUl9BRlRFUl9JUUtfQV8yKTsNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3RdWzNdID0gKHZhbDMyID4+IDE2KSAmIDB4 M2ZmOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAg IH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFt0XVsyXSA9IDB4MTAw Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbdF1bM10gPSAweDA7DQo+ICsgICAg ICAgICAgICAgICB9DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKCFwYXRoX2Ffb2sp DQo+ICsgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICIlczogUGF0aCBBIElRSyBmYWlsZWQh XG4iLCBfX2Z1bmNfXyk7DQo+ICsNCj4gKyAgICAgICBpZiAocHJpdi0+cmZfcGF0aHMgPiAxKSB7 DQo+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmV0cnk7IGkrKykgew0KPiArICAg ICAgICAgICAgICAgICAgICAgICBwYXRoX2Jfb2sgPSBydGw4MTkyZnVfaXFrX3BhdGhfYihwcml2 KTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aF9iX29rID09IDB4MDEp IHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwzMiA9IHJ0bDh4eHh1X3Jl YWQzMihwcml2LCBSRUdfVFhfUE9XRVJfQkVGT1JFX0lRS19CKTsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXN1bHRbdF1bNF0gPSAodmFsMzIgPj4gMTYpICYgMHgzZmY7DQo+ ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwzMiA9IHJ0bDh4eHh1X3Jl YWQzMihwcml2LCBSRUdfVFhfUE9XRVJfQUZURVJfSVFLX0IpOw0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc3VsdFt0XVs1XSA9ICh2YWwzMiA+PiAxNikgJiAweDNmZjsNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1 bHRbdF1bNF0gPSAweDEwMDsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1 bHRbdF1bNV0gPSAweDA7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAg ICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJldHJ5OyBp KyspIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9iX29rID0gcnRsODE5MmZ1X3J4 X2lxa19wYXRoX2IocHJpdik7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBh dGhfYl9vayA9PSAweDAzKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs MzIgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwgUkVHX1JYX1BPV0VSX0JFRk9SRV9JUUtfQl8yKTsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbdF1bNl0gPSAodmFsMzIg Pj4gMTYpICYgMHgzZmY7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWwzMiA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBSRUdfUlhfUE9XRVJfQUZURVJfSVFLX0JfMik7 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3RdWzddID0gKHZhbDMy ID4+IDE2KSAmIDB4M2ZmOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc3VsdFt0XVs2XSA9IDB4MTAwOw0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlc3VsdFt0XVs3XSA9IDB4MDsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgfQ0KPiArICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICBpZiAo IXBhdGhfYl9vaykNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiJXM6 IFBhdGggQiBJUUsgZmFpbGVkIVxuIiwgX19mdW5jX18pOw0KPiArICAgICAgIH0NCj4gKw0KPiAr ICAgICAgIC8qIEJhY2sgdG8gQkIgbW9kZSwgbG9hZCBvcmlnaW5hbCB2YWx1ZSAqLw0KPiArICAg ICAgIHJ0bDh4eHh1X3dyaXRlMzJfbWFzayhwcml2LCBSRUdfRlBHQTBfSVFLLCAweGZmZmZmZjAw LCAwKTsNCj4gKw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0ZQR0EwX0FO QUxPRzQsIDB4Y2MwMDAwYzApOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2 LCAweGQ5NCwgMHg0NGJiYmI0NCk7DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBS RUdfUlhfV0FJVF9DQ0EsIDB4ODA0MDgwNDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIo cHJpdiwgUkVHX09GRE0wX1RSWF9QQVRIX0VOQUJMRSwgMHg2ZjAwNTQzMyk7DQo+ICsgICAgICAg cnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfT0ZETTBfVFJfTVVYX1BBUiwgMHgwMDAwMDRlNCk7 DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfRlBHQTBfWENEX1JGX1NXX0NU UkwsIDB4MDQwMDM0MDApOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgUkVHX0ZQ R0EwX1hBX0hTU0lfUEFSTTEsIDB4MDEwMDAxMDApOw0KPiArDQo+ICsgICAgICAgLyogUmVsb2Fk IEFEREEgcG93ZXIgc2F2aW5nIHBhcmFtZXRlcnMgKi8NCj4gKyAgICAgICBydGw4eHh4dV9yZXN0 b3JlX3JlZ3MocHJpdiwgYWRkYV9yZWdzLCBwcml2LT5hZGRhX2JhY2t1cCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShhZGRhX3JlZ3MpKTsNCj4gKw0KPiArICAg ICAgIC8qIFJlbG9hZCBNQUMgcGFyYW1ldGVycyAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3Jlc3Rv cmVfbWFjX3JlZ3MocHJpdiwgaXFrX21hY19yZWdzLCBwcml2LT5tYWNfYmFja3VwKTsNCj4gKw0K PiArICAgICAgIC8qIFJlbG9hZCBCQiBwYXJhbWV0ZXJzICovDQo+ICsgICAgICAgcnRsOHh4eHVf cmVzdG9yZV9yZWdzKHByaXYsIGlxa19iYl9yZWdzLCBwcml2LT5iYl9iYWNrdXAsIFJUTDhYWFhV X0JCX1JFR1MpOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9jbGVhcihwcml2LCBS RUdfRlBHQTBfWENEX1JGX1BBUk0sIEJJVCgzMSkpOw0KPiArDQo+ICsgICAgICAgLyogUmVzdG9y ZSBSWCBpbml0aWFsIGdhaW4gKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJp diwgUkVHX09GRE0wX1hBX0FHQ19DT1JFMSwgMHhmZiwgMHg1MCk7DQo+ICsgICAgICAgcnRsOHh4 eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJFR19PRkRNMF9YQV9BR0NfQ09SRTEsIDB4ZmYsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2luaXRpYWxfZ2Fpbl9hICYgMHhmZik7DQo+ ICsgICAgICAgaWYgKHByaXYtPnJmX3BhdGhzID4gMSkgew0KPiArICAgICAgICAgICAgICAgcnRs OHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJFR19PRkRNMF9YQl9BR0NfQ09SRTEsIDB4ZmYsIDB4 NTApOw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJFR19P RkRNMF9YQl9BR0NfQ09SRTEsIDB4ZmYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcnhfaW5pdGlhbF9nYWluX2IgJiAweGZmKTsNCj4gKyAgICAgICB9DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIHJ0bDgxOTJmdV9waHlfaXFfY2FsaWJyYXRlKHN0cnVjdCBydGw4 eHh4dV9wcml2ICpwcml2KQ0KPiArew0KPiArICAgICAgIHMzMiByZWdfZTk0LCByZWdfZTljLCBy ZWdfZWE0LCByZWdfZWFjOw0KPiArICAgICAgIHMzMiByZWdfZWI0LCByZWdfZWJjLCByZWdfZWM0 LCByZWdfZWNjOw0KPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwcml2LT51ZGV2LT5k ZXY7DQo+ICsgICAgICAgdTMyIHBhdGhfYV8weGRmLCBwYXRoX2FfMHgzNTsNCj4gKyAgICAgICB1 MzIgcGF0aF9iXzB4ZGYsIHBhdGhfYl8weDM1Ow0KPiArICAgICAgIGJvb2wgcGF0aF9hX29rLCBw YXRoX2Jfb2s7DQo+ICsgICAgICAgdTggcmZlID0gcHJpdi0+cmZlX3R5cGU7DQo+ICsgICAgICAg dTMyIHJmZV9wYXRoX3NlbGVjdDsNCj4gKyAgICAgICBpbnQgcmVzdWx0WzRdWzhdOyAvKiBsYXN0 IGlzIGZpbmFsIHJlc3VsdCAqLw0KPiArICAgICAgIGludCBpLCBjYW5kaWRhdGU7DQo+ICsgICAg ICAgczMyIHJlZ190bXAgPSAwOw0KPiArICAgICAgIGJvb2wgc2ltdTsNCj4gKyAgICAgICB1MzIg dmFsMzI7DQo+ICsNCj4gKyAgICAgICByZmVfcGF0aF9zZWxlY3QgPSBydGw4eHh4dV9yZWFkMzIo cHJpdiwgUkVHX1JGRV9QQVRIX1NFTEVDVCk7DQo+ICsNCj4gKyAgICAgICBwYXRoX2FfMHhkZiA9 IHJ0bDh4eHh1X3JlYWRfcmZyZWcocHJpdiwgUkZfQSwgUkY2MDUyX1JFR19VTktOT1dOX0RGKTsN Cj4gKyAgICAgICBwYXRoX2FfMHgzNSA9IHJ0bDh4eHh1X3JlYWRfcmZyZWcocHJpdiwgUkZfQSwg MHgzNSk7DQo+ICsgICAgICAgcGF0aF9iXzB4ZGYgPSBydGw4eHh4dV9yZWFkX3JmcmVnKHByaXYs IFJGX0IsIFJGNjA1Ml9SRUdfVU5LTk9XTl9ERik7DQo+ICsgICAgICAgcGF0aF9iXzB4MzUgPSBy dGw4eHh4dV9yZWFkX3JmcmVnKHByaXYsIFJGX0IsIDB4MzUpOw0KPiArDQo+ICsgICAgICAgbWVt c2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOw0KPiArICAgICAgIGNhbmRpZGF0ZSA9IC0x Ow0KPiArDQo+ICsgICAgICAgcGF0aF9hX29rID0gZmFsc2U7DQo+ICsgICAgICAgcGF0aF9iX29r ID0gZmFsc2U7DQo+ICsNCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7DQo+ICsg ICAgICAgICAgICAgICBydGw4MTkyZnVfcGh5X2lxY2FsaWJyYXRlKHByaXYsIHJlc3VsdCwgaSk7 DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGlmIChpID09IDEpIHsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgc2ltdSA9IHJ0bDh4eHh1X2dlbjJfc2ltdWxhcml0eV9jb21wYXJlKHByaXYsIHJl c3VsdCwgMCwgMSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaW11KSB7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gMDsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg fQ0KPiArICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICBpZiAoaSA9PSAy KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHNpbXUgPSBydGw4eHh4dV9nZW4yX3NpbXVs YXJpdHlfY29tcGFyZShwcml2LCByZXN1bHQsIDAsIDIpOw0KPiArICAgICAgICAgICAgICAgICAg ICAgICBpZiAoc2ltdSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRp ZGF0ZSA9IDA7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICBz aW11ID0gcnRsOHh4eHVfZ2VuMl9zaW11bGFyaXR5X2NvbXBhcmUocHJpdiwgcmVzdWx0LCAxLCAy KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbXUpIHsNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSAxOw0KPiArICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCA4OyBpKyspDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWdfdG1wICs9IHJlc3VsdFszXVtpXTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChyZWdfdG1wKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FuZGlkYXRlID0gMzsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRh dGUgPSAtMTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiArICAgICAgICAgICAgICAg fQ0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGlmIChjYW5kaWRhdGUgPj0gMCkgew0KPiAr ICAgICAgICAgICAgICAgcmVnX2U5NCA9IHJlc3VsdFtjYW5kaWRhdGVdWzBdOw0KPiArICAgICAg ICAgICAgICAgcmVnX2U5YyA9IHJlc3VsdFtjYW5kaWRhdGVdWzFdOw0KPiArICAgICAgICAgICAg ICAgcmVnX2VhNCA9IHJlc3VsdFtjYW5kaWRhdGVdWzJdOw0KPiArICAgICAgICAgICAgICAgcmVn X2VhYyA9IHJlc3VsdFtjYW5kaWRhdGVdWzNdOw0KPiArICAgICAgICAgICAgICAgcmVnX2ViNCA9 IHJlc3VsdFtjYW5kaWRhdGVdWzRdOw0KPiArICAgICAgICAgICAgICAgcmVnX2ViYyA9IHJlc3Vs dFtjYW5kaWRhdGVdWzVdOw0KPiArICAgICAgICAgICAgICAgcmVnX2VjNCA9IHJlc3VsdFtjYW5k aWRhdGVdWzZdOw0KPiArICAgICAgICAgICAgICAgcmVnX2VjYyA9IHJlc3VsdFtjYW5kaWRhdGVd WzddOw0KPiArDQo+ICsgICAgICAgICAgICAgICBkZXZfZGJnKGRldiwgIiVzOiBjYW5kaWRhdGUg aXMgJXhcbiIsIF9fZnVuY19fLCBjYW5kaWRhdGUpOw0KPiArICAgICAgICAgICAgICAgZGV2X2Ri ZyhkZXYsICIlczogZTk0PSV4IGU5Yz0leCBlYTQ9JXggZWFjPSV4IGViND0leCBlYmM9JXggZWM0 PSV4IGVjYz0lY1xuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJlZ19l OTQsIHJlZ19lOWMsIHJlZ19lYTQsIHJlZ19lYWMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg IHJlZ19lYjQsIHJlZ19lYmMsIHJlZ19lYzQsIHJlZ19lY2MpOw0KPiArDQo+ICsgICAgICAgICAg ICAgICBwYXRoX2Ffb2sgPSB0cnVlOw0KPiArICAgICAgICAgICAgICAgcGF0aF9iX29rID0gdHJ1 ZTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJp diwgUkVHX1RYX0lRS19UT05FX0EsIDB4M2ZmMDAwMDAsIDB4MTAwKTsNCj4gKyAgICAgICBydGw4 eHh4dV93cml0ZTMyX21hc2socHJpdiwgMHhlMjAsIDB4M2ZmLCAwKTsNCg0KI2RlZmluZSBSRUdf TlBfQU5UQSAweGUyMA0KDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIFJF R19UWF9JUUtfVE9ORV9CLCAweDNmZjAwMDAwLCAweDEwMCk7DQo+ICsgICAgICAgcnRsOHh4eHVf d3JpdGUzMl9tYXNrKHByaXYsIFJFR19UQVBfVVBEXzk3RiwgMHgzZmYsIDApOw0KPiArDQo+ICsg ICAgICAgaWYgKGNhbmRpZGF0ZSA+PSAwKSB7DQo+ICsgICAgICAgICAgICAgICBpZiAocmVnX2U5 NCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcnRsOHh4eHVfZmlsbF9pcWtfbWF0cml4X2Eo cHJpdiwgcGF0aF9hX29rLCByZXN1bHQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSwgKHJlZ19lYTQgPT0gMCkpOw0KPiArDQo+ ICsgICAgICAgICAgICAgICBpZiAocmVnX2ViNCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg cnRsOHh4eHVfZmlsbF9pcWtfbWF0cml4X2IocHJpdiwgcGF0aF9iX29rLCByZXN1bHQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0 ZSwgKHJlZ19lYzQgPT0gMCkpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIHJ0bDh4eHh1 X3dyaXRlX3JmcmVnKHByaXYsIFJGX0EsIFJGNjA1Ml9SRUdfVU5LTk9XTl9ERiwgcGF0aF9hXzB4 ZGYpOw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlX3JmcmVnKHByaXYsIFJGX0EsIDB4MzUsIHBh dGhfYV8weDM1KTsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZV9yZnJlZyhwcml2LCBSRl9CLCBS RjYwNTJfUkVHX1VOS05PV05fREYsIHBhdGhfYl8weGRmKTsNCj4gKyAgICAgICBydGw4eHh4dV93 cml0ZV9yZnJlZyhwcml2LCBSRl9CLCAweDM1LCBwYXRoX2JfMHgzNSk7DQo+ICsNCj4gKyAgICAg ICBpZiAocmZlID09IDcgfHwgcmZlID09IDggfHwgcmZlID09IDkgfHwgcmZlID09IDEyKSB7DQo+ ICsgICAgICAgICAgICAgICBydGw4eHh4dV93cml0ZTMyX3NldChwcml2LCBSRUdfU1dfR1BJT19T SEFSRV9DVFJMXzEsIDB4NzAwMDApOw0KPiArICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGUz Ml9jbGVhcihwcml2LCBSRUdfTEVEQ0ZHMCwgMHg2YzAwMDAwKTsNCj4gKyAgICAgICAgICAgICAg IHJ0bDh4eHh1X3dyaXRlMzJfc2V0KHByaXYsIFJFR19QQURfQ1RSTDEsIEJJVCgyOSkgfCBCSVQo MjgpKTsNCj4gKyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlMzJfY2xlYXIocHJpdiwgUkVH X1NXX0dQSU9fU0hBUkVfQ1RSTF8wLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDYwMDAwMCB8IEJJVCg0KSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIC8qDQo+ ICsgICAgICAgICAgICAgICAgKiBPcmlnaW5hbGx5Og0KPiArICAgICAgICAgICAgICAgICogb2Rt X3NldF9iYl9yZWcoZG0sIFJfMHg5NDQsIEJJVCgxMSkgfCAweDFGLCAweDNGKTsNCj4gKyAgICAg ICAgICAgICAgICAqDQo+ICsgICAgICAgICAgICAgICAgKiBJdCBjbGVhcnMgYml0IDExIGFuZCBz ZXRzIGJpdHMgMC4uNC4gVGhlIG1hc2sgZG9lc24ndCBjb3Zlcg0KPiArICAgICAgICAgICAgICAg ICogYml0IDUgc28gaXQncyBub3QgbW9kaWZpZWQuIElzIHRoYXQgd2hhdCBpdCdzIHN1cHBvc2Vk IHRvDQo+ICsgICAgICAgICAgICAgICAgKiBhY2NvbXBsaXNoPw0KPiArICAgICAgICAgICAgICAg ICovDQo+ICsgICAgICAgICAgICAgICB2YWwzMiA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBSRUdf UkZFX0JVRkZFUik7DQo+ICsgICAgICAgICAgICAgICB2YWwzMiAmPSB+QklUKDExKTsNCj4gKyAg ICAgICAgICAgICAgIHZhbDMyIHw9IDB4MWY7DQo+ICsgICAgICAgICAgICAgICBydGw4eHh4dV93 cml0ZTMyKHByaXYsIFJFR19SRkVfQlVGRkVSLCB2YWwzMik7DQo+ICsNCj4gKyAgICAgICAgICAg ICAgIGlmIChyZmUgPT0gNykgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBydGw4eHh4dV93 cml0ZTMyX21hc2socHJpdiwgUkVHX1JGRV9DVFJMX0FOVEFfU1JDLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZiwgMHgyMzIwMCk7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlMzJfbWFzayhwcml2LCAweDkzOCwg MHhmZmZmZiwgMHgyMzIwMCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dy aXRlMzJfbWFzayhwcml2LCAweDkzNCwgMHhmMDAwLCAweDMpOw0KPiArICAgICAgICAgICAgICAg ICAgICAgICBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgMHg5M2MsIDB4ZjAwMCwgMHgzKTsN Cj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0 bDh4eHh1X3dyaXRlMzJfbWFzayhwcml2LCBSRUdfUkZFX0NUUkxfQU5UQV9TUkMsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmLCAweDIyMjAw KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYs IDB4OTM4LCAweGZmZmZmLCAweDIyMjAwKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcnRs OHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIDB4OTM0LCAweGYwMDAsIDB4Mik7DQoNCiNkZWZpbmUg UkVHX1JGRV9DVFJMX0FOVF9TUkMxIDB4OTM0DQoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg cnRsOHh4eHVfd3JpdGUzMl9tYXNrKHByaXYsIDB4OTNjLCAweGYwMDAsIDB4Mik7DQo+ICsgICAg ICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICAgIHJ0bDh4eHh1X3dyaXRlMzJfY2xl YXIocHJpdiwgMHg5NjgsIEJJVCgyKSk7DQoNCiNkZWZpbmUgUkVHX1JFRl9PUFQ2MiAweDk2OA0K DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZmUgPT0gNykNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCAweDkyMCwgMHgwMzAwMDAwMyk7DQoNCiNk ZWZpbmUgUkVHX1JFRl9PUFQgMHg5MjANCg0KPiArDQo+ICsgICAgICAgICAgICAgICBydGw4eHh4 dV93cml0ZTMyKHByaXYsIFJFR19SRkVfUEFUSF9TRUxFQ1QsIHJmZV9wYXRoX3NlbGVjdCk7DQo+ ICsgICAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBydGw4MTkyZnVfZGlzYWJsZWRf dG9fZW11KHN0cnVjdCBydGw4eHh4dV9wcml2ICpwcml2KQ0KPiArew0KPiArICAgICAgIHJ0bDh4 eHh1X3dyaXRlMTZfY2xlYXIocHJpdiwgUkVHX0FQU19GU01DTywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFQU19GU01DT19IV19QT1dFUkRPV04gfCBBUFNfRlNNQ09fSFdfU1VT UEVORCk7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMyX2NsZWFyKHByaXYsIFJFR19H UElPX0lOVE0sIEJJVCgxNikpOw0KPiArDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUxNl9jbGVh cihwcml2LCBSRUdfQVBTX0ZTTUNPLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVBTX0ZTTUNPX1BDSUUgfCBBUFNfRlNNQ09fSFdfU1VTUEVORCk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgcnRsODE5MmZ1X2VtdV90b19hY3RpdmUoc3RydWN0IHJ0bDh4eHh1X3ByaXYgKnBy aXYpDQo+ICt7DQo+ICsgICAgICAgdTMyIHZhbDMyOw0KPiArICAgICAgIHUxNiB2YWwxNjsNCj4g KyAgICAgICBpbnQgY291bnQ7DQo+ICsNCj4gKyAgICAgICAvKiBlbmFibGUgTERPQTEyIE1BQ1JP IGJsb2NrIGZvciBhbGwgaW50ZXJmYWNlICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGU4X3Nl dChwcml2LCBSRUdfTERPQTE1X0NUUkwsIExET0ExNV9FTkFCTEUpOw0KPiArDQo+ICsgICAgICAg LyogZGlzYWJsZSBCVF9HUFNfU0VMIHBpbnMgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZTMy X2NsZWFyKHByaXYsIFJFR19QQURfQ1RSTDEsIEJJVCgyOCkpOw0KPiArDQo+ICsgICAgICAgbWRl bGF5KDEpOw0KPiArDQo+ICsgICAgICAgLyogcmVsZWFzZSBhbmFsb2cgSXBzIHRvIGRpZ2l0YWwg Ki8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZThfY2xlYXIocHJpdiwgUkVHX1NZU19JU09fQ1RS TCwgU1lTX0lTT19BTkFMT0dfSVBTKTsNCj4gKw0KPiArICAgICAgIHZhbDE2ID0gQVBTX0ZTTUNP X1BDSUUgfCBBUFNfRlNNQ09fSFdfU1VTUEVORCB8IEFQU19GU01DT19TV19MUFM7DQo+ICsgICAg ICAgcnRsOHh4eHVfd3JpdGUxNl9jbGVhcihwcml2LCBSRUdfQVBTX0ZTTUNPLCB2YWwxNik7DQo+ ICsNCj4gKyAgICAgICAvKiB3YWl0IHRpbGwgMHgwNFsxN10gPSAxIHBvd2VyIHJlYWR5ICovDQo+ ICsgICAgICAgZm9yIChjb3VudCA9IFJUTDhYWFhVX01BWF9SRUdfUE9MTDsgY291bnQ7IGNvdW50 LS0pIHsNCj4gKyAgICAgICAgICAgICAgIHZhbDMyID0gcnRsOHh4eHVfcmVhZDMyKHByaXYsIFJF R19BUFNfRlNNQ08pOw0KPiArICAgICAgICAgICAgICAgaWYgKHZhbDMyICYgQklUKDE3KSkNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIHVk ZWxheSgxMCk7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKCFjb3VudCkNCj4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0 ZTMyX3NldChwcml2LCBSRUdfQVBTX0ZTTUNPLCBBUFNfRlNNQ09fV0xPTl9SRVNFVCk7DQo+ICsN Cj4gKyAgICAgICBmb3IgKGNvdW50ID0gUlRMOFhYWFVfTUFYX1JFR19QT0xMOyBjb3VudDsgY291 bnQtLSkgew0KPiArICAgICAgICAgICAgICAgdmFsMzIgPSBydGw4eHh4dV9yZWFkMzIocHJpdiwg UkVHX0FQU19GU01DTyk7DQo+ICsgICAgICAgICAgICAgICBpZiAoKHZhbDMyICYgKEFQU19GU01D T19NQUNfRU5BQkxFIHwgQVBTX0ZTTUNPX01BQ19PRkYpKSA9PSAwKQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCj4gKw0KPiArICAgICAgICAgICAgICAgdWRlbGF5KDEwKTsNCj4g KyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBpZiAoIWNvdW50KQ0KPiArICAgICAgICAgICAgICAg cmV0dXJuIC1FQlVTWTsNCj4gKw0KPiArICAgICAgIC8qIFNXUiBPQ1AgZW5hYmxlICovDQo+ICsg ICAgICAgcnRsOHh4eHVfd3JpdGUzMl9zZXQocHJpdiwgUkVHX0FGRV9NSVNDLCBCSVQoMTgpKTsN Cj4gKw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMTZfY2xlYXIocHJpdiwgUkVHX0FQU19GU01D TywgQVBTX0ZTTUNPX0hXX1BPV0VSRE9XTik7DQo+ICsNCj4gKyAgICAgICBydGw4eHh4dV93cml0 ZTE2X2NsZWFyKHByaXYsIFJFR19BUFNfRlNNQ08sDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBUFNfRlNNQ09fUENJRSB8IEFQU19GU01DT19IV19TVVNQRU5EKTsNCj4gKw0KPiAr ICAgICAgIC8qIDB4N2NbMzFdPTEsIExETyBoYXMgbWF4IG91dHB1dCBjYXBhYmlsaXR5ICovDQo+ ICsgICAgICAgcnRsOHh4eHVfd3JpdGUzMl9zZXQocHJpdiwgUkVHX0xET19TV19DVFJMLCBCSVQo MzEpKTsNCj4gKw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlMTZfc2V0KHByaXYsIFJFR19BUFNf RlNNQ08sIEFQU19GU01DT19NQUNfRU5BQkxFKTsNCj4gKw0KPiArICAgICAgIGZvciAoY291bnQg PSBSVEw4WFhYVV9NQVhfUkVHX1BPTEw7IGNvdW50OyBjb3VudC0tKSB7DQo+ICsgICAgICAgICAg ICAgICB2YWwzMiA9IHJ0bDh4eHh1X3JlYWQzMihwcml2LCBSRUdfQVBTX0ZTTUNPKTsNCj4gKyAg ICAgICAgICAgICAgIGlmICgodmFsMzIgJiBBUFNfRlNNQ09fTUFDX0VOQUJMRSkgPT0gMCkNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIHVk ZWxheSgxMCk7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKCFjb3VudCkNCj4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7DQo+ICsNCj4gKyAgICAgICAvKiBFbmFibGUgV0wg Y29udHJvbCBYVEFMIHNldHRpbmcgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0ZThfc2V0KHBy aXYsIFJFR19BRkVfTUlTQywgQUZFX01JU0NfV0xfWFRBTF9DVFJMKTsNCj4gKw0KPiArICAgICAg IC8qIEVuYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlcmluZyBpbnRlcnJ1cHQgKi8NCj4gKyAgICAg ICBydGw4eHh4dV93cml0ZTE2X3NldChwcml2LCBSRUdfR1BJT19JTlRNLCBHUElPX0lOVE1fRURH RV9UUklHX0lSUSk7DQo+ICsNCj4gKyAgICAgICAvKiBFbmFibGUgR1BJTzkgZGF0YSBtb2RlICov DQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUxNl9jbGVhcihwcml2LCBSRUdfR1BJT19JT19TRUxf MiwgR1BJT19JT19TRUxfMl9HUElPMDlfSVJRKTsNCj4gKw0KPiArICAgICAgIC8qIEVuYWJsZSBH UElPOSBpbnB1dCBtb2RlICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGUxNl9jbGVhcihwcml2 LCBSRUdfR1BJT19JT19TRUxfMiwgR1BJT19JT19TRUxfMl9HUElPMDlfSU5QVVQpOw0KPiArDQo+ ICsgICAgICAgLyogRW5hYmxlIEhTSVNSIEdQSU9bQzowXSBpbnRlcnJ1cHQgKi8NCj4gKyAgICAg ICBydGw4eHh4dV93cml0ZThfc2V0KHByaXYsIFJFR19IU0lNUiwgQklUKDApKTsNCj4gKw0KPiAr ICAgICAgIC8qIFJGIEhXIE9OL09GRiBFbmFibGUgKi8NCj4gKyAgICAgICBydGw4eHh4dV93cml0 ZThfY2xlYXIocHJpdiwgUkVHX01VTFRJX0ZVTkNfQ1RSTCwgTVVMVElfV0lGSV9IV19ST0ZfRU4p Ow0KPiArDQo+ICsgICAgICAgLyogUmVnaXN0ZXIgTG9jayBEaXNhYmxlICovDQo+ICsgICAgICAg cnRsOHh4eHVfd3JpdGU4X3NldChwcml2LCBSRUdfUlNWX0NUUkwsIEJJVCg3KSk7DQo+ICsNCj4g KyAgICAgICAvKiBGb3IgR1BJTzkgaW50ZXJuYWwgcHVsbCBoaWdoIHNldHRpbmcgKi8NCj4gKyAg ICAgICBydGw4eHh4dV93cml0ZTE2X3NldChwcml2LCBSRUdfTVVMVElfRlVOQ19DVFJMLCBCSVQo MTQpKTsNCj4gKw0KPiArICAgICAgIC8qIHJlc2V0IFJGIHBhdGggUzEgKi8NCj4gKyAgICAgICBy dGw4eHh4dV93cml0ZTgocHJpdiwgUkVHX1JGX0NUUkwsIDApOw0KPiArDQo+ICsgICAgICAgLyog cmVzZXQgUkYgcGF0aCBTMCAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlOChwcml2LCAweDdi LCAwKTsNCg0KI2RlZmluZSBSRUdfQUZFX0NUUkw0IDB4NzgNCg0KdXNlIFJFR19BRkVfQ1RSTDQg KyAzIGZvciAweDdiDQoNCj4gKw0KPiArICAgICAgIC8qIGVuYWJsZSBSRiBwYXRoIFMxICovDQo+ ICsgICAgICAgcnRsOHh4eHVfd3JpdGU4KHByaXYsIFJFR19SRl9DVFJMLCBSRl9TRE1SU1RCIHwg UkZfUlNUQiB8IFJGX0VOQUJMRSk7DQo+ICsNCj4gKyAgICAgICAvKiBlbmFibGUgUkYgcGF0aCBT MCAqLw0KPiArICAgICAgIHJ0bDh4eHh1X3dyaXRlOChwcml2LCAweDdiLCBSRl9TRE1SU1RCIHwg UkZfUlNUQiB8IFJGX0VOQUJMRSk7DQo+ICsNCj4gKyAgICAgICAvKiBBRkVfQ3RybCAqLw0KPiAr ICAgICAgIHJ0bDh4eHh1X3dyaXRlOF9zZXQocHJpdiwgMHg5NywgQklUKDUpKTsNCg0KI2RlZmlu ZSBSRUdfUlNWRF8xIDB4OTcNCg0KPiArDQo+ICsgICAgICAgLyogQUZFX0N0cmwgKi8NCj4gKyAg ICAgICBydGw4eHh4dV93cml0ZTgocHJpdiwgMHhkYywgMHhjYyk7DQoNCiNkZWZpbmUgUkVHX1JT VkRfNCAweGRjDQoNClRoZSBuYW1lIGxvb2tzIG5vdCBzbyBtZWFuaW5nZnVsLCBidXQgZGVzaWdu ZXJzIGRpZCBnaXZlIGl0IGFzIGlzLg0KDQo+ICsNCj4gKyAgICAgICAvKiBBRkVfQ3RybCAweDI0 WzQ6M109MDAgZm9yIHh0YWwgZ21uICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGU4X2NsZWFy KHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCBCSVQoNCkgfCBCSVQoMykpOw0KPiArDQo+ICsgICAg ICAgLyogR1BJT19BWzMxOjBdIFB1bGwgZG93biBzb2Z0d2FyZSByZWdpc3RlciAqLw0KPiArICAg ICAgIHJ0bDh4eHh1X3dyaXRlMzIocHJpdiwgMHgxMDUwLCAweGZmZmZmZmZmKTsNCg0KI2RlZmlu ZSBSRUdfR1BJT19BMCAweDEwNTANCg0KPiArDQo+ICsgICAgICAgLyogR1BJT19CWzc6MF0gUHVs bCBkb3duIHNvZnR3YXJlIHJlZ2lzdGVyICovDQo+ICsgICAgICAgcnRsOHh4eHVfd3JpdGU4KHBy aXYsIDB4MTA1YiwgMHhmZik7DQoNCiNkZWZpbmUgUkVHX0dQSU9fQjAgMHgxMDViDQoNCj4gKw0K PiArICAgICAgIC8qIFJlZ2lzdGVyIExvY2sgRW5hYmxlICovDQo+ICsgICAgICAgcnRsOHh4eHVf d3JpdGU4X2NsZWFyKHByaXYsIFJFR19SU1ZfQ1RSTCwgQklUKDcpKTsNCj4gKw0KPiArICAgICAg IHJldHVybiAwOw0KPiArfQ0KPiArDQoNClsuLi5dDQoNCj4gQEAgLTI4NDIsMTAgKzI4NjQsMTQg QEAgdm9pZCBydGw4eHh4dV9maWxsX2lxa19tYXRyaXhfYihzdHJ1Y3QgcnRsOHh4eHVfcHJpdiAq cHJpdiwgYm9vbCBpcWtfb2ssDQo+IA0KPiAgICAgICAgIHJlZyA9IChyZXN1bHRbY2FuZGlkYXRl XVs3XSA+PiA2KSAmIDB4ZjsNCj4gDQo+IC0gICAgICAgdmFsMzIgPSBydGw4eHh4dV9yZWFkMzIo cHJpdiwgUkVHX09GRE0wX0FHQ1JfU1NJX1RBQkxFKTsNCj4gLSAgICAgICB2YWwzMiAmPSB+MHgw MDAwZjAwMDsNCj4gLSAgICAgICB2YWwzMiB8PSAocmVnIDw8IDEyKTsNCj4gLSAgICAgICBydGw4 eHh4dV93cml0ZTMyKHByaXYsIFJFR19PRkRNMF9BR0NSX1NTSV9UQUJMRSwgdmFsMzIpOw0KPiAr ICAgICAgIGlmIChwcml2LT5ydGxfY2hpcCA9PSBSVEw4MTkyRikgew0KPiArICAgICAgICAgICAg ICAgdmFsMzIgPSBydGw4eHh4dV93cml0ZTMyX21hc2socHJpdiwgMHhjYTgsIDB4MDAwMDAwZjAs IHJlZyk7DQoNClNldHRpbmcgdmFsMzIgdG8gcmV0dXJuIHZhbHVlIGlzbid0IHJlYXNvbmFibGUu IA0KDQojZGZpbmUgUkVHX1JYSVFCX0VYVCAweGNhOA0KDQo+ICsgICAgICAgfSBlbHNlIHsNCj4g KyAgICAgICAgICAgICAgIHZhbDMyID0gcnRsOHh4eHVfcmVhZDMyKHByaXYsIFJFR19PRkRNMF9B R0NSX1NTSV9UQUJMRSk7DQo+ICsgICAgICAgICAgICAgICB2YWwzMiAmPSB+MHgwMDAwZjAwMDsN Cj4gKyAgICAgICAgICAgICAgIHZhbDMyIHw9IChyZWcgPDwgMTIpOw0KPiArICAgICAgICAgICAg ICAgcnRsOHh4eHVfd3JpdGUzMihwcml2LCBSRUdfT0ZETTBfQUdDUl9TU0lfVEFCTEUsIHZhbDMy KTsNCj4gKyAgICAgICB9DQo+ICB9DQo+IA0KDQpbLi4uXQ0KDQpJIGxvb2t1cCByZWdpc3RlciBk b2N1bWVudCBmb3IgdW5jZXJ0YWluIGFkZHJlc3NlcywgYnV0IHRoaXMgaXNuJ3QgYSBzaW1wbGUN CmNvcHktcGFzdGUgdGhpbmcsIHNvIEkgbWF5IG1lc3Mgc29tZXRoaW5nLiBQbGVhc2UgdGVsbCBt ZSBpZiBzb21ldGhpbmcgbG9vayB3ZWlyZC4NCg0KUGluZy1LZQ0KDQo=