From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 360E9C433EF for ; Mon, 13 Jun 2022 21:15:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351804AbiFMVPU (ORCPT ); Mon, 13 Jun 2022 17:15:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352642AbiFMVN6 (ORCPT ); Mon, 13 Jun 2022 17:13:58 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0D8311A3C; Mon, 13 Jun 2022 13:55:36 -0700 (PDT) Received: from kwepemi500016.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4LMP1p17QlzjXcv; Tue, 14 Jun 2022 04:54:06 +0800 (CST) Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by kwepemi500016.china.huawei.com (7.221.188.220) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Tue, 14 Jun 2022 04:55:33 +0800 Received: from lhreml710-chm.china.huawei.com ([169.254.81.184]) by lhreml710-chm.china.huawei.com ([169.254.81.184]) with mapi id 15.01.2375.024; Mon, 13 Jun 2022 21:55:31 +0100 From: Shameerali Kolothum Thodi To: "paulmck@kernel.org" , "zhangfei.gao@foxmail.com" CC: Paolo Bonzini , Zhangfei Gao , "linux-kernel@vger.kernel.org" , "rcu@vger.kernel.org" , Lai Jiangshan , Josh Triplett , Mathieu Desnoyers , Matthew Wilcox , "mtosatti@redhat.com" , Auger Eric , "chenxiang (M)" Subject: RE: Commit 282d8998e997 (srcu: Prevent expedited GPs and blocking readers from consuming CPU) cause qemu boot slow Thread-Topic: Commit 282d8998e997 (srcu: Prevent expedited GPs and blocking readers from consuming CPU) cause qemu boot slow Thread-Index: AQHYfbD23+8d70keY0OaZ8DRkMZOaa1KXTQAgAD2BwCAAGN5gIAAFy8AgAAWoICAAAV3AIAADdIAgAAWawCAAIpHgIAADq2AgAAFgACAACxngIAAWiyAgAASPwCAABqXAIAAcChg Date: Mon, 13 Jun 2022 20:55:31 +0000 Message-ID: <7b6c983b21d44119b61716a66de397ed@huawei.com> References: <20220612162029.GR1790663@paulmck-ThinkPad-P17-Gen-1> <20220612164002.GA1242564@paulmck-ThinkPad-P17-Gen-1> <560f7d27-fe38-0db9-834a-50dda5fa6157@redhat.com> <20220612184944.GU1790663@paulmck-ThinkPad-P17-Gen-1> <20220613035711.GY1790663@paulmck-ThinkPad-P17-Gen-1> <20220613041652.GA3976000@paulmck-ThinkPad-P17-Gen-1> <20220613121831.GA1790663@paulmck-ThinkPad-P17-Gen-1> <20220613145900.GC1790663@paulmck-ThinkPad-P17-Gen-1> In-Reply-To: <20220613145900.GC1790663@paulmck-ThinkPad-P17-Gen-1> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.195.245.77] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGF1bCBFLiBNY0tlbm5l eSBbbWFpbHRvOnBhdWxtY2tAa2VybmVsLm9yZ10NCj4gU2VudDogMTMgSnVuZSAyMDIyIDE1OjU5 DQo+IFRvOiB6aGFuZ2ZlaS5nYW9AZm94bWFpbC5jb20NCj4gQ2M6IFBhb2xvIEJvbnppbmkgPHBi b256aW5pQHJlZGhhdC5jb20+OyBaaGFuZ2ZlaSBHYW8NCj4gPHpoYW5nZmVpLmdhb0BsaW5hcm8u b3JnPjsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gcmN1QHZnZXIua2VybmVsLm9y ZzsgTGFpIEppYW5nc2hhbiA8amlhbmdzaGFubGFpQGdtYWlsLmNvbT47IEpvc2ggVHJpcGxldHQN Cj4gPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz47IE1hdGhpZXUgRGVzbm95ZXJzDQo+IDxtYXRoaWV1 LmRlc25veWVyc0BlZmZpY2lvcy5jb20+OyBNYXR0aGV3IFdpbGNveCA8d2lsbHlAaW5mcmFkZWFk Lm9yZz47DQo+IFNoYW1lZXJhbGkgS29sb3RodW0gVGhvZGkgPHNoYW1lZXJhbGkua29sb3RodW0u dGhvZGlAaHVhd2VpLmNvbT47DQo+IG10b3NhdHRpQHJlZGhhdC5jb207IEF1Z2VyIEVyaWMgPGVy aWMuYXVnZXJAcmVkaGF0LmNvbT4NCj4gU3ViamVjdDogUmU6IENvbW1pdCAyODJkODk5OGU5OTcg KHNyY3U6IFByZXZlbnQgZXhwZWRpdGVkIEdQcyBhbmQNCj4gYmxvY2tpbmcgcmVhZGVycyBmcm9t IGNvbnN1bWluZyBDUFUpIGNhdXNlIHFlbXUgYm9vdCBzbG93DQo+IA0KPiBPbiBNb24sIEp1biAx MywgMjAyMiBhdCAwOToyMzo1MFBNICswODAwLCB6aGFuZ2ZlaS5nYW9AZm94bWFpbC5jb20NCj4g d3JvdGU6DQo+ID4NCj4gPg0KPiA+IE9uIDIwMjIvNi8xMyDkuIvljYg4OjE4LCBQYXVsIEUuIE1j S2VubmV5IHdyb3RlOg0KPiA+ID4gT24gTW9uLCBKdW4gMTMsIDIwMjIgYXQgMDI6NTU6NDdQTSAr MDgwMCwgemhhbmdmZWkuZ2FvQGZveG1haWwuY29tDQo+IHdyb3RlOg0KPiA+ID4gPiBIaSwgUGF1 bA0KPiA+ID4gPg0KPiA+ID4gPiBPbiAyMDIyLzYvMTMg5LiL5Y2IMTI6MTYsIFBhdWwgRS4gTWNL ZW5uZXkgd3JvdGU6DQo+ID4gPiA+ID4gT24gU3VuLCBKdW4gMTIsIDIwMjIgYXQgMDg6NTc6MTFQ TSAtMDcwMCwgUGF1bCBFLiBNY0tlbm5leSB3cm90ZToNCj4gPiA+ID4gPiA+IE9uIE1vbiwgSnVu IDEzLCAyMDIyIGF0IDExOjA0OjM5QU0gKzA4MDAsDQo+IHpoYW5nZmVpLmdhb0Bmb3htYWlsLmNv bSB3cm90ZToNCj4gPiA+ID4gPiA+ID4gSGksIFBhdWwNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID4gT24gMjAyMi82LzEzIOS4iuWNiDI6NDksIFBhdWwgRS4gTWNLZW5uZXkgd3JvdGU6DQo+ ID4gPiA+ID4gPiA+ID4gT24gU3VuLCBKdW4gMTIsIDIwMjIgYXQgMDc6Mjk6MzBQTSArMDIwMCwg UGFvbG8gQm9uemluaQ0KPiB3cm90ZToNCj4gPiA+ID4gPiA+ID4gPiA+IE9uIDYvMTIvMjIgMTg6 NDAsIFBhdWwgRS4gTWNLZW5uZXkgd3JvdGU6DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gRG8gdGhl c2UgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgcmVhbGx5IG5lZWQgdG8gYmUNCj4gYWxsb2NhdGVk IHNlcGFyYXRlbHk/DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKEZvciBleGFtcGxlLCBhcmUgdGhl eSByZWFsbHkgYWxsIG5vbi1jb250aWd1b3VzPyAgSWYgbm90LA0KPiB0aGF0IGlzLCBpZg0KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+IHRoZXJlIGFyZSBhIGxvdCBvZiBjb250aWd1b3VzIG1lbW9yeSBy ZWdpb25zLCBjb3VsZCB5b3UNCj4gc29ydCB0aGUgSU9SVA0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ IGJ5IGFkZHJlc3MgYW5kIGRvIG9uZSBpb2N0bCgpIGZvciBlYWNoIHNldCBvZiBjb250aWd1b3Vz DQo+IG1lbW9yeSByZWdpb25zPykNCj4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g PiA+ID4gPiA+IEFyZSBhbGwgb2YgdGhlc2UgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgc2V0IHVw IGJlZm9yZSBpbml0DQo+IGlzIHNwYXduZWQ/DQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ID4gPiA+ID4gPiBBcmUgYWxsIG9mIHRoZXNlIHJlc2VydmVkIG1lbW9yeSByZWdpb25z IHNldCB1cCB3aGlsZQ0KPiB0aGVyZSBpcyBvbmx5IGENCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBz aW5nbGUgdkNQVSB1cCBhbmQgcnVubmluZz8NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPiA+ID4gPiA+IElzIHRoZSBTUkNVIGdyYWNlIHBlcmlvZCByZWFsbHkgbmVlZGVkIGlu IHRoaXMgY2FzZT8gIChJDQo+IGZyZWVseSBjb25mZXNzDQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g dG8gbm90IGJlaW5nIGFsbCB0aGF0IGZhbWlsaWFyIHdpdGggS1ZNLikNCj4gPiA+ID4gPiA+ID4g PiA+ID4gT2gsIGFuZCB0aGVyZSB3YXMgYSBzaW1pbGFyIG1hbnktcmVxdWVzdHMgcHJvYmxlbSB3 aXRoDQo+IG5ldHdvcmtpbmcgbWFueQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiB5ZWFycyBhZ28uICBU aGlzIHdhcyBzb2x2ZWQgYnkgYWRkaW5nIGEgbmV3DQo+IHN5c2NhbGwvaW9jdGwoKS93aGF0ZXZl cg0KPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGF0IHBlcm1pdHRlZCBtYW55IHJlcXVlc3RzIHRvIGJl IHByZXNlbnRlZCB0byB0aGUga2VybmVsDQo+IHdpdGggYSBzaW5nbGUNCj4gPiA+ID4gPiA+ID4g PiA+ID4gc3lzdGVtIGNhbGwuDQo+ID4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g PiA+IENvdWxkIGEgbmV3IGlvY3RsKCkgYmUgaW50cm9kdWNlZCB0aGF0IHJlcXVlc3RlZCBhIGxh cmdlDQo+IG51bWJlcg0KPiA+ID4gPiA+ID4gPiA+ID4gPiBvZiB0aGVzZSBtZW1vcnkgcmVnaW9u cyBpbiBvbmUgZ28gc28gYXMgdG8gbWFrZSBlYWNoIGNhbGwgdG8NCj4gPiA+ID4gPiA+ID4gPiA+ ID4gc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCgpIGNvdmVyIGEgdXNlZnVsIGZyYWN0aW9uIG9m IHlvdXINCj4gOTAwMCsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gcmVxdWVzdHM/ICBBZGRpbmcgYSBm ZXcgb2YgdGhlIEtWTSBndXlzIG9uIENDIGZvciB0aGVpcg0KPiB0aG91Z2h0cy4NCj4gPiA+ID4g PiA+ID4gPiA+IFVuZm9ydHVuYXRlbHkgbm90LiAgQXBhcnQgZnJvbSB0aGlzIHNwZWNpZmljIGNh c2UsIGluIGdlbmVyYWwNCj4gdGhlIGNhbGxzIHRvDQo+ID4gPiA+ID4gPiA+ID4gPiBLVk1fU0VU X1VTRVJfTUVNT1JZX1JFR0lPTiBhcmUgdHJpZ2dlcmVkIGJ5IHdyaXRlcyB0bw0KPiBJL08gcmVn aXN0ZXJzIGluIHRoZQ0KPiA+ID4gPiA+ID4gPiA+ID4gZ3Vlc3QsIGFuZCB0aG9zZSB3cml0ZXMg dGhlbiBtYXAgdG8gYSBpb2N0bC4gIFR5cGljYWxseSB0aGUNCj4gZ3Vlc3Qgc2V0cyB1cCBhDQo+ ID4gPiA+ID4gPiA+ID4gPiBkZXZpY2UgYXQgYSB0aW1lLCBhbmQgZWFjaCBzZXR1cCBzdGVwIGNh dXNlcyBhDQo+IHN5bmNocm9uaXplX3NyY3UoKS0tLWFuZA0KPiA+ID4gPiA+ID4gPiA+ID4gZXhw ZWRpdGVkIGF0IHRoYXQuDQo+ID4gPiA+ID4gPiA+ID4gSSB3YXMgYWZyYWlkIG9mIHNvbWV0aGlu ZyBsaWtlIHRoYXQuLi4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gS1ZNIGhh cyB0d28gU1JDVXM6DQo+ID4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gMSkga3Zt LT5pcnFfc3JjdSBpcyBoYXJkbHkgcmVseWluZyBvbiB0aGUgInNsZWVwYWJsZSIgcGFydDsgaXQN Cj4gaGFzIHJlYWRlcnMNCj4gPiA+ID4gPiA+ID4gPiA+IHRoYXQgYXJlIHZlcnkgdmVyeSBzbWFs bCwgYnV0IGl0IG5lZWRzIGV4dHJlbWVseSBmYXN0IGRldGVjdGlvbg0KPiBvZiBncmFjZQ0KPiA+ ID4gPiA+ID4gPiA+ID4gcGVyaW9kczsgc2VlIGNvbW1pdCA3MTlkOTNjZDVmNWMgKCJrdm0vaXJx Y2hpcDogU3BlZWQgdXANCj4gPiA+ID4gPiA+ID4gPiA+IEtWTV9TRVRfR1NJX1JPVVRJTkciLCAy MDE0LTA1LTA1KSB3aGljaCBzcGxpdCBpdCBvZmYNCj4ga3ZtLT5zcmN1LiAgUmVhZGVycyBhcmUN Cj4gPiA+ID4gPiA+ID4gPiA+IG5vdCBzbyBmcmVxdWVudC4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiA+ID4gPiAyKSBrdm0tPnNyY3UgaXMgbmFzdGllciBiZWNhdXNlIHRoZXJlIGFy ZSByZWFkZXJzIGFsbCB0aGUgdGltZS4NCj4gVGhlDQo+ID4gPiA+ID4gPiA+ID4gPiByZWFkLXNp ZGUgY3JpdGljYWwgc2VjdGlvbiBhcmUgc3RpbGwgc2hvcnQtaXNoLCBidXQgdGhleSBuZWVkIHRo ZQ0KPiBzbGVlcGFibGUNCj4gPiA+ID4gPiA+ID4gPiA+IHBhcnQgYmVjYXVzZSB0aGV5IGFjY2Vz cyB1c2VyIG1lbW9yeS4NCj4gPiA+ID4gPiA+ID4gPiBXaGljaCBvbmUgb2YgdGhlc2UgdHdvIGlz IGluIHBsYXkgaW4gdGhpcyBjYXNlPw0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g PiBXcml0ZXJzIGFyZSBub3QgZnJlcXVlbnQgcGVyIHNlOyB0aGUgcHJvYmxlbSBpcyB0aGV5IGNv bWUgaW4NCj4gdmVyeSBsYXJnZQ0KPiA+ID4gPiA+ID4gPiA+ID4gYnVyc3RzIHdoZW4gYSBndWVz dCBib290cy4gIEFuZCB3aGlsZSB0aGUgd2hvbGUgYm9vdCBwYXRoDQo+IG92ZXJhbGwgY2FuIGJl DQo+ID4gPiA+ID4gPiA+ID4gPiBxdWFkcmF0aWMsIE8obikgZXhwZW5zaXZlIGNhbGxzIHRvIHN5 bmNocm9uaXplX3NyY3UoKSBjYW4gaGF2ZQ0KPiBhIGxhcmdlcg0KPiA+ID4gPiA+ID4gPiA+ID4g aW1wYWN0IG9uIHJ1bnRpbWUgdGhhbiB0aGUgTyhuXjIpIHBhcnRzLCBhcyBkZW1vbnN0cmF0ZWQN Cj4gaGVyZS4NCj4gPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiBUaGVyZWZvcmUs IHdlIG9wZXJhdGVkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGNhbGxlcnMgb2YNCj4gPiA+ ID4gPiA+ID4gPiA+IHN5bmNocm9uaXplZF9zcmN1X2V4cGVkaXRlZCB3ZXJlIF9hbnl3YXlfIGJ1 c3kgcnVubmluZw0KPiBDUFUtYm91bmQgZ3Vlc3QgY29kZQ0KPiA+ID4gPiA+ID4gPiA+ID4gYW5k IHRoZSBkZXNpcmUgd2FzIHRvIGdldCBwYXN0IHRoZSBib290aW5nIHBoYXNlIGFzIGZhc3QgYXMN Cj4gcG9zc2libGUuICBJZg0KPiA+ID4gPiA+ID4gPiA+ID4gdGhlIGd1ZXN0IHdhbnRzIHRvIGVh dCBob3N0IENQVSBpdCBjYW4gImZvcig7OykiIGFzIG11Y2ggYXMgaXQNCj4gd2FudHM7DQo+ID4g PiA+ID4gPiA+ID4gPiB0aGVyZWZvcmUsIGFzIGxvbmcgYXMgZXhwZWRpdGVkIEdQcyBkaWRuJ3Qg ZWF0IENQVQ0KPiAqdGhyb3VnaG91dCB0aGUgd2hvbGUNCj4gPiA+ID4gPiA+ID4gPiA+IHN5c3Rl bSosIGEgcHJlZW1wdGFibGUgYnVzeSB3YWl0IGluDQo+IHN5bmNocm9uaXplX3NyY3VfZXhwZWRp dGVkKCkgd2VyZSBub3QNCj4gPiA+ID4gPiA+ID4gPiA+IHByb2JsZW1hdGljLg0KPiA+ID4gPiA+ ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+IFRoaXMgYXNzdW1wdGlvbnMgZGlkIG1hdGNoIHRo ZSBTUkNVIGNvZGUgd2hlbiBrdm0tPnNyY3UNCj4gYW5kIGt2bS0+aXJxX3NyY3UNCj4gPiA+ID4g PiA+ID4gPiA+IHdlcmUgd2FzIGludHJvZHVjZWQgKHJlc3BlY3RpdmVseSBpbiAyMDA5IGFuZCAy MDE0KS4gIEJ1dA0KPiBwZXJoYXBzIHRoZXkgZG8NCj4gPiA+ID4gPiA+ID4gPiA+IG5vdCBob2xk IGFueW1vcmUgbm93IHRoYXQgZWFjaCBTUkNVIGlzIG5vdCBhcyBpbmRlcGVuZGVudA0KPiBhcyBp dCB1c2VkIHRvIGJlDQo+ID4gPiA+ID4gPiA+ID4gPiBpbiB0aG9zZSB5ZWFycywgYW5kIGluc3Rl YWQgdGhleSB1c2Ugd29ya3F1ZXVlcyBpbnN0ZWFkPw0KPiA+ID4gPiA+ID4gPiA+IFRoZSBwcm9i bGVtIHdhcyBub3QgaW50ZXJuYWwgdG8gU1JDVSwgYnV0IHJhdGhlciBkdWUgdG8gdGhlIGZhY3QN Cj4gPiA+ID4gPiA+ID4gPiB0aGF0IGtlcm5lbCBsaXZlIHBhdGNoaW5nIChLTFApIGhhZCBwcm9i bGVtcyB3aXRoIHRoZQ0KPiBDUFUtYm91bmQgdGFza3MNCj4gPiA+ID4gPiA+ID4gPiByZXN1bHRp bmcgZnJvbSByZXBlYXRlZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKCkNCj4gaW52b2NhdGlv bnMuICBTbyBJDQo+ID4gPiA+ID4gPiA+ID4gYWRkZWQgaGV1cmlzdGljcyB0byBnZXQgdGhlIG9j Y2FzaW9uYWwgc2xlZXAgaW4gdGhlcmUgZm9yIEtMUCdzDQo+IGJlbmVmaXQuDQo+ID4gPiA+ID4g PiA+ID4gUGVyaGFwcyB0aGVzZSBoZXVyaXN0aWNzIG5lZWQgdG8gYmUgbGVzcyBhZ2dyZXNzaXZl IGFib3V0IGFkZGluZw0KPiBzbGVlcC4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ IFRoZXNlIGhldXJpc3RpY3MgaGF2ZSB0aGVzZSBhc3BlY3RzOg0KPiA+ID4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiA+ID4gMS4JVGhlIGxvbmdlciByZWFkZXJzIHBlcnNpc3QgaW4gYW4gZXhwZWRp dGVkIFNSQ1UgZ3JhY2UgcGVyaW9kLA0KPiA+ID4gPiA+ID4gPiA+IAl0aGUgbG9uZ2VyIHRoZSB3 YWl0IGJldHdlZW4gc3VjY2Vzc2l2ZSBjaGVja3Mgb2YgdGhlIHJlYWRlcg0KPiA+ID4gPiA+ID4g PiA+IAlzdGF0ZS4gIFJvdWdobHkgc3BlYWtpbmcsIHdlIHdhaXQgYXMgbG9uZyBhcyB0aGUgZ3Jh Y2UgcGVyaW9kDQo+ID4gPiA+ID4gPiA+ID4gCWhhcyBjdXJyZW50bHkgYmVlbiBpbiBlZmZlY3Qs IGNhcHBlZCBhdCB0ZW4gamlmZmllcy4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ IDIuCVNSQ1UgZ3JhY2UgcGVyaW9kcyBoYXZlIHNldmVyYWwgcGhhc2VzLiAgV2UgcmVzZXQgc28g dGhhdA0KPiBlYWNoDQo+ID4gPiA+ID4gPiA+ID4gCXBoYXNlIHN0YXJ0cyBieSBub3Qgd2FpdGlu ZyAobmV3IHBoYXNlLCBuZXcgc2V0IG9mIHJlYWRlcnMsDQo+ID4gPiA+ID4gPiA+ID4gCXNvIGRv bid0IHBlbmFsaXplIHRoaXMgc2V0IGZvciB0aGUgc2lucyBvZiB0aGUgcHJldmlvdXMgc2V0KS4N Cj4gPiA+ID4gPiA+ID4gPiAJQnV0IG9uY2Ugd2UgZ2V0IHRvIHRoZSBwb2ludCBvZiBhZGRpbmcg ZGVsYXksIHdlIGFkZCB0aGUNCj4gPiA+ID4gPiA+ID4gPiAJZGVsYXkgYmFzZWQgb24gdGhlIGJl Z2lubmluZyBvZiB0aGUgZnVsbCBncmFjZSBwZXJpb2QuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+ID4gPiBSaWdodCBub3csIHRoZSBjaGVja2luZyBmb3IgZ3JhY2UtcGVyaW9kIGxlbmd0 aCBkb2VzIG5vdCBhbGxvdw0KPiBmb3IgdGhlDQo+ID4gPiA+ID4gPiA+ID4gcG9zc2liaWxpdHkg dGhhdCBhIGdyYWNlIHBlcmlvZCBtaWdodCBzdGFydCBqdXN0IGJlZm9yZSB0aGUgamlmZmllcw0K PiA+ID4gPiA+ID4gPiA+IGNvdW50ZXIgZ2V0cyBpbmNyZW1lbnRlZCAoYmVjYXVzZSBJIGRpZG4n dCByZWFsaXplIHRoYXQgYW55b25lDQo+IGNhcmVkKSwNCj4gPiA+ID4gPiA+ID4gPiBzbyB0aGF0 IGlzIG9uZSBwb3NzaWJsZSB0aGluZyB0byBjaGFuZ2UuICBJIGNhbiBhbHNvIGFsbG93IG1vcmUN Cj4gbm8tZGVsYXkNCj4gPiA+ID4gPiA+ID4gPiBjaGVja3MgcGVyIFNSQ1UgZ3JhY2UtcGVyaW9k IHBoYXNlLg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gWmhhbmdmZWksIGRvZXMg c29tZXRoaW5nIGxpa2UgdGhlIHBhdGNoIHNob3duIGJlbG93IGhlbHA/DQo+ID4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gPiBBZGRpdGlvbmFsIGFkanVzdG1lbnRzIGFyZSBsaWtlbHkgbmVl ZGVkIHRvIGF2b2lkIHJlLWJyZWFraW5nDQo+IEtMUCwNCj4gPiA+ID4gPiA+ID4gPiBidXQgd2Ug aGF2ZSB0byBzdGFydCBzb21ld2hlcmUuLi4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g PiA+IAkJCQkJCQlUaGFueCwgUGF1bA0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBkaWZmIC0t Z2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jDQo+ID4g PiA+ID4gPiA+ID4gaW5kZXggNTBiYTcwZjAxOWRlYS4uNmEzNTQzNjhhYzFkMSAxMDA2NDQNCj4g PiA+ID4gPiA+ID4gPiAtLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMNCj4gPiA+ID4gPiA+ID4g PiArKysgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMNCj4gPiA+ID4gPiA+ID4gPiBAQCAtNTEzLDcg KzUxMyw3IEBAIHN0YXRpYyBib29sIHNyY3VfcmVhZGVyc19hY3RpdmUoc3RydWN0DQo+IHNyY3Vf c3RydWN0ICpzc3ApDQo+ID4gPiA+ID4gPiA+ID4gICAgICNkZWZpbmUgU1JDVV9JTlRFUlZBTAkJ MQkvLyBCYXNlIGRlbGF5IGlmIG5vDQo+IGV4cGVkaXRlZCBHUHMgcGVuZGluZy4NCj4gPiA+ID4g PiA+ID4gPiAgICAgI2RlZmluZSBTUkNVX01BWF9JTlRFUlZBTAkxMAkvLyBNYXhpbXVtDQo+IGlu Y3JlbWVudGFsIGRlbGF5IGZyb20gc2xvdyByZWFkZXJzLg0KPiA+ID4gPiA+ID4gPiA+IC0jZGVm aW5lIFNSQ1VfTUFYX05PREVMQVlfUEhBU0UJMQkvLyBNYXhpbXVtDQo+IHBlci1HUC1waGFzZSBj b25zZWN1dGl2ZSBuby1kZWxheSBpbnN0YW5jZXMuDQo+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUg U1JDVV9NQVhfTk9ERUxBWV9QSEFTRQkzCS8vIE1heGltdW0NCj4gcGVyLUdQLXBoYXNlIGNvbnNl Y3V0aXZlIG5vLWRlbGF5IGluc3RhbmNlcy4NCj4gPiA+ID4gPiA+ID4gPiAgICAgI2RlZmluZSBT UkNVX01BWF9OT0RFTEFZCTEwMAkvLyBNYXhpbXVtDQo+IGNvbnNlY3V0aXZlIG5vLWRlbGF5IGlu c3RhbmNlcy4NCj4gPiA+ID4gPiA+ID4gPiAgICAgLyoNCj4gPiA+ID4gPiA+ID4gPiBAQCAtNTIy LDEyICs1MjIsMTggQEAgc3RhdGljIGJvb2wgc3JjdV9yZWFkZXJzX2FjdGl2ZShzdHJ1Y3QNCj4g c3JjdV9zdHJ1Y3QgKnNzcCkNCj4gPiA+ID4gPiA+ID4gPiAgICAgICovDQo+ID4gPiA+ID4gPiA+ ID4gICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ2V0X2RlbGF5KHN0cnVjdCBzcmN1X3N0 cnVjdA0KPiAqc3NwKQ0KPiA+ID4gPiA+ID4gPiA+ICAgICB7DQo+ID4gPiA+ID4gPiA+ID4gKwl1 bnNpZ25lZCBsb25nIGdwc3RhcnQ7DQo+ID4gPiA+ID4gPiA+ID4gKwl1bnNpZ25lZCBsb25nIGo7 DQo+ID4gPiA+ID4gPiA+ID4gICAgIAl1bnNpZ25lZCBsb25nIGpiYXNlID0gU1JDVV9JTlRFUlZB TDsNCj4gPiA+ID4gPiA+ID4gPiAgICAgCWlmIChVTE9OR19DTVBfTFQoUkVBRF9PTkNFKHNzcC0+ c3JjdV9ncF9zZXEpLA0KPiBSRUFEX09OQ0Uoc3NwLT5zcmN1X2dwX3NlcV9uZWVkZWRfZXhwKSkp DQo+ID4gPiA+ID4gPiA+ID4gICAgIAkJamJhc2UgPSAwOw0KPiA+ID4gPiA+ID4gPiA+IC0JaWYg KHJjdV9zZXFfc3RhdGUoUkVBRF9PTkNFKHNzcC0+c3JjdV9ncF9zZXEpKSkNCj4gPiA+ID4gPiA+ ID4gPiAtCQlqYmFzZSArPSBqaWZmaWVzIC0gUkVBRF9PTkNFKHNzcC0+c3JjdV9ncF9zdGFydCk7 DQo+ID4gPiA+ID4gPiA+ID4gKwlpZiAocmN1X3NlcV9zdGF0ZShSRUFEX09OQ0Uoc3NwLT5zcmN1 X2dwX3NlcSkpKSB7DQo+ID4gPiA+ID4gPiA+ID4gKwkJaiA9IGppZmZpZXMgLSAxOw0KPiA+ID4g PiA+ID4gPiA+ICsJCWdwc3RhcnQgPSBSRUFEX09OQ0Uoc3NwLT5zcmN1X2dwX3N0YXJ0KTsNCj4g PiA+ID4gPiA+ID4gPiArCQlpZiAodGltZV9hZnRlcihqLCBncHN0YXJ0KSkNCj4gPiA+ID4gPiA+ ID4gPiArCQkJamJhc2UgKz0gaiAtIGdwc3RhcnQ7DQo+ID4gPiA+ID4gPiA+ID4gKwl9DQo+ID4g PiA+ID4gPiA+ID4gICAgIAlpZiAoIWpiYXNlKSB7DQo+ID4gPiA+ID4gPiA+ID4gICAgIAkJV1JJ VEVfT05DRShzc3AtPnNyY3Vfbl9leHBfbm9kZWxheSwNCj4gUkVBRF9PTkNFKHNzcC0+c3JjdV9u X2V4cF9ub2RlbGF5KSArIDEpOw0KPiA+ID4gPiA+ID4gPiA+ICAgICAJCWlmIChSRUFEX09OQ0Uo c3NwLT5zcmN1X25fZXhwX25vZGVsYXkpID4NCj4gU1JDVV9NQVhfTk9ERUxBWV9QSEFTRSkNCj4g PiA+ID4gPiA+ID4gVW5mb3J0dW5hdGVseSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBoZWxwZnVsLg0K PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBUaGVuIHJlLWFkZCB0aGUgZGVidWcgaW5mby4N Cj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gRHVyaW5nIHRoZSBxZW11IGJvb3QNCj4gPiA+ ID4gPiA+ID4gW8KgIDIzMi45OTc2NjddwqAgX19zeW5jaHJvbml6ZV9zcmN1IGxvb3A9MTAwMA0K PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBbwqAgMzYxLjA5NDQ5M13CoCBfX3N5bmNocm9u aXplX3NyY3UgbG9vcD05MDAwDQo+ID4gPiA+ID4gPiA+IFvCoCAzNjEuMDk0NTAxXSBDYWxsIHRy YWNlOg0KPiA+ID4gPiA+ID4gPiBbwqAgMzYxLjA5NDUwMl3CoCBkdW1wX2JhY2t0cmFjZSsweGU0 LzB4ZjANCj4gPiA+ID4gPiA+ID4gW8KgIDM2MS4wOTQ1MDVdwqAgc2hvd19zdGFjaysweDIwLzB4 NzANCj4gPiA+ID4gPiA+ID4gW8KgIDM2MS4wOTQ1MDddwqAgZHVtcF9zdGFja19sdmwrMHg4Yy8w eGI4DQo+ID4gPiA+ID4gPiA+IFvCoCAzNjEuMDk0NTA5XcKgIGR1bXBfc3RhY2srMHgxOC8weDM0 DQo+ID4gPiA+ID4gPiA+IFvCoCAzNjEuMDk0NTExXcKgIF9fc3luY2hyb25pemVfc3JjdSsweDEy MC8weDEyOA0KPiA+ID4gPiA+ID4gPiBbwqAgMzYxLjA5NDUxNF3CoCBzeW5jaHJvbml6ZV9zcmN1 X2V4cGVkaXRlZCsweDJjLzB4NDANCj4gPiA+ID4gPiA+ID4gW8KgIDM2MS4wOTQ1MTVdwqAga3Zt X3N3YXBfYWN0aXZlX21lbXNsb3RzKzB4MTMwLzB4MTk4DQo+ID4gPiA+ID4gPiA+IFvCoCAzNjEu MDk0NTE5XcKgIGt2bV9hY3RpdmF0ZV9tZW1zbG90KzB4NDAvMHg2OA0KPiA+ID4gPiA+ID4gPiBb wqAgMzYxLjA5NDUyMF3CoCBrdm1fc2V0X21lbXNsb3QrMHgyZjgvMHgzYjANCj4gPiA+ID4gPiA+ ID4gW8KgIDM2MS4wOTQ1MjNdwqAgX19rdm1fc2V0X21lbW9yeV9yZWdpb24rMHgyZTQvMHg0MzgN Cj4gPiA+ID4gPiA+ID4gW8KgIDM2MS4wOTQ1MjRdwqAga3ZtX3NldF9tZW1vcnlfcmVnaW9uKzB4 NzgvMHhiOA0KPiA+ID4gPiA+ID4gPiBbwqAgMzYxLjA5NDUyNl3CoCBrdm1fdm1faW9jdGwrMHg1 YTAvMHgxM2UwDQo+ID4gPiA+ID4gPiA+IFvCoCAzNjEuMDk0NTI4XcKgIF9fYXJtNjRfc3lzX2lv Y3RsKzB4YjAvMHhmOA0KPiA+ID4gPiA+ID4gPiBbwqAgMzYxLjA5NDUzMF3CoCBpbnZva2Vfc3lz Y2FsbCsweDRjLzB4MTEwDQo+ID4gPiA+ID4gPiA+IFvCoCAzNjEuMDk0NTMzXcKgIGVsMF9zdmNf Y29tbW9uLmNvbnN0cHJvcC4wKzB4NjgvMHgxMjgNCj4gPiA+ID4gPiA+ID4gW8KgIDM2MS4wOTQ1 MzZdwqAgZG9fZWwwX3N2YysweDM0LzB4YzANCj4gPiA+ID4gPiA+ID4gW8KgIDM2MS4wOTQ1Mzhd wqAgZWwwX3N2YysweDMwLzB4OTgNCj4gPiA+ID4gPiA+ID4gW8KgIDM2MS4wOTQ1NDFdwqAgZWww dF82NF9zeW5jX2hhbmRsZXIrMHhiOC8weGMwDQo+ID4gPiA+ID4gPiA+IFvCoCAzNjEuMDk0NTQ0 XcKgIGVsMHRfNjRfc3luYysweDE4Yy8weDE5MA0KPiA+ID4gPiA+ID4gPiBbwqAgMzYzLjk0Mjgx N13CoCBrdm1fc2V0X21lbW9yeV9yZWdpb24gbG9vcD02MDAwDQo+ID4gPiA+ID4gPiBIdWguDQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gT25lIHBvc3NpYmlsaXR5IGlzIHRoYXQgdGhlICJpZiAo IWpiYXNlKSIgYmxvY2sgbmVlZHMgdG8gYmUgbmVzdGVkDQo+ID4gPiA+ID4gPiB3aXRoaW4gdGhl ICJpZiAocmN1X3NlcV9zdGF0ZShSRUFEX09OQ0Uoc3NwLT5zcmN1X2dwX3NlcSkpKSB7Ig0KPiBi bG9jay4NCj4gPiA+ID4gSSB0ZXN0IHRoaXMgZGlmZiBhbmQgTk8gaGVscGZ1bA0KPiA+ID4gPg0K PiA+ID4gPiBkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9z cmN1dHJlZS5jDQo+ID4gPiA+IGluZGV4IDUwYmE3MGYwMTlkZS4uMzYyODZhNGI3NGU2IDEwMDY0 NA0KPiA+ID4gPiAtLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMNCj4gPiA+ID4gKysrIGIva2Vy bmVsL3JjdS9zcmN1dHJlZS5jDQo+ID4gPiA+IEBAIC01MTMsNyArNTEzLDcgQEAgc3RhdGljIGJv b2wgc3JjdV9yZWFkZXJzX2FjdGl2ZShzdHJ1Y3QNCj4gc3JjdV9zdHJ1Y3QgKnNzcCkNCj4gPiA+ ID4NCj4gPiA+ID4gIMKgI2RlZmluZSBTUkNVX0lOVEVSVkFMwqDCoMKgwqDCoMKgwqDCoMKgIDHC oMKgwqDCoMKgwqAgLy8gQmFzZSBkZWxheSBpZiBubw0KPiBleHBlZGl0ZWQgR1BzDQo+ID4gPiA+ IHBlbmRpbmcuDQo+ID4gPiA+ICDCoCNkZWZpbmUgU1JDVV9NQVhfSU5URVJWQUzCoMKgwqDCoMKg IDEwwqDCoMKgwqDCoCAvLyBNYXhpbXVtDQo+IGluY3JlbWVudGFsIGRlbGF5IGZyb20NCj4gPiA+ ID4gc2xvdyByZWFkZXJzLg0KPiA+ID4gPiAtI2RlZmluZSBTUkNVX01BWF9OT0RFTEFZX1BIQVNF IDHCoMKgwqDCoMKgwqAgLy8gTWF4aW11bQ0KPiBwZXItR1AtcGhhc2UgY29uc2VjdXRpdmUNCj4g PiA+ID4gbm8tZGVsYXkgaW5zdGFuY2VzLg0KPiA+ID4gPiArI2RlZmluZSBTUkNVX01BWF9OT0RF TEFZX1BIQVNFIDPCoMKgwqDCoMKgwqAgLy8gTWF4aW11bQ0KPiBwZXItR1AtcGhhc2UgY29uc2Vj dXRpdmUNCj4gPiA+ID4gbm8tZGVsYXkgaW5zdGFuY2VzLg0KPiA+ID4gPiAgwqAjZGVmaW5lIFNS Q1VfTUFYX05PREVMQVnCoMKgwqDCoMKgwqAgMTAwwqDCoMKgwqAgLy8gTWF4aW11bQ0KPiBjb25z ZWN1dGl2ZSBuby1kZWxheQ0KPiA+ID4gPiBpbnN0YW5jZXMuDQo+ID4gPiA+DQo+ID4gPiA+ICDC oC8qDQo+ID4gPiA+IEBAIC01MjIsMTYgKzUyMiwyMyBAQCBzdGF0aWMgYm9vbCBzcmN1X3JlYWRl cnNfYWN0aXZlKHN0cnVjdA0KPiBzcmN1X3N0cnVjdA0KPiA+ID4gPiAqc3NwKQ0KPiA+ID4gPiAg wqAgKi8NCj4gPiA+ID4gIMKgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9nZXRfZGVsYXkoc3Ry dWN0IHNyY3Vfc3RydWN0ICpzc3ApDQo+ID4gPiA+ICDCoHsNCj4gPiA+ID4gK8KgwqDCoMKgwqDC oCB1bnNpZ25lZCBsb25nIGdwc3RhcnQ7DQo+ID4gPiA+ICvCoMKgwqDCoMKgwqAgdW5zaWduZWQg bG9uZyBqOw0KPiA+ID4gPiAgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBqYmFzZSA9IFNS Q1VfSU5URVJWQUw7DQo+ID4gPiA+DQo+ID4gPiA+ICDCoMKgwqDCoMKgwqDCoCBpZiAoVUxPTkdf Q01QX0xUKFJFQURfT05DRShzc3AtPnNyY3VfZ3Bfc2VxKSwNCj4gPiA+ID4gUkVBRF9PTkNFKHNz cC0+c3JjdV9ncF9zZXFfbmVlZGVkX2V4cCkpKQ0KPiA+ID4gPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGpiYXNlID0gMDsNCj4gPiA+ID4gLcKgwqDCoMKgwqDCoCBpZiAocmN1X3Nl cV9zdGF0ZShSRUFEX09OQ0Uoc3NwLT5zcmN1X2dwX3NlcSkpKQ0KPiA+ID4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBqYmFzZSArPSBqaWZmaWVzIC0NCj4gUkVBRF9PTkNFKHNzcC0+ c3JjdV9ncF9zdGFydCk7DQo+ID4gPiA+IC3CoMKgwqDCoMKgwqAgaWYgKCFqYmFzZSkgew0KPiA+ ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBXUklURV9PTkNFKHNzcC0+c3JjdV9u X2V4cF9ub2RlbGF5LA0KPiA+ID4gPiBSRUFEX09OQ0Uoc3NwLT5zcmN1X25fZXhwX25vZGVsYXkp ICsgMSk7DQo+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChSRUFEX09O Q0Uoc3NwLT5zcmN1X25fZXhwX25vZGVsYXkpID4NCj4gPiA+ID4gU1JDVV9NQVhfTk9ERUxBWV9Q SEFTRSkNCj4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGpiYXNlID0gMTsNCj4gPiA+ID4gK8KgwqDCoMKgwqDCoCBpZiAocmN1X3NlcV9zdGF0ZShS RUFEX09OQ0Uoc3NwLT5zcmN1X2dwX3NlcSkpKSB7DQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGogPSBqaWZmaWVzIC0gMTsNCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ3BzdGFydCA9IFJFQURfT05DRShzc3AtPnNyY3VfZ3Bfc3RhcnQpOw0KPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAodGltZV9hZnRlcihqLCBncHN0 YXJ0KSkNCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGpiYXNlICs9IGogLSBncHN0YXJ0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmICghamJhc2UpIHsNCj4gPiA+ID4NCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFdSSVRFX09OQ0Uoc3NwLT5zcmN1X25f ZXhwX25vZGVsYXksDQo+ID4gPiA+IFJFQURfT05DRShzc3AtPnNyY3Vfbl9leHBfbm9kZWxheSkg KyAxKTsNCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmDQo+IChSRUFEX09OQ0Uoc3NwLT5zcmN1X25fZXhwX25vZGVsYXkpID4NCj4gPiA+ID4g U1JDVV9NQVhfTk9ERUxBWV9QSEFTRSkNCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBqYmFzZSA9IDE7DQo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gPiA+ID4gIMKgwqDCoMKgwqDCoMKg IH0NCj4gPiA+IFRoYXQgaXMgaW4gZmFjdCB3aGF0IEkgd2FzIGludGVuZGluZyB5b3UgdG8gdGVz dCwgdGhhbmsgeW91LiAgQXMgeW91DQo+ID4gPiBzYXksIHVuZm9ydHVuYXRlbHkgaXQgZGlkIG5v dCBoZWxwLg0KPiA+ID4NCj4gPiA+IENvdWxkIHlvdSBwbGVhc2UgdGVzdCByZW1vdmluZyB0aGUg ImlmICghamJhc2UpIiBibG9jayBlbnRpcmVseT8NCj4gPiBSZW1vdmUgImlmICghamJhc2UpIiBi bG9jayBpcyBtdWNoIGZhc3RlciwNCj4gPiBub3QgbWVhc3VyZSBjbGVhcmx5LCBxZW11ICh3aXRo IGRlYnVnIHZlcnNpb24gZWZpKSBib290IHNlZW1zIG5vcm1hbGx5Lg0KPiA+DQo+ID4gRnJvbSBs b2cgdGltZXN0YW1wOg0KPiA+IFvCoCAxMTQuNjI0NzEzXSBfX3N5bmNocm9uaXplX3NyY3UgbG9v cD0xMDAwDQo+ID4gW8KgIDEyNC4xNTcwMTFdwqAgX19zeW5jaHJvbml6ZV9zcmN1IGxvb3A9OTAw MA0KPiA+DQo+ID4gU2V2ZXJhbCBtZXRob2Q6IHRpbWVzdGFtcHMgYXJlIGRpZmZlcmVudC4NCj4g Pg0KPiA+IDUuMTktcmMxDQo+ID4gWyAgIDk0LjI3MTM1MF0gIF9fc3luY2hyb25pemVfc3JjdSBs b29wPTEwMDENCj4gPiBbICAyMjIuNjIxNjU5XSAgX19zeW5jaHJvbml6ZV9zcmN1IGxvb3A9OTAw MQ0KPiA+DQo+ID4NCj4gPiBXaXRoIHlvdXIgZmlyc3QgZGlmZjoNCj4gPiBbICAyMzIuOTk3NjY3 XSAgX19zeW5jaHJvbml6ZV9zcmN1IGxvb3A9MTAwMA0KPiA+IFsgIDM2MS4wOTQ0OTNdICBfX3N5 bmNocm9uaXplX3NyY3UgbG9vcD05MDAwDQo+ID4NCj4gPiBSZW1vdmUgImlmICghamJhc2UpIiBi bG9jaw0KPiA+IFsgIDExNC42MjQ3MTNdIF9fc3luY2hyb25pemVfc3JjdSBsb29wPTEwMDANCj4g PiBbICAxMjQuMTU3MDExXSAgX19zeW5jaHJvbml6ZV9zcmN1IGxvb3A9OTAwMA0KPiA+DQo+ID4N Cj4gPiA1LjE4IG1ldGhvZA0KPiA+ICsgICAgICAgaWYgKFVMT05HX0NNUF9MVChSRUFEX09OQ0Uo c3NwLT5zcmN1X2dwX3NlcSksDQo+IFJFQURfT05DRShzc3AtPnNyY3VfZ3Bfc2VxX25lZWRlZF9l eHApKSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgICByZXR1cm4g U1JDVV9JTlRFUlZBTDsNCj4gPg0KPiA+IFsgICA3NC41OTg0ODBdIF9fc3luY2hyb25pemVfc3Jj dSBsb29wPTkwMDANCj4gPiBbICAgNjguOTM4Mjk3XSBfX3N5bmNocm9uaXplX3NyY3UgbG9vcD0x MDAwDQo+IA0KPiBUaGFuayB5b3UgZm9yIHRoZSBpbmZvcm1hdGlvbiENCj4gDQo+IFdoYXQgaGFw cGVucyBpZiB5b3Uga2VlcCB0aGUgdGhhdCAiaWYgKCFqYmFzZSkiIGJsb2NrIiwgYnV0IHNldCB0 aGUNCj4gdmFsdWUgb2YgdGhlIFNSQ1VfTUFYX05PREVMQVlfUEhBU0UgbWFjcm8gdmVyeSBsYXJn ZSwgc2F5IDEwMDAwMDA/DQoNCkZyb20gdGhlIHNldHVwIEkgaGF2ZSwgdGhpcyBpcyBhbG1vc3Qg c2ltaWxhciB0byB0aGF0IG9mIHRoZSBwcmV2aW91cyBsb2dpYyh3aXRob3V0DQp0aGUgImlmKCFq YmFzZSkiKS4gSW4gYm90aCBjYXNlcywgSSB0aGluayB3ZSBhcmUgbm90IGNsb3NlIHRvIDUuMTgs IGJ1dCBkZWZpbml0ZWx5IG11Y2gNCmJldHRlciBjb21wYXJlZCB0byA1LjE5LXJjMS4NCg0KVGhl IG51bWJlcnMgZnJvbSBteSB0ZXN0IHNldHVwKENPTkZJR19IWl8yNTAsIENPTkZJR19QUkVFTVBU SU9OPXkpLA0KDQogICAgICAgICAgICAgICAgICAgICAgIEd1ZXN0IGJvb3QgdGltZSh1c2luZyAn dGltZScpOg0KDQo1LjE4LXJjNCBiYXNlZCAgICAgICAgICAgICAgIH44c2VjDQoNCjUuMTktcmMx ICAgICAgICAgICAgICAgICAgICAgfjJtNDNzZWMNCg0KNS4xOS1yYzErZml4MSAgICAgICAgICAg ICAgICAgfjE5c2VjDQoNCjUuMTktcmMxLWZpeDIgICAgICAgICAgICAgICAgIH4xOXNlYw0KDQpJ IHdpbGwgd2FpdCBmb3IgWmhhbmdmZWkgdG8gY29uZmlybSB0aGlzIG9uIGhpcyBzZXR1cCwgZXNw ZWNpYWxseSB0aGUgZGlmZmVyZW5jZQ0KY29tcGFyZWQgdG8gNS4xOC4NCg0KVGhhbmtzLA0KU2hh bWVlcg0KIA0KPiBUaGlzIHdvdWxkIGJlIHRvbyBsYXJnZSBmb3IgS0xQLCBidXQgbXkgaG9wZSBp cyB0aGF0IHRoZXJlIGlzIGEgdmFsdWUNCj4gb2YgU1JDVV9NQVhfTk9ERUxBWV9QSEFTRSB0aGF0 IHdvcmtzIGZvciBldmVyeW9uZS4gIEJ1dCBmaXJzdCwgZG9lcw0KPiB0aGlzIGhlbHAgYXQgYWxs PyAgOy0pDQo+IA0KPiA+ID4gPiA+IEFuZCB3aGVuIEkgcnVuIDEwLDAwMCBjb25zZWN1dGl2ZSBz eW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKCkgY2FsbHMsDQo+IHRoZQ0KPiA+ID4gPiA+IGFib3Zl IGNoYW5nZSByZWR1Y2VzIHRoZSBvdmVyaGVhZCBieSBtb3JlIHRoYW4gYW4gb3JkZXIgb2YNCj4g bWFnbml0dWRlLg0KPiA+ID4gPiA+IEV4Y2VwdCB0aGF0IHRoZSBvdmVyaGVhZCBvZiB0aGUgc2Vy aWVzIGlzIGZhciBsZXNzIHRoYW4gb25lIHNlY29uZCwNCj4gPiA+ID4gPiBub3QgdGhlIHNldmVy YWwgbWludXRlcyB0aGF0IHlvdSBhcmUgc2VlaW5nLiAgU28gdGhlIHBlci1jYWxsDQo+IG92ZXJo ZWFkDQo+ID4gPiA+ID4gZGVjcmVhc2VzIGZyb20gYWJvdXQgMTcgbWljcm9zZWNvbmRzIHRvIGEg Yml0IG1vcmUgdGhhbiBvbmUNCj4gbWljcm9zZWNvbmQuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJ IGNvdWxkIGltYWdpbmUgYW4gZXh0cmEgb3JkZXIgb2YgbWFnbml0dWRlIGlmIHlvdSBhcmUgcnVu bmluZw0KPiBIWj0xMDANCj4gPiA+ID4gPiBpbnN0ZWFkIG9mIHRoZSBIWj0xMDAwIHRoYXQgSSBh bSBydW5uaW5nLiAgQnV0IHRoYXQgb25seSBnZXRzIHVwIHRvIGENCj4gPiA+ID4gPiBmZXcgc2Vj b25kcy4NCj4gPiA+IE9uZSBwb3NzaWJsZSByZWFzb24gZm9yIHRoZSBkaWZmZXJlbmNlIHdvdWxk IGJlIGlmIHlvdXIgY29kZSBoYXMNCj4gPiA+IFNSQ1UgcmVhZGVycy4NCj4gPiA+DQo+ID4gPiBD b3VsZCB5b3UgcGxlYXNlIHRlbGwgbWUgdGhlIHZhbHVlIG9mIENPTkZJR19IWiBvbiB5b3VyIHN5 c3RlbT8NCj4gPiA+IEFsc28gdGhlIHZhbHVlIG9mIENPTkZJR19QUkVFTVBUSU9OPw0KPiA+IEkg YW0gdXNpbmcgYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZw0KPiA+IG1ha2UgZGVmY29uZmln DQo+ID4gQ09ORklHX1BSRUVNUFRJT049eQ0KPiA+IENPTkZJR19IWl8yNTA9eQ0KPiANCj4gVGhh bmsgeW91IGFnYWluIQ0KPiANCj4gQW5kIGlmIHRoZXJlIGlzIGEgZ29vZCB2YWx1ZSBvZiBTUkNV X01BWF9OT0RFTEFZX1BIQVNFLCBpdCBtaWdodA0KPiBkZXBlbmQNCj4gb24gSFouICBBbmQgd2hv IGtub3dzIHdoYXQgYWxsIGVsc2UuLi4NCj4gDQo+IAkJCQkJCQlUaGFueCwgUGF1bA0KPiANCj4g PiBUaGFua3MNCj4gPg0KPiA+ID4NCj4gPiA+ID4gPiA+IE9uZSBhZGRpdGlvbmFsIGRlYnVnIGlz IHRvIGFwcGx5IHRoZSBwYXRjaCBiZWxvdyBvbiB0b3Agb2YgdGhlIG9uZQ0KPiB5b3UNCj4gPiA+ ID4gYXBwbHkgdGhlIHBhdGNoIGJlbG93Pw0KPiA+ID4gPiA+ID4ganVzdCBub3cga2luZGx5IHRl c3RlZCwgdGhlbiB1c2Ugd2hhdGV2ZXIgZGVidWcgdGVjaG5pcXVlIHlvdSB3aXNoDQo+IHRvDQo+ ID4gPiA+ID4gPiB3b3JrIG91dCB3aGF0IGZyYWN0aW9uIG9mIHRoZSB0aW1lIGR1cmluZyB0aGF0 IGNyaXRpY2FsIGludGVydmFsIHRoYXQNCj4gPiA+ID4gPiA+IHNyY3VfZ2V0X2RlbGF5KCkgcmV0 dXJucyBub24temVyby4NCj4gPiA+ID4gU29ycnksIEkgYW0gY29uZnVzZWQsIG5vIHBhdGNoIHJp Z2h0Pw0KPiA+ID4gQXBvbG9naWVzLCBteSBvbWlzc2lvbi4NCj4gPiA+DQo+ID4gPiA+IEp1c3Qg bWVhc3VyZSBzcmN1X2dldF9kZWxheSByZXR1cm4gdG8gbm9uLXplcm8/DQo+ID4gPiBFeGFjdGx5 LCBwbGVhc2UhDQo+ID4gPg0KPiA+ID4gPiBCeSB0aGUgd2F5LCB0aGUgaXNzdWUgc2hvdWxkIGJl IG9ubHkgcmVsYXRlZCB3aXRoIHFlbXUgYXBjaS4gbm90IHJlbGF0ZWQNCj4gPiA+ID4gd2l0aCBy bXIgZmVhdHVyZQ0KPiA+ID4gPiBUZXN0IHdpdGg6IGh0dHBzOi8vZ2l0aHViLmNvbS9xZW11L3Fl bXUvdHJlZS9zdGFibGUtNi4xDQo+ID4gPiA+DQo+ID4gPiA+IExvb2tzIGl0IGNhdXNlZCBieSB0 b28gbWFueSBrdm1fcmVnaW9uX2FkZCAmIGt2bV9yZWdpb25fZGVsIGlmDQo+IGFjcGk9Zm9yY2Us DQo+ID4gPiA+IElmIG5vIGFjcGksIG5vIHByaW50IGt2bV9yZWdpb25fYWRkL2RlbCAoMTAwMCB0 aW1lcyBwcmludCBvbmNlKQ0KPiA+ID4gPg0KPiA+ID4gPiBJZiB3aXRoIGFjcGk9Zm9yY2UsDQo+ ID4gPiA+IER1cmluZyBxZW11IGJvb3QNCj4gPiA+ID4ga3ZtX3JlZ2lvbl9hZGQgcmVnaW9uX2Fk ZCA9IDEwMDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9kZWwgcmVnaW9uX2RlbCA9IDEwMDANCj4gPiA+ ID4ga3ZtX3JlZ2lvbl9hZGQgcmVnaW9uX2FkZCA9IDIwMDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9k ZWwgcmVnaW9uX2RlbCA9IDIwMDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9hZGQgcmVnaW9uX2FkZCA9 IDMwMDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9kZWwgcmVnaW9uX2RlbCA9IDMwMDANCj4gPiA+ID4g a3ZtX3JlZ2lvbl9hZGQgcmVnaW9uX2FkZCA9IDQwMDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9kZWwg cmVnaW9uX2RlbCA9IDQwMDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9hZGQgcmVnaW9uX2FkZCA9IDUw MDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9kZWwgcmVnaW9uX2RlbCA9IDUwMDANCj4gPiA+ID4ga3Zt X3JlZ2lvbl9hZGQgcmVnaW9uX2FkZCA9IDYwMDANCj4gPiA+ID4ga3ZtX3JlZ2lvbl9kZWwgcmVn aW9uX2RlbCA9IDYwMDANCj4gPiA+ID4NCj4gPiA+ID4ga3ZtX3JlZ2lvbl9hZGQva3ZtX3JlZ2lv bl9kZWwgLT4NCj4gPiA+ID4ga3ZtX3NldF9waHlzX21lbS0+DQo+ID4gPiA+IGt2bV9zZXRfdXNl cl9tZW1vcnlfcmVnaW9uLT4NCj4gPiA+ID4ga3ZtX3ZtX2lvY3RsKHMsIEtWTV9TRVRfVVNFUl9N RU1PUllfUkVHSU9OLCAmbWVtKQ0KPiA+ID4gPg0KPiA+ID4gPiBbwqAgMzYxLjA5NDQ5M13CoCBf X3N5bmNocm9uaXplX3NyY3UgbG9vcD05MDAwDQo+ID4gPiA+IFvCoCAzNjEuMDk0NTAxXSBDYWxs IHRyYWNlOg0KPiA+ID4gPiBbwqAgMzYxLjA5NDUwMl3CoCBkdW1wX2JhY2t0cmFjZSsweGU0LzB4 ZjANCj4gPiA+ID4gW8KgIDM2MS4wOTQ1MDVdwqAgc2hvd19zdGFjaysweDIwLzB4NzANCj4gPiA+ ID4gW8KgIDM2MS4wOTQ1MDddwqAgZHVtcF9zdGFja19sdmwrMHg4Yy8weGI4DQo+ID4gPiA+IFvC oCAzNjEuMDk0NTA5XcKgIGR1bXBfc3RhY2srMHgxOC8weDM0DQo+ID4gPiA+IFvCoCAzNjEuMDk0 NTExXcKgIF9fc3luY2hyb25pemVfc3JjdSsweDEyMC8weDEyOA0KPiA+ID4gPiBbwqAgMzYxLjA5 NDUxNF3CoCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCsweDJjLzB4NDANCj4gPiA+ID4gW8Kg IDM2MS4wOTQ1MTVdwqAga3ZtX3N3YXBfYWN0aXZlX21lbXNsb3RzKzB4MTMwLzB4MTk4DQo+ID4g PiA+IFvCoCAzNjEuMDk0NTE5XcKgIGt2bV9hY3RpdmF0ZV9tZW1zbG90KzB4NDAvMHg2OA0KPiA+ ID4gPiBbwqAgMzYxLjA5NDUyMF3CoCBrdm1fc2V0X21lbXNsb3QrMHgyZjgvMHgzYjANCj4gPiA+ ID4gW8KgIDM2MS4wOTQ1MjNdwqAgX19rdm1fc2V0X21lbW9yeV9yZWdpb24rMHgyZTQvMHg0MzgN Cj4gPiA+ID4gW8KgIDM2MS4wOTQ1MjRdwqAga3ZtX3NldF9tZW1vcnlfcmVnaW9uKzB4NzgvMHhi OA0KPiA+ID4gPiBbwqAgMzYxLjA5NDUyNl3CoCBrdm1fdm1faW9jdGwrMHg1YTAvMHgxM2UwDQo+ ID4gPiA+IFvCoCAzNjEuMDk0NTI4XcKgIF9fYXJtNjRfc3lzX2lvY3RsKzB4YjAvMHhmOA0KPiA+ ID4gPiBbwqAgMzYxLjA5NDUzMF3CoCBpbnZva2Vfc3lzY2FsbCsweDRjLzB4MTEwDQo+ID4gPiA+ IFvCoCAzNjEuMDk0NTMzXcKgIGVsMF9zdmNfY29tbW9uLmNvbnN0cHJvcC4wKzB4NjgvMHgxMjgN Cj4gPiA+ID4gW8KgIDM2MS4wOTQ1MzZdwqAgZG9fZWwwX3N2YysweDM0LzB4YzANCj4gPiA+ID4g W8KgIDM2MS4wOTQ1MzhdwqAgZWwwX3N2YysweDMwLzB4OTgNCj4gPiA+ID4gW8KgIDM2MS4wOTQ1 NDFdwqAgZWwwdF82NF9zeW5jX2hhbmRsZXIrMHhiOC8weGMwDQo+ID4gPiA+IFvCoCAzNjEuMDk0 NTQ0XcKgIGVsMHRfNjRfc3luYysweDE4Yy8weDE5MA0KPiA+ID4gPiBbwqAgMzYzLjk0MjgxN13C oCBrdm1fc2V0X21lbW9yeV9yZWdpb24gbG9vcD02MDAwDQo+ID4gPiBHb29kIHRvIGtub3csIHRo YW5rIHlvdSENCj4gPiA+DQo+ID4gPiAJCQkJCQkJVGhhbngsIFBhdWwNCj4gPg0K