From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jianpeng Ma" Subject: Re: Re: [patch v2]raid5: fix directio regression Date: Thu, 23 Aug 2012 16:11:16 +0800 Message-ID: <201208231611132812746@gmail.com> References: <201208071421033759628@gmail.com> <201208081321202343795@gmail.com> <201208090919591567972@gmail.com> <20120809113230.152aade3@notabene.brown> <20120814063343.GA30353@kernel.org> <20120815105610.74fe418e@notabene.brown> <20120815014436.GA355@kernel.org> <201208161536313436886@gmail.com> <201208231446557815641@gmail.com>, Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Sender: linux-raid-owner@vger.kernel.org To: shli Cc: Neil Brown , linux-raid , axboe List-Id: linux-raid.ids T24gMjAxMi0wOC0yMyAxNTo1NSBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+IFdyb3RlOg0K PjIwMTIvOC8yMyBKaWFucGVuZyBNYSA8bWFqaWFucGVuZ0BnbWFpbC5jb20+Og0KPj4gT24gMjAx Mi0wOC0yMyAxNDowOCBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+IFdyb3RlOg0KPj4+MjAx Mi84LzE2IFNoYW9odWEgTGkgPHNobGlAa2VybmVsLm9yZz46DQo+Pj4+IDIwMTIvOC8xNiBKaWFu cGVuZyBNYSA8bWFqaWFucGVuZ0BnbWFpbC5jb20+Og0KPj4+Pj4gT24gMjAxMi0wOC0xNSAwOTo0 NCBTaGFvaHVhIExpIDxzaGxpQGtlcm5lbC5vcmc+IFdyb3RlOg0KPj4+Pj4+T24gV2VkLCBBdWcg MTUsIDIwMTIgYXQgMTA6NTY6MTBBTSArMTAwMCwgTmVpbEJyb3duIHdyb3RlOg0KPj4+Pj4+PiBP biBUdWUsIDE0IEF1ZyAyMDEyIDE0OjMzOjQzICswODAwIFNoYW9odWEgTGkgPHNobGlAa2VybmVs Lm9yZz4gd3JvdGU6DQo+Pj4+Pj4+DQo+Pj4+Pj4+ID4gT24gVGh1LCBBdWcgMDksIDIwMTIgYXQg MDE6MDc6MDFQTSArMDgwMCwgU2hhb2h1YSBMaSB3cm90ZToNCj4+Pj4+Pj4gPiA+IDIwMTIvOC85 IE5laWxCcm93biA8bmVpbGJAc3VzZS5kZT46DQo+Pj4+Pj4+ID4gPiA+IE9uIFRodSwgOSBBdWcg MjAxMiAwOToyMDowNSArMDgwMCAiSmlhbnBlbmcgTWEiIDxtYWppYW5wZW5nQGdtYWlsLmNvbT4g d3JvdGU6DQo+Pj4+Pj4+ID4gPiA+DQo+Pj4+Pj4+ID4gPiA+PiBPbiAyMDEyLTA4LTA4IDIwOjUz IFNoYW9odWEgTGkgPHNobGlAa2VybmVsLm9yZz4gV3JvdGU6DQo+Pj4+Pj4+ID4gPiA+PiA+MjAx Mi84LzggSmlhbnBlbmcgTWEgPG1hamlhbnBlbmdAZ21haWwuY29tPjoNCj4+Pj4+Pj4gPiA+ID4+ ID4+IE9uIDIwMTItMDgtMDggMTA6NTggU2hhb2h1YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBXcm90 ZToNCj4+Pj4+Pj4gPiA+ID4+ID4+PjIwMTIvOC83IEppYW5wZW5nIE1hIDxtYWppYW5wZW5nQGdt YWlsLmNvbT46DQo+Pj4+Pj4+ID4gPiA+PiA+Pj4+IE9uIDIwMTItMDgtMDcgMTM6MzIgU2hhb2h1 YSBMaSA8c2hsaUBrZXJuZWwub3JnPiBXcm90ZToNCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+MjAxMi84 LzcgSmlhbnBlbmcgTWEgPG1hamlhbnBlbmdAZ21haWwuY29tPjoNCj4+Pj4+Pj4gPiA+ID4+ID4+ Pj4+PiBPbiAyMDEyLTA4LTA3IDExOjIyIFNoYW9odWEgTGkgPHNobGlAa2VybmVsLm9yZz4gV3Jv dGU6DQo+Pj4+Pj4+ID4gPiA+PiA+Pj4+Pj4+TXkgZGlyZWN0SU8gcmFuZG9td3JpdGUgNGsgd29y a2xvYWQgc2hvd3MgYSAxMH4yMCUgcmVncmVzc2lvbiBjYXVzZWQgYnkgY29tbWl0DQo+Pj4+Pj4+ ID4gPiA+PiA+Pj4+Pj4+ODk1ZTNjNWM1OGE4MGJiLiBkaXJlY3RJTyB1c3VhbGx5IGlzIHJhbmRv bSBJTyBhbmQgaWYgcmVxdWVzdCBzaXplIGlzbid0IGJpZw0KPj4+Pj4+PiA+ID4gPj4gPj4+Pj4+ Pih3aGljaCBpcyB0aGUgY29tbW9uIGNhc2UpLCBkZWxheSBoYW5kbGluZyBvZiB0aGUgc3RyaXBl IGhhc24ndCBhbnkgYWR2YW50YWdlcy4NCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+Pj5Gb3IgYmlnIHNp emUgcmVxdWVzdCwgZGVsYXkgY2FuIHN0aWxsIHJlZHVjZSBJTy4NCj4+Pj4+Pj4gPiA+ID4+ID4+ Pj4+Pj4NCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+Pj5TaWduZWQtb2ZmLWJ5OiBTaGFvaHVhIExpIDxz aGxpQGZ1c2lvbmlvLmNvbT4NCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4gW3NuaXBdDQo+Pj4+Pj4+ID4g PiA+PiA+Pj4+Pj4+LS0NCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+PiBNYXkgYmUgdXNlZCBzaXplIHRv IGp1ZGdlIGlzIG5vdCBhIGdvb2QgbWV0aG9kLg0KPj4+Pj4+PiA+ID4gPj4gPj4+Pj4+IEkgZmly c3RseSBzZW5kZWQgdGhpcyBwYXRjaCwgb25seSB3YW50IHRvIGNvbnRyb2wgZGlyZWN0LXdyaXRl LWJsb2NrLG5vdCBmb3IgcmVxdWxhciBmaWxlLg0KPj4+Pj4+PiA+ID4gPj4gPj4+Pj4+IEJlY2F1 c2UgaSB0aGluayBpZiBzb21lb25lIHVzZWQgZGlyZWN0LXdyaXRlLWJsb2NrIGZvciByYWlkNSxo ZSBzaG91bGQga25vdyB0aGUgZmVhdHVyZSBvZiByYWlkNSBhbmQgaGUgY2FuIGNvbnRyb2wNCj4+ Pj4+Pj4gPiA+ID4+ID4+Pj4+PiBmb3Igd3JpdGUgdG8gZnVsbC13cml0ZS4NCj4+Pj4+Pj4gPiA+ ID4+ID4+Pj4+PiBCdXQgYXQgdGhhdCB0aW1lLCBpIGRpZCBrbm93IGhvdyB0byBkaWZmZXJlbnRp YXRlIGJldHdlZW4gcmVndWxhciBmaWxlIGFuZCBibG9jay1kZXZpY2UuDQo+Pj4+Pj4+ID4gPiA+ PiA+Pj4+Pj4gSSB0aGlrIHdlIHNob3VsZCBkbyBzb21ldGhpbmcgdG8gZG8gdGhpcy4NCj4+Pj4+ Pj4gPiA+ID4+ID4+Pj4+DQo+Pj4+Pj4+ID4gPiA+PiA+Pj4+PkkgZG9uJ3QgdGhpbmsgaXQncyBw b3NzaWJsZSB1c2VyIGNhbiBjb250cm9sIGhpcyB3cml0ZSB0byBiZSBhDQo+Pj4+Pj4+ID4gPiA+ PiA+Pj4+PmZ1bGwtd3JpdGUgZXZlbiBmb3INCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4+cmF3IGRpc2sg SU8uIFdoeSByZWd1bGFyIGZpbGUgYW5kIGJsb2NrIGRldmljZSBpbyBtYXR0ZXJzIGhlcmU/DQo+ Pj4+Pj4+ID4gPiA+PiA+Pj4+Pg0KPj4+Pj4+PiA+ID4gPj4gPj4+Pj5UaGFua3MsDQo+Pj4+Pj4+ ID4gPiA+PiA+Pj4+PlNoYW9odWENCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4gQW5vdGhlciBwcm9ibGVt IGlzIHRoZSBzaXplLiBIb3cgdG8ganVkZ2UgdGhlIHNpemUgaXMgbGFyZ2Ugb3Igbm90Pw0KPj4+ Pj4+PiA+ID4gPj4gPj4+PiBBIHN5c2NhbGwgd3JpdGUgaXMgYSBkaW8gYW5kIGEgZGlvIG1heSBi ZSBzcGxpdCBtb3JlIGJpb3MuDQo+Pj4+Pj4+ID4gPiA+PiA+Pj4+IEZvciBteSB3b3JrbG9hZCwg aSB1c3VhbHkgd3JpdGUgY2h1bmstc2l6ZS4NCj4+Pj4+Pj4gPiA+ID4+ID4+Pj4gQnV0IHlvdXIg cGF0Y2ggaXMganVkZ2UgYnkgYmlvLXNpemUuDQo+Pj4+Pj4+ID4gPiA+PiA+Pj4NCj4+Pj4+Pj4g PiA+ID4+ID4+PkknZCBpZ25vcmUgd29ya2xvYWQgd2hpY2ggZG9lcyBzZXF1ZW50aWFsIGRpcmVj dElPLCB0aG91Z2gNCj4+Pj4+Pj4gPiA+ID4+ID4+PnlvdXIgd29ya2xvYWQgaXMsIGJ1dCBJIGJl dCBubyByZWFsIHdvcmtsb2FkcyBhcmUuIFNvIEknZCBsaWtlDQo+Pj4+Pj4+ID4gPiA+PiA+PiBT b3JyeSxteSBleHBsYWluIG1heWJlIG5vdCBjb3JjcmVjdC4gSSB3cml0ZSBkYXRhIG9uY2Ugd2hp Y2ggc2l6ZSBpcyBhbG1vc3QgY2h1bmtzLXNpemUgKiBkZXZpY2VzLGluIG9yZGVyIHRvIGZ1bGwt d3JpdGUNCj4+Pj4+Pj4gPiA+ID4+ID4+IGFuZCBhcyBwb3NzaWJsZSBhcyB0byBubyBwcmUtcmVh ZCBvcGVyYXRpb24uDQo+Pj4+Pj4+ID4gPiA+PiA+Pj5vbmx5IHRvIGNvbnNpZGVyIGJpZyBzaXpl IHJhbmRvbSBkaXJlY3Rpby4gSSBhZ3JlZSB0aGUgc2l6ZQ0KPj4+Pj4+PiA+ID4gPj4gPj4+anVk Z2UgaXMgYXJiaXRyYXJ5LiBJIGNhbiBvcHRpbWl6ZSBpdCB0byBiZSBvbmx5IGNvbnNpZGVyIHN0 cmlwZQ0KPj4+Pj4+PiA+ID4gPj4gPj4+d2hpY2ggaGl0cyB0d28gb3IgbW9yZSBkaXNrcyBpbiBv bmUgYmlvLCBidXQgbm90IHN1cmUgaWYgaXQncw0KPj4+Pj4+PiA+ID4gPj4gPj4+d29ydGh5IGRv aW5nLiBOb3Qgd2FyZSBiaWcgc2l6ZSBkaXJlY3RpbyBpcyBjb21tb24sIGFuZCBldmVuDQo+Pj4+ Pj4+ID4gPiA+PiA+Pj5pcywgYmlnIHNpemUgcmVxdWVzdCBJT1BTIGlzIGxvdywgYSBiaXQgZGVs YXkgbWF5YmUgbm90IGEgYmlnDQo+Pj4+Pj4+ID4gPiA+PiA+Pj5kZWFsLg0KPj4+Pj4+PiA+ID4g Pj4gPj4gSWYgYWRkIGEgYWNjX3RpbWUgZm9yICdzdHJpZXBfaGVhZCcgdG8gY29udHJvbD8NCj4+ Pj4+Pj4gPiA+ID4+ID4+IFdoZW4gZ2V0X2FjdGl2ZV9zdHJpcGUoKSBpcyBvaywgdXBkYXRlIGFj Y190aW1lLg0KPj4+Pj4+PiA+ID4gPj4gPj4gRm9yIHNvbWUgdGltZSwgc3RyaXBlX2hlYWQgZGlk IG5vdCBhY2Nlc3MgYW5kIGl0IHNob2xkIHByZS1yZWFkLg0KPj4+Pj4+PiA+ID4gPj4gPg0KPj4+ Pj4+PiA+ID4gPj4gPkRvIHlvdSB3YW50IHRvIGFkZCBhIHRpbWVyIGZvciBlYWNoIHN0cmlwZT8g VGhpcyBpcyBldmVuIHVnbHkuDQo+Pj4+Pj4+ID4gPiA+PiA+SG93IGRvIHlvdSBjaG9vc2UgdGhl IGV4cGlyZSB0aW1lPyBBIHRpbWUgd29ya3MgZm9yIGhhcmRkaXNrDQo+Pj4+Pj4+ID4gPiA+PiA+ ZGVmaW5pdGVseSB3aWxsIG5vdCB3b3JrIGZvciBhIGZhc3QgU1NELg0KPj4+Pj4+PiA+ID4gPj4g QSB0aW1lIGlzIGxpa2UgdGhlIHNpemUgd2hpY2ggaXMgYXJiaXRyYXJ5Lg0KPj4+Pj4+PiA+ID4g Pj4gSG93IGFib3V0IGFkZCBhIGludGVyZmFjZSBpbiBzeXNmcyB0byBjb250cm9sIGJ5IHVzZXI/ DQo+Pj4+Pj4+ID4gPiA+PiBPbmx5IHVzZXIgY2FuIGp1ZGdlIHRoZSB3b3JrbG9hZCwgd2hpY2gg c2VxdWF0aWFsIHdyaXRlIG9yIHJhbmRvbSB3cml0ZS4NCj4+Pj4+Pj4gPiA+ID4NCj4+Pj4+Pj4g PiA+ID4gVGhpcyBpcyBnZXR0aW5nIHdvcnNlIGJ5IHRoZSBtaW51dGUuICBBIHN5c2ZzIGludGVy ZmFjZSBmb3IgdGhpcyBpcw0KPj4+Pj4+PiA+ID4gPiBkZWZpbml0ZWx5IG5vdCBhIGdvb2QgaWRl YS4NCj4+Pj4+Pj4gPiA+ID4NCj4+Pj4+Pj4gPiA+ID4gVGhlIFJFUV9OT0lETEUgZmxhZyBpcyBh IHByZXR0eSBjbGVhciBzdGF0ZW1lbnQgdGhhdCBubyBtb3JlIHJlcXVlc3RzIHRoYXQNCj4+Pj4+ Pj4gPiA+ID4gbWVyZ2Ugd2l0aCB0aGlzIG9uZSBhcmUgZXhwZWN0ZWQuICBJZiBzb21lIHVzZSBj YXNlcyBzZW5kcyByYW5kb20gcmVxdWVzdHMsDQo+Pj4+Pj4+ID4gPiA+IG1heWJlIGl0IHNob3Vs ZCBiZSBzZXR0aW5nIFJFUV9OT0lETEUuDQo+Pj4+Pj4+ID4gPiA+DQo+Pj4+Pj4+ID4gPiA+IE1h eWJlIHNvbWVvbmUgc2hvdWxkIGRvIHNvbWUgcmVzZWFyY2ggYW5kIGZpbmQgb3V0IHdoeSBXUklU RV9PRElSRUNUIGRvZXNuJ3QNCj4+Pj4+Pj4gPiA+ID4gaW5jbHVkZSBSRVFfTk9JRExFLiAgVW5k ZXJzdGFuZGluZyB0aGF0IHdvdWxkIGhlbHAgdW5kZXJzdGFuZCB0aGUgY3VycmVudA0KPj4+Pj4+ PiA+ID4gPiBwcm9ibGVtLg0KPj4+Pj4+PiA+ID4NCj4+Pj4+Pj4gPiA+IEEgcXVpY2sgc2VhcmNo IHNob3dzIG9ubHkgY2ZxLWlvc2NoZWQgdXNlcyBSRVFfTk9JRExFLiBJbg0KPj4+Pj4+PiA+ID4g Y2ZxLCBhIHF1ZXVlIGlzIGlkbGVkIHRvIGF2b2lkIGxvc2luZyBpdHMgc2hhcmUuIFJFUV9OT0lE TEUNCj4+Pj4+Pj4gPiA+IHRlbGxzIGNmcSB0byBhdm9pZCBpZGxlLCBzaW5jZSB0aGUgdGFzayB3 aWxsIG5vdCBkaXNwYXRjaCBmdXJ0aGVyDQo+Pj4+Pj4+ID4gPiByZXF1ZXN0cyBhbnkgbW9yZS4g Tm90ZSB0aGlzIGlzbid0IG5vIG1lcmdlLg0KPj4+Pj4+PiA+DQo+Pj4+Pj4+ID4gU2luY2UgUkVR X05PSURMRSBoYXMgbm8gcmVsYXRpb25zaGlwIHdpdGggcmVxdWVzdCBtZXJnZSwgd2UnZCBiZXR0 ZXIgcmVtb3ZlIGl0Lg0KPj4+Pj4+PiA+IEkgY2FtZSBvdXQgYSBuZXcgcGF0Y2gsIHdoaWNoIGRv ZXNuJ3QgZGVwZW5kIG9uIHJlcXVlc3Qgc2l6ZSBhbnkgbW9yZS4gV2l0aA0KPj4+Pj4+PiA+IHRo aXMgcGF0Y2gsIHNlcXVlbnRpYWwgZGlyZWN0aW8gd2lsbCBzdGlsbCBpbnRyb2R1Y2UgdW5uZWNl c3NhcnkgcmFpZDUgcHJlcmVhZA0KPj4+Pj4+PiA+IChlc3BlY2lhbGx5IGZvciBzbWFsbCBzaXpl IElPKSwgYnV0IEkgYmV0IG5vIGFwcCBkb2VzIHNlcXVlbnRpYWwgc21hbGwgc2l6ZQ0KPj4+Pj4+ PiA+IGRpcmVjdElPLg0KPj4+Pj4+PiA+DQo+Pj4+Pj4+ID4gVGhhbmtzLA0KPj4+Pj4+PiA+IFNo YW9odWENCj4+Pj4+Pj4gPg0KPj4+Pj4+PiA+IFN1YmplY3Q6IHJhaWQ1OiBmaXggZGlyZWN0aW8g cmVncmVzc2lvbg0KPj4+Pj4+PiA+DQo+Pj4+Pj4+ID4gTXkgZGlyZWN0SU8gcmFuZG9td3JpdGUg NGsgd29ya2xvYWQgc2hvd3MgYSAxMH4yMCUgcmVncmVzc2lvbiBjYXVzZWQgYnkgY29tbWl0DQo+ Pj4+Pj4+ID4gODk1ZTNjNWM1OGE4MGJiLiBUaGlzIGNvbW1pdCBpc24ndCBmcmllbmRseSBmb3Ig c21hbGwgc2l6ZSByYW5kb20gSU8sIGJlY2F1c2UNCj4+Pj4+Pj4gPiBkZWxheWluZyBzdWNoIHJl cXVlc3QgaGFzbid0IGFueSBhZHZhbnRhZ2VzLg0KPj4+Pj4+PiA+DQo+Pj4+Pj4+ID4gRGlyZWN0 SU8gdXN1YWxseSBpcyByYW5kb20gSU8uIEkgdGhvdWdodCB3ZSBjYW4gaWdub3JlIHJlcXVlc3Qg bWVyZ2UgYmV0d2Vlbg0KPj4+Pj4+PiA+IGJpb3MgZnJvbSBkaWZmZXJlbnQgaW9fc3VibWl0LiBT byB3ZSBvbmx5IGNvbnNpZGVyIG9uZSBiaW8gd2hpY2ggY2FuIGRyaXZlDQo+Pj4+Pj4+ID4gdW5u ZWNlc3NhcnkgcHJlcmVhZCBpbiByYWlkNSwgd2hpY2ggaXMgbGFyZ2UgcmVxdWVzdC4gSWYgYSBi aW8gaXMgbGFyZ2UgZW5vdWdoDQo+Pj4+Pj4+ID4gYW5kIHNvbWUgb2YgaXRzIHN0cmlwZXMgd2ls bCBhY2Nlc3MgdHdvIG9yIG1vcmUgZGlza3MsIHN1Y2ggc3RyaXBlcyBzaG91bGQgYmUNCj4+Pj4+ Pj4gPiBkZWxheWVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHByZXJlYWQgdGlsbCBiaW8gZm9yIHRo ZSBsYXN0IGRpc2sgb2YgdGhlIHN0cmlwcw0KPj4+Pj4+PiA+IGlzIGFkZGVkLg0KPj4+Pj4+PiA+ DQo+Pj4+Pj4+ID4gUkVRX05PSURMRSBkb2Vzbid0IG1lYW4gYWJvdXQgcmVxdWVzdCBtZXJnZSwg SSBkZWxldGVkIGl0Lg0KPj4+Pj4+Pg0KPj4+Pj4+PiBIaSwNCj4+Pj4+Pj4gIEhhdmUgeW91IHRl c3RlZCB3aGF0IGVmZmVjdCB0aGlzIGhhcyBvbiBsYXJnZSBzZXF1ZW50aWFsIGRpcmVjdCB3cml0 ZXM/DQo+Pj4+Pj4+ICBCZWNhdXNlIGl0IGRvbid0IG1ha2Ugc2Vuc2UgdG8gbWUgYW5kIEkgd291 bGQgYmUgc3VycHJpc2VkIGlmIGl0IGltcHJvdmVzDQo+Pj4+Pj4+ICB0aGluZ3MuDQo+Pj4+Pj4+ DQo+Pj4+Pj4+ICBZb3UgYXJlIGRlbGF5aW5nIHNldHRpbmcgdGhlIFNUUklQRV9QUkVSRUFEX0FD VElWRSBiaXQgdW50aWwgeW91IHRoaW5rIHlvdQ0KPj4+Pj4+PiAgaGF2ZSBzdWJtaXR0ZWQgYWxs IHRoZSB3cml0ZXMgZnJvbSB0aGlzIGJpbyB0aGF0IGFwcGx5IHRvIHRoZSBnaXZlIHN0cmlwZS4N Cj4+Pj4+Pj4gIFRoYXQgZG9lcyBtYWtlIHNvbWUgc2Vuc2UsIGhvd2V2ZXIgaXQgZG9lc24ndCBz ZWVtIHRvIGRlYWwgd2l0aCB0aGUNCj4+Pj4+Pj4gIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG9uZSBi aW8gY292ZXJzIHBhcnRzIG9mIHR3byBkaWZmZXJlbnQgc3RyaXBlcy4gIEluIHRoYXQNCj4+Pj4+ Pj4gIGNhc2UgdGhlIGZpcnN0IHN0cmlwZSBuZXZlciBnZXRzIFNUUklQRV9QUkVSRUFEX0FDVElW RSBzZXQsIHNvIGl0IGlzIGRlbGF5ZWQNCj4+Pj4+Pj4gIGRlc3BpdGUgaGF2aW5nICdSRVFfU1lO Qycgc2V0Lg0KPj4+Pj4+DQo+Pj4+Pj5JIGRpZG4ndCBnZXQgeW91ciBwb2ludC4gSXNuJ3QgbGFz dF9zZWN0b3IgLSBsb2dpY2FsX3NlY3RvciA8IGNodW5rX3NlY3RvcnMgdHJ1ZQ0KPj4+Pj4+aW4g dGhlIGNhc2U/DQo+Pj4+Pj4NCj4+Pj4+Pj4gIEFsc28sIGFuZCBtb3JlIHNpZ25pZmljYW50bHks IHBsdWdnaW5nIHNob3VsZCBtZWFuIHRoYXQgdGhlIHZhcmlvdXMNCj4+Pj4+Pj4gIHN0cmlwZV9o ZWFkcyBhcmUgbm90IGV2ZW4gbG9va2VkIGF0IHVudGlsIGFsbCBvZiB0aGUgb3JpZ2luYWwgYmlv IGlzDQo+Pj4+Pj4+ICBwcm9jZXNzZWQsIHNvIHdoaWxlIFNUUklQRV9QUkVSRUFEX0FDVElWRSBt aWdodCBnZXQgc2V0IGVhcmx5LCBpdCBzaG91bGQgbm90DQo+Pj4+Pj4+ICBnZXQgcHJvY2Vzc2Vk IHVudGlsIHRoZSB3aG9sZSBiaW8gaXMgcHJvY2Vzc2VkIGFuZCB0aGUgcXVldWUgaXMgdW5wbHVn Z2VkLg0KPj4+Pj4+Pg0KPj4+Pj4+PiAgU28gSSBkb24ndCB0aGluayB0aGlzIHBhdGNoIHNob3Vs ZCBtYWtlIGEgZGlmZmVyZW5jZSBvbiBsYXJnZSBkaXJlY3Qgd3JpdGVzLA0KPj4+Pj4+PiAgYW5k IGlmIGl0IGRvZXMgdGhlbiBzb21ldGhpbmcgc3RyYW5nZSBpcyBnb2luZyBvbiB0aGF0IEknZCBs aWtlIHRvDQo+Pj4+Pj4+ICB1bmRlcnN0YW5kIGZpcnN0Lg0KPj4+Pj4+DQo+Pj4+Pj5BaGEsIG9r LCB0aGlzIG1ha2VzIHNlbnNlLiByZWNlbnQgZGVsYXllZCBzdHJpcGUgcmVsZWFzZSBzaG91bGQg bWFrZSB0aGUNCj4+Pj4+PnByb2JsZW0gZ28gYXdheS4gU28gSmlhbnBlbmcsIGNhbiB5b3UgdHJ5 IHlvdXIgd29ya2xvYWQgd2l0aCB0aGUgY29tbWl0DQo+Pj4+Pj5yZXZlcnRlZCB3aXRoIGEgcmVj ZW50IGtlcm5lbCBwbGVhc2U/DQo+Pj4+Pj4NCj4+Pj4+IEkgdGVzdGVkIHVzZWQgeW91ciBwYXRj aCBpbiBteSB3b3JrbG9hZC4NCj4+Pj4+IExpa2UgdGhlIG5laWwgc2FpZCwgdGhlIHBlcmZvcm1h bmNlIGRvZXMgbm90IHJlZ3Jlc3MuDQo+Pj4+PiBCdXQgaWYgdGhlIGNvZGUgaXMgOg0KPj4+Pj4+ ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdF9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZF LCAmc2gtPnN0YXRlKSkNCj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxl YXNlX3N0cmlwZShzaCk7DQo+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4+Pj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX3N0cmlwZV9wbHVnKG1kZGV2 LCBzaCk7DQo+Pj4+PiBUaGUgc3BlZWQgaXMgYWJvdXQgNzZNQi9zLldpdGggdGhvc2UgY29kZSB0 aGUgc3BlZWQgaXMgMjAwTUIvcy4NCj4+Pj4NCj4+Pj4gSG1tLCB3aGF0IEkgd2FudCB0byB0ZXN0 IGlzIHVwc3RyZWFtIGtlcm5lbCB3aXRoIGNvbW1pdCA4OTVlM2M1YzU4YTgwYmINCj4+Pj4gcmV2 ZXJ0ZWQuIGRvbid0IGFwcGx5IG15IHBhdGNoLiBXZSB3YW50IHRvIGp1c3QgcmV2ZXJ0IHRoZSBj b21taXQuDQo+Pj4NCj4+PkRpZCB5b3UgaGF2ZSBkYXRhIGZvciB5b3VyIG9yaWdpbmFsIHdvcmts b2FkIHdpdGggODk1ZTNjNWM1OGE4MGJiDQo+Pj5yZXZlcnRlZCBub3c/DQo+PiBvdXIgcmFpZDUg d2hpY2ggaGFkIDE0IFNBVEEgSEREcy4NCj4+DQo+PiB3aXRoICA4OTVlM2M1YzU4YTgwYmIgcmV2 ZXJ0ZWQ6DQo+PiB1c2luZyBkZCB0byB0ZXN0IDU1TUIvcw0KPj4gdXNpbmcgb3VyLWZzIDIwMC0y NTBNYi9zDQo+Pg0KPj4gd2l0aCAgODk1ZTNjNWM1OGE4MGJiOg0KPj4gdXNpbmcgZGQgdG8gdGVz dCAyNzVNQi9zDQo+PiB1c2luZyBvdXItZnMgNTAwLTU1ME1iL3MNCj4NCj53aGF0J3MgYmxvY2sg c2l6ZSBvZiBkZCBpbiB0aGlzIHRlc3Q/IEluIHlvdXIgb3JpZ2luYWwgdGVzdCwgeW91cg0KPkJT IGNvdmVycyBjaHVua19zZWN0b3IqZGF0YV9kaXNrcy4gSW4gdGhhdCBjYXNlLA0KPjg5NWUzYzVj NThhODBiYiBpcyBsaWtlbHkgbm90IHJlcXVpcmVkLg0KTWF5YmUgaXQncyBteSBmYXVsdC4gS2Vy ZWwgdmVyc2lvbiBpcyAzLjQuNCB3aGljaCBkaWQgbm90IGNvbnRhaW4gdGhlIHBhdGNoIDg4MTFi NTk2OGY2MjE2ZTk3Yy4NClNvIGkgd2lsbCByZXRlc3QgaXQuDQo+DQo+SSBndWVzcyB5b3UgYXJl IHVzaW5nIGEgc21hbGxlciBicyB0aGlzIHRpbWUsIHNvIHdlIG5lZWQNCj5tZXJnZSBkaWZmZXJl bnQgYmlvcyB0byBhIHN0cmlwZSBvdmVyd3JpdGU/DQpBdCBwcmVzZW50LCBpbiBvdXIgc2l0dWF0 aW9uLHdlIGNvbnRyb2wgb3VyLWZzIHRvIGRvIGl0Lg0KSWYgbWQgY2FuIHN1cHBvcnQgdGhpcyBm dW5jdGlvbixsaWtlIGlvLXNjaGVkdWxlLiBpdCdzIGJldHRlciBmb3IgYWxsIHdobyBjYW4ndCBj b250b3JsIHVzZS1kYXRlIHRvIGNvdmVyDQpjaHVua19zZWN0b3IqZGF0YV9kaXNrcy4=