VGhlIG1hbnVmYWN0dXJlciBhbmQgdGhlaXIgZnJpZWxkIGFwcGxpY2F0aW9uIGVuZ2luZWVyIGhh cyByZWZ1c2VkIHRvCnByb3ZpZGUgbXVjaCBpbmZvcm1hdGlvbiBkdWUgdG8gImNvbXBhbnkgcG9s aWN5IiBhbmQgYSByZXN1bHQgSSBtdXN0IGFzawpoZXJlLgoKT24gRnJpZGF5LCBKdW5lIDcsIDIw MTksIERhdmlkIFZhbiBIb3JuIDxkYXZpZC52YW5ob3JuQGJhY2tjb3VudHJ5YWNjZXNzLmNvbT4K d3JvdGU6Cgo+IPCfmIogIE5pY2UgdG8gc2VlIHNvbWVvbmUgZWxzZSB3aG8gZXZlbiBrbm93cyB3 aGF0IHRoaXMgaXMuCj4gVGhlcmUncyBhIHZlcnkgbmljZSByZWxheSBoYW5kYm9vayBzaXR0aW5n IG9uIG15IHNoZWxmIGF0IGhvbWUgdGhhdCB0YWxrcwo+IHRvIHRoaXMsIE1pZ2h0IGJlIE1jR3Jh dy1IaWxsIGhhbmRib29rIG9mIHJlbGF5cz8KPiBUaGUgbWZnciBzaG91bGQgYmUgYWJsZSB0byB0 ZWxsIHlvdSB3aGF0IHRoZSB3ZXR0aW5nIGN1cnJlbnQgaXMuCj4gTWVyY3VyeSB3ZXR0ZWQgcmVs YXlzIGRvbid0IGhhdmUgdGhpcyBwcm9ibGVtLCBidXQgbWF5IG5vdCBiZSBhY2NlcHRhYmxlCj4g b3IgYXZhaWxhYmxlIGluIHlvdXIgYXBwbGljYXRpb24uCj4KPgo+IE1hbnkgeWVhcnMgYWdvIChs YXRlIDcwJ3M/KSBJIGhpdCB0aGlzIHdoZW4gZGlhZ25vc2luZyBhIHByb2JsZW0gd2l0aAo+IExp dHRvbiBQb2x5c2NpZW50aWZpYyBnbGFzcyBicmVhayBkZXRlY3RvcnMuCj4gVGhlIGRldGVjdG9y IGlzIGEgZ29sZCBwbGF0ZWQgcmluZyBzaXR0aW5nIG9uIGdvbGQgY29udGFjdHMgaW4gYSBzZWFs ZWQKPiBwbGFzdGljIGVuY2xvc3VyZS4KPiBUaGV5IHdvdWxkIGdvIG9wZW4gY2lyY3VpdCByYW5k b21seSBhbmQgSSBzcGVudCBtYW55IGhvdXJzIG91dCBhdCB2YXJpb3VzCj4gbG9jYXRpb25zIHRy eWluZyB0byBjYXRjaCBpdCBoYXBwZW5pbmcsIHdhdGNoaW5nIGEgYmF0dGVyeSBwb3dlcmVkIHNj b3BlLgo+IE15IGZpeCB3YXMgdG8gaW5jcmVhc2UgdGhlIGN1cnJlbnQgdXNlZCB0byBzZW5zZSB0 aGUgc3dpdGNoZXMuICAgMTAwJSBmaXgKPiBmb3IgdXMsIEkgcmVwb3J0ZWQgdGhpcyB0byBMaXR0 b24sIGFuZCB0aGV5IGluY29ycG9yYXRlZCBpdCBpbnRvIGxhdGVyCj4gdmVyc2lvbnMgb2YgdGhl aXIgcHJvZHVjdC4KPgo+IC0tCj4gRGF2aWQgVmFuSG9ybgo+IExlYWQgSGFyZHdhcmUgRW5naW5l ZXIKPgo+IEJhY2tjb3VudHJ5IEFjY2VzcywgSW5jLgo+IDI4MjAgV2lsZGVybmVzcyBQbCwgVW5p dCBICj4gQm91bGRlciwgQ08gIDgwMzAxIFVTQQo+IHBob25lOiAzMDMtNDE3LTEzNDUgIHgxMTAK PiBlbWFpbDogZGF2aWQudmFuaG9ybkBiYWNrY291bnRyeWFjY2Vzcy5jb20KPgo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tCj4gRnJvbTogcGljbGlzdC1ib3VuY2VzQG1pdC5lZHUgPHBpY2xp c3QtYm91bmNlc0BtaXQuZWR1PiBPbiBCZWhhbGYgT2YKPiBKYXNvbiBXaGl0ZQo+IFNlbnQ6IEZy aWRheSwgSnVuZSA3LCAyMDE5IDEyOjQ1IFBNCj4gVG86IE1pY3JvY29udHJvbGxlciBkaXNjdXNz aW9uIGxpc3QgLSBQdWJsaWMuIDxwaWNsaXN0QG1pdC5lZHU+Cj4gU3ViamVjdDogW0VFXSBMaW1p dCBzd2l0Y2ggY29udGFjdCB3ZXR0aW5nL2NsZWFuaW5nLCB2aWEgcmVzaXN0YW5jZSwKPiBjYXBh Y2l0YW5jZSBvciBpbmR1Y3RhbmNlPwo+Cj4gSGVsbG8gUElDTElTVCwKPgo+IEkgYW0gc2Vla2lu ZyBhZHZpY2UgYW5kIGV4cGVyaWVuY2Ugd2l0aCB3ZXR0aW5nIGN1cnJlbnQuIFBhcnRpY3VsYXJs eSB0aGUKPiB0aGVvcnkgYW5kIG1vZGUgb2Ygb3BlcmF0aW9uIG9mIHdldHRpbmcgY3VycmVudCAt IEkgc2VlIGEgbG90IG9mCj4gY29uZmxpY3RpbmcgaW5mb3JtYXRpb24gYW5kIHRoZXJlIHNlZW1z IHRvIGJlIG11bHRpcGxlIGRlZmluaXRpb25zIGFuZAo+IG1lY2hhbmlzbXMuCj4KPgo+IFRoZSBi ZXN0IHNvdXJjZSBJJ3ZlIHNlZW4gc28gZmFyIGlzICJORVkgQ29udGFjdCBNYW51YWw6IEVsZWN0 cmljYWwKPiBDb250YWN0cyBmb3IgTG93IEVuZXJneSBVc2VzIiAoYXZhaWxhYmxlIGZyb20gdGhl IE5FWSB3ZWJzaXRlKS4KPiBQYXJ0aWN1bGFybHkgc2VjdGlvbnMgMS43LCAxLjgsIGFuZCAxLjkg LSBjb3ZlcmluZyB0aGluIGZpbG1zLCB0aGljawo+IGZpbG1zLCBhcmNpbmcsIGFuZCBzb2Z0ZW5p bmcvbWVsdGluZyBvZiBjb250YWN0cy4KPgo+IEkndmUgbGVhcm5lZCB0aGF0IGV2ZW4gZ29sZCBj b250YWN0cyBkZXZlbG9wIGFuIGluc3VsYXRpbmcgZmlsbS4gQW5kIHRoZQo+IGluc3VsYXRpbmcg ZmlsbSBvbiBhbiBlbGVjdHJpY2FsIGNvbnRhY3QgaXMgYWx3YXlzIGdyb3dpbmcgdGhpY2tlciBv dmVyCj4gdGltZS4gV2V0dGluZy9jbGVhbmluZyBvZiB0aGUgZmlsbSBvZmYgdGhlIGNvbnRhY3Rz IGlzIHJlcXVpcmVkIHRvIHByZXZlbnQKPiBhIHRoaW4gZmlsbSAoPDIwIGFuZ3N0cm9tcywgdGhy b3VnaCB3aGljaCBsaW1pdGVkIGNvbmR1Y3Rpb24gY2FuIG9jY3VyIHZpYQo+IHR1bm5lbGluZykg ZnJvbSBncm93aW5nIGludG8gYSB0aGljayBmaWxtCj4gKD4xMDAgYW5nc3Ryb21zLCB0aHJvdWdo IHdoaWNoIG5vIGNvbmR1Y3Rpb24gY2FuIG9jY3VyKS4KPgo+Cj4gSSBoYXZlIGEgSG9uZXl3ZWxs IDIzU1gzOS1UIGxpbWl0IHN3aXRjaCB3aXRoICJnb2xkIGFsbG95IGNvbnRhY3RzIgo+IHRoYXQn cyBnb2luZyB0byBiZSB1c2VkIGluIGEgMjhWIERDIGFlcm9zcGFjZSBhcHBsaWNhdGlvbi4gSSB3 YW50IHRvCj4gInByb3Blcmx5IHdldCIgdGhlIGNvbnRhY3RzIGluIGFuIGF0dGVtcHQgdG8gZW5z dXJlIHRoYXQgdGhleSBsYXN0IGZvciBhCj4gZGVjYWRlIG9yIG1vcmUuIEJ1dCBJIGNhbid0IGRp c3NpcGF0ZSBtb3JlIHRoYW4gMTAwbVcuCj4KPiBDaXJjdWl0LXdpc2UsIHdoYXQgaXMgdGhlIGJl c3Qgd2F5IHRvICJ3ZXQiL2NsZWFuIHRoZSBzdXJmYWNlIG9mIHRoZQo+IGNvbnRhY3RzPwo+Cj4g QUZBSUssIHRoZXJlIGFyZSB0d28gbWVjaGFuaXNtcyB0aGF0IHdpbGwgY2xlYW4gdGhlIGNvbnRh Y3RzOgo+IGVsZWN0cmljYWwgYXJjaW5nICh1cG9uIGNvbnRhY3Qgb3BlbmluZyBvciBjbG9zdXJl KSBhbmQgbG9jYWxpemVkCj4gaGVhdGluZy93ZWxkaW5nICh3aGVuIHRoZSBjb250YWN0cyBhcmUg Y29tcGxldGVseSBjbG9zZWQpCj4KPiBJIGNhbiBpbWFnaW5lIHRocmVlIG1ldGhvZHM6Cj4gKiBJ IGNvdWxkIHVzZSBhIHJlc2lzdG9yIHRvIGZvcmNlIGEgbGFyZ2UgY3VycmVudCB0byBwYXNzIHRo cm91Z2ggdGhlCj4gY29udGFjdHMgYWxsIHRoZSB0aW1lIHdoZW4gY2xvc2VkLiBJZiB1bmxpbWl0 ZWQgcG93ZXIgZGlzc2lwYXRpb24gd2FzCj4gYWxsb3dlZCB0aGlzIHNlZW1zIGxpa2UgdGhlIHNp bXBsZXN0IG1ldGhvZC4KPiAqIEkgY291bGQgdXNlIGEgY2FwYWNpdG9yIGluIHBhcmFsbGVsIChS QyBzbnViYmVyLCBzZWUgYXR0YWNoZWQpIHdpdGggdGhlCj4gY29udGFjdHMgdG8gcHVzaCBhIG1v bWVudGFyeSBzdXJnZSBvZiBjdXJyZW50IHRocm91Z2ggdGhlIGNvbnRhY3RzIGFzIHRoZXkKPiBj bG9zZSAobWF5YmUgY2F1c2luZyBhcmNpbmcgb3Igc3BvdCBoZWF0aW5nKS4gVGhpcyBzZWVtcyBk b2FibGUuCj4gKiBJIGNvdWxkIHVzZSBhbiBpbmR1Y3RvciB0byBjcmVhdGUgYSB2b2x0YWdlIHNw aWtlIGFuZCBlbGVjdHJpY2FsIGFyYwo+IGFjcm9zcyB0aGUgY29udGFjdHMgYXMgdGhleSBvcGVu LiBUaGlzIGFsc28gc2VlbXMgZG9hYmxlLgo+Cj4gQW55IGFkdmljZSBhcyB0byB0aGUgbWFnbml0 dWRlIGFuZCBkdXJhdGlvbiBvZiBjdXJyZW50cz8KPgo+IEZvciB0aGUgcGFyYWxsZWwgY2FwYWNp dG9yIG1ldGhvZDogQSAxdUYgY2FwYWNpdG9yIGluIHNlcmllcyB3aXRoIGEgMzMgb2htCj4gcmVz aXN0b3IgcHJvZHVjZXMgYWJvdXQgODUwbUEgcGVhayB0aHJvdWdoIGEgc2hvcnQgY2lyY3VpdCwg YW5kIGF2ZXJhZ2VzCj4gYWJvdXQgMjUwbUEgb3ZlciBhIDEwMHVzIHBlcmlvZC4KPgo+IEkgYW0g Y3VycmVudGx5IGV2YWx1YXRpbmcgdGhlIGFiaWxpdHkgb2YgdGhlIHBhcmFsbGVsIFJDIG1ldGhv ZCB0byBwcm9kdWNlCj4gYXJjcyAodGhlIHByZXNlbmNlIG9mIGFyY3MgY2FuIGJlIGRldGVjdGVk IG15IG1lYXN1cmluZyB2b2x0YWdlIGFjcm9zcyB0aGUKPiBzd2l0Y2ggd2l0aCBhbiBvc2NpbGxv c2NvcGUpLiBXaGF0IEkgaGF2ZSBmb3VuZCBpcyB0aGF0IGl0IGlzIGhhcmQgdG8KPiByZWxpYWJs eSBzdHJpa2UgYW5kIG1haW50YWluIGFuIGFyYyB3aXRoIGEgcGFyYWxsZWwgUkMgY2lyY3VpdCB3 aXRoIHNhbmUKPiBjb21wb25lbnQgdmFsdWVzLiBJZiBJIHVzZSBhIHBhcmFsbGVsIGNhcGFjaXRv ciBpdCBzZWVtcyBsaWtlIEkgd2lsbCBoYXZlCj4gdG8gcmVseSB1cG9uIHRoZSBzdXJnZSBjdXJy ZW50IGluc3RlYWQgdG8gY2xlYW4gdGhlIG94aWRlLgo+Cj4gVGhhbmtzLAo+IEphc29uIFdoaXRl Cj4KPiAtLQo+IGh0dHA6Ly93d3cucGljbGlzdC5jb20vdGVjaHJlZi9waWNsaXN0IFBJQy9TWCBG QVEgJiBsaXN0IGFyY2hpdmUKPiBWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBh dAo+IGh0dHA6Ly9tYWlsbWFuLm1pdC5lZHUvbWFpbG1hbi9saXN0aW5mby9waWNsaXN0Cj4KCgot LSAKSmFzb24gV2hpdGUKLS0gCmh0dHA6Ly93d3cucGljbGlzdC5jb20vdGVjaHJlZi9waWNsaXN0 IFBJQy9TWCBGQVEgJiBsaXN0IGFyY2hpdmUKVmlldy9jaGFuZ2UgeW91ciBtZW1iZXJzaGlwIG9w dGlvbnMgYXQKaHR0cDovL21haWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QK .