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 0DF7349443 for ; Sat, 11 May 2024 14:09:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7A3D668D32A; Sat, 11 May 2024 17:09:12 +0300 (EEST) Received: from alt2.a-painless.mh.aa.net.uk (alt2.a-painless.mh.aa.net.uk [81.187.30.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 399C468D32A for ; Sat, 11 May 2024 17:09:05 +0300 (EEST) Received: from 7.5.0.5.5.a.f.3.4.1.7.9.3.6.9.9.0.5.8.0.9.1.8.0.0.b.8.0.1.0.0.2.ip6.arpa ([2001:8b0:819:850:9963:9714:3fa5:5057] helo=andrews-2024-laptop.sayers) by painless-a.thn.aa.net.uk with esmtp (Exim 4.96) (envelope-from ) id 1s5nPL-00EMgl-2b for ffmpeg-devel@ffmpeg.org; Sat, 11 May 2024 15:09:04 +0100 Date: Sat, 11 May 2024 15:08:57 +0100 From: Andrew Sayers To: FFmpeg development discussions and patches Message-ID: References: <20240510211219.213409-1-francois-simon.fauteux-chapleau@savoirfairelinux.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240510211219.213409-1-francois-simon.fauteux-chapleau@savoirfairelinux.com> Subject: Re: [FFmpeg-devel] [PATCH v2] libavfilter: add PipeWire-based grab 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 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: KG9ubHkgcmV2aWV3aW5nIHRoZSBkb2N1bWVudGF0aW9uLCBub3QgdGhlIGNvZGUgaXRzZWxmKQoK T24gRnJpLCBNYXkgMTAsIDIwMjQgYXQgMDU6MTI6MTlQTSAtMDQwMCwgRnJhbsOnb2lzLVNpbW9u IEZhdXRldXgtQ2hhcGxlYXUgd3JvdGU6Cj4gVGhpcyBpcyBhIHJldmlzZWQgdmVyc2lvbiBvZiB0 aGUgInBpcGV3aXJlZ3JhYiIgcGF0Y2ggc3VibWl0dGVkIGJ5Cj4gQWJoaXNoZWsgT2poYSBhIGZl dyBtb250aHMgYWdvOgo+IGh0dHBzOi8vcGF0Y2h3b3JrLmZmbXBlZy5vcmcvcHJvamVjdC9mZm1w ZWcvcGF0Y2gvMjAyMzEyMjcxNjI1MDQuNjkwNzMwLTEtYWJoaXNoZWsub2poYUBzYXZvaXJmYWly ZWxpbnV4LmNvbS8KPiBodHRwczovL3BhdGNod29yay5mZm1wZWcub3JnL3Byb2plY3QvZmZtcGVn L3BhdGNoLzIwMjMxMjI3MTYyNTA0LjY5MDczMC0yLWFiaGlzaGVrLm9qaGFAc2F2b2lyZmFpcmVs aW51eC5jb20vCj4gCj4gVGhlIG1haW4gY2hhbmdlIGlzIHRoYXQgdGhlIHBhdGNoIGlzIG5vdyBp bXBsZW1lbnRlZCBhcyBhIGxpYmF2ZmlsdGVyCj4gc291cmNlIGZpbHRlciBpbnN0ZWFkIG9mIGEg bGliYXZkZXZpY2UgaW5wdXQgZGV2aWNlLCBhcyB3YXMgcmVxdWVzdGVkIGluCj4gYSBjb21tZW50 IG9uIHRoZSBwcmV2aW91cyB2ZXJzaW9uLiBUaGlzIHZlcnNpb24gYWxzbyBhZGRzIHN1cHBvcnQg Zm9yCj4gRE1BIGJ1ZmZlciBzaGFyaW5nIGFuZCB1c2VzIHNkLWJ1cyBpbnN0ZWFkIG9mIEdEQnVz Lgo+IAo+IFRoZXJlIGFyZSBhbHNvIHNldmVyYWwgc21hbGwgY2hhbmdlcyBtZWFudCB0byBmaXgg YnVncyBvciBzaW1wbGlmeSB0aGUKPiBjb2RlLCBidXQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIHJl bWFpbnMgdGhlIHNhbWUgYXMgYmVmb3JlOiB3ZSB1c2UgdGhlCj4gU2NyZWVuQ2FzdCBpbnRlcmZh Y2UgcHJvdmlkZWQgYnkgWERHIERlc2t0b3AgUG9ydGFsIHRvIG9idGFpbiBhIGZpbGUKPiBkZXNj cmlwdG9yLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gY3JlYXRlIGEgUGlwZVdpcmUgc3RyZWFtLiBU aGUgZGF0YSBmcm9tCj4gdGhhdCBzdHJlYW0gY2FuIHRoZW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBm cmFtZXMgZm9yIEZGbXBlZy4KPiAKPiBFeGFtcGxlIHVzYWdlOgo+IGZmbXBlZyAtZiBsYXZmaSAt aSBwaXBld2lyZWdyYWIgXAo+ICAgICAgICAtdmYgJ2h3bWFwPWRlcml2ZV9kZXZpY2U9dmFhcGks c2NhbGVfdmFhcGk9Zm9ybWF0PW52MTInIFwKPiAgICAgICAgLWM6diBoMjY0X3ZhYXBpIC10IDEw IG91dHB1dC5tcDQKPiAKPiBTaWduZWQtb2ZmLWJ5OiBGcmFuw6dvaXMtU2ltb24gRmF1dGV1eC1D aGFwbGVhdSA8ZnJhbmNvaXMtc2ltb24uZmF1dGV1eC1jaGFwbGVhdUBzYXZvaXJmYWlyZWxpbnV4 LmNvbT4KPiAtLS0KPiAgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKwo+ ICBsaWJhdmZpbHRlci9NYWtlZmlsZSAgICAgICAgICAgIHwgICAgMSArCj4gIGxpYmF2ZmlsdGVy L2FsbGZpbHRlcnMuYyAgICAgICAgfCAgICAxICsKPiAgbGliYXZmaWx0ZXIvdnNyY19waXBld2ly ZWdyYWIuYyB8IDE0MzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA0IGZpbGVz IGNoYW5nZWQsIDE0NTEgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZm aWx0ZXIvdnNyY19waXBld2lyZWdyYWIuYwo+IAo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9j b25maWd1cmUKPiBpbmRleCBiZWIxZmE2ZDNjLi4wMjgwMjA0NTVlIDEwMDc1NQo+IC0tLSBhL2Nv bmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0zMDQsNiArMzA0LDcgQEAgRXh0ZXJuYWwg bGlicmFyeSBzdXBwb3J0Ogo+ICAgIC0tZW5hYmxlLWxpYnhjYi1zaG0gICAgICBlbmFibGUgWDEx IGdyYWJiaW5nIHNobSBjb21tdW5pY2F0aW9uIFthdXRvZGV0ZWN0XQo+ICAgIC0tZW5hYmxlLWxp YnhjYi14Zml4ZXMgICBlbmFibGUgWDExIGdyYWJiaW5nIG1vdXNlIHJlbmRlcmluZyBbYXV0b2Rl dGVjdF0KPiAgICAtLWVuYWJsZS1saWJ4Y2Itc2hhcGUgICAgZW5hYmxlIFgxMSBncmFiYmluZyBz aGFwZSByZW5kZXJpbmcgW2F1dG9kZXRlY3RdCj4gKyAgLS1lbmFibGUtbGlicGlwZXdpcmUgICAg IGVuYWJsZSBzY3JlZW4gZ3JhYmJpbmcgdXNpbmcgUGlwZVdpcmUgW2F1dG9kZXRlY3RdCj4gICAg LS1lbmFibGUtbGlieHZpZCAgICAgICAgIGVuYWJsZSBYdmlkIGVuY29kaW5nIHZpYSB4dmlkY29y ZSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlIE1QRUctNC9YdmlkIGVuY29k ZXIgZXhpc3RzIFtub10KPiAgICAtLWVuYWJsZS1saWJ4bWwyICAgICAgICAgZW5hYmxlIFhNTCBw YXJzaW5nIHVzaW5nIHRoZSBDIGxpYnJhcnkgbGlieG1sMiwgbmVlZGVkCj4gQEAgLTE4NDUsNiAr MTg0Niw4IEBAIEVYVEVSTkFMX0FVVE9ERVRFQ1RfTElCUkFSWV9MSVNUPSIKPiAgICAgIGxpYnhj Yl9zaG0KPiAgICAgIGxpYnhjYl9zaGFwZQo+ICAgICAgbGlieGNiX3hmaXhlcwo+ICsgICAgbGli cGlwZXdpcmUKPiArICAgIGxpYnN5c3RlbWQKPiAgICAgIGx6bWEKPiAgICAgIG1lZGlhZm91bmRh dGlvbgo+ICAgICAgbWV0YWwKPiBAQCAtMzg5NSw2ICszODk4LDcgQEAgcGFkX29wZW5jbF9maWx0 ZXJfZGVwcz0ib3BlbmNsIgo+ICBwYW5fZmlsdGVyX2RlcHM9InN3cmVzYW1wbGUiCj4gIHBlcnNw ZWN0aXZlX2ZpbHRlcl9kZXBzPSJncGwiCj4gIHBoYXNlX2ZpbHRlcl9kZXBzPSJncGwiCj4gK3Bp cGV3aXJlZ3JhYl9maWx0ZXJfZGVwcz0ibGlicGlwZXdpcmUgbGlic3lzdGVtZCBwdGhyZWFkcyIK PiAgcHA3X2ZpbHRlcl9kZXBzPSJncGwiCj4gIHBwX2ZpbHRlcl9kZXBzPSJncGwgcG9zdHByb2Mi Cj4gIHByZXdpdHRfb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCj4gQEAgLTcyMzAsNiArNzIz NCwxOCBAQCBpZiBlbmFibGVkIGxpYnhjYjsgdGhlbgo+ICAgICAgZW5hYmxlZCBsaWJ4Y2JfeGZp eGVzICYmIGNoZWNrX3BrZ19jb25maWcgbGlieGNiX3hmaXhlcyB4Y2IteGZpeGVzIHhjYi94Zml4 ZXMuaCB4Y2JfeGZpeGVzX2dldF9jdXJzb3JfaW1hZ2UKPiAgZmkKPiAgCj4gKyMgU3RhcnRpbmcg d2l0aCB2ZXJzaW9uIDAuMy41MiwgUGlwZVdpcmUncyBzcGEgbGlicmFyeSB1c2VzIHRoZSBfX0xP Q0FMRV9DX09OTFkgbWFjcm8gdG8gZGV0ZXJtaW5lCj4gKyMgd2hldGhlciB0aGUgbG9jYWxlX3Qg dHlwZSAoaW50cm9kdWNlZCBpbiBQT1NJWC4xLTIwMDgpIGFuZCBzb21lIHJlbGF0ZWQgZnVuY3Rp b25zIGFyZSBhdmFpbGFibGUgKHNlZQo+ICsjIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9y Zy9waXBld2lyZS9waXBld2lyZS8tL2lzc3Vlcy8yMzkwIGZvciBtb3JlIGluZm9ybWF0aW9uKS4K PiArIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1hY3JvIGlzIHNwZWNpZmljIHRvIHVjbGliYywgd2hp Y2ggY2FuIGNhdXNlIGJ1aWxkIGlzc3VlcyBvbiBzeXN0ZW1zIHRoYXQgdXNlIGEKPiArIyBkaWZm ZXJlbnQgaW1wbGVtZW50YXRpb24gb2YgbGliYyBpZiBQT1NJWCAyMDA4IHN1cHBvcnQgaXNuJ3Qg ZW5hYmxlZCAod2hpY2ggaXMgdGhlIGNhc2UgZm9yIEZGbXBlZyBjdXJyZW50bHkpLgo+ICsjIEFz IGEgd29ya2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtLCB3ZSBhZGQgYSBjb21waWxhdGlvbiBmbGFn IHRvIGVuc3VyZSB0aGF0IF9fTE9DQUxFX0NfT05MWSBpcyBhbHdheXMgZGVmaW5lZC4KPiArYWRk X2NwcGZsYWdzIC1EX19MT0NBTEVfQ19PTkxZCj4gK2VuYWJsZWQgbGlicGlwZXdpcmUgJiYgY2hl Y2tfcGtnX2NvbmZpZyBsaWJwaXBld2lyZSAibGlicGlwZXdpcmUtMC4zID49IDAuMy40MCIgcGlw ZXdpcmUvcGlwZXdpcmUuaCBwd19pbml0Cj4gK2lmIGVuYWJsZWQgbGlicGlwZXdpcmU7IHRoZW4K PiArICAgIGVuYWJsZWQgbGlic3lzdGVtZCAgJiYgY2hlY2tfcGtnX2NvbmZpZyBsaWJzeXN0ZW1k ICJsaWJzeXN0ZW1kID49IDI0NiIgc3lzdGVtZC9zZC1idXMuaCBzZF9idXNfY2FsbF9tZXRob2QK PiArZmkKPiArCj4gIGNoZWNrX2Z1bmNfaGVhZGVycyAid2luZG93cy5oIiBDcmVhdGVESUJTZWN0 aW9uICIkZ2RpZ3JhYl9pbmRldl9leHRyYWxpYnMiCj4gIAo+ICAjIGNoZWNrIGlmIGJ1aWxkaW5n IGZvciBkZXNrdG9wIG9yIHV3cAo+IGRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9NYWtlZmlsZSBi L2xpYmF2ZmlsdGVyL01ha2VmaWxlCj4gaW5kZXggNTk5MmZkMTYxZi4uNjM1MmU5MTU4NiAxMDA2 NDQKPiAtLS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2ZmlsdGVyL01ha2Vm aWxlCj4gQEAgLTYwMyw2ICs2MDMsNyBAQCBPQkpTLSQoQ09ORklHX05VTExTUkNfRklMVEVSKSAg ICAgICAgICAgICAgICArPSB2c3JjX3Rlc3RzcmMubwo+ICBPQkpTLSQoQ09ORklHX09QRU5DTFNS Q19GSUxURVIpICAgICAgICAgICAgICArPSB2Zl9wcm9ncmFtX29wZW5jbC5vIG9wZW5jbC5vCj4g IE9CSlMtJChDT05GSUdfUEFMNzVCQVJTX0ZJTFRFUikgICAgICAgICAgICAgICs9IHZzcmNfdGVz dHNyYy5vCj4gIE9CSlMtJChDT05GSUdfUEFMMTAwQkFSU19GSUxURVIpICAgICAgICAgICAgICs9 IHZzcmNfdGVzdHNyYy5vCj4gK09CSlMtJChDT05GSUdfUElQRVdJUkVHUkFCX0ZJTFRFUikgICAg ICAgICAgICs9IHZzcmNfcGlwZXdpcmVncmFiLm8KPiAgT0JKUy0kKENPTkZJR19RUkVOQ09ERV9G SUxURVIpICAgICAgICAgICAgICAgKz0gcXJlbmNvZGUubyB0ZXh0dXRpbHMubwo+ICBPQkpTLSQo Q09ORklHX1FSRU5DT0RFU1JDX0ZJTFRFUikgICAgICAgICAgICArPSBxcmVuY29kZS5vIHRleHR1 dGlscy5vCj4gIE9CSlMtJChDT05GSUdfUkdCVEVTVFNSQ19GSUxURVIpICAgICAgICAgICAgICs9 IHZzcmNfdGVzdHNyYy5vCj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBi L2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwo+IGluZGV4IGM1MzI2ODJmYzIuLjM2NzBhNmQ3ZTcg MTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4gKysrIGIvbGliYXZmaWx0 ZXIvYWxsZmlsdGVycy5jCj4gQEAgLTU2OSw2ICs1NjksNyBAQCBleHRlcm4gY29uc3QgQVZGaWx0 ZXIgZmZfdnNyY19vcGVuY2xzcmM7Cj4gIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92c3JjX3Fy ZW5jb2Rlc3JjOwo+ICBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19wYWw3NWJhcnM7Cj4g IGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92c3JjX3BhbDEwMGJhcnM7Cj4gK2V4dGVybiBjb25z dCBBVkZpbHRlciBmZl92c3JjX3BpcGV3aXJlZ3JhYjsKPiAgZXh0ZXJuIGNvbnN0IEFWRmlsdGVy IGZmX3ZzcmNfcmdidGVzdHNyYzsKPiAgZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZzcmNfc2ll cnBpbnNraTsKPiAgZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZzcmNfc21wdGViYXJzOwo+IGRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci92c3JjX3BpcGV3aXJlZ3JhYi5jIGIvbGliYXZmaWx0ZXIv dnNyY19waXBld2lyZWdyYWIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMC4uNTEwNzNjMjJiMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZpbHRlci92c3Jj X3BpcGV3aXJlZ3JhYi5jCj4gQEAgLTAsMCArMSwxNDMzIEBACj4gKy8qCj4gKyAqIFBpcGVXaXJl IGlucHV0IGdyYWJiZXIgKFNjcmVlbkNhc3QpCj4gKyAqIENvcHlyaWdodCAoQykgMjAyNCBTYXZv aXItZmFpcmUgTGludXgsIEluYy4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsvKioKPiArICogQGZp bGUKPiArICogUGlwZVdpcmVHcmFiIHZpZGVvIHNvdXJjZQo+ICsgKiBAYXV0aG9yIEZpcmFzIEFz aGthciA8ZmlyYXMuYXNoa2FyIGF0IHNhdm9pcmZhaXJlbGludXguY29tPgo+ICsgKiBAYXV0aG9y IEFiaGlzaGVrIE9qaGEgPGFiaGlzaGVrLm9qaGEgYXQgc2F2b2lyZmFpcmVsaW51eC5jb20+Cj4g KyAqIEBhdXRob3IgRnJhbsOnb2lzLVNpbW9uIEZhdXRldXgtQ2hhcGxlYXUgPGZyYW5jb2lzLXNp bW9uLmZhdXRldXgtY2hhcGxlYXUgYXQgc2F2b2lyZmFpcmVsaW51eC5jb20+Cj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgPGRybV9mb3VyY2MuaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNs dWRlIDxwaXBld2lyZS9waXBld2lyZS5oPgo+ICsjaW5jbHVkZSA8cGlwZXdpcmUvdGhyZWFkLWxv b3AuaD4KPiArI2luY2x1ZGUgPHB0aHJlYWQuaD4KPiArI2luY2x1ZGUgPHNwYS9kZWJ1Zy90eXBl cy5oPgo+ICsjaW5jbHVkZSA8c3BhL3BhcmFtL3ZpZGVvL2Zvcm1hdC11dGlscy5oPgo+ICsjaW5j bHVkZSA8c3BhL3BhcmFtL3ZpZGVvL3Jhdy5oPgo+ICsjaW5jbHVkZSA8c3BhL3BhcmFtL3ZpZGVv L3R5cGUtaW5mby5oPgo+ICsjaW5jbHVkZSA8c3RkYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxzdGRs aWIuaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4KPiAr I2luY2x1ZGUgPHN5c3RlbWQvc2QtYnVzLmg+Cj4gKyNpbmNsdWRlIDxzeXN0ZW1kL3NkLWJ1cy1w cm90b2NvbC5oPgo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gKwo+ICsjaW5jbHVkZSAiYXZmaWx0 ZXIuaCIKPiArI2luY2x1ZGUgImZvcm1hdHMuaCIKPiArI2luY2x1ZGUgInZpZGVvLmgiCj4gKwo+ ICsjaW5jbHVkZSAibGliYXZmb3JtYXQvYXZmb3JtYXQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRp bC9hdmFzc2VydC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvaHdjb250ZXh0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250 ZXh0X2RybS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL29wdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3RpbWUuaCIKPiArCj4gKyNpZm5k ZWYgX19VU0VfWE9QRU4ySzgKPiArI2RlZmluZSBGX0RVUEZEX0NMT0VYRUMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIDEwMzAg LyogRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvciB3aXRoIGNsb3NlLW9uLWV4aXQgc2V0LiAgKi8K PiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIERFU1RJTkFUSU9OICJvcmcuZnJlZWRlc2t0b3AucG9y dGFsLkRlc2t0b3AiCj4gKyNkZWZpbmUgU0VOREVSIERFU1RJTkFUSU9OCj4gKyNkZWZpbmUgT0JK RUNUX1BBVEggIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3AiCj4gKyNkZWZpbmUgSU5U RVJGQUNFICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlNjcmVlbkNhc3QiCj4gKyNkZWZpbmUgUkVR VUVTVF9QQVRIICIvb3JnL2ZyZWVkZXNrdG9wL3BvcnRhbC9kZXNrdG9wL3JlcXVlc3QvJXMvJXMi Cj4gKwo+ICsjZGVmaW5lIEJZVEVTX1BFUl9QSVhFTCA0IC8qIGN1cnJlbnRseSBhbGwgZm9ybWF0 cyBhc3N1bWUgNCBieXRlcyBwZXIgcGl4ZWwgKi8KPiArI2RlZmluZSBNQVhfU1BBX1BBUkFNIDQg LyogbWF4IG51bWJlciBvZiBwYXJhbXMgZm9yIHNwYSBwb2QgKi8KPiArCj4gKy8qKgo+ICsgKiBQ aXBlV2lyZSBjYXB0dXJlIHR5cGVzCj4gKyAqLwo+ICt0eXBlZGVmIGVudW0gewo+ICsgICAgREVT S1RPUF9DQVBUVVJFID0gMSwKPiArICAgIFdJTkRPV19DQVBUVVJFID0gMiwKPiArfSBwd19jYXB0 dXJlX3R5cGU7Cj4gKwo+ICsvKioKPiArICogWERHIERlc2t0b3AgUG9ydGFsIHN1cHBvcnRlZCBj dXJzb3IgbW9kZXMKPiArICovCj4gK2VudW0gUG9ydGFsQ3Vyc29yTW9kZSB7Cj4gKyAgICBQT1JU QUxfQ1VSU09SX01PREVfSElEREVOID0gMSA8PCAwLAo+ICsgICAgUE9SVEFMX0NVUlNPUl9NT0RF X0VNQkVEREVEID0gMSA8PCAxLAo+ICt9Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgUGlwZXdpcmVH cmFiQ29udGV4dCB7Cj4gKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKPiArCj4gKyAgICBzZF9i dXMgKmNvbm5lY3Rpb247Cj4gKyAgICBhdG9taWNfaW50IGRidXNfZXZlbnRfbG9vcF9ydW5uaW5n Owo+ICsgICAgY2hhciAqc2VuZGVyX25hbWU7Cj4gKyAgICBjaGFyICpzZXNzaW9uX2hhbmRsZTsK PiArCj4gKyAgICB1aW50NjRfdCBwaXBld2lyZV9ub2RlOwo+ICsgICAgaW50IHBpcGV3aXJlX2Zk Owo+ICsKPiArICAgIHB0aHJlYWRfY29uZF90IHBpcGV3aXJlX2luaXRpYWxpemF0aW9uX2NvbmRf dmFyOwo+ICsgICAgcHRocmVhZF9tdXRleF90IHBpcGV3aXJlX2luaXRpYWxpemF0aW9uX211dGV4 Owo+ICsgICAgYXRvbWljX2ludCBwaXBld2lyZV9pbml0aWFsaXphdGlvbl9vdmVyOwo+ICsgICAg aW50IHB3X2luaXRfY2FsbGVkOwo+ICsgICAgc3RydWN0IHB3X3RocmVhZF9sb29wICp0aHJlYWRf bG9vcDsKPiArICAgIHN0cnVjdCBwd19jb250ZXh0ICpjb250ZXh0Owo+ICsgICAgc3RydWN0IHB3 X2NvcmUgKmNvcmU7Cj4gKyAgICBzdHJ1Y3Qgc3BhX2hvb2sgY29yZV9saXN0ZW5lcjsKPiArICAg IHN0cnVjdCBwd19zdHJlYW0gKnN0cmVhbTsKPiArICAgIHN0cnVjdCBzcGFfaG9vayBzdHJlYW1f bGlzdGVuZXI7Cj4gKyAgICBzdHJ1Y3Qgc3BhX3ZpZGVvX2luZm8gZm9ybWF0Owo+ICsKPiArICAg IHVpbnQzMl90IGF2YWlsYWJsZV9jdXJzb3JfbW9kZXM7Cj4gKyAgICBwd19jYXB0dXJlX3R5cGUg Y2FwdHVyZV90eXBlOwo+ICsgICAgaW50IGRyYXdfbW91c2U7Cj4gKwo+ICsgICAgdWludDMyX3Qg d2lkdGgsIGhlaWdodDsKPiArICAgIHNpemVfdCBmcmFtZV9zaXplOwo+ICsgICAgdWludDhfdCBC cHA7Cj4gKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgYXZfcHhsX2Zvcm1hdDsKPiArCj4gKyAgICBp bnQ2NF90IHRpbWVfZnJhbWU7Cj4gKyAgICBpbnQ2NF90IGZyYW1lX2R1cmF0aW9uOwo+ICsgICAg QVZSYXRpb25hbCBmcmFtZXJhdGU7Cj4gKyAgICBwdGhyZWFkX211dGV4X3QgY3VycmVudF9mcmFt ZV9tdXRleDsKPiArICAgIEFWRnJhbWUgKmN1cnJlbnRfZnJhbWU7Cj4gKyAgICBBVkJ1ZmZlclJl ZiAqaHdfZGV2aWNlX3JlZjsKPiArICAgIEFWQnVmZmVyUmVmICpod19mcmFtZXNfcmVmOwo+ICsg ICAgaW50IGVuYWJsZV9kbWFidWY7Cj4gKyAgICBjb25zdCBjaGFyICpkZXZpY2VfcGF0aDsKPiAr Cj4gKyAgICBpbnQgcG9ydGFsX2Vycm9yOwo+ICsgICAgaW50IHBpcGV3aXJlX2Vycm9yOwo+ICt9 IFBpcGV3aXJlR3JhYkNvbnRleHQ7Cj4gKwo+ICsvKioKPiArICogRGF0YSBmb3IgREJ1cyBzaWdu YWxzIGNhbGxiYWNrcwo+ICsgKi8KPiArc3RydWN0IERidXNTaWduYWxEYXRhIHsKPiArICAgIEFW RmlsdGVyQ29udGV4dCAqY3R4Owo+ICsgICAgc2RfYnVzX3Nsb3QgKnNsb3Q7Cj4gK307Cj4gKwo+ ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihQaXBld2lyZUdyYWJDb250ZXh0LCB4KQo+ICsj ZGVmaW5lIEZMQUdTIEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTXxBVl9PUFRfRkxBR19WSURF T19QQVJBTQo+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gcGlwZXdpcmVncmFiX29wdGlvbnNbXSA9 IHsKPiArICAgIHsgImZyYW1lcmF0ZSIsICJzZXQgdmlkZW8gZnJhbWUgcmF0ZSIsIE9GRlNFVChm cmFtZXJhdGUpLCBBVl9PUFRfVFlQRV9WSURFT19SQVRFLCB7IC5zdHIgPSAibnRzYyIgfSwgMCwg SU5UX01BWCwgRkxBR1MgfSwKPiArICAgIHsgImRyYXdfbW91c2UiLCAiZHJhdyB0aGUgbW91c2Ug cG9pbnRlciIsIE9GRlNFVChkcmF3X21vdXNlKSwgQVZfT1BUX1RZUEVfQk9PTCwgeyAuaTY0ID0g MSB9LCAwLCAxLCBGTEFHUyB9LAo+ICsgICAgeyAiY2FwdHVyZV90eXBlIiwgInNldCB0aGUgY2Fw dHVyZSB0eXBlICgxIGZvciBzY3JlZW4sIDIgZm9yIHdpbmRvdykiLCBPRkZTRVQoY2FwdHVyZV90 eXBlKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAxIH0sIDEsIDIsIEZMQUdTIH0sCj4gKyAg ICB7ICJmZCIsICJzZXQgZmlsZSBkZXNjcmlwdG9yIHRvIGJlIHVzZWQgYnkgUGlwZVdpcmUiLCBP RkZTRVQocGlwZXdpcmVfZmQpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgSU5U X01BWCwgRkxBR1MgfSwKPiArICAgIHsgIm5vZGUiLCAic2V0IFBpcGVXaXJlIG5vZGUgKHJlcXVp cmVkIHdoZW4gdXNpbmcgdGhlICdmZCcgb3B0aW9uKSIsIE9GRlNFVChwaXBld2lyZV9ub2RlKSwg QVZfT1BUX1RZUEVfVUlOVDY0LCB7IC5pNjQgPSAwIH0sIDAsIDB4ZmZmZmZmZmYsIEZMQUdTIH0s Cj4gKyAgICB7ICJlbmFibGVfZG1hYnVmIiwgImVuYWJsZSBETUEtQlVGIHNoYXJpbmciLCBPRkZT RVQoZW5hYmxlX2RtYWJ1ZiksIEFWX09QVF9UWVBFX0JPT0wsIHsgLmk2NCA9IDEgfSwgMCwgMSwg RkxBR1MgfSwKPiArICAgIHsgImRldmljZSIsICJEUk0gZGV2aWNlIHBhdGgiLCBPRkZTRVQoZGV2 aWNlX3BhdGgpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgLnN0ciA9ICIvZGV2L2RyaS9jYXJkMCIg fSwgMCwgMCwgRkxBR1MgfSwKPiArICAgIHsgTlVMTCB9LAo+ICt9Owo+ICsKPiArQVZGSUxURVJf REVGSU5FX0NMQVNTKHBpcGV3aXJlZ3JhYik7Cj4gKwo+ICsvKioKPiArICogSGVscGVyIGZ1bmN0 aW9uIHRvIGFsbG93IHBvcnRhbF9pbml0X3NjcmVlbmNhc3QgdG8gc3RvcCBhbmQgcmV0dXJuIGFu IGVycm9yCj4gKyAqIGNvZGUgaWYgYSBEQnVzIG9wZXJhdGlvbi9jYWxsYmFjayBmYWlscy4KCkhl cmUgYW5kIGJlbG93LCBzZXZlcmFsIGNvbW1lbnRzIGJlZ2luIHdpdGggIkhlbHBlciBmdW5jdGlv bi4uLiIsICJmdW5jdGlvbiBpcwpjYWxsZWQgYnkuLi4iIGV0Yy4gIFRoZSByZWFkZXIgYWxyZWFk eSBrbm93cyB0aGlzIGEgZnVuY3Rpb24gZnJvbSB0aGUgY29udGV4dCwKc28gdGhlIGRvY3VtZW50 YXRpb24gd291bGQgYmUgbW9yZSBlZmZpY2llbnQgd2l0aG91dCB0aGVzZSByZWR1bmRhbnQgcHJl Zml4ZXMuCgo+ICsgKgo+ICsgKiBAcGFyYW0gY3R4Cj4gKyAqIEBwYXJhbSBlcnJvciBBVkVSUk9S IGNvZGUgKG5lZ2F0aXZlKQo+ICsgKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBtZXNzYWdlCj4gKyAq Lwo+ICtzdGF0aWMgdm9pZCBwb3J0YWxfYWJvcnQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGludCBl cnJvciwgY29uc3QgY2hhciAqbWVzc2FnZSkKPiArewo+ICsgICAgUGlwZXdpcmVHcmFiQ29udGV4 dCAqcHdfY3R4ID0gY3R4LT5wcml2Owo+ICsKPiArICAgIHB3X2N0eC0+cG9ydGFsX2Vycm9yID0g ZXJyb3I7Cj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJBYm9ydGluZzogJXNcbiIs IG1lc3NhZ2UpOwo+ICsKPiArICAgIGF0b21pY19zdG9yZSgmcHdfY3R4LT5kYnVzX2V2ZW50X2xv b3BfcnVubmluZywgMCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBDYWxsYmFjayB0byBoYW5kbGUg UGlwZVdpcmUgY29yZSBpbmZvIGV2ZW50cwoKSSdkIGFyZ3VlICJDYWxsYmFjayB0byIgaXMgcmVk dW5kYW50IGhlcmUgaW4gdGhlIHNhbWUgd2F5IGFzICJGdW5jdGlvbiIsCmJ1dCBub3QgcXVpdGUg c3VjaCBhIHByb2JsZW0uCgo+ICsgKgo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIHBvaW50ZXIgdG8g QVZGaWx0ZXJDb250ZXh0Cj4gKyAqIEBwYXJhbSBpbmZvIHB3X2NvcmVfaW5mbwo+ICsgKi8KPiAr c3RhdGljIHZvaWQgb25fY29yZV9pbmZvX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgY29uc3Qg c3RydWN0IHB3X2NvcmVfaW5mbyAqaW5mbykKPiArewo+ICsgICAgQVZGaWx0ZXJDb250ZXh0ICpj dHggPSB1c2VyX2RhdGE7Cj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJTZXJ2ZXIg dmVyc2lvbjogJXNcbiIsIGluZm8tPnZlcnNpb24pOwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0lORk8sICJMaWJyYXJ5IHZlcnNpb246ICVzXG4iLCBwd19nZXRfbGlicmFyeV92ZXJzaW9uKCkp Owo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiSGVhZGVyIHZlcnNpb246ICVzXG4i LCBwd19nZXRfaGVhZGVyc192ZXJzaW9uKCkpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogQ2FsbGJh Y2sgdG8gaGFuZGxlIFBpcGVXaXJlIGNvcmUgZG9uZSBldmVudHMKPiArICoKPiArICogQHBhcmFt IHVzZXJfZGF0YSBwb2ludGVyIHRvIEFWRmlsdGVyQ29udGV4dAo+ICsgKiBAcGFyYW0gaWQgUGlw ZVdpcmUgb2JqZWN0IGlkIG9mIGNhbGxpbmcKPiArICogQHBhcmFtIHNlcSBQaXBlV2lyZSBvYmpl Y3Qgc2VxdWVuY2UKPiArICovCj4gK3N0YXRpYyB2b2lkIG9uX2NvcmVfZG9uZV9jYWxsYmFjayh2 b2lkICp1c2VyX2RhdGEsIHVpbnQzMl90IGlkLCBpbnQgc2VxKQo+ICt7Cj4gKyAgICBBVkZpbHRl ckNvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3 X2N0eDsKPiArCj4gKyAgICBpZiAoIWN0eCB8fCAhY3R4LT5wcml2KQo+ICsgICAgICAgIHJldHVy bjsKPiArICAgIHB3X2N0eCA9IGN0eC0+cHJpdjsKPiArCj4gKyAgICBpZiAoaWQgPT0gUFdfSURf Q09SRSkKPiArICAgICAgICBwd190aHJlYWRfbG9vcF9zaWduYWwocHdfY3R4LT50aHJlYWRfbG9v cCwgZmFsc2UpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogQ2FsbGJhY2sgdG8gaGFuZGxlIFBpcGV3 aXJlIGNvcmUgZXJyb3IgZXZlbnRzCj4gKyAqCj4gKyAqIEBwYXJhbSB1c2VyX2RhdGEgcG9pbnRl ciB0byBBVkZpbHRlckNvbnRleHQKPiArICogQHBhcmFtIGlkIGlkIG9mIFBpcGVXaXJlIHByb3h5 IG9iamVjdCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJlZAo+ICsgKiBAcGFyYW0gc2VxIFBpcGVXaXJl IHNlcXVlbmNlIG51bWJlciB3aGljaCBwcm9kdWNlZCB0aGUgZXJyb3IKPiArICogQHBhcmFtIHJl cyBlcnJvciBudW1iZXIKCk5pdHBpY2s6ICJlcnJvciBudW1iZXIiIG1pZ2h0IGJlIGJldHRlciBh cyAiUGlwZVdpcmUgZXJyb3IgbnVtYmVyIiBoZXJlPwpKdXN0IGluIGNhc2Ugc29tZW9uZSBza2lw LXJlYWRzIHBhc3QgYW5kIGFzc3VtZXMgdGhpcyBpcyBhbiBBVkVycm9yLgoKPiArICogQHBhcmFt IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZQo+ICsgKi8KPiArc3RhdGljIHZvaWQgb25fY29yZV9lcnJv cl9jYWxsYmFjayh2b2lkICp1c2VyX2RhdGEsIHVpbnQzMl90IGlkLCBpbnQgc2VxLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXMsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpCj4gK3sKPiArICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gdXNlcl9kYXRhOwo+ICsgICAg UGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4Owo+ICsKPiArICAgIGlmICghY3R4KQo+ICsgICAg ICAgIHJldHVybjsKPiArCj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAg ICAgICAgIlBpcGVXaXJlIGNvcmUgZXJyb3I6ICVzIChpZD0ldSwgc2VxPSVkLCByZXM9JWQ6ICVz KVxuIiwKPiArICAgICAgICAgICBtZXNzYWdlLCBpZCwgc2VxLCByZXMsIHN0cmVycm9yKC1yZXMp KTsKPiArCj4gKyAgICBwd19jdHggPSBjdHgtPnByaXY7Cj4gKyAgICBpZiAoIXB3X2N0eCkKPiAr ICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAgcHdfdGhyZWFkX2xvb3Bfc2lnbmFsKHB3X2N0eC0+ dGhyZWFkX2xvb3AsIGZhbHNlKTsKPiArICAgIHB3X2N0eC0+cGlwZXdpcmVfZXJyb3IgPSByZXM7 Cj4gKyAgICBhdG9taWNfc3RvcmUoJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRpb25fb3Zl ciwgMSk7Cj4gKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZwd19jdHgtPnBpcGV3aXJlX2luaXRp YWxpemF0aW9uX2NvbmRfdmFyKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFBpcGVXaXJlIGNvcmUg ZXZlbnRzIGNhbGxiYWNrcwo+ICsgKi8KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwd19jb3JlX2V2 ZW50cyBjb3JlX2V2ZW50cyA9IHsKPiArICAgIFBXX1ZFUlNJT05fQ09SRV9FVkVOVFMsCj4gKyAg ICAuaW5mbyA9IG9uX2NvcmVfaW5mb19jYWxsYmFjaywKPiArICAgIC5kb25lID0gb25fY29yZV9k b25lX2NhbGxiYWNrLAo+ICsgICAgLmVycm9yID0gb25fY29yZV9lcnJvcl9jYWxsYmFjaywKPiAr fTsKPiArCj4gKy8qKgo+ICsgKiBIZWxwZXIgZnVuY3Rpb246IGNvbnZlcnQgc3BhIHZpZGVvIGZv cm1hdCB0byBBVlBpeGVsRm9ybWF0Cj4gKyAqCj4gKyAqIEBwYXJhbSB2aWRlb19mb3JtYXQgc3Bh IHZpZGVvIGZvcm1hdCB0byBjb252ZXJ0Cj4gKyAqIEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcg QVZQaXhlbEZvcm1hdAo+ICsgKi8KPiArc3RhdGljIGVudW0gQVZQaXhlbEZvcm1hdAo+ICtzcGFf dmlkZW9fZm9ybWF0X3RvX2F2X3BpeGVsX2Zvcm1hdChlbnVtIHNwYV92aWRlb19mb3JtYXQgdmlk ZW9fZm9ybWF0KQo+ICt7Cj4gKyAgICBzd2l0Y2ggKHZpZGVvX2Zvcm1hdCkgewo+ICsgICAgY2Fz ZSBTUEFfVklERU9fRk9STUFUX1JHQkE6Cj4gKyAgICBjYXNlIFNQQV9WSURFT19GT1JNQVRfUkdC eDoKPiArICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9SR0JBOwo+ICsKPiArICAgIGNhc2UgU1BB X1ZJREVPX0ZPUk1BVF9CR1JBOgo+ICsgICAgY2FzZSBTUEFfVklERU9fRk9STUFUX0JHUng6Cj4g KyAgICAgICAgcmV0dXJuIEFWX1BJWF9GTVRfQkdSQTsKPiArCj4gKyAgICBkZWZhdWx0Ogo+ICsg ICAgICAgIHJldHVybiBBVl9QSVhfRk1UX05PTkU7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRp YyB1aW50MzJfdCBzcGFfdmlkZW9fZm9ybWF0X3RvX2RybV9mb3JtYXQoZW51bSBzcGFfdmlkZW9f Zm9ybWF0IHZpZGVvX2Zvcm1hdCkKPiArewo+ICsgICAgc3dpdGNoICh2aWRlb19mb3JtYXQpIHsK PiArICAgIGNhc2UgU1BBX1ZJREVPX0ZPUk1BVF9SR0JBOgo+ICsgICAgICAgIHJldHVybiBEUk1f Rk9STUFUX0FCR1I4ODg4Owo+ICsgICAgY2FzZSBTUEFfVklERU9fRk9STUFUX1JHQng6Cj4gKyAg ICAgICAgcmV0dXJuIERSTV9GT1JNQVRfWEJHUjg4ODg7Cj4gKyAgICBjYXNlIFNQQV9WSURFT19G T1JNQVRfQkdSQToKPiArICAgICAgICByZXR1cm4gRFJNX0ZPUk1BVF9BUkdCODg4ODsKPiArICAg IGNhc2UgU1BBX1ZJREVPX0ZPUk1BVF9CR1J4Ogo+ICsgICAgICAgIHJldHVybiBEUk1fRk9STUFU X1hSR0I4ODg4Owo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICByZXR1cm4gRFJNX0ZPUk1BVF9J TlZBTElEOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgdWludDMyX3QgcGlwZXdp cmVncmFiX2Zvcm1hdHNbXSA9IHsKPiArICAgIFNQQV9WSURFT19GT1JNQVRfUkdCQSwKPiArICAg IFNQQV9WSURFT19GT1JNQVRfUkdCeCwKPiArICAgIFNQQV9WSURFT19GT1JNQVRfQkdSeCwKPiAr ICAgIFNQQV9WSURFT19GT1JNQVRfQkdSQSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1aW50 NjRfdCBwaXBld2lyZWdyYWJfZGVmYXVsdF9tb2RpZmllcnNbXSA9IHsKPiArICAgIERSTV9GT1JN QVRfTU9EX0xJTkVBUiwKPiArICAgIERSTV9GT1JNQVRfTU9EX0lOVkFMSUQsCj4gK307Cj4gKwo+ ICsvKioKPiArICogUGlwZVdpcmUgY2FsbGJhY2sgb2YgcGFyYW1ldGVycyBjaGFuZ2VkIGV2ZW50 cwo+ICsgKgo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIHBvaW50ZXIgdG8gQVZGaWx0ZXJDb250ZXh0 Cj4gKyAqIEBwYXJhbSBpZCB0eXBlIG9mIGNoYW5nZWQgcGFyYW0KPiArICogQHBhcmFtIHBhcmFt IHBvaW50ZXIgdG8gY2hhbmdlZCBwYXJhbSBzdHJ1Y3R1cmUKPiArICovCj4gK3N0YXRpYyB2b2lk IG9uX3N0cmVhbV9wYXJhbV9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgdWludDMy X3QgaWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBzcGFfcG9kICpwYXJhbSkKPiArewo+ICsgICAgc3RydWN0IHNwYV9wb2RfYnVp bGRlciBwb2RfYnVpbGRlcjsKPiArICAgIGNvbnN0IHN0cnVjdCBzcGFfcG9kICpwYXJhbXNbTUFY X1NQQV9QQVJBTV07Cj4gKyAgICB1aW50MzJfdCBuX3BhcmFtcyA9IDA7Cj4gKyAgICB1aW50MzJf dCBidWZmZXJfdHlwZXM7Cj4gKyAgICB1aW50OF90IHBhcmFtc19idWZmZXJbNDA5Nl07Cj4gKyAg ICBpbnQgcmVzdWx0Owo+ICsgICAgaW50IGVycjsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQg KnB3X2N0eDsKPiArICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gdXNlcl9kYXRhOwo+ICsgICAg QVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lc19jdHggPSBOVUxMOwo+ICsKPiArICAgIGlmICghY3R4 IHx8ICFjdHgtPnByaXYgfHwgIXBhcmFtKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBp ZiAoaWQgIT0gU1BBX1BBUkFNX0Zvcm1hdCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19XQVJOSU5HLAo+ICsgICAgICAgICAgICAgICAiSWdub3Jpbmcgbm9uLUZvcm1hdCBwYXJhbSBj aGFuZ2VcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBwd19jdHgg PSBjdHgtPnByaXY7Cj4gKwo+ICsgICAgcmVzdWx0ID0gc3BhX2Zvcm1hdF9wYXJzZShwYXJhbSwg JnB3X2N0eC0+Zm9ybWF0Lm1lZGlhX3R5cGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZwd19jdHgtPmZvcm1hdC5tZWRpYV9zdWJ0eXBlKTsKPiArICAgIGlmIChyZXN1bHQgPCAw KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHBhcnNl IG1lZGlhIHR5cGVcbiIpOwo+ICsgICAgICAgIHB3X2N0eC0+cGlwZXdpcmVfZXJyb3IgPSBBVkVS Uk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYg KHB3X2N0eC0+Zm9ybWF0Lm1lZGlhX3R5cGUgIT0gU1BBX01FRElBX1RZUEVfdmlkZW8gfHwKPiAr ICAgICAgICBwd19jdHgtPmZvcm1hdC5tZWRpYV9zdWJ0eXBlICE9IFNQQV9NRURJQV9TVUJUWVBF X3Jhdykgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQg bWVkaWEgdHlwZVxuIik7Cj4gKyAgICAgICAgcHdfY3R4LT5waXBld2lyZV9lcnJvciA9IEFWRVJS T1IoRUlOVkFMKTsKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICBzcGFf Zm9ybWF0X3ZpZGVvX3Jhd19wYXJzZShwYXJhbSwgJnB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3KTsK PiArCj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIk5lZ290aWF0ZWQgZm9ybWF0Olxu Iik7Cj4gKwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJGb3JtYXQ6ICVkICglcylc biIsCj4gKyAgICAgICAgICAgcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcuZm9ybWF0LAo+ICsgICAg ICAgICAgIHNwYV9kZWJ1Z190eXBlX2ZpbmRfbmFtZShzcGFfdHlwZV92aWRlb19mb3JtYXQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8u cmF3LmZvcm1hdCkpOwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJTaXplOiAlZHgl ZFxuIiwKPiArICAgICAgICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5zaXplLndpZHRoLAo+ ICsgICAgICAgICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNpemUuaGVpZ2h0KTsKPiArICAg IGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiRnJhbWVyYXRlOiAlZC8lZFxuIiwKPiArICAgICAg ICAgICBwd19jdHgtPmZvcm1hdC5pbmZvLnJhdy5mcmFtZXJhdGUubnVtLAo+ICsgICAgICAgICAg IHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LmZyYW1lcmF0ZS5kZW5vbSk7Cj4gKwo+ICsgICAgcHdf Y3R4LT53aWR0aCA9IHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNpemUud2lkdGg7Cj4gKyAgICBw d19jdHgtPmhlaWdodCA9IHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNpemUuaGVpZ2h0Owo+ICsg ICAgcHdfY3R4LT5CcHAgPSBCWVRFU19QRVJfUElYRUw7Cj4gKyAgICBwd19jdHgtPmZyYW1lX3Np emUgPSBwd19jdHgtPndpZHRoICogcHdfY3R4LT5oZWlnaHQgKiBwd19jdHgtPkJwcDsKPiArICAg IGlmIChwd19jdHgtPmZyYW1lX3NpemUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFID4g SU5UX01BWCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNhcHR1cmVk IGFyZWEgaXMgdG9vIGxhcmdlXG4iKTsKPiArICAgICAgICBwd19jdHgtPnBpcGV3aXJlX2Vycm9y ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiAr ICAgIHB3X2N0eC0+YXZfcHhsX2Zvcm1hdCA9Cj4gKyAgICAgICAgc3BhX3ZpZGVvX2Zvcm1hdF90 b19hdl9waXhlbF9mb3JtYXQocHdfY3R4LT5mb3JtYXQuaW5mby5yYXcuZm9ybWF0KTsKPiArICAg IGlmIChwd19jdHgtPmF2X3B4bF9mb3JtYXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7Cj4gKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiVW5zdXBwb3J0 ZWQgYnVmZmVyIGZvcm1hdDogJWRcbiIsIHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LmZvcm1hdCk7 Cj4gKyAgICAgICAgcHdfY3R4LT5waXBld2lyZV9lcnJvciA9IEFWRVJST1IoRUlOVkFMKTsKPiAr ICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgICAvKiBWaWRlbyBjcm9wICovCj4g KyAgICBwb2RfYnVpbGRlciA9IFNQQV9QT0RfQlVJTERFUl9JTklUKHBhcmFtc19idWZmZXIsIHNp emVvZihwYXJhbXNfYnVmZmVyKSk7Cj4gKyAgICBwYXJhbXNbbl9wYXJhbXMrK10gPSBzcGFfcG9k X2J1aWxkZXJfYWRkX29iamVjdCgKPiArICAgICAgICAmcG9kX2J1aWxkZXIsIFNQQV9UWVBFX09C SkVDVF9QYXJhbU1ldGEsIFNQQV9QQVJBTV9NZXRhLAo+ICsgICAgICAgIFNQQV9QQVJBTV9NRVRB X3R5cGUsIFNQQV9QT0RfSWQoU1BBX01FVEFfVmlkZW9Dcm9wKSwKPiArICAgICAgICBTUEFfUEFS QU1fTUVUQV9zaXplLCBTUEFfUE9EX0ludChzaXplb2Yoc3RydWN0IHNwYV9tZXRhX3JlZ2lvbikp KTsKPiArCj4gKyAgICAvKiBCdWZmZXIgb3B0aW9ucyAqLwo+ICsgICAgYnVmZmVyX3R5cGVzID0g KDEgPDwgU1BBX0RBVEFfTWVtUHRyKSB8ICgxIDw8IFNQQV9EQVRBX01lbUZkKTsKPiArICAgIGlm IChzcGFfcG9kX2ZpbmRfcHJvcChwYXJhbSwgTlVMTCwgU1BBX0ZPUk1BVF9WSURFT19tb2RpZmll cikpIHsKPiArICAgICAgICBlcnIgPSBhdl9od2RldmljZV9jdHhfY3JlYXRlKCZwd19jdHgtPmh3 X2RldmljZV9yZWYsIEFWX0hXREVWSUNFX1RZUEVfRFJNLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHdfY3R4LT5kZXZpY2VfcGF0aCwgTlVMTCwgMCk7Cj4gKyAgICAg ICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgICAgIGdvdG8gaHdfZmFpbDsKPiArCj4gKyAgICAg ICAgcHdfY3R4LT5od19mcmFtZXNfcmVmID0gYXZfaHdmcmFtZV9jdHhfYWxsb2MocHdfY3R4LT5o d19kZXZpY2VfcmVmKTsKPiArICAgICAgICBpZiAoIXB3X2N0eC0+aHdfZnJhbWVzX3JlZikgewo+ ICsgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgICAgIGdvdG8g aHdfZmFpbDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZnJhbWVzX2N0eCA9IChBVkhXRnJhbWVz Q29udGV4dCopcHdfY3R4LT5od19mcmFtZXNfcmVmLT5kYXRhOwo+ICsgICAgICAgIGZyYW1lc19j dHgtPmZvcm1hdCAgICA9IEFWX1BJWF9GTVRfRFJNX1BSSU1FOwo+ICsgICAgICAgIGZyYW1lc19j dHgtPnN3X2Zvcm1hdCA9IHB3X2N0eC0+YXZfcHhsX2Zvcm1hdDsKPiArICAgICAgICBmcmFtZXNf Y3R4LT53aWR0aCAgICAgPSBwd19jdHgtPndpZHRoOwo+ICsgICAgICAgIGZyYW1lc19jdHgtPmhl aWdodCAgICA9IHB3X2N0eC0+aGVpZ2h0Owo+ICsgICAgICAgIGVyciA9IGF2X2h3ZnJhbWVfY3R4 X2luaXQocHdfY3R4LT5od19mcmFtZXNfcmVmKTsKPiAraHdfZmFpbDoKPiArICAgICAgICBpZiAo IWVycikgewo+ICsgICAgICAgICAgICBidWZmZXJfdHlwZXMgfD0gMSA8PCBTUEFfREFUQV9EbWFC dWY7Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X1dBUk5JTkcsCj4gKyAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgaGFy ZHdhcmUgZnJhbWVzIGNvbnRleHQ6ICVzLiAiCj4gKyAgICAgICAgICAgICAgICAgICAiRmFsbGlu ZyBiYWNrIHRvIHNoYXJlZCBtZW1vcnlcbiIsIGF2X2VycjJzdHIoZXJyKSk7Cj4gKyAgICAgICAg fQo+ICsgICAgfQo+ICsKPiArICAgIHBhcmFtc1tuX3BhcmFtcysrXSA9IHNwYV9wb2RfYnVpbGRl cl9hZGRfb2JqZWN0KAo+ICsgICAgICAgICZwb2RfYnVpbGRlciwgU1BBX1RZUEVfT0JKRUNUX1Bh cmFtQnVmZmVycywgU1BBX1BBUkFNX0J1ZmZlcnMsCj4gKyAgICAgICAgU1BBX1BBUkFNX0JVRkZF UlNfZGF0YVR5cGUsCj4gKyAgICAgICAgU1BBX1BPRF9JbnQoYnVmZmVyX3R5cGVzKSk7Cj4gKwo+ ICsgICAgLyogTWV0YSBoZWFkZXIgKi8KPiArICAgIHBhcmFtc1tuX3BhcmFtcysrXSA9IHNwYV9w b2RfYnVpbGRlcl9hZGRfb2JqZWN0KAo+ICsgICAgICAgICZwb2RfYnVpbGRlciwgU1BBX1RZUEVf T0JKRUNUX1BhcmFtTWV0YSwgU1BBX1BBUkFNX01ldGEsCj4gKyAgICAgICAgU1BBX1BBUkFNX01F VEFfdHlwZSwgU1BBX1BPRF9JZChTUEFfTUVUQV9IZWFkZXIpLAo+ICsgICAgICAgIFNQQV9QQVJB TV9NRVRBX3NpemUsCj4gKyAgICAgICAgU1BBX1BPRF9JbnQoc2l6ZW9mKHN0cnVjdCBzcGFfbWV0 YV9oZWFkZXIpKSk7Cj4gKwo+ICsgICAgcHdfc3RyZWFtX3VwZGF0ZV9wYXJhbXMocHdfY3R4LT5z dHJlYW0sIHBhcmFtcywgbl9wYXJhbXMpOwo+ICsKPiArZW5kOgo+ICsgICAgLy8gU2lnbmFsIHBp cGV3aXJlZ3JhYl9pbml0IHRoYXQgUGlwZVdpcmUgaW5pdGlhbGl6YXRpb24gaXMgb3ZlciAoZWl0 aGVyCj4gKyAgICAvLyBiZWNhdXNlIGl0IHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9yIGJl Y2F1c2UgdGhlcmUgd2FzIGFuIGVycm9yLCBpbgo+ICsgICAgLy8gd2hpY2ggY2FzZSBwd19jdHgt PnBpcGV3aXJlX2Vycm9yIHdpbGwgaGF2ZSBiZWVuIHNldCB0byBhIG5vbnplcm8gdmFsdWUpLgo+ ICsgICAgYXRvbWljX3N0b3JlKCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX292ZXIs IDEpOwo+ICsgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmcHdfY3R4LT5waXBld2lyZV9pbml0aWFs aXphdGlvbl9jb25kX3Zhcik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBQaXBlV2lyZSBjYWxsYmFj ayBvZiBzdGF0ZSBjaGFuZ2VkIGV2ZW50cwo+ICsgKgo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIHBv aW50ZXIgdG8gQVZGaWx0ZXJDb250ZXh0Cj4gKyAqIEBwYXJhbSBvbGQgb2xkIFBpcGVXaXJlIHN0 cmVhbSBzdGF0ZQo+ICsgKiBAcGFyYW0gc3RhdGUgY3VycmVudCBQaXBlV2lyZSBzdHJlYW0gc3Rh dGUKPiArICogQHBhcmFtIGVycm9yIHJlY2VpdmVkIGVycm9yIGluZm9ybWF0aW9uCj4gKyAqLwo+ ICtzdGF0aWMgdm9pZCBvbl9zdHJlYW1fc3RhdGVfY2hhbmdlZF9jYWxsYmFjayh2b2lkICp1c2Vy X2RhdGEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gcHdfc3RyZWFtX3N0YXRlIG9sZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBwd19zdHJlYW1fc3RhdGUgc3RhdGUsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9yKQo+ICt7 Cj4gKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKPiArICAgIGlmICghY3R4 KQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywg InN0cmVhbSBzdGF0ZTogXCIlc1wiXG4iLAo+ICsgICAgICAgICAgIHB3X3N0cmVhbV9zdGF0ZV9h c19zdHJpbmcoc3RhdGUpKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEZpbmQgbW9zdCByZWNlbnQg YnVmZmVyIHJlY2VpdmVkIGluIGEgUGlwZVdpcmUgc3RyZWFtCj4gKyAqCj4gKyAqIEBwYXJhbSBz dHJlYW0gc3RyZWFtIHRvIGdldCBidWZmZXIgZnJvbQo+ICsgKiBAcmV0dXJuIG1vc3QgcmVjZW50 IGJ1ZmZlciBpbiB0aGUgc3RyZWFtCj4gKyAqLwo+ICtzdGF0aWMgc3RydWN0IHB3X2J1ZmZlciAq ZmluZF9tb3N0X3JlY2VudF9idWZmZXJfYW5kX3JlY3ljbGVfb2xkZXJzKHN0cnVjdCBwd19zdHJl YW0gKnN0cmVhbSkKPiArewo+ICsgICAgc3RydWN0IHB3X2J1ZmZlciAqcHdfYnVmID0gTlVMTDsK PiArICAgIHdoaWxlICgxKSB7Cj4gKyAgICAgICAgc3RydWN0IHB3X2J1ZmZlciAqYXV4ID0gcHdf c3RyZWFtX2RlcXVldWVfYnVmZmVyKHN0cmVhbSk7Cj4gKyAgICAgICAgaWYgKCFhdXgpCj4gKyAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGlmIChwd19idWYpCj4gKyAgICAgICAgICAgIHB3 X3N0cmVhbV9xdWV1ZV9idWZmZXIoc3RyZWFtLCBwd19idWYpOwo+ICsgICAgICAgIHB3X2J1ZiA9 IGF1eDsKPiArICAgIH0KPiArICAgIHJldHVybiBwd19idWY7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGZyZWVfZnJhbWVfZGVzYyh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmRhdGEpCj4gK3sKPiAr ICAgIEFWRFJNRnJhbWVEZXNjcmlwdG9yICpmcmFtZV9kZXNjID0gKEFWRFJNRnJhbWVEZXNjcmlw dG9yICopZGF0YTsKPiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lX2Rlc2MtPm5i X29iamVjdHM7IGkrKykKPiArICAgICAgICBjbG9zZShmcmFtZV9kZXNjLT5vYmplY3RzW2ldLmZk KTsKPiArICAgIGF2X2ZyZWUoZnJhbWVfZGVzYyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBy b2Nlc3NfZG1hX2J1ZmZlcihBVkZpbHRlckNvbnRleHQgKmN0eCwgc3RydWN0IHNwYV9idWZmZXIg KnNwYV9idWYpCj4gK3sKPiArICAgIEFWRnJhbWUgKmZyYW1lID0gTlVMTDsKPiArICAgIEFWRFJN RnJhbWVEZXNjcmlwdG9yICpmcmFtZV9kZXNjID0gTlVMTDsKPiArICAgIGludCByZXQ7Cj4gKyAg ICBpbnQgbl9wbGFuZXM7Cj4gKyAgICBzaXplX3Qgc2l6ZTsKPiArICAgIHVpbnQzMl90IG9mZnNl dCwgcGl0Y2g7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7 Cj4gKwo+ICsgICAgbl9wbGFuZXMgPSBzcGFfYnVmLT5uX2RhdGFzOwo+ICsgICAgYXZfYXNzZXJ0 MChuX3BsYW5lcyA8PSBBVl9EUk1fTUFYX1BMQU5FUyk7Cj4gKwo+ICsgICAgLy8gQ3JlYXRlIGZy YW1lIGRlc2NyaXB0b3IKPiArICAgIGZyYW1lX2Rlc2MgPSBhdl9tYWxsb2N6KHNpemVvZigqZnJh bWVfZGVzYykpOwo+ICsgICAgaWYgKCFmcmFtZV9kZXNjKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lIGRlc2NyaXB0b3JcbiIp Owo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArICAgICpmcmFtZV9kZXNjID0gKEFW RFJNRnJhbWVEZXNjcmlwdG9yKSB7Cj4gKyAgICAgICAgLm5iX29iamVjdHMgPSBuX3BsYW5lcywK PiArICAgICAgICAubmJfbGF5ZXJzID0gMSwKPiArICAgICAgICAubGF5ZXJzWzBdID0gewo+ICsg ICAgICAgICAgICAuZm9ybWF0ID0gc3BhX3ZpZGVvX2Zvcm1hdF90b19kcm1fZm9ybWF0KHB3X2N0 eC0+Zm9ybWF0LmluZm8ucmF3LmZvcm1hdCksCj4gKyAgICAgICAgICAgIC5uYl9wbGFuZXMgPSBu X3BsYW5lcywKPiArICAgICAgICB9LAo+ICsgICAgfTsKPiArICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbl9wbGFuZXM7IGkrKykgewo+ICsgICAgICAgIG9mZnNldCA9IHNwYV9idWYtPmRhdGFzW2ld LmNodW5rLT5vZmZzZXQ7Cj4gKyAgICAgICAgcGl0Y2ggPSBzcGFfYnVmLT5kYXRhc1tpXS5jaHVu ay0+c3RyaWRlOwo+ICsgICAgICAgIHNpemUgPSBvZmZzZXQgKyBwaXRjaCAqIHB3X2N0eC0+aGVp Z2h0Owo+ICsKPiArICAgICAgICBmcmFtZV9kZXNjLT5vYmplY3RzW2ldID0gKEFWRFJNT2JqZWN0 RGVzY3JpcHRvcikgewo+ICsgICAgICAgICAgICAuZmQgICAgICAgICAgICAgID0gc3BhX2J1Zi0+ ZGF0YXNbaV0uZmQsCj4gKyAgICAgICAgICAgIC5zaXplICAgICAgICAgICAgPSBzaXplLAo+ICsg ICAgICAgICAgICAuZm9ybWF0X21vZGlmaWVyID0gcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcubW9k aWZpZXIsCj4gKyAgICAgICAgfTsKPiArICAgICAgICBmcmFtZV9kZXNjLT5sYXllcnNbMF0ucGxh bmVzW2ldID0gKEFWRFJNUGxhbmVEZXNjcmlwdG9yKSB7Cj4gKyAgICAgICAgICAgIC5vYmplY3Rf aW5kZXggPSBpLAo+ICsgICAgICAgICAgICAub2Zmc2V0ICAgICAgID0gb2Zmc2V0LAo+ICsgICAg ICAgICAgICAucGl0Y2ggICAgICAgID0gcGl0Y2gsCj4gKyAgICAgICAgfTsKPiArICAgIH0KPiAr Cj4gKyAgICAvLyBDcmVhdGUgZnJhbWUKPiArICAgIGZyYW1lID0gYXZfZnJhbWVfYWxsb2MoKTsK PiArICAgIGlmICghZnJhbWUpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJGYWlsZWQgdG8gYWxsb2NhdGUgZnJhbWVcbiIpOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiAr ICAgIH0KPiArICAgIGZyYW1lLT5od19mcmFtZXNfY3R4ID0gYXZfYnVmZmVyX3JlZihwd19jdHgt Pmh3X2ZyYW1lc19yZWYpOwo+ICsgICAgaWYgKCFmcmFtZS0+aHdfZnJhbWVzX2N0eCkgewo+ICsg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgYnVmZmVy IHJlZmVyZW5jZVxuIik7Cj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsgICAgZnJh bWUtPmJ1ZlswXSA9IGF2X2J1ZmZlcl9jcmVhdGUoKHVpbnQ4X3QgKilmcmFtZV9kZXNjLCBzaXpl b2YoKmZyYW1lX2Rlc2MpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnJlZV9mcmFtZV9kZXNjLCBOVUxMLCAwKTsKPiArICAgIGlmICghZnJhbWUtPmJ1ZlswXSkgewo+ ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgYnVm ZmVyXG4iKTsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKyAgICBmcmFtZS0+ZGF0 YVswXSA9ICh1aW50OF90ICopZnJhbWVfZGVzYzsKPiArICAgIGZyYW1lLT5mb3JtYXQgID0gQVZf UElYX0ZNVF9EUk1fUFJJTUU7Cj4gKyAgICBmcmFtZS0+d2lkdGggPSBwd19jdHgtPndpZHRoOwo+ ICsgICAgZnJhbWUtPmhlaWdodCA9IHB3X2N0eC0+aGVpZ2h0Owo+ICsKPiArICAgIC8vIFVwZGF0 ZSBjdXJyZW50X2ZyYW1lCj4gKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnB3X2N0eC0+Y3VycmVu dF9mcmFtZV9tdXRleCk7Cj4gKyAgICBhdl9mcmFtZV91bnJlZihwd19jdHgtPmN1cnJlbnRfZnJh bWUpOwo+ICsgICAgcmV0ID0gYXZfZnJhbWVfcmVmKHB3X2N0eC0+Y3VycmVudF9mcmFtZSwgZnJh bWUpOwo+ICsgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnB3X2N0eC0+Y3VycmVudF9mcmFtZV9t dXRleCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgZnJhbWUgcmVmZXJlbmNlXG4iKTsKPiArICAgICAg ICBhdl9mcmFtZV9mcmVlKCZmcmFtZSk7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm47Cj4gKwo+ICtm YWlsOgo+ICsgICAgYXZfZnJlZXAoJmZyYW1lX2Rlc2MpOwo+ICsgICAgYXZfZnJhbWVfZnJlZSgm ZnJhbWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcm9jZXNzX3NobV9idWZmZXIoQVZGaWx0 ZXJDb250ZXh0ICpjdHgsIHN0cnVjdCBzcGFfYnVmZmVyICpzcGFfYnVmKQo+ICt7Cj4gKyAgICB1 aW50OF90ICptYXAgPSBOVUxMOwo+ICsgICAgdm9pZCAqc2RhdGEgPSBOVUxMOwo+ICsgICAgc3Ry dWN0IHNwYV9tZXRhX3JlZ2lvbiAqcmVnaW9uOwo+ICsgICAgaW50IGNyb3BfbGVmdCwgY3JvcF9y aWdodCwgY3JvcF90b3AsIGNyb3BfYm90dG9tOwo+ICsgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAq cHdfY3R4ID0gY3R4LT5wcml2Owo+ICsKPiArICAgIC8vIEdldCBkYXRhCj4gKyAgICBpZiAoc3Bh X2J1Zi0+ZGF0YXNbMF0udHlwZSA9PSBTUEFfREFUQV9NZW1GZCApIHsKPiArICAgICAgICBtYXAg PSBtbWFwKE5VTEwsIHNwYV9idWYtPmRhdGFzWzBdLm1heHNpemUgKyBzcGFfYnVmLT5kYXRhc1sw XS5tYXBvZmZzZXQsCj4gKyAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQsIE1BUF9QUklWQVRF LCBzcGFfYnVmLT5kYXRhc1swXS5mZCwgMCk7Cj4gKyAgICAgICAgaWYgKG1hcCA9PSBNQVBfRkFJ TEVEKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIm1tYXAgZmFp bGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKPiArICAgICAgICAgICAgcmV0dXJuOwo+ICsg ICAgICAgIH0KPiArICAgICAgICBzZGF0YSA9IFNQQV9QVFJPRkYobWFwLCBzcGFfYnVmLT5kYXRh c1swXS5tYXBvZmZzZXQsIHVpbnQ4X3QpOwo+ICsgICAgfSBlbHNlIGlmIChzcGFfYnVmLT5kYXRh c1swXS50eXBlID09IFNQQV9EQVRBX01lbVB0cikgewo+ICsgICAgICAgIGlmIChzcGFfYnVmLT5k YXRhc1swXS5kYXRhID09IE5VTEwpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiTm8gZGF0YSBpbiBidWZmZXJcbiIpOwo+ICsgICAgICAgICAgICByZXR1cm47Cj4g KyAgICAgICAgfQo+ICsgICAgICAgIHNkYXRhID0gc3BhX2J1Zi0+ZGF0YXNbMF0uZGF0YTsKPiAr ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQnVmZmVy IGlzIG5vdCB2YWxpZFxuIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAg IHJlZ2lvbiA9IHNwYV9idWZmZXJfZmluZF9tZXRhX2RhdGEoc3BhX2J1ZiwgU1BBX01FVEFfVmlk ZW9Dcm9wLCBzaXplb2YoKnJlZ2lvbikpOwo+ICsgICAgaWYgKHJlZ2lvbiAmJiBzcGFfbWV0YV9y ZWdpb25faXNfdmFsaWQocmVnaW9uKSkgewo+ICsgICAgICAgIGNyb3BfbGVmdCA9IHJlZ2lvbi0+ cmVnaW9uLnBvc2l0aW9uLng7Cj4gKyAgICAgICAgY3JvcF90b3AgPSByZWdpb24tPnJlZ2lvbi5w b3NpdGlvbi55Owo+ICsgICAgICAgIGNyb3BfcmlnaHQgPSBwd19jdHgtPndpZHRoIC0gY3JvcF9s ZWZ0IC0gcmVnaW9uLT5yZWdpb24uc2l6ZS53aWR0aDsKPiArICAgICAgICBjcm9wX2JvdHRvbSA9 IHB3X2N0eC0+aGVpZ2h0IC0gY3JvcF90b3AgLSByZWdpb24tPnJlZ2lvbi5zaXplLmhlaWdodDsK PiArICAgIH0KPiArCj4gKyAgICAvLyBVcGRhdGUgY3VycmVudF9mcmFtZSB3aXRoIHRoZSBuZXcg ZGF0YQo+ICsgICAgcHRocmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0 ZXgpOwo+ICsgICAgbWVtY3B5KHB3X2N0eC0+Y3VycmVudF9mcmFtZS0+ZGF0YVswXSwgc2RhdGEs IHNwYV9idWYtPmRhdGFzWzBdLmNodW5rLT5zaXplKTsKPiArICAgIHB3X2N0eC0+Y3VycmVudF9m cmFtZS0+Y3JvcF90b3AgPSBjcm9wX3RvcDsKPiArICAgIHB3X2N0eC0+Y3VycmVudF9mcmFtZS0+ Y3JvcF9ib3R0b20gPSBjcm9wX2JvdHRvbTsKPiArICAgIHB3X2N0eC0+Y3VycmVudF9mcmFtZS0+ Y3JvcF9sZWZ0ID0gY3JvcF9sZWZ0Owo+ICsgICAgcHdfY3R4LT5jdXJyZW50X2ZyYW1lLT5jcm9w X3JpZ2h0ID0gY3JvcF9yaWdodDsKPiArICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwd19jdHgt PmN1cnJlbnRfZnJhbWVfbXV0ZXgpOwo+ICsKPiArICAgIC8vIENsZWFudXAKPiArICAgIGlmIChz cGFfYnVmLT5kYXRhc1swXS50eXBlID09IFNQQV9EQVRBX01lbUZkKQo+ICsgICAgICAgIG11bm1h cChtYXAsIHNwYV9idWYtPmRhdGFzWzBdLm1heHNpemUgKyBzcGFfYnVmLT5kYXRhc1swXS5tYXBv ZmZzZXQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkg UGlwZVdpcmUgd2hlbiBhIGJ1ZmZlcgo+ICsgKiBpcyByZWFkeSB0byBiZSBkZXF1ZXVlZCBhbmQg cHJvY2Vzc2VkLgo+ICsgKgo+ICsgKiBAcGFyYW0gdXNlcl9kYXRhIHBvaW50ZXIgdG8gQVZGaWx0 ZXJDb250ZXh0Cj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBvbl9zdHJlYW1fcHJvY2Vzc19jYWxsYmFj ayh2b2lkICp1c2VyX2RhdGEpCj4gK3sKPiArICAgIHN0cnVjdCBzcGFfYnVmZmVyICpzcGFfYnVm Owo+ICsgICAgc3RydWN0IHB3X2J1ZmZlciAqcHdfYnVmID0gTlVMTDsKPiArICAgIHN0cnVjdCBz cGFfbWV0YV9oZWFkZXIgKmhlYWRlciA9IE5VTEw7Cj4gKwo+ICsgICAgQVZGaWx0ZXJDb250ZXh0 ICpjdHggPSB1c2VyX2RhdGE7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHg7Cj4g KyAgICBpZiAoIWN0eCB8fCAhY3R4LT5wcml2KQo+ICsgICAgICAgIHJldHVybjsKPiArICAgIHB3 X2N0eCA9IGN0eC0+cHJpdjsKPiArCj4gKyAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHB3X2N0 eC0+Y3VycmVudF9mcmFtZSB0byBoYXZlIGJlZW4gYWxsb2NhdGVkIGJlZm9yZQo+ICsgICAgLy8g d2UgY2FuIHVzZSBpdCB0byBnZXQgZnJhbWVzIGZyb20gdGhlIFBpcGVXaXJlIHRocmVhZCB0byBG Rm1wZWcKPiArICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211 dGV4KTsKPiArICAgIGlmICghcHdfY3R4LT5jdXJyZW50X2ZyYW1lKSB7Cj4gKyAgICAgICAgcHRo cmVhZF9tdXRleF91bmxvY2soJnB3X2N0eC0+Y3VycmVudF9mcmFtZV9tdXRleCk7Cj4gKyAgICAg ICAgcmV0dXJuOwo+ICsgICAgfQo+ICsgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnB3X2N0eC0+ Y3VycmVudF9mcmFtZV9tdXRleCk7Cj4gKwo+ICsgICAgcHdfYnVmID0gZmluZF9tb3N0X3JlY2Vu dF9idWZmZXJfYW5kX3JlY3ljbGVfb2xkZXJzKHB3X2N0eC0+c3RyZWFtKTsKPiArICAgIGlmICgh cHdfYnVmKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiT3V0IG9mIGJ1 ZmZlcnNcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBzcGFfYnVm ID0gcHdfYnVmLT5idWZmZXI7Cj4gKyAgICBoZWFkZXIgPSBzcGFfYnVmZmVyX2ZpbmRfbWV0YV9k YXRhKHNwYV9idWYsIFNQQV9NRVRBX0hlYWRlciwgc2l6ZW9mKCpoZWFkZXIpKTsKPiArICAgIGlm IChoZWFkZXIgJiYgKGhlYWRlci0+ZmxhZ3MgJiBTUEFfTUVUQV9IRUFERVJfRkxBR19DT1JSVVBU RUQpKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ29ycnVwdGVkIFBp cGVXaXJlIGJ1ZmZlclxuIik7Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgaWYgKHNwYV9idWYtPmRhdGFzWzBdLnR5cGUgPT0gU1BBX0RBVEFfRG1hQnVmKQo+ICsgICAg ICAgIHByb2Nlc3NfZG1hX2J1ZmZlcihjdHgsIHNwYV9idWYpOwo+ICsgICAgZWxzZQo+ICsgICAg ICAgIHByb2Nlc3Nfc2htX2J1ZmZlcihjdHgsIHNwYV9idWYpOwo+ICsKPiArZW5kOgo+ICsgICAg cHdfc3RyZWFtX3F1ZXVlX2J1ZmZlcihwd19jdHgtPnN0cmVhbSwgcHdfYnVmKTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBwd19zdHJlYW1fZXZlbnRzIHN0cmVhbV9ldmVudHMgPSB7 Cj4gKyAgICBQV19WRVJTSU9OX1NUUkVBTV9FVkVOVFMsCj4gKyAgICAuc3RhdGVfY2hhbmdlZCA9 IG9uX3N0cmVhbV9zdGF0ZV9jaGFuZ2VkX2NhbGxiYWNrLAo+ICsgICAgLnBhcmFtX2NoYW5nZWQg PSBvbl9zdHJlYW1fcGFyYW1fY2hhbmdlZF9jYWxsYmFjaywKPiArICAgIC5wcm9jZXNzID0gb25f c3RyZWFtX3Byb2Nlc3NfY2FsbGJhY2ssCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHN1YnNjcmli ZV90b19zaWduYWwoQVZGaWx0ZXJDb250ZXh0ICpjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpzZW5kZXJfbmFtZSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlcXVlc3RfdG9rZW4sCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZF9idXNfbWVzc2FnZV9oYW5kbGVyX3QgY2FsbGJhY2spCj4gK3sK PiArICAgIGludCByZXQ7Cj4gKyAgICBjaGFyICpyZXF1ZXN0X3BhdGg7Cj4gKyAgICBzdHJ1Y3Qg RGJ1c1NpZ25hbERhdGEgKmRidXNfc2lnbmFsX2RhdGE7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250 ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cj4gKwo+ICsgICAgZGJ1c19zaWduYWxfZGF0YSA9IChz dHJ1Y3QgRGJ1c1NpZ25hbERhdGEgKilhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgRGJ1c1NpZ25h bERhdGEpKTsKPiArICAgIGlmICghZGJ1c19zaWduYWxfZGF0YSkKPiArICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgIGRidXNfc2lnbmFsX2RhdGEtPmN0eCA9IGN0eDsK PiArICAgIHJlcXVlc3RfcGF0aCA9IGF2X2FzcHJpbnRmKFJFUVVFU1RfUEFUSCwgc2VuZGVyX25h bWUsIHJlcXVlc3RfdG9rZW4pOwo+ICsKPiArICAgIHJldCA9IHNkX2J1c19tYXRjaF9zaWduYWwo cHdfY3R4LT5jb25uZWN0aW9uLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGJ1 c19zaWduYWxfZGF0YS0+c2xvdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VO REVSLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X3BhdGgsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlJlcXVl c3QiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzcG9uc2UiLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGJ1c19zaWduYWxfZGF0YSk7Cj4gKyAgICBhdl9mcmVlKHJlcXVlc3RfcGF0 aCk7Cj4gKyAgICByZXR1cm4gKHJldCA8IDApID8gcmV0IDogMDsKPiArfQo+ICsKPiArc3RhdGlj IHN0cnVjdCBzcGFfcG9kICpidWlsZF9mb3JtYXQoUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3BhX3BvZF9i dWlsZGVyICpidWlsZGVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBmb3JtYXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ2NF90ICptb2RpZmllcnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBuX21vZGlmaWVycykKPiArewo+ICsgICAgc3RydWN0IHNwYV9wb2RfZnJhbWUg Zm9ybWF0X2ZyYW1lOwo+ICsgICAgc3RydWN0IHNwYV9wb2RfZnJhbWUgbW9kaWZpZXJfZnJhbWU7 Cj4gKwo+ICsgICAgc3BhX3BvZF9idWlsZGVyX3B1c2hfb2JqZWN0KGJ1aWxkZXIsICZmb3JtYXRf ZnJhbWUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBX1RZUEVfT0JKRUNU X0Zvcm1hdCwgU1BBX1BBUkFNX0VudW1Gb3JtYXQpOwo+ICsgICAgc3BhX3BvZF9idWlsZGVyX2Fk ZChidWlsZGVyLCBTUEFfRk9STUFUX21lZGlhVHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgU1BBX1BPRF9JZChTUEFfTUVESUFfVFlQRV92aWRlbyksIDApOwo+ICsgICAgc3BhX3BvZF9i dWlsZGVyX2FkZChidWlsZGVyLCBTUEFfRk9STUFUX21lZGlhU3VidHlwZSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgU1BBX1BPRF9JZChTUEFfTUVESUFfU1VCVFlQRV9yYXcpLCAwKTsKPiAr ICAgIHNwYV9wb2RfYnVpbGRlcl9hZGQoYnVpbGRlciwgU1BBX0ZPUk1BVF9WSURFT19mb3JtYXQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFNQQV9QT0RfSWQoZm9ybWF0KSwgMCk7Cj4gKyAg ICBzcGFfcG9kX2J1aWxkZXJfYWRkKGJ1aWxkZXIsIFNQQV9GT1JNQVRfVklERU9fc2l6ZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgU1BBX1BPRF9DSE9JQ0VfUkFOR0VfUmVjdGFuZ2xlKAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNQQV9SRUNUQU5HTEUoMzIwLCAyNDApLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNQQV9SRUNUQU5HTEUoMSwgMSksCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmU1BBX1JFQ1RBTkdMRSg0MDk2LCA0MDk2KQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICApLCAwKTsKPiArICAgIHNwYV9wb2RfYnVpbGRlcl9hZGQo YnVpbGRlciwgU1BBX0ZPUk1BVF9WSURFT19mcmFtZXJhdGUsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIFNQQV9QT0RfQ0hPSUNFX1JBTkdFX0ZyYWN0aW9uKAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJlNQQV9GUkFDVElPTihwd19jdHgtPmZyYW1lcmF0ZS5udW0sIHB3X2N0eC0+ ZnJhbWVyYXRlLmRlbiksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU1BBX0ZSQUNU SU9OKDAsIDEpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNQQV9GUkFDVElPTigx NDQsIDEpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICksIDApOwo+ICsgICAgaWYgKG5fbW9k aWZpZXJzID4gMCkgewo+ICsgICAgICAgIHNwYV9wb2RfYnVpbGRlcl9wcm9wKGJ1aWxkZXIsIFNQ QV9GT1JNQVRfVklERU9fbW9kaWZpZXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U1BBX1BPRF9QUk9QX0ZMQUdfTUFOREFUT1JZIHwgU1BBX1BPRF9QUk9QX0ZMQUdfRE9OVF9GSVhB VEUpOwo+ICsgICAgICAgIHNwYV9wb2RfYnVpbGRlcl9wdXNoX2Nob2ljZShidWlsZGVyLCAmbW9k aWZpZXJfZnJhbWUsIFNQQV9DSE9JQ0VfRW51bSwgMCk7Cj4gKwo+ICsgICAgICAgIC8vIEEgY2hv aWNlIFBPRCBjb25zaXN0cyBvZiBhICJkZWZhdWx0IiB2YWx1ZSBmb2xsb3dlZCBieSB0aGUgbGlz dCBvZgo+ICsgICAgICAgIC8vIGFsbCBwb3NzaWJsZSB2YWx1ZXMgKGh0dHBzOi8vZG9jcy5waXBl d2lyZS5vcmcvcGFnZV9zcGFfcG9kLmh0bWwpCj4gKyAgICAgICAgLy8gVGhpcyBpcyB3aHkgd2Ug bmVlZCB0byBhZGQgb25lIG9mIHRoZSBtb2RpZmllcnMgdHdpY2UuCj4gKyAgICAgICAgc3BhX3Bv ZF9idWlsZGVyX2xvbmcoYnVpbGRlciwgbW9kaWZpZXJzWzBdKTsKPiArICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IG5fbW9kaWZpZXJzOyBpKyspCj4gKyAgICAgICAgICAgIHNwYV9wb2RfYnVp bGRlcl9sb25nKGJ1aWxkZXIsIG1vZGlmaWVyc1tpXSk7Cj4gKwo+ICsgICAgICAgIHNwYV9wb2Rf YnVpbGRlcl9wb3AoYnVpbGRlciwgJm1vZGlmaWVyX2ZyYW1lKTsKPiArICAgIH0KPiArICAgIHJl dHVybiBzcGFfcG9kX2J1aWxkZXJfcG9wKGJ1aWxkZXIsICZmb3JtYXRfZnJhbWUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHBsYXlfcGlwZXdpcmVfc3RyZWFtKEFWRmlsdGVyQ29udGV4dCAqY3R4 KQo+ICt7Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgdWludDhfdCBidWZmZXJbNDA5Nl07Cj4gKyAg ICBzdHJ1Y3Qgc3BhX3BvZF9idWlsZGVyIHBvZF9idWlsZGVyOwo+ICsgICAgY29uc3Qgc3RydWN0 IHNwYV9wb2QgKipwYXJhbXM7Cj4gKyAgICB1aW50MzJfdCBuX3BhcmFtczsKPiArCj4gKyAgICBQ aXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cj4gKwo+ICsgICAgcHdfaW5p dChOVUxMLCBOVUxMKTsKPiArICAgIHB3X2N0eC0+cHdfaW5pdF9jYWxsZWQgPSAxOwo+ICsKPiAr ICAgIHB3X2N0eC0+dGhyZWFkX2xvb3AgPQo+ICsgICAgICAgIHB3X3RocmVhZF9sb29wX25ldygi dGhyZWFkIGxvb3AiLCBOVUxMKTsKPiArICAgIGlmICghcHdfY3R4LT50aHJlYWRfbG9vcCkgewo+ ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgInB3X3RocmVhZF9sb29wX25ldyBm YWlsZWRcbiIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgcHdfY3R4LT5jb250ZXh0ID0KPiArICAgICAgICBwd19jb250ZXh0X25ldyhwd190 aHJlYWRfbG9vcF9nZXRfbG9vcChwd19jdHgtPnRocmVhZF9sb29wKSwgTlVMTCwgMCk7Cj4gKyAg ICBpZiAoIXB3X2N0eC0+Y29udGV4dCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgInB3X2NvbnRleHRfbmV3IGZhaWxlZFxuIik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFTk9NRU0pOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo cHdfdGhyZWFkX2xvb3Bfc3RhcnQocHdfY3R4LT50aHJlYWRfbG9vcCkgPCAwKSB7Cj4gKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAicHdfdGhyZWFkX2xvb3Bfc3RhcnQgZmFpbGVk XG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVGQVVMVCk7Cj4gKyAgICAgICAgZ290byBm YWlsOwo+ICsgICAgfQo+ICsKPiArICAgIHB3X3RocmVhZF9sb29wX2xvY2socHdfY3R4LT50aHJl YWRfbG9vcCk7Cj4gKwo+ICsgICAgLy8gQ29yZQo+ICsgICAgcHdfY3R4LT5jb3JlID0KPiArICAg ICAgICBwd19jb250ZXh0X2Nvbm5lY3RfZmQocHdfY3R4LT5jb250ZXh0LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmY250bChwd19jdHgtPnBpcGV3aXJlX2ZkLCBGX0RVUEZEX0NM T0VYRUMsIDMpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKPiAr ICAgIGlmICghcHdfY3R4LT5jb3JlKSB7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihlcnJubyk7 Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAicHdfY29udGV4dF9jb25uZWN0 X2ZkIGZhaWxlZFxuIik7Cj4gKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3X2N0eC0+ dGhyZWFkX2xvb3ApOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4gKyAgICBw d19jb3JlX2FkZF9saXN0ZW5lcihwd19jdHgtPmNvcmUsICZwd19jdHgtPmNvcmVfbGlzdGVuZXIs ICZjb3JlX2V2ZW50cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCAvKiB1c2VyX2Rh dGEgKi8pOwo+ICsKPiArICAgIC8vIFN0cmVhbQo+ICsgICAgcHdfY3R4LT5zdHJlYW0gPSBwd19z dHJlYW1fbmV3KAo+ICsgICAgICAgIHB3X2N0eC0+Y29yZSwgIndheWxhbmQgZ3JhYiIsCj4gKyAg ICAgICAgcHdfcHJvcGVydGllc19uZXcoUFdfS0VZX01FRElBX1RZUEUsICJWaWRlbyIsIFBXX0tF WV9NRURJQV9DQVRFR09SWSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FwdHVyZSIs IFBXX0tFWV9NRURJQV9ST0xFLCAiU2NyZWVuIiwgTlVMTCkpOwo+ICsKPiArICAgIGlmICghcHdf Y3R4LT5zdHJlYW0pIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJwd19z dHJlYW1fbmV3IGZhaWxlZFxuIik7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ ICsgICAgICAgIHB3X3RocmVhZF9sb29wX3VubG9jayhwd19jdHgtPnRocmVhZF9sb29wKTsKPiAr ICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHdfc3RyZWFtX2FkZF9saXN0 ZW5lcihwd19jdHgtPnN0cmVhbSwgJnB3X2N0eC0+c3RyZWFtX2xpc3RlbmVyLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAmc3RyZWFtX2V2ZW50cywgY3R4IC8qIHVzZXJfZGF0YSAqLyk7 Cj4gKwo+ICsgICAgLy8gU3RyZWFtIHBhcmFtZXRlcnMKPiArICAgIHBvZF9idWlsZGVyID0gU1BB X1BPRF9CVUlMREVSX0lOSVQoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Cj4gKyAgICBwYXJhbXMg PSBhdl9tYWxsb2N6KDIgKiBGRl9BUlJBWV9FTEVNUyhwaXBld2lyZWdyYWJfZm9ybWF0cykgKiBz aXplb2YoKnBhcmFtcykpOwo+ICsgICAgbl9wYXJhbXMgPSAwOwo+ICsKPiArICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMocGlwZXdpcmVncmFiX2Zvcm1hdHMpOyBpKyspIHsK PiArICAgICAgICBpZiAocHdfY3R4LT5lbmFibGVfZG1hYnVmKQo+ICsgICAgICAgICAgICBwYXJh bXNbbl9wYXJhbXMrK10gPSBidWlsZF9mb3JtYXQocHdfY3R4LCAmcG9kX2J1aWxkZXIsIHBpcGV3 aXJlZ3JhYl9mb3JtYXRzW2ldLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGlwZXdpcmVncmFiX2RlZmF1bHRfbW9kaWZpZXJzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZfQVJSQVlfRUxFTVMocGlwZXdp cmVncmFiX2RlZmF1bHRfbW9kaWZpZXJzKSk7Cj4gKyAgICAgICAgcGFyYW1zW25fcGFyYW1zKytd ID0gYnVpbGRfZm9ybWF0KHB3X2N0eCwgJnBvZF9idWlsZGVyLCBwaXBld2lyZWdyYWJfZm9ybWF0 c1tpXSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg MCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gcHdfc3RyZWFtX2Nvbm5lY3QoCj4gKyAgICAg ICAgcHdfY3R4LT5zdHJlYW0sIFBXX0RJUkVDVElPTl9JTlBVVCwgKHVpbnQzMl90KXB3X2N0eC0+ cGlwZXdpcmVfbm9kZSwKPiArICAgICAgICBQV19TVFJFQU1fRkxBR19BVVRPQ09OTkVDVCB8IFBX X1NUUkVBTV9GTEFHX01BUF9CVUZGRVJTLCBwYXJhbXMsIG5fcGFyYW1zKTsKPiArICAgIGlmIChy ZXQgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgInB3X3N0cmVh bV9jb25uZWN0IGZhaWxlZFxuIik7Cj4gKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3 X2N0eC0+dGhyZWFkX2xvb3ApOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4g KyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlN0YXJ0aW5nIHNjcmVlbiBjYXB0dXJlIC4u LlxuIik7Cj4gKyAgICBwd190aHJlYWRfbG9vcF91bmxvY2socHdfY3R4LT50aHJlYWRfbG9vcCk7 Cj4gKyAgICByZXR1cm4gMDsKPiArCj4gK2ZhaWw6Cj4gKyAgICBpZiAocHdfY3R4LT5jb3JlKSB7 Cj4gKyAgICAgICAgcHdfY29yZV9kaXNjb25uZWN0KHB3X2N0eC0+Y29yZSk7Cj4gKyAgICAgICAg cHdfY3R4LT5jb3JlID0gTlVMTDsKPiArICAgIH0KPiArICAgIGlmIChwd19jdHgtPmNvbnRleHQp IHsKPiArICAgICAgICBwd19jb250ZXh0X2Rlc3Ryb3kocHdfY3R4LT5jb250ZXh0KTsKPiArICAg ICAgICBwd19jdHgtPmNvbnRleHQgPSBOVUxMOwo+ICsgICAgfQo+ICsgICAgaWYgKHB3X2N0eC0+ dGhyZWFkX2xvb3ApIHsKPiArICAgICAgICBwd190aHJlYWRfbG9vcF9kZXN0cm95KHB3X2N0eC0+ dGhyZWFkX2xvb3ApOwo+ICsgICAgICAgIHB3X2N0eC0+dGhyZWFkX2xvb3AgPSBOVUxMOwo+ICsg ICAgfQo+ICsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBvcnRh bF9vcGVuX3BpcGV3aXJlX3JlbW90ZShBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ICsgICAg aW50IHJldDsKPiArICAgIGludCBmZDsKPiArICAgIHNkX2J1c19tZXNzYWdlICpyZXBseSA9IE5V TEw7Cj4gKyAgICBzZF9idXNfZXJyb3IgZXJyID0gU0RfQlVTX0VSUk9SX05VTEw7Cj4gKyAgICBQ aXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cj4gKwo+ICsgICAgY29uc3Qg Y2hhciAqbWV0aG9kX25hbWUgPSAiT3BlblBpcGVXaXJlUmVtb3RlIjsKPiArICAgIHJldCA9IHNk X2J1c19jYWxsX21ldGhvZChwd19jdHgtPmNvbm5lY3Rpb24sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgREVTVElOQVRJT04sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T0JKRUNUX1BBVEgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZlcnIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnJlcGx5LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYXtzdn0iLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIkNhbGwgdG8g REJ1cyBtZXRob2QgJyVzJyBmYWlsZWQ6ICVzXG4iLAo+ICsgICAgICAgICAgICAgICBtZXRob2Rf bmFtZSwgZXJyLm1lc3NhZ2UpOwo+ICsgICAgICAgIHNkX2J1c19lcnJvcl9mcmVlKCZlcnIpOwo+ ICsgICAgICAgIHBvcnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byBvcGVuIFBpcGVXaXJl IHJlbW90ZSIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSBz ZF9idXNfbWVzc2FnZV9yZWFkKHJlcGx5LCAiaCIsICZmZCk7Cj4gKyAgICBpZiAocmV0IDwgMCkg ewo+ICsgICAgICAgIHBvcnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byByZWFkIGZpbGUg ZGVzY3JpcHRvciIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0gZWxzZQo+ICsgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlBpcGVXaXJlIGZkOiAlZFxuIiwgZmQpOwo+ICsK PiArICAgIHB3X2N0eC0+cGlwZXdpcmVfZmQgPSBmZDsKPiArICAgIGF0b21pY19zdG9yZSgmcHdf Y3R4LT5kYnVzX2V2ZW50X2xvb3BfcnVubmluZywgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGRidXNfc2lnbmFsX2RhdGFfZnJlZShzdHJ1Y3QgRGJ1c1NpZ25hbERhdGEgKmRidXNfc2lnbmFs X2RhdGEpCj4gK3sKPiArICAgIHNkX2J1c19zbG90X3VucmVmKGRidXNfc2lnbmFsX2RhdGEtPnNs b3QpOwo+ICsgICAgYXZfZnJlZShkYnVzX3NpZ25hbF9kYXRhKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBvbl9zdGFydF9yZXNwb25zZV9yZWNlaXZlZF9jYWxsYmFjaygKPiArICAgIHNkX2J1c19t ZXNzYWdlICptZXNzYWdlLCB2b2lkICp1c2VyX2RhdGEsIHNkX2J1c19lcnJvciAqZXJyKQo+ICt7 Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgdWludDMyX3QgcmVzcG9uc2U7Cj4gKyAgICB1aW50MzJf dCBub2RlOwo+ICsgICAgc3RydWN0IERidXNTaWduYWxEYXRhICpkYnVzX3NpZ25hbF9kYXRhID0g dXNlcl9kYXRhOwo+ICsgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBkYnVzX3NpZ25hbF9kYXRh LT5jdHg7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cj4g Kwo+ICsgICAgZGJ1c19zaWduYWxfZGF0YV9mcmVlKGRidXNfc2lnbmFsX2RhdGEpOwo+ICsKPiAr ICAgIHJldCA9IHNkX2J1c19tZXNzYWdlX3JlYWQobWVzc2FnZSwgInUiLCAmcmVzcG9uc2UpOwo+ ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJG YWlsZWQgdG8gcmVhZCBEQnVzIHJlc3BvbnNlIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsg ICAgfQo+ICsgICAgaWYgKHJlc3BvbnNlICE9IDApIHsKPiArICAgICAgICBwb3J0YWxfYWJvcnQo Y3R4LCBBVkVSUk9SKEVBQ0NFUyksCj4gKyAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8g c3RhcnQgc2NyZWVuIGNhc3QsIGRlbmllZCBvciBjYW5jZWxsZWQgYnkgdXNlciIpOwo+ICsgICAg ICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICBzZF9idXNfbWVzc2FnZV9lbnRlcl9j b250YWluZXIobWVzc2FnZSwgU0RfQlVTX1RZUEVfQVJSQVksICJ7c3Z9Iik7Cj4gKyAgICBzZF9i dXNfbWVzc2FnZV9lbnRlcl9jb250YWluZXIobWVzc2FnZSwgU0RfQlVTX1RZUEVfRElDVF9FTlRS WSwgInN2Iik7Cj4gKyAgICBzZF9idXNfbWVzc2FnZV9za2lwKG1lc3NhZ2UsICJzIik7Cj4gKyAg ICBzZF9idXNfbWVzc2FnZV9lbnRlcl9jb250YWluZXIobWVzc2FnZSwgU0RfQlVTX1RZUEVfVkFS SUFOVCwgImEodWF7c3Z9KSIpOwo+ICsgICAgc2RfYnVzX21lc3NhZ2VfZW50ZXJfY29udGFpbmVy KG1lc3NhZ2UsIFNEX0JVU19UWVBFX0FSUkFZLCAiKHVhe3N2fSkiKTsKPiArICAgIHNkX2J1c19t ZXNzYWdlX2VudGVyX2NvbnRhaW5lcihtZXNzYWdlLCBTRF9CVVNfVFlQRV9TVFJVQ1QsICJ1YXtz dn0iKTsKPiArCj4gKyAgICByZXQgPSBzZF9idXNfbWVzc2FnZV9yZWFkKG1lc3NhZ2UsICJ1Iiwg Jm5vZGUpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBwb3J0YWxfYWJvcnQoY3R4 LCByZXQsICJGYWlsZWQgdG8gcmVhZCBQaXBlV2lyZSBub2RlOiAlcyIpOwo+ICsgICAgICAgIHJl dHVybiAtMTsKPiArICAgIH0KPiArICAgIHB3X2N0eC0+cGlwZXdpcmVfbm9kZSA9IG5vZGU7Cj4g Kwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiUGlwZVdpcmUgbm9kZTogJSJQUkl1 NjQiXG4iLCBwd19jdHgtPnBpcGV3aXJlX25vZGUpOwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0lORk8sICJNb25pdG9yIHNlbGVjdGVkLCBzZXR0aW5nIHVwIHNjcmVlbiBjYXN0XG5cbiIpOwo+ ICsKPiArICAgIHBvcnRhbF9vcGVuX3BpcGV3aXJlX3JlbW90ZShjdHgpOwo+ICsgICAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBvcnRhbF9zdGFydChBVkZpbHRlckNvbnRleHQg KmN0eCkKPiArewo+ICsgICAgaW50IHJldDsKPiArICAgIHNkX2J1c19lcnJvciBlcnIgPSBTRF9C VVNfRVJST1JfTlVMTDsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+ cHJpdjsKPiArCj4gKyAgICBjb25zdCBjaGFyICptZXRob2RfbmFtZSA9ICJTdGFydCI7Cj4gKyAg ICBjb25zdCBjaGFyICpyZXF1ZXN0X3Rva2VuID0gInBpcGV3aXJlZ3JhYlN0YXJ0IjsKPiArCj4g KyAgICByZXQgPSBzdWJzY3JpYmVfdG9fc2lnbmFsKGN0eCwgcHdfY3R4LT5zZW5kZXJfbmFtZSwg cmVxdWVzdF90b2tlbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25fc3RhcnRf cmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2spOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAg ICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIERCdXMg c2lnbmFsIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2xvZyhj dHgsIEFWX0xPR19JTkZPLCAiQXNraW5nIGZvciBtb25pdG9y4oCmXG4iKTsKPiArICAgIHJldCA9 IHNkX2J1c19jYWxsX21ldGhvZChwd19jdHgtPmNvbm5lY3Rpb24sCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgREVTVElOQVRJT04sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT0JKRUNUX1BBVEgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNF LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZlcnIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3Nhe3N2fSIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdfY3R4LT5zZXNzaW9uX2hhbmRsZSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGVfdG9rZW4iLCAi cyIsIHJlcXVlc3RfdG9rZW4pOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJDYWxsIHRvIERCdXMgbWV0 aG9kICclcycgZmFpbGVkOiAlc1xuIiwKPiArICAgICAgICAgICAgICAgbWV0aG9kX25hbWUsIGVy ci5tZXNzYWdlKTsKPiArICAgICAgICBzZF9idXNfZXJyb3JfZnJlZSgmZXJyKTsKPiArICAgICAg ICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJGYWlsZWQgdG8gc3RhcnQgc2NyZWVuIGNhc3Qgc2Vz c2lvbiIpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG9uX3NlbGVjdF9zb3VyY2Vz X3Jlc3BvbnNlX3JlY2VpdmVkX2NhbGxiYWNrKAo+ICsgICAgc2RfYnVzX21lc3NhZ2UgKm1lc3Nh Z2UsIHZvaWQgKnVzZXJfZGF0YSwgc2RfYnVzX2Vycm9yICplcnIpCj4gK3sKPiArICAgIGludCBy ZXQ7Cj4gKyAgICB1aW50MzJfdCByZXNwb25zZTsKPiArICAgIHN0cnVjdCBEYnVzU2lnbmFsRGF0 YSAqZGJ1c19zaWduYWxfZGF0YSA9IHVzZXJfZGF0YTsKPiArICAgIEFWRmlsdGVyQ29udGV4dCAq Y3R4ID0gZGJ1c19zaWduYWxfZGF0YS0+Y3R4Owo+ICsKPiArICAgIGRidXNfc2lnbmFsX2RhdGFf ZnJlZShkYnVzX3NpZ25hbF9kYXRhKTsKPiArCj4gKyAgICByZXQgPSBzZF9idXNfbWVzc2FnZV9y ZWFkKG1lc3NhZ2UsICJ1IiwgJnJlc3BvbnNlKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAg ICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgcmV0LCAiRmFpbGVkIHRvIHJlYWQgREJ1cyByZXNwb25z ZSIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArICAgIGlmIChyZXNwb25zZSAh PSAwKSB7Cj4gKyAgICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgQVZFUlJPUihFQUNDRVMpLAo+ICsg ICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNlbGVjdCBzY3JlZW4gY2FzdCBzb3VyY2Vz Iik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIHBvcnRhbF9zdGFy dChjdHgpOwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBvcnRhbF9z ZWxlY3Rfc291cmNlcyhBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ICsgICAgaW50IHJldDsK PiArICAgIHVpbnQzMl90IGN1cnNvcl9tb2RlOwo+ICsgICAgc2RfYnVzX2Vycm9yIGVyciA9IFNE X0JVU19FUlJPUl9OVUxMOwo+ICsgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4 LT5wcml2Owo+ICsKPiArICAgIGNvbnN0IGNoYXIgKm1ldGhvZF9uYW1lID0gIlNlbGVjdFNvdXJj ZXMiOwo+ICsgICAgY29uc3QgY2hhciAqcmVxdWVzdF90b2tlbiA9ICJwaXBld2lyZWdyYWJTZWxl Y3RTb3VyY2VzIjsKPiArCj4gKyAgICByZXQgPSBzdWJzY3JpYmVfdG9fc2lnbmFsKGN0eCwgcHdf Y3R4LT5zZW5kZXJfbmFtZSwgcmVxdWVzdF90b2tlbiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb25fc2VsZWN0X3NvdXJjZXNfcmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2spOwo+ ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJG YWlsZWQgdG8gc3Vic2NyaWJlIHRvIERCdXMgc2lnbmFsIik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ ICsgICAgfQo+ICsKPiArICAgIGlmICgocHdfY3R4LT5hdmFpbGFibGVfY3Vyc29yX21vZGVzICYg UE9SVEFMX0NVUlNPUl9NT0RFX0VNQkVEREVEKQo+ICsgICAgICAgICAgICAgJiYgcHdfY3R4LT5k cmF3X21vdXNlKQo+ICsgICAgICAgIGN1cnNvcl9tb2RlID0gUE9SVEFMX0NVUlNPUl9NT0RFX0VN QkVEREVEOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIGN1cnNvcl9tb2RlID0gUE9SVEFMX0NVUlNP Ul9NT0RFX0hJRERFTjsKPiArCj4gKyAgICByZXQgPSBzZF9idXNfY2FsbF9tZXRob2QocHdfY3R4 LT5jb25uZWN0aW9uLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFU1RJTkFUSU9O LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9CSkVDVF9QQVRILAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtZXRob2RfbmFtZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJy LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIm9he3N2fSIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHdfY3R4LT5zZXNzaW9uX2hhbmRsZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlcyIsICJ1IiwgcHdfY3R4LT5j YXB0dXJlX3R5cGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIiwg ImIiLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGVfdG9rZW4iLCAi cyIsIHJlcXVlc3RfdG9rZW4sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnNv cl9tb2RlIiwgInUiLCBjdXJzb3JfbW9kZSk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIkNhbGwgdG8g REJ1cyBtZXRob2QgJyVzJyBmYWlsZWQ6ICVzXG4iLAo+ICsgICAgICAgICAgICAgICBtZXRob2Rf bmFtZSwgZXJyLm1lc3NhZ2UpOwo+ICsgICAgICAgIHNkX2J1c19lcnJvcl9mcmVlKCZlcnIpOwo+ ICsgICAgICAgIHBvcnRhbF9hYm9ydChjdHgsIHJldCwgIkZhaWxlZCB0byBzZWxlY3Qgc291cmNl cyBmb3Igc2NyZWVuIGNhc3Qgc2Vzc2lvbiIpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IG9uX2NyZWF0ZV9zZXNzaW9uX3Jlc3BvbnNlX3JlY2VpdmVkX2NhbGxiYWNrKAo+ICsgICAg c2RfYnVzX21lc3NhZ2UgKm1lc3NhZ2UsIHZvaWQgKnVzZXJfZGF0YSwgc2RfYnVzX2Vycm9yICpl cnIpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICB1aW50MzJfdCByZXNwb25zZTsKPiArICAg IGNvbnN0IGNoYXIgKnNlc3Npb25faGFuZGxlOwo+ICsgICAgY29uc3QgY2hhciAqdHlwZTsKPiAr ICAgIHN0cnVjdCBEYnVzU2lnbmFsRGF0YSAqZGJ1c19zaWduYWxfZGF0YSA9IHVzZXJfZGF0YTsK PiArICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gZGJ1c19zaWduYWxfZGF0YS0+Y3R4Owo+ICsg ICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2Owo+ICsKPiArICAgIGRi dXNfc2lnbmFsX2RhdGFfZnJlZShkYnVzX3NpZ25hbF9kYXRhKTsKPiArCj4gKyAgICByZXQgPSBz ZF9idXNfbWVzc2FnZV9yZWFkKG1lc3NhZ2UsICJ1IiwgJnJlc3BvbnNlKTsKPiArICAgIGlmIChy ZXQgPCAwKSB7Cj4gKyAgICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgcmV0LCAiRmFpbGVkIHRvIHJl YWQgREJ1cyByZXNwb25zZSIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArICAg IGlmIChyZXNwb25zZSAhPSAwKSB7Cj4gKyAgICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgQVZFUlJP UihFQUNDRVMpLAo+ICsgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBzY3Jl ZW4gY2FzdCBzZXNzaW9uIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiAr ICAgIHNkX2J1c19tZXNzYWdlX2VudGVyX2NvbnRhaW5lcihtZXNzYWdlLCBTRF9CVVNfVFlQRV9B UlJBWSwgIntzdn0iKTsKPiArICAgIHNkX2J1c19tZXNzYWdlX2VudGVyX2NvbnRhaW5lcihtZXNz YWdlLCBTRF9CVVNfVFlQRV9ESUNUX0VOVFJZLCAic3YiKTsKPiArICAgIHNkX2J1c19tZXNzYWdl X3NraXAobWVzc2FnZSwgInMiKTsKPiArICAgIC8vIFRoZSBYREcgRGVza3RvcCBQb3J0YWwgZG9j dW1lbnRhdGlvbiBzYXlzIHRoYXQgdGhlIHR5cGUgb2YgYHNlc3Npb25faGFuZGxlYAo+ICsgICAg Ly8gaXMgIm8iIChvYmplY3QgcGF0aCksIGJ1dCBhdCBsZWFzdCBvbiBzb21lIHN5c3RlbXMgaXQn cyBhY3R1YWxseSAicyIgKHN0cmluZyksCj4gKyAgICAvLyBzbyB3ZSBuZWVkIHRvIGNoZWNrIHRv IG1ha2Ugc3VyZSB3ZSdyZSB1c2luZyB0aGUgcmlnaHQgb25lLgo+ICsgICAgc2RfYnVzX21lc3Nh Z2VfcGVla190eXBlKG1lc3NhZ2UsIE5VTEwsICZ0eXBlKTsKPiArICAgIHJldCA9IHNkX2J1c19t ZXNzYWdlX3JlYWQobWVzc2FnZSwgInYiLCB0eXBlLCAmc2Vzc2lvbl9oYW5kbGUpOwo+ICsgICAg aWYgKHJldCA8IDApIHsKPiArICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJGYWlsZWQg dG8gcmVhZCBzZXNzaW9uIGhhbmRsZSIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0K PiArICAgIHB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUgPSBhdl9zdHJkdXAoc2Vzc2lvbl9oYW5kbGUp Owo+ICsKPiArICAgIHBvcnRhbF9zZWxlY3Rfc291cmNlcyhjdHgpOwo+ICsgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBGdW5jdGlvbiB0byBjcmVhdGUgYSBzY3JlZW4gY2FzdCBz ZXNzaW9uCj4gKyAqCj4gKyAqIEBwYXJhbSBjdHgKPiArICovCj4gK3N0YXRpYyB2b2lkIHBvcnRh bF9jcmVhdGVfc2Vzc2lvbihBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ICsgICAgaW50IHJl dDsKPiArICAgIHNkX2J1c19lcnJvciBlcnIgPSBTRF9CVVNfRVJST1JfTlVMTDsKPiArICAgIFBp cGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKPiArCj4gKyAgICBjb25zdCBj aGFyICptZXRob2RfbmFtZSA9ICJDcmVhdGVTZXNzaW9uIjsKPiArICAgIGNvbnN0IGNoYXIgKnJl cXVlc3RfdG9rZW4gPSAicGlwZXdpcmVncmFiQ3JlYXRlU2Vzc2lvbiI7Cj4gKwo+ICsgICAgcmV0 ID0gc3Vic2NyaWJlX3RvX3NpZ25hbChjdHgsIHB3X2N0eC0+c2VuZGVyX25hbWUsIHJlcXVlc3Rf dG9rZW4sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uX2NyZWF0ZV9zZXNzaW9u X3Jlc3BvbnNlX3JlY2VpdmVkX2NhbGxiYWNrKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAg ICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgcmV0LCAiRmFpbGVkIHRvIHN1YnNjcmliZSB0byBEQnVz IHNpZ25hbCIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSBz ZF9idXNfY2FsbF9tZXRob2QocHdfY3R4LT5jb25uZWN0aW9uLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERFU1RJTkFUSU9OLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE9CSkVDVF9QQVRILAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSRkFDRSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfbmFtZSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZXJyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF7c3Z9IiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJoYW5kbGVfdG9rZW4iLCAicyIsIHJlcXVlc3RfdG9rZW4sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInNlc3Npb25faGFuZGxlX3Rva2VuIiwgInMiLCAicGlwZXdpcmVncmFiIik7 Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwKPiArICAgICAgICAgICAgICAgIkNhbGwgdG8gREJ1cyBtZXRob2QgJyVzJyBmYWlsZWQ6ICVz XG4iLAo+ICsgICAgICAgICAgICAgICBtZXRob2RfbmFtZSwgZXJyLm1lc3NhZ2UpOwo+ICsgICAg ICAgIHNkX2J1c19lcnJvcl9mcmVlKCZlcnIpOwo+ICsgICAgICAgIHBvcnRhbF9hYm9ydChjdHgs IHJldCwgIkZhaWxlZCB0byBjcmVhdGUgc2NyZWVuIGNhc3Qgc2Vzc2lvbiIpOwo+ICsgICAgfQo+ ICt9Cj4gKwo+ICsvKioKPiArICogSGVscGVyIGZ1bmN0aW9uOiBnZXQgYXZhaWxhYmxlIGN1cnNv ciBtb2RlcyBhbmQgdXBkYXRlIHRoZQo+ICsgKiAgICAgICAgICAgICAgICAgIFBpcGV3aXJlR3Jh YkNvbnRleHQgYWNjb3JkaW5nbHkKPiArICoKPiArICogQHBhcmFtIGN0eAo+ICsgKi8KPiArc3Rh dGljIGludCBwb3J0YWxfdXBkYXRlX2F2YWlsYWJsZV9jdXJzb3JfbW9kZXMoQVZGaWx0ZXJDb250 ZXh0ICpjdHgpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBzZF9idXNfZXJyb3IgZXJyID0g U0RfQlVTX0VSUk9SX05VTEw7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBj dHgtPnByaXY7Cj4gKwo+ICsgICAgcmV0ID0gc2RfYnVzX2dldF9wcm9wZXJ0eV90cml2aWFsKHB3 X2N0eC0+Y29ubmVjdGlvbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBERVNUSU5BVElPTiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP QkpFQ1RfUEFUSCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRF UkZBQ0UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF2YWlsYWJs ZUN1cnNvck1vZGVzIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZXJyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1JywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4LT5hdmFpbGFibGVfY3Vy c29yX21vZGVzKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIkNvdWxkbid0IHJldHJpZXZlIGF2YWlsYWJs ZSBjdXJzb3IgbW9kZXM6ICVzXG4iLCBlcnIubWVzc2FnZSk7Cj4gKwo+ICsgICAgc2RfYnVzX2Vy cm9yX2ZyZWUoJmVycik7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGNyZWF0ZV9kYnVzX2Nvbm5lY3Rpb24oQVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4gK3sKPiArICAg IGNvbnN0IGNoYXIgKmF1eDsKPiArICAgIGludCByZXQ7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250 ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cj4gKwo+ICsgICAgcmV0ID0gc2RfYnVzX29wZW5fdXNl cigmcHdfY3R4LT5jb25uZWN0aW9uKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNy ZWF0ZSBEQnVzIGNvbm5lY3Rpb246ICVzXG4iLCBzdHJlcnJvcigtcmV0KSk7Cj4gKyAgICAgICAg cmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSBzZF9idXNfZ2V0X3VuaXF1ZV9u YW1lKHB3X2N0eC0+Y29ubmVjdGlvbiwgJmF1eCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgIkZhaWxl ZCB0byBnZXQgYnVzIG5hbWU6ICVzXG4iLCBzdHJlcnJvcigtcmV0KSk7Cj4gKyAgICAgICAgcmV0 dXJuIHJldDsKPiArICAgIH0KPiArICAgIC8vIEZyb20gaHR0cHM6Ly9mbGF0cGFrLmdpdGh1Yi5p by94ZGctZGVza3RvcC1wb3J0YWwvZG9jcy9kb2Mtb3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZXF1 ZXN0Lmh0bWw6Cj4gKyAgICAvLyAiU0VOREVSIGlzIHRoZSBjYWxsZXIncyB1bmlxdWUgbmFtZSwg d2l0aCB0aGUgaW5pdGlhbCAnOicgcmVtb3ZlZCBhbmQgYWxsICcuJyByZXBsYWNlZCBieSAnXyci Cj4gKyAgICBwd19jdHgtPnNlbmRlcl9uYW1lID0gYXZfc3RyaXJlcGxhY2UoYXV4ICsgMSwgIi4i LCAiXyIpOwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLAo+ICsgICAgICAgICAgICJE QnVzIGNvbm5lY3Rpb24gY3JlYXRlZCAoc2VuZGVyIG5hbWU6ICVzKVxuIiwgcHdfY3R4LT5zZW5k ZXJfbmFtZSk7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArCj4gKy8qKgo+ICsgKiBVc2Ug WERHIERlc2t0b3AgUG9ydGFsJ3MgU2NyZWVuQ2FzdCBpbnRlcmZhY2UgdG8gb3BlbiBhIGZpbGUg ZGVzY3JpcHRvciB0aGF0Cj4gKyAqIGNhbiBiZSB1c2VkIGJ5IFBpcGVXaXJlIHRvIGFjY2VzcyB0 aGUgc2NyZWVuIGNhc3Qgc3RyZWFtcy4KPiArICogKGh0dHBzOi8vZmxhdHBhay5naXRodWIuaW8v eGRnLWRlc2t0b3AtcG9ydGFsL2RvY3MvZG9jLW9yZy5mcmVlZGVza3RvcC5wb3J0YWwuU2NyZWVu Q2FzdC5odG1sKQo+ICsgKgo+ICsgKiBAcGFyYW0gY3R4Cj4gKyAqLwo+ICtzdGF0aWMgaW50IHBv cnRhbF9pbml0X3NjcmVlbmNhc3QoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIGlu dCByZXQ7Cj4gKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cj4g Kwo+ICsgICAgcmV0ID0gY3JlYXRlX2RidXNfY29ubmVjdGlvbihjdHgpOwo+ICsgICAgaWYgKHJl dCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXQgPSBwb3J0YWxfdXBk YXRlX2F2YWlsYWJsZV9jdXJzb3JfbW9kZXMoY3R4KTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsg ICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgcG9ydGFsX2NyZWF0ZV9zZXNzaW9uKGN0eCk7 Cj4gKyAgICBpZiAocHdfY3R4LT5wb3J0YWxfZXJyb3IpCj4gKyAgICAgICAgcmV0dXJuIHB3X2N0 eC0+cG9ydGFsX2Vycm9yOwo+ICsKPiArICAgIC8vIFRoZSBldmVudCBsb29wIHdpbGwgcnVuIHVu dGlsIGl0J3Mgc3RvcHBlZCBieSBwb3J0YWxfb3Blbl9waXBld2lyZV9yZW1vdGUgKGlmCj4gKyAg ICAvLyBhbGwgREJ1cyBtZXRob2QgY2FsbHMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSkgb3IgcG9y dGFsX2Fib3J0IChpbiBjYXNlIG9mIGVycm9yKS4KPiArICAgIC8vIEluIHRoZSBsYXR0ZXIgY2Fz ZSwgcHdfY3R4LT5wb3J0YWxfZXJyb3IgZ2V0cyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZS4KPiAr ICAgIGF0b21pY19zdG9yZSgmcHdfY3R4LT5kYnVzX2V2ZW50X2xvb3BfcnVubmluZywgMSk7Cj4g KyAgICB3aGlsZShhdG9taWNfbG9hZCgmcHdfY3R4LT5kYnVzX2V2ZW50X2xvb3BfcnVubmluZykp IHsKPiArICAgICAgICByZXQgPSBzZF9idXNfcHJvY2Vzcyhwd19jdHgtPmNvbm5lY3Rpb24sIE5V TEwpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcHJvY2VzcyBE QnVzIGV2ZW50OiAlc1xuIiwgc3RyZXJyb3IoLXJldCkpOwo+ICsgICAgICAgICAgICByZXR1cm4g cmV0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmV0ID0gc2RfYnVzX3dhaXQocHdfY3R4 LT5jb25uZWN0aW9uLCAyMDAwKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICAgICAiRXJy b3Igd2hpbGUgd2FpdGluZyBvbiBidXM6ICVzXG4iLCBzdHJlcnJvcigtcmV0KSk7Cj4gKyAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgcmV0dXJuIHB3 X2N0eC0+cG9ydGFsX2Vycm9yOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgcGlwZXdp cmVncmFiX2luaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIGludCByZXQ7Cj4g KyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cj4gKyAgICBpZiAo IXB3X2N0eCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAg ICAgICAgICAgIkludmFsaWQgcHJpdmF0ZSBjb250ZXh0IGRhdGFcbiIpOwo+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXRvbWljX2luaXQoJnB3 X2N0eC0+ZGJ1c19ldmVudF9sb29wX3J1bm5pbmcsIDApOwo+ICsgICAgYXRvbWljX2luaXQoJnB3 X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRpb25fb3ZlciwgMCk7Cj4gKyAgICBwdGhyZWFkX2Nv bmRfaW5pdCgmcHdfY3R4LT5waXBld2lyZV9pbml0aWFsaXphdGlvbl9jb25kX3ZhciwgTlVMTCk7 Cj4gKyAgICBwdGhyZWFkX211dGV4X2luaXQoJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRp b25fbXV0ZXgsIE5VTEwpOwo+ICsgICAgcHRocmVhZF9tdXRleF9pbml0KCZwd19jdHgtPmN1cnJl bnRfZnJhbWVfbXV0ZXgsIE5VTEwpOwo+ICsKPiArICAgIGlmIChwd19jdHgtPnBpcGV3aXJlX2Zk ID09IDApIHsKPiArICAgICAgICByZXQgPSBwb3J0YWxfaW5pdF9zY3JlZW5jYXN0KGN0eCk7Cj4g KyAgICAgICAgaWYgKHJldCAhPSAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIkNvdWxkbid0IGluaXQgc2NyZWVuIGNhc3RcbiIpOwo+ICsgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICByZXQgPSBwbGF5X3Bp cGV3aXJlX3N0cmVhbShjdHgpOwo+ICsgICAgaWYgKHJldCAhPSAwKQo+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gKwo+ICsgICAgLy8gV2FpdCB1bnRpbCBQaXBlV2lyZSBpbml0aWFsaXphdGlvbiBp cyBvdmVyCj4gKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlh bGl6YXRpb25fbXV0ZXgpOwo+ICsgICAgd2hpbGUgKCFhdG9taWNfbG9hZCgmcHdfY3R4LT5waXBl d2lyZV9pbml0aWFsaXphdGlvbl9vdmVyKSkgewo+ICsgICAgICAgIHB0aHJlYWRfY29uZF93YWl0 KCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX2NvbmRfdmFyLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX211dGV4KTsK PiArICAgIH0KPiArICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwd19jdHgtPnBpcGV3aXJlX2lu aXRpYWxpemF0aW9uX211dGV4KTsKPiArCj4gKyAgICByZXR1cm4gcHdfY3R4LT5waXBld2lyZV9l cnJvcjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcGlwZXdpcmVncmFiX3VuaW5pdChBVkZpbHRl ckNvbnRleHQgKmN0eCkKPiArewo+ICsgICAgaW50IHJldDsKPiArICAgIFBpcGV3aXJlR3JhYkNv bnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsKPiArICAgIGlmICghcHdfY3R4KQo+ICsgICAgICAg IHJldHVybjsKPiArCj4gKyAgICAvLyBQaXBlV2lyZSBjbGVhbnVwCj4gKyAgICBpZiAocHdfY3R4 LT50aHJlYWRfbG9vcCkgewo+ICsgICAgICAgIHB3X3RocmVhZF9sb29wX3NpZ25hbChwd19jdHgt PnRocmVhZF9sb29wLCBmYWxzZSk7Cj4gKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3 X2N0eC0+dGhyZWFkX2xvb3ApOwo+ICsgICAgICAgIHB3X3RocmVhZF9sb29wX3N0b3AocHdfY3R4 LT50aHJlYWRfbG9vcCk7Cj4gKyAgICB9Cj4gKyAgICBpZiAocHdfY3R4LT5zdHJlYW0pIHsKPiAr ICAgICAgICBwd19zdHJlYW1fZGlzY29ubmVjdChwd19jdHgtPnN0cmVhbSk7Cj4gKyAgICAgICAg cHdfc3RyZWFtX2Rlc3Ryb3kocHdfY3R4LT5zdHJlYW0pOwo+ICsgICAgICAgIHB3X2N0eC0+c3Ry ZWFtID0gTlVMTDsKPiArICAgIH0KPiArICAgIGlmIChwd19jdHgtPmNvcmUpewo+ICsgICAgICAg IHB3X2NvcmVfZGlzY29ubmVjdChwd19jdHgtPmNvcmUpOwo+ICsgICAgICAgIHB3X2N0eC0+Y29y ZSA9IE5VTEw7Cj4gKyAgICB9Cj4gKyAgICBpZiAocHdfY3R4LT5jb250ZXh0KSB7Cj4gKyAgICAg ICAgcHdfY29udGV4dF9kZXN0cm95KHB3X2N0eC0+Y29udGV4dCk7Cj4gKyAgICAgICAgcHdfY3R4 LT5jb250ZXh0ID0gTlVMTDsKPiArICAgIH0KPiArICAgIGlmIChwd19jdHgtPnRocmVhZF9sb29w KSB7Cj4gKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfZGVzdHJveShwd19jdHgtPnRocmVhZF9sb29w KTsKPiArICAgICAgICBwd19jdHgtPnRocmVhZF9sb29wID0gTlVMTDsKPiArICAgIH0KPiArICAg IGlmIChwd19jdHgtPnB3X2luaXRfY2FsbGVkKSB7Cj4gKyAgICAgICAgcHdfZGVpbml0KCk7Cj4g KyAgICAgICAgcHdfY3R4LT5wd19pbml0X2NhbGxlZCA9IDA7Cj4gKyAgICB9Cj4gKyAgICBpZiAo cHdfY3R4LT5waXBld2lyZV9mZCA+IDApIHsKPiArICAgICAgICBjbG9zZShwd19jdHgtPnBpcGV3 aXJlX2ZkKTsKPiArICAgICAgICBwd19jdHgtPnBpcGV3aXJlX2ZkID0gMDsKPiArICAgIH0KPiAr ICAgIGF2X2ZyYW1lX2ZyZWUoJnB3X2N0eC0+Y3VycmVudF9mcmFtZSk7Cj4gKyAgICBhdl9idWZm ZXJfdW5yZWYoJnB3X2N0eC0+aHdfZnJhbWVzX3JlZik7Cj4gKyAgICBhdl9idWZmZXJfdW5yZWYo JnB3X2N0eC0+aHdfZGV2aWNlX3JlZik7Cj4gKwo+ICsgICAgLy8gREJ1cyBjbGVhbnVwCj4gKyAg ICBpZiAocHdfY3R4LT5zZXNzaW9uX2hhbmRsZSkgewo+ICsgICAgICAgIHJldCA9IHNkX2J1c19j YWxsX21ldGhvZChwd19jdHgtPmNvbm5lY3Rpb24sCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERFU1RJTkFUSU9OLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwd19jdHgtPnNlc3Npb25faGFuZGxlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5TZXNzaW9uIiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkNsb3NlIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Cj4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywKPiArICAgICAgICAgICAgICAgICAgICJG YWlsZWQgdG8gY2xvc2UgcG9ydGFsIHNlc3Npb246ICVzXG4iLCBzdHJlcnJvcigtcmV0KSk7Cj4g Kwo+ICsgICAgICAgIGF2X2ZyZWVwKCZwd19jdHgtPnNlc3Npb25faGFuZGxlKTsKPiArICAgIH0K PiArICAgIHNkX2J1c19mbHVzaF9jbG9zZV91bnJlZihwd19jdHgtPmNvbm5lY3Rpb24pOwo+ICsg ICAgYXZfZnJlZXAoJnB3X2N0eC0+c2VuZGVyX25hbWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHBpcGV3aXJlZ3JhYl9jb25maWdfcHJvcHMoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQo+ICt7Cj4g KyAgICBBVkZyYW1lICpmcmFtZTsKPiArICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9 IG91dGxpbmstPnNyYy0+cHJpdjsKPiArCj4gKyAgICBBVlJhdGlvbmFsIHRpbWVfYmFzZSA9IGF2 X2ludl9xKHB3X2N0eC0+ZnJhbWVyYXRlKTsKPiArICAgIHB3X2N0eC0+ZnJhbWVfZHVyYXRpb24g PSBhdl9yZXNjYWxlX3EoMSwgdGltZV9iYXNlLCBBVl9USU1FX0JBU0VfUSk7Cj4gKyAgICBwd19j dHgtPnRpbWVfZnJhbWUgPSBhdl9nZXR0aW1lX3JlbGF0aXZlKCk7Cj4gKwo+ICsgICAgb3V0bGlu ay0+dyA9IHB3X2N0eC0+d2lkdGg7Cj4gKyAgICBvdXRsaW5rLT5oID0gcHdfY3R4LT5oZWlnaHQ7 Cj4gKyAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBBVl9USU1FX0JBU0VfUTsKPiArICAgIG91dGxp bmstPmZyYW1lX3JhdGUgPSBwd19jdHgtPmZyYW1lcmF0ZTsKPiArCj4gKyAgICBmcmFtZSA9IGZm X2dldF92aWRlb19idWZmZXIob3V0bGluaywgcHdfY3R4LT53aWR0aCwgcHdfY3R4LT5oZWlnaHQp Owo+ICsgICAgaWYgKCFmcmFtZSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ ICsgICAgcHRocmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOwo+ ICsgICAgcHdfY3R4LT5jdXJyZW50X2ZyYW1lID0gZnJhbWU7Cj4gKyAgICBwdGhyZWFkX211dGV4 X3VubG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKPiArCj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwaXBld2lyZWdyYWJfcmVxdWVzdF9mcmFtZShBVkZp bHRlckxpbmsgKm91dGxpbmspCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBpbnQ2NF90IGN1 cnRpbWUsIGRlbGF5Owo+ICsgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gb3V0bGlu ay0+c3JjLT5wcml2Owo+ICsgICAgQVZGcmFtZSAqZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygpOwo+ ICsgICAgaWYgKCFmcmFtZSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsK PiArICAgIHB3X2N0eC0+dGltZV9mcmFtZSArPSBwd19jdHgtPmZyYW1lX2R1cmF0aW9uOwo+ICsg ICAgd2hpbGUgKDEpIHsKPiArICAgICAgICBjdXJ0aW1lID0gYXZfZ2V0dGltZV9yZWxhdGl2ZSgp Owo+ICsgICAgICAgIGRlbGF5ICAgPSBwd19jdHgtPnRpbWVfZnJhbWUgLSBjdXJ0aW1lOwo+ICsg ICAgICAgIGlmIChkZWxheSA8PSAwKQo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBh dl91c2xlZXAoZGVsYXkpOwo+ICsgICAgfQo+ICsKPiArICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygm cHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKPiArICAgIHJldCA9IGF2X2ZyYW1lX3JlZihm cmFtZSwgcHdfY3R4LT5jdXJyZW50X2ZyYW1lKTsKPiArICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiAr ICAgICAgICBhdl9mcmFtZV9mcmVlKCZmcmFtZSk7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiAr ICAgIH0KPiArCj4gKyAgICBmcmFtZS0+cHRzID0gYXZfZ2V0dGltZSgpOwo+ICsgICAgZnJhbWUt PmR1cmF0aW9uID0gcHdfY3R4LT5mcmFtZV9kdXJhdGlvbjsKPiArICAgIGZyYW1lLT5zYW1wbGVf YXNwZWN0X3JhdGlvID0gKEFWUmF0aW9uYWwpIHsxLCAxfTsKPiArCj4gKyAgICByZXR1cm4gZmZf ZmlsdGVyX2ZyYW1lKG91dGxpbmssIGZyYW1lKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwaXBl d2lyZWdyYWJfcXVlcnlfZm9ybWF0cyhBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ICsgICAg UGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2Owo+ICsgICAgZW51bSBBVlBp eGVsRm9ybWF0IHBpeF9mbXRzW10gPSB7cHdfY3R4LT5hdl9weGxfZm9ybWF0LCBBVl9QSVhfRk1U X05PTkV9Owo+ICsKPiArICAgIHJldHVybiBmZl9zZXRfY29tbW9uX2Zvcm1hdHNfZnJvbV9saXN0 KGN0eCwgcGl4X2ZtdHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgcGlw ZXdpcmVncmFiX291dHB1dHNbXSA9IHsKPiArICAgIHsKPiArICAgICAgICAubmFtZSAgICAgICAg ICA9ICJkZWZhdWx0IiwKPiArICAgICAgICAudHlwZSAgICAgICAgICA9IEFWTUVESUFfVFlQRV9W SURFTywKPiArICAgICAgICAucmVxdWVzdF9mcmFtZSA9IHBpcGV3aXJlZ3JhYl9yZXF1ZXN0X2Zy YW1lLAo+ICsgICAgICAgIC5jb25maWdfcHJvcHMgID0gcGlwZXdpcmVncmFiX2NvbmZpZ19wcm9w cywKPiArICAgIH0sCj4gK307Cj4gKwo+ICtjb25zdCBBVkZpbHRlciBmZl92c3JjX3BpcGV3aXJl Z3JhYj0gewo+ICsgICAgLm5hbWUgPSAicGlwZXdpcmVncmFiIiwKPiArICAgIC5kZXNjcmlwdGlv biA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJDYXB0dXJlIHNjcmVlbiBvciB3aW5kb3cgdXNpbmcg UGlwZVdpcmUuIiksCj4gKyAgICAucHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBQaXBld2lyZUdy YWJDb250ZXh0KSwKPiArICAgIC5wcml2X2NsYXNzID0gJnBpcGV3aXJlZ3JhYl9jbGFzcywKPiAr ICAgIC5pbml0ID0gcGlwZXdpcmVncmFiX2luaXQsCj4gKyAgICAudW5pbml0ID0gcGlwZXdpcmVn cmFiX3VuaW5pdCwKPiArICAgIC5pbnB1dHMgPSBOVUxMLAo+ICsgICAgRklMVEVSX09VVFBVVFMo cGlwZXdpcmVncmFiX291dHB1dHMpLAo+ICsgICAgRklMVEVSX1FVRVJZX0ZVTkMocGlwZXdpcmVn cmFiX3F1ZXJ5X2Zvcm1hdHMpLAo+ICt9Owo+IC0tIAo+IDIuMzQuMQo+IAo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxp bmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4gCj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxp bmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRo IHN1YmplY3QgInVuc3Vic2NyaWJlIi4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZt cGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwK ClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwt cmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=