From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 9FAFA445E3 for ; Sat, 19 Nov 2022 17:13:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 63F9C68B361; Sat, 19 Nov 2022 19:13:43 +0200 (EET) Received: from out203-205-221-190.mail.qq.com (out203-205-221-190.mail.qq.com [203.205.221.190]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0CFA768AEFD for ; Sat, 19 Nov 2022 19:13:36 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1668878012; bh=TpdXoUn/7Sb0Cec9YOPfSaheeaj+iD3XgGYphR4COcE=; h=Subject:From:In-Reply-To:Date:Cc:References:To; b=D/8H8BLKk06vlLqbdZKQ5Oz3vJpJY5wg2JgoIb4XadLPFRFi6PTxAvP7Itbbnojxb jRSiBVRNjE+nw63xIebwtVaLy+lqsbyTvd0Riao6vHJ2Wx+tfIUkbpuUDWYh+MUCgB EpNRdNt/ZvsudWRcrLa27kv5BW4q2vmcnyDvZrc0= Received: from smtpclient.apple ([14.153.77.200]) by newxmesmtplogicsvrszb6-0.qq.com (NewEsmtp) with SMTP id 35F96635; Sun, 20 Nov 2022 01:13:31 +0800 X-QQ-mid: xmsmtpt1668878011tfqkzu86f Message-ID: X-QQ-XMAILINFO: OZZSS56D9fAjyeOLWkRMeOEhvg+LAG14DWBekHgs/c99ukkehUeMvNcEFns3OW 8Qj6yJykjNXC2cIFF7bCEbzKIq6EpxWuVq/fA8TQ+XXyAVo2QCfJtNr2V8hUwo/TFdW26bN6t6Xj CW6tjECNDXxSI8XoQ5Z5WDoHQHQl9Zhoz3apQKus6gq6MI+1TD4Mx+wsscG2C98Nh5Ci2A5M+ixl l9S/eK419XzwogqfFcm9Nz7/oGJRrwLaGU1RNmWIQkYlbWaeXR+QTRghBWq24SCKNPGVdFGFX3hP hRdi5YdsVxqvmJhOe4c0hP4dXyTK4VhsaNKfiSxKtuJMXOntLsXqA1eofA2/5NmCYmaCD5KAveVk w4DOMpTkx4lonPTDUdCl2KzUIB8qfZWmsilqDnf60vhYkqCLB/J4Gp2NWHukopXnKqz0rrP39MrJ 2h8pbtljpA6jgNSSYKcJ/c2CsOVdy+FcIyKhcd04jaMcZbk37utzo2O9RxhZxfO+r6vYumszaWBo tCFwl5F8ZxThWoMvmwuhKzy2YvgRKlk6ZHuTcCUcoHR3tOyURAnytC99zOYZ5cWZ6ZS8/LbLEmSp Oy66TW2IJQ6p25UAAuQ7nLfvTVDa9Cn8crISFHnnYW/kuuO4kOPZZab9o5FWEpty8Tf5kblSXmtL FgYxz8ZtZMizeKgXf8BqQR5mdhFyZlmynxCOLN3YO7CSi9/gZJlX29ksUmP/rxjwx4flBiS8sbpZ M3CGh08DC9KsCqyRPm6qSmhdn4QXl+OUWUJ3Edzm5S17egn/ZfWz+Hc/OawTLEHwYeBpCdXCgMBc OoCjiDPEPHcuboAGMaENl19EZVm93QUQhZj1xlygkTM9KPlVhZlzfePtcJpN2QfbCJpHMAsq2gPQ +AtD6WNQuyaj91hnpcG/+yIx0PCfnvFjOd0K4QbJtlOvMWTFq4XA1p1pzGb1O1RCTvphoXk1C5c0 123xMxvQSiyXELQiV9dLBv+tnfTBWeVDvDgXdWzJA= Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) From: =?utf-8?B?InpoaWxpemhhbyjotbXlv5fnq4spIg==?= In-Reply-To: Date: Sun, 20 Nov 2022 01:13:31 +0800 X-OQ-MSGID: <1FE97F2C-0360-408E-9AB8-80090786738C@foxmail.com> References: <20221024031658.1026118-1-quinkblack@foxmail.com> To: FFmpeg development discussions and patches X-Mailer: Apple Mail (2.3696.120.41.1.1) Subject: Re: [FFmpeg-devel] [PATCH 10/12] avcodec: add MediaCodec encoder X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Aman Karmani Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Cgo+IE9uIE5vdiAxOSwgMjAyMiwgYXQgMTc6MTUsIEFtYW4gS2FybWFuaSA8YW1hbkB0bW0xLm5l dD4gd3JvdGU6Cj4gCj4gCj4gCj4gT24gU3VuLCBPY3QgMjMsIDIwMjIgYXQgODoxNyBQTSBaaGFv IFpoaWxpIDxxdWlua2JsYWNrQGZveG1haWwuY29tPiB3cm90ZToKPiBGcm9tOiBaaGFvIFpoaWxp IDx6aGlsaXpoYW9AdGVuY2VudC5jb20+Cj4gCj4gU2lnbmVkLW9mZi1ieTogWmhhbyBaaGlsaSA8 emhpbGl6aGFvQHRlbmNlbnQuY29tPgo+IC0tLQo+ICBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAg ICAgICAgIHwgICAxICsKPiAgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCAr Cj4gIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDIgKwo+ICBsaWJhdmNvZGVj L2FsbGNvZGVjcy5jICAgICAgICAgIHwgICAyICsKPiAgbGliYXZjb2RlYy9tZWRpYWNvZGVjX3dy YXBwZXIuYyB8IDEwMiArKysrKystCj4gIGxpYmF2Y29kZWMvbWVkaWFjb2RlY193cmFwcGVyLmgg fCAgIDggKwo+ICBsaWJhdmNvZGVjL21lZGlhY29kZWNlbmMuYyAgICAgIHwgNDk1ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYmF2Y29kZWMvdmVyc2lvbi5oICAgICAgICAg ICAgfCAgIDQgKy0KPiAgOCBmaWxlcyBjaGFuZ2VkLCA2MTEgaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbWVkaWFjb2RlY2VuYy5j Cj4gCj4gZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+IGluZGV4IDllMjAzODMz YWEuLjllMzlhMzU5NzIgMTAwNjQ0Cj4gLS0tIGEvQ2hhbmdlbG9nCj4gKysrIGIvQ2hhbmdlbG9n Cj4gQEAgLTE5LDYgKzE5LDcgQEAgdmVyc2lvbiA8bmV4dD46Cj4gIC0gRFRTIHRvIFBUUyByZW9y ZGVyIGJzZgo+ICAtIFZpZXdRdWVzdCBWUUMgZGVjb2Rlcgo+ICAtIE1lZGlhQ29kZWMgZGVjb2Rl ciB2aWEgTkRLTWVkaWFDb2RlYwo+ICstIE1lZGlhQ29kZWMgZW5jb2Rlcgo+IAo+IAo+IAo+ICB2 ZXJzaW9uIDUuMToKPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5kZXgg ZWUyZTNiYTZhYy4uNTExNGNkYTEzZiAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysgYi9j b25maWd1cmUKPiBAQCAtMzE5Myw2ICszMTkzLDggQEAgaDI2NF9jdXZpZF9kZWNvZGVyX3NlbGVj dD0iaDI2NF9tcDR0b2FubmV4Yl9ic2YiCj4gIGgyNjRfbWVkaWFjb2RlY19kZWNvZGVyX2RlcHM9 Im1lZGlhY29kZWMiCj4gIGgyNjRfbWVkaWFjb2RlY19kZWNvZGVyX2V4dHJhbGlicz0iLWxhbmRy b2lkIgo+ICBoMjY0X21lZGlhY29kZWNfZGVjb2Rlcl9zZWxlY3Q9ImgyNjRfbXA0dG9hbm5leGJf YnNmIGgyNjRfcGFyc2VyIgo+ICtoMjY0X21lZGlhY29kZWNfZW5jb2Rlcl9kZXBzPSJtZWRpYWNv ZGVjIgo+ICtoMjY0X21lZGlhY29kZWNfZW5jb2Rlcl9leHRyYWxpYnM9Ii1sYW5kcm9pZCIKPiAg aDI2NF9tZl9lbmNvZGVyX2RlcHM9Im1lZGlhZm91bmRhdGlvbiIKPiAgaDI2NF9tbWFsX2RlY29k ZXJfZGVwcz0ibW1hbCIKPiAgaDI2NF9udmVuY19lbmNvZGVyX2RlcHM9Im52ZW5jIgo+IEBAIC0z MjEyLDYgKzMyMTQsOCBAQCBoZXZjX2N1dmlkX2RlY29kZXJfc2VsZWN0PSJoZXZjX21wNHRvYW5u ZXhiX2JzZiIKPiAgaGV2Y19tZWRpYWNvZGVjX2RlY29kZXJfZGVwcz0ibWVkaWFjb2RlYyIKPiAg aGV2Y19tZWRpYWNvZGVjX2RlY29kZXJfZXh0cmFsaWJzPSItbGFuZHJvaWQiCj4gIGhldmNfbWVk aWFjb2RlY19kZWNvZGVyX3NlbGVjdD0iaGV2Y19tcDR0b2FubmV4Yl9ic2YgaGV2Y19wYXJzZXIi Cj4gK2hldmNfbWVkaWFjb2RlY19lbmNvZGVyX2RlcHM9Im1lZGlhY29kZWMiCj4gK2hldmNfbWVk aWFjb2RlY19lbmNvZGVyX2V4dHJhbGlicz0iLWxhbmRyb2lkIgo+ICBoZXZjX21mX2VuY29kZXJf ZGVwcz0ibWVkaWFmb3VuZGF0aW9uIgo+ICBoZXZjX252ZW5jX2VuY29kZXJfZGVwcz0ibnZlbmMi Cj4gIGhldmNfbnZlbmNfZW5jb2Rlcl9zZWxlY3Q9ImF0c2NfYTUzIgo+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IGluZGV4IDkwYzdmMTEz YTMuLjdkMGI1MTNlZWMgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQo+ICsrKyBi L2xpYmF2Y29kZWMvTWFrZWZpbGUKPiBAQCAtMzkzLDYgKzM5Myw3IEBAIE9CSlMtJChDT05GSUdf SDI2NF9ERUNPREVSKSAgICAgICAgICAgICs9IGgyNjRkZWMubyBoMjY0X2NhYmFjLm8gaDI2NF9j YXZsYy5vIFwKPiAgT0JKUy0kKENPTkZJR19IMjY0X0FNRl9FTkNPREVSKSAgICAgICAgKz0gYW1m ZW5jX2gyNjQubwo+ICBPQkpTLSQoQ09ORklHX0gyNjRfQ1VWSURfREVDT0RFUikgICAgICArPSBj dXZpZGRlYy5vCj4gIE9CSlMtJChDT05GSUdfSDI2NF9NRURJQUNPREVDX0RFQ09ERVIpICs9IG1l ZGlhY29kZWNkZWMubwo+ICtPQkpTLSQoQ09ORklHX0gyNjRfTUVESUFDT0RFQ19FTkNPREVSKSAr PSBtZWRpYWNvZGVjZW5jLm8KPiAgT0JKUy0kKENPTkZJR19IMjY0X01GX0VOQ09ERVIpICAgICAg ICAgKz0gbWZlbmMubyBtZl91dGlscy5vCj4gIE9CSlMtJChDT05GSUdfSDI2NF9NTUFMX0RFQ09E RVIpICAgICAgICs9IG1tYWxkZWMubwo+ICBPQkpTLSQoQ09ORklHX0gyNjRfTlZFTkNfRU5DT0RF UikgICAgICArPSBudmVuY19oMjY0Lm8gbnZlbmMubwo+IEBAIC00MTcsNiArNDE4LDcgQEAgT0JK Uy0kKENPTkZJR19IRVZDX0RFQ09ERVIpICAgICAgICAgICAgKz0gaGV2Y2RlYy5vIGhldmNfbXZz Lm8gXAo+ICBPQkpTLSQoQ09ORklHX0hFVkNfQU1GX0VOQ09ERVIpICAgICAgICArPSBhbWZlbmNf aGV2Yy5vCj4gIE9CSlMtJChDT05GSUdfSEVWQ19DVVZJRF9ERUNPREVSKSAgICAgICs9IGN1dmlk ZGVjLm8KPiAgT0JKUy0kKENPTkZJR19IRVZDX01FRElBQ09ERUNfREVDT0RFUikgKz0gbWVkaWFj b2RlY2RlYy5vCj4gK09CSlMtJChDT05GSUdfSEVWQ19NRURJQUNPREVDX0VOQ09ERVIpICs9IG1l ZGlhY29kZWNlbmMubwo+ICBPQkpTLSQoQ09ORklHX0hFVkNfTUZfRU5DT0RFUikgICAgICAgICAr PSBtZmVuYy5vIG1mX3V0aWxzLm8KPiAgT0JKUy0kKENPTkZJR19IRVZDX05WRU5DX0VOQ09ERVIp ICAgICAgKz0gbnZlbmNfaGV2Yy5vIG52ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19IRVZDX1FTVl9E RUNPREVSKSAgICAgICAgKz0gcXN2ZGVjLm8KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxj b2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiBpbmRleCA0NmFkM2I1YTI1Li40YzMz YTllYzNjIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiArKysgYi9saWJh dmNvZGVjL2FsbGNvZGVjcy5jCj4gQEAgLTE1NCw2ICsxNTQsNyBAQCBleHRlcm4gY29uc3QgRkZD b2RlYyBmZl9oMjY0X2RlY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfY3J5 c3RhbGhkX2RlY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfdjRsMm0ybV9k ZWNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oMjY0X21lZGlhY29kZWNfZGVjb2Rl cjsKPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaDI2NF9tZWRpYWNvZGVjX2VuY29kZXI7Cj4g IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfbW1hbF9kZWNvZGVyOwo+ICBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9oMjY0X3Fzdl9kZWNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBm Zl9oMjY0X3JrbXBwX2RlY29kZXI7Cj4gQEAgLTg0Miw2ICs4NDMsNyBAQCBleHRlcm4gY29uc3Qg RkZDb2RlYyBmZl9oMjY0X3ZpZGVvdG9vbGJveF9lbmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZD b2RlYyBmZl9oZXZjX2FtZl9lbmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oZXZj X2N1dmlkX2RlY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNfbWVkaWFjb2Rl Y19kZWNvZGVyOwo+ICtleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9oZXZjX21lZGlhY29kZWNfZW5j b2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaGV2Y19tZl9lbmNvZGVyOwo+ICBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9oZXZjX252ZW5jX2VuY29kZXI7Cj4gIGV4dGVybiBjb25zdCBG RkNvZGVjIGZmX2hldmNfcXN2X2VuY29kZXI7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbWVk aWFjb2RlY193cmFwcGVyLmMgYi9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5jCj4gaW5k ZXggMjg0ZDYxNTk4MC4uNWQxYTMyMDMxZCAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL21lZGlh Y29kZWNfd3JhcHBlci5jCj4gKysrIGIvbGliYXZjb2RlYy9tZWRpYWNvZGVjX3dyYXBwZXIuYwo+ IEBAIC0yMTIsNiArMjEyLDkgQEAgc3RydWN0IEpOSUFNZWRpYUNvZGVjRmllbGRzIHsKPiAgICAg IGptZXRob2RJRCByZWxlYXNlX291dHB1dF9idWZmZXJfaWQ7Cj4gICAgICBqbWV0aG9kSUQgcmVs ZWFzZV9vdXRwdXRfYnVmZmVyX2F0X3RpbWVfaWQ7Cj4gCj4gKyAgICBqbWV0aG9kSUQgc2V0X2lu cHV0X3N1cmZhY2VfaWQ7Cj4gKyAgICBqbWV0aG9kSUQgc2lnbmFsX2VuZF9vZl9pbnB1dF9zdHJl YW1faWQ7Cj4gKwo+ICAgICAgamNsYXNzIG1lZGlhaW5mb19jbGFzczsKPiAKPiAgICAgIGptZXRo b2RJRCBpbml0X2lkOwo+IEBAIC0yNjEsNiArMjY0LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBG RkpuaUZpZWxkIGpuaV9hbWVkaWFjb2RlY19tYXBwaW5nW10gPSB7Cj4gICAgICAgICAgeyAiYW5k cm9pZC9tZWRpYS9NZWRpYUNvZGVjIiwgInJlbGVhc2VPdXRwdXRCdWZmZXIiLCAiKElaKVYiLCBG Rl9KTklfTUVUSE9ELCBvZmZzZXRvZihzdHJ1Y3QgSk5JQU1lZGlhQ29kZWNGaWVsZHMsIHJlbGVh c2Vfb3V0cHV0X2J1ZmZlcl9pZCksIDEgfSwKPiAgICAgICAgICB7ICJhbmRyb2lkL21lZGlhL01l ZGlhQ29kZWMiLCAicmVsZWFzZU91dHB1dEJ1ZmZlciIsICIoSUopViIsIEZGX0pOSV9NRVRIT0Qs IG9mZnNldG9mKHN0cnVjdCBKTklBTWVkaWFDb2RlY0ZpZWxkcywgcmVsZWFzZV9vdXRwdXRfYnVm ZmVyX2F0X3RpbWVfaWQpLCAwIH0sCj4gCj4gKyAgICAgICAgeyAiYW5kcm9pZC9tZWRpYS9NZWRp YUNvZGVjIiwgInNldElucHV0U3VyZmFjZSIsICIoTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIiwg RkZfSk5JX01FVEhPRCwgb2Zmc2V0b2Yoc3RydWN0IEpOSUFNZWRpYUNvZGVjRmllbGRzLCBzZXRf aW5wdXRfc3VyZmFjZV9pZCksIDAgfSwKPiArICAgICAgICB7ICJhbmRyb2lkL21lZGlhL01lZGlh Q29kZWMiLCAic2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSIsICIoKVYiLCBGRl9KTklfTUVUSE9ELCBv ZmZzZXRvZihzdHJ1Y3QgSk5JQU1lZGlhQ29kZWNGaWVsZHMsIHNpZ25hbF9lbmRfb2ZfaW5wdXRf c3RyZWFtX2lkKSwgMCB9LAo+ICsKPiAgICAgIHsgImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRC dWZmZXJJbmZvIiwgTlVMTCwgTlVMTCwgRkZfSk5JX0NMQVNTLCBvZmZzZXRvZihzdHJ1Y3QgSk5J QU1lZGlhQ29kZWNGaWVsZHMsIG1lZGlhaW5mb19jbGFzcyksIDEgfSwKPiAKPiAgICAgICAgICB7 ICJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMuQnVmZmVySW5mbyIsICI8aW5pdD4iLCAiKClWIiwg RkZfSk5JX01FVEhPRCwgb2Zmc2V0b2Yoc3RydWN0IEpOSUFNZWRpYUNvZGVjRmllbGRzLCBpbml0 X2lkKSwgMSB9LAo+IEBAIC0xMzg1LDcgKzEzOTEsMjYgQEAgc3RhdGljIGludCBtZWRpYWNvZGVj X2puaV9jb25maWd1cmUoRkZBTWVkaWFDb2RlYyAqY3R4LAo+IAo+ICAgICAgSk5JX0dFVF9FTlZf T1JfUkVUVVJOKGVudiwgY29kZWMsIEFWRVJST1JfRVhURVJOQUwpOwo+IAo+IC0gICAgKCplbnYp LT5DYWxsVm9pZE1ldGhvZChlbnYsIGNvZGVjLT5vYmplY3QsIGNvZGVjLT5qZmllbGRzLmNvbmZp Z3VyZV9pZCwgZm9ybWF0LT5vYmplY3QsIHN1cmZhY2UsIE5VTEwsIGZsYWdzKTsKPiArICAgIGlm IChmbGFncyAmIGNvZGVjLT5DT05GSUdVUkVfRkxBR19FTkNPREUpIHsKPiArICAgICAgICBpZiAo c3VyZmFjZSAmJiAhY29kZWMtPmpmaWVsZHMuc2V0X2lucHV0X3N1cmZhY2VfaWQpIHsKPiArICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiU3lzdGVtIGRvZXNuJ3Qgc3VwcG9y dCBzZXRJbnB1dFN1cmZhY2VcbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2Qo ZW52LCBjb2RlYy0+b2JqZWN0LCBjb2RlYy0+amZpZWxkcy5jb25maWd1cmVfaWQsIGZvcm1hdC0+ b2JqZWN0LCBOVUxMLCBOVUxMLCBmbGFncyk7Cj4gKyAgICAgICAgaWYgKGZmX2puaV9leGNlcHRp b25fY2hlY2soZW52LCAxLCBjb2RlYykgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWFRFUk5BTDsKPiArCj4gKyAgICAgICAgaWYgKCFzdXJmYWNlKQo+ICsgICAgICAgICAgICBy ZXR1cm4gMDsKPiArCj4gKyAgICAgICAgKCplbnYpLT5DYWxsVm9pZE1ldGhvZChlbnYsIGNvZGVj LT5vYmplY3QsIGNvZGVjLT5qZmllbGRzLnNldF9pbnB1dF9zdXJmYWNlX2lkLCBzdXJmYWNlKTsK PiArICAgICAgICBpZiAoZmZfam5pX2V4Y2VwdGlvbl9jaGVjayhlbnYsIDEsIGNvZGVjKSA8IDAp Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgICAgIHJldHVy biAwOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICAoKmVudiktPkNhbGxWb2lkTWV0aG9kKGVu diwgY29kZWMtPm9iamVjdCwgY29kZWMtPmpmaWVsZHMuY29uZmlndXJlX2lkLCBmb3JtYXQtPm9i amVjdCwgc3VyZmFjZSwgTlVMTCwgZmxhZ3MpOwo+ICsgICAgfQo+ICAgICAgaWYgKGZmX2puaV9l eGNlcHRpb25fY2hlY2soZW52LCAxLCBjb2RlYykgPCAwKSB7Cj4gICAgICAgICAgcmV0ID0gQVZF UlJPUl9FWFRFUk5BTDsKPiAgICAgICAgICBnb3RvIGZhaWw7Cj4gQEAgLTE3NDMsNiArMTc2OCwy MiBAQCBmYWlsOgo+ICAgICAgcmV0dXJuIHJldDsKPiAgfQo+IAo+ICtzdGF0aWMgaW50IG1lZGlh Y29kZWNfam5pX3NpZ25hbEVuZE9mSW5wdXRTdHJlYW0oRkZBTWVkaWFDb2RlYyAqY3R4KQo+ICt7 Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIEpOSUVudiAqZW52ID0gTlVMTDsKPiArICAgIEZG QU1lZGlhQ29kZWNKbmkgKmNvZGVjID0gKEZGQU1lZGlhQ29kZWNKbmkgKiljdHg7Cj4gKwo+ICsg ICAgSk5JX0dFVF9FTlZfT1JfUkVUVVJOKGVudiwgY29kZWMsIEFWRVJST1JfRVhURVJOQUwpOwo+ ICsKPiArICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCBjb2RlYy0+b2JqZWN0LCBjb2Rl Yy0+amZpZWxkcy5zaWduYWxfZW5kX29mX2lucHV0X3N0cmVhbV9pZCk7Cj4gKyAgICBpZiAoZmZf am5pX2V4Y2VwdGlvbl9jaGVjayhlbnYsIDEsIGNvZGVjKSA8IDApIHsKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiAgc3RhdGljIGNvbnN0IEZGQU1lZGlhRm9ybWF0IG1lZGlhX2Zvcm1hdF9qbmkgPSB7Cj4g ICAgICAuY2xhc3MgPSAmYW1lZGlhZm9ybWF0X2NsYXNzLAo+IAo+IEBAIC0xODAxLDYgKzE4NDIs NyBAQCBzdGF0aWMgY29uc3QgRkZBTWVkaWFDb2RlYyBtZWRpYV9jb2RlY19qbmkgPSB7Cj4gCj4g ICAgICAuZ2V0Q29uZmlndXJlRmxhZ0VuY29kZSA9IG1lZGlhY29kZWNfam5pX2dldENvbmZpZ3Vy ZUZsYWdFbmNvZGUsCj4gICAgICAuY2xlYW5PdXRwdXRCdWZmZXJzID0gbWVkaWFjb2RlY19qbmlf Y2xlYW5PdXRwdXRCdWZmZXJzLAo+ICsgICAgLnNpZ25hbEVuZE9mSW5wdXRTdHJlYW0gPSBtZWRp YWNvZGVjX2puaV9zaWduYWxFbmRPZklucHV0U3RyZWFtLAo+ICB9Owo+IAo+ICB0eXBlZGVmIHN0 cnVjdCBGRkFNZWRpYUZvcm1hdE5kayB7Cj4gQEAgLTE4NjYsNiArMTkwOCwxMCBAQCB0eXBlZGVm IHN0cnVjdCBGRkFNZWRpYUNvZGVjTmRrIHsKPiAgICAgIC8vIEF2YWlsYWJsZSBzaW5jZSBBUEkg bGV2ZWwgMjguCj4gICAgICBtZWRpYV9zdGF0dXNfdCAoKmdldE5hbWUpKEFNZWRpYUNvZGVjKiwg Y2hhcioqIG91dF9uYW1lKTsKPiAgICAgIHZvaWQgKCpyZWxlYXNlTmFtZSkoQU1lZGlhQ29kZWMq LCBjaGFyKiBuYW1lKTsKPiArCj4gKyAgICAvLyBBdmFpbGFibGUgc2luY2UgQVBJIGxldmVsIDI2 Lgo+ICsgICAgbWVkaWFfc3RhdHVzX3QgKCpzZXRJbnB1dFN1cmZhY2UpKEFNZWRpYUNvZGVjKiwg QU5hdGl2ZVdpbmRvdyAqKTsKPiArICAgIG1lZGlhX3N0YXR1c190ICgqc2lnbmFsRW5kT2ZJbnB1 dFN0cmVhbSkoQU1lZGlhQ29kZWMgKik7Cj4gIH0gRkZBTWVkaWFDb2RlY05kazsKPiAKPiAgc3Rh dGljIGNvbnN0IEZGQU1lZGlhRm9ybWF0IG1lZGlhX2Zvcm1hdF9uZGs7Cj4gQEAgLTIwOTgsNiAr MjE0NCw5IEBAIHN0YXRpYyBpbmxpbmUgRkZBTWVkaWFDb2RlYyAqbmRrX2NvZGVjX2NyZWF0ZShp bnQgbWV0aG9kLCBjb25zdCBjaGFyICphcmcpIHsKPiAgICAgIEdFVF9TWU1CT0woZ2V0TmFtZSwg MCkKPiAgICAgIEdFVF9TWU1CT0wocmVsZWFzZU5hbWUsIDApCj4gCj4gKyAgICBHRVRfU1lNQk9M KHNldElucHV0U3VyZmFjZSwgMCkKPiArICAgIEdFVF9TWU1CT0woc2lnbmFsRW5kT2ZJbnB1dFN0 cmVhbSwgMCkKPiArCj4gICN1bmRlZiBHRVRfU1lNQk9MCj4gCj4gICAgICBzd2l0Y2ggKG1ldGhv ZCkgewo+IEBAIC0yMTg0LDEwICsyMjMzLDMyIEBAIHN0YXRpYyBpbnQgbWVkaWFjb2RlY19uZGtf Y29uZmlndXJlKEZGQU1lZGlhQ29kZWMqIGN0eCwKPiAgICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOwo+ICAgICAgfQo+IAo+IC0gICAgc3RhdHVzID0gY29kZWMtPmNvbmZpZ3VyZShjb2Rl Yy0+aW1wbCwgZm9ybWF0LT5pbXBsLCBuYXRpdmVfd2luZG93LCBOVUxMLCBmbGFncyk7Cj4gLSAg ICBpZiAoc3RhdHVzICE9IEFNRURJQV9PSykgewo+IC0gICAgICAgIGF2X2xvZyhjb2RlYywgQVZf TE9HX0VSUk9SLCAiY29uZmlndXJlIGZhaWxlZCwgJWRcbiIsIHN0YXR1cyk7Cj4gLSAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICBpZiAoZmxhZ3MgJiBBTUVESUFDT0RFQ19D T05GSUdVUkVfRkxBR19FTkNPREUpIHsKPiArICAgICAgICBpZiAobmF0aXZlX3dpbmRvdyAmJiAh Y29kZWMtPnNldElucHV0U3VyZmFjZSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJTeXN0ZW0gZG9lc24ndCBzdXBwb3J0IHNldElucHV0U3VyZmFjZVxuIik7Cj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgICAgIH0KPiArCj4g KyAgICAgICAgc3RhdHVzID0gY29kZWMtPmNvbmZpZ3VyZShjb2RlYy0+aW1wbCwgZm9ybWF0LT5p bXBsLCBOVUxMLCBOVUxMLCBmbGFncyk7Cj4gKyAgICAgICAgaWYgKHN0YXR1cyAhPSBBTUVESUFf T0spIHsKPiArICAgICAgICAgICAgYXZfbG9nKGNvZGVjLCBBVl9MT0dfRVJST1IsICJFbmNvZGVy IGNvbmZpZ3VyZSBmYWlsZWQsICVkXG4iLCBzdGF0dXMpOwo+ICsgICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICghbmF0aXZl X3dpbmRvdykKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICAgIHN0YXR1cyA9 IGNvZGVjLT5zZXRJbnB1dFN1cmZhY2UoY29kZWMtPmltcGwsIG5hdGl2ZV93aW5kb3cpOwo+ICsg ICAgICAgIGlmIChzdGF0dXMgIT0gQU1FRElBX09LKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhj b2RlYywgQVZfTE9HX0VSUk9SLCAiRW5jb2RlciBzZXQgaW5wdXQgc3VyZmFjZSBmYWlsZWQsICVk XG4iLCBzdGF0dXMpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiAr ICAgICAgICB9Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHN0YXR1cyA9IGNvZGVjLT5jb25m aWd1cmUoY29kZWMtPmltcGwsIGZvcm1hdC0+aW1wbCwgbmF0aXZlX3dpbmRvdywgTlVMTCwgZmxh Z3MpOwo+ICsgICAgICAgIGlmIChzdGF0dXMgIT0gQU1FRElBX09LKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhjb2RlYywgQVZfTE9HX0VSUk9SLCAiRGVjb2RlciBjb25maWd1cmUgZmFpbGVkLCAl ZFxuIiwgc3RhdHVzKTsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4g KyAgICAgICAgfQo+ICAgICAgfQo+IAo+ICAgICAgcmV0dXJuIDA7Cj4gQEAgLTIzMzAsNiArMjQw MSwyNiBAQCBzdGF0aWMgaW50IG1lZGlhY29kZWNfbmRrX2NsZWFuT3V0cHV0QnVmZmVycyhGRkFN ZWRpYUNvZGVjICpjdHgpCj4gICAgICByZXR1cm4gMDsKPiAgfQo+IAo+ICtzdGF0aWMgaW50IG1l ZGlhY29kZWNfbmRrX3NpZ25hbEVuZE9mSW5wdXRTdHJlYW0oRkZBTWVkaWFDb2RlYyAqY3R4KQo+ ICt7Cj4gKyAgICBGRkFNZWRpYUNvZGVjTmRrICpjb2RlYyA9IChGRkFNZWRpYUNvZGVjTmRrICop Y3R4Owo+ICsgICAgbWVkaWFfc3RhdHVzX3Qgc3RhdHVzOwo+ICsKPiArICAgIGlmICghY29kZWMt PnNpZ25hbEVuZE9mSW5wdXRTdHJlYW0pIHsKPiArICAgICAgICBhdl9sb2coY29kZWMsIEFWX0xP R19FUlJPUiwgInNpZ25hbEVuZE9mSW5wdXRTdHJlYW0gdW5hdmFpbGFibGVcbiIpOwo+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIHN0YXR1cyA9 IGNvZGVjLT5zaWduYWxFbmRPZklucHV0U3RyZWFtKGNvZGVjLT5pbXBsKTsKPiArICAgIGlmIChz dGF0dXMgIT0gQU1FRElBX09LKSB7Cj4gKyAgICAgICAgYXZfbG9nKGNvZGVjLCBBVl9MT0dfRVJS T1IsICJzaWduYWxFbmRPZklucHV0U3RyZWFtIGZhaWxlZCwgJWRcbiIsIHN0YXR1cyk7Cj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9Cj4gKyAgICBhdl9sb2coY29k ZWMsIEFWX0xPR19ERUJVRywgInNpZ25hbEVuZE9mSW5wdXRTdHJlYW0gc3VjY2Vzc1xuIik7Cj4g Kwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBjb25zdCBGRkFNZWRpYUZvcm1h dCBtZWRpYV9mb3JtYXRfbmRrID0gewo+ICAgICAgLmNsYXNzID0gJmFtZWRpYWZvcm1hdF9uZGtf Y2xhc3MsCj4gCj4gQEAgLTIzODgsNiArMjQ3OSw3IEBAIHN0YXRpYyBjb25zdCBGRkFNZWRpYUNv ZGVjIG1lZGlhX2NvZGVjX25kayA9IHsKPiAKPiAgICAgIC5nZXRDb25maWd1cmVGbGFnRW5jb2Rl ID0gbWVkaWFjb2RlY19uZGtfZ2V0Q29uZmlndXJlRmxhZ0VuY29kZSwKPiAgICAgIC5jbGVhbk91 dHB1dEJ1ZmZlcnMgPSBtZWRpYWNvZGVjX25ka19jbGVhbk91dHB1dEJ1ZmZlcnMsCj4gKyAgICAu c2lnbmFsRW5kT2ZJbnB1dFN0cmVhbSA9IG1lZGlhY29kZWNfbmRrX3NpZ25hbEVuZE9mSW5wdXRT dHJlYW0sCj4gIH07Cj4gCj4gIEZGQU1lZGlhRm9ybWF0ICpmZl9BTWVkaWFGb3JtYXRfbmV3KGlu dCBuZGspCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbWVkaWFjb2RlY193cmFwcGVyLmggYi9s aWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5oCj4gaW5kZXggN2NmM2Y0YWVjZC4uZjE1YWQ2 NmQ4MyAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL21lZGlhY29kZWNfd3JhcHBlci5oCj4gKysr IGIvbGliYXZjb2RlYy9tZWRpYWNvZGVjX3dyYXBwZXIuaAo+IEBAIC0xOTIsNiArMTkyLDkgQEAg c3RydWN0IEZGQU1lZGlhQ29kZWMgewo+ICAgICAgaW50ICgqZ2V0Q29uZmlndXJlRmxhZ0VuY29k ZSkoRkZBTWVkaWFDb2RlYyAqY29kZWMpOwo+IAo+ICAgICAgaW50ICgqY2xlYW5PdXRwdXRCdWZm ZXJzKShGRkFNZWRpYUNvZGVjICpjb2RlYyk7Cj4gKwo+ICsgICAgLy8gRm9yIGVuY29kZXIgd2l0 aCBGRkFOYXRpdmVXaW5kb3cgYXMgaW5wdXQuCj4gKyAgICBpbnQgKCpzaWduYWxFbmRPZklucHV0 U3RyZWFtKShGRkFNZWRpYUNvZGVjICopOwo+ICB9Owo+IAo+ICBzdGF0aWMgaW5saW5lIGNoYXIg KmZmX0FNZWRpYUNvZGVjX2dldE5hbWUoRkZBTWVkaWFDb2RlYyAqY29kZWMpCj4gQEAgLTMxMSw2 ICszMTQsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZmZfQU1lZGlhQ29kZWNfY2xlYW5PdXRwdXRC dWZmZXJzKEZGQU1lZGlhQ29kZWMgKmNvZGVjKQo+ICAgICAgcmV0dXJuIGNvZGVjLT5jbGVhbk91 dHB1dEJ1ZmZlcnMoY29kZWMpOwo+ICB9Cj4gCj4gK3N0YXRpYyBpbmxpbmUgaW50IGZmX0FNZWRp YUNvZGVjX3NpZ25hbEVuZE9mSW5wdXRTdHJlYW0oRkZBTWVkaWFDb2RlYyAqY29kZWMpCj4gK3sK PiArICAgIHJldHVybiBjb2RlYy0+c2lnbmFsRW5kT2ZJbnB1dFN0cmVhbShjb2RlYyk7Cj4gK30K PiArCj4gIGludCBmZl9CdWlsZF9TREtfSU5UKEFWQ29kZWNDb250ZXh0ICphdmN0eCk7Cj4gCj4g ICNlbmRpZiAvKiBBVkNPREVDX01FRElBQ09ERUNfV1JBUFBFUl9IICovCj4gZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvbWVkaWFjb2RlY2VuYy5jIGIvbGliYXZjb2RlYy9tZWRpYWNvZGVjZW5jLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmM4MTA1MGVjODAKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy9tZWRpYWNvZGVjZW5jLmMKPiBAQCAtMCww ICsxLDQ5NSBAQAo+ICsvKgo+ICsgKiBBbmRyb2lkIE1lZGlhQ29kZWMgZW5jb2RlcnMKPiArICoK PiArICogQ29weXJpZ2h0IChjKSAyMDIyIFpoYW8gWmhpbGkgPHpoaWxpemhhb0B0ZW5jZW50LmNv bT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBG Rm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4g KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiY29uZmlnX2NvbXBvbmVudHMuaCIK PiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKPiArI2luY2x1ZGUgImxpYmF2 dXRpbC9od2NvbnRleHRfbWVkaWFjb2RlYy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0 aWxzLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gKwo+ICsjaW5jbHVkZSAiYXZj b2RlYy5oIgo+ICsjaW5jbHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImVuY29k ZS5oIgo+ICsjaW5jbHVkZSAiaHdjb25maWcuaCIKPiArI2luY2x1ZGUgImpuaS5oIgo+ICsjaW5j bHVkZSAibWVkaWFjb2RlYy5oIgo+ICsjaW5jbHVkZSAibWVkaWFjb2RlY193cmFwcGVyLmgiCj4g KyNpbmNsdWRlICJtZWRpYWNvZGVjZGVjX2NvbW1vbi5oIgo+ICsKPiArI2RlZmluZSBJTlBVVF9E RVFVRVVFX1RJTUVPVVRfVVMgODAwMAo+ICsjZGVmaW5lIE9VVFBVVF9ERVFVRVVFX1RJTUVPVVRf VVMgODAwMAo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgTWVkaWFDb2RlY0VuY0NvbnRleHQgewo+ICsg ICAgQVZDbGFzcyAqYXZjbGFzczsKPiArICAgIEZGQU1lZGlhQ29kZWMgKmNvZGVjOwo+ICsgICAg aW50IHVzZV9uZGtfY29kZWM7Cj4gKyAgICBGRkFOYXRpdmVXaW5kb3cgKndpbmRvdzsKPiArCj4g KyAgICBpbnQgZnBzOwo+ICsgICAgaW50IHdpZHRoOwo+ICsgICAgaW50IGhlaWdodDsKPiArCj4g KyAgICB1aW50OF90ICpleHRyYWRhdGE7Cj4gKyAgICBpbnQgZXh0cmFkYXRhX3NpemU7Cj4gKwo+ ICsgICAgLy8gU2luY2UgTWVkaWFDb2RlYyBkb2Vzbid0IG91dHB1dCBEVFMsIHVzZSBhIHRpbWVz dGFtcCBxdWV1ZSB0byBzYXZlIHB0cwo+ICsgICAgLy8gb2YgQVZGcmFtZSBhbmQgZ2VuZXJhdGUg RFRTIGZvciBBVlBhY2tldC4KPiArICAgIC8vCj4gKyAgICAvLyBUaGlzIGRvZXNuJ3Qgd29yayB3 aGVuIHVzZSBTdXJmYWNlIGFzIGlucHV0LCBpbiB0aGF0IGNhc2UgZnJhbWVzIGNhbiBiZQo+ICsg ICAgLy8gc2VudCB0byBlbmNvZGVyIHdpdGhvdXQgb3VyIG5vdGljZS4gT25lIGV4Y2VwdGlvbiBp cyBmcmFtZXMgY29tZSBmcm9tCj4gKyAgICAvLyBvdXIgTWVkaWFDb2RlYyBkZWNvZGVyIHdyYXBw ZXIsIHNpbmNlIHdlIGNhbiBjb250cm9sIGl0J3MgcmVuZGVyIGJ5Cj4gKyAgICAvLyBhdl9tZWRp YWNvZGVjX3JlbGVhc2VfYnVmZmVyLgo+ICsgICAgaW50NjRfdCB0aW1lc3RhbXBzWzMyXTsKPiAr ICAgIGludCB0c19oZWFkOwo+ICsgICAgaW50IHRzX3RhaWw7Cj4gKwo+ICsgICAgaW50IGVvZl9z ZW50Owo+ICsKPiArICAgIEFWRnJhbWUgKmZyYW1lOwo+ICt9IE1lZGlhQ29kZWNFbmNDb250ZXh0 Owo+ICsKPiArZW51bSB7Cj4gKyAgICBDT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9IDB4MTMsCj4gKyAgICBDT0xPUl9Gb3JtYXRZVVY0MjBTZW1p UGxhbmFyICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUsCj4gKyAgICBDT0xPUl9Gb3Jt YXRTdXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4N0YwMDA3ODks Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiArICAgIGludCBjb2xvcl9mb3Jt YXQ7Cj4gKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdDsKPiArfSBjb2xvcl9mb3JtYXRz W10gPSB7Cj4gKyAgICB7IENPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwgICAgICAgICBBVl9QSVhf Rk1UX1lVVjQyMFAgfSwKPiArICAgIHsgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwgICAg IEFWX1BJWF9GTVRfTlYxMiAgICB9LAo+ICsgICAgeyBDT0xPUl9Gb3JtYXRTdXJmYWNlLCAgICAg ICAgICAgICAgQVZfUElYX0ZNVF9NRURJQUNPREVDIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29u c3QgZW51bSBBVlBpeGVsRm9ybWF0IGF2Y19waXhfZm10c1tdID0gewo+ICsgICAgQVZfUElYX0ZN VF9NRURJQUNPREVDLAo+ICsgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLAo+ICsgICAgQVZfUElYX0ZN VF9OVjEyLAo+ICsgICAgQVZfUElYX0ZNVF9OT05FCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBt ZWRpYWNvZGVjX291dHB1dF9mb3JtYXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7Cj4gKyAg ICBNZWRpYUNvZGVjRW5jQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBjaGFy ICpuYW1lID0gZmZfQU1lZGlhQ29kZWNfZ2V0TmFtZShzLT5jb2RlYyk7Cj4gKyAgICBGRkFNZWRp YUZvcm1hdCAqb3V0X2Zvcm1hdCA9IGZmX0FNZWRpYUNvZGVjX2dldE91dHB1dEZvcm1hdChzLT5j b2RlYyk7Cj4gKyAgICBjaGFyICpzdHIgPSBmZl9BTWVkaWFGb3JtYXRfdG9TdHJpbmcob3V0X2Zv cm1hdCk7Cj4gKwo+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJNZWRpYUNvZGVj IGVuY29kZXIgJXMgb3V0cHV0IGZvcm1hdCAlc1xuIiwKPiArICAgICAgICAgICBuYW1lID8gbmFt ZSA6ICJ1bmtub3duIiwgc3RyKTsKPiArICAgIGF2X2ZyZWUobmFtZSk7Cj4gKyAgICBhdl9mcmVl KHN0cik7Cj4gKyAgICBmZl9BTWVkaWFGb3JtYXRfZGVsZXRlKG91dF9mb3JtYXQpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgbWVkaWFjb2RlY19pbml0KEFWQ29kZWNDb250ZXh0ICph dmN0eCkKPiArewo+ICsgICAgY29uc3QgY2hhciAqY29kZWNfbWltZSA9IE5VTEw7Cj4gKyAgICBN ZWRpYUNvZGVjRW5jQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBGRkFNZWRp YUZvcm1hdCAqZm9ybWF0ID0gTlVMTDsKPiArICAgIGludCByZXQ7Cj4gKyAgICBpbnQgZ29wOwo+ ICsKPiArICAgIGlmIChzLT51c2VfbmRrX2NvZGVjIDwgMCkKPiArICAgICAgICBzLT51c2VfbmRr X2NvZGVjID0gIWF2X2puaV9nZXRfamF2YV92bShhdmN0eCk7Cj4gKwo+ICsgICAgc3dpdGNoIChh dmN0eC0+Y29kZWNfaWQpIHsKPiArICAgIGNhc2UgQVZfQ09ERUNfSURfSDI2NDoKPiArICAgICAg ICBjb2RlY19taW1lID0gInZpZGVvL2F2YyI7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNl IEFWX0NPREVDX0lEX0hFVkM6Cj4gKyAgICAgICAgY29kZWNfbWltZSA9ICJ2aWRlby9oZXZjIjsK PiArICAgICAgICBicmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgYXZfYXNzZXJ0MCgw KTsKPiArICAgIH0KPiArCj4gKyAgICBzLT5jb2RlYyA9IGZmX0FNZWRpYUNvZGVjX2NyZWF0ZUVu Y29kZXJCeVR5cGUoY29kZWNfbWltZSwgcy0+dXNlX25ka19jb2RlYyk7Cj4gKyAgICBpZiAoIXMt PmNvZGVjKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQg dG8gY3JlYXRlIGVuY29kZXIgZm9yIHR5cGUgJXNcbiIsCj4gKyAgICAgICAgICAgICAgIGNvZGVj X21pbWUpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsK PiArICAgIGZvcm1hdCA9IGZmX0FNZWRpYUZvcm1hdF9uZXcocy0+dXNlX25ka19jb2RlYyk7Cj4g KyAgICBpZiAoIWZvcm1hdCkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIGNyZWF0ZSBtZWRpYSBmb3JtYXRcbiIpOwo+ICsgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRT dHJpbmcoZm9ybWF0LCAibWltZSIsIGNvZGVjX21pbWUpOwo+ICsgICAgcy0+d2lkdGggPSBGRkFM SUdOKGF2Y3R4LT53aWR0aCwgMTYpOwo+ICsgICAgcy0+aGVpZ2h0ID0gYXZjdHgtPmhlaWdodDsK PiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQzMihmb3JtYXQsICJ3aWR0aCIsIHMtPndpZHRo KTsKPiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQzMihmb3JtYXQsICJoZWlnaHQiLCBzLT5o ZWlnaHQpOwo+IAo+IElzIGl0IHByZWZlcmFibGUgdG8gdXNlIGNvbnN0YW50cyBsaWtlIEFNRURJ QUZPUk1BVF9LRVlfSEVJR0hUIGhlcmU/Cj4gCj4gSSBkb24ndCBoYXZlIGEgcHJlZmVyZW5jZSBl aXRoZXIgd2F5LgoKVGhlc2UgS0VZcyBhcmVu4oCZdCBzdHJpbmcgbGl0ZXJhbCwgdGhleSBhcmUg Z2xvYmFsIHZhcmlhYmxlcy4KCmV4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0hF SUdIVCBfX0lOVFJPRFVDRURfSU4oMjEpOwoKU29tZSBiYXNpYyBvbmVzIGFyZSBpbnRyb2R1Y2Vk IHZlcnkgbGF0ZSwgZS5nLiwKCmV4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX0NT RCBfX0lOVFJPRFVDRURfSU4oMjgpOwpleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tF WV9DU0RfMCBfX0lOVFJPRFVDRURfSU4oMjgpOwpleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9S TUFUX0tFWV9DU0RfMSBfX0lOVFJPRFVDRURfSU4oMjgpOwpleHRlcm4gY29uc3QgY2hhciogQU1F RElBRk9STUFUX0tFWV9DU0RfMiBfX0lOVFJPRFVDRURfSU4oMjgpOwpleHRlcm4gY29uc3QgY2hh ciogQU1FRElBRk9STUFUX0tFWV9ESVNQTEFZX0NST1AgX19JTlRST0RVQ0VEX0lOKDI4KTsKClNv IHdlIGNhbuKAmXQgdXNlIHRoZXNlIEFNRURJQUZPUk1BVF9LRVlfIGRpcmVjdGx5LiBkbHN5bSgp IHRoZXNlIGdsb2JhbAp2YXJpYWJsZXMgYW5kIHdpdGggYSBmYWxsYmFjayB2YWx1ZSBpcyBwb3Nz aWJsZSwganVzdCBvdmVyLWVuZ2luZWVyaW5nLgoKR29vZ2xl4oCZcyBBUEkgZGVzaWduIGZvcmNl ZCB1cyB0byB1c2Ugc3RyaW5nIGxpdGVyYWwgZGlyZWN0bHkuCgo+IAo+IEl0IG1heSBiZSB3b3J0 aCBhbHNvIHBhc3NpbmcgaW4gdGhlIHNhbWUgdmFsdWVzIHRvIEFNRURJQUZPUk1BVF9LRVlfTUFY X1dJRFRIIGFuZCBBTUVESUFGT1JNQVRfS0VZX01BWF9IRUlHSFQKClRoZSBkb2N1bWVudGF0aW9u IGhpbnRzIHRoZXkgYXJlIGZvciBkZWNvZGVyIG9ubHk6Cgo+IEEga2V5IGRlc2NyaWJpbmcgdGhl IG1heGltdW0gZXhwZWN0ZWQgd2lkdGggb2YgdGhlIGNvbnRlbnQgaW4gYSB2aWRlbyBkZWNvZGVy IGZvcm1hdCwgaW4gY2FzZSB0aGVyZSBhcmUgcmVzb2x1dGlvbiBjaGFuZ2VzIGluIHRoZSB2aWRl byBjb250ZW50LgoKaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJv aWQvbWVkaWEvTWVkaWFGb3JtYXQKCj4gCj4gQW5kIEkgdGhpbmsgdGhlIHVuYWxpZ25lZCB3aWR0 aCBzaG91bGQgYmUgc2V0IGludG8gQU1FRElBRk9STUFUX0tFWV9TVFJJREUKClRlY2huaWNhbGx5 LCBLRVlfV0lEVEggc2hvdWxkIGJlIHVuYWxpZ25lZCB3aWR0aCwgYW5kIEtFWV9TVFJJREUgc2hv dWxkCmJlIGFsaWduZWQgd2lkdGguIEhvd2V2ZXIsCgoxLiBJdOKAmXMgd2VsbCBrbm93biB0aGF0 IGEgbG90IG9mIGRldmljZXMgY2Fu4oCZdCBoYW5kbGUgd2lkdGggZG9lc27igJl0IGFsaWduZWQK dG8gMTYsIHRoZXkgd2lsbCBjcmFzaCwgcmVwb3J0IGVycm9yIG9yIHByb2R1Y2UgYnJva2VuIGZp bGVzLgoKMi4gQ1RTIHRlc3RzIG9ubHkgdmVyaWZ5IHRoYXQgMTYgYWxpZ25lZCByZXNvbHV0aW9u cyBhcmUgc3VwcG9ydGVkLgoKMy4gVGhlcmUgYXJlIGFsaWdubWVudCBpbmZvIGluIE9NWCBhbmQg ZXhwb3J0ZWQgdmlhIE1lZGlhQ29kZWNJbmZvLCBsaWtlCgogICAgICAgIDxNZWRpYUNvZGVjIG5h bWU9ImMyLnF0aS5hdmMuZW5jb2RlciIgdHlwZT0idmlkZW8vYXZjIj4KICAgICAgICAgICAgPEFs aWFzIG5hbWU9Ik9NWC5xY29tLnZpZGVvLmVuY29kZXIuYXZjIiAvPgogICAgICAgICAgICA8TGlt aXQgbmFtZT0ic2l6ZSIgbWluPSI5Nng5NiIgbWF4PSI0MDk2eDIzMDQiIC8+CiAgICAgICAgICAg IDxMaW1pdCBuYW1lPSJhbGlnbm1lbnQiIHZhbHVlPSIyeDIiIC8+CiAgICAgICAgICAgIDxMaW1p dCBuYW1lPSJibG9jay1zaXplIiB2YWx1ZT0iMTZ4MTYiIC8+CgpJdCBjYW4gYmUgbWlzc2luZyBv biBvbGQgZGV2aWNlcywgb3Igd29yc2UsIHRoZSBpbmZvIGRvZXNu4oCZdCByZWZsZWN0IHRoZQpy ZWFsIHJlcXVpcmVtZW50IChNYXliZSBpdCB3YXMganVzdCBhIGNvcHktcGFzdGUgZnJvbSBzb21l IHBsYWNlcykuCgpJIGhhdmUgYW4gaWRlYSB0byBmaXggdGhlIGlzc3VlOiBhbHdheXMgZW5jb2Rp bmcgaW4gYWxpZ25lZCByZXNvbHV0aW9uLAp0aGVuIGZpeCB0aGUgY3JvcCBzZXR0aW5nIGJ5IGFw cGx5IEJTRiAoZS5nLiwgaDI2NF9tZXRhZGF0YSkgb24gdGhlCmJpdHN0cmVhbS4KCj4gCj4gRmlu YWxseSwgYXZjdHgtPnNhbXBsZV9hc3BlY3RfcmF0aW8gc2hvdWxkIGJlIHByb3BhZ2F0ZWQgaW50 byBhc3BlY3Qtd2lkdGggYW5kIGFzcGVjdC1oZWlnaHQuIFNvbWV0aGluZyBsaWtlIHRoaXM6Cj4g Cj4gICAgIEFWUmF0aW9uYWwgc2FyID0gYXZjdHgtPnNhbXBsZV9hc3BlY3RfcmF0aW87Cj4gICAg IGlmICghc2FyLm51bSB8fCAhc2FyLmRlbikKPiAgICAgICAgIHNhci5udW0gPSBzYXIuZGVuID0g MTsKPiAgICAgYXZfcmVkdWNlKCZzYXIubnVtLCAmc2FyLmRlbiwgc2FyLm51bSwgc2FyLmRlbiwg NDA5Nik7Cj4gICAgIEFNZWRpYUZvcm1hdF9zZXRJbnQzMihmb3JtYXQsICJhc3BlY3Qtd2lkdGgi LCBzYXIubnVtKTsKPiAgICAgQU1lZGlhRm9ybWF0X3NldEludDMyKGZvcm1hdCwgImFzcGVjdC1o ZWlnaHQiLCBzYXIuZGVuKTsKPiAKCllvdSBtZWFuIHNhci13aWR0aC9zYXItaGVpZ2h0PyAKCkVY UE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1NBUl9IRUlHSFQgPSAic2FyLWhlaWdo dCI7CkVYUE9SVCBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZX1NBUl9XSURUSCA9ICJzYXIt d2lkdGgiOwoKVGhleSBhcmUgYXZhaWxhYmxlIGluIE5ESyBzaW5jZSBBUEkgbGV2ZWwgMjkgKEFu ZHJvaWQgMTApCgpleHRlcm4gY29uc3QgY2hhciogQU1FRElBRk9STUFUX0tFWV9TQVJfSEVJR0hU IF9fSU5UUk9EVUNFRF9JTigyOSk7CmV4dGVybiBjb25zdCBjaGFyKiBBTUVESUFGT1JNQVRfS0VZ X1NBUl9XSURUSCBfX0lOVFJPRFVDRURfSU4oMjkpOwoKQW5kIHRoZXkgd2VyZSBhZGRlZCB0byBK YXZhIE1lZGlhRm9ybWF0IHNpbmNlIEFQSSBsZXZlbCAzMC4KCmh0dHBzOi8vZGV2ZWxvcGVyLmFu ZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0I0tFWV9QSVhFTF9B U1BFQ1RfUkFUSU9fV0lEVEgKCkl04oCZcyB1bmNvbW1vbiBmb3IgSmF2YSBBUEkgZ290IGEgZmVh dHVyZSBsYXRlIHRoYW4gTkRLLiBJIHdpbGwga2VlcAphIG5vdGUgYW5kIGRvIG1vcmUgdGVzdCBi ZWZvcmUgc2V0dGluZyB0aGVtLgoKPiAKPiArCj4gKyAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0g QVZfUElYX0ZNVF9NRURJQUNPREVDKSB7Cj4gKyAgICAgICAgQVZNZWRpYUNvZGVjQ29udGV4dCAq dXNlcl9jdHggPSBhdmN0eC0+aHdhY2NlbF9jb250ZXh0Owo+ICsgICAgICAgIGlmIChhdmN0eC0+ aHdfZGV2aWNlX2N0eCkgewo+ICsgICAgICAgICAgICBBVkhXRGV2aWNlQ29udGV4dCAqZGV2aWNl X2N0eCA9IChBVkhXRGV2aWNlQ29udGV4dCopKGF2Y3R4LT5od19kZXZpY2VfY3R4LT5kYXRhKTsK PiArICAgICAgICAgICAgQVZNZWRpYUNvZGVjRGV2aWNlQ29udGV4dCAqZGV2X2N0eDsKPiArCj4g KyAgICAgICAgICAgIGlmIChkZXZpY2VfY3R4LT50eXBlICE9IEFWX0hXREVWSUNFX1RZUEVfTUVE SUFDT0RFQyB8fCAhZGV2aWNlX2N0eC0+aHdjdHgpIHsKPiArICAgICAgICAgICAgICAgIHJldCA9 IEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICAgICAgICAgIGdvdG8gYmFpbG91dDsKPiArICAg ICAgICAgICAgfQo+ICsgICAgICAgICAgICBkZXZfY3R4ID0gZGV2aWNlX2N0eC0+aHdjdHg7Cj4g KyAgICAgICAgICAgIHMtPndpbmRvdyA9IGZmX21lZGlhY29kZWNfc3VyZmFjZV9yZWYoZGV2X2N0 eC0+c3VyZmFjZSwgZGV2X2N0eC0+bmF0aXZlX3dpbmRvdywgYXZjdHgpOwo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgICAgaWYgKCFzLT53aW5kb3cgJiYgdXNlcl9jdHggJiYgdXNlcl9jdHgtPnN1 cmZhY2UpCj4gKyAgICAgICAgICAgIHMtPndpbmRvdyA9IGZmX21lZGlhY29kZWNfc3VyZmFjZV9y ZWYodXNlcl9jdHgtPnN1cmZhY2UsIE5VTEwsIGF2Y3R4KTsKPiArCj4gKyAgICAgICAgaWYgKCFz LT53aW5kb3cpIHsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1pc3NpbmcgaHdfZGV2aWNlX2N0 eCBvciBod2FjY2VsX2NvbnRleHQgZm9yIEFWX1BJWF9GTVRfTUVESUFDT0RFQ1xuIik7Cj4gKyAg ICAgICAgICAgIGdvdG8gYmFpbG91dDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhjb2xvcl9mb3JtYXRzKTsgaSsrKSB7 Cj4gKyAgICAgICAgaWYgKGF2Y3R4LT5waXhfZm10ID09IGNvbG9yX2Zvcm1hdHNbaV0ucGl4X2Zt dCkgewo+ICsgICAgICAgICAgICBmZl9BTWVkaWFGb3JtYXRfc2V0SW50MzIoZm9ybWF0LCAiY29s b3ItZm9ybWF0IiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y X2Zvcm1hdHNbaV0uY29sb3JfZm9ybWF0KTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gCj4gZG8g d2UgbmVlZCBlcnJvci9mYWxsYmFjayBpZiBubyBtYXRjaCBpcyBmb3VuZD8KClRoZSBzdXBwb3J0 ZWQgcGl4X2ZtdHMgaXMgc3BlY2lmaWVkCgogICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2Yo TWVkaWFDb2RlY0VuY0NvbnRleHQpLCAgICAgICAgICAgICAgICAgICBcCiAgICAucC5waXhfZm10 cyAgICAgICA9IGF2Y19waXhfZm10cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKICAgIC5pbml0ICAgICAgICAgICAgID0gbWVkaWFjb2RlY19pbml0LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAoKSXQgaGFzIGJlZW4gY2hlY2tlZCBpbiBlbmNvZGVyLmMgZW5j b2RlX3ByZWluaXRfdmlkZW8oKSwgc28gY2hlY2sgaXQgYWdhaW4gaXMKb3B0aW9uYWwgYnV0IG5v dCBuZWNlc3NhcnkgaW4gbXkgb3Bpbmlvbi4KCj4gCj4gCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICsKPiArICAgIGlmIChhdmN0eC0+Yml0X3JhdGUpCj4gKyAgICAgICAgZmZfQU1lZGlhRm9ybWF0 X3NldEludDMyKGZvcm1hdCwgImJpdHJhdGUiLCBhdmN0eC0+Yml0X3JhdGUpOwo+ICsgICAgLy8g ZnJhbWUtcmF0ZSBhbmQgaS1mcmFtZS1pbnRlcnZhbCBhcmUgcmVxdWlyZWQgdG8gY29uZmlndXJl IGNvZGVjCj4gKyAgICBpZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPj0gYXZjdHgtPmZyYW1lcmF0 ZS5kZW4gJiYgYXZjdHgtPmZyYW1lcmF0ZS5kZW4gPiAwKQo+ICsgICAgICAgIHMtPmZwcyA9IGF2 Y3R4LT5mcmFtZXJhdGUubnVtIC8gYXZjdHgtPmZyYW1lcmF0ZS5kZW47Cj4gKyAgICBlbHNlCj4g KyAgICAgICAgcy0+ZnBzID0gMzA7Cj4gKyAgICBnb3AgPSByb3VuZChhdmN0eC0+Z29wX3NpemUg LyBzLT5mcHMpOwo+ICsgICAgaWYgKGdvcCA9PSAwKQo+ICsgICAgICAgIGdvcCA9IDI7Cj4gCj4g Y2FuIHdlIHJlYWQgZ29wIGZyb20gYXZjdHg/IGluIG90aGVyIGltcGxlbWVudGF0aW9ucyBpIGhh dmUgc2VlbiBnb3AgaGFyZGNvZGVkIHRvIDEKCkkgdGhpbmsgd2Ugc2hvdWxkIHJlc3BlY3QgZ29w X3NpemUgc2V0dGluZy4KCkkgd2lsbCBhZGQgc29tZSBsb2cgbWVzc2FnZSBhbmQgY2hhbmdlIGRl ZmF1bHQgZ29wIHRvIDEgaW4gcGF0Y2ggdjIuCgo+IAo+IGZvciBmcHMgdmFsdWUsIGNhbiB3ZSB1 c2UgYXZfcTJkKGF2Y3R4LT5mcmFtZXJhdGUpCgpxMmQoKSBpcyBmb3IgZG91YmxlLCBmcHMgaXMg aW50ZWdlciBoZXJlLgoKPiAKPiAKPiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQzMihmb3Jt YXQsICJmcmFtZS1yYXRlIiwgcy0+ZnBzKTsKPiArICAgIGZmX0FNZWRpYUZvcm1hdF9zZXRJbnQz Mihmb3JtYXQsICJpLWZyYW1lLWludGVydmFsIiwgZ29wKTsKPiArCj4gCj4gZm9yIEgyNjQgZW5j b2RpbmcsIHlvdSBjYW4gcGFzcyAicHJvZmlsZSIgYW5kICJsZXZlbCIuIGZvciBleGFtcGxlIHBy b2ZpbGU9MHgwOCBmb3IgSGlnaCBhbmQgbGV2ZWw9MHg0MDAwIGZvciA1LjAKPiAKPiBodHRwczov L3N0YWNrb3ZlcmZsb3cuY29tL2EvMzg5OTk0MTIvMzMyNzk4CgpJ4oCZbSBwbGFubmluZyB0byBh ZGQgcHJvZmlsZS9sZXZlbCBzdXBwb3J0IGFmdGVyIHRoZSBiYXNpYyBwYXRjaCBpcyBhcHBsaWVk LgpUaGVyZSBhcmUgc29tZSB1bnJlc29sdmVkIGlzc3VlIGhlcmU6CgoxLiBJIGhhdmUgYSBkZXZp Y2Ugd2hpY2ggZmFpbGVkIGF0IGNvbmZpZ3VyZSgpIHdoZW4gcHJvZmlsZSBoYXMgYmVlbiBzZXQs CmV2ZW4gZm9yIGJhc2VsaW5lLgoKMi4gRFRTIGlzIG1pc3NpbmcgaW4gTWVkaWFDb2RlYyBBUEku IEZvciB0aGUgZGVmYXVsdCBiYXNlbGluZSBwcm9maWxlLCB0aGVyZQppcyBubyBwcm9ibGVtLiBU cm91YmxlIGNvbWVzIHdoZW4gd2Ugc2V0IHByb2ZpbGUgdG8gbWFpbmxpbmUgb3IgaGlnaC4gSWYg ClN1cmZhY2UvQU5hdGl2ZVdpbmRvdyBpcyB1c2VkLCBhbmQgdGhlIGZyYW1lcyBjb21lIGZyb20g b3VyIE1lZGlhQ29kZWMgZGVjb2Rlcgp3cmFwcGVyLCB3ZSBjYW4gY29udHJvbCBpdOKAmXMgJ3Jl bmRlcicgKHNlbmQgdG8gZW5jb2RlcidzIHN1cmZhY2UpIHZpYQphdl9tZWRpYWNvZGVjX3JlbGVh c2VfYnVmZmVyKCkuIEEgRFRTIGdlbmVyYXRpb24gc3RyYXRlZ3kgd29ya3MgaW4gdGhpcyBjYXNl LgpIb3dldmVyLCBpZiBmcmFtZXMgY29tZXMgZnJvbSBvdGhlciBzb3VyY2VzLCBsaWtlIGEgY2Ft ZXJhLCB0aGVyZSBpcyBubyB3YXkKdG8gY29udHJvbCB0aGUgJ3JlbmRlcicgeWV0LCBzbyBEVFMg aXMgbWlzc2luZyBpbiB0aGlzIGNhc2UuCgpDb25maWd1cmUgcHJvZmlsZS9sZXZlbCBhbmQgQiBm cmFtZXMgc2hvdWxkIGNvbWUgdG9nZXRoZXIuCgo+IAo+IAo+ICsKPiArICAgIHJldCA9IGZmX0FN ZWRpYUNvZGVjX2dldENvbmZpZ3VyZUZsYWdFbmNvZGUocy0+Y29kZWMpOwo+ICsgICAgcmV0ID0g ZmZfQU1lZGlhQ29kZWNfY29uZmlndXJlKHMtPmNvZGVjLCBmb3JtYXQsIHMtPndpbmRvdywgTlVM TCwgcmV0KTsKPiArICAgIGlmIChyZXQpIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIk1lZGlhQ29kZWMgY29uZmlndXJlIGZhaWxlZCwgJXNcbiIsIGF2X2VycjJzdHIo cmV0KSk7Cj4gKyAgICAgICAgZ290byBiYWlsb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9 IGZmX0FNZWRpYUNvZGVjX3N0YXJ0KHMtPmNvZGVjKTsKPiArICAgIGlmIChyZXQpIHsKPiArICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1lZGlhQ29kZWMgZmFpbGVkIHRvIHN0 YXJ0LCAlc1xuIiwgYXZfZXJyMnN0cihyZXQpKTsKPiArICAgICAgICBnb3RvIGJhaWxvdXQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgbWVkaWFjb2RlY19vdXRwdXRfZm9ybWF0KGF2Y3R4KTsKPiArCj4g KyAgICBzLT5mcmFtZSA9IGF2X2ZyYW1lX2FsbG9jKCk7Cj4gKyAgICBpZiAoIXMtPmZyYW1lKQo+ ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK2JhaWxvdXQ6Cj4gKyAgICBp ZiAoZm9ybWF0KQo+ICsgICAgICAgIGZmX0FNZWRpYUZvcm1hdF9kZWxldGUoZm9ybWF0KTsKPiAr ICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWVkaWFjb2RlY19yZWNlaXZl KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFWUGFja2V0ICpwa3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmdv dF9wYWNrZXQpCj4gK3sKPiArICAgIE1lZGlhQ29kZWNFbmNDb250ZXh0ICpzID0gYXZjdHgtPnBy aXZfZGF0YTsKPiArICAgIEZGQU1lZGlhQ29kZWMgKmNvZGVjID0gcy0+Y29kZWM7Cj4gKyAgICBG RkFNZWRpYUNvZGVjQnVmZmVySW5mbyBvdXRfaW5mbyA9IHswfTsKPiArICAgIHVpbnQ4X3QgKm91 dF9idWY7Cj4gKyAgICBzaXplX3Qgb3V0X3NpemUgPSAwOwo+ICsgICAgaW50IHJldDsKPiArICAg IGludCBleHRyYWRhdGFfc2l6ZSA9IDA7Cj4gKyAgICBpbnQ2NF90IHRpbWVvdXRfdXMgPSBzLT5l b2Zfc2VudCA/IE9VVFBVVF9ERVFVRVVFX1RJTUVPVVRfVVMgOiAwOwo+ICsgICAgc3NpemVfdCBp bmRleCA9IGZmX0FNZWRpYUNvZGVjX2RlcXVldWVPdXRwdXRCdWZmZXIoY29kZWMsICZvdXRfaW5m bywgdGltZW91dF91cyk7Cj4gKwo+ICsgICAgaWYgKGZmX0FNZWRpYUNvZGVjX2luZm9UcnlBZ2Fp bkxhdGVyKGNvZGVjLCBpbmRleCkpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsK PiArCj4gKyAgICBpZiAoZmZfQU1lZGlhQ29kZWNfaW5mb091dHB1dEZvcm1hdENoYW5nZWQoY29k ZWMsIGluZGV4KSkgewo+ICsgICAgICAgIG1lZGlhY29kZWNfb3V0cHV0X2Zvcm1hdChhdmN0eCk7 Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKPiArICAgIH0KPiArCj4gKyAgICBp ZiAoZmZfQU1lZGlhQ29kZWNfaW5mb091dHB1dEJ1ZmZlcnNDaGFuZ2VkKGNvZGVjLCBpbmRleCkp IHsKPiArICAgICAgICBmZl9BTWVkaWFDb2RlY19jbGVhbk91dHB1dEJ1ZmZlcnMoY29kZWMpOwo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVBR0FJTik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYg KGluZGV4IDwgMCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArCj4gKyAg ICBpZiAob3V0X2luZm8uZmxhZ3MgJiBmZl9BTWVkaWFDb2RlY19nZXRCdWZmZXJGbGFnRW5kT2ZT dHJlYW0oY29kZWMpKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiArCj4gKyAgICBv dXRfYnVmID0gZmZfQU1lZGlhQ29kZWNfZ2V0T3V0cHV0QnVmZmVyKGNvZGVjLCBpbmRleCwgJm91 dF9zaXplKTsKPiArICAgIGlmICghb3V0X2J1Zikgewo+ICsgICAgICAgIHJldCA9IEFWRVJST1Jf RVhURVJOQUw7Cj4gKyAgICAgICAgZ290byBiYWlsb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIGlm IChvdXRfaW5mby5mbGFncyAmIGZmX0FNZWRpYUNvZGVjX2dldEJ1ZmZlckZsYWdDb2RlY0NvbmZp Zyhjb2RlYykpIHsKPiArICAgICAgICByZXQgPSBhdl9yZWFsbG9jcCgmcy0+ZXh0cmFkYXRhLCBv dXRfaW5mby5zaXplKTsKPiArICAgICAgICBpZiAocmV0KQo+ICsgICAgICAgICAgICBnb3RvIGJh aWxvdXQ7Cj4gKwo+ICsgICAgICAgIHMtPmV4dHJhZGF0YV9zaXplID0gb3V0X2luZm8uc2l6ZTsK PiArICAgICAgICBtZW1jcHkocy0+ZXh0cmFkYXRhLCBvdXRfYnVmICsgb3V0X2luZm8ub2Zmc2V0 LCBvdXRfaW5mby5zaXplKTsKPiArICAgICAgICBmZl9BTWVkaWFDb2RlY19yZWxlYXNlT3V0cHV0 QnVmZmVyKGNvZGVjLCBpbmRleCwgZmFsc2UpOwo+ICsgICAgICAgIC8vIHRyeSBpbW1lZGlhdGVs eQo+ICsgICAgICAgIHJldHVybiBtZWRpYWNvZGVjX3JlY2VpdmUoYXZjdHgsIHBrdCwgZ290X3Bh Y2tldCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZj dHgsIHBrdCwgb3V0X2luZm8uc2l6ZSArIHMtPmV4dHJhZGF0YV9zaXplLCAwKTsKPiArICAgIGlm IChyZXQgPCAwKQo+ICsgICAgICBnb3RvIGJhaWxvdXQ7Cj4gKwo+ICsgICAgaWYgKHMtPmV4dHJh ZGF0YV9zaXplKSB7Cj4gKyAgICAgICAgZXh0cmFkYXRhX3NpemUgPSBzLT5leHRyYWRhdGFfc2l6 ZTsKPiArICAgICAgICBzLT5leHRyYWRhdGFfc2l6ZSA9IDA7Cj4gKyAgICAgICAgbWVtY3B5KHBr dC0+ZGF0YSwgcy0+ZXh0cmFkYXRhLCBleHRyYWRhdGFfc2l6ZSk7Cj4gKyAgICB9Cj4gKyAgICBt ZW1jcHkocGt0LT5kYXRhICsgZXh0cmFkYXRhX3NpemUsIG91dF9idWYgKyBvdXRfaW5mby5vZmZz ZXQsIG91dF9pbmZvLnNpemUpOwo+ICsgICAgcGt0LT5wdHMgPSBhdl9yZXNjYWxlX3Eob3V0X2lu Zm8ucHJlc2VudGF0aW9uVGltZVVzLCBBVl9USU1FX0JBU0VfUSwgYXZjdHgtPnRpbWVfYmFzZSk7 Cj4gKyAgICBpZiAocy0+dHNfdGFpbCAhPSBzLT50c19oZWFkKSB7Cj4gKyAgICAgICAgcGt0LT5k dHMgPSBzLT50aW1lc3RhbXBzW3MtPnRzX3RhaWxdOwo+ICsgICAgICAgIHMtPnRzX3RhaWwgPSAo cy0+dHNfdGFpbCArIDEpICUgRkZfQVJSQVlfRUxFTVMocy0+dGltZXN0YW1wcyk7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaWYgKG91dF9pbmZvLmZsYWdzICYgZmZfQU1lZGlhQ29kZWNfZ2V0QnVmZmVy RmxhZ0tleUZyYW1lKGNvZGVjKSkKPiArICAgICAgICBwa3QtPmZsYWdzIHw9IEFWX1BLVF9GTEFH X0tFWTsKPiArICAgIHJldCA9IDA7Cj4gKyAgICAqZ290X3BhY2tldCA9IDE7Cj4gKwo+ICsgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVFJBQ0UsICJyZWNlaXZlIHBhY2tldCBwdHMgJSIgUFJJZDY0 ICIgZHRzICUiIFBSSWQ2NAo+ICsgICAgICAgICAgICIgZmxhZ3MgJWQgZXh0cmFkYXRhICVkXG4i LAo+ICsgICAgICAgICAgIHBrdC0+cHRzLCBwa3QtPmR0cywgcGt0LT5mbGFncywgZXh0cmFkYXRh X3NpemUpOwo+ICsKPiArYmFpbG91dDoKPiArICAgIGZmX0FNZWRpYUNvZGVjX3JlbGVhc2VPdXRw dXRCdWZmZXIoY29kZWMsIGluZGV4LCBmYWxzZSk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBjb3B5X2ZyYW1lX3RvX2J1ZmZlcihBVkNvZGVjQ29udGV4dCAqYXZj dHgsIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCB1aW50OF90ICpkc3QsIHNpemVfdCBzaXplKQo+ICt7 Cj4gKyAgICBNZWRpYUNvZGVjRW5jQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAg ICB1aW50OF90ICpkc3RfZGF0YVs0XSA9IHt9Owo+ICsgICAgaW50IGRzdF9saW5lc2l6ZVs0XSA9 IHt9Owo+ICsgICAgY29uc3QgdWludDhfdCAqc3JjX2RhdGFbNF0gPSB7Cj4gKyAgICAgICAgICAg IGZyYW1lLT5kYXRhWzBdLCBmcmFtZS0+ZGF0YVsxXSwgZnJhbWUtPmRhdGFbMl0sIGZyYW1lLT5k YXRhWzNdCj4gKyAgICB9Owo+ICsKPiArICAgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBBVl9QSVhf Rk1UX1lVVjQyMFApIHsKPiArICAgICAgICBkc3RfZGF0YVswXSA9IGRzdDsKPiArICAgICAgICBk c3RfZGF0YVsxXSA9IGRzdCArIHMtPndpZHRoICogcy0+aGVpZ2h0Owo+ICsgICAgICAgIGRzdF9k YXRhWzJdID0gZHN0X2RhdGFbMV0gKyBzLT53aWR0aCAqIHMtPmhlaWdodCAvIDQ7Cj4gKwo+ICsg ICAgICAgIGRzdF9saW5lc2l6ZVswXSA9IHMtPndpZHRoOwo+ICsgICAgICAgIGRzdF9saW5lc2l6 ZVsxXSA9IGRzdF9saW5lc2l6ZVsyXSA9IHMtPndpZHRoIC8gMjsKPiArICAgIH0gZWxzZSBpZiAo YXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9OVjEyKSB7Cj4gKyAgICAgICAgZHN0X2RhdGFb MF0gPSBkc3Q7Cj4gKyAgICAgICAgZHN0X2RhdGFbMV0gPSBkc3QgKyBzLT53aWR0aCAqIHMtPmhl aWdodDsKPiArCj4gKyAgICAgICAgZHN0X2xpbmVzaXplWzBdID0gcy0+d2lkdGg7Cj4gKyAgICAg ICAgZHN0X2xpbmVzaXplWzFdID0gcy0+d2lkdGg7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAg IGF2X2Fzc2VydDAoMCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfaW1hZ2VfY29weShkc3RfZGF0 YSwgZHN0X2xpbmVzaXplLCBzcmNfZGF0YSwgZnJhbWUtPmxpbmVzaXplLAo+ICsgICAgICAgICAg ICAgICAgICBhdmN0eC0+cGl4X2ZtdCwgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0KTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBtZWRpYWNvZGVjX3NlbmQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpmcmFtZSkgewo+ ICsgICAgTWVkaWFDb2RlY0VuY0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAg RkZBTWVkaWFDb2RlYyAqY29kZWMgPSBzLT5jb2RlYzsKPiArICAgIHNzaXplX3QgaW5kZXg7Cj4g KyAgICB1aW50OF90ICppbnB1dF9idWYgPSBOVUxMOwo+ICsgICAgc2l6ZV90IGlucHV0X3NpemUg PSAwOwo+ICsgICAgaW50NjRfdCBwdHMgPSAwOwo+ICsgICAgdWludDMyX3QgZmxhZ3MgPSAwOwo+ ICsgICAgaW50NjRfdCB0aW1lb3V0X3VzOwo+ICsKPiArICAgIGlmIChzLT5lb2Zfc2VudCkKPiAr ICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBpZiAocy0+d2luZG93KSB7Cj4gKyAgICAgICAg aWYgKCFmcmFtZSkgewo+ICsgICAgICAgICAgICBzLT5lb2Zfc2VudCA9IDE7Cj4gKyAgICAgICAg ICAgIHJldHVybiBmZl9BTWVkaWFDb2RlY19zaWduYWxFbmRPZklucHV0U3RyZWFtKGNvZGVjKTsK PiArICAgICAgICB9Cj4gKwo+ICsKPiArICAgICAgICBpZiAoZnJhbWUtPmRhdGFbM10pIHsKPiAr ICAgICAgICAgICAgcHRzID0gYXZfcmVzY2FsZV9xKGZyYW1lLT5wdHMsIGF2Y3R4LT50aW1lX2Jh c2UsIEFWX1RJTUVfQkFTRV9RKTsKPiArICAgICAgICAgICAgcy0+dGltZXN0YW1wc1tzLT50c19o ZWFkXSA9IGZyYW1lLT5wdHM7Cj4gKyAgICAgICAgICAgIHMtPnRzX2hlYWQgPSAocy0+dHNfaGVh ZCArIDEpICUgRkZfQVJSQVlfRUxFTVMocy0+dGltZXN0YW1wcyk7Cj4gKwo+ICsgICAgICAgICAg ICBhdl9tZWRpYWNvZGVjX3JlbGVhc2VfYnVmZmVyKChBVk1lZGlhQ29kZWNCdWZmZXIgKilmcmFt ZS0+ZGF0YVszXSwgMSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAg fQo+ICsKPiArICAgIHRpbWVvdXRfdXMgPSBJTlBVVF9ERVFVRVVFX1RJTUVPVVRfVVM7Cj4gKyAg ICBpbmRleCA9IGZmX0FNZWRpYUNvZGVjX2RlcXVldWVJbnB1dEJ1ZmZlcihjb2RlYywgdGltZW91 dF91cyk7Cj4gKyAgICBpZiAoZmZfQU1lZGlhQ29kZWNfaW5mb1RyeUFnYWluTGF0ZXIoY29kZWMs IGluZGV4KSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdBSU4pOwo+ICsKPiArICAgIGlm IChpbmRleCA8IDApIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImRl cXVldWUgaW5wdXQgYnVmZmVyIGZhaWxlZCwgJXpkIiwgaW5kZXgpOwo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChmcmFtZSkgewo+ICsg ICAgICAgIGlucHV0X2J1ZiA9IGZmX0FNZWRpYUNvZGVjX2dldElucHV0QnVmZmVyKGNvZGVjLCBp bmRleCwgJmlucHV0X3NpemUpOwo+ICsgICAgICAgIGNvcHlfZnJhbWVfdG9fYnVmZmVyKGF2Y3R4 LCBmcmFtZSwgaW5wdXRfYnVmLCBpbnB1dF9zaXplKTsKPiArCj4gKyAgICAgICAgcHRzID0gYXZf cmVzY2FsZV9xKGZyYW1lLT5wdHMsIGF2Y3R4LT50aW1lX2Jhc2UsIEFWX1RJTUVfQkFTRV9RKTsK PiArCj4gKyAgICAgICAgcy0+dGltZXN0YW1wc1tzLT50c19oZWFkXSA9IGZyYW1lLT5wdHM7Cj4g KyAgICAgICAgcy0+dHNfaGVhZCA9IChzLT50c19oZWFkICsgMSkgJSBGRl9BUlJBWV9FTEVNUyhz LT50aW1lc3RhbXBzKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgZmxhZ3MgfD0gZmZfQU1l ZGlhQ29kZWNfZ2V0QnVmZmVyRmxhZ0VuZE9mU3RyZWFtKGNvZGVjKTsKPiArICAgICAgICBzLT5l b2Zfc2VudCA9IDE7Cj4gKyAgICB9Cj4gKwo+IAo+IGl0IHdvdWxkIGJlIG5pY2UgdG8gcHJvcGFn YXRlIGtleWZyYW1lcyBoZXJlIChmcmFtZS0+cGljdF90eXBlID09IEFWX1BJQ1RVUkVfVFlQRV9J KS4gaXQgaXMgb25seSBwb3NzaWJsZSBvbiBBUEkyNiB3aXRoIEFNZWRpYUNvZGVjX3NldFBhcmFt ZXRlcnMgYW5kIFBBUkFNRVRFUl9LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FCgpJdOKAmXMgYSBuaWNl IGZlYXR1cmUuIEnigJltIHBsYW5uaW5nIHRvIGFkZCBzdXBwb3J0IGFmdGVyIHRoZSBiYXNpYyBm dW5jdGlvbiBpcyB3b3JraW5nLgoKPiAKPiAKPiArICAgIGZmX0FNZWRpYUNvZGVjX3F1ZXVlSW5w dXRCdWZmZXIoY29kZWMsIGluZGV4LCAwLCBpbnB1dF9zaXplLCBwdHMsIGZsYWdzKTsKPiArICAg IHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1lZGlhY29kZWNfZW5jb2RlKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBrdCkKPiArewo+ICsgICAgTWVkaWFDb2RlY0Vu Y0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaW50IHJldDsKPiArICAgIGlu dCBnb3RfcGFja2V0ID0gMDsKPiArCj4gKyAgICAvLyBSZXR1cm4gb24gdGhyZWUgY2FzZToKPiAr ICAgIC8vIDEuIFNlcmlvdXMgZXJyb3IKPiArICAgIC8vIDIuIEdvdCBhIHBhY2tldCBzdWNjZXNz Cj4gKyAgICAvLyAzLiBObyBBVkZyYW1lIGlzIGF2YWlsYWJsZSB5ZXQgKGRvbid0IHJldHVybiBp ZiBnZXRfZnJhbWUgcmV0dXJuIEVPRikKPiArICAgIHdoaWxlICgxKSB7Cj4gKyAgICAgICAgcmV0 ID0gbWVkaWFjb2RlY19yZWNlaXZlKGF2Y3R4LCBwa3QsICZnb3RfcGFja2V0KTsKPiArICAgICAg ICBpZiAoIXJldCkKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAgZWxzZSBpZiAo cmV0ICE9IEFWRVJST1IoRUFHQUlOKSkKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4g KyAgICAgICAgaWYgKCFzLT5mcmFtZS0+YnVmWzBdKSB7Cj4gKyAgICAgICAgICAgIHJldCA9IGZm X2VuY29kZV9nZXRfZnJhbWUoYXZjdHgsIHMtPmZyYW1lKTsKPiArICAgICAgICAgICAgaWYgKHJl dCAmJiByZXQgIT0gQVZFUlJPUl9FT0YpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmV0ID0gbWVkaWFjb2RlY19zZW5kKGF2Y3R4LCBz LT5mcmFtZS0+YnVmWzBdID8gcy0+ZnJhbWUgOiBOVUxMKTsKPiArICAgICAgICBpZiAoIXJldCkK PiArICAgICAgICAgICAgYXZfZnJhbWVfdW5yZWYocy0+ZnJhbWUpOwo+ICsgICAgICAgIGVsc2Ug aWYgKHJldCAhPSBBVkVSUk9SKEVBR0FJTikpCj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9jb2xkIGlu dCBtZWRpYWNvZGVjX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgTWVk aWFDb2RlY0VuY0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaWYgKHMtPmNv ZGVjKSB7Cj4gKyAgICAgICAgZmZfQU1lZGlhQ29kZWNfc3RvcChzLT5jb2RlYyk7Cj4gKyAgICAg ICAgZmZfQU1lZGlhQ29kZWNfZGVsZXRlKHMtPmNvZGVjKTsKPiArICAgICAgICBzLT5jb2RlYyA9 IE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHMtPndpbmRvdykgewo+ICsgICAgICAgIGZm X21lZGlhY29kZWNfc3VyZmFjZV91bnJlZihzLT53aW5kb3csIGF2Y3R4KTsKPiArICAgICAgICBz LT53aW5kb3cgPSBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPmZy YW1lKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ29k ZWNIV0NvbmZpZ0ludGVybmFsICpjb25zdCBtZWRpYWNvZGVjX2h3X2NvbmZpZ3NbXSA9IHsKPiAr ICAgICYoY29uc3QgQVZDb2RlY0hXQ29uZmlnSW50ZXJuYWwpIHsKPiArICAgICAgICAucHVibGlj ICAgICAgICAgID0gewo+ICsgICAgICAgICAgICAucGl4X2ZtdCAgICAgPSBBVl9QSVhfRk1UX01F RElBQ09ERUMsCj4gKyAgICAgICAgICAgIC5tZXRob2RzICAgICA9IEFWX0NPREVDX0hXX0NPTkZJ R19NRVRIT0RfQURfSE9DIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNf SFdfQ09ORklHX01FVEhPRF9IV19ERVZJQ0VfQ1RYLAo+ICsgICAgICAgICAgICAuZGV2aWNlX3R5 cGUgPSBBVl9IV0RFVklDRV9UWVBFX01FRElBQ09ERUMsCj4gKyAgICAgICAgfSwKPiArICAgICAg ICAuaHdhY2NlbCAgICAgICAgID0gTlVMTCwKPiArICAgIH0sCj4gKyAgICBOVUxMCj4gK307Cj4g Kwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihNZWRpYUNvZGVjRW5jQ29udGV4dCwgeCkK PiArI2RlZmluZSBWRSBBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09E SU5HX1BBUkFNCj4gK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBjb21tb25fb3B0aW9uc1tdID0gewo+ ICsgICAgeyAibmRrX2NvZGVjIiwgIlVzZSBNZWRpYUNvZGVjIGZyb20gTkRLIiwKPiArICAgICAg ICAgICAgICAgICAgICBPRkZTRVQodXNlX25ka19jb2RlYyksIEFWX09QVF9UWVBFX0JPT0wsIHsu aTY0ID0gLTF9LCAtMSwgMSwgVkUgfSwKPiArICAgIHsgTlVMTCB9LAo+ICt9Owo+ICsKPiArI2Rl ZmluZSBNRURJQUNPREVDX0VOQ09ERVJfQ0xBU1MobmFtZSkgICAgICAgICAgICAgIFwKPiArc3Rh dGljIGNvbnN0IEFWQ2xhc3MgbmFtZSAjIyBfbWVkaWFjb2RlY19jbGFzcyA9IHsgIFwKPiArICAg IC5jbGFzc19uYW1lID0gI25hbWUgIl9tZWRpYWNvZGVjIiwgICAgICAgICAgICAgIFwKPiArICAg IC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsICAgICAgICAgICAgIFwKPiArICAg IC5vcHRpb24gICAgID0gY29tbW9uX29wdGlvbnMsICAgICAgICAgICAgICAgICAgIFwKPiArICAg IC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULCAgICAgICAgICAgIFwKPiArfTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArCj4g KyNkZWZpbmUgREVDTEFSRV9NRURJQUNPREVDX0VOQ09ERVIoc2hvcnRfbmFtZSwgbG9uZ19uYW1l LCBjb2RlY19pZCkgICAgIFwKPiArTUVESUFDT0RFQ19FTkNPREVSX0NMQVNTKHNob3J0X25hbWUp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICtjb25zdCBGRkNvZGVjIGZm XyAjIyBzaG9ydF9uYW1lICMjIF9tZWRpYWNvZGVjX2VuY29kZXIgPSB7ICAgICAgICAgICAgICBc Cj4gKyAgICAucC5uYW1lICAgICAgICAgICA9ICNzaG9ydF9uYW1lICJfbWVkaWFjb2RlYyIsICAg ICAgICAgICAgICAgICAgICAgIFwKPiArICAgIENPREVDX0xPTkdfTkFNRShsb25nX25hbWUgIiBB bmRyb2lkIE1lZGlhQ29kZWMgZW5jb2RlciIpLCAgICAgICAgICAgXAo+ICsgICAgLnAudHlwZSAg ICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gKyAgICAucC5pZCAgICAgICAgICAgICA9IGNvZGVjX2lkLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIC5wLmNhcGFiaWxpdGllcyAgID0gQVZfQ09E RUNfQ0FQX0RSMSB8IEFWX0NPREVDX0NBUF9ERUxBWSAgICAgICAgICAgXAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICB8IEFWX0NPREVDX0NBUF9IQVJEV0FSRSwgICAgICAgICAgICAgICAgICAg ICAgICBcCj4gKyAgICAucHJpdl9kYXRhX3NpemUgICA9IHNpemVvZihNZWRpYUNvZGVjRW5jQ29u dGV4dCksICAgICAgICAgICAgICAgICAgIFwKPiArICAgIC5wLnBpeF9mbXRzICAgICAgID0gYXZj X3BpeF9mbXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgLmlu aXQgICAgICAgICAgICAgPSBtZWRpYWNvZGVjX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gKyAgICBGRl9DT0RFQ19SRUNFSVZFX1BBQ0tFVF9DQihtZWRpYWNvZGVjX2Vu Y29kZSksICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIC5jbG9zZSAgICAgICAgICAgID0g bWVkaWFjb2RlY19jbG9zZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAg LnAucHJpdl9jbGFzcyAgICAgPSAmc2hvcnRfbmFtZSAjIyBfbWVkaWFjb2RlY19jbGFzcywgICAg ICAgICAgICAgICBcCj4gKyAgICAuY2Fwc19pbnRlcm5hbCAgICA9IEZGX0NPREVDX0NBUF9JTklU X0NMRUFOVVAsICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIC5wLndyYXBwZXJfbmFtZSA9 ICJtZWRpYWNvZGVjIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsg ICAgLmh3X2NvbmZpZ3MgICAgID0gbWVkaWFjb2RlY19od19jb25maWdzLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gK307ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArCj4gKyNpZiBDT05GSUdfSDI2 NF9NRURJQUNPREVDX0VOQ09ERVIKPiArREVDTEFSRV9NRURJQUNPREVDX0VOQ09ERVIoaDI2NCwg IkguMjY0IiwgQVZfQ09ERUNfSURfSDI2NCkKPiArI2VuZGlmCj4gKwo+ICsjaWYgQ09ORklHX0hF VkNfTUVESUFDT0RFQ19FTkNPREVSCj4gK0RFQ0xBUkVfTUVESUFDT0RFQ19FTkNPREVSKGhldmMs ICJILjI2NSIsIEFWX0NPREVDX0lEX0hFVkMpCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9saWJh dmNvZGVjL3ZlcnNpb24uaCBiL2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gaW5kZXggNDNkMGQ5YTlm Yy4uODZhYzBmMzg3MSAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL3ZlcnNpb24uaAo+ICsrKyBi L2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gQEAgLTI5LDggKzI5LDggQEAKPiAKPiAgI2luY2x1ZGUg InZlcnNpb25fbWFqb3IuaCIKPiAKPiAtI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1Ig IDUxCj4gLSNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JQ1JPIDEwMQo+ICsjZGVmaW5lIExJ QkFWQ09ERUNfVkVSU0lPTl9NSU5PUiAgNTIKPiArI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05f TUlDUk8gMTAwCj4gCj4gICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCAgQVZfVkVSU0lP Tl9JTlQoTElCQVZDT0RFQ19WRVJTSU9OX01BSk9SLCBcCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCQVZDT0RFQ19WRVJTSU9OX01JTk9SLCBcCj4g LS0gCj4gMi4yNS4xCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3Jn Cmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5z dWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0 QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==