From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Raj, Ashok" Subject: Re: [PATCH v6 11/12] x86/microcode: Synchronize late microcode loading Date: Tue, 12 Mar 2019 17:07:51 -0700 Message-ID: <20190313000751.GF11608@araj-mobl1.jf.intel.com> References: <1552291056-20286-1-git-send-email-chao.gao@intel.com> <1552291056-20286-12-git-send-email-chao.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h3rR5-0005it-Dd for xen-devel@lists.xenproject.org; Wed, 13 Mar 2019 00:07:55 +0000 Content-Disposition: inline In-Reply-To: <1552291056-20286-12-git-send-email-chao.gao@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Chao Gao Cc: Sergey Dyasli , Kevin Tian , Wei Liu , Jun Nakajima , Andrew Cooper , Jan Beulich , Ashok Raj , xen-devel@lists.xenproject.org, Thomas Gleixner , Borislav Petkov , Roger Pau =?iso-8859-1?Q?Monn=E9?= List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBNYXIgMTEsIDIwMTkgYXQgMDM6NTc6MzVQTSArMDgwMCwgQ2hhbyBHYW8gd3JvdGU6 Cj4gVGhpcyBwYXRjaCBwb3J0cyBtaWNyb2NvZGUgaW1wcm92ZW1lbnQgcGF0Y2hlcyBmcm9tIGxp bnV4IGtlcm5lbC4KPiAKPiBCZWZvcmUgeW91IHJlYWQgYW55IGZ1cnRoZXI6IHRoZSBlYXJseSBs b2FkaW5nIG1ldGhvZCBpcyBzdGlsbCB0aGUKPiBwcmVmZXJyZWQgb25lIGFuZCB5b3Ugc2hvdWxk IGFsd2F5cyBkbyB0aGF0LiBUaGUgZm9sbG93aW5nIHBhdGNoIGlzCj4gaW1wcm92aW5nIHRoZSBs YXRlIGxvYWRpbmcgbWVjaGFuaXNtIGZvciBsb25nIHJ1bm5pbmcgam9icyBhbmQgY2xvdWQgdXNl Cj4gY2FzZXMuCj4gCj4gR2F0aGVyIGFsbCBjb3JlcyBhbmQgc2VyaWFsaXplIHRoZSBtaWNyb2Nv ZGUgdXBkYXRlIG9uIHRoZW0gYnkgZG9pbmcgaXQKPiBvbmUtYnktb25lIHRvIG1ha2UgdGhlIGxh dGUgdXBkYXRlIHByb2Nlc3MgYXMgcmVsaWFibGUgYXMgcG9zc2libGUgYW5kCj4gYXZvaWQgcG90 ZW50aWFsIGlzc3VlcyBjYXVzZWQgYnkgdGhlIG1pY3JvY29kZSB1cGRhdGUuCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KPiBUZXN0ZWQtYnk6IENoYW8g R2FvIDxjaGFvLmdhb0BpbnRlbC5jb20+Cj4gW2xpbnV4IGNvbW1pdDogYTUzMjFhZWM2NDEyYjIw YjVhZDE1ZGIyZDZiOTE2YzA1MzQ5ZGJmZl0KPiBbbGludXggY29tbWl0OiBiYjhjMTNkNjFhNjI5 Mjc2YTE2MmMxZDJiMWEyMGE4MTVjYmNmYmI3XQo+IENjOiBLZXZpbiBUaWFuIDxrZXZpbi50aWFu QGludGVsLmNvbT4KPiBDYzogSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPgo+ IENjOiBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Cj4gQ2M6IEJvcmlzbGF2IFBldGtv diA8YnBAc3VzZS5kZT4KPiBDYzogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+ Cj4gQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Cj4gQ2M6IEph biBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KPiAtLS0KPiBDaGFuZ2VzIGluIHY2Ogo+ICAt IFVzZSBvbmUgdGltZW91dCBwZXJpb2QgZm9yIHJlbmRlenZvdXMgc3RhZ2UgYW5kIGFub3RoZXIg Zm9yIHVwZGF0ZSBzdGFnZS4KPiAgLSBzY2FsZSB0aW1lIHRvIHdhaXQgYnkgdGhlIG51bWJlciBv ZiByZW1haW5pbmcgY3B1cyB0byByZXNwb25kLgo+ICAgIEl0IGhlbHBzIHRvIGZpbmQgc29tZXRo aW5nIHdyb25nIGVhcmxpZXIgYW5kIHRodXMgd2UgY2FuIHJlYm9vdCB0aGUKPiAgICBzeXN0ZW0g ZWFybGllci4KPiAtLS0KPiAgeGVuL2FyY2gveDg2L21pY3JvY29kZS5jIHwgMTQ5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4gIDEgZmlsZSBjaGFuZ2Vk LCAxMzYgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9taWNyb2NvZGUuYyBiL3hlbi9hcmNoL3g4Ni9taWNyb2NvZGUuYwo+IGluZGV4 IGM1MTA4MDguLjk2YmNlZjYgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L21pY3JvY29kZS5j Cj4gKysrIGIveGVuL2FyY2gveDg2L21pY3JvY29kZS5jCj4gQEAgLTIyLDYgKzIyLDcgQEAKPiAg ICovCj4gIAo+ICAjaW5jbHVkZSA8eGVuL2NwdS5oPgo+ICsjaW5jbHVkZSA8eGVuL2NwdW1hc2su aD4KPiAgI2luY2x1ZGUgPHhlbi9saWIuaD4KPiAgI2luY2x1ZGUgPHhlbi9rZXJuZWwuaD4KPiAg I2luY2x1ZGUgPHhlbi9pbml0Lmg+Cj4gQEAgLTMwLDE1ICszMSwzNCBAQAo+ICAjaW5jbHVkZSA8 eGVuL3NtcC5oPgo+ICAjaW5jbHVkZSA8eGVuL3NvZnRpcnEuaD4KPiAgI2luY2x1ZGUgPHhlbi9z cGlubG9jay5oPgo+ICsjaW5jbHVkZSA8eGVuL3N0b3BfbWFjaGluZS5oPgo+ICAjaW5jbHVkZSA8 eGVuL3Rhc2tsZXQuaD4KPiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPiAgI2luY2x1 ZGUgPHhlbi9lYXJseWNwaW8uaD4KPiArI2luY2x1ZGUgPHhlbi93YXRjaGRvZy5oPgo+ICAKPiAr I2luY2x1ZGUgPGFzbS9kZWxheS5oPgo+ICAjaW5jbHVkZSA8YXNtL21zci5oPgo+ICAjaW5jbHVk ZSA8YXNtL3Byb2Nlc3Nvci5oPgo+ICAjaW5jbHVkZSA8YXNtL3NldHVwLmg+Cj4gICNpbmNsdWRl IDxhc20vbWljcm9jb2RlLmg+Cj4gIAo+ICsvKgo+ICsgKiBCZWZvcmUgcGVyZm9ybWluZyBhIGxh dGUgbWljcm9jb2RlIHVwZGF0ZSBvbiBhbnkgdGhyZWFkLCB3ZQo+ICsgKiByZW5kZXp2b3VzIGFs bCBjcHVzIGluIHN0b3BfbWFjaGluZSBjb250ZXh0LiBUaGUgdGltZW91dCBmb3IKPiArICogd2Fp dGluZyBmb3IgY3B1IHJlbmRlenZvdXMgaXMgMzBtcy4gSXQgaXMgdGhlIHRpbWVvdXQgdXNlZCBi eQo+ICsgKiBsaXZlIHBhdGNoaW5nCj4gKyAqLwo+ICsjZGVmaW5lIE1JQ1JPQ09ERV9DQUxMSU5f VElNRU9VVF9VUyAzMDAwMAo+ICsKPiArLyoKPiArICogVGltZW91dCBmb3IgZWFjaCB0aHJlYWQg dG8gY29tcGxldGUgdXBkYXRlIGlzIHNldCB0byAxcy4gSXQgaXMgYQo+ICsgKiBjb25zZXJ2YXRp dmUgY2hvaWNlIGNvbnNpZGVyaW5nIGFsbCBwb3NzaWJsZSBpbnRlcmZlcmVuY2UgKGZvcgo+ICsg KiBpbnN0YW5jZSwgc29tZXRpbWVzIHdiaW52ZCB0YWtlcyByZWxhdGl2ZSBsb25nIHRpbWUpLiBB bmQgYSBwZXJmZWN0Cj4gKyAqIHRpbWVvdXQgZG9lc24ndCBoZWxwIGEgbG90IGV4Y2VwdCBhbiBl YXJseSBzaHV0ZG93bi4KPiArICovCj4gKyNkZWZpbmUgTUlDUk9DT0RFX1VQREFURV9USU1FT1VU X1VTIDEwMDAwMDAKPiArCj4gIHN0YXRpYyBtb2R1bGVfdCBfX2luaXRkYXRhIHVjb2RlX21vZDsK PiAgc3RhdGljIHNpZ25lZCBpbnQgX19pbml0ZGF0YSB1Y29kZV9tb2RfaWR4Owo+ICBzdGF0aWMg Ym9vbF90IF9faW5pdGRhdGEgdWNvZGVfbW9kX2ZvcmNlZDsKPiBAQCAtMTg5LDYgKzIwOSwxMiBA QCBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1pY3JvY29kZV9tdXRleCk7Cj4gIERFRklORV9QRVJf Q1BVKHN0cnVjdCBjcHVfc2lnbmF0dXJlLCBjcHVfc2lnKTsKPiAgCj4gIC8qCj4gKyAqIENvdW50 IHRoZSBDUFVzIHRoYXQgaGF2ZSBlbnRlcmVkIGFuZCBleGl0ZWQgdGhlIHJlbmRlenZvdXMKPiAr ICogZHVyaW5nIGxhdGUgbWljcm9jb2RlIHVwZGF0ZS4KPiArICovCj4gK3N0YXRpYyBhdG9taWNf dCBjcHVfaW4sIGNwdV9vdXQ7Cj4gKwo+ICsvKgo+ICAgKiBTYXZlIGFuIHVjb2RlIHBhdGNoIHRv IHRoZSBnbG9iYWwgY2FjaGUgbGlzdC4KPiAgICoKPiAgICogUmV0dXJuIHRydWUgaWYgYSBwYXRj aCBpcyBhZGRlZCB0byB0aGUgZ2xvYmFsIGNhY2hlIG9yIGl0IHJlcGxhY2VzCj4gQEAgLTI4NCwy NSArMzEwLDg2IEBAIHN0YXRpYyBpbnQgbWljcm9jb2RlX3VwZGF0ZV9jcHUodm9pZCkKPiAgICAg IHJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBsb25nIGRvX21pY3JvY29kZV91cGRhdGUo dm9pZCAqdW51c2VkKQo+ICsvKiBXYWl0IGZvciBDUFVzIHRvIHJlbmRlenZvdXMgd2l0aCBhIHRp bWVvdXQgKHVzKSAqLwo+ICtzdGF0aWMgaW50IHdhaXRfZm9yX2NwdXMoYXRvbWljX3QgKmNudCwg dW5zaWduZWQgaW50IGV4cGVjdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCB0aW1lb3V0KQo+ICB7Cj4gLSAgICBpbnQgZXJyb3IsIGNwdTsKPiArICAgIHdoaWxlICgg YXRvbWljX3JlYWQoY250KSA8IGV4cGVjdCApCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCB0aW1l b3V0IDw9IDAgKQoKdGltZW91dCBpcyB1bnNpZ25lZCBpbnQuLiBpdCB3aWxsIG5ldmVyIGJlIDwg MC4uIGZsaXAgaXQgdG8gcmVhZCBiZXR0ZXIgbWF5YmU/Cgo+ICsgICAgICAgIHsKPiArICAgICAg ICAgICAgcHJpbnRrKCJDUFUlZDogVGltZW91dCB3aGVuIHdhaXRpbmcgZm9yIENQVXMgY2FsbGlu ZyBpblxuIiwKPiArICAgICAgICAgICAgICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Cj4gKyAg ICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHVkZWxheSgx KTsKPiArICAgICAgICB0aW1lb3V0LS07Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4g K30KPiAgCj4gLSAgICBlcnJvciA9IG1pY3JvY29kZV91cGRhdGVfY3B1KCk7Cj4gLSAgICBpZiAo IGVycm9yICkKPiAtICAgICAgICByZXR1cm4gZXJyb3I7Cj4gK3N0YXRpYyBpbnQgZG9fbWljcm9j b2RlX3VwZGF0ZSh2b2lkICp1bnVzZWQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBjcHUgPSBz bXBfcHJvY2Vzc29yX2lkKCk7Cj4gKyAgICB1bnNpZ25lZCBpbnQgY3B1X25yID0gbnVtX29ubGlu ZV9jcHVzKCk7Cj4gKyAgICB1bnNpZ25lZCBpbnQgZmluaXNoZWQ7Cj4gKyAgICBpbnQgcmV0Owo+ ICsgICAgc3RhdGljIGJvb2wgZXJyb3I7Cj4gIAo+IC0gICAgY3B1ID0gY3B1bWFza19uZXh0KHNt cF9wcm9jZXNzb3JfaWQoKSwgJmNwdV9vbmxpbmVfbWFwKTsKPiAtICAgIGlmICggY3B1IDwgbnJf Y3B1X2lkcyApCj4gLSAgICAgICAgcmV0dXJuIGNvbnRpbnVlX2h5cGVyY2FsbF9vbl9jcHUoY3B1 LCBkb19taWNyb2NvZGVfdXBkYXRlLCBOVUxMKTsKPiAgCj4gLSAgICByZXR1cm4gZXJyb3I7Cj4g KyAgICBhdG9taWNfaW5jKCZjcHVfaW4pOwo+ICsgICAgcmV0ID0gd2FpdF9mb3JfY3B1cygmY3B1 X2luLCBjcHVfbnIsIE1JQ1JPQ09ERV9DQUxMSU5fVElNRU9VVF9VUyk7Cj4gKyAgICBpZiAoIHJl dCApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAvKgo+ICsgICAgICogSW5pdGlh dGUgYW4gdXBkYXRlIG9uIGFsbCBwcm9jZXNzb3JzIHdoaWNoIGRvbid0IGhhdmUgYW4gb25saW5l IHNpYmxpbmcKPiArICAgICAqIHRocmVhZCB3aXRoIGEgbG93ZXIgdGhyZWFkIGlkLiBPdGhlciBz aWJsaW5nIHRocmVhZHMganVzdCBhd2FpdCB0aGUKPiArICAgICAqIGNvbXBsZXRpb24gb2YgbWlj cm9jb2RlIHVwZGF0ZS4KPiArICAgICAqLwoKVGhlIGFib3ZlIGNvbW1lbnQgaXNuJ3QgY2xlYXIu IExvb2tzIGxpa2UgeW91IGFyZSBkb2luZyB0aGUgdXBkYXRlIGp1c3QKdG8gdGhlIGZpcnN0IGNw dSBpbiB0aGUgc2libGluZyBtYXA/IAoKPiArICAgIGlmICggY3B1ID09IGNwdW1hc2tfZmlyc3Qo cGVyX2NwdShjcHVfc2libGluZ19tYXNrLCBjcHUpKSApCj4gKyAgICAgICAgcmV0ID0gbWljcm9j b2RlX3VwZGF0ZV9jcHUoKTsKCkRvZXMgcmV0IGhhdmUgYW55IHVzZWZ1bCB0aGluZ3Mgb24gaWYg dGhlIHVwZGF0ZSBmYWlsZWQ/IERvZXNuJ3Qgc2VlbSAKdG8gYmUgdXNlZCBiZWZvcmUgeW91IG92 ZXJ3cml0ZSBsYXRlciBpbiBjb2xsZWN0X2NwdV9pbmZvKCk/CgoKPiArICAgIC8qCj4gKyAgICAg KiBJbmNyZWFzZSB0aGUgd2FpdCB0aW1lb3V0IHRvIGEgc2FmZSB2YWx1ZSBoZXJlIHNpbmNlIHdl J3JlIHNlcmlhbGl6aW5nCj4gKyAgICAgKiB0aGUgbWljcm9jb2RlIHVwZGF0ZSBhbmQgdGhhdCBj b3VsZCB0YWtlIGEgd2hpbGUgb24gYSBsYXJnZSBudW1iZXIgb2YKPiArICAgICAqIENQVXMuIEFu ZCB0aGF0IGlzIGZpbmUgYXMgdGhlICphY3R1YWwqIHRpbWVvdXQgd2lsbCBiZSBkZXRlcm1pbmVk IGJ5Cj4gKyAgICAgKiB0aGUgbGFzdCBDUFUgZmluaXNoZWQgdXBkYXRpbmcgYW5kIHRodXMgY3V0 IHNob3J0Cj4gKyAgICAgKi8KPiArICAgIGF0b21pY19pbmMoJmNwdV9vdXQpOwo+ICsgICAgZmlu aXNoZWQgPSBhdG9taWNfcmVhZCgmY3B1X291dCk7Cj4gKyAgICB3aGlsZSAoICFlcnJvciAmJiBm aW5pc2hlZCAhPSBjcHVfbnIgKQoKTWF5YmUgaSdtIHJlYWRpbmcgdGhpcyB3cm9uZy4uIGlzICJl cnJvciIgdXNlZCB1bmluaXRpYWxpemVkPwoKPiArICAgIHsKPiArICAgICAgICAvKgo+ICsgICAg ICAgICAqIER1cmluZyBlYWNoIHRpbWVvdXQgaW50ZXJ2YWwsIGF0IGxlYXN0IGEgQ1BVIGlzIGV4 cGVjdGVkIHRvCj4gKyAgICAgICAgICogZmluaXNoIGl0cyB1cGRhdGUuIE90aGVyd2lzZSwgc29t ZXRoaW5nIGdvZXMgd3JvbmcuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCB3YWl0X2Zv cl9jcHVzKCZjcHVfb3V0LCBmaW5pc2hlZCArIDEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1JQ1JPQ09ERV9VUERBVEVfVElNRU9VVF9VUykgJiYgIWVycm9yICkKPiArICAgICAgICB7 Cj4gKyAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKPiArICAgICAgICAgICAgcGFuaWMoIlRpbWVv dXQgd2hlbiBmaW5pc2hpbmcgdXBkYXRpbmcgbWljcm9jb2RlIChmaW5pc2hlZCAlZC8lZCkiLAo+ ICsgICAgICAgICAgICAgICAgICBmaW5pc2hlZCwgY3B1X25yKTsKPiArICAgICAgICB9Cj4gKwo+ ICsgICAgICAgIGZpbmlzaGVkID0gYXRvbWljX3JlYWQoJmNwdV9vdXQpOwo+ICsgICAgfQo+ICsK PiArICAgIC8qCj4gKyAgICAgKiBSZWZyZXNoIENQVSBzaWduYXR1cmUgKHJldmlzaW9uKSBvbiB0 aHJlYWRzIHdoaWNoIGRpZG4ndCBjYWxsCj4gKyAgICAgKiBhcHBseV9taWNyb2NvZGUoKS4KPiAr ICAgICAqLwo+ICsgICAgaWYgKCBjcHUgIT0gY3B1bWFza19maXJzdChwZXJfY3B1KGNwdV9zaWJs aW5nX21hc2ssIGNwdSkpICkKPiArICAgICAgICByZXQgPSBtaWNyb2NvZGVfb3BzLT5jb2xsZWN0 X2NwdV9pbmZvKCZ0aGlzX2NwdShjcHVfc2lnKSk7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiAg fQo+ICAKPiAgaW50IG1pY3JvY29kZV91cGRhdGUoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShjb25z dF92b2lkKSBidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQo+ICB7Cj4gICAgICBpbnQgcmV0Owo+ICAg ICAgdm9pZCAqYnVmZmVyOwo+ICsgICAgdW5zaWduZWQgaW50IGNwdSwgbnJfY29yZXM7Cj4gIAo+ ICAgICAgaWYgKCBsZW4gIT0gKHVpbnQzMl90KWxlbiApCj4gICAgICAgICAgcmV0dXJuIC1FMkJJ RzsKPiBAQCAtMzIzLDExICs0MTAsMTggQEAgaW50IG1pY3JvY29kZV91cGRhdGUoWEVOX0dVRVNU X0hBTkRMRV9QQVJBTShjb25zdF92b2lkKSBidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQo+ICAgICAg ICAgIGdvdG8gZnJlZTsKPiAgICAgIH0KPiAgCj4gKyAgICAvKiBjcHVfb25saW5lX21hcCBtdXN0 IG5vdCBjaGFuZ2UgZHVyaW5nIHVwZGF0ZSAqLwo+ICsgICAgaWYgKCAhZ2V0X2NwdV9tYXBzKCkg KQo+ICsgICAgewo+ICsgICAgICAgIHJldCA9IC1FQlVTWTsKPiArICAgICAgICBnb3RvIGZyZWU7 Cj4gKyAgICB9Cj4gKwo+ICAgICAgaWYgKCBtaWNyb2NvZGVfb3BzLT5zdGFydF91cGRhdGUgKQo+ ICAgICAgewo+ICAgICAgICAgIHJldCA9IG1pY3JvY29kZV9vcHMtPnN0YXJ0X3VwZGF0ZSgpOwo+ ICAgICAgICAgIGlmICggcmV0ICE9IDAgKQo+IC0gICAgICAgICAgICBnb3RvIGZyZWU7Cj4gKyAg ICAgICAgICAgIGdvdG8gcHV0Owo+ICAgICAgfQo+ICAKPiAgICAgIHJldCA9IG1pY3JvY29kZV9w YXJzZV9ibG9iKGJ1ZmZlciwgbGVuKTsKPiBAQCAtMzM1LDEyICs0MjksNDEgQEAgaW50IG1pY3Jv Y29kZV91cGRhdGUoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShjb25zdF92b2lkKSBidWYsIHVuc2ln bmVkIGxvbmcgbGVuKQo+ICAgICAgewo+ICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJObyB2 YWxpZCBvciBuZXdlciB1Y29kZSBmb3VuZC4gVXBkYXRlIGFib3J0IVxuIik7Cj4gICAgICAgICAg cmV0ID0gLUVJTlZBTDsKPiAtICAgICAgICBnb3RvIGZyZWU7Cj4gKyAgICAgICAgZ290byBwdXQ7 Cj4gICAgICB9Cj4gIAo+IC0gICAgcmV0dXJuIGNvbnRpbnVlX2h5cGVyY2FsbF9vbl9jcHUoY3B1 bWFza19maXJzdCgmY3B1X29ubGluZV9tYXApLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG9fbWljcm9jb2RlX3VwZGF0ZSwgTlVMTCk7Cj4gKyAgICBhdG9taWNfc2V0 KCZjcHVfaW4sIDApOwo+ICsgICAgYXRvbWljX3NldCgmY3B1X291dCwgMCk7Cj4gKwo+ICsgICAg LyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVSBjb3JlICovCj4gKyAgICBucl9j b3JlcyA9IDA7Cj4gKyAgICBmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKPiArICAgICAgICBpZiAo IGNwdSA9PSBjcHVtYXNrX2ZpcnN0KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFzaywgY3B1KSkgKQo+ ICsgICAgICAgICAgICBucl9jb3JlcysrOwo+ICsKPiArICAgIHByaW50ayhYRU5MT0dfSU5GTyAi JWQgY29yZXMgYXJlIHRvIHVwZGF0ZSB0aGVpciBtaWNyb2NvZGVcbiIsIG5yX2NvcmVzKTsKPiAr Cj4gKyAgICAvKgo+ICsgICAgICogV2UgaW50ZW5kIHRvIGRpc2FibGUgaW50ZXJydXB0IGZvciBs b25nIHRpbWUsIHdoaWNoIG1heSBsZWFkIHRvCj4gKyAgICAgKiB3YXRjaGRvZyB0aW1lb3V0Lgo+ ICsgICAgICovCj4gKyAgICB3YXRjaGRvZ19kaXNhYmxlKCk7Cj4gKyAgICAvKgo+ICsgICAgICog TGF0ZSBsb2FkaW5nIGRhbmNlLiBXaHkgdGhlIGhlYXZ5LWhhbmRlZCBzdG9wX21hY2hpbmUgZWZm b3J0Pwo+ICsgICAgICoKPiArICAgICAqIC0gSFQgc2libGluZ3MgbXVzdCBiZSBpZGxlIGFuZCBu b3QgZXhlY3V0ZSBvdGhlciBjb2RlIHdoaWxlIHRoZSBvdGhlcgo+ICsgICAgICogICBzaWJsaW5n IGlzIGxvYWRpbmcgbWljcm9jb2RlIGluIG9yZGVyIHRvIGF2b2lkIGFueSBuZWdhdGl2ZQo+ICsg ICAgICogICBpbnRlcmFjdGlvbnMgY2F1c2UgYnkgdGhlIGxvYWRpbmcuCj4gKyAgICAgKgo+ICsg ICAgICogLSBJbiBhZGRpdGlvbiwgbWljcm9jb2RlIHVwZGF0ZSBvbiB0aGUgY29yZXMgbXVzdCBi ZSBzZXJpYWxpemVkIHVudGlsCj4gKyAgICAgKiAgIHRoaXMgcmVxdWlyZW1lbnQgY2FuIGJlIHJl bGF4ZWQgaW4gdGhlIGZ1dHVyZS4gUmlnaHQgbm93LCB0aGlzIGlzCj4gKyAgICAgKiAgIGNvbnNl cnZhdGl2ZSBhbmQgZ29vZC4KPiArICAgICAqLwo+ICsgICAgcmV0ID0gc3RvcF9tYWNoaW5lX3J1 bihkb19taWNyb2NvZGVfdXBkYXRlLCBOVUxMLCBOUl9DUFVTKTsKPiArICAgIHdhdGNoZG9nX2Vu YWJsZSgpOwo+ICAKPiArIHB1dDoKPiArICAgIHB1dF9jcHVfbWFwcygpOwo+ICAgZnJlZToKPiAg ICAgIHhmcmVlKGJ1ZmZlcik7Cj4gICAgICByZXR1cm4gcmV0Owo+IC0tIAo+IDEuOC4zLjEKPiAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=