From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joseph Lo Subject: Re: [PATCH 5/8] memory: tegra: Add EMC scaling sequence code for Tegra210 Date: Tue, 2 Apr 2019 22:49:04 +0800 Message-ID: References: <20190325074523.26456-1-josephl@nvidia.com> <20190325074523.26456-6-josephl@nvidia.com> <2ff88007-8c37-3775-88a1-69d3a38c01a9@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <2ff88007-8c37-3775-88a1-69d3a38c01a9@gmail.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Dmitry Osipenko , Thierry Reding , Peter De Schrijver , Jonathan Hunter , Rob Herring , Stephen Boyd Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gNC8yLzE5IDc6MzYgUE0sIERtaXRyeSBPc2lwZW5rbyB3cm90ZToKPiAyNS4wMy4yMDE5IDEw OjQ1LCBKb3NlcGggTG8g0L/QuNGI0LXRgjoKPj4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGUgc2Vx dWVuY2UgZm9yIGNvbnRyb2xsaW5nIHRoZSByYXRlIGNoYW5naW5nIGZvcgo+PiBFTUMgZnJlcXVl bmN5IGFuZCB0aGUgZHluYW1pYyB0cmFpbmluZyBtZWNoYW5pc20gd2hlbiB0aGUgcmF0ZSByZWFj aGVzCj4+IHRoZSBoaWdoZXIgcmF0ZXMgb2YgRU1DIHJhdGUuCj4+Cj4+IEFuZCBoaXN0b3JpY2Fs bHkgdGhlcmUgaGF2ZSBiZWVuIGRpZmZlcmVudCBzZXF1ZW5jZXMgdG8gY2hhbmdlIHRoZSBFTUMK Pj4gY2xvY2suIFRoZSBzZXF1ZW5jZSB0byBiZSB1c2VkIGlzIHNwZWNpZmllZCBpbiB0aGUgc2Nh bGluZyBkYXRhLgo+PiBIb3dldmVyLCBmb3IgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgdXBzdHJl YW1pbmcgcGxhdGZvcm0sIG9ubHkgdGhlIG1vc3QKPj4gcmVjZW50IHNlcXVlbmNlIGlzIHVzZWQu IFNvIG9ubHkgc3VwcG9ydCB0aGF0IGluIHRoaXMgcGF0Y2guCj4+Cj4+IEJhc2VkIG9uIHRoZSB3 b3JrIG9mIFBldGVyIERlIFNjaHJpanZlciA8cGRlc2NocmlqdmVyQG52aWRpYS5jb20+Lgo+Pgo+ PiBTaWduZWQtb2ZmLWJ5OiBKb3NlcGggTG8gPGpvc2VwaGxAbnZpZGlhLmNvbT4KPj4gLS0tCj4+ ICAgZHJpdmVycy9tZW1vcnkvdGVncmEvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAgMiAr LQo+PiAgIGRyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMjEwLWVtYy1jYy1yMjEwMjEuYyB8IDE5 NjIgKysrKysrKysrKysrKysrKysKPj4gICBkcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTIxMC1l bWMtcmVnLmggICAgICAgfCAgMTM0ICsrCj4+ICAgZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmEy MTAtZW1jLmMgICAgICAgICAgIHwgICAgNSArCj4+ICAgNCBmaWxlcyBjaGFuZ2VkLCAyMTAyIGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZW1vcnkvdGVncmEvdGVncmEyMTAtZW1jLWNjLXIyMTAyMS5jCj4+Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lbW9yeS90ZWdyYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL01h a2VmaWxlCj4+IGluZGV4IDM2YTgzNTYyMGJiZC4uZGNjMjQ1YjJlZjQ1IDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL21lbW9yeS90ZWdyYS9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL21lbW9yeS90 ZWdyYS9NYWtlZmlsZQo+PiBAQCAtMTIsNSArMTIsNSBAQCBvYmotJChDT05GSUdfVEVHUkFfTUMp ICs9IHRlZ3JhLW1jLm8KPj4gICAKPj4gICBvYmotJChDT05GSUdfVEVHUkEyMF9FTUMpICArPSB0 ZWdyYTIwLWVtYy5vCj4+ICAgb2JqLSQoQ09ORklHX1RFR1JBMTI0X0VNQykgKz0gdGVncmExMjQt ZW1jLm8KPj4gLW9iai0kKENPTkZJR19URUdSQTIxMF9FTUMpICs9IHRlZ3JhMjEwLWVtYy5vIHRl Z3JhMjEwLWR0LXBhcnNlLm8KPj4gK29iai0kKENPTkZJR19URUdSQTIxMF9FTUMpICs9IHRlZ3Jh MjEwLWVtYy5vIHRlZ3JhMjEwLWR0LXBhcnNlLm8gdGVncmEyMTAtZW1jLWNjLXIyMTAyMS5vCj4+ ICAgb2JqLSQoQ09ORklHX0FSQ0hfVEVHUkFfMTg2X1NPQykgKz0gdGVncmExODYubwo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmEyMTAtZW1jLWNjLXIyMTAyMS5jIGIv ZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmEyMTAtZW1jLWNjLXIyMTAyMS5jCj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjU3N2E4YzNhYTk1Cj4+IC0tLSAv ZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmEyMTAtZW1jLWNjLXIy MTAyMS5jCj4+IEBAIC0wLDAgKzEsMTk2MiBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOSwgTlZJRElB IENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqLwo+PiArCj4+ICsjaW5j bHVkZSA8bGludXgva2VybmVsLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVkZSA8c29jL3RlZ3JhL21jLmg+Cj4+ICsKPj4gKyNp bmNsdWRlICJtYy5oIgo+PiArI2luY2x1ZGUgInRlZ3JhMjEwLWVtYy1yZWcuaCIKPj4gKwo+PiAr I2RlZmluZSBEVkZTX0NMT0NLX0NIQU5HRV9WRVJTSU9OCTIxMDIxCj4+ICsjZGVmaW5lIEVNQ19Q UkVMT0NLX1ZFUlNJT04JCTIxMDEKPj4gKwo+PiArI2RlZmluZSBlbWNfY2NfZGJnKHQsIC4uLikg cHJfZGVidWcoX19WQV9BUkdTX18pCj4+ICsKPj4gKy8qCj4+ICsgKiBFbmFibGUgZmxhZ3MgZm9y IHNwZWNpZnlpbmcgdmVyYm9zaXR5Lgo+PiArICovCj4+ICsjZGVmaW5lIElORk8gICAgICAgICAg ICAoMSA8PCAwKQo+PiArI2RlZmluZSBTVEVQUyAgICAgICAgICAgKDEgPDwgMSkKPj4gKyNkZWZp bmUgU1VCX1NURVBTICAgICAgICgxIDw8IDIpCj4+ICsjZGVmaW5lIFBSRUxPQ0sgICAgICAgICAo MSA8PCAzKQo+PiArI2RlZmluZSBQUkVMT0NLX1NURVBTICAgKDEgPDwgNCkKPj4gKyNkZWZpbmUg QUNUSVZFX0VOICAgICAgICgxIDw8IDUpCj4+ICsjZGVmaW5lIFBSQU1QX1VQICAgICAgICAoMSA8 PCA2KQo+PiArI2RlZmluZSBQUkFNUF9ETiAgICAgICAgKDEgPDwgNykKPj4gKyNkZWZpbmUgRU1B X1dSSVRFUyAgICAgICgxIDw8IDEwKQo+PiArI2RlZmluZSBFTUFfVVBEQVRFUyAgICAgKDEgPDwg MTEpCj4+ICsjZGVmaW5lIFBFUl9UUkFJTiAgICAgICAoMSA8PCAxNikKPj4gKyNkZWZpbmUgQ0Nf UFJJTlQgICAgICAgICgxIDw8IDE3KQo+PiArI2RlZmluZSBDQ0ZJRk8gICAgICAgICAgKDEgPDwg MjkpCj4+ICsjZGVmaW5lIFJFR1MgICAgICAgICAgICAoMSA8PCAzMCkKPj4gKyNkZWZpbmUgUkVH X0xJU1RTICAgICAgICgxIDw8IDMxKQo+PiArCj4+ICtlbnVtIHsKPj4gKwlEVkZTX1NFUVVFTkNF ID0gMSwKPj4gKwlXUklURV9UUkFJTklOR19TRVFVRU5DRSA9IDIsCj4+ICsJUEVSSU9ESUNfVFJB SU5JTkdfU0VRVUVOQ0UgPSAzLAo+PiArCURWRlNfUFQxID0gMTAsCj4+ICsJRFZGU19VUERBVEUg PSAxMSwKPj4gKwlUUkFJTklOR19QVDEgPSAxMiwKPj4gKwlUUkFJTklOR19VUERBVEUgPSAxMywK Pj4gKwlQRVJJT0RJQ19UUkFJTklOR19VUERBVEUgPSAxNAo+PiArfTsKPj4gKwo+PiArLyoKPj4g KyAqIFBURlYgZGVmaW5lcyAtIGJhc2ljYWxseSBqdXN0IGluZGV4ZXMgaW50byB0aGUgcGVyIHRh YmxlIFBURlYgYXJyYXkuCj4+ICsgKi8KPj4gKyNkZWZpbmUgUFRGVl9EUVNPU0NfTU9WQVZHX0Mw RDBVMF9JTkRFWAkJMAo+PiArI2RlZmluZSBQVEZWX0RRU09TQ19NT1ZBVkdfQzBEMFUxX0lOREVY CQkxCj4+ICsjZGVmaW5lIFBURlZfRFFTT1NDX01PVkFWR19DMEQxVTBfSU5ERVgJCTIKPj4gKyNk ZWZpbmUgUFRGVl9EUVNPU0NfTU9WQVZHX0MwRDFVMV9JTkRFWAkJMwo+PiArI2RlZmluZSBQVEZW X0RRU09TQ19NT1ZBVkdfQzFEMFUwX0lOREVYCQk0Cj4+ICsjZGVmaW5lIFBURlZfRFFTT1NDX01P VkFWR19DMUQwVTFfSU5ERVgJCTUKPj4gKyNkZWZpbmUgUFRGVl9EUVNPU0NfTU9WQVZHX0MxRDFV MF9JTkRFWAkJNgo+PiArI2RlZmluZSBQVEZWX0RRU09TQ19NT1ZBVkdfQzFEMVUxX0lOREVYCQk3 Cj4+ICsjZGVmaW5lIFBURlZfRFZGU19TQU1QTEVTX0lOREVYCQkJOQo+PiArI2RlZmluZSBQVEZW X01PVkFWR19XRUlHSFRfSU5ERVgJCTEwCj4+ICsjZGVmaW5lIFBURlZfQ09ORklHX0NUUkxfSU5E RVgJCQkxMQo+PiArCj4+ICsjZGVmaW5lIFBURlZfQ09ORklHX0NUUkxfVVNFX1BSRVZJT1VTX0VN QQkoMSA8PCAwKQo+PiArCj4+ICsvKgo+PiArICogRG8gYXJpdGhtZXRpYyBpbiBmaXhlZCBwb2lu dC4KPj4gKyAqLwo+PiArI2RlZmluZSBNT1ZBVkdfUFJFQ0lTSU9OX0ZBQ1RPUgkJMTAwCj4+ICsK Pj4gKy8qCj4+ICsgKiBUaGUgZGl2aXNpb24gcG9ydGlvbiBvZiB0aGUgYXZlcmFnZSBvcGVyYXRp b24uCj4+ICsgKi8KPj4gKyNkZWZpbmUgX19BVkVSQUdFX1BURlYoZGV2KQkJCQkJCVwKPj4gKwko eyBuZXh0X3RpbWluZy0+cHRmdl9saXN0W1BURlZfRFFTT1NDX01PVkFWR18gIyMgZGV2ICMjIF9J TkRFWF0gPSBcCj4+ICsJICAgbmV4dF90aW1pbmctPnB0ZnZfbGlzdFtQVEZWX0RRU09TQ19NT1ZB VkdfICMjIGRldiAjIyBfSU5ERVhdIC8gXAo+PiArCSAgIG5leHRfdGltaW5nLT5wdGZ2X2xpc3Rb UFRGVl9EVkZTX1NBTVBMRVNfSU5ERVhdOyB9KQo+PiArCj4+ICsvKgo+PiArICogQ29udmVydCB2 YWwgdG8gZml4ZWQgcG9pbnQgYW5kIGFkZCBpdCB0byB0aGUgdGVtcG9yYXJ5IGF2ZXJhZ2UuCj4+ ICsgKi8KPj4gKyNkZWZpbmUgX19JTkNSRU1FTlRfUFRGVihkZXYsIHZhbCkJCQkJCVwKPj4gKwko eyBuZXh0X3RpbWluZy0+cHRmdl9saXN0W1BURlZfRFFTT1NDX01PVkFWR18gIyMgZGV2ICMjIF9J TkRFWF0gKz0gXAo+PiArCSAgICgodmFsKSAqIE1PVkFWR19QUkVDSVNJT05fRkFDVE9SKTsgfSkK Pj4gKwo+PiArLyoKPj4gKyAqIENvbnZlcnQgYSBtb3ZpbmcgYXZlcmFnZSBiYWNrIHRvIGludGVn cmFsIGZvcm0gYW5kIHJldHVybiB0aGUgdmFsdWUuCj4+ICsgKi8KPj4gKyNkZWZpbmUgX19NT1ZB VkdfQUModGltaW5nLCBkZXYpCQkJCQlcCj4+ICsJKCh0aW1pbmcpLT5wdGZ2X2xpc3RbUFRGVl9E UVNPU0NfTU9WQVZHXyAjIyBkZXYgIyMgX0lOREVYXSAvCVwKPj4gKwkgTU9WQVZHX1BSRUNJU0lP Tl9GQUNUT1IpCj4+ICsKPj4gKy8qIFdlaWdodGVkIHVwZGF0ZS4gKi8KPj4gKyNkZWZpbmUgX19X RUlHSFRFRF9VUERBVEVfUFRGVihkZXYsIG52YWwpCQkJCVwKPj4gKwlkbyB7CQkJCQkJCQlcCj4+ ICsJCWludCB3ID0gUFRGVl9NT1ZBVkdfV0VJR0hUX0lOREVYOwkJCVwKPj4gKwkJaW50IGRxcyA9 IFBURlZfRFFTT1NDX01PVkFWR18gIyMgZGV2ICMjIF9JTkRFWDsJCVwKPj4gKwkJCQkJCQkJCVwK Pj4gKwkJbmV4dF90aW1pbmctPnB0ZnZfbGlzdFtkcXNdID0JCQkJXAo+PiArCQkJKChudmFsICog TU9WQVZHX1BSRUNJU0lPTl9GQUNUT1IpICsJCVwKPj4gKwkJCSAobmV4dF90aW1pbmctPnB0ZnZf bGlzdFtkcXNdICoJCQlcCj4+ICsJCQkgIG5leHRfdGltaW5nLT5wdGZ2X2xpc3Rbd10pKSAvCQkJ XAo+PiArCQkJKG5leHRfdGltaW5nLT5wdGZ2X2xpc3Rbd10gKyAxKTsJCVwKPj4gKwkJCQkJCQkJ CVwKPj4gKwkJZW1jX2NjX2RiZyhFTUFfVVBEQVRFUywgIiVzOiAocz0ldSkgRU1BOiAldVxuIiwJ CVwKPj4gKwkJCSAgIF9fc3RyaW5naWZ5KGRldiksIG52YWwsCQkJXAo+PiArCQkJICAgbmV4dF90 aW1pbmctPnB0ZnZfbGlzdFtkcXNdKTsJCVwKPj4gKwl9IHdoaWxlICgwKQo+PiArCj4+ICsvKiBB Y2Nlc3MgYSBwYXJ0aWN1bGFyIGF2ZXJhZ2UuICovCj4+ICsjZGVmaW5lIF9fTU9WQVZHKHRpbWlu ZywgZGV2KSAgICAgICAgICAgICAgICAgICAgICBcCj4+ICsJKCh0aW1pbmcpLT5wdGZ2X2xpc3Rb UFRGVl9EUVNPU0NfTU9WQVZHXyAjIyBkZXYgIyMgX0lOREVYXSkKPj4gKwo+PiArc3RhdGljIHUz MiB1cGRhdGVfY2xvY2tfdHJlZV9kZWxheShzdHJ1Y3QgdGVncmFfZW1jICplbWMsCj4+ICsJCQkJ ICAgdTMyIGRyYW1fZGV2X251bSwgdTMyIGNoYW5uZWxfbW9kZSwgaW50IHR5cGUpCj4+ICt7Cj4+ ICsJdTMyIG1ycl9yZXEgPSAwLCBtcnJfZGF0YSA9IDA7Cj4+ICsJdTMyIHRlbXAwXzAgPSAwLCB0 ZW1wMF8xID0gMCwgdGVtcDFfMCA9IDAsIHRlbXAxXzEgPSAwOwo+PiArCXMzMiB0ZGVsID0gMCwg dG1kZWwgPSAwLCBhZGVsID0gMDsKPj4gKwl1MzIgY3ZhbCA9IDA7Cj4+ICsJc3RydWN0IGVtY190 YWJsZSAqbGFzdF90aW1pbmcgPSBlbWMtPmN1cnJlbnRfdGltaW5nOwo+PiArCXN0cnVjdCBlbWNf dGFibGUgKm5leHRfdGltaW5nID0gZW1jLT5uZXh0X3RpbWluZzsKPj4gKwl1MzIgbGFzdF90aW1p bmdfcmF0ZV9taHogPSBsYXN0X3RpbWluZy0+cmF0ZSAvIDEwMDA7Cj4+ICsJdTMyIG5leHRfdGlt aW5nX3JhdGVfbWh6ID0gbmV4dF90aW1pbmctPnJhdGUgLyAxMDAwOwo+PiArCWludCBkdmZzX3B0 MSA9IHR5cGUgPT0gRFZGU19QVDE7Cj4+ICsJaW50IGR2ZnNfdXBkYXRlID0gdHlwZSA9PSBEVkZT X1VQREFURTsKPj4gKwlpbnQgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlID0gdHlwZSA9PSBQRVJJ T0RJQ19UUkFJTklOR19VUERBVEU7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIERldjAgTVNCLgo+PiAr CSAqLwo+PiArCWlmIChkdmZzX3B0MSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpIHsKPj4g KwkJbXJyX3JlcSA9ICgyIDw8IEVNQ19NUlJfREVWX1NFTF9TSElGVCkgfAo+PiArCQkJKDE5IDw8 IEVNQ19NUlJfTUFfU0hJRlQpOwo+PiArCQllbWNfd3JpdGVsKGVtYywgbXJyX3JlcSwgRU1DX01S Uik7Cj4+ICsKPj4gKwkJV0FSTih3YWl0X2Zvcl91cGRhdGUoZW1jLCBFTUNfRU1DX1NUQVRVUywK Pj4gKwkJCQkgICAgIEVNQ19FTUNfU1RBVFVTX01SUl9ESVZMRCwgMSwgUkVHX0VNQyksCj4+ICsJ CSAgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNUlIgMTkgKGNoPTApXG4iKTsKPj4gKwkJaWYg KGNoYW5uZWxfbW9kZSA9PSBEVUFMX0NIQU5ORUwpCj4+ICsJCQlXQVJOKHdhaXRfZm9yX3VwZGF0 ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+PiArCQkJCQkgICAgIEVNQ19FTUNfU1RBVFVTX01SUl9E SVZMRCwgMSwKPj4gKwkJCQkJICAgICBSRUdfRU1DMSksCj4+ICsJCQkgICAgICJUaW1lZCBvdXQg d2FpdGluZyBmb3IgTVJSIDE5IChjaD0xKVxuIik7Cj4+ICsKPj4gKwkJbXJyX2RhdGEgPSAoZW1j X3JlYWRsKGVtYywgRU1DX01SUikgJiBFTUNfTVJSX0RBVEFfTUFTSykgPDwKPj4gKwkJCSAgIEVN Q19NUlJfREFUQV9TSElGVDsKPj4gKwo+PiArCQl0ZW1wMF8wID0gKG1ycl9kYXRhICYgMHhmZikg PDwgODsKPj4gKwkJdGVtcDBfMSA9IG1ycl9kYXRhICYgMHhmZjAwOwo+PiArCj4+ICsJCWlmIChj aGFubmVsX21vZGUgPT0gRFVBTF9DSEFOTkVMKSB7Cj4+ICsJCQltcnJfZGF0YSA9IChlbWMxX3Jl YWRsKGVtYywgRU1DX01SUikgJgo+PiArCQkJCSAgICBFTUNfTVJSX0RBVEFfTUFTSykgPDwKPj4g KwkJCQkgICBFTUNfTVJSX0RBVEFfU0hJRlQ7Cj4+ICsJCQl0ZW1wMV8wID0gKG1ycl9kYXRhICYg MHhmZikgPDwgODsKPj4gKwkJCXRlbXAxXzEgPSBtcnJfZGF0YSAmIDB4ZmYwMDsKPj4gKwkJfQo+ PiArCj4+ICsJCS8qCj4+ICsJCSAqIERldjAgTFNCLgo+PiArCQkgKi8KPj4gKwkJbXJyX3JlcSA9 IChtcnJfcmVxICYgfkVNQ19NUlJfTUFfTUFTSykgfAo+PiArCQkJICAoMTggPDwgRU1DX01SUl9N QV9TSElGVCk7Cj4+ICsJCWVtY193cml0ZWwoZW1jLCBtcnJfcmVxLCBFTUNfTVJSKTsKPj4gKwo+ PiArCQlXQVJOKHdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+PiArCQkJCSAg ICAgRU1DX0VNQ19TVEFUVVNfTVJSX0RJVkxELCAxLCBSRUdfRU1DKSwKPj4gKwkJICAgICAiVGlt ZWQgb3V0IHdhaXRpbmcgZm9yIE1SUiAxOCAoY2g9MClcbiIpOwo+PiArCQlpZiAoY2hhbm5lbF9t b2RlID09IERVQUxfQ0hBTk5FTCkKPj4gKwkJCVdBUk4od2FpdF9mb3JfdXBkYXRlKGVtYywgRU1D X0VNQ19TVEFUVVMsCj4+ICsJCQkJCSAgICAgRU1DX0VNQ19TVEFUVVNfTVJSX0RJVkxELCAxLAo+ PiArCQkJCQkgICAgIFJFR19FTUMxKSwKPj4gKwkJCSAgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZv ciBNUlIgMTggKGNoPTEpXG4iKTsKPj4gKwo+PiArCQltcnJfZGF0YSA9IChlbWNfcmVhZGwoZW1j LCBFTUNfTVJSKSAmIEVNQ19NUlJfREFUQV9NQVNLKSA8PAo+PiArCQkJICAgRU1DX01SUl9EQVRB X1NISUZUOwo+PiArCj4+ICsJCXRlbXAwXzAgfD0gbXJyX2RhdGEgJiAweGZmOwo+PiArCQl0ZW1w MF8xIHw9IChtcnJfZGF0YSAmIDB4ZmYwMCkgPj4gODsKPj4gKwo+PiArCQlpZiAoY2hhbm5lbF9t b2RlID09IERVQUxfQ0hBTk5FTCkgewo+PiArCQkJbXJyX2RhdGEgPSAoZW1jMV9yZWFkbChlbWMs IEVNQ19NUlIpICYKPj4gKwkJCQkgICAgRU1DX01SUl9EQVRBX01BU0spIDw8Cj4+ICsJCQkJICAg RU1DX01SUl9EQVRBX1NISUZUOwo+PiArCQkJdGVtcDFfMCB8PSAobXJyX2RhdGEgJiAweGZmKTsK Pj4gKwkJCXRlbXAxXzEgfD0gKG1ycl9kYXRhICYgMHhmZjAwKSA+PiA4Owo+PiArCQl9Cj4+ICsJ fQo+PiArCj4+ICsJaWYgKGR2ZnNfcHQxIHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPj4g KwkJY3ZhbCA9ICgxMDAwMDAwICogdGVncmEyMTBfYWN0dWFsX29zY19jbG9ja3MoCj4+ICsJCQkJ CWxhc3RfdGltaW5nLT5ydW5fY2xvY2tzKSkgLwo+PiArCQkgICAgICAgKGxhc3RfdGltaW5nX3Jh dGVfbWh6ICogMiAqIHRlbXAwXzApOwo+PiArCj4+ICsJaWYgKGR2ZnNfcHQxKQo+PiArCQlfX0lO Q1JFTUVOVF9QVEZWKEMwRDBVMCwgY3ZhbCk7Cj4+ICsJZWxzZSBpZiAoZHZmc191cGRhdGUpCj4+ ICsJCV9fQVZFUkFHRV9QVEZWKEMwRDBVMCk7Cj4+ICsJZWxzZSBpZiAocGVyaW9kaWNfdHJhaW5p bmdfdXBkYXRlKQo+PiArCQlfX1dFSUdIVEVEX1VQREFURV9QVEZWKEMwRDBVMCwgY3ZhbCk7Cj4+ ICsKPj4gKwlpZiAoZHZmc191cGRhdGUgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKSB7Cj4+ ICsJCXRkZWwgPSBuZXh0X3RpbWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzBkMHUwIC0KPj4g KwkJCV9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMEQwVTApOwo+PiArCQl0bWRlbCA9ICh0ZGVs IDwgMCkgPyAtMSAqIHRkZWwgOiB0ZGVsOwo+PiArCQlhZGVsID0gdG1kZWw7Cj4+ICsJCWlmICh0 bWRlbCAqIDEyOCAqIG5leHRfdGltaW5nX3JhdGVfbWh6IC8gMTAwMDAwMCA+Cj4+ICsJCSAgICBu ZXh0X3RpbWluZy0+dHJlZV9tYXJnaW4pCj4+ICsJCQluZXh0X3RpbWluZy0+Y3VycmVudF9kcmFt X2Nsa3RyZWVfYzBkMHUwID0KPj4gKwkJCQlfX01PVkFWR19BQyhuZXh0X3RpbWluZywgQzBEMFUw KTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoZHZmc19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBk YXRlKQo+PiArCQljdmFsID0gKDEwMDAwMDAgKiB0ZWdyYTIxMF9hY3R1YWxfb3NjX2Nsb2NrcygK Pj4gKwkJCQkJbGFzdF90aW1pbmctPnJ1bl9jbG9ja3MpKSAvCj4+ICsJCSAgICAgICAobGFzdF90 aW1pbmdfcmF0ZV9taHogKiAyICogdGVtcDBfMSk7Cj4+ICsKPj4gKwlpZiAoZHZmc19wdDEpCj4+ ICsJCV9fSU5DUkVNRU5UX1BURlYoQzBEMFUxLCBjdmFsKTsKPj4gKwllbHNlIGlmIChkdmZzX3Vw ZGF0ZSkKPj4gKwkJX19BVkVSQUdFX1BURlYoQzBEMFUxKTsKPj4gKwllbHNlIGlmIChwZXJpb2Rp Y190cmFpbmluZ191cGRhdGUpCj4+ICsJCV9fV0VJR0hURURfVVBEQVRFX1BURlYoQzBEMFUxLCBj dmFsKTsKPj4gKwo+PiArCWlmIChkdmZzX3VwZGF0ZSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRh dGUpIHsKPj4gKwkJdGRlbCA9IG5leHRfdGltaW5nLT5jdXJyZW50X2RyYW1fY2xrdHJlZV9jMGQw dTEgLQo+PiArCQkJX19NT1ZBVkdfQUMobmV4dF90aW1pbmcsIEMwRDBVMSk7Cj4+ICsJCXRtZGVs ID0gKHRkZWwgPCAwKSA/IC0xICogdGRlbCA6IHRkZWw7Cj4+ICsKPj4gKwkJaWYgKHRtZGVsID4g YWRlbCkKPj4gKwkJCWFkZWwgPSB0bWRlbDsKPj4gKwo+PiArCQlpZiAodG1kZWwgKiAxMjggKiBu ZXh0X3RpbWluZ19yYXRlX21oeiAvIDEwMDAwMDAgPgo+PiArCQkgICAgbmV4dF90aW1pbmctPnRy ZWVfbWFyZ2luKQo+PiArCQkJbmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9jbGt0cmVlX2MwZDB1 MSA9Cj4+ICsJCQkJX19NT1ZBVkdfQUMobmV4dF90aW1pbmcsIEMwRDBVMSk7Cj4+ICsJfQo+PiAr Cj4+ICsJaWYgKGNoYW5uZWxfbW9kZSA9PSBEVUFMX0NIQU5ORUwpIHsKPj4gKwkJaWYgKGR2ZnNf cHQxIHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPj4gKwkJCWN2YWwgPSAoMTAwMDAwMCAq IHRlZ3JhMjEwX2FjdHVhbF9vc2NfY2xvY2tzKAo+PiArCQkJCQkJbGFzdF90aW1pbmctPnJ1bl9j bG9ja3MpKSAvCj4+ICsJCQkgICAgICAgKGxhc3RfdGltaW5nX3JhdGVfbWh6ICogMiAqIHRlbXAx XzApOwo+PiArCQlpZiAoZHZmc19wdDEpCj4+ICsJCQlfX0lOQ1JFTUVOVF9QVEZWKEMxRDBVMCwg Y3ZhbCk7Cj4+ICsJCWVsc2UgaWYgKGR2ZnNfdXBkYXRlKQo+PiArCQkJX19BVkVSQUdFX1BURlYo QzFEMFUwKTsKPj4gKwkJZWxzZSBpZiAocGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKQo+PiArCQkJ X19XRUlHSFRFRF9VUERBVEVfUFRGVihDMUQwVTAsIGN2YWwpOwo+PiArCj4+ICsJCWlmIChkdmZz X3VwZGF0ZSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpIHsKPj4gKwkJCXRkZWwgPSBuZXh0 X3RpbWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzFkMHUwIC0KPj4gKwkJCQlfX01PVkFWR19B QyhuZXh0X3RpbWluZywgQzFEMFUwKTsKPj4gKwkJCXRtZGVsID0gKHRkZWwgPCAwKSA/IC0xICog dGRlbCA6IHRkZWw7Cj4+ICsKPj4gKwkJCWlmICh0bWRlbCA+IGFkZWwpCj4+ICsJCQkJYWRlbCA9 IHRtZGVsOwo+PiArCj4+ICsJCQlpZiAodG1kZWwgKiAxMjggKiBuZXh0X3RpbWluZ19yYXRlX21o eiAvIDEwMDAwMDAgPgo+PiArCQkJICAgIG5leHRfdGltaW5nLT50cmVlX21hcmdpbikKPj4gKwkJ CQluZXh0X3RpbWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzFkMHUwID0KPj4gKwkJCQkJX19N T1ZBVkdfQUMobmV4dF90aW1pbmcsIEMxRDBVMCk7Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAoZHZm c19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKQo+PiArCQkJY3ZhbCA9ICgxMDAwMDAw ICogdGVncmEyMTBfYWN0dWFsX29zY19jbG9ja3MoCj4+ICsJCQkJCQlsYXN0X3RpbWluZy0+cnVu X2Nsb2NrcykpIC8KPj4gKwkJCSAgICAgICAobGFzdF90aW1pbmdfcmF0ZV9taHogKiAyICogdGVt cDFfMSk7Cj4+ICsJCWlmIChkdmZzX3B0MSkKPj4gKwkJCV9fSU5DUkVNRU5UX1BURlYoQzFEMFUx LCBjdmFsKTsKPj4gKwkJZWxzZSBpZiAoZHZmc191cGRhdGUpCj4+ICsJCQlfX0FWRVJBR0VfUFRG VihDMUQwVTEpOwo+PiArCQllbHNlIGlmIChwZXJpb2RpY190cmFpbmluZ191cGRhdGUpCj4+ICsJ CQlfX1dFSUdIVEVEX1VQREFURV9QVEZWKEMxRDBVMSwgY3ZhbCk7Cj4+ICsKPj4gKwkJaWYgKGR2 ZnNfdXBkYXRlIHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkgewo+PiArCQkJdGRlbCA9IG5l eHRfdGltaW5nLT5jdXJyZW50X2RyYW1fY2xrdHJlZV9jMWQwdTEgLQo+PiArCQkJCV9fTU9WQVZH X0FDKG5leHRfdGltaW5nLCBDMUQwVTEpOwo+PiArCQkJdG1kZWwgPSAodGRlbCA8IDApID8gLTEg KiB0ZGVsIDogdGRlbDsKPj4gKwo+PiArCQkJaWYgKHRtZGVsID4gYWRlbCkKPj4gKwkJCQlhZGVs ID0gdG1kZWw7Cj4+ICsKPj4gKwkJCWlmICh0bWRlbCAqIDEyOCAqIG5leHRfdGltaW5nX3JhdGVf bWh6IC8gMTAwMDAwMCA+Cj4+ICsJCQkgICAgbmV4dF90aW1pbmctPnRyZWVfbWFyZ2luKQo+PiAr CQkJCW5leHRfdGltaW5nLT5jdXJyZW50X2RyYW1fY2xrdHJlZV9jMWQwdTEgPQo+PiArCQkJCQlf X01PVkFWR19BQyhuZXh0X3RpbWluZywgQzFEMFUxKTsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiAr CWlmIChlbWMtPmRyYW1fZGV2X251bSAhPSBUV09fUkFOSykKPj4gKwkJZ290byBkb25lOwo+PiAr Cj4+ICsJLyoKPj4gKwkgKiBEZXYxIE1TQi4KPj4gKwkgKi8KPj4gKwlpZiAoZHZmc19wdDEgfHwg cGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKSB7Cj4+ICsJCW1ycl9yZXEgPSAoMSA8PCBFTUNfTVJS X0RFVl9TRUxfU0hJRlQpIHwKPj4gKwkJCSAgKDE5IDw8IEVNQ19NUlJfTUFfU0hJRlQpOwo+PiAr CQllbWNfd3JpdGVsKGVtYywgbXJyX3JlcSwgRU1DX01SUik7Cj4+ICsKPj4gKwkJV0FSTih3YWl0 X2Zvcl91cGRhdGUoZW1jLCBFTUNfRU1DX1NUQVRVUywKPj4gKwkJCQkgICAgIEVNQ19FTUNfU1RB VFVTX01SUl9ESVZMRCwgMSwgUkVHX0VNQyksCj4+ICsJCSAgICAgIlRpbWVkIG91dCB3YWl0aW5n IGZvciBNUlIgMTkgKGNoPTApXG4iKTsKPj4gKwkJaWYgKGNoYW5uZWxfbW9kZSA9PSBEVUFMX0NI QU5ORUwpCj4+ICsJCQlXQVJOKHdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+ PiArCQkJCQkgICAgIEVNQ19FTUNfU1RBVFVTX01SUl9ESVZMRCwgMSwKPj4gKwkJCQkJICAgICBS RUdfRU1DMSksCj4+ICsJCQkgICAgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTVJSIDE5IChjaD0x KVxuIik7Cj4+ICsKPj4gKwkJbXJyX2RhdGEgPSAoZW1jX3JlYWRsKGVtYywgRU1DX01SUikgJiBF TUNfTVJSX0RBVEFfTUFTSykgPDwKPj4gKwkJCSAgIEVNQ19NUlJfREFUQV9TSElGVDsKPj4gKwo+ PiArCQl0ZW1wMF8wID0gKG1ycl9kYXRhICYgMHhmZikgPDwgODsKPj4gKwkJdGVtcDBfMSA9IG1y cl9kYXRhICYgMHhmZjAwOwo+PiArCj4+ICsJCWlmIChjaGFubmVsX21vZGUgPT0gRFVBTF9DSEFO TkVMKSB7Cj4+ICsJCQltcnJfZGF0YSA9IChlbWMxX3JlYWRsKGVtYywgRU1DX01SUikgJgo+PiAr CQkJCSAgICBFTUNfTVJSX0RBVEFfTUFTSykgPDwKPj4gKwkJCQkgICBFTUNfTVJSX0RBVEFfU0hJ RlQ7Cj4+ICsJCQl0ZW1wMV8wID0gKG1ycl9kYXRhICYgMHhmZikgPDwgODsKPj4gKwkJCXRlbXAx XzEgPSBtcnJfZGF0YSAmIDB4ZmYwMDsKPj4gKwkJfQo+PiArCj4+ICsJCS8qCj4+ICsJCSAqIERl djEgTFNCLgo+PiArCQkgKi8KPj4gKwkJbXJyX3JlcSA9IChtcnJfcmVxICYgfkVNQ19NUlJfTUFf TUFTSykgfAo+PiArCQkJICAoMTggPDwgRU1DX01SUl9NQV9TSElGVCk7Cj4+ICsJCWVtY193cml0 ZWwoZW1jLCBtcnJfcmVxLCBFTUNfTVJSKTsKPj4gKwo+PiArCQlXQVJOKHdhaXRfZm9yX3VwZGF0 ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+PiArCQkJCSAgICAgRU1DX0VNQ19TVEFUVVNfTVJSX0RJ VkxELCAxLCBSRUdfRU1DKSwKPj4gKwkJICAgICAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1SUiAx OCAoY2g9MClcbiIpOwo+PiArCQlpZiAoY2hhbm5lbF9tb2RlID09IERVQUxfQ0hBTk5FTCkKPj4g KwkJCVdBUk4od2FpdF9mb3JfdXBkYXRlKGVtYywgRU1DX0VNQ19TVEFUVVMsCj4+ICsJCQkJCSAg ICAgRU1DX0VNQ19TVEFUVVNfTVJSX0RJVkxELCAxLAo+PiArCQkJCQkgICAgIFJFR19FTUMxKSwK Pj4gKwkJCSAgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNUlIgMTggKGNoPTEpXG4iKTsKPj4g Kwo+PiArCQltcnJfZGF0YSA9IChlbWNfcmVhZGwoZW1jLCBFTUNfTVJSKSAmIEVNQ19NUlJfREFU QV9NQVNLKSA8PAo+PiArCQkJICAgRU1DX01SUl9EQVRBX1NISUZUOwo+PiArCj4+ICsJCXRlbXAw XzAgfD0gbXJyX2RhdGEgJiAweGZmOwo+PiArCQl0ZW1wMF8xIHw9IChtcnJfZGF0YSAmIDB4ZmYw MCkgPj4gODsKPj4gKwo+PiArCQlpZiAoY2hhbm5lbF9tb2RlID09IERVQUxfQ0hBTk5FTCkgewo+ PiArCQkJbXJyX2RhdGEgPSAoZW1jMV9yZWFkbChlbWMsIEVNQ19NUlIpICYKPj4gKwkJCQkgICAg RU1DX01SUl9EQVRBX01BU0spIDw8Cj4+ICsJCQkJICAgRU1DX01SUl9EQVRBX1NISUZUOwo+PiAr CQkJdGVtcDFfMCB8PSAobXJyX2RhdGEgJiAweGZmKTsKPj4gKwkJCXRlbXAxXzEgfD0gKG1ycl9k YXRhICYgMHhmZjAwKSA+PiA4Owo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGR2ZnNfcHQx IHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPj4gKwkJY3ZhbCA9ICgxMDAwMDAwICogdGVn cmEyMTBfYWN0dWFsX29zY19jbG9ja3MoCj4+ICsJCQkJCWxhc3RfdGltaW5nLT5ydW5fY2xvY2tz KSkgLwo+PiArCQkgICAgICAgKGxhc3RfdGltaW5nX3JhdGVfbWh6ICogMiAqIHRlbXAwXzApOwo+ PiArCj4+ICsJaWYgKGR2ZnNfcHQxKQo+PiArCQlfX0lOQ1JFTUVOVF9QVEZWKEMwRDFVMCwgY3Zh bCk7Cj4+ICsJZWxzZSBpZiAoZHZmc191cGRhdGUpCj4+ICsJCV9fQVZFUkFHRV9QVEZWKEMwRDFV MCk7Cj4+ICsJZWxzZSBpZiAocGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKQo+PiArCQlfX1dFSUdI VEVEX1VQREFURV9QVEZWKEMwRDFVMCwgY3ZhbCk7Cj4+ICsKPj4gKwlpZiAoZHZmc191cGRhdGUg fHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKSB7Cj4+ICsJCXRkZWwgPSBuZXh0X3RpbWluZy0+ Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzBkMXUwIC0KPj4gKwkJICAgICAgIF9fTU9WQVZHX0FDKG5l eHRfdGltaW5nLCBDMEQxVTApOwo+PiArCQl0bWRlbCA9ICh0ZGVsIDwgMCkgPyAtMSAqIHRkZWwg OiB0ZGVsOwo+PiArCQlpZiAodG1kZWwgPiBhZGVsKQo+PiArCQkJYWRlbCA9IHRtZGVsOwo+PiAr Cj4+ICsJCWlmICh0bWRlbCAqIDEyOCAqIG5leHRfdGltaW5nX3JhdGVfbWh6IC8gMTAwMDAwMCA+ Cj4+ICsJCSAgICBuZXh0X3RpbWluZy0+dHJlZV9tYXJnaW4pCj4+ICsJCQluZXh0X3RpbWluZy0+ Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzBkMXUwID0KPj4gKwkJCQlfX01PVkFWR19BQyhuZXh0X3Rp bWluZywgQzBEMVUwKTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoZHZmc19wdDEgfHwgcGVyaW9kaWNf dHJhaW5pbmdfdXBkYXRlKQo+PiArCQljdmFsID0gKDEwMDAwMDAgKiB0ZWdyYTIxMF9hY3R1YWxf b3NjX2Nsb2NrcygKPj4gKwkJCQkJbGFzdF90aW1pbmctPnJ1bl9jbG9ja3MpKSAvCj4+ICsJCSAg ICAgICAobGFzdF90aW1pbmdfcmF0ZV9taHogKiAyICogdGVtcDBfMSk7Cj4+ICsKPj4gKwlpZiAo ZHZmc19wdDEpCj4+ICsJCV9fSU5DUkVNRU5UX1BURlYoQzBEMVUxLCBjdmFsKTsKPj4gKwllbHNl IGlmIChkdmZzX3VwZGF0ZSkKPj4gKwkJX19BVkVSQUdFX1BURlYoQzBEMVUxKTsKPj4gKwllbHNl IGlmIChwZXJpb2RpY190cmFpbmluZ191cGRhdGUpCj4+ICsJCV9fV0VJR0hURURfVVBEQVRFX1BU RlYoQzBEMVUxLCBjdmFsKTsKPj4gKwo+PiArCWlmIChkdmZzX3VwZGF0ZSB8fCBwZXJpb2RpY190 cmFpbmluZ191cGRhdGUpIHsKPj4gKwkJdGRlbCA9IG5leHRfdGltaW5nLT5jdXJyZW50X2RyYW1f Y2xrdHJlZV9jMGQxdTEgLQo+PiArCQkgICAgICAgX19NT1ZBVkdfQUMobmV4dF90aW1pbmcsIEMw RDFVMSk7Cj4+ICsJCXRtZGVsID0gKHRkZWwgPCAwKSA/IC0xICogdGRlbCA6IHRkZWw7Cj4+ICsJ CWlmICh0bWRlbCA+IGFkZWwpCj4+ICsJCQlhZGVsID0gdG1kZWw7Cj4+ICsKPj4gKwkJaWYgKHRt ZGVsICogMTI4ICogbmV4dF90aW1pbmdfcmF0ZV9taHogLyAxMDAwMDAwID4KPj4gKwkJICAgIG5l eHRfdGltaW5nLT50cmVlX21hcmdpbikKPj4gKwkJCW5leHRfdGltaW5nLT5jdXJyZW50X2RyYW1f Y2xrdHJlZV9jMGQxdTEgPQo+PiArCQkJCV9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMEQxVTEp Owo+PiArCX0KPj4gKwo+PiArCWlmIChjaGFubmVsX21vZGUgPT0gRFVBTF9DSEFOTkVMKSB7Cj4+ ICsJCWlmIChkdmZzX3B0MSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpCj4+ICsJCQljdmFs ID0gKDEwMDAwMDAgKiB0ZWdyYTIxMF9hY3R1YWxfb3NjX2Nsb2NrcygKPj4gKwkJCQkJCWxhc3Rf dGltaW5nLT5ydW5fY2xvY2tzKSkgLwo+PiArCQkJICAgICAgIChsYXN0X3RpbWluZ19yYXRlX21o eiAqIDIgKiB0ZW1wMV8wKTsKPj4gKwo+PiArCQlpZiAoZHZmc19wdDEpCj4+ICsJCQlfX0lOQ1JF TUVOVF9QVEZWKEMxRDFVMCwgY3ZhbCk7Cj4+ICsJCWVsc2UgaWYgKGR2ZnNfdXBkYXRlKQo+PiAr CQkJX19BVkVSQUdFX1BURlYoQzFEMVUwKTsKPj4gKwkJZWxzZSBpZiAocGVyaW9kaWNfdHJhaW5p bmdfdXBkYXRlKQo+PiArCQkJX19XRUlHSFRFRF9VUERBVEVfUFRGVihDMUQxVTAsIGN2YWwpOwo+ PiArCj4+ICsJCWlmIChkdmZzX3VwZGF0ZSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpIHsK Pj4gKwkJCXRkZWwgPSBuZXh0X3RpbWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzFkMXUwIC0K Pj4gKwkJCSAgICAgICBfX01PVkFWR19BQyhuZXh0X3RpbWluZywgQzFEMVUwKTsKPj4gKwkJCXRt ZGVsID0gKHRkZWwgPCAwKSA/IC0xICogdGRlbCA6IHRkZWw7Cj4+ICsJCQlpZiAodG1kZWwgPiBh ZGVsKQo+PiArCQkJCWFkZWwgPSB0bWRlbDsKPj4gKwo+PiArCQkJaWYgKHRtZGVsICogMTI4ICog bmV4dF90aW1pbmdfcmF0ZV9taHogLyAxMDAwMDAwID4KPj4gKwkJCSAgICBuZXh0X3RpbWluZy0+ dHJlZV9tYXJnaW4pCj4+ICsJCQkJbmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9jbGt0cmVlX2Mx ZDF1MCA9Cj4+ICsJCQkJCV9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMUQxVTApOwo+PiArCQl9 Cj4+ICsKPj4gKwkJaWYgKGR2ZnNfcHQxIHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPj4g KwkJCWN2YWwgPSAoMTAwMDAwMCAqIHRlZ3JhMjEwX2FjdHVhbF9vc2NfY2xvY2tzKAo+PiArCQkJ CQkJbGFzdF90aW1pbmctPnJ1bl9jbG9ja3MpKSAvCj4+ICsJCQkgICAgICAgKGxhc3RfdGltaW5n X3JhdGVfbWh6ICogMiAqIHRlbXAxXzEpOwo+PiArCj4+ICsJCWlmIChkdmZzX3B0MSkKPj4gKwkJ CV9fSU5DUkVNRU5UX1BURlYoQzFEMVUxLCBjdmFsKTsKPj4gKwkJZWxzZSBpZiAoZHZmc191cGRh dGUpCj4+ICsJCQlfX0FWRVJBR0VfUFRGVihDMUQxVTEpOwo+PiArCQllbHNlIGlmIChwZXJpb2Rp Y190cmFpbmluZ191cGRhdGUpCj4+ICsJCQlfX1dFSUdIVEVEX1VQREFURV9QVEZWKEMxRDFVMSwg Y3ZhbCk7Cj4+ICsKPj4gKwkJaWYgKGR2ZnNfdXBkYXRlIHx8IHBlcmlvZGljX3RyYWluaW5nX3Vw ZGF0ZSkgewo+PiArCQkJdGRlbCA9IG5leHRfdGltaW5nLT5jdXJyZW50X2RyYW1fY2xrdHJlZV9j MWQxdTEgLQo+PiArCQkJICAgICAgIF9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMUQxVTEpOwo+ PiArCQkJdG1kZWwgPSAodGRlbCA8IDApID8gLTEgKiB0ZGVsIDogdGRlbDsKPj4gKwkJCWlmICh0 bWRlbCA+IGFkZWwpCj4+ICsJCQkJYWRlbCA9IHRtZGVsOwo+PiArCj4+ICsJCQlpZiAodG1kZWwg KiAxMjggKiBuZXh0X3RpbWluZ19yYXRlX21oeiAvIDEwMDAwMDAgPgo+PiArCQkJICAgIG5leHRf dGltaW5nLT50cmVlX21hcmdpbikKPj4gKwkJCQluZXh0X3RpbWluZy0+Y3VycmVudF9kcmFtX2Ns a3RyZWVfYzFkMXUxID0KPj4gKwkJCQkJX19NT1ZBVkdfQUMobmV4dF90aW1pbmcsIEMxRDFVMSk7 Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gK2RvbmU6Cj4+ICsJcmV0dXJuIGFkZWw7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB1MzIgcGVyaW9kaWNfY29tcGVuc2F0aW9uX2hhbmRsZXIoc3RydWN0IHRl Z3JhX2VtYyAqZW1jLCB1MzIgdHlwZSwKPj4gKwkJCQkJIHUzMiBkcmFtX2Rldl9udW0sCj4+ICsJ CQkJCSB1MzIgY2hhbm5lbF9tb2RlLAo+PiArCQkJCQkgc3RydWN0IGVtY190YWJsZSAqbGFzdF90 aW1pbmcsCj4+ICsJCQkJCSBzdHJ1Y3QgZW1jX3RhYmxlICpuZXh0X3RpbWluZykKPj4gK3sKPj4g KyNkZWZpbmUgX19DT1BZX0VNQShudCwgbHQsIGRldikJCQkJCQlcCj4+ICsJKHsgX19NT1ZBVkco bnQsIGRldikgPSBfX01PVkFWRyhsdCwgZGV2KSAqCQkJXAo+PiArCSAgIChudCktPnB0ZnZfbGlz dFtQVEZWX0RWRlNfU0FNUExFU19JTkRFWF07IH0pCj4+ICsKPj4gKwl1MzIgaTsKPj4gKwl1MzIg YWRlbCA9IDA7Cj4+ICsJdTMyIHNhbXBsZXMgPSBuZXh0X3RpbWluZy0+cHRmdl9saXN0W1BURlZf RFZGU19TQU1QTEVTX0lOREVYXTsKPj4gKwl1MzIgZGVsYXkgPSAyICsKPj4gKwkJKDEwMDAgKiB0 ZWdyYTIxMF9hY3R1YWxfb3NjX2Nsb2NrcyhsYXN0X3RpbWluZy0+cnVuX2Nsb2NrcykgLwo+PiAr CQlsYXN0X3RpbWluZy0+cmF0ZSk7Cj4+ICsKPj4gKwlpZiAoIW5leHRfdGltaW5nLT5wZXJpb2Rp Y190cmFpbmluZykKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlpZiAodHlwZSA9PSBEVkZTX1NF UVVFTkNFKSB7Cj4+ICsJCWlmIChsYXN0X3RpbWluZy0+cGVyaW9kaWNfdHJhaW5pbmcgJiYKPj4g KwkJICAgIChuZXh0X3RpbWluZy0+cHRmdl9saXN0W1BURlZfQ09ORklHX0NUUkxfSU5ERVhdICYK Pj4gKwkJICAgICBQVEZWX0NPTkZJR19DVFJMX1VTRV9QUkVWSU9VU19FTUEpKSB7Cj4+ICsJCQkv Kgo+PiArCQkJICogSWYgdGhlIHByZXZpb3VzIGZyZXF1ZW5jeSB3YXMgdXNpbmcgcGVyaW9kaWMK Pj4gKwkJCSAqIGNhbGlicmF0aW9uIHRoZW4gd2UgY2FuIHJldXNlIHRoZSBwcmV2aW91cwo+PiAr CQkJICogZnJlcXVlbmNpZXMgRU1BIGRhdGEuCj4+ICsJCQkgKi8KPj4gKwkJCV9fQ09QWV9FTUEo bmV4dF90aW1pbmcsIGxhc3RfdGltaW5nLCBDMEQwVTApOwo+PiArCQkJX19DT1BZX0VNQShuZXh0 X3RpbWluZywgbGFzdF90aW1pbmcsIEMwRDBVMSk7Cj4+ICsJCQlfX0NPUFlfRU1BKG5leHRfdGlt aW5nLCBsYXN0X3RpbWluZywgQzFEMFUwKTsKPj4gKwkJCV9fQ09QWV9FTUEobmV4dF90aW1pbmcs IGxhc3RfdGltaW5nLCBDMUQwVTEpOwo+PiArCQkJX19DT1BZX0VNQShuZXh0X3RpbWluZywgbGFz dF90aW1pbmcsIEMwRDFVMCk7Cj4+ICsJCQlfX0NPUFlfRU1BKG5leHRfdGltaW5nLCBsYXN0X3Rp bWluZywgQzBEMVUxKTsKPj4gKwkJCV9fQ09QWV9FTUEobmV4dF90aW1pbmcsIGxhc3RfdGltaW5n LCBDMUQxVTApOwo+PiArCQkJX19DT1BZX0VNQShuZXh0X3RpbWluZywgbGFzdF90aW1pbmcsIEMx RDFVMSk7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQkvKiBSZXNldCB0aGUgRU1BLiovCj4+ICsJCQlf X01PVkFWRyhuZXh0X3RpbWluZywgQzBEMFUwKSA9IDA7Cj4+ICsJCQlfX01PVkFWRyhuZXh0X3Rp bWluZywgQzBEMFUxKSA9IDA7Cj4+ICsJCQlfX01PVkFWRyhuZXh0X3RpbWluZywgQzFEMFUwKSA9 IDA7Cj4+ICsJCQlfX01PVkFWRyhuZXh0X3RpbWluZywgQzFEMFUxKSA9IDA7Cj4+ICsJCQlfX01P VkFWRyhuZXh0X3RpbWluZywgQzBEMVUwKSA9IDA7Cj4+ICsJCQlfX01PVkFWRyhuZXh0X3RpbWlu ZywgQzBEMVUxKSA9IDA7Cj4+ICsJCQlfX01PVkFWRyhuZXh0X3RpbWluZywgQzFEMVUwKSA9IDA7 Cj4+ICsJCQlfX01PVkFWRyhuZXh0X3RpbWluZywgQzFEMVUxKSA9IDA7Cj4+ICsKPj4gKwkJCWZv ciAoaSA9IDA7IGkgPCBzYW1wbGVzOyBpKyspIHsKPj4gKwkJCQl0ZWdyYTIxMF9zdGFydF9wZXJp b2RpY19jb21wZW5zYXRpb24oZW1jKTsKPj4gKwkJCQl1ZGVsYXkoZGVsYXkpOwo+PiArCj4+ICsJ CQkJLyoKPj4gKwkJCQkgKiBHZW5lcmF0ZSBuZXh0IHNhbXBsZSBvZiBkYXRhLgo+PiArCQkJCSAq Lwo+PiArCQkJCWFkZWwgPSB1cGRhdGVfY2xvY2tfdHJlZV9kZWxheShlbWMsCj4+ICsJCQkJCQkJ ZW1jLT5kcmFtX2Rldl9udW0sCj4+ICsJCQkJCQkJY2hhbm5lbF9tb2RlLAo+PiArCQkJCQkJCURW RlNfUFQxKTsKPj4gKwkJCX0KPj4gKwkJfQo+PiArCj4+ICsJCS8qCj4+ICsJCSAqIFNlZW1zIGxp a2UgaXQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlCj4+ICsJCSAqICdpZiAobGFzdF90aW1pbmctPnBl cmlvZGljX3RyYWluaW5nKScgY29uZGl0aW9uYWwKPj4gKwkJICogc2luY2UgaXMgYWxyZWFkeSBk b25lIGZvciB0aGUgZWxzZSBjbGF1c2UuCj4+ICsJCSAqLwo+PiArCQlhZGVsID0gdXBkYXRlX2Ns b2NrX3RyZWVfZGVsYXkoZW1jLAo+PiArCQkJCQkgICAgICAgZW1jLT5kcmFtX2Rldl9udW0sCj4+ ICsJCQkJCSAgICAgICBjaGFubmVsX21vZGUsCj4+ICsJCQkJCSAgICAgICBEVkZTX1VQREFURSk7 Cj4+ICsJfQo+PiArCj4+ICsJaWYgKHR5cGUgPT0gUEVSSU9ESUNfVFJBSU5JTkdfU0VRVUVOQ0Up IHsKPj4gKwkJdGVncmEyMTBfc3RhcnRfcGVyaW9kaWNfY29tcGVuc2F0aW9uKGVtYyk7Cj4+ICsJ CXVkZWxheShkZWxheSk7Cj4+ICsKPj4gKwkJYWRlbCA9IHVwZGF0ZV9jbG9ja190cmVlX2RlbGF5 KGVtYywKPj4gKwkJCQkJICAgICAgIGVtYy0+ZHJhbV9kZXZfbnVtLAo+PiArCQkJCQkgICAgICAg Y2hhbm5lbF9tb2RlLAo+PiArCQkJCQkgICAgICAgUEVSSU9ESUNfVFJBSU5JTkdfVVBEQVRFKTsK Pj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gYWRlbDsKPj4gK30KPj4gKwo+PiArdTMyIF9fZG9fcGVy aW9kaWNfZW1jX2NvbXBlbnNhdGlvbl9yMjEwMjEoc3RydWN0IHRlZ3JhX2VtYyAqZW1jKQo+PiAr ewo+PiArCXUzMiBkcmFtX2Rldl9udW07Cj4+ICsJdTMyIGNoYW5uZWxfbW9kZTsKPj4gKwl1MzIg ZW1jX2NmZywgZW1jX2NmZ19vOwo+PiArCXUzMiBlbWNfZGJnX287Cj4+ICsJdTMyIGRlbCwgaTsK Pj4gKwl1MzIgbGlzdFtdID0gewo+PiArCQlFTUNfUE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5L MF8wLAo+PiArCQlFTUNfUE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMF8xLAo+PiArCQlFTUNf UE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMF8yLAo+PiArCQlFTUNfUE1BQ1JPX09CX0RETExf TE9OR19EUV9SQU5LMF8zLAo+PiArCQlFTUNfUE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMV8w LAo+PiArCQlFTUNfUE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMV8xLAo+PiArCQlFTUNfUE1B Q1JPX09CX0RETExfTE9OR19EUV9SQU5LMV8yLAo+PiArCQlFTUNfUE1BQ1JPX09CX0RETExfTE9O R19EUV9SQU5LMV8zLAo+PiArCQlFTUNfREFUQV9CUkxTSEZUXzAsCj4+ICsJCUVNQ19EQVRBX0JS TFNIRlRfMQo+PiArCX07Cj4+ICsJdTMyIGl0ZW1zID0gQVJSQVlfU0laRShsaXN0KTsKPj4gKwl1 MzIgZW1jX2NmZ191cGRhdGU7Cj4+ICsJc3RydWN0IGVtY190YWJsZSAqY3VycmVudF90aW1pbmcg PSBlbWMtPmN1cnJlbnRfdGltaW5nOwo+PiArCj4+ICsJaWYgKGN1cnJlbnRfdGltaW5nLT5wZXJp b2RpY190cmFpbmluZykgewo+PiArCQljaGFubmVsX21vZGUgPQo+PiArCQkJISEoY3VycmVudF90 aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX0ZCSU9fQ0ZHN19JTkRFWF0gJgo+PiArCQkJKDEgPDwgMikp Owo+PiArCQlkcmFtX2Rldl9udW0gPSAxICsgKG1jX3JlYWRsKGVtYy0+bWMsIE1DX0VNRU1fQURS X0NGRykgJiAweDEpOwo+PiArCj4+ICsJCWVtY19jY19kYmcoUEVSX1RSQUlOLCAiUGVyaW9kaWMg dHJhaW5pbmcgc3RhcnRpbmdcbiIpOwo+PiArCj4+ICsJCWVtY19kYmdfbyA9IGVtY19yZWFkbChl bWMsIEVNQ19EQkcpOwo+PiArCQllbWNfY2ZnX28gPSBlbWNfcmVhZGwoZW1jLCBFTUNfQ0ZHKTsK Pj4gKwkJZW1jX2NmZyA9IGVtY19jZmdfbyAmIH4oRU1DX0NGR19EWU5fU0VMRl9SRUYgfAo+PiAr CQkJCQlFTUNfQ0ZHX0RSQU1fQUNQRCB8Cj4+ICsJCQkJCUVNQ19DRkdfRFJBTV9DTEtTVE9QX1BE IHwKPj4gKwkJCQkJRU1DX0NGR19EUkFNX0NMS1NUT1BfUEQpOwo+PiArCj4+ICsKPj4gKwkJLyoK Pj4gKwkJICogMS4gUG93ZXIgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgb2ZmLgo+PiArCQkgKi8K Pj4gKwkJZW1jX3dyaXRlbChlbWMsIGVtY19jZmcsIEVNQ19DRkcpOwo+PiArCj4+ICsJCS8qIERv ZXMgZW1jX3RpbWluZ191cGRhdGUoKSBmb3IgYWJvdmUgY2hhbmdlcy4gKi8KPj4gKwkJdGVncmEy MTBfZGxsX2Rpc2FibGUoZW1jLCBjaGFubmVsX21vZGUpOwo+PiArCj4+ICsJCXdhaXRfZm9yX3Vw ZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+PiArCQkJCUVNQ19FTUNfU1RBVFVTX0RSQU1fSU5f UE9XRVJET1dOX01BU0ssIDAsCj4+ICsJCQkJUkVHX0VNQyk7Cj4+ICsJCWlmIChjaGFubmVsX21v ZGUpCj4+ICsJCQl3YWl0X2Zvcl91cGRhdGUoZW1jLCBFTUNfRU1DX1NUQVRVUywKPj4gKwkJCQkJ RU1DX0VNQ19TVEFUVVNfRFJBTV9JTl9QT1dFUkRPV05fTUFTSywKPj4gKwkJCQkJMCwgUkVHX0VN QzEpOwo+PiArCj4+ICsJCXdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+PiAr CQkJCUVNQ19FTUNfU1RBVFVTX0RSQU1fSU5fU0VMRl9SRUZSRVNIX01BU0ssIDAsCj4+ICsJCQkJ UkVHX0VNQyk7Cj4+ICsJCWlmIChjaGFubmVsX21vZGUpCj4+ICsJCQl3YWl0X2Zvcl91cGRhdGUo ZW1jLCBFTUNfRU1DX1NUQVRVUywKPj4gKwkJCQlFTUNfRU1DX1NUQVRVU19EUkFNX0lOX1NFTEZf UkVGUkVTSF9NQVNLLCAwLAo+PiArCQkJCVJFR19FTUMxKTsKPj4gKwo+PiArCQllbWNfY2ZnX3Vw ZGF0ZSA9IGVtY19yZWFkbChlbWMsIEVNQ19DRkdfVVBEQVRFKTsKPj4gKwkJZW1jX3dyaXRlbChl bWMsIChlbWNfY2ZnX3VwZGF0ZSAmCj4+ICsJCQkgICAgfkVNQ19DRkdfVVBEQVRFX1VQREFURV9E TExfSU5fVVBEQVRFX01BU0spIHwKPj4gKwkJCSAgICgyIDw8IEVNQ19DRkdfVVBEQVRFX1VQREFU RV9ETExfSU5fVVBEQVRFX1NISUZUKSwKPj4gKwkJCSAgIEVNQ19DRkdfVVBEQVRFKTsKPj4gKwo+ PiArCQkvKgo+PiArCQkgKiAyLiBvc2Mga2ljayBvZmYgLSB0aGlzIGFzc3VtZXMgdHJhaW5pbmcg YW5kIGR2ZnMgaGF2ZSBzZXQKPj4gKwkJICogICAgY29ycmVjdCBNUjIzLgo+PiArCQkgKi8KPj4g KwkJdGVncmEyMTBfc3RhcnRfcGVyaW9kaWNfY29tcGVuc2F0aW9uKGVtYyk7Cj4+ICsKPj4gKwkJ LyoKPj4gKwkJICogMy4gTGV0IGRyYW0gY2FwdHVyZSBpdHMgY2xvY2sgdHJlZSBkZWxheXMuCj4+ ICsJCSAqLwo+PiArCQl1ZGVsYXkoKHRlZ3JhMjEwX2FjdHVhbF9vc2NfY2xvY2tzKGN1cnJlbnRf dGltaW5nLT5ydW5fY2xvY2tzKSAqCj4+ICsJCQkxMDAwKSAvCj4+ICsJCSAgICAgICBjdXJyZW50 X3RpbWluZy0+cmF0ZSArIDEpOwo+PiArCj4+ICsJCS8qCj4+ICsJCSAqIDQuIENoZWNrIGRlbHRh IHdydCBwcmV2aW91cyB2YWx1ZXMgKHNhdmUgdmFsdWUgaWYgbWFyZ2luCj4+ICsJCSAqICAgIGV4 Y2VlZHMgd2hhdCBpcyBzZXQgaW4gdGFibGUpLgo+PiArCQkgKi8KPj4gKwkJZGVsID0gcGVyaW9k aWNfY29tcGVuc2F0aW9uX2hhbmRsZXIoZW1jLAo+PiArCQkJCQkJICAgIFBFUklPRElDX1RSQUlO SU5HX1NFUVVFTkNFLAo+PiArCQkJCQkJICAgIGRyYW1fZGV2X251bSwKPj4gKwkJCQkJCSAgICBj aGFubmVsX21vZGUsCj4+ICsJCQkJCQkgICAgY3VycmVudF90aW1pbmcsCj4+ICsJCQkJCQkgICAg Y3VycmVudF90aW1pbmcpOwo+PiArCj4+ICsJCS8qCj4+ICsJCSAqIDUuIEFwcGx5IGNvbXBlbnNh dGlvbiB3LnIudC4gdHJhaW5lZCB2YWx1ZXMgKGlmIGNsb2NrIHRyZWUKPj4gKwkJICogICAgaGFz IGRyaWZ0ZWQgbW9yZSB0aGFuIHRoZSBzZXQgbWFyZ2luKS4KPj4gKwkJICovCj4+ICsJCWlmIChj dXJyZW50X3RpbWluZy0+dHJlZV9tYXJnaW4gPAo+PiArCQkgICAgKChkZWwgKiAxMjggKiAoY3Vy cmVudF90aW1pbmctPnJhdGUgLyAxMDAwKSkgLyAxMDAwMDAwKSkgewo+PiArCQkJZm9yIChpID0g MDsgaSA8IGl0ZW1zOyBpKyspIHsKPj4gKwkJCQl1MzIgdG1wID0KPj4gKwkJCQl0ZWdyYTIxMF9h cHBseV9wZXJpb2RpY19jb21wZW5zYXRpb25fdHJpbW1lcigKPj4gKwkJCQljdXJyZW50X3RpbWlu ZywgbGlzdFtpXSk7Cj4+ICsKPj4gKwkJCQllbWNfY2NfZGJnKEVNQV9XUklURVMsICIweCUwOHgg PD0gMHglMDh4XG4iLAo+PiArCQkJCQkgICBsaXN0W2ldLCB0bXApOwo+PiArCQkJCWVtY193cml0 ZWwoZW1jLCB0bXAsIGxpc3RbaV0pOwo+PiArCQkJfQo+PiArCQl9Cj4+ICsKPj4gKwkJZW1jX3dy aXRlbChlbWMsIGVtY19jZmdfbywgRU1DX0NGRyk7Cj4+ICsKPj4gKwkJLyoKPj4gKwkJICogNi4g VGltaW5nIHVwZGF0ZSBhY3RhbGx5IGFwcGxpZXMgdGhlIG5ldyB0cmltbWVycy4KPj4gKwkJICov Cj4+ICsJCWVtY190aW1pbmdfdXBkYXRlKGVtYywgY2hhbm5lbF9tb2RlKTsKPj4gKwo+PiArCQkv KiA2LjEuIFJlc3RvcmUgdGhlIFVQREFURV9ETExfSU5fVVBEQVRFIGZpZWxkLiAqLwo+PiArCQll bWNfd3JpdGVsKGVtYywgZW1jX2NmZ191cGRhdGUsIEVNQ19DRkdfVVBEQVRFKTsKPj4gKwo+PiAr CQkvKiA2LjIuIFJlc3RvcmUgdGhlIERMTC4gKi8KPj4gKwkJdGVncmEyMTBfZGxsX2VuYWJsZShl bWMsIGNoYW5uZWxfbW9kZSk7Cj4+ICsKPj4gKwkJLyoKPj4gKwkJICogNy4gQ29weSBvdmVyIHRo ZSBwZXJpb2RpYyB0cmFpbmluZyByZWdpc3RlcnMgdGhhdCB3ZSB1cGRhdGVkCj4+ICsJCSAqICAg IGhlcmUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGVyYXRlZC9ub24tZGVyYXRlZCB0YWJsZS4KPj4g KwkJICovCj4+ICsJCXRlZ3JhMjEwX3VwZGF0ZV9lbWNfYWx0X3RpbWluZyhlbWMsIGN1cnJlbnRf dGltaW5nKTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyoKPj4g KyAqIERvIHRoZSBjbG9jayBjaGFuZ2Ugc2VxdWVuY2UuCj4+ICsgKi8KPj4gK3ZvaWQgZW1jX3Nl dF9jbG9ja19yMjEwMjEoc3RydWN0IHRlZ3JhX2VtYyAqZW1jLCB1MzIgY2xrc3JjKQo+PiArewo+ PiArCS8qCj4+ICsJICogVGhpcyBpcyB0aGUgdGltaW5nIHRhYmxlIGZvciB0aGUgc291cmNlIGZy ZXF1ZW5jeS4gSXQgZG9lcyBfbm90Xwo+PiArCSAqIG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8g dGhlIGFjdHVhbCB0aW1pbmcgdmFsdWVzIGluIHRoZSBFTUMgYXQgdGhlCj4+ICsJICogbW9tZW50 LiBJZiB0aGUgYm9vdCBCQ1QgZGlmZmVycyBmcm9tIHRoZSB0YWJsZSB0aGVuIHRoaXMgY2FuIGhh cHBlbi4KPj4gKwkgKiBIb3dldmVyLCB3ZSBuZWVkIGl0IGZvciBhY2Nlc3NpbmcgdGhlIGRyYW1f dGltaW5ncyAod2hpY2ggYXJlIG5vdAo+PiArCSAqIHJlYWxseSByZWdpc3RlcnMpIGFycmF5IGZv ciB0aGUgY3VycmVudCBmcmVxdWVuY3kuCj4+ICsJICovCj4+ICsJc3RydWN0IGVtY190YWJsZSAq ZmFrZV90aW1pbmc7Cj4+ICsJc3RydWN0IGVtY190YWJsZSAqbGFzdF90aW1pbmcgPSBlbWMtPmN1 cnJlbnRfdGltaW5nOwo+PiArCXN0cnVjdCBlbWNfdGFibGUgKm5leHRfdGltaW5nID0gZW1jLT5u ZXh0X3RpbWluZzsKPj4gKwo+PiArCXUzMiBpLCB0bXA7Cj4+ICsKPj4gKwl1MzIgY3lhX2FsbG93 X3JlZl9jYyA9IDAsIHJlZl9iNF9zcmVmX2VuID0gMCwgY3lhX2lzc3VlX3BjX3JlZiA9IDA7Cj4+ ICsKPj4gKwl1MzIgenFjYWxfYmVmb3JlX2NjX2N1dG9mZiA9IDI0MDA7IC8qIEluIHBpY29zZWNv bmRzICovCj4+ICsJdTMyIHJlZl9kZWxheV9tdWx0Owo+PiArCXUzMiByZWZfZGVsYXk7Cj4+ICsJ czMyIHpxX2xhdGNoX2R2ZnNfd2FpdF90aW1lOwo+PiArCXMzMiB0WlFDQUxfbHBkZHI0X2ZjX2Fk ajsKPj4gKwkvKiBTY2FsZWQgYnkgeDEwMDAgKi8KPj4gKwl1MzIgdEZDX2xwZGRyNCA9IDEwMDAg KiBuZXh0X3RpbWluZy0+ZHJhbV90aW1pbmdzW1RfRkNfTFBERFI0XTsKPj4gKwl1MzIgdFpRQ0FM X2xwZGRyNCA9IDEwMDAwMDA7Cj4+ICsKPj4gKwl1MzIgZHJhbV90eXBlLCBkcmFtX2Rldl9udW0s IHNoYXJlZF96cV9yZXNpc3RvcjsKPj4gKwl1MzIgY2hhbm5lbF9tb2RlOwo+PiArCXUzMiBpc19s cGRkcjM7Cj4+ICsKPj4gKwl1MzIgZW1jX2NmZywgZW1jX3NlbF9kcGRfY3RybCwgZW1jX2NmZ19y ZWc7Cj4+ICsKPj4gKwl1MzIgZW1jX2RiZzsKPj4gKwl1MzIgZW1jX3pjYWxfaW50ZXJ2YWw7Cj4+ ICsJdTMyIGVtY196Y2FsX3dhaXRfY250X29sZDsKPj4gKwl1MzIgZW1jX3pjYWxfd2FpdF9jbnRf bmV3Owo+PiArCXUzMiBlbWNfZGJnX2FjdGl2ZTsKPj4gKwl1MzIgenFfb3A7Cj4+ICsJdTMyIHpj YWxfd2FpdF90aW1lX2Nsb2NrczsKPj4gKwl1MzIgemNhbF93YWl0X3RpbWVfcHM7Cj4+ICsKPj4g Kwl1MzIgZW1jX2F1dG9fY2FsX2NvbmZpZzsKPj4gKwl1MzIgYXV0b19jYWxfZW47Cj4+ICsKPj4g Kwl1MzIgbXIxM19jYXRyX2VuYWJsZTsKPj4gKwo+PiArCXUzMiByYW1wX3VwX3dhaXQgPSAwLCBy YW1wX2Rvd25fd2FpdCA9IDA7Cj4+ICsKPj4gKwkvKiBJbiBwaWNvc2Vjb25kcy4gKi8KPj4gKwl1 MzIgc291cmNlX2Nsb2NrX3BlcmlvZDsKPj4gKwl1MzIgZGVzdGluYXRpb25fY2xvY2tfcGVyaW9k Owo+PiArCj4+ICsJdTMyIGVtY19kYmdfbzsKPj4gKwl1MzIgZW1jX2NmZ19waXBlX2Nsa19vOwo+ PiArCXUzMiBlbWNfcGluX287Cj4+ICsKPj4gKwl1MzIgbXIxM19mbGlwX2ZzcHdyOwo+PiArCXUz MiBtcjEzX2ZsaXBfZnNwb3A7Cj4+ICsKPj4gKwl1MzIgb3B0X3pjYWxfZW5fY2M7Cj4+ICsJdTMy IG9wdF9kb19zd19xcnN0ID0gMTsKPj4gKwl1MzIgb3B0X2R2ZnNfbW9kZTsKPj4gKwl1MzIgb3B0 X2RsbF9tb2RlOwo+PiArCXUzMiBvcHRfY2Nfc2hvcnRfemNhbCA9IDE7Cj4+ICsJdTMyIG9wdF9z aG9ydF96Y2FsID0gMTsKPj4gKwl1MzIgc2F2ZV9yZXN0b3JlX2Nsa3N0b3BfcGQgPSAxOwo+PiAr Cj4+ICsJdTMyIHByZWxvY2tfZGxsX2VuID0gMCwgZGxsX291dDsKPj4gKwo+PiArCWludCBuZXh0 X3B1c2gsIG5leHRfZHFfZV9pdnJlZiwgbmV4dF9kcXNfZV9pdnJlZjsKPj4gKwo+PiArCXUzMiBv cHRfd2FyXzIwMDAyNDkwNzsKPj4gKwl1MzIgenFfd2FpdF9sb25nOwo+PiArCXUzMiB6cV93YWl0 X3Nob3J0Owo+PiArCj4+ICsJdTMyIGJnX3JlZ3VsYXRvcl9zd2l0Y2hfY29tcGxldGVfd2FpdF9j bGtzOwo+PiArCXUzMiBiZ19yZWd1bGF0b3JfbW9kZV9jaGFuZ2U7Cj4+ICsJdTMyIGVuYWJsZV9i Z2xwX3JlZ3VsYXRvcjsKPj4gKwl1MzIgZW5hYmxlX2JnX3JlZ3VsYXRvcjsKPj4gKwo+PiArCXUz MiB0UlRNOwo+PiArCXUzMiBSUF93YXI7Cj4+ICsJdTMyIFIyUF93YXI7Cj4+ICsJdTMyIFRSUGFi X3dhcjsKPj4gKwlzMzIgblJUUDsKPj4gKwl1MzIgZGVsdGFUV0FUTTsKPj4gKwl1MzIgVzJQX3dh cjsKPj4gKwl1MzIgdFJQU1Q7Cj4+ICsKPj4gKwl1MzIgbXJ3X3JlcTsKPj4gKwl1MzIgYWRlbCA9 IDAsIGNvbXBlbnNhdGVfdHJpbW1lcl9hcHBsaWNhYmxlID0gMDsKPj4gKwl1MzIgbmV4dF90aW1p bmdfcmF0ZV9taHogPSBuZXh0X3RpbWluZy0+cmF0ZSAvIDEwMDA7Cj4+ICsKPj4gKwlzdGF0aWMg dTMyIGZzcF9mb3JfbmV4dF9mcmVxOwo+PiArCj4+ICsJZW1jX2NjX2RiZyhJTkZPLCAiUnVubmlu ZyBjbG9jayBjaGFuZ2UuXG4iKTsKPj4gKwo+PiArCWZha2VfdGltaW5nID0gZ2V0X3RpbWluZ19m cm9tX2ZyZXEoZW1jLCBsYXN0X3RpbWluZy0+cmF0ZSk7Cj4+ICsKPj4gKwlmc3BfZm9yX25leHRf ZnJlcSA9ICFmc3BfZm9yX25leHRfZnJlcTsKPj4gKwo+PiArCWRyYW1fdHlwZSA9IGVtY19yZWFk bChlbWMsIEVNQ19GQklPX0NGRzUpICYKPj4gKwkJICAgIEVNQ19GQklPX0NGRzVfRFJBTV9UWVBF X01BU0sgPj4KPj4gKwkJICAgIEVNQ19GQklPX0NGRzVfRFJBTV9UWVBFX1NISUZUOwo+PiArCXNo YXJlZF96cV9yZXNpc3RvciA9IGxhc3RfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19aQ0FMX1dBSVRf Q05UX0lOREVYXSAmCj4+ICsJCQkgICAgIDEgPDwgMzE7Cj4+ICsJY2hhbm5lbF9tb2RlID0gISEo bGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX0ZCSU9fQ0ZHN19JTkRFWF0gJgo+PiArCQkJICAx IDw8IDIpOwo+PiArCW9wdF96Y2FsX2VuX2NjID0gKG5leHRfdGltaW5nLT5idXJzdF9yZWdzW0VN Q19aQ0FMX0lOVEVSVkFMX0lOREVYXSAmJgo+PiArCQkJICAhbGFzdF90aW1pbmctPmJ1cnN0X3Jl Z3NbRU1DX1pDQUxfSU5URVJWQUxfSU5ERVhdKSB8fAo+PiArCQkJICBkcmFtX3R5cGUgPT0gRFJB TV9UWVBFX0xQRERSNDsKPj4gKwlvcHRfZGxsX21vZGUgPSAoZHJhbV90eXBlID09IERSQU1fVFlQ RV9ERFIzKSA/Cj4+ICsJCSAgICAgICBnZXRfZGxsX3N0YXRlKG5leHRfdGltaW5nKSA6IERMTF9P RkY7Cj4+ICsJaXNfbHBkZHIzID0gKGRyYW1fdHlwZSA9PSBEUkFNX1RZUEVfTFBERFIyKSAmJgo+ PiArCQkgICAgbmV4dF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX0ZCSU9fQ0ZHNV9JTkRFWF0gJgo+ PiArCQkgICAgMSA8PCAyNTsKPj4gKwlvcHRfd2FyXzIwMDAyNDkwNyA9IChkcmFtX3R5cGUgPT0g RFJBTV9UWVBFX0xQRERSNCk7Cj4+ICsJb3B0X2R2ZnNfbW9kZSA9IE1BTl9TUjsKPj4gKwlkcmFt X2Rldl9udW0gPSAobWNfcmVhZGwoZW1jLT5tYywgTUNfRU1FTV9BRFJfQ0ZHKSAmIDB4MSkgKyAx Owo+PiArCj4+ICsJZW1jX2NmZ19yZWcgPSBlbWNfcmVhZGwoZW1jLCBFTUNfQ0ZHKTsKPj4gKwll bWNfYXV0b19jYWxfY29uZmlnID0gZW1jX3JlYWRsKGVtYywgRU1DX0FVVE9fQ0FMX0NPTkZJRyk7 Cj4+ICsKPj4gKwlzb3VyY2VfY2xvY2tfcGVyaW9kID0gMTAwMDAwMDAwMCAvIGxhc3RfdGltaW5n LT5yYXRlOwo+PiArCWRlc3RpbmF0aW9uX2Nsb2NrX3BlcmlvZCA9IDEwMDAwMDAwMDAgLyBuZXh0 X3RpbWluZy0+cmF0ZTsKPj4gKwo+PiArCXRaUUNBTF9scGRkcjRfZmNfYWRqID0gKGRlc3RpbmF0 aW9uX2Nsb2NrX3BlcmlvZCA+Cj4+ICsJCQkJenFjYWxfYmVmb3JlX2NjX2N1dG9mZikgPwo+PiAr CQl0WlFDQUxfbHBkZHI0IC8gZGVzdGluYXRpb25fY2xvY2tfcGVyaW9kIDoKPj4gKwkJKHRaUUNB TF9scGRkcjQgLSB0RkNfbHBkZHI0KSAvIGRlc3RpbmF0aW9uX2Nsb2NrX3BlcmlvZDsKPj4gKwll bWNfZGJnX28gPSBlbWNfcmVhZGwoZW1jLCBFTUNfREJHKTsKPj4gKwllbWNfcGluX28gPSBlbWNf cmVhZGwoZW1jLCBFTUNfUElOKTsKPj4gKwllbWNfY2ZnX3BpcGVfY2xrX28gPSBlbWNfcmVhZGwo ZW1jLCBFTUNfQ0ZHX1BJUEVfQ0xLKTsKPj4gKwllbWNfZGJnID0gZW1jX2RiZ19vOwo+PiArCj4+ ICsJZW1jX2NmZyA9IG5leHRfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19DRkdfSU5ERVhdOwo+PiAr CWVtY19jZmcgJj0gfihFTUNfQ0ZHX0RZTl9TRUxGX1JFRiB8IEVNQ19DRkdfRFJBTV9BQ1BEIHwK Pj4gKwkJICAgICBFTUNfQ0ZHX0RSQU1fQ0xLU1RPUF9TUiB8IEVNQ19DRkdfRFJBTV9DTEtTVE9Q X1BEKTsKPj4gKwllbWNfc2VsX2RwZF9jdHJsID0gbmV4dF90aW1pbmctPmVtY19zZWxfZHBkX2N0 cmw7Cj4+ICsJZW1jX3NlbF9kcGRfY3RybCAmPSB+KEVNQ19TRUxfRFBEX0NUUkxfQ0xLX1NFTF9E UERfRU4gfAo+PiArCQkJICAgICAgRU1DX1NFTF9EUERfQ1RSTF9DQV9TRUxfRFBEX0VOIHwKPj4g KwkJCSAgICAgIEVNQ19TRUxfRFBEX0NUUkxfUkVTRVRfU0VMX0RQRF9FTiB8Cj4+ICsJCQkgICAg ICBFTUNfU0VMX0RQRF9DVFJMX09EVF9TRUxfRFBEX0VOIHwKPj4gKwkJCSAgICAgIEVNQ19TRUxf RFBEX0NUUkxfREFUQV9TRUxfRFBEX0VOKTsKPj4gKwo+PiArCWVtY19jY19kYmcoSU5GTywgIkNs b2NrIGNoYW5nZSB2ZXJzaW9uOiAlZFxuIiwKPj4gKwkJICAgRFZGU19DTE9DS19DSEFOR0VfVkVS U0lPTik7Cj4+ICsJZW1jX2NjX2RiZyhJTkZPLCAiRFJBTSB0eXBlID0gJWRcbiIsIGVtYy0+ZHJh bV90eXBlKTsKPj4gKwllbWNfY2NfZGJnKElORk8sICJEUkFNIGRldiAjOiAlZFxuIiwgZHJhbV9k ZXZfbnVtKTsKPj4gKwllbWNfY2NfZGJnKElORk8sICJOZXh0IEVNQyBjbGtzcmM6IDB4JTA4eFxu IiwgY2xrc3JjKTsKPj4gKwllbWNfY2NfZGJnKElORk8sICJETEwgY2xrc3JjOiAgICAgIDB4JTA4 eFxuIiwgbmV4dF90aW1pbmctPmRsbF9jbGtfc3JjKTsKPj4gKwllbWNfY2NfZGJnKElORk8sICJs YXN0IHJhdGU6ICV1LCBuZXh0IHJhdGUgJXVcbiIsIGxhc3RfdGltaW5nLT5yYXRlLAo+PiArCQkg ICBuZXh0X3RpbWluZy0+cmF0ZSk7Cj4+ICsJZW1jX2NjX2RiZyhJTkZPLCAibGFzdCBwZXJpb2Q6 ICV1LCBuZXh0IHBlcmlvZDogJXVcbiIsCj4+ICsJCSAgIHNvdXJjZV9jbG9ja19wZXJpb2QsIGRl c3RpbmF0aW9uX2Nsb2NrX3BlcmlvZCk7Cj4+ICsJZW1jX2NjX2RiZyhJTkZPLCAiICBzaGFyZWRf enFfcmVzaXN0b3I6ICVkXG4iLCAhIXNoYXJlZF96cV9yZXNpc3Rvcik7Cj4+ICsJZW1jX2NjX2Ri ZyhJTkZPLCAiICBjaGFubmVsX21vZGU6ICVkXG4iLCBjaGFubmVsX21vZGUpOwo+PiArCWVtY19j Y19kYmcoSU5GTywgIiAgb3B0X2RsbF9tb2RlOiAlZFxuIiwgb3B0X2RsbF9tb2RlKTsKPj4gKwo+ PiArCS8qCj4+ICsJICogU3RlcCAxOgo+PiArCSAqICAgUHJlIERWRlMgU1cgc2VxdWVuY2UuCj4+ ICsJICovCj4+ICsJZW1jX2NjX2RiZyhTVEVQUywgIlN0ZXAgMVxuIik7Cj4+ICsJZW1jX2NjX2Ri ZyhTVEVQUywgIlN0ZXAgMS4xOiBEaXNhYmxlIERMTCB0ZW1wb3JhcmlseS5cbiIpOwo+PiArCXRt cCA9IGVtY19yZWFkbChlbWMsIEVNQ19DRkdfRElHX0RMTCk7Cj4+ICsJdG1wICY9IH5FTUNfQ0ZH X0RJR19ETExfQ0ZHX0RMTF9FTjsKPj4gKwllbWNfd3JpdGVsKGVtYywgdG1wLCBFTUNfQ0ZHX0RJ R19ETEwpOwo+PiArCj4+ICsJZW1jX3RpbWluZ191cGRhdGUoZW1jLCBjaGFubmVsX21vZGUpOwo+ PiArCXdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19DRkdfRElHX0RMTCwKPj4gKwkJCUVNQ19DRkdf RElHX0RMTF9DRkdfRExMX0VOLCAwLCBSRUdfRU1DKTsKPj4gKwlpZiAoY2hhbm5lbF9tb2RlKQo+ PiArCQl3YWl0X2Zvcl91cGRhdGUoZW1jLCBFTUNfQ0ZHX0RJR19ETEwsCj4+ICsJCQkJRU1DX0NG R19ESUdfRExMX0NGR19ETExfRU4sIDAsIFJFR19FTUMxKTsKPj4gKwo+PiArCWVtY19jY19kYmco U1RFUFMsICJTdGVwIDEuMjogRGlzYWJsZSBBVVRPQ0FMIHRlbXBvcmFyaWx5LlxuIik7Cj4+ICsJ ZW1jX2F1dG9fY2FsX2NvbmZpZyA9IG5leHRfdGltaW5nLT5lbWNfYXV0b19jYWxfY29uZmlnOwo+ PiArCWF1dG9fY2FsX2VuID0gZW1jX2F1dG9fY2FsX2NvbmZpZyAmIEVNQ19BVVRPX0NBTF9DT05G SUdfQVVUT19DQUxfRU5BQkxFOwo+PiArCWVtY19hdXRvX2NhbF9jb25maWcgJj0gfkVNQ19BVVRP X0NBTF9DT05GSUdfQVVUT19DQUxfU1RBUlQ7Cj4+ICsJZW1jX2F1dG9fY2FsX2NvbmZpZyB8PSAg RU1DX0FVVE9fQ0FMX0NPTkZJR19BVVRPX0NBTF9NRUFTVVJFX1NUQUxMOwo+PiArCWVtY19hdXRv X2NhbF9jb25maWcgfD0gIEVNQ19BVVRPX0NBTF9DT05GSUdfQVVUT19DQUxfVVBEQVRFX1NUQUxM Owo+PiArCWVtY19hdXRvX2NhbF9jb25maWcgfD0gIGF1dG9fY2FsX2VuOwo+PiArCWVtY193cml0 ZWwoZW1jLCBlbWNfYXV0b19jYWxfY29uZmlnLCBFTUNfQVVUT19DQUxfQ09ORklHKTsKPj4gKwll bWNfcmVhZGwoZW1jLCBFTUNfQVVUT19DQUxfQ09ORklHKTsgLyogRmx1c2ggd3JpdGUuICovCj4+ ICsKPj4gKwllbWNfY2NfZGJnKFNURVBTLCAiU3RlcCAxLjM6IERpc2FibGUgb3RoZXIgcG93ZXIg ZmVhdHVyZXMuXG4iKTsKPj4gKwllbWNfc2V0X3NoYWRvd19ieXBhc3MoZW1jLCBBQ1RJVkUpOwo+ PiArCWVtY193cml0ZWwoZW1jLCBlbWNfY2ZnLCBFTUNfQ0ZHKTsKPj4gKwllbWNfd3JpdGVsKGVt YywgZW1jX3NlbF9kcGRfY3RybCwgRU1DX1NFTF9EUERfQ1RSTCk7Cj4+ICsJZW1jX3NldF9zaGFk b3dfYnlwYXNzKGVtYywgQVNTRU1CTFkpOwo+PiArCj4+ICsJaWYgKG5leHRfdGltaW5nLT5wZXJp b2RpY190cmFpbmluZykgewo+PiArCQl0ZWdyYTIxMF9yZXNldF9kcmFtX2Nsa3RyZWVfdmFsdWVz KG5leHRfdGltaW5nKTsKPj4gKwo+PiArCQl3YWl0X2Zvcl91cGRhdGUoZW1jLCBFTUNfRU1DX1NU QVRVUywKPj4gKwkJCQlFTUNfRU1DX1NUQVRVU19EUkFNX0lOX1BPV0VSRE9XTl9NQVNLLCAwLAo+ PiArCQkJCVJFR19FTUMpOwo+PiArCQlpZiAoY2hhbm5lbF9tb2RlKQo+PiArCQkJd2FpdF9mb3Jf dXBkYXRlKGVtYywgRU1DX0VNQ19TVEFUVVMsCj4+ICsJCQkJCUVNQ19FTUNfU1RBVFVTX0RSQU1f SU5fUE9XRVJET1dOX01BU0ssCj4+ICsJCQkJCTAsIFJFR19FTUMxKTsKPj4gKwo+PiArCQl3YWl0 X2Zvcl91cGRhdGUoZW1jLCBFTUNfRU1DX1NUQVRVUywKPj4gKwkJCQlFTUNfRU1DX1NUQVRVU19E UkFNX0lOX1NFTEZfUkVGUkVTSF9NQVNLLCAwLAo+PiArCQkJCVJFR19FTUMpOwo+PiArCQlpZiAo Y2hhbm5lbF9tb2RlKQo+PiArCQkJd2FpdF9mb3JfdXBkYXRlKGVtYywgRU1DX0VNQ19TVEFUVVMs Cj4+ICsJCQkJRU1DX0VNQ19TVEFUVVNfRFJBTV9JTl9TRUxGX1JFRlJFU0hfTUFTSywgMCwKPj4g KwkJCQlSRUdfRU1DMSk7Cj4+ICsKPj4gKwkJdGVncmEyMTBfc3RhcnRfcGVyaW9kaWNfY29tcGVu c2F0aW9uKGVtYyk7Cj4+ICsKPj4gKwkJdWRlbGF5KCgoMTAwMCAqCj4+ICsJCQkgdGVncmEyMTBf YWN0dWFsX29zY19jbG9ja3MobGFzdF90aW1pbmctPnJ1bl9jbG9ja3MpKSAvCj4+ICsJCQlsYXN0 X3RpbWluZy0+cmF0ZSkgKyAyKTsKPj4gKwkJYWRlbCA9IHBlcmlvZGljX2NvbXBlbnNhdGlvbl9o YW5kbGVyKGVtYywgRFZGU19TRVFVRU5DRSwKPj4gKwkJCQkJCSAgICAgZHJhbV9kZXZfbnVtLAo+ PiArCQkJCQkJICAgICBjaGFubmVsX21vZGUsCj4+ICsJCQkJCQkgICAgIGZha2VfdGltaW5nLCBu ZXh0X3RpbWluZyk7Cj4+ICsJCWNvbXBlbnNhdGVfdHJpbW1lcl9hcHBsaWNhYmxlID0KPj4gKwkJ CW5leHRfdGltaW5nLT5wZXJpb2RpY190cmFpbmluZyAmJgo+PiArCQkJKChhZGVsICogMTI4ICog bmV4dF90aW1pbmdfcmF0ZV9taHopIC8gMTAwMDAwMCkgPgo+PiArCQkJbmV4dF90aW1pbmctPnRy ZWVfbWFyZ2luOwo+PiArCX0KPj4gKwo+PiArCWVtY193cml0ZWwoZW1jLCBFTUNfSU5UU1RBVFVT X0NMS0NIQU5HRV9DT01QTEVURSwgRU1DX0lOVFNUQVRVUyk7Cj4+ICsJZW1jX3NldF9zaGFkb3df YnlwYXNzKGVtYywgQUNUSVZFKTsKPj4gKwllbWNfd3JpdGVsKGVtYywgZW1jX2NmZywgRU1DX0NG Ryk7Cj4+ICsJZW1jX3dyaXRlbChlbWMsIGVtY19zZWxfZHBkX2N0cmwsIEVNQ19TRUxfRFBEX0NU UkwpOwo+PiArCWVtY193cml0ZWwoZW1jLCBlbWNfY2ZnX3BpcGVfY2xrX28gfCBFTUNfQ0ZHX1BJ UEVfQ0xLX0NMS19BTFdBWVNfT04sCj4+ICsJCSAgIEVNQ19DRkdfUElQRV9DTEspOwo+PiArCWVt Y193cml0ZWwoZW1jLCBuZXh0X3RpbWluZy0+ZW1jX2ZkcGRfY3RybF9jbWRfbm9fcmFtcCAmCj4+ ICsJCSAgIH5FTUNfRkRQRF9DVFJMX0NNRF9OT19SQU1QX0NNRF9EUERfTk9fUkFNUF9FTkFCTEUs Cj4+ICsJCSAgIEVNQ19GRFBEX0NUUkxfQ01EX05PX1JBTVApOwo+PiArCj4+ICsJYmdfcmVndWxh dG9yX21vZGVfY2hhbmdlID0KPj4gKwkJKChuZXh0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUE1B Q1JPX0JHX0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4+ICsJCSAgRU1DX1BNQUNST19CR19CSUFTX0NU UkxfMF9CR0xQX0VfUFdSRCkgXgo+PiArCQkgKGxhc3RfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19Q TUFDUk9fQkdfQklBU19DVFJMXzBfSU5ERVhdICYKPj4gKwkJICBFTUNfUE1BQ1JPX0JHX0JJQVNf Q1RSTF8wX0JHTFBfRV9QV1JEKSkgfHwKPj4gKwkJKChuZXh0X3RpbWluZy0+YnVyc3RfcmVnc1tF TUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4+ICsJCSAgRU1DX1BNQUNST19CR19C SUFTX0NUUkxfMF9CR19FX1BXUkQpIF4KPj4gKwkJIChsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tF TUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4+ICsJCSAgRU1DX1BNQUNST19CR19C SUFTX0NUUkxfMF9CR19FX1BXUkQpKTsKPj4gKwllbmFibGVfYmdscF9yZWd1bGF0b3IgPQo+PiAr CQkobmV4dF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1BNQUNST19CR19CSUFTX0NUUkxfMF9JTkRF WF0gJgo+PiArCQkgRU1DX1BNQUNST19CR19CSUFTX0NUUkxfMF9CR0xQX0VfUFdSRCkgPT0gMDsK Pj4gKwllbmFibGVfYmdfcmVndWxhdG9yID0KPj4gKwkJKG5leHRfdGltaW5nLT5idXJzdF9yZWdz W0VNQ19QTUFDUk9fQkdfQklBU19DVFJMXzBfSU5ERVhdICYKPj4gKwkJIEVNQ19QTUFDUk9fQkdf QklBU19DVFJMXzBfQkdfRV9QV1JEKSA9PSAwOwo+PiArCj4+ICsJaWYgKGJnX3JlZ3VsYXRvcl9t b2RlX2NoYW5nZSkgewo+PiArCQlpZiAoZW5hYmxlX2JnX3JlZ3VsYXRvcikKPj4gKwkJCWVtY193 cml0ZWwoZW1jLCBsYXN0X3RpbWluZy0+YnVyc3RfcmVncwo+PiArCQkJCSAgIFtFTUNfUE1BQ1JP X0JHX0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4+ICsJCQkJICAgfkVNQ19QTUFDUk9fQkdfQklBU19D VFJMXzBfQkdfRV9QV1JELAo+PiArCQkJCSAgIEVNQ19QTUFDUk9fQkdfQklBU19DVFJMXzApOwo+ PiArCQllbHNlCj4+ICsJCQllbWNfd3JpdGVsKGVtYywgbGFzdF90aW1pbmctPmJ1cnN0X3JlZ3MK Pj4gKwkJCQkgICBbRU1DX1BNQUNST19CR19CSUFTX0NUUkxfMF9JTkRFWF0gJgo+PiArCQkJCSAg IH5FTUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wX0JHTFBfRV9QV1JELAo+PiArCQkJCSAgIEVNQ19Q TUFDUk9fQkdfQklBU19DVFJMXzApOwo+PiArCX0KPj4gKwo+PiArCS8qIENoZWNrIGlmIHdlIG5l ZWQgdG8gdHVybiBvbiBWUkVGIGdlbmVyYXRvci4gKi8KPj4gKwlpZiAoKCgobGFzdF90aW1pbmct PmJ1cnN0X3JlZ3NbRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0lOREVYXSAmCj4+ICsJICAg ICAgIEVNQ19QTUFDUk9fREFUQV9QQURfVFhfQ1RSTF9EQVRBX0RRX0VfSVZSRUYpID09IDApICYm Cj4+ICsJICAgICAoKG5leHRfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19QTUFDUk9fREFUQV9QQURf VFhfQ1RSTF9JTkRFWF0gJgo+PiArCSAgICAgICBFTUNfUE1BQ1JPX0RBVEFfUEFEX1RYX0NUUkxf REFUQV9EUV9FX0lWUkVGKSA9PSAxKSkgfHwKPj4gKwkgICAgKCgobGFzdF90aW1pbmctPmJ1cnN0 X3JlZ3NbRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0lOREVYXSAmCj4+ICsJICAgICAgIEVN Q19QTUFDUk9fREFUQV9QQURfVFhfQ1RSTF9EQVRBX0RRU19FX0lWUkVGKSA9PSAwKSAmJgo+PiAr CSAgICAgKChuZXh0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUE1BQ1JPX0RBVEFfUEFEX1RYX0NU UkxfSU5ERVhdICYKPj4gKwkgICAgICAgRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0RBVEFf RFFTX0VfSVZSRUYpID09IDEpKSkgewo+PiArCQl1MzIgcGFkX3R4X2N0cmwgPQo+PiArCQkgICAg bmV4dF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0lOREVY XTsKPj4gKwkJdTMyIGxhc3RfcGFkX3R4X2N0cmwgPQo+PiArCQkgICAgbGFzdF90aW1pbmctPmJ1 cnN0X3JlZ3NbRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0lOREVYXTsKPj4gKwo+PiArCQlu ZXh0X2Rxc19lX2l2cmVmID0gcGFkX3R4X2N0cmwgJgo+PiArCQkJCSAgIEVNQ19QTUFDUk9fREFU QV9QQURfVFhfQ1RSTF9EQVRBX0RRU19FX0lWUkVGOwo+PiArCQluZXh0X2RxX2VfaXZyZWYgPSBw YWRfdHhfY3RybCAmCj4+ICsJCQkJICBFTUNfUE1BQ1JPX0RBVEFfUEFEX1RYX0NUUkxfREFUQV9E UV9FX0lWUkVGOwo+PiArCQluZXh0X3B1c2ggPSAobGFzdF9wYWRfdHhfY3RybCAmCj4+ICsJCQkg ICAgIH5FTUNfUE1BQ1JPX0RBVEFfUEFEX1RYX0NUUkxfREFUQV9EUV9FX0lWUkVGICYKPj4gKwkJ CSAgICAgfkVNQ19QTUFDUk9fREFUQV9QQURfVFhfQ1RSTF9EQVRBX0RRU19FX0lWUkVGKSB8Cj4+ ICsJCQkgICAgbmV4dF9kcV9lX2l2cmVmIHwgbmV4dF9kcXNfZV9pdnJlZjsKPj4gKwkJZW1jX3dy aXRlbChlbWMsIG5leHRfcHVzaCwgRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMKTsKPj4gKwkJ dWRlbGF5KDEpOwo+PiArCX0gZWxzZSBpZiAoYmdfcmVndWxhdG9yX21vZGVfY2hhbmdlKSB7Cj4+ ICsJCXVkZWxheSgxKTsKPj4gKwl9Cj4+ICsKPj4gKwllbWNfc2V0X3NoYWRvd19ieXBhc3MoZW1j LCBBU1NFTUJMWSk7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIFN0ZXAgMjoKPj4gKwkgKiAgIFByZWxv Y2sgdGhlIERMTC4KPj4gKwkgKi8KPj4gKwllbWNfY2NfZGJnKFNURVBTLCAiU3RlcCAyXG4iKTsK Pj4gKwlpZiAobmV4dF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX0NGR19ESUdfRExMX0lOREVYXSAm Cj4+ICsJICAgIEVNQ19DRkdfRElHX0RMTF9DRkdfRExMX0VOKSB7Cj4+ICsJCWVtY19jY19kYmco SU5GTywgIlByZWxvY2sgZW5hYmxlZCBmb3IgdGFyZ2V0IGZyZXF1ZW5jeS5cbiIpOwo+PiArCQlk bGxfb3V0ID0gdGVncmEyMTBfZGxsX3ByZWxvY2soZW1jLCAwLCBjbGtzcmMpOwo+PiArCQllbWNf Y2NfZGJnKElORk8sICJETEwgb3V0OiAweCUwM3hcbiIsIGRsbF9vdXQpOwo+PiArCQlwcmVsb2Nr X2RsbF9lbiA9IDE7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZW1jX2NjX2RiZyhJTkZPLCAiRGlzYWJs aW5nIERMTCBmb3IgdGFyZ2V0IGZyZXF1ZW5jeS5cbiIpOwo+PiArCQl0ZWdyYTIxMF9kbGxfZGlz YWJsZShlbWMsIGNoYW5uZWxfbW9kZSk7Cj4+ICsJfQo+PiArCj4+ICsJLyoKPj4gKwkgKiBTdGVw IDM6Cj4+ICsJICogICBQcmVwYXJlIGF1dG9jYWwgZm9yIHRoZSBjbG9jayBjaGFuZ2UuCj4+ICsJ ICovCj4+ICsJZW1jX2NjX2RiZyhTVEVQUywgIlN0ZXAgM1xuIik7Cj4+ICsJZW1jX3NldF9zaGFk b3dfYnlwYXNzKGVtYywgQUNUSVZFKTsKPj4gKwllbWNfd3JpdGVsKGVtYywgbmV4dF90aW1pbmct PmVtY19hdXRvX2NhbF9jb25maWcyLAo+PiArCQkgICBFTUNfQVVUT19DQUxfQ09ORklHMik7Cj4+ ICsJZW1jX3dyaXRlbChlbWMsIG5leHRfdGltaW5nLT5lbWNfYXV0b19jYWxfY29uZmlnMywKPj4g KwkJICAgRU1DX0FVVE9fQ0FMX0NPTkZJRzMpOwo+PiArCWVtY193cml0ZWwoZW1jLCBuZXh0X3Rp bWluZy0+ZW1jX2F1dG9fY2FsX2NvbmZpZzQsCj4+ICsJCSAgIEVNQ19BVVRPX0NBTF9DT05GSUc0 KTsKPj4gKwllbWNfd3JpdGVsKGVtYywgbmV4dF90aW1pbmctPmVtY19hdXRvX2NhbF9jb25maWc1 LAo+PiArCQkgICBFTUNfQVVUT19DQUxfQ09ORklHNSk7Cj4+ICsJZW1jX3dyaXRlbChlbWMsIG5l eHRfdGltaW5nLT5lbWNfYXV0b19jYWxfY29uZmlnNiwKPj4gKwkJICAgRU1DX0FVVE9fQ0FMX0NP TkZJRzYpOwo+PiArCWVtY193cml0ZWwoZW1jLCBuZXh0X3RpbWluZy0+ZW1jX2F1dG9fY2FsX2Nv bmZpZzcsCj4+ICsJCSAgIEVNQ19BVVRPX0NBTF9DT05GSUc3KTsKPj4gKwllbWNfd3JpdGVsKGVt YywgbmV4dF90aW1pbmctPmVtY19hdXRvX2NhbF9jb25maWc4LAo+PiArCQkgICBFTUNfQVVUT19D QUxfQ09ORklHOCk7Cj4+ICsJZW1jX3NldF9zaGFkb3dfYnlwYXNzKGVtYywgQVNTRU1CTFkpOwo+ PiArCj4+ICsJZW1jX2F1dG9fY2FsX2NvbmZpZyB8PSAoRU1DX0FVVE9fQ0FMX0NPTkZJR19BVVRP X0NBTF9DT01QVVRFX1NUQVJUIHwKPj4gKwkJCQlhdXRvX2NhbF9lbik7Cj4+ICsJZW1jX3dyaXRl bChlbWMsIGVtY19hdXRvX2NhbF9jb25maWcsIEVNQ19BVVRPX0NBTF9DT05GSUcpOwo+PiArCj4+ ICsJLyoKPj4gKwkgKiBTdGVwIDQ6Cj4+ICsJICogICBVcGRhdGUgRU1DX0NGRy4gKD8/KQo+PiAr CSAqLwo+PiArCWVtY19jY19kYmcoU1RFUFMsICJTdGVwIDRcbiIpOwo+PiArCWlmIChzb3VyY2Vf Y2xvY2tfcGVyaW9kID4gNTAwMDAgJiYgZHJhbV90eXBlID09IERSQU1fVFlQRV9MUEREUjQpCj4+ ICsJCWNjZmlmb193cml0ZWwoZW1jLCAxLCBFTUNfU0VMRl9SRUYsIDApOwo+PiArCWVsc2UKPj4g KwkJZW1jX3dyaXRlbChlbWMsIG5leHRfdGltaW5nLT5lbWNfY2ZnXzIsIEVNQ19DRkdfMik7Cj4+ ICsKPj4gKwkvKgo+PiArCSAqIFN0ZXAgNToKPj4gKwkgKiAgIFByZXBhcmUgcmVmZXJlbmNlIHZh cmlhYmxlcyBmb3IgWlFDQUwgcmVncy4KPj4gKwkgKi8KPj4gKwllbWNfY2NfZGJnKFNURVBTLCAi U3RlcCA1XG4iKTsKPj4gKwllbWNfemNhbF9pbnRlcnZhbCA9IDA7Cj4+ICsJZW1jX3pjYWxfd2Fp dF9jbnRfb2xkID0KPj4gKwkJbGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1pDQUxfV0FJVF9D TlRfSU5ERVhdOwo+PiArCWVtY196Y2FsX3dhaXRfY250X25ldyA9Cj4+ICsJCW5leHRfdGltaW5n LT5idXJzdF9yZWdzW0VNQ19aQ0FMX1dBSVRfQ05UX0lOREVYXTsKPj4gKwllbWNfemNhbF93YWl0 X2NudF9vbGQgJj0gfkVNQ19aQ0FMX1dBSVRfQ05UX1pDQUxfV0FJVF9DTlRfTUFTSzsKPj4gKwll bWNfemNhbF93YWl0X2NudF9uZXcgJj0gfkVNQ19aQ0FMX1dBSVRfQ05UX1pDQUxfV0FJVF9DTlRf TUFTSzsKPj4gKwo+PiArCWlmIChkcmFtX3R5cGUgPT0gRFJBTV9UWVBFX0xQRERSNCkKPj4gKwkJ enFfd2FpdF9sb25nID0gbWF4KCh1MzIpMSwKPj4gKwkJCQkgICBkaXZfbzMoMTAwMDAwMCwgZGVz dGluYXRpb25fY2xvY2tfcGVyaW9kKSk7Cj4+ICsJZWxzZSBpZiAoZHJhbV90eXBlID09IERSQU1f VFlQRV9MUEREUjIgfHwgaXNfbHBkZHIzKQo+PiArCQl6cV93YWl0X2xvbmcgPSBtYXgobmV4dF90 aW1pbmctPm1pbl9tcnNfd2FpdCwKPj4gKwkJCQkgICBkaXZfbzMoMzYwMDAwLCBkZXN0aW5hdGlv bl9jbG9ja19wZXJpb2QpKSArCj4+ICsJCQkgICAgICAgNDsKPj4gKwllbHNlIGlmIChkcmFtX3R5 cGUgPT0gRFJBTV9UWVBFX0REUjMpCj4+ICsJCXpxX3dhaXRfbG9uZyA9IG1heCgodTMyKTI1NiwK Pj4gKwkJCQkgICBkaXZfbzMoMzIwMDAwLCBkZXN0aW5hdGlvbl9jbG9ja19wZXJpb2QpICsKPj4g KwkJCQkgICAyKTsKPj4gKwllbHNlCj4+ICsJCXpxX3dhaXRfbG9uZyA9IDA7Cj4+ICsKPj4gKwlp ZiAoZHJhbV90eXBlID09IERSQU1fVFlQRV9MUEREUjIgfHwgaXNfbHBkZHIzKQo+PiArCQl6cV93 YWl0X3Nob3J0ID0gbWF4KG1heChuZXh0X3RpbWluZy0+bWluX21yc193YWl0LCAodTMyKTYpLAo+ PiArCQkJCSAgICBkaXZfbzMoOTAwMDAsIGRlc3RpbmF0aW9uX2Nsb2NrX3BlcmlvZCkpICsKPj4g KwkJCQk0Owo+PiArCWVsc2UgaWYgKGRyYW1fdHlwZSA9PSBEUkFNX1RZUEVfRERSMykKPj4gKwkJ enFfd2FpdF9zaG9ydCA9IG1heCgodTMyKTY0LAo+PiArCQkJCSAgICBkaXZfbzMoODAwMDAsIGRl c3RpbmF0aW9uX2Nsb2NrX3BlcmlvZCkpICsKPj4gKwkJCQkyOwo+PiArCWVsc2UKPj4gKwkJenFf d2FpdF9zaG9ydCA9IDA7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIFN0ZXAgNjoKPj4gKwkgKiAgIFRy YWluaW5nIGNvZGUgLSByZW1vdmVkLgo+PiArCSAqLwo+PiArCWVtY19jY19kYmcoU1RFUFMsICJT dGVwIDZcbiIpOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBTdGVwIDc6Cj4+ICsJICogICBQcm9ncmFt IEZTUCByZWZlcmVuY2UgcmVnaXN0ZXJzIGFuZCBzZW5kIE1SV3MgdG8gbmV3IEZTUFdSLgo+PiAr CSAqLwo+PiArCWVtY19jY19kYmcoU1RFUFMsICJTdGVwIDdcbiIpOwo+PiArCWVtY19jY19kYmco U1VCX1NURVBTLCAiU3RlcCA3LjE6IEJ1ZyAyMDAwMjQ5MDcgLSBQYXRjaCBSUCBSMlAiKTsKPj4g KwlpZiAob3B0X3dhcl8yMDAwMjQ5MDcpIHsKPj4gKwkJblJUUCA9IDE2Owo+PiArCQlpZiAoc291 cmNlX2Nsb2NrX3BlcmlvZCA+PSAxMDAwMDAwLzE4NjYpIC8qIDUzNS45MSBwcyAqLwo+PiArCQkJ blJUUCA9IDE0Owo+PiArCQlpZiAoc291cmNlX2Nsb2NrX3BlcmlvZCA+PSAxMDAwMDAwLzE2MDAp IC8qIDYyNS4wMCBwcyAqLwo+PiArCQkJblJUUCA9IDEyOwo+PiArCQlpZiAoc291cmNlX2Nsb2Nr X3BlcmlvZCA+PSAxMDAwMDAwLzEzMzMpIC8qIDc1MC4xOSBwcyAqLwo+PiArCQkJblJUUCA9IDEw Owo+PiArCQlpZiAoc291cmNlX2Nsb2NrX3BlcmlvZCA+PSAxMDAwMDAwLzEwNjYpIC8qIDkzOC4w OSBwcyAqLwo+PiArCQkJblJUUCA9IDg7Cj4+ICsKPj4gKwkJZGVsdGFUV0FUTSA9IG1heF90KHUz MiwgZGl2X28zKDc1MDAsIHNvdXJjZV9jbG9ja19wZXJpb2QpLCA4KTsKPj4gKwo+PiArCQkvKgo+ PiArCQkgKiBPcmlnaW5hbGx5IHRoZXJlIHdhcyBhICsgLjUgaW4gdGhlIHRSUFNUIGNhbGN1bGF0 aW9uLgo+PiArCQkgKiBIb3dldmVyIHNpbmNlIHdlIGNhbid0IGRvIEZQIGluIHRoZSBrZXJuZWwg YW5kIHRoZSB0UlRNCj4+ICsJCSAqIGNvbXB1dGF0aW9uIHdhcyBpbiBhIGZsb2F0aW5nIHBvaW50 IGNlaWxpbmcgZnVuY3Rpb24sIGFkZGluZwo+PiArCQkgKiBvbmUgdG8gdFJUUCBzaG91bGQgYmUg b2suIFRoZXJlIGlzIG5vIG90aGVyIHNvdXJjZSBvZiBub24KPj4gKwkJICogaW50ZWdlciB2YWx1 ZXMsIHNvIHRoZSByZXN1bHQgd2FzIGFsd2F5cyBnb2luZyB0byBiZQo+PiArCQkgKiBzb21ldGhp bmcgZm9yIHRoZSBmb3JtOiBmX2NlaWwoTiArIC41KSA9IE4gKyAxOwo+PiArCQkgKi8KPj4gKwkJ dFJQU1QgPSAoKGxhc3RfdGltaW5nLT5lbWNfbXJ3ICYgMHg4MCkgPj4gNyk7Cj4+ICsJCXRSVE0g PSBmYWtlX3RpbWluZy0+ZHJhbV90aW1pbmdzW1JMXSArCj4+ICsJCSAgICAgICBkaXZfbzMoMzYw MCwgc291cmNlX2Nsb2NrX3BlcmlvZCkgKwo+PiArCQkgICAgICAgbWF4X3QodTMyLCBkaXZfbzMo NzUwMCwgc291cmNlX2Nsb2NrX3BlcmlvZCksIDgpICsKPj4gKwkJICAgICAgIHRSUFNUICsgMSAr IG5SVFA7Cj4+ICsKPj4gKwkJZW1jX2NjX2RiZyhJTkZPLCAidFJUTSA9ICV1LCBFTUNfUlAgPSAl dVxuIiwgdFJUTSwKPj4gKwkJCSAgIG5leHRfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19SUF9JTkRF WF0pOwo+PiArCj4+ICsJCWlmIChsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUlBfSU5ERVhd IDwgdFJUTSkgewo+PiArCQkJaWYgKHRSVE0gPiAobGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1D X1IyUF9JTkRFWF0gKwo+PiArCQkJCSAgICBsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUlBf SU5ERVhdKSkgewo+PiArCQkJCVIyUF93YXIgPSB0UlRNIC0KPj4gKwkJCQkJICBsYXN0X3RpbWlu Zy0+YnVyc3RfcmVnc1tFTUNfUlBfSU5ERVhdOwo+PiArCQkJCVJQX3dhciA9IGxhc3RfdGltaW5n LT5idXJzdF9yZWdzW0VNQ19SUF9JTkRFWF07Cj4+ICsJCQkJVFJQYWJfd2FyID0gbGFzdF90aW1p bmctPmJ1cnN0X3JlZ3NbCj4+ICsJCQkJCSAgICBFTUNfVFJQQUJfSU5ERVhdOwo+PiArCQkJCWlm IChSMlBfd2FyID4gNjMpIHsKPj4gKwkJCQkJUlBfd2FyID0gUjJQX3dhciArCj4+ICsJCQkJCQkg bGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbCj4+ICsJCQkJCQkgRU1DX1JQX0lOREVYXSAtIDYzOwo+ PiArCQkJCQlpZiAoVFJQYWJfd2FyIDwgUlBfd2FyKQo+PiArCQkJCQkJVFJQYWJfd2FyID0gUlBf d2FyOwo+PiArCQkJCQlSMlBfd2FyID0gNjM7Cj4+ICsJCQkJfQo+PiArCQkJfSBlbHNlIHsKPj4g KwkJCQlSMlBfd2FyID0gbGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbCj4+ICsJCQkJCSAgRU1DX1Iy UF9JTkRFWF07Cj4+ICsJCQkJUlBfd2FyID0gbGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1JQ X0lOREVYXTsKPj4gKwkJCQlUUlBhYl93YXIgPSBsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1sKPj4g KwkJCQkJICAgIEVNQ19UUlBBQl9JTkRFWF07Cj4+ICsJCQl9Cj4+ICsKPj4gKwkJCWlmIChSUF93 YXIgPCBkZWx0YVRXQVRNKSB7Cj4+ICsJCQkJVzJQX3dhciA9IGxhc3RfdGltaW5nLT5idXJzdF9y ZWdzW0VNQ19XMlBfSU5ERVhdCj4+ICsJCQkJCSAgKyBkZWx0YVRXQVRNIC0gUlBfd2FyOwo+PiAr CQkJCWlmIChXMlBfd2FyID4gNjMpIHsKPj4gKwkJCQkJUlBfd2FyID0gUlBfd2FyICsgVzJQX3dh ciAtIDYzOwo+PiArCQkJCQlpZiAoVFJQYWJfd2FyIDwgUlBfd2FyKQo+PiArCQkJCQkJVFJQYWJf d2FyID0gUlBfd2FyOwo+PiArCQkJCQlXMlBfd2FyID0gNjM7Cj4+ICsJCQkJfQo+PiArCQkJfSBl bHNlIHsKPj4gKwkJCQlXMlBfd2FyID0gbGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbCj4+ICsJCQkJ CSAgRU1DX1cyUF9JTkRFWF07Cj4+ICsJCQl9Cj4+ICsKPj4gKwkJCWlmICgobGFzdF90aW1pbmct PmJ1cnN0X3JlZ3NbRU1DX1cyUF9JTkRFWF0gXgo+PiArCQkJICAgICBXMlBfd2FyKSB8fAo+PiAr CQkJICAgIChsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUjJQX0lOREVYXSBeCj4+ICsJCQkg ICAgIFIyUF93YXIpIHx8Cj4+ICsJCQkgICAgKGxhc3RfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19S UF9JTkRFWF0gXgo+PiArCQkJICAgICBSUF93YXIpIHx8Cj4+ICsJCQkgICAgKGxhc3RfdGltaW5n LT5idXJzdF9yZWdzW0VNQ19UUlBBQl9JTkRFWF0gXgo+PiArCQkJICAgICBUUlBhYl93YXIpKSB7 Cj4+ICsJCQkJZW1jX3dyaXRlbChlbWMsIFJQX3dhciwgRU1DX1JQKTsKPj4gKwkJCQllbWNfd3Jp dGVsKGVtYywgUjJQX3dhciwgRU1DX1IyUCk7Cj4+ICsJCQkJZW1jX3dyaXRlbChlbWMsIFcyUF93 YXIsIEVNQ19XMlApOwo+PiArCQkJCWVtY193cml0ZWwoZW1jLCBUUlBhYl93YXIsIEVNQ19UUlBB Qik7Cj4+ICsJCQl9Cj4+ICsJCQllbWNfdGltaW5nX3VwZGF0ZShlbWMsIERVQUxfQ0hBTk5FTCk7 Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQllbWNfY2NfZGJnKElORk8sICJTa2lwcGVkIFdBUlxuIik7 Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlpZiAoIWZzcF9mb3JfbmV4dF9mcmVxKSB7Cj4+ICsJ CW1yMTNfZmxpcF9mc3B3ciA9IChuZXh0X3RpbWluZy0+ZW1jX21ydzMgJiAweGZmZmZmZjNmKSB8 IDB4ODA7Cj4+ICsJCW1yMTNfZmxpcF9mc3BvcCA9IChuZXh0X3RpbWluZy0+ZW1jX21ydzMgJiAw eGZmZmZmZjNmKSB8IDB4MDA7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJbXIxM19mbGlwX2ZzcHdyID0g KG5leHRfdGltaW5nLT5lbWNfbXJ3MyAmIDB4ZmZmZmZmM2YpIHwgMHg0MDsKPj4gKwkJbXIxM19m bGlwX2ZzcG9wID0gKG5leHRfdGltaW5nLT5lbWNfbXJ3MyAmIDB4ZmZmZmZmM2YpIHwgMHhjMDsK Pj4gKwl9Cj4+ICsKPj4gKwltcjEzX2NhdHJfZW5hYmxlID0gKG1yMTNfZmxpcF9mc3B3ciAmIDB4 RkZGRkZGRkUpIHwgMHgwMTsKPj4gKwlpZiAoZHJhbV9kZXZfbnVtID09IFRXT19SQU5LKQo+PiAr CQltcjEzX2NhdHJfZW5hYmxlID0gKG1yMTNfY2F0cl9lbmFibGUgJiAweDNmZmZmZmZmKSB8IDB4 ODAwMDAwMDA7Cj4+ICsKPj4gKwlpZiAoZHJhbV90eXBlID09IERSQU1fVFlQRV9MUEREUjQpIHsK Pj4gKwkJZW1jX3dyaXRlbChlbWMsIG1yMTNfZmxpcF9mc3B3ciwgRU1DX01SVzMpOwo+PiArCQll bWNfd3JpdGVsKGVtYywgbmV4dF90aW1pbmctPmVtY19tcncsIEVNQ19NUlcpOwo+PiArCQllbWNf d3JpdGVsKGVtYywgbmV4dF90aW1pbmctPmVtY19tcncyLCBFTUNfTVJXMik7Cj4+ICsJfQo+PiAr Cj4+ICsJLyoKPj4gKwkgKiBTdGVwIDg6Cj4+ICsJICogICBQcm9ncmFtIHRoZSBzaGFkb3cgcmVn aXN0ZXJzLgo+PiArCSAqLwo+PiArCWVtY19jY19kYmcoU1RFUFMsICJTdGVwIDhcbiIpOwo+PiAr CWVtY19jY19kYmcoU1VCX1NURVBTLCAiV3JpdGluZyBidXJzdF9yZWdzXG4iKTsKPj4gKwlmb3Ig KGkgPSAwOyBpIDwgbmV4dF90aW1pbmctPm51bV9idXJzdDsgaSsrKSB7Cj4+ICsJCXUzMiB2YXI7 Cj4+ICsJCXUzMiB3dmFsOwo+PiArCj4+ICsJCWlmICghYnVyc3RfcmVnc19vZmZbaV0pCj4+ICsJ CQljb250aW51ZTsKPj4gKwo+PiArCQl2YXIgPSBidXJzdF9yZWdzX29mZltpXTsKPj4gKwkJd3Zh bCA9IG5leHRfdGltaW5nLT5idXJzdF9yZWdzW2ldOwo+PiArCj4+ICsJCWlmIChkcmFtX3R5cGUg IT0gRFJBTV9UWVBFX0xQRERSNCAmJgo+PiArCQkgICAgKHZhciA9PSBFTUNfTVJXNiAgICAgIHx8 IHZhciA9PSBFTUNfTVJXNyB8fAo+PiArCQkgICAgIHZhciA9PSBFTUNfTVJXOCAgICAgIHx8IHZh ciA9PSBFTUNfTVJXOSB8fAo+PiArCQkgICAgIHZhciA9PSBFTUNfTVJXMTAgICAgIHx8IHZhciA9 PSBFTUNfTVJXMTEgfHwKPj4gKwkJICAgICB2YXIgPT0gRU1DX01SVzEyICAgICB8fCB2YXIgPT0g RU1DX01SVzEzIHx8Cj4+ICsJCSAgICAgdmFyID09IEVNQ19NUlcxNCAgICAgfHwgdmFyID09IEVN Q19NUlcxNSB8fAo+PiArCQkgICAgIHZhciA9PSBFTUNfVFJBSU5JTkdfQ1RSTCkpCj4+ICsJCQlj b250aW51ZTsKPj4gKwo+PiArCQkvKiBQYWluLi4uIEFuZCBzdWZmZXJpbmcuICovCj4+ICsJCWlm ICh2YXIgPT0gRU1DX0NGRykgewo+PiArCQkJd3ZhbCAmPSB+RU1DX0NGR19EUkFNX0FDUEQ7Cj4+ ICsJCQl3dmFsICY9IH5FTUNfQ0ZHX0RZTl9TRUxGX1JFRjsKPj4gKwkJCWlmIChkcmFtX3R5cGUg PT0gRFJBTV9UWVBFX0xQRERSNCkgewo+PiArCQkJCXd2YWwgJj0gfkVNQ19DRkdfRFJBTV9DTEtT VE9QX1NSOwo+PiArCQkJCXd2YWwgJj0gfkVNQ19DRkdfRFJBTV9DTEtTVE9QX1BEOwo+PiArCQkJ fQo+PiArCQl9IGVsc2UgaWYgKHZhciA9PSBFTUNfTVJTX1dBSVRfQ05UICYmCj4+ICsJCQkgICBk cmFtX3R5cGUgPT0gRFJBTV9UWVBFX0xQRERSMiAmJgo+PiArCQkJICAgb3B0X3pjYWxfZW5fY2Mg JiYgIW9wdF9jY19zaG9ydF96Y2FsICYmCj4+ICsJCQkgICBvcHRfc2hvcnRfemNhbCkgewo+PiAr CQkJd3ZhbCA9ICh3dmFsICYgfihFTUNfTVJTX1dBSVRfQ05UX1NIT1JUX1dBSVRfTUFTSyA8PAo+ PiArCQkJCQkgRU1DX01SU19XQUlUX0NOVF9TSE9SVF9XQUlUX1NISUZUKSkgfAo+PiArCQkJICAg KCh6cV93YWl0X2xvbmcgJiBFTUNfTVJTX1dBSVRfQ05UX1NIT1JUX1dBSVRfTUFTSykgPDwKPj4g KwkJCSAgICBFTUNfTVJTX1dBSVRfQ05UX1NIT1JUX1dBSVRfU0hJRlQpOwo+PiArCQl9IGVsc2Ug aWYgKHZhciA9PSBFTUNfWkNBTF9XQUlUX0NOVCAmJgo+PiArCQkJICAgZHJhbV90eXBlID09IERS QU1fVFlQRV9ERFIzICYmIG9wdF96Y2FsX2VuX2NjICYmCj4+ICsJCQkgICAhb3B0X2NjX3Nob3J0 X3pjYWwgJiYgb3B0X3Nob3J0X3pjYWwpIHsKPj4gKwkJCXd2YWwgPSAod3ZhbCAmIH4oRU1DX1pD QUxfV0FJVF9DTlRfWkNBTF9XQUlUX0NOVF9NQVNLIDw8Cj4+ICsJCQkJCSBFTUNfWkNBTF9XQUlU X0NOVF9aQ0FMX1dBSVRfQ05UX1NISUZUKSkKPj4gKwkJCSAgICAgICB8ICgoenFfd2FpdF9sb25n ICYKPj4gKwkJCQkgICBFTUNfWkNBTF9XQUlUX0NOVF9aQ0FMX1dBSVRfQ05UX01BU0spIDw8Cj4+ ICsJCQkJICBFTUNfTVJTX1dBSVRfQ05UX1NIT1JUX1dBSVRfU0hJRlQpOwo+PiArCQl9IGVsc2Ug aWYgKHZhciA9PSBFTUNfWkNBTF9JTlRFUlZBTCAmJiBvcHRfemNhbF9lbl9jYykgewo+PiArCQkJ d3ZhbCA9IDA7IC8qIEVNQ19aQ0FMX0lOVEVSVkFMIHJlc2V0IHZhbHVlLiAqLwo+PiArCQl9IGVs c2UgaWYgKHZhciA9PSBFTUNfUE1BQ1JPX0FVVE9DQUxfQ0ZHX0NPTU1PTikgewo+PiArCQkJd3Zh bCB8PSBFTUNfUE1BQ1JPX0FVVE9DQUxfQ0ZHX0NPTU1PTl9FX0NBTF9CWVBBU1NfRFZGUzsKPj4g KwkJfSBlbHNlIGlmICh2YXIgPT0gRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMKSB7Cj4+ICsJ CQl3dmFsICY9Cj4+ICsJCQkgICAgIH4oRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0RBVEFf RFFTUF9UWF9FX0RDQyB8Cj4+ICsJCQkgICAgICAgRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJM X0RBVEFfRFFTTl9UWF9FX0RDQyB8Cj4+ICsJCQkgICAgICAgRU1DX1BNQUNST19EQVRBX1BBRF9U WF9DVFJMX0RBVEFfRFFfVFhfRV9EQ0MgfAo+PiArCQkJICAgICAgIEVNQ19QTUFDUk9fREFUQV9Q QURfVFhfQ1RSTF9EQVRBX0NNRF9UWF9FX0RDQyk7Cj4+ICsJCX0gZWxzZSBpZiAodmFyID09IEVN Q19QTUFDUk9fQ01EX1BBRF9UWF9DVFJMKSB7Cj4+ICsJCQl3dmFsIHw9IEVNQ19QTUFDUk9fQ01E X1BBRF9UWF9DVFJMX0NNRF9EUV9UWF9EUlZGT1JDRU9OOwo+PiArCQkJd3ZhbCAmPSB+KEVNQ19Q TUFDUk9fQ01EX1BBRF9UWF9DVFJMX0NNRF9EUVNQX1RYX0VfRENDIHwKPj4gKwkJCQkgIEVNQ19Q TUFDUk9fQ01EX1BBRF9UWF9DVFJMX0NNRF9EUVNOX1RYX0VfRENDIHwKPj4gKwkJCQkgIEVNQ19Q TUFDUk9fQ01EX1BBRF9UWF9DVFJMX0NNRF9EUV9UWF9FX0RDQyB8Cj4+ICsJCQkJICBFTUNfUE1B Q1JPX0NNRF9QQURfVFhfQ1RSTF9DTURfQ01EX1RYX0VfRENDKTsKPj4gKwkJfSBlbHNlIGlmICh2 YXIgPT0gRU1DX1BNQUNST19CUklDS19DVFJMX1JGVTEpIHsKPj4gKwkJCXd2YWwgJj0gMHhmODAw ZjgwMDsKPj4gKwkJfSBlbHNlIGlmICh2YXIgPT0gRU1DX1BNQUNST19DT01NT05fUEFEX1RYX0NU UkwpIHsKPj4gKwkJCXd2YWwgJj0gMHhmZmZmZmZmMDsKPj4gKwkJfQo+PiArCj4+ICsJCWVtY193 cml0ZWwoZW1jLCB3dmFsLCB2YXIpOwo+PiArCX0KPj4gKwo+PiArCS8qIFNXIGFkZGl0aW9uOiBk byBFTUMgcmVmcmVzaCBhZGp1c3RtZW50IGhlcmUuICovCj4+ICsJc2V0X292ZXJfdGVtcF90aW1p bmcoZW1jLCBuZXh0X3RpbWluZywgZHJhbV9vdmVyX3RlbXBfc3RhdGUpOwo+PiArCj4+ICsJaWYg KGRyYW1fdHlwZSA9PSBEUkFNX1RZUEVfTFBERFI0KSB7Cj4+ICsJCW1yd19yZXEgPSAoMjMgPDwg RU1DX01SV19NUldfTUFfU0hJRlQpIHwKPj4gKwkJCSAgKG5leHRfdGltaW5nLT5ydW5fY2xvY2tz ICYgRU1DX01SV19NUldfT1BfTUFTSyk7Cj4+ICsJCWVtY193cml0ZWwoZW1jLCBtcndfcmVxLCBF TUNfTVJXKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBQZXIgY2hhbm5lbCBidXJzdCByZWdpc3RlcnMu ICovCj4+ICsJZW1jX2NjX2RiZyhTVUJfU1RFUFMsICJXcml0aW5nIGJ1cnN0X3JlZ3NfcGVyX2No XG4iKTsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbmV4dF90aW1pbmctPm51bV9idXJzdF9wZXJfY2g7 IGkrKykgewo+PiArCQlpZiAoIWJ1cnN0X3JlZ3NfcGVyX2NoX29mZltpXSkKPj4gKwkJCWNvbnRp bnVlOwo+PiArCj4+ICsJCWlmIChkcmFtX3R5cGUgIT0gRFJBTV9UWVBFX0xQRERSNCAmJgo+PiAr CQkgICAgKGJ1cnN0X3JlZ3NfcGVyX2NoX29mZltpXSA9PSBFTUNfTVJXNiB8fAo+PiArCQkgICAg IGJ1cnN0X3JlZ3NfcGVyX2NoX29mZltpXSA9PSBFTUNfTVJXNyB8fAo+PiArCQkgICAgIGJ1cnN0 X3JlZ3NfcGVyX2NoX29mZltpXSA9PSBFTUNfTVJXOCB8fAo+PiArCQkgICAgIGJ1cnN0X3JlZ3Nf cGVyX2NoX29mZltpXSA9PSBFTUNfTVJXOSB8fAo+PiArCQkgICAgIGJ1cnN0X3JlZ3NfcGVyX2No X29mZltpXSA9PSBFTUNfTVJXMTAgfHwKPj4gKwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9vZmZb aV0gPT0gRU1DX01SVzExIHx8Cj4+ICsJCSAgICAgYnVyc3RfcmVnc19wZXJfY2hfb2ZmW2ldID09 IEVNQ19NUlcxMiB8fAo+PiArCQkgICAgIGJ1cnN0X3JlZ3NfcGVyX2NoX29mZltpXSA9PSBFTUNf TVJXMTMgfHwKPj4gKwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9vZmZbaV0gPT0gRU1DX01SVzE0 IHx8Cj4+ICsJCSAgICAgYnVyc3RfcmVnc19wZXJfY2hfb2ZmW2ldID09IEVNQ19NUlcxNSkpCj4+ ICsJCQljb250aW51ZTsKPj4gKwo+PiArCQkvKiBGaWx0ZXIgb3V0IHNlY29uZCBjaGFubmVsIGlm IG5vdCBpbiBEVUFMX0NIQU5ORUwgbW9kZS4gKi8KPj4gKwkJaWYgKGNoYW5uZWxfbW9kZSAhPSBE VUFMX0NIQU5ORUwgJiYKPj4gKwkJICAgIGJ1cnN0X3JlZ3NfcGVyX2NoX3R5cGVbaV0gPj0gUkVH X0VNQzEpCj4+ICsJCQljb250aW51ZTsKPj4gKwo+PiArCQllbWNfY2NfZGJnKFJFR19MSVNUUywg IigldSkgMHglMDh4ID0+IDB4JTA4eFxuIiwKPj4gKwkJCSAgIGksIG5leHRfdGltaW5nLT5idXJz dF9yZWdfcGVyX2NoW2ldLAo+PiArCQkJICAgYnVyc3RfcmVnc19wZXJfY2hfb2ZmW2ldKTsKPj4g KwkJZW1jX3dyaXRlbF9wZXJfY2goZW1jLCBuZXh0X3RpbWluZy0+YnVyc3RfcmVnX3Blcl9jaFtp XSwKPj4gKwkJCQkgIGJ1cnN0X3JlZ3NfcGVyX2NoX3R5cGVbaV0sCj4+ICsJCQkJICBidXJzdF9y ZWdzX3Blcl9jaF9vZmZbaV0pOwo+PiArCX0KPj4gKwo+PiArCS8qIFZyZWYgcmVncy4gKi8KPj4g KwllbWNfY2NfZGJnKFNVQl9TVEVQUywgIldyaXRpbmcgdnJlZl9yZWdzXG4iKTsKPj4gKwlmb3Ig KGkgPSAwOyBpIDwgbmV4dF90aW1pbmctPnZyZWZfbnVtOyBpKyspIHsKPj4gKwkJaWYgKCF2cmVm X3JlZ3NfcGVyX2NoX29mZltpXSkKPj4gKwkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCWlmIChjaGFu bmVsX21vZGUgIT0gRFVBTF9DSEFOTkVMICYmCj4+ICsJCQl2cmVmX3JlZ3NfcGVyX2NoX3R5cGVb aV0gPj0gUkVHX0VNQzEpCj4+ICsJCQljb250aW51ZTsKPj4gKwo+PiArCQllbWNfY2NfZGJnKFJF R19MSVNUUywgIigldSkgMHglMDh4ID0+IDB4JTA4eFxuIiwKPj4gKwkJCSAgIGksIG5leHRfdGlt aW5nLT52cmVmX3BlcmNoX3JlZ3NbaV0sCj4+ICsJCQkgICB2cmVmX3JlZ3NfcGVyX2NoX29mZltp XSk7Cj4+ICsJCWVtY193cml0ZWxfcGVyX2NoKGVtYywgbmV4dF90aW1pbmctPnZyZWZfcGVyY2hf cmVnc1tpXSwKPj4gKwkJCQkgIHZyZWZfcmVnc19wZXJfY2hfdHlwZVtpXSwKPj4gKwkJCQkgIHZy ZWZfcmVnc19wZXJfY2hfb2ZmW2ldKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBUcmltbWVycy4gKi8K Pj4gKwllbWNfY2NfZGJnKFNVQl9TVEVQUywgIldyaXRpbmcgdHJpbV9yZWdzXG4iKTsKPj4gKwlm b3IgKGkgPSAwOyBpIDwgbmV4dF90aW1pbmctPm51bV90cmltOyBpKyspIHsKPj4gKwkJdTY0IHRy aW1fcmVnOwo+PiArCj4+ICsJCWlmICghdHJpbV9yZWdzX29mZltpXSkKPj4gKwkJCWNvbnRpbnVl Owo+PiArCj4+ICsJCXRyaW1fcmVnID0gdHJpbV9yZWdzX29mZltpXTsKPj4gKwkJaWYgKGNvbXBl bnNhdGVfdHJpbW1lcl9hcHBsaWNhYmxlICYmCj4+ICsJCSAgICAodHJpbV9yZWcgPT0gRU1DX1BN QUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMCB8fAo+PiArCQkgICAgIHRyaW1fcmVnID09IEVN Q19QTUFDUk9fT0JfRERMTF9MT05HX0RRX1JBTkswXzEgfHwKPj4gKwkJICAgICB0cmltX3JlZyA9 PSBFTUNfUE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMF8yIHx8Cj4+ICsJCSAgICAgdHJpbV9y ZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMyB8fAo+PiArCQkgICAgIHRy aW1fcmVnID09IEVNQ19QTUFDUk9fT0JfRERMTF9MT05HX0RRX1JBTksxXzAgfHwKPj4gKwkJICAg ICB0cmltX3JlZyA9PSBFTUNfUE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMV8xIHx8Cj4+ICsJ CSAgICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMiB8fAo+ PiArCQkgICAgIHRyaW1fcmVnID09IEVNQ19QTUFDUk9fT0JfRERMTF9MT05HX0RRX1JBTksxXzMg fHwKPj4gKwkJICAgICB0cmltX3JlZyA9PSBFTUNfREFUQV9CUkxTSEZUXzAgfHwKPj4gKwkJICAg ICB0cmltX3JlZyA9PSBFTUNfREFUQV9CUkxTSEZUXzEpKSB7Cj4+ICsJCQl1MzIgcmVnID0gdGVn cmEyMTBfYXBwbHlfcGVyaW9kaWNfY29tcGVuc2F0aW9uX3RyaW1tZXIoCj4+ICsJCQkJICBuZXh0 X3RpbWluZywgdHJpbV9yZWcpOwo+PiArCQkJZW1jX2NjX2RiZyhSRUdfTElTVFMsICIoJXUpIDB4 JTA4eCA9PiAweCUwOHhcbiIsIGksIHJlZywKPj4gKwkJCQkgICB0cmltX3JlZ3Nfb2ZmW2ldKTsK Pj4gKwkJCWVtY19jY19kYmcoRU1BX1dSSVRFUywgIjB4JTA4eCA8PSAweCUwOHhcbiIsCj4+ICsJ CQkJICAgKHUzMikodTY0KXRyaW1fcmVnc19vZmZbaV0sIHJlZyk7Cj4+ICsJCQllbWNfd3JpdGVs KGVtYywgcmVnLCB0cmltX3JlZ3Nfb2ZmW2ldKTsKPj4gKwkJfSBlbHNlIHsKPj4gKwkJCWVtY19j Y19kYmcoUkVHX0xJU1RTLCAiKCV1KSAweCUwOHggPT4gMHglMDh4XG4iLAo+PiArCQkJCSAgIGks IG5leHRfdGltaW5nLT50cmltX3JlZ3NbaV0sCj4+ICsJCQkJICAgdHJpbV9yZWdzX29mZltpXSk7 Cj4+ICsJCQllbWNfd3JpdGVsKGVtYywgbmV4dF90aW1pbmctPnRyaW1fcmVnc1tpXSwKPj4gKwkJ CQkgICB0cmltX3JlZ3Nfb2ZmW2ldKTsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCS8qIFBlciBj aGFubmVsIHRyaW1tZXJzLiAqLwo+PiArCWVtY19jY19kYmcoU1VCX1NURVBTLCAiV3JpdGluZyB0 cmltX3JlZ3NfcGVyX2NoXG4iKTsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbmV4dF90aW1pbmctPm51 bV90cmltX3Blcl9jaDsgaSsrKSB7Cj4+ICsJCXUzMiB0cmltX3JlZzsKPj4gKwo+PiArCQlpZiAo IXRyaW1fcmVnc19wZXJfY2hfb2ZmW2ldKQo+PiArCQkJY29udGludWU7Cj4+ICsKPj4gKwkJaWYg KGNoYW5uZWxfbW9kZSAhPSBEVUFMX0NIQU5ORUwgJiYKPj4gKwkJCXRyaW1fcmVnc19wZXJfY2hf dHlwZVtpXSA+PSBSRUdfRU1DMSkKPj4gKwkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCXRyaW1fcmVn ID0gdHJpbV9yZWdzX3Blcl9jaF9vZmZbaV07Cj4+ICsJCWlmIChjb21wZW5zYXRlX3RyaW1tZXJf YXBwbGljYWJsZSAmJgo+PiArCQkgICAgKHRyaW1fcmVnID09IEVNQ19QTUFDUk9fT0JfRERMTF9M T05HX0RRX1JBTkswXzAgfHwKPj4gKwkJICAgICB0cmltX3JlZyA9PSBFTUNfUE1BQ1JPX09CX0RE TExfTE9OR19EUV9SQU5LMF8xIHx8Cj4+ICsJCSAgICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19P Ql9ERExMX0xPTkdfRFFfUkFOSzBfMiB8fAo+PiArCQkgICAgIHRyaW1fcmVnID09IEVNQ19QTUFD Uk9fT0JfRERMTF9MT05HX0RRX1JBTkswXzMgfHwKPj4gKwkJICAgICB0cmltX3JlZyA9PSBFTUNf UE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMV8wIHx8Cj4+ICsJCSAgICAgdHJpbV9yZWcgPT0g RU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMSB8fAo+PiArCQkgICAgIHRyaW1fcmVn ID09IEVNQ19QTUFDUk9fT0JfRERMTF9MT05HX0RRX1JBTksxXzIgfHwKPj4gKwkJICAgICB0cmlt X3JlZyA9PSBFTUNfUE1BQ1JPX09CX0RETExfTE9OR19EUV9SQU5LMV8zIHx8Cj4+ICsJCSAgICAg dHJpbV9yZWcgPT0gRU1DX0RBVEFfQlJMU0hGVF8wIHx8Cj4+ICsJCSAgICAgdHJpbV9yZWcgPT0g RU1DX0RBVEFfQlJMU0hGVF8xKSkgewo+PiArCQkJdTMyIHJlZyA9Cj4+ICsJCQkJdGVncmEyMTBf YXBwbHlfcGVyaW9kaWNfY29tcGVuc2F0aW9uX3RyaW1tZXIoCj4+ICsJCQkJCQluZXh0X3RpbWlu ZywgdHJpbV9yZWcpOwo+PiArCQkJZW1jX2NjX2RiZyhSRUdfTElTVFMsICIoJXUpIDB4JTA4eCA9 PiAweCUwOHhcbiIsCj4+ICsJCQkJICAgaSwgcmVnLCB0cmltX3JlZ3NfcGVyX2NoX29mZltpXSk7 Cj4+ICsJCQllbWNfY2NfZGJnKEVNQV9XUklURVMsICIweCUwOHggPD0gMHglMDh4XG4iLAo+PiAr CQkJCSAgIHRyaW1fcmVnc19wZXJfY2hfb2ZmW2ldLCByZWcpOwo+PiArCQkJZW1jX3dyaXRlbF9w ZXJfY2goZW1jLCByZWcsIHRyaW1fcmVnc19wZXJfY2hfdHlwZVtpXSwKPj4gKwkJCQkJICB0cmlt X3JlZ3NfcGVyX2NoX29mZltpXSk7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQllbWNfY2NfZGJnKFJF R19MSVNUUywgIigldSkgMHglMDh4ID0+IDB4JTA4eFxuIiwKPj4gKwkJCQkgICBpLCBuZXh0X3Rp bWluZy0+dHJpbV9wZXJjaF9yZWdzW2ldLAo+PiArCQkJCSAgIHRyaW1fcmVnc19wZXJfY2hfb2Zm W2ldKTsKPj4gKwkJCWVtY193cml0ZWxfcGVyX2NoKGVtYywgbmV4dF90aW1pbmctPnRyaW1fcGVy Y2hfcmVnc1tpXSwKPj4gKwkJCQkJICB0cmltX3JlZ3NfcGVyX2NoX3R5cGVbaV0sCj4+ICsJCQkJ CSAgdHJpbV9yZWdzX3Blcl9jaF9vZmZbaV0pOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJZW1j X2NjX2RiZyhTVUJfU1RFUFMsICJXcml0aW5nIGJ1cnN0X21jX3JlZ3NcbiIpOwo+PiArCWZvciAo aSA9IDA7IGkgPCBuZXh0X3RpbWluZy0+bnVtX21jX3JlZ3M7IGkrKykgewo+PiArCQllbWNfY2Nf ZGJnKFJFR19MSVNUUywgIigldSkgMHglMDh4ID0+IDB4JTA4eFxuIiwKPj4gKwkJCSAgIGksIG5l eHRfdGltaW5nLT5idXJzdF9tY19yZWdzW2ldLAo+PiArCQkJICAgYnVyc3RfbWNfcmVnc19vZmZb aV0pOwo+PiArCQltY193cml0ZWwoZW1jLT5tYywgbmV4dF90aW1pbmctPmJ1cnN0X21jX3JlZ3Nb aV0sCj4+ICsJCQkgIGJ1cnN0X21jX3JlZ3Nfb2ZmW2ldKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBS ZWdpc3RlcnMgdG8gYmUgcHJvZ3JhbW1lZCBvbiB0aGUgZmFzdGVyIGNsb2NrLiAqLwo+PiArCWlm IChuZXh0X3RpbWluZy0+cmF0ZSA8IGxhc3RfdGltaW5nLT5yYXRlKSB7Cj4+ICsJCWVtY19jY19k YmcoU1VCX1NURVBTLCAiV3JpdGluZyBsYV9zY2FsZV9yZWdzXG4iKTsKPj4gKwkJZm9yIChpID0g MDsgaSA8IG5leHRfdGltaW5nLT5udW1fdXBfZG93bjsgaSsrKSB7Cj4+ICsJCQllbWNfY2NfZGJn KFJFR19MSVNUUywgIigldSkgMHglMDh4ID0+IDB4JTA4eFxuIiwKPj4gKwkJCQkgICBpLCBuZXh0 X3RpbWluZy0+bGFfc2NhbGVfcmVnc1tpXSwKPj4gKwkJCQkgICBsYV9zY2FsZV9yZWdzX29mZltp XSk7Cj4+ICsJCQltY193cml0ZWwoZW1jLT5tYywgbmV4dF90aW1pbmctPmxhX3NjYWxlX3JlZ3Nb aV0sCj4+ICsJCQkJICBsYV9zY2FsZV9yZWdzX29mZltpXSk7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsK Pj4gKwkvKiBGbHVzaCBhbGwgdGhlIGJ1cnN0IHJlZ2lzdGVyIHdyaXRlcy4gKi8KPj4gKwl3bWIo KTsKPiAKPiBXb24ndCBpdCBiZSBhIGJpdCBtb3JlIG9wdGltYWwgdG8ganVzdCByZWFkIGJhY2sg dGhlIGxhc3RseSB3cml0dGVuIHJlZ2lzdGVyIHJhdGhlciB0aGFuIHRvIGZsdXNoIGFsbCBvZiBt ZW1vcnkgd3JpdGVzPwo+IApZZXMsIHNob3VsZCBiZSBmaW5lLiBJJ2xsIGdpdmUgaXQgYSB0cnku CgpUaGFua3MsCkpvc2VwaAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=