SW50cm8KPT09PT0KClRoaXMgZG9jdW1lbnQgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGxpc3Qgb2YgdGhlIG1pbmltdW0gbGV2ZWxzIG9mCnNvZnR3YXJlIG5lY2Vzc2FyeSB0byBydW4gdGhlIDIuNiBrZXJuZWxzLCBhcyB3ZWxsIGFzIHByb3ZpZGUgYnJpZWYKaW5zdHJ1Y3Rpb25zIHJlZ2FyZGluZyBhbnkgb3RoZXIgIkdvdGNoYXMiIHVzZXJzIG1heSBlbmNvdW50ZXIgd2hlbgp0cnlpbmcgbGlmZSBvbiB0aGUgQmxlZWRpbmcgRWRnZS4gIElmIHVwZ3JhZGluZyBmcm9tIGEgcHJlLTIuNC54Cmtlcm5lbCwgcGxlYXNlIGNvbnN1bHQgdGhlIENoYW5nZXMgZmlsZSBpbmNsdWRlZCB3aXRoIDIuNC54IGtlcm5lbHMgZm9yCmFkZGl0aW9uYWwgaW5mb3JtYXRpb247IG1vc3Qgb2YgdGhhdCBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSByZXBlYXRlZApoZXJlLiAgQmFzaWNhbGx5LCB0aGlzIGRvY3VtZW50IGFzc3VtZXMgdGhhdCB5b3VyIHN5c3RlbSBpcyBhbHJlYWR5CmZ1bmN0aW9uYWwgYW5kIHJ1bm5pbmcgYXQgbGVhc3QgMi40Lngga2VybmVscy4KClRoaXMgZG9jdW1lbnQgaXMgb3JpZ2luYWxseSBiYXNlZCBvbiBteSAiQ2hhbmdlcyIgZmlsZSBmb3IgMi4wLngga2VybmVscwphbmQgdGhlcmVmb3JlIG93ZXMgY3JlZGl0IHRvIHRoZSBzYW1lIHBlb3BsZSBhcyB0aGF0IGZpbGUgKEphcmVkIE1hdWNoLApBeGVsIEJvbGR0LCBBbGVzc2FuZHJvIFNpZ2FsYSwgYW5kIGNvdW50bGVzcyBvdGhlciB1c2VycyBhbGwgb3ZlciB0aGUKJ25ldCkuCgpUaGUgbGF0ZXN0IHJldmlzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIGluIHZhcmlvdXMgZm9ybWF0cywgY2FuIGFsd2F5cwpiZSBmb3VuZCBhdCA8aHR0cDovL2N5YmVyYnV6ei5nYXRlY2guZWR1L2thYm9vbS9saW51eC9DaGFuZ2VzLTIuNC8+LgoKRmVlbCBmcmVlIHRvIHRyYW5zbGF0ZSB0aGlzIGRvY3VtZW50LiAgSWYgeW91IGRvIHNvLCBwbGVhc2Ugc2VuZCBtZSBhClVSTCB0byB5b3VyIHRyYW5zbGF0aW9uIGZvciBpbmNsdXNpb24gaW4gZnV0dXJlIHJldmlzaW9ucyBvZiB0aGlzCmRvY3VtZW50LgoKU21vdHJpdGUgZmlsZSA8aHR0cDovL29ibG9tLnJuYy5ydS9saW51eC9rZXJuZWwvQ2hhbmdlcy5ydT4sIHlhdmx5YXVzaGlzeWEKcnVzc2tpbSBwZXJldm9kb20gZGFubm9nbyBkb2N1bWVudGEuCgpWaXNpdGUgPGh0dHA6Ly93d3cyLmFkaS51YW0uZXMvfmVuZGVyL3RlY25pY28vPiBwYXJhIG9idGVuZXIgbGEgdHJhZHVjY2nzbgphbCBlc3Bh8W9sIGRlIGVzdGUgZG9jdW1lbnRvIGVuIHZhcmlvcyBmb3JtYXRvcy4KCkVpbmUgZGV1dHNjaGUgVmVyc2lvbiBkaWVzZXIgRGF0ZWkgZmluZGVuIFNpZSB1bnRlcgo8aHR0cDovL3d3dy5zdGVmYW4td2ludGVyLmRlL0NoYW5nZXMtMi40LjAudHh0Pi4KCkNocmlzIFJpY2tlciAoa2Fib29tQGdhdGVjaC5lZHUgb3IgY2hyaXMucmlja2VyQGdlbmV0aWNzLnV0YWguZWR1KS4KCkN1cnJlbnQgTWluaW1hbCBSZXF1aXJlbWVudHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVXBncmFkZSB0byBhdCAqbGVhc3QqIHRoZXNlIHNvZnR3YXJlIHJldmlzaW9ucyBiZWZvcmUgdGhpbmtpbmcgeW91J3ZlCmVuY291bnRlcmVkIGEgYnVnISAgSWYgeW91J3JlIHVuc3VyZSB3aGF0IHZlcnNpb24geW91J3JlIGN1cnJlbnRseQpydW5uaW5nLCB0aGUgc3VnZ2VzdGVkIGNvbW1hbmQgc2hvdWxkIHRlbGwgeW91LgoKQWdhaW4sIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgbGlzdCBhc3N1bWVzIHlvdSBhcmUgYWxyZWFkeQpmdW5jdGlvbmFsbHkgcnVubmluZyBhIExpbnV4IDIuNCBrZXJuZWwuICBBbHNvLCBub3QgYWxsIHRvb2xzIGFyZQpuZWNlc3Nhcnkgb24gYWxsIHN5c3RlbXM7IG9idmlvdXNseSwgaWYgeW91IGRvbid0IGhhdmUgYW55IElTRE4KaGFyZHdhcmUsIGZvciBleGFtcGxlLCB5b3UgcHJvYmFibHkgbmVlZG4ndCBjb25jZXJuIHlvdXJzZWxmIHdpdGgKaXNkbjRrLXV0aWxzLgoKbyAgR251IEMgICAgICAgICAgICAgICAgICAzLjIgICAgICAgICAgICAgICAgICAgICAjIGdjYyAtLXZlcnNpb24KbyAgR251IG1ha2UgICAgICAgICAgICAgICAzLjc5LjEgICAgICAgICAgICAgICAgICAjIG1ha2UgLS12ZXJzaW9uCm8gIGJpbnV0aWxzICAgICAgICAgICAgICAgMi4xMiAgICAgICAgICAgICAgICAgICAgIyBsZCAtdgpvICB1dGlsLWxpbnV4ICAgICAgICAgICAgIDIuMTBvICAgICAgICAgICAgICAgICAgICMgZmRmb3JtYXQgLS12ZXJzaW9uCm8gIG1vZHVsZS1pbml0LXRvb2xzICAgICAgMC45LjEwICAgICAgICAgICAgICAgICAgIyBkZXBtb2QgLVYKbyAgZTJmc3Byb2dzICAgICAgICAgICAgICAxLjI5ICAgICAgICAgICAgICAgICAgICAjIHR1bmUyZnMKbyAgamZzdXRpbHMgICAgICAgICAgICAgICAxLjEuMyAgICAgICAgICAgICAgICAgICAjIGZzY2suamZzIC1WCm8gIHJlaXNlcmZzcHJvZ3MgICAgICAgICAgMy42LjMgICAgICAgICAgICAgICAgICAgIyByZWlzZXJmc2NrIC1WIDI+JjF8Z3JlcCByZWlzZXJmc3Byb2dzCm8gIHhmc3Byb2dzICAgICAgICAgICAgICAgMi42LjAgICAgICAgICAgICAgICAgICAgIyB4ZnNfZGIgLVYKbyAgcGNtY2lhdXRpbHMgICAgICAgICAgICAwMDQKbyAgcGNtY2lhLWNzICAgICAgICAgICAgICAzLjEuMjEgICAgICAgICAgICAgICAgICAjIGNhcmRtZ3IgLVYKbyAgcXVvdGEtdG9vbHMgICAgICAgICAgICAzLjA5ICAgICAgICAgICAgICAgICAgICAjIHF1b3RhIC1WCm8gIFBQUCAgICAgICAgICAgICAgICAgICAgMi40LjAgICAgICAgICAgICAgICAgICAgIyBwcHBkIC0tdmVyc2lvbgpvICBpc2RuNGstdXRpbHMgICAgICAgICAgIDMuMXByZTEgICAgICAgICAgICAgICAgICMgaXNkbmN0cmwgMj4mMXxncmVwIHZlcnNpb24KbyAgbmZzLXV0aWxzICAgICAgICAgICAgICAxLjAuNSAgICAgICAgICAgICAgICAgICAjIHNob3dtb3VudCAtLXZlcnNpb24KbyAgcHJvY3BzICAgICAgICAgICAgICAgICAzLjIuMCAgICAgICAgICAgICAgICAgICAjIHBzIC0tdmVyc2lvbgpvICBvcHJvZmlsZSAgICAgICAgICAgICAgIDAuOSAgICAgICAgICAgICAgICAgICAgICMgb3Byb2ZpbGVkIC0tdmVyc2lvbgpvICB1ZGV2ICAgICAgICAgICAgICAgICAgIDA3MSAgICAgICAgICAgICAgICAgICAgICMgdWRldmluZm8gLVYKCktlcm5lbCBjb21waWxhdGlvbgo9PT09PT09PT09PT09PT09PT0KCkdDQwotLS0KClRoZSBnY2MgdmVyc2lvbiByZXF1aXJlbWVudHMgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIENQVSBpbiB5b3VyCmNvbXB1dGVyLgoKTWFrZQotLS0tCgpZb3Ugd2lsbCBuZWVkIEdudSBtYWtlIDMuNzkuMSBvciBsYXRlciB0byBidWlsZCB0aGUga2VybmVsLgoKQmludXRpbHMKLS0tLS0tLS0KCkxpbnV4IG9uIElBLTMyIGhhcyByZWNlbnRseSBzd2l0Y2hlZCBmcm9tIHVzaW5nIGFzODYgdG8gdXNpbmcgZ2FzIGZvcgphc3NlbWJsaW5nIHRoZSAxNi1iaXQgYm9vdCBjb2RlLCByZW1vdmluZyB0aGUgbmVlZCBmb3IgYXM4NiB0byBjb21waWxlCnlvdXIga2VybmVsLiAgVGhpcyBjaGFuZ2UgZG9lcywgaG93ZXZlciwgbWVhbiB0aGF0IHlvdSBuZWVkIGEgcmVjZW50CnJlbGVhc2Ugb2YgYmludXRpbHMuCgpTeXN0ZW0gdXRpbGl0aWVzCj09PT09PT09PT09PT09PT0KCkFyY2hpdGVjdHVyYWwgY2hhbmdlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkRldkZTIGhhcyBiZWVuIG9ic29sZXRlZCBpbiBmYXZvdXIgb2YgdWRldgooaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy8pCgozMi1iaXQgVUlEIHN1cHBvcnQgaXMgbm93IGluIHBsYWNlLiAgSGF2ZSBmdW4hCgpMaW51eCBkb2N1bWVudGF0aW9uIGZvciBmdW5jdGlvbnMgaXMgdHJhbnNpdGlvbmluZyB0byBpbmxpbmUKZG9jdW1lbnRhdGlvbiB2aWEgc3BlY2lhbGx5LWZvcm1hdHRlZCBjb21tZW50cyBuZWFyIHRoZWlyCmRlZmluaXRpb25zIGluIHRoZSBzb3VyY2UuICBUaGVzZSBjb21tZW50cyBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUKU0dNTCB0ZW1wbGF0ZXMgaW4gdGhlIERvY3VtZW50YXRpb24vRG9jQm9vayBkaXJlY3RvcnkgdG8gbWFrZSBEb2NCb29rCmZpbGVzLCB3aGljaCBjYW4gdGhlbiBiZSBjb252ZXJ0ZWQgYnkgRG9jQm9vayBzdHlsZXNoZWV0cyB0byBQb3N0U2NyaXB0LApIVE1MLCBQREYgZmlsZXMsIGFuZCBzZXZlcmFsIG90aGVyIGZvcm1hdHMuICBJbiBvcmRlciB0byBjb252ZXJ0IGZyb20KRG9jQm9vayBmb3JtYXQgdG8gYSBmb3JtYXQgb2YgeW91ciBjaG9pY2UsIHlvdSdsbCBuZWVkIHRvIGluc3RhbGwgSmFkZSBhcwp3ZWxsIGFzIHRoZSBkZXNpcmVkIERvY0Jvb2sgc3R5bGVzaGVldHMuCgpVdGlsLWxpbnV4Ci0tLS0tLS0tLS0KCk5ldyB2ZXJzaW9ucyBvZiB1dGlsLWxpbnV4IHByb3ZpZGUgKmZkaXNrIHN1cHBvcnQgZm9yIGxhcmdlciBkaXNrcywKc3VwcG9ydCBuZXcgb3B0aW9ucyB0byBtb3VudCwgcmVjb2duaXplIG1vcmUgc3VwcG9ydGVkIHBhcnRpdGlvbgp0eXBlcywgaGF2ZSBhIGZkZm9ybWF0IHdoaWNoIHdvcmtzIHdpdGggMi40IGtlcm5lbHMsIGFuZCBzaW1pbGFyIGdvb2RpZXMuCllvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVwZ3JhZGUuCgpLc3ltb29wcwotLS0tLS0tLQoKSWYgdGhlIHVudGhpbmthYmxlIGhhcHBlbnMgYW5kIHlvdXIga2VybmVsIG9vcHNlcywgeW91IG1heSBuZWVkIHRoZQprc3ltb29wcyB0b29sIHRvIGRlY29kZSBpdCwgYnV0IGluIG1vc3QgY2FzZXMgeW91IGRvbid0LgpJbiB0aGUgMi42IGtlcm5lbCBpdCBpcyBnZW5lcmFsbHkgcHJlZmVycmVkIHRvIGJ1aWxkIHRoZSBrZXJuZWwgd2l0aApDT05GSUdfS0FMTFNZTVMgc28gdGhhdCBpdCBwcm9kdWNlcyByZWFkYWJsZSBkdW1wcyB0aGF0IGNhbiBiZSB1c2VkIGFzLWlzCih0aGlzIGFsc28gcHJvZHVjZXMgYmV0dGVyIG91dHB1dCB0aGFuIGtzeW1vb3BzKS4KSWYgZm9yIHNvbWUgcmVhc29uIHlvdXIga2VybmVsIGlzIG5vdCBidWlsZCB3aXRoIENPTkZJR19LQUxMU1lNUyBhbmQKeW91IGhhdmUgbm8gd2F5IHRvIHJlYnVpbGQgYW5kIHJlcHJvZHVjZSB0aGUgT29wcyB3aXRoIHRoYXQgb3B0aW9uLCB0aGVuCnlvdSBjYW4gc3RpbGwgZGVjb2RlIHRoYXQgT29wcyB3aXRoIGtzeW1vb3BzLgoKTW9kdWxlLUluaXQtVG9vbHMKLS0tLS0tLS0tLS0tLS0tLS0KCkEgbmV3IG1vZHVsZSBsb2FkZXIgaXMgbm93IGluIHRoZSBrZXJuZWwgdGhhdCByZXF1aXJlcyBtb2R1bGUtaW5pdC10b29scwp0byB1c2UuICBJdCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIDIuNC54IHNlcmllcyBrZXJuZWxzLgoKTWtpbml0cmQKLS0tLS0tLS0KClRoZXNlIGNoYW5nZXMgdG8gdGhlIC9saWIvbW9kdWxlcyBmaWxlIHRyZWUgbGF5b3V0IGFsc28gcmVxdWlyZSB0aGF0Cm1raW5pdHJkIGJlIHVwZ3JhZGVkLgoKRTJmc3Byb2dzCi0tLS0tLS0tLQoKVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGUyZnNwcm9ncyBmaXhlcyBzZXZlcmFsIGJ1Z3MgaW4gZnNjayBhbmQKZGVidWdmcy4gIE9idmlvdXNseSwgaXQncyBhIGdvb2QgaWRlYSB0byB1cGdyYWRlLgoKSkZTdXRpbHMKLS0tLS0tLS0KClRoZSBqZnN1dGlscyBwYWNrYWdlIGNvbnRhaW5zIHRoZSB1dGlsaXRpZXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KVGhlIGZvbGxvd2luZyB1dGlsaXRpZXMgYXJlIGF2YWlsYWJsZToKbyBmc2NrLmpmcyAtIGluaXRpYXRlIHJlcGxheSBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLCBhbmQgY2hlY2sKICBhbmQgcmVwYWlyIGEgSkZTIGZvcm1hdHRlZCBwYXJ0aXRpb24uCm8gbWtmcy5qZnMgLSBjcmVhdGUgYSBKRlMgZm9ybWF0dGVkIHBhcnRpdGlvbi4KbyBvdGhlciBmaWxlIHN5c3RlbSB1dGlsaXRpZXMgYXJlIGFsc28gYXZhaWxhYmxlIGluIHRoaXMgcGFja2FnZS4KClJlaXNlcmZzcHJvZ3MKLS0tLS0tLS0tLS0tLQoKVGhlIHJlaXNlcmZzcHJvZ3MgcGFja2FnZSBzaG91bGQgYmUgdXNlZCBmb3IgcmVpc2VyZnMtMy42LngKKExpbnV4IGtlcm5lbHMgMi40LngpLiBJdCBpcyBhIGNvbWJpbmVkIHBhY2thZ2UgYW5kIGNvbnRhaW5zIHdvcmtpbmcKdmVyc2lvbnMgb2YgbWtyZWlzZXJmcywgcmVzaXplX3JlaXNlcmZzLCBkZWJ1Z3JlaXNlcmZzIGFuZApyZWlzZXJmc2NrLiBUaGVzZSB1dGlscyB3b3JrIG9uIGJvdGggaTM4NiBhbmQgYWxwaGEgcGxhdGZvcm1zLgoKWGZzcHJvZ3MKLS0tLS0tLS0KClRoZSBsYXRlc3QgdmVyc2lvbiBvZiB4ZnNwcm9ncyBjb250YWlucyBta2ZzLnhmcywgeGZzX2RiLCBhbmQgdGhlCnhmc19yZXBhaXIgdXRpbGl0aWVzLCBhbW9uZyBvdGhlcnMsIGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uICBJdCBpcwphcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgYW5kIGFueSB2ZXJzaW9uIGZyb20gMi4wLjAgb253YXJkIHNob3VsZAp3b3JrIGNvcnJlY3RseSB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgWEZTIGtlcm5lbCBjb2RlICgyLjYuMCBvcgpsYXRlciBpcyByZWNvbW1lbmRlZCwgZHVlIHRvIHNvbWUgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzKS4KClBDTUNJQXV0aWxzCi0tLS0tLS0tLS0tCgpQQ01DSUF1dGlscyByZXBsYWNlcyBwY21jaWEtY3MgKHNlZSBiZWxvdykuIEl0IHByb3Blcmx5IHNldHMgdXAKUENNQ0lBIHNvY2tldHMgYXQgc3lzdGVtIHN0YXJ0dXAgYW5kIGxvYWRzIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGVzCmZvciAxNi1iaXQgUENNQ0lBIGRldmljZXMgaWYgdGhlIGtlcm5lbCBpcyBtb2R1bGFyaXplZCBhbmQgdGhlIGhvdHBsdWcKc3Vic3lzdGVtIGlzIHVzZWQuCgpQY21jaWEtY3MKLS0tLS0tLS0tCgpQQ01DSUEgKFBDIENhcmQpIHN1cHBvcnQgaXMgbm93IHBhcnRpYWxseSBpbXBsZW1lbnRlZCBpbiB0aGUgbWFpbgprZXJuZWwgc291cmNlLiBUaGUgInBjbWNpYXV0aWxzIiBwYWNrYWdlIChzZWUgYWJvdmUpIHJlcGxhY2VzIHBjbWNpYS1jcwpmb3IgbmV3ZXN0IGtlcm5lbHMuCgpRdW90YS10b29scwotLS0tLS0tLS0tLQoKU3VwcG9ydCBmb3IgMzIgYml0IHVpZCdzIGFuZCBnaWQncyBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UKdGhlIG5ld2VyIHZlcnNpb24gMiBxdW90YSBmb3JtYXQuICBRdW90YS10b29scyB2ZXJzaW9uIDMuMDcgYW5kCm5ld2VyIGhhcyB0aGlzIHN1cHBvcnQuICBVc2UgdGhlIHJlY29tbWVuZGVkIHZlcnNpb24gb3IgbmV3ZXIKZnJvbSB0aGUgdGFibGUgYWJvdmUuCgpJbnRlbCBJQTMyIG1pY3JvY29kZQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKQSBkcml2ZXIgaGFzIGJlZW4gYWRkZWQgdG8gYWxsb3cgdXBkYXRpbmcgb2YgSW50ZWwgSUEzMiBtaWNyb2NvZGUsCmFjY2Vzc2libGUgYXMgYm90aCBhIGRldmZzIHJlZ3VsYXIgZmlsZSBhbmQgYXMgYSBub3JtYWwgKG1pc2MpCmNoYXJhY3RlciBkZXZpY2UuICBJZiB5b3UgYXJlIG5vdCB1c2luZyBkZXZmcyB5b3UgbWF5IG5lZWQgdG86Cgpta2RpciAvZGV2L2NwdQpta25vZCAvZGV2L2NwdS9taWNyb2NvZGUgYyAxMCAxODQKY2htb2QgMDY0NCAvZGV2L2NwdS9taWNyb2NvZGUKCmFzIHJvb3QgYmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMuICBZb3UnbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvCmdldCB0aGUgdXNlci1zcGFjZSBtaWNyb2NvZGVfY3RsIHV0aWxpdHkgdG8gdXNlIHdpdGggdGhpcy4KClBvd2VydHdlYWsKLS0tLS0tLS0tLQoKSWYgeW91IGFyZSBydW5uaW5nIHYwLjEuMTcgb3IgZWFybGllciwgeW91IHNob3VsZCB1cGdyYWRlIHRvCnZlcnNpb24gdjAuOTkuMCBvciBoaWdoZXIuIFJ1bm5pbmcgb2xkIHZlcnNpb25zIG1heSBjYXVzZSBwcm9ibGVtcwp3aXRoIHByb2dyYW1zIHVzaW5nIHNoYXJlZCBtZW1vcnkuCgp1ZGV2Ci0tLS0KdWRldiBpcyBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBmb3IgcG9wdWxhdGluZyAvZGV2IGR5bmFtaWNhbGx5IHdpdGgKb25seSBlbnRyaWVzIGZvciBkZXZpY2VzIGFjdHVhbGx5IHByZXNlbnQuIHVkZXYgcmVwbGFjZXMgZGV2ZnMuCgpGVVNFCi0tLS0KCk5lZWRzIGxpYmZ1c2UgMi40LjAgb3IgbGF0ZXIuICBBYnNvbHV0ZSBtaW5pbXVtIGlzIDIuMy4wIGJ1dCBtb3VudApvcHRpb25zICdkaXJlY3RfaW8nIGFuZCAna2VybmVsX2NhY2hlJyB3b24ndCB3b3JrLgoKTmV0d29ya2luZwo9PT09PT09PT09CgpHZW5lcmFsIGNoYW5nZXMKLS0tLS0tLS0tLS0tLS0tCgpJZiB5b3UgaGF2ZSBhZHZhbmNlZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gbmVlZHMsIHlvdSBzaG91bGQgcHJvYmFibHkKY29uc2lkZXIgdXNpbmcgdGhlIG5ldHdvcmsgdG9vbHMgZnJvbSBpcC1yb3V0ZTIuCgpQYWNrZXQgRmlsdGVyIC8gTkFUCi0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlIHBhY2tldCBmaWx0ZXJpbmcgYW5kIE5BVCBjb2RlIHVzZXMgdGhlIHNhbWUgdG9vbHMgbGlrZSB0aGUgcHJldmlvdXMgMi40LngKa2VybmVsIHNlcmllcyAoaXB0YWJsZXMpLiAgSXQgc3RpbGwgaW5jbHVkZXMgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgbW9kdWxlcwpmb3IgMi4yLngtc3R5bGUgaXBjaGFpbnMgYW5kIDIuMC54LXN0eWxlIGlwZndhZG0uCgpQUFAKLS0tCgpUaGUgUFBQIGRyaXZlciBoYXMgYmVlbiByZXN0cnVjdHVyZWQgdG8gc3VwcG9ydCBtdWx0aWxpbmsgYW5kIHRvCmVuYWJsZSBpdCB0byBvcGVyYXRlIG92ZXIgZGl2ZXJzZSBtZWRpYSBsYXllcnMuICBJZiB5b3UgdXNlIFBQUCwKdXBncmFkZSBwcHBkIHRvIGF0IGxlYXN0IDIuNC4wLgoKSWYgeW91IGFyZSBub3QgdXNpbmcgZGV2ZnMsIHlvdSBtdXN0IGhhdmUgdGhlIGRldmljZSBmaWxlIC9kZXYvcHBwCndoaWNoIGNhbiBiZSBtYWRlIGJ5OgoKbWtub2QgL2Rldi9wcHAgYyAxMDggMAoKYXMgcm9vdC4KCklmIHlvdSB1c2UgZGV2ZnNkIGFuZCBidWlsZCBwcHAgc3VwcG9ydCBhcyBtb2R1bGVzLCB5b3Ugd2lsbCBuZWVkCnRoZSBmb2xsb3dpbmcgaW4geW91ciAvZXRjL2RldmZzZC5jb25mIGZpbGU6CgpMT09LVVAJUFBQCU1PRExPQUQKCklzZG40ay11dGlscwotLS0tLS0tLS0tLS0KCkR1ZSB0byBjaGFuZ2VzIGluIHRoZSBsZW5ndGggb2YgdGhlIHBob25lIG51bWJlciBmaWVsZCwgaXNkbjRrLXV0aWxzCm5lZWRzIHRvIGJlIHJlY29tcGlsZWQgb3IgKHByZWZlcmFibHkpIHVwZ3JhZGVkLgoKTkZTLXV0aWxzCi0tLS0tLS0tLQoKSW4gMi40IGFuZCBlYXJsaWVyIGtlcm5lbHMsIHRoZSBuZnMgc2VydmVyIG5lZWRlZCB0byBrbm93IGFib3V0IGFueQpjbGllbnQgdGhhdCBleHBlY3RlZCB0byBiZSBhYmxlIHRvIGFjY2VzcyBmaWxlcyB2aWEgTkZTLiAgVGhpcwppbmZvcm1hdGlvbiB3b3VsZCBiZSBnaXZlbiB0byB0aGUga2VybmVsIGJ5ICJtb3VudGQiIHdoZW4gdGhlIGNsaWVudAptb3VudGVkIHRoZSBmaWxlc3lzdGVtLCBvciBieSAiZXhwb3J0ZnMiIGF0IHN5c3RlbSBzdGFydHVwLiAgZXhwb3J0ZnMKd291bGQgdGFrZSBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmUgY2xpZW50cyBmcm9tIC92YXIvbGliL25mcy9ybXRhYi4KClRoaXMgYXBwcm9hY2ggaXMgcXVpdGUgZnJhZ2lsZSBhcyBpdCBkZXBlbmRzIG9uIHJtdGFiIGJlaW5nIGNvcnJlY3QKd2hpY2ggaXMgbm90IGFsd2F5cyBlYXN5LCBwYXJ0aWN1bGFybHkgd2hlbiB0cnlpbmcgdG8gaW1wbGVtZW50CmZhaWwtb3Zlci4gIEV2ZW4gd2hlbiB0aGUgc3lzdGVtIGlzIHdvcmtpbmcgd2VsbCwgcm10YWIgc3VmZmVycyBmcm9tCmdldHRpbmcgbG90cyBvZiBvbGQgZW50cmllcyB0aGF0IG5ldmVyIGdldCByZW1vdmVkLgoKV2l0aCAyLjYgd2UgaGF2ZSB0aGUgb3B0aW9uIG9mIGhhdmluZyB0aGUga2VybmVsIHRlbGwgbW91bnRkIHdoZW4gaXQKZ2V0cyBhIHJlcXVlc3QgZnJvbSBhbiB1bmtub3duIGhvc3QsIGFuZCBtb3VudGQgY2FuIGdpdmUgYXBwcm9wcmlhdGUKZXhwb3J0IGluZm9ybWF0aW9uIHRvIHRoZSBrZXJuZWwuICBUaGlzIHJlbW92ZXMgdGhlIGRlcGVuZGVuY3kgb24Kcm10YWIgYW5kIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBvbmx5IG5lZWRzIHRvIGtub3cgYWJvdXQgY3VycmVudGx5CmFjdGl2ZSBjbGllbnRzLgoKVG8gZW5hYmxlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHlvdSBuZWVkIHRvOgoKICBtb3VudCAtdCBuZnNkIG5mc2QgL3Byb2MvZnMvbmZzCgpiZWZvcmUgcnVubmluZyBleHBvcnRmcyBvciBtb3VudGQuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCBORlMKc2VydmljZXMgYmUgcHJvdGVjdGVkIGZyb20gdGhlIGludGVybmV0LWF0LWxhcmdlIGJ5IGEgZmlyZXdhbGwgd2hlcmUKdGhhdCBpcyBwb3NzaWJsZS4KCkdldHRpbmcgdXBkYXRlZCBzb2Z0d2FyZQo9PT09PT09PT09PT09PT09PT09PT09PT0KCktlcm5lbCBjb21waWxhdGlvbgoqKioqKioqKioqKioqKioqKioKCmdjYwotLS0KbyAgPGZ0cDovL2Z0cC5nbnUub3JnL2dudS9nY2MvPgoKTWFrZQotLS0tCm8gIDxmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbWFrZS8+CgpCaW51dGlscwotLS0tLS0tLQpvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2RldmVsL2JpbnV0aWxzLz4KClN5c3RlbSB1dGlsaXRpZXMKKioqKioqKioqKioqKioqKgoKVXRpbC1saW51eAotLS0tLS0tLS0tCm8gIDxmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC8+CgpLc3ltb29wcwotLS0tLS0tLQpvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9rc3ltb29wcy92Mi40Lz4KCk1vZHVsZS1Jbml0LVRvb2xzCi0tLS0tLS0tLS0tLS0tLS0tCm8gIDxmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9ydXN0eS9tb2R1bGVzLz4KCk1raW5pdHJkCi0tLS0tLS0tCm8gIDxmdHA6Ly9yYXdoaWRlLnJlZGhhdC5jb20vcHViL3Jhd2hpZGUvU1JQTVMvU1JQTVMvPgoKRTJmc3Byb2dzCi0tLS0tLS0tLQpvICA8aHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9lMmZzcHJvZ3MvZTJmc3Byb2dzLTEuMjkudGFyLmd6PgoKSkZTdXRpbHMKLS0tLS0tLS0KbyAgPGh0dHA6Ly9qZnMuc291cmNlZm9yZ2UubmV0Lz4KClJlaXNlcmZzcHJvZ3MKLS0tLS0tLS0tLS0tLQpvICA8aHR0cDovL3d3dy5uYW1lc3lzLmNvbS9wdWIvcmVpc2VyZnNwcm9ncy9yZWlzZXJmc3Byb2dzLTMuNi4zLnRhci5nej4KClhmc3Byb2dzCi0tLS0tLS0tCm8gIDxmdHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvZG93bmxvYWQvPgoKUGNtY2lhdXRpbHMKLS0tLS0tLS0tLS0KbyAgPGZ0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvcGNtY2lhLz4KClBjbWNpYS1jcwotLS0tLS0tLS0KbyAgPGh0dHA6Ly9wY21jaWEtY3Muc291cmNlZm9yZ2UubmV0Lz4KClF1b3RhLXRvb2xzCi0tLS0tLS0tLS0KbyAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS8+CgpEb2NCb29rIFN0eWxlc2hlZXRzCi0tLS0tLS0tLS0tLS0tLS0tLS0KbyAgPGh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2svZHNzc2wvPgoKWE1MVE8gWFNMVCBGcm9udGVuZAotLS0tLS0tLS0tLS0tLS0tLS0tCm8gIDxodHRwOi8vY3liZXJlbGsubmV0L3RpbS94bWx0by8+CgpJbnRlbCBQNiBtaWNyb2NvZGUKLS0tLS0tLS0tLS0tLS0tLS0tCm8gIDxodHRwOi8vd3d3LnVyYmFubXl0aC5vcmcvbWljcm9jb2RlLz4KClBvd2VydHdlYWsKLS0tLS0tLS0tLQpvICA8aHR0cDovL3Bvd2VydHdlYWsuc291cmNlZm9yZ2UubmV0Lz4KCnVkZXYKLS0tLQpvIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYuaHRtbD4KCkZVU0UKLS0tLQpvIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2Z1c2U+CgpOZXR3b3JraW5nCioqKioqKioqKioKClBQUAotLS0KbyAgPGZ0cDovL2Z0cC5zYW1iYS5vcmcvcHViL3BwcC9wcHAtMi40LjAudGFyLmd6PgoKSXNkbjRrLXV0aWxzCi0tLS0tLS0tLS0tLQpvICA8ZnRwOi8vZnRwLmlzZG40bGludXguZGUvcHViL2lzZG40bGludXgvdXRpbHMvaXNkbjRrLXV0aWxzLnYzLjFwcmUxLnRhci5nej4KCk5GUy11dGlscwotLS0tLS0tLS0KbyAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTE0PgoKSXB0YWJsZXMKLS0tLS0tLS0KbyAgPGh0dHA6Ly93d3cuaXB0YWJsZXMub3JnL2Rvd25sb2Fkcy5odG1sPgoKSXAtcm91dGUyCi0tLS0tLS0tLQpvICA8ZnRwOi8vZnRwLnR1eC5vcmcvcHViL25ldC9pcC1yb3V0aW5nL2lwcm91dGUyLTIuMi40LW5vdy1zczk5MTAyMy50YXIuZ3o+CgpPUHJvZmlsZQotLS0tLS0tLQpvICA8aHR0cDovL29wcm9maWxlLnNmLm5ldC9kb3dubG9hZC8+CgpORlMtVXRpbHMKLS0tLS0tLS0tCm8gIDxodHRwOi8vbmZzLnNvdXJjZWZvcmdlLm5ldC8+Cgo=