From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Proposed XENMEM_claim_pages hypercall: Analysis of problem and alternate solutions Date: Tue, 18 Dec 2012 17:17:51 -0500 Message-ID: <20121218221749.GA6332@phenom.dumpdata.com> References: <49049C00-89CA-4B43-9660-83B9ADC061E0@gridcentric.ca> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <49049C00-89CA-4B43-9660-83B9ADC061E0@gridcentric.ca> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Andres Lagar-Cavilla Cc: Dan Magenheimer , "Keir (Xen.org)" , Ian Campbell , George Dunlap , Tim Deegan , Ian Jackson , xen-devel@lists.xen.org, Jan Beulich List-Id: xen-devel@lists.xenproject.org SGV5IEFuZHJlcywKClRoYW5rcyBmb3IgeW91ciByZXNwb25zZS4gU29ycnkgZm9yIHRoZSByZWFs bHkgbGF0ZSByZXNwb25zZSAtIEkKaGFkIGl0IGluIG15IHBvc3Rwb25lZCBtYWlsYm94IGFuZCB0 aG91Z2h0IGl0IGhhcyBiZWVuIHNlbnQKYWxyZWFkeS4KCk9uIE1vbiwgRGVjIDAzLCAyMDEyIGF0 IDEwOjI0OjQwUE0gLTA1MDAsIEFuZHJlcyBMYWdhci1DYXZpbGxhIHdyb3RlOgo+ID4gSSBlYXJs aWVyIHByb21pc2VkIGEgY29tcGxldGUgYW5hbHlzaXMgb2YgdGhlIHByb2JsZW0KPiA+IGFkZHJl c3NlZCBieSB0aGUgcHJvcG9zZWQgY2xhaW0gaHlwZXJjYWxsIGFzIHdlbGwgYXMKPiA+IGFuIGFu YWx5c2lzIG9mIHRoZSBhbHRlcm5hdGUgc29sdXRpb25zLiAgSSBoYWQgbm90Cj4gPiB5ZXQgcHJv dmlkZWQgdGhlc2UgYW5hbHlzZXMgd2hlbiBJIGFza2VkIGZvciBhcHByb3ZhbAo+ID4gdG8gY29t bWl0IHRoZSBoeXBlcnZpc29yIHBhdGNoLCBzbyB0aGVyZSB3YXMgc3RpbGwKPiA+IGEgZ29vZCBh bW91bnQgb2YgbWlzdW5kZXJzdGFuZGluZywgYW5kIEkgYW0gdHJ5aW5nCj4gPiB0byBmaXggdGhh dCBoZXJlLgo+ID4gCj4gPiBJIGhhZCBob3BlZCB0aGlzIGVzc2F5IGNvdWxkIGJlIGJvdGggY29u Y2lzZSBhbmQgY29tcGxldGUKPiA+IGJ1dCBxdWlja2x5IGZvdW5kIGl0IHRvIGJlIGltcG9zc2li bGUgdG8gYmUgYm90aCBhdCB0aGUKPiA+IHNhbWUgdGltZS4gIFNvIEkgaGF2ZSBlcnJlZCBvbiB0 aGUgc2lkZSBvZiB2ZXJib3NpdHksCj4gPiBidXQgYWxzbyBoYXZlIGF0dGVtcHRlZCB0byBlbnN1 cmUgdGhhdCB0aGUgYW5hbHlzaXMKPiA+IGZsb3dzIHNtb290aGx5IGFuZCBpcyB1bmRlcnN0YW5k YWJsZSB0byBhbnlvbmUgaW50ZXJlc3RlZAo+ID4gaW4gbGVhcm5pbmcgbW9yZSBhYm91dCBtZW1v cnkgYWxsb2NhdGlvbiBpbiBYZW4uCj4gPiBJJ2QgYXBwcmVjaWF0ZSBmZWVkYmFjayBmcm9tIG90 aGVyIGRldmVsb3BlcnMgdG8gdW5kZXJzdGFuZAo+ID4gaWYgSSd2ZSBhbHNvIGFjaGlldmVkIHRo YXQgZ29hbC4KPiA+IAo+ID4gSWFuLCBJYW4sIEdlb3JnZSwgYW5kIFRpbSAtLSBJIGhhdmUgdGFn Z2VkIGEgZmV3Cj4gPiBvdXQtb2YtZmxvdyBxdWVzdGlvbnMgdG8geW91IHdpdGggW0lJR0ZdLiAg SWYgSSBsb3NlCj4gPiB5b3UgYXQgYW55IHBvaW50LCBJJ2QgZXNwZWNpYWxseSBhcHByZWNpYXRl IHlvdXIgZmVlZGJhY2sKPiA+IGF0IHRob3NlIHBvaW50cy4gIEkgdHJ1c3QgdGhhdCwgZmlyc3Qs IHlvdSB3aWxsIHJlYWQKPiA+IHRoaXMgY29tcGxldGVseS4gIEFzIEkndmUgc2FpZCwgSSB1bmRl cnN0YW5kIHRoYXQKPiA+IE9yYWNsZSdzIHBhcmFkaWdtIG1heSBkaWZmZXIgaW4gbWFueSB3YXlz IGZyb20geW91cgo+ID4gb3duLCBzbyBJIGFsc28gdHJ1c3QgdGhhdCB5b3Ugd2lsbCByZWFkIGl0 IGNvbXBsZXRlbHkKPiA+IHdpdGggYW4gb3BlbiBtaW5kLgo+ID4gCj4gPiBUaGFua3MsCj4gPiBE YW4KPiA+IAo+ID4gUFJPQkxFTSBTVEFURU1FTlQgT1ZFUlZJRVcKPiA+IAo+ID4gVGhlIGZ1bmRh bWVudGFsIHByb2JsZW0gaXMgYSByYWNlOyB0d28gZW50aXRpZXMgYXJlCj4gPiBjb21wZXRpbmcg Zm9yIHBhcnQgb3IgYWxsIG9mIGEgc2hhcmVkIHJlc291cmNlOiBpbiB0aGlzIGNhc2UsCj4gPiBw aHlzaWNhbCBzeXN0ZW0gUkFNLiAgTm9ybWFsbHksIGEgbG9jayBpcyB1c2VkIHRvIG1lZGlhdGUK PiA+IGEgcmFjZS4KPiA+IAo+ID4gRm9yIG1lbW9yeSBhbGxvY2F0aW9uIGluIFhlbiwgdGhlcmUg YXJlIHR3byBzaWduaWZpY2FudAo+ID4gZW50aXRpZXMsIHRoZSB0b29sc3RhY2sgYW5kIHRoZSBo eXBlcnZpc29yLiAgQW5kLCBpbgo+ID4gZ2VuZXJhbCB0ZXJtcywgdGhlcmUgYXJlIGN1cnJlbnRs eSB0d28gaW1wb3J0YW50IGxvY2tzOgo+ID4gb25lIHVzZWQgaW4gdGhlIHRvb2xzdGFjayBmb3Ig ZG9tYWluIGNyZWF0aW9uOwo+ID4gYW5kIG9uZSBpbiB0aGUgaHlwZXJ2aXNvciB1c2VkIGZvciB0 aGUgYnVkZHkgYWxsb2NhdG9yLgo+ID4gCj4gPiBDb25zaWRlcmluZyBmaXJzdCBvbmx5IGRvbWFp biBjcmVhdGlvbiwgdGhlIHRvb2xzdGFjawo+ID4gbG9jayBpcyB0YWtlbiB0byBlbnN1cmUgdGhh dCBkb21haW4gY3JlYXRpb24gaXMgc2VyaWFsaXplZC4KPiA+IFRoZSBsb2NrIGlzIHRha2VuIHdo ZW4gZG9tYWluIGNyZWF0aW9uIHN0YXJ0cywgYW5kIHJlbGVhc2VkCj4gPiB3aGVuIGRvbWFpbiBj cmVhdGlvbiBpcyBjb21wbGV0ZS4KPiA+IAo+ID4gQXMgc3lzdGVtIGFuZCBkb21haW4gbWVtb3J5 IHJlcXVpcmVtZW50cyBncm93LCB0aGUgYW1vdW50Cj4gPiBvZiB0aW1lIHRvIGFsbG9jYXRlIGFs bCBuZWNlc3NhcnkgbWVtb3J5IHRvIGxhdW5jaCBhIGxhcmdlCj4gPiBkb21haW4gaXMgZ3Jvd2lu ZyBhbmQgbWF5IG5vdyBleGNlZWQgc2V2ZXJhbCBtaW51dGVzLCBzbwo+ID4gdGhpcyBzZXJpYWxp emF0aW9uIGlzIGluY3JlYXNpbmdseSBwcm9ibGVtYXRpYy4gIFRoZSByZXN1bHQKPiA+IGlzIGEg Y3VzdG9tZXIgcmVwb3J0ZWQgcHJvYmxlbTogIElmIGEgY3VzdG9tZXIgd2FudHMgdG8KPiA+IGxh dW5jaCB0d28gb3IgbW9yZSB2ZXJ5IGxhcmdlIGRvbWFpbnMsIHRoZSAid2FpdCB0aW1lIgo+ID4g cmVxdWlyZWQgYnkgdGhlIHNlcmlhbGl6YXRpb24gaXMgdW5hY2NlcHRhYmxlLgo+ID4gCj4gPiBP cmFjbGUgd291bGQgbGlrZSB0byBzb2x2ZSB0aGlzIHByb2JsZW0uICBBbmQgT3JhY2xlCj4gPiB3 b3VsZCBsaWtlIHRvIHNvbHZlIHRoaXMgcHJvYmxlbSBub3QganVzdCBmb3IgYSBzaW5nbGUKPiA+ IGN1c3RvbWVyIHNpdHRpbmcgaW4gZnJvbnQgb2YgYSBzaW5nbGUgbWFjaGluZSBjb25zb2xlLCBi dXQKPiA+IGZvciB0aGUgdmVyeSBjb21wbGV4IGNhc2Ugb2YgYSBsYXJnZSBudW1iZXIgb2YgbWFj aGluZXMsCj4gPiB3aXRoIHRoZSAiYWdlbnQiIG9uIGVhY2ggbWFjaGluZSB0YWtpbmcgaW5kZXBl bmRlbnQKPiA+IGFjdGlvbnMgaW5jbHVkaW5nIGF1dG9tYXRpYyBsb2FkIGJhbGFuY2luZyBhbmQg cG93ZXIKPiA+IG1hbmFnZW1lbnQgdmlhIG1pZ3JhdGlvbi4KPiBIaSBEYW4sCj4gYW4gaXNzdWUg d2l0aCB5b3VyIHJlYXNvbmluZyB0aHJvdWdob3V0IGhhcyBiZWVuIHRoZSBjb25zdGFudCBpbnZv Y2F0aW9uIG9mIHRoZSBtdWx0aSBob3N0IGVudmlyb25tZW50IGFzIGEganVzdGlmaWNhdGlvbiBm b3IgeW91ciBwcm9wb3NhbC4gQnV0IHRoaXMgYXJndW1lbnQgaXMgbm90IHVzZWQgaW4geW91ciBw cm9wb3NhbCBiZWxvdyBiZXlvbmQgdGhpcyBtZW50aW9uIGluIHBhc3NpbmcuIEZ1cnRoZXIsIHRo ZXJlIGlzIG5vIHJlbGF0aW9uIGJldHdlZW4gd2hhdCB5b3UgYXJlIGNoYW5naW5nICh0aGUgaHlw ZXJ2aXNvcikgYW5kIHdoYXQgeW91IGFyZSBjbGFpbWluZyBpdCBpcyBuZWVkZWQgZm9yIChtdWx0 aSBob3N0IFZNIG1hbmFnZW1lbnQpLgo+IAoKSGVoLiBJIGhhZG4ndCByZWFsaXplZCB0aGF0IHRo ZSBlbWFpbHMgbmVlZCB0byBjb25mb3JtIHRvIGEKdGhlIHdheSBsZWdhbCBicmllZnMgYXJlIHdy aXR0ZW4gaW4gVVMgOi0pIE1lYW5pbmcgdGhhdAplYWNoIHRvcGljIG11c3QgYmUgYWRkcmVzc2Vk LgoKQW55aG93LCB0aGUgbXVsdGktaG9zdCBlbnYgb3IgYSBzaW5nbGUtaG9zdCBlbnYgaGFzIHRo ZSBzYW1lCmlzc3VlIC0geW91IHRyeSB0byBsYXVuY2ggbXVsdGlwbGUgZ3Vlc3RzIGFuZCB5b3Ug c29tZSBvZgp0aGVtIG1pZ2h0IG5vdCBsYXVuY2guCgpUaGUgY2hhbmdlcyB0aGF0IERhbiBpcyBw cm9wb3NpbmcgKHRoZSBjbGFpbSBoeXBlcmNhbGwpCndvdWxkIHByb3ZpZGUgdGhlIGZ1bmN0aW9u YWxpdHkgdG8gZml4IHRoaXMgcHJvYmxlbS4KCj4gCj4gPiAgKFRoaXMgY29tcGxleCBlbnZpcm9u bWVudAo+ID4gaXMgc29sZCBieSBPcmFjbGUgdG9kYXk7IGl0IGlzIG5vdCBhICJmdXR1cmUgdmlz aW9uIi4pCj4gPiAKPiA+IFtJSUdUXSBDb21wbGV0ZWx5IGlnbm9yaW5nIGFueSBwb3NzaWJsZSBz b2x1dGlvbnMgdG8gdGhpcwo+ID4gcHJvYmxlbSwgaXMgZXZlcnlvbmUgaW4gYWdyZWVtZW50IHRo YXQgdGhpcyBfaXNfIGEgcHJvYmxlbQo+ID4gdGhhdCBfbmVlZHNfIHRvIGJlIHNvbHZlZCB3aXRo IF9zb21lXyBjaGFuZ2UgaW4gdGhlIFhlbgo+ID4gZWNvc3lzdGVtPwo+ID4gCj4gPiBTT01FIElN UE9SVEFOVCBCQUNLR1JPVU5EIElORk9STUFUSU9OCj4gPiAKPiA+IEluIHRoZSBzdWJzZXF1ZW50 IGRpc2N1c3Npb24sIGl0IGlzIGltcG9ydGFudCB0bwo+ID4gdW5kZXJzdGFuZCBhIGZldyB0aGlu Z3M6Cj4gPiAKPiA+IFdoaWxlIHRoZSB0b29sc3RhY2sgbG9jayBpcyBoZWxkLCBhbGxvY2F0aW5n IG1lbW9yeSBmb3IKPiA+IHRoZSBkb21haW4gY3JlYXRpb24gcHJvY2VzcyBpcyBkb25lIGFzIGEg c2VxdWVuY2Ugb2Ygb25lCj4gPiBvciBtb3JlIGh5cGVyY2FsbHMsIGVhY2ggYXNraW5nIHRoZSBo eXBlcnZpc29yIHRvIGFsbG9jYXRlCj4gPiBvbmUgb3IgbW9yZSAtLSAiWCIgLS0gc2xhYnMgb2Yg cGh5c2ljYWwgUkFNLCB3aGVyZSBhIHNsYWIKPiA+IGlzIDIqKk4gY29udGlndW91cyBhbGlnbmVk IHBhZ2VzLCBhbHNvIGtub3duIGFzIGFuCj4gPiAib3JkZXIgTiIgYWxsb2NhdGlvbi4gIFdoaWxl IHRoZSBoeXBlcmNhbGwgaXMgZGVmaW5lZAo+ID4gdG8gd29yayB3aXRoIGFueSB2YWx1ZSBvZiBO LCBjb21tb24gdmFsdWVzIGFyZSBOPTAKPiA+IChpbmRpdmlkdWFsIHBhZ2VzKSwgTj05ICgiaHVn ZXBhZ2VzIiBvciAic3VwZXJwYWdlcyIpLAo+ID4gYW5kIE49MTggKCIxR2lCIHBhZ2VzIikuICBT bywgZm9yIGV4YW1wbGUsIGlmIHRoZSB0b29sc3RhY2sKPiA+IHJlcXVpcmVzIDIwMU1pQiBvZiBt ZW1vcnksIGl0IHdpbGwgbWFrZSB0d28gaHlwZXJjYWxsczoKPiA+IE9uZSB3aXRoIFg9MTAwIGFu ZCBOPTksIGFuZCBvbmUgd2l0aCBYPTEgYW5kIE49MC4KPiA+IAo+ID4gV2hpbGUgdGhlIHRvb2xz dGFjayBtYXkgYXNrIGZvciBhIHNtYWxsZXIgbnVtYmVyIFggb2YKPiA+IG9yZGVyPT05IHNsYWJz LCBzeXN0ZW0gZnJhZ21lbnRhdGlvbiBtYXkgdW5wcmVkaWN0YWJseQo+ID4gY2F1c2UgdGhlIGh5 cGVydmlzb3IgdG8gZmFpbCB0aGUgcmVxdWVzdCwgaW4gd2hpY2ggY2FzZQo+ID4gdGhlIHRvb2xz dGFjayB3aWxsIGZhbGwgYmFjayB0byBhIHJlcXVlc3QgZm9yIDUxMipYCj4gPiBpbmRpdmlkdWFs IHBhZ2VzLiAgSWYgdGhlcmUgaXMgc3VmZmljaWVudCBSQU0gaW4gdGhlIHN5c3RlbSwKPiA+IHRo aXMgcmVxdWVzdCBmb3Igb3JkZXI9PTAgcGFnZXMgaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgo+ ID4gVGh1cyBmb3IgYSAxVGlCIGRvbWFpbiwgdGhlIGh5cGVydmlzb3IgbXVzdCBiZSBwcmVwYXJl ZAo+ID4gdG8gYWxsb2NhdGUgdXAgdG8gMjU2TWkgaW5kaXZpZHVhbCBwYWdlcy4KPiA+IAo+ID4g Tm90ZSBjYXJlZnVsbHkgdGhhdCB3aGVuIHRoZSB0b29sc3RhY2sgaHlwZXJjYWxsIGFza3MgZm9y Cj4gPiAxMDAgc2xhYnMsIHRoZSBoeXBlcnZpc29yICJoZWFwbG9jayIgaXMgY3VycmVudGx5IHRh a2VuCj4gPiBhbmQgcmVsZWFzZWQgMTAwIHRpbWVzLiAgU2ltaWxhcmx5LCBmb3IgMjU2TSBpbmRp dmlkdWFsCj4gPiBwYWdlcy4uLiAyNTYgbWlsbGlvbiBzcGluX2xvY2stYWxsb2NfcGFnZS1zcGlu X3VubG9ja3MuCj4gPiBUaGlzIG1lYW5zIHRoYXQgZG9tYWluIGNyZWF0aW9uIGlzIG5vdCAiYXRv bWljIiBpbnNpZGUKPiA+IHRoZSBoeXBlcnZpc29yLCB3aGljaCBtZWFucyB0aGF0IHJhY2VzIGNh biBhbmQgd2lsbCBzdGlsbAo+ID4gb2NjdXIuCj4gPiAKPiA+IFJVTElORyBPVVQgU09NRSBTSU1Q TEUgU09MVVRJT05TCj4gPiAKPiA+IElzIHRoZXJlIGFuIGVsZWdhbnQgc2ltcGxlIHNvbHV0aW9u IGhlcmU/Cj4gPiAKPiA+IExldCdzIGZpcnN0IGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBy ZW1vdmluZyB0aGUgdG9vbHN0YWNrCj4gPiBzZXJpYWxpemF0aW9uIGVudGlyZWx5IGFuZC9vciB0 aGUgcG9zc2liaWxpdHkgdGhhdCB0d28KPiA+IGluZGVwZW5kZW50IHRvb2xzdGFjayB0aHJlYWRz IChvciAiYWdlbnRzIikgY2FuIHNpbXVsdGFuZW91c2x5Cj4gPiByZXF1ZXN0IGEgdmVyeSBsYXJn ZSBkb21haW4gY3JlYXRpb24gaW4gcGFyYWxsZWwuICBBcyBkZXNjcmliZWQKPiA+IGFib3ZlLCB0 aGUgaHlwZXJ2aXNvcidzIGhlYXBsb2NrIGlzIGluc3VmZmljaWVudCB0byBzZXJpYWxpemUgUkFN Cj4gPiBhbGxvY2F0aW9uLCBzbyB0aGUgdHdvIGRvbWFpbiBjcmVhdGlvbiBwcm9jZXNzZXMgcmFj ZS4gIElmIHRoZXJlCj4gPiBpcyBzdWZmaWNpZW50IHJlc291cmNlIGZvciBlaXRoZXIgb25lIHRv IGxhdW5jaCwgYnV0IGluc3VmZmljaWVudAo+ID4gcmVzb3VyY2UgZm9yIGJvdGggdG8gbGF1bmNo LCB0aGUgd2lubmVyIG9mIHRoZSByYWNlIGlzIGluZGV0ZXJtaW5hdGUsCj4gPiBhbmQgb25lIG9y IGJvdGggbGF1bmNoZXMgd2lsbCBmYWlsLCBwb3NzaWJseSBhZnRlciBvbmUgb3IgYm90aCAKPiA+ IGRvbWFpbiBjcmVhdGlvbiB0aHJlYWRzIGhhdmUgYmVlbiB3b3JraW5nIGZvciBzZXZlcmFsIG1p bnV0ZXMuCj4gPiBUaGlzIGlzIGEgY2xhc3NpYyAiVE9DVE9VIiAodGltZS1vZi1jaGVjay10aW1l LW9mLXVzZSkgcmFjZS4KPiA+IElmIGEgY3VzdG9tZXIgaXMgdW5oYXBweSB3YWl0aW5nIHNldmVy YWwgbWludXRlcyB0byBsYXVuY2gKPiA+IGEgZG9tYWluLCB0aGV5IHdpbGwgYmUgZXZlbiBtb3Jl IHVuaGFwcHkgd2FpdGluZyBmb3Igc2V2ZXJhbAo+ID4gbWludXRlcyB0byBiZSB0b2xkIHRoYXQg b25lIG9yIGJvdGggb2YgdGhlIGxhdW5jaGVzIGhhcyBmYWlsZWQuCj4gPiBNdWx0aS1taW51dGUg ZmFpbHVyZSBpcyBldmVuIG1vcmUgdW5hY2NlcHRhYmxlIGZvciBhbiBhdXRvbWF0ZWQKPiA+IGFn ZW50IHRyeWluZyB0bywgZm9yIGV4YW1wbGUsIGV2YWN1YXRlIGEgbWFjaGluZSB0aGF0IHRoZQo+ ID4gZGF0YSBjZW50ZXIgYWRtaW5pc3RyYXRvciBuZWVkcyB0byBwb3dlcmN5Y2xlLgo+ID4gCj4g PiBbSUlHVDogUGxlYXNlIGhvbGQgeW91ciBvYmplY3Rpb25zIGZvciBhIG1vbWVudC4uLiB0aGUg cGFyYWdyYXBoCj4gPiBhYm92ZSBpcyBkaXNjdXNzaW5nIHRoZSBzaW1wbGUgc29sdXRpb24gb2Yg cmVtb3ZpbmcgdGhlIHNlcmlhbGl6YXRpb247Cj4gPiB5b3VyIHN1Z2dlc3RlZCBzb2x1dGlvbiB3 aWxsIGJlIGRpc2N1c3NlZCBzb29uLl0KPiA+IAo+ID4gTmV4dCwgbGV0J3MgY29uc2lkZXIgdGhl IHBvc3NpYmlsaXR5IG9mIGNoYW5naW5nIHRoZSBoZWFwbG9jawo+ID4gc3RyYXRlZ3kgaW4gdGhl IGh5cGVydmlzb3Igc28gdGhhdCB0aGUgbG9jayBpcyBoZWxkIG5vdAo+ID4gZm9yIG9uZSBzbGFi IGJ1dCBmb3IgdGhlIGVudGlyZSByZXF1ZXN0IG9mIE4gc2xhYnMuICBBcyB3aXRoCj4gPiBhbnkg Y29yZSBoeXBlcnZpc29yIGxvY2ssIGhvbGRpbmcgdGhlIGhlYXBsb2NrIGZvciBhICJsb25nIHRp bWUiCj4gPiBpcyB1bmFjY2VwdGFibGUuICBUbyBhIGh5cGVydmlzb3IsIHNldmVyYWwgbWludXRl cyBpcyBhbiBldGVybml0eS4KPiA+IEFuZCwgaW4gYW55IGNhc2UsIGJ5IHNlcmlhbGl6aW5nIGRv bWFpbiBjcmVhdGlvbiBpbiB0aGUgaHlwZXJ2aXNvciwKPiA+IHdlIGhhdmUgcmVhbGx5IG9ubHkg bW92ZWQgdGhlIHByb2JsZW0gZnJvbSB0aGUgdG9vbHN0YWNrIGludG8KPiA+IHRoZSBoeXBlcnZp c29yLCBub3Qgc29sdmVkIHRoZSBwcm9ibGVtLgo+ID4gCj4gPiBbSUlHVF0gQXJlIHdlIGluIGFn cmVlbWVudCB0aGF0IHRoZXNlIHNpbXBsZSBzb2x1dGlvbnMgY2FuIGJlCj4gPiBzYWZlbHkgcnVs ZWQgb3V0Pwo+ID4gCj4gPiBDQVBBQ0lUWSBBTExPQ0FUSU9OIFZTIFJBTSBBTExPQ0FUSU9OCj4g PiAKPiA+IExvb2tpbmcgZm9yIGEgY3JlYXRpdmUgc29sdXRpb24sIG9uZSBtYXkgcmVhbGl6ZSB0 aGF0IGl0IGlzIHRoZQo+ID4gcGFnZSBhbGxvY2F0aW9uIC0tIGVzcGVjaWFsbHkgaW4gbGFyZ2Ug cXVhbnRpdGllcyAtLSB0aGF0IGlzIHZlcnkKPiA+IHRpbWUtY29uc3VtaW5nLiAgQnV0LCB0aGlu a2luZyBvdXRzaWRlIG9mIHRoZSBib3gsIGl0IGlzIG5vdAo+ID4gdGhlIGFjdHVhbCBwYWdlcyBv ZiBSQU0gdGhhdCB3ZSBhcmUgcmFjaW5nIG9uLCBidXQgdGhlIHF1YW50aXR5IG9mIHBhZ2VzIHJl cXVpcmVkIHRvIGxhdW5jaCBhIGRvbWFpbiEgIElmIHdlIGluc3RlYWQgaGF2ZSBhIHdheSB0bwo+ ID4gImNsYWltIiBhIHF1YW50aXR5IG9mIHBhZ2VzIGNoZWFwbHkgbm93IGFuZCB0aGVuIGFsbG9j YXRlIHRoZSBhY3R1YWwKPiA+IHBoeXNpY2FsIFJBTSBwYWdlcyBsYXRlciwgd2UgaGF2ZSBjaGFu Z2VkIHRoZSByYWNlIHRvIHJlcXVpcmUgb25seSBzZXJpYWxpemF0aW9uIG9mIHRoZSBjbGFpbWlu ZyBwcm9jZXNzISAgSW4gb3RoZXIgd29yZHMsIGlmIHNvbWUgZW50aXR5Cj4gPiBrbm93cyB0aGUg bnVtYmVyIG9mIHBhZ2VzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLCBhbmQgY2FuICJjbGFpbSIK PiA+IE4gcGFnZXMgZm9yIHRoZSBiZW5lZml0IG9mIGEgZG9tYWluIGJlaW5nIGxhdW5jaGVkLCB0 aGUgc3VjY2Vzc2Z1bCBsYXVuY2ggb2YgdGhlIGRvbWFpbiBjYW4gYmUgZW5zdXJlZC4gIFdlbGwu Li4gdGhlIGRvbWFpbiBsYXVuY2ggbWF5Cj4gPiBzdGlsbCBmYWlsIGZvciBhbiB1bnJlbGF0ZWQg cmVhc29uLCBidXQgbm90IGR1ZSB0byBhIG1lbW9yeSBUT0NUT1UKPiA+IHJhY2UuICBCdXQsIGlu IHRoaXMgY2FzZSwgaWYgdGhlIGNvc3QgKGluIHRpbWUpIG9mIHRoZSBjbGFpbWluZwo+ID4gcHJv Y2VzcyBpcyB2ZXJ5IHNtYWxsIGNvbXBhcmVkIHRvIHRoZSBjb3N0IG9mIHRoZSBkb21haW4gbGF1 bmNoLAo+ID4gd2UgaGF2ZSBzb2x2ZWQgdGhlIG1lbW9yeSBUT0NUT1UgcmFjZSB3aXRoIGhhcmRs eSBhbnkgZGVsYXkgYWRkZWQKPiA+IHRvIGEgbm9uLW1lbW9yeS1yZWxhdGVkIGZhaWx1cmUgdGhh dCB3b3VsZCBoYXZlIG9jY3VycmVkIGFueXdheS4KPiA+IAo+ID4gVGhpcyAiY2xhaW0iIHNvdW5k cyBwcm9taXNpbmcuICBCdXQgd2UgaGF2ZSBtYWRlIGFuIGFzc3VtcHRpb24gdGhhdAo+ID4gYW4g ImVudGl0eSIgaGFzIGNlcnRhaW4ga25vd2xlZGdlLiAgSW4gdGhlIFhlbiBzeXN0ZW0sIHRoYXQg ZW50aXR5Cj4gPiBtdXN0IGJlIGVpdGhlciB0aGUgdG9vbHN0YWNrIG9yIHRoZSBoeXBlcnZpc29y LiAgT3IsIGluIHRoZSBPcmFjbGUKPiA+IGVudmlyb25tZW50LCBhbiAiYWdlbnQiLi4uIGJ1dCBh biBhZ2VudCBhbmQgYSB0b29sc3RhY2sgYXJlIHNpbWlsYXIKPiA+IGVub3VnaCBmb3Igb3VyIHB1 cnBvc2VzIHRoYXQgd2Ugd2lsbCBqdXN0IHVzZSB0aGUgbW9yZSBicm9hZGx5LXVzZWQKPiA+IHRl cm0gInRvb2xzdGFjayIuICBJbiB1c2luZyB0aGlzIHRlcm0sIGhvd2V2ZXIsIGl0J3MgaW1wb3J0 YW50IHRvCj4gPiByZW1lbWJlciBpdCBpcyBuZWNlc3NhcnkgdG8gY29uc2lkZXIgdGhlIGV4aXN0 ZW5jZSBvZiBtdWx0aXBsZQo+ID4gdGhyZWFkcyB3aXRoaW4gdGhpcyB0b29sc3RhY2suCj4gPiAK PiA+IE5vdyBJIHF1b3RlIElhbiBKYWNrc29uOiAiSXQgaXMgYSBrZXkgZGVzaWduIHByaW5jaXBs ZSBvZiBhIHN5c3RlbQo+ID4gbGlrZSBYZW4gdGhhdCB0aGUgaHlwZXJ2aXNvciBzaG91bGQgcHJv dmlkZSBvbmx5IHRob3NlIGZhY2lsaXRpZXMKPiA+IHdoaWNoIGFyZSBzdHJpY3RseSBuZWNlc3Nh cnkuICBBbnkgZnVuY3Rpb25hbGl0eSB3aGljaCBjYW4gYmUKPiA+IHJlYXNvbmFibHkgcHJvdmlk ZWQgb3V0c2lkZSB0aGUgaHlwZXJ2aXNvciBzaG91bGQgYmUgZXhjbHVkZWQKPiA+IGZyb20gaXQu Igo+ID4gCj4gPiBTbyBsZXQncyBleGFtaW5lIHRoZSB0b29sc3RhY2sgZmlyc3QuCj4gPiAKPiA+ IFtJSUdUXSBTdGlsbCBhbGwgb24gdGhlIHNhbWUgcGFnZSAocHVuIGludGVuZGVkKT8KPiA+IAo+ ID4gVE9PTFNUQUNLLUJBU0VEIENBUEFDSVRZIEFMTE9DQVRJT04KPiA+IAo+ID4gRG9lcyB0aGUg dG9vbHN0YWNrIGtub3cgaG93IG1hbnkgcGh5c2ljYWwgcGFnZXMgb2YgUkFNIGFyZSBhdmFpbGFi bGU/Cj4gPiBZZXMsIGl0IGNhbiB1c2UgYSBoeXBlcmNhbGwgdG8gZmluZCBvdXQgdGhpcyBpbmZv cm1hdGlvbiBhZnRlciBYZW4gYW5kCj4gPiBkb20wIGxhdW5jaCwgYnV0IGJlZm9yZSBpdCBsYXVu Y2hlcyBhbnkgZG9tYWluLiAgVGhlbiBpZiBpdCBzdWJ0cmFjdHMKPiA+IHRoZSBudW1iZXIgb2Yg cGFnZXMgdXNlZCB3aGVuIGl0IGxhdW5jaGVzIGEgZG9tYWluIGFuZCBpcyBhd2FyZSBvZgo+ID4g d2hlbiBhbnkgZG9tYWluIGRpZXMsIGFuZCBhZGRzIHRoZW0gYmFjaywgdGhlIHRvb2xzdGFjayBo YXMgYSBwcmV0dHkKPiA+IGdvb2QgZXN0aW1hdGUuICBJbiBhY3R1YWxpdHksIHRoZSB0b29sc3Rh Y2sgZG9lc24ndCBfcmVhbGx5XyBrbm93IHRoZQo+ID4gZXhhY3QgbnVtYmVyIG9mIHBhZ2VzIHVz ZWQgd2hlbiBhIGRvbWFpbiBpcyBsYXVuY2hlZCwgYnV0IHRoZXJlCj4gPiBpcyBhIHBvb3JseS1k b2N1bWVudGVkICJmdXp6IGZhY3RvciIuLi4gdGhlIHRvb2xzdGFjayBrbm93cyB0aGUKPiA+IG51 bWJlciBvZiBwYWdlcyB3aXRoaW4gYSBmZXcgbWVnYWJ5dGVzLCB3aGljaCBpcyBwcm9iYWJseSBj bG9zZSBlbm91Z2guCj4gPiAKPiA+IFRoaXMgaXMgYSBmYWlybHkgZ29vZCBkZXNjcmlwdGlvbiBv ZiBob3cgdGhlIHRvb2xzdGFjayB3b3JrcyB0b2RheQo+ID4gYW5kIHRoZSBhY2NvdW50aW5nIHNl ZW1zIHNpbXBsZSBlbm91Z2gsIHNvIGRvZXMgdG9vbHN0YWNrLWJhc2VkCj4gPiBjYXBhY2l0eSBh bGxvY2F0aW9uIHNvbHZlIG91ciBvcmlnaW5hbCBwcm9ibGVtPyAgSXQgd291bGQgc2VlbSBzby4K PiA+IEV2ZW4gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMsIHRoZSBhY2NvdW50aW5nIC0t IG5vdCB0aGUgZXh0ZW5kZWQKPiA+IHNlcXVlbmNlIG9mIHBhZ2UgYWxsb2NhdGlvbiBmb3IgdGhl IGRvbWFpbiBjcmVhdGlvbiAtLSBjYW4gYmUKPiA+IHNlcmlhbGl6ZWQgYnkgYSBsb2NrIGluIHRo ZSB0b29sc3RhY2suICBCdXQgbm90ZSBjYXJlZnVsbHksIGVpdGhlcgo+ID4gdGhlIHRvb2xzdGFj ayBhbmQgdGhlIGh5cGVydmlzb3IgbXVzdCBhbHdheXMgYmUgaW4gc3luYyBvbiB0aGUKPiA+IG51 bWJlciBvZiBhdmFpbGFibGUgcGFnZXMgKHdpdGhpbiBhbiBhY2NlcHRhYmxlIG1hcmdpbiBvZiBl cnJvcik7Cj4gPiBvciBhbnkgcXVlcnkgdG8gdGhlIGh5cGVydmlzb3IgX2FuZF8gdGhlIHRvb2xz dGFjay1iYXNlZCBjbGFpbSBtdXN0Cj4gPiBiZSBwYWlyZWQgYXRvbWljYWxseSwgaS5lLiB0aGUg dG9vbHN0YWNrIGxvY2sgbXVzdCBiZSBoZWxkIGFjcm9zcwo+ID4gYm90aC4gIE90aGVyd2lzZSB3 ZSBhZ2FpbiBoYXZlIGFub3RoZXIgVE9DVE9VIHJhY2UuIEludGVyZXN0aW5nLAo+ID4gYnV0IHBy b2JhYmx5IG5vdCByZWFsbHkgYSBwcm9ibGVtLgo+ID4gCj4gPiBXYWl0LCBpc24ndCBpdCBwb3Nz aWJsZSBmb3IgdGhlIHRvb2xzdGFjayB0byBkeW5hbWljYWxseSBjaGFuZ2UgdGhlCj4gPiBudW1i ZXIgb2YgcGFnZXMgYXNzaWduZWQgdG8gYSBkb21haW4/ICBZZXMsIHRoaXMgaXMgb2Z0ZW4gY2Fs bGVkCj4gPiBiYWxsb29uaW5nIGFuZCB0aGUgdG9vbHN0YWNrIGNhbiBkbyB0aGlzIHZpYSBhIGh5 cGVyY2FsbC4gIEJ1dAo+IAo+ID4gdGhhdCdzIHN0aWxsIE9LIGJlY2F1c2UgZWFjaCBjYWxsIGdv ZXMgdGhyb3VnaCB0aGUgdG9vbHN0YWNrIGFuZAo+ID4gaXQgc2ltcGx5IG5lZWRzIHRvIGFkZCBt b3JlIGFjY291bnRpbmcgZm9yIHdoZW4gaXQgdXNlcyBiYWxsb29uaW5nCj4gPiB0byBhZGp1c3Qg dGhlIGRvbWFpbidzIG1lbW9yeSBmb290cHJpbnQuICBTbyB3ZSBhcmUgc3RpbGwgT0suCj4gPiAK PiA+IEJ1dCB3YWl0IGFnYWluLi4uIHRoYXQgYnJpbmdzIHVwIGFuIGludGVyZXN0aW5nIHBvaW50 LiAgQXJlIHRoZXJlCj4gPiBhbnkgc2lnbmlmaWNhbnQgYWxsb2NhdGlvbnMgdGhhdCBhcmUgZG9u ZSBpbiB0aGUgaHlwZXJ2aXNvciB3aXRob3V0Cj4gPiB0aGUga25vd2xlZGdlIGFuZC9vciBwZXJt aXNzaW9uIG9mIHRoZSB0b29sc3RhY2s/ICBJZiBzbywgdGhlCj4gPiB0b29sc3RhY2sgbWF5IGJl IG1pc3NpbmcgaW1wb3J0YW50IGluZm9ybWF0aW9uLgo+ID4gCj4gPiBTbyBhcmUgdGhlcmUgYW55 IHN1Y2ggYWxsb2NhdGlvbnM/ICBXZWxsLi4uIHllcy4gVGhlcmUgYXJlIGEgZmV3Lgo+ID4gTGV0 J3MgdGFrZSBhIG1vbWVudCB0byBlbnVtZXJhdGUgdGhlbToKPiA+IAo+ID4gQSkgSW4gTGludXgs IGEgcHJpdmlsZWdlZCB1c2VyIGNhbiB3cml0ZSB0byBhIHN5c2ZzIGZpbGUgd2hpY2ggd3JpdGVz Cj4gPiB0byB0aGUgYmFsbG9vbiBkcml2ZXIgd2hpY2ggbWFrZXMgaHlwZXJjYWxscyBmcm9tIHRo ZSBndWVzdCBrZXJuZWwgdG8KPiAKPiBBIGZhaXJseSBiaXphcnJlIGxpbWl0YXRpb24gb2YgYSBi YWxsb29uLWJhc2VkIGFwcHJvYWNoIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBXaHkgb24gZWFydGgg c2hvdWxkIHRoZSBndWVzdCBiZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiBpdHMgYmFs bG9vbiwgYW5kIHRoZXJlZm9yZSBpdHMgZm9vdHByaW50IG9uIHRoZSBob3N0LiBUaGlzIG1heSBi ZSBqdXN0aWZpZWQgd2l0aCBhcmd1bWVudHMgcGVydGFpbmluZyB0byB0aGUgc3RhYmlsaXR5IG9m IHRoZSBpbi1ndWVzdCB3b3JrbG9hZC4gV2hhdCB0aGV5IHJlYWxseSByZXZlYWwgYXJlIGxpbWl0 YXRpb25zIG9mIGJhbGxvb25pbmcuIEJ1dCB0aGUgaW5hZGVxdWFjeSBvZiB0aGUgYmFsbG9vbiBp biBpdHNlbGYgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZSBpbnRvIGp1c3RpZnlpbmcg dGhlIG5lZWQgZm9yIGEgbmV3IGh5cGVyIGNhbGwuCgpXaHkgaXMgdGhpcyBhIGxpbWl0YXRpb24/ IFdoeSBzaG91bGRuJ3QgdGhlIGd1ZXN0IHRoZSBhbGxvd2VkIHRvIGNoYW5nZQppdHMgbWVtb3J5 IHVzYWdlPyBJdCBjYW4gZ28gdXAgYW5kIGRvd24gYXMgaXQgc2VlcyBmaXQuCkFuZCBpZiBpdCBn b2VzIGRvd24gYW5kIGl0IGdldHMgYmV0dGVyIHBlcmZvcm1hbmNlIC0gd2VsbCwgd2h5IHNob3Vs ZG4ndAppdCBkbyBpdD8KCkkgY29uY3VyIGl0IGlzIG9kZCAtIGJ1dCBpdCBoYXMgYmVlbiBsaWtl IHRoYXQgZm9yIGRlY2FkZXMuCgoKPiAKPiA+IHRoZSBoeXBlcnZpc29yLCB3aGljaCBhZGp1c3Rz IHRoZSBkb21haW4gbWVtb3J5IGZvb3RwcmludCwgd2hpY2ggY2hhbmdlcyB0aGUgbnVtYmVyIG9m IGZyZWUgcGFnZXMgX3dpdGhvdXRfIHRoZSB0b29sc3RhY2sga25vd2xlZGdlLgo+ID4gVGhlIHRv b2xzdGFjayBjb250cm9scyBjb25zdHJhaW50cyAoZXNzZW50aWFsbHkgYSBtaW5pbXVtIGFuZCBt YXhpbXVtKQo+ID4gd2hpY2ggdGhlIGh5cGVydmlzb3IgZW5mb3JjZXMuICBUaGUgdG9vbHN0YWNr IGNhbiBlbnN1cmUgdGhhdCB0aGUKPiA+IG1pbmltdW0gYW5kIG1heGltdW0gYXJlIGlkZW50aWNh bCB0byBlc3NlbnRpYWxseSBkaXNhbGxvdyBMaW51eCBmcm9tCj4gPiB1c2luZyB0aGlzIGZ1bmN0 aW9uYWxpdHkuICBJbmRlZWQsIHRoaXMgaXMgcHJlY2lzZWx5IHdoYXQgQ2l0cml4J3MKPiA+IER5 bmFtaWMgTWVtb3J5IENvbnRyb2xsZXIgKERNQykgZG9lczogZW5mb3JjZSBtaW49PW1heCBzbyB0 aGF0IERNQyBhbHdheXMgaGFzIGNvbXBsZXRlIGNvbnRyb2wgYW5kLCBzbywga25vd2xlZGdlIG9m IGFueSBkb21haW4gbWVtb3J5Cj4gPiBmb290cHJpbnQgY2hhbmdlcy4gIEJ1dCBETUMgaXMgbm90 IHByZXNjcmliZWQgYnkgdGhlIHRvb2xzdGFjaywKPiAKPiBOZWl0aGVyIGlzIGVuZm9yY2luZyBt aW49PW1heC4gVGhpcyB3YXMgbXkgYXJndW1lbnQgd2hlbiBwcmV2aW91c2x5IGNvbW1lbnRpbmcg b24gdGhpcyB0aHJlYWQuIFRoZSBmYWN0IHRoYXQgeW91IGhhdmUgZW5mb3JjZW1lbnQgb2YgYSBt YXhpbXVtIGRvbWFpbiBhbGxvY2F0aW9uIGdpdmVzIHlvdSBhbiBleGNlbGxlbnQgdG9vbCB0byBr ZWVwIGEgZG9tYWluJ3MgdW5zdXBlcnZpc2VkIGdyb3d0aCBhdCBiYXkuIFRoZSB0b29sc3RhY2sg Y2FuIGNob29zZSBob3cgZmluZS1ncmFpbmVkLCBob3cgb2Z0ZW4gdG8gYmUgYWxlcnRlZCBhbmQg c3RhbGwgdGhlIGRvbWFpbi4KClRoZXJlIGlzIGEgZG93bi1jYWxsIChzbyBldmVudHMpIHRvIHRo ZSB0b29sLXN0YWNrIGZyb20gdGhlIGh5cGVydmlzb3Igd2hlbgp0aGUgZ3Vlc3QgdHJpZXMgdG8g YmFsbG9vbiBpbi9vdXQ/IFNvIHRoZSBuZWVkIGZvciB0aGlzIHByb2JsZW0gYXJvc2UKYnV0IHRo ZSBtZWNoYW5pc20gdG8gZGVhbCB3aXRoIGl0IGhhcyBiZWVuIHNoaWZ0ZWQgdG8gdGhlIHVzZXIt c3BhY2UKdGhlbj8gV2hhdCB0byBkbyB3aGVuIHRoZSBndWVzdCBkb2VzIHRoaXMgaW4vb3V0IGJh bGxvb24gYXQgZnJlcQppbnRlcnZhbHM/CgpJIGFtIG1pc3NpbmcgYWN0dWFsbHkgdGhlIHJlYXNv bmluZyBiZWhpbmQgd2FudGluZyB0byBzdGFsbCB0aGUgZG9tYWluPwpJcyB0aGF0IHRvIGNvbXBy ZXNzL3N3YXAgdGhlIHBhZ2VzIHRoYXQgdGhlIGd1ZXN0IHJlcXVlc3RzPyBNZWFuaW5nCmFuIHVz ZXItc3BhY2UgZGFlbW9uIHRoYXQgZG9lcyAidGhpbmdzIiBhbmQgaGFzIG93bmVyc2hpcApvZiB0 aGUgcGFnZXM/Cgo+IAo+ID4gYW5kIHNvbWUgcmVhbCBPcmFjbGUgTGludXggY3VzdG9tZXJzIHVz ZSBhbmQgZGVwZW5kIG9uIHRoZSBmbGV4aWJpbGl0eQo+ID4gcHJvdmlkZWQgYnkgaW4tZ3Vlc3Qg YmFsbG9vbmluZy4gICBTbyBndWVzdC1wcml2aWxlZ2VkLXVzZXItZHJpdmVuLQo+ID4gYmFsbG9v bmluZyBpcyBhIHBvdGVudGlhbCBpc3N1ZSBmb3IgdG9vbHN0YWNrLWJhc2VkIGNhcGFjaXR5IGFs bG9jYXRpb24uCj4gPiAKPiA+IFtJSUdUOiBUaGlzIGlzIHdoeSBJIGhhdmUgYnJvdWdodCB1cCBE TUMgc2V2ZXJhbCB0aW1lcyBhbmQgaGF2ZQo+ID4gY2FsbGVkIHRoaXMgdGhlICJDaXRyaXggbW9k ZWwsIi4uIEknbSBub3QgdHJ5aW5nIHRvIGJlIHNuaXBweQo+ID4gb3IgaW1wdWduIHlvdXIgbW9y YWxzIGFzIG1haW50YWluZXJzLl0KPiA+IAo+ID4gQikgWGVuJ3MgcGFnZSBzaGFyaW5nIGZlYXR1 cmUgaGFzIHNsb3dseSBiZWVuIGNvbXBsZXRlZCBvdmVyIGEgbnVtYmVyCj4gPiBvZiByZWNlbnQg WGVuIHJlbGVhc2VzLiAgSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgbWFueQo+ ID4gcGFnZXMgb2Z0ZW4gY29udGFpbiBpZGVudGljYWwgZGF0YTsgdGhlIGh5cGVydmlzb3IgbWVy Z2VzIHRoZW0gdG8gc2F2ZQo+IAo+IEdyZWF0IGNhcmUgaGFzIGJlZW4gdGFrZW4gZm9yIHRoaXMg c3RhdGVtZW50IHRvIG5vdCBiZSBleGFjdGx5IHRydWUuIFRoZSBoeXBlcnZpc29yIGRpc2NhcmRz IG9uZSBvZiB0d28gcGFnZXMgdGhhdCB0aGUgdG9vbHN0YWNrIHRlbGxzIGl0IHRvIChhbmQgcGF0 Y2hlcyB0aGUgcGh5c21hcCBvZiB0aGUgVk0gcHJldmlvdXNseSBwb2ludGluZyB0byB0aGUgZGlz Y2FyZCBwYWdlKS4gSXQgZG9lc24ndCBtZXJnZSwgbm9yIGRvZXMgaXQgbG9vayBpbnRvIGNvbnRl bnRzLiBUaGUgaHlwZXJ2aXNvciBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIHBhZ2UgY29udGVudHMu IFRoaXMgaXMgZGVsaWJlcmF0ZSwgc28gYXMgdG8gYXZvaWQgc3B1cmlvdXMgY2xhaW1zIG9mICJ5 b3UgYXJlIHVzaW5nIHRlY2huaXF1ZSBYISIKPiAKCklzIHRoZSB0b29sc3RhY2sgKG9yIGEgZGFl bW9uIGluIHVzZXJzcGFjZSkgZG9pbmcgdGhpcz8gSSB3b3VsZApoYXZlIHRob3VnaHQgdGhhdCB0 aGVyZSB3b3VsZCBiZSBzb21lIG9wdGltaXphdGlvbiB0byBkbyB0aGlzCnNvbWV3aGVyZT8KCj4g PiBwaHlzaWNhbCBSQU0uICBXaGVuIGFueSAic2hhcmVkIiBwYWdlIGlzIHdyaXR0ZW4sIHRoZSBo eXBlcnZpc29yCj4gPiAic3BsaXRzIiB0aGUgcGFnZSAoYWthLCBjb3B5LW9uLXdyaXRlKSBieSBh bGxvY2F0aW5nIGEgbmV3IHBoeXNpY2FsCj4gPiBwYWdlLiAgVGhlcmUgaXMgYSBsb25nIGhpc3Rv cnkgb2YgdGhpcyBmZWF0dXJlIGluIG90aGVyIHZpcnR1YWxpemF0aW9uCj4gPiBwcm9kdWN0cyBh bmQgaXQgaXMga25vd24gdG8gYmUgcG9zc2libGUgdGhhdCwgdW5kZXIgbWFueSBjaXJjdW1zdGFu Y2VzLCB0aG91c2FuZHMgb2Ygc3BsaXRzIG1heSBvY2N1ciBpbiBhbnkgZnJhY3Rpb24gb2YgYSBz ZWNvbmQuICBUaGUKPiA+IGh5cGVydmlzb3IgZG9lcyBub3Qgbm90aWZ5IG9yIGFzayBwZXJtaXNz aW9uIG9mIHRoZSB0b29sc3RhY2suCj4gPiBTbywgcGFnZS1zcGxpdHRpbmcgaXMgYW4gaXNzdWUg Zm9yIHRvb2xzdGFjay1iYXNlZCBjYXBhY2l0eQo+ID4gYWxsb2NhdGlvbiwgYXQgbGVhc3QgYXMg Y3VycmVudGx5IGNvZGVkIGluIFhlbi4KPiA+IAo+ID4gW0FuZHJlOiBQbGVhc2UgaG9sZCB5b3Vy IG9iamVjdGlvbiBoZXJlIHVudGlsIHlvdSByZWFkIGZ1cnRoZXIuXQo+IAo+IE5hbWUgaXMgQW5k cmVzLiBBbmQgcGxlYXNlIGNjIG1lIGlmIHlvdSdsbCBiZSBhZGRyZXNzaW5nIG1lIGRpcmVjdGx5 IQo+IAo+IE5vdGUgdGhhdCBJIGRvbid0IGRpc2FncmVlIHdpdGggeW91ciBwcmV2aW91cyBzdGF0 ZW1lbnQgaW4gaXRzZWxmLiBBbHRob3VnaCAicGFnZS1zcGxpdHRpbmciIGlzIGZhaXJseSB1bmlx dWUgdGVybWlub2xvZ3ksIGFuZCBjb25mdXNpbmcgKGF0IGxlYXN0IHRvIG1lKS4gQ29XIHdvcmtz LgoKPG5vZHM+Cj4gCj4gPiAKPiA+IEMpIFRyYW5zY2VuZGVudCBNZW1vcnkgKCJ0bWVtIikgaGFz IGV4aXN0ZWQgaW4gdGhlIFhlbiBoeXBlcnZpc29yIGFuZAo+ID4gdG9vbHN0YWNrIGZvciBvdmVy IHRocmVlIHllYXJzLiAgSXQgZGVwZW5kcyBvbiBhbiBpbi1ndWVzdC1rZXJuZWwKPiA+IGFkYXB0 aXZlIHRlY2huaXF1ZSB0byBjb25zdGFudGx5IGFkanVzdCB0aGUgZG9tYWluIG1lbW9yeSBmb290 cHJpbnQgYXMKPiA+IHdlbGwgYXMgaG9va3MgaW4gdGhlIGluLWd1ZXN0LWtlcm5lbCB0byBtb3Zl IGRhdGEgdG8gYW5kIGZyb20gdGhlCj4gPiBoeXBlcnZpc29yLiAgV2hpbGUgdGhlIGRhdGEgaXMg aW4gdGhlIGh5cGVydmlzb3IncyBjYXJlLCBpbnRlcmVzdGluZwo+ID4gbWVtb3J5LWxvYWQgYmFs YW5jaW5nIGJldHdlZW4gZ3Vlc3RzIGlzIGRvbmUsIGluY2x1ZGluZyBvcHRpb25hbAo+ID4gY29t cHJlc3Npb24gYW5kIGRlZHVwbGljYXRpb24uICBBbGwgb2YgdGhpcyBoYXMgYmVlbiBpbiBYZW4g c2luY2UgMjAwOQo+ID4gYW5kIGhhcyBiZWVuIGF3YWl0aW5nIGNoYW5nZXMgaW4gdGhlIChndWVz dC1zaWRlKSBMaW51eCBrZXJuZWwuIFRob3NlCj4gPiBjaGFuZ2VzIGFyZSBub3cgbWVyZ2VkIGlu dG8gdGhlIG1haW5zdHJlYW0ga2VybmVsIGFuZCBhcmUgZnVsbHkKPiA+IGZ1bmN0aW9uYWwgaW4g c2hpcHBpbmcgZGlzdHJvcy4KPiA+IAo+ID4gV2hpbGUgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBv ZiB0bWVtJ3MgZ3Vlc3Q8LT5oeXBlcnZpc29yIGludGVyYWN0aW9uCj4gPiBpcyBiZXlvbmQgdGhl IHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQsIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kCj4g PiB0aGF0IGFueSB0bWVtLWVuYWJsZWQgZ3Vlc3Qga2VybmVsIG1heSB1bnByZWRpY3RhYmx5IHJl cXVlc3QgdGhvdXNhbmRzCj4gPiBvciBldmVuIG1pbGxpb25zIG9mIHBhZ2VzIGRpcmVjdGx5IHZp YSBoeXBlcmNhbGxzIGZyb20gdGhlIGh5cGVydmlzb3IgaW4gYSBmcmFjdGlvbiBvZiBhIHNlY29u ZCB3aXRoIGFic29sdXRlbHkgbm8gaW50ZXJhY3Rpb24gd2l0aCB0aGUgdG9vbHN0YWNrLiAgRnVy dGhlciwgdGhlIGd1ZXN0LXNpZGUgaHlwZXJjYWxscyB0aGF0IGFsbG9jYXRlIHBhZ2VzCj4gPiB2 aWEgdGhlIGh5cGVydmlzb3IgYXJlIGRvbmUgaW4gImF0b21pYyIgY29kZSBkZWVwIGluIHRoZSBM aW51eCBtbQo+ID4gc3Vic3lzdGVtLgo+ID4gCj4gPiBJbmRlZWQsIGlmIG9uZSB0cnVseSB1bmRl cnN0YW5kcyB0bWVtLCBpdCBzaG91bGQgYmVjb21lIGNsZWFyIHRoYXQKPiA+IHRtZW0gaXMgZnVu ZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0b29sc3RhY2stYmFzZWQgY2FwYWNpdHkKPiA+ IGFsbG9jYXRpb24uIEJ1dCBsZXQncyBzdG9wIGRpc2N1c3NpbmcgdG1lbSBmb3Igbm93IGFuZCBt b3ZlIG9uLgo+IAo+IFlvdSBoYXZlIG5vdCBkaXNjdXNzZWQgdG1lbSBwb29sIHRoYXcgYW5kIGZy ZWV6ZSBpbiB0aGlzIHByb3Bvc2FsLgoKT29vaCwgeW91IGtub3cgYWJvdXQgaXQgOi0pIERhbiBk aWRuJ3Qgd2FudCB0byBnbyB0b28gdmVyYm9zZSBvbgpwZW9wbGUuIEl0IGlzIGEgYml0IG9mIHJh dGhvbGUgLSBhbmQgdGhpcyBoeXBlcmNhbGwgd291bGQKYWxsb3cgdG8gZGVwcmVjYXRlIHNhaWQg ZnJlZXplL3RoYXcgY2FsbHMuCgo+IAo+ID4gCj4gPiBPSy4gIFNvIHdpdGggZXhpc3RpbmcgY29k ZSBib3RoIGluIFhlbiBhbmQgTGludXggZ3Vlc3RzLCB0aGVyZSBhcmUKPiA+IHRocmVlIGNoYWxs ZW5nZXMgdG8gdG9vbHN0YWNrLWJhc2VkIGNhcGFjaXR5IGFsbG9jYXRpb24uICBXZSdkCj4gPiBy ZWFsbHkgc3RpbGwgbGlrZSB0byBkbyBjYXBhY2l0eSBhbGxvY2F0aW9uIGluIHRoZSB0b29sc3Rh Y2suICBDYW4KPiA+IHNvbWV0aGluZyBiZSBkb25lIGluIHRoZSB0b29sc3RhY2sgdG8gImZpeCIg dGhlc2UgdGhyZWUgY2FzZXM/Cj4gPiAKPiA+IFBvc3NpYmx5LiAgQnV0IGxldCdzIGZpcnN0IGxv b2sgYXQgaHlwZXJ2aXNvci1iYXNlZCBjYXBhY2l0eQo+ID4gYWxsb2NhdGlvbjogdGhlIHByb3Bv c2VkICJYRU5NRU1fY2xhaW1fcGFnZXMiIGh5cGVyY2FsbC4KPiA+IAo+ID4gSFlQRVJWSVNPUi1C QVNFRCBDQVBBQ0lUWSBBTExPQ0FUSU9OCj4gPiAKPiA+IFRoZSBwb3N0ZWQgcGF0Y2ggZm9yIHRo ZSBjbGFpbSBoeXBlcmNhbGwgaXMgcXVpdGUgc2ltcGxlLCBidXQgbGV0J3MKPiA+IGxvb2sgYXQg aXQgaW4gZGV0YWlsLiAgVGhlIGNsYWltIGh5cGVyY2FsbCBpcyBhY3R1YWxseSBhIHN1Ym9wCj4g PiBvZiBhbiBleGlzdGluZyBoeXBlcmNhbGwuICBBZnRlciBjaGVja2luZyBwYXJhbWV0ZXJzIGZv ciB2YWxpZGl0eSwKPiA+IGEgbmV3IGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgY29yZSBYZW4g bWVtb3J5IG1hbmFnZW1lbnQgY29kZS4KPiA+IFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGh5cGVy dmlzb3IgaGVhcGxvY2ssIGNoZWNrcyBmb3IgYSBmZXcKPiA+IHNwZWNpYWwgY2FzZXMsIGRvZXMg c29tZSBhcml0aG1ldGljIHRvIGVuc3VyZSBhIHZhbGlkIGNsYWltLCBzdGFrZXMKPiA+IHRoZSBj bGFpbSwgcmVsZWFzZXMgdGhlIGh5cGVydmlzb3IgaGVhcGxvY2ssIGFuZCB0aGVuIHJldHVybnMu ICBUbwo+ID4gcmV2aWV3IGZyb20gZWFybGllciwgdGhlIGh5cGVydmlzb3IgaGVhcGxvY2sgcHJv dGVjdHMgX2FsbF8gcGFnZS9zbGFiCj4gPiBhbGxvY2F0aW9ucywgc28gd2UgY2FuIGJlIGFic29s dXRlbHkgY2VydGFpbiB0aGF0IHRoZXJlIGFyZSBubyBvdGhlcgo+ID4gcGFnZSBhbGxvY2F0aW9u IHJhY2VzLiAgVGhpcyBuZXcgZnVuY3Rpb24gaXMgYWJvdXQgMzUgbGluZXMgb2YgY29kZSwKPiA+ IG5vdCBjb3VudGluZyBjb21tZW50cy4KPiA+IAo+ID4gVGhlIHBhdGNoIGluY2x1ZGVzIHR3byBv dGhlciBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBoeXBlcnZpc29yOgo+ID4gRmlyc3QsIHdo ZW4gYW55IGFkanVzdG1lbnQgdG8gYSBkb21haW4ncyBtZW1vcnkgZm9vdHByaW50IGlzIG1hZGUK PiA+IChlaXRoZXIgdGhyb3VnaCBhIHRvb2xzdGFjay1hd2FyZSBoeXBlcmNhbGwgb3Igb25lIG9m IHRoZSB0aHJlZQo+ID4gdG9vbHN0YWNrLXVuYXdhcmUgbWV0aG9kcyBkZXNjcmliZWQgYWJvdmUp LCB0aGUgaGVhcGxvY2sgaXMKPiA+IHRha2VuLCBhcml0aG1ldGljIGlzIGRvbmUsIGFuZCB0aGUg aGVhcGxvY2sgaXMgcmVsZWFzZWQuICBUaGlzCj4gPiBpcyAxMiBsaW5lcyBvZiBjb2RlLiAgU2Vj b25kLCB3aGVuIGFueSBtZW1vcnkgaXMgYWxsb2NhdGVkIHdpdGhpbgo+ID4gWGVuLCBhIGNoZWNr IG11c3QgYmUgbWFkZSAod2l0aCB0aGUgaGVhcGxvY2sgYWxyZWFkeSBoZWxkKSB0bwo+ID4gZGV0 ZXJtaW5lIGlmLCBnaXZlbiBhIHByZXZpb3VzIGNsYWltLCB0aGUgZG9tYWluIGhhcyBleGNlZWRl ZAo+ID4gaXRzIHVwcGVyIGJvdW5kLCBtYXhtZW0uICBUaGlzIGNvZGUgaXMgYSBzaW5nbGUgY29u ZGl0aW9uYWwgdGVzdC4KPiA+IAo+ID4gV2l0aCBzb21lIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBj b3VudGluZyB0aGUgY29waW91cyBjb21tZW50cywKPiA+IGFsbCB0b2xkLCB0aGUgbmV3IGNvZGUg cHJvdmlkZWQgYnkgdGhlIHBhdGNoIGlzIHdlbGwgdW5kZXIgMTAwIGxpbmVzLgo+ID4gCj4gPiBX aGF0IGFib3V0IHRoZSB0b29sc3RhY2sgc2lkZT8gIEZpcnN0LCBpdCdzIGltcG9ydGFudCB0byBu b3RlIHRoYXQKPiA+IHRoZSB0b29sc3RhY2sgY2hhbmdlcyBhcmUgZW50aXJlbHkgb3B0aW9uYWwu ICBJZiBhbnkgdG9vbHN0YWNrCj4gPiB3aXNoZXMgZWl0aGVyIHRvIG5vdCBmaXggdGhlIG9yaWdp bmFsIHByb2JsZW0sIG9yIGF2b2lkIHRvb2xzdGFjay0KPiA+IHVuYXdhcmUgYWxsb2NhdGlvbiBj b21wbGV0ZWx5IGJ5IGlnbm9yaW5nIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkCj4gPiBieSBp bi1ndWVzdCBiYWxsb29uaW5nLCBwYWdlLXNoYXJpbmcsIGFuZC9vciB0bWVtLCB0aGF0IHRvb2xz dGFjayBuZWVkCj4gPiBub3QgdXNlIHRoZSBuZXcgaHlwZXIgY2FsbC4KPiAKPiBZb3UgYXJlIHJ1 bGluZyBvdXQgYW55IG90aGVyIHBvc3NpYmlsaXR5IGhlcmUuIEluIHBhcnRpY3VsYXIsIGJ1dCBu b3QgbGltaXRlZCB0bywgdXNlIG9mIG1heF9wYWdlcy4KClRoZSBvbmUgbWF4X3BhZ2UgY2hlY2sg dGhhdCBjb21lcyB0byBteSBtaW5kIGlzIHRoZSBvbmUgdGhhdCBYYXBpCnVzZXMuIFRoYXQgaXMg aXQgaGFzIGEgZGFlbW9uIHRoYXQgc2V0cyB0aGUgbWF4X3BhZ2VzIG9mIGFsbCB0aGUKZ3Vlc3Rz IGF0IHNvbWUgdmFsdWUgc28gdGhhdCBpdCBjYW4gc3F1ZWV6ZSBpbiBhcyBtYW55IGd1ZXN0cyBh cwpwb3NzaWJsZS4gSXQgYWxzbyBiYWxsb29ucyBwYWdlcyBvdXQgb2YgYSBndWVzdCB0byBtYWtl IHNwYWNlIGlmCm5lZWQgdG8gbGF1bmNoLiBUaGUgaGV1cmVzdGljIG9mIGhvdyBtYW55IHBhZ2Vz IG9yIHRoZSByYXRpbwpvZiBtYXgvbWluIGxvb2tzIHRvIGJlIHByb3BvcnRpb25hbCAoc28gdG8g bWFrZSBzcGFjZSBmb3IgMUdCCmZvciBhIGd1ZXN0LCBhbmQgc2F5IHdlIGhhdmUgMTAgZ3Vlc3Rz LCB3ZSB3aWxsIHN1YnRyYWN0CjEwMU1CIGZyb20gZWFjaCBndWVzdCAtIHRoZSBleHRyYSAxTUIg aXMgZm9yIGV4dHJhIG92ZXJoZWFkKS4KVGhpcyBkZXBlbmRzIG9uIG9uZSBoeXBlcmNhbGwgdGhh dCAneGwnIG9yICd4bScgdG9vbHN0YWNrIGRvIG5vdAp1c2UgLSB3aGljaCBzZXRzIHRoZSBtYXhf cGFnZXMuCgpUaGF0IGNvZGUgbWFrZXMgY2VydGFpbiBhc3N1bXB0aW9ucyAtIHRoYXQgdGhlIGd1 ZXN0IHdpbGwgbm90IGdvL3VwIGRvd24KaW4gdGhlIGJhbGxvb25pbmcgb25jZSB0aGUgdG9vbHN0 YWNrIGhhcyBkZWNyZWVkIGhvdyBtdWNoCm1lbW9yeSB0aGUgZ3Vlc3Qgc2hvdWxkIHVzZS4gSXQg YWxzbyBhc3N1bWVzIHRoYXQgdGhlIG9wZXJhdGlvbnMKYXJlIHNlbWktYXRvbWljIC0gYW5kIHRv IG1ha2UgaXQgc28gYXMgbXVjaCBhcyBpdCBjYW4gLSBpdCBleGVjdXRlcwp0aGVzZSBvcGVyYXRp b25zIGluIHNlcmlhbC4KClRoaXMgZ29lcyBiYWNrIHRvIHRoZSBwcm9ibGVtIHN0YXRlbWVudCAt IGlmIHdlIHRyeSB0byBwYXJhbGxpemUKdGhpcyB3ZSBydW4gaW4gdGhlIHByb2JsZW0gdGhhdCB0 aGUgYW1vdW50IG9mIG1lbW9yeSB3ZSB0aG91Z2h0CndlIGZyZWUgaXMgbm90IHRydWUgYW55bW9y ZS4gVGhlIHN0YXJ0IG9mIHRoaXMgZW1haWwgaGFzIGEgZ29vZApkZXNjcmlwdGlvbiBvZiBzb21l IG9mIHRoZSBpc3N1ZXMuCgpJbiBlc3NlbmNlLCB0aGUgbWF4X3BhZ2VzIGRvZXMgd29yayAtIF9p Zl8gb25lIGRvZXMgdGhlc2Ugb3BlcmF0aW9ucwppbiBzZXJpYWwuIFdlIGFyZSB0cnlpbmcgdG8g bWFrZSB0aGlzIHdvcmsgaW4gcGFyYWxsZWwgYW5kIHdpdGhvdXQKYW55IGZhaWx1cmVzIC0gZm9y IHRoYXQgd2UgLSBvbmUgd2F5IHRoYXQgaXMgcXVpdGUgc2ltcGxpc3RpYwppcyB0aGUgY2xhaW0g aHlwZXJjYWxsLiBJdCBzZXRzIHVwIGEgJ3N0YWtlJyBvZiB0aGUgYW1vdW50IG9mCm1lbW9yeSB0 aGF0IHRoZSBoeXBlcnZpc29yIHNob3VsZCByZXNlcnZlLiBUaGlzIHdheSBvdGhlcgpndWVzdHMg Y3JlYXRpb25zLyBiYWxsb25uaW5nIGRvIG5vdCBpbmZyaW5nZSBvbiB0aGUgJ2NsYWltZWQnIGFt b3VudC4KCkkgYmVsaWV2ZSB3aXRoIHRoaXMgaHlwZXJjYWxsIHRoZSBYYXBpIGNhbiBiZSBtYWRl IHRvIGRvIGl0cyBvcGVyYXRpb25zCmluIHBhcmFsbGVsIGFzIHdlbGwuCgo+IAo+ID4gIFNlY29u ZCwgaXQncyB2ZXJ5IHJlbGV2YW50IHRvIG5vdGUgdGhhdCB0aGUgT3JhY2xlIHByb2R1Y3QgdXNl cyBhIGNvbWJpbmF0aW9uIG9mIGEgcHJvcHJpZXRhcnkgIm1hbmFnZXIiCj4gPiB3aGljaCBvdmVy c2VlcyBtYW55IG1hY2hpbmVzLCBhbmQgdGhlIG9sZGVyIG9wZW4tc291cmNlIHhtL3hlbmQKPiA+ IHRvb2xzdGFjaywgZm9yIHdoaWNoIHRoZSBjdXJyZW50IFhlbiB0b29sc3RhY2sgbWFpbnRhaW5l cnMgYXJlIG5vCj4gPiBsb25nZXIgYWNjZXB0aW5nIHBhdGNoZXMuCj4gPiAKPiA+IFRoZSBwcmVm YWNlIG9mIHRoZSBwdWJsaXNoZWQgcGF0Y2ggZG9lcyBzdWdnZXN0LCBob3dldmVyLCBzb21lCj4g PiBzdHJhaWdodGZvcndhcmQgcHNldWRvLWNvZGUsIGFzIGZvbGxvd3M6Cj4gPiAKPiA+IEN1cnJl bnQgdG9vbHN0YWNrIGRvbWFpbiBjcmVhdGlvbiBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlIGZyYWdt ZW50Ogo+ID4gCj4gPiAxLiBjYWxsIHBvcHVsYXRlX3BoeXNtYXAgcmVwZWF0ZWRseSB0byBhY2hp ZXZlIG1lbT1OIG1lbW9yeQo+ID4gMi4gaWYgYW55IHBvcHVsYXRlX3BoeXNtYXAgY2FsbCBmYWls cywgcmVwb3J0IC1FTk9NRU0gdXAgdGhlIHN0YWNrCj4gPiAzLiBtZW1vcnkgaXMgaGVsZCB1bnRp bCBkb21haW4gZGllcyBvciB0aGUgdG9vbHN0YWNrIGRlY3JlYXNlcyBpdAo+ID4gCj4gPiBQcm9w b3NlZCB0b29sc3RhY2sgZG9tYWluIGNyZWF0aW9uIG1lbW9yeSBhbGxvY2F0aW9uIGNvZGUgZnJh Z21lbnQKPiA+IChuZXcgY29kZSBtYXJrZWQgd2l0aCAiKyIpOgo+ID4gCj4gPiArICBjYWxsIGNs YWltIGZvciBtZW09TiBhbW91bnQgb2YgbWVtb3J5Cj4gPiArLiBpZiBjbGFpbSBzdWNjZWVkczoK PiA+IDEuICBjYWxsIHBvcHVsYXRlX3BoeXNtYXAgcmVwZWF0ZWRseSB0byBhY2hpZXZlIG1lbT1O IG1lbW9yeSAoZmFpbHNhZmUpCj4gPiArICBlbHNlCj4gPiAyLiAgcmVwb3J0IC1FTk9NRU0gdXAg dGhlIHN0YWNrCj4gPiArICBjbGFpbSBpcyBoZWxkIHVudGlsIG1lbT1OIGlzIGFjaGlldmVkIG9y IHRoZSBkb21haW4gZGllcyBvcgo+ID4gICAgZm9yY2VkIHRvIDAgYnkgYSBzZWNvbmQgaHlwZXJj YWxsCj4gPiAzLiBtZW1vcnkgaXMgaGVsZCB1bnRpbCBkb21haW4gZGllcyBvciB0aGUgdG9vbHN0 YWNrIGRlY3JlYXNlcyBpdAo+ID4gCj4gPiBSZXZpZXdpbmcgdGhlIHBzZXVkby1jb2RlLCBvbmUg Y2FuIHJlYWRpbHkgc2VlIHRoYXQgdGhlIHRvb2xzdGFjawo+ID4gY2hhbmdlcyByZXF1aXJlZCB0 byBpbXBsZW1lbnQgdGhlIGh5cGVyY2FsbCBhcmUgcXVpdGUgc21hbGwuCj4gPiAKPiA+IFRvIGNv bXBsZXRlIHRoaXMgZGlzY3Vzc2lvbiwgaXQgaGFzIGJlZW4gcG9pbnRlZCBvdXQgdGhhdAo+ID4g dGhlIHByb3Bvc2VkIGh5cGVyY2FsbCBkb2Vzbid0IHNvbHZlIHRoZSBvcmlnaW5hbCBwcm9ibGVt Cj4gPiBmb3IgY2VydGFpbiBjbGFzc2VzIG9mIGxlZ2FjeSBkb21haW5zLi4uIGJ1dCBhbHNvIG5l aXRoZXIKPiA+IGRvZXMgaXQgbWFrZSB0aGUgcHJvYmxlbSB3b3JzZS4gIEl0IGhhcyBhbHNvIGJl ZW4gcG9pbnRlZAo+ID4gb3V0IHRoYXQgdGhlIHByb3Bvc2VkIHBhdGNoIGlzIG5vdCAoeWV0KSBO VU1BLWF3YXJlLgo+ID4gCj4gPiBOb3cgbGV0J3MgcmV0dXJuIHRvIHRoZSBlYXJsaWVyIHF1ZXN0 aW9uOiAgVGhlcmUgYXJlIHRocmVlIAo+ID4gY2hhbGxlbmdlcyB0byB0b29sc3RhY2stYmFzZWQg Y2FwYWNpdHkgYWxsb2NhdGlvbiwgd2hpY2ggYXJlCj4gPiBhbGwgaGFuZGxlZCBlYXNpbHkgYnkg aW4taHlwZXJ2aXNvciBjYXBhY2l0eSBhbGxvY2F0aW9uLiBCdXQgd2UnZAo+ID4gcmVhbGx5IHN0 aWxsIGxpa2UgdG8gZG8gY2FwYWNpdHkgYWxsb2NhdGlvbiBpbiB0aGUgdG9vbHN0YWNrLgo+ID4g Q2FuIHNvbWV0aGluZyBiZSBkb25lIGluIHRoZSB0b29sc3RhY2sgdG8gImZpeCIgdGhlc2UgdGhy ZWUgY2FzZXM/Cj4gPiAKPiA+IFRoZSBhbnN3ZXIgaXMsIG9mIGNvdXJzZSwgY2VydGFpbmx5Li4u IGFueXRoaW5nIGNhbiBiZSBkb25lIGluCj4gPiBzb2Z0d2FyZS4gIFNvLCByZWNhbGxpbmcgSWFu IEphY2tzb24ncyBzdGF0ZWQgcmVxdWlyZW1lbnQ6Cj4gPiAKPiA+ICJBbnkgZnVuY3Rpb25hbGl0 eSB3aGljaCBjYW4gYmUgcmVhc29uYWJseSBwcm92aWRlZCBvdXRzaWRlIHRoZQo+ID4gIGh5cGVy dmlzb3Igc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gaXQuIgo+ID4gCj4gPiB3ZSBhcmUgbm93IGxl ZnQgdG8gZXZhbHVhdGUgdGhlIHN1YmplY3RpdmUgdGVybSAicmVhc29uYWJseSIuCj4gPiAKPiA+ IENBTiBUT09MU1RBQ0stQkFTRUQgQ0FQQUNJVFkgQUxMT0NBVElPTiBPVkVSQ09NRSBUSEUgSVNT VUVTPwo+ID4gCj4gPiBJbiBlYXJsaWVyIGRpc2N1c3Npb24gb24gdGhpcyB0b3BpYywgd2hlbiBw YWdlLXNwbGl0dGluZyB3YXMgcmFpc2VkCj4gPiBhcyBhIGNvbmNlcm4sIHNvbWUgb2YgdGhlIGF1 dGhvcnMgb2YgWGVuJ3MgcGFnZS1zaGFyaW5nIGZlYXR1cmUKPiA+IHBvaW50ZWQgb3V0IHRoYXQg YSBtZWNoYW5pc20gY291bGQgYmUgZGVzaWduZWQgc3VjaCB0aGF0ICJiYXRjaGVzIgo+ID4gb2Yg cGFnZXMgd2VyZSBwcmUtYWxsb2NhdGVkIGJ5IHRoZSB0b29sc3RhY2sgYW5kIHByb3ZpZGVkIHRv IHRoZQo+ID4gaHlwZXJ2aXNvciB0byBiZSB1dGlsaXplZCBhcyBuZWVkZWQgZm9yIHBhZ2Utc3Bs aXR0aW5nLiAgU2hvdWxkIHRoZQo+ID4gYmF0Y2ggcnVuIGRyeSwgdGhlIGh5cGVydmlzb3IgY291 bGQgc3RvcCB0aGUgZG9tYWluIHRoYXQgd2FzIHByb3Zva2luZwo+ID4gdGhlIHBhZ2Utc3BsaXQg dW50aWwgdGhlIHRvb2xzdGFjayBjb3VsZCBiZSBjb25zdWx0ZWQgYW5kIHRoZSB0b29sc3RhY2ss IGF0IGl0cyBsZWlzdXJlLCBjb3VsZCByZXF1ZXN0IHRoZSBoeXBlcnZpc29yIHRvIHJlZmlsbAo+ ID4gdGhlIGJhdGNoLCB3aGljaCB0aGVuIGFsbG93cyB0aGUgcGFnZS1zcGxpdC1jYXVzaW5nIGRv bWFpbiB0byBwcm9jZWVkLgo+ID4gCj4gPiBCdXQgdGhpcyBiYXRjaCBwYWdlLWFsbG9jYXRpb24g aXNuJ3QgaW1wbGVtZW50ZWQgaW4gWGVuIHRvZGF5Lgo+ID4gCj4gPiBBbmRyZXMgTGFnYXItQ2F2 aWxsYSBzYXlzICIuLi4gdGhpcyBpcyBiZWNhdXNlIG9mIHNob3J0Y29taW5ncyBpbiB0aGUKPiA+ IFtYZW5dIG1tIGxheWVyIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB3YWl0IHF1ZXVlcywgZG9j dW1lbnRlZAo+ID4gZWxzZXdoZXJlLiIgIEluIG90aGVyIHdvcmRzLCB0aGlzIGJhdGNoaW5nIHBy b3Bvc2FsIHJlcXVpcmVzCj4gPiBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBoeXBlcnZpc29y LCB3aGljaCBJIHRoaW5rIHdlCj4gPiBhbGwgYWdyZWVkIHdlIHdlcmUgdHJ5aW5nIHRvIGF2b2lk Lgo+IAo+IFRoaXMgaXMgYSBtaXN1bmRlcnN0YW5kaW5nLiBUaGVyZSBpcyBubyBjb25uZWN0aW9u IGJldHdlZW4gdGhlIGJhdGNoaW5nIHByb3Bvc2FsIGFuZCB3aGF0IEkgd2FzIHJlZmVycmluZyB0 byBpbiB0aGUgcXVvdGUuIENlcnRhaW5seSBJIG5ldmVyIGFkdm9jYXRlZCBmb3IgcHJlLWFsbG9j YXRpb25zLgo+IAo+IFRoZSAic2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgaHlwZXJ2aXNvciIg c3RhdGVtZW50IGlzIEZVRC4gRXZlcnlvbmUgeW91J3ZlIGFkZHJlc3NlZCBvbiB0aGlzIGVtYWls IG1ha2VzIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGh5cGVydmlzb3IsIHVuZGVyIHRoZSBw cm92aXNvIHRoYXQgdGhleSBhcmUgbmVjZXNzYXJ5L3VzZWZ1bCBjaGFuZ2VzLgo+IAo+IFRoZSBp bnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgbW0gbGF5ZXIgYW5kIHdhaXQgcXVldWVzIG5lZWQgZml4 aW5nLCBzb29uZXIgb3IgbGF0ZXIsIGNsYWltIGh5cGVyIGNhbGwgb3Igbm90LiBCdXQgdGhleSBh cmUgbm90IGEgYmxvY2tlciwgdGhleSBhcmUgZXNzZW50aWFsbHkgYSByYWNlIHRoYXQgbWF5IHRy aWdnZXIgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBUaGF0IGlzIHdoeSB0aGV5IHJlbWFp biBhIGxvdyBwcmlvcml0eSBmaXguCj4gCj4gPiAKPiA+IFtOb3RlIHRvIEFuZHJlOiBJJ20gbm90 IG9iamVjdGluZyB0byB0aGUgbmVlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5Cj4gPiBmb3IgcGFn ZS1zaGFyaW5nIHRvIHdvcmsgd2l0aCBwcm9wcmlldGFyeSBrZXJuZWxzIGFuZCBETUM7IGp1c3QK PiAKPiBMZXQgbWUgbmlwIHRoaXMgYXQgdGhlIGJ1ZC4gSSB1c2UgcGFnZSBzaGFyaW5nIGFuZCBv dGhlciB0ZWNobmlxdWVzIGluIGFuIGVudmlyb25tZW50IHRoYXQgZG9lc24ndCB1c2UgQ2l0cml4 J3MgRE1DLCBub3IgaXMgZm9jdXNlZCBvbmx5IG9uIHByb3ByaWV0YXJ5IGtlcm5lbHMuLi4KPiAK PiA+IHBvaW50aW5nIG91dCB0aGF0IGl0LCB0b28sIGlzIGRlcGVuZGVudCBvbiBmdXJ0aGVyIGh5 cGVydmlzb3IgY2hhbmdlcy5dCj4gCj4g4oCmIHdpdGggNC4yIFhlbi4gSXQgaXMgbm90IHBlcmZl Y3QgYW5kIGhhcyBsaW1pdGF0aW9ucyB0aGF0IEkgYW0gdHJ5aW5nIHRvIGZpeC4gQnV0IG91ciBw cm9kdWN0IHNoaXBzLCBhbmQgcGFnZSBzaGFyaW5nIHdvcmtzIGZvciBhbnlvbmUgd2hvIHdvdWxk IHdhbnQgdG8gY29uc3VtZSBpdCwgaW5kZXBlbmRlbnRseSBvZiBmdXJ0aGVyIGh5cGVydmlzb3Ig Y2hhbmdlcy4KPiAKCkkgYmVsaWV2ZSBEYW4gaXMgc2F5aW5nIGlzIHRoYXQgaXQgaXMgbm90IGVu YWJsZWQgYnkgZGVmYXVsdC4KTWVhbmluZyBpdCBkb2VzIG5vdCBnZXQgZXhlY3V0ZWQgaW4gYnkg L2V0Yy9pbml0LmQveGVuY29tbW9ucyBhbmQKYXMgc3VjaCBpdCBuZXZlciBnZXRzIHJ1biAob3Ig ZG9lcyBpdCBub3c/KSAtIHVubGVzcyBvbmUga25vd3MKYWJvdXQgaXQgLSBvciBpdCBpcyBlbmFi bGVkIGJ5IGRlZmF1bHQgaW4gYSBwcm9kdWN0LiBCdXQgcGVyaGFwcwp3ZSBhcmUgYm90aCBtaXN0 YWtlbj8gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0IG5vdyBvbiB4ZW4tdW5zdGFibGU/Cgo+ID4g Cj4gPiBTdWNoIGFuIGFwcHJvYWNoIG1ha2VzIHNlbnNlIGluIHRoZSBtaW49PW1heCBtb2RlbCBl bmZvcmNlZCBieQo+ID4gRE1DIGJ1dCwgYWdhaW4sIERNQyBpcyBub3QgcHJlc2NyaWJlZCBieSB0 aGUgdG9vbHN0YWNrLgo+ID4gCj4gPiBGdXJ0aGVyLCB0aGlzIHdhaXRxdWV1ZSBzb2x1dGlvbiBm b3IgcGFnZS1zcGxpdHRpbmcgb25seSBhd2t3YXJkbHkKPiA+IHdvcmtzIGFyb3VuZCBpbi1ndWVz dCBiYWxsb29uaW5nIChwcm9iYWJseSBvbmx5IHdpdGggbW9yZSBoeXBlcnZpc29yCj4gPiBjaGFu Z2VzLCBUQkQpIGFuZCB3b3VsZCBiZSB1c2VsZXNzIGZvciB0bWVtLiAgW0lJR1Q6IFBsZWFzZSBh cmd1ZQo+ID4gdGhpcyBsYXN0IHBvaW50IG9ubHkgaWYgeW91IGZlZWwgY29uZmlkZW50IHlvdSB0 cnVseSB1bmRlcnN0YW5kIGhvdwo+ID4gdG1lbSB3b3Jrcy5dCj4gCj4gSSB3aWxsIGFyZ3VlIHRo b3VnaCB0aGF0ICJ3YWl0cXVldWUgc29sdXRpb24g4oCmIGJhbGxvb25pbmciIGlzIG5vdCB0cnVl LiBCYWxsb29uaW5nIGhhcyBuZXZlciBuZWVkZWQgbm9yIGl0IHN1ZGRlbmx5IG5lZWRzIG5vdyBo eXBlcnZpc29yIHdhaXQgcXVldWVzLgoKSXQgaXMgdGhlIHVzZSBjYXNlIG9mIHBhcmFsbGVsIHN0 YXJ0cyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gc29sdmUuCldvcnN0IC0gd2Ugd2FudCB0byBzdGFy dCAxNkdCIG9yIDMyR0IgZ3Vlc3RzIGFuZCB0aG9zZSBzZWVtIHRvIHRha2UKcXVpdGUgYSBiaXQg b2YgdGltZS4KCj4gCj4gPiAKPiA+IFNvIHRoaXMgYXMteWV0LXVuaW1wbGVtZW50ZWQgc29sdXRp b24gb25seSByZWFsbHkgc29sdmVzIGEgcGFydAo+ID4gb2YgdGhlIHByb2JsZW0uCj4gCj4gQXMg cGVyIHRoZSBwcmV2aW91cyBjb21tZW50cywgSSBkb24ndCBzZWUgeW91ciBjaGFyYWN0ZXJpemF0 aW9uIGFzIGFjY3VyYXRlLgo+IAo+IEFuZHJlcwo+ID4gCj4gPiBBcmUgdGhlcmUgYW55IG90aGVy IHBvc3NpYmlsaXRpZXMgcHJvcG9zZWQ/ICBJYW4gSmFja3NvbiBoYXMKPiA+IHN1Z2dlc3RlZCBh IHNvbWV3aGF0IGRpZmZlcmVudCBhcHByb2FjaDoKPiA+IAo+ID4gTGV0IG1lIHF1b3RlIElhbiBK YWNrc29uIGFnYWluOgo+ID4gCj4gPiAiT2YgY291cnNlIGlmIGl0IGlzIHJlYWxseSBkZXNpcmVk IHRvIGhhdmUgZWFjaCBndWVzdCBtYWtlIGl0cyBvd24KPiA+IGRlY2lzaW9ucyBhbmQgc2ltcGx5 IGZvciB0aGVtIHRvIHNvbWVob3cgYWdyZWUgdG8gZGl2dnkgdXAgdGhlCj4gPiBhdmFpbGFibGUg cmVzb3VyY2VzLCB0aGVuIGV2ZW4gc28gYSBuZXcgaHlwZXJ2aXNvciBtZWNoYW5pc20gaXMKPiA+ IG5vdCBuZWVkZWQuICBBbGwgdGhhdCBpcyBuZWVkZWQgaXMgYSB3YXkgZm9yIHRob3NlIGd1ZXN0 cyB0bwo+ID4gc3luY2hyb25pc2UgdGhlaXIgYWNjZXNzZXMgYW5kIHVwZGF0ZXMgdG8gc2hhcmVk IHJlY29yZHMgb2YgdGhlCj4gPiBhdmFpbGFibGUgYW5kIGluLXVzZSBtZW1vcnkuIgo+ID4gCj4g PiBJYW4gdGhlbiBnb2VzIG9uIHRvIHNheTogICJJIGRvbid0IGhhdmUgYSBkZXRhaWxlZCBjb3Vu dGVyLXByb3Bvc2FsCj4gPiBkZXNpZ24gb2YgY291cnNlLi4uIgo+ID4gCj4gPiBUaGlzIHByb3Bv c2FsIGlzIGNlcnRhaW5seSBwb3NzaWJsZSwgYnV0IEkgdGhpbmsgbW9zdCB3b3VsZCBhZ3JlZSB0 aGF0Cj4gPiBpdCB3b3VsZCByZXF1aXJlIHNvbWUgZmFpcmx5IG1hc3NpdmUgY2hhbmdlcyBpbiBP UyBtZW1vcnkgbWFuYWdlbWVudAo+ID4gZGVzaWduIHRoYXQgd291bGQgcnVuIGNvbnRyYXJ5IHRv IG1hbnkgeWVhcnMgb2YgY29tcHV0aW5nIGhpc3RvcnkuCj4gPiBJdCByZXF1aXJlcyBndWVzdCBP UydzIHRvIGNvb3BlcmF0ZSB3aXRoIGVhY2ggb3RoZXIgYWJvdXQgYmFzaWMgbWVtb3J5Cj4gPiBt YW5hZ2VtZW50IGRlY2lzaW9ucy4gIEFuZCB0byB3b3JrIGZvciB0bWVtLCBpdCB3b3VsZCByZXF1 aXJlCj4gPiBjb21tdW5pY2F0aW9uIGZyb20gYXRvbWljIGNvZGUgaW4gdGhlIGtlcm5lbCB0byB1 c2VyLXNwYWNlLCB0aGVuIGNvbW11bmljYXRpb24gZnJvbSB1c2VyLXNwYWNlIGluIGEgZ3Vlc3Qg dG8gdXNlci1zcGFjZS1pbi1kb21haW4wCj4gPiBhbmQgdGhlbiAocHJlc3VtYWJseS4uLiBJIGRv bid0IGhhdmUgYSBkZXNpZ24gZWl0aGVyKSBiYWNrIGFnYWluLgo+ID4gT25lIG11c3QgYWxzbyB3 b25kZXIgd2hhdCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IHdvdWxkIGJlLgo+ID4gCj4gPiBDT05D TFVESU5HIFJFTUFSS1MKPiA+IAo+ID4gIkFueSBmdW5jdGlvbmFsaXR5IHdoaWNoIGNhbiBiZSBy ZWFzb25hYmx5IHByb3ZpZGVkIG91dHNpZGUgdGhlCj4gPiAgaHlwZXJ2aXNvciBzaG91bGQgYmUg ZXhjbHVkZWQgZnJvbSBpdC4iCj4gPiAKPiA+IEkgdGhpbmsgdGhpcyBkb2N1bWVudCBoYXMgZGVz Y3JpYmVkIGEgcmVhbCBjdXN0b21lciBwcm9ibGVtIGFuZAo+ID4gYSBnb29kIHNvbHV0aW9uIHRo YXQgY291bGQgYmUgaW1wbGVtZW50ZWQgZWl0aGVyIGluIHRoZSB0b29sc3RhY2sKPiA+IG9yIGlu IHRoZSBoeXBlcnZpc29yLiAgTWVtb3J5IGFsbG9jYXRpb24gaW4gZXhpc3RpbmcgWGVuIGZ1bmN0 aW9uYWxpdHkKPiA+IGhhcyBiZWVuIHNob3duIHRvIGludGVyZmVyZSBzaWduaWZpY2FudGx5IHdp dGggdGhlIHRvb2xzdGFjay1iYXNlZAo+ID4gc29sdXRpb24gYW5kIHN1Z2dlc3RlZCBwYXJ0aWFs IHNvbHV0aW9ucyB0byB0aG9zZSBpc3N1ZXMgZWl0aGVyCj4gPiByZXF1aXJlIGV2ZW4gbW9yZSBo eXBlcnZpc29yIHdvcmssIG9yIGFyZSBjb21wbGV0ZWx5IHVuZGVzaWduZWQgYW5kLAo+ID4gYXQg bGVhc3QsIGNhbGwgaW50byBxdWVzdGlvbiB0aGUgZGVmaW5pdGlvbiBvZiAicmVhc29uYWJseSIu Cj4gPiAKPiA+IFRoZSBoeXBlcnZpc29yLWJhc2VkIHNvbHV0aW9uIGhhcyBiZWVuIHNob3duIHRv IGJlIGV4dHJlbWVseQo+ID4gc2ltcGxlLCBmaXRzIHZlcnkgbG9naWNhbGx5IHdpdGggZXhpc3Rp bmcgWGVuIG1lbW9yeSBtYW5hZ2VtZW50Cj4gPiBtZWNoYW5pc21zL2NvZGUsIGFuZCBoYXMgYmVl biByZXZpZXdlZCB0aHJvdWdoIHNldmVyYWwgaXRlcmF0aW9ucwo+ID4gYnkgWGVuIGh5cGVydmlz b3IgZXhwZXJ0cy4KPiA+IAo+ID4gV2hpbGUgSSB1bmRlcnN0YW5kIGNvbXBsZXRlbHkgdGhlIFhl biBtYWludGFpbmVycycgZGVzaXJlIHRvCj4gPiBmZW5kIG9mZiB1bm5lY2Vzc2FyeSBhZGRpdGlv bnMgdG8gdGhlIGh5cGVydmlzb3IsIEkgYmVsaWV2ZQo+ID4gWEVOTUVNX2NsYWltX3BhZ2VzIGlz IGEgcmVhc29uYWJsZSBhbmQgbmF0dXJhbCBoeXBlcnZpc29yIGZlYXR1cmUKPiA+IGFuZCBJIGhv cGUgeW91IHdpbGwgbm93IEFjayB0aGUgcGF0Y2guCgoKSnVzdCBhcyBhIHN1bW1hcnkgYXMgdGhp cyBpcyBnZXR0aW5nIHRvIGJlIGEgbG9uZyB0aHJlYWQgLSBteQp1bmRlcnN0YW5kaW5nIGhhcyBi ZWVuIHRoYXQgdGhlIGh5cGVydmlzb3IgaXMgc3VwcG9zZSB0byB0b29sc3RhY2sKaW5kZXBlbmRl bnQuCgpPdXIgZmlyc3QgZ29hbCBpcyB0byBpbXBsZW1lbnQgdGhpcyBpbiAneGVuZCcgYXMgdGhh dAppcyB3aGF0IHdlIHVzZSByaWdodCBub3cuIFByb2JsZW0gd2lsbCBiZSBvZiBjb3Vyc2UgdG8g ZmluZCBzb21lYm9keQp0byByZXZpZXcgaXQgOi0oCgpXZSBjZXJ0YWlubHkgd2FudCB0byBpbXBs ZW1lbnQgdGhpcyBhbHNvIGluIHRoZSAneGwnIHRvb2wtc3RhY2sKYXMgaW4gdGhlIGZ1dHVyZSB0 aGF0IGlzIHdoYXQgd2Ugd2FudCB0byB1c2Ugd2hlbiB3ZSByZWJhc2UKb3VyIHByb2R1Y3Qgb24g WGVuIDQuMiBvciBncmVhdGVyLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9y ZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK