From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v4 11/34] xsplice: Design document Date: Wed, 23 Mar 2016 23:15:40 -0400 Message-ID: <20160324031539.GD13266@localhost.localdomain> References: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> <1458064616-23101-12-git-send-email-konrad.wilk@oracle.com> <56F289A002000078000DF9BD@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aivkc-0002wM-9X for xen-devel@lists.xenproject.org; Thu, 24 Mar 2016 03:15:58 +0000 Content-Disposition: inline In-Reply-To: <56F289A002000078000DF9BD@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: Keir Fraser , ross.lagerwall@citrix.com, andrew.cooper3@citrix.com, Ian Jackson , Tim Deegan , mpohlack@amazon.de, sasha.levin@oracle.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBNYXIgMjMsIDIwMTYgYXQgMDU6MTg6MzlBTSAtMDYwMCwgSmFuIEJldWxpY2ggd3Jv dGU6Cj4gPj4+IE9uIDE1LjAzLjE2IGF0IDE4OjU2LCA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4g d3JvdGU6Cj4gPiArIyMjIFhFTl9TWVNDVExfWFNQTElDRV9MSVNUICgyKQo+ID4gKwo+ID4gK1Jl dHJpZXZlIGFuIGFycmF5IG9mIGFiYnJldmlhdGVkIHN0YXR1cyBhbmQgbmFtZXMgb2YgcGF5bG9h ZHMgdGhhdCBhcmUgCj4gPiBsb2FkZWQgaW4gdGhlCj4gPiAraHlwZXJ2aXNvci4KPiA+ICsKPiA+ ICtUaGUgY2FsbGVyIHByb3ZpZGVzOgo+ID4gKwo+ID4gKyAqIGB2ZXJzaW9uYC4gSW5pdGlhbGx5 IChvbiBmaXJzdCBoeXBlcmNhbGwpICpNVVNUKiBiZSB6ZXJvLgo+ID4gKyAqIGBpZHhgIGluZGV4 IGl0ZXJhdG9yLiBPbiBmaXJzdCBjYWxsICpNVVNUKiBiZSB6ZXJvLCBzdWJzZXF1ZW50IGNhbGxz IHZhcmllcy4KPiA+ICsgKiBgbnJgIHRoZSBtYXggbnVtYmVyIG9mIGVudHJpZXMgdG8gcG9wdWxh dGUuCj4gPiArICogYHBhZGAgLSAqTVVTVCogYmUgemVyby4KPiA+ICsgKiBgc3RhdHVzYCB2aXJ0 dWFsIGFkZHJlc3Mgb2Ygd2hlcmUgdG8gd3JpdGUgYHN0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNg Cj4gPiArICAgc3RydWN0dXJlcy4gQ2FsbGVyICpNVVNUKiBhbGxvY2F0ZSB1cCB0byBgbnJgIG9m IHRoZW0uCj4gPiArICogYG5hbWVgIC0gdmlydHVhbCBhZGRyZXNzIG9mIHdoZXJlIHRvIHdyaXRl IHRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgcGF5bG9hZC4KPiA+ICsgICBDYWxsZXIgKk1VU1QqIGFs bG9jYXRlIHVwIHRvIGBucmAgb2YgdGhlbS4gRWFjaCAqTVVTVCogYmUgb2YKPiA+ICsgICAqKlhF Tl9YU1BMSUNFX05BTUVfU0laRSoqIHNpemUuCj4gPiArICogYGxlbmAgLSB2aXJ0dWFsIGFkZHJl c3Mgb2Ygd2hlcmUgdG8gd3JpdGUgdGhlIGxlbmd0aCBvZiBlYWNoIHVuaXF1ZSBuYW1lCj4gPiAr ICAgb2YgdGhlIHBheWxvYWQuIENhbGxlciAqTVVTVCogYWxsb2NhdGUgdXAgdG8gYG5yYCBvZiB0 aGVtLiBFYWNoICpNVVNUKiBiZQo+ID4gKyAgIG9mIHNpemVvZih1aW50MzJfdCkgKDQgYnl0ZXMp Lgo+ID4gKwo+ID4gK0lmIHRoZSBoeXBlcmNhbGwgcmV0dXJucyBhbiBwb3NpdGl2ZSBudW1iZXIs IGl0IGlzIHRoZSBudW1iZXIgKHVwdG8gYG5yYAo+ID4gK3Byb3ZpZGVkIHRvIHRoZSBoeXBlcmNh bGwpIG9mIHRoZSBwYXlsb2FkcyByZXR1cm5lZCwgYWxvbmcgd2l0aCBgbnJgIHVwZGF0ZWQKPiA+ ICt3aXRoIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHBheWxvYWRzLCBgdmVyc2lvbmAgdXBkYXRl ZCAoaXQgbWF5IGJlIHRoZSBzYW1lCj4gPiArYWNyb3NzIGh5cGVyY2FsbHMgLSBpZiBpdCB2YXJp ZXMgdGhlIGRhdGEgaXMgc3RhbGUgYW5kIGZ1cnRoZXIgY2FsbHMgY291bGQKPiA+ICtmYWlsKS4g VGhlIGBzdGF0dXNgLCBgbmFtZWAsIGFuZCBgbGVuYCcgYXJlIHVwZGF0ZWQgYXQgdGhlaXIgZGVz aWduZWQgaW5kZXgKPiA+ICt2YWx1ZSAoYGlkeGApIHdpdGggdGhlIHJldHVybmVkIHZhbHVlIG9m IGRhdGEuCj4gPiArCj4gPiArSWYgdGhlIGh5cGVyY2FsbCByZXR1cm5zIC1YRU5fRTJCSUcgdGhl IGBucmAgaXMgdG9vIGJpZyBhbmQgc2hvdWxkIGJlCj4gPiArbG93ZXJlZC4KPiA+ICsKPiA+ICtJ ZiB0aGUgaHlwZXJjYWxsIHJldHVybnMgYW4gemVybyB2YWx1ZSB0aGVyZSBhcmUgbm8gbW9yZSBw YXlsb2Fkcy4KPiA+ICsKPiA+ICtOb3RlIHRoYXQgZHVlIHRvIHRoZSBhc3luY2hyb25vdXMgbmF0 dXJlIG9mIGh5cGVyY2FsbHMgdGhlIGNvbnRyb2wgZG9tYWluIG1pZ2h0Cj4gPiAraGF2ZSBhZGRl ZCBvciByZW1vdmVkIGEgbnVtYmVyIG9mIHBheWxvYWRzIG1ha2luZyB0aGlzIGluZm9ybWF0aW9u IHN0YWxlLiBJdCBpcwo+ID4gK3RoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdG9vbHN0YWNrIHRv IHVzZSB0aGUgYHZlcnNpb25gIGZpZWxkIHRvIGNoZWNrCj4gPiArYmV0d2VlbiBlYWNoIGludm9j YXRpb24uIGlmIHRoZSB2ZXJzaW9uIGRpZmZlcnMgaXQgc2hvdWxkIGRpc2NhcmQgdGhlIHN0YWxl Cj4gPiArZGF0YSBhbmQgc3RhcnQgZnJvbSBzY3JhdGNoLiBJdCBpcyBPSyBmb3IgdGhlIHRvb2xz dGFjayB0byB1c2UgdGhlIG5ldwo+ID4gK2B2ZXJzaW9uYCBmaWVsZC4KPiA+ICsKPiA+ICtUaGUg YHN0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNgIHN0cnVjdHVyZSBjb250YWlucyBhbiBzdGF0dXMg b2YgcGF5bG9hZCB3aGljaCBpbmNsdWRlczoKPiA+ICsKPiA+ICsgKiBgc3RhdHVzYCAtIGluZGlj YXRlcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHBheWxvYWQ6Cj4gPiArICAgKiAqWFNQTElD RV9TVEFUVVNfQ0hFQ0tFRCogICgxKSBsb2FkZWQgYW5kIHRoZSBFTEYgcGF5bG9hZCBzYWZldHkg Y2hlY2tzIHBhc3NlZC4KPiA+ICsgICAqICpYU1BMSUNFX1NUQVRVU19BUFBMSUVEKiAoMikgbG9h ZGVkLCBjaGVja2VkLCBhbmQgYXBwbGllZC4KPiA+ICsgICAqICBObyBvdGhlciB2YWx1ZSBpcyBw b3NzaWJsZS4KPiA+ICsgKiBgcmNgIC0gLVhFTl9FWFggdHlwZSBlcnJvcnMgZW5jb3VudGVyZWQg d2hpbGUgcGVyZm9ybWluZyB0aGUgbGFzdAo+ID4gKyAgIFhTUExJQ0VfQUNUSU9OXyogb3BlcmF0 aW9uLiBUaGUgbm9ybWFsIHZhbHVlcyBjYW4gYmUgemVybyBvciAtWEVOX0VBR0FJTiB3aGljaAo+ ID4gKyAgIHJlc3BlY3RpdmVseSBtZWFuOiBzdWNjZXNzIG9yIG9wZXJhdGlvbiBpbiBwcm9ncmVz cy4gT3RoZXIgdmFsdWVzCj4gPiArICAgaW1wbHkgYW4gZXJyb3Igb2NjdXJyZWQuIElmIHRoZXJl IGlzIGFuIGVycm9yIGluIGByY2AsIGBzdGF0dXNgIHdpbGwgKipOT1QqKgo+ID4gKyAgIGhhdmUg Y2hhbmdlZC4KPiA+ICsKPiA+ICtUaGUgc3RydWN0dXJlIGlzIGFzIGZvbGxvdzoKPiA+ICsKPiA+ ICs8cHJlPgo+ID4gK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2VfbGlzdCB7ICAKPiA+ICsgICAg dWludDMyX3QgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIElOL09VVDogSW5pdGlh bGx5ICpNVVNUKiBiZSB6ZXJvLiAgCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPbiBzdWJzZXF1ZW50IGNhbGxzIHJldXNlIHZhbHVlLiAgCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB2YXJpZXMg YmV0d2VlbiBjYWxscywgd2UgYXJlICAKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqIGdldHRpbmcgc3RhbGUgZGF0YS4gKi8gIAo+ID4gKyAgICB1aW50 MzJfdCBpZHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU4vT1VUOiBJbmRleCBpbnRv IGFycmF5LiAqLyAKPiA+ICsgICAgdWludDMyX3QgbnI7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIElOOiBIb3cgbWFueSBzdGF0dXMsIG5hbWVzLCBhbmQgbGVuICAKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBmaWxsIG91dC4g IAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VU OiBIb3cgbWFueSBwYXlsb2FkcyBsZWZ0LiAqLyAgCj4gCj4gSSB0aGluayB0aGVyZSdzIGFuIGFt YmlndWl0eSBsZWZ0IGluIGJvdGggdGhlIGRlc2NyaXB0aW9uIGFib3ZlIGFuZAo+IHRoZSBjb21t ZW50cyBoZXJlOiBXaXRoIGlkeCByZXF1aXJlZCB0byBiZSB6ZXJvIHVwb24gZmlyc3QKPiBpbnZv Y2F0aW9uICh3aGljaCBJJ20gbm90IGNsZWFyIHdoeSB0aGF0IGlzKSwgd2hpY2ggcGFydHMgb2Yg dGhlCj4gdGhyZWUgYXJyYXlzIGdldCBmaWxsZWQgd2hlbiBpZHggaXMgbm9uLXplcm86IFswLCBp ZHgpIG9yIFtuciwgbnIgKyBpZHgpPwoKSGVyZSBpcyB0aGUgbmV3IHVwZGF0ZWQgZGVzaWduLiBI b3BlZnVsbHkgaXQgaXMgbW9yZSBjbGVhcj8KCkZyb20gY2NkNmYzNTIxMjQxZWM1NjE1OGU1OGJm OWUyNjM4OGI1NzM0NjliMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogS29ucmFkIFJ6 ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgpEYXRlOiBNb24sIDE0IFNlcCAy MDE1IDA5OjA1OjExIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0geHNwbGljZTogRGVzaWduIGRvY3Vt ZW50CgpBIG1lY2hhbmlzbSBpcyByZXF1aXJlZCB0byBiaW5hcmlseSBwYXRjaCB0aGUgcnVubmlu ZyBoeXBlcnZpc29yIHdpdGggbmV3Cm9wY29kZXMgdGhhdCBoYXZlIGNvbWUgYWJvdXQgZHVlIHRv IHByaW1hcmlseSBzZWN1cml0eSB1cGRhdGVzLgoKVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhl IGRlc2lnbiBvZiB0aGUgQVBJIHRoYXQgd291bGQgYWxsb3cgdXMgdG8KdXBsb2FkIHRvIHRoZSBo eXBlcnZpc29yIGJpbmFyeSBwYXRjaGVzLgoKVGhpcyBkb2N1bWVudCBoYXMgYmVlbiBzaGFwZWQg YnkgdGhlIGlucHV0IGZyb206CiAgTWFydGluIFBvaGxhY2sgPG1wb2hsYWNrQGFtYXpvbi5kZT4K ICBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+CgpUaGFuayB5b3UhCgpJbnB1dC1mcm9t OiBNYXJ0aW4gUG9obGFjayA8bXBvaGxhY2tAYW1hem9uLmRlPgpJbnB1dC1mcm9tOiBKYW4gQmV1 bGljaCA8amJldWxpY2hAc3VzZS5jb20+ClNpZ25lZC1vZmYtYnk6IEtvbnJhZCBSemVzenV0ZWsg V2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KU2lnbmVkLW9mZi1ieTogUm9zcyBMYWdlcndh bGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+CgotLS0KQ2M6IElhbiBKYWNrc29uIDxpYW4u amFja3NvbkBldS5jaXRyaXguY29tPgpDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29t PgpDYzogS2VpciBGcmFzZXIgPGtlaXJAeGVuLm9yZz4KQ2M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4u b3JnPgoKdjEtMjogcmV2aWV3CnYzOiBTcGxpdCBkb2N1bWVudCBpbiB2MSBhbmQgdjIgKHRvZG8p IHRvIHNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIGdvYWxzLgogLSBBZGQgY29uc3Qgb24gc29tZSBz dHJ1Y3R1cmVzLiBUcnVuY2F0ZSBzaXplIHRvIHVpbnQxNl90IHdoZXJlIGl0IG1ha2VzIHNlbnNl LgogLSBDb252ZXJ0ICdpZCcgdG8gJ25hbWUnLCBBZGQgUm9zcydzIGNvbW1lbnRzIGFib3V0IHdo YXQgaXMgaW1wbGVtZW50ZWQuCiAtIFdlaSdzIGFuZCBSb3NzJ3MgcmV2aWV3cy4KIC0gSmFuJ3Mg cmV2aWV3IGNvbW1lbnRzLgogLSBKYW4ncyByZXZpZXcgY29tbWVudHMuCiAgICBzL2ludDMyX3Qg c3RhdGUvdWludDMyX3Qgc3RhdGUvIG5vdyB0aGF0IHJldHVybiBjb2RlIGlzIGluIHNlcGVyYXRl CiAgICBmaWVsZCAocmMpLiBBZGQgdmFyaW91cyBvdGhlciB0eXBlcywgc3VjaCBhcyBSX1g4Nl82 NF9QQzY0IGluIHRoZSBsaXN0LgogICAgTWVudGlvbiB0aGUgbmVlZCBmb3IgY29tcGlsZXIgY2hl Y2suCnY0OgogLSBEcm9wIHRoZSBMT0FERUQtPkNIRUNLRUQgc3RhdGUgYW5kIGdvIGRpcmVjdGx5 IHRvIENIRUNLRUQgc3RhdGUuIERyb3AKICAgIExPQURFRC4KdjU6IEp1bGllbiBtZW50aW9uZWQg QVJNIDMyLWJpdCB3b3VsZCBub3QgdXNlIEVMRjY0LCBzbyBtYWtlIHRoZSAueHNwbGljZS5mdW5j CiAgICB1c2UgdWludFhYX3QgdHlwZXMgaW5zdGVhZCBvZiBFTEYgb25lcy4gUmVtb3ZlIHRoZSBP VVQgb24gaWR4IHN1YmZpZWxkLgogICAgTWVudGlvbiB0aGF0ICducicgYmVpbmcgemVybyBjYW4g YmUgdXNlZCBmb3IgcHJvYmluZyB0aGUgbnVtYmVyIG9mIHBheWxvYWRzLgotLS0KIGRvY3MvbWlz Yy94c3BsaWNlLm1hcmtkb3duIHwgMTAzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwMzggaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRvY3MvbWlzYy94c3BsaWNlLm1hcmtkb3duCgpkaWZmIC0tZ2l0IGEvZG9j cy9taXNjL3hzcGxpY2UubWFya2Rvd24gYi9kb2NzL21pc2MveHNwbGljZS5tYXJrZG93bgpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjExODY3Ci0tLSAvZGV2L251bGwKKysr IGIvZG9jcy9taXNjL3hzcGxpY2UubWFya2Rvd24KQEAgLTAsMCArMSwxMDM4IEBACisjIHhTcGxp Y2UgRGVzaWduIHYxCisKKyMjIFJhdGlvbmFsZQorCitBIG1lY2hhbmlzbSBpcyByZXF1aXJlZCB0 byBiaW5hcmlseSBwYXRjaCB0aGUgcnVubmluZyBoeXBlcnZpc29yIHdpdGggbmV3CitvcGNvZGVz IHRoYXQgaGF2ZSBjb21lIGFib3V0IGR1ZSB0byBwcmltYXJpbHkgc2VjdXJpdHkgdXBkYXRlcy4K KworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRlc2lnbiBvZiB0aGUgQVBJIHRoYXQgd291 bGQgYWxsb3cgdXMgdG8KK3VwbG9hZCB0byB0aGUgaHlwZXJ2aXNvciBiaW5hcnkgcGF0Y2hlcy4K KworVGhlIGRvY3VtZW50IGlzIHNwbGl0IGluIGZvdXIgc2VjdGlvbnM6CisKKyAqIERldGFpbGVk IGRlc2NyaXB0aW9ucyBvZiB0aGUgcHJvYmxlbSBzdGF0ZW1lbnQuCisgKiBEZXNpZ24gb2YgdGhl IGRhdGEgc3RydWN0dXJlcy4KKyAqIERlc2lnbiBvZiB0aGUgaHlwZXJjYWxscy4KKyAqIEltcGxl bWVudGF0aW9uIG5vdGVzIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4K KworCisjIyBHbG9zc2FyeQorCisgKiBzcGxpY2UgLSBwYXRjaCBpbiB0aGUgYmluYXJ5IGNvZGUg d2l0aCBuZXcgb3Bjb2RlcworICogdHJhbXBvbGluZSAtIGEganVtcCB0byBhIG5ldyBpbnN0cnVj dGlvbi4KKyAqIHBheWxvYWQgLSB0ZWxlbWV0cmllcyBvZiB0aGUgb2xkIGNvZGUgYWxvbmcgd2l0 aCBiaW5hcnkgYmxvYiBvZiB0aGUgbmV3CisgICBmdW5jdGlvbiAoaWYgbmVlZGVkKS4KKyAqIHJl bG9jIC0gdGVsZW1ldHJpZXMgY29udGFpbmVkIGluIHRoZSBwYXlsb2FkIHRvIGNvbnN0cnVjdCBw cm9wZXIgdHJhbXBvbGluZS4KKworIyMgSGlzdG9yeQorCitUaGUgZG9jdW1lbnQgaGFzIGdvbmUg dW5kZXIgdmFyaW91cyByZXZpZXdzIGFuZCBvbmx5IGNvdmVycyB2MSBkZXNpZ24uCisKK1RoZSBl bmQgb2YgdGhlIGRvY3VtZW50IGhhcyBhIHNlY3Rpb24gdGl0bGVkIGBOb3QgWWV0IERvbmVgIHdo aWNoCitvdXRsaW5lcyBpZGVhcyBhbmQgZGVzaWduIGZvciB0aGUgZnV0dXJlIHZlcnNpb24gb2Yg dGhpcyB3b3JrLgorCisjIyBNdWx0aXBsZSB3YXlzIHRvIHBhdGNoCisKK1RoZSBtZWNoYW5pc20g bmVlZHMgdG8gYmUgZmxleGlibGUgdG8gcGF0Y2ggdGhlIGh5cGVydmlzb3IgaW4gbXVsdGlwbGUg d2F5cworYW5kIGJlIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4gVGhlIGNvbXBpbGVkIGNvZGUgaXMg Y29udGlndW91cyBpbiBtZW1vcnkgd2l0aAorbm8gZ2FwcyAtIHNvIHdlIGhhdmUgbm8gbHV4dXJ5 IG9mICdtb3ZpbmcnIGV4aXN0aW5nIGNvZGUgYW5kIG11c3QgZWl0aGVyCitpbnNlcnQgYSB0cmFt cG9saW5lIHRvIHRoZSBuZXcgY29kZSB0byBiZSBleGVjdXRlZCAtIG9yIG9ubHkgbW9kaWZ5IGlu LXBsYWNlCit0aGUgY29kZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlLiBUaGUgcGxhY2Vt ZW50IG9mIG5ldyBjb2RlIGhhcyB0byBiZSBkb25lCitieSBoeXBlcnZpc29yIGFuZCB0aGUgdmly dHVhbCBhZGRyZXNzIGZvciB0aGUgbmV3IGNvZGUgaXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5Lgor CitUaGlzIGltcGxpZXMgdGhhdCB0aGUgaHlwZXJ2aXNvciBtdXN0IGNvbXB1dGUgdGhlIG5ldyBv ZmZzZXRzIHdoZW4gc3BsaWNpbmcKK2luIHRoZSBuZXcgdHJhbXBvbGluZSBjb2RlLiBXaGVyZSB0 aGUgdHJhbXBvbGluZSBpcyBhZGRlZCAoaW5zaWRlCit0aGUgZnVuY3Rpb24gd2UgYXJlIHBhdGNo aW5nIG9yIGp1c3QgdGhlIGNhbGxlcnM/KSBpcyBhbHNvIGltcG9ydGFudC4KKworVG8gbGVzc2Vu IHRoZSBhbW91bnQgb2YgY29kZSBpbiBoeXBlcnZpc29yLCB0aGUgY29uc3VtZXIgb2YgdGhlIEFQ SQoraXMgcmVzcG9uc2libGUgZm9yIGlkZW50aWZ5aW5nIHdoaWNoIG1lY2hhbmlzbSB0byBlbXBs b3kgYW5kIGhvdyBtYW55IGxvY2F0aW9ucwordG8gcGF0Y2guIENvbWJpbmF0aW9ucyBvZiBtb2Rp ZnlpbmcgaW4tcGxhY2UgY29kZSwgYWRkaW5nIHRyYW1wb2xpbmUsIGV0YworaGFzIHRvIGJlIHN1 cHBvcnRlZC4gVGhlIEFQSSBzaG91bGQgYWxsb3cgcmVhZC93cml0ZSBhbnkgbWVtb3J5IHdpdGhp bgordGhlIGh5cGVydmlzb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorCitXZSBtdXN0IGFsc28g aGF2ZSBhIG1lY2hhbmlzbSB0byBxdWVyeSB3aGF0IGhhcyBiZWVuIGFwcGxpZWQgYW5kIGEgbWVj aGFuaXNtCit0byByZXZlcnQgaXQgaWYgbmVlZGVkLgorCisjIyBXb3JrZmxvdworCitUaGUgZXhw ZWN0ZWQgd29ya2Zsb3dzIG9mIGhpZ2hlci1sZXZlbCB0b29scyB0aGF0IG1hbmFnZSBtdWx0aXBs ZSBwYXRjaGVzCitvbiBwcm9kdWN0aW9uIG1hY2hpbmVzIHdvdWxkIGJlOgorCisgKiBUaGUgZmly c3Qgb2J2aW91cyB0YXNrIGlzIGxvYWRpbmcgYWxsIGF2YWlsYWJsZSAvIHN1Z2dlc3RlZAorICAg aG90cGF0Y2hlcyB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4KKyAqIFdoZW5ldmVyIG5ldyBob3Rw YXRjaGVzIGFyZSBpbnN0YWxsZWQsIHRoZXkgc2hvdWxkIGJlIGxvYWRlZCB0b28uCisgKiBPbmUg d2FudHMgdG8gcXVlcnkgd2hpY2ggbW9kdWxlcyBoYXZlIGJlZW4gbG9hZGVkIGF0IHJ1bnRpbWUu CisgKiBJZiB1bmxvYWRpbmcgaXMgZGVlbWVkIHNhZmUgKHNlZSB1bmxvYWRpbmcgYmVsb3cpLCBv bmUgbWF5IHdhbnQgdG8KKyAgIHN1cHBvcnQgYSB3b3JrZmxvdyB3aGVyZSBhIHNwZWNpZmljIGhv dHBhdGNoIGlzIG1hcmtlZCBhcyBiYWQgYW5kCisgICB1bmxvYWRlZC4KKworIyMgUGF0Y2hpbmcg Y29kZQorCitUaGUgZmlyc3QgbWVjaGFuaXNtIHRvIHBhdGNoIHRoYXQgY29tZXMgaW4gbWluZCBp cyBpbi1wbGFjZSByZXBsYWNlbWVudC4KK1RoYXQgaXMgcmVwbGFjZSB0aGUgYWZmZWN0ZWQgY29k ZSB3aXRoIG5ldyBjb2RlLiBVbmZvcnR1bmF0ZWx5IHRoZSB4ODYKK0lTQSBpcyB2YXJpYWJsZSBz aXplIHdoaWNoIHBsYWNlcyBsaW1pdHMgb24gaG93IG11Y2ggc3BhY2Ugd2UgaGF2ZSBhdmFpbGFi bGUKK3RvIHJlcGxhY2UgdGhlIGluc3RydWN0aW9ucy4gVGhhdCBpcyBub3QgYSBwcm9ibGVtIGlm IHRoZSBjaGFuZ2UgaXMgc21hbGxlcgordGhhbiB0aGUgb3JpZ2luYWwgb3Bjb2RlIGFuZCB3ZSBj YW4gZmlsbCBpdCB3aXRoIG5vcHMuIFByb2JsZW1zIHdpbGwKK2FwcGVhciBpZiB0aGUgcmVwbGFj ZW1lbnQgY29kZSBpcyBsb25nZXIuCisKK1RoZSBzZWNvbmQgbWVjaGFuaXNtIGlzIGJ5IHRpIHJl cGxhY2UgdGhlIGNhbGwgb3IganVtcCB0byB0aGUKK29sZCBmdW5jdGlvbiB3aXRoIHRoZSBhZGRy ZXNzIG9mIHRoZSBuZXcgZnVuY3Rpb24uCisKK0EgdGhpcmQgbWVjaGFuaXNtIGlzIHRvIGFkZCBh IGp1bXAgdG8gdGhlIG5ldyBmdW5jdGlvbiBhdCB0aGUKK3N0YXJ0IG9mIHRoZSBvbGQgZnVuY3Rp b24uIE4uQi4gVGhlIFhlbiBoeXBlcnZpc29yIGltcGxlbWVudHMgdGhlIHRoaXJkCittZWNoYW5p c20uIFNlZSBgVHJhbXBvbGluZSAoZTkgb3Bjb2RlKWAgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxz LgorCisjIyMgRXhhbXBsZSBvZiB0cmFtcG9saW5lIGFuZCBpbi1wbGFjZSBzcGxpY2luZworCitB cyBleGFtcGxlIHdlIHdpbGwgYXNzdW1lIHRoZSBoeXBlcnZpc29yIGRvZXMgbm90IGhhdmUgWFNB LTEzMiAoc2VlCisqZG9tY3RsL3N5c2N0bDogZG9uJ3QgbGVhayBoeXBlcnZpc29yIHN0YWNrIHRv IHRvb2xzdGFja3MqCis0ZmYzNDQ5ZjBlOWQxNzVjZWI5NTUxZDNmMmFlY2I1OTI3M2Y2MzlkKSBh bmQgd2Ugd291bGQgbGlrZSB0byBiaW5hcnkgcGF0Y2gKK3RoZSBoeXBlcnZpc29yIHdpdGggaXQu IFRoZSBvcmlnaW5hbCBjb2RlIGxvb2tzIGFzIHNvOgorCis8cHJlPgorICAgNDggODkgZTAgICAg ICAgICAgICAgICAgICBtb3YgICAgJXJzcCwlcmF4ICAKKyAgIDQ4IDI1IDAwIDgwIGZmIGZmICAg ICAgICAgYW5kICAgICQweGZmZmZmZmZmZmZmZjgwMDAsJXJheCAgCis8L3ByZT4KKword2hpbGUg dGhlIG5ldyBwYXRjaGVkIGh5cGVydmlzb3Igd291bGQgYmU6CisKKzxwcmU+CisgICA0OCBjNyA0 NSBiOCAwMCAwMCAwMCAwMCAgIG1vdnEgICAkMHgwLC0weDQ4KCVyYnApICAKKyAgIDQ4IGM3IDQ1 IGMwIDAwIDAwIDAwIDAwICAgbW92cSAgICQweDAsLTB4NDAoJXJicCkgIAorICAgNDggYzcgNDUg YzggMDAgMDAgMDAgMDAgICBtb3ZxICAgJDB4MCwtMHgzOCglcmJwKSAgCisgICA0OCA4OSBlMCAg ICAgICAgICAgICAgICAgIG1vdiAgICAlcnNwLCVyYXggIAorICAgNDggMjUgMDAgODAgZmYgZmYg ICAgICAgICBhbmQgICAgJDB4ZmZmZmZmZmZmZmZmODAwMCwlcmF4ICAKKzwvcHJlPgorCitUaGlz IGlzIGluc2lkZSB0aGUgYXJjaF9kb19kb21jdGwuIFRoaXMgbmV3IGNoYW5nZSBhZGRzIDIxIGV4 dHJhCitieXRlcyBvZiBjb2RlIHdoaWNoIGFsdGVycyBhbGwgdGhlIG9mZnNldHMgaW5zaWRlIHRo ZSBmdW5jdGlvbi4gVG8gYWx0ZXIKK3RoZXNlIG9mZnNldHMgYW5kIGFkZCB0aGUgZXh0cmEgMjEg Ynl0ZXMgb2YgY29kZSB3ZSBtaWdodCBub3QgaGF2ZSBlbm91Z2gKK3NwYWNlIGluIC50ZXh0IHRv IHNxdWVlemUgdGhpcyBpbi4KKworQXMgc3VjaCB3ZSBjb3VsZCBzaW1wbGlmeSB0aGlzIHByb2Js ZW0gYnkgb25seSBwYXRjaGluZyB0aGUgc2l0ZQord2hpY2ggY2FsbHMgYXJjaF9kb19kb21jdGw6 CisKKzxwcmU+Citkb19kb21jdGw6ICAKKyBlOCA0YiBiMSAwNSAwMCAgICAgICAgICBjYWxscSAg ZmZmZjgyZDA4MDE1ZmJiOSA8YXJjaF9kb19kb21jdGw+ICAKKzwvcHJlPgorCit3aXRoIGEgbmV3 IGFkZHJlc3MgZm9yIHdoZXJlIHRoZSBuZXcgYGFyY2hfZG9fZG9tY3RsYCB3b3VsZCBiZSAodGhp cworYXJlYSB3b3VsZCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkpLgorCitBc3R1dGUgcmVhZGVy cyB3aWxsIHdvbmRlciB3aGF0IHdlIG5lZWQgdG8gZG8gaWYgd2Ugd2VyZSB0byBwYXRjaCBgZG9f ZG9tY3RsYAorLSB3aGljaCBpcyBub3QgY2FsbGVkIGRpcmVjdGx5IGJ5IGh5cGVydmlzb3IgYnV0 IG9uIGJlaGFsZiBvZiB0aGUgZ3Vlc3RzIHZpYQordGhlIGBjb21wYXRfaHlwZXJjYWxsX3RhYmxl YCBhbmQgYGh5cGVyY2FsbF90YWJsZWAuCitQYXRjaGluZyB0aGUgb2Zmc2V0IGluIGBoeXBlcmNh bGxfdGFibGVgIGZvciBgZG9fZG9tY3RsOgorKGZmZmY4MmQwODAxMDMwNzkgPGRvX2RvbWN0bD46 KQorCis8cHJlPgorCisgZmZmZjgyZDA4MDI0ZDQ5MDogICA3OSAzMCAgCisgZmZmZjgyZDA4MDI0 ZDQ5MjogICAxMCA4MCBkMCA4MiBmZiBmZiAgIAorCis8L3ByZT4KKword2l0aCB0aGUgbmV3IGFk ZHJlc3Mgd2hlcmUgdGhlIG5ldyBgZG9fZG9tY3RsYCBpcyBwb3NzaWJsZS4gVGhlIG90aGVyCitw bGFjZSB3aGVyZSBpdCBpcyB1c2VkIGlzIGluIGBodm1faHlwZXJjYWxsNjRfdGFibGVgIHdoaWNo IHdvdWxkIG5lZWQKK3RvIGJlIHBhdGNoZWQgaW4gYSBzaW1pbGFyIHdheS4gVGhpcyB3b3VsZCBy ZXF1aXJlIGFuIGluLXBsYWNlIHNwbGljaW5nCitvZiB0aGUgbmV3IHZpcnR1YWwgYWRkcmVzcyBv ZiBgYXJjaF9kb19kb21jdGxgLgorCitJbiBzdW1tYXJ5IHRoaXMgZXhhbXBsZSBwYXRjaGVkIHRo ZSBjYWxsZWUgb2YgdGhlIGFmZmVjdGVkIGZ1bmN0aW9uIGJ5CisgKiBhbGxvY2F0aW5nIG1lbW9y eSBmb3IgdGhlIG5ldyBjb2RlIHRvIGxpdmUgaW4sCisgKiBjaGFuZ2luZyB0aGUgdmlydHVhbCBh ZGRyZXNzIGluIGFsbCB0aGUgZnVuY3Rpb25zIHdoaWNoIGNhbGxlZCB0aGUgb2xkCisgICBjb2Rl IChjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXQsIHBhdGNoaW5nIHRoZSBjYWxscSB3aXRoIGEgbmV3 IGNhbGxxKS4KKyAqIGNoYW5naW5nIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcyB3aXRoIHRo ZSBuZXcgdmlydHVhbCBhZGRyZXNzIG9mCisgICB0aGUgZnVuY3Rpb24gKHNwbGljaW5nIGluIHRo ZSBuZXcgdmlydHVhbCBhZGRyZXNzKS4gU2luY2UgdGhpcyB0YWJsZQorICAgcmVzaWRlcyBpbiB0 aGUgLnJvZGF0YSBzZWN0aW9uIHdlIHdvdWxkIG5lZWQgdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRo ZQorICAgcGFnZSB0YWJsZSBwZXJtaXNzaW9ucyBkdXJpbmcgdGhpcyBwYXJ0LgorCitIb3dldmVy IGl0IGhhcyBkcmF3YmFja3MgLSB0aGUgc2FmZXR5IGNoZWNrcyB3aGljaCBoYXZlIHRvIG1ha2Ug c3VyZQordGhlIGZ1bmN0aW9uIGlzIG5vdCBvbiB0aGUgc3RhY2sgLSBtdXN0IGFsc28gY2hlY2sg ZXZlcnkgY2FsbGVyLiBGb3Igc29tZQorcGF0Y2hlcyB0aGlzIGNvdWxkIG1lYW4gLSBpZiB0aGVy ZSB3ZXJlIGFuIHN1ZmZpY2llbnQgbGFyZ2UgYW1vdW50IG9mCitjYWxsZXJzIC0gdGhhdCB3ZSB3 b3VsZCBuZXZlciBiZSBhYmxlIHRvIGFwcGx5IHRoZSB1cGRhdGUuCisKK0hhdmluZyB0aGUgcGF0 Y2hpbmcgZG9uZSBhdCBwcmVkZXRlcm1pbmVkIGluc3RhbmNlcyB3aGVyZSB0aGUgc3RhY2tzCith cmUgbm90IGRlZXAgbW9zdGx5IHNvbHZlcyB0aGlzIHByb2JsZW0uCisKKyMjIyBFeGFtcGxlIG9m IGRpZmZlcmVudCB0cmFtcG9saW5lIHBhdGNoaW5nLgorCitBbiBhbHRlcm5hdGl2ZSBtZWNoYW5p c20gZXhpc3RzIHdoZXJlIHdlIGNhbiBpbnNlcnQgYSB0cmFtcG9saW5lIGluIHRoZQorZXhpc3Rp bmcgZnVuY3Rpb24gdG8gYmUgcGF0Y2hlZCB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBuZXcgY29k ZS4gVGhpcworbGVzc2VucyB0aGUgbG9jYXRpb25zIHRvIGJlIHBhdGNoZWQgdG8gb25lIGJ1dCBp dCBwdXRzIHByZXNzdXJlIG9uIHRoZQorQ1BVIGJyYW5jaGluZyBsb2dpYyAoSS1jYWNoZSwgYnV0 IGl0IGlzIGp1c3Qgb25lIHVuY29uZGl0aW9uYWwganVtcCkuCisKK0ZvciB0aGlzIGV4YW1wbGUg d2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGUgaHlwZXJ2aXNvciBoYXMgbm90IGJlZW4gY29tcGlsZWQK K3dpdGggZmUyZTA3OWY2NDJlZmZiM2QyNGE2ZTFhNzA5NmVmMjZlNjkxZDkzZSAoWFNBLTEyNTog KnByZS1maWxsIHN0cnVjdHVyZXMKK2ZvciBjZXJ0YWluIEhZUEVSVklTT1JfeGVuX3ZlcnNpb24g c3ViLW9wcyopIHdoaWNoIG1lbS1zZXRzIGFuIHN0cnVjdHVyZQoraW4gYHhlbl92ZXJzaW9uYCBo eXBlcmNhbGwuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCAqKmFueXdoZXJlKiogaW4KK3Ro ZSBoeXBlcnZpc29yIChpdCBpcyBjYWxsZWQgYnkgdGhlIGd1ZXN0KSBidXQgcmVmZXJlbmNlZCBp biB0aGUKK2Bjb21wYXRfaHlwZXJjYWxsX3RhYmxlYCBhbmQgYGh5cGVyY2FsbF90YWJsZWAgKGFu ZCBpbmRpcmVjdGx5IGNhbGxlZAorZnJvbSB0aGF0KS4gUGF0Y2hpbmcgdGhlIG9mZnNldCBpbiBg aHlwZXJjYWxsX3RhYmxlYCBmb3IgdGhlIG9sZAorYGRvX3hlbl92ZXJzaW9uYCAoZmZmZjgyZDA4 MDExMmY5ZSA8ZG9feGVuX3ZlcnNpb24+KQorCis8L3ByZT4KKyBmZmZmODJkMDgwMjRiMjcwIDxo eXBlcmNhbGxfdGFibGU+OiAgIAorIC4uLiAgCisgZmZmZjgyZDA4MDI0YjJmODogICA5ZSAyZiAx MSA4MCBkMCA4MiBmZiBmZiAgCisKKzwvcHJlPgorCit3aXRoIHRoZSBuZXcgYWRkcmVzcyB3aGVy ZSB0aGUgbmV3IGBkb194ZW5fdmVyc2lvbmAgaXMgcG9zc2libGUuIFRoZSBvdGhlcgorcGxhY2Ug d2hlcmUgaXQgaXMgdXNlZCBpcyBpbiBgaHZtX2h5cGVyY2FsbDY0X3RhYmxlYCB3aGljaCB3b3Vs ZCBuZWVkCit0byBiZSBwYXRjaGVkIGluIGEgc2ltaWxhciB3YXkuIFRoaXMgd291bGQgcmVxdWly ZSBhbiBpbi1wbGFjZSBzcGxpY2luZworb2YgdGhlIG5ldyB2aXJ0dWFsIGFkZHJlc3Mgb2YgYGRv X3hlbl92ZXJzaW9uYC4KKworQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gd291bGQgYmUgdG8gcGF0 Y2ggaW5zZXJ0IGEgdHJhbXBvbGluZSBpbiB0aGUKK29sZCBgZG9feGVuX3ZlcnNpb24nIGZ1bmN0 aW9uIHRvIGRpcmVjdGx5IGp1bXAgdG8gdGhlIG5ldyBgZG9feGVuX3ZlcnNpb25gLgorCis8cHJl PgorIGZmZmY4MmQwODAxMTJmOWUgZG9feGVuX3ZlcnNpb246ICAKKyBmZmZmODJkMDgwMTEyZjll OiAgICAgICA0OCBjNyBjMCBkYSBmZiBmZiBmZiAgICBtb3YgICAgJDB4ZmZmZmZmZmZmZmZmZmZk YSwlcmF4ICAKKyBmZmZmODJkMDgwMTEyZmE1OiAgICAgICA4MyBmZiAwOSAgICAgICAgICAgICAg ICBjbXAgICAgJDB4OSwlZWRpICAKKyBmZmZmODJkMDgwMTEyZmE4OiAgICAgICAwZiA4NyAyNCAw NSAwMCAwMCAgICAgICBqYSAgICAgZmZmZjgyZDA4MDExMzRkMiA7IGRvX3hlbl92ZXJzaW9uKzB4 NTM0ICAKKzwvcHJlPgorCit3aXRoOgorCis8cHJlPgorIGZmZmY4MmQwODAxMTJmOWUgZG9feGVu X3ZlcnNpb246ICAKKyBmZmZmODJkMDgwMTEyZjllOiAgICAgICBlOSBYWCBZWSBaWiBRUSAgICAg ICAgICBqbXBxICAgW25ldyBkb194ZW5fdmVyc2lvbl0gIAorPC9wcmU+CisKK3doaWNoIHdvdWxk IGxlc3NlbiB0aGUgYW1vdW50IG9mIHBhdGNoaW5nIHRvIGp1c3Qgb25lIGxvY2F0aW9uLgorCitJ biBzdW1tYXJ5IHRoaXMgZXhhbXBsZSBwYXRjaGVkIHRoZSBhZmZlY3RlZCBmdW5jdGlvbiB0byBq dW1wIHRvIHRoZQorbmV3IHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdoaWNoIHJlcXVpcmVkOgorICog YWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSBuZXcgY29kZSB0byBsaXZlIGluLAorICogaW5zZXJ0 aW5nIHRyYW1wb2xpbmUgd2l0aCBuZXcgb2Zmc2V0IGluIHRoZSBvbGQgZnVuY3Rpb24gdG8gcG9p bnQgdG8gdGhlCisgICBuZXcgZnVuY3Rpb24uCisgKiBPcHRpb25hbGx5IHdlIGNhbiBpbnNlcnQg aW4gdGhlIG9sZCBmdW5jdGlvbiBhIHRyYW1wb2xpbmUganVtcCB0byBhbiBmdW5jdGlvbgorICAg cHJvdmlkaW5nIGFuIEJVR19PTiB0byBjYXRjaCBlcnJhbnQgY29kZS4KKworVGhlIGRpc2FkdmFu dGFnZSBvZiB0aGlzIGFyZSB0aGF0IHRoZSB1bmNvbmRpdGlvbmFsIGp1bXAgd2lsbCBjb25zdW1l IGEgc21hbGwKK0ktY2FjaGUgcGVuYWx0eS4gSG93ZXZlciB0aGUgc2ltcGxpY2l0eSBvZiB0aGUg cGF0Y2hpbmcgYW5kIGhpZ2hlciBjaGFuY2UKK29mIHBhc3Npbmcgc2FmZXR5IGNoZWNrcyBtYWtl IHRoaXMgYSB3b3J0aHdoaWxlIG9wdGlvbi4KKworVGhpcyBwYXRjaGluZyBoYXMgYSBzaW1pbGFy IGRyYXdiYWNrIGFzIGlubGluZSBwYXRjaGluZyAtIHRoZSBzYWZldHkKK2NoZWNrcyBoYXZlIHRv IG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgbm90IG9uIHRoZSBzdGFjay4gSG93ZXZlcgorc2lu Y2Ugd2UgYXJlIHJlcGxhY2luZyBhdCBhIGhpZ2hlciBsZXZlbCAoYSBmdWxsIGZ1bmN0aW9uIGFz IG9wcG9zZWQKK3RvIHZhcmlvdXMgb2Zmc2V0cyB3aXRoaW4gZnVuY3Rpb25zKSB0aGUgY2hlY2tz IGFyZSBzaW1wbGVyLgorCitIYXZpbmcgdGhlIHBhdGNoaW5nIGRvbmUgYXQgcHJlZGV0ZXJtaW5l ZCBpbnN0YW5jZXMgd2hlcmUgdGhlIHN0YWNrcworYXJlIG5vdCBkZWVwIG1vc3RseSBzb2x2ZXMg dGhpcyBwcm9ibGVtIGFzIHdlbGwuCisKKyMjIyBTZWN1cml0eQorCitXaXRoIHRoaXMgbWV0aG9k IHdlIGNhbiByZS13cml0ZSB0aGUgaHlwZXJ2aXNvciAtIGFuZCBhcyBzdWNoIHdlICoqTVVTVCoq IGJlCitkaWxpZ2VudCBpbiBvbmx5IGFsbG93aW5nIGNlcnRhaW4gZ3Vlc3RzIHRvIHBlcmZvcm0g dGhpcyBvcGVyYXRpb24uCisKK0Z1cnRoZXJtb3JlIHdpdGggU2VjdXJlQm9vdCBvciB0Ym9vdCwg d2UgKipNVVNUKiogYWxzbyB2ZXJpZnkgdGhlIHNpZ25hdHVyZQorb2YgdGhlIHBheWxvYWQgdG8g YmUgY2VydGFpbiBpdCBjYW1lIGZyb20gYSB0cnVzdGVkIHNvdXJjZSBhbmQgaW50ZWdyaXR5Cit3 YXMgaW50YWN0LgorCitBcyBzdWNoIHRoZSBoeXBlcmNhbGwgKipNVVNUKiogc3VwcG9ydCBhbiBY U00gcG9saWN5IHRvIGxpbWl0IHdoYXQgdGhlIGd1ZXN0CitpcyBhbGxvd2VkIHRvIGludm9rZS4g SWYgdGhlIHN5c3RlbSBpcyBib290ZWQgd2l0aCBzaWduYXR1cmUgY2hlY2tpbmcgdGhlCitzaWdu YXR1cmUgY2hlY2tpbmcgd2lsbCBiZSBlbmZvcmNlZC4KKworIyMgRGVzaWduIG9mIHBheWxvYWQg Zm9ybWF0CisKK1RoZSBwYXlsb2FkICoqTVVTVCoqIGNvbnRhaW4gZW5vdWdoIGRhdGEgdG8gYWxs b3cgdXMgdG8gYXBwbHkgdGhlIHVwZGF0ZQorYW5kIGFsc28gc2FmZWx5IHJldmVyc2UgaXQuIEFz IHN1Y2ggd2UgKipNVVNUKioga25vdzoKKworICogVGhlIGxvY2F0aW9ucyBpbiBtZW1vcnkgdG8g YmUgcGF0Y2hlZC4gVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseQorICAgdmlhIHN5 bWJvbHMgb3IgdmlhIHZpcnR1YWwgYWRkcmVzc2VzLgorICogVGhlIG5ldyBjb2RlIHRoYXQgd2ls bCBiZSBwYXRjaGVkIGluLgorCitUaGlzIGJpbmFyeSBmb3JtYXQgY2FuIGJlIGNvbnN0cnVjdGVk IHVzaW5nIGFuIGN1c3RvbSBiaW5hcnkgZm9ybWF0IGJ1dAordGhlcmUgYXJlIHNldmVyZSBkaXNh ZHZhbnRhZ2VzIG9mIGl0OgorCisgKiBUaGUgZm9ybWF0IG1pZ2h0IG5lZWQgdG8gYmUgY2hhbmdl ZCBhbmQgd2UgbmVlZCBhbiBtZWNoYW5pc20gdG8gYWNjb21tb2RhdGUKKyAgIHRoYXQuCisgKiBJ dCBoYXMgdG8gYmUgcGxhdGZvcm0gYWdub3N0aWMuCisgKiBFYXNpbHkgY29uc3RydWN0ZWQgdXNp bmcgZXhpc3RpbmcgdG9vbHMuCisKK0FzIHN1Y2ggaGF2aW5nIHRoZSBwYXlsb2FkIGluIGFuIEVM RiBmaWxlIGlzIHRoZSBzZW5zaWJsZSB3YXkuIFdlIHdvdWxkIGJlCitjYXJyeWluZyB0aGUgdmFy aW91cyBzZXRzIG9mIHN0cnVjdHVyZXMgKGFuZCBkYXRhKSBpbiB0aGUgRUxGIHNlY3Rpb25zIHVu ZGVyCitkaWZmZXJlbnQgbmFtZXMgYW5kIHdpdGggZGVmaW5pdGlvbnMuCisKK05vdGUgdGhhdCBl dmVyeSBzdHJ1Y3R1cmUgaGFzIHBhZGRpbmcuIFRoaXMgaXMgYWRkZWQgc28gdGhhdCB0aGUgaHlw ZXJ2aXNvcgorY2FuIHJlLXVzZSB0aG9zZSBmaWVsZHMgYXMgaXQgc2VlcyBmaXQuCisKK0Vhcmxp ZXIgZGVzaWduIGF0dGVtcHRlZCB0byBpbmVwdGx5IGV4cGxhaW4gdGhlIHJlbGF0aW9ucyBvZiB0 aGUgRUxGIHNlY3Rpb25zCit0byBlYWNoIG90aGVyIHdpdGhvdXQgdXNpbmcgcHJvcGVyIEVMRiBt ZWNoYW5pc20gKHNoX2luZm8sIHNoX2xpbmssIGRhdGEKK3N0cnVjdHVyZXMgdXNpbmcgRWxmIHR5 cGVzLCBldGMpLiBUaGlzIGRlc2lnbiB3aWxsIGV4cGxhaW4gdGhlIHN0cnVjdHVyZXMKK2FuZCBo b3cgdGhleSBhcmUgdXNlZCB0b2dldGhlciBhbmQgbm90IGRpZyBpbiB0aGUgRUxGIGZvcm1hdCAt IGV4Y2VwdCBtZW50aW9uCit0aGF0IHRoZSBzZWN0aW9uIG5hbWVzIHNob3VsZCBtYXRjaCB0aGUg c3RydWN0dXJlIG5hbWVzLgorCitUaGUgeFNwbGljZSBwYXlsb2FkIGlzIGEgcmVsb2NhdGFibGUg RUxGIGJpbmFyeS4gQSB0eXBpY2FsIGJpbmFyeSB3b3VsZCBoYXZlOgorCisgKiBPbmUgb3IgbW9y ZSAudGV4dCBzZWN0aW9ucy4KKyAqIFplcm8gb3IgbW9yZSByZWFkLW9ubHkgZGF0YSBzZWN0aW9u cy4KKyAqIFplcm8gb3IgbW9yZSBkYXRhIHNlY3Rpb25zLgorICogUmVsb2NhdGlvbnMgZm9yIGVh Y2ggb2YgdGhlc2Ugc2VjdGlvbnMuCisKK0l0IG1heSBhbHNvIGhhdmUgc29tZSBhcmNoaXRlY3R1 cmUtc3BlY2lmaWMgc2VjdGlvbnMuIEZvciBleGFtcGxlOgorCisgKiBBbHRlcm5hdGl2ZXMgaW5z dHJ1Y3Rpb25zLgorICogQnVnIGZyYW1lcy4KKyAqIEV4Y2VwdGlvbiB0YWJsZXMuCisgKiBSZWxv Y2F0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBzZWN0aW9ucy4KKworVGhlIHhTcGxpY2UgY29yZSBj b2RlIGxvYWRzIHRoZSBwYXlsb2FkIGFzIGEgc3RhbmRhcmQgRUxGIGJpbmFyeSwgcmVsb2NhdGVz IGl0CithbmQgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmMgc2VjdGlvbnMgYXMgbmVl ZGVkLiBUaGlzIHByb2Nlc3MgaXMgbXVjaAorbGlrZSB3aGF0IHRoZSBMaW51eCBrZXJuZWwgbW9k dWxlIGxvYWRlciBkb2VzLgorCitUaGUgcGF5bG9hZCBjb250YWlucyBhIHNlY3Rpb24gKHhzcGxp Y2VfcGF0Y2hfZnVuYykgd2l0aCBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzCitkZXNjcmliaW5nIHRo ZSBmdW5jdGlvbnMgdG8gYmUgcGF0Y2hlZDoKKworPHByZT4KK3N0cnVjdCB4c3BsaWNlX3BhdGNo X2Z1bmMgeyAgCisgICAgY29uc3QgY2hhciAqbmFtZTsgIAorICAgIHVpbnQ2NF90IG5ld19hZGRy OyAgCisgICAgdWludDY0X3Qgb2xkX2FkZHI7ICAKKyAgICB1aW50MzJfdCBuZXdfc2l6ZTsgIAor ICAgIHVpbnQzMl90IG9sZF9zaXplOyAgCisgICAgdWludDhfdCBwYWRbMzJdOyAgCit9OyAgCis8 L3ByZT4KKworVGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpcyA2NCBieXRlcy4KKworKiBgbmFt ZWAgaXMgdGhlIHN5bWJvbCBuYW1lIG9mIHRoZSBvbGQgZnVuY3Rpb24uIE9ubHkgdXNlZCBpZiBg b2xkX2FkZHJgIGlzCisgICB6ZXJvLCBvdGhlcndpc2Ugd2lsbCBiZSB1c2VkIGR1cmluZyBkeW5h bWljIGxpbmtpbmcgKHdoZW4gaHlwZXJ2aXNvciBsb2FkcworICAgdGhlIHBheWxvYWQpLgorCisq IGBvbGRfYWRkcmAgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIHBhdGNoZWQg YW5kIGlzIGZpbGxlZCBpbiBhdAorICBwYXlsb2FkIGdlbmVyYXRpb24gdGltZSBpZiBoeXBlcnZp c29yIGZ1bmN0aW9uIGFkZHJlc3MgaXMga25vd24uIElmIHVua25vd24sCisgIHRoZSB2YWx1ZSAq TVVTVCogYmUgemVybyBhbmQgdGhlIGh5cGVydmlzb3Igd2lsbCBhdHRlbXB0IHRvIHJlc29sdmUg dGhlIGFkZHJlc3MuCisKKyogYG5ld19hZGRyYCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rp b24gdGhhdCBpcyByZXBsYWNpbmcgdGhlIG9sZAorICBmdW5jdGlvbi4gVGhlIGFkZHJlc3MgaXMg ZmlsbGVkIGluIGR1cmluZyByZWxvY2F0aW9uLiBUaGUgdmFsdWUgKipNVVNUKiogYmUKKyAgdGhl IGFkZHJlc3Mgb2YgdGhlIG5ldyBmdW5jdGlvbiBpbiB0aGUgZmlsZS4KKworKiBgb2xkX3NpemVg IGFuZCBgbmV3X3NpemVgIGNvbnRhaW4gdGhlIHNpemVzIG9mIHRoZSByZXNwZWN0aXZlIGZ1bmN0 aW9ucyBpbiBieXRlcy4KKyAgIFRoZSB2YWx1ZSBvZiBgb2xkX3NpemVgICoqTVVTVCoqIG5vdCBi ZSB6ZXJvLgorCisqIGBwYWRgICoqTVVTVCoqIGJlIHplcm8uCisKK1RoZSBzaXplIG9mIHRoZSBg eHNwbGljZV9wYXRjaF9mdW5jYCBhcnJheSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIEVMRiBzZWN0 aW9uCitzaXplLgorCitXaGVuIGFwcGx5aW5nIHRoZSBwYXRjaCB0aGUgaHlwZXJ2aXNvciBpdGVy YXRlcyBvdmVyIGVhY2ggYHhzcGxpY2VfcGF0Y2hfZnVuY2AKK3N0cnVjdHVyZSBhbmQgdGhlIGNv cmUgY29kZSBpbnNlcnRzIGEgdHJhbXBvbGluZSBhdCBgb2xkX2FkZHJgIHRvIGBuZXdfYWRkcmAu CisKK1doZW4gcmV2ZXJ0aW5nIGEgcGF0Y2gsIHRoZSBoeXBlcnZpc29yIGl0ZXJhdGVzIG92ZXIg ZWFjaCBgeHNwbGljZV9wYXRjaF9mdW5jYAorYW5kIHRoZSBjb3JlIGNvZGUgY29waWVzIHRoZSBk YXRhIGZyb20gdGhlIHVuZG8gYnVmZmVyIChwcml2YXRlIGludGVybmFsIGNvcHkpCit0byBgb2xk X2FkZHJgLgorCisjIyBIeXBlcmNhbGxzCisKK1dlIHdpbGwgZW1wbG95IHRoZSBzdWIgb3BlcmF0 aW9ucyBvZiB0aGUgc3lzdGVtIG1hbmFnZW1lbnQgaHlwZXJjYWxsIChzeXNjdGwpLgorVGhlcmUg YXJlIHRvIGJlIGZvdXIgc3ViLW9wZXJhdGlvbnM6CisKKyAqIHVwbG9hZCB0aGUgcGF5bG9hZHMu CisgKiBsaXN0aW5nIG9mIHBheWxvYWRzIHN1bW1hcnkgdXBsb2FkZWQgYW5kIHRoZWlyIHN0YXRl LgorICogZ2V0dGluZyBhbiBwYXJ0aWN1bGFyIHBheWxvYWQgc3VtbWFyeSBhbmQgaXRzIHN0YXRl LgorICogY29tbWFuZCB0byBhcHBseSwgZGVsZXRlLCBvciByZXZlcnQgdGhlIHBheWxvYWQuCisK K01vc3Qgb2YgdGhlIGFjdGlvbnMgYXJlIGFzeW5jaHJvbm91cyB0aGVyZWZvcmUgdGhlIGNhbGxl ciBpcyByZXNwb25zaWJsZQordG8gdmVyaWZ5IHRoYXQgaXQgaGFzIGJlZW4gYXBwbGllZCBwcm9w ZXJseSBieSByZXRyaWV2aW5nIHRoZSBzdW1tYXJ5IG9mIGl0CithbmQgdmVyaWZ5aW5nIHRoYXQg dGhlcmUgYXJlIG5vIGVycm9yIGNvZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF5bG9hZC4KKwor V2UgKipNVVNUKiogbWFrZSBzb21lIG9mIHRoZW0gYXN5bmNocm9ub3VzIGR1ZSB0byB0aGUgbmF0 dXJlIG9mIHBhdGNoaW5nCitpdCByZXF1aXJlcyBldmVyeSBwaHlzaWNhbCBDUFUgdG8gYmUgbG9j ay1zdGVwIHdpdGggZWFjaCBvdGhlci4KK1RoZSBwYXRjaGluZyBtZWNoYW5pc20gd2hpbGUgYW4g aW1wbGVtZW50YXRpb24gZGV0YWlsLCBpcyBub3QgYW4gc2hvcnQKK29wZXJhdGlvbiBhbmQgYXMg c3VjaCB0aGUgZGVzaWduICoqTVVTVCoqIGFzc3VtZSBpdCB3aWxsIGJlIGFuIGxvbmctcnVubmlu Zworb3BlcmF0aW9uLgorCitUaGUgc3ViLW9wZXJhdGlvbnMgd2lsbCBzcGVsbCBvdXQgaG93IHBy ZWVtcHRpb24gaXMgdG8gYmUgaGFuZGxlZCAoaWYgYXQgYWxsKS4KKworRnVydGhlcm1vcmUgaXQg aXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgcGF5bG9hZHMgZm9yIHRoZSBz YW1lCitmdW5jdGlvbi4gQXMgc3VjaCBhbiB1bmlxdWUgbmFtZSBwZXIgcGF5bG9hZCBoYXMgdG8g YmUgdmlzaWJsZSB0byBhbGxvdyBwcm9wZXIgbWFuaXB1bGF0aW9uLgorCitUaGUgaHlwZXJjYWxs IGlzIHBhcnQgb2YgdGhlIGB4ZW5fc3lzY3RsYC4gVGhlIHRvcCBsZXZlbCBzdHJ1Y3R1cmUgY29u dGFpbnMKK29uZSB1aW50MzJfdCB0byBkZXRlcm1pbmUgdGhlIHN1Yi1vcGVyYXRpb25zIGFuZCBv bmUgcGFkZGluZyBmaWVsZCB3aGljaAorKk1VU1QqIGFsd2F5cyBiZSB6ZXJvLgorCis8cHJlPgor c3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9vcCB7ICAKKyAgICB1aW50MzJfdCBjbWQ7ICAgICAg ICAgICAgICAgICAgIC8qIElOOiBYRU5fU1lTQ1RMX1hTUExJQ0VfKi4gKi8gIAorICAgIHVpbnQz Ml90IHBhZDsgICAgICAgICAgICAgICAgICAgLyogSU46IEFsd2F5cyB6ZXJvLiAqLyAgCisJdW5p b24geyAgCisgICAgICAgICAgLi4uIHNlZSBiZWxvdyAuLi4gIAorICAgICAgICB9IHU7ICAKK307 ICAKKworPC9wcmU+Cit3aGlsZSB0aGUgcmVzdCBvZiBoeXBlcmNhbGwgc3BlY2lmaWMgc3RydWN0 dXJlcyBhcmUgcGFydCBvZiB0aGUgdGhpcyBzdHJ1Y3R1cmUuCisKKyMjIyBCYXNpYyB0eXBlOiBz dHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZQorCitNb3N0IG9mIHRoZSBoeXBlcmNhbGxzIGVtcGxveSBh biBzaGFyZWQgc3RydWN0dXJlIGNhbGxlZCBgc3RydWN0IHhlbl94c3BsaWNlX25hbWVgCit3aGlj aCBjb250YWluczoKKworICogYG5hbWVgIC0gcG9pbnRlciB3aGVyZSB0aGUgc3RyaW5nIGZvciB0 aGUgbmFtZSBpcyBsb2NhdGVkLgorICogYHNpemVgIC0gdGhlIHNpemUgb2YgdGhlIHN0cmluZwor ICogYHBhZGAgLSBwYWRkaW5nIC0gdG8gYmUgemVyby4KKworVGhlIHN0cnVjdHVyZSBpcyBhcyBm b2xsb3c6CisKKzxwcmU+CisvKiAgCisgKiAgVW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcGF5bG9h ZC4gIFNob3VsZCBiZSBodW1hbiByZWFkYWJsZS4gIAorICogSW5jbHVkZXMgdGhlIE5VTCB0ZXJt aW5hdG9yICAKKyAqLyAgCisjZGVmaW5lIFhFTl9YU1BMSUNFX05BTUVfU0laRSAxMjggIAorc3Ry dWN0IHhlbl94c3BsaWNlX25hbWUgeyAgCisgICAgWEVOX0dVRVNUX0hBTkRMRV82NChjaGFyKSBu YW1lOyAgICAgICAgIC8qIElOLCBwb2ludGVyIHRvIG5hbWUuICovICAKKyAgICB1aW50MTZfdCBz aXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU4sIHNpemUgb2YgbmFtZS4gTWF5IGJl IHVwdG8gICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WEVOX1hTUExJQ0VfTkFNRV9TSVpFLiAqLyAgCisgICAgdWludDE2X3QgcGFkWzNdOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElOOiBNVVNUIGJlIHplcm8uICovIAorfTsgIAorPC9wcmU+CisK KyMjIyBYRU5fU1lTQ1RMX1hTUExJQ0VfVVBMT0FEICgwKQorCitVcGxvYWQgYSBwYXlsb2FkIHRv IHRoZSBoeXBlcnZpc29yLiBUaGUgcGF5bG9hZCBpcyB2ZXJpZmllZAorYWdhaW5zdCBiYXNpYyBj aGVja3MgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaXNzdWVzIHRoZSBwcm9wZXIgcmV0dXJuIGNvZGUK K3dpbGwgYmUgcmV0dXJuZWQuIFRoZSBwYXlsb2FkIGlzIG5vdCBhcHBsaWVkIGF0IHRoaXMgdGlt ZSAtIHRoYXQgaXMKK2NvbnRyb2xsZWQgYnkgKlhFTl9TWVNDVExfWFNQTElDRV9BQ1RJT04qLgor CitUaGUgY2FsbGVyIHByb3ZpZGVzOgorCisgKiBBIGBzdHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZWAg Y2FsbGVkIGBuYW1lYCB3aGljaCBoYXMgdGhlIHVuaXF1ZSBuYW1lLgorICogYHNpemVgIHRoZSBz aXplIG9mIHRoZSBFTEYgcGF5bG9hZCAoaW4gYnl0ZXMpLgorICogYHBheWxvYWRgIHRoZSB2aXJ0 dWFsIGFkZHJlc3Mgb2Ygd2hlcmUgdGhlIEVMRiBwYXlsb2FkIGlzLgorCitUaGUgYG5hbWVgIGNv dWxkIGJlIGFuIFVVSUQgdGhhdCBzdGF5cyBmaXhlZCBmb3JldmVyIGZvciBhIGdpdmVuCitwYXls b2FkLiBJdCBjYW4gYmUgZW1iZWRkZWQgaW50byB0aGUgRUxGIHBheWxvYWQgYXQgY3JlYXRpb24g dGltZQorYW5kIGV4dHJhY3RlZCBieSB0b29scy4KKworVGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJv IGlmIHRoZSBwYXlsb2FkIHdhcyBzdWNjZXNmdWxseSB1cGxvYWRlZC4KK090aGVyd2lzZSBhbiAt WEVOX0VYWCByZXR1cm4gdmFsdWUgaXMgcHJvdmlkZWQuIER1cGxpY2F0ZSBgbmFtZWAgYXJlIG5v dCBzdXBwb3J0ZWQuCisKK1RoZSBgcGF5bG9hZGAgaXMgdGhlIEVMRiBwYXlsb2FkIGFzIG1lbnRp b25lZCBpbiB0aGUgYFBheWxvYWQgZm9ybWF0YCBzZWN0aW9uLgorCitUaGUgc3RydWN0dXJlIGlz IGFzIGZvbGxvdzoKKworPHByZT4KK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2VfdXBsb2FkIHsg IAorICAgIHhlbl94c3BsaWNlX25hbWVfdCBuYW1lOyAgICAgICAgICAgIC8qIElOLCBuYW1lIG9m IHRoZSBwYXRjaC4gKi8gIAorICAgIHVpbnQ2NF90IHNpemU7ICAgICAgICAgICAgICAgICAgICAg IC8qIElOLCBzaXplIG9mIHRoZSBFTEYgZmlsZS4gKi8gIAorICAgIFhFTl9HVUVTVF9IQU5ETEVf NjQodWludDgpIHBheWxvYWQ7IC8qIElOOiBFTEYgZmlsZS4gKi8gIAorfTsgIAorPC9wcmU+CisK KyMjIyBYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUICgxKQorCitSZXRyaWV2ZSBhbiBzdGF0dXMgb2Yg YW4gc3BlY2lmaWMgcGF5bG9hZC4gVGhpcyBjYWxsZXIgcHJvdmlkZXM6CisKKyAqIEEgYHN0cnVj dCB4ZW5feHNwbGljZV9uYW1lYCBjYWxsZWQgYG5hbWVgIHdoaWNoIGhhcyB0aGUgdW5pcXVlIG5h bWUuCisgKiBBIGBzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzYCBzdHJ1Y3R1cmUuIFRoZSBtZW1i ZXIgdmFsdWVzIHdpbGwKKyAgIGJlIG92ZXItd3JpdHRlbiB1cG9uIGNvbXBsZXRpb24uCisKK1Vw b24gY29tcGxldGlvbiB0aGUgYHN0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNgIGlzIHVwZGF0ZWQu CisKKyAqIGBzdGF0dXNgIC0gaW5kaWNhdGVzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcGF5 bG9hZDoKKyAgICogKlhTUExJQ0VfU1RBVFVTX0NIRUNLRUQqICAoMSkgbG9hZGVkIGFuZCB0aGUg RUxGIHBheWxvYWQgc2FmZXR5IGNoZWNrcyBwYXNzZWQuCisgICAqICpYU1BMSUNFX1NUQVRVU19B UFBMSUVEKiAoMikgbG9hZGVkLCBjaGVja2VkLCBhbmQgYXBwbGllZC4KKyAgICogIE5vIG90aGVy IHZhbHVlIGlzIHBvc3NpYmxlLgorICogYHJjYCAtIC1YRU5fRVhYIHR5cGUgZXJyb3JzIGVuY291 bnRlcmVkIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGxhc3QKKyAgIFhTUExJQ0VfQUNUSU9OXyogb3Bl cmF0aW9uLiBUaGUgbm9ybWFsIHZhbHVlcyBjYW4gYmUgemVybyBvciAtWEVOX0VBR0FJTiB3aGlj aAorICAgcmVzcGVjdGl2ZWx5IG1lYW46IHN1Y2Nlc3Mgb3Igb3BlcmF0aW9uIGluIHByb2dyZXNz LiBPdGhlciB2YWx1ZXMKKyAgIGltcGx5IGFuIGVycm9yIG9jY3VycmVkLiBJZiB0aGVyZSBpcyBh biBlcnJvciBpbiBgcmNgLCBgc3RhdHVzYCB3aWxsICoqTk9UKioKKyAgIGhhdmUgY2hhbmdlZC4K KworVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgaHlwZXJjYWxsIGlzIHplcm8gb24gc3VjY2VzcyBh bmQgLVhFTl9FWFggb24gZmFpbHVyZS4KKyhOb3RlIHRoYXQgdGhlIGByY2BgIHZhbHVlIGNhbiBi ZSBkaWZmZXJlbnQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlLCBhcyBpbgorcmM9LVhFTl9FQUdBSU4g YW5kIHJldHVybiB2YWx1ZSBjYW4gYmUgMCkuCisKK0ZvciBleGFtcGxlLCBzdXBwb3NpbmcgdGhl cmUgaXMgYW4gcGF5bG9hZDoKKworPHByZT4KKyBzdGF0dXM6IFhTUExJQ0VfU1RBVFVTX0NIRUNL RUQKKyByYzogMAorPC9wcmU+CisKK1dlIGFwcGx5IGFuIGFjdGlvbiAtIFhTUExJQ0VfQUNUSU9O X1JFVkVSVCAtIHRvIHJldmVydCBpdCAod2hpY2ggd29uJ3Qgd29yaworYXMgd2UgaGF2ZSBub3Qg ZXZlbiBhcHBsaWVkIGl0LiBBZnRlcndhcmRzIHdlIHdpbGwgaGF2ZToKKworPHByZT4KKyBzdGF0 dXM6IFhTUExJQ0VfU1RBVFVTX0NIRUNLRUQKKyByYzogLVhFTl9FSU5WQUwKKzwvcHJlPgorCitJ dCBoYXMgZmFpbGVkIGJ1dCBpdCByZW1haW5zIGxvYWRlZC4KKworVGhpcyBvcGVyYXRpb24gaXMg c3luY2hyb25vdXMgYW5kIGRvZXMgbm90IHJlcXVpcmUgcHJlZW1wdGlvbi4KKworVGhlIHN0cnVj dHVyZSBpcyBhcyBmb2xsb3c6CisKKzxwcmU+CitzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzIHsg IAorI2RlZmluZSBYU1BMSUNFX1NUQVRVU19DSEVDS0VEICAgICAgMSAgCisjZGVmaW5lIFhTUExJ Q0VfU1RBVFVTX0FQUExJRUQgICAgICAyICAKKyAgICB1aW50MzJfdCBzdGF0ZTsgICAgICAgICAg ICAgICAgIC8qIE9VVDogWFNQTElDRV9TVEFURV8qLiAqLyAgCisgICAgaW50MzJfdCByYzsgICAg ICAgICAgICAgICAgICAgICAvKiBPVVQ6IDAgaWYgbm8gZXJyb3IsIG90aGVyd2lzZSAtWEVOX0VY WC4gKi8gIAorfTsgIAorCitzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX2dldCB7ICAKKyAgICB4 ZW5feHNwbGljZV9uYW1lX3QgbmFtZTsgICAgICAgIC8qIElOLCB0aGUgbmFtZSBvZiB0aGUgcGF5 bG9hZC4gKi8gIAorICAgIHhlbl94c3BsaWNlX3N0YXR1c190IHN0YXR1czsgICAgLyogSU4vT1VU OiBzdGF0dXMgb2YgdGhlIHBheWxvYWQuICovICAKK307ICAKKzwvcHJlPgorCisjIyMgWEVOX1NZ U0NUTF9YU1BMSUNFX0xJU1QgKDIpCisKK1JldHJpZXZlIGFuIGFycmF5IG9mIGFiYnJldmlhdGVk IHN0YXR1cyBhbmQgbmFtZXMgb2YgcGF5bG9hZHMgdGhhdCBhcmUgbG9hZGVkIGluIHRoZQoraHlw ZXJ2aXNvci4KKworVGhlIGNhbGxlciBwcm92aWRlczoKKworICogYHZlcnNpb25gLiBWZXJzaW9u IG9mIHRoZSBwYXlsb2FkLiBDYWxsZXIgc2hvdWxkIHJlLXVzZSB0aGUgZmllbGQgcHJvdmlkZWQg YnkKKyAgICB0aGUgaHlwZXJ2aXNvci4gSWYgdGhlIHZhbHVlIGRpZmZlcnMgdGhlIGRhdGEgaXMg c3RhbGUuCisgKiBgaWR4YCBpbmRleCBpdGVyYXRvci4gVGhlIGluZGV4IGludG8gdGhlIGh5cGVy dmlzb3IncyBwYXlsb2FkIGNvdW50LiBJdCBpcworICAgIHJlY29tbWVuZGVkIHRoYXQgb24gZmly c3QgaW52b2NhdGlvbiB6ZXJvIGJlIHVzZWQgc28gdGhhdCBgbnJgICh3aGljaCB0aGUKKyAgICBo eXBlcnZpc29yIHdpbGwgdXBkYXRlIHdpdGggdGhlIHJlbWFpbmluZyBwYXlsb2FkIGNvdW50KSBi ZSBwcm92aWRlZC4KKyAgICBBbHNvIHRoZSBoeXBlcnZpc29yIHdpbGwgcHJvdmlkZSBgdmVyc2lv bmAgd2l0aCB0aGUgbW9zdCBjdXJyZW50IHZhbHVlLgorICogYG5yYCB0aGUgbWF4IG51bWJlciBv ZiBlbnRyaWVzIHRvIHBvcHVsYXRlLiBDYW4gYmUgemVybyB3aGljaCB3aWxsIHJlc3VsdAorICAg IGluIHRoZSBoeXBlcmNhbGwgYmVpbmcgYSBwcm9iaW5nIG9uZSBhbmQgcmV0dXJuIHRoZSBudW1i ZXIgb2YgcGF5bG9hZHMKKyAgICAoYW5kIHVwZGF0ZSB0aGUgYHZlcnNpb25gKS4KKyAqIGBwYWRg IC0gKk1VU1QqIGJlIHplcm8uCisgKiBgc3RhdHVzYCB2aXJ0dWFsIGFkZHJlc3Mgb2Ygd2hlcmUg dG8gd3JpdGUgYHN0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNgCisgICBzdHJ1Y3R1cmVzLiBDYWxs ZXIgKk1VU1QqIGFsbG9jYXRlIHVwIHRvIGBucmAgb2YgdGhlbS4KKyAqIGBuYW1lYCAtIHZpcnR1 YWwgYWRkcmVzcyBvZiB3aGVyZSB0byB3cml0ZSB0aGUgdW5pcXVlIG5hbWUgb2YgdGhlIHBheWxv YWQuCisgICBDYWxsZXIgKk1VU1QqIGFsbG9jYXRlIHVwIHRvIGBucmAgb2YgdGhlbS4gRWFjaCAq TVVTVCogYmUgb2YKKyAgICoqWEVOX1hTUExJQ0VfTkFNRV9TSVpFKiogc2l6ZS4gTm90ZSB0aGF0 ICoqWEVOX1hTUExJQ0VfTkFNRV9TSVpFKiogaW5jbHVkZXMKKyAgIHRoZSBOVUwgdGVybWluYXRv ci4KKyAqIGBsZW5gIC0gdmlydHVhbCBhZGRyZXNzIG9mIHdoZXJlIHRvIHdyaXRlIHRoZSBsZW5n dGggb2YgZWFjaCB1bmlxdWUgbmFtZQorICAgb2YgdGhlIHBheWxvYWQuIENhbGxlciAqTVVTVCog YWxsb2NhdGUgdXAgdG8gYG5yYCBvZiB0aGVtLiBFYWNoICpNVVNUKiBiZQorICAgb2Ygc2l6ZW9m KHVpbnQzMl90KSAoNCBieXRlcykuCisKK0lmIHRoZSBoeXBlcmNhbGwgcmV0dXJucyBhbiBwb3Np dGl2ZSBudW1iZXIsIGl0IGlzIHRoZSBudW1iZXIgKHVwdG8gYG5yYAorcHJvdmlkZWQgdG8gdGhl IGh5cGVyY2FsbCkgb2YgdGhlIHBheWxvYWRzIHJldHVybmVkLCBhbG9uZyB3aXRoIGBucmAgdXBk YXRlZAord2l0aCB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBwYXlsb2FkcywgYHZlcnNpb25gIHVw ZGF0ZWQgKGl0IG1heSBiZSB0aGUgc2FtZQorYWNyb3NzIGh5cGVyY2FsbHMgLSBpZiBpdCB2YXJp ZXMgdGhlIGRhdGEgaXMgc3RhbGUgYW5kIGZ1cnRoZXIgY2FsbHMgY291bGQKK2ZhaWwpLiBUaGUg YHN0YXR1c2AsIGBuYW1lYCwgYW5kIGBsZW5gJyBhcmUgdXBkYXRlZCBhdCB0aGVpciBkZXNpZ25l ZCBpbmRleAordmFsdWUgKGBpZHhgKSB3aXRoIHRoZSByZXR1cm5lZCB2YWx1ZSBvZiBkYXRhLgor CitJZiB0aGUgaHlwZXJjYWxsIHJldHVybnMgLVhFTl9FMkJJRyB0aGUgYG5yYCBpcyB0b28gYmln IGFuZCBzaG91bGQgYmUKK2xvd2VyZWQuCisKK0lmIHRoZSBoeXBlcmNhbGwgcmV0dXJucyBhbiB6 ZXJvIHZhbHVlIHRoZXJlIGFyZSBubyBtb3JlIHBheWxvYWRzLgorCitOb3RlIHRoYXQgZHVlIHRv IHRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIGh5cGVyY2FsbHMgdGhlIGNvbnRyb2wgZG9tYWlu IG1pZ2h0CitoYXZlIGFkZGVkIG9yIHJlbW92ZWQgYSBudW1iZXIgb2YgcGF5bG9hZHMgbWFraW5n IHRoaXMgaW5mb3JtYXRpb24gc3RhbGUuIEl0IGlzCit0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhl IHRvb2xzdGFjayB0byB1c2UgdGhlIGB2ZXJzaW9uYCBmaWVsZCB0byBjaGVjaworYmV0d2VlbiBl YWNoIGludm9jYXRpb24uIGlmIHRoZSB2ZXJzaW9uIGRpZmZlcnMgaXQgc2hvdWxkIGRpc2NhcmQg dGhlIHN0YWxlCitkYXRhIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2guIEl0IGlzIE9LIGZvciB0aGUg dG9vbHN0YWNrIHRvIHVzZSB0aGUgbmV3CitgdmVyc2lvbmAgZmllbGQuCisKK1RoZSBgc3RydWN0 IHhlbl94c3BsaWNlX3N0YXR1c2Agc3RydWN0dXJlIGNvbnRhaW5zIGFuIHN0YXR1cyBvZiBwYXls b2FkIHdoaWNoIGluY2x1ZGVzOgorCisgKiBgc3RhdHVzYCAtIGluZGljYXRlcyB0aGUgY3VycmVu dCBzdGF0dXMgb2YgdGhlIHBheWxvYWQ6CisgICAqICpYU1BMSUNFX1NUQVRVU19DSEVDS0VEKiAg KDEpIGxvYWRlZCBhbmQgdGhlIEVMRiBwYXlsb2FkIHNhZmV0eSBjaGVja3MgcGFzc2VkLgorICAg KiAqWFNQTElDRV9TVEFUVVNfQVBQTElFRCogKDIpIGxvYWRlZCwgY2hlY2tlZCwgYW5kIGFwcGxp ZWQuCisgICAqICBObyBvdGhlciB2YWx1ZSBpcyBwb3NzaWJsZS4KKyAqIGByY2AgLSAtWEVOX0VY WCB0eXBlIGVycm9ycyBlbmNvdW50ZXJlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBsYXN0CisgICBY U1BMSUNFX0FDVElPTl8qIG9wZXJhdGlvbi4gVGhlIG5vcm1hbCB2YWx1ZXMgY2FuIGJlIHplcm8g b3IgLVhFTl9FQUdBSU4gd2hpY2gKKyAgIHJlc3BlY3RpdmVseSBtZWFuOiBzdWNjZXNzIG9yIG9w ZXJhdGlvbiBpbiBwcm9ncmVzcy4gT3RoZXIgdmFsdWVzCisgICBpbXBseSBhbiBlcnJvciBvY2N1 cnJlZC4gSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYHJjYCwgYHN0YXR1c2Agd2lsbCAqKk5PVCoq CisgICBoYXZlIGNoYW5nZWQuCisKK1RoZSBzdHJ1Y3R1cmUgaXMgYXMgZm9sbG93OgorCis8cHJl Pgorc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9saXN0IHsgIAorICAgIHVpbnQzMl90IHZlcnNp b247ICAgICAgICAgICAgICAgICAgICAgICAvKiBPVVQ6IEh5cGVydmlzb3Igc3RhbXBzIHZhbHVl LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB2YXJp ZXMgYmV0d2VlbiBjYWxscywgd2UgYXJlICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0dGluZyBzdGFsZSBkYXRhLiAqLyAgCisgICAgdWludDMyX3Qg aWR4OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOOiBJbmRleCBpbnRvIGFycmF5LiAq LyAgCisgICAgdWludDMyX3QgbnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOOiBI b3cgbWFueSBzdGF0dXMsIG5hbWVzLCBhbmQgbGVuICAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGZpbGxlZCBvdXQuIENhbiBiZSB6ZXJv IHRvIGdldCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFtb3VudCBvZiBwYXlsb2FkcyBhbmQgdmVyc2lvbi4gIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQ6IEhvdyBtYW55IHBheWxvYWRzIGxlZnQuICov ICAKKyAgICB1aW50MzJfdCBwYWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU46IE11 c3QgYmUgemVyby4gKi8gIAorICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQoeGVuX3hzcGxpY2Vfc3Rh dHVzX3QpIHN0YXR1czsgIC8qIE9VVC4gTXVzdCBoYXZlIGVub3VnaCAgCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlIGFsbG9jYXRlIGZvciBuciBv ZiB0aGVtLiAqLyAgCisgICAgWEVOX0dVRVNUX0hBTkRMRV82NChjaGFyKSBpZDsgICAgICAgICAg IC8qIE9VVDogQXJyYXkgb2YgbmFtZXMuIEVhY2ggbWVtYmVyICAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVTVCBYRU5fWFNQTElDRV9OQU1FX1NJWkUg aW4gc2l6ZS4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNdXN0IGhhdmUgbnIgb2YgdGhlbS4gKi8gIAorICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQodWlu dDMyKSBsZW47ICAgICAgICAvKiBPVVQ6IEFycmF5IG9mIGxlbmd0aHMgb2YgbmFtZSdzLiAgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgaGF2ZSBu ciBvZiB0aGVtLiAqLyAgCit9OyAgCis8L3ByZT4KKworIyMjIFhFTl9TWVNDVExfWFNQTElDRV9B Q1RJT04gKDMpCisKK1BlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIHRoZSBwYXlsb2FkIHN0cnVjdHVy ZSByZWZlcmVuY2VkIGJ5IHRoZSBgbmFtZWAgZmllbGQuCitUaGUgb3BlcmF0aW9uIHJlcXVlc3Qg aXMgYXN5bmNocm9ub3VzIGFuZCB0aGUgc3RhdHVzIHNob3VsZCBiZSByZXRyaWV2ZWQKK2J5IHVz aW5nIGVpdGhlciAqKlhFTl9TWVNDVExfWFNQTElDRV9HRVQqKiBvciAqKlhFTl9TWVNDVExfWFNQ TElDRV9MSVNUKiogaHlwZXJjYWxsLgorCitUaGUgY2FsbGVyIHByb3ZpZGVzOgorCisgKiBBICdz dHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZWAgYG5hbWVgIGNvbnRhaW5pbmcgdGhlIHVuaXF1ZSBuYW1l LgorICogYGNtZGAgdGhlIGNvbW1hbmQgcmVxdWVzdGVkOgorICAqICpYU1BMSUNFX0FDVElPTl9D SEVDSyogKDEpIGNoZWNrIHRoYXQgdGhlIHBheWxvYWQgd2lsbCBhcHBseSBwcm9wZXJseS4KKyAg ICBUaGlzIGFsc28gdmVyZmllcyB0aGUgcGF5bG9hZCAtIHdoaWNoIG1heSByZXF1aXJlIFNlY3Vy ZUJvb3QgZmlybXdhcmUKKyAgICBjYWxscy4gVGhpcyBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBhbiBw YXlsb2FkIGlzIGluLgorICAqICpYU1BMSUNFX0FDVElPTl9VTkxPQUQqICgyKSB1bmxvYWQgdGhl IHBheWxvYWQuCisgICBBbnkgZnVydGhlciBoeXBlcmNhbGxzIGFnYWluc3QgdGhlIGBuYW1lYCB3 aWxsIHJlc3VsdCBpbiBmYWlsdXJlIHVubGVzcworICAgKipYRU5fU1lTQ1RMX1hTUExJQ0VfVVBM T0FEKiogaHlwZXJjYWxsIGlzIHBlcmZvbWVkIHdpdGggc2FtZSBgbmFtZWAuCisgICogKlhTUExJ Q0VfQUNUSU9OX1JFVkVSVCogKDMpIHJldmVydCB0aGUgcGF5bG9hZC4gSWYgdGhlIG9wZXJhdGlv biB0YWtlcworICBtb3JlIHRpbWUgdGhhbiB0aGUgdXBwZXIgYm91bmQgb2YgdGltZSB0aGUgYHJj YCBpbiBgeGVuX3hzcGxpY2Vfc3RhdHVzJworICByZXRyaWV2ZWQgdmlhICoqWEVOX1NZU0NUTF9Y U1BMSUNFX0dFVCoqIHdpbGwgYmUgLVhFTl9FQlVTWS4KKyAgKiAqWFNQTElDRV9BQ1RJT05fQVBQ TFkqICg0KSBhcHBseSB0aGUgcGF5bG9hZC4gSWYgdGhlIG9wZXJhdGlvbiB0YWtlcworICBtb3Jl IHRpbWUgdGhhbiB0aGUgdXBwZXIgYm91bmQgb2YgdGltZSB0aGUgYHJjYCBpbiBgeGVuX3hzcGxp Y2Vfc3RhdHVzJworICByZXRyaWV2ZWQgdmlhICoqWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCoqIHdp bGwgYmUgLVhFTl9FQlVTWS4KKyAgKiAqWFNQTElDRV9BQ1RJT05fUkVQTEFDRSogKDUpIHJldmVy dCBhbGwgYXBwbGllZCBwYXlsb2FkcyBhbmQgYXBwbHkgdGhpcworICBwYXlsb2FkLiBJZiB0aGUg b3BlcmF0aW9uIHRha2VzIG1vcmUgdGltZSB0aGFuIHRoZSB1cHBlciBib3VuZCBvZiB0aW1lCisg IHRoZSBgcmNgIGluIGB4ZW5feHNwbGljZV9zdGF0dXMnIHJldHJpZXZlZCB2aWEgKipYRU5fU1lT Q1RMX1hTUExJQ0VfR0VUKioKKyAgd2lsbCBiZSAtWEVOX0VCVVNZLgorICogYHRpbWVgIHRoZSB1 cHBlciBib3VuZCBvZiB0aW1lIChtcykgdGhlIGNtZCBzaG91bGQgdGFrZS4gWmVybyBtZWFucyBp bmZpbml0ZS4KKyAgIElmIHdpdGhpbiB0aGUgdGltZSB0aGUgb3BlcmF0aW9uIGRvZXMgbm90IHN1 Y2NlZWQgdGhlIG9wZXJhdGlvbiB3b3VsZCBnbyBpbgorICAgZXJyb3Igc3RhdGUuCisgKiBgcGFk YCAtICpNVVNUKiBiZSB6ZXJvLgorCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgemVybyB1bmxl c3MgdGhlIHByb3ZpZGVkIGZpZWxkcyBhcmUgaW5jb3JyZWN0LgorCitUaGUgc3RydWN0dXJlIGlz IGFzIGZvbGxvdzoKKworPHByZT4KKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fQ0hFQ0sgICAxICAK KyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fVU5MT0FEICAyICAKKyNkZWZpbmUgWFNQTElDRV9BQ1RJ T05fUkVWRVJUICAzICAKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fQVBQTFkgICA0ICAKKyNkZWZp bmUgWFNQTElDRV9BQ1RJT05fUkVQTEFDRSA1ICAKK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vf YWN0aW9uIHsgIAorICAgIHhlbl94c3BsaWNlX25hbWVfdCBuYW1lOyAgICAgICAgICAgICAgICAv KiBJTiwgbmFtZSBvZiB0aGUgcGF0Y2guICovICAKKyAgICB1aW50MzJfdCBjbWQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogSU46IFhTUExJQ0VfQUNUSU9OXyogKi8gIAorICAgIHVpbnQz Ml90IHRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTjogWmVybyBpZiBubyB0aW1l b3V0LiAqLyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPciB1cHBlciBib3VuZCBvZiB0aW1lIChtcykgKi8gICAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIG9wZXJhdGlvbiB0byB0YWtlLiAqLyAgCit9 OyAgCisKKzwvcHJlPgorCisjIyBTdGF0ZSBkaWFncmFtcyBvZiBYU1BMSUNFX0FDVElPTiBjb21t YW5kcy4KKworVGhlcmUgaXMgYSBzdHJpY3Qgb3JkZXJpbmcgc3RhdGUgb2Ygd2hhdCB0aGUgY29t bWFuZHMgY2FuIGJlLgorVGhlIFhTUExJQ0VfQUNUSU9OIHByZWZpeCBoYXMgYmVlbiBkcm9wcGVk IHRvIGVhc3kgcmVhZGluZyBhbmQKK2RvZXMgbm90IGluY2x1ZGUgdGhlIFhTUExJQ0VfU1RBVEVT OgorCis8cHJlPgorICAgICAgICAgICAgICAvLT5cICAKKyAgICAgICAgICAgICAgXCAgLyAgCisg VU5MT0FEIDwtLS0gQ0hFQ0sgLS0tPiBSRVBMQUNFfEFQUExZIC0tPiBSRVZFUlQgLS1cICAKKyAg ICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIAorICAg ICAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLTwtLS0tLS0tLS0tLS0tLyAgCisKKzwv cHJlPgorIyMgU3RhdGUgdHJhbnNpdGlvbiB0YWJsZSBvZiBYU1BMSUNFX0FDVElPTiBjb21tYW5k cyBhbmQgWFNQTElDRV9TVEFUVVMuCisKK05vdGUgdGhhdDoKKworIC0gVGhlIENIRUNLRUQgc3Rh dGUgaXMgdGhlIHN0YXJ0aW5nIG9uZSBhY2hpZXZlZCB3aXRoICpYRU5fU1lTQ1RMX1hTUExJQ0Vf VVBMT0FEKiBoeXBlcmNhbGwuCisgLSBUaGUgUkVWRVJUIG9wZXJhdGlvbiBvbiBzdWNjZXNzIHdp bGwgYXV0b21hdGljYWxseSBtb3ZlIHRvIHRoZSBDSEVDS0VEIHN0YXRlLgorIC0gVGhlcmUgYXJl IHR3byBTVEFURVM6IENIRUNLRUQgYW5kIEFQUExJRUQuCisgLSBUaGVyZSBhcmUgZml2ZSBhY3Rp b25zIChha2EgY29tbWFuZHMpOiBDSEVDSywgQVBQTFksIFJFUExBQ0UsIFJFVkVSVCwgYW5kIFVO TE9BRC4KKworVGhlIHN0YXRlIHRyYW5zaXRpb24gdGFibGUgb2YgdmFsaWQgc3RhdGVzIGFuZCBh Y3Rpb24gc3RhdGVzOgorCis8cHJlPgorCisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBBQ1RJT04gIHwgQ3Vy cmVudCB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICB8IE5leHQgU1RBVEU6ICAgIHwK K3wgQUNUSU9OICB8IFNUQVRFICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfENI RUNLRUR8QVBQTElFRCB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBDSEVDSyAgIHwgQ0hFQ0tFRCB8IENo ZWNrIHBheWxvYWQgKG9uY2UgbW9yZSwgbm8pICB8ICAgeCAgIHwgICAgICAgIHwKK3wgICAgICAg ICB8ICAgICAgICAgfCBlcnJvcnMpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICAg ICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBDSEVDSyAgIHwgQ0hFQ0tFRCB8IENoZWNrIHBheWxv YWQgKG9uY2UgbW9yZSwgd2l0aCB8ICAgICAgIHwgICAgICAgIHwKK3wgICAgICAgICB8ICAgICAg ICAgfCBlcnJvcnMpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICB8Cisr LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tKworfCBVTkxPQUQgIHwgQ0hFQ0tFRCB8IFVubG9hZCBwYXlsb2FkLiBBbHdh eXMgd29ya3MuICB8ICAgICAgIHwgICAgICAgIHwKK3wgICAgICAgICB8ICAgICAgICAgfCBObyBu ZXh0IHN0YXRlcy4gICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICB8CisrLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0tKworfCBBUFBMWSAgIHwgQ0hFQ0tFRCB8IEFwcGx5IHBheWxvYWQgKHN1Y2Nlc3MpLiAgICAg ICB8ICAgICAgIHwgICB4ICAgIHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IEFQUExZICAgfCBDSEVDS0VE IHwgQXBwbHkgcGF5bG9hZCAoZXJyb3J8dGltZW91dCkgIHwgICB4ICAgfCAgICAgICAgfAorKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0tLSsKK3wgUkVQTEFDRSB8IENIRUNLRUQgfCBSZXZlcnQgcGF5bG9hZHMgYW5kIGFw cGx5IG5ldyAgfCAgICAgICB8ICAgeCAgICB8Cit8ICAgICAgICAgfCAgICAgICAgIHwgcGF5bG9h ZCB3aXRoIHN1Y2Nlc3MuICAgICAgICAgIHwgICAgICAgfCAgICAgICAgfAorKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0t LSsKK3wgUkVQTEFDRSB8IENIRUNLRUQgfCBSZXZlcnQgcGF5bG9hZHMgYW5kIGFwcGx5IG5ldyAg fCAgIHggICB8ICAgICAgICB8Cit8ICAgICAgICAgfCAgICAgICAgIHwgcGF5bG9hZCB3aXRoIGVy cm9yLiAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgUkVW RVJUICB8IEFQUExJRUQgfCBSZXZlcnQgcGF5bG9hZCAoc3VjY2VzcykuICAgICAgfCAgIHggICB8 ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBSRVZFUlQgIHwgQVBQTElFRCB8IFJldmVydCBw YXlsb2FkIChlcnJvcnx0aW1lb3V0KSB8ICAgICAgIHwgICB4ICAgIHwKKystLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0r Cis8L3ByZT4KKworQWxsIHRoZSBvdGhlciBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaW52YWxpZC4K KworIyMgU2VxdWVuY2Ugb2YgZXZlbnRzLgorCitUaGUgbm9ybWFsIHNlcXVlbmNlIG9mIGV2ZW50 cyBpcyB0bzoKKworIDEuICpYRU5fU1lTQ1RMX1hTUExJQ0VfVVBMT0FEKiB0byB1cGxvYWQgdGhl IHBheWxvYWQuIElmIHRoZXJlIGFyZSBlcnJvcnMgKlNUT1AqIGhlcmUuCisgMi4gKlhFTl9TWVND VExfWFNQTElDRV9HRVQqIHRvIGNoZWNrIHRoZSBgLT5yY2AuIElmICotWEVOX0VBR0FJTiogc3Bp bi4gSWYgemVybyBnbyB0byBuZXh0IHN0ZXAuCisgMy4gKlhFTl9TWVNDVExfWFNQTElDRV9BQ1RJ T04qIHdpdGggKlhTUExJQ0VfQUNUSU9OX0FQUExZKiB0byBhcHBseSB0aGUgcGF0Y2guCisgNC4g KlhFTl9TWVNDVExfWFNQTElDRV9HRVQqIHRvIGNoZWNrIHRoZSBgLT5yY2AuIElmIGluICotWEVO X0VBR0FJTiogc3Bpbi4gSWYgemVybyBleGl0IHdpdGggc3VjY2Vzcy4KKworCisjIyBBZGRlbmR1 bQorCitJbXBsZW1lbnRhdGlvbiBxdWlya3Mgc2hvdWxkIG5vdCBiZSBkaXNjdXNzZWQgaW4gYSBk ZXNpZ24gZG9jdW1lbnQuCisKK0hvd2V2ZXIgdGhlc2Ugb2JzZXJ2YXRpb25zIGNhbiBwcm92aWRl IGFpZCB3aGVuIGRldmVsb3BpbmcgYWdhaW5zdCB0aGlzCitkb2N1bWVudC4KKworCisjIyMgQWx0 ZXJuYXRpdmUgYXNzZW1ibGVyCisKK0FsdGVybmF0aXZlIGFzc2VtYmxlciBpcyBhIG1lY2hhbmlz bSB0byB1c2UgZGlmZmVyZW50IGluc3RydWN0aW9ucyBkZXBlbmRpbmcKK29uIHdoYXQgdGhlIENQ VSBzdXBwb3J0cy4gVGhpcyBpcyBkb25lIGJ5IHByb3ZpZGluZyBtdWx0aXBsZSBzdHJlYW1zIG9m IGNvZGUKK3RoYXQgY2FuIGJlIHBhdGNoZWQgaW4gLSBvciBpZiB0aGUgQ1BVIGRvZXMgbm90IHN1 cHBvcnQgaXQgLSBwYWRkZWQgd2l0aAorYG5vcGAgb3BlcmF0aW9ucy4gVGhlIGFsdGVybmF0aXZl IGFzc2VtYmxlciBtYWNyb3MgY2F1c2UgdGhlIGNvbXBpbGVyIHRvCitleHBhbmQgdGhlIGNvZGUg dG8gcGxhY2UgYSBtb3N0IGdlbmVyaWMgY29kZSBpbiBwbGFjZSAtIGVtaXQgYSBzcGVjaWFsCitF TEYgLnNlY3Rpb24gaGVhZGVyIHRvIHRhZyB0aGlzIGxvY2F0aW9uLiBEdXJpbmcgcnVuLXRpbWUg dGhlIGh5cGVydmlzb3IKK2NhbiBsZWF2ZSB0aGUgYXJlYXMgYWxvbmUgb3IgcGF0Y2ggdGhlbSB3 aXRoIGFuIGJldHRlciBzdWl0ZWQgb3Bjb2Rlcy4KKworTm90ZSB0aGF0IHBhdGNoaW5nIGZ1bmN0 aW9ucyB0aGF0IGNvcHkgdG8gb3IgZnJvbSBndWVzdCBtZW1vcnkgcmVxdWlyZXMKK3RvIHN1cHBv cnQgYWx0ZXJuYXRpdmUgc3VwcG9ydC4gRm9yIGV4YW1wbGUgdGhpcyBjYW4gYmUgZHVlIHRvIFNN QVAKKyhzcGVjaWZpY2FsbHkgKnN0YWMqIGFuZCAqY2xhYyogb3BlcmF0aW9ucykgd2hpY2ggaXMg ZW5hYmxlZCBvbiBCcm9hZHdlbGwKK2FuZCBsYXRlciBhcmNoaXRlY3R1cmVzLiBJdCBtYXkgYmUg cmVsYXRlZCB0byBvdGhlciBhbHRlcm5hdGl2ZSBpbnN0cnVjdGlvbnMuCisKKyMjIyBXaGVuIHRv IHBhdGNoCisKK0R1cmluZyB0aGUgZGlzY3Vzc2lvbiBvbiB0aGUgZGVzaWduIHR3byBjYW5kaWRh dGVzIGJ1YmJsZWQgd2hlcmUKK3RoZSBjYWxsIHN0YWNrIGZvciBlYWNoIENQVSB3b3VsZCBiZSBk ZXRlcm1pbmlzdGljLiBUaGlzIHdvdWxkCittaW5pbWl6ZSB0aGUgY2hhbmNlIG9mIHRoZSBwYXRj aCBub3QgYmVpbmcgYXBwbGllZCBkdWUgdG8gc2FmZXR5CitjaGVja3MgZmFpbGluZy4gU2FmZXR5 IGNoZWNrcyBzdWNoIGFzIG5vdCBwYXRjaGluZyBjb2RlIHdoaWNoCitpcyBvbiB0aGUgc3RhY2sg LSB3aGljaCBjYW4gbGVhZCB0byBjb3JydXB0aW9uLgorCisjIyMjIFJlbmRlenZvdXMgY29kZSBp bnN0ZWFkIG9mIHN0b3BfbWFjaGluZSBmb3IgcGF0Y2hpbmcKKworVGhlIGh5cGVydmlzb3IncyB0 aW1lIHJlbmRlenZvdXMgY29kZSBydW5zIHN5bmNocm9ub3VzbHkgYWNyb3NzIGFsbCBDUFVzCitl dmVyeSBzZWNvbmQuIFVzaW5nIHRoZSBzdG9wX21hY2hpbmUgdG8gcGF0Y2ggY2FuIHN0YWxsIHRo ZSB0aW1lIHJlbmRlenZvdXMKK2NvZGUgYW5kIHJlc3VsdCBpbiBOTUkuIEFzIHN1Y2ggaGF2aW5n IHRoZSBwYXRjaGluZyBiZSBkb25lIGF0IHRoZSB0YWlsCitvZiByZW5kZXp2b3VzIGNvZGUgc2hv dWxkIGF2b2lkIHRoaXMgcHJvYmxlbS4KKworSG93ZXZlciB0aGUgZW50cmFuY2UgcG9pbnQgZm9y IHRoYXQgY29kZSBpcworZG9fc29mdGlycS0+dGltZXJfc29mdGlycV9hY3Rpb24tPnRpbWVfY2Fs aWJyYXRpb24KK3doaWNoIGVuZHMgdXAgY2FsbGluZyBvbl9zZWxlY3RlZF9jcHVzIG9uIHJlbW90 ZSBDUFVzLgorCitUaGUgcmVtb3RlIENQVXMgcmVjZWl2ZSBDQUxMX0ZVTkNUSU9OX1ZFQ1RPUiBJ UEkgYW5kIGV4ZWN1dGUgdGhlCitkZXNpcmVkIGZ1bmN0aW9uLgorCisjIyMjIEJlZm9yZSBlbnRl cmluZyB0aGUgZ3Vlc3QgY29kZS4KKworQmVmb3JlIHdlIGNhbGwgVk1YUmVzdW1lIHdlIGNoZWNr IHdoZXRoZXIgYW55IHNvZnQgSVJRcyBuZWVkIHRvIGJlIGV4ZWN1dGVkLgorVGhpcyBpcyBhIGdv b2Qgc3BvdCBiZWNhdXNlIGFsbCBYZW4gc3RhY2tzIGFyZSBlZmZlY3RpdmVseSBlbXB0eSBhdAor dGhhdCBwb2ludC4KKworVG8gcmFuZGV6dm91cyBhbGwgdGhlIENQVXMgYW4gYmFycmllciB3aXRo IGFuIG1heGltdW0gdGltZW91dCAod2hpY2gKK2NvdWxkIGJlIGFkanVzdGVkKSwgY29tYmluZWQg d2l0aCBmb3JjaW5nIGFsbCBvdGhlciBDUFVzIHRocm91Z2ggdGhlCitoeXBlcnZpc29yIHdpdGgg SVBJcywgY2FuIGJlIHV0aWxpemVkIHRvIGV4ZWN1dGUgbG9ja3N0ZXAgaW5zdHJ1Y3Rpb25zCitv biBhbGwgQ1BVcy4KKworVGhlIGFwcHJvYWNoIGlzIHNpbWlsYXIgaW4gY29uY2VwdCB0byBzdG9w X21hY2hpbmUgYW5kIHRoZSB0aW1lIHJlbmRlenZvdXMKK2J1dCBpcyB0aW1lLWJvdW5kLiBIb3dl dmVyIHRoZSBsb2NhbCBDUFUgc3RhY2sgaXMgbXVjaCBzaG9ydGVyIGFuZAorYSBsb3QgbW9yZSBk ZXRlcm1pbmlzdGljLgorCitUaGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBYZW4gUHJvamVjdCBo eXBlcnZpc29yLgorCisjIyMgQ29tcGlsaW5nIHRoZSBoeXBlcnZpc29yIGNvZGUKKworSG90cGF0 Y2ggZ2VuZXJhdGlvbiBvZnRlbiByZXF1aXJlcyBzdXBwb3J0IGZvciBjb21waWxpbmcgdGhlIHRh cmdldAord2l0aCAtZmZ1bmN0aW9uLXNlY3Rpb25zIC8gLWZkYXRhLXNlY3Rpb25zLiAgQ2hhbmdl cyB3b3VsZCBoYXZlIHRvCitiZSBkb25lIHRvIHRoZSBsaW5rZXIgc2NyaXB0cyB0byBzdXBwb3J0 IHRoaXMuCisKKyMjIyBHZW5lcmF0aW9uIG9mIHhTcGxpY2UgRUxGIHBheWxvYWRzCisKK1RoZSBk ZXNpZ24gb2YgdGhhdCBpcyBub3QgZGlzY3Vzc2VkIGluIHRoaXMgZGVzaWduLgorCitUaGlzIGlz IGltcGxlbWVudGVkIGluIGEgc2VwZXJhdGUgdG9vbCB3aGljaCBsaXZlcyBpbiBhIHNlcGVyYXRl CitHSVQgcmVwby4KKworQ3VycmVudGx5IGl0IHJlc2lkZXMgYXQgaHR0cHM6Ly9naXRodWIuY29t L3Jvc3NsYWdlcndhbGwveHNwbGljZS1idWlsZAorCisjIyMgRXhjZXB0aW9uIHRhYmxlcyBhbmQg c3ltYm9sIHRhYmxlcyBncm93dGgKKworV2UgbWF5IG5lZWQgc3VwcG9ydCBmb3IgYWRhcHRpbmcg b3IgYXVnbWVudGluZyBleGNlcHRpb24gdGFibGVzIGlmCitwYXRjaGluZyBzdWNoIGNvZGUuICBI b3RwYXRjaGVzIG1heSBuZWVkIHRvIGJyaW5nIHRoZWlyIG93biBzbWFsbAorZXhjZXB0aW9uIHRh YmxlcyAoc2ltaWxhciB0byBob3cgTGludXggbW9kdWxlcyBzdXBwb3J0IHRoaXMpLgorCitJZiBz dXBwb3J0aW5nIGhvdHBhdGNoZXMgdGhhdCBpbnRyb2R1Y2UgYWRkaXRpb25hbCBleGNlcHRpb24t bG9jYXRpb25zCitpcyBub3QgaW1wb3J0YW50LCBvbmUgY291bGQgYWxzbyBjaGFuZ2UgdGhlIGV4 Y2VwdGlvbiB0YWJsZSBpbi1wbGFjZQorYW5kIHJlb3JkZXIgaXQgYWZ0ZXJ3YXJkcy4KKworQXMg Zm91bmQgYWxtb3N0IGV2ZXJ5IHBhdGNoIChYU0EpIHRvIGEgbm9uLXRyaXZpYWwgZnVuY3Rpb24g cmVxdWlyZXMKK2FkZGl0aW9uYWwgZW50cmllcyBpbiB0aGUgZXhjZXB0aW9uIHRhYmxlIGFuZC9v ciB0aGUgYnVnIGZyYW1lcy4KKworVGhpcyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgWGVuIFByb2pl Y3QgaHlwZXJ2aXNvci4KKworIyMjIC5yb2RhdGEgc2VjdGlvbnMKKworVGhlIHBhdGNoaW5nIG1p Z2h0IHJlcXVpcmUgc3RyaW5ncyB0byBiZSB1cGRhdGVkIGFzIHdlbGwuIEFzIHN1Y2ggd2UgbXVz dCBiZQorYWxzbyBhYmxlIHRvIHBhdGNoIHRoZSBzdHJpbmdzIGFzIG5lZWRlZC4gVGhpcyBzb3Vu ZHMgc2ltcGxlIC0gYnV0IHRoZSBjb21waWxlcgoraGFzIGEgaGFiaXQgb2YgY29hbGVzY2luZyBz dHJpbmdzIHRoYXQgYXJlIHRoZSBzYW1lIC0gd2hpY2ggbWVhbnMgaWYgd2UgaW4tcGxhY2UKK2Fs dGVyIHRoZSBzdHJpbmdzIC0gb3RoZXIgdXNlcnMgd2lsbCBiZSBpbmFkdmVydGVudGx5IGFmZmVj dGVkIGFzIHdlbGwuCisKK1RoaXMgaXMgYWxzbyB3aGVyZSBwb2ludGVycyB0byBmdW5jdGlvbnMg bGl2ZSAtIGFuZCB3ZSBtYXkgbmVlZCB0byBwYXRjaCB0aGlzCithcyB3ZWxsLiBBbmQgc3dpdGNo LXN0eWxlIGp1bXAgdGFibGVzLgorCitUbyBndWFyZCBhZ2FpbnN0IHRoYXQgd2UgbXVzdCBiZSBw cmVwYXJlZCB0byBkbyBwYXRjaGluZyBzaW1pbGFyIHRvCit0cmFtcG9saW5lIHBhdGNoaW5nIG9y IGluLWxpbmUgZGVwZW5kaW5nIG9uIHRoZSBmbGF2b3VyLiBJZiB3ZSBjYW4KK2RvIGluLWxpbmUg cGF0Y2hpbmcgd2Ugd291bGQgbmVlZCB0bzoKKworICogYWx0ZXIgYC5yb2RhdGFgIHRvIGJlIHdy aXRlYWJsZS4KKyAqIGlubGluZSBwYXRjaC4KKyAqIGFsdGVyIGAucm9kYXRhYCB0byBiZSByZWFk LW9ubHkuCisKK0lmIGFyZSBkb2luZyB0cmFtcG9saW5lIHBhdGNoaW5nIHdlIHdvdWxkIG5lZWQg dG86CisKKyAqIGFsbG9jYXRlIGEgbmV3IG1lbW9yeSBsb2NhdGlvbiBmb3IgdGhlIHN0cmluZy4K KyAqIGFsbCBsb2NhdGlvbnMgd2hpY2ggdXNlIHRoaXMgc3RyaW5nIHdpbGwgaGF2ZSB0byBiZSB1 cGRhdGVkIHRvIHVzZSB0aGUKKyAgIG9mZnNldCB0byB0aGUgc3RyaW5nLgorICogbWFyayB0aGUg cmVnaW9uIFJPIHdoZW4gd2UgYXJlIGRvbmUuCisKK1RoZSB0cmFtcG9saW5lIHBhdGNoaW5nIGlz IGltcGxlbWVudGVkIGluIHRoZSBYZW4gUHJvamVjdCBoeXBlcnZpc29yLgorCisjIyMgLmJzcyBh bmQgLmRhdGEgc2VjdGlvbnMuCisKK0luIHBsYWNlIHBhdGNoaW5nIHdyaXRhYmxlIGRhdGEgaXMg bm90IHN1aXRhYmxlIGFzIGl0IGlzIHVuY2xlYXIgd2hhdCBzaG91bGQgYmUgZG9uZQorZGVwZW5k aW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGRhdGEuIEFzIHN1Y2ggaXQgc2hvdWxkIG5vdCBi ZSBhdHRlbXB0ZWQuCisKK0hvd2V2ZXIsIGZ1bmN0aW9ucyB3aGljaCBhcmUgYmVpbmcgcGF0Y2hl ZCBjYW4gYnJpbmcgaW4gY2hhbmdlcyB0byBzdHJpbmdzCisoLmRhdGEgb3IgLnJvZGF0YSBzZWN0 aW9uIGNoYW5nZXMpLCBvciBldmVuIHRvIC5ic3Mgc2VjdGlvbnMuCisKK0FzIHN1Y2ggdGhlIEVM RiBwYXlsb2FkIGNhbiBpbnRyb2R1Y2UgbmV3IC5yb2RhdGEsIC5ic3MsIGFuZCAuZGF0YSBzZWN0 aW9ucy4KK1BhdGNoaW5nIGluIHRoZSBuZXcgZnVuY3Rpb24gd2lsbCBlbmQgdXAgYWxzbyBwYXRj aGluZyBpbiB0aGUgbmV3IC5yb2RhdGEKK3NlY3Rpb24gYW5kIHRoZSBuZXcgZnVuY3Rpb24gd2ls bCByZWZlcmVuY2UgdGhlIG5ldyBzdHJpbmcgaW4gdGhlIG5ldworLnJvZGF0YSBzZWN0aW9uLgor CitUaGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBYZW4gUHJvamVjdCBoeXBlcnZpc29yLgorCisj IyMgU2VjdXJpdHkKKworT25seSB0aGUgcHJpdmlsZWdlZCBkb21haW4gc2hvdWxkIGJlIGFsbG93 ZWQgdG8gZG8gdGhpcyBvcGVyYXRpb24uCisKKworIyBOb3QgWWV0IERvbmUKKworVGhpcyBpcyBm b3IgZnVydGhlciBkZXZlbG9wbWVudCBvZiB4U3BsaWNlLgorCisjIyBHb2FscworCitUaGUgaW1w bGVtZW50YXRpb24gbXVzdCBhbHNvIGhhdmUgYSBtZWNoYW5pc20gZm9yOgorCisgKiAgQW4gZGVw ZW5kZW5jeSBtZWNoYW5pc20gZm9yIHRoZSBwYXlsb2Fkcy4gVG8gdXNlIHRoYXQgaW5mb3JtYXRp b24gdG8gbG9hZDoKKyAgICAtIFRoZSBhcHByb3BpYXRlIHBheWxvYWQuIFRvIHZlcmlmeSB0aGF0 IHBheWxvYWQgaXMgYnVpbHQgYWdhaW5zdCB0aGUKKyAgICAgIGh5cGVydmlzb3IuIFRoaXMgY2Fu IGJlIGRvbmUgdmlhIHRoZSBgYnVpbGQtaWRgCisgICAgICBvciB2aWEgcHJvdmlkaW5nIGFuIGNv cHkgb2YgdGhlIG9sZCBjb2RlIC0gc28gdGhhdCB0aGUgaHlwZXJ2aXNvciBjYW4KKyAgICAgICB2 ZXJpZnkgaXQgYWdhaW5zdCB0aGUgY29kZSBpbiBtZW1vcnkuCisgICAgLSBUbyBjb25zdHJ1Y3Qg YW4gYXBwcm9waWF0ZSBvcmRlciBvZiBwYXlsb2FkcyB0byBsb2FkIGluIGNhc2UgdGhleQorICAg ICAgZGVwZW5kIG9uIGVhY2ggb3RoZXIuCisgKiBCZSBhYmxlIHRvIGxvb2t1cCBpbiB0aGUgWGVu IGh5cGVydmlzb3IgdGhlIHN5bWJvbCBuYW1lcyBvZiBmdW5jdGlvbnMgZnJvbSB0aGUgRUxGIHBh eWxvYWQuCisgKiBCZSBhYmxlIHRvIHBhdGNoIC5yb2RhdGEsIC5ic3MsIGFuZCAuZGF0YSBzZWN0 aW9ucy4KKyAqIEZ1cnRoZXIgc2FmZXR5IGNoZWNrcyAoYmxhY2tsaXN0IG9mIHdoaWNoIGZ1bmN0 aW9ucyBjYW5ub3QgYmUgcGF0Y2hlZCwgY2hlY2sKKyAgIHRoZSBzdGFjaywgbWFrZSBzdXJlIHRo ZSBwYXlsb2FkIGlzIGJ1aWx0IHdpdGggc2FtZSBjb21waWxlciBhcyBoeXBlcnZpc29yKS4KKyAq IE5PUCBvdXQgdGhlIGNvZGUgc2VxdWVuY2UgaWYgYG5ld19zaXplYCBpcyB6ZXJvLgorICogRGVh bCB3aXRoIG90aGVyIHJlbG9jYXRpb24gdHlwZXM6ICBSX1g4Nl82NF9bOCwxNiwzMiwzMlNdLCBS X1g4Nl82NF9QQ1s4LDE2LDY0XSBpbiBwYXlsb2FkIGZpbGUuCisKKyMjIyB4U3BsaWNlIGludGVy ZGVwZW5kZW5jaWVzCisKK3hTcGxpY2UgcGF0Y2hlcyBpbnRlcmRlcGVuZGVuY2llcyBhcmUgdHJp Y2t5LgorCitUaGVyZSBhcmUgdGhlIHdheXMgdGhpcyBjYW4gYmUgYWRkcmVzc2VkOgorICogQSBz aW5nbGUgbGFyZ2UgcGF0Y2ggdGhhdCBzdWJzdW1lcyBhbmQgcmVwbGFjZXMgYWxsIHByZXZpb3Vz IG9uZXMuCisgICBPdmVyIHRoZSBsaWZlLXRpbWUgb2YgcGF0Y2hpbmcgdGhlIGh5cGVydmlzb3Ig dGhpcyBsYXJnZSBwYXRjaAorICAgZ3Jvd3MgdG8gYWNjdW11bGF0ZSBhbGwgdGhlIGNvZGUgY2hh bmdlcy4KKyAqIEhvdHBhdGNoIHN0YWNrIC0gd2hlcmUgYW4gbWVjaGFuaXNtIGV4aXN0cyB0aGF0 IGxvYWRzIHRoZSBob3RwYXRjaGVzCisgICBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgYnVp bHQgaW4uIFdlIHdvdWxkIG5lZWQgYW4gYnVpbGQtaWQKKyAgIG9mIHRoZSBoeXBldmlzb3IgdG8g bWFrZSBzdXJlIHRoZSBob3QtcGF0Y2hlcyBhcmUgYnVpbGQgYWdhaW5zdCB0aGUKKyAgIGNvcnJl Y3QgYnVpbGQuCisgKiBQYXlsb2FkIGNvbnRhaW5pbmcgdGhlIG9sZCBjb2RlIHRvIGNoZWNrIGFn YWluc3QgdGhhdC4gVGhhdCBhbGxvd3MKKyAgIHRoZSBob3RwYXRjaGVzIHRvIGJlIGxvYWRlZCBp bmRlcGVkZW50bHkgKGlmIHRoZXkgZG9uJ3Qgb3ZlcmxhcCkgLSBvcgorICAgaWYgdGhlIG9sZCBj b2RlIGFsc28gY29udGFpbnN0IHByZXZpb3VzbHkgcGF0Y2hlZCBjb2RlIC0gZXZlbiBpZiB0aGV5 CisgICBvdmVybGFwLgorCitUaGUgZGlzYWR2YW50YWdlIG9mIHRoZSBmaXJzdCBsYXJnZSBwYXRj aCBpcyB0aGF0IGl0IGNhbiBncm93IG92ZXIKK3RpbWUgYW5kIG5vdCBwcm92aWRlIGFuIGJpc2Vj dGlvbiBtZWNoYW5pc20gdG8gaWRlbnRpZnkgZmF1bHR5IHBhdGNoZXMuCisKK1RoZSBob3QtcGF0 Y2ggc3RhY2sgcHV0cyBzdHJpY3RzIHJlcXVpcmVtZW50cyBvbiB0aGUgb3JkZXIgb2YgdGhlIHBh dGNoZXMKK2JlaW5nIGxvYWRlZCBhbmQgcmVxdWlyZXMgYW4gaHlwZXJ2aXNvciBidWlsZC1pZCB0 byBtYXRjaCBhZ2FpbnN0LgorCitUaGUgb2xkIGNvZGUgYWxsb3dzIG11Y2ggbW9yZSBmbGV4aWJp bGl0eSBhbmQgYW4gYWRkaXRpb25hbCBndWFyZCwKK2J1dCBpcyBtb3JlIGNvbXBsZXggdG8gaW1w bGVtZW50LgorCisjIyMgSGFuZGxlIGlubGluZWQgX19MSU5FX18KKworVGhpcyBwcm9ibGVtIGlz IHJlbGF0ZWQgdG8gaG90cGF0Y2ggY29uc3RydWN0aW9uCithbmQgcG90ZW50aWFsbHkgaGFzIGlu Zmx1ZW5jZSBvbiB0aGUgZGVzaWduIG9mIHRoZSBob3RwYXRjaGluZworaW5mcmFzdHJ1Y3R1cmUg aW4gWGVuLgorCitGb3IgZXhhbXBsZToKKworV2UgaGF2ZSBmaWxlMS5jIHdpdGggZnVuY3Rpb25z IGYxIGFuZCBmMiAoaW4gdGhhdCBvcmRlcikuICBmMiBjb250YWlucyBhCitCVUcoKSAob3IgV0FS TigpKSBtYWNybyBhbmQgYXQgdGhhdCBwb2ludCBlbWJlZHMgdGhlIHNvdXJjZSBsaW5lIG51bWJl cgoraW50byB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIGYyLgorCitOb3cgd2Ugd2FudCB0byBob3Rw YXRjaCBmMSBhbmQgdGhlIGhvdHBhdGNoIHNvdXJjZS1jb2RlIHBhdGNoIGFkZHMgMgorbGluZXMg dG8gZjEgYW5kIGFzIGEgY29uc2VxdWVuY2Ugc2hpZnRzIG91dCBmMiBieSB0d28gbGluZXMuICBU aGUgbmV3bHkKK2NvbnN0cnVjdGVkIGZpbGUxLm8gd2lsbCBub3cgY29udGFpbiBkaWZmZXJlbmNl cyBpbiBib3RoIGJpbmFyeQorZnVuY3Rpb25zIGYxIChiZWNhdXNlIHdlIGFjdHVhbGx5IGNoYW5n ZWQgaXQgd2l0aCB0aGUgYXBwbGllZCBwYXRjaCkgYW5kCitmMiAoYmVjYXVzZSB0aGUgY29udGFp bmVkIEJVRyBtYWNybyBlbWJlZHMgdGhlIG5ldyBsaW5lIG51bWJlcikuCisKK1dpdGhvdXQgYWRk aXRpb25hbCBpbmZvcm1hdGlvbiwgYW4gYWxnb3JpdGhtIGNvbXBhcmluZyBmaWxlMS5vIGJlZm9y ZQorYW5kIGFmdGVyIGhvdHBhdGNoIGFwcGxpY2F0aW9uIHdpbGwgZGV0ZXJtaW5lIGJvdGggZnVu Y3Rpb25zIHRvIGJlCitjaGFuZ2VkIGFuZCB3aWxsIGhhdmUgdG8gaW5jbHVkZSBib3RoIGludG8g dGhlIGJpbmFyeSBob3RwYXRjaC4KKworT3B0aW9uczoKKworMS4gVHJhbnNmb3JtIHNvdXJjZSBj b2RlIHBhdGNoZXMgZm9yIGhvdHBhdGNoZXMgdG8gYmUgbGluZS1uZXV0cmFsIGZvcgorICAgZWFj aCBjaHVuay4gIFRoaXMgY2FuIGJlIGRvbmUgaW4gYWxtb3N0IGFsbCBjYXNlcyB3aXRoIGVpdGhl cgorICAgcmVmb3JtYXR0aW5nIG9mIHRoZSBzb3VyY2UgY29kZSBvciBieSBpbnRyb2R1Y2luZyBh cnRpZmljaWFsCisgICBwcmVwcm9jZXNzb3IgIiNsaW5lIG4iIGRpcmVjdGl2ZXMgdG8gYWRqdXN0 IGZvciB0aGUgaW50cm9kdWNlZAorICAgZGlmZmVyZW5jZXMuCisKKyAgIFRoaXMgYXBwcm9hY2gg aXMgbG93LXRlY2ggYW5kIHNpbXBsZS4gIFBvdGVudGlhbGx5IGdlbmVyYXRlZAorICAgYmFja3Ry YWNlcyBhbmQgZXhpc3RpbmcgZGVidWcgaW5mb3JtYXRpb24gcmVmZXJzIHRvIHRoZSBvcmlnaW5h bAorICAgYnVpbGQgYW5kIGRvZXMgbm90IHJlZmxlY3QgaG90cGF0Y2hpbmcgc3RhdGUgZXhjZXB0 IGZvciBhY3R1YWxseQorICAgaG90cGF0Y2hlZCBmdW5jdGlvbnMgYnV0IHNob3VsZCBiZSBtb3N0 bHkgY29ycmVjdC4KKworMi4gSWdub3JpbmcgdGhlIHByb2JsZW0gYW5kIGxpdmluZyB3aXRoIGFy dGlmaWNpYWxseSBsYXJnZSBob3RwYXRjaGVzCisgICB0aGF0IHVubmVjZXNzYXJpbHkgcGF0Y2gg bWFueSBmdW5jdGlvbnMuCisKKyAgIFRoaXMgYXBwcm9hY2ggbWlnaHQgbGVhZCB0byBzb21lIHZl cnkgbGFyZ2UgaG90cGF0Y2hlcyBkZXBlbmRpbmcgb24KKyAgIGNvbnRlbnQgb2Ygc3BlY2lmaWMg c291cmNlIGZpbGUuICBJdCBtYXkgYWxzbyB0cmlnZ2VyIHB1bGxpbmcgaW4KKyAgIGZ1bmN0aW9u cyBpbnRvIHRoZSBob3RwYXRjaCB0aGF0IGNhbm5vdCByZWFzb25hYmxlIGJlIGhvdHBhdGNoZWQg ZHVlCisgICB0byBsaW1pdGF0aW9ucyBvZiBhIGhvdHBhdGNoaW5nIGZyYW1ld29yayAoaW5pdC1z ZWN0aW9ucywgcGFydHMgb2YKKyAgIHRoZSBob3RwYXRjaGluZyBmcmFtZXdvcmsgaXRzZWxmLCAu Li4pIGFuZCBtYXkgdGhlcmVieSBwcmV2ZW50IHVzCisgICBmcm9tIHBhdGNoaW5nIGEgc3BlY2lm aWMgcHJvYmxlbS4KKworICAgVGhlIGRlY2lzaW9uIGJldHdlZW4gMS4gYW5kIDIuIGNhbiBiZSBt YWRlIG9uIGEgcGF0Y2gtLWJ5LXBhdGNoCisgICBiYXNpcy4KKworMy4gSW50cm9kdWNpbmcgYW4g aW5kaXJlY3Rpb24gdGFibGUgZm9yIHN0b3JpbmcgbGluZSBudW1iZXJzIGFuZAorICAgdHJlYXRp bmcgdGhhdCBzcGVjaWFsbHkgZm9yIGJpbmFyeSBkaWZmaW5nLiBMaW51eCBtYXkgZm9sbG93Cisg ICB0aGlzIGFwcHJvYWNoLgorCisgICBXZSBtaWdodCBlaXRoZXIgdXNlIHRoaXMgaW5kaXJlY3Rp b24gdGFibGUgZm9yIHJ1bnRpbWUgdXNlIGFuZCBwYXRjaAorICAgdGhhdCB3aXRoIGVhY2ggaG90 cGF0Y2ggKHNpbWlsYXJseSB0byBleGNlcHRpb24gdGFibGVzKSBvciB3ZSBtaWdodAorICAgcHVy ZWx5IHVzZSBpdCB3aGVuIGJ1aWxkaW5nIGhvdHBhdGNoZXMgdG8gaWdub3JlIGZ1bmN0aW9ucyB0 aGF0IG9ubHkKKyAgIGRpZmZlciBhdCBleGFjdGx5IHRoZSBsb2NhdGlvbiB3aGVyZSBhIGxpbmUt bnVtYmVyIGlzIGVtYmVkZGVkLgorCitGb3IgQlVHKCksIFdBUk4oKSwgZXRjLiwgdGhlIGxpbmUg bnVtYmVyIGlzIGVtYmVkZGVkIGludG8gdGhlIGJ1ZyBmcmFtZSwgbm90Cit0aGUgZnVuY3Rpb24g aXRzZWxmLgorCitTaW1pbGFyIGNvbnNpZGVyYXRpb25zIGFyZSB0cnVlIHRvIGEgbGVzc2VyIGV4 dGVudCBmb3IgX19GSUxFX18sIGJ1dCBpdAorY291bGQgYmUgYXJndWVkIHRoYXQgZmlsZSByZW5h bWluZyBzaG91bGQgYmUgZG9uZSBvdXRzaWRlIG9mIGhvdHBhdGNoZXMuCisKKyMjIFNpZ25hdHVy ZSBjaGVja2luZyByZXF1aXJlbWVudHMuCisKK1RoZSBzaWduYXR1cmUgY2hlY2tpbmcgcmVxdWly ZXMgdGhhdCB0aGUgbGF5b3V0IG9mIHRoZSBkYXRhIGluIG1lbW9yeQorKipNVVNUKiogYmUgc2Ft ZSBmb3Igc2lnbmF0dXJlIHRvIGJlIHZlcmlmaWVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHBheWxv YWQKK2RhdGEgbGF5b3V0IGluIEVMRiBmb3JtYXQgKipNVVNUKiogbWF0Y2ggd2hhdCB0aGUgaHlw ZXJ2aXNvciB3b3VsZCBiZQorZXhwZWN0aW5nIHN1Y2ggdGhhdCBpdCBjYW4gcHJvcGVybHkgZG8g c2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4KKworVGhlIHNpZ25hdHVyZSBpcyBiYXNlZCBvbiB0aGUg YWxsIG9mIHRoZSBwYXlsb2FkcyBjb250aW51b3VzbHkgbGFpZCBvdXQKK2luIG1lbW9yeS4gVGhl IHNpZ25hdHVyZSBpcyB0byBiZSBhcHBlbmRlZCBhdCB0aGUgZW5kIG9mIHRoZSBFTEYgcGF5bG9h ZAorcHJlZml4ZWQgd2l0aCB0aGUgc3RyaW5nICd+TW9kdWxlIHNpZ25hdHVyZSBhcHBlbmRlZH5c bicsIGZvbGxvd2VkIGJ5CithbiBzaWduYXR1cmUgaGVhZGVyIHRoZW4gZm9sbG93ZWQgYnkgdGhl IHNpZ25hdHVyZSwga2V5IGlkZW50aWZpZXIsIGFuZCBzaWduZXJzCituYW1lLgorCitTcGVjaWZp Y2FsbHkgdGhlIHNpZ25hdHVyZSBoZWFkZXIgd291bGQgYmU6CisKKzxwcmU+CisjZGVmaW5lIFBL RVlfQUxHT19EU0EgICAgICAgMCAgCisjZGVmaW5lIFBLRVlfQUxHT19SU0EgICAgICAgMSAgCisK KyNkZWZpbmUgUEtFWV9JRF9QR1AgICAgICAgICAwIC8qIE9wZW5QR1AgZ2VuZXJhdGVkIGtleSBJ RCAqLyAgCisjZGVmaW5lIFBLRVlfSURfWDUwOSAgICAgICAgMSAvKiBYLjUwOSBhcmJpdHJhcnkg c3ViamVjdEtleUlkZW50aWZpZXIgKi8gIAorCisjZGVmaW5lIEhBU0hfQUxHT19NRDQgICAgICAg ICAgMCAgCisjZGVmaW5lIEhBU0hfQUxHT19NRDUgICAgICAgICAgMSAgCisjZGVmaW5lIEhBU0hf QUxHT19TSEExICAgICAgICAgMiAgCisjZGVmaW5lIEhBU0hfQUxHT19SSVBFX01EXzE2MCAgMyAg CisjZGVmaW5lIEhBU0hfQUxHT19TSEEyNTYgICAgICAgNCAgCisjZGVmaW5lIEhBU0hfQUxHT19T SEEzODQgICAgICAgNSAgCisjZGVmaW5lIEhBU0hfQUxHT19TSEE1MTIgICAgICAgNiAgCisjZGVm aW5lIEhBU0hfQUxHT19TSEEyMjQgICAgICAgNyAgCisjZGVmaW5lIEhBU0hfQUxHT19SSVBFX01E XzEyOCAgOCAgCisjZGVmaW5lIEhBU0hfQUxHT19SSVBFX01EXzI1NiAgOSAgCisjZGVmaW5lIEhB U0hfQUxHT19SSVBFX01EXzMyMCAxMCAgCisjZGVmaW5lIEhBU0hfQUxHT19XUF8yNTYgICAgICAx MSAgCisjZGVmaW5lIEhBU0hfQUxHT19XUF8zODQgICAgICAxMiAgCisjZGVmaW5lIEhBU0hfQUxH T19XUF81MTIgICAgICAxMyAgCisjZGVmaW5lIEhBU0hfQUxHT19UR1JfMTI4ICAgICAxNCAgCisj ZGVmaW5lIEhBU0hfQUxHT19UR1JfMTYwICAgICAxNSAgCisjZGVmaW5lIEhBU0hfQUxHT19UR1Jf MTkyICAgICAxNiAgCisKKworc3RydWN0IGVsZl9wYXlsb2FkX3NpZ25hdHVyZSB7ICAKKwl1OAlh bGdvOwkJLyogUHVibGljLWtleSBjcnlwdG8gYWxnb3JpdGhtIFBLRVlfQUxHT18qLiAqLyAgCisJ dTgJaGFzaDsJCS8qIERpZ2VzdCBhbGdvcml0aG06IEhBU0hfQUxHT18qLiAqLyAgCisJdTgJaWRf dHlwZTsJLyogS2V5IGlkZW50aWZpZXIgdHlwZSBQS0VZX0lEKi4gKi8gIAorCXU4CXNpZ25lcl9s ZW47CS8qIExlbmd0aCBvZiBzaWduZXIncyBuYW1lICovICAKKwl1OAlrZXlfaWRfbGVuOwkvKiBM ZW5ndGggb2Yga2V5IGlkZW50aWZpZXIgKi8gIAorCXU4CV9fcGFkWzNdOyAgCisJX19iZTMyCXNp Z19sZW47CS8qIExlbmd0aCBvZiBzaWduYXR1cmUgZGF0YSAqLyAgCit9OworCis8L3ByZT4KKyhO b3RlIHRoYXQgdGhpcyBoYXMgYmVlbiBib3Jyb3dlZCBmcm9tIExpbnV4IG1vZHVsZSBzaWduYXR1 cmUgY29kZS4pLgorCisKKyMjIyAuYnNzIGFuZCAuZGF0YSBzZWN0aW9ucy4KKworSW4gcGxhY2Ug cGF0Y2hpbmcgd3JpdGFibGUgZGF0YSBpcyBub3Qgc3VpdGFibGUgYXMgaXQgaXMgdW5jbGVhciB3 aGF0IHNob3VsZCBiZSBkb25lCitkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGF0 YS4gQXMgc3VjaCBpdCBzaG91bGQgbm90IGJlIGF0dGVtcHRlZC4KKworVGhhdCBzYWlkIHdlIHNo b3VsZCBwcm92aWRlIGhvb2sgZnVuY3Rpb25zIHNvIHRoYXQgdGhlIGV4aXN0aW5nIGRhdGEKK2Nh biBiZSBjaGFuZ2VkIGR1cmluZyBwYXlsb2FkIGFwcGxpY2F0aW9uLgorCisKKyMjIyBJbmxpbmUg cGF0Y2hpbmcKKworVGhlIGh5cGVydmlzb3Igc2hvdWxkIHZlcmlmeSB0aGF0IHRoZSBpbi1wbGFj ZSBwYXRjaGluZyB3b3VsZCBmaXQgd2l0aGluCit0aGUgY29kZSBvciBkYXRhLgorCisjIyMgVHJh bXBvbGluZSAoZTkgb3Bjb2RlKQorCitUaGUgZTkgb3Bjb2RlIHVzZWQgZm9yIGptcHEgdXNlcyBh IDMyLWJpdCBzaWduZWQgZGlzcGxhY2VtZW50LiBUaGF0IG1lYW5zCit3ZSBhcmUgbGltaXRlZCB0 byB1cCB0byAyR0Igb2YgdmlydHVhbCBhZGRyZXNzIHRvIHBsYWNlIHRoZSBuZXcgY29kZQorZnJv bSB0aGUgb2xkIGNvZGUuIFRoYXQgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0gc2luY2UgWGVuIGh5 cGVydmlzb3IgaGFzCithIHZlcnkgc21hbGwgZm9vdHByaW50LgorCitIb3dldmVyIGlmIHdlIG5l ZWQgLSB3ZSBjYW4gYWx3YXlzIGFkZCB0d28gdHJhbXBvbGluZXMuIE9uZSBhdCB0aGUgMkdCCits aW1pdCB0aGF0IGNhbGxzIHRoZSBuZXh0IHRyYW1wb2xpbmUuCisKK1BsZWFzZSBub3RlIHRoZXJl IGlzIGEgc21hbGwgbGltaXRhdGlvbiBmb3IgdHJhbXBvbGluZXMgaW4KK2Z1bmN0aW9uIGVudHJp ZXM6IFRoZSB0YXJnZXQgZnVuY3Rpb24gKCsgdHJhaWxpbmcgcGFkZGluZykgbXVzdCBiZSBhYmxl Cit0byBhY2NvbW9kYXRlIHRoZSB0cmFtcG9saW5lLiBPbiB4ODYgd2l0aCArLTIgR0IgcmVsYXRp dmUganVtcHMsCit0aGlzIG1lYW5zIDUgYnl0ZXMgYXJlIHJlcXVpcmVkLgorCitEZXBlbmRpbmcg b24gY29tcGlsZXIgc2V0dGluZ3MsIHRoZXJlIGFyZSBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBYZW4g dGhhdAorYXJlIHNtYWxsZXIgKHdpdGhvdXQgaW50ZXItZnVuY3Rpb24gcGFkZGluZykuCisKKzxw cmU+IAorcmVhZGVsZiAtc1cgeGVuLXN5bXMgfCBncmVwICIgRlVOQyAiIHwgXAorICAgIGF3ayAn eyBpZiAoJDMgPCA1KSBwcmludCAkMywgJDQsICQ1LCAkOCB9JworCisuLi4KKzMgRlVOQyBMT0NB TCB3YmludmRfaXBpCiszIEZVTkMgTE9DQUwgc2hhZG93X2wxX2luZGV4CisuLi4KKzwvcHJlPgor QSBjb21waWxlLXRpbWUgY2hlY2sgZm9yLCBlLmcuLCBhIG1pbmltdW0gYWxpZ25tZW50IG9mIGZ1 bmN0aW9ucyBvciBhCitydW50aW1lIGNoZWNrIHRoYXQgdmVyaWZpZXMgc3ltYm9sIHNpemUgKCsg cGFkZGluZyB0byBuZXh0IHN5bWJvbHMpIGZvcgordGhhdCBpbiB0aGUgaHlwZXJ2aXNvciBpcyBh ZHZpc2VkLgorCitUaGUgdG9vbCBmb3IgZ2VuZXJhdGluZyBwYXlsb2FkcyBjdXJyZW50bHkgZG9l cyBwZXJmb3JtIGEgY29tcGlsZS10aW1lCitjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rp b24gdG8gYmUgcmVwbGFjZWQgaXMgbGFyZ2UgZW5vdWdoLgorCi0tIAoyLjUuMAoKPiAKPiBKYW4K PiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==