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 CAF91476EA for ; Wed, 20 Sep 2023 00:47:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ACEF168C949; Wed, 20 Sep 2023 03:47:15 +0300 (EEST) Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C230F68C60E for ; Wed, 20 Sep 2023 03:47:09 +0300 (EEST) Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-50317080342so4609191e87.2 for ; Tue, 19 Sep 2023 17:47:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695170828; x=1695775628; darn=ffmpeg.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=AXa/y3aQOXl2RS92MXYZeff2Up27yKcvkzYkLQw2VFA=; b=jWz1zwfKPnFwfGj4Naka9w7w+4jXfG1aNGlOPKET2BPBVZMSuMrz4BFAyDoZ4Pp3Jm YaUX4PsebgZ2SCA3Fmg7+Hrq+8ULA+sSK4sGdAfpw1RsqBeaNptM1JWopu+0pG4vuuLu ZdSD4ps//l9q5SxIbvyVRLU6pZfhc11FnIX4RpC13uFLOknYInVSXTh54zyBb9g0ap2+ 1xiqwHsGd8aRpx8ndqfqbr0ipB5fv2Q7gxAwvOtDz2Zt8Ui4XYsq8KUzOfUonVVEH88c g4sV4+98D6a4mRYs8GO1RIxT18IbDECRG6nv2pZzDhcPKlntSE1Jsl697bojV7f/T+Py F3cA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695170828; x=1695775628; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AXa/y3aQOXl2RS92MXYZeff2Up27yKcvkzYkLQw2VFA=; b=vXXBmICivsslI0k7YLP4SuVeb8gCRxzIpB+IbzveZ695W/+A8kyVsnuJexst6hL1T/ 1BrlTmxwwMzp2zJjoo+hT+hcb9stb6lxk4SNl+CepSUjMRvKXDhgmpnmqj43+CZ+F+4d nAQEQzrrcPrxVLku4ivhBLnViHkH6qIFVktThF9dNzjcAZVRAvyNfq+hAjarZzDVl2BB vrmEEjFMu9JSb5xXa0SpB82vfNJC+6u/ccbWYC/c7wjAOmk4+heZJ8naenXqNRQgw+1A 7fuO7i9bh7usE/AXv3NStRr0r+A83evNgofPv9ay2K3M7HzHc1aEHlqSepxh1NvZsLKV PEQQ== X-Gm-Message-State: AOJu0YyuJyXAVWJEsmq5VBjcCDExoydtuaz8HyjUVsITqucAf1PVWwck cgbQeZxpZ3GoBgLJuVBTaGjrXu1gDDJE2jivYmRhkO5EMpvTGw== X-Google-Smtp-Source: AGHT+IEaMe1nrn229o/wN3/rNaY30WUDcuWBMhnwYCuz3GMrVj8TKbJMdvsgtSj6yjSKuqYt8Ku7TONC6a1vphnqqnQ= X-Received: by 2002:a05:6512:39ca:b0:503:7c0:ae96 with SMTP id k10-20020a05651239ca00b0050307c0ae96mr1291913lfu.20.1695170827829; Tue, 19 Sep 2023 17:47:07 -0700 (PDT) MIME-Version: 1.0 References: <20230911075232.797886-1-fei.w.wang@intel.com> <20230911075232.797886-7-fei.w.wang@intel.com> In-Reply-To: <20230911075232.797886-7-fei.w.wang@intel.com> From: Neal Gompa Date: Tue, 19 Sep 2023 20:46:31 -0400 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v5 7/8] lavc/vaapi_encode: Add VAAPI AV1 encoder X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: fei.w.wang@intel.com 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: T24gTW9uLCBTZXAgMTEsIDIwMjMgYXQgMzo1M+KAr0FNIDxmZWkudy53YW5nLWF0LWludGVsLmNv bUBmZm1wZWcub3JnPiB3cm90ZToKPgo+IEZyb206IEZlaSBXYW5nIDxmZWkudy53YW5nQGludGVs LmNvbT4KPgo+IFNpZ25lZC1vZmYtYnk6IEZlaSBXYW5nIDxmZWkudy53YW5nQGludGVsLmNvbT4K PiAtLS0KPiBVcGRhdGU6Cj4gMS4gdXNlIEFWX1BST0ZJTEUqIGluc3RlYWQgb2YgZGVwcmVjYXRl ZCBGRl9QUk9GSUxFKi4KPgo+ICBDaGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr Cj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKPiAgZG9jL2VuY29kZXJz LnRleGkgICAgICAgICAgICAgfCAgMTQgKwo+ICBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAgICAg ICB8ICAgMiArCj4gIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgICAgICAgIHwgICAxICsKPiAgbGli YXZjb2RlYy9hdjFfbGV2ZWxzLmMgICAgICAgfCAgOTIgKysrKwo+ICBsaWJhdmNvZGVjL2F2MV9s ZXZlbHMuaCAgICAgICB8ICA1OCArKysKPiAgbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYyAgICAg fCAxOTggKysrKystLQo+ICBsaWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5oICAgICB8ICAyNCArCj4g IGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jIHwgOTQ5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgbGliYXZjb2RlYy92ZXJzaW9uLmggICAgICAgICAgfCAgIDIgKy0K PiAgMTEgZmlsZXMgY2hhbmdlZCwgMTMxMSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYXYxX2xldmVscy5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdmNvZGVjL2F2MV9sZXZlbHMuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMKPgo+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cg Yi9DaGFuZ2Vsb2cKPiBpbmRleCAwY2ZjZWNmYjkzLi4zMDNhM2Q5Y2EyIDEwMDY0NAo+IC0tLSBh L0NoYW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+IEBAIC0zMiw2ICszMiw3IEBAIHZlcnNpb24g PG5leHQ+Ogo+ICAtIGFwc25yIGFuZCBhc2lzZHIgYXVkaW8gZmlsdGVycwo+ICAtIE9TUSBkZW11 eGVyIGFuZCBkZWNvZGVyCj4gIC0gU3VwcG9ydCBIRVZDLFZQOSxBVjEgY29kZWMgZm91cmNjbGlz dCBpbiBlbmhhbmNlZCBydG1wIHByb3RvY29sCj4gKy0gVkFBUEkgQVYxIGVuY29kZXIKPgo+Cj4g IHZlcnNpb24gNi4wOgo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiBpbmRl eCBiZDdmNzY5N2M4Li5lYzdhODBjZDQ4IDEwMDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBi L2NvbmZpZ3VyZQo+IEBAIC0zMzIzLDYgKzMzMjMsOCBAQCBhdjFfcXN2X2RlY29kZXJfc2VsZWN0 PSJxc3ZkZWMiCj4gIGF2MV9xc3ZfZW5jb2Rlcl9zZWxlY3Q9InFzdmVuYyIKPiAgYXYxX3Fzdl9l bmNvZGVyX2RlcHM9ImxpYnZwbCIKPiAgYXYxX2FtZl9lbmNvZGVyX2RlcHM9ImFtZiIKPiArYXYx X3ZhYXBpX2VuY29kZXJfZGVwcz0iVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxIgo+ICth djFfdmFhcGlfZW5jb2Rlcl9zZWxlY3Q9ImNic19hdjEgdmFhcGlfZW5jb2RlIgo+Cj4gICMgcGFy c2Vycwo+ICBhYWNfcGFyc2VyX3NlbGVjdD0iYWR0c19oZWFkZXIgbXBlZzRhdWRpbyIKPiBAQCAt NzExMCw2ICs3MTEyLDcgQEAgaWYgZW5hYmxlZCB2YWFwaTsgdGhlbgo+ICAgICAgY2hlY2tfdHlw ZSAidmEvdmEuaCB2YS92YV9lbmNfanBlZy5oIiAiVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVy SlBFRyIKPiAgICAgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5jX3ZwOC5oIiAgIlZBRW5j UGljdHVyZVBhcmFtZXRlckJ1ZmZlclZQOCIKPiAgICAgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEv dmFfZW5jX3ZwOS5oIiAgIlZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlclZQOSIKPiArICAgIGNo ZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5jX2F2MS5oIiAgIlZBRW5jUGljdHVyZVBhcmFtZXRl ckJ1ZmZlckFWMSIKPiAgZmkKPgo+ICBpZiBlbmFibGVkX2FsbCBvcGVuY2wgbGliZHJtIDsgdGhl bgo+IGRpZmYgLS1naXQgYS9kb2MvZW5jb2RlcnMudGV4aSBiL2RvYy9lbmNvZGVycy50ZXhpCj4g aW5kZXggNmY4ZjVlMTI3ZS4uZDdkOTU4NGEwYyAxMDA2NDQKPiAtLS0gYS9kb2MvZW5jb2RlcnMu dGV4aQo+ICsrKyBiL2RvYy9lbmNvZGVycy50ZXhpCj4gQEAgLTM5OTUsNiArMzk5NSwyMCBAQCBB dmVyYWdlIHZhcmlhYmxlIGJpdHJhdGUuCj4gIEVhY2ggZW5jb2RlciBhbHNvIGhhcyBpdHMgb3du IHNwZWNpZmljIG9wdGlvbnM6Cj4gIEB0YWJsZSBAb3B0aW9uCj4KPiArQGl0ZW0gYXYxX3ZhYXBp Cj4gK0BvcHRpb257cHJvZmlsZX0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX3Byb2ZpbGV9 Lgo+ICtAb3B0aW9ue3RpZXJ9IHNldHMgdGhlIHZhbHVlIG9mIEBlbXBoe3NlcV90aWVyfS4KPiAr QG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX2xldmVsX2lkeH0uCj4g Kwo+ICtAdGFibGUgQG9wdGlvbgo+ICtAaXRlbSB0aWxlcwo+ICtTZXQgdGhlIG51bWJlciBvZiB0 aWxlcyB0byBlbmNvZGUgdGhlIGlucHV0IHZpZGVvIHdpdGgsIGFzIGNvbHVtbnMgeCByb3dzLgo+ ICsoZGVmYXVsdCBpcyBhdXRvLCB3aGljaCBtZWFucyB1c2UgbWluaW1hbCB0aWxlIGNvbHVtbi9y b3cgbnVtYmVyKS4KPiArQGl0ZW0gdGlsZV9ncm91cHMKPiArU2V0IHRpbGUgZ3JvdXBzIG51bWJl ci4gQWxsIHRoZSB0aWxlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFzIGV2ZW5seSBhcyBwb3NzaWJs ZSB0bwo+ICtlYWNoIHRpbGUgZ3JvdXAuIChkZWZhdWx0IGlzIDEpLgo+ICtAZW5kIHRhYmxlCj4g Kwo+ICBAaXRlbSBoMjY0X3ZhYXBpCj4gIEBvcHRpb257cHJvZmlsZX0gc2V0cyB0aGUgdmFsdWUg b2YgQGVtcGh7cHJvZmlsZV9pZGN9IGFuZCB0aGUgQGVtcGh7Y29uc3RyYWludF9zZXQqX2ZsYWd9 cy4KPiAgQG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7bGV2ZWxfaWRjfS4K PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUK PiBpbmRleCBiZjNiMGE5M2Y5Li5jYWUyZTc3M2ExIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMv TWFrZWZpbGUKPiArKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gQEAgLTI1OCw2ICsyNTgsNyBA QCBPQkpTLSQoQ09ORklHX0FWMV9NRURJQUNPREVDX0RFQ09ERVIpICArPSBtZWRpYWNvZGVjZGVj Lm8KPiAgT0JKUy0kKENPTkZJR19BVjFfTUVESUFDT0RFQ19FTkNPREVSKSAgKz0gbWVkaWFjb2Rl Y2VuYy5vCj4gIE9CSlMtJChDT05GSUdfQVYxX05WRU5DX0VOQ09ERVIpICAgICAgICs9IG52ZW5j X2F2MS5vIG52ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19BVjFfUVNWX0VOQ09ERVIpICAgICAgICAg Kz0gcXN2ZW5jX2F2MS5vCj4gK09CSlMtJChDT05GSUdfQVYxX1ZBQVBJX0VOQ09ERVIpICAgICAg ICs9IHZhYXBpX2VuY29kZV9hdjEubyBhdjFfbGV2ZWxzLm8KPiAgT0JKUy0kKENPTkZJR19BVlJO X0RFQ09ERVIpICAgICAgICAgICAgKz0gYXZybmRlYy5vCj4gIE9CSlMtJChDT05GSUdfQVZSUF9E RUNPREVSKSAgICAgICAgICAgICs9IHIyMTBkZWMubwo+ICBPQkpTLSQoQ09ORklHX0FWUlBfRU5D T0RFUikgICAgICAgICAgICArPSByMjEwZW5jLm8KPiBAQCAtMTMyMiw2ICsxMzIzLDcgQEAgVEVT VFBST0dTID0gYXZjb2RlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ICAgICAgICAgICAgICBqcGVnMjAwMGR3dCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gICAgICAgICAgICAgIG1hdGhvcHMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+Cj4g K1RFU1RQUk9HUy0kKENPTkZJR19BVjFfVkFBUElfRU5DT0RFUikgICAgICs9IGF2MV9sZXZlbHMK PiAgVEVTVFBST0dTLSQoQ09ORklHX0NBQkFDKSAgICAgICAgICAgICAgICAgKz0gY2FiYWMKPiAg VEVTVFBST0dTLSQoQ09ORklHX0RDVCkgICAgICAgICAgICAgICAgICAgKz0gYXZmZnQKPiAgVEVT VFBST0dTLSQoQ09ORklHX0ZGVCkgICAgICAgICAgICAgICAgICAgKz0gZmZ0IGZmdC1maXhlZDMy Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNv ZGVjcy5jCj4gaW5kZXggNmU5NWNhNTYzNi4uNTEzNmE1NjZmMSAxMDA2NDQKPiAtLS0gYS9saWJh dmNvZGVjL2FsbGNvZGVjcy5jCj4gKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+IEBAIC04 NDUsNiArODQ1LDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX252ZW5jX2VuY29kZXI7 Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV9xc3ZfZGVjb2RlcjsKPiAgZXh0ZXJuIGNv bnN0IEZGQ29kZWMgZmZfYXYxX3Fzdl9lbmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBm Zl9hdjFfYW1mX2VuY29kZXI7Cj4gK2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV92YWFwaV9l bmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuaDI2NF9lbmNvZGVyOwo+ ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuaDI2NF9kZWNvZGVyOwo+ICBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9oMjY0X2FtZl9lbmNvZGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL2F2MV9sZXZlbHMuYyBiL2xpYmF2Y29kZWMvYXYxX2xldmVscy5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi4xOWI2ZWUxNzM2Cj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2xpYmF2Y29kZWMvYXYxX2xldmVscy5jCj4gQEAgLTAsMCArMSw5MiBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4g KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiAr ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoK PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8c3RkZGVmLmg+Cj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbWFjcm9z LmgiCj4gKyNpbmNsdWRlICJhdjFfbGV2ZWxzLmgiCj4gKwo+ICsvKiogaWdub3JlIGVudHJpZXMg d2hpY2ggbmFtZWQgaW4gc3BlYyBidXQgbm8gZGV0YWlscy4gTGlrZSBsZXZlbCAyLjIgYW5kIDcu MC4gKi8KPiArc3RhdGljIGNvbnN0IEFWMUxldmVsRGVzY3JpcHRvciBhdjFfbGV2ZWxzW10gPSB7 Cj4gKyAgICAvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgIE1heFZTaXplICAgICAgICAgICAg ICAgICAgICAgICAgICAgTWFpbk1icHMgICAgICAgICAgICAgIE1heFRpbGVzCj4gKyAgICAvLyB8 ICBsZXZlbF9pZHggICAgICAgICAgICAgICAgIHwgTWF4RGlzcGxheVJhdGUgICAgICAgICAgICAg ICAgICAgIHwgSGlnaE1icHMgICAgICAgICB8IE1heFRpbGVDb2xzCj4gKyAgICAvLyB8ICAgICAg fCAgIE1heFBpY1NpemUgICAgICAgIHwgICAgICAgfCAgICAgTWF4RGVjb2RlUmF0ZSAgICAgICAg IHwgICAgfCAgIE1haW5DUiAgICB8ICAgfAo+ICsgICAgLy8gfCAgICAgIHwgICAgIHwgICAgTWF4 SFNpemUgICB8ICAgICAgIHwgICAgICAgICAgIHwgTWF4SGVhZGVyUmF0ZSB8ICAgIHwgICAgIHwg SGlnaENSfCAgIHwKPiArICAgIC8vIHwgICAgICB8ICAgICB8ICAgICAgICB8ICAgICAgfCAgICAg ICB8ICAgICAgICAgICB8ICAgICAgIHwgICAgICAgfCAgICB8ICAgICB8ICB8ICAgIHwgICB8Cj4g KyAgICB7ICIyLjAiLCAgMCwgICAxNDc0NTYsICAyMDQ4LCAxMTUyLCAgIDQ0MjM2ODAsICAgICA1 NTI5NjAwLCAxNTAsICAgMS41LCAgICAgMCwgMiwgMCwgICA4LCAgNCB9LAo+ICsgICAgeyAiMi4x IiwgIDEsICAgMjc4Nzg0LCAgMjgxNiwgMTU4NCwgICA4MzYzNTIwLCAgICAxMDQ1NDQwMCwgMTUw LCAgIDMuMCwgICAgIDAsIDIsIDAsICAgOCwgIDQgfSwKPiArICAgIHsgIjMuMCIsICA0LCAgIDY2 NTg1NiwgIDQzNTIsIDI0NDgsICAxOTk3NTY4MCwgICAgMjQ5Njk2MDAsIDE1MCwgICA2LjAsICAg ICAwLCAyLCAwLCAgMTYsICA2IH0sCj4gKyAgICB7ICIzLjEiLCAgNSwgIDEwNjUwMjQsICA1NTA0 LCAzMDk2LCAgMzE5NTA3MjAsICAgIDM5OTM4NDAwLCAxNTAsICAxMC4wLCAgICAgMCwgMiwgMCwg IDE2LCAgNiB9LAo+ICsgICAgeyAiNC4wIiwgIDgsICAyMzU5Mjk2LCAgNjE0NCwgMzQ1NiwgIDcw Nzc4ODgwLCAgICA3Nzg1Njc2OCwgMzAwLCAgMTIuMCwgIDMwLjAsIDQsIDQsICAzMiwgIDggfSwK PiArICAgIHsgIjQuMSIsICA5LCAgMjM1OTI5NiwgIDYxNDQsIDM0NTYsICAxNDE1NTc3NjAsICAx NTU3MTM1MzYsIDMwMCwgIDIwLjAsICA1MC4wLCA0LCA0LCAgMzIsICA4IH0sCj4gKyAgICB7ICI1 LjAiLCAxMiwgIDg5MTI4OTYsICA4MTkyLCA0MzUyLCAgMjY3Mzg2ODgwLCAgMjczNzE1MjAwLCAz MDAsICAzMC4wLCAxMDAuMCwgNiwgNCwgIDY0LCAgOCB9LAo+ICsgICAgeyAiNS4xIiwgMTMsICA4 OTEyODk2LCAgODE5MiwgNDM1MiwgIDUzNDc3Mzc2MCwgIDU0NzQzMDQwMCwgMzAwLCAgNDAuMCwg MTYwLjAsIDgsIDQsICA2NCwgIDggfSwKPiArICAgIHsgIjUuMiIsIDE0LCAgODkxMjg5NiwgIDgx OTIsIDQzNTIsIDEwNjk1NDc1MjAsIDEwOTQ4NjA4MDAsIDMwMCwgIDYwLjAsIDI0MC4wLCA4LCA0 LCAgNjQsICA4IH0sCj4gKyAgICB7ICI1LjMiLCAxNSwgIDg5MTI4OTYsICA4MTkyLCA0MzUyLCAx MDY5NTQ3NTIwLCAxMTc2NTAyMjcyLCAzMDAsICA2MC4wLCAyNDAuMCwgOCwgNCwgIDY0LCAgOCB9 LAo+ICsgICAgeyAiNi4wIiwgMTYsIDM1NjUxNTg0LCAxNjM4NCwgODcwNCwgMTA2OTU0NzUyMCwg MTE3NjUwMjI3MiwgMzAwLCAgNjAuMCwgMjQwLjAsIDgsIDQsIDEyOCwgMTYgfSwKPiArICAgIHsg IjYuMSIsIDE3LCAzNTY1MTU4NCwgMTYzODQsIDg3MDQsIDIxMzkwOTUwNDAsIDIxODk3MjE2MDAs IDMwMCwgMTAwLjAsIDQ4MC4wLCA4LCA0LCAxMjgsIDE2IH0sCj4gKyAgICB7ICI2LjIiLCAxOCwg MzU2NTE1ODQsIDE2Mzg0LCA4NzA0LCA0Mjc4MTkwMDgwLCA0Mzc5NDQzMjAwLCAzMDAsIDE2MC4w LCA4MDAuMCwgOCwgNCwgMTI4LCAxNiB9LAo+ICsgICAgeyAiNi4zIiwgMTksIDM1NjUxNTg0LCAx NjM4NCwgODcwNCwgNDI3ODE5MDA4MCwgNDcwNjAwOTA4OCwgMzAwLCAxNjAuMCwgODAwLjAsIDgs IDQsIDEyOCwgMTYgfSwKPiArfTsKPiArCj4gK2NvbnN0IEFWMUxldmVsRGVzY3JpcHRvciAqZmZf YXYxX2d1ZXNzX2xldmVsKGludDY0X3QgYml0cmF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpZXIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbGVzLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGlsZV9jb2xzLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBmcHMpCj4gK3sKPiAr ICAgIGludCBwaWNfc2l6ZTsKPiArICAgIHVpbnQ2NF90IGRpc3BsYXlfcmF0ZTsKPiArICAgIGZs b2F0IG1heF9icjsKPiArCj4gKyAgICBwaWNfc2l6ZSA9IHdpZHRoICogaGVpZ2h0Owo+ICsgICAg ZGlzcGxheV9yYXRlID0gKHVpbnQ2NF90KXBpY19zaXplICogZnBzOwo+ICsKPiArICAgIGZvciAo aW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoYXYxX2xldmVscyk7IGkrKykgewo+ICsgICAg ICAgIGNvbnN0IEFWMUxldmVsRGVzY3JpcHRvciAqbGV2ZWwgPSAmYXYxX2xldmVsc1tpXTsKPiAr ICAgICAgICAvLyBMaW1pdGF0aW9uOiBkZWNvZGUgcmF0ZSwgaGVhZGVyIHJhdGUsIGNvbXByZXNz IHJhdGUsIGV0Yy4gYXJlIG5vdCBjb25zaWRlcmVkLgo+ICsgICAgICAgIGlmIChwaWNfc2l6ZSA+ IGxldmVsLT5tYXhfcGljX3NpemUpCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAg IGlmICh3aWR0aCA+IGxldmVsLT5tYXhfaF9zaXplKQo+ICsgICAgICAgICAgICBjb250aW51ZTsK PiArICAgICAgICBpZiAoaGVpZ2h0ID4gbGV2ZWwtPm1heF92X3NpemUpCj4gKyAgICAgICAgICAg IGNvbnRpbnVlOwo+ICsgICAgICAgIGlmIChkaXNwbGF5X3JhdGUgPiBsZXZlbC0+bWF4X2Rpc3Bs YXlfcmF0ZSkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIGlmICh0aWVy KQo+ICsgICAgICAgICAgICBtYXhfYnIgPSBsZXZlbC0+aGlnaF9tYnBzOwo+ICsgICAgICAgIGVs c2UKPiArICAgICAgICAgICAgbWF4X2JyID0gbGV2ZWwtPm1haW5fbWJwczsKPiArICAgICAgICBp ZiAoIW1heF9icikKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgaWYgKGJpdHJh dGUgPiAoaW50NjRfdCkoMTAwMDAwMC4wICogbWF4X2JyKSkKPiArICAgICAgICAgICAgY29udGlu dWU7Cj4gKwo+ICsgICAgICAgIGlmICh0aWxlcyA+IGxldmVsLT5tYXhfdGlsZXMpCj4gKyAgICAg ICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIGlmICh0aWxlX2NvbHMgPiBsZXZlbC0+bWF4X3Rp bGVfY29scykKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgcmV0dXJuIGxldmVs Owo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBOVUxMOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvYXYxX2xldmVscy5oIGIvbGliYXZjb2RlYy9hdjFfbGV2ZWxzLmgKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjE2NGNiODc2YmEKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvbGliYXZjb2RlYy9hdjFfbGV2ZWxzLmgKPiBAQCAtMCwwICsxLDU4IEBACj4g Ky8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgQVZDT0RFQ19BVjFfTEVWRUxTX0gKPiArI2RlZmluZSBBVkNP REVDX0FWMV9MRVZFTFNfSAo+ICsKPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsKPiArdHlwZWRl ZiBzdHJ1Y3QgQVYxTGV2ZWxEZXNjcmlwdG9yIHsKPiArICAgIGNoYXIgICAgIG5hbWVbNF07Cj4g KyAgICB1aW50OF90ICBsZXZlbF9pZHg7Cj4gKwo+ICsgICAgdWludDMyX3QgbWF4X3BpY19zaXpl Owo+ICsgICAgdWludDMyX3QgbWF4X2hfc2l6ZTsKPiArICAgIHVpbnQzMl90IG1heF92X3NpemU7 Cj4gKyAgICB1aW50NjRfdCBtYXhfZGlzcGxheV9yYXRlOwo+ICsgICAgdWludDY0X3QgbWF4X2Rl Y29kZV9yYXRlOwo+ICsKPiArICAgIHVpbnQzMl90IG1heF9oZWFkZXJfcmF0ZTsKPiArICAgIGZs b2F0ICAgIG1haW5fbWJwczsKPiArICAgIGZsb2F0ICAgIGhpZ2hfbWJwczsKPiArICAgIHVpbnQz Ml90IG1haW5fY3I7Cj4gKyAgICB1aW50MzJfdCBoaWdoX2NyOwo+ICsgICAgdWludDMyX3QgbWF4 X3RpbGVzOwo+ICsgICAgdWludDMyX3QgbWF4X3RpbGVfY29sczsKPiArfSBBVjFMZXZlbERlc2Ny aXB0b3I7Cj4gKwo+ICsvKioKPiArICogR3Vlc3MgdGhlIGxldmVsIG9mIGEgc3RyZWFtIGZyb20g c29tZSBwYXJhbWV0ZXJzLgo+ICsgKgo+ICsgKiBVbmtub3duIHBhcmFtZXRlcnMgbWF5IGJlIHpl cm8sIGluIHdoaWNoIGNhc2UgdGhleSB3aWxsIGJlIGlnbm9yZWQuCj4gKyAqLwo+ICtjb25zdCBB VjFMZXZlbERlc2NyaXB0b3IgKmZmX2F2MV9ndWVzc19sZXZlbChpbnQ2NF90IGJpdHJhdGUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aWVyLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWln aHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0 aWxlX3Jvd3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCB0aWxlX2NvbHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZsb2F0IGZwcyk7Cj4gKwo+ICsjZW5kaWYgLyogQVZDT0RFQ19BVjFfTEVWRUxTX0gg Ki8KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYyBiL2xpYmF2Y29kZWMv dmFhcGlfZW5jb2RlLmMKPiBpbmRleCA3OTAzNjY3M2U3Li5lMzgyMDk1NmQxIDEwMDY0NAo+IC0t LSBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMKPiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2Vu Y29kZS5jCj4gQEAgLTY4Myw2ICs2ODMsMTEgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfc2V0 X291dHB1dF9wcm9wZXJ0eShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gICAgICAgICAgcGljLT5v cGFxdWVfcmVmID0gTlVMTDsKPiAgICAgIH0KPgo+ICsgICAgaWYgKGN0eC0+Y29kZWMtPmZsYWdz ICYgRkxBR19USU1FU1RBTVBfTk9fREVMQVkpIHsKPiArICAgICAgICBwa3QtPmR0cyA9IHBrdC0+ cHRzOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiAgICAgIGlmIChjdHgtPm91 dHB1dF9kZWxheSA9PSAwKSB7Cj4gICAgICAgICAgcGt0LT5kdHMgPSBwa3QtPnB0czsKPiAgICAg IH0gZWxzZSBpZiAocGljLT5lbmNvZGVfb3JkZXIgPCBjdHgtPmRlY29kZV9kZWxheSkgewo+IEBA IC02OTgsNjUgKzcwMywxNjAgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfc2V0X291dHB1dF9w cm9wZXJ0eShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gICAgICByZXR1cm4gMDsKPiAgfQo+Cj4g LXN0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX291dHB1dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYywg QVZQYWNrZXQgKnBrdCkKPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfZ2V0X2NvZGVkX2J1ZmZl cl9zaXplKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgVkFCdWZmZXJJRCBidWZfaWQpCj4gIHsKPiAg ICAgIFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiAgICAgIFZB Q29kZWRCdWZmZXJTZWdtZW50ICpidWZfbGlzdCwgKmJ1ZjsKPiArICAgIGludCBzaXplID0gMDsK PiAgICAgIFZBU3RhdHVzIHZhczsKPiAtICAgIGludCB0b3RhbF9zaXplID0gMDsKPiAtICAgIHVp bnQ4X3QgKnB0cjsKPiAgICAgIGludCBlcnI7Cj4KPiAtICAgIGVyciA9IHZhYXBpX2VuY29kZV93 YWl0KGF2Y3R4LCBwaWMpOwo+IC0gICAgaWYgKGVyciA8IDApCj4gLSAgICAgICAgcmV0dXJuIGVy cjsKPiAtCj4gLSAgICBidWZfbGlzdCA9IE5VTEw7Cj4gLSAgICB2YXMgPSB2YU1hcEJ1ZmZlcihj dHgtPmh3Y3R4LT5kaXNwbGF5LCBwaWMtPm91dHB1dF9idWZmZXIsCj4gKyAgICB2YXMgPSB2YU1h cEJ1ZmZlcihjdHgtPmh3Y3R4LT5kaXNwbGF5LCBidWZfaWQsCj4gICAgICAgICAgICAgICAgICAg ICAgICAodm9pZCoqKSZidWZfbGlzdCk7Cj4gICAgICBpZiAodmFzICE9IFZBX1NUQVRVU19TVUND RVNTKSB7Cj4gICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8g bWFwIG91dHB1dCBidWZmZXJzOiAiCj4gICAgICAgICAgICAgICAgICIlZCAoJXMpLlxuIiwgdmFz LCB2YUVycm9yU3RyKHZhcykpOwo+ICAgICAgICAgIGVyciA9IEFWRVJST1IoRUlPKTsKPiAtICAg ICAgICBnb3RvIGZhaWw7Cj4gKyAgICAgICAgcmV0dXJuIGVycjsKPiAgICAgIH0KPgo+ICAgICAg Zm9yIChidWYgPSBidWZfbGlzdDsgYnVmOyBidWYgPSBidWYtPm5leHQpCj4gLSAgICAgICAgdG90 YWxfc2l6ZSArPSBidWYtPnNpemU7Cj4gKyAgICAgICAgc2l6ZSArPSBidWYtPnNpemU7Cj4KPiAt ICAgIGVyciA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3QsIHRvdGFsX3NpemUsIDAp Owo+IC0gICAgcHRyID0gcGt0LT5kYXRhOwo+ICsgICAgdmFzID0gdmFVbm1hcEJ1ZmZlcihjdHgt Pmh3Y3R4LT5kaXNwbGF5LCBidWZfaWQpOwo+ICsgICAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VD Q0VTUykgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IHVubWFwIG91dHB1dCBidWZmZXJzOiAiCj4gKyAgICAgICAgICAgICAgICIlZCAoJXMpLlxuIiwg dmFzLCB2YUVycm9yU3RyKHZhcykpOwo+ICsgICAgICAgIGVyciA9IEFWRVJST1IoRUlPKTsKPiAr ICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgfQo+Cj4gLSAgICBpZiAoZXJyIDwgMCkKPiAtICAg ICAgICBnb3RvIGZhaWxfbWFwcGVkOwo+ICsgICAgcmV0dXJuIHNpemU7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2dldF9jb2RlZF9idWZmZXJfZGF0YShBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWQUJ1ZmZlcklEIGJ1Zl9pZCwgdWludDhfdCAqKmRzdCkKPiArewo+ICsgICAgVkFBUElFbmNv ZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgVkFDb2RlZEJ1ZmZlclNl Z21lbnQgKmJ1Zl9saXN0LCAqYnVmOwo+ICsgICAgVkFTdGF0dXMgdmFzOwo+ICsgICAgaW50IGVy cjsKPiArCj4gKyAgICB2YXMgPSB2YU1hcEJ1ZmZlcihjdHgtPmh3Y3R4LT5kaXNwbGF5LCBidWZf aWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAodm9pZCoqKSZidWZfbGlzdCk7Cj4gKyAgICBp ZiAodmFzICE9IFZBX1NUQVRVU19TVUNDRVNTKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJGYWlsZWQgdG8gbWFwIG91dHB1dCBidWZmZXJzOiAiCj4gKyAgICAgICAg ICAgICAgICIlZCAoJXMpLlxuIiwgdmFzLCB2YUVycm9yU3RyKHZhcykpOwo+ICsgICAgICAgIGVy ciA9IEFWRVJST1IoRUlPKTsKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgfQo+Cj4gICAg ICBmb3IgKGJ1ZiA9IGJ1Zl9saXN0OyBidWY7IGJ1ZiA9IGJ1Zi0+bmV4dCkgewo+ICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiT3V0cHV0IGJ1ZmZlcjogJXUgYnl0ZXMgIgo+ ICAgICAgICAgICAgICAgICAiKHN0YXR1cyAlMDh4KS5cbiIsIGJ1Zi0+c2l6ZSwgYnVmLT5zdGF0 dXMpOwo+Cj4gLSAgICAgICAgbWVtY3B5KHB0ciwgYnVmLT5idWYsIGJ1Zi0+c2l6ZSk7Cj4gLSAg ICAgICAgcHRyICs9IGJ1Zi0+c2l6ZTsKPiArICAgICAgICBtZW1jcHkoKmRzdCwgYnVmLT5idWYs IGJ1Zi0+c2l6ZSk7Cj4gKyAgICAgICAgKmRzdCArPSBidWYtPnNpemU7Cj4gICAgICB9Cj4KPiAt ICAgIHZhcyA9IHZhVW5tYXBCdWZmZXIoY3R4LT5od2N0eC0+ZGlzcGxheSwgcGljLT5vdXRwdXRf YnVmZmVyKTsKPiArICAgIHZhcyA9IHZhVW5tYXBCdWZmZXIoY3R4LT5od2N0eC0+ZGlzcGxheSwg YnVmX2lkKTsKPiAgICAgIGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MpIHsKPiAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byB1bm1hcCBvdXRwdXQgYnVm ZmVyczogIgo+ICAgICAgICAgICAgICAgICAiJWQgKCVzKS5cbiIsIHZhcywgdmFFcnJvclN0cih2 YXMpKTsKPiAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTyk7Cj4gLSAgICAgICAgZ290byBmYWls Owo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2dldF9jb2RlZF9kYXRhKEFWQ29kZWND b250ZXh0ICphdmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VkFBUElFbmNvZGVQaWN0dXJlICpwaWMsIEFWUGFja2V0ICpwa3QpCj4gK3sKPiArICAgIFZBQVBJ RW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIFZBQnVmZmVySUQg b3V0cHV0X2J1ZmZlcl9wcmV2Owo+ICsgICAgaW50IHRvdGFsX3NpemUgPSAwOwo+ICsgICAgdWlu dDhfdCAqcHRyOwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBpZiAoY3R4LT5jb2RlZF9idWZm ZXJfcmVmKSB7Cj4gKyAgICAgICAgb3V0cHV0X2J1ZmZlcl9wcmV2ID0gKFZBQnVmZmVySUQpKHVp bnRwdHJfdCljdHgtPmNvZGVkX2J1ZmZlcl9yZWYtPmRhdGE7Cj4gKyAgICAgICAgcmV0ID0gdmFh cGlfZW5jb2RlX2dldF9jb2RlZF9idWZmZXJfc2l6ZShhdmN0eCwgb3V0cHV0X2J1ZmZlcl9wcmV2 KTsKPiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAg ICAgICAgdG90YWxfc2l6ZSArPSByZXQ7Cj4gICAgICB9Cj4KPiArICAgIHJldCA9IHZhYXBpX2Vu Y29kZV9nZXRfY29kZWRfYnVmZmVyX3NpemUoYXZjdHgsIHBpYy0+b3V0cHV0X2J1ZmZlcik7Cj4g KyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArICAgIHRvdGFsX3NpemUg Kz0gcmV0Owo+ICsKPiArICAgIHJldCA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3Qs IHRvdGFsX3NpemUsIDApOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgZ290byBlbmQ7 Cj4gKyAgICBwdHIgPSBwa3QtPmRhdGE7Cj4gKwo+ICsgICAgaWYgKGN0eC0+Y29kZWRfYnVmZmVy X3JlZikgewo+ICsgICAgICAgIHJldCA9IHZhYXBpX2VuY29kZV9nZXRfY29kZWRfYnVmZmVyX2Rh dGEoYXZjdHgsIG91dHB1dF9idWZmZXJfcHJldiwgJnB0cik7Cj4gKyAgICAgICAgaWYgKHJldCA8 IDApCj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IHZh YXBpX2VuY29kZV9nZXRfY29kZWRfYnVmZmVyX2RhdGEoYXZjdHgsIHBpYy0+b3V0cHV0X2J1ZmZl ciwgJnB0cik7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsKPiArCj4g K2VuZDoKPiArICAgIGlmIChjdHgtPmNvZGVkX2J1ZmZlcl9yZWYpIHsKPiArICAgICAgICBhdl9i dWZmZXJfdW5yZWYoJmN0eC0+Y29kZWRfYnVmZmVyX3JlZik7Cj4gKyAgICB9Cj4gICAgICBhdl9i dWZmZXJfdW5yZWYoJnBpYy0+b3V0cHV0X2J1ZmZlcl9yZWYpOwo+ICAgICAgcGljLT5vdXRwdXRf YnVmZmVyID0gVkFfSU5WQUxJRF9JRDsKPgo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljLCBB VlBhY2tldCAqcGt0KQo+ICt7Cj4gKyAgICBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4 LT5wcml2X2RhdGE7Cj4gKyAgICBBVlBhY2tldCAqcGt0X3B0ciA9IHBrdDsKPiArICAgIGludCBl cnI7Cj4gKwo+ICsgICAgZXJyID0gdmFhcGlfZW5jb2RlX3dhaXQoYXZjdHgsIHBpYyk7Cj4gKyAg ICBpZiAoZXJyIDwgMCkKPiArICAgICAgICByZXR1cm4gZXJyOwo+ICsKPiArICAgIGlmIChwaWMt Pm5vbl9pbmRlcGVuZGVudF9mcmFtZSkgewo+ICsgICAgICAgIGF2X2Fzc2VydDAoIWN0eC0+Y29k ZWRfYnVmZmVyX3JlZik7Cj4gKyAgICAgICAgY3R4LT5jb2RlZF9idWZmZXJfcmVmID0gYXZfYnVm ZmVyX3JlZihwaWMtPm91dHB1dF9idWZmZXJfcmVmKTsKPiArCj4gKyAgICAgICAgaWYgKHBpYy0+ dGFpbF9zaXplKSB7Cj4gKyAgICAgICAgICAgIGlmIChjdHgtPnRhaWxfcGt0LT5zaXplKSB7Cj4g KyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEFWRVJST1JfQlVHKTsKPiArICAgICAgICAg ICAgICAgIGdvdG8gZW5kOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBlcnIg PSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgY3R4LT50YWlsX3BrdCwgcGljLT50YWlsX3Np emUsIDApOwo+ICsgICAgICAgICAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICAgICAgICAgIGdv dG8gZW5kOwo+ICsKPiArICAgICAgICAgICAgbWVtY3B5KGN0eC0+dGFpbF9wa3QtPmRhdGEsIHBp Yy0+dGFpbF9kYXRhLCBwaWMtPnRhaWxfc2l6ZSk7Cj4gKyAgICAgICAgICAgIHBrdF9wdHIgPSBj dHgtPnRhaWxfcGt0Owo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgZXJy ID0gdmFhcGlfZW5jb2RlX2dldF9jb2RlZF9kYXRhKGF2Y3R4LCBwaWMsIHBrdCk7Cj4gKyAgICAg ICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+ICsgICAgfQo+ICsKPiAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiT3V0cHV0IHJlYWQgZm9yIHBpYyAlIlBS SWQ2NCIvJSJQUklkNjQiLlxuIiwKPiAgICAgICAgICAgICBwaWMtPmRpc3BsYXlfb3JkZXIsIHBp Yy0+ZW5jb2RlX29yZGVyKTsKPiAtICAgIHJldHVybiAwOwo+Cj4gLWZhaWxfbWFwcGVkOgo+IC0g ICAgdmFVbm1hcEJ1ZmZlcihjdHgtPmh3Y3R4LT5kaXNwbGF5LCBwaWMtPm91dHB1dF9idWZmZXIp Owo+IC1mYWlsOgo+ICsgICAgdmFhcGlfZW5jb2RlX3NldF9vdXRwdXRfcHJvcGVydHkoYXZjdHgs IHBpYywgcGt0X3B0cik7Cj4gKwo+ICtlbmQ6Cj4gICAgICBhdl9idWZmZXJfdW5yZWYoJnBpYy0+ b3V0cHV0X2J1ZmZlcl9yZWYpOwo+ICAgICAgcGljLT5vdXRwdXRfYnVmZmVyID0gVkFfSU5WQUxJ RF9JRDsKPiAgICAgIHJldHVybiBlcnI7Cj4gQEAgLTExMjgsOSArMTIyOCwxOSBAQCBzdGF0aWMg aW50IHZhYXBpX2VuY29kZV9waWNrX25leHQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+Cj4gICAg ICB2YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwgcGljLCBwaWMsIDAsIDEsIDApOwo+ICAgICAg aWYgKHBpYy0+dHlwZSAhPSBQSUNUVVJFX1RZUEVfSURSKSB7Cj4gLSAgICAgICAgdmFhcGlfZW5j b2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgc3RhcnQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9QLAo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJfY291bnRlciA+IDAsIDApOwo+ICsgICAgICAgIC8vIFRPRE86IGFwcGx5IGJv dGggcHJldmlvdXMgYW5kIGZvcndhcmQgbXVsdGkgcmVmZXJlbmNlIGZvciBhbGwgdmFhcGkgZW5j b2RlcnMuCj4gKyAgICAgICAgLy8gQW5kIEwwL0wxIHJlZmVyZW5jZSBmcmFtZSBudW1iZXIgY2Fu IGJlIHNldCBkeW5hbWljYWxseSB0aHJvdWdoIHF1ZXJ5Cj4gKyAgICAgICAgLy8gVkFDb25maWdB dHRyaWJFbmNNYXhSZWZGcmFtZXMgYXR0cmlidXRlLgo+ICsgICAgICAgIGlmIChhdmN0eC0+Y29k ZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCBjdHgtPm5iX25leHRfcHJldjsgaSsrKQo+ICsgICAgICAgICAgICAgICAgdmFhcGlfZW5jb2Rl X2FkZF9yZWYoYXZjdHgsIHBpYywgY3R4LT5uZXh0X3ByZXZbaV0sCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1AsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiX2NvdW50ZXIgPiAwLCAwKTsKPiAr ICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZjdHgs IHBpYywgc3RhcnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlw ZSA9PSBQSUNUVVJFX1RZUEVfUCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Yl9jb3VudGVyID4gMCwgMCk7Cj4gKwo+ICAgICAgICAgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2 Y3R4LCBwaWMsIGN0eC0+bmV4dF9wcmV2W2N0eC0+bmJfbmV4dF9wcmV2IC0gMV0sIDAsIDAsIDEp Owo+ICAgICAgfQo+Cj4gQEAgLTEyOTIsNiArMTQwMiwxOSBAQCBpbnQgZmZfdmFhcGlfZW5jb2Rl X3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBrdCkKPiAg ICAgIEFWRnJhbWUgKmZyYW1lID0gY3R4LT5mcmFtZTsKPiAgICAgIGludCBlcnI7Cj4KPiArc3Rh cnQ6Cj4gKyAgICAvKiogaWYgbm8gQiBmcmFtZSBiZWZvcmUgcmVwZWF0IFAgZnJhbWUsIHNlbnQg cmVwZWF0IFAgZnJhbWUgb3V0LiAqLwo+ICsgICAgaWYgKGN0eC0+dGFpbF9wa3QtPnNpemUpIHsK PiArICAgICAgICBmb3IgKFZBQVBJRW5jb2RlUGljdHVyZSAqdG1wID0gY3R4LT5waWNfc3RhcnQ7 IHRtcDsgdG1wID0gdG1wLT5uZXh0KSB7Cj4gKyAgICAgICAgICAgIGlmICh0bXAtPnR5cGUgPT0g UElDVFVSRV9UWVBFX0IgJiYgdG1wLT5wdHMgPCBjdHgtPnRhaWxfcGt0LT5wdHMpCj4gKyAgICAg ICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgZWxzZSBpZiAoIXRtcC0+bmV4dCkgewo+ ICsgICAgICAgICAgICAgICAgYXZfcGFja2V0X21vdmVfcmVmKHBrdCwgY3R4LT50YWlsX3BrdCk7 Cj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAg IH0KPiArICAgIH0KPiArCj4gICAgICBlcnIgPSBmZl9lbmNvZGVfZ2V0X2ZyYW1lKGF2Y3R4LCBm cmFtZSk7Cj4gICAgICBpZiAoZXJyIDwgMCAmJiBlcnIgIT0gQVZFUlJPUl9FT0YpCj4gICAgICAg ICAgcmV0dXJuIGVycjsKPiBAQCAtMTM1NiwxNyArMTQ3OSwyMSBAQCBpbnQgZmZfdmFhcGlfZW5j b2RlX3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBrdCkK PiAgICAgICAgICByZXR1cm4gZXJyOwo+ICAgICAgfQo+Cj4gLSAgICB2YWFwaV9lbmNvZGVfc2V0 X291dHB1dF9wcm9wZXJ0eShhdmN0eCwgcGljLCBwa3QpOwo+IC0gICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfREVCVUcsICJPdXRwdXQgcGFja2V0OiBwdHMgJSJQUklkNjQiLCBkdHMgJSJQUklkNjQi LCAiCj4gLSAgICAgICAgICAgInNpemUgJWQgYnl0ZXMuXG4iLCBwa3QtPnB0cywgcGt0LT5kdHMs IHBrdC0+c2l6ZSk7Cj4gLQo+ICAgICAgY3R4LT5vdXRwdXRfb3JkZXIgPSBwaWMtPmVuY29kZV9v cmRlcjsKPiAgICAgIHZhYXBpX2VuY29kZV9jbGVhcl9vbGQoYXZjdHgpOwo+Cj4gKyAgICAvKiog bG9vcCB0byBnZXQgYW4gYXZhaWxhYmxlIHBrdCBpbiBlbmNvZGVyIGZsdXNoaW5nLiAqLwo+ICsg ICAgaWYgKGN0eC0+ZW5kX29mX3N0cmVhbSAmJiAhcGt0LT5zaXplKQo+ICsgICAgICAgIGdvdG8g c3RhcnQ7Cj4gKwo+ICtlbmQ6Cj4gKyAgICBpZiAocGt0LT5zaXplKQo+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiT3V0cHV0IHBhY2tldDogcHRzICUiUFJJZDY0IiwgZHRz ICUiUFJJZDY0IiwgIgo+ICsgICAgICAgICAgICAgICAic2l6ZSAlZCBieXRlcy5cbiIsIHBrdC0+ cHRzLCBwa3QtPmR0cywgcGt0LT5zaXplKTsKPiArCj4gICAgICByZXR1cm4gMDsKPiAgfQo+Cj4g LQo+ICBzdGF0aWMgYXZfY29sZCB2b2lkIHZhYXBpX2VuY29kZV9hZGRfZ2xvYmFsX3BhcmFtKEFW Q29kZWNDb250ZXh0ICphdmN0eCwgaW50IHR5cGUsCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKPiAg ewo+IEBAIC0yNjY3LDYgKzI3OTQsMTIgQEAgYXZfY29sZCBpbnQgZmZfdmFhcGlfZW5jb2RlX2lu aXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICAgICAgY3R4LT5kZXZpY2UgPSAoQVZIV0Rldmlj ZUNvbnRleHQqKWN0eC0+ZGV2aWNlX3JlZi0+ZGF0YTsKPiAgICAgIGN0eC0+aHdjdHggPSBjdHgt PmRldmljZS0+aHdjdHg7Cj4KPiArICAgIGN0eC0+dGFpbF9wa3QgPSBhdl9wYWNrZXRfYWxsb2Mo KTsKPiArICAgIGlmICghY3R4LT50YWlsX3BrdCkgewo+ICsgICAgICAgIGVyciA9IEFWRVJST1Io RU5PTUVNKTsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICAgICAgZXJyID0g dmFhcGlfZW5jb2RlX3Byb2ZpbGVfZW50cnlwb2ludChhdmN0eCk7Cj4gICAgICBpZiAoZXJyIDwg MCkKPiAgICAgICAgICBnb3RvIGZhaWw7Cj4gQEAgLTI4NTksNiArMjk5Miw3IEBAIGF2X2NvbGQg aW50IGZmX3ZhYXBpX2VuY29kZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gICAgICB9 Cj4KPiAgICAgIGF2X2ZyYW1lX2ZyZWUoJmN0eC0+ZnJhbWUpOwo+ICsgICAgYXZfcGFja2V0X2Zy ZWUoJmN0eC0+dGFpbF9wa3QpOwo+Cj4gICAgICBhdl9mcmVlcCgmY3R4LT5jb2RlY19zZXF1ZW5j ZV9wYXJhbXMpOwo+ICAgICAgYXZfZnJlZXAoJmN0eC0+Y29kZWNfcGljdHVyZV9wYXJhbXMpOwo+ IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5oIGIvbGliYXZjb2RlYy92YWFw aV9lbmNvZGUuaAo+IGluZGV4IDk3N2JjMmQ5NDYuLmQwZDZjYzJhZGYgMTAwNjQ0Cj4gLS0tIGEv bGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaAo+ICsrKyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2Rl LmgKPiBAQCAtMTMzLDYgKzEzMywxNyBAQCB0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZVBpY3R1 cmUgewo+Cj4gICAgICBpbnQgICAgICAgICAgbmJfc2xpY2VzOwo+ICAgICAgVkFBUElFbmNvZGVT bGljZSAqc2xpY2VzOwo+ICsKPiArICAgIC8qKgo+ICsgICAgICogaW5kaWNhdGUgaWYgY3VycmVu dCBmcmFtZSBpcyBhbiBpbmRlcGVuZGVudCBmcmFtZSB0aGF0IHRoZSBjb2RlZCBkYXRhCj4gKyAg ICAgKiBjYW4gYmUgcHVzaGVkIHRvIGRvd25zdHJlYW0gZGlyZWN0bHkuIENvZGVkIG9mIG5vbi1p bmRlcGVuZGVudCBmcmFtZQo+ICsgICAgICogZGF0YSB3aWxsIGJlIGNvbmNhdGVuYXRlZCBpbnRv IG5leHQgaW5kZXBlbmRlbnQgZnJhbWUuCj4gKyAgICAgKi8KPiArICAgIGludCBub25faW5kZXBl bmRlbnRfZnJhbWU7Cj4gKyAgICAvKiogVGFpbCBkYXRhIG9mIGN1cnJlbnQgcGljLCB1c2VkIG9u bHkgZm9yIHJlcGVhdCBoZWFkZXIgb2YgQVYxLiAqLwo+ICsgICAgY2hhciB0YWlsX2RhdGFbTUFY X1BBUkFNX0JVRkZFUl9TSVpFXTsKPiArICAgIC8qKiBCeXRlIGxlbmd0aCBvZiB0YWlsX2RhdGEu ICovCj4gKyAgICBzaXplX3QgdGFpbF9zaXplOwo+ICB9IFZBQVBJRW5jb2RlUGljdHVyZTsKPgo+ ICB0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZVByb2ZpbGUgewo+IEBAIC0zNjcsNiArMzc4LDE2 IEBAIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlQ29udGV4dCB7Cj4gICAgICBBVkZpZm8gICAg ICAgICAgKmVuY29kZV9maWZvOwo+ICAgICAgLy8gTWF4IG51bWJlciBvZiBmcmFtZSBidWZmZXJl ZCBpbiBlbmNvZGVyLgo+ICAgICAgaW50ICAgICAgICAgICAgIGFzeW5jX2RlcHRoOwo+ICsKPiAr ICAgIC8qKiBIZWFkIGRhdGEgZm9yIGN1cnJlbnQgb3V0cHV0IHBrdCwgdXNlZCBvbmx5IGZvciBB VjEuICovCj4gKyAgICAvL3ZvaWQgICpoZWFkZXJfZGF0YTsKPiArICAgIC8vc2l6ZV90IGhlYWRl cl9kYXRhX3NpemU7Cj4gKwo+ICsgICAgLyoqIEJ1ZmZlcmVkIGNvZGVkIGRhdGEgb2YgYSBwaWMg aWYgaXQgaXMgYW4gbm9uLWluZGVwZW5kZW50IGZyYW1lLiAqLwo+ICsgICAgQVZCdWZmZXJSZWYg ICAgICpjb2RlZF9idWZmZXJfcmVmOwo+ICsKPiArICAgIC8qKiBUYWlsIGRhdGEgb2YgYSBwaWMs IG5vdyBvbmx5IHVzZWQgZm9yIGF2MSByZXBlYXQgZnJhbWUgaGVhZGVyLiAqLwo+ICsgICAgQVZQ YWNrZXQgICAgICAgICp0YWlsX3BrdDsKPiAgfSBWQUFQSUVuY29kZUNvbnRleHQ7Cj4KPiAgZW51 bSB7Cj4gQEAgLTM4Myw2ICs0MDQsOSBAQCBlbnVtIHsKPiAgICAgIC8vIENvZGVjIHN1cHBvcnRz IG5vbi1JRFIga2V5IHBpY3R1cmVzICh0aGF0IGlzLCBrZXkgcGljdHVyZXMgZG8KPiAgICAgIC8v IG5vdCBuZWNlc3NhcmlseSBlbXB0eSB0aGUgRFBCKS4KPiAgICAgIEZMQUdfTk9OX0lEUl9LRVlf UElDVFVSRVMgID0gMSA8PCA1LAo+ICsgICAgLy8gQ29kZWMgb3V0cHV0IHBhY2tldCB3aXRob3V0 IHRpbWVzdGFtcCBkZWxheSwgd2hpY2ggbWVhbnMgdGhlCj4gKyAgICAvLyBvdXRwdXQgcGFja2V0 IGhhcyBzYW1lIFBUUyBhbmQgRFRTLgo+ICsgICAgRkxBR19USU1FU1RBTVBfTk9fREVMQVkgICAg PSAxIDw8IDYsCj4gIH07Cj4KPiAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVUeXBlIHsKPiBk aWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMgYi9saWJhdmNvZGVjL3Zh YXBpX2VuY29kZV9hdjEuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MC4uM2ZmMWM0N2I1Mwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2Vu Y29kZV9hdjEuYwo+IEBAIC0wLDAgKzEsOTQ5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykg MjAyMyBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAq Cj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx2 YS92YS5oPgo+ICsjaW5jbHVkZSA8dmEvdmFfZW5jX2F2MS5oPgo+ICsKPiArI2luY2x1ZGUgImxp YmF2dXRpbC9waXhkZXNjLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gKwo+ICsj aW5jbHVkZSAiY2JzX2F2MS5oIgo+ICsjaW5jbHVkZSAicHV0X2JpdHMuaCIKPiArI2luY2x1ZGUg ImNvZGVjX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJhdjFfbGV2ZWxzLmgiCj4gKyNpbmNsdWRl ICJ2YWFwaV9lbmNvZGUuaCIKPiArCj4gKyNkZWZpbmUgQVYxX01BWF9RVUFOVCAyNTUKPiArCj4g K3R5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlQVYxUGljdHVyZSB7Cj4gKyAgICBpbnQ2NF90IGxh c3RfaWRyX2ZyYW1lOwo+ICsgICAgaW50IHNsb3Q7Cj4gK30gVkFBUElFbmNvZGVBVjFQaWN0dXJl Owo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVBVjFDb250ZXh0IHsKPiArICAgIFZB QVBJRW5jb2RlQ29udGV4dCBjb21tb247Cj4gKyAgICBBVjFSYXdPQlUgc2g7IC8qKjwgc2VxdWVu Y2UgaGVhZGVyLiovCj4gKyAgICBBVjFSYXdPQlUgZmg7IC8qKjwgZnJhbWUgaGVhZGVyLiovCj4g KyAgICBDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmNiYzsKPiArICAgIENvZGVkQml0c3RyZWFtRnJh Z21lbnQgY3VycmVudF9vYnU7Cj4gKyAgICBWQUNvbmZpZ0F0dHJpYlZhbEVuY0FWMSBhdHRyOwo+ ICsgICAgVkFDb25maWdBdHRyaWJWYWxFbmNBVjFFeHQxIGF0dHJfZXh0MTsKPiArICAgIFZBQ29u ZmlnQXR0cmliVmFsRW5jQVYxRXh0MiBhdHRyX2V4dDI7Cj4gKwo+ICsgICAgY2hhciBzaF9kYXRh W01BWF9QQVJBTV9CVUZGRVJfU0laRV07IC8qKjwgY29kZWQgc2VxdWVuY2UgaGVhZGVyIGRhdGEu ICovCj4gKyAgICBzaXplX3Qgc2hfZGF0YV9sZW47IC8qKjwgYml0IGxlbmd0aCBvZiBzaF9kYXRh LiAqLwo+ICsgICAgY2hhciBmaF9kYXRhW01BWF9QQVJBTV9CVUZGRVJfU0laRV07IC8qKjwgY29k ZWQgZnJhbWUgaGVhZGVyIGRhdGEuICovCj4gKyAgICBzaXplX3QgZmhfZGF0YV9sZW47IC8qKjwg Yml0IGxlbmd0aCBvZiBmaF9kYXRhLiAqLwo+ICsKPiArICAgIHVpbnQ4X3QgdW5pZm9ybV90aWxl Owo+ICsgICAgdWludDhfdCB1c2VfMTI4eDEyOF9zdXBlcmJsb2NrOwo+ICsgICAgaW50IHNiX2Nv bHM7Cj4gKyAgICBpbnQgc2Jfcm93czsKPiArICAgIGludCB0aWxlX2NvbHNfbG9nMjsKPiArICAg IGludCB0aWxlX3Jvd3NfbG9nMjsKPiArICAgIGludCBtYXhfdGlsZV93aWR0aF9zYjsKPiArICAg IGludCBtYXhfdGlsZV9oZWlnaHRfc2I7Cj4gKyAgICB1aW50OF90IHdpZHRoX2luX3Nic19taW51 c18xW0FWMV9NQVhfVElMRV9DT0xTXTsKPiArICAgIHVpbnQ4X3QgaGVpZ2h0X2luX3Nic19taW51 c18xW0FWMV9NQVhfVElMRV9ST1dTXTsKPiArCj4gKyAgICBpbnQgbWluX2xvZzJfdGlsZV9jb2xz Owo+ICsgICAgaW50IG1heF9sb2cyX3RpbGVfY29sczsKPiArICAgIGludCBtaW5fbG9nMl90aWxl X3Jvd3M7Cj4gKyAgICBpbnQgbWF4X2xvZzJfdGlsZV9yb3dzOwo+ICsKPiArICAgIGludCBxX2lk eF9pZHI7Cj4gKyAgICBpbnQgcV9pZHhfcDsKPiArICAgIGludCBxX2lkeF9iOwo+ICsKPiArICAg IC8qKiBiaXQgcG9zaXRpb25zIGluIGN1cnJlbnQgZnJhbWUgaGVhZGVyICovCj4gKyAgICBpbnQg cWluZGV4X29mZnNldDsKPiArICAgIGludCBsb29wZmlsdGVyX29mZnNldDsKPiArICAgIGludCBj ZGVmX3N0YXJ0X29mZnNldDsKPiArICAgIGludCBjZGVmX3BhcmFtX3NpemU7Cj4gKwo+ICsgICAg LyoqIHVzZXIgb3B0aW9ucyAqLwo+ICsgICAgaW50IHByb2ZpbGU7Cj4gKyAgICBpbnQgbGV2ZWw7 Cj4gKyAgICBpbnQgdGllcjsKPiArICAgIGludCB0aWxlX2NvbHMsIHRpbGVfcm93czsKPiArICAg IGludCB0aWxlX2dyb3VwczsKPiArfSBWQUFQSUVuY29kZUFWMUNvbnRleHQ7Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2YWFwaV9lbmNvZGVfYXYxX3RyYWNlX3dyaXRlX2xvZyh2b2lkICpjdHgsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJpdENvbnRleHQg KnBiYywgaW50IGxlbmd0aCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBjb25zdCBpbnQgKnN1YnNjcmlwdHMsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdmFsdWUpCj4g K3sKPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGN0eDsKPiArICAgIGludCBw b3NpdGlvbjsKPiArCj4gKyAgICBwb3NpdGlvbiA9IHB1dF9iaXRzX2NvdW50KHBiYyk7Cj4gKyAg ICBhdl9hc3NlcnQwKHBvc2l0aW9uID49IGxlbmd0aCk7Cj4gKwo+ICsgICAgaWYgKCFzdHJjbXAo c3RyLCAiYmFzZV9xX2lkeCIpKQo+ICsgICAgICAgIHByaXYtPnFpbmRleF9vZmZzZXQgPSBwb3Np dGlvbiAtIGxlbmd0aDsKPiArICAgIGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibG9vcF9maWx0ZXJf bGV2ZWxbMF0iKSkKPiArICAgICAgICBwcml2LT5sb29wZmlsdGVyX29mZnNldCA9IHBvc2l0aW9u IC0gbGVuZ3RoOwo+ICsgICAgZWxzZSBpZiAoIXN0cmNtcChzdHIsICJjZGVmX2RhbXBpbmdfbWlu dXNfMyIpKQo+ICsgICAgICAgIHByaXYtPmNkZWZfc3RhcnRfb2Zmc2V0ID0gcG9zaXRpb24gLSBs ZW5ndGg7Cj4gKyAgICBlbHNlIGlmICghc3RyY21wKHN0ciwgImNkZWZfdXZfc2VjX3N0cmVuZ3Ro W2ldIikpCj4gKyAgICAgICAgcHJpdi0+Y2RlZl9wYXJhbV9zaXplID0gcG9zaXRpb24gLSBwcml2 LT5jZGVmX3N0YXJ0X29mZnNldDsKPiArfQo+ICsKPiArc3RhdGljIGF2X2NvbGQgaW50IHZhYXBp X2VuY29kZV9hdjFfZ2V0X2VuY29kZXJfY2FwcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sK PiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAg IFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKwo+ICsg ICAgLy8gU3VyZmFjZXMgbXVzdCBiZSBhbGlnbmVkIHRvIHN1cGVyYmxvY2sgYm91bmRhcmllcy4K PiArICAgIGN0eC0+c3VyZmFjZV93aWR0aCAgPSBGRkFMSUdOKGF2Y3R4LT53aWR0aCwgIHByaXYt PnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPyAxMjggOiA2NCk7Cj4gKyAgICBjdHgtPnN1cmZhY2Vf aGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVpZ2h0LCBwcml2LT51c2VfMTI4eDEyOF9zdXBlcmJs b2NrID8gMTI4IDogNjQpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg YXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX2F2MV9jb25maWd1cmUoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KQo+ICt7Cj4gKyAgICBWQUFQSUVuY29kZUNvbnRleHQgICAgICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZf ZGF0YTsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgcmV0ID0gZmZfY2JzX2luaXQoJnByaXYt PmNiYywgQVZfQ09ERUNfSURfQVYxLCBhdmN0eCk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAg ICAgICByZXR1cm4gcmV0Owo+ICsgICAgcHJpdi0+Y2JjLT50cmFjZV9lbmFibGUgID0gMTsKPiAr ICAgIHByaXYtPmNiYy0+dHJhY2VfbGV2ZWwgICA9IEFWX0xPR19ERUJVRzsKPiArICAgIHByaXYt PmNiYy0+dHJhY2VfY29udGV4dCA9IGN0eDsKPiArICAgIHByaXYtPmNiYy0+dHJhY2Vfd3JpdGVf Y2FsbGJhY2sgPSB2YWFwaV9lbmNvZGVfYXYxX3RyYWNlX3dyaXRlX2xvZzsKPiArCj4gKyAgICBp ZiAoY3R4LT5yY19tb2RlLT5xdWFsaXR5KSB7Cj4gKyAgICAgICAgcHJpdi0+cV9pZHhfcCA9IGF2 X2NsaXAoY3R4LT5yY19xdWFsaXR5LCAwLCBBVjFfTUFYX1FVQU5UKTsKPiArICAgICAgICBpZiAo ZmFicyhhdmN0eC0+aV9xdWFudF9mYWN0b3IpID4gMC4wKQo+ICsgICAgICAgICAgICBwcml2LT5x X2lkeF9pZHIgPQo+ICsgICAgICAgICAgICAgICAgYXZfY2xpcCgoZmFicyhhdmN0eC0+aV9xdWFu dF9mYWN0b3IpICogcHJpdi0+cV9pZHhfcCAgKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg YXZjdHgtPmlfcXVhbnRfb2Zmc2V0KSArIDAuNSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg MCwgQVYxX01BWF9RVUFOVCk7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBwcml2LT5x X2lkeF9pZHIgPSBwcml2LT5xX2lkeF9wOwo+ICsKPiArICAgICAgICBpZiAoZmFicyhhdmN0eC0+ Yl9xdWFudF9mYWN0b3IpID4gMC4wKQo+ICsgICAgICAgICAgICBwcml2LT5xX2lkeF9iID0KPiAr ICAgICAgICAgICAgICAgIGF2X2NsaXAoKGZhYnMoYXZjdHgtPmJfcXVhbnRfZmFjdG9yKSAqIHBy aXYtPnFfaWR4X3AgICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5iX3F1YW50 X29mZnNldCkgKyAwLjUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFWMV9NQVhfUVVB TlQpOwo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgcHJpdi0+cV9pZHhfYiA9IHByaXYt PnFfaWR4X3A7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIC8qKiBBcmJpdHJhcnkgdmFsdWUg Ki8KPiArICAgICAgICBwcml2LT5xX2lkeF9pZHIgPSBwcml2LT5xX2lkeF9wID0gcHJpdi0+cV9p ZHhfYiA9IDEyODsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCB2YWFwaV9lbmNvZGVfYXYxX2FkZF9vYnUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdt ZW50ICphdSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0 eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvYnVfdW5p dCkKPiArewo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICByZXQgPSBmZl9jYnNfaW5zZXJ0X3Vu aXRfY29udGVudChhdSwgLTEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlLCBvYnVfdW5pdCwgTlVMTCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFkZCBPQlUgdW5pdDogIgo+ ICsgICAgICAgICAgICAgICAidHlwZSA9ICVkLlxuIiwgdHlwZSk7Cj4gKyAgICAgICAgcmV0dXJu IHJldDsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX29idShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90ICpk YXRhX2xlbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZEJp dHN0cmVhbUZyYWdtZW50ICpicykKPiArewo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpw cml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgcmV0ID0g ZmZfY2JzX3dyaXRlX2ZyYWdtZW50X2RhdGEocHJpdi0+Y2JjLCBicyk7Cj4gKyAgICBpZiAocmV0 IDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IHdyaXRlIHBhY2tlZCBoZWFkZXIuXG4iKTsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAg fQo+ICsKPiArICAgIGlmICgoc2l6ZV90KTggKiBNQVhfUEFSQU1fQlVGRkVSX1NJWkUgPCA4ICog YnMtPmRhdGFfc2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nKSB7Cj4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBY2Nlc3MgdW5pdCB0b28gbGFyZ2U6ICIKPiArICAgICAg ICAgICAgICAgIiV6dSA8ICV6dS5cbiIsIChzaXplX3QpOCAqIE1BWF9QQVJBTV9CVUZGRVJfU0la RSwKPiArICAgICAgICAgICAgICAgOCAqIGJzLT5kYXRhX3NpemUgLSBicy0+ZGF0YV9iaXRfcGFk ZGluZyk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1BDKTsKPiArICAgIH0KPiArCj4g KyAgICBtZW1jcHkoZGF0YSwgYnMtPmRhdGEsIGJzLT5kYXRhX3NpemUpOwo+ICsgICAgKmRhdGFf bGVuID0gOCAqIGJzLT5kYXRhX3NpemUgLSBicy0+ZGF0YV9iaXRfcGFkZGluZzsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aWxlX2xvZzIoaW50IGJsa1NpemUs IGludCB0YXJnZXQpIHsKPiArICAgIGludCBrOwo+ICsgICAgZm9yIChrID0gMDsgKGJsa1NpemUg PDwgaykgPCB0YXJnZXQ7IGsrKyk7Cj4gKyAgICByZXR1cm4gazsKPiArfQo+ICsKPiArc3RhdGlj IGludCB2YWFwaV9lbmNvZGVfYXYxX3NldF90aWxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiAr ewo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsK PiArICAgIGludCBtaV9jb2xzLCBtaV9yb3dzLCBzYl9zaGlmdCwgc2Jfc2l6ZTsKPiArICAgIGlu dCBtYXhfdGlsZV9hcmVhX3NiLCBtYXhfdGlsZV9hcmVhX3NiX3ZhcmllZDsKPiArICAgIGludCB0 aWxlX3dpZHRoX3NiLCB0aWxlX2hlaWdodF9zYiwgd2lkZXN0X3RpbGVfc2I7Cj4gKyAgICBpbnQg dGlsZV9jb2xzLCB0aWxlX3Jvd3M7Cj4gKyAgICBpbnQgbWluX2xvZzJfdGlsZXM7Cj4gKyAgICBp bnQgaTsKPiArCj4gKyAgICBpZiAocHJpdi0+dGlsZV9jb2xzID4gQVYxX01BWF9USUxFX0NPTFMg fHwKPiArICAgICAgICBwcml2LT50aWxlX3Jvd3MgPiBBVjFfTUFYX1RJTEVfUk9XUykgewo+ICsg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB0aWxlIG51bWJlciAl ZHglZCwgc2hvdWxkIGxlc3MgdGhhbiAlZHglZC5cbiIsCj4gKyAgICAgICAgICAgICAgIHByaXYt PnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dzLCBBVjFfTUFYX1RJTEVfQ09MUywgQVYxX01BWF9U SUxFX1JPV1MpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgbWlfY29scyA9IDIgKiAoKGF2Y3R4LT53aWR0aCArIDcpID4+IDMpOwo+ICsgICAg bWlfcm93cyA9IDIgKiAoKGF2Y3R4LT5oZWlnaHQgKyA3KSA+PiAzKTsKPiArICAgIHByaXYtPnNi X2NvbHMgPSBwcml2LT51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8KPiArICAgICAgICAgICAgICAg ICAgICAoKG1pX2NvbHMgKyAzMSkgPj4gNSkgOiAoKG1pX2NvbHMgKyAxNSkgPj4gNCk7Cj4gKyAg ICBwcml2LT5zYl9yb3dzID0gcHJpdi0+dXNlXzEyOHgxMjhfc3VwZXJibG9jayA/Cj4gKyAgICAg ICAgICAgICAgICAgICAgKChtaV9yb3dzICsgMzEpID4+IDUpIDogKChtaV9yb3dzICsgMTUpID4+ IDQpOwo+ICsgICAgc2Jfc2hpZnQgPSBwcml2LT51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8gNSA6 IDQ7Cj4gKyAgICBzYl9zaXplICA9IHNiX3NoaWZ0ICsgMjsKPiArICAgIHByaXYtPm1heF90aWxl X3dpZHRoX3NiID0gQVYxX01BWF9USUxFX1dJRFRIID4+IHNiX3NpemU7Cj4gKyAgICBtYXhfdGls ZV9hcmVhX3NiID0gQVYxX01BWF9USUxFX0FSRUEgID4+ICgyICogc2Jfc2l6ZSk7Cj4gKwo+ICsg ICAgcHJpdi0+bWluX2xvZzJfdGlsZV9jb2xzID0gdGlsZV9sb2cyKHByaXYtPm1heF90aWxlX3dp ZHRoX3NiLCBwcml2LT5zYl9jb2xzKTsKPiArICAgIHByaXYtPm1heF9sb2cyX3RpbGVfY29scyA9 IHRpbGVfbG9nMigxLCBGRk1JTihwcml2LT5zYl9jb2xzLCBBVjFfTUFYX1RJTEVfQ09MUykpOwo+ ICsgICAgcHJpdi0+bWF4X2xvZzJfdGlsZV9yb3dzID0gdGlsZV9sb2cyKDEsIEZGTUlOKHByaXYt PnNiX3Jvd3MsIEFWMV9NQVhfVElMRV9ST1dTKSk7Cj4gKyAgICBtaW5fbG9nMl90aWxlcyA9IEZG TUFYKHByaXYtPm1pbl9sb2cyX3RpbGVfY29scywKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGlsZV9sb2cyKG1heF90aWxlX2FyZWFfc2IsIHByaXYtPnNiX3Jvd3MgKiBwcml2LT5zYl9j b2xzKSk7Cj4gKwo+ICsgICAgdGlsZV9jb2xzID0gYXZfY2xpcChwcml2LT50aWxlX2NvbHMsIChw cml2LT5zYl9jb2xzICsgcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IgLSAxKSAvIHByaXYtPm1heF90 aWxlX3dpZHRoX3NiLCBwcml2LT5zYl9jb2xzKTsKPiArCj4gKyAgICBpZiAoIXByaXYtPnRpbGVf Y29scykKPiArICAgICAgICBwcml2LT50aWxlX2NvbHMgPSB0aWxlX2NvbHM7Cj4gKyAgICBlbHNl IGlmIChwcml2LT50aWxlX2NvbHMgIT0gdGlsZV9jb2xzKXsKPiArICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgdGlsZSBjb2xzICVkLCBzaG91bGQgYmUgaW4gcmFu Z2Ugb2YgJWR+JWRcbiIsCj4gKyAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29scywKPiArICAg ICAgICAgICAgICAgKHByaXYtPnNiX2NvbHMgKyBwcml2LT5tYXhfdGlsZV93aWR0aF9zYiAtIDEp IC8gcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IsCj4gKyAgICAgICAgICAgICAgIHByaXYtPnNiX2Nv bHMpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcHJpdi0+dGlsZV9jb2xzX2xvZzIgPSB0aWxlX2xvZzIoMSwgcHJpdi0+dGlsZV9jb2xzKTsK PiArICAgIHRpbGVfd2lkdGhfc2IgPSAocHJpdi0+c2JfY29scyArICgxIDw8IHByaXYtPnRpbGVf Y29sc19sb2cyKSAtIDEpID4+Cj4gKyAgICAgICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9jb2xz X2xvZzI7Cj4gKwo+ICsgICAgaWYgKHByaXYtPnRpbGVfcm93cyA+IHByaXYtPnNiX3Jvd3MpIHsK PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgdGlsZSByb3dz ICVkLCBzaG91bGQgYmUgbGVzcyB0aGFuICVkLlxuIiwKPiArICAgICAgICAgICAgICAgcHJpdi0+ dGlsZV9yb3dzLCBwcml2LT5zYl9yb3dzKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwo+ICsgICAgfQo+ICsKPiArICAgIC8qKiBUcnkgdXNlciBzZXR0aW5nIHRpbGUgcm93cyBu dW1iZXIgZmlyc3QuICovCj4gKyAgICB0aWxlX3Jvd3MgPSBwcml2LT50aWxlX3Jvd3MgPyBwcml2 LT50aWxlX3Jvd3MgOiAxOwo+ICsgICAgZm9yICg7IHRpbGVfcm93cyA8PSBwcml2LT5zYl9yb3dz ICYmIHRpbGVfcm93cyA8PSBBVjFfTUFYX1RJTEVfUk9XUzsgdGlsZV9yb3dzKyspIHsKPiArICAg ICAgICAvKiogdHJ5IHVuaWZvcm1lZCB0aWxlLiAqLwo+ICsgICAgICAgIHByaXYtPnRpbGVfcm93 c19sb2cyID0gdGlsZV9sb2cyKDEsIHRpbGVfcm93cyk7Cj4gKyAgICAgICAgaWYgKChwcml2LT5z Yl9jb2xzICsgdGlsZV93aWR0aF9zYiAtIDEpIC8gdGlsZV93aWR0aF9zYiA9PSBwcml2LT50aWxl X2NvbHMpIHsKPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRpbGVfY29scyAt IDE7IGkrKykKPiArICAgICAgICAgICAgICAgIHByaXYtPndpZHRoX2luX3Nic19taW51c18xW2ld ID0gdGlsZV93aWR0aF9zYiAtIDE7Cj4gKyAgICAgICAgICAgIHByaXYtPndpZHRoX2luX3Nic19t aW51c18xW2ldID0gcHJpdi0+c2JfY29scyAtIChwcml2LT50aWxlX2NvbHMgLSAxKSAqIHRpbGVf d2lkdGhfc2IgLSAxOwo+ICsKPiArICAgICAgICAgICAgdGlsZV9oZWlnaHRfc2IgPSAocHJpdi0+ c2Jfcm93cyArICgxIDw8IHByaXYtPnRpbGVfcm93c19sb2cyKSAtIDEpID4+Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9yb3dzX2xvZzI7Cj4gKwo+ICsgICAgICAg ICAgICBpZiAoKHByaXYtPnNiX3Jvd3MgKyB0aWxlX2hlaWdodF9zYiAtIDEpIC8gdGlsZV9oZWln aHRfc2IgPT0gdGlsZV9yb3dzICYmCj4gKyAgICAgICAgICAgICAgICB0aWxlX2hlaWdodF9zYiA8 PSBtYXhfdGlsZV9hcmVhX3NiIC8gdGlsZV93aWR0aF9zYikgewo+ICsgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IHRpbGVfcm93cyAtIDE7IGkrKykKPiArICAgICAgICAgICAgICAgICAg ICBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSB0aWxlX2hlaWdodF9zYiAtIDE7Cj4g KyAgICAgICAgICAgICAgICBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSBwcml2LT5z Yl9yb3dzIC0gKHRpbGVfcm93cyAtIDEpICogdGlsZV9oZWlnaHRfc2IgLSAxOwo+ICsKPiArICAg ICAgICAgICAgICAgIHByaXYtPnVuaWZvcm1fdGlsZSA9IDE7Cj4gKyAgICAgICAgICAgICAgICBw cml2LT5taW5fbG9nMl90aWxlX3Jvd3MgPSBGRk1BWChtaW5fbG9nMl90aWxlcyAtIHByaXYtPnRp bGVfY29sc19sb2cyLCAwKTsKPiArCj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyoqIHRyeSBub24tdW5pZm9ybWVk IHRpbGUuICovCj4gKyAgICAgICAgd2lkZXN0X3RpbGVfc2IgPSAwOwo+ICsgICAgICAgIGZvciAo aSA9IDA7IGkgPCBwcml2LT50aWxlX2NvbHM7IGkrKykgewo+ICsgICAgICAgICAgICBwcml2LT53 aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IChpICsgMSkgKiBwcml2LT5zYl9jb2xzIC8gcHJpdi0+ dGlsZV9jb2xzIC0gaSAqIHByaXYtPnNiX2NvbHMgLyBwcml2LT50aWxlX2NvbHMgLSAxOwo+ICsg ICAgICAgICAgICB3aWRlc3RfdGlsZV9zYiA9IEZGTUFYKHdpZGVzdF90aWxlX3NiLCBwcml2LT53 aWR0aF9pbl9zYnNfbWludXNfMVtpXSArIDEpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAg aWYgKG1pbl9sb2cyX3RpbGVzKQo+ICsgICAgICAgICAgICBtYXhfdGlsZV9hcmVhX3NiX3Zhcmll ZCA9IChwcml2LT5zYl9yb3dzICogcHJpdi0+c2JfY29scykgPj4gKG1pbl9sb2cyX3RpbGVzICsg MSk7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBtYXhfdGlsZV9hcmVhX3NiX3Zhcmll ZCA9IHByaXYtPnNiX3Jvd3MgKiBwcml2LT5zYl9jb2xzOwo+ICsgICAgICAgIHByaXYtPm1heF90 aWxlX2hlaWdodF9zYiA9IEZGTUFYKDEsIG1heF90aWxlX2FyZWFfc2JfdmFyaWVkIC8gd2lkZXN0 X3RpbGVfc2IpOwo+ICsKPiArICAgICAgICBpZiAodGlsZV9yb3dzID09IGF2X2NsaXAodGlsZV9y b3dzLCAocHJpdi0+c2Jfcm93cyArIHByaXYtPm1heF90aWxlX2hlaWdodF9zYiAtIDEpIC8gcHJp di0+bWF4X3RpbGVfaGVpZ2h0X3NiLCBwcml2LT5zYl9yb3dzKSkgewo+ICsgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgdGlsZV9yb3dzOyBpKyspCj4gKyAgICAgICAgICAgICAgICBwcml2LT5o ZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSAoaSArIDEpICogcHJpdi0+c2Jfcm93cyAvIHRpbGVf cm93cyAtIGkgKiBwcml2LT5zYl9yb3dzIC8gdGlsZV9yb3dzIC0gMTsKPiArCj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyoqIFJldHVybiBpbnZhbGlk IHBhcmFtZXRlciBpZiBleHBsaWNpdCB0aWxlIHJvd3MgaXMgc2V0LiAqLwo+ICsgICAgICAgIGlm IChwcml2LT50aWxlX3Jvd3MpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJJbnZhbGlkIHRpbGUgcm93cyAlZC5cbiIsIHByaXYtPnRpbGVfcm93cyk7Cj4gKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICsKPiArICAgIHByaXYtPnRpbGVfcm93cyA9IHRpbGVfcm93czsKPiArICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0RFQlVHLCAiU2V0dGluZyB0aWxlIGNvbHMvcm93cyB0byAlZC8lZC5cbiIsCj4g KyAgICAgICAgICAgcHJpdi0+dGlsZV9jb2xzLCBwcml2LT50aWxlX3Jvd3MpOwo+ICsKPiArICAg IC8qKiBjaGVjayBpZiB0aWxlIGNvbHMvcm93cyBpcyBzdXBwb3J0ZWQgYnkgZHJpdmVyLiAqLwo+ ICsgICAgaWYgKHByaXYtPmF0dHJfZXh0Mi5iaXRzLm1heF90aWxlX251bV9taW51czEpIHsKPiAr ICAgICAgICBpZiAoKHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93cyAtIDEpID4gcHJp di0+YXR0cl9leHQyLmJpdHMubWF4X3RpbGVfbnVtX21pbnVzMSkgewo+ICsgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHRpbGUgbnVtICVkICogJWQg PSAlZCBieSBkcml2ZXIsICIKPiArICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgYXQgbW9z dCAlZC5cbiIsIHByaXYtPnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dzLAo+ICsgICAgICAgICAg ICAgICAgICAgcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzLAo+ICsgICAgICAgICAg ICAgICAgICAgcHJpdi0+YXR0cl9leHQyLmJpdHMubWF4X3RpbGVfbnVtX21pbnVzMSArIDEpOwo+ ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIH0KPiArICAg IH0KPiArCj4gKyAgICAvKiogY2hlY2sgaWYgdGlsZSBncm91cCBudW1iZXJzIGlzIHZhbGlkLiAq Lwo+ICsgICAgaWYgKHByaXYtPnRpbGVfZ3JvdXBzID4gcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+ dGlsZV9yb3dzKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIklu dmFsaWQgdGlsZSBncm91cHMgbnVtYmVyICVkLCAiCj4gKyAgICAgICAgImNvcnJlY3QgdG8gJWQu XG4iLCBwcml2LT50aWxlX2dyb3VwcywgcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGlsZV9yb3dz KTsKPiArICAgICAgICBwcml2LT50aWxlX2dyb3VwcyA9IHByaXYtPnRpbGVfY29scyAqIHByaXYt PnRpbGVfcm93czsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX3NlcXVlbmNlX2hlYWRlcihBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbikKPiArewo+ICsgICAgVkFBUElF bmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArCj4gKyAgICBtZW1j cHkoZGF0YSwgJnByaXYtPnNoX2RhdGEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAqIHNpemVvZihj aGFyKSk7Cj4gKyAgICAqZGF0YV9sZW4gPSBwcml2LT5zaF9kYXRhX2xlbjsKPiArCj4gKyAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2Vx dWVuY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgVkFBUElFbmNv ZGVDb250ZXh0ICAgICAgICAgICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBW QUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAgICAgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsK PiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAgICAgICpzaF9vYnUgPSAmcHJpdi0+c2g7 Cj4gKyAgICBBVjFSYXdTZXF1ZW5jZUhlYWRlciAgICAgICAgICAgICAgKnNoID0gJnNoX29idS0+ b2J1LnNlcXVlbmNlX2hlYWRlcjsKPiArICAgIFZBRW5jU2VxdWVuY2VQYXJhbWV0ZXJCdWZmZXJB VjEgKnZzZXEgPSBjdHgtPmNvZGVjX3NlcXVlbmNlX3BhcmFtczsKPiArICAgIENvZGVkQml0c3Ry ZWFtRnJhZ21lbnQgICAgICAgICAgICpvYnUgPSAmcHJpdi0+Y3VycmVudF9vYnU7Cj4gKyAgICBj b25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2M7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAg IG1lbXNldChzaF9vYnUsIDAsIHNpemVvZigqc2hfb2J1KSk7Cj4gKyAgICBzaF9vYnUtPmhlYWRl ci5vYnVfdHlwZSA9IEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSOwo+ICsKPiArICAgIGRlc2MgPSBh dl9waXhfZm10X2Rlc2NfZ2V0KHByaXYtPmNvbW1vbi5pbnB1dF9mcmFtZXMtPnN3X2Zvcm1hdCk7 Cj4gKyAgICBhdl9hc3NlcnQwKGRlc2MpOwo+ICsKPiArICAgIHNoLT5zZXFfcHJvZmlsZSAgPSBh dmN0eC0+cHJvZmlsZTsKPiArICAgIGlmICghc2gtPnNlcV9mb3JjZV9zY3JlZW5fY29udGVudF90 b29scykKPiArICAgICAgICBzaC0+c2VxX2ZvcmNlX2ludGVnZXJfbXYgPSBBVjFfU0VMRUNUX0lO VEVHRVJfTVY7Cj4gKyAgICBzaC0+ZnJhbWVfd2lkdGhfYml0c19taW51c18xICA9IGF2X2xvZzIo YXZjdHgtPndpZHRoKTsKPiArICAgIHNoLT5mcmFtZV9oZWlnaHRfYml0c19taW51c18xID0gYXZf bG9nMihhdmN0eC0+aGVpZ2h0KTsKPiArICAgIHNoLT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSAg ID0gYXZjdHgtPndpZHRoIC0gMTsKPiArICAgIHNoLT5tYXhfZnJhbWVfaGVpZ2h0X21pbnVzXzEg ID0gYXZjdHgtPmhlaWdodCAtIDE7Cj4gKyAgICBzaC0+c2VxX3RpZXJbMF0gICAgICAgICAgICAg ICA9IHByaXYtPnRpZXI7Cj4gKyAgICAvKiogZW5hYmxlIG9yZGVyIGhpbnQgYW5kIHJlc2VydmUg bWF4aW11bSA4IGJpdHMgZm9yIGl0IGJ5IGRlZmF1bHQuICovCj4gKyAgICBzaC0+ZW5hYmxlX29y ZGVyX2hpbnQgICAgICAgICA9IDE7Cj4gKyAgICBzaC0+b3JkZXJfaGludF9iaXRzX21pbnVzXzEg ICA9IDc7Cj4gKwo+ICsgICAgc2gtPmNvbG9yX2NvbmZpZyA9IChBVjFSYXdDb2xvckNvbmZpZykg ewo+ICsgICAgICAgIC5oaWdoX2JpdGRlcHRoICAgICAgICAgICAgICAgICAgPSBkZXNjLT5jb21w WzBdLmRlcHRoID09IDggPyAwIDogMSwKPiArICAgICAgICAuY29sb3JfcHJpbWFyaWVzICAgICAg ICAgICAgICAgID0gYXZjdHgtPmNvbG9yX3ByaW1hcmllcywKPiArICAgICAgICAudHJhbnNmZXJf Y2hhcmFjdGVyaXN0aWNzICAgICAgID0gYXZjdHgtPmNvbG9yX3RyYywKPiArICAgICAgICAubWF0 cml4X2NvZWZmaWNpZW50cyAgICAgICAgICAgID0gYXZjdHgtPmNvbG9yc3BhY2UsCj4gKyAgICAg ICAgLmNvbG9yX2Rlc2NyaXB0aW9uX3ByZXNlbnRfZmxhZyA9IChhdmN0eC0+Y29sb3JfcHJpbWFy aWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRCB8fAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmNvbG9yX3RyYyAgICAgICAhPSBBVkNPTF9UUkNf VU5TUEVDSUZJRUQgfHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGF2Y3R4LT5jb2xvcnNwYWNlICAgICAgIT0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEKSwKPiAr ICAgICAgICAuY29sb3JfcmFuZ2UgICAgICAgICAgICAgICAgICAgID0gYXZjdHgtPmNvbG9yX3Jh bmdlID09IEFWQ09MX1JBTkdFX0pQRUcsCj4gKyAgICAgICAgLnN1YnNhbXBsaW5nX3ggICAgICAg ICAgICAgICAgICA9IGRlc2MtPmxvZzJfY2hyb21hX3csCj4gKyAgICAgICAgLnN1YnNhbXBsaW5n X3kgICAgICAgICAgICAgICAgICA9IGRlc2MtPmxvZzJfY2hyb21hX2gsCj4gKyAgICB9Owo+ICsK PiArICAgIHN3aXRjaCAoYXZjdHgtPmNocm9tYV9zYW1wbGVfbG9jYXRpb24pIHsKPiArICAgICAg ICBjYXNlIEFWQ0hST01BX0xPQ19MRUZUOgo+ICsgICAgICAgICAgICBzaC0+Y29sb3JfY29uZmln LmNocm9tYV9zYW1wbGVfcG9zaXRpb24gPSBBVjFfQ1NQX1ZFUlRJQ0FMOwo+ICsgICAgICAgICAg ICBicmVhazsKPiArICAgICAgICBjYXNlIEFWQ0hST01BX0xPQ19UT1BMRUZUOgo+ICsgICAgICAg ICAgICBzaC0+Y29sb3JfY29uZmlnLmNocm9tYV9zYW1wbGVfcG9zaXRpb24gPSBBVjFfQ1NQX0NP TE9DQVRFRDsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgZGVmYXVsdDoKPiArICAg ICAgICAgICAgc2gtPmNvbG9yX2NvbmZpZy5jaHJvbWFfc2FtcGxlX3Bvc2l0aW9uID0gQVYxX0NT UF9VTktOT1dOOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAgICBpZiAo YXZjdHgtPmxldmVsICE9IEFWX0xFVkVMX1VOS05PV04pIHsKPiArICAgICAgICBzaC0+c2VxX2xl dmVsX2lkeFswXSA9IGF2Y3R4LT5sZXZlbDsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgY29u c3QgQVYxTGV2ZWxEZXNjcmlwdG9yICpsZXZlbDsKPiArICAgICAgICBmbG9hdCBmcmFtZXJhdGU7 Cj4gKwo+ICsgICAgICAgIGlmIChhdmN0eC0+ZnJhbWVyYXRlLm51bSA+IDAgJiYgYXZjdHgtPmZy YW1lcmF0ZS5kZW4gPiAwKQo+ICsgICAgICAgICAgICBmcmFtZXJhdGUgPSBhdmN0eC0+ZnJhbWVy YXRlLm51bSAvIGF2Y3R4LT5mcmFtZXJhdGUuZGVuOwo+ICsgICAgICAgIGVsc2UKPiArICAgICAg ICAgICAgZnJhbWVyYXRlID0gMDsKPiArCj4gKyAgICAgICAgbGV2ZWwgPSBmZl9hdjFfZ3Vlc3Nf bGV2ZWwoYXZjdHgtPmJpdF9yYXRlLCBwcml2LT50aWVyLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN0eC0+c3VyZmFjZV93aWR0aCwgY3R4LT5zdXJmYWNlX2hlaWdodCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT50aWxlX3Jvd3MgKiBw cml2LT50aWxlX2NvbHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp di0+dGlsZV9jb2xzLCBmcmFtZXJhdGUpOwo+ICsgICAgICAgIGlmIChsZXZlbCkgewo+ICsgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiVXNpbmcgbGV2ZWwgJXMuXG4i LCBsZXZlbC0+bmFtZSk7Cj4gKyAgICAgICAgICAgIHNoLT5zZXFfbGV2ZWxfaWR4WzBdID0gbGV2 ZWwtPmxldmVsX2lkeDsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiU3RyZWFtIHdpbGwgbm90IGNvbmZvcm0gdG8gIgo+ICsg ICAgICAgICAgICAgICAgICAgImFueSBub3JtYWwgbGV2ZWwsIHVzaW5nIG1heGltdW0gcGFyYW1l dGVycyBsZXZlbCBieSBkZWZhdWx0LlxuIik7Cj4gKyAgICAgICAgICAgIHNoLT5zZXFfbGV2ZWxf aWR4WzBdID0gMzE7Cj4gKyAgICAgICAgICAgIHNoLT5zZXFfdGllclswXSA9IDE7Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICsgICAgdnNlcS0+c2VxX3Byb2ZpbGUgICAgICAgICAgICAgPSBzaC0+ c2VxX3Byb2ZpbGU7Cj4gKyAgICB2c2VxLT5zZXFfbGV2ZWxfaWR4ICAgICAgICAgICA9IHNoLT5z ZXFfbGV2ZWxfaWR4WzBdOwo+ICsgICAgdnNlcS0+c2VxX3RpZXIgICAgICAgICAgICAgICAgPSBz aC0+c2VxX3RpZXJbMF07Cj4gKyAgICB2c2VxLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSA9IHNo LT5vcmRlcl9oaW50X2JpdHNfbWludXNfMTsKPiArICAgIHZzZXEtPmludHJhX3BlcmlvZCAgICAg ICAgICAgID0gY3R4LT5nb3Bfc2l6ZTsKPiArICAgIHZzZXEtPmlwX3BlcmlvZCAgICAgICAgICAg ICAgID0gY3R4LT5iX3Blcl9wICsgMTsKPiArCj4gKyAgICB2c2VxLT5zZXFfZmllbGRzLmJpdHMu ZW5hYmxlX29yZGVyX2hpbnQgPSBzaC0+ZW5hYmxlX29yZGVyX2hpbnQ7Cj4gKwo+ICsgICAgaWYg KCEoY3R4LT52YV9yY19tb2RlICYgVkFfUkNfQ1FQKSkgewo+ICsgICAgICAgIHZzZXEtPmJpdHNf cGVyX3NlY29uZCA9IGN0eC0+dmFfYml0X3JhdGU7Cj4gKyAgICAgICAgdnNlcS0+c2VxX2ZpZWxk cy5iaXRzLmVuYWJsZV9jZGVmID0gc2gtPmVuYWJsZV9jZGVmID0gMTsKPiArICAgIH0KPiArCj4g KyAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX2FkZF9vYnUoYXZjdHgsIG9idSwgQVYxX09CVV9T RVFVRU5DRV9IRUFERVIsICZwcml2LT5zaCk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAg ICBnb3RvIGVuZDsKPiArCj4gKyAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX29idShh dmN0eCwgcHJpdi0+c2hfZGF0YSwgJnByaXYtPnNoX2RhdGFfbGVuLCBvYnUpOwo+ICsgICAgaWYg KHJldCA8IDApCj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICtlbmQ6Cj4gKyAgICBmZl9jYnNf ZnJhZ21lbnRfcmVzZXQob2J1KTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdmFhcGlfZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMpCj4gK3sKPiArICAgIFZBQVBJRW5jb2RlQ29udGV4 dCAgICAgICAgICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBWQUFQSUVuY29k ZUFWMUNvbnRleHQgICAgICAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgVkFB UElFbmNvZGVBVjFQaWN0dXJlICAgICAgICAgICpocGljID0gcGljLT5wcml2X2RhdGE7Cj4gKyAg ICBBVjFSYXdPQlUgICAgICAgICAgICAgICAgICAgICpmaF9vYnUgPSAmcHJpdi0+Zmg7Cj4gKyAg ICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAgICAgICAgICAqZmggPSAmZmhfb2J1LT5vYnUuZnJh bWUuaGVhZGVyOwo+ICsgICAgVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxICp2cGljID0g cGljLT5jb2RlY19waWN0dXJlX3BhcmFtczsKPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQg ICAgICAgICAgKm9idSA9ICZwcml2LT5jdXJyZW50X29idTsKPiArICAgIFZBQVBJRW5jb2RlUGlj dHVyZSAgICAqcmVmOwo+ICsgICAgVkFBUElFbmNvZGVBVjFQaWN0dXJlICpocmVmOwo+ICsgICAg aW50IHNsb3QsIGk7Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgc3RhdGljIGNvbnN0IGludDhfdCBk ZWZhdWx0X2xvb3BfZmlsdGVyX3JlZl9kZWx0YXNbQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FXSA9 Cj4gKyAgICAgICAgeyAxLCAwLCAwLCAwLCAtMSwgMCwgLTEsIC0xIH07Cj4gKwo+ICsgICAgbWVt c2V0KGZoX29idSwgMCwgc2l6ZW9mKCpmaF9vYnUpKTsKPiArICAgIHBpYy0+bmJfc2xpY2VzID0g cHJpdi0+dGlsZV9ncm91cHM7Cj4gKyAgICBwaWMtPm5vbl9pbmRlcGVuZGVudF9mcmFtZSA9IHBp Yy0+ZW5jb2RlX29yZGVyIDwgcGljLT5kaXNwbGF5X29yZGVyOwo+ICsgICAgZmhfb2J1LT5oZWFk ZXIub2J1X3R5cGUgPSBBVjFfT0JVX0ZSQU1FX0hFQURFUjsKPiArICAgIGZoX29idS0+aGVhZGVy Lm9idV9oYXNfc2l6ZV9maWVsZCA9IDE7Cj4gKwo+ICsgICAgc3dpdGNoIChwaWMtPnR5cGUpIHsK PiArICAgIGNhc2UgUElDVFVSRV9UWVBFX0lEUjoKPiArICAgICAgICBhdl9hc3NlcnQwKHBpYy0+ bmJfcmVmc1swXSA9PSAwIHx8IHBpYy0+bmJfcmVmc1sxXSk7Cj4gKyAgICAgICAgZmgtPmZyYW1l X3R5cGUgPSBBVjFfRlJBTUVfS0VZOwo+ICsgICAgICAgIGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdz ID0gMHhGRjsKPiArICAgICAgICBmaC0+YmFzZV9xX2lkeCA9IHByaXYtPnFfaWR4X2lkcjsKPiAr ICAgICAgICBocGljLT5zbG90ID0gMDsKPiArICAgICAgICBocGljLT5sYXN0X2lkcl9mcmFtZSA9 IHBpYy0+ZGlzcGxheV9vcmRlcjsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgUElDVFVS RV9UWVBFX1A6Cj4gKyAgICAgICAgYXZfYXNzZXJ0MChwaWMtPm5iX3JlZnNbMF0pOwo+ICsgICAg ICAgIGZoLT5mcmFtZV90eXBlID0gQVYxX0ZSQU1FX0lOVEVSOwo+ICsgICAgICAgIGZoLT5iYXNl X3FfaWR4ID0gcHJpdi0+cV9pZHhfcDsKPiArICAgICAgICByZWYgPSBwaWMtPnJlZnNbMF1bcGlj LT5uYl9yZWZzWzBdIC0gMV07Cj4gKyAgICAgICAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOwo+ICsg ICAgICAgIGhwaWMtPnNsb3QgPSAhaHJlZi0+c2xvdDsKPiArICAgICAgICBocGljLT5sYXN0X2lk cl9mcmFtZSA9IGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ICsgICAgICAgIGZoLT5yZWZyZXNoX2Zy YW1lX2ZsYWdzID0gMSA8PCBocGljLT5zbG90Owo+ICsKPiArICAgICAgICAvKiogc2V0IHRoZSBu ZWFyZXN0IGZyYW1lIGluIEwwIGFzIGFsbCByZWZlcmVuY2UgZnJhbWUuICovCj4gKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gKyAgICAgICAgICAg IGZoLT5yZWZfZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xvdDsKPiArICAgICAgICB9Cj4gKyAgICAg ICAgZmgtPnByaW1hcnlfcmVmX2ZyYW1lID0gaHJlZi0+c2xvdDsKPiArICAgICAgICBmaC0+cmVm X29yZGVyX2hpbnRbaHJlZi0+c2xvdF0gPSByZWYtPmRpc3BsYXlfb3JkZXIgLSBocmVmLT5sYXN0 X2lkcl9mcmFtZTsKPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVfY3RybF9sMC5maWVsZHMuc2Vh cmNoX2lkeDAgPSBBVjFfUkVGX0ZSQU1FX0xBU1Q7Cj4gKwo+ICsgICAgICAgIC8qKiBzZXQgdGhl IDJuZCBuZWFyZXN0IGZyYW1lIGluIEwwIGFzIEdvbGRlbiBmcmFtZS4gKi8KPiArICAgICAgICBp ZiAocGljLT5uYl9yZWZzWzBdID4gMSkgewo+ICsgICAgICAgICAgICByZWYgPSBwaWMtPnJlZnNb MF1bcGljLT5uYl9yZWZzWzBdIC0gMl07Cj4gKyAgICAgICAgICAgIGhyZWYgPSByZWYtPnByaXZf ZGF0YTsKPiArICAgICAgICAgICAgZmgtPnJlZl9mcmFtZV9pZHhbM10gPSBocmVmLT5zbG90Owo+ ICsgICAgICAgICAgICBmaC0+cmVmX29yZGVyX2hpbnRbaHJlZi0+c2xvdF0gPSByZWYtPmRpc3Bs YXlfb3JkZXIgLSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiArICAgICAgICAgICAgdnBpYy0+cmVm X2ZyYW1lX2N0cmxfbDAuZmllbGRzLnNlYXJjaF9pZHgxID0gQVYxX1JFRl9GUkFNRV9HT0xERU47 Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBQSUNUVVJFX1RZUEVf QjoKPiArICAgICAgICBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSAmJiBwaWMtPm5iX3JlZnNb MV0pOwo+ICsgICAgICAgIGZoLT5mcmFtZV90eXBlID0gQVYxX0ZSQU1FX0lOVEVSOwo+ICsgICAg ICAgIGZoLT5iYXNlX3FfaWR4ID0gcHJpdi0+cV9pZHhfYjsKPiArICAgICAgICBmaC0+cmVmcmVz aF9mcmFtZV9mbGFncyA9IDB4MDsKPiArICAgICAgICBmaC0+cmVmZXJlbmNlX3NlbGVjdCA9IDE7 Cj4gKwo+ICsgICAgICAgIC8qKiBCIGZyYW1lIHdpbGwgbm90IGJlIHJlZmVyZW5jZWQsIGRpc2Fi bGUgaXRzIHJlY29uIGZyYW1lLiAqLwo+ICsgICAgICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0 cy5kaXNhYmxlX2ZyYW1lX3JlY29uID0gMTsKPiArCj4gKyAgICAgICAgLyoqIFVzZSBMQVNUX0ZS QU1FIGFuZCBCV0RSRUZfRlJBTUUgZm9yIHJlZmVyZW5jZS4gKi8KPiArICAgICAgICB2cGljLT5y ZWZfZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDAgPSBBVjFfUkVGX0ZSQU1FX0xBU1Q7 Cj4gKyAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDEuZmllbGRzLnNlYXJjaF9pZHgwID0g QVYxX1JFRl9GUkFNRV9CV0RSRUY7Cj4gKwo+ICsgICAgICAgIHJlZiAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9IHBpYy0+cmVmc1swXVtwaWMtPm5iX3JlZnNbMF0gLSAxXTsKPiArICAgICAg ICBocmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgPSByZWYtPnByaXZfZGF0YTsKPiArICAg ICAgICBocGljLT5sYXN0X2lkcl9mcmFtZSAgICAgICAgICAgPSBocmVmLT5sYXN0X2lkcl9mcmFt ZTsKPiArICAgICAgICBmaC0+cHJpbWFyeV9yZWZfZnJhbWUgICAgICAgICAgPSBocmVmLT5zbG90 Owo+ICsgICAgICAgIGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxh eV9vcmRlciAtIGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkg PCBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSsrKSB7Cj4gKyAgICAgICAgICAgIGZoLT5yZWZfZnJh bWVfaWR4W2ldID0gaHJlZi0+c2xvdDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJlZiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9IHBpYy0+cmVmc1sxXVtwaWMtPm5iX3JlZnNbMV0g LSAxXTsKPiArICAgICAgICBocmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgPSByZWYtPnBy aXZfZGF0YTsKPiArICAgICAgICBmaC0+cmVmX29yZGVyX2hpbnRbaHJlZi0+c2xvdF0gPSByZWYt PmRpc3BsYXlfb3JkZXIgLSBocmVmLT5sYXN0X2lkcl9mcmFtZTsKPiArICAgICAgICBmb3IgKGkg PSBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4g KyAgICAgICAgICAgIGZoLT5yZWZfZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xvdDsKPiArICAgICAg ICB9Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGF2X2Fzc2Vy dDAoMCAmJiAiaW52YWxpZCBwaWN0dXJlIHR5cGUiKTsKPiArICAgIH0KPiArCj4gKyAgICBmaC0+ c2hvd19mcmFtZSAgICAgICAgICAgICAgICA9IHBpYy0+ZGlzcGxheV9vcmRlciA8PSBwaWMtPmVu Y29kZV9vcmRlcjsKPiArICAgIGZoLT5zaG93YWJsZV9mcmFtZSAgICAgICAgICAgID0gZmgtPmZy YW1lX3R5cGUgIT0gQVYxX0ZSQU1FX0tFWTsKPiArICAgIGZoLT5mcmFtZV93aWR0aF9taW51c18x ICAgICAgID0gYXZjdHgtPndpZHRoIC0gMTsKPiArICAgIGZoLT5mcmFtZV9oZWlnaHRfbWludXNf MSAgICAgID0gYXZjdHgtPmhlaWdodCAtIDE7Cj4gKyAgICBmaC0+cmVuZGVyX3dpZHRoX21pbnVz XzEgICAgICA9IGZoLT5mcmFtZV93aWR0aF9taW51c18xOwo+ICsgICAgZmgtPnJlbmRlcl9oZWln aHRfbWludXNfMSAgICAgPSBmaC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzE7Cj4gKyAgICBmaC0+b3Jk ZXJfaGludCAgICAgICAgICAgICAgICA9IHBpYy0+ZGlzcGxheV9vcmRlciAtIGhwaWMtPmxhc3Rf aWRyX2ZyYW1lOwo+ICsgICAgZmgtPnRpbGVfY29scyAgICAgICAgICAgICAgICAgPSBwcml2LT50 aWxlX2NvbHM7Cj4gKyAgICBmaC0+dGlsZV9yb3dzICAgICAgICAgICAgICAgICA9IHByaXYtPnRp bGVfcm93czsKPiArICAgIGZoLT50aWxlX2NvbHNfbG9nMiAgICAgICAgICAgID0gcHJpdi0+dGls ZV9jb2xzX2xvZzI7Cj4gKyAgICBmaC0+dGlsZV9yb3dzX2xvZzIgICAgICAgICAgICA9IHByaXYt PnRpbGVfcm93c19sb2cyOwo+ICsgICAgZmgtPnVuaWZvcm1fdGlsZV9zcGFjaW5nX2ZsYWcgPSBw cml2LT51bmlmb3JtX3RpbGU7Cj4gKyAgICBmaC0+dGlsZV9zaXplX2J5dGVzX21pbnVzMSAgICA9 IHByaXYtPmF0dHJfZXh0Mi5iaXRzLnRpbGVfc2l6ZV9ieXRlc19taW51czE7Cj4gKwo+ICsgICAg LyoqIGlnbm9yZSBPTkxZXzR4NCBtb2RlIGZvciBjb2RlZGxvc3NsZXNzIGlzIG5vdCBmdWxseSBp bXBsZW1lbnRlZC4gKi8KPiArICAgIGlmIChwcml2LT5hdHRyX2V4dDIuYml0cy50eF9tb2RlX3N1 cHBvcnQgJiAweDA0KQo+ICsgICAgICAgIGZoLT50eF9tb2RlID0gQVYxX1RYX01PREVfU0VMRUNU Owo+ICsgICAgZWxzZSBpZiAocHJpdi0+YXR0cl9leHQyLmJpdHMudHhfbW9kZV9zdXBwb3J0ICYg MHgwMikKPiArICAgICAgICBmaC0+dHhfbW9kZSA9IEFWMV9UWF9NT0RFX0xBUkdFU1Q7Cj4gKyAg ICBlbHNlIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vIGF2YWls YWJsZSB0eCBtb2RlIGZvdW5kLlxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKPiArICAgIH0KPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgZmgtPnRpbGVfY29sczsgaSsr KQo+ICsgICAgICAgIGZoLT53aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IHZwaWMtPndpZHRoX2lu X3Nic19taW51c18xW2ldID0gcHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV07Cj4gKwo+ICsg ICAgZm9yIChpID0gMDsgaSA8IGZoLT50aWxlX3Jvd3M7IGkrKykKPiArICAgICAgICBmaC0+aGVp Z2h0X2luX3Nic19taW51c18xW2ldID0gdnBpYy0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldID0g cHJpdi0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldOwo+ICsKPiArICAgIG1lbWNweShmaC0+bG9v cF9maWx0ZXJfcmVmX2RlbHRhcywgZGVmYXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzLAo+ICsg ICAgICAgICAgIEFWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRSAqIHNpemVvZihpbnQ4X3QpKTsKPiAr Cj4gKyAgICBpZiAoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBmaC0+c2hvd19m cmFtZSkgewo+ICsgICAgICAgIGZoLT5lcnJvcl9yZXNpbGllbnRfbW9kZSA9IDE7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgaWYgKGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgfHwgZmgtPmVy cm9yX3Jlc2lsaWVudF9tb2RlKQo+ICsgICAgICAgIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IEFW MV9QUklNQVJZX1JFRl9OT05FOwo+ICsKPiArICAgIHZwaWMtPmJhc2VfcWluZGV4ICAgICAgICAg ID0gZmgtPmJhc2VfcV9pZHg7Cj4gKyAgICB2cGljLT5mcmFtZV93aWR0aF9taW51c18xICA9IGZo LT5mcmFtZV93aWR0aF9taW51c18xOwo+ICsgICAgdnBpYy0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEg PSBmaC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzE7Cj4gKyAgICB2cGljLT5wcmltYXJ5X3JlZl9mcmFt ZSAgICA9IGZoLT5wcmltYXJ5X3JlZl9mcmFtZTsKPiArICAgIHZwaWMtPnJlY29uc3RydWN0ZWRf ZnJhbWUgID0gcGljLT5yZWNvbl9zdXJmYWNlOwo+ICsgICAgdnBpYy0+Y29kZWRfYnVmICAgICAg ICAgICAgPSBwaWMtPm91dHB1dF9idWZmZXI7Cj4gKyAgICB2cGljLT50aWxlX2NvbHMgICAgICAg ICAgICA9IGZoLT50aWxlX2NvbHM7Cj4gKyAgICB2cGljLT50aWxlX3Jvd3MgICAgICAgICAgICA9 IGZoLT50aWxlX3Jvd3M7Cj4gKyAgICB2cGljLT5vcmRlcl9oaW50ICAgICAgICAgICA9IGZoLT5v cmRlcl9oaW50Owo+ICsjaWYgVkFfQ0hFQ0tfVkVSU0lPTigxLCAxNSwgMCkKPiArICAgIHZwaWMt PnJlZnJlc2hfZnJhbWVfZmxhZ3MgID0gZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3M7Cj4gKyNlbmRp Zgo+ICsKPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lbmFibGVfZnJhbWVfb2J1ICAg ICA9IDA7Cj4gKyAgICB2cGljLT5waWN0dXJlX2ZsYWdzLmJpdHMuZnJhbWVfdHlwZSAgICAgICAg ICAgPSBmaC0+ZnJhbWVfdHlwZTsKPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5yZWR1 Y2VkX3R4X3NldCAgICAgICA9IGZoLT5yZWR1Y2VkX3R4X3NldDsKPiArICAgIHZwaWMtPnBpY3R1 cmVfZmxhZ3MuYml0cy5lcnJvcl9yZXNpbGllbnRfbW9kZSA9IGZoLT5lcnJvcl9yZXNpbGllbnRf bW9kZTsKPiArCj4gKyAgICAvKiogbGV0IGRyaXZlciBkZWNpZGUgdG8gdXNlIHNpbmdsZSBvciBj b21wb3VuZCByZWZlcmVuY2UgcHJlZGljdGlvbiBtb2RlLiAqLwo+ICsgICAgdnBpYy0+bW9kZV9j b250cm9sX2ZsYWdzLmJpdHMucmVmZXJlbmNlX21vZGUgPSBmaC0+cmVmZXJlbmNlX3NlbGVjdCA/ IDIgOiAwOwo+ICsgICAgdnBpYy0+bW9kZV9jb250cm9sX2ZsYWdzLmJpdHMudHhfbW9kZSA9IGZo LT50eF9tb2RlOwo+ICsKPiArICAgIHZwaWMtPnRpbGVfZ3JvdXBfb2J1X2hkcl9pbmZvLmJpdHMu b2J1X2hhc19zaXplX2ZpZWxkID0gMTsKPiArCj4gKyAgICAvKiogc2V0IHJlZmVyZW5jZS4gKi8K PiArICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykKPiArICAgICAg ICB2cGljLT5yZWZfZnJhbWVfaWR4W2ldID0gZmgtPnJlZl9mcmFtZV9pZHhbaV07Cj4gKwo+ICsg ICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHZwaWMtPnJlZmVyZW5jZV9mcmFtZXMp OyBpKyspCj4gKyAgICAgICAgdnBpYy0+cmVmZXJlbmNlX2ZyYW1lc1tpXSA9IFZBX0lOVkFMSURf U1VSRkFDRTsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX1JFRkVSRU5DRV9MSVNUX05V TTsgaSsrKSB7Cj4gKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwaWMtPm5iX3JlZnNbaV07 IGorKykgewo+ICsgICAgICAgICAgICBWQUFQSUVuY29kZVBpY3R1cmUgKnJlZl9waWMgPSBwaWMt PnJlZnNbaV1bal07Cj4gKwo+ICsgICAgICAgICAgICBzbG90ID0gKChWQUFQSUVuY29kZUFWMVBp Y3R1cmUqKXJlZl9waWMtPnByaXZfZGF0YSktPnNsb3Q7Cj4gKyAgICAgICAgICAgIGF2X2Fzc2Vy dDAodnBpYy0+cmVmZXJlbmNlX2ZyYW1lc1tzbG90XSA9PSBWQV9JTlZBTElEX1NVUkZBQ0UpOwo+ ICsKPiArICAgICAgICAgICAgdnBpYy0+cmVmZXJlbmNlX2ZyYW1lc1tzbG90XSA9IHJlZl9waWMt PnJlY29uX3N1cmZhY2U7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGZoX29idS0+ b2J1X3NpemVfYnl0ZV9sZW4gPSBwcml2LT5hdHRyX2V4dDIuYml0cy5vYnVfc2l6ZV9ieXRlc19t aW51czEgKyAxOwo+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV9hZGRfb2J1KGF2Y3R4LCBv YnUsIEFWMV9PQlVfRlJBTUVfSEVBREVSLCAmcHJpdi0+ZmgpOwo+ICsgICAgaWYgKHJldCA8IDAp Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93 cml0ZV9vYnUoYXZjdHgsIHByaXYtPmZoX2RhdGEsICZwcml2LT5maF9kYXRhX2xlbiwgb2J1KTsK PiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsKPiArICAgIGlmICgh KGN0eC0+dmFfcmNfbW9kZSAmIFZBX1JDX0NRUCkpIHsKPiArICAgICAgICB2cGljLT5taW5fYmFz ZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4LT5xbWluLCAxLCBBVjFfTUFYX1FVQU5UKTsKPiArICAg ICAgICB2cGljLT5tYXhfYmFzZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4LT5xbWF4LCAxLCBBVjFf TUFYX1FVQU5UKTsKPiArCj4gKyAgICAgICAgdnBpYy0+Yml0X29mZnNldF9xaW5kZXggICAgICAg ICAgICAgID0gcHJpdi0+cWluZGV4X29mZnNldDsKPiArICAgICAgICB2cGljLT5iaXRfb2Zmc2V0 X2xvb3BmaWx0ZXJfcGFyYW1zICAgPSBwcml2LT5sb29wZmlsdGVyX29mZnNldDsKPiArICAgICAg ICB2cGljLT5iaXRfb2Zmc2V0X2NkZWZfcGFyYW1zICAgICAgICAgPSBwcml2LT5jZGVmX3N0YXJ0 X29mZnNldDsKPiArICAgICAgICB2cGljLT5zaXplX2luX2JpdHNfY2RlZl9wYXJhbXMgICAgICAg PSBwcml2LT5jZGVmX3BhcmFtX3NpemU7Cj4gKyAgICAgICAgdnBpYy0+c2l6ZV9pbl9iaXRzX2Zy YW1lX2hkcl9vYnUgICAgID0gcHJpdi0+ZmhfZGF0YV9sZW47Cj4gKyAgICAgICAgdnBpYy0+Ynl0 ZV9vZmZzZXRfZnJhbWVfaGRyX29idV9zaXplID0gKCgocGljLT50eXBlID09IFBJQ1RVUkVfVFlQ RV9JRFIpID8KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcml2LT5zaF9kYXRhX2xlbiAvIDggOiAwKSArCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGZoX29idS0+aGVhZGVyLm9idV9leHRlbnNpb25fZmxh ZyA/Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6 IDEpKTsKPiArICAgIH0KPiArCj4gK2VuZDoKPiArICAgIGZmX2Nic19mcmFnbWVudF9yZXNldChv YnUpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2YWFwaV9lbmNv ZGVfYXYxX2luaXRfc2xpY2VfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBQVBJRW5jb2RlUGljdHVy ZSAqcGljLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VkFBUElFbmNvZGVTbGljZSAqc2xpY2UpCj4gK3sKPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4 dCAgICAgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIFZBRW5jVGlsZUdyb3VwQnVm ZmVyQVYxICAqdnNsaWNlID0gc2xpY2UtPmNvZGVjX3NsaWNlX3BhcmFtczsKPiArICAgIENvZGVk Qml0c3RyZWFtQVYxQ29udGV4dCAgKmNiY3R4ID0gcHJpdi0+Y2JjLT5wcml2X2RhdGE7Cj4gKyAg ICBpbnQgZGl2Owo+ICsKPiArICAgIC8qKiBTZXQgdGlsZSBncm91cCBpbmZvLiAqLwo+ICsgICAg ZGl2ID0gcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzIC8gcHJpdi0+dGlsZV9ncm91 cHM7Cj4gKyAgICB2c2xpY2UtPnRnX3N0YXJ0ID0gc2xpY2UtPmluZGV4ICogZGl2Owo+ICsgICAg aWYgKHNsaWNlLT5pbmRleCA9PSAocHJpdi0+dGlsZV9ncm91cHMgLSAxKSkgewo+ICsgICAgICAg IHZzbGljZS0+dGdfZW5kID0gcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzIC0gMTsK PiArICAgICAgICBjYmN0eC0+c2Vlbl9mcmFtZV9oZWFkZXIgPSAwOwo+ICsgICAgfSBlbHNlIHsK PiArICAgICAgICB2c2xpY2UtPnRnX2VuZCA9IChzbGljZS0+aW5kZXggKyAxKSAqIGRpdiAtIDE7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmFh cGlfZW5jb2RlX2F2MV93cml0ZV9waWN0dXJlX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUFQ SUVuY29kZVBpY3R1cmUgKnBpYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4pCj4gK3sKPiArICAg IFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsg ICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICAgKm9idSA9ICZwcml2LT5jdXJyZW50X29idTsK PiArICAgIENvZGVkQml0c3RyZWFtQVYxQ29udGV4dCAqY2JjdHggPSBwcml2LT5jYmMtPnByaXZf ZGF0YTsKPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICpmaF9vYnUgPSAmcHJpdi0+Zmg7 Cj4gKyAgICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAqcmVwX2ZoID0gJmZoX29idS0+b2J1LmZy YW1lX2hlYWRlcjsKPiArICAgIFZBQVBJRW5jb2RlQVYxUGljdHVyZSAqaHJlZjsKPiArICAgIGlu dCByZXQgPSAwOwo+ICsKPiArICAgIHBpYy0+dGFpbF9zaXplID0gMDsKPiArICAgIC8qKiBQYWNr IHJlcGVhdCBmcmFtZSBoZWFkZXIuICovCj4gKyAgICBpZiAocGljLT5kaXNwbGF5X29yZGVyID4g cGljLT5lbmNvZGVfb3JkZXIpIHsKPiArICAgICAgICBtZW1zZXQoZmhfb2J1LCAwLCBzaXplb2Yo KmZoX29idSkpOwo+ICsgICAgICAgIGhyZWYgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBd IC0gMV0tPnByaXZfZGF0YTsKPiArICAgICAgICBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFW MV9PQlVfRlJBTUVfSEVBREVSOwo+ICsgICAgICAgIGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6 ZV9maWVsZCA9IDE7Cj4gKwo+ICsgICAgICAgIHJlcF9maC0+c2hvd19leGlzdGluZ19mcmFtZSAg ID0gMTsKPiArICAgICAgICByZXBfZmgtPmZyYW1lX3RvX3Nob3dfbWFwX2lkeCA9IGhyZWYtPnNs b3QgPT0gMDsKPiArICAgICAgICByZXBfZmgtPmZyYW1lX3R5cGUgICAgICAgICAgICA9IEFWMV9G UkFNRV9JTlRFUjsKPiArICAgICAgICByZXBfZmgtPmZyYW1lX3dpZHRoX21pbnVzXzEgICA9IGF2 Y3R4LT53aWR0aCAtIDE7Cj4gKyAgICAgICAgcmVwX2ZoLT5mcmFtZV9oZWlnaHRfbWludXNfMSAg PSBhdmN0eC0+aGVpZ2h0IC0gMTsKPiArICAgICAgICByZXBfZmgtPnJlbmRlcl93aWR0aF9taW51 c18xICA9IHJlcF9maC0+ZnJhbWVfd2lkdGhfbWludXNfMTsKPiArICAgICAgICByZXBfZmgtPnJl bmRlcl9oZWlnaHRfbWludXNfMSA9IHJlcF9maC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzE7Cj4gKwo+ ICsgICAgICAgIGNiY3R4LT5zZWVuX2ZyYW1lX2hlYWRlciA9IDA7Cj4gKwo+ICsgICAgICAgIHJl dCA9IHZhYXBpX2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LCBBVjFfT0JVX0ZSQU1FX0hF QURFUiwgJnByaXYtPmZoKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAg Z290byBlbmQ7Cj4gKwo+ICsgICAgICAgIHJldCA9IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfb2J1 KGF2Y3R4LCBwaWMtPnRhaWxfZGF0YSwgJnBpYy0+dGFpbF9zaXplLCBvYnUpOwo+ICsgICAgICAg IGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiArCj4gKyAgICAgICAgcGlj LT50YWlsX3NpemUgLz0gODsKPiArICAgIH0KPiArCj4gKyAgICBtZW1jcHkoZGF0YSwgJnByaXYt PmZoX2RhdGEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAqIHNpemVvZihjaGFyKSk7Cj4gKyAgICAq ZGF0YV9sZW4gPSBwcml2LT5maF9kYXRhX2xlbjsKPiArCj4gK2VuZDoKPiArICAgIGZmX2Nic19m cmFnbWVudF9yZXNldChvYnUpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IFZBQVBJRW5jb2RlUHJvZmlsZSB2YWFwaV9lbmNvZGVfYXYxX3Byb2ZpbGVzW10gPSB7 Cj4gKyAgICB7IEFWX1BST0ZJTEVfQVYxX01BSU4sICA4LCAzLCAxLCAxLCBWQVByb2ZpbGVBVjFQ cm9maWxlMCB9LAo+ICsgICAgeyBBVl9QUk9GSUxFX0FWMV9NQUlOLCAxMCwgMywgMSwgMSwgVkFQ cm9maWxlQVYxUHJvZmlsZTAgfSwKPiArICAgIHsgQVZfUFJPRklMRV9VTktOT1dOIH0KPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBWQUFQSUVuY29kZVR5cGUgdmFhcGlfZW5jb2RlX3R5cGVfYXYx ID0gewo+ICsgICAgLnByb2ZpbGVzICAgICAgICA9IHZhYXBpX2VuY29kZV9hdjFfcHJvZmlsZXMs Cj4gKyAgICAuZmxhZ3MgICAgICAgICAgID0gRkxBR19CX1BJQ1RVUkVTIHwgRkxBR19USU1FU1RB TVBfTk9fREVMQVksCj4gKyAgICAuZGVmYXVsdF9xdWFsaXR5ID0gMjUsCj4gKwo+ICsgICAgLmdl dF9lbmNvZGVyX2NhcHMgPSAmdmFhcGlfZW5jb2RlX2F2MV9nZXRfZW5jb2Rlcl9jYXBzLAo+ICsg ICAgLmNvbmZpZ3VyZSAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9jb25maWd1cmUsCj4gKwo+ ICsgICAgLnNlcXVlbmNlX2hlYWRlcl90eXBlICA9IFZBRW5jUGFja2VkSGVhZGVyU2VxdWVuY2Us Cj4gKyAgICAuc2VxdWVuY2VfcGFyYW1zX3NpemUgID0gc2l6ZW9mKFZBRW5jU2VxdWVuY2VQYXJh bWV0ZXJCdWZmZXJBVjEpLAo+ICsgICAgLmluaXRfc2VxdWVuY2VfcGFyYW1zICA9ICZ2YWFwaV9l bmNvZGVfYXYxX2luaXRfc2VxdWVuY2VfcGFyYW1zLAo+ICsgICAgLndyaXRlX3NlcXVlbmNlX2hl YWRlciA9ICZ2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX3NlcXVlbmNlX2hlYWRlciwKPiArCj4gKyAg ICAucGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWQUFQSUVuY29kZUFWMVBpY3R1cmUp LAo+ICsgICAgLnBpY3R1cmVfaGVhZGVyX3R5cGUgICAgPSBWQUVuY1BhY2tlZEhlYWRlclBpY3R1 cmUsCj4gKyAgICAucGljdHVyZV9wYXJhbXNfc2l6ZSAgICA9IHNpemVvZihWQUVuY1BpY3R1cmVQ YXJhbWV0ZXJCdWZmZXJBVjEpLAo+ICsgICAgLmluaXRfcGljdHVyZV9wYXJhbXMgICAgPSAmdmFh cGlfZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVfcGFyYW1zLAo+ICsgICAgLndyaXRlX3BpY3R1cmVf aGVhZGVyICAgPSAmdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9waWN0dXJlX2hlYWRlciwKPiArCj4g KyAgICAuc2xpY2VfcGFyYW1zX3NpemUgPSBzaXplb2YoVkFFbmNUaWxlR3JvdXBCdWZmZXJBVjEp LAo+ICsgICAgLmluaXRfc2xpY2VfcGFyYW1zID0gJnZhYXBpX2VuY29kZV9hdjFfaW5pdF9zbGlj ZV9wYXJhbXMsCj4gK307Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX2F2 MV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgVkFBUElFbmNvZGVDb250 ZXh0ICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBWQUFQSUVuY29kZUFWMUNv bnRleHQgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIFZBQ29uZmlnQXR0cmliIGF0 dHI7Cj4gKyAgICBWQVN0YXR1cyB2YXM7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGN0eC0+ Y29kZWMgPSAmdmFhcGlfZW5jb2RlX3R5cGVfYXYxOwo+ICsKPiArICAgIGN0eC0+ZGVzaXJlZF9w YWNrZWRfaGVhZGVycyA9Cj4gKyAgICAgICAgVkFfRU5DX1BBQ0tFRF9IRUFERVJfU0VRVUVOQ0Ug fAo+ICsgICAgICAgIFZBX0VOQ19QQUNLRURfSEVBREVSX1BJQ1RVUkU7Cj4gKwo+ICsgICAgaWYg KGF2Y3R4LT5wcm9maWxlID09IEFWX1BST0ZJTEVfVU5LTk9XTikKPiArICAgICAgICBhdmN0eC0+ cHJvZmlsZSA9IHByaXYtPnByb2ZpbGU7Cj4gKyAgICBpZiAoYXZjdHgtPmxldmVsID09IEFWX0xF VkVMX1VOS05PV04pCj4gKyAgICAgICAgYXZjdHgtPmxldmVsID0gcHJpdi0+bGV2ZWw7Cj4gKwo+ ICsgICAgaWYgKGF2Y3R4LT5sZXZlbCAhPSBBVl9MRVZFTF9VTktOT1dOICYmIGF2Y3R4LT5sZXZl bCAmIH4weDFmKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIGxldmVsICVkXG4iLCBhdmN0eC0+bGV2ZWwpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZfdmFhcGlfZW5jb2RlX2luaXQo YXZjdHgpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4g KyAgICBhdHRyLnR5cGUgPSBWQUNvbmZpZ0F0dHJpYkVuY0FWMTsKPiArICAgIHZhcyA9IHZhR2V0 Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5LAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN0eC0+dmFfcHJvZmlsZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjdHgtPnZhX2VudHJ5cG9pbnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmF0dHIsIDEpOwo+ICsgICAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykg ewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5 ICIKPiArICAgICAgICAgICAgICAgImNvbmZpZyBhdHRyaWJ1dGU6ICVkICglcykuXG4iLCB2YXMs IHZhRXJyb3JTdHIodmFzKSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4g KyAgICB9IGVsc2UgaWYgKGF0dHIudmFsdWUgPT0gVkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsK PiArICAgICAgICBwcml2LT5hdHRyLnZhbHVlID0gMDsKPiArICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19XQVJOSU5HLCAiQXR0cmlidXRlIHR5cGU6JWQgaXMgbm90ICIKPiArICAgICAgICAg ICAgICAgInN1cHBvcnRlZC5cbiIsIGF0dHIudHlwZSk7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAg ICAgIHByaXYtPmF0dHIudmFsdWUgPSBhdHRyLnZhbHVlOwo+ICsgICAgfQo+ICsKPiArICAgIGF0 dHIudHlwZSA9IFZBQ29uZmlnQXR0cmliRW5jQVYxRXh0MTsKPiArICAgIHZhcyA9IHZhR2V0Q29u ZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN0eC0+dmFfcHJvZmlsZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdHgtPnZhX2VudHJ5cG9pbnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmF0dHIsIDEpOwo+ICsgICAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykgewo+ ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICIK PiArICAgICAgICAgICAgICAgImNvbmZpZyBhdHRyaWJ1dGU6ICVkICglcykuXG4iLCB2YXMsIHZh RXJyb3JTdHIodmFzKSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAg ICB9IGVsc2UgaWYgKGF0dHIudmFsdWUgPT0gVkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiAr ICAgICAgICBwcml2LT5hdHRyX2V4dDEudmFsdWUgPSAwOwo+ICsgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX1dBUk5JTkcsICJBdHRyaWJ1dGUgdHlwZTolZCBpcyBub3QgIgo+ICsgICAgICAg ICAgICAgICAic3VwcG9ydGVkLlxuIiwgYXR0ci50eXBlKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAg ICAgICAgcHJpdi0+YXR0cl9leHQxLnZhbHVlID0gYXR0ci52YWx1ZTsKPiArICAgIH0KPiArCj4g KyAgICAvKiogVGhpcyBhdHRyIHByb3ZpZGVzIGVzc2VudGlhbCBpbmRpY2F0b3JzLCByZXR1cm4g ZXJyb3IgaWYgbm90IHN1cHBvcnQuICovCj4gKyAgICBhdHRyLnR5cGUgPSBWQUNvbmZpZ0F0dHJp YkVuY0FWMUV4dDI7Cj4gKyAgICB2YXMgPSB2YUdldENvbmZpZ0F0dHJpYnV0ZXMoY3R4LT5od2N0 eC0+ZGlzcGxheSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX3By b2ZpbGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT52YV9lbnRyeXBv aW50LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRyLCAxKTsKPiArICAg IGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MgfHwgYXR0ci52YWx1ZSA9PSBWQV9BVFRSSUJf Tk9UX1NVUFBPUlRFRCkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi RmFpbGVkIHRvIHF1ZXJ5ICIKPiArICAgICAgICAgICAgICAgImNvbmZpZyBhdHRyaWJ1dGU6ICVk ICglcykuXG4iLCB2YXMsIHZhRXJyb3JTdHIodmFzKSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHByaXYtPmF0dHJfZXh0Mi52 YWx1ZSA9IGF0dHIudmFsdWU7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2Rl X2F2MV9zZXRfdGlsZShhdmN0eCk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1 cm4gcmV0Owo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBp bnQgdmFhcGlfZW5jb2RlX2F2MV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiAr ICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKwo+ ICsgICAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJnByaXYtPmN1cnJlbnRfb2J1KTsKPiArICAgIGZm X2Nic19jbG9zZSgmcHJpdi0+Y2JjKTsKPiArCj4gKyAgICByZXR1cm4gZmZfdmFhcGlfZW5jb2Rl X2Nsb3NlKGF2Y3R4KTsKPiArfQo+ICsKPiArI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVkFB UElFbmNvZGVBVjFDb250ZXh0LCB4KQo+ICsjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19WSURF T19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQo+ICsKPiArc3RhdGljIGNvbnN0 IEFWT3B0aW9uIHZhYXBpX2VuY29kZV9hdjFfb3B0aW9uc1tdID0gewo+ICsgICAgVkFBUElfRU5D T0RFX0NPTU1PTl9PUFRJT05TLAo+ICsgICAgVkFBUElfRU5DT0RFX1JDX09QVElPTlMsCj4gKyAg ICB7ICJwcm9maWxlIiwgIlNldCBwcm9maWxlIChzZXFfcHJvZmlsZSkiLAo+ICsgICAgICBPRkZT RVQocHJvZmlsZSksIEFWX09QVF9UWVBFX0lOVCwKPiArICAgICAgeyAuaTY0ID0gQVZfUFJPRklM RV9VTktOT1dOIH0sIEFWX1BST0ZJTEVfVU5LTk9XTiwgMHhmZiwgRkxBR1MsICJwcm9maWxlIiB9 LAo+ICsKPiArI2RlZmluZSBQUk9GSUxFKG5hbWUsIHZhbHVlKSAgbmFtZSwgTlVMTCwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIFwKPiArICAgIHsgLmk2NCA9IHZhbHVlIH0sIDAsIDAsIEZMQUdTLCAi cHJvZmlsZSIKPiArICAgIHsgUFJPRklMRSgibWFpbiIsICAgICAgICAgICAgICAgQVZfUFJPRklM RV9BVjFfTUFJTikgfSwKPiArICAgIHsgUFJPRklMRSgiaGlnaCIsICAgICAgICAgICAgICAgQVZf UFJPRklMRV9BVjFfSElHSCkgfSwKPiArICAgIHsgUFJPRklMRSgicHJvZmVzc2lvbmFsIiwgICAg ICAgQVZfUFJPRklMRV9BVjFfUFJPRkVTU0lPTkFMKSB9LAo+ICsjdW5kZWYgUFJPRklMRQo+ICsK PiArICAgIHsgInRpZXIiLCAiU2V0IHRpZXIgKHNlcV90aWVyKSIsCj4gKyAgICAgIE9GRlNFVCh0 aWVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIDEsIEZMQUdTLCAidGllciIg fSwKPiArICAgIHsgIm1haW4iLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKPiArICAgICAg eyAuaTY0ID0gMCB9LCAwLCAwLCBGTEFHUywgInRpZXIiIH0sCj4gKyAgICB7ICJoaWdoIiwgTlVM TCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCj4gKyAgICAgIHsgLmk2NCA9IDEgfSwgMCwgMCwgRkxB R1MsICJ0aWVyIiB9LAo+ICsgICAgeyAibGV2ZWwiLCAiU2V0IGxldmVsIChzZXFfbGV2ZWxfaWR4 KSIsCj4gKyAgICAgIE9GRlNFVChsZXZlbCksIEFWX09QVF9UWVBFX0lOVCwKPiArICAgICAgeyAu aTY0ID0gQVZfTEVWRUxfVU5LTk9XTiB9LCBBVl9MRVZFTF9VTktOT1dOLCAweDFmLCBGTEFHUywg ImxldmVsIiB9LAo+ICsKPiArI2RlZmluZSBMRVZFTChuYW1lLCB2YWx1ZSkgbmFtZSwgTlVMTCwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIFwKPiArICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwg RkxBR1MsICJsZXZlbCIKPiArICAgIHsgTEVWRUwoIjIuMCIsICAwKSB9LAo+ICsgICAgeyBMRVZF TCgiMi4xIiwgIDEpIH0sCj4gKyAgICB7IExFVkVMKCIzLjAiLCAgNCkgfSwKPiArICAgIHsgTEVW RUwoIjMuMSIsICA1KSB9LAo+ICsgICAgeyBMRVZFTCgiNC4wIiwgIDgpIH0sCj4gKyAgICB7IExF VkVMKCI0LjEiLCAgOSkgfSwKPiArICAgIHsgTEVWRUwoIjUuMCIsIDEyKSB9LAo+ICsgICAgeyBM RVZFTCgiNS4xIiwgMTMpIH0sCj4gKyAgICB7IExFVkVMKCI1LjIiLCAxNCkgfSwKPiArICAgIHsg TEVWRUwoIjUuMyIsIDE1KSB9LAo+ICsgICAgeyBMRVZFTCgiNi4wIiwgMTYpIH0sCj4gKyAgICB7 IExFVkVMKCI2LjEiLCAxNykgfSwKPiArICAgIHsgTEVWRUwoIjYuMiIsIDE4KSB9LAo+ICsgICAg eyBMRVZFTCgiNi4zIiwgMTkpIH0sCj4gKyN1bmRlZiBMRVZFTAo+ICsKPiArICAgIHsgInRpbGVz IiwgIlRpbGUgY29sdW1ucyB4IHJvd3MgKFVzZSBtaW5pbWFsIHRpbGUgY29sdW1uL3JvdyBudW1i ZXIgYXV0b21hdGljYWxseSBieSBkZWZhdWx0KSIsCj4gKyAgICAgIE9GRlNFVCh0aWxlX2NvbHMp LCBBVl9PUFRfVFlQRV9JTUFHRV9TSVpFLCB7IC5zdHIgPSBOVUxMIH0sIDAsIDAsIEZMQUdTIH0s Cj4gKyAgICB7ICJ0aWxlX2dyb3VwcyIsICJOdW1iZXIgb2YgdGlsZSBncm91cHMgZm9yIGVuY29k aW5nIiwKPiArICAgICAgT0ZGU0VUKHRpbGVfZ3JvdXBzKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5p NjQgPSAxIH0sIDEsIEFWMV9NQVhfVElMRV9ST1dTICogQVYxX01BWF9USUxFX0NPTFMsIEZMQUdT IH0sCj4gKwo+ICsgICAgeyBOVUxMIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgRkZDb2Rl Y0RlZmF1bHQgdmFhcGlfZW5jb2RlX2F2MV9kZWZhdWx0c1tdID0gewo+ICsgICAgeyAiYiIsICAg ICAgICAgICAgICAiMCIgICB9LAo+ICsgICAgeyAiYmYiLCAgICAgICAgICAgICAiMiIgICB9LAo+ ICsgICAgeyAiZyIsICAgICAgICAgICAgICAiMTIwIiB9LAo+ICsgICAgeyAicW1pbiIsICAgICAg ICAgICAiMSIgICB9LAo+ICsgICAgeyAicW1heCIsICAgICAgICAgICAiMjU1IiB9LAo+ICsgICAg eyBOVUxMIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyB2YWFwaV9lbmNvZGVf YXYxX2NsYXNzID0gewo+ICsgICAgLmNsYXNzX25hbWUgPSAiYXYxX3ZhYXBpIiwKPiArICAgIC5p dGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAub3B0aW9uICAgICA9IHZh YXBpX2VuY29kZV9hdjFfb3B0aW9ucywKPiArICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZF UlNJT05fSU5ULAo+ICt9Owo+ICsKPiArY29uc3QgRkZDb2RlYyBmZl9hdjFfdmFhcGlfZW5jb2Rl ciA9IHsKPiArICAgIC5wLm5hbWUgICAgICAgICA9ICJhdjFfdmFhcGkiLAo+ICsgICAgQ09ERUNf TE9OR19OQU1FKCJBVjEgKFZBQVBJKSIpLAo+ICsgICAgLnAudHlwZSAgICAgICAgID0gQVZNRURJ QV9UWVBFX1ZJREVPLAo+ICsgICAgLnAuaWQgICAgICAgICAgID0gQVZfQ09ERUNfSURfQVYxLAo+ ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZBQVBJRW5jb2RlQVYxQ29udGV4dCksCj4g KyAgICAuaW5pdCAgICAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0LAo+ICsgICAgRkZf Q09ERUNfUkVDRUlWRV9QQUNLRVRfQ0IoJmZmX3ZhYXBpX2VuY29kZV9yZWNlaXZlX3BhY2tldCks Cj4gKyAgICAuY2xvc2UgICAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9jbG9zZSwKPiArICAg IC5wLnByaXZfY2xhc3MgICA9ICZ2YWFwaV9lbmNvZGVfYXYxX2NsYXNzLAo+ICsgICAgLnAuY2Fw YWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0hBUkRXQVJFIHwK PiArICAgICAgICAgICAgICAgICAgICAgIEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBf RU5DT0RFUl9SRU9SREVSRURfT1BBUVVFLAo+ICsgICAgLmNhcHNfaW50ZXJuYWwgID0gRkZfQ09E RUNfQ0FQX05PVF9JTklUX1RIUkVBRFNBRkUgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgRkZf Q09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCwKPiArICAgIC5kZWZhdWx0cyAgICAgICA9IHZhYXBpX2Vu Y29kZV9hdjFfZGVmYXVsdHMsCj4gKyAgICAucC5waXhfZm10cyA9IChjb25zdCBlbnVtIEFWUGl4 ZWxGb3JtYXRbXSkgewo+ICsgICAgICAgIEFWX1BJWF9GTVRfVkFBUEksCj4gKyAgICAgICAgQVZf UElYX0ZNVF9OT05FLAo+ICsgICAgfSwKPiArICAgIC5od19jb25maWdzICAgICA9IGZmX3ZhYXBp X2VuY29kZV9od19jb25maWdzLAo+ICsgICAgLnAud3JhcHBlcl9uYW1lID0gInZhYXBpIiwKPiAr fTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92ZXJzaW9uLmggYi9saWJhdmNvZGVjL3ZlcnNp b24uaAo+IGluZGV4IDI2ZWU0MWViMWYuLjczNWM4YjgxM2MgMTAwNjQ0Cj4gLS0tIGEvbGliYXZj b2RlYy92ZXJzaW9uLmgKPiArKysgYi9saWJhdmNvZGVjL3ZlcnNpb24uaAo+IEBAIC0yOSw3ICsy OSw3IEBACj4KPiAgI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKPgo+IC0jZGVmaW5lIExJQkFW Q09ERUNfVkVSU0lPTl9NSU5PUiAgMjYKPiArI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlO T1IgIDI3Cj4gICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JQ1JPIDEwMAo+Cj4gICNkZWZp bmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RFQ19WRVJT SU9OX01BSk9SLCBcCj4gLS0KPiAyLjI1LjEKPgoKVGhlIGNvZGUgbG9va3MgcmVhc29uYWJsZSB0 byBtZSwgYnV0IEkgbGFjayBoYXJkd2FyZSB0byBleGVyY2lzZSB0aGlzCmZ1bmN0aW9uYWxpdHku CgpBY2tlZC1ieTogTmVhbCBHb21wYSA8bmdvbXBhMTNAZ21haWwuY29tPgoKCgotLSAK55yf5a6f 44Gv44GE44Gk44KC5LiA44Gk77yBLyBBbHdheXMsIHRoZXJlJ3Mgb25seSBvbmUgdHJ1dGghCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGlu ayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1 YmplY3QgInVuc3Vic2NyaWJlIi4K