From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 5E23A4E3EC for ; Wed, 9 Jul 2025 15:25:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 23DE468F6A4; Wed, 9 Jul 2025 18:25:02 +0300 (EEST) Received: from out203-205-221-192.mail.qq.com (out203-205-221-192.mail.qq.com [203.205.221.192]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 6BF9268EFA2 for ; Wed, 9 Jul 2025 18:24:53 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1752074685; bh=rCvpoMBx17NFBEu+4Pqv64MukNQrVx8zIUWV+p8PVpQ=; h=Subject:From:In-Reply-To:Date:Cc:References:To; b=JScZSyKKyFmDH6KVh1128TegJ+y4Is1FKO9jujHDqUM/5hQolaCHE3QqMYbBhnTco fz0x/QAoE/PlrK6kgWHa1lessoO1YiJBuNThg+g9ae4R1oXg1LKOfaSaWgliG8Lsg0 urv8d99j5StTB1dzSQHMRnhCI2mSFRl2EpxjhtUE= Received: from smtpclient.apple ([240e:3b7:3274:8e20:107a:55eb:6dc6:86d6]) by newxmesmtplogicsvrszb21-0.qq.com (NewEsmtp) with SMTP id 62B958A3; Wed, 09 Jul 2025 23:24:43 +0800 X-QQ-mid: xmsmtpt1752074683tpd3j0v9z Message-ID: X-QQ-XMAILINFO: NVJ0hJNx7N5SlQgpxqeTwZxPSuXWPdXQpyOR3ZxtB8NDVMUouYXf1s3Ck8gLjf Tl7+MxVQo2r/E5zfj/wlNi8LsbZuip6juq4i1VNOs+q5aYck+smC7AqzG4Xlt/IOOlNWHrNa11IA fb+pIKyf5J2Oj3Xk98ttYcQ5Ikdn3Y/2m2CcsSU7a4JNHhnd2bheU7oseD3ACH4wUr3p33GXkn9f 6e5R4gWrJ1zQuXRCSc7mzeiiDyZ6hovlA79WDwFBL3DRwmRJrbn7IvG/fkkJKtkjwyK4Kk9EZnLP Hy7NkVmBz86pLo2AEip+g6wRxL3FsNhdUnn8u8kVXsQYGtsTYLy2q1qEpF3h25LAx3TJBGwT5fKH bzejkhv6k6WuAMSjiEb3HegsOYqJxJDPiU4AtONo7keouKvy6jcXKJUCWEmWVsr33CS9PYQxmLlb o2td6nknan4X8TbwyyWPyEv72z9ung62nKitlPxnMWcRW4OVmXMK7lNvCUyCZzAMksJZUJZtLclF wPyy90jUm2Ies8CeBqjSVZkOR/gEe1Zmyzz4mNVLHvoZQ3MVzLN3dOBMTAMP7rMfGnD7lzzctlgX 4BJEu9ryrsocP5URr/Ja0k0Tnlomr3lEZUb7RM9NyXJQpSVaAWSadStb9jQdIdrwEnYjtL9dsZUf fVLa7jdAyMMe1R84jM5HAFRLAmaZdNvrmxtZ3w/XwnM93rs2nwfHvCNLqNP5LB3PSsgvkmfgnHDH cN7sDA+jxRFZG8aL6Yq2t5k5iiCCwb+XC6VPHUStaXnz2WmV15iQ8VEryPDNC33If3EncKWZlf+g kyzV3y5uH6cdfKcvu3P59vqInfhC+863ny8H/7fvxk9r7SixD4bGrR7RELIQlYFuEEkP/j5AhvXb ats+9wxBNNLbHVey668OWMmaw/Q9AEo3yfLom7pdnGd6Dt5ZAfJffDdQrHQ73OoJG8EFbXcDkX4B rM1gKMiq7WoP9pvwQLjeeiSGQCgFhsQKQCpKowAJ9Ll4+P8qdJctpfoGDjGZUC5V7akyniOM6L/u 5FKbCEcaXoSkVP2D1F+85EeHo8Rmo= X-QQ-XMRINFO: M/715EihBoGSf6IYSX1iLFg= Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3818.100.11.1.3\)) From: Zhao Zhili In-Reply-To: <20250709072350.578693-1-vpalmisano@gmail.com> Date: Wed, 9 Jul 2025 23:24:26 +0800 X-OQ-MSGID: References: <20250709072350.578693-1-vpalmisano@gmail.com> To: FFmpeg development discussions and patches X-Mailer: Apple Mail (2.3818.100.11.1.3) Subject: Re: [FFmpeg-devel] [PATCH] Whisper audio filter 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: Vittorio Palmisano 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: Cj4gT24gSnVsIDksIDIwMjUsIGF0IDE1OjIzLCBWaXR0b3JpbyBQYWxtaXNhbm8gPHZwYWxtaXNh bm8tYXQtZ21haWwuY29tQGZmbXBlZy5vcmc+IHdyb3RlOgo+IAo+IEl0IGFkZHMgYSBuZXcgYXVk aW8gZmlsdGVyIGZvciBydW5uaW5nIGF1ZGlvIHRyYW5zY3JpcHRpb25zIHdpdGggdGhlIHdoaXNw ZXIgbW9kZWwuCj4gRG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMgYXJlIGluY2x1ZGVkIGludG8g dGhlIHBhdGNoLgoKVGhlIHBhdGNoIGRvZXNu4oCZdCBmb2xsb3dpbmcgZmZtcGVnIGNvZGluZyBz dHlsZS4KClNldHRpbmcgYXNpZGUgdGhlIGNvZGluZyBzdHlsZSBpc3N1ZXMsIEkgaGF2ZSBhIGZl dyBjb25jZXJucy4KClRoZXJlIGFyZSBETk4gc3VwcG9ydCB3aXRoIHRocmVlIGJhY2tlbmRzIGlu IEZGbXBlZyAobGliYXZmaWx0ZXIvZG5uX2ludGVyZmFjZS5oKSwgd2hpY2gKYXJlIHN1cHBvc2Vk IHRvIGJlIHJvYnVzdCBleHRlbnNpYmlsaXR5LiBJIGd1ZXNzIGluY29ycG9yYXRpbmcgV2hpc3Bl ciBuYXRpdmVseSBpbnRvIG91ciBETk4KYXJjaGl0ZWN0dXJlIGNhbiBiZSBkaWZmaWN1bHQsIG1h a2luZyB3cmFwcGVyIGFub3RoZXIgbGlicmFyeSBtb3JlIGZlYXNpYmxlIHRoYW4gZGlyZWN0Cmlu dGVncmF0aW9uLgoKV2hpbGUgdGhlIGZpbHRlciBwcm92aWRlcyBncmVhdCB2YWx1ZSwgdGhlIGFj Y2VsZXJhdGluZyBwYWNlIG9mIEFJIGlubm92YXRpb24gcmFpc2VzIGNvbmNlcm5zCmFib3V0IGl0 cyBsb25nZXZpdHkuIEdpdmVuIGhvdyByYXBpZGx5IG5ld2VyIG1vZGVscyBlbWVyZ2UsIGlzIHRo ZXJlIGEgcmlzayBvZiB0aGlzIGZpbHRlcgpiZWNvbWluZyBkZXByZWNhdGVkIGluIHRoZSBuZWFy IHRlcm0/CgpJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB3aGlzcGVyIHNob3VsZCBiZSBhbiBh dWRpbyB0byBzdWJ0aXRsZSBmaWx0ZXIuIEhvd2V2ZXIsIGxpYmF2ZmlsdGVyCm1pc3Npbmcgc3Vi dGl0bGUgc3VwcG9ydCBjdXJyZW50bHkuCgo+IAo+IFNpZ25lZC1vZmYtYnk6IFZpdHRvcmlvIFBh bG1pc2FubyA8dnBhbG1pc2Fub0BnbWFpbC5jb20+Cj4gLS0tCj4gY29uZmlndXJlICAgICAgICAg ICAgICAgIHwgICA1ICsKPiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgfCAxMDEgKysrKysrKysK PiBsaWJhdmZpbHRlci9NYWtlZmlsZSAgICAgfCAgIDIgKwo+IGxpYmF2ZmlsdGVyL2FmX3doaXNw ZXIuYyB8IDQ5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiBsaWJh dmZpbHRlci9hbGxmaWx0ZXJzLmMgfCAgIDIgKwo+IDUgZmlsZXMgY2hhbmdlZCwgNjA0IGluc2Vy dGlvbnMoKykKPiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvYWZfd2hpc3Blci5jCj4g Cj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IDJjY2FmZTdjMjAu LjU3M2RmYzY3ZGMgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4g QEAgLTMzNyw2ICszMzcsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gICAtLWVuYWJs ZS12YXBvdXJzeW50aCAgICAgZW5hYmxlIFZhcG91clN5bnRoIGRlbXV4ZXIgW25vXQo+ICAgLS1k aXNhYmxlLXhsaWIgICAgICAgICAgIGRpc2FibGUgeGxpYiBbYXV0b2RldGVjdF0KPiAgIC0tZGlz YWJsZS16bGliICAgICAgICAgICBkaXNhYmxlIHpsaWIgW2F1dG9kZXRlY3RdCj4gKyAgLS1lbmFi bGUtd2hpc3BlciAgICAgICAgIGVuYWJsZSB3aGlzcGVyIGZpbHRlciBbbm9dCj4gCj4gICBUaGUg Zm9sbG93aW5nIGxpYnJhcmllcyBwcm92aWRlIHZhcmlvdXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9u IGZlYXR1cmVzOgo+ICAgLS1kaXNhYmxlLWFtZiAgICAgICAgICAgIGRpc2FibGUgQU1GIHZpZGVv IGVuY29kaW5nIGNvZGUgW2F1dG9kZXRlY3RdCj4gQEAgLTIwMDMsNiArMjAwNCw3IEBAIEVYVEVS TkFMX0xJQlJBUllfTElTVD0iCj4gICAgIHBvY2tldHNwaGlueAo+ICAgICB2YXBvdXJzeW50aAo+ ICAgICB2dWxrYW5fc3RhdGljCj4gKyAgICB3aGlzcGVyCj4gIgo+IAo+IEhXQUNDRUxfQVVUT0RF VEVDVF9MSUJSQVJZX0xJU1Q9Igo+IEBAIC00MDU5LDYgKzQwNjEsNyBAQCB4c3RhY2tfcXN2X2Zp bHRlcl9kZXBzPSJsaWJtZngiCj4geHN0YWNrX3Fzdl9maWx0ZXJfc2VsZWN0PSJxc3Z2cHAiCj4g cGFkX3ZhYXBpX2ZpbHRlcl9kZXBzPSJ2YWFwaV8xIgo+IGRyYXdib3hfdmFhcGlfZmlsdGVyX2Rl cHM9InZhYXBpXzEiCj4gK3doaXNwZXJfZmlsdGVyX2RlcHM9IndoaXNwZXIiCj4gCj4gIyBleGFt cGxlcwo+IGF2aW9faHR0cF9zZXJ2ZV9maWxlc19kZXBzPSJhdmZvcm1hdCBhdnV0aWwgZm9yayIK PiBAQCAtNzEwOCw2ICs3MTExLDggQEAgZW5hYmxlZCBsaWJ2b19hbXJ3YmVuYyAgICAmJiByZXF1 aXJlIGxpYnZvX2FtcndiZW5jIHZvLWFtcndiZW5jL2VuY19pZi5oIEVfSUZfaW4KPiBlbmFibGVk IGxpYnZvcmJpcyAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ2b3JiaXMgdm9yYmlz IHZvcmJpcy9jb2RlYy5oIHZvcmJpc19pbmZvX2luaXQgJiYKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ2b3JiaXNlbmMgdm9yYmlzZW5jIHZvcmJp cy92b3JiaXNlbmMuaCB2b3JiaXNfZW5jb2RlX2luaXQKPiAKPiArZW5hYmxlZCB3aGlzcGVyICAg ICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgd2hpc3BlciAid2hpc3BlciA+PSAxLjcuNSIg d2hpc3Blci5oIHdoaXNwZXJfaW5pdF9mcm9tX2ZpbGVfd2l0aF9wYXJhbXMKPiArCj4gZW5hYmxl ZCBsaWJ2cHggICAgICAgICAgICAmJiB7Cj4gICAgIGVuYWJsZWQgbGlidnB4X3ZwOF9kZWNvZGVy ICYmIHsKPiAgICAgICAgIGNoZWNrX3BrZ19jb25maWcgbGlidnB4X3ZwOF9kZWNvZGVyICJ2cHgg Pj0gMS40LjAiICJ2cHgvdnB4X2RlY29kZXIuaCB2cHgvdnA4ZHguaCIgdnB4X2NvZGVjX3ZwOF9k eCB8fAo+IGRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQo+ IGluZGV4IGVkMjk1NmZlNzUuLmMwMGU3MzQ3OGYgMTAwNjQ0Cj4gLS0tIGEvZG9jL2ZpbHRlcnMu dGV4aQo+ICsrKyBiL2RvYy9maWx0ZXJzLnRleGkKPiBAQCAtNzY4Miw2ICs3NjgyLDEwNyBAQCBU aGVyZSBhcmUgNiBzYW1wbGVzIGF0IC00IGRCLCA2MiBhdCAtNSBkQiwgMjg2IGF0IC02IGRCLCBl dGMuCj4gSW4gb3RoZXIgd29yZHMsIHJhaXNpbmcgdGhlIHZvbHVtZSBieSArNCBkQiBkb2VzIG5v dCBjYXVzZSBhbnkgY2xpcHBpbmcsCj4gcmFpc2luZyBpdCBieSArNSBkQiBjYXVzZXMgY2xpcHBp bmcgZm9yIDYgc2FtcGxlcywgZXRjLgo+IAo+ICtAYW5jaG9ye3doaXNwZXJ9Cj4gK0BzZWN0aW9u IHdoaXNwZXIKPiArCj4gK0l0IHJ1bnMgYSBhdXRvbWF0aWMgc3BlZWNoIHJlY29nbml0aW9uIHVz aW5nIHRoZSBPcGVuQUnigJlzIFdoaXNwZXIgbW9kZWwuCj4gKwo+ICtJdCByZXF1aXJlcyB0aGUg d2hpc3Blci5jcHAgbGlicmFyeSAoaHR0cHM6Ly9naXRodWIuY29tL2dnbWwtb3JnL3doaXNwZXIu Y3BwKSAKPiArYXMgYSBwcmUtcmVxdWlzaXRlLiBBZnRlciBpbnN0YWxsaW5nIHRoZSBsaWJyYXJ5 IGl0IGNhbiBiZSBlbmFibGVkIHVzaW5nOgo+ICtAY29kZXsuL2NvbmZpZ3VyZSAtLWVuYWJsZS13 aGlzcGVyfS4KPiArCj4gK1RoZSBmaWx0ZXIgaGFzIGZvbGxvd2luZyBvcHRpb25zOgo+ICsKPiAr QHRhYmxlIEBvcHRpb24KPiArQGl0ZW0gbW9kZWwKPiArVGhlIGZpbGUgcGF0aCBvZiB0aGUgZG93 bmxvYWRlZCB3aGlzcGVyLmNwcCBtb2RlbCAobWFuZGF0b3J5KS4KPiArCj4gK0BpdGVtIGxhbmd1 YWdlCj4gK1RoZSBsYW5ndWFnZSB0byB1c2UgZm9yIHRyYW5zY3JpcHRpb24gKCdhdXRvJyBmb3Ig YXV0by1kZXRlY3QpLgo+ICtEZWZhdWx0IHZhbHVlOiBAY29kZXsiYXV0byJ9Cj4gKwo+ICtAaXRl bSBxdWV1ZQo+ICtUaGUgbWF4aW11bSBzaXplIGluIG1pbGxpc2Vjb25kcyB0aGF0IHdpbGwgYmUg cXVldWVkIGludG8gdGhlIGZpbHRlciBiZWZvcmUgCj4gK3Byb2Nlc3NpbmcgdGhlIGF1ZGlvIHdp dGggd2hpc3Blcgo+ICtEZWZhdWx0IHZhbHVlOiBAY29kZXsiMzAwMCJ9Cj4gKwo+ICtAaXRlbSB1 c2VfZ3B1Cj4gK0lmIHRoZSBHUFUgc3VwcG9ydCBzaG91bGQgYmUgZW5hYmxlZC4KPiArRGVmYXVs dCB2YWx1ZTogQGNvZGV7InRydWUifQo+ICsKPiArQGl0ZW0gZ3B1X2RldmljZQo+ICtUaGUgR1BV IGRldmljZSB0byB1c2UuCj4gK0RlZmF1bHQgdmFsdWU6IEBjb2RleyIwIn0KPiArCj4gK0BpdGVt IGRlc3RpbmF0aW9uCj4gK0lmIHNldCwgdGhlIHRyYW5zY3JpcHRpb24gb3V0cHV0IHdpbGwgYmUg c2VudCB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgVVJMCj4gKyh1c2Ugb25lIG9mIHRoZSBGRm1w ZWcgQVZJTyBwcm90b2NvbHMpOyBvdGhlcndpc2UsIHRoZSBvdXRwdXQgd2lsbCBiZSBsb2dnZWQg YXMKPiAraW5mbyBtZXNzYWdlcy4KPiArVGhlIG91dHB1dCB3aWxsIGFsc28gYmUgc2V0IGluIHRo ZSAibGF2Zmkud2hpc3Blci50ZXh0IiBmcmFtZSBtZXRhZGF0YS4KPiArCj4gK0BpdGVtIGZvcm1h dAo+ICtUaGUgZGVzdGluYXRpb24gZm9ybWF0IHN0cmluZzsgaXQgY291bGQgYmUgInRleHQiIChv bmx5IHRoZSB0cmFuc2NyaWJlZCB0ZXh0Cj4gK3dpbGwgYmUgc2VudCB0byB0aGUgZGVzdGluYXRp b24pLCAic3J0IiAoc3VidGl0bGUgZm9ybWF0KSBvciAianNvbiIuCj4gK0RlZmF1bHQgdmFsdWU6 IEBjb2RleyJ0ZXh0In0KPiArCj4gK0BpdGVtIHZhZF9tb2RlbAo+ICtQYXRoIHRvIHRoZSBWQUQg bW9kZWwgZmlsZS4gSWYgc2V0LCB0aGUgZmlsdGVyIHdpbGwgbG9hZCBhbiBhZGRpdGlvbmFsIHZv aWNlCj4gK2FjdGl2aXR5IGRldGVjdGlvbiBtb2R1bGUgKGh0dHBzOi8vZ2l0aHViLmNvbS9zbmFr ZXJzNC9zaWxlcm8tdmFkKSB0aGF0IHdpbGwgYmUKPiArdXNlZCB0byBmcmFnbWVudCB0aGUgYXVk aW8gcXVldWU7IHVzZSB0aGlzIG9wdGlvbiBzZXR0aW5nIGEgdmFsaWQgcGF0aCBvYnRhaW5lZAo+ ICtmcm9tIHRoZSB3aGlzcGVyLmNwcCByZXBvc2l0b3J5IChlLmcuICIuLi93aGlzcGVyLmNwcC9t b2RlbHMvZ2dtbC1zaWxlcm8tdjUuMS4yLmJpbiIpCj4gK2FuZCBpbmNyZWFzZSB0aGUgcXVldWUg cGFyYW1ldGVyIHRvIGFuIGhpZ2hlciB2YWx1ZSAoZS5nLiAxMDAwMCkKPiArCj4gK0BpdGVtIHZh ZF90aHJlc2hvbGQKPiArVGhlIFZBRCB0aHJlc2hvbGQgdG8gdXNlLgo+ICtEZWZhdWx0IHZhbHVl OiBAY29kZXsiMC41In0KPiArCj4gK0BpdGVtIHZhZF9taW5fc3BlZWNoX2R1cmF0aW9uCj4gK1Ro ZSBtaW5pbXVtIFZBRCBzcGVha2luZyBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuCj4gK0RlZmF1 bHQgdmFsdWU6IEBjb2RleyI1MCJ9Cj4gKwo+ICtAaXRlbSB2YWRfbWluX3NpbGVuY2VfZHVyYXRp b24KPiArVGhlIG1pbmltdW0gVkFEIHNpbGVuY2UgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLgo+ ICtEZWZhdWx0IHZhbHVlOiBAY29kZXsiNTAwIn0KPiArCj4gK0BlbmQgdGFibGUKPiArCj4gK0Bz dWJzZWN0aW9uIEV4YW1wbGVzCj4gK0BpdGVtaXplCj4gKwo+ICtAaXRlbQo+ICtSdW4gYSB0cmFu c2NyaXB0aW9uIHdpdGggc3J0IGZpbGUgZ2VuZXJhdGlvbjoKPiArQGV4YW1wbGUKPiArZmZtcGVn IC1pIGlucHV0Lm1wNCAtdm4gLWFmICJhZm9ybWF0PXNhbXBsZV9yYXRlcz0xNjAwMDpjaGFubmVs X2xheW91dHM9bW9ubyx3aGlzcGVyPW1vZGVsPS4uL3doaXNwZXIuY3BwL21vZGVscy9nZ21sLWJh c2UuZW4uYmluXAo+ICs6bGFuZ3VhZ2U9ZW5cCj4gKzpxdWV1ZT0zMDAwXAo+ICs6ZGVzdGluYXRp b249b3V0cHV0LnNydFwKPiArOmZvcm1hdD1zcnQiIC1mIG51bGwgLQo+ICtAZW5kIGV4YW1wbGUK PiArCj4gK0BpdGVtCj4gK1J1biBhIHRyYW5zY3JpcHRpb24gYW5kIHNlbmQgdGhlIG91dHB1dCBp biBKU09OIGZvcm1hdCB0byBhbiBIVFRQIHNlcnZpY2U6Cj4gK0BleGFtcGxlCj4gK2ZmbXBlZyAt aSBpbnB1dC5tcDQgLXZuIC1hZiAiYWZvcm1hdD1zYW1wbGVfcmF0ZXM9MTYwMDA6Y2hhbm5lbF9s YXlvdXRzPW1vbm8sd2hpc3Blcj1tb2RlbD0uLi93aGlzcGVyLmNwcC9tb2RlbHMvZ2dtbC1iYXNl LmVuLmJpblwKPiArOmxhbmd1YWdlPWVuXAo+ICs6cXVldWU9MzAwMFwKPiArOmRlc3RpbmF0aW9u PWh0dHBcXDovL2xvY2FsaG9zdFxcOjMwMDBcCj4gKzpmb3JtYXQ9anNvbicgLWYgbnVsbCAtCj4g K0BlbmQgZXhhbXBsZQo+ICsKPiArQGl0ZW0KPiArVHJhbnNjcmliZSB0aGUgbWljcm9waG9uZSBp bnB1dCB1c2luZyB0aGUgVkFEIG9wdGlvbjoKPiArQGV4YW1wbGUKPiArZmZtcGVnIC1sb2dsZXZl bCB3YXJuaW5nIC1mIHB1bHNlIC1pIGRlZmF1bHQgXAo+ICstYWYgJ2hpZ2hwYXNzPWY9MjAwLGxv d3Bhc3M9Zj0zMDAwLGFmb3JtYXQ9c2FtcGxlX3JhdGVzPTE2MDAwOmNoYW5uZWxfbGF5b3V0cz1t b25vLHdoaXNwZXI9bW9kZWw9Li4vd2hpc3Blci5jcHAvbW9kZWxzL2dnbWwtbWVkaXVtLmJpblwK PiArOmxhbmd1YWdlPWVuXAo+ICs6cXVldWU9MTAwMDBcCj4gKzpkZXN0aW5hdGlvbj0tXAo+ICs6 Zm9ybWF0PWpzb25cCj4gKzp2YWRfbW9kZWw9Li4vd2hpc3Blci5jcHAvbW9kZWxzL2dnbWwtc2ls ZXJvLXY1LjEuMi5iaW4nIC1mIG51bGwgLQo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BlbmQgaXRl bWl6ZQo+ICsKPiBAYyBtYW4gZW5kIEFVRElPIEZJTFRFUlMKPiAKPiBAY2hhcHRlciBBdWRpbyBT b3VyY2VzCj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIvbGliYXZmaWx0ZXIv TWFrZWZpbGUKPiBpbmRleCA5ZTkxNTNmNWIwLi5lMTMzNDIyY2E0IDEwMDY0NAo+IC0tLSBhL2xp YmF2ZmlsdGVyL01ha2VmaWxlCj4gKysrIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKPiBAQCAtMTg4 LDYgKzE4OCw4IEBAIE9CSlMtJChDT05GSUdfSElMQkVSVF9GSUxURVIpICAgICAgICAgICAgICAg ICs9IGFzcmNfaGlsYmVydC5vCj4gT0JKUy0kKENPTkZJR19TSU5DX0ZJTFRFUikgICAgICAgICAg ICAgICAgICAgKz0gYXNyY19zaW5jLm8KPiBPQkpTLSQoQ09ORklHX1NJTkVfRklMVEVSKSAgICAg ICAgICAgICAgICAgICArPSBhc3JjX3NpbmUubwo+IAo+ICtPQkpTLSQoQ09ORklHX1dISVNQRVJf RklMVEVSKSAgICAgICAgICAgICAgICArPSBhZl93aGlzcGVyLm8KPiArCj4gT0JKUy0kKENPTkZJ R19BTlVMTFNJTktfRklMVEVSKSAgICAgICAgICAgICAgKz0gYXNpbmtfYW51bGxzaW5rLm8KPiAK PiAjIHZpZGVvIGZpbHRlcnMKPiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvYWZfd2hpc3Blci5j IGIvbGliYXZmaWx0ZXIvYWZfd2hpc3Blci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwLi43YmZkZDNhOWRjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zmls dGVyL2FmX3doaXNwZXIuYwo+IEBAIC0wLDAgKzEsNDk0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoYykgMjAyNSBWaXR0b3JpbyBQYWxtaXNhbm8KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+ICsgKiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCj4gKyAqIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCj4gKyAqIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaW5j bHVkZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8c3RkbGli Lmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRpbC5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL29wdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NoYW5uZWxfbGF5b3V0LmgiCj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvc2FtcGxlZm10LmgiCj4gKyNpbmNsdWRlICJsaWJhdmZpbHRl ci9hdmZpbHRlci5oIgo+ICsjaW5jbHVkZSAibGliYXZmaWx0ZXIvYXVkaW8uaCIKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9tZW0uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJhdmZvcm1h dC9hdmlvLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvdGhyZWFkLmgiCj4gKwo+ICsjaW5jbHVk ZSAiZm9ybWF0cy5oIgo+ICsKPiArI2luY2x1ZGUgIndoaXNwZXIuaCIKPiArCj4gK3R5cGVkZWYg c3RydWN0IFdoaXNwZXJDb250ZXh0Cj4gK3sKPiArICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwo+ ICsgICAgY2hhciAqbW9kZWxfcGF0aDsKPiArICAgIGNoYXIgKmxhbmd1YWdlOwo+ICsgICAgYm9v bCB1c2VfZ3B1Owo+ICsgICAgaW50IGdwdV9kZXZpY2U7Cj4gKyAgICBjaGFyICp2YWRfbW9kZWxf cGF0aDsKPiArICAgIGZsb2F0IHZhZF90aHJlc2hvbGQ7Cj4gKyAgICBpbnQgdmFkX21pbl9zcGVl Y2hfZHVyYXRpb247Cj4gKyAgICBpbnQgdmFkX21pbl9zaWxlbmNlX2R1cmF0aW9uOwo+ICsKPiAr ICAgIGludCBxdWV1ZTsKPiArICAgIGNoYXIgKmRlc3RpbmF0aW9uOwo+ICsgICAgY2hhciAqZm9y bWF0Owo+ICsKPiArICAgIHN0cnVjdCB3aGlzcGVyX2NvbnRleHQgKmN0eF93c3A7Cj4gKyAgICBz dHJ1Y3Qgd2hpc3Blcl9zdGF0ZSAqd2hpc3Blcl9zdGF0ZTsKPiArICAgIHN0cnVjdCB3aGlzcGVy X3ZhZF9jb250ZXh0ICpjdHhfdmFkOwo+ICsgICAgc3RydWN0IHdoaXNwZXJfdmFkX3BhcmFtcyB2 YWRfcGFyYW1zOwo+ICsKPiArICAgIGZsb2F0ICphdWRpb19idWZmZXI7Cj4gKyAgICBpbnQgYXVk aW9fYnVmZmVyX3F1ZXVlX3NpemU7Cj4gKyAgICBpbnQgYXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZTsK PiArICAgIGludCBhdWRpb19idWZmZXJfdmFkX3NpemU7Cj4gKwo+ICsgICAgaW50IGVvZjsKPiAr ICAgIGludDY0X3QgbmV4dF9wdHM7Cj4gKwo+ICsgICAgQVZJT0NvbnRleHQgKmF2aW9fY29udGV4 dDsKPiArICAgIGludCBpbmRleDsKPiArICAgIGludDY0X3QgdGltZXN0YW1wOwo+ICt9IFdoaXNw ZXJDb250ZXh0Owo+ICsKPiArc3RhdGljIHZvaWQgY2JfbG9nX2Rpc2FibGUoZW51bSBnZ21sX2xv Z19sZXZlbCwgY29uc3QgY2hhciAqLCB2b2lkICopIHt9Cj4gKwo+ICtzdGF0aWMgaW50IGluaXQo QVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIFdoaXNwZXJDb250ZXh0ICp3Y3R4ID0g Y3R4LT5wcml2Owo+ICsKPiArICAgIGdnbWxfYmFja2VuZF9sb2FkX2FsbCgpOwo+ICsgICAgd2hp c3Blcl9sb2dfc2V0KGNiX2xvZ19kaXNhYmxlLCBOVUxMKTsKPiArCj4gKyAgICAvLyBJbml0IHdo aXNwZXIgY29udGV4dAo+ICsgICAgaWYgKCF3Y3R4LT5tb2RlbF9wYXRoKQo+ICsgICAgewo+ICsg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk5vIHdoaXNwZXIgbW9kZWwgcGF0aCBz cGVjaWZpZWQuIFVzZSB0aGUgJ21vZGVsJyBvcHRpb24uXG4iKTsKPiArICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiArICAgIHN0cnVjdCB3aGlzcGVyX2NvbnRl eHRfcGFyYW1zIHBhcmFtcyA9IHdoaXNwZXJfY29udGV4dF9kZWZhdWx0X3BhcmFtcygpOwo+ICsg ICAgcGFyYW1zLnVzZV9ncHUgPSB3Y3R4LT51c2VfZ3B1Owo+ICsgICAgcGFyYW1zLmdwdV9kZXZp Y2UgPSB3Y3R4LT5ncHVfZGV2aWNlOwo+ICsKPiArICAgIHdjdHgtPmN0eF93c3AgPSB3aGlzcGVy X2luaXRfZnJvbV9maWxlX3dpdGhfcGFyYW1zKHdjdHgtPm1vZGVsX3BhdGgsIHBhcmFtcyk7Cj4g KyAgICBpZiAod2N0eC0+Y3R4X3dzcCA9PSBOVUxMKQo+ICsgICAgewo+ICsgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHdoaXNwZXIgY29udGV4 dCBmcm9tIG1vZGVsOiAlc1xuIiwgd2N0eC0+bW9kZWxfcGF0aCk7Cj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlPKTsKPiArICAgIH0KPiArCj4gKyAgICB3Y3R4LT53aGlzcGVyX3N0YXRlID0g d2hpc3Blcl9pbml0X3N0YXRlKHdjdHgtPmN0eF93c3ApOwo+ICsgICAgaWYgKHdjdHgtPndoaXNw ZXJfc3RhdGUgPT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gZ2V0IHdoaXNwZXIgc3RhdGUgZnJvbSBjb250ZXh0XG4iKTsKPiAr ICAgICAgICB3aGlzcGVyX2ZyZWUod2N0eC0+Y3R4X3dzcCk7Cj4gKyAgICAgICAgd2N0eC0+Y3R4 X3dzcCA9IE5VTEw7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlPKTsKPiArICAgIH0KPiAr Cj4gKyAgICAvLyBJbml0IFZBRCBtb2RlbCBjb250ZXh0Cj4gKyAgICBpZiAod2N0eC0+dmFkX21v ZGVsX3BhdGgpCj4gKyAgICB7Cj4gKyAgICAgICAgc3RydWN0IHdoaXNwZXJfdmFkX2NvbnRleHRf cGFyYW1zIGN0eF9wYXJhbXMgPSB3aGlzcGVyX3ZhZF9kZWZhdWx0X2NvbnRleHRfcGFyYW1zKCk7 Cj4gKyAgICAgICAgY3R4X3BhcmFtcy5uX3RocmVhZHMgPSA0Owo+ICsgICAgICAgIC8vIGN0eF9w YXJhbXMudXNlX2dwdSA9IHdjdHgtPnVzZV9ncHU7IFRPRE8gKHNlZTogd2hpc3Blcl92YWRfaW5p dF9jb250ZXh0KQo+ICsgICAgICAgIGN0eF9wYXJhbXMuZ3B1X2RldmljZSA9IHdjdHgtPmdwdV9k ZXZpY2U7Cj4gKyAgICAgICAgd2N0eC0+Y3R4X3ZhZCA9IHdoaXNwZXJfdmFkX2luaXRfZnJvbV9m aWxlX3dpdGhfcGFyYW1zKAo+ICsgICAgICAgICAgICB3Y3R4LT52YWRfbW9kZWxfcGF0aCwKPiAr ICAgICAgICAgICAgY3R4X3BhcmFtcyk7Cj4gKwo+ICsgICAgICAgIHdjdHgtPnZhZF9wYXJhbXMg PSB3aGlzcGVyX3ZhZF9kZWZhdWx0X3BhcmFtcygpOwo+ICsgICAgICAgIHdjdHgtPnZhZF9wYXJh bXMudGhyZXNob2xkID0gd2N0eC0+dmFkX3RocmVzaG9sZDsKPiArICAgICAgICB3Y3R4LT52YWRf cGFyYW1zLm1pbl9zcGVlY2hfZHVyYXRpb25fbXMgPSB3Y3R4LT52YWRfbWluX3NwZWVjaF9kdXJh dGlvbjsKPiArICAgICAgICB3Y3R4LT52YWRfcGFyYW1zLm1pbl9zaWxlbmNlX2R1cmF0aW9uX21z ID0gd2N0eC0+dmFkX21pbl9zaWxlbmNlX2R1cmF0aW9uOwo+ICsgICAgICAgIHdjdHgtPnZhZF9w YXJhbXMubWF4X3NwZWVjaF9kdXJhdGlvbl9zID0gKGZsb2F0KSh3Y3R4LT5hdWRpb19idWZmZXJf cXVldWVfc2l6ZSAvIDEwMDAuMGYpOwo+ICsgICAgICAgIHdjdHgtPnZhZF9wYXJhbXMuc3BlZWNo X3BhZF9tcyA9IDA7Cj4gKyAgICAgICAgd2N0eC0+dmFkX3BhcmFtcy5zYW1wbGVzX292ZXJsYXAg PSAwOwo+ICsgICAgfQo+ICsKPiArICAgIC8vIEluaXQgYnVmZmVyCj4gKyAgICB3Y3R4LT5hdWRp b19idWZmZXJfcXVldWVfc2l6ZSA9IFdISVNQRVJfU0FNUExFX1JBVEUgKiB3Y3R4LT5xdWV1ZSAv IDEwMDA7Cj4gKyAgICB3Y3R4LT5hdWRpb19idWZmZXIgPSBhdl9tYWxsb2Mod2N0eC0+YXVkaW9f YnVmZmVyX3F1ZXVlX3NpemUgKiBzaXplb2YoZmxvYXQpKTsKPiArICAgIGlmICghd2N0eC0+YXVk aW9fYnVmZmVyKQo+ICsgICAgewo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgd2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSA9IDA7Cj4gKwo+ ICsgICAgd2N0eC0+bmV4dF9wdHMgPSBBVl9OT1BUU19WQUxVRTsKPiArCj4gKyAgICB3Y3R4LT5h dmlvX2NvbnRleHQgPSBOVUxMOwo+ICsgICAgaWYgKHdjdHgtPmRlc3RpbmF0aW9uICYmIHN0cmNt cCgiIiwgd2N0eC0+ZGVzdGluYXRpb24pKQo+ICsgICAgewo+ICsgICAgICAgIGludCByZXQgPSAw Owo+ICsKPiArICAgICAgICBpZiAoIXN0cmNtcCgiLSIsIHdjdHgtPmRlc3RpbmF0aW9uKSkKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJldCA9IGF2aW9fb3Blbigmd2N0eC0+YXZpb19jb250 ZXh0LCAicGlwZToxIiwgQVZJT19GTEFHX1dSSVRFKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAg ZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgcmV0ID0gYXZpb19vcGVuKCZ3Y3R4LT5h dmlvX2NvbnRleHQsIHdjdHgtPmRlc3RpbmF0aW9uLCBBVklPX0ZMQUdfV1JJVEUpOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIs Cj4gKyAgICAgICAgICAgICAgICAgICB3Y3R4LT5kZXN0aW5hdGlvbiwgYXZfZXJyMnN0cihyZXQp KTsKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IHdjdHgtPmF2aW9fY29udGV4dC0+ZGlyZWN0ID0gQVZJT19GTEFHX0RJUkVDVDsKPiArICAgIH0K PiArCj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIldoaXNwZXIgZmlsdGVyIGluaXRp YWxpemVkOiBtb2RlbDogJXMgbGFuZzogJXMgcXVldWU6ICVkIG1zXG4iLAo+ICsgICAgICAgICAg IHdjdHgtPm1vZGVsX3BhdGgsIHdjdHgtPmxhbmd1YWdlLCB3Y3R4LT5xdWV1ZSk7Cj4gKwo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVuaW5pdChBVkZpbHRlckNvbnRl eHQgKmN0eCkKPiArewo+ICsgICAgV2hpc3BlckNvbnRleHQgKndjdHggPSBjdHgtPnByaXY7Cj4g Kwo+ICsgICAgaWYgKHdjdHgtPmF1ZGlvX2J1ZmZlcl9maWxsX3NpemUgPiAwKQo+ICsgICAgewo+ ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiUmVtYWluaW5nIGF1ZGlvIGJ1 ZmZlciAlZCBzYW1wbGVzICglZCBzZWNvbmRzKSBhZnRlciBzdG9wcGluZ1xuIiwKPiArICAgICAg ICAgICAgICAgd2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSwKPiArICAgICAgICAgICAgICAg d2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSAvIFdISVNQRVJfU0FNUExFX1JBVEUpOwo+ICsg ICAgfQo+ICsKPiArICAgIGlmICh3Y3R4LT5jdHhfdmFkKQo+ICsgICAgewo+ICsgICAgICAgIHdo aXNwZXJfdmFkX2ZyZWUod2N0eC0+Y3R4X3ZhZCk7Cj4gKyAgICAgICAgd2N0eC0+Y3R4X3ZhZCA9 IE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHdjdHgtPndoaXNwZXJfc3RhdGUpCj4gKyAg ICB7Cj4gKyAgICAgICAgd2hpc3Blcl9mcmVlX3N0YXRlKHdjdHgtPndoaXNwZXJfc3RhdGUpOwo+ ICsgICAgICAgIHdjdHgtPndoaXNwZXJfc3RhdGUgPSBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAg IGlmICh3Y3R4LT5jdHhfd3NwKQo+ICsgICAgewo+ICsgICAgICAgIHdoaXNwZXJfZnJlZSh3Y3R4 LT5jdHhfd3NwKTsKPiArICAgICAgICB3Y3R4LT5jdHhfd3NwID0gTlVMTDsKPiArICAgIH0KPiAr Cj4gKyAgICBhdl9mcmVlcCgmd2N0eC0+YXVkaW9fYnVmZmVyKTsKPiArCj4gKyAgICBpZiAod2N0 eC0+YXZpb19jb250ZXh0KQo+ICsgICAgewo+ICsgICAgICAgIGF2aW9fY2xvc2VwKCZ3Y3R4LT5h dmlvX2NvbnRleHQpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBydW5fdHJhbnNj cmlwdGlvbihBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZEaWN0aW9uYXJ5ICoqbWV0YWRhdGEsIGlu dCBlbmRfcG9zKQo+ICt7Cj4gKyAgICBXaGlzcGVyQ29udGV4dCAqd2N0eCA9IGN0eC0+cHJpdjsK PiArICAgIGVuZF9wb3MgPSBGRk1JTihlbmRfcG9zLCB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9z aXplKTsKPiArCj4gKyAgICBpZiAoIXdjdHgtPmN0eF93c3AgfHwgZW5kX3BvcyA9PSAwKQo+ICsg ICAgewo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIXdjdHgtPmN0 eF93c3ApCj4gKyAgICB7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIGZs b2F0IGR1cmF0aW9uID0gKGZsb2F0KWVuZF9wb3MgLyBXSElTUEVSX1NBTVBMRV9SQVRFOwo+ICsK PiArICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAicnVuIHRyYW5zY3JpcHRpb24gJWQvJWQg c2FtcGxlcyAoJS4yZiBzZWNvbmRzKS4uLlxuIiwKPiArICAgICAgICAgICBlbmRfcG9zLCB3Y3R4 LT5hdWRpb19idWZmZXJfZmlsbF9zaXplLAo+ICsgICAgICAgICAgIGR1cmF0aW9uKTsKPiArCj4g KyAgICBzdHJ1Y3Qgd2hpc3Blcl9mdWxsX3BhcmFtcyBwYXJhbXMgPSB3aGlzcGVyX2Z1bGxfZGVm YXVsdF9wYXJhbXMoV0hJU1BFUl9TQU1QTElOR19HUkVFRFkpOwo+ICsgICAgcGFyYW1zLmxhbmd1 YWdlID0gd2N0eC0+bGFuZ3VhZ2U7Cj4gKyAgICBwYXJhbXMucHJpbnRfc3BlY2lhbCA9IDA7Cj4g KyAgICBwYXJhbXMucHJpbnRfcHJvZ3Jlc3MgPSAwOwo+ICsgICAgcGFyYW1zLnByaW50X3JlYWx0 aW1lID0gMDsKPiArICAgIHBhcmFtcy5wcmludF90aW1lc3RhbXBzID0gMDsKPiArCj4gKyAgICBp ZiAod2hpc3Blcl9mdWxsKHdjdHgtPmN0eF93c3AsIHBhcmFtcywgd2N0eC0+YXVkaW9fYnVmZmVy LCBlbmRfcG9zKSAhPSAwKQo+ICsgICAgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIkZhaWxlZCB0byBwcm9jZXNzIGF1ZGlvIHdpdGggd2hpc3Blci5jcHBcbiIpOwo+ICsg ICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBjb25zdCBpbnQgbl9zZWdtZW50cyA9 IHdoaXNwZXJfZnVsbF9uX3NlZ21lbnRzX2Zyb21fc3RhdGUod2N0eC0+d2hpc3Blcl9zdGF0ZSk7 Cj4gKyAgICBjaGFyICpzZWdtZW50c190ZXh0ID0gTlVMTDsKPiArCj4gKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IG5fc2VnbWVudHM7ICsraSkKPiArICAgIHsKPiArICAgICAgICBjb25zdCBib29s IHR1cm4gPSB3aGlzcGVyX2Z1bGxfZ2V0X3NlZ21lbnRfc3BlYWtlcl90dXJuX25leHQod2N0eC0+ Y3R4X3dzcCwgaSk7Cj4gKyAgICAgICAgY29uc3QgaW50NjRfdCB0MCA9IHdoaXNwZXJfZnVsbF9n ZXRfc2VnbWVudF90MCh3Y3R4LT5jdHhfd3NwLCBpKSAqIDEwOwo+ICsgICAgICAgIGNvbnN0IGlu dDY0X3QgdDEgPSB3aGlzcGVyX2Z1bGxfZ2V0X3NlZ21lbnRfdDEod2N0eC0+Y3R4X3dzcCwgaSkg KiAxMDsKPiArICAgICAgICBjb25zdCBjaGFyICp0ZXh0ID0gd2hpc3Blcl9mdWxsX2dldF9zZWdt ZW50X3RleHQod2N0eC0+Y3R4X3dzcCwgaSk7Cj4gKyAgICAgICAgY2hhciAqdGV4dF9jbGVhbmVk ID0gYXZfc3RyaXJlcGxhY2UodGV4dCArIDEsICJbQkxBTktfQVVESU9dIiwgIiIpOwo+ICsKPiAr ICAgICAgICBpZiAoYXZfc3Rybmxlbih0ZXh0X2NsZWFuZWQsIDEpID09IDApCj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgICBhdl9mcmVlKHRleHRfY2xlYW5lZCk7Cj4gKyAgICAgICAgICAgIGNv bnRpbnVlOwo+ICsgICAgICAgIH0KPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywg IiAgWyVsZC0lbGQlc106IFwiJXNcIlxuIiwgd2N0eC0+dGltZXN0YW1wICsgdDAsIHdjdHgtPnRp bWVzdGFtcCArIHQxLCB0dXJuID8gIiAodHVybikiIDogIiIsIHRleHRfY2xlYW5lZCk7Cj4gKwo+ ICsgICAgICAgIGlmIChzZWdtZW50c190ZXh0KQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAg Y2hhciAqbmV3X3RleHQgPSBhdl9hc3ByaW50ZigiJXMlcyIsIHNlZ21lbnRzX3RleHQsIHRleHRf Y2xlYW5lZCk7Cj4gKyAgICAgICAgICAgIGF2X2ZyZWUoc2VnbWVudHNfdGV4dCk7Cj4gKyAgICAg ICAgICAgIHNlZ21lbnRzX3RleHQgPSBuZXdfdGV4dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAg ZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgc2VnbWVudHNfdGV4dCA9IGF2X3N0cmR1 cCh0ZXh0X2NsZWFuZWQpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKHdjdHgtPmF2 aW9fY29udGV4dCkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGNvbnN0IGludDY0X3Qgc3Rh cnRfdCA9IHdjdHgtPnRpbWVzdGFtcCArIHQwOwo+ICsgICAgICAgICAgICBjb25zdCBpbnQ2NF90 IGVuZF90ID0gd2N0eC0+dGltZXN0YW1wICsgdDE7Cj4gKyAgICAgICAgICAgIGNoYXIgKmJ1ZiA9 IE5VTEw7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoIWF2X3N0cmNhc2VjbXAod2N0eC0+Zm9ybWF0 LCAic3J0IikpCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIGJ1ZiA9IGF2X2Fz cHJpbnRmKCIlZFxuJTAybGQ6JTAybGQ6JTAybGQuJTAzbGQgLS0+ICUwMmxkOiUwMmxkOiUwMmxk LiUwM2xkXG4lc1xuXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2N0 eC0+aW5kZXgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF90IC8g MzYwMDAwMCwgKHN0YXJ0X3QgLyA2MDAwMCkgJSA2MCwgKHN0YXJ0X3QgLyAxMDAwKSAlIDYwLCBz dGFydF90ICUgMTAwMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF90 IC8gMzYwMDAwMCwgKGVuZF90IC8gNjAwMDApICUgNjAsIChlbmRfdCAvIDEwMDApICUgNjAsIGVu ZF90ICUgMTAwMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfY2xl YW5lZCk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgZWxzZSBpZiAoIWF2X3N0cmNh c2VjbXAod2N0eC0+Zm9ybWF0LCAianNvbiIpKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAg ICAgICAgICBidWYgPSBhdl9hc3ByaW50Zigie1wic3RhcnRcIjolbGQsXCJlbmRcIjolbGQsXCJ0 ZXh0XCI6XCIlc1wiLFwidHVyblwiOiVzfVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0X3QsIGVuZF90LCB0ZXh0X2NsZWFuZWQsIHR1cm4gPyAidHJ1ZSIgOiAi ZmFsc2UiKTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAg ICAgIHsKPiArICAgICAgICAgICAgICAgIGJ1ZiA9IGF2X3N0cmR1cCh0ZXh0X2NsZWFuZWQpOwo+ ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBpZiAoYnVmKQo+ICsgICAgICAgICAg ICB7Cj4gKyAgICAgICAgICAgICAgICBhdmlvX3dyaXRlKHdjdHgtPmF2aW9fY29udGV4dCwgYnVm LCBzdHJsZW4oYnVmKSk7Cj4gKyAgICAgICAgICAgICAgICBhdl9mcmVlKGJ1Zik7Cj4gKyAgICAg ICAgICAgIH0KPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGF2X2ZyZWUodGV4dF9jbGVhbmVk KTsKPiArICAgIH0KPiArCj4gKyAgICB3Y3R4LT5pbmRleCsrOwo+ICsgICAgd2N0eC0+dGltZXN0 YW1wICs9IChpbnQ2NF90KShkdXJhdGlvbiAqIDEwMDApOwo+ICsKPiArICAgIGlmIChtZXRhZGF0 YSAmJiBzZWdtZW50c190ZXh0KQo+ICsgICAgewo+ICsgICAgICAgIGF2X2RpY3Rfc2V0KG1ldGFk YXRhLCAibGF2Zmkud2hpc3Blci50ZXh0Iiwgc2VnbWVudHNfdGV4dCwgMCk7Cj4gKyAgICAgICAg Y2hhciAqZHVyYXRpb25fdGV4dCA9IGF2X2FzcHJpbnRmKCIlZiIsIGR1cmF0aW9uKTsKPiArICAg ICAgICBhdl9kaWN0X3NldChtZXRhZGF0YSwgImxhdmZpLndoaXNwZXIuZHVyYXRpb24iLCBkdXJh dGlvbl90ZXh0LCAwKTsKPiArICAgICAgICBhdl9mcmVlKGR1cmF0aW9uX3RleHQpOwo+ICsgICAg fQo+ICsgICAgaWYgKHNlZ21lbnRzX3RleHQpCj4gKyAgICB7Cj4gKyAgICAgICAgYXZfZnJlZShz ZWdtZW50c190ZXh0KTsKPiArICAgIH0KPiArCj4gKyAgICBtZW1jcHkod2N0eC0+YXVkaW9fYnVm ZmVyLCB3Y3R4LT5hdWRpb19idWZmZXIgKyBlbmRfcG9zLCBlbmRfcG9zICogc2l6ZW9mKGZsb2F0 KSk7Cj4gKyAgICB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9zaXplIC09IGVuZF9wb3M7Cj4gKyAg ICB3Y3R4LT5hdWRpb19idWZmZXJfdmFkX3NpemUgPSB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9z aXplOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlu bGluaywgQVZGcmFtZSAqZnJhbWUpCj4gK3sKPiArICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0g aW5saW5rLT5kc3Q7Cj4gKyAgICBXaGlzcGVyQ29udGV4dCAqd2N0eCA9IGN0eC0+cHJpdjsKPiAr ICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKPiArICAgIEFWRGlj dGlvbmFyeSAqKm1ldGFkYXRhID0gJmZyYW1lLT5tZXRhZGF0YTsKPiArCj4gKyAgICBjb25zdCBp bnQgc2FtcGxlcyA9IGZyYW1lLT5uYl9zYW1wbGVzOwo+ICsgICAgY29uc3QgZmxvYXQgKmlucHV0 X2RhdGEgPSAoY29uc3QgZmxvYXQgKilmcmFtZS0+ZGF0YVswXTsKPiArCj4gKyAgICBpZiAod2N0 eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSArIHNhbXBsZXMgPiB3Y3R4LT5hdWRpb19idWZmZXJf cXVldWVfc2l6ZSkKPiArICAgIHsKPiArICAgICAgICBydW5fdHJhbnNjcmlwdGlvbihjdHgsIG1l dGFkYXRhLCB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9zaXplKTsKPiArICAgIH0KPiArCj4gKyAg ICBtZW1jcHkod2N0eC0+YXVkaW9fYnVmZmVyICsgd2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6 ZSwgaW5wdXRfZGF0YSwgc2FtcGxlcyAqIHNpemVvZihmbG9hdCkpOwo+ICsgICAgd2N0eC0+YXVk aW9fYnVmZmVyX2ZpbGxfc2l6ZSArPSBzYW1wbGVzOwo+ICsKPiArICAgIGlmICh3Y3R4LT5jdHhf dmFkICYmICh3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9zaXplIC0gd2N0eC0+YXVkaW9fYnVmZmVy X3ZhZF9zaXplKSA+PQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdISVNQRVJfU0FN UExFX1JBVEUgKiAod2N0eC0+dmFkX21pbl9zcGVlY2hfZHVyYXRpb24gKyB3Y3R4LT52YWRfbWlu X3NpbGVuY2VfZHVyYXRpb24pIC8gMTAwMCkKPiArICAgIHsKPiArICAgICAgICBzdHJ1Y3Qgd2hp c3Blcl92YWRfc2VnbWVudHMgKnNlZ21lbnRzID0gd2hpc3Blcl92YWRfc2VnbWVudHNfZnJvbV9z YW1wbGVzKAo+ICsgICAgICAgICAgICB3Y3R4LT5jdHhfdmFkLCB3Y3R4LT52YWRfcGFyYW1zLCB3 Y3R4LT5hdWRpb19idWZmZXIsIHdjdHgtPmF1ZGlvX2J1ZmZlcl9maWxsX3NpemUpOwo+ICsgICAg ICAgIHdjdHgtPmF1ZGlvX2J1ZmZlcl92YWRfc2l6ZSA9IHdjdHgtPmF1ZGlvX2J1ZmZlcl9maWxs X3NpemU7Cj4gKwo+ICsgICAgICAgIGlmICghc2VnbWVudHMpCj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZGV0ZWN0IFZBRFxu Iik7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICB7Cj4gKyAgICAgICAg ICAgIGludCBuX3NlZ21lbnRzID0gd2hpc3Blcl92YWRfc2VnbWVudHNfbl9zZWdtZW50cyhzZWdt ZW50cyk7Cj4gKwo+ICsgICAgICAgICAgICBpZiAobl9zZWdtZW50cyA+IDApCj4gKyAgICAgICAg ICAgIHsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludDY0X3Qgc3RhcnRfbXMgPSB3aGlzcGVy X3ZhZF9zZWdtZW50c19nZXRfc2VnbWVudF90MChzZWdtZW50cywgbl9zZWdtZW50cyAtIDEpICog MTA7Cj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQ2NF90IGVuZF9tcyA9IHdoaXNwZXJfdmFk X3NlZ21lbnRzX2dldF9zZWdtZW50X3QxKHNlZ21lbnRzLCBuX3NlZ21lbnRzIC0gMSkgKiAxMDsK PiArICAgICAgICAgICAgICAgIGludCBlbmRfcG9zID0gKGludCkoZW5kX21zICogV0hJU1BFUl9T QU1QTEVfUkFURSAvIDEwMDApOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmIChlbmRfcG9zIDwg d2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSkKPiArICAgICAgICAgICAgICAgIHsKPiArICAg ICAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlZBRCBkZXRlY3RlZCAl ZCBzZWdtZW50cywgc3RhcnQ6ICVsZCBtcywgZW5kOiAlbGQgbXMgKGJ1ZmZlcjogJWQgbXMpXG4i LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3NlZ21lbnRzLCBzdGFydF9tcywgZW5k X21zLCAxMDAwICogd2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSAvIFdISVNQRVJfU0FNUExF X1JBVEUpOwo+ICsgICAgICAgICAgICAgICAgICAgIHJ1bl90cmFuc2NyaXB0aW9uKGN0eCwgbWV0 YWRhdGEsIGVuZF9wb3MpOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4g Kwo+ICsgICAgICAgICAgICB3aGlzcGVyX3ZhZF9mcmVlX3NlZ21lbnRzKHNlZ21lbnRzKTsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBlbHNlIGlmICh3Y3R4LT5hdWRpb19idWZmZXJfZmls bF9zaXplID49IHdjdHgtPmF1ZGlvX2J1ZmZlcl9xdWV1ZV9zaXplKQo+ICsgICAgewo+ICsgICAg ICAgIHJ1bl90cmFuc2NyaXB0aW9uKGN0eCwgbWV0YWRhdGEsIHdjdHgtPmF1ZGlvX2J1ZmZlcl9m aWxsX3NpemUpOwo+ICsgICAgfQo+ICsKPiArICAgIHdjdHgtPm5leHRfcHRzID0gZnJhbWUtPnB0 cyArIGF2X3Jlc2NhbGVfcShmcmFtZS0+bmJfc2FtcGxlcywgKEFWUmF0aW9uYWwpezEsIGlubGlu ay0+c2FtcGxlX3JhdGV9LCBpbmxpbmstPnRpbWVfYmFzZSk7Cj4gKyAgICByZXR1cm4gZmZfZmls dGVyX2ZyYW1lKG91dGxpbmssIGZyYW1lKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwdXNoX2xh c3RfZnJhbWUoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQo+ICt7Cj4gKyAgICBBVkZpbHRlckNvbnRl eHQgKmN0eCA9IG91dGxpbmstPnNyYzsKPiArICAgIFdoaXNwZXJDb250ZXh0ICp3Y3R4ID0gY3R4 LT5wcml2Owo+ICsgICAgQVZGcmFtZSAqZnJhbWU7Cj4gKyAgICBpbnQgbl9vdXQgPSAxOwo+ICsK PiArICAgIGlmIChjdHgtPmlzX2Rpc2FibGVkIHx8IHdjdHgtPmF1ZGlvX2J1ZmZlcl9maWxsX3Np emUgPT0gMCkKPiArICAgICAgICByZXR1cm4gMDsKPiArICAgIGZyYW1lID0gZmZfZ2V0X2F1ZGlv X2J1ZmZlcihvdXRsaW5rLCBuX291dCk7Cj4gKyAgICBpZiAoIWZyYW1lKQo+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgYXZfc2FtcGxlc19zZXRfc2lsZW5jZShm cmFtZS0+ZXh0ZW5kZWRfZGF0YSwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9v dXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5jaF9sYXlvdXQubmJfY2hh bm5lbHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5mb3JtYXQpOwo+ICsK PiArICAgIGZyYW1lLT5wdHMgPSB3Y3R4LT5uZXh0X3B0czsKPiArICAgIGlmICh3Y3R4LT5uZXh0 X3B0cyAhPSBBVl9OT1BUU19WQUxVRSkKPiArICAgICAgICB3Y3R4LT5uZXh0X3B0cyArPSBhdl9y ZXNjYWxlX3Eobl9vdXQsIChBVlJhdGlvbmFsKXsxLCBvdXRsaW5rLT5zYW1wbGVfcmF0ZX0sIG91 dGxpbmstPnRpbWVfYmFzZSk7Cj4gKwo+ICsgICAgcnVuX3RyYW5zY3JpcHRpb24oY3R4LCAmZnJh bWUtPm1ldGFkYXRhLCB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9zaXplKTsKPiArCj4gKyAgICBy ZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIGZyYW1lKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBhY3RpdmF0ZShBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ICsgICAgQVZGaWx0ZXJM aW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsKPiArICAgIEFWRmlsdGVyTGluayAqb3V0bGlu ayA9IGN0eC0+b3V0cHV0c1swXTsKPiArICAgIFdoaXNwZXJDb250ZXh0ICp3Y3R4ID0gY3R4LT5w cml2Owo+ICsgICAgaW50NjRfdCBwdHM7Cj4gKyAgICBpbnQgc3RhdHVzOwo+ICsKPiArICAgIEZG X0ZJTFRFUl9GT1JXQVJEX1NUQVRVU19CQUNLKG91dGxpbmssIGlubGluayk7Cj4gKwo+ICsgICAg aWYgKCF3Y3R4LT5lb2YgJiYgZmZfaW5saW5rX3F1ZXVlZF9mcmFtZXMoaW5saW5rKSkKPiArICAg IHsKPiArICAgICAgICBBVkZyYW1lICpmcmFtZSA9IE5VTEw7Cj4gKyAgICAgICAgaW50IHJldDsK PiArCj4gKyAgICAgICAgcmV0ID0gZmZfaW5saW5rX2NvbnN1bWVfZnJhbWUoaW5saW5rLCAmZnJh bWUpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ ICsgICAgICAgIGlmIChyZXQgPiAwKQo+ICsgICAgICAgICAgICByZXR1cm4gZmlsdGVyX2ZyYW1l KGlubGluaywgZnJhbWUpOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICghd2N0eC0+ZW9mICYmIGZm X2lubGlua19hY2tub3dsZWRnZV9zdGF0dXMoaW5saW5rLCAmc3RhdHVzLCAmcHRzKSkKPiArICAg ICAgICB3Y3R4LT5lb2YgPSBzdGF0dXMgPT0gQVZFUlJPUl9FT0Y7Cj4gKwo+ICsgICAgaWYgKHdj dHgtPmVvZikKPiArICAgIHsKPiArICAgICAgICBwdXNoX2xhc3RfZnJhbWUob3V0bGluayk7Cj4g Kwo+ICsgICAgICAgIGZmX291dGxpbmtfc2V0X3N0YXR1cyhvdXRsaW5rLCBBVkVSUk9SX0VPRiwg d2N0eC0+bmV4dF9wdHMpOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAg IEZGX0ZJTFRFUl9GT1JXQVJEX1dBTlRFRChvdXRsaW5rLCBpbmxpbmspOwo+ICsKPiArICAgIHJl dHVybiBGRkVSUk9SX05PVF9SRUFEWTsKPiArfQo+ICsKPiArI2RlZmluZSBPRkZTRVQoeCkgb2Zm c2V0b2YoV2hpc3BlckNvbnRleHQsIHgpCj4gKyNkZWZpbmUgRkxBR1MgQVZfT1BUX0ZMQUdfQVVE SU9fUEFSQU0gfCBBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0KPiArCj4gK3N0YXRpYyBjb25z dCBBVk9wdGlvbiB3aGlzcGVyX29wdGlvbnNbXSA9IHsKPiArICAgIHsibW9kZWwiLCAiUGF0aCB0 byB0aGUgd2hpc3Blci5jcHAgbW9kZWwgZmlsZSIsIE9GRlNFVChtb2RlbF9wYXRoKSwgQVZfT1BU X1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBGTEFHU30sCj4gKyAgICB7Imxhbmd1YWdlIiwgIkxhbmd1 YWdlIGZvciB0cmFuc2NyaXB0aW9uICgnYXV0bycgZm9yIGF1dG8tZGV0ZWN0KSIsIE9GRlNFVChs YW5ndWFnZSksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSAiYXV0byJ9LCAuZmxhZ3MgPSBG TEFHU30sCj4gKyAgICB7InF1ZXVlIiwgIkF1ZGlvIHF1ZXVlIHNpemUgaW4gbWlsbGlzZWNvbmRz IiwgT0ZGU0VUKHF1ZXVlKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDMwMDB9LCAyMCwgSU5U X01BWCwgLmZsYWdzID0gRkxBR1N9LAo+ICsgICAgeyJ1c2VfZ3B1IiwgIlVzZSBHUFUgZm9yIHBy b2Nlc3NpbmciLCBPRkZTRVQodXNlX2dwdSksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0ID0gMX0s IDAsIDEsIC5mbGFncyA9IEZMQUdTfSwKPiArICAgIHsiZ3B1X2RldmljZSIsICJHUFUgZGV2aWNl IHRvIHVzZSIsIE9GRlNFVChncHVfZGV2aWNlKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDB9 LCAwLCBJTlRfTUFYLCAuZmxhZ3MgPSBGTEFHU30sCj4gKyAgICB7ImRlc3RpbmF0aW9uIiwgIk91 dHB1dCBkZXN0aW5hdGlvbiIsIE9GRlNFVChkZXN0aW5hdGlvbiksIEFWX09QVF9UWVBFX1NUUklO Rywgey5zdHIgPSAiIn0sIC5mbGFncyA9IEZMQUdTfSwKPiArICAgIHsiZm9ybWF0IiwgIk91dHB1 dCBmb3JtYXQgKHRleHR8c3J0fGpzb24pIiwgT0ZGU0VUKGZvcm1hdCksIEFWX09QVF9UWVBFX1NU UklORywgey5zdHIgPSAidGV4dCJ9LCAuZmxhZ3MgPSBGTEFHU30sCj4gKyAgICB7InZhZF9tb2Rl bCIsICJQYXRoIHRvIHRoZSBWQUQgbW9kZWwgZmlsZSIsIE9GRlNFVCh2YWRfbW9kZWxfcGF0aCks IEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gRkxBR1N9LAo+ICsgICAgeyJ2YWRfdGhyZXNo b2xkIiwgIlZBRCB0aHJlc2hvbGQiLCBPRkZTRVQodmFkX3RocmVzaG9sZCksIEFWX09QVF9UWVBF X0ZMT0FULCB7LmRibCA9IDAuNX0sIDAuMCwgMS4wLCAuZmxhZ3MgPSBGTEFHU30sCj4gKyAgICB7 InZhZF9taW5fc3BlZWNoX2R1cmF0aW9uIiwgIk1pbmltdW0gc3BlZWNoIGR1cmF0aW9uIGluIG1p bGxpc2Vjb25kcyBmb3IgVkFEIiwgT0ZGU0VUKHZhZF9taW5fc3BlZWNoX2R1cmF0aW9uKSwgQVZf T1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDUwfSwgMjAsIElOVF9NQVgsIC5mbGFncyA9IEZMQUdTfSwK PiArICAgIHsidmFkX21pbl9zaWxlbmNlX2R1cmF0aW9uIiwgIk1pbmltdW0gc2lsZW5jZSBkdXJh dGlvbiBpbiBtaWxsaXNlY29uZHMgZm9yIFZBRCIsIE9GRlNFVCh2YWRfbWluX3NpbGVuY2VfZHVy YXRpb24pLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gNTAwfSwgMCwgSU5UX01BWCwgLmZsYWdz ID0gRkxBR1N9LAo+ICsgICAge05VTEx9fTsKPiArCj4gK3N0YXRpYyBjb25zdCBBVkNsYXNzIHdo aXNwZXJfY2xhc3MgPSB7Cj4gKyAgICAuY2xhc3NfbmFtZSA9ICJ3aGlzcGVyIiwKPiArICAgIC5p dGVtX25hbWUgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPiArICAgIC5vcHRpb24gPSB3aGlzcGVy X29wdGlvbnMsCj4gKyAgICAudmVyc2lvbiA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCB3aGlzcGVyX291dHB1dHNbXSA9IHsKPiAr ICAgIHsKPiArICAgICAgICAubmFtZSA9ICJkZWZhdWx0IiwKPiArICAgICAgICAudHlwZSA9IEFW TUVESUFfVFlQRV9BVURJTywKPiArICAgIH0sCj4gK307Cj4gKwo+ICtjb25zdCBGRkZpbHRlciBm Zl9hZl93aGlzcGVyID0gewo+ICsgICAgLnAubmFtZSA9ICJ3aGlzcGVyIiwKPiArICAgIC5wLmRl c2NyaXB0aW9uID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIlRyYW5zY3JpYmUgYXVkaW8gdXNpbmcg d2hpc3Blci5jcHAuIiksCj4gKyAgICAucC5wcml2X2NsYXNzID0gJndoaXNwZXJfY2xhc3MsCj4g KyAgICAucC5mbGFncyA9IEFWRklMVEVSX0ZMQUdfTUVUQURBVEFfT05MWSwKPiArICAgIC5pbml0 ID0gaW5pdCwKPiArICAgIC51bmluaXQgPSB1bmluaXQsCj4gKyAgICAuYWN0aXZhdGUgPSBhY3Rp dmF0ZSwKPiArICAgIC5wcml2X3NpemUgPSBzaXplb2YoV2hpc3BlckNvbnRleHQpLAo+ICsgICAg RklMVEVSX0lOUFVUUyhmZl9hdWRpb19kZWZhdWx0X2ZpbHRlcnBhZCksCj4gKyAgICBGSUxURVJf T1VUUFVUUyh3aGlzcGVyX291dHB1dHMpLAo+ICsgICAgRklMVEVSX1NBTVBMRUZNVFMoQVZfU0FN UExFX0ZNVF9GTFQsIEFWX1NBTVBMRV9GTVRfRkxUUCksCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xp YmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwo+IGluZGV4 IDQwOTA5OWJmMWYuLmVhZjBjOGZlNmYgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIvYWxsZmls dGVycy5jCj4gKysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4gQEAgLTE2Myw2ICsxNjMs OCBAQCBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfYWZfdmlydHVhbGJhc3M7Cj4gZXh0ZXJuIGNv bnN0IEZGRmlsdGVyIGZmX2FmX3ZvbHVtZTsKPiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfYWZf dm9sdW1lZGV0ZWN0Owo+IAo+ICtleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfYWZfd2hpc3BlcjsK PiArCj4gZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX2FzcmNfYWV2YWxzcmM7Cj4gZXh0ZXJuIGNv bnN0IEZGRmlsdGVyIGZmX2FzcmNfYWZkZWxheXNyYzsKPiBleHRlcm4gY29uc3QgRkZGaWx0ZXIg ZmZfYXNyY19hZmlyZXFzcmM7Cj4gLS0gCj4gMi40My4wCj4gCj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0 Cj4gZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9s aXN0aW5mby9mZm1wZWctZGV2ZWwKPiAKPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92 ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVj dCAidW5zdWJzY3JpYmUiLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9y ZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVu c3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVz dEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=