From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id CF80D7F50 for ; Thu, 21 Feb 2013 19:35:06 -0600 (CST) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 93C3D304053 for ; Thu, 21 Feb 2013 17:35:03 -0800 (PST) Received: from ipmail06.adl6.internode.on.net (ipmail06.adl6.internode.on.net [150.101.137.145]) by cuda.sgi.com with ESMTP id w8ctZBIXrUkYfrmZ for ; Thu, 21 Feb 2013 17:35:00 -0800 (PST) Date: Fri, 22 Feb 2013 12:34:56 +1100 From: Dave Chinner Subject: Re: [PATCH 2/9] xfs: add support for large btree blocks Message-ID: <20130222013456.GN26694@dastard> References: <1358774760-21841-1-git-send-email-david@fromorbit.com> <1358774760-21841-3-git-send-email-david@fromorbit.com> <20130215212015.GO22182@sgi.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20130215212015.GO22182@sgi.com> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com To: Ben Myers Cc: xfs@oss.sgi.com T24gRnJpLCBGZWIgMTUsIDIwMTMgYXQgMDM6MjA6MTVQTSAtMDYwMCwgQmVuIE15ZXJzIHdyb3Rl Ogo+IE9uIFR1ZSwgSmFuIDIyLCAyMDEzIGF0IDEyOjI1OjUzQU0gKzExMDAsIERhdmUgQ2hpbm5l ciB3cm90ZToKPiA+IEZyb206IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgo+ID4gCj4g PiBBZGQgc3VwcG9ydCBmb3IgbGFyZ2VyIGJ0cmVlIGJsb2NrcyB0aGF0IGNvbnRhaW5zIGEgQ1JD MzJDIGNoZWNrc3VtLAo+ID4gYSBmaWxlc3lzdGVtIHV1aWQgYW5kIGJsb2NrIG51bWJlciBmb3Ig ZGV0ZWN0aW5nIGZpbGVzeXN0ZW0KPiA+IGNvbnNpc3RlbmN5IGFuZCBvdXQgb2YgcGxhY2Ugd3Jp dGVzLgo+ID4gCj4gPiBbZGNoaW5uZXJAcmVkaGF0LmNvbV0gQWxzbyBpbmNsdWRlIGFuIG93bmVy IGZpZWxkIHRvIGFsbG93IHJldmVyc2UKPiA+IG1hcHBpbmdzIHRvIGJlIGltcGxlbWVudGVkIGZv ciBpbXByb3ZlZCByZXBhaXJhYmlsaXR5IGFuZCBhIExTTgo+ID4gZmllbGQgdG8gc28gdGhhdCBs b2cgcmVjb3ZlcnkgY2FuIGVhc2lseSBkZXRlcm1pbmUgdGhlIGxhc3QKPiA+IG1vZGlmaWNhdGlv biB0aGF0IG1hZGUgaXQgdG8gZGlzayBmb3IgZWFjaCBidWZmZXIuCj4gPiAKPiA+IFtkY2hpbm5l ckByZWRoYXQuY29tXSBBZGQgYnVmZmVyIGxvZyBmb3JtYXQgZmxhZ3MgdG8gaW5kaWNhdGUgdGhl Cj4gPiB0eXBlIG9mIGJ1ZmZlciB0byByZWNvdmVyeSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8g ZG8gYmxpbmQgbWFnaWMKPiA+IG51bWJlciB0ZXN0cyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgYnVm ZmVyIGlzLgo+ID4gCj4gPiBbZGNoaW5uZXJAcmVkaGF0LmNvbV0gTW9kaWZpZWQgdG8gZml0IGlu dG8gdGhlIHZlcmlmaWVyIHN0cnVjdHVyZS4KPiAKPiBUaGlzIHBhdGNoIGlzIGZhciB0b28gbGFy Z2UgZm9yIGEgZ29vZCByZXZpZXcuICBJdCBuZWVkcyB0byBiZSBzcGxpdCB1cCBpbnRvCj4gaXQn cyB2YXJpb3VzIGlkZWFzIHdoaWNoIHlvdSBvdXRsaW5lZCBpbiBwYXRjaCAwLiAgSWYgeW91IG5l ZWQgdG8gYWRkIGRlYWQgY29kZQo+IGluIGVhY2ggcGllY2UgYW5kIHRoZW4gZW5hYmxlIGl0IGF0 IHRoZSBlbmQsIHRoYXQncyBmaW5lIHdpdGggbWUuCgpZb3Ugd2FudCBpdCBicm9rZW4gdXAgaW50 byA3IG9yIDggc2VwYXJhdGUgcGF0Y2hlcyAtIHdoYXQgZG9lcyBpdApnYWluIHVzPyBJdCdsbCB0 YWtlIGEgd2VlayBmb3IgbWUgdG8gZG8gdGhlIHBhdGNoIG1vbmtleWluZyBhbmQgdG8KcmV0ZXN0 IGFuZCB2YWxpZGF0ZSB0aGUgcmVzdWx0aW5nIHN0YWNrIChpLmUuIGl0IGlzIGJpc2VjdGFibGUs IGVhY2gKcGF0Y2ggcGFzc2VzIHhmc3Rlc3RzLCBldGMpLCBhbmQgaW4gdGhlIGVuZCB0aGUgY29k ZSB3aWxsIGJlCmlkZW50aWNhbC4KCkFzIEkndmUgc2FpZCBiZWZvcmUsIHRoZXJlJ3MgYSBwb2lu dCB3aGVyZSB0aGUgdHJhZGVvZmYgZm9yCnNwbGl0dGluZyBwYXRjaGVzIHVwIGRvZXNuJ3QgbWFr ZSBzZW5zZS4gQXNraW5nIGEgZGV2ZWxvcGVyIHRvIGRvCmRheXMgb2Ygd29yayB0byBlbmQgdXAg d2l0aCBleGFjdGx5IHRoZSBzYW1lIGNvZGUgdG8gc2F2ZSB0aGUKcmV2aWV3ZXIgYW4gaG91ciBv ciB0d28gaXMgKm5vdCogYSBnb29kIHRyYWRlb2ZmLiBFc3BlY2lhbGx5IGZvciB0aGUKZmlyc3Qg cGF0Y2ggb2YgYSBtdWNoIGxhcmdlciAxNS0yMCBwYXRjaCBzZXJpZXMgd2hpY2ggY29udGFpbnMK c2V2ZXJhbCBsYXJnZXIgYW5kIG1vcmUgY29tcGxleCBwYXRjaGVzLi4uLgoKPiBTb21lIGNvbW1l bnRzIGJlbG93LgouLi4uCj4gPiBAQCAtNTksMTAgKzYxLDEwIEBAIHR5cGVkZWYgX19iZTMyIHhm c19hbGxvY19wdHJfdDsKPiA+ICAKPiA+ICAvKgo+ID4gICAqIEJ0cmVlIGJsb2NrIGhlYWRlciBz aXplIGRlcGVuZHMgb24gYSBzdXBlcmJsb2NrIGZsYWcuCj4gPiAtICoKPiA+IC0gKiAobm90IHF1 aXRlIHlldCwgYnV0IHNvb24pCj4gPiAgICovCj4gPiAtI2RlZmluZSBYRlNfQUxMT0NfQkxPQ0tf TEVOKG1wKQlYRlNfQlRSRUVfU0JMT0NLX0xFTgo+ID4gKyNkZWZpbmUgWEZTX0FMTE9DX0JMT0NL X0xFTihtcCkgXAo+ID4gKwkoeGZzX3NiX3ZlcnNpb25faGFzY3JjKCYoKG1wKS0+bV9zYikpID8g XAo+ID4gKwkJWEZTX0JUUkVFX1NCTE9DS19DUkNfTEVOIDogWEZTX0JUUkVFX1NCTE9DS19MRU4p Cj4gCj4gVGhlIGFsbG9jYnQgY2hhbmdlcyBzZWVtIHRvIGJlIGEgZ29vZCBmaXQgZm9yIHRoZWly IG93biBwYXRjaC4KCkl0J3MgdXNlZCBpbiBleGFjdGx5IDQgcGxhY2VzIGFuZCB0aHJlZSBvZiB0 aGVtIGFyZSBpbiB0aGUgbmV4dCAxMApsaW5lcy4gVGhhdCdzIHRyaXZpYWwgdG8gdmFsaWRhdGUg YXMgY29ycmVjdCB3aXRob3V0IG5lZWRpbmcgdGhlbSBpbgphIHNlcGFyYXRlIHBhdGNoLgoKPiA+ ICAKPiA+ICAvKgo+ID4gICAqIFJlY29yZCwga2V5LCBhbmQgcG9pbnRlciBhZGRyZXNzIG1hY3Jv cyBmb3IgYnRyZWUgYmxvY2tzLgo+ID4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFm LmMgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCj4gPiBpbmRleCBmOTZhNzM0Li5hYTQ3NjVmIDEw MDY0NAo+ID4gLS0tIGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYwo+ID4gKysrIGIvZnMveGZzL3hm c19hdHRyX2xlYWYuYwo+ID4gQEAgLTIzMiw3ICsyMzIsNyBAQCB4ZnNfYXR0cl9zaG9ydGZvcm1f Ynl0ZXNmaXQoeGZzX2lub2RlX3QgKmRwLCBpbnQgYnl0ZXMpCj4gPiAgCQkJCXJldHVybiAwOwo+ ID4gIAkJCXJldHVybiBkcC0+aV9kLmRpX2ZvcmtvZmY7Cj4gPiAgCQl9Cj4gPiAtCQlkc2l6ZSA9 IFhGU19CTUFQX0JST09UX1NQQUNFKGRwLT5pX2RmLmlmX2Jyb290KTsKPiA+ICsJCWRzaXplID0g WEZTX0JNQVBfQlJPT1RfU1BBQ0UobXAsIGRwLT5pX2RmLmlmX2Jyb290KTsKPiAKPiBDaGFuZ2Vz IHRvIFhGU19CTUFQX0JST09UX1NQQUNFIGFyZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBhIHNlcGFy YXRlIHBhdGNoLCBqdXN0Cj4gYXMgd2l0aCBMSVRJTk8uCgpVc2VkIGluIG9ubHkgMiBwbGFjZXMu IFRyaXZpYWwgdG8gdmFsaWRhdGUuCgo+ID4gQEAgLTMxNTUsOCArMzE2Myw4IEBAIHhmc19ibWFw X2V4dGVudHNfdG9fYnRyZWUoCj4gPiAgCSAqIERvIGFsbCB0aGlzIGxvZ2dpbmcgYXQgdGhlIGVu ZCBzbyB0aGF0Cj4gPiAgCSAqIHRoZSByb290IGlzIGF0IHRoZSByaWdodCBsZXZlbC4KPiA+ICAJ ICovCj4gPiAtCXhmc19idHJlZV9sb2dfYmxvY2soY3VyLCBhYnAsIFhGU19CQl9BTExfQklUUyk7 Cj4gPiAgCXhmc19idHJlZV9sb2dfcmVjcyhjdXIsIGFicCwgMSwgYmUxNl90b19jcHUoYWJsb2Nr LT5iYl9udW1yZWNzKSk7Cj4gPiArCXhmc19idHJlZV9sb2dfYmxvY2soY3VyLCBhYnAsIFhGU19C Ql9BTExfQklUUyk7Cj4gCj4gSHVoLiAgV2h5IHdhcyB0aGF0IG5lY2Vzc2FyeT8KCkl0IGlzbid0 LgoKPiA+IEBAIC0zMjY4LDggKzMyNzYsMTIgQEAgeGZzX2JtYXBfbG9jYWxfdG9fZXh0ZW50cygK PiA+ICAJCSpmaXJzdGJsb2NrID0gYXJncy5mc2JubzsKPiA+ICAJCWJwID0geGZzX2J0cmVlX2dl dF9idWZsKGFyZ3MubXAsIHRwLCBhcmdzLmZzYm5vLCAwKTsKPiA+ICAJCWJwLT5iX29wcyA9ICZ4 ZnNfYm1idF9idWZfb3BzOwo+ID4gKwo+ID4gIAkJbWVtY3B5KGJwLT5iX2FkZHIsIGlmcC0+aWZf dTEuaWZfZGF0YSwgaWZwLT5pZl9ieXRlcyk7Cj4gCj4gQ29uZmxpY3RzIG5vdyBkdWUgdG8gMWU4 MjM3OWIwCgpJIGtub3cuIEl0J3MgZml4ZWQgaW4gbXkgbG9jYWwgY29weS4uLi4KCj4gCj4gPiAr Cj4gPiArCQl4ZnNfdHJhbnNfYnVmX3NldF90eXBlKHRwLCBicCwgWEZTX0JMRl9CVFJFRV9CVUYp Owo+IAo+IFRoZSB4ZnNfdHJhbnNfYnVmX3NldF90eXBlIGNoYW5nZXMgYXJlIGEgZ29vZCBjYW5k aWRhdGUgZm9yIGEgc2VwYXJhdGUgcGF0Y2guCgpJIGNvdWxkIG91dCB0aGUgeGZzX3RyYW5zX2J1 Zl9zZXRfdHlwZSgpIGNhbGxzIGFuZCBpbmZyc3RydWN0dXJlLApidXQgdGhhdCdzIG9ubHkgMjAt MzAgbGluZXMgb2YgY29kZS4gVGhlIHJlc3Qgb2YgdGhlIGNvZGUgdGhhdAphY3R1YWxseSB1c2Vz IGl0IChlLmcuIHRoZSBsb2cgcmVjb3ZlcnkgY29kZSwgdGhlIGNhbGxzIHRvIHNldCB0aGUKdHlw ZSkgZ29lcyBhbG9uZyB3aXRoIHRoZSBDUkMgbW9kaWZpY2F0aW9ucywgc28gdGhlIG1ham9yaXR5 IG9mIHRoZQpjaGFuZ2Ugc3RpbGwgaGFzIHRvIHNpdCBpbiB0aGUgY3VycmVudCBwYXRjaC4gRG91 YmxlIGhhbmRsaW5nIHRoZQpjb2RlIGJ5IGFkZGluZyBzb21lIGluIG9uZSBwYXRjaCBhbmQgdGhl IHJlc3QgaW4gYW5vdGhlciBtYWtlcyB0aGUKcGF0Y2hlcyBhIHBhaW4gdG8gbW9kaWZ5IGFuZCB0 ZXN0LCBhbmQgd2hlbiBpdCBnaXZlcyB0aGUgc2FtZSBlbmQKcmVzdWx0Li4uLi4KCj4gPiAgLyoK PiA+ICAgKiBCdHJlZSBibG9jayBoZWFkZXIgc2l6ZSBkZXBlbmRzIG9uIGEgc3VwZXJibG9jayBm bGFnLgo+ID4gLSAqCj4gPiAtICogKG5vdCBxdWl0ZSB5ZXQsIGJ1dCBzb29uKQo+ID4gICAqLwo+ ID4gLSNkZWZpbmUgWEZTX0JNQlRfQkxPQ0tfTEVOKG1wKQlYRlNfQlRSRUVfTEJMT0NLX0xFTgo+ ID4gKyNkZWZpbmUgWEZTX0JNQlRfQkxPQ0tfTEVOKG1wKSBcCj4gPiArCSh4ZnNfc2JfdmVyc2lv bl9oYXNjcmMoJigobXApLT5tX3NiKSkgPyBcCj4gPiArCQlYRlNfQlRSRUVfTEJMT0NLX0NSQ19M RU4gOiBYRlNfQlRSRUVfTEJMT0NLX0xFTikKPiA+ICAKPiA+ICAjZGVmaW5lIFhGU19CTUJUX1JF Q19BRERSKG1wLCBibG9jaywgaW5kZXgpIFwKPiA+ICAJKCh4ZnNfYm1idF9yZWNfdCAqKSBcCj4g PiBAQCAtMTg2LDEyICsxODcsMTIgQEAgdHlwZWRlZiBfX2JlNjQgeGZzX2JtYnRfcHRyX3QsIHhm c19ibWRyX3B0cl90Owo+ID4gICNkZWZpbmUgWEZTX0JNQVBfQlJPT1RfUFRSX0FERFIobXAsIGJi LCBpLCBzeikgXAo+ID4gIAlYRlNfQk1CVF9QVFJfQUREUihtcCwgYmIsIGksIHhmc19ibWJ0X21h eHJlY3MobXAsIHN6LCAwKSkKPiA+ICAKPiA+IC0jZGVmaW5lIFhGU19CTUFQX0JST09UX1NQQUNF X0NBTEMobnJlY3MpIFwKPiA+IC0JKGludCkoWEZTX0JUUkVFX0xCTE9DS19MRU4gKyBcCj4gPiAr I2RlZmluZSBYRlNfQk1BUF9CUk9PVF9TUEFDRV9DQUxDKG1wLCBucmVjcykgXAo+ID4gKwkoaW50 KShYRlNfQk1CVF9CTE9DS19MRU4obXApICsgXAo+ID4gIAkgICAgICAgKChucmVjcykgKiAoc2l6 ZW9mKHhmc19ibWJ0X2tleV90KSArIHNpemVvZih4ZnNfYm1idF9wdHJfdCkpKSkKPiA+ICAKPiA+ IC0jZGVmaW5lIFhGU19CTUFQX0JST09UX1NQQUNFKGJiKSBcCj4gPiAtCShYRlNfQk1BUF9CUk9P VF9TUEFDRV9DQUxDKGJlMTZfdG9fY3B1KChiYiktPmJiX251bXJlY3MpKSkKPiA+ICsjZGVmaW5l IFhGU19CTUFQX0JST09UX1NQQUNFKG1wLCBiYikgXAo+ID4gKwkoWEZTX0JNQVBfQlJPT1RfU1BB Q0VfQ0FMQyhtcCwgYmUxNl90b19jcHUoKGJiKS0+YmJfbnVtcmVjcykpKQo+ID4gICNkZWZpbmUg WEZTX0JNRFJfU1BBQ0VfQ0FMQyhucmVjcykgXAo+ID4gIAkoaW50KShzaXplb2YoeGZzX2JtZHJf YmxvY2tfdCkgKyBcCj4gPiAgCSAgICAgICAoKG5yZWNzKSAqIChzaXplb2YoeGZzX2JtYnRfa2V5 X3QpICsgc2l6ZW9mKHhmc19ibWJ0X3B0cl90KSkpKQo+IAo+IEFyZSB0aGVzZSBsYXJnZSBicm9v dHMgZ29pbmcgdG8gZm9yY2UgYXR0cmlidXRlcyBvdXQgb2YgbGluZT8KCk5vLiBUaGUgQk1BUF9C Uk9PVCBpcyBrZXB0IGluIG1lbW9yeSwgdGhlIEJNRFIgaXMgd2hhdCBpcyBrZXB0IGluCnRoZSBp bm9kZSBvbiBkaXNrLiBXaGF0IGlzIGtlcHQgaW4gdGhlIGlub2RlIGlzIHVuY2hhbmdlZC4gU2Vl Cnhmc19pZm9ybWF0X2J0cmVlKCkveGZzX2JtZHJfdG9fYm1idCgpIGFuZAp4ZnNfaWZsdXNoX2Zv cmsoKS8veGZzX2JtYnRfdG9fYm1kcigpLgoKPiA+IEBAIC0yNzcsMTAgKzM2Nyw4IEBAIHhmc19i dHJlZV9kdXBfY3Vyc29yKAo+ID4gIAkJCQkqbmN1ciA9IE5VTEw7Cj4gPiAgCQkJCXJldHVybiBl cnJvcjsKPiA+ICAJCQl9Cj4gPiAtCQkJbmV3LT5iY19idWZzW2ldID0gYnA7Cj4gPiAtCQkJQVNT RVJUKCF4ZnNfYnVmX2dldGVycm9yKGJwKSk7Cj4gPiAtCQl9IGVsc2UKPiA+IC0JCQluZXctPmJj X2J1ZnNbaV0gPSBOVUxMOwo+ID4gKwkJfQo+ID4gKwkJbmV3LT5iY19idWZzW2ldID0gYnA7Cj4g Cj4gV2h5IHJlbW92ZSB0aGUgYXNzZXJ0PwoKQmVjYXVzZSBpZiB0aGVyZSBpcyBhIGJwLT5iX2Vy cm9yIGlzIHNldCBpbiB4ZnNfdHJhbnNfcmVhZF9idWYoKSwKdGhlbiB0aGUgZXJyb3IgaXMgcmV0 dXJuZWQgYW5kIG5vIGJ1ZmZlciBpcyByZXR1cm5lZC4gSU9XcywgaWYgYQpidWZmZXIgaXMgcmV0 dXJuZWQsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBicC0+Yl9lcnJvciBpcyAwLiAgV2UKZG9uJ3Qg YXNzZXJ0IHRoaXMgb24gZXZlcnkgYnVmZmVyIHJldHVybmVkIGJ5IHhmc190cmFuc19yZWFkX2J1 ZigpCmFuZCBzbyB0aGlzIGlzIHNpbXBseSBtYWtpbmcgdGhlIGNvZGUgY29uc2lzdGVudCB3aXRo IGFsbCB0aGUgb3RoZXIKY29kZSB0aGF0IHJlYWRzIGJ1ZmZlcnMuCgo+ID4gIHZvaWQKPiA+ICt4 ZnNfYnRyZWVfaW5pdF9ibG9ja19pbnQoCj4gPiArCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAo+ID4g KwlzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrCSpidWYsCj4gPiArCXhmc19kYWRkcl90CQlibGtubywK PiA+ICsJX191MzIJCQltYWdpYywKPiA+ICsJX191MTYJCQlsZXZlbCwKPiA+ICsJX191MTYJCQlu dW1yZWNzLAo+ID4gKwlfX3U2NAkJCW93bmVyLAo+ID4gKwl1bnNpZ25lZCBpbnQJCWZsYWdzKQo+ ID4gK3sKPiA+ICsJYnVmLT5iYl9tYWdpYyA9IGNwdV90b19iZTMyKG1hZ2ljKTsKPiA+ICsJYnVm LT5iYl9sZXZlbCA9IGNwdV90b19iZTE2KGxldmVsKTsKPiA+ICsJYnVmLT5iYl9udW1yZWNzID0g Y3B1X3RvX2JlMTYobnVtcmVjcyk7Cj4gPiArCj4gPiArCWlmIChmbGFncyAmIFhGU19CVFJFRV9M T05HX1BUUlMpIHsKPiA+ICsJCWJ1Zi0+YmJfdS5sLmJiX2xlZnRzaWIgPSBjcHVfdG9fYmU2NChO VUxMREZTQk5PKTsKPiA+ICsJCWJ1Zi0+YmJfdS5sLmJiX3JpZ2h0c2liID0gY3B1X3RvX2JlNjQo TlVMTERGU0JOTyk7Cj4gPiArCQlpZiAoZmxhZ3MgJiBYRlNfQlRSRUVfQ1JDX0JMT0NLUykgewo+ ID4gKwkJCWJ1Zi0+YmJfdS5sLmJiX2Jsa25vID0gY3B1X3RvX2JlNjQoYmxrbm8pOwo+ID4gKwkJ CWJ1Zi0+YmJfdS5sLmJiX293bmVyID0gY3B1X3RvX2JlNjQob3duZXIpOwo+ID4gKwkJCXV1aWRf Y29weSgmYnVmLT5iYl91LmwuYmJfdXVpZCwgJm1wLT5tX3NiLnNiX3V1aWQpOwo+ID4gKwkJCWJ1 Zi0+YmJfdS5sLmJiX3BhZCA9IDA7Cj4gPiArCQl9Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQkvKiBv d25lciBpcyBhIDMyIGJpdCB2YWx1ZSBvbiBzaG9ydCBibG9ja3MgKi8KPiA+ICsJCV9fdTMyIF9f b3duZXIgPSAoX191MzIpb3duZXI7Cj4gPiArCj4gPiArCQlidWYtPmJiX3Uucy5iYl9sZWZ0c2li ID0gY3B1X3RvX2JlMzIoTlVMTEFHQkxPQ0spOwo+ID4gKwkJYnVmLT5iYl91LnMuYmJfcmlnaHRz aWIgPSBjcHVfdG9fYmUzMihOVUxMQUdCTE9DSyk7Cj4gPiArCQlpZiAoZmxhZ3MgJiBYRlNfQlRS RUVfQ1JDX0JMT0NLUykgewo+ID4gKwkJCWJ1Zi0+YmJfdS5zLmJiX2Jsa25vID0gY3B1X3RvX2Jl NjQoYmxrbm8pOwo+ID4gKwkJCWJ1Zi0+YmJfdS5zLmJiX293bmVyID0gY3B1X3RvX2JlMzIoX19v d25lcik7Cj4gPiArCQkJdXVpZF9jb3B5KCZidWYtPmJiX3Uucy5iYl91dWlkLCAmbXAtPm1fc2Iu c2JfdXVpZCk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gCj4gVGhlIHhmc19idHJl ZV9pbml0X2Jsb2NrX2ludCBtaWdodCBiZSBnb29kIGluIGl0J3Mgb3duIHBhdGNoLgoKQWxsIHRo YXQgbWVhbnMgaXMgSSBoYXZlIHRvIHNwbGl0IHRoZXNlIGh1bmtzIGludG8gb25lIHBhdGNoIHRo YXQKZmFjdG9ycyBpdCwgYW5kIGFub3RoZXIgcGF0Y2ggdGhhdCB0aGVuIGFkZHMgdGhlIG5ldyBm dW5jdGlvbmFsaXR5LgpNb3JlIGhhbmRsaW5nIG9mIHRoZSBzYW1lIGNvZGUgbWVhbnMgbW9yZSBv cHBvcnR1bml0eSBmb3IgbWlzdGFrZXMKYW5kIGJ1Z3MuCgo+ID4gK3ZvaWQKPiA+ICB4ZnNfYnRy ZWVfaW5pdF9ibG9jaygKPiA+ICAJc3RydWN0IHhmc19tb3VudCAqbXAsCj4gPiAgCXN0cnVjdCB4 ZnNfYnVmCSpicCwKPiA+ICAJX191MzIJCW1hZ2ljLAo+ID4gIAlfX3UxNgkJbGV2ZWwsCj4gPiAg CV9fdTE2CQludW1yZWNzLAo+ID4gKwlfX3U2NAkJb3duZXIsCj4gPiAgCXVuc2lnbmVkIGludAlm bGFncykKPiA+ICB7Cj4gPiAtCXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sJKm5ldyA9IFhGU19CVUZf VE9fQkxPQ0soYnApOwo+ID4gLQo+ID4gLQluZXctPmJiX21hZ2ljID0gY3B1X3RvX2JlMzIobWFn aWMpOwo+ID4gLQluZXctPmJiX2xldmVsID0gY3B1X3RvX2JlMTYobGV2ZWwpOwo+ID4gLQluZXct PmJiX251bXJlY3MgPSBjcHVfdG9fYmUxNihudW1yZWNzKTsKPiA+IC0KPiA+IC0JaWYgKGZsYWdz ICYgWEZTX0JUUkVFX0xPTkdfUFRSUykgewo+ID4gLQkJbmV3LT5iYl91LmwuYmJfbGVmdHNpYiA9 IGNwdV90b19iZTY0KE5VTExERlNCTk8pOwo+ID4gLQkJbmV3LT5iYl91LmwuYmJfcmlnaHRzaWIg PSBjcHVfdG9fYmU2NChOVUxMREZTQk5PKTsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCW5ldy0+YmJf dS5zLmJiX2xlZnRzaWIgPSBjcHVfdG9fYmUzMihOVUxMQUdCTE9DSyk7Cj4gPiAtCQluZXctPmJi X3Uucy5iYl9yaWdodHNpYiA9IGNwdV90b19iZTMyKE5VTExBR0JMT0NLKTsKPiA+IC0JfQo+ID4g Kwl4ZnNfYnRyZWVfaW5pdF9ibG9ja19pbnQobXAsIFhGU19CVUZfVE9fQkxPQ0soYnApLCBicC0+ Yl9ibiwKPiA+ICsJCQkJIG1hZ2ljLCBsZXZlbCwgbnVtcmVjcywgb3duZXIsIGZsYWdzKTsKPiA+ ICB9Cj4gPiAgCj4gPiAgU1RBVElDIHZvaWQKPiA+ICB4ZnNfYnRyZWVfaW5pdF9ibG9ja19jdXIo Cj4gPiAgCXN0cnVjdCB4ZnNfYnRyZWVfY3VyCSpjdXIsCj4gPiArCXN0cnVjdCB4ZnNfYnVmCQkq YnAsCj4gPiAgCWludAkJCWxldmVsLAo+ID4gLQlpbnQJCQludW1yZWNzLAo+ID4gLQlzdHJ1Y3Qg eGZzX2J1ZgkJKmJwKQo+ID4gKwlpbnQJCQludW1yZWNzKQo+IAo+IFdoeSByZWFycmFuZ2UgdGhl IG9yZGVyIG9mIHRoZSBhcmdzIGhlcmU/CgoxLiBzbyBJIGdvdCBjb21waWxlIGVycm9ycyB3aGVu IGxvb2tpbmcgZm9yIGNvZGUgdGhhdCBtaWdodCBuZWVkCnNwZWNpYWwgQ1JDIHN1cHBvcnQuCgoy LiBzbyBpdCBpcyBjb25zaXN0ZW50IHdpdGggYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBw YXNzIChjdXIsCmJwLCAuLi4uKSBpbiB0aGF0IG9yZGVyLi4uLgoKPiAKPiA+ICB7Cj4gPiAtCXhm c19idHJlZV9pbml0X2Jsb2NrKGN1ci0+YmNfbXAsIGJwLCB4ZnNfbWFnaWNzW2N1ci0+YmNfYnRu dW1dLAo+ID4gLQkJCSAgICAgICBsZXZlbCwgbnVtcmVjcywgY3VyLT5iY19mbGFncyk7Cj4gPiAr CV9fdTY0IG93bmVyOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiB3ZSBjYW4gcHVsbCB0aGUgb3du ZXIgZnJvbSB0aGUgY3Vyc29yIHJpZ2h0IG5vdyBhcyB0aGUgZGlmZmVyZW50Cj4gPiArCSAqIG93 bmVycyBhbGlnbiBkaXJlY3RseSB3aXRoIHRoZSBwb2ludGVyIHNpemUgb2YgdGhlIGJ0cmVlLiBU aGlzIG1heQo+ID4gKwkgKiBjaGFuZ2UgaW4gZnV0dXJlLCBidXQgaXMgc2FmZSBmb3IgY3VycmVu dCB1c2VycyBvZiB0aGUgZ2VuZXJpYyBidHJlZQo+ID4gKwkgKiBjb2RlLgo+ID4gKwkgKi8KPiA+ ICsJaWYgKGN1ci0+YmNfZmxhZ3MgJiBYRlNfQlRSRUVfTE9OR19QVFJTKQo+ID4gKwkJb3duZXIg PSBjdXItPmJjX3ByaXZhdGUuYi5pcC0+aV9pbm87Cj4gPiArCWVsc2UKPiA+ICsJCW93bmVyID0g Y3VyLT5iY19wcml2YXRlLmEuYWdubzsKPiAKPiBUaGlzIGlzIHNvbWV0aGluZyBJIGNhbiBsb29r IGludG8gYSBiaXQgbGF0ZXIuLi4gYnV0IEknbSBhIGxpdHRsZSBmbHVtbW94ZWQgYnkKPiB0aGlz IG9uZS4gIEFwcGFyZW50bHkgb25seSBpbm9kZXMgdXNlIGxvbmcgcG9pbnRlcnM/CgpUaGUgQk1C VCBpcyB3aGF0IHVzZXMgdGhlbSwgYW5kIGJ5IGRlZmluaXRpb24gdGhleSBhcmUgcm9vdGVkIGlu IGFuCmlub2RlLiBUaGVyZWZvcmUsIGFueXRoaW5nIHVzaW5nIGEgbG9uZyBwb2ludGVyIGJ0cmVl IGhhcyBhbiBpbm9kZQphcyBpdCdzIG93bmVyLgoKPiAKPiA+ICsKPiA+ICsJeGZzX2J0cmVlX2lu aXRfYmxvY2tfaW50KGN1ci0+YmNfbXAsIFhGU19CVUZfVE9fQkxPQ0soYnApLCBicC0+Yl9ibiwK PiA+ICsJCQkJIHhmc19idHJlZV9tYWdpYyhjdXIpLCBsZXZlbCwgbnVtcmVjcywKPiA+ICsJCQkJ IG93bmVyLCBjdXItPmJjX2ZsYWdzKTsKPiA+ICB9Cj4gPiAgCj4gPiAgLyoKPiA+ICAgKiBSZXR1 cm4gdHJ1ZSBpZiBwdHIgaXMgdGhlIGxhc3QgcmVjb3JkIGluIHRoZSBidHJlZSBhbmQKPiA+IC0g KiB3ZSBuZWVkIHRvIHRyYWNrIHVwZGF0ZdGVIHRvIHRoaXMgcmVjb3JkLiAgVGhlIGRlY2lzaW9u Cj4gPiArICogd2UgbmVlZCB0byB0cmFjayB1cGRhdGVzIHRvIHRoaXMgcmVjb3JkLiAgVGhlIGRl Y2lzaW9uCj4gCj4gSSBjYW4ndCBmaW5kIGEgY2hhbmdlIGluIHRoYXQgbGluZS4gIFRpbWUgZm9y IG5ldyBnbGFzc2VzPwoKSXQncyBnb3QgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciBpbiBp dC4gQ2hlY2sgdGhlIHMgb24gdGhlIGVuZApvZiAidXBkYXRlcyIuCgo+ID4gQEAgLTEyMjMsNyAr MTM2MSwxMiBAQCB4ZnNfYnRyZWVfbG9nX2Jsb2NrKAo+ID4gIAkJb2Zmc2V0b2Yoc3RydWN0IHhm c19idHJlZV9ibG9jaywgYmJfbnVtcmVjcyksCj4gPiAgCQlvZmZzZXRvZihzdHJ1Y3QgeGZzX2J0 cmVlX2Jsb2NrLCBiYl91LnMuYmJfbGVmdHNpYiksCj4gPiAgCQlvZmZzZXRvZihzdHJ1Y3QgeGZz X2J0cmVlX2Jsb2NrLCBiYl91LnMuYmJfcmlnaHRzaWIpLAo+ID4gLQkJWEZTX0JUUkVFX1NCTE9D S19MRU4KPiA+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3Uucy5iYl9i bGtubyksCj4gPiArCQlvZmZzZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LnMuYmJf bHNuKSwKPiA+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3Uucy5iYl91 dWlkKSwKPiA+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3Uucy5iYl9v d25lciksCj4gPiArCQlvZmZzZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LnMuYmJf Y3JjKSwKPiA+ICsJCVhGU19CVFJFRV9TQkxPQ0tfQ1JDX0xFTgo+ID4gIAl9Owo+ID4gIAlzdGF0 aWMgY29uc3Qgc2hvcnQJbG9mZnNldHNbXSA9IHsJLyogdGFibGUgb2Ygb2Zmc2V0cyAobG9uZykg Ki8KPiA+ICAJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX21hZ2ljKSwKPiA+ IEBAIC0xMjMxLDE3ICsxMzc0LDQwIEBAIHhmc19idHJlZV9sb2dfYmxvY2soCj4gPiAgCQlvZmZz ZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl9udW1yZWNzKSwKPiA+ICAJCW9mZnNldG9m KHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3UubC5iYl9sZWZ0c2liKSwKPiA+ICAJCW9mZnNl dG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3UubC5iYl9yaWdodHNpYiksCj4gPiAtCQlY RlNfQlRSRUVfTEJMT0NLX0xFTgo+ID4gKwkJb2Zmc2V0b2Yoc3RydWN0IHhmc19idHJlZV9ibG9j aywgYmJfdS5sLmJiX2Jsa25vKSwKPiA+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxv Y2ssIGJiX3UubC5iYl9sc24pLAo+ID4gKwkJb2Zmc2V0b2Yoc3RydWN0IHhmc19idHJlZV9ibG9j aywgYmJfdS5sLmJiX3V1aWQpLAo+ID4gKwkJb2Zmc2V0b2Yoc3RydWN0IHhmc19idHJlZV9ibG9j aywgYmJfdS5sLmJiX293bmVyKSwKPiA+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxv Y2ssIGJiX3UubC5iYl9jcmMpLAo+ID4gKwkJb2Zmc2V0b2Yoc3RydWN0IHhmc19idHJlZV9ibG9j aywgYmJfdS5sLmJiX3BhZCksCj4gPiArCQlYRlNfQlRSRUVfTEJMT0NLX0NSQ19MRU4KPiA+ICAJ fTsKPiA+ICAKPiA+ICAJWEZTX0JUUkVFX1RSQUNFX0NVUlNPUihjdXIsIFhCVF9FTlRSWSk7Cj4g PiAgCVhGU19CVFJFRV9UUkFDRV9BUkdCSShjdXIsIGJwLCBmaWVsZHMpOwo+ID4gIAo+ID4gIAlp ZiAoYnApIHsKPiA+ICsJCWludCBuYml0czsKPiA+ICsKPiA+ICsJCWlmIChjdXItPmJjX2ZsYWdz ICYgWEZTX0JUUkVFX0NSQ19CTE9DS1MpIHsKPiA+ICsJCQkvKgo+ID4gKwkJCSAqIFdlIGRvbid0 IGxvZyB0aGUgQ1JDIHdoZW4gdXBkYXRpbmcgYSBidHJlZQo+ID4gKwkJCSAqIGJsb2NrIGJ1dCBp bnN0ZWFkIHJlY3JlYXRlIGl0IGR1cmluZyBsb2cKPiA+ICsJCQkgKiByZWNvdmVyeS4gIEFzIHRo ZSBsb2cgYnVmZmVycyBoYXZlIGNoZWNrc3Vtcwo+ID4gKwkJCSAqIG9mIHRoZWlyIHRoaXMgaXMg c2FmZSBhbmQgYXZvaWRzIGxvZ2dpbmcgYSBjcmMKPiAJCQkJICAgb3duCj4gCj4gPiArCQkJICog dXBkYXRlIGluIGEgbG90IG9mIHBsYWNlcy4KPiA+ICsJCQkgKi8KPiA+ICsJCQlpZiAoZmllbGRz ID09IFhGU19CQl9BTExfQklUUykKPiA+ICsJCQkJZmllbGRzID0gWEZTX0JCX0FMTF9CSVRTX0NS QzsKPiA+ICsJCQluYml0cyA9IFhGU19CQl9OVU1fQklUU19DUkM7Cj4gPiArCQl9IGVsc2Ugewo+ ID4gKwkJCW5iaXRzID0gWEZTX0JCX05VTV9CSVRTOwo+ID4gKwkJfQo+ID4gIAkJeGZzX2J0cmVl X29mZnNldHMoZmllbGRzLAo+ID4gIAkJCQkgIChjdXItPmJjX2ZsYWdzICYgWEZTX0JUUkVFX0xP TkdfUFRSUykgPwo+ID4gIAkJCQkJbG9mZnNldHMgOiBzb2Zmc2V0cywKPiA+IC0JCQkJICBYRlNf QkJfTlVNX0JJVFMsICZmaXJzdCwgJmxhc3QpOwo+ID4gKwkJCQkgIG5iaXRzLCAmZmlyc3QsICZs YXN0KTsKPiA+ICsJCXhmc190cmFuc19idWZfc2V0X3R5cGUoY3VyLT5iY190cCwgYnAsIFhGU19C TEZfQlRSRUVfQlVGKTsKPiA+ICAJCXhmc190cmFuc19sb2dfYnVmKGN1ci0+YmNfdHAsIGJwLCBm aXJzdCwgbGFzdCk7Cj4gPiAgCX0gZWxzZSB7Cj4gPiAgCQl4ZnNfdHJhbnNfbG9nX2lub2RlKGN1 ci0+YmNfdHAsIGN1ci0+YmNfcHJpdmF0ZS5iLmlwLAoKSSdsbCBhbnN3ZXIgeW91ciBxdWVzdGlv biBhYm91dCB0aGUgdmFsdWVzIG9mIFhGU19CQl9OVU1fQklUUyBhbmQKWEZTX0JCX05VTV9CSVRT X0NSQyB3aGlsZSB3ZSBhcmUgbG9va2luZyBhdCB0aGUgY29kZSB0aGF0IHVzZXMgaXQuClRoZSB2 YWx1ZSBpcyB0aGUgaW5kZXggaW50byB0aGUgc29mZnNldC9sb2Zmc2V0cyB0YWJsZXMgdG8gZGV0 ZXJtaW5lCndoYXQgcmFuZ2Ugb2YgZmllbGRzIGluIGlidHJlZSBibG9jayBoZWFkZXJzIGFyZSB0 byBsb2dnZWQuCgoKCj4gPiBAQCAtNTYsMTAgKzYwLDIzIEBAIHN0cnVjdCB4ZnNfYnRyZWVfYmxv Y2sgewo+ID4gIAkJc3RydWN0IHsKPiA+ICAJCQlfX2JlMzIJCWJiX2xlZnRzaWI7Cj4gPiAgCQkJ X19iZTMyCQliYl9yaWdodHNpYjsKPiA+ICsKPiA+ICsJCQlfX2JlNjQJCWJiX2Jsa25vOwo+ID4g KwkJCV9fYmU2NAkJYmJfbHNuOwo+ID4gKwkJCXV1aWRfdAkJYmJfdXVpZDsKPiA+ICsJCQlfX2Jl MzIJCWJiX293bmVyOwo+ID4gKwkJCV9fbGUzMgkJYmJfY3JjOwo+ID4gIAkJfSBzOwkJCS8qIHNo b3J0IGZvcm0gcG9pbnRlcnMgKi8KPiA+ICAJCXN0cnVjdAl7Cj4gPiAgCQkJX19iZTY0CQliYl9s ZWZ0c2liOwo+ID4gIAkJCV9fYmU2NAkJYmJfcmlnaHRzaWI7Cj4gPiArCj4gPiArCQkJX19iZTY0 CQliYl9ibGtubzsKPiA+ICsJCQlfX2JlNjQJCWJiX2xzbjsKPiA+ICsJCQl1dWlkX3QJCWJiX3V1 aWQ7Cj4gPiArCQkJX19iZTY0CQliYl9vd25lcjsKPiA+ICsJCQlfX2xlMzIJCWJiX2NyYzsKPiA+ ICsJCQlfX2JlMzIJCWJiX3BhZDsgLyogcGFkZGluZyBmb3IgYWxpZ25tZW50ICovCj4gPiAgCQl9 IGw7CQkJLyogbG9uZyBmb3JtIHBvaW50ZXJzICovCj4gPiAgCX0gYmJfdTsJCQkJLyogcmVzdCAq Lwo+ID4gIH07Cj4gCj4gc3RydWN0IHhmc19idHJlZV9ibG9jayB7Cj4gICAgICAgICBfX2JlMzIg ICAgICAgICAgYmJfbWFnaWM7ICAgICAgIC8qIG1hZ2ljIG51bWJlciBmb3IgYmxvY2sgdHlwZSAq Lwo+ICAgICAgICAgX19iZTE2ICAgICAgICAgIGJiX2xldmVsOyAgICAgICAvKiAwIGlzIGEgbGVh ZiAqLwo+ICAgICAgICAgX19iZTE2ICAgICAgICAgIGJiX251bXJlY3M7ICAgICAvKiBjdXJyZW50 ICMgb2YgZGF0YSByZWNvcmRzICovCj4gICAgICAgICB1bmlvbiB7Cj4gICAgICAgICAgICAgICAg IHN0cnVjdCB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgX19iZTMyICAgICAgICAgIGJiX2xl ZnRzaWI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgX19iZTMyICAgICAgICAgIGJiX3JpZ2h0 c2liOwo+IAkJfSBzOwkJCS8qIHNob3J0IGZvcm0gcG9pbnRlcnMgKi8KPiAgICAgICAgICAgICAg ICAgc3RydWN0IHsKPiAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlMzIgICAgICAgICAgYmJf bGVmdHNpYjsKPiAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlMzIgICAgICAgICAgYmJfcmln aHRzaWI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgX19iZTY0ICAgICAgICAgIGJiX2Jsa25v Owo+ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmU2NCAgICAgICAgICBiYl9sc247Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgdXVpZF90ICAgICAgICAgIGJiX3V1aWQ7Cj4gICAgICAgICAg ICAgICAgICAgICAgICAgX19iZTMyICAgICAgICAgIGJiX293bmVyOwo+ICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGUzMiAgICAgICAgICBiYl9jcmM7Cj4gICAgICAgICAgICAgICAgIH0gc19j cmM7CQkvKiBzaG9ydCBmb3JtIHBvaW50ZXJzIHdpdGggY3JjcyAqLwo+ICAgICAgICAgICAgICAg ICBzdHJ1Y3QgIHsKPiAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlNjQgICAgICAgICAgYmJf bGVmdHNpYjsKPiAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlNjQgICAgICAgICAgYmJfcmln aHRzaWI7Cj4gCQl9IGw7CQkJLyogbG9uZyBmb3JtIHBvaW50ZXJzICovCj4gICAgICAgICAgICAg ICAgIHN0cnVjdCAgewo+ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmU2NCAgICAgICAgICBi Yl9sZWZ0c2liOwo+ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmU2NCAgICAgICAgICBiYl9y aWdodHNpYjsKPiAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlNjQgICAgICAgICAgYmJfYmxr bm87Cj4gICAgICAgICAgICAgICAgICAgICAgICAgX19iZTY0ICAgICAgICAgIGJiX2xzbjsKPiAg ICAgICAgICAgICAgICAgICAgICAgICB1dWlkX3QgICAgICAgICAgYmJfdXVpZDsKPiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2JlNjQgICAgICAgICAgYmJfb3duZXI7Cj4gICAgICAgICAgICAg ICAgICAgICAgICAgX19sZTMyICAgICAgICAgIGJiX2NyYzsKPiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2JlMzIgICAgICAgICAgYmJfcGFkOyAvKiBwYWRkaW5nIGZvciBhbGlnbm1lbnQgKi8K PiAgICAgICAgICAgICAgICAgfSBsX2NyYzsJCS8qIGxvbmcgZm9ybSBwb2ludGVycyB3aXRoIGNy Y3MgKi8KPiAgICAgICAgIH0gYmJfdTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzdCAq Lwo+IH07CgpSaWdodCBub3cgdGhlIHNoYXJlZCBidHJlZSBjb2RlIG9ubHkgbmVlZHMgdG8ga25v dyBhYm91dCAyIGRpZmZlcmVudAp0eXBlcyAoc2hvcnQgYW5kIGxvbmcpLCBhbmQgdGhlIGRpZmZl cmVuY2VzIGJldHdlZW4gY3JjL25vbiBjcmMKYnRyZWUgYmxvY2tzIGlzIGNvbXBsZXRlbHkgaXJy ZWxldmFudCB0byBtb3N0IG9mIHRoZSBjb2RlIGFuZCBoaWRkZW4KZGVlcCBpbiB0aGUgYnRyZWUg YmxvY2sgSU8vaW5pdGlhbGlzYXRpb24gbGF5ZXJzLgoKRGVmaW5pbmcgdGhlIHN0cnVjdHVyZXMg YXMgeW91J3ZlIHN1Z2dlc3RlZCBkdXBsaWNhdGVzIGZpZWxkcyBiZXR3ZWVuCnN0cnVjdHVyZXMg LSB0aGF0IGFkZHMgbWFpbnRlbmFuY2UgYnVyZGVuIChpLmUuIGhhdmUgdG8ga2VlcCBzdHVmZiBp bgpzeW5jLCBhbmQgbGVhdmUgY29tZW50cy9idWlsZCBib21icyB0byBlbnN1cmUgdGhleSBzdGF5 IHRoYXQgd2F5KS4KSXQgYWxzbyBtZWFucyBtZWFucyB0aGF0IHdlJ2xsIGhhdmUgNCB0eXBlcyBv ZiBzdHJ1Y3R1cmVzIHRoYXQgd2lsbCBiZQp1c2VkIGludGVyY2hhbmdhYmx5IChpLmUuIGJiX3Uu bCBpbiBzb21lIHBsYWNlcyBhbmQgYmJfdS5sX2NyYyBpbgpvdGhlcnMpLiBUaGF0IGlzLCBJTU8s IGdvaW5nIHRvIGJlIGZhciBtb3JlIGNvbmZ1c2luZyB0aGFuIGp1c3QKaGF2aW5nIGEgc2luZ2xl IHR5cGUgb2Ygc3RydWN0dXJlIGZvciBlYWNoIG9mIHRoZSBsb25nIGFuZCBzaG9ydApmb3Jtcywg YW5kIG1vcmUgbGlrZWx5IHRvIGxlYWQgdG8gYnVncyBpbiB0aGUgZnV0dXJlLgoKQXMgaXQgaXMs IHdlIGFscmVhZHkgaGF2ZSB0byB1c2UgbWFnaWMgbnVtYmVyL3ZlcnNpb24gY2hlY2tzIHRvCmRl dGVybWluZSB3aGF0IGZpZWxkcyBhcmUgdmFsaWQsIHNvIGhhdmluZyBkaWZmZXJlbnQgc3RydWN0 dXJlIHR5cGVzCmRvZXNuJ3QgYWN0dWFsbHkgYWRkIGFueSBjb2RlIGRvY3VtZW50YXRpb24gdmFs dWUgYXMgd2Ugd2lsbApvbmx5IGJlIGFjY2Vzc2luZyB0aGUgZXh0ZW5kZWQgc3RydWN0dXJlcyBp bnNpZGUgYmxvY2tzIG9mIGNvZGUKd2hlcmUgd2Uga25vdyB0aGF0IHdlIGFyZSBzdXBwb3NlZCB0 byBhY2Nlc3MgdGhlbS4uLgoKPiAKPiA+IEBAIC02Nyw2ICs4NCwxNiBAQCBzdHJ1Y3QgeGZzX2J0 cmVlX2Jsb2NrIHsKPiA+ICAjZGVmaW5lIFhGU19CVFJFRV9TQkxPQ0tfTEVOCTE2CS8qIHNpemUg b2YgYSBzaG9ydCBmb3JtIGJsb2NrICovCj4gPiAgI2RlZmluZSBYRlNfQlRSRUVfTEJMT0NLX0xF TgkyNAkvKiBzaXplIG9mIGEgbG9uZyBmb3JtIGJsb2NrICovCj4gPiAgCj4gPiArLyogc2l6ZXMg b2YgQ1JDIGVuYWJsZWQgYnRyZWUgYmxvY2tzICovCj4gPiArI2RlZmluZSBYRlNfQlRSRUVfU0JM T0NLX0NSQ19MRU4JKFhGU19CVFJFRV9TQkxPQ0tfTEVOICsgNDApCj4gPiArI2RlZmluZSBYRlNf QlRSRUVfTEJMT0NLX0NSQ19MRU4JKFhGU19CVFJFRV9MQkxPQ0tfTEVOICsgNDgpCj4gPiArCj4g PiArCj4gPiArI2RlZmluZSBYRlNfQlRSRUVfU0JMT0NLX0NSQ19PRkYgXAo+ID4gKwlvZmZzZXRv ZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LnMuYmJfY3JjKQo+ID4gKyNkZWZpbmUgWEZT X0JUUkVFX0xCTE9DS19DUkNfT0ZGIFwKPiA+ICsJb2Zmc2V0b2Yoc3RydWN0IHhmc19idHJlZV9i bG9jaywgYmJfdS5sLmJiX2NyYykKPiA+ICsKPiA+ICAKPiA+ICAvKgo+ID4gICAqIEdlbmVyaWMg a2V5LCBwdHIgYW5kIHJlY29yZCB3cmFwcGVyIHN0cnVjdHVyZXMuCj4gPiBAQCAtMTAxLDEzICsx MjgsMTEgQEAgdW5pb24geGZzX2J0cmVlX3JlYyB7Cj4gPiAgI2RlZmluZQlYRlNfQkJfTlVNUkVD UwkJMHgwNAo+ID4gICNkZWZpbmUJWEZTX0JCX0xFRlRTSUIJCTB4MDgKPiA+ICAjZGVmaW5lCVhG U19CQl9SSUdIVFNJQgkJMHgxMAo+ID4gKyNkZWZpbmUJWEZTX0JCX0JMS05PCQkweDIwCj4gPiAg I2RlZmluZQlYRlNfQkJfTlVNX0JJVFMJCTUKPiA+ICAjZGVmaW5lCVhGU19CQl9BTExfQklUUwkJ KCgxIDw8IFhGU19CQl9OVU1fQklUUykgLSAxKQo+IAo+IERpZCBYRlNfQkJfQkxLTk8gc25lYWsg aW4gZnJvbSBhIHN1YnNlcXVlbnQgcGF0Y2g/CgpObywgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5 IHdlIG9ubHkgd2FudCB0byBsb2cgYSBjaGFuZ2UgdG8gdGhlCmJsb2NrIG51bWJlciBpbiB0aGUg ZXh0ZW5kZWQgaGVhZGVyLCBhbmQgc28gd2UgbmVlZCB0byBhZGQgdGhhdCBhcyBhCmxvZ2dhYmxl IGluZGV4LgoKPiAKPiA+IC0KPiA+IC0vKgo+ID4gLSAqIE1hZ2ljIG51bWJlcnMgZm9yIGJ0cmVl IGJsb2Nrcy4KPiA+IC0gKi8KPiA+IC1leHRlcm4gY29uc3QgX191aW50MzJfdAl4ZnNfbWFnaWNz W107Cj4gPiArI2RlZmluZQlYRlNfQkJfTlVNX0JJVFNfQ1JDCTgKPiA+ICsjZGVmaW5lCVhGU19C Ql9BTExfQklUU19DUkMJKCgxIDw8IFhGU19CQl9OVU1fQklUU19DUkMpIC0gMSkKPiAKPiBJJ20g YSBsaXR0bGUgY29uZnVzZWQgaGVyZS4gIFdlIHdlcmUgdXNpbmcgNSBiaXRzLCB5b3UgYWRkZWQg QkJfQkxLTk8gZm9yIDYsCj4gYW5kIG5vdyB5b3UncmUgc2V0dGluZyBOVU1fQklUU19DUkMgdG8g OD8KClNlZSB0aGUgc29mZnNldHMvbG9mZnNldHMgdGFibGUgY29tbWVudCBhYm92ZS4KCj4gUHJv YmFibHkgbW9yZSByZWFkYWJsZSB3aXRoIHRoZSAoMTw8MCkgaWRpb20sIGFzIGJlbG93LgoKSnVz dCB1c2luZyB3aGF0IGlhIGFscmVhZHkgdGhlcmUuCgo+ID4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94 ZnNfZGlub2RlLmggYi9mcy94ZnMveGZzX2Rpbm9kZS5oCj4gPiBpbmRleCA4OGEzMzY4Li42YjVi ZDE3IDEwMDY0NAo+ID4gLS0tIGEvZnMveGZzL3hmc19kaW5vZGUuaAo+ID4gKysrIGIvZnMveGZz L3hmc19kaW5vZGUuaAo+ID4gQEAgLTEwNyw4ICsxMDcsOCBAQCB0eXBlZGVmIGVudW0geGZzX2Rp bm9kZV9mbXQgewo+ID4gICNkZWZpbmUgWEZTX0xJVElOTyhtcCwgdmVyc2lvbikgXAo+ID4gIAko KGludCkoKChtcCktPm1fc2Iuc2JfaW5vZGVzaXplKSAtIHNpemVvZihzdHJ1Y3QgeGZzX2Rpbm9k ZSkpKQo+ID4gIAo+ID4gLSNkZWZpbmUJWEZTX0JST09UX1NJWkVfQURKCVwKPiA+IC0JKFhGU19C VFJFRV9MQkxPQ0tfTEVOIC0gc2l6ZW9mKHhmc19ibWRyX2Jsb2NrX3QpKQo+ID4gKyNkZWZpbmUg WEZTX0JST09UX1NJWkVfQURKKGlwKSBcCj4gPiArCShYRlNfQk1CVF9CTE9DS19MRU4oKGlwKS0+ aV9tb3VudCkgLSBzaXplb2YoeGZzX2JtZHJfYmxvY2tfdCkpCj4gCj4gQSBnb29kIGNhbmRpZGF0 ZSBmb3IgYSBzZXBhcmF0ZSBwYXRjaC4KCkFnYWluLCBvbmx5IHVzZWQgaW4gMyBwbGFjZXMgc28g c2hvdWwgZGJlIGVhc3kgdG8gdmVyaWZ5IGV2ZW4gaW4gdGhlCmxhcmdlIHBhdGNoLi4uCgpDaGVl cnMsCgpEYXZlLgotLSAKRGF2ZSBDaGlubmVyCmRhdmlkQGZyb21vcmJpdC5jb20KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnhmcyBtYWlsaW5nIGxpc3QK eGZzQG9zcy5zZ2kuY29tCmh0dHA6Ly9vc3Muc2dpLmNvbS9tYWlsbWFuL2xpc3RpbmZvL3hmcwo=